cmdr
Check-in [5a6408a944]
Not logged in
Bounty program for improvements to Tcl and certain Tcl packages.

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Continued the dev-guide in general, and completion internals in particular. Added draft diagram code for sequence diagrams. Snarfed from my 2012 kinetcl paper. Has to be modded for the completions. Todo: Document standard help formats, and how to write formats. Todo: Back-reference from the package docs to the completion internals.
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1:5a6408a944db24c6814596e6ee2876353163cbbe
User & Date: aku 2013-11-27 07:55:59
Context
2013-11-27
18:25
Added back-references from packages to the devguide for command-line completion. check-in: f7695638e8 user: andreask tags: trunk
07:55
Continued the dev-guide in general, and completion internals in particular. Added draft diagram code for sequence diagrams. Snarfed from my 2012 kinetcl paper. Has to be modded for the completions. Todo: Document standard help formats, and how to write formats. Todo: Back-reference from the package docs to the completion internals. check-in: 5a6408a944 user: aku tags: trunk
01:15
Draft work on internal workings of the command line completion. check-in: a1c106f24e user: andreask tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Name change from doc/complete.man to doc/cmdr_dev_completion.man.

1
2
3
4
5
6
7
8
9
10
11

12
13
14
15
16
17


18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
[comment {-*- tcl -*- doctools manpage}]
[include parts/definitions.inc]
[manpage_begin [vset PROJECT] [vset MAN_SECTION] [vset VERSION]]
[include parts/module.inc]
[require cmdr]
[titledesc [vset TITLE_COMPLETE]]
[description]
[include parts/welcome.inc]

This internal document describes how the framework performs
command-line completion, in both main and mini shells, plus the

relevant data structures and methods.

[para] For more information about the framework's internals please
read [term [vset TITLE_DEV]].

[comment {************************************************************}]


[section {Main Shell}]

[package cmdr::officer] implements the [term {main shell}].

[para] This shell accepts the names of all sub-ordinate commands known
to the officer as commands.

[para] It may additional accept a hard-wired command [cmd .exit],
depending on the parse state (see flag [const doexit]).


[para] The main shell's repl core calls on the instance method
[method complete] for command-line completion.

[para] This method uses the standard [method parse-line] method of its
own [package cmdr::actor] base-class to get the standard parsing
structure used within the framework and then delegates to the instance
method [method complete-words].

[para] Note: The details of the state structure generated by
[method parse-line] and then taken by [method complete-words] are
explained in section [sectref {Parse State}]. Read it before trying to
follow the rules.

[para] [method complete-words] then applies the following rules:


[list_begin enumerated]

[enum] In case of syntax error return an empty list (no completion).

[enum] For an empty command line return all commands, and all commands
	known to the default subordinate, if any.

[enum] If the [term {current word}] (as per [const at]) is not the
	last word, treat it as the name of the sub-ordinate command
	responsible for handling the remaining words and delegate
	completion to it, advancing the current word as needed.

[para] No completion is done if the word does not yield a command to
	delegate to (unknown or ambigous). If a default command is known
	this case will delegate to that.

[para] When recursing in this way the subordinate command will see
	"[const doexit] == [const false]".

[para] If the subordinate is again an officer it will proceed
	using this same set of rules. A [term private] on the other
	hand has its own set of rules, explained below.

[enum] If the [term {current word}] is the last word on the command
	line then completion is done using the set of commands known
	to the officer and its default sub-ordinate, if any.

	No recursion takes place.
[list_end]

[para] When the recursion described above enters a [term private]
command the recursion ends and all remaining arguments are processed
to determine the set of parameters responsible for completion of the
last word.

[para] This is similar to the argument parsing done ... todo ...


[comment { @ EDIT: --- todo --- sequence diagram main shell completion }]


[comment {************************************************************}]
[section {Mini Shell}]

[package cmdr::config] implements the [term {mini shell}].

[para] This shell accepts the [term system] names of all parameters
held by the config instance as commands, all taking a single value as
their argument, the string value of the parameter indicated by the
command name itself.

[para] It additional accepts five hard-wired commands to control exit
conditions and access to help.

These commands all start with a [const .] and do not take any
arguments at all. They are, in alphabetical order, [const .cancel],
[const .exit], [const .help] [const .ok], and [const .run].

[para] The mini shell's repl core calls on the instance method
[method complete] for command-line completion.

[para] This method uses the standard [method parse-line] method of the
[package cmdr::actor] base-class of the context (a
[package cmdr::private] instance) to get the standard parsing
structure used within the framework and then delegates to the instance
method [method complete-repl].

[para] [method complete-rel] then applies the following rules:

[list_begin enumerated]

[enum] In case of syntax error return an empty list (no completion).

[enum] For an empty command line return all commands.

[enum] For a partial single word return all matching commands.

[enum] For a command containing more than two words no further
	completion is possible, return an empty list.

[enum] After a full single word delegate completion to the
	[package cmdr::parameter] instance indicated by the
	first word and return its results. The relevant
	method is [method complete-words].

[para] No completion is done if the first word does not yield
        a parameter to delegate to (unknown or ambigous), or
	if it is a presence option, which does not take an argument.

[para] The parameter essentially only extracts the word to complete
	from the state structure and then delegates to the validation
	type (method [method complete]) for actual completion.

[list_end]

[para] Note: The details of the state structure generated by
[method parse-line] and then taken by [method complete-repl] are
explained in section [sectref {Parse State}].

[comment { @ EDIT: --- todo --- sequence diagram mini shell completion }]


[comment {************************************************************}]
[section {Parse State}]

The state structure used by all methods relevant to command line
completion is a dictionary containing the six keys list below.

Its only generator is method [method parse-line] of base-class
[package cmdr::actor], all others parts of the system then only read
and manipulate it.

[list_begin definitions]
[def [const ok]]
A boolean flag. [const true] indicates that the [const line] parsed
sucessfully into words. [const false] indicates a syntax error.

[para] The framework expects basic shell syntax with space-separated
words using single- and double-quotes for words containing whitespace
themselves. Note that complex syntax like variable- and
command-substitutions are not allowed.

[def [const line]]
A copy of the unparsed command line.

[def [const words]]

The command [const line] parsed into the bare words. The data is not
valid if [const ok] indicates a parsing error. This is not a list of
strings, but actually a list of tokens.

[para] Each token is a list of four elements containing, in the order
below:

[list_begin enumerated]
[enum] Type of the token (implicitly specifies found quoting).
[enum] Start index of token in [const line] including quoting.
[enum] End index of token in [const line], including quoting.
[enum] The string value of the token, with escapes fully resolved.
	I.e. the actual word.
[list_end]

[para] Note: If [const line] ended in trailing whitespace the last
element of this list will be an empty string representing the word
started by the user, yet still empty.

[def [const nwords]]
The number of element in [const words]. The data is not valid if
[const ok] indicates a parsing error.

[def [const at]]
The index of the [term {current word}] in [const words] currently
considered by the completion code. Initially [const 0] this advances
as the completion code works through the prefix to determine the
context for the completion of the last word.

[def [const doexit]]
A boolean flag. Indicates if the pseudo-command [cmd .exit] is active
([const true]), or not. Initially [const true].

[list_end]

[include parts/feedback.inc]
[manpage_end]


|


|



|
|
>
|

|
|

<
>
>
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|

<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

18
19
20




































































21
22






















































































































23
24
[comment {-*- tcl -*- doctools manpage}]
[include parts/definitions.inc]
[manpage_begin [vset PROJECT]_completion [vset MAN_SECTION] [vset VERSION]]
[include parts/module.inc]
[require cmdr]
[titledesc [vset TITLE_DEV_COMPLETE]]
[description]
[include parts/welcome.inc]

This internal document provides an overview on how the framework
performs command-line completion in both the main and mini shells,
referencing all the relevant methods and describing the data
structures in use.

[para] For more information about other internals of the framework
please read [term [vset TITLE_DEV]].


[section {Code Overview}]        [include parts/completion_methods.inc]
[section {Parse State}]          [include parts/completion_state.inc]
[section {Main Shell Operation}] [include parts/completion_main.inc]




































































[section {Mini Shell Operation}] [include parts/completion_mini.inc]























































































































[include parts/feedback.inc]
[manpage_end]

Changes to doc/cmdr_howto_development.man.

55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82

83
84
85
86
87
88
89
90
91
92
93
94

95
96

97
98
99
100
101
102
103

104
105
106

107




108
109
110
[section {Demonstration/Example Applications}]

[vset PTITLE] (currently) does not have demonstrations, nor examples.

[comment @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]
[section {Directory structure}]

Explain the physical layout (directory structure).

[list_begin definitions]

[include parts/layout_standard.inc]

[def [file actor.tcl]]     == Package [package cmdr::actor].
[def [file cmdr.tcl]]      == Package [package cmdr].
[def [file config.tcl]]    == Package [package cmdr::config].
[def [file help.tcl]]      == Package [package cmdr::help].
[def [file help_json.tcl]] == Package [package cmdr::help::json].
[def [file help_sql.tcl]]  == Package [package cmdr::help::sql].
[def [file officer.tcl]]   == Package [package cmdr::officer].
[def [file parameter.tcl]] == Package [package cmdr::parameter].
[def [file private.tcl]]   == Package [package cmdr::private].
[def [file util.tcl]]      == Package [package cmdr::util].
[def [file validate.tcl]]  == Package [package cmdr::validate].
[def [file vcommon.tcl]]   == Package [package cmdr::validate::common].

[list_end]


[section {Extended Build Actions}]

[include parts/build-dev.inc]

[comment @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]
[section {Architecture & Concepts}]

The following sections explain

[list_begin enumerated]
[enum] the internal architecture and package dependencies.
[enum] the internal data structures.

[enum] important operation sequences (UML SD).
[list_end]


[subsection {System Architecture}]
[include parts/architecture.inc]
[comment { @EDIT Package dependencies (diagram) }]

[subsection {Data structures}]
[comment { @EDIT Explain data structures }]


[subsection {Operation Sequences}]
[comment { @EDIT Explain operation sequences }]






[include parts/related.inc]
[include parts/feedback.inc]
[manpage_end]







|


<


|
|
|
|
|
|
|
|
|
|
|
|
<


>

<





|

|
|
<
>
|
|
>

<
|
|

|
|
>

<
|
>

>
>
>
>



55
56
57
58
59
60
61
62
63
64

65
66
67
68
69
70
71
72
73
74
75
76
77
78

79
80
81
82

83
84
85
86
87
88
89
90
91

92
93
94
95
96

97
98
99
100
101
102
103

104
105
106
107
108
109
110
111
112
113
[section {Demonstration/Example Applications}]

[vset PTITLE] (currently) does not have demonstrations, nor examples.

[comment @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]
[section {Directory structure}]

The directory structure of the sources is as explained below:

[list_begin definitions]

[include parts/layout_standard.inc]

[def [file actor.tcl]]     Package [package cmdr::actor].
[def [file cmdr.tcl]]      Package [package cmdr].
[def [file config.tcl]]    Package [package cmdr::config].
[def [file help.tcl]]      Package [package cmdr::help].
[def [file help_json.tcl]] Package [package cmdr::help::json].
[def [file help_sql.tcl]]  Package [package cmdr::help::sql].
[def [file officer.tcl]]   Package [package cmdr::officer].
[def [file parameter.tcl]] Package [package cmdr::parameter].
[def [file private.tcl]]   Package [package cmdr::private].
[def [file util.tcl]]      Package [package cmdr::util].
[def [file validate.tcl]]  Package [package cmdr::validate].
[def [file vcommon.tcl]]   Package [package cmdr::validate::common].

[list_end]

[comment @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]
[section {Extended Build Actions}]

[include parts/build-dev.inc]

[comment @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]
[section {Architecture & Concepts}]

[include parts/architecture.inc]

[comment @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]
[section {Validation Types}]


Everything said in the public document [term [vset TITLE_DEV_VT]]
applies to the standard validation types of the framework (as listed
in [term [vset TITLE_VALIDATE]]) as well.


[comment @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]
[section {Help Formats}]

Everything said in the public document [term [vset TITLE_DEV_HF]]
applies to the standard help formats of the framework (as listed in
[term [vset TITLE_HELP_STD]]) as well.


[comment @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]
[section {Command Line Completion}]

The document [term [vset TITLE_DEV_COMPLETE]] describes the inner
workings of the command line completion provided by the framework.

