mirror of
https://github.com/PDP-10/stacken.git
synced 2026-04-19 16:40:09 +00:00
767 lines
24 KiB
Plaintext
767 lines
24 KiB
Plaintext
.nap;.lm 5;.rm 75;.ps 60,75;.ts 10,70;.variable ital,n,t;.VARIABLE META,+,- ;.variable do,Y,N
|
|
.title #####User Guide No. U6
|
|
.st #####14 November 1979
|
|
#####
|
|
.s 4
|
|
.center 80
|
|
AN INTRODUCTION TO MIC
|
|
.b 5
|
|
MIC stands for &Macro &Interpreted &Commands and is a system that allows
|
|
users to create their own system commands.
|
|
.b
|
|
This User Guide is intended as an introduction to MIC; it is not intended
|
|
as a reference document. A MIC reference manual is available for a small
|
|
fee from the Job Receptionist and a copy is held in the user area
|
|
.fn 4
|
|
This is a reprint with minor changes of the version dated 1 September 1978.
|
|
Replacement is not necessary.
|
|
.end footnote
|
|
book racks. A MIC Summary Card is also available (free) from Job Reception.
|
|
.b2
|
|
keywords: MIC, macro commands, command files
|
|
.b2;.nf
|
|
J.D. Service
|
|
A.J. Bullen
|
|
.b 3;.nf
|
|
CONTENTS page
|
|
.b
|
|
1. What MIC does 2
|
|
2. Creating MIC files 3
|
|
3. Calling MIC files 3
|
|
4. Example 4
|
|
5. Parameters in MIC macro commands 4
|
|
6. Labels and branching facilities 6
|
|
7. Error detection and processing 7
|
|
8. Silencing MIC 10
|
|
9. Manipulating parameters in a command file 11
|
|
10. Character subscripting facilities 11
|
|
11. Other useful facilities 12
|
|
12. Miscellaneous notes on MIC 13
|
|
13. Commands not covered in this guide 13
|
|
.page
|
|
.i -4;.f
|
|
^&1.##What MIC does.\&
|
|
.b 2
|
|
MIC is particularly useful if you are a regular user of the system and
|
|
find that you are frequently typing the same sequence of commands, which
|
|
is boring. What you require is a single command which performs the functions
|
|
of all of your commands. In computer jargon this is called a MACRO command, and on the DEC-10 they are known as
|
|
.b.nf
|
|
macro commands
|
|
or MIC commands
|
|
or MIC command files.
|
|
.b.f
|
|
For example if you frequently use the sequence of commands:
|
|
.b
|
|
#####.DELETE *.TMP,*.Q??
|
|
.br
|
|
#####.EX LINUS.FOR,SYS:NAGF/LIB
|
|
.b
|
|
you could create a macro command called SNOOPY, say, to perform their
|
|
combined function.
|
|
.b
|
|
To do this, SOS or TECO (see User Guide U2 for SOS or U1 for TECO) could
|
|
be used to create a file, called a MIC file, containing the two commands
|
|
(including the full stops at the start of the lines). If this file was
|
|
called SNOOPY.MIC - note the _.MIC extension - you could cause the sequence
|
|
of commands to be obeyed simply by typing the single command
|
|
.b
|
|
.in do
|
|
#####&./SNOOPY
|
|
.else do
|
|
#####&.DO SNOOPY
|
|
.endif do
|
|
.b
|
|
The commands in the MIC file will then be typed on your terminal and obeyed
|
|
as if you had typed them; all output from the commands will also be displayed on the terminal.
|
|
The file SNOOPY.MIC can then remain available for use at any time.
|
|
.b 2
|
|
MIC files may contain any number of commands, of any type, including
|
|
macro commands. In order to make MIC commands more useful, MIC files
|
|
may use many other facilities, including command arguments (or parameters)
|
|
and switches in the command call, conditional and branching statements
|
|
to enable jumps to labelled lines, and assignment statements which allow
|
|
parameters and variables to be assigned or altered during the processing
|
|
of the MIC command.
|
|
.b 3;.i -4;.tp 20
|
|
^&2.##Creating MIC files.\&
|
|
.b 2
|
|
MIC files may be created using a normal text file editor, e.g. SOS or TECO.
|
|
The file may be with or without line numbers. It will normally have the
|
|
extension _.MIC.
|
|
.b
|
|
Each line should have as its first non-space or tab character one of the
|
|
characters =, _., *, ! or _; which are interpreted as follows:
|
|
.ts 15;.b.literal
|
|
. monitor command follows
|
|
* data to be input to a program follows
|
|
= ignore carriage return at the end of this line
|
|
! comment line follows
|
|
; comment line follows (see section 8 for difference from !)
|
|
.end literal;.b.ts 10,70
|
|
.b
|
|
In order to get control characters such as control-C, control-Z, or altmode
|
|
into a MIC file, the control key and the character are replaced by the
|
|
up-arrow key followed by the character, e.g.
|
|
.b
|
|
#####_^C for control-C
|
|
.br
|
|
#####_^Z for control-Z
|
|
.br
|
|
#####_^[ for altmode (escape)
|
|
.s
|
|
The _' (single quotation mark) followed by a letter indicates a parameter in MIC (see section
|
|
5) so if quotation marks are needed in a MIC file it is advisable to use
|
|
.if ital
|
|
double quotes ("####").
|
|
.else ital
|
|
double quotes ("<text>").
|
|
.endif ital
|
|
.b
|
|
If any of the special characters described in this section is required
|
|
as itself, however, the character should be repeated, e.g.
|
|
.b
|
|
#####_^_^C########################gives _^C not control-C.
|
|
.br
|
|
#####VID:''MYTAPE'##############gives VID:'MYTAPE' not parameter M
|
|
.b
|
|
Note - the characters =, ., *, !, and ; need only be repeated if they are
|
|
required in the first character position of a line.
|
|
.b 3;.i -4;.tp 8
|
|
^&3.##Calling MIC files.\&
|
|
.b 2
|
|
MIC files are called into action with a command of the form
|
|
.s
|
|
.if ital
|
|
#####&./###:###########[###]
|
|
.ei ital
|
|
.if meta
|
|
#####&./<dev>:<micfilename>[<ppn>]
|
|
.ei meta
|
|
.if do
|
|
#####&.DO <dev>:<micfilename>[<ppn>]
|
|
.endif do
|
|
.s
|
|
where the device, ppn and file extension are optional. If the file is
|
|
in your own disk area or in the MIC library area (MIC:), the following
|
|
is sufficient:
|
|
.s
|
|
.if ital
|
|
#####&./
|
|
.ei ital
|
|
.IF META
|
|
#####&./<micfilename>
|
|
.ENDIF META
|
|
.if do
|
|
#####&.DO <micfilename>
|
|
.ei do
|
|
.s.tp 5
|
|
because the defaults are
|
|
.s
|
|
#####DSK:, or if not found, MIC:, for device
|
|
.br
|
|
.if ital
|
|
#####your own project-programmer number for [###]
|
|
.else ital
|
|
#####your own project-programmer number for [<ppn>]
|
|
.ei ital
|
|
.br
|
|
#####_.MIC for the filename extension.
|
|
.b 3
|
|
.i -4;.tp 30
|
|
^&4.##Example.\&
|
|
.b 2
|
|
The following is an example of a computer session to create and use a
|
|
MIC file to tidy up one user's disk area:
|
|
.b.lm 10;.ts 35;.nf.rm 80
|
|
&.MAKE TIDY.MIC Call TECO to make a file called TIDY.MIC.
|
|
&*I.DELETE *.BAK Insert monitor commands as shown ...
|
|
_.PROTECT *.DAT _<177_>
|
|
_.PRINT *.LST
|
|
$ $
|
|
&*EX $ $ Exit from TECO.
|
|
.b
|
|
|
|
.in do
|
|
&./TIDY Call TIDY.MIC into action.
|
|
.else do
|
|
&.DO TIDY Call TIDY.MIC into action
|
|
.ei do
|
|
^&.DELETE *.BAK\& From this point on, the system
|
|
^&FILES DELETED\& obeys your MIC file automatically.
|
|
^&FIND.BAK\& The remainder of the example has
|
|
^&10 BLOCKS FREED\& been output in its entirety by
|
|
^&.PROTECT *.DAT _<177_>\& the system with no input from you.
|
|
^&FILES RENAMED\&
|
|
^&TEST.DAT\&
|
|
^&TEST1.DAT\&
|
|
|
|
&.PRINT *.LST
|
|
.if ital
|
|
^&[LPT:########=/Seq:2601/Limit:203,4 Files]
|
|
.else ital
|
|
^&[LPT:<filename>=/Seq:2601/Limit:203,4 Files]
|
|
.ei ital
|
|
&.
|
|
.b 3;.f;.lm 5;.rm 75;.ts 10
|
|
.i -4
|
|
^&5.##Parameters in MIC macro commands.\&
|
|
.b 2;.ts 10
|
|
More generalised commands may be constructed using parameters in the
|
|
MIC file to stand for filenames or other quantities which would be
|
|
entered in the MIC command command call. The full specification of a
|
|
MIC call is
|
|
.b.nf;.rm 85
|
|
.if ital
|
|
#####&./###:###########[###]##########,##########,...
|
|
.ei ital
|
|
.if meta
|
|
#####&./<dev>:<micfilespec>[<ppn>] <parameterA>, <parameterB>, ...
|
|
.ei meta
|
|
.if do
|
|
#####&.DO <dev>:<micfilespec>[<ppn>] <parameterA>, <parameterB>, ...
|
|
.ei do
|
|
.b.f;.rm 75;.ps 60,75
|
|
A parameter may be any string of characters separated by commas (special
|
|
rules exist for brackets - see the MIC Reference Manual). Up to 26 parameters
|
|
are allowed and within the MIC file itself they are introduced by 'A,
|
|
'B, 'C ....'Z, i.e. a letter of the alphabet preceded by a single quote.
|
|
.if ital
|
|
During execution of a macro a single quote followed by the #th letter
|
|
.else ital
|
|
During execution of a macro a single quote followed by the <n>th letter
|
|
.ei ital
|
|
.if ital
|
|
of the alphabet will always be replaced by the #th parameter in the MIC
|
|
.else ital
|
|
of the alphabet will always be replaced by the <n>th parameter in the MIC
|
|
.ei ital
|
|
call.
|
|
.tp 4;.s
|
|
As an example, the TIDY macro described earlier changed the protection code of all .DAT
|
|
files to 177. The actual protection code used could have been selected
|
|
at run time by giving the required code as a parameter in the MIC call.
|
|
To do this the MIC file should contain
|
|
.s.tp 8
|
|
#####_.DELETE *.BAK
|
|
.br
|
|
#####_.PROTECT *.DAT _<'A_>
|
|
.br
|
|
#####_.PRINT *.LST
|
|
.s
|
|
To obtain a protection of 177 the MIC call is
|
|
.s
|
|
.in do
|
|
#####&./TIDY 177
|
|
.else do
|
|
#####&.DO TIDY 177
|
|
.ei do
|
|
.s
|
|
To obtain a protection of 157 the MIC call is
|
|
.s
|
|
.in do
|
|
#####&./TIDY 157
|
|
.else do
|
|
#####&.DO TIDY 157
|
|
.ei do
|
|
.s
|
|
In the first case 177 is substituted for 'A at run time; in the second
|
|
case 157 is substituted.
|
|
.b 2
|
|
Parameters are very useful when setting up MIC files which will act on
|
|
file names at run time; the parameters will then be file names. As an
|
|
example consider the problem of retrieving a file from a magnetic tape.
|
|
First the magnetic tape must be mounted, then the file copied to disk. Finally
|
|
you may want to see that the file has really been retrieved by checking your
|
|
directory listing. It is possible to write a retrieval macro called,
|
|
say, RESTOR, which would perform the task when you give a command of
|
|
the form
|
|
.s
|
|
.if ital
|
|
#####&./RESTOR ########.###
|
|
.ei ital
|
|
.if meta
|
|
#####&./RESTOR <filename>.<ext>
|
|
.ei meta
|
|
.if do
|
|
#####&.DO RESTOR <filename>.<ext>
|
|
.ei do
|
|
.s
|
|
The commands in RESTOR.MIC would be
|
|
.s;.lm 10
|
|
.nf
|
|
.literal
|
|
.MOUNT MTA:BACKUP/REELID:Y00530/VID:"FRED BLOGGS"
|
|
.R BACKUP
|
|
*RESTORE 'A
|
|
*EXIT
|
|
.DIR/FAST
|
|
.end literal
|
|
.lm 5;.s;.tp 6
|
|
When the MIC command call
|
|
.s
|
|
.in do
|
|
#####&./RESTOR PROG1.F4
|
|
.else do
|
|
#####&.DO RESTOR PROG1.F4
|
|
.ei do
|
|
.s.f
|
|
is typed, PROG1.F4 would be substituted for 'A in the processing of the
|
|
macro.
|
|
.s
|
|
The example can be further generalised by using parameters for the tape
|
|
identity. In this case RESTOR.MIC would contain
|
|
.s.lm 10;.nf;.tp 5
|
|
.literal
|
|
.MOUNT MTA:BACKUP/REELID:'B/VID:"'C"
|
|
.R BACKUP
|
|
*RESTORE 'A
|
|
*EXIT
|
|
.DIRECT/FAST
|
|
.end literal
|
|
.f.lm 5
|
|
.s
|
|
and a MIC call would be of the form
|
|
.s
|
|
.in do
|
|
#####&./RESTOR PROG2.ALG,Y00537,BILL SMITH
|
|
.else do
|
|
#####&.DO RESTOR PROG2.ALG,Y00537,BILL SMITH
|
|
.ei do
|
|
.b 3;.i -4;.tp 7
|
|
^&6.##Labels and branching facilities.\&
|
|
.b 2
|
|
The normal sequential processing of a MIC file may be interrupted by
|
|
using jump commands to labelled lines. Conditional statements, described
|
|
later, allow a conditional jump or a conditional command to be included.
|
|
.note
|
|
These jump commands and conditional statements, as well as the error
|
|
processing features described in section 7, have the same names and
|
|
functions as those used by the batch system.
|
|
.end note
|
|
^&6.1##Labels.\&
|
|
.b 2
|
|
A line in MIC may be labelled by placing the label at the beginning of
|
|
the line. A label consists of one to six alphanumeric characters and
|
|
is terminated by a double colon (::). Example -
|
|
.s
|
|
#####FRED::.DELETE *.BAK
|
|
.b 2;.tp 8
|
|
^&6.2##Jump statements.\&
|
|
.b 2
|
|
Two jump statements are available:
|
|
.b
|
|
#####.GOTO #####
|
|
.br
|
|
and# .BACKTO #####
|
|
.b
|
|
The GOTO statement is used for a forward branch and the BACKTO for a
|
|
backward branch. (`Backward' here means going to the beginning of the file and starting the search from there.)
|
|
.b.tp 10
|
|
A not to be recommended example which will perform DIRECT in an infinite
|
|
loop is
|
|
.b
|
|
#####FRED::.DIRECT
|
|
.br
|
|
#####.BACKTO FRED
|
|
.b;.tp 7
|
|
Another not very exciting example is
|
|
.b
|
|
#####.GOTO MYLAB
|
|
.br
|
|
#####.DEL *.TMP
|
|
.br
|
|
#####MYLAB::.RENAME OLD.DAT=FOR05.DAT
|
|
.b
|
|
because the _.DEL *.TMP will never be obeyed.
|
|
.b 2;.tp 4
|
|
There is one label, %FIN, which acts as a kind of `super label' and
|
|
is branched to by any GOTO or BACKTO if the %FIN occurs before the label for
|
|
which they are searching. In the following example,
|
|
.s.nf;.tp 6
|
|
.GOTO FRED
|
|
.
|
|
.
|
|
.
|
|
%FIN::.COMP MYPROG.FOR
|
|
FRED::.DIR
|
|
.s.f
|
|
the statement GOTO FRED will cause a branch to %FIN rather than FRED
|
|
because %FIN occurs before FRED.
|
|
.b 3
|
|
.i -4
|
|
^&7.##Error detection and processing.\&
|
|
.b 2
|
|
When a monitor or system program error occurs an error message is normally
|
|
output, and this is what most sensible user programs do. Conventionally
|
|
error messages are preceded by ? for fatal errors, and % for warnings,
|
|
and this `error character' always occurs as the first character of an
|
|
output line. MIC, like the batch system, allows you to monitor this first character
|
|
in the output line and take special action if your defined error character
|
|
occurs in this position.
|
|
.b
|
|
By default this facility is off, unless you are running MIC in batch. To use it, you include a command of
|
|
the form
|
|
.b
|
|
.if ital
|
|
#####&.ERROR
|
|
.else ital
|
|
#####&.ERROR <character>
|
|
.ei ital
|
|
.b
|
|
to inform MIC which character in the first character position of the
|
|
output line is to be regarded as preceding an error message. In batch, the default character is question mark (?).
|
|
This single command allows you to introduce very simple error processing
|
|
into your MIC macro. Whenever the error character specified by the command is detected, processing
|
|
of the MIC file will cease and the message
|
|
.b
|
|
#####[ABORT ON ERROR]
|
|
.b
|
|
will be displayed.
|
|
.b 2;.tp 6
|
|
For example if we modify the TIDY macro thus:
|
|
.b.literal
|
|
.ERROR ?
|
|
.DELETE *.TMP
|
|
.PROTECT *.DAT <'A>
|
|
.PRINT *.LST
|
|
.end literal;.b
|
|
then if we give an invalid argument to the macro the result will be:
|
|
.s.nf;.lm 10;.tp 10
|
|
.in do
|
|
&./TIDY 875
|
|
.else do
|
|
&.DO TIDY 875
|
|
.ei do
|
|
&.ERROR ?
|
|
&.DELETE *.TMP
|
|
^&FILES DELETED\&
|
|
^&XYZ.TMP\&
|
|
&.PROTECT *.DAT _<875_>
|
|
^&FILES RENAMED\&
|
|
^&?CMLIPC Illegal protection code: 875\&
|
|
^&[ABORT ON ERROR]\&
|
|
&.
|
|
.f.b;.lm 5
|
|
Note that the PRINT command has not been obeyed.
|
|
.b 2
|
|
While this is useful it is obviously more useful if the user can specify
|
|
what action is to be taken if an error is detected. MIC provides
|
|
three ways in which this can be done (only two of which are described
|
|
in this document) and all three may be included in the same macro.
|
|
.b 3;.i -4
|
|
^&7.1##Error labels.\&
|
|
.b 2
|
|
The first method is to include error recovery labels at suitable points
|
|
within the MIC macro. There are three special labels which may be classed
|
|
as error recovery labels; "%ERR", "%CERR", and "%FIN".
|
|
.b
|
|
On detecting an error character MIC does not actually stop processing
|
|
the MIC file immediately as was said in the last section, rather it
|
|
searches the remaining part of the MIC file for the occurrence of one
|
|
of the three error labels. Which label is searched for depends on the
|
|
following simple rule:
|
|
.b
|
|
If the error occurred in a program which came from SYS: (i.e. a systems
|
|
program) or a monitor command, the label "%CERR" is searched for,
|
|
otherwise the label "%ERR" is searched for. However "%FIN" has the
|
|
same super-label effect described in section 6.2 and if, during the
|
|
search for "%ERR" or "%CERR" a "%FIN" label is encountered, this will be
|
|
regarded as satisfying the search.
|
|
.b
|
|
Once MIC has found one of these error labels it `forgets' about the error
|
|
and continues processing the command file from a position immediately
|
|
after the error label.
|
|
.b;.tp 6
|
|
For example if our TIDY macro is modified thus:
|
|
.b.nf
|
|
_.ERROR ?
|
|
_.DELETE *.TMP
|
|
_.PROTECT *.DAT <'A>
|
|
%FIN::_.PRINT *.LST
|
|
.b.f
|
|
the print command will always be obeyed even if an error occurs in
|
|
either of the preceeding two commands.
|
|
.b.tp 6
|
|
An alternative form is:
|
|
.b.nf
|
|
_.ERROR ?
|
|
_.DELETE *.TMP
|
|
_.PROTECT *.DAT <'A>
|
|
%CERR::_.PRINT *.LST
|
|
.b.f
|
|
because DELETE and PROTECT are system commands, but
|
|
.b.nf
|
|
_.ERROR ?
|
|
_.DELETE *.TMP
|
|
_.PROTECT *.DAT <'A>
|
|
%ERR::_.PRINT *.LST
|
|
.b
|
|
is ^¬\& correct.
|
|
.tp 2;.b 2
|
|
These labels may occur as often as required in a MIC macro as the file
|
|
is always searched forward for error characters.
|
|
.b
|
|
For example the following would be a rather silly way of ignoring all
|
|
errors in TIDY:
|
|
.B.NF
|
|
_.ERROR ?
|
|
%FIN::_.DELETE *.TMP
|
|
%FIN::_.PROTECT *.DAT <'A>
|
|
%FIN::_.PRINT *.LST
|
|
.B
|
|
or
|
|
.B
|
|
_.ERROR ?
|
|
%FIN::_.DELETE *.TMP
|
|
%CERR::_.PROTECT *.DAT <'A>
|
|
%CERR::_.PRINT *.LST
|
|
.b
|
|
or any other combination of %CERR and %FIN.
|
|
.B 3;.F
|
|
^&7.2##Error conditionals.\&
|
|
.b 2
|
|
The second method of processing errors allows a much finer control over
|
|
error recovery, and to explain how it works we must once again change our
|
|
explanation of MIC's action on detecting an error.
|
|
.b;.tp 3
|
|
When an error is detected the command file is first searched for the next
|
|
monitor level line, that is the next line starting with a "_." (see section 2) and if the command on that line is
|
|
.b
|
|
.if ital
|
|
#####_.IF (ERROR)
|
|
.else ital
|
|
#####_.IF (ERROR) <argument>
|
|
.ei ital
|
|
.b
|
|
or
|
|
.b
|
|
.if ital
|
|
#####_.IF (NOERROR)
|
|
.else ital
|
|
#####_.IF (NOERROR) <argument>
|
|
.ei ital
|
|
.b
|
|
processing of the command file will recommence with that same "IF" command.
|
|
.b
|
|
If a %FIN or other appropriate error label is found during the search for
|
|
the next monitor level command the error will be treated as in the previous
|
|
section. Similarly if the first command line is not one of the two IF
|
|
commands the error will be treated as in the previous section.
|
|
.b.tp 7
|
|
Thus if we modify TIDY yet again -
|
|
.b.nf
|
|
_.ERROR ?
|
|
_.DELETE *.TMP
|
|
_.PROTECT *.DAT <'A>
|
|
_.IF (ERROR) _.DIR/F
|
|
_.PRINT *.LST
|
|
.B
|
|
.F
|
|
then if an error occurs in the PROTECT command the command IF (ERROR)
|
|
will cause the DIR/F command to be obeyed followed by the PRINT command,
|
|
but if the error occurs in the DELETE command none of the following
|
|
commands will be obeyed.
|
|
.b 2;.i -4
|
|
^&8.##Silencing MIC.\&
|
|
.b 2
|
|
Generally the commands in a MIC control file will be typed on the
|
|
terminal as they are obeyed. However this type-out can be suppressed
|
|
by the MIC command _.SILENCE or reinstated by the command _.REVIVE. For
|
|
example
|
|
.b.nf
|
|
_.SILENCE
|
|
_.R SETSRC
|
|
*NEW
|
|
_^C
|
|
.B
|
|
in a MIC file will suppress the output from the running of SETSRC.
|
|
.b
|
|
.f
|
|
The whole MIC control file may be silenced by giving it a protection code
|
|
of <2??>, i.e. any protection with the first digit a `2'. This is over-ridden
|
|
in the file by any _.REVIVE command. In the above example this
|
|
would allow the _.SILENCE command to be omitted.
|
|
.b
|
|
Note that comments preceeded by "!" will be displayed despite the SILENCE
|
|
condition; those preceeded by ";" will not.
|
|
.i -4;.b 3
|
|
^&9.##Manipulating parameters in a command file.\&
|
|
.b 2
|
|
Users' parameters to MIC command files are held within MIC as ASCII strings.
|
|
The LET statement allows a user to change parameters and define new parameters
|
|
during the processing of a MIC file by assigning a string or integer
|
|
expression to the parameter thus:
|
|
.b.nf;.tp 10
|
|
.if ital
|
|
.LET ######### ####=##########
|
|
.else ital
|
|
.LET <parameter name>=<expression>
|
|
.ei ital
|
|
.b
|
|
.if ital
|
|
where ############## is a parameter to the MIC file
|
|
.else ital
|
|
where <parameter name> is a parameter to the MIC file
|
|
.ei ital
|
|
either passed in the calling statement or newly
|
|
constructed. It must be one of the characters
|
|
A through Z.
|
|
.b
|
|
.if ital
|
|
########## is either a string expression or a
|
|
.else ital
|
|
<expression> is either a string expression or a
|
|
.ei ital
|
|
simple integer expression.
|
|
.b.f
|
|
A string expression may be a simple string such as "FRED.FOR" or have a
|
|
more complex form allowing a string to be constructed from strings in
|
|
other parameters; e.g. $A+"_."+$B is an expression which concatenates
|
|
three strings. Note the use of the $ before the parameter to indicate
|
|
that the contents of the parameter are to be treated as a string, i.e.
|
|
$A is equivalent to "'A".
|
|
.b
|
|
An integer expression may also have parameters and involve the arithmetic
|
|
operators + - * / and _^ where the normal precedence rules apply. An
|
|
example of an integer expression is 3*C+A-B.
|
|
.b
|
|
Examples:
|
|
.b
|
|
.nf;.tp 4
|
|
a) _.LET Z="THIS FORMS A NEW PARAMETER"
|
|
Whenever parameter Z is referred to in future it
|
|
will contain the text "THIS FORMS A NEW PARAMETER"
|
|
.b.tp 6
|
|
.in do
|
|
b) A calling statement /LINUS DSKD and statements in
|
|
.else do
|
|
b) A calling statement of DO LINUS DSKD and statements in
|
|
.ei do
|
|
the MIC file LINUS of
|
|
_.LET F="[1045,33]"
|
|
_.LET H=$A+"FRED.FOR"+$F
|
|
_.EX 'H
|
|
would execute the program DSKD:FRED.FOR[1045,33]
|
|
.b
|
|
c) _.LET D=A+1 will add the integer 1 to the integer
|
|
held in A. If A does not contain an integer an
|
|
error message will result.
|
|
.b 3;.f.i -4
|
|
^&10.#Character subscripting facilities.\&
|
|
.b 2
|
|
Any single character or group of characters in a string may be referred to
|
|
individually by using the subscripting facilities. These allow you to
|
|
give a MIC command which will loop around a set of monitor commands
|
|
substituting a different parameter from a sequence of parameters each
|
|
time the loop is obeyed.
|
|
.b2
|
|
A subscripted string expression used in a LET statement has the form
|
|
.b
|
|
.if ital
|
|
#####$#########.[##########,##########]
|
|
.else ital
|
|
#####$<parameter>.[<subscript1>,<subscript2>]
|
|
.ei ital
|
|
.b.tp 3
|
|
The first subscript specifies the first character to be extracted
|
|
from the string contained in the parameter, the second subscript
|
|
specifies the total number of characters to be extracted.
|
|
.s
|
|
Thus if parameter A contains the string BCDEF the subscripted string
|
|
expression $A.[2,3] refers to the string CDE.
|
|
.b.tp 4
|
|
The second subscript may be omitted and in this case the length of the
|
|
extracted string is assumed to be one character. The expression $A.[4]
|
|
refers to the 4th character in the string, i.e. character E in the above
|
|
example.
|
|
.b
|
|
Negative subscripts may be used to count backwards from the end of
|
|
the string. If A contains BCDEFG then $A.[-2] refers to
|
|
character F.
|
|
.b 3;.i -4;.tp 5
|
|
^&11.#Other useful facilities.\&
|
|
.b 2
|
|
^&11.1##The PLEASE command.\&
|
|
.b 2
|
|
A PLEASE command exists to
|
|
enable a message to be transmitted to the user of a MIC file. This
|
|
may be used to indicate progress during the operation of a silenced
|
|
MIC file or to transmit a message from the creator of a MIC file to a
|
|
user of the file.
|
|
.b
|
|
The form of the command is
|
|
.b
|
|
.if ital
|
|
#####.PLEASE ####### $
|
|
.else ital
|
|
#####.PLEASE <message> $
|
|
.ei ital
|
|
.b
|
|
The message is displayed on the terminal when the PLEASE command is
|
|
processed in the MIC file. If the terminating altmode is omitted then
|
|
MIC will suspend processing until you give instructions to proceed
|
|
by typing control-P - see section 11.2.
|
|
.b 2
|
|
^&11.2#Suspending MIC processing.\&
|
|
.b 2
|
|
The processing of a MIC file may be suspended by typing control-B. MIC will
|
|
then output the message [BREAK] and await further action from you.
|
|
.b
|
|
At this stage any monitor command or any MIC command may be typed in.
|
|
(If a MIC command is typed in, the initial `.' should be omitted.)
|
|
You may for example wish to type in LET commands to alter the values
|
|
of the parameters in the suspended MIC file or GOTO and BACKTO statements
|
|
to cause jumps to other parts of the MIC file.
|
|
.b;.tp 3
|
|
To continue processing of the MIC file type control-P. Any changes in
|
|
parameters or instructions to jump to labelled commands will be
|
|
recognised in the processing of the remainder of the MIC file.
|
|
.b;.tp 3
|
|
Note that a control-C typed in during the break period will cancel the
|
|
suspended MIC process.
|
|
.b 2;.tp 7
|
|
^&11.3#Nested MIC processes\&
|
|
.b 2
|
|
MIC command files may themselves contain MIC commands. Each file may
|
|
have its own parameters but inner processes may access the parameters
|
|
in an outer process. For further details see the ^&MIC reference manual\&.
|
|
.b 3
|
|
.i -4
|
|
^&12.#Miscellaneous notes on MIC.\&
|
|
.b 2;.i -3
|
|
a) If a job is currently executing a MIC file, type-ahead is not allowed.
|
|
The only exception is for control characters; all other type-ahead will be
|
|
discarded.
|
|
.b.i -3
|
|
b) An existing batch control file can be run as a MIC macro as long as it
|
|
does not include single quote characters which MIC will interpret as parameter indicators.
|
|
.b 3;.i -4;.tp 8
|
|
^&13.#Commands not covered in this guide.\&
|
|
.b 2
|
|
The following MIC facilities are not covered in this user guide but are
|
|
fully documented in the ^&MIC reference manual\&.
|
|
.b.literal
|
|
Multiple LET statements
|
|
IF (command) extensions
|
|
OPERATOR/NOOPERATOR commands
|
|
MIC RESPONSE command
|
|
MIC ABORT command
|
|
MIC CANCEL command
|
|
MIC BREAK command
|
|
MIC PROCEED command
|
|
MIC EXIT command
|
|
MIC RETURN command
|
|
MIC INPUT command
|
|
Obtaining system parameters such as TTY number, PPN, Job numbers
|
|
ON command
|
|
WHENEVER command
|
|
MIC SET command
|
|
MIC COJOB
|
|
Action parameters
|
|
Multiple commands on a line
|
|
.end literal
|
|
.b 2
|
|
You are advised to see the ^&MIC reference manual\& for full documentation on MIC. A copy is held in the computer building user area book rack, and copies
|
|
may also be obtained from Job Reception for a small fee.
|