***********************************************************************
***********************************************************************
****  Control Commands &X, and #X in pattern or replacement ***********
***********************************************************************
***********************************************************************

Commands
========
&A Annotation : Writes source statement as comments in the Fortran file;

&A0           : Suppress it;

&C Capital    : Input Mortran text written in capital letters in Fortran file;

&C0           : Conserve lower case letters.

&D Macro Definition Trace : Prints out all already booked Macros.

&E Eject      : New page ???

&F Fortran    : No translation (>< is &M);

&H Hollerith  : Transform '...' in nH... (!!! Carefull for blank management)

&H0           : Suppress translation;

&In Indentation (n=1,...,9) : Indent with n*m where m is the nesting level;

&I0           : Suppress.

&L List       : Write source statements, including macro definitions and
                control statements, into the list file;

&M Mortran    : Translate text;

&N - &L0 No List;

&Q Quote      Close each comment string still open at end of line;???

&Q0

&Rn Rewind (n=1,...,5,8,9)   (3=4=...=9) Rewind the file with lunit n

&S  Suppress () matching checking;

&T &Tn Trace (n=1,...9) : Trace macro translation with level up to 3;

&T0           : Suppress;

&Un Input Unit (n=1,...5,8,9) : Stack the lunit for the current input file
                and switch input lunit to n. If stack full, generates error
                message : "input unit stack overflow";

&& End of File Indicator : Every time this control statement is read or a
                system E-O-F is set, a lunit is unstacked from the input units
                stack and input is switched to it;


Operators
=========
#I     Increment : Increment the label register and load its content into the
                   Accumulator;

#C     Convert   : [A] converted into a five digits decimal number and output
                   the five corresponding characters into the replaced text in
                   the expansion buffer;

#O     Output    : Store [A] into the next word of the replaced text in the
                   expansion buffer;

#Sn    Stack   (n=1,...,9) : Stack [A] on stack n. (If full, "stack overflow");

#Un    Unstack (n=1,...,9) : Unstack a word on stack n ::> A. (If empty,
                    "stack underflow");

#An    Add     (n=1,...,9) : Add immediately to [A] the one digit "n" ::> A;

#Lc    Load      : Load immediately the character c in A;

#P     Parameter : Load the first word of the first parameter into A;
                   ( Parameters are initially character strings, stored one
                   character per word. If macros are nested, a character might
                   be replaced by a binary number. This is for exemple the case
                   during the translation of user defined satement labels. The
                   binary number must be converted to decimal (by #C) before it
                   can be output;

#N     No Rescan : The replacement text before #N will not be res-scanned;

#B     Octal     : Convert the first parameter from Octal to binary and ::> A;

#H     Hexdecimal: Convert the first parameter from hexa to binary and ::> A;

#Z     String    : Pack the first parameter, which is supposed to be a short
                   string of 6-bit characters in internal representation
                   and ::> A;

#E     End       : Check all stack empty. If not "unclosed block".
                   Reset all stack pointers. Write a msg on warning and errors,


#E1    Error 1(Warning) : Generates a Warning commented in the Fortran file;

#E2    Error 2(Error)   : Generates a compilation error with comment.

#T     Title     : Transfer the first parameter up to an eventual left ) or
                   up to a maximum of 24 characters to a title buffer for
                   printing in the header line on top of the next page;

#*     Fortran Comment in Fortran file  ???


Macro-directives
================

Macro Killing
-------------
&'#Kpattern'         ::> kills &'pattern'=...

Macro Concatenation
-------------------
** Left concatenation:

&'#Mpattern'='pat2'  ::> transform &'pattern' in &'pat2pattern'
&'#C..' as &'#M..' but kills previous macro.

** Right concatenation(Rear):

&'#Rpattern'='pat2'  ::> transform &'pattern' in &'patternpat2'

Parameters specification
------------------------

&' aaa#bbb'    : Match #1 with character separating aaa from bbb

&'aaa###bbb'   : Match #1 with the first of the characters separating aaa
                 from bbb, and #2 with the others;

&'aaa#bbb#ccc#;' : Match #1,#2 (and so on) with successive separations