[comment @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]
[include parts/related.inc]
[include parts/feedback.inc]
[manpage_end]

Added doc/figures/dsl_umlsequence.inc.

































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# -*- tcl -*- tcl.tk//DSL diagram//EN//1.0
## ====================================================================
## UML sequence diagram DSL, assembly level.

# Should have a grid parameter the others are based on.

set boxheight [10 mm]
set boxwidth  [30 mm]
set movelength [10 mm]

proc actor {code n {w {}}} {
    global $code
    if {$w eq ""} {
	upvar 1 boxwidth bw
	set w $bw
    }
    box "$n" width $w
    group { down ; line }
    move to [by [5 mm] e]
    set $code [last line end]
    return
}

proc skip {code} {
    global $code
    group { down ; line from [set $code] }
    set $code [last line end]
    return
}

proc action {code args} {
    global $code a$code
    box fillcolor white {*}$args with north at [set $code] width [3 mm] height [10 mm]
    set $code [last box south]
    set a$code [last box]
    return
}

proc label {code text} {
    global a$code
    text text $text with sw at [[set a$code] ne]
    return
}

proc call-up {from to label} {
    global a$from a$to
    arrow from [[set a$from] w] to [[set a$to] e] stroke 2
    text $label with sw at [[last arrow end] by [2 mm] e]
    return
}

proc call-down {from to label} {
    global a$from a$to
    arrow from [[set a$from] e] to [[set a$to] w] stroke 2
    text $label with se at [[last arrow end] by [2 mm] w]
    return
}

proc return-down {from to label} {
    global a$from a$to
    arrow from [[set a$from] e] to [[set a$to] w] dotted
    text $label with sw at [[last arrow start] by [2 mm] e]
    return
}

proc return-up {from to label} {
    global a$from a$to
    arrow from [[set a$from] w] to [[set a$to] e] dotted
    text $label with se at [[last arrow start] by [2 mm] w]
    return
}

proc stop {code} {
    global $code
    skip $code
    circle with center at [set $code] radius [1 mm] fillcolor black
    return
}

## ====================================================================

Added doc/figures/main-shell.dia.



























































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# -*- tcl -*- tcl.tk//DSL diagram//EN//1.0
## DSL for uml sequences. Draft.

source [file join [file dirname [file normalize [info script]]] dsl_umlsequence.inc]

## ====================================================================

actor kn "known"            [20 mm]
actor kv "kinetcl::Valid"
actor cb "BASE"             [20 mm]
actor cv "kinetcl_validate" [35 mm]
actor cf "framesync"        [25 mm]
actor co "context"          [20 mm]

action  cf
label   cf can-sync-with(node)
action  cv
call-up cf cv "invoke"
action  kv
call-up cv kv "invoke"
action  kn
call-up kv kn "dict exists"

action kn
action kv
return-down kn kv true

skip   cb
action cb
call-down kv cb "@mark"

skip co
action co
call-down cb co "save handle"

action co
action cb
return-up co cb ""
action kv
return-up cb kv ""

action kv
action cv dashed fillcolor {}
action cv dashed fillcolor {}
action cv
return-down kv cv "TCL_OK"
action co
call-down cv co "get handle"
action co
action cv
return-up co cv "handle"

action cv
action cf dashed fillcolor {}
action cf dashed fillcolor {}
action cf dashed fillcolor {}
action cf dashed fillcolor {}
action cf
return-down cv cf "TCL_OK, handle"

# sync heights...

skip co
skip cb
skip cb
skip cb
skip kv
skip kv
skip kn
skip kn
skip kn
skip kn
stop co
stop cb
stop cf
stop cv
stop kv
stop kn

# close timelines

line \
    from [$kn by [10 mm] w] \
    to   [$co by [10 mm] e]

# outside annotation ... need symbolic locations.

set p [[0.5 between [2nd box ne] [3rd box nw]] by [5 mm] n]
line dashed \
    from $p \
    to   [[$p | $cb] by [5 mm] down]
text text C   with w at [last line start]
text text Tcl with e at [last line start]

Added doc/figures/mini-shell.dia.



























































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# -*- tcl -*- tcl.tk//DSL diagram//EN//1.0
## DSL for uml sequences. Draft.

source [file join [file dirname [file normalize [info script]]] dsl_umlsequence.inc]

## ====================================================================

actor kn "known"            [20 mm]
actor kv "kinetcl::Valid"
actor cb "BASE"             [20 mm]
actor cv "kinetcl_validate" [35 mm]
actor cf "framesync"        [25 mm]
actor co "context"          [20 mm]

action  cf
label   cf can-sync-with(node)
action  cv
call-up cf cv "invoke"
action  kv
call-up cv kv "invoke"
action  kn
call-up kv kn "dict exists"

action kn
action kv
return-down kn kv true

skip   cb
action cb
call-down kv cb "@mark"

skip co
action co
call-down cb co "save handle"

action co
action cb
return-up co cb ""
action kv
return-up cb kv ""

action kv
action cv dashed fillcolor {}
action cv dashed fillcolor {}
action cv
return-down kv cv "TCL_OK"
action co
call-down cv co "get handle"
action co
action cv
return-up co cv "handle"

action cv
action cf dashed fillcolor {}
action cf dashed fillcolor {}
action cf dashed fillcolor {}
action cf dashed fillcolor {}
action cf
return-down cv cf "TCL_OK, handle"

# sync heights...

skip co
skip cb
skip cb
skip cb
skip kv
skip kv
skip kn
skip kn
skip kn
skip kn
stop co
stop cb
stop cf
stop cv
stop kv
stop kn

# close timelines

line \
    from [$kn by [10 mm] w] \
    to   [$co by [10 mm] e]

# outside annotation ... need symbolic locations.

set p [[0.5 between [2nd box ne] [3rd box nw]] by [5 mm] n]
line dashed \
    from $p \
    to   [[$p | $cb] by [5 mm] down]
text text C   with w at [last line start]
text text Tcl with e at [last line start]

Added doc/parts/completion_main.inc.

























































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108

[comment ==============================================================]
[subsection Overview]

The [term {main shell}] is fully implemented within the package
[package cmdr::officer], while its command-line completion also
reaches into the packages [package cmdr::private],
[package cmdr::config], and [package cmdr::parameter].

The purpose of this shell is interactive access to the commands of an
officer. Which implies, for the toplevel officer, access to the entire
command hierarchy.

[para] To this end this shell accepts the names of all subordinate
commands known to the officer as commands.

[para] It may additional accept a hard-wired command [cmd .exit],
depending on the parse state (see flag [const doexit]).


[comment ==============================================================]
[subsection {Sequencing and Rules}]

This section is in essence the textual description of an UML sequence
diagram.

[para] Note that the state structure used by this code and referenced
in the text is explained in section [sectref {Parse State}].

[list_begin enumerated]

[enum] The main shell's core read-eval-print-loop calls on the
instance method [method complete] for command-line completion,
providing the text of the buffer to complete at the end).

[enum] The method [package cmdr::actor]::[method parse-line] is called
on first, to get a parse of the buffer. This parse is then delegated
to the instance method [method complete-words] to perform the bulk of
the work.

[para] Note: The officer instance has access to [method parse-line]
because it is a derived class of [package cmdr::actor].

[enum] The implementation of method [method complete-words] applies
the rules below:

[list_begin enumerated]

[enum] If the buffer was not properly parsed (i.e. the state indicates
a syntax error), the list of completions is empty.

[enum] When the buffer is empty all commands are possible completions,
as are all the commands of the default subordinate, if any was
specified.

[enum] If the [term {current word}] (as per [const at]) is the last
word (per [const nwords]) on the command line then completion is done
using the set of commands known to the officer and its default
subordinate, if any.

[enum] For a [term {current word}] which is not the last, i.e. at the
beginning or in the middle of the command line instead, then this word
is the name of the subordinate object responsible for handling the
remaining words.

[para] No completion is done however if the current word does not
yield a subordinate to delegate to (i.e. unknown or ambigous). If a
default command is known this case will delegate to this subordinate,
as a last attempt.

[para] When a subordinate was found the system advances the current
word, resets the [const doexit] flag, and lastly invokes the method
[method complete-words] of the sub-ordinate.

[enum] When the subordinate is again an [term officer], these rules
here apply again.

[enum] A [term private] however will delegate to the embedded
[package cmdr::config] instance, again using the method
[method complete-words].

[enum] This method processes the remaining words similar to how the
command line is parsed at runtime to match words to parameters, to
know at the end which (set of) parameter(s) governs the last word.

[para] For [term options] the last word may be partial name of a flag,
or it may be the partial argument to an option.

In case of the first the set of completions is the set of all flags
with the word as its prefix.

In case of the second the completion delegates to the parameter
governing the flag, if there is any, which in turn delegates to its
associated validation type.

[para] For [term inputs] the system essentially steps through a
non-deterministic finite automaton to find all the parameters which
may govern the current word. Completion is done as the union of the
completion done by the individual parameters.

[para] Note that the automaton and its results can be precomputed,
this happens in the internal method [method CompletionGraph].

[list_end]

[list_end]

[comment { @ EDIT: --- todo --- sequence diagram main shell completion }]

Added doc/parts/completion_methods.inc.





























































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78

The methods relevant to command-line completion can be found in four
packages/classes, namely:

[list_begin definitions]
[def [package cmdr::actor]]
     [list_begin definitions]
     [def [method parse-line]]
     Takes a command-line and returns an initial parse structure as
     described in section [sectref {Parse State}]

     [def [method completions]]
     [def [method match]]
     [list_end]

[def [package cmdr::config]]
     [list_begin definitions]
     [def [method complete]]
     Hook method, entrypoint for the mini-shell.

     Takes the buffer to complete and returns the list of completions,
     which may be empty.

     Uses the workhorse method below and the [package cmdr::actor]
     methods.

     [def [method complete-repl]]
     Main work method taking a parse structure and returning the list
     of completions. More details about it (and the mini-shell) can be
     found in section [sectref {Mini Shell Operation}].

     [def [method complete-words]]
     Main work method for completion from the main shell, invoked by
     the [package cmdr::private] instance having to complete words.

     [list_end]

[def [package cmdr::officer]]
     [list_begin definitions]
     [def [method complete]]

     Hook method, entrypoint for the main shell.

     Takes the buffer to complete and returns the list of completions,
     which may be empty.

     Uses the workhorse method below and the [package cmdr::actor]
     methods.

     [def [method complete-words]]
     Main work method taking a parse structure and returning the list
     of completions. More details about it (and the main shell) can be
     found in section [sectref {Main Shell Operation}].

     [para] Can recurse to the same method of other officers, and
     private instances.

     [list_end]

[def [package cmdr::parameter]]
     [list_begin definitions]
     [def [method complete-words]]
     Main work method when reaching a parameter.

     Simply delegates the work to the method [method complete] of the
     validation type associated with the parameter.
     [list_end]

[def [package cmdr::private]]
     [list_begin definitions]
     [def [method complete-words]]
     Main work method when reaching a private while recursing through
     the command hierarchy from officers.

     Delegates to the [package cmdr::config] method of the same name.

     [list_end]
[list_end]

Added doc/parts/completion_mini.inc.









































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84

[comment ==============================================================]
[subsection Overview]

The [term {mini shell}] and its command-line completion is fully
implemented within the package [package cmdr::config].

The purpose of this shell is the interactive entry of the parameters
for a [term private].

[para] To this end this shell accepts the [term system] names of all
parameters held by the config instance as commands, plus five
hard-wired commands to control exit conditions and access to help.

[para] The parameter commands all take single value as their argument,
the string value to set.

The sole exception to this are [term {presence options}] which do not
take any argument.

[para] Similarly none of the hardwired commands take an
argument. Their names all start with a [const .]. They are, in
alphabetical order, [const .cancel], [const .exit], [const .help]
[const .ok], and [const .run].

[comment ==============================================================]
[subsection {Sequencing and Rules}]

This section is in essence the textual description of an UML sequence
diagram.

[para] Note that the state structure used by this code and referenced
in the text is explained in section [sectref {Parse State}].

[list_begin enumerated]

[enum] The mini shell's core read-eval-print-loop calls on the
instance method [method complete] for command-line completion,
providing the text of the buffer to complete at the end).

[enum] The method [package cmdr::actor]::[method parse-line] is called
on first, to get a parse of the buffer. This parse is then delegated
to the instance method [method complete-repl] to perform the bulk of
the work.

