The MIDAS command language (MCL)
consists of all the commands which you enter
interactively, and an additional set of commands to provide the necessary tools
to write MIDAS ``programs'', called MIDAS procedures.
The MCL is a flexible and powerful tool to integrate
application modules into MIDAS and to do rapid prototyping. But it is not
intended to be a
full blown programming language - for programming tasks MIDAS supports the
standard interfaces in FORTRAN 77 and C (cf. the MIDAS Environment document).
It is an interpreted language, so you do not need
to compile MIDAS procedures. It is also a ``Macro'' language in the sense that
you can build complex procedures, attach these procedures to a MIDAS command
and qualifier combination and then put a single line with that command name
into yet another procedure (up to 25 levels deep).
MIDAS procedures are handled in the following way:
The ASCII procedure file is read in by the MIDAS monitor and translated into
an internal more compact format. This translated code is then executed inside
the Monitor.
The individual lines of code are parsed and decoded in two
passes: In the first pass, all symbol substitutions are done using the specified
formats to convert from binary to ASCII. In the second pass,
all control and conditional
statements are processed directly by the Monitor (e.g. positioning the internal
program pointer to the command line referred to by a GOTO statement)
until
an ``executable'' command line is found which is passed on to the usual
command input pipeline of MIDAS as if it were typed in by the user.
For a detailed explanation of all the MIDAS Command Language commands see
the appendix of this volume or use the MIDAS command HELP/CL.
The following Command Language commands provide the necessary programming
constructs like looping and conditional branching for MIDAS procedures, they
cannot be used interactively:
BRANCH variable comparisons labels
Compare variable with comparison
values and branch to related labels
CROSSREF label1 ... label8
Define cross reference labels for
parameters par1 ... par8
DEFINE/LOCAL key data all_flag level_flag
Define local keyword key and initialize it using data
DEFINE/PARAMETER par def type prompt limits
Declare default value, type,
promptstring and limits for parameter par
DO loopvar = begin end step_size
...command body...
ENDDO
Execute a do-loop (as in FORTRAN)
ENTRY procedure
Define the beginning of a MIDAS procedure
in procedure file with a different name
GOTO label
Jump to a label defined as label:, see below
IF par1 op par2 command
Execute conditional statement (as in FORTRAN)
IF par1 op par2 THEN
...if-sequence...
ELSEIF par1 op par2 THEN
...else if-sequence...
ELSE
...else-sequence...
ENDIF
Execute a conditional statement (as in FORTRAN)
INQUIRE/KEYWORD key prompt-string
Demand value for key from the user
label:
Declare a label, with label a string beginning with a letter, e.g. Step_A:
RETURN par1 ... par3
Return to calling procedure or terminal and
pass up to 3 parameters
PAUSE
interrupt the current procedure and return to interactive level
DEFINE/MAXPAR nopar
Indicate that max. nopar parameters are expected
The following commands may also be used interactively, but are especially
useful inside MIDAS procedures:
@ (or: @@, or: @a, or: @s, or:
@c proc par1 ... par8)
Execute the MIDAS procedure proc which is stored
in MID_PROC:, (or in one of the current procedure directories)
or in APP_PROC:, or in STD_PROC:, or in CON_PROC:,
respectively
ECHO/qualif levela,levelbNoteUp to 4 directories for procedures can be specified via the command SET/MIDAS PATH=. By default the current directory and the directory pointed to by the variable MID_WORK are used to localize Midas procedures when using the @@ command.
NoteIt is good practice NOT to abbreviate the commands and qualifiers of a MIDAS command inside a procedure. Since new MIDAS commands can be created any time an abbreviated command may work at one time but become ambiguous at other times and cause the procedure to fail.
The command TRANSLATE/SHOW myproc X will check that all commands and qualifiers are fully specified in procedure myproc.prg.
Also avoid relying on the defaults of parameters of a given command. With the command CREATE/DEFAULT these defaults can be changed dynamically. Instead write full command lines specifying all parameters in your procedures.