annotate docs/nitros9guide/chap4.chapter @ 603:e9578f62b346

All refentries finished.
author roug
date Fri, 15 Nov 2002 21:49:51 +0000
parents f4e798ea65b9
children 2e21fb7216af
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
144
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
1 <chapter>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
2 <title>Advanced Features of the Shell</title>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
3 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
4 The basic shell functions were introduced in Section 2 in order
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
5 to provide an understanding of how basic OS-9 commands work. In
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
6 this section the more advanced capabilities of the shell are
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
7 discussed. In addition to basic command line processing, the shell
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
8 has functions that facilitate:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
9 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
10
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
11 <itemizedlist mark="square">
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
12 <listitem><para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
13 I/O redirection (including filters)
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
14 </para></listitem>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
15 <listitem><para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
16 Memory Allocation
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
17 </para></listitem>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
18 <listitem><para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
19 Multitasking (concurrent execution)
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
20 </para></listitem>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
21 <listitem><para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
22 Procedure File Execution (background processing)
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
23 </para></listitem>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
24 <listitem><para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
25 Execution Control (built-in commands)
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
26 </para></listitem>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
27 </itemizedlist>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
28
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
29 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
30 There is a virtually unlimited combination of ways these
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
31 capabilities can be used, and it is impossible to give more than a
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
32 representative set of examples in this manual. You are therefore
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
33 encouraged to study the basic rules, use your imagination, and
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
34 explore the possibilities on your own.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
35 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
36
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
37 <section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
38 <title>A More Detailed Description Command Line Processing</title>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
39 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
40 The shell is a program that reads and processes command lines one
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
41 at a time from its input path (usually your keyboard). Each line is
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
42 first scanned (or &quot;parsed&quot;) in order to identify and process any of
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
43 the following parts which may be present:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
44 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
45
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
46 <itemizedlist mark="square">
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
47 <listitem><para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
48 A program, procedure file, or built-in command name (&quot;verbs&quot;)
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
49 </para></listitem>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
50 <listitem><para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
51 Parameters to be passed to the program
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
52 </para></listitem>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
53 <listitem><para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
54 Execution modifiers to be processed by the shell
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
55 </para></listitem>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
56 </itemizedlist>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
57
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
58 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
59 Note that only the verb (the program or command name) need be
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
60 present, the other parts are optional. After the verb has been
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
61 identified, the shell processes modifiers (if any). Any other text
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
62 not yet processed is assumed to be parameters and passed to the program called.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
63 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
64 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
65 Unless the verb is a &quot;built-in command&quot;, the shell will run the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
66 program named as a new process (task). It then deactivates itself
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
67 until the program called eventually terminates, at which time it
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
68 gets another input line, then the process is repeated. This happens
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
69 over and over until an end-of-file condition is detected on the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
70 shell's input path which causes the shell to terminate its own
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
71 execution.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
72 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
73 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
74 Here is a sample shell line which calls the assembler:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
75 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
76 <screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
77 asm sourcefile l -o &gt;/p #12k
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
78 </screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
79 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
80 In this example:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
81 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
82
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
83 <informaltable frame="none">
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
84 <tgroup cols="2">
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
85 <colspec colwidth="2in">
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
86 <colspec colwidth="3in">
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
87 <tbody>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
88 <row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
89 <entry>asm</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
90 <entry>is the verb</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
91 </row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
92 <row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
93 <entry>sourcefile l -o</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
94 <entry>are parameters passed to &quot;asm</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
95 </row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
96 <row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
97 <entry>&gt;/p</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
98 <entry>is a modifier which redirects the output
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
99 (listing) to the system's printer</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
100 </row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
101 <row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
102 <entry>#12K</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
103 <entry>is a modifier which requests that the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
104 process be assigned 12K bytes of memory
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
105 instead of its (smaller) default amount.</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
106 </row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
107 </tbody>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
108 </tgroup>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
109 </informaltable>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
110
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
111 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
112 The verb must be the first name in the command line. After it
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
113 has been scanned, the shell first checks if it is a &quot;built-in&quot;
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
114 command. If it is, it is immediately executed. Otherwise, the shell
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
115 assumes it is a program name and attempts to locate and execute it
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
116 as described in Sections 5.3 and 5.4.1.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
117 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
118 </section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
119
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
120 <section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
121 <title>Execution Modifiers</title>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
122 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
123 Execution modifiers are processed by the shell before the program
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
124 is run. If an error is detected in any of the modifiers, the run
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
125 will be aborted and the error reported. Characters which comprise
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
126 modifiers are stripped from the part(s) of the command line passed
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
127 to the program as parameters, therefore, the characters reserved for
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
128 use as modifiers ( # ; ! &lt; &gt; &amp; ) cannot be used inside parameters,
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
129 but can be used before or after the parameters.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
130 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
131
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
132 <section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
133 <title>Alternate Memory Size Modifier</title>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
134 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
135 When command programs are invoked by the shell, they are
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
136 allocated the minimum amount of working RAM memory specified in the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
137 program's module header. A module header is part of all executable
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
138 programs and holds the program's name, size, memory requirements,
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
139 etc. (See 5.4). Sometimes it is desirable to increase this default
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
140 memory size. Memory can be assigned in 256-byte pages using the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
141 modifier &quot;#n&quot; where n is the decimal number of pages, or in 1024
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
142 byte increments using the modifier &quot;#nK&quot;. The two examples below
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
143 behave identically:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
144 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
145 <screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
146 OS9: copy #8 file1 file2 (gives 8*256 = 2048 bytes)
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
147 OS9: copy #2K file1 file2 (gives 2*1024 = 2048 bytes)
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
148 </screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
149 </section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
150
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
151 <section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
152 <title>I/O Redirection Modifiers</title>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
153 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
154 The second kind of modifier is used to redirect the program's
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
155 &quot;standard I/O paths&quot; to alternate files or devices. Well-written
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
156 OS-9 programs use these paths for routine I/O. Because the programs
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
157 do not use specific file or device names, it is fairly simple to
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
158 &quot;redirect&quot; the I/O to any file or device without altering the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
159 program itself. Programs which normally receive input from a
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
160 terminal or send output to a terminal use one or more of the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
161 standard I/O paths as defined below:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
162 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
163 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
164 STANDARD INPUT: This path normally passes data from the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
165 terminal's keyboard to the program.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
166 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
167 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
168 STANDARD OUTPUT PATH: This path is normally used to output
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
169 data from the program to the terminal's display.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
170 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
171 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
172 STANDARD ERROR OUTPUT PATH: This path is used to output
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
173 routine status messages such as prompts and errors to the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
174 terminal's display (defaults to the same device as the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
175 standard output path). NOTE: The name &quot;error output&quot; is
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
176 sometimes misleading since many other kinds of messages besides
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
177 errors are sent on this path.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
178 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
179 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
180 When new processes are created, they inherit their parent process'
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
181 standard I/O paths (See 5.3). Therefore, when the shell
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
182 creates new processes, they usually inherit its standard I/O paths.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
183 When you log-on the shell's standard input is the terminal keyboard;
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
184 the standard output and error output is the terminal's display.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
185 When a redirection modifier is used on a shell command line, the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
186 shell will open the corresponding paths and pass them to the new
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
187 process as its standard I/O paths. There are three redirection
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
188 modifiers as given below:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
189 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
190 <informaltable frame="none">
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
191 <tgroup cols="2">
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
192 <colspec colwidth="0.4in">
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
193 <colspec colwidth="3in">
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
194 <tbody>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
195 <row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
196 <entry>&lt;</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
197 <entry>Redirect the standard input path</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
198 </row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
199 <row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
200 <entry>&gt;</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
201 <entry>Redirect the standard output path</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
202 </row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
203 <row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
204 <entry>&gt;&gt;</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
205 <entry>Redirect the standard error output path</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
206 </row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
207 </tbody>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
208 </tgroup>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
209 </informaltable>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
210
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
211 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
212 When redirection modifiers are used on a command line, they must
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
213 be immediately followed by a pathlist describing the file or device
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
214 the I/O is to be redirected to or from. For example, the standard
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
215 output of &quot;list&quot; can be redirected to write to the system printer
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
216 instead of the terminal:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
217 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
218 <screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
219 OS9: LIST correspondence &gt;/p
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
220 </screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
221 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
222 Files referenced by I/O redirection modifiers are automatically
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
223 opened or created, and closed (as appropriate) by the shell. Here is
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
224 another example, the output of the DIR command is redirected to the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
225 file &quot;/D1/savelisting&quot;:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
226 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
227 <screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
228 OS9: DIR &gt;/D1/savelisting
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
229 </screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
230 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
231 If the LIST command is used on the file &quot;/D1/savelisting&quot;, output
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
232 from the DIR command will be displayed as shown below:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
233 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
234 <screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
235 OS9: LIST /D1/savelisting
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
236
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
237 Directory of . 10:15:00
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
238 myfile savelisting file1
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
239 </screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
240 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
241 Redirection modifiers can be used before and/or after the program's
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
242 parameters, but each modifier can only be used once.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
243 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
244 </section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
245 </section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
246
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
247 <section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
248 <title>Command Separators</title>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
249 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
250 A single shell input line can request execution of more than one
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
251 program. These programs may be executed sequentially or
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
252 concurrently. Sequential execution means that one program must
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
253 complete its function and terminate before the next program is
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
254 allowed to begin execution. Concurrent execution means that several
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
255 programs are allowed to begin execution and run simultaneously.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
256
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
257 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
258
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
259 <section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
260 <title>Sequential Execution</title>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
261 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
262 Programs are executed sequentially when each is entered on a
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
263 separate line. More than one program can be specified on a single
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
264 shell command line by separating each
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
265 &replstart;program name&replend; &replstart;parameters&replend;
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
266 from the next one with a &quot;;&quot; character. For example:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
267 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
268 <screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
269 OS9: COPY myfile /D1/newfile ; DIR &gt;/p
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
270 </screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
271 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
272 This command line will first execute the COPY command and then the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
273 DIR command.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
274 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
275 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
276 If an error is returned by any program, subsequent commands on
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
277 the same line are not executed (regardless of the state of the &quot;x&quot;
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
278 option), otherwise, &quot;;&quot; and &quot;return&quot; are identical
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
279 separators.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
280 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
281 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
282 Here are some more examples:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
283 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
284 <screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
285 OS9: copy oldfile newfile; del oldfile; list newfile
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
286
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
287 OS9: dir &gt;/d1/myfile ; list temp &gt;/p; del temp
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
288 </screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
289 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
290 All programs executed sequentially are in fact separate, child
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
291 processes of the shell (See 5.3). After initiating execution of a
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
292 program to be executed sequentially, the shell enters the &quot;wait&quot;
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
293 state (See 5.2) until execution of the called program terminates.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
294 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
295 </section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
296
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
297 <section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
298 <title>Concurrent Execution</title>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
299 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
300 The second kind of separator is the &quot;&amp;&quot; which implies concurrent
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
301 execution, meaning that the program is run (as a separate, child
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
302 process, see 5.3), but the shell does not wait for it to complete
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
303 before processing the next command.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
304 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
305 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
306 The concurrent execution separator is therefore the means by
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
307 which multiprogramming (running two or more programs simultaneously)
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
308 is accomplished. The number of programs that can run at the same
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
309 time is not fixed: it depends upon the amount of free memory in the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
310 system versus the memory requirements of the specific programs.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
311 Here is an example:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
312 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
313 <screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
314 OS9: DIR &gt;/P&amp;
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
315 &amp;007
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
316
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
317 OS9:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
318 </screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
319 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
320 This command line will cause shell to start the DIR command
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
321 executing, print the process ID number (&amp;007), and then immediately
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
322 display the &quot;OS9:&quot; prompt and wait for another command to be
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
323 entered. Meanwhile the DIR command will be busy sending a directory
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
324 listing to the printer. You can display a &quot;status summary&quot; of all
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
325 processes you have created by using the PROCS command. Below is
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
326 another example:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
327 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
328 <screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
329 OS9: DIR &gt;/P&amp; LIST file1&amp; COPY file1 file2 ; DEL temp
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
330 </screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
331 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
332
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
333 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
334 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
335 Because they were followed by &quot;&amp;&quot; separators, the DIR, LIST, and
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
336 COPY programs will run concurrently, but the DEL program will not
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
337 run until the COPY program has terminated because sequential
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
338 execution (&quot;;&quot;) was specified.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
339 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
340 </section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
341
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
342 <section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
343 <title>Pipes and Filters</title>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
344 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
345 The third kind of separator is the &quot;!&quot; character which is used to
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
346 construct &quot;pipelines&quot;. Pipelines consist of two or more concurrent
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
347 programs whose standard input and/or output paths connect to each
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
348 other using &quot;pipes&quot;.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
349 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
350 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
351 Pipes are the primary means-by which data is transferred from
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
352 process to process (interprocess communications). Pipes are first-in,
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
353 first-out buffers that behave like mass-storage files.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
354 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
355 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
356 I/O transfers using pipes are automatically buffered and
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
357 synchronized. A single pipe may have several &quot;readers&quot; and several
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
358 &quot;writers&quot;. Multiple writers send, and multiple readers accept, data
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
359 to/from the pipe on a first-come, first-serve basis. An end-of-file
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
360 will occur if an attempt is made to read from a pipe but there are
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
361 no writers available to send data. Conversely, a write error will
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
362 occur if an attempt is made to write to a pipe having no readers.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
363 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
364 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
365 Pipelines are created by the shell when an input line having one
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
366 or more &quot;!&quot; separators is processed. For each &quot;!&quot;, the standard
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
367 output of the program named to the left of the &quot;!&quot; is redirected via
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
368 a pipe to the standard input of the program named to the right of
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
369 the &quot;!&quot;. Individual pipes are created for each &quot;!&quot; present.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
370 For example:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
371 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
372 <screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
373 OS9: update &lt;master_file ! sort ! write_report &gt;/p
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
374 </screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
375 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
376 In the example above, the program &quot;update&quot; has its input redirected
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
377 from a path called &quot;master_file&quot;. Its standard output becomes the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
378 standard input for the program &quot;sort&quot;. Its output, in turn, becomes
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
379 the standard input for the program &quot;write_report&quot;, which has its
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
380 standard output redirected to the printer.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
381 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
382 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
383 All programs in a pipeline are executed concurrently. The pipes
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
384 automatically synchronize the programs so the output of one never
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
385 &quot;gets ahead&quot; of the input request of the next program in the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
386 pipeline. This implies that data cannot flow through a pipeline any
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
387 faster than the slowest program can process it. Some of the most
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
388 useful applications of pipelines are jobs like character set
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
389 conversion, print file formatting, data compression/decompression,
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
390 etc. Programs which are designed to process data as components of a
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
391 pipeline are often called &quot;filters&quot;.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
392 The &quot;tee&quot; command, which uses
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
393 pipes to allow data to be simultaneously &quot;broadcast&quot; from a single
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
394 input path to several output paths, is a useful filter.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
395 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
396 </section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
397 </section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
398
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
399 <section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
400 <title>Command Grouping</title>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
401 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
402 Sections of shell input lines can be enclosed in parentheses
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
403 which permits modifiers and separators to be applied to an entire
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
404 set of programs. The shell processes them by calling itself
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
405 recursively (as a new process) to execute the enclosed program list.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
406 For example:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
407 <screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
408 OS9: (dir /d0; dir /d1) &gt;/p
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
409 </screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
410 gives the same result as:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
411 <screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
412 OS9: dir /d0 &gt;/p; dir /d1 &gt;/p
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
413 </screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
414 except for the subtle difference that the printer is &quot;kept&quot;
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
415 continuously in the first example; in the second case another user
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
416 could &quot;steal&quot; the printer in between the &quot;dir&quot; commands.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
417 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
418 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
419 Command grouping can be used to cause a group of programs to be
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
420 executed sequentially, but also concurrently with respect to the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
421 shell that initiated them, such as:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
422 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
423 <screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
424 OS9: (del file1; del file2; del file3)&amp;
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
425 </screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
426 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
427 A useful extension of this form is to construct pipelines consisting
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
428 of sequential and/or concurrent programs. For example:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
429 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
430 <screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
431 OS9: (dir CMDS; dir SYS) ! makeuppercase ! transmit
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
432 </screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
433 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
434 Here is a very practical example of the use of pipelines. Recall
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
435 that the &quot;DSAVE&quot; command generates a procedure file to copy all the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
436 files in a directory. The example below shows how the output of
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
437 &quot;DSAVE&quot; can be pipelined to a shell which will execute the OS-9
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
438 commands as they are generated by DSAVE. Assume that we want to
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
439 copy all files from a directory called WORKING to a directory called
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
440 ARCHIVE:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
441 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
442 <screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
443 OS9: chd /d0/WORKING; dsave ! (chd /d0/ARCHIVE)
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
444 </screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
445 </section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
446
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
447 <section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
448 <title>Built-in Shell Commands and Options</title>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
449 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
450 When processing input lines, the shell looks for several special
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
451 names of commands or option switches that are built-in the shell.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
452 These commands are executed without loading a program and creating a
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
453 new process, and generally affect how the shell operates. They can
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
454 be used at the beginning of a line, or following any program
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
455 separator (&quot;;&quot;, &quot;&amp;&quot;, or &quot;!&quot;).
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
456 Two or more adjacent built-in
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
457 commands can be separated by spaces or commas.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
458 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
459 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
460 The built-in commands and their functions are:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
461 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
462 <informaltable frame="none">
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
463 <tgroup cols="2">
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
464 <colspec colwidth="1.5in">
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
465 <colspec colwidth="3.5in">
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
466 <tbody>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
467 <row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
468 <entry>chd &replstart;pathlist&replend;</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
469 <entry>change the working data directory to the directory
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
470 specified by the pathlist (see 3.6).</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
471 </row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
472 <row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
473 <entry>chx &replstart;pathlist&replend;</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
474 <entry>change the working execution directory to the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
475 directory specified by the pathlist (see 3.6).</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
476 </row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
477 <row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
478 <entry>ex name</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
479 <entry>directly execute the module named. This
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
480 transforms the shell process so it ceases
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
481 to exist and a new module begins execution in
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
482 its place.</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
483 </row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
484 <row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
485 <entry>w</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
486 <entry>wait for any process to terminate.</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
487 </row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
488 <row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
489 <entry>* text</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
490 <entry>comment: &quot;text&quot; is not processed.</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
491 </row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
492 <row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
493 <entry>kill &replstart;Proc ID&replend;</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
494 <entry>abort the process specified.</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
495 </row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
496 <row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
497 <entry>setpr &replstart;proc ID&replend; &replstart;priority&replend;</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
498 <entry>changes process' priority (see 5.1).</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
499 </row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
500 <row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
501 <entry>x</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
502 <entry>causes shell to abort on any error (default)</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
503 </row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
504 <row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
505 <entry>-x</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
506 <entry>causes shell not to abort on error (See 4.7)</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
507 </row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
508 <row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
509 <entry>p</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
510 <entry>turns shell prompt and messages on (default)</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
511 </row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
512 <row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
513 <entry>-p</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
514 <entry>inhibits shell prompt and messages</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
515 </row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
516 <row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
517 <entry>t</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
518 <entry>makes shell copy all input lines to output</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
519 </row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
520 <row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
521 <entry>-t</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
522 <entry>does not copy input lines to output (default)</entry>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
523 </row>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
524 </tbody>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
525 </tgroup>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
526 </informaltable>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
527
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
528
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
529 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
530 The change directory commands switch the shell's working directory
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
531 and, by inheritance, any subsequently created child process. The
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
532 &quot;ex&quot; command is used where the shell is needed to initiate execution
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
533 of a program without the overhead of a suspended &quot;shell&quot; process.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
534 The name used is processed according to standard shell operation,
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
535 and modifiers can be used.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
536 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
537 </section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
538
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
539 <section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
540 <title>Shell Procedure Files</title>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
541 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
542 The shell is a reentrant program that can be simultaneously
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
543 executed by more than one process at a time. As is the case with
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
544 most other OS-9 programs, it uses standard I/O paths for routine
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
545 input and output (see 4.2.3). specifically, it requests command
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
546 lines from the standard input path and writes its prompts and other
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
547 data to the standard error path.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
548 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
549 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
550 The shell can start up another process also running the shell by
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
551 means of the &quot;shell&quot; command. If the standard input path is
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
552 redirected to a mass storage file, the new &quot;incarnation&quot; of the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
553 shell can accept and execute command lines from the file instead of
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
554 a terminal keyboard. The text file (see 3.9.2) to be processed is
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
555 called a &quot;procedure file&quot;. It contains one or more command lines
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
556 that are identical to command lines that are manually entered from
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
557 the keyboard. This technique is sometimes called &quot;batch&quot; or
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
558 &quot;background&quot; processing.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
559 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
560 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
561 If the &replstart;program name&replend; specified on a shell command line can not be
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
562 found in memory or in the execution directory, shell will search the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
563 data directory for a file with the desired name. If one is found,
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
564 shell will automatically execute it as a procedure file (see 2.0).
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
565 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
566 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
567 Execution of procedure files have a number of valuable
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
568 applications. It can eliminate repetitive manual entry of commonly-used
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
569 sequences of commands. It can allow the computer to execute a
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
570 lengthy series of programs &quot;in the background&quot; while the computer is
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
571 unattended or while the user is running other programs &quot;in the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
572 foreground&quot;.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
573 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
574 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
575 In addition to redirecting the shell's standard input to a
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
576 procedure file, the standard output and standard error output can be
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
577 redirected to another file which can record output for later review
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
578 or printing. This can also eliminate the sometimes-annoying output
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
579 of shell messages to your terminal at random times.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
580 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
581 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
582 Here are two simple ways to use the shell to create another
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
583 shell:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
584 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
585 <screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
586 OS9: shell &lt;procfile
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
587
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
588 OS9: procfile
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
589 </screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
590 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
591 Both do exactly the same thing: execute the commands of the file
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
592 &quot;procfile&quot;. To run the procedure file in a &quot;background&quot; mode you
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
593 simply add the ampersand operator:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
594 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
595 <screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
596 OS9: procfile&amp;
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
597 </screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
598 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
599 OS-9 does not have any constraints on the number of jobs that can be
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
600 simultaneously executed as long as there is memory available (see
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
601 5.4). Also, the procedure files can themselves cause sequential or
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
602 concurrent execution of additional procedure files. Here's a more
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
603 complex example of initiating two processing streams with
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
604 redirection of each shell's output to files:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
605 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
606 <screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
607 OS9: proc1 T &gt;&gt;stat1&amp; proc2 T &gt;&gt;stat2&amp;
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
608 </screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
609 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
610 Note that the built-in command &quot;T&quot; (copy input lines to error
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
611 output) was used above. They make the output file contain a record
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
612 of all lines executed, but without useless &quot;OS9&quot; prompts intermixed.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
613 The &quot;-x&quot; built-in command can be used if you do
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
614 <emphasis>not</emphasis> want processing
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
615 to stop if an error occurs. Note that the built-in commands only
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
616 affect the shell that executes them, and not any others that may
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
617 exist.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
618 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
619 </section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
620
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
621 <section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
622 <title>Error Reporting</title>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
623 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
624 Many programs (including the shell) use OS-9's standard error
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
625 reporting function, which displays an error number on the error
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
626 output path. The standard error codes are listed in the Appendix of
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
627 this manual. If desired, the &quot;printerr&quot; command can be executed,
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
628 which replaces the smaller, built-in error display routine with a
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
629 larger (and slower) routine that looks up descriptive error messages
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
630 from a text file called &quot;/d0/sys/errmsg&quot;.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
631 Once the &quot;printerr&quot;
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
632 command has been run it cannot be turned off. Also, its effect is
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
633 system-wide.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
634 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
635 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
636 Programs called by the shell can return an error code in the MPU
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
637 &quot;B&quot; register (otherwise B should be cleared) upon termination. This
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
638 type of error, as well as errors detected by the shell itself, will
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
639 cause an error message to be displayed and processing of the command
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
640 line or procedure file to be terminated unless the &quot;-x&quot; built-in
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
641 command has been previously executed (See 4.5).
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
642 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
643 </section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
644
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
645 <section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
646 <title>Running Compiled Intermediate Code Programs</title>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
647 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
648 Before the shell executes a program, it checks the program
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
649 module's language type. If its type is not 6809 machine language,
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
650 shell will call the appropriate run-time system for that module.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
651 Versions of the shell supplied for various systems are capable of
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
652 calling different run-time systems. Most versions of shell call
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
653 Basic09 when appropriate, and Level Two versions of shell can also
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
654 call the Pascal P-code interpreter (PascalN), or the CIS Cobol
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
655 runtime system (RunC).
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
656 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
657 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
658 For example, if you wanted to run a BASIC09 I-code module called
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
659 &quot;adventure&quot;, you could type the command given below:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
660 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
661 <screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
662 OS9: BASIC09 adventure
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
663 </screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
664 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
665 Or you could accomplish the same thing by typing the following:
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
666 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
667 <screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
668 OS9: adventure
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
669 </screen>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
670 </section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
671
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
672 <section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
673 <title>Setting Up Timesharing System Procedure Files</title>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
674
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
675 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
676 OS-9 systems used for timesharing usually have a procedure file
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
677 that brings the system up by means of one simple command or by using
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
678 the system &quot;startup&quot; file. A procedure file which initiates the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
679 timesharing monitor for each terminal is executed to start up the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
680 system. The procedure file first starts the system clock, then
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
681 initiates concurrent execution of a number of processes that have
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
682 their I/O redirected to each timesharing terminal.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
683 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
684 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
685 Usually one TSMON command program is started up concurrently for
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
686 each terminal in the system. This is a special program which
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
687 monitors a terminal for activity. When a carriage return character
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
688 is typed on any of these terminals, the TSMON command initiates the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
689 LOGIN command program. If a user does not enter a correct password
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
690 or user number in three tries, the LOGIN command will be aborted.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
691 Here's a sample procedure file for a 4-terminal timesharing system
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
692 having terminals names &quot;TERM&quot;, &quot;T1&quot;,
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
693 &quot;T2&quot;, and &quot;T3&quot;.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
694 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
695 <programlisting>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
696 * system startup procedure file
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
697 echo Please Enter the Date and Time
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
698 setime &lt;/term
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
699 printerr
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
700 tsmon /t1&amp;
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
701 tsmon /t2&amp;
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
702 tsmon /t3&amp;
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
703 </programlisting>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
704 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
705 NOTE: This LOGIN procedure will not work until a password file
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
706 called &quot;/D0/SYS/PASSWORD&quot; has been created. For more information,
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
707 please see the LOGIN command description.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
708 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
709 <para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
710 The example above deserves special attention. Note that the
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
711 &quot;setime&quot; command has its input redirected to the system console
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
712 &quot;term&quot;, which is necessary because it would otherwise attempt to
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
713 read the time information from its current standard input path,
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
714 which is the procedure file and not the keyboard.
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
715 </para>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
716 </section>
f4e798ea65b9 More splitups.
roug
parents:
diff changeset
717 </chapter>