[para] Note: The config instance has access to [method parse-line]
through its internal [const context] command, which is an alias of the
[package cmdr::private] instance the configuration belongs to. This
class is derived from [package cmdr::actor].

[enum] The implementation of method [method complete-repl] applies the
rules below:

[list_begin enumerated]
[enum] If the buffer was not properly parsed (i.e. the state indicates
a syntax error), the list of completions is empty.

[enum] When the buffer is empty all commands are possible completions.

[enum] When the buffer contains more than three words the list of
completions is empty, as all valid mini-shell commands consist of at
most two words.

[enum] A buffer containing a single word contain a partial command
name and the list of completions is the set of commands having this
word as prefix.

[enum] A buffer containing two words contains a command name and a
partial argument. Completion is delegated to the parameter (method
[package cmdr::parameter]::[method complete-words]) indicated by the
command name, and through it to the associated validation type.

[para] No completion is done however if the first word does not yield
a parameter to delegate to (i.e. unknown or ambigous), or if it is a
presence option, which does not take an argument.

[para] The hardwired commands fall here implicitly under unknown
parameter.

[list_end]
[list_end]

[comment { @ EDIT: --- todo --- sequence diagram mini shell completion }]

Added doc/parts/completion_state.inc.



















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

The state structure used by all methods relevant to command line
completion is a dictionary containing the six keys listed below.

The only generator for this structure is method [method parse-line] of
the base-class [package cmdr::actor]. All others parts of the system
then only read and manipulate it.

[list_begin definitions]
[def [const ok]]
A boolean flag. Indicates if the [const line] parsed sucessfully into
words ([const true]), or not ([const false], syntax error).

[para] The framework expects basic shell syntax with space-separated
words using single- and double-quotes for words containing whitespace
themselves. Note that complex syntax like variable- and
command-substitutions are not allowed.

[def [const line]]
A copy of the unparsed command line.

[def [const words]]

The command [const line] parsed into the bare words. The data is not
valid if [const ok] indicates a parsing error. This is not a list of
strings, but actually a list of tokens.

[para] Each token is a list of four elements containing, in the order
below:

[list_begin enumerated]
[enum] Type of the token (implicitly specifies found quoting).
[enum] Start index of token in [const line] including quoting.
[enum] End index of token in [const line], including quoting.
[enum] The string value of the token, with escapes fully resolved.
	I.e. the actual word.
[list_end]

[para] Note: If [const line] ended in trailing whitespace the last
element of this list will be an empty string representing the word
started by the user, yet still empty.

[def [const nwords]]
The number of element in [const words]. The data is not valid if
[const ok] indicates a parsing error.

[def [const at]]
The index of the [term {current word}] in [const words] currently
considered by the completion code. Initially [const 0] this advances
as the completion code works through the prefix to determine the
context for the completion of the last word.

[def [const doexit]]
A boolean flag. Indicates if the pseudo-command [cmd .exit] is active
([const true]), or not. Initially [const true].

[list_end]

Changes to doc/parts/definitions.inc.

3
4
5
6
7
8
9
10
11
12

13
14
15
16
17
18
19
20

21
22
23
24
25
26
27
28
29
[vset TITLE_LICENSE  "[vset PTITLE] - License"			 ]
[vset TITLE_CHANGES  "[vset PTITLE] - Log of Changes"    	 ]
[vset TITLE_SOURCES  "[vset PTITLE] - How To Get The Sources"	 ]
[vset TITLE_INSTALL  "[vset PTITLE] - The Installer's Guide"	 ]
[vset TITLE_DEV      "[vset PTITLE] - The Developer's Guide"	 ]

[comment {- Custom documents & titles - - -- --- ----- --------}]
[vset TITLE_MAIN      "[vset PTITLE] - Main package and API"]
[vset TITLE_ACTOR     "[vset PTITLE] - (Internal) Base class for officers and privates"]
[vset TITLE_CONFIG    "[vset PTITLE] - (Partially internal) Collection of parameters for privates"]

[vset TITLE_DEV_HF    "[vset PTITLE] - Writing custom help formats"]
[vset TITLE_DEV_VT    "[vset PTITLE] - Writing custom validation types"]
[vset TITLE_DSL           "[vset PTITLE] - Introduction to the Specification Language"]
[vset TITLE_DSL_OFFICER   "[vset PTITLE] - Officer Specification Language"]
[vset TITLE_DSL_PRIVATE   "[vset PTITLE] - Private Specification Language"]
[vset TITLE_DSL_PARAMETER "[vset PTITLE] - Parameter Specification Language"]
[vset TITLE_HELP      "[vset PTITLE] - (Internal) Utilities for help text formatting and setup"]
[vset TITLE_HELP_JSON "[vset PTITLE] - Formatting help as JSON object"]

[vset TITLE_HELP_SQL  "[vset PTITLE] - Formatting help as series of SQL commands"]
[vset TITLE_OFFICER   "[vset PTITLE] - (Internal) Aggregation of multiple commands for dispatch."]
[vset TITLE_PARAMETER "[vset PTITLE] - (Partially internal) Command parameters"]
[vset TITLE_PRIVATE   "[vset PTITLE] - (Internal) Single command handling, options, and arguments"]
[vset TITLE_UTIL      "[vset PTITLE] - (Internal) General Utilities"]
[vset TITLE_VALIDATE  "[vset PTITLE] - Standard validation types for parameters"]
[vset TITLE_VCOMMON   "[vset PTITLE] - Utilities for Validation Types"]

[comment {- Miscellanea ............. - - -- --- ----- --------}]







|
|
|
>
|
|




|
|
>
|
|
|
|
|
|
|


3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[vset TITLE_LICENSE  "[vset PTITLE] - License"			 ]
[vset TITLE_CHANGES  "[vset PTITLE] - Log of Changes"    	 ]
[vset TITLE_SOURCES  "[vset PTITLE] - How To Get The Sources"	 ]
[vset TITLE_INSTALL  "[vset PTITLE] - The Installer's Guide"	 ]
[vset TITLE_DEV      "[vset PTITLE] - The Developer's Guide"	 ]

[comment {- Custom documents & titles - - -- --- ----- --------}]
[vset TITLE_MAIN          "[vset PTITLE] - Main package and API"]
[vset TITLE_ACTOR         "[vset PTITLE] - (Internal) Base class for officers and privates"]
[vset TITLE_CONFIG        "[vset PTITLE] - (Partially internal) Collection of parameters for privates"]
[vset TITLE_DEV_COMPLETE  "[vset PTITLE] - Internals of command line completion"]
[vset TITLE_DEV_HF        "[vset PTITLE] - Writing custom help formats"]
[vset TITLE_DEV_VT        "[vset PTITLE] - Writing custom validation types"]
[vset TITLE_DSL           "[vset PTITLE] - Introduction to the Specification Language"]
[vset TITLE_DSL_OFFICER   "[vset PTITLE] - Officer Specification Language"]
[vset TITLE_DSL_PRIVATE   "[vset PTITLE] - Private Specification Language"]
[vset TITLE_DSL_PARAMETER "[vset PTITLE] - Parameter Specification Language"]
[vset TITLE_HELP          "[vset PTITLE] - (Internal) Utilities for help text formatting and setup"]
[vset TITLE_HELP_JSON     "[vset PTITLE] - Formatting help as JSON object"]
[vset TITLE_HELP_STD      "[vset PTITLE] - Standard help formats of the framework"]
[vset TITLE_HELP_SQL      "[vset PTITLE] - Formatting help as series of SQL commands"]
[vset TITLE_OFFICER       "[vset PTITLE] - (Internal) Aggregation of multiple commands for dispatch."]
[vset TITLE_PARAMETER     "[vset PTITLE] - (Partially internal) Command parameters"]
[vset TITLE_PRIVATE       "[vset PTITLE] - (Internal) Single command handling, options, and arguments"]
[vset TITLE_UTIL          "[vset PTITLE] - (Internal) General Utilities"]
[vset TITLE_VALIDATE      "[vset PTITLE] - Standard validation types for parameters"]
[vset TITLE_VCOMMON       "[vset PTITLE] - Utilities for Validation Types"]

[comment {- Miscellanea ............. - - -- --- ----- --------}]

