Annotation of researchv10no/cmd/spitbol/4.3/comment.out, revision 1.1

1.1     ! root        1: 
        !             2: 
        !             3: Page 1               S P I T B O L -- COPYRIGHT NOTICE
        !             4: 
        !             5: *
        !             6: *      COPYRIGHT (C) BY ROBERT B. K. DEWAR, 1983
        !             7: *
        !             8: *      THIS SOFTWARE IS THE PROPERTY OF
        !             9: *           PROFESSOR ROBERT B. K. DEWAR
        !            10: *           COURANT INSTITUTE OF MATHEMATICAL SCIENCES
        !            11: *           251 MERCER STREET
        !            12: *           NEW YORK,  NY 10012
        !            13: *           U.S.A
        !            14: *      TEL NO -  (212) 460 7497
        !            15: *
        !            16: 
        !            17: 
        !            18: Page 2               S P I T B O L -- NOTES TO IMPLEMENTORS
        !            19: 
        !            20: *
        !            21: *      M A C R O   S P I T B O L     V E R S I O N   4 . 2
        !            22: *      ---------------------------------------------------
        !            23: *
        !            24: *      DATE OF RELEASE  -  01 NOV 1983
        !            25: *
        !            26: *      THIS PROGRAM IS MAINTAINED BY BOTH
        !            27: *           DR. A. P. MCCANN
        !            28: *           DEPARTMENT OF COMPUTER STUDIES
        !            29: *           UNIVERSITY OF LEEDS
        !            30: *           LEEDS LS2 9JT
        !            31: *           ENGLAND.
        !            32: *      TEL NO -  (0532) 431751
        !            33: *
        !            34: *      AND
        !            35: *
        !            36: *           DAVID SHIELDS
        !            37: *           COURANT INSTITUTE OF MATHEMATICAL SCIENCES
        !            38: *           251 MERCER STREET
        !            39: *           NEW YORK, NY 10012
        !            40: *           U.S.A.
        !            41: *      TEL NO - (212) 460 7168
        !            42: *
        !            43: *      WHO WILL BE GLAD TO RECEIVE REPORTS OF FAULTS FOUND
        !            44: *      BY USERS OR IMPLEMENTORS.
        !            45: *
        !            46: *      PERMISSION TO USE SPITBOL MAY BE NEGOTIATED WITH
        !            47: *      ANY OF THE ABOVE NAMED.
        !            48: *      SITES WHICH HAVE OBTAINED SUCH PERMISSION MAY NOT PASS ON
        !            49: *      COPIES OF THE SPITBOL SYSTEM OR PARTS OF IT EXCEPT
        !            50: *      BY AGREEMENT WITH DEWAR.
        !            51: *
        !            52: *
        !            53: *      TO ASSIST IMPLEMENTORS A REVISION HISTORY BASED ON
        !            54: *      VERSION 2.7 IS BEING MAINTAINED. IN ADDITION FILE
        !            55: *      SBL.CHG (AVAILABLE WITH THE SOURCE FILE) INDICATES
        !            56: *      DETAILED CHANGES MADE FROM ONE RELEASED VERSION TO
        !            57: *      ANOTHER BY LISTING NEW AND CHANGED LINES IN THE CONTEXT
        !            58: *      OF THE TEN SURROUNDING LINES.
        !            59: 
        !            60: 
        !            61: Page 3               S P I T B O L - REVISION HISTORY
        !            62: 
        !            63: *      R E V I S I O N   H I S T O R Y
        !            64: *      -------------------------------
        !            65: *
        !            66: *
        !            67: *      VERSION 4.1 TO 4.2 (NOV 83)
        !            68: *      ---------------------------
        !            69: *
        !            70: *      BUGS FIXED
        !            71: *      ----------
        !            72: *
        !            73: *      B4.101  ERROR IN HANDLING OF STACK WHEN GTARR
        !            74: *              GIVEN AN EMPTY TABLE ARG.
        !            75: *      B4.102  OMITTED WTB IN ACESS. CAUSES ILLEGAL ON
        !            76: *              ACCESSING PATTERN VALUED KEYWORDS.
        !            77: *      B4.103  DID NOT REPORT ERROR FOR BLANKS IN
        !            78: *              DEFINE PROTOTYPE. FIXED BY IGNORING LEADING
        !            79: *              AND TRAILING BLANKS.
        !            80: *      B4.104  FAILURE TO IGNORE SUPERFLUOUS COMMAS IN
        !            81: *              ARGS, LOCALS OF DEFINE FUNCTION PROTOTYPE.
        !            82: *      B4.105  CORRUPTION OF PROGRAM TIMER IF IA, WC OVERLAP
        !            83: *      B4.106  REGISTERS NOT SET UP FOR SYSEJ CALLS.
        !            84: *      B4.107  MISUSE OF MFI AT ERR02+8.
        !            85: *      B4.108  MISUSE OF EXNUL IN TRACE PROCEDURE.
        !            86: *      B4.109  NO STATEMENT FAILURE IF STOPTR APPLIED TO NON-
        !            87: *              EXISTENT TRACE.
        !            88: *      B4.110  LISTING FILE PAGE OVERFLOW FOR SOME ERRORS.
        !            89: *      B4.111  INCORRECT TRAILING BLANK PADDING IN INSBF.
        !            90: *      B4.112  ERROR ON INSERTING NULL INTO A BUFFER.
        !            91: *      B4.113  GTNUM FAILED TO PRESERVE IA.
        !            92: *
        !            93: *      CHANGES
        !            94: *      -------
        !            95: *
        !            96: *      C4.101  CONDITIONAL ASSEMBLY SYMBOLS IN THE /EQU  */
        !            97: *              SECTION ARE REMOVED. USE DUMMIES IF NECESSARY.
        !            98: *              VARIABLITY OF NUMBER OF EQUATES CAUSED TRANSLATOR
        !            99: *              PROBLEMS FOR DIFFERENT VERSIONS FOR SIMILAR C/RS.
        !           100: *      C4.102  POSSIBILITY OF IGNORING CASE OF IDENTIFIERS BY
        !           101: *              USE OF -CASEIG, -NOCASEIG CTRL CARDS INTRODUCED.
        !           102: *              CONDITIONAL ASSEMBLY SYMBOL .CSIG, SETS DEFAULT
        !           103: *              FOR IGNORING CASE IF SET.
        !           104: *      C4.103  DEFINITION OF .CPLC INDICATES SYSTEM PREFERENCE
        !           105: *              FOR LOWER CASE SO THAT SYSTEM MESSAGES, DUMPS
        !           106: *              ETC APPEAR IN LOWER CASE. IMPLEMENTORS DEFINING
        !           107: *              THIS SYMBOL MUST TRANSLATE ARGS OF ERB, ERR, DTC,
        !           108: *              WHICH ARE IN UPPER CASE, AS IF THEY WERE IN
        !           109: *              LOWER CASE. ESSENTIAL THAT .CASL BE ALSO DEFINED.
        !           110: *      C4.104  EJECT AT END OF COMPILATION DONE BEFORE CALL OF
        !           111: *              SYSBX INSTEAD OF AFTER IT.
        !           112: *      C4.105  BUFFER BLANKING FOR STANDARD PRINTER BUFFER NOW
        !           113: *              USES MVW. DONE PARTLY TO ACCOMMODATE HONEYWELL
        !           114: *              H66 AND PARTLY FOR EFFICIENCY.
        !           115: *      C4.106  IF SORT, RSORT ARGUMENTS ARE EMPTY TABLES,
        !           116: *              STATEMENT FAILURE OCCURS INSTEAD OF AN ERROR.
        !           117: 
        !           118: 
        !           119: Page 4               S P I T B O L - REVISION HISTORY
        !           120: 
        !           121: *      C4.107  THE THREE SECTIONS OF EXECUTABLE CODE FOLLOWING
        !           122: *              SEC OPCODES HAVE BEEN LABELLED AS RTN-S.
        !           123: *              THE FEW WILD BRANCHES TO PLBLS (MAINLY FOR
        !           124: *              RESUMPTION AFTER ERRORS) HAVE BEEN REPLACED BY A
        !           125: *              NEW OPCODE
        !           126: *                 JMG  GLABL
        !           127: *              WHICH CAUSES A JUMP TO A GLOBAL LABEL (GLBL)
        !           128: *              DECLARED AS SUCH BY APPEARING IN THE PROCEDURES
        !           129: *              SECTION WITH THE OPCODE, GLB, AS IN
        !           130: *              GLABL  GLB
        !           131: *              IMPLEMENTORS WITH ADDRESSABILITY PROBLEMS WILL
        !           132: *              FIND THIS ADVANTAGEOUS. OTHERS CAN IGNORE GLB AND
        !           133: *              TRANSLATE JMG IDENTICALLY WITH BRN.
        !           134: *      C4.108  ROUTINES SYSAB, SYSTU, FOR USE BY OSINT TO
        !           135: *              CLOSE DOWNS SPITBOL CLEANLY IN EMERGENCY ARE
        !           136: *              REMOVED AS BEING INSUFFICIENTLY GENERAL.
        !           137: *      C4.109  SPITBOL PERFORMED AN EJECT EVEN WITH OPTIONS
        !           138: *              SELECTED TO SUPPRESS OUTPUT TO STANDARD OUTPUT
        !           139: *              FILE. THIS HAS BEEN RECTIFIED.
        !           140: *      C4.110  SECOND OPERAND OF MINIMAL OPCODES LSX, RSX
        !           141: *              REDEFINED TO BE X NOT (X) FOR CONSISTENCY.
        !           142: *      C4.111  THE FOLLOWING FEATURES ARE REMOVED -
        !           143: *              CTRL CARDS - DOUBLE DUMP ERRORS EXECUTE NOERRORS
        !           144: *                 NOEXECUTE NOOPT NOPRINT OPTIMISE PRINT SINGLE.
        !           145: *              FUNCTIONS - ARG FIELD ITEM LOCAL REWIND.
        !           146: *              KEYWORD - ABEND.
        !           147: 
        !           148: 
        !           149: Page 5               S P I T B O L - REVISION HISTORY
        !           150: 
        !           151: *      C4.112  ADDED FUNCTIONS ITC(N), CTI(S) WHICH CONVERT
        !           152: *              INTEGER N TO NTH CHAR OF ALPHABET AND
        !           153: *              CHARACTER S TO CORRESPONDING INTEGER.
        !           154: *      C4.113  ADDED FUNCTION SET(FILETAG,RECNO,PAR3)
        !           155: *              WHICH MAY BE USED TO EFFECT FILE RANDOM ACCESS.
        !           156: *      C4.114  OPTIONAL MINIMAL OPCODES CLU, CUL TO CONVERT
        !           157: *              FROM LOWER TO UPPER CASE OR VICE VERSA DESCRIBED.
        !           158: *              MOST IMPLEMENTORS NEED NOT USE THEM.
        !           159: *      C4.115  ALL ERROR CODES HAVE BEEN REASSIGNED TO BRING
        !           160: *              THEM BELOW 256 AND TO SORT THEM IN THE SOURCE.
        !           161: *              THIS REPRESENTS A DISCONTINUITY WHICH IT IS
        !           162: *              HOPED WILL NOT BE REPEATED.
        !           163: *      C4.116  DEFAULT INPUT RECORD LENGTH SET TO 160 INSTEAD
        !           164: *              OF 72 CHARACTERS.
        !           165: *      C4.117  OSINT INTERFACE MASSIVELY REDEFINED. SOME
        !           166: *              SYS-- ROUTINES ARE REMOVED. THIS REPRESENTS AN
        !           167: *              ISOLATED UPHEAVAL TO REALLY ADDRESS COMPLAINTS
        !           168: *              FROM IMPLEMENTORS ON FILE HANDLING AND ERROR
        !           169: *              REPORTING. NOTE THE DISAPPEARANCE OF THE FCBLK.
        !           170: 
        !           171: 
        !           172: Page 6               S P I T B O L - REVISION HISTORY
        !           173: 
        !           174: *      C4.118  SECOND ARG OF INPUT(), OUTPUT() BECOMES A
        !           175: *              FILETAG WHICH TYPICALLY IS A FILE NAME.
        !           176: *      C4.119  FUNCTIONALITY OF ENDFILE() EXTENDED.
        !           177: *              WHEN USED TO CLOSE A FILE, IT DOES NOT CAUSE
        !           178: *              DETACHING OF ASSOCIATED VARIABLES.
        !           179: *      C4.120  TERMINAL I/O IS PUT ON THE SAME FOOTING AS FILE
        !           180: *              I/O. STANDARD INPUT AND OUTPUT CAN BE OBTAINED
        !           181: *              FROM OR DIRECTED TO A TERMINAL.
        !           182: *      C4.121  THE /COMMAND LINE/ USED TO EFFECT A SPITBOL RUN
        !           183: *              IS MADE AVAILABLE TO THE PROGRAM VIA HOST(1).
        !           184: *              THIS PERMITS USER TO CHECK AND TAKE ACTION ON
        !           185: *              RUN OPTIONS.
        !           186: *      C4.122  MINIMAL OPCODES BTC AND WTC TO CONVERT FROM BAUS
        !           187: *              AND WORDS TO CHARACTERS INTRODUCED.
        !           188: *
        !           189: *      DOCUMENTATION REVISIONS
        !           190: *      -----------------------
        !           191: *
        !           192: *      D4.101  RULES ABOUT NOT UPSETTING GARBAGE COLLECTOR IN
        !           193: *              OSINT IMPLEMENTATION MADE CLEARER.
        !           194: *      D4.102  MORE DETAIL ON CONDITIONAL ASSEMBLY GIVEN.
        !           195: *      D4.103  SYSRD AND SYSRI DESCRIPTIONS MODIFIED. ANY
        !           196: *              PADDING CHARS USED SHOULD BE BLANKS NOT ZEROES.
        !           197: *      D4.104  MOTIVATION FOR CSC CLARIFIED.
        !           198: *      D4.105  DESCRIPTION OF EXP CORRECTED.
        !           199: *
        !           200: *
        !           201: *
        !           202: *      VERSION 4.0 TO 4.1 (JUL 80)
        !           203: *      ---------------------------
        !           204: *
        !           205: *      BUGS FIXED
        !           206: *      ----------
        !           207: *
        !           208: *      B4.001  ERROR IN CONVERT(ARRAY,/TABLE/) - TFIND MESSED WB
        !           209: *      B4.002  SORTH IS N-TYPE PROCEDURE.
        !           210: *      B4.003  ERROR PROC COULD TRY LISTING ABSENT SOURCE LINE.
        !           211: *      B4.004  REF TO UNDEFINED B$RCL IF .CNRA DEFINED.
        !           212: *      B4.005  LEX COMPARISONS ON NULL STRINGS FIXED.
        !           213: *
        !           214: *      CHANGES
        !           215: *      -------
        !           216: *
        !           217: *      C4.001  DEFINITION OF .CNLD OMITS MORE EXTERNAL FN CODE.
        !           218: 
        !           219: 
        !           220: Page 7               S P I T B O L - REVISION HISTORY
        !           221: 
        !           222: *
        !           223: *      VERSION 3.5 TO 3.6 (JUN 83)
        !           224: *      ---------------------------
        !           225: *
        !           226: *      OVER THE PERIOD 1979 TO 1983 TWO SEPARATE MAINTENANCE
        !           227: *      AND ENHANCEMENT ROUTES COEXISTED. WHAT IS RECORDED HERE
        !           228: *      RELATING TO VERSION 3.6 RESULTS PRINCIPALLY FROM THE
        !           229: *      EFFORTS OF DAVE SHIELDS, STEVE DUFF AND ROBERT
        !           230: *      GOLDBERG, COORDINATED AT NYU.
        !           231: *      THE OTHER EFFORT BY TONY MCCANN AT LEEDS TOOK PLACE AT
        !           232: *      TWO DISCRETE TIMES DURING THE PERIOD, ULTIMATELY GIVING
        !           233: *      THE CONSOLIDATED VERSION 4.2 WHICH INCORPORATES V3.6
        !           234: *      CHANGES. NOTATION (C4.XXX) MEANS THAT C4.XXX ALSO
        !           235: *      EFFECTED THIS CHANGE OR PROVIDES A SIMILAR FEATURE.
        !           236: *      CODES USED TO IDENTIFY AUTHORS ARE (SGD) FOR DUFF,
        !           237: *      (REG) FOR  GOLDBERG, AND (LDS) FOR SHIELDS.
        !           238: *
        !           239: *      BUGS FIXED
        !           240: *      ----------
        !           241: *
        !           242: *      B3.601  (SGD) TO FIX MULTIPLE TRAP BLOCK ERROR IN ASIGN.
        !           243: *      B3.602  (SGD) PATCH GTARR TO FIX NULL CONVERT (B4.101).
        !           244: *      B3.603  (SGD) INSERTED MISSING WTB AFTER SYSMM CALLS.
        !           245: *      B3.604  (SGD) USE STRING LENGTH IN HASHS.
        !           246: *      B3.605  (SGD) FIXED SERIOUS PARSER PROBLEM
        !           247: *              RELATING TO (X Y) ON LINE BEING VIEWED AS PATTERN
        !           248: *              MATCH.  FIXED BY ADDITION OF NEW CMTYP VALUE
        !           249: *              C$CNP (CONCATENATION - NOT PATTERN MATCH).
        !           250: *      B3.606  (SGD) FIXED EXIT(N) RESPECIFICATION CODE
        !           251: *              TO PROPERLY OBSERVE HEADER SEMANTICS ON RETURN.
        !           252: *      B3.607  (SGD) BYPASS PRTPG CALL AT INITIALIZATION
        !           253: *              FOLLOWING COMPILATION IF NO OUTPUT GENERATED.
        !           254: *              THIS PREVENTS OUTPUT FILES CONSISTING OF THE
        !           255: *              HEADERS AND A FEW BLANK LINES WHEN THERE IS NO
        !           256: *              SOURCE LISTING AND NO COMPILATION STATS (C4.109).
        !           257: *              ALSO FIX TIMSX INITIALIZATION IN SAME CODE.
        !           258: *      B3.608  (SGD) B$EFC CODE DID NOT CHECK FOR
        !           259: *              UNCONVERTED RESULT RETURNING NULL STRING.
        !           260: *      B3.609  (SGD) LOAD PFVBL FIELD IN RETRN FOR
        !           261: *              RETURN TRACING. THIS WAS CAUSING BUG ON RETURN
        !           262: *              TRACES THAT TRIED TO ACCESS THE VARIABLE NAME.
        !           263: *      B3.610  (SGD) FIXED PROBLEM RELATING TO COMPILATION OF
        !           264: *              GOTO FIELDS CONTAINING SMALL INTEGERS.
        !           265: *      B3.611  (REG) PREVENT CLEAR() FROM CLOBBERING PROTECTED
        !           266: *              VARIABLES AT LABEL SCLR5.
        !           267: *      B3.612  (REG) FIXED GTEXP FROM ACCEPTING TRAILING
        !           268: *              SEMICOLON OR COLON. THIS IS NOT A LEGAL WAY
        !           269: *              TO END AN EXPRESSION.
        !           270: 
        !           271: 
        !           272: Page 8               S P I T B O L - REVISION HISTORY
        !           273: 
        !           274: *      B3.613  (REG) FIXED DIFFICULTIES WITH LISTINGS DURING
        !           275: *              EXECUTION WHEN NO LISTING GENERATED DURING
        !           276: *              COMPILATION. -LIST TO CODE() CAUSED BOMB.
        !           277: *              FIX IS TO RESET R$TTL AND R$STL TO NULLS NOT 0
        !           278: *              AFTER COMPILATION. (LISTR, LISTT EXPECT NULLS).
        !           279: *              WHEN LISTING AND STATISTICS ROUTED TO DIFFERENT
        !           280: *              FILE THAN EXECUTION OUTPUT, ERROR MESSAGE IS SENT
        !           281: *              TO EXECUTION OUTPUT (AND GETS SEPARATED FROM
        !           282: *              ... IN STATEMENT ... MSG). LABO1 CALLS SYSAX AND
        !           283: *              STOPR DOES NOT CALL SYSAX IF ENTERED FROM LABO1.
        !           284: *      B3.614  (LDS) FIX MISUSE OF WC JUST AFTER ASG10.
        !           285: *      B3.615  (LDS) ADD COMMENT POINTING OUT SUSPICIOUS CODE
        !           286: *              AFTER TFN02. EXPLANATION NOW ADDED (APM).
        !           287: *      B3.616  (LDS) FIX INCONSISTENT TYPE OF SORTH (B4.002).
        !           288: *      B3.617  (LDS) INSERT MISSING CONDITIONAL TESTS ON CNBF.
        !           289: *      B3.618  (LDS) FIX VIOLATIONS OF MINIMAL LANGUAGE WHICH
        !           290: *              HAD SLIPPED PAST SOME TRANSLATORS.
        !           291: 
        !           292: 
        !           293: Page 9               S P I T B O L - REVISION HISTORY
        !           294: 
        !           295: *      CHANGES
        !           296: *      -------
        !           297: *
        !           298: *      C3.601  (SGD) ADDITION OF .CSCI AND SYSCI (INT TO STRING
        !           299: *              SYSTEM ROUTINE OPTION)
        !           300: *      C3.602  (REG) CHANGED INILN  AND INILS TO 258 (C4.116).
        !           301: *      C3.603  (SGD) MERGED IN PROFILER PATCHES AND FIXED CODE
        !           302: *      C3.604  (SGD) ADDED BUFFER TYPE AND SYMBOL .CNBF
        !           303: *      C3.605  (SGD) ADDED CHAR FUNCTION.  CHAR(N) RETURNS NTH
        !           304: *              CHAR OF HOST MACHINE CHAR SET (C4.112).
        !           305: *      C3.606  (REG) ADDED CFP$U TO EASE TRANSLATION ON SMALLER
        !           306: *              SYSTEMS
        !           307: *      C3.607  (REG) ADDED LOWER CASE SUPPORT (C4.102/3).
        !           308: *      C3.608  (REG) ADDED SET I/O FUNCTION - UNDER .CUST
        !           309: *      C3.609  (REG) CONDITIONALIZED PAGE EJECT AFTER CALL TO
        !           310: *              SYSBX AND ADDED ANOTHER BEFORE CALL TO SYSBX,
        !           311: *              SO THAT, IF DESIRED BY THE IMPLEMENTOR,
        !           312: *              STANDARD OUTPUT WILL REFLECT ASSIGNMENTS MADE
        !           313: *              BY EXECUTING PROGRAM ONLY (C4.104).
        !           314: *      C3.610  (LDS) INTRODUCE .CTMD TO SUPPORT SYSTM THAT
        !           315: *              REPORTS ELAPSED TIME IN DECISECONDS INSTEAD OF
        !           316: *              MILLISECONDS.
        !           317: *      C3.611  (LDS)  PROVIDE PLACE FOR .DEF OR .UND FOR EACH
        !           318: *              CONDITIONAL  OPTION, SO THAT SETTINGS CAN BE
        !           319: *              CHANGED WITHOUT CHANGING LINE NUMBERS.
        !           320: *      C3.612  (LDS) OBEY (NEW) RESTRICTION THAT OPERAND IN
        !           321: *              CONDITIONAL BRANCH INSTRUCTION CANNOT HAVE FORM
        !           322: *              (X)+ IN ORDER TO SIMPLIFY TRANSLATIONS FOR WHICH
        !           323: *              POSTINCREMENT NOT READILY AVAILABLE.
        !           324: *      C3.613  (REG,LDS) ADD OP
        !           325: *                    FLC WREG
        !           326: *              THAT FOLDS CHAR IN WREG TO UPPER CASE (C4.114).
        !           327: *      C3.614  (LDS) ADD OPTION .CS16 TO ALLOW INITIALIZATION OF
        !           328: *              STATEMENT LIMIT VALUES TO 32767 FOR 16 BIT
        !           329: *              MACHINES.
        !           330: *      C3.615  (LDS) PERMIT RETURN POINT AND ENTRY POINT
        !           331: *              ADDRESSES TO BE DISTINGUISHED BY THEIR PARITY
        !           332: *              INSTEAD OF BY LYING WITHIN A CERTAIN RANGE
        !           333: *              OF VALUES.  INTRODUCE CONDITIONAL SYMBOLS
        !           334: *              .CRPP  RETURN POINTS HAVE ODD PARITY
        !           335: *              .CEPP  ENTRY POINTS HAVE ODD PARITY
        !           336: *      C3.616  (LDS) INTRODUCE NEW MINIMAL OPCODES TO BRANCH
        !           337: *              ACCORDING TO PARITY,
        !           338: *                BEV  OPN,PLBL  BRANCH IF ADDRESS EVEN
        !           339: *                BOD  OPN,PLBL  BRANCH IF ADDRESS ODD
        !           340: *              AN ADDRESS IS EVEN IF IT IS A MULTIPLE OF CFP$B.
        !           341: *      C3.617  (SGD) OPCODE MCB (MOVE CHARS BACKWARDS) DEFINED.
        !           342: *      C3.618  (SGD) FUNCTION FENCE DEFINED.
        !           343: 
        !           344: 
        !           345: Page 10              S P I T B O L - REVISION HISTORY
        !           346: 
        !           347: *      VERSION 3.5 TO 4.0 (JUL 79)
        !           348: *      ---------------------------
        !           349: *
        !           350: *      BUGS FIXED
        !           351: *      ----------
        !           352: *
        !           353: *      B3.501  OMITTED BTW OPCODE IN IOPUT.
        !           354: *      B3.502  ILLEGAL ON SORTING A = ARRAY(1).
        !           355: *      B3.503  FAILURE TO SORT VECTOR WITH ORIGIN OTHER THAN 1.
        !           356: *      B3.504  INCORRECT HANDLING OF VARIABLE ALPHABET.
        !           357: *      B3.505  EVAL MISHANDLES DEFAULT VALUE OF TABLE ELEMENT.
        !           358: *
        !           359: *      CHANGES
        !           360: *      -------
        !           361: *
        !           362: *      C3.501  PROFILE KEYWORD GIVES EXECUTION PROFILE.
        !           363: *      C3.502  NUMERIC CONSTANTS STARTING WITH . + OR -
        !           364: *              ARE FOLDED ON LEXICAL SCANNING.
        !           365: *
        !           366: *      DOCUMENTATION REVISIONS
        !           367: *      -----------------------
        !           368: *
        !           369: *      D3.501  TERM BAU (BASIC ADDRESSING UNIT) INTRODUCED.
        !           370: *      D3.502  ERROR IN REFERENCE TO IA,WC OVERLAP IN SEC 3.
        !           371: 
        !           372: 
        !           373: Page 11              S P I T B O L - REVISION HISTORY
        !           374: 
        !           375: *      VERSION 3.4 TO 3.5 (FEB 79)
        !           376: *      ---------------------------
        !           377: *
        !           378: *      BUGS FIXED
        !           379: *      ----------
        !           380: *
        !           381: *      B3.401  PRTST SHOULD BE DECLARED AS AN R TYPE PROCEDURE.
        !           382: *      B3.402  TIMING ERROR IF SPITBOL FAILS IN DUMP.
        !           383: *      B3.403  ERROR IN HANDLING OMITTED ARGS OF OPERATORS.
        !           384: *      B3.404  TOO MANY LINES PUT ON FIRST PAGE OF LISTING.
        !           385: *      B3.405  LEADING UNARY OPERATOR IN EVAL ERRONEOUSLY NEEDED
        !           386: *              PRECEDING BLANK.
        !           387: *      B3.406  TAG IN DUMP OF ARRAY OR TABLE VALUES WAS OMITTED.
        !           388: *      B3.407  EVAL UNABLE TO RETURN A DEFERRED EXPRESSION.
        !           389: *      B3.408  ILLEGAL IF SETEXIT CODE BRANCHES TO RETURN, WITH
        !           390: *              FURTHER COMPLICATIONS IF WITHIN CALL OF EVAL.
        !           391: *      B3.409  ILLEGAL ON DETACHING INPUT, OUTPUT, TERMINAL.
        !           392: *      B3.410  PRTNL SHOULD BE DECLARED AS AN R TYPE PROCEDURE.
        !           393: *      B3.411  MISPLACED LCT AFTER SDF09.
        !           394: *
        !           395: *      CHANGES
        !           396: *      -------
        !           397: *
        !           398: *      C3.401  -SEQU AND -NOSE CONTROL CARDS REMOVED.
        !           399: *      C3.402  OPTION PROVIDED TO SUPPRESS SYSTEM IDENTIFICATION
        !           400: *              ON LISTING.
        !           401: *      C3.403  DESCRIPTION OF SYSBX SLIGHTLY REVISED.
        !           402: *      C3.404  PERMISSIBLE TO MODIFY SCBLK LENGTH BEFORE TAKING
        !           403: *              ERROR RETURNS FROM SYSIN, SYSRD, SYSRI.
        !           404: *      C3.405  CONDITIONAL .CNLD MAY BE DEFINED TO OMIT LOAD().
        !           405: *      C3.406  CONDITIONAL .CNEX MAY BE DEFINED TO OMIT EXIT().
        !           406: *      C3.407  TABLE NOW ACCEPTS A THIRD ARGUMENT SPECIFYING
        !           407: *              DEFAULT INITIAL LOOKUP VALUE.
        !           408: *      C3.408  ROUTINES SORT, RSORT FOR SORTING ARRAYS, TABLES
        !           409: *              INTRODUCED. SPECIFICATION IS AS IN SITBOL.
        !           410: *              ROUTINES MAY BE OMITTED BY DEFINING .CNSR .
        !           411: *      C3.409  ERROR IN CODE(), EVAL() CALL NOW CAUSES STATEMENT
        !           412: *              FAILURE BUT ERRTEXT KEYWORD IS STILL SET.
        !           413: *      C3.410  ARG TO CODE() MAY CONTAIN EMBEDDED CONTROL CARDS
        !           414: *              AND COMMENT DELIMITED BY A SEMICOLON.
        !           415: *
        !           416: *      DOCUMENTATION REVISIONS
        !           417: *      -----------------------
        !           418: *
        !           419: *      D3.401  PURPOSE OF RESTRICTION 2 IN MINIMAL SECTION -6-
        !           420: *              (OPERATIONS ON CHAR VALUES), ERRONEOUSLY STATED
        !           421: *              TO BE FOR CMC, RATHER THAN FOR CEQ, CNE.
        !           422: *              DESCRIPTIONS OF ABOVE OPCODES REVISED.
        !           423: *      D3.402  DESCRIPTION OF ENT CLARIFIED.
        !           424: *      D3.403  DESCRIPTIONS OF SEVERAL OPCODES REVISED TO REMOVE
        !           425: *              TECHNICALLY INVALID LITERALS E.G. =0 , *1.
        !           426: *      D3.405  RESTRICTED USE OF LETTER Z IN MINIMAL CLARIFIED.
        !           427: *      D3.406  DIVIDE BY ZERO EXPLICITLY MENTIONED IN RELATION
        !           428: *              TO OVERFLOW SETTING.
        !           429: 
        !           430: 
        !           431: Page 12              S P I T B O L - REVISION HISTORY
        !           432: 
        !           433: *      VERSION 3.3 TO 3.4 (OCT 78)
        !           434: *      ---------------------------
        !           435: *
        !           436: *
        !           437: *      BUGS FIXED
        !           438: *      ----------
        !           439: *
        !           440: *      B3.301  ILLEGAL FOR ERRONEOUS EVAL() ARG.
        !           441: *      B3.302  ADDRESS ARITHMETIC OVERFLOW IN ALLOC AND ALOCS.
        !           442: *      B3.303  -EJECT AND -SPACE IGNORED -NOLIST OPTION.
        !           443: *      B3.304  ERRONEOUS ARGUMENT SCAN IN LOAD().
        !           444: *      B3.305  ERRONEOUS PLC ON UNINITIALISED R$CIM IN NEXTS.
        !           445: *      B3.306  LDI USED INSTEAD OF MTI AFTER PRV07.
        !           446: *      B3.307  MISUSE OF RMI AT ERRA2.
        !           447: *      B3.308  MISUSE OF MTI IN HASHS.
        !           448: *      B3.309  BUG IN -SEQU CARD SEQUENCE NUMBER CHECKING.
        !           449: *      B3.310  STACK OVERFLOW ERROR MESSAGE NOT ALWAYS PRINTED.
        !           450: *      B3.311  CORRUPT PROTOTYPE PRINT FOR TRACED ARRAYS.
        !           451: *      B3.312  PATTERN FIRST ARG IN DUPL CAUSED ERROR.
        !           452: *      B3.313  OMITTED CSC IN S$RPD, ERRONEOUS CSC IN CONVERT.
        !           453: *      B3.314  MISPLACED BTW IN EXBLD.
        !           454: *      B3.315  INCORRECT CODE IN HASHS.
        !           455: *      B3.316  FAILURE OF LOAD TO SCAN INTEGER ARG.
        !           456: *      B3.317  TABLE ACCESS WITH NEGATIVE INTEGER ARG. FAILED.
        !           457: *      B3.318  ERROR IN RETURNING RESULT OF LOADED FUNCTION.
        !           458: *      B3.319  =E$SRS USED AFTER INI01 INSTEAD OF *E$SRS.
        !           459: *      B3.320  ERR USED INSTEAD OF ERB AFTER SYSTU
        !           460: *      B3.321  LABEL COULD START WITH DISALLOWED CHARACTER.
        !           461: *      B3.322  CONTINUE AFTER SETEXIT HAD BAD HEURISTIC.
        !           462: 
        !           463: 
        !           464: Page 13              S P I T B O L - REVISION HISTORY
        !           465: 
        !           466: *
        !           467: *
        !           468: *      CHANGES
        !           469: *      -------
        !           470: *
        !           471: *      C3.301  SYSAX AND .CSAX INTRODUCED - SEE SYSAX
        !           472: *              IN PROCEDURES SECTION.
        !           473: *      C3.302  VARIABLE MXLEN INTRODUCED. CONTAINS THE MAXIMUM
        !           474: *              SIZE OF A SPITBOL OBJECT AND IS NOT CHANGEABLE
        !           475: *              AFTER INITIALISATION. MAY BE DEFAULTED OR SET
        !           476: *              EXPLICITLY BY SYSMX.
        !           477: *      C3.303  SYSHS RETURNS REVISED - SEE SYSHS.
        !           478: *      C3.304  NEW MINIMAL OPCODE AOV TO FIX B3.302.
        !           479: *      C3.305  INHIBIT STLIMIT CHECK IF STLIMIT MADE NEGATIVE.
        !           480: *      C3.306  CFP$M IS REQUIRED TO BE OF FORM 2**N - 1.
        !           481: *      C3.307  DUPL MADE TO CONFORM TO SIL SNOBOL4 STANDARD.
        !           482: *      C3.308  LCH AND SCH ACTIONS MORE CLOSELY DEFINED.
        !           483: *      C3.309  BATCH INITIALISATION CODE OMITTED IF CONDITIONAL
        !           484: *              ASSEMBLY SYMBOL .CNBT (NO BATCH) DEFINED.
        !           485: *      C3.310  (WA) CONTAINS ARGUMENT COUNT IN SYSEX CALL.
        !           486: *      C3.311  SYSFC  MAY REQUEST ALLOCATION OF STATIC FCBLK.
        !           487: *      C3.312  IF IA,WC OVERLAP, RESTRICTION PUT ON DUMPING/
        !           488: *              RESTORING THESE REGISTERS.
        !           489: *      C3.313  NEW LISTING OPTION INTERMEDIATE BETWEEN COMPACT
        !           490: *              AND EXTENDED PROVIDED (SEE SYSPP).
        !           491: *      C3.314  REVISION OF SYSXI INTERFACE TO PERMIT OPTIONS FOR
        !           492: *              LOAD MODULE STANDARD O/P FILE (SEE SYSXI,SYSPP).
        !           493: *      C3.315  LAST ARG OF SUBSTR MAY BE OMITTED - TREATED
        !           494: *              AS REMAINDER OF STRING.
        !           495: 
        !           496: 
        !           497: Page 14              S P I T B O L - REVISION HISTORY
        !           498: 
        !           499: *      VERSION 3.2 TO 3.3 (JAN 78)
        !           500: *      ---------------------------
        !           501: *
        !           502: *      BUGS FIXED
        !           503: *      ----------
        !           504: *
        !           505: *      B3.201  ARRAY REFERENCE AND EXTERNAL FUNCTION LOAD
        !           506: *              ROUTINES ILLEGALLY ACCESSED INFORMATION
        !           507: *              BEYOND THE STACK FRONT.
        !           508: *              SIMILAR FAULT IN UNANCHORED PATTERN MATCHING.
        !           509: *      B3.202  DUMP(1) PRODUCED DUMP(2) TYPE OUTPUT.
        !           510: *      B3.203  WTB CONVERSION OMITTED IN CODE FOLLOWING
        !           511: *              INI01, INI02, EXBLD.
        !           512: *      B3.204  INCORRECT FAIL RETURN FROM TFIND IN ARREF.
        !           513: *      B3.205  ENDFILE DID NOT DETACH I/O ASSOCIATED VARIABLES.
        !           514: *      B3.206  -SPACE WITH OMITTED ARG. FAILED
        !           515: *      B3.207  LOOPED IF DUMP KEYWORD NON-ZERO AFTER STACK
        !           516: *              OVERFLOW IN GARBAGE COLLECT FAILURE.
        !           517: *      B3.208  FAILURE IN READING NUMBERS WITH TRAILING BLANKS.
        !           518: *
        !           519: *      CHANGES
        !           520: *      -------
        !           521: *
        !           522: *      THE EXTENSIVE CHANGES MADE HERE MOSTLY RESULT FROM A
        !           523: *      SNOBOL4 IMPLEMENTORS MEETING HELD AT NEW YORK UNIVERSITY
        !           524: *      IN AUGUST 1977. THEY ARE AIMED AT
        !           525: *           (1) HAVING SPITBOL CONFORM TO CERTAIN SNOBOL4
        !           526: *           LANGUAGE STANDARDS  AND
        !           527: *           (2) PRODUCING A STABLE DEFINITION OF MINIMAL BY
        !           528: *           CARRYING OUT A FEW ESSENTIAL REVISIONS IN THE LIGHT
        !           529: *           OF EXPERIENCE IN ITS USE.
        !           530: *
        !           531: *      CHANGES TO SPITBOL
        !           532: *      ------------------
        !           533: *
        !           534: *      C3.201  DEFAULT VALUES FOR KEYWORDS TRIM AND ANCHOR ARE
        !           535: *              ZERO. ON SYSTEMS WHERE RECORDS ARE CUSTOMARILY
        !           536: *              HANDLED WITHOUT TRALING BLANKS, THERE IS NO
        !           537: *              OBLIGATION TO SUPPLY SUCH BLANKS.
        !           538: *      C3.202  DEFAULT VALUE OF -INXX CONTROL CARD IS -IN72.
        !           539: 
        !           540: 
        !           541: Page 15              S P I T B O L - REVISION HISTORY
        !           542: 
        !           543: *      C3.203  THE SECOND ARGUMENT OF INPUT AND OUTPUT IS
        !           544: *              PERMITTED TO BE AN INTEGER AS IN SNOBOL4.
        !           545: *              IN ADDITION INPUT(), OUTPUT() NOW GIVE A SNOBOL4
        !           546: *              STATEMENT FAILURE IF SYSIO USES THE FILE NOT
        !           547: *              FOUND RETURN.
        !           548: *              THE THIRD ARGUMENT HAS A RECOMMENDED FORMAT AND
        !           549: *              TO OVERRIDE ITS DEFAULT DELIMITER (,) A
        !           550: *              CONDITIONAL ASSEMBLY SYMBOL, .CIOD, IS USED.
        !           551: *              INTERFACES TO SYSEF,SYSEJ,SYFC,SYSIO,SYSRW
        !           552: *              ARE REVISED.
        !           553: *              WC MAY NOW BE USED TO RETURN FROM SYSIO, A MAX
        !           554: *              RECORD LENGTH.
        !           555: *      C3.204  NEW CONFIGURATION PARAMETER CFP$F (SCBLK OFFSET)
        !           556: *              IS INTRODUCED. CFP$U IS REMOVED.
        !           557: *      C3.205  IMPLEMENTATION AND VERSION IDENTIFICATION IS
        !           558: *              REQUIRED - SEE SYSID.
        !           559: *      C3.206  ROUTINE SYSMX RETURNS THE MAXIMUM LENGTH OF
        !           560: *              SPITBOL OBJECTS (STRINGS ARRAYS ETC).  THIS
        !           561: *              INFORMATION IS NOT NOW NEEDED AT TIME OF ENTRY TO
        !           562: *              SPITBOL AND HENCE WC SHOULD BE ZERO ON ENTRY.
        !           563: *      C3.207  A CONDITIONAL PARAMETER .CNRA PERMITS ASSEMBLY
        !           564: *              OF A MORE COMPACT VERSION WITH NO REAL
        !           565: *              ARITHMETIC CODE.
        !           566: *      C3.208  TERMINAL IS A NEW PRE-ASSOCIATED VARIABLE
        !           567: *              CAPABLE OF PERFORMING INPUT AND OUTPUT TO AN
        !           568: *              ONLINE TERMINAL.
        !           569: *              SYSRI IS A NEW ROUTINE USED IN THE IMPLEMENTATION
        !           570: *              OF THIS. SEE ALSO SYSPP.
        !           571: *      C3.209  THE ENVIRONMENT PARAMETERS E$--- ARE NOW
        !           572: *              PROVIDED BY THE MINIMAL TRANSLATOR USING THE
        !           573: *              REVISED   EQU  *   FORMAT (SEE C3.229 AND START
        !           574: *              OF SPITBOL DEFINITIONS SECTION - SOME REORDERING
        !           575: *              OF SYMBOLS HAS OCCURRED).
        !           576: *      C3.210  THE INTERFACE OF SYSXI HAS BEEN SLIGHTLY REVISED.
        !           577: *              UNAVAILABILITY OF I/O CHANNELS AFTER EXIT(1),
        !           578: *              EXIT(-1) IS DOCUMENTED TOGETHER WITH ADDITIONAL
        !           579: *              ERROR RETURN USAGE FOR SYSIN,SYSOU,SYSPR,SYSRD.
        !           580: *      C3.211  SPITBOL ERROR CODES HAVE BEEN FROZEN - SEE C3.230
        !           581: *      C3.212  THE UTILITY ROUTINES ARREF ETC. ARE NOW
        !           582: *              INTRODUCED BY RTN STATEMENTS.
        !           583: *      C3.213  SYSRL (RECORD LENGTH FOR STD INPUT FILE) IS
        !           584: *              REMOVED. SINCE IMPLEMENTATION OF A GENERAL -INXXX
        !           585: *              CONTROL CARD AND AN ABILITY TO SPECIFY MAX RECORD
        !           586: *              LENGTH USING THE THIRD ARGUMENT OF INPUT, SYSRL
        !           587: *              HAS BECOME REDUNDANT.
        !           588: *      C3.214  SYSEJ AND SYSXI ARE NOW PASSED A CHAIN LINKING
        !           589: *              ALL FCBLKS IN USE.
        !           590: *      C3.215  A SPECIAL ENDING CODE IN SYSEJ IS USED WHEN
        !           591: *              ATTEMPTS TO USE STANDARD OUTPUT CHANNEL FAIL.
        !           592: *      C3.216  RESTRICTION C3.233 OBSERVED SO SIMPLIFYING
        !           593: *              OPTIMISED TRANSLATION OF ENT WITH OMITTED VAL.
        !           594: 
        !           595: 
        !           596: Page 16              S P I T B O L - REVISION HISTORY
        !           597: 
        !           598: *
        !           599: *      CHANGES TO MINIMAL
        !           600: *      ------------------
        !           601: *
        !           602: *      C3.220  MINIMAL OPCODES DEC, DIM, INC, AND BMP
        !           603: *              ARE WITHDRAWN AND REPLACED BY THE MORE CONSISTENT
        !           604: *              SET DCA, DCV, ICA, ICV.
        !           605: *      C3.221  CHS HAS BEEN REPLACED BY THE MORE GENERALLY
        !           606: *              USEFUL ZGB (STILL LIKELY TO BE A NO-OP FOR MOST
        !           607: *              IMPLEMENTATIONS HOWEVER).
        !           608: *      C3.222  THE SET OF CHARACTER COMPARISONS HAS BEEN
        !           609: *              REDUCED TO CEQ AND CNE TO EASE IMPLEMENTATION
        !           610: *              PROBLEMS.
        !           611: *      C3.223  OPCODE IRZ IS REMOVED AND DVI, RMI ORDERS ARE
        !           612: *              REDEFINED TO CONFORM TO MORE COMMON USAGE.
        !           613: *      C3.224  NEW OPCODES SSL AND SSS ARE DEFINED. THEIR USE
        !           614: *              PERMITS RETURN LINKS FOR N TYPE PROCEDURES TO BE
        !           615: *              PLACED ON A LOCAL STACK IF DESIRED.
        !           616: *      C3.225  OPCODE MNZ COMPLEMENTS ZER. IT MOVES A NON-ZERO
        !           617: *              FLAG TO ITS DESTINATION.
        !           618: *      C3.226  FOR SOME MACHINES IT IS PREFERABLE FOR THE STACK
        !           619: *              TO BUILD UP RATHER THAN DOWN. TO PERMIT THIS
        !           620: *              WITHOUT NEED FOR MASSIVE CHANGES IN MINIMAL AND
        !           621: *              RECODING OF EXISTING PROGRAMS, A SCHEME HAS BEEN
        !           622: *              DEVISED IN WHICH AN ADDITIONAL REGISTER NAME, XT,
        !           623: *              IS USED AS A SYNONYM FOR XL WHEN THIS REGISTER
        !           624: *              IS INVOLVED IN STACK MANIPULATION- SEE SECTION 4.
        !           625: *      C3.227  SECTION 0 OF A MINIMAL PROGRAM IS RENAMED THE
        !           626: *              PROCEDURE SECTION. IT NOW CONTAINS, IN ADDITION
        !           627: *              TO EXP, SPECIFICATIONS OF INTERNAL PROCEDURES
        !           628: *              AND ROUTINES BY MEANS OF THE INP AND INR OPCODES.
        !           629: *      C3.228  THE LITERAL OPERAND FORMATS =INT AND *INT HAVE
        !           630: *              BEEN WITHDRAWN. =DLBL AND *DLBL MUST BE USED IN
        !           631: *              THEIR STEAD.
        !           632: *      C3.229  THE FORMAT
        !           633: *              LABEL  EQU  *NN
        !           634: *              USED TO SPECIFY VALUES SUPPLIED BY THE MINIMAL
        !           635: *              TRANSLATOR FOR CHAR. CODES ETC. IS REPLACED BY
        !           636: *              LABEL  EQU  *
        !           637: *              WHERE THE ORDER IN WHICH THE DEFINITIONS ARE
        !           638: *              SUPPLIED BY THE TRANSLATOR SHOULD MATCH THE
        !           639: *              ORDER OF OCCURRENCE IN THE DEFINITIONS SECTION.
        !           640: *      C3.230  THE FORMAT OF ERR,ERB OPCODES IS CHANGED TO
        !           641: *              REQUIRE A NUMERIC OPERAND.
        !           642: *      C3.231  THE RTN OPCODE IS USED TO INTRODUCE ROUTINES
        !           643: *              (WHICH ARE QUITE DISTINCT FROM PROCEDURES).
        !           644: *      C3.232  CONDITIONAL ASSEMBLY DIRECTIVES MAY BE NESTED.
        !           645: *      C3.233  MINOR RESTRICTION PLACED ON THE OMISSION OF
        !           646: *              VAL WITH THE ENT OPCODE.
        !           647: 
        !           648: 
        !           649: Page 17              S P I T B O L - REVISION HISTORY
        !           650: 
        !           651: *      VERSION 3.1 TO 3.2 (AUG 77)
        !           652: *      ---------------------------
        !           653: *
        !           654: *      BUGS FIXED
        !           655: *      ----------
        !           656: *
        !           657: *      B3.101  ASTONISHING THIS WAS UNNOTICED FOR THREE YEARS.
        !           658: *              BAD CODE FOR SNOBOL4 INTEGER DIVIDE, /, GAVE
        !           659: *              WRONG RESULT FOR OPERANDS OF OPPOSITE SIGNS.
        !           660: *              IMPLEMENTATIONS HAVE EITHER WRONGLY TRANSLATED
        !           661: *              DVI AND GOT CORRECT RESULT OR CORRECTLY
        !           662: *              TRANSLATED DVI AND GOT WRONG RESULT - LEEDS HAD
        !           663: *              ONE OF EACH. SEE ALSO C3.106.
        !           664: *              TEST PROGRAM NO. 1 NOW EXTENDED TO CHECK /
        !           665: *              MORE THOROUGHLY.
        !           666: *      B3.102  GARBAGE COLLECTION BUG IN SCANE
        !           667: *
        !           668: *      CHANGES
        !           669: *      -------
        !           670: *
        !           671: *      C3.101  OPTION TO USE ADDITIONAL CHARACTERS CH$HT,CH$VT
        !           672: *              (HORIZONTAL AND VERTICAL TAB) WITH SAME SYNTACTIC
        !           673: *              SIGNIFICANCE AS CH$BL (BLANK).
        !           674: *      C3.102  OPTION TO USE A SET OF SHIFTED CASE ALPHABETIC
        !           675: *              CHARACTERS CH$$A ... CH$$$.
        !           676: *      C3.103  CONDITIONAL ASSEMBLY FEATURES ARE INTRODUCED INTO
        !           677: *              MINIMAL ON ACCOUNT OF THE ABOVE.
        !           678: *              SEE MINIMAL DOCUMENTATION SECTION FOR DETAILS
        !           679: *              OF ABOVE CHANGES.
        !           680: *      C3.104  LCH AND SCH MAY USE AN X REGISTER FIRST
        !           681: *              OPERAND AS ALTERNATIVE TO A W REGISTER.
        !           682: *      C3.105  SPITBOL STATEMENT NUMBERS IN THE LISTING MAY
        !           683: *              OPTIONALLY BE PADDED TO 6 OR 8 CHARS INSTEAD OF 5
        !           684: *              BY DEFINING CONDITIONAL ASSEMBLY SYMBOLS
        !           685: *              .CSN6 OR .CSN8 .
        !           686: *      C3.106  TO FIX BUG 3.101. AT MODERATE COST,
        !           687: *              OPCODE IRZ (BRANCH IF INTEGER DIVIDE REMAINDER
        !           688: *              ZERO) INTRODUCED.
        !           689: *      C3.107  TO HANDLE POSSIBLE MACHINE DEPENDENCY IN STRING
        !           690: *              HASHING, CHS (COMPLETE HASHING OF STRING) OPCODE
        !           691: *              IS INTRODUCED. PROBABLY A NO-OP ON MOST MACHINES
        !           692: *              - NOT ON THE DEC10.
        !           693: *      C3.108  PROCEDURES PATIN,TFIND,TRACE HAVE BEEN
        !           694: *              MODIFIED TO CONFORM TO THE MINIMAL STANDARD
        !           695: *              CALL AND RETURN REGIME.
        !           696: *      C3.109  SYSFC INTERFACE REVISED SLIGHTLY TO PERMIT
        !           697: *              OSINT TO RETURN A POINTER TO A PRIVATELY
        !           698: *              ALLOCATED FCBLK WHICH SPITBOL WILL RETURN ON
        !           699: *              SUBSEQUENT I/O - SEE SYSFC DOC.
        !           700: *      C3.110  TO REMOVE INCONSISTENCIES IN CALLING SEQUENCES,
        !           701: *              ALL SYS ROUTINES HAVING ACCESS TO A POSSIBLE
        !           702: *              FCBLK HAVE FCBLK PTR OR ZERO IN REG. WA ON ENTRY.
        !           703: *              CHANGE AFFECTS SYSEF, SYSEN, SYSIL, SYSIN,
        !           704: *              SYSOU, SYSRW.
        !           705: *      C3.111  SYSPP BIT ALLOCATED TO PROVIDE
        !           706: *               -NOEXEC OPTION ON ENTRY TO SPITBOL.
        !           707: 
        !           708: 
        !           709: Page 18              S P I T B O L - REVISION HISTORY
        !           710: 
        !           711: *
        !           712: *      DOCUMENTATION REVISIONS
        !           713: *      -----------------------
        !           714: *
        !           715: *      D3.101  NEED TO PRESERVE REGISTERS IN SYSPI, SYSPR,
        !           716: *              SYSRD CALLS WAS OVERSTATED.
        !           717: 
        !           718: 
        !           719: Page 19              S P I T B O L - REVISION HISTORY
        !           720: 
        !           721: *      VERSION 3.0 TO 3.1 (MAR 77)
        !           722: *      ---------------------------
        !           723: *
        !           724: *      BUGS FIXED
        !           725: *      ----------
        !           726: *
        !           727: *      B3.001  REPLACE() COULD FAIL DURING PRE-EVALUATION.
        !           728: *              SPITBOL NOW SIGNALS AN ERROR FOR NULL OR
        !           729: *              UNEQUALLY LONG 2ND AND 3RD ARGUMENTS.
        !           730: *      B3.002  NEGATIVE SECOND ARGUMENTS TO DUPL, LPAD, RPAD
        !           731: *              CAUSED SPITBOL TO SIGNAL AN ERROR. NOW CAUSES
        !           732: *              RETURN OF NULL STRING OR FIRST ARG RESPECTIVELY.
        !           733: *      B3.003  BRN-S USED INSTEAD OF PPM-S IN S$SUB.
        !           734: *      B3.004  ERR USED INSTEAD OF ERB AFTER CMP30.
        !           735: *      B3.005  B$PFC, S$CNV, S$DEF, ARITH AND ARREF KEPT
        !           736: *              INFORMATION ILLEGALLY ABOVE THE STACK TOP.
        !           737: *      B3.006  PRE-EVALUATION OF CONSTANT PARTS OF
        !           738: *              COMPLEX GOTOS WAS ERRONEOUS.
        !           739: *      B3.007  INCORRECT HANDLING OF LABELS COMPILED BY CODE().
        !           740: *      B3.008  THE SINGLE USE OF TRC (IN S$RPL) WAS NOT IN
        !           741: *              ACCORD WITH ITS DEFINITION. SOME TRANSLATIONS OF
        !           742: *              TRC MAY NEED REVISION NOW THAT THE USE
        !           743: *              HAS BEEN BROUGHT INTO LINE WITH DEFINITION.
        !           744: *
        !           745: *      CHANGES
        !           746: *      -------
        !           747: *
        !           748: *      A DEBATE ON A FEW WEAKNESSES IN MINIMAL DESIGN HAS
        !           749: *      BEEN RESOLVED BY INTRODUCING 4 NEW OPCODES.
        !           750: *
        !           751: *      C3.001  NEW MINIMAL OPCODES BMP AND DIM INTRODUCED
        !           752: *              TO AUGMENT INC AND DEC WHICH ARE APPLICABLE
        !           753: *              ONLY TO ADDRESSES.
        !           754: *      C3.002  THE OPCODE SZC (STORE ZERO CHARACTERS) HAD
        !           755: *              A RESTRICTED APPLICABILITY. IT HAS BEEN
        !           756: *              REPLACED BY THE MORE GENERAL ZER (ZEROISE).
        !           757: *      C3.003  FCBLKS MAY BE OPTIONALLY ALLOCATED AS XRBLK-S OR
        !           758: *              XNBLK-S  - SEE SYSFC FOR VITAL INFORMATION.
        !           759: *      C3.004  CONTROL CARD PROCESSING HAS BEEN RECODED.
        !           760: *              -INXXX ALLOWS SPECIFICATION OF STANDARD INPUT
        !           761: *              FILE RECORD LENGTHS OTHER THAN 72 OR 80, SEE ALSO
        !           762: *              SYSRL. -SEQU IS IGNORED UNLESS -IN80 IS IN EFFECT
        !           763: *      C3.005  TO ENABLE EFFICIENT BUFFERING OF CHARS ON
        !           764: *              MACHINES WITHOUT CHAR. HANDLING ORDERS, THE
        !           765: *              CSC (COMPLETE STORE CHARACTERS) INSTRUCTION
        !           766: *              IS INTRODUCED. CURRENT IMPLEMENTATIONS CAN
        !           767: *              TRANSLATE IT AS A NO-OP IF IT IS OF NO BENEFIT.
        !           768: *      C3.006  INTEGERS 0,1,2 ARE TREATED SPECIALLY.
        !           769: *              ICBLKS IN STATIC ARE USED INSTEAD OF
        !           770: *              ALLOCATING SPACE IN DYNAMIC.
        !           771: 
        !           772: 
        !           773: Page 20              S P I T B O L - REVISION HISTORY
        !           774: 
        !           775: *
        !           776: *      VERSION 2.7 (JUNE 76) TO 3.0 (JAN 77)
        !           777: *      -------------------------------------
        !           778: *
        !           779: *      BUGS FIXED
        !           780: *      ----------
        !           781: *
        !           782: *      B2.701  GOES ILLEGAL IF TIMED OUT DURING PROCESSING OF
        !           783: *              DUMP() CALL.
        !           784: *      B2.702  GOES ILLEGAL IF SPITBOL ERROR DETECTED IN ARGS OF
        !           785: *              CODE() OR EVAL(). BUG FIXED SO THAT USER NOW GETS
        !           786: *              A SPITBOL ERROR REPORT (TRAPPABLE BY SETEXIT)
        !           787: *              BEFORE STATEMENT FAILURE.
        !           788: *      B2.703  GOES ILLEGAL IN SOME CIRCUMSTANCES WHEN
        !           789: *              MULTIPLE COMPILATION ERRORS OCCUR IN A STATEMENT
        !           790: *      B2.704  GOES ILLEGAL IF GARBAGE COLLECTOR RUNS OUT OF
        !           791: *              STACK SPACE.
        !           792: *      B2.705  CONTROL CARD PROCESSING INCORRECT FOR CDC 6400.
        !           793: *      B2.706  INCORRECT HANDLING OF MULTIPLE OCCURRENCES OF
        !           794: *              CHARS IN REPLACE 2ND AND 3RD ARGS.
        !           795: *      B2.707  STACK OVERFLOW IN PRE-EVALUATION OF REPLACE IN
        !           796: *              CDC 6400 VERSION.
        !           797: *      B2.708  AN EXPLICIT CALL OF SYSMW WAS CODED IN S$DAT
        !           798: *              INSTEAD OF THE MVW OPCODE.
        !           799: *      B2.709  CALL OF GARBAGE COLLECTOR WHILST DUMPING
        !           800: *              CAUSED HAVOC.
        !           801: *      B2.710  SIZE RESTRICTION ON SPITBOL OBJECTS (SIZE MUST BE
        !           802: *              NUMERICALLY LESS THAN LOWEST DYNAMIC ADDRESS)
        !           803: *              WAS NOT ENFORCED, WITH POTENTIAL FOR CATASTROPHE.
        !           804: *      B2.711  DEFERRED EXPRESSIONS INVOLVING ALTERNATION OR
        !           805: *              NEGATION WERE INCORRECTLY TRANSLATED.
        !           806: *      B2.712  LISTING OF A COMPILATION ERROR AT THE END OF A
        !           807: *              LONG LINE COULD CAUSE COMPILER TO GO ILLEGAL.
        !           808: *      B2.713  INCORRECT -NOFAIL CODE WITH SUCCESS GOTO.
        !           809: 
        !           810: 
        !           811: Page 21              S P I T B O L - REVISION HISTORY
        !           812: 
        !           813: *
        !           814: *
        !           815: *      CHANGES
        !           816: *      -------
        !           817: *
        !           818: *      (IT IS NOT ANTICIPATED THAT MAJOR REVISIONS ON THIS
        !           819: *      SCALE WILL BE FREQUENT).
        !           820: *
        !           821: *      C2.701  DEFAULT VALUE OF ANCHOR KEYWORD IS SET TO 1. THIS
        !           822: *              CONFLICTS WITH SNOBOL4 PRACTICE BUT IS A
        !           823: *              PREFERABLE DEFAULT FOR MOST APPLICATIONS.
        !           824: *      C2.702  IF ERRTYPE IS OUT OF RANGE THE STRING IN KEYWORD
        !           825: *              ERRTEXT IS PRINTED AS THE ERROR MESSAGE.
        !           826: *      C2.703  IF STLIMIT IS EXCEEDED, UP TO 10 MORE STATEMENTS
        !           827: *              MAY BE OBEYED TO PERMIT SETEXIT TRAP TO GAIN
        !           828: *              CONTROL.
        !           829: *      C2.704  THE CONCEPT OF AN INTERACTIVE CHANNEL IS
        !           830: *              INTRODUCED FOR IMPLEMENTATIONS WHERE AN ONLINE
        !           831: *              TERMINAL MAY BE USED FOR SPITBOL. THE STANDARD
        !           832: *              PRINT FILE MAY BE SPECIFIED AS INTERACTIVE IN
        !           833: *              WHICH CASE SHORTER TITLE LINES ARE OUTPUT.
        !           834: *              ALTERNATIVELY COPIES OF COMPILATION AND
        !           835: *              EXECUTION ERRORS ONLY MAY BE SENT TO THIS CHANNEL
        !           836: *      C2.705  PRINTING OF COMPILATION STATISTICS MAY BE
        !           837: *              SUPPRESSED.
        !           838: *      C2.706  PRINTING OF EXECUTION STATISTICS MAY BE
        !           839: *              SUPPRESSED.
        !           840: *      C2.707  EXTENDED OR COMPACT LISTING FORMAT MAY BE
        !           841: *              SELECTED.
        !           842: *      C2.708  AN INITIAL -NOLIST OPTION MAY BE SPECIFIED
        !           843: *              BEFORE COMPILATION STARTS.
        !           844: *      C2.709  TO SPECIFY CHOICES IMPLIED BY C2.704 TO C2.708
        !           845: *              SYSPP INTERFACE IS REVISED AND SYSPI IS DEFINED.
        !           846: *      C2.710  COMPILATION AND EXECUTION TIME STATISTICS
        !           847: *              MESSAGES HAVE BEEN SHORTENED.
        !           848: *      C2.711  THE EXIT FUNCTION AS IN SITBOL IS INTRODUCED
        !           849: *              TO PERMIT SAVING LOAD MODULES - SEE SYSXI, S$EXT.
        !           850: *      C2.712  DIAGNOSTIC ROUTINES SYSGB AND SYSGD HAVE BEEN
        !           851: *              REMOVED. THEY WERE USEFUL IN THE EARLY DEBUGGING
        !           852: *              DAYS BUT HAVE FALLEN INTO DISUSE NOW.
        !           853: *      C2.713  SZC MAY HAVE AN OPERAND OF TYPE OPN INSTEAD OF
        !           854: *              TYPE OPW
        !           855: *      C2.714  INPUT/OUTPUT ASSOCIATION INTERFACE HAS BEEN
        !           856: *              REVISED. SYSIF,SYSOF HAVE BEEN CONSOLIDATED INTO
        !           857: *              THE NEW SYSTEM ROUTINE , SYSIO , AND THE
        !           858: *              SPECIFICATION OF SYSFC HAS BEEN SLIGHTLY CHANGED.
        !           859: *      C2.715  CONFIGURATION PARAMETER MXLEN HAS BEEN WITHDRAWN
        !           860: *              AND THE MAXIMUM SIZE OF A SPITBOL OBJECT WHICH
        !           861: *              WAS FORMERLY FIXED AT SPITBOL COMPILE TIME BY
        !           862: *              REFERENCE TO IT MAY NOW BE SPECIFIED AS A RUN
        !           863: *              TIME OPTION BY PLACING A VALUE IN WC BEFORE ENTRY
        !           864: *              TO SPITBOL. (SEE COMMENT ON DYNAMIC AREA IN
        !           865: *              BASIC INFORMATION SECTION).
        !           866: *      C2.716  A FUNCTION, HOST, IS INTRODUCED WHICH YIELDS
        !           867: *              INFORMATION ABOUT THE HOST MACHINE - SEE SYSHS
        !           868: *              AND S$HST.
        !           869: 
        !           870: 
        !           871: Page 22              S P I T B O L - REVISION HISTORY
        !           872: 
        !           873: *
        !           874: *      DOCUMENTATION REVISIONS
        !           875: *      -----------------------
        !           876: *
        !           877: *      D2.701  THE DESCRIPTION OF MVC HAS BEEN REVISED TO
        !           878: *              REFLECT THE FACT THAT SOME SPITBOL CODE SEQUENCES
        !           879: *              RELY ON ON MVC NOT DESTROYING WB. MINOR CHANGES
        !           880: *              HAVE BEEN MADE TO MWB AND MVW DESCRIPTIONS TO
        !           881: *              EMPHASISE SIMILARITIES IN THE IMPLICIT LOOPS OF
        !           882: *              THESE ORDERS.
        !           883: *      D2.702  DESCRIPTIONS OF DVI AND RMI HAVE BEEN CLARIFIED.
        !           884: *      D2.703  IMPLEMENTATION OF RSX,LSX,CEQ,CGE,CGT,CHI,CLO,CLT
        !           885: *              IS OPTIONAL AT PRESENT SINCE THEY ARE CURRENTLY
        !           886: *              UNUSED. THEIR USE IN LATER VERSIONS IS NOT
        !           887: *              EXCLUDED.
        !           888: *      D2.704  IMPOSSIBILITY OF USING STACK FOR RETURN LINKS OF
        !           889: *              N TYPE PROCEDURES IS EMPHASISED.
        !           890: *      D2.705  NOTATION (XL),(WC) ETC IN LANGUAGE DESCRIPTION IS
        !           891: *              CLARIFIED.
        !           892: *      D2.706  DOCUMENTATION OF SYSFC, SYSIO HAS BEEN IMPROVED.
        !           893: *      D2.707  OPCODE DESCRIPTIONS ARE CROSS REFERENCED FROM
        !           894: *              THE ALPHABETICAL OPCODE LIST.
        !           895: *      D2.708  GENERAL DESCRIPTION OF COMPILER HAS BEEN MOVED TO
        !           896: *              THE START OF THE COMPILER PROPER.
        !           897: *      D2.709  DEFINITIONS OF ENVIRONMENT PARAMETERS HAVE BEEN
        !           898: *              PUT NEAR THE FRONT OF THE DEFINITIONS SECTION.
        !           899: 
        !           900: 
        !           901: Page 23              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !           902: 
        !           903: *      THE FOLLOWING SECTIONS DESCRIBE THE IMPLEMENTATION
        !           904: *      LANGUAGE ORIGINALLY DEVELOPED FOR SPITBOL BUT NOW MORE
        !           905: *      WIDELY USED. MINIMAL IS AN ASSEMBLY LANGUAGE FOR AN
        !           906: *      IDEALISED MACHINE WHICH IS NOW DESCRIBED.
        !           907: *
        !           908: *      SECTION 1 - CONFIGURATION PARAMETERS
        !           909: *
        !           910: *      THERE ARE SEVERAL PARAMETERS WHICH MAY VARY WITH THE
        !           911: *      TARGET MACHINE. THE MACRO-PROGRAM IS INDEPENDENT OF THE
        !           912: *      ACTUAL DEFINITIONS OF THESE PARAMETERS.
        !           913: *      THE DEFINITIONS OF THESE PARAMETERS ARE SUPPLIED BY
        !           914: *      THE TRANSLATION PROGRAM TO MATCH THE TARGET MACHINE.
        !           915: *
        !           916: *      CFP$A                 NUMBER OF DISTINCT CHARACTERS IN
        !           917: *                            INTERNAL ALPHABET IN THE RANGE
        !           918: *                            64 LE CFP$A LE MXLEN.
        !           919: *
        !           920: *      CFP$B                 NUMBER OF BAUS IN A WORD WHERE A
        !           921: *                            BAU IS THE AMOUNT OF STORAGE
        !           922: *                            ADDRESSED BY THE LEAST SIGNIFICANT
        !           923: *                            ADDRESS BIT (SEE NEXT SECTION).
        !           924: *
        !           925: *      CFP$C                 NUMBER OF CHARACTERS WHICH CAN
        !           926: *                            BE STORED IN A SINGLE WORD.
        !           927: *
        !           928: *      CFP$F                 BAU OFFSET FROM START OF A STRING
        !           929: *                            BLOCK TO THE FIRST CHARACTER.
        !           930: *                            DEPENDS BOTH ON TARGET MACHINE AND
        !           931: *                            STRING DATA STRUCTURE. SEE PLC,PSC.
        !           932: *
        !           933: *      CFP$I                 NUMBER OF WORDS IN A SIGNED
        !           934: *                            INTEGER CONSTANT
        !           935: *
        !           936: *      CFP$M                 THE LARGEST POSITIVE INTEGER
        !           937: *                            OF FORM 2**N - 1 WHICH CAN BE
        !           938: *                            STORED IN A SINGLE WORD. N WILL
        !           939: *                            OFTEN BE CFP$N BUT NEED NOT BE.
        !           940: *
        !           941: *
        !           942: *      CFP$N                 NUMBER OF BITS WHICH CAN BE STORED
        !           943: *                            IN A ONE WORD BIT STRING.
        !           944: *
        !           945: *      CFP$R                 NUMBER OF WORDS IN A REAL CONSTANT
        !           946: *
        !           947: *      CFP$S                 NUMBER OF SIGNIFICANT DIGITS TO
        !           948: *                            BE OUTPUT IN CONVERSION OF A REAL
        !           949: *                            QUANTITY. THE INTEGER CONSISTING OF
        !           950: *                            THIS NUMBER OF 9S MUST NOT BE TOO
        !           951: *                            LARGE TO FIT IN THE INTEGER ACCUM.
        !           952: *
        !           953: *      CFP$U                 UPPER BOUND ON NUMBER OF CHARS IN
        !           954: *                            THE SUBSET USED IN BSW SWITCHES IN
        !           955: *                            RANGE 64 LE CFP$U LE CFP$A. TYPICAL
        !           956: *                            FOR ASCII IS CFP$U, 128  CFP$A, 256
        !           957: *
        !           958: *      CFP$X                 NUMBER OF DIGITS IN REAL EXPONENT
        !           959: 
        !           960: 
        !           961: Page 24              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !           962: 
        !           963: *
        !           964: *      SECTION 2 - MEMORY
        !           965: *
        !           966: *      MEMORY IS ORGANIZED INTO WORDS WHICH EACH CONTAIN CFP$B
        !           967: *      BAUS. THE REASONING BEHIND THIS IS THAT MINIMAL PROGRAMS
        !           968: *      SHOULD RUN EITHER ON MACHINES HAVING BYTE ADDRESSING
        !           969: *      OR THOSE HAVING WORD ADDRESSING SCHEMES. MINIMAL MOV
        !           970: *      INSTRUCTIONS ALWAYS OPERATE ON WORD SIZED OPERANDS OR,
        !           971: *      IN THE CASE OF THE CHARACTER OPCODES, ON CHARACTER
        !           972: *      SIZED OPERANDS. NOWHERE IN MINIMAL ARE BYTE SIZED
        !           973: *      OPERANDS PERMITTED. HOWEVER SINCE ADDRESSING ON BYTE
        !           974: *      MACHINES MUST BE CATERED FOR, THE CONCEPT OF BASIC
        !           975: *      ADDRESSABLE UNIT, HENCEFORTH REFERRED TO AS BAU, IS USED
        !           976: *      A BAU IS THAT COLLECTION OF MEMORY BITS WHICH
        !           977: *      CORRESPONDS TO A CHANGE OF UNITY IN THE LEAST SIGNIFICANT
        !           978: *      BIT OF AN ADDRESS. ON A BYTE MACHINE, A BAU WILL
        !           979: *      CORRESPOND TO A BYTE AND ON A WORD MACHINE TO A WORD.
        !           980: *      BY CONVENTION ADDRESSES ARE HELD IN BAU FORM (SINCE A
        !           981: *      BAU IS A BASIC ADDRESSING UNIT). HOWEVER SOME OF THE
        !           982: *      OPERAND FORMATS PERMIT ADDRESSING WITH WORD
        !           983: *      OFFSETS PAST A BAU ADDRESS IN A REGISTER. SINCE
        !           984: *      MEMORY ACCESSING IS IN TERMS OF WORDS, CARE IS NEEDED
        !           985: *      FOR EXAMPLE WHEN WORD COUNTS ARE COMPUTED FROM ADDRESSES
        !           986: *      AS A BAU DOES NOT NECESSARILY COINCIDE WITH A WORD. ON
        !           987: *      THE OTHER HAND, THE BLOCK MOVE ORDER, MVW, REQUIRES A
        !           988: *      COUNT IN BAUS. THE DEFINITIONS OF THE MINIMAL OPCODES
        !           989: *      SHOULD BE READ WITH CAREFUL ATTENTION TO THEIR ADDRESSING
        !           990: *      IMPLICATIONS.
        !           991: *      FOR WORD MACHINES CFP$B, WHICH IS A CONFIGURATION
        !           992: *      PARAMETER, WILL BE ONE IN WHICH CASE WORDS AND BAUS ARE
        !           993: *      IDENTICAL. TO EACH WORD CORRESPONDS AN ADDRESS IN BAUS,
        !           994: *      A NON-NEGATIVE QUANTITY WHICH IS A MULTIPLE OF CFP$B.
        !           995: *      DATA IS ORGANIZED INTO WORDS AS FOLLOWS.
        !           996: *
        !           997: *      1)   A SIGNED INTEGER VALUE OCCUPIES CFP$I CONSECUTIVE
        !           998: *           WORDS (CFP$I IS A CONFIGURATION PARAMETER).
        !           999: *           THE RANGE MAY INCLUDE MORE NEGATIVE NUMBERS THAN
        !          1000: *           POSITIVE (E.G. THE TWOS COMPLEMENT REPRESENTATION).
        !          1001: *
        !          1002: *      2)   A SIGNED REAL VALUE OCCUPIES CFP$R CONSECUTIVE
        !          1003: *           WORDS. (CFP$R IS A CONFIGURATION PARAMETER).
        !          1004: *
        !          1005: *      3)   CFP$C CHARACTERS MAY BE STORED IN A SINGLE WORD
        !          1006: *           (CFP$C IS A CONFIGURATION PARAMETER).
        !          1007: *
        !          1008: *      4)   A BIT STRING CONTAINING CFP$N BITS CAN BE STORED IN
        !          1009: *           A SINGLE WORD (CFP$N IS A CONFIGURATION PARAMETER).
        !          1010: 
        !          1011: 
        !          1012: Page 25              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          1013: 
        !          1014: *
        !          1015: *      5)   A WORD CAN CONTAIN A NON-NEGATIVE INTEGER VALUE IN
        !          1016: *           THE RANGE (0 LE N LE CFP$M). THESE INTEGER VALUES
        !          1017: *           MAY REPRESENT ADDRESSES OF OTHER WORDS AND SOME OF
        !          1018: *           THE INSTRUCTIONS USE THIS FACT TO PROVIDE INDEXING
        !          1019: *           AND INDIRECTION FACILITIES.
        !          1020: *
        !          1021: *      6)   PROGRAM INSTRUCTIONS OCCUPY WORDS IN AN UNDEFINED
        !          1022: *           MANNER. DEPENDING ON THE ACTUAL IMPLEMENTATION,
        !          1023: *           INSTRUCTIONS MAY OCCUPY SEVERAL WORDS, OR PART OF
        !          1024: *           A WORD, OR EVEN BE SPLIT OVER WORD BOUNDARIES.
        !          1025: *
        !          1026: *      THE FOLLOWING REGIONS OF MEMORY ARE AVAILABLE TO THE
        !          1027: *      PROGRAM. EACH REGION CONSISTS OF A SERIES OF WORDS WITH
        !          1028: *      CONSECUTIVE ADDRESSES.
        !          1029: *
        !          1030: *      1)   CONSTANT SECTION           ASSEMBLED CONSTANTS
        !          1031: *      2)   WORKING STORAGE SECTION    ASSEMBLED WORK AREAS
        !          1032: *      3)   PROGRAM SECTION            ASSEMBLED INSTRUCTIONS
        !          1033: *      4)   STACK AREA                 ALLOCATED STACK AREA
        !          1034: *      5)   DATA AREA                  ALLOCATED DATA AREA
        !          1035: *
        !          1036: *      SECTION 3 - REGISTERS
        !          1037: *
        !          1038: *      THERE ARE THREE INDEX REGISTERS CALLED XR,XL,XS. IN
        !          1039: *      ADDITION XL MAY SOMETIMES BE REFERRED TO BY THE ALIAS
        !          1040: *      OF XT - SEE SECTION 4. ANY OF THE ABOVE
        !          1041: *      REGISTERS MAY HOLD A POSITIVE INTEGER IN THE RANGE
        !          1042: *      (0 LE N LE CFP$M). WHEN THE INDEX REGISTER IS USED FOR
        !          1043: *      INDEXING PURPOSES, THIS MUST BE AN APPROPRIATE ADDRESS
        !          1044: *      IN BAUS.
        !          1045: *      XS IS SPECIAL IN THAT IT IS USED TO POINT TO THE TOP
        !          1046: *      ITEM OF A STACK IN MEMORY. THE STACK MAY BUILD UP OR
        !          1047: *      DOWN IN MEMORY.SINCE IT IS REQUIRED THAT XS POINTS TO THE
        !          1048: *      STACK TOP BUT ACCESS TO ITEMS BELOW THE TOP IS PERMITTED,
        !          1049: *      REGISTERS XS AND XT MAY BE USED WITH SUITABLE OFFSETS
        !          1050: *      TO INDEX STACKED ITEMS. ONLY XS AND XT MAY BE USED FOR
        !          1051: *      THIS PURPOSE SINCE THE DIRECTION OF THE OFFSET IS
        !          1052: *      TARGET MACHINE DEPENDENT. XT IS A SYNONYM FOR XL
        !          1053: *      WHICH THEREFORE CANNOT BE USED IN CODE SEQUENCES
        !          1054: *      REFERENCING XT.
        !          1055: *      THE STACK IS USED FOR S-R LINKAGE AND TEMPORARY
        !          1056: *      DATA STORAGE FOR WHICH THE STACK ARRANGEMENT IS SUITABLE.
        !          1057: *      XR,XL CAN ALSO CONTAIN A CHARACTER POINTER IN CONJUNCTION
        !          1058: *      WITH THE CHARACTER INSTRUCTIONS (SEE DESCRIPTION OF PLC).
        !          1059: 
        !          1060: 
        !          1061: Page 26              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          1062: 
        !          1063: *
        !          1064: *      THERE ARE THREE WORK REGISTERS CALLED WA,WB,WC WHICH
        !          1065: *      CAN CONTAIN ANY DATA ITEM WHICH CAN BE STORED IN A
        !          1066: *      SINGLE MEMORY WORD. IN FACT, THE WORK REGISTERS ARE JUST
        !          1067: *      LIKE MEMORY LOCATIONS EXCEPT THAT THEY HAVE NO ADDRESSES
        !          1068: *      AND ARE REFERENCED IN A SPECIAL WAY BY THE INSTRUCTIONS.
        !          1069: *      NOTE THAT REGISTERS WA,WB HAVE SPECIAL USES IN CONNECTION
        !          1070: *      WITH THE CVD, CVM, MVC, MVW, MWB, CMC, TRC INSTRUCTIONS.
        !          1071: *      REGISTER WC MAY OVERLAP THE INTEGER ACCUMULATOR (IA) IN
        !          1072: *      SOME IMPLEMENTATIONS. THUS ANY OPERATION CHANGING THE
        !          1073: *      VALUE IN WC LEAVES (IA) UNDEFINED AND VICE VERSA
        !          1074: *      EXCEPT AS NOTED IN THE FOLLOWING RESTRICTION ON SIMPLE
        !          1075: *      DUMP/RESTORE OPERATIONS.
        !          1076: *
        !          1077: *          RESTRICTION
        !          1078: *          -----------
        !          1079: *
        !          1080: *      IF IA AND WC OVERLAP THEN
        !          1081: *          STI  IASAV
        !          1082: *          LDI  IASAV
        !          1083: *      DOES NOT CHANGE WC, AND
        !          1084: *          MOV  WC,WCSAV
        !          1085: *          MOV  WCSAV,WC
        !          1086: *      DOES NOT CHANGE IA.
        !          1087: *
        !          1088: *
        !          1089: *
        !          1090: *      THERE IS AN INTEGER ACCUMULATOR (IA) WHICH IS CAPABLE OF
        !          1091: *      HOLDING A SIGNED INTEGER VALUE (CFP$I WORDS LONG).
        !          1092: *      REGISTER WC MAY OVERLAP THE INTEGER ACCUMULATOR (IA) IN
        !          1093: *      SOME IMPLEMENTATIONS. THUS ANY OPERATION CHANGING THE
        !          1094: *      VALUE IN WC LEAVES (IA) UNDEFINED AND VICE VERSA
        !          1095: *      EXCEPT AS NOTED IN THE ABOVE RESTRICTION ON SIMPLE
        !          1096: *      DUMP/RESTORE OPERATIONS.
        !          1097: *
        !          1098: *
        !          1099: *
        !          1100: *      THERE IS A SINGLE REAL ACCUMULATOR (RA) WHICH CAN HOLD
        !          1101: *      ANY REAL VALUE AND IS COMPLETELY SEPARATE FROM ANY OF
        !          1102: *      THE OTHER REGISTERS OR PROGRAM ACCESSIBLE LOCATIONS.
        !          1103: *
        !          1104: *
        !          1105: *
        !          1106: *      THE CODE POINTER REGISTER (CP) IS A SPECIAL INDEX
        !          1107: *      REGISTER FOR USE IN IMPLEMENTATIONS OF INTERPRETORS.
        !          1108: *      IT IS USED TO CONTAIN A PSEUDO-CODE POINTER AND CAN
        !          1109: *      ONLY BE AFFECTED BY ICP, LCP, SCP AND LCW INSTRUCTIONS.
        !          1110: 
        !          1111: 
        !          1112: Page 27              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          1113: 
        !          1114: *      SECTION 4 - THE STACK
        !          1115: *
        !          1116: *      THE FOLLOWING NOTES ARE TO GUIDE BOTH IMPLEMENTORS OF
        !          1117: *      SYSTEMS WRITTEN IN MINIMAL AND MINIMAL PROGRAMMERS IN
        !          1118: *      DEALING WITH STACK MANIPULATION. IMPLEMENTATION OF A
        !          1119: *      DOWNWARDS BUILDING STACK IS EASIEST AND IN GENERAL IS
        !          1120: *      TO BE PREFERRED, IN WHICH CASE IT IS MERELY NECESSARY TO
        !          1121: *      CONSIDER XT AS AN ALTERNATIVE NAME FOR XL.
        !          1122: *
        !          1123: *      THE MINIMAL VIRTUAL MACHINE INCLUDES A STACK AND HAS
        !          1124: *      OPERAND FORMATS -(XS) AND (XS)+ FOR PUSHING AND POPPING
        !          1125: *      ITEMS WITH AN IMPLICATION THAT THE STACK BUILDS DOWN IN
        !          1126: *      MEMORY (A D-STACK). HOWEVER ON SOME TARGET MACHINES IT IS
        !          1127: *      BETTER FOR THE STACK TO BUILD UP (A U-STACK).
        !          1128: *      A STACK ADDRESSED ONLY BY PUSH AND POP OPERATIONS CAN
        !          1129: *      BUILD IN EITHER DIRECTION WITH NO COMPLICATION BUT
        !          1130: *      SUCH A PURE SCHEME OF STACK ACCESS PROVES RESTRICTIVE.
        !          1131: *      HENCE IT IS PERMITTED TO ACCESS BURIED ITEMS USING AN
        !          1132: *      INTEGER OFFSET PAST THE INDEX REGISTER POINTING TO THE
        !          1133: *      STACK TOP. ON TARGET MACHINES THIS OFFSET WILL BE
        !          1134: *      POSITIVE/NEGATIVE FOR D-STACKS/U-STACKS AND THIS MUST
        !          1135: *      BE ALLOWED FOR IN THE TRANSLATION.
        !          1136: *      A FURTHER RESTRICTION IS THAT AT NO TIME MAY AN ITEM BE
        !          1137: *      PLACED ABOVE THE STACK TOP. FOR SOME OPERATIONS THIS
        !          1138: *      MAKES IT CONVENIENT TO ADVANCE THE STACK POINTER AND THEN
        !          1139: *      ADDRESS ITEMS BELOW IT USING A SECOND INDEX REGISTER.
        !          1140: *      THE PROBLEM OF SIGNED OFFSETS PAST SUCH A REGISTER THEN
        !          1141: *      ARISES. TO DISTINGUISH STACK OFFSETS, WHICH IN SOME
        !          1142: *      IMPLEMENTATIONS MAY BE NEGATIVE, FROM NON-STACK OFFSETS
        !          1143: *      WHICH ARE INVARIABLY POSITIVE, XT, AN ALIAS OR
        !          1144: *      SYNONYM FOR XL IS USED. FOR A U-STACK IMPLEMENTATION, THE
        !          1145: *      MINIMAL TRANSLATOR SHOULD NEGATE THE SIGN OF OFFSETS
        !          1146: *      APPLIED TO BOTH (XS) AND (XT).
        !          1147: *      PROGRAMMERS SHOULD NOTE THAT SINCE XT IS NOT A
        !          1148: *      SEPARATE REGISTER, XL SHOULD NOT BE USED IN CODE WHERE
        !          1149: *      XT IS REFERENCED. OTHER MODIFICATIONS NEEDED IN U-STACK
        !          1150: *      TRANSLATIONS ARE IN THE ADD, SUB, ICA, DCA OPCODES
        !          1151: *      APPLIED TO XS, XT. FOR EXAMPLE
        !          1152: *
        !          1153: *      MINIMAL           D-STACK TRANS.  U-STACK TRANS.
        !          1154: *
        !          1155: *      MOV  WA,-(XS)     SBI  XS,1       ADI  XS,1
        !          1156: *                        STO  WA,(XS)    STO  WA,(XS)
        !          1157: *      MOV  (XT)+,WC     LOD  WC,(XL)    LOD  WC,(XL)
        !          1158: *                        ADI  XL,1       SBI  XL,1
        !          1159: *      ADD  =SEVEN,XS    ADI  XS,7       SBI  XS,7
        !          1160: *      MOV  2(XT),WA     LOD  WA,2(XL)   LOD  WA,-2(XL)
        !          1161: *      ICA  XS           ADI  XS,1       SBI  XS,1
        !          1162: *
        !          1163: *      NOTE THAT FORMS SUCH AS
        !          1164: *      MOV  -(XS),WA
        !          1165: *      ADD  WA,(XS)+
        !          1166: *      ARE ILLEGAL, SINCE THEY ASSUME INFORMATION STORAGE
        !          1167: *      ABOVE THE STACK TOP.
        !          1168: 
        !          1169: 
        !          1170: Page 28              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          1171: 
        !          1172: *      SECTION 5 - INTERNAL CHARACTER SET
        !          1173: *
        !          1174: *      THE INTERNAL CHARACTER SET IS REPRESENTED BY A SET OF
        !          1175: *      CONTIGUOUS CODES FROM 0 TO CFP$A-1. THE CODES FOR THE
        !          1176: *      DIGITS 0-9 MUST BE CONTIGUOUS AND IN SEQUENCE. OTHER
        !          1177: *      THAN THIS, THERE ARE NO RESTRAINTS.
        !          1178: *
        !          1179: *      THE FOLLOWING SYMBOLS ARE AUTOMATICALLY DEFINED TO HAVE
        !          1180: *      THE VALUE OF THE CORRESPONDING INTERNAL CHARACTER CODE.
        !          1181: *
        !          1182: *      CH$LA                 LETTER A
        !          1183: *      CH$LB                 LETTER B
        !          1184: *      .                     .
        !          1185: *      CH$L$                 LETTER Z
        !          1186: *
        !          1187: *      CH$D0                 DIGIT 0
        !          1188: *      .                     .
        !          1189: *      CH$D9                 DIGIT 9
        !          1190: *
        !          1191: *      CH$AM                 AMPERSAND
        !          1192: *      CH$AS                 ASTERISK
        !          1193: *      CH$AT                 AT
        !          1194: *      CH$BB                 LEFT BRACKET
        !          1195: *      CH$BL                 BLANK
        !          1196: *      CH$BR                 VERTICAL BAR
        !          1197: *      CH$CL                 COLON
        !          1198: *      CH$CM                 COMMA
        !          1199: *      CH$DL                 DOLLAR SIGN
        !          1200: *      CH$DT                 DOT (PERIOD)
        !          1201: *      CH$DQ                 DOUBLE QUOTE
        !          1202: *      CH$EQ                 EQUAL SIGN
        !          1203: *      CH$EX                 EXCLAMATION MARK
        !          1204: *      CH$MN                 MINUS
        !          1205: *      CH$NM                 NUMBER SIGN
        !          1206: *      CH$NT                 NOT
        !          1207: *      CH$PC                 PERCENT
        !          1208: *      CH$PL                 PLUS
        !          1209: *      CH$PP                 LEFT PAREN
        !          1210: *      CH$RB                 RIGHT BRACKET
        !          1211: *      CH$RP                 RIGHT PAREN
        !          1212: *      CH$QU                 QUESTION MARK
        !          1213: *      CH$SL                 SLASH
        !          1214: *      CH$SM                 SEMI-COLON
        !          1215: *      CH$SQ                 SINGLE QUOTE
        !          1216: *      CH$UN                 UNDERLINE
        !          1217: 
        !          1218: 
        !          1219: Page 29              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          1220: 
        !          1221: *
        !          1222: *      THE FOLLOWING OPTIONAL SYMBOLS ARE INCORPORATED
        !          1223: *      BY DEFINING THE CONDITIONAL ASSEMBLY SYMBOL NAMED.
        !          1224: *
        !          1225: *      26 SHIFTED LETTERS INCORPORATED BY DEFINING .CASL
        !          1226: *
        !          1227: *      CH$$A                 SHIFTED A
        !          1228: *      CH$$B                 SHIFTED B
        !          1229: *      .                     .
        !          1230: *      CH$$$                 SHIFTED Z
        !          1231: *
        !          1232: *      CH$HT                 HORIZONTAL TAB - DEFINE .CAHT
        !          1233: *      CH$VT                 VERTICAL TAB   - DEFINE .CAVT
        !          1234: *
        !          1235: *      CASE OF SPITBOL SOURCE FILES
        !          1236: *
        !          1237: *      ORIGINALLY, SNOBOL4 AND SPITBOL CATERED FOR THE ERA OF
        !          1238: *      CARD PUNCH WITH FIXED LENGTH RECORDS IN UPPER CASE ONLY.
        !          1239: *      MORE RECENT SYSTEMS HAVE READY USE OF LOWER CASE CHARS
        !          1240: *      IN THE ASCII OR EBCDIC SET AND WITH SOME SYSTEMS (NOTABLY
        !          1241: *      UNIX), USE OF UPPER CASE CHARS IS NOT IDIOMATIC. BY
        !          1242: *      SUITABLE CHOICE OF CONDITIONAL ASSEMBLY OPTIONS, A
        !          1243: *      SYSTEM CAN BE TAILORED TO SUIT THE PREVAILING STYLE
        !          1244: *      OF THE TARGET MACHINE. ADDITIONALLY SOME USER CONTROL IS
        !          1245: *      AVAILABLE BY USE OF CONTROL CARDS SO THAT CASE MAY BE
        !          1246: *      CONSIDERED SIGNIFICANT OR NOT AS DESIRED.
        !          1247: *      THE SPITBOL SOURCE ASSUMES THAT LOWER CASE LETTERS ARE
        !          1248: *      RELATED TO UPPER BY THE ADDITION OF A CONSTANT OFFSET.
        !          1249: *      IF THIS IS NOT SO, DEFINE TRANSLATIONS FOR CLU, CUL
        !          1250: *      OPCODES AND DEFINE CONDITIONAL ASSEMBLY SYMBOL .CSCV .
        !          1251: 
        !          1252: 
        !          1253: Page 30              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          1254: 
        !          1255: *
        !          1256: *      SECTION 6 - CONDITIONAL ASSEMBLY FEATURES
        !          1257: *
        !          1258: *      SOME FEATURES OF THE INTERPRETER ARE APPLICABLE TO ONLY
        !          1259: *      CERTAIN TARGET MACHINES. THEY MAY BE INCORPORATED OR
        !          1260: *      OMITTED BY USE OF CONDITIONAL ASSEMBLY. THE FULL
        !          1261: *      FORM OF A CONDITION IS -
        !          1262: *      .IF    CONDITIONAL ASSEMBLY SYMBOL    (CAS)
        !          1263: *      .THEN
        !          1264: *             MINIMAL STATEMENTS1   (MS1)
        !          1265: *      .ELSE
        !          1266: *             MINIMAL STATEMENTS2   (MS2)
        !          1267: *      .FI
        !          1268: *      THE FOLLOWING RULES APPLY
        !          1269: *      1.   THE DIRECTIVES .IF, .THEN, .ELSE, .FI MUST
        !          1270: *           START IN COLUMN 1.
        !          1271: *      2.   THE CONDITIONAL ASSEMBLY SYMBOL MUST START WITH A
        !          1272: *           DOT IN COLUMN 8 FOLLOWED BY 4 LETTERS OR DIGITS E.G.
        !          1273: *              .CA$1
        !          1274: *      3.   .THEN IS REDUNDANT AND MAY BE OMITTED IF WISHED.
        !          1275: *      4.   MS1, MS2 ARE ARBITRARY SEQUENCES OF MINIMAL
        !          1276: *           STATEMENTS EITHER OF WHICH MAY BE NULL OR MAY
        !          1277: *           CONTAIN FURTHER CONDITIONS.
        !          1278: *      5.   IF MS2 IS OMITTED, .ELSE MAY ALSO BE OMITTED.
        !          1279: *      6.   .FI IS REQUIRED.
        !          1280: *      7.   CONDITIONS MAY BE NESTED TO A DEPTH DETERMINED
        !          1281: *           BY THE TRANSLATOR (NOT LESS THAN 20, SAY).
        !          1282: *
        !          1283: *      SELECTION OF THE ALTERNATIVES MS1, MS2 IS BY MEANS OF THE
        !          1284: *      DEFINE AND UNDEFINE DIRECTIVES OF FORM -
        !          1285: *      .DEF   CAS
        !          1286: *      .UNDEF CAS
        !          1287: *      WHICH OBEY RULES 1. AND 2. ABOVE AND MAY OCCUR AT ANY
        !          1288: *      POINT IN A MINIMAL PROGRAM, INCLUDING WITHIN A CONDITION.
        !          1289: *      MULTIPLY DEFINING A SYMBOL IS AN ERROR.
        !          1290: *      UNDEFINING A SYMBOL WHICH IS NOT DEFINED IS NOT AN ERROR.
        !          1291: *
        !          1292: *      THE EFFECT IS THAT IF A SYMBOL IS CURRENTLY DEFINED,
        !          1293: *      THEN IN ANY CONDITION DEPENDING ON IT, MS1 WILL BE
        !          1294: *      PROCESSED AND MS2 OMITTED. CONVERSELY IF IT IS UNDEFINED,
        !          1295: *      MS1 WILL BE OMITTED AND MS2 PROCESSED.
        !          1296: *      NESTING OF CONDITIONS IS SUCH THAT CONDITIONS
        !          1297: *      IN A SECTION NOT SELECTED FOR PROCESSING MUST NOT BE
        !          1298: *      EVALUATED. NESTED CONDITIONS MUST REMEMBER THEIR
        !          1299: *      ENVIRONMENT WHILST BEING PROCESSED. EFFECTIVELY THIS
        !          1300: *      IMPLIES USE OF A SCHEME BASED ON A STACK WITH .IF, .FI
        !          1301: *      MATCHING BY THE CONDITION PROCESSOR OF THE TRANSLATOR.
        !          1302: 
        !          1303: 
        !          1304: Page 31              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          1305: 
        !          1306: *
        !          1307: *      SECTION 7 - OPERAND FORMATS
        !          1308: *
        !          1309: *      THE FOLLOWING SECTION DESCRIBES THE VARIOUS POSSIBILITIES
        !          1310: *      FOR OPERANDS OF INSTRUCTIONS AND ASSEMBLY OPERATIONS.
        !          1311: *
        !          1312: *      01   INT              UNSIGNED INTEGER LE CFP$M
        !          1313: *      02   DLBL             SYMBOL DEFINED IN DEFINITIONS SEC
        !          1314: *      03   WLBL             LABEL IN WORKING STORAGE SECTION
        !          1315: *      04   CLBL             LABEL IN CONSTANT SECTION
        !          1316: *      05   ELBL             PROGRAM SECTION ENTRY LABEL
        !          1317: *      06   PLBL             PROGRAM SECTION LABEL (NON-ENTRY)
        !          1318: *      07   X                ONE OF THE THREE INDEX REGISTERS
        !          1319: *      08   W                ONE OF THE THREE WORK REGISTERS
        !          1320: *      09   (X)              LOCATION INDEXED BY X
        !          1321: *      10   (X)+             LIKE (X) BUT POST INCREMENT X
        !          1322: *      11   -(X)             LIKE (X) BUT PREDECREMENT X
        !          1323: *      12   INT(X)           LOCATION INT WORDS BEYOND ADDR IN X
        !          1324: *      13   DLBL(X)          LOCATION DLBL WORDS PAST ADDR IN X
        !          1325: *      14   CLBL(X)          LOCATION (X) BAUS BEYOND CLBL
        !          1326: *      15   WLBL(X)          LOCATION (X) BAUS BEYOND WLBL
        !          1327: *      16   INTEGER          SIGNED INTEGER (DIC)
        !          1328: *      17   REAL             SIGNED REAL (DRC)
        !          1329: *      18   =DLBL            LOCATION CONTAINING DAC DLBL
        !          1330: *      19   *DLBL            LOCATION CONTAINING DAC CFP$B*DLBL
        !          1331: *      20   =WLBL            LOCATION CONTAINING DAC WLBL
        !          1332: *      21   =CLBL            LOCATION CONTAINING DAC CLBL
        !          1333: *      22   =ELBL            LOCATION CONTAINING DAC ELBL
        !          1334: *      23   PNAM             PROCEDURE LABEL (ON PRC INSTRUC)
        !          1335: *      24   EQOP             OPERAND FOR EQU INSTRUCTION
        !          1336: *      25   PTYP             PROCEDURE TYPE (SEE PRC)
        !          1337: *      26   TEXT             ARBITRARY TEXT (ERB,ERR,TTL)
        !          1338: *      27   DTEXT            DELIMITED TEXT STRING (DTC/DDC)
        !          1339: *      28   RNAM             ROUTINE NAME (ON AN RTN INSTRN)
        !          1340: *      29   GLBL             GLOBAL LABEL (SEE GLB)
        !          1341: *
        !          1342: *      THE NUMBERS IN THE ABOVE LIST ARE USED IN SUBSEQUENT
        !          1343: *      DESCRIPTION AND IN SOME OF THE MINIMAL TRANSLATORS.
        !          1344: 
        !          1345: 
        !          1346: Page 32              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          1347: 
        !          1348: *
        !          1349: *      OPERAND FORMATS (CONTINUED)
        !          1350: *
        !          1351: *      THE FOLLOWING SPECIAL SYMBOLS REFER TO A COLLECTION OF
        !          1352: *      THE LISTED POSSIBILITIES
        !          1353: *
        !          1354: *      VAL  01,02                      PREDEFINED VALUE
        !          1355: *
        !          1356: *           VAL IS USED TO REFER TO A PREDEFINED ONE WORD
        !          1357: *           INTEGER VALUE IN THE RANGE 0 LE N LE CFP$M.
        !          1358: *
        !          1359: *      REG  07,08                      REGISTER
        !          1360: *
        !          1361: *           REG IS USED TO DESCRIBE AN OPERAND WHICH CAN BE
        !          1362: *           ANY OF THE REGISTERS (XL,XR,XS,XT,WA,WB,WC). SUCH
        !          1363: *           AN OPERAND CAN HOLD A ONE WORD INTEGER (ADDRESS).
        !          1364: *
        !          1365: *      OPC  09,10,11                   CHARACTER
        !          1366: *
        !          1367: *           OPC IS USED TO DESIGNATE A SPECIFIC CHARACTER
        !          1368: *           OPERAND FOR USE IN THE LCH AND SCH INSTRUCTIONS.
        !          1369: *           THE INDEX REGISTER REFERENCED MUST BE EITHER XR OR
        !          1370: *           XL (NOT XS,XT). SEE SECTION ON CHARACTER OPERATIONS.
        !          1371: *
        !          1372: *      OPS  03,04,09,12,13,14,15       MEMORY REFERENCE
        !          1373: *
        !          1374: *           OPS IS USED TO DESCRIBE AN OPERAND WHICH IS IN
        !          1375: *           MEMORY. THE OPERAND MAY BE ONE OR MORE WORDS LONG
        !          1376: *           DEPENDING ON THE DATA TYPE. IN THE CASE OF MULTIWORD
        !          1377: *           OPERANDS, THE ADDRESS GIVEN IS THE FIRST WORD.
        !          1378: *
        !          1379: *      OPW  AS FOR OPS + 08,10,11      FULL WORD
        !          1380: *
        !          1381: *           OPW IS USED TO REFER TO AN OPERAND WHOSE CAPACITY IS
        !          1382: *           THAT OF A FULL MEMORY WORD. OPW INCLUDES ALL THE
        !          1383: *           POSSIBILITIES FOR OPS (THE REFERENCED WORD IS USED)
        !          1384: *           PLUS THE USE OF ONE OF THE THREE WORK REGISTERS
        !          1385: *           (WA,WB,WC). IN ADDITION, THE FORMATS (X)+ AND -(X)
        !          1386: *           ALLOW INDEXED OPERATIONS IN WHICH THE INDEX REGISTER
        !          1387: *           IS POPPED BY ONE WORD AFTER THE REFERENCE (X)+,
        !          1388: *           OR PUSHED BY ONE WORD BEFORE THE REFERENCE -(X)
        !          1389: *           THESE LATTER TWO FORMATS PROVIDE A FACILITY FOR
        !          1390: *           MANIPULATION OF STACKS. THE FORMAT DOES NOT IMPLY
        !          1391: *           A PARTICULAR DIRECTION IN WHICH STACKS MUST BUILD -
        !          1392: *           IT IS USED FOR COMPACTNESS. NOTE THAT THERE IS A
        !          1393: *           RESTRICTION WHICH DISALLOWS AN INSTRUCTION TO USE
        !          1394: *           AN INDEX REGISTER IN ONE OF THESE FORMATS
        !          1395: *           IN SOME OTHER MANNER IN THE SAME INSTRUCTION.
        !          1396: *           E.G.   MOV  XL,(XL)+   IS ILLEGAL.
        !          1397: *           THE FORMATS -(X) AND (X)+ MAY ALSO BE USED IN
        !          1398: *           PRE-DECREMENTATION, POST-INCREMENTATION TO ACCESS
        !          1399: *           THE ADJACENT CHARACTER OF A STRING.
        !          1400: 
        !          1401: 
        !          1402: Page 33              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          1403: 
        !          1404: *
        !          1405: *      OPERAND FORMATS (CONTINUED)
        !          1406: *
        !          1407: *      OPN  AS FOR OPW + 07            ONE WORD INTEGER
        !          1408: *
        !          1409: *           OPN IS USED TO REPRESENT AN OPERAND LOCATION WHICH
        !          1410: *           CAN CONTAIN A ONE WORD INTEGER (E.G. AN ADDRESS).
        !          1411: *           THIS INCLUDES ALL THE POSSIBILITIES FOR OPW PLUS
        !          1412: *           THE USE OF ONE OF THE INDEX REGISTERS (XL,XR,XT,
        !          1413: *           XS). THE RANGE OF INTEGER VALUES IS 0 LE N LE CFP$M.
        !          1414: *
        !          1415: *      OPV  AS FOR OPN + 18-22         ONE WORD INTEGER VALUE
        !          1416: *
        !          1417: *           OPV IS USED FOR AN OPERAND WHICH CAN YIELD A ONE
        !          1418: *           WORD INTEGER VALUE (E.G. AN ADDRESS). IT INCLUDES
        !          1419: *           ALL THE POSSIBILITIES FOR OPN (THE CURRENT VALUE OF
        !          1420: *           THE LOCATION IS USED) PLUS THE USE OF LITERALS. NOTE
        !          1421: *           THAT ALTHOUGH THE LITERAL FORMATS ARE DESCRIBED IN
        !          1422: *           TERMS OF A REFERENCE TO A LOCATION CONTAINING AN
        !          1423: *           ADDRESS CONSTANT, THIS LOCATION MAY NOT ACTUALLY
        !          1424: *           EXIST IN SOME IMPLEMENTATIONS SINCE ONLY THE VALUE
        !          1425: *           IS REQUIRED. A RESTRICTION IS PLACED ON LITERALS
        !          1426: *           WHICH MAY CONSIST ONLY OF DEFINED SYMBOLS AND
        !          1427: *           CERTAIN LABELS. CONSEQUENTLY SMALL INTEGERS TO BE
        !          1428: *           USED AS LITERALS MUST BE PRE-DEFINED, A DISCIPLINE
        !          1429: *           AIDING PROGRAM MAINTENANCE AND REVISION.
        !          1430: *
        !          1431: *      ADDR 01,02,03,04,05             ADDRESS
        !          1432: *
        !          1433: *           ADDR IS USED TO DESCRIBE AN EXPLICIT ADDRESS VALUE
        !          1434: *           (ONE WORD INTEGER VALUE) FOR USE WITH DAC.
        !          1435: *
        !          1436: *      PGLB 06,29            LABEL OR GLOBAL LABEL
        !          1437: *
        !          1438: *           ****************************************************
        !          1439: *           *   IN THE FOLLOWING DESCRIPTIONS THE USAGE --     *
        !          1440: *           *      (XL),(XR), ... ,(IA)                        *
        !          1441: *           *   IN THE DESCRIPTIVE TEXT SIGNIFIES THE          +
        !          1442: *           *   CONTENTS OF THE STATED REGISTER.               *
        !          1443: *           ****************************************************
        !          1444: 
        !          1445: 
        !          1446: Page 34              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          1447: 
        !          1448: *
        !          1449: *      SECTION 8 - LIST OF INSTRUCTION MNEMONICS
        !          1450: *
        !          1451: *      THE FOLLOWING LIST INCLUDES ALL INSTRUCTION AND
        !          1452: *      ASSEMBLY OPERATION MNEMONICS IN ALPHABETICAL ORDER.
        !          1453: *      THE MNEMONICS ARE PRECEDED BY A NUMBER IDENTIFYING
        !          1454: *      THE FOLLOWING SECTION WHERE THE INSTRUCTION IS DESCRIBED.
        !          1455: *      A STAR (*) IS APPENDED TO THE MNEMONIC IF THE LAST
        !          1456: *      OPERAND MAY OPTIONALLY BE OMITTED.
        !          1457: *      SEE SECTION -15- FOR DETAILS OF STATEMENT FORMAT AND
        !          1458: *      COMMENT CONVENTIONS.
        !          1459: *
        !          1460: *       2.1  ADD  OPV,OPN      ADD ADDRESS
        !          1461: *       4.2  ADI  OPS          ADD INTEGER
        !          1462: *       5.3  ADR  OPS          ADD REAL
        !          1463: *       7.1  ANB  OPW,W        AND BIT STRING
        !          1464: *       2.17 AOV  OPV,OPN,PLBL ADD ADDRESS, FAIL IF OVERFLOW
        !          1465: *       2.16 BCT  W,PLBL       BRANCH AND COUNT
        !          1466: *       2.5  BEQ  OPN,OPV,PLBL BRANCH IF ADDRESS EQUAL
        !          1467: *       2.8  BGE  OPN,OPV,PLBL BRANCH IF ADDRESS GREATER OR EQUL
        !          1468: *       2.7  BGT  OPN,OPV,PLBL BRANCH IF ADDRESS GREATER
        !          1469: *       2.12 BHI  OPN,OPV,PLBL BRANCH IF ADDRESS HIGH
        !          1470: *       2.10 BLE  OPN,OPV,PLBL BRANCH IF ADDRESS LESS OR EQUAL
        !          1471: *       2.11 BLO  OPN,OPV,PLBL BRANCH IF ADDRESS LOW
        !          1472: *       2.9  BLT  OPN,OPV,PLBL BRANCH IF ADDRESS LESS THAN
        !          1473: *       2.6  BNE  OPN,OPV,PLBL BRANCH IF ADDRESS NOT EQUAL
        !          1474: *       2.13 BNZ  OPN,PLBL     BRANCH IF ADDRESS NON-ZERO
        !          1475: *       1.2  BRN  PLBL         BRANCH UNCONDITIONAL
        !          1476: *       1.7  BRI  OPN          BRANCH INDIRECT
        !          1477: *       1.3  BSW* X,VAL,PLBL   BRANCH ON SWITCH VALUE
        !          1478: *       8.9  BTC  W            CONVERT BAUS TO CHAR COUNT
        !          1479: *       8.2  BTW  REG          CONVERT BAUS TO WORDS
        !          1480: *       2.14 BZE  OPN,PLBL     BRANCH IF ADDRESS ZERO
        !          1481: *       6.6  CEQ  OPW,OPW,PLBL BRANCH IF CHARACTERS EQUAL
        !          1482: *      10.1  CHK               CHECK STACK OVERFLOW
        !          1483: *       6.10 CLU  W            CONVERT LOWER TO UPPER CASE
        !          1484: *       7.4  CMB  W            COMPLEMENT BIT STRING
        !          1485: *       6.8  CMC  PLBL,PLBL    COMPARE CHARACTER STRINGS
        !          1486: *       6.7  CNE  OPW,OPW,PLBL BRANCH IF CHARACTERS NOT EQUAL
        !          1487: *       6.5  CSC  X            COMPLETE STORE CHARACTERS
        !          1488: *       8.8  CTB  W,VAL        CONVERT CHARACTER COUNT TO BAUS
        !          1489: *       8.7  CTW  W,VAL        CONVERT CHARACTER COUNT TO WORDS
        !          1490: *       6.11 CUL  W            CONVERT UPPER TO LOWER CASE
        !          1491: *       8.12 CVD               CONVERT BY DIVISION
        !          1492: *       8.11 CVM  PLBL         CONVERT BY MULTIPLICATION
        !          1493: *      11.1  DAC  ADDR         DEFINE ADDRESS CONSTANT
        !          1494: *      11.5  DBC  VAL          DEFINE BIT STRING CONSTANT
        !          1495: *       2.4  DCA  OPN          DECREMENT ADDRESS BY ONE WORD
        !          1496: *       1.17 DCV  OPN          DECREMENT VALUE BY ONE
        !          1497: *      11.6  DDC  DTEXT        DEFINE DISPLAY CONSTANT
        !          1498: *      11.2  DIC  INTEGER      DEFINE INTEGER CONSTANT
        !          1499: 
        !          1500: 
        !          1501: Page 35              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          1502: 
        !          1503: *
        !          1504: *      ALPHABETICAL LIST OF MNEMONICS (CONTINUED)
        !          1505: *
        !          1506: *      11.3  DRC  REAL         DEFINE REAL CONSTANT
        !          1507: *      11.4  DTC  DTEXT        DEFINE TEXT (CHARACTER) CONSTANT
        !          1508: *       4.5  DVI  OPS          DIVIDE INTEGER
        !          1509: *       5.6  DVR  OPS          DIVIDE REAL
        !          1510: *      13.1  EJC               EJECT ASSEMBLY LISTING
        !          1511: *      14.2  END               END OF ASSEMBLY
        !          1512: *       1.13 ENP               DEFINE END OF PROCEDURE
        !          1513: *       1.6  ENT* VAL          DEFINE ENTRY POINT
        !          1514: *      12.1  EQU  EQOP         DEFINE SYMBOLIC VALUE
        !          1515: *       1.15 ERB  INT,TEXT     ASSEMBLE ERROR CODE AND BRANCH
        !          1516: *       1.14 ERR  INT,TEXT     ASSEMBLE ERROR CODE
        !          1517: *       1.5  ESW               END OF SWITCH LIST FOR BSW
        !          1518: *       1.12 EXI* INT          EXIT FROM PROCEDURE
        !          1519: *      12.2  EXP  PTYP,INT     DEFINE EXTERNAL PROCEDURE
        !          1520: *       2.3  ICA  OPN          INCREMENT ADDRESS BY ONE WORD
        !          1521: *      12.5  GLB               DEFINE GLOBAL LABEL
        !          1522: *       3.4  ICP               INCREMENT CODE POINTER
        !          1523: *       1.16 ICV  OPN          INCREMENT VALUE BY ONE
        !          1524: *       4.11 IEQ  PLBL         JUMP IF INTEGER ZERO
        !          1525: *       1.4  IFF  VAL,PLBL     SPECIFY BRANCH FOR BSW
        !          1526: *       4.12 IGE  PLBL         JUMP IF INTEGER NON-NEGATIVE
        !          1527: *       4.13 IGT  PLBL         JUMP IF INTEGER POSITIVE
        !          1528: *       4.14 ILE  PLBL         JUMP IF INTEGER NEGATIVE OR ZERO
        !          1529: *       4.15 ILT  PLBL         JUMP IF INTEGER NEGATIVE
        !          1530: *       4.16 INE  PLBL         JUMP IF INTEGER NON-ZERO
        !          1531: *       4.9  INO  PLBL         JUMP IF NO INTEGER OVERFLOW
        !          1532: *      12.3  INP  PTYP,INT     INTERNAL PROCEDURE
        !          1533: *      12.4  INR               INTERNAL ROUTINE
        !          1534: *       4.10 IOV  PLBL         JUMP IF INTEGER OVERFLOW
        !          1535: *       8.5  ITR               CONVERT INTEGER TO REAL
        !          1536: *       1.23 JMG  GLBL         JUMP TO GLOBAL LABEL
        !          1537: *       1.9  JSR  PNAM         CALL PROCEDURE
        !          1538: *       6.3  LCH  REG,OPC      LOAD CHARACTER
        !          1539: *       3.1  LCP  REG        LOAD CODE POINTER REGISTER
        !          1540: *       2.15 LCT  W,OPV        LOAD COUNTER FOR LOOP
        !          1541: *       3.3  LCW  REG          LOAD NEXT CODE WORD
        !          1542: *       4.1  LDI  OPS          LOAD INTEGER
        !          1543: *       5.1  LDR  OPS          LOAD REAL
        !          1544: *       1.8  LEI  X            LOAD ENTRY POINT ID
        !          1545: *       7.6  LSH  W,VAL        LEFT SHIFT BIT STRING
        !          1546: *       7.8  LSX  W,X          LEFT SHIFT INDEXED
        !          1547: *       9.2  MCB               MOVE CHARACTERS BACKWARDS
        !          1548: *       8.4  MFI* OPN,PLBL     CONVERT (IA) TO ADDRESS VALUE
        !          1549: *       4.3  MLI  OPS          MULTIPLY INTEGER
        !          1550: *       5.5  MLR  OPS          MULTIPLY REAL
        !          1551: *       1.19 MNZ  OPN          MOVE NON-ZERO
        !          1552: *       1.1  MOV  OPV,OPN      MOVE
        !          1553: *       8.3  MTI  OPN          MOVE ADDRESS VALUE TO (IA)
        !          1554: *       9.1  MVC               MOVE CHARACTERS
        !          1555: *       9.3  MVW               MOVE WORDS
        !          1556: *       9.4  MWB               MOVE WORDS BACKWARDS
        !          1557: *       4.8  NGI               NEGATE INTEGER
        !          1558: 
        !          1559: 
        !          1560: Page 36              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          1561: 
        !          1562: *
        !          1563: *      ALPHABETICAL LIST OF MNEMONICS (CONTINUED)
        !          1564: *
        !          1565: *       5.9  NGR               NEGATE REAL
        !          1566: *       7.9  NZB  W,PLBL       JUMP IF NOT ALL ZERO BITS
        !          1567: *       7.2  ORB  OPW,W        OR BIT STRINGS
        !          1568: *       6.1  PLC* X,OPV        PREPARE TO LOAD CHARACTERS
        !          1569: *       1.10 PPM* PLBL         PROVIDE PROCEDURE EXIT PARAMETER
        !          1570: *       1.11 PRC  PTYP,VAL     DEFINE START OF PROCEDURE
        !          1571: *       6.2  PSC* X,OPV        PREPARE TO STORE CHARACTERS
        !          1572: *       5.10 REQ  PLBL         JUMP IF REAL ZERO
        !          1573: *       5.11 RGE  PLBL         JUMP IF REAL POSITIVE OR ZERO
        !          1574: *       5.12 RGT  PLBL         JUMP IF REAL POSITIVE
        !          1575: *       5.13 RLE  PLBL         JUMP IF REAL NEGATIVE OR ZERO
        !          1576: *       5.14 RLT  PLBL         JUMP IF REAL NEGATIVE
        !          1577: *       4.6  RMI  OPS          REMAINDER INTEGER
        !          1578: *       5.15 RNE  PLBL         JUMP IF REAL NON-ZERO
        !          1579: *       5.8  RNO  PLBL         JUMP IF NO REAL OVERFLOW
        !          1580: *       5.7  ROV  PLBL         JUMP IF REAL OVERFLOW
        !          1581: *       7.5  RSH  W,VAL        RIGHT SHIFT BIT STRING
        !          1582: *       7.7  RSX  W,X          RIGHT SHIFT INDEXED
        !          1583: *       8.6  RTI* PLBL         CONVERT REAL TO INTEGER
        !          1584: *       1.22 RTN               DEFINE START OF ROUTINE
        !          1585: *       4.4  SBI  OPS          SUBTRACT INTEGER
        !          1586: *       5.4  SBR  OPS          SUBTRACT REALS
        !          1587: *       6.4  SCH  REG,OPC      STORE CHARACTER
        !          1588: *       3.2  SCP  REG          STORE CODE POINTER
        !          1589: *      14.1  SEC               DEFINE START OF ASSEMBLY SECTION
        !          1590: *       1.20 SSL  OPW          SUBROUTINE STACK LOAD
        !          1591: *       1.21 SSS  OPW          SUBROUTINE STACK STORE
        !          1592: *       4.7  STI  OPS          STORE INTEGER
        !          1593: *       5.2  STR  OPS          STORE REAL
        !          1594: *       2.2  SUB  OPV,OPN      SUBTRACT ADDRESS
        !          1595: *       6.9  TRC               TRANSLATE CHARACTER STRING
        !          1596: *      13.2  TTL  TEXT         SUPPLY ASSEMBLY TITLE
        !          1597: *       8.1  WTB  REG          CONVERT WORDS TO BAUS
        !          1598: *       8.10 WTC  W            CONVERT WORDS TO CHAR COUNT
        !          1599: *       7.3  XOB  OPW,W        EXCLUSIVE OR BIT STRINGS
        !          1600: *       1.18 ZER  OPN          ZEROISE INTEGER LOCATION
        !          1601: *       7.11 ZGB  OPN          ZEROISE GARBAGE BITS
        !          1602: *       7.10 ZRB  W,PLBL       JUMP IF ALL ZERO BITS
        !          1603: 
        !          1604: 
        !          1605: Page 37              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          1606: 
        !          1607: *
        !          1608: *      SECTION 9 - MINIMAL INSTRUCTIONS
        !          1609: *
        !          1610: *      THE FOLLOWING DESCRIPTIONS ASSUME THE DEFINITIONS -
        !          1611: *
        !          1612: *      ZEROE  EQU  0
        !          1613: *      UNITY  EQU  1
        !          1614: *
        !          1615: *      -1-  BASIC INSTRUCTION SET
        !          1616: *
        !          1617: *      1.1  MOV  OPV,OPN     MOVE ONE WORD VALUE
        !          1618: *
        !          1619: *           MOV CAUSES THE VALUE OF OPERAND OPV TO BE SET AS
        !          1620: *           THE NEW CONTENTS OF OPERAND LOCATION OPN. IN THE
        !          1621: *           CASE WHERE OPN IS NOT AN INDEX REGISTER, ANY VALUE
        !          1622: *           WHICH CAN NORMALLY OCCUPY A MEMORY WORD (INCLUDING
        !          1623: *           A PART OF A MULTIWORD REAL OR INTEGER VALUE)
        !          1624: *           CAN BE TRANSFERRED USING MOV. IF THE TARGET LOCATION
        !          1625: *           OPN IS AN INDEX REGISTER, THEN OPV MUST SPECIFY AN
        !          1626: *           APPROPRIATE ONE WORD VALUE OR OPERAND CONTAINING
        !          1627: *           SUCH AN APPROPRIATE VALUE.
        !          1628: *
        !          1629: *      1.2  BRN  PLBL        UNCONDITIONAL BRANCH
        !          1630: *
        !          1631: *           BRN CAUSES CONTROL TO BE PASSED TO THE INDICATED
        !          1632: *           LABEL IN THE PROGRAM SECTION.
        !          1633: *
        !          1634: *      1.3  BSW  X,VAL,PLBL  BRANCH ON SWITCH VALUE
        !          1635: *      1.4  IFF  VAL,PLBL    PROVIDE BRANCH FOR SWITCH
        !          1636: *           IFF  VAL,PLBL     ...
        !          1637: *           ...
        !          1638: *           ...
        !          1639: *      1.5  ESW              END OF BRANCH SWITCH TABLE
        !          1640: *
        !          1641: *           BSW,IFF,ESW PROVIDE A CAPABILITY FOR A SWITCHED
        !          1642: *           BRANCH SIMILAR TO A FORTRAN COMPUTED GOTO. THE
        !          1643: *           VAL ON THE BSW INSTRUCTION IS THE MAXIMUM NUMBER
        !          1644: *           OF BRANCHES. THE VALUE IN X RANGES FROM ZERO UP TO
        !          1645: *           BUT NOT INCLUDING THIS MAXIMUM. EACH IFF PROVIDES A
        !          1646: *           BRANCH. VAL MUST BE LESS THAN THAT GIVEN ON THE BSW
        !          1647: *           AND CONTROL GOES TO PLBL IF THE VALUE IN X MATCHES.
        !          1648: *           IF THE VALUE IN X DOES NOT CORRESPOND TO ANY OF THE
        !          1649: *           IFF ENTRIES, THEN CONTROL PASSES TO THE PLBL ON THE
        !          1650: *           BSW. THIS PLBL OPERAND MAY BE OMITTED IF THERE ARE
        !          1651: *           NO VALUES MISSING FROM THE LIST.
        !          1652: *
        !          1653: *           IFF AND ESW MAY ONLY BE USED IN THIS CONTEXT.
        !          1654: *           EXECUTION OF BSW MAY DESTROY THE CONTENTS OF X.
        !          1655: *           THE IFF ENTRIES MAY BE IN ANY ORDER AND SINCE
        !          1656: *           A TRANSLATOR MAY THUS NEED TO STORE AND SORT THEM,
        !          1657: *           THE COMMENT FIELD IS RESTRICTED IN LENGTH (SEC 11).
        !          1658: 
        !          1659: 
        !          1660: Page 38              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          1661: 
        !          1662: *
        !          1663: *      -1-  BASIC INSTRUCTIONS (CONTINUED)
        !          1664: *
        !          1665: *      1.6  ENT  VAL         DEFINE PROGRAM ENTRY POINT
        !          1666: *
        !          1667: *           THE SYMBOL APPEARING IN THE LABEL FIELD IS DEFINED
        !          1668: *           TO BE A PROGRAM ENTRY POINT (ELBL) WHICH CAN LATER
        !          1669: *           BE USED IN CONJUNCTION WITH THE BRI INSTRUCTION,
        !          1670: *           WHICH PROVIDES THE ONLY MEANS OF ENTERING THE
        !          1671: *           CODE. IT IS ILLEGAL TO FALL INTO CODE
        !          1672: *           IDENTIFIED BY AN ENTRY POINT. THE
        !          1673: *           ENTRY SYMBOL IS ASSIGNED AN ADDRESS WHICH NEED NOT
        !          1674: *           BE A MULTIPLE OF CFP$B BUT WHICH MUST BE IN THE
        !          1675: *           RANGE 0 LE CFP$M AND THE ADDRESS MUST NOT LIE WITHIN
        !          1676: *           THE ADDRESS RANGE OF THE ALLOCATED DATA AREA.
        !          1677: *           FURTHERMORE, ADDRESSES OF SUCCESSIVE ENTRY POINTS
        !          1678: *           MUST BE ASSIGNED IN SOME ASCENDING SEQUENCE SO
        !          1679: *           THAT THE ADDRESS COMPARISON INSTRUCTIONS CAN BE
        !          1680: *           USED TO TEST THE ORDER IN WHICH TWO ENTRY POINTS
        !          1681: *           OCCUR. THE SYMBOL VAL GIVES AN IDENTIFYING VALUE
        !          1682: *           TO THE ENTRY POINT WHICH CAN BE ACCESSED WITH THE
        !          1683: *           LEI INSTRUCTION.
        !          1684: *           NOTE - SUBJECT TO THE RESTRICTION BELOW, VAL MAY
        !          1685: *           BE OMITTED IF NO SUCH IDENTIFICATION IS NEEDED I.E.
        !          1686: *           IF NO LEI REFERENCES THE ENTRY POINT. FOR THIS
        !          1687: *           CASE, A TRANSLATION OPTIMISATION IS POSSIBLE IN
        !          1688: *           WHICH NO MEMORY NEED BE RESERVED FOR A NULL
        !          1689: *           IDENTIFICATION WHICH IS NEVER TO BE REFERENCED, BUT
        !          1690: *           ONLY PROVIDED THIS IS DONE SO AS NOT TO INTERFERE
        !          1691: *           WITH THE STRICTLY ASCENDING SEQUENCE OF ENTRY POINT
        !          1692: *           ADDRESSES. TO SIMPLIFY THIS OPTIMISATION FOR ALL
        !          1693: *           IMPLEMENTORS, THE FOLLOWING RESTRICTION IS OBSERVED
        !          1694: *                VAL MAY ONLY BE OMITTED IF THE ENTRY POINT IS
        !          1695: *                SEPARATED FROM A FOLLOWING ENTRY POINT BY A
        !          1696: *                NON-NULL MINIMAL CODE SEQUENCE.
        !          1697: *           ENTRY POINT ADDRESSES ARE ACCESSIBLE ONLY BY USE OF
        !          1698: *           LITERALS (=ELBL, SECTION 7) OR DAC CONSTANTS
        !          1699: *           (SECTION 8-11.1).
        !          1700: *
        !          1701: *      1.7  BRI  OPN         BRANCH INDIRECT
        !          1702: *
        !          1703: *           OPN CONTAINS THE ADDRESS OF A PROGRAM ENTRY POINT
        !          1704: *           (SEE ENT). CONTROL IS PASSED TO THE EXECUTABLE
        !          1705: *           CODE STARTING AT THE ENTRY POINT ADDRESS. OPN IS
        !          1706: *           LEFT UNCHANGED.
        !          1707: *
        !          1708: *      1.8  LEI  X           LOAD ENTRY POINT IDENTIFICATION
        !          1709: *
        !          1710: *           X CONTAINS THE ADDRESS OF AN ENTRY POINT FOR WHICH
        !          1711: *           AN IDENTIFYING VALUE WAS GIVEN ON THE THE ENT LINE.
        !          1712: *           LEI REPLACES THE CONTENTS OF X BY THIS VALUE.
        !          1713: 
        !          1714: 
        !          1715: Page 39              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          1716: 
        !          1717: *
        !          1718: *      -1-  BASIC INSTRUCTIONS (CONTINUED)
        !          1719: *
        !          1720: *      1.9  JSR  PNAM        CALL PROCEDURE PNAM
        !          1721: *      1.10 PPM  PLBL        PROVIDE EXIT PARAMETER
        !          1722: *           PPM  PLBL         ...
        !          1723: *           ...
        !          1724: *           PPM  PLBL         ...
        !          1725: *
        !          1726: *           JSR CAUSES CONTROL TO BE PASSED TO THE NAMED
        !          1727: *           PROCEDURE. PNAM IS THE LABEL ON A PRC STATEMENT
        !          1728: *           ELSEWHERE IN THE PROGRAM SECTION (SEE PRC)
        !          1729: *           OR HAS BEEN DEFINED USING AN EXP INSTRUCTION.
        !          1730: *           THE PPM EXIT PARAMETERS FOLLOWING THE CALL GIVE
        !          1731: *           NAMES OF PROGRAM LOCATIONS (PLBL-S) TO WHICH
        !          1732: *           ALTERNATIVE EXI RETURNS OF THE CALLED PROCEDURE MAY
        !          1733: *           PASS CONTROL. THEY MAY OPTIONALLY BE REPLACED BY
        !          1734: *           ERROR RETURNS (SEE ERR). THE NUMBER OF EXIT
        !          1735: *           PARAMETERS FOLLOWING A JSR MUST EQUAL THE INT IN THE
        !          1736: *           PROCEDURE DEFINITION. THE OPERAND OF PPM MAY BE
        !          1737: *           OMITTED IF THE CORRESPONDING EXI RETURN IS CERTAIN
        !          1738: *           NOT TO BE TAKEN.
        !          1739: *
        !          1740: *      1.11 PRC  PTYP,INT    DEFINE START OF PROCEDURE
        !          1741: *
        !          1742: *           THE SYMBOL APPEARING IN THE LABEL FIELD IS DEFINED
        !          1743: *           AS THE NAME OF A PROCEDURE (PNAM) FOR USE WITH JSR.
        !          1744: *           A PROCEDURE IS A CONTIGUOUS SECTION OF INSTRUCTIONS
        !          1745: *           TO WHICH CONTROL MAY BE PASSED WITH A JSR
        !          1746: *           INSTRUCTION. THIS IS THE ONLY WAY IN WHICH THE
        !          1747: *           INSTRUCTIONS IN A PROCEDURE MAY BE EXECUTED. IT IS
        !          1748: *           NOT PERMITTED TO FALL INTO A PROCEDURE.
        !          1749: *           ALL PROCEDURES SHOULD BE NAMED IN SECTION 0
        !          1750: *           INP  STATEMENTS.
        !          1751: *
        !          1752: *           INT IS THE NUMBER OF EXIT PARAMETERS (PPM-S) TO
        !          1753: *           BE USED IN JSR CALLS.
        !          1754: *
        !          1755: *           THERE ARE THREE POSSIBILITIES FOR PTYP, EACH
        !          1756: *           CONSISTING OF A SINGLE LETTER AS FOLLOWS.
        !          1757: *
        !          1758: *           R                RECURSIVE
        !          1759: *
        !          1760: *           THE RETURN POINT (ONE OR MORE WORDS) IS STORED ON
        !          1761: *           THE STACK AS THOUGH ONE OR MORE MOV ..,-(XS)
        !          1762: *           INSTRUCTIONS WERE EXECUTED.
        !          1763: 
        !          1764: 
        !          1765: Page 40              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          1766: 
        !          1767: *
        !          1768: *      -1-  BASIC INSTRUCTIONS (CONTINUED)
        !          1769: *
        !          1770: *           N                NON-RECURSIVE
        !          1771: *
        !          1772: *           THE RETURN POINT IS TO BE STORED EITHER
        !          1773: *           (1) IN A LOCAL STORAGE WORD ASSOCIATED
        !          1774: *           WITH THE PROCEDURE AND NOT DIRECTLY
        !          1775: *           AVAILABLE TO THE PROGRAM IN ANY OTHER MANNER OR
        !          1776: *           (2) ON A SUBROUTINE LINK STACK QUITE DISTINCT FROM
        !          1777: *           THE MINIMAL STACK ADDRESSED BY XS.
        !          1778: *           IT IS AN ERROR TO USE THE STACK FOR N-LINKS, SINCE
        !          1779: *           PROCEDURE PARAMETERS OR RESULTS MAY BE PASSED VIA
        !          1780: *           THE STACK.
        !          1781: *           IF METHOD (2) IS USED FOR LINKS, ERROR EXITS
        !          1782: *           (ERB,ERR) FROM A PROCEDURE WILL NECESSITATE LINK
        !          1783: *           STACK RESETTING. THE SSL AND SSS ORDERS PROVIDED
        !          1784: *           FOR THIS MAY BE REGARDED AS NO-OPS FOR
        !          1785: *           IMPLEMENTATIONS USING METHOD (1).
        !          1786: *
        !          1787: *           E                EITHER
        !          1788: *
        !          1789: *           THE RETURN POINT MAY BE STORED IN EITHER MANNER
        !          1790: *           ACCORDING TO EFFICIENCY REQUIREMENTS OF THE ACTUAL
        !          1791: *           PHYSICAL MACHINE USED FOR THE IMPLEMENTATION. NOTE
        !          1792: *           THAT PROGRAMMING OF E TYPE PROCEDURES MUST BE
        !          1793: *           INDEPENDENT OF THE ACTUAL IMPLEMENTATION.
        !          1794: *
        !          1795: *           THE ACTUAL FORM OF THE RETURN POINT IS UNDEFINED.
        !          1796: *           HOWEVER, EACH WORD STORED ON THE STACK FOR AN
        !          1797: *           R-TYPE CALL MUST MEET THE FOLLOWING REQUIREMENTS.
        !          1798: *
        !          1799: *           1)               IT CAN BE HANDLED AS AN ADDRESS
        !          1800: *                            AND PLACED IN AN INDEX REGISTER.
        !          1801: *
        !          1802: *           2)               WHEN USED AS AN OPERAND IN AN
        !          1803: *                            ADDRESS COMPARISON INSTRUCTION, IT
        !          1804: *                            MUST NOT APPEAR TO LIE WITHIN
        !          1805: *                            THE ALLOCATED DATA AREA.
        !          1806: *
        !          1807: *           3)               IT IS NOT REQUIRED TO APPEAR
        !          1808: *                            TO LIE WITHIN THE PROGRAM SECTION.
        !          1809: 
        !          1810: 
        !          1811: Page 41              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          1812: 
        !          1813: *
        !          1814: *      -1-  BASIC INSTRUCTIONS (CONTINUED)
        !          1815: *
        !          1816: *      1.12 EXI  INT         EXIT FROM PROCEDURE
        !          1817: *
        !          1818: *           THE PPM AND ERR PARAMETERS FOLLOWING A JSR ARE
        !          1819: *           NUMBERED STARTING FROM 1.  EXI  INT CAUSES CONTROL
        !          1820: *           TO BE RETURNED TO THE INT-TH SUCH PARAM. EXI 1 GIVES
        !          1821: *           CONTROL TO THE PLBL OF THE FIRST PPM AFTER THE JSR.
        !          1822: *           IF INT IS OMITTED, CONTROL IS PASSED BACK PAST THE
        !          1823: *           LAST EXIT PARAMETER (OR PAST THE JSR IF THERE ARE
        !          1824: *           NONE). FOR R AND E TYPE PROCEDURES, THE
        !          1825: *           STACK POINTER XS MUST BE SET TO ITS APPROPRIATE
        !          1826: *           ENTRY VALUE BEFORE EXECUTING AN EXI INSTRUCTION.
        !          1827: *           IN THIS CASE, EXI REMOVES RETURN POINTS FROM THE
        !          1828: *           STACK IF ANY ARE STORED THERE SO THAT THE STACK
        !          1829: *           POINTER IS RESTORED TO ITS CALLING VALUE.
        !          1830: *
        !          1831: *      1.13 ENP              DEFINE END OF PROCEDURE BODY
        !          1832: *
        !          1833: *           ENP DELIMITS A PROCEDURE BODY AND MAY NOT ACTUALLY
        !          1834: *           BE EXECUTED, HENCE IT MUST HAVE NO LABEL.
        !          1835: *
        !          1836: *      1.14 ERR  INT,TEXT    PROVIDE ERROR RETURN
        !          1837: *
        !          1838: *           ERR MAY REPLACE AN EXIT PARAMETER (PPM) IN
        !          1839: *           ANY PROCEDURE CALL. THE INT ARGUMENT IS A UNIQUE
        !          1840: *           ERROR CODE IN 0 TO 899.
        !          1841: *           THE TEXT SUPPLIED AS THE OTHER OPERAND IS
        !          1842: *           ARBITRARY TEXT IN THE FORTRAN CHARACTER SET AND
        !          1843: *           MAY BE USED IN CONSTRUCTING A FILE OF ERROR
        !          1844: *           MESSAGES FOR DOCUMENTING PURPOSES OR FOR BUILDING
        !          1845: *           A DIRECT ACCESS OR OTHER FILE OF MESSAGES TO BE
        !          1846: *           USED BY THE ERROR HANDLING CODE.
        !          1847: *           IN THE EVENT THAT AN EXI ATTEMPTS
        !          1848: *           TO RETURN CONTROL VIA AN EXIT PARAMETER TO
        !          1849: *           AN ERR, CONTROL IS INSTEAD PASSED TO THE FIRST
        !          1850: *           INSTRUCTION IN THE ERROR SECTION (WHICH FOLLOWS THE
        !          1851: *           PROGRAM SECTION) WITH THE ERROR CODE IN WA.
        !          1852: *
        !          1853: *      1.15 ERB  INT,TEXT    ERROR BRANCH
        !          1854: *
        !          1855: *           THIS INSTRUCTION RESEMBLES ERR EXCEPT THAT IT MAY
        !          1856: *           OCCUR AT ANY POINT WHERE A BRANCH IS PERMITTED.
        !          1857: *           IT EFFECTS A TRANSFER OF CONTROL TO THE ERROR
        !          1858: *           SECTION WITH THE ERROR CODE IN WA.
        !          1859: *
        !          1860: *      1.16 ICV  OPN         INCREMENT VALUE BY ONE
        !          1861: *
        !          1862: *           ICV INCREMENTS THE VALUE OF THE OPERAND BY UNITY.
        !          1863: *           IT IS EQUIVALENT TO   ADD  =UNITY,OPN
        !          1864: *
        !          1865: *      1.17 DCV  OPN         DECREMENT VALUE BY ONE
        !          1866: *
        !          1867: *           DCV DECREMENTS THE VALUE OF THE OPERAND BY UNITY.
        !          1868: *           IT IS EQUIVALENT TO   SUB  =UNITY,OPN
        !          1869: 
        !          1870: 
        !          1871: Page 42              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          1872: 
        !          1873: *
        !          1874: *      BASIC INSTRUCTIONS (CONTINUED)
        !          1875: *
        !          1876: *      1.18 ZER  OPN         ZEROISE OPN
        !          1877: *
        !          1878: *           ZER IS EQUIVALENT TO  MOV  =ZEROE,OPN
        !          1879: *
        !          1880: *      1.19 MNZ  OPN         MOVE NON-ZERO TO OPN
        !          1881: *
        !          1882: *           ANY NON-ZERO COLLECTABLE VALUE MAY USED, FOR WHICH
        !          1883: *           THE OPCODES BNZ/BZE WILL BRANCH/FAIL TO BRANCH.
        !          1884: *
        !          1885: *      1.20 SSL  OPW         SUBROUTINE STACK LOAD
        !          1886: *
        !          1887: *      1.21 SSS  OPW         SUBROUTINE STACK STORE
        !          1888: *
        !          1889: *           THIS PAIR OF OPERATIONS IS PROVIDED TO MAKE POSSIBLE
        !          1890: *           THE USE OF A LOCAL STACK TO HOLD SUBROUTINE (S-R)
        !          1891: *           RETURN LINKS FOR N-TYPE PROCEDURES. SSS STORES THE
        !          1892: *           S-R STACK POINTER IN OPW AND SSL LOADS THE S-R
        !          1893: *           STACK POINTER FROM OPW. BY USING SSS IN THE MAIN
        !          1894: *           PROGRAM OR ON ENTRY TO A PROCEDURE WHICH SHOULD
        !          1895: *           REGAIN CONTROL ON OCCURRENCE OF AN ERR OR ERB AND BY
        !          1896: *           USE OF SSL IN THE ERROR PROCESSING SECTIONS THE
        !          1897: *           S-R STACK POINTER CAN BE RESTORED GIVING A LINK
        !          1898: *           STACK CLEANED UP READY FOR RESUMED EXECUTION.
        !          1899: *           THE FORM OF THE LINK STACK POINTER IS UNDEFINED IN
        !          1900: *           MINIMAL (IT IS LIKELY TO BE A PRIVATE REGISTER
        !          1901: *           KNOWN TO THE TRANSLATOR) AND THE ONLY REQUIREMENT
        !          1902: *           IS THAT IT SHOULD FIT INTO A SINGLE FULL WORD.
        !          1903: *           SSL AND SSS ARE NO-OPS IF A PRIVATE LINK STACK IS
        !          1904: *           NOT USED.
        !          1905: *
        !          1906: *      1.22 RTN              DEFINE START OF ROUTINE
        !          1907: *
        !          1908: *           A ROUTINE IS A CODE CHUNK USED FOR SIMILAR PURPOSES
        !          1909: *           TO A PROCEDURE. HOWEVER IT IS ENTERED BY ANY TYPE OF
        !          1910: *           CONDITIONAL OR UNCONDITIONAL BRANCH (NOT BY JSR). ON
        !          1911: *           TERMINATION IT PASSES CONTROL BY A BRANCH (OFTEN
        !          1912: *           BRI THROUGH A CODE WORD) OR EVEN PERMITS CONTROL
        !          1913: *           TO DROP THROUGH TO ANOTHER ROUTINE. NO RETURN LINK
        !          1914: *           EXISTS AND THE END OF A ROUTINE IS NOT MARKED BY
        !          1915: *           AN EXPLICIT OPCODE (COMPARE ENP).
        !          1916: *           ALL ROUTINES SHOULD BE NAMED IN SECTION 0
        !          1917: *           INR  STATEMENTS.
        !          1918: *
        !          1919: *      1.23 JMG  GLBL        JUMP GLOBAL (I.E. NON LOCAL)
        !          1920: *
        !          1921: *           PLBL-S ARE INTENDED FOR LOCAL BRANCHING WITHIN
        !          1922: *           PROCEDURES AND ROUTINES. OCCASIONALLY (EG ERROR
        !          1923: *           RECOVERY) IT MAY BE PERMISSIBLE TO HAVE NON LOCAL
        !          1924: *           BRANCHES. THE DESTINATION OF THIS INSTRUCTION IS A
        !          1925: *           LABEL NOTED AS BEING GLOBAL BY APPEARING IN THE
        !          1926: *           PROCEDURES SECTION LABELLING A GLB OPCODE.
        !          1927: 
        !          1928: 
        !          1929: Page 43              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          1930: 
        !          1931: *
        !          1932: *      -2-  OPERATIONS ON ONE WORD INTEGER VALUES (ADDRESSES)
        !          1933: *
        !          1934: *      2.1  ADD  OPV,OPN     ADDS OPV TO THE VALUE IN OPN AND
        !          1935: *                            STORES THE RESULT IN OPN. UNDEFINED
        !          1936: *                            IF THE RESULT EXCEEDS CFP$M.
        !          1937: *
        !          1938: *      2.2  SUB  OPV,OPN     SUBTRACTS OPV FROM OPN. STORES THE
        !          1939: *                            RESULT IN OPN. UNDEFINED IF THE
        !          1940: *                            RESULT IS NEGATIVE.
        !          1941: *
        !          1942: *      2.3  ICA  OPN         INCREMENT ADDRESS IN OPN
        !          1943: *                            EQUIVALENT TO ADD *UNITY,OPN
        !          1944: *
        !          1945: *      2.4  DCA  OPN         DECREMENT ADDRESS IN OPN
        !          1946: *                            EQUIVALENT TO SUB *UNITY,OPN
        !          1947: *
        !          1948: *      2.5  BEQ  OPN,OPV,PLBL BRANCH TO PLBL IF OPN EQ OPV
        !          1949: *      2.6  BNE  OPN,OPV,PLBL BRANCH TO PLBL IF OPN NE OPV
        !          1950: *      2.7  BGT  OPN,OPV,PLBL BRANCH TO PLBL IF OPN GT OPV
        !          1951: *      2.8  BGE  OPN,OPV,PLBL BRANCH TO PLBL IF OPN GE OPV
        !          1952: *      2.9  BLT  OPN,OPV,PLBL BRANCH TO PLBL IF OPN LT OPV
        !          1953: *      2.10 BLE  OPN,OPV,PLBL BRANCH TO PLBL IF OPN LE OPV
        !          1954: *      2.11 BLO  OPN,OPV,PLBL EQUIVALENT TO BLT OR BLE
        !          1955: *      2.12 BHI  OPN,OPV,PLBL EQUIVALENT TO BGT OR BGE
        !          1956: *
        !          1957: *           THE ABOVE INSTRUCTIONS COMPARE TWO ADDRESS
        !          1958: *           VALUES AS UNSIGNED INTEGER VALUES.
        !          1959: *           THE BLO AND BHI INSTRUCTIONS ARE USED IN CASES WHERE
        !          1960: *           THE EQUAL CONDITION EITHER DOES NOT OCCUR OR CAN
        !          1961: *           RESULT EITHER IN A BRANCH OR NO BRANCH. THIS AVOIDS
        !          1962: *           INEFFICIENT TRANSLATIONS IN SOME IMPLEMENTATIONS.
        !          1963: *
        !          1964: *      2.13 BNZ  OPN,PLBL    EQUIVALENT TO BNE OPN,=ZEROE,PLBL
        !          1965: *
        !          1966: *      2.14 BZE  OPN,PLBL    EQUIVALENT TO BEQ OPN,=ZEROE,PLBL
        !          1967: *
        !          1968: *
        !          1969: *      2.15 LCT  W,OPV       LOAD COUNTER FOR BCT
        !          1970: *
        !          1971: *           LCT LOADS A COUNTER VALUE FOR USE WITH THE BCT
        !          1972: *           INSTRUCTION. THE VALUE IN OPV IS THE NUMBER OF LOOPS
        !          1973: *           TO BE EXECUTED. THE VALUE IN W AFTER THIS OPERATION
        !          1974: *           IS AN UNDEFINED ONE WORD INTEGER QUANTITY.
        !          1975: *
        !          1976: *      2.16 BCT  W,PLBL      BRANCH AND COUNT
        !          1977: *
        !          1978: *           BCT USES THE COUNTER VALUE IN W TO BRANCH THE
        !          1979: *           REQUIRED NUMBER OF TIMES AND THEN FINALLY TO FALL
        !          1980: *           THROUGH TO THE NEXT INSTRUCTION. BCT CAN ONLY BE
        !          1981: *           USED FOLLOWING AN APPROPRIATE LCT INSTRUCTION.
        !          1982: *           THE VALUE IN W AFTER EXECUTION OF BCT IS UNDEFINED.
        !          1983: *
        !          1984: *      2.17 AOV  OPV,OPN,PLBL ADD WITH OVERFLOW TEST
        !          1985: *
        !          1986: *           ADDS OPV TO THE VALUE IN OPN AND STORES RESULT IN
        !          1987: *           OPN. BRANCHES TO PLBL IF RESULT EXCEEDS CFP$M
        !          1988: *           WITH RESULT IN OPN UNDEFINED. CF. ADD.
        !          1989: 
        !          1990: 
        !          1991: Page 44              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          1992: 
        !          1993: *
        !          1994: *      -3-  OPERATIONS ON THE CODE POINTER REGISTER (CP)
        !          1995: *
        !          1996: *           THE CODE POINTER REGISTER PROVIDES A PSUEDO
        !          1997: *           INSTRUCTION COUNTER FOR USE IN AN INTERPRETOR. IT
        !          1998: *           MAY BE IMPLEMENTED AS A REAL REGISTER OR AS A
        !          1999: *           MEMORY LOCATION, BUT IN EITHER CASE IT IS SEPARATE
        !          2000: *           FROM ANY OTHER REGISTER. THE VALUE IN THE CODE
        !          2001: *           POINTER REGISTER IS ALWAYS A WORD ADDRESS (I.E.
        !          2002: *           A ONE WORD INTEGER WHICH IS A MULTIPLE OF CFP$B).
        !          2003: *
        !          2004: *      3.1  LCP  REG         LOAD CODE POINTER REGISTER
        !          2005: *                            THIS INSTRUCTION CAUSES THE CODE
        !          2006: *                            POINTER REGISTER TO BE SET FROM
        !          2007: *                            THE VALUE IN REG WHICH IS UNCHANGED
        !          2008: *
        !          2009: *      3.2  SCP  REG         STORE CODE POINTER REGISTER
        !          2010: *                            THIS INSTRUCTION LOADS THE CURRENT
        !          2011: *                            VALUE IN THE CODE POINTER REGISTER
        !          2012: *                            INTO REG. (CP) IS UNCHANGED.
        !          2013: *
        !          2014: *      3.3  LCW  REG         LOAD NEXT CODE WORD
        !          2015: *                            THIS INSTRUCTION CAUSES THE WORD
        !          2016: *                            POINTED TO BY CP TO BE LOADED INTO
        !          2017: *                            THE INDICATED REG. THE VALUE IN CP
        !          2018: *                            IS THEN INCREMENTED BY ONE WORD.
        !          2019: *                            EXECUTION OF LCW MAY DESTROY XL.
        !          2020: *
        !          2021: *      3.4  ICP              INCREMENT CP BY ONE WORD
        !          2022: *
        !          2023: *           ON MACHINES WITH MORE THAN THREE INDEX REGISTERS,
        !          2024: *           CP CAN BE TREATED SIMPLY AS AN INDEX REGISTER.
        !          2025: *           IN THIS CASE, THE FOLLOWING EQUIVALENCES APPLY.
        !          2026: *
        !          2027: *           LCP REG IS LIKE MOV REG,CP
        !          2028: *           SCP REG IS LIKE MOV CP,REG
        !          2029: *           LCW REG IS LIKE MOV (CP)+,REG
        !          2030: *           ICP     IS LIKE ICA CP
        !          2031: *
        !          2032: *           SINCE LCW IS ALLOWED TO DESTROY XL, THE FOLLOWING
        !          2033: *           IMPLEMENTATION USING A WORK LOCATION CP$$$ CAN
        !          2034: *           ALSO BE USED.
        !          2035: *
        !          2036: *           LCP  REG         MOV  REG,CP$$$
        !          2037: *
        !          2038: *           SCP  REG         MOV  CP$$$,REG
        !          2039: *
        !          2040: *           LCW  REG         MOV  CP$$$,XL
        !          2041: *                            MOV  (XL)+,REG
        !          2042: *                            MOV  XL,CP$$$
        !          2043: *
        !          2044: *           ICP              ICA  CP$$$
        !          2045: 
        !          2046: 
        !          2047: Page 45              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          2048: 
        !          2049: *
        !          2050: *      -4-  OPERATIONS ON SIGNED INTEGER VALUES
        !          2051: *
        !          2052: *      4.1  LDI  OPS         LOAD INTEGER ACCUMULATOR FROM OPS
        !          2053: *      4.2  ADI  OPS         ADD OPS TO INTEGER ACCUMULATOR
        !          2054: *      4.3  MLI  OPS         MULTIPLY INTEGER ACCUMULATOR BY OPS
        !          2055: *      4.4  SBI  OPS         SUBTRACT OPS FROM INT ACCUMULATOR
        !          2056: *      4.5  DVI  OPS         DIVIDE INTEGER ACCUMULATOR BY OPS
        !          2057: *      4.6  RMI  OPS         SET INT ACCUM TO MOD(INTACC,OPS)
        !          2058: *      4.7  STI  OPS         STORE INTEGER ACCUMULATOR AT OPS
        !          2059: *      4.8  NGI              NEGATE THE VALUE IN THE INTEGER
        !          2060: *                            ACCUMULATOR (CHANGE ITS SIGN)
        !          2061: *
        !          2062: *           THE EQUATION SATISFIED BY OPERANDS AND RESULTS OF
        !          2063: *           DVI AND RMI IS
        !          2064: *                  DIV = QOT * OPS + REM          WHERE
        !          2065: *           DIV = DIVIDEND IN INTEGER ACCUMULATOR
        !          2066: *           QOT = QUOTIENT LEFT IN IA BY DIV
        !          2067: *           OPS = THE DIVISOR
        !          2068: *           REM = REMAINDER LEFT IN IA BY RMI
        !          2069: *           THE SIGN OF THE RESULT OF DVI IS + IF (IA) AND (OPS)
        !          2070: *           HAVE THE SAME SIGN AND IS - IF THEY HAVE OPPOSITE
        !          2071: *           SIGNS. THE SIGN OF (IA) IS ALWAYS USED AS THE SIGN
        !          2072: *           OF THE RESULT OF REM.
        !          2073: *           ASSUMING IN EACH CASE THAT IA CONTAINS THE NUMBER
        !          2074: *           SPECIFIED IN PARENTHESES AND THAT SEVEN AND MSEVN
        !          2075: *           HOLD +7 AND -7 RESP. THE ALGORITHM IS ILLUSTRATED
        !          2076: *           BELOW.
        !          2077: *           (IA = 13)
        !          2078: *           DVI  SEVEN       IA = 1
        !          2079: *           RMI  SEVEN       IA = 6
        !          2080: *           DVI  MSEVN       IA = -1
        !          2081: *           RMI  MSEVN       IA = 6
        !          2082: *           (IA = -13)
        !          2083: *           DVI  SEVEN       IA = -1
        !          2084: *           RMI  SEVEN       IA = -6
        !          2085: *           DVI  MSEVN       IA = 1
        !          2086: *           RMI  MSEVN       IA = -6
        !          2087: 
        !          2088: 
        !          2089: Page 46              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          2090: 
        !          2091: *
        !          2092: *           THE ABOVE INSTRUCTIONS OPERATE ON A FULL RANGE OF
        !          2093: *           SIGNED INTEGER VALUES. WITH THE EXCEPTION OF LDI AND
        !          2094: *           STI, THESE INSTRUCTIONS MAY CAUSE INTEGER OVERFLOW
        !          2095: *           BY ATTEMPTING TO PRODUCE AN UNDEFINED OR OUT OF
        !          2096: *           RANGE RESULT IN WHICH CASE INTEGER OVERFLOW IS SET,
        !          2097: *           THE RESULT IN (IA) IS UNDEFINED AND THE FOLLOWING
        !          2098: *           INSTRUCTION MUST BE IOV OR INO.
        !          2099: *           PARTICULAR CARE MAY BE NEEDED ON TARGET MACHINES
        !          2100: *           HAVING DISTINCT OVERFLOW AND DIVIDE BY ZERO
        !          2101: *           CONDITIONS.
        !          2102: *
        !          2103: *      4.9  INO  PLBL        JUMP TO PLBL IF NO INTEGER OVERFLOW
        !          2104: *      4.10 IOV  PLBL        JUMP TO PLBL IF INTEGER OVERFLOW
        !          2105: *
        !          2106: *           THESE INSTRUCTIONS CAN ONLY OCCUR IMMEDIATELY
        !          2107: *           FOLLOWING AN INSTRUCTION WHICH CAN CAUSE INTEGER
        !          2108: *           OVERFLOW (ADI, SBI, MLI, DVI, RMI, NGI) AND
        !          2109: *           TEST THE RESULT OF THE PRECEDING INSTRUCTION.
        !          2110: *           IOV AND INO MAY NOT HAVE LABELS.
        !          2111: *
        !          2112: *      4.11 IEQ  PLBL        JUMP TO PLBL IF (IA) EQ 0
        !          2113: *      4.12 IGE  PLBL        JUMP TO PLBL IF (IA) GE 0
        !          2114: *      4.13 IGT  PLBL        JUMP TO PLBL IF (IA) GT 0
        !          2115: *      4.14 ILE  PLBL        JUMP TO PLBL IF (IA) LE 0
        !          2116: *      4.15 ILT  PLBL        JUMP TO PLBL IF (IA) LT 0
        !          2117: *      4.16 INE  PLBL        JUMP TO PLBL IF (IA) NE 0
        !          2118: *
        !          2119: *           THE ABOVE CONDITIONAL JUMP INSTRUCTIONS DO
        !          2120: *           NOT CHANGE THE CONTENTS OF THE ACCUMULATOR.
        !          2121: *           ON A ONES COMPLEMENT MACHINE, IT IS PERMISSIBLE TO
        !          2122: *           PRODUCE NEGATIVE ZERO IN IA PROVIDED THESE
        !          2123: *           INSTRUCTIONS OPERATE CORRECTLY WITH SUCH A VALUE.
        !          2124: 
        !          2125: 
        !          2126: Page 47              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          2127: 
        !          2128: *
        !          2129: *      -5-  OPERATIONS ON REAL VALUES
        !          2130: *
        !          2131: *      5.1  LDR  OPS         LOAD REAL ACCUMULATOR FROM OPS
        !          2132: *      5.2  STR  OPS         STORE REAL ACCUMULATOR AT OPS
        !          2133: *      5.3  ADR  OPS         ADD OPS TO REAL ACCUMULATOR
        !          2134: *      5.4  SBR  OPS         SUBTRACT OPS FROM REAL ACCUMULATOR
        !          2135: *      5.5  MLR  OPS         MULTIPLY REAL ACCUMULATOR BY OPS
        !          2136: *      5.6  DVR  OPS         DIVIDE REAL ACCUMULATOR BY OPS
        !          2137: *
        !          2138: *           IF THE RESULT OF ANY OF THE ABOVE OPERATIONS CAUSES
        !          2139: *           UNDERFLOW, THE RESULT YIELDED IS 0.0.
        !          2140: *
        !          2141: *           IF THE RESULT OF ANY OF THE ABOVE OPERATIONS IS
        !          2142: *           UNDEFINED OR OUT OF RANGE, REAL OVERFLOW IS SET,
        !          2143: *           THE CONTENTS OF (RA) ARE UNDEFINED AND THE FOLLOWING
        !          2144: *           INSTRUCTION MUST BE EITHER ROV OR RNO.
        !          2145: *           PARTICULAR CARE MAY BE NEEDED ON TARGET MACHINES
        !          2146: *           HAVING DISTINCT OVERFLOW AND DIVIDE BY ZERO
        !          2147: *           CONDITIONS.
        !          2148: *
        !          2149: *      5.7  ROV  PLBL        JUMP TO PLBL IF REAL OVERFLOW
        !          2150: *      5.8  RNO  PLBL        JUMP TO PLBL IF NO REAL OVERFLOW
        !          2151: *
        !          2152: *           THESE INSTRUCTIONS CAN ONLY OCCUR IMMEDIATELY
        !          2153: *           FOLLOWING AN INSTRUCTION WHICH CAN CAUSE REAL
        !          2154: *           OVERFLOW (ADR,SBR,MLR,DVR).
        !          2155: *
        !          2156: *      5.9  NGR              NEGATE REAL ACCUM (CHANGE SIGN)
        !          2157: *
        !          2158: *      5.10 REQ  PLBL        JUMP TO PLBL IF (RA) EQ 0.0
        !          2159: *      5.11 RGE  PLBL        JUMP TO PLBL IF (RA) GE 0.0
        !          2160: *      5.12 RGT  PLBL        JUMP TO PLBL IF (RA) GT 0.0
        !          2161: *      5.13 RLE  PLBL        JUMP TO PLBL IF (RA) LE 0.0
        !          2162: *      5.14 RLT  PLBL        JUMP TO PLBL IF (RA) LT 0.0
        !          2163: *      5.15 RNE  PLBL        JUMP TO PLBL IF (RA) NE 0.0
        !          2164: *
        !          2165: *           THE ABOVE CONDITIONAL INSTRUCTIONS DO NOT AFFECT
        !          2166: *           THE VALUE STORED IN THE REAL ACCUMULATOR.
        !          2167: *           ON A ONES COMPLEMENT MACHINE, IT IS PERMISSIBLE TO
        !          2168: *           PRODUCE NEGATIVE ZERO IN RA PROVIDED THESE
        !          2169: *           INSTRUCTIONS OPERATE CORRECTLY WITH SUCH A VALUE.
        !          2170: 
        !          2171: 
        !          2172: Page 48              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          2173: 
        !          2174: *
        !          2175: *      -6-  OPERATIONS ON CHARACTER VALUES
        !          2176: *
        !          2177: *           CHARACTER OPERATIONS EMPLOY THE CONCEPT OF A
        !          2178: *           CHARACTER POINTER WHICH USES EITHER
        !          2179: *           INDEX REGISTER XR OR XL (NOT XS).
        !          2180: *
        !          2181: *           A CHARACTER POINTER POINTS TO A SPECIFIC CHARACTER
        !          2182: *           IN A STRING OF CHARACTERS STORED CFP$C CHARS TO A
        !          2183: *           WORD. THE ONLY OPERATIONS PERMITTED ON A CHARACTER
        !          2184: *           POINTER ARE LCH AND SCH. IN PARTICULAR, A CHARACTER
        !          2185: *           POINTER MAY NOT EVEN BE MOVED WITH MOV.
        !          2186: *
        !          2187: *              RESTRICTION 1.
        !          2188: *              --------------
        !          2189: *           IT IS IMPORTANT WHEN CODING IN MINIMAL TO ENSURE
        !          2190: *           THAT NO ACTION OCCURRING BETWEEN THE INITIAL USE OF
        !          2191: *           PLC OR PSC AND THE EVENTUAL CLEARING OF XL OR XR ON
        !          2192: *           COMPLETION OF CHARACTER OPERATIONS CAN INITIATE A
        !          2193: *           GARBAGE COLLECTION. THE LATTER OF COURSE COULD CAUSE
        !          2194: *           THE ADDRESSED CHARACTERS TO BE MOVED LEAVING THE
        !          2195: *           CHARACTER POINTERS POINTING TO RUBBISH.
        !          2196: *
        !          2197: *              RESTRICTION 2.
        !          2198: *              --------------
        !          2199: *           A FURTHER RESTRICTION TO BE OBSERVED IN CODE
        !          2200: *           HANDLING CHARACTER STRINGS, IS THAT STRINGS BUILT
        !          2201: *           DYNAMICALLY SHOULD BE RIGHT PADDED WITH ZERO
        !          2202: *           CHARACTERS TO A FULL WORD BOUNDARY TO PERMIT EASY
        !          2203: *           HASHING AND USE OF CEQ OR CNE IN TESTING STRINGS
        !          2204: *           FOR EQUALITY.
        !          2205: *
        !          2206: *      6.1  PLC  X,OPV       PREPARE CH PTR FOR LCH,CMC,MVC,TRC
        !          2207: *
        !          2208: *      6.2  PSC  X,OPV       PREPARE CHAR. PTR FOR SCH,MVC.
        !          2209: *
        !          2210: *           OPV CAN BE OMITTED IF IT IS ZERO.
        !          2211: *           THE CHAR. INITIALLY ADDRESSED IS DETERMINED BY THE
        !          2212: *           WORD ADDRESS IN X AND THE INTEGER OFFSET OPV.
        !          2213: *           THERE IS AN AUTOMATIC IMPLIED OFFSET OF CFP$F BAUS.
        !          2214: *           CFP$F IS USED TO FORMALLY INTRODUCE INTO MINIMAL A
        !          2215: *           VALUE NEEDED IN TRANSLATING THESE OPCODES WHICH,
        !          2216: *           SINCE MINIMAL ITSELF DOES NOT PRESCRIBE A STRING
        !          2217: *           STRUCTURE IN DETAIL, DEPENDS ON THE CHOICE OF A DATA
        !          2218: *           STRUCTURE FOR STRINGS IN THE MINIMAL PROGRAM.
        !          2219: *           E.G. IF CFP$B = CFP$C = 3, CFP$F = 6, NUM01 = 1, XL
        !          2220: *           POINTS TO A SERIES OF 4 WORDS, ABC/DEF/GHI/JKL, THEN
        !          2221: *               PLC  XL,=NUM01
        !          2222: *           POINTS TO H.
        !          2223: 
        !          2224: 
        !          2225: Page 49              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          2226: 
        !          2227: *
        !          2228: *      -6- OPERATIONS ON CHARACTER VALUES (CONTINUED)
        !          2229: *
        !          2230: *      6.3  LCH  REG,OPC     LOAD CHARACTER INTO REG
        !          2231: *
        !          2232: *      6.4  SCH  REG,OPC     STORE CHARACTER FROM REG
        !          2233: *
        !          2234: *           THESE OPERATIONS ARE DEFINED SUCH THAT THE CHARACTER
        !          2235: *           IS RIGHT JUSTIFIED IN REGISTER REG WITH ZERO BITS TO
        !          2236: *           THE LEFT. AFTER LCH FOR EXAMPLE, IT IS LEGITIMATE
        !          2237: *           TO REGARD REG AS CONTAINING THE ORDINAL INTEGER
        !          2238: *           CORRESPONDING TO THE CHARACTER.
        !          2239: *
        !          2240: *           OPC IS ONE OF THE FOLLOWING THREE POSSIBILITIES.
        !          2241: *
        !          2242: *           (X)              THE CHARACTER POINTED TO BY THE
        !          2243: *                            CHARACTER POINTER IN X. THE
        !          2244: *                            CHARACTER POINTER IS NOT CHANGED.
        !          2245: *
        !          2246: *           (X)+             SAME CHARACTER AS (X) BUT THE
        !          2247: *                            CHARACTER POINTER IS INCREMENTED
        !          2248: *                            TO POINT TO THE NEXT CHARACTER
        !          2249: *                            FOLLOWING EXECUTION.
        !          2250: *
        !          2251: *           -(X)             THE CHARACTER POINTER IS DECRE-
        !          2252: *                            MENTED BEFORE ACCESSING THE
        !          2253: *                            CHARACTER SO THAT THE PREVIOUS
        !          2254: *                            CHARACTER IS REFERENCED.
        !          2255: *
        !          2256: *      6.5  CSC  X           COMPLETE STORE CHARACTERS
        !          2257: *
        !          2258: *           THIS INSTRUCTION MARKS COMPLETION OF A
        !          2259: *           PSC,SCH,SCH,...,SCH SEQUENCE INITIATED BY
        !          2260: *           A  PSC  X INSTRUCTION. NO MORE SCH INSTRUCTIONS
        !          2261: *           USING  X  SHOULD BE OBEYED UNTIL ANOTHER PSC IS
        !          2262: *           OBEYED. IT IS PROVIDED SOLELY AS AN EFFICIENCY AID
        !          2263: *           ON MACHINES WITHOUT CHARACTER ORDERS SINCE IT
        !          2264: *           PERMITS USE OF REGISTER BUFFERING OF CHARS IN SCH
        !          2265: *           SEQUENCES. WHERE CSC IS NOT A NO-OP, IT MUST OBSERVE
        !          2266: *           RESTRICTION 2. (E.G. IN SPITBOL, ALOCS ZEROISES THE
        !          2267: *           LAST WORD OF A STRING FRAME PRIOR TO SCH SEQUENCE
        !          2268: *           BEING STARTED SO CSC MUST NOT NULLIFY THIS ACTION.)
        !          2269: *
        !          2270: *           THE FOLLOWING INSTRUCTIONS ARE USED TO COMPARE
        !          2271: *           TWO WORDS CONTAINING CFP$C CHARACTERS.
        !          2272: *           COMPARISONS DISTINCT FROM BEQ,BNE ARE PROVIDED AS
        !          2273: *           ON SOME TARGET MACHINES, THE POSSIBILITY OF THE SIGN
        !          2274: *           BIT BEING SET MAY REQUIRE SPECIAL ACTION.
        !          2275: *           NOTE THAT RESTRICTION 2 ABOVE, EASES USE OF THESE
        !          2276: *           ORDERS IN TESTING COMPLETE STRINGS FOR EQUALITY,
        !          2277: *           SINCE WHOLE WORD TESTS ARE POSSIBLE.
        !          2278: *
        !          2279: *      6.6  CEQ  OPW,OPW,PLBL JUMP TO PLBL IF OPW EQ OPW
        !          2280: *      6.7  CNE  OPW,OPW,PLBL JUMP TO PLBL IF OPW NE OPW
        !          2281: 
        !          2282: 
        !          2283: Page 50              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          2284: 
        !          2285: *
        !          2286: *      -6- OPERATIONS ON CHARACTER VALUES (CONTINUED)
        !          2287: *
        !          2288: *      6.8  CMC  PLBL,PLBL   COMPARE CHARACTERS
        !          2289: *
        !          2290: *           CMC IS USED TO COMPARE TWO CHARACTER STRINGS. BEFORE
        !          2291: *           EXECUTING CMC, REGISTERS ARE SET UP AS FOLLOWS.
        !          2292: *           (XL)             CHARACTER PTR FOR FIRST STRING
        !          2293: *           (XR)             CHARACTER POINTER FOR SECOND STRING
        !          2294: *           (WA)             CHARACTER COUNT (MUST BE .GT. ZERO)
        !          2295: *           XL AND XR SHOULD HAVE BEEN PREPARED BY PLC.
        !          2296: *           CONTROL PASSES TO FIRST PLBL IF THE FIRST STRING
        !          2297: *           IS LEXICALLY LESS THAN THE SECOND STRING, AND TO
        !          2298: *           THE SECOND PLBL IF THE FIRST STRING IS LEXICALLY
        !          2299: *           GREATER. CONTROL PASSES TO THE FOLLOWING INSTRUCTION
        !          2300: *           IF THE STRINGS ARE IDENTICAL. AFTER EXECUTING THIS
        !          2301: *           INSTRUCTION, THE VALUES OF XR AND XL ARE SET TO ZERO
        !          2302: *           AND THE VALUE IN (WA) IS UNDEFINED.
        !          2303: *           ARGUMENTS TO CMC MAY BE COMPLETE OR PARTIAL
        !          2304: *           STRINGS, SO MAKING OPTIMISATION TO USE WHOLE WORD
        !          2305: *           COMPARISONS DIFFICULT (DEPENDENT IN GENERAL ON
        !          2306: *           SHIFTS AND MASKING).
        !          2307: *
        !          2308: *      6.9  TRC              TRANSLATE CHARACTERS
        !          2309: *
        !          2310: *           TRC IS USED TO TRANSLATE A CHARACTER STRING USING A
        !          2311: *           SUPPLIED TRANSLATION TABLE. BEFORE EXECUTING TRC THE
        !          2312: *           REGISTERS ARE SET AS FOLLOWS.
        !          2313: *           (XL)             CHAR PTR TO STRING TO BE TRANSLATED
        !          2314: *           (XR)             CHAR PTR TO TRANSLATE TABLE
        !          2315: *           (WA)             LENGTH OF STRING TO BE TRANSLATED
        !          2316: *           XL AND XR SHOULD HAVE BEEN PREPARED BY PLC.
        !          2317: *           THE TRANSLATE TABLE CONSISTS OF CFP$A CONTIGUOUS
        !          2318: *           CHARACTERS GIVING THE TRANSLATIONS OF THE CFP$A
        !          2319: *           CHARACTERS IN THE ALPHABET. ON COMPLETION, (XR) AND
        !          2320: *           (XL) ARE SET TO ZERO AND (WA) IS UNDEFINED.
        !          2321: *
        !          2322: *      6.10 CLU  W           CONVERT LOWER TO UPPER CASE
        !          2323: *      6.11 CUL  W           CONVERT UPPER TO LOWER CASE
        !          2324: *
        !          2325: *      THIS PAIR MAY BE USED FOR CASE CONVERSION OF CHARACTERS
        !          2326: *      IN W, WHERE THE CHARACTER SET SUPPORTS BOTH CASES. THEY
        !          2327: *      ARE NOT NEEDED IF THERE IS A SIMPLE RELATION BETWEEN THE
        !          2328: *      CASES AS IN ASCII AND EBCDIC. IN THE CASE OF SPITBOL THIS
        !          2329: *      ASSUMPTION IS MADE BY DEFAULT (SEE SYMBOL DFA$A) BUT THE
        !          2330: *      CODE INCLUDES AN OPTION SELECTABLE BY CONDITIONAL
        !          2331: *      ASSEMBLY ON .CSCV TO USE THESE OPCODES INSTEAD IF NEEDED
        !          2332: *      OR PREFERRED.
        !          2333: 
        !          2334: 
        !          2335: Page 51              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          2336: 
        !          2337: *
        !          2338: *      -7-  OPERATIONS ON BIT STRING VALUES
        !          2339: *
        !          2340: *      7.1  ANB  OPW,W       AND BIT STRING VALUES
        !          2341: *      7.2  ORB  OPW,W       OR BIT STRING VALUES
        !          2342: *      7.3  XOB  OPW,W       EXCLUSIVE OR BIT STRING VALUES
        !          2343: *
        !          2344: *           IN THE ABOVE OPERATIONS, THE LOGICAL CONNECTIVE IS
        !          2345: *           APPLIED SEPARATELY TO EACH OF THE CFP$N BITS.
        !          2346: *           THE RESULT IS STORED IN THE SECOND OPERAND LOCATION.
        !          2347: *
        !          2348: *      7.4  CMB  W           COMPLEMENT ALL BITS IN OPW
        !          2349: *
        !          2350: *      7.5  RSH  W,VAL       RIGHT SHIFT BY VAL BITS
        !          2351: *      7.6  LSH  W,VAL       LEFT SHIFT BY VAL BITS
        !          2352: *      7.7  RSX  W,X         RIGHT SHIFT W NUMBER OF BITS IN X
        !          2353: *      7.8  LSX  W,X         LEFT SHIFT W NUMBER OF BITS IN X
        !          2354: *
        !          2355: *           THE ABOVE SHIFTS ARE LOGICAL SHIFTS IN WHICH BITS
        !          2356: *           SHIFTED OUT ARE LOST AND ZERO BITS SUPPLIED AS
        !          2357: *           REQUIRED. THE SHIFT COUNT IS IN THE RANGE 0-CFP$N.
        !          2358: *
        !          2359: *      7.9  NZB  W,PLBL      JUMP TO PLBL IF W IS NOT
        !          2360: *                            ALL ZERO BITS.
        !          2361: *
        !          2362: *      7.10 ZRB  W,PLBL      JUMP TO PLBL IF W IS ALL ZERO BITS
        !          2363: *
        !          2364: *      7.11 ZGB  OPN         ZEROISE GARBAGE BITS
        !          2365: *
        !          2366: *           OPN CONTAINS A BIT STRING REPRESENTING A WORD
        !          2367: *           OF CHARACTERS FROM A STRING OR SOME FUNCTION
        !          2368: *           FORMED FROM SUCH CHARACTERS (E.G. AS A RESULT OF
        !          2369: *           HASHING). ON A MACHINE WHERE THE WORD SIZE IS NOT A
        !          2370: *           MULTIPLE OF THE CHARACTER SIZE, SOME BITS IN REG MAY
        !          2371: *           BE UNDEFINED. THIS OPCODE REPLACES SUCH BITS BY THE
        !          2372: *           ZERO BIT. ZGB IS A NO-OP IF THE WORD SIZE IS A
        !          2373: *           MULTIPLE OF THE CHARACTER SIZE.
        !          2374: 
        !          2375: 
        !          2376: Page 52              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          2377: 
        !          2378: *
        !          2379: *      -8-  CONVERSION INSTRUCTIONS
        !          2380: *
        !          2381: *           THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION
        !          2382: *           BETWEEN LENGTHS IN BAUS AND LENGTHS IN WORDS.
        !          2383: *
        !          2384: *      8.1  WTB  REG         CONVERT REG FROM WORDS TO BAUS.
        !          2385: *                            THAT IS, MULTIPLY BY CFP$B. THIS IS
        !          2386: *                            A NO-OP IF CFP$B IS ONE.
        !          2387: *
        !          2388: *      8.2  BTW  REG         CONVERT REG FROM BAUS TO WORDS
        !          2389: *                            BY DIVIDING REG BY CFP$B DISCARDING
        !          2390: *                            THE FRACTION. NO-OP IF CFP$B IS ONE
        !          2391: *
        !          2392: *           THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION
        !          2393: *           OF ONE WORD INTEGER VALUES (ADDRESSES) TO AND
        !          2394: *           FROM THE FULL SIGNED INTEGER FORMAT.
        !          2395: *
        !          2396: *      8.3  MTI  OPN         THE VALUE OF OPN (AN ADDRESS)
        !          2397: *                            IS MOVED AS A POSITIVE INTEGER
        !          2398: *                            TO THE INTEGER ACCUMULATOR.
        !          2399: *
        !          2400: *      8.4  MFI  OPN,PLBL    THE VALUE CURRENTLY STORED IN THE
        !          2401: *                            INTEGER ACCUMULATOR IS MOVED
        !          2402: *                            TO OPN AS AN ADDRESS IF IT IS IN
        !          2403: *                            THE RANGE 0 TO CFP$M INCLUSIVE.
        !          2404: *                            IF THE ACCUMULATOR VALUE IS
        !          2405: *                            OUTSIDE THIS RANGE, THEN THE RESULT
        !          2406: *                            IN OPN IS UNDEFINED AND CONTROL IS
        !          2407: *                            PASSED TO PLBL. MFI DESTROYS THE
        !          2408: *                            VALUE OF (IA) WHETHER OR NOT
        !          2409: *                            INTEGER OVERFLOW IS SIGNALLED.
        !          2410: *                            PLBL MAY BE OMITTED IF OVERFLOW
        !          2411: *                            IS IMPOSSIBLE.
        !          2412: *
        !          2413: *           THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION
        !          2414: *           BETWEEN REAL VALUES AND INTEGER VALUES.
        !          2415: *
        !          2416: *      8.5  ITR              CONVERT INTEGER VALUE IN INTEGER
        !          2417: *                            ACCUMULATOR TO REAL AND STORE IN
        !          2418: *                            REAL ACCUMULATOR (MAY LOSE
        !          2419: *                            PRECISION IN SOME CASES)
        !          2420: *
        !          2421: *      8.6  RTI  PLBL        CONVERT THE REAL VALUE IN RA TO
        !          2422: *                            AN INTEGER AND PLACE RESULT IN IA.
        !          2423: *                            CONVERSION IS BY TRUNCATION OF THE
        !          2424: *                            FRACTION - NO ROUNDING OCCURS.
        !          2425: *                            JUMP TO PLBL IF OUT OF RANGE. (RA)
        !          2426: *                            IS NOT CHANGED IN EITHER CASE.
        !          2427: *                            PLBL MAY BE OMITTED IF OVERFLOW
        !          2428: *                            IS IMPOSSIBLE.
        !          2429: 
        !          2430: 
        !          2431: Page 53              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          2432: 
        !          2433: *
        !          2434: *      -8-  CONVERSION INSTRUCTIONS (CONTINUED)
        !          2435: *
        !          2436: *           THE FOLLOWING INSTRUCTIONS PROVIDE FOR COMPUTING
        !          2437: *           THE LENGTH OF STORAGE REQUIRED FOR A TEXT STRING.
        !          2438: *
        !          2439: *      8.7  CTW  W,VAL       THIS INSTRUCTION COMPUTES THE SUM
        !          2440: *                            (NUMBER OF WORDS REQUIRED TO STORE
        !          2441: *                            W CHARACTERS) + (VAL). THE SUM
        !          2442: *                            IS STORED IN W.
        !          2443: *                            FOR EXAMPLE, IF CFP$C IS 5, AND WA
        !          2444: *                            CONTAINS 32, THEN CTW WA,2
        !          2445: *                            GIVES A RESULT OF 9 IN WA.
        !          2446: *
        !          2447: *      8.8  CTB  W,VAL       CTB IS EXACTLY LIKE CTW EXCEPT THAT
        !          2448: *                            THE RESULT IS IN BAUS. IT HAS THE
        !          2449: *                            SAME EFFECT AS CTW W,VAL  WTB W
        !          2450: *
        !          2451: *      8.9  BTC  W           COMPUTE THE NUMBER OF CHARACTERS
        !          2452: *                            WHICH CAN BE STORED IN (W) BAUS,
        !          2453: *                            PLACING THE RESULT IN W.
        !          2454: *
        !          2455: *      8.10 WTC  W           COMPUTE THE NUMBER OF CHARACTERS
        !          2456: *                            WHICH CAN BE STORED IN (W) WORDS,
        !          2457: *                            PLACING THE RESULT IN W.
        !          2458: *
        !          2459: *           THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION
        !          2460: *           FROM INTEGERS TO AND FROM NUMERIC DIGIT CHARACTERS
        !          2461: *           FOR USE IN NUMERIC CONVERSION ROUTINES. THEY EMPLOY
        !          2462: *           NEGATIVE INTEGER VALUES TO ALLOW FOR PROPER
        !          2463: *           CONVERSION OF NUMBERS WHICH CANNOT BE COMPLEMENTED.
        !          2464: *
        !          2465: *      8.11 CVM  PLBL        CONVERT BY MULTIPLICATION
        !          2466: *
        !          2467: *           THE INTEGER ACCUMULATOR, WHICH IS ZERO OR NEGATIVE,
        !          2468: *           IS MULTIPLIED BY 10. WB CONTAINS THE CHARACTER
        !          2469: *           CODE FOR A DIGIT. THE VALUE OF THIS DIGIT IS THEN
        !          2470: *           SUBTRACTED FROM THE RESULT. IF THE RESULT IS OUT OF
        !          2471: *           RANGE, THEN CONTROL IS PASSED TO PLBL WITH THE
        !          2472: *           RESULT IN (IA) UNDEFINED. EXECUTION OF CVM LEAVES
        !          2473: *           THE RESULT IN (WB) UNDEFINED.
        !          2474: *
        !          2475: *      8.12 CVD              CONVERT BY DIVISION
        !          2476: *
        !          2477: *           THE INTEGER ACCUMULATOR, WHICH IS ZERO OR NEGATIVE,
        !          2478: *           IS DIVIDED BY 10. THE QUOTIENT (ZERO OR NEGATIVE)
        !          2479: *           IS REPLACED IN THE ACCUMULATOR. THE REMAINDER IS
        !          2480: *           CONVERTED TO THE CHARACTER CODE OF A DIGIT AND
        !          2481: *           PLACED IN WA. FOR EXAMPLE, AN OPERAND OF -523 GIVES
        !          2482: *           A QUOTIENT OF -52 AND A REMAINDER IN WA OF CH$D3.
        !          2483: 
        !          2484: 
        !          2485: Page 54              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          2486: 
        !          2487: *
        !          2488: *      -9-  BLOCK MOVE INSTRUCTIONS
        !          2489: *
        !          2490: *      THE FOLLOWING INSTRUCTIONS ARE USED FOR TRANSFERRING
        !          2491: *      DATA FROM ONE AREA OF MEMORY TO ANOTHER IN BLOCKS.
        !          2492: *      THEY CAN BE IMPLEMENTED WITH THE INDICATED SERIES OF
        !          2493: *      OTHER MACRO-INSTRUCTIONS, BUT MORE EFFICIENT IMPLE-
        !          2494: *      MENTATIONS WILL BE POSSSIBLE ON MOST MACHINES.
        !          2495: *      BEFORE OBEYING ANY OF THESE ORDERS WA, XL, XR SHOULD HAVE
        !          2496: *      BEEN SET UP (USING PLC, PSC FOR THE CHARACTER MOVES). THE
        !          2497: *      FINAL VALUE OF WA IS UNDEFINED.
        !          2498: *
        !          2499: *      9.1  MVC              MOVE CHARACTERS
        !          2500: *
        !          2501: *           MVC IS EQUIVALENT TO THE SEQUENCE
        !          2502: *
        !          2503: *                  MOV  WB,DUMPB
        !          2504: *                  LCT  WA,WA
        !          2505: *           LOOPC  LCH  WB,(XL)+
        !          2506: *                  SCH  WB,(XR)+
        !          2507: *                  BCT  WA,LOOPC
        !          2508: *                  CSC  XR
        !          2509: *                  MOV  DUMPB,WB
        !          2510: *
        !          2511: *           THE CHARACTER POINTERS ARE BUMPED AS INDICATED
        !          2512: *           AND THE FINAL VALUE OF WA IS UNDEFINED.
        !          2513: *
        !          2514: *      9.2  MCB              MOVE CHARACTERS BACKWARDS
        !          2515: *
        !          2516: *           MCB IS EQUIVALENT TO THE SEQUENCE
        !          2517: *
        !          2518: *                  MOV  WB,DUMPB
        !          2519: *                  LCT  WA,WA
        !          2520: *           LOOPC  LCH  WB,-(XL)
        !          2521: *                  SCH  WB,-(XR)
        !          2522: *                  BCT  WA,LOOPC
        !          2523: *                  CSC  XR
        !          2524: *                  MOV  DUMPB,WB
        !          2525: *
        !          2526: *           THE CHARACTER POINTERS ARE BUMPED AS INDICATED
        !          2527: *           AND THE FINAL VALUE OF WA IS UNDEFINED.
        !          2528: 
        !          2529: 
        !          2530: Page 55              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          2531: 
        !          2532: *
        !          2533: *      9.3  MVW              MOVE WORDS
        !          2534: *
        !          2535: *           MVW IS EQUIVALENT TO THE SEQUENCE
        !          2536: *
        !          2537: *           LOOPW  MOV  (XL)+,(XR)+
        !          2538: *                  DCA  WA               WA = BAUS TO MOVE
        !          2539: *                  BNZ  WA,LOOPW
        !          2540: *
        !          2541: *           NOTE THAT THIS IMPLIES THAT THE VALUE IN WA IS THE
        !          2542: *           LENGTH IN BAUS WHICH IS A MULTIPLE OF CFP$B.
        !          2543: *           THE INITIAL ADDRESSES IN XR,XL ARE WORD ADDRESSES.
        !          2544: *           AS INDICATED, THE FINAL XR,XL VALUES POINT PAST THE
        !          2545: *           NEW AND OLD REGIONS OF MEMORY RESPECTIVELY.
        !          2546: *           THE FINAL VALUE OF WA IS UNDEFINED.
        !          2547: *
        !          2548: *      9.4  MWB              MOVE WORDS BACKWARDS
        !          2549: *
        !          2550: *           MWB IS EQUIVALENT TO THE SEQUENCE
        !          2551: *
        !          2552: *           LOOPB  MOV  -(XL),-(XR)
        !          2553: *                  DCA  WA               WA = BAUS TO MOVE
        !          2554: *                  BNZ  WA,LOOPB
        !          2555: *
        !          2556: *           THERE IS A REQUIREMENT THAT THE INITIAL VALUE IN XL
        !          2557: *           BE AT LEAST 256 LESS THAN THE VALUE IN XR. THIS
        !          2558: *           ALLOWS AN IMPLEMENTATION IN WHICH CHUNKS OF 256
        !          2559: *           BAUS ARE MOVED FORWARD (IBM 360, ICL 1900).
        !          2560: *           THE FINAL VALUE OF WA IS UNDEFINED.
        !          2561: 
        !          2562: 
        !          2563: Page 56              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          2564: 
        !          2565: *
        !          2566: *      -10- OPERATIONS CONNECTED WITH THE STACK
        !          2567: *
        !          2568: *      THE STACK IS AN AREA IN MEMORY WHICH IS DEDICATED FOR USE
        !          2569: *      IN CONJUNCTION WITH THE STACK POINTER REGISTER (XS). AS
        !          2570: *      PREVIOUSLY DESCRIBED, IT IS USED BY THE JSR AND EXI
        !          2571: *      INSTRUCTIONS AND MAY BE USED FOR STORAGE OF ANY OTHER
        !          2572: *      DATA AS REQUIRED.
        !          2573: *
        !          2574: *      THE STACK BUILDS EITHER WAY IN MEMORY AND AN IMPORTANT
        !          2575: *      RESTRICTION IS THAT THE VALUE IN (XS) MUST BE THE ADDRESS
        !          2576: *      OF THE STACK FRONT AT ALL TIMES SINCE
        !          2577: *      SOME IMPLEMENTATIONS MAY RANDOMLY DESTROY STACK LOCATIONS
        !          2578: *      BEYOND (XS).
        !          2579: *
        !          2580: *      THE STARTING STACK BASE ADDRESS IS PASSED
        !          2581: *      IN (XS) AT THE START OF EXECUTION. DURING EXECUTION IT
        !          2582: *      IS NECESSARY TO MAKE SURE THAT THE STACK DOES NOT
        !          2583: *      OVERFLOW. THIS IS ACHIEVED BY EXECUTING THE FOLLOWING
        !          2584: *      INSTRUCTION PERIODICALLY.
        !          2585: *
        !          2586: *      10.1 CHK              CHECK STACK OVERFLOW
        !          2587: *
        !          2588: *      AFTER SUCCESSFULLY EXECUTING CHK, IT IS PERMISSIBLE TO
        !          2589: *      USE UP TO 100 ADDITIONAL WORDS BEFORE ISSUING ANOTHER CHK
        !          2590: *      THUS CHK NEED NOT BE ISSUED EVERY TIME THE STACK IS
        !          2591: *      EXPANDED. IN SOME IMPLEMENTATIONS, THE CHECKING MAY BE
        !          2592: *      AUTOMATIC AND CHK WILL HAVE NO EFFECT. FOLLOWING THE
        !          2593: *      ABOVE RULE MAKES SURE THAT THE PROGRAM WILL OPERATE
        !          2594: *      CORRECTLY IN IMPLEMENTATIONS WITH NO AUTOMATIC CHECK.
        !          2595: *
        !          2596: *      IF STACK OVERFLOW OCCURS (DETECTED EITHER AUTOMATICALLY
        !          2597: *      OR BY A CHK INSTRUCTION), THEN CONTROL IS PASSED TO THE
        !          2598: *      STACK OVERFLOW SECTION (SEE PROGRAM FORM). NOTE THAT THIS
        !          2599: *      TRANSFER MAY TAKE PLACE FOLLOWING ANY INSTRUCTION WHICH
        !          2600: *      STORES DATA AT A NEW LOCATION ON THE STACK.
        !          2601: *      AFTER STACK OVERFLOW, STACK IS ARBITRARILY POPPED
        !          2602: *      TO GIVE SOME SPACE IN WHICH THE ERROR PROCEDURE MAY
        !          2603: *      OPERATE. OTHERWISE A LOOP OF STACK OVERFLOWS MAY OCCUR.
        !          2604: 
        !          2605: 
        !          2606: Page 57              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          2607: 
        !          2608: *
        !          2609: *      -11- DATA GENERATION INSTRUCTIONS
        !          2610: *
        !          2611: *      THE FOLLOWING INSTRUCTIONS ARE USED TO GENERATE CONSTANT
        !          2612: *      VALUES IN THE CONSTANT SECTION AND ALSO TO ASSEMBLE
        !          2613: *      INITIAL VALUES IN THE WORKING STORAGE SECTION. THEY
        !          2614: *      MAY NOT APPEAR EXCEPT IN THESE TWO SECTIONS.
        !          2615: *
        !          2616: *      11.1 DAC  ADDR        ASSEMBLE ADDRESS CONSTANT.
        !          2617: *                            GENERATES ONE WORD CONTAINING THE
        !          2618: *                            SPECIFIED ONE WORD INTEGER
        !          2619: *                            VALUE (ADDRESS).
        !          2620: *
        !          2621: *      11.2 DIC  INTEGER     GENERATES AN INTEGER VALUE WHICH
        !          2622: *                            OCCUPIES CFP$I CONSECUTIVE WORDS.
        !          2623: *                            THE OPERAND IS A DIGIT STRING WITH
        !          2624: *                            A REQUIRED LEADING SIGN.
        !          2625: *
        !          2626: *      11.3 DRC  REAL        ASSEMBLES A REAL CONSTANT WHICH
        !          2627: *                            OCCUPIES CFP$R CONSECUTIVE WORDS.
        !          2628: *                            THE OPERAND FORM MUST OBEY THE
        !          2629: *                            RULES FOR A FORTRAN REAL CONSTANT
        !          2630: *                            WITH THE EXTRA REQUIREMENT THAT A
        !          2631: *                            LEADING SIGN BE PRESENT.
        !          2632: *
        !          2633: *      11.4 DTC  DTEXT       DEFINE TEXT CONSTANT. DTEXT
        !          2634: *                            IS STARTED AND ENDED WITH ANY
        !          2635: *                            CHARACTER NOT CONTAINED IN THE
        !          2636: *                            CHARACTERS TO BE ASSEMBLED. THE
        !          2637: *                            CONSTANT OCCUPIES CONSECUTIVE WORDS
        !          2638: *                            AS DICTATED BY THE CONFIGURATION
        !          2639: *                            PARAMETER CFP$C. ANY UNUSED CHARS
        !          2640: *                            IN THE LAST WORD ARE RIGHT FILLED
        !          2641: *                            WITH ZEROS (I.E. THE CHARACTER
        !          2642: *                            WHOSE INTERNAL CODE IS ZERO).
        !          2643: *                            THE STRING CONTAINS A SEQUENCE OF
        !          2644: *                            LETTERS, DIGITS, BLANKS AND ANY OF
        !          2645: *                            THE FOLLOWING SPECIAL CHARACTERS.
        !          2646: *                            =,$.(*)/+-
        !          2647: *                            NO OTHER CHARACTERS
        !          2648: *                            MAY BE USED IN A DTEXT OPERAND.
        !          2649: *
        !          2650: *      11.5 DBC  VAL         ASSEMBLE BIT STRING CONSTANT. THE
        !          2651: *                            OPERAND IS A POSITIVE INTEGER
        !          2652: *                            VALUE WHICH IS INTERPRETED IN
        !          2653: *                            BINARY, RIGHT JUSTIFIED AND LEFT
        !          2654: *                            FILLED WITH ZERO BITS. THUS 5 WOULD
        !          2655: *                            IMPLY THE BIT STRING VALUE 00..101.
        !          2656: *
        !          2657: *      11.6 DDC  DTEXT       DEFINE DISPLAY CONSTANT.  IDENTICAL
        !          2658: *                            TO DTC (SEE ABOVE), HOWEVER ON
        !          2659: *                            SYSTEMS SUPPORTING LOWER CASE,
        !          2660: *                            THE TRANSLATION IS FREE TO MIX
        !          2661: *                            CASES IN A MANNER APPROPRIATE
        !          2662: *                            TO THE TARGET SYSTEM.
        !          2663: 
        !          2664: 
        !          2665: Page 58              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          2666: 
        !          2667: *
        !          2668: *      -12- SYMBOL DEFINITION INSTRUCTIONS
        !          2669: *
        !          2670: *      THE FOLLOWING INSTRUCTION IS USED TO DEFINE SYMBOLS
        !          2671: *      IN THE DEFINITIONS SECTION. IT MAY NOT BE USED ELSEWHERE.
        !          2672: *
        !          2673: *      12.1 EQU  EQOP        DEFINE SYMBOL
        !          2674: *
        !          2675: *           THE SYMBOL WHICH APPEARS IN THE LABEL FIELD IS
        !          2676: *           DEFINED TO HAVE THE ABSOLUTE VALUE GIVEN
        !          2677: *           BY THE EQOP OPERAND. A GIVEN SYMBOL MAY BE DEFINED
        !          2678: *           ONLY ONCE IN THIS MANNER, AND ANY SYMBOLS OCCURING
        !          2679: *           IN EQOP MUST BE PREVIOUSLY DEFINED.
        !          2680: *
        !          2681: *           THE FOLLOWING ARE THE POSSIBILITIES FOR EQOP
        !          2682: *
        !          2683: *           VAL              THE INDICATED VALUE IS USED
        !          2684: *
        !          2685: *           VAL+VAL          THE SUM OF THE TWO VALUES IS USED.
        !          2686: *                            THIS SUM MUST NOT EXCEED CFP$M
        !          2687: *
        !          2688: *           VAL-VAL          THE DIFFERENCE BETWEEN THE TWO
        !          2689: *                            VALUES (MUST BE POSITIVE) IS USED.
        !          2690: *
        !          2691: *           *                THIS FORMAT DEFINES THE LABEL BY
        !          2692: *                            USING A VALUE SUPPLIED BY THE
        !          2693: *                            MINIMAL TRANSLATOR. VALUES ARE
        !          2694: *                            REQUIRED FOR THE
        !          2695: *           CFP$X            (CONFIGURATION PARAMETERS)
        !          2696: *           E$XXX            (ENVIRONMENT PARAMETERS)
        !          2697: *           CH$XX            (CHARACTER CODES).
        !          2698: *                            IN ORDER FOR A TRANSLATOR TO
        !          2699: *                            HANDLE THIS FORMAT CORRECTLY THE
        !          2700: *                            DEFINITIONS SECTION MUST BE
        !          2701: *                            CONSULTED FOR DETAILS OF REQUIRED
        !          2702: *                            SYMBOLS AS LISTED AT THE FRONT OF
        !          2703: *                            THE SECTION.
        !          2704: 
        !          2705: 
        !          2706: Page 59              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          2707: 
        !          2708: *
        !          2709: *      SYMBOL DEFINITION INSTRUCTIONS (CONTINUED)
        !          2710: *
        !          2711: *      THE FOLLOWING INSTRUCTIONS MAY BE USED TO DEFINE SYMBOLS
        !          2712: *      IN THE PROCEDURE SECTION. THEY MAY NOT BE USED IN
        !          2713: *      ANY OTHER PART OF THE PROGRAM.
        !          2714: *
        !          2715: *      12.2 EXP  PTYP,INT    DEFINE EXTERNAL PROCEDURE
        !          2716: *
        !          2717: *           EXP DEFINES THE SYMBOL IN THE LABEL FIELD AS A PLBL
        !          2718: *           NAMING AN EXTERNAL PROCEDURE WHICH CAN BE
        !          2719: *           REFERENCED IN A SUBSEQUENT JSR INSTRUCTION. THE
        !          2720: *           CODING FOR THE PROCEDURE IS EXTERNAL TO THE
        !          2721: *           CODING OF THE SOURCE PROGRAM IN THIS LANGUAGE.
        !          2722: *           THE CODE FOR EXTERNAL PROCEDURES MAY BE
        !          2723: *           REFERRED TO COLLECTIVELY AS THE OPERATING SYSTEM
        !          2724: *           INTERFACE, OR MORE BRIEFLY, OSINT, AND WILL
        !          2725: *           FREQUENTLY BE A SEPARATELY COMPILED SEGMENT OF CODE
        !          2726: *           LOADED WITH SPITBOL TO PRODUCE A COMPLETE SYSTEM.
        !          2727: *
        !          2728: *           PTYP SPECIFIES THE PROCEDURE TYPE AND INT DESIGNATES
        !          2729: *           THE NUMBER OF EXIT PARAMETERS.
        !          2730: *
        !          2731: *      12.3 INP  PTYP,INT    DEFINE INTERNAL PROCEDURE
        !          2732: *
        !          2733: *           INP DEFINES THE SYMBOL IN THE LABEL FIELD AS A PLBL
        !          2734: *           NAMING AN INTERNAL PROCEDURE AND GIVES
        !          2735: *           ITS TYPE AND NUMBER OF EXIT PARAMETERS. THE LABEL
        !          2736: *           CAN BE REFERENCED IN JSR INSTRUCTIONS AND
        !          2737: *           IT MUST APPEAR LABELLING A PRC INSTRUCTION IN THE
        !          2738: *           PROGRAM SECTION.
        !          2739: *
        !          2740: *      12.4 INR              DEFINE INTERNAL ROUTINE
        !          2741: *
        !          2742: *           INR DEFINES THE SYMBOL IN THE LABEL FIELD AS A RLBL
        !          2743: *           NAMING AN INTERNAL ROUTINE. THE
        !          2744: *           LABEL MAY BE REFERENCED IN ANY TYPE OF BRANCH ORDER
        !          2745: *           AND IT MUST APPEAR LABELLING A RTN INSTRUCTION IN
        !          2746: *           THE PROGRAM SECTION.
        !          2747: *
        !          2748: *      12.5 GLB  DEFINE GLOBAL SYMBOL
        !          2749: *
        !          2750: *           GLB DEFINES THE SYMBOL IN THE LABEL FIELD AS A GLBL
        !          2751: *           NAMING THE DESTINATION OF A JMG (JUMP GLOBAL) ORDER.
        !          2752: *           THE SYMBOL MAY ALSO BE THE DESTINATION OF LOCAL
        !          2753: *           BRANCHES OF ALL TYPES.
        !          2754: *           THE LABEL MUST APPEAR IN THE PROCEDURE SECTION
        !          2755: *           LABELLING AN INSTRUCTION.
        !          2756: 
        !          2757: 
        !          2758: Page 60              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          2759: 
        !          2760: *
        !          2761: *      -13- ASSEMBLY LISTING LAYOUT INSTRUCTIONS
        !          2762: *
        !          2763: *      13.1 EJC              EJECT TO NEXT PAGE
        !          2764: *
        !          2765: *      13.2 TTL  TEXT        SET NEW ASSEMBLY TITLE
        !          2766: *
        !          2767: *           TTL IMPLIES AN IMMEDIATE EJECT OF THE
        !          2768: *           ASSEMBLY LISTING TO PRINT THE NEW TITLE.
        !          2769: *
        !          2770: *           THE USE OF TTL AND EJC CARDS IS SUCH THAT THE
        !          2771: *           PROGRAM WILL LIST NEATLY IF THE PRINTER PRINTS
        !          2772: *           AS MANY AS 58 LINES PER PAGE. IN THE EVENT THAT
        !          2773: *           THE PRINTER DEPTH IS LESS THAN THIS, OR IF THE
        !          2774: *           LISTING CONTAINS INTERSPERSED LINES (SUCH AS ACTUAL
        !          2775: *           GENERATED CODE), THEN THE FORMAT MAY BE UPSET.
        !          2776: *
        !          2777: *           LINES STARTING WITH AN ASTERISK ARE COMMENT LINES
        !          2778: *           WHICH CAUSE NO CODE TO BE GENERATED AND MAY OCCUR
        !          2779: *           FREELY ANYWHERE IN THE PROGRAM. THE FORMAT FOR
        !          2780: *           COMMENT LINES IS GIVEN IN SECTION -15-.
        !          2781: 
        !          2782: 
        !          2783: Page 61              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          2784: 
        !          2785: *
        !          2786: *      -14- PROGRAM FORM
        !          2787: *
        !          2788: *           THE PROGRAM CONSISTS OF SEPARATE SECTIONS SEPARATED
        !          2789: *           BY SEC OPERATIONS. THE SECTIONS MUST APPEAR IN THE
        !          2790: *           FOLLOWING SPECIFIED ORDER.
        !          2791: *
        !          2792: *      14.1 SEC              START OF PROCEDURE SECTION
        !          2793: *
        !          2794: *           (PROCEDURE SECTION)
        !          2795: *
        !          2796: *           SEC               START OF DEFINITIONS SECTION
        !          2797: *
        !          2798: *           (DEFINITIONS SECTION)
        !          2799: *
        !          2800: *           SEC               START OF CONSTANT STORAGE SECTION
        !          2801: *
        !          2802: *           (CONSTANT STORAGE SECTION)
        !          2803: *
        !          2804: *           SEC               START OF WORKING STORAGE SECTION
        !          2805: *
        !          2806: *           (WORKING STORAGE SECTION)
        !          2807: *
        !          2808: *           SEC               START OF PROGRAM SECTION
        !          2809: *
        !          2810: *           (PROGRAM SECTION)
        !          2811: *
        !          2812: *           SEC               START OF STACK OVERFLOW SECTION
        !          2813: *
        !          2814: *           (STACK OVERFLOW SECTION)
        !          2815: *
        !          2816: *           SEC               START OF ERROR SECTION
        !          2817: *
        !          2818: *           (ERROR SECTION)
        !          2819: *
        !          2820: *      14.2 END              END OF ASSEMBLY
        !          2821: 
        !          2822: 
        !          2823: Page 62              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          2824: 
        !          2825: *
        !          2826: *      SECTION 10 - PROGRAM FORM
        !          2827: *
        !          2828: *      PROCEDURE SECTION
        !          2829: *
        !          2830: *           THE PROCEDURE SECTION CONTAINS ALL THE EXP
        !          2831: *           INSTRUCTIONS FOR EXTERNALLY AVAILABLE PROCEDURES
        !          2832: *           AND INP,INR OPCODES FOR INTERNAL PROCEDURES,ROUTINES
        !          2833: *           SO THAT A SINGLE PASS MINIMAL TRANSLATOR HAS ADVANCE
        !          2834: *           KNOWLEDGE OF PROCEDURE TYPES WHEN TRANSLATING CALLS.
        !          2835: *
        !          2836: *      DEFINITIONS SECTION
        !          2837: *
        !          2838: *           THE DEFINITIONS SECTION CONTAINS EQU INSTRUCTIONS
        !          2839: *           WHICH DEFINE SYMBOLS REFERENCED LATER ON IN THE
        !          2840: *           PROGRAM, CONSTANT AND WORK SECTIONS.
        !          2841: *
        !          2842: *      CONSTANT STORAGE SECTION
        !          2843: *
        !          2844: *           THE CONSTANT STORAGE SECTION CONSISTS ENTIRELY
        !          2845: *           OF CONSTANTS ASSEMBLED WITH THE DAC,DDC,DIC,DRC
        !          2846: *           DTC,DBC ASSEMBLY OPERATIONS. THESE CONSTANTS CAN
        !          2847: *           BE FREELY REFERENCED BY THE PROGRAM INSTRUCTIONS.
        !          2848: *
        !          2849: *      WORKING STORAGE SECTION
        !          2850: *
        !          2851: *           THE WORKING STORAGE SECTION CONSISTS ENTIRELY OF
        !          2852: *           DAC,DDC,DIC,DRC,DBC,DTC INSTRUCTIONS TO DEFINE A
        !          2853: *           FIXED LENGTH WORK AREA. THE WORK LOCATIONS IN THIS
        !          2854: *           AREA CAN BE DIRECTLY REFERENCED IN PROGRAM
        !          2855: *           INSTRUCTIONS. THE AREA IS INITIALIZED IN ACCORDANCE
        !          2856: *           WITH THE VALUES ASSEMBLED IN THE INSTRUCTIONS.
        !          2857: *
        !          2858: *      PROGRAM SECTION
        !          2859: *
        !          2860: *           THE PROGRAM SECTION CONTAINS PROGRAM INSTRUCTIONS
        !          2861: *           AND ASSOCIATED OPERATIONS (SUCH AS PRC, ENP, ENT).
        !          2862: *           CONTROL IS PASSED TO THE FIRST INSTRUCTION IN THIS
        !          2863: *           SECTION WHEN EXECUTION IS INITIATED.
        !          2864: *
        !          2865: *      STACK OVERFLOW SECTION
        !          2866: *
        !          2867: *           THE STACK OVERFLOW SECTION CONTAINS INSTRUCTIONS
        !          2868: *           LIKE THE PROGRAM SECTION. CONTROL IS PASSED TO THE
        !          2869: *           FIRST INSTRUCTION IN THIS SECTION FOLLOWING THE
        !          2870: *           OCCURRENCE OF STACK OVERFLOW, SEE CHK INSTRUCTION.
        !          2871: *
        !          2872: *      ERROR SECTION
        !          2873: *
        !          2874: *           THE ERROR SECTION CONTAINS INSTRUCTIONS LIKE THE
        !          2875: *           PROGRAM SECTION. CONTROL IS PASSED TO THE FIRST
        !          2876: *           INSTRUCTION IN THIS SECTION WHEN A PROCEDURE EXIT
        !          2877: *           CORRESPONDS TO AN ERROR PARAMETER (SEE ERR)
        !          2878: *           OR WHEN AN ERB OPCODE IS OBEYED. THE ERROR CODE
        !          2879: *           MUST CLEAN UP THE MAIN STACK AND CATER FOR THE
        !          2880: *           POSSIBILITY THAT A SUBROUTINE STACK MAY NEED CLEAN
        !          2881: *           UP.
        !          2882: 
        !          2883: 
        !          2884: Page 63              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          2885: 
        !          2886: *      OSINT
        !          2887: *
        !          2888: *           THOUGH NOT PART OF THE MINIMAL SOURCE, IT IS USEFUL
        !          2889: *           TO REFER TO THE COLLECTION OF INITIALISATION AND
        !          2890: *           EXP ROUTINES AS OSINT (OPERATING SYSTEM INTERFACE).
        !          2891: *           ERRORS OCCURRING WITHIN OSINT PROCEDURES ARE
        !          2892: *           USUALLY HANDLED BY MAKING AN ERROR RETURN. IF THIS
        !          2893: *           IS NOT FEASIBLE OR APPROPRIATE, OSINT MAY USE THE
        !          2894: *           MINIMAL ERROR SECTION TO REPORT ERRORS DIRECTLY BY
        !          2895: *           BRANCHING TO IT WITH A SUITABLE NUMERIC ERROR
        !          2896: *           CODE IN WA.
        !          2897: 
        !          2898: 
        !          2899: Page 64              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          2900: 
        !          2901: *
        !          2902: *      SECTION 11 - STATEMENT FORMAT
        !          2903: *
        !          2904: *      ALL LABELS ARE EXACTLY FIVE CHARACTERS LONG AND START
        !          2905: *      WITH THREE LETTERS (ABCDEFGHIJKLMNOPQRSTUVWXY$) FOLLOWED
        !          2906: *      BY TWO LETTERS OR DIGITS.
        !          2907: *      THE LETTER Z MAY NOT BE USED IN MINIMAL SYMBOLS BUT $ IS
        !          2908: *      PERMITTED.
        !          2909: *      FOR IMPLEMENTATIONS WHERE $ MAY NOT APPEAR IN THE
        !          2910: *      TARGET CODE , A SIMPLE SUBSTITUTION OF Z FOR $
        !          2911: *      MAY THUS BE MADE WITHOUT RISK OF PRODUCING NON-UNIQUE
        !          2912: *      SYMBOLS.
        !          2913: *      THE LETTER Z IS HOWEVER PERMITTED IN OPCODE MNEMONICS AND
        !          2914: *      IN COMMENTS.
        !          2915: *
        !          2916: *      MINIMAL STATEMENTS ARE IN A FIXED FORMAT AS FOLLOWS.
        !          2917: *
        !          2918: *      COLS 1-5              LABEL IF ANY (ELSE BLANK)
        !          2919: *
        !          2920: *      COLS 6-7              ALWAYS BLANK
        !          2921: *
        !          2922: *      COLS 8-10             OPERATION MNEMONIC
        !          2923: *
        !          2924: *      COLS 11-12            BLANKS
        !          2925: *
        !          2926: *      COLS 13-28            OPERAND FIELD, TERMINATED BY A
        !          2927: *                            BLANK. MAY OCCASIONALLY
        !          2928: *                            EXTEND PAST COLUMN 28.
        !          2929: *
        !          2930: *      COLS 30-64            COMMENT. ALWAYS SEPARATED FROM THE
        !          2931: *                            OPERAND FIELD BY AT LEAST ONE BLANK
        !          2932: *                            MAY OCCASIONALLY START AFTER COLUMN
        !          2933: *                            30 IF THE OPERAND EXTENDS PAST 28.
        !          2934: *                            A SPECIAL EXCEPTION OCCURS FOR THE
        !          2935: *                            IFF INSTRUCTION, WHOSE COMMENT MAY
        !          2936: *                            BE ONLY 20 CHARACTERS LONG (30-49).
        !          2937: *
        !          2938: *      COLS 65 ON            UNUSED
        !          2939: *
        !          2940: *
        !          2941: *      COMMENT LINES HAVE THE FOLLOWING FORMAT
        !          2942: *
        !          2943: *      COL 1                 ASTERISK
        !          2944: *
        !          2945: *      COLS 2-7              BLANK
        !          2946: *
        !          2947: *      COLS 8-64             ARBITRARY TEXT, RESTRICTED TO THE
        !          2948: *                            FORTRAN CHARACTER SET.
        !          2949: *
        !          2950: *
        !          2951: *      THE FORTRAN CHARACTER SET IS A-Z 0-9 =,$.(*)-/+
        !          2952: 
        !          2953: 
        !          2954: Page 65              MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG.
        !          2955: 
        !          2956: *
        !          2957: *      SECTION 12 - PROGRAM EXECUTION
        !          2958: *
        !          2959: *      EXECUTION OF THE PROGRAM BEGINS WITH THE FIRST
        !          2960: *      INSTRUCTION IN THE PROGRAM SECTION.
        !          2961: *
        !          2962: *      IN ADDITION TO THE FIXED LENGTH MEMORY REGIONS DEFINED
        !          2963: *      BY THE ASSEMBLY, THERE ARE TWO DYNAMICALLY ALLOCATED
        !          2964: *      MEMORY REGIONS AS FOLLOWS.
        !          2965: *
        !          2966: *      DATA AREA             THIS IS AN AREA AVAILABLE TO THE
        !          2967: *                            PROGRAM FOR GENERAL STORAGE OF DATA
        !          2968: *                            ANY DATA VALUE MAY BE STORED IN
        !          2969: *                            THIS AREA EXCEPT INSTRUCTIONS.
        !          2970: *                            IN SOME IMPLEMENTATIONS, IT MAY BE
        !          2971: *                            POSSIBLE TO INCREASE THE SIZE OF
        !          2972: *                            THIS AREA DYNAMICALLY BY ADDING
        !          2973: *                            WORDS AT THE TOP END WITH A CALL
        !          2974: *                            TO A SYSTEM PROCEDURE.
        !          2975: *
        !          2976: *      STACK AREA            THIS REGION OF MEMORY HOLDS
        !          2977: *                            THE STACK USED FOR SUBROUTINE CALLS
        !          2978: *                            AND OTHER STORAGE OF ONE WORD
        !          2979: *                            INTEGER VALUES (ADDRESSES). THIS
        !          2980: *                            IS THE STACK ASSOCIATED WITH
        !          2981: *                            INDEX REGISTER XS.
        !          2982: *
        !          2983: *      THE LOCATIONS AND SIZES OF THESE AREAS ARE SPECIFIED
        !          2984: *      BY THE VALUES IN THE REGISTERS AT THE START OF PROGRAM
        !          2985: *      EXECUTION AS FOLLOWS.
        !          2986: *
        !          2987: *      (XS)                  ADDRESS ONE PAST THE STACK BASE.
        !          2988: *                            E.G. IF XS IS 23456, A D-STACK WILL
        !          2989: *                            OCCUPY WORDS 23455,23454,...
        !          2990: *                            WHEREAS A U-STACK WILL OCCUPY
        !          2991: *                            23457,23458,...
        !          2992: *
        !          2993: *      (XR)                  ADDRESS OF THE FIRST WORD
        !          2994: *                            IN THE DATA AREA
        !          2995: *
        !          2996: *      (XL)                  ADDRESS OF THE LAST WORD IN THE
        !          2997: *                            DATA AREA.
        !          2998: *
        !          2999: *      (WA,WB,WC,IA,RA,CP)   AS DEFINED BY THE PROGRAM
        !          3000: *
        !          3001: *      THERE IS NO EXPLICIT WAY TO TERMINATE THE EXECUTION OF A
        !          3002: *      PROGRAM. THIS FUNCTION IS PERFORMED BY AN APPROPRIATE
        !          3003: *      SYSTEM PROCEDURE REFERENCED WITH THE SYSEJ INSTRUCTION.
        !          3004: 
        !          3005: 
        !          3006: Page 66              S P I T B O L  -- BASIC INFORMATION
        !          3007: 
        !          3008: *
        !          3009: *      GENERAL STRUCTURE
        !          3010: *      -----------------
        !          3011: *
        !          3012: *      THIS PROGRAM IS A TRANSLATOR FOR A VERSION OF THE SNOBOL4
        !          3013: *      PROGRAMMING LANGUAGE. LANGUAGE DETAILS ARE CONTAINED IN
        !          3014: *      THE MANUAL MACRO SPITBOL BY DEWAR AND MCCANN, TECHNICAL
        !          3015: *      REPORT 90, UNIVERSITY OF LEEDS 1976.
        !          3016: *      THE IMPLEMENTATION IS DISCUSSED IN DEWAR AND MCCANN,
        !          3017: *      MACRO SPITBOL - A SNOBOL4 COMPILER, SOFTWARE PRACTICE AND
        !          3018: *      EXPERIENCE, 7, 95-113, 1977.
        !          3019: *      THE LANGUAGE IS AS IMPLEMENTED BY THE BTL TRANSLATOR
        !          3020: *      (GRISWOLD, POAGE AND POLONSKY, PRENTICE HALL, 1971)
        !          3021: *      WITH THE FOLLOWING PRINCIPAL EXCEPTIONS.
        !          3022: *
        !          3023: *      1)   REDEFINITION OF STANDARD SYSTEM FUNCTIONS AND
        !          3024: *           OPERATORS IS NOT PERMITTED.
        !          3025: *
        !          3026: *      2)   THE VALUE FUNCTION IS NOT PROVIDED.
        !          3027: *
        !          3028: *      3)   ACCESS TRACING IS PROVIDED IN ADDITION TO THE
        !          3029: *           OTHER STANDARD TRACE MODES.
        !          3030: *
        !          3031: *      4)   THE KEYWORD STFCOUNT IS NOT PROVIDED.
        !          3032: *
        !          3033: *      5)   THE KEYWORD FULLSCAN IS NOT PROVIDED AND ALL PATTERN
        !          3034: *           MATCHING TAKES PLACE IN FULLSCAN MODE (I.E. WITH NO
        !          3035: *           HEURISTICS APPLIED).
        !          3036: *
        !          3037: *      6)   A SERIES OF EXPRESSIONS SEPARATED BY COMMAS MAY
        !          3038: *           BE GROUPED WITHIN PARENTHESES TO PROVIDE A SELECTION
        !          3039: *           CAPABILITY. THE SEMANTICS ARE THAT THE SELECTION
        !          3040: *           ASSUMES THE VALUE OF THE FIRST EXPRESSION WITHIN IT
        !          3041: *           WHICH SUCCEEDS AS THEY ARE EVALUATED FROM THE LEFT.
        !          3042: *           IF NO EXPRESSION SUCCEEDS THE ENTIRE STATEMENT FAILS
        !          3043: *
        !          3044: *      7)   AN EXPLICIT PATTERN MATCHING OPERATOR IS PROVIDED.
        !          3045: *           THIS IS THE BINARY QUERY (SEE GIMPEL SIGPLAN OCT 74)
        !          3046: *
        !          3047: *      8)   THE ASSIGNMENT OPERATOR IS INTRODUCED AS IN THE
        !          3048: *           GIMPEL REFERENCE.
        !          3049: *
        !          3050: *      9)   THE EXIT FUNCTION IS PROVIDED FOR GENERATING LOAD
        !          3051: *           MODULES - CF. GIMPELS SITBOL.
        !          3052: *
        !          3053: *
        !          3054: *      THE METHOD USED IN THIS PROGRAM IS TO TRANSLATE THE
        !          3055: *      SOURCE CODE INTO AN INTERNAL PSEUDO-CODE (SEE FOLLOWING
        !          3056: *      SECTION). AN INTERPRETOR IS THEN USED TO EXECUTE THIS
        !          3057: *      GENERATED PSEUDO-CODE. THE NATURE OF THE SNOBOL4 LANGUAGE
        !          3058: *      IS SUCH THAT THE LATTER TASK IS MUCH MORE COMPLEX THAN
        !          3059: *      THE ACTUAL TRANSLATION PHASE. ACCORDINGLY, NEARLY ALL THE
        !          3060: *      CODE IN THE PROGRAM SECTION IS CONCERNED WITH THE ACTUAL
        !          3061: *      EXECUTION OF THE SNOBOL4 PROGRAM.
        !          3062: 
        !          3063: 
        !          3064: Page 67              S P I T B O L  -- BASIC INFORMATION
        !          3065: 
        !          3066: *
        !          3067: *      INTERPRETIVE CODE FORMAT
        !          3068: *      ------------------------
        !          3069: *
        !          3070: *      THE INTERPRETIVE PSEUDO-CODE CONSISTS OF A SERIES OF
        !          3071: *      ADDRESS POINTERS. THE EXACT FORMAT OF THE CODE IS
        !          3072: *      DESCRIBED IN CONNECTION WITH THE CDBLK FORMAT. THE
        !          3073: *      PURPOSE OF THIS SECTION IS TO GIVE GENERAL INSIGHT INTO
        !          3074: *      THE INTERPRETIVE APPROACH INVOLVED.
        !          3075: *
        !          3076: *      THE BASIC FORM OF THE CODE IS RELATED TO REVERSE POLISH.
        !          3077: *      IN OTHER WORDS, THE OPERANDS PRECEDE THE OPERATORS WHICH
        !          3078: *      ARE ZERO ADDRESS OPERATORS. THERE ARE SOME EXCEPTIONS TO
        !          3079: *      THESE RULES, NOTABLY THE UNARY NOT OPERATOR AND THE
        !          3080: *      SELECTION CONSTRUCTION WHICH CLEARLY REQUIRE ADVANCE
        !          3081: *      KNOWLEDGE OF THE OPERATOR INVOLVED.
        !          3082: *
        !          3083: *      THE OPERANDS ARE MOVED TO THE TOP OF THE MAIN STACK AND
        !          3084: *      THE OPERATORS ARE APPLIED TO THE TOP STACK ENTRIES. LIKE
        !          3085: *      OTHER VERSIONS OF SPITBOL, THIS PROCESSOR DEPENDS ON
        !          3086: *      KNOWING WHETHER OPERANDS ARE REQUIRED BY NAME OR BY VALUE
        !          3087: *      AND MOVES THE APPROPRIATE OBJECT TO THE STACK. THUS NO
        !          3088: *      NAME/VALUE CHECKS ARE INCLUDED IN THE OPERATOR CIRCUITS.
        !          3089: *
        !          3090: *      THE ACTUAL POINTERS IN THE CODE POINT TO A BLOCK WHOSE
        !          3091: *      FIRST WORD IS THE ADDRESS OF THE INTERPRETOR ROUTINE
        !          3092: *      TO BE EXECUTED FOR THE CODE WORD.
        !          3093: *
        !          3094: *      IN THE CASE OF OPERATORS, THE POINTER IS TO A WORD WHICH
        !          3095: *      CONTAINS THE ADDRESS OF THE OPERATOR TO BE EXECUTED. IN
        !          3096: *      THE CASE OF OPERANDS SUCH AS CONSTANTS, THE POINTER IS TO
        !          3097: *      THE OPERAND ITSELF. ACCORDINGLY, ALL OPERANDS CONTAIN
        !          3098: *      A FIELD WHICH POINTS TO THE ROUTINE TO LOAD THE VALUE OF
        !          3099: *      THE OPERAND ONTO THE STACK. IN THE CASE OF A VARIABLE,
        !          3100: *      THERE ARE THREE SUCH POINTERS. ONE TO LOAD THE VALUE,
        !          3101: *      ONE TO STORE THE VALUE AND A THIRD TO JUMP TO THE LABEL.
        !          3102: *
        !          3103: *      THE HANDLING OF FAILURE RETURNS DESERVES SPECIAL COMMENT.
        !          3104: *      THE LOCATION FLPTR CONTAINS THE POINTER TO THE LOCATION
        !          3105: *      ON THE MAIN STACK WHICH CONTAINS THE FAILURE RETURN
        !          3106: *      WHICH IS IN THE FORM OF A BAU OFFSET IN THE CURRENT
        !          3107: *      CODE BLOCK (CDBLK OR EXBLK). WHEN A FAILURE OCCURS, THE
        !          3108: *      STACK IS POPPED AS INDICATED BY THE SETTING OF FLPTR AND
        !          3109: *      CONTROL IS PASSED TO THE APPROPRIATE LOCATION IN THE
        !          3110: *      CURRENT CODE BLOCK WITH THE STACK POINTER POINTING TO THE
        !          3111: *      FAILURE OFFSET ON THE STACK AND FLPTR UNCHANGED.
        !          3112: 
        !          3113: 
        !          3114: Page 68              S P I T B O L  -- BASIC INFORMATION
        !          3115: 
        !          3116: *
        !          3117: *      INTERNAL DATA REPRESENTATIONS
        !          3118: *      -----------------------------
        !          3119: *
        !          3120: *      REPRESENTATION OF VALUES
        !          3121: *
        !          3122: *      A VALUE IS REPRESENTED BY A POINTER TO A BLOCK WHICH
        !          3123: *      DESCRIBES THE TYPE AND PARTICULARS OF THE DATA VALUE.
        !          3124: *      IN GENERAL, A VARIABLE IS A LOCATION CONTAINING SUCH A
        !          3125: *      POINTER (ALTHOUGH IN THE CASE OF TRACE ASSOCIATIONS THIS
        !          3126: *      IS MODIFIED, SEE DESCRIPTION OF TRBLK).
        !          3127: *
        !          3128: *      THE FOLLOWING IS A LIST OF POSSIBLE DATATYPES SHOWING THE
        !          3129: *      TYPE OF BLOCK USED TO HOLD THE VALUE. THE DETAILS OF
        !          3130: *      EACH BLOCK FORMAT ARE GIVEN LATER.
        !          3131: *
        !          3132: *      DATATYPE              BLOCK TYPE
        !          3133: *      --------              ----------
        !          3134: *
        !          3135: *      ARRAY                 ARBLK OR VCBLK
        !          3136: *
        !          3137: *      CODE                  CDBLK
        !          3138: *
        !          3139: *      EXPRESSION            EXBLK OR SEBLK
        !          3140: *
        !          3141: *      INTEGER               ICBLK
        !          3142: *
        !          3143: *      NAME                  NMBLK
        !          3144: *
        !          3145: *      PATTERN               P0BLK OR P1BLK OR P2BLK
        !          3146: *
        !          3147: *      REAL                  RCBLK
        !          3148: *
        !          3149: *      STRING                SCBLK
        !          3150: *
        !          3151: *      TABLE                 TBBLK
        !          3152: *
        !          3153: *      PROGRAM DATATYPE      PDBLK
        !          3154: 
        !          3155: 
        !          3156: Page 69              S P I T B O L  -- BASIC INFORMATION
        !          3157: 
        !          3158: *
        !          3159: *      REPRESENTATION OF VARIABLES
        !          3160: *      ---------------------------
        !          3161: *
        !          3162: *      DURING THE COURSE OF EVALUATING EXPRESSIONS, IT IS
        !          3163: *      NECESSARY TO GENERATE NAMES OF VARIABLES (FOR EXAMPLE
        !          3164: *      ON THE LEFT SIDE OF A BINARY EQUALS OPERATOR). THESE ARE
        !          3165: *      NOT TO BE CONFUSED WITH OBJECTS OF DATATYPE NAME WHICH
        !          3166: *      ARE IN FACT VALUES.
        !          3167: *
        !          3168: *      FROM A LOGICAL POINT OF VIEW, SUCH NAMES COULD BE SIMPLY
        !          3169: *      REPRESENTED BY A POINTER TO THE APPROPRIATE VALUE CELL.
        !          3170: *      HOWEVER IN THE CASE OF ARRAYS AND PROGRAM DEFINED
        !          3171: *      DATATYPES, THIS WOULD VIOLATE THE RULE THAT THERE MUST BE
        !          3172: *      NO POINTERS INTO THE MIDDLE OF A BLOCK IN DYNAMIC STORE.
        !          3173: *      ACCORDINGLY, A NAME IS ALWAYS REPRESENTED BY A BASE AND
        !          3174: *      OFFSET. THE BASE POINTS TO THE START OF THE BLOCK
        !          3175: *      CONTAINING THE VARIABLE VALUE AND THE OFFSET IS THE
        !          3176: *      OFFSET WITHIN THIS BLOCK IN BAUS. THUS THE ADDRESS
        !          3177: *      OF THE ACTUAL VARIABLE IS DETERMINED BY ADDING THE BASE
        !          3178: *      AND OFFSET VALUES.
        !          3179: *
        !          3180: *      THE FOLLOWING ARE THE INSTANCES OF VARIABLES REPRESENTED
        !          3181: *      IN THIS MANNER.
        !          3182: *
        !          3183: *      1)   NATURAL VARIABLE BASE IS PTR TO VRBLK
        !          3184: *                            OFFSET IS *VRVAL
        !          3185: *
        !          3186: *      2)   TABLE ELEMENT    BASE IS PTR TO TEBLK
        !          3187: *                            OFFSET IS *TEVAL
        !          3188: *
        !          3189: *      3)   ARRAY ELEMENT    BASE IS PTR TO ARBLK
        !          3190: *                            OFFSET IS OFFSET TO ELEMENT
        !          3191: *
        !          3192: *      4)   VECTOR ELEMENT   BASE IS PTR TO VCBLK
        !          3193: *                            OFFSET IS OFFSET TO ELEMENT
        !          3194: *
        !          3195: *      5)   PROG DEF DTP     BASE IS PTR TO PDBLK
        !          3196: *                            OFFSET IS OFFSET TO FIELD VALUE
        !          3197: *
        !          3198: *      IN ADDITION THERE ARE TWO CASES OF OBJECTS WHICH ARE
        !          3199: *      LIKE VARIABLES BUT CANNOT BE HANDLED IN THIS MANNER.
        !          3200: *      THESE ARE CALLED PSEUDO-VARIABLES AND ARE REPRESENTED
        !          3201: *      WITH A SPECIAL BASE POINTER AS FOLLOWS=
        !          3202: *
        !          3203: *      EXPRESSION VARIABLE   PTR TO EVBLK (SEE EVBLK)
        !          3204: *
        !          3205: *      KEYWORD VARIABLE      PTR TO KVBLK (SEE KVBLK)
        !          3206: *
        !          3207: *      PSEUDO-VARIABLES ARE HANDLED AS SPECIAL CASES BY THE
        !          3208: *      ACCESS PROCEDURE (ACESS) AND THE ASSIGNMENT PROCEDURE
        !          3209: *      (ASIGN). SEE THESE TWO PROCEDURES FOR DETAILS.
        !          3210: 
        !          3211: 
        !          3212: Page 70              S P I T B O L  -- BASIC INFORMATION
        !          3213: 
        !          3214: *
        !          3215: *      ORGANIZATION OF DATA AREA
        !          3216: *      -------------------------
        !          3217: *
        !          3218: *      THE DATA AREA IS DIVIDED INTO TWO REGIONS.
        !          3219: *
        !          3220: *      STATIC AREA
        !          3221: *
        !          3222: *      THE STATIC AREA BUILDS UP FROM THE BOTTOM AND CONTAINS
        !          3223: *      DATA AREAS WHICH ARE ALLOCATED DYNAMICALLY BUT ARE NEVER
        !          3224: *      DELETED OR MOVED AROUND. THE MACRO-PROGRAM ITSELF
        !          3225: *      USES THE STATIC AREA FOR THE FOLLOWING.
        !          3226: *
        !          3227: *      1)   ALL VARIABLE BLOCKS (VRBLK).
        !          3228: *
        !          3229: *      2)   THE HASH TABLE FOR VARIABLE BLOCKS.
        !          3230: *
        !          3231: *      3)   MISCELLANEOUS BUFFERS AND WORK AREAS (SEE PROGRAM
        !          3232: *           INITIALIZATION SECTION).
        !          3233: *
        !          3234: *      IN ADDITION, THE SYSTEM PROCEDURES MAY USE THIS AREA FOR
        !          3235: *      INPUT/OUTPUT BUFFERS, EXTERNAL FUNCTIONS ETC. SPACE IN
        !          3236: *      THE STATIC REGION IS ALLOCATED BY CALLING PROCEDURE ALOST
        !          3237: *
        !          3238: *      THE FOLLOWING GLOBAL VARIABLES DEFINE THE CURRENT
        !          3239: *      LOCATION AND SIZE OF THE STATIC AREA.
        !          3240: *
        !          3241: *      STATB                 ADDRESS OF START OF STATIC AREA
        !          3242: *      STATE                 ADDRESS+1 OF LAST WORD IN AREA.
        !          3243: *
        !          3244: *      THE MINIMUM SIZE OF STATIC IS GIVEN APPROXIMATELY BY
        !          3245: *           12 + *E$HNB + *E$STS + SPACE FOR ALPHABET STRING
        !          3246: *           AND STANDARD PRINT BUFFER.
        !          3247: 
        !          3248: 
        !          3249: Page 71              S P I T B O L  -- BASIC INFORMATION
        !          3250: 
        !          3251: *      DYNAMIC AREA
        !          3252: *
        !          3253: *      THE DYNAMIC AREA IS BUILT UPWARDS IN MEMORY AFTER THE
        !          3254: *      STATIC REGION. DATA IN THIS AREA MUST ALL BE IN STANDARD
        !          3255: *      BLOCK FORMATS SO THAT IT CAN BE PROCESSED BY THE GARBAGE
        !          3256: *      COLLECTOR (PROCEDURE GBCOL). GBCOL COMPACTS BLOCKS DOWN
        !          3257: *      IN THIS REGION AS REQUIRED BY SPACE EXHAUSTION AND CAN
        !          3258: *      ALSO MOVE ALL BLOCKS UP TO ALLOW FOR EXPANSION OF THE
        !          3259: *      STATIC REGION.
        !          3260: *      WITH THE EXCEPTION OF TABLES AND ARRAYS, NO SPITBOL
        !          3261: *      OBJECT ONCE BUILT IN DYNAMIC MEMORY IS EVER SUBSEQUENTLY
        !          3262: *      MODIFIED. OBSERVING THIS RULE NECESSITATES A COPYING
        !          3263: *      ACTION DURING STRING AND PATTERN CONCATENATION.
        !          3264: *      GARBAGE COLLECTION IS FUNDAMENTAL TO THE ALLOCATION OF
        !          3265: *      SPACE FOR VALUES. SPITBOL USES A VERY EFFICIENT GARBAGE
        !          3266: *      COLLECTOR WHICH INSISTS THAT POINTERS INTO DYNAMIC STORE
        !          3267: *      SHOULD BE IDENTIFIABLE WITHOUT USE OF BIT TABLES,
        !          3268: *      MARKER BITS ETC. TO SATISFY THIS REQUIREMENT, DYNAMIC
        !          3269: *      MEMORY MUST NOT START AT TOO LOW AN ADDRESS AND LENGTHS
        !          3270: *      OF ARRAYS, TABLES, STRINGS, CODE AND EXPRESSION BLOCKS
        !          3271: *      MAY NOT EXCEED THE NUMERICAL VALUE OF THE LOWEST DYNAMIC
        !          3272: *      ADDRESS. TO AVOID EITHER PENALIZING USERS WITH MODEST
        !          3273: *      REQUIREMENTS OR RESTRICTING THOSE WITH GREATER NEEDS ON
        !          3274: *      HOST SYSTEMS WHERE DYNAMIC MEMORY IS ALLOCATED IN LOW
        !          3275: *      ADDRESSES, THE MINIMUM DYNAMIC ADDRESS MAY BE SPECIFIED
        !          3276: *      SUFFICIENTLY HIGH TO PERMIT ARBITRARILY LARGE SPITBOL
        !          3277: *      OBJECTS TO BE CREATED ( WITH THE POSSIBILITY IN EXTREME
        !          3278: *      CASES OF WASTING LARGE AMOUNTS OF MEMORY BELOW THE
        !          3279: *      START ADDRESS). THIS MINIMUM VALUE IS MADE AVAILABLE
        !          3280: *      IN VARIABLE MXLEN BY A SYSTEM ROUTINE, SYSMX.
        !          3281: *      ALTERNATIVELY SYSMX MAY INDICATE THAT A
        !          3282: *      DEFAULT MAY BE USED IN WHICH DYNAMIC IS PLACED
        !          3283: *      AT THE LOWEST POSSIBLE ADDRESS FOLLOWING STATIC.
        !          3284: *      THE FOLLOWING GLOBAL WORK CELLS DEFINE THE LOCATION AND
        !          3285: *      LENGTH OF THE DYNAMIC AREA.
        !          3286: *
        !          3287: *      DNAMB                 START OF DYNAMIC AREA
        !          3288: *      DNAMP                 NEXT AVAILABLE LOCATION
        !          3289: *      DNAME                 LAST AVAILABLE LOCATION + 1
        !          3290: *
        !          3291: *      DNAMB IS ALWAYS HIGHER THAN STATE SINCE THE ALOST
        !          3292: *      PROCEDURE MAINTAINS SOME EXPANSION SPACE ABOVE STATE.
        !          3293: *      *** DNAMB MUST NEVER BE PERMITTED TO HAVE A VALUE LESS
        !          3294: *      THAN THAT IN MXLEN ***
        !          3295: *
        !          3296: *      SPACE IN THE DYNAMIC REGION IS ALLOCATED BY THE ALLOC
        !          3297: *      PROCEDURE. THE DYNAMIC REGION MAY BE USED BY SYSTEM
        !          3298: *      PROCEDURES PROVIDED THAT ALL THE RULES ARE OBEYED.
        !          3299: *      SOME OF THE RULES ARE SUBTLE SO IT IS PREFERABLE FOR
        !          3300: *      OSINT TO MANAGE ITS OWN MEMORY NEEDS. SPITBOL PROCS
        !          3301: *      OBEY RULES TO ENSURE THAT NO ACTION CAN CAUSE A GARBAGE
        !          3302: *      COLLECTION EXCEPT AT SUCH TIMES AS CONTENTS OF XL, XR
        !          3303: *      AND THE STACK ARE +CLEAN+ (SEE COMMENT BEFORE UTILITY
        !          3304: *      PROCEDURES AND IN GBCOL FOR MORE DETAIL). NOTE
        !          3305: *      THAT CALLS OF ALOST MAY CAUSE GARBAGE COLLECTION (SHIFT
        !          3306: *      OF MEMORY TO FREE SPACE). SPITBOL PROCS WHICH CALL
        !          3307: *      SYSTEM ROUTINES ASSUME THAT THEY CANNOT PRECIPITATE
        !          3308: *      COLLECTION AND THIS MUST BE RESPECTED.
        !          3309: 
        !          3310: 
        !          3311: Page 72              S P I T B O L  -- BASIC INFORMATION
        !          3312: 
        !          3313: *
        !          3314: *      REGISTER USAGE
        !          3315: *      --------------
        !          3316: *
        !          3317: *      (CP)                  CODE POINTER REGISTER. USED TO
        !          3318: *                            HOLD A POINTER TO THE CURRENT
        !          3319: *                            LOCATION IN THE INTERPRETIVE PSEUDO
        !          3320: *                            CODE (I.E. PTR INTO A CDBLK).
        !          3321: *
        !          3322: *      (XL,XR)               GENERAL INDEX REGISTERS. USUALLY
        !          3323: *                            USED TO HOLD POINTERS TO BLOCKS IN
        !          3324: *                            DYNAMIC STORAGE. AN IMPORTANT
        !          3325: *                            RESTRICTION IS THAT THE VALUE IN
        !          3326: *                            XL MUST BE COLLECTABLE FOR
        !          3327: *                            A GARBAGE COLLECT CALL. A VALUE
        !          3328: *                            IS COLLECTABLE IF IT EITHER POINTS
        !          3329: *                            OUTSIDE THE DYNAMIC AREA, OR IF IT
        !          3330: *                            POINTS TO THE START OF A BLOCK IN
        !          3331: *                            THE DYNAMIC AREA.
        !          3332: *
        !          3333: *      (XS)                  STACK POINTER. USED TO POINT TO
        !          3334: *                            THE STACK FRONT. THE STACK MAY
        !          3335: *                            BUILD UP OR DOWN AND IS USED
        !          3336: *                            TO STACK SUBROUTINE RETURN POINTS
        !          3337: *                            AND OTHER RECURSIVELY SAVED DATA.
        !          3338: *
        !          3339: *      (XT)                  AN ALTERNATIVE NAME FOR XL DURING
        !          3340: *                            ITS USE IN ACCESSING STACKED ITEMS.
        !          3341: *
        !          3342: *      (WA,WB,WC)            GENERAL WORK REGISTERS. CANNOT BE
        !          3343: *                            USED FOR INDEXING, BUT MAY HOLD
        !          3344: *                            VARIOUS TYPES OF DATA.
        !          3345: *
        !          3346: *      (IA)                  USED FOR ALL SIGNED INTEGER
        !          3347: *                            ARITHMETIC, BOTH THAT USED BY THE
        !          3348: *                            TRANSLATOR AND THAT ARISING FROM
        !          3349: *                            USE OF SNOBOL4 ARITHMETIC OPERATORS
        !          3350: *
        !          3351: *      (RA)                  REAL ACCUMULATOR. USED FOR ALL
        !          3352: *                            FLOATING POINT ARITHMETIC.
        !          3353: *
        !          3354: *      ENTRY VALUES
        !          3355: *
        !          3356: *      IN ADDITION TO THE ENTRY VALUES OF XS, XL, XR AS DEFINED
        !          3357: *      FOR MINIMAL, THE PROGRAM-SPECIFIC ENTRY REGISTERS MUST
        !          3358: *      BE SET AS FOLLOWS
        !          3359: *
        !          3360: *      (WA)                  INITIAL VALUE FOR CODE KEYWORD
        !          3361: *
        !          3362: *      (WB,WC,IA,RA,CP)      ZERO
        !          3363: *
        !          3364: 
        !          3365: 
        !          3366: Page 73              S P I T B O L -- PROCEDURES SECTION
        !          3367: 
        !          3368: *
        !          3369: *      THIS SECTION STARTS WITH DESCRIPTIONS OF THE OPERATING
        !          3370: *      SYSTEM DEPENDENT PROCEDURES WHICH ARE USED BY THE SPITBOL
        !          3371: *      TRANSLATOR. ALL SUCH PROCEDURES HAVE FIVE LETTER NAMES
        !          3372: *      BEGINNING WITH SYS. THEY ARE LISTED IN ALPHABETICAL
        !          3373: *      ORDER.
        !          3374: *      ALL PROCEDURES HAVE A  SPECIFICATION CONSISTING OF A
        !          3375: *      MODEL CALL, PRECEDED BY A POSSIBLY EMPTY LIST OF REGISTER
        !          3376: *      CONTENTS GIVING PARAMETERS AVAILABLE TO THE PROCEDURE AND
        !          3377: *      FOLLOWED BY A POSSIBLY EMPTY LIST OF REGISTER CONTENTS
        !          3378: *      REQUIRED ON RETURN FROM THE CALL OR WHICH MAY HAVE HAD
        !          3379: *      THEIR CONTENTS DESTROYED. ONLY THOSE REGISTERS EXPLICITLY
        !          3380: *      MENTIONED IN THE LIST AFTER THE CALL MAY HAVE THEIR
        !          3381: *      VALUES CHANGED.
        !          3382: *      A MODEL MINIMAL EXP PSEUDO-OP FOR EACH PROCEDURE IS
        !          3383: *      INCLUDED IN THE DESCRIPTION. MACHINE PROCESSABLE VERSIONS
        !          3384: *      OF THESE ARE COLLECTED AT THE END OF THE SECTION,
        !          3385: *      FOLLOWING THE SEC OPCODE.
        !          3386: *      THE SEGMENT OF CODE PROVIDING THE EXTERNAL PROCEDURES IS
        !          3387: *      CONVENIENTLY REFERRED TO AS OSINT (OPERATING SYSTEM
        !          3388: *      INTERFACE). THE SYSXX PROCEDURES IT CONTAINS PROVIDE
        !          3389: *      FACILITIES NOT USUALLY AVAILABLE AS PRIMITIVES IN
        !          3390: *      ASSEMBLY LANGUAGES. FOR PARTICULAR TARGET MACHINES,
        !          3391: *      IMPLEMENTORS MAY CHOOSE FOR SOME MINIMAL OPCODES WHICH
        !          3392: *      DO NOT HAVE REASONABLY DIRECT TRANSLATIONS, TO USE CALLS
        !          3393: *      OF ADDITIONAL PROCEDURES WHICH THEY PROVIDE IN OSINT.
        !          3394: *      E.G. MWB OR TRC MIGHT BE TRANSLATED AS JSR SYSMB,
        !          3395: *      JSR SYSTC IN SOME IMPLEMENTATIONS.
        !          3396: *
        !          3397: *      IN THE DESCRIPTIONS, REFERENCE IS MADE TO --BLK
        !          3398: *      FORMATS (-- = A PAIR OF LETTERS). SEE THE SPITBOL
        !          3399: *      DEFINITIONS SECTION FOR DETAILED DESCRIPTIONS OF BLOCKS.
        !          3400: *
        !          3401: *      SCBLK FORMAT IS OUTLINED HERE, SINCE STRINGS ARE OFTEN
        !          3402: *      PASSED AS PARAMETERS TO OSINT OR MAY BE RETURNED BY
        !          3403: *      OSINT. AN SCBLK CONTAINS 2 HEADER WORDS, THE FIRST OF
        !          3404: *      WHICH CONTAINS A VALUE ONLY OF INTEREST TO SPITBOL.
        !          3405: *      IT IS NOT NECESSARY TO SET THIS FIELD IN RETURNED
        !          3406: *      SCBLKS.
        !          3407: *      THE SECOND WORD CONTAINS THE NUMBER OF CHARACTERS IN THE
        !          3408: *      STRING AND SHOULD BE CORRECTLY SET IN RETURNED SCBLKS.
        !          3409: *      THE REMAINING WORDS CONTAIN THE CHARACTERS OF THE STRING,
        !          3410: *      PACKED CFP$C PER WORD, WITH THE LAST WORD PADDED OUT IF
        !          3411: *      NECESSARY WITH BLANK CHARACTERS.
        !          3412: 
        !          3413: 
        !          3414: Page 74              S P I T B O L -- PROCEDURES SECTION
        !          3415: 
        !          3416: *
        !          3417: *      OSINT FAILURE (FLOSI) AND ERROR (EROSI) RETURNS
        !          3418: *      ----- ------- ------- --- ----- ------- -------
        !          3419: *
        !          3420: *      WHERE IT MAKES SENSE, OSINT CALLS MAY BE ABLE TO
        !          3421: *      RETURN IN SUCH A WAY AS TO CAUSE SPITBOL STATEMENT
        !          3422: *      FAILURE SO THAT THE USER CAN REGAIN CONTROL FOR SOME
        !          3423: *      CONDITIONS AND ATTEMPT RECOVERY OR A RE-TRY.
        !          3424: *      THESE CASES ARE IDENTIFIED BY INCLUDING
        !          3425: *          PPM FLOSI
        !          3426: *      IN THE LIST OF RETURNS.
        !          3427: *      THE CONDITIONS ON REGISTER PRESERVATION WHEN A FLOSI
        !          3428: *      RETURN IS TAKEN ARE AS FOLLOWS.
        !          3429: *      ANY REGISTER APPEARING IN THE LIST FOLLOWING THE MODEL
        !          3430: *      CALL AS BEING DESTROYED ON A NORMAL RETURN, NEED NOT BE
        !          3431: *      PRESERVED. ADDITIONALLY ANY REGISTER CONTAINING ENTRY
        !          3432: *      PARAMETERS NEED NOT BE PRESERVED ON A FLOSI RETURN.
        !          3433: *      OTHER REGISTERS, NOT EXPLICITLY REFERENCED, MUST BE
        !          3434: *      PRESERVED.
        !          3435: *
        !          3436: *      SOME OSINT CALLS ARE PERMITTED TO RETURN AN ERROR
        !          3437: *      CODE AND/OR MESSAGE. THIS ALLOWS REPORTING OF ERROR
        !          3438: *      CONDITIONS DETECTED BY THE OSINT ROUTINE IN TERMS
        !          3439: *      RELEVANT TO THE IMPLEMENTATION. SUCH RETURNS WILL RESULT
        !          3440: *      IN EXECUTION TERMINATION (UNLESS AN ERROR TRAP IS
        !          3441: *      OPERATIVE). IN THE DOCUMENTATION OF THE SYS-- ROUTINES
        !          3442: *      THEY APPEAR AS
        !          3443: *          PPM  EROSI
        !          3444: *      RETURNS AND THE CONVENTIONS USED ARE AS FOLLOWS -
        !          3445: *      TAKE THE SPECIFIED RETURN WITH
        !          3446: *          (WA)  SET TO 0 AS A DEFAULT ERROR CODE
        !          3447: *      OR  (WA)  SET TO ANY PRIVATE CODE IN 300 TO 999.
        !          3448: *          (XL)  SET TO 0 IN WHICH CASE SPITBOL WILL MAKE A
        !          3449: *                LATER SYSEM CALL TO OBTAIN THE ERROR TEXT
        !          3450: *                USING THE ERROR CODE PASSED IN WA.
        !          3451: *      OR  (WA)  SET TO ANY PRIVATE CODE IN 300 TO 999.
        !          3452: *          (XL)  POINTING TO AN SCBLK CONTAINING THE TEXT OF AN
        !          3453: *                ERROR MESSAGE AND WITH ITS LENGTH FIELD SET.
        !          3454: *                THIS WILL BE COPIED ON RETURN TO SPITBOL AND
        !          3455: *                USED IN THE USUAL ERROR PROCESSING.
        !          3456: *                IN THIS CASE, NO SYSEM CALL WILL FOLLOW.
        !          3457: *
        !          3458: *      THE REMARKS REGARDING REGISTER PRESERVATION UNDER THE
        !          3459: *      FLOSI DESCRIPTION APPLY ALSO TO AN EROSI RETURN EXCEPT
        !          3460: *      THAT PRESCRIBED VALUES FOR WA, XL MUST BE SET UP.
        !          3461: *
        !          3462: 
        !          3463: 
        !          3464: Page 75              S P I T B O L -- PROCEDURES SECTION
        !          3465: 
        !          3466: *
        !          3467: *      SYSAX -- AFTER EXECUTION
        !          3468: *
        !          3469: *      SYSAX  EXP  E,0       DEFINE EXTERNAL ENTRY POINT
        !          3470: *
        !          3471: *      IF THE CONDITIONAL ASSEMBLY SYMBOL .CSAX IS DEFINED,
        !          3472: *      THIS ROUTINE IS CALLED IMMEDIATELY AFTER EXECUTION AND
        !          3473: *      BEFORE PRINTING OF EXECUTION STATISTICS OR DUMP OUTPUT.
        !          3474: *      PURPOSE OF CALL IS FOR IMPLEMENTOR TO DETERMINE AND
        !          3475: *      IF THE CALL IS NOT REQUIRED IT WILL BE OMITTED IF .CSAX
        !          3476: *      IS UNDEFINED. IN THIS CASE SYSAX NEED NOT BE CODED.
        !          3477: *
        !          3478: *      JSR  SYSAX            CALL AFTER EXECUTION
        !          3479: *
        !          3480: *      SYSBX -- BEFORE EXECUTION
        !          3481: *
        !          3482: *      SYSBX  EXP  E,0       DEFINE EXTERNAL ENTRY POINT
        !          3483: *
        !          3484: *      CALLED AFTER INITIAL SPITBOL COMPILATION AND BEFORE
        !          3485: *      COMMENCING EXECUTION IN CASE OSINT NEEDS
        !          3486: *      TO ASSIGN FILES OR PERFORM OTHER NECESSARY SERVICES.
        !          3487: *      OSINT MAY ALSO CHOOSE TO SEND A MESSAGE TO ONLINE
        !          3488: *      TERMINAL (IF ANY) INDICATING THAT EXECUTION IS STARTING.
        !          3489: *
        !          3490: *      JSR  SYSBX            CALL BEFORE EXECUTION STARTS
        !          3491: 
        !          3492: 
        !          3493: Page 76              S P I T B O L -- PROCEDURES SECTION
        !          3494: 
        !          3495: *
        !          3496: *      SYSCI -- CONVERT INTEGER
        !          3497: *
        !          3498: *      SYSCI  EXP  E,0       DEFINE EXTERNAL ENTRY POINT
        !          3499: *
        !          3500: *      SYSCI IS AN OPTIONAL OSINT ROUTINE THAT CAUSES SPITBOL TO
        !          3501: *      CALL SYSCI TO CONVERT INTEGER VALUES TO STRINGS, RATHER
        !          3502: *      THAN USING THE SPITBOL INTERNAL CONVERSION CODE. THIS
        !          3503: *      CODE MAY BE LESS EFFICIENT ON MACHINES WITH HARDWARE
        !          3504: *      CONVERSION INSTRUCTIONS AND IN SUCH CASES, IT MAY BE AN
        !          3505: *      ADVANTAGE TO INCLUDE SYSCI.  THE SYMBOL .CSCI MUST BE
        !          3506: *      DEFINED IF THIS ROUTINE IS TO BE USED.
        !          3507: *
        !          3508: *      THE RULES FOR CONVERTING INTEGERS TO STRINGS ARE THAT
        !          3509: *      POSITIVE VALUES ARE REPRESENTED WITHOUT ANY SIGN, AND
        !          3510: *      THERE ARE NEVER ANY LEADING BLANKS OR ZEROS, EXCEPT IN
        !          3511: *      THE CASE OF ZERO ITSELF WHICH IS REPRESENTED AS A SINGLE
        !          3512: *      ZERO DIGIT.  NEGATIVE NUMBERS ARE REPRESENTED WITH A
        !          3513: *      PRECEDING MINUS SIGN.  THERE ARE NEVER ANY TRAILING
        !          3514: *      BLANKS, AND CONVERSION CANNOT FAIL.
        !          3515: *
        !          3516: *      (IA)                  VALUE TO BE CONVERTED
        !          3517: *      JSR  SYSCI            CALL TO CONVERT INTEGER VALUE
        !          3518: *      (XL)                  POINTER TO PSEUDO-SCBLK WITH STRING
        !          3519: *
        !          3520: *      SYSDT -- GET CURRENT DATE
        !          3521: *
        !          3522: *      SYSDT  EXP  E,0       DEFINE EXTERNAL ENTRY POINT
        !          3523: *
        !          3524: *      SYSDT IS USED TO OBTAIN THE CURRENT DATE. THE DATE IS
        !          3525: *      RETURNED AS A CHARACTER STRING IN ANY FORMAT APPROPRIATE
        !          3526: *      TO THE OPERATING SYSTEM IN USE. IT MAY ALSO CONTAIN THE
        !          3527: *      CURRENT TIME OF DAY. SYSDT IS USED TO IMPLEMENT THE
        !          3528: *      SNOBOL4 FUNCTION DATE().
        !          3529: *
        !          3530: *      JSR  SYSDT            CALL TO GET DATE
        !          3531: *      (XL)                  POINTER TO BLOCK CONTAINING DATE
        !          3532: *
        !          3533: *      THE FORMAT OF THE BLOCK IS LIKE AN SCBLK EXCEPT THAT
        !          3534: *      THE FIRST WORD NEED NOT BE SET. THE RESULT IS COPIED
        !          3535: *      INTO SPITBOL DYNAMIC MEMORY ON RETURN.
        !          3536: 
        !          3537: 
        !          3538: Page 77              S P I T B O L -- PROCEDURES SECTION
        !          3539: 
        !          3540: *
        !          3541: *      SYSEC -- END -COPY INCLUSION
        !          3542: *
        !          3543: *      SYSEC  PRC  E,2       DEFINE EXTERNAL ENTRY POINT
        !          3544: *
        !          3545: *      (WA)               IOTAG FROM MATCHING SYSSC
        !          3546: *      JSR  SYSEC         CALL TO END -COPY
        !          3547: *      PPM                DUMMY FAIL EXIT (DO NOT USE)
        !          3548: *      PPM  EROSI         ERROR EXIT
        !          3549: *      (WA,WB,WC)         DESTRUCTABLE
        !          3550: *
        !          3551: *      THE CALL TO SYSEC SIGNALS THE OSINT THAT INPUT IS
        !          3552: *      TO BE CLOSED OUT FROM THE CURRENT SYSRD -COPY FILE
        !          3553: *      AND INPUT RESTORED FROM THE NEXT OUTER LEVEL.  WA
        !          3554: *      IS THE IOTAG RETURNED FROM THE MATCHING SYSSC CALL.
        !          3555: *      NOTE THAT SYSEC MAY BE CALLED EITHER AS A
        !          3556: *      CONSEQUENCE OF FLOSI EXIT FROM SYSRD, OR PREMATURELY
        !          3557: *      IN THE EVENT OF A CODE() COMPILATION ERROR CONTAINING
        !          3558: *      A -COPY, OR "END" LABEL ENCOUNTERED DURING INITIAL
        !          3559: *      COMPILATION.  A MISSING FLOSI EXIT FOR SYSEC IS INCLUDED
        !          3560: *      FOR STRUCTURAL CONFORMANCE, BUT MUST NEVER BE TAKEN.
        !          3561: 
        !          3562: 
        !          3563: Page 78              S P I T B O L -- PROCEDURES SECTION
        !          3564: 
        !          3565: *
        !          3566: *      SYSSC -- START -COPY INCLUSION FOR SYSRD
        !          3567: *
        !          3568: *      SYSSC  PRC  E,2    DEFINE EXTERNAL ENTRY POINT
        !          3569: *
        !          3570: *      (XR)               FILETAG SCBLK FOR -COPY
        !          3571: *      JSR  SYSSC         CALL TO NEST -COPY INPUT
        !          3572: *      PPM                DUMMY FAIL EXIT (DO NOT USE)
        !          3573: *      PPM  EROSI         ERROR EXIT
        !          3574: *      (WA)               IOTAG TO BE PRESENTED TO SYSEC
        !          3575: *      (WB,WC)            DESTRUCTABLE
        !          3576: *
        !          3577: *      SYSSC IS CALLED BY SPITBOL WHEN A -COPY CONTROL
        !          3578: *      CARD IS ENCOUNTERED, EITHER AT COMPILE TIME IN
        !          3579: *      THE INPUT STREAM OR AT EXECUTION TIME IN A
        !          3580: *      CALL TO CODE.  THE INTENDED SEMANTICS ARE THAT
        !          3581: *      FURTHER INPUT FROM THE CURRENT STANDARD INPUT
        !          3582: *      FILE BE SUSPENDED AND THAT SUBSEQENT CALLS
        !          3583: *      TO SYSRD RETURN LINES FROM THE NEW FILE
        !          3584: *      IDENTIFIED BY THE SCBLK PTR GIVEN TO SYSSC IN XR.
        !          3585: *      THIS NEW FILE IS CLOSED AND SUSPENDED INPUT
        !          3586: *      RESUMED BY THE OSINT WHEN SYSEC IS CALLED.
        !          3587: *
        !          3588: *      FAILURE TO FIND A -COPY FILE MUST BE VIEWED
        !          3589: *      AS AN EROSI.  THE DUMMY PPM IS INCLUDED ONLY FOR
        !          3590: *      STRUCTURAL COMPATIBILITY WITH OTHER FLOSI/EROSI
        !          3591: *      OSINT ROUTINE DEFINITIONS.  THE IOTAG RETURNED
        !          3592: *      WILL BE SAVED AND PRESENTED TO SYSEC
        !          3593: *      WHEN SPITBOL WISHES THIS LEVEL OF -COPY TERMINATED.
        !          3594: *      IT MUST BE NON-COLLECTABLE.
        !          3595: *
        !          3596: *      IN GENERAL, SPITBOL SUPPORTS ARBITRARY NESTING
        !          3597: *      OF SYSSC/SYSEC IN THE NATURAL MANNER.  IT IS
        !          3598: *      RECOGNISED THAT THE IMPLEMENTATION MAY NEED TO
        !          3599: *      LIMIT THE DEGREE OF NESTING.  HOWEVER
        !          3600: *      IMPLEMENTORS ARE MOST STRONGLY ENCOURAGED TO
        !          3601: *      PROVIDE AT LEAST A SINGLE LEVEL OF -COPY TO GIVE
        !          3602: *      A DEGREE OF MODULARITY TO A LANGUAGE WHICH
        !          3603: *      DEFINITELY NEEDS IT.
        !          3604: 
        !          3605: 
        !          3606: Page 79              S P I T B O L -- PROCEDURES SECTION
        !          3607: 
        !          3608: *
        !          3609: *      SYSEF -- EJECT FILE
        !          3610: *
        !          3611: *      SYSEF  EXP  E,2       DEFINE EXTERNAL ENTRY POINT
        !          3612: *
        !          3613: *      SYSEF IS USED TO WRITE A PAGE EJECT TO A NAMED FILE. IT
        !          3614: *      MAY ONLY BE USED FOR FILES WHERE THIS CONCEPT MAKES
        !          3615: *      SENSE. NOTE THAT SYSEF IS NOT NORMALLY USED FOR THE
        !          3616: *      STANDARD OUTPUT FILE (SEE SYSEP).
        !          3617: *      THE FAILURE RETURN SHOULD BE USED IF THE FILE DOES NOT
        !          3618: *      PERMIT EJECTS.
        !          3619: *      THE ERROR RETURN SHOULD BE USED FOR OTHER UNSPECIFIED
        !          3620: *      FAILURE EVENTS.
        !          3621: *      SEE SYSIO FOR ACCOUNT OF FILETAG, IOTAG.
        !          3622: *
        !          3623: *      (XL)                  FILETAG (PTR TO SCBLK FOR ARG)
        !          3624: *      (WA)                  IOTAG FROM INITIAL SYSIO CALL
        !          3625: *      (WC)                  VALUE/0 FOR INTEGER/STRING FILETAG
        !          3626: *      JSR  SYSEF            CALL TO EJECT FILE
        !          3627: *      PPM  FLOSI            STATEMENT FAILURE RETURN
        !          3628: *      PPM  EROSI            (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
        !          3629: *      (XL,WA,WC)            DESTROYED
        !          3630: *
        !          3631: *      SYSEJ -- END OF JOB
        !          3632: *
        !          3633: *      SYSEJ  EXP  E,0       DEFINE EXTERNAL ENTRY POINT
        !          3634: *
        !          3635: *      SYSEJ IS CALLED ONCE AT THE END OF EXECUTION TO
        !          3636: *      TERMINATE THE RUN.
        !          3637: *      RUN STATISTICS, ENDING MESSAGES ETC WILL HAVE BEEN
        !          3638: *      PROVIDED ALREADY BY SPITBOL BEFORE THIS CALL IS MADE.
        !          3639: *
        !          3640: *      (WA)                  VALUE OF CODE KEYWORD
        !          3641: *      JSR  SYSEJ            CALL TO END JOB
        !          3642: *                            DOES NOT RETURN TO CALLER
        !          3643: *
        !          3644: 
        !          3645: 
        !          3646: Page 80              S P I T B O L -- PROCEDURES SECTION
        !          3647: 
        !          3648: *
        !          3649: *      SYSEM -- GET ERROR MESSAGE TEXT
        !          3650: *
        !          3651: *      SYSEM  EXP  E,0       DEFINE EXTERNAL ENTRY POINT
        !          3652: *
        !          3653: *      SYSEM IS USED TO OBTAIN THE TEXT OF ERR, ERB CALLS IN THE
        !          3654: *      SOURCE PROGRAM OR OF OSINT ERROR MESSAGES.
        !          3655: *      THE ERROR CODE IS EITHER THAT GIVEN IN THE ERR, ERB
        !          3656: *      ORDER OR IS THAT RETURNED VIA THE EROSI MECHANISM OF
        !          3657: *      AN EARLIER OSINT CALL.
        !          3658: *      SYSEM SHOULD RETURN A NULL STRING (LENGTH ZERO) IF IT
        !          3659: *      DOES NOT SUPPORT THIS FEATURE OR NO MESSAGE CORRESPONDS
        !          3660: *      TO THE PRESENTED CODE.
        !          3661: *      IN THIS CASE, SPITBOL WILL PRINT THE STRING, IF ANY,
        !          3662: *      STORED IN THE ERRTEXT KEYWORD.
        !          3663: *
        !          3664: *      (WA)                  ERROR CODE NUMBER
        !          3665: *      JSR  SYSEM            CALL TO GET TEXT
        !          3666: *      (XR)                  POINTER TO TEXT OF MESSAGE
        !          3667: *
        !          3668: *      THE RETURNED VALUE IS A POINTER TO A BLOCK IN SCBLK
        !          3669: *      FORMAT EXCEPT THAT THE FIRST WORD NEED NOT BE SET. THE
        !          3670: *      STRING IS COPIED INTO DYNAMIC MEMORY ON RETURN.
        !          3671: 
        !          3672: 
        !          3673: Page 81              S P I T B O L -- PROCEDURES SECTION
        !          3674: 
        !          3675: *
        !          3676: *      SYSEN -- ENDFILE
        !          3677: *
        !          3678: *      SYSEN  EXP  E,2       DEFINE EXTERNAL ENTRY POINT
        !          3679: *
        !          3680: *      SYSEN IS USED TO IMPLEMENT THE SNOBOL4 FUNCTION ENDFILE.
        !          3681: *      THE FILE SHOULD NORMALLY BE CLOSED BY THIS CALL (UNLESS
        !          3682: *      THE CALL IS INTENDED TO ACCESS, VIA THE SECOND ARGUMENT,
        !          3683: *      SOME SPECIAL HOST FEATURE WHICH DOES NOT IMPLY CLOSURE).
        !          3684: *      ANY INTERNAL BUFFERS, TABLE ENTRIES OR MARKERS RELATING
        !          3685: *      TO THE FILE MAY BE FREED IF FILE CLOSURE OCCURS.
        !          3686: *      THE SECOND ARGUMENT IS USED TO REQUEST FEATURES SUCH AS
        !          3687: *      FILE DELETION, RENAMING, REPROTECTION, REWINDING ETC AS
        !          3688: *      APPROPRIATE TO THE HOST OPERATING SYSTEM. ITS FORMAT IS
        !          3689: *      HOST SPECIFIC AND IT IS THE RESPONSIBILITY OF SYSEN TO
        !          3690: *      PARSE IT.
        !          3691: *      (WA) IS USED AS A CLOSURE FLAG ON RETURN. IF THE VALUE
        !          3692: *      IS NON-ZERO, SUBSEQUENT INPUT/OUTPUT SYS-- CALLS
        !          3693: *      INVOKED THROUGH ACCESS TO THE ASSOCIATED VARIABLE WILL
        !          3694: *      OCCUR AS THOUGH THERE HAD BEEN NO SYSEN CALL.
        !          3695: *      IF IT IS SET TO ZERO SPITBOL WILL CAUSE STATEMENT FAILURE
        !          3696: *      FOR SUBSEQUENT ATTEMPTS TO INVOKE INPUT/OUTPUT ACTIVITY
        !          3697: *      THROUGH THE ASSOCIATED VARIABLE (CF A READ MADE AFTER
        !          3698: *      PHYSICAL END OF FILE IS REACHED). THIS WILL BE DONE
        !          3699: *      WITHOUT ANY FURTHER INVOCATION OF SYS-- ROUTINES.
        !          3700: *      SEE SYSIO FOR ACCOUNT OF FILETAG, IOTAG.
        !          3701: *
        !          3702: *      (XL)                  FILETAG (PTR TO SCBLK FOR 1ST ARG)
        !          3703: *      (XR)                  SCBLK PTR FOR 2ND ARG (0 IF NONE)
        !          3704: *      (WA)                  IOTAG FROM INITIAL SYSIO CALL
        !          3705: *      (WC)                  VALUE/0 FOR INTEGER/STRING FILETAG
        !          3706: *      JSR  SYSEN            CALL TO ENDFILE
        !          3707: *      PPM  FLOSI            STATEMENT FAILURE RETURN
        !          3708: *      PPM  EROSI            (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
        !          3709: *      (WA)                  CLOSURE FLAG (SEE ABOVE)
        !          3710: *      (XL,XR,WC)            DESTROYED
        !          3711: *
        !          3712: *      THE FAILURE RETURN SHOULD BE USED IF THE FILE DOES NOT
        !          3713: *      PERMIT ENDFILE (E.G. STANDARD INPUT AND OUTPUT FILES)
        !          3714: *      OR IF IT IS CLOSED ALREADY OR FOR APPROPRIATE CONDITIONS
        !          3715: *      WHERE A NON-NULL SECOND ARGUMENT WAS SUPPLIED.
        !          3716: *      THE ERROR RETURN SHOULD BE USED FOR OTHER UNSPECIFIED
        !          3717: *      FAILURE EVENTS.
        !          3718: 
        !          3719: 
        !          3720: Page 82              S P I T B O L -- PROCEDURES SECTION
        !          3721: 
        !          3722: *
        !          3723: *      SYSEP -- EJECT PRINTER PAGE
        !          3724: *
        !          3725: *      SYSEP  EXP  E,2       DEFINE EXTERNAL ENTRY POINT
        !          3726: *
        !          3727: *      SYSEP IS CALLED TO PERFORM A PAGE EJECT ON THE STANDARD
        !          3728: *      PRINTER OUTPUT FILE (CORRESPONDING TO SYSPR OUTPUT).
        !          3729: *      IF THE STANDARD PRINTER FILE DOES NOT SUPPORT PAGE EJECTS
        !          3730: *      THEN THIS ROUTINE SHOULD USE THE FAILURE RETURN.
        !          3731: *      IF SYSPP OPTIONS ARE SET TO MAKE THE TERMINAL THE
        !          3732: *      STANDARD OUTPUT FILE, EITHER ENSURE THAT PAGE SIZE IS
        !          3733: *      SET TO AVOID EJECTS OR CODE THIS ROUTINE TO HANDLE
        !          3734: *      POTENTIAL EJECTS TO TERMINAL.
        !          3735: *
        !          3736: *      JSR  SYSEP            CALL TO EJECT PRINTER OUTPUT
        !          3737: *      PPM  FLOSI            STATEMENT FAILURE RETURN
        !          3738: *      PPM  EROSI            (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
        !          3739: 
        !          3740: 
        !          3741: Page 83              S P I T B O L -- PROCEDURES SECTION
        !          3742: 
        !          3743: *
        !          3744: *      SYSEX -- CALL EXTERNAL FUNCTION
        !          3745: *
        !          3746: *      SYSEX  EXP  E,1       DEFINE EXTERNAL ENTRY POINT
        !          3747: *
        !          3748: *      SYSEX IS CALLED TO PASS CONTROL TO AN EXTERNAL FUNCTION
        !          3749: *      PREVIOUSLY LOADED WITH A CALL TO SYSLD.
        !          3750: *
        !          3751: *      (XS)                  POINTER TO ARGUMENTS ON STACK
        !          3752: *      (XL)                  POINTER TO CONTROL BLOCK (EFBLK)
        !          3753: *      (WA)                  NUMBER OF ARGUMENTS ON STACK
        !          3754: *      JSR  SYSEX            CALL TO PASS CONTROL TO FUNCTION
        !          3755: *      PPM  LOC              RETURN HERE IF FUNCTION CALL FAILS
        !          3756: *      (XS)                  POPPED PAST ARGUMENTS
        !          3757: *      (XR)                  RESULT RETURNED
        !          3758: *
        !          3759: *      THE ARGUMENTS ARE STORED ON THE STACK WITH
        !          3760: *      THE LAST ARGUMENT AT 0(XS). ON RETURN, XS
        !          3761: *      IS POPPED PAST THE ARGUMENTS.
        !          3762: *
        !          3763: *      THE FORM OF THE ARGUMENTS AS PASSED IS THAT USED IN THE
        !          3764: *      SPITBOL TRANSLATOR (SEE DEFINITIONS AND DATA STRUCTURES
        !          3765: *      SECTION). THE CONTROL BLOCK FORMAT IS ALSO DESCRIBED
        !          3766: *      (UNDER EFBLK) IN THIS SECTION.
        !          3767: *
        !          3768: *      THERE ARE TWO WAYS OF RETURNING A RESULT.
        !          3769: *
        !          3770: *      1)   RETURN A POINTER TO A BLOCK IN DYNAMIC STORAGE. THIS
        !          3771: *           BLOCK MUST BE IN EXACTLY CORRECT FORMAT, INCLUDING
        !          3772: *           THE FIRST WORD. ONLY FUNCTIONS WRITTEN WITH INTIMATE
        !          3773: *           KNOWLEDGE OF THE SYSTEM WILL RETURN IN THIS WAY.
        !          3774: *
        !          3775: *      2)   STRING, INTEGER AND REAL RESULTS MAY BE RETURNED BY
        !          3776: *           POINTING TO A PSEUDO-BLOCK OUTSIDE DYNAMIC MEMORY.
        !          3777: *           THIS BLOCK IS IN ICBLK, RCBLK OR SCBLK FORMAT EXCEPT
        !          3778: *           THAT THE FIRST WORD WILL BE OVERWRITTEN
        !          3779: *           BY A TYPE WORD ON RETURN AND SO NEED NOT
        !          3780: *           BE CORRECTLY SET. SUCH A RESULT IS
        !          3781: *           COPIED INTO MAIN STORAGE BEFORE PROCEEDING.
        !          3782: *           UNCONVERTED RESULTS MAY SIMILARLY BE RETURNED IN A
        !          3783: *           PSEUDO-BLOCK WHICH IS IN CORRECT FORMAT INCLUDING
        !          3784: *           TYPE WORD RECOGNISABLE BY GARBAGE COLLECTOR SINCE
        !          3785: *           BLOCK IS COPIED INTO DYNAMIC MEMORY.
        !          3786: 
        !          3787: 
        !          3788: Page 84              S P I T B O L -- PROCEDURES SECTION
        !          3789: 
        !          3790: *
        !          3791: *      SYSHS -- GIVE ACCESS TO HOST COMPUTER FEATURES ON
        !          3792: *
        !          3793: *      SYSHS  EXP  E,2       DEFINE EXTERNAL ENTRY POINT
        !          3794: *
        !          3795: *      PROVIDES MEANS FOR IMPLEMENTING SPECIAL FEATURES
        !          3796: *      DIFFERENT HOST COMPUTERS. THE ONLY DEFINED ENTRIES ARE
        !          3797: *      (1) ALL ARGUMENTS ARE NULL IN WHICH CASE SYSHS RETURNS
        !          3798: *      AN SCBLK CONTAINING NAME OF COMPUTER, NAME OF
        !          3799: *      OPERATING SYSTEM AND NAME OF SITE SEPARATED BY COLONS.
        !          3800: *      (2) FIRST ARGUMENT IS 1 (AS AN INTEGER OR STRING) TO GET,
        !          3801: *      AS A STRING, THE JCL COMMAND LINE FOR THE SPITBOL RUN.
        !          3802: *      ALL ENTRY PARAMETERS ARE CONVERTED TO STRINGS BEFORE THE
        !          3803: *      CALL IS MADE.
        !          3804: *      THE RESULT RETURNED FROM ANY CALL IS A STRING IN THE FORM
        !          3805: *      OF AN SCBLK WITH A POINTER TO IT IN XL. A NULL STRING
        !          3806: *      MAY BE RETURNED BY POINTING TO AN SCBLK WITH LENGTH
        !          3807: *      FIELD ZERO.
        !          3808: *      SPITBOL COPIES THE STRING ON RETURN AND SUPPLIES THE
        !          3809: *      CORRECT VALUE FOR THE FIRST WORD.
        !          3810: *      RETURNS ARE PROVIDED TO PERMIT STATEMENT FAILURE OR
        !          3811: *      THE REPORTING OF ERRORS.
        !          3812: *
        !          3813: *      (WA)                  ARGUMENT 1 SCBLK
        !          3814: *      (XL)                  ARGUMENT 2 SCBLK
        !          3815: *      (XR)                  ARGUMENT 3 SCBLK
        !          3816: *      (WB)                  0 IF ALL ARGS ARE NULL ELSE NONZERO
        !          3817: *      JSR  SYSHS            CALL TO GET HOST INFORMATION
        !          3818: *      PPM  FLOSI            STATEMENT FAILURE RETURN
        !          3819: *      PPM  EROSI            (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
        !          3820: *      (XL)                  PTR TO SCBLK RESULT OF CALL
        !          3821: *      (XR,WA,WB)            DESTROYED
        !          3822: *
        !          3823: *      SYSID -- RETURN SYSTEM IDENTIFICATION
        !          3824: *
        !          3825: *      SYSID  EXP  E,0       DEFINE EXTERNAL ENTRY POINT
        !          3826: *
        !          3827: *      THIS ROUTINE SHOULD RETURN STRINGS TO HEAD THE STANDARD
        !          3828: *      PRINTER OUTPUT. THE FIRST STRING WILL BE APPENDED TO
        !          3829: *      A HEADING LINE OF THE FORM
        !          3830: *           MACRO SPITBOL VERSION V.V
        !          3831: *      SUPPLIED BY SPITBOL ITSELF. V.V ARE DIGITS GIVING THE
        !          3832: *      MAJOR VERSION NUMBER AND GENERALLY AT LEAST A MINOR
        !          3833: *      VERSION NUMBER RELATING TO OSINT SHOULD BE SUPPLIED TO
        !          3834: *      GIVE SAY
        !          3835: *           MACRO SPITBOL VERSION V.V(M.M)
        !          3836: *      THE SECOND STRING SHOULD IDENTIFY AT LEAST THE MACHINE
        !          3837: *      AND OPERATING SYSTEM.  PREFERABLY IT SHOULD INCLUDE
        !          3838: *      THE DATE AND TIME OF THE RUN.
        !          3839: *      OPTIONALLY THE STRINGS MAY INCLUDE SITE NAME OF THE
        !          3840: *      THE IMPLEMENTOR AND/OR MACHINE ON WHICH RUN TAKES PLACE,
        !          3841: *      UNIQUE SITE OR COPY NUMBER AND OTHER INFORMATION AS
        !          3842: *      APPROPRIATE WITHOUT MAKING IT SO LONG AS TO BE A
        !          3843: *      NUISANCE TO USERS.
        !          3844: *
        !          3845: *      JSR  SYSID            CALL FOR SYSTEM IDENTIFICATION
        !          3846: *      (XR)                  SCBLK PTR FOR ADDITION TO HEADER
        !          3847: *      (XL)                  SCBLK PTR FOR SECOND HEADER
        !          3848: 
        !          3849: 
        !          3850: Page 85              S P I T B O L -- PROCEDURES SECTION
        !          3851: 
        !          3852: *
        !          3853: *      SYSIL -- GET INPUT RECORD LENGTH
        !          3854: *
        !          3855: *      SYSIL  EXP  E,0       DEFINE EXTERNAL ENTRY POINT
        !          3856: *
        !          3857: *      SYSIL IS USED TO GET THE LENGTH OF THE NEXT INPUT RECORD
        !          3858: *      FROM A FILE PREVIOUSLY INPUT ASSOCIATED WITH A SYSIO
        !          3859: *      CALL. THE LENGTH RETURNED IS USED TO ESTABLISH A BUFFER
        !          3860: *      FOR A SUBSEQUENT SYSIN CALL.
        !          3861: *
        !          3862: *      (WA)                  IOTAG FROM INITIAL SYSIO CALL
        !          3863: *      JSR  SYSIL            CALL TO GET RECORD LENGTH
        !          3864: *      (WA)                  LENGTH
        !          3865: *
        !          3866: *      NO HARM IS DONE IF THE VALUE RETURNED IS TOO LONG SINCE
        !          3867: *      UNUSED SPACE WILL BE RECLAIMED AFTER THE SYSIN CALL.
        !          3868: *      SYSIL MUST NEVER REQUEST A NULL (ZERO LENGTH) BUFFER.
        !          3869: *
        !          3870: *      SYSIN -- READ INPUT RECORD
        !          3871: *
        !          3872: *      SYSIN  EXP  E,2       DEFINE EXTERNAL ENTRY POINT
        !          3873: *
        !          3874: *      SYSIN IS USED TO READ A RECORD FROM THE FILE WHICH WAS
        !          3875: *      REFERENCED IN A PRIOR CALL TO SYSIL (I.E. THESE CALLS
        !          3876: *      ALWAYS OCCUR IN PAIRS). THE BUFFER PROVIDED IS AN
        !          3877: *      SCBLK FOR A STRING OF LENGTH SET FROM THE SYSIL CALL.
        !          3878: *      IF THE ACTUAL LENGTH READ IS LESS THAN THIS, THE LENGTH
        !          3879: *      FIELD OF THE SCBLK MUST BE MODIFIED BEFORE RETURNING
        !          3880: *      UNLESS BUFFER IS RIGHT PADDED WITH BLANKS.
        !          3881: *      IT IS ALSO PERMISSIBLE TO TAKE EITHER OF THE ALTERNATIVE
        !          3882: *      RETURNS AFTER SCBLK LENGTH HAS BEEN MODIFIED.
        !          3883: *      THE FLOSI RETURN SHOULD BE TAKEN WHEN PHYSICAL END OF
        !          3884: *      FILE OCCURS.
        !          3885: *      SYSIN SHOULD BE PREPARED TO MAKE REPEATED ENDFILE RETURNS
        !          3886: *      BUT IN THE INTERESTS OF EFFICIENCY, IMPLEMENTORS
        !          3887: *      MAY CHOOSE TO LIMIT THE NUMBER OF SUCH RETURNS.
        !          3888: *      SEE SYSIO FOR ACCOUNT OF IOTAG.
        !          3889: *
        !          3890: *      (XR)                  POINTER TO BUFFER (SCBLK PTR)
        !          3891: *      (WA)                  IOTAG FROM INITIAL SYSIO CALL
        !          3892: *      (WC)                  LENGTH OF BUFFER IN CHARACTERS
        !          3893: *      JSR  SYSIN            CALL TO READ RECORD
        !          3894: *      PPM  FLOSI            STATEMENT FAILURE RETURN (ENDFILE)
        !          3895: *      PPM  EROSI            (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
        !          3896: *      (WA,WC)               DESTROYED
        !          3897: 
        !          3898: 
        !          3899: Page 86              S P I T B O L -- PROCEDURES SECTION
        !          3900: 
        !          3901: *
        !          3902: *      SYSIO -- INPUT/OUTPUT FILE ASSOCIATION
        !          3903: *
        !          3904: *      SYSIO  EXP  E,2       DEFINE EXTERNAL ENTRY POINT
        !          3905: *
        !          3906: *      SYSIO IS CALLED IN RESPONSE TO A SPITBOL INPUT() OR
        !          3907: *      OUTPUT() CALL.
        !          3908: *      THE FIRST ARGUMENT TO SUCH A CALL IS THE NAME OF A
        !          3909: *      SPITBOL VARIABLE WHICH IS NOT PASSED TO THIS ROUTINE.
        !          3910: *      THE SECOND ARGUMENT OF THE CALL WILL BE REFERRED TO FOR
        !          3911: *      CONVENIENCE AS THE FILETAG. IT IDENTIFIES IN SOME WAY
        !          3912: *      APPROPRIATE TO THE HOST, THE NAME OF THE FILE TO BE
        !          3913: *      OPENED. SPITBOL RECOGNISES THREE FORMS OF FILETAG,
        !          3914: *      (1) A NON-NUMERIC STRING IN WHICH CASE WC ON ENTRY WILL
        !          3915: *          CONTAIN ZERO
        !          3916: *      (2) AN INTEGER VALUE OR A STRING REPRESENTING AN INTEGER,
        !          3917: *          IN WHICH CASE WC ON ENTRY HOLDS THIS NUMERIC VALUE.
        !          3918: *      IN BOTH CASES, XL WILL CONTAIN A POINTER TO AN SCBLK
        !          3919: *      GIVING THE FILETAG AS A STRING ON ENTRY TO SYSIO.
        !          3920: *      (3) ONE OF THE NAMES, .INPUT, .OUTPUT, .TERMINAL
        !          3921: *          FOR ASSOCIATING THE FIRST ARGUMENT NAME TO THE
        !          3922: *          RELEVANT STANDARD FILE IN WHICH CASE SYSIO IS
        !          3923: *          NOT CALLED.
        !          3924: *      THE THIRD ARGUMENT OF THE CALL WILL BE CALLED THE
        !          3925: *      FILEPROPS. IT IS AN OPTIONAL STRING WHICH DETAILS FILE
        !          3926: *      PROPERTIES OR CHARACTERISTICS RELEVANT TO THE HOST
        !          3927: *      OPERATING SYSTEM. IT MAY INCLUDE INFORMATION ON RECORD
        !          3928: *      SIZE, RECORD TYPE, PAPER FEED CONTROL CHARACTERS, ACCESS
        !          3929: *      MODE, CHARACTER SET ETC. SUCH INFORMATION IS VERY HOST
        !          3930: *      DEPENDENT SO THE FORMAT IS NOT PRESCRIBED.
        !          3931: *      SYSIO MUST PARSE THE FILEPROPS ARGUMENT IF THE FEATURE
        !          3932: *      IS SUPPORTED.
        !          3933: *
        !          3934: *      SYSIO SHOULD ATTEMPT TO OPEN THE FILE AS REQUESTED, AND
        !          3935: *      SHOULD MAKE THE NORMAL RETURN IF SUCCESSFUL.
        !          3936: *      THE FLOSI RETURN SHOULD BE TAKEN FOR FILE NOT FOUND ON
        !          3937: *      INPUT() CALL, OR FOR AN OUTPUT() CALL FAILURE ON ACCOUNT
        !          3938: *      OF WRITE PROTECTION VIOLATION OR SIMILAR EVENTS.
        !          3939: *      THIS ALLOWS THE USER TO ATTEMPT RECOVERY.
        !          3940: *      THIS RETURN MAY BE RELEVANT FOR VARIOUS HOST
        !          3941: *      SPECIFIC EVENTS AT THE DISCRETION OF THE IMPLEMENTOR.
        !          3942: *      THE EROSI RETURN SHOULD BE USED TO REPORT THE NATURE OF
        !          3943: *      OTHER ERRORS.
        !          3944: *      IT IS THE TASK OF SYSIO TO FIND AND ADMINISTER ANY
        !          3945: *      BUFFER SPACE, TABLE ENTRIES OR OTHER INFORMATION NEEDED
        !          3946: *      FOR FILE INPUT/OUTPUT. SUCH SPACE MUST BE FOUND OUTSIDE
        !          3947: *      THE AREA ALLOCATED TO SPITBOL FOR STATIC AND DYNAMIC
        !          3948: *      STORE (UNLESS THE IMPLEMENTOR HAS INTIMATE KNOWLEDGE OF
        !          3949: *      THE INNER WORKINGS OF SPITBOL).
        !          3950: *      CORRELATION BETWEEN THE SYSIO CALL WHICH OPENS A FILE AND
        !          3951: *      THE SYS-- CALLS USED TO READ, WRITE AND MANIPULATE IT IS
        !          3952: *      BASED ON A ONE WORD VALUE REFERRED TO AS THE IOTAG.
        !          3953: *      THIS MUST BE PUT IN WA BEFORE MAKING A SUCCESSFUL RETURN
        !          3954: *      FROM SYSIO. ITS FORMAT IS ENTIRELY AT THE DISCRETION OF
        !          3955: *      IMPLEMENTORS WITH THE RESTRICTIONS (A) THAT IT MUST NOT
        !          3956: *      BE POSSIBLE FOR IT TO BE INTERPRETED AS AN ADDRESS IN
        !          3957: *      DYNAMIC MEMORY, SINCE THIS WILL CAUSE GARBAGE COLLECTION
        !          3958: *      ERRORS AND (B) IT MUST BE NON-ZERO.
        !          3959: 
        !          3960: 
        !          3961: Page 87              S P I T B O L -- PROCEDURES SECTION
        !          3962: 
        !          3963: *
        !          3964: *      SYSIO (CONTINUED)
        !          3965: *
        !          3966: *      DEPENDING ON THE HOST, IT MAY OR MAY NOT BE FEASIBLE
        !          3967: *      TO OPEN NEW FILES CONNECTED TO, AND OR CHANGE THE
        !          3968: *      PROPERTIES OF THE STANDARD INPUT AND OUTPUT FILES.
        !          3969: *      IOTAG IS PASSED AS A PARAMETER IN ALL SYS-- CALLS
        !          3970: *      RELATING TO ANY FILE EXCEPT THOSE FOR THE STANDARD
        !          3971: *      INPUT/OUTPUT FILES WHERE ANY REQUIRED IOTAG FIELD IS
        !          3972: *      ALWAYS PASSED AS ZERO. NOTE THAT SPITBOL ASSUMES SYSRD
        !          3973: *      AND SYSPR STANDARD FILES ARE ALREADY OPEN WHEN OSINT
        !          3974: *      FIRST PASSES CONTROL TO IT - NO CALLS OF SYSIO ARE MADE
        !          3975: *      FOR INITIAL OPENING OF THESE FILES.
        !          3976: *      THE FOLLOWING CONVENTIONS ARE ADOPTED.
        !          3977: *      (1)  IN ANY CALL, FILETAG ARG IS ALWAYS PRESENT.
        !          3978: *           IN ANY CALL, FILEPROPS MAY OR MAY NOT BE PRESENT.
        !          3979: *      (2)  IF ANY EARLIER SYSIO CALL HAS BEEN MADE WITH A
        !          3980: *           PARTICULAR FILETAG THEN THE RELEVANT IOTAG IS PASSED
        !          3981: *           IN AS A PARAMETER.
        !          3982: *      (3)  SPITBOL DOES NOT PRECLUDE ATTEMPTS TO OPEN A
        !          3983: *           FILE IDENTIFIED BY A PARTICULAR FILETAG FOR BOTH
        !          3984: *           INPUT AND OUTPUT BY SUCCESSIVE SYSIO CALLS. IT IS
        !          3985: *           FOR SYSIO TO ACCEPT OR REJECT SUCH CALLS, ALL OF
        !          3986: *           WHICH, SUBSEQUENT TO THE FIRST, WILL PASS THE
        !          3987: *           IOTAG AS A PARAMETER.
        !          3988: *      (4)  PARAMETER WB HOLDS VALUES AS FOLLOWS -
        !          3989: *           0  INPUT CALL FOR STANDARD INPUT (SYSRD) FILE
        !          3990: *           1  INPUT CALL FOR ANY OTHER FILE
        !          3991: *           2  OUTPUT CALL FOR STANDARD OUTPUT (SYSPR) FILE
        !          3992: *           3  OUTPUT CALL FOR ANY OTHER FILE.
        !          3993: *
        !          3994: *      (XL)                  FILETAG SCBLK POINTER
        !          3995: *      (XR)                  FILEPROPS SCBLK POINTER OR ZERO
        !          3996: *      (WA)                  IOTAG FROM PRIOR CALL OR ZERO
        !          3997: *      (WB)                  0,1,2,3 FOR ASSOCIATION TYPE
        !          3998: *      (WC)                  POSSIBLY INT VALUE OF FILETAG OR 0
        !          3999: *      JSR  SYSIO            CALL TO ASSOCIATE FILE
        !          4000: *      PPM  FLOSI            STATEMENT FAILURE RETURN
        !          4001: *      PPM  EROSI            (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
        !          4002: *      (WA)                  IOTAG
        !          4003: *      (XL,XR,WB,WC)         DESTROYED
        !          4004: 
        !          4005: 
        !          4006: Page 88              S P I T B O L -- PROCEDURES SECTION
        !          4007: 
        !          4008: *      THIS INTERFACE MAY BE SUMMARIZED BY THE FOLLOWING TABLE.
        !          4009: *      IT IS ASSUMED THAT THERE IS EXPLICIT OR IMPLICIT
        !          4010: *      NUMBERING OF FILE PARAMETERS APPEARING IN THE COMMAND
        !          4011: *      LINE USED TO INITIATE A SPITBOL RUN. IF WC CONTAINS A
        !          4012: *      NUMERIC ARG, /JCL $WC/ IMPLIES THE MATCHING FILE
        !          4013: *      PARAMETER FROM THE COMMAND LINE.
        !          4014: *
        !          4015: *      ---------------------------------------------------------
        !          4016: *      I               WA == 0 (FIRST CALL)                    I
        !          4017: *      ---------------------------------------------------------
        !          4018: *      I  WC == 0 (ALPHA FILETAG)  I WC /= 0 (NUMERIC FILETAG) I
        !          4019: *      I---------------------------I---------------------------I
        !          4020: *      I  XR == 0    I  XR /= 0    I  XR == 0    I  XR /= 0    I
        !          4021: *      I-------------I-------------I-------------I-------------I
        !          4022: *      I             I             I             I             I
        !          4023: *      I OPEN FILE,  I OPEN FILE   I OPEN FILE   I OPEN FILE   I
        !          4024: *      I RETURN IOTAGI WITH PROPS, I  JCL $WC,   I  JCL $WC    I
        !          4025: *      I             I RETURN IOTAGI RETURN IOTAGI  WITH PROPS,I
        !          4026: *      I             I             I             I RETURN IOTAGI
        !          4027: *      I             I             I             I             I
        !          4028: *      ---------------------------------------------------------
        !          4029: *
        !          4030: *      ---------------------------------------------------------
        !          4031: *      I             WA /= 0 (SUBSEQUENT CALL)                 I
        !          4032: *      ---------------------------------------------------------
        !          4033: *      I  WC == 0 (ALPHA FILETAG)  I WC /= 0 (NUMERIC FILETAG) I
        !          4034: *      I---------------------------I---------------------------I
        !          4035: *      I   XR == 0   I   XR /= 0   I   XR == 0   I   XR /= 0   I
        !          4036: *      I-------------I-------------I-------------I-------------I
        !          4037: *      I             I             I             I             I
        !          4038: *      I CLOSE FILE, I MODIFY FILE I CLOSE FILE  I MODIFY FILE I
        !          4039: *      IRE-OPEN FILE,I  PROPS,     I  JCL $WC,   I  JCL $WC    I
        !          4040: *      IRETURN IOTAG I             IRE-OPEN FILE,I  PROPS,     I
        !          4041: *      I             I             IRETURN IOTAG I             I
        !          4042: *      I             I          (*)I             I             I
        !          4043: *      ---------------------------------------------------------
        !          4044: *
        !          4045: *      INPUT ASSOCIATION FOR WB == 1
        !          4046: *      OUTPUT ASSOCIATION FOR WB == 3
        !          4047: *
        !          4048: *      IF WB == 0 OR WB == 2, THEN THE FILETAG IS .INPUT OR
        !          4049: *      .OUTPUT RESPECTIVELY.
        !          4050: *      OPTION (*) IS THE ONLY VALID OPTION IN GENERAL FOR
        !          4051: *      THESE CASES BUT OTHERS ARE NOT EXCLUDED IF AN
        !          4052: *      IMPLEMENTOR SEES SOME USE FOR THEM.
        !          4053: 
        !          4054: 
        !          4055: Page 89              S P I T B O L -- PROCEDURES SECTION
        !          4056: 
        !          4057: *
        !          4058: *      SYSLD -- LOAD EXTERNAL FUNCTION
        !          4059: *
        !          4060: *      SYSLD  EXP  E,2       DEFINE EXTERNAL ENTRY POINT
        !          4061: *
        !          4062: *      SYSLD IS CALLED IN RESPONSE TO THE USE OF THE SNOBOL4
        !          4063: *      LOAD FUNCTION. THE NAMED FUNCTION IS LOADED (WHATEVER
        !          4064: *      THIS MEANS), AND A POINTER IS RETURNED. THE POINTER WILL
        !          4065: *      BE USED ON SUBSEQUENT CALLS TO THE FUNCTION SEE (SYSEX).
        !          4066: *      THE FLOSI RETURN MAY BE TAKEN ON FAILURE TO FIND THE
        !          4067: *      FUNCTION AND THE EROSI RETURN TO REPORT ERRORS.
        !          4068: *
        !          4069: *      (XR)                  POINTER TO FUNCTION NAME (SCBLK)
        !          4070: *      (XL)                  POINTER TO LIBRARY NAME (SCBLK)
        !          4071: *      JSR  SYSLD            CALL TO LOAD FUNCTION
        !          4072: *      PPM  FLOSI            STATEMENT FAILURE RETURN
        !          4073: *      PPM  EROSI            (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
        !          4074: *      (XR)                  POINTER TO LOADED CODE
        !          4075: *
        !          4076: *      THE SIGNIFICANCE OF THE POINTER RETURNED IS UP TO THE
        !          4077: *      SYSTEM INTERFACE ROUTINE. THE ONLY RESTRICTION IS THAT
        !          4078: *      IF THE POINTER IS WITHIN DYNAMIC STORAGE, IT MUST BE
        !          4079: *      A PROPER BLOCK POINTER.
        !          4080: *
        !          4081: *      SYSMM -- GET MORE MEMORY
        !          4082: *
        !          4083: *      SYSMM  EXP  E,0       DEFINE EXTERNAL ENTRY POINT
        !          4084: *
        !          4085: *      SYSMM IS CALLED IN AN ATTEMPT TO ALLOCATE MORE DYNAMIC
        !          4086: *      MEMORY. THIS MEMORY MUST BE ALLOCATED CONTIGUOUSLY WITH
        !          4087: *      THE CURRENT DYNAMIC DATA AREA.
        !          4088: *
        !          4089: *      THE AMOUNT ALLOCATED IS UP TO THE SYSTEM TO DECIDE. ANY
        !          4090: *      VALUE IS ACCEPTABLE INCLUDING ZERO IF ALLOCATION IS
        !          4091: *      IMPOSSIBLE.
        !          4092: *
        !          4093: *      JSR  SYSMM            CALL TO GET MORE MEMORY
        !          4094: *      (XR)                  NUMBER OF ADDITIONAL WORDS OBTAINED
        !          4095: 
        !          4096: 
        !          4097: Page 90              S P I T B O L -- PROCEDURES SECTION
        !          4098: 
        !          4099: *
        !          4100: *      SYSMX -- SUPPLY MXLEN
        !          4101: *
        !          4102: *      SYSMX  EXP  E,0       DEFINE EXTERNAL ENTRY POINT
        !          4103: *
        !          4104: *      BECAUSE OF THE METHOD OF GARBAGE COLLECTION, NO SPITBOL
        !          4105: *      OBJECT IS ALLOWED TO OCCUPY MORE BAUS OF MEMORY THAN
        !          4106: *      THE INTEGER GIVING THE LOWEST ADDRESS OF DYNAMIC
        !          4107: *      (GARBAGE COLLECTABLE) MEMORY. MXLEN IS THE NAME USED TO
        !          4108: *      REFER TO THIS MAXIMUM LENGTH OF AN OBJECT AND FOR MOST
        !          4109: *      USERS OF MOST IMPLEMENTATIONS, PROVIDED DYNAMIC MEMORY
        !          4110: *      STARTS AT AN ADDRESS OF AT LEAST A FEW THOUSAND WORDS,
        !          4111: *      THERE IS NO PROBLEM.
        !          4112: *      IF THE DEFAULT STARTING ADDRESS IS LESS THAN SAY 10000 OR
        !          4113: *      20000, THEN A LOAD TIME OPTION SHOULD BE PROVIDED WHERE A
        !          4114: *      USER CAN REQUEST THAT HE BE ABLE TO CREATE LARGER
        !          4115: *      OBJECTS. THIS ROUTINE INFORMS SPITBOL OF THIS REQUEST IF
        !          4116: *      ANY. THE VALUE RETURNED IS EITHER AN INTEGER
        !          4117: *      REPRESENTING THE DESIRED VALUE OF MXLEN (AND HENCE THE
        !          4118: *      MINIMUM DYNAMIC STORE ADDRESS WHICH MAY RESULT IN
        !          4119: *      NON-USE OF SOME STORE) OR ZERO IF A DEFAULT IS ACCEPTABLE
        !          4120: *      IN WHICH MXLEN IS SET TO THE LOWEST ADDRESS ALLOCATED
        !          4121: *      TO DYNAMIC STORE BEFORE COMPILATION STARTS.
        !          4122: *      IF A NON-ZERO VALUE IS RETURNED, THIS IS USED FOR KEYWORD
        !          4123: *      MAXLNGTH. OTHERWISE THE INITIAL LOW ADDRESS OF DYNAMIC
        !          4124: *      MEMORY IS USED FOR THIS KEYWORD.
        !          4125: *
        !          4126: *      JSR  SYSMX            CALL TO GET MXLEN
        !          4127: *      (WA)                  EITHER MXLEN OR 0 FOR DEFAULT
        !          4128: 
        !          4129: 
        !          4130: Page 91              S P I T B O L -- PROCEDURES SECTION
        !          4131: 
        !          4132: *
        !          4133: *      SYSOU -- OUTPUT RECORD
        !          4134: *
        !          4135: *      SYSOU  EXP  E,2       DEFINE EXTERNAL ENTRY POINT
        !          4136: *
        !          4137: *      SYSOU IS USED TO WRITE A RECORD TO A FILE PREVIOUSLY
        !          4138: *      ASSOCIATED WITH A SYSIO CALL.
        !          4139: *      THE FLOSI RETURN IS TAKEN IF ANY MAXIMUM CAPACITY OF THE
        !          4140: *      FILE IS EXCEEDED.
        !          4141: *      SYSOU SHOULD BE PREPARED TO MAKE REPEATED FLOSI RETURNS
        !          4142: *      BUT IN THE INTERESTS OF EFFICIENCY, IMPLEMENTORS
        !          4143: *      MAY CHOOSE TO LIMIT THE NUMBER OF SUCH RETURNS.
        !          4144: *      SEE SYSIO FOR ACCOUNT OF IOTAG.
        !          4145: *
        !          4146: *      (XR)                  RECORD TO BE WRITTEN (SCBLK)
        !          4147: *      (WA)                  IOTAG FROM INITIAL SYSIO CALL
        !          4148: *      (WC)                  NUMBER OF CHARACTERS TO WRITE
        !          4149: *      JSR  SYSOU            CALL TO OUTPUT RECORD
        !          4150: *      PPM  FLOSI            STATEMENT FAILURE RETURN
        !          4151: *      PPM  EROSI            (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
        !          4152: *      (WA,WC)               DESTROYED
        !          4153: *
        !          4154: *      SYSPI -- PRINT ON INTERACTIVE TERMINAL
        !          4155: *
        !          4156: *      SYSPI  EXP  E,2       DEFINE EXTERNAL ENTRY POINT
        !          4157: *
        !          4158: *      IF SPITBOL IS RUN FROM AN ONLINE TERMINAL, OSINT CAN
        !          4159: *      REQUEST THAT MESSAGES SUCH AS COPIES OF COMPILATION
        !          4160: *      ERRORS BE SENT TO THE TERMINAL (SEE SYSPP). IF RELEVANT
        !          4161: *      REPLY WAS MADE BY SYSPP THEN SYSPI IS CALLED TO SEND SUCH
        !          4162: *      MESSAGES TO THE TERMINAL.
        !          4163: *      SYSPI IS ALSO USED FOR SENDING OUTPUT TO THE TERMINAL
        !          4164: *      THROUGH THE SPECIAL VARIABLE NAME, TERMINAL.
        !          4165: *      THE LINE LENGTH WILL NOT EXCEED THAT HELD IN XL ON
        !          4166: *      RETURN FROM SYSPP CALL AND MAY BE ZERO IN WHICH CASE A
        !          4167: *      BLANK LINE IS TO BE PRINTED.
        !          4168: *      IT IS POSSIBLE TO DIRECT STANDARD LISTING AND OTHER
        !          4169: *      OUTPUT TO THIS ROUTINE BY SELECTING OPTIONS IN SYSPP.
        !          4170: *
        !          4171: *      (XR)                  PTR TO LINE BUFFER (SCBLK)
        !          4172: *      (WA)                  LINE LENGTH
        !          4173: *      (WC)                  NUMBER OF CHARACTERS TO WRITE
        !          4174: *      JSR  SYSPI            CALL TO PRINT LINE
        !          4175: *      PPM  FLOSI            STATEMENT FAILURE RETURN
        !          4176: *      PPM  EROSI            (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
        !          4177: *      (WA,WC)               DESTROYED
        !          4178: 
        !          4179: 
        !          4180: Page 92              S P I T B O L -- PROCEDURES SECTION
        !          4181: 
        !          4182: *
        !          4183: *      SYSPP -- OBTAIN PRINT PARAMETERS
        !          4184: *
        !          4185: *      SYSPP -- OBTAIN PRINT PARAMETERS
        !          4186: *
        !          4187: *      SYSPP  EXP  E,0       DEFINE EXTERNAL ENTRY POINT
        !          4188: *
        !          4189: *      SYSPP IS CALLED ONCE DURING COMPILATION TO OBTAIN
        !          4190: *      PARAMETERS REQUIRED FOR CORRECT PRINTED OUTPUT FORMAT
        !          4191: *      AND TO SELECT OTHER OPTIONS. IT MAY ALSO BE CALLED AGAIN
        !          4192: *      AFTER SYSXI WHEN A LOAD MODULE IS RESUMED. IN THIS
        !          4193: *      CASE VALUES RETURNED IN XL, WA MAY BE LESS THAN OR EQUAL
        !          4194: *      TO THOSE RETURNED IN INITIAL CALL BUT MAY NOT BE
        !          4195: *      GREATER SINCE BUFFERS HAVE BEEN SET UP IN THE CORE IMAGE.
        !          4196: *      OSINT MUST ENSURE THAT NON-CONFLICTING OPTIONS ARE
        !          4197: *      SELECTED.
        !          4198: *      THE INFORMATION RETURNED IS -
        !          4199: *      1.   LINE LENGTH IN CHARS FOR OUTPUT TO TERMINAL. IF ZERO
        !          4200: *           IS RETURNED IT IS ASSUMED THERE IS NO ONLINE TERML.
        !          4201: *           IF A TERMINAL IS AVAILABLE ERROR MESSAGES WILL BE
        !          4202: *           SENT TO IT AS WELL AS TO THE LISTING FILE.
        !          4203: *      2.   LINE LENGTH IN CHARS FOR STANDARD PRINT FILE.
        !          4204: *           IF ZERO IS RETURNED IT IS ASSUMED THERE IS NO
        !          4205: *           STANDARD PRINT FILE.
        !          4206: *           IN THIS CASE SPITBOL MAY REDUCE LISTING OVERHEADS.
        !          4207: *           IF THIS OPTION IS SELECTED, SPECIFICATION OF OTHER
        !          4208: *           OPTIONS RELATING TO FILE CHARACTERISTICS IS
        !          4209: *           REDUNDANT (UNLESS THE OPTION TO SELECT TERMINAL
        !          4210: *           AS STANDARD OUTPUT FILE IS TAKEN).
        !          4211: *           IT IS NOT ADVISABLE TO RETURN BOTH XL AND WA AS ZERO
        !          4212: *           SINCE ERRORS CANNOT THEN BE REPORTED.
        !          4213: *      3.   NO OF LINES/PAGE. 0 IS PREFERABLE FOR A NON-PAGED
        !          4214: *           DEVICE (E.G. ONLINE TERMINAL) IN WHICH CASE LISTING
        !          4215: *           PAGE THROWS ARE SUPPRESSED.
        !          4216: *      4.   STANDARD INPUT MAY BE READ FROM THE TERMINAL,
        !          4217: *           IN WHICH CASE SYSRI WILL BE CALLED INSTEAD OF SYSRD.
        !          4218: *      5.   STANDARD OUTPUT MAY BE SENT TO TERMINAL, IN WHICH
        !          4219: *           CASE SYSPI WILL BE CALLED INSTEAD OF SYSPR.
        !          4220: *      6.   AN INITIAL -NOLIST OPTION WHICH SUPPRESSES LISTING
        !          4221: *           UNLESS THE PROGRAM CONTAINS AN EXPLICIT -LIST.
        !          4222: *      7.   OPTION TO SUPPRESS LISTING OF COMPILATION STATS.
        !          4223: *      8.   OPTION TO SUPPRESS LISTING OF EXECUTION STATS.
        !          4224: *           THESE OPTIONS ARE USEFUL FOR ESTABLISHED PROGRAMS.
        !          4225: *      9.   OPTION TO SUPPRESS EXECUTION AS THOUGH A
        !          4226: *           -NOEXECUTE CARD WERE SUPPLIED.
        !          4227: 
        !          4228: 
        !          4229: Page 93              S P I T B O L -- PROCEDURES SECTION
        !          4230: 
        !          4231: *
        !          4232: *      SYSPP (CONTINUED)
        !          4233: *
        !          4234: *      10.  BY DEFAULT, IF AN ONLINE TERMINAL IS AVAILABLE,
        !          4235: *           ERROR MESSAGE COPIES ARE SENT TO IT AS WELL AS TO
        !          4236: *           THE REGULAR OUTPUT FILE. THIS OPTION SUPPRESSES THE
        !          4237: *           DEFAULT.
        !          4238: *      11.  OPTION TO SUPPRESS SYSID LISTING HEADER.
        !          4239: *      12.  TWO BITS ARE ALLOCATED TO SELECT LISTING OPTION.
        !          4240: *            /00/ SIGNIFIES COMPACT LISTING SUITABLE FOR TERML.
        !          4241: *           A FEW LINE FEEDS PRECEDE THE PRINTING OF EACH
        !          4242: *           OF -- LISTING, COMPILATION STATISTICS, EXECUTION
        !          4243: *           OUTPUT, EXECUTION STATISTICS, DUMP OUTPUT.
        !          4244: *            /01/ SIGNIFIES  STANDARD LISTING OPTION IN WHICH
        !          4245: *           SOURCE LISTINGS INCLUDE SOME PAGE EJECTS BUT
        !          4246: *           NOT PRECEDING ALL ITEMS LISTED ABOVE.
        !          4247: *            /10/ MEANS AN EXTENDED LISTING WITH FULL SET OF
        !          4248: *           PAGE EJECTS.
        !          4249: *            /11/ IS REDUNDANT AND ACHIEVES SAME EFFECT AS /10/.
        !          4250: *
        !          4251: *      JSR  SYSPP            CALL TO GET PRINT PARAMETERS
        !          4252: *      (XL)              1.  TERMINAL LINE LENGTH
        !          4253: *      (WA)              2.  PRINT LINE LENGTH IN CHARS
        !          4254: *      (WB)              3.  NUMBER OF LINES/PAGE
        !          4255: *      (WC)                  BITS VALUE ...JIHGFEDCBA WHERE
        !          4256: *                        4.  A = 1 STD INPUT FROM TERMINAL
        !          4257: *                        5.  B = 1 STD OUTPUT TO TERMINAL
        !          4258: *                        6.  C = 1 TO SUPPRESS LISTING
        !          4259: *                        7.  D = 1 TO SUPPRESS COMPILN. STATS
        !          4260: *                        8.  E = 1 TO SUPPRESS EXECN. STATS
        !          4261: *                        9.  F = 1 TO SUPPRESS EXECUTION
        !          4262: *                        10. G = 1 TO SUPPRESS ERRORS TO TERML
        !          4263: *                        11. H = 1 TO SUPPRESS SYSID HEADER
        !          4264: *                        12. JI= 00, 01, 10 FOR LISTING OPTIONS
        !          4265: 
        !          4266: 
        !          4267: Page 94              S P I T B O L -- PROCEDURES SECTION
        !          4268: 
        !          4269: *
        !          4270: *      SYSPR -- PRINT LINE ON STANDARD OUTPUT FILE
        !          4271: *
        !          4272: *      SYSPR  EXP  E,2       DEFINE EXTERNAL ENTRY POINT
        !          4273: *
        !          4274: *      SYSPR IS USED TO PRINT A SINGLE LINE ON THE STANDARD
        !          4275: *      OUTPUT FILE.
        !          4276: *
        !          4277: *      (XR)                  POINTER TO LINE BUFFER (SCBLK)
        !          4278: *      (WA)                  LINE LENGTH
        !          4279: *      (WC)                  NUMBER OF CHARACTERS TO WRITE
        !          4280: *      JSR  SYSPR            CALL TO PRINT LINE
        !          4281: *      PPM  FLOSI            STATEMENT FAILURE RETURN
        !          4282: *      PPM  EROSI            (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
        !          4283: *      (WA,WC)               DESTROYED
        !          4284: *
        !          4285: *      THE BUFFER POINTED TO IS THE LENGTH OBTAINED FROM THE
        !          4286: *      SYSPP CALL AND IS FILLED OUT WITH TRAILING BLANKS. THE
        !          4287: *      VALUE IN WC IS THE ACTUAL LINE LENGTH WHICH MAY BE LESS
        !          4288: *      THAN THE MAXIMUM LINE LENGTH POSSIBLE.
        !          4289: *      NULL LINES (WC = 0) ARE POSSIBLE IN WHICH CASE A BLANK
        !          4290: *      LINE IS TO BE PRINTED.
        !          4291: *      IT IS POSSIBLE TO OPT FOR HAVING STANDARD OUTPUT DIRECTED
        !          4292: *      TO USE SYSPI INSTEAD OF SYSPR BY MAKING A PARTICULAR
        !          4293: *      REPLY IN SYSPP, IN WHICH CASE THIS ROUTINE IS NOT USED.
        !          4294: *
        !          4295: *      THE FLOSI RETURN IS USED WITH SYSTEMS WHICH LIMIT THE
        !          4296: *      AMOUNT OF PRINTED OUTPUT TO SIGNAL THAT THE LIMIT HAS
        !          4297: *      BEEN REACHED. IF POSSIBLE PRINTING SHOULD BE PERMITTED
        !          4298: *      AFTER THIS CONDITION HAS BEEN SIGNALLED ONCE TO
        !          4299: *      ALLOW FOR DUMP AND OTHER DIAGNOSTIC INFORMATION.
        !          4300: *      ASSUMING THIS TO BE POSSIBLE, SPITBOL MAY MAKE MORE SYSPR
        !          4301: *      CALLS. IF SUCH CALLS ARE UNACCEPTABLE, SYSPR MUST TAKE
        !          4302: *      APPROPRIATE ACTION (E.G. IGNORE THE CALL, TAKE THE EROSI
        !          4303: *      RETURN, CLOSE THE OUTPUT FILE, TERMINATE EXECUTION WITH
        !          4304: *      A DIAGNOSTIC).
        !          4305: 
        !          4306: 
        !          4307: Page 95              S P I T B O L -- PROCEDURES SECTION
        !          4308: 
        !          4309: *
        !          4310: *      SYSRD -- READ RECORD FROM STANDARD INPUT FILE
        !          4311: *
        !          4312: *      SYSRD  EXP  E,2       DEFINE EXTERNAL ENTRY POINT
        !          4313: *
        !          4314: *      SYSRD IS USED TO READ A RECORD FROM THE STANDARD INPUT
        !          4315: *      FILE. THE BUFFER PROVIDED IS AN SCBLK FOR A STRING THE
        !          4316: *      LENGTH OF WHICH IN CHARACTERS IS GIVEN IN WC, THIS
        !          4317: *      CORRESPONDING TO THE MAXIMUM LENGTH OF STRING WHICH
        !          4318: *      SPITBOL IS PREPARED TO RECEIVE.
        !          4319: *      IT CORRESPONDS TO XXX IN THE MOST RECENT -INXXX CARD
        !          4320: *      (DEFAULT 160).
        !          4321: *      IF FEWER THAN (WC) CHARACTERS ARE READ, THE LENGTH
        !          4322: *      FIELD OF THE SCBLK MUST BE ADJUSTED BEFORE RETURNING
        !          4323: *      UNLESS THE BUFFER IS RIGHT PADDED WITH BLANKS.
        !          4324: *      IT IS ALSO PERMISSIBLE TO TAKE THE ALTERNATIVE RETURNS
        !          4325: *      AFTER SUCH AN ADJUSTMENT HAS BEEN MADE.
        !          4326: *      SYSRD SHOULD BE PREPARED TO MAKE REPEATED ENDFILE RETURNS
        !          4327: *      BUT IN THE INTERESTS OF EFFICIENCY, IMPLEMENTORS
        !          4328: *      MAY CHOOSE TO LIMIT THE NUMBER OF SUCH RETURNS.
        !          4329: *      IT IS POSSIBLE TO OPT FOR READING STANDARD INPUT
        !          4330: *      FROM SYSRI INSTEAD OF SYSRD BY MAKING A PARTICULAR
        !          4331: *      REPLY IN SYSPP, IN WHICH CASE THIS ROUTINE IS NOT USED.
        !          4332: *
        !          4333: *      (XR)                  POINTER TO BUFFER (SCBLK PTR)
        !          4334: *      (WC)                  LENGTH OF BUFFER IN CHARACTERS
        !          4335: *      JSR  SYSRD            CALL TO READ LINE
        !          4336: *      PPM  FLOSI            STATEMENT FAILURE RETURN (ENDFILE)
        !          4337: *      PPM  EROSI            (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
        !          4338: *      (WC)                  DESTROYED
        !          4339: *
        !          4340: *      SYSRI -- READ RECORD FROM INTERACTIVE TERMINAL
        !          4341: *
        !          4342: *      SYSRI  EXP  E,2       DEFINE EXTERNAL ENTRY POINT
        !          4343: *
        !          4344: *      READS A RECORD FROM AN ONLINE TERMINAL.
        !          4345: *      THE BUFFER PROVIDED IS OF LENGTH EQUAL TO THE VALUE
        !          4346: *      RETURNED IN XL BY SYSPP. SYSRI SHOULD REPLACE THE
        !          4347: *      COUNT IN THE SECOND WORD OF THE SCBLK BY THE ACTUAL
        !          4348: *      CHARACTER COUNT UNLESS THE BUFFER IS RIGHT
        !          4349: *      PADDED WITH BLANKS.
        !          4350: *      IT IS ALSO PERMISSIBLE TO TAKE THE ALTERNATIVE
        !          4351: *      RETURNS AFTER ADJUSTING THE COUNT.
        !          4352: *      THE END OF FILE FLOSI RETURN MAY BE USED IF THIS MAKES
        !          4353: *      SENSE ON THE TARGET MACHINE (E.G. IF THERE IS AN
        !          4354: *      EOF CHARACTER.)
        !          4355: *
        !          4356: *      (XR)                  PTR TO CHAR BUFFER (SCBLK PTR)
        !          4357: *      (WC)                  LENGTH OF BUFFER IN CHARACTERS
        !          4358: *      JSR  SYSRI            CALL TO READ LINE FROM TERMINAL
        !          4359: *      PPM  FLOSI            STATEMENT FAILURE RETURN (ENDFILE)
        !          4360: *      PPM  EROSI            (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
        !          4361: *      (WC)                  DESTROYED
        !          4362: 
        !          4363: 
        !          4364: Page 96              S P I T B O L -- PROCEDURES SECTION
        !          4365: 
        !          4366: *
        !          4367: *      SYSST -- SET FILE POINTER
        !          4368: *
        !          4369: *      SYSST  EXP  E,2       DEFINE EXTERNAL ENTRY POINT
        !          4370: *
        !          4371: *      SYSST IS CALLED TO CHANGE THE POSITION OF A FILE
        !          4372: *      POINTER. THIS IS ACCOMPLISHED IN A SYSTEM DEPENDENT
        !          4373: *      MANNER, AND THUS THE 2ND AND 3RD ARGUMENTS ARE PASSED
        !          4374: *      UNCONVERTED.
        !          4375: *
        !          4376: *      (WA)                  IOTAG FROM INITIAL SYSIO CALL
        !          4377: *      (WB)                  2ND ARGUMENT
        !          4378: *      (WC)                  3RD ARGUMENT
        !          4379: *      JSR  SYSST            CALL TO SET FILE POINTER
        !          4380: *      PPM  FLOSI            FAIL RETURN
        !          4381: *      PPM  EROSI            ERROR RETURN
        !          4382: *      (WA,WB,WC)            DESTROYED
        !          4383: 
        !          4384: 
        !          4385: Page 97              S P I T B O L -- PROCEDURES SECTION
        !          4386: 
        !          4387: *
        !          4388: *      SYSTM -- GET EXECUTION TIME SO FAR
        !          4389: *
        !          4390: *      SYSTM  EXP  E,0       DEFINE EXTERNAL ENTRY POINT
        !          4391: *
        !          4392: *      SYSTM IS USED TO OBTAIN THE AMOUNT OF EXECUTION TIME
        !          4393: *      USED SO FAR SINCE SPITBOL WAS GIVEN CONTROL. THE UNITS
        !          4394: *      ARE DESCRIBED AS MILLISECONDS IN THE SPITBOL OUTPUT, BUT
        !          4395: *      THE EXACT MEANING IS SYSTEM DEPENDENT.
        !          4396: *      BY DEFINING .CTMD, THE DEFAULT UNITS CAN BE REPLACED BY
        !          4397: *      DECISECONDS.
        !          4398: *      WHERE POSSIBLE, THE VALUE SHOULD RELATE TO PROCESSOR
        !          4399: *      RATHER THAN CLOCK-ON-THE-WALL TIMING VALUES.
        !          4400: *
        !          4401: *      JSR  SYSTM            CALL TO GET TIMER VALUE
        !          4402: *      (IA)                  TIME SO FAR IN MILLISECONDS
        !          4403: *
        !          4404: *      SYSTT -- TRACE TOGGLE
        !          4405: *
        !          4406: *      SYSTT  EXP  E,0       DEFINE EXTERNAL ENTRY POINT
        !          4407: *
        !          4408: *      CALLED BY SPITBOL FUNCTION TRACE() WITH NO ARGS TO
        !          4409: *      TOGGLE A SYSTEM TRACE SWITCH.  THIS PERMITS TRACING OF
        !          4410: *      LABELS IN SPITBOL CODE TO BE TURNED ON OR OFF AND IS
        !          4411: *      INTENDED AS AN AID TO IMPLEMENTORS, NOT REGULAR USERS.
        !          4412: *
        !          4413: *      JSR  SYSTT            CALL TO TOGGLE TRACE SWITCH
        !          4414: *
        !          4415: *      SYSUL -- UNLOAD EXTERNAL FUNCTION
        !          4416: *
        !          4417: *      SYSUL  EXP  E,0       DEFINE EXTERNAL ENTRY POINT
        !          4418: *
        !          4419: *      SYSUL IS USED TO UNLOAD A FUNCTION PREVIOUSLY
        !          4420: *      LOADED WITH A CALL TO SYSLD.
        !          4421: *
        !          4422: *      (XR)                  PTR TO CONTROL BLOCK (EFBLK)
        !          4423: *      JSR  SYSUL            CALL TO UNLOAD FUNCTION
        !          4424: *
        !          4425: *      THE FUNCTION CANNOT BE CALLED FOLLOWING A SYSUL CALL
        !          4426: *      UNTIL ANOTHER SYSLD CALL IS MADE FOR THE SAME FUNCTION.
        !          4427: *
        !          4428: *      THE EFBLK CONTAINS THE FUNCTION CODE POINTER AND ALSO A
        !          4429: *      POINTER TO THE VRBLK CONTAINING THE FUNCTION NAME (SEE
        !          4430: *      DEFINITIONS AND DATA STRUCTURES SECTION).
        !          4431: 
        !          4432: 
        !          4433: Page 98              S P I T B O L -- PROCEDURES SECTION
        !          4434: 
        !          4435: *
        !          4436: *      SYSXI -- EXIT TO PRODUCE LOAD MODULE
        !          4437: *
        !          4438: *      SYSXI  EXP  E,2       DEFINE EXTERNAL ENTRY POINT
        !          4439: *
        !          4440: *      WHEN SYSXI IS CALLED, XL CONTAINS EITHER A STRING POINTER
        !          4441: *      OR ZERO. IN THE FORMER CASE, THE STRING GIVES THE
        !          4442: *      CHARACTER NAME OF A PROGRAM. THE INTENTION IS THAT
        !          4443: *      SPITBOL EXECUTION SHOULD BE TERMINATED FORTHWITH AND
        !          4444: *      THE NAMED PROGRAM LOADED AND EXECUTED. NO RETURN FROM
        !          4445: *      SYSXI OCCURS IN THIS CASE. THIS TYPE OF CHAIN
        !          4446: *      EXECUTION IS VERY SYSTEM DEPENDENT AND IMPLEMENTORS MAY
        !          4447: *      CHOOSE TO OMIT IT OR FIND IT IMPOSSIBLE TO PROVIDE.
        !          4448: *
        !          4449: *      IF (XL) IS ZERO,IA CONTAINS ONE OF THE FOLLOWING INTEGERS
        !          4450: *
        !          4451: *      -1, -2, -3
        !          4452: *           CREATE IF POSSIBLE A LOAD MODULE CONTAINING ONLY THE
        !          4453: *           IMPURE AREA OF MEMORY WHICH NEEDS TO BE LOADED WITH
        !          4454: *           A COMPATIBLE PURE SEGMENT FOR SUBSEQUENT EXECUTIONS.
        !          4455: *           VERSION NUMBERS TO CHECK COMPATIBILITY SHOULD BE
        !          4456: *           KEPT IN BOTH SEGMENTS AND CHECKED ON LOADING.
        !          4457: *           TO ASSIST WITH THIS CHECK, (XR) ON ENTRY IS A
        !          4458: *           POINTER TO AN SCBLK CONTAINING THE SPITBOL MAJOR
        !          4459: *           VERSION NUMBER V.V (SEE SYSID).
        !          4460: *
        !          4461: *      0    IF POSSIBLE, RETURN CONTROL TO JOB CONTROL
        !          4462: *           COMMAND LEVEL. THE EFFECT IF AVAILABLE WILL BE
        !          4463: *           SYSTEM DEPENDENT.
        !          4464: *
        !          4465: *      +1, +2, +3
        !          4466: *           CREATE IF POSSIBLE A LOAD MODULE FROM ALL OF
        !          4467: *           MEMORY. IT SHOULD BE POSSIBLE TO LOAD AND EXECUTE
        !          4468: *           THIS MODULE DIRECTLY.
        !          4469: *
        !          4470: *      IN THE CASE OF SAVED LOAD MODULES, THE STATUS OF OPEN
        !          4471: *      FILES IS NOT PRESERVED AND IMPLEMENTORS MAY CHOOSE TO
        !          4472: *      OFFER MEANS OF ATTACHING FILES BEFORE EXECUTION OF LOAD
        !          4473: *      MODULES STARTS OR LEAVE IT TO THE USER TO INCLUDE
        !          4474: *      SUITABLE INPUT(), OUTPUT() CALLS IN HIS PROGRAM.
        !          4475: *      SYSXI SHOULD MAKE A NOTE THAT NO I/O FILES INCLUDING
        !          4476: *      THE STANDARD ONES ARE AVAILABLE SO THAT
        !          4477: *      CALLS OF SYSIN, SYSOU, SYSPR, SYSRD SHOULD FAIL UNLESS
        !          4478: *      NEW ASSOCIATIONS ARE MADE FOR THE LOAD MODULE.
        !          4479: *      AT LEAST IN THE CASE OF THE STANDARD OUTPUT FILE, IT IS
        !          4480: *      RECOMMENDED THAT EITHER THE USER BE REQUIRED TO ATTACH
        !          4481: *      A FILE OR THAT A DEFAULT FILE IS ATTACHED, SINCE THE
        !          4482: *      PROBLEM OF ERROR MESSAGES GENERATED BY THE LOAD MODULE
        !          4483: *      IS OTHERWISE SEVERE.
        !          4484: 
        !          4485: 
        !          4486: Page 99              S P I T B O L -- PROCEDURES SECTION
        !          4487: 
        !          4488: *
        !          4489: *      SYSXI (CONTINUED)
        !          4490: *
        !          4491: *      IF THE REQUESTED SYSXI FEATURE IS NOT PROVIDED, THEN
        !          4492: *      THE FLOSI RETURN SHOULD BE TAKEN.
        !          4493: *
        !          4494: *      (XL)                  ZERO OR SCBLK PTR
        !          4495: *      (XR)                  PTR TO V.V SCBLK
        !          4496: *      (IA)                  SIGNED INTEGER ARGUMENT
        !          4497: *      (WA)                  VALUE OF CODE KEYWORD
        !          4498: *      JSR  SYSXI            CALL TO EXIT
        !          4499: *      PPM  FLOSI            STATEMENT FAILURE RETURN
        !          4500: *      PPM  EROSI            (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE
        !          4501: *      (REGISTERS)           SHOULD BE PRESERVED OVER CALL
        !          4502: *
        !          4503: *      LOADING AND RUNNING THE LOAD MODULE OR RETURNING FROM
        !          4504: *      JCL COMMAND LEVEL CAUSES EXECUTION TO RESUME AS THOUGH
        !          4505: *      THE NORMAL RETURN HAD BEEN TAKEN FROM THE CALL.
        !          4506: *      THE VALUE PASSED AS EXIT ARGUMENT IS USED TO INDICATE
        !          4507: *      OPTIONS REQUIRED ON RESUMPTION OF LOAD MODULE.
        !          4508: *      +1 OR -1 REQUIRE THAT ON RESUMPTION, SYSID AND SYSPP BE
        !          4509: *      CALLED AND A HEADING PRINTED ON THE STANDARD OUTPUT FILE.
        !          4510: *      +2 OR -2 INDICATE THAT SYSPP WILL BE CALLED BUT NOT SYSID
        !          4511: *      AND NO HEADING WILL BE PUT ON STANDARD OUTPUT FILE.
        !          4512: *      ABOVE OPTIONS HAVE THE OBVIOUS IMPLICATION THAT A
        !          4513: *      STANDARD O/P FILE MUST BE PROVIDED FOR THE LOAD MODULE.
        !          4514: *      +3 OR -3 INDICATE CALLS OF NEITHER SYSID NOR SYSPP
        !          4515: *      AND NO HEADING WILL BE PLACED ON STANDARD OUTPUT FILE.
        !          4516: *

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.