Added embedded/man/files/cmdr_dev_completion.n.



















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
'\"
'\" Generated from file 'cmdr_dev_completion\&.man' by tcllib/doctools with format 'nroff'
'\" Copyright (c) 2013 Andreas Kupries
'\" Copyright (c) 2013 Documentation, Andreas Kupries
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "cmdr_completion" n 0 doc "Cmdr, a framework for command line parsing and dispatch"
.BS
.SH NAME
cmdr_completion \- Cmdr - Internals of command line completion
.SH SYNOPSIS
package require \fBcmdr \fR
.sp
.BE
.SH DESCRIPTION
.PP
Welcome to the Cmdr project, written by Andreas Kupries\&.
.PP
For availability please read \fICmdr - How To Get The Sources\fR\&.
.PP
This internal document provides an overview on how the framework
performs command-line completion in both the main and mini shells,
referencing all the relevant methods and describing the data
structures in use\&.
.PP
For more information about other internals of the framework
please read \fICmdr - The Developer's Guide\fR\&.
.SH "CODE OVERVIEW"
The methods relevant to command-line completion can be found in four
packages/classes, namely:
.TP
\fBcmdr::actor\fR
.RS
.TP
\fBparse-line\fR
Takes a command-line and returns an initial parse structure as
described in section \fBParse State\fR
.TP
\fBcompletions\fR
.TP
\fBmatch\fR
.RE
.TP
\fBcmdr::config\fR
.RS
.TP
\fBcomplete\fR
Hook method, entrypoint for the mini-shell\&.
Takes the buffer to complete and returns the list of completions,
which may be empty\&.
Uses the workhorse method below and the \fBcmdr::actor\fR
methods\&.
.TP
\fBcomplete-repl\fR
Main work method taking a parse structure and returning the list
of completions\&. More details about it (and the mini-shell) can be
found in section \fBMini Shell Operation\fR\&.
.TP
\fBcomplete-words\fR
Main work method for completion from the main shell, invoked by
the \fBcmdr::private\fR instance having to complete words\&.
.RE
.TP
\fBcmdr::officer\fR
.RS
.TP
\fBcomplete\fR
Hook method, entrypoint for the main shell\&.
Takes the buffer to complete and returns the list of completions,
which may be empty\&.
Uses the workhorse method below and the \fBcmdr::actor\fR
methods\&.
.TP
\fBcomplete-words\fR
Main work method taking a parse structure and returning the list
of completions\&. More details about it (and the main shell) can be
found in section \fBMain Shell Operation\fR\&.
.sp
Can recurse to the same method of other officers, and
private instances\&.
.RE
.TP
\fBcmdr::parameter\fR
.RS
.TP
\fBcomplete-words\fR
Main work method when reaching a parameter\&.
Simply delegates the work to the method \fBcomplete\fR of the
validation type associated with the parameter\&.
.RE
.TP
\fBcmdr::private\fR
.RS
.TP
\fBcomplete-words\fR
Main work method when reaching a private while recursing through
the command hierarchy from officers\&.
Delegates to the \fBcmdr::config\fR method of the same name\&.
.RE
.PP
.SH "PARSE STATE"
The state structure used by all methods relevant to command line
completion is a dictionary containing the six keys listed below\&.
The only generator for this structure is method \fBparse-line\fR of
the base-class \fBcmdr::actor\fR\&. All others parts of the system
then only read and manipulate it\&.
.TP
\fBok\fR
A boolean flag\&. Indicates if the \fBline\fR parsed sucessfully into
words (\fBtrue\fR), or not (\fBfalse\fR, syntax error)\&.
.sp
The framework expects basic shell syntax with space-separated
words using single- and double-quotes for words containing whitespace
themselves\&. Note that complex syntax like variable- and
command-substitutions are not allowed\&.
.TP
\fBline\fR
A copy of the unparsed command line\&.
.TP
\fBwords\fR
The command \fBline\fR parsed into the bare words\&. The data is not
valid if \fBok\fR indicates a parsing error\&. This is not a list of
strings, but actually a list of tokens\&.
.sp
Each token is a list of four elements containing, in the order
below:
.RS
.IP [1]
Type of the token (implicitly specifies found quoting)\&.
.IP [2]
Start index of token in \fBline\fR including quoting\&.
.IP [3]
End index of token in \fBline\fR, including quoting\&.
.IP [4]
The string value of the token, with escapes fully resolved\&.
I\&.e\&. the actual word\&.
.RE
.sp
Note: If \fBline\fR ended in trailing whitespace the last
element of this list will be an empty string representing the word
started by the user, yet still empty\&.
.TP
\fBnwords\fR
The number of element in \fBwords\fR\&. The data is not valid if
\fBok\fR indicates a parsing error\&.
.TP
\fBat\fR
The index of the \fIcurrent word\fR in \fBwords\fR currently
considered by the completion code\&. Initially \fB0\fR this advances
as the completion code works through the prefix to determine the
context for the completion of the last word\&.
.TP
\fBdoexit\fR
A boolean flag\&. Indicates if the pseudo-command \fB\&.exit\fR is active
(\fBtrue\fR), or not\&. Initially \fBtrue\fR\&.
.PP
.SH "MAIN SHELL OPERATION"
.SS OVERVIEW
The \fImain shell\fR is fully implemented within the package
\fBcmdr::officer\fR, while its command-line completion also
reaches into the packages \fBcmdr::private\fR,
\fBcmdr::config\fR, and \fBcmdr::parameter\fR\&.
The purpose of this shell is interactive access to the commands of an
officer\&. Which implies, for the toplevel officer, access to the entire
command hierarchy\&.
.PP
To this end this shell accepts the names of all subordinate
commands known to the officer as commands\&.
.PP
It may additional accept a hard-wired command \fB\&.exit\fR,
depending on the parse state (see flag \fBdoexit\fR)\&.
.SS "SEQUENCING AND RULES"
This section is in essence the textual description of an UML sequence
diagram\&.
.PP
Note that the state structure used by this code and referenced
in the text is explained in section \fBParse State\fR\&.
.IP [1]
The main shell's core read-eval-print-loop calls on the
instance method \fBcomplete\fR for command-line completion,
providing the text of the buffer to complete at the end)\&.
.IP [2]
The method \fBcmdr::actor\fR::\fBparse-line\fR is called
on first, to get a parse of the buffer\&. This parse is then delegated
to the instance method \fBcomplete-words\fR to perform the bulk of
the work\&.
.sp
Note: The officer instance has access to \fBparse-line\fR
because it is a derived class of \fBcmdr::actor\fR\&.
.IP [3]
The implementation of method \fBcomplete-words\fR applies
the rules below:
.RS
.IP [1]
If the buffer was not properly parsed (i\&.e\&. the state indicates
a syntax error), the list of completions is empty\&.
.IP [2]
When the buffer is empty all commands are possible completions,
as are all the commands of the default subordinate, if any was
specified\&.
.IP [3]
If the \fIcurrent word\fR (as per \fBat\fR) is the last
word (per \fBnwords\fR) on the command line then completion is done
using the set of commands known to the officer and its default
subordinate, if any\&.
.IP [4]
For a \fIcurrent word\fR which is not the last, i\&.e\&. at the
beginning or in the middle of the command line instead, then this word
is the name of the subordinate object responsible for handling the
remaining words\&.
.sp
No completion is done however if the current word does not
yield a subordinate to delegate to (i\&.e\&. unknown or ambigous)\&. If a
default command is known this case will delegate to this subordinate,
as a last attempt\&.
.sp
When a subordinate was found the system advances the current
word, resets the \fBdoexit\fR flag, and lastly invokes the method
\fBcomplete-words\fR of the sub-ordinate\&.
.IP [5]
When the subordinate is again an \fIofficer\fR, these rules
here apply again\&.
.IP [6]
A \fIprivate\fR however will delegate to the embedded
\fBcmdr::config\fR instance, again using the method
\fBcomplete-words\fR\&.
.IP [7]
This method processes the remaining words similar to how the
command line is parsed at runtime to match words to parameters, to
know at the end which (set of) parameter(s) governs the last word\&.
.sp
For \fIoptions\fR the last word may be partial name of a flag,
or it may be the partial argument to an option\&.
In case of the first the set of completions is the set of all flags
with the word as its prefix\&.
In case of the second the completion delegates to the parameter
governing the flag, if there is any, which in turn delegates to its
associated validation type\&.
.sp
For \fIinputs\fR the system essentially steps through a
non-deterministic finite automaton to find all the parameters which
may govern the current word\&. Completion is done as the union of the
completion done by the individual parameters\&.
.sp
Note that the automaton and its results can be precomputed,
this happens in the internal method \fBCompletionGraph\fR\&.
.RE
.PP
.SH "MINI SHELL OPERATION"
.SS OVERVIEW
The \fImini shell\fR and its command-line completion is fully
implemented within the package \fBcmdr::config\fR\&.
The purpose of this shell is the interactive entry of the parameters
for a \fIprivate\fR\&.
.PP
To this end this shell accepts the \fIsystem\fR names of all
parameters held by the config instance as commands, plus five
hard-wired commands to control exit conditions and access to help\&.
.PP
The parameter commands all take single value as their argument,
the string value to set\&.
The sole exception to this are \fIpresence options\fR which do not
take any argument\&.
.PP
Similarly none of the hardwired commands take an
argument\&. Their names all start with a \fB\&.\fR\&. They are, in
alphabetical order, \fB\&.cancel\fR, \fB\&.exit\fR, \fB\&.help\fR \fB\&.ok\fR, and \fB\&.run\fR\&.
.SS "SEQUENCING AND RULES"
This section is in essence the textual description of an UML sequence
diagram\&.
.PP
Note that the state structure used by this code and referenced
in the text is explained in section \fBParse State\fR\&.
.IP [1]
The mini shell's core read-eval-print-loop calls on the
instance method \fBcomplete\fR for command-line completion,
providing the text of the buffer to complete at the end)\&.
.IP [2]
The method \fBcmdr::actor\fR::\fBparse-line\fR is called
on first, to get a parse of the buffer\&. This parse is then delegated
to the instance method \fBcomplete-repl\fR to perform the bulk of
the work\&.
.sp
Note: The config instance has access to \fBparse-line\fR
through its internal \fBcontext\fR command, which is an alias of the
\fBcmdr::private\fR instance the configuration belongs to\&. This
class is derived from \fBcmdr::actor\fR\&.
.IP [3]
The implementation of method \fBcomplete-repl\fR applies the
rules below:
.RS
.IP [1]
If the buffer was not properly parsed (i\&.e\&. the state indicates
a syntax error), the list of completions is empty\&.
.IP [2]
When the buffer is empty all commands are possible completions\&.
.IP [3]
When the buffer contains more than three words the list of
completions is empty, as all valid mini-shell commands consist of at
most two words\&.
.IP [4]
A buffer containing a single word contain a partial command
name and the list of completions is the set of commands having this
word as prefix\&.
.IP [5]
A buffer containing two words contains a command name and a
partial argument\&. Completion is delegated to the parameter (method
\fBcmdr::parameter\fR::\fBcomplete-words\fR) indicated by the
command name, and through it to the associated validation type\&.
.sp
No completion is done however if the first word does not yield
a parameter to delegate to (i\&.e\&. unknown or ambigous), or if it is a
presence option, which does not take an argument\&.
.sp
The hardwired commands fall here implicitly under unknown
parameter\&.
.RE
.PP
.SH "BUGS, IDEAS, FEEDBACK"
Both the package(s) and this documentation will undoubtedly contain
bugs and other problems\&.
Please report such at
\fICmdr Tickets\fR [https:/core\&.tcl\&.tk/akupries/cmdr]\&.
.PP
Please also report any ideas you may have for enhancements of
either package(s) and/or documentation\&.
.SH KEYWORDS
arguments, command hierarchy, command line completion, command line handling, command tree, editing command line, help for command line, hierarchy of commands, interactive command shell, optional arguments, options, parameters, processing command line, tree of commands
.SH COPYRIGHT
.nf
Copyright (c) 2013 Andreas Kupries
Copyright (c) 2013 Documentation, Andreas Kupries

.fi

Changes to embedded/man/files/cmdr_howto_development.n.

281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
...
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
...
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
...
474
475
476
477
478
479
480
481
482









483
484
485
486
487
488
489
This requirement is optional\&. If a Tcllib providing the package
\fBdtplite\fR is installed then \fBkettle\fR will use the
package in favor of the external application\&.
.PP
.SH "DEMONSTRATION/EXAMPLE APPLICATIONS"
Cmdr (currently) does not have demonstrations, nor examples\&.
.SH "DIRECTORY STRUCTURE"
Explain the physical layout (directory structure)\&.
.TP
"\fIbuild\&.tcl\fR"
The main file of the \fBkettle\fR-based build-system\&.
.TP
"\fIdoc/\fR"
Main directory for all documentation\&.
.sp
................................................................................
"\fItests/\fR"
Main directory for the test-suite\&.
.sp
Based on the \fBtcltest\fR package distributed with the Tcl
core\&.
.TP
"\fIactor\&.tcl\fR"
== Package \fBcmdr::actor\fR\&.
.TP
"\fIcmdr\&.tcl\fR"
== Package \fBcmdr\fR\&.
.TP
"\fIconfig\&.tcl\fR"
== Package \fBcmdr::config\fR\&.
.TP
"\fIhelp\&.tcl\fR"
== Package \fBcmdr::help\fR\&.
.TP
"\fIhelp_json\&.tcl\fR"
== Package \fBcmdr::help::json\fR\&.
.TP
"\fIhelp_sql\&.tcl\fR"
== Package \fBcmdr::help::sql\fR\&.
.TP
"\fIofficer\&.tcl\fR"
== Package \fBcmdr::officer\fR\&.
.TP
"\fIparameter\&.tcl\fR"
== Package \fBcmdr::parameter\fR\&.
.TP
"\fIprivate\&.tcl\fR"
== Package \fBcmdr::private\fR\&.
.TP
"\fIutil\&.tcl\fR"
== Package \fBcmdr::util\fR\&.
.TP
"\fIvalidate\&.tcl\fR"
== Package \fBcmdr::validate\fR\&.
.TP
"\fIvcommon\&.tcl\fR"
== Package \fBcmdr::validate::common\fR\&.
.PP
.SH "EXTENDED BUILD ACTIONS"
Our build-system is based on \fBkettle\fR, as already explained in
the \fICmdr - The Installer's Guide\fR\&. Beyond the targets useful for
installation it also provides targets aiding developers and
maintainers\&. These are:
.TP
................................................................................


% /path/to/cmdr/build\&.tcl test --log <stem>

.CE
.PP
.SH "ARCHITECTURE & CONCEPTS"
The following sections explain
.IP [1]
the internal architecture and package dependencies\&.
.IP [2]
the internal data structures\&.
.IP [3]
important operation sequences (UML SD)\&.
.PP
.SS "SYSTEM ARCHITECTURE"
.PP
All packages in the framework belong to one of three layers,
as shown below:
.PP
.PS
.nf
+--------------------------------------------+
................................................................................
straight-forward, following mostly directly out of the relationships
shown above, plus the few where the utilities are imported\&. To reduce
the complexity of the diagram below a few direct dependencies on
\fBcmdr::util\fR were omitted where indirectly present through
other dependencies (i\&.e\&. through \fBcmdr::help\fR):
.PP
IMAGE: pkg_dependencies
.SS "DATA STRUCTURES"
.SS "OPERATION SEQUENCES"









.SH "RELATED DOCUMENTS"
.IP [1]
\fICmdr - Introduction to the project\fR
.IP [2]
\fICmdr - License\fR
.IP [3]
\fICmdr - Log of Changes\fR







|







 







|


|


|


|


|


|


|


|


|


|


|


|







 







<
<
<
<
<
<
<
<
<







 







|
|
>
>
>
>
>
>
>
>
>







281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
...
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
...
405
406
407
408
409
410
411









412
413
414
415
416
417
418
...
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
This requirement is optional\&. If a Tcllib providing the package
\fBdtplite\fR is installed then \fBkettle\fR will use the
package in favor of the external application\&.
.PP
.SH "DEMONSTRATION/EXAMPLE APPLICATIONS"
Cmdr (currently) does not have demonstrations, nor examples\&.
.SH "DIRECTORY STRUCTURE"
The directory structure of the sources is as explained below:
.TP
"\fIbuild\&.tcl\fR"
The main file of the \fBkettle\fR-based build-system\&.
.TP
"\fIdoc/\fR"
Main directory for all documentation\&.
.sp
................................................................................
"\fItests/\fR"
Main directory for the test-suite\&.
.sp
Based on the \fBtcltest\fR package distributed with the Tcl
core\&.
.TP
"\fIactor\&.tcl\fR"
Package \fBcmdr::actor\fR\&.
.TP
"\fIcmdr\&.tcl\fR"
Package \fBcmdr\fR\&.
.TP
"\fIconfig\&.tcl\fR"
Package \fBcmdr::config\fR\&.
.TP
"\fIhelp\&.tcl\fR"
Package \fBcmdr::help\fR\&.
.TP
"\fIhelp_json\&.tcl\fR"
Package \fBcmdr::help::json\fR\&.
.TP
"\fIhelp_sql\&.tcl\fR"
Package \fBcmdr::help::sql\fR\&.
.TP
"\fIofficer\&.tcl\fR"
Package \fBcmdr::officer\fR\&.
.TP
"\fIparameter\&.tcl\fR"
Package \fBcmdr::parameter\fR\&.
.TP
"\fIprivate\&.tcl\fR"
Package \fBcmdr::private\fR\&.
.TP
"\fIutil\&.tcl\fR"
Package \fBcmdr::util\fR\&.
.TP
"\fIvalidate\&.tcl\fR"
Package \fBcmdr::validate\fR\&.
.TP
"\fIvcommon\&.tcl\fR"
Package \fBcmdr::validate::common\fR\&.
.PP
.SH "EXTENDED BUILD ACTIONS"
Our build-system is based on \fBkettle\fR, as already explained in
the \fICmdr - The Installer's Guide\fR\&. Beyond the targets useful for
installation it also provides targets aiding developers and
maintainers\&. These are:
.TP
................................................................................


% /path/to/cmdr/build\&.tcl test --log <stem>

.CE
.PP
.SH "ARCHITECTURE & CONCEPTS"









.PP
All packages in the framework belong to one of three layers,
as shown below:
.PP
.PS
.nf
+--------------------------------------------+
................................................................................
straight-forward, following mostly directly out of the relationships
shown above, plus the few where the utilities are imported\&. To reduce
the complexity of the diagram below a few direct dependencies on
\fBcmdr::util\fR were omitted where indirectly present through
other dependencies (i\&.e\&. through \fBcmdr::help\fR):
.PP
IMAGE: pkg_dependencies
.SH "VALIDATION TYPES"
Everything said in the public document \fICmdr - Writing custom validation types\fR
applies to the standard validation types of the framework (as listed
in \fICmdr - Standard validation types for parameters\fR) as well\&.
.SH "HELP FORMATS"
Everything said in the public document \fICmdr - Writing custom help formats\fR
applies to the standard help formats of the framework (as listed in
\fICmdr - Standard help formats of the framework\fR) as well\&.
.SH "COMMAND LINE COMPLETION"
The document \fICmdr - Internals of command line completion\fR describes the inner
workings of the command line completion provided by the framework\&.
.SH "RELATED DOCUMENTS"
.IP [1]
\fICmdr - Introduction to the project\fR
.IP [2]
\fICmdr - License\fR
.IP [3]
\fICmdr - Log of Changes\fR

Changes to embedded/man/index.n.

278
279
280
281
282
283
284



285
286
287
288
289
290
291
...
350
351
352
353
354
355
356



357
358
359
360
361
362
363
...
422
423
424
425
426
427
428



429
430
431
432
433
434
435
...
494
495
496
497
498
499
500



501
502
503
504
505
506
507
...
566
567
568
569
570
571
572



573
574
575
576
577
578
579
...
638
639
640
641
642
643
644



645
646
647
648
649
650
651
...
710
711
712
713
714
715
716



717
718
719
720
721
722
723
...
782
783
784
785
786
787
788



789
790
791
792
793
794
795
...
854
855
856
857
858
859
860



861
862
863
864
865
866
867
...
926
927
928
929
930
931
932



933
934
935
936
937
938
939
...
998
999
1000
1001
1002
1003
1004



1005
1006
1007
1008
1009
1010
1011
....
1070
1071
1072
1073
1074
1075
1076



1077
1078
1079
1080
1081
1082
1083
....
1142
1143
1144
1145
1146
1147
1148



1149
1150
1151
1152
1153
1154
1155
....
1214
1215
1216
1217
1218
1219
1220



1221
1222
1223
1224
1225
1226
1227
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes



.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes



.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes



.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes



.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes



.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes



.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes



.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes



.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes



.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes



.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes



.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes



.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes



.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes



.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP







>
>
>







 







>
>
>







 







>
>
>







 







>
>
>







 







>
>
>







 







>
>
>







 







>
>
>







 







>
>
>







 







>
>
>







 







>
>
>







 







>
>
>







 







>
>
>







 







>
>
>







 







>
>
>







278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
...
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
...
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
...
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
...
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
...
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
...
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
...
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
...
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
...
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
....
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
....
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
....
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
....
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes
.TP
\fBfiles/cmdr_dev_completion\&.n\fR
cmdr_completion
.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes
.TP
\fBfiles/cmdr_dev_completion\&.n\fR
cmdr_completion
.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes
.TP
\fBfiles/cmdr_dev_completion\&.n\fR
cmdr_completion
.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes
.TP
\fBfiles/cmdr_dev_completion\&.n\fR
cmdr_completion
.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes
.TP
\fBfiles/cmdr_dev_completion\&.n\fR
cmdr_completion
.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes
.TP
\fBfiles/cmdr_dev_completion\&.n\fR
cmdr_completion
.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes
.TP
\fBfiles/cmdr_dev_completion\&.n\fR
cmdr_completion
.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes
.TP
\fBfiles/cmdr_dev_completion\&.n\fR
cmdr_completion
.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes
.TP
\fBfiles/cmdr_dev_completion\&.n\fR
cmdr_completion
.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes
.TP
\fBfiles/cmdr_dev_completion\&.n\fR
cmdr_completion
.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes
.TP
\fBfiles/cmdr_dev_completion\&.n\fR
cmdr_completion
.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes
.TP
\fBfiles/cmdr_dev_completion\&.n\fR
cmdr_completion
.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes
.TP
\fBfiles/cmdr_dev_completion\&.n\fR
cmdr_completion
.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP
................................................................................
cmdr::validate
.TP
\fBfiles/cmdr_vcommon\&.n\fR
cmdr::validate::common
.TP
\fBfiles/cmdr_changes\&.n\fR
cmdr_changes
.TP
\fBfiles/cmdr_dev_completion\&.n\fR
cmdr_completion
.TP
\fBfiles/cmdr_howto_development\&.n\fR
cmdr_development
.TP
\fBfiles/cmdr_dsl\&.n\fR
cmdr_dsl
.TP

Changes to embedded/man/toc.n.

277
278
279
280
281
282
283



284
285
286
287
288
289
290
.TP
\fBcmdr::validate::common\fR
\fIfiles/cmdr_vcommon\&.n\fR: Cmdr - Utilities for Validation Types
.TP
\fBcmdr_changes\fR
\fIfiles/cmdr_changes\&.n\fR: Cmdr - Log of Changes
.TP



\fBcmdr_development\fR
\fIfiles/cmdr_howto_development\&.n\fR: Cmdr - The Developer's Guide
.TP
\fBcmdr_dsl\fR
\fIfiles/cmdr_dsl\&.n\fR: Cmdr - Introduction to the Specification Language
.TP
\fBcmdr_dsl_officer\fR







>
>
>







277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
.TP
\fBcmdr::validate::common\fR
\fIfiles/cmdr_vcommon\&.n\fR: Cmdr - Utilities for Validation Types
.TP
\fBcmdr_changes\fR
\fIfiles/cmdr_changes\&.n\fR: Cmdr - Log of Changes
.TP
\fBcmdr_completion\fR
\fIfiles/cmdr_dev_completion\&.n\fR: Cmdr - Internals of command line completion
.TP
\fBcmdr_development\fR
\fIfiles/cmdr_howto_development\&.n\fR: Cmdr - The Developer's Guide
.TP
\fBcmdr_dsl\fR
\fIfiles/cmdr_dsl\&.n\fR: Cmdr - Introduction to the Specification Language
.TP
\fBcmdr_dsl_officer\fR

Added embedded/www/doc/files/cmdr_dev_completion.html.





































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418

<html><head>
<title>cmdr_completion - Cmdr, a framework for command line parsing and dispatch</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file 'cmdr_dev_completion.man' by tcllib/doctools with format 'html'
   -->
<! -- Copyright &copy; 2013 Andreas Kupries   -- Copyright &copy; 2013 Documentation, Andreas Kupries
   -->
<! -- CVS: $Id$ cmdr_completion.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../home">Home</a>
| <a href="../../toc.html">Main Table Of Contents</a>
| <a href="../toc.html">Table Of Contents</a>
| <a href="../../index.html">Keyword Index</a>
 ] <hr>
<h1 class="title">cmdr_completion(n) 0 doc &quot;Cmdr, a framework for command line parsing and dispatch&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>cmdr_completion - Cmdr - Internals of command line completion</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">Code Overview</a></li>
<li class="section"><a href="#section3">Parse State</a></li>
<li class="section"><a href="#section4">Main Shell Operation</a>
<ul>
<li class="subsection"><a href="#subsection1">Overview</a></li>
<li class="subsection"><a href="#subsection2">Sequencing and Rules</a></li>
</ul>
</li>
<li class="section"><a href="#section5">Mini Shell Operation</a>
<ul>
<li class="subsection"><a href="#subsection3">Overview</a></li>
<li class="subsection"><a href="#subsection4">Sequencing and Rules</a></li>
</ul>
</li>
<li class="section"><a href="#section6">Bugs, Ideas, Feedback</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#copyright">Copyright</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">cmdr</b></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>Welcome to the Cmdr project, written by Andreas Kupries.</p>
<p>For availability please read <i class="term"><a href="cmdr_howto_get_sources.html">Cmdr - How To Get The Sources</a></i>.</p>
<p>This internal document provides an overview on how the framework
performs command-line completion in both the main and mini shells,
referencing all the relevant methods and describing the data
structures in use.</p>
<p>For more information about other internals of the framework
please read <i class="term"><a href="cmdr_howto_development.html">Cmdr - The Developer's Guide</a></i>.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">Code Overview</a></h2>
<p>The methods relevant to command-line completion can be found in four
packages/classes, namely:</p>
<dl class="definitions">
<dt><b class="package"><a href="cmdr_actor.html">cmdr::actor</a></b></dt>
<dd><dl class="definitions">
     
<dt><b class="method">parse-line</b></dt>
<dd><p>Takes a command-line and returns an initial parse structure as
     described in section <span class="sectref"><a href="#section3">Parse State</a></span></p></dd>
<dt><b class="method">completions</b></dt>
<dd></dd>
<dt><b class="method">match</b></dt>
<dd></dd>
</dl></dd>
<dt><b class="package"><a href="cmdr_config.html">cmdr::config</a></b></dt>
<dd><dl class="definitions">
     
<dt><b class="method">complete</b></dt>
<dd><p>Hook method, entrypoint for the mini-shell.
     Takes the buffer to complete and returns the list of completions,
     which may be empty.
     Uses the workhorse method below and the <b class="package"><a href="cmdr_actor.html">cmdr::actor</a></b>
     methods.</p></dd>
<dt><b class="method">complete-repl</b></dt>
<dd><p>Main work method taking a parse structure and returning the list
     of completions. More details about it (and the mini-shell) can be
     found in section <span class="sectref"><a href="#section5">Mini Shell Operation</a></span>.</p></dd>
<dt><b class="method">complete-words</b></dt>
<dd><p>Main work method for completion from the main shell, invoked by
     the <b class="package"><a href="cmdr_private.html">cmdr::private</a></b> instance having to complete words.</p></dd>
</dl></dd>
<dt><b class="package"><a href="cmdr_officer.html">cmdr::officer</a></b></dt>
<dd><dl class="definitions">
     
<dt><b class="method">complete</b></dt>
<dd><p>Hook method, entrypoint for the main shell.
     Takes the buffer to complete and returns the list of completions,
     which may be empty.
     Uses the workhorse method below and the <b class="package"><a href="cmdr_actor.html">cmdr::actor</a></b>
     methods.</p></dd>
<dt><b class="method">complete-words</b></dt>
<dd><p>Main work method taking a parse structure and returning the list
     of completions. More details about it (and the main shell) can be
     found in section <span class="sectref"><a href="#section4">Main Shell Operation</a></span>.</p>
<p>Can recurse to the same method of other officers, and
     private instances.</p></dd>
</dl></dd>
<dt><b class="package"><a href="cmdr_parameter.html">cmdr::parameter</a></b></dt>
<dd><dl class="definitions">
     
<dt><b class="method">complete-words</b></dt>
<dd><p>Main work method when reaching a parameter.
     Simply delegates the work to the method <b class="method">complete</b> of the
     validation type associated with the parameter.</p></dd>
</dl></dd>
<dt><b class="package"><a href="cmdr_private.html">cmdr::private</a></b></dt>
<dd><dl class="definitions">
     
<dt><b class="method">complete-words</b></dt>
<dd><p>Main work method when reaching a private while recursing through
     the command hierarchy from officers.
     Delegates to the <b class="package"><a href="cmdr_config.html">cmdr::config</a></b> method of the same name.</p></dd>
</dl></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">Parse State</a></h2>
<p>The state structure used by all methods relevant to command line
completion is a dictionary containing the six keys listed below.
The only generator for this structure is method <b class="method">parse-line</b> of
the base-class <b class="package"><a href="cmdr_actor.html">cmdr::actor</a></b>. All others parts of the system
then only read and manipulate it.</p>
<dl class="definitions">
<dt><b class="const">ok</b></dt>
<dd><p>A boolean flag. Indicates if the <b class="const">line</b> parsed sucessfully into
words (<b class="const">true</b>), or not (<b class="const">false</b>, syntax error).</p>
<p>The framework expects basic shell syntax with space-separated
words using single- and double-quotes for words containing whitespace
themselves. Note that complex syntax like variable- and
command-substitutions are not allowed.</p></dd>
<dt><b class="const">line</b></dt>
<dd><p>A copy of the unparsed command line.</p></dd>
<dt><b class="const">words</b></dt>
<dd><p>The command <b class="const">line</b> parsed into the bare words. The data is not
valid if <b class="const">ok</b> indicates a parsing error. This is not a list of
strings, but actually a list of tokens.</p>
<p>Each token is a list of four elements containing, in the order
below:</p>
<ol class="enumerated">
<li><p>Type of the token (implicitly specifies found quoting).</p></li>
<li><p>Start index of token in <b class="const">line</b> including quoting.</p></li>
<li><p>End index of token in <b class="const">line</b>, including quoting.</p></li>
<li><p>The string value of the token, with escapes fully resolved.
	I.e. the actual word.</p></li>
</ol>
<p>Note: If <b class="const">line</b> ended in trailing whitespace the last
element of this list will be an empty string representing the word
started by the user, yet still empty.</p></dd>
<dt><b class="const">nwords</b></dt>
<dd><p>The number of element in <b class="const">words</b>. The data is not valid if
<b class="const">ok</b> indicates a parsing error.</p></dd>
<dt><b class="const">at</b></dt>
<dd><p>The index of the <i class="term">current word</i> in <b class="const">words</b> currently
considered by the completion code. Initially <b class="const">0</b> this advances
as the completion code works through the prefix to determine the
context for the completion of the last word.</p></dd>
<dt><b class="const">doexit</b></dt>
<dd><p>A boolean flag. Indicates if the pseudo-command <b class="cmd">.exit</b> is active
(<b class="const">true</b>), or not. Initially <b class="const">true</b>.</p></dd>
</dl>
</div>
<div id="section4" class="section"><h2><a name="section4">Main Shell Operation</a></h2>
<div id="subsection1" class="subsection"><h3><a name="subsection1">Overview</a></h3>
<p>The <i class="term">main shell</i> is fully implemented within the package
<b class="package"><a href="cmdr_officer.html">cmdr::officer</a></b>, while its command-line completion also
reaches into the packages <b class="package"><a href="cmdr_private.html">cmdr::private</a></b>,
<b class="package"><a href="cmdr_config.html">cmdr::config</a></b>, and <b class="package"><a href="cmdr_parameter.html">cmdr::parameter</a></b>.
The purpose of this shell is interactive access to the commands of an
officer. Which implies, for the toplevel officer, access to the entire
command hierarchy.</p>
<p>To this end this shell accepts the names of all subordinate
commands known to the officer as commands.</p>
<p>It may additional accept a hard-wired command <b class="cmd">.exit</b>,
depending on the parse state (see flag <b class="const">doexit</b>).</p>
</div>
<div id="subsection2" class="subsection"><h3><a name="subsection2">Sequencing and Rules</a></h3>
<p>This section is in essence the textual description of an UML sequence
diagram.</p>
<p>Note that the state structure used by this code and referenced
in the text is explained in section <span class="sectref"><a href="#section3">Parse State</a></span>.</p>
<ol class="enumerated">
<li><p>The main shell's core read-eval-print-loop calls on the
instance method <b class="method">complete</b> for command-line completion,
providing the text of the buffer to complete at the end).</p></li>
<li><p>The method <b class="package"><a href="cmdr_actor.html">cmdr::actor</a></b>::<b class="method">parse-line</b> is called
on first, to get a parse of the buffer. This parse is then delegated
to the instance method <b class="method">complete-words</b> to perform the bulk of
the work.</p>
<p>Note: The officer instance has access to <b class="method">parse-line</b>
because it is a derived class of <b class="package"><a href="cmdr_actor.html">cmdr::actor</a></b>.</p></li>
<li><p>The implementation of method <b class="method">complete-words</b> applies
the rules below:</p>
<ol class="enumerated">
<li><p>If the buffer was not properly parsed (i.e. the state indicates
a syntax error), the list of completions is empty.</p></li>
<li><p>When the buffer is empty all commands are possible completions,
as are all the commands of the default subordinate, if any was
specified.</p></li>
<li><p>If the <i class="term">current word</i> (as per <b class="const">at</b>) is the last
word (per <b class="const">nwords</b>) on the command line then completion is done
using the set of commands known to the officer and its default
subordinate, if any.</p></li>
<li><p>For a <i class="term">current word</i> which is not the last, i.e. at the
beginning or in the middle of the command line instead, then this word
is the name of the subordinate object responsible for handling the
remaining words.</p>
<p>No completion is done however if the current word does not
yield a subordinate to delegate to (i.e. unknown or ambigous). If a
default command is known this case will delegate to this subordinate,
as a last attempt.</p>
<p>When a subordinate was found the system advances the current
word, resets the <b class="const">doexit</b> flag, and lastly invokes the method
<b class="method">complete-words</b> of the sub-ordinate.</p></li>
<li><p>When the subordinate is again an <i class="term">officer</i>, these rules
here apply again.</p></li>
<li><p>A <i class="term">private</i> however will delegate to the embedded
<b class="package"><a href="cmdr_config.html">cmdr::config</a></b> instance, again using the method
<b class="method">complete-words</b>.</p></li>
<li><p>This method processes the remaining words similar to how the
command line is parsed at runtime to match words to parameters, to
know at the end which (set of) parameter(s) governs the last word.</p>
<p>For <i class="term"><a href="../../index.html#key2">options</a></i> the last word may be partial name of a flag,
or it may be the partial argument to an option.
In case of the first the set of completions is the set of all flags
with the word as its prefix.
In case of the second the completion delegates to the parameter
governing the flag, if there is any, which in turn delegates to its
associated validation type.</p>
<p>For <i class="term">inputs</i> the system essentially steps through a
non-deterministic finite automaton to find all the parameters which
may govern the current word. Completion is done as the union of the
completion done by the individual parameters.</p>
<p>Note that the automaton and its results can be precomputed,
this happens in the internal method <b class="method">CompletionGraph</b>.</p></li>
</ol>
</li>
</ol>
</div>
</div>
<div id="section5" class="section"><h2><a name="section5">Mini Shell Operation</a></h2>
<div id="subsection3" class="subsection"><h3><a name="subsection3">Overview</a></h3>
<p>The <i class="term">mini shell</i> and its command-line completion is fully
implemented within the package <b class="package"><a href="cmdr_config.html">cmdr::config</a></b>.
The purpose of this shell is the interactive entry of the parameters
for a <i class="term">private</i>.</p>
<p>To this end this shell accepts the <i class="term">system</i> names of all
parameters held by the config instance as commands, plus five
hard-wired commands to control exit conditions and access to help.</p>
<p>The parameter commands all take single value as their argument,
the string value to set.
The sole exception to this are <i class="term">presence options</i> which do not
take any argument.</p>
<p>Similarly none of the hardwired commands take an
argument. Their names all start with a <b class="const">.</b>. They are, in
alphabetical order, <b class="const">.cancel</b>, <b class="const">.exit</b>, <b class="const">.help</b>
<b class="const">.ok</b>, and <b class="const">.run</b>.</p>
</div>
<div id="subsection4" class="subsection"><h3><a name="subsection4">Sequencing and Rules</a></h3>
<p>This section is in essence the textual description of an UML sequence
diagram.</p>
<p>Note that the state structure used by this code and referenced
in the text is explained in section <span class="sectref"><a href="#section3">Parse State</a></span>.</p>
<ol class="enumerated">
<li><p>The mini shell's core read-eval-print-loop calls on the
instance method <b class="method">complete</b> for command-line completion,
providing the text of the buffer to complete at the end).</p></li>
<li><p>The method <b class="package"><a href="cmdr_actor.html">cmdr::actor</a></b>::<b class="method">parse-line</b> is called
on first, to get a parse of the buffer. This parse is then delegated
to the instance method <b class="method">complete-repl</b> to perform the bulk of
the work.</p>
<p>Note: The config instance has access to <b class="method">parse-line</b>
through its internal <b class="const">context</b> command, which is an alias of the
<b class="package"><a href="cmdr_private.html">cmdr::private</a></b> instance the configuration belongs to. This
class is derived from <b class="package"><a href="cmdr_actor.html">cmdr::actor</a></b>.</p></li>
<li><p>The implementation of method <b class="method">complete-repl</b> applies the
rules below:</p>
<ol class="enumerated">
<li><p>If the buffer was not properly parsed (i.e. the state indicates
a syntax error), the list of completions is empty.</p></li>
<li><p>When the buffer is empty all commands are possible completions.</p></li>
<li><p>When the buffer contains more than three words the list of
completions is empty, as all valid mini-shell commands consist of at
most two words.</p></li>
<li><p>A buffer containing a single word contain a partial command
name and the list of completions is the set of commands having this
word as prefix.</p></li>
<li><p>A buffer containing two words contains a command name and a
partial argument. Completion is delegated to the parameter (method
<b class="package"><a href="cmdr_parameter.html">cmdr::parameter</a></b>::<b class="method">complete-words</b>) indicated by the
command name, and through it to the associated validation type.</p>
<p>No completion is done however if the first word does not yield
a parameter to delegate to (i.e. unknown or ambigous), or if it is a
presence option, which does not take an argument.</p>
<p>The hardwired commands fall here implicitly under unknown
parameter.</p></li>
</ol>
</li>
</ol>
</div>
</div>
<div id="section6" class="section"><h2><a name="section6">Bugs, Ideas, Feedback</a></h2>
<p>Both the package(s) and this documentation will undoubtedly contain
bugs and other problems.
Please report such at
<a href="https:/core.tcl.tk/akupries/cmdr">Cmdr Tickets</a>.</p>
<p>Please also report any ideas you may have for enhancements of
either package(s) and/or documentation.</p>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../index.html#key4">arguments</a>, <a href="../../index.html#key5">command hierarchy</a>, <a href="../../index.html#key9">command line completion</a>, <a href="../../index.html#key11">command line handling</a>, <a href="../../index.html#key13">command tree</a>, <a href="../../index.html#key0">editing command line</a>, <a href="../../index.html#key8">help for command line</a>, <a href="../../index.html#key6">hierarchy of commands</a>, <a href="../../index.html#key3">interactive command shell</a>, <a href="../../index.html#key1">optional arguments</a>, <a href="../../index.html#key2">options</a>, <a href="../../index.html#key12">parameters</a>, <a href="../../index.html#key10">processing command line</a>, <a href="../../index.html#key7">tree of commands</a></p>
</div>
<div id="copyright" class="section"><h2><a name="copyright">Copyright</a></h2>
<p>Copyright &copy; 2013 Andreas Kupries<br>
Copyright &copy; 2013 Documentation, Andreas Kupries</p>
</div>
</div></body></html>

Changes to embedded/www/doc/files/cmdr_howto_development.html.

113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
...
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
...
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
...
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
...
290
291
292
293
294
295
296
297



298
299




300



301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">Development Tools</a></li>
<li class="section"><a href="#section3">Demonstration/Example Applications</a></li>
<li class="section"><a href="#section4">Directory structure</a></li>
<li class="section"><a href="#section5">Extended Build Actions</a></li>
<li class="section"><a href="#section6">Architecture &amp; Concepts</a>
<ul>
<li class="subsection"><a href="#subsection1">System Architecture</a></li>
<li class="subsection"><a href="#subsection2">Data structures</a></li>
<li class="subsection"><a href="#subsection3">Operation Sequences</a></li>
</ul>
</li>
<li class="section"><a href="#section7">Related Documents</a></li>
<li class="section"><a href="#section8">Bugs, Ideas, Feedback</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#copyright">Copyright</a></li>
</ul>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>Welcome to the Cmdr project, written by Andreas Kupries.</p>
<p>For availability please read <i class="term"><a href="cmdr_howto_get_sources.html">Cmdr - How To Get The Sources</a></i>.</p>
................................................................................
package in favor of the external application.</p></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">Demonstration/Example Applications</a></h2>
<p>Cmdr (currently) does not have demonstrations, nor examples.</p>
</div>
<div id="section4" class="section"><h2><a name="section4">Directory structure</a></h2>
<p>Explain the physical layout (directory structure).</p>
<dl class="definitions">
<dt>&quot;<b class="file">build.tcl</b>&quot;</dt>
<dd><p>The main file of the <b class="syscmd">kettle</b>-based build-system.</p></dd>
<dt>&quot;<b class="file">doc/</b>&quot;</dt>
<dd><p>Main directory for all documentation.</p>
<p>Based on the <b class="package">doctools</b> package and tools provided by
<b class="package">Tcllib</b>.</p></dd>
................................................................................
installation process itself).</p></li>
</ol></dd>
<dt>&quot;<b class="file">tests/</b>&quot;</dt>
<dd><p>Main directory for the test-suite.</p>
<p>Based on the <b class="package">tcltest</b> package distributed with the Tcl
core.</p></dd>
<dt>&quot;<b class="file">actor.tcl</b>&quot;</dt>
<dd><p>== Package <b class="package"><a href="cmdr_actor.html">cmdr::actor</a></b>.</p></dd>
<dt>&quot;<b class="file">cmdr.tcl</b>&quot;</dt>
<dd><p>== Package <b class="package"><a href="cmdr.html">cmdr</a></b>.</p></dd>
<dt>&quot;<b class="file">config.tcl</b>&quot;</dt>
<dd><p>== Package <b class="package"><a href="cmdr_config.html">cmdr::config</a></b>.</p></dd>
<dt>&quot;<b class="file">help.tcl</b>&quot;</dt>
<dd><p>== Package <b class="package"><a href="cmdr_help.html">cmdr::help</a></b>.</p></dd>
<dt>&quot;<b class="file">help_json.tcl</b>&quot;</dt>
<dd><p>== Package <b class="package"><a href="cmdr_help_json.html">cmdr::help::json</a></b>.</p></dd>
<dt>&quot;<b class="file">help_sql.tcl</b>&quot;</dt>
<dd><p>== Package <b class="package"><a href="cmdr_help_sql.html">cmdr::help::sql</a></b>.</p></dd>
<dt>&quot;<b class="file">officer.tcl</b>&quot;</dt>
<dd><p>== Package <b class="package"><a href="cmdr_officer.html">cmdr::officer</a></b>.</p></dd>
<dt>&quot;<b class="file">parameter.tcl</b>&quot;</dt>
<dd><p>== Package <b class="package"><a href="cmdr_parameter.html">cmdr::parameter</a></b>.</p></dd>
<dt>&quot;<b class="file">private.tcl</b>&quot;</dt>
<dd><p>== Package <b class="package"><a href="cmdr_private.html">cmdr::private</a></b>.</p></dd>
<dt>&quot;<b class="file">util.tcl</b>&quot;</dt>
<dd><p>== Package <b class="package"><a href="cmdr_util.html">cmdr::util</a></b>.</p></dd>
<dt>&quot;<b class="file">validate.tcl</b>&quot;</dt>
<dd><p>== Package <b class="package"><a href="cmdr_validate.html">cmdr::validate</a></b>.</p></dd>
<dt>&quot;<b class="file">vcommon.tcl</b>&quot;</dt>
<dd><p>== Package <b class="package"><a href="cmdr_vcommon.html">cmdr::validate::common</a></b>.</p></dd>
</dl>
</div>
<div id="section5" class="section"><h2><a name="section5">Extended Build Actions</a></h2>
<p>Our build-system is based on <b class="syscmd">kettle</b>, as already explained in
the <i class="term"><a href="cmdr_howto_installation.html">Cmdr - The Installer's Guide</a></i>. Beyond the targets useful for
installation it also provides targets aiding developers and
maintainers. These are:</p>
................................................................................
<pre class="example">
% /path/to/cmdr/build.tcl test --log &lt;stem&gt;
</pre>
</dd>
</dl>
</div>
<div id="section6" class="section"><h2><a name="section6">Architecture &amp; Concepts</a></h2>
<p>The following sections explain</p>
<ol class="enumerated">
<li><p>the internal architecture and package dependencies.</p></li>
<li><p>the internal data structures.</p></li>
<li><p>important operation sequences (UML SD).</p></li>
</ol>
<div id="subsection1" class="subsection"><h3><a name="subsection1">System Architecture</a></h3>
<p>All packages in the framework belong to one of three layers,
as shown below:</p>
<p><img alt="architecture" src="../../image/architecture.png"></p>
<p>Note that:</p>
<ul class="itemized">
<li><p>Packages marked with a dashed blue border are public in parts,
and private in parts.</p></li>
................................................................................
straight-forward, following mostly directly out of the relationships
shown above, plus the few where the utilities are imported. To reduce
the complexity of the diagram below a few direct dependencies on
<b class="package"><a href="cmdr_util.html">cmdr::util</a></b> were omitted where indirectly present through
other dependencies (i.e. through <b class="package"><a href="cmdr_help.html">cmdr::help</a></b>):</p>
<p><img alt="pkg_dependencies" src="../../image/pkg_dependencies.png"></p>
</div>
<div id="subsection2" class="subsection"><h3><a name="subsection2">Data structures</a></h3>



</div>
<div id="subsection3" class="subsection"><h3><a name="subsection3">Operation Sequences</a></h3>




</div>



</div>
<div id="section7" class="section"><h2><a name="section7">Related Documents</a></h2>
<ol class="enumerated">
<li><p><i class="term"><a href="cmdr_introduction.html">Cmdr - Introduction to the project</a></i></p></li>
<li><p><i class="term"><a href="cmdr_license.html">Cmdr - License</a></i></p></li>
<li><p><i class="term"><a href="cmdr_changes.html">Cmdr - Log of Changes</a></i></p></li>
<li><p><i class="term"><a href="cmdr_howto_get_sources.html">Cmdr - How To Get The Sources</a></i></p></li>
<li><p><i class="term"><a href="cmdr_howto_installation.html">Cmdr - The Installer's Guide</a></i></p></li>
<li><p><i class="term">Cmdr - The Developer's Guide</i></p></li>
</ol>
</div>
<div id="section8" class="section"><h2><a name="section8">Bugs, Ideas, Feedback</a></h2>
<p>Both the package(s) and this documentation will undoubtedly contain
bugs and other problems.
Please report such at
<a href="https:/core.tcl.tk/akupries/cmdr">Cmdr Tickets</a>.</p>
<p>Please also report any ideas you may have for enhancements of
either package(s) and/or documentation.</p>
</div>







|
|
|
|
<
<
<
|
|







 







|







 







|

|

|

|

|

|

|

|

|

|

|

|







 







<
<
<
<
<
<
<







 







|
>
>
>

<
>
>
>
>

>
>
>

|









|







113
114
115
116
117
118
119
120
121
122
123



124
125
126
127
128
129
130
131
132
...
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
...
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
...
253
254
255
256
257
258
259







260
261
262
263
264
265
266
...
280
281
282
283
284
285
286
287
288
289
290
291

292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">Development Tools</a></li>
<li class="section"><a href="#section3">Demonstration/Example Applications</a></li>
<li class="section"><a href="#section4">Directory structure</a></li>
<li class="section"><a href="#section5">Extended Build Actions</a></li>
<li class="section"><a href="#section6">Architecture &amp; Concepts</a></li>
<li class="section"><a href="#section7">Validation Types</a></li>
<li class="section"><a href="#section8">Help Formats</a></li>
<li class="section"><a href="#section9">Command Line Completion</a></li>



<li class="section"><a href="#section10">Related Documents</a></li>
<li class="section"><a href="#section11">Bugs, Ideas, Feedback</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#copyright">Copyright</a></li>
</ul>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>Welcome to the Cmdr project, written by Andreas Kupries.</p>
<p>For availability please read <i class="term"><a href="cmdr_howto_get_sources.html">Cmdr - How To Get The Sources</a></i>.</p>
................................................................................
package in favor of the external application.</p></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">Demonstration/Example Applications</a></h2>
<p>Cmdr (currently) does not have demonstrations, nor examples.</p>
</div>
<div id="section4" class="section"><h2><a name="section4">Directory structure</a></h2>
<p>The directory structure of the sources is as explained below:</p>
<dl class="definitions">
<dt>&quot;<b class="file">build.tcl</b>&quot;</dt>
<dd><p>The main file of the <b class="syscmd">kettle</b>-based build-system.</p></dd>
<dt>&quot;<b class="file">doc/</b>&quot;</dt>
<dd><p>Main directory for all documentation.</p>
<p>Based on the <b class="package">doctools</b> package and tools provided by
<b class="package">Tcllib</b>.</p></dd>
................................................................................
installation process itself).</p></li>
</ol></dd>
<dt>&quot;<b class="file">tests/</b>&quot;</dt>
<dd><p>Main directory for the test-suite.</p>
<p>Based on the <b class="package">tcltest</b> package distributed with the Tcl
core.</p></dd>
<dt>&quot;<b class="file">actor.tcl</b>&quot;</dt>
<dd><p>Package <b class="package"><a href="cmdr_actor.html">cmdr::actor</a></b>.</p></dd>
<dt>&quot;<b class="file">cmdr.tcl</b>&quot;</dt>
<dd><p>Package <b class="package"><a href="cmdr.html">cmdr</a></b>.</p></dd>
<dt>&quot;<b class="file">config.tcl</b>&quot;</dt>
<dd><p>Package <b class="package"><a href="cmdr_config.html">cmdr::config</a></b>.</p></dd>
<dt>&quot;<b class="file">help.tcl</b>&quot;</dt>
<dd><p>Package <b class="package"><a href="cmdr_help.html">cmdr::help</a></b>.</p></dd>
<dt>&quot;<b class="file">help_json.tcl</b>&quot;</dt>
<dd><p>Package <b class="package"><a href="cmdr_help_json.html">cmdr::help::json</a></b>.</p></dd>
<dt>&quot;<b class="file">help_sql.tcl</b>&quot;</dt>
<dd><p>Package <b class="package"><a href="cmdr_help_sql.html">cmdr::help::sql</a></b>.</p></dd>
<dt>&quot;<b class="file">officer.tcl</b>&quot;</dt>
<dd><p>Package <b class="package"><a href="cmdr_officer.html">cmdr::officer</a></b>.</p></dd>
<dt>&quot;<b class="file">parameter.tcl</b>&quot;</dt>
<dd><p>Package <b class="package"><a href="cmdr_parameter.html">cmdr::parameter</a></b>.</p></dd>
<dt>&quot;<b class="file">private.tcl</b>&quot;</dt>
<dd><p>Package <b class="package"><a href="cmdr_private.html">cmdr::private</a></b>.</p></dd>
<dt>&quot;<b class="file">util.tcl</b>&quot;</dt>
<dd><p>Package <b class="package"><a href="cmdr_util.html">cmdr::util</a></b>.</p></dd>
<dt>&quot;<b class="file">validate.tcl</b>&quot;</dt>
<dd><p>Package <b class="package"><a href="cmdr_validate.html">cmdr::validate</a></b>.</p></dd>
<dt>&quot;<b class="file">vcommon.tcl</b>&quot;</dt>
<dd><p>Package <b class="package"><a href="cmdr_vcommon.html">cmdr::validate::common</a></b>.</p></dd>
</dl>
</div>
<div id="section5" class="section"><h2><a name="section5">Extended Build Actions</a></h2>
<p>Our build-system is based on <b class="syscmd">kettle</b>, as already explained in
the <i class="term"><a href="cmdr_howto_installation.html">Cmdr - The Installer's Guide</a></i>. Beyond the targets useful for
installation it also provides targets aiding developers and
maintainers. These are:</p>
................................................................................
<pre class="example">
% /path/to/cmdr/build.tcl test --log &lt;stem&gt;
</pre>
</dd>
</dl>
</div>
<div id="section6" class="section"><h2><a name="section6">Architecture &amp; Concepts</a></h2>







<p>All packages in the framework belong to one of three layers,
as shown below:</p>
<p><img alt="architecture" src="../../image/architecture.png"></p>
<p>Note that:</p>
<ul class="itemized">
<li><p>Packages marked with a dashed blue border are public in parts,
and private in parts.</p></li>
................................................................................
straight-forward, following mostly directly out of the relationships
shown above, plus the few where the utilities are imported. To reduce
the complexity of the diagram below a few direct dependencies on
<b class="package"><a href="cmdr_util.html">cmdr::util</a></b> were omitted where indirectly present through
other dependencies (i.e. through <b class="package"><a href="cmdr_help.html">cmdr::help</a></b>):</p>
<p><img alt="pkg_dependencies" src="../../image/pkg_dependencies.png"></p>
</div>
<div id="section7" class="section"><h2><a name="section7">Validation Types</a></h2>
<p>Everything said in the public document <i class="term"><a href="cmdr_vtypes.html">Cmdr - Writing custom validation types</a></i>
applies to the standard validation types of the framework (as listed
in <i class="term"><a href="cmdr_validate.html">Cmdr - Standard validation types for parameters</a></i>) as well.</p>
</div>

<div id="section8" class="section"><h2><a name="section8">Help Formats</a></h2>
<p>Everything said in the public document <i class="term">Cmdr - Writing custom help formats</i>
applies to the standard help formats of the framework (as listed in
<i class="term">Cmdr - Standard help formats of the framework</i>) as well.</p>
</div>
<div id="section9" class="section"><h2><a name="section9">Command Line Completion</a></h2>
<p>The document <i class="term"><a href="cmdr_dev_completion.html">Cmdr - Internals of command line completion</a></i> describes the inner
workings of the command line completion provided by the framework.</p>
</div>
<div id="section10" class="section"><h2><a name="section10">Related Documents</a></h2>
<ol class="enumerated">
<li><p><i class="term"><a href="cmdr_introduction.html">Cmdr - Introduction to the project</a></i></p></li>
<li><p><i class="term"><a href="cmdr_license.html">Cmdr - License</a></i></p></li>
<li><p><i class="term"><a href="cmdr_changes.html">Cmdr - Log of Changes</a></i></p></li>
<li><p><i class="term"><a href="cmdr_howto_get_sources.html">Cmdr - How To Get The Sources</a></i></p></li>
<li><p><i class="term"><a href="cmdr_howto_installation.html">Cmdr - The Installer's Guide</a></i></p></li>
<li><p><i class="term">Cmdr - The Developer's Guide</i></p></li>
</ol>
</div>
<div id="section11" class="section"><h2><a name="section11">Bugs, Ideas, Feedback</a></h2>
<p>Both the package(s) and this documentation will undoubtedly contain
bugs and other problems.
Please report such at
<a href="https:/core.tcl.tk/akupries/cmdr">Cmdr Tickets</a>.</p>
<p>Please also report any ideas you may have for enhancements of
either package(s) and/or documentation.</p>
</div>

Changes to embedded/www/doc/toc.html.

62
63
64
65
66
67
68




69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<td class="#tocright">Cmdr - Utilities for Validation Types</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/cmdr_changes.html">cmdr_changes</a></td>
<td class="#tocright">Cmdr - Log of Changes</td>
</tr>
<tr class="#tocodd"  >




<td class="#tocleft" ><a href="files/cmdr_howto_development.html">cmdr_development</a></td>
<td class="#tocright">Cmdr - The Developer's Guide</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/cmdr_dsl.html">cmdr_dsl</a></td>
<td class="#tocright">Cmdr - Introduction to the Specification Language</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/cmdr_dsl_officer.html">cmdr_dsl_officer</a></td>
<td class="#tocright">Cmdr - Officer Specification Language</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/cmdr_dsl_parameter.html">cmdr_dsl_parameter</a></td>
<td class="#tocright">Cmdr - Parameter Specification Language</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/cmdr_dsl_private.html">cmdr_dsl_private</a></td>
<td class="#tocright">Cmdr - Private Specification Language</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/cmdr_howto_get_sources.html">cmdr_howto_get_sources</a></td>
<td class="#tocright">Cmdr - How To Get The Sources</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/cmdr_howto_installation.html">cmdr_installation</a></td>
<td class="#tocright">Cmdr - The Installer's Guide</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/cmdr_introduction.html">cmdr_introduction</a></td>
<td class="#tocright">Cmdr - Introduction to the project</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/cmdr_license.html">cmdr_license</a></td>
<td class="#tocright">Cmdr - License</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/cmdr_vtypes.html">cmdr_vtypes</a></td>
<td class="#tocright">Cmdr - Writing custom validation types</td>
</tr>
</table>
</dl><hr></body></html>







>
>
>
>



|



|



|



|



|



|



|



|



|





62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<td class="#tocright">Cmdr - Utilities for Validation Types</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/cmdr_changes.html">cmdr_changes</a></td>
<td class="#tocright">Cmdr - Log of Changes</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/cmdr_dev_completion.html">cmdr_completion</a></td>
<td class="#tocright">Cmdr - Internals of command line completion</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/cmdr_howto_development.html">cmdr_development</a></td>
<td class="#tocright">Cmdr - The Developer's Guide</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/cmdr_dsl.html">cmdr_dsl</a></td>
<td class="#tocright">Cmdr - Introduction to the Specification Language</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/cmdr_dsl_officer.html">cmdr_dsl_officer</a></td>
<td class="#tocright">Cmdr - Officer Specification Language</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/cmdr_dsl_parameter.html">cmdr_dsl_parameter</a></td>
<td class="#tocright">Cmdr - Parameter Specification Language</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/cmdr_dsl_private.html">cmdr_dsl_private</a></td>
<td class="#tocright">Cmdr - Private Specification Language</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/cmdr_howto_get_sources.html">cmdr_howto_get_sources</a></td>
<td class="#tocright">Cmdr - How To Get The Sources</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/cmdr_howto_installation.html">cmdr_installation</a></td>
<td class="#tocright">Cmdr - The Installer's Guide</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/cmdr_introduction.html">cmdr_introduction</a></td>
<td class="#tocright">Cmdr - Introduction to the project</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/cmdr_license.html">cmdr_license</a></td>
<td class="#tocright">Cmdr - License</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/cmdr_vtypes.html">cmdr_vtypes</a></td>
<td class="#tocright">Cmdr - Writing custom validation types</td>
</tr>
</table>
</dl><hr></body></html>

Changes to embedded/www/index.html.

18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<hr><table class="#idx" width="100%">
<tr class="#idxheader"><th colspan="2">
<a name="c1">Keywords: A</a>
</th></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key4"> arguments </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c2">Keywords: C</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key5"> command hierarchy </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key9"> command line completion </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key11"> command line handling </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key13"> command tree </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c3">Keywords: E</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key0"> editing command line </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c4">Keywords: H</a>
</th></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key8"> help for command line </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key6"> hierarchy of commands </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c5">Keywords: I</a>
</th></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key3"> interactive command shell </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c6">Keywords: O</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key1"> optional arguments </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key2"> options </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c7">Keywords: P</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key12"> parameters </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key10"> processing command line </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c8">Keywords: T</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key7"> tree of commands </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
</table>
</body></html>







|







|




|




|




|







|







|




|







|







|




|







|




|







|



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<hr><table class="#idx" width="100%">
<tr class="#idxheader"><th colspan="2">
<a name="c1">Keywords: A</a>
</th></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key4"> arguments </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c2">Keywords: C</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key5"> command hierarchy </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key9"> command line completion </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key11"> command line handling </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key13"> command tree </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c3">Keywords: E</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key0"> editing command line </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c4">Keywords: H</a>
</th></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key8"> help for command line </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key6"> hierarchy of commands </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c5">Keywords: I</a>
</th></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key3"> interactive command shell </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c6">Keywords: O</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key1"> optional arguments </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key2"> options </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c7">Keywords: P</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key12"> parameters </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key10"> processing command line </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c8">Keywords: T</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key7"> tree of commands </a></td>
<td class="#idxright" width="65%">
<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
</td></tr>
</table>
</body></html>

Changes to embedded/www/toc.html.

62
63
64
65
66
67
68




69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<td class="#tocright">Cmdr - Utilities for Validation Types</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="doc/files/cmdr_changes.html">cmdr_changes</a></td>
<td class="#tocright">Cmdr - Log of Changes</td>
</tr>
<tr class="#tocodd"  >




<td class="#tocleft" ><a href="doc/files/cmdr_howto_development.html">cmdr_development</a></td>
<td class="#tocright">Cmdr - The Developer's Guide</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="doc/files/cmdr_dsl.html">cmdr_dsl</a></td>
<td class="#tocright">Cmdr - Introduction to the Specification Language</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="doc/files/cmdr_dsl_officer.html">cmdr_dsl_officer</a></td>
<td class="#tocright">Cmdr - Officer Specification Language</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="doc/files/cmdr_dsl_parameter.html">cmdr_dsl_parameter</a></td>
<td class="#tocright">Cmdr - Parameter Specification Language</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="doc/files/cmdr_dsl_private.html">cmdr_dsl_private</a></td>
<td class="#tocright">Cmdr - Private Specification Language</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="doc/files/cmdr_howto_get_sources.html">cmdr_howto_get_sources</a></td>
<td class="#tocright">Cmdr - How To Get The Sources</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="doc/files/cmdr_howto_installation.html">cmdr_installation</a></td>
<td class="#tocright">Cmdr - The Installer's Guide</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="doc/files/cmdr_introduction.html">cmdr_introduction</a></td>
<td class="#tocright">Cmdr - Introduction to the project</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="doc/files/cmdr_license.html">cmdr_license</a></td>
<td class="#tocright">Cmdr - License</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="doc/files/cmdr_vtypes.html">cmdr_vtypes</a></td>
<td class="#tocright">Cmdr - Writing custom validation types</td>
</tr>
</table>
</dl><hr></body></html>







>
>
>
>



|



|



|



|



|



|



|



|



|





62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<td class="#tocright">Cmdr - Utilities for Validation Types</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="doc/files/cmdr_changes.html">cmdr_changes</a></td>
<td class="#tocright">Cmdr - Log of Changes</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="doc/files/cmdr_dev_completion.html">cmdr_completion</a></td>
<td class="#tocright">Cmdr - Internals of command line completion</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="doc/files/cmdr_howto_development.html">cmdr_development</a></td>
<td class="#tocright">Cmdr - The Developer's Guide</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="doc/files/cmdr_dsl.html">cmdr_dsl</a></td>
<td class="#tocright">Cmdr - Introduction to the Specification Language</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="doc/files/cmdr_dsl_officer.html">cmdr_dsl_officer</a></td>
<td class="#tocright">Cmdr - Officer Specification Language</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="doc/files/cmdr_dsl_parameter.html">cmdr_dsl_parameter</a></td>
<td class="#tocright">Cmdr - Parameter Specification Language</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="doc/files/cmdr_dsl_private.html">cmdr_dsl_private</a></td>
<td class="#tocright">Cmdr - Private Specification Language</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="doc/files/cmdr_howto_get_sources.html">cmdr_howto_get_sources</a></td>
<td class="#tocright">Cmdr - How To Get The Sources</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="doc/files/cmdr_howto_installation.html">cmdr_installation</a></td>
<td class="#tocright">Cmdr - The Installer's Guide</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="doc/files/cmdr_introduction.html">cmdr_introduction</a></td>
<td class="#tocright">Cmdr - Introduction to the project</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="doc/files/cmdr_license.html">cmdr_license</a></td>
<td class="#tocright">Cmdr - License</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="doc/files/cmdr_vtypes.html">cmdr_vtypes</a></td>
<td class="#tocright">Cmdr - Writing custom validation types</td>
</tr>
</table>
</dl><hr></body></html>