Annotation of researchv10dc/cmd/spitbol/spitv35.tok, revision 1.1

1.1     ! root        1: {{TTL{S{{{P I T B O L - REVISION HISTORY
        !             2: {{EJC{{{{
        !             3: *      R E V I S I O N   H I S T O R Y
        !             4: *      -------------------------------
        !             5: *
        !             6: *
        !             7: *      VERSION 3.5B (FEB 81... - SGD PATCHES)
        !             8: *      -----------------------------------
        !             9: *
        !            10: *      SGD03 - ADDITION OF .CNCI AND SYSCI (INT->STRING
        !            11: *              SYSTEM ROUTINE OPTION)
        !            12: *      SGD04 - (06-MAY-1981) MODIFIED INILN TO 132
        !            13: *      SGD05 - (13-MAY-1981) INSERTED MISSING WTB AFTER SYSMM
        !            14: *              CALLS
        !            15: *      SGD06 - (25-MAY-1981) MERGED IN PROFILER PATCHES
        !            16: *              (NOT MARKED)
        !            17: *      SGD07 - (25-MAY-1981) MUCHO PATCHES TO PROFILER (MARKED,
        !            18: *              BUT BEST JUST TO EXTRACT ENMASSE)
        !            19: *      SGD08 - (25-MAY-1981) USE STRING LENGTH IN HASHS
        !            20: *      SGD09 - (25-MAY-1981) FIXED SERIOUS PARSER PROBLEM
        !            21: *              RELATING TO (X Y) ON LINE BEING VIEWED AS PATTERN
        !            22: *              MATCH.  FIXED BY ADDITION OF NEW CMTYP VALUE
        !            23: *              C$CNP (CONCATENATION - NOT PATTERN MATCH)
        !            24: *      SGD10 - (01-AUG-1981) FIXED EXIT(N) RESPECIFICATION CODE
        !            25: *              TO PROPERLY OBSERVE HEADER SEMANTICS ON RETURN.
        !            26: *      SGD11 - (07-AUG-1981) BYPASS PRTPG CALL AT INITIALIZATION
        !            27: *              FOLLOWING COMPILATION IF NO OUTPUT GENERATED.
        !            28: *              THIS PREVENTS OUTPUT FILES CONSISTING OF THE
        !            29: *              HEADERS AND A FEW BLANK LINES WHEN THERE IS NO
        !            30: *              SOURCE LISTING AND NO COMPILATION STATS.
        !            31: *              ALSO FIX TIMSX INITIALIZATION IN SAME CODE.
        !            32: *      SGD12 - (17-AUG-1981) B$EFC CODE DID NOT CHECK FOR
        !            33: *              UNCONVERTED RESULT RETURNING NULL STRING.  FIXED.
        !            34: *      SGDBF - (   NOV-1981) ADDED BUFFER TYPE AND SYMBOL CNBF
        !            35: *      SGD13 - (03-MAR-1982) LOAD PFVBL FIELD IN RETRN FOR
        !            36: *              RETURN TRACING. THIS WAS CAUSING BUG ON RETURN
        !            37: *              TRACES THAT TRIED TO ACCESS THE VARIABLE NAME
        !            38: *      SGD14 - ADDED CHAR FUNCTION.  CHAR(N) RETURNS NTH
        !            39: *              CHARACTER OF HOST MACHINE CHARACTER SET.
        !            40: *              NOT CONDITIONALIZED OR MARKED.
        !            41: *      SGD15 - FIXED PROBLEM RELATING TO COMPILATION OF GOTO
        !            42: *              FIELDS CONTAINING SMALL INTEGERS (IN CONST SEC).
        !            43: *
        !            44: *      REG01 - (XX-AUG-82)
        !            45: *              ADDED CFP$U TO EASE TRANSLATION ON SMALLER
        !            46: *              SYSTEMS                  - CONDITIONAL .CUCF
        !            47: *              ADDED LOWER CASE SUPPORT - CONDITIONAL .CULC
        !            48: *              ADDED SET I/O FUNCTION   - CONDITIONAL .CUST
        !            49: *
        !            50: *      REG02 - (XX-SEP-82)
        !            51: *              CHANGED INILN AND AND INILS TO 258
        !            52: *
        !            53: *      REG03 - (XX-OCT-82)
        !            54: *              CONDITIONALIZED THE PAGE EJECT AFTER CALL TO SYSBX
        !            55: *              AND ADDED ANOTHER BEFORE CALL TO SYSBX, SO THAT,
        !            56: *              IF DESIRED BY THE IMPLEMENTOR, STANDARD OUTPUT
        !            57: *              WILL REFLECT ASSIGNMENTS MADE BY EXECUTING PROGRAM
        !            58: *              ONLY. CONDITIONAL .CUEJ CONTROLS - IF DEFINED
        !            59: *              EJECT IS BEFORE CALL TO SYSBX.
        !            60: *
        !            61: *      REG04 - (XX-NOV-82)
        !            62: *              FIXED DIFFICULTIES WITH LISTINGS DURING EXECUTION
        !            63: *              WHEN NO LISTING GENERATED DURING COMPILATION.
        !            64: *
        !            65: *              -LIST TO CODE() CAUSED BOMB. FIX IS TO RESET
        !            66: *              R$TTL AND R$STL TO NULLS NOT 0 AFTER COMPILATION.
        !            67: *              (LISTR AND LISTT EXPECT NULLS)
        !            68: *
        !            69: *              WHEN LISTING AND STATISTICS ROUTED TO DIFFERENT
        !            70: *              FILE THAN EXECUTION OUTPUT, ERROR MESSAGE IS SENT
        !            71: *              TO EXECUTION OUTPUT (AND GETS SEPARATED FROM
        !            72: *              ... IN STATEMENT ... MSG). LABO1 CALLS SYSAX AND
        !            73: *              STOPR DOES NOT CALL SYSAX IF ENTERED FROM LABO1.
        !            74: *
        !            75: *      REG05 - (XX-NOV-82)
        !            76: *              PREVENT CLEAR() FROM CLOBBERING PROTECTED VARIABLES
        !            77: *              AT LABEL SCLR5.
        !            78: *
        !            79: *      REG06 - (XX-NOV-82)
        !            80: *              FIXED GTEXP FROM ACCEPTING TRAILING SEMICOLON OR
        !            81: *              COLON. NOT LEGAL WAY TO END AN EXPRESSION.
        !            82: *
        !            83: *      VERSION 3.5A (OCT 79 - SGD PATCHES)
        !            84: *      -----------------------------------
        !            85: *
        !            86: *      SGD01 - PATCH IN ASIGN TO FIX MULTIPLE TRAP BLOCK PROBLEM
        !            87: *              (ASG10+2)
        !            88: *      SGD02 - PATCH IN GTARR TO FIX NULL CONVERT (GTAR9+0)
        !            89: *
        !            90: {{TTL{S{{{P I T B O L  -- BASIC INFORMATION
        !            91: {{EJC{{{{
        !            92: *
        !            93: *      GENERAL STRUCTURE
        !            94: *      -----------------
        !            95: *
        !            96: *      THIS PROGRAM IS A TRANSLATOR FOR A VERSION OF THE SNOBOL4
        !            97: *      PROGRAMMING LANGUAGE. LANGUAGE DETAILS ARE CONTAINED IN
        !            98: *      THE MANUAL MACRO SPITBOL BY DEWAR AND MCCANN, TECHNICAL
        !            99: *      REPORT 90, UNIVERSITY OF LEEDS 1976.  THE LANGUAGE
        !           100: *      IS IDENTICAL TO THAT IMPLEMENTED BY THE BTL TRANSLATOR
        !           101: *      (R. E. GRISWOLD ET AL.) WITH THE FOLLOWING EXCEPTIONS.
        !           102: *
        !           103: *      1)   REDEFINITION OF STANDARD SYSTEM FUNCTIONS AND
        !           104: *           OPERATORS IS NOT PERMITTED.
        !           105: *
        !           106: *      2)   THE VALUE FUNCTION IS NOT PROVIDED.
        !           107: *
        !           108: *      3)   ACCESS TRACING IS PROVIDED IN ADDITION TO THE
        !           109: *           OTHER STANDARD TRACE MODES.
        !           110: *
        !           111: *      4)   THE KEYWORD STFCOUNT IS NOT PROVIDED.
        !           112: *
        !           113: *      5)   THE KEYWORD FULLSCAN IS NOT PROVIDED AND ALL PATTERN
        !           114: *           MATCHING TAKES PLACE IN FULLSCAN MODE (I.E. WITH NO
        !           115: *           HEURISTICS APPLIED).
        !           116: *
        !           117: *      6)   A SERIES OF EXPRESSIONS SEPARATED BY COMMAS MAY
        !           118: *           BE GROUPED WITHIN PARENTHESES TO PROVIDE A SELECTION
        !           119: *           CAPABILITY. THE SEMANTICS ARE THAT THE SELECTION
        !           120: *           ASSUMES THE VALUE OF THE FIRST EXPRESSION WITHIN IT
        !           121: *           WHICH SUCCEEDS AS THEY ARE EVALUATED FROM THE LEFT.
        !           122: *           IF NO EXPRESSION SUCCEEDS THE ENTIRE STATEMENT FAILS
        !           123: *
        !           124: *      7)   AN EXPLICIT PATTERN MATCHING OPERATOR IS PROVIDED.
        !           125: *           THIS IS THE BINARY QUERY (SEE GIMPEL SIGPLAN OCT 74)
        !           126: *
        !           127: *      8)   THE ASSIGNMENT OPERATOR IS INTRODUCED AS IN THE
        !           128: *           GIMPEL REFERENCE.
        !           129: *
        !           130: *      9)   THE EXIT FUNCTION IS PROVIDED FOR GENERATING LOAD
        !           131: *           MODULES - CF. GIMPELS SITBOL.
        !           132: *
        !           133: *
        !           134: *      THE METHOD USED IN THIS PROGRAM IS TO TRANSLATE THE
        !           135: *      SOURCE CODE INTO AN INTERNAL PSEUDO-CODE (SEE FOLLOWING
        !           136: *      SECTION). AN INTERPRETOR IS THEN USED TO EXECUTE THIS
        !           137: *      GENERATED PSEUDO-CODE. THE NATURE OF THE SNOBOL4 LANGUAGE
        !           138: *      IS SUCH THAT THE LATTER TASK IS MUCH MORE COMPLEX THAN
        !           139: *      THE ACTUAL TRANSLATION PHASE. ACCORDINGLY, NEARLY ALL THE
        !           140: *      CODE IN THE PROGRAM SECTION IS CONCERNED WITH THE ACTUAL
        !           141: *      EXECUTION OF THE SNOBOL4 PROGRAM.
        !           142: {{EJC{{{{
        !           143: *
        !           144: *      INTERPRETIVE CODE FORMAT
        !           145: *      ------------------------
        !           146: *
        !           147: *      THE INTERPRETIVE PSEUDO-CODE CONSISTS OF A SERIES OF
        !           148: *      ADDRESS POINTERS. THE EXACT FORMAT OF THE CODE IS
        !           149: *      DESCRIBED IN CONNECTION WITH THE CDBLK FORMAT. THE
        !           150: *      PURPOSE OF THIS SECTION IS TO GIVE GENERAL INSIGHT INTO
        !           151: *      THE INTERPRETIVE APPROACH INVOLVED.
        !           152: *
        !           153: *      THE BASIC FORM OF THE CODE IS RELATED TO REVERSE POLISH.
        !           154: *      IN OTHER WORDS, THE OPERANDS PRECEDE THE OPERATORS WHICH
        !           155: *      ARE ZERO ADDRESS OPERATORS. THERE ARE SOME EXCEPTIONS TO
        !           156: *      THESE RULES, NOTABLY THE UNARY NOT OPERATOR AND THE
        !           157: *      SELECTION CONSTRUCTION WHICH CLEARLY REQUIRE ADVANCE
        !           158: *      KNOWLEDGE OF THE OPERATOR INVOLVED.
        !           159: *
        !           160: *      THE OPERANDS ARE MOVED TO THE TOP OF THE MAIN STACK AND
        !           161: *      THE OPERATORS ARE APPLIED TO THE TOP STACK ENTRIES. LIKE
        !           162: *      OTHER VERSIONS OF SPITBOL, THIS PROCESSOR DEPENDS ON
        !           163: *      KNOWING WHETHER OPERANDS ARE REQUIRED BY NAME OR BY VALUE
        !           164: *      AND MOVES THE APPROPRIATE OBJECT TO THE STACK. THUS NO
        !           165: *      NAME/VALUE CHECKS ARE INCLUDED IN THE OPERATOR CIRCUITS.
        !           166: *
        !           167: *      THE ACTUAL POINTERS IN THE CODE POINT TO A BLOCK WHOSE
        !           168: *      FIRST WORD IS THE ADDRESS OF THE INTERPRETOR ROUTINE
        !           169: *      TO BE EXECUTED FOR THE CODE WORD.
        !           170: *
        !           171: *      IN THE CASE OF OPERATORS, THE POINTER IS TO A WORD WHICH
        !           172: *      CONTAINS THE ADDRESS OF THE OPERATOR TO BE EXECUTED. IN
        !           173: *      THE CASE OF OPERANDS SUCH AS CONSTANTS, THE POINTER IS TO
        !           174: *      THE OPERAND ITSELF. ACCORDINGLY, ALL OPERANDS CONTAIN
        !           175: *      A FIELD WHICH POINTS TO THE ROUTINE TO LOAD THE VALUE OF
        !           176: *      THE OPERAND ONTO THE STACK. IN THE CASE OF A VARIABLE,
        !           177: *      THERE ARE THREE SUCH POINTERS. ONE TO LOAD THE VALUE,
        !           178: *      ONE TO STORE THE VALUE AND A THIRD TO JUMP TO THE LABEL.
        !           179: *
        !           180: *      THE HANDLING OF FAILURE RETURNS DESERVES SPECIAL COMMENT.
        !           181: *      THE LOCATION FLPTR CONTAINS THE POINTER TO THE LOCATION
        !           182: *      ON THE MAIN STACK WHICH CONTAINS THE FAILURE RETURN
        !           183: *      WHICH IS IN THE FORM OF A BYTE OFFSET IN THE CURRENT
        !           184: *      CODE BLOCK (CDBLK OR EXBLK). WHEN A FAILURE OCCURS, THE
        !           185: *      STACK IS POPPED AS INDICATED BY THE SETTING OF FLPTR AND
        !           186: *      CONTROL IS PASSED TO THE APPROPRIATE LOCATION IN THE
        !           187: *      CURRENT CODE BLOCK WITH THE STACK POINTER POINTING TO THE
        !           188: *      FAILURE OFFSET ON THE STACK AND FLPTR UNCHANGED.
        !           189: {{EJC{{{{
        !           190: *
        !           191: *      INTERNAL DATA REPRESENTATIONS
        !           192: *      -----------------------------
        !           193: *
        !           194: *      REPRESENTATION OF VALUES
        !           195: *
        !           196: *      A VALUE IS REPRESENTED BY A POINTER TO A BLOCK WHICH
        !           197: *      DESCRIBES THE TYPE AND PARTICULARS OF THE DATA VALUE.
        !           198: *      IN GENERAL, A VARIABLE IS A LOCATION CONTAINING SUCH A
        !           199: *      POINTER (ALTHOUGH IN THE CASE OF TRACE ASSOCIATIONS THIS
        !           200: *      IS MODIFIED, SEE DESCRIPTION OF TRBLK).
        !           201: *
        !           202: *      THE FOLLOWING IS A LIST OF POSSIBLE DATATYPES SHOWING THE
        !           203: *      TYPE OF BLOCK USED TO HOLD THE VALUE. THE DETAILS OF
        !           204: *      EACH BLOCK FORMAT ARE GIVEN LATER.
        !           205: *
        !           206: *      DATATYPE              BLOCK TYPE
        !           207: *      --------              ----------
        !           208: *
        !           209: *
        !           210: *      ARRAY                 ARBLK OR VCBLK
        !           211: *
        !           212: *      CODE                  CDBLK
        !           213: *
        !           214: *      EXPRESSION            EXBLK OR SEBLK
        !           215: *
        !           216: *      INTEGER               ICBLK
        !           217: *
        !           218: *      NAME                  NMBLK
        !           219: *
        !           220: *      PATTERN               P0BLK OR P1BLK OR P2BLK
        !           221: *
        !           222: *      REAL                  RCBLK
        !           223: *
        !           224: *      STRING                SCBLK
        !           225: *
        !           226: *      TABLE                 TBBLK
        !           227: *
        !           228: *      PROGRAM DATATYPE      PDBLK
        !           229: {{EJC{{{{
        !           230: *
        !           231: *      REPRESENTATION OF VARIABLES
        !           232: *      ---------------------------
        !           233: *
        !           234: *      DURING THE COURSE OF EVALUATING EXPRESSIONS, IT IS
        !           235: *      NECESSARY TO GENERATE NAMES OF VARIABLES (FOR EXAMPLE
        !           236: *      ON THE LEFT SIDE OF A BINARY EQUALS OPERATOR). THESE ARE
        !           237: *      NOT TO BE CONFUSED WITH OBJECTS OF DATATYPE NAME WHICH
        !           238: *      ARE IN FACT VALUES.
        !           239: *
        !           240: *      FROM A LOGICAL POINT OF VIEW, SUCH NAMES COULD BE SIMPLY
        !           241: *      REPRESENTED BY A POINTER TO THE APPROPRIATE VALUE CELL.
        !           242: *      HOWEVER IN THE CASE OF ARRAYS AND PROGRAM DEFINED
        !           243: *      DATATYPES, THIS WOULD VIOLATE THE RULE THAT THERE MUST BE
        !           244: *      NO POINTERS INTO THE MIDDLE OF A BLOCK IN DYNAMIC STORE.
        !           245: *      ACCORDINGLY, A NAME IS ALWAYS REPRESENTED BY A BASE AND
        !           246: *      OFFSET. THE BASE POINTS TO THE START OF THE BLOCK
        !           247: *      CONTAINING THE VARIABLE VALUE AND THE OFFSET IS THE
        !           248: *      OFFSET WITHIN THIS BLOCK IN BYTES. THUS THE ADDRESS
        !           249: *      OF THE ACTUAL VARIABLE IS DETERMINED BY ADDING THE BASE
        !           250: *      AND OFFSET VALUES.
        !           251: *
        !           252: *      THE FOLLOWING ARE THE INSTANCES OF VARIABLES REPRESENTED
        !           253: *      IN THIS MANNER.
        !           254: *
        !           255: *      1)   NATURAL VARIABLE BASE IS PTR TO VRBLK
        !           256: *                            OFFSET IS *VRVAL
        !           257: *
        !           258: *      2)   TABLE ELEMENT    BASE IS PTR TO TEBLK
        !           259: *                            OFFSET IS *TEVAL
        !           260: *
        !           261: *      3)   ARRAY ELEMENT    BASE IS PTR TO ARBLK
        !           262: *                            OFFSET IS OFFSET TO ELEMENT
        !           263: *
        !           264: *      4)   VECTOR ELEMENT   BASE IS PTR TO VCBLK
        !           265: *                            OFFSET IS OFFSET TO ELEMENT
        !           266: *
        !           267: *      5)   PROG DEF DTP     BASE IS PTR TO PDBLK
        !           268: *                            OFFSET IS OFFSET TO FIELD VALUE
        !           269: *
        !           270: *      IN ADDITION THERE ARE TWO CASES OF OBJECTS WHICH ARE
        !           271: *      LIKE VARIABLES BUT CANNOT BE HANDLED IN THIS MANNER.
        !           272: *      THESE ARE CALLED PSEUDO-VARIABLES AND ARE REPRESENTED
        !           273: *      WITH A SPECIAL BASE POINTER AS FOLLOWS=
        !           274: *
        !           275: *      EXPRESSION VARIABLE   PTR TO EVBLK (SEE EVBLK)
        !           276: *
        !           277: *      KEYWORD VARIABLE      PTR TO KVBLK (SEE KVBLK)
        !           278: *
        !           279: *      PSEUDO-VARIABLES ARE HANDLED AS SPECIAL CASES BY THE
        !           280: *      ACCESS PROCEDURE (ACESS) AND THE ASSIGNMENT PROCEDURE
        !           281: *      (ASIGN). SEE THESE TWO PROCEDURES FOR DETAILS.
        !           282: {{EJC{{{{
        !           283: *
        !           284: *      ORGANIZATION OF DATA AREA
        !           285: *      -------------------------
        !           286: *
        !           287: *
        !           288: *      THE DATA AREA IS DIVIDED INTO TWO REGIONS.
        !           289: *
        !           290: *      STATIC AREA
        !           291: *
        !           292: *      THE STATIC AREA BUILDS UP FROM THE BOTTOM AND CONTAINS
        !           293: *      DATA AREAS WHICH ARE ALLOCATED DYNAMICALLY BUT ARE NEVER
        !           294: *      DELETED OR MOVED AROUND. THE MACRO-PROGRAM ITSELF
        !           295: *      USES THE STATIC AREA FOR THE FOLLOWING.
        !           296: *
        !           297: *      1)   ALL VARIABLE BLOCKS (VRBLK).
        !           298: *
        !           299: *      2)   THE HASH TABLE FOR VARIABLE BLOCKS.
        !           300: *
        !           301: *      3)   MISCELLANEOUS BUFFERS AND WORK AREAS (SEE PROGRAM
        !           302: *           INITIALIZATION SECTION).
        !           303: *
        !           304: *      IN ADDITION, THE SYSTEM PROCEDURES MAY USE THIS AREA FOR
        !           305: *      INPUT/OUTPUT BUFFERS, EXTERNAL FUNCTIONS ETC. SPACE IN
        !           306: *      THE STATIC REGION IS ALLOCATED BY CALLING PROCEDURE ALOST
        !           307: *
        !           308: *      THE FOLLOWING GLOBAL VARIABLES DEFINE THE CURRENT
        !           309: *      LOCATION AND SIZE OF THE STATIC AREA.
        !           310: *
        !           311: *      STATB                 ADDRESS OF START OF STATIC AREA
        !           312: *      STATE                 ADDRESS+1 OF LAST WORD IN AREA.
        !           313: *
        !           314: *      THE MINIMUM SIZE OF STATIC IS GIVEN APPROXIMATELY BY
        !           315: *           12 + *E$HNB + *E$STS + SPACE FOR ALPHABET STRING
        !           316: *           AND STANDARD PRINT BUFFER.
        !           317: {{EJC{{{{
        !           318: *
        !           319: *      DYNAMIC AREA
        !           320: *
        !           321: *      THE DYNAMIC AREA IS BUILT UPWARDS IN MEMORY AFTER THE
        !           322: *      STATIC REGION. DATA IN THIS AREA MUST ALL BE IN STANDARD
        !           323: *      BLOCK FORMATS SO THAT IT CAN BE PROCESSED BY THE GARBAGE
        !           324: *      COLLECTOR (PROCEDURE GBCOL). GBCOL COMPACTS BLOCKS DOWN
        !           325: *      IN THIS REGION AS REQUIRED BY SPACE EXHAUSTION AND CAN
        !           326: *      ALSO MOVE ALL BLOCKS UP TO ALLOW FOR EXPANSION OF THE
        !           327: *      STATIC REGION.
        !           328: *      WITH THE EXCEPTION OF TABLES AND ARRAYS, NO SPITBOL
        !           329: *      OBJECT ONCE BUILT IN DYNAMIC MEMORY IS EVER SUBSEQUENTLY
        !           330: *      MODIFIED. OBSERVING THIS RULE NECESSITATES A COPYING
        !           331: *      ACTION DURING STRING AND PATTERN CONCATENATION.
        !           332: *
        !           333: *      GARBAGE COLLECTION IS FUNDAMENTAL TO THE ALLOCATION OF
        !           334: *      SPACE FOR VALUES. SPITBOL USES A VERY EFFICIENT GARBAGE
        !           335: *      COLLECTOR WHICH INSISTS THAT POINTERS INTO DYNAMIC STORE
        !           336: *      SHOULD BE IDENTIFIABLE WITHOUT USE OF BIT TABLES,
        !           337: *      MARKER BITS ETC. TO SATISFY THIS REQUIREMENT, DYNAMIC
        !           338: *      MEMORY MUST NOT START AT TOO LOW AN ADDRESS AND LENGTHS
        !           339: *      OF ARRAYS, TABLES, STRINGS, CODE AND EXPRESSION BLOCKS
        !           340: *      MAY NOT EXCEED THE NUMERICAL VALUE OF THE LOWEST DYNAMIC
        !           341: *      ADDRESS. TO AVOID EITHER PENALIZING USERS WITH MODEST
        !           342: *      REQUIREMENTS OR RESTRICTING THOSE WITH GREATER NEEDS ON
        !           343: *      HOST SYSTEMS WHERE DYNAMIC MEMORY IS ALLOCATED IN LOW
        !           344: *      ADDRESSES, THE MINIMUM DYNAMIC ADDRESS MAY BE SPECIFIED
        !           345: *      SUFFICIENTLY HIGH TO PERMIT ARBITRARILY LARGE SPITBOL
        !           346: *      OBJECTS TO BE CREATED ( WITH THE POSSIBILITY IN EXTREME
        !           347: *      CASES OF WASTING LARGE AMOUNTS OF MEMORY BELOW THE
        !           348: *      START ADDRESS). THIS MINIMUM VALUE IS MADE AVAILABLE
        !           349: *      IN VARIABLE MXLEN BY A SYSTEM ROUTINE, SYSMX.
        !           350: *      ALTERNATIVELY SYSMX MAY INDICATE THAT A
        !           351: *      DEFAULT MAY BE USED IN WHICH DYNAMIC IS PLACED
        !           352: *      AT THE LOWEST POSSIBLE ADDRESS FOLLOWING STATIC.
        !           353: *
        !           354: *      THE FOLLOWING GLOBAL WORK CELLS DEFINE THE LOCATION AND
        !           355: *      LENGTH OF THE DYNAMIC AREA.
        !           356: *
        !           357: *      DNAMB                 START OF DYNAMIC AREA
        !           358: *      DNAMP                 NEXT AVAILABLE LOCATION
        !           359: *      DNAME                 LAST AVAILABLE LOCATION + 1
        !           360: *
        !           361: *      DNAMB IS ALWAYS HIGHER THAN STATE SINCE THE ALOST
        !           362: *      PROCEDURE MAINTAINS SOME EXPANSION SPACE ABOVE STATE.
        !           363: *      *** DNAMB MUST NEVER BE PERMITTED TO HAVE A VALUE LESS
        !           364: *      THAN THAT IN MXLEN ***
        !           365: *
        !           366: *      SPACE IN THE DYNAMIC REGION IS ALLOCATED BY THE ALLOC
        !           367: *      PROCEDURE. THE DYNAMIC REGION MAY BE USED BY SYSTEM
        !           368: *      PROCEDURES PROVIDED THAT ALL THE RULES ARE OBEYED.
        !           369: {{EJC{{{{
        !           370: *
        !           371: *      REGISTER USAGE
        !           372: *      --------------
        !           373: *
        !           374: *      (CP)                  CODE POINTER REGISTER. USED TO
        !           375: *                            HOLD A POINTER TO THE CURRENT
        !           376: *                            LOCATION IN THE INTERPRETIVE PSEUDO
        !           377: *                            CODE (I.E. PTR INTO A CDBLK).
        !           378: *
        !           379: *      (XL,XR)               GENERAL INDEX REGISTERS. USUALLY
        !           380: *                            USED TO HOLD POINTERS TO BLOCKS IN
        !           381: *                            DYNAMIC STORAGE. AN IMPORTANT
        !           382: *                            RESTRICTION IS THAT THE VALUE IN
        !           383: *                            XL MUST BE COLLECTABLE FOR
        !           384: *                            A GARBAGE COLLECT CALL. A VALUE
        !           385: *                            IS COLLECTABLE IF IT EITHER POINTS
        !           386: *                            OUTSIDE THE DYNAMIC AREA, OR IF IT
        !           387: *                            POINTS TO THE START OF A BLOCK IN
        !           388: *                            THE DYNAMIC AREA.
        !           389: *
        !           390: *      (XS)                  STACK POINTER. USED TO POINT TO
        !           391: *                            THE STACK FRONT. THE STACK MAY
        !           392: *                            BUILD UP OR DOWN AND IS USED
        !           393: *                            TO STACK SUBROUTINE RETURN POINTS
        !           394: *                            AND OTHER RECURSIVELY SAVED DATA.
        !           395: *
        !           396: *      (XT)                  AN ALTERNATIVE NAME FOR XL DURING
        !           397: *                            ITS USE IN ACCESSING STACKED ITEMS.
        !           398: *
        !           399: *      (WA,WB,WC)            GENERAL WORK REGISTERS. CANNOT BE
        !           400: *                            USED FOR INDEXING, BUT MAY HOLD
        !           401: *                            VARIOUS TYPES OF DATA.
        !           402: *
        !           403: *      (IA)                  USED FOR ALL SIGNED INTEGER
        !           404: *                            ARITHMETIC, BOTH THAT USED BY THE
        !           405: *                            TRANSLATOR AND THAT ARISING FROM
        !           406: *                            USE OF SNOBOL4 ARITHMETIC OPERATORS
        !           407: *
        !           408: *      (RA)                  REAL ACCUMULATOR. USED FOR ALL
        !           409: *                            FLOATING POINT ARITHMETIC.
        !           410: {{EJC{{{{
        !           411: *
        !           412: *      SPITBOL CONDITIONAL ASSEMBLY SYMBOLS
        !           413: *      ------------------------------------
        !           414: *
        !           415: *      IN THE SPITBOL TRANSLATOR, THE FOLLOWING CONDITIONAL
        !           416: *      ASSEMBLY SYMBOLS ARE REFERRED TO. TO INCORPORATE THE
        !           417: *      FEATURES REFERRED TO, THE MINIMAL SOURCE SHOULD BE
        !           418: *      PREFACED BY SUITABLE CONDITIONAL ASSEMBLY SYMBOL
        !           419: *      DEFINITIONS.
        !           420: *      IN ALL CASES IT IS PERMISSIBLE TO DEFAULT THE DEFINITIONS
        !           421: *      IN WHICH CASE THE ADDITIONAL FEATURES WILL BE OMITTED
        !           422: *      FROM THE TARGET CODE.
        !           423: *
        !           424: *      .CASL                 DEFINE TO INCLUDE 26 SHIFTED LETTRS
        !           425: *      .CAHT                 DEFINE TO INCLUDE HORIZONTAL TAB
        !           426: *      .CAVT                 DEFINE TO INCLUDE VERTICAL TAB
        !           427: *      .CIOD                 IF DEFINED, DEFAULT DELIMITER IS
        !           428: *                            NOT USED IN PROCESSING 3RD ARG OF
        !           429: *                            INPUT() AND OUTPUT()
        !           430: *      .CNBT                 DEFINE TO OMIT BATCH INITIALISATION
        !           431: *      .CNCI                 DEFINE TO ENABLE SYSCI ROUTINE
        !           432: *      .CNEX                 DEFINE TO OMIT EXIT() CODE.
        !           433: *      .CNLD                 DEFINE TO OMIT LOAD() CODE.
        !           434: *      .CNPF                 DEFINE TO OMIT PROFILE STUFF
        !           435: *      .CNRA                 DEFINE TO OMIT ALL REAL ARITHMETIC
        !           436: *      .CNSR                 DEFINE TO OMIT SORT, RSORT
        !           437: *      .CSAX                 DEFINE IF SYSAX IS TO BE CALLED
        !           438: *      .CSN6                 DEFINE TO PAD STMT NOS TO 6 CHARS
        !           439: *      .CSN8                 DEFINE TO PAD STMT NOS TO 8 CHARS
        !           440: *      .CUCF                 DEFINE TO INCLUDE CFP$U
        !           441: *      .CULC                 DEFINE TO INCLUDE &CASE (LC NAMES)
        !           442: *      .CUST                 DEFINE TO INCLUDE SET() CODE
        !           443: {{TTL{S{{{P I T B O L -- PROCEDURES SECTION
        !           444: *
        !           445: *      THIS SECTION STARTS WITH DESCRIPTIONS OF THE OPERATING
        !           446: *      SYSTEM DEPENDENT PROCEDURES WHICH ARE USED BY THE SPITBOL
        !           447: *      TRANSLATOR. ALL SUCH PROCEDURES HAVE FIVE LETTER NAMES
        !           448: *      BEGINNING WITH SYS. THEY ARE LISTED IN ALPHABETICAL
        !           449: *      ORDER.
        !           450: *      ALL PROCEDURES HAVE A  SPECIFICATION CONSISTING OF A
        !           451: *      MODEL CALL, PRECEDED BY A POSSIBLY EMPTY LIST OF REGISTER
        !           452: *      CONTENTS GIVING PARAMETERS AVAILABLE TO THE PROCEDURE AND
        !           453: *      FOLLOWED BY A POSSIBLY EMPTY LIST OF REGISTER CONTENTS
        !           454: *      REQUIRED ON RETURN FROM THE CALL OR WHICH MAY HAVE HAD
        !           455: *      THEIR CONTENTS DESTROYED. ONLY THOSE REGISTERS EXPLICITLY
        !           456: *      MENTIONED IN THE LIST AFTER THE CALL MAY HAVE THEIR
        !           457: *      VALUES CHANGED.
        !           458: *      THE SEGMENT OF CODE PROVIDING THE EXTERNAL PROCEDURES IS
        !           459: *      CONVENIENTLY REFERRED TO AS OSINT (OPERATING SYSTEM
        !           460: *      INTERFACE). THE SYSXX PROCEDURES IT CONTAINS PROVIDE
        !           461: *      FACILITIES NOT USUALLY AVAILABLE AS PRIMITIVES IN
        !           462: *      ASSEMBLY LANGUAGES. FOR PARTICULAR TARGET MACHINES,
        !           463: *      IMPLEMENTORS MAY CHOOSE FOR SOME MINIMAL OPCODES WHICH
        !           464: *      DO NOT HAVE REASONABLY DIRECT TRANSLATIONS, TO USE CALLS
        !           465: *      OF ADDITIONAL PROCEDURES WHICH THEY PROVIDE IN OSINT.
        !           466: *      E.G. MWB OR TRC MIGHT BE TRANSLATED AS JSR SYSMB,
        !           467: *      JSR SYSTC IN SOME IMPLEMENTATIONS.
        !           468: *
        !           469: *      IN THE DESCRIPTIONS, REFERENCE IS MADE TO --BLK
        !           470: *      FORMATS (-- = A PAIR OF LETTERS). SEE THE SPITBOL
        !           471: *      DEFINITIONS SECTION FOR DETAILED DESCRIPTIONS OF ALL
        !           472: *      SUCH BLOCK FORMATS EXCEPT FCBLK FOR WHICH SYSFC SHOULD
        !           473: *      BE CONSULTED.
        !           474: *
        !           475: *      SECTION 0 CONTAINS INP,INR SPECIFICATIONS OF INTERNAL
        !           476: *      PROCEDURES,ROUTINES. THIS GIVES A SINGLE PASS TRANSLATOR
        !           477: *      INFORMATION MAKING IT EASY TO GENERATE ALTERNATIVE CALLS
        !           478: *      IN THE TRANSLATION OF JSR-S FOR PROCEDURES OF DIFFERENT
        !           479: *      TYPES IF THIS PROVES NECESSARY.
        !           480: *
        !           481: {{SEC{{{{START OF PROCEDURES SECTION
        !           482: {{EJC{{{{
        !           483: *
        !           484: *      SYSAX -- AFTER EXECUTION
        !           485: *
        !           486: {SYSAX{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !           487: *
        !           488: *      IF THE CONDITIONAL ASSEMBLY SYMBOL .CSAX IS DEFINED,
        !           489: *      THIS ROUTINE IS CALLED IMMEDIATELY AFTER EXECUTION AND
        !           490: *      BEFORE PRINTING OF EXECUTION STATISTICS OR DUMP OUTPUT.
        !           491: *      PURPOSE OF CALL IS FOR IMPLEMENTOR TO DETERMINE AND
        !           492: *      IF THE CALL IS NOT REQUIRED IT WILL BE OMITTED IF .CSAX
        !           493: *      IS UNDEFINED. IN THIS CASE SYSAX NEED NOT BE CODED.
        !           494: *
        !           495: *      JSR  SYSAX            CALL AFTER EXECUTION
        !           496: {{EJC{{{{
        !           497: *
        !           498: *      SYSBX -- BEFORE EXECUTION
        !           499: *
        !           500: {SYSBX{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !           501: *
        !           502: *      CALLED AFTER INITIAL SPITBOL COMPILATION AND BEFORE
        !           503: *      COMMENCING EXECUTION IN CASE OSINT NEEDS
        !           504: *      TO ASSIGN FILES OR PERFORM OTHER NECESSARY SERVICES.
        !           505: *      OSINT MAY ALSO CHOOSE TO SEND A MESSAGE TO ONLINE
        !           506: *      TERMINAL (IF ANY) INDICATING THAT EXECUTION IS STARTING.
        !           507: *
        !           508: *      JSR  SYSBX            CALL BEFORE EXECUTION STARTS
        !           509: {{EJC{{{{
        !           510: *
        !           511: *      SYSDC -- DATE CHECK
        !           512: *
        !           513: {SYSDC{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !           514: *
        !           515: *      SYSDC IS CALLED TO CHECK THAT THE EXPIRY DATE FOR A TRIAL
        !           516: *      VERSION OF SPITBOL IS UNEXPIRED.
        !           517: *
        !           518: *      JSR  SYSDC            CALL TO CHECK DATE
        !           519: *      RETURN ONLY IF DATE IS OK
        !           520: {{EJC{{{{
        !           521: *
        !           522: *      SYSDM  -- DUMP CORE
        !           523: *
        !           524: {SYSDM{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !           525: *
        !           526: *      SYSDM IS CALLED BY A SPITBOL PROGRAM CALL OF DUMP(N) WITH
        !           527: *      N GE 3.  ITS PURPOSE IS TO PROVIDE A CORE DUMP.
        !           528: *      N COULD HOLD AN ENCODING OF THE START ADRS FOR DUMP AND
        !           529: *      AMOUNT TO BE DUMPED E.G.  N = 256*A + S , S = START ADRS
        !           530: *      IN KILOWORDS,  A = KILOWORDS TO DUMP
        !           531: *
        !           532: *      (XR)                  PARAMETER N OF CALL DUMP(N)
        !           533: *      JSR  SYSDM            CALL TO ENTER ROUTINE
        !           534: {{EJC{{{{
        !           535: *
        !           536: *      SYSDT -- GET CURRENT DATE
        !           537: *
        !           538: {SYSDT{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !           539: *
        !           540: *      SYSDT IS USED TO OBTAIN THE CURRENT DATE. THE DATE IS
        !           541: *      RETURNED AS A CHARACTER STRING IN ANY FORMAT APPROPRIATE
        !           542: *      TO THE OPERATING SYSTEM IN USE. IT MAY ALSO CONTAIN THE
        !           543: *      CURRENT TIME OF DAY. SYSDT IS USED TO IMPLEMENT THE
        !           544: *      SNOBOL4 FUNCTION DATE.
        !           545: *
        !           546: *      JSR  SYSDT            CALL TO GET DATE
        !           547: *      (XL)                  POINTER TO BLOCK CONTAINING DATE
        !           548: *
        !           549: *      THE FORMAT OF THE BLOCK IS LIKE AN SCBLK EXCEPT THAT
        !           550: *      THE FIRST WORD NEED NOT BE SET. THE RESULT IS COPIED
        !           551: *      INTO SPITBOL DYNAMIC MEMORY ON RETURN.
        !           552: {{EJC{{{{
        !           553: *
        !           554: *      SYSEF -- EJECT FILE
        !           555: *
        !           556: {SYSEF{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !           557: *
        !           558: *      SYSEF IS USED TO WRITE A PAGE EJECT TO A NAMED FILE. IT
        !           559: *      MAY ONLY BE USED FOR FILES WHERE THIS CONCEPT MAKES
        !           560: *      SENSE. NOTE THAT SYSEF IS NOT NORMALLY USED FOR THE
        !           561: *      STANDARD OUTPUT FILE (SEE SYSEP).
        !           562: *
        !           563: *      (WA)                  PTR TO FCBLK OR ZERO
        !           564: *      (XR)                  EJECT ARGUMENT (SCBLK PTR)
        !           565: *      JSR  SYSEF            CALL TO EJECT FILE
        !           566: *      PPM  LOC              RETURN HERE IF FILE DOES NOT EXIST
        !           567: *      PPM  LOC              RETURN HERE IF INAPPROPRIATE FILE
        !           568: *      PPM  LOC              RETURN HERE IF I/O ERROR
        !           569: {{EJC{{{{
        !           570: *
        !           571: *      SYSEJ -- END OF JOB
        !           572: *
        !           573: {SYSEJ{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !           574: *
        !           575: *      SYSEJ IS CALLED ONCE AT THE END OF EXECUTION TO
        !           576: *      TERMINATE THE RUN. THE SIGNIFICANCE OF THE ABEND AND
        !           577: *      CODE VALUES IS SYSTEM DEPENDENT. IN GENERAL, THE CODE
        !           578: *      VALUE SHOULD BE MADE AVAILABLE FOR TESTING, AND THE
        !           579: *      ABEND VALUE SHOULD CAUSE SOME POST-MORTEM ACTION SUCH AS
        !           580: *      A DUMP. NOTE THAT SYSEJ DOES NOT RETURN TO ITS CALLER.
        !           581: *      SEE SYSXI FOR DETAILS OF FCBLK CHAIN
        !           582: *
        !           583: *      (WA)                  VALUE OF ABEND KEYWORD
        !           584: *      (WB)                  VALUE OF CODE KEYWORD
        !           585: *      (XL)                  O OR PTR TO HEAD OF FCBLK CHAIN
        !           586: *      JSR  SYSEJ            CALL TO END JOB
        !           587: *
        !           588: *      THE FOLLOWING SPECIAL VALUES ARE USED AS CODES IN (WB)
        !           589: *      999  EXECUTION SUPPRESSED
        !           590: *      998  STANDARD OUTPUT FILE FULL OR UNAVAILABLE IN A SYSXI
        !           591: *           LOAD MODULE. IN THESE CASES (WA) CONTAINS THE NUMBER
        !           592: *           OF THE STATEMENT CAUSING PREMATURE TERMINATION.
        !           593: {{EJC{{{{
        !           594: *
        !           595: *      SYSEM -- GET ERROR MESSAGE TEXT
        !           596: *
        !           597: {SYSEM{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !           598: *
        !           599: *      SYSEM IS USED TO OBTAIN THE TEXT OF ERR, ERB CALLS IN THE
        !           600: *      SOURCE PROGRAM GIVEN THE ERROR CODE NUMBER. IT IS ALLOWED
        !           601: *      TO RETURN A NULL STRING IF THIS FACILITY IS UNAVAILABLE.
        !           602: *
        !           603: *      (WA)                  ERROR CODE NUMBER
        !           604: *      JSR  SYSEM            CALL TO GET TEXT
        !           605: *      (XR)                  TEXT OF MESSAGE
        !           606: *
        !           607: *      THE RETURNED VALUE IS A POINTER TO A BLOCK IN SCBLK
        !           608: *      FORMAT EXCEPT THAT THE FIRST WORD NEED NOT BE SET. THE
        !           609: *      STRING IS COPIED INTO DYNAMIC MEMORY ON RETURN.
        !           610: *      IF THE NULL STRING IS RETURNED EITHER BECAUSE SYSEM DOES
        !           611: *      NOT PROVIDE ERROR MESSAGE TEXTS OR BECAUSE WA IS OUT OF
        !           612: *      RANGE, SPITBOL WILL PRINT THE STRING STORED IN ERRTEXT
        !           613: *      KEYWORD.
        !           614: {{EJC{{{{
        !           615: *
        !           616: *      SYSEN -- ENDFILE
        !           617: *
        !           618: {SYSEN{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !           619: *
        !           620: *      SYSEN IS USED TO IMPLEMENT THE SNOBOL4 FUNCTION ENDFILE.
        !           621: *      THE MEANING IS SYSTEM DEPENDENT. IN GENERAL, ENDFILE
        !           622: *      IMPLIES THAT NO FURTHER I/O OPERATIONS WILL BE PERFORMED,
        !           623: *      BUT DOES NOT GUARANTEE THIS TO BE THE CASE. THE FILE
        !           624: *      SHOULD BE CLOSED AFTER THE CALL, A SUBSEQUENT READ
        !           625: *      OR WRITE MAY REOPEN THE FILE AT THE START OR IT MAY BE
        !           626: *      NECESSARY TO REOPEN THE FILE VIA SYSIO.
        !           627: *
        !           628: *      (WA)                  PTR TO FCBLK OR ZERO
        !           629: *      (XR)                  ENDFILE ARGUMENT (SCBLK PTR)
        !           630: *      JSR  SYSEN            CALL TO ENDFILE
        !           631: *      PPM  LOC              RETURN HERE IF FILE DOES NOT EXIST
        !           632: *      PPM  LOC              RETURN HERE IF ENDFILE NOT ALLOWED
        !           633: *      PPM  LOC              RETURN HERE IF I/O ERROR
        !           634: *      (WA,WB)               DESTROYED
        !           635: *
        !           636: *      THE SECOND ERROR RETURN IS USED FOR FILES FOR WHICH
        !           637: *      ENDFILE IS NOT PERMITTED. FOR EXAMPLE, IT MAY BE EXPECTED
        !           638: *      THAT THE STANDARD INPUT AND OUTPUT FILES ARE IN THIS
        !           639: *      CATEGORY.
        !           640: {{EJC{{{{
        !           641: *
        !           642: *      SYSEP -- EJECT PRINTER PAGE
        !           643: *
        !           644: {SYSEP{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !           645: *
        !           646: *      SYSEP IS CALLED TO PERFORM A PAGE EJECT ON THE STANDARD
        !           647: *      PRINTER OUTPUT FILE (CORRESPONDING TO SYSPR OUTPUT).
        !           648: *
        !           649: *      JSR  SYSEP            CALL TO EJECT PRINTER OUTPUT
        !           650: {{EJC{{{{
        !           651: *
        !           652: *      SYSEX -- CALL EXTERNAL FUNCTION
        !           653: *
        !           654: {SYSEX{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !           655: *
        !           656: *      SYSEX IS CALLED TO PASS CONTROL TO AN EXTERNAL FUNCTION
        !           657: *      PREVIOUSLY LOADED WITH A CALL TO SYSLD.
        !           658: *
        !           659: *      (XS)                  POINTER TO ARGUMENTS ON STACK
        !           660: *      (XL)                  POINTER TO CONTROL BLOCK (EFBLK)
        !           661: *      (WA)                  NUMBER OF ARGUMENTS ON STACK
        !           662: *      JSR  SYSEX            CALL TO PASS CONTROL TO FUNCTION
        !           663: *      PPM  LOC              RETURN HERE IF FUNCTION CALL FAILS
        !           664: *      (XS)                  POPPED PAST ARGUMENTS
        !           665: *      (XR)                  RESULT RETURNED
        !           666: *
        !           667: *      THE ARGUMENTS ARE STORED ON THE STACK WITH
        !           668: *      THE LAST ARGUMENT AT 0(XS). ON RETURN, XS
        !           669: *      IS POPPED PAST THE ARGUMENTS.
        !           670: *
        !           671: *      THE FORM OF THE ARGUMENTS AS PASSED IS THAT USED IN THE
        !           672: *      SPITBOL TRANSLATOR (SEE DEFINITIONS AND DATA STRUCTURES
        !           673: *      SECTION). THE CONTROL BLOCK FORMAT IS ALSO DESCRIBED
        !           674: *      (UNDER EFBLK) IN THIS SECTION.
        !           675: *
        !           676: *      THERE ARE TWO WAYS OF RETURNING A RESULT.
        !           677: *
        !           678: *      1)   RETURN A POINTER TO A BLOCK IN DYNAMIC STORAGE. THIS
        !           679: *           BLOCK MUST BE IN EXACTLY CORRECT FORMAT, INCLUDING
        !           680: *           THE FIRST WORD. ONLY FUNCTIONS WRITTEN WITH INTIMATE
        !           681: *           KNOWLEDGE OF THE SYSTEM WILL RETURN IN THIS WAY.
        !           682: *
        !           683: *      2)   STRING, INTEGER AND REAL RESULTS MAY BE RETURNED BY
        !           684: *           POINTING TO A PSEUDO-BLOCK OUTSIDE DYNAMIC MEMORY.
        !           685: *           THIS BLOCK IS IN ICBLK, RCBLK OR SCBLK FORMAT EXCEPT
        !           686: *           THAT THE FIRST WORD WILL BE OVERWRITTEN
        !           687: *           BY A TYPE WORD ON RETURN AND SO NEED NOT
        !           688: *           BE CORRECTLY SET. SUCH A RESULT IS
        !           689: *           COPIED INTO MAIN STORAGE BEFORE PROCEEDING.
        !           690: *           UNCONVERTED RESULTS MAY SIMILARLY BE RETURNED IN A
        !           691: *           PSEUDO-BLOCK WHICH IS IN CORRECT FORMAT INCLUDING
        !           692: *           TYPE WORD RECOGNISABLE BY GARBAGE COLLECTOR SINCE
        !           693: *           BLOCK IS COPIED INTO DYNAMIC MEMORY.
        !           694: {{EJC{{{{
        !           695: *
        !           696: *      SYSFC -- FILE CONTROL BLOCK ROUTINE
        !           697: *
        !           698: {SYSFC{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !           699: *
        !           700: *      SEE ALSO SYSIO
        !           701: *      INPUT AND OUTPUT HAVE 3 ARGUMENTS REFERRED TO AS SHOWN
        !           702: *           INPUT(VARIABLE NAME,FILE ARG1,FILE ARG2)
        !           703: *           OUTPUT(VARIABLE NAME,FILE ARG1,FILE ARG2)
        !           704: *      FILE ARG1 MAY BE AN INTEGER OR STRING USED TO IDENTIFY
        !           705: *      AN I/O CHANNEL. IT IS CONVERTED TO A STRING FOR CHECKING.
        !           706: *      THE EXACT SIGNIFICANCE OF FILE ARG2
        !           707: *      IS NOT RIGOROUSLY PRESCRIBED BUT TO IMPROVE PORTABILITY,
        !           708: *      THE SCHEME DESCRIBED IN THE SPITBOL USER MANUAL
        !           709: *      SHOULD BE ADOPTED WHEN POSSIBLE. THE PREFERRED FORM IS
        !           710: *      A STRING $F$,R$R$,C$C$,I$I$,...,Z$Z$  WHERE
        !           711: *      $F$ IS AN OPTIONAL FILE NAME WHICH IS PLACED FIRST.
        !           712: *       REMAINING ITEMS MAY BE OMITTED OR INCLUDED IN ANY ORDER.
        !           713: *      $R$ IS MAXIMUM RECORD LENGTH
        !           714: *      $C$ IS A CARRIAGE CONTROL CHARACTER OR CHARACTER STRING
        !           715: *      $I$ IS SOME FORM OF CHANNEL IDENTIFICATION USED IN THE
        !           716: *         ABSENCE OF $F$ TO ASSOCIATE THE VARIABLE
        !           717: *         WITH A FILE ALLOCATED DYNAMICALLY BY JCL COMMANDS AT
        !           718: *         SPITBOL LOAD TIME.
        !           719: *      ,...,Z$Z$ ARE ADDITIONAL FIELDS.
        !           720: *      IF , (COMMA) CANNOT BE USED AS A DELIMITER, .CIOD
        !           721: *      SHOULD BE DEFINED TO INTRODUCE BY CONDITIONAL ASSEMBLY
        !           722: *      ANOTHER DELIMITER (SEE
        !           723: *        IODEL  EQU  *
        !           724: *      EARLY IN DEFINITIONS SECTION).
        !           725: *      SYSFC IS CALLED WHEN A VARIABLE IS INPUT OR OUTPUT
        !           726: *      ASSOCIATED TO CHECK FILE ARG1 AND FILE ARG2 AND
        !           727: *      TO  REPORT WHETHER AN FCBLK (FILE CONTROL
        !           728: *      BLOCK) IS NECESSARY AND IF SO WHAT SIZE IT SHOULD BE.
        !           729: *      THIS MAKES IT POSSIBLE FOR SPITBOL RATHER THAN OSINT TO
        !           730: *      ALLOCATE SUCH A BLOCK IN DYNAMIC MEMORY IF REQUIRED
        !           731: *      OR ALTERNATIVELY IN STATIC MEMORY.
        !           732: *      THE SIGNIFICANCE OF AN FCBLK , IF ONE IS REQUESTED, IS
        !           733: *      ENTIRELY UP TO THE SYSTEM INTERFACE. THE ONLY RESTRICTION
        !           734: *      IS THAT IF THE FCBLK SHOULD APPEAR TO LIE IN DYNAMIC
        !           735: *      MEMORY , POINTERS TO IT SHOULD BE PROPER POINTERS TO
        !           736: *      THE START OF A RECOGNISABLE AND GARBAGE COLLECTABLE
        !           737: *      BLOCK (THIS CONDITION WILL BE MET IF SYSFC REQUESTS
        !           738: *      SPITBOL TO PROVIDE AN FCBLK).
        !           739: *      AN OPTION IS PROVIDED FOR OSINT TO RETURN A POINTER IN
        !           740: *      XL TO AN FCBLK WHICH IT PRIVATELY ALLOCATED. THIS PTR
        !           741: *      WILL BE MADE AVAILABLE WHEN I/O OCCURS LATER.
        !           742: *      PRIVATE FCBLKS MAY HAVE ARBITRARY CONTENTS AND SPITBOL
        !           743: *      STORES NOTHING IN THEM.
        !           744: {{EJC{{{{
        !           745: *      THE REQUESTED SIZE FOR AN FCBLK IN DYNAMIC MEMORY
        !           746: *      SHOULD ALLOW A 2 WORD OVERHEAD FOR BLOCK TYPE AND
        !           747: *      LENGTH FIELDS. INFORMATION SUBSEQUENTLY STORED IN THE
        !           748: *      REMAINING WORDS MAY BE ARBITRARY IF AN XNBLK (EXTERNAL
        !           749: *      NON-RELOCATABLE BLOCK) IS REQUESTED. IF THE REQUEST IS
        !           750: *      FOR AN XRBLK (EXTERNAL RELOCATABLE BLOCK) THE
        !           751: *      CONTENTS OF WORDS SHOULD BE COLLECTABLE (I.E. ANY
        !           752: *      APPARENT POINTERS INTO DYNAMIC SHOULD BE GENUINE BLOCK
        !           753: *      POINTERS). THESE RESTRICTIONS DO NOT APPLY IF AN FCBLK
        !           754: *      IS ALLOCATED OUTSIDE DYNAMIC OR IS NOT ALLOCATED AT ALL.
        !           755: *      IF AN FCBLK IS REQUESTED, ITS FIELDS WILL BE INITIALISED
        !           756: *      TO ZERO BEFORE ENTRY TO SYSIO WITH THE EXCEPTION OF
        !           757: *      WORDS 0 AND 1 IN WHICH THE BLOCK TYPE AND LENGTH
        !           758: *      FIELDS ARE PLACED FOR FCBLKS IN DYNAMIC MEMORY ONLY.
        !           759: *      FOR THE POSSIBLE USE OF SYSEJ AND SYSXI, IF FCBLKS
        !           760: *      ARE USED, A CHAIN IS BUILT SO THAT THEY MAY ALL BE
        !           761: *      FOUND - SEE SYSXI FOR DETAILS.
        !           762: *      IF BOTH FILE ARG1 AND FILE ARG2 ARE NULL, CALLS OF SYSFC
        !           763: *      AND SYSIO ARE OMITTED.
        !           764: *      IF FILE ARG1 IS NULL (STANDARD INPUT/OUTPUT FILE), SYSFC
        !           765: *      IS CALLED TO CHECK NON-NULL FILE ARG2 BUT ANY REQUEST
        !           766: *      FOR AN FCBLK WILL BE IGNORED, SINCE SPITBOL HANDLES THE
        !           767: *      STANDARD FILES SPECIALLY AND CANNOT READILY KEEP FCBLK
        !           768: *      POINTERS FOR THEM.
        !           769: *      FILEARG1 IS TYPE CHECKED BY SPITBOL SO FURTHER CHECKING
        !           770: *      MAY BE UNNECCESSARY IN MANY IMPLEMENTATIONS.
        !           771: *      FILE ARG2 IS PASSED SO THAT SYSFC MAY ANALYSE AND
        !           772: *      CHECK IT. HOWEVER TO ASSIST IN THIS, SPITBOL ALSO PASSES
        !           773: *      ON THE STACK THE COMPONENTS OF THIS ARGUMENT WITH
        !           774: *      FILE NAME, $F$ (OTHERWISE NULL) EXTRACTED AND STACKED
        !           775: *      FIRST.
        !           776: *      THE OTHER FIELDS, IF ANY, ARE EXTRACTED AS SUBSTRINGS,
        !           777: *      POINTERS TO THEM ARE STACKED AND A COUNT OF ALL ITEMS
        !           778: *      STACKED IS PLACED IN WC. IF AN FCBLK WAS EARLIER
        !           779: *      ALLOCATED AND POINTED TO VIA FILE ARG1, SYSFC IS ALSO
        !           780: *      PASSED A POINTER TO THIS FCBLK.
        !           781: *
        !           782: *      (XL)                  FILE ARG1 SCBLK PTR (2ND ARG)
        !           783: *      (XR)                  FILEARG2 (3RD ARG) OR NULL
        !           784: *      -(XS)...-(XS)         SCBLKS FOR $F$,$R$,$C$,...
        !           785: *      (WC)                  NO. OF STACKED SCBLKS ABOVE
        !           786: *      (WA)                  EXISTING FILE ARG1 FCBLK PTR OR 0
        !           787: *      (WB)                  0/3 FOR INPUT/OUTPUT ASSOCN
        !           788: *      JSR  SYSFC            CALL TO CHECK NEED FOR FCBLK
        !           789: *      PPM  LOC              INVALID FILE ARGUMENT
        !           790: *      (XS)                  POPPED (WC) TIMES
        !           791: *      (WA NON ZERO)         BYTE SIZE OF REQUESTED FCBLK
        !           792: *      (WA=0,XL NON ZERO)    PRIVATE FCBLK PTR IN XL
        !           793: *      (WA=XL=0)             NO FCBLK WANTED, NO PRIVATE FCBLK
        !           794: *      (WC)                  0/1/2 REQUEST ALLOC OF XRBLK/XNBLK
        !           795: *                            /STATIC BLOCK FOR USE AS FCBLK
        !           796: *      (WB)                  DESTROYED
        !           797: {{EJC{{{{
        !           798: *
        !           799: *      SYSHS -- GIVE ACCESS TO HOST COMPUTER FEATURES
        !           800: *
        !           801: {SYSHS{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !           802: *
        !           803: *      PROVIDES MEANS FOR IMPLEMENTING SPECIAL FEATURES
        !           804: *      ON DIFFERENT HOST COMPUTERS. THE ONLY DEFINED ENTRY IS
        !           805: *      THAT WHERE ALL ARGUMENTS ARE NULL IN WHICH CASE SYSHS
        !           806: *      RETURNS AN SCBLK CONTAINING NAME OF COMPUTER,
        !           807: *      NAME OF OPERATING SYSTEM AND NAME OF SITE SEPARATED BY
        !           808: *      COLONS. THE SCBLK NEED NOT HAVE A CORRECT FIRST FIELD
        !           809: *      AS THIS IS SUPPLIED ON COPYING STRING TO DYNAMIC MEMORY.
        !           810: *      SPITBOL DOES NO ARGUMENT CHECKING BUT DOES PROVIDE A
        !           811: *      SINGLE ERROR RETURN FOR ARGUMENTS CHECKED AS ERRONEOUS
        !           812: *      BY OSINT. IT ALSO PROVIDES A SINGLE EXECUTION ERROR
        !           813: *      RETURN. IF THESE ARE INADEQUATE, USE MAY BE MADE OF THE
        !           814: *      MINIMAL ERROR SECTION DIRECT AS DESCRIBED IN MINIMAL
        !           815: *      DOCUMENTATION, SECTION 10.
        !           816: *      SEVERAL NON-ERROR RETURNS ARE PROVIDED. THE FIRST
        !           817: *      CORRESPONDS TO THE DEFINED ENTRY OR, FOR IMPLEMENTATION
        !           818: *      DEFINED ENTRIES, ANY STRING MAY BE RETURNED. THE OTHERS
        !           819: *      PERMIT RESPECTIVELY,  RETURN A NULL RESULT, RETURN WITH A
        !           820: *      RESULT TO BE STACKED WHICH IS POINTED AT BY XR, AND A
        !           821: *      RETURN CAUSING SPITBOL STATEMENT FAILURE. IF A RETURNED
        !           822: *      RESULT IS IN DYNAMIC MEMORY IT MUST OBEY GARBAGE
        !           823: *      COLLECTOR RULES. THE ONLY RESULTS COPIED ON RETURN
        !           824: *      ARE STRINGS RETURNED VIA PPM LOC3 RETURN.
        !           825: *
        !           826: *      (WA)                  ARGUMENT 1
        !           827: *      (XL)                  ARGUMENT 2
        !           828: *      (XR)                  ARGUMENT 3
        !           829: *      JSR  SYSHS            CALL TO GET HOST INFORMATION
        !           830: *      PPM  LOC1             ERRONEOUS ARG
        !           831: *      PPM  LOC2             EXECUTION ERROR
        !           832: *      PPM  LOC3             SCBLK PTR IN XL OR 0 IF UNAVAILABLE
        !           833: *      PPM  LOC4             RETURN A NULL RESULT
        !           834: *      PPM  LOC5             RETURN RESULT IN XR
        !           835: *      PPM  LOC6             CAUSE STATEMENT FAILURE
        !           836: {{EJC{{{{
        !           837: *
        !           838: *      SYSID -- RETURN SYSTEM IDENTIFICATION
        !           839: *
        !           840: {SYSID{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !           841: *
        !           842: *      THIS ROUTINE SHOULD RETURN STRINGS TO HEAD THE STANDARD
        !           843: *      PRINTER OUTPUT. THE FIRST STRING WILL BE APPENDED TO
        !           844: *      A HEADING LINE OF THE FORM
        !           845: *           MACRO SPITBOL VERSION V.V
        !           846: *      SUPPLIED BY SPITBOL ITSELF. V.V ARE DIGITS GIVING THE
        !           847: *      MAJOR VERSION NUMBER AND GENERALLY AT LEAST A MINOR
        !           848: *      VERSION NUMBER RELATING TO OSINT SHOULD BE SUPPLIED TO
        !           849: *      GIVE SAY
        !           850: *           MACRO SPITBOL VERSION V.V(M.M)
        !           851: *      THE SECOND STRING SHOULD IDENTIFY AT LEAST THE MACHINE
        !           852: *      AND OPERATING SYSTEM.  PREFERABLY IT SHOULD INCLUDE
        !           853: *      THE DATE AND TIME OF THE RUN.
        !           854: *      OPTIONALLY THE STRINGS MAY INCLUDE SITE NAME OF THE
        !           855: *      THE IMPLEMENTOR AND/OR MACHINE ON WHICH RUN TAKES PLACE,
        !           856: *      UNIQUE SITE OR COPY NUMBER AND OTHER INFORMATION AS
        !           857: *      APPROPRIATE WITHOUT MAKING IT SO LONG AS TO BE A
        !           858: *      NUISANCE TO USERS.
        !           859: *      THE FIRST WORDS OF THE SCBLKS POINTED AT NEED NOT BE
        !           860: *      CORRECTLY SET.
        !           861: *
        !           862: *      JSR  SYSID            CALL FOR SYSTEM IDENTIFICATION
        !           863: *      (XR)                  SCBLK PTR FOR ADDITION TO HEADER
        !           864: *      (XL)                  PTR TO SECOND HEADER SCBLK
        !           865: {{EJC{{{{
        !           866: *
        !           867: *      SYSIL -- GET INPUT RECORD LENGTH
        !           868: *
        !           869: {SYSIL{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !           870: *
        !           871: *      SYSIL IS USED TO GET THE LENGTH OF THE NEXT INPUT RECORD
        !           872: *      FROM A FILE PREVIOUSLY INPUT ASSOCIATED WITH A SYSIO
        !           873: *      CALL. THE LENGTH RETURNED IS USED TO ESTABLISH A BUFFER
        !           874: *      FOR A SUBSEQUENT SYSIN CALL.
        !           875: *
        !           876: *      (WA)                  PTR TO FCBLK OR ZERO
        !           877: *      JSR  SYSIL            CALL TO GET RECORD LENGTH
        !           878: *      (WA)                  LENGTH OR ZERO IF FILE CLOSED
        !           879: *
        !           880: *      NO HARM IS DONE IF THE VALUE RETURNED IS TOO LONG SINCE
        !           881: *      UNUSED SPACE WILL BE RECLAIMED AFTER THE SYSIN CALL.
        !           882: *
        !           883: *      NOTE THAT IT IS THE SYSIL CALL (NOT THE SYSIO CALL) WHICH
        !           884: *      CAUSES THE FILE TO BE OPENED AS REQUIRED FOR THE FIRST
        !           885: *      RECORD INPUT FROM THE FILE.
        !           886: {{EJC{{{{
        !           887: *
        !           888: *      SYSIN -- READ INPUT RECORD
        !           889: *
        !           890: {SYSIN{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !           891: *
        !           892: *      SYSIN IS USED TO READ A RECORD FROM THE FILE WHICH WAS
        !           893: *      REFERENCED IN A PRIOR CALL TO SYSIL (I.E. THESE CALLS
        !           894: *      ALWAYS OCCUR IN PAIRS). THE BUFFER PROVIDED IS AN
        !           895: *      SCBLK FOR A STRING OF LENGTH SET FROM THE SYSIL CALL.
        !           896: *      IF THE ACTUAL LENGTH READ IS LESS THAN THIS, THE LENGTH
        !           897: *      FIELD OF THE SCBLK MUST BE MODIFIED BEFORE RETURNING
        !           898: *      UNLESS BUFFER IS RIGHT PADDED WITH ZEROES.
        !           899: *      IT IS ALSO PERMISSIBLE TO TAKE ANY OF THE ALTERNATIVE
        !           900: *      RETURNS AFTER SCBLK LENGTH HAS BEEN MODIFIED.
        !           901: *
        !           902: *      (WA)                  PTR TO FCBLK OR ZERO
        !           903: *      (XR)                  POINTER TO BUFFER (SCBLK PTR)
        !           904: *      JSR  SYSIN            CALL TO READ RECORD
        !           905: *      PPM  LOC              ENDFILE OR NO I/P FILE AFTER SYSXI
        !           906: *      PPM  LOC              RETURN HERE IF I/O ERROR
        !           907: *      PPM  LOC              RETURN HERE IF RECORD FORMAT ERROR
        !           908: *      (WA,WB,WC)            DESTROYED
        !           909: {{EJC{{{{
        !           910: *
        !           911: *      SYSIO -- INPUT/OUTPUT FILE ASSOCIATION
        !           912: *
        !           913: {SYSIO{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !           914: *
        !           915: *      SEE ALSO SYSFC.
        !           916: *      SYSIO IS CALLED IN RESPONSE TO A SNOBOL4 INPUT OR OUTPUT
        !           917: *      FUNCTION CALL EXCEPT WHEN FILE ARG1 AND FILE ARG2
        !           918: *      ARE BOTH NULL.
        !           919: *      ITS CALL ALWAYS FOLLOWS IMMEDIATELY AFTER A CALL
        !           920: *      OF SYSFC. IF SYSFC REQUESTED ALLOCATION
        !           921: *      OF AN FCBLK, ITS ADDRESS WILL BE IN WA.
        !           922: *      FOR INPUT FILES, NON-ZERO VALUES OF $R$ SHOULD BE
        !           923: *      COPIED TO WC FOR USE IN ALLOCATING INPUT BUFFERS. IF $R$
        !           924: *      IS DEFAULTED OR NOT IMPLEMENTED, WC SHOULD BE ZEROISED.
        !           925: *      ONCE A FILE HAS BEEN OPENED, SUBSEQUENT INPUT(),OUTPUT()
        !           926: *      CALLS IN WHICH THE SECOND ARGUMENT IS IDENTICAL WITH THAT
        !           927: *      IN A PREVIOUS CALL, MERELY ASSOCIATE THE ADDITIONAL
        !           928: *      VARIABLE NAME (FIRST ARGUMENT) TO THE FILE AND DO NOT
        !           929: *      RESULT IN RE-OPENING THE FILE.
        !           930: *      IN SUBSEQUENT ASSOCIATED ACCESSES TO THE FILE A POINTER
        !           931: *      TO ANY FCBLK ALLOCATED WILL BE MADE AVAILABLE.
        !           932: *
        !           933: *      (XL)                  FILE ARG1 SCBLK PTR (2ND ARG)
        !           934: *      (XR)                  FILE ARG2 SCBLK PTR (3RD ARG)
        !           935: *      (WA)                  FCBLK PTR (0 IF NONE)
        !           936: *      (WB)                  0 FOR INPUT, 3 FOR OUTPUT
        !           937: *      JSR  SYSIO            CALL TO ASSOCIATE FILE
        !           938: *      PPM  LOC              RETURN HERE IF FILE DOES NOT EXIST
        !           939: *      PPM  LOC              RETURN IF INPUT/OUTPUT NOT ALLOWED
        !           940: *      (XL)                  FCBLK POINTER (0 IF NONE)
        !           941: *      (WC)                  0 (FOR DEFAULT) OR MAX RECORD LNGTH
        !           942: *      (WA,WB)               DESTROYED
        !           943: *
        !           944: *      THE SECOND ERROR RETURN IS USED IF THE FILE NAMED EXISTS
        !           945: *      BUT INPUT/OUTPUT FROM THE FILE IS NOT ALLOWED. FOR
        !           946: *      EXAMPLE, THE STANDARD OUTPUT FILE MAY BE IN THIS CATEGORY
        !           947: *      AS REGARDS INPUT ASSOCIATION.
        !           948: {{EJC{{{{
        !           949: *
        !           950: *      SYSLD -- LOAD EXTERNAL FUNCTION
        !           951: *
        !           952: {SYSLD{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !           953: *
        !           954: *      SYSLD IS CALLED IN RESPONSE TO THE USE OF THE SNOBOL4
        !           955: *      LOAD FUNCTION. THE NAMED FUNCTION IS LOADED (WHATEVER
        !           956: *      THIS MEANS), AND A POINTER IS RETURNED. THE POINTER WILL
        !           957: *      BE USED ON SUBSEQUENT CALLS TO THE FUNCTION (SEE SYSEX).
        !           958: *
        !           959: *      (XR)                  POINTER TO FUNCTION NAME (SCBLK)
        !           960: *      (XL)                  POINTER TO LIBRARY NAME (SCBLK)
        !           961: *      JSR  SYSLD            CALL TO LOAD FUNCTION
        !           962: *      PPM  LOC              RETURN HERE IF FUNC DOES NOT EXIST
        !           963: *      PPM  LOC              RETURN HERE IF I/O ERROR
        !           964: *      (XR)                  POINTER TO LOADED CODE
        !           965: *
        !           966: *      THE SIGNIFICANCE OF THE POINTER RETURNED IS UP TO THE
        !           967: *      SYSTEM INTERFACE ROUTINE. THE ONLY RESTRICTION IS THAT
        !           968: *      IF THE POINTER IS WITHIN DYNAMIC STORAGE, IT MUST BE
        !           969: *      A PROPER BLOCK POINTER.
        !           970: {{EJC{{{{
        !           971: *
        !           972: *      SYSMM -- GET MORE MEMORY
        !           973: *
        !           974: {SYSMM{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !           975: *
        !           976: *      SYSMM IS CALLED IN AN ATTEMPT TO ALLOCATE MORE DYNAMIC
        !           977: *      MEMORY. THIS MEMORY MUST BE ALLOCATED CONTIGUOUSLY WITH
        !           978: *      THE CURRENT DYNAMIC DATA AREA.
        !           979: *
        !           980: *      THE AMOUNT ALLOCATED IS UP TO THE SYSTEM TO DECIDE. ANY
        !           981: *      VALUE IS ACCEPTABLE INCLUDING ZERO IF ALLOCATION IS
        !           982: *      IMPOSSIBLE.
        !           983: *
        !           984: *      JSR  SYSMM            CALL TO GET MORE MEMORY
        !           985: *      (XR)                  NUMBER OF ADDITIONAL WORDS OBTAINED
        !           986: {{EJC{{{{
        !           987: *
        !           988: *      SYSMX -- SUPPLY MXLEN
        !           989: *
        !           990: {SYSMX{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !           991: *
        !           992: *      BECAUSE OF THE METHOD OF GARBAGE COLLECTION, NO SPITBOL
        !           993: *      OBJECT IS ALLOWED TO OCCUPY MORE BYTES OF MEMORY THAN
        !           994: *      THE INTEGER GIVING THE LOWEST ADDRESS OF DYNAMIC
        !           995: *      (GARBAGE COLLECTABLE) MEMORY. MXLEN IS THE NAME USED TO
        !           996: *      REFER TO THIS MAXIMUM LENGTH OF AN OBJECT AND FOR MOST
        !           997: *      USERS OF MOST IMPLEMENTATIONS, PROVIDED DYNAMIC MEMORY
        !           998: *      STARTS AT AN ADDRESS OF AT LEAST A FEW THOUSAND WORDS,
        !           999: *      THERE IS NO PROBLEM.
        !          1000: *      IF THE DEFAULT STARTING ADDRESS IS LESS THAN SAY 10000 OR
        !          1001: *      20000, THEN A LOAD TIME OPTION SHOULD BE PROVIDED WHERE A
        !          1002: *      USER CAN REQUEST THAT HE BE ABLE TO CREATE LARGER
        !          1003: *      OBJECTS. THIS ROUTINE INFORMS SPITBOL OF THIS REQUEST IF
        !          1004: *      ANY. THE VALUE RETURNED IS EITHER AN INTEGER
        !          1005: *      REPRESENTING THE DESIRED VALUE OF MXLEN (AND HENCE THE
        !          1006: *      MINIMUM DYNAMIC STORE ADDRESS WHICH MAY RESULT IN
        !          1007: *      NON-USE OF SOME STORE) OR ZERO IF A DEFAULT IS ACCEPTABLE
        !          1008: *      IN WHICH MXLEN IS SET TO THE LOWEST ADDRESS ALLOCATED
        !          1009: *      TO DYNAMIC STORE BEFORE COMPILATION STARTS.
        !          1010: *      IF A NON-ZERO VALUE IS RETURNED, THIS IS USED FOR KEYWORD
        !          1011: *      MAXLNGTH. OTHERWISE THE INITIAL LOW ADDRESS OF DYNAMIC
        !          1012: *      MEMORY IS USED FOR THIS KEYWORD.
        !          1013: *
        !          1014: *      JSR  SYSMX            CALL TO GET MXLEN
        !          1015: *      (WA)                  EITHER MXLEN OR 0 FOR DEFAULT
        !          1016: {{EJC{{{{
        !          1017: *
        !          1018: *      SYSOU -- OUTPUT RECORD
        !          1019: *
        !          1020: {SYSOU{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !          1021: *
        !          1022: *      SYSOU IS USED TO WRITE A RECORD TO A FILE PREVIOUSLY
        !          1023: *      ASSOCIATED WITH A SYSIO CALL.
        !          1024: *
        !          1025: *      (WA)                  PTR TO FCBLK OR ZERO
        !          1026: *      (XR)                  RECORD TO BE WRITTEN (SCBLK)
        !          1027: *      JSR  SYSOU            CALL TO OUTPUT RECORD
        !          1028: *      PPM  LOC              FILE FULL OR NO FILE AFTER SYSXI
        !          1029: *      PPM  LOC              RETURN HERE IF I/O ERROR
        !          1030: *      (WA,WB,WC)            DESTROYED
        !          1031: *
        !          1032: *      NOTE THAT IT IS THE SYSOU CALL (NOT THE SYSIO CALL) WHICH
        !          1033: *      CAUSES THE FILE TO BE OPENED AS REQUIRED FOR THE FIRST
        !          1034: *      RECORD OUTPUT TO THE FILE.
        !          1035: {{EJC{{{{
        !          1036: *
        !          1037: *      SYSPI -- PRINT ON INTERACTIVE CHANNEL
        !          1038: *
        !          1039: {SYSPI{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !          1040: *
        !          1041: *      IF SPITBOL IS RUN FROM AN ONLINE TERMINAL, OSINT CAN
        !          1042: *      REQUEST THAT MESSAGES SUCH AS COPIES OF COMPILATION
        !          1043: *      ERRORS BE SENT TO THE TERMINAL (SEE SYSPP). IF RELEVANT
        !          1044: *      REPLY WAS MADE BY SYSPP THEN SYSPI IS CALLED TO SEND SUCH
        !          1045: *      MESSAGES TO THE INTERACTIVE CHANNEL.
        !          1046: *      SYSPI IS ALSO USED FOR SENDING OUTPUT TO THE TERMINAL
        !          1047: *      THROUGH THE SPECIAL VARIABLE NAME, TERMINAL.
        !          1048: *
        !          1049: *      (XR)                  PTR TO LINE BUFFER (SCBLK)
        !          1050: *      (WA)                  LINE LENGTH
        !          1051: *      JSR  SYSPI            CALL TO PRINT LINE
        !          1052: *      PPM  LOC              FAILURE RETURN
        !          1053: *      (WA,WB)               DESTROYED
        !          1054: {{EJC{{{{
        !          1055: *
        !          1056: *      SYSPP -- OBTAIN PRINT PARAMETERS
        !          1057: *
        !          1058: {SYSPP{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !          1059: *
        !          1060: *      SYSPP IS CALLED ONCE DURING COMPILATION TO OBTAIN
        !          1061: *      PARAMETERS REQUIRED FOR CORRECT PRINTED OUTPUT FORMAT
        !          1062: *      AND TO SELECT OTHER OPTIONS. IT MAY ALSO BE CALLED AGAIN
        !          1063: *      AFTER SYSXI WHEN A LOAD MODULE IS RESUMED. IN THIS
        !          1064: *      CASE THE VALUE RETURNED IN WA MAY BE LESS THAN OR EQUAL
        !          1065: *      TO THAT RETURNED IN INITIAL CALL BUT MAY NOT BE
        !          1066: *      GREATER.
        !          1067: *      THE INFORMATION RETURNED IS -
        !          1068: *      1.   LINE LENGTH IN CHARS FOR STANDARD PRINT FILE
        !          1069: *      2.   NO OF LINES/PAGE. 0 IS PREFERABLE FOR A NON-PAGED
        !          1070: *           DEVICE (E.G. ONLINE TERMINAL) IN WHICH CASE LISTING
        !          1071: *           PAGE THROWS ARE SUPPRESSED AND PAGE HEADERS
        !          1072: *           RESULTING FROM -TITLE,-STITL LINES ARE KEPT SHORT.
        !          1073: *      3.   AN INITIAL -NOLIST OPTION TO SUPPRESS LISTING UNLESS
        !          1074: *           THE PROGRAM CONTAINS AN EXPLICIT -LIST.
        !          1075: *      4.   OPTIONS TO SUPPRESS LISTING OF COMPILATION AND/OR
        !          1076: *           EXECUTION STATS (USEFUL FOR ESTABLISHED PROGRAMS) -
        !          1077: *           COMBINED WITH 3. GIVES POSSIBILITY OF LISTING
        !          1078: *           FILE NEVER BEING OPENED.
        !          1079: *      5.   OPTION TO HAVE COPIES OF ERRORS SENT TO AN
        !          1080: *           INTERACTIVE CHANNEL IN ADDITION TO STANDARD PRINTER.
        !          1081: *      6.   OPTION TO KEEP PAGE HEADERS SHORT (E.G. IF LISTING
        !          1082: *           TO AN ONLINE TERMINAL).
        !          1083: *      7.   AN OPTION TO CHOOSE EXTENDED OR COMPACT LISTING
        !          1084: *           FORMAT. IN THE FORMER A PAGE EJECT AND IN THE LATTER
        !          1085: *           A FEW LINE FEEDS PRECEDE THE PRINTING OF EACH
        !          1086: *           OF-- LISTING, COMPILATION STATISTICS, EXECUTION
        !          1087: *           OUTPUT AND EXECUTION STATISTICS.
        !          1088: *      8.   AN OPTION TO SUPPRESS EXECUTION AS THOUGH A
        !          1089: *           -NOEXECUTE CARD WERE SUPPLIED.
        !          1090: *      9.   AN OPTION TO REQUEST THAT NAME /TERMINAL/  BE PRE-
        !          1091: *           ASSOCIATED TO AN ONLINE TERMINAL VIA SYSPI AND SYSRI
        !          1092: *      10.  AN INTERMEDIATE (STANDARD) LISTING OPTION REQUIRING
        !          1093: *           THAT PAGE EJECTS OCCUR IN SOURCE LISTINGS. REDUNDANT
        !          1094: *           IF EXTENDED OPTION CHOSEN BUT PARTIALLY EXTENDS
        !          1095: *           COMPACT OPTION.
        !          1096: *      11.  OPTION TO SUPPRESS SYSID IDENTIFICATION.
        !          1097: *
        !          1098: *      JSR  SYSPP            CALL TO GET PRINT PARAMETERS
        !          1099: *      (WA)                  PRINT LINE LENGTH IN CHARS
        !          1100: *      (WB)                  NUMBER OF LINES/PAGE
        !          1101: *      (WC)                  BITS VALUE ...JIHGFEDCBA WHERE
        !          1102: *                            A = 1 TO SEND ERROR COPY TO INT.CH.
        !          1103: *                            B = 1 MEANS STD PRINTER IS INT. CH.
        !          1104: *                            C = 1 FOR -NOLIST OPTION
        !          1105: *                            D = 1 TO SUPPRESS COMPILN. STATS
        !          1106: *                            E = 1 TO SUPPRESS EXECN. STATS
        !          1107: *                            F = 1/0 FOR EXTNDED/COMPACT LISTING
        !          1108: *                            G = 1 FOR -NOEXECUTE
        !          1109: *                            H = 1 PRE-ASSOCIATE /TERMINAL/
        !          1110: *                            I = 1 FOR STANDARD LISTING OPTION.
        !          1111: *                            J = 1 SUPPRESSES LISTING HEADER
        !          1112: {{EJC{{{{
        !          1113: *
        !          1114: *      SYSPR -- PRINT LINE ON STANDARD OUTPUT FILE
        !          1115: *
        !          1116: {SYSPR{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !          1117: *
        !          1118: *      SYSPR IS USED TO PRINT A SINGLE LINE ON THE STANDARD
        !          1119: *      OUTPUT FILE.
        !          1120: *
        !          1121: *      (XR)                  POINTER TO LINE BUFFER (SCBLK)
        !          1122: *      (WA)                  LINE LENGTH
        !          1123: *      JSR  SYSPR            CALL TO PRINT LINE
        !          1124: *      PPM  LOC              TOO MUCH O/P OR NO FILE AFTER SYSXI
        !          1125: *      (WA,WB)               DESTROYED
        !          1126: *
        !          1127: *      THE BUFFER POINTED TO IS THE LENGTH OBTAINED FROM THE
        !          1128: *      SYSPP CALL AND IS FILLED OUT WITH TRAILING BLANKS. THE
        !          1129: *      VALUE IN WA IS THE ACTUAL LINE LENGTH WHICH MAY BE LESS
        !          1130: *      THAN THE MAXIMUM LINE LENGTH POSSIBLE. THERE IS NO SPACE
        !          1131: *      CONTROL ASSOCIATED WITH THE LINE, ALL LINES ARE PRINTED
        !          1132: *      SINGLE SPACED. NOTE THAT NULL LINES (WA=0) ARE POSSIBLE
        !          1133: *      IN WHICH CASE A BLANK LINE IS TO BE PRINTED.
        !          1134: *
        !          1135: *      THE ERROR EXIT IS USED FOR SYSTEMS WHICH LIMIT THE AMOUNT
        !          1136: *      OF PRINTED OUTPUT. IF POSSIBLE, PRINTING SHOULD BE
        !          1137: *      PERMITTED AFTER THIS CONDITION HAS BEEN SIGNALLED ONCE TO
        !          1138: *      ALLOW FOR DUMP AND OTHER DIAGNOSTIC INFORMATION.
        !          1139: *      ASSUMING THIS TO BE POSSIBLE, SPITBOL MAY MAKE MORE SYSPR
        !          1140: *      CALLS. IF THE ERROR RETURN OCCURS ANOTHER TIME, EXECUTION
        !          1141: *      IS TERMINATED BY A CALL OF SYSEJ WITH ENDING CODE 998.
        !          1142: {{EJC{{{{
        !          1143: *
        !          1144: *      SYSRD -- READ RECORD FROM STANDARD INPUT FILE
        !          1145: *
        !          1146: {SYSRD{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !          1147: *
        !          1148: *      SYSRD IS USED TO READ A RECORD FROM THE STANDARD INPUT
        !          1149: *      FILE. THE BUFFER PROVIDED IS AN SCBLK FOR A STRING THE
        !          1150: *      LENGTH OF WHICH IN CHARACTERS IS GIVEN IN WC, THIS
        !          1151: *      CORRESPONDING TO THE MAXIMUM LENGTH OF STRING WHICH
        !          1152: *      SPITBOL IS PREPARED TO RECEIVE. AT COMPILE TIME IT
        !          1153: *      CORRESPONDS TO XXX IN THE MOST RECENT -INXXX CARD
        !          1154: *      (DEFAULT 72) AND AT EXECUTION TIME TO THE MOST RECENT
        !          1155: *      ,R$R$ (RECORD LENGTH) IN THE THIRD ARG OF AN INPUT()
        !          1156: *      STATEMENT FOR THE STANDARD INPUT FILE (DEFAULT 80).
        !          1157: *      IF FEWER THAN (WC) CHARACTERS ARE READ, THE LENGTH
        !          1158: *      FIELD OF THE SCBLK MUST BE ADJUSTED BEFORE RETURNING
        !          1159: *      UNLESS THE BUFFER IS RIGHT PADDED WITH ZEROES.
        !          1160: *      IT IS ALSO PERMISSIBLE TO TAKE THE ALTERNATIVE RETURN
        !          1161: *      AFTER SUCH AN ADJUSTMENT HAS BEEN MADE.
        !          1162: *      SPITBOL MAY CONTINUE TO MAKE CALLS AFTER AN ENDFILE
        !          1163: *      RETURN SO THIS ROUTINE SHOULD BE PREPARED TO MAKE
        !          1164: *      REPEATED ENDFILE RETURNS.
        !          1165: *
        !          1166: *      (XR)                  POINTER TO BUFFER (SCBLK PTR)
        !          1167: *      (WC)                  LENGTH OF BUFFER IN CHARACTERS
        !          1168: *      JSR  SYSRD            CALL TO READ LINE
        !          1169: *      PPM  LOC              ENDFILE OR NO I/P FILE AFTER SYSXI
        !          1170: *      (WA,WB,WC)            DESTROYED
        !          1171: {{EJC{{{{
        !          1172: *
        !          1173: *      SYSRI -- READ RECORD FROM INTERACTIVE CHANNEL
        !          1174: *
        !          1175: {SYSRI{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !          1176: *
        !          1177: *      READS A RECORD FROM ONLINE TERMINAL FOR SPITBOL VARIABLE,
        !          1178: *      TERMINAL. IF ONLINE TERMINAL IS UNAVAILABLE THEN CODE THE
        !          1179: *      ENDFILE RETURN ONLY.
        !          1180: *      THE BUFFER PROVIDED IS OF LENGTH 120 CHARACTERS. SYSRI
        !          1181: *      SHOULD REPLACE THE COUNT IN THE SECOND WORD OF THE SCBLK
        !          1182: *      BY THE ACTUAL CHARACTER COUNT UNLESS BUFFER IS RIGHT
        !          1183: *      PADDED WITH ZEROES.
        !          1184: *      IT IS ALSO PERMISSIBLE TO TAKE THE ALTERNATIVE
        !          1185: *      RETURN AFTER ADJUSTING THE COUNT.
        !          1186: *      THE END OF FILE RETURN MAY BE USED IF THIS MAKES
        !          1187: *      SENSE ON THE TARGET MACHINE (E.G. IF THERE IS AN
        !          1188: *      EOF CHARACTER.)
        !          1189: *
        !          1190: *      (XR)                  PTR TO 120 CHAR BUFFER (SCBLK PTR)
        !          1191: *      JSR  SYSRI            CALL TO READ LINE FROM TERMINAL
        !          1192: *      PPM  LOC              END OF FILE RETURN
        !          1193: *      (WA,WB,WC)            MAY BE DESTROYED
        !          1194: {{EJC{{{{
        !          1195: *
        !          1196: *      SYSRW -- REWIND FILE
        !          1197: *
        !          1198: {SYSRW{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !          1199: *
        !          1200: *      SYSRW IS USED TO REWIND A FILE I.E. REPOSITION THE FILE
        !          1201: *      AT THE START BEFORE THE FIRST RECORD. THE FILE SHOULD BE
        !          1202: *      CLOSED AND THE NEXT READ OR WRITE CALL WILL OPEN THE
        !          1203: *      FILE AT THE START.
        !          1204: *
        !          1205: *      (WA)                  PTR TO FCBLK OR ZERO
        !          1206: *      (XR)                  REWIND ARG (SCBLK PTR)
        !          1207: *      JSR  SYSRW            CALL TO REWIND FILE
        !          1208: *      PPM  LOC              RETURN HERE IF FILE DOES NOT EXIST
        !          1209: *      PPM  LOC              RETURN HERE IF REWIND NOT ALLOWED
        !          1210: *      PPM  LOC              RETURN HERE IF I/O ERROR
        !          1211: {{EJC{{{{
        !          1212: *
        !          1213: *      SYSST -- SET FILE POINTER
        !          1214: *
        !          1215: {SYSST{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !          1216: *
        !          1217: *      SYSST IS CALLED TO CHANGE THE POSITION OF A FILE
        !          1218: *      POINTER. THIS IS ACCOMPLISHED IN A SYSTEM DEPENDENT
        !          1219: *      MANNER, AND THUS THE 2ND AND 3RD ARGUMENTS ARE PASSED
        !          1220: *      UNCONVERTED.
        !          1221: *
        !          1222: *      (WA)                  FCBLK POINTER
        !          1223: *      (WB)                  2ND ARGUMENT
        !          1224: *      (WC)                  3RD ARGUMENT
        !          1225: *      JSR  SYSST            CALL TO SET FILE POINTER
        !          1226: *      PPM  LOC              RETURN HERE IF INVALID 2ND ARG
        !          1227: *      PPM  LOC              RETURN HERE IF INVALID 3RD ARG
        !          1228: *      PPM  LOC              RETURN HERE IF FILE DOES NOT EXIST
        !          1229: *      PPM  LOC              RETURN HERE IF SET NOT ALLOWED
        !          1230: *      PPM  LOC              RETURN HERE IF I/O ERROR
        !          1231: *
        !          1232: {{EJC{{{{
        !          1233: *
        !          1234: *      SYSTM -- GET EXECUTION TIME SO FAR
        !          1235: *
        !          1236: {SYSTM{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !          1237: *
        !          1238: *      SYSTM IS USED TO OBTAIN THE AMOUNT OF EXECUTION TIME
        !          1239: *      USED SO FAR SINCE SPITBOL WAS GIVEN CONTROL. THE UNITS
        !          1240: *      ARE DESCRIBED AS MILLISECONDS IN THE SPITBOL OUTPUT, BUT
        !          1241: *      THE EXACT MEANING IS SYSTEM DEPENDENT. WHERE APPROPRIATE,
        !          1242: *      THIS VALUE SHOULD RELATE TO PROCESSOR RATHER THAN CLOCK
        !          1243: *      TIMING VALUES.
        !          1244: *
        !          1245: *      JSR  SYSTM            CALL TO GET TIMER VALUE
        !          1246: *      (IA)                  TIME SO FAR IN MILLISECONDS
        !          1247: {{EJC{{{{
        !          1248: *
        !          1249: *      SYSTT -- TRACE TOGGLE
        !          1250: *
        !          1251: {SYSTT{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !          1252: *
        !          1253: *      CALLED BY SPITBOL FUNCTION TRACE() WITH NO ARGS TO
        !          1254: *      TOGGLE THE SYSTEM TRACE SWITCH.  THIS PERMITS TRACING OF
        !          1255: *      LABELS IN SPITBOL CODE TO BE TURNED ON OR OFF.
        !          1256: *
        !          1257: *      JSR  SYSTT            CALL TO TOGGLE TRACE SWITCH
        !          1258: {{EJC{{{{
        !          1259: *
        !          1260: *      SYSUL -- UNLOAD EXTERNAL FUNCTION
        !          1261: *
        !          1262: {SYSUL{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !          1263: *
        !          1264: *      SYSUL IS USED TO UNLOAD A FUNCTION PREVIOUSLY
        !          1265: *      LOADED WITH A CALL TO SYSLD.
        !          1266: *
        !          1267: *      (XR)                  PTR TO CONTROL BLOCK (EFBLK)
        !          1268: *      JSR  SYSUL            CALL TO UNLOAD FUNCTION
        !          1269: *
        !          1270: *      THE FUNCTION CANNOT BE CALLED FOLLOWING A SYSUL CALL
        !          1271: *      UNTIL ANOTHER SYSLD CALL IS MADE FOR THE SAME FUNCTION.
        !          1272: *
        !          1273: *      THE EFBLK CONTAINS THE FUNCTION CODE POINTER AND ALSO A
        !          1274: *      POINTER TO THE VRBLK CONTAINING THE FUNCTION NAME (SEE
        !          1275: *      DEFINITIONS AND DATA STRUCTURES SECTION).
        !          1276: {{EJC{{{{
        !          1277: *
        !          1278: *      SYSXI -- EXIT TO PRODUCE LOAD MODULE
        !          1279: *
        !          1280: {SYSXI{EXP{{{{DEFINE EXTERNAL ENTRY POINT
        !          1281: *
        !          1282: *      WHEN SYSXI IS CALLED, XL CONTAINS EITHER A STRING POINTER
        !          1283: *      OR ZERO. IN THE FORMER CASE, THE STRING GIVES THE
        !          1284: *      CHARACTER NAME OF A PROGRAM. THE INTENTION IS THAT
        !          1285: *      SPITBOL EXECUTION SHOULD BE TERMINATED FORTHWITH AND
        !          1286: *      THE NAMED PROGRAM LOADED AND EXECUTED. THIS TYPE OF CHAIN
        !          1287: *      EXECUTION IS VERY SYSTEM DEPENDENT AND IMPLEMENTORS MAY
        !          1288: *      CHOOSE TO OMIT IT OR FIND IT IMPOSSIBLE TO PROVIDE.
        !          1289: *      IF (XL) IS ZERO,IA CONTAINS ONE OF THE FOLLOWING INTEGERS
        !          1290: *
        !          1291: *      -1, -2, -3
        !          1292: *           CREATE IF POSSIBLE A LOAD MODULE CONTAINING ONLY THE
        !          1293: *           IMPURE AREA OF MEMORY WHICH NEEDS TO BE LOADED WITH
        !          1294: *           A COMPATIBLE PURE SEGMENT FOR SUBSEQUENT EXECUTIONS.
        !          1295: *           VERSION NUMBERS TO CHECK COMPATIBILITY SHOULD BE
        !          1296: *           KEPT IN BOTH SEGMENTS AND CHECKED ON LOADING.
        !          1297: *           TO ASSIST WITH THIS CHECK, (XR) ON ENTRY IS A
        !          1298: *           POINTER TO AN SCBLK CONTAINING THE SPITBOL MAJOR
        !          1299: *           VERSION NUMBER V.V (SEE SYSID).
        !          1300: *
        !          1301: *      0    IF POSSIBLE, RETURN CONTROL TO JOB CONTROL
        !          1302: *           COMMAND LEVEL. THE EFFECT IF AVAILABLE WILL BE
        !          1303: *           SYSTEM DEPENDENT.
        !          1304: *
        !          1305: *      +1, +2, +3
        !          1306: *           CREATE IF POSSIBLE A LOAD MODULE FROM ALL OF
        !          1307: *           MEMORY. IT SHOULD BE POSSIBLE TO LOAD AND EXECUTE
        !          1308: *           THIS MODULE DIRECTLY.
        !          1309: *
        !          1310: *      IN THE CASE OF SAVED LOAD MODULES, THE STATUS OF OPEN
        !          1311: *      FILES IS NOT PRESERVED AND IMPLEMENTORS MAY CHOOSE TO
        !          1312: *      OFFER MEANS OF ATTACHING FILES BEFORE EXECUTION OF LOAD
        !          1313: *      MODULES STARTS OR LEAVE IT TO THE USER TO INCLUDE
        !          1314: *      SUITABLE INPUT(), OUTPUT() CALLS IN HIS PROGRAM.
        !          1315: *      SYSXI SHOULD MAKE A NOTE THAT NO I/O CHANNELS,
        !          1316: *      INCLUDING STANDARD FILES, HAVE FILES ATTACHED SO THAT
        !          1317: *      CALLS OF SYSIN, SYSOU, SYSPR, SYSRD SHOULD FAIL UNLESS
        !          1318: *      NEW ASSOCIATIONS ARE MADE FOR THE LOAD MODULE.
        !          1319: *      AT LEAST IN THE CASE OF THE STANDARD OUTPUT FILE, IT IS
        !          1320: *      RECOMMENDED THAT EITHER THE USER BE REQUIRED TO ATTACH
        !          1321: *      A FILE OR THAT A DEFAULT FILE IS ATTACHED, SINCE THE
        !          1322: *      PROBLEM OF ERROR MESSAGES GENERATED BY THE LOAD MODULE
        !          1323: *      IS OTHERWISE SEVERE. AS A LAST RESORT, IF SPITBOL
        !          1324: *      ATTEMPTS TO WRITE TO THE STANDARD OUTPUT FILE AND GETS A
        !          1325: *      REPLY INDICATING THAT SUCH OUPUT IS UNACCEPTABLE IT STOPS
        !          1326: *      BY USING AN ENTRY TO SYSEJ WITH ENDING CODE 998.
        !          1327: *      AS DESCRIBED BELOW, PASSING OF SOME ARGUMENTS MAKES IT
        !          1328: *      CLEAR THAT LOAD MODULE WILL USE A STANDARD OUTPUT FILE.
        !          1329: *
        !          1330: *      IF USE IS MADE OF FCBLKS FOR I/O ASSOCIATION, SPITBOL
        !          1331: *      BUILDS A CHAIN SO THAT THOSE IN USE MAY BE FOUND IN SYSXI
        !          1332: *      AND SYSEJ. THE NODES ARE 4 WORDS LONG. THIRD WORD
        !          1333: *      CONTAINS LINK TO NEXT NODE OR 0, FOURTH WORD CONTAINS
        !          1334: *      FCBLK POINTER.
        !          1335: {{EJC{{{{
        !          1336: *
        !          1337: *      SYSXI (CONTINUED)
        !          1338: *
        !          1339: *      (XL)                  ZERO OR SCBLK PTR
        !          1340: *      (XR)                  PTR TO V.V SCBLK
        !          1341: *      (IA)                  SIGNED INTEGER ARGUMENT
        !          1342: *      (WB)                  0 OR PTR TO HEAD OF FCBLK CHAIN
        !          1343: *      JSR  SYSXI            CALL TO EXIT
        !          1344: *      PPM  LOC              REQUESTED ACTION NOT POSSIBLE
        !          1345: *      PPM  LOC              ACTION CAUSED IRRECOVERABLE ERROR
        !          1346: *      (REGISTERS)           SHOULD BE PRESERVED OVER CALL
        !          1347: *
        !          1348: *      LOADING AND RUNNING THE LOAD MODULE OR RETURNING FROM
        !          1349: *      JCL COMMAND LEVEL CAUSES EXECUTION TO RESUME AT THE POINT
        !          1350: *      AFTER THE ERROR RETURNS WHICH FOLLOW THE CALL OF SYSXI.
        !          1351: *      THE VALUE PASSED AS EXIT ARGUMENT IS USED TO INDICATE
        !          1352: *      OPTIONS REQUIRED ON RESUMPTION OF LOAD MODULE.
        !          1353: *      +1 OR -1 REQUIRE THAT ON RESUMPTION, SYSID AND SYSPP BE
        !          1354: *      CALLED AND A HEADING PRINTED ON THE STANDARD OUTPUT FILE.
        !          1355: *      +2 OR -2 INDICATE THAT SYSPP WILL BE CALLED BUT NOT SYSID
        !          1356: *      AND NO HEADING WILL BE PUT ON STANDARD OUTPUT FILE.
        !          1357: *      ABOVE OPTIONS HAVE THE OBVIOUS IMPLICATION THAT A
        !          1358: *      STANDARD O/P FILE MUST BE PROVIDED FOR THE LOAD MODULE.
        !          1359: *      +3 OR -3 INDICATE CALLS OF NEITHER SYSID NOR SYSPP
        !          1360: *      AND NO HEADING WILL BE PLACED ON STANDARD OUTPUT FILE.
        !          1361: *      NO RETURN FROM SYSXI IS POSSIBLE IF ANOTHER PROGRAM
        !          1362: *      IS LOADED AND ENTERED.
        !          1363: {{EJC{{{{
        !          1364: *
        !          1365: *      INTRODUCE THE INTERNAL PROCEDURES.
        !          1366: *
        !          1367: {ACESS{INP{R{1{{
        !          1368: {ACOMP{INP{N{5{{
        !          1369: {ALLOC{INP{E{0{{
        !          1370: {ALOBF{INP{E{0{{
        !          1371: {ALOCS{INP{E{0{{
        !          1372: {ALOST{INP{E{0{{
        !          1373: {APNDB{INP{E{2{{
        !          1374: {ARITH{INP{N{3{{
        !          1375: {ASIGN{INP{R{1{{
        !          1376: {ASINP{INP{R{1{{
        !          1377: {BLKLN{INP{E{0{{
        !          1378: {CDGCG{INP{E{0{{
        !          1379: {CDGEX{INP{R{0{{
        !          1380: {CDGNM{INP{R{0{{
        !          1381: {CDGVL{INP{R{0{{
        !          1382: {CDWRD{INP{E{0{{
        !          1383: {CMGEN{INP{R{0{{
        !          1384: {CMPIL{INP{E{0{{
        !          1385: {CNCRD{INP{E{0{{
        !          1386: {COPYB{INP{N{1{{
        !          1387: {DFFNC{INP{E{0{{
        !          1388: {DTACH{INP{E{0{{
        !          1389: {DTYPE{INP{E{0{{
        !          1390: {DUMPR{INP{E{0{{
        !          1391: {ERMSG{INP{E{0{{
        !          1392: {ERTEX{INP{E{0{{
        !          1393: {EVALI{INP{R{4{{
        !          1394: {EVALP{INP{R{1{{
        !          1395: {EVALS{INP{R{3{{
        !          1396: {EVALX{INP{R{1{{
        !          1397: {EXBLD{INP{E{0{{
        !          1398: {EXPAN{INP{E{0{{
        !          1399: {EXPAP{INP{E{1{{
        !          1400: {EXPDM{INP{N{0{{
        !          1401: {EXPOP{INP{N{0{{
        !          1402: {FLSTG{INP{R{0{{
        !          1403: {GBCOL{INP{E{0{{
        !          1404: {GBCPF{INP{E{0{{
        !          1405: {GTARR{INP{E{1{{
        !          1406: {{EJC{{{{
        !          1407: {GTCOD{INP{E{1{{
        !          1408: {GTEXP{INP{E{1{{
        !          1409: {GTINT{INP{E{1{{
        !          1410: {GTNUM{INP{E{1{{
        !          1411: {GTNVR{INP{E{1{{
        !          1412: {GTPAT{INP{E{1{{
        !          1413: {GTREA{INP{E{1{{
        !          1414: {GTSMI{INP{N{2{{
        !          1415: {GTSTG{INP{N{1{{
        !          1416: {GTVAR{INP{E{1{{
        !          1417: {HASHS{INP{E{0{{
        !          1418: {ICBLD{INP{E{0{{
        !          1419: {IDENT{INP{E{1{{
        !          1420: {INOUT{INP{E{0{{
        !          1421: {INSBF{INP{E{2{{
        !          1422: {IOFCB{INP{N{2{{
        !          1423: {IOPPF{INP{N{0{{
        !          1424: {IOPUT{INP{N{6{{
        !          1425: {KTREX{INP{R{0{{
        !          1426: {KWNAM{INP{N{0{{
        !          1427: {LCOMP{INP{N{5{{
        !          1428: {LISTR{INP{E{0{{
        !          1429: {LISTT{INP{E{0{{
        !          1430: {NEXTS{INP{E{0{{
        !          1431: {PATIN{INP{N{2{{
        !          1432: {PATST{INP{N{1{{
        !          1433: {PBILD{INP{E{0{{
        !          1434: {PCONC{INP{E{0{{
        !          1435: {PCOPY{INP{N{0{{
        !          1436: {PRFLR{INP{E{0{{
        !          1437: {PRFLU{INP{E{0{{
        !          1438: {PRPAR{INP{E{0{{
        !          1439: {PRTCH{INP{E{0{{
        !          1440: {PRTIC{INP{E{0{{
        !          1441: {PRTIS{INP{E{0{{
        !          1442: {PRTIN{INP{E{0{{
        !          1443: {PRTMI{INP{E{0{{
        !          1444: {PRTMX{INP{E{0{{
        !          1445: {PRTNL{INP{R{0{{
        !          1446: {PRTNM{INP{R{0{{
        !          1447: {PRTNV{INP{E{0{{
        !          1448: {PRTPG{INP{E{0{{
        !          1449: {PRTPS{INP{E{0{{
        !          1450: {PRTSN{INP{E{0{{
        !          1451: {PRTST{INP{R{0{{
        !          1452: {{EJC{{{{
        !          1453: {PRTTR{INP{E{0{{
        !          1454: {PRTVL{INP{R{0{{
        !          1455: {PRTVN{INP{E{0{{
        !          1456: {RCBLD{INP{E{0{{
        !          1457: {READR{INP{E{0{{
        !          1458: {SBSTR{INP{E{0{{
        !          1459: {SCANE{INP{E{0{{
        !          1460: {SCNGF{INP{E{0{{
        !          1461: {SETVR{INP{E{0{{
        !          1462: {SORTA{INP{N{0{{
        !          1463: {SORTC{INP{E{1{{
        !          1464: {SORTF{INP{E{0{{
        !          1465: {SORTH{INP{E{0{{
        !          1466: {TFIND{INP{E{1{{
        !          1467: {TRACE{INP{N{2{{
        !          1468: {TRBLD{INP{E{0{{
        !          1469: {TRIMR{INP{E{0{{
        !          1470: {TRXEQ{INP{R{0{{
        !          1471: {XSCAN{INP{E{0{{
        !          1472: {XSCNI{INP{N{2{{
        !          1473: *
        !          1474: *      INTRODUCE THE INTERNAL ROUTINES
        !          1475: *
        !          1476: {ARREF{INR{{{{
        !          1477: {CFUNC{INR{{{{
        !          1478: {EXFAL{INR{{{{
        !          1479: {EXINT{INR{{{{
        !          1480: {EXITS{INR{{{{
        !          1481: {EXIXR{INR{{{{
        !          1482: {EXNAM{INR{{{{
        !          1483: {EXNUL{INR{{{{
        !          1484: {EXREA{INR{{{{
        !          1485: {EXSID{INR{{{{
        !          1486: {EXVNM{INR{{{{
        !          1487: {FAILP{INR{{{{
        !          1488: {FLPOP{INR{{{{
        !          1489: {INDIR{INR{{{{
        !          1490: {MATCH{INR{{{{
        !          1491: {RETRN{INR{{{{
        !          1492: {STCOV{INR{{{{
        !          1493: {STMGO{INR{{{{
        !          1494: {STOPR{INR{{{{
        !          1495: {SUCCP{INR{{{{
        !          1496: {SYSAB{INR{{{{
        !          1497: {SYSTU{INR{{{{
        !          1498: {{TTL{S{{{P I T B O L -- DEFINITIONS AND DATA STRUCTURES
        !          1499: {{SEC{{{{START OF DEFINITIONS SECTION
        !          1500: *
        !          1501: *      DEFINITIONS OF MACHINE PARAMETERS
        !          1502: *
        !          1503: *      THE MINIMAL TRANSLATOR SHOULD SUPPLY APPROPRIATE VALUES
        !          1504: *      FOR THE PARTICULAR TARGET MACHINE FOR ALL THE
        !          1505: *      EQU  *
        !          1506: *      DEFINITIONS GIVEN AT THE START OF THIS SECTION.
        !          1507: *
        !          1508: {CFP$A{EQU{*{{{NUMBER OF CHARACTERS IN ALPHABET
        !          1509: *
        !          1510: {CFP$B{EQU{*{{{BYTES/WORD ADDRESSING FACTOR
        !          1511: *
        !          1512: {CFP$C{EQU{*{{{NUMBER OF CHARACTERS PER WORD
        !          1513: *
        !          1514: {CFP$F{EQU{*{{{OFFSET IN BYTES TO CHARS IN
        !          1515: *                            SCBLK. SEE SCBLK FORMAT.
        !          1516: *
        !          1517: {CFP$I{EQU{*{{{NUMBER OF WORDS IN INTEGER CONSTANT
        !          1518: *
        !          1519: {CFP$M{EQU{*{{{MAX POSITIVE INTEGER IN ONE WORD
        !          1520: *
        !          1521: {CFP$N{EQU{*{{{NUMBER OF BITS IN ONE WORD
        !          1522: *
        !          1523: *      THE FOLLOWING DEFINITIONS REQUIRE THE SUPPLY OF EITHER
        !          1524: *      A SINGLE PARAMETER IF REAL ARITHMETIC IS OMITTED OR
        !          1525: *      THREE PARAMETERS IF REAL ARITHMETIC IS INCLUDED.
        !          1526: *
        !          1527: *
        !          1528: {CFP$R{EQU{*{{{NUMBER OF WORDS IN REAL CONSTANT
        !          1529: *
        !          1530: {CFP$S{EQU{*{{{NUMBER OF SIG DIGS FOR REAL OUTPUT
        !          1531: *
        !          1532: {CFP$X{EQU{*{{{MAX DIGITS IN REAL EXPONENT
        !          1533: *
        !          1534: {MXDGS{EQU{CFP$S+CFP$X{{{MAX DIGITS IN REAL NUMBER
        !          1535: *
        !          1536: {NSTMX{EQU{MXDGS+5{{{MAX SPACE FOR REAL (FOR +0.E+)
        !          1537: *
        !          1538: *      THE FOLLOWING DEFINITION FOR CFP$U SUPPLIES A REALISTIC
        !          1539: *      UPPER BOUND ON THE SIZE OF THE ALPHABET.  CFP$U IS USED
        !          1540: *      TO SAVE SPACE IN THE SCANE BSW-IFF-ESW TABLE AND TO EASE
        !          1541: *      TRANSLATION STORAGE REQUIREMENTS.
        !          1542: *
        !          1543: {CFP$U{EQU{*{{{REALISTIC UPPER BOUND ON ALPHABET
        !          1544: {{EJC{{{{
        !          1545: *
        !          1546: *      ENVIRONMENT PARAMETERS
        !          1547: *
        !          1548: *      THE SPITBOL PROGRAM IS ESSENTIALLY INDEPENDENT OF
        !          1549: *      THE DEFINITIONS OF THESE PARAMETERS. HOWEVER, THE
        !          1550: *      EFFICIENCY OF THE SYSTEM MAY BE AFFECTED. CONSEQUENTLY,
        !          1551: *      THESE PARAMETERS MAY REQUIRE TUNING FOR A GIVEN VERSION
        !          1552: *      THE VALUES GIVEN IN COMMENTS HAVE BEEN SUCCESSFULLY USED.
        !          1553: *
        !          1554: *      E$SRS IS THE NUMBER OF WORDS TO RESERVE AT THE END OF
        !          1555: *      STORAGE FOR END OF RUN PROCESSING. IT SHOULD BE
        !          1556: *      SET AS SMALL AS POSSIBLE WITHOUT CAUSING MEMORY OVERFLOW
        !          1557: *      IN CRITICAL SITUATIONS (E.G. MEMORY OVERFLOW TERMINATION)
        !          1558: *      AND SHOULD THUS RESERVE SUFFICIENT SPACE AT LEAST FOR
        !          1559: *      AN SCBLK CONTAINING SAY 30 CHARACTERS.
        !          1560: *
        !          1561: {E$SRS{EQU{*{{{30 WORDS
        !          1562: *
        !          1563: *      E$STS IS THE NUMBER OF WORDS GRABBED IN A CHUNK WHEN
        !          1564: *      STORAGE IS ALLOCATED IN THE STATIC REGION. THE MINIMUM
        !          1565: *      PERMITTED VALUE IS 256/CFP$B. LARGER VALUES WILL LEAD
        !          1566: *      TO INCREASED EFFICIENCY AT THE COST OF WASTING MEMORY.
        !          1567: *
        !          1568: {E$STS{EQU{*{{{500 WORDS
        !          1569: *
        !          1570: *      E$CBS IS THE SIZE OF CODE BLOCK ALLOCATED INITIALLY AND
        !          1571: *      THE EXPANSION INCREMENT IF OVERFLOW OCCURS. IF THIS VALUE
        !          1572: *      IS TOO SMALL OR TOO LARGE, EXCESSIVE GARBAGE COLLECTIONS
        !          1573: *      WILL OCCUR DURING COMPILATION AND MEMORY MAY BE LOST
        !          1574: *      IN THE CASE OF A TOO LARGE VALUE.
        !          1575: *
        !          1576: {E$CBS{EQU{*{{{500 WORDS
        !          1577: *
        !          1578: *      E$HNB IS THE NUMBER OF BUCKET HEADERS IN THE VARIABLE
        !          1579: *      HASH TABLE. IT SHOULD ALWAYS BE ODD. LARGER VALUES WILL
        !          1580: *      SPEED UP COMPILATION AND INDIRECT REFERENCES AT THE
        !          1581: *      EXPENSE OF ADDITIONAL STORAGE FOR THE HASH TABLE ITSELF.
        !          1582: *
        !          1583: {E$HNB{EQU{*{{{127 BUCKET HEADERS
        !          1584: *
        !          1585: *      E$HNW IS THE MAXIMUM NUMBER OF WORDS OF A STRING
        !          1586: *      NAME WHICH PARTICIPATE IN THE STRING HASH ALGORITHM.
        !          1587: *      LARGER VALUES GIVE A BETTER HASH AT THE EXPENSE OF TAKING
        !          1588: *      LONGER TO COMPUTE THE HASH. THERE IS SOME OPTIMAL VALUE.
        !          1589: *
        !          1590: {E$HNW{EQU{*{{{6 WORDS
        !          1591: *
        !          1592: *      E$FSP .  IF THE AMOUNT OF FREE SPACE LEFT AFTER A GARBAGE
        !          1593: *      COLLECTION IS SMALL COMPARED TO THE TOTAL AMOUNT OF SPACE
        !          1594: *      IN USE GARBAGE COLLECTOR THRASHING IS LIKELY TO OCCUR AS
        !          1595: *      THIS SPACE IS USED UP.  E$FSP IS A MEASURE OF THE
        !          1596: *      MINIMUM PERCENTAGE OF DYNAMIC MEMORY LEFT AS FREE SPACE
        !          1597: *      BEFORE THE SYSTEM ROUTINE SYSMM IS CALLED TO TRY TO
        !          1598: *      OBTAIN MORE MEMORY.
        !          1599: *
        !          1600: {E$FSP{EQU{*{{{15 PERCENT
        !          1601: {{EJC{{{{
        !          1602: *
        !          1603: *      DEFINITIONS OF CODES FOR LETTERS
        !          1604: *
        !          1605: {CH$LA{EQU{*{{{LETTER A
        !          1606: {CH$LB{EQU{*{{{LETTER B
        !          1607: {CH$LC{EQU{*{{{LETTER C
        !          1608: {CH$LD{EQU{*{{{LETTER D
        !          1609: {CH$LE{EQU{*{{{LETTER E
        !          1610: {CH$LF{EQU{*{{{LETTER F
        !          1611: {CH$LG{EQU{*{{{LETTER G
        !          1612: {CH$LH{EQU{*{{{LETTER H
        !          1613: {CH$LI{EQU{*{{{LETTER I
        !          1614: {CH$LJ{EQU{*{{{LETTER J
        !          1615: {CH$LK{EQU{*{{{LETTER K
        !          1616: {CH$LL{EQU{*{{{LETTER L
        !          1617: {CH$LM{EQU{*{{{LETTER M
        !          1618: {CH$LN{EQU{*{{{LETTER N
        !          1619: {CH$LO{EQU{*{{{LETTER O
        !          1620: {CH$LP{EQU{*{{{LETTER P
        !          1621: {CH$LQ{EQU{*{{{LETTER Q
        !          1622: {CH$LR{EQU{*{{{LETTER R
        !          1623: {CH$LS{EQU{*{{{LETTER S
        !          1624: {CH$LT{EQU{*{{{LETTER T
        !          1625: {CH$LU{EQU{*{{{LETTER U
        !          1626: {CH$LV{EQU{*{{{LETTER V
        !          1627: {CH$LW{EQU{*{{{LETTER W
        !          1628: {CH$LX{EQU{*{{{LETTER X
        !          1629: {CH$LY{EQU{*{{{LETTER Y
        !          1630: {CH$L${EQU{*{{{LETTER Z
        !          1631: *
        !          1632: *      DEFINITIONS OF CODES FOR DIGITS
        !          1633: *
        !          1634: {CH$D0{EQU{*{{{DIGIT 0
        !          1635: {CH$D1{EQU{*{{{DIGIT 1
        !          1636: {CH$D2{EQU{*{{{DIGIT 2
        !          1637: {CH$D3{EQU{*{{{DIGIT 3
        !          1638: {CH$D4{EQU{*{{{DIGIT 4
        !          1639: {CH$D5{EQU{*{{{DIGIT 5
        !          1640: {CH$D6{EQU{*{{{DIGIT 6
        !          1641: {CH$D7{EQU{*{{{DIGIT 7
        !          1642: {CH$D8{EQU{*{{{DIGIT 8
        !          1643: {CH$D9{EQU{*{{{DIGIT 9
        !          1644: {{EJC{{{{
        !          1645: *
        !          1646: *      DEFINITIONS OF CODES FOR SPECIAL CHARACTERS
        !          1647: *
        !          1648: *      THE NAMES OF THESE CHARACTERS ARE RELATED TO THEIR
        !          1649: *      ORIGINAL REPRESENTATION IN THE EBCDIC SET CORRESPONDING
        !          1650: *      TO THE DESCRIPTION IN STANDARD SNOBOL4 MANUALS AND TEXTS.
        !          1651: *
        !          1652: {CH$AM{EQU{*{{{KEYWORD OPERATOR (AMPERSAND)
        !          1653: {CH$AS{EQU{*{{{MULTIPLICATION SYMBOL (ASTERISK)
        !          1654: {CH$AT{EQU{*{{{CURSOR POSITION OPERATOR (AT)
        !          1655: {CH$BB{EQU{*{{{LEFT ARRAY BRACKET (LESS THAN)
        !          1656: {CH$BL{EQU{*{{{BLANK
        !          1657: {CH$BR{EQU{*{{{ALTERNATION OPERATOR (VERTICAL BAR)
        !          1658: {CH$CL{EQU{*{{{GOTO SYMBOL (COLON)
        !          1659: {CH$CM{EQU{*{{{COMMA
        !          1660: {CH$DL{EQU{*{{{INDIRECTION OPERATOR (DOLLAR)
        !          1661: {CH$DT{EQU{*{{{NAME OPERATOR (DOT)
        !          1662: {CH$DQ{EQU{*{{{DOUBLE QUOTE
        !          1663: {CH$EQ{EQU{*{{{EQUAL SIGN
        !          1664: {CH$EX{EQU{*{{{EXPONENTIATION OPERATOR (EXCLM)
        !          1665: {CH$MN{EQU{*{{{MINUS SIGN
        !          1666: {CH$NM{EQU{*{{{NUMBER SIGN
        !          1667: {CH$NT{EQU{*{{{NEGATION OPERATOR (NOT)
        !          1668: {CH$PC{EQU{*{{{PERCENT
        !          1669: {CH$PL{EQU{*{{{PLUS SIGN
        !          1670: {CH$PP{EQU{*{{{LEFT PARENTHESIS
        !          1671: {CH$RB{EQU{*{{{RIGHT ARRAY BRACKET (GRTR THAN)
        !          1672: {CH$RP{EQU{*{{{RIGHT PARENTHESIS
        !          1673: {CH$QU{EQU{*{{{INTERROGATION OPERATOR (QUESTION)
        !          1674: {CH$SL{EQU{*{{{SLASH
        !          1675: {CH$SM{EQU{*{{{SEMICOLON
        !          1676: {CH$SQ{EQU{*{{{SINGLE QUOTE
        !          1677: {CH$UN{EQU{*{{{SPECIAL IDENTIFIER CHAR (UNDERLINE)
        !          1678: {CH$OB{EQU{*{{{OPENING BRACKET
        !          1679: {CH$CB{EQU{*{{{CLOSING BRACKET
        !          1680: {{EJC{{{{
        !          1681: *
        !          1682: *      REMAINING CHARS ARE OPTIONAL ADDITIONS TO THE STANDARDS.
        !          1683: *
        !          1684: *      TAB CHARACTERS - SYNTACTICALLY EQUIVALENT TO BLANK
        !          1685: *
        !          1686: {CH$HT{EQU{*{{{HORIZONTAL TAB
        !          1687: *
        !          1688: *      LOWER CASE OR SHIFTED CASE ALPHABETIC CHARS
        !          1689: *
        !          1690: {CH$$A{EQU{*{{{SHIFTED A
        !          1691: {CH$$B{EQU{*{{{SHIFTED B
        !          1692: {CH$$C{EQU{*{{{SHIFTED C
        !          1693: {CH$$D{EQU{*{{{SHIFTED D
        !          1694: {CH$$E{EQU{*{{{SHIFTED E
        !          1695: {CH$$F{EQU{*{{{SHIFTED F
        !          1696: {CH$$G{EQU{*{{{SHIFTED G
        !          1697: {CH$$H{EQU{*{{{SHIFTED H
        !          1698: {CH$$I{EQU{*{{{SHIFTED I
        !          1699: {CH$$J{EQU{*{{{SHIFTED J
        !          1700: {CH$$K{EQU{*{{{SHIFTED K
        !          1701: {CH$$L{EQU{*{{{SHIFTED L
        !          1702: {CH$$M{EQU{*{{{SHIFTED M
        !          1703: {CH$$N{EQU{*{{{SHIFTED N
        !          1704: {CH$$O{EQU{*{{{SHIFTED O
        !          1705: {CH$$P{EQU{*{{{SHIFTED P
        !          1706: {CH$$Q{EQU{*{{{SHIFTED Q
        !          1707: {CH$$R{EQU{*{{{SHIFTED R
        !          1708: {CH$$S{EQU{*{{{SHIFTED S
        !          1709: {CH$$T{EQU{*{{{SHIFTED T
        !          1710: {CH$$U{EQU{*{{{SHIFTED U
        !          1711: {CH$$V{EQU{*{{{SHIFTED V
        !          1712: {CH$$W{EQU{*{{{SHIFTED W
        !          1713: {CH$$X{EQU{*{{{SHIFTED X
        !          1714: {CH$$Y{EQU{*{{{SHIFTED Y
        !          1715: {CH$$${EQU{*{{{SHIFTED Z
        !          1716: *      IF A DELIMITER OTHER THAN CH$CM MUST BE USED IN
        !          1717: *      THE THIRD ARGUMENT OF INPUT(),OUTPUT() THEN .CIOD SHOULD
        !          1718: *      BE DEFINED AND A PARAMETER SUPPLIED FOR IODEL.
        !          1719: *
        !          1720: {IODEL{EQU{*{{{
        !          1721: {{EJC{{{{
        !          1722: *
        !          1723: *      DATA BLOCK FORMATS AND DEFINITIONS
        !          1724: *
        !          1725: *      THE FOLLOWING SECTIONS DESCRIBE THE DETAILED FORMAT OF
        !          1726: *      ALL POSSIBLE DATA BLOCKS IN STATIC AND DYNAMIC MEMORY.
        !          1727: *
        !          1728: *      EVERY BLOCK HAS A NAME OF THE FORM XXBLK WHERE XX IS A
        !          1729: *      UNIQUE TWO CHARACTER IDENTIFIER. THE FIRST WORD OF EVERY
        !          1730: *      BLOCK MUST CONTAIN A POINTER TO A PROGRAM LOCATION IN THE
        !          1731: *      INTERPRETOR WHICH IS IMMEDIATELY PRECEDED BY AN ADDRESS
        !          1732: *      CONSTANT CONTAINING THE VALUE BL$XX WHERE XX IS THE BLOCK
        !          1733: *      IDENTIFIER. THIS PROVIDES A UNIFORM MECHANISM FOR
        !          1734: *      DISTINGUISHING BETWEEN THE VARIOUS BLOCK TYPES.
        !          1735: *
        !          1736: *      IN SOME CASES, THE CONTENTS OF THE FIRST WORD IS CONSTANT
        !          1737: *      FOR A GIVEN BLOCK TYPE AND MERELY SERVES AS A POINTER
        !          1738: *      TO THE IDENTIFYING ADDRESS CONSTANT. HOWEVER, IN OTHER
        !          1739: *      CASES THERE ARE SEVERAL POSSIBILITIES FOR THE FIRST
        !          1740: *      WORD IN WHICH CASE EACH OF THE SEVERAL PROGRAM ENTRY
        !          1741: *      POINTS MUST BE PRECEDED BY THE APPROPRIATE CONSTANT.
        !          1742: *
        !          1743: *      IN EACH BLOCK, SOME OF THE FIELDS ARE RELOCATABLE. THIS
        !          1744: *      MEANS THAT THEY MAY CONTAIN A POINTER TO ANOTHER BLOCK
        !          1745: *      IN THE DYNAMIC AREA. (TO BE MORE PRECISE, IF THEY CONTAIN
        !          1746: *      A POINTER WITHIN THE DYNAMIC AREA, THEN IT IS A POINTER
        !          1747: *      TO A BLOCK). SUCH FIELDS MUST BE MODIFIED BY THE GARBAGE
        !          1748: *      COLLECTOR (PROCEDURE GBCOL) WHENEVER BLOCKS ARE COMPACTED
        !          1749: *      IN THE DYNAMIC REGION. THE GARBAGE COLLECTOR (ACTUALLY
        !          1750: *      PROCEDURE GBCPF) REQUIRES THAT ALL SUCH RELOCATABLE
        !          1751: *      FIELDS IN A BLOCK MUST BE CONTIGUOUS.
        !          1752: {{EJC{{{{
        !          1753: *
        !          1754: *      THE DESCRIPTION FORMAT USES THE FOLLOWING SCHEME.
        !          1755: *
        !          1756: *      1)   BLOCK TITLE AND TWO CHARACTER IDENTIFIER
        !          1757: *
        !          1758: *      2)   DESCRIPTION OF BASIC USE OF BLOCK AND INDICATION
        !          1759: *           OF CIRCUMSTANCES UNDER WHICH IT IS CONSTRUCTED.
        !          1760: *
        !          1761: *      3)   PICTURE OF THE BLOCK FORMAT. IN THESE PICTURES LOW
        !          1762: *           MEMORY ADDRESSES ARE AT THE TOP OF THE PAGE. FIXED
        !          1763: *           LENGTH FIELDS ARE SURROUNDED BY I (LETTER I). FIELDS
        !          1764: *           WHICH ARE FIXED LENGTH BUT WHOSE LENGTH IS DEPENDENT
        !          1765: *           ON A CONFIGURATION PARAMETER ARE SURROUNDED BY *
        !          1766: *           (ASTERISK). VARIABLE LENGTH FIELDS ARE SURROUNDED
        !          1767: *           BY / (SLASH).
        !          1768: *
        !          1769: *      4)   DEFINITION OF SYMBOLIC OFFSETS TO FIELDS IN
        !          1770: *           BLOCK AND OF THE SIZE OF THE BLOCK IF FIXED LENGTH
        !          1771: *           OR OF THE SIZE OF THE FIXED LENGTH FIELDS IF THE
        !          1772: *           BLOCK IS VARIABLE LENGTH.
        !          1773: *           NOTE THAT SOME ROUTINES SUCH AS GBCPF ASSUME
        !          1774: *           CERTAIN OFFSETS ARE EQUAL. THE DEFINITIONS
        !          1775: *           GIVEN HERE ENFORCE THIS.  MAKE CHANGES TO
        !          1776: *           THEM ONLY WITH DUE CARE.
        !          1777: *
        !          1778: *      DEFINITIONS OF COMMON OFFSETS
        !          1779: *
        !          1780: {OFFS1{EQU{1{{{
        !          1781: {OFFS2{EQU{2{{{
        !          1782: {OFFS3{EQU{3{{{
        !          1783: *
        !          1784: *      5)   DETAILED COMMENTS ON THE SIGNIFICANCE AND FORMATS
        !          1785: *           OF THE VARIOUS FIELDS.
        !          1786: *
        !          1787: *      THE ORDER IS ALPHABETICAL BY IDENTIFICATION CODE.
        !          1788: {{EJC{{{{
        !          1789: *
        !          1790: *      DEFINITIONS OF BLOCK CODES
        !          1791: *
        !          1792: *      THIS TABLE PROVIDES A UNIQUE IDENTIFICATION CODE FOR
        !          1793: *      EACH SEPARATE BLOCK TYPE. THE FIRST WORD OF A BLOCK IN
        !          1794: *      THE DYNAMIC AREA ALWAYS CONTAINS THE ADDRESS OF A PROGRAM
        !          1795: *      ENTRY POINT. THE BLOCK CODE IS USED AS THE ENTRY POINT ID
        !          1796: *      THE ORDER OF THESE CODES DICTATES THE ORDER OF THE TABLE
        !          1797: *      USED BY THE DATATYPE FUNCTION (SCNMT IN THE CONSTANT SEC)
        !          1798: *
        !          1799: *      BLOCK CODES FOR ACCESSIBLE DATATYPES
        !          1800: *
        !          1801: {BL$AR{EQU{0{{{ARBLK     ARRAY
        !          1802: {BL$BC{EQU{BL$AR+1{{{BCBLK     BUFFER
        !          1803: {BL$CD{EQU{BL$BC+1{{{CDBLK     CODE
        !          1804: {BL$EX{EQU{BL$CD+1{{{EXBLK     EXPRESSION
        !          1805: {BL$IC{EQU{BL$EX+1{{{ICBLK     INTEGER
        !          1806: {BL$NM{EQU{BL$IC+1{{{NMBLK     NAME
        !          1807: {BL$P0{EQU{BL$NM+1{{{P0BLK     PATTERN
        !          1808: {BL$P1{EQU{BL$P0+1{{{P1BLK     PATTERN
        !          1809: {BL$P2{EQU{BL$P1+1{{{P2BLK     PATTERN
        !          1810: {BL$RC{EQU{BL$P2+1{{{RCBLK     REAL
        !          1811: {BL$SC{EQU{BL$RC+1{{{SCBLK     STRING
        !          1812: {BL$SE{EQU{BL$SC+1{{{SEBLK     EXPRESSION
        !          1813: {BL$TB{EQU{BL$SE+1{{{TBBLK     TABLE
        !          1814: {BL$VC{EQU{BL$TB+1{{{VCBLK     ARRAY
        !          1815: {BL$XN{EQU{BL$VC+1{{{XNBLK     EXTERNAL
        !          1816: {BL$XR{EQU{BL$XN+1{{{XRBLK     EXTERNAL
        !          1817: {BL$PD{EQU{BL$XR+1{{{PDBLK     PROGRAM DEFINED DATATYPE
        !          1818: *
        !          1819: {BL$$D{EQU{BL$PD+1{{{NUMBER OF BLOCK CODES FOR DATA
        !          1820: *
        !          1821: *      OTHER BLOCK CODES
        !          1822: *
        !          1823: {BL$TR{EQU{BL$PD+1{{{TRBLK
        !          1824: {BL$BF{EQU{BL$TR+1{{{BFBLK
        !          1825: {BL$CC{EQU{BL$BF+1{{{CCBLK
        !          1826: {BL$CM{EQU{BL$CC+1{{{CMBLK
        !          1827: {BL$CT{EQU{BL$CM+1{{{CTBLK
        !          1828: {BL$DF{EQU{BL$CT+1{{{DFBLK
        !          1829: {BL$EF{EQU{BL$DF+1{{{EFBLK
        !          1830: {BL$EV{EQU{BL$EF+1{{{EVBLK
        !          1831: {BL$FF{EQU{BL$EV+1{{{FFBLK
        !          1832: {BL$KV{EQU{BL$FF+1{{{KVBLK
        !          1833: {BL$PF{EQU{BL$KV+1{{{PFBLK
        !          1834: {BL$TE{EQU{BL$PF+1{{{TEBLK
        !          1835: *
        !          1836: {BL$$I{EQU{0{{{DEFAULT IDENTIFICATION CODE
        !          1837: {BL$$T{EQU{BL$TR+1{{{CODE FOR DATA OR TRACE BLOCK
        !          1838: {BL$$${EQU{BL$TE+1{{{NUMBER OF BLOCK CODES
        !          1839: {{EJC{{{{
        !          1840: *
        !          1841: *      FIELD REFERENCES
        !          1842: *
        !          1843: *      REFERENCES TO THE FIELDS OF DATA BLOCKS ARE SYMBOLIC
        !          1844: *      (I.E. USE THE SYMBOLIC OFFSETS) WITH THE FOLLOWING
        !          1845: *      EXCEPTIONS.
        !          1846: *
        !          1847: *      1)   REFERENCES TO THE FIRST WORD ARE USUALLY NOT
        !          1848: *           SYMBOLIC SINCE THEY USE THE (X) OPERAND FORMAT.
        !          1849: *
        !          1850: *      2)   THE CODE WHICH CONSTRUCTS A BLOCK IS OFTEN NOT
        !          1851: *           SYMBOLIC AND SHOULD BE CHANGED IF THE CORRESPONDING
        !          1852: *           BLOCK FORMAT IS MODIFIED.
        !          1853: *
        !          1854: *      3)   THE PLC AND PSC INSTRUCTIONS IMPLY AN OFFSET
        !          1855: *           CORRESPONDING TO THE DEFINITION OF CFP$F.
        !          1856: *
        !          1857: *      4)   THERE ARE NON-SYMBOLIC REFERENCES (EASILY CHANGED)
        !          1858: *           IN THE GARBAGE COLLECTOR (PROCEDURES GBCPF, BLKLN).
        !          1859: *
        !          1860: *      5)   THE FIELDS IDVAL, FARGS APPEAR IN SEVERAL BLOCKS
        !          1861: *           AND ANY CHANGES MUST BE MADE IN PARALLEL TO ALL
        !          1862: *           BLOCKS CONTAINING THE FIELDS. THE ACTUAL REFERENCES
        !          1863: *           TO THESE FIELDS ARE SYMBOLIC WITH THE ABOVE
        !          1864: *           LISTED EXCEPTIONS.
        !          1865: *
        !          1866: *      6)   SEVERAL SPOTS IN THE CODE ASSUME THAT THE
        !          1867: *           DEFINITIONS OF THE FIELDS VRVAL, TEVAL, TRNXT ARE
        !          1868: *           THE SAME (THESE ARE SECTIONS OF CODE WHICH SEARCH
        !          1869: *           OUT ALONG A TRBLK CHAIN FROM A VARIABLE).
        !          1870: *
        !          1871: *      7)   REFERENCES TO THE FIELDS OF AN ARRAY BLOCK IN THE
        !          1872: *           ARRAY REFERENCE ROUTINE ARREF ARE NON-SYMBOLIC.
        !          1873: *
        !          1874: *      APART FROM THE EXCEPTIONS LISTED, REFERENCES ARE SYMBOLIC
        !          1875: *      AS FAR AS POSSIBLE AND MODIFYING THE ORDER OR NUMBER
        !          1876: *      OF FIELDS WILL NOT REQUIRE CHANGES.
        !          1877: {{EJC{{{{
        !          1878: *
        !          1879: *      COMMON FIELDS FOR FUNCTION BLOCKS
        !          1880: *
        !          1881: *      BLOCKS WHICH REPRESENT CALLABLE FUNCTIONS HAVE TWO
        !          1882: *      COMMON FIELDS AT THE START OF THE BLOCK AS FOLLOWS.
        !          1883: *
        !          1884: *           +------------------------------------+
        !          1885: *           I                FCODE               I
        !          1886: *           +------------------------------------+
        !          1887: *           I                FARGS               I
        !          1888: *           +------------------------------------+
        !          1889: *           /                                    /
        !          1890: *           /       REST OF FUNCTION BLOCK       /
        !          1891: *           /                                    /
        !          1892: *           +------------------------------------+
        !          1893: *
        !          1894: {FCODE{EQU{0{{{POINTER TO CODE FOR FUNCTION
        !          1895: {FARGS{EQU{1{{{NUMBER OF ARGUMENTS
        !          1896: *
        !          1897: *      FCODE IS A POINTER TO THE LOCATION IN THE INTERPRETOR
        !          1898: *      PROGRAM WHICH PROCESSES THIS TYPE OF FUNCTION CALL.
        !          1899: *
        !          1900: *      FARGS IS THE EXPECTED NUMBER OF ARGUMENTS. THE ACTUAL
        !          1901: *      NUMBER OF ARGUMENTS IS ADJUSTED TO THIS AMOUNT BY
        !          1902: *      DELETING EXTRA ARGUMENTS OR SUPPLYING TRAILING NULLS
        !          1903: *      FOR MISSING ONES BEFORE TRANSFERRING THOUGH FCODE.
        !          1904: *      A VALUE OF 999 MAY BE USED IN THIS FIELD TO INDICATE A
        !          1905: *      VARIABLE NUMBER OF ARGUMENTS (SEE SVBLK FIELD SVNAR).
        !          1906: *
        !          1907: *      THE BLOCK TYPES WHICH FOLLOW THIS SCHEME ARE.
        !          1908: *
        !          1909: *      FFBLK                 FIELD FUNCTION
        !          1910: *      DFBLK                 DATATYPE FUNCTION
        !          1911: *      PFBLK                 PROGRAM DEFINED FUNCTION
        !          1912: *      EFBLK                 EXTERNAL LOADED FUNCTION
        !          1913: {{EJC{{{{
        !          1914: *
        !          1915: *      IDENTIFICATION FIELD
        !          1916: *
        !          1917: *
        !          1918: *      ID   FIELD
        !          1919: *
        !          1920: *      CERTAIN PROGRAM ACCESSIBLE OBJECTS (THOSE WHICH CONTAIN
        !          1921: *      OTHER DATA VALUES AND CAN BE COPIED) ARE GIVEN A UNIQUE
        !          1922: *      IDENTIFICATION NUMBER (SEE EXSID). THIS ID VALUE IS AN
        !          1923: *      ADDRESS INTEGER VALUE WHICH IS ALWAYS STORED IN WORD TWO.
        !          1924: *
        !          1925: {IDVAL{EQU{1{{{ID VALUE FIELD
        !          1926: *
        !          1927: *      THE BLOCKS CONTAINING AN IDVAL FIELD ARE.
        !          1928: *
        !          1929: *      ARBLK                 ARRAY
        !          1930: *      BCBLK                 BUFFER CONTROL BLOCK
        !          1931: *      PDBLK                 PROGRAM DEFINED DATATYPE
        !          1932: *      TBBLK                 TABLE
        !          1933: *      VCBLK                 VECTOR BLOCK (ARRAY)
        !          1934: *
        !          1935: *      NOTE THAT A ZERO IDVAL MEANS THAT THE BLOCK IS ONLY
        !          1936: *      HALF BUILT AND SHOULD NOT BE DUMPED (SEE DUMPR).
        !          1937: {{EJC{{{{
        !          1938: *
        !          1939: *      ARRAY BLOCK (ARBLK)
        !          1940: *
        !          1941: *      AN ARRAY BLOCK REPRESENTS AN ARRAY VALUE OTHER THAN ONE
        !          1942: *      WITH ONE DIMENSION WHOSE LOWER BOUND IS ONE (SEE VCBLK).
        !          1943: *      AN ARBLK IS BUILT WITH A CALL TO THE FUNCTIONS CONVERT
        !          1944: *      (S$CNV) OR ARRAY (S$ARR).
        !          1945: *
        !          1946: *           +------------------------------------+
        !          1947: *           I                ARTYP               I
        !          1948: *           +------------------------------------+
        !          1949: *           I                IDVAL               I
        !          1950: *           +------------------------------------+
        !          1951: *           I                ARLEN               I
        !          1952: *           +------------------------------------+
        !          1953: *           I                AROFS               I
        !          1954: *           +------------------------------------+
        !          1955: *           I                ARNDM               I
        !          1956: *           +------------------------------------+
        !          1957: *           *                ARLBD               *
        !          1958: *           +------------------------------------+
        !          1959: *           *                ARDIM               *
        !          1960: *           +------------------------------------+
        !          1961: *           *                                    *
        !          1962: *           * ABOVE 2 FLDS REPEATED FOR EACH DIM *
        !          1963: *           *                                    *
        !          1964: *           +------------------------------------+
        !          1965: *           I                ARPRO               I
        !          1966: *           +------------------------------------+
        !          1967: *           /                                    /
        !          1968: *           /                ARVLS               /
        !          1969: *           /                                    /
        !          1970: *           +------------------------------------+
        !          1971: {{EJC{{{{
        !          1972: *
        !          1973: *      ARRAY BLOCK (CONTINUED)
        !          1974: *
        !          1975: {ARTYP{EQU{0{{{POINTER TO DUMMY ROUTINE B$ART
        !          1976: {ARLEN{EQU{IDVAL+1{{{LENGTH OF ARBLK IN BYTES
        !          1977: {AROFS{EQU{ARLEN+1{{{OFFSET IN ARBLK TO ARPRO FIELD
        !          1978: {ARNDM{EQU{AROFS+1{{{NUMBER OF DIMENSIONS
        !          1979: {ARLBD{EQU{ARNDM+1{{{LOW BOUND (FIRST SUBSCRIPT)
        !          1980: {ARDIM{EQU{ARLBD+CFP$I{{{DIMENSION (FIRST SUBSCRIPT)
        !          1981: {ARLB2{EQU{ARDIM+CFP$I{{{LOW BOUND (SECOND SUBSCRIPT)
        !          1982: {ARDM2{EQU{ARLB2+CFP$I{{{DIMENSION (SECOND SUBSCRIPT)
        !          1983: {ARPRO{EQU{ARDIM+CFP$I{{{ARRAY PROTOTYPE (ONE DIMENSION)
        !          1984: {ARVLS{EQU{ARPRO+1{{{START OF VALUES (ONE DIMENSION)
        !          1985: {ARPR2{EQU{ARDM2+CFP$I{{{ARRAY PROTOTYPE (TWO DIMENSIONS)
        !          1986: {ARVL2{EQU{ARPR2+1{{{START OF VALUES (TWO DIMENSIONS)
        !          1987: {ARSI${EQU{ARLBD{{{NUMBER OF STANDARD FIELDS IN BLOCK
        !          1988: {ARDMS{EQU{ARLB2-ARLBD{{{SIZE OF INFO FOR ONE SET OF BOUNDS
        !          1989: *
        !          1990: *      THE BOUNDS AND DIMENSION FIELDS ARE SIGNED INTEGER
        !          1991: *      VALUES AND EACH OCCUPY CFP$I WORDS IN THE ARBLK.
        !          1992: *
        !          1993: *      THE LENGTH OF AN ARBLK IN BYTES MAY NOT EXCEED MXLEN.
        !          1994: *      THIS IS REQUIRED TO KEEP NAME OFFSETS GARBAGE COLLECTABLE
        !          1995: *
        !          1996: *      THE ACTUAL VALUES ARE ARRANGED IN ROW-WISE ORDER AND
        !          1997: *      CAN CONTAIN A DATA POINTER OR A POINTER TO A TRBLK.
        !          1998: *
        !          1999: *      BUFFER CONTROL BLOCK (BCBLK)
        !          2000: *
        !          2001: *      A BCBLK IS BUILT FOR EVERY BFBLK.
        !          2002: *
        !          2003: *           +------------------------------------+
        !          2004: *           I                BCTYP               I
        !          2005: *           +------------------------------------+
        !          2006: *           I                IDVAL               I
        !          2007: *           +------------------------------------+
        !          2008: *           I                BCLEN               I
        !          2009: *           +------------------------------------+
        !          2010: *           I                BCBUF               I
        !          2011: *           +------------------------------------+
        !          2012: *
        !          2013: {BCTYP{EQU{0{{{PTR TO DUMMY ROUTINE B$BCT
        !          2014: {BCLEN{EQU{IDVAL+1{{{DEFINED BUFFER LENGTH
        !          2015: {BCBUF{EQU{BCLEN+1{{{PTR TO BFBLK
        !          2016: {BCSI${EQU{BCBUF+1{{{SIZE OF BCBLK
        !          2017: *
        !          2018: *      A BCBLK IS AN INDIRECT CONTROL HEADER FOR BFBLK.
        !          2019: *      THE REASON FOR NOT STORING THIS DATA DIRECTLY
        !          2020: *      IN THE RELATED BFBLK IS SO THAT THE BFBLK CAN
        !          2021: *      MAINTAIN THE SAME SKELETAL STRUCTURE AS AN SCBLK
        !          2022: *      THUS FACILITATING TRANSPARENT STRING OPERATIONS
        !          2023: *      (FOR THE MOST PART).  SPECIFICALLY, CFP$F IS THE
        !          2024: *      SAME FOR A BFBLK AS FOR AN SCBLK.  BY CONVENTION,
        !          2025: *      WHEREEVER A BUFFER VALUE IS EMPLOYED, THE BCBLK
        !          2026: *      IS POINTED TO.
        !          2027: *
        !          2028: *      THE CORRESPONDING BFBLK IS POINTED TO BY THE
        !          2029: *      BCBUF POINTER IN THE BCBLK.
        !          2030: *
        !          2031: *      BCLEN IS THE CURRENT DEFINED SIZE OF THE CHARACTER
        !          2032: *      ARRAY IN THE BFBLK.  CHARACTERS FOLLOWING THE OFFSET
        !          2033: *      OF BCLEN ARE UNDEFINED.
        !          2034: *
        !          2035: {{EJC{{{{
        !          2036: *
        !          2037: *      STRING BUFFER BLOCK (BFBLK)
        !          2038: *
        !          2039: *      A BFBLK IS BUILT BY A CALL TO BUFFER(...)
        !          2040: *
        !          2041: *           +------------------------------------+
        !          2042: *           I                BFTYP               I
        !          2043: *           +------------------------------------+
        !          2044: *           I                BFALC               I
        !          2045: *           +------------------------------------+
        !          2046: *           /                                    /
        !          2047: *           /                BFCHR               /
        !          2048: *           /                                    /
        !          2049: *           +------------------------------------+
        !          2050: *
        !          2051: {BFTYP{EQU{0{{{PTR TO DUMMY ROUTINE B$BFT
        !          2052: {BFALC{EQU{BFTYP+1{{{ALLOCATED SIZE OF BUFFER
        !          2053: {BFCHR{EQU{BFALC+1{{{CHARACTERS OF STRING
        !          2054: {BFSI${EQU{BFCHR{{{SIZE OF STANDARD FIELDS IN BFBLK
        !          2055: *
        !          2056: *      THE CHARACTERS IN THE BUFFER ARE STORED LEFT JUSTIFIED.
        !          2057: *      THE FINAL WORD OF DEFINED CHARACTERS IS ALWAYS ZERO
        !          2058: *      (CHARACTER) PADDED.  ANY TRAILING ALLOCATION PAST THE
        !          2059: *      WORD CONTAINING THE LAST CHARACTER CONTAINS
        !          2060: *      UNPREDICTABLE CONTENTS AND IS NEVER REFERENCED.
        !          2061: *
        !          2062: *      NOTE THAT THE OFFSET TO THE CHARACTERS OF THE STRING
        !          2063: *      IS GIVEN BY CFP$F, AS WITH AN SCBLK.  HOWEVER, THE
        !          2064: *      OFFSET WHICH IS OCCUPIED BY THE LENGTH FOR AN SCBLK
        !          2065: *      IS THE TOTAL CHAR SPACE FOR BFBLKS, AND ROUTINES WHICH
        !          2066: *      DEAL WITH BOTH MUST ACCOUNT FOR THIS DIFFERENCE.
        !          2067: *
        !          2068: *      THE VALUE OF BFALC MAY NOT EXCEED MXLEN.  THE VALUE OF
        !          2069: *      BCLEN IS ALWAYS LESS THAN OR EQUAL TO BFALC.
        !          2070: *
        !          2071: {{EJC{{{{
        !          2072: *
        !          2073: *      CODE CONSTRUCTION BLOCK (CCBLK)
        !          2074: *
        !          2075: *      AT ANY ONE MOMENT THERE IS AT MOST ONE CCBLK INTO
        !          2076: *      WHICH THE COMPILER IS CURRENTLY STORING CODE (CDWRD).
        !          2077: *
        !          2078: *           +------------------------------------+
        !          2079: *           I                CCTYP               I
        !          2080: *           +------------------------------------+
        !          2081: *           I                CCLEN               I
        !          2082: *           +------------------------------------+
        !          2083: *           I                CCUSE               I
        !          2084: *           +------------------------------------+
        !          2085: *           /                                    /
        !          2086: *           /                CCCOD               /
        !          2087: *           /                                    /
        !          2088: *           +------------------------------------+
        !          2089: *
        !          2090: {CCTYP{EQU{0{{{POINTER TO DUMMY ROUTINE B$CCT
        !          2091: {CCLEN{EQU{CCTYP+1{{{LENGTH OF CCBLK IN BYTES
        !          2092: {CCUSE{EQU{CCLEN+1{{{OFFSET PAST LAST USED WORD (BYTES)
        !          2093: {CCCOD{EQU{CCUSE+1{{{START OF GENERATED CODE IN BLOCK
        !          2094: *
        !          2095: *      THE REASON THAT THE CCBLK IS A SEPARATE BLOCK TYPE FROM
        !          2096: *      THE USUAL CDBLK IS THAT THE GARBAGE COLLECTOR MUST
        !          2097: *      ONLY PROCESS THOSE FIELDS WHICH HAVE BEEN SET (SEE GBCPF)
        !          2098: {{EJC{{{{
        !          2099: *
        !          2100: *      CODE BLOCK (CDBLK)
        !          2101: *
        !          2102: *      A CODE BLOCK IS BUILT FOR EACH STATEMENT COMPILED DURING
        !          2103: *      THE INITIAL COMPILATION OR BY SUBSEQUENT CALLS TO CODE.
        !          2104: *
        !          2105: *           +------------------------------------+
        !          2106: *           I                CDJMP               I
        !          2107: *           +------------------------------------+
        !          2108: *           I                CDSTM               I
        !          2109: *           +------------------------------------+
        !          2110: *           I                CDLEN               I
        !          2111: *           +------------------------------------+
        !          2112: *           I                CDFAL               I
        !          2113: *           +------------------------------------+
        !          2114: *           /                                    /
        !          2115: *           /                CDCOD               /
        !          2116: *           /                                    /
        !          2117: *           +------------------------------------+
        !          2118: *
        !          2119: {CDJMP{EQU{0{{{PTR TO ROUTINE TO EXECUTE STATEMENT
        !          2120: {CDSTM{EQU{CDJMP+1{{{STATEMENT NUMBER
        !          2121: {CDLEN{EQU{OFFS2{{{LENGTH OF CDBLK IN BYTES
        !          2122: {CDFAL{EQU{OFFS3{{{FAILURE EXIT (SEE BELOW)
        !          2123: {CDCOD{EQU{CDFAL+1{{{EXECUTABLE PSEUDO-CODE
        !          2124: {CDSI${EQU{CDCOD{{{NUMBER OF STANDARD FIELDS IN CDBLK
        !          2125: *
        !          2126: *      CDSTM IS THE STATEMENT NUMBER OF THE CURRENT STATEMENT.
        !          2127: *
        !          2128: *      CDJMP, CDFAL ARE SET AS FOLLOWS.
        !          2129: *
        !          2130: *      1)   IF THE FAILURE EXIT IS THE NEXT STATEMENT
        !          2131: *
        !          2132: *           CDJMP = B$CDS
        !          2133: *           CDFAL = PTR TO CDBLK FOR NEXT STATEMENT
        !          2134: *
        !          2135: *      2)   IF THE FAILURE EXIT IS A SIMPLE LABEL NAME
        !          2136: *
        !          2137: *           CDJMP = B$CDS
        !          2138: *           CDFAL IS A PTR TO THE VRTRA FIELD OF THE VRBLK
        !          2139: *
        !          2140: *      3)   IF THERE IS NO FAILURE EXIT (-NOFAIL MODE)
        !          2141: *
        !          2142: *           CDJMP = B$CDS
        !          2143: *           CDFAL = O$UNF
        !          2144: *
        !          2145: *      4)   IF THE FAILURE EXIT IS COMPLEX OR DIRECT
        !          2146: *
        !          2147: *           CDJMP = B$CDC
        !          2148: *           CDFAL IS THE OFFSET TO THE O$GOF WORD
        !          2149: {{EJC{{{{
        !          2150: *
        !          2151: *      CODE BLOCK (CONTINUED)
        !          2152: *
        !          2153: *      CDCOD IS THE START OF THE ACTUAL CODE. FIRST WE DESCRIBE
        !          2154: *      THE CODE GENERATED FOR AN EXPRESSION. IN AN EXPRESSION,
        !          2155: *      ELEMENTS ARE FETCHED BY NAME OR BY VALUE. FOR EXAMPLE,
        !          2156: *      THE BINARY EQUAL OPERATOR FETCHES ITS LEFT ARGUMENT
        !          2157: *      BY NAME AND ITS RIGHT ARGUMENT BY VALUE. THESE TWO
        !          2158: *      CASES GENERATE QUITE DIFFERENT CODE AND ARE DESCRIBED
        !          2159: *      SEPARATELY. FIRST WE CONSIDER THE CODE BY VALUE CASE.
        !          2160: *
        !          2161: *      GENERATION OF CODE BY VALUE FOR EXPRESSIONS ELEMENTS.
        !          2162: *
        !          2163: *      EXPRESSION            POINTER TO EXBLK OR SEBLK
        !          2164: *
        !          2165: *      INTEGER CONSTANT      POINTER TO ICBLK
        !          2166: *
        !          2167: *      NULL CONSTANT         POINTER TO NULLS
        !          2168: *
        !          2169: *      PATTERN               (RESULTING FROM PREEVALUATION)
        !          2170: *                            =O$LPT
        !          2171: *                            POINTER TO P0BLK,P1BLK OR P2BLK
        !          2172: *
        !          2173: *      REAL CONSTANT         POINTER TO RCBLK
        !          2174: *
        !          2175: *      STRING CONSTANT       POINTER TO SCBLK
        !          2176: *
        !          2177: *      VARIABLE              POINTER TO VRGET FIELD OF VRBLK
        !          2178: *
        !          2179: *      ADDITION              VALUE CODE FOR LEFT OPERAND
        !          2180: *                            VALUE CODE FOR RIGHT OPERAND
        !          2181: *                            =O$ADD
        !          2182: *
        !          2183: *      AFFIRMATION           VALUE CODE FOR OPERAND
        !          2184: *                            =O$AFF
        !          2185: *
        !          2186: *      ALTERNATION           VALUE CODE FOR LEFT OPERAND
        !          2187: *                            VALUE CODE FOR RIGHT OPERAND
        !          2188: *                            =O$ALT
        !          2189: *
        !          2190: *      ARRAY REFERENCE       (CASE OF ONE SUBSCRIPT)
        !          2191: *                            VALUE CODE FOR ARRAY OPERAND
        !          2192: *                            VALUE CODE FOR SUBSCRIPT OPERAND
        !          2193: *                            =O$AOV
        !          2194: *
        !          2195: *                            (CASE OF MORE THAN ONE SUBSCRIPT)
        !          2196: *                            VALUE CODE FOR ARRAY OPERAND
        !          2197: *                            VALUE CODE FOR FIRST SUBSCRIPT
        !          2198: *                            VALUE CODE FOR SECOND SUBSCRIPT
        !          2199: *                            ...
        !          2200: *                            VALUE CODE FOR LAST SUBSCRIPT
        !          2201: *                            =O$AMV
        !          2202: *                            NUMBER OF SUBSCRIPTS
        !          2203: {{EJC{{{{
        !          2204: *
        !          2205: *      CODE BLOCK (CONTINUED)
        !          2206: *
        !          2207: *      ASSIGNMENT            (TO NATURAL VARIABLE)
        !          2208: *                            VALUE CODE FOR RIGHT OPERAND
        !          2209: *                            POINTER TO VRSTO FIELD OF VRBLK
        !          2210: *
        !          2211: *                            (TO ANY OTHER VARIABLE)
        !          2212: *                            NAME CODE FOR LEFT OPERAND
        !          2213: *                            VALUE CODE FOR RIGHT OPERAND
        !          2214: *                            =O$ASS
        !          2215: *
        !          2216: *      COMPILE ERROR         =O$CER
        !          2217: *
        !          2218: *
        !          2219: *      COMPLEMENTATION       VALUE CODE FOR OPERAND
        !          2220: *                            =O$COM
        !          2221: *
        !          2222: *      CONCATENATION         (CASE OF PRED FUNC LEFT OPERAND)
        !          2223: *                            VALUE CODE FOR LEFT OPERAND
        !          2224: *                            =O$POP
        !          2225: *                            VALUE CODE FOR RIGHT OPERAND
        !          2226: *
        !          2227: *                            (ALL OTHER CASES)
        !          2228: *                            VALUE CODE FOR LEFT OPERAND
        !          2229: *                            VALUE CODE FOR RIGHT OPERAND
        !          2230: *                            =O$CNC
        !          2231: *
        !          2232: *      CURSOR ASSIGNMENT     NAME CODE FOR OPERAND
        !          2233: *                            =O$CAS
        !          2234: *
        !          2235: *      DIVISION              VALUE CODE FOR LEFT OPERAND
        !          2236: *                            VALUE CODE FOR RIGHT OPERAND
        !          2237: *                            =O$DVD
        !          2238: *
        !          2239: *      EXPONENTIATION        VALUE CODE FOR LEFT OPERAND
        !          2240: *                            VALUE CODE FOR RIGHT OPERAND
        !          2241: *                            =O$EXP
        !          2242: *
        !          2243: *      FUNCTION CALL         (CASE OF CALL TO SYSTEM FUNCTION)
        !          2244: *                            VALUE CODE FOR FIRST ARGUMENT
        !          2245: *                            VALUE CODE FOR SECOND ARGUMENT
        !          2246: *                            ...
        !          2247: *                            VALUE CODE FOR LAST ARGUMENT
        !          2248: *                            POINTER TO SVFNC FIELD OF SVBLK
        !          2249: *
        !          2250: {{EJC{{{{
        !          2251: *
        !          2252: *      CODE BLOCK (CONTINUED)
        !          2253: *
        !          2254: *      FUNCTION CALL         (CASE OF NON-SYSTEM FUNCTION 1 ARG)
        !          2255: *                            VALUE CODE FOR ARGUMENT
        !          2256: *                            =O$FNS
        !          2257: *                            POINTER TO VRBLK FOR FUNCTION
        !          2258: *
        !          2259: *                            (NON-SYSTEM FUNCTION, GT 1 ARG)
        !          2260: *                            VALUE CODE FOR FIRST ARGUMENT
        !          2261: *                            VALUE CODE FOR SECOND ARGUMENT
        !          2262: *                            ...
        !          2263: *                            VALUE CODE FOR LAST ARGUMENT
        !          2264: *                            =O$FNC
        !          2265: *                            NUMBER OF ARGUMENTS
        !          2266: *                            POINTER TO VRBLK FOR FUNCTION
        !          2267: *
        !          2268: *      IMMEDIATE ASSIGNMENT  VALUE CODE FOR LEFT OPERAND
        !          2269: *                            NAME CODE FOR RIGHT OPERAND
        !          2270: *                            =O$IMA
        !          2271: *
        !          2272: *      INDIRECTION           VALUE CODE FOR OPERAND
        !          2273: *                            =O$INV
        !          2274: *
        !          2275: *      INTERROGATION         VALUE CODE FOR OPERAND
        !          2276: *                            =O$INT
        !          2277: *
        !          2278: *      KEYWORD REFERENCE     NAME CODE FOR OPERAND
        !          2279: *                            =O$KWV
        !          2280: *
        !          2281: *      MULTIPLICATION        VALUE CODE FOR LEFT OPERAND
        !          2282: *                            VALUE CODE FOR RIGHT OPERAND
        !          2283: *                            =O$MLT
        !          2284: *
        !          2285: *      NAME REFERENCE        (NATURAL VARIABLE CASE)
        !          2286: *                            POINTER TO NMBLK FOR NAME
        !          2287: *
        !          2288: *                            (ALL OTHER CASES)
        !          2289: *                            NAME CODE FOR OPERAND
        !          2290: *                            =O$NAM
        !          2291: *
        !          2292: *      NEGATION              =O$NTA
        !          2293: *                            CDBLK OFFSET OF O$NTC WORD
        !          2294: *                            VALUE CODE FOR OPERAND
        !          2295: *                            =O$NTB
        !          2296: *                            =O$NTC
        !          2297: {{EJC{{{{
        !          2298: *
        !          2299: *      CODE BLOCK (CONTINUED)
        !          2300: *
        !          2301: *      PATTERN ASSIGNMENT    VALUE CODE FOR LEFT OPERAND
        !          2302: *                            NAME CODE FOR RIGHT OPERAND
        !          2303: *                            =O$PAS
        !          2304: *
        !          2305: *      PATTERN MATCH         VALUE CODE FOR LEFT OPERAND
        !          2306: *                            VALUE CODE FOR RIGHT OPERAND
        !          2307: *                            =O$PMV
        !          2308: *
        !          2309: *      PATTERN REPLACEMENT   NAME CODE FOR SUBJECT
        !          2310: *                            VALUE CODE FOR PATTERN
        !          2311: *                            =O$PMN
        !          2312: *                            VALUE CODE FOR REPLACEMENT
        !          2313: *                            =O$RPL
        !          2314: *
        !          2315: *      SELECTION             (FOR FIRST ALTERNATIVE)
        !          2316: *                            =O$SLA
        !          2317: *                            CDBLK OFFSET TO NEXT O$SLC WORD
        !          2318: *                            VALUE CODE FOR FIRST ALTERNATIVE
        !          2319: *                            =O$SLB
        !          2320: *                            CDBLK OFFSET PAST ALTERNATIVES
        !          2321: *
        !          2322: *                            (FOR SUBSEQUENT ALTERNATIVES)
        !          2323: *                            =O$SLC
        !          2324: *                            CDBLK OFFSET TO NEXT O$SLC,O$SLD
        !          2325: *                            VALUE CODE FOR ALTERNATIVE
        !          2326: *                            =O$SLB
        !          2327: *                            OFFSET IN CDBLK PAST ALTERNATIVES
        !          2328: *
        !          2329: *                            (FOR LAST ALTERNATIVE)
        !          2330: *                            =O$SLD
        !          2331: *                            VALUE CODE FOR LAST ALTERNATIVE
        !          2332: *
        !          2333: *      SUBTRACTION           VALUE CODE FOR LEFT OPERAND
        !          2334: *                            VALUE CODE FOR RIGHT OPERAND
        !          2335: *                            =O$SUB
        !          2336: {{EJC{{{{
        !          2337: *
        !          2338: *      CODE BLOCK (CONTINUED)
        !          2339: *
        !          2340: *      GENERATION OF CODE BY NAME FOR EXPRESSION ELEMENTS.
        !          2341: *
        !          2342: *      VARIABLE              =O$LVN
        !          2343: *                            POINTER TO VRBLK
        !          2344: *
        !          2345: *      EXPRESSION            (CASE OF *NATURAL VARIABLE)
        !          2346: *                            =O$LVN
        !          2347: *                            POINTER TO VRBLK
        !          2348: *
        !          2349: *                            (ALL OTHER CASES)
        !          2350: *                            =O$LEX
        !          2351: *                            POINTER TO EXBLK
        !          2352: *
        !          2353: *
        !          2354: *      ARRAY REFERENCE       (CASE OF ONE SUBSCRIPT)
        !          2355: *                            VALUE CODE FOR ARRAY OPERAND
        !          2356: *                            VALUE CODE FOR SUBSCRIPT OPERAND
        !          2357: *                            =O$AON
        !          2358: *
        !          2359: *                            (CASE OF MORE THAN ONE SUBSCRIPT)
        !          2360: *                            VALUE CODE FOR ARRAY OPERAND
        !          2361: *                            VALUE CODE FOR FIRST SUBSCRIPT
        !          2362: *                            VALUE CODE FOR SECOND SUBSCRIPT
        !          2363: *                            ...
        !          2364: *                            VALUE CODE FOR LAST SUBSCRIPT
        !          2365: *                            =O$AMN
        !          2366: *                            NUMBER OF SUBSCRIPTS
        !          2367: *
        !          2368: *      COMPILE ERROR         =O$CER
        !          2369: *
        !          2370: *      FUNCTION CALL         (SAME CODE AS FOR VALUE CALL)
        !          2371: *                            =O$FNE
        !          2372: *
        !          2373: *      INDIRECTION           VALUE CODE FOR OPERAND
        !          2374: *                            =O$INN
        !          2375: *
        !          2376: *      KEYWORD REFERENCE     NAME CODE FOR OPERAND
        !          2377: *                            =O$KWN
        !          2378: *
        !          2379: *      ANY OTHER OPERAND IS AN ERROR IN A NAME POSITION
        !          2380: *
        !          2381: *      NOTE THAT IN THIS DESCRIPTION, =O$XXX REFERS TO THE
        !          2382: *      GENERATION OF A WORD CONTAINING THE ADDRESS OF ANOTHER
        !          2383: *      WORD WHICH CONTAINS THE ENTRY POINT ADDRESS O$XXX.
        !          2384: {{EJC{{{{
        !          2385: *
        !          2386: *      CODE BLOCK (CONTINUED)
        !          2387: *
        !          2388: *      NOW WE CONSIDER THE OVERALL STRUCTURE OF THE CODE BLOCK
        !          2389: *      FOR A STATEMENT WITH POSSIBLE GOTO FIELDS.
        !          2390: *
        !          2391: *      FIRST COMES THE CODE FOR THE STATEMENT BODY.
        !          2392: *      THE STATEMENT BODY IS AN EXPRESSION TO BE EVALUATED
        !          2393: *      BY VALUE ALTHOUGH THE VALUE IS NOT ACTUALLY REQUIRED.
        !          2394: *      NORMAL VALUE CODE IS GENERATED FOR THE BODY OF THE
        !          2395: *      STATEMENT EXCEPT IN THE CASE OF A PATTERN MATCH BY
        !          2396: *      VALUE, IN WHICH CASE THE FOLLOWING IS GENERATED.
        !          2397: *
        !          2398: *                            VALUE CODE FOR LEFT OPERAND
        !          2399: *                            VALUE CODE FOR RIGHT OPERAND
        !          2400: *                            =O$PMS
        !          2401: *
        !          2402: *      NEXT WE HAVE THE CODE FOR THE SUCCESS GOTO. THERE ARE
        !          2403: *      SEVERAL CASES AS FOLLOWS.
        !          2404: *
        !          2405: *      1)   NO SUCCESS GOTO  PTR TO CDBLK FOR NEXT STATEMENT
        !          2406: *
        !          2407: *      2)   SIMPLE LABEL     PTR TO VRTRA FIELD OF VRBLK
        !          2408: *
        !          2409: *      3)   COMPLEX GOTO     (CODE BY NAME FOR GOTO OPERAND)
        !          2410: *                            =O$GOC
        !          2411: *
        !          2412: *      4)   DIRECT GOTO      (CODE BY VALUE FOR GOTO OPERAND)
        !          2413: *                            =O$GOD
        !          2414: *
        !          2415: *      FOLLOWING THIS WE GENERATE CODE FOR THE FAILURE GOTO IF
        !          2416: *      IT IS DIRECT OR IF IT IS COMPLEX, SIMPLE FAILURE GOTOS
        !          2417: *      HAVING BEEN HANDLED BY AN APPROPRIATE SETTING OF THE
        !          2418: *      CDFAL FIELD OF THE CDBLK. THE GENERATED CODE IS ONE
        !          2419: *      OF THE FOLLOWING.
        !          2420: *
        !          2421: *      1)   COMPLEX FGOTO    =O$FIF
        !          2422: *                            =O$GOF
        !          2423: *                            NAME CODE FOR GOTO OPERAND
        !          2424: *                            =O$GOC
        !          2425: *
        !          2426: *      2)   DIRECT FGOTO     =O$FIF
        !          2427: *                            =O$GOF
        !          2428: *                            VALUE CODE FOR GOTO OPERAND
        !          2429: *                            =O$GOD
        !          2430: *
        !          2431: *      AN OPTIMIZATION OCCURS IF THE SUCCESS AND FAILURE GOTOS
        !          2432: *      ARE IDENTICAL AND EITHER COMPLEX OR DIRECT. IN THIS CASE,
        !          2433: *      NO CODE IS GENERATED FOR THE SUCCESS GOTO AND CONTROL
        !          2434: *      IS ALLOWED TO FALL INTO THE FAILURE GOTO ON SUCCESS.
        !          2435: {{EJC{{{{
        !          2436: *
        !          2437: *      COMPILER BLOCK (CMBLK)
        !          2438: *
        !          2439: *      A COMPILER BLOCK (CMBLK) IS BUILT BY EXPAN TO REPRESENT
        !          2440: *      ONE NODE OF A TREE STRUCTURED EXPRESSION REPRESENTATION.
        !          2441: *
        !          2442: *           +------------------------------------+
        !          2443: *           I                CMIDN               I
        !          2444: *           +------------------------------------+
        !          2445: *           I                CMLEN               I
        !          2446: *           +------------------------------------+
        !          2447: *           I                CMTYP               I
        !          2448: *           +------------------------------------+
        !          2449: *           I                CMOPN               I
        !          2450: *           +------------------------------------+
        !          2451: *           /           CMVLS OR CMROP           /
        !          2452: *           /                                    /
        !          2453: *           /                CMLOP               /
        !          2454: *           /                                    /
        !          2455: *           +------------------------------------+
        !          2456: *
        !          2457: {CMIDN{EQU{0{{{POINTER TO DUMMY ROUTINE B$CMT
        !          2458: {CMLEN{EQU{CMIDN+1{{{LENGTH OF CMBLK IN BYTES
        !          2459: {CMTYP{EQU{CMLEN+1{{{TYPE (C$XXX, SEE LIST BELOW)
        !          2460: {CMOPN{EQU{CMTYP+1{{{OPERAND POINTER (SEE BELOW)
        !          2461: {CMVLS{EQU{CMOPN+1{{{OPERAND VALUE POINTERS (SEE BELOW)
        !          2462: {CMROP{EQU{CMVLS{{{RIGHT (ONLY) OPERATOR OPERAND
        !          2463: {CMLOP{EQU{CMVLS+1{{{LEFT OPERATOR OPERAND
        !          2464: {CMSI${EQU{CMVLS{{{NUMBER OF STANDARD FIELDS IN CMBLK
        !          2465: {CMUS${EQU{CMSI$+1{{{SIZE OF UNARY OPERATOR CMBLK
        !          2466: {CMBS${EQU{CMSI$+2{{{SIZE OF BINARY OPERATOR CMBLK
        !          2467: {CMAR1{EQU{CMVLS+1{{{ARRAY SUBSCRIPT POINTERS
        !          2468: *
        !          2469: *      THE CMOPN AND CMVLS FIELDS ARE SET AS FOLLOWS
        !          2470: *
        !          2471: *      ARRAY REFERENCE       CMOPN = PTR TO ARRAY OPERAND
        !          2472: *                            CMVLS = PTRS TO SUBSCRIPT OPERANDS
        !          2473: *
        !          2474: *      FUNCTION CALL         CMOPN = PTR TO VRBLK FOR FUNCTION
        !          2475: *                            CMVLS = PTRS TO ARGUMENT OPERANDS
        !          2476: *
        !          2477: *      SELECTION             CMOPN = ZERO
        !          2478: *                            CMVLS = PTRS TO ALTERNATE OPERANDS
        !          2479: *
        !          2480: *      UNARY OPERATOR        CMOPN = PTR TO OPERATOR DVBLK
        !          2481: *                            CMROP = PTR TO OPERAND
        !          2482: *
        !          2483: *      BINARY OPERATOR       CMOPN = PTR TO OPERATOR DVBLK
        !          2484: *                            CMROP = PTR TO RIGHT OPERAND
        !          2485: *                            CMLOP = PTR TO LEFT OPERAND
        !          2486: {{EJC{{{{
        !          2487: *
        !          2488: *      CMTYP IS SET TO INDICATE THE TYPE OF EXPRESSION ELEMENT
        !          2489: *      AS SHOWN BY THE FOLLOWING TABLE OF DEFINITIONS.
        !          2490: *
        !          2491: {C$ARR{EQU{0{{{ARRAY REFERENCE
        !          2492: {C$FNC{EQU{C$ARR+1{{{FUNCTION CALL
        !          2493: {C$DEF{EQU{C$FNC+1{{{DEFERRED EXPRESSION (UNARY *)
        !          2494: {C$IND{EQU{C$DEF+1{{{INDIRECTION (UNARY $)
        !          2495: {C$KEY{EQU{C$IND+1{{{KEYWORD REFERENCE (UNARY AMPERSAND)
        !          2496: {C$UBO{EQU{C$KEY+1{{{UNDEFINED BINARY OPERATOR
        !          2497: {C$UUO{EQU{C$UBO+1{{{UNDEFINED UNARY OPERATOR
        !          2498: {C$UO${EQU{C$UUO+1{{{TEST VALUE (=C$UUO+1=C$UBO+2)
        !          2499: {C$$NM{EQU{C$UUO+1{{{NUMBER OF CODES FOR NAME OPERANDS
        !          2500: *
        !          2501: *      THE REMAINING TYPES INDICATE EXPRESSION ELEMENTS WHICH
        !          2502: *      CAN ONLY BE EVALUATED BY VALUE (NOT BY NAME).
        !          2503: *
        !          2504: {C$BVL{EQU{C$UUO+1{{{BINARY OP WITH VALUE OPERANDS
        !          2505: {C$UVL{EQU{C$BVL+1{{{UNARY OPERATOR WITH VALUE OPERAND
        !          2506: {C$ALT{EQU{C$UVL+1{{{ALTERNATION (BINARY BAR)
        !          2507: {C$CNC{EQU{C$ALT+1{{{CONCATENATION
        !          2508: {C$CNP{EQU{C$CNC+1{{{CONCATENATION, NOT PATTERN MATCH
        !          2509: {C$UNM{EQU{C$CNP+1{{{UNARY OP WITH NAME OPERAND
        !          2510: {C$BVN{EQU{C$UNM+1{{{BINARY OP (OPERANDS BY VALUE, NAME)
        !          2511: {C$ASS{EQU{C$BVN+1{{{ASSIGNMENT
        !          2512: {C$INT{EQU{C$ASS+1{{{INTERROGATION
        !          2513: {C$NEG{EQU{C$INT+1{{{NEGATION (UNARY NOT)
        !          2514: {C$SEL{EQU{C$NEG+1{{{SELECTION
        !          2515: {C$PMT{EQU{C$SEL+1{{{PATTERN MATCH
        !          2516: *
        !          2517: {C$PR${EQU{C$BVN{{{LAST PREEVALUABLE CODE
        !          2518: {C$$NV{EQU{C$PMT+1{{{NUMBER OF DIFFERENT CMBLK TYPES
        !          2519: {{EJC{{{{
        !          2520: *
        !          2521: *      CHARACTER TABLE BLOCK (CTBLK)
        !          2522: *
        !          2523: *      A CHARACTER TABLE BLOCK IS USED TO HOLD LOGICAL CHARACTER
        !          2524: *      TABLES FOR USE WITH ANY,NOTANY,SPAN,BREAK,BREAKX
        !          2525: *      PATTERNS. EACH CHARACTER TABLE CAN BE USED TO STORE
        !          2526: *      CFP$N DISTINCT TABLES AS BIT COLUMNS. A BIT COLUMN
        !          2527: *      ALLOCATED FOR EACH ARGUMENT OF MORE THAN ONE CHARACTER
        !          2528: *      IN LENGTH TO ONE OF THE ABOVE LISTED PATTERN PRIMITIVES.
        !          2529: *
        !          2530: *           +------------------------------------+
        !          2531: *           I                CTTYP               I
        !          2532: *           +------------------------------------+
        !          2533: *           *                                    *
        !          2534: *           *                                    *
        !          2535: *           *                CTCHS               *
        !          2536: *           *                                    *
        !          2537: *           *                                    *
        !          2538: *           +------------------------------------+
        !          2539: *
        !          2540: {CTTYP{EQU{0{{{POINTER TO DUMMY ROUTINE B$CTT
        !          2541: {CTCHS{EQU{CTTYP+1{{{START OF CHARACTER TABLE WORDS
        !          2542: {CTSI${EQU{CTCHS+CFP$A{{{NUMBER OF WORDS IN CTBLK
        !          2543: *
        !          2544: *      CTCHS IS CFP$A WORDS LONG AND CONSISTS OF A ONE WORD
        !          2545: *      BIT STRING VALUE FOR EACH POSSIBLE CHARACTER IN THE
        !          2546: *      INTERNAL ALPHABET. EACH OF THE CFP$N POSSIBLE BITS IN
        !          2547: *      A BITSTRING IS USED TO FORM A COLUMN OF BIT INDICATORS.
        !          2548: *      A BIT IS SET ON IF THE CHARACTER IS IN THE TABLE AND OFF
        !          2549: *      IF THE CHARACTER IS NOT PRESENT.
        !          2550: {{EJC{{{{
        !          2551: *
        !          2552: *      DATATYPE FUNCTION BLOCK (DFBLK)
        !          2553: *
        !          2554: *      A DATATYPE FUNCTION IS USED TO CONTROL THE CONSTRUCTION
        !          2555: *      OF A PROGRAM DEFINED DATATYPE OBJECT. A CALL TO THE
        !          2556: *      SYSTEM FUNCTION DATA BUILDS A DFBLK FOR THE DATATYPE NAME
        !          2557: *
        !          2558: *      NOTE THAT THESE BLOCKS ARE BUILT IN STATIC BECAUSE PDBLK
        !          2559: *      LENGTH IS GOT FROM DFLEN FIELD.  IF DFBLK WAS IN DYNAMIC
        !          2560: *      STORE THIS WOULD CAUSE TROUBLE DURING PASS TWO OF GARBAGE
        !          2561: *      COLLECTION.  SCBLK REFERRED TO BY DFNAM FIELD IS ALSO PUT
        !          2562: *      IN STATIC SO THAT THERE ARE NO RELOC. FIELDS. THIS CUTS
        !          2563: *      GARBAGE COLLECTION TASK APPRECIABLY FOR PDBLKS WHICH ARE
        !          2564: *      LIKELY TO BE PRESENT IN LARGE NUMBERS.
        !          2565: *
        !          2566: *           +------------------------------------+
        !          2567: *           I                FCODE               I
        !          2568: *           +------------------------------------+
        !          2569: *           I                FARGS               I
        !          2570: *           +------------------------------------+
        !          2571: *           I                DFLEN               I
        !          2572: *           +------------------------------------+
        !          2573: *           I                DFPDL               I
        !          2574: *           +------------------------------------+
        !          2575: *           I                DFNAM               I
        !          2576: *           +------------------------------------+
        !          2577: *           /                                    /
        !          2578: *           /                DFFLD               /
        !          2579: *           /                                    /
        !          2580: *           +------------------------------------+
        !          2581: *
        !          2582: {DFLEN{EQU{FARGS+1{{{LENGTH OF DFBLK IN BYTES
        !          2583: {DFPDL{EQU{DFLEN+1{{{LENGTH OF CORRESPONDING PDBLK
        !          2584: {DFNAM{EQU{DFPDL+1{{{POINTER TO SCBLK FOR DATATYPE NAME
        !          2585: {DFFLD{EQU{DFNAM+1{{{START OF VRBLK PTRS FOR FIELD NAMES
        !          2586: {DFFLB{EQU{DFFLD-1{{{OFFSET BEHIND DFFLD FOR FIELD FUNC
        !          2587: {DFSI${EQU{DFFLD{{{NUMBER OF STANDARD FIELDS IN DFBLK
        !          2588: *
        !          2589: *      THE FCODE FIELD POINTS TO THE ROUTINE B$DFC
        !          2590: *
        !          2591: *      FARGS (THE NUMBER OF ARGUMENTS) IS THE NUMBER OF FIELDS.
        !          2592: {{EJC{{{{
        !          2593: *
        !          2594: *      DOPE VECTOR BLOCK (DVBLK)
        !          2595: *
        !          2596: *      A DOPE VECTOR IS ASSEMBLED FOR EACH POSSIBLE OPERATOR IN
        !          2597: *      THE SNOBOL4 LANGUAGE AS PART OF THE CONSTANT SECTION.
        !          2598: *
        !          2599: *           +------------------------------------+
        !          2600: *           I                DVOPN               I
        !          2601: *           +------------------------------------+
        !          2602: *           I                DVTYP               I
        !          2603: *           +------------------------------------+
        !          2604: *           I                DVLPR               I
        !          2605: *           +------------------------------------+
        !          2606: *           I                DVRPR               I
        !          2607: *           +------------------------------------+
        !          2608: *
        !          2609: {DVOPN{EQU{0{{{ENTRY ADDRESS (PTR TO O$XXX)
        !          2610: {DVTYP{EQU{DVOPN+1{{{TYPE CODE (C$XXX, SEE CMBLK)
        !          2611: {DVLPR{EQU{DVTYP+1{{{LEFT PRECEDENCE (LLXXX, SEE BELOW)
        !          2612: {DVRPR{EQU{DVLPR+1{{{RIGHT PRECEDENCE (RRXXX, SEE BELOW)
        !          2613: {DVUS${EQU{DVLPR+1{{{SIZE OF UNARY OPERATOR DV
        !          2614: {DVBS${EQU{DVRPR+1{{{SIZE OF BINARY OPERATOR DV
        !          2615: {DVUBS{EQU{DVUS$+DVBS${{{SIZE OF UNOP + BINOP (SEE SCANE)
        !          2616: *
        !          2617: *      THE CONTENTS OF THE DVTYP FIELD IS COPIED INTO THE CMTYP
        !          2618: *      FIELD OF THE CMBLK FOR THE OPERATOR IF IT IS USED.
        !          2619: *
        !          2620: *      THE CMOPN FIELD OF AN OPERATOR CMBLK POINTS TO THE DVBLK
        !          2621: *      ITSELF, PROVIDING THE REQUIRED ENTRY ADDRESS POINTER PTR.
        !          2622: *
        !          2623: *      FOR NORMALLY UNDEFINED OPERATORS, THE DVOPN (AND CMOPN)
        !          2624: *      FIELDS CONTAIN A WORD OFFSET FROM R$UBA OF THE FUNCTION
        !          2625: *      BLOCK POINTER FOR THE OPERATOR (INSTEAD OF O$XXX PTR).
        !          2626: *      FOR CERTAIN SPECIAL OPERATORS, THE DVOPN FIELD IS NOT
        !          2627: *      REQUIRED AT ALL AND IS ASSEMBLED AS ZERO.
        !          2628: *
        !          2629: *      THE LEFT PRECEDENCE IS USED IN COMPARING AN OPERATOR TO
        !          2630: *      THE LEFT OF SOME OTHER OPERATOR. IT THEREFORE GOVERNS THE
        !          2631: *      PRECEDENCE OF THE OPERATOR TOWARDS ITS RIGHT OPERAND.
        !          2632: *
        !          2633: *      THE RIGHT PRECEDENCE IS USED IN COMPARING AN OPERATOR TO
        !          2634: *      THE RIGHT OF SOME OTHER OPERATOR. IT THEREFORE GOVERNS
        !          2635: *      THE PRECEDENCE OF THE OPERATOR TOWARDS ITS LEFT OPERAND.
        !          2636: *
        !          2637: *      HIGHER PRECEDENCE VALUES CORRESPOND TO A TIGHTER BINDING
        !          2638: *      CAPABILITY. THUS WE HAVE THE LEFT PRECEDENCE LOWER
        !          2639: *      (HIGHER) THAN THE RIGHT PRECEDENCE FOR RIGHT (LEFT)
        !          2640: *      ASSOCIATIVE BINARY OPERATORS.
        !          2641: *
        !          2642: *      THE LEFT PRECEDENCE OF UNARY OPERATORS IS SET TO AN
        !          2643: *      ARBITRARY HIGH VALUE. THE RIGHT VALUE IS NOT REQUIRED AND
        !          2644: *      CONSEQUENTLY THE DVRPR FIELD IS OMITTED FOR UNARY OPS.
        !          2645: {{EJC{{{{
        !          2646: *
        !          2647: *      TABLE OF OPERATOR PRECEDENCE VALUES
        !          2648: *
        !          2649: {RRASS{EQU{10{{{RIGHT     EQUAL
        !          2650: {LLASS{EQU{00{{{LEFT      EQUAL
        !          2651: {RRPMT{EQU{20{{{RIGHT     QUESTION MARK
        !          2652: {LLPMT{EQU{30{{{LEFT      QUESTION MARK
        !          2653: {RRAMP{EQU{40{{{RIGHT     AMPERSAND
        !          2654: {LLAMP{EQU{50{{{LEFT      AMPERSAND
        !          2655: {RRALT{EQU{70{{{RIGHT     VERTICAL BAR
        !          2656: {LLALT{EQU{60{{{LEFT      VERTICAL BAR
        !          2657: {RRCNC{EQU{90{{{RIGHT     BLANK
        !          2658: {LLCNC{EQU{80{{{LEFT      BLANK
        !          2659: {RRATS{EQU{110{{{RIGHT     AT
        !          2660: {LLATS{EQU{100{{{LEFT      AT
        !          2661: {RRPLM{EQU{120{{{RIGHT     PLUS, MINUS
        !          2662: {LLPLM{EQU{130{{{LEFT      PLUS, MINUS
        !          2663: {RRNUM{EQU{140{{{RIGHT     NUMBER
        !          2664: {LLNUM{EQU{150{{{LEFT      NUMBER
        !          2665: {RRDVD{EQU{160{{{RIGHT     SLASH
        !          2666: {LLDVD{EQU{170{{{LEFT      SLASH
        !          2667: {RRMLT{EQU{180{{{RIGHT     ASTERISK
        !          2668: {LLMLT{EQU{190{{{LEFT      ASTERISK
        !          2669: {RRPCT{EQU{200{{{RIGHT     PERCENT
        !          2670: {LLPCT{EQU{210{{{LEFT      PERCENT
        !          2671: {RREXP{EQU{230{{{RIGHT     EXCLAMATION
        !          2672: {LLEXP{EQU{220{{{LEFT      EXCLAMATION
        !          2673: {RRDLD{EQU{240{{{RIGHT     DOLLAR, DOT
        !          2674: {LLDLD{EQU{250{{{LEFT      DOLLAR, DOT
        !          2675: {RRNOT{EQU{270{{{RIGHT     NOT
        !          2676: {LLNOT{EQU{260{{{LEFT      NOT
        !          2677: {LLUNO{EQU{999{{{LEFT      ALL UNARY OPERATORS
        !          2678: *
        !          2679: *      PRECEDENCES ARE THE SAME AS IN BTL SNOBOL4 WITH THE
        !          2680: *      FOLLOWING EXCEPTIONS.
        !          2681: *
        !          2682: *      1)   BINARY QUESTION MARK IS LOWERED AND MADE LEFT ASSOC-
        !          2683: *           IATIVE TO REFLECT ITS NEW USE FOR PATTERN MATCHING.
        !          2684: *
        !          2685: *      2)   ALTERNATION AND CONCATENATION ARE MADE RIGHT
        !          2686: *           ASSOCIATIVE FOR GREATER EFFICIENCY IN PATTERN
        !          2687: *           CONSTRUCTION AND MATCHING RESPECTIVELY. THIS CHANGE
        !          2688: *           IS TRANSPARENT TO THE SNOBOL4 PROGRAMMER.
        !          2689: *
        !          2690: *      3)   THE EQUAL SIGN HAS BEEN ADDED AS A LOW PRECEDENCE
        !          2691: *           OPERATOR WHICH IS RIGHT ASSOCIATIVE TO REFLECT ITS
        !          2692: *           MORE GENERAL USAGE IN THIS VERSION OF SNOBOL4.
        !          2693: {{EJC{{{{
        !          2694: *
        !          2695: *      EXTERNAL FUNCTION BLOCK (EFBLK)
        !          2696: *
        !          2697: *      AN EXTERNAL FUNCTION BLOCK IS USED TO CONTROL THE CALLING
        !          2698: *      OF AN EXTERNAL FUNCTION. IT IS BUILT BY A CALL TO LOAD.
        !          2699: *
        !          2700: *           +------------------------------------+
        !          2701: *           I                FCODE               I
        !          2702: *           +------------------------------------+
        !          2703: *           I                FARGS               I
        !          2704: *           +------------------------------------+
        !          2705: *           I                EFLEN               I
        !          2706: *           +------------------------------------+
        !          2707: *           I                EFUSE               I
        !          2708: *           +------------------------------------+
        !          2709: *           I                EFCOD               I
        !          2710: *           +------------------------------------+
        !          2711: *           I                EFVAR               I
        !          2712: *           +------------------------------------+
        !          2713: *           I                EFRSL               I
        !          2714: *           +------------------------------------+
        !          2715: *           /                                    /
        !          2716: *           /                EFTAR               /
        !          2717: *           /                                    /
        !          2718: *           +------------------------------------+
        !          2719: *
        !          2720: {EFLEN{EQU{FARGS+1{{{LENGTH OF EFBLK IN BYTES
        !          2721: {EFUSE{EQU{EFLEN+1{{{USE COUNT (FOR OPSYN)
        !          2722: {EFCOD{EQU{EFUSE+1{{{PTR TO CODE (FROM SYSLD)
        !          2723: {EFVAR{EQU{EFCOD+1{{{PTR TO ASSOCIATED VRBLK
        !          2724: {EFRSL{EQU{EFVAR+1{{{RESULT TYPE (SEE BELOW)
        !          2725: {EFTAR{EQU{EFRSL+1{{{ARGUMENT TYPES (SEE BELOW)
        !          2726: {EFSI${EQU{EFTAR{{{NUMBER OF STANDARD FIELDS IN EFBLK
        !          2727: *
        !          2728: *      THE FCODE FIELD POINTS TO THE ROUTINE B$EFC.
        !          2729: *
        !          2730: *      EFUSE IS USED TO KEEP TRACK OF MULTIPLE USE WHEN OPSYN
        !          2731: *      IS EMPLOYED. THE FUNCTION IS AUTOMATICALLY UNLOADED
        !          2732: *      WHEN THERE ARE NO MORE REFERENCES TO THE FUNCTION.
        !          2733: *
        !          2734: *      EFRSL AND EFTAR ARE TYPE CODES AS FOLLOWS.
        !          2735: *
        !          2736: *           0                TYPE IS UNCONVERTED
        !          2737: *           1                TYPE IS STRING
        !          2738: *           2                TYPE IS INTEGER
        !          2739: *           3                TYPE IS REAL
        !          2740: {{EJC{{{{
        !          2741: *
        !          2742: *      EXPRESSION VARIABLE BLOCK (EVBLK)
        !          2743: *
        !          2744: *      IN THIS VERSION OF SPITBOL, AN EXPRESSION CAN BE USED IN
        !          2745: *      ANY POSITION WHICH WOULD NORMALLY EXPECT A NAME (FOR
        !          2746: *      EXAMPLE ON THE LEFT SIDE OF EQUALS OR AS THE RIGHT
        !          2747: *      ARGUMENT OF BINARY DOT). THIS CORRESPONDS TO THE CREATION
        !          2748: *      OF A PSEUDO-VARIABLE WHICH IS REPRESENTED BY A POINTER TO
        !          2749: *      AN EXPRESSION VARIABLE BLOCK AS FOLLOWS.
        !          2750: *
        !          2751: *           +------------------------------------+
        !          2752: *           I                EVTYP               I
        !          2753: *           +------------------------------------+
        !          2754: *           I                EVEXP               I
        !          2755: *           +------------------------------------+
        !          2756: *           I                EVVAR               I
        !          2757: *           +------------------------------------+
        !          2758: *
        !          2759: {EVTYP{EQU{0{{{POINTER TO DUMMY ROUTINE B$EVT
        !          2760: {EVEXP{EQU{EVTYP+1{{{POINTER TO EXBLK FOR EXPRESSION
        !          2761: {EVVAR{EQU{EVEXP+1{{{POINTER TO TRBEV DUMMY TRBLK
        !          2762: {EVSI${EQU{EVVAR+1{{{SIZE OF EVBLK
        !          2763: *
        !          2764: *      THE NAME OF AN EXPRESSION VARIABLE IS REPRESENTED BY A
        !          2765: *      BASE POINTER TO THE EVBLK AND AN OFFSET OF EVVAR. THIS
        !          2766: *      VALUE APPEARS TO BE TRAPPED BY THE DUMMY TRBEV BLOCK.
        !          2767: *
        !          2768: *      NOTE THAT THERE IS NO NEED TO ALLOW FOR THE CASE OF AN
        !          2769: *      EXPRESSION VARIABLE WHICH REFERENCES AN SEBLK SINCE A
        !          2770: *      VARIABLE WHICH IS OF THE FORM *VAR IS EQUIVALENT TO VAR.
        !          2771: {{EJC{{{{
        !          2772: *
        !          2773: *      EXPRESSION BLOCK (EXBLK)
        !          2774: *
        !          2775: *      AN EXPRESSION BLOCK IS BUILT FOR EACH EXPRESSION
        !          2776: *      REFERENCED IN A PROGRAM OR CREATED BY EVAL OR CONVERT
        !          2777: *      DURING EXECUTION OF A PROGRAM.
        !          2778: *
        !          2779: *           +------------------------------------+
        !          2780: *           I                EXTYP               I
        !          2781: *           +------------------------------------+
        !          2782: *           I                EXSTM               I
        !          2783: *           +------------------------------------+
        !          2784: *           I                EXLEN               I
        !          2785: *           +------------------------------------+
        !          2786: *           I                EXFLC               I
        !          2787: *           +------------------------------------+
        !          2788: *           /                                    /
        !          2789: *           /                EXCOD               /
        !          2790: *           /                                    /
        !          2791: *           +------------------------------------+
        !          2792: *
        !          2793: {EXTYP{EQU{0{{{PTR TO ROUTINE B$EXL TO LOAD EXPR
        !          2794: {EXSTM{EQU{CDSTM{{{STORES STMNT NO. DURING EVALUATION
        !          2795: {EXLEN{EQU{EXSTM+1{{{LENGTH OF EXBLK IN BYTES
        !          2796: {EXFLC{EQU{EXLEN+1{{{FAILURE CODE (=O$FEX)
        !          2797: {EXCOD{EQU{EXFLC+1{{{PSEUDO-CODE FOR EXPRESSION
        !          2798: {EXSI${EQU{EXCOD{{{NUMBER OF STANDARD FIELDS IN EXBLK
        !          2799: *
        !          2800: *      THERE ARE TWO CASES FOR EXCOD DEPENDING ON WHETHER THE
        !          2801: *      EXPRESSION CAN BE EVALUATED BY NAME (SEE DESCRIPTION
        !          2802: *      OF CDBLK FOR DETAILS OF CODE FOR EXPRESSIONS).
        !          2803: *
        !          2804: *      IF THE EXPRESSION CAN BE EVALUATED BY NAME WE HAVE.
        !          2805: *
        !          2806: *                            (CODE FOR EXPR BY NAME)
        !          2807: *                            =O$RNM
        !          2808: *
        !          2809: *      IF THE EXPRESSION CAN ONLY BE EVALUATED BY VALUE.
        !          2810: *
        !          2811: *                            (CODE FOR EXPR BY VALUE)
        !          2812: *                            =O$RVL
        !          2813: {{EJC{{{{
        !          2814: *
        !          2815: *      FIELD FUNCTION BLOCK (FFBLK)
        !          2816: *
        !          2817: *      A FIELD FUNCTION BLOCK IS USED TO CONTROL THE SELECTION
        !          2818: *      OF A FIELD FROM A PROGRAM DEFINED DATATYPE BLOCK.
        !          2819: *      A CALL TO DATA CREATES AN FFBLK FOR EACH FIELD.
        !          2820: *
        !          2821: *           +------------------------------------+
        !          2822: *           I                FCODE               I
        !          2823: *           +------------------------------------+
        !          2824: *           I                FARGS               I
        !          2825: *           +------------------------------------+
        !          2826: *           I                FFDFP               I
        !          2827: *           +------------------------------------+
        !          2828: *           I                FFNXT               I
        !          2829: *           +------------------------------------+
        !          2830: *           I                FFOFS               I
        !          2831: *           +------------------------------------+
        !          2832: *
        !          2833: {FFDFP{EQU{FARGS+1{{{POINTER TO ASSOCIATED DFBLK
        !          2834: {FFNXT{EQU{FFDFP+1{{{PTR TO NEXT FFBLK ON CHAIN OR ZERO
        !          2835: {FFOFS{EQU{FFNXT+1{{{OFFSET (BYTES) TO FIELD IN PDBLK
        !          2836: {FFSI${EQU{FFOFS+1{{{SIZE OF FFBLK IN WORDS
        !          2837: *
        !          2838: *      THE FCODE FIELD POINTS TO THE ROUTINE B$FFC.
        !          2839: *
        !          2840: *      FARGS ALWAYS CONTAINS ONE.
        !          2841: *
        !          2842: *      FFDFP IS USED TO VERIFY THAT THE CORRECT PROGRAM DEFINED
        !          2843: *      DATATYPE IS BEING ACCESSED BY THIS CALL.
        !          2844: *      FFDFP IS NON-RELOC. BECAUSE DFBLK IS IN STATIC
        !          2845: *
        !          2846: *      FFOFS IS USED TO SELECT THE APPROPRIATE FIELD. NOTE THAT
        !          2847: *      IT IS AN ACTUAL OFFSET (NOT A FIELD NUMBER)
        !          2848: *
        !          2849: *      FFNXT IS USED TO POINT TO THE NEXT FFBLK OF THE SAME NAME
        !          2850: *      IN THE CASE WHERE THERE ARE SEVERAL FIELDS OF THE SAME
        !          2851: *      NAME FOR DIFFERENT DATATYPES. ZERO MARKS THE END OF CHAIN
        !          2852: {{EJC{{{{
        !          2853: *
        !          2854: *      INTEGER CONSTANT BLOCK (ICBLK)
        !          2855: *
        !          2856: *      AN ICBLK IS CREATED FOR EVERY INTEGER REFERENCED OR
        !          2857: *      CREATED BY A PROGRAM. NOTE HOWEVER THAT CERTAIN INTERNAL
        !          2858: *      INTEGER VALUES ARE STORED AS ADDRESSES (E.G. THE LENGTH
        !          2859: *      FIELD IN A STRING CONSTANT BLOCK)
        !          2860: *
        !          2861: *           +------------------------------------+
        !          2862: *           I                ICGET               I
        !          2863: *           +------------------------------------+
        !          2864: *           *                ICVAL               *
        !          2865: *           +------------------------------------+
        !          2866: *
        !          2867: {ICGET{EQU{0{{{PTR TO ROUTINE B$ICL TO LOAD INT
        !          2868: {ICVAL{EQU{ICGET+1{{{INTEGER VALUE
        !          2869: {ICSI${EQU{ICVAL+CFP$I{{{SIZE OF ICBLK
        !          2870: *
        !          2871: *      THE LENGTH OF THE ICVAL FIELD IS CFP$I.
        !          2872: {{EJC{{{{
        !          2873: *
        !          2874: *      KEYWORD VARIABLE BLOCK (KVBLK)
        !          2875: *
        !          2876: *      A KVBLK IS USED TO REPRESENT A KEYWORD PSEUDO-VARIABLE.
        !          2877: *      A KVBLK IS BUILT FOR EACH KEYWORD REFERENCE (KWNAM).
        !          2878: *
        !          2879: *           +------------------------------------+
        !          2880: *           I                KVTYP               I
        !          2881: *           +------------------------------------+
        !          2882: *           I                KVVAR               I
        !          2883: *           +------------------------------------+
        !          2884: *           I                KVNUM               I
        !          2885: *           +------------------------------------+
        !          2886: *
        !          2887: {KVTYP{EQU{0{{{POINTER TO DUMMY ROUTINE B$KVT
        !          2888: {KVVAR{EQU{KVTYP+1{{{POINTER TO DUMMY BLOCK TRBKV
        !          2889: {KVNUM{EQU{KVVAR+1{{{KEYWORD NUMBER
        !          2890: {KVSI${EQU{KVNUM+1{{{SIZE OF KVBLK
        !          2891: *
        !          2892: *      THE NAME OF A KEYWORD VARIABLE IS REPRESENTED BY A
        !          2893: *      BASE POINTER TO THE KVBLK AND AN OFFSET OF KVVAR. THE
        !          2894: *      VALUE APPEARS TO BE TRAPPED BY THE POINTER TO TRBKV.
        !          2895: {{EJC{{{{
        !          2896: *
        !          2897: *      NAME BLOCK (NMBLK)
        !          2898: *
        !          2899: *      A NAME BLOCK IS USED WHEREVER A NAME MUST BE STORED AS
        !          2900: *      A VALUE FOLLOWING USE OF THE UNARY DOT OPERATOR.
        !          2901: *
        !          2902: *           +------------------------------------+
        !          2903: *           I                NMTYP               I
        !          2904: *           +------------------------------------+
        !          2905: *           I                NMBAS               I
        !          2906: *           +------------------------------------+
        !          2907: *           I                NMOFS               I
        !          2908: *           +------------------------------------+
        !          2909: *
        !          2910: {NMTYP{EQU{0{{{PTR TO ROUTINE B$NML TO LOAD NAME
        !          2911: {NMBAS{EQU{NMTYP+1{{{BASE POINTER FOR VARIABLE
        !          2912: {NMOFS{EQU{NMBAS+1{{{OFFSET FOR VARIABLE
        !          2913: {NMSI${EQU{NMOFS+1{{{SIZE OF NMBLK
        !          2914: *
        !          2915: *      THE ACTUAL FIELD REPRESENTING THE CONTENTS OF THE NAME
        !          2916: *      IS FOUND NMOFS BYTES PAST THE ADDRESS IN NMBAS.
        !          2917: *
        !          2918: *      THE NAME IS SPLIT INTO BASE AND OFFSET FORM TO AVOID
        !          2919: *      CREATION OF A POINTER INTO THE MIDDLE OF A BLOCK WHICH
        !          2920: *      COULD NOT BE HANDLED PROPERLY BY THE GARBAGE COLLECTOR.
        !          2921: *
        !          2922: *      A NAME MAY BE BUILT FOR ANY VARIABLE (SEE SECTION ON
        !          2923: *      REPRESENTATIONS OF VARIABLES) THIS INCLUDES THE
        !          2924: *      CASES OF PSEUDO-VARIABLES.
        !          2925: {{EJC{{{{
        !          2926: *
        !          2927: *      PATTERN BLOCK, NO PARAMETERS (P0BLK)
        !          2928: *
        !          2929: *      A P0BLK IS USED TO REPRESENT PATTERN NODES WHICH DO
        !          2930: *      NOT REQUIRE THE USE OF ANY PARAMETER VALUES.
        !          2931: *
        !          2932: *           +------------------------------------+
        !          2933: *           I                PCODE               I
        !          2934: *           +------------------------------------+
        !          2935: *           I                PTHEN               I
        !          2936: *           +------------------------------------+
        !          2937: *
        !          2938: {PCODE{EQU{0{{{PTR TO MATCH ROUTINE (P$XXX)
        !          2939: {PTHEN{EQU{PCODE+1{{{POINTER TO SUBSEQUENT NODE
        !          2940: {PASI${EQU{PTHEN+1{{{SIZE OF P0BLK
        !          2941: *
        !          2942: *      PTHEN POINTS TO THE PATTERN BLOCK FOR THE SUBSEQUENT
        !          2943: *      NODE TO BE MATCHED. THIS IS A POINTER TO THE PATTERN
        !          2944: *      BLOCK NDNTH IF THERE IS NO SUBSEQUENT (END OF PATTERN)
        !          2945: *
        !          2946: *      PCODE IS A POINTER TO THE MATCH ROUTINE FOR THE NODE.
        !          2947: {{EJC{{{{
        !          2948: *
        !          2949: *      PATTERN BLOCK (ONE PARAMETER)
        !          2950: *
        !          2951: *      A P1BLK IS USED TO REPRESENT PATTERN NODES WHICH
        !          2952: *      REQUIRE ONE PARAMETER VALUE.
        !          2953: *
        !          2954: *           +------------------------------------+
        !          2955: *           I                PCODE               I
        !          2956: *           +------------------------------------+
        !          2957: *           I                PTHEN               I
        !          2958: *           +------------------------------------+
        !          2959: *           I                PARM1               I
        !          2960: *           +------------------------------------+
        !          2961: *
        !          2962: {PARM1{EQU{PTHEN+1{{{FIRST PARAMETER VALUE
        !          2963: {PBSI${EQU{PARM1+1{{{SIZE OF P1BLK IN WORDS
        !          2964: *
        !          2965: *      SEE P0BLK FOR DEFINITIONS OF PCODE, PTHEN
        !          2966: *
        !          2967: *      PARM1 CONTAINS A PARAMETER VALUE USED IN MATCHING THE
        !          2968: *      NODE. FOR EXAMPLE, IN A LEN PATTERN, IT IS THE INTEGER
        !          2969: *      ARGUMENT TO LEN. THE DETAILS OF THE USE OF THE PARAMETER
        !          2970: *      FIELD ARE INCLUDED IN THE DESCRIPTION OF THE INDIVIDUAL
        !          2971: *      MATCH ROUTINES. PARM1 IS ALWAYS AN ADDRESS POINTER WHICH
        !          2972: *      IS PROCESSED BY THE GARBAGE COLLECTOR.
        !          2973: {{EJC{{{{
        !          2974: *
        !          2975: *      PATTERN BLOCK (TWO PARAMETERS)
        !          2976: *
        !          2977: *      A P2BLK IS USED TO REPRESENT PATTERN NODES WHICH
        !          2978: *      REQUIRE TWO PARAMETER VALUES.
        !          2979: *
        !          2980: *           +------------------------------------+
        !          2981: *           I                PCODE               I
        !          2982: *           +------------------------------------+
        !          2983: *           I                PTHEN               I
        !          2984: *           +------------------------------------+
        !          2985: *           I                PARM1               I
        !          2986: *           +------------------------------------+
        !          2987: *           I                PARM2               I
        !          2988: *           +------------------------------------+
        !          2989: *
        !          2990: {PARM2{EQU{PARM1+1{{{SECOND PARAMETER VALUE
        !          2991: {PCSI${EQU{PARM2+1{{{SIZE OF P2BLK IN WORDS
        !          2992: *
        !          2993: *      SEE P1BLK FOR DEFINITIONS OF PCODE, PTHEN, PARM1
        !          2994: *
        !          2995: *      PARM2 IS A PARAMETER WHICH PERFORMS THE SAME SORT OF
        !          2996: *      FUNCTION AS PARM1 (SEE DESCRIPTION OF P1BLK).
        !          2997: *
        !          2998: *      PARM2 IS A NON-RELOCATABLE FIELD AND IS NOT
        !          2999: *      PROCESSED BY THE GARBAGE COLLECTOR. ACCORDINGLY, IT MAY
        !          3000: *      NOT CONTAIN A POINTER TO A BLOCK IN DYNAMIC MEMORY.
        !          3001: {{EJC{{{{
        !          3002: *
        !          3003: *      PROGRAM-DEFINED DATATYPE BLOCK
        !          3004: *
        !          3005: *      A PDBLK REPRESENTS THE DATA ITEM FORMED BY A CALL TO A
        !          3006: *      DATATYPE FUNCTION AS DEFINED BY THE SYSTEM FUNCTION DATA.
        !          3007: *
        !          3008: *           +------------------------------------+
        !          3009: *           I                PDTYP               I
        !          3010: *           +------------------------------------+
        !          3011: *           I                IDVAL               I
        !          3012: *           +------------------------------------+
        !          3013: *           I                PDDFP               I
        !          3014: *           +------------------------------------+
        !          3015: *           /                                    /
        !          3016: *           /                PDFLD               /
        !          3017: *           /                                    /
        !          3018: *           +------------------------------------+
        !          3019: *
        !          3020: {PDTYP{EQU{0{{{PTR TO DUMMY ROUTINE B$PDT
        !          3021: {PDDFP{EQU{IDVAL+1{{{PTR TO ASSOCIATED DFBLK
        !          3022: {PDFLD{EQU{PDDFP+1{{{START OF FIELD VALUE POINTERS
        !          3023: {PDFOF{EQU{DFFLD-PDFLD{{{DIFFERENCE IN OFFSET TO FIELD PTRS
        !          3024: {PDSI${EQU{PDFLD{{{SIZE OF STANDARD FIELDS IN PDBLK
        !          3025: {PDDFS{EQU{DFSI$-PDSI${{{DIFFERENCE IN DFBLK, PDBLK SIZES
        !          3026: *
        !          3027: *      THE PDDFP POINTER MAY BE USED TO DETERMINE THE DATATYPE
        !          3028: *      AND THE NAMES OF THE FIELDS IF REQUIRED. THE DFBLK ALSO
        !          3029: *      CONTAINS THE LENGTH OF THE PDBLK IN BYTES (FIELD DFPDL).
        !          3030: *      PDDFP IS NON-RELOC. BECAUSE DFBLK IS IN STATIC
        !          3031: *
        !          3032: *      PDFLD VALUES ARE STORED IN ORDER FROM LEFT TO RIGHT.
        !          3033: *      THEY CONTAIN VALUES OR POINTERS TO TRBLK CHAINS.
        !          3034: {{EJC{{{{
        !          3035: *
        !          3036: *      PROGRAM DEFINED FUNCTION BLOCK (PFBLK)
        !          3037: *
        !          3038: *      A PFBLK IS CREATED FOR EACH CALL TO THE DEFINE FUNCTION
        !          3039: *      AND A POINTER TO THE PFBLK PLACED IN THE PROPER VRBLK.
        !          3040: *
        !          3041: *           +------------------------------------+
        !          3042: *           I                FCODE               I
        !          3043: *           +------------------------------------+
        !          3044: *           I                FARGS               I
        !          3045: *           +------------------------------------+
        !          3046: *           I                PFLEN               I
        !          3047: *           +------------------------------------+
        !          3048: *           I                PFVBL               I
        !          3049: *           +------------------------------------+
        !          3050: *           I                PFNLO               I
        !          3051: *           +------------------------------------+
        !          3052: *           I                PFCOD               I
        !          3053: *           +------------------------------------+
        !          3054: *           I                PFCTR               I
        !          3055: *           +------------------------------------+
        !          3056: *           I                PFRTR               I
        !          3057: *           +------------------------------------+
        !          3058: *           /                                    /
        !          3059: *           /                PFARG               /
        !          3060: *           /                                    /
        !          3061: *           +------------------------------------+
        !          3062: *
        !          3063: {PFLEN{EQU{FARGS+1{{{LENGTH OF PFBLK IN BYTES
        !          3064: {PFVBL{EQU{PFLEN+1{{{POINTER TO VRBLK FOR FUNCTION NAME
        !          3065: {PFNLO{EQU{PFVBL+1{{{NUMBER OF LOCALS
        !          3066: {PFCOD{EQU{PFNLO+1{{{PTR TO CDBLK FOR FIRST STATEMENT
        !          3067: {PFCTR{EQU{PFCOD+1{{{TRBLK PTR IF CALL TRACED ELSE 0
        !          3068: {PFRTR{EQU{PFCTR+1{{{TRBLK PTR IF RETURN TRACED ELSE 0
        !          3069: {PFARG{EQU{PFRTR+1{{{VRBLK PTRS FOR ARGUMENTS AND LOCALS
        !          3070: {PFAGB{EQU{PFARG-1{{{OFFSET BEHIND PFARG FOR ARG, LOCAL
        !          3071: {PFSI${EQU{PFARG{{{NUMBER OF STANDARD FIELDS IN PFBLK
        !          3072: *
        !          3073: *      THE FCODE FIELD POINTS TO THE ROUTINE B$PFC.
        !          3074: *
        !          3075: *      PFARG IS STORED IN THE FOLLOWING ORDER.
        !          3076: *
        !          3077: *           ARGUMENTS (LEFT TO RIGHT)
        !          3078: *           LOCALS (LEFT TO RIGHT)
        !          3079: {{EJC{{{{
        !          3080: *
        !          3081: *      REAL CONSTANT BLOCK (RCBLK)
        !          3082: *
        !          3083: *      AN RCBLK IS CREATED FOR EVERY REAL REFERENCED OR
        !          3084: *      CREATED BY A PROGRAM.
        !          3085: *
        !          3086: *           +------------------------------------+
        !          3087: *           I                RCGET               I
        !          3088: *           +------------------------------------+
        !          3089: *           *                RCVAL               *
        !          3090: *           +------------------------------------+
        !          3091: *
        !          3092: {RCGET{EQU{0{{{PTR TO ROUTINE B$RCL TO LOAD REAL
        !          3093: {RCVAL{EQU{RCGET+1{{{REAL VALUE
        !          3094: {RCSI${EQU{RCVAL+CFP$R{{{SIZE OF RCBLK
        !          3095: *
        !          3096: *      THE LENGTH OF THE RCVAL FIELD IS CFP$R.
        !          3097: {{EJC{{{{
        !          3098: *
        !          3099: *      STRING CONSTANT BLOCK (SCBLK)
        !          3100: *
        !          3101: *      AN SCBLK IS BUILT FOR EVERY STRING REFERENCED OR CREATED
        !          3102: *      BY A PROGRAM.
        !          3103: *
        !          3104: *           +------------------------------------+
        !          3105: *           I                SCGET               I
        !          3106: *           +------------------------------------+
        !          3107: *           I                SCLEN               I
        !          3108: *           +------------------------------------+
        !          3109: *           /                                    /
        !          3110: *           /                SCHAR               /
        !          3111: *           /                                    /
        !          3112: *           +------------------------------------+
        !          3113: *
        !          3114: {SCGET{EQU{0{{{PTR TO ROUTINE B$SCL TO LOAD STRING
        !          3115: {SCLEN{EQU{SCGET+1{{{LENGTH OF STRING IN CHARACTERS
        !          3116: {SCHAR{EQU{SCLEN+1{{{CHARACTERS OF STRING
        !          3117: {SCSI${EQU{SCHAR{{{SIZE OF STANDARD FIELDS IN SCBLK
        !          3118: *
        !          3119: *      THE CHARACTERS OF THE STRING ARE STORED LEFT JUSTIFIED.
        !          3120: *      THE FINAL WORD IS PADDED ON THE RIGHT WITH ZEROS.
        !          3121: *      (I.E. THE CHARACTER WHOSE INTERNAL CODE IS ZERO).
        !          3122: *
        !          3123: *      THE VALUE OF SCLEN MAY NOT EXCEED MXLEN. THIS ENSURES
        !          3124: *      THAT CHARACTER OFFSETS (E.G. THE PATTERN MATCH CURSOR)
        !          3125: *      CAN BE CORRECTLY PROCESSED BY THE GARBAGE COLLECTOR.
        !          3126: *
        !          3127: *      NOTE THAT THE OFFSET TO THE CHARACTERS OF THE STRING
        !          3128: *      IS GIVEN IN BYTES BY CFP$F AND THAT THIS VALUE IS
        !          3129: *      AUTOMATICALLY ALLOWED FOR IN PLC, PSC.
        !          3130: *      NOTE THAT FOR A SPITBOL SCBLK, THE VALUE OF CFP$F
        !          3131: *      IS GIVEN BY CFP$B*SCHAR.
        !          3132: {{EJC{{{{
        !          3133: *
        !          3134: *      SIMPLE EXPRESSION BLOCK (SEBLK)
        !          3135: *
        !          3136: *      AN SEBLK IS USED TO REPRESENT AN EXPRESSION OF THE FORM
        !          3137: *      *(NATURAL VARIABLE). ALL OTHER EXPRESSIONS ARE EXBLKS.
        !          3138: *
        !          3139: *           +------------------------------------+
        !          3140: *           I                SETYP               I
        !          3141: *           +------------------------------------+
        !          3142: *           I                SEVAR               I
        !          3143: *           +------------------------------------+
        !          3144: *
        !          3145: {SETYP{EQU{0{{{PTR TO ROUTINE B$SEL TO LOAD EXPR
        !          3146: {SEVAR{EQU{SETYP+1{{{PTR TO VRBLK FOR VARIABLE
        !          3147: {SESI${EQU{SEVAR+1{{{LENGTH OF SEBLK IN WORDS
        !          3148: {{EJC{{{{
        !          3149: *
        !          3150: *      STANDARD VARIABLE BLOCK (SVBLK)
        !          3151: *
        !          3152: *      AN SVBLK IS ASSEMBLED IN THE CONSTANT SECTION FOR EACH
        !          3153: *      VARIABLE WHICH SATISFIES ONE OF THE FOLLOWING CONDITIONS.
        !          3154: *
        !          3155: *      1)   IT IS THE NAME OF A SYSTEM FUNCTION
        !          3156: *      2)   IT HAS AN INITIAL VALUE
        !          3157: *      3)   IT HAS A KEYWORD ASSOCIATION
        !          3158: *      4)   IT HAS A STANDARD I/O ASSOCIATION
        !          3159: *      6)   IT HAS A STANDARD LABEL ASSOCIATION
        !          3160: *
        !          3161: *      IF VRBLKS ARE CONSTRUCTED FOR ANY OF THESE VARIABLES,
        !          3162: *      THEN THE VRSVP FIELD POINTS TO THE SVBLK (SEE VRBLK)
        !          3163: *
        !          3164: *           +------------------------------------+
        !          3165: *           I                SVBIT               I
        !          3166: *           +------------------------------------+
        !          3167: *           I                SVLEN               I
        !          3168: *           +------------------------------------+
        !          3169: *           I                SVCHS               I
        !          3170: *           +------------------------------------+
        !          3171: *           I                SVKNM               I
        !          3172: *           +------------------------------------+
        !          3173: *           I                SVFNC               I
        !          3174: *           +------------------------------------+
        !          3175: *           I                SVNAR               I
        !          3176: *           +------------------------------------+
        !          3177: *           I                SVLBL               I
        !          3178: *           +------------------------------------+
        !          3179: *           I                SVVAL               I
        !          3180: *           +------------------------------------+
        !          3181: {{EJC{{{{
        !          3182: *
        !          3183: *      STANDARD VARIABLE BLOCK (CONTINUED)
        !          3184: *
        !          3185: {SVBIT{EQU{0{{{BIT STRING INDICATING ATTRIBUTES
        !          3186: {SVLEN{EQU{1{{{(=SCLEN) LENGTH OF NAME IN CHARS
        !          3187: {SVCHS{EQU{2{{{(=SCHAR) CHARACTERS OF NAME
        !          3188: {SVSI${EQU{2{{{NUMBER OF STANDARD FIELDS IN SVBLK
        !          3189: {SVPRE{EQU{1{{{SET IF PREEVALUATION PERMITTED
        !          3190: {SVFFC{EQU{SVPRE+SVPRE{{{SET ON IF FAST CALL PERMITTED
        !          3191: {SVCKW{EQU{SVFFC+SVFFC{{{SET ON IF KEYWORD VALUE CONSTANT
        !          3192: {SVPRD{EQU{SVCKW+SVCKW{{{SET ON IF PREDICATE FUNCTION
        !          3193: {SVNBT{EQU{4{{{NUMBER OF BITS TO RIGHT OF SVKNM
        !          3194: {SVKNM{EQU{SVPRD+SVPRD{{{SET ON IF KEYWORD ASSOCIATION
        !          3195: {SVFNC{EQU{SVKNM+SVKNM{{{SET ON IF SYSTEM FUNCTION
        !          3196: {SVNAR{EQU{SVFNC+SVFNC{{{SET ON IF SYSTEM FUNCTION
        !          3197: {SVLBL{EQU{SVNAR+SVNAR{{{SET ON IF SYSTEM LABEL
        !          3198: {SVVAL{EQU{SVLBL+SVLBL{{{SET ON IF PREDEFINED VALUE
        !          3199: *
        !          3200: *      NOTE THAT THE LAST FIVE BITS CORRESPOND IN ORDER
        !          3201: *      TO THE FIELDS WHICH ARE PRESENT (SEE PROCEDURE GTNVR).
        !          3202: *
        !          3203: *      THE FOLLOWING DEFINITIONS ARE USED IN THE SVBLK TABLE
        !          3204: *
        !          3205: {SVFNF{EQU{SVFNC+SVNAR{{{FUNCTION WITH NO FAST CALL
        !          3206: {SVFNN{EQU{SVFNF+SVFFC{{{FUNCTION WITH FAST CALL, NO PREEVAL
        !          3207: {SVFNP{EQU{SVFNN+SVPRE{{{FUNCTION ALLOWING PREEVALUATION
        !          3208: {SVFPR{EQU{SVFNN+SVPRD{{{PREDICATE FUNCTION
        !          3209: {SVFNK{EQU{SVFNN+SVKNM{{{NO PREEVAL FUNC + KEYWORD
        !          3210: {SVKWV{EQU{SVKNM+SVVAL{{{KEYWORD + VALUE
        !          3211: {SVKWC{EQU{SVCKW+SVKNM{{{KEYWORD WITH CONSTANT VALUE
        !          3212: {SVKVC{EQU{SVKWV+SVCKW{{{CONSTANT KEYWORD + VALUE
        !          3213: {SVKVL{EQU{SVKVC+SVLBL{{{CONSTANT KEYWORD + VALUE + LABEL
        !          3214: {SVFPK{EQU{SVFNP+SVKVC{{{PREEVAL FCN + CONST KEYWD + VAL
        !          3215: *
        !          3216: *      THE SVPRE BIT ALLOWS THE COMPILER TO PREEVALUATE A CALL
        !          3217: *      TO THE ASSOCIATED SYSTEM FUNCTION IF ALL THE ARGUMENTS
        !          3218: *      ARE THEMSELVES CONSTANTS. FUNCTIONS IN THIS CATEGORY
        !          3219: *      MUST HAVE NO SIDE EFFECTS AND MUST NEVER CAUSE FAILURE.
        !          3220: *      THE CALL MAY GENERATE AN ERROR CONDITION.
        !          3221: *
        !          3222: *      THE SVFFC BIT ALLOWS THE COMPILER TO GENERATE THE SPECIAL
        !          3223: *      FAST CALL AFTER ADJUSTING THE NUMBER OF ARGUMENTS. ONLY
        !          3224: *      THE ITEM AND APPLY FUNCTIONS FALL OUTSIDE THIS CATEGORY.
        !          3225: *
        !          3226: *      THE SVCKW BIT IS SET IF THE ASSOCIATED KEYWORD VALUE IS
        !          3227: *      A CONSTANT, THUS ALLOWING PREEVALUATION FOR A VALUE CALL.
        !          3228: *
        !          3229: *      THE SVPRD BIT IS SET ON FOR ALL PREDICATE FUNCTIONS TO
        !          3230: *      ENABLE THE SPECIAL CONCATENATION CODE OPTIMIZATION.
        !          3231: {{EJC{{{{
        !          3232: *
        !          3233: *      SVBLK (CONTINUED)
        !          3234: *
        !          3235: *      SVKNM                 KEYWORD NUMBER
        !          3236: *
        !          3237: *           SVKNM IS PRESENT ONLY FOR A STANDARD KEYWORD ASSOC.
        !          3238: *           IT CONTAINS A KEYWORD NUMBER AS DEFINED BY THE
        !          3239: *           KEYWORD NUMBER TABLE GIVEN LATER ON.
        !          3240: *
        !          3241: *      SVFNC                 SYSTEM FUNCTION POINTER
        !          3242: *
        !          3243: *           SVFNC IS PRESENT ONLY FOR A SYSTEM FUNCTION ASSOC.
        !          3244: *           IT IS A POINTER TO THE ACTUAL CODE FOR THE SYSTEM
        !          3245: *           FUNCTION. THE GENERATED CODE FOR A FAST CALL IS A
        !          3246: *           POINTER TO THE SVFNC FIELD OF THE SVBLK FOR THE
        !          3247: *           FUNCTION. THE VRFNC FIELD OF THE VRBLK POINTS TO
        !          3248: *           THIS SAME FIELD, IN WHICH CASE, IT SERVES AS THE
        !          3249: *           FCODE FIELD FOR THE FUNCTION CALL.
        !          3250: *
        !          3251: *      SVNAR                 NUMBER OF FUNCTION ARGUMENTS
        !          3252: *
        !          3253: *           SVNAR IS PRESENT ONLY FOR A SYSTEM FUNCTION ASSOC.
        !          3254: *           IT IS THE NUMBER OF ARGUMENTS REQUIRED FOR A CALL
        !          3255: *           TO THE SYSTEM FUNCTION. THE COMPILER USES THIS
        !          3256: *           VALUE TO ADJUST THE NUMBER OF ARGUMENTS IN A FAST
        !          3257: *           CALL AND IN THE CASE OF A FUNCTION CALLED THROUGH
        !          3258: *           THE VRFNC FIELD OF THE VRBLK, THE SVNAR FIELD
        !          3259: *           SERVES AS THE FARGS FIELD FOR O$FNC. A SPECIAL
        !          3260: *           CASE OCCURS IF THIS VALUE IS SET TO 999. THIS IS
        !          3261: *           USED TO INDICATE THAT THE FUNCTION HAS A VARIABLE
        !          3262: *           NUMBER OF ARGUMENTS AND CAUSES O$FNC TO PASS CONTROL
        !          3263: *           WITHOUT ADJUSTING THE ARGUMENT COUNT. THE ONLY
        !          3264: *           PREDEFINED FUNCTIONS USING THIS ARE APPLY AND ITEM.
        !          3265: *
        !          3266: *      SVLBL                 SYSTEM LABEL POINTER
        !          3267: *
        !          3268: *           SVLBL IS PRESENT ONLY FOR A STANDARD LABEL ASSOC.
        !          3269: *           IT IS A POINTER TO A SYSTEM LABEL ROUTINE (L$XXX).
        !          3270: *           THE VRLBL FIELD OF THE CORRESPONDING VRBLK POINTS TO
        !          3271: *           THE SVLBL FIELD OF THE SVBLK.
        !          3272: *
        !          3273: *      SVVAL                 SYSTEM VALUE POINTER
        !          3274: *
        !          3275: *           SVVAL IS PRESENT ONLY FOR A STANDARD VALUE.
        !          3276: *           IT IS A POINTER TO THE PATTERN NODE (NDXXX) WHICH
        !          3277: *           IS THE STANDARD INITIAL VALUE OF THE VARIABLE.
        !          3278: *           THIS VALUE IS COPIED TO THE VRVAL FIELD OF THE VRBLK
        !          3279: {{EJC{{{{
        !          3280: *
        !          3281: *      SVBLK (CONTINUED)
        !          3282: *
        !          3283: *      KEYWORD NUMBER TABLE
        !          3284: *
        !          3285: *      THE FOLLOWING TABLE GIVES SYMBOLIC NAMES FOR KEYWORD
        !          3286: *      NUMBERS. THESE VALUES ARE STORED IN THE SVKNM FIELD OF
        !          3287: *      SVBLKS AND IN THE KVNUM FIELD OF KVBLKS. SEE ALSO
        !          3288: *      PROCEDURES ASIGN, ACESS AND KWNAM.
        !          3289: *
        !          3290: *      UNPROTECTED KEYWORDS WITH ONE WORD INTEGER VALUES
        !          3291: *
        !          3292: {K$ABE{EQU{0{{{ABEND
        !          3293: {K$ANC{EQU{K$ABE+CFP$B{{{ANCHOR
        !          3294: {K$CAS{EQU{K$ANC+CFP$B{{{CASE
        !          3295: {K$COD{EQU{K$CAS+CFP$B{{{CODE
        !          3296: {K$DMP{EQU{K$COD+CFP$B{{{DUMP
        !          3297: {K$ERL{EQU{K$DMP+CFP$B{{{ERRLIMIT
        !          3298: {K$ERT{EQU{K$ERL+CFP$B{{{ERRTYPE
        !          3299: {K$FTR{EQU{K$ERT+CFP$B{{{FTRACE
        !          3300: {K$INP{EQU{K$FTR+CFP$B{{{INPUT
        !          3301: {K$MXL{EQU{K$INP+CFP$B{{{MAXLENGTH
        !          3302: {K$OUP{EQU{K$MXL+CFP$B{{{OUTPUT
        !          3303: {K$PFL{EQU{K$OUP+CFP$B{{{PROFILE
        !          3304: {K$TRA{EQU{K$PFL+CFP$B{{{TRACE
        !          3305: {K$TRM{EQU{K$TRA+CFP$B{{{TRIM
        !          3306: *
        !          3307: *      PROTECTED KEYWORDS WITH ONE WORD INTEGER VALUES
        !          3308: *
        !          3309: {K$FNC{EQU{K$TRM+CFP$B{{{FNCLEVEL
        !          3310: {K$LST{EQU{K$FNC+CFP$B{{{LASTNO
        !          3311: {K$STN{EQU{K$LST+CFP$B{{{STNO
        !          3312: *
        !          3313: *      KEYWORDS WITH CONSTANT PATTERN VALUES
        !          3314: *
        !          3315: {K$ABO{EQU{K$STN+CFP$B{{{ABORT
        !          3316: {K$ARB{EQU{K$ABO+PASI${{{ARB
        !          3317: {K$BAL{EQU{K$ARB+PASI${{{BAL
        !          3318: {K$FAL{EQU{K$BAL+PASI${{{FAIL
        !          3319: {K$FEN{EQU{K$FAL+PASI${{{FENCE
        !          3320: {K$REM{EQU{K$FEN+PASI${{{REM
        !          3321: {K$SUC{EQU{K$REM+PASI${{{SUCCEED
        !          3322: {{EJC{{{{
        !          3323: *
        !          3324: *      KEYWORD NUMBER TABLE (CONTINUED)
        !          3325: *
        !          3326: *      SPECIAL KEYWORDS
        !          3327: *
        !          3328: {K$ALP{EQU{K$SUC+1{{{ALPHABET
        !          3329: {K$RTN{EQU{K$ALP+1{{{RTNTYPE
        !          3330: {K$STC{EQU{K$RTN+1{{{STCOUNT
        !          3331: {K$ETX{EQU{K$STC+1{{{ERRTEXT
        !          3332: {K$STL{EQU{K$ETX+1{{{STLIMIT
        !          3333: *
        !          3334: *      RELATIVE OFFSETS OF SPECIAL KEYWORDS
        !          3335: *
        !          3336: {K$$AL{EQU{K$ALP-K$ALP{{{ALPHABET
        !          3337: {K$$RT{EQU{K$RTN-K$ALP{{{RTNTYPE
        !          3338: {K$$SC{EQU{K$STC-K$ALP{{{STCOUNT
        !          3339: {K$$ET{EQU{K$ETX-K$ALP{{{ERRTEXT
        !          3340: {K$$SL{EQU{K$STL-K$ALP{{{STLIMIT
        !          3341: *
        !          3342: *      SYMBOLS USED IN ASIGN AND ACESS PROCEDURES
        !          3343: *
        !          3344: {K$P$${EQU{K$FNC{{{FIRST PROTECTED KEYWORD
        !          3345: {K$V$${EQU{K$ABO{{{FIRST KEYWORD WITH CONSTANT VALUE
        !          3346: {K$S$${EQU{K$ALP{{{FIRST KEYWORD WITH SPECIAL ACESS
        !          3347: {{EJC{{{{
        !          3348: *
        !          3349: *      FORMAT OF A TABLE BLOCK (TBBLK)
        !          3350: *
        !          3351: *      A TABLE BLOCK IS USED TO REPRESENT A TABLE VALUE.
        !          3352: *      IT IS BUILT BY A CALL TO THE TABLE OR CONVERT FUNCTIONS.
        !          3353: *
        !          3354: *           +------------------------------------+
        !          3355: *           I                TBTYP               I
        !          3356: *           +------------------------------------+
        !          3357: *           I                IDVAL               I
        !          3358: *           +------------------------------------+
        !          3359: *           I                TBLEN               I
        !          3360: *           +------------------------------------+
        !          3361: *           +------------------------------------+
        !          3362: *           I                TBINV               I
        !          3363: *           +------------------------------------+
        !          3364: *           /                                    /
        !          3365: *           /                TBBUK               /
        !          3366: *           /                                    /
        !          3367: *           +------------------------------------+
        !          3368: *
        !          3369: {TBTYP{EQU{0{{{POINTER TO DUMMY ROUTINE B$TBT
        !          3370: {TBLEN{EQU{OFFS2{{{LENGTH OF TBBLK IN BYTES
        !          3371: {TBINV{EQU{OFFS3{{{DEFAULT INITIAL LOOKUP VALUE
        !          3372: {TBBUK{EQU{TBINV+1{{{START OF HASH BUCKET POINTERS
        !          3373: {TBSI${EQU{TBBUK{{{SIZE OF STANDARD FIELDS IN TBBLK
        !          3374: {TBNBK{EQU{11{{{DEFAULT NO. OF BUCKETS
        !          3375: *
        !          3376: *      THE TABLE BLOCK IS A HASH TABLE WHICH POINTS TO CHAINS
        !          3377: *      OF TABLE ELEMENT BLOCKS REPRESENTING THE ELEMENTS
        !          3378: *      IN THE TABLE WHICH HASH INTO THE SAME BUCKET.
        !          3379: *
        !          3380: *      TBBUK ENTRIES EITHER POINT TO THE FIRST TEBLK ON THE
        !          3381: *      CHAIN OR THEY POINT TO THE TBBLK ITSELF TO INDICATE THE
        !          3382: *      END OF THE CHAIN.
        !          3383: {{EJC{{{{
        !          3384: *
        !          3385: *      TABLE ELEMENT BLOCK (TEBLK)
        !          3386: *
        !          3387: *      A TABLE ELEMENT IS USED TO REPRESENT A SINGLE ENTRY IN
        !          3388: *      A TABLE (SEE DESCRIPTION OF TBBLK FORMAT FOR HASH TABLE)
        !          3389: *
        !          3390: *           +------------------------------------+
        !          3391: *           I                TETYP               I
        !          3392: *           +------------------------------------+
        !          3393: *           I                TESUB               I
        !          3394: *           +------------------------------------+
        !          3395: *           I                TEVAL               I
        !          3396: *           +------------------------------------+
        !          3397: *           I                TENXT               I
        !          3398: *           +------------------------------------+
        !          3399: *
        !          3400: {TETYP{EQU{0{{{POINTER TO DUMMY ROUTINE B$TET
        !          3401: {TESUB{EQU{TETYP+1{{{SUBSCRIPT VALUE
        !          3402: {TEVAL{EQU{TESUB+1{{{(=VRVAL) TABLE ELEMENT VALUE
        !          3403: {TENXT{EQU{TEVAL+1{{{LINK TO NEXT TEBLK
        !          3404: *      SEE S$CNV WHERE RELATION IS ASSUMED WITH TENXT AND TBBUK
        !          3405: {TESI${EQU{TENXT+1{{{SIZE OF TEBLK IN WORDS
        !          3406: *
        !          3407: *      TENXT POINTS TO THE NEXT TEBLK ON THE HASH CHAIN FROM THE
        !          3408: *      TBBUK CHAIN FOR THIS HASH INDEX. AT THE END OF THE CHAIN,
        !          3409: *      TENXT POINTS BACK TO THE START OF THE TBBLK.
        !          3410: *
        !          3411: *      TEVAL CONTAINS A DATA POINTER OR A TRBLK POINTER.
        !          3412: *
        !          3413: *      TESUB CONTAINS A DATA POINTER.
        !          3414: {{EJC{{{{
        !          3415: *
        !          3416: *      TRAP BLOCK (TRBLK)
        !          3417: *
        !          3418: *      A TRAP BLOCK IS USED TO REPRESENT A TRACE OR INPUT OR
        !          3419: *      OUTPUT ASSOCIATION IN RESPONSE TO A CALL TO THE TRACE
        !          3420: *      INPUT OR OUTPUT SYSTEM FUNCTIONS. SEE BELOW FOR DETAILS
        !          3421: *
        !          3422: *           +------------------------------------+
        !          3423: *           I                TRIDN               I
        !          3424: *           +------------------------------------+
        !          3425: *           I                TRTYP               I
        !          3426: *           +------------------------------------+
        !          3427: *           I  TRVAL OR TRLBL OR TRNXT OR TRKVR  I
        !          3428: *           +------------------------------------+
        !          3429: *           I       TRTAG OR TRTER OR TRTRF      I
        !          3430: *           +------------------------------------+
        !          3431: *           I            TRFNC OR TRFPT          I
        !          3432: *           +------------------------------------+
        !          3433: *
        !          3434: {TRIDN{EQU{0{{{POINTER TO DUMMY ROUTINE B$TRT
        !          3435: {TRTYP{EQU{TRIDN+1{{{TRAP TYPE CODE
        !          3436: {TRVAL{EQU{TRTYP+1{{{VALUE OF TRAPPED VARIABLE (=VRVAL)
        !          3437: {TRNXT{EQU{TRVAL{{{PTR TO NEXT TRBLK ON TRBLK CHAIN
        !          3438: {TRLBL{EQU{TRVAL{{{PTR TO ACTUAL LABEL (TRACED LABEL)
        !          3439: {TRKVR{EQU{TRVAL{{{VRBLK POINTER FOR KEYWORD TRACE
        !          3440: {TRTAG{EQU{TRVAL+1{{{TRACE TAG
        !          3441: {TRTER{EQU{TRTAG{{{PTR TO TERMINAL VRBLK OR NULL
        !          3442: {TRTRF{EQU{TRTAG{{{PTR TO TRBLK HOLDING FCBLK PTR
        !          3443: {TRFNC{EQU{TRTAG+1{{{TRACE FUNCTION VRBLK (ZERO IF NONE)
        !          3444: {TRFPT{EQU{TRFNC{{{FCBLK PTR FOR SYSIO
        !          3445: {TRSI${EQU{TRFNC+1{{{NUMBER OF WORDS IN TRBLK
        !          3446: *
        !          3447: {TRTIN{EQU{0{{{TRACE TYPE FOR INPUT ASSOCIATION
        !          3448: {TRTAC{EQU{TRTIN+1{{{TRACE TYPE FOR ACCESS TRACE
        !          3449: {TRTVL{EQU{TRTAC+1{{{TRACE TYPE FOR VALUE TRACE
        !          3450: {TRTOU{EQU{TRTVL+1{{{TRACE TYPE FOR OUTPUT ASSOCIATION
        !          3451: {TRTFC{EQU{TRTOU+1{{{TRACE TYPE FOR FCBLK IDENTIFICATION
        !          3452: {{EJC{{{{
        !          3453: *
        !          3454: *      TRAP BLOCK (CONTINUED)
        !          3455: *
        !          3456: *      VARIABLE INPUT ASSOCIATION
        !          3457: *
        !          3458: *           THE VALUE FIELD OF THE VARIABLE POINTS TO A TRBLK
        !          3459: *           INSTEAD OF CONTAINING THE DATA VALUE. IN THE CASE
        !          3460: *           OF A NATURAL VARIABLE, THE VRGET AND VRSTO FIELDS
        !          3461: *           CONTAIN =B$VRA AND =B$VRV TO ACTIVATE THE CHECK.
        !          3462: *
        !          3463: *           TRTYP IS SET TO TRTIN
        !          3464: *           TRNXT POINTS TO NEXT TRBLK OR TRVAL HAS VARIABLE VAL
        !          3465: *           TRTER IS A POINTER TO SVBLK IF ASSOCIATION IS
        !          3466: *           FOR INPUT, TERMINAL, ELSE IT IS NULL.
        !          3467: *           TRTRF POINTS TO THE TRAP BLOCK WHICH IN TURN POINTS
        !          3468: *           TO AN FCBLK USED FOR I/O ASSOCIATION.
        !          3469: *           TRFPT IS THE FCBLK PTR RETURNED BY SYSIO.
        !          3470: *
        !          3471: *      VARIABLE ACCESS TRACE ASSOCIATION
        !          3472: *
        !          3473: *           THE VALUE FIELD OF THE VARIABLE POINTS TO A TRBLK
        !          3474: *           INSTEAD OF CONTAINING THE DATA VALUE. IN THE CASE
        !          3475: *           OF A NATURAL VARIABLE, THE VRGET AND VRSTO FIELDS
        !          3476: *           CONTAIN =B$VRA AND =B$VRV TO ACTIVATE THE CHECK.
        !          3477: *
        !          3478: *           TRTYP IS SET TO TRTAC
        !          3479: *           TRNXT POINTS TO NEXT TRBLK OR TRVAL HAS VARIABLE VAL
        !          3480: *           TRTAG IS THE TRACE TAG (0 IF NONE)
        !          3481: *           TRFNC IS THE TRACE FUNCTION VRBLK PTR (0 IF NONE)
        !          3482: *
        !          3483: *      VARIABLE VALUE TRACE ASSOCIATION
        !          3484: *
        !          3485: *           THE VALUE FIELD OF THE VARIABLE POINTS TO A TRBLK
        !          3486: *           INSTEAD OF CONTAINING THE DATA VALUE. IN THE CASE
        !          3487: *           OF A NATURAL VARIABLE, THE VRGET AND VRSTO FIELDS
        !          3488: *           CONTAIN =B$VRA AND =B$VRV TO ACTIVATE THE CHECK.
        !          3489: *
        !          3490: *           TRTYP IS SET TO TRTVL
        !          3491: *           TRNXT POINTS TO NEXT TRBLK OR TRVAL HAS VARIABLE VAL
        !          3492: *           TRTAG IS THE TRACE TAG (0 IF NONE)
        !          3493: *           TRFNC IS THE TRACE FUNCTION VRBLK PTR (0 IF NONE)
        !          3494: {{EJC{{{{
        !          3495: *      TRAP BLOCK (CONTINUED)
        !          3496: *
        !          3497: *      VARIABLE OUTPUT ASSOCIATION
        !          3498: *
        !          3499: *           THE VALUE FIELD OF THE VARIABLE POINTS TO A TRBLK
        !          3500: *           INSTEAD OF CONTAINING THE DATA VALUE. IN THE CASE
        !          3501: *           OF A NATURAL VARIABLE, THE VRGET AND VRSTO FIELDS
        !          3502: *           CONTAIN =B$VRA AND =B$VRV TO ACTIVATE THE CHECK.
        !          3503: *
        !          3504: *           TRTYP IS SET TO TRTOU
        !          3505: *           TRNXT POINTS TO NEXT TRBLK OR TRVAL HAS VARIABLE VAL
        !          3506: *           TRTER IS A POINTER TO SVBLK IF ASSOCIATION IS
        !          3507: *           FOR OUTPUT, TERMINAL, ELSE IT IS NULL.
        !          3508: *           TRTRF POINTS TO THE TRAP BLOCK WHICH IN TURN POINTS
        !          3509: *           TO AN FCBLK USED FOR I/O ASSOCIATION.
        !          3510: *           TRFPT IS THE FCBLK PTR RETURNED BY SYSIO.
        !          3511: *
        !          3512: *      FUNCTION CALL TRACE
        !          3513: *
        !          3514: *           THE PFCTR FIELD OF THE CORRESPONDING PFBLK IS SET
        !          3515: *           TO POINT TO A TRBLK.
        !          3516: *
        !          3517: *           TRTYP IS SET TO TRTIN
        !          3518: *           TRNXT IS ZERO
        !          3519: *           TRTAG IS THE TRACE TAG (0 IF NONE)
        !          3520: *           TRFNC IS THE TRACE FUNCTION VRBLK PTR (0 IF NONE)
        !          3521: *
        !          3522: *      FUNCTION RETURN TRACE
        !          3523: *
        !          3524: *           THE PFRTR FIELD OF THE CORRESPONDING PFBLK IS SET
        !          3525: *           TO POINT TO A TRBLK
        !          3526: *
        !          3527: *           TRTYP IS SET TO TRTIN
        !          3528: *           TRNXT IS ZERO
        !          3529: *           TRTAG IS THE TRACE TAG (0 IF NONE)
        !          3530: *           TRFNC IS THE TRACE FUNCTION VRBLK PTR (0 IF NONE)
        !          3531: *
        !          3532: *      LABEL TRACE
        !          3533: *
        !          3534: *           THE VRLBL OF THE VRBLK FOR THE LABEL IS
        !          3535: *           CHANGED TO POINT TO A TRBLK AND THE VRTRA FIELD IS
        !          3536: *           SET TO B$VRT TO ACTIVATE THE CHECK.
        !          3537: *
        !          3538: *           TRTYP IS SET TO TRTIN
        !          3539: *           TRLBL POINTS TO THE ACTUAL LABEL (CDBLK) VALUE
        !          3540: *           TRTAG IS THE TRACE TAG (0 IF NONE)
        !          3541: *           TRFNC IS THE TRACE FUNCTION VRBLK PTR (0 IF NONE)
        !          3542: {{EJC{{{{
        !          3543: *
        !          3544: *      TRAP BLOCK (CONTINUED)
        !          3545: *
        !          3546: *      KEYWORD TRACE
        !          3547: *
        !          3548: *           KEYWORDS WHICH CAN BE TRACED POSSESS A UNIQUE
        !          3549: *           LOCATION WHICH IS ZERO IF THERE IS NO TRACE AND
        !          3550: *           POINTS TO A TRBLK IF THERE IS A TRACE. THE LOCATIONS
        !          3551: *           ARE AS FOLLOWS.
        !          3552: *
        !          3553: *           R$ERT            ERRTYPE
        !          3554: *           R$FNC            FNCLEVEL
        !          3555: *           R$STC            STCOUNT
        !          3556: *
        !          3557: *           THE FORMAT OF THE TRBLK IS AS FOLLOWS.
        !          3558: *
        !          3559: *           TRTYP IS SET TO TRTIN
        !          3560: *           TRKVR IS A POINTER TO THE VRBLK FOR THE KEYWORD
        !          3561: *           TRTAG IS THE TRACE TAG (0 IF NONE)
        !          3562: *           TRFNC IS THE TRACE FUNCTION VRBLK PTR (0 IF NONE)
        !          3563: *
        !          3564: *      INPUT/OUTPUT FILE ARG1 TRAP BLOCK
        !          3565: *
        !          3566: *           THE VALUE FIELD OF THE VARIABLE POINTS TO A TRBLK
        !          3567: *           INSTEAD OF CONTAINING THE DATA VALUE. IN THE CASE OF
        !          3568: *           A NATURAL VARIABLE, THE VRGET AND VRSTO FIELDS
        !          3569: *           CONTAIN =B$VRA AND =B$VRV. THIS TRAP BLOCK IS USED
        !          3570: *           TO HOLD A POINTER TO THE FCBLK WHICH AN
        !          3571: *           IMPLEMENTATION MAY REQUEST TO HOLD INFORMATION
        !          3572: *           ABOUT A FILE.
        !          3573: *
        !          3574: *           TRTYP IS SET TO TRTFC
        !          3575: *           TRNEXT POINTS TO NEXT TRBLK OR TRVAL IS VARIABLE VAL
        !          3576: *           TRFNM IS 0
        !          3577: *           TRFPT IS THE FCBLK POINTER.
        !          3578: *
        !          3579: *      NOTE THAT WHEN MULTIPLE TRAPS ARE SET ON A VARIABLE
        !          3580: *      THE ORDER IS IN ASCENDING VALUE OF TRTYP FIELD.
        !          3581: *
        !          3582: *      INPUT ASSOCIATION (IF PRESENT)
        !          3583: *      ACCESS TRACE (IF PRESENT)
        !          3584: *      VALUE TRACE (IF PRESENT)
        !          3585: *      OUTPUT ASSOCIATION (IF PRESENT)
        !          3586: *
        !          3587: *      THE ACTUAL VALUE OF THE VARIABLE IS STORED IN THE TRVAL
        !          3588: *      FIELD OF THE LAST TRBLK ON THE CHAIN.
        !          3589: *
        !          3590: *      THIS IMPLEMENTATION DOES NOT PERMIT TRACE OR I/O
        !          3591: *      ASSOCIATIONS TO ANY OF THE PSEUDO-VARIABLES.
        !          3592: {{EJC{{{{
        !          3593: *
        !          3594: *      VECTOR BLOCK (VCBLK)
        !          3595: *
        !          3596: *      A VCBLK IS USED TO REPRESENT AN ARRAY VALUE WHICH HAS
        !          3597: *      ONE DIMENSION WHOSE LOWER BOUND IS ONE. ALL OTHER ARRAYS
        !          3598: *      ARE REPRESENTED BY ARBLKS. A VCBLK IS CREATED BY THE
        !          3599: *      SYSTEM FUNCTION ARRAY (S$ARR) WHEN PASSED AN INTEGER ARG.
        !          3600: *
        !          3601: *           +------------------------------------+
        !          3602: *           I                VCTYP               I
        !          3603: *           +------------------------------------+
        !          3604: *           I                IDVAL               I
        !          3605: *           +------------------------------------+
        !          3606: *           I                VCLEN               I
        !          3607: *           +------------------------------------+
        !          3608: *           I                VCVLS               I
        !          3609: *           +------------------------------------+
        !          3610: *
        !          3611: {VCTYP{EQU{0{{{POINTER TO DUMMY ROUTINE B$VCT
        !          3612: {VCLEN{EQU{OFFS2{{{LENGTH OF VCBLK IN BYTES
        !          3613: {VCVLS{EQU{OFFS3{{{START OF VECTOR VALUES
        !          3614: {VCSI${EQU{VCVLS{{{SIZE OF STANDARD FIELDS IN VCBLK
        !          3615: {VCVLB{EQU{VCVLS-1{{{OFFSET ONE WORD BEHIND VCVLS
        !          3616: {VCTBD{EQU{TBSI$-VCSI${{{DIFFERENCE IN SIZES - SEE PRTVL
        !          3617: *
        !          3618: *      VCVLS ARE EITHER DATA POINTERS OR TRBLK POINTERS
        !          3619: *
        !          3620: *      THE DIMENSION CAN BE DEDUCED FROM VCLEN.
        !          3621: {{EJC{{{{
        !          3622: *
        !          3623: *      VARIABLE BLOCK (VRBLK)
        !          3624: *
        !          3625: *      A VARIABLE BLOCK IS BUILT IN THE STATIC MEMORY AREA
        !          3626: *      FOR EVERY VARIABLE REFERENCED OR CREATED BY A PROGRAM.
        !          3627: *
        !          3628: *      NOTE THAT SINCE THESE BLOCKS ONLY OCCUR IN THE STATIC
        !          3629: *      REGION, IT IS PERMISSIBLE TO POINT TO ANY WORD IN
        !          3630: *      THE BLOCK AND THIS IS USED TO PROVIDE THREE DISTINCT
        !          3631: *      ACCESS POINTS FROM THE GENERATED CODE AS FOLLOWS.
        !          3632: *
        !          3633: *      1)   POINT TO VRGET (FIRST WORD OF VRBLK) TO LOAD THE
        !          3634: *           VALUE OF THE VARIABLE ONTO THE MAIN STACK.
        !          3635: *
        !          3636: *      2)   POINT TO VRSTO (SECOND WORD OF VRBLK) TO STORE THE
        !          3637: *           TOP STACK ELEMENT AS THE VALUE OF THE VARIABLE.
        !          3638: *
        !          3639: *      3)   POINT TO VRTRA (FOURTH WORD OF VRBLK) TO JUMP TO
        !          3640: *           THE LABEL ASSOCIATED WITH THE VARIABLE NAME.
        !          3641: *
        !          3642: *           +------------------------------------+
        !          3643: *           I                VRGET               I
        !          3644: *           +------------------------------------+
        !          3645: *           I                VRSTO               I
        !          3646: *           +------------------------------------+
        !          3647: *           I                VRVAL               I
        !          3648: *           +------------------------------------+
        !          3649: *           I                VRTRA               I
        !          3650: *           +------------------------------------+
        !          3651: *           I                VRLBL               I
        !          3652: *           +------------------------------------+
        !          3653: *           I                VRFNC               I
        !          3654: *           +------------------------------------+
        !          3655: *           I                VRNXT               I
        !          3656: *           +------------------------------------+
        !          3657: *           I                VRLEN               I
        !          3658: *           +------------------------------------+
        !          3659: *           /                                    /
        !          3660: *           /            VRCHS = VRSVP           /
        !          3661: *           /                                    /
        !          3662: *           +------------------------------------+
        !          3663: {{EJC{{{{
        !          3664: *
        !          3665: *      VARIABLE BLOCK (CONTINUED)
        !          3666: *
        !          3667: {VRGET{EQU{0{{{POINTER TO ROUTINE TO LOAD VALUE
        !          3668: {VRSTO{EQU{VRGET+1{{{POINTER TO ROUTINE TO STORE VALUE
        !          3669: {VRVAL{EQU{VRSTO+1{{{VARIABLE VALUE
        !          3670: {VRVLO{EQU{VRVAL-VRSTO{{{OFFSET TO VALUE FROM STORE FIELD
        !          3671: {VRTRA{EQU{VRVAL+1{{{POINTER TO ROUTINE TO JUMP TO LABEL
        !          3672: {VRLBL{EQU{VRTRA+1{{{POINTER TO CODE FOR LABEL
        !          3673: {VRLBO{EQU{VRLBL-VRTRA{{{OFFSET TO LABEL FROM TRANSFER FIELD
        !          3674: {VRFNC{EQU{VRLBL+1{{{POINTER TO FUNCTION BLOCK
        !          3675: {VRNXT{EQU{VRFNC+1{{{POINTER TO NEXT VRBLK ON HASH CHAIN
        !          3676: {VRLEN{EQU{VRNXT+1{{{LENGTH OF NAME (OR ZERO)
        !          3677: {VRCHS{EQU{VRLEN+1{{{CHARACTERS OF NAME (VRLEN GT 0)
        !          3678: {VRSVP{EQU{VRLEN+1{{{PTR TO SVBLK (VRLEN EQ 0)
        !          3679: {VRSI${EQU{VRCHS+1{{{NUMBER OF STANDARD FIELDS IN VRBLK
        !          3680: {VRSOF{EQU{VRLEN-SCLEN{{{OFFSET TO DUMMY SCBLK FOR NAME
        !          3681: {VRSVO{EQU{VRSVP-VRSOF{{{PSEUDO-OFFSET TO VRSVP FIELD
        !          3682: *
        !          3683: *      VRGET = B$VRL IF NOT INPUT ASSOCIATED OR ACCESS TRACED
        !          3684: *      VRGET = B$VRA IF INPUT ASSOCIATED OR ACCESS TRACED
        !          3685: *
        !          3686: *      VRSTO = B$VRS IF NOT OUTPUT ASSOCIATED OR VALUE TRACED
        !          3687: *      VRSTO = B$VRV IF OUTPUT ASSOCIATED OR VALUE TRACED
        !          3688: *      VRSTO = B$VRE IF VALUE IS PROTECTED PATTERN VALUE
        !          3689: *
        !          3690: *      VRVAL POINTS TO THE APPROPRIATE VALUE UNLESS THE
        !          3691: *      VARIABLE IS I/O/TRACE ASSOCIATED IN WHICH CASE, VRVAL
        !          3692: *      POINTS TO AN APPROPRIATE TRBLK (TRAP BLOCK) CHAIN.
        !          3693: *
        !          3694: *      VRTRA = B$VRG IF THE LABEL IS NOT TRACED
        !          3695: *      VRTRA = B$VRT IF THE LABEL IS TRACED
        !          3696: *
        !          3697: *      VRLBL POINTS TO A CDBLK IF THERE IS A LABEL
        !          3698: *      VRLBL POINTS TO THE SVBLK SVLBL FIELD FOR A SYSTEM LABEL
        !          3699: *      VRLBL POINTS TO STNDL FOR AN UNDEFINED LABEL
        !          3700: *      VRLBL POINTS TO A TRBLK IF THE LABEL IS TRACED
        !          3701: *
        !          3702: *      VRFNC POINTS TO A FFBLK FOR A FIELD FUNCTION
        !          3703: *      VRFNC POINTS TO A DFBLK FOR A DATATYPE FUNCTION
        !          3704: *      VRFNC POINTS TO A PFBLK FOR A PROGRAM DEFINED FUNCTION
        !          3705: *      VRFNC POINTS TO A EFBLK FOR AN EXTERNAL LOADED FUNCTION
        !          3706: *      VRFNC POINTS TO SVFNC (SVBLK) FOR A SYSTEM FUNCTION
        !          3707: *      VRFNC POINTS TO STNDF IF THE FUNCTION IS UNDEFINED
        !          3708: *
        !          3709: *      VRNXT POINTS TO THE NEXT VRBLK ON THIS CHAIN UNLESS
        !          3710: *      THIS IS THE END OF THE CHAIN IN WHICH CASE IT IS ZERO.
        !          3711: *
        !          3712: *      VRLEN IS THE NAME LENGTH FOR A NON-SYSTEM VARIABLE.
        !          3713: *      VRLEN IS ZERO FOR A SYSTEM VARIABLE.
        !          3714: *
        !          3715: *      VRCHS IS THE NAME (LJRZ) IF VRLEN IS NON-ZERO.
        !          3716: *      VRSVP IS A PTR TO THE SVBLK IF VRLEN IS ZERO.
        !          3717: {{EJC{{{{
        !          3718: *
        !          3719: *      FORMAT OF A NON-RELOCATABLE EXTERNAL BLOCK (XNBLK)
        !          3720: *
        !          3721: *      AN XNBLK IS A BLOCK REPRESENTING AN UNKNOWN (EXTERNAL)
        !          3722: *      DATA VALUE. THE BLOCK CONTAINS NO POINTERS TO OTHER
        !          3723: *      RELOCATABLE BLOCKS. AN XNBLK IS USED BY EXTERNAL FUNCTION
        !          3724: *      PROCESSING OR POSSIBLY FOR SYSTEM I/O ROUTINES ETC.
        !          3725: *      THE MACRO-SYSTEM ITSELF DOES NOT USE XNBLKS.
        !          3726: *      THIS TYPE OF BLOCK MAY BE USED AS A FILE CONTROL BLOCK.
        !          3727: *      SEE SYSFC,SYSIN,SYSOU,S$INP,S$OUP FOR DETAILS.
        !          3728: *
        !          3729: *           +------------------------------------+
        !          3730: *           I                XNTYP               I
        !          3731: *           +------------------------------------+
        !          3732: *           I                XNLEN               I
        !          3733: *           +------------------------------------+
        !          3734: *           /                                    /
        !          3735: *           /                XNDTA               /
        !          3736: *           /                                    /
        !          3737: *           +------------------------------------+
        !          3738: *
        !          3739: {XNTYP{EQU{0{{{POINTER TO DUMMY ROUTINE B$XNT
        !          3740: {XNLEN{EQU{XNTYP+1{{{LENGTH OF XNBLK IN BYTES
        !          3741: {XNDTA{EQU{XNLEN+1{{{DATA WORDS
        !          3742: {XNSI${EQU{XNDTA{{{SIZE OF STANDARD FIELDS IN XNBLK
        !          3743: *
        !          3744: *      NOTE THAT THE TERM NON-RELOCATABLE REFERS TO THE CONTENTS
        !          3745: *      AND NOT THE BLOCK ITSELF. AN XNBLK CAN BE MOVED AROUND IF
        !          3746: *      IT IS BUILT IN THE DYNAMIC MEMORY AREA.
        !          3747: {{EJC{{{{
        !          3748: *
        !          3749: *      RELOCATABLE EXTERNAL BLOCK (XRBLK)
        !          3750: *
        !          3751: *      AN XRBLK IS A BLOCK REPRESENTING AN UNKNOWN (EXTERNAL)
        !          3752: *      DATA VALUE. THE DATA AREA IN THIS BLOCK CONSISTS ONLY
        !          3753: *      OF ADDRESS VALUES AND ANY ADDRESSES POINTING INTO THE
        !          3754: *      DYNAMIC MEMORY AREA MUST POINT TO THE START OF OTHER
        !          3755: *      DATA BLOCKS. SEE ALSO DESCRIPTION OF XNBLK.
        !          3756: *      THIS TYPE OF BLOCK MAY BE USED AS A FILE CONTROL BLOCK.
        !          3757: *      SEE SYSFC,SYSIN,SYSOU,S$INP,S$OUP FOR DETAILS.
        !          3758: *
        !          3759: *           +------------------------------------+
        !          3760: *           I                XRTYP               I
        !          3761: *           +------------------------------------+
        !          3762: *           I                XRLEN               I
        !          3763: *           +------------------------------------+
        !          3764: *           /                                    /
        !          3765: *           /                XRPTR               /
        !          3766: *           /                                    /
        !          3767: *           +------------------------------------+
        !          3768: *
        !          3769: {XRTYP{EQU{0{{{POINTER TO DUMMY ROUTINE B$XRT
        !          3770: {XRLEN{EQU{XRTYP+1{{{LENGTH OF XRBLK IN BYTES
        !          3771: {XRPTR{EQU{XRLEN+1{{{START OF ADDRESS POINTERS
        !          3772: {XRSI${EQU{XRPTR{{{SIZE OF STANDARD FIELDS IN XRBLK
        !          3773: {{EJC{{{{
        !          3774: *
        !          3775: *      S$CNV (CONVERT) FUNCTION SWITCH CONSTANTS.  THE VALUES
        !          3776: *      ARE TIED TO THE ORDER OF THE ENTRIES IN THE SVCTB TABLE
        !          3777: *      AND HENCE TO THE BRANCH TABLE IN S$CNV.
        !          3778: *
        !          3779: {CNVST{EQU{8{{{MAX STANDARD TYPE CODE FOR CONVERT
        !          3780: {CNVRT{EQU{CNVST+1{{{CONVERT CODE FOR REALS
        !          3781: {CNVBT{EQU{CNVRT+1{{{CONVERT CODE FOR BUFFER
        !          3782: {CNVTT{EQU{CNVBT+1{{{BSW CODE FOR CONVERT
        !          3783: *
        !          3784: *      INPUT IMAGE LENGTH
        !          3785: *
        !          3786: {INILN{EQU{132{{{DEFAULT IMAGE LENGTH FOR COMPILER
        !          3787: {INILS{EQU{80{{{IMAGE LENGTH IF -SEQU IN EFFECT
        !          3788: *
        !          3789: {IONMB{EQU{2{{{NAME BASE USED FOR IOCHN IN SYSIO
        !          3790: {IONMO{EQU{4{{{NAME OFFSET USED FOR IOCHN IN SYSIO
        !          3791: *
        !          3792: *      IN GENERAL, MEANINGFUL MNEMONICS SHOULD BE USED FOR
        !          3793: *      OFFSETS. HOWEVER FOR SMALL INTEGERS USED OFTEN IN
        !          3794: *      LITERALS THE FOLLOWING GENERAL DEFINITIONS ARE PROVIDED.
        !          3795: *
        !          3796: {NUM01{EQU{1{{{
        !          3797: {NUM02{EQU{2{{{
        !          3798: {NUM03{EQU{3{{{
        !          3799: {NUM04{EQU{4{{{
        !          3800: {NUM05{EQU{5{{{
        !          3801: {NUM06{EQU{6{{{
        !          3802: {NUM07{EQU{7{{{
        !          3803: {NUM08{EQU{8{{{
        !          3804: {NUM09{EQU{9{{{
        !          3805: {NUM10{EQU{10{{{
        !          3806: {NINI8{EQU{998{{{
        !          3807: {NINI9{EQU{999{{{
        !          3808: {THSND{EQU{1000{{{
        !          3809: {{EJC{{{{
        !          3810: *
        !          3811: *      NUMBERS OF UNDEFINED SPITBOL OPERATORS
        !          3812: *
        !          3813: {OPBUN{EQU{5{{{NO. OF BINARY UNDEFINED OPS
        !          3814: {OPUUN{EQU{6{{{NO OF UNARY UNDEFINED OPS
        !          3815: *
        !          3816: *      OFFSETS USED IN PRTSN, PRTMI AND ACESS
        !          3817: *
        !          3818: {PRSNF{EQU{13{{{OFFSET USED IN PRTSN
        !          3819: {PRTMF{EQU{15{{{OFFSET TO COL 15 (PRTMI)
        !          3820: {RILEN{EQU{120{{{BUFFER LENGTH FOR SYSRI
        !          3821: *
        !          3822: *      CODES FOR STAGES OF PROCESSING
        !          3823: *
        !          3824: {STGIC{EQU{0{{{INITIAL COMPILE
        !          3825: {STGXC{EQU{STGIC+1{{{EXECUTION COMPILE (CODE)
        !          3826: {STGEV{EQU{STGXC+1{{{EXPRESSION EVAL DURING EXECUTION
        !          3827: {STGXT{EQU{STGEV+1{{{EXECUTION TIME
        !          3828: {STGCE{EQU{STGXT+1{{{INITIAL COMPILE AFTER END LINE
        !          3829: {STGXE{EQU{STGCE+1{{{EXEC. COMPILE AFTER END LINE
        !          3830: {STGND{EQU{STGCE-STGIC{{{DIFFERENCE IN STAGE AFTER END
        !          3831: {STGEE{EQU{STGXE+1{{{EVAL EVALUATING EXPRESSION
        !          3832: {STGNO{EQU{STGEE+1{{{NUMBER OF CODES
        !          3833: {{EJC{{{{
        !          3834: *
        !          3835: *
        !          3836: *      STATEMENT NUMBER PAD COUNT FOR LISTR
        !          3837: *
        !          3838: {STNPD{EQU{8{{{STATEMENT NO. PAD COUNT
        !          3839: *
        !          3840: *      SYNTAX TYPE CODES
        !          3841: *
        !          3842: *      THESE CODES ARE RETURNED FROM THE SCANE PROCEDURE.
        !          3843: *
        !          3844: *      THEY ARE SPACED 3 APART FOR THE BENEFIT OF EXPAN.
        !          3845: *
        !          3846: {T$UOP{EQU{0{{{UNARY OPERATOR
        !          3847: {T$LPR{EQU{T$UOP+3{{{LEFT PAREN
        !          3848: {T$LBR{EQU{T$LPR+3{{{LEFT BRACKET
        !          3849: {T$CMA{EQU{T$LBR+3{{{COMMA
        !          3850: {T$FNC{EQU{T$CMA+3{{{FUNCTION CALL
        !          3851: {T$VAR{EQU{T$FNC+3{{{VARIABLE
        !          3852: {T$CON{EQU{T$VAR+3{{{CONSTANT
        !          3853: {T$BOP{EQU{T$CON+3{{{BINARY OPERATOR
        !          3854: {T$RPR{EQU{T$BOP+3{{{RIGHT PAREN
        !          3855: {T$RBR{EQU{T$RPR+3{{{RIGHT BRACKET
        !          3856: {T$COL{EQU{T$RBR+3{{{COLON
        !          3857: {T$SMC{EQU{T$COL+3{{{SEMI-COLON
        !          3858: *
        !          3859: *      THE FOLLOWING DEFINITIONS ARE USED ONLY IN THE GOTO FIELD
        !          3860: *
        !          3861: {T$FGO{EQU{T$SMC+1{{{FAILURE GOTO
        !          3862: {T$SGO{EQU{T$FGO+1{{{SUCCESS GOTO
        !          3863: *
        !          3864: *      THE ABOVE CODES ARE GROUPED SO THAT CODES FOR ELEMENTS
        !          3865: *      WHICH CAN LEGITIMATELY IMMEDIATELY PRECEDE A UNARY
        !          3866: *      OPERATOR COME FIRST TO FACILITATE OPERATOR SYNTAX CHECK.
        !          3867: *
        !          3868: {T$UOK{EQU{T$FNC{{{LAST CODE OK BEFORE UNARY OPERATOR
        !          3869: {{EJC{{{{
        !          3870: *
        !          3871: *      DEFINITIONS OF VALUES FOR EXPAN JUMP TABLE
        !          3872: *
        !          3873: {T$UO0{EQU{T$UOP+0{{{UNARY OPERATOR, STATE ZERO
        !          3874: {T$UO1{EQU{T$UOP+1{{{UNARY OPERATOR, STATE ONE
        !          3875: {T$UO2{EQU{T$UOP+2{{{UNARY OPERATOR, STATE TWO
        !          3876: {T$LP0{EQU{T$LPR+0{{{LEFT PAREN, STATE ZERO
        !          3877: {T$LP1{EQU{T$LPR+1{{{LEFT PAREN, STATE ONE
        !          3878: {T$LP2{EQU{T$LPR+2{{{LEFT PAREN, STATE TWO
        !          3879: {T$LB0{EQU{T$LBR+0{{{LEFT BRACKET, STATE ZERO
        !          3880: {T$LB1{EQU{T$LBR+1{{{LEFT BRACKET, STATE ONE
        !          3881: {T$LB2{EQU{T$LBR+2{{{LEFT BRACKET, STATE TWO
        !          3882: {T$CM0{EQU{T$CMA+0{{{COMMA, STATE ZERO
        !          3883: {T$CM1{EQU{T$CMA+1{{{COMMA, STATE ONE
        !          3884: {T$CM2{EQU{T$CMA+2{{{COMMA, STATE TWO
        !          3885: {T$FN0{EQU{T$FNC+0{{{FUNCTION CALL, STATE ZERO
        !          3886: {T$FN1{EQU{T$FNC+1{{{FUNCTION CALL, STATE ONE
        !          3887: {T$FN2{EQU{T$FNC+2{{{FUNCTION CALL, STATE TWO
        !          3888: {T$VA0{EQU{T$VAR+0{{{VARIABLE, STATE ZERO
        !          3889: {T$VA1{EQU{T$VAR+1{{{VARIABLE, STATE ONE
        !          3890: {T$VA2{EQU{T$VAR+2{{{VARIABLE, STATE TWO
        !          3891: {T$CO0{EQU{T$CON+0{{{CONSTANT, STATE ZERO
        !          3892: {T$CO1{EQU{T$CON+1{{{CONSTANT, STATE ONE
        !          3893: {T$CO2{EQU{T$CON+2{{{CONSTANT, STATE TWO
        !          3894: {T$BO0{EQU{T$BOP+0{{{BINARY OPERATOR, STATE ZERO
        !          3895: {T$BO1{EQU{T$BOP+1{{{BINARY OPERATOR, STATE ONE
        !          3896: {T$BO2{EQU{T$BOP+2{{{BINARY OPERATOR, STATE TWO
        !          3897: {T$RP0{EQU{T$RPR+0{{{RIGHT PAREN, STATE ZERO
        !          3898: {T$RP1{EQU{T$RPR+1{{{RIGHT PAREN, STATE ONE
        !          3899: {T$RP2{EQU{T$RPR+2{{{RIGHT PAREN, STATE TWO
        !          3900: {T$RB0{EQU{T$RBR+0{{{RIGHT BRACKET, STATE ZERO
        !          3901: {T$RB1{EQU{T$RBR+1{{{RIGHT BRACKET, STATE ONE
        !          3902: {T$RB2{EQU{T$RBR+2{{{RIGHT BRACKET, STATE TWO
        !          3903: {T$CL0{EQU{T$COL+0{{{COLON, STATE ZERO
        !          3904: {T$CL1{EQU{T$COL+1{{{COLON, STATE ONE
        !          3905: {T$CL2{EQU{T$COL+2{{{COLON, STATE TWO
        !          3906: {T$SM0{EQU{T$SMC+0{{{SEMICOLON, STATE ZERO
        !          3907: {T$SM1{EQU{T$SMC+1{{{SEMICOLON, STATE ONE
        !          3908: {T$SM2{EQU{T$SMC+2{{{SEMICOLON, STATE TWO
        !          3909: *
        !          3910: {T$NES{EQU{T$SM2+1{{{NUMBER OF ENTRIES IN BRANCH TABLE
        !          3911: {{EJC{{{{
        !          3912: *
        !          3913: *       DEFINITION OF OFFSETS USED IN CONTROL CARD PROCESSING
        !          3914: *
        !          3915: {CC$CA{EQU{0{{{-CASE
        !          3916: {CC$DO{EQU{CC$CA+1{{{-DOUBLE
        !          3917: {CC$DU{EQU{CC$DO+1{{{-DUMP
        !          3918: {CC$EJ{EQU{CC$DU+1{{{-EJECT
        !          3919: {CC$ER{EQU{CC$EJ+1{{{-ERRORS
        !          3920: {CC$EX{EQU{CC$ER+1{{{-EXECUTE
        !          3921: {CC$FA{EQU{CC$EX+1{{{-FAIL
        !          3922: {CC$LI{EQU{CC$FA+1{{{-LIST
        !          3923: {CC$NR{EQU{CC$LI+1{{{-NOERRORS
        !          3924: {CC$NX{EQU{CC$NR+1{{{-NOEXECUTE
        !          3925: {CC$NF{EQU{CC$NX+1{{{-NOFAIL
        !          3926: {CC$NL{EQU{CC$NF+1{{{-NOLIST
        !          3927: {CC$NO{EQU{CC$NL+1{{{-NOOPT
        !          3928: {CC$NP{EQU{CC$NO+1{{{-NOPRINT
        !          3929: {CC$OP{EQU{CC$NP+1{{{-OPTIMISE
        !          3930: {CC$PR{EQU{CC$OP+1{{{-PRINT
        !          3931: {CC$SI{EQU{CC$PR+1{{{-SINGLE
        !          3932: {CC$SP{EQU{CC$SI+1{{{-SPACE
        !          3933: {CC$ST{EQU{CC$SP+1{{{-STITL
        !          3934: {CC$TI{EQU{CC$ST+1{{{-TITLE
        !          3935: {CC$TR{EQU{CC$TI+1{{{-TRACE
        !          3936: {CC$NC{EQU{CC$TR+1{{{NUMBER OF CONTROL CARDS
        !          3937: {CCNOC{EQU{4{{{NO. OF CHARS INCLUDED IN MATCH
        !          3938: {CCOFS{EQU{7{{{OFFSET TO START OF TITLE/SUBTITLE
        !          3939: {{EJC{{{{
        !          3940: *
        !          3941: *      DEFINITIONS OF STACK OFFSETS USED IN CMPIL PROCEDURE
        !          3942: *
        !          3943: *      SEE DESCRIPTION AT START OF CMPIL PROCEDURE FOR DETAILS
        !          3944: *      OF USE OF THESE LOCATIONS ON THE STACK.
        !          3945: *
        !          3946: {CMSTM{EQU{0{{{TREE FOR STATEMENT BODY
        !          3947: {CMSGO{EQU{CMSTM+1{{{TREE FOR SUCCESS GOTO
        !          3948: {CMFGO{EQU{CMSGO+1{{{TREE FOR FAIL GOTO
        !          3949: {CMCGO{EQU{CMFGO+1{{{CONDITIONAL GOTO FLAG
        !          3950: {CMPCD{EQU{CMCGO+1{{{PREVIOUS CDBLK POINTER
        !          3951: {CMFFP{EQU{CMPCD+1{{{FAILURE FILL IN FLAG FOR PREVIOUS
        !          3952: {CMFFC{EQU{CMFFP+1{{{FAILURE FILL IN FLAG FOR CURRENT
        !          3953: {CMSOP{EQU{CMFFC+1{{{SUCCESS FILL IN OFFSET FOR PREVIOUS
        !          3954: {CMSOC{EQU{CMSOP+1{{{SUCCESS FILL IN OFFSET FOR CURRENT
        !          3955: {CMLBL{EQU{CMSOC+1{{{PTR TO VRBLK FOR CURRENT LABEL
        !          3956: {CMTRA{EQU{CMLBL+1{{{PTR TO ENTRY CDBLK
        !          3957: *
        !          3958: {CMNEN{EQU{CMTRA+1{{{COUNT OF STACK ENTRIES FOR CMPIL
        !          3959: *
        !          3960: *      A FEW CONSTANTS USED BY THE PROFILER
        !          3961: {PFPD1{EQU{8{{{PAD POSITIONS ...
        !          3962: {PFPD2{EQU{20{{{... FOR PROFILE ...
        !          3963: {PFPD3{EQU{32{{{... PRINTOUT
        !          3964: {PF$I2{EQU{CFP$I+CFP$I{{{SIZE OF TABLE ENTRY (2 INTS)
        !          3965: *
        !          3966: {{TTL{S{{{P I T B O L -- CONSTANT SECTION
        !          3967: *
        !          3968: *      THIS SECTION CONSISTS ENTIRELY OF ASSEMBLED CONSTANTS.
        !          3969: *
        !          3970: *      ALL LABEL NAMES ARE FIVE LETTERS. THE ORDER IS
        !          3971: *      APPROXIMATELY ALPHABETICAL, BUT IN SOME CASES (ALWAYS
        !          3972: *      DOCUMENTED), CONSTANTS MUST BE PLACED IN SOME SPECIAL
        !          3973: *      ORDER WHICH MUST NOT BE DISTURBED.
        !          3974: *
        !          3975: *      IT MUST ALSO BE REMEMBERED THAT THERE IS A REQUIREMENT
        !          3976: *      FOR NO FORWARD REFERENCES WHICH ALSO DISTURBS THE
        !          3977: *      ALPHABETICAL ORDER IN SOME CASES.
        !          3978: *
        !          3979: {{SEC{{{{START OF CONSTANT SECTION
        !          3980: *
        !          3981: *      FREE STORE PERCENTAGE (USED BY ALLOC)
        !          3982: *
        !          3983: {ALFSP{DAC{E$FSP{{{FREE STORE PERCENTAGE
        !          3984: *
        !          3985: *      BIT CONSTANTS FOR GENERAL USE
        !          3986: *
        !          3987: {BITS0{DBC{0{{{ALL ZERO BITS
        !          3988: {BITS1{DBC{1{{{ONE BIT IN LOW ORDER POSITION
        !          3989: {BITS2{DBC{2{{{BIT IN POSITION 2
        !          3990: {BITS3{DBC{4{{{BIT IN POSITION 3
        !          3991: {BITS4{DBC{8{{{BIT IN POSITION 4
        !          3992: {BITS5{DBC{16{{{BIT IN POSITION 5
        !          3993: {BITS6{DBC{32{{{BIT IN POSITION 6
        !          3994: {BITS7{DBC{64{{{BIT IN POSITION 7
        !          3995: {BITS8{DBC{128{{{BIT IN POSITION 8
        !          3996: {BITS9{DBC{256{{{BIT IN POSITION 9
        !          3997: {BIT10{DBC{512{{{BIT IN POSITION 10
        !          3998: {BITSM{DBC{CFP$M{{{MASK FOR MAX INTEGER
        !          3999: *
        !          4000: *      BIT CONSTANTS FOR SVBLK (SVBIT FIELD) TESTS
        !          4001: *
        !          4002: {BTFNC{DBC{SVFNC{{{BIT TO TEST FOR FUNCTION
        !          4003: {BTKNM{DBC{SVKNM{{{BIT TO TEST FOR KEYWORD NUMBER
        !          4004: {BTLBL{DBC{SVLBL{{{BIT TO TEST FOR LABEL
        !          4005: {BTFFC{DBC{SVFFC{{{BIT TO TEST FOR FAST CALL
        !          4006: {BTCKW{DBC{SVCKW{{{BIT TO TEST FOR CONSTANT KEYWORD
        !          4007: {BTPRD{DBC{SVPRD{{{BIT TO TEST FOR PREDICATE FUNCTION
        !          4008: {BTPRE{DBC{SVPRE{{{BIT TO TEST FOR PREEVALUATION
        !          4009: {BTVAL{DBC{SVVAL{{{BIT TO TEST FOR VALUE
        !          4010: {{EJC{{{{
        !          4011: *
        !          4012: *      LIST OF NAMES USED FOR CONTROL CARD PROCESSING
        !          4013: *
        !          4014: {CCNMS{DTC{/CASE/{{{
        !          4015: {{DTC{/DOUB/{{{
        !          4016: {{DTC{/DUMP/{{{
        !          4017: {{DTC{/EJEC/{{{
        !          4018: {{DTC{/ERRO/{{{
        !          4019: {{DTC{/EXEC/{{{
        !          4020: {{DTC{/FAIL/{{{
        !          4021: {{DTC{/LIST/{{{
        !          4022: {{DTC{/NOER/{{{
        !          4023: {{DTC{/NOEX/{{{
        !          4024: {{DTC{/NOFA/{{{
        !          4025: {{DTC{/NOLI/{{{
        !          4026: {{DTC{/NOOP/{{{
        !          4027: {{DTC{/NOPR/{{{
        !          4028: {{DTC{/OPTI/{{{
        !          4029: {{DTC{/PRIN/{{{
        !          4030: {{DTC{/SING/{{{
        !          4031: {{DTC{/SPAC/{{{
        !          4032: {{DTC{/STIT/{{{
        !          4033: {{DTC{/TITL/{{{
        !          4034: {{DTC{/TRAC/{{{
        !          4035: *
        !          4036: *      HEADER MESSAGES FOR DUMPR PROCEDURE (SCBLK FORMAT)
        !          4037: *
        !          4038: {DMHDK{DAC{B$SCL{{{DUMP OF KEYWORD VALUES
        !          4039: {{DAC{22{{{
        !          4040: {{DTC{/DUMP OF KEYWORD VALUES/{{{
        !          4041: *
        !          4042: {DMHDV{DAC{B$SCL{{{DUMP OF NATURAL VARIABLES
        !          4043: {{DAC{25{{{
        !          4044: {{DTC{/DUMP OF NATURAL VARIABLES/{{{
        !          4045: {{EJC{{{{
        !          4046: *
        !          4047: *      MESSAGE TEXT FOR COMPILATION STATISTICS
        !          4048: *
        !          4049: {ENCM1{DAC{B$SCL{{{
        !          4050: {{DAC{10{{{
        !          4051: {{DTC{/STORE USED/{{{
        !          4052: *
        !          4053: {ENCM2{DAC{B$SCL{{{
        !          4054: {{DAC{10{{{
        !          4055: {{DTC{/STORE LEFT/{{{
        !          4056: *
        !          4057: {ENCM3{DAC{B$SCL{{{
        !          4058: {{DAC{11{{{
        !          4059: {{DTC{/COMP ERRORS/{{{
        !          4060: *
        !          4061: {ENCM4{DAC{B$SCL{{{
        !          4062: {{DAC{14{{{
        !          4063: {{DTC{/COMP TIME-MSEC/{{{
        !          4064: *
        !          4065: {ENCM5{DAC{B$SCL{{{EXECUTION SUPPRESSED
        !          4066: {{DAC{20{{{
        !          4067: {{DTC{/EXECUTION SUPPRESSED/{{{
        !          4068: *
        !          4069: *      STRING CONSTANT FOR ABNORMAL END
        !          4070: *
        !          4071: {ENDAB{DAC{B$SCL{{{
        !          4072: {{DAC{12{{{
        !          4073: {{DTC{/ABNORMAL END/{{{
        !          4074: {{EJC{{{{
        !          4075: *
        !          4076: *      MEMORY OVERFLOW DURING INITIALISATION
        !          4077: *
        !          4078: {ENDMO{DAC{B$SCL{{{
        !          4079: {ENDML{DAC{15{{{
        !          4080: {{DTC{/MEMORY OVERFLOW/{{{
        !          4081: *
        !          4082: *      STRING CONSTANT FOR MESSAGE ISSUED BY L$END
        !          4083: *
        !          4084: {ENDMS{DAC{B$SCL{{{
        !          4085: {{DAC{10{{{
        !          4086: {{DTC{/NORMAL END/{{{
        !          4087: *
        !          4088: *      FAIL MESSAGE FOR STACK FAIL SECTION
        !          4089: *
        !          4090: {ENDSO{DAC{B$SCL{{{STACK OVERFLOW IN GARBAGE COLLECTOR
        !          4091: {{DAC{36{{{
        !          4092: {{DTC{/STACK OVERFLOW IN GARBAGE COLLECTION/{{{
        !          4093: *
        !          4094: *      STRING CONSTANT FOR TIME UP
        !          4095: *
        !          4096: {ENDTU{DAC{B$SCL{{{
        !          4097: {{DAC{15{{{
        !          4098: {{DTC{/ERROR - TIME UP/{{{
        !          4099: {{EJC{{{{
        !          4100: *
        !          4101: *      STRING CONSTANT FOR ERROR MESSAGE (ERROR SECTION)
        !          4102: *
        !          4103: {ERMMS{DAC{B$SCL{{{ERROR
        !          4104: {{DAC{5{{{
        !          4105: {{DTC{/ERROR/{{{
        !          4106: *
        !          4107: {ERMNS{DAC{B$SCL{{{STRING / -- /
        !          4108: {{DAC{4{{{
        !          4109: {{DTC{/ -- /{{{
        !          4110: *
        !          4111: *      STRING CONSTANT FOR PAGE NUMBERING
        !          4112: *
        !          4113: {LSTMS{DAC{B$SCL{{{PAGE
        !          4114: {{DAC{5{{{
        !          4115: {{DTC{/PAGE /{{{
        !          4116: *
        !          4117: *      LISTING HEADER MESSAGE
        !          4118: *
        !          4119: {HEADR{DAC{B$SCL{{{
        !          4120: {{DAC{25{{{
        !          4121: {{DTC{/MACRO SPITBOL VERSION 3.5/{{{
        !          4122: *
        !          4123: {HEADV{DAC{B$SCL{{{FOR EXIT() VERSION NO. CHECK
        !          4124: {{DAC{3{{{
        !          4125: {{DTC{/3.5/{{{
        !          4126: *
        !          4127: *      INTEGER CONSTANTS FOR GENERAL USE
        !          4128: *      ICBLD OPTIMISATION USES THE FIRST THREE.
        !          4129: *
        !          4130: {INT$R{DAC{B$ICL{{{
        !          4131: {INTV0{DIC{+0{{{0
        !          4132: {INTON{DAC{B$ICL{{{
        !          4133: {INTV1{DIC{+1{{{1
        !          4134: {INTTW{DAC{B$ICL{{{
        !          4135: {INTV2{DIC{+2{{{2
        !          4136: {INTVT{DIC{+10{{{10
        !          4137: {INTVH{DIC{+100{{{100
        !          4138: {INTTH{DIC{+1000{{{1000
        !          4139: *
        !          4140: *      TABLE USED IN ICBLD OPTIMISATION
        !          4141: *
        !          4142: {INTAB{DAC{INT$R{{{POINTER TO 0
        !          4143: {{DAC{INTON{{{POINTER TO 1
        !          4144: {{DAC{INTTW{{{POINTER TO 2
        !          4145: {{EJC{{{{
        !          4146: *
        !          4147: *      SPECIAL PATTERN NODES. THE FOLLOWING PATTERN NODES
        !          4148: *      CONSIST SIMPLY OF A PCODE POINTER, SEE MATCH ROUTINES
        !          4149: *      (P$XXX) FOR FULL DETAILS OF THEIR USE AND FORMAT).
        !          4150: *
        !          4151: {NDABB{DAC{P$ABB{{{ARBNO
        !          4152: {NDABD{DAC{P$ABD{{{ARBNO
        !          4153: {NDARC{DAC{P$ARC{{{ARB
        !          4154: {NDEXB{DAC{P$EXB{{{EXPRESSION
        !          4155: {NDFNB{DAC{P$FNB{{{FENCE()
        !          4156: {NDFND{DAC{P$FND{{{FENCE()
        !          4157: {NDEXC{DAC{P$EXC{{{EXPRESSION
        !          4158: {NDIMB{DAC{P$IMB{{{IMMEDIATE ASSIGNMENT
        !          4159: {NDIMD{DAC{P$IMD{{{IMMEDIATE ASSIGNMENT
        !          4160: {NDNTH{DAC{P$NTH{{{PATTERN END (NULL PATTERN)
        !          4161: {NDPAB{DAC{P$PAB{{{PATTERN ASSIGNMENT
        !          4162: {NDPAD{DAC{P$PAD{{{PATTERN ASSIGNMENT
        !          4163: {NDUNA{DAC{P$UNA{{{ANCHOR POINT MOVEMENT
        !          4164: *
        !          4165: *      KEYWORD CONSTANT PATTERN NODES. THE FOLLOWING NODES ARE
        !          4166: *      USED AS THE VALUES OF PATTERN KEYWORDS AND THE INITIAL
        !          4167: *      VALUES OF THE CORRESPONDING NATURAL VARIABLES. ALL
        !          4168: *      NODES ARE IN P0BLK FORMAT AND THE ORDER IS TIED TO THE
        !          4169: *      DEFINITIONS OF CORRESPONDING K$XXX SYMBOLS.
        !          4170: *
        !          4171: {NDABO{DAC{P$ABO{{{ABORT
        !          4172: {{DAC{NDNTH{{{
        !          4173: {NDARB{DAC{P$ARB{{{ARB
        !          4174: {{DAC{NDNTH{{{
        !          4175: {NDBAL{DAC{P$BAL{{{BAL
        !          4176: {{DAC{NDNTH{{{
        !          4177: {NDFAL{DAC{P$FAL{{{FAIL
        !          4178: {{DAC{NDNTH{{{
        !          4179: {NDFEN{DAC{P$FEN{{{FENCE
        !          4180: {{DAC{NDNTH{{{
        !          4181: {NDREM{DAC{P$REM{{{REM
        !          4182: {{DAC{NDNTH{{{
        !          4183: {NDSUC{DAC{P$SUC{{{SUCCEED
        !          4184: {{DAC{NDNTH{{{
        !          4185: *
        !          4186: *      NULL STRING. ALL NULL VALUES POINT TO THIS STRING. THE
        !          4187: *      SVCHS FIELD CONTAINS A BLANK TO PROVIDE FOR EASY DEFAULT
        !          4188: *      PROCESSING IN TRACE, STOPTR, LPAD AND RPAD.
        !          4189: *      NULLW CONTAINS 10 BLANKS WHICH ENSURES AN ALL BLANK WORD
        !          4190: *      BUT FOR VERY EXCEPTIONAL MACHINES.
        !          4191: *
        !          4192: {NULLS{DAC{B$SCL{{{NULL STRING VALUE
        !          4193: {{DAC{0{{{SCLEN = 0
        !          4194: {NULLW{DTC{/          /{{{
        !          4195: {{EJC{{{{
        !          4196: *
        !          4197: *      OPERATOR DOPE VECTORS (SEE DVBLK FORMAT)
        !          4198: *
        !          4199: {OPDVC{DAC{O$CNC{{{CONCATENATION
        !          4200: {{DAC{C$CNC{{{
        !          4201: {{DAC{LLCNC{{{
        !          4202: {{DAC{RRCNC{{{
        !          4203: *
        !          4204: *      OPDVS IS USED WHEN SCANNING BELOW THE TOP LEVEL TO
        !          4205: *      INSURE THAT THE CONCATENATION WILL NOT BE LATER
        !          4206: *      MISTAKEN FOR PATTERN MATCHING
        !          4207: *
        !          4208: {OPDVP{DAC{O$CNC{{{CONCATENATION - NOT PATTERN MATCH
        !          4209: {{DAC{C$CNP{{{
        !          4210: {{DAC{LLCNC{{{
        !          4211: {{DAC{RRCNC{{{
        !          4212: *
        !          4213: *      NOTE THAT THE ORDER OF THE REMAINING ENTRIES IS TIED TO
        !          4214: *      THE ORDER OF THE CODING IN THE SCANE PROCEDURE.
        !          4215: *
        !          4216: {OPDVS{DAC{O$ASS{{{ASSIGNMENT
        !          4217: {{DAC{C$ASS{{{
        !          4218: {{DAC{LLASS{{{
        !          4219: {{DAC{RRASS{{{
        !          4220: *
        !          4221: {{DAC{6{{{UNARY EQUAL
        !          4222: {{DAC{C$UUO{{{
        !          4223: {{DAC{LLUNO{{{
        !          4224: *
        !          4225: {{DAC{O$PMV{{{PATTERN MATCH
        !          4226: {{DAC{C$PMT{{{
        !          4227: {{DAC{LLPMT{{{
        !          4228: {{DAC{RRPMT{{{
        !          4229: *
        !          4230: {{DAC{O$INT{{{INTERROGATION
        !          4231: {{DAC{C$UVL{{{
        !          4232: {{DAC{LLUNO{{{
        !          4233: *
        !          4234: {{DAC{1{{{BINARY AMPERSAND
        !          4235: {{DAC{C$UBO{{{
        !          4236: {{DAC{LLAMP{{{
        !          4237: {{DAC{RRAMP{{{
        !          4238: *
        !          4239: {{DAC{O$KWV{{{KEYWORD REFERENCE
        !          4240: {{DAC{C$KEY{{{
        !          4241: {{DAC{LLUNO{{{
        !          4242: *
        !          4243: {{DAC{O$ALT{{{ALTERNATION
        !          4244: {{DAC{C$ALT{{{
        !          4245: {{DAC{LLALT{{{
        !          4246: {{DAC{RRALT{{{
        !          4247: {{EJC{{{{
        !          4248: *
        !          4249: *      OPERATOR DOPE VECTORS (CONTINUED)
        !          4250: *
        !          4251: {{DAC{5{{{UNARY VERTICAL BAR
        !          4252: {{DAC{C$UUO{{{
        !          4253: {{DAC{LLUNO{{{
        !          4254: *
        !          4255: {{DAC{0{{{BINARY AT
        !          4256: {{DAC{C$UBO{{{
        !          4257: {{DAC{LLATS{{{
        !          4258: {{DAC{RRATS{{{
        !          4259: *
        !          4260: {{DAC{O$CAS{{{CURSOR ASSIGNMENT
        !          4261: {{DAC{C$UNM{{{
        !          4262: {{DAC{LLUNO{{{
        !          4263: *
        !          4264: {{DAC{2{{{BINARY NUMBER SIGN
        !          4265: {{DAC{C$UBO{{{
        !          4266: {{DAC{LLNUM{{{
        !          4267: {{DAC{RRNUM{{{
        !          4268: *
        !          4269: {{DAC{7{{{UNARY NUMBER SIGN
        !          4270: {{DAC{C$UUO{{{
        !          4271: {{DAC{LLUNO{{{
        !          4272: *
        !          4273: {{DAC{O$DVD{{{DIVISION
        !          4274: {{DAC{C$BVL{{{
        !          4275: {{DAC{LLDVD{{{
        !          4276: {{DAC{RRDVD{{{
        !          4277: *
        !          4278: {{DAC{9{{{UNARY SLASH
        !          4279: {{DAC{C$UUO{{{
        !          4280: {{DAC{LLUNO{{{
        !          4281: *
        !          4282: {{DAC{O$MLT{{{MULTIPLICATION
        !          4283: {{DAC{C$BVL{{{
        !          4284: {{DAC{LLMLT{{{
        !          4285: {{DAC{RRMLT{{{
        !          4286: {{EJC{{{{
        !          4287: *
        !          4288: *      OPERATOR DOPE VECTORS (CONTINUED)
        !          4289: *
        !          4290: {{DAC{0{{{DEFERRED EXPRESSION
        !          4291: {{DAC{C$DEF{{{
        !          4292: {{DAC{LLUNO{{{
        !          4293: *
        !          4294: {{DAC{3{{{BINARY PERCENT
        !          4295: {{DAC{C$UBO{{{
        !          4296: {{DAC{LLPCT{{{
        !          4297: {{DAC{RRPCT{{{
        !          4298: *
        !          4299: {{DAC{8{{{UNARY PERCENT
        !          4300: {{DAC{C$UUO{{{
        !          4301: {{DAC{LLUNO{{{
        !          4302: *
        !          4303: {{DAC{O$EXP{{{EXPONENTIATION
        !          4304: {{DAC{C$BVL{{{
        !          4305: {{DAC{LLEXP{{{
        !          4306: {{DAC{RREXP{{{
        !          4307: *
        !          4308: {{DAC{10{{{UNARY EXCLAMATION
        !          4309: {{DAC{C$UUO{{{
        !          4310: {{DAC{LLUNO{{{
        !          4311: *
        !          4312: {{DAC{O$IMA{{{IMMEDIATE ASSIGNMENT
        !          4313: {{DAC{C$BVN{{{
        !          4314: {{DAC{LLDLD{{{
        !          4315: {{DAC{RRDLD{{{
        !          4316: *
        !          4317: {{DAC{O$INV{{{INDIRECTION
        !          4318: {{DAC{C$IND{{{
        !          4319: {{DAC{LLUNO{{{
        !          4320: *
        !          4321: {{DAC{4{{{BINARY NOT
        !          4322: {{DAC{C$UBO{{{
        !          4323: {{DAC{LLNOT{{{
        !          4324: {{DAC{RRNOT{{{
        !          4325: *
        !          4326: {{DAC{0{{{NEGATION
        !          4327: {{DAC{C$NEG{{{
        !          4328: {{DAC{LLUNO{{{
        !          4329: {{EJC{{{{
        !          4330: *
        !          4331: *      OPERATOR DOPE VECTORS (CONTINUED)
        !          4332: *
        !          4333: {{DAC{O$SUB{{{SUBTRACTION
        !          4334: {{DAC{C$BVL{{{
        !          4335: {{DAC{LLPLM{{{
        !          4336: {{DAC{RRPLM{{{
        !          4337: *
        !          4338: {{DAC{O$COM{{{COMPLEMENTATION
        !          4339: {{DAC{C$UVL{{{
        !          4340: {{DAC{LLUNO{{{
        !          4341: *
        !          4342: {{DAC{O$ADD{{{ADDITION
        !          4343: {{DAC{C$BVL{{{
        !          4344: {{DAC{LLPLM{{{
        !          4345: {{DAC{RRPLM{{{
        !          4346: *
        !          4347: {{DAC{O$AFF{{{AFFIRMATION
        !          4348: {{DAC{C$UVL{{{
        !          4349: {{DAC{LLUNO{{{
        !          4350: *
        !          4351: {{DAC{O$PAS{{{PATTERN ASSIGNMENT
        !          4352: {{DAC{C$BVN{{{
        !          4353: {{DAC{LLDLD{{{
        !          4354: {{DAC{RRDLD{{{
        !          4355: *
        !          4356: {{DAC{O$NAM{{{NAME REFERENCE
        !          4357: {{DAC{C$UNM{{{
        !          4358: {{DAC{LLUNO{{{
        !          4359: *
        !          4360: *      SPECIAL DVS FOR GOTO OPERATORS (SEE PROCEDURE SCNGF)
        !          4361: *
        !          4362: {OPDVD{DAC{O$GOD{{{DIRECT GOTO
        !          4363: {{DAC{C$UVL{{{
        !          4364: {{DAC{LLUNO{{{
        !          4365: *
        !          4366: {OPDVN{DAC{O$GOC{{{COMPLEX NORMAL GOTO
        !          4367: {{DAC{C$UNM{{{
        !          4368: {{DAC{LLUNO{{{
        !          4369: {{EJC{{{{
        !          4370: *
        !          4371: *      OPERATOR ENTRY ADDRESS POINTERS, USED IN CODE
        !          4372: *
        !          4373: {OAMN${DAC{O$AMN{{{ARRAY REF (MULTI-SUBS BY VALUE)
        !          4374: {OAMV${DAC{O$AMV{{{ARRAY REF (MULTI-SUBS BY VALUE)
        !          4375: {OAON${DAC{O$AON{{{ARRAY REF (ONE SUB BY NAME)
        !          4376: {OAOV${DAC{O$AOV{{{ARRAY REF (ONE SUB BY VALUE)
        !          4377: {OCER${DAC{O$CER{{{COMPILATION ERROR
        !          4378: {OFEX${DAC{O$FEX{{{FAILURE IN EXPRESSION EVALUATION
        !          4379: {OFIF${DAC{O$FIF{{{FAILURE DURING GOTO EVALUATION
        !          4380: {OFNC${DAC{O$FNC{{{FUNCTION CALL (MORE THAN ONE ARG)
        !          4381: {OFNE${DAC{O$FNE{{{FUNCTION NAME ERROR
        !          4382: {OFNS${DAC{O$FNS{{{FUNCTION CALL (SINGLE ARGUMENT)
        !          4383: {OGOF${DAC{O$GOF{{{SET GOTO FAILURE TRAP
        !          4384: {OINN${DAC{O$INN{{{INDIRECTION BY NAME
        !          4385: {OKWN${DAC{O$KWN{{{KEYWORD REFERENCE BY NAME
        !          4386: {OLEX${DAC{O$LEX{{{LOAD EXPRESSION BY NAME
        !          4387: {OLPT${DAC{O$LPT{{{LOAD PATTERN
        !          4388: {OLVN${DAC{O$LVN{{{LOAD VARIABLE NAME
        !          4389: {ONTA${DAC{O$NTA{{{NEGATION, FIRST ENTRY
        !          4390: {ONTB${DAC{O$NTB{{{NEGATION, SECOND ENTRY
        !          4391: {ONTC${DAC{O$NTC{{{NEGATION, THIRD ENTRY
        !          4392: {OPMN${DAC{O$PMN{{{PATTERN MATCH BY NAME
        !          4393: {OPMS${DAC{O$PMS{{{PATTERN MATCH (STATEMENT)
        !          4394: {OPOP${DAC{O$POP{{{POP TOP STACK ITEM
        !          4395: {ORNM${DAC{O$RNM{{{RETURN NAME FROM EXPRESSION
        !          4396: {ORPL${DAC{O$RPL{{{PATTERN REPLACEMENT
        !          4397: {ORVL${DAC{O$RVL{{{RETURN VALUE FROM EXPRESSION
        !          4398: {OSLA${DAC{O$SLA{{{SELECTION, FIRST ENTRY
        !          4399: {OSLB${DAC{O$SLB{{{SELECTION, SECOND ENTRY
        !          4400: {OSLC${DAC{O$SLC{{{SELECTION, THIRD ENTRY
        !          4401: {OSLD${DAC{O$SLD{{{SELECTION, FOURTH ENTRY
        !          4402: {OSTP${DAC{O$STP{{{STOP EXECUTION
        !          4403: {OUNF${DAC{O$UNF{{{UNEXPECTED FAILURE
        !          4404: {{EJC{{{{
        !          4405: *
        !          4406: *      TABLE OF NAMES OF UNDEFINED BINARY OPERATORS FOR OPSYN
        !          4407: *
        !          4408: {OPSNB{DAC{CH$AT{{{AT
        !          4409: {{DAC{CH$AM{{{AMPERSAND
        !          4410: {{DAC{CH$NM{{{NUMBER
        !          4411: {{DAC{CH$PC{{{PERCENT
        !          4412: {{DAC{CH$NT{{{NOT
        !          4413: *
        !          4414: *      TABLE OF NAMES OF UNDEFINED UNARY OPERATORS FOR OPSYN
        !          4415: *
        !          4416: {OPNSU{DAC{CH$BR{{{VERTICAL BAR
        !          4417: {{DAC{CH$EQ{{{EQUAL
        !          4418: {{DAC{CH$NM{{{NUMBER
        !          4419: {{DAC{CH$PC{{{PERCENT
        !          4420: {{DAC{CH$SL{{{SLASH
        !          4421: {{DAC{CH$EX{{{EXCLAMATION
        !          4422: *
        !          4423: *      ADDRESS CONST CONTAINING PROFILE TABLE ENTRY SIZE
        !          4424: *
        !          4425: {PFI2A{DAC{PF$I2{{{
        !          4426: *
        !          4427: *      PROFILER MESSAGE STRINGS
        !          4428: *
        !          4429: {PFMS1{DAC{B$SCL{{{
        !          4430: {{DAC{15{{{
        !          4431: {{DTC{/PROGRAM PROFILE/{{{
        !          4432: {PFMS2{DAC{B$SCL{{{
        !          4433: {{DAC{42{{{
        !          4434: {{DTC{/STMT    NUMBER OF     -- EXECUTION TIME --/{{{
        !          4435: {PFMS3{DAC{B$SCL{{{
        !          4436: {{DAC{47{{{
        !          4437: {{DTC{/NUMBER  EXECUTIONS  TOTAL(MSEC) PER EXCN(MCSEC)/{{{
        !          4438: *
        !          4439: *
        !          4440: *      REAL CONSTANTS FOR GENERAL USE. NOTE THAT THE CONSTANTS
        !          4441: *      STARTING AT REAV1 FORM A POWERS OF TEN TABLE (GTSTG)
        !          4442: *
        !          4443: {REAV0{DRC{+0.0{{{0.0
        !          4444: {REAP1{DRC{+0.1{{{0.1
        !          4445: {REAP5{DRC{+0.5{{{0.5
        !          4446: {REAV1{DRC{+1.0{{{10**0
        !          4447: {REAVT{DRC{+1.0E+1{{{10**1
        !          4448: {{DRC{+1.0E+2{{{10**2
        !          4449: {{DRC{+1.0E+3{{{10**3
        !          4450: {{DRC{+1.0E+4{{{10**4
        !          4451: {{DRC{+1.0E+5{{{10**5
        !          4452: {{DRC{+1.0E+6{{{10**6
        !          4453: {{DRC{+1.0E+7{{{10**7
        !          4454: {{DRC{+1.0E+8{{{10**8
        !          4455: {{DRC{+1.0E+9{{{10**9
        !          4456: {REATT{DRC{+1.0E+10{{{10**10
        !          4457: {{EJC{{{{
        !          4458: *
        !          4459: *      STRING CONSTANTS (SCBLK FORMAT) FOR DTYPE PROCEDURE
        !          4460: *
        !          4461: {SCARR{DAC{B$SCL{{{ARRAY
        !          4462: {{DAC{5{{{
        !          4463: {{DTC{/ARRAY/{{{
        !          4464: *
        !          4465: {SCBUF{DAC{B$SCL{{{BUFFER
        !          4466: {{DAC{6{{{
        !          4467: {{DTC{/BUFFER/{{{
        !          4468: *
        !          4469: {SCCOD{DAC{B$SCL{{{CODE
        !          4470: {{DAC{4{{{
        !          4471: {{DTC{/CODE/{{{
        !          4472: *
        !          4473: {SCEXP{DAC{B$SCL{{{EXPRESSION
        !          4474: {{DAC{10{{{
        !          4475: {{DTC{/EXPRESSION/{{{
        !          4476: *
        !          4477: {SCEXT{DAC{B$SCL{{{EXTERNAL
        !          4478: {{DAC{8{{{
        !          4479: {{DTC{/EXTERNAL/{{{
        !          4480: *
        !          4481: {SCINT{DAC{B$SCL{{{INTEGER
        !          4482: {{DAC{7{{{
        !          4483: {{DTC{/INTEGER/{{{
        !          4484: *
        !          4485: {SCNAM{DAC{B$SCL{{{NAME
        !          4486: {{DAC{4{{{
        !          4487: {{DTC{/NAME/{{{
        !          4488: *
        !          4489: {SCNUM{DAC{B$SCL{{{NUMERIC
        !          4490: {{DAC{7{{{
        !          4491: {{DTC{/NUMERIC/{{{
        !          4492: *
        !          4493: {SCPAT{DAC{B$SCL{{{PATTERN
        !          4494: {{DAC{7{{{
        !          4495: {{DTC{/PATTERN/{{{
        !          4496: *
        !          4497: {SCREA{DAC{B$SCL{{{REAL
        !          4498: {{DAC{4{{{
        !          4499: {{DTC{/REAL/{{{
        !          4500: *
        !          4501: {SCSTR{DAC{B$SCL{{{STRING
        !          4502: {{DAC{6{{{
        !          4503: {{DTC{/STRING/{{{
        !          4504: *
        !          4505: {SCTAB{DAC{B$SCL{{{TABLE
        !          4506: {{DAC{5{{{
        !          4507: {{DTC{/TABLE/{{{
        !          4508: {{EJC{{{{
        !          4509: *
        !          4510: *      STRING CONSTANTS (SCBLK FORMAT) FOR KVRTN (SEE RETRN)
        !          4511: *
        !          4512: {SCFRT{DAC{B$SCL{{{FRETURN
        !          4513: {{DAC{7{{{
        !          4514: {{DTC{/FRETURN/{{{
        !          4515: *
        !          4516: {SCNRT{DAC{B$SCL{{{NRETURN
        !          4517: {{DAC{7{{{
        !          4518: {{DTC{/NRETURN/{{{
        !          4519: *
        !          4520: {SCRTN{DAC{B$SCL{{{RETURN
        !          4521: {{DAC{6{{{
        !          4522: {{DTC{/RETURN/{{{
        !          4523: *
        !          4524: *      DATATYPE NAME TABLE FOR DTYPE PROCEDURE. THE ORDER OF
        !          4525: *      THESE ENTRIES IS TIED TO THE B$XXX DEFINITIONS FOR BLOCKS
        !          4526: *
        !          4527: {SCNMT{DAC{SCARR{{{ARBLK     ARRAY
        !          4528: {{DAC{SCBUF{{{BFBLK     BUFFER
        !          4529: {{DAC{SCCOD{{{CDBLK     CODE
        !          4530: {{DAC{SCEXP{{{EXBLK     EXPRESSION
        !          4531: {{DAC{SCINT{{{ICBLK     INTEGER
        !          4532: {{DAC{SCNAM{{{NMBLK     NAME
        !          4533: {{DAC{SCPAT{{{P0BLK     PATTERN
        !          4534: {{DAC{SCPAT{{{P1BLK     PATTERN
        !          4535: {{DAC{SCPAT{{{P2BLK     PATTERN
        !          4536: {{DAC{SCREA{{{RCBLK     REAL
        !          4537: {{DAC{SCSTR{{{SCBLK     STRING
        !          4538: {{DAC{SCEXP{{{SEBLK     EXPRESSION
        !          4539: {{DAC{SCTAB{{{TBBLK     TABLE
        !          4540: {{DAC{SCARR{{{VCBLK     ARRAY
        !          4541: {{DAC{SCEXT{{{XNBLK     EXTERNAL
        !          4542: {{DAC{SCEXT{{{XRBLK     EXTERNAL
        !          4543: *
        !          4544: *      STRING CONSTANT FOR REAL ZERO
        !          4545: *
        !          4546: {SCRE0{DAC{B$SCL{{{
        !          4547: {{DAC{2{{{
        !          4548: {{DTC{/0./{{{
        !          4549: {{EJC{{{{
        !          4550: *
        !          4551: *      USED TO RE-INITIALISE KVSTL
        !          4552: *
        !          4553: {STLIM{DIC{+50000{{{DEFAULT STATEMENT LIMIT
        !          4554: *
        !          4555: *      DUMMY FUNCTION BLOCK USED FOR UNDEFINED FUNCTIONS
        !          4556: *
        !          4557: {STNDF{DAC{O$FUN{{{PTR TO UNDEFINED FUNCTION ERR CALL
        !          4558: {{DAC{0{{{DUMMY FARGS COUNT FOR CALL CIRCUIT
        !          4559: *
        !          4560: *      DUMMY CODE BLOCK USED FOR UNDEFINED LABELS
        !          4561: *
        !          4562: {STNDL{DAC{L$UND{{{CODE PTR POINTS TO UNDEFINED LBL
        !          4563: *
        !          4564: *      DUMMY OPERATOR BLOCK USED FOR UNDEFINED OPERATORS
        !          4565: *
        !          4566: {STNDO{DAC{O$OUN{{{PTR TO UNDEFINED OPERATOR ERR CALL
        !          4567: {{DAC{0{{{DUMMY FARGS COUNT FOR CALL CIRCUIT
        !          4568: *
        !          4569: *      STANDARD VARIABLE BLOCK. THIS BLOCK IS USED TO INITIALIZE
        !          4570: *      THE FIRST SEVEN FIELDS OF A NEWLY CONSTRUCTED VRBLK.
        !          4571: *      ITS FORMAT IS TIED TO THE VRBLK DEFINITIONS (SEE GTNVR).
        !          4572: *
        !          4573: {STNVR{DAC{B$VRL{{{VRGET
        !          4574: {{DAC{B$VRS{{{VRSTO
        !          4575: {{DAC{NULLS{{{VRVAL
        !          4576: {{DAC{B$VRG{{{VRTRA
        !          4577: {{DAC{STNDL{{{VRLBL
        !          4578: {{DAC{STNDF{{{VRFNC
        !          4579: {{DAC{0{{{VRNXT
        !          4580: {{EJC{{{{
        !          4581: *
        !          4582: *      MESSAGES USED IN END OF RUN PROCESSING (STOPR)
        !          4583: *
        !          4584: {STPM1{DAC{B$SCL{{{IN STATEMENT
        !          4585: {{DAC{12{{{
        !          4586: {{DTC{/IN STATEMENT/{{{
        !          4587: *
        !          4588: {STPM2{DAC{B$SCL{{{
        !          4589: {{DAC{14{{{
        !          4590: {{DTC{/STMTS EXECUTED/{{{
        !          4591: *
        !          4592: {STPM3{DAC{B$SCL{{{
        !          4593: {{DAC{13{{{
        !          4594: {{DTC{/RUN TIME-MSEC/{{{
        !          4595: *
        !          4596: {STPM4{DAC{B$SCL{{{
        !          4597: {{DAC{12{{{
        !          4598: {{DTC{$MCSEC / STMT${{{
        !          4599: *
        !          4600: {STPM5{DAC{B$SCL{{{
        !          4601: {{DAC{13{{{
        !          4602: {{DTC{/REGENERATIONS/{{{
        !          4603: *
        !          4604: *      CHARS FOR /TU/ ENDING CODE
        !          4605: *
        !          4606: {STRTU{DTC{/TU/{{{
        !          4607: *
        !          4608: *      TABLE USED BY CONVERT FUNCTION TO CHECK DATATYPE NAME
        !          4609: *      THE ENTRIES ARE ORDERED TO CORRESPOND TO BRANCH TABLE
        !          4610: *      IN S$CNV
        !          4611: *
        !          4612: {SVCTB{DAC{SCSTR{{{STRING
        !          4613: {{DAC{SCINT{{{INTEGER
        !          4614: {{DAC{SCNAM{{{NAME
        !          4615: {{DAC{SCPAT{{{PATTERN
        !          4616: {{DAC{SCARR{{{ARRAY
        !          4617: {{DAC{SCTAB{{{TABLE
        !          4618: {{DAC{SCEXP{{{EXPRESSION
        !          4619: {{DAC{SCCOD{{{CODE
        !          4620: {{DAC{SCNUM{{{NUMERIC
        !          4621: {{DAC{SCREA{{{REAL
        !          4622: {{DAC{SCBUF{{{BUFFER
        !          4623: {{DAC{0{{{ZERO MARKS END OF LIST
        !          4624: {{EJC{{{{
        !          4625: *
        !          4626: *      MESSAGES (SCBLK FORMAT) USED BY TRACE PROCEDURES
        !          4627: *
        !          4628: *
        !          4629: {TMASB{DAC{B$SCL{{{ASTERISKS FOR TRACE STATEMENT NO
        !          4630: {{DAC{13{{{
        !          4631: {{DTC{/************ /{{{
        !          4632: *
        !          4633: {TMBEB{DAC{B$SCL{{{BLANK-EQUAL-BLANK
        !          4634: {{DAC{3{{{
        !          4635: {{DTC{/ = /{{{
        !          4636: *
        !          4637: *      DUMMY TRBLK FOR EXPRESSION VARIABLE
        !          4638: *
        !          4639: {TRBEV{DAC{B$TRT{{{DUMMY TRBLK
        !          4640: *
        !          4641: *      DUMMY TRBLK FOR KEYWORD VARIABLE
        !          4642: *
        !          4643: {TRBKV{DAC{B$TRT{{{DUMMY TRBLK
        !          4644: *
        !          4645: *      DUMMY CODE BLOCK TO RETURN CONTROL TO TRXEQ PROCEDURE
        !          4646: *
        !          4647: {TRXDR{DAC{O$TXR{{{BLOCK POINTS TO RETURN ROUTINE
        !          4648: {TRXDC{DAC{TRXDR{{{POINTER TO BLOCK
        !          4649: {{EJC{{{{
        !          4650: *
        !          4651: *      STANDARD VARIABLE BLOCKS
        !          4652: *
        !          4653: *      SEE SVBLK FORMAT FOR FULL DETAILS OF THE FORMAT. THE
        !          4654: *      VRBLKS ARE ORDERED BY LENGTH AND WITHIN EACH LENGTH THE
        !          4655: *      ORDER IS ALPHABETICAL BY NAME OF THE VARIABLE.
        !          4656: *
        !          4657: {V$EQF{DBC{SVFPR{{{EQ
        !          4658: {{DAC{2{{{
        !          4659: {{DTC{/EQ/{{{
        !          4660: {{DAC{S$EQF{{{
        !          4661: {{DAC{2{{{
        !          4662: *
        !          4663: {V$GEF{DBC{SVFPR{{{GE
        !          4664: {{DAC{2{{{
        !          4665: {{DTC{/GE/{{{
        !          4666: {{DAC{S$GEF{{{
        !          4667: {{DAC{2{{{
        !          4668: *
        !          4669: {V$GTF{DBC{SVFPR{{{GT
        !          4670: {{DAC{2{{{
        !          4671: {{DTC{/GT/{{{
        !          4672: {{DAC{S$GTF{{{
        !          4673: {{DAC{2{{{
        !          4674: *
        !          4675: {V$LEF{DBC{SVFPR{{{LE
        !          4676: {{DAC{2{{{
        !          4677: {{DTC{/LE/{{{
        !          4678: {{DAC{S$LEF{{{
        !          4679: {{DAC{2{{{
        !          4680: *
        !          4681: {V$LTF{DBC{SVFPR{{{LT
        !          4682: {{DAC{2{{{
        !          4683: {{DTC{/LT/{{{
        !          4684: {{DAC{S$LTF{{{
        !          4685: {{DAC{2{{{
        !          4686: *
        !          4687: {V$NEF{DBC{SVFPR{{{NE
        !          4688: {{DAC{2{{{
        !          4689: {{DTC{/NE/{{{
        !          4690: {{DAC{S$NEF{{{
        !          4691: {{DAC{2{{{
        !          4692: *
        !          4693: {V$ANY{DBC{SVFNP{{{ANY
        !          4694: {{DAC{3{{{
        !          4695: {{DTC{/ANY/{{{
        !          4696: {{DAC{S$ANY{{{
        !          4697: {{DAC{1{{{
        !          4698: *
        !          4699: {V$ARB{DBC{SVKVC{{{ARB
        !          4700: {{DAC{3{{{
        !          4701: {{DTC{/ARB/{{{
        !          4702: {{DAC{K$ARB{{{
        !          4703: {{DAC{NDARB{{{
        !          4704: {{EJC{{{{
        !          4705: *
        !          4706: *      STANDARD VARIABLE BLOCKS (CONTINUED)
        !          4707: *
        !          4708: {V$ARG{DBC{SVFNN{{{ARG
        !          4709: {{DAC{3{{{
        !          4710: {{DTC{/ARG/{{{
        !          4711: {{DAC{S$ARG{{{
        !          4712: {{DAC{2{{{
        !          4713: *
        !          4714: {V$BAL{DBC{SVKVC{{{BAL
        !          4715: {{DAC{3{{{
        !          4716: {{DTC{/BAL/{{{
        !          4717: {{DAC{K$BAL{{{
        !          4718: {{DAC{NDBAL{{{
        !          4719: *
        !          4720: {V$END{DBC{SVLBL{{{END
        !          4721: {{DAC{3{{{
        !          4722: {{DTC{/END/{{{
        !          4723: {{DAC{L$END{{{
        !          4724: *
        !          4725: {V$LEN{DBC{SVFNP{{{LEN
        !          4726: {{DAC{3{{{
        !          4727: {{DTC{/LEN/{{{
        !          4728: {{DAC{S$LEN{{{
        !          4729: {{DAC{1{{{
        !          4730: *
        !          4731: {V$LEQ{DBC{SVFPR{{{LEQ
        !          4732: {{DAC{3{{{
        !          4733: {{DTC{/LEQ/{{{
        !          4734: {{DAC{S$LEQ{{{
        !          4735: {{DAC{2{{{
        !          4736: *
        !          4737: {V$LGE{DBC{SVFPR{{{LGE
        !          4738: {{DAC{3{{{
        !          4739: {{DTC{/LGE/{{{
        !          4740: {{DAC{S$LGE{{{
        !          4741: {{DAC{2{{{
        !          4742: *
        !          4743: {V$LGT{DBC{SVFPR{{{LGT
        !          4744: {{DAC{3{{{
        !          4745: {{DTC{/LGT/{{{
        !          4746: {{DAC{S$LGT{{{
        !          4747: {{DAC{2{{{
        !          4748: *
        !          4749: {V$LLE{DBC{SVFPR{{{LLE
        !          4750: {{DAC{3{{{
        !          4751: {{DTC{/LLE/{{{
        !          4752: {{DAC{S$LLE{{{
        !          4753: {{DAC{2{{{
        !          4754: {{EJC{{{{
        !          4755: *
        !          4756: *      STANDARD VARIABLE BLOCKS (CONTINUED)
        !          4757: *
        !          4758: {V$LLT{DBC{SVFPR{{{LLT
        !          4759: {{DAC{3{{{
        !          4760: {{DTC{/LLT/{{{
        !          4761: {{DAC{S$LLT{{{
        !          4762: {{DAC{2{{{
        !          4763: *
        !          4764: {V$LNE{DBC{SVFPR{{{LNE
        !          4765: {{DAC{3{{{
        !          4766: {{DTC{/LNE/{{{
        !          4767: {{DAC{S$LNE{{{
        !          4768: {{DAC{2{{{
        !          4769: *
        !          4770: {V$POS{DBC{SVFNP{{{POS
        !          4771: {{DAC{3{{{
        !          4772: {{DTC{/POS/{{{
        !          4773: {{DAC{S$POS{{{
        !          4774: {{DAC{1{{{
        !          4775: *
        !          4776: {V$REM{DBC{SVKVC{{{REM
        !          4777: {{DAC{3{{{
        !          4778: {{DTC{/REM/{{{
        !          4779: {{DAC{K$REM{{{
        !          4780: {{DAC{NDREM{{{
        !          4781: *
        !          4782: {V$SET{DBC{SVFNN{{{SET
        !          4783: {{DAC{3{{{
        !          4784: {{DTC{/SET/{{{
        !          4785: {{DAC{S$SET{{{
        !          4786: {{DAC{3{{{
        !          4787: *
        !          4788: {V$TAB{DBC{SVFNP{{{TAB
        !          4789: {{DAC{3{{{
        !          4790: {{DTC{/TAB/{{{
        !          4791: {{DAC{S$TAB{{{
        !          4792: {{DAC{1{{{
        !          4793: *
        !          4794: {V$CAS{DBC{SVKNM{{{CASE
        !          4795: {{DAC{4{{{
        !          4796: {{DTC{/CASE/{{{
        !          4797: {{DAC{K$CAS{{{
        !          4798: *
        !          4799: {V$CHR{DBC{SVFNP{{{CHAR
        !          4800: {{DAC{4{{{
        !          4801: {{DTC{/CHAR/{{{
        !          4802: {{DAC{S$CHR{{{
        !          4803: {{DAC{1{{{
        !          4804: *
        !          4805: {V$COD{DBC{SVFNK{{{CODE
        !          4806: {{DAC{4{{{
        !          4807: {{DTC{/CODE/{{{
        !          4808: {{DAC{K$COD{{{
        !          4809: {{DAC{S$COD{{{
        !          4810: {{DAC{1{{{
        !          4811: *
        !          4812: {V$COP{DBC{SVFNN{{{COPY
        !          4813: {{DAC{4{{{
        !          4814: {{DTC{/COPY/{{{
        !          4815: {{DAC{S$COP{{{
        !          4816: {{DAC{1{{{
        !          4817: {{EJC{{{{
        !          4818: *
        !          4819: *      STANDARD VARIABLE BLOCKS (CONTINUED)
        !          4820: *
        !          4821: {V$DAT{DBC{SVFNN{{{DATA
        !          4822: {{DAC{4{{{
        !          4823: {{DTC{/DATA/{{{
        !          4824: {{DAC{S$DAT{{{
        !          4825: {{DAC{1{{{
        !          4826: *
        !          4827: {V$DTE{DBC{SVFNN{{{DATE
        !          4828: {{DAC{4{{{
        !          4829: {{DTC{/DATE/{{{
        !          4830: {{DAC{S$DTE{{{
        !          4831: {{DAC{0{{{
        !          4832: *
        !          4833: {V$DMP{DBC{SVFNK{{{DUMP
        !          4834: {{DAC{4{{{
        !          4835: {{DTC{/DUMP/{{{
        !          4836: {{DAC{K$DMP{{{
        !          4837: {{DAC{S$DMP{{{
        !          4838: {{DAC{1{{{
        !          4839: *
        !          4840: {V$DUP{DBC{SVFNN{{{DUPL
        !          4841: {{DAC{4{{{
        !          4842: {{DTC{/DUPL/{{{
        !          4843: {{DAC{S$DUP{{{
        !          4844: {{DAC{2{{{
        !          4845: *
        !          4846: {V$EVL{DBC{SVFNN{{{EVAL
        !          4847: {{DAC{4{{{
        !          4848: {{DTC{/EVAL/{{{
        !          4849: {{DAC{S$EVL{{{
        !          4850: {{DAC{1{{{
        !          4851: *
        !          4852: {V$EXT{DBC{SVFNN{{{EXIT
        !          4853: {{DAC{4{{{
        !          4854: {{DTC{/EXIT/{{{
        !          4855: {{DAC{S$EXT{{{
        !          4856: {{DAC{1{{{
        !          4857: *
        !          4858: {V$FAL{DBC{SVKVC{{{FAIL
        !          4859: {{DAC{4{{{
        !          4860: {{DTC{/FAIL/{{{
        !          4861: {{DAC{K$FAL{{{
        !          4862: {{DAC{NDFAL{{{
        !          4863: *
        !          4864: {V$HST{DBC{SVFNN{{{HOST
        !          4865: {{DAC{4{{{
        !          4866: {{DTC{/HOST/{{{
        !          4867: {{DAC{S$HST{{{
        !          4868: {{DAC{3{{{
        !          4869: {{EJC{{{{
        !          4870: *
        !          4871: *      STANDARD VARIABLE BLOCKS (CONTINUED)
        !          4872: *
        !          4873: {V$ITM{DBC{SVFNF{{{ITEM
        !          4874: {{DAC{4{{{
        !          4875: {{DTC{/ITEM/{{{
        !          4876: {{DAC{S$ITM{{{
        !          4877: {{DAC{999{{{
        !          4878: *
        !          4879: {V$LOD{DBC{SVFNN{{{LOAD
        !          4880: {{DAC{4{{{
        !          4881: {{DTC{/LOAD/{{{
        !          4882: {{DAC{S$LOD{{{
        !          4883: {{DAC{2{{{
        !          4884: *
        !          4885: {V$LPD{DBC{SVFNP{{{LPAD
        !          4886: {{DAC{4{{{
        !          4887: {{DTC{/LPAD/{{{
        !          4888: {{DAC{S$LPD{{{
        !          4889: {{DAC{3{{{
        !          4890: *
        !          4891: {V$RPD{DBC{SVFNP{{{RPAD
        !          4892: {{DAC{4{{{
        !          4893: {{DTC{/RPAD/{{{
        !          4894: {{DAC{S$RPD{{{
        !          4895: {{DAC{3{{{
        !          4896: *
        !          4897: {V$RPS{DBC{SVFNP{{{RPOS
        !          4898: {{DAC{4{{{
        !          4899: {{DTC{/RPOS/{{{
        !          4900: {{DAC{S$RPS{{{
        !          4901: {{DAC{1{{{
        !          4902: *
        !          4903: {V$RTB{DBC{SVFNP{{{RTAB
        !          4904: {{DAC{4{{{
        !          4905: {{DTC{/RTAB/{{{
        !          4906: {{DAC{S$RTB{{{
        !          4907: {{DAC{1{{{
        !          4908: *
        !          4909: {V$SI${DBC{SVFNP{{{SIZE
        !          4910: {{DAC{4{{{
        !          4911: {{DTC{/SIZE/{{{
        !          4912: {{DAC{S$SI${{{
        !          4913: {{DAC{1{{{
        !          4914: *
        !          4915: *
        !          4916: {V$SRT{DBC{SVFNN{{{SORT
        !          4917: {{DAC{4{{{
        !          4918: {{DTC{/SORT/{{{
        !          4919: {{DAC{S$SRT{{{
        !          4920: {{DAC{2{{{
        !          4921: {V$SPN{DBC{SVFNP{{{SPAN
        !          4922: {{DAC{4{{{
        !          4923: {{DTC{/SPAN/{{{
        !          4924: {{DAC{S$SPN{{{
        !          4925: {{DAC{1{{{
        !          4926: {{EJC{{{{
        !          4927: *
        !          4928: *      STANDARD VARIABLE BLOCKS (CONTINUED)
        !          4929: *
        !          4930: {V$STN{DBC{SVKNM{{{STNO
        !          4931: {{DAC{4{{{
        !          4932: {{DTC{/STNO/{{{
        !          4933: {{DAC{K$STN{{{
        !          4934: *
        !          4935: {V$TIM{DBC{SVFNN{{{TIME
        !          4936: {{DAC{4{{{
        !          4937: {{DTC{/TIME/{{{
        !          4938: {{DAC{S$TIM{{{
        !          4939: {{DAC{0{{{
        !          4940: *
        !          4941: {V$TRM{DBC{SVFNK{{{TRIM
        !          4942: {{DAC{4{{{
        !          4943: {{DTC{/TRIM/{{{
        !          4944: {{DAC{K$TRM{{{
        !          4945: {{DAC{S$TRM{{{
        !          4946: {{DAC{1{{{
        !          4947: *
        !          4948: {V$ABE{DBC{SVKNM{{{ABEND
        !          4949: {{DAC{5{{{
        !          4950: {{DTC{/ABEND/{{{
        !          4951: {{DAC{K$ABE{{{
        !          4952: *
        !          4953: {V$ABO{DBC{SVKVL{{{ABORT
        !          4954: {{DAC{5{{{
        !          4955: {{DTC{/ABORT/{{{
        !          4956: {{DAC{K$ABO{{{
        !          4957: {{DAC{L$ABO{{{
        !          4958: {{DAC{NDABO{{{
        !          4959: *
        !          4960: {V$APP{DBC{SVFNF{{{APPLY
        !          4961: {{DAC{5{{{
        !          4962: {{DTC{/APPLY/{{{
        !          4963: {{DAC{S$APP{{{
        !          4964: {{DAC{999{{{
        !          4965: *
        !          4966: {V$ABN{DBC{SVFNP{{{ARBNO
        !          4967: {{DAC{5{{{
        !          4968: {{DTC{/ARBNO/{{{
        !          4969: {{DAC{S$ABN{{{
        !          4970: {{DAC{1{{{
        !          4971: *
        !          4972: {V$ARR{DBC{SVFNN{{{ARRAY
        !          4973: {{DAC{5{{{
        !          4974: {{DTC{/ARRAY/{{{
        !          4975: {{DAC{S$ARR{{{
        !          4976: {{DAC{2{{{
        !          4977: {{EJC{{{{
        !          4978: *
        !          4979: *      STANDARD VARIABLE BLOCKS (CONTINUED)
        !          4980: *
        !          4981: {V$BRK{DBC{SVFNP{{{BREAK
        !          4982: {{DAC{5{{{
        !          4983: {{DTC{/BREAK/{{{
        !          4984: {{DAC{S$BRK{{{
        !          4985: {{DAC{1{{{
        !          4986: *
        !          4987: {V$CLR{DBC{SVFNN{{{CLEAR
        !          4988: {{DAC{5{{{
        !          4989: {{DTC{/CLEAR/{{{
        !          4990: {{DAC{S$CLR{{{
        !          4991: {{DAC{1{{{
        !          4992: *
        !          4993: {V$EJC{DBC{SVFNN{{{EJECT
        !          4994: {{DAC{5{{{
        !          4995: {{DTC{/EJECT/{{{
        !          4996: {{DAC{S$EJC{{{
        !          4997: {{DAC{1{{{
        !          4998: *
        !          4999: {V$FEN{DBC{SVFPK{{{FENCE
        !          5000: {{DAC{5{{{
        !          5001: {{DTC{/FENCE/{{{
        !          5002: {{DAC{K$FEN{{{
        !          5003: {{DAC{S$FNC{{{
        !          5004: {{DAC{1{{{
        !          5005: {{DAC{NDFEN{{{
        !          5006: *
        !          5007: {V$FLD{DBC{SVFNN{{{FIELD
        !          5008: {{DAC{5{{{
        !          5009: {{DTC{/FIELD/{{{
        !          5010: {{DAC{S$FLD{{{
        !          5011: {{DAC{2{{{
        !          5012: *
        !          5013: {V$IDN{DBC{SVFPR{{{IDENT
        !          5014: {{DAC{5{{{
        !          5015: {{DTC{/IDENT/{{{
        !          5016: {{DAC{S$IDN{{{
        !          5017: {{DAC{2{{{
        !          5018: *
        !          5019: {V$INP{DBC{SVFNK{{{INPUT
        !          5020: {{DAC{5{{{
        !          5021: {{DTC{/INPUT/{{{
        !          5022: {{DAC{K$INP{{{
        !          5023: {{DAC{S$INP{{{
        !          5024: {{DAC{3{{{
        !          5025: *
        !          5026: {V$LOC{DBC{SVFNN{{{LOCAL
        !          5027: {{DAC{5{{{
        !          5028: {{DTC{/LOCAL/{{{
        !          5029: {{DAC{S$LOC{{{
        !          5030: {{DAC{2{{{
        !          5031: {{EJC{{{{
        !          5032: *
        !          5033: *      STANDARD VARIABLE BLOCKS (CONTINUED)
        !          5034: *
        !          5035: {V$OPS{DBC{SVFNN{{{OPSYN
        !          5036: {{DAC{5{{{
        !          5037: {{DTC{/OPSYN/{{{
        !          5038: {{DAC{S$OPS{{{
        !          5039: {{DAC{3{{{
        !          5040: *
        !          5041: {V$RMD{DBC{SVFNP{{{REMDR
        !          5042: {{DAC{5{{{
        !          5043: {{DTC{/REMDR/{{{
        !          5044: {{DAC{S$RMD{{{
        !          5045: {{DAC{2{{{
        !          5046: *
        !          5047: {V$RSR{DBC{SVFNN{{{RSORT
        !          5048: {{DAC{5{{{
        !          5049: {{DTC{/RSORT/{{{
        !          5050: {{DAC{S$RSR{{{
        !          5051: {{DAC{2{{{
        !          5052: *
        !          5053: {V$TBL{DBC{SVFNN{{{TABLE
        !          5054: {{DAC{5{{{
        !          5055: {{DTC{/TABLE/{{{
        !          5056: {{DAC{S$TBL{{{
        !          5057: {{DAC{3{{{
        !          5058: *
        !          5059: {V$TRA{DBC{SVFNK{{{TRACE
        !          5060: {{DAC{5{{{
        !          5061: {{DTC{/TRACE/{{{
        !          5062: {{DAC{K$TRA{{{
        !          5063: {{DAC{S$TRA{{{
        !          5064: {{DAC{4{{{
        !          5065: *
        !          5066: {V$ANC{DBC{SVKNM{{{ANCHOR
        !          5067: {{DAC{6{{{
        !          5068: {{DTC{/ANCHOR/{{{
        !          5069: {{DAC{K$ANC{{{
        !          5070: *
        !          5071: {V$APN{DBC{SVFNN{{{
        !          5072: {{DAC{6{{{
        !          5073: {{DTC{/APPEND/{{{
        !          5074: {{DAC{S$APN{{{
        !          5075: {{DAC{2{{{
        !          5076: *
        !          5077: {V$BKX{DBC{SVFNP{{{BREAKX
        !          5078: {{DAC{6{{{
        !          5079: {{DTC{/BREAKX/{{{
        !          5080: {{DAC{S$BKX{{{
        !          5081: {{DAC{1{{{
        !          5082: *
        !          5083: {V$BUF{DBC{SVFNN{{{BUFFER
        !          5084: {{DAC{6{{{
        !          5085: {{DTC{/BUFFER/{{{
        !          5086: {{DAC{S$BUF{{{
        !          5087: {{DAC{2{{{
        !          5088: *
        !          5089: {V$DEF{DBC{SVFNN{{{DEFINE
        !          5090: {{DAC{6{{{
        !          5091: {{DTC{/DEFINE/{{{
        !          5092: {{DAC{S$DEF{{{
        !          5093: {{DAC{2{{{
        !          5094: *
        !          5095: {V$DET{DBC{SVFNN{{{DETACH
        !          5096: {{DAC{6{{{
        !          5097: {{DTC{/DETACH/{{{
        !          5098: {{DAC{S$DET{{{
        !          5099: {{DAC{1{{{
        !          5100: {{EJC{{{{
        !          5101: *
        !          5102: *      STANDARD VARIABLE BLOCKS (CONTINUED)
        !          5103: *
        !          5104: {V$DIF{DBC{SVFPR{{{DIFFER
        !          5105: {{DAC{6{{{
        !          5106: {{DTC{/DIFFER/{{{
        !          5107: {{DAC{S$DIF{{{
        !          5108: {{DAC{2{{{
        !          5109: *
        !          5110: {V$FTR{DBC{SVKNM{{{FTRACE
        !          5111: {{DAC{6{{{
        !          5112: {{DTC{/FTRACE/{{{
        !          5113: {{DAC{K$FTR{{{
        !          5114: *
        !          5115: {V$INS{DBC{SVFNN{{{INSERT
        !          5116: {{DAC{6{{{
        !          5117: {{DTC{/INSERT/{{{
        !          5118: {{DAC{S$INS{{{
        !          5119: {{DAC{4{{{
        !          5120: *
        !          5121: {V$LST{DBC{SVKNM{{{LASTNO
        !          5122: {{DAC{6{{{
        !          5123: {{DTC{/LASTNO/{{{
        !          5124: {{DAC{K$LST{{{
        !          5125: *
        !          5126: {V$NAY{DBC{SVFNP{{{NOTANY
        !          5127: {{DAC{6{{{
        !          5128: {{DTC{/NOTANY/{{{
        !          5129: {{DAC{S$NAY{{{
        !          5130: {{DAC{1{{{
        !          5131: *
        !          5132: {V$OUP{DBC{SVFNK{{{OUTPUT
        !          5133: {{DAC{6{{{
        !          5134: {{DTC{/OUTPUT/{{{
        !          5135: {{DAC{K$OUP{{{
        !          5136: {{DAC{S$OUP{{{
        !          5137: {{DAC{3{{{
        !          5138: *
        !          5139: {V$RET{DBC{SVLBL{{{RETURN
        !          5140: {{DAC{6{{{
        !          5141: {{DTC{/RETURN/{{{
        !          5142: {{DAC{L$RTN{{{
        !          5143: *
        !          5144: {V$REW{DBC{SVFNN{{{REWIND
        !          5145: {{DAC{6{{{
        !          5146: {{DTC{/REWIND/{{{
        !          5147: {{DAC{S$REW{{{
        !          5148: {{DAC{1{{{
        !          5149: *
        !          5150: {V$STT{DBC{SVFNN{{{STOPTR
        !          5151: {{DAC{6{{{
        !          5152: {{DTC{/STOPTR/{{{
        !          5153: {{DAC{S$STT{{{
        !          5154: {{DAC{2{{{
        !          5155: {{EJC{{{{
        !          5156: *
        !          5157: *      STANDARD VARIABLE BLOCKS (CONTINUED)
        !          5158: *
        !          5159: {V$SUB{DBC{SVFNN{{{SUBSTR
        !          5160: {{DAC{6{{{
        !          5161: {{DTC{/SUBSTR/{{{
        !          5162: {{DAC{S$SUB{{{
        !          5163: {{DAC{3{{{
        !          5164: *
        !          5165: {V$UNL{DBC{SVFNN{{{UNLOAD
        !          5166: {{DAC{6{{{
        !          5167: {{DTC{/UNLOAD/{{{
        !          5168: {{DAC{S$UNL{{{
        !          5169: {{DAC{1{{{
        !          5170: *
        !          5171: {V$COL{DBC{SVFNN{{{COLLECT
        !          5172: {{DAC{7{{{
        !          5173: {{DTC{/COLLECT/{{{
        !          5174: {{DAC{S$COL{{{
        !          5175: {{DAC{1{{{
        !          5176: *
        !          5177: {V$CNV{DBC{SVFNN{{{CONVERT
        !          5178: {{DAC{7{{{
        !          5179: {{DTC{/CONVERT/{{{
        !          5180: {{DAC{S$CNV{{{
        !          5181: {{DAC{2{{{
        !          5182: *
        !          5183: {V$ENF{DBC{SVFNN{{{ENDFILE
        !          5184: {{DAC{7{{{
        !          5185: {{DTC{/ENDFILE/{{{
        !          5186: {{DAC{S$ENF{{{
        !          5187: {{DAC{1{{{
        !          5188: *
        !          5189: {V$ETX{DBC{SVKNM{{{ERRTEXT
        !          5190: {{DAC{7{{{
        !          5191: {{DTC{/ERRTEXT/{{{
        !          5192: {{DAC{K$ETX{{{
        !          5193: *
        !          5194: {V$ERT{DBC{SVKNM{{{ERRTYPE
        !          5195: {{DAC{7{{{
        !          5196: {{DTC{/ERRTYPE/{{{
        !          5197: {{DAC{K$ERT{{{
        !          5198: *
        !          5199: {V$FRT{DBC{SVLBL{{{FRETURN
        !          5200: {{DAC{7{{{
        !          5201: {{DTC{/FRETURN/{{{
        !          5202: {{DAC{L$FRT{{{
        !          5203: *
        !          5204: {V$INT{DBC{SVFPR{{{INTEGER
        !          5205: {{DAC{7{{{
        !          5206: {{DTC{/INTEGER/{{{
        !          5207: {{DAC{S$INT{{{
        !          5208: {{DAC{1{{{
        !          5209: *
        !          5210: {V$NRT{DBC{SVLBL{{{NRETURN
        !          5211: {{DAC{7{{{
        !          5212: {{DTC{/NRETURN/{{{
        !          5213: {{DAC{L$NRT{{{
        !          5214: {{EJC{{{{
        !          5215: *
        !          5216: *      STANDARD VARIABLE BLOCKS (CONTINUED)
        !          5217: *
        !          5218: *
        !          5219: {V$PFL{DBC{SVKNM{{{PROFILE
        !          5220: {{DAC{7{{{
        !          5221: {{DTC{/PROFILE/{{{
        !          5222: {{DAC{K$PFL{{{
        !          5223: *
        !          5224: {V$RPL{DBC{SVFNP{{{REPLACE
        !          5225: {{DAC{7{{{
        !          5226: {{DTC{/REPLACE/{{{
        !          5227: {{DAC{S$RPL{{{
        !          5228: {{DAC{3{{{
        !          5229: *
        !          5230: {V$RVS{DBC{SVFNP{{{REVERSE
        !          5231: {{DAC{7{{{
        !          5232: {{DTC{/REVERSE/{{{
        !          5233: {{DAC{S$RVS{{{
        !          5234: {{DAC{1{{{
        !          5235: *
        !          5236: {V$RTN{DBC{SVKNM{{{RTNTYPE
        !          5237: {{DAC{7{{{
        !          5238: {{DTC{/RTNTYPE/{{{
        !          5239: {{DAC{K$RTN{{{
        !          5240: *
        !          5241: {V$STX{DBC{SVFNN{{{SETEXIT
        !          5242: {{DAC{7{{{
        !          5243: {{DTC{/SETEXIT/{{{
        !          5244: {{DAC{S$STX{{{
        !          5245: {{DAC{1{{{
        !          5246: *
        !          5247: {V$STC{DBC{SVKNM{{{STCOUNT
        !          5248: {{DAC{7{{{
        !          5249: {{DTC{/STCOUNT/{{{
        !          5250: {{DAC{K$STC{{{
        !          5251: *
        !          5252: {V$STL{DBC{SVKNM{{{STLIMIT
        !          5253: {{DAC{7{{{
        !          5254: {{DTC{/STLIMIT/{{{
        !          5255: {{DAC{K$STL{{{
        !          5256: *
        !          5257: {V$SUC{DBC{SVKVC{{{SUCCEED
        !          5258: {{DAC{7{{{
        !          5259: {{DTC{/SUCCEED/{{{
        !          5260: {{DAC{K$SUC{{{
        !          5261: {{DAC{NDSUC{{{
        !          5262: *
        !          5263: {V$ALP{DBC{SVKWC{{{ALPHABET
        !          5264: {{DAC{8{{{
        !          5265: {{DTC{/ALPHABET/{{{
        !          5266: {{DAC{K$ALP{{{
        !          5267: *
        !          5268: {V$CNT{DBC{SVLBL{{{CONTINUE
        !          5269: {{DAC{8{{{
        !          5270: {{DTC{/CONTINUE/{{{
        !          5271: {{DAC{L$CNT{{{
        !          5272: {{EJC{{{{
        !          5273: *
        !          5274: *      STANDARD VARIABLE BLOCKS (CONTINUED)
        !          5275: *
        !          5276: {V$DTP{DBC{SVFNP{{{DATATYPE
        !          5277: {{DAC{8{{{
        !          5278: {{DTC{/DATATYPE/{{{
        !          5279: {{DAC{S$DTP{{{
        !          5280: {{DAC{1{{{
        !          5281: *
        !          5282: {V$ERL{DBC{SVKNM{{{ERRLIMIT
        !          5283: {{DAC{8{{{
        !          5284: {{DTC{/ERRLIMIT/{{{
        !          5285: {{DAC{K$ERL{{{
        !          5286: *
        !          5287: {V$FNC{DBC{SVKNM{{{FNCLEVEL
        !          5288: {{DAC{8{{{
        !          5289: {{DTC{/FNCLEVEL/{{{
        !          5290: {{DAC{K$FNC{{{
        !          5291: *
        !          5292: {V$MXL{DBC{SVKNM{{{MAXLNGTH
        !          5293: {{DAC{8{{{
        !          5294: {{DTC{/MAXLNGTH/{{{
        !          5295: {{DAC{K$MXL{{{
        !          5296: *
        !          5297: {V$TER{DBC{0{{{TERMINAL
        !          5298: {{DAC{8{{{
        !          5299: {{DTC{/TERMINAL/{{{
        !          5300: {{DAC{0{{{
        !          5301: *
        !          5302: {V$PRO{DBC{SVFNN{{{PROTOTYPE
        !          5303: {{DAC{9{{{
        !          5304: {{DTC{/PROTOTYPE/{{{
        !          5305: {{DAC{S$PRO{{{
        !          5306: {{DAC{1{{{
        !          5307: *
        !          5308: {{DBC{0{{{DUMMY ENTRY TO END LIST
        !          5309: {{DAC{10{{{LENGTH GT 9 (PROTOTYPE)
        !          5310: {{EJC{{{{
        !          5311: *
        !          5312: *      LIST OF SVBLK POINTERS FOR KEYWORDS TO BE DUMPED. THE
        !          5313: *      LIST IS IN THE ORDER WHICH APPEARS ON THE DUMP OUTPUT.
        !          5314: *
        !          5315: {VDMKW{DAC{V$ANC{{{ANCHOR
        !          5316: {{DAC{V$CAS{{{CCASE
        !          5317: {{DAC{V$COD{{{CODE
        !          5318: {{DAC{V$DMP{{{DUMP
        !          5319: {{DAC{V$ERL{{{ERRLIMIT
        !          5320: {{DAC{V$ETX{{{ERRTEXT
        !          5321: {{DAC{V$ERT{{{ERRTYPE
        !          5322: {{DAC{V$FNC{{{FNCLEVEL
        !          5323: {{DAC{V$FTR{{{FTRACE
        !          5324: {{DAC{V$INP{{{INPUT
        !          5325: {{DAC{V$LST{{{LASTNO
        !          5326: {{DAC{V$MXL{{{MAXLENGTH
        !          5327: {{DAC{V$OUP{{{OUTPUT
        !          5328: {{DAC{V$PFL{{{PROFILE
        !          5329: {{DAC{V$RTN{{{RTNTYPE
        !          5330: {{DAC{V$STC{{{STCOUNT
        !          5331: {{DAC{V$STL{{{STLIMIT
        !          5332: {{DAC{V$STN{{{STNO
        !          5333: {{DAC{V$TRA{{{TRACE
        !          5334: {{DAC{V$TRM{{{TRIM
        !          5335: {{DAC{0{{{END OF LIST
        !          5336: *
        !          5337: *      TABLE USED BY GTNVR TO SEARCH SVBLK LISTS
        !          5338: *
        !          5339: {VSRCH{DAC{0{{{DUMMY ENTRY TO GET PROPER INDEXING
        !          5340: {{DAC{V$EQF{{{START OF 1 CHAR VARIABLES (NONE)
        !          5341: {{DAC{V$EQF{{{START OF 2 CHAR VARIABLES
        !          5342: {{DAC{V$ANY{{{START OF 3 CHAR VARIABLES
        !          5343: {{DAC{V$CAS{{{START OF 4 CHAR VARIABLES
        !          5344: {{DAC{V$ABE{{{START OF 5 CHAR VARIABLES
        !          5345: {{DAC{V$ANC{{{START OF 6 CHAR VARIABLES
        !          5346: {{DAC{V$COL{{{START OF 7 CHAR VARIABLES
        !          5347: {{DAC{V$ALP{{{START OF 8 CHAR VARIABLES
        !          5348: {{DAC{V$PRO{{{START OF 9 CHAR VARIABLES
        !          5349: {{TTL{S{{{P I T B O L -- WORKING STORAGE SECTION
        !          5350: *
        !          5351: *      THE WORKING STORAGE SECTION CONTAINS AREAS WHICH ARE
        !          5352: *      CHANGED DURING EXECUTION OF THE PROGRAM. THE VALUE
        !          5353: *      ASSEMBLED IS THE INITIAL VALUE BEFORE EXECUTION STARTS.
        !          5354: *
        !          5355: *      ALL THESE AREAS ARE FIXED LENGTH AREAS. VARIABLE LENGTH
        !          5356: *      DATA IS STORED IN THE STATIC OR DYNAMIC REGIONS OF THE
        !          5357: *      ALLOCATED DATA AREAS.
        !          5358: *
        !          5359: *      THE VALUES IN THIS AREA ARE DESCRIBED EITHER AS WORK
        !          5360: *      AREAS OR AS GLOBAL VALUES. A WORK AREA IS USED IN AN
        !          5361: *      EPHEMERAL MANNER AND THE VALUE IS NOT SAVED FROM ONE
        !          5362: *      ENTRY INTO A ROUTINE TO ANOTHER. A GLOBAL VALUE IS A
        !          5363: *      LESS TEMPORARY LOCATION WHOSE VALUE IS SAVED FROM ONE
        !          5364: *      CALL TO ANOTHER.
        !          5365: *
        !          5366: *      A GENERAL PART OF THE APPROACH IN THIS PROGRAM IS NOT
        !          5367: *      TO OVERLAP WORK AREAS BETWEEN PROCEDURES EVEN THOUGH A
        !          5368: *      SMALL AMOUNT OF SPACE COULD BE SAVED. SUCH OVERLAP IS
        !          5369: *      CONSIDERED A SOURCE OF PROGRAM ERRORS AND DECREASES THE
        !          5370: *      INFORMATION LEFT BEHIND AFTER A SYSTEM CRASH OF ANY KIND.
        !          5371: *
        !          5372: *      THE NAMES OF THESE LOCATIONS ARE LABELS WITH FIVE LETTER
        !          5373: *      (A-Y,$) NAMES. AS FAR AS POSSIBLE THE ORDER IS KEPT
        !          5374: *      ALPHABETICAL BY THESE NAMES BUT IN SOME CASES THERE
        !          5375: *      ARE SLIGHT DEPARTURES CAUSED BY OTHER ORDER REQUIREMENTS.
        !          5376: *
        !          5377: *      UNLESS OTHERWISE DOCUMENTED, THE ORDER OF WORK AREAS
        !          5378: *      DOES NOT AFFECT THE EXECUTION OF THE SPITBOL PROGRAM.
        !          5379: *
        !          5380: {{SEC{{{{START OF WORKING STORAGE SECTION
        !          5381: {{EJC{{{{
        !          5382: *
        !          5383: *      THIS AREA IS NOT CLEARED BY INITIAL CODE
        !          5384: *
        !          5385: {CMLAB{DAC{B$SCL{{{STRING USED TO CHECK LABEL LEGALITY
        !          5386: {{DAC{2{{{
        !          5387: {{DTC{/  /{{{
        !          5388: *
        !          5389: *      LABEL TO MARK START OF WORK AREA
        !          5390: *
        !          5391: {AAAAA{DAC{0{{{
        !          5392: *
        !          5393: *      WORK AREAS FOR ALLOC PROCEDURE
        !          5394: *
        !          5395: {ALDYN{DAC{0{{{AMOUNT OF DYNAMIC STORE
        !          5396: {ALFSF{DIC{+0{{{FACTOR IN FREE STORE PCNTAGE CHECK
        !          5397: {ALLIA{DIC{+0{{{DUMP IA
        !          5398: {ALLSV{DAC{0{{{SAVE WB IN ALLOC
        !          5399: *
        !          5400: *      WORK AREAS FOR ALOST PROCEDURE
        !          5401: *
        !          5402: {ALSTA{DAC{0{{{SAVE WA IN ALOST
        !          5403: *
        !          5404: *      SAVE AREAS FOR ARRAY FUNCTION (S$ARR)
        !          5405: *
        !          5406: {ARCDM{DAC{0{{{COUNT DIMENSIONS
        !          5407: {ARNEL{DIC{+0{{{COUNT ELEMENTS
        !          5408: {ARPTR{DAC{0{{{OFFSET PTR INTO ARBLK
        !          5409: {ARSVL{DIC{+0{{{SAVE INTEGER LOW BOUND
        !          5410: {{EJC{{{{
        !          5411: *      WORK AREAS FOR ARREF ROUTINE
        !          5412: *
        !          5413: {ARFSI{DIC{+0{{{SAVE CURRENT EVOLVING SUBSCRIPT
        !          5414: {ARFXS{DAC{0{{{SAVE BASE STACK POINTER
        !          5415: *
        !          5416: *      WORK AREAS FOR B$EFC BLOCK ROUTINE
        !          5417: *
        !          5418: {BEFOF{DAC{0{{{SAVE OFFSET PTR INTO EFBLK
        !          5419: *
        !          5420: *      WORK AREAS FOR B$PFC BLOCK ROUTINE
        !          5421: *
        !          5422: {BPFPF{DAC{0{{{SAVE PFBLK POINTER
        !          5423: {BPFSV{DAC{0{{{SAVE OLD FUNCTION VALUE
        !          5424: {BPFXT{DAC{0{{{POINTER TO STACKED ARGUMENTS
        !          5425: *
        !          5426: *      SAVE AREAS FOR COLLECT FUNCTION (S$COL)
        !          5427: *
        !          5428: {CLSVI{DIC{+0{{{SAVE INTEGER ARGUMENT
        !          5429: *
        !          5430: *      GLOBAL VALUES FOR CMPIL PROCEDURE
        !          5431: *
        !          5432: {CMERC{DAC{0{{{COUNT OF INITIAL COMPILE ERRORS
        !          5433: {CMPXS{DAC{0{{{SAVE STACK PTR IN CASE OF ERRORS
        !          5434: {CMPSN{DAC{1{{{NUMBER OF NEXT STATEMENT TO COMPILE
        !          5435: {CMPSS{DAC{0{{{SAVE SUBROUTINE STACK PTR
        !          5436: *
        !          5437: *      WORK AREA FOR CNCRD
        !          5438: *
        !          5439: {CNSCC{DAC{0{{{POINTER TO CONTROL CARD STRING
        !          5440: {CNSWC{DAC{0{{{WORD COUNT
        !          5441: {CNR$T{DAC{0{{{POINTER TO R$TTL OR R$STL
        !          5442: {CNTTL{DAC{0{{{FLAG FOR -TITLE, -STITL
        !          5443: *
        !          5444: *      WORK AREAS FOR CONVERT FUNCTION (S$CNV)
        !          5445: *
        !          5446: {CNVTP{DAC{0{{{SAVE PTR INTO SCVTB
        !          5447: *
        !          5448: *      FLAG FOR SUPPRESSION OF COMPILATION STATISTICS.
        !          5449: *
        !          5450: {CPSTS{DAC{0{{{SUPPRESS COMP. STATS IF NON ZERO
        !          5451: *
        !          5452: *      GLOBAL VALUES FOR CONTROL CARD SWITCHES
        !          5453: *
        !          5454: {CSWDB{DAC{0{{{0/1 FOR -SINGLE/-DOUBLE
        !          5455: {CSWER{DAC{0{{{0/1 FOR -ERRORS/-NOERRORS
        !          5456: {CSWEX{DAC{0{{{0/1 FOR -EXECUTE/-NOEXECUTE
        !          5457: {CSWFL{DAC{1{{{0/1 FOR -NOFAIL/-FAIL
        !          5458: {CSWIN{DAC{INILN{{{XXX FOR -INXXX
        !          5459: {CSWLS{DAC{1{{{0/1 FOR -NOLIST/-LIST
        !          5460: {CSWNO{DAC{0{{{0/1 FOR -OPTIMISE/-NOOPT
        !          5461: {CSWPR{DAC{0{{{0/1 FOR -NOPRINT/-PRINT
        !          5462: *
        !          5463: *      GLOBAL LOCATION USED BY PATST PROCEDURE
        !          5464: *
        !          5465: {CTMSK{DBC{0{{{LAST BIT POSITION USED IN R$CTP
        !          5466: {CURID{DAC{0{{{CURRENT ID VALUE
        !          5467: {{EJC{{{{
        !          5468: *
        !          5469: *      GLOBAL VALUE FOR CDWRD PROCEDURE
        !          5470: *
        !          5471: {CWCOF{DAC{0{{{NEXT WORD OFFSET IN CURRENT CCBLK
        !          5472: *
        !          5473: *      WORK AREAS FOR DATA FUNCTION (S$DAT)
        !          5474: *
        !          5475: {DATDV{DAC{0{{{SAVE VRBLK PTR FOR DATATYPE NAME
        !          5476: {DATXS{DAC{0{{{SAVE INITIAL STACK POINTER
        !          5477: *
        !          5478: *      WORK AREAS FOR DEFINE FUNCTION (S$DEF)
        !          5479: *
        !          5480: {DEFLB{DAC{0{{{SAVE VRBLK PTR FOR LABEL
        !          5481: {DEFNA{DAC{0{{{COUNT FUNCTION ARGUMENTS
        !          5482: {DEFVR{DAC{0{{{SAVE VRBLK PTR FOR FUNCTION NAME
        !          5483: {DEFXS{DAC{0{{{SAVE INITIAL STACK POINTER
        !          5484: *
        !          5485: *      WORK AREAS FOR DUMPR PROCEDURE
        !          5486: *
        !          5487: {DMARG{DAC{0{{{DUMP ARGUMENT
        !          5488: {DMPKB{DAC{B$KVT{{{DUMMY KVBLK FOR USE IN DUMPR
        !          5489: {DMPKT{DAC{TRBKV{{{KVVAR TRBLK POINTER
        !          5490: {DMPKN{DAC{0{{{KEYWORD NUMBER (MUST FOLLOW DMPKB)
        !          5491: {DMPSA{DAC{0{{{PRESERVE WA OVER PRTVL CALL
        !          5492: {DMPSV{DAC{0{{{GENERAL SCRATCH SAVE
        !          5493: {DMVCH{DAC{0{{{CHAIN POINTER FOR VARIABLE BLOCKS
        !          5494: {DMPCH{DAC{0{{{SAVE SORTED VRBLK CHAIN POINTER
        !          5495: *
        !          5496: *      GLOBAL LOCATIONS FOR DYNAMIC STORAGE POINTERS
        !          5497: *
        !          5498: {DNAMB{DAC{0{{{START OF DYNAMIC AREA
        !          5499: {DNAMP{DAC{0{{{NEXT AVAILABLE LOC IN DYNAMIC AREA
        !          5500: {DNAME{DAC{0{{{END OF AVAILABLE DYNAMIC AREA
        !          5501: *
        !          5502: *      WORK AREA FOR DTACH
        !          5503: *
        !          5504: {DTCNB{DAC{0{{{NAME BASE
        !          5505: {DTCNM{DAC{0{{{NAME PTR
        !          5506: *
        !          5507: *      WORK AREAS FOR DUPL FUNCTION (S$DUP)
        !          5508: *
        !          5509: {DUPSI{DIC{+0{{{STORE INTEGER STRING LENGTH
        !          5510: *
        !          5511: *      WORK AREA FOR ENDFILE (S$ENF)
        !          5512: *
        !          5513: {ENFCH{DAC{0{{{FOR IOCHN CHAIN HEAD
        !          5514: *
        !          5515: *      WORK AREA FOR ERROR PROCESSING.
        !          5516: *
        !          5517: {ERICH{DAC{0{{{COPY ERROR REPORTS TO INT.CHAN IF 1
        !          5518: {ERLST{DAC{0{{{FOR LISTR WHEN ERRORS GO TO INT.CH.
        !          5519: {ERRFT{DAC{0{{{FATAL ERROR FLAG
        !          5520: {ERRSP{DAC{0{{{ERROR SUPPRESSION FLAG
        !          5521: {{EJC{{{{
        !          5522: *
        !          5523: *      DUMP AREA FOR ERTEX
        !          5524: *
        !          5525: {ERTWA{DAC{0{{{SAVE WA
        !          5526: {ERTWB{DAC{0{{{SAVE WB
        !          5527: *
        !          5528: *      GLOBAL VALUES FOR EVALI
        !          5529: *
        !          5530: {EVLIN{DAC{P$LEN{{{DUMMY PATTERN BLOCK PCODE
        !          5531: {EVLIS{DAC{0{{{POINTER TO SUBSEQUENT NODE
        !          5532: {EVLIV{DAC{0{{{VALUE OF PARAMETER
        !          5533: *      WORK AREA FOR EXPAN
        !          5534: *
        !          5535: {EXPSV{DAC{0{{{SAVE OP DOPE VECTOR POINTER
        !          5536: *
        !          5537: *      FLAG FOR SUPPRESSION OF EXECUTION STATS
        !          5538: *
        !          5539: {EXSTS{DAC{0{{{SUPPRESS EXEC STATS IF SET
        !          5540: *
        !          5541: *      GLOBAL VALUES FOR EXFAL AND RETURN
        !          5542: *
        !          5543: {FLPRT{DAC{0{{{LOCATION OF FAIL OFFSET FOR RETURN
        !          5544: {FLPTR{DAC{0{{{LOCATION OF FAILURE OFFSET ON STACK
        !          5545: *
        !          5546: *      WORK AREAS FOR GBCOL PROCEDURE
        !          5547: *
        !          5548: {GBCFL{DAC{0{{{GARBAGE COLLECTOR ACTIVE FLAG
        !          5549: {GBCLM{DAC{0{{{POINTER TO LAST MOVE BLOCK (PASS 3)
        !          5550: {GBCNM{DAC{0{{{DUMMY FIRST MOVE BLOCK
        !          5551: {GBCNS{DAC{0{{{REST OF DUMMY BLOCK (FOLLOWS GBCNM)
        !          5552: {GBSVA{DAC{0{{{SAVE WA
        !          5553: {GBSVB{DAC{0{{{SAVE WB
        !          5554: {GBSVC{DAC{0{{{SAVE WC
        !          5555: *
        !          5556: *      GLOBAL LOCATION TO COUNT GARBAGE COLLECTIONS (GBCOL)
        !          5557: *
        !          5558: {GBCNT{DAC{0{{{COUNT OF GARBAGE COLLECTIONS
        !          5559: *
        !          5560: *      WORK AREAS FOR GTNVR PROCEDURE
        !          5561: *
        !          5562: {GNVHE{DAC{0{{{PTR TO END OF HASH CHAIN
        !          5563: {GNVNW{DAC{0{{{NUMBER OF WORDS IN STRING NAME
        !          5564: {GNVSA{DAC{0{{{SAVE WA
        !          5565: {GNVSB{DAC{0{{{SAVE WB
        !          5566: {GNVSP{DAC{0{{{POINTER INTO VSRCH TABLE
        !          5567: {GNVST{DAC{0{{{POINTER TO CHARS OF STRING
        !          5568: *
        !          5569: *      GLOBAL VALUE FOR GTCOD AND GTEXP
        !          5570: *
        !          5571: {GTCEF{DAC{0{{{SAVE FAIL PTR IN CASE OF ERROR
        !          5572: *
        !          5573: *      WORK AREAS FOR GTINT
        !          5574: *
        !          5575: {GTINA{DAC{0{{{SAVE WA
        !          5576: {GTINB{DAC{0{{{SAVE WB
        !          5577: {{EJC{{{{
        !          5578: *
        !          5579: *      WORK AREAS FOR GTNUM PROCEDURE
        !          5580: *
        !          5581: {GTNNF{DAC{0{{{ZERO/NONZERO FOR RESULT +/-
        !          5582: {GTNSI{DIC{+0{{{GENERAL INTEGER SAVE
        !          5583: {GTNDF{DAC{0{{{0/1 FOR DEC POINT SO FAR NO/YES
        !          5584: {GTNES{DAC{0{{{ZERO/NONZERO EXPONENT +/-
        !          5585: {GTNEX{DIC{+0{{{REAL EXPONENT
        !          5586: {GTNSC{DAC{0{{{SCALE (PLACES AFTER POINT)
        !          5587: {GTNSR{DRC{+0.0{{{GENERAL REAL SAVE
        !          5588: {GTNRD{DAC{0{{{FLAG FOR OK REAL NUMBER
        !          5589: *
        !          5590: *      WORK AREAS FOR GTPAT PROCEDURE
        !          5591: *
        !          5592: {GTPSB{DAC{0{{{SAVE WB
        !          5593: *
        !          5594: *      WORK AREAS FOR GTSTG PROCEDURE
        !          5595: *
        !          5596: {GTSSF{DAC{0{{{0/1 FOR RESULT +/-
        !          5597: {GTSVC{DAC{0{{{SAVE WC
        !          5598: {GTSVB{DAC{0{{{SAVE WB
        !          5599: {GTSWK{DAC{0{{{PTR TO WORK AREA FOR GTSTG
        !          5600: {GTSES{DAC{0{{{CHAR + OR - FOR EXPONENT +/-
        !          5601: {GTSRS{DRC{+0.0{{{GENERAL REAL SAVE
        !          5602: *
        !          5603: *      GLOBAL LOCATIONS (CONSTANTS) FOR GTSTG PROCEDURE
        !          5604: *
        !          5605: {GTSRN{DRC{+0.0{{{ROUNDING FACTOR 0.5*10**-CFP$S
        !          5606: {GTSSC{DRC{+0.0{{{SCALING VALUE 10**CFP$S
        !          5607: *
        !          5608: *      WORK AREAS FOR GTVAR PROCEDURE
        !          5609: *
        !          5610: {GTVRC{DAC{0{{{SAVE WC
        !          5611: *
        !          5612: *      FLAG FOR HEADER PRINTING
        !          5613: *
        !          5614: {HEADP{DAC{0{{{HEADER PRINTED FLAG
        !          5615: *
        !          5616: *      GLOBAL VALUES FOR VARIABLE HASH TABLE
        !          5617: *
        !          5618: {HSHNB{DIC{+0{{{NUMBER OF HASH BUCKETS
        !          5619: {HSHTB{DAC{0{{{POINTER TO START OF VRBLK HASH TABL
        !          5620: {HSHTE{DAC{0{{{POINTER PAST END OF VRBLK HASH TABL
        !          5621: *
        !          5622: *      WORK AREA FOR INIT
        !          5623: *
        !          5624: {INISS{DAC{0{{{SAVE SUBROUTINE STACK PTR
        !          5625: {INITR{DAC{0{{{SAVE TERMINAL FLAG
        !          5626: *
        !          5627: *      SAVE AREA FOR INSBF
        !          5628: *
        !          5629: {INSAB{DAC{0{{{ENTRY WA + ENTRY WB
        !          5630: {INSSA{DAC{0{{{SAVE ENTRY WA
        !          5631: {INSSB{DAC{0{{{SAVE ENTRY WB
        !          5632: {INSSC{DAC{0{{{SAVE ENTRY WC
        !          5633: *
        !          5634: *      WORK AREAS FOR IOPUT
        !          5635: *
        !          5636: {IOPTT{DAC{0{{{TYPE OF ASSOCIATION
        !          5637: {{EJC{{{{
        !          5638: *
        !          5639: *      GLOBAL VALUES FOR KEYWORD VALUES WHICH ARE STORED AS ONE
        !          5640: *      WORD INTEGERS. THESE VALUES MUST BE ASSEMBLED IN THE
        !          5641: *      FOLLOWING ORDER (AS DICTATED BY K$XXX DEFINITION VALUES).
        !          5642: *
        !          5643: {KVABE{DAC{0{{{ABEND
        !          5644: {KVANC{DAC{0{{{ANCHOR
        !          5645: {KVCAS{DAC{0{{{CASE
        !          5646: {KVCOD{DAC{0{{{CODE
        !          5647: {KVDMP{DAC{0{{{DUMP
        !          5648: {KVERL{DAC{0{{{ERRLIMIT
        !          5649: {KVERT{DAC{0{{{ERRTYPE
        !          5650: {KVFTR{DAC{0{{{FTRACE
        !          5651: {KVINP{DAC{1{{{INPUT
        !          5652: {KVMXL{DAC{5000{{{MAXLENGTH
        !          5653: {KVOUP{DAC{1{{{OUTPUT
        !          5654: {KVPFL{DAC{0{{{PROFILE
        !          5655: {KVTRA{DAC{0{{{TRACE
        !          5656: {KVTRM{DAC{0{{{TRIM
        !          5657: {KVFNC{DAC{0{{{FNCLEVEL
        !          5658: {KVLST{DAC{0{{{LASTNO
        !          5659: {KVSTN{DAC{0{{{STNO
        !          5660: *
        !          5661: *      GLOBAL VALUES FOR OTHER KEYWORDS
        !          5662: *
        !          5663: {KVALP{DAC{0{{{ALPHABET
        !          5664: {KVRTN{DAC{NULLS{{{RTNTYPE (SCBLK POINTER)
        !          5665: {KVSTL{DIC{+50000{{{STLIMIT
        !          5666: {KVSTC{DIC{+50000{{{STCOUNT (COUNTS DOWN FROM STLIMIT)
        !          5667: *
        !          5668: *      WORK AREAS FOR LOAD FUNCTION
        !          5669: *
        !          5670: {LODFN{DAC{0{{{POINTER TO VRBLK FOR FUNC NAME
        !          5671: {LODNA{DAC{0{{{COUNT NUMBER OF ARGUMENTS
        !          5672: *
        !          5673: *      GLOBAL VALUES FOR LISTR PROCEDURE
        !          5674: *
        !          5675: {LSTLC{DAC{0{{{COUNT LINES ON SOURCE LIST PAGE
        !          5676: {LSTNP{DAC{0{{{MAX NUMBER OF LINES ON PAGE
        !          5677: {LSTPF{DAC{1{{{SET NONZERO IF CURRENT IMAGE LISTED
        !          5678: {LSTPG{DAC{0{{{CURRENT SOURCE LIST PAGE NUMBER
        !          5679: {LSTPO{DAC{0{{{OFFSET TO   PAGE NNN   MESSAGE
        !          5680: {LSTSN{DAC{0{{{REMEMBER LAST STMNUM LISTED
        !          5681: *
        !          5682: *      MAXIMUM SIZE OF SPITBOL OBJECTS
        !          5683: *
        !          5684: {MXLEN{DAC{0{{{INITIALISED BY SYSMX CALL
        !          5685: *
        !          5686: *      EXECUTION CONTROL VARIABLE
        !          5687: *
        !          5688: {NOXEQ{DAC{0{{{SET NON-ZERO TO INHIBIT EXECUTION
        !          5689: *
        !          5690: *      PROFILER GLOBAL VALUES AND WORK LOCATIONS
        !          5691: *
        !          5692: {PFDMP{DAC{0{{{SET NON-0 IF &PROFILE SET NON-0
        !          5693: {PFFNC{DAC{0{{{SET NON-0 IF FUNCT JUST ENTERED
        !          5694: {PFSTM{DIC{+0{{{TO STORE STARTING TIME OF STMT
        !          5695: {PFETM{DIC{+0{{{TO STORE ENDING TIME OF STMT
        !          5696: {PFSVW{DAC{0{{{TO SAVE A W-REG
        !          5697: {PFTBL{DAC{0{{{GETS ADRS OF (IMAG) TABLE BASE
        !          5698: {PFNTE{DAC{0{{{NR OF TABLE ENTRIES
        !          5699: {PFSTE{DIC{+0{{{GETS INT REP OF TABLE ENTRY SIZE
        !          5700: *
        !          5701: {{EJC{{{{
        !          5702: *
        !          5703: *      GLOBAL VALUES USED IN PATTERN MATCH ROUTINES
        !          5704: *
        !          5705: {PMDFL{DAC{0{{{PATTERN ASSIGNMENT FLAG
        !          5706: {PMHBS{DAC{0{{{HISTORY STACK BASE POINTER
        !          5707: {PMSSL{DAC{0{{{LENGTH OF SUBJECT STRING IN CHARS
        !          5708: *
        !          5709: *      FLAGS USED FOR STANDARD FILE LISTING OPTIONS
        !          5710: *
        !          5711: {PRICH{DAC{0{{{PRINTER ON INTERACTIVE CHANNEL
        !          5712: {PRSTD{DAC{0{{{TESTED BY PRTPG
        !          5713: {PRSTO{DAC{0{{{STANDARD LISTING OPTION FLAG
        !          5714: *
        !          5715: *      GLOBAL VALUE FOR PRTNM PROCEDURE
        !          5716: *
        !          5717: {PRNMV{DAC{0{{{VRBLK PTR FROM LAST NAME SEARCH
        !          5718: *
        !          5719: *      WORK AREAS FOR PRTNM PROCEDURE
        !          5720: *
        !          5721: {PRNSI{DIC{+0{{{SCRATCH INTEGER LOC
        !          5722: *
        !          5723: *      WORK AREAS FOR PRTSN PROCEDURE
        !          5724: *
        !          5725: {PRSNA{DAC{0{{{SAVE WA
        !          5726: *
        !          5727: *      GLOBAL VALUES FOR PRINT PROCEDURES
        !          5728: *
        !          5729: {PRBUF{DAC{0{{{PTR TO PRINT BFR IN STATIC
        !          5730: {PRECL{DAC{0{{{EXTENDED/COMPACT LISTING FLAG
        !          5731: {PRLEN{DAC{0{{{LENGTH OF PRINT BUFFER IN CHARS
        !          5732: {PRLNW{DAC{0{{{LENGTH OF PRINT BUFFER IN WORDS
        !          5733: {PROFS{DAC{0{{{OFFSET TO NEXT LOCATION IN PRBUF
        !          5734: {PRTEF{DAC{0{{{ENDFILE FLAG
        !          5735: *
        !          5736: *      WORK AREAS FOR PRTST PROCEDURE
        !          5737: *
        !          5738: {PRSVA{DAC{0{{{SAVE WA
        !          5739: {PRSVB{DAC{0{{{SAVE WB
        !          5740: {PRSVC{DAC{0{{{SAVE CHAR COUNTER
        !          5741: *
        !          5742: *      WORK AREA FOR PRTNL
        !          5743: *
        !          5744: {PRTSA{DAC{0{{{SAVE WA
        !          5745: {PRTSB{DAC{0{{{SAVE WB
        !          5746: *
        !          5747: *      WORK AREA FOR PRTVL
        !          5748: *
        !          5749: {PRVSI{DAC{0{{{SAVE IDVAL
        !          5750: *
        !          5751: *      WORK AREAS FOR PATTERN MATCH ROUTINES
        !          5752: *
        !          5753: {PSAVE{DAC{0{{{TEMPORARY SAVE FOR CURRENT NODE PTR
        !          5754: {PSAVC{DAC{0{{{SAVE CURSOR IN P$SPN, P$STR
        !          5755: {{EJC{{{{
        !          5756: *
        !          5757: *      AMOUNT OF MEMORY RESERVED FOR END OF EXECUTION
        !          5758: *
        !          5759: {RSMEM{DAC{0{{{RESERVE MEMORY
        !          5760: *
        !          5761: *      WORK AREAS FOR RETRN ROUTINE
        !          5762: *
        !          5763: {RTNBP{DAC{0{{{TO SAVE A BLOCK POINTER
        !          5764: {RTNFV{DAC{0{{{NEW FUNCTION VALUE (RESULT)
        !          5765: {RTNSV{DAC{0{{{OLD FUNCTION VALUE (SAVED VALUE)
        !          5766: *
        !          5767: *      RELOCATABLE GLOBAL VALUES
        !          5768: *
        !          5769: *      ALL THE POINTERS IN THIS SECTION CAN POINT TO BLOCKS IN
        !          5770: *      THE DYNAMIC STORAGE AREA AND MUST BE RELOCATED BY THE
        !          5771: *      GARBAGE COLLECTOR. THEY ARE IDENTIFIED BY R$XXX NAMES.
        !          5772: *
        !          5773: {R$AAA{DAC{0{{{START OF RELOCATABLE VALUES
        !          5774: {R$ARF{DAC{0{{{ARRAY BLOCK POINTER FOR ARREF
        !          5775: {R$CCB{DAC{0{{{PTR TO CCBLK BEING BUILT (CDWRD)
        !          5776: {R$CIM{DAC{0{{{PTR TO CURRENT COMPILER INPUT STR
        !          5777: {R$CMP{DAC{0{{{COPY OF R$CIM USED IN CMPIL
        !          5778: {R$CNI{DAC{0{{{PTR TO NEXT COMPILER INPUT STRING
        !          5779: {R$CNT{DAC{0{{{CDBLK POINTER FOR SETEXIT CONTINUE
        !          5780: {R$COD{DAC{0{{{POINTER TO CURRENT CDBLK OR EXBLK
        !          5781: {R$CTP{DAC{0{{{PTR TO CURRENT CTBLK FOR PATST
        !          5782: {R$ERT{DAC{0{{{TRBLK POINTER FOR ERRTYPE TRACE
        !          5783: {R$ETX{DAC{NULLS{{{POINTER TO ERRTEXT STRING
        !          5784: {R$EXS{DAC{0{{{= SAVE XL IN EXPDM
        !          5785: {R$FCB{DAC{0{{{FCBLK CHAIN HEAD
        !          5786: {R$FNC{DAC{0{{{TRBLK POINTER FOR FNCLEVEL TRACE
        !          5787: {R$GTC{DAC{0{{{KEEP CODE PTR FOR GTCOD,GTEXP
        !          5788: {R$IO1{DAC{0{{{FILE ARG1 FOR IOPUT
        !          5789: {R$IO2{DAC{0{{{FILE ARG2 FOR IOPUT
        !          5790: {R$IOF{DAC{0{{{FCBLK PTR OR 0
        !          5791: {R$ION{DAC{0{{{NAME BASE PTR
        !          5792: {R$IOP{DAC{0{{{PREDECESSOR BLOCK PTR FOR IOPUT
        !          5793: {R$IOT{DAC{0{{{TRBLK PTR FOR IOPUT
        !          5794: {R$PMB{DAC{0{{{BUFFER PTR IN PATTERN MATCH
        !          5795: {R$PMS{DAC{0{{{SUBJECT STRING PTR IN PATTERN MATCH
        !          5796: {R$RA2{DAC{0{{{REPLACE SECOND ARGUMENT LAST TIME
        !          5797: {R$RA3{DAC{0{{{REPLACE THIRD ARGUMENT LAST TIME
        !          5798: {R$RPT{DAC{0{{{PTR TO CTBLK REPLACE TABLE LAST USD
        !          5799: {R$SCP{DAC{0{{{SAVE POINTER FROM LAST SCANE CALL
        !          5800: {R$SXL{DAC{0{{{PRESERVE XL IN SORTC
        !          5801: {R$SXR{DAC{0{{{PRESERVE XR IN SORTA/SORTC
        !          5802: {R$STC{DAC{0{{{TRBLK POINTER FOR STCOUNT TRACE
        !          5803: {R$STL{DAC{0{{{SOURCE LISTING SUB-TITLE
        !          5804: {R$SXC{DAC{0{{{CODE (CDBLK) PTR FOR SETEXIT TRAP
        !          5805: {R$TTL{DAC{NULLS{{{SOURCE LISTING TITLE
        !          5806: {R$XSC{DAC{0{{{STRING POINTER FOR XSCAN
        !          5807: {{EJC{{{{
        !          5808: *
        !          5809: *      THE REMAINING POINTERS IN THIS LIST ARE USED TO POINT
        !          5810: *      TO FUNCTION BLOCKS FOR NORMALLY UNDEFINED OPERATORS.
        !          5811: *
        !          5812: {R$UBA{DAC{STNDO{{{BINARY AT
        !          5813: {R$UBM{DAC{STNDO{{{BINARY AMPERSAND
        !          5814: {R$UBN{DAC{STNDO{{{BINARY NUMBER SIGN
        !          5815: {R$UBP{DAC{STNDO{{{BINARY PERCENT
        !          5816: {R$UBT{DAC{STNDO{{{BINARY NOT
        !          5817: {R$UUB{DAC{STNDO{{{UNARY VERTICAL BAR
        !          5818: {R$UUE{DAC{STNDO{{{UNARY EQUAL
        !          5819: {R$UUN{DAC{STNDO{{{UNARY NUMBER SIGN
        !          5820: {R$UUP{DAC{STNDO{{{UNARY PERCENT
        !          5821: {R$UUS{DAC{STNDO{{{UNARY SLASH
        !          5822: {R$UUX{DAC{STNDO{{{UNARY EXCLAMATION
        !          5823: {R$YYY{DAC{0{{{LAST RELOCATABLE LOCATION
        !          5824: *
        !          5825: *      WORK AREAS FOR SUBSTR FUNCTION (S$SUB)
        !          5826: *
        !          5827: {SBSSV{DAC{0{{{SAVE THIRD ARGUMENT
        !          5828: *
        !          5829: *      GLOBAL LOCATIONS USED IN SCAN PROCEDURE
        !          5830: *
        !          5831: {SCNBL{DAC{0{{{SET NON-ZERO IF SCANNED PAST BLANKS
        !          5832: {SCNCC{DAC{0{{{NON-ZERO TO SCAN CONTROL CARD NAME
        !          5833: {SCNGO{DAC{0{{{SET NON-ZERO TO SCAN GOTO FIELD
        !          5834: {SCNIL{DAC{0{{{LENGTH OF CURRENT INPUT IMAGE
        !          5835: {SCNPT{DAC{0{{{POINTER TO NEXT LOCATION IN R$CIM
        !          5836: {SCNRS{DAC{0{{{SET NON-ZERO TO SIGNAL RESCAN
        !          5837: {SCNTP{DAC{0{{{SAVE SYNTAX TYPE FROM LAST CALL
        !          5838: *
        !          5839: *      WORK AREAS FOR SCAN PROCEDURE
        !          5840: *
        !          5841: {SCNSA{DAC{0{{{SAVE WA
        !          5842: {SCNSB{DAC{0{{{SAVE WB
        !          5843: {SCNSC{DAC{0{{{SAVE WC
        !          5844: {SCNSE{DAC{0{{{START OF CURRENT ELEMENT
        !          5845: {SCNOF{DAC{0{{{SAVE OFFSET
        !          5846: {{EJC{{{{
        !          5847: *
        !          5848: *      WORK AREA USED BY SORTA, SORTC, SORTF, SORTH
        !          5849: *
        !          5850: {SRTDF{DAC{0{{{DATATYPE FIELD NAME
        !          5851: {SRTFD{DAC{0{{{FOUND DFBLK ADDRESS
        !          5852: {SRTFF{DAC{0{{{FOUND FIELD NAME
        !          5853: {SRTFO{DAC{0{{{OFFSET TO FIELD NAME
        !          5854: {SRTNR{DAC{0{{{NUMBER OF ROWS
        !          5855: {SRTOF{DAC{0{{{OFFSET WITHIN ROW TO SORT KEY
        !          5856: {SRTRT{DAC{0{{{ROOT OFFSET
        !          5857: {SRTS1{DAC{0{{{SAVE OFFSET 1
        !          5858: {SRTS2{DAC{0{{{SAVE OFFSET 2
        !          5859: {SRTSC{DAC{0{{{SAVE WC
        !          5860: {SRTSF{DAC{0{{{SORT ARRAY FIRST ROW OFFSET
        !          5861: {SRTSN{DAC{0{{{SAVE N
        !          5862: {SRTSO{DAC{0{{{OFFSET TO A(0)
        !          5863: {SRTSR{DAC{0{{{0 , NON-ZERO FOR SORT, RSORT
        !          5864: {SRTST{DAC{0{{{STRIDE FROM ONE ROW TO NEXT
        !          5865: {SRTWC{DAC{0{{{DUMP WC
        !          5866: *
        !          5867: *      GLOBAL VALUE FOR INDICATING STAGE (SEE ERROR SECTION)
        !          5868: *
        !          5869: {STAGE{DAC{0{{{INITIAL VALUE = INITIAL COMPILE
        !          5870: *
        !          5871: *      GLOBAL VALUES DEFINING EXTENT OF STATIC AREA (ALOST)
        !          5872: *
        !          5873: {STATB{DAC{0{{{START OF STATIC AREA
        !          5874: {STATE{DAC{0{{{END OF STATIC AREA
        !          5875: {{EJC{{{{
        !          5876: *
        !          5877: *      GLOBAL STACK POINTER
        !          5878: *
        !          5879: {STBAS{DAC{0{{{POINTER PAST STACK BASE
        !          5880: *
        !          5881: *      WORK AREAS FOR STOPR ROUTINE
        !          5882: *
        !          5883: {STPSI{DIC{+0{{{SAVE VALUE OF STCOUNT
        !          5884: {STPTI{DIC{+0{{{SAVE TIME ELAPSED
        !          5885: *
        !          5886: *      GLOBAL VALUES FOR SETEXIT FUNCTION (S$STX)
        !          5887: *
        !          5888: {STXOF{DAC{0{{{FAILURE OFFSET
        !          5889: {STXVR{DAC{NULLS{{{VRBLK POINTER OR NULL
        !          5890: *
        !          5891: *      WORK AREAS FOR TFIND PROCEDURE
        !          5892: *
        !          5893: {TFNSI{DIC{+0{{{NUMBER OF HEADERS
        !          5894: *
        !          5895: *      GLOBAL VALUE FOR TIME KEEPING
        !          5896: *
        !          5897: {TIMSX{DIC{+0{{{TIME AT START OF EXECUTION
        !          5898: {TIMUP{DAC{0{{{SET WHEN TIME UP OCCURS
        !          5899: *
        !          5900: *      WORK AREAS FOR XSCAN PROCEDURE
        !          5901: *
        !          5902: {XSCRT{DAC{0{{{SAVE RETURN CODE
        !          5903: {XSCWB{DAC{0{{{SAVE REGISTER WB
        !          5904: *
        !          5905: *      GLOBAL VALUES FOR XSCAN AND XSCNI PROCEDURES
        !          5906: *
        !          5907: {XSOFS{DAC{0{{{OFFSET TO CURRENT LOCATION IN R$XSC
        !          5908: *
        !          5909: *      LABEL TO MARK END OF WORK AREA
        !          5910: *
        !          5911: {YYYYY{DAC{0{{{
        !          5912: {{TTL{S{{{P I T B O L -- INITIALIZATION
        !          5913: *
        !          5914: *      INITIALISATION
        !          5915: *      THE FOLLOWING SECTION RECEIVES CONTROL FROM THE SYSTEM
        !          5916: *      AT THE START OF A RUN WITH THE REGISTERS SET AS FOLLOWS.
        !          5917: *
        !          5918: *      (XS)                  POINTS PAST STACK BASE
        !          5919: *      (XR)                  POINTS TO FIRST WORD OF DATA AREA
        !          5920: *      (XL)                  POINTS TO LAST WORD OF DATA AREA
        !          5921: *
        !          5922: {{SEC{{{{START OF PROGRAM SECTION
        !          5923: {{JSR{SYSTM{{{INITIALISE TIMER
        !          5924: *
        !          5925: *      INITIALISE WORK AREA (ESSENTIAL FOR BATCHED RUNS)
        !          5926: *
        !          5927: {{MOV{R9{R7{{PRESERVE XR
        !          5928: {{MOV{#YYYYY{R6{{POINT TO END OF WORK AREA
        !          5929: {{SUB{#AAAAA{R6{{GET LENGTH OF WORK AREA
        !          5930: {{BTW{R6{{{CONVERT TO WORDS
        !          5931: {{LCT{R6{R6{{COUNT FOR LOOP
        !          5932: {{MOV{#AAAAA{R9{{SET UP INDEX REGISTER
        !          5933: *
        !          5934: *      CLEAR WORK SPACE
        !          5935: *
        !          5936: {INI01{ZER{(R9)+{{{CLEAR A WORD
        !          5937: {{BCT{R6{INI01{{LOOP TILL DONE
        !          5938: {{MOV{#STNDO{R6{{UNDEFINED OPERATORS POINTER
        !          5939: {{MOV{#R$YYY{R8{{POINT TO TABLE END
        !          5940: {{SUB{#R$UBA{R8{{LENGTH OF UNDEF. OPERATORS TABLE
        !          5941: {{BTW{R8{{{CONVERT TO WORDS
        !          5942: {{LCT{R8{R8{{LOOP COUNTER
        !          5943: {{MOV{#R$UBA{R9{{SET UP XR
        !          5944: *
        !          5945: *      SET CORRECT VALUE INTO UNDEFINED OPERATORS TABLE
        !          5946: *
        !          5947: {INI02{MOV{R6{(R9)+{{STORE VALUE
        !          5948: {{BCT{R8{INI02{{LOOP TILL ALL DONE
        !          5949: {{MOV{#NUM01{R6{{GET A 1
        !          5950: {{MOV{R6{CMPSN{{STATEMENT NO
        !          5951: {{MOV{R6{CSWFL{{NOFAIL
        !          5952: {{MOV{R6{CSWLS{{LIST
        !          5953: {{MOV{R6{KVINP{{INPUT
        !          5954: {{MOV{R6{KVOUP{{OUTPUT
        !          5955: {{MOV{R6{LSTPF{{NOTHING FOR LISTR YET
        !          5956: {{MOV{#INILN{R6{{INPUT IMAGE LENGTH
        !          5957: {{MOV{R6{CSWIN{{-IN72
        !          5958: {{MOV{#B$KVT{DMPKB{{DUMP
        !          5959: {{MOV{#TRBKV{DMPKT{{DUMP
        !          5960: {{MOV{#P$LEN{EVLIN{{EVAL
        !          5961: {{EJC{{{{
        !          5962: {{MOV{#NULLS{R6{{GET NULLSTRING POINTER
        !          5963: {{MOV{R6{KVRTN{{RETURN
        !          5964: {{MOV{R6{R$ETX{{ERRTEXT
        !          5965: {{MOV{R6{R$TTL{{TITLE FOR LISTING
        !          5966: {{MOV{R6{STXVR{{SETEXIT
        !          5967: {{STI{TIMSX{{{STORE TIME IN CORRECT PLACE
        !          5968: {{LDI{STLIM{{{GET DEFAULT STLIMIT
        !          5969: {{STI{KVSTL{{{STATEMENT LIMIT
        !          5970: {{STI{KVSTC{{{STATEMENT COUNT
        !          5971: {{MOV{R7{STATB{{STORE START ADRS OF STATIC
        !          5972: {{MOV{#4*E$SRS{RSMEM{{RESERVE MEMORY
        !          5973: {{MOV{SP{STBAS{{STORE STACK BASE
        !          5974: {{SSS{INISS{{{SAVE S-R STACK PTR
        !          5975: *
        !          5976: *      NOW CONVERT FREE STORE PERCENTAGE TO A SUITABLE FACTOR
        !          5977: *      FOR EASY TESTING IN ALLOC ROUTINE.
        !          5978: *
        !          5979: {{LDI{INTVH{{{GET 100
        !          5980: {{DVI{ALFSP{{{FORM 100 / ALFSP
        !          5981: {{STI{ALFSF{{{STORE THE FACTOR
        !          5982: *
        !          5983: *      INITIALIZE VALUES FOR REAL CONVERSION ROUTINE
        !          5984: *
        !          5985: {{LCT{R7{#CFP$S{{LOAD COUNTER FOR SIGNIFICANT DIGITS
        !          5986: {{LDR{REAV1{{{LOAD 1.0
        !          5987: *
        !          5988: *      LOOP TO COMPUTE 10**(MAX NUMBER SIGNIFICANT DIGITS)
        !          5989: *
        !          5990: {INI03{MLR{REAVT{{{* 10.0
        !          5991: {{BCT{R7{INI03{{LOOP TILL DONE
        !          5992: {{STR{GTSSC{{{STORE 10**(MAX SIG DIGITS)
        !          5993: {{LDR{REAP5{{{LOAD 0.5
        !          5994: {{DVR{GTSSC{{{COMPUTE 0.5*10**(MAX SIG DIGITS)
        !          5995: {{STR{GTSRN{{{STORE AS ROUNDING BIAS
        !          5996: {{ZER{R8{{{SET TO READ PARAMETERS
        !          5997: {{JSR{PRPAR{{{READ THEM
        !          5998: {{EJC{{{{
        !          5999: *
        !          6000: *      NOW COMPUTE STARTING ADDRESS FOR DYNAMIC STORE AND IF
        !          6001: *      NECESSARY REQUEST MORE MEMORY.
        !          6002: *
        !          6003: {{SUB{#4*E$SRS{R10{{ALLOW FOR RESERVE MEMORY
        !          6004: {{MOV{PRLEN{R6{{GET PRINT BUFFER LENGTH
        !          6005: {{ADD{#CFP$A{R6{{ADD NO. OF CHARS IN ALPHABET
        !          6006: {{ADD{#NSTMX{R6{{ADD CHARS FOR GTSTG BFR
        !          6007: {{CTB{R6{8{{CONVERT TO BYTES, ALLOWING A MARGIN
        !          6008: {{MOV{STATB{R9{{POINT TO STATIC BASE
        !          6009: {{ADD{R6{R9{{INCREMENT FOR ABOVE BUFFERS
        !          6010: {{ADD{#4*E$HNB{R9{{INCREMENT FOR HASH TABLE
        !          6011: {{ADD{#4*E$STS{R9{{BUMP FOR INITIAL STATIC BLOCK
        !          6012: {{JSR{SYSMX{{{GET MXLEN
        !          6013: {{MOV{R6{KVMXL{{PROVISIONALLY STORE AS MAXLNGTH
        !          6014: {{MOV{R6{MXLEN{{AND AS MXLEN
        !          6015: {{BGT{R9{R6{INI06{SKIP IF STATIC HI EXCEEDS MXLEN
        !          6016: {{MOV{R6{R9{{USE MXLEN INSTEAD
        !          6017: {{ICA{R9{{{MAKE BIGGER THAN MXLEN
        !          6018: *
        !          6019: *      HERE TO STORE VALUES WHICH MARK INITIAL DIVISION
        !          6020: *      OF DATA AREA INTO STATIC AND DYNAMIC
        !          6021: *
        !          6022: {INI06{MOV{R9{DNAMB{{DYNAMIC BASE ADRS
        !          6023: {{MOV{R9{DNAMP{{DYNAMIC PTR
        !          6024: {{BNZ{R6{INI07{{SKIP IF NON-ZERO MXLEN
        !          6025: {{DCA{R9{{{POINT A WORD IN FRONT
        !          6026: {{MOV{R9{KVMXL{{USE AS MAXLNGTH
        !          6027: {{MOV{R9{MXLEN{{AND AS MXLEN
        !          6028: {{EJC{{{{
        !          6029: *
        !          6030: *      LOOP HERE IF NECESSARY TILL ENOUGH MEMORY OBTAINED
        !          6031: *      SO THAT DNAME IS ABOVE DNAMB
        !          6032: *
        !          6033: {INI07{MOV{R10{DNAME{{STORE DYNAMIC END ADDRESS
        !          6034: {{BLT{DNAMB{R10{INI09{SKIP IF HIGH ENOUGH
        !          6035: {{JSR{SYSMM{{{REQUEST MORE MEMORY
        !          6036: {{WTB{R9{{{GET AS BAUS (SGD05)
        !          6037: {{ADD{R9{R10{{BUMP BY AMOUNT OBTAINED
        !          6038: {{BNZ{R9{INI07{{TRY AGAIN
        !          6039: {{MOV{#ENDMO{R9{{POINT TO FAILURE MESSAGE
        !          6040: {{MOV{ENDML{R6{{MESSAGE LENGTH
        !          6041: {{JSR{SYSPR{{{PRINT IT (PRTST NOT YET USABLE)
        !          6042: {{PPM{{{{SHOULD NOT FAIL
        !          6043: {{JSR{SYSEJ{{{PACK UP (STOPR NOT YET USABLE)
        !          6044: *
        !          6045: *      INITIALISE PRINT BUFFER WITH BLANK WORDS
        !          6046: *
        !          6047: {INI09{MOV{PRLEN{R8{{NO. OF CHARS IN PRINT BFR
        !          6048: {{MOV{STATB{R9{{POINT TO STATIC AGAIN
        !          6049: {{MOV{R9{PRBUF{{PRINT BFR IS PUT AT STATIC START
        !          6050: {{MOV{#B$SCL{(R9)+{{STORE STRING TYPE CODE
        !          6051: {{MOV{R8{(R9)+{{AND STRING LENGTH
        !          6052: {{CTW{R8{0{{GET NUMBER OF WORDS IN BUFFER
        !          6053: {{MOV{R8{PRLNW{{STORE FOR BUFFER CLEAR
        !          6054: {{LCT{R8{R8{{WORDS TO CLEAR
        !          6055: *
        !          6056: *      LOOP TO CLEAR BUFFER
        !          6057: *
        !          6058: {INI10{MOV{NULLW{(R9)+{{STORE BLANK
        !          6059: {{BCT{R8{INI10{{LOOP
        !          6060: *
        !          6061: *      INITIALIZE NUMBER OF HASH HEADERS
        !          6062: *
        !          6063: {{MOV{#E$HNB{R6{{GET NUMBER OF HASH HEADERS
        !          6064: {{MTI{R6{{{CONVERT TO INTEGER
        !          6065: {{STI{HSHNB{{{STORE FOR USE BY GTNVR PROCEDURE
        !          6066: {{LCT{R6{R6{{COUNTER FOR CLEARING HASH TABLE
        !          6067: {{MOV{R9{HSHTB{{POINTER TO HASH TABLE
        !          6068: *
        !          6069: *      LOOP TO CLEAR HASH TABLE
        !          6070: *
        !          6071: {INI11{ZER{(R9)+{{{BLANK A WORD
        !          6072: {{BCT{R6{INI11{{LOOP
        !          6073: {{MOV{R9{HSHTE{{END OF HASH TABLE ADRS IS KEPT
        !          6074: *
        !          6075: *      ALLOCATE WORK AREA FOR GTSTG CONVERSION PROCEDURE
        !          6076: *
        !          6077: {{MOV{#NSTMX{R6{{GET MAX NUM CHARS IN OUTPUT NUMBER
        !          6078: {{CTB{R6{SCSI${{NO OF BYTES NEEDED
        !          6079: {{MOV{R9{GTSWK{{STORE BFR ADRS
        !          6080: {{ADD{R6{R9{{BUMP FOR WORK BFR
        !          6081: {{EJC{{{{
        !          6082: *
        !          6083: *      BUILD ALPHABET STRING FOR ALPHABET KEYWORD AND REPLACE
        !          6084: *
        !          6085: {{MOV{R9{KVALP{{SAVE ALPHABET POINTER
        !          6086: {{MOV{#B$SCL{(R9){{STRING BLK TYPE
        !          6087: {{MOV{#CFP$A{R8{{NO OF CHARS IN ALPHABET
        !          6088: {{MOV{R8{4*SCLEN(R9){{STORE AS STRING LENGTH
        !          6089: {{MOV{R8{R7{{COPY CHAR COUNT
        !          6090: {{CTB{R7{SCSI${{NO. OF BYTES NEEDED
        !          6091: {{ADD{R9{R7{{CURRENT END ADDRESS FOR STATIC
        !          6092: {{MOV{R7{STATE{{STORE STATIC END ADRS
        !          6093: {{LCT{R8{R8{{LOOP COUNTER
        !          6094: {{PSC{R9{{{POINT TO CHARS OF STRING
        !          6095: {{ZER{R7{{{SET INITIAL CHARACTER VALUE
        !          6096: *
        !          6097: *      LOOP TO ENTER CHARACTER CODES IN ORDER
        !          6098: *
        !          6099: {INI12{SCH{R7{(R9)+{{STORE NEXT CODE
        !          6100: {{ICV{R7{{{BUMP CODE VALUE
        !          6101: {{BCT{R8{INI12{{LOOP TILL ALL STORED
        !          6102: {{CSC{R9{{{COMPLETE STORE CHARACTERS
        !          6103: *
        !          6104: *      INITIALIZE VARIABLE BLOCKS FOR INPUT AND OUTPUT
        !          6105: *
        !          6106: {{MOV{#V$INP{R10{{POINT TO STRING /INPUT/
        !          6107: {{MOV{#TRTIN{R7{{TRBLK TYPE FOR INPUT
        !          6108: {{JSR{INOUT{{{PERFORM INPUT ASSOCIATION
        !          6109: {{MOV{#V$OUP{R10{{POINT TO STRING /OUTPUT/
        !          6110: {{MOV{#TRTOU{R7{{TRBLK TYPE FOR OUTPUT
        !          6111: {{JSR{INOUT{{{PERFORM OUTPUT ASSOCIATION
        !          6112: {{MOV{INITR{R8{{TERMINAL FLAG
        !          6113: {{BZE{R8{INI13{{SKIP IF NO TERMINAL
        !          6114: {{JSR{PRPAR{{{ASSOCIATE TERMINAL
        !          6115: {{EJC{{{{
        !          6116: *
        !          6117: *      CHECK FOR EXPIRY DATE
        !          6118: *
        !          6119: {INI13{JSR{SYSDC{{{CALL DATE CHECK
        !          6120: {{MOV{SP{FLPTR{{IN CASE STACK OVERFLOWS IN COMPILER
        !          6121: *
        !          6122: *      NOW COMPILE SOURCE INPUT CODE
        !          6123: *
        !          6124: {{JSR{CMPIL{{{CALL COMPILER
        !          6125: {{MOV{R9{R$COD{{SET PTR TO FIRST CODE BLOCK
        !          6126: {{MOV{#NULLS{R$TTL{{FORGET TITLE      (REG04)
        !          6127: {{MOV{#NULLS{R$STL{{FORGET SUB-TITLE  (REG04)
        !          6128: {{ZER{R$CIM{{{FORGET COMPILER INPUT IMAGE
        !          6129: {{ZER{R10{{{CLEAR DUD VALUE
        !          6130: {{ZER{R7{{{DONT SHIFT DYNAMIC STORE UP
        !          6131: {{JSR{GBCOL{{{CLEAR GARBAGE LEFT FROM COMPILE
        !          6132: {{BNZ{CPSTS{INIX0{{SKIP IF NO LISTING OF COMP STATS
        !          6133: {{JSR{PRTPG{{{EJECT PAGE
        !          6134: *
        !          6135: *      PRINT COMPILE STATISTICS
        !          6136: *
        !          6137: {{MOV{DNAMP{R6{{NEXT AVAILABLE LOC
        !          6138: {{SUB{STATB{R6{{MINUS START
        !          6139: {{BTW{R6{{{CONVERT TO WORDS
        !          6140: {{MTI{R6{{{CONVERT TO INTEGER
        !          6141: {{MOV{#ENCM1{R9{{POINT TO /MEMORY USED (WORDS)/
        !          6142: {{JSR{PRTMI{{{PRINT MESSAGE
        !          6143: {{MOV{DNAME{R6{{END OF MEMORY
        !          6144: {{SUB{DNAMP{R6{{MINUS NEXT AVAILABLE LOC
        !          6145: {{BTW{R6{{{CONVERT TO WORDS
        !          6146: {{MTI{R6{{{CONVERT TO INTEGER
        !          6147: {{MOV{#ENCM2{R9{{POINT TO /MEMORY AVAILABLE (WORDS)/
        !          6148: {{JSR{PRTMI{{{PRINT LINE
        !          6149: {{MTI{CMERC{{{GET COUNT OF ERRORS AS INTEGER
        !          6150: {{MOV{#ENCM3{R9{{POINT TO /COMPILE ERRORS/
        !          6151: {{JSR{PRTMI{{{PRINT IT
        !          6152: {{MTI{GBCNT{{{GARBAGE COLLECTION COUNT
        !          6153: {{SBI{INTV1{{{ADJUST FOR UNAVOIDABLE COLLECT
        !          6154: {{MOV{#STPM5{R9{{POINT TO /STORAGE REGENERATIONS/
        !          6155: {{JSR{PRTMI{{{PRINT GBCOL COUNT
        !          6156: {{JSR{SYSTM{{{GET TIME
        !          6157: {{SBI{TIMSX{{{GET COMPILATION TIME
        !          6158: {{MOV{#ENCM4{R9{{POINT TO COMPILATION TIME (MSEC)/
        !          6159: {{JSR{PRTMI{{{PRINT MESSAGE
        !          6160: {{ADD{#NUM05{LSTLC{{BUMP LINE COUNT
        !          6161: {{BZE{HEADP{INIX0{{NO EJECT IF NOTHING PRINTED (SDG11)
        !          6162: {{JSR{PRTPG{{{EJECT PRINTER
        !          6163: {{EJC{{{{
        !          6164: *
        !          6165: *      PREPARE NOW TO START EXECUTION
        !          6166: *
        !          6167: *      SET DEFAULT INPUT RECORD LENGTH
        !          6168: *
        !          6169: {INIX0{BGT{CSWIN{#INILN{INIX1{SKIP IF NOT DEFAULT -IN72 USED
        !          6170: {{MOV{#INILS{CSWIN{{ELSE USE DEFAULT RECORD LENGTH
        !          6171: *
        !          6172: *      RESET TIMER
        !          6173: *
        !          6174: {INIX1{JSR{SYSTM{{{GET TIME AGAIN
        !          6175: {{STI{TIMSX{{{STORE FOR END RUN PROCESSING
        !          6176: {{ADD{CSWEX{NOXEQ{{ADD -NOEXECUTE FLAG
        !          6177: {{BNZ{NOXEQ{INIX2{{JUMP IF EXECUTION SUPPRESSED
        !          6178: {{ZER{GBCNT{{{INITIALISE COLLECT COUNT
        !          6179: {{JSR{SYSBX{{{CALL BEFORE STARTING EXECUTION
        !          6180: *
        !          6181: *      MERGE WHEN LISTING FILE SET FOR EXECUTION
        !          6182: *
        !          6183: {INIY0{MNZ{HEADP{{{MARK HEADERS OUT REGARDLESS
        !          6184: {{ZER{-(SP){{{SET FAILURE LOCATION ON STACK
        !          6185: {{MOV{SP{FLPTR{{SAVE PTR TO FAILURE OFFSET WORD
        !          6186: {{MOV{R$COD{R9{{LOAD PTR TO ENTRY CODE BLOCK
        !          6187: {{MOV{#STGXT{STAGE{{SET STAGE FOR EXECUTE TIME
        !          6188: {{MOV{CMPSN{PFNTE{{COPY STMTS COMPILED COUNT IN CASE
        !          6189: {{JSR{SYSTM{{{TIME YET AGAIN
        !          6190: {{STI{PFSTM{{{
        !          6191: {{BRI{(R9){{{START XEQ WITH FIRST STATEMENT
        !          6192: *
        !          6193: *      HERE IF EXECUTION IS SUPPRESSED
        !          6194: *
        !          6195: {INIX2{JSR{PRTNL{{{PRINT A BLANK LINE
        !          6196: {{MOV{#ENCM5{R9{{POINT TO /EXECUTION SUPPRESSED/
        !          6197: {{JSR{PRTST{{{PRINT STRING
        !          6198: {{JSR{PRTNL{{{OUTPUT LINE
        !          6199: {{ZER{R6{{{SET ABEND VALUE TO ZERO
        !          6200: {{MOV{#NINI9{R7{{SET SPECIAL CODE VALUE
        !          6201: {{JSR{SYSEJ{{{END OF JOB, EXIT TO SYSTEM
        !          6202: {{TTL{S{{{P I T B O L -- SNOBOL4 OPERATOR ROUTINES
        !          6203: *
        !          6204: *      THIS SECTION INCLUDES ALL ROUTINES WHICH CAN BE ACCESSED
        !          6205: *      DIRECTLY FROM THE GENERATED CODE EXCEPT SYSTEM FUNCTIONS.
        !          6206: *
        !          6207: *      ALL ROUTINES IN THIS SECTION START WITH A LABEL OF THE
        !          6208: *      FORM O$XXX WHERE XXX IS THREE LETTERS. THE GENERATED CODE
        !          6209: *      CONTAINS A POINTER TO THE APPROPRIATE ENTRY LABEL.
        !          6210: *
        !          6211: *      SINCE THE GENERAL FORM OF THE GENERATED CODE CONSISTS OF
        !          6212: *      POINTERS TO BLOCKS WHOSE FIRST WORD IS THE ADDRESS OF THE
        !          6213: *      ACTUAL ENTRY POINT LABEL (O$XXX).
        !          6214: *
        !          6215: *      THESE ROUTINES ARE IN ALPHABETICAL ORDER BY THEIR
        !          6216: *      ENTRY LABEL NAMES (I.E. BY THE XXX OF THE O$XXX NAME)
        !          6217: *
        !          6218: *      THESE ROUTINES RECEIVE CONTROL AS FOLLOWS
        !          6219: *
        !          6220: *      (CP)                  POINTER TO NEXT CODE WORD
        !          6221: *      (XS)                  CURRENT STACK POINTER
        !          6222: {{EJC{{{{
        !          6223: *
        !          6224: *      BINARY PLUS (ADDITION)
        !          6225: *
        !          6226: {O$ADD{ENT{{{{ENTRY POINT
        !          6227: {{JSR{ARITH{{{FETCH ARITHMETIC OPERANDS
        !          6228: {{ERR{001{ADDITION{{LEFT OPERAND IS NOT NUMERIC
        !          6229: {{ERR{002{ADDITION{{RIGHT OPERAND IS NOT NUMERIC
        !          6230: {{PPM{OADD1{{{JUMP IF REAL OPERANDS
        !          6231: *
        !          6232: *      HERE TO ADD TWO INTEGERS
        !          6233: *
        !          6234: {{ADI{4*ICVAL(R10){{{ADD RIGHT OPERAND TO LEFT
        !          6235: {{INO{EXINT{{{RETURN INTEGER IF NO OVERFLOW
        !          6236: {{ERB{003{ADDITION{{CAUSED INTEGER OVERFLOW
        !          6237: *
        !          6238: *      HERE TO ADD TWO REALS
        !          6239: *
        !          6240: {OADD1{ADR{4*RCVAL(R10){{{ADD RIGHT OPERAND TO LEFT
        !          6241: {{RNO{EXREA{{{RETURN REAL IF NO OVERFLOW
        !          6242: {{ERB{261{ADDITION{{CAUSED REAL OVERFLOW
        !          6243: {{EJC{{{{
        !          6244: *
        !          6245: *      UNARY PLUS (AFFIRMATION)
        !          6246: *
        !          6247: {O$AFF{ENT{{{{ENTRY POINT
        !          6248: {{MOV{(SP)+{R9{{LOAD OPERAND
        !          6249: {{JSR{GTNUM{{{CONVERT TO NUMERIC
        !          6250: {{ERR{004{AFFIRMATION{{OPERAND IS NOT NUMERIC
        !          6251: {{BRN{EXIXR{{{RETURN IF CONVERTED TO NUMERIC
        !          6252: {{EJC{{{{
        !          6253: *
        !          6254: *      BINARY BAR (ALTERNATION)
        !          6255: *
        !          6256: {O$ALT{ENT{{{{ENTRY POINT
        !          6257: {{MOV{(SP)+{R9{{LOAD RIGHT OPERAND
        !          6258: {{JSR{GTPAT{{{CONVERT TO PATTERN
        !          6259: {{ERR{005{ALTERNATION{{RIGHT OPERAND IS NOT PATTERN
        !          6260: *
        !          6261: *      MERGE HERE FROM SPECIAL (LEFT ALTERNATION) CASE
        !          6262: *
        !          6263: {OALT1{MOV{#P$ALT{R7{{SET PCODE FOR ALTERNATIVE NODE
        !          6264: {{JSR{PBILD{{{BUILD ALTERNATIVE NODE
        !          6265: {{MOV{R9{R10{{SAVE ADDRESS OF ALTERNATIVE NODE
        !          6266: {{MOV{(SP)+{R9{{LOAD LEFT OPERAND
        !          6267: {{JSR{GTPAT{{{CONVERT TO PATTERN
        !          6268: {{ERR{006{ALTERNATION{{LEFT OPERAND IS NOT PATTERN
        !          6269: {{BEQ{R9{#P$ALT{OALT2{JUMP IF LEFT ARG IS ALTERNATION
        !          6270: {{MOV{R9{4*PTHEN(R10){{SET LEFT OPERAND AS SUCCESSOR
        !          6271: {{MOV{R10{R9{{MOVE RESULT TO PROPER REGISTER
        !          6272: {{BRN{EXIXR{{{JUMP FOR NEXT CODE WORD
        !          6273: *
        !          6274: *      COME HERE IF LEFT ARGUMENT IS ITSELF AN ALTERNATION
        !          6275: *
        !          6276: *      THE RESULT IS MORE EFFICIENT IF WE MAKE THE REPLACEMENT
        !          6277: *
        !          6278: *      (A / B) / C = A / (B / C)
        !          6279: *
        !          6280: {OALT2{MOV{4*PARM1(R9){4*PTHEN(R10){{BUILD THE (B / C) NODE
        !          6281: {{MOV{4*PTHEN(R9){-(SP){{SET A AS NEW LEFT ARG
        !          6282: {{MOV{R10{R9{{SET (B / C) AS NEW RIGHT ARG
        !          6283: {{BRN{OALT1{{{MERGE BACK TO BUILD A / (B / C)
        !          6284: {{EJC{{{{
        !          6285: *
        !          6286: *      ARRAY REFERENCE (MULTIPLE SUBSCRIPTS, BY NAME)
        !          6287: *
        !          6288: {O$AMN{ENT{{{{ENTRY POINT
        !          6289: {{LCW{R9{{{LOAD NUMBER OF SUBSCRIPTS
        !          6290: {{MOV{R9{R7{{SET FLAG FOR BY NAME
        !          6291: {{BRN{ARREF{{{JUMP TO ARRAY REFERENCE ROUTINE
        !          6292: {{EJC{{{{
        !          6293: *
        !          6294: *      ARRAY REFERENCE (MULTIPLE SUBSCRIPTS, BY VALUE)
        !          6295: *
        !          6296: {O$AMV{ENT{{{{ENTRY POINT
        !          6297: {{LCW{R9{{{LOAD NUMBER OF SUBSCRIPTS
        !          6298: {{ZER{R7{{{SET FLAG FOR BY VALUE
        !          6299: {{BRN{ARREF{{{JUMP TO ARRAY REFERENCE ROUTINE
        !          6300: {{EJC{{{{
        !          6301: *
        !          6302: *      ARRAY REFERENCE (ONE SUBSCRIPT, BY NAME)
        !          6303: *
        !          6304: {O$AON{ENT{{{{ENTRY POINT
        !          6305: {{MOV{(SP){R9{{LOAD SUBSCRIPT VALUE
        !          6306: {{MOV{4*1(SP){R10{{LOAD ARRAY VALUE
        !          6307: {{MOV{(R10){R6{{LOAD FIRST WORD OF ARRAY OPERAND
        !          6308: {{BEQ{R6{#B$VCT{OAON2{JUMP IF VECTOR REFERENCE
        !          6309: {{BEQ{R6{#B$TBT{OAON3{JUMP IF TABLE REFERENCE
        !          6310: *
        !          6311: *      HERE TO USE CENTRAL ARRAY REFERENCE ROUTINE
        !          6312: *
        !          6313: {OAON1{MOV{#NUM01{R9{{SET NUMBER OF SUBSCRIPTS TO ONE
        !          6314: {{MOV{R9{R7{{SET FLAG FOR BY NAME
        !          6315: {{BRN{ARREF{{{JUMP TO ARRAY REFERENCE ROUTINE
        !          6316: *
        !          6317: *      HERE IF WE HAVE A VECTOR REFERENCE
        !          6318: *
        !          6319: {OAON2{BNE{(R9){#B$ICL{OAON1{USE LONG ROUTINE IF NOT INTEGER
        !          6320: {{LDI{4*ICVAL(R9){{{LOAD INTEGER SUBSCRIPT VALUE
        !          6321: {{MFI{R6{EXFAL{{COPY AS ADDRESS INT, FAIL IF OVFLO
        !          6322: {{BZE{R6{EXFAL{{FAIL IF ZERO
        !          6323: {{ADD{#VCVLB{R6{{COMPUTE OFFSET IN WORDS
        !          6324: {{WTB{R6{{{CONVERT TO BYTES
        !          6325: {{MOV{R6{(SP){{COMPLETE NAME ON STACK
        !          6326: {{BLT{R6{4*VCLEN(R10){EXITS{EXIT IF SUBSCRIPT NOT TOO LARGE
        !          6327: {{BRN{EXFAL{{{ELSE FAIL
        !          6328: *
        !          6329: *      HERE FOR TABLE REFERENCE
        !          6330: *
        !          6331: {OAON3{MNZ{R7{{{SET FLAG FOR NAME REFERENCE
        !          6332: {{JSR{TFIND{{{LOCATE/CREATE TABLE ELEMENT
        !          6333: {{PPM{EXFAL{{{FAIL IF ACCESS FAILS
        !          6334: {{MOV{R10{4*1(SP){{STORE NAME BASE ON STACK
        !          6335: {{MOV{R6{(SP){{STORE NAME OFFSET ON STACK
        !          6336: {{BRN{EXITS{{{EXIT WITH RESULT ON STACK
        !          6337: {{EJC{{{{
        !          6338: *
        !          6339: *      ARRAY REFERENCE (ONE SUBSCRIPT, BY VALUE)
        !          6340: *
        !          6341: {O$AOV{ENT{{{{ENTRY POINT
        !          6342: {{MOV{(SP)+{R9{{LOAD SUBSCRIPT VALUE
        !          6343: {{MOV{(SP)+{R10{{LOAD ARRAY VALUE
        !          6344: {{MOV{(R10){R6{{LOAD FIRST WORD OF ARRAY OPERAND
        !          6345: {{BEQ{R6{#B$VCT{OAOV2{JUMP IF VECTOR REFERENCE
        !          6346: {{BEQ{R6{#B$TBT{OAOV3{JUMP IF TABLE REFERENCE
        !          6347: *
        !          6348: *      HERE TO USE CENTRAL ARRAY REFERENCE ROUTINE
        !          6349: *
        !          6350: {OAOV1{MOV{R10{-(SP){{RESTACK ARRAY VALUE
        !          6351: {{MOV{R9{-(SP){{RESTACK SUBSCRIPT
        !          6352: {{MOV{#NUM01{R9{{SET NUMBER OF SUBSCRIPTS TO ONE
        !          6353: {{ZER{R7{{{SET FLAG FOR VALUE CALL
        !          6354: {{BRN{ARREF{{{JUMP TO ARRAY REFERENCE ROUTINE
        !          6355: *
        !          6356: *      HERE IF WE HAVE A VECTOR REFERENCE
        !          6357: *
        !          6358: {OAOV2{BNE{(R9){#B$ICL{OAOV1{USE LONG ROUTINE IF NOT INTEGER
        !          6359: {{LDI{4*ICVAL(R9){{{LOAD INTEGER SUBSCRIPT VALUE
        !          6360: {{MFI{R6{EXFAL{{MOVE AS ONE WORD INT, FAIL IF OVFLO
        !          6361: {{BZE{R6{EXFAL{{FAIL IF ZERO
        !          6362: {{ADD{#VCVLB{R6{{COMPUTE OFFSET IN WORDS
        !          6363: {{WTB{R6{{{CONVERT TO BYTES
        !          6364: {{BGE{R6{4*VCLEN(R10){EXFAL{FAIL IF SUBSCRIPT TOO LARGE
        !          6365: {{JSR{ACESS{{{ACCESS VALUE
        !          6366: {{PPM{EXFAL{{{FAIL IF ACCESS FAILS
        !          6367: {{BRN{EXIXR{{{ELSE RETURN VALUE TO CALLER
        !          6368: *
        !          6369: *      HERE FOR TABLE REFERENCE BY VALUE
        !          6370: *
        !          6371: {OAOV3{ZER{R7{{{SET FLAG FOR VALUE REFERENCE
        !          6372: {{JSR{TFIND{{{CALL TABLE SEARCH ROUTINE
        !          6373: {{PPM{EXFAL{{{FAIL IF ACCESS FAILS
        !          6374: {{BRN{EXIXR{{{EXIT WITH RESULT IN XR
        !          6375: {{EJC{{{{
        !          6376: *
        !          6377: *      ASSIGNMENT
        !          6378: *
        !          6379: {O$ASS{ENT{{{{ENTRY POINT
        !          6380: *
        !          6381: *      O$RPL (PATTERN REPLACEMENT) MERGES HERE
        !          6382: *
        !          6383: {OASS0{MOV{(SP)+{R7{{LOAD VALUE TO BE ASSIGNED
        !          6384: {{MOV{(SP)+{R6{{LOAD NAME OFFSET
        !          6385: {{MOV{(SP){R10{{LOAD NAME BASE
        !          6386: {{MOV{R7{(SP){{STORE ASSIGNED VALUE AS RESULT
        !          6387: {{JSR{ASIGN{{{PERFORM ASSIGNMENT
        !          6388: {{PPM{EXFAL{{{FAIL IF ASSIGNMENT FAILS
        !          6389: {{BRN{EXITS{{{EXIT WITH RESULT ON STACK
        !          6390: {{EJC{{{{
        !          6391: *
        !          6392: *      COMPILATION ERROR
        !          6393: *
        !          6394: {O$CER{ENT{{{{ENTRY POINT
        !          6395: {{ERB{007{COMPILATION{{ERROR ENCOUNTERED DURING EXECUTION
        !          6396: {{EJC{{{{
        !          6397: *
        !          6398: *      UNARY AT (CURSOR ASSIGNMENT)
        !          6399: *
        !          6400: {O$CAS{ENT{{{{ENTRY POINT
        !          6401: {{MOV{(SP)+{R8{{LOAD NAME OFFSET (PARM2)
        !          6402: {{MOV{(SP)+{R9{{LOAD NAME BASE (PARM1)
        !          6403: {{MOV{#P$CAS{R7{{SET PCODE FOR CURSOR ASSIGNMENT
        !          6404: {{JSR{PBILD{{{BUILD NODE
        !          6405: {{BRN{EXIXR{{{JUMP FOR NEXT CODE WORD
        !          6406: {{EJC{{{{
        !          6407: *
        !          6408: *      CONCATENATION
        !          6409: *
        !          6410: {O$CNC{ENT{{{{ENTRY POINT
        !          6411: {{MOV{(SP){R9{{LOAD RIGHT ARGUMENT
        !          6412: {{BEQ{R9{#NULLS{OCNC3{JUMP IF RIGHT ARG IS NULL
        !          6413: {{MOV{4*1(SP){R10{{LOAD LEFT ARGUMENT
        !          6414: {{BEQ{R10{#NULLS{OCNC4{JUMP IF LEFT ARGUMENT IS NULL
        !          6415: {{MOV{#B$SCL{R6{{GET CONSTANT TO TEST FOR STRING
        !          6416: {{BNE{R6{(R10){OCNC2{JUMP IF LEFT ARG NOT A STRING
        !          6417: {{BNE{R6{(R9){OCNC2{JUMP IF RIGHT ARG NOT A STRING
        !          6418: *
        !          6419: *      MERGE HERE TO CONCATENATE TWO STRINGS
        !          6420: *
        !          6421: {OCNC1{MOV{4*SCLEN(R10){R6{{LOAD LEFT ARGUMENT LENGTH
        !          6422: {{ADD{4*SCLEN(R9){R6{{COMPUTE RESULT LENGTH
        !          6423: {{JSR{ALOCS{{{ALLOCATE SCBLK FOR RESULT
        !          6424: {{MOV{R9{4*1(SP){{STORE RESULT PTR OVER LEFT ARGUMENT
        !          6425: {{PSC{R9{{{PREPARE TO STORE CHARS OF RESULT
        !          6426: {{MOV{4*SCLEN(R10){R6{{GET NUMBER OF CHARS IN LEFT ARG
        !          6427: {{PLC{R10{{{PREPARE TO LOAD LEFT ARG CHARS
        !          6428: {{MVC{{{{MOVE CHARACTERS OF LEFT ARGUMENT
        !          6429: {{MOV{(SP)+{R10{{LOAD RIGHT ARG POINTER, POP STACK
        !          6430: {{MOV{4*SCLEN(R10){R6{{LOAD NUMBER OF CHARS IN RIGHT ARG
        !          6431: {{PLC{R10{{{PREPARE TO LOAD RIGHT ARG CHARS
        !          6432: {{MVC{{{{MOVE CHARACTERS OF RIGHT ARGUMENT
        !          6433: {{BRN{EXITS{{{EXIT WITH RESULT ON STACK
        !          6434: *
        !          6435: *      COME HERE IF ARGUMENTS ARE NOT BOTH STRINGS
        !          6436: *
        !          6437: {OCNC2{JSR{GTSTG{{{CONVERT RIGHT ARG TO STRING
        !          6438: {{PPM{OCNC5{{{JUMP IF RIGHT ARG IS NOT STRING
        !          6439: {{MOV{R9{R10{{SAVE RIGHT ARG PTR
        !          6440: {{JSR{GTSTG{{{CONVERT LEFT ARG TO STRING
        !          6441: {{PPM{OCNC6{{{JUMP IF LEFT ARG IS NOT A STRING
        !          6442: {{MOV{R9{-(SP){{STACK LEFT ARGUMENT
        !          6443: {{MOV{R10{-(SP){{STACK RIGHT ARGUMENT
        !          6444: {{MOV{R9{R10{{MOVE LEFT ARG TO PROPER REG
        !          6445: {{MOV{(SP){R9{{MOVE RIGHT ARG TO PROPER REG
        !          6446: {{BRN{OCNC1{{{MERGE BACK TO CONCATENATE STRINGS
        !          6447: {{EJC{{{{
        !          6448: *
        !          6449: *      CONCATENATION (CONTINUED)
        !          6450: *
        !          6451: *      COME HERE FOR NULL RIGHT ARGUMENT
        !          6452: *
        !          6453: {OCNC3{ICA{SP{{{REMOVE RIGHT ARG FROM STACK
        !          6454: {{BRN{EXITS{{{RETURN WITH LEFT ARGUMENT ON STACK
        !          6455: *
        !          6456: *      HERE FOR NULL LEFT ARGUMENT
        !          6457: *
        !          6458: {OCNC4{ICA{SP{{{UNSTACK ONE ARGUMENT
        !          6459: {{MOV{R9{(SP){{STORE RIGHT ARGUMENT
        !          6460: {{BRN{EXITS{{{EXIT WITH RESULT ON STACK
        !          6461: *
        !          6462: *      HERE IF RIGHT ARGUMENT IS NOT A STRING
        !          6463: *
        !          6464: {OCNC5{MOV{R9{R10{{MOVE RIGHT ARGUMENT PTR
        !          6465: {{MOV{(SP)+{R9{{LOAD LEFT ARG POINTER
        !          6466: *
        !          6467: *      MERGE HERE WHEN LEFT ARGUMENT IS NOT A STRING
        !          6468: *
        !          6469: {OCNC6{JSR{GTPAT{{{CONVERT LEFT ARG TO PATTERN
        !          6470: {{ERR{008{CONCATENATION{{LEFT OPND IS NOT STRING OR PATTERN
        !          6471: {{MOV{R9{-(SP){{SAVE RESULT ON STACK
        !          6472: {{MOV{R10{R9{{POINT TO RIGHT OPERAND
        !          6473: {{JSR{GTPAT{{{CONVERT TO PATTERN
        !          6474: {{ERR{009{CONCATENATION{{RIGHT OPD IS NOT STRING OR PATTERN
        !          6475: {{MOV{R9{R10{{MOVE FOR PCONC
        !          6476: {{MOV{(SP)+{R9{{RELOAD LEFT OPERAND PTR
        !          6477: {{JSR{PCONC{{{CONCATENATE PATTERNS
        !          6478: {{BRN{EXIXR{{{EXIT WITH RESULT IN XR
        !          6479: {{EJC{{{{
        !          6480: *
        !          6481: *      COMPLEMENTATION
        !          6482: *
        !          6483: {O$COM{ENT{{{{ENTRY POINT
        !          6484: {{MOV{(SP)+{R9{{LOAD OPERAND
        !          6485: {{MOV{(R9){R6{{LOAD TYPE WORD
        !          6486: *
        !          6487: *      MERGE BACK HERE AFTER CONVERSION
        !          6488: *
        !          6489: {OCOM1{BEQ{R6{#B$ICL{OCOM2{JUMP IF INTEGER
        !          6490: {{BEQ{R6{#B$RCL{OCOM3{JUMP IF REAL
        !          6491: {{JSR{GTNUM{{{ELSE CONVERT TO NUMERIC
        !          6492: {{ERR{010{COMPLEMENTATION{{OPERAND IS NOT NUMERIC
        !          6493: {{BRN{OCOM1{{{BACK TO CHECK CASES
        !          6494: *
        !          6495: *      HERE TO COMPLEMENT INTEGER
        !          6496: *
        !          6497: {OCOM2{LDI{4*ICVAL(R9){{{LOAD INTEGER VALUE
        !          6498: {{NGI{{{{NEGATE
        !          6499: {{INO{EXINT{{{RETURN INTEGER IF NO OVERFLOW
        !          6500: {{ERB{011{COMPLEMENTATION{{CAUSED INTEGER OVERFLOW
        !          6501: *
        !          6502: *      HERE TO COMPLEMENT REAL
        !          6503: *
        !          6504: {OCOM3{LDR{4*RCVAL(R9){{{LOAD REAL VALUE
        !          6505: {{NGR{{{{NEGATE
        !          6506: {{BRN{EXREA{{{RETURN REAL RESULT
        !          6507: {{EJC{{{{
        !          6508: *
        !          6509: *      BINARY SLASH (DIVISION)
        !          6510: *
        !          6511: {O$DVD{ENT{{{{ENTRY POINT
        !          6512: {{JSR{ARITH{{{FETCH ARITHMETIC OPERANDS
        !          6513: {{ERR{012{DIVISION{{LEFT OPERAND IS NOT NUMERIC
        !          6514: {{ERR{013{DIVISION{{RIGHT OPERAND IS NOT NUMERIC
        !          6515: {{PPM{ODVD2{{{JUMP IF REAL OPERANDS
        !          6516: *
        !          6517: *      HERE TO DIVIDE TWO INTEGERS
        !          6518: *
        !          6519: {{DVI{4*ICVAL(R10){{{DIVIDE LEFT OPERAND BY RIGHT
        !          6520: {{INO{EXINT{{{RESULT OK IF NO OVERFLOW
        !          6521: {{ERB{014{DIVISION{{CAUSED INTEGER OVERFLOW
        !          6522: *
        !          6523: *      HERE TO DIVIDE TWO REALS
        !          6524: *
        !          6525: {ODVD2{DVR{4*RCVAL(R10){{{DIVIDE LEFT OPERAND BY RIGHT
        !          6526: {{RNO{EXREA{{{RETURN REAL IF NO OVERFLOW
        !          6527: {{ERB{262{DIVISION{{CAUSED REAL OVERFLOW
        !          6528: {{EJC{{{{
        !          6529: *
        !          6530: *      EXPONENTIATION
        !          6531: *
        !          6532: {O$EXP{ENT{{{{ENTRY POINT
        !          6533: {{MOV{(SP)+{R9{{LOAD EXPONENT
        !          6534: {{JSR{GTNUM{{{CONVERT TO NUMBER
        !          6535: {{ERR{015{EXPONENTIATION{{RIGHT OPERAND IS NOT NUMERIC
        !          6536: {{BNE{R6{#B$ICL{OEXP7{JUMP IF REAL
        !          6537: {{MOV{R9{R10{{MOVE EXPONENT
        !          6538: {{MOV{(SP)+{R9{{LOAD BASE
        !          6539: {{JSR{GTNUM{{{CONVERT TO NUMERIC
        !          6540: {{ERR{016{EXPONENTIATION{{LEFT OPERAND IS NOT NUMERIC
        !          6541: {{LDI{4*ICVAL(R10){{{LOAD EXPONENT
        !          6542: {{ILT{OEXP8{{{ERROR IF NEGATIVE EXPONENT
        !          6543: {{BEQ{R6{#B$RCL{OEXP3{JUMP IF BASE IS REAL
        !          6544: *
        !          6545: *      HERE TO EXPONENTIATE AN INTEGER
        !          6546: *
        !          6547: {{MFI{R6{OEXP2{{CONVERT EXPONENT TO 1 WORD INTEGER
        !          6548: {{LCT{R6{R6{{SET LOOP COUNTER
        !          6549: {{LDI{INTV1{{{LOAD INITIAL VALUE OF 1
        !          6550: {{BNZ{R6{OEXP1{{JUMP IF NON-ZERO EXPONENT
        !          6551: {{INE{EXINT{{{GIVE ZERO AS RESULT FOR NONZERO**0
        !          6552: {{BRN{OEXP4{{{ELSE ERROR OF 0**0
        !          6553: *
        !          6554: *      LOOP TO PERFORM EXPONENTIATION
        !          6555: *
        !          6556: {OEXP1{MLI{4*ICVAL(R9){{{MULTIPLY BY BASE
        !          6557: {{IOV{OEXP2{{{JUMP IF OVERFLOW
        !          6558: {{BCT{R6{OEXP1{{LOOP BACK TILL COMPUTATION COMPLETE
        !          6559: {{BRN{EXINT{{{THEN RETURN INTEGER RESULT
        !          6560: *
        !          6561: *      HERE IF INTEGER OVERFLOW
        !          6562: *
        !          6563: {OEXP2{ERB{017{EXPONENTIATION{{CAUSED INTEGER OVERFLOW
        !          6564: {{EJC{{{{
        !          6565: *
        !          6566: *      EXPONENTIATION (CONTINUED)
        !          6567: *
        !          6568: *      HERE TO EXPONENTIATE A REAL
        !          6569: *
        !          6570: {OEXP3{MFI{R6{OEXP6{{CONVERT EXPONENT TO ONE WORD
        !          6571: {{LCT{R6{R6{{SET LOOP COUNTER
        !          6572: {{LDR{REAV1{{{LOAD 1.0 AS INITIAL VALUE
        !          6573: {{BNZ{R6{OEXP5{{JUMP IF NON-ZERO EXPONENT
        !          6574: {{RNE{EXREA{{{RETURN 1.0 IF NONZERO**ZERO
        !          6575: *
        !          6576: *      HERE FOR ERROR OF 0**0 OR 0.0**0
        !          6577: *
        !          6578: {OEXP4{ERB{018{EXPONENTIATION{{RESULT IS UNDEFINED
        !          6579: *
        !          6580: *      LOOP TO PERFORM EXPONENTIATION
        !          6581: *
        !          6582: {OEXP5{MLR{4*RCVAL(R9){{{MULTIPLY BY BASE
        !          6583: {{ROV{OEXP6{{{JUMP IF OVERFLOW
        !          6584: {{BCT{R6{OEXP5{{LOOP TILL COMPUTATION COMPLETE
        !          6585: {{BRN{EXREA{{{THEN RETURN REAL RESULT
        !          6586: *
        !          6587: *      HERE IF REAL OVERFLOW
        !          6588: *
        !          6589: {OEXP6{ERB{266{EXPONENTIATION{{CAUSED REAL OVERFLOW
        !          6590: *
        !          6591: *      HERE IF REAL EXPONENT
        !          6592: *
        !          6593: {OEXP7{ERB{267{EXPONENTIATION{{RIGHT OPERAND IS REAL NOT INTEGER
        !          6594: *
        !          6595: *      HERE FOR NEGATIVE EXPONENT
        !          6596: *
        !          6597: {OEXP8{ERB{019{EXPONENTIATION{{RIGHT OPERAND IS NEGATIVE
        !          6598: {{EJC{{{{
        !          6599: *
        !          6600: *      FAILURE IN EXPRESSION EVALUATION
        !          6601: *
        !          6602: *      THIS ENTRY POINT IS USED IF THE EVALUATION OF AN
        !          6603: *      EXPRESSION, INITIATED BY THE EVALX PROCEDURE, FAILS.
        !          6604: *      CONTROL IS RETURNED TO AN APPROPRIATE POINT IN EVALX.
        !          6605: *
        !          6606: {O$FEX{ENT{{{{ENTRY POINT
        !          6607: {{BRN{EVLX6{{{JUMP TO FAILURE LOC IN EVALX
        !          6608: {{EJC{{{{
        !          6609: *
        !          6610: *      FAILURE DURING EVALUATION OF A COMPLEX OR DIRECT GOTO
        !          6611: *
        !          6612: {O$FIF{ENT{{{{ENTRY POINT
        !          6613: {{ERB{020{GOTO{{EVALUATION FAILURE
        !          6614: {{EJC{{{{
        !          6615: *
        !          6616: *      FUNCTION CALL (MORE THAN ONE ARGUMENT)
        !          6617: *
        !          6618: {O$FNC{ENT{{{{ENTRY POINT
        !          6619: {{LCW{R6{{{LOAD NUMBER OF ARGUMENTS
        !          6620: {{LCW{R9{{{LOAD FUNCTION VRBLK POINTER
        !          6621: {{MOV{4*VRFNC(R9){R10{{LOAD FUNCTION POINTER
        !          6622: {{BNE{R6{4*FARGS(R10){CFUNC{USE CENTRAL ROUTINE IF WRONG NUM
        !          6623: {{BRI{(R10){{{JUMP TO FUNCTION IF ARG COUNT OK
        !          6624: {{EJC{{{{
        !          6625: *
        !          6626: *      FUNCTION NAME ERROR
        !          6627: *
        !          6628: {O$FNE{ENT{{{{ENTRY POINT
        !          6629: {{LCW{R6{{{GET NEXT CODE WORD
        !          6630: {{BNE{R6{#ORNM${OFNE1{FAIL IF NOT EVALUATING EXPRESSION
        !          6631: {{BZE{4*2(SP){EVLX3{{OK IF EXPR. WAS WANTED BY VALUE
        !          6632: *
        !          6633: *      HERE FOR ERROR
        !          6634: *
        !          6635: {OFNE1{ERB{021{FUNCTION{{CALLED BY NAME RETURNED A VALUE
        !          6636: {{EJC{{{{
        !          6637: *
        !          6638: *      FUNCTION CALL (SINGLE ARGUMENT)
        !          6639: *
        !          6640: {O$FNS{ENT{{{{ENTRY POINT
        !          6641: {{LCW{R9{{{LOAD FUNCTION VRBLK POINTER
        !          6642: {{MOV{#NUM01{R6{{SET NUMBER OF ARGUMENTS TO ONE
        !          6643: {{MOV{4*VRFNC(R9){R10{{LOAD FUNCTION POINTER
        !          6644: {{BNE{R6{4*FARGS(R10){CFUNC{USE CENTRAL ROUTINE IF WRONG NUM
        !          6645: {{BRI{(R10){{{JUMP TO FUNCTION IF ARG COUNT OK
        !          6646: {{EJC{{{{
        !          6647: *      CALL TO UNDEFINED FUNCTION
        !          6648: *
        !          6649: {O$FUN{ENT{{{{ENTRY POINT
        !          6650: {{ERB{022{UNDEFINED{{FUNCTION CALLED
        !          6651: {{EJC{{{{
        !          6652: *
        !          6653: *      EXECUTE COMPLEX GOTO
        !          6654: *
        !          6655: {O$GOC{ENT{{{{ENTRY POINT
        !          6656: {{MOV{4*1(SP){R9{{LOAD NAME BASE POINTER
        !          6657: {{BHI{R9{STATE{OGOC1{JUMP IF NOT NATURAL VARIABLE
        !          6658: {{ADD{#4*VRTRA{R9{{ELSE POINT TO VRTRA FIELD
        !          6659: {{BRI{(R9){{{AND JUMP THROUGH IT
        !          6660: *
        !          6661: *      HERE IF GOTO OPERAND IS NOT NATURAL VARIABLE
        !          6662: *
        !          6663: {OGOC1{ERB{023{GOTO{{OPERAND IS NOT A NATURAL VARIABLE
        !          6664: {{EJC{{{{
        !          6665: *
        !          6666: *      EXECUTE DIRECT GOTO
        !          6667: *
        !          6668: {O$GOD{ENT{{{{ENTRY POINT
        !          6669: {{MOV{(SP){R9{{LOAD OPERAND
        !          6670: {{MOV{(R9){R6{{LOAD FIRST WORD
        !          6671: {{BEQ{R6{#B$CDS{BCDS0{JUMP IF CODE BLOCK TO CODE ROUTINE
        !          6672: {{BEQ{R6{#B$CDC{BCDC0{JUMP IF CODE BLOCK TO CODE ROUTINE
        !          6673: {{ERB{024{GOTO{{OPERAND IN DIRECT GOTO IS NOT CODE
        !          6674: {{EJC{{{{
        !          6675: *
        !          6676: *      SET GOTO FAILURE TRAP
        !          6677: *
        !          6678: *      THIS ROUTINE IS EXECUTED AT THE START OF A COMPLEX OR
        !          6679: *      DIRECT FAILURE GOTO TO TRAP A SUBSEQUENT FAIL (SEE EXFAL)
        !          6680: *
        !          6681: {O$GOF{ENT{{{{ENTRY POINT
        !          6682: {{MOV{FLPTR{R9{{POINT TO FAIL OFFSET ON STACK
        !          6683: {{ICA{(R9){{{POINT FAILURE TO O$FIF WORD
        !          6684: {{ICP{{{{POINT TO NEXT CODE WORD
        !          6685: {{BRN{EXITS{{{EXIT TO CONTINUE
        !          6686: {{EJC{{{{
        !          6687: *
        !          6688: *      BINARY DOLLAR (IMMEDIATE ASSIGNMENT)
        !          6689: *
        !          6690: *      THE PATTERN BUILT BY BINARY DOLLAR IS A COMPOUND PATTERN.
        !          6691: *      SEE DESCRIPTION AT START OF PATTERN MATCH SECTION FOR
        !          6692: *      DETAILS OF THE STRUCTURE WHICH IS CONSTRUCTED.
        !          6693: *
        !          6694: {O$IMA{ENT{{{{ENTRY POINT
        !          6695: {{MOV{#P$IMC{R7{{SET PCODE FOR LAST NODE
        !          6696: {{MOV{(SP)+{R8{{POP NAME OFFSET (PARM2)
        !          6697: {{MOV{(SP)+{R9{{POP NAME BASE (PARM1)
        !          6698: {{JSR{PBILD{{{BUILD P$IMC NODE
        !          6699: {{MOV{R9{R10{{SAVE PTR TO NODE
        !          6700: {{MOV{(SP){R9{{LOAD LEFT ARGUMENT
        !          6701: {{JSR{GTPAT{{{CONVERT TO PATTERN
        !          6702: {{ERR{025{IMMEDIATE{{ASSIGNMENT LEFT OPERAND IS NOT PATTERN
        !          6703: {{MOV{R9{(SP){{SAVE PTR TO LEFT OPERAND PATTERN
        !          6704: {{MOV{#P$IMA{R7{{SET PCODE FOR FIRST NODE
        !          6705: {{JSR{PBILD{{{BUILD P$IMA NODE
        !          6706: {{MOV{(SP)+{4*PTHEN(R9){{SET LEFT OPERAND AS P$IMA SUCCESSOR
        !          6707: {{JSR{PCONC{{{CONCATENATE TO FORM FINAL PATTERN
        !          6708: {{BRN{EXIXR{{{ALL DONE
        !          6709: {{EJC{{{{
        !          6710: *
        !          6711: *      INDIRECTION (BY NAME)
        !          6712: *
        !          6713: {O$INN{ENT{{{{ENTRY POINT
        !          6714: {{MNZ{R7{{{SET FLAG FOR RESULT BY NAME
        !          6715: {{BRN{INDIR{{{JUMP TO COMMON ROUTINE
        !          6716: {{EJC{{{{
        !          6717: *
        !          6718: *      INTERROGATION
        !          6719: *
        !          6720: {O$INT{ENT{{{{ENTRY POINT
        !          6721: {{MOV{#NULLS{(SP){{REPLACE OPERAND WITH NULL
        !          6722: {{BRN{EXITS{{{EXIT FOR NEXT CODE WORD
        !          6723: {{EJC{{{{
        !          6724: *
        !          6725: *      INDIRECTION (BY VALUE)
        !          6726: *
        !          6727: {O$INV{ENT{{{{ENTRY POINT
        !          6728: {{ZER{R7{{{SET FLAG FOR BY VALUE
        !          6729: {{BRN{INDIR{{{JUMP TO COMMON ROUTINE
        !          6730: {{EJC{{{{
        !          6731: *
        !          6732: *      KEYWORD REFERENCE (BY NAME)
        !          6733: *
        !          6734: {O$KWN{ENT{{{{ENTRY POINT
        !          6735: {{JSR{KWNAM{{{GET KEYWORD NAME
        !          6736: {{BRN{EXNAM{{{EXIT WITH RESULT NAME
        !          6737: {{EJC{{{{
        !          6738: *
        !          6739: *      KEYWORD REFERENCE (BY VALUE)
        !          6740: *
        !          6741: {O$KWV{ENT{{{{ENTRY POINT
        !          6742: {{JSR{KWNAM{{{GET KEYWORD NAME
        !          6743: {{MOV{R9{DNAMP{{DELETE KVBLK
        !          6744: {{JSR{ACESS{{{ACCESS VALUE
        !          6745: {{PPM{EXNUL{{{DUMMY (UNUSED) FAILURE RETURN
        !          6746: {{BRN{EXIXR{{{JUMP WITH VALUE IN XR
        !          6747: {{EJC{{{{
        !          6748: *
        !          6749: *      LOAD EXPRESSION BY NAME
        !          6750: *
        !          6751: {O$LEX{ENT{{{{ENTRY POINT
        !          6752: {{MOV{#4*EVSI${R6{{SET SIZE OF EVBLK
        !          6753: {{JSR{ALLOC{{{ALLOCATE SPACE FOR EVBLK
        !          6754: {{MOV{#B$EVT{(R9){{SET TYPE WORD
        !          6755: {{MOV{#TRBEV{4*EVVAR(R9){{SET DUMMY TRBLK POINTER
        !          6756: {{LCW{R6{{{LOAD EXBLK POINTER
        !          6757: {{MOV{R6{4*EVEXP(R9){{SET EXBLK POINTER
        !          6758: {{MOV{R9{R10{{MOVE NAME BASE TO PROPER REG
        !          6759: {{MOV{#4*EVVAR{R6{{SET NAME OFFSET = ZERO
        !          6760: {{BRN{EXNAM{{{EXIT WITH NAME IN (XL,WA)
        !          6761: {{EJC{{{{
        !          6762: *
        !          6763: *      LOAD PATTERN VALUE
        !          6764: *
        !          6765: {O$LPT{ENT{{{{ENTRY POINT
        !          6766: {{LCW{R9{{{LOAD PATTERN POINTER
        !          6767: {{BRN{EXIXR{{{STACK PTR AND OBEY NEXT CODE WORD
        !          6768: {{EJC{{{{
        !          6769: *
        !          6770: *      LOAD VARIABLE NAME
        !          6771: *
        !          6772: {O$LVN{ENT{{{{ENTRY POINT
        !          6773: {{LCW{R6{{{LOAD VRBLK POINTER
        !          6774: {{MOV{R6{-(SP){{STACK VRBLK PTR (NAME BASE)
        !          6775: {{MOV{#4*VRVAL{-(SP){{STACK NAME OFFSET
        !          6776: {{BRN{EXITS{{{EXIT WITH RESULT ON STACK
        !          6777: {{EJC{{{{
        !          6778: *
        !          6779: *      BINARY ASTERISK (MULTIPLICATION)
        !          6780: *
        !          6781: {O$MLT{ENT{{{{ENTRY POINT
        !          6782: {{JSR{ARITH{{{FETCH ARITHMETIC OPERANDS
        !          6783: {{ERR{026{MULTIPLICATION{{LEFT OPERAND IS NOT NUMERIC
        !          6784: {{ERR{027{MULTIPLICATION{{RIGHT OPERAND IS NOT NUMERIC
        !          6785: {{PPM{OMLT1{{{JUMP IF REAL OPERANDS
        !          6786: *
        !          6787: *      HERE TO MULTIPLY TWO INTEGERS
        !          6788: *
        !          6789: {{MLI{4*ICVAL(R10){{{MULTIPLY LEFT OPERAND BY RIGHT
        !          6790: {{INO{EXINT{{{RETURN INTEGER IF NO OVERFLOW
        !          6791: {{ERB{028{MULTIPLICATION{{CAUSED INTEGER OVERFLOW
        !          6792: *
        !          6793: *      HERE TO MULTIPLY TWO REALS
        !          6794: *
        !          6795: {OMLT1{MLR{4*RCVAL(R10){{{MULTIPLY LEFT OPERAND BY RIGHT
        !          6796: {{RNO{EXREA{{{RETURN REAL IF NO OVERFLOW
        !          6797: {{ERB{263{MULTIPLICATION{{CAUSED REAL OVERFLOW
        !          6798: {{EJC{{{{
        !          6799: *
        !          6800: *      NAME REFERENCE
        !          6801: *
        !          6802: {O$NAM{ENT{{{{ENTRY POINT
        !          6803: {{MOV{#4*NMSI${R6{{SET LENGTH OF NMBLK
        !          6804: {{JSR{ALLOC{{{ALLOCATE NMBLK
        !          6805: {{MOV{#B$NML{(R9){{SET NAME BLOCK CODE
        !          6806: {{MOV{(SP)+{4*NMOFS(R9){{SET NAME OFFSET FROM OPERAND
        !          6807: {{MOV{(SP)+{4*NMBAS(R9){{SET NAME BASE FROM OPERAND
        !          6808: {{BRN{EXIXR{{{EXIT WITH RESULT IN XR
        !          6809: {{EJC{{{{
        !          6810: *
        !          6811: *      NEGATION
        !          6812: *
        !          6813: *      INITIAL ENTRY
        !          6814: *
        !          6815: {O$NTA{ENT{{{{ENTRY POINT
        !          6816: {{LCW{R6{{{LOAD NEW FAILURE OFFSET
        !          6817: {{MOV{FLPTR{-(SP){{STACK OLD FAILURE POINTER
        !          6818: {{MOV{R6{-(SP){{STACK NEW FAILURE OFFSET
        !          6819: {{MOV{SP{FLPTR{{SET NEW FAILURE POINTER
        !          6820: {{BRN{EXITS{{{JUMP TO CONTINUE EXECUTION
        !          6821: *
        !          6822: *      ENTRY AFTER SUCCESSFUL EVALUATION OF OPERAND
        !          6823: *
        !          6824: {O$NTB{ENT{{{{ENTRY POINT
        !          6825: {{MOV{4*2(SP){FLPTR{{RESTORE OLD FAILURE POINTER
        !          6826: {{BRN{EXFAL{{{AND FAIL
        !          6827: *
        !          6828: *      ENTRY FOR FAILURE DURING OPERAND EVALUATION
        !          6829: *
        !          6830: {O$NTC{ENT{{{{ENTRY POINT
        !          6831: {{ICA{SP{{{POP FAILURE OFFSET
        !          6832: {{MOV{(SP)+{FLPTR{{RESTORE OLD FAILURE POINTER
        !          6833: {{BRN{EXNUL{{{EXIT GIVING NULL RESULT
        !          6834: {{EJC{{{{
        !          6835: *
        !          6836: *      USE OF UNDEFINED OPERATOR
        !          6837: *
        !          6838: {O$OUN{ENT{{{{ENTRY POINT
        !          6839: {{ERB{029{UNDEFINED{{OPERATOR REFERENCED
        !          6840: {{EJC{{{{
        !          6841: *
        !          6842: *      BINARY DOT (PATTERN ASSIGNMENT)
        !          6843: *
        !          6844: *      THE PATTERN BUILT BY BINARY DOT IS A COMPOUND PATTERN.
        !          6845: *      SEE DESCRIPTION AT START OF PATTERN MATCH SECTION FOR
        !          6846: *      DETAILS OF THE STRUCTURE WHICH IS CONSTRUCTED.
        !          6847: *
        !          6848: {O$PAS{ENT{{{{ENTRY POINT
        !          6849: {{MOV{#P$PAC{R7{{LOAD PCODE FOR P$PAC NODE
        !          6850: {{MOV{(SP)+{R8{{LOAD NAME OFFSET (PARM2)
        !          6851: {{MOV{(SP)+{R9{{LOAD NAME BASE (PARM1)
        !          6852: {{JSR{PBILD{{{BUILD P$PAC NODE
        !          6853: {{MOV{R9{R10{{SAVE PTR TO NODE
        !          6854: {{MOV{(SP){R9{{LOAD LEFT OPERAND
        !          6855: {{JSR{GTPAT{{{CONVERT TO PATTERN
        !          6856: {{ERR{030{PATTERN{{ASSIGNMENT LEFT OPERAND IS NOT PATTERN
        !          6857: {{MOV{R9{(SP){{SAVE PTR TO LEFT OPERAND PATTERN
        !          6858: {{MOV{#P$PAA{R7{{SET PCODE FOR P$PAA NODE
        !          6859: {{JSR{PBILD{{{BUILD P$PAA NODE
        !          6860: {{MOV{(SP)+{4*PTHEN(R9){{SET LEFT OPERAND AS P$PAA SUCCESSOR
        !          6861: {{JSR{PCONC{{{CONCATENATE TO FORM FINAL PATTERN
        !          6862: {{BRN{EXIXR{{{JUMP FOR NEXT CODE WORD
        !          6863: {{EJC{{{{
        !          6864: *
        !          6865: *      PATTERN MATCH (BY NAME, FOR REPLACEMENT)
        !          6866: *
        !          6867: {O$PMN{ENT{{{{ENTRY POINT
        !          6868: {{ZER{R7{{{SET TYPE CODE FOR MATCH BY NAME
        !          6869: {{BRN{MATCH{{{JUMP TO ROUTINE TO START MATCH
        !          6870: {{EJC{{{{
        !          6871: *
        !          6872: *      PATTERN MATCH (STATEMENT)
        !          6873: *
        !          6874: *      O$PMS IS USED IN PLACE OF O$PMV WHEN THE PATTERN MATCH
        !          6875: *      OCCURS AT THE OUTER (STATEMENT) LEVEL SINCE IN THIS
        !          6876: *      CASE THE SUBSTRING VALUE NEED NOT BE CONSTRUCTED.
        !          6877: *
        !          6878: {O$PMS{ENT{{{{ENTRY POINT
        !          6879: {{MOV{#NUM02{R7{{SET FLAG FOR STATEMENT TO MATCH
        !          6880: {{BRN{MATCH{{{JUMP TO ROUTINE TO START MATCH
        !          6881: {{EJC{{{{
        !          6882: *
        !          6883: *      PATTERN MATCH (BY VALUE)
        !          6884: *
        !          6885: {O$PMV{ENT{{{{ENTRY POINT
        !          6886: {{MOV{#NUM01{R7{{SET TYPE CODE FOR VALUE MATCH
        !          6887: {{BRN{MATCH{{{JUMP TO ROUTINE TO START MATCH
        !          6888: {{EJC{{{{
        !          6889: *
        !          6890: *      POP TOP ITEM ON STACK
        !          6891: *
        !          6892: {O$POP{ENT{{{{ENTRY POINT
        !          6893: {{ICA{SP{{{POP TOP STACK ENTRY
        !          6894: {{BRN{EXITS{{{OBEY NEXT CODE WORD
        !          6895: {{EJC{{{{
        !          6896: *
        !          6897: *      TERMINATE EXECUTION (CODE COMPILED FOR END STATEMENT)
        !          6898: *
        !          6899: {O$STP{ENT{{{{ENTRY POINT
        !          6900: {{BRN{LEND0{{{JUMP TO END CIRCUIT
        !          6901: {{EJC{{{{
        !          6902: *
        !          6903: *      RETURN NAME FROM EXPRESSION
        !          6904: *      THIS ENTRY POINTS IS USED IF THE EVALUATION OF AN
        !          6905: *      EXPRESSION, INITIATED BY THE EVALX PROCEDURE, RETURNS
        !          6906: *      A NAME. CONTROL IS RETURNED TO THE PROPER POINT IN EVALX.
        !          6907: *
        !          6908: {O$RNM{ENT{{{{ENTRY POINT
        !          6909: {{BRN{EVLX4{{{RETURN TO EVALX PROCEDURE
        !          6910: {{EJC{{{{
        !          6911: *
        !          6912: *      PATTERN REPLACEMENT
        !          6913: *
        !          6914: *      WHEN THIS ROUTINE GETS CONTROL, THE FOLLOWING STACK
        !          6915: *      ENTRIES HAVE BEEN MADE (SEE END OF MATCH ROUTINE P$NTH)
        !          6916: *
        !          6917: *                            SUBJECT NAME BASE
        !          6918: *                            SUBJECT NAME OFFSET
        !          6919: *                            INITIAL CURSOR VALUE
        !          6920: *                            FINAL CURSOR VALUE
        !          6921: *                            SUBJECT POINTER
        !          6922: *      (XS) ---------------- REPLACEMENT VALUE
        !          6923: *
        !          6924: {O$RPL{ENT{{{{ENTRY POINT
        !          6925: {{JSR{GTSTG{{{CONVERT REPLACEMENT VAL TO STRING
        !          6926: {{ERR{031{PATTERN{{REPLACEMENT RIGHT OPERAND IS NOT STRING
        !          6927: *
        !          6928: *      GET RESULT LENGTH AND ALLOCATE RESULT SCBLK
        !          6929: *
        !          6930: {{MOV{(SP){R10{{LOAD SUBJECT STRING POINTER
        !          6931: {{BEQ{(R10){#B$BCT{ORPL4{BRANCH IF BUFFER ASSIGNMENT
        !          6932: {{ADD{4*SCLEN(R10){R6{{ADD SUBJECT STRING LENGTH
        !          6933: {{ADD{4*2(SP){R6{{ADD STARTING CURSOR
        !          6934: {{SUB{4*1(SP){R6{{MINUS FINAL CURSOR = TOTAL LENGTH
        !          6935: {{BZE{R6{ORPL3{{JUMP IF RESULT IS NULL
        !          6936: {{MOV{R9{-(SP){{RESTACK REPLACEMENT STRING
        !          6937: {{JSR{ALOCS{{{ALLOCATE SCBLK FOR RESULT
        !          6938: {{MOV{4*3(SP){R6{{GET INITIAL CURSOR (PART 1 LEN)
        !          6939: {{MOV{R9{4*3(SP){{STACK RESULT POINTER
        !          6940: {{PSC{R9{{{POINT TO CHARACTERS OF RESULT
        !          6941: *
        !          6942: *      MOVE PART 1 (START OF SUBJECT) TO RESULT
        !          6943: *
        !          6944: {{BZE{R6{ORPL1{{JUMP IF FIRST PART IS NULL
        !          6945: {{MOV{4*1(SP){R10{{ELSE POINT TO SUBJECT STRING
        !          6946: {{PLC{R10{{{POINT TO SUBJECT STRING CHARS
        !          6947: {{MVC{{{{MOVE FIRST PART TO RESULT
        !          6948: {{EJC{{{{
        !          6949: *      PATTERN REPLACEMENT (CONTINUED)
        !          6950: *
        !          6951: *      NOW MOVE IN REPLACEMENT VALUE
        !          6952: *
        !          6953: {ORPL1{MOV{(SP)+{R10{{LOAD REPLACEMENT STRING, POP
        !          6954: {{MOV{4*SCLEN(R10){R6{{LOAD LENGTH
        !          6955: {{BZE{R6{ORPL2{{JUMP IF NULL REPLACEMENT
        !          6956: {{PLC{R10{{{ELSE POINT TO CHARS OF REPLACEMENT
        !          6957: {{MVC{{{{MOVE IN CHARS (PART 2)
        !          6958: *
        !          6959: *      NOW MOVE IN REMAINDER OF STRING (PART 3)
        !          6960: *
        !          6961: {ORPL2{MOV{(SP)+{R10{{LOAD SUBJECT STRING POINTER, POP
        !          6962: {{MOV{(SP)+{R8{{LOAD FINAL CURSOR, POP
        !          6963: {{MOV{4*SCLEN(R10){R6{{LOAD SUBJECT STRING LENGTH
        !          6964: {{SUB{R8{R6{{MINUS FINAL CURSOR = PART 3 LENGTH
        !          6965: {{BZE{R6{OASS0{{JUMP TO ASSIGN IF PART 3 IS NULL
        !          6966: {{PLC{R10{R8{{ELSE POINT TO LAST PART OF STRING
        !          6967: {{MVC{{{{MOVE PART 3 TO RESULT
        !          6968: {{BRN{OASS0{{{JUMP TO PERFORM ASSIGNMENT
        !          6969: *
        !          6970: *      HERE IF RESULT IS NULL
        !          6971: *
        !          6972: {ORPL3{ADD{#4*NUM02{SP{{POP SUBJECT STR PTR, FINAL CURSOR
        !          6973: {{MOV{#NULLS{(SP){{SET NULL RESULT
        !          6974: {{BRN{OASS0{{{JUMP TO ASSIGN NULL VALUE
        !          6975: *
        !          6976: *      HERE FOR BUFFER SUBSTRING ASSIGNMENT
        !          6977: *
        !          6978: {ORPL4{MOV{R9{R10{{COPY SCBLK REPLACEMENT PTR
        !          6979: {{MOV{(SP)+{R9{{UNSTACK BCBLK PTR
        !          6980: {{MOV{(SP)+{R7{{GET FINAL CURSOR VALUE
        !          6981: {{MOV{(SP)+{R6{{GET INITIAL CURSOR
        !          6982: {{SUB{R6{R7{{GET LENGTH IN WB
        !          6983: {{ADD{#4*NUM02{SP{{GET RID OF NAME BASE/OFFSET
        !          6984: {{JSR{INSBF{{{INSERT SUBSTRING
        !          6985: {{PPM{{{{CONVERT FAIL IMPOSSIBLE
        !          6986: {{PPM{EXFAL{{{FAIL IF INSERT FAILS
        !          6987: {{BRN{EXNUL{{{ELSE NULL RESULT
        !          6988: {{EJC{{{{
        !          6989: *
        !          6990: *      RETURN VALUE FROM EXPRESSION
        !          6991: *
        !          6992: *      THIS ENTRY POINTS IS USED IF THE EVALUATION OF AN
        !          6993: *      EXPRESSION, INITIATED BY THE EVALX PROCEDURE, RETURNS
        !          6994: *      A VALUE. CONTROL IS RETURNED TO THE PROPER POINT IN EVALX
        !          6995: *
        !          6996: {O$RVL{ENT{{{{ENTRY POINT
        !          6997: {{BRN{EVLX3{{{RETURN TO EVALX PROCEDURE
        !          6998: {{EJC{{{{
        !          6999: *
        !          7000: *      SELECTION
        !          7001: *
        !          7002: *      INITIAL ENTRY
        !          7003: *
        !          7004: {O$SLA{ENT{{{{ENTRY POINT
        !          7005: {{LCW{R6{{{LOAD NEW FAILURE OFFSET
        !          7006: {{MOV{FLPTR{-(SP){{STACK OLD FAILURE POINTER
        !          7007: {{MOV{R6{-(SP){{STACK NEW FAILURE OFFSET
        !          7008: {{MOV{SP{FLPTR{{SET NEW FAILURE POINTER
        !          7009: {{BRN{EXITS{{{JUMP TO EXECUTE FIRST ALTERNATIVE
        !          7010: *
        !          7011: *      ENTRY AFTER SUCCESSFUL EVALUATION OF ALTERNATIVE
        !          7012: *
        !          7013: {O$SLB{ENT{{{{ENTRY POINT
        !          7014: {{MOV{(SP)+{R9{{LOAD RESULT
        !          7015: {{ICA{SP{{{POP FAIL OFFSET
        !          7016: {{MOV{(SP){FLPTR{{RESTORE OLD FAILURE POINTER
        !          7017: {{MOV{R9{(SP){{RESTACK RESULT
        !          7018: {{LCW{R6{{{LOAD NEW CODE OFFSET
        !          7019: {{ADD{R$COD{R6{{POINT TO ABSOLUTE CODE LOCATION
        !          7020: {{LCP{R6{{{SET NEW CODE POINTER
        !          7021: {{BRN{EXITS{{{JUMP TO CONTINUE PAST SELECTION
        !          7022: *
        !          7023: *      ENTRY AT START OF SUBSEQUENT ALTERNATIVES
        !          7024: *
        !          7025: {O$SLC{ENT{{{{ENTRY POINT
        !          7026: {{LCW{R6{{{LOAD NEW FAIL OFFSET
        !          7027: {{MOV{R6{(SP){{STORE NEW FAIL OFFSET
        !          7028: {{BRN{EXITS{{{JUMP TO EXECUTE NEXT ALTERNATIVE
        !          7029: *
        !          7030: *      ENTRY AT START OF LAST ALTERNATIVE
        !          7031: *
        !          7032: {O$SLD{ENT{{{{ENTRY POINT
        !          7033: {{ICA{SP{{{POP FAILURE OFFSET
        !          7034: {{MOV{(SP)+{FLPTR{{RESTORE OLD FAILURE POINTER
        !          7035: {{BRN{EXITS{{{JUMP TO EXECUTE LAST ALTERNATIVE
        !          7036: {{EJC{{{{
        !          7037: *
        !          7038: *      BINARY MINUS (SUBTRACTION)
        !          7039: *
        !          7040: {O$SUB{ENT{{{{ENTRY POINT
        !          7041: {{JSR{ARITH{{{FETCH ARITHMETIC OPERANDS
        !          7042: {{ERR{032{SUBTRACTION{{LEFT OPERAND IS NOT NUMERIC
        !          7043: {{ERR{033{SUBTRACTION{{RIGHT OPERAND IS NOT NUMERIC
        !          7044: {{PPM{OSUB1{{{JUMP IF REAL OPERANDS
        !          7045: *
        !          7046: *      HERE TO SUBTRACT TWO INTEGERS
        !          7047: *
        !          7048: {{SBI{4*ICVAL(R10){{{SUBTRACT RIGHT OPERAND FROM LEFT
        !          7049: {{INO{EXINT{{{RETURN INTEGER IF NO OVERFLOW
        !          7050: {{ERB{034{SUBTRACTION{{CAUSED INTEGER OVERFLOW
        !          7051: *
        !          7052: *      HERE TO SUBTRACT TWO REALS
        !          7053: *
        !          7054: {OSUB1{SBR{4*RCVAL(R10){{{SUBTRACT RIGHT OPERAND FROM LEFT
        !          7055: {{RNO{EXREA{{{RETURN REAL IF NO OVERFLOW
        !          7056: {{ERB{264{SUBTRACTION{{CAUSED REAL OVERFLOW
        !          7057: {{EJC{{{{
        !          7058: *
        !          7059: *      DUMMY OPERATOR TO RETURN CONTROL TO TRXEQ PROCEDURE
        !          7060: *
        !          7061: {O$TXR{ENT{{{{ENTRY POINT
        !          7062: {{BRN{TRXQ1{{{JUMP INTO TRXEQ PROCEDURE
        !          7063: {{EJC{{{{
        !          7064: *
        !          7065: *      UNEXPECTED FAILURE
        !          7066: *
        !          7067: *      NOTE THAT IF A SETEXIT TRAP IS OPERATING THEN
        !          7068: *      TRANSFER TO SYSTEM LABEL CONTINUE
        !          7069: *      WILL RESULT IN LOOPING HERE.  DIFFICULT TO AVOID EXCEPT
        !          7070: *      WITH A CONSIDERABLE OVERHEAD WHICH IS NOT WORTHWHILE OR
        !          7071: *      ELSE BY A TECHNIQUE SUCH AS SETTING KVERL TO ZERO.
        !          7072: *
        !          7073: {O$UNF{ENT{{{{ENTRY POINT
        !          7074: {{ERB{035{UNEXPECTED{{FAILURE IN -NOFAIL MODE
        !          7075: {{TTL{S{{{P I T B O L -- SNOBOL4 BUILTIN LABEL ROUTINES
        !          7076: *
        !          7077: *      THE FOLLOWING SECTION CONTAINS THE ROUTINES FOR LABELS
        !          7078: *      WHICH HAVE A PREDEFINED MEANING IN SNOBOL4.
        !          7079: *
        !          7080: *      CONTROL IS PASSED DIRECTLY TO THE LABEL NAME ENTRY POINT.
        !          7081: *
        !          7082: *      ENTRY NAMES ARE OF THE FORM L$XXX WHERE XXX IS THE THREE
        !          7083: *      LETTER VARIABLE NAME IDENTIFIER.
        !          7084: *
        !          7085: *      ENTRIES ARE IN ALPHABETICAL ORDER
        !          7086: {{EJC{{{{
        !          7087: *
        !          7088: *      ABORT
        !          7089: *
        !          7090: {L$ABO{ENT{{{{ENTRY POINT
        !          7091: *
        !          7092: *      MERGE HERE IF EXECUTION TERMINATES IN ERROR
        !          7093: *
        !          7094: {LABO1{MOV{KVERT{R6{{LOAD ERROR CODE
        !          7095: {{BZE{R6{LABO2{{JUMP IF NO ERROR HAS OCCURED
        !          7096: {{JSR{SYSAX{{{CALL AFTER EXECUTION PROC (REG04)
        !          7097: {{JSR{PRTPG{{{ELSE EJECT PRINTER
        !          7098: {{JSR{ERMSG{{{PRINT ERROR MESSAGE
        !          7099: {{ZER{R9{{{INDICATE NO MESSAGE TO PRINT
        !          7100: {{BRN{STOPR{{{JUMP TO ROUTINE TO STOP RUN
        !          7101: *
        !          7102: *      HERE IF NO ERROR HAD OCCURED
        !          7103: *
        !          7104: {LABO2{ERB{036{GOTO{{ABORT WITH NO PRECEDING ERROR
        !          7105: {{EJC{{{{
        !          7106: *
        !          7107: *      CONTINUE
        !          7108: *
        !          7109: {L$CNT{ENT{{{{ENTRY POINT
        !          7110: *
        !          7111: *      MERGE HERE AFTER EXECUTION ERROR
        !          7112: *
        !          7113: {LCNT1{MOV{R$CNT{R9{{LOAD CONTINUATION CODE BLOCK PTR
        !          7114: {{BZE{R9{LCNT2{{JUMP IF NO PREVIOUS ERROR
        !          7115: {{ZER{R$CNT{{{CLEAR FLAG
        !          7116: {{MOV{R9{R$COD{{ELSE STORE AS NEW CODE BLOCK PTR
        !          7117: {{ADD{STXOF{R9{{ADD FAILURE OFFSET
        !          7118: {{LCP{R9{{{LOAD CODE POINTER
        !          7119: {{MOV{FLPTR{SP{{RESET STACK POINTER
        !          7120: {{BRN{EXITS{{{JUMP TO TAKE INDICATED FAILURE
        !          7121: *
        !          7122: *      HERE IF NO PREVIOUS ERROR
        !          7123: *
        !          7124: {LCNT2{ERB{037{GOTO{{CONTINUE WITH NO PRECEDING ERROR
        !          7125: {{EJC{{{{
        !          7126: *
        !          7127: *      END
        !          7128: *
        !          7129: {L$END{ENT{{{{ENTRY POINT
        !          7130: *
        !          7131: *      MERGE HERE FROM END CODE CIRCUIT
        !          7132: *
        !          7133: {LEND0{MOV{#ENDMS{R9{{POINT TO MESSAGE /NORMAL TERM../
        !          7134: {{BRN{STOPR{{{JUMP TO ROUTINE TO STOP RUN
        !          7135: {{EJC{{{{
        !          7136: *
        !          7137: *      FRETURN
        !          7138: *
        !          7139: {L$FRT{ENT{{{{ENTRY POINT
        !          7140: {{MOV{#SCFRT{R6{{POINT TO STRING /FRETURN/
        !          7141: {{BRN{RETRN{{{JUMP TO COMMON RETURN ROUTINE
        !          7142: {{EJC{{{{
        !          7143: *
        !          7144: *      NRETURN
        !          7145: *
        !          7146: {L$NRT{ENT{{{{ENTRY POINT
        !          7147: {{MOV{#SCNRT{R6{{POINT TO STRING /NRETURN/
        !          7148: {{BRN{RETRN{{{JUMP TO COMMON RETURN ROUTINE
        !          7149: {{EJC{{{{
        !          7150: *
        !          7151: *      RETURN
        !          7152: *
        !          7153: {L$RTN{ENT{{{{ENTRY POINT
        !          7154: {{MOV{#SCRTN{R6{{POINT TO STRING /RETURN/
        !          7155: {{BRN{RETRN{{{JUMP TO COMMON RETURN ROUTINE
        !          7156: {{EJC{{{{
        !          7157: *
        !          7158: *      UNDEFINED LABEL
        !          7159: *
        !          7160: {L$UND{ENT{{{{ENTRY POINT
        !          7161: {{ERB{038{GOTO{{UNDEFINED LABEL
        !          7162: {{TTL{S{{{P I T B O L -- BLOCK ACTION ROUTINES
        !          7163: *
        !          7164: *      THE FIRST WORD OF EVERY BLOCK IN DYNAMIC STORAGE AND THE
        !          7165: *      VRGET, VRSTO AND VRTRA FIELDS OF A VRBLK CONTAIN A
        !          7166: *      POINTER TO AN ENTRY POINT IN THE PROGRAM. ALL SUCH ENTRY
        !          7167: *      POINTS ARE IN THE FOLLOWING SECTION EXCEPT THOSE FOR
        !          7168: *      PATTERN BLOCKS WHICH ARE IN THE PATTERN MATCHING SEGMENT
        !          7169: *      LATER ON (LABELS OF THE FORM P$XXX), AND DOPE VECTORS
        !          7170: *      (D$XXX) WHICH ARE IN THE DOPE VECTOR SECTION FOLLOWING
        !          7171: *      THE PATTERN ROUTINES (DOPE VECTORS ARE USED FOR CMBLKS).
        !          7172: *
        !          7173: *      THE ENTRY POINTS IN THIS SECTION HAVE LABELS OF THE
        !          7174: *      FORM B$XXY WHERE XX IS THE TWO CHARACTER BLOCK TYPE FOR
        !          7175: *      THE CORRESPONDING BLOCK AND Y IS ANY LETTER.
        !          7176: *
        !          7177: *      IN SOME CASES, THE POINTERS SERVE NO OTHER PURPOSE THAN
        !          7178: *      TO IDENTIFY THE BLOCK TYPE. IN THIS CASE THE ROUTINE
        !          7179: *      IS NEVER EXECUTED AND THUS NO CODE IS ASSEMBLED.
        !          7180: *
        !          7181: *      FOR EACH OF THESE ENTRY POINTS CORRESPONDING TO A BLOCK
        !          7182: *      AN ENTRY POINT IDENTIFICATION IS ASSEMBLED (BL$XX).
        !          7183: *
        !          7184: *      THE EXACT ENTRY CONDITIONS DEPEND ON THE MANNER IN
        !          7185: *      WHICH THE ROUTINE IS ACCESSED AND ARE DOCUMENTED WITH
        !          7186: *      THE INDIVIDUAL ROUTINES AS REQUIRED.
        !          7187: *
        !          7188: *      THE ORDER OF THESE ROUTINES IS ALPHABETICAL WITH THE
        !          7189: *      FOLLOWING EXCEPTIONS.
        !          7190: *
        !          7191: *      THE ROUTINES FOR SEBLK AND EXBLK ENTRIES OCCUR FIRST SO
        !          7192: *      THAT EXPRESSIONS CAN BE QUICKLY IDENTIFIED FROM THE FACT
        !          7193: *      THAT THEIR ROUTINES LIE BEFORE THE SYMBOL B$E$$.
        !          7194: *
        !          7195: *      THESE ARE IMMEDIATELY FOLLOWED BY THE ROUTINE FOR A TRBLK
        !          7196: *      SO THAT THE TEST AGAINST THE SYMBOL B$T$$ CHECKS FOR
        !          7197: *      TRAPPED VALUES OR EXPRESSION VALUES (SEE PROCEDURE EVALP)
        !          7198: *
        !          7199: *      THE PATTERN ROUTINES LIE AFTER THIS SECTION SO THAT
        !          7200: *      PATTERNS ARE IDENTIFIED WITH ROUTINES STARTING AT OR
        !          7201: *      AFTER THE INITIAL INSTRUCTION IN THESE ROUTINES (P$AAA).
        !          7202: *
        !          7203: *      THE SYMBOL B$AAA DEFINES THE FIRST LOCATION FOR BLOCK
        !          7204: *      ROUTINES AND THE SYMBOL P$YYY (AT THE END OF THE PATTERN
        !          7205: *      MATCH ROUTINES SECTION) DEFINES THE LAST SUCH ENTRY POINT
        !          7206: *
        !          7207: {B$AAA{ENT{BL$$I{{{ENTRY POINT OF FIRST BLOCK ROUTINE
        !          7208: {{EJC{{{{
        !          7209: *
        !          7210: *      EXBLK
        !          7211: *
        !          7212: *      THE ROUTINE FOR AN EXBLK LOADS THE EXPRESSION ONTO
        !          7213: *      THE STACK AS A VALUE.
        !          7214: *
        !          7215: *      (XR)                  POINTER TO EXBLK
        !          7216: *
        !          7217: {B$EXL{ENT{BL$EX{{{ENTRY POINT (EXBLK)
        !          7218: {{BRN{EXIXR{{{STACK XR AND OBEY NEXT CODE WORD
        !          7219: {{EJC{{{{
        !          7220: *
        !          7221: *      SEBLK
        !          7222: *
        !          7223: *      THE ROUTINE FOR SEBLK IS ACCESSED FROM THE GENERATED
        !          7224: *      CODE TO LOAD THE EXPRESSION VALUE ONTO THE STACK.
        !          7225: *
        !          7226: {B$SEL{ENT{BL$SE{{{ENTRY POINT (SEBLK)
        !          7227: {{BRN{EXIXR{{{STACK XR AND OBEY NEXT CODE WORD
        !          7228: *
        !          7229: *      DEFINE SYMBOL WHICH MARKS END OF ENTRIES FOR EXPRESSIONS
        !          7230: *
        !          7231: {B$E$${ENT{BL$$I{{{ENTRY POINT
        !          7232: {{EJC{{{{
        !          7233: *
        !          7234: *      TRBLK
        !          7235: *
        !          7236: *      THE ROUTINE FOR A TRBLK IS NEVER EXECUTED
        !          7237: *
        !          7238: {B$TRT{ENT{BL$TR{{{ENTRY POINT (TRBLK)
        !          7239: *
        !          7240: *      DEFINE SYMBOL MARKING END OF TRAP AND EXPRESSION BLOCKS
        !          7241: *
        !          7242: {B$T$${ENT{BL$$I{{{END OF TRBLK,SEBLK,EXBLK ENTRIES
        !          7243: {{EJC{{{{
        !          7244: *
        !          7245: *      ARBLK
        !          7246: *
        !          7247: *      THE ROUTINE FOR ARBLK IS NEVER EXECUTED
        !          7248: *
        !          7249: {B$ART{ENT{BL$AR{{{ENTRY POINT (ARBLK)
        !          7250: {{EJC{{{{
        !          7251: *
        !          7252: *      BCBLK
        !          7253: *
        !          7254: *      THE ROUTINE FOR A BCBLK IS NEVER EXECUTED
        !          7255: *
        !          7256: *      (XR)                  POINTER TO BCBLK
        !          7257: *
        !          7258: {B$BCT{ENT{BL$BC{{{ENTRY POINT (BCBLK)
        !          7259: {{EJC{{{{
        !          7260: *
        !          7261: *      BFBLK
        !          7262: *
        !          7263: *      THE ROUTINE FOR A BFBLK IS NEVER EXECUTED
        !          7264: *
        !          7265: *      (XR)                  POINTER TO BFBLK
        !          7266: *
        !          7267: {B$BFT{ENT{BL$BF{{{ENTRY POINT (BFBLK)
        !          7268: {{EJC{{{{
        !          7269: *
        !          7270: *      CCBLK
        !          7271: *
        !          7272: *      THE ROUTINE FOR CCBLK IS NEVER ENTERED
        !          7273: *
        !          7274: {B$CCT{ENT{BL$CC{{{ENTRY POINT (CCBLK)
        !          7275: {{EJC{{{{
        !          7276: *
        !          7277: *      CDBLK
        !          7278: *
        !          7279: *      THE CDBLK ROUTINES ARE EXECUTED FROM THE GENERATED CODE.
        !          7280: *      THERE ARE TWO CASES DEPENDING ON THE FORM OF CDFAL.
        !          7281: *
        !          7282: *      ENTRY FOR COMPLEX FAILURE CODE AT CDFAL
        !          7283: *
        !          7284: *      (XR)                  POINTER TO CDBLK
        !          7285: *
        !          7286: {B$CDC{ENT{BL$CD{{{ENTRY POINT (CDBLK)
        !          7287: {BCDC0{MOV{FLPTR{SP{{POP GARBAGE OFF STACK
        !          7288: {{MOV{4*CDFAL(R9){(SP){{SET FAILURE OFFSET
        !          7289: {{BRN{STMGO{{{ENTER STMT
        !          7290: {{EJC{{{{
        !          7291: *
        !          7292: *      CDBLK (CONTINUED)
        !          7293: *
        !          7294: *      ENTRY FOR SIMPLE FAILURE CODE AT CDFAL
        !          7295: *
        !          7296: *      (XR)                  POINTER TO CDBLK
        !          7297: *
        !          7298: {B$CDS{ENT{BL$CD{{{ENTRY POINT (CDBLK)
        !          7299: {BCDS0{MOV{FLPTR{SP{{POP GARBAGE OFF STACK
        !          7300: {{MOV{#4*CDFAL{(SP){{SET FAILURE OFFSET
        !          7301: {{BRN{STMGO{{{ENTER STMT
        !          7302: {{EJC{{{{
        !          7303: *
        !          7304: *      CMBLK
        !          7305: *
        !          7306: *      THE ROUTINE FOR A CMBLK IS NEVER EXECUTED
        !          7307: *
        !          7308: {B$CMT{ENT{BL$CM{{{ENTRY POINT (CMBLK)
        !          7309: {{EJC{{{{
        !          7310: *
        !          7311: *      CTBLK
        !          7312: *
        !          7313: *      THE ROUTINE FOR A CTBLK IS NEVER EXECUTED
        !          7314: *
        !          7315: {B$CTT{ENT{BL$CT{{{ENTRY POINT (CTBLK)
        !          7316: {{EJC{{{{
        !          7317: *
        !          7318: *      DFBLK
        !          7319: *
        !          7320: *      THE ROUTINE FOR A DFBLK IS ACCESSED FROM THE O$FNC ENTRY
        !          7321: *      TO CALL A DATATYPE FUNCTION AND BUILD A PDBLK.
        !          7322: *
        !          7323: *      (XL)                  POINTER TO DFBLK
        !          7324: *
        !          7325: {B$DFC{ENT{BL$DF{{{ENTRY POINT
        !          7326: {{MOV{4*DFPDL(R10){R6{{LOAD LENGTH OF PDBLK
        !          7327: {{JSR{ALLOC{{{ALLOCATE PDBLK
        !          7328: {{MOV{#B$PDT{(R9){{STORE TYPE WORD
        !          7329: {{MOV{R10{4*PDDFP(R9){{STORE DFBLK POINTER
        !          7330: {{MOV{R9{R8{{SAVE POINTER TO PDBLK
        !          7331: {{ADD{R6{R9{{POINT PAST PDBLK
        !          7332: {{LCT{R6{4*FARGS(R10){{SET TO COUNT FIELDS
        !          7333: *
        !          7334: *      LOOP TO ACQUIRE FIELD VALUES FROM STACK
        !          7335: *
        !          7336: {BDFC1{MOV{(SP)+{-(R9){{MOVE A FIELD VALUE
        !          7337: {{BCT{R6{BDFC1{{LOOP TILL ALL MOVED
        !          7338: {{MOV{R8{R9{{RECALL POINTER TO PDBLK
        !          7339: {{BRN{EXSID{{{EXIT SETTING ID FIELD
        !          7340: {{EJC{{{{
        !          7341: *
        !          7342: *      EFBLK
        !          7343: *
        !          7344: *      THE ROUTINE FOR AN EFBLK IS PASSED CONTROL FORM THE O$FNC
        !          7345: *      ENTRY TO CALL AN EXTERNAL FUNCTION.
        !          7346: *
        !          7347: *      (XL)                  POINTER TO EFBLK
        !          7348: *
        !          7349: {B$EFC{ENT{BL$EF{{{ENTRY POINT (EFBLK)
        !          7350: {{MOV{4*FARGS(R10){R8{{LOAD NUMBER OF ARGUMENTS
        !          7351: {{WTB{R8{{{CONVERT TO OFFSET
        !          7352: {{MOV{R10{-(SP){{SAVE POINTER TO EFBLK
        !          7353: {{MOV{SP{R10{{COPY POINTER TO ARGUMENTS
        !          7354: *
        !          7355: *      LOOP TO CONVERT ARGUMENTS
        !          7356: *
        !          7357: {BEFC1{ICA{R10{{{POINT TO NEXT ENTRY
        !          7358: {{MOV{(SP){R9{{LOAD POINTER TO EFBLK
        !          7359: {{DCA{R8{{{DECREMENT EFTAR OFFSET
        !          7360: {{ADD{R8{R9{{POINT TO NEXT EFTAR ENTRY
        !          7361: {{MOV{4*EFTAR(R9){R9{{LOAD EFTAR ENTRY
        !          7362: {{BSW{R9{4{{SWITCH ON TYPE
        !          7363: {{IFF{0{BEFC7{{NO CONVERSION NEEDED
        !          7364: {{IFF{1{BEFC2{{STRING
        !          7365: {{IFF{2{BEFC3{{INTEGER
        !          7366: {{IFF{3{BEFC4{{REAL
        !          7367: {{ESW{{{{END OF SWITCH ON TYPE
        !          7368: *
        !          7369: *      HERE TO CONVERT TO STRING
        !          7370: *
        !          7371: {BEFC2{MOV{(R10){-(SP){{STACK ARG PTR
        !          7372: {{JSR{GTSTG{{{CONVERT ARGUMENT TO STRING
        !          7373: {{ERR{039{EXTERNAL{{FUNCTION ARGUMENT IS NOT STRING
        !          7374: {{BRN{BEFC6{{{JUMP TO MERGE
        !          7375: {{EJC{{{{
        !          7376: *
        !          7377: *      EFBLK (CONTINUED)
        !          7378: *
        !          7379: *      HERE TO CONVERT AN INTEGER
        !          7380: *
        !          7381: {BEFC3{MOV{(R10){R9{{LOAD NEXT ARGUMENT
        !          7382: {{MOV{R8{BEFOF{{SAVE OFFSET
        !          7383: {{JSR{GTINT{{{CONVERT TO INTEGER
        !          7384: {{ERR{040{EXTERNAL{{FUNCTION ARGUMENT IS NOT INTEGER
        !          7385: {{BRN{BEFC5{{{MERGE WITH REAL CASE
        !          7386: *
        !          7387: *      HERE TO CONVERT A REAL
        !          7388: *
        !          7389: {BEFC4{MOV{(R10){R9{{LOAD NEXT ARGUMENT
        !          7390: {{MOV{R8{BEFOF{{SAVE OFFSET
        !          7391: {{JSR{GTREA{{{CONVERT TO REAL
        !          7392: {{ERR{265{EXTERNAL{{FUNCTION ARGUMENT IS NOT REAL
        !          7393: *
        !          7394: *      INTEGER CASE MERGES HERE
        !          7395: *
        !          7396: {BEFC5{MOV{BEFOF{R8{{RESTORE OFFSET
        !          7397: *
        !          7398: *      STRING MERGES HERE
        !          7399: *
        !          7400: {BEFC6{MOV{R9{(R10){{STORE CONVERTED RESULT
        !          7401: *
        !          7402: *      NO CONVERSION MERGES HERE
        !          7403: *
        !          7404: {BEFC7{BNZ{R8{BEFC1{{LOOP BACK IF MORE TO GO
        !          7405: *
        !          7406: *      HERE AFTER CONVERTING ALL THE ARGUMENTS
        !          7407: *
        !          7408: {{MOV{(SP)+{R10{{RESTORE EFBLK POINTER
        !          7409: {{MOV{4*FARGS(R10){R6{{GET NUMBER OF ARGS
        !          7410: {{JSR{SYSEX{{{CALL ROUTINE TO CALL EXTERNAL FNC
        !          7411: {{PPM{EXFAL{{{FAIL IF FAILURE
        !          7412: {{EJC{{{{
        !          7413: *
        !          7414: *      EFBLK (CONTINUED)
        !          7415: *
        !          7416: *      RETURN HERE WITH RESULT IN XR
        !          7417: *
        !          7418: *      FIRST DEFEND AGAINST NON-STANDARD NULL STRING RETURNED
        !          7419: *
        !          7420: {{MOV{4*EFRSL(R10){R7{{GET RESULT TYPE ID
        !          7421: {{BNZ{R7{BEFA8{{BRANCH IF NOT UNCONVERTED
        !          7422: {{BNE{(R9){#B$SCL{BEFC8{JUMP IF NOT A STRING
        !          7423: {{BZE{4*SCLEN(R9){EXNUL{{RETURN NULL IF NULL
        !          7424: *
        !          7425: *      HERE IF CONVERTED RESULT TO CHECK FOR NULL STRING
        !          7426: *
        !          7427: {BEFA8{BNE{R7{#NUM01{BEFC8{JUMP IF NOT A STRING
        !          7428: {{BZE{4*SCLEN(R9){EXNUL{{RETURN NULL IF NULL
        !          7429: *
        !          7430: *      RETURN IF RESULT IS IN DYNAMIC STORAGE
        !          7431: *
        !          7432: {BEFC8{BLT{R9{DNAMB{BEFC9{JUMP IF NOT IN DYNAMIC STORAGE
        !          7433: {{BLE{R9{DNAMP{EXIXR{RETURN RESULT IF ALREADY DYNAMIC
        !          7434: *
        !          7435: *      HERE WE COPY A RESULT INTO THE DYNAMIC REGION
        !          7436: *
        !          7437: {BEFC9{MOV{(R9){R6{{GET POSSIBLE TYPE WORD
        !          7438: {{BZE{R7{BEF11{{JUMP IF UNCONVERTED RESULT
        !          7439: {{MOV{#B$SCL{R6{{STRING
        !          7440: {{BEQ{R7{#NUM01{BEF10{YES JUMP
        !          7441: {{MOV{#B$ICL{R6{{INTEGER
        !          7442: {{BEQ{R7{#NUM02{BEF10{YES JUMP
        !          7443: {{MOV{#B$RCL{R6{{REAL
        !          7444: *
        !          7445: *      STORE TYPE WORD IN RESULT
        !          7446: *
        !          7447: {BEF10{MOV{R6{(R9){{STORED BEFORE COPYING TO DYNAMIC
        !          7448: *
        !          7449: *      MERGE FOR UNCONVERTED RESULT
        !          7450: *
        !          7451: {BEF11{JSR{BLKLN{{{GET LENGTH OF BLOCK
        !          7452: {{MOV{R9{R10{{COPY ADDRESS OF OLD BLOCK
        !          7453: {{JSR{ALLOC{{{ALLOCATE DYNAMIC BLOCK SAME SIZE
        !          7454: {{MOV{R9{-(SP){{SET POINTER TO NEW BLOCK AS RESULT
        !          7455: {{MVW{{{{COPY OLD BLOCK TO DYNAMIC BLOCK
        !          7456: {{BRN{EXITS{{{EXIT WITH RESULT ON STACK
        !          7457: {{EJC{{{{
        !          7458: *
        !          7459: *      EVBLK
        !          7460: *
        !          7461: *      THE ROUTINE FOR AN EVBLK IS NEVER EXECUTED
        !          7462: *
        !          7463: {B$EVT{ENT{BL$EV{{{ENTRY POINT (EVBLK)
        !          7464: {{EJC{{{{
        !          7465: *
        !          7466: *      FFBLK
        !          7467: *
        !          7468: *      THE ROUTINE FOR AN FFBLK IS EXECUTED FROM THE O$FNC ENTRY
        !          7469: *      TO CALL A FIELD FUNCTION AND EXTRACT A FIELD VALUE/NAME.
        !          7470: *
        !          7471: *      (XL)                  POINTER TO FFBLK
        !          7472: *
        !          7473: {B$FFC{ENT{BL$FF{{{ENTRY POINT (FFBLK)
        !          7474: {{MOV{R10{R9{{COPY FFBLK POINTER
        !          7475: {{LCW{R8{{{LOAD NEXT CODE WORD
        !          7476: {{MOV{(SP){R10{{LOAD PDBLK POINTER
        !          7477: {{BNE{(R10){#B$PDT{BFFC2{JUMP IF NOT PDBLK AT ALL
        !          7478: {{MOV{4*PDDFP(R10){R6{{LOAD DFBLK POINTER FROM PDBLK
        !          7479: *
        !          7480: *      LOOP TO FIND CORRECT FFBLK FOR THIS PDBLK
        !          7481: *
        !          7482: {BFFC1{BEQ{R6{4*FFDFP(R9){BFFC3{JUMP IF THIS IS THE CORRECT FFBLK
        !          7483: {{MOV{4*FFNXT(R9){R9{{ELSE LINK TO NEXT FFBLK ON CHAIN
        !          7484: {{BNZ{R9{BFFC1{{LOOP BACK IF ANOTHER ENTRY TO CHECK
        !          7485: *
        !          7486: *      HERE FOR BAD ARGUMENT
        !          7487: *
        !          7488: {BFFC2{ERB{041{FIELD{{FUNCTION ARGUMENT IS WRONG DATATYPE
        !          7489: {{EJC{{{{
        !          7490: *
        !          7491: *      FFBLK (CONTINUED)
        !          7492: *
        !          7493: *      HERE AFTER LOCATING CORRECT FFBLK
        !          7494: *
        !          7495: {BFFC3{MOV{4*FFOFS(R9){R6{{LOAD FIELD OFFSET
        !          7496: {{BEQ{R8{#OFNE${BFFC5{JUMP IF CALLED BY NAME
        !          7497: {{ADD{R6{R10{{ELSE POINT TO VALUE FIELD
        !          7498: {{MOV{(R10){R9{{LOAD VALUE
        !          7499: {{BNE{(R9){#B$TRT{BFFC4{JUMP IF NOT TRAPPED
        !          7500: {{SUB{R6{R10{{ELSE RESTORE NAME BASE,OFFSET
        !          7501: {{MOV{R8{(SP){{SAVE NEXT CODE WORD OVER PDBLK PTR
        !          7502: {{JSR{ACESS{{{ACCESS VALUE
        !          7503: {{PPM{EXFAL{{{FAIL IF ACCESS FAILS
        !          7504: {{MOV{(SP){R8{{RESTORE NEXT CODE WORD
        !          7505: *
        !          7506: *      HERE AFTER GETTING VALUE IN (XR)
        !          7507: *
        !          7508: {BFFC4{MOV{R9{(SP){{STORE VALUE ON STACK (OVER PDBLK)
        !          7509: {{MOV{R8{R9{{COPY NEXT CODE WORD
        !          7510: {{MOV{(R9){R10{{LOAD ENTRY ADDRESS
        !          7511: {{BRI{R10{{{JUMP TO ROUTINE FOR NEXT CODE WORD
        !          7512: *
        !          7513: *      HERE IF CALLED BY NAME
        !          7514: *
        !          7515: {BFFC5{MOV{R6{-(SP){{STORE NAME OFFSET (BASE IS SET)
        !          7516: {{BRN{EXITS{{{EXIT WITH NAME ON STACK
        !          7517: {{EJC{{{{
        !          7518: *
        !          7519: *      ICBLK
        !          7520: *
        !          7521: *      THE ROUTINE FOR ICBLK IS EXECUTED FROM THE GENERATED
        !          7522: *      CODE TO LOAD AN INTEGER VALUE ONTO THE STACK.
        !          7523: *
        !          7524: *      (XR)                  POINTER TO ICBLK
        !          7525: *
        !          7526: {B$ICL{ENT{BL$IC{{{ENTRY POINT (ICBLK)
        !          7527: {{BRN{EXIXR{{{STACK XR AND OBEY NEXT CODE WORD
        !          7528: {{EJC{{{{
        !          7529: *
        !          7530: *      KVBLK
        !          7531: *
        !          7532: *      THE ROUTINE FOR A KVBLK IS NEVER EXECUTED.
        !          7533: *
        !          7534: {B$KVT{ENT{BL$KV{{{ENTRY POINT (KVBLK)
        !          7535: {{EJC{{{{
        !          7536: *
        !          7537: *      NMBLK
        !          7538: *
        !          7539: *      THE ROUTINE FOR A NMBLK IS EXECUTED FROM THE GENERATED
        !          7540: *      CODE FOR THE CASE OF LOADING A NAME ONTO THE STACK
        !          7541: *      WHERE THE NAME IS THAT OF A NATURAL VARIABLE WHICH CAN
        !          7542: *      BE PREEVALUATED AT COMPILE TIME.
        !          7543: *
        !          7544: *      (XR)                  POINTER TO NMBLK
        !          7545: *
        !          7546: {B$NML{ENT{BL$NM{{{ENTRY POINT (NMBLK)
        !          7547: {{BRN{EXIXR{{{STACK XR AND OBEY NEXT CODE WORD
        !          7548: {{EJC{{{{
        !          7549: *
        !          7550: *      PDBLK
        !          7551: *
        !          7552: *      THE ROUTINE FOR A PDBLK IS NEVER EXECUTED
        !          7553: *
        !          7554: {B$PDT{ENT{BL$PD{{{ENTRY POINT (PDBLK)
        !          7555: {{EJC{{{{
        !          7556: *
        !          7557: *      PFBLK
        !          7558: *
        !          7559: *      THE ROUTINE FOR A PFBLK IS EXECUTED FROM THE ENTRY O$FNC
        !          7560: *      TO CALL A PROGRAM DEFINED FUNCTION.
        !          7561: *
        !          7562: *      (XL)                  POINTER TO PFBLK
        !          7563: *
        !          7564: *      THE FOLLOWING STACK ENTRIES ARE MADE BEFORE PASSING
        !          7565: *      CONTROL TO THE PROGRAM DEFINED FUNCTION.
        !          7566: *
        !          7567: *                            SAVED VALUE OF FIRST ARGUMENT
        !          7568: *                            .
        !          7569: *                            SAVED VALUE OF LAST ARGUMENT
        !          7570: *                            SAVED VALUE OF FIRST LOCAL
        !          7571: *                            .
        !          7572: *                            SAVED VALUE OF LAST LOCAL
        !          7573: *                            SAVED VALUE OF FUNCTION NAME
        !          7574: *                            SAVED CODE BLOCK PTR (R$COD)
        !          7575: *                            SAVED CODE POINTER (-R$COD)
        !          7576: *                            SAVED VALUE OF FLPRT
        !          7577: *                            SAVED VALUE OF FLPTR
        !          7578: *                            POINTER TO PFBLK
        !          7579: *      FLPTR --------------- ZERO (TO BE OVERWRITTEN WITH OFFS)
        !          7580: *
        !          7581: {B$PFC{ENT{BL$PF{{{ENTRY POINT (PFBLK)
        !          7582: {{MOV{R10{BPFPF{{SAVE PFBLK PTR (NEED NOT BE RELOC)
        !          7583: {{MOV{R10{R9{{COPY FOR THE MOMENT
        !          7584: {{MOV{4*PFVBL(R9){R10{{POINT TO VRBLK FOR FUNCTION
        !          7585: *
        !          7586: *      LOOP TO FIND OLD VALUE OF FUNCTION
        !          7587: *
        !          7588: {BPF01{MOV{R10{R7{{SAVE POINTER
        !          7589: {{MOV{4*VRVAL(R10){R10{{LOAD VALUE
        !          7590: {{BEQ{(R10){#B$TRT{BPF01{LOOP IF TRBLK
        !          7591: *
        !          7592: *      SET VALUE TO NULL AND SAVE OLD FUNCTION VALUE
        !          7593: *
        !          7594: {{MOV{R10{BPFSV{{SAVE OLD VALUE
        !          7595: {{MOV{R7{R10{{POINT BACK TO BLOCK WITH VALUE
        !          7596: {{MOV{#NULLS{4*VRVAL(R10){{SET VALUE TO NULL
        !          7597: {{MOV{4*FARGS(R9){R6{{LOAD NUMBER OF ARGUMENTS
        !          7598: {{ADD{#4*PFARG{R9{{POINT TO PFARG ENTRIES
        !          7599: {{BZE{R6{BPF04{{JUMP IF NO ARGUMENTS
        !          7600: {{MOV{SP{R10{{PTR TO LAST ARG
        !          7601: {{WTB{R6{{{CONVERT NO. OF ARGS TO BYTES OFFSET
        !          7602: {{ADD{R6{R10{{POINT BEFORE FIRST ARG
        !          7603: {{MOV{R10{BPFXT{{REMEMBER ARG POINTER
        !          7604: {{EJC{{{{
        !          7605: *
        !          7606: *      PFBLK (CONTINUED)
        !          7607: *
        !          7608: *      LOOP TO SAVE OLD ARGUMENT VALUES AND SET NEW ONES
        !          7609: *
        !          7610: {BPF02{MOV{(R9)+{R10{{LOAD VRBLK PTR FOR NEXT ARGUMENT
        !          7611: *
        !          7612: *      LOOP THROUGH POSSIBLE TRBLK CHAIN TO FIND VALUE
        !          7613: *
        !          7614: {BPF03{MOV{R10{R8{{SAVE POINTER
        !          7615: {{MOV{4*VRVAL(R10){R10{{LOAD NEXT VALUE
        !          7616: {{BEQ{(R10){#B$TRT{BPF03{LOOP BACK IF TRBLK
        !          7617: *
        !          7618: *      SAVE OLD VALUE AND GET NEW VALUE
        !          7619: *
        !          7620: {{MOV{R10{R6{{KEEP OLD VALUE
        !          7621: {{MOV{BPFXT{R10{{POINT BEFORE NEXT STACKED ARG
        !          7622: {{MOV{-(R10){R7{{LOAD ARGUMENT (NEW VALUE)
        !          7623: {{MOV{R6{(R10){{SAVE OLD VALUE
        !          7624: {{MOV{R10{BPFXT{{KEEP ARG PTR FOR NEXT TIME
        !          7625: {{MOV{R8{R10{{POINT BACK TO BLOCK WITH VALUE
        !          7626: {{MOV{R7{4*VRVAL(R10){{SET NEW VALUE
        !          7627: {{BNE{SP{BPFXT{BPF02{LOOP IF NOT ALL DONE
        !          7628: *
        !          7629: *      NOW PROCESS LOCALS
        !          7630: *
        !          7631: {BPF04{MOV{BPFPF{R10{{RESTORE PFBLK POINTER
        !          7632: {{MOV{4*PFNLO(R10){R6{{LOAD NUMBER OF LOCALS
        !          7633: {{BZE{R6{BPF07{{JUMP IF NO LOCALS
        !          7634: {{MOV{#NULLS{R7{{GET NULL CONSTANT
        !          7635: {{LCT{R6{R6{{SET LOCAL COUNTER
        !          7636: *
        !          7637: *      LOOP TO PROCESS LOCALS
        !          7638: *
        !          7639: {BPF05{MOV{(R9)+{R10{{LOAD VRBLK PTR FOR NEXT LOCAL
        !          7640: *
        !          7641: *      LOOP THROUGH POSSIBLE TRBLK CHAIN TO FIND VALUE
        !          7642: *
        !          7643: {BPF06{MOV{R10{R8{{SAVE POINTER
        !          7644: {{MOV{4*VRVAL(R10){R10{{LOAD NEXT VALUE
        !          7645: {{BEQ{(R10){#B$TRT{BPF06{LOOP BACK IF TRBLK
        !          7646: *
        !          7647: *      SAVE OLD VALUE AND SET NULL AS NEW VALUE
        !          7648: *
        !          7649: {{MOV{R10{-(SP){{STACK OLD VALUE
        !          7650: {{MOV{R8{R10{{POINT BACK TO BLOCK WITH VALUE
        !          7651: {{MOV{R7{4*VRVAL(R10){{SET NULL AS NEW VALUE
        !          7652: {{BCT{R6{BPF05{{LOOP TILL ALL LOCALS PROCESSED
        !          7653: {{EJC{{{{
        !          7654: *
        !          7655: *      PFBLK (CONTINUED)
        !          7656: *
        !          7657: *      HERE AFTER PROCESSING ARGUMENTS AND LOCALS
        !          7658: *
        !          7659: {BPF07{ZER{R9{{{ZERO REG XR IN CASE
        !          7660: {{BZE{KVPFL{BPF7C{{SKIP IF PROFILING IS OFF
        !          7661: {{BEQ{KVPFL{#NUM02{BPF7A{BRANCH ON TYPE OF PROFILE
        !          7662: *
        !          7663: *      HERE IF &PROFILE = 1
        !          7664: *
        !          7665: {{JSR{SYSTM{{{GET CURRENT TIME
        !          7666: {{STI{PFETM{{{SAVE FOR A SEC
        !          7667: {{SBI{PFSTM{{{FIND TIME USED BY CALLER
        !          7668: {{JSR{ICBLD{{{BUILD INTO AN ICBLK
        !          7669: {{LDI{PFETM{{{RELOAD CURRENT TIME
        !          7670: {{BRN{BPF7B{{{MERGE
        !          7671: *
        !          7672: *       HERE IF &PROFILE = 2
        !          7673: *
        !          7674: {BPF7A{LDI{PFSTM{{{GET START TIME OF CALLING STMT
        !          7675: {{JSR{ICBLD{{{ASSEMBLE AN ICBLK ROUND IT
        !          7676: {{JSR{SYSTM{{{GET NOW TIME
        !          7677: *
        !          7678: *      BOTH TYPES OF PROFILE MERGE HERE
        !          7679: *
        !          7680: {BPF7B{STI{PFSTM{{{SET START TIME OF 1ST FUNC STMT
        !          7681: {{MNZ{PFFNC{{{FLAG FUNCTION ENTRY
        !          7682: *
        !          7683: *      NO PROFILING MERGES HERE
        !          7684: *
        !          7685: {BPF7C{MOV{R9{-(SP){{STACK ICBLK PTR (OR ZERO)
        !          7686: {{MOV{R$COD{R6{{LOAD OLD CODE BLOCK POINTER
        !          7687: {{SCP{R7{{{GET CODE POINTER
        !          7688: {{SUB{R6{R7{{MAKE CODE POINTER INTO OFFSET
        !          7689: {{MOV{BPFPF{R10{{RECALL PFBLK POINTER
        !          7690: {{MOV{BPFSV{-(SP){{STACK OLD VALUE OF FUNCTION NAME
        !          7691: {{MOV{R6{-(SP){{STACK CODE BLOCK POINTER
        !          7692: {{MOV{R7{-(SP){{STACK CODE OFFSET
        !          7693: {{MOV{FLPRT{-(SP){{STACK OLD FLPRT
        !          7694: {{MOV{FLPTR{-(SP){{STACK OLD FAILURE POINTER
        !          7695: {{MOV{R10{-(SP){{STACK POINTER TO PFBLK
        !          7696: {{ZER{-(SP){{{DUMMY ZERO ENTRY FOR FAIL RETURN
        !          7697: {{CHK{{{{CHECK FOR STACK OVERFLOW
        !          7698: {{MOV{SP{FLPTR{{SET NEW FAIL RETURN VALUE
        !          7699: {{MOV{SP{FLPRT{{SET NEW FLPRT
        !          7700: {{MOV{KVTRA{R6{{LOAD TRACE VALUE
        !          7701: {{ADD{KVFTR{R6{{ADD FTRACE VALUE
        !          7702: {{BNZ{R6{BPF09{{JUMP IF TRACING POSSIBLE
        !          7703: {{ICV{KVFNC{{{ELSE BUMP FNCLEVEL
        !          7704: *
        !          7705: *      HERE TO ACTUALLY JUMP TO FUNCTION
        !          7706: *
        !          7707: {BPF08{MOV{4*PFCOD(R10){R9{{POINT TO CODE
        !          7708: {{BRI{(R9){{{OFF TO EXECUTE FUNCTION
        !          7709: *
        !          7710: *      HERE IF TRACING IS POSSIBLE
        !          7711: *
        !          7712: {BPF09{MOV{4*PFCTR(R10){R9{{LOAD POSSIBLE CALL TRACE TRBLK
        !          7713: {{MOV{4*PFVBL(R10){R10{{LOAD VRBLK POINTER FOR FUNCTION
        !          7714: {{MOV{#4*VRVAL{R6{{SET NAME OFFSET FOR VARIABLE
        !          7715: {{BZE{KVTRA{BPF10{{JUMP IF TRACE MODE IS OFF
        !          7716: {{BZE{R9{BPF10{{OR IF THERE IS NO CALL TRACE
        !          7717: *
        !          7718: *      HERE IF CALL TRACED
        !          7719: *
        !          7720: {{DCV{KVTRA{{{DECREMENT TRACE COUNT
        !          7721: {{BZE{4*TRFNC(R9){BPF11{{JUMP IF PRINT TRACE
        !          7722: {{JSR{TRXEQ{{{EXECUTE FUNCTION TYPE TRACE
        !          7723: {{EJC{{{{
        !          7724: *
        !          7725: *      PFBLK (CONTINUED)
        !          7726: *
        !          7727: *      HERE TO TEST FOR FTRACE TRACE
        !          7728: *
        !          7729: {BPF10{BZE{KVFTR{BPF16{{JUMP IF FTRACE IS OFF
        !          7730: {{DCV{KVFTR{{{ELSE DECREMENT FTRACE
        !          7731: *
        !          7732: *      HERE FOR PRINT TRACE
        !          7733: *
        !          7734: {BPF11{JSR{PRTSN{{{PRINT STATEMENT NUMBER
        !          7735: {{JSR{PRTNM{{{PRINT FUNCTION NAME
        !          7736: {{MOV{#CH$PP{R6{{LOAD LEFT PAREN
        !          7737: {{JSR{PRTCH{{{PRINT LEFT PAREN
        !          7738: {{MOV{4*1(SP){R10{{RECOVER PFBLK POINTER
        !          7739: {{BZE{4*FARGS(R10){BPF15{{SKIP IF NO ARGUMENTS
        !          7740: {{ZER{R7{{{ELSE SET ARGUMENT COUNTER
        !          7741: {{BRN{BPF13{{{JUMP INTO LOOP
        !          7742: *
        !          7743: *      LOOP TO PRINT ARGUMENT VALUES
        !          7744: *
        !          7745: {BPF12{MOV{#CH$CM{R6{{LOAD COMMA
        !          7746: {{JSR{PRTCH{{{PRINT TO SEPARATE FROM LAST ARG
        !          7747: *
        !          7748: *      MERGE HERE FIRST TIME (NO COMMA REQUIRED)
        !          7749: *
        !          7750: {BPF13{MOV{R7{(SP){{SAVE ARG CTR (OVER FAILOFFS IS OK)
        !          7751: {{WTB{R7{{{CONVERT TO BYTE OFFSET
        !          7752: {{ADD{R7{R10{{POINT TO NEXT ARGUMENT POINTER
        !          7753: {{MOV{4*PFARG(R10){R9{{LOAD NEXT ARGUMENT VRBLK PTR
        !          7754: {{SUB{R7{R10{{RESTORE PFBLK POINTER
        !          7755: {{MOV{4*VRVAL(R9){R9{{LOAD NEXT VALUE
        !          7756: {{JSR{PRTVL{{{PRINT ARGUMENT VALUE
        !          7757: {{EJC{{{{
        !          7758: *
        !          7759: *      HERE AFTER DEALING WITH ONE ARGUMENT
        !          7760: *
        !          7761: {{MOV{(SP){R7{{RESTORE ARGUMENT COUNTER
        !          7762: {{ICV{R7{{{INCREMENT ARGUMENT COUNTER
        !          7763: {{BLT{R7{4*FARGS(R10){BPF12{LOOP IF MORE TO PRINT
        !          7764: *
        !          7765: *      MERGE HERE IN NO ARGS CASE TO PRINT PAREN
        !          7766: *
        !          7767: {BPF15{MOV{#CH$RP{R6{{LOAD RIGHT PAREN
        !          7768: {{JSR{PRTCH{{{PRINT TO TERMINATE OUTPUT
        !          7769: {{JSR{PRTNL{{{TERMINATE PRINT LINE
        !          7770: *
        !          7771: *      MERGE HERE TO EXIT WITH TEST FOR FNCLEVEL TRACE
        !          7772: *
        !          7773: {BPF16{ICV{KVFNC{{{INCREMENT FNCLEVEL
        !          7774: {{MOV{R$FNC{R10{{LOAD PTR TO POSSIBLE TRBLK
        !          7775: {{JSR{KTREX{{{CALL KEYWORD TRACE ROUTINE
        !          7776: *
        !          7777: *      CALL FUNCTION AFTER TRACE TESTS COMPLETE
        !          7778: *
        !          7779: {{MOV{4*1(SP){R10{{RESTORE PFBLK POINTER
        !          7780: {{BRN{BPF08{{{JUMP BACK TO EXECUTE FUNCTION
        !          7781: {{EJC{{{{
        !          7782: *
        !          7783: *      RCBLK
        !          7784: *
        !          7785: *      THE ROUTINE FOR AN RCBLK IS EXECUTED FROM THE GENERATED
        !          7786: *      CODE TO LOAD A REAL VALUE ONTO THE STACK.
        !          7787: *
        !          7788: *      (XR)                  POINTER TO RCBLK
        !          7789: *
        !          7790: {B$RCL{ENT{BL$RC{{{ENTRY POINT (RCBLK)
        !          7791: {{BRN{EXIXR{{{STACK XR AND OBEY NEXT CODE WORD
        !          7792: {{EJC{{{{
        !          7793: *
        !          7794: *      SCBLK
        !          7795: *
        !          7796: *      THE ROUTINE FOR AN SCBLK IS EXECUTED FROM THE GENERATED
        !          7797: *      CODE TO LOAD A STRING VALUE ONTO THE STACK.
        !          7798: *
        !          7799: *      (XR)                  POINTER TO SCBLK
        !          7800: *
        !          7801: {B$SCL{ENT{BL$SC{{{ENTRY POINT (SCBLK)
        !          7802: {{BRN{EXIXR{{{STACK XR AND OBEY NEXT CODE WORD
        !          7803: {{EJC{{{{
        !          7804: *
        !          7805: *      TBBLK
        !          7806: *
        !          7807: *      THE ROUTINE FOR A TBBLK IS NEVER EXECUTED
        !          7808: *
        !          7809: {B$TBT{ENT{BL$TB{{{ENTRY POINT (TBBLK)
        !          7810: {{EJC{{{{
        !          7811: *
        !          7812: *      TEBLK
        !          7813: *
        !          7814: *      THE ROUTINE FOR A TEBLK IS NEVER EXECUTED
        !          7815: *
        !          7816: {B$TET{ENT{BL$TE{{{ENTRY POINT (TEBLK)
        !          7817: {{EJC{{{{
        !          7818: *
        !          7819: *      VCBLK
        !          7820: *
        !          7821: *      THE ROUTINE FOR A VCBLK IS NEVER EXECUTED
        !          7822: *
        !          7823: {B$VCT{ENT{BL$VC{{{ENTRY POINT (VCBLK)
        !          7824: {{EJC{{{{
        !          7825: *
        !          7826: *      VRBLK
        !          7827: *
        !          7828: *      THE VRBLK ROUTINES ARE EXECUTED FROM THE GENERATED CODE.
        !          7829: *      THERE ARE SIX ENTRIES FOR VRBLK COVERING VARIOUS CASES
        !          7830: *
        !          7831: {B$VR${ENT{BL$$I{{{MARK START OF VRBLK ENTRY POINTS
        !          7832: *
        !          7833: *      ENTRY FOR VRGET (TRAPPED CASE). THIS ROUTINE IS CALLED
        !          7834: *      FROM THE GENERATED CODE TO LOAD THE VALUE OF A VARIABLE.
        !          7835: *      THIS ENTRY POINT IS USED IF AN ACCESS TRACE OR INPUT
        !          7836: *      ASSOCIATION IS CURRENTLY ACTIVE.
        !          7837: *
        !          7838: *      (XR)                  POINTER TO VRGET FIELD OF VRBLK
        !          7839: *
        !          7840: {B$VRA{ENT{BL$$I{{{ENTRY POINT
        !          7841: {{MOV{R9{R10{{COPY NAME BASE (VRGET = 0)
        !          7842: {{MOV{#4*VRVAL{R6{{SET NAME OFFSET
        !          7843: {{JSR{ACESS{{{ACCESS VALUE
        !          7844: {{PPM{EXFAL{{{FAIL IF ACCESS FAILS
        !          7845: {{BRN{EXIXR{{{ELSE EXIT WITH RESULT IN XR
        !          7846: {{EJC{{{{
        !          7847: *
        !          7848: *      VRBLK (CONTINUED)
        !          7849: *
        !          7850: *      ENTRY FOR VRSTO (ERROR CASE. THIS ROUTINE IS CALLED FROM
        !          7851: *      THE EXECUTED CODE FOR AN ATTEMPT TO MODIFY THE VALUE
        !          7852: *      OF A PROTECTED (PATTERN VALUED) NATURAL VARIABLE.
        !          7853: *
        !          7854: {B$VRE{ENT{{{{ENTRY POINT
        !          7855: {{ERB{042{ATTEMPT{{TO CHANGE VALUE OF PROTECTED VARIABLE
        !          7856: {{EJC{{{{
        !          7857: *
        !          7858: *      VRBLK (CONTINUED)
        !          7859: *
        !          7860: *      ENTRY FOR VRTRA (UNTRAPPED CASE). THIS ROUTINE IS CALLED
        !          7861: *      FROM THE EXECUTED CODE TO TRANSFER TO A LABEL.
        !          7862: *
        !          7863: *      (XR)                  POINTER TO VRTRA FIELD OF VRBLK
        !          7864: *
        !          7865: {B$VRG{ENT{{{{ENTRY POINT
        !          7866: {{MOV{4*VRLBO(R9){R9{{LOAD CODE POINTER
        !          7867: {{MOV{(R9){R10{{LOAD ENTRY ADDRESS
        !          7868: {{BRI{R10{{{JUMP TO ROUTINE FOR NEXT CODE WORD
        !          7869: {{EJC{{{{
        !          7870: *
        !          7871: *      VRBLK (CONTINUED)
        !          7872: *
        !          7873: *      ENTRY FOR VRGET (UNTRAPPED CASE). THIS ROUTINE IS CALLED
        !          7874: *      FROM THE GENERATED CODE TO LOAD THE VALUE OF A VARIABLE.
        !          7875: *
        !          7876: *      (XR)                  POINTS TO VRGET FIELD OF VRBLK
        !          7877: *
        !          7878: {B$VRL{ENT{{{{ENTRY POINT
        !          7879: {{MOV{4*VRVAL(R9){-(SP){{LOAD VALUE ONTO STACK (VRGET = 0)
        !          7880: {{BRN{EXITS{{{OBEY NEXT CODE WORD
        !          7881: {{EJC{{{{
        !          7882: *
        !          7883: *      VRBLK (CONTINUED)
        !          7884: *
        !          7885: *      ENTRY FOR VRSTO (UNTRAPPED CASE). THIS ROUTINE IS CALLED
        !          7886: *      FROM THE GENERATED CODE TO STORE THE VALUE OF A VARIABLE.
        !          7887: *
        !          7888: *      (XR)                  POINTER TO VRSTO FIELD OF VRBLK
        !          7889: *
        !          7890: {B$VRS{ENT{{{{ENTRY POINT
        !          7891: {{MOV{(SP){4*VRVLO(R9){{STORE VALUE, LEAVE ON STACK
        !          7892: {{BRN{EXITS{{{OBEY NEXT CODE WORD
        !          7893: {{EJC{{{{
        !          7894: *
        !          7895: *      VRBLK (CONTINUED)
        !          7896: *
        !          7897: *      VRTRA (TRAPPED CASE). THIS ROUTINE IS CALLED FROM THE
        !          7898: *      GENERATED CODE TO TRANSFER TO A LABEL WHEN A LABEL
        !          7899: *      TRACE IS CURRENTLY ACTIVE.
        !          7900: *
        !          7901: {B$VRT{ENT{{{{ENTRY POINT
        !          7902: {{SUB{#4*VRTRA{R9{{POINT BACK TO START OF VRBLK
        !          7903: {{MOV{R9{R10{{COPY VRBLK POINTER
        !          7904: {{MOV{#4*VRVAL{R6{{SET NAME OFFSET
        !          7905: {{MOV{4*VRLBL(R10){R9{{LOAD POINTER TO TRBLK
        !          7906: {{BZE{KVTRA{BVRT2{{JUMP IF TRACE IS OFF
        !          7907: {{DCV{KVTRA{{{ELSE DECREMENT TRACE COUNT
        !          7908: {{BZE{4*TRFNC(R9){BVRT1{{JUMP IF PRINT TRACE CASE
        !          7909: {{JSR{TRXEQ{{{ELSE EXECUTE FULL TRACE
        !          7910: {{BRN{BVRT2{{{MERGE TO JUMP TO LABEL
        !          7911: *
        !          7912: *      HERE FOR PRINT TRACE -- PRINT COLON ( LABEL NAME )
        !          7913: *
        !          7914: {BVRT1{JSR{PRTSN{{{PRINT STATEMENT NUMBER
        !          7915: {{MOV{R10{R9{{COPY VRBLK POINTER
        !          7916: {{MOV{#CH$CL{R6{{COLON
        !          7917: {{JSR{PRTCH{{{PRINT IT
        !          7918: {{MOV{#CH$PP{R6{{LEFT PAREN
        !          7919: {{JSR{PRTCH{{{PRINT IT
        !          7920: {{JSR{PRTVN{{{PRINT LABEL NAME
        !          7921: {{MOV{#CH$RP{R6{{RIGHT PAREN
        !          7922: {{JSR{PRTCH{{{PRINT IT
        !          7923: {{JSR{PRTNL{{{TERMINATE LINE
        !          7924: {{MOV{4*VRLBL(R10){R9{{POINT BACK TO TRBLK
        !          7925: *
        !          7926: *      MERGE HERE TO JUMP TO LABEL
        !          7927: *
        !          7928: {BVRT2{MOV{4*TRLBL(R9){R9{{LOAD POINTER TO ACTUAL CODE
        !          7929: {{BRI{(R9){{{EXECUTE STATEMENT AT LABEL
        !          7930: {{EJC{{{{
        !          7931: *
        !          7932: *      VRBLK (CONTINUED)
        !          7933: *
        !          7934: *      ENTRY FOR VRSTO (TRAPPED CASE). THIS ROUTINE IS CALLED
        !          7935: *      FROM THE GENERATED CODE TO STORE THE VALUE OF A VARIABLE.
        !          7936: *      THIS ENTRY IS USED WHEN A VALUE TRACE OR OUTPUT
        !          7937: *      ASSOCIATION IS CURRENTLY ACTIVE.
        !          7938: *
        !          7939: *      (XR)                  POINTER TO VRSTO FIELD OF VRBLK
        !          7940: *
        !          7941: {B$VRV{ENT{{{{ENTRY POINT
        !          7942: {{MOV{(SP){R7{{LOAD VALUE (LEAVE COPY ON STACK)
        !          7943: {{SUB{#4*VRSTO{R9{{POINT TO VRBLK
        !          7944: {{MOV{R9{R10{{COPY VRBLK POINTER
        !          7945: {{MOV{#4*VRVAL{R6{{SET OFFSET
        !          7946: {{JSR{ASIGN{{{CALL ASSIGNMENT ROUTINE
        !          7947: {{PPM{EXFAL{{{FAIL IF ASSIGNMENT FAILS
        !          7948: {{BRN{EXITS{{{ELSE RETURN WITH RESULT ON STACK
        !          7949: {{EJC{{{{
        !          7950: *
        !          7951: *      XNBLK
        !          7952: *
        !          7953: *      THE ROUTINE FOR AN XNBLK IS NEVER EXECUTED
        !          7954: *
        !          7955: {B$XNT{ENT{BL$XN{{{ENTRY POINT (XNBLK)
        !          7956: {{EJC{{{{
        !          7957: *
        !          7958: *      XRBLK
        !          7959: *
        !          7960: *      THE ROUTINE FOR AN XRBLK IS NEVER EXECUTED
        !          7961: *
        !          7962: {B$XRT{ENT{BL$XR{{{ENTRY POINT (XRBLK)
        !          7963: *
        !          7964: *      MARK ENTRY ADDRESS PAST LAST BLOCK ACTION ROUTINE
        !          7965: *
        !          7966: {B$YYY{ENT{BL$$I{{{LAST BLOCK ROUTINE ENTRY POINT
        !          7967: {{TTL{S{{{P I T B O L -- PATTERN MATCHING ROUTINES
        !          7968: *
        !          7969: *      THE FOLLOWING SECTION CONSISTS OF THE PATTERN MATCHING
        !          7970: *      ROUTINES. ALL PATTERN NODES CONTAIN A POINTER (PCODE)
        !          7971: *      TO ONE OF THE ROUTINES IN THIS SECTION (P$XXX).
        !          7972: *
        !          7973: *      NOTE THAT THIS SECTION FOLLOWS THE B$XXX ROUTINES TO
        !          7974: *      ENABLE A FAST TEST FOR THE PATTERN DATATYPE.
        !          7975: *
        !          7976: {P$AAA{ENT{BL$$I{{{ENTRY TO MARK FIRST PATTERN
        !          7977: *
        !          7978: *
        !          7979: *      THE ENTRY CONDITIONS TO THE MATCH ROUTINE ARE AS FOLLOWS
        !          7980: *      (SEE O$PMN, O$PMV, O$PMS AND PROCEDURE MATCH).
        !          7981: *
        !          7982: *      STACK CONTENTS.
        !          7983: *
        !          7984: *                            NAME BASE (O$PMN ONLY)
        !          7985: *                            NAME OFFSET (O$PMN ONLY)
        !          7986: *                            TYPE (0-O$PMN, 1-O$PMV, 2-O$PMS)
        !          7987: *      PMHBS --------------- INITIAL CURSOR (ZERO)
        !          7988: *                            INITIAL NODE POINTER
        !          7989: *      XS ------------------ =NDABO (ANCHORED), =NDUNA (UNANCH)
        !          7990: *
        !          7991: *      REGISTER VALUES.
        !          7992: *
        !          7993: *           (XS)             SET AS SHOWN IN STACK DIAGRAM
        !          7994: *           (XR)             POINTER TO INITIAL PATTERN NODE
        !          7995: *           (WB)             INITIAL CURSOR (ZERO)
        !          7996: *
        !          7997: *      GLOBAL PATTERN VALUES
        !          7998: *
        !          7999: *           R$PMS            POINTER TO SUBJECT STRING SCBLK
        !          8000: *           PMSSL            LENGTH OF SUBJECT STRING IN CHARS
        !          8001: *           PMDFL            DOT FLAG, INITIALLY ZERO
        !          8002: *           PMHBS            SET AS SHOWN IN STACK DIAGRAM
        !          8003: *
        !          8004: *      CONTROL IS PASSED BY BRANCHING THROUGH THE PCODE
        !          8005: *      FIELD OF THE INITIAL PATTERN NODE (BRI (XR)).
        !          8006: {{EJC{{{{
        !          8007: *
        !          8008: *      DESCRIPTION OF ALGORITHM
        !          8009: *
        !          8010: *      A PATTERN STRUCTURE IS REPRESENTED AS A LINKED GRAPH
        !          8011: *      OF NODES WITH THE FOLLOWING STRUCTURE.
        !          8012: *
        !          8013: *           +------------------------------------+
        !          8014: *           I                PCODE               I
        !          8015: *           +------------------------------------+
        !          8016: *           I                PTHEN               I
        !          8017: *           +------------------------------------+
        !          8018: *           I                PARM1               I
        !          8019: *           +------------------------------------+
        !          8020: *           I                PARM2               I
        !          8021: *           +------------------------------------+
        !          8022: *
        !          8023: *      PCODE IS A POINTER TO THE ROUTINE WHICH WILL PERFORM
        !          8024: *      THE MATCH OF THIS PARTICULAR NODE TYPE.
        !          8025: *
        !          8026: *      PTHEN IS A POINTER TO THE SUCCESSOR NODE. I.E. THE NODE
        !          8027: *      TO BE MATCHED IF THE ATTEMPT TO MATCH THIS NODE SUCCEEDS.
        !          8028: *      IF THIS IS THE LAST NODE OF THE PATTERN PTHEN POINTS
        !          8029: *      TO THE DUMMY NODE NDNTH WHICH INITIATES PATTERN EXIT.
        !          8030: *
        !          8031: *      PARM1, PARM2 ARE PARAMETERS WHOSE USE VARIES WITH THE
        !          8032: *      PARTICULAR NODE. THEY ARE ONLY PRESENT IF REQUIRED.
        !          8033: *
        !          8034: *      ALTERNATIVES ARE HANDLED WITH THE SPECIAL ALTERNATIVE
        !          8035: *      NODE WHOSE PARAMETER POINTS TO THE NODE TO BE MATCHED
        !          8036: *      IF THERE IS A FAILURE ON THE SUCCESSOR PATH.
        !          8037: *
        !          8038: *      THE FOLLOWING EXAMPLE ILLUSTRATES THE MANNER IN WHICH
        !          8039: *      THE STRUCTURE IS BUILT UP. THE PATTERN IS
        !          8040: *
        !          8041: *      (A / B / C) (D / E)   WHERE / IS ALTERNATION
        !          8042: *
        !          8043: *      IN THE DIAGRAM, THE NODE MARKED + REPRESENTS AN
        !          8044: *      ALTERNATIVE NODE AND THE DOTTED LINE FROM A + NODE
        !          8045: *      REPRESENTS THE PARAMETER POINTER TO THE ALTERNATIVE.
        !          8046: *
        !          8047: *      +---+     +---+     +---+     +---+
        !          8048: *      I + I-----I A I-----I + I-----I D I-----
        !          8049: *      +---+     +---+  I  +---+     +---+
        !          8050: *        .              I    .
        !          8051: *        .              I    .
        !          8052: *      +---+     +---+  I  +---+
        !          8053: *      I + I-----I B I--I  I E I-----
        !          8054: *      +---+     +---+  I  +---+
        !          8055: *        .              I
        !          8056: *        .              I
        !          8057: *      +---+            I
        !          8058: *      I C I------------I
        !          8059: *      +---+
        !          8060: {{EJC{{{{
        !          8061: *
        !          8062: *      DURING THE MATCH, THE REGISTERS ARE USED AS FOLLOWS.
        !          8063: *
        !          8064: *      (XR)                  POINTS TO THE CURRENT NODE
        !          8065: *      (XL)                  SCRATCH
        !          8066: *      (XS)                  MAIN STACK POINTER
        !          8067: *      (WB)                  CURSOR (NUMBER OF CHARS MATCHED)
        !          8068: *      (WA,WC)               SCRATCH
        !          8069: *
        !          8070: *      TO KEEP TRACK OF ALTERNATIVES, THE MAIN STACK IS USED AS
        !          8071: *      A HISTORY STACK AND CONTAINS TWO WORD ENTRIES.
        !          8072: *
        !          8073: *      WORD 1                SAVED CURSOR VALUE
        !          8074: *      WORD 2                NODE TO MATCH ON FAILURE
        !          8075: *
        !          8076: *      WHEN A FAILURE OCCURS, THE MOST RECENT ENTRY ON THIS
        !          8077: *      STACK IS POPPED OFF TO RESTORE THE CURSOR AND POINT
        !          8078: *      TO THE NODE TO BE MATCHED AS AN ALTERNATIVE. THE ENTRY
        !          8079: *      AT THE BOTTOM OF THE STACK POINTS TO THE FOLLOWING
        !          8080: *      SPECIAL NODES DEPENDING ON THE SCAN MODE.
        !          8081: *
        !          8082: *      ANCHORED MODE         THE BOTTOM ENTRY POINTS TO THE
        !          8083: *                            SPECIAL NODE NDABO WHICH CAUSES AN
        !          8084: *                            ABORT. THE CURSOR VALUE STORED
        !          8085: *                            WITH THIS ENTRY IS ALWAYS ZERO.
        !          8086: *
        !          8087: *      UNANCHORED MODE       THE BOTTOM ENTRY POINTS TO THE
        !          8088: *                            SPECIAL NODE NDUNA WHICH MOVES THE
        !          8089: *                            ANCHOR POINT AND RESTARTS THE MATCH
        !          8090: *                            THE CURSOR SAVED WITH THIS ENTRY
        !          8091: *                            IS THE NUMBER OF CHARACTERS WHICH
        !          8092: *                            LIE BEFORE THE INITIAL ANCHOR POINT
        !          8093: *                            (I.E. THE NUMBER OF ANCHOR MOVES).
        !          8094: *                            THIS ENTRY IS THREE WORDS LONG AND
        !          8095: *                            ALSO CONTAINS THE INITIAL PATTERN.
        !          8096: *
        !          8097: *      ENTRIES ARE MADE ON THIS HISTORY STACK BY ALTERNATIVE
        !          8098: *      NODES AND BY SOME SPECIAL COMPOUD PATTERNS AS DESCRIBED
        !          8099: *      LATER ON. THE FOLLOWING GLOBAL LOCATIONS ARE USED DURING
        !          8100: *      PATTERN MATCHING.
        !          8101: *
        !          8102: *      R$PMS                 POINTER TO SUBJECT STRING
        !          8103: *      PMSSL                 LENGTH OF SUBJECT STRING
        !          8104: *      PMDFL                 FLAG SET NON-ZERO FOR DOT PATTERNS
        !          8105: *      PMHBS                 BASE PTR FOR CURRENT HISTORY STACK
        !          8106: *
        !          8107: *      THE FOLLOWING EXIT POINTS ARE AVAILABLE TO MATCH ROUTINES
        !          8108: *
        !          8109: *      SUCCP                 SUCCESS IN MATCHING CURRENT NODE
        !          8110: *      FAILP                 FAILURE IN MATCHING CURRENT NODE
        !          8111: {{EJC{{{{
        !          8112: *
        !          8113: *      COMPOUND PATTERNS
        !          8114: *
        !          8115: *      SOME PATTERNS HAVE IMPLICIT ALTERNATIVES AND THEIR
        !          8116: *      REPRESENTATION IN THE PATTERN STRUCTURE CONSISTS OF A
        !          8117: *      LINKED SET OF NODES AS INDICATED BY THESE DIAGRAMS.
        !          8118: *
        !          8119: *      AS BEFORE, THE + REPRESENTS AN ALTERNATIVE NODE AND
        !          8120: *      THE DOTTED LINE FROM A + NODE IS THE PARAMETER POINTER
        !          8121: *      TO THE ALTERNATIVE PATTERN.
        !          8122: *
        !          8123: *      ARB
        !          8124: *      ---
        !          8125: *
        !          8126: *           +---+            THIS NODE (P$ARB) MATCHES NULL
        !          8127: *           I B I-----       AND STACKS CURSOR, SUCCESSOR PTR,
        !          8128: *           +---+            CURSOR (COPY) AND A PTR TO NDARC.
        !          8129: *
        !          8130: *
        !          8131: *
        !          8132: *
        !          8133: *      BAL
        !          8134: *      ---
        !          8135: *
        !          8136: *           +---+            THE P$BAL NODE SCANS A BALANCED
        !          8137: *           I B I-----       STRING AND THEN STACKS A POINTER
        !          8138: *           +---+            TO ITSELF ON THE HISTORY STACK.
        !          8139: {{EJC{{{{
        !          8140: *
        !          8141: *      COMPOUND PATTERN STRUCTURES (CONTINUED)
        !          8142: *
        !          8143: *
        !          8144: *      ARBNO
        !          8145: *      -----
        !          8146: *
        !          8147: *           +---+            THIS ALTERNATIVE NODE MATCHES NULL
        !          8148: *      +----I + I-----       THE FIRST TIME AND STACKS A POINTER
        !          8149: *      I    +---+            TO THE ARGUMENT PATTERN X.
        !          8150: *      I      .
        !          8151: *      I      .
        !          8152: *      I    +---+            NODE (P$ABA) TO STACK CURSOR
        !          8153: *      I    I A I            AND HISTORY STACK BASE PTR.
        !          8154: *      I    +---+
        !          8155: *      I      I
        !          8156: *      I      I
        !          8157: *      I    +---+            THIS IS THE ARGUMENT PATTERN. AS
        !          8158: *      I    I X I            INDICATED, THE SUCCESSOR OF THE
        !          8159: *      I    +---+            PATTERN IS THE P$ABC NODE
        !          8160: *      I      I
        !          8161: *      I      I
        !          8162: *      I    +---+            THIS NODE (P$ABC) POPS PMHBS,
        !          8163: *      +----I C I            STACKS OLD PMHBS AND PTR TO NDABD
        !          8164: *           +---+            (UNLESS OPTIMISATION HAS OCCURRED)
        !          8165: *
        !          8166: *      STRUCTURE AND EXECUTION OF THIS PATTERN RESEMBLE THOSE OF
        !          8167: *      RECURSIVE PATTERN MATCHING AND IMMEDIATE ASSIGNMENT.
        !          8168: *      THE ALTERNATIVE NODE AT THE HEAD OF THE STRUCTURE MATCHES
        !          8169: *      NULL INITIALLY BUT ON SUBSEQUENT FAILURE ENSURES ATTEMPT
        !          8170: *      TO MATCH THE ARGUMENT.  BEFORE THE ARGUMENT IS MATCHED
        !          8171: *      P$ABA STACKS THE CURSOR,PMHBS AND A PTR TO P$ABB.  IF
        !          8172: *      THE ARGUMENT CANT BE MATCHED , P$ABB REMOVES THIS SPECIAL
        !          8173: *      STACK ENTRY AND FAILS.
        !          8174: *      IF ARGUMENT IS MATCHED , P$ABC RESTORES THE OUTER PMHBS
        !          8175: *      VALUE (SAVED BY P$ABA) .  THEN IF THE ARGUMENT HAS LEFT
        !          8176: *      ALTERNATIVES ON STACK IT STACKS THE INNER VALUE OF PMHBS
        !          8177: *      AND A PTR TO NDABD. IF ARGUMENT LEFT NOTHING ON THE STACK
        !          8178: *      IT OPTIMISES BY REMOVING ITEMS STACKED BY P$ABA.  FINALLY
        !          8179: *      A CHECK IS MADE THAT ARGUMENT MATCHED MORE THAN THE NULL
        !          8180: *      STRING (CHECK IS INTENDED TO PREVENT USELESS LOOPING).
        !          8181: *      IF SO THE SUCCESSOR IS AGAIN THE ALTERNATIVE NODE AT THE
        !          8182: *      HEAD OF THE STRUCTURE , ENSURING A POSSIBLE EXTRA ATTEMPT
        !          8183: *      TO MATCH THE ARG IF NECESSARY.  IF NOT , THE SUCCESSOR TO
        !          8184: *      ALTERNATIVE IS TAKEN SO AS TO TERMINATE THE LOOP.  P$ABD
        !          8185: *      RESTORES INNER PMHBS PTR AND FAILS , THUS TRYING TO MATCH
        !          8186: *      ALTERNATIVES LEFT BY THE ARBNO ARGUMENT.
        !          8187: {{EJC{{{{
        !          8188: *
        !          8189: *      COMPOUND PATTERN STRUCTURES (CONTINUED)
        !          8190: *
        !          8191: *      BREAKX
        !          8192: *      ------
        !          8193: *
        !          8194: *           +---+            THIS NODE IS A BREAK NODE FOR
        !          8195: *      +----I B I            THE ARGUMENT TO BREAKX, IDENTICAL
        !          8196: *      I    +---+            TO AN ORDINARY BREAK NODE.
        !          8197: *      I      I
        !          8198: *      I      I
        !          8199: *      I    +---+            THIS ALTERNATIVE NODE STACKS A
        !          8200: *      I    I + I-----       POINTER TO THE BREAKX NODE TO
        !          8201: *      I    +---+            ALLOW FOR SUBSEQUENT FAILURE
        !          8202: *      I      .
        !          8203: *      I      .
        !          8204: *      I    +---+            THIS IS THE BREAKX NODE ITSELF. IT
        !          8205: *      +----I X I            MATCHES ONE CHARACTER AND THEN
        !          8206: *           +---+            PROCEEDS BACK TO THE BREAK NODE.
        !          8207: *
        !          8208: *
        !          8209: *
        !          8210: *
        !          8211: *      FENCE
        !          8212: *      -----
        !          8213: *
        !          8214: *           +---+            THE FENCE NODE MATCHES NULL AND
        !          8215: *           I F I-----       STACKS A POINTER TO NODE NDABO TO
        !          8216: *           +---+            ABORT ON A SUBSEQUENT REMATCH
        !          8217: *
        !          8218: *
        !          8219: *
        !          8220: *
        !          8221: *      SUCCEED
        !          8222: *      -------
        !          8223: *
        !          8224: *           +---+            THE NODE FOR SUCCEED MATCHES NULL
        !          8225: *           I S I-----       AND STACKS A POINTER TO ITSELF
        !          8226: *           +---+            TO REPEAT THE MATCH ON A FAILURE.
        !          8227: {{EJC{{{{
        !          8228: *
        !          8229: *      COMPOUND PATTERNS (CONTINUED)
        !          8230: *
        !          8231: *      BINARY DOT (PATTERN ASSIGNMENT)
        !          8232: *      -------------------------------
        !          8233: *
        !          8234: *           +---+            THIS NODE (P$PAA) SAVES THE CURRENT
        !          8235: *           I A I            CURSOR AND A POINTER TO THE
        !          8236: *           +---+            SPECIAL NODE NDPAB ON THE STACK.
        !          8237: *             I
        !          8238: *             I
        !          8239: *           +---+            THIS IS THE STRUCTURE FOR THE
        !          8240: *           I X I            PATTERN LEFT ARGUMENT OF THE
        !          8241: *           +---+            PATTERN ASSIGNMENT CALL.
        !          8242: *             I
        !          8243: *             I
        !          8244: *           +---+            THIS NODE (P$PAC) SAVES THE CURSOR,
        !          8245: *           I C I-----       A PTR TO ITSELF, THE CURSOR (COPY)
        !          8246: *           +---+            AND A PTR TO NDPAD ON THE STACK.
        !          8247: *
        !          8248: *
        !          8249: *      THE FUNCTION OF THE MATCH ROUTINE FOR NDPAB (P$PAB)
        !          8250: *      IS SIMPLY TO UNSTACK ITSELF AND FAIL BACK ONTO THE STACK.
        !          8251: *
        !          8252: *      THE MATCH ROUTINE FOR P$PAC ALSO SETS THE GLOBAL PATTERN
        !          8253: *      FLAG PMDFL NON-ZERO TO INDICATE THAT PATTERN ASSIGNMENTS
        !          8254: *      MAY HAVE OCCURED IN THE PATTERN MATCH
        !          8255: *
        !          8256: *      IF PMDFL IS SET AT THE END OF THE MATCH (SEE P$NTH), THE
        !          8257: *      HISTORY STACK IS SCANNED FOR MATCHING NDPAB-NDPAD PAIRS
        !          8258: *      AND THE CORRESPONDING PATTERN ASSIGNMENTS ARE EXECUTED.
        !          8259: *
        !          8260: *      THE FUNCTION OF THE MATCH ROUTINE FOR NDPAD (P$PAD)
        !          8261: *      IS SIMPLY TO REMOVE ITS ENTRY FROM THE STACK AND FAIL.
        !          8262: *      THIS INCLUDES REMOVING THE SPECIAL NODE POINTER STORED
        !          8263: *      IN ADDITION TO THE STANDARD TWO ENTRIES ON THE STACK.
        !          8264: {{EJC{{{{
        !          8265: *
        !          8266: *      COMPOUNT PATTERN STRUCTURES (CONTINUED)
        !          8267: *
        !          8268: *      FENCE (FUNCTION)
        !          8269: *      ----------------
        !          8270: *
        !          8271: *           +---+            THIS NODE (P$FNA) SAVES THE
        !          8272: *           I A I            CURRENT HISTORY STACK AND A
        !          8273: *           +---+            POINTER TO NDFNB ON THE STACK.
        !          8274: *             I
        !          8275: *             I
        !          8276: *           +---+            THIS IS THE PATTERN STRUCTURE
        !          8277: *           I X I            GIVEN AS THE ARGUMENT TO THE
        !          8278: *           +---+            FENCE FUNCTION.
        !          8279: *             I
        !          8280: *             I
        !          8281: *           +---+            THIS NODE P$FNC RESTORES THE OUTER
        !          8282: *           I C I            HISTORY STACK PTR SAVED IN P$FNA,
        !          8283: *           +---+            AND STACKS THE INNER STACK BASE
        !          8284: *                            PTR AND A POINTER TO NDFND ON THE
        !          8285: *                            STACK.
        !          8286: *
        !          8287: *      NDFNB (F$FNB) SIMPLY IS THE FAILURE EXIT FOR PATTERN
        !          8288: *      ARGUMENT FAILURE, AND IT POPS ITSELF AND FAILS ONTO THE
        !          8289: *      STACK.
        !          8290: *
        !          8291: *      THE MATCH ROUTINE P$FNC ALLOWS FOR AN OPTIMIZATION WHEN
        !          8292: *      THE FENCE PATTERN LEAVES NO ALTERNATIVES.  IN THIS CASE,
        !          8293: *      THE NDFNB ENTRY IS POPPED, AND THE MATCH CONTINUES.
        !          8294: *
        !          8295: *      NDFND (P$FND) IS ENTERED WHEN THE PATTERN FAILS AFTER
        !          8296: *      GOING THROUGH A NON-OPTIMIZED P$FNC, AND IT POPS THE
        !          8297: *      STACK BACK PAST THE INNTER STACK BASE CREATED BY P$FNA
        !          8298: {{EJC{{{{
        !          8299: *
        !          8300: *      COMPOUND PATTERNS (CONTINUED)
        !          8301: *
        !          8302: *      EXPRESSION PATTERNS (RECURSIVE PATTERN MATCHES)
        !          8303: *      -----------------------------------------------
        !          8304: *
        !          8305: *      INITIAL ENTRY FOR A PATTERN NODE IS TO THE ROUTINE P$EXA.
        !          8306: *      IF THE EVALUATED RESULT OF THE EXPRESSION IS ITSELF A
        !          8307: *      PATTERN, THEN THE FOLLOWING STEPS ARE TAKEN TO ARRANGE
        !          8308: *      FOR PROPER RECURSIVE PROCESSING.
        !          8309: *
        !          8310: *      1)   A POINTER TO THE CURRENT NODE (THE P$EXA NODE) IS
        !          8311: *           STORED ON THE HISTORY STACK WITH A DUMMY CURSOR.
        !          8312: *
        !          8313: *      2)   A SPECIAL HISTORY STACK ENTRY IS MADE IN WHICH THE
        !          8314: *           NODE POINTER POINTS TO NDEXB, AND THE CURSOR VALUE
        !          8315: *           IS THE SAVED VALUE OF PMHBS ON ENTRY TO THIS NODE.
        !          8316: *           THE MATCH ROUTINE FOR NDEXB (P$EXB) RESTORES PMHBS
        !          8317: *           FROM THIS CURSOR ENTRY, POPS OFF THE P$EXA NODE
        !          8318: *           POINTER AND FAILS.
        !          8319: *
        !          8320: *      3)   THE RESULTING HISTORY STACK POINTER IS SAVED IN
        !          8321: *           PMHBS TO ESTABLISH A NEW LEVEL OF HISTORY STACK.
        !          8322: *
        !          8323: *      AFTER MATCHING A PATTERN, THE END OF MATCH ROUTINE GETS
        !          8324: *      CONTROL (P$NTH). THIS ROUTINE PROCEEDS AS FOLLOWS.
        !          8325: *
        !          8326: *      1)   LOAD THE CURRENT VALUE OF PMHBS AND RECOGNIZE THE
        !          8327: *           OUTER LEVEL CASE BY THE FACT THAT THE ASSOCIATED
        !          8328: *           CURSOR IN THIS CASE IS THE PATTERN MATCH TYPE CODE
        !          8329: *           WHICH IS LESS THAN 3. TERMINATE THE MATCH IN THIS
        !          8330: *           CASE AND CONTINUE EXECUTION OF THE PROGRAM.
        !          8331: *
        !          8332: *      2)   OTHERWISE MAKE A SPECIAL HISTORY STACK ENTRY IN
        !          8333: *           WHICH THE NODE POINTER POINTS TO THE SPECIAL NODE
        !          8334: *           NDEXC AND THE CURSOR IS THE CURRENT VALUE OF PMHBS.
        !          8335: *           THE MATCH ROUTINE FOR NDEXC (P$EXC) RESETS PMHBS TO
        !          8336: *           THIS (INNER) VALUE AND AND THEN FAILS.
        !          8337: *
        !          8338: *      3)   USING THE HISTORY STACK ENTRY MADE ON STARTING THE
        !          8339: *           EXPRESSION (ACCESSIBLE WITH THE CURRENT VALUE OF
        !          8340: *           PMHBS), RESTORE THE P$EXA NODE POINTER AND THE OLD
        !          8341: *           PMHBS SETTING. TAKE THE SUCCESSOR AND CONTINUE.
        !          8342: *
        !          8343: *      AN OPTIMIZATION IS POSSIBLE IF THE EXPRESSION PATTERN
        !          8344: *      MAKES NO ENTRIES ON THE HISTORY STACK. IN THIS CASE,
        !          8345: *      INSTEAD OF BUILDING THE P$EXC NODE IN STEP 2, IT IS MORE
        !          8346: *      EFFICIENT TO SIMPLY POP OFF THE P$EXB ENTRY AND ITS
        !          8347: *      ASSOCIATED NODE POINTER. THE EFFECT IS THE SAME.
        !          8348: {{EJC{{{{
        !          8349: *
        !          8350: *      COMPOUND PATTERNS (CONTINUED)
        !          8351: *
        !          8352: *      BINARY DOLLAR (IMMEDIATE ASSIGNMENT)
        !          8353: *      ------------------------------------
        !          8354: *
        !          8355: *           +---+            THIS NODE (P$IMA) STACKS THE CURSOR
        !          8356: *           I A I            PMHBS AND A PTR TO NDIMB AND RESETS
        !          8357: *           +---+            THE STACK PTR PMHBS.
        !          8358: *             I
        !          8359: *             I
        !          8360: *           +---+            THIS IS THE LEFT STRUCTURE FOR THE
        !          8361: *           I X I            PATTERN LEFT ARGUMENT OF THE
        !          8362: *           +---+            IMMEDIATE ASSIGNMENT CALL.
        !          8363: *             I
        !          8364: *             I
        !          8365: *           +---+            THIS NODE (P$IMC) PERFORMS THE
        !          8366: *           I C I-----       ASSIGNMENT, POPS PMHBS AND STACKS
        !          8367: *           +---+            THE OLD PMHBS AND A PTR TO NDIMD.
        !          8368: *
        !          8369: *
        !          8370: *      THE STRUCTURE AND EXECUTION OF THIS PATTERN ARE SIMILAR
        !          8371: *      TO THOSE OF THE RECURSIVE EXPRESSION PATTERN MATCHING.
        !          8372: *
        !          8373: *      THE MATCH ROUTINE FOR NDIMB (P$IMB) RESTORES THE OUTER
        !          8374: *      LEVEL VALUE OF PMHBS, UNSTACKS THE SAVED CURSOR AND FAILS
        !          8375: *
        !          8376: *      THE MATCH ROUTINE P$IMC USES THE CURRENT VALUE OF PMHBS
        !          8377: *      TO LOCATE THE P$IMB ENTRY. THIS ENTRY IS USED TO MAKE
        !          8378: *      THE ASSIGNMENT AND RESTORE THE OUTER LEVEL VALUE OF
        !          8379: *      PMHBS. FINALLY, THE INNER LEVEL VALUE OF PMHBS AND A
        !          8380: *      POINTER TO THE SPECIAL NODE NDIMD ARE STACKED.
        !          8381: *
        !          8382: *      THE MATCH ROUTINE FOR NDIMD (P$IMD) RESTORES THE INNER
        !          8383: *      LEVEL VALUE OF PMHBS AND FAILS BACK INTO THE STACK.
        !          8384: *
        !          8385: *      AN OPTIMIZATION OCCURS IF THE INNER PATTERN MAKES NO
        !          8386: *      ENTRIES ON THE HISTORY STACK. IN THIS CASE, P$IMC POPS
        !          8387: *      THE P$IMB ENTRY INSTEAD OF MAKING A P$IMD ENTRY.
        !          8388: {{EJC{{{{
        !          8389: *
        !          8390: *      ARBNO
        !          8391: *
        !          8392: *      SEE COMPOUND PATTERNS SECTION FOR STUCTURE AND
        !          8393: *      ALGORITHM FOR MATCHING THIS NODE TYPE.
        !          8394: *
        !          8395: *      NO PARAMETERS
        !          8396: *
        !          8397: {P$ABA{ENT{BL$P0{{{P0BLK
        !          8398: {{MOV{R7{-(SP){{STACK CURSOR
        !          8399: {{MOV{R9{-(SP){{STACK DUMMY NODE PTR
        !          8400: {{MOV{PMHBS{-(SP){{STACK OLD STACK BASE PTR
        !          8401: {{MOV{#NDABB{-(SP){{STACK PTR TO NODE NDABB
        !          8402: {{MOV{SP{PMHBS{{STORE NEW STACK BASE PTR
        !          8403: {{BRN{SUCCP{{{SUCCEED
        !          8404: {{EJC{{{{
        !          8405: *
        !          8406: *      ARBNO (REMOVE P$ABA SPECIAL STACK ENTRY)
        !          8407: *
        !          8408: *      NO PARAMETERS (DUMMY PATTERN)
        !          8409: *
        !          8410: {P$ABB{ENT{{{{ENTRY POINT
        !          8411: {{MOV{R7{PMHBS{{RESTORE HISTORY STACK BASE PTR
        !          8412: {{BRN{FLPOP{{{FAIL AND POP DUMMY NODE PTR
        !          8413: {{EJC{{{{
        !          8414: *
        !          8415: *      ARBNO (CHECK IF ARG MATCHED NULL STRING)
        !          8416: *
        !          8417: *      NO PARAMETERS (DUMMY PATTERN)
        !          8418: *
        !          8419: {P$ABC{ENT{BL$P0{{{P0BLK
        !          8420: {{MOV{PMHBS{R10{{KEEP P$ABB STACK BASE
        !          8421: {{MOV{4*3(R10){R6{{LOAD INITIAL CURSOR
        !          8422: {{MOV{4*1(R10){PMHBS{{RESTORE OUTER STACK BASE PTR
        !          8423: {{BEQ{R10{SP{PABC1{JUMP IF NO HISTORY STACK ENTRIES
        !          8424: {{MOV{R10{-(SP){{ELSE SAVE INNER PMHBS ENTRY
        !          8425: {{MOV{#NDABD{-(SP){{STACK PTR TO SPECIAL NODE NDABD
        !          8426: {{BRN{PABC2{{{MERGE
        !          8427: *
        !          8428: *      OPTIMISE CASE OF NO EXTRA ENTRIES ON STACK FROM ARBNO ARG
        !          8429: *
        !          8430: {PABC1{ADD{#4*NUM04{SP{{REMOVE NDABB ENTRY AND CURSOR
        !          8431: *
        !          8432: *      MERGE TO CHECK FOR MATCHING OF NULL STRING
        !          8433: *
        !          8434: {PABC2{BNE{R6{R7{SUCCP{ALLOW FURTHER ATTEMPT IF NON-NULL
        !          8435: {{MOV{4*PTHEN(R9){R9{{BYPASS ALTERNATIVE NODE SO AS TO ..
        !          8436: {{BRN{SUCCP{{{... REFUSE FURTHER MATCH ATTEMPTS
        !          8437: {{EJC{{{{
        !          8438: *
        !          8439: *      ARBNO (TRY FOR ALTERNATIVES IN ARBNO ARGUMENT)
        !          8440: *
        !          8441: *      NO PARAMETERS (DUMMY PATTERN)
        !          8442: *
        !          8443: {P$ABD{ENT{{{{ENTRY POINT
        !          8444: {{MOV{R7{PMHBS{{RESTORE INNER STACK BASE PTR
        !          8445: {{BRN{FAILP{{{AND FAIL
        !          8446: {{EJC{{{{
        !          8447: *
        !          8448: *      ABORT
        !          8449: *
        !          8450: *      NO PARAMETERS
        !          8451: *
        !          8452: {P$ABO{ENT{BL$P0{{{P0BLK
        !          8453: {{BRN{EXFAL{{{SIGNAL STATEMENT FAILURE
        !          8454: {{EJC{{{{
        !          8455: *
        !          8456: *      ALTERNATION
        !          8457: *
        !          8458: *      PARM1                 ALTERNATIVE NODE
        !          8459: *
        !          8460: {P$ALT{ENT{BL$P1{{{P1BLK
        !          8461: {{MOV{R7{-(SP){{STACK CURSOR
        !          8462: {{MOV{4*PARM1(R9){-(SP){{STACK POINTER TO ALTERNATIVE
        !          8463: {{CHK{{{{CHECK FOR STACK OVERFLOW
        !          8464: {{BRN{SUCCP{{{IF ALL OK, THEN SUCCEED
        !          8465: {{EJC{{{{
        !          8466: *
        !          8467: *      ANY (ONE CHARACTER ARGUMENT) (1-CHAR STRING ALSO)
        !          8468: *
        !          8469: *      PARM1                 CHARACTER ARGUMENT
        !          8470: *
        !          8471: {P$ANS{ENT{BL$P1{{{P1BLK
        !          8472: {{BEQ{R7{PMSSL{FAILP{FAIL IF NO CHARS LEFT
        !          8473: {{MOV{R$PMS{R10{{ELSE POINT TO SUBJECT STRING
        !          8474: {{PLC{R10{R7{{POINT TO CURRENT CHARACTER
        !          8475: {{LCH{R6{(R10){{LOAD CURRENT CHARACTER
        !          8476: {{BNE{R6{4*PARM1(R9){FAILP{FAIL IF NO MATCH
        !          8477: {{ICV{R7{{{ELSE BUMP CURSOR
        !          8478: {{BRN{SUCCP{{{AND SUCCEED
        !          8479: {{EJC{{{{
        !          8480: *
        !          8481: *      ANY (MULTI-CHARACTER ARGUMENT CASE)
        !          8482: *
        !          8483: *      PARM1                 POINTER TO CTBLK
        !          8484: *      PARM2                 BIT MASK TO SELECT BIT IN CTBLK
        !          8485: *
        !          8486: {P$ANY{ENT{BL$P2{{{P2BLK
        !          8487: *
        !          8488: *      EXPRESSION ARGUMENT CASE MERGES HERE
        !          8489: *
        !          8490: {PANY1{BEQ{R7{PMSSL{FAILP{FAIL IF NO CHARACTERS LEFT
        !          8491: {{MOV{R$PMS{R10{{ELSE POINT TO SUBJECT STRING
        !          8492: {{PLC{R10{R7{{GET CHAR PTR TO CURRENT CHARACTER
        !          8493: {{LCH{R6{(R10){{LOAD CURRENT CHARACTER
        !          8494: {{MOV{4*PARM1(R9){R10{{POINT TO CTBLK
        !          8495: {{WTB{R6{{{CHANGE TO BYTE OFFSET
        !          8496: {{ADD{R6{R10{{POINT TO ENTRY IN CTBLK
        !          8497: {{MOV{4*CTCHS(R10){R6{{LOAD WORD FROM CTBLK
        !          8498: {{ANB{4*PARM2(R9){R6{{AND WITH SELECTED BIT
        !          8499: {{ZRB{R6{FAILP{{FAIL IF NO MATCH
        !          8500: {{ICV{R7{{{ELSE BUMP CURSOR
        !          8501: {{BRN{SUCCP{{{AND SUCCEED
        !          8502: {{EJC{{{{
        !          8503: *
        !          8504: *      ANY (EXPRESSION ARGUMENT)
        !          8505: *
        !          8506: *      PARM1                 EXPRESSION POINTER
        !          8507: *
        !          8508: {P$AYD{ENT{BL$P1{{{P1BLK
        !          8509: {{JSR{EVALS{{{EVALUATE STRING ARGUMENT
        !          8510: {{ERR{043{ANY{{EVALUATED ARGUMENT IS NOT STRING
        !          8511: {{PPM{FAILP{{{FAIL IF EVALUATION FAILURE
        !          8512: {{PPM{PANY1{{{MERGE MULTI-CHAR CASE IF OK
        !          8513: {{EJC{{{{
        !          8514: *
        !          8515: *      P$ARB                 INITIAL ARB MATCH
        !          8516: *
        !          8517: *      NO PARAMETERS
        !          8518: *
        !          8519: *      THE P$ARB NODE IS PART OF A COMPOUND PATTERN STRUCTURE
        !          8520: *      FOR AN ARB PATTERN (SEE DESCRIPTION OF COMPOUND PATTERNS)
        !          8521: *
        !          8522: {P$ARB{ENT{BL$P0{{{P0BLK
        !          8523: {{MOV{4*PTHEN(R9){R9{{LOAD SUCCESSOR POINTER
        !          8524: {{MOV{R7{-(SP){{STACK DUMMY CURSOR
        !          8525: {{MOV{R9{-(SP){{STACK SUCCESSOR POINTER
        !          8526: {{MOV{R7{-(SP){{STACK CURSOR
        !          8527: {{MOV{#NDARC{-(SP){{STACK PTR TO SPECIAL NODE NDARC
        !          8528: {{BRI{(R9){{{EXECUTE NEXT NODE MATCHING NULL
        !          8529: {{EJC{{{{
        !          8530: *
        !          8531: *      P$ARC                 EXTEND ARB MATCH
        !          8532: *
        !          8533: *      NO PARAMETERS (DUMMY PATTERN)
        !          8534: *
        !          8535: {P$ARC{ENT{{{{ENTRY POINT
        !          8536: {{BEQ{R7{PMSSL{FLPOP{FAIL AND POP STACK TO SUCCESSOR
        !          8537: {{ICV{R7{{{ELSE BUMP CURSOR
        !          8538: {{MOV{R7{-(SP){{STACK UPDATED CURSOR
        !          8539: {{MOV{R9{-(SP){{RESTACK POINTER TO NDARC NODE
        !          8540: {{MOV{4*2(SP){R9{{LOAD SUCCESSOR POINTER
        !          8541: {{BRI{(R9){{{OFF TO REEXECUTE SUCCESSOR NODE
        !          8542: {{EJC{{{{
        !          8543: *
        !          8544: *      BAL
        !          8545: *
        !          8546: *      NO PARAMETERS
        !          8547: *
        !          8548: *      THE P$BAL NODE IS PART OF THE COMPOUND STRUCTURE BUILT
        !          8549: *      FOR BAL (SEE SECTION ON COMPOUND PATTERNS).
        !          8550: *
        !          8551: {P$BAL{ENT{BL$P0{{{P0BLK
        !          8552: {{ZER{R8{{{ZERO PARENTHESES LEVEL COUNTER
        !          8553: {{MOV{R$PMS{R10{{POINT TO SUBJECT STRING
        !          8554: {{PLC{R10{R7{{POINT TO CURRENT CHARACTER
        !          8555: {{BRN{PBAL2{{{JUMP INTO SCAN LOOP
        !          8556: *
        !          8557: *      LOOP TO SCAN OUT CHARACTERS
        !          8558: *
        !          8559: {PBAL1{LCH{R6{(R10)+{{LOAD NEXT CHARACTER, BUMP POINTER
        !          8560: {{ICV{R7{{{PUSH CURSOR FOR CHARACTER
        !          8561: {{BEQ{R6{#CH$PP{PBAL3{JUMP IF LEFT PAREN
        !          8562: {{BEQ{R6{#CH$RP{PBAL4{JUMP IF RIGHT PAREN
        !          8563: {{BZE{R8{PBAL5{{ELSE SUCCEED IF AT OUTER LEVEL
        !          8564: *
        !          8565: *      HERE AFTER PROCESSING ONE CHARACTER
        !          8566: *
        !          8567: {PBAL2{BNE{R7{PMSSL{PBAL1{LOOP BACK UNLESS END OF STRING
        !          8568: {{BRN{FAILP{{{IN WHICH CASE, FAIL
        !          8569: *
        !          8570: *      HERE ON LEFT PAREN
        !          8571: *
        !          8572: {PBAL3{ICV{R8{{{BUMP PAREN LEVEL
        !          8573: {{BRN{PBAL2{{{LOOP BACK TO CHECK END OF STRING
        !          8574: *
        !          8575: *      HERE FOR RIGHT PAREN
        !          8576: *
        !          8577: {PBAL4{BZE{R8{FAILP{{FAIL IF NO MATCHING LEFT PAREN
        !          8578: {{DCV{R8{{{ELSE DECREMENT LEVEL COUNTER
        !          8579: {{BNZ{R8{PBAL2{{LOOP BACK IF NOT AT OUTER LEVEL
        !          8580: *
        !          8581: *      HERE AFTER SUCCESSFULLY SCANNING A BALANCED STRING
        !          8582: *
        !          8583: {PBAL5{MOV{R7{-(SP){{STACK CURSOR
        !          8584: {{MOV{R9{-(SP){{STACK PTR TO BAL NODE FOR EXTEND
        !          8585: {{BRN{SUCCP{{{AND SUCCEED
        !          8586: {{EJC{{{{
        !          8587: *
        !          8588: *      BREAK (EXPRESSION ARGUMENT)
        !          8589: *
        !          8590: *      PARM1                 EXPRESSION POINTER
        !          8591: *
        !          8592: {P$BKD{ENT{BL$P1{{{P1BLK
        !          8593: {{JSR{EVALS{{{EVALUATE STRING EXPRESSION
        !          8594: {{ERR{044{BREAK{{EVALUATED ARGUMENT IS NOT STRING
        !          8595: {{PPM{FAILP{{{FAIL IF EVALUATION FAILS
        !          8596: {{PPM{PBRK1{{{MERGE WITH MULTI-CHAR CASE IF OK
        !          8597: {{EJC{{{{
        !          8598: *
        !          8599: *      BREAK (ONE CHARACTER ARGUMENT)
        !          8600: *
        !          8601: *      PARM1                 CHARACTER ARGUMENT
        !          8602: *
        !          8603: {P$BKS{ENT{BL$P1{{{P1BLK
        !          8604: {{MOV{PMSSL{R8{{GET SUBJECT STRING LENGTH
        !          8605: {{SUB{R7{R8{{GET NUMBER OF CHARACTERS LEFT
        !          8606: {{BZE{R8{FAILP{{FAIL IF NO CHARACTERS LEFT
        !          8607: {{LCT{R8{R8{{SET COUNTER FOR CHARS LEFT
        !          8608: {{MOV{R$PMS{R10{{POINT TO SUBJECT STRING
        !          8609: {{PLC{R10{R7{{POINT TO CURRENT CHARACTER
        !          8610: *
        !          8611: *      LOOP TO SCAN TILL BREAK CHARACTER FOUND
        !          8612: *
        !          8613: {PBKS1{LCH{R6{(R10)+{{LOAD NEXT CHAR, BUMP POINTER
        !          8614: {{BEQ{R6{4*PARM1(R9){SUCCP{SUCCEED IF BREAK CHARACTER FOUND
        !          8615: {{ICV{R7{{{ELSE PUSH CURSOR
        !          8616: {{BCT{R8{PBKS1{{LOOP BACK IF MORE TO GO
        !          8617: {{BRN{FAILP{{{FAIL IF END OF STRING, NO BREAK CHR
        !          8618: {{EJC{{{{
        !          8619: *
        !          8620: *      BREAK (MULTI-CHARACTER ARGUMENT)
        !          8621: *
        !          8622: *      PARM1                 POINTER TO CTBLK
        !          8623: *      PARM2                 BIT MASK TO SELECT BIT COLUMN
        !          8624: *
        !          8625: {P$BRK{ENT{BL$P2{{{P2BLK
        !          8626: *
        !          8627: *      EXPRESSION ARGUMENT MERGES HERE
        !          8628: *
        !          8629: {PBRK1{MOV{PMSSL{R8{{LOAD SUBJECT STRING LENGTH
        !          8630: {{SUB{R7{R8{{GET NUMBER OF CHARACTERS LEFT
        !          8631: {{BZE{R8{FAILP{{FAIL IF NO CHARACTERS LEFT
        !          8632: {{LCT{R8{R8{{SET COUNTER FOR CHARACTERS LEFT
        !          8633: {{MOV{R$PMS{R10{{ELSE POINT TO SUBJECT STRING
        !          8634: {{PLC{R10{R7{{POINT TO CURRENT CHARACTER
        !          8635: {{MOV{R9{PSAVE{{SAVE NODE POINTER
        !          8636: *
        !          8637: *      LOOP TO SEARCH FOR BREAK CHARACTER
        !          8638: *
        !          8639: {PBRK2{LCH{R6{(R10)+{{LOAD NEXT CHAR, BUMP POINTER
        !          8640: {{MOV{4*PARM1(R9){R9{{LOAD POINTER TO CTBLK
        !          8641: {{WTB{R6{{{CONVERT TO BYTE OFFSET
        !          8642: {{ADD{R6{R9{{POINT TO CTBLK ENTRY
        !          8643: {{MOV{4*CTCHS(R9){R6{{LOAD CTBLK WORD
        !          8644: {{MOV{PSAVE{R9{{RESTORE NODE POINTER
        !          8645: {{ANB{4*PARM2(R9){R6{{AND WITH SELECTED BIT
        !          8646: {{NZB{R6{SUCCP{{SUCCEED IF BREAK CHARACTER FOUND
        !          8647: {{ICV{R7{{{ELSE PUSH CURSOR
        !          8648: {{BCT{R8{PBRK2{{LOOP BACK UNLESS END OF STRING
        !          8649: {{BRN{FAILP{{{FAIL IF END OF STRING, NO BREAK CHR
        !          8650: {{EJC{{{{
        !          8651: *
        !          8652: *      BREAKX (EXTENSION)
        !          8653: *
        !          8654: *      THIS IS THE ENTRY WHICH CAUSES AN EXTENSION OF A BREAKX
        !          8655: *      MATCH WHEN FAILURE OCCURS. SEE SECTION ON COMPOUND
        !          8656: *      PATTERNS FOR FULL DETAILS OF BREAKX MATCHING.
        !          8657: *
        !          8658: *      NO PARAMETERS
        !          8659: *
        !          8660: {P$BKX{ENT{BL$P0{{{P0BLK
        !          8661: {{ICV{R7{{{STEP CURSOR PAST PREVIOUS BREAK CHR
        !          8662: {{BRN{SUCCP{{{SUCCEED TO REMATCH BREAK
        !          8663: {{EJC{{{{
        !          8664: *
        !          8665: *      BREAKX (EXPRESSION ARGUMENT)
        !          8666: *
        !          8667: *      SEE SECTION ON COMPOUND PATTERNS FOR FULL STRUCTURE OF
        !          8668: *      BREAKX PATTERN. THE ACTUAL CHARACTER MATCHING USES A
        !          8669: *      BREAK NODE. HOWEVER, THE ENTRY FOR THE EXPRESSION
        !          8670: *      ARGUMENT CASE IS SEPARATED TO GET PROPER ERROR MESSAGES.
        !          8671: *
        !          8672: *      PARM1                 EXPRESSION POINTER
        !          8673: *
        !          8674: {P$BXD{ENT{BL$P1{{{P1BLK
        !          8675: {{JSR{EVALS{{{EVALUATE STRING ARGUMENT
        !          8676: {{ERR{045{BREAKX{{EVALUATED ARGUMENT IS NOT STRING
        !          8677: {{PPM{FAILP{{{FAIL IF EVALUATION FAILS
        !          8678: {{PPM{PBRK1{{{MERGE WITH BREAK IF ALL OK
        !          8679: {{EJC{{{{
        !          8680: *
        !          8681: *      CURSOR ASSIGNMENT
        !          8682: *
        !          8683: *      PARM1                 NAME BASE
        !          8684: *      PARM2                 NAME OFFSET
        !          8685: *
        !          8686: {P$CAS{ENT{BL$P2{{{P2BLK
        !          8687: {{MOV{R9{-(SP){{SAVE NODE POINTER
        !          8688: {{MOV{R7{-(SP){{SAVE CURSOR
        !          8689: {{MOV{4*PARM1(R9){R10{{LOAD NAME BASE
        !          8690: {{MTI{R7{{{LOAD CURSOR AS INTEGER
        !          8691: {{MOV{4*PARM2(R9){R7{{LOAD NAME OFFSET
        !          8692: {{JSR{ICBLD{{{GET ICBLK FOR CURSOR VALUE
        !          8693: {{MOV{R7{R6{{MOVE NAME OFFSET
        !          8694: {{MOV{R9{R7{{MOVE VALUE TO ASSIGN
        !          8695: {{JSR{ASINP{{{PERFORM ASSIGNMENT
        !          8696: {{PPM{FLPOP{{{FAIL ON ASSIGNMENT FAILURE
        !          8697: {{MOV{(SP)+{R7{{ELSE RESTORE CURSOR
        !          8698: {{MOV{(SP)+{R9{{RESTORE NODE POINTER
        !          8699: {{BRN{SUCCP{{{AND SUCCEED MATCHING NULL
        !          8700: {{EJC{{{{
        !          8701: *
        !          8702: *      EXPRESSION NODE (P$EXA, INITIAL ENTRY)
        !          8703: *
        !          8704: *      SEE COMPOUND PATTERNS DESCRIPTION FOR THE STRUCTURE AND
        !          8705: *      ALGORITHMS FOR HANDLING EXPRESSION NODES.
        !          8706: *
        !          8707: *      PARM1                 EXPRESSION POINTER
        !          8708: *
        !          8709: {P$EXA{ENT{BL$P1{{{P1BLK
        !          8710: {{JSR{EVALP{{{EVALUATE EXPRESSION
        !          8711: {{PPM{FAILP{{{FAIL IF EVALUATION FAILS
        !          8712: {{BLO{R6{#P$AAA{PEXA1{JUMP IF RESULT IS NOT A PATTERN
        !          8713: *
        !          8714: *      HERE IF RESULT OF EXPRESSION IS A PATTERN
        !          8715: *
        !          8716: {{MOV{R7{-(SP){{STACK DUMMY CURSOR
        !          8717: {{MOV{R9{-(SP){{STACK PTR TO P$EXA NODE
        !          8718: {{MOV{PMHBS{-(SP){{STACK HISTORY STACK BASE PTR
        !          8719: {{MOV{#NDEXB{-(SP){{STACK PTR TO SPECIAL NODE NDEXB
        !          8720: {{MOV{SP{PMHBS{{STORE NEW STACK BASE POINTER
        !          8721: {{MOV{R10{R9{{COPY NODE POINTER
        !          8722: {{BRI{(R9){{{MATCH FIRST NODE IN EXPRESSION PAT
        !          8723: *
        !          8724: *      HERE IF RESULT OF EXPRESSION IS NOT A PATTERN
        !          8725: *
        !          8726: {PEXA1{BEQ{R6{#B$SCL{PEXA2{JUMP IF IT IS ALREADY A STRING
        !          8727: {{MOV{R10{-(SP){{ELSE STACK RESULT
        !          8728: {{MOV{R9{R10{{SAVE NODE POINTER
        !          8729: {{JSR{GTSTG{{{CONVERT RESULT TO STRING
        !          8730: {{ERR{046{EXPRESSION{{DOES NOT EVALUATE TO PATTERN
        !          8731: {{MOV{R9{R8{{COPY STRING POINTER
        !          8732: {{MOV{R10{R9{{RESTORE NODE POINTER
        !          8733: {{MOV{R8{R10{{COPY STRING POINTER AGAIN
        !          8734: *
        !          8735: *      MERGE HERE WITH STRING POINTER IN XL
        !          8736: *
        !          8737: {PEXA2{BZE{4*SCLEN(R10){SUCCP{{JUST SUCCEED IF NULL STRING
        !          8738: {{BRN{PSTR1{{{ELSE MERGE WITH STRING CIRCUIT
        !          8739: {{EJC{{{{
        !          8740: *
        !          8741: *      EXPRESSION NODE (P$EXB, REMOVE NDEXB ENTRY)
        !          8742: *
        !          8743: *      SEE COMPOUND PATTERNS DESCRIPTION FOR THE STRUCTURE AND
        !          8744: *      ALGORITHMS FOR HANDLING EXPRESSION NODES.
        !          8745: *
        !          8746: *      NO PARAMETERS (DUMMY PATTERN)
        !          8747: *
        !          8748: {P$EXB{ENT{{{{ENTRY POINT
        !          8749: {{MOV{R7{PMHBS{{RESTORE OUTER LEVEL STACK POINTER
        !          8750: {{BRN{FLPOP{{{FAIL AND POP P$EXA NODE PTR
        !          8751: {{EJC{{{{
        !          8752: *
        !          8753: *      EXPRESSION NODE (P$EXC, REMOVE NDEXC ENTRY)
        !          8754: *
        !          8755: *      SEE COMPOUND PATTERNS DESCRIPTION FOR THE STRUCTURE AND
        !          8756: *      ALGORITHMS FOR HANDLING EXPRESSION NODES.
        !          8757: *
        !          8758: *      NO PARAMETERS (DUMMY PATTERN)
        !          8759: *
        !          8760: {P$EXC{ENT{{{{ENTRY POINT
        !          8761: {{MOV{R7{PMHBS{{RESTORE INNER STACK BASE POINTER
        !          8762: {{BRN{FAILP{{{AND FAIL INTO EXPR PATTERN ALTERNVS
        !          8763: {{EJC{{{{
        !          8764: *
        !          8765: *      FAIL
        !          8766: *
        !          8767: *      NO PARAMETERS
        !          8768: *
        !          8769: {P$FAL{ENT{BL$P0{{{P0BLK
        !          8770: {{BRN{FAILP{{{JUST SIGNAL FAILURE
        !          8771: {{EJC{{{{
        !          8772: *
        !          8773: *      FENCE
        !          8774: *
        !          8775: *      SEE COMPOUND PATTERNS SECTION FOR THE STRUCTURE AND
        !          8776: *      ALGORITHM FOR MATCHING THIS NODE TYPE.
        !          8777: *
        !          8778: *      NO PARAMETERS
        !          8779: *
        !          8780: {P$FEN{ENT{BL$P0{{{P0BLK
        !          8781: {{MOV{R7{-(SP){{STACK DUMMY CURSOR
        !          8782: {{MOV{#NDABO{-(SP){{STACK PTR TO ABORT NODE
        !          8783: {{BRN{SUCCP{{{AND SUCCEED MATCHING NULL
        !          8784: {{EJC{{{{
        !          8785: *
        !          8786: *      FENCE (FUNCTION)
        !          8787: *
        !          8788: *      SEE COMPOUND PATTERNS COMMENTS AT START OF THIS SECTION
        !          8789: *      FOR DETAILS OF SCHEME
        !          8790: *
        !          8791: *      NO PARAMETERS
        !          8792: *
        !          8793: {P$FNA{ENT{BL$P0{{{P0BLK
        !          8794: {{MOV{PMHBS{-(SP){{STACK CURRENT HISTORY STACK BASE
        !          8795: {{MOV{#NDFNB{-(SP){{STACK INDIR PTR TO P$FNB (FAILURE)
        !          8796: {{MOV{SP{PMHBS{{BEGIN NEW HISTORY STACK
        !          8797: {{BRN{SUCCP{{{SUCCEED
        !          8798: {{EJC{{{{
        !          8799: *
        !          8800: *      FENCE (FUNCTION) (RESET HISTORY STACK AND FAIL)
        !          8801: *
        !          8802: *      NO PARAMETERS (DUMMY PATTERN)
        !          8803: *
        !          8804: {P$FNB{ENT{BL$P0{{{P0BLK
        !          8805: {{MOV{R7{PMHBS{{RESTORE OUTER PMHBS STACK BASE
        !          8806: {{BRN{FAILP{{{...AND FAIL
        !          8807: {{EJC{{{{
        !          8808: *
        !          8809: *      FENCE (FUNCTION) (MAKE FENCE TRAP ENTRY ON STACK)
        !          8810: *
        !          8811: *      NO PARAMETERS (DUMMY PATTERN)
        !          8812: *
        !          8813: {P$FNC{ENT{BL$P0{{{P0BLK
        !          8814: {{MOV{PMHBS{R10{{GET INNER STACK BASE PTR
        !          8815: {{MOV{4*NUM01(R10){PMHBS{{RESTORE OUTER STACK BASE
        !          8816: {{BEQ{R10{SP{PFNC1{OPTIMIZE IF NO ALTERNATIVES
        !          8817: {{MOV{R10{-(SP){{ELSE STACK INNER STACK BASE
        !          8818: {{MOV{#NDFND{-(SP){{STACK PTR TO NDFND
        !          8819: {{BRN{SUCCP{{{SUCCEED
        !          8820: *
        !          8821: *      HERE WHEN FENCE FUNCTION LEFT NOTHING ON THE STACK
        !          8822: *
        !          8823: {PFNC1{ADD{#4*NUM02{SP{{POP OFF P$FNB ENTRY
        !          8824: {{BRN{SUCCP{{{SUCCEED
        !          8825: {{EJC{{{{
        !          8826: *
        !          8827: *      FENCE (FUNCTION) (SKIP PAST ALTERNATIVES ON FAILURE)
        !          8828: *
        !          8829: *      NO PARAMETERS (DUMMY PATTERN)
        !          8830: *
        !          8831: {P$FND{ENT{BL$P0{{{P0BLK
        !          8832: {{MOV{R7{SP{{POP STACK TO FENCE() HISTORY BASE
        !          8833: {{BRN{FLPOP{{{POP BASE ENTRY AND FAIL
        !          8834: {{EJC{{{{
        !          8835: *
        !          8836: *      IMMEDIATE ASSIGNMENT (INITIAL ENTRY, SAVE CURRENT CURSOR)
        !          8837: *
        !          8838: *      SEE COMPOUND PATTERNS DESCRIPTION FOR DETAILS OF THE
        !          8839: *      STRUCTURE AND ALGORITHM FOR MATCHING THIS NODE TYPE.
        !          8840: *
        !          8841: *      NO PARAMETERS
        !          8842: *
        !          8843: {P$IMA{ENT{BL$P0{{{P0BLK
        !          8844: {{MOV{R7{-(SP){{STACK CURSOR
        !          8845: {{MOV{R9{-(SP){{STACK DUMMY NODE POINTER
        !          8846: {{MOV{PMHBS{-(SP){{STACK OLD STACK BASE POINTER
        !          8847: {{MOV{#NDIMB{-(SP){{STACK PTR TO SPECIAL NODE NDIMB
        !          8848: {{MOV{SP{PMHBS{{STORE NEW STACK BASE POINTER
        !          8849: {{BRN{SUCCP{{{AND SUCCEED
        !          8850: {{EJC{{{{
        !          8851: *
        !          8852: *      IMMEDIATE ASSIGNMENT (REMOVE CURSOR MARK ENTRY)
        !          8853: *
        !          8854: *      SEE COMPOUND PATTERNS DESCRIPTION FOR DETAILS OF THE
        !          8855: *      STRUCTURE AND ALGORITHMS FOR MATCHING THIS NODE TYPE.
        !          8856: *
        !          8857: *      NO PARAMETERS (DUMMY PATTERN)
        !          8858: *
        !          8859: {P$IMB{ENT{{{{ENTRY POINT
        !          8860: {{MOV{R7{PMHBS{{RESTORE HISTORY STACK BASE PTR
        !          8861: {{BRN{FLPOP{{{FAIL AND POP DUMMY NODE PTR
        !          8862: {{EJC{{{{
        !          8863: *
        !          8864: *      IMMEDIATE ASSIGNMENT (PERFORM ACTUAL ASSIGNMENT)
        !          8865: *
        !          8866: *      SEE COMPOUND PATTERNS DESCRIPTION FOR DETAILS OF THE
        !          8867: *      STRUCTURE AND ALGORITHMS FOR MATCHING THIS NODE TYPE.
        !          8868: *
        !          8869: *      PARM1                 NAME BASE OF VARIABLE
        !          8870: *      PARM2                 NAME OFFSET OF VARIABLE
        !          8871: *
        !          8872: {P$IMC{ENT{BL$P2{{{P2BLK
        !          8873: {{MOV{PMHBS{R10{{LOAD POINTER TO P$IMB ENTRY
        !          8874: {{MOV{R7{R6{{COPY FINAL CURSOR
        !          8875: {{MOV{4*3(R10){R7{{LOAD INITIAL CURSOR
        !          8876: {{MOV{4*1(R10){PMHBS{{RESTORE OUTER STACK BASE POINTER
        !          8877: {{BEQ{R10{SP{PIMC1{JUMP IF NO HISTORY STACK ENTRIES
        !          8878: {{MOV{R10{-(SP){{ELSE SAVE INNER PMHBS POINTER
        !          8879: {{MOV{#NDIMD{-(SP){{AND A PTR TO SPECIAL NODE NDIMD
        !          8880: {{BRN{PIMC2{{{MERGE
        !          8881: *
        !          8882: *      HERE IF NO ENTRIES MADE ON HISTORY STACK
        !          8883: *
        !          8884: {PIMC1{ADD{#4*NUM04{SP{{REMOVE NDIMB ENTRY AND CURSOR
        !          8885: *
        !          8886: *      MERGE HERE TO PERFORM ASSIGNMENT
        !          8887: *
        !          8888: {PIMC2{MOV{R6{-(SP){{SAVE CURRENT (FINAL) CURSOR
        !          8889: {{MOV{R9{-(SP){{SAVE CURRENT NODE POINTER
        !          8890: {{MOV{R$PMS{R10{{POINT TO SUBJECT STRING
        !          8891: {{SUB{R7{R6{{COMPUTE SUBSTRING LENGTH
        !          8892: {{JSR{SBSTR{{{BUILD SUBSTRING
        !          8893: {{MOV{R9{R7{{MOVE RESULT
        !          8894: {{MOV{(SP){R9{{RELOAD NODE POINTER
        !          8895: {{MOV{4*PARM1(R9){R10{{LOAD NAME BASE
        !          8896: {{MOV{4*PARM2(R9){R6{{LOAD NAME OFFSET
        !          8897: {{JSR{ASINP{{{PERFORM ASSIGNMENT
        !          8898: {{PPM{FLPOP{{{FAIL IF ASSIGNMENT FAILS
        !          8899: {{MOV{(SP)+{R9{{ELSE RESTORE NODE POINTER
        !          8900: {{MOV{(SP)+{R7{{RESTORE CURSOR
        !          8901: {{BRN{SUCCP{{{AND SUCCEED
        !          8902: {{EJC{{{{
        !          8903: *
        !          8904: *      IMMEDIATE ASSIGNMENT (REMOVE NDIMD ENTRY ON FAILURE)
        !          8905: *
        !          8906: *      SEE COMPOUND PATTERNS DESCRIPTION FOR DETAILS OF THE
        !          8907: *      STRUCTURE AND ALGORITHMS FOR MATCHING THIS NODE TYPE.
        !          8908: *
        !          8909: *      NO PARAMETERS (DUMMY PATTERN)
        !          8910: *
        !          8911: {P$IMD{ENT{{{{ENTRY POINT
        !          8912: {{MOV{R7{PMHBS{{RESTORE INNER STACK BASE POINTER
        !          8913: {{BRN{FAILP{{{AND FAIL
        !          8914: {{EJC{{{{
        !          8915: *
        !          8916: *      LEN (INTEGER ARGUMENT)
        !          8917: *
        !          8918: *      PARM1                 INTEGER ARGUMENT
        !          8919: *
        !          8920: {P$LEN{ENT{BL$P1{{{P1BLK
        !          8921: *
        !          8922: *      EXPRESSION ARGUMENT CASE MERGES HERE
        !          8923: *
        !          8924: {PLEN1{ADD{4*PARM1(R9){R7{{PUSH CURSOR INDICATED AMOUNT
        !          8925: {{BLE{R7{PMSSL{SUCCP{SUCCEED IF NOT OFF END
        !          8926: {{BRN{FAILP{{{ELSE FAIL
        !          8927: {{EJC{{{{
        !          8928: *
        !          8929: *      LEN (EXPRESSION ARGUMENT)
        !          8930: *
        !          8931: *      PARM1                 EXPRESSION POINTER
        !          8932: *
        !          8933: {P$LND{ENT{BL$P1{{{P1BLK
        !          8934: {{JSR{EVALI{{{EVALUATE INTEGER ARGUMENT
        !          8935: {{ERR{047{LEN{{EVALUATED ARGUMENT IS NOT INTEGER
        !          8936: {{ERR{048{LEN{{EVALUATED ARGUMENT IS NEGATIVE OR TOO LARGE
        !          8937: {{PPM{FAILP{{{FAIL IF EVALUATION FAILS
        !          8938: {{PPM{PLEN1{{{MERGE WITH NORMAL CIRCUIT IF OK
        !          8939: {{EJC{{{{
        !          8940: *
        !          8941: *      NOTANY (EXPRESSION ARGUMENT)
        !          8942: *
        !          8943: *      PARM1                 EXPRESSION POINTER
        !          8944: *
        !          8945: {P$NAD{ENT{BL$P1{{{P1BLK
        !          8946: {{JSR{EVALS{{{EVALUATE STRING ARGUMENT
        !          8947: {{ERR{049{NOTANY{{EVALUATED ARGUMENT IS NOT STRING
        !          8948: {{PPM{FAILP{{{FAIL IF EVALUATION FAILS
        !          8949: {{PPM{PNAY1{{{MERGE WITH MULTI-CHAR CASE IF OK
        !          8950: {{EJC{{{{
        !          8951: *
        !          8952: *      NOTANY (ONE CHARACTER ARGUMENT)
        !          8953: *
        !          8954: *      PARM1                 CHARACTER ARGUMENT
        !          8955: *
        !          8956: {P$NAS{ENT{BL$P1{{{ENTRY POINT
        !          8957: {{BEQ{R7{PMSSL{FAILP{FAIL IF NO CHARS LEFT
        !          8958: {{MOV{R$PMS{R10{{ELSE POINT TO SUBJECT STRING
        !          8959: {{PLC{R10{R7{{POINT TO CURRENT CHARACTER IN STRIN
        !          8960: {{LCH{R6{(R10){{LOAD CURRENT CHARACTER
        !          8961: {{BEQ{R6{4*PARM1(R9){FAILP{FAIL IF MATCH
        !          8962: {{ICV{R7{{{ELSE BUMP CURSOR
        !          8963: {{BRN{SUCCP{{{AND SUCCEED
        !          8964: {{EJC{{{{
        !          8965: *
        !          8966: *      NOTANY (MULTI-CHARACTER STRING ARGUMENT)
        !          8967: *
        !          8968: *      PARM1                 POINTER TO CTBLK
        !          8969: *      PARM2                 BIT MASK TO SELECT BIT COLUMN
        !          8970: *
        !          8971: {P$NAY{ENT{BL$P2{{{P2BLK
        !          8972: *
        !          8973: *      EXPRESSION ARGUMENT CASE MERGES HERE
        !          8974: *
        !          8975: {PNAY1{BEQ{R7{PMSSL{FAILP{FAIL IF NO CHARACTERS LEFT
        !          8976: {{MOV{R$PMS{R10{{ELSE POINT TO SUBJECT STRING
        !          8977: {{PLC{R10{R7{{POINT TO CURRENT CHARACTER
        !          8978: {{LCH{R6{(R10){{LOAD CURRENT CHARACTER
        !          8979: {{WTB{R6{{{CONVERT TO BYTE OFFSET
        !          8980: {{MOV{4*PARM1(R9){R10{{LOAD POINTER TO CTBLK
        !          8981: {{ADD{R6{R10{{POINT TO ENTRY IN CTBLK
        !          8982: {{MOV{4*CTCHS(R10){R6{{LOAD ENTRY FROM CTBLK
        !          8983: {{ANB{4*PARM2(R9){R6{{AND WITH SELECTED BIT
        !          8984: {{NZB{R6{FAILP{{FAIL IF CHARACTER IS MATCHED
        !          8985: {{ICV{R7{{{ELSE BUMP CURSOR
        !          8986: {{BRN{SUCCP{{{AND SUCCEED
        !          8987: {{EJC{{{{
        !          8988: *
        !          8989: *      END OF PATTERN MATCH
        !          8990: *
        !          8991: *      THIS ROUTINE IS ENTERED ON SUCCESSFUL COMPLETION.
        !          8992: *      SEE DESCRIPTION OF EXPRESSION PATTERNS IN COMPOUND
        !          8993: *      PATTERN SECTION FOR HANDLING OF RECURSION IN MATCHING.
        !          8994: *
        !          8995: *      NO PARAMETERS (DUMMY PATTERN)
        !          8996: *
        !          8997: {P$NTH{ENT{{{{ENTRY POINT
        !          8998: {{MOV{PMHBS{R10{{LOAD POINTER TO BASE OF STACK
        !          8999: {{MOV{4*1(R10){R6{{LOAD SAVED PMHBS (OR PATTERN TYPE)
        !          9000: {{BLE{R6{#NUM02{PNTH2{JUMP IF OUTER LEVEL (PATTERN TYPE)
        !          9001: *
        !          9002: *      HERE WE ARE AT THE END OF MATCHING AN EXPRESSION PATTERN
        !          9003: *
        !          9004: {{MOV{R6{PMHBS{{RESTORE OUTER STACK BASE POINTER
        !          9005: {{MOV{4*2(R10){R9{{RESTORE POINTER TO P$EXA NODE
        !          9006: {{BEQ{R10{SP{PNTH1{JUMP IF NO HISTORY STACK ENTRIES
        !          9007: {{MOV{R10{-(SP){{ELSE STACK INNER STACK BASE PTR
        !          9008: {{MOV{#NDEXC{-(SP){{STACK PTR TO SPECIAL NODE NDEXC
        !          9009: {{BRN{SUCCP{{{AND SUCCEED
        !          9010: *
        !          9011: *      HERE IF NO HISTORY STACK ENTRIES DURING PATTERN
        !          9012: *
        !          9013: {PNTH1{ADD{#4*NUM04{SP{{REMOVE P$EXB ENTRY AND NODE PTR
        !          9014: {{BRN{SUCCP{{{AND SUCCEED
        !          9015: *
        !          9016: *      HERE IF END OF MATCH AT OUTER LEVEL
        !          9017: *
        !          9018: {PNTH2{MOV{R7{PMSSL{{SAVE FINAL CURSOR IN SAFE PLACE
        !          9019: {{BZE{PMDFL{PNTH6{{JUMP IF NO PATTERN ASSIGNMENTS
        !          9020: {{EJC{{{{
        !          9021: *
        !          9022: *      END OF PATTERN MATCH (CONTINUED)
        !          9023: *
        !          9024: *      NOW WE MUST PERFORM PATTERN ASSIGNMENTS. THIS IS DONE BY
        !          9025: *      SCANNING THE HISTORY STACK FOR MATCHING NDPAB-NDPAD PAIRS
        !          9026: *
        !          9027: {PNTH3{DCA{R10{{{POINT PAST CURSOR ENTRY
        !          9028: {{MOV{-(R10){R6{{LOAD NODE POINTER
        !          9029: {{BEQ{R6{#NDPAD{PNTH4{JUMP IF NDPAD ENTRY
        !          9030: {{BNE{R6{#NDPAB{PNTH5{JUMP IF NOT NDPAB ENTRY
        !          9031: *
        !          9032: *      HERE FOR NDPAB ENTRY, STACK INITIAL CURSOR
        !          9033: *      NOTE THAT THERE MUST BE MORE ENTRIES ON THE STACK.
        !          9034: *
        !          9035: {{MOV{4*1(R10){-(SP){{STACK INITIAL CURSOR
        !          9036: {{CHK{{{{CHECK FOR STACK OVERFLOW
        !          9037: {{BRN{PNTH3{{{LOOP BACK IF OK
        !          9038: *
        !          9039: *      HERE FOR NDPAD ENTRY. THE STARTING CURSOR FROM THE
        !          9040: *      MATCHING NDPAD ENTRY IS NOW THE TOP STACK ENTRY.
        !          9041: *
        !          9042: {PNTH4{MOV{4*1(R10){R6{{LOAD FINAL CURSOR
        !          9043: {{MOV{(SP){R7{{LOAD INITIAL CURSOR FROM STACK
        !          9044: {{MOV{R10{(SP){{SAVE HISTORY STACK SCAN PTR
        !          9045: {{SUB{R7{R6{{COMPUTE LENGTH OF STRING
        !          9046: *
        !          9047: *      BUILD SUBSTRING AND PERFORM ASSIGNMENT
        !          9048: *
        !          9049: {{MOV{R$PMS{R10{{POINT TO SUBJECT STRING
        !          9050: {{JSR{SBSTR{{{CONSTRUCT SUBSTRING
        !          9051: {{MOV{R9{R7{{COPY SUBSTRING POINTER
        !          9052: {{MOV{(SP){R10{{RELOAD HISTORY STACK SCAN PTR
        !          9053: {{MOV{4*2(R10){R10{{LOAD POINTER TO P$PAC NODE WITH NAM
        !          9054: {{MOV{4*PARM2(R10){R6{{LOAD NAME OFFSET
        !          9055: {{MOV{4*PARM1(R10){R10{{LOAD NAME BASE
        !          9056: {{JSR{ASINP{{{PERFORM ASSIGNMENT
        !          9057: {{PPM{EXFAL{{{MATCH FAILS IF NAME EVAL FAILS
        !          9058: {{MOV{(SP)+{R10{{ELSE RESTORE HISTORY STACK PTR
        !          9059: {{EJC{{{{
        !          9060: *
        !          9061: *      END OF PATTERN MATCH (CONTINUED)
        !          9062: *
        !          9063: *      HERE CHECK FOR END OF ENTRIES
        !          9064: *
        !          9065: {PNTH5{BNE{R10{SP{PNTH3{LOOP IF MORE ENTRIES TO SCAN
        !          9066: *
        !          9067: *      HERE AFTER DEALING WITH PATTERN ASSIGNMENTS
        !          9068: *
        !          9069: {PNTH6{MOV{PMHBS{SP{{WIPE OUT HISTORY STACK
        !          9070: {{MOV{(SP)+{R7{{LOAD INITIAL CURSOR
        !          9071: {{MOV{(SP)+{R8{{LOAD MATCH TYPE CODE
        !          9072: {{MOV{PMSSL{R6{{LOAD FINAL CURSOR VALUE
        !          9073: {{MOV{R$PMS{R10{{POINT TO SUBJECT STRING
        !          9074: {{ZER{R$PMS{{{CLEAR SUBJECT STRING PTR FOR GBCOL
        !          9075: {{BZE{R8{PNTH7{{JUMP IF CALL BY NAME
        !          9076: {{BEQ{R8{#NUM02{EXITS{EXIT IF STATEMENT LEVEL CALL
        !          9077: *
        !          9078: *      HERE WE HAVE A CALL BY VALUE, BUILD SUBSTRING
        !          9079: *
        !          9080: {{SUB{R7{R6{{COMPUTE LENGTH OF STRING
        !          9081: {{JSR{SBSTR{{{BUILD SUBSTRING
        !          9082: {{BRN{EXIXR{{{AND EXIT WITH SUBSTRING VALUE
        !          9083: *
        !          9084: *      HERE FOR CALL BY NAME, MAKE STACK ENTRIES FOR O$RPL
        !          9085: *
        !          9086: {PNTH7{MOV{R7{-(SP){{STACK INITIAL CURSOR
        !          9087: {{MOV{R6{-(SP){{STACK FINAL CURSOR
        !          9088: {{BZE{R$PMB{PNTH8{{SKIP IF SUBJECT NOT BUFFER
        !          9089: {{MOV{R$PMB{R10{{ELSE GET PTR TO BCBLK INSTEAD
        !          9090: *
        !          9091: *      HERE WITH XL POINTING TO SCBLK OR BCBLK
        !          9092: *
        !          9093: {PNTH8{MOV{R10{-(SP){{STACK SUBJECT POINTER
        !          9094: {{BRN{EXITS{{{EXIT WITH SPECIAL ENTRY ON STACK
        !          9095: {{EJC{{{{
        !          9096: *
        !          9097: *      POS (INTEGER ARGUMENT)
        !          9098: *
        !          9099: *      PARM1                 INTEGER ARGUMENT
        !          9100: *
        !          9101: {P$POS{ENT{BL$P1{{{P1BLK
        !          9102: *
        !          9103: *      EXPRESSION ARGUMENT CASE MERGES HERE
        !          9104: *
        !          9105: {PPOS1{BEQ{R7{4*PARM1(R9){SUCCP{SUCCEED IF AT RIGHT LOCATION
        !          9106: {{BRN{FAILP{{{ELSE FAIL
        !          9107: {{EJC{{{{
        !          9108: *
        !          9109: *      POS (EXPRESSION ARGUMENT)
        !          9110: *
        !          9111: *      PARM1                 EXPRESSION POINTER
        !          9112: *
        !          9113: {P$PSD{ENT{BL$P1{{{P1BLK
        !          9114: {{JSR{EVALI{{{EVALUATE INTEGER ARGUMENT
        !          9115: {{ERR{050{POS{{EVALUATED ARGUMENT IS NOT INTEGER
        !          9116: {{ERR{051{POS{{EVALUATED ARGUMENT IS NEGATIVE OR TOO LARGE
        !          9117: {{PPM{FAILP{{{FAIL IF EVALUATION FAILS
        !          9118: {{PPM{PPOS1{{{MERGE WITH NORMAL CASE IF OK
        !          9119: {{EJC{{{{
        !          9120: *
        !          9121: *      PATTERN ASSIGNMENT (INITIAL ENTRY, SAVE CURSOR)
        !          9122: *
        !          9123: *      SEE COMPOUND PATTERNS DESCRIPTION FOR THE STRUCTURE AND
        !          9124: *      ALGORITHMS FOR MATCHING THIS NODE TYPE.
        !          9125: *
        !          9126: *      NO PARAMETERS
        !          9127: *
        !          9128: {P$PAA{ENT{BL$P0{{{P0BLK
        !          9129: {{MOV{R7{-(SP){{STACK INITIAL CURSOR
        !          9130: {{MOV{#NDPAB{-(SP){{STACK PTR TO NDPAB SPECIAL NODE
        !          9131: {{BRN{SUCCP{{{AND SUCCEED MATCHING NULL
        !          9132: {{EJC{{{{
        !          9133: *
        !          9134: *      PATTERN ASSIGNMENT (REMOVE SAVED CURSOR)
        !          9135: *
        !          9136: *      SEE COMPOUND PATTERNS DESCRIPTION FOR THE STRUCTURE AND
        !          9137: *      ALGORITHMS FOR MATCHING THIS NODE TYPE.
        !          9138: *
        !          9139: *      NO PARAMETERS (DUMMY PATTERN)
        !          9140: *
        !          9141: {P$PAB{ENT{{{{ENTRY POINT
        !          9142: {{BRN{FAILP{{{JUST FAIL (ENTRY IS ALREADY POPPED)
        !          9143: {{EJC{{{{
        !          9144: *
        !          9145: *      PATTERN ASSIGNMENT (END OF MATCH, MAKE ASSIGN ENTRY)
        !          9146: *
        !          9147: *      SEE COMPOUND PATTERNS DESCRIPTION FOR THE STRUCTURE AND
        !          9148: *      ALGORITHMS FOR MATCHING THIS NODE TYPE.
        !          9149: *
        !          9150: *      PARM1                 NAME BASE OF VARIABLE
        !          9151: *      PARM2                 NAME OFFSET OF VARIABLE
        !          9152: *
        !          9153: {P$PAC{ENT{BL$P2{{{P2BLK
        !          9154: {{MOV{R7{-(SP){{STACK DUMMY CURSOR VALUE
        !          9155: {{MOV{R9{-(SP){{STACK POINTER TO P$PAC NODE
        !          9156: {{MOV{R7{-(SP){{STACK FINAL CURSOR
        !          9157: {{MOV{#NDPAD{-(SP){{STACK PTR TO SPECIAL NDPAD NODE
        !          9158: {{MNZ{PMDFL{{{SET DOT FLAG NON-ZERO
        !          9159: {{BRN{SUCCP{{{AND SUCCEED
        !          9160: {{EJC{{{{
        !          9161: *
        !          9162: *      PATTERN ASSIGNMENT (REMOVE ASSIGN ENTRY)
        !          9163: *
        !          9164: *      SEE COMPOUND PATTERNS DESCRIPTION FOR THE STRUCTURE AND
        !          9165: *      ALGORITHMS FOR MATCHING THIS NODE TYPE.
        !          9166: *
        !          9167: *      NO PARAMETERS (DUMMY NODE)
        !          9168: *
        !          9169: {P$PAD{ENT{{{{ENTRY POINT
        !          9170: {{BRN{FLPOP{{{FAIL AND REMOVE P$PAC NODE
        !          9171: {{EJC{{{{
        !          9172: *
        !          9173: *      REM
        !          9174: *
        !          9175: *      NO PARAMETERS
        !          9176: *
        !          9177: {P$REM{ENT{BL$P0{{{P0BLK
        !          9178: {{MOV{PMSSL{R7{{POINT CURSOR TO END OF STRING
        !          9179: {{BRN{SUCCP{{{AND SUCCEED
        !          9180: {{EJC{{{{
        !          9181: *
        !          9182: *      RPOS (EXPRESSION ARGUMENT)
        !          9183: *
        !          9184: *      PARM1                 EXPRESSION POINTER
        !          9185: *
        !          9186: {P$RPD{ENT{BL$P1{{{P1BLK
        !          9187: {{JSR{EVALI{{{EVALUATE INTEGER ARGUMENT
        !          9188: {{ERR{052{RPOS{{EVALUATED ARGUMENT IS NOT INTEGER
        !          9189: {{ERR{053{RPOS{{EVALUATED ARGUMENT IS NEGATIVE OR TOO LARGE
        !          9190: {{PPM{FAILP{{{FAIL IF EVALUATION FAILS
        !          9191: {{PPM{PRPS1{{{MERGE WITH NORMAL CASE IF OK
        !          9192: {{EJC{{{{
        !          9193: *
        !          9194: *      RPOS (INTEGER ARGUMENT)
        !          9195: *
        !          9196: *      PARM1                 INTEGER ARGUMENT
        !          9197: *
        !          9198: {P$RPS{ENT{BL$P1{{{P1BLK
        !          9199: *
        !          9200: *      EXPRESSION ARGUMENT CASE MERGES HERE
        !          9201: *
        !          9202: {PRPS1{MOV{PMSSL{R8{{GET LENGTH OF STRING
        !          9203: {{SUB{R7{R8{{GET NUMBER OF CHARACTERS REMAINING
        !          9204: {{BEQ{R8{4*PARM1(R9){SUCCP{SUCCEED IF AT RIGHT LOCATION
        !          9205: {{BRN{FAILP{{{ELSE FAIL
        !          9206: {{EJC{{{{
        !          9207: *
        !          9208: *      RTAB (INTEGER ARGUMENT)
        !          9209: *
        !          9210: *      PARM1                 INTEGER ARGUMENT
        !          9211: *
        !          9212: {P$RTB{ENT{BL$P1{{{P1BLK
        !          9213: *
        !          9214: *      EXPRESSION ARGUMENT CASE MERGES HERE
        !          9215: *
        !          9216: {PRTB1{MOV{R7{R8{{SAVE INITIAL CURSOR
        !          9217: {{MOV{PMSSL{R7{{POINT TO END OF STRING
        !          9218: {{BLT{R7{4*PARM1(R9){FAILP{FAIL IF STRING NOT LONG ENOUGH
        !          9219: {{SUB{4*PARM1(R9){R7{{ELSE SET NEW CURSOR
        !          9220: {{BGE{R7{R8{SUCCP{AND SUCCEED IF NOT TOO FAR ALREADY
        !          9221: {{BRN{FAILP{{{IN WHICH CASE, FAIL
        !          9222: {{EJC{{{{
        !          9223: *
        !          9224: *      RTAB (EXPRESSION ARGUMENT)
        !          9225: *
        !          9226: *      PARM1                 EXPRESSION POINTER
        !          9227: *
        !          9228: {P$RTD{ENT{BL$P1{{{P1BLK
        !          9229: {{JSR{EVALI{{{EVALUATE INTEGER ARGUMENT
        !          9230: {{ERR{054{RTAB{{EVALUATED ARGUMENT IS NOT INTEGER
        !          9231: {{ERR{055{RTAB{{EVALUATED ARGUMENT IS NEGATIVE OR TOO LARGE
        !          9232: {{PPM{FAILP{{{FAIL IF EVALUATION FAILS
        !          9233: {{PPM{PRTB1{{{MERGE WITH NORMAL CASE IF SUCCESS
        !          9234: {{EJC{{{{
        !          9235: *
        !          9236: *      SPAN (EXPRESSION ARGUMENT)
        !          9237: *
        !          9238: *      PARM1                 EXPRESSION POINTER
        !          9239: *
        !          9240: {P$SPD{ENT{BL$P1{{{P1BLK
        !          9241: {{JSR{EVALS{{{EVALUATE STRING ARGUMENT
        !          9242: {{ERR{056{SPAN{{EVALUATED ARGUMENT IS NOT STRING
        !          9243: {{PPM{FAILP{{{FAIL IF EVALUATION FAILS
        !          9244: {{PPM{PSPN1{{{MERGE WITH MULTI-CHAR CASE IF OK
        !          9245: {{EJC{{{{
        !          9246: *
        !          9247: *      SPAN (MULTI-CHARACTER ARGUMENT CASE)
        !          9248: *
        !          9249: *      PARM1                 POINTER TO CTBLK
        !          9250: *      PARM2                 BIT MASK TO SELECT BIT COLUMN
        !          9251: *
        !          9252: {P$SPN{ENT{BL$P2{{{P2BLK
        !          9253: *
        !          9254: *      EXPRESSION ARGUMENT CASE MERGES HERE
        !          9255: *
        !          9256: {PSPN1{MOV{PMSSL{R8{{COPY SUBJECT STRING LENGTH
        !          9257: {{SUB{R7{R8{{CALCULATE NUMBER OF CHARACTERS LEFT
        !          9258: {{BZE{R8{FAILP{{FAIL IF NO CHARACTERS LEFT
        !          9259: {{MOV{R$PMS{R10{{POINT TO SUBJECT STRING
        !          9260: {{PLC{R10{R7{{POINT TO CURRENT CHARACTER
        !          9261: {{MOV{R7{PSAVC{{SAVE INITIAL CURSOR
        !          9262: {{MOV{R9{PSAVE{{SAVE NODE POINTER
        !          9263: {{LCT{R8{R8{{SET COUNTER FOR CHARS LEFT
        !          9264: *
        !          9265: *      LOOP TO SCAN MATCHING CHARACTERS
        !          9266: *
        !          9267: {PSPN2{LCH{R6{(R10)+{{LOAD NEXT CHARACTER, BUMP POINTER
        !          9268: {{WTB{R6{{{CONVERT TO BYTE OFFSET
        !          9269: {{MOV{4*PARM1(R9){R9{{POINT TO CTBLK
        !          9270: {{ADD{R6{R9{{POINT TO CTBLK ENTRY
        !          9271: {{MOV{4*CTCHS(R9){R6{{LOAD CTBLK ENTRY
        !          9272: {{MOV{PSAVE{R9{{RESTORE NODE POINTER
        !          9273: {{ANB{4*PARM2(R9){R6{{AND WITH SELECTED BIT
        !          9274: {{ZRB{R6{PSPN3{{JUMP IF NO MATCH
        !          9275: {{ICV{R7{{{ELSE PUSH CURSOR
        !          9276: {{BCT{R8{PSPN2{{LOOP BACK UNLESS END OF STRING
        !          9277: *
        !          9278: *      HERE AFTER SCANNING MATCHING CHARACTERS
        !          9279: *
        !          9280: {PSPN3{BNE{R7{PSAVC{SUCCP{SUCCEED IF CHARS MATCHED
        !          9281: {{BRN{FAILP{{{ELSE FAIL IF NULL STRING MATCHED
        !          9282: {{EJC{{{{
        !          9283: *
        !          9284: *      SPAN (ONE CHARACTER ARGUMENT)
        !          9285: *
        !          9286: *      PARM1                 CHARACTER ARGUMENT
        !          9287: *
        !          9288: {P$SPS{ENT{BL$P1{{{P1BLK
        !          9289: {{MOV{PMSSL{R8{{GET SUBJECT STRING LENGTH
        !          9290: {{SUB{R7{R8{{CALCULATE NUMBER OF CHARACTERS LEFT
        !          9291: {{BZE{R8{FAILP{{FAIL IF NO CHARACTERS LEFT
        !          9292: {{MOV{R$PMS{R10{{ELSE POINT TO SUBJECT STRING
        !          9293: {{PLC{R10{R7{{POINT TO CURRENT CHARACTER
        !          9294: {{MOV{R7{PSAVC{{SAVE INITIAL CURSOR
        !          9295: {{LCT{R8{R8{{SET COUNTER FOR CHARACTERS LEFT
        !          9296: *
        !          9297: *      LOOP TO SCAN MATCHING CHARACTERS
        !          9298: *
        !          9299: {PSPS1{LCH{R6{(R10)+{{LOAD NEXT CHARACTER, BUMP POINTER
        !          9300: {{BNE{R6{4*PARM1(R9){PSPS2{JUMP IF NO MATCH
        !          9301: {{ICV{R7{{{ELSE PUSH CURSOR
        !          9302: {{BCT{R8{PSPS1{{AND LOOP UNLESS END OF STRING
        !          9303: *
        !          9304: *      HERE AFTER SCANNING MATCHING CHARACTERS
        !          9305: *
        !          9306: {PSPS2{BNE{R7{PSAVC{SUCCP{SUCCEED IF CHARS MATCHED
        !          9307: {{BRN{FAILP{{{FAIL IF NULL STRING MATCHED
        !          9308: {{EJC{{{{
        !          9309: *
        !          9310: *      MULTI-CHARACTER STRING
        !          9311: *
        !          9312: *      NOTE THAT ONE CHARACTER STRINGS USE THE CIRCUIT FOR
        !          9313: *      ONE CHARACTER ANY ARGUMENTS (P$AN1).
        !          9314: *
        !          9315: *      PARM1                 POINTER TO SCBLK FOR STRING ARG
        !          9316: *
        !          9317: {P$STR{ENT{BL$P1{{{P1BLK
        !          9318: {{MOV{4*PARM1(R9){R10{{GET POINTER TO STRING
        !          9319: *
        !          9320: *      MERGE HERE AFTER EVALUATING EXPRESSION WITH STRING VALUE
        !          9321: *
        !          9322: {PSTR1{MOV{R9{PSAVE{{SAVE NODE POINTER
        !          9323: {{MOV{R$PMS{R9{{LOAD SUBJECT STRING POINTER
        !          9324: {{PLC{R9{R7{{POINT TO CURRENT CHARACTER
        !          9325: {{ADD{4*SCLEN(R10){R7{{COMPUTE NEW CURSOR POSITION
        !          9326: {{BGT{R7{PMSSL{FAILP{FAIL IF PAST END OF STRING
        !          9327: {{MOV{R7{PSAVC{{SAVE UPDATED CURSOR
        !          9328: {{MOV{4*SCLEN(R10){R6{{GET NUMBER OF CHARS TO COMPARE
        !          9329: {{PLC{R10{{{POINT TO CHARS OF TEST STRING
        !          9330: {{CMC{FAILP{FAILP{{COMPARE, FAIL IF NOT EQUAL
        !          9331: {{MOV{PSAVE{R9{{IF ALL MATCHED, RESTORE NODE PTR
        !          9332: {{MOV{PSAVC{R7{{RESTORE UPDATED CURSOR
        !          9333: {{BRN{SUCCP{{{AND SUCCEED
        !          9334: {{EJC{{{{
        !          9335: *
        !          9336: *      SUCCEED
        !          9337: *
        !          9338: *      SEE SECTION ON COMPOUND PATTERNS FOR DETAILS OF THE
        !          9339: *      STRUCTURE AND ALGORITHMS FOR MATCHING THIS NODE TYPE
        !          9340: *
        !          9341: *      NO PARAMETERS
        !          9342: *
        !          9343: {P$SUC{ENT{BL$P0{{{P0BLK
        !          9344: {{MOV{R7{-(SP){{STACK CURSOR
        !          9345: {{MOV{R9{-(SP){{STACK POINTER TO THIS NODE
        !          9346: {{BRN{SUCCP{{{SUCCEED MATCHING NULL
        !          9347: {{EJC{{{{
        !          9348: *
        !          9349: *      TAB (INTEGER ARGUMENT)
        !          9350: *
        !          9351: *      PARM1                 INTEGER ARGUMENT
        !          9352: *
        !          9353: {P$TAB{ENT{BL$P1{{{P1BLK
        !          9354: *
        !          9355: *      EXPRESSION ARGUMENT CASE MERGES HERE
        !          9356: *
        !          9357: {PTAB1{BGT{R7{4*PARM1(R9){FAILP{FAIL IF TOO FAR ALREADY
        !          9358: {{MOV{4*PARM1(R9){R7{{ELSE SET NEW CURSOR POSITION
        !          9359: {{BLE{R7{PMSSL{SUCCP{SUCCEED IF NOT OFF END
        !          9360: {{BRN{FAILP{{{ELSE FAIL
        !          9361: {{EJC{{{{
        !          9362: *
        !          9363: *      TAB (EXPRESSION ARGUMENT)
        !          9364: *
        !          9365: *      PARM1                 EXPRESSION POINTER
        !          9366: *
        !          9367: {P$TBD{ENT{BL$P1{{{P1BLK
        !          9368: {{JSR{EVALI{{{EVALUATE INTEGER ARGUMENT
        !          9369: {{ERR{057{TAB{{EVALUATED ARGUMENT IS NOT INTEGER
        !          9370: {{ERR{058{TAB{{EVALUATED ARGUMENT IS NEGATIVE OR TOO LARGE
        !          9371: {{PPM{FAILP{{{FAIL IF EVALUATION FAILS
        !          9372: {{PPM{PTAB1{{{MERGE WITH NORMAL CASE IF OK
        !          9373: {{EJC{{{{
        !          9374: *
        !          9375: *      ANCHOR MOVEMENT
        !          9376: *
        !          9377: *      NO PARAMETERS (DUMMY NODE)
        !          9378: *
        !          9379: {P$UNA{ENT{{{{ENTRY POINT
        !          9380: {{MOV{R7{R9{{COPY INITIAL PATTERN NODE POINTER
        !          9381: {{MOV{(SP){R7{{GET INITIAL CURSOR
        !          9382: {{BEQ{R7{PMSSL{EXFAL{MATCH FAILS IF AT END OF STRING
        !          9383: {{ICV{R7{{{ELSE INCREMENT CURSOR
        !          9384: {{MOV{R7{(SP){{STORE INCREMENTED CURSOR
        !          9385: {{MOV{R9{-(SP){{RESTACK INITIAL NODE PTR
        !          9386: {{MOV{#NDUNA{-(SP){{RESTACK UNANCHORED NODE
        !          9387: {{BRI{(R9){{{REMATCH FIRST NODE
        !          9388: {{EJC{{{{
        !          9389: *
        !          9390: *      END OF PATTERN MATCH ROUTINES
        !          9391: *
        !          9392: *      THE FOLLOWING ENTRY POINT MARKS THE END OF THE PATTERN
        !          9393: *      MATCHING ROUTINES AND ALSO THE END OF THE ENTRY POINTS
        !          9394: *      REFERENCED FROM THE FIRST WORD OF BLOCKS IN DYNAMIC STORE
        !          9395: *
        !          9396: {P$YYY{ENT{BL$$I{{{MARK LAST ENTRY IN PATTERN SECTION
        !          9397: {{TTL{S{{{P I T B O L -- PREDEFINED SNOBOL4 FUNCTIONS
        !          9398: *
        !          9399: *      THE FOLLOWING SECTION CONTAINS CODING FOR FUNCTIONS
        !          9400: *      WHICH ARE PREDEFINED AND AVAILABLE AT THE SNOBOL LEVEL.
        !          9401: *
        !          9402: *      THESE ROUTINES RECEIVE CONTROL DIRECTLY FROM THE CODE OR
        !          9403: *      INDIRECTLY THROUGH THE O$FNC, O$FNS OR CFUNC ROUTINES.
        !          9404: *      IN BOTH CASES THE CONDITIONS ON ENTRY ARE AS FOLLOWS
        !          9405: *
        !          9406: *      THE ARGUMENTS ARE ON THE STACK. THE NUMBER OF ARGUMENTS
        !          9407: *      HAS BEEN ADJUSTED TO CORRESPOND TO THE SVBLK SVNAR FIELD.
        !          9408: *
        !          9409: *      IN CERTAIN FUNCTIONS THE DIRECT CALL IS NOT PERMITTED
        !          9410: *      AND IN THESE INSTANCES WE ALSO HAVE.
        !          9411: *
        !          9412: *      (WA)                  ACTUAL NUMBER OF ARGUMENTS IN CALL
        !          9413: *
        !          9414: *      CONTROL RETURNS BY PLACING THE FUNCTION RESULT VALUE ON
        !          9415: *      ON THE STACK AND CONTINUING EXECUTION WITH THE NEXT
        !          9416: *      WORD FROM THE GENERATED CODE.
        !          9417: *
        !          9418: *      THE NAMES OF THE ENTRY POINTS OF THESE FUNCTIONS ARE OF
        !          9419: *      THE FORM S$XXX WHERE XXX IS THE THREE LETTER CODE FOR
        !          9420: *      THE SYSTEM VARIABLE NAME. THE FUNCTIONS ARE IN ORDER
        !          9421: *      ALPHABETICALLY BY THEIR ENTRY NAMES.
        !          9422: {{EJC{{{{
        !          9423: *
        !          9424: *      ANY
        !          9425: *
        !          9426: {S$ANY{ENT{{{{ENTRY POINT
        !          9427: {{MOV{#P$ANS{R7{{SET PCODE FOR SINGLE CHAR CASE
        !          9428: {{MOV{#P$ANY{R10{{PCODE FOR MULTI-CHAR CASE
        !          9429: {{MOV{#P$AYD{R8{{PCODE FOR EXPRESSION CASE
        !          9430: {{JSR{PATST{{{CALL COMMON ROUTINE TO BUILD NODE
        !          9431: {{ERR{059{ANY{{ARGUMENT IS NOT STRING OR EXPRESSION
        !          9432: {{BRN{EXIXR{{{JUMP FOR NEXT CODE WORD
        !          9433: {{EJC{{{{
        !          9434: *
        !          9435: *      APPEND
        !          9436: *
        !          9437: {S$APN{ENT{{{{ENTRY POINT
        !          9438: {{MOV{(SP)+{R10{{GET APPEND ARGUMENT
        !          9439: {{MOV{(SP)+{R9{{GET BCBLK
        !          9440: {{BEQ{(R9){#B$BCT{SAPN1{OK IF FIRST ARG IS BCBLK
        !          9441: {{ERB{275{APPEND{{FIRST ARGUMENT IS NOT BUFFER
        !          9442: *
        !          9443: *      HERE TO DO THE APPEND
        !          9444: *
        !          9445: {SAPN1{JSR{APNDB{{{DO THE APPEND
        !          9446: {{ERR{276{APPEND{{SECOND ARGUMENT IS NOT STRING
        !          9447: {{PPM{EXFAL{{{NO ROOM - FAIL
        !          9448: {{BRN{EXNUL{{{EXIT WITH NULL RESULT
        !          9449: {{EJC{{{{
        !          9450: *
        !          9451: *      APPLY
        !          9452: *
        !          9453: *      APPLY DOES NOT PERMIT THE DIRECT (FAST) CALL SO THAT
        !          9454: *      WA CONTAINS THE ACTUAL NUMBER OF ARGUMENTS PASSED.
        !          9455: *
        !          9456: {S$APP{ENT{{{{ENTRY POINT
        !          9457: {{BZE{R6{SAPP3{{JUMP IF NO ARGUMENTS
        !          9458: {{DCV{R6{{{ELSE GET APPLIED FUNC ARG COUNT
        !          9459: {{MOV{R6{R7{{COPY
        !          9460: {{WTB{R7{{{CONVERT TO BYTES
        !          9461: {{MOV{SP{R10{{COPY STACK POINTER
        !          9462: {{ADD{R7{R10{{POINT TO FUNCTION ARGUMENT ON STACK
        !          9463: {{MOV{(R10){R9{{LOAD FUNCTION PTR (APPLY 1ST ARG)
        !          9464: {{BZE{R6{SAPP2{{JUMP IF NO ARGS FOR APPLIED FUNC
        !          9465: {{LCT{R7{R6{{ELSE SET COUNTER FOR LOOP
        !          9466: *
        !          9467: *      LOOP TO MOVE ARGUMENTS UP ON STACK
        !          9468: *
        !          9469: {SAPP1{DCA{R10{{{POINT TO NEXT ARGUMENT
        !          9470: {{MOV{(R10){4*1(R10){{MOVE ARGUMENT UP
        !          9471: {{BCT{R7{SAPP1{{LOOP TILL ALL MOVED
        !          9472: *
        !          9473: *      MERGE HERE TO CALL FUNCTION (WA = NUMBER OF ARGUMENTS)
        !          9474: *
        !          9475: {SAPP2{ICA{SP{{{ADJUST STACK PTR FOR APPLY 1ST ARG
        !          9476: {{JSR{GTNVR{{{GET VARIABLE BLOCK ADDR FOR FUNC
        !          9477: {{PPM{SAPP3{{{JUMP IF NOT NATURAL VARIABLE
        !          9478: {{MOV{4*VRFNC(R9){R10{{ELSE POINT TO FUNCTION BLOCK
        !          9479: {{BRN{CFUNC{{{GO CALL APPLIED FUNCTION
        !          9480: *
        !          9481: *      HERE FOR INVALID FIRST ARGUMENT
        !          9482: *
        !          9483: {SAPP3{ERB{060{APPLY{{FIRST ARG IS NOT NATURAL VARIABLE NAME
        !          9484: {{EJC{{{{
        !          9485: *
        !          9486: *      ARBNO
        !          9487: *
        !          9488: *      ARBNO BUILDS A COMPOUND PATTERN. SEE DESCRIPTION AT
        !          9489: *      START OF PATTERN MATCHING SECTION FOR STRUCTURE FORMED.
        !          9490: *
        !          9491: {S$ABN{ENT{{{{ENTRY POINT
        !          9492: {{ZER{R9{{{SET PARM1 = 0 FOR THE MOMENT
        !          9493: {{MOV{#P$ALT{R7{{SET PCODE FOR ALTERNATIVE NODE
        !          9494: {{JSR{PBILD{{{BUILD ALTERNATIVE NODE
        !          9495: {{MOV{R9{R10{{SAVE PTR TO ALTERNATIVE PATTERN
        !          9496: {{MOV{#P$ABC{R7{{PCODE FOR P$ABC
        !          9497: {{ZER{R9{{{P0BLK
        !          9498: {{JSR{PBILD{{{BUILD P$ABC NODE
        !          9499: {{MOV{R10{4*PTHEN(R9){{PUT ALTERNATIVE NODE AS SUCCESSOR
        !          9500: {{MOV{R10{R6{{REMEMBER ALTERNATIVE NODE POINTER
        !          9501: {{MOV{R9{R10{{COPY P$ABC NODE PTR
        !          9502: {{MOV{(SP){R9{{LOAD ARBNO ARGUMENT
        !          9503: {{MOV{R6{(SP){{STACK ALTERNATIVE NODE POINTER
        !          9504: {{JSR{GTPAT{{{GET ARBNO ARGUMENT AS PATTERN
        !          9505: {{ERR{061{ARBNO{{ARGUMENT IS NOT PATTERN
        !          9506: {{JSR{PCONC{{{CONCAT ARG WITH P$ABC NODE
        !          9507: {{MOV{R9{R10{{REMEMBER PTR TO CONCD PATTERNS
        !          9508: {{MOV{#P$ABA{R7{{PCODE FOR P$ABA
        !          9509: {{ZER{R9{{{P0BLK
        !          9510: {{JSR{PBILD{{{BUILD P$ABA NODE
        !          9511: {{MOV{R10{4*PTHEN(R9){{CONCATENATE NODES
        !          9512: {{MOV{(SP){R10{{RECALL PTR TO ALTERNATIVE NODE
        !          9513: {{MOV{R9{4*PARM1(R10){{POINT ALTERNATIVE BACK TO ARGUMENT
        !          9514: {{BRN{EXITS{{{JUMP FOR NEXT CODE WORD
        !          9515: {{EJC{{{{
        !          9516: *
        !          9517: *      ARG
        !          9518: *
        !          9519: {S$ARG{ENT{{{{ENTRY POINT
        !          9520: {{JSR{GTSMI{{{GET SECOND ARG AS SMALL INTEGER
        !          9521: {{ERR{062{ARG{{SECOND ARGUMENT IS NOT INTEGER
        !          9522: {{PPM{EXFAL{{{FAIL IF OUT OF RANGE OR NEGATIVE
        !          9523: {{MOV{R9{R6{{SAVE ARGUMENT NUMBER
        !          9524: {{MOV{(SP)+{R9{{LOAD FIRST ARGUMENT
        !          9525: {{JSR{GTNVR{{{LOCATE VRBLK
        !          9526: {{PPM{SARG1{{{JUMP IF NOT NATURAL VARIABLE
        !          9527: {{MOV{4*VRFNC(R9){R9{{ELSE LOAD FUNCTION BLOCK POINTER
        !          9528: {{BNE{(R9){#B$PFC{SARG1{JUMP IF NOT PROGRAM DEFINED
        !          9529: {{BZE{R6{EXFAL{{FAIL IF ARG NUMBER IS ZERO
        !          9530: {{BGT{R6{4*FARGS(R9){EXFAL{FAIL IF ARG NUMBER IS TOO LARGE
        !          9531: {{WTB{R6{{{ELSE CONVERT TO BYTE OFFSET
        !          9532: {{ADD{R6{R9{{POINT TO ARGUMENT SELECTED
        !          9533: {{MOV{4*PFAGB(R9){R9{{LOAD ARGUMENT VRBLK POINTER
        !          9534: {{BRN{EXVNM{{{EXIT TO BUILD NMBLK
        !          9535: *
        !          9536: *      HERE IF 1ST ARGUMENT IS BAD
        !          9537: *
        !          9538: {SARG1{ERB{063{ARG{{FIRST ARGUMENT IS NOT PROGRAM FUNCTION NAME
        !          9539: {{EJC{{{{
        !          9540: *
        !          9541: *      ARRAY
        !          9542: *
        !          9543: {S$ARR{ENT{{{{ENTRY POINT
        !          9544: {{MOV{(SP)+{R10{{LOAD INITIAL ELEMENT VALUE
        !          9545: {{MOV{(SP)+{R9{{LOAD FIRST ARGUMENT
        !          9546: {{JSR{GTINT{{{CONVERT FIRST ARG TO INTEGER
        !          9547: {{PPM{SAR02{{{JUMP IF NOT INTEGER
        !          9548: *
        !          9549: *      HERE FOR INTEGER FIRST ARGUMENT, BUILD VCBLK
        !          9550: *
        !          9551: {{LDI{4*ICVAL(R9){{{LOAD INTEGER VALUE
        !          9552: {{ILE{SAR10{{{JUMP IF ZERO OR NEG (BAD DIMENSION)
        !          9553: {{MFI{R6{SAR11{{ELSE CONVERT TO ONE WORD, TEST OVFL
        !          9554: {{LCT{R7{R6{{COPY ELEMENTS FOR LOOP LATER ON
        !          9555: {{ADD{#VCSI${R6{{ADD SPACE FOR STANDARD FIELDS
        !          9556: {{WTB{R6{{{CONVERT LENGTH TO BYTES
        !          9557: {{BGE{R6{MXLEN{SAR11{FAIL IF TOO LARGE
        !          9558: {{JSR{ALLOC{{{ALLOCATE SPACE FOR VCBLK
        !          9559: {{MOV{#B$VCT{(R9){{STORE TYPE WORD
        !          9560: {{MOV{R6{4*VCLEN(R9){{SET LENGTH
        !          9561: {{MOV{R10{R8{{COPY DEFAULT VALUE
        !          9562: {{MOV{R9{R10{{COPY VCBLK POINTER
        !          9563: {{ADD{#4*VCVLS{R10{{POINT TO FIRST ELEMENT VALUE
        !          9564: *
        !          9565: *      LOOP TO SET VECTOR ELEMENTS TO DEFAULT VALUE
        !          9566: *
        !          9567: {SAR01{MOV{R8{(R10)+{{STORE ONE VALUE
        !          9568: {{BCT{R7{SAR01{{LOOP TILL ALL STORED
        !          9569: {{BRN{EXSID{{{EXIT SETTING IDVAL
        !          9570: {{EJC{{{{
        !          9571: *
        !          9572: *      ARRAY (CONTINUED)
        !          9573: *
        !          9574: *      HERE IF FIRST ARGUMENT IS NOT AN INTEGER
        !          9575: *
        !          9576: {SAR02{MOV{R9{-(SP){{REPLACE ARGUMENT ON STACK
        !          9577: {{JSR{XSCNI{{{INITIALIZE SCAN OF FIRST ARGUMENT
        !          9578: {{ERR{064{ARRAY{{FIRST ARGUMENT IS NOT INTEGER OR STRING
        !          9579: {{PPM{EXNUL{{{DUMMY (UNUSED) NULL STRING EXIT
        !          9580: {{MOV{R$XSC{-(SP){{SAVE PROTOTYPE POINTER
        !          9581: {{MOV{R10{-(SP){{SAVE DEFAULT VALUE
        !          9582: {{ZER{ARCDM{{{ZERO COUNT OF DIMENSIONS
        !          9583: {{ZER{ARPTR{{{ZERO OFFSET TO INDICATE PASS ONE
        !          9584: {{LDI{INTV1{{{LOAD INTEGER ONE
        !          9585: {{STI{ARNEL{{{INITIALIZE ELEMENT COUNT
        !          9586: *
        !          9587: *      THE FOLLOWING CODE IS EXECUTED TWICE. THE FIRST TIME
        !          9588: *      (ARPTR EQ 0), IT IS USED TO COUNT THE NUMBER OF ELEMENTS
        !          9589: *      AND NUMBER OF DIMENSIONS. THE SECOND TIME (ARPTR GT 0) IS
        !          9590: *      USED TO ACTUALLY FILL IN THE DIM,LBD FIELDS OF THE ARBLK.
        !          9591: *
        !          9592: {SAR03{LDI{INTV1{{{LOAD ONE AS DEFAULT LOW BOUND
        !          9593: {{STI{ARSVL{{{SAVE AS LOW BOUND
        !          9594: {{MOV{#CH$CL{R8{{SET DELIMITER ONE = COLON
        !          9595: {{MOV{#CH$CM{R10{{SET DELIMITER TWO = COMMA
        !          9596: {{JSR{XSCAN{{{SCAN NEXT BOUND
        !          9597: {{BNE{R6{#NUM01{SAR04{JUMP IF NOT COLON
        !          9598: *
        !          9599: *      HERE WE HAVE A COLON ENDING A LOW BOUND
        !          9600: *
        !          9601: {{JSR{GTINT{{{CONVERT LOW BOUND
        !          9602: {{ERR{065{ARRAY{{FIRST ARGUMENT LOWER BOUND IS NOT INTEGER
        !          9603: {{LDI{4*ICVAL(R9){{{LOAD VALUE OF LOW BOUND
        !          9604: {{STI{ARSVL{{{STORE LOW BOUND VALUE
        !          9605: {{MOV{#CH$CM{R8{{SET DELIMITER ONE = COMMA
        !          9606: {{MOV{R8{R10{{AND DELIMITER TWO = COMMA
        !          9607: {{JSR{XSCAN{{{SCAN HIGH BOUND
        !          9608: {{EJC{{{{
        !          9609: *
        !          9610: *      ARRAY (CONTINUED)
        !          9611: *
        !          9612: *      MERGE HERE TO PROCESS UPPER BOUND
        !          9613: *
        !          9614: {SAR04{JSR{GTINT{{{CONVERT HIGH BOUND TO INTEGER
        !          9615: {{ERR{066{ARRAY{{FIRST ARGUMENT UPPER BOUND IS NOT INTEGER
        !          9616: {{LDI{4*ICVAL(R9){{{GET HIGH BOUND
        !          9617: {{SBI{ARSVL{{{SUBTRACT LOWER BOUND
        !          9618: {{IOV{SAR10{{{BAD DIMENSION IF OVERFLOW
        !          9619: {{ILT{SAR10{{{BAD DIMENSION IF NEGATIVE
        !          9620: {{ADI{INTV1{{{ADD 1 TO GET DIMENSION
        !          9621: {{IOV{SAR10{{{BAD DIMENSION IF OVERFLOW
        !          9622: {{MOV{ARPTR{R10{{LOAD OFFSET (ALSO PASS INDICATOR)
        !          9623: {{BZE{R10{SAR05{{JUMP IF FIRST PASS
        !          9624: *
        !          9625: *      HERE IN SECOND PASS TO STORE LBD AND DIM IN ARBLK
        !          9626: *
        !          9627: {{ADD{(SP){R10{{POINT TO CURRENT LOCATION IN ARBLK
        !          9628: {{STI{4*CFP$I(R10){{{STORE DIMENSION
        !          9629: {{LDI{ARSVL{{{LOAD LOW BOUND
        !          9630: {{STI{(R10){{{STORE LOW BOUND
        !          9631: {{ADD{#4*ARDMS{ARPTR{{BUMP OFFSET TO NEXT BOUNDS
        !          9632: {{BRN{SAR06{{{JUMP TO CHECK FOR END OF BOUNDS
        !          9633: *
        !          9634: *      HERE IN PASS 1
        !          9635: *
        !          9636: {SAR05{ICV{ARCDM{{{BUMP DIMENSION COUNT
        !          9637: {{MLI{ARNEL{{{MULTIPLY DIMENSION BY COUNT SO FAR
        !          9638: {{IOV{SAR11{{{TOO LARGE IF OVERFLOW
        !          9639: {{STI{ARNEL{{{ELSE STORE UPDATED ELEMENT COUNT
        !          9640: *
        !          9641: *      MERGE HERE AFTER PROCESSING ONE SET OF BOUNDS
        !          9642: *
        !          9643: {SAR06{BNZ{R6{SAR03{{LOOP BACK UNLESS END OF BOUNDS
        !          9644: {{BNZ{ARPTR{SAR09{{JUMP IF END OF PASS 2
        !          9645: {{EJC{{{{
        !          9646: *
        !          9647: *      ARRAY (CONTINUED)
        !          9648: *
        !          9649: *      HERE AT END OF PASS ONE, BUILD ARBLK
        !          9650: *
        !          9651: {{LDI{ARNEL{{{GET NUMBER OF ELEMENTS
        !          9652: {{MFI{R7{SAR11{{GET AS ADDR INTEGER, TEST OVFLO
        !          9653: {{WTB{R7{{{ELSE CONVERT TO LENGTH IN BYTES
        !          9654: {{MOV{#4*ARSI${R6{{SET SIZE OF STANDARD FIELDS
        !          9655: {{LCT{R8{ARCDM{{SET DIMENSION COUNT TO CONTROL LOOP
        !          9656: *
        !          9657: *      LOOP TO ALLOW SPACE FOR DIMENSIONS
        !          9658: *
        !          9659: {SAR07{ADD{#4*ARDMS{R6{{ALLOW SPACE FOR ONE SET OF BOUNDS
        !          9660: {{BCT{R8{SAR07{{LOOP BACK TILL ALL ACCOUNTED FOR
        !          9661: {{MOV{R6{R10{{SAVE SIZE (=AROFS)
        !          9662: *
        !          9663: *      NOW ALLOCATE SPACE FOR ARBLK
        !          9664: *
        !          9665: {{ADD{R7{R6{{ADD SPACE FOR ELEMENTS
        !          9666: {{ICA{R6{{{ALLOW FOR ARPRO PROTOTYPE FIELD
        !          9667: {{BGE{R6{MXLEN{SAR11{FAIL IF TOO LARGE
        !          9668: {{JSR{ALLOC{{{ELSE ALLOCATE ARBLK
        !          9669: {{MOV{(SP){R7{{LOAD DEFAULT VALUE
        !          9670: {{MOV{R9{(SP){{SAVE ARBLK POINTER
        !          9671: {{MOV{R6{R8{{SAVE LENGTH IN BYTES
        !          9672: {{BTW{R6{{{CONVERT LENGTH BACK TO WORDS
        !          9673: {{LCT{R6{R6{{SET COUNTER TO CONTROL LOOP
        !          9674: *
        !          9675: *      LOOP TO CLEAR ENTIRE ARBLK TO DEFAULT VALUE
        !          9676: *
        !          9677: {SAR08{MOV{R7{(R9)+{{SET ONE WORD
        !          9678: {{BCT{R6{SAR08{{LOOP TILL ALL SET
        !          9679: {{EJC{{{{
        !          9680: *
        !          9681: *      ARRAY (CONTINUED)
        !          9682: *
        !          9683: *      NOW SET INITIAL FIELDS OF ARBLK
        !          9684: *
        !          9685: {{MOV{(SP)+{R9{{RELOAD ARBLK POINTER
        !          9686: {{MOV{(SP){R7{{LOAD PROTOTYPE
        !          9687: {{MOV{#B$ART{(R9){{SET TYPE WORD
        !          9688: {{MOV{R8{4*ARLEN(R9){{STORE LENGTH IN BYTES
        !          9689: {{ZER{4*IDVAL(R9){{{ZERO ID TILL WE GET IT BUILT
        !          9690: {{MOV{R10{4*AROFS(R9){{SET PROTOTYPE FIELD PTR
        !          9691: {{MOV{ARCDM{4*ARNDM(R9){{SET NUMBER OF DIMENSIONS
        !          9692: {{MOV{R9{R8{{SAVE ARBLK POINTER
        !          9693: {{ADD{R10{R9{{POINT TO PROTOTYPE FIELD
        !          9694: {{MOV{R7{(R9){{STORE PROTOTYPE PTR IN ARBLK
        !          9695: {{MOV{#4*ARLBD{ARPTR{{SET OFFSET FOR PASS 2 BOUNDS SCAN
        !          9696: {{MOV{R7{R$XSC{{RESET STRING POINTER FOR XSCAN
        !          9697: {{MOV{R8{(SP){{STORE ARBLK POINTER ON STACK
        !          9698: {{ZER{XSOFS{{{RESET OFFSET PTR TO START OF STRING
        !          9699: {{BRN{SAR03{{{JUMP BACK TO RESCAN BOUNDS
        !          9700: *
        !          9701: *      HERE AFTER FILLING IN BOUNDS INFORMATION (END PASS TWO)
        !          9702: *
        !          9703: {SAR09{MOV{(SP)+{R9{{RELOAD POINTER TO ARBLK
        !          9704: {{BRN{EXSID{{{EXIT SETTING IDVAL
        !          9705: *
        !          9706: *      HERE FOR BAD DIMENSION
        !          9707: *
        !          9708: {SAR10{ERB{067{ARRAY{{DIMENSION IS ZERO,NEGATIVE OR OUT OF RANGE
        !          9709: *
        !          9710: *      HERE IF ARRAY IS TOO LARGE
        !          9711: *
        !          9712: {SAR11{ERB{068{ARRAY{{SIZE EXCEEDS MAXIMUM PERMITTED
        !          9713: {{EJC{{{{
        !          9714: *
        !          9715: *      BUFFER
        !          9716: *
        !          9717: {S$BUF{ENT{{{{ENTRY POINT
        !          9718: {{MOV{(SP)+{R10{{GET INITIAL VALUE
        !          9719: {{MOV{(SP)+{R9{{GET REQUESTED ALLOCATION
        !          9720: {{JSR{GTINT{{{CONVERT TO INTEGER
        !          9721: {{ERR{269{BUFFER{{FIRST ARGUMENT IS NOT INTEGER
        !          9722: {{LDI{4*ICVAL(R9){{{GET VALUE
        !          9723: {{ILE{SBF01{{{BRANCH IF NEGATIVE OR ZERO
        !          9724: {{MFI{R6{SBF02{{MOVE WITH OVERFLOW CHECK
        !          9725: {{JSR{ALOBF{{{ALLOCATE THE BUFFER
        !          9726: {{JSR{APNDB{{{COPY IT IN
        !          9727: {{ERR{270{BUFFER{{SECOND ARGUMENT IS NOT STRING OR BUFFER
        !          9728: {{ERR{271{BUFFER{{INITIAL VALUE TOO BIG FOR ALLOCATION
        !          9729: {{BRN{EXSID{{{EXIT SETTING IDVAL
        !          9730: *
        !          9731: *      HERE FOR INVALID ALLOCATION SIZE
        !          9732: *
        !          9733: {SBF01{ERB{272{BUFFER{{FIRST ARGUMENT IS NOT POSITIVE
        !          9734: *
        !          9735: *      HERE FOR ALLOCATION SIZE INTEGER OVERFLOW
        !          9736: *
        !          9737: {SBF02{ERB{273{BUFFER{{SIZE IS TOO BIG
        !          9738: {{EJC{{{{
        !          9739: *
        !          9740: *      BREAK
        !          9741: *
        !          9742: {S$BRK{ENT{{{{ENTRY POINT
        !          9743: {{MOV{#P$BKS{R7{{SET PCODE FOR SINGLE CHAR CASE
        !          9744: {{MOV{#P$BRK{R10{{PCODE FOR MULTI-CHAR CASE
        !          9745: {{MOV{#P$BKD{R8{{PCODE FOR EXPRESSION CASE
        !          9746: {{JSR{PATST{{{CALL COMMON ROUTINE TO BUILD NODE
        !          9747: {{ERR{069{BREAK{{ARGUMENT IS NOT STRING OR EXPRESSION
        !          9748: {{BRN{EXIXR{{{JUMP FOR NEXT CODE WORD
        !          9749: {{EJC{{{{
        !          9750: *
        !          9751: *      BREAKX
        !          9752: *
        !          9753: *      BREAKX IS A COMPOUND PATTERN. SEE DESCRIPTION AT START
        !          9754: *      OF PATTERN MATCHING SECTION FOR STRUCTURE FORMED.
        !          9755: *
        !          9756: {S$BKX{ENT{{{{ENTRY POINT
        !          9757: {{MOV{#P$BKS{R7{{PCODE FOR SINGLE CHAR ARGUMENT
        !          9758: {{MOV{#P$BRK{R10{{PCODE FOR MULTI-CHAR ARGUMENT
        !          9759: {{MOV{#P$BXD{R8{{PCODE FOR EXPRESSION CASE
        !          9760: {{JSR{PATST{{{CALL COMMON ROUTINE TO BUILD NODE
        !          9761: {{ERR{070{BREAKX{{ARGUMENT IS NOT STRING OR EXPRESSION
        !          9762: *
        !          9763: *      NOW HOOK BREAKX NODE ON AT FRONT END
        !          9764: *
        !          9765: {{MOV{R9{-(SP){{SAVE PTR TO BREAK NODE
        !          9766: {{MOV{#P$BKX{R7{{SET PCODE FOR BREAKX NODE
        !          9767: {{JSR{PBILD{{{BUILD IT
        !          9768: {{MOV{(SP){4*PTHEN(R9){{SET BREAK NODE AS SUCCESSOR
        !          9769: {{MOV{#P$ALT{R7{{SET PCODE FOR ALTERNATION NODE
        !          9770: {{JSR{PBILD{{{BUILD (PARM1=ALT=BREAKX NODE)
        !          9771: {{MOV{R9{R6{{SAVE PTR TO ALTERNATION NODE
        !          9772: {{MOV{(SP){R9{{POINT TO BREAK NODE
        !          9773: {{MOV{R6{4*PTHEN(R9){{SET ALTERNATE NODE AS SUCCESSOR
        !          9774: {{BRN{EXITS{{{EXIT WITH RESULT ON STACK
        !          9775: {{EJC{{{{
        !          9776: *
        !          9777: *      CHAR
        !          9778: *
        !          9779: {S$CHR{ENT{{{{ENTRY POINT
        !          9780: {{JSR{GTSMI{{{CONVERT ARG TO INTEGER
        !          9781: {{ERR{281{CHAR{{ARGUMENT NOT INTEGER
        !          9782: {{PPM{SCHR1{{{TOO BIG ERROR EXIT
        !          9783: {{BGE{R8{#CFP$A{SCHR1{SEE IF OUT OF RANGE OF HOST SET
        !          9784: {{MOV{#NUM01{R6{{IF NOT SET SCBLK ALLOCATION
        !          9785: {{MOV{R8{R7{{SAVE CHAR CODE
        !          9786: {{JSR{ALOCS{{{ALLOCATE 1 BAU SCBLK
        !          9787: {{MOV{R9{R10{{COPY SCBLK POINTER
        !          9788: {{PSC{R10{{{GET SET TO STUFF CHAR
        !          9789: {{SCH{R7{(R10)+{{STUFF IT
        !          9790: {{ZER{R10{{{CLEAR SLOP IN XL
        !          9791: {{BRN{EXIXR{{{EXIT WITH SCBLK POINTER
        !          9792: *
        !          9793: *      HERE IF CHAR ARGUMENT IS OUT OF RANGE
        !          9794: *
        !          9795: {SCHR1{ERB{282{CHAR{{ARGUMENT NOT IN RANGE
        !          9796: {{EJC{{{{
        !          9797: *
        !          9798: *      CLEAR
        !          9799: *
        !          9800: {S$CLR{ENT{{{{ENTRY POINT
        !          9801: {{JSR{XSCNI{{{INITIALIZE TO SCAN ARGUMENT
        !          9802: {{ERR{071{CLEAR{{ARGUMENT IS NOT STRING
        !          9803: {{PPM{SCLR2{{{JUMP IF NULL
        !          9804: *
        !          9805: *      LOOP TO SCAN OUT NAMES IN FIRST ARGUMENT. VARIABLES IN
        !          9806: *      THE LIST ARE FALGGED BY SETTING VRGET OF VRBLK TO ZERO.
        !          9807: *
        !          9808: {SCLR1{MOV{#CH$CM{R8{{SET DELIMITER ONE = COMMA
        !          9809: {{MOV{R8{R10{{DELIMITER TWO = COMMA
        !          9810: {{JSR{XSCAN{{{SCAN NEXT VARIABLE NAME
        !          9811: {{JSR{GTNVR{{{LOCATE VRBLK
        !          9812: {{ERR{072{CLEAR{{ARGUMENT HAS NULL VARIABLE NAME
        !          9813: {{ZER{4*VRGET(R9){{{ELSE FLAG BY ZEROING VRGET FIELD
        !          9814: {{BNZ{R6{SCLR1{{LOOP BACK IF STOPPED BY COMMA
        !          9815: *
        !          9816: *      HERE AFTER FLAGGING VARIABLES IN ARGUMENT LIST
        !          9817: *
        !          9818: {SCLR2{MOV{HSHTB{R7{{POINT TO START OF HASH TABLE
        !          9819: *
        !          9820: *      LOOP THROUGH SLOTS IN HASH TABLE
        !          9821: *
        !          9822: {SCLR3{BEQ{R7{HSHTE{EXNUL{EXIT RETURNING NULL IF NONE LEFT
        !          9823: {{MOV{R7{R9{{ELSE COPY SLOT POINTER
        !          9824: {{ICA{R7{{{BUMP SLOT POINTER
        !          9825: {{SUB{#4*VRNXT{R9{{SET OFFSET TO MERGE INTO LOOP
        !          9826: *
        !          9827: *      LOOP THROUGH VRBLKS ON ONE HASH CHAIN
        !          9828: *
        !          9829: {SCLR4{MOV{4*VRNXT(R9){R9{{POINT TO NEXT VRBLK ON CHAIN
        !          9830: {{BZE{R9{SCLR3{{JUMP FOR NEXT BUCKET IF CHAIN END
        !          9831: {{BNZ{4*VRGET(R9){SCLR5{{JUMP IF NOT FLAGGED
        !          9832: {{EJC{{{{
        !          9833: *
        !          9834: *      CLEAR (CONTINUED)
        !          9835: *
        !          9836: *      HERE FOR FLAGGED VARIABLE, DO NOT SET VALUE TO NULL
        !          9837: *
        !          9838: {{JSR{SETVR{{{FOR FLAGGED VAR, RESTORE VRGET
        !          9839: {{BRN{SCLR4{{{AND LOOP BACK FOR NEXT VRBLK
        !          9840: *
        !          9841: *      HERE TO SET VALUE OF A VARIABLE TO NULL
        !          9842: *      PRROTECTED VARIABLES (ARB, ETC) ARE EXEMPT
        !          9843: *
        !          9844: {SCLR5{BEQ{4*VRSTO(R9){#B$VRE{SCLR4{CHECK FOR PROTECTED VARIABLE (REG05)
        !          9845: {{MOV{R9{R10{{COPY VRBLK POINTER (REG05)
        !          9846: *
        !          9847: *      LOOP TO LOCATE VALUE AT END OF POSSIBLE TRBLK CHAIN
        !          9848: *
        !          9849: {SCLR6{MOV{R10{R6{{SAVE BLOCK POINTER
        !          9850: {{MOV{4*VRVAL(R10){R10{{LOAD NEXT VALUE FIELD
        !          9851: {{BEQ{(R10){#B$TRT{SCLR6{LOOP BACK IF TRAPPED
        !          9852: *
        !          9853: *      NOW STORE THE NULL VALUE
        !          9854: *
        !          9855: {{MOV{R6{R10{{RESTORE BLOCK POINTER
        !          9856: {{MOV{#NULLS{4*VRVAL(R10){{STORE NULL CONSTANT VALUE
        !          9857: {{BRN{SCLR4{{{LOOP BACK FOR NEXT VRBLK
        !          9858: {{EJC{{{{
        !          9859: *
        !          9860: *      CODE
        !          9861: *
        !          9862: {S$COD{ENT{{{{ENTRY POINT
        !          9863: {{MOV{(SP)+{R9{{LOAD ARGUMENT
        !          9864: {{JSR{GTCOD{{{CONVERT TO CODE
        !          9865: {{PPM{EXFAL{{{FAIL IF CONVERSION IS IMPOSSIBLE
        !          9866: {{BRN{EXIXR{{{ELSE RETURN CODE AS RESULT
        !          9867: {{EJC{{{{
        !          9868: *
        !          9869: *      COLLECT
        !          9870: *
        !          9871: {S$COL{ENT{{{{ENTRY POINT
        !          9872: {{MOV{(SP)+{R9{{LOAD ARGUMENT
        !          9873: {{JSR{GTINT{{{CONVERT TO INTEGER
        !          9874: {{ERR{073{COLLECT{{ARGUMENT IS NOT INTEGER
        !          9875: {{LDI{4*ICVAL(R9){{{LOAD COLLECT ARGUMENT
        !          9876: {{STI{CLSVI{{{SAVE COLLECT ARGUMENT
        !          9877: {{ZER{R7{{{SET NO MOVE UP
        !          9878: {{JSR{GBCOL{{{PERFORM GARBAGE COLLECTION
        !          9879: {{MOV{DNAME{R6{{POINT TO END OF MEMORY
        !          9880: {{SUB{DNAMP{R6{{SUBTRACT NEXT LOCATION
        !          9881: {{BTW{R6{{{CONVERT BYTES TO WORDS
        !          9882: {{MTI{R6{{{CONVERT WORDS AVAILABLE AS INTEGER
        !          9883: {{SBI{CLSVI{{{SUBTRACT ARGUMENT
        !          9884: {{IOV{EXFAL{{{FAIL IF OVERFLOW
        !          9885: {{ILT{EXFAL{{{FAIL IF NOT ENOUGH
        !          9886: {{ADI{CLSVI{{{ELSE RECOMPUTE AVAILABLE
        !          9887: {{BRN{EXINT{{{AND EXIT WITH INTEGER RESULT
        !          9888: {{EJC{{{{
        !          9889: *
        !          9890: *      CONVERT
        !          9891: *
        !          9892: {S$CNV{ENT{{{{ENTRY POINT
        !          9893: {{JSR{GTSTG{{{CONVERT SECOND ARGUMENT TO STRING
        !          9894: {{ERR{074{CONVERT{{SECOND ARGUMENT IS NOT STRING
        !          9895: {{JSR{FLSTG{{{FOLD LOWER CASE TO UPPER CASE
        !          9896: {{MOV{(SP){R10{{LOAD FIRST ARGUMENT
        !          9897: {{BNE{(R10){#B$PDT{SCV01{JUMP IF NOT PROGRAM DEFINED
        !          9898: *
        !          9899: *      HERE FOR PROGRAM DEFINED DATATYPE
        !          9900: *
        !          9901: {{MOV{4*PDDFP(R10){R10{{POINT TO DFBLK
        !          9902: {{MOV{4*DFNAM(R10){R10{{LOAD DATATYPE NAME
        !          9903: {{JSR{IDENT{{{COMPARE WITH SECOND ARG
        !          9904: {{PPM{EXITS{{{EXIT IF IDENT WITH ARG AS RESULT
        !          9905: {{BRN{EXFAL{{{ELSE FAIL
        !          9906: *
        !          9907: *      HERE IF NOT PROGRAM DEFINED DATATYPE
        !          9908: *
        !          9909: {SCV01{MOV{R9{-(SP){{SAVE STRING ARGUMENT
        !          9910: {{MOV{#SVCTB{R10{{POINT TO TABLE OF NAMES TO COMPARE
        !          9911: {{ZER{R7{{{INITIALIZE COUNTER
        !          9912: {{MOV{R6{R8{{SAVE LENGTH OF ARGUMENT STRING
        !          9913: *
        !          9914: *      LOOP THROUGH TABLE ENTRIES
        !          9915: *
        !          9916: {SCV02{MOV{(R10)+{R9{{LOAD NEXT TABLE ENTRY, BUMP POINTER
        !          9917: {{BZE{R9{EXFAL{{FAIL IF ZERO MARKING END OF LIST
        !          9918: {{BNE{R8{4*SCLEN(R9){SCV05{JUMP IF WRONG LENGTH
        !          9919: {{MOV{R10{CNVTP{{ELSE STORE TABLE POINTER
        !          9920: {{PLC{R9{{{POINT TO CHARS OF TABLE ENTRY
        !          9921: {{MOV{(SP){R10{{LOAD POINTER TO STRING ARGUMENT
        !          9922: {{PLC{R10{{{POINT TO CHARS OF STRING ARG
        !          9923: {{MOV{R8{R6{{SET NUMBER OF CHARS TO COMPARE
        !          9924: {{CMC{SCV04{SCV04{{COMPARE, JUMP IF NO MATCH
        !          9925: {{EJC{{{{
        !          9926: *
        !          9927: *      CONVERT (CONTINUED)
        !          9928: *
        !          9929: *      HERE WE HAVE A MATCH
        !          9930: *
        !          9931: {SCV03{MOV{R7{R10{{COPY ENTRY NUMBER
        !          9932: {{ICA{SP{{{POP STRING ARG OFF STACK
        !          9933: {{MOV{(SP)+{R9{{LOAD FIRST ARGUMENT
        !          9934: {{BSW{R10{CNVTT{{JUMP TO APPROPRIATE ROUTINE
        !          9935: {{IFF{0{SCV06{{STRING
        !          9936: {{IFF{1{SCV07{{INTEGER
        !          9937: {{IFF{2{SCV09{{NAME
        !          9938: {{IFF{3{SCV10{{PATTERN
        !          9939: {{IFF{4{SCV11{{ARRAY
        !          9940: {{IFF{5{SCV19{{TABLE
        !          9941: {{IFF{6{SCV25{{EXPRESSION
        !          9942: {{IFF{7{SCV26{{CODE
        !          9943: {{IFF{8{SCV27{{NUMERIC
        !          9944: {{IFF{CNVRT{SCV08{{REAL
        !          9945: {{IFF{CNVBT{SCV28{{BUFFER
        !          9946: {{ESW{{{{END OF SWITCH TABLE
        !          9947: *
        !          9948: *      HERE IF NO MATCH WITH TABLE ENTRY
        !          9949: *
        !          9950: {SCV04{MOV{CNVTP{R10{{RESTORE TABLE POINTER, MERGE
        !          9951: *
        !          9952: *      MERGE HERE IF LENGTHS DID NOT MATCH
        !          9953: *
        !          9954: {SCV05{ICV{R7{{{BUMP ENTRY NUMBER
        !          9955: {{BRN{SCV02{{{LOOP BACK TO CHECK NEXT ENTRY
        !          9956: *
        !          9957: *      HERE TO CONVERT TO STRING
        !          9958: *
        !          9959: {SCV06{MOV{R9{-(SP){{REPLACE STRING ARGUMENT ON STACK
        !          9960: {{JSR{GTSTG{{{CONVERT TO STRING
        !          9961: {{PPM{EXFAL{{{FAIL IF CONVERSION NOT POSSIBLE
        !          9962: {{BRN{EXIXR{{{ELSE RETURN STRING
        !          9963: {{EJC{{{{
        !          9964: *
        !          9965: *      CONVERT (CONTINUED)
        !          9966: *
        !          9967: *      HERE TO CONVERT TO INTEGER
        !          9968: *
        !          9969: {SCV07{JSR{GTINT{{{CONVERT TO INTEGER
        !          9970: {{PPM{EXFAL{{{FAIL IF CONVERSION NOT POSSIBLE
        !          9971: {{BRN{EXIXR{{{ELSE RETURN INTEGER
        !          9972: *
        !          9973: *      HERE TO CONVERT TO REAL
        !          9974: *
        !          9975: {SCV08{JSR{GTREA{{{CONVERT TO REAL
        !          9976: {{PPM{EXFAL{{{FAIL IF CONVERSION NOT POSSIBLE
        !          9977: {{BRN{EXIXR{{{ELSE RETURN REAL
        !          9978: *
        !          9979: *      HERE TO CONVERT TO NAME
        !          9980: *
        !          9981: {SCV09{BEQ{(R9){#B$NML{EXIXR{RETURN IF ALREADY A NAME
        !          9982: {{JSR{GTNVR{{{ELSE TRY STRING TO NAME CONVERT
        !          9983: {{PPM{EXFAL{{{FAIL IF CONVERSION NOT POSSIBLE
        !          9984: {{BRN{EXVNM{{{ELSE EXIT BUILDING NMBLK FOR VRBLK
        !          9985: *
        !          9986: *      HERE TO CONVERT TO PATTERN
        !          9987: *
        !          9988: {SCV10{JSR{GTPAT{{{CONVERT TO PATTERN
        !          9989: {{PPM{EXFAL{{{FAIL IF CONVERSION NOT POSSIBLE
        !          9990: {{BRN{EXIXR{{{ELSE RETURN PATTERN
        !          9991: *
        !          9992: *      CONVERT TO ARRAY
        !          9993: *
        !          9994: {SCV11{JSR{GTARR{{{GET AN ARRAY
        !          9995: {{PPM{EXFAL{{{FAIL IF NOT CONVERTIBLE
        !          9996: {{BRN{EXSID{{{EXIT SETTING ID FIELD
        !          9997: *
        !          9998: *      CONVERT TO TABLE
        !          9999: *
        !          10000: {SCV19{MOV{(R9){R6{{LOAD FIRST WORD OF BLOCK
        !          10001: {{MOV{R9{-(SP){{REPLACE ARBLK POINTER ON STACK
        !          10002: {{BEQ{R6{#B$TBT{EXITS{RETURN ARG IF ALREADY A TABLE
        !          10003: {{BNE{R6{#B$ART{EXFAL{ELSE FAIL IF NOT AN ARRAY
        !          10004: {{EJC{{{{
        !          10005: *
        !          10006: *      CONVERT (CONTINUED)
        !          10007: *
        !          10008: *      HERE TO CONVERT AN ARRAY TO TABLE
        !          10009: *
        !          10010: {{BNE{4*ARNDM(R9){#NUM02{EXFAL{FAIL IF NOT 2-DIM ARRAY
        !          10011: {{LDI{4*ARDM2(R9){{{LOAD DIM 2
        !          10012: {{SBI{INTV2{{{SUBTRACT 2 TO COMPARE
        !          10013: {{INE{EXFAL{{{FAIL IF DIM2 NOT 2
        !          10014: *
        !          10015: *      HERE WE HAVE AN ARBLK OF THE RIGHT SHAPE
        !          10016: *
        !          10017: {{LDI{4*ARDIM(R9){{{LOAD DIM 1 (NUMBER OF ELEMENTS)
        !          10018: {{MFI{R6{{{GET AS ONE WORD INTEGER
        !          10019: {{LCT{R7{R6{{COPY TO CONTROL LOOP
        !          10020: {{ADD{#TBSI${R6{{ADD SPACE FOR STANDARD FIELDS
        !          10021: {{WTB{R6{{{CONVERT LENGTH TO BYTES
        !          10022: {{JSR{ALLOC{{{ALLOCATE SPACE FOR TBBLK
        !          10023: {{MOV{R9{R8{{COPY TBBLK POINTER
        !          10024: {{MOV{R9{-(SP){{SAVE TBBLK POINTER
        !          10025: {{MOV{#B$TBT{(R9)+{{STORE TYPE WORD
        !          10026: {{ZER{(R9)+{{{STORE ZERO FOR IDVAL FOR NOW
        !          10027: {{MOV{R6{(R9)+{{STORE LENGTH
        !          10028: {{MOV{#NULLS{(R9)+{{NULL INITIAL LOOKUP VALUE
        !          10029: *
        !          10030: *      LOOP TO INITIALIZE BUCKET PTRS TO POINT TO TABLE
        !          10031: *
        !          10032: {SCV20{MOV{R8{(R9)+{{SET BUCKET PTR TO POINT TO TBBLK
        !          10033: {{BCT{R7{SCV20{{LOOP TILL ALL INITIALIZED
        !          10034: {{MOV{#4*ARVL2{R7{{SET OFFSET TO FIRST ARBLK ELEMENT
        !          10035: *
        !          10036: *      LOOP TO COPY ELEMENTS FROM ARRAY TO TABLE
        !          10037: *
        !          10038: {SCV21{MOV{4*1(SP){R10{{POINT TO ARBLK
        !          10039: {{BEQ{R7{4*ARLEN(R10){SCV24{JUMP IF ALL MOVED
        !          10040: {{ADD{R7{R10{{ELSE POINT TO CURRENT LOCATION
        !          10041: {{ADD{#4*NUM02{R7{{BUMP OFFSET
        !          10042: {{MOV{(R10){R9{{LOAD SUBSCRIPT NAME
        !          10043: {{DCA{R10{{{ADJUST PTR TO MERGE (TRVAL=1+1)
        !          10044: {{EJC{{{{
        !          10045: *
        !          10046: *      CONVERT (CONTINUED)
        !          10047: *
        !          10048: *      LOOP TO CHASE DOWN TRBLK CHAIN FOR VALUE
        !          10049: *
        !          10050: {SCV22{MOV{4*TRVAL(R10){R10{{POINT TO NEXT VALUE
        !          10051: {{BEQ{(R10){#B$TRT{SCV22{LOOP BACK IF TRAPPED
        !          10052: *
        !          10053: *      HERE WITH NAME IN XR, VALUE IN XL
        !          10054: *
        !          10055: {SCV23{MOV{R10{-(SP){{STACK VALUE
        !          10056: {{MOV{4*1(SP){R10{{LOAD TBBLK POINTER
        !          10057: {{JSR{TFIND{{{BUILD TEBLK (NOTE WB GT 0 BY NAME)
        !          10058: {{PPM{EXFAL{{{FAIL IF ACESS FAILS
        !          10059: {{MOV{(SP)+{4*TEVAL(R10){{STORE VALUE IN TEBLK
        !          10060: {{BRN{SCV21{{{LOOP BACK FOR NEXT ELEMENT
        !          10061: *
        !          10062: *      HERE AFTER MOVING ALL ELEMENTS TO TBBLK
        !          10063: *
        !          10064: {SCV24{MOV{(SP)+{R9{{LOAD TBBLK POINTER
        !          10065: {{ICA{SP{{{POP ARBLK POINTER
        !          10066: {{BRN{EXSID{{{EXIT SETTING IDVAL
        !          10067: *
        !          10068: *      CONVERT TO EXPRESSION
        !          10069: *
        !          10070: {SCV25{JSR{GTEXP{{{CONVERT TO EXPRESSION
        !          10071: {{PPM{EXFAL{{{FAIL IF CONVERSION NOT POSSIBLE
        !          10072: {{BRN{EXIXR{{{ELSE RETURN EXPRESSION
        !          10073: *
        !          10074: *      CONVERT TO CODE
        !          10075: *
        !          10076: {SCV26{JSR{GTCOD{{{CONVERT TO CODE
        !          10077: {{PPM{EXFAL{{{FAIL IF CONVERSION IS NOT POSSIBLE
        !          10078: {{BRN{EXIXR{{{ELSE RETURN CODE
        !          10079: *
        !          10080: *      CONVERT TO NUMERIC
        !          10081: *
        !          10082: {SCV27{JSR{GTNUM{{{CONVERT TO NUMERIC
        !          10083: {{PPM{EXFAL{{{FAIL IF UNCONVERTIBLE
        !          10084: {{BRN{EXIXR{{{RETURN NUMBER
        !          10085: {{EJC{{{{
        !          10086: *
        !          10087: *      CONVERT TO BUFFER
        !          10088: *
        !          10089: {SCV28{MOV{R9{-(SP){{STACK STRING FOR PROCEDURE
        !          10090: {{JSR{GTSTG{{{CONVERT TO STRING
        !          10091: {{PPM{EXFAL{{{FAIL IF CONVERSION NOT POSSIBLE
        !          10092: {{MOV{R9{R10{{SAVE STRING POINTER
        !          10093: {{JSR{ALOBF{{{ALLOCATE BUFFER OF SAME SIZE
        !          10094: {{JSR{APNDB{{{COPY IN THE STRING
        !          10095: {{PPM{{{{ALREADY STRING - CANT FAIL TO CNV
        !          10096: {{PPM{{{{MUST BE ENOUGH ROOM
        !          10097: {{BRN{EXSID{{{EXIT SETTING IDVAL FIELD
        !          10098: {{EJC{{{{
        !          10099: *
        !          10100: *      COPY
        !          10101: *
        !          10102: {S$COP{ENT{{{{ENTRY POINT
        !          10103: {{JSR{COPYB{{{COPY THE BLOCK
        !          10104: {{PPM{EXITS{{{RETURN IF NO IDVAL FIELD
        !          10105: {{BRN{EXSID{{{EXIT SETTING ID VALUE
        !          10106: {{EJC{{{{
        !          10107: *
        !          10108: *      DATA
        !          10109: *
        !          10110: {S$DAT{ENT{{{{ENTRY POINT
        !          10111: {{JSR{XSCNI{{{PREPARE TO SCAN ARGUMENT
        !          10112: {{ERR{075{DATA{{ARGUMENT IS NOT STRING
        !          10113: {{ERR{076{DATA{{ARGUMENT IS NULL
        !          10114: *
        !          10115: *      SCAN OUT DATATYPE NAME
        !          10116: *
        !          10117: {{MOV{#CH$PP{R8{{DELIMITER ONE = LEFT PAREN
        !          10118: {{MOV{R8{R10{{DELIMITER TWO = LEFT PAREN
        !          10119: {{JSR{XSCAN{{{SCAN DATATYPE NAME
        !          10120: {{BNZ{R6{SDAT1{{SKIP IF LEFT PAREN FOUND
        !          10121: {{ERB{077{DATA{{ARGUMENT IS MISSING A LEFT PAREN
        !          10122: *
        !          10123: *      HERE AFTER SCANNING DATATYPE NAME
        !          10124: *
        !          10125: {SDAT1{MOV{4*SCLEN(R9){R6{{GET LENGTH
        !          10126: {{JSR{FLSTG{{{FOLD LOWER CASE TO UPPER CASE
        !          10127: {{MOV{R9{R10{{SAVE NAME PTR
        !          10128: {{MOV{4*SCLEN(R9){R6{{GET LENGTH
        !          10129: {{CTB{R6{SCSI${{COMPUTE SPACE NEEDED
        !          10130: {{JSR{ALOST{{{REQUEST STATIC STORE FOR NAME
        !          10131: {{MOV{R9{-(SP){{SAVE DATATYPE NAME
        !          10132: {{MVW{{{{COPY NAME TO STATIC
        !          10133: {{MOV{(SP){R9{{GET NAME PTR
        !          10134: {{ZER{R10{{{SCRUB DUD REGISTER
        !          10135: {{JSR{GTNVR{{{LOCATE VRBLK FOR DATATYPE NAME
        !          10136: {{ERR{078{DATA{{ARGUMENT HAS NULL DATATYPE NAME
        !          10137: {{MOV{R9{DATDV{{SAVE VRBLK POINTER FOR DATATYPE
        !          10138: {{MOV{SP{DATXS{{STORE STARTING STACK VALUE
        !          10139: {{ZER{R7{{{ZERO COUNT OF FIELD NAMES
        !          10140: *
        !          10141: *      LOOP TO SCAN FIELD NAMES AND STACK VRBLK POINTERS
        !          10142: *
        !          10143: {SDAT2{MOV{#CH$RP{R8{{DELIMITER ONE = RIGHT PAREN
        !          10144: {{MOV{#CH$CM{R10{{DELIMITER TWO = COMMA
        !          10145: {{JSR{XSCAN{{{SCAN NEXT FIELD NAME
        !          10146: {{BNZ{R6{SDAT3{{JUMP IF DELIMITER FOUND
        !          10147: {{ERB{079{DATA{{ARGUMENT IS MISSING A RIGHT PAREN
        !          10148: *
        !          10149: *      HERE AFTER SCANNING OUT ONE FIELD NAME
        !          10150: *
        !          10151: {SDAT3{JSR{GTNVR{{{LOCATE VRBLK FOR FIELD NAME
        !          10152: {{ERR{080{DATA{{ARGUMENT HAS NULL FIELD NAME
        !          10153: {{MOV{R9{-(SP){{STACK VRBLK POINTER
        !          10154: {{ICV{R7{{{INCREMENT COUNTER
        !          10155: {{BEQ{R6{#NUM02{SDAT2{LOOP BACK IF STOPPED BY COMMA
        !          10156: {{EJC{{{{
        !          10157: *
        !          10158: *      DATA (CONTINUED)
        !          10159: *
        !          10160: *      NOW BUILD THE DFBLK
        !          10161: *
        !          10162: {{MOV{#DFSI${R6{{SET SIZE OF DFBLK STANDARD FIELDS
        !          10163: {{ADD{R7{R6{{ADD NUMBER OF FIELDS
        !          10164: {{WTB{R6{{{CONVERT LENGTH TO BYTES
        !          10165: {{MOV{R7{R8{{PRESERVE NO. OF FIELDS
        !          10166: {{JSR{ALOST{{{ALLOCATE SPACE FOR DFBLK
        !          10167: {{MOV{R8{R7{{GET NO OF FIELDS
        !          10168: {{MOV{DATXS{R10{{POINT TO START OF STACK
        !          10169: {{MOV{(R10){R8{{LOAD DATATYPE NAME
        !          10170: {{MOV{R9{(R10){{SAVE DFBLK POINTER ON STACK
        !          10171: {{MOV{#B$DFC{(R9)+{{STORE TYPE WORD
        !          10172: {{MOV{R7{(R9)+{{STORE NUMBER OF FIELDS (FARGS)
        !          10173: {{MOV{R6{(R9)+{{STORE LENGTH (DFLEN)
        !          10174: {{SUB{#4*PDDFS{R6{{COMPUTE PDBLK LENGTH (FOR DFPDL)
        !          10175: {{MOV{R6{(R9)+{{STORE PDBLK LENGTH (DFPDL)
        !          10176: {{MOV{R8{(R9)+{{STORE DATATYPE NAME (DFNAM)
        !          10177: {{LCT{R8{R7{{COPY NUMBER OF FIELDS
        !          10178: *
        !          10179: *      LOOP TO MOVE FIELD NAME VRBLK POINTERS TO DFBLK
        !          10180: *
        !          10181: {SDAT4{MOV{-(R10){(R9)+{{MOVE ONE FIELD NAME VRBLK POINTER
        !          10182: {{BCT{R8{SDAT4{{LOOP TILL ALL MOVED
        !          10183: *
        !          10184: *      NOW DEFINE THE DATATYPE FUNCTION
        !          10185: *
        !          10186: {{MOV{R6{R8{{COPY LENGTH OF PDBLK FOR LATER LOOP
        !          10187: {{MOV{DATDV{R9{{POINT TO VRBLK
        !          10188: {{MOV{DATXS{R10{{POINT BACK ON STACK
        !          10189: {{MOV{(R10){R10{{LOAD DFBLK POINTER
        !          10190: {{JSR{DFFNC{{{DEFINE FUNCTION
        !          10191: {{EJC{{{{
        !          10192: *
        !          10193: *      DATA (CONTINUED)
        !          10194: *
        !          10195: *      LOOP TO BUILD FFBLKS
        !          10196: *
        !          10197: *
        !          10198: *      NOTICE THAT THE FFBLKS ARE CONSTRUCTED IN REVERSE ORDER
        !          10199: *      SO THAT THE REQUIRED OFFSETS CAN BE OBTAINED FROM
        !          10200: *      SUCCESSIVE DECREMENTATION OF THE PDBLK LENGTH (IN WC).
        !          10201: *
        !          10202: {SDAT5{MOV{#4*FFSI${R6{{SET LENGTH OF FFBLK
        !          10203: {{JSR{ALLOC{{{ALLOCATE SPACE FOR FFBLK
        !          10204: {{MOV{#B$FFC{(R9){{SET TYPE WORD
        !          10205: {{MOV{#NUM01{4*FARGS(R9){{STORE FARGS (ALWAYS ONE)
        !          10206: {{MOV{DATXS{R10{{POINT BACK ON STACK
        !          10207: {{MOV{(R10){4*FFDFP(R9){{COPY DFBLK PTR TO FFBLK
        !          10208: {{DCA{R8{{{DECREMENT OLD DFPDL TO GET NEXT OFS
        !          10209: {{MOV{R8{4*FFOFS(R9){{SET OFFSET TO THIS FIELD
        !          10210: {{ZER{4*FFNXT(R9){{{TENTATIVELY SET ZERO FORWARD PTR
        !          10211: {{MOV{R9{R10{{COPY FFBLK POINTER FOR DFFNC
        !          10212: {{MOV{(SP){R9{{LOAD VRBLK POINTER FOR FIELD
        !          10213: {{MOV{4*VRFNC(R9){R9{{LOAD CURRENT FUNCTION POINTER
        !          10214: {{BNE{(R9){#B$FFC{SDAT6{SKIP IF NOT CURRENTLY A FIELD FUNC
        !          10215: *
        !          10216: *      HERE WE MUST CHAIN AN OLD FFBLK PTR TO PRESERVE IT IN THE
        !          10217: *      CASE OF MULTIPLE FIELD FUNCTIONS WITH THE SAME NAME
        !          10218: *
        !          10219: {{MOV{R9{4*FFNXT(R10){{LINK NEW FFBLK TO PREVIOUS CHAIN
        !          10220: *
        !          10221: *      MERGE HERE TO DEFINE FIELD FUNCTION
        !          10222: *
        !          10223: {SDAT6{MOV{(SP)+{R9{{LOAD VRBLK POINTER
        !          10224: {{JSR{DFFNC{{{DEFINE FIELD FUNCTION
        !          10225: {{BNE{SP{DATXS{SDAT5{LOOP BACK TILL ALL DONE
        !          10226: {{ICA{SP{{{POP DFBLK POINTER
        !          10227: {{BRN{EXNUL{{{RETURN WITH NULL RESULT
        !          10228: {{EJC{{{{
        !          10229: *
        !          10230: *      DATATYPE
        !          10231: *
        !          10232: {S$DTP{ENT{{{{ENTRY POINT
        !          10233: {{MOV{(SP)+{R9{{LOAD ARGUMENT
        !          10234: {{JSR{DTYPE{{{GET DATATYPE
        !          10235: {{BRN{EXIXR{{{AND RETURN IT AS RESULT
        !          10236: {{EJC{{{{
        !          10237: *
        !          10238: *      DATE
        !          10239: *
        !          10240: {S$DTE{ENT{{{{ENTRY POINT
        !          10241: {{JSR{SYSDT{{{CALL SYSTEM DATE ROUTINE
        !          10242: {{MOV{4*1(R10){R6{{LOAD LENGTH FOR SBSTR
        !          10243: {{BZE{R6{EXNUL{{RETURN NULL IF LENGTH IS ZERO
        !          10244: {{ZER{R7{{{SET ZERO OFFSET
        !          10245: {{JSR{SBSTR{{{USE SBSTR TO BUILD SCBLK
        !          10246: {{BRN{EXIXR{{{RETURN DATE STRING
        !          10247: {{EJC{{{{
        !          10248: *
        !          10249: *      DEFINE
        !          10250: *
        !          10251: {S$DEF{ENT{{{{ENTRY POINT
        !          10252: {{MOV{(SP)+{R9{{LOAD SECOND ARGUMENT
        !          10253: {{ZER{DEFLB{{{ZERO LABEL POINTER IN CASE NULL
        !          10254: {{BEQ{R9{#NULLS{SDF01{JUMP IF NULL SECOND ARGUMENT
        !          10255: {{JSR{GTNVR{{{ELSE FIND VRBLK FOR LABEL
        !          10256: {{PPM{SDF13{{{JUMP IF NOT A VARIABLE NAME
        !          10257: {{MOV{R9{DEFLB{{ELSE SET SPECIFIED ENTRY
        !          10258: *
        !          10259: *      SCAN FUNCTION NAME
        !          10260: *
        !          10261: {SDF01{JSR{XSCNI{{{PREPARE TO SCAN FIRST ARGUMENT
        !          10262: {{ERR{081{DEFINE{{FIRST ARGUMENT IS NOT STRING
        !          10263: {{ERR{082{DEFINE{{FIRST ARGUMENT IS NULL
        !          10264: {{MOV{#CH$PP{R8{{DELIMITER ONE = LEFT PAREN
        !          10265: {{MOV{R8{R10{{DELIMITER TWO = LEFT PAREN
        !          10266: {{JSR{XSCAN{{{SCAN OUT FUNCTION NAME
        !          10267: {{BNZ{R6{SDF02{{JUMP IF LEFT PAREN FOUND
        !          10268: {{ERB{083{DEFINE{{FIRST ARGUMENT IS MISSING A LEFT PAREN
        !          10269: *
        !          10270: *      HERE AFTER SCANNING OUT FUNCTION NAME
        !          10271: *
        !          10272: {SDF02{JSR{GTNVR{{{GET VARIABLE NAME
        !          10273: {{ERR{084{DEFINE{{FIRST ARGUMENT HAS NULL FUNCTION NAME
        !          10274: {{MOV{R9{DEFVR{{SAVE VRBLK POINTER FOR FUNCTION NAM
        !          10275: {{ZER{R7{{{ZERO COUNT OF ARGUMENTS
        !          10276: {{MOV{SP{DEFXS{{SAVE INITIAL STACK POINTER
        !          10277: {{BNZ{DEFLB{SDF03{{JUMP IF SECOND ARGUMENT GIVEN
        !          10278: {{MOV{R9{DEFLB{{ELSE DEFAULT IS FUNCTION NAME
        !          10279: *
        !          10280: *      LOOP TO SCAN ARGUMENT NAMES AND STACK VRBLK POINTERS
        !          10281: *
        !          10282: {SDF03{MOV{#CH$RP{R8{{DELIMITER ONE = RIGHT PAREN
        !          10283: {{MOV{#CH$CM{R10{{DELIMITER TWO = COMMA
        !          10284: {{JSR{XSCAN{{{SCAN OUT NEXT ARGUMENT NAME
        !          10285: {{BNZ{R6{SDF04{{SKIP IF DELIMITER FOUND
        !          10286: {{ERB{085{NULL{{ARG NAME OR MISSING ) IN DEFINE FIRST ARG.
        !          10287: {{EJC{{{{
        !          10288: *
        !          10289: *      DEFINE (CONTINUED)
        !          10290: *
        !          10291: *      HERE AFTER SCANNING AN ARGUMENT NAME
        !          10292: *
        !          10293: {SDF04{BNE{R9{#NULLS{SDF05{SKIP IF NON-NULL
        !          10294: {{BZE{R7{SDF06{{IGNORE NULL IF CASE OF NO ARGUMENTS
        !          10295: *
        !          10296: *      HERE AFTER DEALING WITH THE CASE OF NO ARGUMENTS
        !          10297: *
        !          10298: {SDF05{JSR{GTNVR{{{GET VRBLK POINTER
        !          10299: {{PPM{SDF03{{{LOOP BACK TO IGNORE NULL NAME
        !          10300: {{MOV{R9{-(SP){{STACK ARGUMENT VRBLK POINTER
        !          10301: {{ICV{R7{{{INCREMENT COUNTER
        !          10302: {{BEQ{R6{#NUM02{SDF03{LOOP BACK IF STOPPED BY A COMMA
        !          10303: *
        !          10304: *      HERE AFTER SCANNING OUT FUNCTION ARGUMENT NAMES
        !          10305: *
        !          10306: {SDF06{MOV{R7{DEFNA{{SAVE NUMBER OF ARGUMENTS
        !          10307: {{ZER{R7{{{ZERO COUNT OF LOCALS
        !          10308: *
        !          10309: *      LOOP TO SCAN LOCAL NAMES AND STACK VRBLK POINTERS
        !          10310: *
        !          10311: {SDF07{MOV{#CH$CM{R8{{SET DELIMITER ONE = COMMA
        !          10312: {{MOV{R8{R10{{SET DELIMITER TWO = COMMA
        !          10313: {{JSR{XSCAN{{{SCAN OUT NEXT LOCAL NAME
        !          10314: {{BNE{R9{#NULLS{SDF08{SKIP IF NON-NULL
        !          10315: {{BZE{R7{SDF09{{IGNORE NULL IF CASE OF NO LOCALS
        !          10316: *
        !          10317: *      HERE AFTER SCANNING OUT A LOCAL NAME
        !          10318: *
        !          10319: {SDF08{JSR{GTNVR{{{GET VRBLK POINTER
        !          10320: {{PPM{SDF07{{{LOOP BACK TO IGNORE NULL NAME
        !          10321: {{ICV{R7{{{IF OK, INCREMENT COUNT
        !          10322: {{MOV{R9{-(SP){{STACK VRBLK POINTER
        !          10323: {{BNZ{R6{SDF07{{LOOP BACK IF STOPPED BY A COMMA
        !          10324: {{EJC{{{{
        !          10325: *
        !          10326: *      DEFINE (CONTINUED)
        !          10327: *
        !          10328: *      HERE AFTER SCANNING LOCALS, BUILD PFBLK
        !          10329: *
        !          10330: {SDF09{MOV{R7{R6{{COPY COUNT OF LOCALS
        !          10331: {{ADD{DEFNA{R6{{ADD NUMBER OF ARGUMENTS
        !          10332: {{MOV{R6{R8{{SET SUM ARGS+LOCALS AS LOOP COUNT
        !          10333: {{ADD{#PFSI${R6{{ADD SPACE FOR STANDARD FIELDS
        !          10334: {{WTB{R6{{{CONVERT LENGTH TO BYTES
        !          10335: {{JSR{ALLOC{{{ALLOCATE SPACE FOR PFBLK
        !          10336: {{MOV{R9{R10{{SAVE POINTER TO PFBLK
        !          10337: {{MOV{#B$PFC{(R9)+{{STORE FIRST WORD
        !          10338: {{MOV{DEFNA{(R9)+{{STORE NUMBER OF ARGUMENTS
        !          10339: {{MOV{R6{(R9)+{{STORE LENGTH (PFLEN)
        !          10340: {{MOV{DEFVR{(R9)+{{STORE VRBLK PTR FOR FUNCTION NAME
        !          10341: {{MOV{R7{(R9)+{{STORE NUMBER OF LOCALS
        !          10342: {{ZER{(R9)+{{{DEAL WITH LABEL LATER
        !          10343: {{ZER{(R9)+{{{ZERO PFCTR
        !          10344: {{ZER{(R9)+{{{ZERO PFRTR
        !          10345: {{BZE{R8{SDF11{{SKIP IF NO ARGS OR LOCALS
        !          10346: {{MOV{R10{R6{{KEEP PFBLK POINTER
        !          10347: {{MOV{DEFXS{R10{{POINT BEFORE ARGUMENTS
        !          10348: {{LCT{R8{R8{{GET COUNT OF ARGS+LOCALS FOR LOOP
        !          10349: *
        !          10350: *      LOOP TO MOVE LOCALS AND ARGS TO PFBLK
        !          10351: *
        !          10352: {SDF10{MOV{-(R10){(R9)+{{STORE ONE ENTRY AND BUMP POINTERS
        !          10353: {{BCT{R8{SDF10{{LOOP TILL ALL STORED
        !          10354: {{MOV{R6{R10{{RECOVER PFBLK POINTER
        !          10355: {{EJC{{{{
        !          10356: *
        !          10357: *      DEFINE (CONTINUED)
        !          10358: *
        !          10359: *      NOW DEAL WITH LABEL
        !          10360: *
        !          10361: {SDF11{MOV{DEFXS{SP{{POP STACK
        !          10362: {{MOV{DEFLB{R9{{POINT TO VRBLK FOR LABEL
        !          10363: {{MOV{4*VRLBL(R9){R9{{LOAD LABEL POINTER
        !          10364: {{BNE{(R9){#B$TRT{SDF12{SKIP IF NOT TRAPPED
        !          10365: {{MOV{4*TRLBL(R9){R9{{ELSE POINT TO REAL LABEL
        !          10366: *
        !          10367: *      HERE AFTER LOCATING REAL LABEL POINTER
        !          10368: *
        !          10369: {SDF12{BEQ{R9{#STNDL{SDF13{JUMP IF LABEL IS NOT DEFINED
        !          10370: {{MOV{R9{4*PFCOD(R10){{ELSE STORE LABEL POINTER
        !          10371: {{MOV{DEFVR{R9{{POINT BACK TO VRBLK FOR FUNCTION
        !          10372: {{JSR{DFFNC{{{DEFINE FUNCTION
        !          10373: {{BRN{EXNUL{{{AND EXIT RETURNING NULL
        !          10374: *
        !          10375: *      HERE FOR ERRONEOUS LABEL
        !          10376: *
        !          10377: {SDF13{ERB{086{DEFINE{{FUNCTION ENTRY POINT IS NOT DEFINED LABEL
        !          10378: {{EJC{{{{
        !          10379: *
        !          10380: *      DETACH
        !          10381: *
        !          10382: {S$DET{ENT{{{{ENTRY POINT
        !          10383: {{MOV{(SP)+{R9{{LOAD ARGUMENT
        !          10384: {{JSR{GTVAR{{{LOCATE VARIABLE
        !          10385: {{ERR{087{DETACH{{ARGUMENT IS NOT APPROPRIATE NAME
        !          10386: {{JSR{DTACH{{{DETACH I/O ASSOCIATION FROM NAME
        !          10387: {{BRN{EXNUL{{{RETURN NULL RESULT
        !          10388: {{EJC{{{{
        !          10389: *
        !          10390: *      DIFFER
        !          10391: *
        !          10392: {S$DIF{ENT{{{{ENTRY POINT
        !          10393: {{MOV{(SP)+{R9{{LOAD SECOND ARGUMENT
        !          10394: {{MOV{(SP)+{R10{{LOAD FIRST ARGUMENT
        !          10395: {{JSR{IDENT{{{CALL IDENT COMPARISON ROUTINE
        !          10396: {{PPM{EXFAL{{{FAIL IF IDENT
        !          10397: {{BRN{EXNUL{{{RETURN NULL IF DIFFER
        !          10398: {{EJC{{{{
        !          10399: *
        !          10400: *      DUMP
        !          10401: *
        !          10402: {S$DMP{ENT{{{{ENTRY POINT
        !          10403: {{JSR{GTSMI{{{LOAD DUMP ARG AS SMALL INTEGER
        !          10404: {{ERR{088{DUMP{{ARGUMENT IS NOT INTEGER
        !          10405: {{ERR{089{DUMP{{ARGUMENT IS NEGATIVE OR TOO LARGE
        !          10406: {{JSR{DUMPR{{{ELSE CALL DUMP ROUTINE
        !          10407: {{BRN{EXNUL{{{AND RETURN NULL AS RESULT
        !          10408: {{EJC{{{{
        !          10409: *
        !          10410: *      DUPL
        !          10411: *
        !          10412: {S$DUP{ENT{{{{ENTRY POINT
        !          10413: {{JSR{GTSMI{{{GET SECOND ARGUMENT AS SMALL INTEGE
        !          10414: {{ERR{090{DUPL{{SECOND ARGUMENT IS NOT INTEGER
        !          10415: {{PPM{SDUP7{{{JUMP IF NEGATIVE OT TOO BIG
        !          10416: {{MOV{R9{R7{{SAVE DUPLICATION FACTOR
        !          10417: {{JSR{GTSTG{{{GET FIRST ARG AS STRING
        !          10418: {{PPM{SDUP4{{{JUMP IF NOT A STRING
        !          10419: *
        !          10420: *      HERE FOR CASE OF DUPLICATION OF A STRING
        !          10421: *
        !          10422: {{MTI{R6{{{ACQUIRE LENGTH AS INTEGER
        !          10423: {{STI{DUPSI{{{SAVE FOR THE MOMENT
        !          10424: {{MTI{R7{{{GET DUPLICATION FACTOR AS INTEGER
        !          10425: {{MLI{DUPSI{{{FORM PRODUCT
        !          10426: {{IOV{SDUP3{{{JUMP IF OVERFLOW
        !          10427: {{IEQ{EXNUL{{{RETURN NULL IF RESULT LENGTH = 0
        !          10428: {{MFI{R6{SDUP3{{GET AS ADDR INTEGER, CHECK OVFLO
        !          10429: *
        !          10430: *      MERGE HERE WITH RESULT LENGTH IN WA
        !          10431: *
        !          10432: {SDUP1{MOV{R9{R10{{SAVE STRING POINTER
        !          10433: {{JSR{ALOCS{{{ALLOCATE SPACE FOR STRING
        !          10434: {{MOV{R9{-(SP){{SAVE AS RESULT POINTER
        !          10435: {{MOV{R10{R8{{SAVE POINTER TO ARGUMENT STRING
        !          10436: {{PSC{R9{{{PREPARE TO STORE CHARS OF RESULT
        !          10437: {{LCT{R7{R7{{SET COUNTER TO CONTROL LOOP
        !          10438: *
        !          10439: *      LOOP THROUGH DUPLICATIONS
        !          10440: *
        !          10441: {SDUP2{MOV{R8{R10{{POINT BACK TO ARGUMENT STRING
        !          10442: {{MOV{4*SCLEN(R10){R6{{GET NUMBER OF CHARACTERS
        !          10443: {{PLC{R10{{{POINT TO CHARS IN ARGUMENT STRING
        !          10444: {{MVC{{{{MOVE CHARACTERS TO RESULT STRING
        !          10445: {{BCT{R7{SDUP2{{LOOP TILL ALL DUPLICATIONS DONE
        !          10446: {{BRN{EXITS{{{THEN EXIT FOR NEXT CODE WORD
        !          10447: {{EJC{{{{
        !          10448: *
        !          10449: *      DUPL (CONTINUED)
        !          10450: *
        !          10451: *      HERE IF TOO LARGE, SET MAX LENGTH AND LET ALOCS CATCH IT
        !          10452: *
        !          10453: {SDUP3{MOV{DNAME{R6{{SET IMPOSSIBLE LENGTH FOR ALOCS
        !          10454: {{BRN{SDUP1{{{MERGE BACK
        !          10455: *
        !          10456: *      HERE IF NOT A STRING
        !          10457: *
        !          10458: {SDUP4{JSR{GTPAT{{{CONVERT ARGUMENT TO PATTERN
        !          10459: {{ERR{091{DUPL{{FIRST ARGUMENT IS NOT STRING OR PATTERN
        !          10460: *
        !          10461: *      HERE TO DUPLICATE A PATTERN ARGUMENT
        !          10462: *
        !          10463: {{MOV{R9{-(SP){{STORE PATTERN ON STACK
        !          10464: {{MOV{#NDNTH{R9{{START OFF WITH NULL PATTERN
        !          10465: {{BZE{R7{SDUP6{{NULL PATTERN IS RESULT IF DUPFAC=0
        !          10466: {{MOV{R7{-(SP){{PRESERVE LOOP COUNT
        !          10467: *
        !          10468: *      LOOP TO DUPLICATE BY SUCCESSIVE CONCATENATION
        !          10469: *
        !          10470: {SDUP5{MOV{R9{R10{{COPY CURRENT VALUE AS RIGHT ARGUMNT
        !          10471: {{MOV{4*1(SP){R9{{GET A NEW COPY OF LEFT
        !          10472: {{JSR{PCONC{{{CONCATENATE
        !          10473: {{DCV{(SP){{{COUNT DOWN
        !          10474: {{BNZ{(SP){SDUP5{{LOOP
        !          10475: {{ICA{SP{{{POP LOOP COUNT
        !          10476: *
        !          10477: *      HERE TO EXIT AFTER CONSTRUCTING PATTERN
        !          10478: *
        !          10479: {SDUP6{MOV{R9{(SP){{STORE RESULT ON STACK
        !          10480: {{BRN{EXITS{{{EXIT WITH RESULT ON STACK
        !          10481: *
        !          10482: *      FAIL IF SECOND ARG IS OUT OF RANGE
        !          10483: *
        !          10484: {SDUP7{ICA{SP{{{POP FIRST ARGUMENT
        !          10485: {{BRN{EXFAL{{{FAIL
        !          10486: {{EJC{{{{
        !          10487: *
        !          10488: *      EJECT
        !          10489: *
        !          10490: {S$EJC{ENT{{{{ENTRY POINT
        !          10491: {{JSR{IOFCB{{{CALL FCBLK ROUTINE
        !          10492: {{ERR{092{EJECT{{ARGUMENT IS NOT A SUITABLE NAME
        !          10493: {{PPM{SEJC1{{{NULL ARGUMENT
        !          10494: {{JSR{SYSEF{{{CALL EJECT FILE FUNCTION
        !          10495: {{ERR{093{EJECT{{FILE DOES NOT EXIST
        !          10496: {{ERR{094{EJECT{{FILE DOES NOT PERMIT PAGE EJECT
        !          10497: {{ERR{095{EJECT{{CAUSED NON-RECOVERABLE OUTPUT ERROR
        !          10498: {{BRN{EXNUL{{{RETURN NULL AS RESULT
        !          10499: *
        !          10500: *      HERE TO EJECT STANDARD OUTPUT FILE
        !          10501: *
        !          10502: {SEJC1{JSR{SYSEP{{{CALL ROUTINE TO EJECT PRINTER
        !          10503: {{BRN{EXNUL{{{EXIT WITH NULL RESULT
        !          10504: {{EJC{{{{
        !          10505: *
        !          10506: *      ENDFILE
        !          10507: *
        !          10508: {S$ENF{ENT{{{{ENTRY POINT
        !          10509: {{JSR{IOFCB{{{CALL FCBLK ROUTINE
        !          10510: {{ERR{096{ENDFILE{{ARGUMENT IS NOT A SUITABLE NAME
        !          10511: {{ERR{097{ENDFILE{{ARGUMENT IS NULL
        !          10512: {{JSR{SYSEN{{{CALL ENDFILE ROUTINE
        !          10513: {{ERR{098{ENDFILE{{FILE DOES NOT EXIST
        !          10514: {{ERR{099{ENDFILE{{FILE DOES NOT PERMIT ENDFILE
        !          10515: {{ERR{100{ENDFILE{{CAUSED NON-RECOVERABLE OUTPUT ERROR
        !          10516: {{MOV{R10{R7{{REMEMBER VRBLK PTR FROM IOFCB CALL
        !          10517: *
        !          10518: *      LOOP TO FIND TRTRF BLOCK
        !          10519: *
        !          10520: {SENF1{MOV{R10{R9{{COPY POINTER
        !          10521: {{MOV{4*TRVAL(R9){R9{{CHAIN ALONG
        !          10522: {{BNE{(R9){#B$TRT{EXNUL{SKIP OUT IF CHAIN END
        !          10523: {{BNE{4*TRTYP(R9){#TRTFC{SENF1{LOOP IF NOT FOUND
        !          10524: {{MOV{4*TRVAL(R9){4*TRVAL(R10){{REMOVE TRTRF
        !          10525: {{MOV{4*TRTRF(R9){ENFCH{{POINT TO HEAD OF IOCHN
        !          10526: {{MOV{4*TRFPT(R9){R8{{POINT TO FCBLK
        !          10527: {{MOV{R7{R9{{FILEARG1 VRBLK FROM IOFCB
        !          10528: {{JSR{SETVR{{{RESET IT
        !          10529: {{MOV{#R$FCB{R10{{PTR TO HEAD OF FCBLK CHAIN
        !          10530: {{SUB{#4*NUM02{R10{{ADJUST READY TO ENTER LOOP
        !          10531: *
        !          10532: *      FIND FCBLK
        !          10533: *
        !          10534: {SENF2{MOV{R10{R9{{COPY PTR
        !          10535: {{MOV{4*2(R10){R10{{GET NEXT LINK
        !          10536: {{BZE{R10{SENF4{{STOP IF CHAIN END
        !          10537: {{BEQ{4*3(R10){R8{SENF3{JUMP IF FCBLK FOUND
        !          10538: {{BRN{SENF2{{{LOOP
        !          10539: *
        !          10540: *      REMOVE FCBLK
        !          10541: *
        !          10542: {SENF3{MOV{4*2(R10){4*2(R9){{DELETE FCBLK FROM CHAIN
        !          10543: *
        !          10544: *      LOOP WHICH DETACHES ALL VBLS ON IOCHN CHAIN
        !          10545: *
        !          10546: {SENF4{MOV{ENFCH{R10{{GET CHAIN HEAD
        !          10547: {{BZE{R10{EXNUL{{FINISHED IF CHAIN END
        !          10548: {{MOV{4*TRTRF(R10){ENFCH{{CHAIN ALONG
        !          10549: {{MOV{4*IONMO(R10){R6{{NAME OFFSET
        !          10550: {{MOV{4*IONMB(R10){R10{{NAME BASE
        !          10551: {{JSR{DTACH{{{DETACH NAME
        !          10552: {{BRN{SENF4{{{LOOP TILL DONE
        !          10553: {{EJC{{{{
        !          10554: *
        !          10555: *      EQ
        !          10556: *
        !          10557: {S$EQF{ENT{{{{ENTRY POINT
        !          10558: {{JSR{ACOMP{{{CALL ARITHMETIC COMPARISON ROUTINE
        !          10559: {{ERR{101{EQ{{FIRST ARGUMENT IS NOT NUMERIC
        !          10560: {{ERR{102{EQ{{SECOND ARGUMENT IS NOT NUMERIC
        !          10561: {{PPM{EXFAL{{{FAIL IF LT
        !          10562: {{PPM{EXNUL{{{RETURN NULL IF EQ
        !          10563: {{PPM{EXFAL{{{FAIL IF GT
        !          10564: {{EJC{{{{
        !          10565: *
        !          10566: *      EVAL
        !          10567: *
        !          10568: {S$EVL{ENT{{{{ENTRY POINT
        !          10569: {{MOV{(SP)+{R9{{LOAD ARGUMENT
        !          10570: {{JSR{GTEXP{{{CONVERT TO EXPRESSION
        !          10571: {{ERR{103{EVAL{{ARGUMENT IS NOT EXPRESSION
        !          10572: {{LCW{R8{{{LOAD NEXT CODE WORD
        !          10573: {{BNE{R8{#OFNE${SEVL1{JUMP IF CALLED BY VALUE
        !          10574: {{SCP{R10{{{COPY CODE POINTER
        !          10575: {{MOV{(R10){R6{{GET NEXT CODE WORD
        !          10576: {{BNE{R6{#ORNM${SEVL2{BY NAME UNLESS EXPRESSION
        !          10577: {{BNZ{4*1(SP){SEVL2{{JUMP IF BY NAME
        !          10578: *
        !          10579: *      HERE IF CALLED BY VALUE
        !          10580: *
        !          10581: {SEVL1{ZER{R7{{{SET FLAG FOR BY VALUE
        !          10582: {{MOV{R8{-(SP){{SAVE CODE WORD
        !          10583: {{JSR{EVALX{{{EVALUATE EXPRESSION BY VALUE
        !          10584: {{PPM{EXFAL{{{FAIL IF EVALUATION FAILS
        !          10585: {{MOV{R9{R10{{COPY RESULT
        !          10586: {{MOV{(SP){R9{{RELOAD NEXT CODE WORD
        !          10587: {{MOV{R10{(SP){{STACK RESULT
        !          10588: {{BRI{(R9){{{JUMP TO EXECUTE NEXT CODE WORD
        !          10589: *
        !          10590: *      HERE IF CALLED BY NAME
        !          10591: *
        !          10592: {SEVL2{MOV{#NUM01{R7{{SET FLAG FOR BY NAME
        !          10593: {{JSR{EVALX{{{EVALUATE EXPRESSION BY NAME
        !          10594: {{PPM{EXFAL{{{FAIL IF EVALUATION FAILS
        !          10595: {{BRN{EXNAM{{{EXIT WITH NAME
        !          10596: {{EJC{{{{
        !          10597: *
        !          10598: *      EXIT
        !          10599: *
        !          10600: {S$EXT{ENT{{{{ENTRY POINT
        !          10601: {{ZER{R7{{{CLEAR AMOUNT OF STATIC SHIFT
        !          10602: {{JSR{GBCOL{{{COMPACT MEMORY BY COLLECTING
        !          10603: {{JSR{GTSTG{{{CONVERT ARG TO STRING
        !          10604: {{ERR{104{EXIT{{ARGUMENT IS NOT SUITABLE INTEGER OR STRING
        !          10605: {{MOV{R9{R10{{COPY STRING PTR
        !          10606: {{JSR{GTINT{{{CHECK IT IS INTEGER
        !          10607: {{PPM{SEXT1{{{SKIP IF UNCONVERTIBLE
        !          10608: {{ZER{R10{{{NOTE IT IS INTEGER
        !          10609: {{LDI{4*ICVAL(R9){{{GET INTEGER ARG
        !          10610: {{MOV{R$FCB{R7{{GET FCBLK CHAIN HEADER
        !          10611: *
        !          10612: *      MERGE TO CALL OSINT EXIT ROUTINE
        !          10613: *
        !          10614: {SEXT1{MOV{#HEADV{R9{{POINT TO V.V STRING
        !          10615: {{JSR{SYSXI{{{CALL EXTERNAL ROUTINE
        !          10616: {{ERR{105{EXIT{{ACTION NOT AVAILABLE IN THIS IMPLEMENTATION
        !          10617: {{ERR{106{EXIT{{ACTION CAUSED IRRECOVERABLE ERROR
        !          10618: {{IEQ{EXNUL{{{RETURN IF ARGUMENT 0
        !          10619: {{ZER{GBCNT{{{RESUMING EXECUTION SO RESET
        !          10620: {{IGT{SEXT2{{{SKIP IF POSITIVE
        !          10621: {{NGI{{{{MAKE POSITIVE
        !          10622: *
        !          10623: *      CHECK FOR OPTION RESPECIFICATION
        !          10624: *
        !          10625: {SEXT2{MFI{R8{{{GET VALUE IN WORK REG
        !          10626: {{BEQ{R8{#NUM03{SEXT3{SKIP IF WAS 3
        !          10627: {{MOV{R8{-(SP){{SAVE VALUE
        !          10628: {{ZER{R8{{{SET TO READ OPTIONS
        !          10629: {{JSR{PRPAR{{{READ SYSPP OPTIONS
        !          10630: {{MOV{(SP)+{R8{{RESTORE VALUE
        !          10631: *
        !          10632: *      DEAL WITH HEADER OPTION (FIDDLED BY PRPAR)
        !          10633: *
        !          10634: {SEXT3{MNZ{HEADP{{{ASSUME NO HEADERS
        !          10635: {{BNE{R8{#NUM01{SEXT4{SKIP IF NOT 1
        !          10636: {{ZER{HEADP{{{REQUEST HEADER PRINTING
        !          10637: *
        !          10638: *      ALMOST READY TO RESUME RUNNING
        !          10639: *
        !          10640: {SEXT4{JSR{SYSTM{{{GET EXECUTION TIME START (SGD11)
        !          10641: {{STI{TIMSX{{{SAVE AS INITIAL TIME
        !          10642: {{LDI{KVSTC{{{RESET TO ENSURE ...
        !          10643: {{STI{KVSTL{{{... CORRECT EXECUTION STATS
        !          10644: {{BRN{EXNUL{{{RESUME EXECUTION
        !          10645: {{EJC{{{{
        !          10646: *
        !          10647: *      FIELD
        !          10648: *
        !          10649: {S$FLD{ENT{{{{ENTRY POINT
        !          10650: {{JSR{GTSMI{{{GET SECOND ARGUMENT (FIELD NUMBER)
        !          10651: {{ERR{107{FIELD{{SECOND ARGUMENT IS NOT INTEGER
        !          10652: {{PPM{EXFAL{{{FAIL IF OUT OF RANGE
        !          10653: {{MOV{R9{R7{{ELSE SAVE INTEGER VALUE
        !          10654: {{MOV{(SP)+{R9{{LOAD FIRST ARGUMENT
        !          10655: {{JSR{GTNVR{{{POINT TO VRBLK
        !          10656: {{PPM{SFLD1{{{JUMP (ERROR) IF NOT VARIABLE NAME
        !          10657: {{MOV{4*VRFNC(R9){R9{{ELSE POINT TO FUNCTION BLOCK
        !          10658: {{BNE{(R9){#B$DFC{SFLD1{ERROR IF NOT DATATYPE FUNCTION
        !          10659: *
        !          10660: *      HERE IF FIRST ARGUMENT IS A DATATYPE FUNCTION NAME
        !          10661: *
        !          10662: {{BZE{R7{EXFAL{{FAIL IF ARGUMENT NUMBER IS ZERO
        !          10663: {{BGT{R7{4*FARGS(R9){EXFAL{FAIL IF TOO LARGE
        !          10664: {{WTB{R7{{{ELSE CONVERT TO BYTE OFFSET
        !          10665: {{ADD{R7{R9{{POINT TO FIELD NAME
        !          10666: {{MOV{4*DFFLB(R9){R9{{LOAD VRBLK POINTER
        !          10667: {{BRN{EXVNM{{{EXIT TO BUILD NMBLK
        !          10668: *
        !          10669: *      HERE FOR BAD FIRST ARGUMENT
        !          10670: *
        !          10671: {SFLD1{ERB{108{FIELD{{FIRST ARGUMENT IS NOT DATATYPE NAME
        !          10672: {{EJC{{{{
        !          10673: *
        !          10674: *      FENCE
        !          10675: *
        !          10676: {S$FNC{ENT{{{{ENTRY POINT
        !          10677: {{MOV{#P$FNC{R7{{SET PCODE FOR P$FNC
        !          10678: {{ZER{R9{{{P0BLK
        !          10679: {{JSR{PBILD{{{BUILD P$FNC NODE
        !          10680: {{MOV{R9{R10{{SAVE POINTER TO IT
        !          10681: {{MOV{(SP)+{R9{{GET ARGUMENT
        !          10682: {{JSR{GTPAT{{{CONVERT TO PATTERN
        !          10683: {{ERR{259{FENCE{{ARGUMENT IS NOT PATTERN
        !          10684: {{JSR{PCONC{{{CONCATENATE TO P$FNC NODE
        !          10685: {{MOV{R9{R10{{SAVE PTR TO CONCATENATED PATTERN
        !          10686: {{MOV{#P$FNA{R7{{SET FOR P$FNA PCODE
        !          10687: {{ZER{R9{{{P0BLK
        !          10688: {{JSR{PBILD{{{CONSTRUCT P$FNA NODE
        !          10689: {{MOV{R10{4*PTHEN(R9){{SET PATTERN AS PTHEN
        !          10690: {{MOV{R9{-(SP){{SET AS RESULT
        !          10691: {{BRN{EXITS{{{DO NEXT CODE WORD
        !          10692: {{EJC{{{{
        !          10693: *
        !          10694: *      GE
        !          10695: *
        !          10696: {S$GEF{ENT{{{{ENTRY POINT
        !          10697: {{JSR{ACOMP{{{CALL ARITHMETIC COMPARISON ROUTINE
        !          10698: {{ERR{109{GE{{FIRST ARGUMENT IS NOT NUMERIC
        !          10699: {{ERR{110{GE{{SECOND ARGUMENT IS NOT NUMERIC
        !          10700: {{PPM{EXFAL{{{FAIL IF LT
        !          10701: {{PPM{EXNUL{{{RETURN NULL IF EQ
        !          10702: {{PPM{EXNUL{{{RETURN NULL IF GT
        !          10703: {{EJC{{{{
        !          10704: *
        !          10705: *      GT
        !          10706: *
        !          10707: {S$GTF{ENT{{{{ENTRY POINT
        !          10708: {{JSR{ACOMP{{{CALL ARITHMETIC COMPARISON ROUTINE
        !          10709: {{ERR{111{GT{{FIRST ARGUMENT IS NOT NUMERIC
        !          10710: {{ERR{112{GT{{SECOND ARGUMENT IS NOT NUMERIC
        !          10711: {{PPM{EXFAL{{{FAIL IF LT
        !          10712: {{PPM{EXFAL{{{FAIL IF EQ
        !          10713: {{PPM{EXNUL{{{RETURN NULL IF GT
        !          10714: {{EJC{{{{
        !          10715: *
        !          10716: *      HOST
        !          10717: *
        !          10718: {S$HST{ENT{{{{ENTRY POINT
        !          10719: {{MOV{(SP)+{R9{{GET THIRD ARG
        !          10720: {{MOV{(SP)+{R10{{GET SECOND ARG
        !          10721: {{MOV{(SP)+{R6{{GET FIRST ARG
        !          10722: {{JSR{SYSHS{{{ENTER SYSHS ROUTINE
        !          10723: {{ERR{254{ERRONEOUS{{ARGUMENT FOR HOST
        !          10724: {{ERR{255{ERROR{{DURING EXECUTION OF HOST
        !          10725: {{PPM{SHST1{{{STORE HOST STRING
        !          10726: {{PPM{EXNUL{{{RETURN NULL RESULT
        !          10727: {{PPM{EXIXR{{{RETURN XR
        !          10728: {{PPM{EXFAL{{{FAIL RETURN
        !          10729: *
        !          10730: *      RETURN HOST STRING
        !          10731: *
        !          10732: {SHST1{BZE{R10{EXNUL{{NULL STRING IF SYSHS UNCOOPERATIVE
        !          10733: {{MOV{4*SCLEN(R10){R6{{LENGTH
        !          10734: {{ZER{R7{{{ZERO OFFSET
        !          10735: {{JSR{SBSTR{{{BUILD COPY OF STRING
        !          10736: {{MOV{R9{-(SP){{STACK THE RESULT
        !          10737: {{BRN{EXITS{{{RETURN RESULT ON STACK
        !          10738: {{EJC{{{{
        !          10739: *
        !          10740: *      IDENT
        !          10741: *
        !          10742: {S$IDN{ENT{{{{ENTRY POINT
        !          10743: {{MOV{(SP)+{R9{{LOAD SECOND ARGUMENT
        !          10744: {{MOV{(SP)+{R10{{LOAD FIRST ARGUMENT
        !          10745: {{JSR{IDENT{{{CALL IDENT COMPARISON ROUTINE
        !          10746: {{PPM{EXNUL{{{RETURN NULL IF IDENT
        !          10747: {{BRN{EXFAL{{{FAIL IF DIFFER
        !          10748: {{EJC{{{{
        !          10749: *
        !          10750: *      INPUT
        !          10751: *
        !          10752: {S$INP{ENT{{{{ENTRY POINT
        !          10753: {{ZER{R7{{{INPUT FLAG
        !          10754: {{JSR{IOPUT{{{CALL INPUT/OUTPUT ASSOC. ROUTINE
        !          10755: {{ERR{113{INPUT{{THIRD ARGUMENT IS NOT A STRING
        !          10756: {{ERR{114{INAPPROPRIATE{{SECOND ARGUMENT FOR INPUT
        !          10757: {{ERR{115{INAPPROPRIATE{{FIRST ARGUMENT FOR INPUT
        !          10758: {{ERR{116{INAPPROPRIATE{{FILE SPECIFICATION FOR INPUT
        !          10759: {{PPM{EXFAL{{{FAIL IF FILE DOES NOT EXIST
        !          10760: {{ERR{117{INPUT{{FILE CANNOT BE READ
        !          10761: {{BRN{EXNUL{{{RETURN NULL STRING
        !          10762: {{EJC{{{{
        !          10763: *
        !          10764: *      INSERT
        !          10765: *
        !          10766: {S$INS{ENT{{{{ENTRY POINT
        !          10767: {{MOV{(SP)+{R10{{GET STRING ARG
        !          10768: {{JSR{GTSMI{{{GET REPLACE LENGTH
        !          10769: {{ERR{277{INSERT{{THIRD ARGUMENT NOT INTEGER
        !          10770: {{PPM{EXFAL{{{FAIL IF OUT OF RANGE
        !          10771: {{MOV{R8{R7{{COPY TO PROPER REG
        !          10772: {{JSR{GTSMI{{{GET REPLACE POSITION
        !          10773: {{ERR{278{INSERT{{SECOND ARGUMENT NOT INTEGER
        !          10774: {{PPM{EXFAL{{{FAIL IF OUT OF RANGE
        !          10775: {{BZE{R8{EXFAL{{FAIL IF ZERO
        !          10776: {{DCV{R8{{{DECREMENT TO GET OFFSET
        !          10777: {{MOV{R8{R6{{PUT IN PROPER REGISTER
        !          10778: {{MOV{(SP)+{R9{{GET BUFFER
        !          10779: {{BEQ{(R9){#B$BCT{SINS1{PRESS ON IF TYPE OK
        !          10780: {{ERB{279{INSERT{{FIRST ARGUMENT NOT BUFFER
        !          10781: *
        !          10782: *      HERE WHEN EVERYTHING LOADED UP
        !          10783: *
        !          10784: {SINS1{JSR{INSBF{{{CALL TO INSERT
        !          10785: {{ERR{280{INSERT{{FOURTH ARGUMENT NOT A STRING
        !          10786: {{PPM{EXFAL{{{FAIL IF OUT OF RANGE
        !          10787: {{BRN{EXNUL{{{ELSE OK - EXIT WITH NULL
        !          10788: {{EJC{{{{
        !          10789: *
        !          10790: *      INTEGER
        !          10791: *
        !          10792: {S$INT{ENT{{{{ENTRY POINT
        !          10793: {{MOV{(SP)+{R9{{LOAD ARGUMENT
        !          10794: {{JSR{GTNUM{{{CONVERT TO NUMERIC
        !          10795: {{PPM{EXFAL{{{FAIL IF NON-NUMERIC
        !          10796: {{BEQ{R6{#B$ICL{EXNUL{RETURN NULL IF INTEGER
        !          10797: {{BRN{EXFAL{{{FAIL IF REAL
        !          10798: {{EJC{{{{
        !          10799: *
        !          10800: *      ITEM
        !          10801: *
        !          10802: *      ITEM DOES NOT PERMIT THE DIRECT (FAST) CALL SO THAT
        !          10803: *      WA CONTAINS THE ACTUAL NUMBER OF ARGUMENTS PASSED.
        !          10804: *
        !          10805: {S$ITM{ENT{{{{ENTRY POINT
        !          10806: *
        !          10807: *      DEAL WITH CASE OF NO ARGS
        !          10808: *
        !          10809: {{BNZ{R6{SITM1{{JUMP IF AT LEAST ONE ARG
        !          10810: {{MOV{#NULLS{-(SP){{ELSE SUPPLY GARBAGE NULL ARG
        !          10811: {{MOV{#NUM01{R6{{AND FIX ARGUMENT COUNT
        !          10812: *
        !          10813: *      CHECK FOR NAME/VALUE CASES
        !          10814: *
        !          10815: {SITM1{SCP{R9{{{GET CURRENT CODE POINTER
        !          10816: {{MOV{(R9){R10{{LOAD NEXT CODE WORD
        !          10817: {{DCV{R6{{{GET NUMBER OF SUBSCRIPTS
        !          10818: {{MOV{R6{R9{{COPY FOR ARREF
        !          10819: {{BEQ{R10{#OFNE${SITM2{JUMP IF CALLED BY NAME
        !          10820: *
        !          10821: *      HERE IF CALLED BY VALUE
        !          10822: *
        !          10823: {{ZER{R7{{{SET CODE FOR CALL BY VALUE
        !          10824: {{BRN{ARREF{{{OFF TO ARRAY REFERENCE ROUTINE
        !          10825: *
        !          10826: *      HERE FOR CALL BY NAME
        !          10827: *
        !          10828: {SITM2{MNZ{R7{{{SET CODE FOR CALL BY NAME
        !          10829: {{LCW{R6{{{LOAD AND IGNORE OFNE$ CALL
        !          10830: {{BRN{ARREF{{{OFF TO ARRAY REFERENCE ROUTINE
        !          10831: {{EJC{{{{
        !          10832: *
        !          10833: *      LE
        !          10834: *
        !          10835: {S$LEF{ENT{{{{ENTRY POINT
        !          10836: {{JSR{ACOMP{{{CALL ARITHMETIC COMPARISON ROUTINE
        !          10837: {{ERR{118{LE{{FIRST ARGUMENT IS NOT NUMERIC
        !          10838: {{ERR{119{LE{{SECOND ARGUMENT IS NOT NUMERIC
        !          10839: {{PPM{EXNUL{{{RETURN NULL IF LT
        !          10840: {{PPM{EXNUL{{{RETURN NULL IF EQ
        !          10841: {{PPM{EXFAL{{{FAIL IF GT
        !          10842: {{EJC{{{{
        !          10843: *
        !          10844: *      LEN
        !          10845: *
        !          10846: {S$LEN{ENT{{{{ENTRY POINT
        !          10847: {{MOV{#P$LEN{R7{{SET PCODE FOR INTEGER ARG CASE
        !          10848: {{MOV{#P$LND{R6{{SET PCODE FOR EXPR ARG CASE
        !          10849: {{JSR{PATIN{{{CALL COMMON ROUTINE TO BUILD NODE
        !          10850: {{ERR{120{LEN{{ARGUMENT IS NOT INTEGER OR EXPRESSION
        !          10851: {{ERR{121{LEN{{ARGUMENT IS NEGATIVE OR TOO LARGE
        !          10852: {{BRN{EXIXR{{{RETURN PATTERN NODE
        !          10853: {{EJC{{{{
        !          10854: *
        !          10855: *      LEQ
        !          10856: *
        !          10857: {S$LEQ{ENT{{{{ENTRY POINT
        !          10858: {{JSR{LCOMP{{{CALL STRING COMPARISON ROUTINE
        !          10859: {{ERR{122{LEQ{{FIRST ARGUMENT IS NOT STRING
        !          10860: {{ERR{123{LEQ{{SECOND ARGUMENT IS NOT STRING
        !          10861: {{PPM{EXFAL{{{FAIL IF LLT
        !          10862: {{PPM{EXNUL{{{RETURN NULL IF LEQ
        !          10863: {{PPM{EXFAL{{{FAIL IF LGT
        !          10864: {{EJC{{{{
        !          10865: *
        !          10866: *      LGE
        !          10867: *
        !          10868: {S$LGE{ENT{{{{ENTRY POINT
        !          10869: {{JSR{LCOMP{{{CALL STRING COMPARISON ROUTINE
        !          10870: {{ERR{124{LGE{{FIRST ARGUMENT IS NOT STRING
        !          10871: {{ERR{125{LGE{{SECOND ARGUMENT IS NOT STRING
        !          10872: {{PPM{EXFAL{{{FAIL IF LLT
        !          10873: {{PPM{EXNUL{{{RETURN NULL IF LEQ
        !          10874: {{PPM{EXNUL{{{RETURN NULL IF LGT
        !          10875: {{EJC{{{{
        !          10876: *
        !          10877: *      LGT
        !          10878: *
        !          10879: {S$LGT{ENT{{{{ENTRY POINT
        !          10880: {{JSR{LCOMP{{{CALL STRING COMPARISON ROUTINE
        !          10881: {{ERR{126{LGT{{FIRST ARGUMENT IS NOT STRING
        !          10882: {{ERR{127{LGT{{SECOND ARGUMENT IS NOT STRING
        !          10883: {{PPM{EXFAL{{{FAIL IF LLT
        !          10884: {{PPM{EXFAL{{{FAIL IF LEQ
        !          10885: {{PPM{EXNUL{{{RETURN NULL IF LGT
        !          10886: {{EJC{{{{
        !          10887: *
        !          10888: *      LLE
        !          10889: *
        !          10890: {S$LLE{ENT{{{{ENTRY POINT
        !          10891: {{JSR{LCOMP{{{CALL STRING COMPARISON ROUTINE
        !          10892: {{ERR{128{LLE{{FIRST ARGUMENT IS NOT STRING
        !          10893: {{ERR{129{LLE{{SECOND ARGUMENT IS NOT STRING
        !          10894: {{PPM{EXNUL{{{RETURN NULL IF LLT
        !          10895: {{PPM{EXNUL{{{RETURN NULL IF LEQ
        !          10896: {{PPM{EXFAL{{{FAIL IF LGT
        !          10897: {{EJC{{{{
        !          10898: *
        !          10899: *      LLT
        !          10900: *
        !          10901: {S$LLT{ENT{{{{ENTRY POINT
        !          10902: {{JSR{LCOMP{{{CALL STRING COMPARISON ROUTINE
        !          10903: {{ERR{130{LLT{{FIRST ARGUMENT IS NOT STRING
        !          10904: {{ERR{131{LLT{{SECOND ARGUMENT IS NOT STRING
        !          10905: {{PPM{EXNUL{{{RETURN NULL IF LLT
        !          10906: {{PPM{EXFAL{{{FAIL IF LEQ
        !          10907: {{PPM{EXFAL{{{FAIL IF LGT
        !          10908: {{EJC{{{{
        !          10909: *
        !          10910: *      LNE
        !          10911: *
        !          10912: {S$LNE{ENT{{{{ENTRY POINT
        !          10913: {{JSR{LCOMP{{{CALL STRING COMPARISON ROUTINE
        !          10914: {{ERR{132{LNE{{FIRST ARGUMENT IS NOT STRING
        !          10915: {{ERR{133{LNE{{SECOND ARGUMENT IS NOT STRING
        !          10916: {{PPM{EXNUL{{{RETURN NULL IF LLT
        !          10917: {{PPM{EXFAL{{{FAIL IF LEQ
        !          10918: {{PPM{EXNUL{{{RETURN NULL IF LGT
        !          10919: {{EJC{{{{
        !          10920: *
        !          10921: *      LOCAL
        !          10922: *
        !          10923: {S$LOC{ENT{{{{ENTRY POINT
        !          10924: {{JSR{GTSMI{{{GET SECOND ARGUMENT (LOCAL NUMBER)
        !          10925: {{ERR{134{LOCAL{{SECOND ARGUMENT IS NOT INTEGER
        !          10926: {{PPM{EXFAL{{{FAIL IF OUT OF RANGE
        !          10927: {{MOV{R9{R7{{SAVE LOCAL NUMBER
        !          10928: {{MOV{(SP)+{R9{{LOAD FIRST ARGUMENT
        !          10929: {{JSR{GTNVR{{{POINT TO VRBLK
        !          10930: {{PPM{SLOC1{{{JUMP IF NOT VARIABLE NAME
        !          10931: {{MOV{4*VRFNC(R9){R9{{ELSE LOAD FUNCTION POINTER
        !          10932: {{BNE{(R9){#B$PFC{SLOC1{JUMP IF NOT PROGRAM DEFINED
        !          10933: *
        !          10934: *      HERE IF WE HAVE A PROGRAM DEFINED FUNCTION NAME
        !          10935: *
        !          10936: {{BZE{R7{EXFAL{{FAIL IF SECOND ARG IS ZERO
        !          10937: {{BGT{R7{4*PFNLO(R9){EXFAL{OR TOO LARGE
        !          10938: {{ADD{4*FARGS(R9){R7{{ELSE ADJUST OFFSET TO INCLUDE ARGS
        !          10939: {{WTB{R7{{{CONVERT TO BYTES
        !          10940: {{ADD{R7{R9{{POINT TO LOCAL POINTER
        !          10941: {{MOV{4*PFAGB(R9){R9{{LOAD VRBLK POINTER
        !          10942: {{BRN{EXVNM{{{EXIT BUILDING NMBLK
        !          10943: *
        !          10944: *      HERE IF FIRST ARGUMENT IS NO GOOD
        !          10945: *
        !          10946: {SLOC1{ERB{135{LOCAL{{FIRST ARG IS NOT A PROGRAM FUNCTION NAME
        !          10947: {{EJC{{{{
        !          10948: *
        !          10949: *      LOAD
        !          10950: *
        !          10951: {S$LOD{ENT{{{{ENTRY POINT
        !          10952: {{JSR{GTSTG{{{LOAD LIBRARY NAME
        !          10953: {{ERR{136{LOAD{{SECOND ARGUMENT IS NOT STRING
        !          10954: {{MOV{R9{R10{{SAVE LIBRARY NAME
        !          10955: {{JSR{XSCNI{{{PREPARE TO SCAN FIRST ARGUMENT
        !          10956: {{ERR{137{LOAD{{FIRST ARGUMENT IS NOT STRING
        !          10957: {{ERR{138{LOAD{{FIRST ARGUMENT IS NULL
        !          10958: {{MOV{R10{-(SP){{STACK LIBRARY NAME
        !          10959: {{MOV{#CH$PP{R8{{SET DELIMITER ONE = LEFT PAREN
        !          10960: {{MOV{R8{R10{{SET DELIMITER TWO = LEFT PAREN
        !          10961: {{JSR{XSCAN{{{SCAN FUNCTION NAME
        !          10962: {{MOV{R9{-(SP){{SAVE PTR TO FUNCTION NAME
        !          10963: {{BNZ{R6{SLOD1{{JUMP IF LEFT PAREN FOUND
        !          10964: {{ERB{139{LOAD{{FIRST ARGUMENT IS MISSING A LEFT PAREN
        !          10965: *
        !          10966: *      HERE AFTER SUCCESSFULLY SCANNING FUNCTION NAME
        !          10967: *
        !          10968: {SLOD1{JSR{GTNVR{{{LOCATE VRBLK
        !          10969: {{ERR{140{LOAD{{FIRST ARGUMENT HAS NULL FUNCTION NAME
        !          10970: {{MOV{R9{LODFN{{SAVE VRBLK POINTER
        !          10971: {{ZER{LODNA{{{ZERO COUNT OF ARGUMENTS
        !          10972: *
        !          10973: *      LOOP TO SCAN ARGUMENT DATATYPE NAMES
        !          10974: *
        !          10975: {SLOD2{MOV{#CH$RP{R8{{DELIMITER ONE IS RIGHT PAREN
        !          10976: {{MOV{#CH$CM{R10{{DELIMITER TWO IS COMMA
        !          10977: {{JSR{XSCAN{{{SCAN NEXT ARGUMENT NAME
        !          10978: {{ICV{LODNA{{{BUMP ARGUMENT COUNT
        !          10979: {{BNZ{R6{SLOD3{{JUMP IF OK DELIMITER WAS FOUND
        !          10980: {{ERB{141{LOAD{{FIRST ARGUMENT IS MISSING A RIGHT PAREN
        !          10981: {{EJC{{{{
        !          10982: *
        !          10983: *      LOAD (CONTINUED)
        !          10984: *
        !          10985: *      COME HERE TO ANALYZE THE DATATYPE POINTER IN (XR). THIS
        !          10986: *      CODE IS USED BOTH FOR ARGUMENTS (WA=1,2) AND FOR THE
        !          10987: *      RESULT DATATYPE (WITH WA SET TO ZERO).
        !          10988: *
        !          10989: {SLOD3{MOV{R9{-(SP){{STACK DATATYPE NAME POINTER
        !          10990: {{MOV{#NUM01{R7{{SET STRING CODE IN CASE
        !          10991: {{MOV{#SCSTR{R10{{POINT TO /STRING/
        !          10992: {{JSR{IDENT{{{CHECK FOR MATCH
        !          10993: {{PPM{SLOD4{{{JUMP IF MATCH
        !          10994: {{MOV{(SP){R9{{ELSE RELOAD NAME
        !          10995: {{ADD{R7{R7{{SET CODE FOR INTEGER (2)
        !          10996: {{MOV{#SCINT{R10{{POINT TO /INTEGER/
        !          10997: {{JSR{IDENT{{{CHECK FOR MATCH
        !          10998: {{PPM{SLOD4{{{JUMP IF MATCH
        !          10999: {{MOV{(SP){R9{{ELSE RELOAD STRING POINTER
        !          11000: {{ICV{R7{{{SET CODE FOR REAL (3)
        !          11001: {{MOV{#SCREA{R10{{POINT TO /REAL/
        !          11002: {{JSR{IDENT{{{CHECK FOR MATCH
        !          11003: {{PPM{SLOD4{{{JUMP IF MATCH
        !          11004: {{ZER{R7{{{ELSE GET CODE FOR NO CONVERT
        !          11005: *
        !          11006: *      MERGE HERE WITH PROPER DATATYPE CODE IN WB
        !          11007: *
        !          11008: {SLOD4{MOV{R7{(SP){{STORE CODE ON STACK
        !          11009: {{BEQ{R6{#NUM02{SLOD2{LOOP BACK IF ARG STOPPED BY COMMA
        !          11010: {{BZE{R6{SLOD5{{JUMP IF THAT WAS THE RESULT TYPE
        !          11011: *
        !          11012: *      HERE WE SCAN OUT THE RESULT TYPE (ARG STOPPED BY ) )
        !          11013: *
        !          11014: {{MOV{MXLEN{R8{{SET DUMMY (IMPOSSIBLE) DELIMITER 1
        !          11015: {{MOV{R8{R10{{AND DELIMITER TWO
        !          11016: {{JSR{XSCAN{{{SCAN RESULT NAME
        !          11017: {{ZER{R6{{{SET CODE FOR PROCESSING RESULT
        !          11018: {{BRN{SLOD3{{{JUMP BACK TO PROCESS RESULT NAME
        !          11019: {{EJC{{{{
        !          11020: *
        !          11021: *      LOAD (CONTINUED)
        !          11022: *
        !          11023: *      HERE AFTER PROCESSING ALL ARGS AND RESULT
        !          11024: *
        !          11025: {SLOD5{MOV{LODNA{R6{{GET NUMBER OF ARGUMENTS
        !          11026: {{MOV{R6{R8{{COPY FOR LATER
        !          11027: {{WTB{R6{{{CONVERT LENGTH TO BYTES
        !          11028: {{ADD{#4*EFSI${R6{{ADD SPACE FOR STANDARD FIELDS
        !          11029: {{JSR{ALLOC{{{ALLOCATE EFBLK
        !          11030: {{MOV{#B$EFC{(R9){{SET TYPE WORD
        !          11031: {{MOV{R8{4*FARGS(R9){{SET NUMBER OF ARGUMENTS
        !          11032: {{ZER{4*EFUSE(R9){{{SET USE COUNT (DFFNC WILL SET TO 1)
        !          11033: {{ZER{4*EFCOD(R9){{{ZERO CODE POINTER FOR NOW
        !          11034: {{MOV{(SP)+{4*EFRSL(R9){{STORE RESULT TYPE CODE
        !          11035: {{MOV{LODFN{4*EFVAR(R9){{STORE FUNCTION VRBLK POINTER
        !          11036: {{MOV{R6{4*EFLEN(R9){{STORE EFBLK LENGTH
        !          11037: {{MOV{R9{R7{{SAVE EFBLK POINTER
        !          11038: {{ADD{R6{R9{{POINT PAST END OF EFBLK
        !          11039: {{LCT{R8{R8{{SET NUMBER OF ARGUMENTS FOR LOOP
        !          11040: *
        !          11041: *      LOOP TO SET ARGUMENT TYPE CODES FROM STACK
        !          11042: *
        !          11043: {SLOD6{MOV{(SP)+{-(R9){{STORE ONE TYPE CODE FROM STACK
        !          11044: {{BCT{R8{SLOD6{{LOOP TILL ALL STORED
        !          11045: *
        !          11046: *      NOW LOAD THE EXTERNAL FUNCTION AND PERFORM DEFINITION
        !          11047: *
        !          11048: {{MOV{(SP)+{R9{{LOAD FUNCTION STRING NAME
        !          11049: {{MOV{(SP){R10{{LOAD LIBRARY NAME
        !          11050: {{MOV{R7{(SP){{STORE EFBLK POINTER
        !          11051: {{JSR{SYSLD{{{CALL FUNCTION TO LOAD EXTERNAL FUNC
        !          11052: {{ERR{142{LOAD{{FUNCTION DOES NOT EXIST
        !          11053: {{ERR{143{LOAD{{FUNCTION CAUSED INPUT ERROR DURING LOAD
        !          11054: {{MOV{(SP)+{R10{{RECALL EFBLK POINTER
        !          11055: {{MOV{R9{4*EFCOD(R10){{STORE CODE POINTER
        !          11056: {{MOV{LODFN{R9{{POINT TO VRBLK FOR FUNCTION
        !          11057: {{JSR{DFFNC{{{PERFORM FUNCTION DEFINITION
        !          11058: {{BRN{EXNUL{{{RETURN NULL RESULT
        !          11059: {{EJC{{{{
        !          11060: *
        !          11061: *      LPAD
        !          11062: *
        !          11063: {S$LPD{ENT{{{{ENTRY POINT
        !          11064: {{JSR{GTSTG{{{GET PAD CHARACTER
        !          11065: {{ERR{144{LPAD{{THIRD ARGUMENT NOT A STRING
        !          11066: {{PLC{R9{{{POINT TO CHARACTER (NULL IS BLANK)
        !          11067: {{LCH{R7{(R9){{LOAD PAD CHARACTER
        !          11068: {{JSR{GTSMI{{{GET PAD LENGTH
        !          11069: {{ERR{145{LPAD{{SECOND ARGUMENT IS NOT INTEGER
        !          11070: {{PPM{SLPD3{{{SKIP IF NEGATIVE OR LARGE
        !          11071: *
        !          11072: *      MERGE TO CHECK FIRST ARG
        !          11073: *
        !          11074: {SLPD1{JSR{GTSTG{{{GET FIRST ARGUMENT (STRING TO PAD)
        !          11075: {{ERR{146{LPAD{{FIRST ARGUMENT IS NOT STRING
        !          11076: {{BGE{R6{R8{EXIXR{RETURN 1ST ARG IF TOO LONG TO PAD
        !          11077: {{MOV{R9{R10{{ELSE MOVE PTR TO STRING TO PAD
        !          11078: *
        !          11079: *      NOW WE ARE READY FOR THE PAD
        !          11080: *
        !          11081: *      (XL)                  POINTER TO STRING TO PAD
        !          11082: *      (WB)                  PAD CHARACTER
        !          11083: *      (WC)                  LENGTH TO PAD STRING TO
        !          11084: *
        !          11085: {{MOV{R8{R6{{COPY LENGTH
        !          11086: {{JSR{ALOCS{{{ALLOCATE SCBLK FOR NEW STRING
        !          11087: {{MOV{R9{-(SP){{SAVE AS RESULT
        !          11088: {{MOV{4*SCLEN(R10){R6{{LOAD LENGTH OF ARGUMENT
        !          11089: {{SUB{R6{R8{{CALCULATE NUMBER OF PAD CHARACTERS
        !          11090: {{PSC{R9{{{POINT TO CHARS IN RESULT STRING
        !          11091: {{LCT{R8{R8{{SET COUNTER FOR PAD LOOP
        !          11092: *
        !          11093: *      LOOP TO PERFORM PAD
        !          11094: *
        !          11095: {SLPD2{SCH{R7{(R9)+{{STORE PAD CHARACTER, BUMP PTR
        !          11096: {{BCT{R8{SLPD2{{LOOP TILL ALL PAD CHARS STORED
        !          11097: {{CSC{R9{{{COMPLETE STORE CHARACTERS
        !          11098: *
        !          11099: *      NOW COPY STRING
        !          11100: *
        !          11101: {{BZE{R6{EXITS{{EXIT IF NULL STRING
        !          11102: {{PLC{R10{{{ELSE POINT TO CHARS IN ARGUMENT
        !          11103: {{MVC{{{{MOVE CHARACTERS TO RESULT STRING
        !          11104: {{BRN{EXITS{{{JUMP FOR NEXT CODE WORD
        !          11105: *
        !          11106: *      HERE IF 2ND ARG IS NEGATIVE OR LARGE
        !          11107: *
        !          11108: {SLPD3{ZER{R8{{{ZERO PAD COUNT
        !          11109: {{BRN{SLPD1{{{MERGE
        !          11110: {{EJC{{{{
        !          11111: *
        !          11112: *      LT
        !          11113: *
        !          11114: {S$LTF{ENT{{{{ENTRY POINT
        !          11115: {{JSR{ACOMP{{{CALL ARITHMETIC COMPARISON ROUTINE
        !          11116: {{ERR{147{LT{{FIRST ARGUMENT IS NOT NUMERIC
        !          11117: {{ERR{148{LT{{SECOND ARGUMENT IS NOT NUMERIC
        !          11118: {{PPM{EXNUL{{{RETURN NULL IF LT
        !          11119: {{PPM{EXFAL{{{FAIL IF EQ
        !          11120: {{PPM{EXFAL{{{FAIL IF GT
        !          11121: {{EJC{{{{
        !          11122: *
        !          11123: *      NE
        !          11124: *
        !          11125: {S$NEF{ENT{{{{ENTRY POINT
        !          11126: {{JSR{ACOMP{{{CALL ARITHMETIC COMPARISON ROUTINE
        !          11127: {{ERR{149{NE{{FIRST ARGUMENT IS NOT NUMERIC
        !          11128: {{ERR{150{NE{{SECOND ARGUMENT IS NOT NUMERIC
        !          11129: {{PPM{EXNUL{{{RETURN NULL IF LT
        !          11130: {{PPM{EXFAL{{{FAIL IF EQ
        !          11131: {{PPM{EXNUL{{{RETURN NULL IF GT
        !          11132: {{EJC{{{{
        !          11133: *
        !          11134: *      NOTANY
        !          11135: *
        !          11136: {S$NAY{ENT{{{{ENTRY POINT
        !          11137: {{MOV{#P$NAS{R7{{SET PCODE FOR SINGLE CHAR ARG
        !          11138: {{MOV{#P$NAY{R10{{PCODE FOR MULTI-CHAR ARG
        !          11139: {{MOV{#P$NAD{R8{{SET PCODE FOR EXPR ARG
        !          11140: {{JSR{PATST{{{CALL COMMON ROUTINE TO BUILD NODE
        !          11141: {{ERR{151{NOTANY{{ARGUMENT IS NOT STRING OR EXPRESSION
        !          11142: {{BRN{EXIXR{{{JUMP FOR NEXT CODE WORD
        !          11143: {{EJC{{{{
        !          11144: *
        !          11145: *      OPSYN
        !          11146: *
        !          11147: {S$OPS{ENT{{{{ENTRY POINT
        !          11148: {{JSR{GTSMI{{{LOAD THIRD ARGUMENT
        !          11149: {{ERR{152{OPSYN{{THIRD ARGUMENT IS NOT INTEGER
        !          11150: {{ERR{153{OPSYN{{THIRD ARGUMENT IS NEGATIVE OR TOO LARGE
        !          11151: {{MOV{R8{R7{{IF OK, SAVE THIRD ARGUMNET
        !          11152: {{MOV{(SP)+{R9{{LOAD SECOND ARGUMENT
        !          11153: {{JSR{GTNVR{{{LOCATE VARIABLE BLOCK
        !          11154: {{ERR{154{OPSYN{{SECOND ARG IS NOT NATURAL VARIABLE NAME
        !          11155: {{MOV{4*VRFNC(R9){R10{{IF OK, LOAD FUNCTION BLOCK POINTER
        !          11156: {{BNZ{R7{SOPS2{{JUMP IF OPERATOR OPSYN CASE
        !          11157: *
        !          11158: *      HERE FOR FUNCTION OPSYN (THIRD ARG ZERO)
        !          11159: *
        !          11160: {{MOV{(SP)+{R9{{LOAD FIRST ARGUMENT
        !          11161: {{JSR{GTNVR{{{GET VRBLK POINTER
        !          11162: {{ERR{155{OPSYN{{FIRST ARG IS NOT NATURAL VARIABLE NAME
        !          11163: *
        !          11164: *      MERGE HERE TO PERFORM FUNCTION DEFINITION
        !          11165: *
        !          11166: {SOPS1{JSR{DFFNC{{{CALL FUNCTION DEFINER
        !          11167: {{BRN{EXNUL{{{EXIT WITH NULL RESULT
        !          11168: *
        !          11169: *      HERE FOR OPERATOR OPSYN (THIRD ARG NON-ZERO)
        !          11170: *
        !          11171: {SOPS2{JSR{GTSTG{{{GET OPERATOR NAME
        !          11172: {{PPM{SOPS5{{{JUMP IF NOT STRING
        !          11173: {{BNE{R6{#NUM01{SOPS5{ERROR IF NOT ONE CHAR LONG
        !          11174: {{PLC{R9{{{ELSE POINT TO CHARACTER
        !          11175: {{LCH{R8{(R9){{LOAD CHARACTER NAME
        !          11176: {{EJC{{{{
        !          11177: *
        !          11178: *      OPSYN (CONTINUED)
        !          11179: *
        !          11180: *      NOW SET TO SEARCH FOR MATCHING UNARY OR BINARY OPERATOR
        !          11181: *      NAME AS APPROPRIATE. NOTE THAT THERE ARE =OPBUN UNDEFINED
        !          11182: *      BINARY OPERATORS AND =OPUUN UNDEFINED UNARY OPERATORS.
        !          11183: *
        !          11184: {{MOV{#R$UUB{R6{{POINT TO UNOP POINTERS IN CASE
        !          11185: {{MOV{#OPNSU{R9{{POINT TO NAMES OF UNARY OPERATORS
        !          11186: {{ADD{#OPBUN{R7{{ADD NO. OF UNDEFINED BINARY OPS
        !          11187: {{BEQ{R7{#OPUUN{SOPS3{JUMP IF UNOP (THIRD ARG WAS 1)
        !          11188: {{MOV{#R$UBA{R6{{ELSE POINT TO BINARY OPERATOR PTRS
        !          11189: {{MOV{#OPSNB{R9{{POINT TO NAMES OF BINARY OPERATORS
        !          11190: {{MOV{#OPBUN{R7{{SET NUMBER OF UNDEFINED BINOPS
        !          11191: *
        !          11192: *      MERGE HERE TO CHECK LIST (WB = NUMBER TO CHECK)
        !          11193: *
        !          11194: {SOPS3{LCT{R7{R7{{SET COUNTER TO CONTROL LOOP
        !          11195: *
        !          11196: *      LOOP TO SEARCH FOR NAME MATCH
        !          11197: *
        !          11198: {SOPS4{BEQ{R8{(R9){SOPS6{JUMP IF NAMES MATCH
        !          11199: {{ICA{R6{{{ELSE PUSH POINTER TO FUNCTION PTR
        !          11200: {{ICA{R9{{{BUMP POINTER
        !          11201: {{BCT{R7{SOPS4{{LOOP BACK TILL ALL CHECKED
        !          11202: *
        !          11203: *      HERE IF BAD OPERATOR NAME
        !          11204: *
        !          11205: {SOPS5{ERB{156{OPSYN{{FIRST ARG IS NOT CORRECT OPERATOR NAME
        !          11206: *
        !          11207: *      COME HERE ON FINDING A MATCH IN THE OPERATOR NAME TABLE
        !          11208: *
        !          11209: {SOPS6{MOV{R6{R9{{COPY POINTER TO FUNCTION BLOCK PTR
        !          11210: {{SUB{#4*VRFNC{R9{{MAKE IT LOOK LIKE DUMMY VRBLK
        !          11211: {{BRN{SOPS1{{{MERGE BACK TO DEFINE OPERATOR
        !          11212: {{EJC{{{{
        !          11213: *
        !          11214: *      OUTPUT
        !          11215: *
        !          11216: {S$OUP{ENT{{{{ENTRY POINT
        !          11217: {{MOV{#NUM03{R7{{OUTPUT FLAG
        !          11218: {{JSR{IOPUT{{{CALL INPUT/OUTPUT ASSOC. ROUTINE
        !          11219: {{ERR{157{OUTPUT{{THIRD ARGUMENT IS NOT A STRING
        !          11220: {{ERR{158{INAPPROPRIATE{{SECOND ARGUMENT FOR OUTPUT
        !          11221: {{ERR{159{INAPPROPRIATE{{FIRST ARGUMENT FOR OUTPUT
        !          11222: {{ERR{160{INAPPROPRIATE{{FILE SPECIFICATION FOR OUTPUT
        !          11223: {{PPM{EXFAL{{{FAIL IF FILE DOES NOT EXIST
        !          11224: {{ERR{161{OUTPUT{{FILE CANNOT BE WRITTEN TO
        !          11225: {{BRN{EXNUL{{{RETURN NULL STRING
        !          11226: {{EJC{{{{
        !          11227: *
        !          11228: *      POS
        !          11229: *
        !          11230: {S$POS{ENT{{{{ENTRY POINT
        !          11231: {{MOV{#P$POS{R7{{SET PCODE FOR INTEGER ARG CASE
        !          11232: {{MOV{#P$PSD{R6{{SET PCODE FOR EXPRESSION ARG CASE
        !          11233: {{JSR{PATIN{{{CALL COMMON ROUTINE TO BUILD NODE
        !          11234: {{ERR{162{POS{{ARGUMENT IS NOT INTEGER OR EXPRESSION
        !          11235: {{ERR{163{POS{{ARGUMENT IS NEGATIVE OR TOO LARGE
        !          11236: {{BRN{EXIXR{{{RETURN PATTERN NODE
        !          11237: {{EJC{{{{
        !          11238: *
        !          11239: *      PROTOTYPE
        !          11240: *
        !          11241: {S$PRO{ENT{{{{ENTRY POINT
        !          11242: {{MOV{(SP)+{R9{{LOAD ARGUMENT
        !          11243: {{MOV{4*TBLEN(R9){R7{{LENGTH IF TABLE, VECTOR (=VCLEN)
        !          11244: {{BTW{R7{{{CONVERT TO WORDS
        !          11245: {{MOV{(R9){R6{{LOAD TYPE WORD OF ARGUMENT BLOCK
        !          11246: {{BEQ{R6{#B$ART{SPRO4{JUMP IF ARRAY
        !          11247: {{BEQ{R6{#B$TBT{SPRO1{JUMP IF TABLE
        !          11248: {{BEQ{R6{#B$VCT{SPRO3{JUMP IF VECTOR
        !          11249: {{BEQ{R6{#B$BCT{SPR05{JUMP IF BUFFER
        !          11250: {{ERB{164{PROTOTYPE{{ARGUMENT IS NOT VALID OBJECT
        !          11251: *
        !          11252: *      HERE FOR TABLE
        !          11253: *
        !          11254: {SPRO1{SUB{#TBSI${R7{{SUBTRACT STANDARD FIELDS
        !          11255: *
        !          11256: *      MERGE FOR VECTOR
        !          11257: *
        !          11258: {SPRO2{MTI{R7{{{CONVERT TO INTEGER
        !          11259: {{BRN{EXINT{{{EXIT WITH INTEGER RESULT
        !          11260: *
        !          11261: *      HERE FOR VECTOR
        !          11262: *
        !          11263: {SPRO3{SUB{#VCSI${R7{{SUBTRACT STANDARD FIELDS
        !          11264: {{BRN{SPRO2{{{MERGE
        !          11265: *
        !          11266: *      HERE FOR ARRAY
        !          11267: *
        !          11268: {SPRO4{ADD{4*AROFS(R9){R9{{POINT TO PROTOTYPE FIELD
        !          11269: {{MOV{(R9){R9{{LOAD PROTOTYPE
        !          11270: {{BRN{EXIXR{{{RETURN PROTOTYPE AS RESULT
        !          11271: *
        !          11272: *      HERE FOR BUFFER
        !          11273: *
        !          11274: {SPR05{MOV{4*BCBUF(R9){R9{{POINT TO BFBLK
        !          11275: {{MTI{4*BFALC(R9){{{LOAD ALLOCATED LENGTH
        !          11276: {{BRN{EXINT{{{EXIT WITH INTEGER ALLOCATION
        !          11277: {{EJC{{{{
        !          11278: *
        !          11279: *      REMDR
        !          11280: *
        !          11281: {S$RMD{ENT{{{{ENTRY POINT
        !          11282: {{ZER{R7{{{SET POSITIVE FLAG
        !          11283: {{MOV{(SP){R9{{LOAD SECOND ARGUMENT
        !          11284: {{JSR{GTINT{{{CONVERT TO INTEGER
        !          11285: {{ERR{165{REMDR{{SECOND ARGUMENT IS NOT INTEGER
        !          11286: {{JSR{ARITH{{{CONVERT ARGS
        !          11287: {{PPM{SRM01{{{FIRST ARG NOT INTEGER
        !          11288: {{PPM{{{{SECOND ARG CHECKED ABOVE
        !          11289: {{PPM{SRM01{{{FIRST ARG REAL
        !          11290: {{LDI{4*ICVAL(R9){{{LOAD LEFT ARGUMENT VALUE
        !          11291: {{RMI{4*ICVAL(R10){{{GET REMAINDER
        !          11292: {{INO{EXINT{{{JUMP IF NO OVERFLOW
        !          11293: {{ERB{167{REMDR{{CAUSED INTEGER OVERFLOW
        !          11294: *
        !          11295: *      FAIL FIRST ARGUMENT
        !          11296: *
        !          11297: {SRM01{ERB{166{REMDR{{FIRST ARGUMENT IS NOT INTEGER
        !          11298: {{EJC{{{{
        !          11299: *
        !          11300: *      REPLACE
        !          11301: *
        !          11302: *      THE ACTUAL REPLACE OPERATION USES AN SCBLK WHOSE CFP$A
        !          11303: *      CHARS CONTAIN THE TRANSLATED VERSIONS OF ALL THE CHARS.
        !          11304: *      THE TABLE POINTER IS REMEMBERED FROM CALL TO CALL AND
        !          11305: *      THE TABLE IS ONLY BUILT WHEN THE ARGUMENTS CHANGE.
        !          11306: *
        !          11307: {S$RPL{ENT{{{{ENTRY POINT
        !          11308: {{JSR{GTSTG{{{LOAD THIRD ARGUMENT AS STRING
        !          11309: {{ERR{168{REPLACE{{THIRD ARGUMENT IS NOT STRING
        !          11310: {{MOV{R9{R10{{SAVE THIRD ARG PTR
        !          11311: {{JSR{GTSTG{{{GET SECOND ARGUMENT
        !          11312: {{ERR{169{REPLACE{{SECOND ARGUMENT IS NOT STRING
        !          11313: *
        !          11314: *      CHECK TO SEE IF THIS IS THE SAME TABLE AS LAST TIME
        !          11315: *
        !          11316: {{BNE{R9{R$RA2{SRPL1{JUMP IF 2ND ARGUMENT DIFFERENT
        !          11317: {{BEQ{R10{R$RA3{SRPL4{JUMP IF ARGS SAME AS LAST TIME
        !          11318: *
        !          11319: *      HERE WE BUILD A NEW REPLACE TABLE (NOTE WA = 2ND ARG LEN)
        !          11320: *
        !          11321: {SRPL1{MOV{4*SCLEN(R10){R7{{LOAD 3RD ARGUMENT LENGTH
        !          11322: {{BNE{R6{R7{SRPL5{JUMP IF ARGUMENTS NOT SAME LENGTH
        !          11323: {{BZE{R7{SRPL5{{JUMP IF NULL 2ND ARGUMENT
        !          11324: {{MOV{R10{R$RA3{{SAVE THIRD ARG FOR NEXT TIME IN
        !          11325: {{MOV{R9{R$RA2{{SAVE SECOND ARG FOR NEXT TIME IN
        !          11326: {{MOV{KVALP{R10{{POINT TO ALPHABET STRING
        !          11327: {{MOV{4*SCLEN(R10){R6{{LOAD ALPHABET SCBLK LENGTH
        !          11328: {{MOV{R$RPT{R9{{POINT TO CURRENT TABLE (IF ANY)
        !          11329: {{BNZ{R9{SRPL2{{JUMP IF WE ALREADY HAVE A TABLE
        !          11330: *
        !          11331: *      HERE WE ALLOCATE A NEW TABLE
        !          11332: *
        !          11333: {{JSR{ALOCS{{{ALLOCATE NEW TABLE
        !          11334: {{MOV{R8{R6{{KEEP SCBLK LENGTH
        !          11335: {{MOV{R9{R$RPT{{SAVE TABLE POINTER FOR NEXT TIME
        !          11336: *
        !          11337: *      MERGE HERE WITH POINTER TO NEW TABLE BLOCK IN (XR)
        !          11338: *
        !          11339: {SRPL2{CTB{R6{SCSI${{COMPUTE LENGTH OF SCBLK
        !          11340: {{MVW{{{{COPY TO GET INITIAL TABLE VALUES
        !          11341: {{EJC{{{{
        !          11342: *
        !          11343: *      REPLACE (CONTINUED)
        !          11344: *
        !          11345: *      NOW WE MUST PLUG SELECTED ENTRIES AS REQUIRED. NOTE THAT
        !          11346: *      WE ARE SHORT OF INDEX REGISTERS FOR THE FOLLOWING LOOP.
        !          11347: *      HENCE THE NEED TO REPEATEDLY RE-INITIALISE CHAR PTR XL
        !          11348: *
        !          11349: {{MOV{R$RA2{R10{{POINT TO SECOND ARGUMENT
        !          11350: {{LCT{R7{R7{{NUMBER OF CHARS TO PLUG
        !          11351: {{ZER{R8{{{ZERO CHAR OFFSET
        !          11352: {{MOV{R$RA3{R9{{POINT TO 3RD ARG
        !          11353: {{PLC{R9{{{GET CHAR PTR FOR 3RD ARG
        !          11354: *
        !          11355: *      LOOP TO PLUG CHARS
        !          11356: *
        !          11357: {SRPL3{MOV{R$RA2{R10{{POINT TO 2ND ARG
        !          11358: {{PLC{R10{R8{{POINT TO NEXT CHAR
        !          11359: {{ICV{R8{{{INCREMENT OFFSET
        !          11360: {{LCH{R6{(R10){{GET NEXT CHAR
        !          11361: {{MOV{R$RPT{R10{{POINT TO TRANSLATE TABLE
        !          11362: {{PSC{R10{R6{{CONVERT CHAR TO OFFSET INTO TABLE
        !          11363: {{LCH{R6{(R9)+{{GET TRANSLATED CHAR
        !          11364: {{SCH{R6{(R10){{STORE IN TABLE
        !          11365: {{CSC{R10{{{COMPLETE STORE CHARACTERS
        !          11366: {{BCT{R7{SRPL3{{LOOP TILL DONE
        !          11367: {{EJC{{{{
        !          11368: *
        !          11369: *      REPLACE (CONTINUED)
        !          11370: *
        !          11371: *      HERE TO PERFORM TRANSLATE
        !          11372: *
        !          11373: {SRPL4{JSR{GTSTG{{{GET FIRST ARGUMENT
        !          11374: {{ERR{170{REPLACE{{FIRST ARGUMENT IS NOT STRING
        !          11375: {{BZE{R6{EXNUL{{RETURN NULL IF NULL ARGUMENT
        !          11376: {{MOV{R9{R10{{COPY POINTER
        !          11377: {{MOV{R6{R8{{SAVE LENGTH
        !          11378: {{CTB{R6{SCHAR{{GET SCBLK LENGTH
        !          11379: {{JSR{ALLOC{{{ALLOCATE SPACE FOR COPY
        !          11380: {{MOV{R9{R7{{SAVE ADDRESS OF COPY
        !          11381: {{MVW{{{{MOVE SCBLK CONTENTS TO COPY
        !          11382: {{MOV{R$RPT{R9{{POINT TO REPLACE TABLE
        !          11383: {{PLC{R9{{{POINT TO CHARS OF TABLE
        !          11384: {{MOV{R7{R10{{POINT TO STRING TO TRANSLATE
        !          11385: {{PLC{R10{{{POINT TO CHARS OF STRING
        !          11386: {{MOV{R8{R6{{SET NUMBER OF CHARS TO TRANSLATE
        !          11387: {{TRC{{{{PERFORM TRANSLATION
        !          11388: {{MOV{R7{-(SP){{STACK NEW STRING AS RESULT
        !          11389: {{BRN{EXITS{{{RETURN WITH RESULT ON STACK
        !          11390: *
        !          11391: *      ERROR POINT
        !          11392: *
        !          11393: {SRPL5{ERB{171{NULL{{OR UNEQUALLY LONG 2ND, 3RD ARGS TO REPLACE
        !          11394: {{EJC{{{{
        !          11395: *
        !          11396: *      REWIND
        !          11397: *
        !          11398: {S$REW{ENT{{{{ENTRY POINT
        !          11399: {{JSR{IOFCB{{{CALL FCBLK ROUTINE
        !          11400: {{ERR{172{REWIND{{ARGUMENT IS NOT A SUITABLE NAME
        !          11401: {{ERR{173{REWIND{{ARGUMENT IS NULL
        !          11402: {{JSR{SYSRW{{{CALL SYSTEM REWIND FUNCTION
        !          11403: {{ERR{174{REWIND{{FILE DOES NOT EXIST
        !          11404: {{ERR{175{REWIND{{FILE DOES NOT PERMIT REWIND
        !          11405: {{ERR{176{REWIND{{CAUSED NON-RECOVERABLE ERROR
        !          11406: {{BRN{EXNUL{{{EXIT WITH NULL RESULT IF NO ERROR
        !          11407: {{EJC{{{{
        !          11408: *
        !          11409: *      REVERSE
        !          11410: *
        !          11411: {S$RVS{ENT{{{{ENTRY POINT
        !          11412: {{JSR{GTSTG{{{LOAD STRING ARGUMENT
        !          11413: {{ERR{177{REVERSE{{ARGUMENT IS NOT STRING
        !          11414: {{BZE{R6{EXIXR{{RETURN ARGUMENT IF NULL
        !          11415: {{MOV{R9{R10{{ELSE SAVE POINTER TO STRING ARG
        !          11416: {{JSR{ALOCS{{{ALLOCATE SPACE FOR NEW SCBLK
        !          11417: {{MOV{R9{-(SP){{STORE SCBLK PTR ON STACK AS RESULT
        !          11418: {{PSC{R9{{{PREPARE TO STORE IN NEW SCBLK
        !          11419: {{PLC{R10{R8{{POINT PAST LAST CHAR IN ARGUMENT
        !          11420: {{LCT{R8{R8{{SET LOOP COUNTER
        !          11421: *
        !          11422: *      LOOP TO MOVE CHARS IN REVERSE ORDER
        !          11423: *
        !          11424: {SRVS1{LCH{R7{-(R10){{LOAD NEXT CHAR FROM ARGUMENT
        !          11425: {{SCH{R7{(R9)+{{STORE IN RESULT
        !          11426: {{BCT{R8{SRVS1{{LOOP TILL ALL MOVED
        !          11427: {{CSC{R9{{{COMPLETE STORE CHARACTERS
        !          11428: {{BRN{EXITS{{{AND THEN JUMP FOR NEXT CODE WORD
        !          11429: {{EJC{{{{
        !          11430: *
        !          11431: *      RPAD
        !          11432: *
        !          11433: {S$RPD{ENT{{{{ENTRY POINT
        !          11434: {{JSR{GTSTG{{{GET PAD CHARACTER
        !          11435: {{ERR{178{RPAD{{THIRD ARGUMENT IS NOT STRING
        !          11436: {{PLC{R9{{{POINT TO CHARACTER (NULL IS BLANK)
        !          11437: {{LCH{R7{(R9){{LOAD PAD CHARACTER
        !          11438: {{JSR{GTSMI{{{GET PAD LENGTH
        !          11439: {{ERR{179{RPAD{{SECOND ARGUMENT IS NOT INTEGER
        !          11440: {{PPM{SRPD3{{{SKIP IF NEGATIVE OR LARGE
        !          11441: *
        !          11442: *      MERGE TO CHECK FIRST ARG.
        !          11443: *
        !          11444: {SRPD1{JSR{GTSTG{{{GET FIRST ARGUMENT (STRING TO PAD)
        !          11445: {{ERR{180{RPAD{{FIRST ARGUMENT IS NOT STRING
        !          11446: {{BGE{R6{R8{EXIXR{RETURN 1ST ARG IF TOO LONG TO PAD
        !          11447: {{MOV{R9{R10{{ELSE MOVE PTR TO STRING TO PAD
        !          11448: *
        !          11449: *      NOW WE ARE READY FOR THE PAD
        !          11450: *
        !          11451: *      (XL)                  POINTER TO STRING TO PAD
        !          11452: *      (WB)                  PAD CHARACTER
        !          11453: *      (WC)                  LENGTH TO PAD STRING TO
        !          11454: *
        !          11455: {{MOV{R8{R6{{COPY LENGTH
        !          11456: {{JSR{ALOCS{{{ALLOCATE SCBLK FOR NEW STRING
        !          11457: {{MOV{R9{-(SP){{SAVE AS RESULT
        !          11458: {{MOV{4*SCLEN(R10){R6{{LOAD LENGTH OF ARGUMENT
        !          11459: {{SUB{R6{R8{{CALCULATE NUMBER OF PAD CHARACTERS
        !          11460: {{PSC{R9{{{POINT TO CHARS IN RESULT STRING
        !          11461: {{LCT{R8{R8{{SET COUNTER FOR PAD LOOP
        !          11462: *
        !          11463: *      COPY ARGUMENT STRING
        !          11464: *
        !          11465: {{BZE{R6{SRPD2{{JUMP IF ARGUMENT IS NULL
        !          11466: {{PLC{R10{{{ELSE POINT TO ARGUMENT CHARS
        !          11467: {{MVC{{{{MOVE CHARACTERS TO RESULT STRING
        !          11468: *
        !          11469: *      LOOP TO SUPPLY PAD CHARACTERS
        !          11470: *
        !          11471: {SRPD2{SCH{R7{(R9)+{{STORE PAD CHARACTER, BUMP PTR
        !          11472: {{BCT{R8{SRPD2{{LOOP TILL ALL PAD CHARS STORED
        !          11473: {{CSC{R9{{{COMPLETE CHARACTER STORING
        !          11474: {{BRN{EXITS{{{AND EXIT FOR NEXT WORD
        !          11475: *
        !          11476: *      HERE IF 2ND ARG IS NEGATIVE OR LARGE
        !          11477: *
        !          11478: {SRPD3{ZER{R8{{{ZERO PAD COUNT
        !          11479: {{BRN{SRPD1{{{MERGE
        !          11480: {{EJC{{{{
        !          11481: *
        !          11482: *      RTAB
        !          11483: *
        !          11484: {S$RTB{ENT{{{{ENTRY POINT
        !          11485: {{MOV{#P$RTB{R7{{SET PCODE FOR INTEGER ARG CASE
        !          11486: {{MOV{#P$RTD{R6{{SET PCODE FOR EXPRESSION ARG CASE
        !          11487: {{JSR{PATIN{{{CALL COMMON ROUTINE TO BUILD NODE
        !          11488: {{ERR{181{RTAB{{ARGUMENT IS NOT INTEGER OR EXPRESSION
        !          11489: {{ERR{182{RTAB{{ARGUMENT IS NEGATIVE OR TOO LARGE
        !          11490: {{BRN{EXIXR{{{RETURN PATTERN NODE
        !          11491: {{EJC{{{{
        !          11492: *
        !          11493: *      SET
        !          11494: *
        !          11495: {S$SET{ENT{{{{ENTRY POINT
        !          11496: {{MOV{(SP)+{R$IO2{{SAVE THIRD ARG
        !          11497: {{MOV{(SP)+{R$IO1{{SAVE SECOND ARG
        !          11498: {{JSR{IOFCB{{{CALL FCBLK ROUTINE
        !          11499: {{ERR{291{SET{{FIRST ARGUMENT IS NOT A SUITABLE NAME
        !          11500: {{ERR{292{SET{{FIRST ARGUMENT IS NULL
        !          11501: {{MOV{R$IO1{R7{{LOAD SECOND ARG
        !          11502: {{MOV{R$IO2{R8{{LOAD THIRD ARG
        !          11503: {{JSR{SYSST{{{CALL SYSTEM SET ROUTINE
        !          11504: {{ERR{293{INAPPROPRIATE{{SECOND ARGUMENT TO SET
        !          11505: {{ERR{294{INAPPROPRIATE{{THIRD ARGUMENT TO SET
        !          11506: {{ERR{295{SET{{FILE DOES NOT EXIST
        !          11507: {{ERR{296{SET{{FILE DOES NOT PERMIT SETTING FILE POINTER
        !          11508: {{ERR{297{SET{{CAUSED NON-RECOVERABLE I/O ERROR
        !          11509: {{BRN{EXNUL{{{OTHERWISEW RETURN NULL
        !          11510: {{EJC{{{{
        !          11511: *
        !          11512: *      TAB
        !          11513: *
        !          11514: {S$TAB{ENT{{{{ENTRY POINT
        !          11515: {{MOV{#P$TAB{R7{{SET PCODE FOR INTEGER ARG CASE
        !          11516: {{MOV{#P$TBD{R6{{SET PCODE FOR EXPRESSION ARG CASE
        !          11517: {{JSR{PATIN{{{CALL COMMON ROUTINE TO BUILD NODE
        !          11518: {{ERR{183{TAB{{ARGUMENT IS NOT INTEGER OR EXPRESSION
        !          11519: {{ERR{184{TAB{{ARGUMENT IS NEGATIVE OR TOO LARGE
        !          11520: {{BRN{EXIXR{{{RETURN PATTERN NODE
        !          11521: {{EJC{{{{
        !          11522: *
        !          11523: *      RPOS
        !          11524: *
        !          11525: {S$RPS{ENT{{{{ENTRY POINT
        !          11526: {{MOV{#P$RPS{R7{{SET PCODE FOR INTEGER ARG CASE
        !          11527: {{MOV{#P$RPD{R6{{SET PCODE FOR EXPRESSION ARG CASE
        !          11528: {{JSR{PATIN{{{CALL COMMON ROUTINE TO BUILD NODE
        !          11529: {{ERR{185{RPOS{{ARGUMENT IS NOT INTEGER OR EXPRESSION
        !          11530: {{ERR{186{RPOS{{ARGUMENT IS NEGATIVE OR TOO LARGE
        !          11531: {{BRN{EXIXR{{{RETURN PATTERN NODE
        !          11532: {{EJC{{{{
        !          11533: *
        !          11534: *      RSORT
        !          11535: *
        !          11536: {S$RSR{ENT{{{{ENTRY POINT
        !          11537: {{MNZ{R6{{{MARK AS RSORT
        !          11538: {{JSR{SORTA{{{CALL SORT ROUTINE
        !          11539: {{BRN{EXSID{{{RETURN, SETTING IDVAL
        !          11540: {{EJC{{{{
        !          11541: *
        !          11542: *      SETEXIT
        !          11543: *
        !          11544: {S$STX{ENT{{{{ENTRY POINT
        !          11545: {{MOV{(SP)+{R9{{LOAD ARGUMENT
        !          11546: {{MOV{STXVR{R6{{LOAD OLD VRBLK POINTER
        !          11547: {{ZER{R10{{{LOAD ZERO IN CASE NULL ARG
        !          11548: {{BEQ{R9{#NULLS{SSTX1{JUMP IF NULL ARGUMENT (RESET CALL)
        !          11549: {{JSR{GTNVR{{{ELSE GET SPECIFIED VRBLK
        !          11550: {{PPM{SSTX2{{{JUMP IF NOT NATURAL VARIABLE
        !          11551: {{MOV{4*VRLBL(R9){R10{{ELSE LOAD LABEL
        !          11552: {{BEQ{R10{#STNDL{SSTX2{JUMP IF LABEL IS NOT DEFINED
        !          11553: {{BNE{(R10){#B$TRT{SSTX1{JUMP IF NOT TRAPPED
        !          11554: {{MOV{4*TRLBL(R10){R10{{ELSE LOAD PTR TO REAL LABEL CODE
        !          11555: *
        !          11556: *      HERE TO SET/RESET SETEXIT TRAP
        !          11557: *
        !          11558: {SSTX1{MOV{R9{STXVR{{STORE NEW VRBLK POINTER (OR NULL)
        !          11559: {{MOV{R10{R$SXC{{STORE NEW CODE PTR (OR ZERO)
        !          11560: {{BEQ{R6{#NULLS{EXNUL{RETURN NULL IF NULL RESULT
        !          11561: {{MOV{R6{R9{{ELSE COPY VRBLK POINTER
        !          11562: {{BRN{EXVNM{{{AND RETURN BUILDING NMBLK
        !          11563: *
        !          11564: *      HERE IF BAD ARGUMENT
        !          11565: *
        !          11566: {SSTX2{ERB{187{SETEXIT{{ARGUMENT IS NOT LABEL NAME OR NULL
        !          11567: {{EJC{{{{
        !          11568: *
        !          11569: *      SORT
        !          11570: *
        !          11571: {S$SRT{ENT{{{{ENTRY POINT
        !          11572: {{ZER{R6{{{MARK AS SORT
        !          11573: {{JSR{SORTA{{{CALL SORT ROUTINE
        !          11574: {{BRN{EXSID{{{RETURN, SETTING IDVAL
        !          11575: {{EJC{{{{
        !          11576: *
        !          11577: *      SPAN
        !          11578: *
        !          11579: {S$SPN{ENT{{{{ENTRY POINT
        !          11580: {{MOV{#P$SPS{R7{{SET PCODE FOR SINGLE CHAR ARG
        !          11581: {{MOV{#P$SPN{R10{{SET PCODE FOR MULTI-CHAR ARG
        !          11582: {{MOV{#P$SPD{R8{{SET PCODE FOR EXPRESSION ARG
        !          11583: {{JSR{PATST{{{CALL COMMON ROUTINE TO BUILD NODE
        !          11584: {{ERR{188{SPAN{{ARGUMENT IS NOT STRING OR EXPRESSION
        !          11585: {{BRN{EXIXR{{{JUMP FOR NEXT CODE WORD
        !          11586: {{EJC{{{{
        !          11587: *
        !          11588: *      SIZE
        !          11589: *
        !          11590: {S$SI${ENT{{{{ENTRY POINT
        !          11591: {{MOV{(SP){R9{{LOAD ARGUMENT
        !          11592: {{BNE{(R9){#B$BCT{SSI$1{BRANCH IF NOT BUFFER
        !          11593: {{ICA{SP{{{ELSE POP ARGUMENT
        !          11594: {{MTI{4*BCLEN(R9){{{LOAD DEFINED LENGTH
        !          11595: {{BRN{EXINT{{{EXIT WITH INTEGER
        !          11596: *
        !          11597: *      HERE IF NOT BUFFER
        !          11598: *
        !          11599: {SSI$1{JSR{GTSTG{{{LOAD STRING ARGUMENT
        !          11600: {{ERR{189{SIZE{{ARGUMENT IS NOT STRING
        !          11601: {{MTI{R6{{{LOAD LENGTH AS INTEGER
        !          11602: {{BRN{EXINT{{{EXIT WITH INTEGER RESULT
        !          11603: {{EJC{{{{
        !          11604: *
        !          11605: *      STOPTR
        !          11606: *
        !          11607: {S$STT{ENT{{{{ENTRY POINT
        !          11608: {{ZER{R10{{{INDICATE STOPTR CASE
        !          11609: {{JSR{TRACE{{{CALL TRACE PROCEDURE
        !          11610: {{ERR{190{STOPTR{{FIRST ARGUMENT IS NOT APPROPRIATE NAME
        !          11611: {{ERR{191{STOPTR{{SECOND ARGUMENT IS NOT TRACE TYPE
        !          11612: {{BRN{EXNUL{{{RETURN NULL
        !          11613: {{EJC{{{{
        !          11614: *
        !          11615: *      SUBSTR
        !          11616: *
        !          11617: {S$SUB{ENT{{{{ENTRY POINT
        !          11618: {{JSR{GTSMI{{{LOAD THIRD ARGUMENT
        !          11619: {{ERR{192{SUBSTR{{THIRD ARGUMENT IS NOT INTEGER
        !          11620: {{PPM{EXFAL{{{JUMP IF NEGATIVE OR TOO LARGE
        !          11621: {{MOV{R9{SBSSV{{SAVE THIRD ARGUMENT
        !          11622: {{JSR{GTSMI{{{LOAD SECOND ARGUMENT
        !          11623: {{ERR{193{SUBSTR{{SECOND ARGUMENT IS NOT INTEGER
        !          11624: {{PPM{EXFAL{{{JUMP IF OUT OF RANGE
        !          11625: {{MOV{R9{R7{{SAVE SECOND ARGUMENT
        !          11626: {{BZE{R7{EXFAL{{JUMP IF SECOND ARGUMENT ZERO
        !          11627: {{DCV{R7{{{ELSE DECREMENT FOR ONES ORIGIN
        !          11628: {{MOV{(SP){R10{{GET FIRST ARG PTR
        !          11629: {{BNE{(R10){#B$BCT{SSUBA{BRANCH IF NOT BUFFER
        !          11630: {{MOV{4*BCBUF(R10){R9{{GET BFBLK PTR
        !          11631: {{MOV{4*BCLEN(R10){R6{{GET LENGTH
        !          11632: {{BRN{SSUBB{{{MERGE
        !          11633: *
        !          11634: *      HERE IF NOT BUFFER TO GET STRING
        !          11635: *
        !          11636: {SSUBA{JSR{GTSTG{{{LOAD FIRST ARGUMENT
        !          11637: {{ERR{194{SUBSTR{{FIRST ARGUMENT IS NOT STRING
        !          11638: *
        !          11639: *      MERGE WITH BFBLK OR SCBLK PTR IN XR.  WA HAS LENGTH
        !          11640: *
        !          11641: {SSUBB{MOV{SBSSV{R8{{RELOAD THIRD ARGUMENT
        !          11642: {{BNZ{R8{SSUB1{{SKIP IF THIRD ARG GIVEN
        !          11643: {{MOV{R6{R8{{ELSE GET STRING LENGTH
        !          11644: {{BGT{R7{R8{EXFAL{FAIL IF IMPROPER
        !          11645: {{SUB{R7{R8{{REDUCE BY OFFSET TO START
        !          11646: *
        !          11647: *      MERGE
        !          11648: *
        !          11649: {SSUB1{MOV{R6{R10{{SAVE STRING LENGTH
        !          11650: {{MOV{R8{R6{{SET LENGTH OF SUBSTRING
        !          11651: {{ADD{R7{R8{{ADD 2ND ARG TO 3RD ARG
        !          11652: {{BGT{R8{R10{EXFAL{JUMP IF IMPROPER SUBSTRING
        !          11653: {{MOV{R9{R10{{COPY POINTER TO FIRST ARG
        !          11654: {{JSR{SBSTR{{{BUILD SUBSTRING
        !          11655: {{BRN{EXIXR{{{AND JUMP FOR NEXT CODE WORD
        !          11656: {{EJC{{{{
        !          11657: *
        !          11658: *      TABLE
        !          11659: *
        !          11660: {S$TBL{ENT{{{{ENTRY POINT
        !          11661: {{MOV{(SP)+{R10{{GET INITIAL LOOKUP VALUE
        !          11662: {{ICA{SP{{{POP SECOND ARGUMENT
        !          11663: {{JSR{GTSMI{{{LOAD ARGUMENT
        !          11664: {{ERR{195{TABLE{{ARGUMENT IS NOT INTEGER
        !          11665: {{ERR{196{TABLE{{ARGUMENT IS OUT OF RANGE
        !          11666: {{BNZ{R8{STBL1{{JUMP IF NON-ZERO
        !          11667: {{MOV{#TBNBK{R8{{ELSE SUPPLY DEFAULT VALUE
        !          11668: *
        !          11669: *      MERGE HERE WITH NUMBER OF HEADERS IN WA
        !          11670: *
        !          11671: {STBL1{MOV{R8{R6{{COPY NUMBER OF HEADERS
        !          11672: {{ADD{#TBSI${R6{{ADJUST FOR STANDARD FIELDS
        !          11673: {{WTB{R6{{{CONVERT LENGTH TO BYTES
        !          11674: {{JSR{ALLOC{{{ALLOCATE SPACE FOR TBBLK
        !          11675: {{MOV{R9{R7{{COPY POINTER TO TBBLK
        !          11676: {{MOV{#B$TBT{(R9)+{{STORE TYPE WORD
        !          11677: {{ZER{(R9)+{{{ZERO ID FOR THE MOMENT
        !          11678: {{MOV{R6{(R9)+{{STORE LENGTH (TBLEN)
        !          11679: {{MOV{R10{(R9)+{{STORE INITIAL LOOKUP VALUE
        !          11680: {{LCT{R8{R8{{SET LOOP COUNTER (NUM HEADERS)
        !          11681: *
        !          11682: *      LOOP TO INITIALIZE ALL BUCKET POINTERS
        !          11683: *
        !          11684: {STBL2{MOV{R7{(R9)+{{STORE TBBLK PTR IN BUCKET HEADER
        !          11685: {{BCT{R8{STBL2{{LOOP TILL ALL STORED
        !          11686: {{MOV{R7{R9{{RECALL POINTER TO TBBLK
        !          11687: {{BRN{EXSID{{{EXIT SETTING IDVAL
        !          11688: {{EJC{{{{
        !          11689: *
        !          11690: *      TIME
        !          11691: *
        !          11692: {S$TIM{ENT{{{{ENTRY POINT
        !          11693: {{JSR{SYSTM{{{GET TIMER VALUE
        !          11694: {{SBI{TIMSX{{{SUBTRACT STARTING TIME
        !          11695: {{BRN{EXINT{{{EXIT WITH INTEGER VALUE
        !          11696: {{EJC{{{{
        !          11697: *
        !          11698: *      TRACE
        !          11699: *
        !          11700: {S$TRA{ENT{{{{ENTRY POINT
        !          11701: {{BEQ{4*3(SP){#NULLS{STR03{JUMP IF FIRST ARGUMENT IS NULL
        !          11702: {{MOV{(SP)+{R9{{LOAD FOURTH ARGUMENT
        !          11703: {{ZER{R10{{{TENTATIVELY SET ZERO POINTER
        !          11704: {{BEQ{R9{#NULLS{STR02{JUMP IF 4TH ARGUMENT IS NULL
        !          11705: {{JSR{GTNVR{{{ELSE POINT TO VRBLK
        !          11706: {{PPM{STR01{{{JUMP IF NOT VARIABLE NAME
        !          11707: {{MOV{4*VRFNC(R9){R10{{ELSE LOAD FUNCTION POINTER
        !          11708: {{BNE{R10{#STNDF{STR02{JUMP IF FUNCTION IS DEFINED
        !          11709: *
        !          11710: *      HERE FOR BAD FOURTH ARGUMENT
        !          11711: *
        !          11712: {STR01{ERB{197{TRACE{{FOURTH ARG IS NOT FUNCTION NAME OR NULL
        !          11713: *
        !          11714: *      HERE WITH FUNCTION POINTER IN XL
        !          11715: *
        !          11716: {STR02{MOV{(SP)+{R9{{LOAD THIRD ARGUMENT (TAG)
        !          11717: {{ZER{R7{{{SET ZERO AS TRTYP VALUE FOR NOW
        !          11718: {{JSR{TRBLD{{{BUILD TRBLK FOR TRACE CALL
        !          11719: {{MOV{R9{R10{{MOVE TRBLK POINTER FOR TRACE
        !          11720: {{JSR{TRACE{{{CALL TRACE PROCEDURE
        !          11721: {{ERR{198{TRACE{{FIRST ARGUMENT IS NOT APPROPRIATE NAME
        !          11722: {{ERR{199{TRACE{{SECOND ARGUMENT IS NOT TRACE TYPE
        !          11723: {{BRN{EXNUL{{{RETURN NULL
        !          11724: *
        !          11725: *      HERE TO CALL SYSTEM TRACE TOGGLE ROUTINE
        !          11726: *
        !          11727: {STR03{JSR{SYSTT{{{CALL IT
        !          11728: {{ADD{#4*NUM04{SP{{POP TRACE ARGUMENTS
        !          11729: {{BRN{EXNUL{{{RETURN
        !          11730: {{EJC{{{{
        !          11731: *
        !          11732: *      TRIM
        !          11733: *
        !          11734: {S$TRM{ENT{{{{ENTRY POINT
        !          11735: {{JSR{GTSTG{{{LOAD ARGUMENT AS STRING
        !          11736: {{ERR{200{TRIM{{ARGUMENT IS NOT STRING
        !          11737: {{BZE{R6{EXNUL{{RETURN NULL IF ARGUMENT IS NULL
        !          11738: {{MOV{R9{R10{{COPY STRING POINTER
        !          11739: {{CTB{R6{SCHAR{{GET BLOCK LENGTH
        !          11740: {{JSR{ALLOC{{{ALLOCATE COPY SAME SIZE
        !          11741: {{MOV{R9{R7{{SAVE POINTER TO COPY
        !          11742: {{MVW{{{{COPY OLD STRING BLOCK TO NEW
        !          11743: {{MOV{R7{R9{{RESTORE PTR TO NEW BLOCK
        !          11744: {{JSR{TRIMR{{{TRIM BLANKS (WB IS NON-ZERO)
        !          11745: {{BRN{EXIXR{{{EXIT WITH RESULT IN XR
        !          11746: {{EJC{{{{
        !          11747: *
        !          11748: *      UNLOAD
        !          11749: *
        !          11750: {S$UNL{ENT{{{{ENTRY POINT
        !          11751: {{MOV{(SP)+{R9{{LOAD ARGUMENT
        !          11752: {{JSR{GTNVR{{{POINT TO VRBLK
        !          11753: {{ERR{201{UNLOAD{{ARGUMENT IS NOT NATURAL VARIABLE NAME
        !          11754: {{MOV{#STNDF{R10{{GET PTR TO UNDEFINED FUNCTION
        !          11755: {{JSR{DFFNC{{{UNDEFINE NAMED FUNCTION
        !          11756: {{BRN{EXNUL{{{RETURN NULL AS RESULT
        !          11757: {{TTL{S{{{P I T B O L -- UTILITY PROCEDURES
        !          11758: *
        !          11759: *      THE FOLLOWING SECTION CONTAINS PROCEDURES WHICH ARE
        !          11760: *      USED FOR VARIOUS PURPOSES THROUGHOUT THE SYSTEM.
        !          11761: *
        !          11762: *      EACH PROCEDURE IS PRECEDED BY A DESCRIPTION OF THE
        !          11763: *      CALLING SEQUENCE. USUALLY THE ARGUMENTS ARE IN REGISTERS
        !          11764: *      BUT ARGUMENTS CAN ALSO OCCUR ON THE STACK AND AS
        !          11765: *      PARAMETERS ASSEMBLED AFTER THE JSR INSTRUCTION.
        !          11766: *
        !          11767: *      THE FOLLOWING CONSIDERATIONS APPLY TO THESE DESCRIPTIONS.
        !          11768: *
        !          11769: *      1)   THE STACK POINTER (XS) IS NOT CHANGED UNLESS THE
        !          11770: *           CHANGE IS EXPLICITLY DOCUMENTED IN THE CALL.
        !          11771: *
        !          11772: *      2)   REGISTERS WHOSE ENTRY VALUES ARE NOT MENTIONED
        !          11773: *           MAY CONTAIN ANY VALUE EXCEPT THAT XL,XR MAY ONLY
        !          11774: *           CONTAIN PROPER (COLLECTABLE) POINTER VALUES.
        !          11775: *           THIS CONDITION ON XR MEANS THAT THE CALLED ROUTINE
        !          11776: *           MAY IF IT CHOOSES PRESERVE XR BY STACKING.
        !          11777: *
        !          11778: *      3)   REGISTERS NOT MENTIONED ON EXIT CONTAIN THE SAME
        !          11779: *           VALUES AS THEY DID ON ENTRY EXCEPT THAT VALUES IN
        !          11780: *           XR,XL MAY HAVE BEEN RELOCATED BY THE COLLECTOR.
        !          11781: *
        !          11782: *      4)   REGISTERS WHICH ARE DESTROYED ON EXIT MAY CONTAIN
        !          11783: *           ANY VALUE EXCEPT THAT VALUES IN XL,XR ARE PROPER
        !          11784: *           (COLLECTABLE) POINTERS.
        !          11785: *
        !          11786: *      5)   THE CODE POINTER REGISTER POINTS TO THE CURRENT
        !          11787: *           CODE LOCATION ON ENTRY AND IS UNCHANGED ON EXIT.
        !          11788: *
        !          11789: *      IN THE ABOVE DESCRIPTION, A COLLECTABLE POINTER IS ONE
        !          11790: *      WHICH EITHER POINTS OUTSIDE THE DYNAMIC REGION OR
        !          11791: *      POINTS TO THE START OF A BLOCK IN THE DYNAMIC REGION.
        !          11792: *
        !          11793: *      IN THOSE CASES WHERE THE CALLING SEQUENCE CONTAINS
        !          11794: *      PARAMETERS WHICH ARE USED AS ALTERNATE RETURN POINTS,
        !          11795: *      THESE PARAMETERS MAY BE REPLACED BY ERROR CODES
        !          11796: *      ASSEMBLED WITH THE ERR INSTRUCTION. THIS WILL RESULT
        !          11797: *      IN THE POSTING OF THE ERROR IF THE RETURN IS TAKEN.
        !          11798: *
        !          11799: *      THE PROCEDURES ALL HAVE NAMES CONSISTING OF FIVE LETTERS
        !          11800: *      AND ARE IN ALPHABETICAL ORDER BY THEIR NAMES.
        !          11801: {{EJC{{{{
        !          11802: *
        !          11803: *      ACESS - ACCESS VARIABLE VALUE WITH TRACE/INPUT CHECKS
        !          11804: *
        !          11805: *      ACESS LOADS THE VALUE OF A VARIABLE. TRACE AND INPUT
        !          11806: *      ASSOCIATIONS ARE TESTED FOR AND EXECUTED AS REQUIRED.
        !          11807: *      ACESS ALSO HANDLES THE SPECIAL CASES OF PSEUDO-VARIABLES.
        !          11808: *
        !          11809: *      (XL)                  VARIABLE NAME BASE
        !          11810: *      (WA)                  VARIABLE NAME OFFSET
        !          11811: *      JSR  ACESS            CALL TO ACCESS VALUE
        !          11812: *      PPM  LOC              TRANSFER LOC IF ACCESS FAILURE
        !          11813: *      (XR)                  VARIABLE VALUE
        !          11814: *      (WA,WB,WC)            DESTROYED
        !          11815: *      (XL,RA)               DESTROYED
        !          11816: *
        !          11817: *      FAILURE CAN OCCUR IF AN INPUT ASSOCIATION CAUSES AN END
        !          11818: *      OF FILE CONDITION OR IF THE EVALUATION OF AN EXPRESSION
        !          11819: *      ASSOCIATED WITH AN EXPRESSION VARIABLE FAILS.
        !          11820: *
        !          11821: {ACESS{PRC{R{1{{ENTRY POINT (RECURSIVE)
        !          11822: {{MOV{R10{R9{{COPY NAME BASE
        !          11823: {{ADD{R6{R9{{POINT TO VARIABLE LOCATION
        !          11824: {{MOV{(R9){R9{{LOAD VARIABLE VALUE
        !          11825: *
        !          11826: *      LOOP HERE TO CHECK FOR SUCCESSIVE TRBLKS
        !          11827: *
        !          11828: {ACS02{BNE{(R9){#B$TRT{ACS18{JUMP IF NOT TRAPPED
        !          11829: *
        !          11830: *      HERE IF TRAPPED
        !          11831: *
        !          11832: {{BEQ{R9{#TRBKV{ACS12{JUMP IF KEYWORD VARIABLE
        !          11833: {{BNE{R9{#TRBEV{ACS05{JUMP IF NOT EXPRESSION VARIABLE
        !          11834: *
        !          11835: *      HERE FOR EXPRESSION VARIABLE, EVALUATE VARIABLE
        !          11836: *
        !          11837: {{MOV{4*EVEXP(R10){R9{{LOAD EXPRESSION POINTER
        !          11838: {{ZER{R7{{{EVALUATE BY VALUE
        !          11839: {{JSR{EVALX{{{EVALUATE EXPRESSION
        !          11840: {{PPM{ACS04{{{JUMP IF EVALUATION FAILURE
        !          11841: {{BRN{ACS02{{{CHECK VALUE FOR MORE TRBLKS
        !          11842: {{EJC{{{{
        !          11843: *
        !          11844: *      ACESS (CONTINUED)
        !          11845: *
        !          11846: *      HERE ON READING END OF FILE
        !          11847: *
        !          11848: {ACS03{ADD{#4*NUM03{SP{{POP TRBLK PTR, NAME BASE AND OFFSET
        !          11849: {{MOV{R9{DNAMP{{POP UNUSED SCBLK
        !          11850: *
        !          11851: *      MERGE HERE WHEN EVALUATION OF EXPRESSION FAILS
        !          11852: *
        !          11853: {ACS04{EXI{1{{{TAKE ALTERNATE (FAILURE) RETURN
        !          11854: *
        !          11855: *      HERE IF NOT KEYWORD OR EXPRESSION VARIABLE
        !          11856: *
        !          11857: {ACS05{MOV{4*TRTYP(R9){R7{{LOAD TRAP TYPE CODE
        !          11858: {{BNZ{R7{ACS10{{JUMP IF NOT INPUT ASSOCIATION
        !          11859: {{BZE{KVINP{ACS09{{IGNORE INPUT ASSOC IF INPUT IS OFF
        !          11860: *
        !          11861: *      HERE FOR INPUT ASSOCIATION
        !          11862: *
        !          11863: {{MOV{R10{-(SP){{STACK NAME BASE
        !          11864: {{MOV{R6{-(SP){{STACK NAME OFFSET
        !          11865: {{MOV{R9{-(SP){{STACK TRBLK POINTER
        !          11866: {{MOV{4*TRFPT(R9){R10{{GET FILE CTRL BLK PTR OR ZERO
        !          11867: {{BNZ{R10{ACS06{{JUMP IF NOT STANDARD INPUT FILE
        !          11868: {{BEQ{4*TRTER(R9){#V$TER{ACS21{JUMP IF TERMINAL
        !          11869: *
        !          11870: *      HERE TO READ FROM STANDARD INPUT FILE
        !          11871: *
        !          11872: {{MOV{CSWIN{R6{{LENGTH FOR READ BUFFER
        !          11873: {{JSR{ALOCS{{{BUILD STRING OF APPROPRIATE LENGTH
        !          11874: {{JSR{SYSRD{{{READ NEXT STANDARD INPUT IMAGE
        !          11875: {{PPM{ACS03{{{JUMP TO FAIL EXIT IF END OF FILE
        !          11876: {{BRN{ACS07{{{ELSE MERGE WITH OTHER FILE CASE
        !          11877: *
        !          11878: *      HERE FOR INPUT FROM OTHER THAN STANDARD INPUT FILE
        !          11879: *
        !          11880: {ACS06{MOV{R10{R6{{FCBLK PTR
        !          11881: {{JSR{SYSIL{{{GET INPUT RECORD MAX LENGTH (TO WA)
        !          11882: {{JSR{ALOCS{{{ALLOCATE STRING OF CORRECT SIZE
        !          11883: {{MOV{R10{R6{{FCBLK PTR
        !          11884: {{JSR{SYSIN{{{CALL SYSTEM INPUT ROUTINE
        !          11885: {{PPM{ACS03{{{JUMP TO FAIL EXIT IF END OF FILE
        !          11886: {{PPM{ACS22{{{ERROR
        !          11887: {{PPM{ACS23{{{ERROR
        !          11888: {{EJC{{{{
        !          11889: *
        !          11890: *      ACESS (CONTINUED)
        !          11891: *
        !          11892: *      MERGE HERE AFTER OBTAINING INPUT RECORD
        !          11893: *
        !          11894: {ACS07{MOV{KVTRM{R7{{LOAD TRIM INDICATOR
        !          11895: {{JSR{TRIMR{{{TRIM RECORD AS REQUIRED
        !          11896: {{MOV{R9{R7{{COPY RESULT POINTER
        !          11897: {{MOV{(SP){R9{{RELOAD POINTER TO TRBLK
        !          11898: *
        !          11899: *      LOOP TO CHASE TO END OF TRBLK CHAIN AND STORE VALUE
        !          11900: *
        !          11901: {ACS08{MOV{R9{R10{{SAVE POINTER TO THIS TRBLK
        !          11902: {{MOV{4*TRNXT(R9){R9{{LOAD FORWARD POINTER
        !          11903: {{BEQ{(R9){#B$TRT{ACS08{LOOP IF THIS IS ANOTHER TRBLK
        !          11904: {{MOV{R7{4*TRNXT(R10){{ELSE STORE RESULT AT END OF CHAIN
        !          11905: {{MOV{(SP)+{R9{{RESTORE INITIAL TRBLK POINTER
        !          11906: {{MOV{(SP)+{R6{{RESTORE NAME OFFSET
        !          11907: {{MOV{(SP)+{R10{{RESTORE NAME BASE POINTER
        !          11908: *
        !          11909: *      COME HERE TO MOVE TO NEXT TRBLK
        !          11910: *
        !          11911: {ACS09{MOV{4*TRNXT(R9){R9{{LOAD FORWARD PTR TO NEXT VALUE
        !          11912: {{BRN{ACS02{{{BACK TO CHECK IF TRAPPED
        !          11913: *
        !          11914: *      HERE TO CHECK FOR ACCESS TRACE TRBLK
        !          11915: *
        !          11916: {ACS10{BNE{R7{#TRTAC{ACS09{LOOP BACK IF NOT ACCESS TRACE
        !          11917: {{BZE{KVTRA{ACS09{{IGNORE ACCESS TRACE IF TRACE OFF
        !          11918: {{DCV{KVTRA{{{ELSE DECREMENT TRACE COUNT
        !          11919: {{BZE{4*TRFNC(R9){ACS11{{JUMP IF PRINT TRACE
        !          11920: {{EJC{{{{
        !          11921: *
        !          11922: *      ACESS (CONTINUED)
        !          11923: *
        !          11924: *      HERE FOR FULL FUNCTION TRACE
        !          11925: *
        !          11926: {{JSR{TRXEQ{{{CALL ROUTINE TO EXECUTE TRACE
        !          11927: {{BRN{ACS09{{{JUMP FOR NEXT TRBLK
        !          11928: *
        !          11929: *      HERE FOR CASE OF PRINT TRACE
        !          11930: *
        !          11931: {ACS11{JSR{PRTSN{{{PRINT STATEMENT NUMBER
        !          11932: {{JSR{PRTNV{{{PRINT NAME = VALUE
        !          11933: {{BRN{ACS09{{{JUMP BACK FOR NEXT TRBLK
        !          11934: *
        !          11935: *      HERE FOR KEYWORD VARIABLE
        !          11936: *
        !          11937: {ACS12{MOV{4*KVNUM(R10){R9{{LOAD KEYWORD NUMBER
        !          11938: {{BGE{R9{#K$V$${ACS14{JUMP IF NOT ONE WORD VALUE
        !          11939: {{MTI{L^KVABE(R9){{{ELSE LOAD VALUE AS INTEGER
        !          11940: *
        !          11941: *      COMMON EXIT WITH KEYWORD VALUE AS INTEGER IN (IA)
        !          11942: *
        !          11943: {ACS13{JSR{ICBLD{{{BUILD ICBLK
        !          11944: {{BRN{ACS18{{{JUMP TO EXIT
        !          11945: *
        !          11946: *      HERE IF NOT ONE WORD KEYWORD VALUE
        !          11947: *
        !          11948: {ACS14{BGE{R9{#K$S$${ACS15{JUMP IF SPECIAL CASE
        !          11949: {{SUB{#K$V$${R9{{ELSE GET OFFSET
        !          11950: {{ADD{#NDABO{R9{{POINT TO PATTERN VALUE
        !          11951: {{BRN{ACS18{{{JUMP TO EXIT
        !          11952: *
        !          11953: *      HERE IF SPECIAL KEYWORD CASE
        !          11954: *
        !          11955: {ACS15{MOV{KVRTN{R10{{LOAD RTNTYPE IN CASE
        !          11956: {{LDI{KVSTL{{{LOAD STLIMIT IN CASE
        !          11957: {{SUB{#K$S$${R9{{GET CASE NUMBER
        !          11958: {{BSW{R9{5{{SWITCH ON KEYWORD NUMBER
        !          11959: {{IFF{K$$AL{ACS16{{JUMP IF ALPHABET
        !          11960: {{IFF{K$$RT{ACS17{{RTNTYPE
        !          11961: {{IFF{K$$SC{ACS19{{STCOUNT
        !          11962: {{IFF{K$$ET{ACS20{{ERRTEXT
        !          11963: {{IFF{K$$SL{ACS13{{STLIMIT
        !          11964: {{ESW{{{{END SWITCH ON KEYWORD NUMBER
        !          11965: {{EJC{{{{
        !          11966: *
        !          11967: *      ACESS (CONTINUED)
        !          11968: *
        !          11969: *      ALPHABET
        !          11970: *
        !          11971: {ACS16{MOV{KVALP{R10{{LOAD POINTER TO ALPHABET STRING
        !          11972: *
        !          11973: *      RTNTYPE MERGES HERE
        !          11974: *
        !          11975: {ACS17{MOV{R10{R9{{COPY STRING PTR TO PROPER REG
        !          11976: *
        !          11977: *      COMMON RETURN POINT
        !          11978: *
        !          11979: {ACS18{EXI{{{{RETURN TO ACESS CALLER
        !          11980: *
        !          11981: *      HERE FOR STCOUNT (IA HAS STLIMIT)
        !          11982: *
        !          11983: {ACS19{SBI{KVSTC{{{STCOUNT = LIMIT - LEFT
        !          11984: {{BRN{ACS13{{{MERGE BACK WITH INTEGER RESULT
        !          11985: *
        !          11986: *      ERRTEXT
        !          11987: *
        !          11988: {ACS20{MOV{R$ETX{R9{{GET ERRTEXT STRING
        !          11989: {{BRN{ACS18{{{MERGE WITH RESULT
        !          11990: *
        !          11991: *      HERE TO READ A RECORD FROM TERMINAL
        !          11992: *
        !          11993: {ACS21{MOV{#RILEN{R6{{BUFFER LENGTH
        !          11994: {{JSR{ALOCS{{{ALLOCATE BUFFER
        !          11995: {{JSR{SYSRI{{{READ RECORD
        !          11996: {{PPM{ACS03{{{ENDFILE
        !          11997: {{BRN{ACS07{{{MERGE WITH RECORD READ
        !          11998: *
        !          11999: *      ERROR RETURNS
        !          12000: *
        !          12001: {ACS22{MOV{R9{DNAMP{{POP UNUSED SCBLK
        !          12002: {{ERB{202{INPUT{{FROM FILE CAUSED NON-RECOVERABLE ERROR
        !          12003: *
        !          12004: {ACS23{MOV{R9{DNAMP{{POP UNUSED SCBLK
        !          12005: {{ERB{203{INPUT{{FILE RECORD HAS INCORRECT FORMAT
        !          12006: {{ENP{{{{END PROCEDURE ACESS
        !          12007: {{EJC{{{{
        !          12008: *
        !          12009: *      ACOMP -- COMPARE TWO ARITHMETIC VALUES
        !          12010: *
        !          12011: *      1(XS)                 FIRST ARGUMENT
        !          12012: *      0(XS)                 SECOND ARGUMENT
        !          12013: *      JSR  ACOMP            CALL TO COMPARE VALUES
        !          12014: *      PPM  LOC              TRANSFER LOC IF ARG1 IS NON-NUMERIC
        !          12015: *      PPM  LOC              TRANSFER LOC IF ARG2 IS NON-NUMERIC
        !          12016: *      PPM  LOC              TRANSFER LOC FOR ARG1 LT ARG2
        !          12017: *      PPM  LOC              TRANSFER LOC FOR ARG1 EQ ARG2
        !          12018: *      PPM  LOC              TRANSFER LOC FOR ARG1 GT ARG2
        !          12019: *      (NORMAL RETURN IS NEVER GIVEN)
        !          12020: *      (WA,WB,WC,IA,RA)      DESTROYED
        !          12021: *      (XL,XR)               DESTROYED
        !          12022: *
        !          12023: {ACOMP{PRC{N{5{{ENTRY POINT
        !          12024: {{JSR{ARITH{{{LOAD ARITHMETIC OPERANDS
        !          12025: {{PPM{ACMP7{{{JUMP IF FIRST ARG NON-NUMERIC
        !          12026: {{PPM{ACMP8{{{JUMP IF SECOND ARG NON-NUMERIC
        !          12027: {{PPM{ACMP4{{{JUMP IF REAL ARGUMENTS
        !          12028: *
        !          12029: *      HERE FOR INTEGER ARGUMENTS
        !          12030: *
        !          12031: {{SBI{4*ICVAL(R10){{{SUBTRACT TO COMPARE
        !          12032: {{IOV{ACMP3{{{JUMP IF OVERFLOW
        !          12033: {{ILT{ACMP5{{{ELSE JUMP IF ARG1 LT ARG2
        !          12034: {{IEQ{ACMP2{{{JUMP IF ARG1 EQ ARG2
        !          12035: *
        !          12036: *      HERE IF ARG1 GT ARG2
        !          12037: *
        !          12038: {ACMP1{EXI{5{{{TAKE GT EXIT
        !          12039: *
        !          12040: *      HERE IF ARG1 EQ ARG2
        !          12041: *
        !          12042: {ACMP2{EXI{4{{{TAKE EQ EXIT
        !          12043: {{EJC{{{{
        !          12044: *
        !          12045: *      ACOMP (CONTINUED)
        !          12046: *
        !          12047: *      HERE FOR INTEGER OVERFLOW ON SUBTRACT
        !          12048: *
        !          12049: {ACMP3{LDI{4*ICVAL(R10){{{LOAD SECOND ARGUMENT
        !          12050: {{ILT{ACMP1{{{GT IF NEGATIVE
        !          12051: {{BRN{ACMP5{{{ELSE LT
        !          12052: *
        !          12053: *      HERE FOR REAL OPERANDS
        !          12054: *
        !          12055: {ACMP4{SBR{4*RCVAL(R10){{{SUBTRACT TO COMPARE
        !          12056: {{ROV{ACMP6{{{JUMP IF OVERFLOW
        !          12057: {{RGT{ACMP1{{{ELSE JUMP IF ARG1 GT
        !          12058: {{REQ{ACMP2{{{JUMP IF ARG1 EQ ARG2
        !          12059: *
        !          12060: *      HERE IF ARG1 LT ARG2
        !          12061: *
        !          12062: {ACMP5{EXI{3{{{TAKE LT EXIT
        !          12063: *
        !          12064: *      HERE IF OVERFLOW ON REAL SUBTRACTION
        !          12065: *
        !          12066: {ACMP6{LDR{4*RCVAL(R10){{{RELOAD ARG2
        !          12067: {{RLT{ACMP1{{{GT IF NEGATIVE
        !          12068: {{BRN{ACMP5{{{ELSE LT
        !          12069: *
        !          12070: *      HERE IF ARG1 NON-NUMERIC
        !          12071: *
        !          12072: {ACMP7{EXI{1{{{TAKE ERROR EXIT
        !          12073: *
        !          12074: *      HERE IF ARG2 NON-NUMERIC
        !          12075: *
        !          12076: {ACMP8{EXI{2{{{TAKE ERROR EXIT
        !          12077: {{ENP{{{{END PROCEDURE ACOMP
        !          12078: {{EJC{{{{
        !          12079: *
        !          12080: *      ALLOC                 ALLOCATE BLOCK OF DYNAMIC STORAGE
        !          12081: *
        !          12082: *      (WA)                  LENGTH REQUIRED IN BYTES
        !          12083: *      JSR  ALLOC            CALL TO ALLOCATE BLOCK
        !          12084: *      (XR)                  POINTER TO ALLOCATED BLOCK
        !          12085: *
        !          12086: *      A POSSIBLE ALTERNATIVE TO AOV .. AND FOLLOWING STMT IS -
        !          12087: *      MOV  DNAME,XR .  SUB  WA,XR .  BLO XR,DNAMP,ALOC2 .
        !          12088: *      MOV  DNAMP,XR .  ADD  WA,XR
        !          12089: *
        !          12090: {ALLOC{PRC{E{0{{ENTRY POINT
        !          12091: *
        !          12092: *      COMMON EXIT POINT
        !          12093: *
        !          12094: {ALOC1{MOV{DNAMP{R9{{POINT TO NEXT AVAILABLE LOC
        !          12095: {{AOV{R6{R9{ALOC2{POINT PAST ALLOCATED BLOCK
        !          12096: {{BGT{R9{DNAME{ALOC2{JUMP IF NOT ENOUGH ROOM
        !          12097: {{MOV{R9{DNAMP{{STORE NEW POINTER
        !          12098: {{SUB{R6{R9{{POINT BACK TO START OF ALLOCATED BK
        !          12099: {{EXI{{{{RETURN TO CALLER
        !          12100: *
        !          12101: *      HERE IF INSUFFICIENT ROOM, TRY A GARBAGE COLLECTION
        !          12102: *
        !          12103: {ALOC2{MOV{R7{ALLSV{{SAVE WB
        !          12104: {{ZER{R7{{{SET NO UPWARD MOVE FOR GBCOL
        !          12105: {{JSR{GBCOL{{{GARBAGE COLLECT
        !          12106: *
        !          12107: *      SEE IF ROOM AFTER GBCOL OR SYSMM CALL
        !          12108: *
        !          12109: {ALOC3{MOV{DNAMP{R9{{POINT TO FIRST AVAILABLE LOC
        !          12110: {{AOV{R6{R9{ALC3A{POINT PAST NEW BLOCK
        !          12111: {{BLO{R9{DNAME{ALOC4{JUMP IF THERE IS ROOM NOW
        !          12112: *
        !          12113: *      FAILED AGAIN, SEE IF WE CAN GET MORE CORE
        !          12114: *
        !          12115: {ALC3A{JSR{SYSMM{{{TRY TO GET MORE MEMORY
        !          12116: {{WTB{R9{{{CONVERT TO BAUS (SGD05)
        !          12117: {{ADD{R9{DNAME{{BUMP PTR BY AMOUNT OBTAINED
        !          12118: {{BNZ{R9{ALOC3{{JUMP IF GOT MORE CORE
        !          12119: {{ADD{RSMEM{DNAME{{GET THE RESERVE MEMORY
        !          12120: {{ZER{RSMEM{{{ONLY PERMISSIBLE ONCE
        !          12121: {{ICV{ERRFT{{{FATAL ERROR
        !          12122: {{ERB{204{MEMORY{{OVERFLOW
        !          12123: {{EJC{{{{
        !          12124: *
        !          12125: *      HERE AFTER SUCCESSFUL GARBAGE COLLECTION
        !          12126: *
        !          12127: {ALOC4{STI{ALLIA{{{SAVE IA
        !          12128: {{MOV{DNAME{R7{{GET DYNAMIC END ADRS
        !          12129: {{SUB{DNAMP{R7{{COMPUTE FREE STORE
        !          12130: {{BTW{R7{{{CONVERT BYTES TO WORDS
        !          12131: {{MTI{R7{{{PUT FREE STORE IN IA
        !          12132: {{MLI{ALFSF{{{MULTIPLY BY FREE STORE FACTOR
        !          12133: {{IOV{ALOC5{{{JUMP IF OVERFLOWED
        !          12134: {{MOV{DNAME{R7{{DYNAMIC END ADRS
        !          12135: {{SUB{DNAMB{R7{{COMPUTE TOTAL AMOUNT OF DYNAMIC
        !          12136: {{BTW{R7{{{CONVERT TO WORDS
        !          12137: {{MOV{R7{ALDYN{{STORE IT
        !          12138: {{SBI{ALDYN{{{SUBTRACT FROM SCALED UP FREE STORE
        !          12139: {{IGT{ALOC5{{{JUMP IF SUFFICIENT FREE STORE
        !          12140: {{JSR{SYSMM{{{TRY TO GET MORE STORE
        !          12141: {{WTB{R9{{{CONVERT TO BAUS (SGD05)
        !          12142: {{ADD{R9{DNAME{{ADJUST DYNAMIC END ADRS
        !          12143: *
        !          12144: *      MERGE TO RESTORE IA AND WB
        !          12145: *
        !          12146: {ALOC5{LDI{ALLIA{{{RECOVER IA
        !          12147: {{MOV{ALLSV{R7{{RESTORE WB
        !          12148: {{BRN{ALOC1{{{JUMP BACK TO EXIT
        !          12149: {{ENP{{{{END PROCEDURE ALLOC
        !          12150: {{EJC{{{{
        !          12151: *
        !          12152: *      ALOBF -- ALLOCATE BUFFER
        !          12153: *
        !          12154: *      THIS ROUTINES ALLOCATES A NEW BUFFER.  AS THE BFBLK
        !          12155: *      AND BCBLK COME IN PAIRS, BOTH ARE ALLOCATED HERE,
        !          12156: *      AND XR POINTS TO THE BCBLK ON RETURN.  THE BFBLK
        !          12157: *      AND BCBLK ARE SET TO THE NULL BUFFER, AND THE IDVAL
        !          12158: *      IS ZERO ON RETURN.
        !          12159: *
        !          12160: *      (WA)                  BUFFER SIZE IN CHARACTERS
        !          12161: *      JSR  ALOBF            CALL TO CREATE BUFFER
        !          12162: *      (XR)                  BCBLK PTR
        !          12163: *      (WA,WB)               DESTROYED
        !          12164: *
        !          12165: {ALOBF{PRC{E{0{{ENTRY POINT
        !          12166: {{MOV{R6{R7{{HANG ONTO ALLOCATION SIZE
        !          12167: {{CTB{R6{BFSI${{GET TOTAL BLOCK SIZE
        !          12168: {{BGE{R6{MXLEN{ALB01{CHECK FOR MAXLEN EXCEEDED
        !          12169: {{ADD{#4*BCSI${R6{{ADD IN ALLOCATION FOR BCBLK
        !          12170: {{JSR{ALLOC{{{ALLOCATE FRAME
        !          12171: {{MOV{#B$BCT{(R9){{SET TYPE
        !          12172: {{ZER{4*IDVAL(R9){{{NO ID YET
        !          12173: {{ZER{4*BCLEN(R9){{{NO DEFINED LENGTH
        !          12174: {{MOV{R10{R6{{SAVE XL
        !          12175: {{MOV{R9{R10{{COPY BCBLK PTR
        !          12176: {{ADD{#4*BCSI${R10{{BIAS PAST PARTIALLY BUILT BCBLK
        !          12177: {{MOV{#B$BFT{(R10){{SET BFBLK TYPE WORD
        !          12178: {{MOV{R7{4*BFALC(R10){{SET ALLOCATED SIZE
        !          12179: {{MOV{R10{4*BCBUF(R9){{SET POINTER IN BCBLK
        !          12180: {{ZER{4*BFCHR(R10){{{CLEAR FIRST WORD (NULL PAD)
        !          12181: {{MOV{R6{R10{{RESTORE ENTRY XL
        !          12182: {{EXI{{{{RETURN TO CALLER
        !          12183: *
        !          12184: *      HERE FOR MXLEN EXCEEDED
        !          12185: *
        !          12186: {ALB01{ERB{274{REQUESTED{{BUFFER ALLOCATION EXCEEDS MXLEN
        !          12187: {{ENP{{{{END PROCEDURE ALOBF
        !          12188: {{EJC{{{{
        !          12189: *
        !          12190: *      ALOCS -- ALLOCATE STRING BLOCK
        !          12191: *
        !          12192: *      ALOCS IS USED TO BUILD A FRAME FOR A STRING BLOCK INTO
        !          12193: *      WHICH THE ACTUAL CHARACTERS ARE PLACED BY THE CALLER.
        !          12194: *      ALL STRINGS ARE CREATED WITH A CALL TO ALOCS (THE
        !          12195: *      EXCEPTIONS OCCUR IN TRIMR AND S$RPL PROCEDURES).
        !          12196: *
        !          12197: *      (WA)                  LENGTH OF STRING TO BE ALLOCATED
        !          12198: *      JSR  ALOCS            CALL TO ALLOCATE SCBLK
        !          12199: *      (XR)                  POINTER TO RESULTING SCBLK
        !          12200: *      (WA)                  DESTROYED
        !          12201: *      (WC)                  CHARACTER COUNT (ENTRY VALUE OF WA)
        !          12202: *
        !          12203: *      THE RESULTING SCBLK HAS THE TYPE WORD AND THE LENGTH
        !          12204: *      FILLED IN AND THE LAST WORD IS CLEARED TO ZERO CHARACTERS
        !          12205: *      TO ENSURE CORRECT RIGHT PADDING OF THE FINAL WORD.
        !          12206: *
        !          12207: {ALOCS{PRC{E{0{{ENTRY POINT
        !          12208: {{BGT{R6{KVMXL{ALCS2{JUMP IF LENGTH EXCEEEDS MAXLENGTH
        !          12209: {{MOV{R6{R8{{ELSE COPY LENGTH
        !          12210: {{CTB{R6{SCSI${{COMPUTE LENGTH OF SCBLK IN BYTES
        !          12211: {{MOV{DNAMP{R9{{POINT TO NEXT AVAILABLE LOCATION
        !          12212: {{AOV{R6{R9{ALCS0{POINT PAST BLOCK
        !          12213: {{BLO{R9{DNAME{ALCS1{JUMP IF THERE IS ROOM
        !          12214: *
        !          12215: *      INSUFFICIENT MEMORY
        !          12216: *
        !          12217: {ALCS0{ZER{R9{{{ELSE CLEAR GARBAGE XR VALUE
        !          12218: {{JSR{ALLOC{{{AND USE STANDARD ALLOCATOR
        !          12219: {{ADD{R6{R9{{POINT PAST END OF BLOCK TO MERGE
        !          12220: *
        !          12221: *      MERGE HERE WITH XR POINTING BEYOND NEW BLOCK
        !          12222: *
        !          12223: {ALCS1{MOV{R9{DNAMP{{SET UPDATED STORAGE POINTER
        !          12224: {{ZER{-(R9){{{STORE ZERO CHARS IN LAST WORD
        !          12225: {{DCA{R6{{{DECREMENT LENGTH
        !          12226: {{SUB{R6{R9{{POINT BACK TO START OF BLOCK
        !          12227: {{MOV{#B$SCL{(R9){{SET TYPE WORD
        !          12228: {{MOV{R8{4*SCLEN(R9){{STORE LENGTH IN CHARS
        !          12229: {{EXI{{{{RETURN TO ALOCS CALLER
        !          12230: *
        !          12231: *      COME HERE IF STRING IS TOO LONG
        !          12232: *
        !          12233: {ALCS2{ERB{205{STRING{{LENGTH EXCEEDS VALUE OF MAXLNGTH KEYWORD
        !          12234: {{ENP{{{{END PROCEDURE ALOCS
        !          12235: {{EJC{{{{
        !          12236: *
        !          12237: *      ALOST -- ALLOCATE SPACE IN STATIC REGION
        !          12238: *
        !          12239: *      (WA)                  LENGTH REQUIRED IN BYTES
        !          12240: *      JSR  ALOST            CALL TO ALLOCATE SPACE
        !          12241: *      (XR)                  POINTER TO ALLOCATED BLOCK
        !          12242: *      (WB)                  DESTROYED
        !          12243: *
        !          12244: *      NOTE THAT THE CODING ENSURES THAT THE RESULTING VALUE
        !          12245: *      OF STATE IS ALWAYS LESS THAN DNAMB. THIS FACT IS USED
        !          12246: *      IN TESTING A VARIABLE NAME FOR BEING IN THE STATIC REGION
        !          12247: *
        !          12248: {ALOST{PRC{E{0{{ENTRY POINT
        !          12249: *
        !          12250: *      MERGE BACK HERE AFTER ALLOCATING NEW CHUNK
        !          12251: *
        !          12252: {ALST1{MOV{STATE{R9{{POINT TO CURRENT END OF AREA
        !          12253: {{AOV{R6{R9{ALST2{POINT BEYOND PROPOSED BLOCK
        !          12254: {{BGE{R9{DNAMB{ALST2{JUMP IF OVERLAP WITH DYNAMIC AREA
        !          12255: {{MOV{R9{STATE{{ELSE STORE NEW POINTER
        !          12256: {{SUB{R6{R9{{POINT BACK TO START OF BLOCK
        !          12257: {{EXI{{{{RETURN TO ALOST CALLER
        !          12258: *
        !          12259: *      HERE IF NO ROOM, PREPARE TO MOVE DYNAMIC STORAGE UP
        !          12260: *
        !          12261: {ALST2{MOV{R6{ALSTA{{SAVE WA
        !          12262: {{BGE{R6{#4*E$STS{ALST3{SKIP IF REQUESTED CHUNK IS LARGE
        !          12263: {{MOV{#4*E$STS{R6{{ELSE SET TO GET LARGE ENOUGH CHUNK
        !          12264: *
        !          12265: *      HERE WITH AMOUNT TO MOVE UP IN WA
        !          12266: *
        !          12267: {ALST3{JSR{ALLOC{{{ALLOCATE BLOCK TO ENSURE ROOM
        !          12268: {{MOV{R9{DNAMP{{AND DELETE IT
        !          12269: {{MOV{R6{R7{{COPY MOVE UP AMOUNT
        !          12270: {{JSR{GBCOL{{{CALL GBCOL TO MOVE DYNAMIC AREA UP
        !          12271: {{MOV{ALSTA{R6{{RESTORE WA
        !          12272: {{BRN{ALST1{{{LOOP BACK TO TRY AGAIN
        !          12273: {{ENP{{{{END PROCEDURE ALOST
        !          12274: {{EJC{{{{
        !          12275: *
        !          12276: *      APNDB -- APPEND STRING TO BUFFER
        !          12277: *
        !          12278: *      THIS ROUTINE IS USED BY BUFFER HANDLING ROUTINES TO
        !          12279: *      APPEND DATA TO AN EXISTING BFBLK.
        !          12280: *
        !          12281: *      (XR)                  EXISTING BCBLK TO BE APPENDED
        !          12282: *      (XL)                  CONVERTABLE TO STRING
        !          12283: *      JSR  APNDB            CALL TO APPEND TO BUFFER
        !          12284: *      PPM  LOC              THREAD IF (XL) CANT BE CONVERTED
        !          12285: *      PPM  LOC              IF NOT ENOUGH ROOM
        !          12286: *      (WA,WB)               DESTROYED
        !          12287: *
        !          12288: *      IF MORE CHARACTERS ARE SPECIFIED THAN CAN BE INSERTED,
        !          12289: *      THEN NO ACTION IS TAKEN AND THE SECOND RETURN IS TAKEN.
        !          12290: *
        !          12291: {APNDB{PRC{E{2{{ENTRY POINT
        !          12292: {{MOV{4*BCLEN(R9){R6{{LOAD OFFSET TO INSERT
        !          12293: {{ZER{R7{{{REPLACE SECTION IS NULL
        !          12294: {{JSR{INSBF{{{CALL TO INSERT AT END
        !          12295: {{PPM{APN01{{{CONVERT ERROR
        !          12296: {{PPM{APN02{{{NO ROOM
        !          12297: {{EXI{{{{RETURN TO CALLER
        !          12298: *
        !          12299: *      HERE TO TAKE CONVERT FAILURE EXIT
        !          12300: *
        !          12301: {APN01{EXI{1{{{RETURN TO CALLER ALTERNATE
        !          12302: *
        !          12303: *      HERE FOR NO FIT EXIT
        !          12304: *
        !          12305: {APN02{EXI{2{{{ALTERNATE EXIT TO CALLER
        !          12306: {{ENP{{{{END PROCEDURE APNDB
        !          12307: {{EJC{{{{
        !          12308: *
        !          12309: *      ARITH -- FETCH ARITHMETIC OPERANDS
        !          12310: *
        !          12311: *      ARITH IS USED BY FUNCTIONS AND OPERATORS WHICH EXPECT
        !          12312: *      TWO NUMERIC ARGUMENTS (OPERANDS) WHICH MUST BOTH BE
        !          12313: *      INTEGER OR BOTH BE REAL. ARITH FETCHES TWO ARGUMENTS FROM
        !          12314: *      THE STACK AND PERFORMS ANY NECESSARY CONVERSIONS.
        !          12315: *
        !          12316: *      1(XS)                 FIRST ARGUMENT (LEFT OPERAND)
        !          12317: *      0(XS)                 SECOND ARGUMENT (RIGHT OPERAND)
        !          12318: *      JSR  ARITH            CALL TO FETCH NUMERIC ARGUMENTS
        !          12319: *      PPM  LOC              TRANSFER LOC FOR OPND 1 NON-NUMERIC
        !          12320: *      PPM  LOC              TRANSFER LOC FOR OPND 2 NON-NUMERIC
        !          12321: *      PPM  LOC              TRANSFER LOC FOR REAL OPERANDS
        !          12322: *
        !          12323: *      FOR INTEGER ARGS, CONTROL RETURNS PAST THE PARAMETERS
        !          12324: *
        !          12325: *      (IA)                  LEFT OPERAND VALUE
        !          12326: *      (XR)                  PTR TO ICBLK FOR LEFT OPERAND
        !          12327: *      (XL)                  PTR TO ICBLK FOR RIGHT OPERAND
        !          12328: *      (XS)                  POPPED TWICE
        !          12329: *      (WA,WB,RA)            DESTROYED
        !          12330: *
        !          12331: *      FOR REAL ARGUMENTS, CONTROL RETURNS TO THE LOCATION
        !          12332: *      SPECIFIED BY THE THIRD PARAMETER.
        !          12333: *
        !          12334: *      (RA)                  LEFT OPERAND VALUE
        !          12335: *      (XR)                  PTR TO RCBLK FOR LEFT OPERAND
        !          12336: *      (XL)                  PTR TO RCBLK FOR RIGHT OPERAND
        !          12337: *      (WA,WB,WC)            DESTROYED
        !          12338: *      (XS)                  POPPED TWICE
        !          12339: {{EJC{{{{
        !          12340: *
        !          12341: *      ARITH (CONTINUED)
        !          12342: *
        !          12343: *      ENTRY POINT
        !          12344: *
        !          12345: {ARITH{PRC{N{3{{ENTRY POINT
        !          12346: {{MOV{(SP)+{R10{{LOAD RIGHT OPERAND
        !          12347: {{MOV{(SP)+{R9{{LOAD LEFT OPERAND
        !          12348: {{MOV{(R10){R6{{GET RIGHT OPERAND TYPE WORD
        !          12349: {{BEQ{R6{#B$ICL{ARTH1{JUMP IF INTEGER
        !          12350: {{BEQ{R6{#B$RCL{ARTH4{JUMP IF REAL
        !          12351: {{MOV{R9{-(SP){{ELSE REPLACE LEFT ARG ON STACK
        !          12352: {{MOV{R10{R9{{COPY LEFT ARG POINTER
        !          12353: {{JSR{GTNUM{{{CONVERT TO NUMERIC
        !          12354: {{PPM{ARTH6{{{JUMP IF UNCONVERTIBLE
        !          12355: {{MOV{R9{R10{{ELSE COPY CONVERTED RESULT
        !          12356: {{MOV{(R10){R6{{GET RIGHT OPERAND TYPE WORD
        !          12357: {{MOV{(SP)+{R9{{RELOAD LEFT ARGUMENT
        !          12358: {{BEQ{R6{#B$RCL{ARTH4{JUMP IF RIGHT ARG IS REAL
        !          12359: *
        !          12360: *      HERE IF RIGHT ARG IS AN INTEGER
        !          12361: *
        !          12362: {ARTH1{BNE{(R9){#B$ICL{ARTH3{JUMP IF LEFT ARG NOT INTEGER
        !          12363: *
        !          12364: *      EXIT FOR INTEGER CASE
        !          12365: *
        !          12366: {ARTH2{LDI{4*ICVAL(R9){{{LOAD LEFT OPERAND VALUE
        !          12367: {{EXI{{{{RETURN TO ARITH CALLER
        !          12368: *
        !          12369: *      HERE FOR RIGHT OPERAND INTEGER, LEFT OPERAND NOT
        !          12370: *
        !          12371: {ARTH3{JSR{GTNUM{{{CONVERT LEFT ARG TO NUMERIC
        !          12372: {{PPM{ARTH7{{{JUMP IF NOT CONVERTIBLE
        !          12373: {{BEQ{R6{#B$ICL{ARTH2{JUMP BACK IF INTEGER-INTEGER
        !          12374: *
        !          12375: *      HERE WE MUST CONVERT REAL-INTEGER TO REAL-REAL
        !          12376: *
        !          12377: {{MOV{R9{-(SP){{PUT LEFT ARG BACK ON STACK
        !          12378: {{LDI{4*ICVAL(R10){{{LOAD RIGHT ARGUMENT VALUE
        !          12379: {{ITR{{{{CONVERT TO REAL
        !          12380: {{JSR{RCBLD{{{GET REAL BLOCK FOR RIGHT ARG, MERGE
        !          12381: {{MOV{R9{R10{{COPY RIGHT ARG PTR
        !          12382: {{MOV{(SP)+{R9{{LOAD LEFT ARGUMENT
        !          12383: {{BRN{ARTH5{{{MERGE FOR REAL-REAL CASE
        !          12384: {{EJC{{{{
        !          12385: *
        !          12386: *      ARITH (CONTINUED)
        !          12387: *
        !          12388: *      HERE IF RIGHT ARGUMENT IS REAL
        !          12389: *
        !          12390: {ARTH4{BEQ{(R9){#B$RCL{ARTH5{JUMP IF LEFT ARG REAL
        !          12391: {{JSR{GTREA{{{ELSE CONVERT TO REAL
        !          12392: {{PPM{ARTH7{{{ERROR IF UNCONVERTIBLE
        !          12393: *
        !          12394: *      HERE FOR REAL-REAL
        !          12395: *
        !          12396: {ARTH5{LDR{4*RCVAL(R9){{{LOAD LEFT OPERAND VALUE
        !          12397: {{EXI{3{{{TAKE REAL-REAL EXIT
        !          12398: *
        !          12399: *      HERE FOR ERROR CONVERTING RIGHT ARGUMENT
        !          12400: *
        !          12401: {ARTH6{ICA{SP{{{POP UNWANTED LEFT ARG
        !          12402: {{EXI{2{{{TAKE APPROPRIATE ERROR EXIT
        !          12403: *
        !          12404: *      HERE FOR ERROR CONVERTING LEFT OPERAND
        !          12405: *
        !          12406: {ARTH7{EXI{1{{{TAKE APPROPRIATE ERROR RETURN
        !          12407: {{ENP{{{{END PROCEDURE ARITH
        !          12408: {{EJC{{{{
        !          12409: *
        !          12410: *      ASIGN -- PERFORM ASSIGNMENT
        !          12411: *
        !          12412: *      ASIGN PERFORMS THE ASSIGNMENT OF A VALUE TO A VARIABLE
        !          12413: *      WITH APPROPRIATE CHECKS FOR OUTPUT ASSOCIATIONS AND
        !          12414: *      VALUE TRACE ASSOCIATIONS WHICH ARE EXECUTED AS REQUIRED.
        !          12415: *      ASIGN ALSO HANDLES THE SPECIAL CASES OF ASSIGNMENT TO
        !          12416: *      PATTERN AND EXPRESSION VARIABLES.
        !          12417: *
        !          12418: *      (WB)                  VALUE TO BE ASSIGNED
        !          12419: *      (XL)                  BASE POINTER FOR VARIABLE
        !          12420: *      (WA)                  OFFSET FOR VARIABLE
        !          12421: *      JSR  ASIGN            CALL TO ASSIGN VALUE TO VARIABLE
        !          12422: *      PPM  LOC              TRANSFER LOC FOR FAILURE
        !          12423: *      (XR,XL,WA,WB,WC)      DESTROYED
        !          12424: *      (RA)                  DESTROYED
        !          12425: *
        !          12426: *      FAILURE OCCURS IF THE EVALUATION OF AN EXPRESSION
        !          12427: *      ASSOCIATED WITH AN EXPRESSION VARIABLE FAILS.
        !          12428: *
        !          12429: {ASIGN{PRC{R{1{{ENTRY POINT (RECURSIVE)
        !          12430: *
        !          12431: *      MERGE BACK HERE TO ASSIGN RESULT TO EXPRESSION VARIABLE.
        !          12432: *
        !          12433: {ASG01{ADD{R6{R10{{POINT TO VARIABLE VALUE
        !          12434: {{MOV{(R10){R9{{LOAD VARIABLE VALUE
        !          12435: {{BEQ{(R9){#B$TRT{ASG02{JUMP IF TRAPPED
        !          12436: {{MOV{R7{(R10){{ELSE PERFORM ASSIGNMENT
        !          12437: {{ZER{R10{{{CLEAR GARBAGE VALUE IN XL
        !          12438: {{EXI{{{{AND RETURN TO ASIGN CALLER
        !          12439: *
        !          12440: *      HERE IF VALUE IS TRAPPED
        !          12441: *
        !          12442: {ASG02{SUB{R6{R10{{RESTORE NAME BASE
        !          12443: {{BEQ{R9{#TRBKV{ASG14{JUMP IF KEYWORD VARIABLE
        !          12444: {{BNE{R9{#TRBEV{ASG04{JUMP IF NOT EXPRESSION VARIABLE
        !          12445: *
        !          12446: *      HERE FOR ASSIGNMENT TO EXPRESSION VARIABLE
        !          12447: *
        !          12448: {{MOV{4*EVEXP(R10){R9{{POINT TO EXPRESSION
        !          12449: {{MOV{R7{-(SP){{STORE VALUE TO ASSIGN ON STACK
        !          12450: {{MOV{#NUM01{R7{{SET FOR EVALUATION BY NAME
        !          12451: {{JSR{EVALX{{{EVALUATE EXPRESSION BY NAME
        !          12452: {{PPM{ASG03{{{JUMP IF EVALUATION FAILS
        !          12453: {{MOV{(SP)+{R7{{ELSE RELOAD VALUE TO ASSIGN
        !          12454: {{BRN{ASG01{{{LOOP BACK TO PERFORM ASSIGNMENT
        !          12455: {{EJC{{{{
        !          12456: *
        !          12457: *      ASIGN (CONTINUED)
        !          12458: *
        !          12459: *      HERE FOR FAILURE DURING EXPRESSION EVALUATION
        !          12460: *
        !          12461: {ASG03{ICA{SP{{{REMOVE STACKED VALUE ENTRY
        !          12462: {{EXI{1{{{TAKE FAILURE EXIT
        !          12463: *
        !          12464: *      HERE IF NOT KEYWORD OR EXPRESSION VARIABLE
        !          12465: *
        !          12466: {ASG04{MOV{R9{-(SP){{SAVE PTR TO FIRST TRBLK
        !          12467: *
        !          12468: *      LOOP TO CHASE DOWN TRBLK CHAIN AND ASSIGN VALUE AT END
        !          12469: *
        !          12470: {ASG05{MOV{R9{R8{{SAVE PTR TO THIS TRBLK
        !          12471: {{MOV{4*TRNXT(R9){R9{{POINT TO NEXT TRBLK
        !          12472: {{BEQ{(R9){#B$TRT{ASG05{LOOP BACK IF ANOTHER TRBLK
        !          12473: {{MOV{R8{R9{{ELSE POINT BACK TO LAST TRBLK
        !          12474: {{MOV{R7{4*TRVAL(R9){{STORE VALUE AT END OF CHAIN
        !          12475: {{MOV{(SP)+{R9{{RESTORE PTR TO FIRST TRBLK
        !          12476: *
        !          12477: *      LOOP TO PROCESS TRBLK ENTRIES ON CHAIN
        !          12478: *
        !          12479: {ASG06{MOV{4*TRTYP(R9){R7{{LOAD TYPE CODE OF TRBLK
        !          12480: {{BEQ{R7{#TRTVL{ASG08{JUMP IF VALUE TRACE
        !          12481: {{BEQ{R7{#TRTOU{ASG10{JUMP IF OUTPUT ASSOCIATION
        !          12482: *
        !          12483: *      HERE TO MOVE TO NEXT TRBLK ON CHAIN
        !          12484: *
        !          12485: {ASG07{MOV{4*TRNXT(R9){R9{{POINT TO NEXT TRBLK ON CHAIN
        !          12486: {{BEQ{(R9){#B$TRT{ASG06{LOOP BACK IF ANOTHER TRBLK
        !          12487: {{EXI{{{{ELSE END OF CHAIN, RETURN TO CALLER
        !          12488: *
        !          12489: *      HERE TO PROCESS VALUE TRACE
        !          12490: *
        !          12491: {ASG08{BZE{KVTRA{ASG07{{IGNORE VALUE TRACE IF TRACE OFF
        !          12492: {{DCV{KVTRA{{{ELSE DECREMENT TRACE COUNT
        !          12493: {{BZE{4*TRFNC(R9){ASG09{{JUMP IF PRINT TRACE
        !          12494: {{JSR{TRXEQ{{{ELSE EXECUTE FUNCTION TRACE
        !          12495: {{BRN{ASG07{{{AND LOOP BACK
        !          12496: {{EJC{{{{
        !          12497: *
        !          12498: *      ASIGN (CONTINUED)
        !          12499: *
        !          12500: *      HERE FOR PRINT TRACE
        !          12501: *
        !          12502: {ASG09{JSR{PRTSN{{{PRINT STATEMENT NUMBER
        !          12503: {{JSR{PRTNV{{{PRINT NAME = VALUE
        !          12504: {{BRN{ASG07{{{LOOP BACK FOR NEXT TRBLK
        !          12505: *
        !          12506: *      HERE FOR OUTPUT ASSOCIATION
        !          12507: *
        !          12508: {ASG10{BZE{KVOUP{ASG07{{IGNORE OUTPUT ASSOC IF OUTPUT OFF
        !          12509: {{MOV{R9{R10{{ELSE COPY TRBLK POINTER
        !          12510: {{MOV{4*TRVAL(R8){-(SP){{STACK VALUE TO OUTPUT (SGD01)
        !          12511: {{JSR{GTSTG{{{CONVERT TO STRING
        !          12512: {{PPM{ASG12{{{GET DATATYPE NAME IF UNCONVERTIBLE
        !          12513: *
        !          12514: *      MERGE WITH STRING FOR OUTPUT
        !          12515: *
        !          12516: {ASG11{MOV{4*TRFPT(R10){R6{{FCBLK PTR
        !          12517: {{BZE{R6{ASG13{{JUMP IF STANDARD OUTPUT FILE
        !          12518: *
        !          12519: *      HERE FOR OUTPUT TO NON-STANDARD OUTPUT FILE
        !          12520: *
        !          12521: {{JSR{SYSOU{{{CALL SYSTEM OUTPUT ROUTINE
        !          12522: {{ERR{206{OUTPUT{{CAUSED FILE OVERFLOW
        !          12523: {{ERR{207{OUTPUT{{CAUSED NON-RECOVERABLE ERROR
        !          12524: {{EXI{{{{ELSE ALL DONE, RETURN TO CALLER
        !          12525: *
        !          12526: *      IF NOT PRINTABLE, GET DATATYPE NAME INSTEAD
        !          12527: *
        !          12528: {ASG12{JSR{DTYPE{{{CALL DATATYPE ROUTINE
        !          12529: {{BRN{ASG11{{{MERGE
        !          12530: *
        !          12531: *      HERE TO PRINT A STRING ON THE PRINTER
        !          12532: *
        !          12533: {ASG13{JSR{PRTST{{{PRINT STRING VALUE
        !          12534: {{BEQ{4*TRTER(R10){#V$TER{ASG20{JUMP IF TERMINAL OUTPUT
        !          12535: {{JSR{PRTNL{{{END OF LINE
        !          12536: {{EXI{{{{RETURN TO CALLER
        !          12537: {{EJC{{{{
        !          12538: *
        !          12539: *      ASIGN (CONTINUED)
        !          12540: *
        !          12541: *      HERE FOR KEYWORD ASSIGNMENT
        !          12542: *
        !          12543: {ASG14{MOV{4*KVNUM(R10){R10{{LOAD KEYWORD NUMBER
        !          12544: {{BEQ{R10{#K$ETX{ASG19{JUMP IF ERRTEXT
        !          12545: {{MOV{R7{R9{{COPY VALUE TO BE ASSIGNED
        !          12546: {{JSR{GTINT{{{CONVERT TO INTEGER
        !          12547: {{ERR{208{KEYWORD{{VALUE ASSIGNED IS NOT INTEGER
        !          12548: {{LDI{4*ICVAL(R9){{{ELSE LOAD VALUE
        !          12549: {{BEQ{R10{#K$STL{ASG16{JUMP IF SPECIAL CASE OF STLIMIT
        !          12550: {{MFI{R6{ASG18{{ELSE GET ADDR INTEGER, TEST OVFLOW
        !          12551: {{BGE{R6{MXLEN{ASG18{FAIL IF TOO LARGE
        !          12552: {{BEQ{R10{#K$ERT{ASG17{JUMP IF SPECIAL CASE OF ERRTYPE
        !          12553: {{BEQ{R10{#K$PFL{ASG21{JUMP IF SPECIAL CASE OF PROFILE
        !          12554: {{BLT{R10{#K$P$${ASG15{JUMP UNLESS PROTECTED
        !          12555: {{ERB{209{KEYWORD{{IN ASSIGNMENT IS PROTECTED
        !          12556: *
        !          12557: *      HERE TO DO ASSIGNMENT IF NOT PROTECTED
        !          12558: *
        !          12559: {ASG15{MOV{R6{L^KVABE(R10){{STORE NEW VALUE
        !          12560: {{EXI{{{{RETURN TO ASIGN CALLER
        !          12561: *
        !          12562: *      HERE FOR SPECIAL CASE OF STLIMIT
        !          12563: *
        !          12564: *      SINCE STCOUNT IS MAINTAINED AS (STLIMIT-STCOUNT)
        !          12565: *      IT IS ALSO NECESSARY TO MODIFY STCOUNT APPROPRIATELY.
        !          12566: *
        !          12567: {ASG16{SBI{KVSTL{{{SUBTRACT OLD LIMIT
        !          12568: {{ADI{KVSTC{{{ADD OLD COUNTER
        !          12569: {{STI{KVSTC{{{STORE NEW COUNTER VALUE
        !          12570: {{LDI{4*ICVAL(R9){{{RELOAD NEW LIMIT VALUE
        !          12571: {{STI{KVSTL{{{STORE NEW LIMIT VALUE
        !          12572: {{EXI{{{{RETURN TO ASIGN CALLER
        !          12573: *
        !          12574: *      HERE FOR SPECIAL CASE OF ERRTYPE
        !          12575: *
        !          12576: {ASG17{BLE{R6{#NINI9{ERROR{OK TO SIGNAL IF IN RANGE
        !          12577: *
        !          12578: *      HERE IF VALUE ASSIGNED IS OUT OF RANGE
        !          12579: *
        !          12580: {ASG18{ERB{210{KEYWORD{{VALUE ASSIGNED IS NEGATIVE OR TOO LARGE
        !          12581: *
        !          12582: *      HERE FOR SPECIAL CASE OF ERRTEXT
        !          12583: *
        !          12584: {ASG19{MOV{R7{-(SP){{STACK VALUE
        !          12585: {{JSR{GTSTG{{{CONVERT TO STRING
        !          12586: {{ERR{211{VALUE{{ASSIGNED TO KEYWORD ERRTEXT NOT A STRING
        !          12587: {{MOV{R9{R$ETX{{MAKE ASSIGNMENT
        !          12588: {{EXI{{{{RETURN TO CALLER
        !          12589: *
        !          12590: *      PRINT STRING TO TERMINAL
        !          12591: *
        !          12592: {ASG20{JSR{PRTTR{{{PRINT
        !          12593: {{EXI{{{{RETURN
        !          12594: *
        !          12595: *      HERE FOR KEYWORD PROFILE
        !          12596: *
        !          12597: {ASG21{BGT{R6{#NUM02{ASG18{MOAN IF NOT 0,1, OR 2
        !          12598: {{BZE{R6{ASG15{{JUST ASSIGN IF ZERO
        !          12599: {{BZE{PFDMP{ASG22{{BRANCH IF FIRST ASSIGNMENT
        !          12600: {{BEQ{R6{PFDMP{ASG23{ALSO IF SAME VALUE AS BEFORE
        !          12601: {{ERB{268{INCONSISTENT{{VALUE ASSIGNED TO KEYWORD PROFILE
        !          12602: *
        !          12603: {ASG22{MOV{R6{PFDMP{{NOTE VALUE ON FIRST ASSIGNMENT
        !          12604: {ASG23{JSR{SYSTM{{{GET THE TIME
        !          12605: {{STI{PFSTM{{{FUDGE SOME KIND OF START TIME
        !          12606: {{BRN{ASG15{{{AND GO ASSIGN
        !          12607: {{ENP{{{{END PROCEDURE ASIGN
        !          12608: {{EJC{{{{
        !          12609: *
        !          12610: *      ASINP -- ASSIGN DURING PATTERN MATCH
        !          12611: *
        !          12612: *      ASINP IS LIKE ASIGN AND HAS A SIMILAR CALLING SEQUENCE
        !          12613: *      AND EFFECT. THE DIFFERENCE IS THAT THE GLOBAL PATTERN
        !          12614: *      VARIABLES ARE SAVED AND RESTORED IF REQUIRED.
        !          12615: *
        !          12616: *      (XL)                  BASE POINTER FOR VARIABLE
        !          12617: *      (WA)                  OFFSET FOR VARIABLE
        !          12618: *      (WB)                  VALUE TO BE ASSIGNED
        !          12619: *      JSR  ASINP            CALL TO ASSIGN VALUE TO VARIABLE
        !          12620: *      PPM  LOC              TRANSFER LOC IF FAILURE
        !          12621: *      (XR,XL)               DESTROYED
        !          12622: *      (WA,WB,WC,RA)         DESTROYED
        !          12623: *
        !          12624: {ASINP{PRC{R{1{{ENTRY POINT, RECURSIVE
        !          12625: {{ADD{R6{R10{{POINT TO VARIABLE
        !          12626: {{MOV{(R10){R9{{LOAD CURRENT CONTENTS
        !          12627: {{BEQ{(R9){#B$TRT{ASNP1{JUMP IF TRAPPED
        !          12628: {{MOV{R7{(R10){{ELSE PERFORM ASSIGNMENT
        !          12629: {{ZER{R10{{{CLEAR GARBAGE VALUE IN XL
        !          12630: {{EXI{{{{RETURN TO ASINP CALLER
        !          12631: *
        !          12632: *      HERE IF VARIABLE IS TRAPPED
        !          12633: *
        !          12634: {ASNP1{SUB{R6{R10{{RESTORE BASE POINTER
        !          12635: {{MOV{PMSSL{-(SP){{STACK SUBJECT STRING LENGTH
        !          12636: {{MOV{PMHBS{-(SP){{STACK HISTORY STACK BASE PTR
        !          12637: {{MOV{R$PMS{-(SP){{STACK SUBJECT STRING POINTER
        !          12638: {{MOV{PMDFL{-(SP){{STACK DOT FLAG
        !          12639: {{JSR{ASIGN{{{CALL FULL-BLOWN ASSIGNMENT ROUTINE
        !          12640: {{PPM{ASNP2{{{JUMP IF FAILURE
        !          12641: {{MOV{(SP)+{PMDFL{{RESTORE DOT FLAG
        !          12642: {{MOV{(SP)+{R$PMS{{RESTORE SUBJECT STRING POINTER
        !          12643: {{MOV{(SP)+{PMHBS{{RESTORE HISTORY STACK BASE POINTER
        !          12644: {{MOV{(SP)+{PMSSL{{RESTORE SUBJECT STRING LENGTH
        !          12645: {{EXI{{{{RETURN TO ASINP CALLER
        !          12646: *
        !          12647: *      HERE IF FAILURE IN ASIGN CALL
        !          12648: *
        !          12649: {ASNP2{MOV{(SP)+{PMDFL{{RESTORE DOT FLAG
        !          12650: {{MOV{(SP)+{R$PMS{{RESTORE SUBJECT STRING POINTER
        !          12651: {{MOV{(SP)+{PMHBS{{RESTORE HISTORY STACK BASE POINTER
        !          12652: {{MOV{(SP)+{PMSSL{{RESTORE SUBJECT STRING LENGTH
        !          12653: {{EXI{1{{{TAKE FAILURE EXIT
        !          12654: {{ENP{{{{END PROCEDURE ASINP
        !          12655: {{EJC{{{{
        !          12656: *
        !          12657: *      BLKLN -- DETERMINE LENGTH OF BLOCK
        !          12658: *
        !          12659: *      BLKLN DETERMINES THE LENGTH OF A BLOCK IN DYNAMIC STORE.
        !          12660: *
        !          12661: *      (WA)                  FIRST WORD OF BLOCK
        !          12662: *      (XR)                  POINTER TO BLOCK
        !          12663: *      JSR  BLKLN            CALL TO GET BLOCK LENGTH
        !          12664: *      (WA)                  LENGTH OF BLOCK IN BYTES
        !          12665: *      (XL)                  DESTROYED
        !          12666: *
        !          12667: *      BLKLN IS USED BY THE GARBAGE COLLECTOR AND IS NOT
        !          12668: *      PERMITTED TO CALL GBCOL DIRECTLY OR INDIRECTLY.
        !          12669: *
        !          12670: *      THE FIRST WORD STORED IN THE BLOCK (I.E. AT XR) MAY
        !          12671: *      BE ANYTHING, BUT THE CONTENTS OF WA MUST BE CORRECT.
        !          12672: *
        !          12673: {BLKLN{PRC{E{0{{ENTRY POINT
        !          12674: {{MOV{R6{R10{{COPY FIRST WORD
        !          12675: {{LEI{R10{{{GET ENTRY ID (BL$XX)
        !          12676: {{BSW{R10{BL$$${BLN00{SWITCH ON BLOCK TYPE
        !          12677: {{IFF{BL$AR{BLN01{{ARBLK
        !          12678: {{IFF{BL$BC{BLN04{{BCBLK
        !          12679: {{IFF{BL$CD{BLN01{{CDBLK
        !          12680: {{IFF{BL$EX{BLN01{{EXBLK
        !          12681: {{IFF{BL$IC{BLN07{{ICBLK
        !          12682: {{IFF{BL$NM{BLN03{{NMBLK
        !          12683: {{IFF{BL$P0{BLN02{{P0BLK
        !          12684: {{IFF{BL$P1{BLN03{{P1BLK
        !          12685: {{IFF{BL$P2{BLN04{{P2BLK
        !          12686: {{IFF{BL$RC{BLN09{{RCBLK
        !          12687: {{IFF{BL$SC{BLN10{{SCBLK
        !          12688: {{IFF{BL$SE{BLN02{{SEBLK
        !          12689: {{IFF{BL$TB{BLN01{{TBBLK
        !          12690: {{IFF{BL$VC{BLN01{{VCBLK
        !          12691: {{IFF{DUMMY{BLN00{{
        !          12692: {{IFF{DUMMY{BLN00{{
        !          12693: {{IFF{BL$PD{BLN08{{PDBLK
        !          12694: {{IFF{BL$TR{BLN05{{TRBLK
        !          12695: {{IFF{BL$BF{BLN11{{BFBLK
        !          12696: {{IFF{DUMMY{BLN00{{
        !          12697: {{IFF{DUMMY{BLN00{{
        !          12698: {{IFF{BL$CT{BLN06{{CTBLK
        !          12699: {{IFF{BL$DF{BLN01{{DFBLK
        !          12700: {{IFF{BL$EF{BLN01{{EFBLK
        !          12701: {{IFF{BL$EV{BLN03{{EVBLK
        !          12702: {{IFF{BL$FF{BLN05{{FFBLK
        !          12703: {{IFF{BL$KV{BLN03{{KVBLK
        !          12704: {{IFF{BL$PF{BLN01{{PFBLK
        !          12705: {{IFF{BL$TE{BLN04{{TEBLK
        !          12706: {{ESW{{{{END OF JUMP TABLE ON BLOCK TYPE
        !          12707: {{EJC{{{{
        !          12708: *
        !          12709: *      BLKLN (CONTINUED)
        !          12710: *
        !          12711: *      HERE FOR BLOCKS WITH LENGTH IN SECOND WORD
        !          12712: *
        !          12713: {BLN00{MOV{4*1(R9){R6{{LOAD LENGTH
        !          12714: {{EXI{{{{RETURN TO BLKLN CALLER
        !          12715: *
        !          12716: *      HERE FOR LENGTH IN THIRD WORD (AR,CD,DF,EF,EX,PF,TB,VC)
        !          12717: *
        !          12718: {BLN01{MOV{4*2(R9){R6{{LOAD LENGTH FROM THIRD WORD
        !          12719: {{EXI{{{{RETURN TO BLKLN CALLER
        !          12720: *
        !          12721: *      HERE FOR TWO WORD BLOCKS (P0,SE)
        !          12722: *
        !          12723: {BLN02{MOV{#4*NUM02{R6{{LOAD LENGTH (TWO WORDS)
        !          12724: {{EXI{{{{RETURN TO BLKLN CALLER
        !          12725: *
        !          12726: *      HERE FOR THREE WORD BLOCKS (NM,P1,EV,KV)
        !          12727: *
        !          12728: {BLN03{MOV{#4*NUM03{R6{{LOAD LENGTH (THREE WORDS)
        !          12729: {{EXI{{{{RETURN TO BLKLN CALLER
        !          12730: *
        !          12731: *      HERE FOR FOUR WORD BLOCKS (P2,TE,BC)
        !          12732: *
        !          12733: {BLN04{MOV{#4*NUM04{R6{{LOAD LENGTH (FOUR WORDS)
        !          12734: {{EXI{{{{RETURN TO BLKLN CALLER
        !          12735: *
        !          12736: *      HERE FOR FIVE WORD BLOCKS (FF,TR)
        !          12737: *
        !          12738: {BLN05{MOV{#4*NUM05{R6{{LOAD LENGTH
        !          12739: {{EXI{{{{RETURN TO BLKLN CALLER
        !          12740: {{EJC{{{{
        !          12741: *
        !          12742: *      BLKLN (CONTINUED)
        !          12743: *
        !          12744: *      HERE FOR CTBLK
        !          12745: *
        !          12746: {BLN06{MOV{#4*CTSI${R6{{SET SIZE OF CTBLK
        !          12747: {{EXI{{{{RETURN TO BLKLN CALLER
        !          12748: *
        !          12749: *      HERE FOR ICBLK
        !          12750: *
        !          12751: {BLN07{MOV{#4*ICSI${R6{{SET SIZE OF ICBLK
        !          12752: {{EXI{{{{RETURN TO BLKLN CALLER
        !          12753: *
        !          12754: *      HERE FOR PDBLK
        !          12755: *
        !          12756: {BLN08{MOV{4*PDDFP(R9){R10{{POINT TO DFBLK
        !          12757: {{MOV{4*DFPDL(R10){R6{{LOAD PDBLK LENGTH FROM DFBLK
        !          12758: {{EXI{{{{RETURN TO BLKLN CALLER
        !          12759: *
        !          12760: *      HERE FOR RCBLK
        !          12761: *
        !          12762: {BLN09{MOV{#4*RCSI${R6{{SET SIZE OF RCBLK
        !          12763: {{EXI{{{{RETURN TO BLKLN CALLER
        !          12764: *
        !          12765: *      HERE FOR SCBLK
        !          12766: *
        !          12767: {BLN10{MOV{4*SCLEN(R9){R6{{LOAD LENGTH IN CHARACTERS
        !          12768: {{CTB{R6{SCSI${{CALCULATE LENGTH IN BYTES
        !          12769: {{EXI{{{{RETURN TO BLKLN CALLER
        !          12770: *
        !          12771: *      HERE FOR BFBLK
        !          12772: *
        !          12773: {BLN11{MOV{4*BFALC(R9){R6{{GET ALLOCATION IN BYTES
        !          12774: {{CTB{R6{BFSI${{CALCULATE LENGTH IN BYTES
        !          12775: {{EXI{{{{RETURN TO BLKLN CALLER
        !          12776: {{ENP{{{{END PROCEDURE BLKLN
        !          12777: {{EJC{{{{
        !          12778: *
        !          12779: *      COPYB -- COPY A BLOCK
        !          12780: *
        !          12781: *      (XS)                  BLOCK TO BE COPIED
        !          12782: *      JSR  COPYB            CALL TO COPY BLOCK
        !          12783: *      PPM  LOC              RETURN IF BLOCK HAS NO IDVAL FIELD
        !          12784: *                            NORMAL RETURN IF IDVAL FIELD
        !          12785: *      (XR)                  COPY OF BLOCK
        !          12786: *      (XS)                  POPPED
        !          12787: *      (XL,WA,WB,WC)         DESTROYED
        !          12788: *
        !          12789: {COPYB{PRC{N{1{{ENTRY POINT
        !          12790: {{MOV{(SP){R9{{LOAD ARGUMENT
        !          12791: {{BEQ{R9{#NULLS{COP10{RETURN ARGUMENT IF IT IS NULL
        !          12792: {{MOV{(R9){R6{{ELSE LOAD TYPE WORD
        !          12793: {{MOV{R6{R7{{COPY TYPE WORD
        !          12794: {{JSR{BLKLN{{{GET LENGTH OF ARGUMENT BLOCK
        !          12795: {{MOV{R9{R10{{COPY POINTER
        !          12796: {{JSR{ALLOC{{{ALLOCATE BLOCK OF SAME SIZE
        !          12797: {{MOV{R9{(SP){{STORE POINTER TO COPY
        !          12798: {{MVW{{{{COPY CONTENTS OF OLD BLOCK TO NEW
        !          12799: {{MOV{(SP){R9{{RELOAD POINTER TO START OF COPY
        !          12800: {{BEQ{R7{#B$TBT{COP05{JUMP IF TABLE
        !          12801: {{BEQ{R7{#B$VCT{COP01{JUMP IF VECTOR
        !          12802: {{BEQ{R7{#B$PDT{COP01{JUMP IF PROGRAM DEFINED
        !          12803: {{BEQ{R7{#B$BCT{COP11{JUMP IF BUFFER
        !          12804: {{BNE{R7{#B$ART{COP10{RETURN COPY IF NOT ARRAY
        !          12805: *
        !          12806: *      HERE FOR ARRAY (ARBLK)
        !          12807: *
        !          12808: {{ADD{4*AROFS(R9){R9{{POINT TO PROTOTYPE FIELD
        !          12809: {{BRN{COP02{{{JUMP TO MERGE
        !          12810: *
        !          12811: *      HERE FOR VECTOR, PROGRAM DEFINED
        !          12812: *
        !          12813: {COP01{ADD{#4*PDFLD{R9{{POINT TO PDFLD = VCVLS
        !          12814: *
        !          12815: *      MERGE HERE FOR ARBLK, VCBLK, PDBLK TO DELETE TRAP
        !          12816: *      BLOCKS FROM ALL VALUE FIELDS (THE COPY IS UNTRAPPED)
        !          12817: *
        !          12818: {COP02{MOV{(R9){R10{{LOAD NEXT POINTER
        !          12819: *
        !          12820: *      LOOP TO GET VALUE AT END OF TRBLK CHAIN
        !          12821: *
        !          12822: {COP03{BNE{(R10){#B$TRT{COP04{JUMP IF NOT TRAPPED
        !          12823: {{MOV{4*TRVAL(R10){R10{{ELSE POINT TO NEXT VALUE
        !          12824: {{BRN{COP03{{{AND LOOP BACK
        !          12825: {{EJC{{{{
        !          12826: *
        !          12827: *      COPYB (CONTINUED)
        !          12828: *
        !          12829: *      HERE WITH UNTRAPPED VALUE IN XL
        !          12830: *
        !          12831: {COP04{MOV{R10{(R9)+{{STORE REAL VALUE, BUMP POINTER
        !          12832: {{BNE{R9{DNAMP{COP02{LOOP BACK IF MORE TO GO
        !          12833: {{BRN{COP09{{{ELSE JUMP TO EXIT
        !          12834: *
        !          12835: *      HERE TO COPY A TABLE
        !          12836: *
        !          12837: {COP05{ZER{4*IDVAL(R9){{{ZERO ID TO STOP DUMP BLOWING UP
        !          12838: {{MOV{#4*TESI${R6{{SET SIZE OF TEBLK
        !          12839: {{MOV{#4*TBBUK{R8{{SET INITIAL OFFSET
        !          12840: *
        !          12841: *      LOOP THROUGH BUCKETS IN TABLE
        !          12842: *
        !          12843: {COP06{MOV{(SP){R9{{LOAD TABLE POINTER
        !          12844: {{BEQ{R8{4*TBLEN(R9){COP09{JUMP TO EXIT IF ALL DONE
        !          12845: {{ADD{R8{R9{{ELSE POINT TO NEXT BUCKET HEADER
        !          12846: {{ICA{R8{{{BUMP OFFSET
        !          12847: {{SUB{#4*TENXT{R9{{SUBTRACT LINK OFFSET TO MERGE
        !          12848: *
        !          12849: *      LOOP THROUGH TEBLKS ON ONE CHAIN
        !          12850: *
        !          12851: {COP07{MOV{4*TENXT(R9){R10{{LOAD POINTER TO NEXT TEBLK
        !          12852: {{MOV{(SP){4*TENXT(R9){{SET END OF CHAIN POINTER IN CASE
        !          12853: {{BEQ{(R10){#B$TBT{COP06{BACK FOR NEXT BUCKET IF CHAIN END
        !          12854: {{MOV{R9{-(SP){{ELSE STACK PTR TO PREVIOUS BLOCK
        !          12855: {{MOV{#4*TESI${R6{{SET SIZE OF TEBLK
        !          12856: {{JSR{ALLOC{{{ALLOCATE NEW TEBLK
        !          12857: {{MOV{R9{R7{{SAVE PTR TO NEW TEBLK
        !          12858: {{MVW{{{{COPY OLD TEBLK TO NEW TEBLK
        !          12859: {{MOV{R7{R9{{RESTORE POINTER TO NEW TEBLK
        !          12860: {{MOV{(SP)+{R10{{RESTORE POINTER TO PREVIOUS BLOCK
        !          12861: {{MOV{R9{4*TENXT(R10){{LINK NEW BLOCK TO PREVIOUS
        !          12862: {{MOV{R9{R10{{COPY POINTER TO NEW BLOCK
        !          12863: *
        !          12864: *      LOOP TO SET REAL VALUE AFTER REMOVING TRAP CHAIN
        !          12865: *
        !          12866: {COP08{MOV{4*TEVAL(R10){R10{{LOAD VALUE
        !          12867: {{BEQ{(R10){#B$TRT{COP08{LOOP BACK IF TRAPPED
        !          12868: {{MOV{R10{4*TEVAL(R9){{STORE UNTRAPPED VALUE IN TEBLK
        !          12869: {{BRN{COP07{{{BACK FOR NEXT TEBLK
        !          12870: *
        !          12871: *      COMMON EXIT POINT
        !          12872: *
        !          12873: {COP09{MOV{(SP)+{R9{{LOAD POINTER TO BLOCK
        !          12874: {{EXI{{{{RETURN
        !          12875: *
        !          12876: *      ALTERNATIVE RETURN
        !          12877: *
        !          12878: {COP10{EXI{1{{{RETURN
        !          12879: {{EJC{{{{
        !          12880: *
        !          12881: *      HERE TO COPY BUFFER
        !          12882: *
        !          12883: {COP11{MOV{4*BCBUF(R9){R10{{GET BFBLK PTR
        !          12884: {{MOV{4*BFALC(R10){R6{{GET ALLOCATION
        !          12885: {{CTB{R6{BFSI${{SET TOTAL SIZE
        !          12886: {{MOV{R9{R10{{SAVE BCBLK PTR
        !          12887: {{JSR{ALLOC{{{ALLOCATE BFBLK
        !          12888: {{MOV{4*BCBUF(R10){R7{{GET OLD BFBLK
        !          12889: {{MOV{R9{4*BCBUF(R10){{SET POINTER TO NEW BFBLK
        !          12890: {{MOV{R7{R10{{POINT TO OLD BFBLK
        !          12891: {{MVW{{{{COPY BFBLK TOO
        !          12892: {{ZER{R10{{{CLEAR RUBBISH PTR
        !          12893: {{BRN{COP09{{{BRANCH TO EXIT
        !          12894: {{ENP{{{{END PROCEDURE COPYB
        !          12895: *
        !          12896: *      CDGCG -- GENERATE CODE FOR COMPLEX GOTO
        !          12897: *
        !          12898: *      USED BY CMPIL TO PROCESS COMPLEX GOTO TREE
        !          12899: *
        !          12900: *      (WB)                  MUST BE COLLECTABLE
        !          12901: *      (XR)                  EXPRESSION POINTER
        !          12902: *      JSR  CDGCG            CALL TO GENERATE COMPLEX GOTO
        !          12903: *      (XL,XR,WA)            DESTROYED
        !          12904: *
        !          12905: {CDGCG{PRC{E{0{{ENTRY POINT
        !          12906: {{MOV{4*CMOPN(R9){R10{{GET UNARY GOTO OPERATOR
        !          12907: {{MOV{4*CMROP(R9){R9{{POINT TO GOTO OPERAND
        !          12908: {{BEQ{R10{#OPDVD{CDGC2{JUMP IF DIRECT GOTO
        !          12909: {{JSR{CDGNM{{{GENERATE OPND BY NAME IF NOT DIRECT
        !          12910: *
        !          12911: *      RETURN POINT
        !          12912: *
        !          12913: {CDGC1{MOV{R10{R6{{GOTO OPERATOR
        !          12914: {{JSR{CDWRD{{{GENERATE IT
        !          12915: {{EXI{{{{RETURN TO CALLER
        !          12916: *
        !          12917: *      DIRECT GOTO
        !          12918: *
        !          12919: {CDGC2{JSR{CDGVL{{{GENERATE OPERAND BY VALUE
        !          12920: {{BRN{CDGC1{{{MERGE TO RETURN
        !          12921: {{ENP{{{{END PROCEDURE CDGCG
        !          12922: {{EJC{{{{
        !          12923: *
        !          12924: *      CDGEX -- BUILD EXPRESSION BLOCK
        !          12925: *
        !          12926: *      CDGEX IS PASSED A POINTER TO AN EXPRESSION TREE (SEE
        !          12927: *      EXPAN) AND RETURNS AN EXPRESSION (SEBLK OR EXBLK).
        !          12928: *
        !          12929: *      (WC)                  SOME COLLECTABLE VALUE
        !          12930: *      (WB)                  INTEGER IN RANGE 0 LE X LE MXLEN
        !          12931: *      (XL)                  PTR TO EXPRESSION TREE
        !          12932: *      JSR  CDGEX            CALL TO BUILD EXPRESSION
        !          12933: *      (XR)                  PTR TO SEBLK OR EXBLK
        !          12934: *      (XL,WA,WB)            DESTROYED
        !          12935: *
        !          12936: {CDGEX{PRC{R{0{{ENTRY POINT, RECURSIVE
        !          12937: {{BLO{(R10){#B$VR${CDGX1{JUMP IF NOT VARIABLE
        !          12938: *
        !          12939: *      HERE FOR NATURAL VARIABLE, BUILD SEBLK
        !          12940: *
        !          12941: {{MOV{#4*SESI${R6{{SET SIZE OF SEBLK
        !          12942: {{JSR{ALLOC{{{ALLOCATE SPACE FOR SEBLK
        !          12943: {{MOV{#B$SEL{(R9){{SET TYPE WORD
        !          12944: {{MOV{R10{4*SEVAR(R9){{STORE VRBLK POINTER
        !          12945: {{EXI{{{{RETURN TO CDGEX CALLER
        !          12946: *
        !          12947: *      HERE IF NOT VARIABLE, BUILD EXBLK
        !          12948: *
        !          12949: {CDGX1{MOV{R10{R9{{COPY TREE POINTER
        !          12950: {{MOV{R8{-(SP){{SAVE WC
        !          12951: {{MOV{CWCOF{R10{{SAVE CURRENT OFFSET
        !          12952: {{MOV{(R9){R6{{GET TYPE WORD
        !          12953: {{BNE{R6{#B$CMT{CDGX2{CALL BY VALUE IF NOT CMBLK
        !          12954: {{BGE{4*CMTYP(R9){#C$$NM{CDGX2{JUMP IF CMBLK ONLY BY VALUE
        !          12955: {{EJC{{{{
        !          12956: *
        !          12957: *      CDGEX (CONTINUED)
        !          12958: *
        !          12959: *      HERE IF EXPRESSION CAN BE EVALUATED BY NAME
        !          12960: *
        !          12961: {{JSR{CDGNM{{{GENERATE CODE BY NAME
        !          12962: {{MOV{#ORNM${R6{{LOAD RETURN BY NAME WORD
        !          12963: {{BRN{CDGX3{{{MERGE WITH VALUE CASE
        !          12964: *
        !          12965: *      HERE IF EXPRESSION CAN ONLY BE EVALUATED BY VALUE
        !          12966: *
        !          12967: {CDGX2{JSR{CDGVL{{{GENERATE CODE BY VALUE
        !          12968: {{MOV{#ORVL${R6{{LOAD RETURN BY VALUE WORD
        !          12969: *
        !          12970: *      MERGE HERE TO CONSTRUCT EXBLK
        !          12971: *
        !          12972: {CDGX3{JSR{CDWRD{{{GENERATE RETURN WORD
        !          12973: {{JSR{EXBLD{{{BUILD EXBLK
        !          12974: {{MOV{(SP)+{R8{{RESTORE WC
        !          12975: {{EXI{{{{RETURN TO CDGEX CALLER
        !          12976: {{ENP{{{{END PROCEDURE CDGEX
        !          12977: {{EJC{{{{
        !          12978: *
        !          12979: *      CDGNM -- GENERATE CODE BY NAME
        !          12980: *
        !          12981: *      CDGNM IS CALLED DURING THE COMPILATION PROCESS TO
        !          12982: *      GENERATE CODE BY NAME FOR AN EXPRESSION. SEE CDBLK
        !          12983: *      DESCRIPTION FOR DETAILS OF CODE GENERATED. THE INPUT
        !          12984: *      TO CDGNM IS AN EXPRESSION TREE AS GENERATED BY EXPAN.
        !          12985: *
        !          12986: *      CDGNM IS A RECURSIVE PROCEDURE WHICH PROCEEDS BY MAKING
        !          12987: *      RECURSIVE CALLS TO GENERATE CODE FOR OPERANDS.
        !          12988: *
        !          12989: *      (WB)                  INTEGER IN RANGE 0 LE N LE DNAMB
        !          12990: *      (XR)                  PTR TO TREE GENERATED BY EXPAN
        !          12991: *      (WC)                  CONSTANT FLAG (SEE BELOW)
        !          12992: *      JSR  CDGNM            CALL TO GENERATE CODE BY NAME
        !          12993: *      (XR,WA)               DESTROYED
        !          12994: *      (WC)                  SET NON-ZERO IF NON-CONSTANT
        !          12995: *
        !          12996: *      WC IS SET TO A NON-ZERO (COLLECTABLE) VALUE IF THE
        !          12997: *      EXPRESSION FOR WHICH CODE IS GENERATED CANNOT BE
        !          12998: *      EVALUATED AT COMPILE TIME, OTHERWISE WC IS UNCHANGED.
        !          12999: *
        !          13000: *      THE CODE IS GENERATED IN THE CURRENT CCBLK (SEE CDWRD).
        !          13001: *
        !          13002: {CDGNM{PRC{R{0{{ENTRY POINT, RECURSIVE
        !          13003: {{MOV{R10{-(SP){{SAVE ENTRY XL
        !          13004: {{MOV{R7{-(SP){{SAVE ENTRY WB
        !          13005: {{CHK{{{{CHECK FOR STACK OVERFLOW
        !          13006: {{MOV{(R9){R6{{LOAD TYPE WORD
        !          13007: {{BEQ{R6{#B$CMT{CGN04{JUMP IF CMBLK
        !          13008: {{BHI{R6{#B$VR${CGN02{JUMP IF SIMPLE VARIABLE
        !          13009: *
        !          13010: *      MERGE HERE FOR OPERAND YIELDING VALUE (E.G. CONSTANT)
        !          13011: *
        !          13012: {CGN01{ERB{212{SYNTAX{{ERROR. VALUE USED WHERE NAME IS REQUIRED
        !          13013: *
        !          13014: *      HERE FOR NATURAL VARIABLE REFERENCE
        !          13015: *
        !          13016: {CGN02{MOV{#OLVN${R6{{LOAD VARIABLE LOAD CALL
        !          13017: {{JSR{CDWRD{{{GENERATE IT
        !          13018: {{MOV{R9{R6{{COPY VRBLK POINTER
        !          13019: {{JSR{CDWRD{{{GENERATE VRBLK POINTER
        !          13020: {{EJC{{{{
        !          13021: *
        !          13022: *      CDGNM (CONTINUED)
        !          13023: *
        !          13024: *      HERE TO EXIT WITH WC SET CORRECTLY
        !          13025: *
        !          13026: {CGN03{MOV{(SP)+{R7{{RESTORE ENTRY WB
        !          13027: {{MOV{(SP)+{R10{{RESTORE ENTRY XL
        !          13028: {{EXI{{{{RETURN TO CDGNM CALLER
        !          13029: *
        !          13030: *      HERE FOR CMBLK
        !          13031: *
        !          13032: {CGN04{MOV{R9{R10{{COPY CMBLK POINTER
        !          13033: {{MOV{4*CMTYP(R9){R9{{LOAD CMBLK TYPE
        !          13034: {{BGE{R9{#C$$NM{CGN01{ERROR IF NOT NAME OPERAND
        !          13035: {{BSW{R9{C$$NM{{ELSE SWITCH ON TYPE
        !          13036: {{IFF{C$ARR{CGN05{{ARRAY REFERENCE
        !          13037: {{IFF{C$FNC{CGN08{{FUNCTION CALL
        !          13038: {{IFF{C$DEF{CGN09{{DEFERRED EXPRESSION
        !          13039: {{IFF{C$IND{CGN10{{INDIRECT REFERENCE
        !          13040: {{IFF{C$KEY{CGN11{{KEYWORD REFERENCE
        !          13041: {{IFF{C$UBO{CGN08{{UNDEFINED BINARY OP
        !          13042: {{IFF{C$UUO{CGN08{{UNDEFINED UNARY OP
        !          13043: {{ESW{{{{END SWITCH ON CMBLK TYPE
        !          13044: *
        !          13045: *      HERE TO GENERATE CODE FOR ARRAY REFERENCE
        !          13046: *
        !          13047: {CGN05{MOV{#4*CMOPN{R7{{POINT TO ARRAY OPERAND
        !          13048: *
        !          13049: *      LOOP TO GENERATE CODE FOR ARRAY OPERAND AND SUBSCRIPTS
        !          13050: *
        !          13051: {CGN06{JSR{CMGEN{{{GENERATE CODE FOR NEXT OPERAND
        !          13052: {{MOV{4*CMLEN(R10){R8{{LOAD LENGTH OF CMBLK
        !          13053: {{BLT{R7{R8{CGN06{LOOP TILL ALL GENERATED
        !          13054: *
        !          13055: *      GENERATE APPROPRIATE ARRAY CALL
        !          13056: *
        !          13057: {{MOV{#OAON${R6{{LOAD ONE-SUBSCRIPT CASE CALL
        !          13058: {{BEQ{R8{#4*CMAR1{CGN07{JUMP TO EXIT IF ONE SUBSCRIPT CASE
        !          13059: {{MOV{#OAMN${R6{{ELSE LOAD MULTI-SUBSCRIPT CASE CALL
        !          13060: {{JSR{CDWRD{{{GENERATE CALL
        !          13061: {{MOV{R8{R6{{COPY CMBLK LENGTH
        !          13062: {{BTW{R6{{{CONVERT TO WORDS
        !          13063: {{SUB{#CMVLS{R6{{CALCULATE NUMBER OF SUBSCRIPTS
        !          13064: {{EJC{{{{
        !          13065: *
        !          13066: *      CDGNM (CONTINUED)
        !          13067: *
        !          13068: *      HERE TO EXIT GENERATING WORD (NON-CONSTANT)
        !          13069: *
        !          13070: {CGN07{MNZ{R8{{{SET RESULT NON-CONSTANT
        !          13071: {{JSR{CDWRD{{{GENERATE WORD
        !          13072: {{BRN{CGN03{{{BACK TO EXIT
        !          13073: *
        !          13074: *      HERE TO GENERATE CODE FOR FUNCTIONS AND UNDEFINED OPRS
        !          13075: *
        !          13076: {CGN08{MOV{R10{R9{{COPY CMBLK POINTER
        !          13077: {{JSR{CDGVL{{{GEN CODE BY VALUE FOR CALL
        !          13078: {{MOV{#OFNE${R6{{GET EXTRA CALL FOR BY NAME
        !          13079: {{BRN{CGN07{{{BACK TO GENERATE AND EXIT
        !          13080: *
        !          13081: *      HERE TO GENERATE CODE FOR DEFERED EXPRESSION
        !          13082: *
        !          13083: {CGN09{MOV{4*CMROP(R10){R9{{CHECK IF VARIABLE
        !          13084: {{BHI{(R9){#B$VR${CGN02{TREAT *VARIABLE AS SIMPLE VAR
        !          13085: {{MOV{R9{R10{{COPY PTR TO EXPRESSION TREE
        !          13086: {{JSR{CDGEX{{{ELSE BUILD EXBLK
        !          13087: {{MOV{#OLEX${R6{{SET CALL TO LOAD EXPR BY NAME
        !          13088: {{JSR{CDWRD{{{GENERATE IT
        !          13089: {{MOV{R9{R6{{COPY EXBLK POINTER
        !          13090: {{JSR{CDWRD{{{GENERATE EXBLK POINTER
        !          13091: {{BRN{CGN03{{{BACK TO EXIT
        !          13092: *
        !          13093: *      HERE TO GENERATE CODE FOR INDIRECT REFERENCE
        !          13094: *
        !          13095: {CGN10{MOV{4*CMROP(R10){R9{{GET OPERAND
        !          13096: {{JSR{CDGVL{{{GENERATE CODE BY VALUE FOR IT
        !          13097: {{MOV{#OINN${R6{{LOAD CALL FOR INDIRECT BY NAME
        !          13098: {{BRN{CGN12{{{MERGE
        !          13099: *
        !          13100: *      HERE TO GENERATE CODE FOR KEYWORD REFERENCE
        !          13101: *
        !          13102: {CGN11{MOV{4*CMROP(R10){R9{{GET OPERAND
        !          13103: {{JSR{CDGNM{{{GENERATE CODE BY NAME FOR IT
        !          13104: {{MOV{#OKWN${R6{{LOAD CALL FOR KEYWORD BY NAME
        !          13105: *
        !          13106: *      KEYWORD, INDIRECT MERGE HERE
        !          13107: *
        !          13108: {CGN12{JSR{CDWRD{{{GENERATE CODE FOR OPERATOR
        !          13109: {{BRN{CGN03{{{EXIT
        !          13110: {{ENP{{{{END PROCEDURE CDGNM
        !          13111: {{EJC{{{{
        !          13112: *
        !          13113: *      CDGVL -- GENERATE CODE BY VALUE
        !          13114: *
        !          13115: *      CDGVL IS CALLED DURING THE COMPILATION PROCESS TO
        !          13116: *      GENERATE CODE BY VALUE FOR AN EXPRESSION. SEE CDBLK
        !          13117: *      DESCRIPTION FOR DETAILS OF THE CODE GENERATED. THE INPUT
        !          13118: *      TO CDGVL IS AN EXPRESSION TREE AS GENERATED BY EXPAN.
        !          13119: *
        !          13120: *      CDGVL IS A RECURSIVE PROCEDURE WHICH PROCEEDS BY MAKING
        !          13121: *      RECURSIVE CALLS TO GENERATE CODE FOR OPERANDS.
        !          13122: *
        !          13123: *      (WB)                  INTEGER IN RANGE 0 LE N LE DNAMB
        !          13124: *      (XR)                  PTR TO TREE GENERATED BY EXPAN
        !          13125: *      (WC)                  CONSTANT FLAG (SEE BELOW)
        !          13126: *      JSR  CDGVL            CALL TO GENERATE CODE BY VALUE
        !          13127: *      (XR,WA)               DESTROYED
        !          13128: *      (WC)                  SET NON-ZERO IF NON-CONSTANT
        !          13129: *
        !          13130: *      WC IS SET TO A NON-ZERO (COLLECTABLE) VALUE IF THE
        !          13131: *      EXPRESSION FOR WHICH CODE IS GENERATED CANNOT BE
        !          13132: *      EVALUATED AT COMPILE TIME, OTHERWISE WC IS UNCHANGED.
        !          13133: *
        !          13134: *      IF WC IS NON-ZERO ON ENTRY, THEN PREEVALUATION IS NOT
        !          13135: *      ALLOWED REGARDLESS OF THE NATURE OF THE OPERAND.
        !          13136: *
        !          13137: *      THE CODE IS GENERATED IN THE CURRENT CCBLK (SEE CDWRD).
        !          13138: *
        !          13139: {CDGVL{PRC{R{0{{ENTRY POINT, RECURSIVE
        !          13140: {{MOV{(R9){R6{{LOAD TYPE WORD
        !          13141: {{BEQ{R6{#B$CMT{CGV01{JUMP IF CMBLK
        !          13142: {{BLT{R6{#B$VRA{CGV00{JUMP IF ICBLK, RCBLK, SCBLK
        !          13143: {{BNZ{4*VRLEN(R9){CGVL0{{JUMP IF NOT SYSTEM VARIABLE
        !          13144: {{MOV{R9{-(SP){{STACK XR
        !          13145: {{MOV{4*VRSVP(R9){R9{{POINT TO SVBLK
        !          13146: {{MOV{4*SVBIT(R9){R6{{GET SVBLK PROPERTY BITS
        !          13147: {{MOV{(SP)+{R9{{RECOVER XR
        !          13148: {{ANB{BTCKW{R6{{CHECK IF CONSTANT KEYWORD
        !          13149: {{NZB{R6{CGV00{{JUMP IF CONSTANT KEYWORD
        !          13150: *
        !          13151: *      HERE FOR VARIABLE VALUE REFERENCE
        !          13152: *
        !          13153: {CGVL0{MNZ{R8{{{INDICATE NON-CONSTANT VALUE
        !          13154: *
        !          13155: *      MERGE HERE FOR SIMPLE CONSTANT (ICBLK,RCBLK,SCBLK)
        !          13156: *      AND FOR VARIABLES CORRESPONDING TO CONSTANT KEYWORDS.
        !          13157: *
        !          13158: {CGV00{MOV{R9{R6{{COPY PTR TO VAR OR CONSTANT
        !          13159: {{JSR{CDWRD{{{GENERATE AS CODE WORD
        !          13160: {{EXI{{{{RETURN TO CALLER
        !          13161: {{EJC{{{{
        !          13162: *
        !          13163: *      CDGVL (CONTINUED)
        !          13164: *
        !          13165: *      HERE FOR TREE NODE (CMBLK)
        !          13166: *
        !          13167: {CGV01{MOV{R7{-(SP){{SAVE ENTRY WB
        !          13168: {{MOV{R10{-(SP){{SAVE ENTRY XL
        !          13169: {{MOV{R8{-(SP){{SAVE ENTRY CONSTANT FLAG
        !          13170: {{MOV{CWCOF{-(SP){{SAVE INITIAL CODE OFFSET
        !          13171: {{CHK{{{{CHECK FOR STACK OVERFLOW
        !          13172: *
        !          13173: *      PREPARE TO GENERATE CODE FOR CMBLK. WC IS SET TO THE
        !          13174: *      VALUE OF CSWNO (ZERO IF -OPTIMISE, 1 IF -NOOPT) TO
        !          13175: *      START WITH AND IS RESET NON-ZERO FOR ANY NON-CONSTANT
        !          13176: *      CODE GENERATED. IF IT IS STILL ZERO AFTER GENERATING ALL
        !          13177: *      THE CMBLK CODE, THEN ITS VALUE IS COMPUTED AS THE RESULT.
        !          13178: *
        !          13179: {{MOV{R9{R10{{COPY CMBLK POINTER
        !          13180: {{MOV{4*CMTYP(R9){R9{{LOAD CMBLK TYPE
        !          13181: {{MOV{CSWNO{R8{{RESET CONSTANT FLAG
        !          13182: {{BLE{R9{#C$PR${CGV02{JUMP IF NOT PREDICATE VALUE
        !          13183: {{MNZ{R8{{{ELSE FORCE NON-CONSTANT CASE
        !          13184: *
        !          13185: *      HERE WITH WC SET APPROPRIATELY
        !          13186: *
        !          13187: {CGV02{BSW{R9{C$$NV{{SWITCH TO APPROPRIATE GENERATOR
        !          13188: {{IFF{C$ARR{CGV03{{ARRAY REFERENCE
        !          13189: {{IFF{C$FNC{CGV05{{FUNCTION CALL
        !          13190: {{IFF{C$DEF{CGV14{{DEFERRED EXPRESSION
        !          13191: {{IFF{C$IND{CGV31{{INDIRECT REFERENCE
        !          13192: {{IFF{C$KEY{CGV27{{KEYWORD REFERENCE
        !          13193: {{IFF{C$UBO{CGV29{{UNDEFINED BINOP
        !          13194: {{IFF{C$UUO{CGV30{{UNDEFINED UNOP
        !          13195: {{IFF{C$BVL{CGV18{{BINOPS WITH VAL OPDS
        !          13196: {{IFF{C$UVL{CGV19{{UNOPS WITH VALU OPND
        !          13197: {{IFF{C$ALT{CGV18{{ALTERNATION
        !          13198: {{IFF{C$CNC{CGV24{{CONCATENATION
        !          13199: {{IFF{C$CNP{CGV24{{CONCATENATION (NOT PATTERN MATCH)
        !          13200: {{IFF{C$UNM{CGV27{{UNOPS WITH NAME OPND
        !          13201: {{IFF{C$BVN{CGV26{{BINARY $ AND .
        !          13202: {{IFF{C$ASS{CGV21{{ASSIGNMENT
        !          13203: {{IFF{C$INT{CGV31{{INTERROGATION
        !          13204: {{IFF{C$NEG{CGV28{{NEGATION
        !          13205: {{IFF{C$SEL{CGV15{{SELECTION
        !          13206: {{IFF{C$PMT{CGV18{{PATTERN MATCH
        !          13207: {{ESW{{{{END SWITCH ON CMBLK TYPE
        !          13208: {{EJC{{{{
        !          13209: *
        !          13210: *      CDGVL (CONTINUED)
        !          13211: *
        !          13212: *      HERE TO GENERATE CODE FOR ARRAY REFERENCE
        !          13213: *
        !          13214: {CGV03{MOV{#4*CMOPN{R7{{SET OFFSET TO ARRAY OPERAND
        !          13215: *
        !          13216: *      LOOP TO GENERATE CODE FOR ARRAY OPERAND AND SUBSCRIPTS
        !          13217: *
        !          13218: {CGV04{JSR{CMGEN{{{GEN VALUE CODE FOR NEXT OPERAND
        !          13219: {{MOV{4*CMLEN(R10){R8{{LOAD CMBLK LENGTH
        !          13220: {{BLT{R7{R8{CGV04{LOOP BACK IF MORE TO GO
        !          13221: *
        !          13222: *      GENERATE CALL TO APPROPRIATE ARRAY REFERENCE ROUTINE
        !          13223: *
        !          13224: {{MOV{#OAOV${R6{{SET ONE SUBSCRIPT CALL IN CASE
        !          13225: {{BEQ{R8{#4*CMAR1{CGV32{JUMP TO EXIT IF 1-SUB CASE
        !          13226: {{MOV{#OAMV${R6{{ELSE SET CALL FOR MULTI-SUBSCRIPTS
        !          13227: {{JSR{CDWRD{{{GENERATE CALL
        !          13228: {{MOV{R8{R6{{COPY LENGTH OF CMBLK
        !          13229: {{SUB{#4*CMVLS{R6{{SUBTRACT STANDARD LENGTH
        !          13230: {{BTW{R6{{{GET NUMBER OF WORDS
        !          13231: {{BRN{CGV32{{{JUMP TO GENERATE SUBSCRIPT COUNT
        !          13232: *
        !          13233: *      HERE TO GENERATE CODE FOR FUNCTION CALL
        !          13234: *
        !          13235: {CGV05{MOV{#4*CMVLS{R7{{SET OFFSET TO FIRST ARGUMENT
        !          13236: *
        !          13237: *      LOOP TO GENERATE CODE FOR ARGUMENTS
        !          13238: *
        !          13239: {CGV06{BEQ{R7{4*CMLEN(R10){CGV07{JUMP IF ALL GENERATED
        !          13240: {{JSR{CMGEN{{{ELSE GEN VALUE CODE FOR NEXT ARG
        !          13241: {{BRN{CGV06{{{BACK TO GENERATE NEXT ARGUMENT
        !          13242: *
        !          13243: *      HERE TO GENERATE ACTUAL FUNCTION CALL
        !          13244: *
        !          13245: {CGV07{SUB{#4*CMVLS{R7{{GET NUMBER OF ARG PTRS (BYTES)
        !          13246: {{BTW{R7{{{CONVERT BYTES TO WORDS
        !          13247: {{MOV{4*CMOPN(R10){R9{{LOAD FUNCTION VRBLK POINTER
        !          13248: {{BNZ{4*VRLEN(R9){CGV12{{JUMP IF NOT SYSTEM FUNCTION
        !          13249: {{MOV{4*VRSVP(R9){R10{{LOAD SVBLK PTR IF SYSTEM VAR
        !          13250: {{MOV{4*SVBIT(R10){R6{{LOAD BIT MASK
        !          13251: {{ANB{BTFFC{R6{{TEST FOR FAST FUNCTION CALL ALLOWED
        !          13252: {{ZRB{R6{CGV12{{JUMP IF NOT
        !          13253: {{EJC{{{{
        !          13254: *
        !          13255: *      CDGVL (CONTINUED)
        !          13256: *
        !          13257: *      HERE IF FAST FUNCTION CALL IS ALLOWED
        !          13258: *
        !          13259: {{MOV{4*SVBIT(R10){R6{{RELOAD BIT INDICATORS
        !          13260: {{ANB{BTPRE{R6{{TEST FOR PREEVALUATION OK
        !          13261: {{NZB{R6{CGV08{{JUMP IF PREEVALUATION PERMITTED
        !          13262: {{MNZ{R8{{{ELSE SET RESULT NON-CONSTANT
        !          13263: *
        !          13264: *      TEST FOR CORRECT NUMBER OF ARGS FOR FAST CALL
        !          13265: *
        !          13266: {CGV08{MOV{4*VRFNC(R9){R10{{LOAD PTR TO SVFNC FIELD
        !          13267: {{MOV{4*FARGS(R10){R6{{LOAD SVNAR FIELD VALUE
        !          13268: {{BEQ{R6{R7{CGV11{JUMP IF ARGUMENT COUNT IS CORRECT
        !          13269: {{BHI{R6{R7{CGV09{JUMP IF TOO FEW ARGUMENTS GIVEN
        !          13270: *
        !          13271: *      HERE IF TOO MANY ARGUMENTS, PREPARE TO GENERATE O$POPS
        !          13272: *
        !          13273: {{SUB{R6{R7{{GET NUMBER OF EXTRA ARGS
        !          13274: {{LCT{R7{R7{{SET AS COUNT TO CONTROL LOOP
        !          13275: {{MOV{#OPOP${R6{{SET POP CALL
        !          13276: {{BRN{CGV10{{{JUMP TO COMMON LOOP
        !          13277: *
        !          13278: *      HERE IF TOO FEW ARGUMENTS, PREPARE TO GENERATE NULLS
        !          13279: *
        !          13280: {CGV09{SUB{R7{R6{{GET NUMBER OF MISSING ARGUMENTS
        !          13281: {{LCT{R7{R6{{LOAD AS COUNT TO CONTROL LOOP
        !          13282: {{MOV{#NULLS{R6{{LOAD PTR TO NULL CONSTANT
        !          13283: *
        !          13284: *      LOOP TO GENERATE CALLS TO FIX ARGUMENT COUNT
        !          13285: *
        !          13286: {CGV10{JSR{CDWRD{{{GENERATE ONE CALL
        !          13287: {{BCT{R7{CGV10{{LOOP TILL ALL GENERATED
        !          13288: *
        !          13289: *      HERE AFTER ADJUSTING ARG COUNT AS REQUIRED
        !          13290: *
        !          13291: {CGV11{MOV{R10{R6{{COPY POINTER TO SVFNC FIELD
        !          13292: {{BRN{CGV36{{{JUMP TO GENERATE CALL
        !          13293: {{EJC{{{{
        !          13294: *
        !          13295: *      CDGVL (CONTINUED)
        !          13296: *
        !          13297: *      COME HERE IF FAST CALL IS NOT PERMITTED
        !          13298: *
        !          13299: {CGV12{MOV{#OFNS${R6{{SET ONE ARG CALL IN CASE
        !          13300: {{BEQ{R7{#NUM01{CGV13{JUMP IF ONE ARG CASE
        !          13301: {{MOV{#OFNC${R6{{ELSE LOAD CALL FOR MORE THAN 1 ARG
        !          13302: {{JSR{CDWRD{{{GENERATE IT
        !          13303: {{MOV{R7{R6{{COPY ARGUMENT COUNT
        !          13304: *
        !          13305: *      ONE ARG CASE MERGES HERE
        !          13306: *
        !          13307: {CGV13{JSR{CDWRD{{{GENERATE =O$FNS OR ARG COUNT
        !          13308: {{MOV{R9{R6{{COPY VRBLK POINTER
        !          13309: {{BRN{CGV32{{{JUMP TO GENERATE VRBLK PTR
        !          13310: *
        !          13311: *      HERE FOR DEFERRED EXPRESSION
        !          13312: *
        !          13313: {CGV14{MOV{4*CMROP(R10){R10{{POINT TO EXPRESSION TREE
        !          13314: {{JSR{CDGEX{{{BUILD EXBLK OR SEBLK
        !          13315: {{MOV{R9{R6{{COPY BLOCK PTR
        !          13316: {{JSR{CDWRD{{{GENERATE PTR TO EXBLK OR SEBLK
        !          13317: {{BRN{CGV34{{{JUMP TO EXIT, CONSTANT TEST
        !          13318: *
        !          13319: *      HERE TO GENERATE CODE FOR SELECTION
        !          13320: *
        !          13321: {CGV15{ZER{-(SP){{{ZERO PTR TO CHAIN OF FORWARD JUMPS
        !          13322: {{ZER{-(SP){{{ZERO PTR TO PREV O$SLC FORWARD PTR
        !          13323: {{MOV{#4*CMVLS{R7{{POINT TO FIRST ALTERNATIVE
        !          13324: {{MOV{#OSLA${R6{{SET INITIAL CODE WORD
        !          13325: *
        !          13326: *      0(XS)                 IS THE OFFSET TO THE PREVIOUS WORD
        !          13327: *                            WHICH REQUIRES FILLING IN WITH AN
        !          13328: *                            OFFSET TO THE FOLLOWING O$SLC,O$SLD
        !          13329: *
        !          13330: *      1(XS)                 IS THE HEAD OF A CHAIN OF OFFSET
        !          13331: *                            POINTERS INDICATING THOSE LOCATIONS
        !          13332: *                            TO BE FILLED WITH OFFSETS PAST
        !          13333: *                            THE END OF ALL THE ALTERNATIVES
        !          13334: *
        !          13335: {CGV16{JSR{CDWRD{{{GENERATE O$SLC (O$SLA FIRST TIME)
        !          13336: {{MOV{CWCOF{(SP){{SET CURRENT LOC AS PTR TO FILL IN
        !          13337: {{JSR{CDWRD{{{GENERATE GARBAGE WORD THERE FOR NOW
        !          13338: {{JSR{CMGEN{{{GEN VALUE CODE FOR ALTERNATIVE
        !          13339: {{MOV{#OSLB${R6{{LOAD O$SLB POINTER
        !          13340: {{JSR{CDWRD{{{GENERATE O$SLB CALL
        !          13341: {{MOV{4*1(SP){R6{{LOAD OLD CHAIN PTR
        !          13342: {{MOV{CWCOF{4*1(SP){{SET CURRENT LOC AS NEW CHAIN HEAD
        !          13343: {{JSR{CDWRD{{{GENERATE FORWARD CHAIN LINK
        !          13344: {{EJC{{{{
        !          13345: *
        !          13346: *      CDGVL (CONTINUED)
        !          13347: *
        !          13348: *      NOW TO FILL IN THE SKIP OFFSET TO O$SLC,O$SLD
        !          13349: *
        !          13350: {{MOV{(SP){R9{{LOAD OFFSET TO WORD TO PLUG
        !          13351: {{ADD{R$CCB{R9{{POINT TO ACTUAL LOCATION TO PLUG
        !          13352: {{MOV{CWCOF{(R9){{PLUG PROPER OFFSET IN
        !          13353: {{MOV{#OSLC${R6{{LOAD O$SLC PTR FOR NEXT ALTERNATIVE
        !          13354: {{MOV{R7{R9{{COPY OFFSET (DESTROY GARBAGE XR)
        !          13355: {{ICA{R9{{{BUMP EXTRA TIME FOR TEST
        !          13356: {{BLT{R9{4*CMLEN(R10){CGV16{LOOP BACK IF NOT LAST ALTERNATIVE
        !          13357: *
        !          13358: *      HERE TO GENERATE CODE FOR LAST ALTERNATIVE
        !          13359: *
        !          13360: {{MOV{#OSLD${R6{{GET HEADER CALL
        !          13361: {{JSR{CDWRD{{{GENERATE O$SLD CALL
        !          13362: {{JSR{CMGEN{{{GENERATE CODE FOR LAST ALTERNATIVE
        !          13363: {{ICA{SP{{{POP OFFSET PTR
        !          13364: {{MOV{(SP)+{R9{{LOAD CHAIN PTR
        !          13365: *
        !          13366: *      LOOP TO PLUG OFFSETS PAST STRUCTURE
        !          13367: *
        !          13368: {CGV17{ADD{R$CCB{R9{{MAKE NEXT PTR ABSOLUTE
        !          13369: {{MOV{(R9){R6{{LOAD FORWARD PTR
        !          13370: {{MOV{CWCOF{(R9){{PLUG REQUIRED OFFSET
        !          13371: {{MOV{R6{R9{{COPY FORWARD PTR
        !          13372: {{BNZ{R6{CGV17{{LOOP BACK IF MORE TO GO
        !          13373: {{BRN{CGV33{{{ELSE JUMP TO EXIT (NOT CONSTANT)
        !          13374: *
        !          13375: *      HERE FOR BINARY OPS WITH VALUE OPERANDS
        !          13376: *
        !          13377: {CGV18{MOV{4*CMLOP(R10){R9{{LOAD LEFT OPERAND POINTER
        !          13378: {{JSR{CDGVL{{{GEN VALUE CODE FOR LEFT OPERAND
        !          13379: *
        !          13380: *      HERE FOR UNARY OPS WITH VALUE OPERAND (BINOPS MERGE)
        !          13381: *
        !          13382: {CGV19{MOV{4*CMROP(R10){R9{{LOAD RIGHT (ONLY) OPERAND PTR
        !          13383: {{JSR{CDGVL{{{GEN CODE BY VALUE
        !          13384: {{EJC{{{{
        !          13385: *
        !          13386: *      CDGVL (CONTINUED)
        !          13387: *
        !          13388: *      MERGE HERE TO GENERATE OPERATOR CALL FROM CMOPN FIELD
        !          13389: *
        !          13390: {CGV20{MOV{4*CMOPN(R10){R6{{LOAD OPERATOR CALL POINTER
        !          13391: {{BRN{CGV36{{{JUMP TO GENERATE IT WITH CONS TEST
        !          13392: *
        !          13393: *      HERE FOR ASSIGNMENT
        !          13394: *
        !          13395: {CGV21{MOV{4*CMLOP(R10){R9{{LOAD LEFT OPERAND POINTER
        !          13396: {{BLO{(R9){#B$VR${CGV22{JUMP IF NOT VARIABLE
        !          13397: *
        !          13398: *      HERE FOR ASSIGNMENT TO SIMPLE VARIABLE
        !          13399: *
        !          13400: {{MOV{4*CMROP(R10){R9{{LOAD RIGHT OPERAND PTR
        !          13401: {{JSR{CDGVL{{{GENERATE CODE BY VALUE
        !          13402: {{MOV{4*CMLOP(R10){R6{{RELOAD LEFT OPERAND VRBLK PTR
        !          13403: {{ADD{#4*VRSTO{R6{{POINT TO VRSTO FIELD
        !          13404: {{BRN{CGV32{{{JUMP TO GENERATE STORE PTR
        !          13405: *
        !          13406: *      HERE IF NOT SIMPLE VARIABLE ASSIGNMENT
        !          13407: *
        !          13408: {CGV22{JSR{EXPAP{{{TEST FOR PATTERN MATCH ON LEFT SIDE
        !          13409: {{PPM{CGV23{{{JUMP IF NOT PATTERN MATCH
        !          13410: *
        !          13411: *      HERE FOR PATTERN REPLACEMENT
        !          13412: *
        !          13413: {{MOV{4*CMROP(R9){4*CMLOP(R10){{SAVE PATTERN PTR IN SAFE PLACE
        !          13414: {{MOV{4*CMLOP(R9){R9{{LOAD SUBJECT PTR
        !          13415: {{JSR{CDGNM{{{GEN CODE BY NAME FOR SUBJECT
        !          13416: {{MOV{4*CMLOP(R10){R9{{LOAD PATTERN PTR
        !          13417: {{JSR{CDGVL{{{GEN CODE BY VALUE FOR PATTERN
        !          13418: {{MOV{#OPMN${R6{{LOAD MATCH BY NAME CALL
        !          13419: {{JSR{CDWRD{{{GENERATE IT
        !          13420: {{MOV{4*CMROP(R10){R9{{LOAD REPLACEMENT VALUE PTR
        !          13421: {{JSR{CDGVL{{{GEN CODE BY VALUE
        !          13422: {{MOV{#ORPL${R6{{LOAD REPLACE CALL
        !          13423: {{BRN{CGV32{{{JUMP TO GEN AND EXIT (NOT CONSTANT)
        !          13424: *
        !          13425: *      HERE FOR ASSIGNMENT TO COMPLEX VARIABLE
        !          13426: *
        !          13427: {CGV23{MNZ{R8{{{INHIBIT PRE-EVALUATION
        !          13428: {{JSR{CDGNM{{{GEN CODE BY NAME FOR LEFT SIDE
        !          13429: {{BRN{CGV31{{{MERGE WITH UNOP CIRCUIT
        !          13430: {{EJC{{{{
        !          13431: *
        !          13432: *      CDGVL (CONTINUED)
        !          13433: *
        !          13434: *      HERE FOR CONCATENATION
        !          13435: *
        !          13436: {CGV24{MOV{4*CMLOP(R10){R9{{LOAD LEFT OPERAND PTR
        !          13437: {{BNE{(R9){#B$CMT{CGV18{ORDINARY BINOP IF NOT CMBLK
        !          13438: {{MOV{4*CMTYP(R9){R7{{LOAD CMBLK TYPE CODE
        !          13439: {{BEQ{R7{#C$INT{CGV25{SPECIAL CASE IF INTERROGATION
        !          13440: {{BEQ{R7{#C$NEG{CGV25{OR NEGATION
        !          13441: {{BNE{R7{#C$FNC{CGV18{ELSE ORDINARY BINOP IF NOT FUNCTION
        !          13442: {{MOV{4*CMOPN(R9){R9{{ELSE LOAD FUNCTION VRBLK PTR
        !          13443: {{BNZ{4*VRLEN(R9){CGV18{{ORDINARY BINOP IF NOT SYSTEM VAR
        !          13444: {{MOV{4*VRSVP(R9){R9{{ELSE POINT TO SVBLK
        !          13445: {{MOV{4*SVBIT(R9){R6{{LOAD BIT INDICATORS
        !          13446: {{ANB{BTPRD{R6{{TEST FOR PREDICATE FUNCTION
        !          13447: {{ZRB{R6{CGV18{{ORDINARY BINOP IF NOT
        !          13448: *
        !          13449: *      HERE IF LEFT ARG OF CONCATENATION IS PREDICATE FUNCTION
        !          13450: *
        !          13451: {CGV25{MOV{4*CMLOP(R10){R9{{RELOAD LEFT ARG
        !          13452: {{JSR{CDGVL{{{GEN CODE BY VALUE
        !          13453: {{MOV{#OPOP${R6{{LOAD POP CALL
        !          13454: {{JSR{CDWRD{{{GENERATE IT
        !          13455: {{MOV{4*CMROP(R10){R9{{LOAD RIGHT OPERAND
        !          13456: {{JSR{CDGVL{{{GEN CODE BY VALUE AS RESULT CODE
        !          13457: {{BRN{CGV33{{{EXIT (NOT CONSTANT)
        !          13458: *
        !          13459: *      HERE TO GENERATE CODE FOR PATTERN, IMMEDIATE ASSIGNMENT
        !          13460: *
        !          13461: {CGV26{MOV{4*CMLOP(R10){R9{{LOAD LEFT OPERAND
        !          13462: {{JSR{CDGVL{{{GEN CODE BY VALUE, MERGE
        !          13463: *
        !          13464: *      HERE FOR UNOPS WITH ARG BY NAME (BINARY $ . MERGE)
        !          13465: *
        !          13466: {CGV27{MOV{4*CMROP(R10){R9{{LOAD RIGHT OPERAND PTR
        !          13467: {{JSR{CDGNM{{{GEN CODE BY NAME FOR RIGHT ARG
        !          13468: {{MOV{4*CMOPN(R10){R9{{GET OPERATOR CODE WORD
        !          13469: {{BNE{(R9){#O$KWV{CGV20{GEN CALL UNLESS KEYWORD VALUE
        !          13470: {{EJC{{{{
        !          13471: *
        !          13472: *      CDGVL (CONTINUED)
        !          13473: *
        !          13474: *      HERE FOR KEYWORD BY VALUE. THIS IS CONSTANT ONLY IF
        !          13475: *      THE OPERAND IS ONE OF THE SPECIAL SYSTEM VARIABLES WITH
        !          13476: *      THE SVCKW BIT SET TO INDICATE A CONSTANT KEYWORD VALUE.
        !          13477: *      NOTE THAT THE ONLY CONSTANT OPERAND BY NAME IS A VARIABLE
        !          13478: *
        !          13479: {{BNZ{R8{CGV20{{GEN CALL IF NON-CONSTANT (NOT VAR)
        !          13480: {{MNZ{R8{{{ELSE SET NON-CONSTANT IN CASE
        !          13481: {{MOV{4*CMROP(R10){R9{{LOAD PTR TO OPERAND VRBLK
        !          13482: {{BNZ{4*VRLEN(R9){CGV20{{GEN (NON-CONSTANT) IF NOT SYS VAR
        !          13483: {{MOV{4*VRSVP(R9){R9{{ELSE LOAD PTR TO SVBLK
        !          13484: {{MOV{4*SVBIT(R9){R6{{LOAD BIT MASK
        !          13485: {{ANB{BTCKW{R6{{TEST FOR CONSTANT KEYWORD
        !          13486: {{ZRB{R6{CGV20{{GO GEN IF NOT CONSTANT
        !          13487: {{ZER{R8{{{ELSE SET RESULT CONSTANT
        !          13488: {{BRN{CGV20{{{AND JUMP BACK TO GENERATE CALL
        !          13489: *
        !          13490: *      HERE TO GENERATE CODE FOR NEGATION
        !          13491: *
        !          13492: {CGV28{MOV{#ONTA${R6{{GET INITIAL WORD
        !          13493: {{JSR{CDWRD{{{GENERATE IT
        !          13494: {{MOV{CWCOF{R7{{SAVE NEXT OFFSET
        !          13495: {{JSR{CDWRD{{{GENERATE GUNK WORD FOR NOW
        !          13496: {{MOV{4*CMROP(R10){R9{{LOAD RIGHT OPERAND PTR
        !          13497: {{JSR{CDGVL{{{GEN CODE BY VALUE
        !          13498: {{MOV{#ONTB${R6{{LOAD END OF EVALUATION CALL
        !          13499: {{JSR{CDWRD{{{GENERATE IT
        !          13500: {{MOV{R7{R9{{COPY OFFSET TO WORD TO PLUG
        !          13501: {{ADD{R$CCB{R9{{POINT TO ACTUAL WORD TO PLUG
        !          13502: {{MOV{CWCOF{(R9){{PLUG WORD WITH CURRENT OFFSET
        !          13503: {{MOV{#ONTC${R6{{LOAD FINAL CALL
        !          13504: {{BRN{CGV32{{{JUMP TO GENERATE IT (NOT CONSTANT)
        !          13505: *
        !          13506: *      HERE TO GENERATE CODE FOR UNDEFINED BINARY OPERATOR
        !          13507: *
        !          13508: {CGV29{MOV{4*CMLOP(R10){R9{{LOAD LEFT OPERAND PTR
        !          13509: {{JSR{CDGVL{{{GENERATE CODE BY VALUE
        !          13510: {{EJC{{{{
        !          13511: *
        !          13512: *      CDGVL (CONTINUED)
        !          13513: *
        !          13514: *      HERE TO GENERATE CODE FOR UNDEFINED UNARY OPERATOR
        !          13515: *
        !          13516: {CGV30{MOV{#C$UO${R7{{SET UNOP CODE + 1
        !          13517: {{SUB{4*CMTYP(R10){R7{{SET NUMBER OF ARGS (1 OR 2)
        !          13518: *
        !          13519: *      MERGE HERE FOR UNDEFINED OPERATORS
        !          13520: *
        !          13521: {{MOV{4*CMROP(R10){R9{{LOAD RIGHT (ONLY) OPERAND POINTER
        !          13522: {{JSR{CDGVL{{{GEN VALUE CODE FOR RIGHT OPERAND
        !          13523: {{MOV{4*CMOPN(R10){R9{{LOAD POINTER TO OPERATOR DV
        !          13524: {{MOV{4*DVOPN(R9){R9{{LOAD POINTER OFFSET
        !          13525: {{WTB{R9{{{CONVERT WORD OFFSET TO BYTES
        !          13526: {{ADD{#R$UBA{R9{{POINT TO PROPER FUNCTION PTR
        !          13527: {{SUB{#4*VRFNC{R9{{SET STANDARD FUNCTION OFFSET
        !          13528: {{BRN{CGV12{{{MERGE WITH FUNCTION CALL CIRCUIT
        !          13529: *
        !          13530: *      HERE TO GENERATE CODE FOR INTERROGATION, INDIRECTION
        !          13531: *
        !          13532: {CGV31{MNZ{R8{{{SET NON CONSTANT
        !          13533: {{BRN{CGV19{{{MERGE
        !          13534: *
        !          13535: *      HERE TO EXIT GENERATING A WORD, RESULT NOT CONSTANT
        !          13536: *
        !          13537: {CGV32{JSR{CDWRD{{{GENERATE WORD, MERGE
        !          13538: *
        !          13539: *      HERE TO EXIT WITH NO WORD GENERATED, NOT CONSTANT
        !          13540: *
        !          13541: {CGV33{MNZ{R8{{{INDICATE RESULT IS NOT CONSTANT
        !          13542: *
        !          13543: *      COMMON EXIT POINT
        !          13544: *
        !          13545: {CGV34{ICA{SP{{{POP INITIAL CODE OFFSET
        !          13546: {{MOV{(SP)+{R6{{RESTORE OLD CONSTANT FLAG
        !          13547: {{MOV{(SP)+{R10{{RESTORE ENTRY XL
        !          13548: {{MOV{(SP)+{R7{{RESTORE ENTRY WB
        !          13549: {{BNZ{R8{CGV35{{JUMP IF NOT CONSTANT
        !          13550: {{MOV{R6{R8{{ELSE RESTORE ENTRY CONSTANT FLAG
        !          13551: *
        !          13552: *      HERE TO RETURN AFTER DEALING WITH WC SETTING
        !          13553: *
        !          13554: {CGV35{EXI{{{{RETURN TO CDGVL CALLER
        !          13555: *
        !          13556: *      EXIT HERE TO GENERATE WORD AND TEST FOR CONSTANT
        !          13557: *
        !          13558: {CGV36{JSR{CDWRD{{{GENERATE WORD
        !          13559: {{BNZ{R8{CGV34{{JUMP TO EXIT IF NOT CONSTANT
        !          13560: {{EJC{{{{
        !          13561: *
        !          13562: *      CDGVL (CONTINUED)
        !          13563: *
        !          13564: *      HERE TO PREEVALUATE CONSTANT SUB-EXPRESSION
        !          13565: *
        !          13566: {{MOV{#ORVL${R6{{LOAD CALL TO RETURN VALUE
        !          13567: {{JSR{CDWRD{{{GENERATE IT
        !          13568: {{MOV{(SP){R10{{LOAD INITIAL CODE OFFSET
        !          13569: {{JSR{EXBLD{{{BUILD EXBLK FOR EXPRESSION
        !          13570: {{ZER{R7{{{SET TO EVALUATE BY VALUE
        !          13571: {{JSR{EVALX{{{EVALUATE EXPRESSION
        !          13572: {{PPM{{{{SHOULD NOT FAIL
        !          13573: {{MOV{(R9){R6{{LOAD TYPE WORD OF RESULT
        !          13574: {{BLO{R6{#P$AAA{CGV37{JUMP IF NOT PATTERN
        !          13575: {{MOV{#OLPT${R6{{ELSE LOAD SPECIAL PATTERN LOAD CALL
        !          13576: {{JSR{CDWRD{{{GENERATE IT
        !          13577: *
        !          13578: *      MERGE HERE TO GENERATE POINTER TO RESULTING CONSTANT
        !          13579: *
        !          13580: {CGV37{MOV{R9{R6{{COPY CONSTANT POINTER
        !          13581: {{JSR{CDWRD{{{GENERATE PTR
        !          13582: {{ZER{R8{{{SET RESULT CONSTANT
        !          13583: {{BRN{CGV34{{{JUMP BACK TO EXIT
        !          13584: {{ENP{{{{END PROCEDURE CDGVL
        !          13585: {{EJC{{{{
        !          13586: *
        !          13587: *      CDWRD -- GENERATE ONE WORD OF CODE
        !          13588: *
        !          13589: *      CDWRD WRITES ONE WORD INTO THE CURRENT CODE BLOCK UNDER
        !          13590: *      CONSTRUCTION. A NEW, LARGER, BLOCK IS ALLOCATED IF THERE
        !          13591: *      IS INSUFFICIENT ROOM IN THE CURRENT BLOCK. CDWRD ENSURES
        !          13592: *      THAT THERE ARE AT LEAST THREE WORDS LEFT IN THE BLOCK
        !          13593: *      AFTER ENTERING THE NEW WORD. THIS GUARANTEES THAT ANY
        !          13594: *      EXTRA SPACE AT THE END CAN BE SPLIT OFF AS A CCBLK.
        !          13595: *
        !          13596: *      (WA)                  WORD TO BE GENERATED
        !          13597: *      JSR  CDWRD            CALL TO GENERATE WORD
        !          13598: *
        !          13599: {CDWRD{PRC{E{0{{ENTRY POINT
        !          13600: {{MOV{R9{-(SP){{SAVE ENTRY XR
        !          13601: {{MOV{R6{-(SP){{SAVE CODE WORD TO BE GENERATED
        !          13602: *
        !          13603: *      MERGE BACK HERE AFTER ALLOCATING LARGER BLOCK
        !          13604: *
        !          13605: {CDWD1{MOV{R$CCB{R9{{LOAD PTR TO CCBLK BEING BUILT
        !          13606: {{BNZ{R9{CDWD2{{JUMP IF BLOCK ALLOCATED
        !          13607: *
        !          13608: *      HERE WE ALLOCATE AN ENTIRELY FRESH BLOCK
        !          13609: *
        !          13610: {{MOV{#4*E$CBS{R6{{LOAD INITIAL LENGTH
        !          13611: {{JSR{ALLOC{{{ALLOCATE CCBLK
        !          13612: {{MOV{#B$CCT{(R9){{STORE TYPE WORD
        !          13613: {{MOV{#4*CCCOD{CWCOF{{SET INITIAL OFFSET
        !          13614: {{MOV{R6{4*CCLEN(R9){{STORE BLOCK LENGTH
        !          13615: {{MOV{R9{R$CCB{{STORE PTR TO NEW BLOCK
        !          13616: *
        !          13617: *      HERE WE HAVE A BLOCK WE CAN USE
        !          13618: *
        !          13619: {CDWD2{MOV{CWCOF{R6{{LOAD CURRENT OFFSET
        !          13620: {{ADD{#4*NUM04{R6{{ADJUST FOR TEST (FOUR WORDS)
        !          13621: {{BLO{R6{4*CCLEN(R9){CDWD4{JUMP IF ROOM IN THIS BLOCK
        !          13622: *
        !          13623: *      HERE IF NO ROOM IN CURRENT BLOCK
        !          13624: *
        !          13625: {{BGE{R6{MXLEN{CDWD5{JUMP IF ALREADY AT MAX SIZE
        !          13626: {{ADD{#4*E$CBS{R6{{ELSE GET NEW SIZE
        !          13627: {{MOV{R10{-(SP){{SAVE ENTRY XL
        !          13628: {{MOV{R9{R10{{COPY POINTER
        !          13629: {{BLT{R6{MXLEN{CDWD3{JUMP IF NOT TOO LARGE
        !          13630: {{MOV{MXLEN{R6{{ELSE RESET TO MAX ALLOWED SIZE
        !          13631: {{EJC{{{{
        !          13632: *
        !          13633: *      CDWRD (CONTINUED)
        !          13634: *
        !          13635: *      HERE WITH NEW BLOCK SIZE IN WA
        !          13636: *
        !          13637: {CDWD3{JSR{ALLOC{{{ALLOCATE NEW BLOCK
        !          13638: {{MOV{R9{R$CCB{{STORE POINTER TO NEW BLOCK
        !          13639: {{MOV{#B$CCT{(R9)+{{STORE TYPE WORD IN NEW BLOCK
        !          13640: {{MOV{R6{(R9)+{{STORE BLOCK LENGTH
        !          13641: {{ADD{#4*CCUSE{R10{{POINT TO CCUSE,CCCOD FIELDS IN OLD
        !          13642: {{MOV{(R10){R6{{LOAD CCUSE VALUE
        !          13643: {{MVW{{{{COPY USEFUL WORDS FROM OLD BLOCK
        !          13644: {{MOV{(SP)+{R10{{RESTORE XL
        !          13645: {{BRN{CDWD1{{{MERGE BACK TO TRY AGAIN
        !          13646: *
        !          13647: *      HERE WITH ROOM IN CURRENT BLOCK
        !          13648: *
        !          13649: {CDWD4{MOV{CWCOF{R6{{LOAD CURRENT OFFSET
        !          13650: {{ICA{R6{{{GET NEW OFFSET
        !          13651: {{MOV{R6{CWCOF{{STORE NEW OFFSET
        !          13652: {{MOV{R6{4*CCUSE(R9){{STORE IN CCBLK FOR GBCOL
        !          13653: {{DCA{R6{{{RESTORE PTR TO THIS WORD
        !          13654: {{ADD{R6{R9{{POINT TO CURRENT ENTRY
        !          13655: {{MOV{(SP)+{R6{{RELOAD WORD TO GENERATE
        !          13656: {{MOV{R6{(R9){{STORE WORD IN BLOCK
        !          13657: {{MOV{(SP)+{R9{{RESTORE ENTRY XR
        !          13658: {{EXI{{{{RETURN TO CALLER
        !          13659: *
        !          13660: *      HERE IF COMPILED CODE IS TOO LONG FOR CDBLK
        !          13661: *
        !          13662: {CDWD5{ERB{213{SYNTAX{{ERROR. STATEMENT IS TOO COMPLICATED.
        !          13663: {{ENP{{{{END PROCEDURE CDWRD
        !          13664: {{EJC{{{{
        !          13665: *
        !          13666: *      CMGEN -- GENERATE CODE FOR CMBLK PTR
        !          13667: *
        !          13668: *      CMGEN IS A SUBSIDIARY PROCEDURE USED TO GENERATE VALUE
        !          13669: *      CODE FOR A CMBLK PTR FROM THE MAIN CODE GENERATORS.
        !          13670: *
        !          13671: *      (XL)                  CMBLK POINTER
        !          13672: *      (WB)                  OFFSET TO POINTER IN CMBLK
        !          13673: *      JSR  CMGEN            CALL TO GENERATE CODE
        !          13674: *      (XR,WA)               DESTROYED
        !          13675: *      (WB)                  BUMPED BY ONE WORD
        !          13676: *
        !          13677: {CMGEN{PRC{R{0{{ENTRY POINT, RECURSIVE
        !          13678: {{MOV{R10{R9{{COPY CMBLK POINTER
        !          13679: {{ADD{R7{R9{{POINT TO CMBLK POINTER
        !          13680: {{MOV{(R9){R9{{LOAD CMBLK POINTER
        !          13681: {{JSR{CDGVL{{{GENERATE CODE BY VALUE
        !          13682: {{ICA{R7{{{BUMP OFFSET
        !          13683: {{EXI{{{{RETURN TO CALLER
        !          13684: {{ENP{{{{END PROCEDURE CMGEN
        !          13685: {{EJC{{{{
        !          13686: *
        !          13687: *      CMPIL (COMPILE SOURCE CODE)
        !          13688: *
        !          13689: *      CMPIL IS USED TO CONVERT SNOBOL4 SOURCE CODE TO INTERNAL
        !          13690: *      FORM (SEE CDBLK FORMAT). IT IS USED BOTH FOR THE INITIAL
        !          13691: *      COMPILE AND AT RUN TIME BY THE CODE AND CONVERT FUNCTIONS
        !          13692: *      THIS PROCEDURE HAS CONTROL FOR THE ENTIRE DURATION OF
        !          13693: *      INITIAL COMPILATION. AN ERROR IN ANY PROCEDURE CALLED
        !          13694: *      DURING COMPILATION WILL LEAD FIRST TO THE ERROR SECTION
        !          13695: *      AND ULTIMATELY BACK HERE FOR RESUMED COMPILATION. THE
        !          13696: *      RE-ENTRY POINTS AFTER AN ERROR ARE SPECIALLY LABELLED -
        !          13697: *
        !          13698: *      CMPCE                 RESUME AFTER CONTROL CARD ERROR
        !          13699: *      CMPLE                 RESUME AFTER LABEL ERROR
        !          13700: *      CMPSE                 RESUME AFTER STATEMENT ERROR
        !          13701: *
        !          13702: *      JSR  CMPIL            CALL TO COMPILE CODE
        !          13703: *      (XR)                  PTR TO CDBLK FOR ENTRY STATEMENT
        !          13704: *      (XL,WA,WB,WC,RA)      DESTROYED
        !          13705: *
        !          13706: *      THE FOLLOWING GLOBAL VARIABLES ARE REFERENCED
        !          13707: *
        !          13708: *      CMPSN                 NUMBER OF NEXT STATEMENT
        !          13709: *                            TO BE COMPILED.
        !          13710: *
        !          13711: *      CSWXX                 CONTROL CARD SWITCH VALUES ARE
        !          13712: *                            CHANGED WHEN RELEVANT CONTROL
        !          13713: *                            CARDS ARE MET.
        !          13714: *
        !          13715: *      CWCOF                 OFFSET TO NEXT WORD IN CODE BLOCK
        !          13716: *                            BEING BUILT (SEE CDWRD).
        !          13717: *
        !          13718: *      LSTSN                 NUMBER OF STATEMENT MOST RECENTLY
        !          13719: *                            COMPILED (INITIALLY SET TO ZERO).
        !          13720: *
        !          13721: *      R$CIM                 CURRENT (INITIAL) COMPILER IMAGE
        !          13722: *                            (ZERO FOR INITIAL COMPILE CALL)
        !          13723: *
        !          13724: *      R$CNI                 USED TO POINT TO FOLLOWING IMAGE.
        !          13725: *                            (SEE READR PROCEDURE).
        !          13726: *
        !          13727: *      SCNGO                 GOTO SWITCH FOR SCANE PROCEDURE
        !          13728: *
        !          13729: *      SCNIL                 LENGTH OF CURRENT IMAGE EXCLUDING
        !          13730: *                            CHARACTERS REMOVED BY -INPUT.
        !          13731: *
        !          13732: *      SCNPT                 CURRENT SCAN OFFSET, SEE SCANE.
        !          13733: *
        !          13734: *      SCNRS                 RESCAN SWITCH FOR SCANE PROCEDURE.
        !          13735: *
        !          13736: *      SCNSE                 OFFSET (IN R$CIM) OF MOST RECENTLY
        !          13737: *                            SCANNED ELEMENT. SET ZERO IF NOT
        !          13738: *                            CURRENTLY SCANNING ITEMS
        !          13739: {{EJC{{{{
        !          13740: *
        !          13741: *      CMPIL (CONTINUED)
        !          13742: *
        !          13743: *      STAGE               STGIC  INITIAL COMPILE IN PROGRESS
        !          13744: *                          STGXC  CODE/CONVERT COMPILE
        !          13745: *                          STGEV  BUILDING EXBLK FOR EVAL
        !          13746: *                          STGXT  EXECUTE TIME (OUTSIDE COMPILE)
        !          13747: *                          STGCE  INITIAL COMPILE AFTER END LINE
        !          13748: *                          STGXE  EXECUTE COMPILE AFTER END LINE
        !          13749: *
        !          13750: *      CMPIL ALSO USES A FIXED NUMBER OF LOCATIONS ON THE
        !          13751: *      MAIN STACK AS FOLLOWS. (THE DEFINITIONS OF THE ACTUAL
        !          13752: *      OFFSETS ARE IN THE DEFINITIONS SECTION).
        !          13753: *
        !          13754: *      CMSTM(XS)             POINTER TO EXPAN TREE FOR BODY OF
        !          13755: *                            STATEMENT (SEE EXPAN PROCEDURE).
        !          13756: *
        !          13757: *      CMSGO(XS)             POINTER TO TREE REPRESENTATION OF
        !          13758: *                            SUCCESS GOTO (SEE PROCEDURE SCNGO)9
        !          13759: *                            ZERO IF NO SUCCESS GOTO IS GIVEN
        !          13760: *
        !          13761: *      CMFGO(XS)             LIKE CMSGO FOR FAILURE GOTO.
        !          13762: *
        !          13763: *      CMCGO(XS)             SET NON-ZERO ONLY IF THERE IS A
        !          13764: *                            CONDITIONAL GOTO. USED FOR -FAIL,
        !          13765: *                            -NOFAIL CODE GENERATION.
        !          13766: *
        !          13767: *      CMPCD(XS)             POINTER TO CDBLK FOR PREVIOUS
        !          13768: *                            STATEMENT. ZERO FOR 1ST STATEMENT.
        !          13769: *
        !          13770: *      CMFFP(XS)             SET NON-ZERO IF CDFAL IN PREVIOUS
        !          13771: *                            CDBLK NEEDS FILLING WITH FORWARD
        !          13772: *                            POINTER, ELSE SET TO ZERO.
        !          13773: *
        !          13774: *      CMFFC(XS)             SAME AS CMFFP FOR CURRENT CDBLK
        !          13775: *
        !          13776: *      CMSOP(XS)             OFFSET TO WORD IN PREVIOUS CDBLK
        !          13777: *                            TO BE FILLED IN WITH FORWARD PTR
        !          13778: *                            TO NEXT CDBLK FOR SUCCESS GOTO.
        !          13779: *                            ZERO IF NO FILL IN IS REQUIRED.
        !          13780: *
        !          13781: *      CMSOC(XS)             SAME AS CMSOP FOR CURRENT CDBLK.
        !          13782: *
        !          13783: *      CMLBL(XS)             POINTER TO VRBLK FOR LABEL OF
        !          13784: *                            CURRENT STATEMENT. ZERO IF NO LABEL
        !          13785: *
        !          13786: *      CMTRA(XS)             POINTER TO CDBLK FOR ENTRY STMNT.
        !          13787: {{EJC{{{{
        !          13788: *
        !          13789: *      CMPIL (CONTINUED)
        !          13790: *
        !          13791: *      ENTRY POINT
        !          13792: *
        !          13793: {CMPIL{PRC{E{0{{ENTRY POINT
        !          13794: {{LCT{R7{#CMNEN{{SET NUMBER OF STACK WORK LOCATIONS
        !          13795: *
        !          13796: *      LOOP TO INITIALIZE STACK WORKING LOCATIONS
        !          13797: *
        !          13798: {CMP00{ZER{-(SP){{{STORE A ZERO, MAKE ONE ENTRY
        !          13799: {{BCT{R7{CMP00{{LOOP BACK UNTIL ALL SET
        !          13800: {{MOV{SP{CMPXS{{SAVE STACK POINTER FOR ERROR SEC
        !          13801: {{SSS{CMPSS{{{SAVE S-R STACK POINTER IF ANY
        !          13802: *
        !          13803: *      LOOP THROUGH STATEMENTS
        !          13804: *
        !          13805: {CMP01{MOV{SCNPT{R7{{SET SCAN POINTER OFFSET
        !          13806: {{MOV{R7{SCNSE{{SET START OF ELEMENT LOCATION
        !          13807: {{MOV{#OCER${R6{{POINT TO COMPILE ERROR CALL
        !          13808: {{JSR{CDWRD{{{GENERATE AS TEMPORARY CDFAL
        !          13809: {{BLT{R7{SCNIL{CMP04{JUMP IF CHARS LEFT ON THIS IMAGE
        !          13810: *
        !          13811: *      LOOP HERE AFTER COMMENT OR CONTROL CARD
        !          13812: *      ALSO SPECIAL ENTRY AFTER CONTROL CARD ERROR
        !          13813: *
        !          13814: {CMPCE{ZER{R9{{{CLEAR POSSIBLE GARBAGE XR VALUE
        !          13815: {{BNE{STAGE{#STGIC{CMP02{SKIP UNLESS INITIAL COMPILE
        !          13816: {{JSR{READR{{{READ NEXT INPUT IMAGE
        !          13817: {{BZE{R9{CMP09{{JUMP IF NO INPUT AVAILABLE
        !          13818: {{JSR{NEXTS{{{ACQUIRE NEXT SOURCE IMAGE
        !          13819: {{MOV{CMPSN{LSTSN{{STORE STMT NO FOR USE BY LISTR
        !          13820: {{ZER{SCNPT{{{RESET SCAN POINTER
        !          13821: {{BRN{CMP04{{{GO PROCESS IMAGE
        !          13822: *
        !          13823: *      FOR EXECUTE TIME COMPILE, PERMIT EMBEDDED CONTROL CARDS
        !          13824: *      AND COMMENTS (BY SKIPPING TO NEXT SEMI-COLON)
        !          13825: *
        !          13826: {CMP02{MOV{R$CIM{R9{{GET CURRENT IMAGE
        !          13827: {{MOV{SCNPT{R7{{GET CURRENT OFFSET
        !          13828: {{PLC{R9{R7{{PREPARE TO GET CHARS
        !          13829: *
        !          13830: *      SKIP TO SEMI-COLON
        !          13831: *
        !          13832: {CMP03{LCH{R8{(R9)+{{GET CHAR
        !          13833: {{ICV{SCNPT{{{ADVANCE OFFSET
        !          13834: {{BEQ{R8{#CH$SM{CMP04{SKIP IF SEMI-COLON FOUND
        !          13835: {{BLT{SCNPT{SCNIL{CMP03{LOOP IF MORE CHARS
        !          13836: {{ZER{R9{{{CLEAR GARBAGE XR VALUE
        !          13837: {{BRN{CMP09{{{END OF IMAGE
        !          13838: {{EJC{{{{
        !          13839: *
        !          13840: *      CMPIL (CONTINUED)
        !          13841: *
        !          13842: *      HERE WITH IMAGE AVAILABLE TO SCAN. NOTE THAT IF THE INPUT
        !          13843: *      STRING IS NULL, THEN EVERYTHING IS OK SINCE NULL IS
        !          13844: *      ACTUALLY ASSEMBLED AS A WORD OF BLANKS.
        !          13845: *
        !          13846: {CMP04{MOV{R$CIM{R9{{POINT TO CURRENT IMAGE
        !          13847: {{MOV{SCNPT{R7{{LOAD CURRENT OFFSET
        !          13848: {{MOV{R7{R6{{COPY FOR LABEL SCAN
        !          13849: {{PLC{R9{R7{{POINT TO FIRST CHARACTER
        !          13850: {{LCH{R8{(R9)+{{LOAD FIRST CHARACTER
        !          13851: {{BEQ{R8{#CH$SM{CMP12{NO LABEL IF SEMICOLON
        !          13852: {{BEQ{R8{#CH$AS{CMPCE{LOOP BACK IF COMMENT CARD
        !          13853: {{BEQ{R8{#CH$MN{CMP32{JUMP IF CONTROL CARD
        !          13854: {{MOV{R$CIM{R$CMP{{ABOUT TO DESTROY R$CIM
        !          13855: {{MOV{#CMLAB{R10{{POINT TO LABEL WORK STRING
        !          13856: {{MOV{R10{R$CIM{{SCANE IS TO SCAN WORK STRING
        !          13857: {{PSC{R10{{{POINT TO FIRST CHARACTER POSITION
        !          13858: {{SCH{R8{(R10)+{{STORE CHAR JUST LOADED
        !          13859: {{MOV{#CH$SM{R8{{GET A SEMICOLON
        !          13860: {{SCH{R8{(R10){{STORE AFTER FIRST CHAR
        !          13861: {{CSC{R10{{{FINISHED CHARACTER STORING
        !          13862: {{ZER{R10{{{CLEAR POINTER
        !          13863: {{ZER{SCNPT{{{START AT FIRST CHARACTER
        !          13864: {{MOV{SCNIL{-(SP){{PRESERVE IMAGE LENGTH
        !          13865: {{MOV{#NUM02{SCNIL{{READ 2 CHARS AT MOST
        !          13866: {{JSR{SCANE{{{SCAN FIRST CHAR FOR TYPE
        !          13867: {{MOV{(SP)+{SCNIL{{RESTORE IMAGE LENGTH
        !          13868: {{MOV{R10{R8{{NOTE RETURN CODE
        !          13869: {{MOV{R$CMP{R10{{GET OLD R$CIM
        !          13870: {{MOV{R10{R$CIM{{PUT IT BACK
        !          13871: {{MOV{R7{SCNPT{{REINSTATE OFFSET
        !          13872: {{BNZ{SCNBL{CMP12{{BLANK SEEN - CANT BE LABEL
        !          13873: {{MOV{R10{R9{{POINT TO CURRENT IMAGE
        !          13874: {{PLC{R9{R7{{POINT TO FIRST CHAR AGAIN
        !          13875: {{BEQ{R8{#T$VAR{CMP06{OK IF LETTER
        !          13876: {{BEQ{R8{#T$CON{CMP06{OK IF DIGIT
        !          13877: *
        !          13878: *      DROP IN OR JUMP FROM ERROR SECTION IF SCANE FAILED
        !          13879: *
        !          13880: {CMPLE{MOV{R$CMP{R$CIM{{POINT TO BAD LINE
        !          13881: {{ERB{214{BAD{{LABEL OR MISPLACED CONTINUATION LINE
        !          13882: *
        !          13883: *      LOOP TO SCAN LABEL
        !          13884: *
        !          13885: {CMP05{BEQ{R8{#CH$SM{CMP07{SKIP IF SEMICOLON
        !          13886: {{ICV{R6{{{BUMP OFFSET
        !          13887: {{BEQ{R6{SCNIL{CMP07{JUMP IF END OF IMAGE (LABEL END)
        !          13888: {{EJC{{{{
        !          13889: *
        !          13890: *      CMPIL (CONTINUED)
        !          13891: *
        !          13892: *      ENTER LOOP AT THIS POINT
        !          13893: *
        !          13894: {CMP06{LCH{R8{(R9)+{{ELSE LOAD NEXT CHARACTER
        !          13895: {{BEQ{R8{#CH$HT{CMP07{JUMP IF HORIZONTAL TAB
        !          13896: {{BNE{R8{#CH$BL{CMP05{LOOP BACK IF NON-BLANK
        !          13897: *
        !          13898: *      HERE AFTER SCANNING OUT LABEL
        !          13899: *
        !          13900: {CMP07{MOV{R6{SCNPT{{SAVE UPDATED SCAN OFFSET
        !          13901: {{SUB{R7{R6{{GET LENGTH OF LABEL
        !          13902: {{BZE{R6{CMP12{{SKIP IF LABEL LENGTH ZERO
        !          13903: {{ZER{R9{{{CLEAR GARBAGE XR VALUE
        !          13904: {{JSR{SBSTR{{{BUILD SCBLK FOR LABEL NAME
        !          13905: {{JSR{GTNVR{{{LOCATE/CONTRUCT VRBLK
        !          13906: {{PPM{{{{DUMMY (IMPOSSIBLE) ERROR RETURN
        !          13907: {{MOV{R9{4*CMLBL(SP){{STORE LABEL POINTER
        !          13908: {{BNZ{4*VRLEN(R9){CMP11{{JUMP IF NOT SYSTEM LABEL
        !          13909: {{BNE{4*VRSVP(R9){#V$END{CMP11{JUMP IF NOT END LABEL
        !          13910: *
        !          13911: *      HERE FOR END LABEL SCANNED OUT
        !          13912: *
        !          13913: {{ADD{#STGND{STAGE{{ADJUST STAGE APPROPRIATELY
        !          13914: {{JSR{SCANE{{{SCAN OUT NEXT ELEMENT
        !          13915: {{BEQ{R10{#T$SMC{CMP10{JUMP IF END OF IMAGE
        !          13916: {{BNE{R10{#T$VAR{CMP08{ELSE ERROR IF NOT VARIABLE
        !          13917: *
        !          13918: *      HERE CHECK FOR VALID INITIAL TRANSFER
        !          13919: *
        !          13920: {{BEQ{4*VRLBL(R9){#STNDL{CMP08{JUMP IF NOT DEFINED (ERROR)
        !          13921: {{MOV{4*VRLBL(R9){4*CMTRA(SP){{ELSE SET INITIAL ENTRY POINTER
        !          13922: {{JSR{SCANE{{{SCAN NEXT ELEMENT
        !          13923: {{BEQ{R10{#T$SMC{CMP10{JUMP IF OK (END OF IMAGE)
        !          13924: *
        !          13925: *      HERE FOR BAD TRANSFER LABEL
        !          13926: *
        !          13927: {CMP08{ERB{215{SYNTAX{{ERROR. UNDEFINED OR ERRONEOUS ENTRY LABEL
        !          13928: *
        !          13929: *      HERE FOR END OF INPUT (NO END LABEL DETECTED)
        !          13930: *
        !          13931: {CMP09{ADD{#STGND{STAGE{{ADJUST STAGE APPROPRIATELY
        !          13932: {{BEQ{STAGE{#STGXE{CMP10{JUMP IF CODE CALL (OK)
        !          13933: {{ERB{216{SYNTAX{{ERROR. MISSING END LINE
        !          13934: *
        !          13935: *      HERE AFTER PROCESSING END LINE (MERGE HERE ON END ERROR)
        !          13936: *
        !          13937: {CMP10{MOV{#OSTP${R6{{SET STOP CALL POINTER
        !          13938: {{JSR{CDWRD{{{GENERATE AS STATEMENT CALL
        !          13939: {{BRN{CMPSE{{{JUMP TO GENERATE AS FAILURE
        !          13940: {{EJC{{{{
        !          13941: *
        !          13942: *      CMPIL (CONTINUED)
        !          13943: *
        !          13944: *      HERE AFTER PROCESSING LABEL OTHER THAN END
        !          13945: *
        !          13946: {CMP11{BNE{STAGE{#STGIC{CMP12{JUMP IF CODE CALL - REDEF. OK
        !          13947: {{BEQ{4*VRLBL(R9){#STNDL{CMP12{ELSE CHECK FOR REDEFINITION
        !          13948: {{ZER{4*CMLBL(SP){{{LEAVE FIRST LABEL DECLN UNDISTURBED
        !          13949: {{ERB{217{SYNTAX{{ERROR. DUPLICATE LABEL
        !          13950: *
        !          13951: *      HERE AFTER DEALING WITH LABEL
        !          13952: *
        !          13953: {CMP12{ZER{R7{{{SET FLAG FOR STATEMENT BODY
        !          13954: {{JSR{EXPAN{{{GET TREE FOR STATEMENT BODY
        !          13955: {{MOV{R9{4*CMSTM(SP){{STORE FOR LATER USE
        !          13956: {{ZER{4*CMSGO(SP){{{CLEAR SUCCESS GOTO POINTER
        !          13957: {{ZER{4*CMFGO(SP){{{CLEAR FAILURE GOTO POINTER
        !          13958: {{ZER{4*CMCGO(SP){{{CLEAR CONDITIONAL GOTO FLAG
        !          13959: {{JSR{SCANE{{{SCAN NEXT ELEMENT
        !          13960: {{BNE{R10{#T$COL{CMP18{JUMP IT NOT COLON (NO GOTO)
        !          13961: *
        !          13962: *      LOOP TO PROCESS GOTO FIELDS
        !          13963: *
        !          13964: {CMP13{MNZ{SCNGO{{{SET GOTO FLAG
        !          13965: {{JSR{SCANE{{{SCAN NEXT ELEMENT
        !          13966: {{BEQ{R10{#T$SMC{CMP31{JUMP IF NO FIELDS LEFT
        !          13967: {{BEQ{R10{#T$SGO{CMP14{JUMP IF S FOR SUCCESS GOTO
        !          13968: {{BEQ{R10{#T$FGO{CMP16{JUMP IF F FOR FAILURE GOTO
        !          13969: *
        !          13970: *      HERE FOR UNCONDITIONAL GOTO (I.E. NOT F OR S)
        !          13971: *
        !          13972: {{MNZ{SCNRS{{{SET TO RESCAN ELEMENT NOT F,S
        !          13973: {{JSR{SCNGF{{{SCAN OUT GOTO FIELD
        !          13974: {{BNZ{4*CMFGO(SP){CMP17{{ERROR IF FGOTO ALREADY
        !          13975: {{MOV{R9{4*CMFGO(SP){{ELSE SET AS FGOTO
        !          13976: {{BRN{CMP15{{{MERGE WITH SGOTO CIRCUIT
        !          13977: *
        !          13978: *      HERE FOR SUCCESS GOTO
        !          13979: *
        !          13980: {CMP14{JSR{SCNGF{{{SCAN SUCCESS GOTO FIELD
        !          13981: {{MOV{#NUM01{4*CMCGO(SP){{SET CONDITIONAL GOTO FLAG
        !          13982: *
        !          13983: *      UNCONTIONAL GOTO MERGES HERE
        !          13984: *
        !          13985: {CMP15{BNZ{4*CMSGO(SP){CMP17{{ERROR IF SGOTO ALREADY GIVEN
        !          13986: {{MOV{R9{4*CMSGO(SP){{ELSE SET SGOTO
        !          13987: {{BRN{CMP13{{{LOOP BACK FOR NEXT GOTO FIELD
        !          13988: *
        !          13989: *      HERE FOR FAILURE GOTO
        !          13990: *
        !          13991: {CMP16{JSR{SCNGF{{{SCAN GOTO FIELD
        !          13992: {{MOV{#NUM01{4*CMCGO(SP){{SET CONDITONAL GOTO FLAG
        !          13993: {{BNZ{4*CMFGO(SP){CMP17{{ERROR IF FGOTO ALREADY GIVEN
        !          13994: {{MOV{R9{4*CMFGO(SP){{ELSE STORE FGOTO POINTER
        !          13995: {{BRN{CMP13{{{LOOP BACK FOR NEXT FIELD
        !          13996: {{EJC{{{{
        !          13997: *
        !          13998: *      CMPIL (CONTINUED)
        !          13999: *
        !          14000: *      HERE FOR DUPLICATED GOTO FIELD
        !          14001: *
        !          14002: {CMP17{ERB{218{SYNTAX{{ERROR. DUPLICATED GOTO FIELD
        !          14003: *
        !          14004: *      HERE TO GENERATE CODE
        !          14005: *
        !          14006: {CMP18{ZER{SCNSE{{{STOP POSITIONAL ERROR FLAGS
        !          14007: {{MOV{4*CMSTM(SP){R9{{LOAD TREE PTR FOR STATEMENT BODY
        !          14008: {{ZER{R7{{{COLLECTABLE VALUE FOR WB FOR CDGVL
        !          14009: {{ZER{R8{{{RESET CONSTANT FLAG FOR CDGVL
        !          14010: {{JSR{EXPAP{{{TEST FOR PATTERN MATCH
        !          14011: {{PPM{CMP19{{{JUMP IF NOT PATTERN MATCH
        !          14012: {{MOV{#OPMS${4*CMOPN(R9){{ELSE SET PATTERN MATCH POINTER
        !          14013: {{MOV{#C$PMT{4*CMTYP(R9){{
        !          14014: *
        !          14015: *      HERE AFTER DEALING WITH SPECIAL PATTERN MATCH CASE
        !          14016: *
        !          14017: {CMP19{JSR{CDGVL{{{GENERATE CODE FOR BODY OF STATEMENT
        !          14018: {{MOV{4*CMSGO(SP){R9{{LOAD SGOTO POINTER
        !          14019: {{MOV{R9{R6{{COPY IT
        !          14020: {{BZE{R9{CMP21{{JUMP IF NO SUCCESS GOTO
        !          14021: {{ZER{4*CMSOC(SP){{{CLEAR SUCCESS OFFSET FILLIN PTR
        !          14022: {{BHI{R9{STATE{CMP20{JUMP IF COMPLEX GOTO
        !          14023: *
        !          14024: *      HERE FOR SIMPLE SUCCESS GOTO (LABEL)
        !          14025: *
        !          14026: {{ADD{#4*VRTRA{R6{{POINT TO VRTRA FIELD AS REQUIRED
        !          14027: {{JSR{CDWRD{{{GENERATE SUCCESS GOTO
        !          14028: {{BRN{CMP22{{{JUMP TO DEAL WITH FGOTO
        !          14029: *
        !          14030: *      HERE FOR COMPLEX SUCCESS GOTO
        !          14031: *
        !          14032: {CMP20{BEQ{R9{4*CMFGO(SP){CMP22{NO CODE IF SAME AS FGOTO
        !          14033: {{ZER{R7{{{ELSE SET OK VALUE FOR CDGVL IN WB
        !          14034: {{JSR{CDGCG{{{GENERATE CODE FOR SUCCESS GOTO
        !          14035: {{BRN{CMP22{{{JUMP TO DEAL WITH FGOTO
        !          14036: *
        !          14037: *      HERE FOR NO SUCCESS GOTO
        !          14038: *
        !          14039: {CMP21{MOV{CWCOF{4*CMSOC(SP){{SET SUCCESS FILL IN OFFSET
        !          14040: {{MOV{#OCER${R6{{POINT TO COMPILE ERROR CALL
        !          14041: {{JSR{CDWRD{{{GENERATE AS TEMPORARY VALUE
        !          14042: {{EJC{{{{
        !          14043: *
        !          14044: *      CMPIL (CONTINUED)
        !          14045: *
        !          14046: *      HERE TO DEAL WITH FAILURE GOTO
        !          14047: *
        !          14048: {CMP22{MOV{4*CMFGO(SP){R9{{LOAD FAILURE GOTO POINTER
        !          14049: {{MOV{R9{R6{{COPY IT
        !          14050: {{ZER{4*CMFFC(SP){{{SET NO FILL IN REQUIRED YET
        !          14051: {{BZE{R9{CMP23{{JUMP IF NO FAILURE GOTO GIVEN
        !          14052: {{ADD{#4*VRTRA{R6{{POINT TO VRTRA FIELD IN CASE
        !          14053: {{BLO{R9{STATE{CMPSE{JUMP TO GEN IF SIMPLE FGOTO
        !          14054: *
        !          14055: *      HERE FOR COMPLEX FAILURE GOTO
        !          14056: *
        !          14057: {{MOV{CWCOF{R7{{SAVE OFFSET TO O$GOF CALL
        !          14058: {{MOV{#OGOF${R6{{POINT TO FAILURE GOTO CALL
        !          14059: {{JSR{CDWRD{{{GENERATE
        !          14060: {{MOV{#OFIF${R6{{POINT TO FAIL IN FAIL WORD
        !          14061: {{JSR{CDWRD{{{GENERATE
        !          14062: {{JSR{CDGCG{{{GENERATE CODE FOR FAILURE GOTO
        !          14063: {{MOV{R7{R6{{COPY OFFSET TO O$GOF FOR CDFAL
        !          14064: {{MOV{#B$CDC{R7{{SET COMPLEX CASE CDTYP
        !          14065: {{BRN{CMP25{{{JUMP TO BUILD CDBLK
        !          14066: *
        !          14067: *      HERE IF NO FAILURE GOTO GIVEN
        !          14068: *
        !          14069: {CMP23{MOV{#OUNF${R6{{LOAD UNEXPECTED FAILURE CALL IN CAS
        !          14070: {{MOV{CSWFL{R8{{GET -NOFAIL FLAG
        !          14071: {{ORB{4*CMCGO(SP){R8{{CHECK IF CONDITIONAL GOTO
        !          14072: {{ZRB{R8{CMPSE{{JUMP IF -NOFAIL AND NO COND. GOTO
        !          14073: {{MNZ{4*CMFFC(SP){{{ELSE SET FILL IN FLAG
        !          14074: {{MOV{#OCER${R6{{AND SET COMPILE ERROR FOR TEMPORARY
        !          14075: *
        !          14076: *      MERGE HERE WITH CDFAL VALUE IN WA, SIMPLE CDBLK
        !          14077: *      ALSO SPECIAL ENTRY AFTER STATEMENT ERROR
        !          14078: *
        !          14079: {CMPSE{MOV{#B$CDS{R7{{SET CDTYP FOR SIMPLE CASE
        !          14080: {{EJC{{{{
        !          14081: *
        !          14082: *      CMPIL (CONTINUED)
        !          14083: *
        !          14084: *      MERGE HERE TO BUILD CDBLK
        !          14085: *
        !          14086: *      (WA)                  CDFAL VALUE TO BE GENERATED
        !          14087: *      (WB)                  CDTYP VALUE TO BE GENERATED
        !          14088: *
        !          14089: *      AT THIS STAGE, WE CHOP OFF AN APPROPRIATE CHUNK OF THE
        !          14090: *      CURRENT CCBLK AND CONVERT IT INTO A CDBLK. THE REMAINDER
        !          14091: *      OF THE CCBLK IS REFORMATTED TO BE THE NEW CCBLK.
        !          14092: *
        !          14093: {CMP25{MOV{R$CCB{R9{{POINT TO CCBLK
        !          14094: {{MOV{4*CMLBL(SP){R10{{GET POSSIBLE LABEL POINTER
        !          14095: {{BZE{R10{CMP26{{SKIP IF NO LABEL
        !          14096: {{ZER{4*CMLBL(SP){{{CLEAR FLAG FOR NEXT STATEMENT
        !          14097: {{MOV{R9{4*VRLBL(R10){{PUT CDBLK PTR IN VRBLK LABEL FIELD
        !          14098: *
        !          14099: *      MERGE AFTER DOING LABEL
        !          14100: *
        !          14101: {CMP26{MOV{R7{(R9){{SET TYPE WORD FOR NEW CDBLK
        !          14102: {{MOV{R6{4*CDFAL(R9){{SET FAILURE WORD
        !          14103: {{MOV{R9{R10{{COPY POINTER TO CCBLK
        !          14104: {{MOV{4*CCUSE(R9){R7{{LOAD LENGTH GEN (= NEW CDLEN)
        !          14105: {{MOV{4*CCLEN(R9){R8{{LOAD TOTAL CCBLK LENGTH
        !          14106: {{ADD{R7{R10{{POINT PAST CDBLK
        !          14107: {{SUB{R7{R8{{GET LENGTH LEFT FOR CHOP OFF
        !          14108: {{MOV{#B$CCT{(R10){{SET TYPE CODE FOR NEW CCBLK AT END
        !          14109: {{MOV{#4*CCCOD{4*CCUSE(R10){{SET INITIAL CODE OFFSET
        !          14110: {{MOV{#4*CCCOD{CWCOF{{REINITIALISE CWCOF
        !          14111: {{MOV{R8{4*CCLEN(R10){{SET NEW LENGTH
        !          14112: {{MOV{R10{R$CCB{{SET NEW CCBLK POINTER
        !          14113: {{MOV{CMPSN{4*CDSTM(R9){{SET STATEMENT NUMBER
        !          14114: {{ICV{CMPSN{{{BUMP STATEMENT NUMBER
        !          14115: *
        !          14116: *      SET POINTERS IN PREVIOUS CODE BLOCK AS REQUIRED
        !          14117: *
        !          14118: {{MOV{4*CMPCD(SP){R10{{LOAD PTR TO PREVIOUS CDBLK
        !          14119: {{BZE{4*CMFFP(SP){CMP27{{JUMP IF NO FAILURE FILL IN REQUIRED
        !          14120: {{MOV{R9{4*CDFAL(R10){{ELSE SET FAILURE PTR IN PREVIOUS
        !          14121: *
        !          14122: *      HERE TO DEAL WITH SUCCESS FORWARD POINTER
        !          14123: *
        !          14124: {CMP27{MOV{4*CMSOP(SP){R6{{LOAD SUCCESS OFFSET
        !          14125: {{BZE{R6{CMP28{{JUMP IF NO FILL IN REQUIRED
        !          14126: {{ADD{R6{R10{{ELSE POINT TO FILL IN LOCATION
        !          14127: {{MOV{R9{(R10){{STORE FORWARD POINTER
        !          14128: {{ZER{R10{{{CLEAR GARBAGE XL VALUE
        !          14129: {{EJC{{{{
        !          14130: *
        !          14131: *      CMPIL (CONTINUED)
        !          14132: *
        !          14133: *      NOW SET FILL IN POINTERS FOR THIS STATEMENT
        !          14134: *
        !          14135: {CMP28{MOV{4*CMFFC(SP){4*CMFFP(SP){{COPY FAILURE FILL IN FLAG
        !          14136: {{MOV{4*CMSOC(SP){4*CMSOP(SP){{COPY SUCCESS FILL IN OFFSET
        !          14137: {{MOV{R9{4*CMPCD(SP){{SAVE PTR TO THIS CDBLK
        !          14138: {{BNZ{4*CMTRA(SP){CMP29{{JUMP IF INITIAL ENTRY ALREADY SET
        !          14139: {{MOV{R9{4*CMTRA(SP){{ELSE SET PTR HERE AS DEFAULT
        !          14140: *
        !          14141: *      HERE AFTER COMPILING ONE STATEMENT
        !          14142: *
        !          14143: {CMP29{BLT{STAGE{#STGCE{CMP01{JUMP IF NOT END LINE JUST DONE
        !          14144: {{BZE{CSWLS{CMP30{{SKIP IF -NOLIST
        !          14145: {{JSR{LISTR{{{LIST LAST LINE
        !          14146: *
        !          14147: *      RETURN
        !          14148: *
        !          14149: {CMP30{MOV{4*CMTRA(SP){R9{{LOAD INITIAL ENTRY CDBLK POINTER
        !          14150: {{ADD{#4*CMNEN{SP{{POP WORK LOCATIONS OFF STACK
        !          14151: {{EXI{{{{AND RETURN TO CMPIL CALLER
        !          14152: *
        !          14153: *      HERE AT END OF GOTO FIELD
        !          14154: *
        !          14155: {CMP31{MOV{4*CMFGO(SP){R7{{GET FAIL GOTO
        !          14156: {{ORB{4*CMSGO(SP){R7{{OR IN SUCCESS GOTO
        !          14157: {{BNZ{R7{CMP18{{OK IF NON-NULL FIELD
        !          14158: {{ERB{219{SYNTAX{{ERROR. EMPTY GOTO FIELD
        !          14159: *
        !          14160: *      CONTROL CARD FOUND
        !          14161: *
        !          14162: {CMP32{ICV{R7{{{POINT PAST CH$MN
        !          14163: {{JSR{CNCRD{{{PROCESS CONTROL CARD
        !          14164: {{ZER{SCNSE{{{CLEAR START OF ELEMENT LOC.
        !          14165: {{BRN{CMPCE{{{LOOP FOR NEXT STATEMENT
        !          14166: {{ENP{{{{END PROCEDURE CMPIL
        !          14167: {{EJC{{{{
        !          14168: *
        !          14169: *      CNCRD -- CONTROL CARD PROCESSOR
        !          14170: *
        !          14171: *      CALLED TO DEAL WITH CONTROL CARDS
        !          14172: *
        !          14173: *      R$CIM                 POINTS TO CURRENT IMAGE
        !          14174: *      (WB)                  OFFSET TO 1ST CHAR OF CONTROL CARD
        !          14175: *      JSR  CNCRD            CALL TO PROCESS CONTROL CARDS
        !          14176: *      (XL,XR,WA,WB,WC,IA)   DESTROYED
        !          14177: *
        !          14178: {CNCRD{PRC{E{0{{ENTRY POINT
        !          14179: {{MOV{R7{SCNPT{{OFFSET FOR CONTROL CARD SCAN
        !          14180: {{MOV{#CCNOC{R6{{NUMBER OF CHARS FOR COMPARISON
        !          14181: {{CTW{R6{0{{CONVERT TO WORD COUNT
        !          14182: {{MOV{R6{CNSWC{{SAVE WORD COUNT
        !          14183: *
        !          14184: *      LOOP HERE IF MORE THAN ONE CONTROL CARD
        !          14185: *
        !          14186: {CNC01{BGE{SCNPT{SCNIL{CNC09{RETURN IF END OF IMAGE
        !          14187: {{MOV{R$CIM{R9{{POINT TO IMAGE
        !          14188: {{PLC{R9{SCNPT{{CHAR PTR FOR FIRST CHAR
        !          14189: {{LCH{R6{(R9)+{{GET FIRST CHAR
        !          14190: {{FLC{R6{{{FOLD TO UPPER CASE
        !          14191: {{BEQ{R6{#CH$LI{CNC07{SPECIAL CASE OF -INXXX
        !          14192: {{MNZ{SCNCC{{{SET FLAG FOR SCANE
        !          14193: {{JSR{SCANE{{{SCAN CARD NAME
        !          14194: {{ZER{SCNCC{{{CLEAR SCANE FLAG
        !          14195: {{BNZ{R10{CNC06{{FAIL UNLESS CONTROL CARD NAME
        !          14196: {{MOV{#CCNOC{R6{{NO. OF CHARS TO BE COMPARED
        !          14197: {{BLT{4*SCLEN(R9){R6{CNC06{FAIL IF TOO FEW CHARS
        !          14198: {{MOV{R9{R10{{POINT TO CONTROL CARD NAME
        !          14199: {{ZER{R7{{{ZERO OFFSET FOR SUBSTRING
        !          14200: {{JSR{SBSTR{{{EXTRACT SUBSTRING FOR COMPARISON
        !          14201: {{MOV{4*SCLEN(R9){R6{{RELOAD LENGTH
        !          14202: {{JSR{FLSTG{{{FOLD TO UPPER CASE
        !          14203: {{MOV{R9{CNSCC{{KEEP CONTROL CARD SUBSTRING PTR
        !          14204: {{MOV{#CCNMS{R9{{POINT TO LIST OF STANDARD NAMES
        !          14205: {{ZER{R7{{{INITIALISE NAME OFFSET
        !          14206: {{LCT{R8{#CC$NC{{NUMBER OF STANDARD NAMES
        !          14207: *
        !          14208: *      TRY TO MATCH NAME
        !          14209: *
        !          14210: {CNC02{MOV{CNSCC{R10{{POINT TO NAME
        !          14211: {{LCT{R6{CNSWC{{COUNTER FOR INNER LOOP
        !          14212: {{BRN{CNC04{{{JUMP INTO LOOP
        !          14213: *
        !          14214: *      INNER LOOP TO MATCH CARD NAME CHARS
        !          14215: *
        !          14216: {CNC03{ICA{R9{{{BUMP STANDARD NAMES PTR
        !          14217: {{ICA{R10{{{BUMP NAME POINTER
        !          14218: *
        !          14219: *      HERE TO INITIATE THE LOOP
        !          14220: *
        !          14221: {CNC04{CNE{4*SCHAR(R10){(R9){CNC05{COMP. UP TO CFP$C CHARS AT ONCE
        !          14222: {{BCT{R6{CNC03{{LOOP IF MORE WORDS TO COMPARE
        !          14223: {{EJC{{{{
        !          14224: *
        !          14225: *      CNCRD (CONTINUED)
        !          14226: *
        !          14227: *      MATCHED - BRANCH ON CARD OFFSET
        !          14228: *
        !          14229: {{MOV{R7{R10{{GET NAME OFFSET
        !          14230: {{BSW{R10{CC$NC{{SWITCH
        !          14231: {{IFF{CC$CA{CNC37{{-CASE
        !          14232: {{IFF{CC$DO{CNC10{{-DOUBLE
        !          14233: {{IFF{CC$DU{CNC11{{-DUMP
        !          14234: {{IFF{CC$EJ{CNC12{{-EJECT
        !          14235: {{IFF{CC$ER{CNC13{{-ERRORS
        !          14236: {{IFF{CC$EX{CNC14{{-EXECUTE
        !          14237: {{IFF{CC$FA{CNC15{{-FAIL
        !          14238: {{IFF{CC$LI{CNC16{{-LIST
        !          14239: {{IFF{CC$NR{CNC17{{-NOERRORS
        !          14240: {{IFF{CC$NX{CNC18{{-NOEXECUTE
        !          14241: {{IFF{CC$NF{CNC19{{-NOFAIL
        !          14242: {{IFF{CC$NL{CNC20{{-NOLIST
        !          14243: {{IFF{CC$NO{CNC21{{-NOOPT
        !          14244: {{IFF{CC$NP{CNC22{{-NOPRINT
        !          14245: {{IFF{CC$OP{CNC24{{-OPTIMISE
        !          14246: {{IFF{CC$PR{CNC25{{-PRINT
        !          14247: {{IFF{CC$SI{CNC27{{-SINGLE
        !          14248: {{IFF{CC$SP{CNC28{{-SPACE
        !          14249: {{IFF{CC$ST{CNC31{{-STITLE
        !          14250: {{IFF{CC$TI{CNC32{{-TITLE
        !          14251: {{IFF{CC$TR{CNC36{{-TRACE
        !          14252: {{ESW{{{{END SWITCH
        !          14253: *
        !          14254: *      NOT MATCHED YET. ALIGN STD NAMES PTR AND TRY AGAIN
        !          14255: *
        !          14256: {CNC05{ICA{R9{{{BUMP STANDARD NAMES PTR
        !          14257: {{BCT{R6{CNC05{{LOOP
        !          14258: {{ICV{R7{{{BUMP NAMES OFFSET
        !          14259: {{BCT{R8{CNC02{{CONTINUE IF MORE NAMES
        !          14260: *
        !          14261: *      INVALID CONTROL CARD NAME
        !          14262: *
        !          14263: {CNC06{ERB{247{INVALID{{CONTROL CARD
        !          14264: *
        !          14265: *      SPECIAL PROCESSING FOR -INXXX
        !          14266: *
        !          14267: {CNC07{LCH{R6{(R9){{GET NEXT CHAR
        !          14268: {{FLC{R6{{{FOLD TO UPPER CASE
        !          14269: {{BNE{R6{#CH$LN{CNC06{FAIL IF NOT LETTER N
        !          14270: {{ADD{#NUM02{SCNPT{{BUMP OFFSET PAST -IN
        !          14271: {{JSR{SCANE{{{SCAN INTEGER AFTER -IN
        !          14272: {{MOV{R9{-(SP){{STACK SCANNED ITEM
        !          14273: {{JSR{GTSMI{{{CHECK IF INTEGER
        !          14274: {{PPM{CNC06{{{FAIL IF NOT INTEGER
        !          14275: {{PPM{CNC06{{{FAIL IF NEGATIVE OR LARGE
        !          14276: {{MOV{R9{CSWIN{{KEEP INTEGER
        !          14277: {{EJC{{{{
        !          14278: *
        !          14279: *      CNCRD (CONTINUED)
        !          14280: *
        !          14281: *      CHECK FOR MORE CONTROL CARDS BEFORE RETURNING
        !          14282: *
        !          14283: {CNC08{MOV{SCNPT{R6{{PRESERVE IN CASE XEQ TIME COMPILE
        !          14284: {{JSR{SCANE{{{LOOK FOR COMMA
        !          14285: {{BEQ{R10{#T$CMA{CNC01{LOOP IF COMMA FOUND
        !          14286: {{MOV{R6{SCNPT{{RESTORE SCNPT IN CASE XEQ TIME
        !          14287: *
        !          14288: *      RETURN POINT
        !          14289: *
        !          14290: {CNC09{EXI{{{{RETURN
        !          14291: *
        !          14292: *      -DOUBLE
        !          14293: *
        !          14294: {CNC10{MNZ{CSWDB{{{SET SWITCH
        !          14295: {{BRN{CNC08{{{MERGE
        !          14296: *
        !          14297: *      -DUMP
        !          14298: *      THIS IS USED FOR SYSTEM DEBUGGING . IT HAS THE EFFECT OF
        !          14299: *      PRODUCING A CORE DUMP AT COMPILATION TIME
        !          14300: *
        !          14301: {CNC11{JSR{SYSDM{{{CALL DUMPER
        !          14302: {{BRN{CNC09{{{FINISHED
        !          14303: *
        !          14304: *      -EJECT
        !          14305: *
        !          14306: {CNC12{BZE{CSWLS{CNC09{{RETURN IF -NOLIST
        !          14307: {{JSR{PRTPS{{{EJECT
        !          14308: {{JSR{LISTT{{{LIST TITLE
        !          14309: {{BRN{CNC09{{{FINISHED
        !          14310: *
        !          14311: *      -ERRORS
        !          14312: *
        !          14313: {CNC13{ZER{CSWER{{{CLEAR SWITCH
        !          14314: {{BRN{CNC08{{{MERGE
        !          14315: *
        !          14316: *      -EXECUTE
        !          14317: *
        !          14318: {CNC14{ZER{CSWEX{{{CLEAR SWITCH
        !          14319: {{BRN{CNC08{{{MERGE
        !          14320: *
        !          14321: *      -FAIL
        !          14322: *
        !          14323: {CNC15{MNZ{CSWFL{{{SET SWITCH
        !          14324: {{BRN{CNC08{{{MERGE
        !          14325: *
        !          14326: *      -LIST
        !          14327: *
        !          14328: {CNC16{MNZ{CSWLS{{{SET SWITCH
        !          14329: {{BEQ{STAGE{#STGIC{CNC08{DONE IF COMPILE TIME
        !          14330: *
        !          14331: *      LIST CODE LINE IF EXECUTE TIME COMPILE
        !          14332: *
        !          14333: {{ZER{LSTPF{{{PERMIT LISTING
        !          14334: {{JSR{LISTR{{{LIST LINE
        !          14335: {{BRN{CNC08{{{MERGE
        !          14336: {{EJC{{{{
        !          14337: *
        !          14338: *      CNCRD (CONTINUED)
        !          14339: *
        !          14340: *      -NOERRORS
        !          14341: *
        !          14342: {CNC17{MNZ{CSWER{{{SET SWITCH
        !          14343: {{BRN{CNC08{{{MERGE
        !          14344: *
        !          14345: *      -NOEXECUTE
        !          14346: *
        !          14347: {CNC18{MNZ{CSWEX{{{SET SWITCH
        !          14348: {{BRN{CNC08{{{MERGE
        !          14349: *
        !          14350: *      -NOFAIL
        !          14351: *
        !          14352: {CNC19{ZER{CSWFL{{{CLEAR SWITCH
        !          14353: {{BRN{CNC08{{{MERGE
        !          14354: *
        !          14355: *      -NOLIST
        !          14356: *
        !          14357: {CNC20{ZER{CSWLS{{{CLEAR SWITCH
        !          14358: {{BRN{CNC08{{{MERGE
        !          14359: *
        !          14360: *      -NOOPTIMISE
        !          14361: *
        !          14362: {CNC21{MNZ{CSWNO{{{SET SWITCH
        !          14363: {{BRN{CNC08{{{MERGE
        !          14364: *
        !          14365: *      -NOPRINT
        !          14366: *
        !          14367: {CNC22{ZER{CSWPR{{{CLEAR SWITCH
        !          14368: {{BRN{CNC08{{{MERGE
        !          14369: *
        !          14370: *      -OPTIMISE
        !          14371: *
        !          14372: {CNC24{ZER{CSWNO{{{CLEAR SWITCH
        !          14373: {{BRN{CNC08{{{MERGE
        !          14374: *
        !          14375: *      -PRINT
        !          14376: *
        !          14377: {CNC25{MNZ{CSWPR{{{SET SWITCH
        !          14378: {{BRN{CNC08{{{MERGE
        !          14379: {{EJC{{{{
        !          14380: *
        !          14381: *      CNCRD (CONTINUED)
        !          14382: *
        !          14383: *      -SINGLE
        !          14384: *
        !          14385: {CNC27{ZER{CSWDB{{{CLEAR SWITCH
        !          14386: {{BRN{CNC08{{{MERGE
        !          14387: *
        !          14388: *      -SPACE
        !          14389: *
        !          14390: {CNC28{BZE{CSWLS{CNC09{{RETURN IF -NOLIST
        !          14391: {{JSR{SCANE{{{SCAN INTEGER AFTER -SPACE
        !          14392: {{MOV{#NUM01{R8{{1 SPACE IN CASE
        !          14393: {{BEQ{R9{#T$SMC{CNC29{JUMP IF NO INTEGER
        !          14394: {{MOV{R9{-(SP){{STACK IT
        !          14395: {{JSR{GTSMI{{{CHECK INTEGER
        !          14396: {{PPM{CNC06{{{FAIL IF NOT INTEGER
        !          14397: {{PPM{CNC06{{{FAIL IF NEGATIVE OR LARGE
        !          14398: {{BNZ{R8{CNC29{{JUMP IF NON ZERO
        !          14399: {{MOV{#NUM01{R8{{ELSE 1 SPACE
        !          14400: *
        !          14401: *      MERGE WITH COUNT OF LINES TO SKIP
        !          14402: *
        !          14403: {CNC29{ADD{R8{LSTLC{{BUMP LINE COUNT
        !          14404: {{LCT{R8{R8{{CONVERT TO LOOP COUNTER
        !          14405: {{BLT{LSTLC{LSTNP{CNC30{JUMP IF FITS ON PAGE
        !          14406: {{JSR{PRTPS{{{EJECT
        !          14407: {{JSR{LISTT{{{LIST TITLE
        !          14408: {{BRN{CNC09{{{MERGE
        !          14409: *
        !          14410: *      SKIP LINES
        !          14411: *
        !          14412: {CNC30{JSR{PRTNL{{{PRINT A BLANK
        !          14413: {{BCT{R8{CNC30{{LOOP
        !          14414: {{BRN{CNC09{{{MERGE
        !          14415: {{EJC{{{{
        !          14416: *
        !          14417: *      CNCRD (CONTINUED)
        !          14418: *
        !          14419: *      -STITL
        !          14420: *
        !          14421: {CNC31{MOV{#R$STL{CNR$T{{PTR TO R$STL
        !          14422: {{BRN{CNC33{{{MERGE
        !          14423: *
        !          14424: *      -TITLE
        !          14425: *
        !          14426: {CNC32{MOV{#NULLS{R$STL{{CLEAR SUBTITLE
        !          14427: {{MOV{#R$TTL{CNR$T{{PTR TO R$TTL
        !          14428: *
        !          14429: *      COMMON PROCESSING FOR -TITLE, -STITL
        !          14430: *
        !          14431: {CNC33{MOV{#NULLS{R9{{NULL IN CASE NEEDED
        !          14432: {{MNZ{CNTTL{{{SET FLAG FOR NEXT LISTR CALL
        !          14433: {{MOV{#CCOFS{R7{{OFFSET TO TITLE/SUBTITLE
        !          14434: {{MOV{SCNIL{R6{{INPUT IMAGE LENGTH
        !          14435: {{BLO{R6{R7{CNC34{JUMP IF NO CHARS LEFT
        !          14436: {{SUB{R7{R6{{NO OF CHARS TO EXTRACT
        !          14437: {{MOV{R$CIM{R10{{POINT TO IMAGE
        !          14438: {{JSR{SBSTR{{{GET TITLE/SUBTITLE
        !          14439: *
        !          14440: *      STORE TITLE/SUBTITLE
        !          14441: *
        !          14442: {CNC34{MOV{CNR$T{R10{{POINT TO STORAGE LOCATION
        !          14443: {{MOV{R9{(R10){{STORE TITLE/SUBTITLE
        !          14444: {{BEQ{R10{#R$STL{CNC09{RETURN IF STITL
        !          14445: {{BNZ{PRECL{CNC09{{RETURN IF EXTENDED LISTING
        !          14446: {{BZE{PRICH{CNC09{{RETURN IF REGULAR PRINTER
        !          14447: {{MOV{4*SCLEN(R9){R10{{GET LENGTH OF TITLE
        !          14448: {{MOV{R10{R6{{COPY IT
        !          14449: {{BZE{R10{CNC35{{JUMP IF NULL
        !          14450: {{ADD{#NUM10{R10{{INCREMENT
        !          14451: {{BHI{R10{PRLEN{CNC09{USE DEFAULT LSTP0 VAL IF TOO LONG
        !          14452: {{ADD{#NUM04{R6{{POINT JUST PAST TITLE
        !          14453: *
        !          14454: *      STORE OFFSET TO PAGE NN MESSAGE FOR SHORT TITLE
        !          14455: *
        !          14456: {CNC35{MOV{R6{LSTPO{{STORE OFFSET
        !          14457: {{BRN{CNC09{{{RETURN
        !          14458: *
        !          14459: *      -TRACE
        !          14460: *      PROVIDED FOR SYSTEM DEBUGGING.  TOGGLES THE SYSTEM LABEL
        !          14461: *      TRACE SWITCH AT COMPILE TIME
        !          14462: *
        !          14463: {CNC36{JSR{SYSTT{{{TOGGLE SWITCH
        !          14464: {{BRN{CNC08{{{MERGE
        !          14465: *
        !          14466: *      -CASE
        !          14467: *      SETS VALUE OF KVCAS SO THAT NAMES ARE FOLDED OR NOT
        !          14468: *      DURING COMPILATION.
        !          14469: *
        !          14470: {CNC37{JSR{SCANE{{{SCAN INTEGER AFTER -CASE
        !          14471: {{ZER{R8{{{GET 0 IN CASE NONE THERE
        !          14472: {{BEQ{R10{#T$SMC{CNC38{SKIP IF NO INTEGER
        !          14473: {{MOV{R9{-(SP){{STACK IT
        !          14474: {{JSR{GTSMI{{{CHECK INTEGER
        !          14475: {{PPM{CNC06{{{FAIL IF NOT INTEGER
        !          14476: {{PPM{CNC06{{{FAIL IF NEGATIVE OR TOO LARGE
        !          14477: {CNC38{MOV{R8{KVCAS{{STORE NEW CASE VALUE
        !          14478: {{BRN{CNC09{{{MERGE
        !          14479: {{ENP{{{{END PROCEDURE CNCRD
        !          14480: {{EJC{{{{
        !          14481: *
        !          14482: *      DFFNC -- DEFINE FUNCTION
        !          14483: *
        !          14484: *      DFFNC IS CALLED WHENEVER A NEW FUNCTION IS ASSIGNED TO
        !          14485: *      A VARIABLE. IT DEALS WITH EXTERNAL FUNCTION USE COUNTS.
        !          14486: *
        !          14487: *      (XR)                  POINTER TO VRBLK
        !          14488: *      (XL)                  POINTER TO NEW FUNCTION BLOCK
        !          14489: *      JSR  DFFNC            CALL TO DEFINE FUNCTION
        !          14490: *      (WA,WB)               DESTROYED
        !          14491: *
        !          14492: {DFFNC{PRC{E{0{{ENTRY POINT
        !          14493: {{BNE{(R10){#B$EFC{DFFN1{SKIP IF NEW FUNCTION NOT EXTERNAL
        !          14494: {{ICV{4*EFUSE(R10){{{ELSE INCREMENT ITS USE COUNT
        !          14495: *
        !          14496: *      HERE AFTER DEALING WITH NEW FUNCTION USE COUNT
        !          14497: *
        !          14498: {DFFN1{MOV{R9{R6{{SAVE VRBLK POINTER
        !          14499: {{MOV{4*VRFNC(R9){R9{{LOAD OLD FUNCTION POINTER
        !          14500: {{BNE{(R9){#B$EFC{DFFN2{JUMP IF OLD FUNCTION NOT EXTERNAL
        !          14501: {{MOV{4*EFUSE(R9){R7{{ELSE GET USE COUNT
        !          14502: {{DCV{R7{{{DECREMENT
        !          14503: {{MOV{R7{4*EFUSE(R9){{STORE DECREMENTED VALUE
        !          14504: {{BNZ{R7{DFFN2{{JUMP IF USE COUNT STILL NON-ZERO
        !          14505: {{JSR{SYSUL{{{ELSE CALL SYSTEM UNLOAD FUNCTION
        !          14506: *
        !          14507: *      HERE AFTER DEALING WITH OLD FUNCTION USE COUNT
        !          14508: *
        !          14509: {DFFN2{MOV{R6{R9{{RESTORE VRBLK POINTER
        !          14510: {{MOV{R10{R6{{COPY FUNCTION BLOCK PTR
        !          14511: {{BLT{R9{#R$YYY{DFFN3{SKIP CHECKS IF OPSYN OP DEFINITION
        !          14512: {{BNZ{4*VRLEN(R9){DFFN3{{JUMP IF NOT SYSTEM VARIABLE
        !          14513: *
        !          14514: *      FOR SYSTEM VARIABLE, CHECK FOR ILLEGAL REDEFINITION
        !          14515: *
        !          14516: {{MOV{4*VRSVP(R9){R10{{POINT TO SVBLK
        !          14517: {{MOV{4*SVBIT(R10){R7{{LOAD BIT INDICATORS
        !          14518: {{ANB{BTFNC{R7{{IS IT A SYSTEM FUNCTION
        !          14519: {{ZRB{R7{DFFN3{{REDEF OK IF NOT
        !          14520: {{ERB{248{ATTEMPTED{{REDEFINITION OF SYSTEM FUNCTION
        !          14521: *
        !          14522: *      HERE IF REDEFINITION IS PERMITTED
        !          14523: *
        !          14524: {DFFN3{MOV{R6{4*VRFNC(R9){{STORE NEW FUNCTION POINTER
        !          14525: {{MOV{R6{R10{{RESTORE FUNCTION BLOCK POINTER
        !          14526: {{EXI{{{{RETURN TO DFFNC CALLER
        !          14527: {{ENP{{{{END PROCEDURE DFFNC
        !          14528: {{EJC{{{{
        !          14529: *
        !          14530: *      DTACH -- DETACH I/O ASSOCIATED NAMES
        !          14531: *
        !          14532: *      DETACHES TRBLKS FROM I/O ASSOCIATED VARIABLES, REMOVES
        !          14533: *      ENTRY FROM IOCHN CHAIN ATTACHED TO FILEARG1 VRBLK AND MAY
        !          14534: *      REMOVE VRBLK ACCESS AND STORE TRAPS.
        !          14535: *      INPUT, OUTPUT, TERMINAL ARE HANDLED SPECIALLY.
        !          14536: *
        !          14537: *      (XL)                  I/O ASSOC. VBL NAME BASE PTR
        !          14538: *      (WA)                  OFFSET TO NAME
        !          14539: *      JSR  DTACH            CALL FOR DETACH OPERATION
        !          14540: *      (XL,XR,WA,WB,WC)      DESTROYED
        !          14541: *
        !          14542: {DTACH{PRC{E{0{{ENTRY POINT
        !          14543: {{MOV{R10{DTCNB{{STORE NAME BASE (GBCOL NOT CALLED)
        !          14544: {{ADD{R6{R10{{POINT TO NAME LOCATION
        !          14545: {{MOV{R10{DTCNM{{STORE IT
        !          14546: *
        !          14547: *      LOOP TO SEARCH FOR I/O TRBLK
        !          14548: *
        !          14549: {DTCH1{MOV{R10{R9{{COPY NAME POINTER
        !          14550: *
        !          14551: *      CONTINUE AFTER BLOCK DELETION
        !          14552: *
        !          14553: {DTCH2{MOV{(R10){R10{{POINT TO NEXT VALUE
        !          14554: {{BNE{(R10){#B$TRT{DTCH6{JUMP AT CHAIN END
        !          14555: {{MOV{4*TRTYP(R10){R6{{GET TRAP BLOCK TYPE
        !          14556: {{BEQ{R6{#TRTIN{DTCH3{JUMP IF INPUT
        !          14557: {{BEQ{R6{#TRTOU{DTCH3{JUMP IF OUTPUT
        !          14558: {{ADD{#4*TRNXT{R10{{POINT TO NEXT LINK
        !          14559: {{BRN{DTCH1{{{LOOP
        !          14560: *
        !          14561: *      DELETE AN OLD ASSOCIATION
        !          14562: *
        !          14563: {DTCH3{MOV{4*TRVAL(R10){(R9){{DELETE TRBLK
        !          14564: {{MOV{R10{R6{{DUMP XL ...
        !          14565: {{MOV{R9{R7{{... AND XR
        !          14566: {{MOV{4*TRTRF(R10){R10{{POINT TO TRTRF TRAP BLOCK
        !          14567: {{BZE{R10{DTCH5{{JUMP IF NO IOCHN
        !          14568: {{BNE{(R10){#B$TRT{DTCH5{JUMP IF INPUT, OUTPUT, TERMINAL
        !          14569: *
        !          14570: *      LOOP TO SEARCH IOCHN CHAIN FOR NAME PTR
        !          14571: *
        !          14572: {DTCH4{MOV{R10{R9{{REMEMBER LINK PTR
        !          14573: {{MOV{4*TRTRF(R10){R10{{POINT TO NEXT LINK
        !          14574: {{BZE{R10{DTCH5{{JUMP IF END OF CHAIN
        !          14575: {{MOV{4*IONMB(R10){R8{{GET NAME BASE
        !          14576: {{ADD{4*IONMO(R10){R8{{ADD OFFSET
        !          14577: {{BNE{R8{DTCNM{DTCH4{LOOP IF NO MATCH
        !          14578: {{MOV{4*TRTRF(R10){4*TRTRF(R9){{REMOVE NAME FROM CHAIN
        !          14579: {{EJC{{{{
        !          14580: *
        !          14581: *      DTACH (CONTINUED)
        !          14582: *
        !          14583: *      PREPARE TO RESUME I/O TRBLK SCAN
        !          14584: *
        !          14585: {DTCH5{MOV{R6{R10{{RECOVER XL ...
        !          14586: {{MOV{R7{R9{{... AND XR
        !          14587: {{ADD{#4*TRVAL{R10{{POINT TO VALUE FIELD
        !          14588: {{BRN{DTCH2{{{CONTINUE
        !          14589: *
        !          14590: *      EXIT POINT
        !          14591: *
        !          14592: {DTCH6{MOV{DTCNB{R9{{POSSIBLE VRBLK PTR
        !          14593: {{JSR{SETVR{{{RESET VRBLK IF NECESSARY
        !          14594: {{EXI{{{{RETURN
        !          14595: {{ENP{{{{END PROCEDURE DTACH
        !          14596: {{EJC{{{{
        !          14597: *
        !          14598: *      DTYPE -- GET DATATYPE NAME
        !          14599: *
        !          14600: *      (XR)                  OBJECT WHOSE DATATYPE IS REQUIRED
        !          14601: *      JSR  DTYPE            CALL TO GET DATATYPE
        !          14602: *      (XR)                  RESULT DATATYPE
        !          14603: *
        !          14604: {DTYPE{PRC{E{0{{ENTRY POINT
        !          14605: {{BEQ{(R9){#B$PDT{DTYP1{JUMP IF PROG.DEFINED
        !          14606: {{MOV{(R9){R9{{LOAD TYPE WORD
        !          14607: {{LEI{R9{{{GET ENTRY POINT ID (BLOCK CODE)
        !          14608: {{WTB{R9{{{CONVERT TO BYTE OFFSET
        !          14609: {{MOV{L^SCNMT(R9){R9{{LOAD TABLE ENTRY
        !          14610: {{EXI{{{{EXIT TO DTYPE CALLER
        !          14611: *
        !          14612: *      HERE IF PROGRAM DEFINED
        !          14613: *
        !          14614: {DTYP1{MOV{4*PDDFP(R9){R9{{POINT TO DFBLK
        !          14615: {{MOV{4*DFNAM(R9){R9{{GET DATATYPE NAME FROM DFBLK
        !          14616: {{EXI{{{{RETURN TO DTYPE CALLER
        !          14617: {{ENP{{{{END PROCEDURE DTYPE
        !          14618: {{EJC{{{{
        !          14619: *
        !          14620: *      DUMPR -- PRINT DUMP OF STORAGE
        !          14621: *
        !          14622: *      (XR)                  DUMP ARGUMENT (SEE BELOW)
        !          14623: *      JSR  DUMPR            CALL TO PRINT DUMP
        !          14624: *      (XR,XL)               DESTROYED
        !          14625: *      (WA,WB,WC,RA)         DESTROYED
        !          14626: *
        !          14627: *      THE DUMP ARGUMENT HAS THE FOLLOWING SIGNIFICANCE
        !          14628: *
        !          14629: *      DMARG = 0             NO DUMP PRINTED
        !          14630: *      DMARG = 1             PARTIAL DUMP (NAT VARS, KEYWORDS)
        !          14631: *      DMARG EQ 2            FULL DUMP (INCL ARRAYS ETC.)
        !          14632: *      DMARG GE 3            CORE DUMP
        !          14633: *
        !          14634: *      SINCE DUMPR SCRAMBLES STORE, IT IS NOT PERMISSIBLE TO
        !          14635: *      COLLECT IN MID-DUMP. HENCE A COLLECT IS DONE INITIALLY
        !          14636: *      AND THEN IF STORE RUNS OUT AN ERROR MESSAGE IS PRODUCED.
        !          14637: *
        !          14638: {DUMPR{PRC{E{0{{ENTRY POINT
        !          14639: {{BZE{R9{DMP28{{SKIP DUMP IF ARGUMENT IS ZERO
        !          14640: {{BGT{R9{#NUM02{DMP29{JUMP IF CORE DUMP REQUIRED
        !          14641: {{ZER{R10{{{CLEAR XL
        !          14642: {{ZER{R7{{{ZERO MOVE OFFSET
        !          14643: {{MOV{R9{DMARG{{SAVE DUMP ARGUMENT
        !          14644: {{JSR{GBCOL{{{COLLECT GARBAGE
        !          14645: {{JSR{PRTPG{{{EJECT PRINTER
        !          14646: {{MOV{#DMHDV{R9{{POINT TO HEADING FOR VARIABLES
        !          14647: {{JSR{PRTST{{{PRINT IT
        !          14648: {{JSR{PRTNL{{{TERMINATE PRINT LINE
        !          14649: {{JSR{PRTNL{{{AND PRINT A BLANK LINE
        !          14650: *
        !          14651: *      FIRST ALL NATURAL VARIABLE BLOCKS (VRBLK) WHOSE VALUES
        !          14652: *      ARE NON-NULL ARE LINKED IN LEXICAL ORDER USING DMVCH AS
        !          14653: *      THE CHAIN HEAD AND CHAINING THROUGH THE VRGET FIELDS.
        !          14654: *      NOTE THAT THIS SCRAMBLES STORE IF THE PROCESS IS
        !          14655: *      INTERRUPTED BEFORE COMPLETION E.G. BY EXCEEDING TIME  OR
        !          14656: *      PRINT LIMITS. SINCE THE SUBSEQUENT CORE DUMPS AND
        !          14657: *      FAILURES IF EXECUTION IS RESUMED ARE VERY CONFUSING, THE
        !          14658: *      EXECUTION TIME ERROR ROUTINE CHECKS FOR THIS EVENT AND
        !          14659: *      ATTEMPTS AN UNSCRAMBLE. SIMILAR PRECAUTIONS SHOULD BE
        !          14660: *      OBSERVED IF TRANSLATE TIME DUMPING IS IMPLEMENTED.
        !          14661: *
        !          14662: {{ZER{DMVCH{{{SET NULL CHAIN TO START
        !          14663: {{MOV{HSHTB{R6{{POINT TO HASH TABLE
        !          14664: *
        !          14665: *      LOOP THROUGH HEADERS IN HASH TABLE
        !          14666: *
        !          14667: {DMP00{MOV{R6{R9{{COPY HASH BUCKET POINTER
        !          14668: {{ICA{R6{{{BUMP POINTER
        !          14669: {{SUB{#4*VRNXT{R9{{SET OFFSET TO MERGE
        !          14670: *
        !          14671: *      LOOP THROUGH VRBLKS ON ONE CHAIN
        !          14672: *
        !          14673: {DMP01{MOV{4*VRNXT(R9){R9{{POINT TO NEXT VRBLK ON CHAIN
        !          14674: {{BZE{R9{DMP09{{JUMP IF END OF THIS HASH CHAIN
        !          14675: {{MOV{R9{R10{{ELSE COPY VRBLK POINTER
        !          14676: {{EJC{{{{
        !          14677: *
        !          14678: *      DUMPR (CONTINUED)
        !          14679: *
        !          14680: *      LOOP TO FIND VALUE AND SKIP IF NULL
        !          14681: *
        !          14682: {DMP02{MOV{4*VRVAL(R10){R10{{LOAD VALUE
        !          14683: {{BEQ{R10{#NULLS{DMP01{LOOP FOR NEXT VRBLK IF NULL VALUE
        !          14684: {{BEQ{(R10){#B$TRT{DMP02{LOOP BACK IF VALUE IS TRAPPED
        !          14685: *
        !          14686: *      NON-NULL VALUE, PREPARE TO SEARCH CHAIN
        !          14687: *
        !          14688: {{MOV{R9{R8{{SAVE VRBLK POINTER
        !          14689: {{ADD{#4*VRSOF{R9{{ADJUST PTR TO BE LIKE SCBLK PTR
        !          14690: {{BNZ{4*SCLEN(R9){DMP03{{JUMP IF NON-SYSTEM VARIABLE
        !          14691: {{MOV{4*VRSVO(R9){R9{{ELSE LOAD PTR TO NAME IN SVBLK
        !          14692: *
        !          14693: *      HERE WITH NAME POINTER FOR NEW BLOCK IN XR
        !          14694: *
        !          14695: {DMP03{MOV{R9{R7{{SAVE POINTER TO CHARS
        !          14696: {{MOV{R6{DMPSV{{SAVE HASH BUCKET POINTER
        !          14697: {{MOV{#DMVCH{R6{{POINT TO CHAIN HEAD
        !          14698: *
        !          14699: *      LOOP TO SEARCH CHAIN FOR CORRECT INSERTION POINT
        !          14700: *
        !          14701: {DMP04{MOV{R6{DMPCH{{SAVE CHAIN POINTER
        !          14702: {{MOV{R6{R10{{COPY IT
        !          14703: {{MOV{(R10){R9{{LOAD POINTER TO NEXT ENTRY
        !          14704: {{BZE{R9{DMP08{{JUMP IF END OF CHAIN TO INSERT
        !          14705: {{ADD{#4*VRSOF{R9{{ELSE GET NAME PTR FOR CHAINED VRBLK
        !          14706: {{BNZ{4*SCLEN(R9){DMP05{{JUMP IF NOT SYSTEM VARIABLE
        !          14707: {{MOV{4*VRSVO(R9){R9{{ELSE POINT TO NAME IN SVBLK
        !          14708: *
        !          14709: *      HERE PREPARE TO COMPARE THE NAMES
        !          14710: *
        !          14711: *      (WA)                  SCRATCH
        !          14712: *      (WB)                  POINTER TO STRING OF ENTERING VRBLK
        !          14713: *      (WC)                  POINTER TO ENTERING VRBLK
        !          14714: *      (XR)                  POINTER TO STRING OF CURRENT BLOCK
        !          14715: *      (XL)                  SCRATCH
        !          14716: *
        !          14717: {DMP05{MOV{R7{R10{{POINT TO ENTERING VRBLK STRING
        !          14718: {{MOV{4*SCLEN(R10){R6{{LOAD ITS LENGTH
        !          14719: {{PLC{R10{{{POINT TO CHARS OF ENTERING STRING
        !          14720: {{BHI{R6{4*SCLEN(R9){DMP06{JUMP IF ENTERING LENGTH HIGH
        !          14721: {{PLC{R9{{{ELSE POINT TO CHARS OF OLD STRING
        !          14722: {{CMC{DMP08{DMP07{{COMPARE, INSERT IF NEW IS LLT OLD
        !          14723: {{BRN{DMP08{{{OR IF LEQ (WE HAD SHORTER LENGTH)
        !          14724: *
        !          14725: *      HERE WHEN NEW LENGTH IS LONGER THAN OLD LENGTH
        !          14726: *
        !          14727: {DMP06{MOV{4*SCLEN(R9){R6{{LOAD SHORTER LENGTH
        !          14728: {{PLC{R9{{{POINT TO CHARS OF OLD STRING
        !          14729: {{CMC{DMP08{DMP07{{COMPARE, INSERT IF NEW ONE LOW
        !          14730: {{EJC{{{{
        !          14731: *
        !          14732: *      DUMPR (CONTINUED)
        !          14733: *
        !          14734: *      HERE WE MOVE OUT ON THE CHAIN
        !          14735: *
        !          14736: {DMP07{MOV{DMPCH{R10{{COPY CHAIN POINTER
        !          14737: {{MOV{(R10){R6{{MOVE TO NEXT ENTRY ON CHAIN
        !          14738: {{BRN{DMP04{{{LOOP BACK
        !          14739: *
        !          14740: *      HERE AFTER LOCATING THE PROPER INSERTION POINT
        !          14741: *
        !          14742: {DMP08{MOV{DMPCH{R10{{COPY CHAIN POINTER
        !          14743: {{MOV{DMPSV{R6{{RESTORE HASH BUCKET POINTER
        !          14744: {{MOV{R8{R9{{RESTORE VRBLK POINTER
        !          14745: {{MOV{(R10){4*VRGET(R9){{LINK VRBLK TO REST OF CHAIN
        !          14746: {{MOV{R9{(R10){{LINK VRBLK INTO CURRENT CHAIN LOC
        !          14747: {{BRN{DMP01{{{LOOP BACK FOR NEXT VRBLK
        !          14748: *
        !          14749: *      HERE AFTER PROCESSING ALL VRBLKS ON ONE CHAIN
        !          14750: *
        !          14751: {DMP09{BNE{R6{HSHTE{DMP00{LOOP BACK IF MORE BUCKETS TO GO
        !          14752: *
        !          14753: *      LOOP TO GENERATE DUMP OF NATURAL VARIABLE VALUES
        !          14754: *
        !          14755: {DMP10{MOV{DMVCH{R9{{LOAD POINTER TO NEXT ENTRY ON CHAIN
        !          14756: {{BZE{R9{DMP11{{JUMP IF END OF CHAIN
        !          14757: {{MOV{(R9){DMVCH{{ELSE UPDATE CHAIN PTR TO NEXT ENTRY
        !          14758: {{JSR{SETVR{{{RESTORE VRGET FIELD
        !          14759: {{MOV{R9{R10{{COPY VRBLK POINTER (NAME BASE)
        !          14760: {{MOV{#4*VRVAL{R6{{SET OFFSET FOR VRBLK NAME
        !          14761: {{JSR{PRTNV{{{PRINT NAME = VALUE
        !          14762: {{BRN{DMP10{{{LOOP BACK TILL ALL PRINTED
        !          14763: *
        !          14764: *      PREPARE TO PRINT KEYWORDS
        !          14765: *
        !          14766: {DMP11{JSR{PRTNL{{{PRINT BLANK LINE
        !          14767: {{JSR{PRTNL{{{AND ANOTHER
        !          14768: {{MOV{#DMHDK{R9{{POINT TO KEYWORD HEADING
        !          14769: {{JSR{PRTST{{{PRINT HEADING
        !          14770: {{JSR{PRTNL{{{END LINE
        !          14771: {{JSR{PRTNL{{{PRINT ONE BLANK LINE
        !          14772: {{MOV{#VDMKW{R10{{POINT TO LIST OF KEYWORD SVBLK PTRS
        !          14773: {{EJC{{{{
        !          14774: *
        !          14775: *      DUMPR (CONTINUED)
        !          14776: *
        !          14777: *      LOOP TO DUMP KEYWORD VALUES
        !          14778: *
        !          14779: {DMP12{MOV{(R10)+{R9{{LOAD NEXT SVBLK PTR FROM TABLE
        !          14780: {{BZE{R9{DMP13{{JUMP IF END OF LIST
        !          14781: {{MOV{#CH$AM{R6{{LOAD AMPERSAND
        !          14782: {{JSR{PRTCH{{{PRINT AMPERSAND
        !          14783: {{JSR{PRTST{{{PRINT KEYWORD NAME
        !          14784: {{MOV{4*SVLEN(R9){R6{{LOAD NAME LENGTH FROM SVBLK
        !          14785: {{CTB{R6{SVCHS{{GET LENGTH OF NAME
        !          14786: {{ADD{R6{R9{{POINT TO SVKNM FIELD
        !          14787: {{MOV{(R9){DMPKN{{STORE IN DUMMY KVBLK
        !          14788: {{MOV{#TMBEB{R9{{POINT TO BLANK-EQUAL-BLANK
        !          14789: {{JSR{PRTST{{{PRINT IT
        !          14790: {{MOV{R10{DMPSV{{SAVE TABLE POINTER
        !          14791: {{MOV{#DMPKB{R10{{POINT TO DUMMY KVBLK
        !          14792: {{MOV{#4*KVVAR{R6{{SET ZERO OFFSET
        !          14793: {{JSR{ACESS{{{GET KEYWORD VALUE
        !          14794: {{PPM{{{{FAILURE IS IMPOSSIBLE
        !          14795: {{JSR{PRTVL{{{PRINT KEYWORD VALUE
        !          14796: {{JSR{PRTNL{{{TERMINATE PRINT LINE
        !          14797: {{MOV{DMPSV{R10{{RESTORE TABLE POINTER
        !          14798: {{BRN{DMP12{{{LOOP BACK TILL ALL PRINTED
        !          14799: *
        !          14800: *      HERE AFTER COMPLETING PARTIAL DUMP
        !          14801: *
        !          14802: {DMP13{BEQ{DMARG{#NUM01{DMP27{EXIT IF PARTIAL DUMP COMPLETE
        !          14803: {{MOV{DNAMB{R9{{ELSE POINT TO FIRST DYNAMIC BLOCK
        !          14804: *
        !          14805: *      LOOP THROUGH BLOCKS IN DYNAMIC STORAGE
        !          14806: *
        !          14807: {DMP14{BEQ{R9{DNAMP{DMP27{JUMP IF END OF USED REGION
        !          14808: {{MOV{(R9){R6{{ELSE LOAD FIRST WORD OF BLOCK
        !          14809: {{BEQ{R6{#B$VCT{DMP16{JUMP IF VECTOR
        !          14810: {{BEQ{R6{#B$ART{DMP17{JUMP IF ARRAY
        !          14811: {{BEQ{R6{#B$PDT{DMP18{JUMP IF PROGRAM DEFINED
        !          14812: {{BEQ{R6{#B$TBT{DMP19{JUMP IF TABLE
        !          14813: {{BEQ{R6{#B$BCT{DMP30{JUMP IF BUFFER
        !          14814: *
        !          14815: *      MERGE HERE TO MOVE TO NEXT BLOCK
        !          14816: *
        !          14817: {DMP15{JSR{BLKLN{{{GET LENGTH OF BLOCK
        !          14818: {{ADD{R6{R9{{POINT PAST THIS BLOCK
        !          14819: {{BRN{DMP14{{{LOOP BACK FOR NEXT BLOCK
        !          14820: {{EJC{{{{
        !          14821: *
        !          14822: *      DUMPR (CONTINUED)
        !          14823: *
        !          14824: *      HERE FOR VECTOR
        !          14825: *
        !          14826: {DMP16{MOV{#4*VCVLS{R7{{SET OFFSET TO FIRST VALUE
        !          14827: {{BRN{DMP19{{{JUMP TO MERGE
        !          14828: *
        !          14829: *      HERE FOR ARRAY
        !          14830: *
        !          14831: {DMP17{MOV{4*AROFS(R9){R7{{SET OFFSET TO ARPRO FIELD
        !          14832: {{ICA{R7{{{BUMP TO GET OFFSET TO VALUES
        !          14833: {{BRN{DMP19{{{JUMP TO MERGE
        !          14834: *
        !          14835: *      HERE FOR PROGRAM DEFINED
        !          14836: *
        !          14837: {DMP18{MOV{#4*PDFLD{R7{{POINT TO VALUES, MERGE
        !          14838: *
        !          14839: *      HERE FOR TABLE (OTHERS MERGE)
        !          14840: *
        !          14841: {DMP19{BZE{4*IDVAL(R9){DMP15{{IGNORE BLOCK IF ZERO ID VALUE
        !          14842: {{JSR{BLKLN{{{ELSE GET BLOCK LENGTH
        !          14843: {{MOV{R9{R10{{COPY BLOCK POINTER
        !          14844: {{MOV{R6{DMPSV{{SAVE LENGTH
        !          14845: {{MOV{R7{R6{{COPY OFFSET TO FIRST VALUE
        !          14846: {{JSR{PRTNL{{{PRINT BLANK LINE
        !          14847: {{MOV{R6{DMPSA{{PRESERVE OFFSET
        !          14848: {{JSR{PRTVL{{{PRINT BLOCK VALUE (FOR TITLE)
        !          14849: {{MOV{DMPSA{R6{{RECOVER OFFSET
        !          14850: {{JSR{PRTNL{{{END PRINT LINE
        !          14851: {{BEQ{(R9){#B$TBT{DMP22{JUMP IF TABLE
        !          14852: {{DCA{R6{{{POINT BEFORE FIRST WORD
        !          14853: *
        !          14854: *      LOOP TO PRINT CONTENTS OF ARRAY, VECTOR, OR PROGRAM DEF
        !          14855: *
        !          14856: {DMP20{MOV{R10{R9{{COPY BLOCK POINTER
        !          14857: {{ICA{R6{{{BUMP OFFSET
        !          14858: {{ADD{R6{R9{{POINT TO NEXT VALUE
        !          14859: {{BEQ{R6{DMPSV{DMP14{EXIT IF END (XR PAST BLOCK)
        !          14860: {{SUB{#4*VRVAL{R9{{SUBTRACT OFFSET TO MERGE INTO LOOP
        !          14861: *
        !          14862: *      LOOP TO FIND VALUE AND IGNORE NULLS
        !          14863: *
        !          14864: {DMP21{MOV{4*VRVAL(R9){R9{{LOAD NEXT VALUE
        !          14865: {{BEQ{R9{#NULLS{DMP20{LOOP BACK IF NULL VALUE
        !          14866: {{BEQ{(R9){#B$TRT{DMP21{LOOP BACK IF TRAPPED
        !          14867: {{JSR{PRTNV{{{ELSE PRINT NAME = VALUE
        !          14868: {{BRN{DMP20{{{LOOP BACK FOR NEXT FIELD
        !          14869: {{EJC{{{{
        !          14870: *
        !          14871: *      DUMPR (CONTINUED)
        !          14872: *
        !          14873: *      HERE TO DUMP A TABLE
        !          14874: *
        !          14875: {DMP22{MOV{#4*TBBUK{R8{{SET OFFSET TO FIRST BUCKET
        !          14876: {{MOV{#4*TEVAL{R6{{SET NAME OFFSET FOR ALL TEBLKS
        !          14877: *
        !          14878: *      LOOP THROUGH TABLE BUCKETS
        !          14879: *
        !          14880: {DMP23{MOV{R10{-(SP){{SAVE TBBLK POINTER
        !          14881: {{ADD{R8{R10{{POINT TO NEXT BUCKET HEADER
        !          14882: {{ICA{R8{{{BUMP BUCKET OFFSET
        !          14883: {{SUB{#4*TENXT{R10{{SUBTRACT OFFSET TO MERGE INTO LOOP
        !          14884: *
        !          14885: *      LOOP TO PROCESS TEBLKS ON ONE CHAIN
        !          14886: *
        !          14887: {DMP24{MOV{4*TENXT(R10){R10{{POINT TO NEXT TEBLK
        !          14888: {{BEQ{R10{(SP){DMP26{JUMP IF END OF CHAIN
        !          14889: {{MOV{R10{R9{{ELSE COPY TEBLK POINTER
        !          14890: *
        !          14891: *      LOOP TO FIND VALUE AND IGNORE IF NULL
        !          14892: *
        !          14893: {DMP25{MOV{4*TEVAL(R9){R9{{LOAD NEXT VALUE
        !          14894: {{BEQ{R9{#NULLS{DMP24{IGNORE IF NULL VALUE
        !          14895: {{BEQ{(R9){#B$TRT{DMP25{LOOP BACK IF TRAPPED
        !          14896: {{MOV{R8{DMPSV{{ELSE SAVE OFFSET POINTER
        !          14897: {{JSR{PRTNV{{{PRINT NAME = VALUE
        !          14898: {{MOV{DMPSV{R8{{RELOAD OFFSET
        !          14899: {{BRN{DMP24{{{LOOP BACK FOR NEXT TEBLK
        !          14900: *
        !          14901: *      HERE TO MOVE TO NEXT HASH CHAIN
        !          14902: *
        !          14903: {DMP26{MOV{(SP)+{R10{{RESTORE TBBLK POINTER
        !          14904: {{BNE{R8{4*TBLEN(R10){DMP23{LOOP BACK IF MORE BUCKETS TO GO
        !          14905: {{MOV{R10{R9{{ELSE COPY TABLE POINTER
        !          14906: {{ADD{R8{R9{{POINT TO FOLLOWING BLOCK
        !          14907: {{BRN{DMP14{{{LOOP BACK TO PROCESS NEXT BLOCK
        !          14908: *
        !          14909: *      HERE AFTER COMPLETING DUMP
        !          14910: *
        !          14911: {DMP27{JSR{PRTPG{{{EJECT PRINTER
        !          14912: *
        !          14913: *      MERGE HERE IF NO DUMP GIVEN (DMARG=0)
        !          14914: *
        !          14915: {DMP28{EXI{{{{RETURN TO DUMP CALLER
        !          14916: *
        !          14917: *      CALL SYSTEM CORE DUMP ROUTINE
        !          14918: *
        !          14919: {DMP29{JSR{SYSDM{{{CALL IT
        !          14920: {{BRN{DMP28{{{RETURN
        !          14921: {{EJC{{{{
        !          14922: *
        !          14923: *      DUMPR (CONTINUED)
        !          14924: *
        !          14925: *      HERE TO DUMP BUFFER BLOCK
        !          14926: *
        !          14927: {DMP30{JSR{PRTNL{{{PRINT BLANK LINE
        !          14928: {{JSR{PRTVL{{{PRINT VALUE ID FOR TITLE
        !          14929: {{JSR{PRTNL{{{FORCE NEW LINE
        !          14930: {{MOV{#CH$DQ{R6{{LOAD DOUBLE QUOTE
        !          14931: {{JSR{PRTCH{{{PRINT IT
        !          14932: {{MOV{4*BCLEN(R9){R8{{LOAD DEFINED LENGTH
        !          14933: {{BZE{R8{DMP32{{SKIP CHARACTERS IF NONE
        !          14934: {{LCT{R8{R8{{LOAD COUNT FOR LOOP
        !          14935: {{MOV{R9{R7{{SAVE BCBLK PTR
        !          14936: {{MOV{4*BCBUF(R9){R9{{POINT TO BFBLK
        !          14937: {{PLC{R9{{{GET SET TO LOAD CHARACTERS
        !          14938: *
        !          14939: *      LOOP HERE STUFFING CHARACTERS IN OUTPUT STREAM
        !          14940: *
        !          14941: {DMP31{LCH{R6{(R9)+{{GET NEXT CHARACTER
        !          14942: {{JSR{PRTCH{{{STUFF IT
        !          14943: {{BCT{R8{DMP31{{BRANCH FOR NEXT ONE
        !          14944: {{MOV{R7{R9{{RESTORE BCBLK POINTER
        !          14945: *
        !          14946: *      MERGE TO STUFF CLOSING QUOTE MARK
        !          14947: *
        !          14948: {DMP32{MOV{#CH$DQ{R6{{STUFF QUOTE
        !          14949: {{JSR{PRTCH{{{PRINT IT
        !          14950: {{JSR{PRTNL{{{PRINT NEW LINE
        !          14951: {{MOV{(R9){R6{{GET FIRST WD FOR BLKLN
        !          14952: {{BRN{DMP15{{{MERGE TO GET NEXT BLOCK
        !          14953: {{ENP{{{{END PROCEDURE DUMPR
        !          14954: {{EJC{{{{
        !          14955: *
        !          14956: *      ERMSG -- PRINT ERROR CODE AND ERROR MESSAGE
        !          14957: *
        !          14958: *      KVERT                 ERROR CODE
        !          14959: *      JSR  ERMSG            CALL TO PRINT MESSAGE
        !          14960: *      (XR,XL,WA,WB,WC,IA)   DESTROYED
        !          14961: *
        !          14962: {ERMSG{PRC{E{0{{ENTRY POINT
        !          14963: {{JSR{PRTIS{{{PRINT ERROR PTR OR BLANK LINE
        !          14964: {{MOV{KVERT{R6{{LOAD ERROR CODE
        !          14965: {{MOV{#ERMMS{R9{{POINT TO ERROR MESSAGE /ERROR/
        !          14966: {{JSR{PRTST{{{PRINT IT
        !          14967: {{JSR{ERTEX{{{GET ERROR MESSAGE TEXT
        !          14968: {{ADD{#THSND{R6{{BUMP ERROR CODE FOR PRINT
        !          14969: {{MTI{R6{{{FAIL CODE IN INT ACC
        !          14970: {{JSR{PRTIN{{{PRINT CODE (NOW HAVE ERROR1XXX)
        !          14971: {{MOV{PRBUF{R10{{POINT TO PRINT BUFFER
        !          14972: {{PSC{R10{#NUM05{{POINT TO THE 1
        !          14973: {{MOV{#CH$BL{R6{{LOAD A BLANK
        !          14974: {{SCH{R6{(R10){{STORE BLANK OVER 1 (ERROR XXX)
        !          14975: {{CSC{R10{{{COMPLETE STORE CHARACTERS
        !          14976: {{ZER{R10{{{CLEAR GARBAGE POINTER IN XL
        !          14977: {{MOV{R9{R6{{KEEP ERROR TEXT
        !          14978: {{MOV{#ERMNS{R9{{POINT TO / -- /
        !          14979: {{JSR{PRTST{{{PRINT IT
        !          14980: {{MOV{R6{R9{{GET ERROR TEXT AGAIN
        !          14981: {{JSR{PRTST{{{PRINT ERROR MESSAGE TEXT
        !          14982: {{JSR{PRTIS{{{PRINT LINE
        !          14983: {{JSR{PRTIS{{{PRINT BLANK LINE
        !          14984: {{EXI{{{{RETURN TO ERMSG CALLER
        !          14985: {{ENP{{{{END PROCEDURE ERMSG
        !          14986: {{EJC{{{{
        !          14987: *
        !          14988: *      ERTEX -- GET ERROR MESSAGE TEXT
        !          14989: *
        !          14990: *      (WA)                  ERROR CODE
        !          14991: *      JSR  ERTEX            CALL TO GET ERROR TEXT
        !          14992: *      (XR)                  PTR TO ERROR TEXT IN DYNAMIC
        !          14993: *      (R$ETX)               COPY OF PTR TO ERROR TEXT
        !          14994: *      (XL,WC,IA)            DESTROYED
        !          14995: *
        !          14996: {ERTEX{PRC{E{0{{ENTRY POINT
        !          14997: {{MOV{R6{ERTWA{{SAVE WA
        !          14998: {{MOV{R7{ERTWB{{SAVE WB
        !          14999: {{JSR{SYSEM{{{GET FAILURE MESSAGE TEXT
        !          15000: {{MOV{R9{R10{{COPY POINTER TO IT
        !          15001: {{MOV{4*SCLEN(R9){R6{{GET LENGTH OF STRING
        !          15002: {{BZE{R6{ERT02{{JUMP IF NULL
        !          15003: {{ZER{R7{{{OFFSET OF ZERO
        !          15004: {{JSR{SBSTR{{{COPY INTO DYNAMIC STORE
        !          15005: {{MOV{R9{R$ETX{{STORE FOR RELOCATION
        !          15006: *
        !          15007: *      RETURN
        !          15008: *
        !          15009: {ERT01{MOV{ERTWB{R7{{RESTORE WB
        !          15010: {{MOV{ERTWA{R6{{RESTORE WA
        !          15011: {{EXI{{{{RETURN TO CALLER
        !          15012: *
        !          15013: *      RETURN ERRTEXT CONTENTS INSTEAD OF NULL
        !          15014: *
        !          15015: {ERT02{MOV{R$ETX{R9{{GET ERRTEXT
        !          15016: {{BRN{ERT01{{{RETURN
        !          15017: {{ENP{{{{
        !          15018: {{EJC{{{{
        !          15019: *
        !          15020: *      EVALI -- EVALUATE INTEGER ARGUMENT
        !          15021: *
        !          15022: *      EVALI IS USED BY PATTERN PRIMITIVES LEN,TAB,RTAB,POS,RPOS
        !          15023: *      WHEN THEIR ARGUMENT IS AN EXPRESSION VALUE.
        !          15024: *
        !          15025: *      (XR)                  NODE POINTER
        !          15026: *      (WB)                  CURSOR
        !          15027: *      JSR  EVALI            CALL TO EVALUATE INTEGER
        !          15028: *      PPM  LOC              TRANSFER LOC FOR NON-INTEGER ARG
        !          15029: *      PPM  LOC              TRANSFER LOC FOR OUT OF RANGE ARG
        !          15030: *      PPM  LOC              TRANSFER LOC FOR EVALUATION FAILURE
        !          15031: *      PPM  LOC              TRANSFER LOC FOR SUCCESSFUL EVAL
        !          15032: *      (THE NORMAL RETURN IS NEVER TAKEN)
        !          15033: *      (XR)                  PTR TO NODE WITH INTEGER ARGUMENT
        !          15034: *      (WC,XL,RA)            DESTROYED
        !          15035: *
        !          15036: *      ON RETURN, THE NODE POINTED TO HAS THE INTEGER ARGUMENT
        !          15037: *      IN PARM1 AND THE PROPER SUCCESSOR POINTER IN PTHEN.
        !          15038: *      THIS ALLOWS MERGING WITH THE NORMAL (INTEGER ARG) CASE.
        !          15039: *
        !          15040: {EVALI{PRC{R{4{{ENTRY POINT (RECURSIVE)
        !          15041: {{JSR{EVALP{{{EVALUATE EXPRESSION
        !          15042: {{PPM{EVLI1{{{JUMP ON FAILURE
        !          15043: {{MOV{R10{-(SP){{STACK RESULT FOR GTSMI
        !          15044: {{MOV{4*PTHEN(R9){R10{{LOAD SUCCESSOR POINTER
        !          15045: {{JSR{GTSMI{{{CONVERT ARG TO SMALL INTEGER
        !          15046: {{PPM{EVLI2{{{JUMP IF NOT INTEGER
        !          15047: {{PPM{EVLI3{{{JUMP IF OUT OF RANGE
        !          15048: {{MOV{R9{EVLIV{{STORE RESULT IN SPECIAL DUMMY NODE
        !          15049: {{MOV{R10{EVLIS{{STORE SUCCESSOR POINTER
        !          15050: {{MOV{#EVLIN{R9{{POINT TO DUMMY NODE WITH RESULT
        !          15051: {{EXI{4{{{TAKE SUCCESSFUL EXIT
        !          15052: *
        !          15053: *      HERE IF EVALUATION FAILS
        !          15054: *
        !          15055: {EVLI1{EXI{3{{{TAKE FAILURE RETURN
        !          15056: *
        !          15057: *      HERE IF ARGUMENT IS NOT INTEGER
        !          15058: *
        !          15059: {EVLI2{EXI{1{{{TAKE NON-INTEGER ERROR EXIT
        !          15060: *
        !          15061: *      HERE IF ARGUMENT IS OUT OF RANGE
        !          15062: *
        !          15063: {EVLI3{EXI{2{{{TAKE OUT-OF-RANGE ERROR EXIT
        !          15064: {{ENP{{{{END PROCEDURE EVALI
        !          15065: {{EJC{{{{
        !          15066: *
        !          15067: *      EVALP -- EVALUATE EXPRESSION DURING PATTERN MATCH
        !          15068: *
        !          15069: *      EVALP IS USED TO EVALUATE AN EXPRESSION (BY VALUE) DURING
        !          15070: *      A PATTERN MATCH. THE EFFECT IS LIKE EVALX, BUT PATTERN
        !          15071: *      VARIABLES ARE STACKED AND RESTORED IF NECESSARY.
        !          15072: *
        !          15073: *      EVALP ALSO DIFFERS FROM EVALX IN THAT IF THE RESULT IS
        !          15074: *      AN EXPRESSION IT IS REEVALUATED. THIS OCCURS REPEATEDLY.
        !          15075: *
        !          15076: *      (XR)                  NODE POINTER
        !          15077: *      (WB)                  PATTERN MATCH CURSOR
        !          15078: *      JSR  EVALP            CALL TO EVALUATE EXPRESSION
        !          15079: *      PPM  LOC              TRANSFER LOC IF EVALUATION FAILS
        !          15080: *      (XL)                  RESULT
        !          15081: *      (WA)                  FIRST WORD OF RESULT BLOCK
        !          15082: *      (XR,WB)               DESTROYED (FAILURE CASE ONLY)
        !          15083: *      (WC,RA)               DESTROYED
        !          15084: *
        !          15085: *      THE EXPRESSION POINTER IS STORED IN PARM1 OF THE NODE
        !          15086: *
        !          15087: *      CONTROL RETURNS TO FAILP ON FAILURE OF EVALUATION
        !          15088: *
        !          15089: {EVALP{PRC{R{1{{ENTRY POINT (RECURSIVE)
        !          15090: {{MOV{4*PARM1(R9){R10{{LOAD EXPRESSION POINTER
        !          15091: {{BEQ{(R10){#B$EXL{EVLP1{JUMP IF EXBLK CASE
        !          15092: *
        !          15093: *      HERE FOR CASE OF SEBLK
        !          15094: *
        !          15095: *      WE CAN GIVE A FAST RETURN IF THE VALUE OF THE VRBLK IS
        !          15096: *      NOT AN EXPRESSION AND IS NOT TRAPPED.
        !          15097: *
        !          15098: {{MOV{4*SEVAR(R10){R10{{LOAD VRBLK POINTER
        !          15099: {{MOV{4*VRVAL(R10){R10{{LOAD VALUE OF VRBLK
        !          15100: {{MOV{(R10){R6{{LOAD FIRST WORD OF VALUE
        !          15101: {{BHI{R6{#B$T$${EVLP3{JUMP IF NOT SEBLK, TRBLK OR EXBLK
        !          15102: *
        !          15103: *      HERE FOR EXBLK OR SEBLK WITH EXPR VALUE OR TRAPPED VALUE
        !          15104: *
        !          15105: {EVLP1{MOV{R9{-(SP){{STACK NODE POINTER
        !          15106: {{MOV{R7{-(SP){{STACK CURSOR
        !          15107: {{MOV{R$PMS{-(SP){{STACK SUBJECT STRING POINTER
        !          15108: {{MOV{PMSSL{-(SP){{STACK SUBJECT STRING LENGTH
        !          15109: {{MOV{PMDFL{-(SP){{STACK DOT FLAG
        !          15110: {{MOV{PMHBS{-(SP){{STACK HISTORY STACK BASE POINTER
        !          15111: {{MOV{4*PARM1(R9){R9{{LOAD EXPRESSION POINTER
        !          15112: {{EJC{{{{
        !          15113: *
        !          15114: *      EVALP (CONTINUED)
        !          15115: *
        !          15116: *      LOOP BACK HERE TO REEVALUATE EXPRESSION RESULT
        !          15117: *
        !          15118: {EVLP2{ZER{R7{{{SET FLAG FOR BY VALUE
        !          15119: {{JSR{EVALX{{{EVALUATE EXPRESSION
        !          15120: {{PPM{EVLP4{{{JUMP ON FAILURE
        !          15121: {{MOV{(R9){R6{{ELSE LOAD FIRST WORD OF VALUE
        !          15122: {{BLO{R6{#B$E$${EVLP2{LOOP BACK TO REEVALUATE EXPRESSION
        !          15123: *
        !          15124: *      HERE TO RESTORE PATTERN VALUES AFTER SUCCESSFUL EVAL
        !          15125: *
        !          15126: {{MOV{R9{R10{{COPY RESULT POINTER
        !          15127: {{MOV{(SP)+{PMHBS{{RESTORE HISTORY STACK BASE POINTER
        !          15128: {{MOV{(SP)+{PMDFL{{RESTORE DOT FLAG
        !          15129: {{MOV{(SP)+{PMSSL{{RESTORE SUBJECT STRING LENGTH
        !          15130: {{MOV{(SP)+{R$PMS{{RESTORE SUBJECT STRING POINTER
        !          15131: {{MOV{(SP)+{R7{{RESTORE CURSOR
        !          15132: {{MOV{(SP)+{R9{{RESTORE NODE POINTER
        !          15133: *
        !          15134: *      COMMON EXIT POINT
        !          15135: *
        !          15136: {EVLP3{EXI{{{{RETURN TO EVALP CALLER
        !          15137: *
        !          15138: *      HERE FOR FAILURE DURING EVALUATION
        !          15139: *
        !          15140: {EVLP4{MOV{(SP)+{PMHBS{{RESTORE HISTORY STACK BASE POINTER
        !          15141: {{MOV{(SP)+{PMDFL{{RESTORE DOT FLAG
        !          15142: {{MOV{(SP)+{PMSSL{{RESTORE SUBJECT STRING LENGTH
        !          15143: {{MOV{(SP)+{R$PMS{{RESTORE SUBJECT STRING POINTER
        !          15144: {{ADD{#4*NUM02{SP{{REMOVE NODE PTR, CURSOR
        !          15145: {{EXI{1{{{TAKE FAILURE EXIT
        !          15146: {{ENP{{{{END PROCEDURE EVALP
        !          15147: {{EJC{{{{
        !          15148: *
        !          15149: *      EVALS -- EVALUATE STRING ARGUMENT
        !          15150: *
        !          15151: *      EVALS IS USED BY SPAN, ANY, NOTANY, BREAK, BREAKX WHEN
        !          15152: *      THEY ARE PASSED AN EXPRESSION ARGUMENT.
        !          15153: *
        !          15154: *      (XR)                  NODE POINTER
        !          15155: *      (WB)                  CURSOR
        !          15156: *      JSR  EVALS            CALL TO EVALUATE STRING
        !          15157: *      PPM  LOC              TRANSFER LOC FOR NON-STRING ARG
        !          15158: *      PPM  LOC              TRANSFER LOC FOR EVALUATION FAILURE
        !          15159: *      PPM  LOC              TRANSFER LOC FOR SUCCESSFUL EVAL
        !          15160: *      (THE NORMAL RETURN IS NEVER TAKEN)
        !          15161: *      (XR)                  PTR TO NODE WITH PARMS SET
        !          15162: *      (XL,WC,RA)            DESTROYED
        !          15163: *
        !          15164: *      ON RETURN, THE NODE POINTED TO HAS A CHARACTER TABLE
        !          15165: *      POINTER IN PARM1 AND A BIT MASK IN PARM2. THE PROPER
        !          15166: *      SUCCESSOR IS STORED IN PTHEN OF THIS NODE. THUS IT IS
        !          15167: *      OK FOR MERGING WITH THE NORMAL (MULTI-CHAR STRING) CASE.
        !          15168: *
        !          15169: {EVALS{PRC{R{3{{ENTRY POINT (RECURSIVE)
        !          15170: {{JSR{EVALP{{{EVALUATE EXPRESSION
        !          15171: {{PPM{EVLS1{{{JUMP IF EVALUATION FAILS
        !          15172: {{MOV{4*PTHEN(R9){-(SP){{SAVE SUCCESSOR POINTER
        !          15173: {{MOV{R7{-(SP){{SAVE CURSOR
        !          15174: {{MOV{R10{-(SP){{STACK RESULT PTR FOR PATST
        !          15175: {{ZER{R7{{{DUMMY PCODE FOR ONE CHAR STRING
        !          15176: {{ZER{R8{{{DUMMY PCODE FOR EXPRESSION ARG
        !          15177: {{MOV{#P$BRK{R10{{APPROPRIATE PCODE FOR OUR USE
        !          15178: {{JSR{PATST{{{CALL ROUTINE TO BUILD NODE
        !          15179: {{PPM{EVLS2{{{JUMP IF NOT STRING
        !          15180: {{MOV{(SP)+{R7{{RESTORE CURSOR
        !          15181: {{MOV{(SP)+{4*PTHEN(R9){{STORE SUCCESSOR POINTER
        !          15182: {{EXI{3{{{TAKE SUCCESS RETURN
        !          15183: *
        !          15184: *      HERE IF EVALUATION FAILS
        !          15185: *
        !          15186: {EVLS1{EXI{2{{{TAKE FAILURE RETURN
        !          15187: *
        !          15188: *      HERE IF ARGUMENT IS NOT STRING
        !          15189: *
        !          15190: {EVLS2{ADD{#4*NUM02{SP{{POP SUCCESSOR AND CURSOR
        !          15191: {{EXI{1{{{TAKE NON-STRING ERROR EXIT
        !          15192: {{ENP{{{{END PROCEDURE EVALS
        !          15193: {{EJC{{{{
        !          15194: *
        !          15195: *      EVALX -- EVALUATE EXPRESSION
        !          15196: *
        !          15197: *      EVALX IS CALLED TO EVALUATE AN EXPRESSION
        !          15198: *
        !          15199: *      (XR)                  POINTER TO EXBLK OR SEBLK
        !          15200: *      (WB)                  0 IF BY VALUE, 1 IF BY NAME
        !          15201: *      JSR  EVALX            CALL TO EVALUATE EXPRESSION
        !          15202: *      PPM  LOC              TRANSFER LOC IF EVALUATION FAILS
        !          15203: *      (XR)                  RESULT IF CALLED BY VALUE
        !          15204: *      (XL,WA)               RESULT NAME BASE,OFFSET IF BY NAME
        !          15205: *      (XR)                  DESTROYED (NAME CASE ONLY)
        !          15206: *      (XL,WA)               DESTROYED (VALUE CASE ONLY)
        !          15207: *      (WB,WC,RA)            DESTROYED
        !          15208: *
        !          15209: {EVALX{PRC{R{1{{ENTRY POINT, RECURSIVE
        !          15210: {{BEQ{(R9){#B$EXL{EVLX2{JUMP IF EXBLK CASE
        !          15211: *
        !          15212: *      HERE FOR SEBLK
        !          15213: *
        !          15214: {{MOV{4*SEVAR(R9){R10{{LOAD VRBLK POINTER (NAME BASE)
        !          15215: {{MOV{#4*VRVAL{R6{{SET NAME OFFSET
        !          15216: {{BNZ{R7{EVLX1{{JUMP IF CALLED BY NAME
        !          15217: {{JSR{ACESS{{{CALL ROUTINE TO ACCESS VALUE
        !          15218: {{PPM{EVLX9{{{JUMP IF FAILURE ON ACCESS
        !          15219: *
        !          15220: *      MERGE HERE TO EXIT FOR SEBLK CASE
        !          15221: *
        !          15222: {EVLX1{EXI{{{{RETURN TO EVALX CALLER
        !          15223: {{EJC{{{{
        !          15224: *
        !          15225: *      EVALX (CONTINUED)
        !          15226: *
        !          15227: *      HERE FOR FULL EXPRESSION (EXBLK) CASE
        !          15228: *
        !          15229: *      IF AN ERROR OCCURS IN THE EXPRESSION CODE AT EXECUTION
        !          15230: *      TIME, CONTROL IS PASSED VIA ERROR SECTION TO EXFAL
        !          15231: *      WITHOUT RETURNING TO THIS ROUTINE.
        !          15232: *      THE FOLLOWING ENTRIES ARE MADE ON THE STACK BEFORE
        !          15233: *      GIVING CONTROL TO THE EXPRESSION CODE
        !          15234: *
        !          15235: *                            EVALX RETURN POINT
        !          15236: *                            SAVED VALUE OF R$COD
        !          15237: *                            CODE POINTER (-R$COD)
        !          15238: *                            SAVED VALUE OF FLPTR
        !          15239: *                            0 IF BY VALUE, 1 IF BY NAME
        !          15240: *      FLPTR --------------- *EXFLC, FAIL OFFSET IN EXBLK
        !          15241: *
        !          15242: {EVLX2{SCP{R8{{{GET CODE POINTER
        !          15243: {{MOV{R$COD{R6{{LOAD CODE BLOCK POINTER
        !          15244: {{SUB{R6{R8{{GET CODE POINTER AS OFFSET
        !          15245: {{MOV{R6{-(SP){{STACK OLD CODE BLOCK POINTER
        !          15246: {{MOV{R8{-(SP){{STACK RELATIVE CODE OFFSET
        !          15247: {{MOV{FLPTR{-(SP){{STACK OLD FAILURE POINTER
        !          15248: {{MOV{R7{-(SP){{STACK NAME/VALUE INDICATOR
        !          15249: {{MOV{#4*EXFLC{-(SP){{STACK NEW FAIL OFFSET
        !          15250: {{MOV{FLPTR{GTCEF{{KEEP IN CASE OF ERROR
        !          15251: {{MOV{R$COD{R$GTC{{KEEP CODE BLOCK POINTER SIMILARLY
        !          15252: {{MOV{SP{FLPTR{{SET NEW FAILURE POINTER
        !          15253: {{MOV{R9{R$COD{{SET NEW CODE BLOCK POINTER
        !          15254: {{MOV{KVSTN{4*EXSTM(R9){{REMEMBER STMNT NUMBER
        !          15255: {{ADD{#4*EXCOD{R9{{POINT TO FIRST CODE WORD
        !          15256: {{LCP{R9{{{SET CODE POINTER
        !          15257: {{BNE{STAGE{#STGXT{EXITS{JUMP IF NOT EXECUTION TIME
        !          15258: {{MOV{#STGEE{STAGE{{EVALUATING EXPRESSION
        !          15259: {{BRN{EXITS{{{JUMP TO EXECUTE FIRST CODE WORD
        !          15260: {{EJC{{{{
        !          15261: *
        !          15262: *      EVALX (CONTINUED)
        !          15263: *
        !          15264: *      COME HERE IF SUCCESSFUL RETURN BY VALUE (SEE O$RVL)
        !          15265: *
        !          15266: {EVLX3{MOV{(SP)+{R9{{LOAD VALUE
        !          15267: {{BZE{4*1(SP){EVLX5{{JUMP IF CALLED BY VALUE
        !          15268: {{ERB{249{EXPRESSION{{EVALUATED BY NAME RETURNED VALUE
        !          15269: *
        !          15270: *      HERE FOR EXPRESSION RETURNING BY NAME (SEE O$RNM)
        !          15271: *
        !          15272: {EVLX4{MOV{(SP)+{R6{{LOAD NAME OFFSET
        !          15273: {{MOV{(SP)+{R10{{LOAD NAME BASE
        !          15274: {{BNZ{4*1(SP){EVLX5{{JUMP IF CALLED BY NAME
        !          15275: {{JSR{ACESS{{{ELSE ACCESS VALUE FIRST
        !          15276: {{PPM{EVLX6{{{JUMP IF FAILURE DURING ACCESS
        !          15277: *
        !          15278: *      HERE AFTER LOADING CORRECT RESULT INTO XR OR XL,WA
        !          15279: *
        !          15280: {EVLX5{ZER{R7{{{NOTE SUCCESSFUL
        !          15281: {{BRN{EVLX7{{{MERGE
        !          15282: *
        !          15283: *      HERE FOR FAILURE IN EXPRESSION EVALUATION (SEE O$FEX)
        !          15284: *
        !          15285: {EVLX6{MNZ{R7{{{NOTE UNSUCCESSFUL
        !          15286: *
        !          15287: *      RESTORE ENVIRONMENT
        !          15288: *
        !          15289: {EVLX7{BNE{STAGE{#STGEE{EVLX8{SKIP IF WAS NOT PREVIOUSLY XT
        !          15290: {{MOV{#STGXT{STAGE{{EXECUTE TIME
        !          15291: *
        !          15292: *      MERGE WITH STAGE SET UP
        !          15293: *
        !          15294: {EVLX8{ADD{#4*NUM02{SP{{POP NAME/VALUE INDICATOR, *EXFAL
        !          15295: {{MOV{(SP)+{FLPTR{{RESTORE OLD FAILURE POINTER
        !          15296: {{MOV{(SP)+{R8{{LOAD CODE OFFSET
        !          15297: {{ADD{(SP){R8{{MAKE CODE POINTER ABSOLUTE
        !          15298: {{MOV{(SP)+{R$COD{{RESTORE OLD CODE BLOCK POINTER
        !          15299: {{LCP{R8{{{RESTORE OLD CODE POINTER
        !          15300: {{BZE{R7{EVLX1{{JUMP FOR SUCCESSFUL RETURN
        !          15301: *
        !          15302: *      MERGE HERE FOR FAILURE IN SEBLK CASE
        !          15303: *
        !          15304: {EVLX9{EXI{1{{{TAKE FAILURE EXIT
        !          15305: {{ENP{{{{END OF PROCEDURE EVALX
        !          15306: {{EJC{{{{
        !          15307: *
        !          15308: *      EXBLD -- BUILD EXBLK
        !          15309: *
        !          15310: *      EXBLD IS USED TO BUILD AN EXPRESSION BLOCK FROM THE
        !          15311: *      CODE COMPILED MOST RECENTLY IN THE CURRENT CCBLK.
        !          15312: *
        !          15313: *      (XL)                  OFFSET IN CCBLK TO START OF CODE
        !          15314: *      (WB)                  INTEGER IN RANGE 0 LE N LE MXLEN
        !          15315: *      JSR  EXBLD            CALL TO BUILD EXBLK
        !          15316: *      (XR)                  PTR TO CONSTRUCTED EXBLK
        !          15317: *      (WA,WB,XL)            DESTROYED
        !          15318: *
        !          15319: {EXBLD{PRC{E{0{{ENTRY POINT
        !          15320: {{MOV{R10{R6{{COPY OFFSET TO START OF CODE
        !          15321: {{SUB{#4*EXCOD{R6{{CALC REDUCTION IN OFFSET IN EXBLK
        !          15322: {{MOV{R6{-(SP){{STACK FOR LATER
        !          15323: {{MOV{CWCOF{R6{{LOAD FINAL OFFSET
        !          15324: {{SUB{R10{R6{{COMPUTE LENGTH OF CODE
        !          15325: {{ADD{#4*EXSI${R6{{ADD SPACE FOR STANDARD FIELDS
        !          15326: {{JSR{ALLOC{{{ALLOCATE SPACE FOR EXBLK
        !          15327: {{MOV{R9{-(SP){{SAVE POINTER TO EXBLK
        !          15328: {{MOV{#B$EXL{4*EXTYP(R9){{STORE TYPE WORD
        !          15329: {{ZER{4*EXSTM(R9){{{ZEROISE STMNT NUMBER FIELD
        !          15330: {{MOV{R6{4*EXLEN(R9){{STORE LENGTH
        !          15331: {{MOV{#OFEX${4*EXFLC(R9){{STORE FAILURE WORD
        !          15332: {{ADD{#4*EXSI${R9{{SET XR FOR SYSMW
        !          15333: {{MOV{R10{CWCOF{{RESET OFFSET TO START OF CODE
        !          15334: {{ADD{R$CCB{R10{{POINT TO START OF CODE
        !          15335: {{SUB{#4*EXSI${R6{{LENGTH OF CODE TO MOVE
        !          15336: {{MOV{R6{-(SP){{STACK LENGTH OF CODE
        !          15337: {{MVW{{{{MOVE CODE TO EXBLK
        !          15338: {{MOV{(SP)+{R6{{GET LENGTH OF CODE
        !          15339: {{BTW{R6{{{CONVERT BYTE COUNT TO WORD COUNT
        !          15340: {{LCT{R6{R6{{PREPARE COUNTER FOR LOOP
        !          15341: {{MOV{(SP){R10{{COPY EXBLK PTR, DONT UNSTACK
        !          15342: {{ADD{#4*EXCOD{R10{{POINT TO CODE ITSELF
        !          15343: {{MOV{4*1(SP){R7{{GET REDUCTION IN OFFSET
        !          15344: *
        !          15345: *      THIS LOOP SEARCHES FOR NEGATION AND SELECTION CODE SO
        !          15346: *      THAT THE OFFSETS COMPUTED WHILST CODE WAS IN CODE BLOCK
        !          15347: *      CAN BE TRANSFORMED TO REDUCED VALUES APPLICABLE IN AN
        !          15348: *      EXBLK.
        !          15349: *
        !          15350: {EXBL1{MOV{(R10)+{R9{{GET NEXT CODE WORD
        !          15351: {{BEQ{R9{#OSLA${EXBL3{JUMP IF SELECTION FOUND
        !          15352: {{BEQ{R9{#ONTA${EXBL3{JUMP IF NEGATION FOUND
        !          15353: {{BCT{R6{EXBL1{{LOOP TO END OF CODE
        !          15354: *
        !          15355: *      NO SELECTION FOUND OR MERGE TO EXIT ON TERMINATION
        !          15356: *
        !          15357: {EXBL2{MOV{(SP)+{R9{{POP EXBLK PTR INTO XR
        !          15358: {{MOV{(SP)+{R10{{POP REDUCTION CONSTANT
        !          15359: {{EXI{{{{RETURN TO CALLER
        !          15360: {{EJC{{{{
        !          15361: *
        !          15362: *      EXBLD (CONTINUED)
        !          15363: *
        !          15364: *      SELECTION OR NEGATION FOUND
        !          15365: *      REDUCE THE OFFSETS AS NEEDED. OFFSETS OCCUR IN WORDS
        !          15366: *      FOLLOWING CODE WORDS -
        !          15367: *           =ONTA$, =OSLA$, =OSLB$, =OSLC$
        !          15368: *
        !          15369: {EXBL3{SUB{R7{(R10)+{{ADJUST OFFSET
        !          15370: {{BCT{R6{EXBL4{{DECREMENT COUNT
        !          15371: *
        !          15372: {EXBL4{BCT{R6{EXBL5{{DECREMENT COUNT
        !          15373: *
        !          15374: *      CONTINUE SEARCH FOR MORE OFFSETS
        !          15375: *
        !          15376: {EXBL5{MOV{(R10)+{R9{{GET NEXT CODE WORD
        !          15377: {{BEQ{R9{#OSLA${EXBL3{JUMP IF OFFSET FOUND
        !          15378: {{BEQ{R9{#OSLB${EXBL3{JUMP IF OFFSET FOUND
        !          15379: {{BEQ{R9{#OSLC${EXBL3{JUMP IF OFFSET FOUND
        !          15380: {{BEQ{R9{#ONTA${EXBL3{JUMP IF OFFSET FOUND
        !          15381: {{BCT{R6{EXBL5{{LOOP
        !          15382: {{BRN{EXBL2{{{MERGE TO RETURN
        !          15383: {{ENP{{{{END PROCEDURE EXBLD
        !          15384: {{EJC{{{{
        !          15385: *
        !          15386: *      EXPAN -- ANALYZE EXPRESSION
        !          15387: *
        !          15388: *      THE EXPRESSION ANALYZER (EXPAN) PROCEDURE IS USED TO SCAN
        !          15389: *      AN EXPRESSION AND CONVERT IT INTO A TREE REPRESENTATION.
        !          15390: *      SEE DESCRIPTIONS OF CMBLK, CUBLK, CBBLK IN THE STRUCTURES
        !          15391: *      SECTION FOR DETAILED FORMAT OF TREE BLOCKS.
        !          15392: *
        !          15393: *      THE ANALYZER USES A SIMPLE PRECEDENCE SCHEME IN WHICH
        !          15394: *      OPERANDS AND OPERATORS ARE PLACED ON A SINGLE STACK
        !          15395: *      AND CONDENSATIONS ARE MADE WHEN LOW PRECEDENCE OPERATORS
        !          15396: *      ARE STACKED AFTER A HIGHER PRECEDENCE OPERATOR. A GLOBAL
        !          15397: *      VARIABLE (IN WB) KEEPS TRACK OF THE LEVEL AS FOLLOWS.
        !          15398: *
        !          15399: *      0    SCANNING OUTER LEVEL OF STATEMENT OR EXPRESSION
        !          15400: *      1    SCANNING OUTER LEVEL OF NORMAL GOTO
        !          15401: *      2    SCANNING OUTER LEVEL OF DIRECT GOTO
        !          15402: *      3    SCANNING INSIDE ARRAY BRACKETS
        !          15403: *      4    SCANNING INSIDE GROUPING PARENTHESES
        !          15404: *      5    SCANNING INSIDE FUNCTION PARENTHESES
        !          15405: *
        !          15406: *      THIS VARIABLE IS SAVED ON THE STACK ON ENCOUNTERING A
        !          15407: *      GROUPING AND RESTORED AT THE END OF THE GROUPING.
        !          15408: *
        !          15409: *      ANOTHER GLOBAL VARIABLE (IN WC) COUNTS THE NUMBER OF
        !          15410: *      ITEMS AT ONE GROUPING LEVEL AND IS INCREMENTED FOR EACH
        !          15411: *      COMMA ENCOUNTERED. IT IS STACKED WITH THE LEVEL INDICATOR
        !          15412: *
        !          15413: *      THE SCAN IS CONTROLLED BY A THREE STATE FINITE MACHINE.
        !          15414: *      A GLOBAL VARIABLE STORED IN WA IS THE CURRENT STATE.
        !          15415: *
        !          15416: *      WA=0                  NOTHING SCANNED AT THIS LEVEL
        !          15417: *      WA=1                  OPERAND EXPECTED
        !          15418: *      WA=2                  OPERATOR EXPECTED
        !          15419: *
        !          15420: *      (WB)                  CALL TYPE (SEE BELOW)
        !          15421: *      JSR  EXPAN            CALL TO ANALYZE EXPRESSION
        !          15422: *      (XR)                  POINTER TO RESULTING TREE
        !          15423: *      (XL,WA,WB,WC,RA)      DESTROYED
        !          15424: *
        !          15425: *      THE ENTRY VALUE OF WB INDICATES THE CALL TYPE AS FOLLOWS.
        !          15426: *
        !          15427: *      0    SCANNING EITHER THE MAIN BODY OF A STATEMENT OR THE
        !          15428: *           TEXT OF AN EXPRESSION (FROM EVAL CALL). VALID
        !          15429: *           TERMINATORS ARE COLON, SEMICOLON. THE RESCAN FLAG IS
        !          15430: *           SET TO RETURN THE TERMINATOR ON THE NEXT SCANE CALL.
        !          15431: *
        !          15432: *      1    SCANNING A NORMAL GOTO. THE ONLY VALID
        !          15433: *           TERMINATOR IS A RIGHT PAREN.
        !          15434: *
        !          15435: *      2    SCANNING A DIRECT GOTO. THE ONLY VALID
        !          15436: *           TERMINATOR IS A RIGHT BRACKET.
        !          15437: {{EJC{{{{
        !          15438: *
        !          15439: *      EXPAN (CONTINUED)
        !          15440: *
        !          15441: *      ENTRY POINT
        !          15442: *
        !          15443: {EXPAN{PRC{E{0{{ENTRY POINT
        !          15444: {{ZER{-(SP){{{SET TOP OF STACK INDICATOR
        !          15445: {{ZER{R6{{{SET INITIAL STATE TO ZERO
        !          15446: {{ZER{R8{{{ZERO COUNTER VALUE
        !          15447: *
        !          15448: *      LOOP HERE FOR SUCCESSIVE ENTRIES
        !          15449: *
        !          15450: {EXP01{JSR{SCANE{{{SCAN NEXT ELEMENT
        !          15451: {{ADD{R6{R10{{ADD STATE TO SYNTAX CODE
        !          15452: {{BSW{R10{T$NES{{SWITCH ON ELEMENT TYPE/STATE
        !          15453: {{IFF{T$UO0{EXP27{{UNOP, S=0
        !          15454: {{IFF{T$UO1{EXP27{{UNOP, S=1
        !          15455: {{IFF{T$UO2{EXP04{{UNOP, S=2
        !          15456: {{IFF{T$LP0{EXP06{{LEFT PAREN, S=0
        !          15457: {{IFF{T$LP1{EXP06{{LEFT PAREN, S=1
        !          15458: {{IFF{T$LP2{EXP04{{LEFT PAREN, S=2
        !          15459: {{IFF{T$LB0{EXP08{{LEFT BRKT, S=0
        !          15460: {{IFF{T$LB1{EXP08{{LEFT BRKT, S=1
        !          15461: {{IFF{T$LB2{EXP09{{LEFT BRKT, S=2
        !          15462: {{IFF{T$CM0{EXP02{{COMMA, S=0
        !          15463: {{IFF{T$CM1{EXP05{{COMMA, S=1
        !          15464: {{IFF{T$CM2{EXP11{{COMMA, S=2
        !          15465: {{IFF{T$FN0{EXP10{{FUNCTION, S=0
        !          15466: {{IFF{T$FN1{EXP10{{FUNCTION, S=1
        !          15467: {{IFF{T$FN2{EXP04{{FUNCTION, S=2
        !          15468: {{IFF{T$VA0{EXP03{{VARIABLE, S=0
        !          15469: {{IFF{T$VA1{EXP03{{VARIABLE, STATE ONE
        !          15470: {{IFF{T$VA2{EXP04{{VARIABLE, S=2
        !          15471: {{IFF{T$CO0{EXP03{{CONSTANT, S=0
        !          15472: {{IFF{T$CO1{EXP03{{CONSTANT, S=1
        !          15473: {{IFF{T$CO2{EXP04{{CONSTANT, S=2
        !          15474: {{IFF{T$BO0{EXP05{{BINOP, S=0
        !          15475: {{IFF{T$BO1{EXP05{{BINOP, S=1
        !          15476: {{IFF{T$BO2{EXP26{{BINOP, S=2
        !          15477: {{IFF{T$RP0{EXP02{{RIGHT PAREN, S=0
        !          15478: {{IFF{T$RP1{EXP05{{RIGHT PAREN, S=1
        !          15479: {{IFF{T$RP2{EXP12{{RIGHT PAREN, S=2
        !          15480: {{IFF{T$RB0{EXP02{{RIGHT BRKT, S=0
        !          15481: {{IFF{T$RB1{EXP05{{RIGHT BRKT, S=1
        !          15482: {{IFF{T$RB2{EXP18{{RIGHT BRKT, S=2
        !          15483: {{IFF{T$CL0{EXP02{{COLON, S=0
        !          15484: {{IFF{T$CL1{EXP05{{COLON, S=1
        !          15485: {{IFF{T$CL2{EXP19{{COLON, S=2
        !          15486: {{IFF{T$SM0{EXP02{{SEMICOLON, S=0
        !          15487: {{IFF{T$SM1{EXP05{{SEMICOLON, S=1
        !          15488: {{IFF{T$SM2{EXP19{{SEMICOLON, S=2
        !          15489: {{ESW{{{{END SWITCH ON ELEMENT TYPE/STATE
        !          15490: {{EJC{{{{
        !          15491: *
        !          15492: *      EXPAN (CONTINUED)
        !          15493: *
        !          15494: *      HERE FOR RBR,RPR,COL,SMC,CMA IN STATE 0
        !          15495: *
        !          15496: *      SET TO RESCAN THE TERMINATOR ENCOUNTERED AND CREATE
        !          15497: *      A NULL CONSTANT (CASE OF OMITTED NULL)
        !          15498: *
        !          15499: {EXP02{MNZ{SCNRS{{{SET TO RESCAN ELEMENT
        !          15500: {{MOV{#NULLS{R9{{POINT TO NULL, MERGE
        !          15501: *
        !          15502: *      HERE FOR VAR OR CON IN STATES 0,1
        !          15503: *
        !          15504: *      STACK THE VARIABLE/CONSTANT AND SET STATE=2
        !          15505: *
        !          15506: {EXP03{MOV{R9{-(SP){{STACK POINTER TO OPERAND
        !          15507: {{MOV{#NUM02{R6{{SET STATE 2
        !          15508: {{BRN{EXP01{{{JUMP FOR NEXT ELEMENT
        !          15509: *
        !          15510: *      HERE FOR VAR,CON,LPR,FNC,UOP IN STATE 2
        !          15511: *
        !          15512: *      WE RESCAN THE ELEMENT AND CREATE A CONCATENATION OPERATOR
        !          15513: *      THIS IS THE CASE OF THE BLANK CONCATENATION OPERATOR.
        !          15514: *
        !          15515: {EXP04{MNZ{SCNRS{{{SET TO RESCAN ELEMENT
        !          15516: {{MOV{#OPDVC{R9{{POINT TO CONCAT OPERATOR DV
        !          15517: {{BZE{R7{EXP4A{{OK IF AT TOP LEVEL
        !          15518: {{MOV{#OPDVP{R9{{ELSE POINT TO UNMISTAKABLE CONCAT.
        !          15519: *
        !          15520: *      MERGE HERE WHEN XR SET UP WITH PROPER CONCATENATION DVBLK
        !          15521: *
        !          15522: {EXP4A{BNZ{SCNBL{EXP26{{MERGE BOP IF BLANKS, ELSE ERROR
        !          15523: {{DCV{SCNSE{{{ADJUST START OF ELEMENT LOCATION
        !          15524: {{ERB{220{SYNTAX{{ERROR. MISSING OPERATOR
        !          15525: *
        !          15526: *      HERE FOR CMA,RPR,RBR,COL,SMC,BOP(S=1) BOP(S=0)
        !          15527: *
        !          15528: *      THIS IS AN ERRONOUS CONTRUCTION
        !          15529: *
        !          15530: {EXP05{DCV{SCNSE{{{ADJUST START OF ELEMENT LOCATION
        !          15531: {{ERB{221{SYNTAX{{ERROR. MISSING OPERAND
        !          15532: *
        !          15533: *      HERE FOR LPR (S=0,1)
        !          15534: *
        !          15535: {EXP06{MOV{#NUM04{R10{{SET NEW LEVEL INDICATOR
        !          15536: {{ZER{R9{{{SET ZERO VALUE FOR CMOPN
        !          15537: {{EJC{{{{
        !          15538: *
        !          15539: *      EXPAN (CONTINUED)
        !          15540: *
        !          15541: *      MERGE HERE TO STORE OLD LEVEL ON STACK AND START NEW ONE
        !          15542: *
        !          15543: {EXP07{MOV{R9{-(SP){{STACK CMOPN VALUE
        !          15544: {{MOV{R8{-(SP){{STACK OLD COUNTER
        !          15545: {{MOV{R7{-(SP){{STACK OLD LEVEL INDICATOR
        !          15546: {{CHK{{{{CHECK FOR STACK OVERFLOW
        !          15547: {{ZER{R6{{{SET NEW STATE TO ZERO
        !          15548: {{MOV{R10{R7{{SET NEW LEVEL INDICATOR
        !          15549: {{MOV{#NUM01{R8{{INITIALIZE NEW COUNTER
        !          15550: {{BRN{EXP01{{{JUMP TO SCAN NEXT ELEMENT
        !          15551: *
        !          15552: *      HERE FOR LBR (S=0,1)
        !          15553: *
        !          15554: *      THIS IS AN ILLEGAL USE OF LEFT BRACKET
        !          15555: *
        !          15556: {EXP08{ERB{222{SYNTAX{{ERROR. INVALID USE OF LEFT BRACKET
        !          15557: *
        !          15558: *      HERE FOR LBR (S=2)
        !          15559: *
        !          15560: *      SET NEW LEVEL AND START TO SCAN SUBSCRIPTS
        !          15561: *
        !          15562: {EXP09{MOV{(SP)+{R9{{LOAD ARRAY PTR FOR CMOPN
        !          15563: {{MOV{#NUM03{R10{{SET NEW LEVEL INDICATOR
        !          15564: {{BRN{EXP07{{{JUMP TO STACK OLD AND START NEW
        !          15565: *
        !          15566: *      HERE FOR FNC (S=0,1)
        !          15567: *
        !          15568: *      STACK OLD LEVEL AND START TO SCAN ARGUMENTS
        !          15569: *
        !          15570: {EXP10{MOV{#NUM05{R10{{SET NEW LEV INDIC (XR=VRBLK=CMOPN)
        !          15571: {{BRN{EXP07{{{JUMP TO STACK OLD AND START NEW
        !          15572: *
        !          15573: *      HERE FOR CMA (S=2)
        !          15574: *
        !          15575: *      INCREMENT ARGUMENT COUNT AND CONTINUE
        !          15576: *
        !          15577: {EXP11{ICV{R8{{{INCREMENT COUNTER
        !          15578: {{JSR{EXPDM{{{DUMP OPERATORS AT THIS LEVEL
        !          15579: {{ZER{-(SP){{{SET NEW LEVEL FOR PARAMETER
        !          15580: {{ZER{R6{{{SET NEW STATE
        !          15581: {{BGT{R7{#NUM02{EXP01{LOOP BACK UNLESS OUTER LEVEL
        !          15582: {{ERB{223{SYNTAX{{ERROR. INVALID USE OF COMMA
        !          15583: {{EJC{{{{
        !          15584: *
        !          15585: *      EXPAN (CONTINUED)
        !          15586: *
        !          15587: *      HERE FOR RPR (S=2)
        !          15588: *
        !          15589: *      AT OUTER LEVEL IN A NORMAL GOTO THIS IS A TERMINATOR
        !          15590: *      OTHERWISE IT MUST TERMINATE A FUNCTION OR GROUPING
        !          15591: *
        !          15592: {EXP12{BEQ{R7{#NUM01{EXP20{END OF NORMAL GOTO
        !          15593: {{BEQ{R7{#NUM05{EXP13{END OF FUNCTION ARGUMENTS
        !          15594: {{BEQ{R7{#NUM04{EXP14{END OF GROUPING / SELECTION
        !          15595: {{ERB{224{SYNTAX{{ERROR. UNBALANCED RIGHT PARENTHESIS
        !          15596: *
        !          15597: *      HERE AT END OF FUNCTION ARGUMENTS
        !          15598: *
        !          15599: {EXP13{MOV{#C$FNC{R10{{SET CMTYP VALUE FOR FUNCTION
        !          15600: {{BRN{EXP15{{{JUMP TO BUILD CMBLK
        !          15601: *
        !          15602: *      HERE FOR END OF GROUPING
        !          15603: *
        !          15604: {EXP14{BEQ{R8{#NUM01{EXP17{JUMP IF END OF GROUPING
        !          15605: {{MOV{#C$SEL{R10{{ELSE SET CMTYP FOR SELECTION
        !          15606: *
        !          15607: *      MERGE HERE TO BUILD CMBLK FOR LEVEL JUST SCANNED AND
        !          15608: *      TO POP UP TO THE PREVIOUS SCAN LEVEL BEFORE CONTINUING.
        !          15609: *
        !          15610: {EXP15{JSR{EXPDM{{{DUMP OPERATORS AT THIS LEVEL
        !          15611: {{MOV{R8{R6{{COPY COUNT
        !          15612: {{ADD{#CMVLS{R6{{ADD FOR STANDARD FIELDS AT START
        !          15613: {{WTB{R6{{{CONVERT LENGTH TO BYTES
        !          15614: {{JSR{ALLOC{{{ALLOCATE SPACE FOR CMBLK
        !          15615: {{MOV{#B$CMT{(R9){{STORE TYPE CODE FOR CMBLK
        !          15616: {{MOV{R10{4*CMTYP(R9){{STORE CMBLK NODE TYPE INDICATOR
        !          15617: {{MOV{R6{4*CMLEN(R9){{STORE LENGTH
        !          15618: {{ADD{R6{R9{{POINT PAST END OF BLOCK
        !          15619: {{LCT{R8{R8{{SET LOOP COUNTER
        !          15620: *
        !          15621: *      LOOP TO MOVE REMAINING WORDS TO CMBLK
        !          15622: *
        !          15623: {EXP16{MOV{(SP)+{-(R9){{MOVE ONE OPERAND PTR FROM STACK
        !          15624: {{MOV{(SP)+{R7{{POP TO OLD LEVEL INDICATOR
        !          15625: {{BCT{R8{EXP16{{LOOP TILL ALL MOVED
        !          15626: {{EJC{{{{
        !          15627: *
        !          15628: *      EXPAN (CONTINUED)
        !          15629: *
        !          15630: *      COMPLETE CMBLK AND STACK POINTER TO IT ON STACK
        !          15631: *
        !          15632: {{SUB{#4*CMVLS{R9{{POINT BACK TO START OF BLOCK
        !          15633: {{MOV{(SP)+{R8{{RESTORE OLD COUNTER
        !          15634: {{MOV{(SP){4*CMOPN(R9){{STORE OPERAND PTR IN CMBLK
        !          15635: {{MOV{R9{(SP){{STACK CMBLK POINTER
        !          15636: {{MOV{#NUM02{R6{{SET NEW STATE
        !          15637: {{BRN{EXP01{{{BACK FOR NEXT ELEMENT
        !          15638: *
        !          15639: *      HERE AT END OF A PARENTHESIZED EXPRESSION
        !          15640: *
        !          15641: {EXP17{JSR{EXPDM{{{DUMP OPERATORS AT THIS LEVEL
        !          15642: {{MOV{(SP)+{R9{{RESTORE XR
        !          15643: {{MOV{(SP)+{R7{{RESTORE OUTER LEVEL
        !          15644: {{MOV{(SP)+{R8{{RESTORE OUTER COUNT
        !          15645: {{MOV{R9{(SP){{STORE OPND OVER UNUSED CMOPN VAL
        !          15646: {{MOV{#NUM02{R6{{SET NEW STATE
        !          15647: {{BRN{EXP01{{{BACK FOR NEXT ELE8ENT
        !          15648: *
        !          15649: *      HERE FOR RBR (S=2)
        !          15650: *
        !          15651: *      AT OUTER LEVEL IN A DIRECT GOTO, THIS IS A TERMINATOR.
        !          15652: *      OTHERWISE IT MUST TERMINATE A SUBSCRIPT LIST.
        !          15653: *
        !          15654: {EXP18{MOV{#C$ARR{R10{{SET CMTYP FOR ARRAY REFERENCE
        !          15655: {{BEQ{R7{#NUM03{EXP15{JUMP TO BUILD CMBLK IF END ARRAYREF
        !          15656: {{BEQ{R7{#NUM02{EXP20{JUMP IF END OF DIRECT GOTO
        !          15657: {{ERB{225{SYNTAX{{ERROR. UNBALANCED RIGHT BRACKET
        !          15658: {{EJC{{{{
        !          15659: *
        !          15660: *      EXPAN (CONTINUED)
        !          15661: *
        !          15662: *      HERE FOR COL,SMC (S=2)
        !          15663: *
        !          15664: *      ERROR UNLESS TERMINATING STATEMENT BODY AT OUTER LEVEL
        !          15665: *
        !          15666: {EXP19{MNZ{SCNRS{{{RESCAN TERMINATOR
        !          15667: {{MOV{R7{R10{{COPY LEVEL INDICATOR
        !          15668: {{BSW{R10{6{{SWITCH ON LEVEL INDICATOR
        !          15669: {{IFF{0{EXP20{{NORMAL OUTER LEVEL
        !          15670: {{IFF{1{EXP22{{FAIL IF NORMAL GOTO
        !          15671: {{IFF{2{EXP23{{FAIL IF DIRECT GOTO
        !          15672: {{IFF{3{EXP24{{FAIL ARRAY BRACKETS
        !          15673: {{IFF{4{EXP21{{FAIL IF IN GROUPING
        !          15674: {{IFF{5{EXP21{{FAIL FUNCTION ARGS
        !          15675: {{ESW{{{{END SWITCH ON LEVEL
        !          15676: *
        !          15677: *      HERE AT NORMAL END OF EXPRESSION
        !          15678: *
        !          15679: {EXP20{JSR{EXPDM{{{DUMP REMAINING OPERATORS
        !          15680: {{MOV{(SP)+{R9{{LOAD TREE POINTER
        !          15681: {{ICA{SP{{{POP OFF BOTTOM OF STACK MARKER
        !          15682: {{EXI{{{{RETURN TO EXPAN CALLER
        !          15683: *
        !          15684: *      MISSING RIGHT PAREN
        !          15685: *
        !          15686: {EXP21{ERB{226{SYNTAX{{ERROR. MISSING RIGHT PAREN
        !          15687: *
        !          15688: *      MISSING RIGHT PAREN IN GOTO FIELD
        !          15689: *
        !          15690: {EXP22{ERB{227{SYNTAX{{ERROR. RIGHT PAREN MISSING FROM GOTO
        !          15691: *
        !          15692: *      MISSING BRACKET IN GOTO
        !          15693: *
        !          15694: {EXP23{ERB{228{SYNTAX{{ERROR. RIGHT BRACKET MISSING FROM GOTO
        !          15695: *
        !          15696: *      MISSING ARRAY BRACKET
        !          15697: *
        !          15698: {EXP24{ERB{229{SYNTAX{{ERROR. MISSING RIGHT ARRAY BRACKET
        !          15699: {{EJC{{{{
        !          15700: *
        !          15701: *      EXPAN (CONTINUED)
        !          15702: *
        !          15703: *      LOOP HERE WHEN AN OPERATOR CAUSES AN OPERATOR DUMP
        !          15704: *
        !          15705: {EXP25{MOV{R9{EXPSV{{
        !          15706: {{JSR{EXPOP{{{POP ONE OPERATOR
        !          15707: {{MOV{EXPSV{R9{{RESTORE OP DV POINTER AND MERGE
        !          15708: *
        !          15709: *      HERE FOR BOP (S=2)
        !          15710: *
        !          15711: *      REMOVE OPERATORS (CONDENSE) FROM STACK UNTIL NO MORE
        !          15712: *      LEFT AT THIS LEVEL OR TOP ONE HAS LOWER PRECEDENCE.
        !          15713: *      LOOP HERE TILL THIS CONDITION IS MET.
        !          15714: *
        !          15715: {EXP26{MOV{4*1(SP){R10{{LOAD OPERATOR DVPTR FROM STACK
        !          15716: {{BLE{R10{#NUM05{EXP27{JUMP IF BOTTOM OF STACK LEVEL
        !          15717: {{BLT{4*DVRPR(R9){4*DVLPR(R10){EXP25{ELSE POP IF NEW PREC IS LO
        !          15718: *
        !          15719: *      HERE FOR UOP (S=0,1)
        !          15720: *
        !          15721: *      BINARY OPERATOR MERGES AFTER PRECEDENCE CHECK
        !          15722: *
        !          15723: *      THE OPERATOR DV IS STORED ON THE STACK AND THE SCAN
        !          15724: *      CONTINUES AFTER SETTING THE SCAN STATE TO ONE.
        !          15725: *
        !          15726: {EXP27{MOV{R9{-(SP){{STACK OPERATOR DVPTR ON STACK
        !          15727: {{CHK{{{{CHECK FOR STACK OVERFLOW
        !          15728: {{MOV{#NUM01{R6{{SET NEW STATE
        !          15729: {{BNE{R9{#OPDVS{EXP01{BACK FOR NEXT ELEMENT UNLESS =
        !          15730: *
        !          15731: *      HERE FOR SPECIAL CASE OF BINARY =. THE SYNTAX ALLOWS A
        !          15732: *      NULL RIGHT ARGUMENT FOR THIS OPERATOR TO BE LEFT
        !          15733: *      OUT. ACCORDINGLY WE RESET TO STATE ZERO TO GET PROPER
        !          15734: *      ACTION ON A TERMINATOR (SUPPLY A NULL CONSTANT).
        !          15735: *
        !          15736: {{ZER{R6{{{SET STATE ZERO
        !          15737: {{BRN{EXP01{{{JUMP FOR NEXT ELEMENT
        !          15738: {{ENP{{{{END PROCEDURE EXPAN
        !          15739: {{EJC{{{{
        !          15740: *
        !          15741: *      EXPAP -- TEST FOR PATTERN MATCH TREE
        !          15742: *
        !          15743: *      EXPAP IS PASSED AN EXPRESSION TREE TO DETERMINE IF IT
        !          15744: *      IS A PATTERN MATCH. THE FOLLOWING ARE RECOGIZED AS
        !          15745: *      MATCHES IN THE CONTEXT OF THIS CALL.
        !          15746: *
        !          15747: *      1)   AN EXPLICIT USE OF BINARY QUESTION MARK
        !          15748: *      2)   A CONCATENATION
        !          15749: *      3)   AN ALTERNATION WHOSE LEFT OPERAND IS A CONCATENATION
        !          15750: *
        !          15751: *      (XR)                  PTR TO EXPAN TREE
        !          15752: *      JSR  EXPAP            CALL TO TEST FOR PATTERN MATCH
        !          15753: *      PPM  LOC              TRANSFER LOC IF NOT A PATTERN MATCH
        !          15754: *      (WA)                  DESTROYED
        !          15755: *      (XR)                  UNCHANGED (IF NOT MATCH)
        !          15756: *      (XR)                  PTR TO BINARY OPERATOR BLK IF MATCH
        !          15757: *
        !          15758: {EXPAP{PRC{E{1{{ENTRY POINT
        !          15759: {{MOV{R10{-(SP){{SAVE XL
        !          15760: {{BNE{(R9){#B$CMT{EXPP2{NO MATCH IF NOT COMPLEX
        !          15761: {{MOV{4*CMTYP(R9){R6{{ELSE LOAD TYPE CODE
        !          15762: {{BEQ{R6{#C$CNC{EXPP1{CONCATENATION IS A MATCH
        !          15763: {{BEQ{R6{#C$PMT{EXPP1{BINARY QUESTION MARK IS A MATCH
        !          15764: {{BNE{R6{#C$ALT{EXPP2{ELSE NOT MATCH UNLESS ALTERNATION
        !          15765: *
        !          15766: *      HERE FOR ALTERNATION. CHANGE (A B) / C TO A QM (B / C)
        !          15767: *
        !          15768: {{MOV{4*CMLOP(R9){R10{{LOAD LEFT OPERAND POINTER
        !          15769: {{BNE{(R10){#B$CMT{EXPP2{NOT MATCH IF LEFT OPND NOT COMPLEX
        !          15770: {{BNE{4*CMTYP(R10){#C$CNC{EXPP2{NOT MATCH IF LEFT OP NOT CONC
        !          15771: {{MOV{4*CMROP(R10){4*CMLOP(R9){{XR POINTS TO (B / C)
        !          15772: {{MOV{R9{4*CMROP(R10){{SET XL OPNDS TO A, (B / C)
        !          15773: {{MOV{R10{R9{{POINT TO THIS ALTERED NODE
        !          15774: *
        !          15775: *      EXIT HERE FOR PATTERN MATCH
        !          15776: *
        !          15777: {EXPP1{MOV{(SP)+{R10{{RESTORE ENTRY XL
        !          15778: {{EXI{{{{GIVE PATTERN MATCH RETURN
        !          15779: *
        !          15780: *      EXIT HERE IF NOT PATTERN MATCH
        !          15781: *
        !          15782: {EXPP2{MOV{(SP)+{R10{{RESTORE ENTRY XL
        !          15783: {{EXI{1{{{GIVE NON-MATCH RETURN
        !          15784: {{ENP{{{{END PROCEDURE EXPAP
        !          15785: {{EJC{{{{
        !          15786: *
        !          15787: *      EXPDM -- DUMP OPERATORS AT CURRENT LEVEL (FOR EXPAN)
        !          15788: *
        !          15789: *      EXPDM USES EXPOP TO CONDENSE ALL OPERATORS AT THIS SYNTAX
        !          15790: *      LEVEL. THE STACK BOTTOM IS RECOGNIZED FROM THE LEVEL
        !          15791: *      VALUE WHICH IS SAVED ON THE TOP OF THE STACK.
        !          15792: *
        !          15793: *      JSR  EXPDM            CALL TO DUMP OPERATORS
        !          15794: *      (XS)                  POPPED AS REQUIRED
        !          15795: *      (XR,WA)               DESTROYED
        !          15796: *
        !          15797: {EXPDM{PRC{N{0{{ENTRY POINT
        !          15798: {{MOV{R10{R$EXS{{SAVE XL VALUE
        !          15799: *
        !          15800: *      LOOP TO DUMP OPERATORS
        !          15801: *
        !          15802: {EXDM1{BLE{4*1(SP){#NUM05{EXDM2{JUMP IF STACK BOTTOM (SAVED LEVEL
        !          15803: {{JSR{EXPOP{{{ELSE POP ONE OPERATOR
        !          15804: {{BRN{EXDM1{{{AND LOOP BACK
        !          15805: *
        !          15806: *      HERE AFTER POPPING ALL OPERATORS
        !          15807: *
        !          15808: {EXDM2{MOV{R$EXS{R10{{RESTORE XL
        !          15809: {{ZER{R$EXS{{{RELEASE SAVE LOCATION
        !          15810: {{EXI{{{{RETURN TO EXPDM CALLER
        !          15811: {{ENP{{{{END PROCEDURE EXPDM
        !          15812: {{EJC{{{{
        !          15813: *
        !          15814: *      EXPOP-- POP OPERATOR (FOR EXPAN)
        !          15815: *
        !          15816: *      EXPOP IS USED BY THE EXPAN ROUTINE TO CONDENSE ONE
        !          15817: *      OPERATOR FROM THE TOP OF THE SYNTAX STACK. AN APPROPRIATE
        !          15818: *      CMBLK IS BUILT FOR THE OPERATOR (UNARY OR BINARY) AND A
        !          15819: *      POINTER TO THIS CMBLK IS STACKED.
        !          15820: *
        !          15821: *      EXPOP IS ALSO USED BY SCNGF (GOTO FIELD SCAN) PROCEDURE
        !          15822: *
        !          15823: *      JSR  EXPOP            CALL TO POP OPERATOR
        !          15824: *      (XS)                  POPPED APPROPRIATELY
        !          15825: *      (XR,XL,WA)            DESTROYED
        !          15826: *
        !          15827: {EXPOP{PRC{N{0{{ENTRY POINT
        !          15828: {{MOV{4*1(SP){R9{{LOAD OPERATOR DV POINTER
        !          15829: {{BEQ{4*DVLPR(R9){#LLUNO{EXPO2{JUMP IF UNARY
        !          15830: *
        !          15831: *      HERE FOR BINARY OPERATOR
        !          15832: *
        !          15833: {{MOV{#4*CMBS${R6{{SET SIZE OF BINARY OPERATOR CMBLK
        !          15834: {{JSR{ALLOC{{{ALLOCATE SPACE FOR CMBLK
        !          15835: {{MOV{(SP)+{4*CMROP(R9){{POP AND STORE RIGHT OPERAND PTR
        !          15836: {{MOV{(SP)+{R10{{POP AND LOAD OPERATOR DV PTR
        !          15837: {{MOV{(SP){4*CMLOP(R9){{STORE LEFT OPERAND POINTER
        !          15838: *
        !          15839: *      COMMON EXIT POINT
        !          15840: *
        !          15841: {EXPO1{MOV{#B$CMT{(R9){{STORE TYPE CODE FOR CMBLK
        !          15842: {{MOV{4*DVTYP(R10){4*CMTYP(R9){{STORE CMBLK NODE TYPE CODE
        !          15843: {{MOV{R10{4*CMOPN(R9){{STORE DVPTR (=PTR TO DAC O$XXX)
        !          15844: {{MOV{R6{4*CMLEN(R9){{STORE CMBLK LENGTH
        !          15845: {{MOV{R9{(SP){{STORE RESULTING NODE PTR ON STACK
        !          15846: {{EXI{{{{RETURN TO EXPOP CALLER
        !          15847: *
        !          15848: *      HERE FOR UNARY OPERATOR
        !          15849: *
        !          15850: {EXPO2{MOV{#4*CMUS${R6{{SET SIZE OF UNARY OPERATOR CMBLK
        !          15851: {{JSR{ALLOC{{{ALLOCATE SPACE FOR CMBLK
        !          15852: {{MOV{(SP)+{4*CMROP(R9){{POP AND STORE OPERAND POINTER
        !          15853: {{MOV{(SP){R10{{LOAD OPERATOR DV POINTER
        !          15854: {{BRN{EXPO1{{{MERGE BACK TO EXIT
        !          15855: {{ENP{{{{END PROCEDURE EXPOP
        !          15856: {{EJC{{{{
        !          15857: *
        !          15858: *      FLSTG -- FOLD STRING TO UPPER CASE
        !          15859: *
        !          15860: *      FLSTG FOLDS A CHARACTER STRING CONTAINING LOWER CASE
        !          15861: *      CHARACCTERS TO ONE CONTAINING UPPER CASE CHARACTERS.
        !          15862: *      FOLDING IS ONLY DONE IF &CASE (KVCAS) IS NOT ZERO.
        !          15863: *
        !          15864: *      (XR)                  STRING ARGUMENT
        !          15865: *      (WA)                  LENGTH OF STRING
        !          15866: *      JSR  FLSTG            CALL TO FOLD STRING
        !          15867: *      (XR)                  RESULT STRING (POSSIBLY ORIGINAL)
        !          15868: *      (WC)                  DESTROYED
        !          15869: *
        !          15870: {FLSTG{PRC{R{0{{ENTRY POINT
        !          15871: {{BZE{KVCAS{FST99{{SKIP IF &CASE IS 0
        !          15872: {{MOV{R10{-(SP){{SAVE XL ACROSS CALL
        !          15873: {{MOV{R9{-(SP){{SAVE ORIGINAL SCBLK PTR
        !          15874: {{JSR{ALOCS{{{ALLOCATE NEW STRING BLOCK
        !          15875: {{MOV{(SP){R10{{POINT TO ORIGINAL SCBLK
        !          15876: {{MOV{R9{-(SP){{SAVE POINTER TO NEW SCBLK
        !          15877: {{PLC{R10{{{POINT TO ORIGINAL CHARS
        !          15878: {{PLC{R9{{{POINT TO NEW CHARS
        !          15879: {{ZER{-(SP){{{INIT DID FOLD FLAG
        !          15880: {{LCT{R8{R8{{LOAD LOOP COUNTER
        !          15881: {FST01{LCH{R6{(R10)+{{LOAD CHARACTER
        !          15882: {{BGT{#CH$$A{R6{FST02{SKIP IF LESS THAN LC A
        !          15883: {{BGT{R6{#CH$$${FST02{SKIP IF GREATER THAN LC Z
        !          15884: {{FLC{R6{{{FOLD CHARACTER TO UPPER CASE
        !          15885: {{MNZ{(SP){{{SET DID FOLD CHARACTER FLAG
        !          15886: {FST02{SCH{R6{(R9)+{{STORE (POSSIBLY FOLDED) CHARACTER
        !          15887: {{BCT{R8{FST01{{LOOP THRU ENTIRE STRING
        !          15888: {{CSC{R9{{{COMPLETE STORE CHARACTERS
        !          15889: {{BNZ{(SP)+{FST10{{SKIP IF FOLDING DONE
        !          15890: {{MOV{(SP)+{DNAMP{{DO NOT NEED NEW SCBLK
        !          15891: {{MOV{(SP)+{R9{{RETURN ORIGINAL SCBLK
        !          15892: {{BRN{FST20{{{MERGE BELOW
        !          15893: {FST10{MOV{(SP)+{R9{{RETURN NEW SCBLK
        !          15894: {{ICA{SP{{{THROW AWAY ORIGINAL SCBLK POINTER
        !          15895: {FST20{MOV{4*SCLEN(R9){R6{{RELOAD STRING LENGTH
        !          15896: {{MOV{(SP)+{R10{{RESTORE XL
        !          15897: {FST99{EXI{{{{RETURN
        !          15898: {{ENP{{{{
        !          15899: {{EJC{{{{
        !          15900: *
        !          15901: *      GBCOL -- PERFORM GARBAGE COLLECTION
        !          15902: *
        !          15903: *      GBCOL PERFORMS A GARBAGE COLLECTION ON THE DYNAMIC REGION
        !          15904: *      ALL BLOCKS WHICH ARE NO LONGER IN USE ARE ELIMINATED
        !          15905: *      BY MOVING BLOCKS WHICH ARE IN USE DOWN AND RESETTING
        !          15906: *      DNAMP, THE POINTER TO THE NEXT AVAILABLE LOCATION.
        !          15907: *
        !          15908: *      (WB)                  MOVE OFFSET (SEE BELOW)
        !          15909: *      JSR  GBCOL            CALL TO COLLECT GARBAGE
        !          15910: *      (XR)                  DESTROYED
        !          15911: *
        !          15912: *      THE FOLLOWING CONDITIONS MUST BE MET AT THE TIME WHEN
        !          15913: *      GBCOL IS CALLED.
        !          15914: *
        !          15915: *      1)   ALL POINTERS TO BLOCKS IN THE DYNAMIC AREA MUST BE
        !          15916: *           ACCESSIBLE TO THE GARBAGE COLLECTOR. THIS MEANS
        !          15917: *           THAT THEY MUST OCCUR IN ONE OF THE FOLLOWING.
        !          15918: *
        !          15919: *           A)               MAIN STACK, WITH CURRENT TOP
        !          15920: *                            ELEMENT BEING INDICATED BY XS
        !          15921: *
        !          15922: *           B)               IN RELOCATABLE FIELDS OF VRBLKS.
        !          15923: *
        !          15924: *           C)               IN REGISTER XL AT THE TIME OF CALL
        !          15925: *
        !          15926: *           E)               IN THE SPECIAL REGION OF WORKING
        !          15927: *                            STORAGE WHERE NAMES BEGIN WITH R$.
        !          15928: *
        !          15929: *      2)   ALL POINTERS MUST POINT TO THE START OF BLOCKS WITH
        !          15930: *           THE SOLE EXCEPTION OF THE CONTENTS OF THE CODE
        !          15931: *           POINTER REGISTER WHICH POINTS INTO THE R$COD BLOCK.
        !          15932: *
        !          15933: *      3)   NO LOCATION WHICH APPEARS TO CONTAIN A POINTER
        !          15934: *           INTO THE DYNAMIC REGION MAY OCCUR UNLESS IT IS IN
        !          15935: *           FACT A POINTER TO THE START OF THE BLOCK. HOWEVER
        !          15936: *           POINTERS OUTSIDE THIS AREA MAY OCCUR AND WILL
        !          15937: *           NOT BE CHANGED BY THE GARBAGE COLLECTOR.
        !          15938: *           IT IS ESPECIALLY IMPORTANT TO MAKE SURE THAT XL
        !          15939: *           DOES NOT CONTAIN A GARBAGE VALUE FROM SOME PROCESS
        !          15940: *           CARRIED OUT BEFORE THE CALL TO THE COLLECTOR.
        !          15941: *
        !          15942: *      GBCOL HAS THE CAPABILITY OF MOVING THE FINAL COMPACTED
        !          15943: *      RESULT UP IN MEMORY (WITH ADDRESSES ADJUSTED ACCORDINGLY)
        !          15944: *      THIS IS USED TO ADD SPACE TO THE STATIC REGION. THE
        !          15945: *      ENTRY VALUE OF WB IS THE NUMBER OF BYTES TO MOVE UP.
        !          15946: *      THE CALLER MUST GUARANTEE THAT THERE IS ENOUGH ROOM.
        !          15947: *      FURTHERMORE THE VALUE IN WB IF IT IS NON-ZERO, MUST BE AT
        !          15948: *      LEAST 256 SO THAT THE MWB INSTRUCTION CONDITIONS ARE MET.
        !          15949: {{EJC{{{{
        !          15950: *
        !          15951: *      GBCOL (CONTINUED)
        !          15952: *
        !          15953: *      THE ALGORITHM, WHICH IS A MODIFICATION OF THE LISP-2
        !          15954: *      GARBAGE COLLECTOR DEVISED BY R.DEWAR AND K.BELCHER
        !          15955: *      TAKES THREE PASSES AS FOLLOWS.
        !          15956: *
        !          15957: *      1)   ALL POINTERS IN MEMORY ARE SCANNED AND BLOCKS IN USE
        !          15958: *           DETERMINED FROM THIS SCAN. NOTE THAT THIS PROCEDURE
        !          15959: *           IS RECURSIVE AND USES THE MAIN STACK FOR LINKAGE.
        !          15960: *           THE MARKING PROCESS IS THUS SIMILAR TO THAT USED IN
        !          15961: *           A STANDARD LISP COLLECTOR. HOWEVER THE METHOD OF
        !          15962: *           ACTUALLY MARKING THE BLOCKS IS DIFFERENT.
        !          15963: *
        !          15964: *           THE FIRST FIELD OF A BLOCK NORMALLY CONTAINS A
        !          15965: *           CODE ENTRY POINT POINTER. SUCH AN ENTRY POINTER
        !          15966: *           CAN BE DISTINGUISHED FROM THE ADDRESS OF ANY POINTER
        !          15967: *           TO BE PROCESSED BY THE COLLECTOR. DURING GARBAGE
        !          15968: *           COLLECTION, THIS WORD IS USED TO BUILD A BACK CHAIN
        !          15969: *           OF POINTERS THROUGH FIELDS WHICH POINT TO THE BLOCK.
        !          15970: *           THE END OF THE CHAIN IS MARKED BY THE OCCURENCE
        !          15971: *           OF THE WORD WHICH USED TO BE IN THE FIRST WORD OF
        !          15972: *           THE BLOCK. THIS BACKCHAIN SERVES BOTH AS A MARK
        !          15973: *           INDICATING THAT THE BLOCK IS IN USE AND AS A LIST OF
        !          15974: *           REFERENCES FOR THE RELOCATION PHASE.
        !          15975: *
        !          15976: *      2)   STORAGE IS SCANNED SEQUENTIALLY TO DISCOVER WHICH
        !          15977: *           BLOCKS ARE CURRENTLY IN USE AS INDICATED BY THE
        !          15978: *           PRESENCE OF A BACKCHAIN. TWO POINTERS ARE MAINTAINED
        !          15979: *           ONE SCANS THROUGH LOOKING AT EACH BLOCK. THE OTHER
        !          15980: *           IS INCREMENTED ONLY FOR BLOCKS FOUND TO BE IN USE.
        !          15981: *           IN THIS WAY, THE EVENTUAL LOCATION OF EACH BLOCK CAN
        !          15982: *           BE DETERMINED WITHOUT ACTUALLY MOVING ANY BLOCKS.
        !          15983: *           AS EACH BLOCK WHICH IS IN USE IS PROCESSED, THE BACK
        !          15984: *           CHAIN IS USED TO RESET ALL POINTERS WHICH POINT TO
        !          15985: *           THIS BLOCK TO CONTAIN ITS NEW ADDRESS, I.E. THE
        !          15986: *           ADDRESS IT WILL OCCUPY AFTER THE BLOCKS ARE MOVED.
        !          15987: *           THE FIRST WORD OF THE BLOCK, TAKEN FROM THE END OF
        !          15988: *           THE CHAIN IS RESTORED AT THIS POINT.
        !          15989: *
        !          15990: *           DURING PASS 2, THE COLLECTOR BUILDS BLOCKS WHICH
        !          15991: *           DESCRIBE THE REGIONS OF STORAGE WHICH ARE TO BE
        !          15992: *           MOVED IN THE THIRD PASS. THERE IS ONE DESCRIPTOR FOR
        !          15993: *           EACH CONTIGUOUS SET OF GOOD BLOCKS. THE DESCRIPTOR
        !          15994: *           IS BUILT JUST BEHIND THE BLOCK TO BE MOVED AND
        !          15995: *           CONTAINS A POINTER TO THE NEXT BLOCK AND THE NUMBER
        !          15996: *           OF WORDS TO BE MOVED.
        !          15997: *
        !          15998: *      3)   IN THE THIRD AND FINAL PASS, THE MOVE DESCRIPTOR
        !          15999: *           BLOCKS BUILT IN PASS TWO ARE USED TO ACTUALLY MOVE
        !          16000: *           THE BLOCKS DOWN TO THE BOTTOM OF THE DYNAMIC REGION.
        !          16001: *           THE COLLECTION IS THEN COMPLETE AND THE NEXT
        !          16002: *           AVAILABLE LOCATION POINTER IS RESET.
        !          16003: {{EJC{{{{
        !          16004: *
        !          16005: *      GBCOL (CONTINUED)
        !          16006: *
        !          16007: {GBCOL{PRC{E{0{{ENTRY POINT
        !          16008: {{BNZ{DMVCH{GBC14{{FAIL IF IN MID-DUMP
        !          16009: {{MNZ{GBCFL{{{NOTE GBCOL ENTERED
        !          16010: {{MOV{R6{GBSVA{{SAVE ENTRY WA
        !          16011: {{MOV{R7{GBSVB{{SAVE ENTRY WB
        !          16012: {{MOV{R8{GBSVC{{SAVE ENTRY WC
        !          16013: {{MOV{R10{-(SP){{SAVE ENTRY XL
        !          16014: {{SCP{R6{{{GET CODE POINTER VALUE
        !          16015: {{SUB{R$COD{R6{{MAKE RELATIVE
        !          16016: {{LCP{R6{{{AND RESTORE
        !          16017: *
        !          16018: *      PROCESS STACK ENTRIES
        !          16019: *
        !          16020: {{MOV{SP{R9{{POINT TO STACK FRONT
        !          16021: {{MOV{STBAS{R10{{POINT PAST END OF STACK
        !          16022: {{BGE{R10{R9{GBC00{OK IF D-STACK
        !          16023: {{MOV{R10{R9{{REVERSE IF ...
        !          16024: {{MOV{SP{R10{{... U-STACK
        !          16025: *
        !          16026: *      PROCESS THE STACK
        !          16027: *
        !          16028: {GBC00{JSR{GBCPF{{{PROCESS POINTERS ON STACK
        !          16029: *
        !          16030: *      PROCESS SPECIAL WORK LOCATIONS
        !          16031: *
        !          16032: {{MOV{#R$AAA{R9{{POINT TO START OF RELOCATABLE LOCS
        !          16033: {{MOV{#R$YYY{R10{{POINT PAST END OF RELOCATABLE LOCS
        !          16034: {{JSR{GBCPF{{{PROCESS WORK FIELDS
        !          16035: *
        !          16036: *      PREPARE TO PROCESS VARIABLE BLOCKS
        !          16037: *
        !          16038: {{MOV{HSHTB{R6{{POINT TO FIRST HASH SLOT POINTER
        !          16039: *
        !          16040: *      LOOP THROUGH HASH SLOTS
        !          16041: *
        !          16042: {GBC01{MOV{R6{R10{{POINT TO NEXT SLOT
        !          16043: {{ICA{R6{{{BUMP BUCKET POINTER
        !          16044: {{MOV{R6{GBCNM{{SAVE BUCKET POINTER
        !          16045: {{EJC{{{{
        !          16046: *
        !          16047: *      GBCOL (CONTINUED)
        !          16048: *
        !          16049: *      LOOP THROUGH VARIABLES ON ONE HASH CHAIN
        !          16050: *
        !          16051: {GBC02{MOV{(R10){R9{{LOAD PTR TO NEXT VRBLK
        !          16052: {{BZE{R9{GBC03{{JUMP IF END OF CHAIN
        !          16053: {{MOV{R9{R10{{ELSE COPY VRBLK POINTER
        !          16054: {{ADD{#4*VRVAL{R9{{POINT TO FIRST RELOC FLD
        !          16055: {{ADD{#4*VRNXT{R10{{POINT PAST LAST (AND TO LINK PTR)
        !          16056: {{JSR{GBCPF{{{PROCESS RELOC FIELDS IN VRBLK
        !          16057: {{BRN{GBC02{{{LOOP BACK FOR NEXT BLOCK
        !          16058: *
        !          16059: *      HERE AT END OF ONE HASH CHAIN
        !          16060: *
        !          16061: {GBC03{MOV{GBCNM{R6{{RESTORE BUCKET POINTER
        !          16062: {{BNE{R6{HSHTE{GBC01{LOOP BACK IF MORE BUCKETS TO GO
        !          16063: {{EJC{{{{
        !          16064: *
        !          16065: *      GBCOL (CONTINUED)
        !          16066: *
        !          16067: *      NOW WE ARE READY TO START PASS TWO. REGISTERS ARE USED
        !          16068: *      AS FOLLOWS IN PASS TWO.
        !          16069: *
        !          16070: *      (XR)                  SCANS THROUGH ALL BLOCKS
        !          16071: *      (WC)                  POINTER TO EVENTUAL LOCATION
        !          16072: *
        !          16073: *      THE MOVE DESCRIPTION BLOCKS BUILT IN THIS PASS HAVE
        !          16074: *      THE FOLLOWING FORMAT.
        !          16075: *
        !          16076: *      WORD 1                POINTER TO NEXT MOVE BLOCK,
        !          16077: *                            ZERO IF END OF CHAIN OF BLOCKS
        !          16078: *
        !          16079: *      WORD 2                LENGTH OF BLOCKS TO BE MOVED IN
        !          16080: *                            BYTES. SET TO THE ADDRESS OF THE
        !          16081: *                            FIRST BYTE WHILE ACTUALLY SCANNING
        !          16082: *                            THE BLOCKS.
        !          16083: *
        !          16084: *      THE FIRST ENTRY ON THIS CHAIN IS A SPECIAL ENTRY
        !          16085: *      CONSISTING OF THE TWO WORDS GBCNM AND GBCNS. AFTER
        !          16086: *      BUILDING THE CHAIN OF MOVE DESCRIPTORS, GBCNM POINTS TO
        !          16087: *      THE FIRST REAL MOVE BLOCK, AND GBCNS IS THE LENGTH OF
        !          16088: *      BLOCKS IN USE AT THE START OF STORAGE WHICH NEED NOT
        !          16089: *      BE MOVED SINCE THEY ARE IN THE CORRECT POSITION.
        !          16090: *
        !          16091: {GBC04{MOV{DNAMB{R9{{POINT TO FIRST BLOCK
        !          16092: {{MOV{R9{R8{{SET AS FIRST EVENTUAL LOCATION
        !          16093: {{ADD{GBSVB{R8{{ADD OFFSET FOR EVENTUAL MOVE UP
        !          16094: {{ZER{GBCNM{{{CLEAR INITIAL FORWARD POINTER
        !          16095: {{MOV{#GBCNM{GBCLM{{INITIALIZE PTR TO LAST MOVE BLOCK
        !          16096: {{MOV{R9{GBCNS{{INITIALIZE FIRST ADDRESS
        !          16097: *
        !          16098: *      LOOP THROUGH A SERIES OF BLOCKS IN USE
        !          16099: *
        !          16100: {GBC05{BEQ{R9{DNAMP{GBC07{JUMP IF END OF USED REGION
        !          16101: {{MOV{(R9){R6{{ELSE GET FIRST WORD
        !          16102: {{BHI{R6{#P$YYY{GBC06{SKIP IF NOT ENTRY PTR (IN USE)
        !          16103: {{BHI{R6{#B$AAA{GBC07{JUMP IF ENTRY POINTER (UNUSED)
        !          16104: *
        !          16105: *      HERE FOR BLOCK IN USE, LOOP TO RELOCATE REFERENCES
        !          16106: *
        !          16107: {GBC06{MOV{R6{R10{{COPY POINTER
        !          16108: {{MOV{(R10){R6{{LOAD FORWARD POINTER
        !          16109: {{MOV{R8{(R10){{RELOCATE REFERENCE
        !          16110: {{BHI{R6{#P$YYY{GBC06{LOOP BACK IF NOT END OF CHAIN
        !          16111: {{BLO{R6{#B$AAA{GBC06{LOOP BACK IF NOT END OF CHAIN
        !          16112: {{EJC{{{{
        !          16113: *
        !          16114: *      GBCOL (CONTINUED)
        !          16115: *
        !          16116: *      AT END OF CHAIN, RESTORE FIRST WORD AND BUMP PAST
        !          16117: *
        !          16118: {{MOV{R6{(R9){{RESTORE FIRST WORD
        !          16119: {{JSR{BLKLN{{{GET LENGTH OF THIS BLOCK
        !          16120: {{ADD{R6{R9{{BUMP ACTUAL POINTER
        !          16121: {{ADD{R6{R8{{BUMP EVENTUAL POINTER
        !          16122: {{BRN{GBC05{{{LOOP BACK FOR NEXT BLOCK
        !          16123: *
        !          16124: *      HERE AT END OF A SERIES OF BLOCKS IN USE
        !          16125: *
        !          16126: {GBC07{MOV{R9{R6{{COPY POINTER PAST LAST BLOCK
        !          16127: {{MOV{GBCLM{R10{{POINT TO PREVIOUS MOVE BLOCK
        !          16128: {{SUB{4*1(R10){R6{{SUBTRACT STARTING ADDRESS
        !          16129: {{MOV{R6{4*1(R10){{STORE LENGTH OF BLOCK TO BE MOVED
        !          16130: *
        !          16131: *      LOOP THROUGH A SERIES OF BLOCKS NOT IN USE
        !          16132: *
        !          16133: {GBC08{BEQ{R9{DNAMP{GBC10{JUMP IF END OF USED REGION
        !          16134: {{MOV{(R9){R6{{ELSE LOAD FIRST WORD OF NEXT BLOCK
        !          16135: {{BHI{R6{#P$YYY{GBC09{JUMP IF IN USE
        !          16136: {{BLO{R6{#B$AAA{GBC09{JUMP IF IN USE
        !          16137: {{JSR{BLKLN{{{ELSE GET LENGTH OF NEXT BLOCK
        !          16138: {{ADD{R6{R9{{PUSH POINTER
        !          16139: {{BRN{GBC08{{{AND LOOP BACK
        !          16140: *
        !          16141: *      HERE FOR A BLOCK IN USE AFTER PROCESSING A SERIES OF
        !          16142: *      BLOCKS WHICH WERE NOT IN USE, BUILD NEW MOVE BLOCK.
        !          16143: *
        !          16144: {GBC09{SUB{#4*NUM02{R9{{POINT 2 WORDS BEHIND FOR MOVE BLOCK
        !          16145: {{MOV{GBCLM{R10{{POINT TO PREVIOUS MOVE BLOCK
        !          16146: {{MOV{R9{(R10){{SET FORWARD PTR IN PREVIOUS BLOCK
        !          16147: {{ZER{(R9){{{ZERO FORWARD PTR OF NEW BLOCK
        !          16148: {{MOV{R9{GBCLM{{REMEMBER ADDRESS OF THIS BLOCK
        !          16149: {{MOV{R9{R10{{COPY PTR TO MOVE BLOCK
        !          16150: {{ADD{#4*NUM02{R9{{POINT BACK TO BLOCK IN USE
        !          16151: {{MOV{R9{4*1(R10){{STORE STARTING ADDRESS
        !          16152: {{BRN{GBC06{{{JUMP TO PROCESS BLOCK IN USE
        !          16153: {{EJC{{{{
        !          16154: *
        !          16155: *      GBCOL (CONTINUED)
        !          16156: *
        !          16157: *      HERE FOR PASS THREE -- ACTUALLY MOVE THE BLOCKS DOWN
        !          16158: *
        !          16159: *      (XL)                  POINTER TO OLD LOCATION
        !          16160: *      (XR)                  POINTER TO NEW LOCATION
        !          16161: *
        !          16162: {GBC10{MOV{DNAMB{R9{{POINT TO START OF STORAGE
        !          16163: {{ADD{GBCNS{R9{{BUMP PAST UNMOVED BLOCKS AT START
        !          16164: *
        !          16165: *      LOOP THROUGH MOVE DESCRIPTORS
        !          16166: *
        !          16167: {GBC11{MOV{GBCNM{R10{{POINT TO NEXT MOVE BLOCK
        !          16168: {{BZE{R10{GBC12{{JUMP IF END OF CHAIN
        !          16169: {{MOV{(R10)+{GBCNM{{MOVE POINTER DOWN CHAIN
        !          16170: {{MOV{(R10)+{R6{{GET LENGTH TO MOVE
        !          16171: {{MVW{{{{PERFORM MOVE
        !          16172: {{BRN{GBC11{{{LOOP BACK
        !          16173: *
        !          16174: *      NOW TEST FOR MOVE UP
        !          16175: *
        !          16176: {GBC12{MOV{R9{DNAMP{{SET NEXT AVAILABLE LOC PTR
        !          16177: {{MOV{GBSVB{R7{{RELOAD MOVE OFFSET
        !          16178: {{BZE{R7{GBC13{{JUMP IF NO MOVE REQUIRED
        !          16179: {{MOV{R9{R10{{ELSE COPY OLD TOP OF CORE
        !          16180: {{ADD{R7{R9{{POINT TO NEW TOP OF CORE
        !          16181: {{MOV{R9{DNAMP{{SAVE NEW TOP OF CORE POINTER
        !          16182: {{MOV{R10{R6{{COPY OLD TOP
        !          16183: {{SUB{DNAMB{R6{{MINUS OLD BOTTOM = LENGTH
        !          16184: {{ADD{R7{DNAMB{{BUMP BOTTOM TO GET NEW VALUE
        !          16185: {{MWB{{{{PERFORM MOVE (BACKWARDS)
        !          16186: *
        !          16187: *      MERGE HERE TO EXIT
        !          16188: *
        !          16189: {GBC13{MOV{GBSVA{R6{{RESTORE WA
        !          16190: {{SCP{R8{{{GET CODE POINTER
        !          16191: {{ADD{R$COD{R8{{MAKE ABSOLUTE AGAIN
        !          16192: {{LCP{R8{{{AND REPLACE ABSOLUTE VALUE
        !          16193: {{MOV{GBSVC{R8{{RESTORE WC
        !          16194: {{MOV{(SP)+{R10{{RESTORE ENTRY XL
        !          16195: {{ICV{GBCNT{{{INCREMENT COUNT OF COLLECTIONS
        !          16196: {{ZER{R9{{{CLEAR GARBAGE VALUE IN XR
        !          16197: {{ZER{GBCFL{{{NOTE EXIT FROM GBCOL
        !          16198: {{EXI{{{{EXIT TO GBCOL CALLER
        !          16199: *
        !          16200: *      GARBAGE COLLECTION NOT ALLOWED WHILST DUMPING
        !          16201: *
        !          16202: {GBC14{ICV{ERRFT{{{FATAL ERROR
        !          16203: {{ERB{250{INSUFFICIENT{{MEMORY TO COMPLETE DUMP
        !          16204: {{ENP{{{{END PROCEDURE GBCOL
        !          16205: {{EJC{{{{
        !          16206: *
        !          16207: *      GBCPF -- PROCESS FIELDS FOR GARBAGE COLLECTOR
        !          16208: *
        !          16209: *      THIS PROCEDURE IS USED BY THE GARBAGE COLLECTOR TO
        !          16210: *      PROCESS FIELDS IN PASS ONE. SEE GBCOL FOR FULL DETAILS.
        !          16211: *
        !          16212: *      (XR)                  PTR TO FIRST LOCATION TO PROCESS
        !          16213: *      (XL)                  PTR PAST LAST LOCATION TO PROCESS
        !          16214: *      JSR  GBCPF            CALL TO PROCESS FIELDS
        !          16215: *      (XR,WA,WB,WC,IA)      DESTROYED
        !          16216: *
        !          16217: *      NOTE THAT ALTHOUGH THIS PROCEDURE USES A RECURSIVE
        !          16218: *      APPROACH, IT CONTROLS ITS OWN STACK AND IS NOT RECURSIVE.
        !          16219: *
        !          16220: {GBCPF{PRC{E{0{{ENTRY POINT
        !          16221: {{ZER{-(SP){{{SET ZERO TO MARK BOTTOM OF STACK
        !          16222: {{MOV{R10{-(SP){{SAVE END POINTER
        !          16223: *
        !          16224: *      MERGE HERE TO GO DOWN A LEVEL AND START A NEW LOOP
        !          16225: *
        !          16226: *      1(XS)                 NEXT LVL FIELD PTR (0 AT OUTER LVL)
        !          16227: *      0(XS)                 PTR PAST LAST FIELD TO PROCESS
        !          16228: *      (XR)                  PTR TO FIRST FIELD TO PROCESS
        !          16229: *
        !          16230: *      LOOP TO PROCESS SUCCESSIVE FIELDS
        !          16231: *
        !          16232: {GPF01{MOV{(R9){R10{{LOAD FIELD CONTENTS
        !          16233: {{MOV{R9{R8{{SAVE FIELD POINTER
        !          16234: {{BLT{R10{DNAMB{GPF02{JUMP IF NOT PTR INTO DYNAMIC AREA
        !          16235: {{BGE{R10{DNAMP{GPF02{JUMP IF NOT PTR INTO DYNAMIC AREA
        !          16236: *
        !          16237: *      HERE WE HAVE A PTR TO A BLOCK IN THE DYNAMIC AREA.
        !          16238: *      LINK THIS FIELD ONTO THE REFERENCE BACKCHAIN.
        !          16239: *
        !          16240: {{MOV{(R10){R6{{LOAD PTR TO CHAIN (OR ENTRY PTR)
        !          16241: {{MOV{R9{(R10){{SET THIS FIELD AS NEW HEAD OF CHAIN
        !          16242: {{MOV{R6{(R9){{SET FORWARD POINTER
        !          16243: *
        !          16244: *      NOW SEE IF THIS BLOCK HAS BEEN PROCESSED BEFORE
        !          16245: *
        !          16246: {{BHI{R6{#P$YYY{GPF02{JUMP IF ALREADY PROCESSED
        !          16247: {{BHI{R6{#B$AAA{GPF03{JUMP IF NOT ALREADY PROCESSED
        !          16248: *
        !          16249: *      HERE TO MOVE TO NEXT FIELD
        !          16250: *
        !          16251: {GPF02{MOV{R8{R9{{RESTORE FIELD POINTER
        !          16252: {{ICA{R9{{{BUMP TO NEXT FIELD
        !          16253: {{BNE{R9{(SP){GPF01{LOOP BACK IF MORE TO GO
        !          16254: {{EJC{{{{
        !          16255: *
        !          16256: *      GBCPF (CONTINUED)
        !          16257: *
        !          16258: *      HERE WE POP UP A LEVEL AFTER FINISHING A BLOCK
        !          16259: *
        !          16260: {{MOV{(SP)+{R10{{RESTORE POINTER PAST END
        !          16261: {{MOV{(SP)+{R8{{RESTORE BLOCK POINTER
        !          16262: {{BNZ{R8{GPF02{{CONTINUE LOOP UNLESS OUTER LEVL
        !          16263: {{EXI{{{{RETURN TO CALLER IF OUTER LEVEL
        !          16264: *
        !          16265: *      HERE TO PROCESS AN ACTIVE BLOCK WHICH HAS NOT BEEN DONE
        !          16266: *
        !          16267: {GPF03{MOV{R10{R9{{COPY BLOCK POINTER
        !          16268: {{MOV{R6{R10{{COPY FIRST WORD OF BLOCK
        !          16269: {{LEI{R10{{{LOAD ENTRY POINT ID (BL$XX)
        !          16270: *
        !          16271: *      BLOCK TYPE SWITCH. NOTE THAT BLOCKS WITH NO RELOCATABLE
        !          16272: *      FIELDS JUST RETURN TO GPF02 HERE TO CONTINE TO NEXT FLD.
        !          16273: *
        !          16274: {{BSW{R10{BL$$${{SWITCH ON BLOCK TYPE
        !          16275: {{IFF{BL$AR{GPF06{{ARBLK
        !          16276: {{IFF{BL$BC{GPF18{{BCBLK
        !          16277: {{IFF{BL$CD{GPF08{{CDBLK
        !          16278: {{IFF{BL$EX{GPF17{{EXBLK
        !          16279: {{IFF{BL$IC{GPF02{{ICBLK
        !          16280: {{IFF{BL$NM{GPF10{{NMBLK
        !          16281: {{IFF{BL$P0{GPF10{{P0BLK
        !          16282: {{IFF{BL$P1{GPF12{{P1BLK
        !          16283: {{IFF{BL$P2{GPF12{{P2BLK
        !          16284: {{IFF{BL$RC{GPF02{{RCBLK
        !          16285: {{IFF{BL$SC{GPF02{{SCBLK
        !          16286: {{IFF{BL$SE{GPF02{{SEBLK
        !          16287: {{IFF{BL$TB{GPF08{{TBBLK
        !          16288: {{IFF{BL$VC{GPF08{{VCBLK
        !          16289: {{IFF{BL$XN{GPF02{{XNBLK
        !          16290: {{IFF{BL$XR{GPF09{{XRBLK
        !          16291: {{IFF{BL$PD{GPF13{{PDBLK
        !          16292: {{IFF{BL$TR{GPF16{{TRBLK
        !          16293: {{IFF{BL$BF{GPF02{{BFBLK
        !          16294: {{IFF{BL$CC{GPF07{{CCBLK
        !          16295: {{IFF{BL$CM{GPF04{{CMBLK
        !          16296: {{IFF{BL$CT{GPF02{{CTBLK
        !          16297: {{IFF{BL$DF{GPF02{{DFBLK
        !          16298: {{IFF{BL$EF{GPF02{{EFBLK
        !          16299: {{IFF{BL$EV{GPF10{{EVBLK
        !          16300: {{IFF{BL$FF{GPF11{{FFBLK
        !          16301: {{IFF{BL$KV{GPF02{{KVBLK
        !          16302: {{IFF{BL$PF{GPF14{{PFBLK
        !          16303: {{IFF{BL$TE{GPF15{{TEBLK
        !          16304: {{ESW{{{{END OF JUMP TABLE
        !          16305: {{EJC{{{{
        !          16306: *
        !          16307: *      GBCPF (CONTINUED)
        !          16308: *
        !          16309: *      CMBLK
        !          16310: *
        !          16311: {GPF04{MOV{4*CMLEN(R9){R6{{LOAD LENGTH
        !          16312: {{MOV{#4*CMTYP{R7{{SET OFFSET
        !          16313: *
        !          16314: *      HERE TO PUSH DOWN TO NEW LEVEL
        !          16315: *
        !          16316: *      (WC)                  FIELD PTR AT PREVIOUS LEVEL
        !          16317: *      (XR)                  PTR TO NEW BLOCK
        !          16318: *      (WA)                  LENGTH (RELOC FLDS + FLDS AT START)
        !          16319: *      (WB)                  OFFSET TO FIRST RELOC FIELD
        !          16320: *
        !          16321: {GPF05{ADD{R9{R6{{POINT PAST LAST RELOC FIELD
        !          16322: {{ADD{R7{R9{{POINT TO FIRST RELOC FIELD
        !          16323: {{MOV{R8{-(SP){{STACK OLD FIELD POINTER
        !          16324: {{MOV{R6{-(SP){{STACK NEW LIMIT POINTER
        !          16325: {{CHK{{{{CHECK FOR STACK OVERFLOW
        !          16326: {{BRN{GPF01{{{IF OK, BACK TO PROCESS
        !          16327: *
        !          16328: *      ARBLK
        !          16329: *
        !          16330: {GPF06{MOV{4*ARLEN(R9){R6{{LOAD LENGTH
        !          16331: {{MOV{4*AROFS(R9){R7{{SET OFFSET TO 1ST RELOC FLD (ARPRO)
        !          16332: {{BRN{GPF05{{{ALL SET
        !          16333: *
        !          16334: *      CCBLK
        !          16335: *
        !          16336: {GPF07{MOV{4*CCUSE(R9){R6{{SET LENGTH IN USE
        !          16337: {{MOV{#4*CCUSE{R7{{1ST WORD (MAKE SURE AT LEAST ONE)
        !          16338: {{BRN{GPF05{{{ALL SET
        !          16339: {{EJC{{{{
        !          16340: *
        !          16341: *      GBCPF (CONTINUED)
        !          16342: *
        !          16343: *      CDBLK, TBBLK, VCBLK
        !          16344: *
        !          16345: {GPF08{MOV{4*OFFS2(R9){R6{{LOAD LENGTH
        !          16346: {{MOV{#4*OFFS3{R7{{SET OFFSET
        !          16347: {{BRN{GPF05{{{JUMP BACK
        !          16348: *
        !          16349: *      XRBLK
        !          16350: *
        !          16351: {GPF09{MOV{4*XRLEN(R9){R6{{LOAD LENGTH
        !          16352: {{MOV{#4*XRPTR{R7{{SET OFFSET
        !          16353: {{BRN{GPF05{{{JUMP BACK
        !          16354: *
        !          16355: *      EVBLK, NMBLK, P0BLK
        !          16356: *
        !          16357: {GPF10{MOV{#4*OFFS2{R6{{POINT PAST SECOND FIELD
        !          16358: {{MOV{#4*OFFS1{R7{{OFFSET IS ONE (ONLY RELOC FLD IS 2)
        !          16359: {{BRN{GPF05{{{ALL SET
        !          16360: *
        !          16361: *      FFBLK
        !          16362: *
        !          16363: {GPF11{MOV{#4*FFOFS{R6{{SET LENGTH
        !          16364: {{MOV{#4*FFNXT{R7{{SET OFFSET
        !          16365: {{BRN{GPF05{{{ALL SET
        !          16366: *
        !          16367: *      P1BLK, P2BLK
        !          16368: *
        !          16369: {GPF12{MOV{#4*PARM2{R6{{LENGTH (PARM2 IS NON-RELOCATABLE)
        !          16370: {{MOV{#4*PTHEN{R7{{SET OFFSET
        !          16371: {{BRN{GPF05{{{ALL SET
        !          16372: {{EJC{{{{
        !          16373: *
        !          16374: *      GBCPF (CONTINUED)
        !          16375: *
        !          16376: *      PDBLK
        !          16377: *
        !          16378: {GPF13{MOV{4*PDDFP(R9){R10{{LOAD PTR TO DFBLK
        !          16379: {{MOV{4*DFPDL(R10){R6{{GET PDBLK LENGTH
        !          16380: {{MOV{#4*PDFLD{R7{{SET OFFSET
        !          16381: {{BRN{GPF05{{{ALL SET
        !          16382: *
        !          16383: *      PFBLK
        !          16384: *
        !          16385: {GPF14{MOV{#4*PFARG{R6{{LENGTH PAST LAST RELOC
        !          16386: {{MOV{#4*PFCOD{R7{{OFFSET TO FIRST RELOC
        !          16387: {{BRN{GPF05{{{ALL SET
        !          16388: *
        !          16389: *      TEBLK
        !          16390: *
        !          16391: {GPF15{MOV{#4*TESI${R6{{SET LENGTH
        !          16392: {{MOV{#4*TESUB{R7{{AND OFFSET
        !          16393: {{BRN{GPF05{{{ALL SET
        !          16394: *
        !          16395: *      TRBLK
        !          16396: *
        !          16397: {GPF16{MOV{#4*TRSI${R6{{SET LENGTH
        !          16398: {{MOV{#4*TRVAL{R7{{AND OFFSET
        !          16399: {{BRN{GPF05{{{ALL SET
        !          16400: *
        !          16401: *      EXBLK
        !          16402: *
        !          16403: {GPF17{MOV{4*EXLEN(R9){R6{{LOAD LENGTH
        !          16404: {{MOV{#4*EXFLC{R7{{SET OFFSET
        !          16405: {{BRN{GPF05{{{JUMP BACK
        !          16406: *
        !          16407: *      BCBLK
        !          16408: *
        !          16409: {GPF18{MOV{#4*BCSI${R6{{SET LENGTH
        !          16410: {{MOV{#4*BCBUF{R7{{AND OFFSET
        !          16411: {{BRN{GPF05{{{ALL SET
        !          16412: {{ENP{{{{END PROCEDURE GBCPF
        !          16413: {{EJC{{{{
        !          16414: *
        !          16415: *      GTARR -- GET ARRAY
        !          16416: *
        !          16417: *      GTARR IS PASSED AN OBJECT AND RETURNS AN ARRAY IF POSSIBL
        !          16418: *
        !          16419: *      (XR)                  VALUE TO BE CONVERTED
        !          16420: *      JSR  GTARR            CALL TO GET ARRAY
        !          16421: *      PPM  LOC              TRANSFER LOC FOR CONVERT IMPOSSIBLE
        !          16422: *      (XR)                  RESULTING ARRAY
        !          16423: *      (XL,WA,WB,WC)         DESTROYED
        !          16424: *
        !          16425: {GTARR{PRC{E{1{{ENTRY POINT
        !          16426: {{MOV{(R9){R6{{LOAD TYPE WORD
        !          16427: {{BEQ{R6{#B$ART{GTAR8{EXIT IF ALREADY AN ARRAY
        !          16428: {{BEQ{R6{#B$VCT{GTAR8{EXIT IF ALREADY AN ARRAY
        !          16429: {{BNE{R6{#B$TBT{GTA9A{ELSE FAIL IF NOT A TABLE (SGD02)
        !          16430: *
        !          16431: *      HERE WE CONVERT A TABLE TO AN ARRAY
        !          16432: *
        !          16433: {{MOV{R9{-(SP){{REPLACE TBBLK POINTER ON STACK
        !          16434: {{ZER{R9{{{SIGNAL FIRST PASS
        !          16435: {{ZER{R7{{{ZERO NON-NULL ELEMENT COUNT
        !          16436: *
        !          16437: *      THE FOLLOWING CODE IS EXECUTED TWICE. ON THE FIRST PASS,
        !          16438: *      SIGNALLED BY XR=0, THE NUMBER OF NON-NULL ELEMENTS IN
        !          16439: *      THE TABLE IS COUNTED IN WB. IN THE SECOND PASS, WHERE
        !          16440: *      XR IS A POINTER INTO THE ARBLK, THE NAME AND VALUE ARE
        !          16441: *      ENTERED INTO THE CURRENT ARBLK LOCATION.
        !          16442: *
        !          16443: {GTAR1{MOV{(SP){R10{{POINT TO TABLE
        !          16444: {{ADD{4*TBLEN(R10){R10{{POINT PAST LAST BUCKET
        !          16445: {{SUB{#4*TBBUK{R10{{SET FIRST BUCKET OFFSET
        !          16446: {{MOV{R10{R6{{COPY ADJUSTED POINTER
        !          16447: *
        !          16448: *      LOOP THROUGH BUCKETS IN TABLE BLOCK
        !          16449: *      NEXT THREE LINES OF CODE RELY ON TENXT HAVING A VALUE
        !          16450: *      1 LESS THAN TBBUK.
        !          16451: *
        !          16452: {GTAR2{MOV{R6{R10{{COPY BUCKET POINTER
        !          16453: {{DCA{R6{{{DECREMENT BUCKET POINTER
        !          16454: *
        !          16455: *      LOOP THROUGH TEBLKS ON ONE BUCKET CHAIN
        !          16456: *
        !          16457: {GTAR3{MOV{4*TENXT(R10){R10{{POINT TO NEXT TEBLK
        !          16458: {{BEQ{R10{(SP){GTAR6{JUMP IF CHAIN END (TBBLK PTR)
        !          16459: {{MOV{R10{CNVTP{{ELSE SAVE TEBLK POINTER
        !          16460: *
        !          16461: *      LOOP TO FIND VALUE DOWN TRBLK CHAIN
        !          16462: *
        !          16463: {GTAR4{MOV{4*TEVAL(R10){R10{{LOAD VALUE
        !          16464: {{BEQ{(R10){#B$TRT{GTAR4{LOOP TILL VALUE FOUND
        !          16465: {{MOV{R10{R8{{COPY VALUE
        !          16466: {{MOV{CNVTP{R10{{RESTORE TEBLK POINTER
        !          16467: {{EJC{{{{
        !          16468: *
        !          16469: *      GTARR (CONTINUED)
        !          16470: *
        !          16471: *      NOW CHECK FOR NULL AND TEST CASES
        !          16472: *
        !          16473: {{BEQ{R8{#NULLS{GTAR3{LOOP BACK TO IGNORE NULL VALUE
        !          16474: {{BNZ{R9{GTAR5{{JUMP IF SECOND PASS
        !          16475: {{ICV{R7{{{FOR THE FIRST PASS, BUMP COUNT
        !          16476: {{BRN{GTAR3{{{AND LOOP BACK FOR NEXT TEBLK
        !          16477: *
        !          16478: *      HERE IN SECOND PASS
        !          16479: *
        !          16480: {GTAR5{MOV{4*TESUB(R10){(R9)+{{STORE SUBSCRIPT NAME
        !          16481: {{MOV{R8{(R9)+{{STORE VALUE IN ARBLK
        !          16482: {{BRN{GTAR3{{{LOOP BACK FOR NEXT TEBLK
        !          16483: *
        !          16484: *      HERE AFTER SCANNING TEBLKS ON ONE CHAIN
        !          16485: *
        !          16486: {GTAR6{BNE{R6{(SP){GTAR2{LOOP BACK IF MORE BUCKETS TO GO
        !          16487: {{BNZ{R9{GTAR7{{ELSE JUMP IF SECOND PASS
        !          16488: *
        !          16489: *      HERE AFTER COUNTING NON-NULL ELEMENTS
        !          16490: *
        !          16491: {{BZE{R7{GTAR9{{FAIL IF NO NON-NULL ELEMENTS
        !          16492: {{MOV{R7{R6{{ELSE COPY COUNT
        !          16493: {{ADD{R7{R6{{DOUBLE (TWO WORDS/ELEMENT)
        !          16494: {{ADD{#ARVL2{R6{{ADD SPACE FOR STANDARD FIELDS
        !          16495: {{WTB{R6{{{CONVERT LENGTH TO BYTES
        !          16496: {{BGE{R6{MXLEN{GTAR9{FAIL IF TOO LONG FOR ARRAY
        !          16497: {{JSR{ALLOC{{{ELSE ALLOCATE SPACE FOR ARBLK
        !          16498: {{MOV{#B$ART{(R9){{STORE TYPE WORD
        !          16499: {{ZER{4*IDVAL(R9){{{ZERO ID FOR THE MOMENT
        !          16500: {{MOV{R6{4*ARLEN(R9){{STORE LENGTH
        !          16501: {{MOV{#NUM02{4*ARNDM(R9){{SET DIMENSIONS = 2
        !          16502: {{LDI{INTV1{{{GET INTEGER ONE
        !          16503: {{STI{4*ARLBD(R9){{{STORE AS LBD 1
        !          16504: {{STI{4*ARLB2(R9){{{STORE AS LBD 2
        !          16505: {{LDI{INTV2{{{LOAD INTEGER TWO
        !          16506: {{STI{4*ARDM2(R9){{{STORE AS DIM 2
        !          16507: {{MTI{R7{{{GET ELEMENT COUNT AS INTEGER
        !          16508: {{STI{4*ARDIM(R9){{{STORE AS DIM 1
        !          16509: {{ZER{4*ARPR2(R9){{{ZERO PROTOTYPE FIELD FOR NOW
        !          16510: {{MOV{#4*ARPR2{4*AROFS(R9){{SET OFFSET FIELD (SIGNAL PASS 2)
        !          16511: {{MOV{R9{R7{{SAVE ARBLK POINTER
        !          16512: {{ADD{#4*ARVL2{R9{{POINT TO FIRST ELEMENT LOCATION
        !          16513: {{BRN{GTAR1{{{JUMP BACK TO FILL IN ELEMENTS
        !          16514: {{EJC{{{{
        !          16515: *
        !          16516: *      GTARR (CONTINUED)
        !          16517: *
        !          16518: *      HERE AFTER FILLING IN ELEMENT VALUES
        !          16519: *
        !          16520: {GTAR7{MOV{R7{R9{{RESTORE ARBLK POINTER
        !          16521: {{MOV{R7{(SP){{STORE AS RESULT
        !          16522: *
        !          16523: *      NOW WE NEED THE ARRAY PROTOTYPE WHICH IS OF THE FORM NN,2
        !          16524: *      THIS IS OBTAINED BY BUILDING THE STRING FOR NN02 AND
        !          16525: *      CHANGING THE ZERO TO A COMMA BEFORE STORING IT.
        !          16526: *
        !          16527: {{LDI{4*ARDIM(R9){{{GET NUMBER OF ELEMENTS (NN)
        !          16528: {{MLI{INTVH{{{MULTIPLY BY 100
        !          16529: {{ADI{INTV2{{{ADD 2 (NN02)
        !          16530: {{JSR{ICBLD{{{BUILD INTEGER
        !          16531: {{MOV{R9{-(SP){{STORE PTR FOR GTSTG
        !          16532: {{JSR{GTSTG{{{CONVERT TO STRING
        !          16533: {{PPM{{{{CONVERT FAIL IS IMPOSSIBLE
        !          16534: {{MOV{R9{R10{{COPY STRING POINTER
        !          16535: {{MOV{(SP)+{R9{{RELOAD ARBLK POINTER
        !          16536: {{MOV{R10{4*ARPR2(R9){{STORE PROTOTYPE PTR (NN02)
        !          16537: {{SUB{#NUM02{R6{{ADJUST LENGTH TO POINT TO ZERO
        !          16538: {{PSC{R10{R6{{POINT TO ZERO
        !          16539: {{MOV{#CH$CM{R7{{LOAD A COMMA
        !          16540: {{SCH{R7{(R10){{STORE A COMMA OVER THE ZERO
        !          16541: {{CSC{R10{{{COMPLETE STORE CHARACTERS
        !          16542: *
        !          16543: *      NORMAL RETURN
        !          16544: *
        !          16545: {GTAR8{EXI{{{{RETURN TO CALLER
        !          16546: *
        !          16547: *      NON-CONVERSION RETURN
        !          16548: *
        !          16549: {GTAR9{MOV{(SP)+{R9{{RESTORE STACK FOR CONV ERR (SGD02)
        !          16550: *
        !          16551: *      MERGE TO TAKE CONVERT ERROR WHEN STACK ADJUSTED OK
        !          16552: *
        !          16553: {GTA9A{EXI{1{{{RETURN
        !          16554: {{ENP{{{{PROCEDURE GTARR
        !          16555: {{EJC{{{{
        !          16556: *
        !          16557: *      GTCOD -- CONVERT TO CODE
        !          16558: *
        !          16559: *      (XR)                  OBJECT TO BE CONVERTED
        !          16560: *      JSR  GTCOD            CALL TO CONVERT TO CODE
        !          16561: *      PPM  LOC              TRANSFER LOC IF CONVERT IMPOSSIBLE
        !          16562: *      (XR)                  POINTER TO RESULTING CDBLK
        !          16563: *      (XL,WA,WB,WC,RA)      DESTROYED
        !          16564: *
        !          16565: *      IF A SPITBOL ERROR OCCURS DURING COMPILATION OR PRE-
        !          16566: *      EVALUATION, CONTROL IS PASSED VIA ERROR SECTION TO EXFAL
        !          16567: *      WITHOUT RETURNING TO THIS ROUTINE.
        !          16568: *
        !          16569: {GTCOD{PRC{E{1{{ENTRY POINT
        !          16570: {{BEQ{(R9){#B$CDS{GTCD1{JUMP IF ALREADY CODE
        !          16571: {{BEQ{(R9){#B$CDC{GTCD1{JUMP IF ALREADY CODE
        !          16572: *
        !          16573: *      HERE WE MUST GENERATE A CDBLK BY COMPILATION
        !          16574: *
        !          16575: {{MOV{R9{-(SP){{STACK ARGUMENT FOR GTSTG
        !          16576: {{JSR{GTSTG{{{CONVERT ARGUMENT TO STRING
        !          16577: {{PPM{GTCD2{{{JUMP IF NON-CONVERTIBLE
        !          16578: {{MOV{FLPTR{GTCEF{{SAVE FAIL PTR IN CASE OF ERROR
        !          16579: {{MOV{R$COD{R$GTC{{ALSO SAVE CODE PTR
        !          16580: {{MOV{R9{R$CIM{{ELSE SET IMAGE POINTER
        !          16581: {{MOV{R6{SCNIL{{SET IMAGE LENGTH
        !          16582: {{ZER{SCNPT{{{SET SCAN POINTER
        !          16583: {{MOV{#STGXC{STAGE{{SET STAGE FOR EXECUTE COMPILE
        !          16584: {{MOV{CMPSN{LSTSN{{IN CASE LISTR CALLED
        !          16585: {{JSR{CMPIL{{{COMPILE STRING
        !          16586: {{MOV{#STGXT{STAGE{{RESET STAGE FOR EXECUTE TIME
        !          16587: {{ZER{R$CIM{{{CLEAR IMAGE
        !          16588: *
        !          16589: *      MERGE HERE IF NO CONVERT REQUIRED
        !          16590: *
        !          16591: {GTCD1{EXI{{{{GIVE NORMAL GTCOD RETURN
        !          16592: *
        !          16593: *      HERE IF UNCONVERTIBLE
        !          16594: *
        !          16595: {GTCD2{EXI{1{{{GIVE ERROR RETURN
        !          16596: {{ENP{{{{END PROCEDURE GTCOD
        !          16597: {{EJC{{{{
        !          16598: *
        !          16599: *      GTEXP -- CONVERT TO EXPRESSION
        !          16600: *
        !          16601: *      (XR)                  INPUT VALUE TO BE CONVERTED
        !          16602: *      JSR  GTEXP            CALL TO CONVERT TO EXPRESSION
        !          16603: *      PPM  LOC              TRANSFER LOC IF CONVERT IMPOSSIBLE
        !          16604: *      (XR)                  POINTER TO RESULT EXBLK OR SEBLK
        !          16605: *      (XL,WA,WB,WC,RA)      DESTROYED
        !          16606: *
        !          16607: *      IF A SPITBOL ERROR OCCURS DURING COMPILATION OR PRE-
        !          16608: *      EVALUATION, CONTROL IS PASSED VIA ERROR SECTION TO EXFAL
        !          16609: *      WITHOUT RETURNING TO THIS ROUTINE.
        !          16610: *
        !          16611: {GTEXP{PRC{E{1{{ENTRY POINT
        !          16612: {{BLO{(R9){#B$E$${GTEX1{JUMP IF ALREADY AN EXPRESSION
        !          16613: {{MOV{R9{-(SP){{STORE ARGUMENT FOR GTSTG
        !          16614: {{JSR{GTSTG{{{CONVERT ARGUMENT TO STRING
        !          16615: {{PPM{GTEX2{{{JUMP IF UNCONVERTIBLE
        !          16616: *
        !          16617: *      CHECK THE LAST CHARACTER OF THE STRING FOR COLON OR
        !          16618: *      SEMICOLON.  THESE CHARACTERS CAN LEGITIMATELY END AN
        !          16619: *      EXPRESSION IN OPEN CODE, SO EXPAN WILL NOT DETECT THEM
        !          16620: *      AS ERRORS, BUT THEY ARE INVALID AS TERMINATORS FOR A
        !          16621: *      STRING THAT IS BEING CONVERTED TO EXPRESSION FORM.
        !          16622: *
        !          16623: {{MOV{R9{R10{{COPY INPUT STRING POINTER (REG06)
        !          16624: {{PLC{R10{R6{{POINT ONE PAST THE STRING END (REG06)
        !          16625: {{LCH{R10{-(R10){{FETCH THE LAST CHARACTER (REG06)
        !          16626: {{BEQ{R10{#CH$CL{GTEX2{ERROR IF IT IS A SEMICOLON (REG06)
        !          16627: {{BEQ{R10{#CH$SM{GTEX2{OR IF IT IS A COLON (REG06)
        !          16628: *
        !          16629: *      HERE WE CONVERT A STRING BY COMPILATION
        !          16630: *
        !          16631: {{MOV{R9{R$CIM{{SET INPUT IMAGE POINTER
        !          16632: {{ZER{SCNPT{{{SET SCAN POINTER
        !          16633: {{MOV{R6{SCNIL{{SET INPUT IMAGE LENGTH
        !          16634: {{ZER{R7{{{SET CODE FOR NORMAL SCAN
        !          16635: {{MOV{FLPTR{GTCEF{{SAVE FAIL PTR IN CASE OF ERROR
        !          16636: {{MOV{R$COD{R$GTC{{ALSO SAVE CODE PTR
        !          16637: {{MOV{#STGEV{STAGE{{ADJUST STAGE FOR COMPILE
        !          16638: {{MOV{#T$UOK{SCNTP{{INDICATE UNARY OPERATOR ACCEPTABLE
        !          16639: {{JSR{EXPAN{{{BUILD TREE FOR EXPRESSION
        !          16640: {{ZER{SCNRS{{{RESET RESCAN FLAG
        !          16641: {{BNE{SCNPT{SCNIL{GTEX2{ERROR IF NOT END OF IMAGE
        !          16642: {{ZER{R7{{{SET OK VALUE FOR CDGEX CALL
        !          16643: {{MOV{R9{R10{{COPY TREE POINTER
        !          16644: {{JSR{CDGEX{{{BUILD EXPRESSION BLOCK
        !          16645: {{ZER{R$CIM{{{CLEAR POINTER
        !          16646: {{MOV{#STGXT{STAGE{{RESTORE STAGE FOR EXECUTE TIME
        !          16647: *
        !          16648: *      MERGE HERE IF NO CONVERSION REQUIRED
        !          16649: *
        !          16650: {GTEX1{EXI{{{{RETURN TO GTEXP CALLER
        !          16651: *
        !          16652: *      HERE IF UNCONVERTIBLE
        !          16653: *
        !          16654: {GTEX2{EXI{1{{{TAKE ERROR EXIT
        !          16655: {{ENP{{{{END PROCEDURE GTEXP
        !          16656: {{EJC{{{{
        !          16657: *
        !          16658: *      GTINT -- GET INTEGER VALUE
        !          16659: *
        !          16660: *      GTINT IS PASSED AN OBJECT AND RETURNS AN INTEGER AFTER
        !          16661: *      PERFORMING ANY NECESSARY CONVERSIONS.
        !          16662: *
        !          16663: *      (XR)                  VALUE TO BE CONVERTED
        !          16664: *      JSR  GTINT            CALL TO CONVERT TO INTEGER
        !          16665: *      PPM  LOC              TRANSFER LOC FOR CONVERT IMPOSSIBLE
        !          16666: *      (XR)                  RESULTING INTEGER
        !          16667: *      (WC,RA)               DESTROYED
        !          16668: *      (WA,WB)               DESTROYED (ONLY ON CONVERSION ERR)
        !          16669: *      (XR)                  UNCHANGED (ON CONVERT ERROR)
        !          16670: *
        !          16671: {GTINT{PRC{E{1{{ENTRY POINT
        !          16672: {{BEQ{(R9){#B$ICL{GTIN2{JUMP IF ALREADY AN INTEGER
        !          16673: {{MOV{R6{GTINA{{ELSE SAVE WA
        !          16674: {{MOV{R7{GTINB{{SAVE WB
        !          16675: {{JSR{GTNUM{{{CONVERT TO NUMERIC
        !          16676: {{PPM{GTIN3{{{JUMP IF UNCONVERTIBLE
        !          16677: {{BEQ{R6{#B$ICL{GTIN1{JUMP IF INTEGER
        !          16678: *
        !          16679: *      HERE WE CONVERT A REAL TO INTEGER
        !          16680: *
        !          16681: {{LDR{4*RCVAL(R9){{{LOAD REAL VALUE
        !          16682: {{RTI{GTIN3{{{CONVERT TO INTEGER (ERR IF OVFLOW)
        !          16683: {{JSR{ICBLD{{{IF OK BUILD ICBLK
        !          16684: *
        !          16685: *      HERE AFTER SUCCESSFUL CONVERSION TO INTEGER
        !          16686: *
        !          16687: {GTIN1{MOV{GTINA{R6{{RESTORE WA
        !          16688: {{MOV{GTINB{R7{{RESTORE WB
        !          16689: *
        !          16690: *      COMMON EXIT POINT
        !          16691: *
        !          16692: {GTIN2{EXI{{{{RETURN TO GTINT CALLER
        !          16693: *
        !          16694: *      HERE ON CONVERSION ERROR
        !          16695: *
        !          16696: {GTIN3{EXI{1{{{TAKE CONVERT ERROR EXIT
        !          16697: {{ENP{{{{END PROCEDURE GTINT
        !          16698: {{EJC{{{{
        !          16699: *
        !          16700: *      GTNUM -- GET NUMERIC VALUE
        !          16701: *
        !          16702: *      GTNUM IS GIVEN AN OBJECT AND RETURNS EITHER AN INTEGER
        !          16703: *      OR A REAL, PERFORMING ANY NECESSARY CONVERSIONS.
        !          16704: *
        !          16705: *      (XR)                  OBJECT TO BE CONVERTED
        !          16706: *      JSR  GTNUM            CALL TO CONVERT TO NUMERIC
        !          16707: *      PPM  LOC              TRANSFER LOC IF CONVERT IMPOSSIBLE
        !          16708: *      (XR)                  POINTER TO RESULT (INT OR REAL)
        !          16709: *      (WA)                  FIRST WORD OF RESULT BLOCK
        !          16710: *      (WB,WC,RA)            DESTROYED
        !          16711: *      (XR)                  UNCHANGED (ON CONVERT ERROR)
        !          16712: *
        !          16713: {GTNUM{PRC{E{1{{ENTRY POINT
        !          16714: {{MOV{(R9){R6{{LOAD FIRST WORD OF BLOCK
        !          16715: {{BEQ{R6{#B$ICL{GTN34{JUMP IF INTEGER (NO CONVERSION)
        !          16716: {{BEQ{R6{#B$RCL{GTN34{JUMP IF REAL (NO CONVERSION)
        !          16717: *
        !          16718: *      AT THIS POINT THE ONLY POSSIBILITY IS TO CONVERT A STRING
        !          16719: *      TO AN INTEGER OR REAL AS APPROPRIATE.
        !          16720: *
        !          16721: {{MOV{R9{-(SP){{STACK ARGUMENT IN CASE CONVERT ERR
        !          16722: {{MOV{R9{-(SP){{STACK ARGUMENT FOR GTSTG
        !          16723: {{JSR{GTSTG{{{CONVERT ARGUMENT TO STRING
        !          16724: {{PPM{GTN36{{{JUMP IF UNCONVERTIBLE
        !          16725: *
        !          16726: *      INITIALIZE NUMERIC CONVERSION
        !          16727: *
        !          16728: {{LDI{INTV0{{{INITIALIZE INTEGER RESULT TO ZERO
        !          16729: {{BZE{R6{GTN32{{JUMP TO EXIT WITH ZERO IF NULL
        !          16730: {{LCT{R6{R6{{SET BCT COUNTER FOR FOLLOWING LOOPS
        !          16731: {{ZER{GTNNF{{{TENTATIVELY INDICATE RESULT +
        !          16732: {{STI{GTNEX{{{INITIALISE EXPONENT TO ZERO
        !          16733: {{ZER{GTNSC{{{ZERO SCALE IN CASE REAL
        !          16734: {{ZER{GTNDF{{{RESET FLAG FOR DEC POINT FOUND
        !          16735: {{ZER{GTNRD{{{RESET FLAG FOR DIGITS FOUND
        !          16736: {{LDR{REAV0{{{ZERO REAL ACCUM IN CASE REAL
        !          16737: {{PLC{R9{{{POINT TO ARGUMENT CHARACTERS
        !          16738: *
        !          16739: *      MERGE BACK HERE AFTER IGNORING LEADING BLANK
        !          16740: *
        !          16741: {GTN01{LCH{R7{(R9)+{{LOAD FIRST CHARACTER
        !          16742: {{BLT{R7{#CH$D0{GTN02{JUMP IF NOT DIGIT
        !          16743: {{BLE{R7{#CH$D9{GTN06{JUMP IF FIRST CHAR IS A DIGIT
        !          16744: {{EJC{{{{
        !          16745: *
        !          16746: *      GTNUM (CONTINUED)
        !          16747: *
        !          16748: *      HERE IF FIRST DIGIT IS NON-DIGIT
        !          16749: *
        !          16750: {GTN02{BNE{R7{#CH$BL{GTN03{JUMP IF NON-BLANK
        !          16751: {GTNA2{BCT{R6{GTN01{{ELSE DECR COUNT AND LOOP BACK
        !          16752: {{BRN{GTN07{{{JUMP TO RETURN ZERO IF ALL BLANKS
        !          16753: *
        !          16754: *      HERE FOR FIRST CHARACTER NON-BLANK, NON-DIGIT
        !          16755: *
        !          16756: {GTN03{BEQ{R7{#CH$PL{GTN04{JUMP IF PLUS SIGN
        !          16757: {{BEQ{R7{#CH$HT{GTNA2{HORIZONTAL TAB EQUIV TO BLANK
        !          16758: {{BNE{R7{#CH$MN{GTN12{JUMP IF NOT MINUS (MAY BE REAL)
        !          16759: {{MNZ{GTNNF{{{IF MINUS SIGN, SET NEGATIVE FLAG
        !          16760: *
        !          16761: *      MERGE HERE AFTER PROCESSING SIGN
        !          16762: *
        !          16763: {GTN04{BCT{R6{GTN05{{JUMP IF CHARS LEFT
        !          16764: {{BRN{GTN36{{{ELSE ERROR
        !          16765: *
        !          16766: *      LOOP TO FETCH CHARACTERS OF AN INTEGER
        !          16767: *
        !          16768: {GTN05{LCH{R7{(R9)+{{LOAD NEXT CHARACTER
        !          16769: {{BLT{R7{#CH$D0{GTN08{JUMP IF NOT A DIGIT
        !          16770: {{BGT{R7{#CH$D9{GTN08{JUMP IF NOT A DIGIT
        !          16771: *
        !          16772: *      MERGE HERE FOR FIRST DIGIT
        !          16773: *
        !          16774: {GTN06{STI{GTNSI{{{SAVE CURRENT VALUE
        !          16775: {{CVM{GTN35{{{CURRENT*10-(NEW DIG) JUMP IF OVFLOW
        !          16776: {{MNZ{GTNRD{{{SET DIGIT READ FLAG
        !          16777: {{BCT{R6{GTN05{{ELSE LOOP BACK IF MORE CHARS
        !          16778: *
        !          16779: *      HERE TO EXIT WITH CONVERTED INTEGER VALUE
        !          16780: *
        !          16781: {GTN07{BNZ{GTNNF{GTN32{{JUMP IF NEGATIVE (ALL SET)
        !          16782: {{NGI{{{{ELSE NEGATE
        !          16783: {{INO{GTN32{{{JUMP IF NO OVERFLOW
        !          16784: {{BRN{GTN36{{{ELSE SIGNAL ERROR
        !          16785: {{EJC{{{{
        !          16786: *
        !          16787: *      GTNUM (CONTINUED)
        !          16788: *
        !          16789: *      HERE FOR A NON-DIGIT CHARACTER WHILE ATTEMPTING TO
        !          16790: *      CONVERT AN INTEGER, CHECK FOR TRAILING BLANKS OR REAL.
        !          16791: *
        !          16792: {GTN08{BEQ{R7{#CH$BL{GTNA9{JUMP IF A BLANK
        !          16793: {{BEQ{R7{#CH$HT{GTNA9{JUMP IF HORIZONTAL TAB
        !          16794: {{ITR{{{{ELSE CONVERT INTEGER TO REAL
        !          16795: {{NGR{{{{NEGATE TO GET POSITIVE VALUE
        !          16796: {{BRN{GTN12{{{JUMP TO TRY FOR REAL
        !          16797: *
        !          16798: *      HERE WE SCAN OUT BLANKS TO END OF STRING
        !          16799: *
        !          16800: {GTN09{LCH{R7{(R9)+{{GET NEXT CHAR
        !          16801: {{BEQ{R7{#CH$HT{GTNA9{JUMP IF HORIZONTAL TAB
        !          16802: {{BNE{R7{#CH$BL{GTN36{ERROR IF NON-BLANK
        !          16803: {GTNA9{BCT{R6{GTN09{{LOOP BACK IF MORE CHARS TO CHECK
        !          16804: {{BRN{GTN07{{{RETURN INTEGER IF ALL BLANKS
        !          16805: *
        !          16806: *      LOOP TO COLLECT MANTISSA OF REAL
        !          16807: *
        !          16808: {GTN10{LCH{R7{(R9)+{{LOAD NEXT CHARACTER
        !          16809: {{BLT{R7{#CH$D0{GTN12{JUMP IF NON-NUMERIC
        !          16810: {{BGT{R7{#CH$D9{GTN12{JUMP IF NON-NUMERIC
        !          16811: *
        !          16812: *      MERGE HERE TO COLLECT FIRST REAL DIGIT
        !          16813: *
        !          16814: {GTN11{SUB{#CH$D0{R7{{CONVERT DIGIT TO NUMBER
        !          16815: {{MLR{REAVT{{{MULTIPLY REAL BY 10.0
        !          16816: {{ROV{GTN36{{{CONVERT ERROR IF OVERFLOW
        !          16817: {{STR{GTNSR{{{SAVE RESULT
        !          16818: {{MTI{R7{{{GET NEW DIGIT AS INTEGER
        !          16819: {{ITR{{{{CONVERT NEW DIGIT TO REAL
        !          16820: {{ADR{GTNSR{{{ADD TO GET NEW TOTAL
        !          16821: {{ADD{GTNDF{GTNSC{{INCREMENT SCALE IF AFTER DEC POINT
        !          16822: {{MNZ{GTNRD{{{SET DIGIT FOUND FLAG
        !          16823: {{BCT{R6{GTN10{{LOOP BACK IF MORE CHARS
        !          16824: {{BRN{GTN22{{{ELSE JUMP TO SCALE
        !          16825: {{EJC{{{{
        !          16826: *
        !          16827: *      GTNUM (CONTINUED)
        !          16828: *
        !          16829: *      HERE IF NON-DIGIT FOUND WHILE COLLECTING A REAL
        !          16830: *
        !          16831: {GTN12{BNE{R7{#CH$DT{GTN13{JUMP IF NOT DEC POINT
        !          16832: {{BNZ{GTNDF{GTN36{{IF DEC POINT, ERROR IF ONE ALREADY
        !          16833: {{MOV{#NUM01{GTNDF{{ELSE SET FLAG FOR DEC POINT
        !          16834: {{BCT{R6{GTN10{{LOOP BACK IF MORE CHARS
        !          16835: {{BRN{GTN22{{{ELSE JUMP TO SCALE
        !          16836: *
        !          16837: *      HERE IF NOT DECIMAL POINT
        !          16838: *
        !          16839: {GTN13{BEQ{R7{#CH$LE{GTN15{JUMP IF E FOR EXPONENT
        !          16840: {{BEQ{R7{#CH$LD{GTN15{JUMP IF D FOR EXPONENT
        !          16841: {{BEQ{R7{#CH$$E{GTN15{JUMP IF E FOR EXPONENT
        !          16842: {{BEQ{R7{#CH$$D{GTN15{JUMP IF D FOR EXPONENT
        !          16843: *
        !          16844: *      HERE CHECK FOR TRAILING BLANKS
        !          16845: *
        !          16846: {GTN14{BEQ{R7{#CH$BL{GTNB4{JUMP IF BLANK
        !          16847: {{BEQ{R7{#CH$HT{GTNB4{JUMP IF HORIZONTAL TAB
        !          16848: {{BRN{GTN36{{{ERROR IF NON-BLANK
        !          16849: *
        !          16850: {GTNB4{LCH{R7{(R9)+{{GET NEXT CHARACTER
        !          16851: {{BCT{R6{GTN14{{LOOP BACK TO CHECK IF MORE
        !          16852: {{BRN{GTN22{{{ELSE JUMP TO SCALE
        !          16853: *
        !          16854: *      HERE TO READ AND PROCESS AN EXPONENT
        !          16855: *
        !          16856: {GTN15{ZER{GTNES{{{SET EXPONENT SIGN POSITIVE
        !          16857: {{LDI{INTV0{{{INITIALIZE EXPONENT TO ZERO
        !          16858: {{MNZ{GTNDF{{{RESET NO DEC POINT INDICATION
        !          16859: {{BCT{R6{GTN16{{JUMP SKIPPING PAST E OR D
        !          16860: {{BRN{GTN36{{{ERROR IF NULL EXPONENT
        !          16861: *
        !          16862: *      CHECK FOR EXPONENT SIGN
        !          16863: *
        !          16864: {GTN16{LCH{R7{(R9)+{{LOAD FIRST EXPONENT CHARACTER
        !          16865: {{BEQ{R7{#CH$PL{GTN17{JUMP IF PLUS SIGN
        !          16866: {{BNE{R7{#CH$MN{GTN19{ELSE JUMP IF NOT MINUS SIGN
        !          16867: {{MNZ{GTNES{{{SET SIGN NEGATIVE IF MINUS SIGN
        !          16868: *
        !          16869: *      MERGE HERE AFTER PROCESSING EXPONENT SIGN
        !          16870: *
        !          16871: {GTN17{BCT{R6{GTN18{{JUMP IF CHARS LEFT
        !          16872: {{BRN{GTN36{{{ELSE ERROR
        !          16873: *
        !          16874: *      LOOP TO CONVERT EXPONENT DIGITS
        !          16875: *
        !          16876: {GTN18{LCH{R7{(R9)+{{LOAD NEXT CHARACTER
        !          16877: {{EJC{{{{
        !          16878: *
        !          16879: *      GTNUM (CONTINUED)
        !          16880: *
        !          16881: *      MERGE HERE FOR FIRST EXPONENT DIGIT
        !          16882: *
        !          16883: {GTN19{BLT{R7{#CH$D0{GTN20{JUMP IF NOT DIGIT
        !          16884: {{BGT{R7{#CH$D9{GTN20{JUMP IF NOT DIGIT
        !          16885: {{CVM{GTN36{{{ELSE CURRENT*10, SUBTRACT NEW DIGIT
        !          16886: {{BCT{R6{GTN18{{LOOP BACK IF MORE CHARS
        !          16887: {{BRN{GTN21{{{JUMP IF EXPONENT FIELD IS EXHAUSTED
        !          16888: *
        !          16889: *      HERE TO CHECK FOR TRAILING BLANKS AFTER EXPONENT
        !          16890: *
        !          16891: {GTN20{BEQ{R7{#CH$BL{GTNC0{JUMP IF BLANK
        !          16892: {{BEQ{R7{#CH$HT{GTNC0{JUMP IF HORIZONTAL TAB
        !          16893: {{BRN{GTN36{{{ERROR IF NON-BLANK
        !          16894: *
        !          16895: {GTNC0{LCH{R7{(R9)+{{GET NEXT CHARACTER
        !          16896: {{BCT{R6{GTN20{{LOOP BACK TILL ALL BLANKS SCANNED
        !          16897: *
        !          16898: *      MERGE HERE AFTER COLLECTING EXPONENT
        !          16899: *
        !          16900: {GTN21{STI{GTNEX{{{SAVE COLLECTED EXPONENT
        !          16901: {{BNZ{GTNES{GTN22{{JUMP IF IT WAS NEGATIVE
        !          16902: {{NGI{{{{ELSE COMPLEMENT
        !          16903: {{IOV{GTN36{{{ERROR IF OVERFLOW
        !          16904: {{STI{GTNEX{{{AND STORE POSITIVE EXPONENT
        !          16905: *
        !          16906: *      MERGE HERE WITH EXPONENT (0 IF NONE GIVEN)
        !          16907: *
        !          16908: {GTN22{BZE{GTNRD{GTN36{{ERROR IF NOT DIGITS COLLECTED
        !          16909: {{BZE{GTNDF{GTN36{{ERROR IF NO EXPONENT OR DEC POINT
        !          16910: {{MTI{GTNSC{{{ELSE LOAD SCALE AS INTEGER
        !          16911: {{SBI{GTNEX{{{SUBTRACT EXPONENT
        !          16912: {{IOV{GTN36{{{ERROR IF OVERFLOW
        !          16913: {{ILT{GTN26{{{JUMP IF WE MUST SCALE UP
        !          16914: *
        !          16915: *      HERE WE HAVE A NEGATIVE EXPONENT, SO SCALE DOWN
        !          16916: *
        !          16917: {{MFI{R6{GTN36{{LOAD SCALE FACTOR, ERR IF OVFLOW
        !          16918: *
        !          16919: *      LOOP TO SCALE DOWN IN STEPS OF 10**10
        !          16920: *
        !          16921: {GTN23{BLE{R6{#NUM10{GTN24{JUMP IF 10 OR LESS TO GO
        !          16922: {{DVR{REATT{{{ELSE DIVIDE BY 10**10
        !          16923: {{SUB{#NUM10{R6{{DECREMENT SCALE
        !          16924: {{BRN{GTN23{{{AND LOOP BACK
        !          16925: {{EJC{{{{
        !          16926: *
        !          16927: *      GTNUM (CONTINUED)
        !          16928: *
        !          16929: *      HERE SCALE REST OF WAY FROM POWERS OF TEN TABLE
        !          16930: *
        !          16931: {GTN24{BZE{R6{GTN30{{JUMP IF SCALED
        !          16932: {{LCT{R7{#CFP$R{{ELSE GET INDEXING FACTOR
        !          16933: {{MOV{#REAV1{R9{{POINT TO POWERS OF TEN TABLE
        !          16934: {{WTB{R6{{{CONVERT REMAINING SCALE TO BYTE OFS
        !          16935: *
        !          16936: *      LOOP TO POINT TO POWERS OF TEN TABLE ENTRY
        !          16937: *
        !          16938: {GTN25{ADD{R6{R9{{BUMP POINTER
        !          16939: {{BCT{R7{GTN25{{ONCE FOR EACH VALUE WORD
        !          16940: {{DVR{(R9){{{SCALE DOWN AS REQUIRED
        !          16941: {{BRN{GTN30{{{AND JUMP
        !          16942: *
        !          16943: *      COME HERE TO SCALE RESULT UP (POSITIVE EXPONENT)
        !          16944: *
        !          16945: {GTN26{NGI{{{{GET ABSOLUTE VALUE OF EXPONENT
        !          16946: {{IOV{GTN36{{{ERROR IF OVERFLOW
        !          16947: {{MFI{R6{GTN36{{ACQUIRE SCALE, ERROR IF OVFLOW
        !          16948: *
        !          16949: *      LOOP TO SCALE UP IN STEPS OF 10**10
        !          16950: *
        !          16951: {GTN27{BLE{R6{#NUM10{GTN28{JUMP IF 10 OR LESS TO GO
        !          16952: {{MLR{REATT{{{ELSE MULTIPLY BY 10**10
        !          16953: {{ROV{GTN36{{{ERROR IF OVERFLOW
        !          16954: {{SUB{#NUM10{R6{{ELSE DECREMENT SCALE
        !          16955: {{BRN{GTN27{{{AND LOOP BACK
        !          16956: *
        !          16957: *      HERE TO SCALE UP REST OF WAY WITH TABLE
        !          16958: *
        !          16959: {GTN28{BZE{R6{GTN30{{JUMP IF SCALED
        !          16960: {{LCT{R7{#CFP$R{{ELSE GET INDEXING FACTOR
        !          16961: {{MOV{#REAV1{R9{{POINT TO POWERS OF TEN TABLE
        !          16962: {{WTB{R6{{{CONVERT REMAINING SCALE TO BYTE OFS
        !          16963: *
        !          16964: *      LOOP TO POINT TO PROPER ENTRY IN POWERS OF TEN TABLE
        !          16965: *
        !          16966: {GTN29{ADD{R6{R9{{BUMP POINTER
        !          16967: {{BCT{R7{GTN29{{ONCE FOR EACH WORD IN VALUE
        !          16968: {{MLR{(R9){{{SCALE UP
        !          16969: {{ROV{GTN36{{{ERROR IF OVERFLOW
        !          16970: {{EJC{{{{
        !          16971: *
        !          16972: *      GTNUM (CONTINUED)
        !          16973: *
        !          16974: *      HERE WITH REAL VALUE SCALED AND READY EXCEPT FOR SIGN
        !          16975: *
        !          16976: {GTN30{BZE{GTNNF{GTN31{{JUMP IF POSITIVE
        !          16977: {{NGR{{{{ELSE NEGATE
        !          16978: *
        !          16979: *      HERE WITH PROPERLY SIGNED REAL VALUE IN (RA)
        !          16980: *
        !          16981: {GTN31{JSR{RCBLD{{{BUILD REAL BLOCK
        !          16982: {{BRN{GTN33{{{MERGE TO EXIT
        !          16983: *
        !          16984: *      HERE WITH PROPERLY SIGNED INTEGER VALUE IN (IA)
        !          16985: *
        !          16986: {GTN32{JSR{ICBLD{{{BUILD ICBLK
        !          16987: *
        !          16988: *      REAL MERGES HERE
        !          16989: *
        !          16990: {GTN33{MOV{(R9){R6{{LOAD FIRST WORD OF RESULT BLOCK
        !          16991: {{ICA{SP{{{POP ARGUMENT OFF STACK
        !          16992: *
        !          16993: *      COMMON EXIT POINT
        !          16994: *
        !          16995: {GTN34{EXI{{{{RETURN TO GTNUM CALLER
        !          16996: *
        !          16997: *      COME HERE IF OVERFLOW OCCURS DURING COLLECTION OF INTEGER
        !          16998: *
        !          16999: {GTN35{LDI{GTNSI{{{RELOAD INTEGER SO FAR
        !          17000: {{ITR{{{{CONVERT TO REAL
        !          17001: {{NGR{{{{MAKE VALUE POSITIVE
        !          17002: {{BRN{GTN11{{{MERGE WITH REAL CIRCUIT
        !          17003: *
        !          17004: *      HERE FOR UNCONVERTIBLE TO STRING OR CONVERSION ERROR
        !          17005: *
        !          17006: {GTN36{MOV{(SP)+{R9{{RELOAD ORIGINAL ARGUMENT
        !          17007: {{EXI{1{{{TAKE CONVERT-ERROR EXIT
        !          17008: {{ENP{{{{END PROCEDURE GTNUM
        !          17009: {{EJC{{{{
        !          17010: *
        !          17011: *      GTNVR -- CONVERT TO NATURAL VARIABLE
        !          17012: *
        !          17013: *      GTNVR LOCATES A VARIABLE BLOCK (VRBLK) GIVEN EITHER AN
        !          17014: *      APPROPRIATE NAME (NMBLK) OR A NON-NULL STRING (SCBLK).
        !          17015: *
        !          17016: *      (XR)                  ARGUMENT
        !          17017: *      JSR  GTNVR            CALL TO CONVERT TO NATURAL VARIABLE
        !          17018: *      PPM  LOC              TRANSFER LOC IF CONVERT IMPOSSIBLE
        !          17019: *      (XR)                  POINTER TO VRBLK
        !          17020: *      (WA,WB)               DESTROYED (CONVERSION ERROR ONLY)
        !          17021: *      (WC)                  DESTROYED
        !          17022: *
        !          17023: {GTNVR{PRC{E{1{{ENTRY POINT
        !          17024: {{BNE{(R9){#B$NML{GNV02{JUMP IF NOT NAME
        !          17025: {{MOV{4*NMBAS(R9){R9{{ELSE LOAD NAME BASE IF NAME
        !          17026: {{BLO{R9{STATE{GNV07{SKIP IF VRBLK (IN STATIC REGION)
        !          17027: *
        !          17028: *      COMMON ERROR EXIT
        !          17029: *
        !          17030: {GNV01{EXI{1{{{TAKE CONVERT-ERROR EXIT
        !          17031: *
        !          17032: *      HERE IF NOT NAME
        !          17033: *
        !          17034: {GNV02{MOV{R6{GNVSA{{SAVE WA
        !          17035: {{MOV{R7{GNVSB{{SAVE WB
        !          17036: {{MOV{R9{-(SP){{STACK ARGUMENT FOR GTSTG
        !          17037: {{JSR{GTSTG{{{CONVERT ARGUMENT TO STRING
        !          17038: {{PPM{GNV01{{{JUMP IF CONVERSION ERROR
        !          17039: {{BZE{R6{GNV01{{NULL STRING IS AN ERROR
        !          17040: {{JSR{FLSTG{{{FOLD LOWER CASE TO UPPER CASE
        !          17041: {{MOV{R10{-(SP){{SAVE XL
        !          17042: {{MOV{R9{-(SP){{STACK STRING PTR FOR LATER
        !          17043: {{MOV{R9{R7{{COPY STRING POINTER
        !          17044: {{ADD{#4*SCHAR{R7{{POINT TO CHARACTERS OF STRING
        !          17045: {{MOV{R7{GNVST{{SAVE POINTER TO CHARACTERS
        !          17046: {{MOV{R6{R7{{COPY LENGTH
        !          17047: {{CTW{R7{0{{GET NUMBER OF WORDS IN NAME
        !          17048: {{MOV{R7{GNVNW{{SAVE FOR LATER
        !          17049: {{JSR{HASHS{{{COMPUTE HASH INDEX FOR STRING
        !          17050: {{RMI{HSHNB{{{COMPUTE HASH OFFSET BY TAKING MOD
        !          17051: {{MFI{R8{{{GET AS OFFSET
        !          17052: {{WTB{R8{{{CONVERT OFFSET TO BYTES
        !          17053: {{ADD{HSHTB{R8{{POINT TO PROPER HASH CHAIN
        !          17054: {{SUB{#4*VRNXT{R8{{SUBTRACT OFFSET TO MERGE INTO LOOP
        !          17055: {{EJC{{{{
        !          17056: *
        !          17057: *      GTNVR (CONTINUED)
        !          17058: *
        !          17059: *      LOOP TO SEARCH HASH CHAIN
        !          17060: *
        !          17061: {GNV03{MOV{R8{R10{{COPY HASH CHAIN POINTER
        !          17062: {{MOV{4*VRNXT(R10){R10{{POINT TO NEXT VRBLK ON CHAIN
        !          17063: {{BZE{R10{GNV08{{JUMP IF END OF CHAIN
        !          17064: {{MOV{R10{R8{{SAVE POINTER TO THIS VRBLK
        !          17065: {{BNZ{4*VRLEN(R10){GNV04{{JUMP IF NOT SYSTEM VARIABLE
        !          17066: {{MOV{4*VRSVP(R10){R10{{ELSE POINT TO SVBLK
        !          17067: {{SUB{#4*VRSOF{R10{{ADJUST OFFSET FOR MERGE
        !          17068: *
        !          17069: *      MERGE HERE WITH STRING PTR (LIKE VRBLK) IN XL
        !          17070: *
        !          17071: {GNV04{BNE{R6{4*VRLEN(R10){GNV03{BACK FOR NEXT VRBLK IF LENGTHS NE
        !          17072: {{ADD{#4*VRCHS{R10{{ELSE POINT TO CHARS OF CHAIN ENTRY
        !          17073: {{LCT{R7{GNVNW{{GET WORD COUNTER TO CONTROL LOOP
        !          17074: {{MOV{GNVST{R9{{POINT TO CHARS OF NEW NAME
        !          17075: *
        !          17076: *      LOOP TO COMPARE CHARACTERS OF THE TWO NAMES
        !          17077: *
        !          17078: {GNV05{CNE{(R9){(R10){GNV03{JUMP IF NO MATCH FOR NEXT VRBLK
        !          17079: {{ICA{R9{{{BUMP NEW NAME POINTER
        !          17080: {{ICA{R10{{{BUMP VRBLK IN CHAIN NAME POINTER
        !          17081: {{BCT{R7{GNV05{{ELSE LOOP TILL ALL COMPARED
        !          17082: {{MOV{R8{R9{{WE HAVE FOUND A MATCH, GET VRBLK
        !          17083: *
        !          17084: *      EXIT POINT AFTER FINDING VRBLK OR BUILDING NEW ONE
        !          17085: *
        !          17086: {GNV06{MOV{GNVSA{R6{{RESTORE WA
        !          17087: {{MOV{GNVSB{R7{{RESTORE WB
        !          17088: {{ICA{SP{{{POP STRING POINTER
        !          17089: {{MOV{(SP)+{R10{{RESTORE XL
        !          17090: *
        !          17091: *      COMMON EXIT POINT
        !          17092: *
        !          17093: {GNV07{EXI{{{{RETURN TO GTNVR CALLER
        !          17094: *
        !          17095: *      NOT FOUND, PREPARE TO SEARCH SYSTEM VARIABLE TABLE
        !          17096: *
        !          17097: {GNV08{ZER{R9{{{CLEAR GARBAGE XR POINTER
        !          17098: {{MOV{R8{GNVHE{{SAVE PTR TO END OF HASH CHAIN
        !          17099: {{BGT{R6{#NUM09{GNV14{CANNOT BE SYSTEM VAR IF LENGTH GT 9
        !          17100: {{MOV{R6{R10{{ELSE COPY LENGTH
        !          17101: {{WTB{R10{{{CONVERT TO BYTE OFFSET
        !          17102: {{MOV{L^VSRCH(R10){R10{{POINT TO FIRST SVBLK OF THIS LENGTH
        !          17103: {{EJC{{{{
        !          17104: *
        !          17105: *      GTNVR (CONTINUED)
        !          17106: *
        !          17107: *      LOOP TO SEARCH ENTRIES IN STANDARD VARIABLE TABLE
        !          17108: *
        !          17109: {GNV09{MOV{R10{GNVSP{{SAVE TABLE POINTER
        !          17110: {{MOV{(R10)+{R8{{LOAD SVBIT BIT STRING
        !          17111: {{MOV{(R10)+{R7{{LOAD LENGTH FROM TABLE ENTRY
        !          17112: {{BNE{R6{R7{GNV14{JUMP IF END OF RIGHT LENGTH ENTIRES
        !          17113: {{LCT{R7{GNVNW{{GET WORD COUNTER TO CONTROL LOOP
        !          17114: {{MOV{GNVST{R9{{POINT TO CHARS OF NEW NAME
        !          17115: *
        !          17116: *      LOOP TO CHECK FOR MATCHING NAMES
        !          17117: *
        !          17118: {GNV10{CNE{(R9){(R10){GNV11{JUMP IF NAME MISMATCH
        !          17119: {{ICA{R9{{{ELSE BUMP NEW NAME POINTER
        !          17120: {{ICA{R10{{{BUMP SVBLK POINTER
        !          17121: {{BCT{R7{GNV10{{ELSE LOOP UNTIL ALL CHECKED
        !          17122: *
        !          17123: *      HERE WE HAVE A MATCH IN THE STANDARD VARIABLE TABLE
        !          17124: *
        !          17125: {{ZER{R8{{{SET VRLEN VALUE ZERO
        !          17126: {{MOV{#4*VRSI${R6{{SET STANDARD SIZE
        !          17127: {{BRN{GNV15{{{JUMP TO BUILD VRBLK
        !          17128: *
        !          17129: *      HERE IF NO MATCH WITH TABLE ENTRY IN SVBLKS TABLE
        !          17130: *
        !          17131: {GNV11{ICA{R10{{{BUMP PAST WORD OF CHARS
        !          17132: {{BCT{R7{GNV11{{LOOP BACK IF MORE TO GO
        !          17133: {{RSH{R8{SVNBT{{REMOVE UNINTERESTING BITS
        !          17134: *
        !          17135: *      LOOP TO BUMP TABLE PTR FOR EACH FLAGGED WORD
        !          17136: *
        !          17137: {GNV12{MOV{BITS1{R7{{LOAD BIT TO TEST
        !          17138: {{ANB{R8{R7{{TEST FOR WORD PRESENT
        !          17139: {{ZRB{R7{GNV13{{JUMP IF NOT PRESENT
        !          17140: {{ICA{R10{{{ELSE BUMP TABLE POINTER
        !          17141: *
        !          17142: *      HERE AFTER DEALING WITH ONE WORD (ONE BIT)
        !          17143: *
        !          17144: {GNV13{RSH{R8{1{{REMOVE BIT ALREADY PROCESSED
        !          17145: {{NZB{R8{GNV12{{LOOP BACK IF MORE BITS TO TEST
        !          17146: {{BRN{GNV09{{{ELSE LOOP BACK FOR NEXT SVBLK
        !          17147: *
        !          17148: *      HERE IF NOT SYSTEM VARIABLE
        !          17149: *
        !          17150: {GNV14{MOV{R6{R8{{COPY VRLEN VALUE
        !          17151: {{MOV{#VRCHS{R6{{LOAD STANDARD SIZE -CHARS
        !          17152: {{ADD{GNVNW{R6{{ADJUST FOR CHARS OF NAME
        !          17153: {{WTB{R6{{{CONVERT LENGTH TO BYTES
        !          17154: {{EJC{{{{
        !          17155: *
        !          17156: *      GTNVR (CONTINUED)
        !          17157: *
        !          17158: *      MERGE HERE TO BUILD VRBLK
        !          17159: *
        !          17160: {GNV15{JSR{ALOST{{{ALLOCATE SPACE FOR VRBLK (STATIC)
        !          17161: {{MOV{R9{R7{{SAVE VRBLK POINTER
        !          17162: {{MOV{#STNVR{R10{{POINT TO MODEL VARIABLE BLOCK
        !          17163: {{MOV{#4*VRLEN{R6{{SET LENGTH OF STANDARD FIELDS
        !          17164: {{MVW{{{{SET INITIAL FIELDS OF NEW BLOCK
        !          17165: {{MOV{GNVHE{R10{{LOAD POINTER TO END OF HASH CHAIN
        !          17166: {{MOV{R7{4*VRNXT(R10){{ADD NEW BLOCK TO END OF CHAIN
        !          17167: {{MOV{R8{(R9)+{{SET VRLEN FIELD, BUMP PTR
        !          17168: {{MOV{GNVNW{R6{{GET LENGTH IN WORDS
        !          17169: {{WTB{R6{{{CONVERT TO LENGTH IN BYTES
        !          17170: {{BZE{R8{GNV16{{JUMP IF SYSTEM VARIABLE
        !          17171: *
        !          17172: *      HERE FOR NON-SYSTEM VARIABLE -- SET CHARS OF NAME
        !          17173: *
        !          17174: {{MOV{(SP){R10{{POINT BACK TO STRING NAME
        !          17175: {{ADD{#4*SCHAR{R10{{POINT TO CHARS OF NAME
        !          17176: {{MVW{{{{MOVE CHARACTERS INTO PLACE
        !          17177: {{MOV{R7{R9{{RESTORE VRBLK POINTER
        !          17178: {{BRN{GNV06{{{JUMP BACK TO EXIT
        !          17179: *
        !          17180: *      HERE FOR SYSTEM VARIABLE CASE TO FILL IN FIELDS WHERE
        !          17181: *      NECESSARY FROM THE FIELDS PRESENT IN THE SVBLK.
        !          17182: *
        !          17183: {GNV16{MOV{GNVSP{R10{{LOAD POINTER TO SVBLK
        !          17184: {{MOV{R10{(R9){{SET SVBLK PTR IN VRBLK
        !          17185: {{MOV{R7{R9{{RESTORE VRBLK POINTER
        !          17186: {{MOV{4*SVBIT(R10){R7{{LOAD BIT INDICATORS
        !          17187: {{ADD{#4*SVCHS{R10{{POINT TO CHARACTERS OF NAME
        !          17188: {{ADD{R6{R10{{POINT PAST CHARACTERS
        !          17189: *
        !          17190: *      SKIP PAST KEYWORD NUMBER (SVKNM) IF PRESENT
        !          17191: *
        !          17192: {{MOV{BTKNM{R8{{LOAD TEST BIT
        !          17193: {{ANB{R7{R8{{AND TO TEST
        !          17194: {{ZRB{R8{GNV17{{JUMP IF NO KEYWORD NUMBER
        !          17195: {{ICA{R10{{{ELSE BUMP POINTER
        !          17196: {{EJC{{{{
        !          17197: *
        !          17198: *      GTNVR (CONTINUED)
        !          17199: *
        !          17200: *      HERE TEST FOR FUNCTION (SVFNC AND SVNAR)
        !          17201: *
        !          17202: {GNV17{MOV{BTFNC{R8{{GET TEST BIT
        !          17203: {{ANB{R7{R8{{AND TO TEST
        !          17204: {{ZRB{R8{GNV18{{SKIP IF NO SYSTEM FUNCTION
        !          17205: {{MOV{R10{4*VRFNC(R9){{ELSE POINT VRFNC TO SVFNC FIELD
        !          17206: {{ADD{#4*NUM02{R10{{AND BUMP PAST SVFNC, SVNAR FIELDS
        !          17207: *
        !          17208: *      NOW TEST FOR LABEL (SVLBL)
        !          17209: *
        !          17210: {GNV18{MOV{BTLBL{R8{{GET TEST BIT
        !          17211: {{ANB{R7{R8{{AND TO TEST
        !          17212: {{ZRB{R8{GNV19{{JUMP IF BIT IS OFF (NO SYSTEM LABL)
        !          17213: {{MOV{R10{4*VRLBL(R9){{ELSE POINT VRLBL TO SVLBL FIELD
        !          17214: {{ICA{R10{{{BUMP PAST SVLBL FIELD
        !          17215: *
        !          17216: *      NOW TEST FOR VALUE (SVVAL)
        !          17217: *
        !          17218: {GNV19{MOV{BTVAL{R8{{LOAD TEST BIT
        !          17219: {{ANB{R7{R8{{AND TO TEST
        !          17220: {{ZRB{R8{GNV06{{ALL DONE IF NO VALUE
        !          17221: {{MOV{(R10){4*VRVAL(R9){{ELSE SET INITIAL VALUE
        !          17222: {{MOV{#B$VRE{4*VRSTO(R9){{SET ERROR STORE ACCESS
        !          17223: {{BRN{GNV06{{{MERGE BACK TO EXIT TO CALLER
        !          17224: {{ENP{{{{END PROCEDURE GTNVR
        !          17225: {{EJC{{{{
        !          17226: *
        !          17227: *      GTPAT -- GET PATTERN
        !          17228: *
        !          17229: *      GTPAT IS PASSED AN OBJECT IN (XR) AND RETURNS A
        !          17230: *      PATTERN AFTER PERFORMING ANY NECESSARY CONVERSIONS
        !          17231: *
        !          17232: *      (XR)                  INPUT ARGUMENT
        !          17233: *      JSR  GTPAT            CALL TO CONVERT TO PATTERN
        !          17234: *      PPM  LOC              TRANSFER LOC IF CONVERT IMPOSSIBLE
        !          17235: *      (XR)                  RESULTING PATTERN
        !          17236: *      (WA)                  DESTROYED
        !          17237: *      (WB)                  DESTROYED (ONLY ON CONVERT ERROR)
        !          17238: *      (XR)                  UNCHANGED (ONLY ON CONVERT ERROR)
        !          17239: *
        !          17240: {GTPAT{PRC{E{1{{ENTRY POINT
        !          17241: {{BHI{(R9){#P$AAA{GTPT5{JUMP IF PATTERN ALREADY
        !          17242: *
        !          17243: *      HERE IF NOT PATTERN, TRY FOR STRING
        !          17244: *
        !          17245: {{MOV{R7{GTPSB{{SAVE WB
        !          17246: {{MOV{R9{-(SP){{STACK ARGUMENT FOR GTSTG
        !          17247: {{JSR{GTSTG{{{CONVERT ARGUMENT TO STRING
        !          17248: {{PPM{GTPT2{{{JUMP IF IMPOSSIBLE
        !          17249: *
        !          17250: *      HERE WE HAVE A STRING
        !          17251: *
        !          17252: {{BNZ{R6{GTPT1{{JUMP IF NON-NULL
        !          17253: *
        !          17254: *      HERE FOR NULL STRING. GENERATE POINTER TO NULL PATTERN.
        !          17255: *
        !          17256: {{MOV{#NDNTH{R9{{POINT TO NOTHEN NODE
        !          17257: {{BRN{GTPT4{{{JUMP TO EXIT
        !          17258: {{EJC{{{{
        !          17259: *
        !          17260: *      GTPAT (CONTINUED)
        !          17261: *
        !          17262: *      HERE FOR NON-NULL STRING
        !          17263: *
        !          17264: {GTPT1{MOV{#P$STR{R7{{LOAD PCODE FOR MULTI-CHAR STRING
        !          17265: {{BNE{R6{#NUM01{GTPT3{JUMP IF MULTI-CHAR STRING
        !          17266: *
        !          17267: *      HERE FOR ONE CHARACTER STRING, SHARE ONE CHARACTER ANY
        !          17268: *
        !          17269: {{PLC{R9{{{POINT TO CHARACTER
        !          17270: {{LCH{R6{(R9){{LOAD CHARACTER
        !          17271: {{MOV{R6{R9{{SET AS PARM1
        !          17272: {{MOV{#P$ANS{R7{{POINT TO PCODE FOR 1-CHAR ANY
        !          17273: {{BRN{GTPT3{{{JUMP TO BUILD NODE
        !          17274: *
        !          17275: *      HERE IF ARGUMENT IS NOT CONVERTIBLE TO STRING
        !          17276: *
        !          17277: {GTPT2{MOV{#P$EXA{R7{{SET PCODE FOR EXPRESSION IN CASE
        !          17278: {{BLO{(R9){#B$E$${GTPT3{JUMP TO BUILD NODE IF EXPRESSION
        !          17279: *
        !          17280: *      HERE WE HAVE AN ERROR (CONVERSION IMPOSSIBLE)
        !          17281: *
        !          17282: {{EXI{1{{{TAKE CONVERT ERROR EXIT
        !          17283: *
        !          17284: *      MERGE HERE TO BUILD NODE FOR STRING OR EXPRESSION
        !          17285: *
        !          17286: {GTPT3{JSR{PBILD{{{CALL ROUTINE TO BUILD PATTERN NODE
        !          17287: *
        !          17288: *      COMMON EXIT AFTER SUCCESSFUL CONVERSION
        !          17289: *
        !          17290: {GTPT4{MOV{GTPSB{R7{{RESTORE WB
        !          17291: *
        !          17292: *      MERGE HERE TO EXIT OF NO CONVERSION REQUIRED
        !          17293: *
        !          17294: {GTPT5{EXI{{{{RETURN TO GTPAT CALLER
        !          17295: {{ENP{{{{END PROCEDURE GTPAT
        !          17296: {{EJC{{{{
        !          17297: *
        !          17298: *      GTREA -- GET REAL VALUE
        !          17299: *
        !          17300: *      GTREA IS PASSED AN OBJECT AND RETURNS A REAL VALUE
        !          17301: *      PERFORMING ANY NECESSARY CONVERSIONS.
        !          17302: *
        !          17303: *      (XR)                  OBJECT TO BE CONVERTED
        !          17304: *      JSR  GTREA            CALL TO CONVERT OBJECT TO REAL
        !          17305: *      PPM  LOC              TRANSFER LOC IF CONVERT IMPOSSIBLE
        !          17306: *      (XR)                  POINTER TO RESULTING REAL
        !          17307: *      (WA,WB,WC,RA)         DESTROYED
        !          17308: *      (XR)                  UNCHANGED (CONVERT ERROR ONLY)
        !          17309: *
        !          17310: {GTREA{PRC{E{1{{ENTRY POINT
        !          17311: {{MOV{(R9){R6{{GET FIRST WORD OF BLOCK
        !          17312: {{BEQ{R6{#B$RCL{GTRE2{JUMP IF REAL
        !          17313: {{JSR{GTNUM{{{ELSE CONVERT ARGUMENT TO NUMERIC
        !          17314: {{PPM{GTRE3{{{JUMP IF UNCONVERTIBLE
        !          17315: {{BEQ{R6{#B$RCL{GTRE2{JUMP IF REAL WAS RETURNED
        !          17316: *
        !          17317: *      HERE FOR CASE OF AN INTEGER TO CONVERT TO REAL
        !          17318: *
        !          17319: {GTRE1{LDI{4*ICVAL(R9){{{LOAD INTEGER
        !          17320: {{ITR{{{{CONVERT TO REAL
        !          17321: {{JSR{RCBLD{{{BUILD RCBLK
        !          17322: *
        !          17323: *      EXIT WITH REAL
        !          17324: *
        !          17325: {GTRE2{EXI{{{{RETURN TO GTREA CALLER
        !          17326: *
        !          17327: *      HERE ON CONVERSION ERROR
        !          17328: *
        !          17329: {GTRE3{EXI{1{{{TAKE CONVERT ERROR EXIT
        !          17330: {{ENP{{{{END PROCEDURE GTREA
        !          17331: {{EJC{{{{
        !          17332: *
        !          17333: *      GTSMI -- GET SMALL INTEGER
        !          17334: *
        !          17335: *      GTSMI IS PASSED A SNOBOL OBJECT AND RETURNS AN ADDRESS
        !          17336: *      INTEGER IN THE RANGE (0 LE N LE DNAMB). SUCH A VALUE CAN
        !          17337: *      ONLY BE DERIVED FROM AN INTEGER IN THE APPROPRIATE RANGE.
        !          17338: *      SMALL INTEGERS NEVER APPEAR AS SNOBOL VALUES. HOWEVER,
        !          17339: *      THEY ARE USED INTERNALLY FOR A VARIETY OF PURPOSES.
        !          17340: *
        !          17341: *      -(XS)                 ARGUMENT TO CONVERT (ON STACK)
        !          17342: *      JSR  GTSMI            CALL TO CONVERT TO SMALL INTEGER
        !          17343: *      PPM  LOC              TRANSFER LOC FOR NOT INTEGER
        !          17344: *      PPM  LOC              TRANSFER LOC FOR LT 0, GT DNAMB
        !          17345: *      (XR,WC)               RESULTING SMALL INT (TWO COPIES)
        !          17346: *      (XS)                  POPPED
        !          17347: *      (RA)                  DESTROYED
        !          17348: *      (WA,WB)               DESTROYED (ON CONVERT ERROR ONLY)
        !          17349: *      (XR)                  INPUT ARG (CONVERT ERROR ONLY)
        !          17350: *
        !          17351: {GTSMI{PRC{N{2{{ENTRY POINT
        !          17352: {{MOV{(SP)+{R9{{LOAD ARGUMENT
        !          17353: {{BEQ{(R9){#B$ICL{GTSM1{SKIP IF ALREADY AN INTEGER
        !          17354: *
        !          17355: *      HERE IF NOT AN INTEGER
        !          17356: *
        !          17357: {{JSR{GTINT{{{CONVERT ARGUMENT TO INTEGER
        !          17358: {{PPM{GTSM2{{{JUMP IF CONVERT IS IMPOSSIBLE
        !          17359: *
        !          17360: *      MERGE HERE WITH INTEGER
        !          17361: *
        !          17362: {GTSM1{LDI{4*ICVAL(R9){{{LOAD INTEGER VALUE
        !          17363: {{MFI{R8{GTSM3{{MOVE AS ONE WORD, JUMP IF OVFLOW
        !          17364: {{BGT{R8{MXLEN{GTSM3{OR IF TOO SMALL
        !          17365: {{MOV{R8{R9{{COPY RESULT TO XR
        !          17366: {{EXI{{{{RETURN TO GTSMI CALLER
        !          17367: *
        !          17368: *      HERE IF UNCONVERTIBLE TO INTEGER
        !          17369: *
        !          17370: {GTSM2{EXI{1{{{TAKE NON-INTEGER ERROR EXIT
        !          17371: *
        !          17372: *      HERE IF OUT OF RANGE
        !          17373: *
        !          17374: {GTSM3{EXI{2{{{TAKE OUT-OF-RANGE ERROR EXIT
        !          17375: {{ENP{{{{END PROCEDURE GTSMI
        !          17376: {{EJC{{{{
        !          17377: *
        !          17378: *      GTSTG -- GET STRING
        !          17379: *
        !          17380: *      GTSTG IS PASSED AN OBJECT AND RETURNS A STRING WITH
        !          17381: *      ANY NECESSARY CONVERSIONS PERFORMED.
        !          17382: *
        !          17383: *      -(XS)                 INPUT ARGUMENT (ON STACK)
        !          17384: *      JSR  GTSTG            CALL TO CONVERT TO STRING
        !          17385: *      PPM  LOC              TRANSFER LOC IF CONVERT IMPOSSIBLE
        !          17386: *      (XR)                  POINTER TO RESULTING STRING
        !          17387: *      (WA)                  LENGTH OF STRING IN CHARACTERS
        !          17388: *      (XS)                  POPPED
        !          17389: *      (RA)                  DESTROYED
        !          17390: *      (XR)                  INPUT ARG (CONVERT ERROR ONLY)
        !          17391: *
        !          17392: {GTSTG{PRC{N{1{{ENTRY POINT
        !          17393: {{MOV{(SP)+{R9{{LOAD ARGUMENT, POP STACK
        !          17394: {{BEQ{(R9){#B$SCL{GTS30{JUMP IF ALREADY A STRING
        !          17395: *
        !          17396: *      HERE IF NOT A STRING ALREADY
        !          17397: *
        !          17398: {GTS01{MOV{R9{-(SP){{RESTACK ARGUMENT IN CASE ERROR
        !          17399: {{MOV{R10{-(SP){{SAVE XL
        !          17400: {{MOV{R7{GTSVB{{SAVE WB
        !          17401: {{MOV{R8{GTSVC{{SAVE WC
        !          17402: {{MOV{(R9){R6{{LOAD FIRST WORD OF BLOCK
        !          17403: {{BEQ{R6{#B$ICL{GTS05{JUMP TO CONVERT INTEGER
        !          17404: {{BEQ{R6{#B$RCL{GTS10{JUMP TO CONVERT REAL
        !          17405: {{BEQ{R6{#B$NML{GTS03{JUMP TO CONVERT NAME
        !          17406: {{BEQ{R6{#B$BCT{GTS32{JUMP TO CONVERT BUFFER
        !          17407: *
        !          17408: *      HERE ON CONVERSION ERROR
        !          17409: *
        !          17410: {GTS02{MOV{(SP)+{R10{{RESTORE XL
        !          17411: {{MOV{(SP)+{R9{{RELOAD INPUT ARGUMENT
        !          17412: {{EXI{1{{{TAKE CONVERT ERROR EXIT
        !          17413: {{EJC{{{{
        !          17414: *
        !          17415: *      GTSTG (CONTINUED)
        !          17416: *
        !          17417: *      HERE TO CONVERT A NAME (ONLY POSSIBLE IF NATURAL VAR)
        !          17418: *
        !          17419: {GTS03{MOV{4*NMBAS(R9){R10{{LOAD NAME BASE
        !          17420: {{BHI{R10{STATE{GTS02{ERROR IF NOT NATURAL VAR (STATIC)
        !          17421: {{ADD{#4*VRSOF{R10{{ELSE POINT TO POSSIBLE STRING NAME
        !          17422: {{MOV{4*SCLEN(R10){R6{{LOAD LENGTH
        !          17423: {{BNZ{R6{GTS04{{JUMP IF NOT SYSTEM VARIABLE
        !          17424: {{MOV{4*VRSVO(R10){R10{{ELSE POINT TO SVBLK
        !          17425: {{MOV{4*SVLEN(R10){R6{{AND LOAD NAME LENGTH
        !          17426: *
        !          17427: *      MERGE HERE WITH STRING IN XR, LENGTH IN WA
        !          17428: *
        !          17429: {GTS04{ZER{R7{{{SET OFFSET TO ZERO
        !          17430: {{JSR{SBSTR{{{USE SBSTR TO COPY STRING
        !          17431: {{BRN{GTS29{{{JUMP TO EXIT
        !          17432: *
        !          17433: *      COME HERE TO CONVERT AN INTEGER
        !          17434: *
        !          17435: {GTS05{LDI{4*ICVAL(R9){{{LOAD INTEGER VALUE
        !          17436: {{MOV{#NUM01{GTSSF{{SET SIGN FLAG NEGATIVE
        !          17437: {{ILT{GTS06{{{SKIP IF INTEGER IS NEGATIVE
        !          17438: {{NGI{{{{ELSE NEGATE INTEGER
        !          17439: {{ZER{GTSSF{{{AND RESET NEGATIVE FLAG
        !          17440: {{EJC{{{{
        !          17441: *
        !          17442: *      GTSTG (CONTINUED)
        !          17443: *
        !          17444: *      HERE WITH SIGN FLAG SET AND SIGN FORCED NEGATIVE AS
        !          17445: *      REQUIRED BY THE CVD INSTRUCTION.
        !          17446: *
        !          17447: {GTS06{MOV{GTSWK{R9{{POINT TO RESULT WORK AREA
        !          17448: {{MOV{#NSTMX{R7{{INITIALIZE COUNTER TO MAX LENGTH
        !          17449: {{PSC{R9{R7{{PREPARE TO STORE (RIGHT-LEFT)
        !          17450: *
        !          17451: *      LOOP TO CONVERT DIGITS INTO WORK AREA
        !          17452: *
        !          17453: {GTS07{CVD{{{{CONVERT ONE DIGIT INTO WA
        !          17454: {{SCH{R6{-(R9){{STORE IN WORK AREA
        !          17455: {{DCV{R7{{{DECREMENT COUNTER
        !          17456: {{INE{GTS07{{{LOOP IF MORE DIGITS TO GO
        !          17457: {{CSC{R9{{{COMPLETE STORE CHARACTERS
        !          17458: *
        !          17459: *      MERGE HERE AFTER CONVERTING INTEGER OR REAL INTO WORK
        !          17460: *      AREA. WB IS SET TO NSTMX - (NUMBER OF CHARS IN RESULT).
        !          17461: *
        !          17462: {GTS08{MOV{#NSTMX{R6{{GET MAX NUMBER OF CHARACTERS
        !          17463: {{SUB{R7{R6{{COMPUTE LENGTH OF RESULT
        !          17464: {{MOV{R6{R10{{REMEMBER LENGTH FOR MOVE LATER ON
        !          17465: {{ADD{GTSSF{R6{{ADD ONE FOR NEGATIVE SIGN IF NEEDED
        !          17466: {{JSR{ALOCS{{{ALLOCATE STRING FOR RESULT
        !          17467: {{MOV{R9{R8{{SAVE RESULT POINTER FOR THE MOMENT
        !          17468: {{PSC{R9{{{POINT TO CHARS OF RESULT BLOCK
        !          17469: {{BZE{GTSSF{GTS09{{SKIP IF POSITIVE
        !          17470: {{MOV{#CH$MN{R6{{ELSE LOAD NEGATIVE SIGN
        !          17471: {{SCH{R6{(R9)+{{AND STORE IT
        !          17472: {{CSC{R9{{{COMPLETE STORE CHARACTERS
        !          17473: *
        !          17474: *      HERE AFTER DEALING WITH SIGN
        !          17475: *
        !          17476: {GTS09{MOV{R10{R6{{RECALL LENGTH TO MOVE
        !          17477: {{MOV{GTSWK{R10{{POINT TO RESULT WORK AREA
        !          17478: {{PLC{R10{R7{{POINT TO FIRST RESULT CHARACTER
        !          17479: {{MVC{{{{MOVE CHARS TO RESULT STRING
        !          17480: {{MOV{R8{R9{{RESTORE RESULT POINTER
        !          17481: {{BRN{GTS29{{{JUMP TO EXIT
        !          17482: {{EJC{{{{
        !          17483: *
        !          17484: *      GTSTG (CONTINUED)
        !          17485: *
        !          17486: *      HERE TO CONVERT A REAL
        !          17487: *
        !          17488: {GTS10{LDR{4*RCVAL(R9){{{LOAD REAL
        !          17489: {{ZER{GTSSF{{{RESET NEGATIVE FLAG
        !          17490: {{REQ{GTS31{{{SKIP IF ZERO
        !          17491: {{RGE{GTS11{{{JUMP IF REAL IS POSITIVE
        !          17492: {{MOV{#NUM01{GTSSF{{ELSE SET NEGATIVE FLAG
        !          17493: {{NGR{{{{AND GET ABSOLUTE VALUE OF REAL
        !          17494: *
        !          17495: *      NOW SCALE THE REAL TO THE RANGE (0.1 LE X LT 1.0)
        !          17496: *
        !          17497: {GTS11{LDI{INTV0{{{INITIALIZE EXPONENT TO ZERO
        !          17498: *
        !          17499: *      LOOP TO SCALE UP IN STEPS OF 10**10
        !          17500: *
        !          17501: {GTS12{STR{GTSRS{{{SAVE REAL VALUE
        !          17502: {{SBR{REAP1{{{SUBTRACT 0.1 TO COMPARE
        !          17503: {{RGE{GTS13{{{JUMP IF SCALE UP NOT REQUIRED
        !          17504: {{LDR{GTSRS{{{ELSE RELOAD VALUE
        !          17505: {{MLR{REATT{{{MULTIPLY BY 10**10
        !          17506: {{SBI{INTVT{{{DECREMENT EXPONENT BY 10
        !          17507: {{BRN{GTS12{{{LOOP BACK TO TEST AGAIN
        !          17508: *
        !          17509: *      TEST FOR SCALE DOWN REQUIRED
        !          17510: *
        !          17511: {GTS13{LDR{GTSRS{{{RELOAD VALUE
        !          17512: {{SBR{REAV1{{{SUBTRACT 1.0
        !          17513: {{RLT{GTS17{{{JUMP IF NO SCALE DOWN REQUIRED
        !          17514: {{LDR{GTSRS{{{ELSE RELOAD VALUE
        !          17515: *
        !          17516: *      LOOP TO SCALE DOWN IN STEPS OF 10**10
        !          17517: *
        !          17518: {GTS14{SBR{REATT{{{SUBTRACT 10**10 TO COMPARE
        !          17519: {{RLT{GTS15{{{JUMP IF LARGE STEP NOT REQUIRED
        !          17520: {{LDR{GTSRS{{{ELSE RESTORE VALUE
        !          17521: {{DVR{REATT{{{DIVIDE BY 10**10
        !          17522: {{STR{GTSRS{{{STORE NEW VALUE
        !          17523: {{ADI{INTVT{{{INCREMENT EXPONENT BY 10
        !          17524: {{BRN{GTS14{{{LOOP BACK
        !          17525: {{EJC{{{{
        !          17526: *
        !          17527: *      GTSTG (CONTINUED)
        !          17528: *
        !          17529: *      AT THIS POINT WE HAVE (1.0 LE X LT 10**10)
        !          17530: *      COMPLETE SCALING WITH POWERS OF TEN TABLE
        !          17531: *
        !          17532: {GTS15{MOV{#REAV1{R9{{POINT TO POWERS OF TEN TABLE
        !          17533: *
        !          17534: *      LOOP TO LOCATE CORRECT ENTRY IN TABLE
        !          17535: *
        !          17536: {GTS16{LDR{GTSRS{{{RELOAD VALUE
        !          17537: {{ADI{INTV1{{{INCREMENT EXPONENT
        !          17538: {{ADD{#4*CFP$R{R9{{POINT TO NEXT ENTRY IN TABLE
        !          17539: {{SBR{(R9){{{SUBTRACT IT TO COMPARE
        !          17540: {{RGE{GTS16{{{LOOP TILL WE FIND A LARGER ENTRY
        !          17541: {{LDR{GTSRS{{{THEN RELOAD THE VALUE
        !          17542: {{DVR{(R9){{{AND COMPLETE SCALING
        !          17543: {{STR{GTSRS{{{STORE VALUE
        !          17544: *
        !          17545: *      WE ARE NOW SCALED, SO ROUND BY ADDING 0.5 * 10**(-CFP$S)
        !          17546: *
        !          17547: {GTS17{LDR{GTSRS{{{GET VALUE AGAIN
        !          17548: {{ADR{GTSRN{{{ADD ROUNDING FACTOR
        !          17549: {{STR{GTSRS{{{STORE RESULT
        !          17550: *
        !          17551: *      THE ROUNDING OPERATION MAY HAVE PUSHED US UP PAST
        !          17552: *      1.0 AGAIN, SO CHECK ONE MORE TIME.
        !          17553: *
        !          17554: {{SBR{REAV1{{{SUBTRACT 1.0 TO COMPARE
        !          17555: {{RLT{GTS18{{{SKIP IF OK
        !          17556: {{ADI{INTV1{{{ELSE INCREMENT EXPONENT
        !          17557: {{LDR{GTSRS{{{RELOAD VALUE
        !          17558: {{DVR{REAVT{{{DIVIDE BY 10.0 TO RESCALE
        !          17559: {{BRN{GTS19{{{JUMP TO MERGE
        !          17560: *
        !          17561: *      HERE IF ROUNDING DID NOT MUCK UP SCALING
        !          17562: *
        !          17563: {GTS18{LDR{GTSRS{{{RELOAD ROUNDED VALUE
        !          17564: {{EJC{{{{
        !          17565: *
        !          17566: *      GTSTG (CONTINUED)
        !          17567: *
        !          17568: *      NOW WE HAVE COMPLETED THE SCALING AS FOLLOWS
        !          17569: *
        !          17570: *      (IA)                  SIGNED EXPONENT
        !          17571: *      (RA)                  SCALED REAL (ABSOLUTE VALUE)
        !          17572: *
        !          17573: *      IF THE EXPONENT IS NEGATIVE OR GREATER THAN CFP$S, THEN
        !          17574: *      WE CONVERT THE NUMBER IN THE FORM.
        !          17575: *
        !          17576: *      (NEG SIGN) 0 . (CPF$S DIGITS) E (EXP SIGN) (EXP DIGITS)
        !          17577: *
        !          17578: *      IF THE EXPONENT IS POSITIVE AND LESS THAN OR EQUAL TO
        !          17579: *      CFP$S, THE NUMBER IS CONVERTED IN THE FORM.
        !          17580: *
        !          17581: *      (NEG SIGN) (EXPONENT DIGITS) . (CFP$S-EXPONENT DIGITS)
        !          17582: *
        !          17583: *      IN BOTH CASES, THE FORMATS OBTAINED FROM THE ABOVE
        !          17584: *      RULES ARE MODIFIED BY DELETING TRAILING ZEROS AFTER THE
        !          17585: *      DECIMAL POINT. THERE ARE NO LEADING ZEROS IN THE EXPONENT
        !          17586: *      AND THE EXPONENT SIGN IS ALWAYS PRESENT.
        !          17587: *
        !          17588: {GTS19{MOV{#CFP$S{R10{{SET NUM DEC DIGITS = CFP$S
        !          17589: {{MOV{#CH$MN{GTSES{{SET EXPONENT SIGN NEGATIVE
        !          17590: {{ILT{GTS21{{{ALL SET IF EXPONENT IS NEGATIVE
        !          17591: {{MFI{R6{{{ELSE FETCH EXPONENT
        !          17592: {{BLE{R6{#CFP$S{GTS20{SKIP IF WE CAN USE SPECIAL FORMAT
        !          17593: {{MTI{R6{{{ELSE RESTORE EXPONENT
        !          17594: {{NGI{{{{SET NEGATIVE FOR CVD
        !          17595: {{MOV{#CH$PL{GTSES{{SET PLUS SIGN FOR EXPONENT SIGN
        !          17596: {{BRN{GTS21{{{JUMP TO GENERATE EXPONENT
        !          17597: *
        !          17598: *      HERE IF WE CAN USE THE FORMAT WITHOUT AN EXPONENT
        !          17599: *
        !          17600: {GTS20{SUB{R6{R10{{COMPUTE DIGITS AFTER DECIMAL POINT
        !          17601: {{LDI{INTV0{{{RESET EXPONENT TO ZERO
        !          17602: {{EJC{{{{
        !          17603: *
        !          17604: *      GTSTG (CONTINUED)
        !          17605: *
        !          17606: *      MERGE HERE AS FOLLOWS
        !          17607: *
        !          17608: *      (IA)                  EXPONENT ABSOLUTE VALUE
        !          17609: *      GTSES                 CHARACTER FOR EXPONENT SIGN
        !          17610: *      (RA)                  POSITIVE FRACTION
        !          17611: *      (XL)                  NUMBER OF DIGITS AFTER DEC POINT
        !          17612: *
        !          17613: {GTS21{MOV{GTSWK{R9{{POINT TO WORK AREA
        !          17614: {{MOV{#NSTMX{R7{{SET CHARACTER CTR TO MAX LENGTH
        !          17615: {{PSC{R9{R7{{PREPARE TO STORE (RIGHT TO LEFT)
        !          17616: {{IEQ{GTS23{{{SKIP EXPONENT IF IT IS ZERO
        !          17617: *
        !          17618: *      LOOP TO GENERATE DIGITS OF EXPONENT
        !          17619: *
        !          17620: {GTS22{CVD{{{{CONVERT A DIGIT INTO WA
        !          17621: {{SCH{R6{-(R9){{STORE IN WORK AREA
        !          17622: {{DCV{R7{{{DECREMENT COUNTER
        !          17623: {{INE{GTS22{{{LOOP BACK IF MORE DIGITS TO GO
        !          17624: *
        !          17625: *      HERE GENERATE EXPONENT SIGN AND E
        !          17626: *
        !          17627: {{MOV{GTSES{R6{{LOAD EXPONENT SIGN
        !          17628: {{SCH{R6{-(R9){{STORE IN WORK AREA
        !          17629: {{MOV{#CH$LE{R6{{GET CHARACTER LETTER E
        !          17630: {{SCH{R6{-(R9){{STORE IN WORK AREA
        !          17631: {{SUB{#NUM02{R7{{DECREMENT COUNTER FOR SIGN AND E
        !          17632: *
        !          17633: *      HERE TO GENERATE THE FRACTION
        !          17634: *
        !          17635: {GTS23{MLR{GTSSC{{{CONVERT REAL TO INTEGER (10**CFP$S)
        !          17636: {{RTI{{{{GET INTEGER (OVERFLOW IMPOSSIBLE)
        !          17637: {{NGI{{{{NEGATE AS REQUIRED BY CVD
        !          17638: *
        !          17639: *      LOOP TO SUPPRESS TRAILING ZEROS
        !          17640: *
        !          17641: {GTS24{BZE{R10{GTS27{{JUMP IF NO DIGITS LEFT TO DO
        !          17642: {{CVD{{{{ELSE CONVERT ONE DIGIT
        !          17643: {{BNE{R6{#CH$D0{GTS26{JUMP IF NOT A ZERO
        !          17644: {{DCV{R10{{{DECREMENT COUNTER
        !          17645: {{BRN{GTS24{{{LOOP BACK FOR NEXT DIGIT
        !          17646: {{EJC{{{{
        !          17647: *
        !          17648: *      GTSTG (CONTINUED)
        !          17649: *
        !          17650: *      LOOP TO GENERATE DIGITS AFTER DECIMAL POINT
        !          17651: *
        !          17652: {GTS25{CVD{{{{CONVERT A DIGIT INTO WA
        !          17653: *
        !          17654: *      MERGE HERE FIRST TIME
        !          17655: *
        !          17656: {GTS26{SCH{R6{-(R9){{STORE DIGIT
        !          17657: {{DCV{R7{{{DECREMENT COUNTER
        !          17658: {{DCV{R10{{{DECREMENT COUNTER
        !          17659: {{BNZ{R10{GTS25{{LOOP BACK IF MORE TO GO
        !          17660: *
        !          17661: *      HERE GENERATE THE DECIMAL POINT
        !          17662: *
        !          17663: {GTS27{MOV{#CH$DT{R6{{LOAD DECIMAL POINT
        !          17664: {{SCH{R6{-(R9){{STORE IN WORK AREA
        !          17665: {{DCV{R7{{{DECREMENT COUNTER
        !          17666: *
        !          17667: *      HERE GENERATE THE DIGITS BEFORE THE DECIMAL POINT
        !          17668: *
        !          17669: {GTS28{CVD{{{{CONVERT A DIGIT INTO WA
        !          17670: {{SCH{R6{-(R9){{STORE IN WORK AREA
        !          17671: {{DCV{R7{{{DECREMENT COUNTER
        !          17672: {{INE{GTS28{{{LOOP BACK IF MORE TO GO
        !          17673: {{CSC{R9{{{COMPLETE STORE CHARACTERS
        !          17674: {{BRN{GTS08{{{ELSE JUMP BACK TO EXIT
        !          17675: *
        !          17676: *      EXIT POINT AFTER SUCCESSFUL CONVERSION
        !          17677: *
        !          17678: {GTS29{MOV{(SP)+{R10{{RESTORE XL
        !          17679: {{ICA{SP{{{POP ARGUMENT
        !          17680: {{MOV{GTSVB{R7{{RESTORE WB
        !          17681: {{MOV{GTSVC{R8{{RESTORE WC
        !          17682: *
        !          17683: *      MERGE HERE IF NO CONVERSION REQUIRED
        !          17684: *
        !          17685: {GTS30{MOV{4*SCLEN(R9){R6{{LOAD STRING LENGTH
        !          17686: {{EXI{{{{RETURN TO CALLER
        !          17687: *
        !          17688: *      HERE TO RETURN STRING FOR REAL ZERO
        !          17689: *
        !          17690: {GTS31{MOV{#SCRE0{R10{{POINT TO STRING
        !          17691: {{MOV{#NUM02{R6{{2 CHARS
        !          17692: {{ZER{R7{{{ZERO OFFSET
        !          17693: {{JSR{SBSTR{{{COPY STRING
        !          17694: {{BRN{GTS29{{{RETURN
        !          17695: {{EJC{{{{
        !          17696: *
        !          17697: *      HERE TO CONVERT A BUFFER BLOCK
        !          17698: *
        !          17699: {GTS32{MOV{R9{R10{{COPY ARG PTR
        !          17700: {{MOV{4*BCLEN(R10){R6{{GET SIZE TO ALLOCATE
        !          17701: {{BZE{R6{GTS33{{IF NULL THEN RETURN NULL
        !          17702: {{JSR{ALOCS{{{ALLOCATE STRING FRAME
        !          17703: {{MOV{R9{R7{{SAVE STRING PTR
        !          17704: {{MOV{4*SCLEN(R9){R6{{GET LENGTH TO MOVE
        !          17705: {{CTB{R6{0{{GET AS MULTIPLE OF WORD SIZE
        !          17706: {{MOV{4*BCBUF(R10){R10{{POINT TO BFBLK
        !          17707: {{ADD{#4*SCSI${R9{{POINT TO START OF CHARACTER AREA
        !          17708: {{ADD{#4*BFSI${R10{{POINT TO START OF BUFFER CHARS
        !          17709: {{MVW{{{{COPY WORDS
        !          17710: {{MOV{R7{R9{{RESTORE SCBLK PTR
        !          17711: {{BRN{GTS29{{{EXIT WITH SCBLK
        !          17712: *
        !          17713: *      HERE WHEN NULL BUFFER IS BEING CONVERTED
        !          17714: *
        !          17715: {GTS33{MOV{#NULLS{R9{{POINT TO NULL
        !          17716: {{BRN{GTS29{{{EXIT WITH NULL
        !          17717: {{ENP{{{{END PROCEDURE GTSTG
        !          17718: {{EJC{{{{
        !          17719: *
        !          17720: *      GTVAR -- GET VARIABLE FOR I/O/TRACE ASSOCIATION
        !          17721: *
        !          17722: *      GTVAR IS USED TO POINT TO AN ACTUAL VARIABLE LOCATION
        !          17723: *      FOR THE DETACH,INPUT,OUTPUT,TRACE,STOPTR SYSTEM FUNCTIONS
        !          17724: *
        !          17725: *      (XR)                  ARGUMENT TO FUNCTION
        !          17726: *      JSR  GTVAR            CALL TO LOCATE VARIABLE POINTER
        !          17727: *      PPM  LOC              TRANSFER LOC IF NOT OK VARIABLE
        !          17728: *      (XL,WA)               NAME BASE,OFFSET OF VARIABLE
        !          17729: *      (XR,RA)               DESTROYED
        !          17730: *      (WB,WC)               DESTROYED (CONVERT ERROR ONLY)
        !          17731: *      (XR)                  INPUT ARG (CONVERT ERROR ONLY)
        !          17732: *
        !          17733: {GTVAR{PRC{E{1{{ENTRY POINT
        !          17734: {{BNE{(R9){#B$NML{GTVR2{JUMP IF NOT A NAME
        !          17735: {{MOV{4*NMOFS(R9){R6{{ELSE LOAD NAME OFFSET
        !          17736: {{MOV{4*NMBAS(R9){R10{{LOAD NAME BASE
        !          17737: {{BEQ{(R10){#B$EVT{GTVR1{ERROR IF EXPRESSION VARIABLE
        !          17738: {{BNE{(R10){#B$KVT{GTVR3{ALL OK IF NOT KEYWORD VARIABLE
        !          17739: *
        !          17740: *      HERE ON CONVERSION ERROR
        !          17741: *
        !          17742: {GTVR1{EXI{1{{{TAKE CONVERT ERROR EXIT
        !          17743: *
        !          17744: *      HERE IF NOT A NAME, TRY CONVERT TO NATURAL VARIABLE
        !          17745: *
        !          17746: {GTVR2{MOV{R8{GTVRC{{SAVE WC
        !          17747: {{JSR{GTNVR{{{LOCATE VRBLK IF POSSIBLE
        !          17748: {{PPM{GTVR1{{{JUMP IF CONVERT ERROR
        !          17749: {{MOV{R9{R10{{ELSE COPY VRBLK NAME BASE
        !          17750: {{MOV{#4*VRVAL{R6{{AND SET OFFSET
        !          17751: {{MOV{GTVRC{R8{{RESTORE WC
        !          17752: *
        !          17753: *      HERE FOR NAME OBTAINED
        !          17754: *
        !          17755: {GTVR3{BHI{R10{STATE{GTVR4{ALL OK IF NOT NATURAL VARIABLE
        !          17756: {{BEQ{4*VRSTO(R10){#B$VRE{GTVR1{ERROR IF PROTECTED VARIABLE
        !          17757: *
        !          17758: *      COMMON EXIT POINT
        !          17759: *
        !          17760: {GTVR4{EXI{{{{RETURN TO CALLER
        !          17761: {{ENP{{{{END PROCEDURE GTVAR
        !          17762: {{EJC{{{{
        !          17763: *
        !          17764: *      HASHS -- COMPUTE HASH INDEX FOR STRING
        !          17765: *
        !          17766: *      HASHS IS USED TO CONVERT A STRING TO A UNIQUE INTEGER
        !          17767: *      VALUE. THE RESULTING HASH VALUE IS A POSITIVE INTEGER
        !          17768: *      IN THE RANGE 0 TO CFP$M
        !          17769: *
        !          17770: *      (XR)                  STRING TO BE HASHED
        !          17771: *      JSR  HASHS            CALL TO HASH STRING
        !          17772: *      (IA)                  HASH VALUE
        !          17773: *      (XR,WB,WC)            DESTROYED
        !          17774: *
        !          17775: *      THE HASH FUNCTION USED IS AS FOLLOWS.
        !          17776: *
        !          17777: *      START WITH THE LENGTH OF THE STRING (SGD07)
        !          17778: *
        !          17779: *      TAKE THE FIRST E$HNW WORDS OF THE CHARACTERS FROM
        !          17780: *      THE STRING OR ALL THE WORDS IF FEWER THAN E$HNW.
        !          17781: *
        !          17782: *      COMPUTE THE EXCLUSIVE OR OF ALL THESE WORDS TREATING
        !          17783: *      THEM AS ONE WORD BIT STRING VALUES.
        !          17784: *
        !          17785: *      MOVE THE RESULT AS AN INTEGER WITH THE MTI INSTRUCTION.
        !          17786: *
        !          17787: {HASHS{PRC{E{0{{ENTRY POINT
        !          17788: {{MOV{4*SCLEN(R9){R8{{LOAD STRING LENGTH IN CHARACTERS
        !          17789: {{MOV{R8{R7{{INITIALIZE WITH LENGTH
        !          17790: {{BZE{R8{HSHS3{{JUMP IF NULL STRING
        !          17791: {{CTW{R8{0{{ELSE GET NUMBER OF WORDS OF CHARS
        !          17792: {{ADD{#4*SCHAR{R9{{POINT TO CHARACTERS OF STRING
        !          17793: {{BLO{R8{#E$HNW{HSHS1{USE WHOLE STRING IF SHORT
        !          17794: {{MOV{#E$HNW{R8{{ELSE SET TO INVOLVE FIRST E$HNW WDS
        !          17795: *
        !          17796: *      HERE WITH COUNT OF WORDS TO CHECK IN WC
        !          17797: *
        !          17798: {HSHS1{LCT{R8{R8{{SET COUNTER TO CONTROL LOOP
        !          17799: *
        !          17800: *      LOOP TO COMPUTE EXCLUSIVE OR
        !          17801: *
        !          17802: {HSHS2{XOB{(R9)+{R7{{EXCLUSIVE OR NEXT WORD OF CHARS
        !          17803: {{BCT{R8{HSHS2{{LOOP TILL ALL PROCESSED
        !          17804: *
        !          17805: *      MERGE HERE WITH EXCLUSIVE OR IN WB
        !          17806: *
        !          17807: {HSHS3{ZGB{R7{{{ZEROISE UNDEFINED BITS
        !          17808: {{ANB{BITSM{R7{{ENSURE IN RANGE 0 TO CFP$M
        !          17809: {{MTI{R7{{{MOVE RESULT AS INTEGER
        !          17810: {{ZER{R9{{{CLEAR GARBAGE VALUE IN XR
        !          17811: {{EXI{{{{RETURN TO HASHS CALLER
        !          17812: {{ENP{{{{END PROCEDURE HASHS
        !          17813: {{EJC{{{{
        !          17814: *
        !          17815: *      ICBLD -- BUILD INTEGER BLOCK
        !          17816: *
        !          17817: *      (IA)                  INTEGER VALUE FOR ICBLK
        !          17818: *      JSR  ICBLD            CALL TO BUILD INTEGER BLOCK
        !          17819: *      (XR)                  POINTER TO RESULT ICBLK
        !          17820: *      (WA)                  DESTROYED
        !          17821: *
        !          17822: {ICBLD{PRC{E{0{{ENTRY POINT
        !          17823: {{MFI{R9{ICBL1{{COPY SMALL INTEGERS
        !          17824: {{BLE{R9{#NUM02{ICBL3{JUMP IF 0,1 OR 2
        !          17825: *
        !          17826: *      CONSTRUCT ICBLK
        !          17827: *
        !          17828: {ICBL1{MOV{DNAMP{R9{{LOAD POINTER TO NEXT AVAILABLE LOC
        !          17829: {{ADD{#4*ICSI${R9{{POINT PAST NEW ICBLK
        !          17830: {{BLO{R9{DNAME{ICBL2{JUMP IF THERE IS ROOM
        !          17831: {{MOV{#4*ICSI${R6{{ELSE LOAD LENGTH OF ICBLK
        !          17832: {{JSR{ALLOC{{{USE STANDARD ALLOCATOR TO GET BLOCK
        !          17833: {{ADD{R6{R9{{POINT PAST BLOCK TO MERGE
        !          17834: *
        !          17835: *      MERGE HERE WITH XR POINTING PAST THE BLOCK OBTAINED
        !          17836: *
        !          17837: {ICBL2{MOV{R9{DNAMP{{SET NEW POINTER
        !          17838: {{SUB{#4*ICSI${R9{{POINT BACK TO START OF BLOCK
        !          17839: {{MOV{#B$ICL{(R9){{STORE TYPE WORD
        !          17840: {{STI{4*ICVAL(R9){{{STORE INTEGER VALUE IN ICBLK
        !          17841: {{EXI{{{{RETURN TO ICBLD CALLER
        !          17842: *
        !          17843: *      OPTIMISE BY NOT BUILDING ICBLKS FOR SMALL INTEGERS
        !          17844: *
        !          17845: {ICBL3{WTB{R9{{{CONVERT INTEGER TO OFFSET
        !          17846: {{MOV{L^INTAB(R9){R9{{POINT TO PRE-BUILT ICBLK
        !          17847: {{EXI{{{{RETURN
        !          17848: {{ENP{{{{END PROCEDURE ICBLD
        !          17849: {{EJC{{{{
        !          17850: *
        !          17851: *      IDENT -- COMPARE TWO VALUES
        !          17852: *
        !          17853: *      IDENT COMPARES TWO VALUES IN THE SENSE OF THE IDENT
        !          17854: *      DIFFER FUNCTIONS AVAILABLE AT THE SNOBOL LEVEL.
        !          17855: *
        !          17856: *      (XR)                  FIRST ARGUMENT
        !          17857: *      (XL)                  SECOND ARGUMENT
        !          17858: *      JSR  IDENT            CALL TO COMPARE ARGUMENTS
        !          17859: *      PPM  LOC              TRANSFER LOC IF IDENT
        !          17860: *      (NORMAL RETURN IF DIFFER)
        !          17861: *      (XR,XL,WC,RA)         DESTROYED
        !          17862: *
        !          17863: {IDENT{PRC{E{1{{ENTRY POINT
        !          17864: {{BEQ{R9{R10{IDEN7{JUMP IF SAME POINTER (IDENT)
        !          17865: {{MOV{(R9){R8{{ELSE LOAD ARG 1 TYPE WORD
        !          17866: {{BNE{R8{(R10){IDEN1{DIFFER IF ARG 2 TYPE WORD DIFFER
        !          17867: {{BEQ{R8{#B$SCL{IDEN2{JUMP IF STRINGS
        !          17868: {{BEQ{R8{#B$ICL{IDEN4{JUMP IF INTEGERS
        !          17869: {{BEQ{R8{#B$RCL{IDEN5{JUMP IF REALS
        !          17870: {{BEQ{R8{#B$NML{IDEN6{JUMP IF NAMES
        !          17871: *
        !          17872: *      FOR ALL OTHER DATATYPES, MUST BE DIFFER IF XR NE XL
        !          17873: *
        !          17874: *      MERGE HERE FOR DIFFER
        !          17875: *
        !          17876: {IDEN1{EXI{{{{TAKE DIFFER EXIT
        !          17877: *
        !          17878: *      HERE FOR STRINGS, IDENT ONLY IF LENGTHS AND CHARS SAME
        !          17879: *
        !          17880: {IDEN2{MOV{4*SCLEN(R9){R8{{LOAD ARG 1 LENGTH
        !          17881: {{BNE{R8{4*SCLEN(R10){IDEN1{DIFFER IF LENGTHS DIFFER
        !          17882: {{CTW{R8{0{{GET NUMBER OF WORDS IN STRINGS
        !          17883: {{ADD{#4*SCHAR{R9{{POINT TO CHARS OF ARG 1
        !          17884: {{ADD{#4*SCHAR{R10{{POINT TO CHARS OF ARG 2
        !          17885: {{LCT{R8{R8{{SET LOOP COUNTER
        !          17886: *
        !          17887: *      LOOP TO COMPARE CHARACTERS. NOTE THAT WA CANNOT BE ZERO
        !          17888: *      SINCE ALL NULL STRINGS POINT TO NULLS AND GIVE XL=XR.
        !          17889: *
        !          17890: {IDEN3{CNE{(R9){(R10){IDEN8{DIFFER IF CHARS DO NOT MATCH
        !          17891: {{ICA{R9{{{ELSE BUMP ARG ONE POINTER
        !          17892: {{ICA{R10{{{BUMP ARG TWO POINTER
        !          17893: {{BCT{R8{IDEN3{{LOOP BACK TILL ALL CHECKED
        !          17894: {{EJC{{{{
        !          17895: *
        !          17896: *      IDENT (CONTINUED)
        !          17897: *
        !          17898: *      HERE TO EXIT FOR CASE OF TWO IDENT STRINGS
        !          17899: *
        !          17900: {{ZER{R10{{{CLEAR GARBAGE VALUE IN XL
        !          17901: {{ZER{R9{{{CLEAR GARBAGE VALUE IN XR
        !          17902: {{EXI{1{{{TAKE IDENT EXIT
        !          17903: *
        !          17904: *      HERE FOR INTEGERS, IDENT IF SAME VALUES
        !          17905: *
        !          17906: {IDEN4{LDI{4*ICVAL(R9){{{LOAD ARG 1
        !          17907: {{SBI{4*ICVAL(R10){{{SUBTRACT ARG 2 TO COMPARE
        !          17908: {{IOV{IDEN1{{{DIFFER IF OVERFLOW
        !          17909: {{INE{IDEN1{{{DIFFER IF RESULT IS NOT ZERO
        !          17910: {{EXI{1{{{TAKE IDENT EXIT
        !          17911: *
        !          17912: *      HERE FOR REALS, IDENT IF SAME VALUES
        !          17913: *
        !          17914: {IDEN5{LDR{4*RCVAL(R9){{{LOAD ARG 1
        !          17915: {{SBR{4*RCVAL(R10){{{SUBTRACT ARG 2 TO COMPARE
        !          17916: {{ROV{IDEN1{{{DIFFER IF OVERFLOW
        !          17917: {{RNE{IDEN1{{{DIFFER IF RESULT IS NOT ZERO
        !          17918: {{EXI{1{{{TAKE IDENT EXIT
        !          17919: *
        !          17920: *      HERE FOR NAMES, IDENT IF BASES AND OFFSETS SAME
        !          17921: *
        !          17922: {IDEN6{BNE{4*NMOFS(R9){4*NMOFS(R10){IDEN1{DIFFER IF DIFFERENT OFFSET
        !          17923: {{BNE{4*NMBAS(R9){4*NMBAS(R10){IDEN1{DIFFER IF DIFFERENT BASE
        !          17924: *
        !          17925: *      MERGE HERE TO SIGNAL IDENT FOR IDENTICAL POINTERS
        !          17926: *
        !          17927: {IDEN7{EXI{1{{{TAKE IDENT EXIT
        !          17928: *
        !          17929: *      HERE FOR DIFFER STRINGS
        !          17930: *
        !          17931: {IDEN8{ZER{R9{{{CLEAR GARBAGE PTR IN XR
        !          17932: {{ZER{R10{{{CLEAR GARBAGE PTR IN XL
        !          17933: {{EXI{{{{RETURN TO CALLER (DIFFER)
        !          17934: {{ENP{{{{END PROCEDURE IDENT
        !          17935: {{EJC{{{{
        !          17936: *
        !          17937: *      INOUT - USED TO INITIALISE INPUT AND OUTPUT VARIABLES
        !          17938: *
        !          17939: *      (XL)                  POINTER TO VBL NAME STRING
        !          17940: *      (WB)                  TRBLK TYPE
        !          17941: *      JSR  INOUT            CALL TO PERFORM INITIALISATION
        !          17942: *      (XL)                  VRBLK PTR
        !          17943: *      (XR)                  TRBLK PTR
        !          17944: *      (WA,WC)               DESTROYED
        !          17945: *
        !          17946: *      NOTE THAT TRTER (= TRTRF) FIELD OF STANDARD I/O VARIABLES
        !          17947: *      POINTS TO CORRESPONDING SVBLK NOT TO A TRBLK AS IS THE
        !          17948: *      CASE FOR ORDINARY VARIABLES.
        !          17949: *
        !          17950: {INOUT{PRC{E{0{{ENTRY POINT
        !          17951: {{MOV{R7{-(SP){{STACK TRBLK TYPE
        !          17952: {{MOV{4*SCLEN(R10){R6{{GET NAME LENGTH
        !          17953: {{ZER{R7{{{POINT TO START OF NAME
        !          17954: {{JSR{SBSTR{{{BUILD A PROPER SCBLK
        !          17955: {{JSR{GTNVR{{{BUILD VRBLK
        !          17956: {{PPM{{{{NO ERROR RETURN
        !          17957: {{MOV{R9{R8{{SAVE VRBLK POINTER
        !          17958: {{MOV{(SP)+{R7{{GET TRTER FIELD
        !          17959: {{ZER{R10{{{ZERO TRFPT
        !          17960: {{JSR{TRBLD{{{BUILD TRBLK
        !          17961: {{MOV{R8{R10{{RECALL VRBLK POINTER
        !          17962: {{MOV{4*VRSVP(R10){4*TRTER(R9){{STORE SVBLK POINTER
        !          17963: {{MOV{R9{4*VRVAL(R10){{STORE TRBLK PTR IN VRBLK
        !          17964: {{MOV{#B$VRA{4*VRGET(R10){{SET TRAPPED ACCESS
        !          17965: {{MOV{#B$VRV{4*VRSTO(R10){{SET TRAPPED STORE
        !          17966: {{EXI{{{{RETURN TO CALLER
        !          17967: {{ENP{{{{END PROCEDURE INOUT
        !          17968: {{EJC{{{{
        !          17969: *
        !          17970: *      INSBF -- INSERT STRING IN BUFFER
        !          17971: *
        !          17972: *      THIS ROUTINE WILL REPLACE A SECTION OF A BUFFER WITH THE
        !          17973: *      CONTENTS OF A GIVEN STRING.  IF THE LENGTH OF THE
        !          17974: *      SECTION TO BE REPLACED IS DIFFERENT THAN THE LENGTH OF
        !          17975: *      THE GIVEN STRING, AND THE REPLACEMENT IS NOT AN APPEND,
        !          17976: *      THEN THE UPPER SECTION OF THE BUFFER IS SHIFTED UP OR
        !          17977: *      DOWN TO CREATE THE PROPER SPACE FOR THE INSERT.
        !          17978: *
        !          17979: *      (XR)                  POINTER TO BFBLK
        !          17980: *      (XL)                  OBJECT WHICH IS STRING CONVERTABLE
        !          17981: *      (WA)                  OFFSET OF START OF INSERT IN (XR)
        !          17982: *      (WB)                  LENGTH OF SECTION IN (XR) REPLACED
        !          17983: *      JSR  INSBF            CALL TO INSERT CHARACTERS IN BUFFER
        !          17984: *      PPM  LOC              THREAD IF (XR) NOT CONVERTABLE
        !          17985: *      PPM  LOC              THREAD IF INSERT NOT POSSIBLE
        !          17986: *
        !          17987: *      THE SECOND ALTERNATE EXIT IS TAKEN IF THE INSERT WOULD
        !          17988: *      OVERFLOW THE BUFFER, OR IF THE INSERT IS OUT PAST THE
        !          17989: *      DEFINED END OF THE BUFFER AS GIVEN.
        !          17990: *
        !          17991: {INSBF{PRC{E{2{{ENTRY POINT
        !          17992: {{MOV{R6{INSSA{{SAVE ENTRY WA
        !          17993: {{MOV{R7{INSSB{{SAVE ENTRY WB
        !          17994: {{MOV{R8{INSSC{{SAVE ENTRY WC
        !          17995: {{ADD{R7{R6{{ADD TO GET OFFSET PAST REPLACE PART
        !          17996: {{MOV{R6{INSAB{{SAVE WA+WB
        !          17997: {{MOV{4*BCLEN(R9){R8{{GET CURRENT DEFINED LENGTH
        !          17998: {{BGT{INSSA{R8{INS07{FAIL IF START OFFSET TOO BIG
        !          17999: {{BGT{R6{R8{INS07{FAIL IF FINAL OFFSET TOO BIG
        !          18000: {{MOV{R10{-(SP){{SAVE ENTRY XL
        !          18001: {{MOV{R9{-(SP){{SAVE BCBLK PTR
        !          18002: {{MOV{R10{-(SP){{STACK AGAIN FOR GTSTG
        !          18003: {{JSR{GTSTG{{{CALL TO CONVERT TO STRING
        !          18004: {{PPM{INS05{{{TAKE STRING CONVERT ERR EXIT
        !          18005: {{MOV{R9{R10{{SAVE STRING PTR
        !          18006: {{MOV{(SP){R9{{RESTORE BCBLK PTR
        !          18007: {{ADD{R8{R6{{ADD BUFFER LEN TO STRING LEN
        !          18008: {{SUB{INSSB{R6{{BIAS OUT COMPONENT BEING REPLACED
        !          18009: {{MOV{4*BCBUF(R9){R9{{POINT TO BFBLK
        !          18010: {{BGT{R6{4*BFALC(R9){INS06{FAIL IF RESULT EXCEEDS ALLOCATION
        !          18011: {{MOV{(SP){R9{{RESTORE BCBLK PTR
        !          18012: {{MOV{R8{R6{{GET BUFFER LENGTH
        !          18013: {{SUB{INSAB{R6{{SUBTRACT TO GET SHIFT LENGTH
        !          18014: {{ADD{4*SCLEN(R10){R8{{ADD LENGTH OF NEW
        !          18015: {{SUB{INSSB{R8{{SUBTRACT OLD TO GET TOTAL NEW LEN
        !          18016: {{MOV{4*BCLEN(R9){R7{{GET OLD BCLEN
        !          18017: {{MOV{R8{4*BCLEN(R9){{STUFF NEW LENGTH
        !          18018: {{BZE{R6{INS04{{SKIP SHIFT IF NOTHING TO DO
        !          18019: {{BEQ{INSSB{4*SCLEN(R10){INS04{SKIP SHIFT IF LENGTHS MATCH
        !          18020: {{MOV{4*BCBUF(R9){R9{{POINT TO BFBLK
        !          18021: {{MOV{R10{-(SP){{SAVE SCBLK PTR
        !          18022: {{BLO{INSSB{4*SCLEN(R10){INS01{BRN IF SHFT IS FOR MORE ROOM
        !          18023: {{EJC{{{{
        !          18024: *
        !          18025: *      INSBF (CONTINUED)
        !          18026: *
        !          18027: *      WE ARE SHIFTING THE UPPER SEGMENT DOWN TO COMPACT
        !          18028: *      THE BUFFER.  (THE STRING LENGTH IS SMALLER THAN THE
        !          18029: *      SEGMENT BEING REPLACED.)  REGISTERS ARE SET AS:
        !          18030: *
        !          18031: *      (WA)                  MOVE (SHIFT DOWN) LENGTH
        !          18032: *      (WB)                  OLD BCLEN
        !          18033: *      (WC)                  NEW BCLEN
        !          18034: *      (XR)                  BFBLK PTR
        !          18035: *      (XL),(XS)             SCBLK PTR
        !          18036: *
        !          18037: {{MOV{INSSA{R7{{GET OFFSET TO INSERT
        !          18038: {{ADD{4*SCLEN(R10){R7{{ADD INSERT LENGTH TO GET DEST OFF
        !          18039: {{MOV{R9{R10{{MAKE COPY
        !          18040: {{PLC{R10{INSAB{{PREPARE SOURCE FOR MOVE
        !          18041: {{PSC{R9{R7{{PREPARE DESTINATION REG FOR MOVE
        !          18042: {{MVC{{{{MOVE EM OUT
        !          18043: {{BRN{INS02{{{BRANCH TO PAD
        !          18044: *
        !          18045: *      WE ARE SHIFTING THE UPPER SEGMENT UP TO EXPAND
        !          18046: *      THE BUFFER.  (THE STRING LENGTH IS LARGER THAN THE
        !          18047: *      SEGMENT BEING REPLACED.)
        !          18048: *
        !          18049: {INS01{MOV{R9{R10{{COPY BFBLK PTR
        !          18050: {{PLC{R10{R7{{SET SOURCE REG FOR MOVE BACKWARDS
        !          18051: {{PSC{R9{R8{{SET DESTINATION PTR FOR MOVE
        !          18052: {{MCB{{{{MOVE BACKWARDS (POSSIBLE OVERLAP)
        !          18053: *
        !          18054: *      MERGE HERE AFTER MOVE TO ADJUST PADDING AT NEW BUFFER END
        !          18055: *
        !          18056: {INS02{MOV{(SP)+{R10{{RESTORE SCBLK PTR
        !          18057: {{MOV{R8{R6{{COPY NEW BUFFER END
        !          18058: {{CTB{R6{0{{ROUND OUT
        !          18059: {{SUB{R8{R6{{SUBTRACT TO GET REMAINDER
        !          18060: {{BZE{R6{INS04{{NO PAD IF ALREADY EVEN BOUNDARY
        !          18061: {{MOV{(SP){R9{{GET BCBLK PTR
        !          18062: {{MOV{4*BCBUF(R9){R9{{GET BFBLK PTR
        !          18063: {{PSC{R9{R8{{PREPARE TO PAD
        !          18064: {{ZER{R7{{{CLEAR WB
        !          18065: {{LCT{R6{R6{{LOAD LOOP COUNT
        !          18066: *
        !          18067: *      LOOP HERE TO STUFF PAD CHARACTERS
        !          18068: *
        !          18069: {INS03{SCH{R7{(R9)+{{STUFF ZERO PAD
        !          18070: {{BCT{R6{INS03{{BRANCH FOR MORE
        !          18071: {{EJC{{{{
        !          18072: *
        !          18073: *      INSBF (CONTINUED)
        !          18074: *
        !          18075: *      MERGE HERE WHEN PADDING OK.  NOW COPY IN THE INSERT
        !          18076: *      STRING TO THE HOLE.
        !          18077: *
        !          18078: {INS04{MOV{(SP){R9{{GET BCBLK PTR
        !          18079: {{MOV{4*BCBUF(R9){R9{{GET BFBLK PTR
        !          18080: {{MOV{4*SCLEN(R10){R6{{GET MOVE LENGTH
        !          18081: {{PLC{R10{{{PREPARE TO COPY FROM FIRST CHAR
        !          18082: {{PSC{R9{INSSA{{PREPARE TO STORE IN HOLE
        !          18083: {{MVC{{{{COPY THE CHARACTERS
        !          18084: {{MOV{(SP)+{R9{{RESTORE ENTRY XR
        !          18085: {{MOV{(SP)+{R10{{RESTORE ENTRY XL
        !          18086: {{MOV{INSSA{R6{{RESTORE ENTRY WA
        !          18087: {{MOV{INSSB{R7{{RESTORE ENTRY WB
        !          18088: {{MOV{INSSC{R8{{RESTORE ENTRY WC
        !          18089: {{EXI{{{{RETURN TO CALLER
        !          18090: *
        !          18091: *      HERE TO TAKE STRING CONVERT ERROR EXIT
        !          18092: *
        !          18093: {INS05{MOV{(SP)+{R9{{RESTORE ENTRY XR
        !          18094: {{MOV{(SP)+{R10{{RESTORE ENTRY XL
        !          18095: {{MOV{INSSA{R6{{RESTORE ENTRY WA
        !          18096: {{MOV{INSSB{R7{{RESTORE ENTRY WB
        !          18097: {{MOV{INSSC{R8{{RESTORE ENTRY WC
        !          18098: {{EXI{1{{{ALTERNATE EXIT
        !          18099: *
        !          18100: *      HERE FOR INVALID OFFSET OR LENGTH
        !          18101: *
        !          18102: {INS06{MOV{(SP)+{R9{{RESTORE ENTRY XR
        !          18103: {{MOV{(SP)+{R10{{RESTORE ENTRY XL
        !          18104: *
        !          18105: *      MERGE FOR LENGTH FAILURE EXIT WITH STACK SET
        !          18106: *
        !          18107: {INS07{MOV{INSSA{R6{{RESTORE ENTRY WA
        !          18108: {{MOV{INSSB{R7{{RESTORE ENTRY WB
        !          18109: {{MOV{INSSC{R8{{RESTORE ENTRY WC
        !          18110: {{EXI{2{{{ALTERNATE EXIT
        !          18111: {{ENP{{{{END PROCEDURE INSBF
        !          18112: {{EJC{{{{
        !          18113: *
        !          18114: *      IOFCB -- GET INPUT/OUTPUT FCBLK POINTER
        !          18115: *
        !          18116: *      USED BY ENDFILE, EJECT AND REWIND TO FIND THE FCBLK
        !          18117: *      (IF ANY) CORRESPONDING TO THEIR ARGUMENT.
        !          18118: *
        !          18119: *      -(XS)                 ARGUMENT
        !          18120: *      JSR  IOFCB            CALL TO FIND FCBLK
        !          18121: *      PPM  LOC              ARG IS AN UNSUITABLE NAME
        !          18122: *      PPM  LOC              ARG IS NULL STRING
        !          18123: *      (XS)                  POPPED
        !          18124: *      (XL)                  PTR TO FILEARG1 VRBLK
        !          18125: *      (XR)                  ARGUMENT
        !          18126: *      (WA)                  FCBLK PTR OR 0
        !          18127: *      (WB)                  DESTROYED
        !          18128: *
        !          18129: {IOFCB{PRC{N{2{{ENTRY POINT
        !          18130: {{JSR{GTSTG{{{GET ARG AS STRING
        !          18131: {{PPM{IOFC2{{{FAIL
        !          18132: {{MOV{R9{R10{{COPY STRING PTR
        !          18133: {{JSR{GTNVR{{{GET AS NATURAL VARIABLE
        !          18134: {{PPM{IOFC3{{{FAIL IF NULL
        !          18135: {{MOV{R10{R7{{COPY STRING POINTER AGAIN
        !          18136: {{MOV{R9{R10{{COPY VRBLK PTR FOR RETURN
        !          18137: {{ZER{R6{{{IN CASE NO TRBLK FOUND
        !          18138: *
        !          18139: *      LOOP TO FIND FILE ARG1 TRBLK
        !          18140: *
        !          18141: {IOFC1{MOV{4*VRVAL(R9){R9{{GET POSSIBLE TRBLK PTR
        !          18142: {{BNE{(R9){#B$TRT{IOFC2{FAIL IF END OF CHAIN
        !          18143: {{BNE{4*TRTYP(R9){#TRTFC{IOFC1{LOOP IF NOT FILE ARG TRBLK
        !          18144: {{MOV{4*TRFPT(R9){R6{{GET FCBLK PTR
        !          18145: {{MOV{R7{R9{{COPY ARG
        !          18146: {{EXI{{{{RETURN
        !          18147: *
        !          18148: *      FAIL RETURN
        !          18149: *
        !          18150: {IOFC2{EXI{1{{{FAIL
        !          18151: *
        !          18152: *      NULL ARG
        !          18153: *
        !          18154: {IOFC3{EXI{2{{{NULL ARG RETURN
        !          18155: {{ENP{{{{END PROCEDURE IOFCB
        !          18156: {{EJC{{{{
        !          18157: *
        !          18158: *      IOPPF -- PROCESS FILEARG2 FOR IOPUT
        !          18159: *
        !          18160: *      (R$XSC)               FILEARG2 PTR
        !          18161: *      JSR  IOPPF            CALL TO PROCESS FILEARG2
        !          18162: *      (XL)                  FILEARG1 PTR
        !          18163: *      (XR)                  FILE ARG2 PTR
        !          18164: *      -(XS)..-(XS)          FIELDS EXTRACTED FROM FILEARG2
        !          18165: *      (WC)                  NO. OF FIELDS EXTRACTED
        !          18166: *      (WB)                  INPUT/OUTPUT FLAG
        !          18167: *      (WA)                  FCBLK PTR OR 0
        !          18168: *
        !          18169: {IOPPF{PRC{N{0{{ENTRY POINT
        !          18170: {{ZER{R7{{{TO COUNT FIELDS EXTRACTED
        !          18171: *
        !          18172: *      LOOP TO EXTRACT FIELDS
        !          18173: *
        !          18174: {IOPP1{MOV{#IODEL{R10{{GET DELIMITER
        !          18175: {{MOV{R10{R8{{COPY IT
        !          18176: {{JSR{XSCAN{{{GET NEXT FIELD
        !          18177: {{MOV{R9{-(SP){{STACK IT
        !          18178: {{ICV{R7{{{INCREMENT COUNT
        !          18179: {{BNZ{R6{IOPP1{{LOOP
        !          18180: {{MOV{R7{R8{{COUNT OF FIELDS
        !          18181: {{MOV{IOPTT{R7{{I/O MARKER
        !          18182: {{MOV{R$IOF{R6{{FCBLK PTR OR 0
        !          18183: {{MOV{R$IO2{R9{{FILE ARG2 PTR
        !          18184: {{MOV{R$IO1{R10{{FILEARG1
        !          18185: {{EXI{{{{RETURN
        !          18186: {{ENP{{{{END PROCEDURE IOPPF
        !          18187: {{EJC{{{{
        !          18188: *
        !          18189: *      IOPUT -- ROUTINE USED BY INPUT AND OUTPUT
        !          18190: *
        !          18191: *      IOPUT SETS UP INPUT/OUTPUT  ASSOCIATIONS. IT BUILDS
        !          18192: *      SUCH TRACE AND FILE CONTROL BLOCKS AS ARE NECESSARY AND
        !          18193: *      CALLS SYSFC,SYSIO TO PERFORM CHECKS ON THE
        !          18194: *      ARGUMENTS AND TO OPEN THE FILES.
        !          18195: *
        !          18196: *         +-----------+   +---------------+       +-----------+
        !          18197: *      +-.I           I   I               I------.I   =B$XRT  I
        !          18198: *      I  +-----------+   +---------------+       +-----------+
        !          18199: *      I  /           /        (R$FCB)            I    *4     I
        !          18200: *      I  /           /                           +-----------+
        !          18201: *      I  +-----------+   +---------------+       I           I-
        !          18202: *      I  I   NAME    +--.I    =B$TRT     I       +-----------+
        !          18203: *      I  /           /   +---------------+       I           I
        !          18204: *      I   (FIRST ARG)    I =TRTIN/=TRTOU I       +-----------+
        !          18205: *      I                  +---------------+             I
        !          18206: *      I                  I     VALUE     I             I
        !          18207: *      I                  +---------------+             I
        !          18208: *      I                  I(TRTRF) 0   OR I--+          I
        !          18209: *      I                  +---------------+  I          I
        !          18210: *      I                  I(TRFPT) 0   OR I----+        I
        !          18211: *      I                  +---------------+  I I        I
        !          18212: *      I                     (I/O TRBLK)     I I        I
        !          18213: *      I  +-----------+                      I I        I
        !          18214: *      I  I           I                      I I        I
        !          18215: *      I  +-----------+                      I I        I
        !          18216: *      I  I           I                      I I        I
        !          18217: *      I  +-----------+   +---------------+  I I        I
        !          18218: *      I  I           +--.I    =B$TRT     I.-+ I        I
        !          18219: *      I  +-----------+   +---------------+    I        I
        !          18220: *      I  /           /   I    =TRTFC     I    I        I
        !          18221: *      I  /           /   +---------------+    I        I
        !          18222: *      I    (FILEARG1     I     VALUE     I    I        I
        !          18223: *      I         VRBLK)   +---------------+    I        I
        !          18224: *      I                  I(TRTRF) 0   OR I--+ I        .
        !          18225: *      I                  +---------------+  I .  +-----------+
        !          18226: *      I                  I(TRFPT) 0   OR I------./   FCBLK   /
        !          18227: *      I                  +---------------+  I    +-----------+
        !          18228: *      I                       (TRTRF)       I
        !          18229: *      I                                     I
        !          18230: *      I                                     I
        !          18231: *      I                  +---------------+  I
        !          18232: *      I                  I    =B$XRT     I.-+
        !          18233: *      I                  +---------------+
        !          18234: *      I                  I      *5       I
        !          18235: *      I                  +---------------+
        !          18236: *      +------------------I               I
        !          18237: *                         +---------------+       +-----------+
        !          18238: *                         I(TRTRF) O   OR I------.I  =B$XRT   I
        !          18239: *                         +---------------+       +-----------+
        !          18240: *                         I  NAME OFFSET  I       I    ETC    I
        !          18241: *                         +---------------+
        !          18242: *                           (IOCHN - CHAIN OF NAME POINTERS)
        !          18243: {{EJC{{{{
        !          18244: *
        !          18245: *      IOPUT (CONTINUED)
        !          18246: *
        !          18247: *      NO ADDITIONAL TRAP BLOCKS ARE USED FOR STANDARD INPUT/OUT
        !          18248: *      FILES. OTHERWISE AN I/O TRAP BLOCK IS ATTACHED TO SECOND
        !          18249: *      ARG (FILEARG1) VRBLK. SEE DIAGRAM ABOVE FOR DETAILS OF
        !          18250: *      THE STRUCTURE BUILT.
        !          18251: *
        !          18252: *      -(XS)                 1ST ARG (VBL TO BE ASSOCIATED)
        !          18253: *      -(XS)                 2ND ARG (FILE ARG1)
        !          18254: *      -(XS)                 3RD ARG (FILE ARG2)
        !          18255: *      (WB)                  0 FOR INPUT, 3 FOR OUTPUT ASSOC.
        !          18256: *      JSR  IOPUT            CALL FOR INPUT/OUTPUT ASSOCIATION
        !          18257: *      PPM  LOC              3RD ARG NOT A STRING
        !          18258: *      PPM  LOC              2ND ARG NOT A SUITABLE NAME
        !          18259: *      PPM  LOC              1ST ARG NOT A SUITABLE NAME
        !          18260: *      PPM  LOC              INAPPROPRIATE FILE SPEC FOR I/O
        !          18261: *      PPM  LOC              I/O FILE DOES NOT EXIST
        !          18262: *      PPM  LOC              I/O FILE CANNOT BE READ/WRITTEN
        !          18263: *      (XS)                  POPPED
        !          18264: *      (XL,XR,WA,WB,WC)      DESTROYED
        !          18265: *
        !          18266: {IOPUT{PRC{N{6{{ENTRY POINT
        !          18267: {{ZER{R$IOT{{{IN CASE NO TRTRF BLOCK USED
        !          18268: {{ZER{R$IOF{{{IN CASE NO FCBLK ALOCATED
        !          18269: {{MOV{R7{IOPTT{{STORE I/O TRACE TYPE
        !          18270: {{JSR{XSCNI{{{PREPARE TO SCAN FILEARG2
        !          18271: {{PPM{IOP13{{{FAIL
        !          18272: {{PPM{IOPA0{{{NULL FILE ARG2
        !          18273: *
        !          18274: {IOPA0{MOV{R9{R$IO2{{KEEP FILE ARG2
        !          18275: {{MOV{R6{R10{{COPY LENGTH
        !          18276: {{JSR{GTSTG{{{CONVERT FILEARG1 TO STRING
        !          18277: {{PPM{IOP14{{{FAIL
        !          18278: {{MOV{R9{R$IO1{{KEEP FILEARG1 PTR
        !          18279: {{JSR{GTNVR{{{CONVERT TO NATURAL VARIABLE
        !          18280: {{PPM{IOP00{{{JUMP IF NULL
        !          18281: {{BRN{IOP04{{{JUMP TO PROCESS NON-NULL ARGS
        !          18282: *
        !          18283: *      NULL FILEARG1
        !          18284: *
        !          18285: {IOP00{BZE{R10{IOP01{{SKIP IF BOTH ARGS NULL
        !          18286: {{JSR{IOPPF{{{PROCESS FILEARG2
        !          18287: {{JSR{SYSFC{{{CALL FOR FILEARG2 CHECK
        !          18288: {{PPM{IOP16{{{FAIL
        !          18289: {{BRN{IOP11{{{COMPLETE FILE ASSOCIATION
        !          18290: {{EJC{{{{
        !          18291: *
        !          18292: *      IOPUT (CONTINUED)
        !          18293: *
        !          18294: *      HERE WITH 0 OR FCBLK PTR IN (XL)
        !          18295: *
        !          18296: {IOP01{MOV{IOPTT{R7{{GET TRACE TYPE
        !          18297: {{MOV{R$IOT{R9{{GET 0 OR TRTRF PTR
        !          18298: {{JSR{TRBLD{{{BUILD TRBLK
        !          18299: {{MOV{R9{R8{{COPY TRBLK POINTER
        !          18300: {{MOV{(SP)+{R9{{GET VARIABLE FROM STACK
        !          18301: {{JSR{GTVAR{{{POINT TO VARIABLE
        !          18302: {{PPM{IOP15{{{FAIL
        !          18303: {{MOV{R10{R$ION{{SAVE NAME POINTER
        !          18304: {{MOV{R10{R9{{COPY NAME POINTER
        !          18305: {{ADD{R6{R9{{POINT TO VARIABLE
        !          18306: {{SUB{#4*VRVAL{R9{{SUBTRACT OFFSET,MERGE INTO LOOP
        !          18307: *
        !          18308: *      LOOP TO END OF TRBLK CHAIN IF ANY
        !          18309: *
        !          18310: {IOP02{MOV{R9{R10{{COPY BLK PTR
        !          18311: {{MOV{4*VRVAL(R9){R9{{LOAD PTR TO NEXT TRBLK
        !          18312: {{BNE{(R9){#B$TRT{IOP03{JUMP IF NOT TRAPPED
        !          18313: {{BNE{4*TRTYP(R9){IOPTT{IOP02{LOOP IF NOT SAME ASSOCN
        !          18314: {{MOV{4*TRNXT(R9){R9{{GET VALUE AND DELETE OLD TRBLK
        !          18315: *
        !          18316: *      IOPUT (CONTINUED)
        !          18317: *
        !          18318: *      STORE NEW ASSOCIATION
        !          18319: *
        !          18320: {IOP03{MOV{R8{4*VRVAL(R10){{LINK TO THIS TRBLK
        !          18321: {{MOV{R8{R10{{COPY POINTER
        !          18322: {{MOV{R9{4*TRNXT(R10){{STORE VALUE IN TRBLK
        !          18323: {{MOV{R$ION{R9{{RESTORE POSSIBLE VRBLK POINTER
        !          18324: {{MOV{R6{R7{{KEEP OFFSET TO NAME
        !          18325: {{JSR{SETVR{{{IF VRBLK, SET VRGET,VRSTO
        !          18326: {{MOV{R$IOT{R9{{GET 0 OR TRTRF PTR
        !          18327: {{BNZ{R9{IOP19{{JUMP IF TRTRF BLOCK EXISTS
        !          18328: {{EXI{{{{RETURN TO CALLER
        !          18329: *
        !          18330: *      NON STANDARD FILE
        !          18331: *      SEE IF AN FCBLK HAS ALREADY BEEN ALLOCATED.
        !          18332: *
        !          18333: {IOP04{ZER{R6{{{IN CASE NO FCBLK FOUND
        !          18334: {{EJC{{{{
        !          18335: *
        !          18336: *      IOPUT (CONTINUED)
        !          18337: *
        !          18338: *      SEARCH POSSIBLE TRBLK CHAIN TO PICK UP THE FCBLK
        !          18339: *
        !          18340: {IOP05{MOV{R9{R7{{REMEMBER BLK PTR
        !          18341: {{MOV{4*VRVAL(R9){R9{{CHAIN ALONG
        !          18342: {{BNE{(R9){#B$TRT{IOP06{JUMP IF END OF TRBLK CHAIN
        !          18343: {{BNE{4*TRTYP(R9){#TRTFC{IOP05{LOOP IF MORE TO GO
        !          18344: {{MOV{R9{R$IOT{{POINT TO FILE ARG1 TRBLK
        !          18345: {{MOV{4*TRFPT(R9){R6{{GET FCBLK PTR FROM TRBLK
        !          18346: *
        !          18347: *      WA = 0 OR FCBLK PTR
        !          18348: *      WB = PTR TO PRECEDING BLK TO WHICH ANY TRTRF BLOCK
        !          18349: *           FOR FILE ARG1 MUST BE CHAINED.
        !          18350: *
        !          18351: {IOP06{MOV{R6{R$IOF{{KEEP POSSIBLE FCBLK PTR
        !          18352: {{MOV{R7{R$IOP{{KEEP PRECEDING BLK PTR
        !          18353: {{JSR{IOPPF{{{PROCESS FILEARG2
        !          18354: {{JSR{SYSFC{{{SEE IF FCBLK REQUIRED
        !          18355: {{PPM{IOP16{{{FAIL
        !          18356: {{BZE{R6{IOP12{{SKIP IF NO NEW FCBLK WANTED
        !          18357: {{BLT{R8{#NUM02{IOP6A{JUMP IF FCBLK IN DYNAMIC
        !          18358: {{JSR{ALOST{{{GET IT IN STATIC
        !          18359: {{BRN{IOP6B{{{SKIP
        !          18360: *
        !          18361: *      OBTAIN FCBLK IN DYNAMIC
        !          18362: *
        !          18363: {IOP6A{JSR{ALLOC{{{GET SPACE FOR FCBLK
        !          18364: *
        !          18365: *      MERGE
        !          18366: *
        !          18367: {IOP6B{MOV{R9{R10{{POINT TO FCBLK
        !          18368: {{MOV{R6{R7{{COPY ITS LENGTH
        !          18369: {{BTW{R7{{{GET COUNT AS WORDS (SGD APR80)
        !          18370: {{LCT{R7{R7{{LOOP COUNTER
        !          18371: *
        !          18372: *      CLEAR FCBLK
        !          18373: *
        !          18374: {IOP07{ZER{(R9)+{{{CLEAR A WORD
        !          18375: {{BCT{R7{IOP07{{LOOP
        !          18376: {{BEQ{R8{#NUM02{IOP09{SKIP IF IN STATIC - DONT SET FIELDS
        !          18377: {{MOV{#B$XNT{(R10){{STORE XNBLK CODE IN CASE
        !          18378: {{MOV{R6{4*1(R10){{STORE LENGTH
        !          18379: {{BNZ{R8{IOP09{{JUMP IF XNBLK WANTED
        !          18380: {{MOV{#B$XRT{(R10){{XRBLK CODE REQUESTED
        !          18381: *
        !          18382: {{EJC{{{{
        !          18383: *      IOPUT (CONTINUED)
        !          18384: *
        !          18385: *      COMPLETE FCBLK INITIALISATION
        !          18386: *
        !          18387: {IOP09{MOV{R$IOT{R9{{GET POSSIBLE TRBLK PTR
        !          18388: {{MOV{R10{R$IOF{{STORE FCBLK PTR
        !          18389: {{BNZ{R9{IOP10{{JUMP IF TRBLK ALREADY FOUND
        !          18390: *
        !          18391: *      A NEW TRBLK IS NEEDED
        !          18392: *
        !          18393: {{MOV{#TRTFC{R7{{TRTYP FOR FCBLK TRAP BLK
        !          18394: {{JSR{TRBLD{{{MAKE THE BLOCK
        !          18395: {{MOV{R9{R$IOT{{COPY TRTRF PTR
        !          18396: {{MOV{R$IOP{R10{{POINT TO PRECEDING BLK
        !          18397: {{MOV{4*VRVAL(R10){4*VRVAL(R9){{COPY VALUE FIELD TO TRBLK
        !          18398: {{MOV{R9{4*VRVAL(R10){{LINK NEW TRBLK INTO CHAIN
        !          18399: {{MOV{R10{R9{{POINT TO PREDECESSOR BLK
        !          18400: {{JSR{SETVR{{{SET TRACE INTERCEPTS
        !          18401: {{MOV{4*VRVAL(R9){R9{{RECOVER TRBLK PTR
        !          18402: *
        !          18403: *      XR IS PTR TO TRBLK, XL IS FCBLK PTR OR 0
        !          18404: *
        !          18405: {IOP10{MOV{R$IOF{4*TRFPT(R9){{STORE FCBLK PTR
        !          18406: *
        !          18407: *      CALL SYSIO TO COMPLETE FILE ACCESSING
        !          18408: *
        !          18409: {IOP11{MOV{R$IOF{R6{{COPY FCBLK PTR OR 0
        !          18410: {{MOV{IOPTT{R7{{GET INPUT/OUTPUT FLAG
        !          18411: {{MOV{R$IO2{R9{{GET FILE ARG2
        !          18412: {{MOV{R$IO1{R10{{GET FILE ARG1
        !          18413: {{JSR{SYSIO{{{ASSOCIATE TO THE FILE
        !          18414: {{PPM{IOP17{{{FAIL
        !          18415: {{PPM{IOP18{{{FAIL
        !          18416: {{BNZ{R$IOT{IOP01{{NOT STD INPUT IF NON-NULL TRTRF BLK
        !          18417: {{BNZ{IOPTT{IOP01{{JUMP IF OUTPUT
        !          18418: {{BZE{R8{IOP01{{NO CHANGE TO STANDARD READ LENGTH
        !          18419: {{MOV{R8{CSWIN{{STORE NEW READ LENGTH FOR STD FILE
        !          18420: {{BRN{IOP01{{{MERGE TO FINISH THE TASK
        !          18421: *
        !          18422: *      SYSFC MAY HAVE RETURNED A POINTER TO A PRIVATE FCBLK
        !          18423: *
        !          18424: {IOP12{BNZ{R10{IOP09{{JUMP IF PRIVATE FCBLK
        !          18425: {{BRN{IOP11{{{FINISH THE ASSOCIATION
        !          18426: *
        !          18427: *      FAILURE RETURNS
        !          18428: *
        !          18429: {IOP13{EXI{1{{{3RD ARG NOT A STRING
        !          18430: {IOP14{EXI{2{{{2ND ARG UNSUITABLE
        !          18431: {IOP15{EXI{3{{{1ST ARG UNSUITABLE
        !          18432: {IOP16{EXI{4{{{FILE SPEC WRONG
        !          18433: {IOP17{EXI{5{{{I/O FILE DOES NOT EXIST
        !          18434: {IOP18{EXI{6{{{I/O FILE CANNOT BE READ/WRITTEN
        !          18435: {{EJC{{{{
        !          18436: *
        !          18437: *      IOPUT (CONTINUED)
        !          18438: *
        !          18439: *      ADD TO IOCHN CHAIN OF ASSSOCIATED VARIABLES UNLESS ALREAD
        !          18440: *      PRESENT.
        !          18441: *
        !          18442: {IOP19{MOV{R$ION{R8{{WC = NAME BASE, WB = NAME OFFSET
        !          18443: *
        !          18444: *      SEARCH LOOP
        !          18445: *
        !          18446: {IOP20{MOV{4*TRTRF(R9){R9{{NEXT LINK OF CHAIN
        !          18447: {{BZE{R9{IOP21{{NOT FOUND
        !          18448: {{BNE{R8{4*IONMB(R9){IOP20{NO MATCH
        !          18449: {{BEQ{R7{4*IONMO(R9){IOP22{EXIT IF MATCHED
        !          18450: {{BRN{IOP20{{{LOOP
        !          18451: *
        !          18452: *      NOT FOUND
        !          18453: *
        !          18454: {IOP21{MOV{#4*NUM05{R6{{SPACE NEEDED
        !          18455: {{JSR{ALLOC{{{GET IT
        !          18456: {{MOV{#B$XRT{(R9){{STORE XRBLK CODE
        !          18457: {{MOV{R6{4*1(R9){{STORE LENGTH
        !          18458: {{MOV{R8{4*IONMB(R9){{STORE NAME BASE
        !          18459: {{MOV{R7{4*IONMO(R9){{STORE NAME OFFSET
        !          18460: {{MOV{R$IOT{R10{{POINT TO TRTRF BLK
        !          18461: {{MOV{4*TRTRF(R10){R6{{GET PTR FIELD CONTENTS
        !          18462: {{MOV{R9{4*TRTRF(R10){{STORE PTR TO NEW BLOCK
        !          18463: {{MOV{R6{4*TRTRF(R9){{COMPLETE THE LINKING
        !          18464: *
        !          18465: *      INSERT FCBLK ON FCBLK CHAIN FOR SYSEJ, SYSXI
        !          18466: *
        !          18467: {IOP22{BZE{R$IOF{IOP25{{SKIP IF NO FCBLK
        !          18468: {{MOV{R$FCB{R10{{PTR TO HEAD OF EXISTING CHAIN
        !          18469: *
        !          18470: *      SEE IF FCBLK ALREADY ON CHAIN
        !          18471: *
        !          18472: {IOP23{BZE{R10{IOP24{{NOT ON IF END OF CHAIN
        !          18473: {{BEQ{4*3(R10){R$IOF{IOP25{DONT DUPLICATE IF FIND IT
        !          18474: {{MOV{4*2(R10){R10{{GET NEXT LINK
        !          18475: {{BRN{IOP23{{{LOOP
        !          18476: *
        !          18477: *      NOT FOUND SO ADD AN ENTRY FOR THIS FCBLK
        !          18478: *
        !          18479: {IOP24{MOV{#4*NUM04{R6{{SPACE NEEDED
        !          18480: {{JSR{ALLOC{{{GET IT
        !          18481: {{MOV{#B$XRT{(R9){{STORE BLOCK CODE
        !          18482: {{MOV{R6{4*1(R9){{STORE LENGTH
        !          18483: {{MOV{R$FCB{4*2(R9){{STORE PREVIOUS LINK IN THIS NODE
        !          18484: {{MOV{R$IOF{4*3(R9){{STORE FCBLK PTR
        !          18485: {{MOV{R9{R$FCB{{INSERT NODE INTO FCBLK CHAIN
        !          18486: *
        !          18487: *      RETURN
        !          18488: *
        !          18489: {IOP25{EXI{{{{RETURN TO CALLER
        !          18490: {{ENP{{{{END PROCEDURE IOPUT
        !          18491: {{EJC{{{{
        !          18492: *
        !          18493: *      KTREX -- EXECUTE KEYWORD TRACE
        !          18494: *
        !          18495: *      KTREX IS USED TO EXECUTE A POSSIBLE KEYWORD TRACE. IT
        !          18496: *      INCLUDES THE TEST ON TRACE AND TESTS FOR TRACE ACTIVE.
        !          18497: *
        !          18498: *      (XL)                  PTR TO TRBLK (OR 0 IF UNTRACED)
        !          18499: *      JSR  KTREX            CALL TO EXECUTE KEYWORD TRACE
        !          18500: *      (XL,WA,WB,WC)         DESTROYED
        !          18501: *      (RA)                  DESTROYED
        !          18502: *
        !          18503: {KTREX{PRC{R{0{{ENTRY POINT (RECURSIVE)
        !          18504: {{BZE{R10{KTRX3{{IMMEDIATE EXIT IF KEYWORD UNTRACED
        !          18505: {{BZE{KVTRA{KTRX3{{IMMEDIATE EXIT IF TRACE = 0
        !          18506: {{DCV{KVTRA{{{ELSE DECREMENT TRACE
        !          18507: {{MOV{R9{-(SP){{SAVE XR
        !          18508: {{MOV{R10{R9{{COPY TRBLK POINTER
        !          18509: {{MOV{4*TRKVR(R9){R10{{LOAD VRBLK POINTER (NMBAS)
        !          18510: {{MOV{#4*VRVAL{R6{{SET NAME OFFSET
        !          18511: {{BZE{4*TRFNC(R9){KTRX1{{JUMP IF PRINT TRACE
        !          18512: {{JSR{TRXEQ{{{ELSE EXECUTE FULL TRACE
        !          18513: {{BRN{KTRX2{{{AND JUMP TO EXIT
        !          18514: *
        !          18515: *      HERE FOR PRINT TRACE
        !          18516: *
        !          18517: {KTRX1{MOV{R10{-(SP){{STACK VRBLK PTR FOR KWNAM
        !          18518: {{MOV{R6{-(SP){{STACK OFFSET FOR KWNAM
        !          18519: {{JSR{PRTSN{{{PRINT STATEMENT NUMBER
        !          18520: {{MOV{#CH$AM{R6{{LOAD AMPERSAND
        !          18521: {{JSR{PRTCH{{{PRINT AMPERSAND
        !          18522: {{JSR{PRTNM{{{PRINT KEYWORD NAME
        !          18523: {{MOV{#TMBEB{R9{{POINT TO BLANK-EQUAL-BLANK
        !          18524: {{JSR{PRTST{{{PRINT BLANK-EQUAL-BLANK
        !          18525: {{JSR{KWNAM{{{GET KEYWORD PSEUDO-VARIABLE NAME
        !          18526: {{MOV{R9{DNAMP{{RESET PTR TO DELETE KVBLK
        !          18527: {{JSR{ACESS{{{GET KEYWORD VALUE
        !          18528: {{PPM{{{{FAILURE IS IMPOSSIBLE
        !          18529: {{JSR{PRTVL{{{PRINT KEYWORD VALUE
        !          18530: {{JSR{PRTNL{{{TERMINATE PRINT LINE
        !          18531: *
        !          18532: *      HERE TO EXIT AFTER COMPLETING TRACE
        !          18533: *
        !          18534: {KTRX2{MOV{(SP)+{R9{{RESTORE ENTRY XR
        !          18535: *
        !          18536: *      MERGE HERE TO EXIT IF NO TRACE REQUIRED
        !          18537: *
        !          18538: {KTRX3{EXI{{{{RETURN TO KTREX CALLER
        !          18539: {{ENP{{{{END PROCEDURE KTREX
        !          18540: {{EJC{{{{
        !          18541: *
        !          18542: *      KWNAM -- GET PSEUDO-VARIABLE NAME FOR KEYWORD
        !          18543: *
        !          18544: *      1(XS)                 NAME BASE FOR VRBLK
        !          18545: *      0(XS)                 OFFSET (SHOULD BE *VRVAL)
        !          18546: *      JSR  KWNAM            CALL TO GET PSEUDO-VARIABLE NAME
        !          18547: *      (XS)                  POPPED TWICE
        !          18548: *      (XL,WA)               RESULTING PSEUDO-VARIABLE NAME
        !          18549: *      (XR,WA,WB)            DESTROYED
        !          18550: *
        !          18551: {KWNAM{PRC{N{0{{ENTRY POINT
        !          18552: {{ICA{SP{{{IGNORE NAME OFFSET
        !          18553: {{MOV{(SP)+{R9{{LOAD NAME BASE
        !          18554: {{BGE{R9{STATE{KWNM1{JUMP IF NOT NATURAL VARIABLE NAME
        !          18555: {{BNZ{4*VRLEN(R9){KWNM1{{ERROR IF NOT SYSTEM VARIABLE
        !          18556: {{MOV{4*VRSVP(R9){R9{{ELSE POINT TO SVBLK
        !          18557: {{MOV{4*SVBIT(R9){R6{{LOAD BIT MASK
        !          18558: {{ANB{BTKNM{R6{{AND WITH KEYWORD BIT
        !          18559: {{ZRB{R6{KWNM1{{ERROR IF NO KEYWORD ASSOCIATION
        !          18560: {{MOV{4*SVLEN(R9){R6{{ELSE LOAD NAME LENGTH IN CHARACTERS
        !          18561: {{CTB{R6{SVCHS{{COMPUTE OFFSET TO FIELD WE WANT
        !          18562: {{ADD{R6{R9{{POINT TO SVKNM FIELD
        !          18563: {{MOV{(R9){R7{{LOAD SVKNM VALUE
        !          18564: {{MOV{#4*KVSI${R6{{SET SIZE OF KVBLK
        !          18565: {{JSR{ALLOC{{{ALLOCATE KVBLK
        !          18566: {{MOV{#B$KVT{(R9){{STORE TYPE WORD
        !          18567: {{MOV{R7{4*KVNUM(R9){{STORE KEYWORD NUMBER
        !          18568: {{MOV{#TRBKV{4*KVVAR(R9){{SET DUMMY TRBLK POINTER
        !          18569: {{MOV{R9{R10{{COPY KVBLK POINTER
        !          18570: {{MOV{#4*KVVAR{R6{{SET PROPER OFFSET
        !          18571: {{EXI{{{{RETURN TO KVNAM CALLER
        !          18572: *
        !          18573: *      HERE IF NOT KEYWORD NAME
        !          18574: *
        !          18575: {KWNM1{ERB{251{KEYWORD{{OPERAND IS NOT NAME OF DEFINED KEYWORD
        !          18576: {{ENP{{{{END PROCEDURE KWNAM
        !          18577: {{EJC{{{{
        !          18578: *
        !          18579: *      LCOMP-- COMPARE TWO STRINGS LEXICALLY
        !          18580: *
        !          18581: *      1(XS)                 FIRST ARGUMENT
        !          18582: *      0(XS)                 SECOND ARGUMENT
        !          18583: *      JSR  LCOMP            CALL TO COMPARE ARUMENTS
        !          18584: *      PPM  LOC              TRANSFER LOC FOR ARG1 NOT STRING
        !          18585: *      PPM  LOC              TRANSFER LOC FOR ARG2 NOT STRING
        !          18586: *      PPM  LOC              TRANSFER LOC IF ARG1 LLT ARG2
        !          18587: *      PPM  LOC              TRANSFER LOC IF ARG1 LEQ ARG2
        !          18588: *      PPM  LOC              TRANSFER LOC IF ARG1 LGT ARG2
        !          18589: *      (THE NORMAL RETURN IS NEVER TAKEN)
        !          18590: *      (XS)                  POPPED TWICE
        !          18591: *      (XR,XL)               DESTROYED
        !          18592: *      (WA,WB,WC,RA)         DESTROYED
        !          18593: *
        !          18594: {LCOMP{PRC{N{5{{ENTRY POINT
        !          18595: {{JSR{GTSTG{{{CONVERT SECOND ARG TO STRING
        !          18596: {{PPM{LCMP6{{{JUMP IF SECOND ARG NOT STRING
        !          18597: {{MOV{R9{R10{{ELSE SAVE POINTER
        !          18598: {{MOV{R6{R7{{AND LENGTH
        !          18599: {{JSR{GTSTG{{{CONVERT FIRST ARGUMENT TO STRING
        !          18600: {{PPM{LCMP5{{{JUMP IF NOT STRING
        !          18601: {{MOV{R6{R8{{SAVE ARG 1 LENGTH
        !          18602: {{PLC{R9{{{POINT TO CHARS OF ARG 1
        !          18603: {{PLC{R10{{{POINT TO CHARS OF ARG 2
        !          18604: {{BLO{R6{R7{LCMP1{JUMP IF ARG 1 LENGTH IS SMALLER
        !          18605: {{MOV{R7{R6{{ELSE SET ARG 2 LENGTH AS SMALLER
        !          18606: *
        !          18607: *      HERE WITH SMALLER LENGTH IN (WA)
        !          18608: *
        !          18609: {LCMP1{CMC{LCMP4{LCMP3{{COMPARE STRINGS, JUMP IF UNEQUAL
        !          18610: {{BNE{R7{R8{LCMP2{IF EQUAL, JUMP IF LENGTHS UNEQUAL
        !          18611: {{EXI{4{{{ELSE IDENTICAL STRINGS, LEQ EXIT
        !          18612: {{EJC{{{{
        !          18613: *
        !          18614: *      LCOMP (CONTINUED)
        !          18615: *
        !          18616: *      HERE IF INITIAL STRINGS IDENTICAL, BUT LENGTHS UNEQUAL
        !          18617: *
        !          18618: {LCMP2{BHI{R8{R7{LCMP4{JUMP IF ARG 1 LENGTH GT ARG 2 LENG
        !          18619: *
        !          18620: *      HERE IF FIRST ARG LLT SECOND ARG
        !          18621: *
        !          18622: {LCMP3{EXI{3{{{TAKE LLT EXIT
        !          18623: *
        !          18624: *      HERE IF FIRST ARG LGT SECOND ARG
        !          18625: *
        !          18626: {LCMP4{EXI{5{{{TAKE LGT EXIT
        !          18627: *
        !          18628: *      HERE IF FIRST ARG IS NOT A STRING
        !          18629: *
        !          18630: {LCMP5{EXI{1{{{TAKE BAD FIRST ARG EXIT
        !          18631: *
        !          18632: *      HERE FOR SECOND ARG NOT A STRING
        !          18633: *
        !          18634: {LCMP6{EXI{2{{{TAKE BAD SECOND ARG ERROR EXIT
        !          18635: {{ENP{{{{END PROCEDURE LCOMP
        !          18636: {{EJC{{{{
        !          18637: *
        !          18638: *      LISTR -- LIST SOURCE LINE
        !          18639: *
        !          18640: *      LISTR IS USED TO LIST A SOURCE LINE DURING THE INITIAL
        !          18641: *      COMPILATION. IT IS CALLED FROM SCANE AND SCANL.
        !          18642: *
        !          18643: *      JSR  LISTR            CALL TO LIST LINE
        !          18644: *      (XR,XL,WA,WB,WC)      DESTROYED
        !          18645: *
        !          18646: *      GLOBAL LOCATIONS USED BY LISTR
        !          18647: *
        !          18648: *      ERLST                 IF LISTING ON ACCOUNT OF AN ERROR
        !          18649: *
        !          18650: *      LSTLC                 COUNT LINES ON CURRENT PAGE
        !          18651: *
        !          18652: *      LSTNP                 MAX NUMBER OF LINES/PAGE
        !          18653: *
        !          18654: *      LSTPF                 SET NON-ZERO IF THE CURRENT SOURCE
        !          18655: *                            LINE HAS BEEN LISTED, ELSE ZERO.
        !          18656: *
        !          18657: *      LSTPG                 COMPILER LISTING PAGE NUMBER
        !          18658: *
        !          18659: *      LSTSN                 SET IF STMNT NUM TO BE LISTED
        !          18660: *
        !          18661: *      R$CIM                 POINTER TO CURRENT INPUT LINE.
        !          18662: *
        !          18663: *      R$TTL                 TITLE FOR SOURCE LISTING
        !          18664: *
        !          18665: *      R$STL                 PTR TO SUB-TITLE STRING
        !          18666: *
        !          18667: *      ENTRY POINT
        !          18668: *
        !          18669: {LISTR{PRC{E{0{{ENTRY POINT
        !          18670: {{BNZ{CNTTL{LIST5{{JUMP IF -TITLE OR -STITL
        !          18671: {{BNZ{LSTPF{LIST4{{IMMEDIATE EXIT IF ALREADY LISTED
        !          18672: {{BGE{LSTLC{LSTNP{LIST6{JUMP IF NO ROOM
        !          18673: *
        !          18674: *      HERE AFTER PRINTING TITLE (IF NEEDED)
        !          18675: *
        !          18676: {LIST0{MOV{R$CIM{R9{{LOAD POINTER TO CURRENT IMAGE
        !          18677: {{PLC{R9{{{POINT TO CHARACTERS
        !          18678: {{LCH{R6{(R9){{LOAD FIRST CHARACTER
        !          18679: {{MOV{LSTSN{R9{{LOAD STATEMENT NUMBER
        !          18680: {{BZE{R9{LIST2{{JUMP IF NO STATEMENT NUMBER
        !          18681: {{MTI{R9{{{ELSE GET STMNT NUMBER AS INTEGER
        !          18682: {{BNE{STAGE{#STGIC{LIST1{SKIP IF EXECUTE TIME
        !          18683: {{BEQ{R6{#CH$AS{LIST2{NO STMNT NUMBER LIST IF COMMENT
        !          18684: {{BEQ{R6{#CH$MN{LIST2{NO STMNT NO. IF CONTROL CARD
        !          18685: *
        !          18686: *      PRINT STATEMENT NUMBER
        !          18687: *
        !          18688: {LIST1{JSR{PRTIN{{{ELSE PRINT STATEMENT NUMBER
        !          18689: {{ZER{LSTSN{{{AND CLEAR FOR NEXT TIME IN
        !          18690: {{EJC{{{{
        !          18691: *
        !          18692: *      LISTR (CONTINUED)
        !          18693: *
        !          18694: *      MERGE HERE AFTER PRINTING STATEMENT NUMBER (IF REQUIRED)
        !          18695: *
        !          18696: {LIST2{MOV{#STNPD{PROFS{{POINT PAST STATEMENT NUMBER
        !          18697: {{MOV{R$CIM{R9{{LOAD POINTER TO CURRENT IMAGE
        !          18698: {{JSR{PRTST{{{PRINT IT
        !          18699: {{ICV{LSTLC{{{BUMP LINE COUNTER
        !          18700: {{BNZ{ERLST{LIST3{{JUMP IF ERROR COPY TO INT.CH.
        !          18701: {{JSR{PRTNL{{{TERMINATE LINE
        !          18702: {{BZE{CSWDB{LIST3{{JUMP IF -SINGLE MODE
        !          18703: {{JSR{PRTNL{{{ELSE ADD A BLANK LINE
        !          18704: {{ICV{LSTLC{{{AND BUMP LINE COUNTER
        !          18705: *
        !          18706: *      HERE AFTER PRINTING SOURCE IMAGE
        !          18707: *
        !          18708: {LIST3{MNZ{LSTPF{{{SET FLAG FOR LINE PRINTED
        !          18709: *
        !          18710: *      MERGE HERE TO EXIT
        !          18711: *
        !          18712: {LIST4{EXI{{{{RETURN TO LISTR CALLER
        !          18713: *
        !          18714: *      PRINT TITLE AFTER -TITLE OR -STITL CARD
        !          18715: *
        !          18716: {LIST5{ZER{CNTTL{{{CLEAR FLAG
        !          18717: *
        !          18718: *      EJECT TO NEW PAGE AND LIST TITLE
        !          18719: *
        !          18720: {LIST6{JSR{PRTPS{{{EJECT
        !          18721: {{BZE{PRICH{LIST7{{SKIP IF LISTING TO REGULAR PRINTER
        !          18722: {{BEQ{R$TTL{#NULLS{LIST0{TERMINAL LISTING OMITS NULL TITLE
        !          18723: *
        !          18724: *      LIST TITLE
        !          18725: *
        !          18726: {LIST7{JSR{LISTT{{{LIST TITLE
        !          18727: {{BRN{LIST0{{{MERGE
        !          18728: {{ENP{{{{END PROCEDURE LISTR
        !          18729: {{EJC{{{{
        !          18730: *
        !          18731: *      LISTT -- LIST TITLE AND SUBTITLE
        !          18732: *
        !          18733: *      USED DURING COMPILATION TO PRINT PAGE HEADING
        !          18734: *
        !          18735: *      JSR  LISTT            CALL TO LIST TITLE
        !          18736: *      (XR,WA)               DESTROYED
        !          18737: *
        !          18738: {LISTT{PRC{E{0{{ENTRY POINT
        !          18739: {{MOV{R$TTL{R9{{POINT TO SOURCE LISTING TITLE
        !          18740: {{JSR{PRTST{{{PRINT TITLE
        !          18741: {{MOV{LSTPO{PROFS{{SET OFFSET
        !          18742: {{MOV{#LSTMS{R9{{SET PAGE MESSAGE
        !          18743: {{JSR{PRTST{{{PRINT PAGE MESSAGE
        !          18744: {{ICV{LSTPG{{{BUMP PAGE NUMBER
        !          18745: {{MTI{LSTPG{{{LOAD PAGE NUMBER AS INTEGER
        !          18746: {{JSR{PRTIN{{{PRINT PAGE NUMBER
        !          18747: {{JSR{PRTNL{{{TERMINATE TITLE LINE
        !          18748: {{ADD{#NUM02{LSTLC{{COUNT TITLE LINE AND BLANK LINE
        !          18749: *
        !          18750: *      PRINT SUB-TITLE (IF ANY)
        !          18751: *
        !          18752: {{MOV{R$STL{R9{{LOAD POINTER TO SUB-TITLE
        !          18753: {{BZE{R9{LSTT1{{JUMP IF NO SUB-TITLE
        !          18754: {{JSR{PRTST{{{ELSE PRINT SUB-TITLE
        !          18755: {{JSR{PRTNL{{{TERMINATE LINE
        !          18756: {{ICV{LSTLC{{{BUMP LINE COUNT
        !          18757: *
        !          18758: *      RETURN POINT
        !          18759: *
        !          18760: {LSTT1{JSR{PRTNL{{{PRINT A BLANK LINE
        !          18761: {{EXI{{{{RETURN TO CALLER
        !          18762: {{ENP{{{{END PROCEDURE LISTT
        !          18763: {{EJC{{{{
        !          18764: *
        !          18765: *      NEXTS -- ACQUIRE NEXT SOURCE IMAGE
        !          18766: *
        !          18767: *      NEXTS IS USED TO ACQUIRE THE NEXT SOURCE IMAGE AT COMPILE
        !          18768: *      TIME. IT ASSUMES THAT A PRIOR CALL TO READR HAS INPUT
        !          18769: *      A LINE IMAGE (SEE PROCEDURE READR). BEFORE THE CURRENT
        !          18770: *      IMAGE IS FINALLY LOST IT MAY BE LISTED HERE.
        !          18771: *
        !          18772: *      JSR  NEXTS            CALL TO ACQUIRE NEXT INPUT LINE
        !          18773: *      (XR,XL,WA,WB,WC)      DESTROYED
        !          18774: *
        !          18775: *      GLOBAL VALUES AFFECTED
        !          18776: *
        !          18777: *      R$CNI                 ON INPUT, NEXT IMAGE. ON
        !          18778: *                            EXIT RESET TO ZERO
        !          18779: *
        !          18780: *      R$CIM                 ON EXIT, SET TO POINT TO IMAGE
        !          18781: *
        !          18782: *      SCNIL                 INPUT IMAGE LENGTH ON EXIT
        !          18783: *
        !          18784: *      SCNSE                 RESET TO ZERO ON EXIT
        !          18785: *
        !          18786: *      LSTPF                 SET ON EXIT IF LINE IS LISTED
        !          18787: *
        !          18788: {NEXTS{PRC{E{0{{ENTRY POINT
        !          18789: {{BZE{CSWLS{NXTS2{{JUMP IF -NOLIST
        !          18790: {{MOV{R$CIM{R9{{POINT TO IMAGE
        !          18791: {{BZE{R9{NXTS2{{JUMP IF NO IMAGE
        !          18792: {{PLC{R9{{{GET CHAR PTR
        !          18793: {{LCH{R6{(R9){{GET FIRST CHAR
        !          18794: {{BNE{R6{#CH$MN{NXTS1{JUMP IF NOT CTRL CARD
        !          18795: {{BZE{CSWPR{NXTS2{{JUMP IF -NOPRINT
        !          18796: *
        !          18797: *      HERE TO CALL LISTER
        !          18798: *
        !          18799: {NXTS1{JSR{LISTR{{{LIST LINE
        !          18800: *
        !          18801: *      HERE AFTER POSSIBLE LISTING
        !          18802: *
        !          18803: {NXTS2{MOV{R$CNI{R9{{POINT TO NEXT IMAGE
        !          18804: {{MOV{R9{R$CIM{{SET AS NEXT IMAGE
        !          18805: {{ZER{R$CNI{{{CLEAR NEXT IMAGE POINTER
        !          18806: {{MOV{4*SCLEN(R9){R6{{GET INPUT IMAGE LENGTH
        !          18807: {{MOV{CSWIN{R7{{GET MAX ALLOWABLE LENGTH
        !          18808: {{BLO{R6{R7{NXTS3{SKIP IF NOT TOO LONG
        !          18809: {{MOV{R7{R6{{ELSE TRUNCATE
        !          18810: *
        !          18811: *      HERE WITH LENGTH IN (WA)
        !          18812: *
        !          18813: {NXTS3{MOV{R6{SCNIL{{USE AS RECORD LENGTH
        !          18814: {{ZER{SCNSE{{{RESET SCNSE
        !          18815: {{ZER{LSTPF{{{SET LINE NOT LISTED YET
        !          18816: {{EXI{{{{RETURN TO NEXTS CALLER
        !          18817: {{ENP{{{{END PROCEDURE NEXTS
        !          18818: {{EJC{{{{
        !          18819: *
        !          18820: *      PATIN -- PATTERN CONSTRUCTION FOR LEN,POS,RPOS,TAB,RTAB
        !          18821: *
        !          18822: *      THESE PATTERN TYPES ALL GENERATE A SIMILAR NODE TYPE. SO
        !          18823: *      THE CONSTRUCTION CODE IS SHARED. SEE FUNCTIONS SECTION
        !          18824: *      FOR ACTUAL ENTRY POINTS FOR THESE FIVE FUNCTIONS.
        !          18825: *
        !          18826: *      (WA)                  PCODE FOR EXPRESSION ARG CASE
        !          18827: *      (WB)                  PCODE FOR INTEGER ARG CASE
        !          18828: *      JSR  PATIN            CALL TO BUILD PATTERN NODE
        !          18829: *      PPM  LOC              TRANSFER LOC FOR NOT INTEGER OR EXP
        !          18830: *      PPM  LOC              TRANSFER LOC FOR INT OUT OF RANGE
        !          18831: *      (XR)                  POINTER TO CONSTRUCTED NODE
        !          18832: *      (XL,WA,WB,WC,IA)      DESTROYED
        !          18833: *
        !          18834: {PATIN{PRC{N{2{{ENTRY POINT
        !          18835: {{MOV{R6{R10{{PRESERVE EXPRESSION ARG PCODE
        !          18836: {{JSR{GTSMI{{{TRY TO CONVERT ARG AS SMALL INTEGER
        !          18837: {{PPM{PTIN2{{{JUMP IF NOT INTEGER
        !          18838: {{PPM{PTIN3{{{JUMP IF OUT OF RANGE
        !          18839: *
        !          18840: *      COMMON SUCCESSFUL EXIT POINT
        !          18841: *
        !          18842: {PTIN1{JSR{PBILD{{{BUILD PATTERN NODE
        !          18843: {{EXI{{{{RETURN TO CALLER
        !          18844: *
        !          18845: *      HERE IF ARGUMENT IS NOT AN INTEGER
        !          18846: *
        !          18847: {PTIN2{MOV{R10{R7{{COPY EXPR ARG CASE PCODE
        !          18848: {{BLO{(R9){#B$E$${PTIN1{ALL OK IF EXPRESSION ARG
        !          18849: {{EXI{1{{{ELSE TAKE ERROR EXIT FOR WRONG TYPE
        !          18850: *
        !          18851: *      HERE FOR ERROR OF OUT OF RANGE INTEGER ARGUMENT
        !          18852: *
        !          18853: {PTIN3{EXI{2{{{TAKE OUT-OF-RANGE ERROR EXIT
        !          18854: {{ENP{{{{END PROCEDURE PATIN
        !          18855: {{EJC{{{{
        !          18856: *
        !          18857: *      PATST -- PATTERN CONSTRUCTION FOR ANY,NOTANY,
        !          18858: *               BREAK,SPAN AND BREAKX PATTERN FUNCTIONS.
        !          18859: *
        !          18860: *      THESE PATTERN FUNCTIONS BUILD SIMILAR TYPES OF NODES AND
        !          18861: *      THE CONSTRUCTION CODE IS SHARED. SEE FUNCTIONS SECTION
        !          18862: *      FOR ACTUAL ENTRY POINTS FOR THESE FIVE PATTERN FUNCTIONS.
        !          18863: *
        !          18864: *      0(XS)                 STRING ARGUMENT
        !          18865: *      (WB)                  PCODE FOR ONE CHAR ARGUMENT
        !          18866: *      (XL)                  PCODE FOR MULTI-CHAR ARGUMENT
        !          18867: *      (WC)                  PCODE FOR EXPRESSION ARGUMENT
        !          18868: *      JSR  PATST            CALL TO BUILD NODE
        !          18869: *      PPM  LOC              TRANSFER LOC IF NOT STRING OR EXPR
        !          18870: *      (XS)                  POPPED PAST STRING ARGUMENT
        !          18871: *      (XR)                  POINTER TO CONSTRUCTED NODE
        !          18872: *      (XL)                  DESTROYED
        !          18873: *      (WA,WB,WC,RA)         DESTROYED
        !          18874: *
        !          18875: *      NOTE THAT THERE IS A SPECIAL CALL TO PATST IN THE EVALS
        !          18876: *      PROCEDURE WITH A SLIGHTLY DIFFERENT FORM. SEE EVALS
        !          18877: *      FOR DETAILS OF THE FORM OF THIS CALL.
        !          18878: *
        !          18879: {PATST{PRC{N{1{{ENTRY POINT
        !          18880: {{JSR{GTSTG{{{CONVERT ARGUMENT AS STRING
        !          18881: {{PPM{PATS7{{{JUMP IF NOT STRING
        !          18882: {{BNE{R6{#NUM01{PATS2{JUMP IF NOT ONE CHAR STRING
        !          18883: *
        !          18884: *      HERE FOR ONE CHAR STRING CASE
        !          18885: *
        !          18886: {{BZE{R7{PATS2{{TREAT AS MULTI-CHAR IF EVALS CALL
        !          18887: {{PLC{R9{{{POINT TO CHARACTER
        !          18888: {{LCH{R9{(R9){{LOAD CHARACTER
        !          18889: *
        !          18890: *      COMMON EXIT POINT AFTER SUCCESSFUL CONSTRUCTION
        !          18891: *
        !          18892: {PATS1{JSR{PBILD{{{CALL ROUTINE TO BUILD NODE
        !          18893: {{EXI{{{{RETURN TO PATST CALLER
        !          18894: {{EJC{{{{
        !          18895: *
        !          18896: *      PATST (CONTINUED)
        !          18897: *
        !          18898: *      HERE FOR MULTI-CHARACTER STRING CASE
        !          18899: *
        !          18900: {PATS2{MOV{R10{-(SP){{SAVE MULTI-CHAR PCODE
        !          18901: {{MOV{R9{-(SP){{SAVE STRING POINTER
        !          18902: {{MOV{CTMSK{R8{{LOAD CURRENT MASK BIT
        !          18903: {{LSH{R8{1{{SHIFT TO NEXT POSITION
        !          18904: {{NZB{R8{PATS4{{SKIP IF POSITION LEFT IN THIS TBL
        !          18905: *
        !          18906: *      HERE WE MUST ALLOCATE A NEW CHARACTER TABLE
        !          18907: *
        !          18908: {{MOV{#4*CTSI${R6{{SET SIZE OF CTBLK
        !          18909: {{JSR{ALLOC{{{ALLOCATE CTBLK
        !          18910: {{MOV{R9{R$CTP{{STORE PTR TO NEW CTBLK
        !          18911: {{MOV{#B$CTT{(R9)+{{STORE TYPE CODE, BUMP PTR
        !          18912: {{LCT{R7{#CFP$A{{SET NUMBER OF WORDS TO CLEAR
        !          18913: {{MOV{BITS0{R8{{LOAD ALL ZERO BITS
        !          18914: *
        !          18915: *      LOOP TO CLEAR ALL BITS IN TABLE TO ZEROS
        !          18916: *
        !          18917: {PATS3{MOV{R8{(R9)+{{MOVE WORD OF ZERO BITS
        !          18918: {{BCT{R7{PATS3{{LOOP TILL ALL CLEARED
        !          18919: {{MOV{BITS1{R8{{SET INITIAL BIT POSITION
        !          18920: *
        !          18921: *      MERGE HERE WITH BIT POSITION AVAILABLE
        !          18922: *
        !          18923: {PATS4{MOV{R8{CTMSK{{SAVE PARM2 (NEW BIT POSITION)
        !          18924: {{MOV{(SP)+{R10{{RESTORE POINTER TO ARGUMENT STRING
        !          18925: {{MOV{4*SCLEN(R10){R7{{LOAD STRING LENGTH
        !          18926: {{BZE{R7{PATS6{{JUMP IF NULL STRING CASE
        !          18927: {{LCT{R7{R7{{ELSE SET LOOP COUNTER
        !          18928: {{PLC{R10{{{POINT TO CHARACTERS IN ARGUMENT
        !          18929: {{EJC{{{{
        !          18930: *
        !          18931: *      PATST (CONTINUED)
        !          18932: *
        !          18933: *      LOOP TO SET BITS IN COLUMN OF TABLE
        !          18934: *
        !          18935: {PATS5{LCH{R6{(R10)+{{LOAD NEXT CHARACTER
        !          18936: {{WTB{R6{{{CONVERT TO BYTE OFFSET
        !          18937: {{MOV{R$CTP{R9{{POINT TO CTBLK
        !          18938: {{ADD{R6{R9{{POINT TO CTBLK ENTRY
        !          18939: {{MOV{R8{R6{{COPY BIT MASK
        !          18940: {{ORB{4*CTCHS(R9){R6{{OR IN BITS ALREADY SET
        !          18941: {{MOV{R6{4*CTCHS(R9){{STORE RESULTING BIT STRING
        !          18942: {{BCT{R7{PATS5{{LOOP TILL ALL BITS SET
        !          18943: *
        !          18944: *      COMPLETE PROCESSING FOR MUTI-CHAR STRING CASE
        !          18945: *
        !          18946: {PATS6{MOV{R$CTP{R9{{LOAD CTBLK PTR AS PARM1 FOR PBILD
        !          18947: {{ZER{R10{{{CLEAR GARBAGE PTR IN XL
        !          18948: {{MOV{(SP)+{R7{{LOAD PCODE FOR MULTI-CHAR STR CASE
        !          18949: {{BRN{PATS1{{{BACK TO EXIT (WC=BITSTRING=PARM2)
        !          18950: *
        !          18951: *      HERE IF ARGUMENT IS NOT A STRING
        !          18952: *
        !          18953: *      NOTE THAT THE CALL FROM EVALS CANNOT PASS AN EXPRESSION
        !          18954: *      SINCE EVALP ALWAYS REEVALUATES EXPRESSIONS.
        !          18955: *
        !          18956: {PATS7{MOV{R8{R7{{SET PCODE FOR EXPRESSION ARGUMENT
        !          18957: {{BLO{(R9){#B$E$${PATS1{JUMP TO EXIT IF EXPRESSION ARG
        !          18958: {{EXI{1{{{ELSE TAKE WRONG TYPE ERROR EXIT
        !          18959: {{ENP{{{{END PROCEDURE PATST
        !          18960: {{EJC{{{{
        !          18961: *
        !          18962: *      PBILD -- BUILD PATTERN NODE
        !          18963: *
        !          18964: *      (XR)                  PARM1 (ONLY IF REQUIRED)
        !          18965: *      (WB)                  PCODE FOR NODE
        !          18966: *      (WC)                  PARM2 (ONLY IF REQUIRED)
        !          18967: *      JSR  PBILD            CALL TO BUILD NODE
        !          18968: *      (XR)                  POINTER TO CONSTRUCTED NODE
        !          18969: *      (WA)                  DESTROYED
        !          18970: *
        !          18971: {PBILD{PRC{E{0{{ENTRY POINT
        !          18972: {{MOV{R9{-(SP){{STACK POSSIBLE PARM1
        !          18973: {{MOV{R7{R9{{COPY PCODE
        !          18974: {{LEI{R9{{{LOAD ENTRY POINT ID (BL$PX)
        !          18975: {{BEQ{R9{#BL$P1{PBLD1{JUMP IF ONE PARAMETER
        !          18976: {{BEQ{R9{#BL$P0{PBLD3{JUMP IF NO PARAMETERS
        !          18977: *
        !          18978: *      HERE FOR TWO PARAMETER CASE
        !          18979: *
        !          18980: {{MOV{#4*PCSI${R6{{SET SIZE OF P2BLK
        !          18981: {{JSR{ALLOC{{{ALLOCATE BLOCK
        !          18982: {{MOV{R8{4*PARM2(R9){{STORE SECOND PARAMETER
        !          18983: {{BRN{PBLD2{{{MERGE WITH ONE PARM CASE
        !          18984: *
        !          18985: *      HERE FOR ONE PARAMETER CASE
        !          18986: *
        !          18987: {PBLD1{MOV{#4*PBSI${R6{{SET SIZE OF P1BLK
        !          18988: {{JSR{ALLOC{{{ALLOCATE NODE
        !          18989: *
        !          18990: *      MERGE HERE FROM TWO PARM CASE
        !          18991: *
        !          18992: {PBLD2{MOV{(SP){4*PARM1(R9){{STORE FIRST PARAMETER
        !          18993: {{BRN{PBLD4{{{MERGE WITH NO PARAMETER CASE
        !          18994: *
        !          18995: *      HERE FOR CASE OF NO PARAMETERS
        !          18996: *
        !          18997: {PBLD3{MOV{#4*PASI${R6{{SET SIZE OF P0BLK
        !          18998: {{JSR{ALLOC{{{ALLOCATE NODE
        !          18999: *
        !          19000: *      MERGE HERE FROM OTHER CASES
        !          19001: *
        !          19002: {PBLD4{MOV{R7{(R9){{STORE PCODE
        !          19003: {{ICA{SP{{{POP FIRST PARAMETER
        !          19004: {{MOV{#NDNTH{4*PTHEN(R9){{SET NOTHEN SUCCESSOR POINTER
        !          19005: {{EXI{{{{RETURN TO PBILD CALLER
        !          19006: {{ENP{{{{END PROCEDURE PBILD
        !          19007: {{EJC{{{{
        !          19008: *
        !          19009: *      PCONC -- CONCATENATE TWO PATTERNS
        !          19010: *
        !          19011: *      (XL)                  PTR TO RIGHT PATTERN
        !          19012: *      (XR)                  PTR TO LEFT PATTERN
        !          19013: *      JSR  PCONC            CALL TO CONCATENATE PATTERNS
        !          19014: *      (XR)                  PTR TO CONCATENATED PATTERN
        !          19015: *      (XL,WA,WB,WC)         DESTROYED
        !          19016: *
        !          19017: *
        !          19018: *      TO CONCATENATE TWO PATTERNS, ALL SUCCESSORS IN THE LEFT
        !          19019: *      PATTERN WHICH POINT TO THE NOTHEN NODE MUST BE CHANGED TO
        !          19020: *      POINT TO THE RIGHT PATTERN. HOWEVER, THIS MODIFICATION
        !          19021: *      MUST BE PERFORMED ON A COPY OF THE LEFT ARGUMENT RATHER
        !          19022: *      THAN THE LEFT ARGUMENT ITSELF, SINCE THE LEFT ARGUMENT
        !          19023: *      MAY BE POINTED TO BY SOME OTHER VARIABLE VALUE.
        !          19024: *
        !          19025: *      ACCORDINGLY, IT IS NECESSARY TO COPY THE LEFT ARGUMENT.
        !          19026: *      THIS IS NOT A TRIVIAL PROCESS SINCE WE MUST AVOID COPYING
        !          19027: *      NODES MORE THAN ONCE AND THE PATTERN IS A GRAPH STRUCTURE
        !          19028: *      THE FOLLOWING ALGORITHM IS EMPLOYED.
        !          19029: *
        !          19030: *      THE STACK IS USED TO STORE A LIST OF NODES WHICH
        !          19031: *      HAVE ALREADY BEEN COPIED. THE FORMAT OF THE ENTRIES ON
        !          19032: *      THIS LIST CONSISTS OF A TWO WORD BLOCK. THE FIRST WORD
        !          19033: *      IS THE OLD ADDRESS AND THE SECOND WORD IS THE ADDRESS
        !          19034: *      OF THE COPY. THIS LIST IS SEARCHED BY THE PCOPY
        !          19035: *      ROUTINE TO AVOID MAKING DUPLICATE COPIES. A TRICK IS
        !          19036: *      USED TO ACCOMPLISH THE CONCATENATION AT THE SAME TIME.
        !          19037: *      A SPECIAL ENTRY IS MADE TO START WITH ON THE STACK. THIS
        !          19038: *      ENTRY RECORDS THAT THE NOTHEN NODE HAS BEEN COPIED
        !          19039: *      ALREADY AND THE ADDRESS OF ITS COPY IS THE RIGHT PATTERN.
        !          19040: *      THIS AUTOMATICALLY PERFORMS THE CORRECT REPLACEMENTS.
        !          19041: *
        !          19042: {PCONC{PRC{E{0{{ENTRY POINT
        !          19043: {{ZER{-(SP){{{MAKE ROOM FOR ONE ENTRY AT BOTTOM
        !          19044: {{MOV{SP{R8{{STORE POINTER TO START OF LIST
        !          19045: {{MOV{#NDNTH{-(SP){{STACK NOTHEN NODE AS OLD NODE
        !          19046: {{MOV{R10{-(SP){{STORE RIGHT ARG AS COPY OF NOTHEN
        !          19047: {{MOV{SP{R10{{INITIALIZE POINTER TO STACK ENTRIES
        !          19048: {{JSR{PCOPY{{{COPY FIRST NODE OF LEFT ARG
        !          19049: {{MOV{R6{4*2(R10){{STORE AS RESULT UNDER LIST
        !          19050: {{EJC{{{{
        !          19051: *
        !          19052: *      PCONC (CONTINUED)
        !          19053: *
        !          19054: *      THE FOLLOWING LOOP SCANS ENTRIES IN THE LIST AND MAKES
        !          19055: *      SURE THAT THEIR SUCCESSORS HAVE BEEN COPIED.
        !          19056: *
        !          19057: {PCNC1{BEQ{R10{SP{PCNC2{JUMP IF ALL ENTRIES PROCESSED
        !          19058: {{MOV{-(R10){R9{{ELSE LOAD NEXT OLD ADDRESS
        !          19059: {{MOV{4*PTHEN(R9){R9{{LOAD POINTER TO SUCCESSOR
        !          19060: {{JSR{PCOPY{{{COPY SUCCESSOR NODE
        !          19061: {{MOV{-(R10){R9{{LOAD POINTER TO NEW NODE (COPY)
        !          19062: {{MOV{R6{4*PTHEN(R9){{STORE PTR TO NEW SUCCESSOR
        !          19063: *
        !          19064: *      NOW CHECK FOR SPECIAL CASE OF ALTERNATION NODE WHERE
        !          19065: *      PARM1 POINTS TO A NODE AND MUST BE COPIED LIKE PTHEN.
        !          19066: *
        !          19067: {{BNE{(R9){#P$ALT{PCNC1{LOOP BACK IF NOT
        !          19068: {{MOV{4*PARM1(R9){R9{{ELSE LOAD POINTER TO ALTERNATIVE
        !          19069: {{JSR{PCOPY{{{COPY IT
        !          19070: {{MOV{(R10){R9{{RESTORE PTR TO NEW NODE
        !          19071: {{MOV{R6{4*PARM1(R9){{STORE PTR TO COPIED ALTERNATIVE
        !          19072: {{BRN{PCNC1{{{LOOP BACK FOR NEXT ENTRY
        !          19073: *
        !          19074: *      HERE AT END OF COPY PROCESS
        !          19075: *
        !          19076: {PCNC2{MOV{R8{SP{{RESTORE STACK POINTER
        !          19077: {{MOV{(SP)+{R9{{LOAD POINTER TO COPY
        !          19078: {{EXI{{{{RETURN TO PCONC CALLER
        !          19079: {{ENP{{{{END PROCEDURE PCONC
        !          19080: {{EJC{{{{
        !          19081: *
        !          19082: *      PCOPY -- COPY A PATTERN NODE
        !          19083: *
        !          19084: *      PCOPY IS CALLED FROM THE PCONC PROCEDURE TO COPY A SINGLE
        !          19085: *      PATTERN NODE. THE COPY IS ONLY CARRIED OUT IF THE NODE
        !          19086: *      HAS NOT BEEN COPIED ALREADY.
        !          19087: *
        !          19088: *      (XR)                  POINTER TO NODE TO BE COPIED
        !          19089: *      (XT)                  PTR TO CURRENT LOC IN COPY LIST
        !          19090: *      (WC)                  POINTER TO LIST OF COPIED NODES
        !          19091: *      JSR  PCOPY            CALL TO COPY A NODE
        !          19092: *      (WA)                  POINTER TO COPY
        !          19093: *      (WB,XR)               DESTROYED
        !          19094: *
        !          19095: {PCOPY{PRC{N{0{{ENTRY POINT
        !          19096: {{MOV{R10{R7{{SAVE XT
        !          19097: {{MOV{R8{R10{{POINT TO START OF LIST
        !          19098: *
        !          19099: *      LOOP TO SEARCH LIST OF NODES COPIED ALREADY
        !          19100: *
        !          19101: {PCOP1{DCA{R10{{{POINT TO NEXT ENTRY ON LIST
        !          19102: {{BEQ{R9{(R10){PCOP2{JUMP IF MATCH
        !          19103: {{DCA{R10{{{ELSE SKIP OVER COPIED ADDRESS
        !          19104: {{BNE{R10{SP{PCOP1{LOOP BACK IF MORE TO TEST
        !          19105: *
        !          19106: *      HERE IF NOT IN LIST, PERFORM COPY
        !          19107: *
        !          19108: {{MOV{(R9){R6{{LOAD FIRST WORD OF BLOCK
        !          19109: {{JSR{BLKLN{{{GET LENGTH OF BLOCK
        !          19110: {{MOV{R9{R10{{SAVE POINTER TO OLD NODE
        !          19111: {{JSR{ALLOC{{{ALLOCATE SPACE FOR COPY
        !          19112: {{MOV{R10{-(SP){{STORE OLD ADDRESS ON LIST
        !          19113: {{MOV{R9{-(SP){{STORE NEW ADDRESS ON LIST
        !          19114: {{CHK{{{{CHECK FOR STACK OVERFLOW
        !          19115: {{MVW{{{{MOVE WORDS FROM OLD BLOCK TO COPY
        !          19116: {{MOV{(SP){R6{{LOAD POINTER TO COPY
        !          19117: {{BRN{PCOP3{{{JUMP TO EXIT
        !          19118: *
        !          19119: *      HERE IF WE FIND ENTRY IN LIST
        !          19120: *
        !          19121: {PCOP2{MOV{-(R10){R6{{LOAD ADDRESS OF COPY FROM LIST
        !          19122: *
        !          19123: *      COMMON EXIT POINT
        !          19124: *
        !          19125: {PCOP3{MOV{R7{R10{{RESTORE XT
        !          19126: {{EXI{{{{RETURN TO PCOPY CALLER
        !          19127: {{ENP{{{{END PROCEDURE PCOPY
        !          19128: {{EJC{{{{
        !          19129: *
        !          19130: *      PRFLR -- PRINT PROFILE
        !          19131: *      PRFLR IS CALLED TO PRINT THE CONTENTS OF THE PROFILE
        !          19132: *      TABLE IN A FAIRLY READABLE TABULAR FORMAT.
        !          19133: *
        !          19134: *      JSR  PRFLR            CALL TO PRINT PROFILE
        !          19135: *      (WA,IA)               DESTROYED
        !          19136: *
        !          19137: {PRFLR{PRC{E{0{{
        !          19138: {{BZE{PFDMP{PRFL4{{NO PRINTING IF NO PROFILING DONE
        !          19139: {{MOV{R9{-(SP){{PRESERVE ENTRY XR
        !          19140: {{MOV{R7{PFSVW{{AND ALSO WB
        !          19141: {{JSR{PRTPG{{{EJECT
        !          19142: {{MOV{#PFMS1{R9{{LOAD MSG /PROGRAM PROFILE/
        !          19143: {{JSR{PRTST{{{AND PRINT IT
        !          19144: {{JSR{PRTNL{{{FOLLOWED BY NEWLINE
        !          19145: {{JSR{PRTNL{{{AND ANOTHER
        !          19146: {{MOV{#PFMS2{R9{{POINT TO FIRST HDR
        !          19147: {{JSR{PRTST{{{PRINT IT
        !          19148: {{JSR{PRTNL{{{NEW LINE
        !          19149: {{MOV{#PFMS3{R9{{SECOND HDR
        !          19150: {{JSR{PRTST{{{PRINT IT
        !          19151: {{JSR{PRTNL{{{NEW LINE
        !          19152: {{JSR{PRTNL{{{AND ANOTHER BLANK LINE
        !          19153: {{ZER{R7{{{INITIAL STMT COUNT
        !          19154: {{MOV{PFTBL{R9{{POINT TO TABLE ORIGIN
        !          19155: {{ADD{#4*NUM02{R9{{BIAS PAST XNBLK HEADER (SGD07)
        !          19156: *
        !          19157: *      LOOP HERE TO PRINT SUCCESSIVE ENTRIES
        !          19158: *
        !          19159: {PRFL1{ICV{R7{{{BUMP STMT NR
        !          19160: {{LDI{(R9){{{LOAD NR OF EXECUTIONS
        !          19161: {{IEQ{PRFL3{{{NO PRINTING IF ZERO
        !          19162: {{MOV{#PFPD1{PROFS{{POINT WHERE TO PRINT
        !          19163: {{JSR{PRTIN{{{AND PRINT IT
        !          19164: {{ZER{PROFS{{{BACK TO START OF LINE
        !          19165: {{MTI{R7{{{LOAD STMT NR
        !          19166: {{JSR{PRTIN{{{PRINT IT THERE
        !          19167: {{MOV{#PFPD2{PROFS{{AND PAD PAST COUNT
        !          19168: {{LDI{4*CFP$I(R9){{{LOAD TOTAL EXEC TIME
        !          19169: {{JSR{PRTIN{{{PRINT THAT TOO
        !          19170: {{LDI{4*CFP$I(R9){{{RELOAD TIME
        !          19171: {{MLI{INTTH{{{CONVERT TO MICROSEC
        !          19172: {{IOV{PRFL2{{{OMIT NEXT BIT IF OVERFLOW
        !          19173: {{DVI{(R9){{{DIVIDE BY EXECUTIONS
        !          19174: {{MOV{#PFPD3{PROFS{{PAD LAST PRINT
        !          19175: {{JSR{PRTIN{{{AND PRINT MCSEC/EXECN
        !          19176: *
        !          19177: *      MERGE AFTER PRINTING TIME
        !          19178: *
        !          19179: {PRFL2{JSR{PRTNL{{{THATS ANOTHER LINE
        !          19180: *
        !          19181: *      HERE TO GO TO NEXT ENTRY
        !          19182: *
        !          19183: {PRFL3{ADD{#4*PF$I2{R9{{BUMP INDEX PTR (SGD07)
        !          19184: {{BLT{R7{PFNTE{PRFL1{LOOP IF MORE STMTS
        !          19185: {{MOV{(SP)+{R9{{RESTORE CALLERS XR
        !          19186: {{MOV{PFSVW{R7{{AND WB TOO
        !          19187: *
        !          19188: *      HERE TO EXIT
        !          19189: *
        !          19190: {PRFL4{EXI{{{{RETURN
        !          19191: {{ENP{{{{END OF PRFLR
        !          19192: {{EJC{{{{
        !          19193: *
        !          19194: *      PRFLU -- UPDATE AN ENTRY IN THE PROFILE TABLE
        !          19195: *
        !          19196: *      ON ENTRY, KVSTN CONTAINS NR OF STMT TO PROFILE
        !          19197: *
        !          19198: *      JSR  PRFLU            CALL TO UPDATE ENTRY
        !          19199: *      (IA)                  DESTROYED
        !          19200: *
        !          19201: {PRFLU{PRC{E{0{{
        !          19202: {{BNZ{PFFNC{PFLU4{{SKIP IF JUST ENTERED FUNCTION
        !          19203: {{MOV{R9{-(SP){{PRESERVE ENTRY XR
        !          19204: {{MOV{R6{PFSVW{{SAVE WA (SGD07)
        !          19205: {{BNZ{PFTBL{PFLU2{{BRANCH IF TABLE ALLOCATED
        !          19206: *
        !          19207: *      HERE IF SPACE FOR PROFILE TABLE NOT YET ALLOCATED.
        !          19208: *      CALCULATE SIZE NEEDED, ALLOCATE A STATIC XNBLK, AND
        !          19209: *      INITIALIZE IT ALL TO ZERO.
        !          19210: *      THE TIME TAKEN FOR THIS WILL BE ATTRIBUTED TO THE CURRENT
        !          19211: *      STATEMENT (ASSIGNMENT TO KEYWD PROFILE), BUT SINCE THE
        !          19212: *      TIMING FOR THIS STATEMENT IS UP THE POLE ANYWAY, THIS
        !          19213: *      DOESNT REALLY MATTER...
        !          19214: *
        !          19215: {{SUB{#NUM01{PFNTE{{ADJUST FOR EXTRA COUNT (SGD07)
        !          19216: {{MTI{PFI2A{{{CONVRT ENTRY SIZE TO INT
        !          19217: {{STI{PFSTE{{{AND STORE SAFELY FOR LATER
        !          19218: {{MTI{PFNTE{{{LOAD TABLE LENGTH AS INTEGER
        !          19219: {{MLI{PFSTE{{{MULTIPLY BY ENTRY SIZE
        !          19220: {{MFI{R6{{{GET BACK ADDRESS-STYLE
        !          19221: {{ADD{#NUM02{R6{{ADD ON 2 WORD OVERHEAD
        !          19222: {{WTB{R6{{{CONVERT THE WHOLE LOT TO BYTES
        !          19223: {{JSR{ALOST{{{GIMME THE SPACE
        !          19224: {{MOV{R9{PFTBL{{SAVE BLOCK POINTER
        !          19225: {{MOV{#B$XNT{(R9)+{{PUT BLOCK TYPE AND ...
        !          19226: {{MOV{R6{(R9)+{{... LENGTH INTO HEADER
        !          19227: {{MFI{R6{{{GET BACK NR OF WDS IN DATA AREA
        !          19228: {{LCT{R6{R6{{LOAD THE COUNTER
        !          19229: *
        !          19230: *      LOOP HERE TO ZERO THE BLOCK DATA
        !          19231: *
        !          19232: {PFLU1{ZER{(R9)+{{{BLANK A WORD
        !          19233: {{BCT{R6{PFLU1{{AND ALLLLLLL THE REST
        !          19234: *
        !          19235: *      END OF ALLOCATION. MERGE BACK INTO ROUTINE
        !          19236: *
        !          19237: {PFLU2{MTI{KVSTN{{{LOAD NR OF STMT JUST ENDED
        !          19238: {{SBI{INTV1{{{MAKE INTO INDEX OFFSET
        !          19239: {{MLI{PFSTE{{{MAKE OFFSET OF TABLE ENTRY
        !          19240: {{MFI{R6{{{CONVERT TO ADDRESS
        !          19241: {{WTB{R6{{{GET AS BAUS
        !          19242: {{ADD{#4*NUM02{R6{{OFFSET INCLUDES TABLE HEADER
        !          19243: {{MOV{PFTBL{R9{{GET TABLE START
        !          19244: {{BGE{R6{4*NUM01(R9){PFLU3{IF OUT OF TABLE, SKIP IT
        !          19245: {{ADD{R6{R9{{ELSE POINT TO ENTRY
        !          19246: {{LDI{(R9){{{GET NR OF EXECUTIONS SO FAR
        !          19247: {{ADI{INTV1{{{NUDGE UP ONE
        !          19248: {{STI{(R9){{{AND PUT BACK
        !          19249: {{JSR{SYSTM{{{GET TIME NOW
        !          19250: {{STI{PFETM{{{STASH ENDING TIME
        !          19251: {{SBI{PFSTM{{{SUBTRACT START TIME
        !          19252: {{ADI{4*CFP$I(R9){{{ADD CUMULATIVE TIME SO FAR
        !          19253: {{STI{4*CFP$I(R9){{{AND PUT BACK NEW TOTAL
        !          19254: {{LDI{PFETM{{{LOAD END TIME OF THIS STMT ...
        !          19255: {{STI{PFSTM{{{... WHICH IS START TIME OF NEXT
        !          19256: *
        !          19257: *      MERGE HERE TO EXIT
        !          19258: *
        !          19259: {PFLU3{MOV{(SP)+{R9{{RESTORE CALLERS XR
        !          19260: {{MOV{PFSVW{R6{{RESTORE SAVED REG
        !          19261: {{EXI{{{{AND RETURN
        !          19262: *
        !          19263: *      HERE IF PROFILE IS SUPPRESSED BECAUSE A PROGRAM DEFINED
        !          19264: *      FUNCTION IS ABOUT TO BE ENTERED, AND SO THE CURRENT STMT
        !          19265: *      HAS NOT YET FINISHED
        !          19266: *
        !          19267: {PFLU4{ZER{PFFNC{{{RESET THE CONDITION FLAG
        !          19268: {{EXI{{{{AND IMMEDIATE RETURN
        !          19269: {{ENP{{{{END OF PROCEDURE PRFLU
        !          19270: {{EJC{{{{
        !          19271: *
        !          19272: *      PRPAR - PROCESS PRINT PARAMETERS
        !          19273: *
        !          19274: *      (WC)                  IF NONZERO ASSOCIATE TERMINAL ONLY
        !          19275: *      JSR  PRPAR            CALL TO PROCESS PRINT PARAMETERS
        !          19276: *      (XL,XR,WA,WB,WC)      DESTROYED
        !          19277: *
        !          19278: *      SINCE MEMORY ALLOCATION IS UNDECIDED ON INITIAL CALL,
        !          19279: *      TERMINAL CANNOT BE ASSOCIATED. THE ENTRY WITH WC NON-ZERO
        !          19280: *      IS PROVIDED SO A LATER CALL CAN BE MADE TO COMPLETE THIS.
        !          19281: *
        !          19282: {PRPAR{PRC{E{0{{ENTRY POINT
        !          19283: {{BNZ{R8{PRPA7{{JUMP TO ASSOCIATE TERMINAL
        !          19284: {{JSR{SYSPP{{{GET PRINT PARAMETERS
        !          19285: {{BNZ{R7{PRPA1{{JUMP IF LINES/PAGE SPECIFIED
        !          19286: {{MOV{#CFP$M{R7{{ELSE USE A LARGE VALUE
        !          19287: {{RSH{R7{1{{BUT NOT TOO LARGE
        !          19288: *
        !          19289: *      STORE LINE COUNT/PAGE
        !          19290: *
        !          19291: {PRPA1{MOV{R7{LSTNP{{STORE NUMBER OF LINES/PAGE
        !          19292: {{MOV{R7{LSTLC{{PRETEND PAGE IS FULL INITIALLY
        !          19293: {{ZER{LSTPG{{{CLEAR PAGE NUMBER
        !          19294: {{MOV{PRLEN{R7{{GET PRIOR LENGTH IF ANY
        !          19295: {{BZE{R7{PRPA2{{SKIP IF NO LENGTH
        !          19296: {{BGT{R6{R7{PRPA3{SKIP STORING IF TOO BIG
        !          19297: *
        !          19298: *      STORE PRINT BUFFER LENGTH
        !          19299: *
        !          19300: {PRPA2{MOV{R6{PRLEN{{STORE VALUE
        !          19301: *
        !          19302: *      PROCESS BITS OPTIONS
        !          19303: *
        !          19304: {PRPA3{MOV{BITS3{R7{{BIT 3 MASK
        !          19305: {{ANB{R8{R7{{GET -NOLIST BIT
        !          19306: {{ZRB{R7{PRPA4{{SKIP IF CLEAR
        !          19307: {{ZER{CSWLS{{{SET -NOLIST
        !          19308: *
        !          19309: *      CHECK IF FAIL REPORTS GOTO INTERACTIVE CHANNEL
        !          19310: *
        !          19311: {PRPA4{MOV{BITS1{R7{{BIT 1 MASK
        !          19312: {{ANB{R8{R7{{GET BIT
        !          19313: {{MOV{R7{ERICH{{STORE INT. CHAN. ERROR FLAG
        !          19314: {{MOV{BITS2{R7{{BIT 2 MASK
        !          19315: {{ANB{R8{R7{{GET BIT
        !          19316: {{MOV{R7{PRICH{{FLAG FOR STD PRINTER ON INT. CHAN.
        !          19317: {{MOV{BITS4{R7{{BIT 4 MASK
        !          19318: {{ANB{R8{R7{{GET BIT
        !          19319: {{MOV{R7{CPSTS{{FLAG FOR COMPILE STATS SUPPRESSN.
        !          19320: {{MOV{BITS5{R7{{BIT 5 MASK
        !          19321: {{ANB{R8{R7{{GET BIT
        !          19322: {{MOV{R7{EXSTS{{FLAG FOR EXEC STATS SUPPRESSION
        !          19323: {{EJC{{{{
        !          19324: *
        !          19325: *      PRPAR (CONTINUED)
        !          19326: *
        !          19327: {{MOV{BITS6{R7{{BIT 6 MASK
        !          19328: {{ANB{R8{R7{{GET BIT
        !          19329: {{MOV{R7{PRECL{{EXTENDED/COMPACT LISTING FLAG
        !          19330: {{SUB{#NUM08{R6{{POINT 8 CHARS FROM LINE END
        !          19331: {{ZRB{R7{PRPA5{{JUMP IF NOT EXTENDED
        !          19332: {{MOV{R6{LSTPO{{STORE FOR LISTING PAGE HEADINGS
        !          19333: *
        !          19334: *       CONTINUE OPTION PROCESSING
        !          19335: *
        !          19336: {PRPA5{MOV{BITS7{R7{{BIT 7 MASK
        !          19337: {{ANB{R8{R7{{GET BIT 7
        !          19338: {{MOV{R7{CSWEX{{SET -NOEXECUTE IF NON-ZERO
        !          19339: {{MOV{BIT10{R7{{BIT 10 MASK
        !          19340: {{ANB{R8{R7{{GET BIT 10
        !          19341: {{MOV{R7{HEADP{{PRETEND PRINTED TO OMIT HEADERS
        !          19342: {{MOV{BITS9{R7{{BIT 9 MASK
        !          19343: {{ANB{R8{R7{{GET BIT 9
        !          19344: {{MOV{R7{PRSTO{{KEEP IT AS STD LISTING OPTION
        !          19345: {{ZRB{R7{PRPA6{{SKIP IF CLEAR
        !          19346: {{MOV{PRLEN{R6{{GET PRINT BUFFER LENGTH
        !          19347: {{SUB{#NUM08{R6{{POINT 8 CHARS FROM LINE END
        !          19348: {{MOV{R6{LSTPO{{STORE PAGE OFFSET
        !          19349: *
        !          19350: *      CHECK FOR TERMINAL
        !          19351: *
        !          19352: {PRPA6{ANB{BITS8{R8{{SEE IF TERMINAL TO BE ACTIVATED
        !          19353: {{BNZ{R8{PRPA7{{JUMP IF TERMINAL REQUIRED
        !          19354: {{BZE{INITR{PRPA8{{JUMP IF NO TERMINAL TO DETACH
        !          19355: {{MOV{#V$TER{R10{{PTR TO /TERMINAL/
        !          19356: {{JSR{GTNVR{{{GET VRBLK POINTER
        !          19357: {{PPM{{{{CANT FAIL
        !          19358: {{MOV{#NULLS{4*VRVAL(R9){{CLEAR VALUE OF TERMINAL
        !          19359: {{JSR{SETVR{{{REMOVE ASSOCIATION
        !          19360: {{BRN{PRPA8{{{RETURN
        !          19361: *
        !          19362: *      ASSOCIATE TERMINAL
        !          19363: *
        !          19364: {PRPA7{MNZ{INITR{{{NOTE TERMINAL ASSOCIATED
        !          19365: {{BZE{DNAMB{PRPA8{{CANT IF MEMORY NOT ORGANISED
        !          19366: {{MOV{#V$TER{R10{{POINT TO TERMINAL STRING
        !          19367: {{MOV{#TRTOU{R7{{OUTPUT TRACE TYPE
        !          19368: {{JSR{INOUT{{{ATTACH OUTPUT TRBLK TO VRBLK
        !          19369: {{MOV{R9{-(SP){{STACK TRBLK PTR
        !          19370: {{MOV{#V$TER{R10{{POINT TO TERMINAL STRING
        !          19371: {{MOV{#TRTIN{R7{{INPUT TRACE TYPE
        !          19372: {{JSR{INOUT{{{ATTACH INPUT TRACE BLK
        !          19373: {{MOV{(SP)+{4*VRVAL(R9){{ADD OUTPUT TRBLK TO CHAIN
        !          19374: *
        !          19375: *      RETURN POINT
        !          19376: *
        !          19377: {PRPA8{EXI{{{{RETURN
        !          19378: {{ENP{{{{END PROCEDURE PRPAR
        !          19379: {{EJC{{{{
        !          19380: *
        !          19381: *      PRTCH -- PRINT A CHARACTER
        !          19382: *
        !          19383: *      PRTCH IS USED TO PRINT A SINGLE CHARACTER
        !          19384: *
        !          19385: *      (WA)                  CHARACTER TO BE PRINTED
        !          19386: *      JSR  PRTCH            CALL TO PRINT CHARACTER
        !          19387: *
        !          19388: {PRTCH{PRC{E{0{{ENTRY POINT
        !          19389: {{MOV{R9{-(SP){{SAVE XR
        !          19390: {{BNE{PROFS{PRLEN{PRCH1{JUMP IF ROOM IN BUFFER
        !          19391: {{JSR{PRTNL{{{ELSE PRINT THIS LINE
        !          19392: *
        !          19393: *      HERE AFTER MAKING SURE WE HAVE ROOM
        !          19394: *
        !          19395: {PRCH1{MOV{PRBUF{R9{{POINT TO PRINT BUFFER
        !          19396: {{PSC{R9{PROFS{{POINT TO NEXT CHARACTER LOCATION
        !          19397: {{SCH{R6{(R9){{STORE NEW CHARACTER
        !          19398: {{CSC{R9{{{COMPLETE STORE CHARACTERS
        !          19399: {{ICV{PROFS{{{BUMP POINTER
        !          19400: {{MOV{(SP)+{R9{{RESTORE ENTRY XR
        !          19401: {{EXI{{{{RETURN TO PRTCH CALLER
        !          19402: {{ENP{{{{END PROCEDURE PRTCH
        !          19403: {{EJC{{{{
        !          19404: *
        !          19405: *      PRTIC -- PRINT TO INTERACTIVE CHANNEL
        !          19406: *
        !          19407: *      PRTIC IS CALLED TO PRINT THE CONTENTS OF THE STANDARD
        !          19408: *      PRINT BUFFER TO THE INTERACTIVE CHANNEL. IT IS ONLY
        !          19409: *      CALLED AFTER PRTST HAS SET UP THE STRING FOR PRINTING.
        !          19410: *      IT DOES NOT CLEAR THE BUFFER.
        !          19411: *
        !          19412: *      JSR  PRTIC            CALL FOR PRINT
        !          19413: *      (WA,WB)               DESTROYED
        !          19414: *
        !          19415: {PRTIC{PRC{E{0{{ENTRY POINT
        !          19416: {{MOV{R9{-(SP){{SAVE XR
        !          19417: {{MOV{PRBUF{R9{{POINT TO BUFFER
        !          19418: {{MOV{PROFS{R6{{NO OF CHARS
        !          19419: {{JSR{SYSPI{{{PRINT
        !          19420: {{PPM{PRTC2{{{FAIL RETURN
        !          19421: *
        !          19422: *      RETURN
        !          19423: *
        !          19424: {PRTC1{MOV{(SP)+{R9{{RESTORE XR
        !          19425: {{EXI{{{{RETURN
        !          19426: *
        !          19427: *      ERROR OCCURED
        !          19428: *
        !          19429: {PRTC2{ZER{ERICH{{{PREVENT LOOPING
        !          19430: {{ERB{252{ERROR{{ON PRINTING TO INTERACTIVE CHANNEL
        !          19431: {{BRN{PRTC1{{{RETURN
        !          19432: {{ENP{{{{PROCEDURE PRTIC
        !          19433: {{EJC{{{{
        !          19434: *
        !          19435: *      PRTIS -- PRINT TO INTERACTIVE AND STANDARD PRINTER
        !          19436: *
        !          19437: *      PRTIS PUTS A LINE FROM THE PRINT BUFFER ONTO THE
        !          19438: *      INTERACTIVE CHANNEL (IF ANY) AND THE STANDARD PRINTER.
        !          19439: *      IT ALWAYS PRINTS TO THE STANDARD PRINTER BUT DOES
        !          19440: *      NOT DUPLICATE LINES IF THE STANDARD PRINTER IS
        !          19441: *      INTERACTIVE.  IT CLEARS DOWN THE PRINT BUFFER.
        !          19442: *
        !          19443: *      JSR  PRTIS            CALL FOR PRINTING
        !          19444: *      (WA,WB)               DESTROYED
        !          19445: *
        !          19446: {PRTIS{PRC{E{0{{ENTRY POINT
        !          19447: {{BNZ{PRICH{PRTS1{{JUMP IF STANDARD PRINTER IS INT.CH.
        !          19448: {{BZE{ERICH{PRTS1{{SKIP IF NOT DOING INT. ERROR REPS.
        !          19449: {{JSR{PRTIC{{{PRINT TO INTERACTIVE CHANNEL
        !          19450: *
        !          19451: *      MERGE AND EXIT
        !          19452: *
        !          19453: {PRTS1{JSR{PRTNL{{{PRINT TO STANDARD PRINTER
        !          19454: {{EXI{{{{RETURN
        !          19455: {{ENP{{{{END PROCEDURE PRTIS
        !          19456: {{EJC{{{{
        !          19457: *
        !          19458: *      PRTIN -- PRINT AN INTEGER
        !          19459: *
        !          19460: *      PRTIN PRINTS THE INTEGER VALUE WHICH IS IN THE INTEGER
        !          19461: *      ACCUMULATOR. BLOCKS BUILT IN DYNAMIC STORAGE
        !          19462: *      DURING THIS PROCESS ARE IMMEDIATELY DELETED.
        !          19463: *
        !          19464: *      (IA)                  INTEGER VALUE TO BE PRINTED
        !          19465: *      JSR  PRTIN            CALL TO PRINT INTEGER
        !          19466: *      (IA,RA)               DESTROYED
        !          19467: *
        !          19468: {PRTIN{PRC{E{0{{ENTRY POINT
        !          19469: {{MOV{R9{-(SP){{SAVE XR
        !          19470: {{JSR{ICBLD{{{BUILD INTEGER BLOCK
        !          19471: {{BLO{R9{DNAMB{PRTI1{JUMP IF ICBLK BELOW DYNAMIC
        !          19472: {{BHI{R9{DNAMP{PRTI1{JUMP IF ABOVE DYNAMIC
        !          19473: {{MOV{R9{DNAMP{{IMMEDIATELY DELETE IT
        !          19474: *
        !          19475: *      DELETE ICBLK FROM DYNAMIC STORE
        !          19476: *
        !          19477: {PRTI1{MOV{R9{-(SP){{STACK PTR FOR GTSTG
        !          19478: {{JSR{GTSTG{{{CONVERT TO STRING
        !          19479: {{PPM{{{{CONVERT ERROR IS IMPOSSIBLE
        !          19480: {{MOV{R9{DNAMP{{RESET POINTER TO DELETE SCBLK
        !          19481: {{JSR{PRTST{{{PRINT INTEGER STRING
        !          19482: {{MOV{(SP)+{R9{{RESTORE ENTRY XR
        !          19483: {{EXI{{{{RETURN TO PRTIN CALLER
        !          19484: {{ENP{{{{END PROCEDURE PRTIN
        !          19485: {{EJC{{{{
        !          19486: *
        !          19487: *      PRTMI -- PRINT MESSAGE AND INTEGER
        !          19488: *
        !          19489: *      PRTMI IS USED TO PRINT MESSAGES TOGETHER WITH AN INTEGER
        !          19490: *      VALUE STARTING IN COLUMN 15 (USED BY THE ROUTINES AT
        !          19491: *      THE END OF COMPILATION).
        !          19492: *
        !          19493: *      JSR  PRTMI            CALL TO PRINT MESSAGE AND INTEGER
        !          19494: *
        !          19495: {PRTMI{PRC{E{0{{ENTRY POINT
        !          19496: {{JSR{PRTST{{{PRINT STRING MESSAGE
        !          19497: {{MOV{#PRTMF{PROFS{{SET OFFSET TO COL 15
        !          19498: {{JSR{PRTIN{{{PRINT INTEGER
        !          19499: {{JSR{PRTNL{{{PRINT LINE
        !          19500: {{EXI{{{{RETURN TO PRTMI CALLER
        !          19501: {{ENP{{{{END PROCEDURE PRTMI
        !          19502: {{EJC{{{{
        !          19503: *
        !          19504: *      PRTMX  -- AS PRTMI WITH EXTRA COPY TO INTERACTIVE CHAN.
        !          19505: *
        !          19506: *      JSR  PRTMX            CALL FOR PRINTING
        !          19507: *      (WA,WB)               DESTROYED
        !          19508: *
        !          19509: {PRTMX{PRC{E{0{{ENTRY POINT
        !          19510: {{JSR{PRTST{{{PRINT STRING MESSAGE
        !          19511: {{MOV{#PRTMF{PROFS{{SET PTR TO COLUMN 15
        !          19512: {{JSR{PRTIN{{{PRINT INTEGER
        !          19513: {{JSR{PRTIS{{{PRINT LINE
        !          19514: {{EXI{{{{RETURN
        !          19515: {{ENP{{{{END PROCEDURE PRTMX
        !          19516: {{EJC{{{{
        !          19517: *
        !          19518: *      PRTNL -- PRINT NEW LINE (END PRINT LINE)
        !          19519: *
        !          19520: *      PRTNL PRINTS THE CONTENTS OF THE PRINT BUFFER, RESETS
        !          19521: *      THE BUFFER TO ALL BLANKS AND RESETS THE PRINT POINTER.
        !          19522: *
        !          19523: *      JSR  PRTNL            CALL TO PRINT LINE
        !          19524: *
        !          19525: {PRTNL{PRC{R{0{{ENTRY POINT
        !          19526: {{BNZ{HEADP{PRNL0{{WERE HEADERS PRINTED
        !          19527: {{JSR{PRTPS{{{NO - PRINT THEM
        !          19528: *
        !          19529: *      CALL SYSPR
        !          19530: *
        !          19531: {PRNL0{MOV{R9{-(SP){{SAVE ENTRY XR
        !          19532: {{MOV{R6{PRTSA{{SAVE WA
        !          19533: {{MOV{R7{PRTSB{{SAVE WB
        !          19534: {{MOV{PRBUF{R9{{LOAD POINTER TO BUFFER
        !          19535: {{MOV{PROFS{R6{{LOAD NUMBER OF CHARS IN BUFFER
        !          19536: {{JSR{SYSPR{{{CALL SYSTEM PRINT ROUTINE
        !          19537: {{PPM{PRNL2{{{JUMP IF FAILED
        !          19538: {{LCT{R6{PRLNW{{LOAD LENGTH OF BUFFER IN WORDS
        !          19539: {{ADD{#4*SCHAR{R9{{POINT TO CHARS OF BUFFER
        !          19540: {{MOV{NULLW{R7{{GET WORD OF BLANKS
        !          19541: *
        !          19542: *      LOOP TO BLANK BUFFER
        !          19543: *
        !          19544: {PRNL1{MOV{R7{(R9)+{{STORE WORD OF BLANKS, BUMP PTR
        !          19545: {{BCT{R6{PRNL1{{LOOP TILL ALL BLANKED
        !          19546: *
        !          19547: *      EXIT POINT
        !          19548: *
        !          19549: {{MOV{PRTSB{R7{{RESTORE WB
        !          19550: {{MOV{PRTSA{R6{{RESTORE WA
        !          19551: {{MOV{(SP)+{R9{{RESTORE ENTRY XR
        !          19552: {{ZER{PROFS{{{RESET PRINT BUFFER POINTER
        !          19553: {{EXI{{{{RETURN TO PRTNL CALLER
        !          19554: *
        !          19555: *      FILE FULL OR NO OUTPUT FILE FOR LOAD MODULE
        !          19556: *
        !          19557: {PRNL2{BNZ{PRTEF{PRNL3{{JUMP IF NOT FIRST TIME
        !          19558: {{MNZ{PRTEF{{{MARK FIRST OCCURRENCE
        !          19559: {{ERB{253{PRINT{{LIMIT EXCEEDED ON STANDARD OUTPUT CHANNEL
        !          19560: *
        !          19561: *      STOP AT ONCE
        !          19562: *
        !          19563: {PRNL3{MOV{#NINI8{R7{{ENDING CODE
        !          19564: {{MOV{KVSTN{R6{{STATEMENT NUMBER
        !          19565: {{JSR{SYSEJ{{{STOP
        !          19566: {{ENP{{{{END PROCEDURE PRTNL
        !          19567: {{EJC{{{{
        !          19568: *
        !          19569: *      PRTNM -- PRINT VARIABLE NAME
        !          19570: *
        !          19571: *      PRTNM IS USED TO PRINT A CHARACTER REPRESENTATION OF THE
        !          19572: *      NAME OF A VARIABLE (NOT A VALUE OF DATATYPE NAME)
        !          19573: *      NAMES OF PSEUDO-VARIABLES MAY NOT BE PASSED TO PRTNM.
        !          19574: *
        !          19575: *      (XL)                  NAME BASE
        !          19576: *      (WA)                  NAME OFFSET
        !          19577: *      JSR  PRTNM            CALL TO PRINT NAME
        !          19578: *      (WB,WC,RA)            DESTROYED
        !          19579: *
        !          19580: {PRTNM{PRC{R{0{{ENTRY POINT (RECURSIVE, SEE PRTVL)
        !          19581: {{MOV{R6{-(SP){{SAVE WA (OFFSET IS COLLECTABLE)
        !          19582: {{MOV{R9{-(SP){{SAVE ENTRY XR
        !          19583: {{MOV{R10{-(SP){{SAVE NAME BASE
        !          19584: {{BHI{R10{STATE{PRN02{JUMP IF NOT NATURAL VARIABLE
        !          19585: *
        !          19586: *      HERE FOR NATURAL VARIABLE NAME, RECOGNIZED BY THE FACT
        !          19587: *      THAT THE NAME BASE POINTS INTO THE STATIC AREA.
        !          19588: *
        !          19589: {{MOV{R10{R9{{POINT TO VRBLK
        !          19590: {{JSR{PRTVN{{{PRINT NAME OF VARIABLE
        !          19591: *
        !          19592: *      COMMON EXIT POINT
        !          19593: *
        !          19594: {PRN01{MOV{(SP)+{R10{{RESTORE NAME BASE
        !          19595: {{MOV{(SP)+{R9{{RESTORE ENTRY VALUE OF XR
        !          19596: {{MOV{(SP)+{R6{{RESTORE WA
        !          19597: {{EXI{{{{RETURN TO PRTNM CALLER
        !          19598: *
        !          19599: *      HERE FOR CASE OF NON-NATURAL VARIABLE
        !          19600: *
        !          19601: {PRN02{MOV{R6{R7{{COPY NAME OFFSET
        !          19602: {{BNE{(R10){#B$PDT{PRN03{JUMP IF ARRAY OR TABLE
        !          19603: *
        !          19604: *      FOR PROGRAM DEFINED DATATYPE, PRT FLD NAME, LEFT PAREN
        !          19605: *
        !          19606: {{MOV{4*PDDFP(R10){R9{{LOAD POINTER TO DFBLK
        !          19607: {{ADD{R6{R9{{ADD NAME OFFSET
        !          19608: {{MOV{4*PDFOF(R9){R9{{LOAD VRBLK POINTER FOR FIELD
        !          19609: {{JSR{PRTVN{{{PRINT FIELD NAME
        !          19610: {{MOV{#CH$PP{R6{{LOAD LEFT PAREN
        !          19611: {{JSR{PRTCH{{{PRINT CHARACTER
        !          19612: {{EJC{{{{
        !          19613: *
        !          19614: *      PRTNM (CONTINUED)
        !          19615: *
        !          19616: *      NOW WE PRINT AN IDENTIFYING NAME FOR THE OBJECT IF ONE
        !          19617: *      CAN BE FOUND. THE FOLLOWING CODE SEARCHES FOR A NATURAL
        !          19618: *      VARIABLE WHICH CONTAINS THIS OBJECT AS VALUE. IF SUCH A
        !          19619: *      VARIABLE IS FOUND, ITS NAME IS PRINTED, ELSE THE VALUE
        !          19620: *      OF THE OBJECT (AS PRINTED BY PRTVL) IS USED INSTEAD.
        !          19621: *
        !          19622: *      FIRST WE POINT TO THE PARENT TBBLK IF THIS IS THE CASE OF
        !          19623: *      A TABLE ELEMENT. TO DO THIS, CHASE DOWN THE TRNXT CHAIN.
        !          19624: *
        !          19625: {PRN03{BNE{(R10){#B$TET{PRN04{JUMP IF WE GOT THERE (OR NOT TE)
        !          19626: {{MOV{4*TENXT(R10){R10{{ELSE MOVE OUT ON CHAIN
        !          19627: {{BRN{PRN03{{{AND LOOP BACK
        !          19628: *
        !          19629: *      NOW WE ARE READY FOR THE SEARCH. TO SPEED THINGS UP IN
        !          19630: *      THE CASE OF CALLS FROM DUMP WHERE THE SAME NAME BASE
        !          19631: *      WILL OCCUR REPEATEDLY WHILE DUMPING AN ARRAY OR TABLE,
        !          19632: *      WE REMEMBER THE LAST VRBLK POINTER FOUND IN PRNMV. SO
        !          19633: *      FIRST CHECK TO SEE IF WE HAVE THIS ONE AGAIN.
        !          19634: *
        !          19635: {PRN04{MOV{PRNMV{R9{{POINT TO VRBLK WE FOUND LAST TIME
        !          19636: {{MOV{HSHTB{R6{{POINT TO HASH TABLE IN CASE NOT
        !          19637: {{BRN{PRN07{{{JUMP INTO SEARCH FOR SPECIAL CHECK
        !          19638: *
        !          19639: *      LOOP THROUGH HASH SLOTS
        !          19640: *
        !          19641: {PRN05{MOV{R6{R9{{COPY SLOT POINTER
        !          19642: {{ICA{R6{{{BUMP SLOT POINTER
        !          19643: {{SUB{#4*VRNXT{R9{{INTRODUCE STANDARD VRBLK OFFSET
        !          19644: *
        !          19645: *      LOOP THROUGH VRBLKS ON ONE HASH CHAIN
        !          19646: *
        !          19647: {PRN06{MOV{4*VRNXT(R9){R9{{POINT TO NEXT VRBLK ON HASH CHAIN
        !          19648: *
        !          19649: *      MERGE HERE FIRST TIME TO CHECK BLOCK WE FOUND LAST TIME
        !          19650: *
        !          19651: {PRN07{MOV{R9{R8{{COPY VRBLK POINTER
        !          19652: {{BZE{R8{PRN09{{JUMP IF CHAIN END (OR PRNMV ZERO)
        !          19653: {{EJC{{{{
        !          19654: *
        !          19655: *      PRTNM (CONTINUED)
        !          19656: *
        !          19657: *      LOOP TO FIND VALUE (CHASE DOWN POSSIBLE TRBLK CHAIN)
        !          19658: *
        !          19659: {PRN08{MOV{4*VRVAL(R9){R9{{LOAD VALUE
        !          19660: {{BEQ{(R9){#B$TRT{PRN08{LOOP IF THAT WAS A TRBLK
        !          19661: *
        !          19662: *      NOW WE HAVE THE VALUE, IS THIS THE BLOCK WE WANT
        !          19663: *
        !          19664: {{BEQ{R9{R10{PRN10{JUMP IF THIS MATCHES THE NAME BASE
        !          19665: {{MOV{R8{R9{{ELSE POINT BACK TO THAT VRBLK
        !          19666: {{BRN{PRN06{{{AND LOOP BACK
        !          19667: *
        !          19668: *      HERE TO MOVE TO NEXT HASH SLOT
        !          19669: *
        !          19670: {PRN09{BLT{R6{HSHTE{PRN05{LOOP BACK IF MORE TO GO
        !          19671: {{MOV{R10{R9{{ELSE NOT FOUND, COPY VALUE POINTER
        !          19672: {{JSR{PRTVL{{{PRINT VALUE
        !          19673: {{BRN{PRN11{{{AND MERGE AHEAD
        !          19674: *
        !          19675: *      HERE WHEN WE FIND A MATCHING ENTRY
        !          19676: *
        !          19677: {PRN10{MOV{R8{R9{{COPY VRBLK POINTER
        !          19678: {{MOV{R9{PRNMV{{SAVE FOR NEXT TIME IN
        !          19679: {{JSR{PRTVN{{{PRINT VARIABLE NAME
        !          19680: *
        !          19681: *      MERGE HERE IF NO ENTRY FOUND
        !          19682: *
        !          19683: {PRN11{MOV{(R10){R8{{LOAD FIRST WORD OF NAME BASE
        !          19684: {{BNE{R8{#B$PDT{PRN13{JUMP IF NOT PROGRAM DEFINED
        !          19685: *
        !          19686: *      FOR PROGRAM DEFINED DATATYPE, ADD RIGHT PAREN AND EXIT
        !          19687: *
        !          19688: {{MOV{#CH$RP{R6{{LOAD RIGHT PAREN, MERGE
        !          19689: *
        !          19690: *      MERGE HERE TO PRINT FINAL RIGHT PAREN OR BRACKET
        !          19691: *
        !          19692: {PRN12{JSR{PRTCH{{{PRINT FINAL CHARACTER
        !          19693: {{MOV{R7{R6{{RESTORE NAME OFFSET
        !          19694: {{BRN{PRN01{{{MERGE BACK TO EXIT
        !          19695: {{EJC{{{{
        !          19696: *
        !          19697: *      PRTNM (CONTINUED)
        !          19698: *
        !          19699: *      HERE FOR ARRAY OR TABLE
        !          19700: *
        !          19701: {PRN13{MOV{#CH$BB{R6{{LOAD LEFT BRACKET
        !          19702: {{JSR{PRTCH{{{AND PRINT IT
        !          19703: {{MOV{(SP){R10{{RESTORE BLOCK POINTER
        !          19704: {{MOV{(R10){R8{{LOAD TYPE WORD AGAIN
        !          19705: {{BNE{R8{#B$TET{PRN15{JUMP IF NOT TABLE
        !          19706: *
        !          19707: *      HERE FOR TABLE, PRINT SUBSCRIPT VALUE
        !          19708: *
        !          19709: {{MOV{4*TESUB(R10){R9{{LOAD SUBSCRIPT VALUE
        !          19710: {{MOV{R7{R10{{SAVE NAME OFFSET
        !          19711: {{JSR{PRTVL{{{PRINT SUBSCRIPT VALUE
        !          19712: {{MOV{R10{R7{{RESTORE NAME OFFSET
        !          19713: *
        !          19714: *      MERGE HERE FROM ARRAY CASE TO PRINT RIGHT BRACKET
        !          19715: *
        !          19716: {PRN14{MOV{#CH$RB{R6{{LOAD RIGHT BRACKET
        !          19717: {{BRN{PRN12{{{MERGE BACK TO PRINT IT
        !          19718: *
        !          19719: *      HERE FOR ARRAY OR VECTOR, TO PRINT SUBSCRIPT(S)
        !          19720: *
        !          19721: {PRN15{MOV{R7{R6{{COPY NAME OFFSET
        !          19722: {{BTW{R6{{{CONVERT TO WORDS
        !          19723: {{BEQ{R8{#B$ART{PRN16{JUMP IF ARBLK
        !          19724: *
        !          19725: *      HERE FOR VECTOR
        !          19726: *
        !          19727: {{SUB{#VCVLB{R6{{ADJUST FOR STANDARD FIELDS
        !          19728: {{MTI{R6{{{MOVE TO INTEGER ACCUM
        !          19729: {{JSR{PRTIN{{{PRINT LINEAR SUBSCRIPT
        !          19730: {{BRN{PRN14{{{MERGE BACK FOR RIGHT BRACKET
        !          19731: {{EJC{{{{
        !          19732: *
        !          19733: *      PRTNM (CONTINUED)
        !          19734: *
        !          19735: *      HERE FOR ARRAY. FIRST CALCULATE ABSOLUTE SUBSCRIPT
        !          19736: *      OFFSETS BY SUCCESSIVE DIVISIONS BY THE DIMENSION VALUES.
        !          19737: *      THIS MUST BE DONE RIGHT TO LEFT SINCE THE ELEMENTS ARE
        !          19738: *      STORED ROW-WISE. THE SUBSCRIPTS ARE STACKED AS INTEGERS.
        !          19739: *
        !          19740: {PRN16{MOV{4*AROFS(R10){R8{{LOAD LENGTH OF BOUNDS INFO
        !          19741: {{ICA{R8{{{ADJUST FOR ARPRO FIELD
        !          19742: {{BTW{R8{{{CONVERT TO WORDS
        !          19743: {{SUB{R8{R6{{GET LINEAR ZERO-ORIGIN SUBSCRIPT
        !          19744: {{MTI{R6{{{GET INTEGER VALUE
        !          19745: {{LCT{R6{4*ARNDM(R10){{SET NUM OF DIMENSIONS AS LOOP COUNT
        !          19746: {{ADD{4*AROFS(R10){R10{{POINT PAST BOUNDS INFORMATION
        !          19747: {{SUB{#4*ARLBD{R10{{SET OK OFFSET FOR PROPER PTR LATER
        !          19748: *
        !          19749: *      LOOP TO STACK SUBSCRIPT OFFSETS
        !          19750: *
        !          19751: {PRN17{SUB{#4*ARDMS{R10{{POINT TO NEXT SET OF BOUNDS
        !          19752: {{STI{PRNSI{{{SAVE CURRENT OFFSET
        !          19753: {{RMI{4*ARDIM(R10){{{GET REMAINDER ON DIVIDING BY DIMENS
        !          19754: {{MFI{-(SP){{{STORE ON STACK (ONE WORD)
        !          19755: {{LDI{PRNSI{{{RELOAD ARGUMENT
        !          19756: {{DVI{4*ARDIM(R10){{{DIVIDE TO GET QUOTIENT
        !          19757: {{BCT{R6{PRN17{{LOOP TILL ALL STACKED
        !          19758: {{ZER{R9{{{SET OFFSET TO FIRST SET OF BOUNDS
        !          19759: {{LCT{R7{4*ARNDM(R10){{LOAD COUNT OF DIMS TO CONTROL LOOP
        !          19760: {{BRN{PRN19{{{JUMP INTO PRINT LOOP
        !          19761: *
        !          19762: *      LOOP TO PRINT SUBSCRIPTS FROM STACK ADJUSTING BY ADDING
        !          19763: *      THE APPROPRIATE LOW BOUND VALUE FROM THE ARBLK
        !          19764: *
        !          19765: {PRN18{MOV{#CH$CM{R6{{LOAD A COMMA
        !          19766: {{JSR{PRTCH{{{PRINT IT
        !          19767: *
        !          19768: *      MERGE HERE FIRST TIME IN (NO COMMA REQUIRED)
        !          19769: *
        !          19770: {PRN19{MTI{(SP)+{{{LOAD SUBSCRIPT OFFSET AS INTEGER
        !          19771: {{ADD{R9{R10{{POINT TO CURRENT LBD
        !          19772: {{ADI{4*ARLBD(R10){{{ADD LBD TO GET SIGNED SUBSCRIPT
        !          19773: {{SUB{R9{R10{{POINT BACK TO START OF ARBLK
        !          19774: {{JSR{PRTIN{{{PRINT SUBSCRIPT
        !          19775: {{ADD{#4*ARDMS{R9{{BUMP OFFSET TO NEXT BOUNDS
        !          19776: {{BCT{R7{PRN18{{LOOP BACK TILL ALL PRINTED
        !          19777: {{BRN{PRN14{{{MERGE BACK TO PRINT RIGHT BRACKET
        !          19778: {{ENP{{{{END PROCEDURE PRTNM
        !          19779: {{EJC{{{{
        !          19780: *
        !          19781: *      PRTNV -- PRINT NAME VALUE
        !          19782: *
        !          19783: *      PRTNV IS USED BY THE TRACE AND DUMP ROUTINES TO PRINT
        !          19784: *      A LINE OF THE FORM
        !          19785: *
        !          19786: *      NAME = VALUE
        !          19787: *
        !          19788: *      NOTE THAT THE NAME INVOLVED CAN NEVER BE A PSEUDO-VAR
        !          19789: *
        !          19790: *      (XL)                  NAME BASE
        !          19791: *      (WA)                  NAME OFFSET
        !          19792: *      JSR  PRTNV            CALL TO PRINT NAME = VALUE
        !          19793: *      (WB,WC,RA)            DESTROYED
        !          19794: *
        !          19795: {PRTNV{PRC{E{0{{ENTRY POINT
        !          19796: {{JSR{PRTNM{{{PRINT ARGUMENT NAME
        !          19797: {{MOV{R9{-(SP){{SAVE ENTRY XR
        !          19798: {{MOV{R6{-(SP){{SAVE NAME OFFSET (COLLECTABLE)
        !          19799: {{MOV{#TMBEB{R9{{POINT TO BLANK EQUAL BLANK
        !          19800: {{JSR{PRTST{{{PRINT IT
        !          19801: {{MOV{R10{R9{{COPY NAME BASE
        !          19802: {{ADD{R6{R9{{POINT TO VALUE
        !          19803: {{MOV{(R9){R9{{LOAD VALUE POINTER
        !          19804: {{JSR{PRTVL{{{PRINT VALUE
        !          19805: {{JSR{PRTNL{{{TERMINATE LINE
        !          19806: {{MOV{(SP)+{R6{{RESTORE NAME OFFSET
        !          19807: {{MOV{(SP)+{R9{{RESTORE ENTRY XR
        !          19808: {{EXI{{{{RETURN TO CALLER
        !          19809: {{ENP{{{{END PROCEDURE PRTNV
        !          19810: {{EJC{{{{
        !          19811: *
        !          19812: *      PRTPG  -- PRINT A PAGE THROW
        !          19813: *
        !          19814: *      PRINTS A PAGE THROW OR A FEW BLANK LINES ON THE STANDARD
        !          19815: *      LISTING CHANNEL DEPENDING ON THE LISTING OPTIONS CHOSEN.
        !          19816: *
        !          19817: *      JSR  PRTPG            CALL FOR PAGE EJECT
        !          19818: *
        !          19819: {PRTPG{PRC{E{0{{ENTRY POINT
        !          19820: {{BEQ{STAGE{#STGXT{PRP01{JUMP IF EXECUTION TIME
        !          19821: {{BZE{LSTLC{PRP06{{RETURN IF TOP OF PAGE ALREADY
        !          19822: {{ZER{LSTLC{{{CLEAR LINE COUNT
        !          19823: *
        !          19824: *      CHECK TYPE OF LISTING
        !          19825: *
        !          19826: {PRP01{MOV{R9{-(SP){{PRESERVE XR
        !          19827: {{BNZ{PRSTD{PRP02{{EJECT IF FLAG SET
        !          19828: {{BNZ{PRICH{PRP03{{JUMP IF INTERACTIVE LISTING CHANNEL
        !          19829: {{BZE{PRECL{PRP03{{JUMP IF COMPACT LISTING
        !          19830: *
        !          19831: *      PERFORM AN EJECT
        !          19832: *
        !          19833: {PRP02{JSR{SYSEP{{{EJECT
        !          19834: {{BRN{PRP04{{{MERGE
        !          19835: *
        !          19836: *      COMPACT OR INTERACTIVE CHANNEL LISTING. CANT PRINT
        !          19837: *      BLANKS UNTIL CHECK MADE FOR HEADERS PRINTED AND FLAG SET.
        !          19838: *
        !          19839: *
        !          19840: {PRP03{MOV{HEADP{R9{{REMEMBER HEADP
        !          19841: {{MNZ{HEADP{{{SET TO AVOID REPEATED PRTPG CALLS
        !          19842: {{JSR{PRTNL{{{PRINT BLANK LINE
        !          19843: {{JSR{PRTNL{{{PRINT BLANK LINE
        !          19844: {{JSR{PRTNL{{{PRINT BLANK LINE
        !          19845: {{MOV{#NUM03{LSTLC{{COUNT BLANK LINES
        !          19846: {{MOV{R9{HEADP{{RESTORE HEADER FLAG
        !          19847: {{EJC{{{{
        !          19848: *
        !          19849: *      PRPTG (CONTINUED)
        !          19850: *
        !          19851: *      PRINT THE HEADING
        !          19852: *
        !          19853: {PRP04{BNZ{HEADP{PRP05{{JUMP IF HEADER LISTED
        !          19854: {{MNZ{HEADP{{{MARK HEADERS PRINTED
        !          19855: {{MOV{R10{-(SP){{KEEP XL
        !          19856: {{MOV{#HEADR{R9{{POINT TO LISTING HEADER
        !          19857: {{JSR{PRTST{{{PLACE IT
        !          19858: {{JSR{SYSID{{{GET SYSTEM IDENTIFICATION
        !          19859: {{JSR{PRTST{{{APPEND EXTRA CHARS
        !          19860: {{JSR{PRTNL{{{PRINT IT
        !          19861: {{MOV{R10{R9{{EXTRA HEADER LINE
        !          19862: {{JSR{PRTST{{{PLACE IT
        !          19863: {{JSR{PRTNL{{{PRINT IT
        !          19864: {{JSR{PRTNL{{{PRINT A BLANK
        !          19865: {{JSR{PRTNL{{{AND ANOTHER
        !          19866: {{ADD{#NUM04{LSTLC{{FOUR HEADER LINES PRINTED
        !          19867: {{MOV{(SP)+{R10{{RESTORE XL
        !          19868: *
        !          19869: *      MERGE IF HEADER NOT PRINTED
        !          19870: *
        !          19871: {PRP05{MOV{(SP)+{R9{{RESTORE XR
        !          19872: *
        !          19873: *      RETURN
        !          19874: *
        !          19875: {PRP06{EXI{{{{RETURN
        !          19876: {{ENP{{{{END PROCEDURE PRTPG
        !          19877: {{EJC{{{{
        !          19878: *
        !          19879: *      PRTPS - PRINT PAGE WITH TEST FOR STANDARD LISTING OPTION
        !          19880: *
        !          19881: *      IF THE STANDARD LISTING OPTION IS SELECTED, INSIST THAT
        !          19882: *      AN EJECT BE DONE
        !          19883: *
        !          19884: *      JSR  PRTPS            CALL FOR EJECT
        !          19885: *
        !          19886: {PRTPS{PRC{E{0{{ENTRY POINT
        !          19887: {{MOV{PRSTO{PRSTD{{COPY OPTION FLAG
        !          19888: {{JSR{PRTPG{{{PRINT PAGE
        !          19889: {{ZER{PRSTD{{{CLEAR FLAG
        !          19890: {{EXI{{{{RETURN
        !          19891: {{ENP{{{{END PROCEDURE PRTPS
        !          19892: {{EJC{{{{
        !          19893: *
        !          19894: *      PRTSN -- PRINT STATEMENT NUMBER
        !          19895: *
        !          19896: *      PRTSN IS USED TO INITIATE A PRINT TRACE LINE BY PRINTING
        !          19897: *      ASTERISKS AND THE CURRENT STATEMENT NUMBER. THE ACTUAL
        !          19898: *      FORMAT OF THE OUTPUT GENERATED IS.
        !          19899: *
        !          19900: *      ***NNNNN**** III.....IIII
        !          19901: *
        !          19902: *      NNNNN IS THE STATEMENT NUMBER WITH LEADING ZEROS REPLACED
        !          19903: *      BY ASTERISKS (E.G. *******9****)
        !          19904: *
        !          19905: *      III...III REPRESENTS A VARIABLE LENGTH OUTPUT CONSISTING
        !          19906: *      OF A NUMBER OF LETTER I CHARACTERS EQUAL TO FNCLEVEL.
        !          19907: *
        !          19908: *      JSR  PRTSN            CALL TO PRINT STATEMENT NUMBER
        !          19909: *      (WC)                  DESTROYED
        !          19910: *
        !          19911: {PRTSN{PRC{E{0{{ENTRY POINT
        !          19912: {{MOV{R9{-(SP){{SAVE ENTRY XR
        !          19913: {{MOV{R6{PRSNA{{SAVE ENTRY WA
        !          19914: {{MOV{#TMASB{R9{{POINT TO ASTERISKS
        !          19915: {{JSR{PRTST{{{PRINT ASTERISKS
        !          19916: {{MOV{#NUM04{PROFS{{POINT INTO MIDDLE OF ASTERISKS
        !          19917: {{MTI{KVSTN{{{LOAD STATEMENT NUMBER AS INTEGER
        !          19918: {{JSR{PRTIN{{{PRINT INTEGER STATEMENT NUMBER
        !          19919: {{MOV{#PRSNF{PROFS{{POINT PAST ASTERISKS PLUS BLANK
        !          19920: {{MOV{KVFNC{R9{{GET FNCLEVEL
        !          19921: {{MOV{#CH$LI{R6{{SET LETTER I
        !          19922: *
        !          19923: *      LOOP TO GENERATE LETTER I FNCLEVEL TIMES
        !          19924: *
        !          19925: {PRSN1{BZE{R9{PRSN2{{JUMP IF ALL SET
        !          19926: {{JSR{PRTCH{{{ELSE PRINT AN I
        !          19927: {{DCV{R9{{{DECREMENT COUNTER
        !          19928: {{BRN{PRSN1{{{LOOP BACK
        !          19929: *
        !          19930: *      MERRE WITH ALL LETTER I CHARACTERS GENERATED
        !          19931: *
        !          19932: {PRSN2{MOV{#CH$BL{R6{{GET BLANK
        !          19933: {{JSR{PRTCH{{{PRINT BLANK
        !          19934: {{MOV{PRSNA{R6{{RESTORE ENTRY WA
        !          19935: {{MOV{(SP)+{R9{{RESTORE ENTRY XR
        !          19936: {{EXI{{{{RETURN TO PRTSN CALLER
        !          19937: {{ENP{{{{END PROCEDURE PRTSN
        !          19938: {{EJC{{{{
        !          19939: *
        !          19940: *      PRTST -- PRINT STRING
        !          19941: *
        !          19942: *      PRTST PLACES A STRING OF CHARACTERS IN THE PRINT BUFFER
        !          19943: *
        !          19944: *      SEE PRTNL FOR GLOBAL LOCATIONS USED
        !          19945: *
        !          19946: *      NOTE THAT THE FIRST WORD OF THE BLOCK (NORMALLY B$SCL)
        !          19947: *      IS NOT USED AND NEED NOT BE SET CORRECTLY (SEE PRTVN)
        !          19948: *
        !          19949: *      (XR)                  STRING TO BE PRINTED
        !          19950: *      JSR  PRTST            CALL TO PRINT STRING
        !          19951: *      (PROFS)               UPDATED PAST CHARS PLACED
        !          19952: *
        !          19953: {PRTST{PRC{R{0{{ENTRY POINT
        !          19954: {{BNZ{HEADP{PRST0{{WERE HEADERS PRINTED
        !          19955: {{JSR{PRTPS{{{NO - PRINT THEM
        !          19956: *
        !          19957: *      CALL SYSPR
        !          19958: *
        !          19959: {PRST0{MOV{R6{PRSVA{{SAVE WA
        !          19960: {{MOV{R7{PRSVB{{SAVE WB
        !          19961: {{ZER{R7{{{SET CHARS PRINTED COUNT TO ZERO
        !          19962: *
        !          19963: *      LOOP TO PRINT SUCCESSIVE LINES FOR LONG STRING
        !          19964: *
        !          19965: {PRST1{MOV{4*SCLEN(R9){R6{{LOAD STRING LENGTH
        !          19966: {{SUB{R7{R6{{SUBTRACT COUNT OF CHARS ALREADY OUT
        !          19967: {{BZE{R6{PRST4{{JUMP TO EXIT IF NONE LEFT
        !          19968: {{MOV{R10{-(SP){{ELSE STACK ENTRY XL
        !          19969: {{MOV{R9{-(SP){{SAVE ARGUMENT
        !          19970: {{MOV{R9{R10{{COPY FOR EVENTUAL MOVE
        !          19971: {{MOV{PRLEN{R9{{LOAD PRINT BUFFER LENGTH
        !          19972: {{SUB{PROFS{R9{{GET CHARS LEFT IN PRINT BUFFER
        !          19973: {{BNZ{R9{PRST2{{SKIP IF ROOM LEFT ON THIS LINE
        !          19974: {{JSR{PRTNL{{{ELSE PRINT THIS LINE
        !          19975: {{MOV{PRLEN{R9{{AND SET FULL WIDTH AVAILABLE
        !          19976: {{EJC{{{{
        !          19977: *
        !          19978: *      PRTST (CONTINUED)
        !          19979: *
        !          19980: *      HERE WITH CHARS TO PRINT AND SOME ROOM IN BUFFER
        !          19981: *
        !          19982: {PRST2{BLO{R6{R9{PRST3{JUMP IF ROOM FOR REST OF STRING
        !          19983: {{MOV{R9{R6{{ELSE SET TO FILL LINE
        !          19984: *
        !          19985: *      MERGE HERE WITH CHARACTER COUNT IN WA
        !          19986: *
        !          19987: {PRST3{MOV{PRBUF{R9{{POINT TO PRINT BUFFER
        !          19988: {{PLC{R10{R7{{POINT TO LOCATION IN STRING
        !          19989: {{PSC{R9{PROFS{{POINT TO LOCATION IN BUFFER
        !          19990: {{ADD{R6{R7{{BUMP STRING CHARS COUNT
        !          19991: {{ADD{R6{PROFS{{BUMP BUFFER POINTER
        !          19992: {{MOV{R7{PRSVC{{PRESERVE CHAR COUNTER
        !          19993: {{MVC{{{{MOVE CHARACTERS TO BUFFER
        !          19994: {{MOV{PRSVC{R7{{RECOVER CHAR COUNTER
        !          19995: {{MOV{(SP)+{R9{{RESTORE ARGUMENT POINTER
        !          19996: {{MOV{(SP)+{R10{{RESTORE ENTRY XL
        !          19997: {{BRN{PRST1{{{LOOP BACK TO TEST FOR MORE
        !          19998: *
        !          19999: *      HERE TO EXIT AFTER PRINTING STRING
        !          20000: *
        !          20001: {PRST4{MOV{PRSVB{R7{{RESTORE ENTRY WB
        !          20002: {{MOV{PRSVA{R6{{RESTORE ENTRY WA
        !          20003: {{EXI{{{{RETURN TO PRTST CALLER
        !          20004: {{ENP{{{{END PROCEDURE PRTST
        !          20005: {{EJC{{{{
        !          20006: *
        !          20007: *      PRTTR -- PRINT TO TERMINAL
        !          20008: *
        !          20009: *      CALLED TO PRINT CONTENTS OF STANDARD PRINT BUFFER TO
        !          20010: *      ONLINE TERMINAL. CLEARS BUFFER DOWN AND RESETS PROFS.
        !          20011: *
        !          20012: *      JSR  PRTTR            CALL FOR PRINT
        !          20013: *      (WA,WB)               DESTROYED
        !          20014: *
        !          20015: {PRTTR{PRC{E{0{{ENTRY POINT
        !          20016: {{MOV{R9{-(SP){{SAVE XR
        !          20017: {{JSR{PRTIC{{{PRINT BUFFER CONTENTS
        !          20018: {{MOV{PRBUF{R9{{POINT TO PRINT BFR TO CLEAR IT
        !          20019: {{LCT{R6{PRLNW{{GET BUFFER LENGTH
        !          20020: {{ADD{#4*SCHAR{R9{{POINT PAST SCBLK HEADER
        !          20021: {{MOV{NULLW{R7{{GET BLANKS
        !          20022: *
        !          20023: *      LOOP TO CLEAR BUFFER
        !          20024: *
        !          20025: {PRTT1{MOV{R7{(R9)+{{CLEAR A WORD
        !          20026: {{BCT{R6{PRTT1{{LOOP
        !          20027: {{ZER{PROFS{{{RESET PROFS
        !          20028: {{MOV{(SP)+{R9{{RESTORE XR
        !          20029: {{EXI{{{{RETURN
        !          20030: {{ENP{{{{END PROCEDURE PRTTR
        !          20031: {{EJC{{{{
        !          20032: *
        !          20033: *      PRTVL -- PRINT A VALUE
        !          20034: *
        !          20035: *      PRTVL PLACES AN APPROPRIATE CHARACTER REPRESENTATION OF
        !          20036: *      A DATA VALUE IN THE PRINT BUFFER FOR DUMP/TRACE USE.
        !          20037: *
        !          20038: *      (XR)                  VALUE TO BE PRINTED
        !          20039: *      JSR  PRTVL            CALL TO PRINT VALUE
        !          20040: *      (WA,WB,WC,RA)         DESTROYED
        !          20041: *
        !          20042: {PRTVL{PRC{R{0{{ENTRY POINT, RECURSIVE
        !          20043: {{MOV{R10{-(SP){{SAVE ENTRY XL
        !          20044: {{MOV{R9{-(SP){{SAVE ARGUMENT
        !          20045: {{CHK{{{{CHECK FOR STACK OVERFLOW
        !          20046: *
        !          20047: *      LOOP BACK HERE AFTER FINDING A TRAP BLOCK (TRBLK)
        !          20048: *
        !          20049: {PRV01{MOV{4*IDVAL(R9){PRVSI{{COPY IDVAL (IF ANY)
        !          20050: {{MOV{(R9){R10{{LOAD FIRST WORD OF BLOCK
        !          20051: {{LEI{R10{{{LOAD ENTRY POINT ID
        !          20052: {{BSW{R10{BL$$T{PRV02{SWITCH ON BLOCK TYPE
        !          20053: {{IFF{BL$AR{PRV05{{ARBLK
        !          20054: {{IFF{BL$BC{PRV15{{BCBLK
        !          20055: {{IFF{DUMMY{PRV02{{
        !          20056: {{IFF{DUMMY{PRV02{{
        !          20057: {{IFF{BL$IC{PRV08{{ICBLK
        !          20058: {{IFF{BL$NM{PRV09{{NMBLK
        !          20059: {{IFF{DUMMY{PRV02{{
        !          20060: {{IFF{DUMMY{PRV02{{
        !          20061: {{IFF{DUMMY{PRV02{{
        !          20062: {{IFF{BL$RC{PRV08{{RCBLK
        !          20063: {{IFF{BL$SC{PRV11{{SCBLK
        !          20064: {{IFF{BL$SE{PRV12{{SEBLK
        !          20065: {{IFF{BL$TB{PRV13{{TBBLK
        !          20066: {{IFF{BL$VC{PRV13{{VCBLK
        !          20067: {{IFF{DUMMY{PRV02{{
        !          20068: {{IFF{DUMMY{PRV02{{
        !          20069: {{IFF{BL$PD{PRV10{{PDBLK
        !          20070: {{IFF{BL$TR{PRV04{{TRBLK
        !          20071: {{ESW{{{{END OF SWITCH ON BLOCK TYPE
        !          20072: *
        !          20073: *      HERE FOR BLOCKS FOR WHICH WE JUST PRINT DATATYPE NAME
        !          20074: *
        !          20075: {PRV02{JSR{DTYPE{{{GET DATATYPE NAME
        !          20076: {{JSR{PRTST{{{PRINT DATATYPE NAME
        !          20077: *
        !          20078: *      COMMON EXIT POINT
        !          20079: *
        !          20080: {PRV03{MOV{(SP)+{R9{{RELOAD ARGUMENT
        !          20081: {{MOV{(SP)+{R10{{RESTORE XL
        !          20082: {{EXI{{{{RETURN TO PRTVL CALLER
        !          20083: *
        !          20084: *      HERE FOR TRBLK
        !          20085: *
        !          20086: {PRV04{MOV{4*TRVAL(R9){R9{{LOAD REAL VALUE
        !          20087: {{BRN{PRV01{{{AND LOOP BACK
        !          20088: {{EJC{{{{
        !          20089: *
        !          20090: *      PRTVL (CONTINUED)
        !          20091: *
        !          20092: *      HERE FOR ARRAY (ARBLK)
        !          20093: *
        !          20094: *      PRINT ARRAY ( PROTOTYPE ) BLANK NUMBER IDVAL
        !          20095: *
        !          20096: {PRV05{MOV{R9{R10{{PRESERVE ARGUMENT
        !          20097: {{MOV{#SCARR{R9{{POINT TO DATATYPE NAME (ARRAY)
        !          20098: {{JSR{PRTST{{{PRINT IT
        !          20099: {{MOV{#CH$PP{R6{{LOAD LEFT PAREN
        !          20100: {{JSR{PRTCH{{{PRINT LEFT PAREN
        !          20101: {{ADD{4*AROFS(R10){R10{{POINT TO PROTOTYPE
        !          20102: {{MOV{(R10){R9{{LOAD PROTOTYPE
        !          20103: {{JSR{PRTST{{{PRINT PROTOTYPE
        !          20104: *
        !          20105: *      VCBLK, TBBLK, BCBLK MERGE HERE FOR ) BLANK NUMBER IDVAL
        !          20106: *
        !          20107: {PRV06{MOV{#CH$RP{R6{{LOAD RIGHT PAREN
        !          20108: {{JSR{PRTCH{{{PRINT RIGHT PAREN
        !          20109: *
        !          20110: *      PDBLK MERGES HERE TO PRINT BLANK NUMBER IDVAL
        !          20111: *
        !          20112: {PRV07{MOV{#CH$BL{R6{{LOAD BLANK
        !          20113: {{JSR{PRTCH{{{PRINT IT
        !          20114: {{MOV{#CH$NM{R6{{LOAD NUMBER SIGN
        !          20115: {{JSR{PRTCH{{{PRINT IT
        !          20116: {{MTI{PRVSI{{{GET IDVAL
        !          20117: {{JSR{PRTIN{{{PRINT ID NUMBER
        !          20118: {{BRN{PRV03{{{BACK TO EXIT
        !          20119: *
        !          20120: *      HERE FOR INTEGER (ICBLK), REAL (RCBLK)
        !          20121: *
        !          20122: *      PRINT CHARACTER REPRESENTATION OF VALUE
        !          20123: *
        !          20124: {PRV08{MOV{R9{-(SP){{STACK ARGUMENT FOR GTSTG
        !          20125: {{JSR{GTSTG{{{CONVERT TO STRING
        !          20126: {{PPM{{{{ERROR RETURN IS IMPOSSIBLE
        !          20127: {{JSR{PRTST{{{PRINT THE STRING
        !          20128: {{MOV{R9{DNAMP{{DELETE GARBAGE STRING FROM STORAGE
        !          20129: {{BRN{PRV03{{{BACK TO EXIT
        !          20130: {{EJC{{{{
        !          20131: *
        !          20132: *      PRTVL (CONTINUED)
        !          20133: *
        !          20134: *      NAME (NMBLK)
        !          20135: *
        !          20136: *      FOR PSEUDO-VARIABLE, JUST PRINT DATATYPE NAME (NAME)
        !          20137: *      FOR ALL OTHER NAMES, PRINT DOT FOLLOWED BY NAME REP
        !          20138: *
        !          20139: {PRV09{MOV{4*NMBAS(R9){R10{{LOAD NAME BASE
        !          20140: {{MOV{(R10){R6{{LOAD FIRST WORD OF BLOCK
        !          20141: {{BEQ{R6{#B$KVT{PRV02{JUST PRINT NAME IF KEYWORD
        !          20142: {{BEQ{R6{#B$EVT{PRV02{JUST PRINT NAME IF EXPRESSION VAR
        !          20143: {{MOV{#CH$DT{R6{{ELSE GET DOT
        !          20144: {{JSR{PRTCH{{{AND PRINT IT
        !          20145: {{MOV{4*NMOFS(R9){R6{{LOAD NAME OFFSET
        !          20146: {{JSR{PRTNM{{{PRINT NAME
        !          20147: {{BRN{PRV03{{{BACK TO EXIT
        !          20148: *
        !          20149: *      PROGRAM DATATYPE (PDBLK)
        !          20150: *
        !          20151: *      PRINT DATATYPE NAME CH$BL CH$NM IDVAL
        !          20152: *
        !          20153: {PRV10{JSR{DTYPE{{{GET DATATYPE NAME
        !          20154: {{JSR{PRTST{{{PRINT DATATYPE NAME
        !          20155: {{BRN{PRV07{{{MERGE BACK TO PRINT ID
        !          20156: *
        !          20157: *      HERE FOR STRING (SCBLK)
        !          20158: *
        !          20159: *      PRINT QUOTE STRING-CHARACTERS QUOTE
        !          20160: *
        !          20161: {PRV11{MOV{#CH$SQ{R6{{LOAD SINGLE QUOTE
        !          20162: {{JSR{PRTCH{{{PRINT QUOTE
        !          20163: {{JSR{PRTST{{{PRINT STRING VALUE
        !          20164: {{JSR{PRTCH{{{PRINT ANOTHER QUOTE
        !          20165: {{BRN{PRV03{{{BACK TO EXIT
        !          20166: {{EJC{{{{
        !          20167: *
        !          20168: *      PRTVL (CONTINUED)
        !          20169: *
        !          20170: *      HERE FOR SIMPLE EXPRESSION (SEBLK)
        !          20171: *
        !          20172: *      PRINT ASTERISK VARIABLE-NAME
        !          20173: *
        !          20174: {PRV12{MOV{#CH$AS{R6{{LOAD ASTERISK
        !          20175: {{JSR{PRTCH{{{PRINT ASTERISK
        !          20176: {{MOV{4*SEVAR(R9){R9{{LOAD VARIABLE POINTER
        !          20177: {{JSR{PRTVN{{{PRINT VARIABLE NAME
        !          20178: {{BRN{PRV03{{{JUMP BACK TO EXIT
        !          20179: *
        !          20180: *      HERE FOR TABLE (TBBLK) AND ARRAY (VCBLK)
        !          20181: *
        !          20182: *      PRINT DATATYPE ( PROTOTYPE ) BLANK NUMBER IDVAL
        !          20183: *
        !          20184: {PRV13{MOV{R9{R10{{PRESERVE ARGUMENT
        !          20185: {{JSR{DTYPE{{{GET DATATYPE NAME
        !          20186: {{JSR{PRTST{{{PRINT DATATYPE NAME
        !          20187: {{MOV{#CH$PP{R6{{LOAD LEFT PAREN
        !          20188: {{JSR{PRTCH{{{PRINT LEFT PAREN
        !          20189: {{MOV{4*TBLEN(R10){R6{{LOAD LENGTH OF BLOCK (=VCLEN)
        !          20190: {{BTW{R6{{{CONVERT TO WORD COUNT
        !          20191: {{SUB{#TBSI${R6{{ALLOW FOR STANDARD FIELDS
        !          20192: {{BEQ{(R10){#B$TBT{PRV14{JUMP IF TABLE
        !          20193: {{ADD{#VCTBD{R6{{FOR VCBLK, ADJUST SIZE
        !          20194: *
        !          20195: *      PRINT PROTOTYPE
        !          20196: *
        !          20197: {PRV14{MTI{R6{{{MOVE AS INTEGER
        !          20198: {{JSR{PRTIN{{{PRINT INTEGER PROTOTYPE
        !          20199: {{BRN{PRV06{{{MERGE BACK FOR REST
        !          20200: {{EJC{{{{
        !          20201: *
        !          20202: *      PRTVL (CONTINUED)
        !          20203: *
        !          20204: *      HERE FOR BUFFER (BCBLK)
        !          20205: *
        !          20206: {PRV15{MOV{R9{R10{{PRESERVE ARGUMENT
        !          20207: {{MOV{#SCBUF{R9{{POINT TO DATATYPE NAME (BUFFER)
        !          20208: {{JSR{PRTST{{{PRINT IT
        !          20209: {{MOV{#CH$PP{R6{{LOAD LEFT PAREN
        !          20210: {{JSR{PRTCH{{{PRINT LEFT PAREN
        !          20211: {{MOV{4*BCBUF(R10){R9{{POINT TO BFBLK
        !          20212: {{MTI{4*BFALC(R9){{{LOAD ALLOCATION SIZE
        !          20213: {{JSR{PRTIN{{{PRINT IT
        !          20214: {{MOV{#CH$CM{R6{{LOAD COMMA
        !          20215: {{JSR{PRTCH{{{PRINT IT
        !          20216: {{MTI{4*BCLEN(R10){{{LOAD DEFINED LENGTH
        !          20217: {{JSR{PRTIN{{{PRINT IT
        !          20218: {{BRN{PRV06{{{MERGE TO FINISH UP
        !          20219: {{ENP{{{{END PROCEDURE PRTVL
        !          20220: {{EJC{{{{
        !          20221: *
        !          20222: *      PRTVN -- PRINT NATURAL VARIABLE NAME
        !          20223: *
        !          20224: *      PRTVN PRINTS THE NAME OF A NATURAL VARIABLE
        !          20225: *
        !          20226: *      (XR)                  POINTER TO VRBLK
        !          20227: *      JSR  PRTVN            CALL TO PRINT VARIABLE NAME
        !          20228: *
        !          20229: {PRTVN{PRC{E{0{{ENTRY POINT
        !          20230: {{MOV{R9{-(SP){{STACK VRBLK POINTER
        !          20231: {{ADD{#4*VRSOF{R9{{POINT TO POSSIBLE STRING NAME
        !          20232: {{BNZ{4*SCLEN(R9){PRVN1{{JUMP IF NOT SYSTEM VARIABLE
        !          20233: {{MOV{4*VRSVO(R9){R9{{POINT TO SVBLK WITH NAME
        !          20234: *
        !          20235: *      MERGE HERE WITH DUMMY SCBLK POINTER IN XR
        !          20236: *
        !          20237: {PRVN1{JSR{PRTST{{{PRINT STRING NAME OF VARIABLE
        !          20238: {{MOV{(SP)+{R9{{RESTORE VRBLK POINTER
        !          20239: {{EXI{{{{RETURN TO PRTVN CALLER
        !          20240: {{ENP{{{{END PROCEDURE PRTVN
        !          20241: {{EJC{{{{
        !          20242: *
        !          20243: *      RCBLD -- BUILD A REAL BLOCK
        !          20244: *
        !          20245: *      (RA)                  REAL VALUE FOR RCBLK
        !          20246: *      JSR  RCBLD            CALL TO BUILD REAL BLOCK
        !          20247: *      (XR)                  POINTER TO RESULT RCBLK
        !          20248: *      (WA)                  DESTROYED
        !          20249: *
        !          20250: {RCBLD{PRC{E{0{{ENTRY POINT
        !          20251: {{MOV{DNAMP{R9{{LOAD POINTER TO NEXT AVAILABLE LOC
        !          20252: {{ADD{#4*RCSI${R9{{POINT PAST NEW RCBLK
        !          20253: {{BLO{R9{DNAME{RCBL1{JUMP IF THERE IS ROOM
        !          20254: {{MOV{#4*RCSI${R6{{ELSE LOAD RCBLK LENGTH
        !          20255: {{JSR{ALLOC{{{USE STANDARD ALLOCATOR TO GET BLOCK
        !          20256: {{ADD{R6{R9{{POINT PAST BLOCK TO MERGE
        !          20257: *
        !          20258: *      MERGE HERE WITH XR POINTING PAST THE BLOCK OBTAINED
        !          20259: *
        !          20260: {RCBL1{MOV{R9{DNAMP{{SET NEW POINTER
        !          20261: {{SUB{#4*RCSI${R9{{POINT BACK TO START OF BLOCK
        !          20262: {{MOV{#B$RCL{(R9){{STORE TYPE WORD
        !          20263: {{STR{4*RCVAL(R9){{{STORE REAL VALUE IN RCBLK
        !          20264: {{EXI{{{{RETURN TO RCBLD CALLER
        !          20265: {{ENP{{{{END PROCEDURE RCBLD
        !          20266: {{EJC{{{{
        !          20267: *
        !          20268: *      READR -- READ NEXT SOURCE IMAGE AT COMPILE TIME
        !          20269: *
        !          20270: *      READR IS USED TO READ THE NEXT SOURCE IMAGE. TO PROCESS
        !          20271: *      CONTINUATION CARDS PROPERLY, THE COMPILER MUST READ ONE
        !          20272: *      LINE AHEAD. THUS READR DOES NOT DESTROY THE CURRENT IMAGE
        !          20273: *      SEE ALSO THE NEXTS ROUTINE WHICH ACTUALLY GETS THE IMAGE.
        !          20274: *
        !          20275: *      JSR  READR            CALL TO READ NEXT IMAGE
        !          20276: *      (XR)                  PTR TO NEXT IMAGE (0 IF NONE)
        !          20277: *      (R$CNI)               COPY OF POINTER
        !          20278: *      (WA,WB,WC,XL)         DESTROYED
        !          20279: *
        !          20280: {READR{PRC{E{0{{ENTRY POINT
        !          20281: {{MOV{R$CNI{R9{{GET PTR TO NEXT IMAGE
        !          20282: {{BNZ{R9{READ3{{EXIT IF ALREADY READ
        !          20283: {{BNE{STAGE{#STGIC{READ3{EXIT IF NOT INITIAL COMPILE
        !          20284: {{MOV{CSWIN{R6{{MAX READ LENGTH
        !          20285: {{JSR{ALOCS{{{ALLOCATE BUFFER
        !          20286: {{JSR{SYSRD{{{READ INPUT IMAGE
        !          20287: {{PPM{READ4{{{JUMP IF END OF FILE
        !          20288: {{MNZ{R7{{{SET TRIMR TO PERFORM TRIM
        !          20289: {{BLE{4*SCLEN(R9){CSWIN{READ1{USE SMALLER OF STRING LNTH ..
        !          20290: {{MOV{CSWIN{4*SCLEN(R9){{... AND XXX OF -INXXX
        !          20291: *
        !          20292: *      PERFORM THE TRIM
        !          20293: *
        !          20294: {READ1{JSR{TRIMR{{{TRIM TRAILING BLANKS
        !          20295: *
        !          20296: *      MERGE HERE AFTER READ
        !          20297: *
        !          20298: {READ2{MOV{R9{R$CNI{{STORE COPY OF POINTER
        !          20299: *
        !          20300: *      MERGE HERE IF NO READ ATTEMPTED
        !          20301: *
        !          20302: {READ3{EXI{{{{RETURN TO READR CALLER
        !          20303: *
        !          20304: *      HERE ON END OF FILE
        !          20305: *
        !          20306: {READ4{MOV{R9{DNAMP{{POP UNUSED SCBLK
        !          20307: {{ZER{R9{{{ZERO PTR AS RESULT
        !          20308: {{BRN{READ2{{{MERGE
        !          20309: {{ENP{{{{END PROCEDURE READR
        !          20310: {{EJC{{{{
        !          20311: *
        !          20312: *      SBSTR -- BUILD A SUBSTRING
        !          20313: *
        !          20314: *      (XL)                  PTR TO SCBLK/BFBLK WITH CHARS
        !          20315: *      (WA)                  NUMBER OF CHARS IN SUBSTRING
        !          20316: *      (WB)                  OFFSET TO FIRST CHAR IN SCBLK
        !          20317: *      JSR  SBSTR            CALL TO BUILD SUBSTRING
        !          20318: *      (XR)                  PTR TO NEW SCBLK WITH SUBSTRING
        !          20319: *      (XL)                  ZERO
        !          20320: *      (WA,WB,WC,XL,IA)      DESTROYED
        !          20321: *
        !          20322: *      NOTE THAT SBSTR IS CALLED WITH A DUMMY STRING POINTER
        !          20323: *      (POINTING INTO A VRBLK OR SVBLK) TO COPY THE NAME OF A
        !          20324: *      VARIABLE AS A STANDARD STRING VALUE.
        !          20325: *
        !          20326: {SBSTR{PRC{E{0{{ENTRY POINT
        !          20327: {{BZE{R6{SBST2{{JUMP IF NULL SUBSTRING
        !          20328: {{JSR{ALOCS{{{ELSE ALLOCATE SCBLK
        !          20329: {{MOV{R8{R6{{MOVE NUMBER OF CHARACTERS
        !          20330: {{MOV{R9{R8{{SAVE PTR TO NEW SCBLK
        !          20331: {{PLC{R10{R7{{PREPARE TO LOAD CHARS FROM OLD BLK
        !          20332: {{PSC{R9{{{PREPARE TO STORE CHARS IN NEW BLK
        !          20333: {{MVC{{{{MOVE CHARACTERS TO NEW STRING
        !          20334: {{MOV{R8{R9{{THEN RESTORE SCBLK POINTER
        !          20335: *
        !          20336: *      RETURN POINT
        !          20337: *
        !          20338: {SBST1{ZER{R10{{{CLEAR GARBAGE POINTER IN XL
        !          20339: {{EXI{{{{RETURN TO SBSTR CALLER
        !          20340: *
        !          20341: *      HERE FOR NULL SUBSTRING
        !          20342: *
        !          20343: {SBST2{MOV{#NULLS{R9{{SET NULL STRING AS RESULT
        !          20344: {{BRN{SBST1{{{RETURN
        !          20345: {{ENP{{{{END PROCEDURE SBSTR
        !          20346: {{EJC{{{{
        !          20347: *
        !          20348: *      SCANE -- SCAN AN ELEMENT
        !          20349: *
        !          20350: *      SCANE IS CALLED AT COMPILE TIME (BY EXPAN ,CMPIL,CNCRD)
        !          20351: *      TO SCAN ONE ELEMENT FROM THE INPUT IMAGE.
        !          20352: *
        !          20353: *      (SCNCC)               NON-ZERO IF CALLED FROM CNCRD
        !          20354: *      JSR  SCANE            CALL TO SCAN ELEMENT
        !          20355: *      (XR)                  RESULT POINTER (SEE BELOW)
        !          20356: *      (XL)                  SYNTAX TYPE CODE (T$XXX)
        !          20357: *
        !          20358: *      THE FOLLOWING GLOBAL LOCATIONS ARE USED.
        !          20359: *
        !          20360: *      R$CIM                 POINTER TO STRING BLOCK (SCBLK)
        !          20361: *                            FOR CURRENT INPUT IMAGE.
        !          20362: *
        !          20363: *      R$CNI                 POINTER TO NEXT INPUT IMAGE STRING
        !          20364: *                            POINTER (ZERO IF NONE).
        !          20365: *
        !          20366: *      R$SCP                 SAVE POINTER (EXIT XR) FROM LAST
        !          20367: *                            CALL IN CASE RESCAN IS SET.
        !          20368: *
        !          20369: *      SCNBL                 THIS LOCATION IS SET NON-ZERO ON
        !          20370: *                            EXIT IF SCANE SCANNED PAST BLANKS
        !          20371: *                            BEFORE LOCATING THE CURRENT ELEMENT
        !          20372: *                            THE END OF A LINE COUNTS AS BLANKS.
        !          20373: *
        !          20374: *      SCNCC                 CNCRD SETS THIS NON-ZERO TO SCAN
        !          20375: *                            CONTROL CARD NAMES AND CLEARS IT
        !          20376: *                            ON RETURN
        !          20377: *
        !          20378: *      SCNIL                 LENGTH OF CURRENT INPUT IMAGE
        !          20379: *
        !          20380: *      SCNGO                 IF SET NON-ZERO ON ENTRY, F AND S
        !          20381: *                            ARE RETURNED AS SEPARATE SYNTAX
        !          20382: *                            TYPES (NOT LETTERS) (GOTO PRO-
        !          20383: *                            CESSING). SCNGO IS RESET ON EXIT.
        !          20384: *
        !          20385: *      SCNPT                 OFFSET TO CURRENT LOC IN R$CIM
        !          20386: *
        !          20387: *      SCNRS                 IF SET NON-ZERO ON ENTRY, SCANE
        !          20388: *                            RETURNS THE SAME RESULT AS ON THE
        !          20389: *                            LAST CALL (RESCAN). SCNRS IS RESET
        !          20390: *                            ON EXIT FROM ANY CALL TO SCANE.
        !          20391: *
        !          20392: *      SCNTP                 SAVE SYNTAX TYPE FROM LAST
        !          20393: *                            CALL (IN CASE RESCAN IS SET).
        !          20394: {{EJC{{{{
        !          20395: *
        !          20396: *      SCANE (CONTINUED)
        !          20397: *
        !          20398: *
        !          20399: *
        !          20400: *      ELEMENT SCANNED       XL        XR
        !          20401: *      ---------------       --        --
        !          20402: *
        !          20403: *      CONTROL CARD NAME     0         POINTER TO SCBLK FOR NAME
        !          20404: *
        !          20405: *      UNARY OPERATOR        T$UOP     PTR TO OPERATOR DVBLK
        !          20406: *
        !          20407: *      LEFT PAREN            T$LPR     T$LPR
        !          20408: *
        !          20409: *      LEFT BRACKET          T$LBR     T$LBR
        !          20410: *
        !          20411: *      COMMA                 T$CMA     T$CMA
        !          20412: *
        !          20413: *      FUNCTION CALL         T$FNC     PTR TO FUNCTION VRBLK
        !          20414: *
        !          20415: *      VARIABLE              T$VAR     PTR TO VRBLK
        !          20416: *
        !          20417: *      STRING CONSTANT       T$CON     PTR TO SCBLK
        !          20418: *
        !          20419: *      INTEGER CONSTANT      T$CON     PTR TO ICBLK
        !          20420: *
        !          20421: *      REAL CONSTANT         T$CON     PTR TO RCBLK
        !          20422: *
        !          20423: *      BINARY OPERATOR       T$BOP     PTR TO OPERATOR DVBLK
        !          20424: *
        !          20425: *      RIGHT PAREN           T$RPR     T$RPR
        !          20426: *
        !          20427: *      RIGHT BRACKET         T$RBR     T$RBR
        !          20428: *
        !          20429: *      COLON                 T$COL     T$COL
        !          20430: *
        !          20431: *      SEMI-COLON            T$SMC     T$SMC
        !          20432: *
        !          20433: *      F (SCNGO NE 0)        T$FGO     T$FGO
        !          20434: *
        !          20435: *      S (SCNGO NE 0)        T$SGO     T$SGO
        !          20436: {{EJC{{{{
        !          20437: *
        !          20438: *      SCANE (CONTINUED)
        !          20439: *
        !          20440: *      ENTRY POINT
        !          20441: *
        !          20442: {SCANE{PRC{E{0{{ENTRY POINT
        !          20443: {{ZER{SCNBL{{{RESET BLANKS FLAG
        !          20444: {{MOV{R6{SCNSA{{SAVE WA
        !          20445: {{MOV{R7{SCNSB{{SAVE WB
        !          20446: {{MOV{R8{SCNSC{{SAVE WC
        !          20447: {{BZE{SCNRS{SCN03{{JUMP IF NO RESCAN
        !          20448: *
        !          20449: *      HERE FOR RESCAN REQUEST
        !          20450: *
        !          20451: {{MOV{SCNTP{R10{{SET PREVIOUS RETURNED SCAN TYPE
        !          20452: {{MOV{R$SCP{R9{{SET PREVIOUS RETURNED POINTER
        !          20453: {{ZER{SCNRS{{{RESET RESCAN SWITCH
        !          20454: {{BRN{SCN13{{{JUMP TO EXIT
        !          20455: *
        !          20456: *      COME HERE TO READ NEW IMAGE TO TEST FOR CONTINUATION
        !          20457: *
        !          20458: {SCN01{JSR{READR{{{READ NEXT IMAGE
        !          20459: {{MOV{#4*DVUBS{R7{{SET WB FOR NOT READING NAME
        !          20460: {{BZE{R9{SCN30{{TREAT AS SEMI-COLON IF NONE
        !          20461: {{PLC{R9{{{ELSE POINT TO FIRST CHARACTER
        !          20462: {{LCH{R8{(R9){{LOAD FIRST CHARACTER
        !          20463: {{BEQ{R8{#CH$DT{SCN02{JUMP IF DOT FOR CONTINUATION
        !          20464: {{BNE{R8{#CH$PL{SCN30{ELSE TREAT AS SEMICOLON UNLESS PLUS
        !          20465: *
        !          20466: *      HERE FOR CONTINUATION LINE
        !          20467: *
        !          20468: {SCN02{JSR{NEXTS{{{ACQUIRE NEXT SOURCE IMAGE
        !          20469: {{MOV{#NUM01{SCNPT{{SET SCAN POINTER PAST CONTINUATION
        !          20470: {{MNZ{SCNBL{{{SET BLANKS FLAG
        !          20471: {{EJC{{{{
        !          20472: *
        !          20473: *      SCANE (CONTINUED)
        !          20474: *
        !          20475: *      MERGE HERE TO SCAN NEXT ELEMENT ON CURRENT LINE
        !          20476: *
        !          20477: {SCN03{MOV{SCNPT{R6{{LOAD CURRENT OFFSET
        !          20478: {{BEQ{R6{SCNIL{SCN01{CHECK CONTINUATION IF END
        !          20479: {{MOV{R$CIM{R10{{POINT TO CURRENT LINE
        !          20480: {{PLC{R10{R6{{POINT TO CURRENT CHARACTER
        !          20481: {{MOV{R6{SCNSE{{SET START OF ELEMENT LOCATION
        !          20482: {{MOV{#OPDVS{R8{{POINT TO OPERATOR DV LIST
        !          20483: {{MOV{#4*DVUBS{R7{{SET CONSTANT FOR OPERATOR CIRCUIT
        !          20484: {{BRN{SCN06{{{START SCANNING
        !          20485: *
        !          20486: *      LOOP HERE TO IGNORE LEADING BLANKS AND TABS
        !          20487: *
        !          20488: {SCN05{BZE{R7{SCN10{{JUMP IF TRAILING
        !          20489: {{ICV{SCNSE{{{INCREMENT START OF ELEMENT
        !          20490: {{BEQ{R6{SCNIL{SCN01{JUMP IF END OF IMAGE
        !          20491: {{MNZ{SCNBL{{{NOTE BLANKS SEEN
        !          20492: *
        !          20493: *      THE FOLLOWING JUMP IS USED REPEATEDLY FOR SCANNING OUT
        !          20494: *      THE CHARACTERS OF A NUMERIC CONSTANT OR VARIABLE NAME.
        !          20495: *      THE REGISTERS ARE USED AS FOLLOWS.
        !          20496: *
        !          20497: *      (XR)                  SCRATCH
        !          20498: *      (XL)                  PTR TO NEXT CHARACTER
        !          20499: *      (WA)                  CURRENT SCAN OFFSET
        !          20500: *      (WB)                  *DVUBS (0 IF SCANNING NAME,CONST)
        !          20501: *      (WC)                  =OPDVS (0 IF SCANNING CONSTANT)
        !          20502: *
        !          20503: {SCN06{LCH{R9{(R10)+{{GET NEXT CHARACTER
        !          20504: {{ICV{R6{{{BUMP SCAN OFFSET
        !          20505: {{MOV{R6{SCNPT{{STORE OFFSET PAST CHAR SCANNED
        !          20506: {{BLO{#CFP$U{R9{SCN07{QUICK CHECK FOR OTHER CHAR
        !          20507: {{BSW{R9{CFP$U{SCN07{SWITCH ON SCANNED CHARACTER
        !          20508: *
        !          20509: *      SWITCH TABLE FOR SWITCH ON CHARACTER
        !          20510: *
        !          20511: {{EJC{{{{
        !          20512: *
        !          20513: *      SCANE (CONTINUED)
        !          20514: *
        !          20515: {{EJC{{{{
        !          20516: *
        !          20517: *      SCANE (CONTINUED)
        !          20518: *
        !          20519: {{IFF{DUMMY{SCN07{{
        !          20520: {{IFF{DUMMY{SCN07{{
        !          20521: {{IFF{DUMMY{SCN07{{
        !          20522: {{IFF{DUMMY{SCN07{{
        !          20523: {{IFF{DUMMY{SCN07{{
        !          20524: {{IFF{DUMMY{SCN07{{
        !          20525: {{IFF{DUMMY{SCN07{{
        !          20526: {{IFF{DUMMY{SCN07{{
        !          20527: {{IFF{DUMMY{SCN07{{
        !          20528: {{IFF{CH$HT{SCN05{{HORIZONTAL TAB
        !          20529: {{IFF{DUMMY{SCN07{{
        !          20530: {{IFF{DUMMY{SCN07{{
        !          20531: {{IFF{DUMMY{SCN07{{
        !          20532: {{IFF{DUMMY{SCN07{{
        !          20533: {{IFF{DUMMY{SCN07{{
        !          20534: {{IFF{DUMMY{SCN07{{
        !          20535: {{IFF{DUMMY{SCN07{{
        !          20536: {{IFF{DUMMY{SCN07{{
        !          20537: {{IFF{DUMMY{SCN07{{
        !          20538: {{IFF{DUMMY{SCN07{{
        !          20539: {{IFF{DUMMY{SCN07{{
        !          20540: {{IFF{DUMMY{SCN07{{
        !          20541: {{IFF{DUMMY{SCN07{{
        !          20542: {{IFF{DUMMY{SCN07{{
        !          20543: {{IFF{DUMMY{SCN07{{
        !          20544: {{IFF{DUMMY{SCN07{{
        !          20545: {{IFF{DUMMY{SCN07{{
        !          20546: {{IFF{DUMMY{SCN07{{
        !          20547: {{IFF{DUMMY{SCN07{{
        !          20548: {{IFF{DUMMY{SCN07{{
        !          20549: {{IFF{DUMMY{SCN07{{
        !          20550: {{IFF{DUMMY{SCN07{{
        !          20551: {{IFF{CH$BL{SCN05{{BLANK
        !          20552: {{IFF{CH$EX{SCN37{{EXCLAMATION MARK
        !          20553: {{IFF{CH$DQ{SCN17{{DOUBLE QUOTE
        !          20554: {{IFF{CH$NM{SCN41{{NUMBER SIGN
        !          20555: {{IFF{CH$DL{SCN36{{DOLLAR
        !          20556: {{IFF{CH$PC{SCN38{{PERCENT
        !          20557: {{IFF{CH$AM{SCN44{{AMPERSAND
        !          20558: {{IFF{CH$SQ{SCN16{{SINGLE QUOTE
        !          20559: {{IFF{CH$PP{SCN25{{LEFT PAREN
        !          20560: {{IFF{CH$RP{SCN26{{RIGHT PAREN
        !          20561: {{IFF{CH$AS{SCN49{{ASTERISK
        !          20562: {{IFF{CH$PL{SCN33{{PLUS
        !          20563: {{IFF{CH$CM{SCN31{{COMMA
        !          20564: {{IFF{CH$MN{SCN34{{MINUS
        !          20565: {{IFF{CH$DT{SCN32{{DOT
        !          20566: {{IFF{CH$SL{SCN40{{SLASH
        !          20567: {{IFF{CH$D0{SCN08{{DIGIT 0
        !          20568: {{IFF{CH$D1{SCN08{{DIGIT 1
        !          20569: {{IFF{CH$D2{SCN08{{DIGIT 2
        !          20570: {{IFF{CH$D3{SCN08{{DIGIT 3
        !          20571: {{IFF{CH$D4{SCN08{{DIGIT 4
        !          20572: {{IFF{CH$D5{SCN08{{DIGIT 5
        !          20573: {{IFF{CH$D6{SCN08{{DIGIT 6
        !          20574: {{IFF{CH$D7{SCN08{{DIGIT 7
        !          20575: {{IFF{CH$D8{SCN08{{DIGIT 8
        !          20576: {{IFF{CH$D9{SCN08{{DIGIT 9
        !          20577: {{IFF{CH$CL{SCN29{{COLON
        !          20578: {{IFF{CH$SM{SCN30{{SEMI-COLON
        !          20579: {{IFF{CH$BB{SCN28{{LEFT BRACKET
        !          20580: {{IFF{CH$EQ{SCN46{{EQUAL
        !          20581: {{IFF{CH$RB{SCN27{{RIGHT BRACKET
        !          20582: {{IFF{CH$QU{SCN45{{QUESTION MARK
        !          20583: {{IFF{CH$AT{SCN42{{AT
        !          20584: {{IFF{CH$LA{SCN09{{LETTER A
        !          20585: {{IFF{CH$LB{SCN09{{LETTER B
        !          20586: {{IFF{CH$LC{SCN09{{LETTER C
        !          20587: {{IFF{CH$LD{SCN09{{LETTER D
        !          20588: {{IFF{CH$LE{SCN09{{LETTER E
        !          20589: {{IFF{CH$LF{SCN20{{LETTER F
        !          20590: {{IFF{CH$LG{SCN09{{LETTER G
        !          20591: {{IFF{CH$LH{SCN09{{LETTER H
        !          20592: {{IFF{CH$LI{SCN09{{LETTER I
        !          20593: {{IFF{CH$LJ{SCN09{{LETTER J
        !          20594: {{IFF{CH$LK{SCN09{{LETTER K
        !          20595: {{IFF{CH$LL{SCN09{{LETTER L
        !          20596: {{IFF{CH$LM{SCN09{{LETTER M
        !          20597: {{IFF{CH$LN{SCN09{{LETTER N
        !          20598: {{IFF{CH$LO{SCN09{{LETTER O
        !          20599: {{IFF{CH$LP{SCN09{{LETTER P
        !          20600: {{IFF{CH$LQ{SCN09{{LETTER Q
        !          20601: {{IFF{CH$LR{SCN09{{LETTER R
        !          20602: {{IFF{CH$LS{SCN21{{LETTER S
        !          20603: {{IFF{CH$LT{SCN09{{LETTER T
        !          20604: {{IFF{CH$LU{SCN09{{LETTER U
        !          20605: {{IFF{CH$LV{SCN09{{LETTER V
        !          20606: {{IFF{CH$LW{SCN09{{LETTER W
        !          20607: {{IFF{CH$LX{SCN09{{LETTER X
        !          20608: {{IFF{CH$LY{SCN09{{LETTER Y
        !          20609: {{IFF{CH$L${SCN09{{LETTER Z
        !          20610: {{IFF{CH$OB{SCN28{{LEFT BRACKET
        !          20611: {{IFF{DUMMY{SCN07{{
        !          20612: {{IFF{CH$CB{SCN27{{RIGHT BRACKET
        !          20613: {{IFF{DUMMY{SCN07{{
        !          20614: {{IFF{CH$UN{SCN24{{UNDERLINE
        !          20615: {{IFF{DUMMY{SCN07{{
        !          20616: {{IFF{CH$$A{SCN09{{SHIFTED A
        !          20617: {{IFF{CH$$B{SCN09{{SHIFTED B
        !          20618: {{IFF{CH$$C{SCN09{{SHIFTED C
        !          20619: {{IFF{CH$$D{SCN09{{SHIFTED D
        !          20620: {{IFF{CH$$E{SCN09{{SHIFTED E
        !          20621: {{IFF{CH$$F{SCN20{{SHIFTED F
        !          20622: {{IFF{CH$$G{SCN09{{SHIFTED G
        !          20623: {{IFF{CH$$H{SCN09{{SHIFTED H
        !          20624: {{IFF{CH$$I{SCN09{{SHIFTED I
        !          20625: {{IFF{CH$$J{SCN09{{SHIFTED J
        !          20626: {{IFF{CH$$K{SCN09{{SHIFTED K
        !          20627: {{IFF{CH$$L{SCN09{{SHIFTED L
        !          20628: {{IFF{CH$$M{SCN09{{SHIFTED M
        !          20629: {{IFF{CH$$N{SCN09{{SHIFTED N
        !          20630: {{IFF{CH$$O{SCN09{{SHIFTED O
        !          20631: {{IFF{CH$$P{SCN09{{SHIFTED P
        !          20632: {{IFF{CH$$Q{SCN09{{SHIFTED Q
        !          20633: {{IFF{CH$$R{SCN09{{SHIFTED R
        !          20634: {{IFF{CH$$S{SCN21{{SHIFTED S
        !          20635: {{IFF{CH$$T{SCN09{{SHIFTED T
        !          20636: {{IFF{CH$$U{SCN09{{SHIFTED U
        !          20637: {{IFF{CH$$V{SCN09{{SHIFTED V
        !          20638: {{IFF{CH$$W{SCN09{{SHIFTED W
        !          20639: {{IFF{CH$$X{SCN09{{SHIFTED X
        !          20640: {{IFF{CH$$Y{SCN09{{SHIFTED Y
        !          20641: {{IFF{CH$$${SCN09{{SHIFTED Z
        !          20642: {{IFF{DUMMY{SCN07{{
        !          20643: {{IFF{CH$BR{SCN43{{VERTICAL BAR
        !          20644: {{IFF{DUMMY{SCN07{{
        !          20645: {{IFF{CH$NT{SCN35{{NOT
        !          20646: {{IFF{DUMMY{SCN07{{
        !          20647: {{ESW{{{{END SWITCH ON CHARACTER
        !          20648: *
        !          20649: *      HERE FOR ILLEGAL CHARACTER (UNDERLINE MERGES)
        !          20650: *
        !          20651: {SCN07{BZE{R7{SCN10{{JUMP IF SCANNING NAME OR CONSTANT
        !          20652: {{ERB{230{SYNTAX{{ERROR. ILLEGAL CHARACTER
        !          20653: {{EJC{{{{
        !          20654: *
        !          20655: *      SCANE (CONTINUED)
        !          20656: *
        !          20657: *      HERE FOR DIGITS 0-9
        !          20658: *
        !          20659: {SCN08{BZE{R7{SCN09{{KEEP SCANNING IF NAME/CONSTANT
        !          20660: {{ZER{R8{{{ELSE SET FLAG FOR SCANNING CONSTANT
        !          20661: *
        !          20662: *      HERE FOR LETTER. LOOP HERE WHEN SCANNING NAME/CONSTANT
        !          20663: *
        !          20664: {SCN09{BEQ{R6{SCNIL{SCN11{JUMP IF END OF IMAGE
        !          20665: {{ZER{R7{{{SET FLAG FOR SCANNING NAME/CONST
        !          20666: {{BRN{SCN06{{{MERGE BACK TO CONTINUE SCAN
        !          20667: *
        !          20668: *      COME HERE FOR DELIMITER ENDING NAME OR CONSTANT
        !          20669: *
        !          20670: {SCN10{DCV{R6{{{RESET OFFSET TO POINT TO DELIMITER
        !          20671: *
        !          20672: *      COME HERE AFTER FINISHING SCAN OF NAME OR CONSTANT
        !          20673: *
        !          20674: {SCN11{MOV{R6{SCNPT{{STORE UPDATED SCAN OFFSET
        !          20675: {{MOV{SCNSE{R7{{POINT TO START OF ELEMENT
        !          20676: {{SUB{R7{R6{{GET NUMBER OF CHARACTERS
        !          20677: {{MOV{R$CIM{R10{{POINT TO LINE IMAGE
        !          20678: {{BNZ{R8{SCN15{{JUMP IF NAME
        !          20679: *
        !          20680: *      HERE AFTER SCANNING OUT NUMERIC CONSTANT
        !          20681: *
        !          20682: {{JSR{SBSTR{{{GET STRING FOR CONSTANT
        !          20683: {{MOV{R9{DNAMP{{DELETE FROM STORAGE (NOT NEEDED)
        !          20684: {{JSR{GTNUM{{{CONVERT TO NUMERIC
        !          20685: {{PPM{SCN14{{{JUMP IF CONVERSION FAILURE
        !          20686: *
        !          20687: *      MERGE HERE TO EXIT WITH CONSTANT
        !          20688: *
        !          20689: {SCN12{MOV{#T$CON{R10{{SET RESULT TYPE OF CONSTANT
        !          20690: {{EJC{{{{
        !          20691: *
        !          20692: *      SCANE (CONTINUED)
        !          20693: *
        !          20694: *      COMMON EXIT POINT (XR,XL) SET
        !          20695: *
        !          20696: {SCN13{MOV{SCNSA{R6{{RESTORE WA
        !          20697: {{MOV{SCNSB{R7{{RESTORE WB
        !          20698: {{MOV{SCNSC{R8{{RESTORE WC
        !          20699: {{MOV{R9{R$SCP{{SAVE XR IN CASE RESCAN
        !          20700: {{MOV{R10{SCNTP{{SAVE XL IN CASE RESCAN
        !          20701: {{ZER{SCNGO{{{RESET POSSIBLE GOTO FLAG
        !          20702: {{EXI{{{{RETURN TO SCANE CALLER
        !          20703: *
        !          20704: *      HERE IF CONVERSION ERROR ON NUMERIC ITEM
        !          20705: *
        !          20706: {SCN14{ERB{231{SYNTAX{{ERROR. INVALID NUMERIC ITEM
        !          20707: *
        !          20708: *      HERE AFTER SCANNING OUT VARIABLE NAME
        !          20709: *
        !          20710: {SCN15{JSR{SBSTR{{{BUILD STRING NAME OF VARIABLE
        !          20711: {{BNZ{SCNCC{SCN13{{RETURN IF CNCRD CALL
        !          20712: {{JSR{GTNVR{{{LOCATE/BUILD VRBLK
        !          20713: {{PPM{{{{DUMMY (UNUSED) ERROR RETURN
        !          20714: {{MOV{#T$VAR{R10{{SET TYPE AS VARIABLE
        !          20715: {{BRN{SCN13{{{BACK TO EXIT
        !          20716: *
        !          20717: *      HERE FOR SINGLE QUOTE (START OF STRING CONSTANT)
        !          20718: *
        !          20719: {SCN16{BZE{R7{SCN10{{TERMINATOR IF SCANNING NAME OR CNST
        !          20720: {{MOV{#CH$SQ{R7{{SET TERMINATOR AS SINGLE QUOTE
        !          20721: {{BRN{SCN18{{{MERGE
        !          20722: *
        !          20723: *      HERE FOR DOUBLE QUOTE (START OF STRING CONSTANT)
        !          20724: *
        !          20725: {SCN17{BZE{R7{SCN10{{TERMINATOR IF SCANNING NAME OR CNST
        !          20726: {{MOV{#CH$DQ{R7{{SET DOUBLE QUOTE TERMINATOR, MERGE
        !          20727: *
        !          20728: *      LOOP TO SCAN OUT STRING CONSTANT
        !          20729: *
        !          20730: {SCN18{BEQ{R6{SCNIL{SCN19{ERROR IF END OF IMAGE
        !          20731: {{LCH{R8{(R10)+{{ELSE LOAD NEXT CHARACTER
        !          20732: {{ICV{R6{{{BUMP OFFSET
        !          20733: {{BNE{R8{R7{SCN18{LOOP BACK IF NOT TERMINATOR
        !          20734: {{EJC{{{{
        !          20735: *
        !          20736: *      SCANE (CONTINUED)
        !          20737: *
        !          20738: *      HERE AFTER SCANNING OUT STRING CONSTANT
        !          20739: *
        !          20740: {{MOV{SCNPT{R7{{POINT TO FIRST CHARACTER
        !          20741: {{MOV{R6{SCNPT{{SAVE OFFSET PAST FINAL QUOTE
        !          20742: {{DCV{R6{{{POINT BACK PAST LAST CHARACTER
        !          20743: {{SUB{R7{R6{{GET NUMBER OF CHARACTERS
        !          20744: {{MOV{R$CIM{R10{{POINT TO INPUT IMAGE
        !          20745: {{JSR{SBSTR{{{BUILD SUBSTRING VALUE
        !          20746: {{BRN{SCN12{{{BACK TO EXIT WITH CONSTANT RESULT
        !          20747: *
        !          20748: *      HERE IF NO MATCHING QUOTE FOUND
        !          20749: *
        !          20750: {SCN19{MOV{R6{SCNPT{{SET UPDATED SCAN POINTER
        !          20751: {{ERB{232{SYNTAX{{ERROR. UNMATCHED STRING QUOTE
        !          20752: *
        !          20753: *      HERE FOR F (POSSIBLE FAILURE GOTO)
        !          20754: *
        !          20755: {SCN20{MOV{#T$FGO{R9{{SET RETURN CODE FOR FAIL GOTO
        !          20756: {{BRN{SCN22{{{JUMP TO MERGE
        !          20757: *
        !          20758: *      HERE FOR S (POSSIBLE SUCCESS GOTO)
        !          20759: *
        !          20760: {SCN21{MOV{#T$SGO{R9{{SET SUCCESS GOTO AS RETURN CODE
        !          20761: *
        !          20762: *      SPECIAL GOTO CASES MERGE HERE
        !          20763: *
        !          20764: {SCN22{BZE{SCNGO{SCN09{{TREAT AS NORMAL LETTER IF NOT GOTO
        !          20765: *
        !          20766: *      MERGE HERE FOR SPECIAL CHARACTER EXIT
        !          20767: *
        !          20768: {SCN23{BZE{R7{SCN10{{JUMP IF END OF NAME/CONSTANT
        !          20769: {{MOV{R9{R10{{ELSE COPY CODE
        !          20770: {{BRN{SCN13{{{AND JUMP TO EXIT
        !          20771: *
        !          20772: *      HERE FOR UNDERLINE
        !          20773: *
        !          20774: {SCN24{BZE{R7{SCN09{{PART OF NAME IF SCANNING NAME
        !          20775: {{BRN{SCN07{{{ELSE ILLEGAL
        !          20776: {{EJC{{{{
        !          20777: *
        !          20778: *      SCANE (CONTINUED)
        !          20779: *
        !          20780: *      HERE FOR LEFT PAREN
        !          20781: *
        !          20782: {SCN25{MOV{#T$LPR{R9{{SET LEFT PAREN RETURN CODE
        !          20783: {{BNZ{R7{SCN23{{RETURN LEFT PAREN UNLESS NAME
        !          20784: {{BZE{R8{SCN10{{DELIMITER IF SCANNING CONSTANT
        !          20785: *
        !          20786: *      HERE FOR LEFT PAREN AFTER NAME (FUNCTION CALL)
        !          20787: *
        !          20788: {{MOV{SCNSE{R7{{POINT TO START OF NAME
        !          20789: {{MOV{R6{SCNPT{{SET POINTER PAST LEFT PAREN
        !          20790: {{DCV{R6{{{POINT BACK PAST LAST CHAR OF NAME
        !          20791: {{SUB{R7{R6{{GET NAME LENGTH
        !          20792: {{MOV{R$CIM{R10{{POINT TO INPUT IMAGE
        !          20793: {{JSR{SBSTR{{{GET STRING NAME FOR FUNCTION
        !          20794: {{JSR{GTNVR{{{LOCATE/BUILD VRBLK
        !          20795: {{PPM{{{{DUMMY (UNUSED) ERROR RETURN
        !          20796: {{MOV{#T$FNC{R10{{SET CODE FOR FUNCTION CALL
        !          20797: {{BRN{SCN13{{{BACK TO EXIT
        !          20798: *
        !          20799: *      PROCESSING FOR SPECIAL CHARACTERS
        !          20800: *
        !          20801: {SCN26{MOV{#T$RPR{R9{{RIGHT PAREN, SET CODE
        !          20802: {{BRN{SCN23{{{TAKE SPECIAL CHARACTER EXIT
        !          20803: *
        !          20804: {SCN27{MOV{#T$RBR{R9{{RIGHT BRACKET, SET CODE
        !          20805: {{BRN{SCN23{{{TAKE SPECIAL CHARACTER EXIT
        !          20806: *
        !          20807: {SCN28{MOV{#T$LBR{R9{{LEFT BRACKET, SET CODE
        !          20808: {{BRN{SCN23{{{TAKE SPECIAL CHARACTER EXIT
        !          20809: *
        !          20810: {SCN29{MOV{#T$COL{R9{{COLON, SET CODE
        !          20811: {{BRN{SCN23{{{TAKE SPECIAL CHARACTER EXIT
        !          20812: *
        !          20813: {SCN30{MOV{#T$SMC{R9{{SEMI-COLON, SET CODE
        !          20814: {{BRN{SCN23{{{TAKE SPECIAL CHARACTER EXIT
        !          20815: *
        !          20816: {SCN31{MOV{#T$CMA{R9{{COMMA, SET CODE
        !          20817: {{BRN{SCN23{{{TAKE SPECIAL CHARACTER EXIT
        !          20818: {{EJC{{{{
        !          20819: *
        !          20820: *      SCANE (CONTINUED)
        !          20821: *
        !          20822: *      HERE FOR OPERATORS. ON ENTRY, WC POINTS TO THE TABLE OF
        !          20823: *      OPERATOR DOPE VECTORS AND WB IS THE INCREMENT TO STEP
        !          20824: *      TO THE NEXT PAIR (BINARY/UNARY) OF DOPE VECTORS IN THE
        !          20825: *      LIST. ON REACHING SCN46, THE POINTER HAS BEEN ADJUSTED TO
        !          20826: *      POINT TO THE APPROPRIATE PAIR OF DOPE VECTORS.
        !          20827: *      THE FIRST THREE ENTRIES ARE SPECIAL SINCE THEY CAN OCCUR
        !          20828: *      AS PART OF A VARIABLE NAME (.) OR CONSTANT (.+-).
        !          20829: *
        !          20830: {SCN32{BZE{R7{SCN09{{DOT CAN BE PART OF NAME OR CONSTANT
        !          20831: {{ADD{R7{R8{{ELSE BUMP POINTER
        !          20832: *
        !          20833: {SCN33{BZE{R8{SCN09{{PLUS CAN BE PART OF CONSTANT
        !          20834: {{BZE{R7{SCN48{{PLUS CANNOT BE PART OF NAME
        !          20835: {{ADD{R7{R8{{ELSE BUMP POINTER
        !          20836: *
        !          20837: {SCN34{BZE{R8{SCN09{{MINUS CAN BE PART OF CONSTANT
        !          20838: {{BZE{R7{SCN48{{MINUS CANNOT BE PART OF NAME
        !          20839: {{ADD{R7{R8{{ELSE BUMP POINTER
        !          20840: *
        !          20841: {SCN35{ADD{R7{R8{{NOT
        !          20842: {SCN36{ADD{R7{R8{{DOLLAR
        !          20843: {SCN37{ADD{R7{R8{{EXCLAMATION
        !          20844: {SCN38{ADD{R7{R8{{PERCENT
        !          20845: {SCN39{ADD{R7{R8{{ASTERISK
        !          20846: {SCN40{ADD{R7{R8{{SLASH
        !          20847: {SCN41{ADD{R7{R8{{NUMBER SIGN
        !          20848: {SCN42{ADD{R7{R8{{AT SIGN
        !          20849: {SCN43{ADD{R7{R8{{VERTICAL BAR
        !          20850: {SCN44{ADD{R7{R8{{AMPERSAND
        !          20851: {SCN45{ADD{R7{R8{{QUESTION MARK
        !          20852: *
        !          20853: *      ALL OPERATORS COME HERE (EQUAL MERGES DIRECTLY)
        !          20854: *      (WC) POINTS TO THE BINARY/UNARY PAIR OF OPERATOR DVBLKS.
        !          20855: *
        !          20856: {SCN46{BZE{R7{SCN10{{OPERATOR TERMINATES NAME/CONSTANT
        !          20857: {{MOV{R8{R9{{ELSE COPY DV POINTER
        !          20858: {{LCH{R8{(R10){{LOAD NEXT CHARACTER
        !          20859: {{MOV{#T$BOP{R10{{SET BINARY OP IN CASE
        !          20860: {{BEQ{R6{SCNIL{SCN47{SHOULD BE BINARY IF IMAGE END
        !          20861: {{BEQ{R8{#CH$BL{SCN47{SHOULD BE BINARY IF FOLLOWED BY BLK
        !          20862: {{BEQ{R8{#CH$HT{SCN47{JUMP IF HORIZONTAL TAB
        !          20863: {{BEQ{R8{#CH$SM{SCN47{SEMICOLON CAN IMMEDIATELY FOLLOW =
        !          20864: *
        !          20865: *      HERE FOR UNARY OPERATOR
        !          20866: *
        !          20867: {{ADD{#4*DVBS${R9{{POINT TO DV FOR UNARY OP
        !          20868: {{MOV{#T$UOP{R10{{SET TYPE FOR UNARY OPERATOR
        !          20869: {{BLE{SCNTP{#T$UOK{SCN13{OK UNARY IF OK PRECEDING ELEMENT
        !          20870: {{EJC{{{{
        !          20871: *
        !          20872: *      SCANE (CONTINUED)
        !          20873: *
        !          20874: *      MERGE HERE TO REQUIRE PRECEDING BLANKS
        !          20875: *
        !          20876: {SCN47{BNZ{SCNBL{SCN13{{ALL OK IF PRECEDING BLANKS, EXIT
        !          20877: *
        !          20878: *      FAIL OPERATOR IN THIS POSITION
        !          20879: *
        !          20880: {SCN48{ERB{233{SYNTAX{{ERROR. INVALID USE OF OPERATOR
        !          20881: *
        !          20882: *      HERE FOR ASTERISK, COULD BE ** SUBSTITUTE FOR EXCLAMATION
        !          20883: *
        !          20884: {SCN49{BZE{R7{SCN10{{END OF NAME IF SCANNING NAME
        !          20885: {{BEQ{R6{SCNIL{SCN39{NOT ** IF * AT IMAGE END
        !          20886: {{MOV{R6{R9{{ELSE SAVE OFFSET PAST FIRST *
        !          20887: {{MOV{R6{SCNOF{{SAVE ANOTHER COPY
        !          20888: {{LCH{R6{(R10)+{{LOAD NEXT CHARACTER
        !          20889: {{BNE{R6{#CH$AS{SCN50{NOT ** IF NEXT CHAR NOT *
        !          20890: {{ICV{R9{{{ELSE STEP OFFSET PAST SECOND *
        !          20891: {{BEQ{R9{SCNIL{SCN51{OK EXCLAM IF END OF IMAGE
        !          20892: {{LCH{R6{(R10){{ELSE LOAD NEXT CHARACTER
        !          20893: {{BEQ{R6{#CH$BL{SCN51{EXCLAMATION IF BLANK
        !          20894: {{BEQ{R6{#CH$HT{SCN51{EXCLAMATION IF HORIZONTAL TAB
        !          20895: *
        !          20896: *      UNARY *
        !          20897: *
        !          20898: {SCN50{MOV{SCNOF{R6{{RECOVER STORED OFFSET
        !          20899: {{MOV{R$CIM{R10{{POINT TO LINE AGAIN
        !          20900: {{PLC{R10{R6{{POINT TO CURRENT CHAR
        !          20901: {{BRN{SCN39{{{MERGE WITH UNARY *
        !          20902: *
        !          20903: *      HERE FOR ** AS SUBSTITUTE FOR EXCLAMATION
        !          20904: *
        !          20905: {SCN51{MOV{R9{SCNPT{{SAVE SCAN POINTER PAST 2ND *
        !          20906: {{MOV{R9{R6{{COPY SCAN POINTER
        !          20907: {{BRN{SCN37{{{MERGE WITH EXCLAMATION
        !          20908: {{ENP{{{{END PROCEDURE SCANE
        !          20909: {{EJC{{{{
        !          20910: *
        !          20911: *      SCNGF -- SCAN GOTO FIELD
        !          20912: *
        !          20913: *      SCNGF IS CALLED FROM CMPIL TO SCAN AND ANALYZE A GOTO
        !          20914: *      FIELD INCLUDING THE SURROUNDING BRACKETS OR PARENTHESES.
        !          20915: *      FOR A NORMAL GOTO, THE RESULT RETURNED IS EITHER A VRBLK
        !          20916: *      POINTER FOR A SIMPLE LABEL OPERAND, OR A POINTER TO AN
        !          20917: *      EXPRESSION TREE WITH A SPECIAL OUTER UNARY OPERATOR
        !          20918: *      (O$GOC). FOR A DIRECT GOTO, THE RESULT RETURNED IS A
        !          20919: *      POINTER TO AN EXPRESSION TREE WITH THE SPECIAL OUTER
        !          20920: *      UNARY OPERATOR O$GOD.
        !          20921: *
        !          20922: *      JSR  SCNGF            CALL TO SCAN GOTO FIELD
        !          20923: *      (XR)                  RESULT (SEE ABOVE)
        !          20924: *      (XL,WA,WB,WC)         DESTROYED
        !          20925: *
        !          20926: {SCNGF{PRC{E{0{{ENTRY POINT
        !          20927: {{JSR{SCANE{{{SCAN INITIAL ELEMENT
        !          20928: {{BEQ{R10{#T$LPR{SCNG1{SKIP IF LEFT PAREN (NORMAL GOTO)
        !          20929: {{BEQ{R10{#T$LBR{SCNG2{SKIP IF LEFT BRACKET (DIRECT GOTO)
        !          20930: {{ERB{234{SYNTAX{{ERROR. GOTO FIELD INCORRECT
        !          20931: *
        !          20932: *      HERE FOR LEFT PAREN (NORMAL GOTO)
        !          20933: *
        !          20934: {SCNG1{MOV{#NUM01{R7{{SET EXPAN FLAG FOR NORMAL GOTO
        !          20935: {{JSR{EXPAN{{{ANALYZE GOTO FIELD
        !          20936: {{MOV{#OPDVN{R6{{POINT TO OPDV FOR COMPLEX GOTO
        !          20937: {{BLE{R9{STATB{SCNG3{JUMP IF NOT IN STATIC (SGD15)
        !          20938: {{BLO{R9{STATE{SCNG4{JUMP TO EXIT IF SIMPLE LABEL NAME
        !          20939: {{BRN{SCNG3{{{COMPLEX GOTO - MERGE
        !          20940: *
        !          20941: *      HERE FOR LEFT BRACKET (DIRECT GOTO)
        !          20942: *
        !          20943: {SCNG2{MOV{#NUM02{R7{{SET EXPAN FLAG FOR DIRECT GOTO
        !          20944: {{JSR{EXPAN{{{SCAN GOTO FIELD
        !          20945: {{MOV{#OPDVD{R6{{SET OPDV POINTER FOR DIRECT GOTO
        !          20946: {{EJC{{{{
        !          20947: *
        !          20948: *      SCNGF (CONTINUED)
        !          20949: *
        !          20950: *      MERGE HERE TO BUILD OUTER UNARY OPERATOR BLOCK
        !          20951: *
        !          20952: {SCNG3{MOV{R6{-(SP){{STACK OPERATOR DV POINTER
        !          20953: {{MOV{R9{-(SP){{STACK POINTER TO EXPRESSION TREE
        !          20954: {{JSR{EXPOP{{{POP OPERATOR OFF
        !          20955: {{MOV{(SP)+{R9{{RELOAD NEW EXPRESSION TREE POINTER
        !          20956: *
        !          20957: *      COMMON EXIT POINT
        !          20958: *
        !          20959: {SCNG4{EXI{{{{RETURN TO CALLER
        !          20960: {{ENP{{{{END PROCEDURE SCNGF
        !          20961: {{EJC{{{{
        !          20962: *
        !          20963: *      SETVR -- SET VRGET,VRSTO FIELDS OF VRBLK
        !          20964: *
        !          20965: *      SETVR SETS THE PROPER VALUES IN THE VRGET AND VRSTO
        !          20966: *      FIELDS OF A VRBLK. IT IS CALLED WHENEVER TRBLKS ARE
        !          20967: *      ADDED OR SUBTRACTED (TRACE,STOPTR,INPUT,OUTPUT,DETACH)
        !          20968: *
        !          20969: *      (XR)                  POINTER TO VRBLK
        !          20970: *      JSR  SETVR            CALL TO SET FIELDS
        !          20971: *      (XL,WA)               DESTROYED
        !          20972: *
        !          20973: *      NOTE THAT SETVR IGNORES THE CALL IF XR DOES NOT POINT
        !          20974: *      INTO THE STATIC REGION (I.E. IS SOME OTHER NAME BASE)
        !          20975: *
        !          20976: {SETVR{PRC{E{0{{ENTRY POINT
        !          20977: {{BHI{R9{STATE{SETV1{EXIT IF NOT NATURAL VARIABLE
        !          20978: *
        !          20979: *      HERE IF WE HAVE A VRBLK
        !          20980: *
        !          20981: {{MOV{R9{R10{{COPY VRBLK POINTER
        !          20982: {{MOV{#B$VRL{4*VRGET(R9){{STORE NORMAL GET VALUE
        !          20983: {{BEQ{4*VRSTO(R9){#B$VRE{SETV1{SKIP IF PROTECTED VARIABLE
        !          20984: {{MOV{#B$VRS{4*VRSTO(R9){{STORE NORMAL STORE VALUE
        !          20985: {{MOV{4*VRVAL(R10){R10{{POINT TO NEXT ENTRY ON CHAIN
        !          20986: {{BNE{(R10){#B$TRT{SETV1{JUMP IF END OF TRBLK CHAIN
        !          20987: {{MOV{#B$VRA{4*VRGET(R9){{STORE TRAPPED ROUTINE ADDRESS
        !          20988: {{MOV{#B$VRV{4*VRSTO(R9){{SET TRAPPED ROUTINE ADDRESS
        !          20989: *
        !          20990: *      MERGE HERE TO EXIT TO CALLER
        !          20991: *
        !          20992: {SETV1{EXI{{{{RETURN TO SETVR CALLER
        !          20993: {{ENP{{{{END PROCEDURE SETVR
        !          20994: {{EJC{{{{
        !          20995: *
        !          20996: *      SORTA -- SORT ARRAY
        !          20997: *
        !          20998: *      ROUTINE TO SORT AN ARRAY OR TABLE ON SAME BASIS AS IN
        !          20999: *      SITBOL. A TABLE IS CONVERTED TO AN ARRAY, LEAVING TWO
        !          21000: *      DIMENSIONAL ARRAYS AND VECTORS AS CASES TO BE CONSIDERED.
        !          21001: *      WHOLE ROWS OF ARRAYS ARE PERMUTED ACCORDING TO THE
        !          21002: *      ORDERING OF THE KEYS THEY CONTAIN, AND THE STRIDE
        !          21003: *      REFERRED TO, IS THE THE LENGTH OF A ROW. IT IS ONE
        !          21004: *      FOR A VECTOR.
        !          21005: *      THE SORT USED IS HEAPSORT, FUNDAMENTALS OF DATA STRUCTURE
        !          21006: *      HOROWITZ AND SAHNI, PITMAN 1977, PAGE 347.
        !          21007: *      IT IS AN ORDER N*LOG(N) ALGORITHM. IN ORDER
        !          21008: *      TO MAKE IT STABLE, COMPARANDS MAY NOT COMPARE EQUAL. THIS
        !          21009: *      IS ACHIEVED BY SORTING A COPY ARRAY (REFERRED TO AS THE
        !          21010: *      SORT ARRAY) CONTAINING AT ITS HIGH ADDRESS END, BYTE
        !          21011: *      OFFSETS TO THE ROWS TO BE SORTED HELD IN THE ORIGINAL
        !          21012: *      ARRAY (REFERRED TO AS THE KEY ARRAY). SORTC, THE
        !          21013: *      COMPARISON ROUTINE, ACCESSES THE KEYS THROUGH THESE
        !          21014: *      OFFSETS AND IN THE CASE OF EQUALITY, RESOLVES IT BY
        !          21015: *      COMPARING THE OFFSETS THEMSELVES. THE SORT PERMUTES THE
        !          21016: *      OFFSETS WHICH ARE THEN USED IN A FINAL OPERATION TO COPY
        !          21017: *      THE ACTUAL ITEMS INTO THE NEW ARRAY IN SORTED ORDER.
        !          21018: *      REFERENCES TO ZEROTH ITEM ARE TO NOTIONAL ITEM
        !          21019: *      PRECEDING FIRST ACTUAL ITEM.
        !          21020: *      REVERSE SORTING FOR RSORT IS DONE BY HAVING THE LESS THAN
        !          21021: *      TEST FOR KEYS EFFECTIVELY BE REPLACED BY A
        !          21022: *      GREATER THAN TEST.
        !          21023: *
        !          21024: *      1(XS)                 FIRST ARG - ARRAY OR TABLE
        !          21025: *      0(XS)                 2ND ARG - INDEX OR PDTYPE NAME
        !          21026: *      (WA)                  0 , NON-ZERO FOR SORT , RSORT
        !          21027: *      JSR  SORTA            CALL TO SORT ARRAY
        !          21028: *      (XR)                  SORTED ARRAY
        !          21029: *      (XL,WA,WB,WC)         DESTROYED
        !          21030: {{EJC{{{{
        !          21031: *
        !          21032: *      SORTA (CONTINUED)
        !          21033: *
        !          21034: {SORTA{PRC{N{0{{ENTRY POINT
        !          21035: {{MOV{R6{SRTSR{{SORT/RSORT INDICATOR
        !          21036: {{MOV{#4*NUM01{SRTST{{DEFAULT STRIDE OF 1
        !          21037: {{ZER{SRTOF{{{DEFAULT ZERO OFFSET TO SORT KEY
        !          21038: {{MOV{#NULLS{SRTDF{{CLEAR DATATYPE FIELD NAME
        !          21039: {{MOV{(SP)+{R$SXR{{UNSTACK ARGUMENT 2
        !          21040: {{MOV{(SP)+{R9{{GET FIRST ARGUMENT
        !          21041: {{JSR{GTARR{{{CONVERT TO ARRAY
        !          21042: {{PPM{SRT16{{{FAIL
        !          21043: {{MOV{R9{-(SP){{STACK PTR TO RESULTING KEY ARRAY
        !          21044: {{MOV{R9{-(SP){{ANOTHER COPY FOR COPYB
        !          21045: {{JSR{COPYB{{{GET COPY ARRAY FOR SORTING INTO
        !          21046: {{PPM{{{{CANT FAIL
        !          21047: {{MOV{R9{-(SP){{STACK POINTER TO SORT ARRAY
        !          21048: {{MOV{R$SXR{R9{{GET SECOND ARG
        !          21049: {{MOV{4*1(SP){R10{{GET PTR TO KEY ARRAY
        !          21050: {{BNE{(R10){#B$VCT{SRT02{JUMP IF ARBLK
        !          21051: {{BEQ{R9{#NULLS{SRT01{JUMP IF NULL SECOND ARG
        !          21052: {{JSR{GTNVR{{{GET VRBLK PTR FOR IT
        !          21053: {{ERR{257{ERRONEOUS{{2ND ARG IN SORT/RSORT OF VECTOR
        !          21054: {{MOV{R9{SRTDF{{STORE DATATYPE FIELD NAME VRBLK
        !          21055: *
        !          21056: *      COMPUTE N AND OFFSET TO ITEM A(0) IN VECTOR CASE
        !          21057: *
        !          21058: {SRT01{MOV{#4*VCLEN{R8{{OFFSET TO A(0)
        !          21059: {{MOV{#4*VCVLS{R7{{OFFSET TO FIRST ITEM
        !          21060: {{MOV{4*VCLEN(R10){R6{{GET BLOCK LENGTH
        !          21061: {{SUB{#4*VCSI${R6{{GET NO. OF ENTRIES, N (IN BYTES)
        !          21062: {{BRN{SRT04{{{MERGE
        !          21063: *
        !          21064: *      HERE FOR ARRAY
        !          21065: *
        !          21066: {SRT02{LDI{4*ARDIM(R10){{{GET POSSIBLE DIMENSION
        !          21067: {{MFI{R6{{{CONVERT TO SHORT INTEGER
        !          21068: {{WTB{R6{{{FURTHER CONVERT TO BAUS
        !          21069: {{MOV{#4*ARVLS{R7{{OFFSET TO FIRST VALUE IF ONE
        !          21070: {{MOV{#4*ARPRO{R8{{OFFSET BEFORE VALUES IF ONE DIM.
        !          21071: {{BEQ{4*ARNDM(R10){#NUM01{SRT04{JUMP IN FACT IF ONE DIM.
        !          21072: {{BNE{4*ARNDM(R10){#NUM02{SRT16{FAIL UNLESS TWO DIMENS
        !          21073: {{LDI{4*ARLB2(R10){{{GET LOWER BOUND 2 AS DEFAULT
        !          21074: {{BEQ{R9{#NULLS{SRT03{JUMP IF DEFAULT SECOND ARG
        !          21075: {{JSR{GTINT{{{CONVERT TO INTEGER
        !          21076: {{PPM{SRT17{{{FAIL
        !          21077: {{LDI{4*ICVAL(R9){{{GET ACTUAL INTEGER VALUE
        !          21078: {{EJC{{{{
        !          21079: *
        !          21080: *      SORTA (CONTINUED)
        !          21081: *
        !          21082: *      HERE WITH SORT COLUMN INDEX IN IA IN ARRAY CASE
        !          21083: *
        !          21084: {SRT03{SBI{4*ARLB2(R10){{{SUBTRACT LOW BOUND
        !          21085: {{IOV{SRT17{{{FAIL IF OVERFLOW
        !          21086: {{ILT{SRT17{{{FAIL IF BELOW LOW BOUND
        !          21087: {{SBI{4*ARDM2(R10){{{CHECK AGAINST DIMENSION
        !          21088: {{IGE{SRT17{{{FAIL IF TOO LARGE
        !          21089: {{ADI{4*ARDM2(R10){{{RESTORE VALUE
        !          21090: {{MFI{R6{{{GET AS SMALL INTEGER
        !          21091: {{WTB{R6{{{OFFSET WITHIN ROW TO KEY
        !          21092: {{MOV{R6{SRTOF{{KEEP OFFSET
        !          21093: {{LDI{4*ARDM2(R10){{{SECOND DIMENSION IS ROW LENGTH
        !          21094: {{MFI{R6{{{CONVERT TO SHORT INTEGER
        !          21095: {{MOV{R6{R9{{COPY ROW LENGTH
        !          21096: {{WTB{R6{{{CONVERT TO BYTES
        !          21097: {{MOV{R6{SRTST{{STORE AS STRIDE
        !          21098: {{LDI{4*ARDIM(R10){{{GET NUMBER OF ROWS
        !          21099: {{MFI{R6{{{AS A SHORT INTEGER
        !          21100: {{WTB{R6{{{CONVERT N TO BAUS
        !          21101: {{MOV{4*ARLEN(R10){R8{{OFFSET PAST ARRAY END
        !          21102: {{SUB{R6{R8{{ADJUST, GIVING SPACE FOR N OFFSETS
        !          21103: {{DCA{R8{{{POINT TO A(0)
        !          21104: {{MOV{4*AROFS(R10){R7{{OFFSET TO WORD BEFORE FIRST ITEM
        !          21105: {{ICA{R7{{{OFFSET TO FIRST ITEM
        !          21106: *
        !          21107: *      SEPARATE PRE-PROCESSING FOR ARRAYS AND VECTORS DONE.
        !          21108: *      TO SIMPLIFY LATER KEY COMPARISONS, REMOVAL OF ANY TRBLK
        !          21109: *      TRAP BLOCKS FROM ENTRIES IN KEY ARRAY IS EFFECTED.
        !          21110: *
        !          21111: *      (XL) = 1(XS) = POINTER TO KEY ARRAY
        !          21112: *      (XS) = POINTER TO SORT ARRAY
        !          21113: *      WA = NUMBER OF ITEMS, N (CONVERTED TO BYTES).
        !          21114: *      WB = OFFSET TO FIRST ITEM OF ARRAYS.
        !          21115: *      WC = OFFSET TO A(0)
        !          21116: *
        !          21117: {SRT04{BLE{R6{#4*NUM01{SRT15{RETURN IF ONLY A SINGLE ITEM
        !          21118: {{MOV{R6{SRTSN{{STORE NUMBER OF ITEMS (IN BAUS)
        !          21119: {{MOV{R8{SRTSO{{STORE OFFSET TO A(0)
        !          21120: {{MOV{4*ARLEN(R10){R8{{LENGTH OF ARRAY OR VEC (=VCLEN)
        !          21121: {{ADD{R10{R8{{POINT PAST END OF ARRAY OR VECTOR
        !          21122: {{MOV{R7{SRTSF{{STORE OFFSET TO FIRST ROW
        !          21123: {{ADD{R7{R10{{POINT TO FIRST ITEM IN KEY ARRAY
        !          21124: *
        !          21125: *      LOOP THROUGH ARRAY
        !          21126: *
        !          21127: {SRT05{MOV{(R10){R9{{GET AN ENTRY
        !          21128: *
        !          21129: *      HUNT ALONG TRBLK CHAIN
        !          21130: *
        !          21131: {SRT06{BNE{(R9){#B$TRT{SRT07{JUMP OUT IF NOT TRBLK
        !          21132: {{MOV{4*TRVAL(R9){R9{{GET VALUE FIELD
        !          21133: {{BRN{SRT06{{{LOOP
        !          21134: {{EJC{{{{
        !          21135: *
        !          21136: *      SORTA (CONTINUED)
        !          21137: *
        !          21138: *      XR IS VALUE FROM END OF CHAIN
        !          21139: *
        !          21140: {SRT07{MOV{R9{(R10)+{{STORE AS ARRAY ENTRY
        !          21141: {{BLT{R10{R8{SRT05{LOOP IF NOT DONE
        !          21142: {{MOV{(SP){R10{{GET ADRS OF SORT ARRAY
        !          21143: {{MOV{SRTSF{R9{{INITIAL OFFSET TO FIRST KEY
        !          21144: {{MOV{SRTST{R7{{GET STRIDE
        !          21145: {{ADD{SRTSO{R10{{OFFSET TO A(0)
        !          21146: {{ICA{R10{{{POINT TO A(1)
        !          21147: {{MOV{SRTSN{R8{{GET N
        !          21148: {{BTW{R8{{{CONVERT FROM BYTES
        !          21149: {{MOV{R8{SRTNR{{STORE AS ROW COUNT
        !          21150: {{LCT{R8{R8{{LOOP COUNTER
        !          21151: *
        !          21152: *      STORE KEY OFFSETS AT TOP OF SORT ARRAY
        !          21153: *
        !          21154: {SRT08{MOV{R9{(R10)+{{STORE AN OFFSET
        !          21155: {{ADD{R7{R9{{BUMP OFFSET BY STRIDE
        !          21156: {{BCT{R8{SRT08{{LOOP THROUGH ROWS
        !          21157: *
        !          21158: *      PERFORM THE SORT ON OFFSETS IN SORT ARRAY.
        !          21159: *
        !          21160: *      (SRTSN)               NUMBER OF ITEMS TO SORT, N (BYTES)
        !          21161: *      (SRTSO)               OFFSET TO A(0)
        !          21162: *
        !          21163: {SRT09{MOV{SRTSN{R6{{GET N
        !          21164: {{MOV{SRTNR{R8{{GET NUMBER OF ROWS
        !          21165: {{RSH{R8{1{{I = N / 2 (WC=I, INDEX INTO ARRAY)
        !          21166: {{WTB{R8{{{CONVERT BACK TO BYTES
        !          21167: *
        !          21168: *      LOOP TO FORM INITIAL HEAP
        !          21169: *
        !          21170: {SRT10{JSR{SORTH{{{SORTH(I,N)
        !          21171: {{DCA{R8{{{I = I - 1
        !          21172: {{BNZ{R8{SRT10{{LOOP IF I GT 0
        !          21173: {{MOV{R6{R8{{I = N
        !          21174: *
        !          21175: *      SORTING LOOP. AT THIS POINT, A(1) IS THE LARGEST
        !          21176: *      ITEM, SINCE ALGORITHM INITIALISES IT AS, AND THEN MAINTAI
        !          21177: *      IT AS, ROOT OF TREE.
        !          21178: *
        !          21179: {SRT11{DCA{R8{{{I = I - 1 (N - 1 INITIALLY)
        !          21180: {{BZE{R8{SRT12{{JUMP IF DONE
        !          21181: {{MOV{(SP){R9{{GET SORT ARRAY ADDRESS
        !          21182: {{ADD{SRTSO{R9{{POINT TO A(0)
        !          21183: {{MOV{R9{R10{{A(0) ADDRESS
        !          21184: {{ADD{R8{R10{{A(I) ADDRESS
        !          21185: {{MOV{4*1(R10){R7{{COPY A(I+1)
        !          21186: {{MOV{4*1(R9){4*1(R10){{MOVE A(1) TO A(I+1)
        !          21187: {{MOV{R7{4*1(R9){{COMPLETE EXCHANGE OF A(1), A(I+1)
        !          21188: {{MOV{R8{R6{{N = I FOR SORTH
        !          21189: {{MOV{#4*NUM01{R8{{I = 1 FOR SORTH
        !          21190: {{JSR{SORTH{{{SORTH(1,N)
        !          21191: {{MOV{R6{R8{{RESTORE WC
        !          21192: {{BRN{SRT11{{{LOOP
        !          21193: {{EJC{{{{
        !          21194: *
        !          21195: *      SORTA (CONTINUED)
        !          21196: *
        !          21197: *      OFFSETS HAVE BEEN PERMUTED INTO REQUIRED ORDER BY SORT.
        !          21198: *      COPY ARRAY ELEMENTS OVER THEM.
        !          21199: *
        !          21200: {SRT12{MOV{(SP){R10{{BASE ADRS OF KEY ARRAY
        !          21201: {{MOV{R10{R8{{COPY IT
        !          21202: {{ADD{SRTSO{R8{{OFFSET OF A(0)
        !          21203: {{ADD{SRTSF{R10{{ADRS OF FIRST ROW OF SORT ARRAY
        !          21204: {{MOV{SRTST{R7{{GET STRIDE
        !          21205: {{BTW{R7{{{CONVERT TO WORDS
        !          21206: *
        !          21207: *      COPYING LOOP FOR SUCCESSIVE ITEMS. SORTED OFFSETS ARE
        !          21208: *      HELD AT END OF SORT ARRAY.
        !          21209: *
        !          21210: {SRT13{ICA{R8{{{ADRS OF NEXT OF SORTED OFFSETS
        !          21211: {{MOV{R8{R9{{COPY IT FOR ACCESS
        !          21212: {{MOV{(R9){R9{{GET OFFSET
        !          21213: {{ADD{4*1(SP){R9{{ADD KEY ARRAY BASE ADRS
        !          21214: {{LCT{R6{R7{{GET COUNT OF WORDS IN ROW
        !          21215: *
        !          21216: *      COPY A COMPLETE ROW
        !          21217: *
        !          21218: {SRT14{MOV{(R9)+{(R10)+{{MOVE A WORD
        !          21219: {{BCT{R6{SRT14{{LOOP
        !          21220: {{DCV{SRTNR{{{DECREMENT ROW COUNT
        !          21221: {{BNZ{SRTNR{SRT13{{REPEAT TILL ALL ROWS DONE
        !          21222: *
        !          21223: *      RETURN POINT
        !          21224: *
        !          21225: {SRT15{MOV{(SP)+{R9{{POP RESULT ARRAY PTR
        !          21226: {{ICA{SP{{{POP KEY ARRAY PTR
        !          21227: {{ZER{R$SXL{{{CLEAR JUNK
        !          21228: {{ZER{R$SXR{{{CLEAR JUNK
        !          21229: {{EXI{{{{RETURN
        !          21230: *
        !          21231: *      ERROR POINT
        !          21232: *
        !          21233: {SRT16{ERB{256{SORT/RSORT{{1ST ARG NOT SUITABLE ARRAY OR TABLE
        !          21234: {SRT17{ERB{258{SORT/RSORT{{2ND ARG OUT OF RANGE OR NON-INTEGER
        !          21235: {{ENP{{{{END PROCUDURE SORTA
        !          21236: {{EJC{{{{
        !          21237: *
        !          21238: *      SORTC --  COMPARE SORT KEYS
        !          21239: *
        !          21240: *      COMPARE TWO SORT KEYS GIVEN THEIR OFFSETS. IF
        !          21241: *      EQUAL, COMPARE KEY OFFSETS TO GIVE STABLE SORT.
        !          21242: *      NOTE THAT IF SRTSR IS NON-ZERO (REQUEST FOR REVERSE
        !          21243: *      SORT), THE QUOTED RETURNS ARE INVERTED.
        !          21244: *      FOR OBJECTS OF DIFFERING DATATYPES, THE ENTRY POINT
        !          21245: *      IDENTIFICATIONS ARE COMPARED.
        !          21246: *
        !          21247: *      (XL)                  BASE ADRS FOR KEYS
        !          21248: *      (WA)                  OFFSET TO KEY 1 ITEM
        !          21249: *      (WB)                  OFFSET TO KEY 2 ITEM
        !          21250: *      (SRTSR)               ZERO/NON-ZERO FOR SORT/RSORT
        !          21251: *      (SRTOF)               OFFSET WITHIN ROW TO COMPARANDS
        !          21252: *      JSR  SORTC            CALL TO COMPARE KEYS
        !          21253: *      PPM  LOC              KEY1 LESS THAN KEY2
        !          21254: *                            NORMAL RETURN, KEY1 GT THAN KEY2
        !          21255: *      (XL,XR,WA,WB)         DESTROYED
        !          21256: *
        !          21257: {SORTC{PRC{E{1{{ENTRY POINT
        !          21258: {{MOV{R6{SRTS1{{SAVE OFFSET 1
        !          21259: {{MOV{R7{SRTS2{{SAVE OFFSET 2
        !          21260: {{MOV{R8{SRTSC{{SAVE WC
        !          21261: {{ADD{SRTOF{R10{{ADD OFFSET TO COMPARAND FIELD
        !          21262: {{MOV{R10{R9{{COPY BASE + OFFSET
        !          21263: {{ADD{R6{R10{{ADD KEY1 OFFSET
        !          21264: {{ADD{R7{R9{{ADD KEY2 OFFSET
        !          21265: {{MOV{(R10){R10{{GET KEY1
        !          21266: {{MOV{(R9){R9{{GET KEY2
        !          21267: {{BNE{SRTDF{#NULLS{SRC11{JUMP IF DATATYPE FIELD NAME USED
        !          21268: {{EJC{{{{
        !          21269: *
        !          21270: *      SORTC (CONTINUED)
        !          21271: *
        !          21272: *      MERGE AFTER DEALING WITH FIELD NAME. TRY FOR STRINGS.
        !          21273: *
        !          21274: {SRC01{MOV{(R10){R8{{GET TYPE CODE
        !          21275: {{BNE{R8{(R9){SRC02{SKIP IF NOT SAME DATATYPE
        !          21276: {{BEQ{R8{#B$SCL{SRC09{JUMP IF BOTH STRINGS
        !          21277: *
        !          21278: *      NOW TRY FOR NUMERIC
        !          21279: *
        !          21280: {SRC02{MOV{R10{R$SXL{{KEEP ARG1
        !          21281: {{MOV{R9{R$SXR{{KEEP ARG2
        !          21282: {{MOV{R10{-(SP){{STACK
        !          21283: {{MOV{R9{-(SP){{ARGS
        !          21284: {{JSR{ACOMP{{{COMPARE OBJECTS
        !          21285: {{PPM{SRC10{{{NOT NUMERIC
        !          21286: {{PPM{SRC10{{{NOT NUMERIC
        !          21287: {{PPM{SRC03{{{KEY1 LESS
        !          21288: {{PPM{SRC08{{{KEYS EQUAL
        !          21289: {{PPM{SRC05{{{KEY1 GREATER
        !          21290: *
        !          21291: *      RETURN IF KEY1 SMALLER (SORT), GREATER (RSORT)
        !          21292: *
        !          21293: {SRC03{BNZ{SRTSR{SRC06{{JUMP IF RSORT
        !          21294: *
        !          21295: {SRC04{MOV{SRTSC{R8{{RESTORE WC
        !          21296: {{EXI{1{{{RETURN
        !          21297: *
        !          21298: *      RETURN IF KEY1 GREATER (SORT), SMALLER (RSORT)
        !          21299: *
        !          21300: {SRC05{BNZ{SRTSR{SRC04{{JUMP IF RSORT
        !          21301: *
        !          21302: {SRC06{MOV{SRTSC{R8{{RESTORE WC
        !          21303: {{EXI{{{{RETURN
        !          21304: *
        !          21305: *      KEYS ARE OF SAME DATATYPE
        !          21306: *
        !          21307: {SRC07{BLT{R10{R9{SRC03{ITEM FIRST CREATED IS LESS
        !          21308: {{BGT{R10{R9{SRC05{ADDRESSES RISE IN ORDER OF CREATION
        !          21309: *
        !          21310: *      DROP THROUGH OR MERGE FOR IDENTICAL OR EQUAL OBJECTS
        !          21311: *
        !          21312: {SRC08{BLT{SRTS1{SRTS2{SRC04{TEST OFFSETS OR KEY ADDRSS INSTEAD
        !          21313: {{BRN{SRC06{{{OFFSET 1 GREATER
        !          21314: {{EJC{{{{
        !          21315: *
        !          21316: *      SORTC (CONTINUED)
        !          21317: *
        !          21318: *      STRINGS
        !          21319: *
        !          21320: {SRC09{MOV{R10{-(SP){{STACK
        !          21321: {{MOV{R9{-(SP){{ARGS
        !          21322: {{JSR{LCOMP{{{COMPARE OBJECTS
        !          21323: {{PPM{{{{CANT
        !          21324: {{PPM{{{{FAIL
        !          21325: {{PPM{SRC03{{{KEY1 LESS
        !          21326: {{PPM{SRC08{{{KEYS EQUAL
        !          21327: {{PPM{SRC05{{{KEY1 GREATER
        !          21328: *
        !          21329: *      ARITHMETIC COMPARISON FAILED - RECOVER ARGS
        !          21330: *
        !          21331: {SRC10{MOV{R$SXL{R10{{GET ARG1
        !          21332: {{MOV{R$SXR{R9{{GET ARG2
        !          21333: {{MOV{(R10){R8{{GET TYPE OF KEY1
        !          21334: {{BEQ{R8{(R9){SRC07{JUMP IF KEYS OF SAME TYPE
        !          21335: {{MOV{R8{R10{{GET BLOCK TYPE WORD
        !          21336: {{MOV{(R9){R9{{GET BLOCK TYPE WORD
        !          21337: {{LEI{R10{{{ENTRY POINT ID FOR KEY1
        !          21338: {{LEI{R9{{{ENTRY POINT ID FOR KEY2
        !          21339: {{BGT{R10{R9{SRC05{JUMP IF KEY1 GT KEY2
        !          21340: {{BRN{SRC03{{{KEY1 LT KEY2
        !          21341: *
        !          21342: *      DATATYPE FIELD NAME USED
        !          21343: *
        !          21344: {SRC11{JSR{SORTF{{{CALL ROUTINE TO FIND FIELD 1
        !          21345: {{MOV{R10{-(SP){{STACK ITEM POINTER
        !          21346: {{MOV{R9{R10{{GET KEY2
        !          21347: {{JSR{SORTF{{{FIND FIELD 2
        !          21348: {{MOV{R10{R9{{PLACE AS KEY2
        !          21349: {{MOV{(SP)+{R10{{RECOVER KEY1
        !          21350: {{BRN{SRC01{{{MERGE
        !          21351: {{ENP{{{{PROCEDURE SORTC
        !          21352: {{EJC{{{{
        !          21353: *
        !          21354: *      SORTF -- FIND FIELD FOR SORTC
        !          21355: *
        !          21356: *      ROUTINE USED BY SORTC TO OBTAIN ITEM CORRESPONDING
        !          21357: *      TO A GIVEN FIELD NAME, IF THIS EXISTS, IN A PROGRAMMER
        !          21358: *      DEFINED OBJECT PASSED AS ARGUMENT.
        !          21359: *      IF SUCH A MATCH OCCURS, RECORD IS KEPT OF DATATYPE
        !          21360: *      NAME, FIELD NAME AND OFFSET TO FIELD IN ORDER TO
        !          21361: *      SHORT-CIRCUIT LATER SEARCHES ON SAME TYPE. NOTE THAT
        !          21362: *      DFBLKS ARE STORED IN STATIC AND HENCE CANNOT BE MOVED.
        !          21363: *
        !          21364: *      (SRTDF)               VRBLK POINTER OF FIELD NAME
        !          21365: *      (XL)                  POSSIBLE PDBLK POINTER
        !          21366: *      JSR  SORTF            CALL TO SEARCH FOR FIELD NAME
        !          21367: *      (XL)                  ITEM FOUND OR ORIGINAL PDBLK PTR
        !          21368: *      (WC)                  DESTROYED
        !          21369: *
        !          21370: {SORTF{PRC{E{0{{ENTRY POINT
        !          21371: {{BNE{(R10){#B$PDT{SRTF3{RETURN IF NOT PDBLK
        !          21372: {{MOV{R9{-(SP){{KEEP XR
        !          21373: {{MOV{SRTFD{R9{{GET POSSIBLE FORMER DFBLK PTR
        !          21374: {{BZE{R9{SRTF4{{JUMP IF NOT
        !          21375: {{BNE{R9{4*PDDFP(R10){SRTF4{JUMP IF NOT RIGHT DATATYPE
        !          21376: {{BNE{SRTDF{SRTFF{SRTF4{JUMP IF NOT RIGHT FIELD NAME
        !          21377: {{ADD{SRTFO{R10{{ADD OFFSET TO REQUIRED FIELD
        !          21378: *
        !          21379: *      HERE WITH XL POINTING TO FOUND FIELD
        !          21380: *
        !          21381: {SRTF1{MOV{(R10){R10{{GET ITEM FROM FIELD
        !          21382: *
        !          21383: *      RETURN POINT
        !          21384: *
        !          21385: {SRTF2{MOV{(SP)+{R9{{RESTORE XR
        !          21386: *
        !          21387: {SRTF3{EXI{{{{RETURN
        !          21388: {{EJC{{{{
        !          21389: *
        !          21390: *      SORTF (CONTINUED)
        !          21391: *
        !          21392: *      CONDUCT A SEARCH
        !          21393: *
        !          21394: {SRTF4{MOV{R10{R9{{COPY ORIGINAL POINTER
        !          21395: {{MOV{4*PDDFP(R9){R9{{POINT TO DFBLK
        !          21396: {{MOV{R9{SRTFD{{KEEP A COPY
        !          21397: {{MOV{4*FARGS(R9){R8{{GET NUMBER OF FIELDS
        !          21398: {{WTB{R8{{{CONVERT TO BYTES
        !          21399: {{ADD{4*DFLEN(R9){R9{{POINT PAST LAST FIELD
        !          21400: *
        !          21401: *      LOOP TO FIND NAME IN PDFBLK
        !          21402: *
        !          21403: {SRTF5{DCA{R8{{{COUNT DOWN
        !          21404: {{DCA{R9{{{POINT IN FRONT
        !          21405: {{BEQ{(R9){SRTDF{SRTF6{SKIP OUT IF FOUND
        !          21406: {{BNZ{R8{SRTF5{{LOOP
        !          21407: {{BRN{SRTF2{{{RETURN - NOT FOUND
        !          21408: *
        !          21409: *      FOUND
        !          21410: *
        !          21411: {SRTF6{MOV{(R9){SRTFF{{KEEP FIELD NAME PTR
        !          21412: {{ADD{#4*PDFLD{R8{{ADD OFFSET TO FIRST FIELD
        !          21413: {{MOV{R8{SRTFO{{STORE AS FIELD OFFSET
        !          21414: {{ADD{R8{R10{{POINT TO FIELD
        !          21415: {{BRN{SRTF1{{{RETURN
        !          21416: {{ENP{{{{PROCEDURE SORTF
        !          21417: {{EJC{{{{
        !          21418: *
        !          21419: *      SORTH -- HEAP ROUTINE FOR SORTA
        !          21420: *
        !          21421: *      THIS ROUTINE CONSTRUCTS A HEAP FROM ELEMENTS OF ARRAY, A.
        !          21422: *      IN THIS APPLICATION, THE ELEMENTS ARE OFFSETS TO KEYS IN
        !          21423: *      A KEY ARRAY.
        !          21424: *
        !          21425: *      (XS)                  POINTER TO SORT ARRAY BASE
        !          21426: *      1(XS)                 POINTER TO KEY ARRAY BASE
        !          21427: *      (WA)                  MAX ARRAY INDEX, N (IN BYTES)
        !          21428: *      (WC)                  OFFSET J IN A TO ROOT (IN *1 TO *N)
        !          21429: *      JSR  SORTH            CALL SORTH(J,N) TO MAKE HEAP
        !          21430: *      (XL,XR,WB)            DESTROYED
        !          21431: *
        !          21432: {SORTH{PRC{N{0{{ENTRY POINT
        !          21433: {{MOV{R6{SRTSN{{SAVE N
        !          21434: {{MOV{R8{SRTWC{{KEEP WC
        !          21435: {{MOV{(SP){R10{{SORT ARRAY BASE ADRS
        !          21436: {{ADD{SRTSO{R10{{ADD OFFSET TO A(0)
        !          21437: {{ADD{R8{R10{{POINT TO A(J)
        !          21438: {{MOV{(R10){SRTRT{{GET OFFSET TO ROOT
        !          21439: {{ADD{R8{R8{{DOUBLE J - CANT EXCEED N
        !          21440: *
        !          21441: *      LOOP TO MOVE DOWN TREE USING DOUBLED INDEX J
        !          21442: *
        !          21443: {SRH01{BGT{R8{SRTSN{SRH03{DONE IF J GT N
        !          21444: {{BEQ{R8{SRTSN{SRH02{SKIP IF J EQUALS N
        !          21445: {{MOV{(SP){R9{{SORT ARRAY BASE ADRS
        !          21446: {{MOV{4*1(SP){R10{{KEY ARRAY BASE ADRS
        !          21447: {{ADD{SRTSO{R9{{POINT TO A(0)
        !          21448: {{ADD{R8{R9{{ADRS OF A(J)
        !          21449: {{MOV{4*1(R9){R6{{GET A(J+1)
        !          21450: {{MOV{(R9){R7{{GET A(J)
        !          21451: *
        !          21452: *      COMPARE SONS. (WA) RIGHT SON, (WB) LEFT SON
        !          21453: *
        !          21454: {{JSR{SORTC{{{COMPARE KEYS - LT(A(J+1),A(J))
        !          21455: {{PPM{SRH02{{{A(J+1) LT A(J)
        !          21456: {{ICA{R8{{{POINT TO GREATER SON, A(J+1)
        !          21457: {{EJC{{{{
        !          21458: *
        !          21459: *      SORTH (CONTINUED)
        !          21460: *
        !          21461: *      COMPARE ROOT WITH GREATER SON
        !          21462: *
        !          21463: {SRH02{MOV{4*1(SP){R10{{KEY ARRAY BASE ADRS
        !          21464: {{MOV{(SP){R9{{GET SORT ARRAY ADDRESS
        !          21465: {{ADD{SRTSO{R9{{ADRS OF A(0)
        !          21466: {{MOV{R9{R7{{COPY THIS ADRS
        !          21467: {{ADD{R8{R9{{ADRS OF GREATER SON, A(J)
        !          21468: {{MOV{(R9){R6{{GET A(J)
        !          21469: {{MOV{R7{R9{{POINT BACK TO A(0)
        !          21470: {{MOV{SRTRT{R7{{GET ROOT
        !          21471: {{JSR{SORTC{{{COMPARE THEM - LT(A(J),ROOT)
        !          21472: {{PPM{SRH03{{{FATHER EXCEEDS SONS - DONE
        !          21473: {{MOV{(SP){R9{{GET SORT ARRAY ADRS
        !          21474: {{ADD{SRTSO{R9{{POINT TO A(0)
        !          21475: {{MOV{R9{R10{{COPY IT
        !          21476: {{MOV{R8{R6{{COPY J
        !          21477: {{BTW{R8{{{CONVERT TO WORDS
        !          21478: {{RSH{R8{1{{GET J/2
        !          21479: {{WTB{R8{{{CONVERT BACK TO BYTES
        !          21480: {{ADD{R6{R10{{POINT TO A(J)
        !          21481: {{ADD{R8{R9{{ADRS OF A(J/2)
        !          21482: {{MOV{(R10){(R9){{A(J/2) = A(J)
        !          21483: {{MOV{R6{R8{{RECOVER J
        !          21484: {{AOV{R8{R8{SRH03{J = J*2. DONE IF TOO BIG
        !          21485: {{BRN{SRH01{{{LOOP
        !          21486: *
        !          21487: *      FINISH BY COPYING ROOT OFFSET BACK INTO ARRAY
        !          21488: *
        !          21489: {SRH03{BTW{R8{{{CONVERT TO WORDS
        !          21490: {{RSH{R8{1{{J = J/2
        !          21491: {{WTB{R8{{{CONVERT BACK TO BYTES
        !          21492: {{MOV{(SP){R9{{SORT ARRAY ADRS
        !          21493: {{ADD{SRTSO{R9{{ADRS OF A(0)
        !          21494: {{ADD{R8{R9{{ADRS OF A(J/2)
        !          21495: {{MOV{SRTRT{(R9){{A(J/2) = ROOT
        !          21496: {{MOV{SRTSN{R6{{RESTORE WA
        !          21497: {{MOV{SRTWC{R8{{RESTORE WC
        !          21498: {{EXI{{{{RETURN
        !          21499: {{ENP{{{{END PROCEDURE SORTH
        !          21500: {{EJC{{{{
        !          21501: {{EJC{{{{
        !          21502: *
        !          21503: *      TFIND -- LOCATE TABLE ELEMENT
        !          21504: *
        !          21505: *      (XR)                  SUBSCRIPT VALUE FOR ELEMENT
        !          21506: *      (XL)                  POINTER TO TABLE
        !          21507: *      (WB)                  ZERO BY VALUE, NON-ZERO BY NAME
        !          21508: *      JSR  TFIND            CALL TO LOCATE ELEMENT
        !          21509: *      PPM  LOC              TRANSFER LOCATION IF ACCESS FAILS
        !          21510: *      (XR)                  ELEMENT VALUE (IF BY VALUE)
        !          21511: *      (XR)                  DESTROYED (IF BY NAME)
        !          21512: *      (XL,WA)               TEBLK NAME (IF BY NAME)
        !          21513: *      (XL,WA)               DESTROYED (IF BY VALUE)
        !          21514: *      (WC,RA)               DESTROYED
        !          21515: *
        !          21516: *      NOTE THAT IF A CALL BY VALUE SPECIFIES A NON-EXISTENT
        !          21517: *      SUBSCRIPT, NULL IS RETURNED WITHOUT BUILDING A NEW TEBLK.
        !          21518: *
        !          21519: {TFIND{PRC{E{1{{ENTRY POINT
        !          21520: {{MOV{R7{-(SP){{SAVE NAME/VALUE INDICATOR
        !          21521: {{MOV{R9{-(SP){{SAVE SUBSCRIPT VALUE
        !          21522: {{MOV{R10{-(SP){{SAVE TABLE POINTER
        !          21523: {{MOV{4*TBLEN(R10){R6{{LOAD LENGTH OF TBBLK
        !          21524: {{BTW{R6{{{CONVERT TO WORD COUNT
        !          21525: {{SUB{#TBBUK{R6{{GET NUMBER OF BUCKETS
        !          21526: {{MTI{R6{{{CONVERT TO INTEGER VALUE
        !          21527: {{STI{TFNSI{{{SAVE FOR LATER
        !          21528: {{MOV{(R9){R10{{LOAD FIRST WORD OF SUBSCRIPT
        !          21529: {{LEI{R10{{{LOAD BLOCK ENTRY ID (BL$XX)
        !          21530: {{BSW{R10{BL$$D{TFN00{SWITCH ON BLOCK TYPE
        !          21531: {{IFF{DUMMY{TFN00{{
        !          21532: {{IFF{DUMMY{TFN00{{
        !          21533: {{IFF{DUMMY{TFN00{{
        !          21534: {{IFF{DUMMY{TFN00{{
        !          21535: {{IFF{BL$IC{TFN02{{JUMP IF INTEGER
        !          21536: {{IFF{BL$NM{TFN04{{JUMP IF NAME
        !          21537: {{IFF{BL$P0{TFN03{{JUMP IF PATTERN
        !          21538: {{IFF{BL$P1{TFN03{{JUMP IF PATTERN
        !          21539: {{IFF{BL$P2{TFN03{{JUMP IF PATTERN
        !          21540: {{IFF{BL$RC{TFN02{{REAL
        !          21541: {{IFF{BL$SC{TFN05{{JUMP IF STRING
        !          21542: {{IFF{DUMMY{TFN00{{
        !          21543: {{IFF{DUMMY{TFN00{{
        !          21544: {{IFF{DUMMY{TFN00{{
        !          21545: {{IFF{DUMMY{TFN00{{
        !          21546: {{IFF{DUMMY{TFN00{{
        !          21547: {{IFF{DUMMY{TFN00{{
        !          21548: {{ESW{{{{END SWITCH ON BLOCK TYPE
        !          21549: *
        !          21550: *      HERE FOR BLOCKS FOR WHICH WE USE THE SECOND WORD OF THE
        !          21551: *      BLOCK AS THE HASH SOURCE (SEE BLOCK FORMATS FOR DETAILS).
        !          21552: *
        !          21553: {TFN00{MOV{4*1(R9){R6{{LOAD SECOND WORD
        !          21554: *
        !          21555: *      MERGE HERE WITH ONE WORD HASH SOURCE IN WA
        !          21556: *
        !          21557: {TFN01{MTI{R6{{{CONVERT TO INTEGER
        !          21558: {{BRN{TFN06{{{JUMP TO MERGE
        !          21559: {{EJC{{{{
        !          21560: *
        !          21561: *      TFIND (CONTINUED)
        !          21562: *
        !          21563: *      HERE FOR INTEGER OR REAL
        !          21564: *
        !          21565: {TFN02{LDI{4*1(R9){{{LOAD VALUE AS HASH SOURCE
        !          21566: {{IGE{TFN06{{{OK IF POSITIVE OR ZERO
        !          21567: {{NGI{{{{MAKE POSITIVE
        !          21568: {{IOV{TFN06{{{CLEAR POSSIBLE OVERFLOW
        !          21569: {{BRN{TFN06{{{MERGE
        !          21570: *
        !          21571: *      FOR PATTERN, USE FIRST WORD (PCODE) AS SOURCE
        !          21572: *
        !          21573: {TFN03{MOV{(R9){R6{{LOAD FIRST WORD AS HASH SOURCE
        !          21574: {{BRN{TFN01{{{MERGE BACK
        !          21575: *
        !          21576: *      FOR NAME, USE OFFSET AS HASH SOURCE
        !          21577: *
        !          21578: {TFN04{MOV{4*NMOFS(R9){R6{{LOAD OFFSET AS HASH SOURCE
        !          21579: {{BRN{TFN01{{{MERGE BACK
        !          21580: *
        !          21581: *      HERE FOR STRING
        !          21582: *
        !          21583: {TFN05{JSR{HASHS{{{CALL ROUTINE TO COMPUTE HASH
        !          21584: *
        !          21585: *      MERGE HERE WITH HASH SOURCE IN (IA)
        !          21586: *
        !          21587: {TFN06{RMI{TFNSI{{{COMPUTE HASH INDEX BY REMAINDERING
        !          21588: {{MFI{R8{{{GET AS ONE WORD INTEGER
        !          21589: {{WTB{R8{{{CONVERT TO BYTE OFFSET
        !          21590: {{MOV{(SP){R10{{GET TABLE PTR AGAIN
        !          21591: {{ADD{R8{R10{{POINT TO PROPER BUCKET
        !          21592: {{MOV{4*TBBUK(R10){R9{{LOAD FIRST TEBLK POINTER
        !          21593: {{BEQ{R9{(SP){TFN10{JUMP IF NO TEBLKS ON CHAIN
        !          21594: *
        !          21595: *      LOOP THROUGH TEBLKS ON HASH CHAIN
        !          21596: *
        !          21597: {TFN07{MOV{R9{R7{{SAVE TEBLK POINTER
        !          21598: {{MOV{4*TESUB(R9){R9{{LOAD SUBSCRIPT VALUE
        !          21599: {{MOV{4*1(SP){R10{{LOAD INPUT ARGUMENT SUBSCRIPT VAL
        !          21600: {{JSR{IDENT{{{COMPARE THEM
        !          21601: {{PPM{TFN08{{{JUMP IF EQUAL (IDENT)
        !          21602: *
        !          21603: *      HERE IF NO MATCH WITH THAT TEBLK
        !          21604: *
        !          21605: {{MOV{R7{R10{{RESTORE TEBLK POINTER
        !          21606: {{MOV{4*TENXT(R10){R9{{POINT TO NEXT TEBLK ON CHAIN
        !          21607: {{BNE{R9{(SP){TFN07{JUMP IF THERE IS ONE
        !          21608: *
        !          21609: *      HERE IF NO MATCH WITH ANY TEBLK ON CHAIN
        !          21610: *
        !          21611: {{MOV{#4*TENXT{R8{{SET OFFSET TO LINK FIELD (XL BASE)
        !          21612: {{BRN{TFN11{{{JUMP TO MERGE
        !          21613: {{EJC{{{{
        !          21614: *
        !          21615: *      TFIND (CONTINUED)
        !          21616: *
        !          21617: *      HERE WE HAVE FOUND A MATCHING ELEMENT
        !          21618: *
        !          21619: {TFN08{MOV{R7{R10{{RESTORE TEBLK POINTER
        !          21620: {{MOV{#4*TEVAL{R6{{SET TEBLK NAME OFFSET
        !          21621: {{MOV{4*2(SP){R7{{RESTORE NAME/VALUE INDICATOR
        !          21622: {{BNZ{R7{TFN09{{JUMP IF CALLED BY NAME
        !          21623: {{JSR{ACESS{{{ELSE GET VALUE
        !          21624: {{PPM{TFN12{{{JUMP IF REFERENCE FAILS
        !          21625: {{ZER{R7{{{RESTORE NAME/VALUE INDICATOR
        !          21626: *
        !          21627: *      COMMON EXIT FOR ENTRY FOUND
        !          21628: *
        !          21629: {TFN09{ADD{#4*NUM03{SP{{POP STACK ENTRIES
        !          21630: {{EXI{{{{RETURN TO TFIND CALLER
        !          21631: *
        !          21632: *      HERE IF NO TEBLKS ON THE HASH CHAIN
        !          21633: *
        !          21634: {TFN10{ADD{#4*TBBUK{R8{{GET OFFSET TO BUCKET PTR
        !          21635: {{MOV{(SP){R10{{SET TBBLK PTR AS BASE
        !          21636: *
        !          21637: *      MERGE HERE WITH (XL,WC) BASE,OFFSET OF FINAL LINK
        !          21638: *
        !          21639: {TFN11{MOV{(SP){R9{{TBBLK POINTER
        !          21640: {{MOV{4*TBINV(R9){R9{{LOAD DEFAULT VALUE IN CASE
        !          21641: {{MOV{4*2(SP){R7{{LOAD NAME/VALUE INDICATOR
        !          21642: {{BZE{R7{TFN09{{EXIT WITH DEFAULT IF VALUE CALL
        !          21643: *
        !          21644: *      HERE WE MUST BUILD A NEW TEBLK
        !          21645: *
        !          21646: {{MOV{#4*TESI${R6{{SET SIZE OF TEBLK
        !          21647: {{JSR{ALLOC{{{ALLOCATE TEBLK
        !          21648: {{ADD{R8{R10{{POINT TO HASH LINK
        !          21649: {{MOV{R9{(R10){{LINK NEW TEBLK AT END OF CHAIN
        !          21650: {{MOV{#B$TET{(R9){{STORE TYPE WORD
        !          21651: {{MOV{#NULLS{4*TEVAL(R9){{SET NULL AS INITIAL VALUE
        !          21652: {{MOV{(SP)+{4*TENXT(R9){{SET TBBLK PTR TO MARK END OF CHAIN
        !          21653: {{MOV{(SP)+{4*TESUB(R9){{STORE SUBSCRIPT VALUE
        !          21654: {{ICA{SP{{{POP PAST NAME/VALUE INDICATOR
        !          21655: {{MOV{R9{R10{{COPY TEBLK POINTER (NAME BASE)
        !          21656: {{MOV{#4*TEVAL{R6{{SET OFFSET
        !          21657: {{EXI{{{{RETURN TO CALLER WITH NEW TEBLK
        !          21658: *
        !          21659: *      ACESS FAIL RETURN
        !          21660: *
        !          21661: {TFN12{EXI{1{{{ALTERNATIVE RETURN
        !          21662: {{ENP{{{{END PROCEDURE TFIND
        !          21663: {{EJC{{{{
        !          21664: *
        !          21665: *      TRACE -- SET/RESET A TRACE ASSOCIATION
        !          21666: *
        !          21667: *      THIS PROCEDURE IS SHARED BY TRACE AND STOPTR TO
        !          21668: *      EITHER INITIATE OR STOP A TRACE RESPECTIVELY.
        !          21669: *
        !          21670: *      (XL)                  TRBLK PTR (TRACE) OR ZERO (STOPTR)
        !          21671: *      1(XS)                 FIRST ARGUMENT (NAME)
        !          21672: *      0(XS)                 SECOND ARGUMENT (TRACE TYPE)
        !          21673: *      JSR  TRACE            CALL TO SET/RESET TRACE
        !          21674: *      PPM  LOC              TRANSFER LOC IF 1ST ARG IS BAD NAME
        !          21675: *      PPM  LOC              TRANSFER LOC IF 2ND ARG IS BAD TYPE
        !          21676: *      (XS)                  POPPED
        !          21677: *      (XL,XR,WA,WB,WC,IA)   DESTROYED
        !          21678: *
        !          21679: {TRACE{PRC{N{2{{ENTRY POINT
        !          21680: {{JSR{GTSTG{{{GET TRACE TYPE STRING
        !          21681: {{PPM{TRC15{{{JUMP IF NOT STRING
        !          21682: {{PLC{R9{{{ELSE POINT TO STRING
        !          21683: {{LCH{R6{(R9){{LOAD FIRST CHARACTER
        !          21684: {{FLC{R6{{{FOLD TO UPPER CASE
        !          21685: {{MOV{(SP){R9{{LOAD NAME ARGUMENT
        !          21686: {{MOV{R10{(SP){{STACK TRBLK PTR OR ZERO
        !          21687: {{MOV{#TRTAC{R8{{SET TRTYP FOR ACCESS TRACE
        !          21688: {{BEQ{R6{#CH$LA{TRC10{JUMP IF A (ACCESS)
        !          21689: {{MOV{#TRTVL{R8{{SET TRTYP FOR VALUE TRACE
        !          21690: {{BEQ{R6{#CH$LV{TRC10{JUMP IF V (VALUE)
        !          21691: {{BZE{R6{TRC10{{JUMP IF BLANK (VALUE)
        !          21692: *
        !          21693: *      HERE FOR L,K,F,C,R
        !          21694: *
        !          21695: {{BEQ{R6{#CH$LF{TRC01{JUMP IF F (FUNCTION)
        !          21696: {{BEQ{R6{#CH$LR{TRC01{JUMP IF R (RETURN)
        !          21697: {{BEQ{R6{#CH$LL{TRC03{JUMP IF L (LABEL)
        !          21698: {{BEQ{R6{#CH$LK{TRC06{JUMP IF K (KEYWORD)
        !          21699: {{BNE{R6{#CH$LC{TRC15{ELSE ERROR IF NOT C (CALL)
        !          21700: *
        !          21701: *      HERE FOR F,C,R
        !          21702: *
        !          21703: {TRC01{JSR{GTNVR{{{POINT TO VRBLK FOR NAME
        !          21704: {{PPM{TRC16{{{JUMP IF BAD NAME
        !          21705: {{ICA{SP{{{POP STACK
        !          21706: {{MOV{4*VRFNC(R9){R9{{POINT TO FUNCTION BLOCK
        !          21707: {{BNE{(R9){#B$PFC{TRC17{ERROR IF NOT PROGRAM FUNCTION
        !          21708: {{BEQ{R6{#CH$LR{TRC02{JUMP IF R (RETURN)
        !          21709: {{EJC{{{{
        !          21710: *
        !          21711: *      TRACE (CONTINUED)
        !          21712: *
        !          21713: *      HERE FOR F,C TO SET/RESET CALL TRACE
        !          21714: *
        !          21715: {{MOV{R10{4*PFCTR(R9){{SET/RESET CALL TRACE
        !          21716: {{BEQ{R6{#CH$LC{EXNUL{EXIT WITH NULL IF C (CALL)
        !          21717: *
        !          21718: *      HERE FOR F,R TO SET/RESET RETURN TRACE
        !          21719: *
        !          21720: {TRC02{MOV{R10{4*PFRTR(R9){{SET/RESET RETURN TRACE
        !          21721: {{EXI{{{{RETURN
        !          21722: *
        !          21723: *      HERE FOR L TO SET/RESET LABEL TRACE
        !          21724: *
        !          21725: {TRC03{JSR{GTNVR{{{POINT TO VRBLK
        !          21726: {{PPM{TRC16{{{JUMP IF BAD NAME
        !          21727: {{MOV{4*VRLBL(R9){R10{{LOAD LABEL POINTER
        !          21728: {{BNE{(R10){#B$TRT{TRC04{JUMP IF NO OLD TRACE
        !          21729: {{MOV{4*TRLBL(R10){R10{{ELSE DELETE OLD TRACE ASSOCIATION
        !          21730: *
        !          21731: *      HERE WITH OLD LABEL TRACE ASSOCIATION DELETED
        !          21732: *
        !          21733: {TRC04{BEQ{R10{#STNDL{TRC16{ERROR IF UNDEFINED LABEL
        !          21734: {{MOV{(SP)+{R7{{GET TRBLK PTR AGAIN
        !          21735: {{BZE{R7{TRC05{{JUMP IF STOPTR CASE
        !          21736: {{MOV{R7{4*VRLBL(R9){{ELSE SET NEW TRBLK POINTER
        !          21737: {{MOV{#B$VRT{4*VRTRA(R9){{SET LABEL TRACE ROUTINE ADDRESS
        !          21738: {{MOV{R7{R9{{COPY TRBLK POINTER
        !          21739: {{MOV{R10{4*TRLBL(R9){{STORE REAL LABEL IN TRBLK
        !          21740: {{EXI{{{{RETURN
        !          21741: *
        !          21742: *      HERE FOR STOPTR CASE FOR LABEL
        !          21743: *
        !          21744: {TRC05{MOV{R10{4*VRLBL(R9){{STORE LABEL PTR BACK IN VRBLK
        !          21745: {{MOV{#B$VRG{4*VRTRA(R9){{STORE NORMAL TRANSFER ADDRESS
        !          21746: {{EXI{{{{RETURN
        !          21747: {{EJC{{{{
        !          21748: *
        !          21749: *      TRACE (CONTINUED)
        !          21750: *
        !          21751: *      HERE FOR K (KEYWORD)
        !          21752: *
        !          21753: {TRC06{JSR{GTNVR{{{POINT TO VRBLK
        !          21754: {{PPM{TRC16{{{ERROR IF NOT NATURAL VAR
        !          21755: {{BNZ{4*VRLEN(R9){TRC16{{ERROR IF NOT SYSTEM VAR
        !          21756: {{ICA{SP{{{POP STACK
        !          21757: {{BZE{R10{TRC07{{JUMP IF STOPTR CASE
        !          21758: {{MOV{R9{4*TRKVR(R10){{STORE VRBLK PTR IN TRBLK FOR KTREX
        !          21759: *
        !          21760: *      MERGE HERE WITH TRBLK SET UP IN WB (OR ZERO)
        !          21761: *
        !          21762: {TRC07{MOV{4*VRSVP(R9){R9{{POINT TO SVBLK
        !          21763: {{BEQ{R9{#V$ERT{TRC08{JUMP IF ERRTYPE
        !          21764: {{BEQ{R9{#V$STC{TRC09{JUMP IF STCOUNT
        !          21765: {{BNE{R9{#V$FNC{TRC17{ELSE ERROR IF NOT FNCLEVEL
        !          21766: *
        !          21767: *      FNCLEVEL
        !          21768: *
        !          21769: {{MOV{R10{R$FNC{{SET/RESET FNCLEVEL TRACE
        !          21770: {{EXI{{{{RETURN
        !          21771: *
        !          21772: *      ERRTYPE
        !          21773: *
        !          21774: {TRC08{MOV{R10{R$ERT{{SET/RESET ERRTYPE TRACE
        !          21775: {{EXI{{{{RETURN
        !          21776: *
        !          21777: *      STCOUNT
        !          21778: *
        !          21779: {TRC09{MOV{R10{R$STC{{SET/RESET STCOUNT TRACE
        !          21780: {{EXI{{{{RETURN
        !          21781: {{EJC{{{{
        !          21782: *
        !          21783: *      TRACE (CONTINUED)
        !          21784: *
        !          21785: *      A,V MERGE HERE WITH TRTYP VALUE IN WC
        !          21786: *
        !          21787: {TRC10{JSR{GTVAR{{{LOCATE VARIABLE
        !          21788: {{PPM{TRC16{{{ERROR IF NOT APPROPRIATE NAME
        !          21789: {{MOV{(SP)+{R7{{GET NEW TRBLK PTR AGAIN
        !          21790: {{ADD{R10{R6{{POINT TO VARIABLE LOCATION
        !          21791: {{MOV{R6{R9{{COPY VARIABLE POINTER
        !          21792: *
        !          21793: *      LOOP TO SEARCH TRBLK CHAIN
        !          21794: *
        !          21795: {TRC11{MOV{(R9){R10{{POINT TO NEXT ENTRY
        !          21796: {{BNE{(R10){#B$TRT{TRC13{JUMP IF NOT TRBLK
        !          21797: {{BLT{R8{4*TRTYP(R10){TRC13{JUMP IF TOO FAR OUT ON CHAIN
        !          21798: {{BEQ{R8{4*TRTYP(R10){TRC12{JUMP IF THIS MATCHES OUR TYPE
        !          21799: {{ADD{#4*TRNXT{R10{{ELSE POINT TO LINK FIELD
        !          21800: {{MOV{R10{R9{{COPY POINTER
        !          21801: {{BRN{TRC11{{{AND LOOP BACK
        !          21802: *
        !          21803: *      HERE TO DELETE AN OLD TRBLK OF THE TYPE WE WERE GIVEN
        !          21804: *
        !          21805: {TRC12{MOV{4*TRNXT(R10){R10{{GET PTR TO NEXT BLOCK OR VALUE
        !          21806: {{MOV{R10{(R9){{STORE TO DELETE THIS TRBLK
        !          21807: *
        !          21808: *      HERE AFTER DELETING ANY OLD ASSOCIATION OF THIS TYPE
        !          21809: *
        !          21810: {TRC13{BZE{R7{TRC14{{JUMP IF STOPTR CASE
        !          21811: {{MOV{R7{(R9){{ELSE LINK NEW TRBLK IN
        !          21812: {{MOV{R7{R9{{COPY TRBLK POINTER
        !          21813: {{MOV{R10{4*TRNXT(R9){{STORE FORWARD POINTER
        !          21814: {{MOV{R8{4*TRTYP(R9){{STORE APPROPRIATE TRAP TYPE CODE
        !          21815: *
        !          21816: *      HERE TO MAKE SURE VRGET,VRSTO ARE SET PROPERLY
        !          21817: *
        !          21818: {TRC14{MOV{R6{R9{{RECALL POSSIBLE VRBLK POINTER
        !          21819: {{SUB{#4*VRVAL{R9{{POINT BACK TO VRBLK
        !          21820: {{JSR{SETVR{{{SET FIELDS IF VRBLK
        !          21821: {{EXI{{{{RETURN
        !          21822: *
        !          21823: *      HERE FOR BAD TRACE TYPE
        !          21824: *
        !          21825: {TRC15{EXI{2{{{TAKE BAD TRACE TYPE ERROR EXIT
        !          21826: *
        !          21827: *      POP STACK BEFORE FAILING
        !          21828: *
        !          21829: {TRC16{ICA{SP{{{POP STACK
        !          21830: *
        !          21831: *      HERE FOR BAD NAME ARGUMENT
        !          21832: *
        !          21833: {TRC17{EXI{1{{{TAKE BAD NAME ERROR EXIT
        !          21834: {{ENP{{{{END PROCEDURE TRACE
        !          21835: {{EJC{{{{
        !          21836: *
        !          21837: *      TRBLD -- BUILD TRBLK
        !          21838: *
        !          21839: *      TRBLK IS USED BY THE INPUT, OUTPUT AND TRACE FUNCTIONS
        !          21840: *      TO CONSTRUCT A TRBLK (TRAP BLOCK)
        !          21841: *
        !          21842: *      (XR)                  TRTAG OR TRTER
        !          21843: *      (XL)                  TRFNC OR TRFPT
        !          21844: *      (WB)                  TRTYP
        !          21845: *      JSR  TRBLD            CALL TO BUILD TRBLK
        !          21846: *      (XR)                  POINTER TO TRBLK
        !          21847: *      (WA)                  DESTROYED
        !          21848: *
        !          21849: {TRBLD{PRC{E{0{{ENTRY POINT
        !          21850: {{MOV{R9{-(SP){{STACK TRTAG (OR TRFNM)
        !          21851: {{MOV{#4*TRSI${R6{{SET SIZE OF TRBLK
        !          21852: {{JSR{ALLOC{{{ALLOCATE TRBLK
        !          21853: {{MOV{#B$TRT{(R9){{STORE FIRST WORD
        !          21854: {{MOV{R10{4*TRFNC(R9){{STORE TRFNC (OR TRFPT)
        !          21855: {{MOV{(SP)+{4*TRTAG(R9){{STORE TRTAG (OR TRFNM)
        !          21856: {{MOV{R7{4*TRTYP(R9){{STORE TYPE
        !          21857: {{MOV{#NULLS{4*TRVAL(R9){{FOR NOW, A NULL VALUE
        !          21858: {{EXI{{{{RETURN TO CALLER
        !          21859: {{ENP{{{{END PROCEDURE TRBLD
        !          21860: {{EJC{{{{
        !          21861: *
        !          21862: *      TRIMR -- TRIM TRAILING BLANKS
        !          21863: *
        !          21864: *      TRIMR IS PASSED A POINTER TO AN SCBLK WHICH MUST BE THE
        !          21865: *      LAST BLOCK IN DYNAMIC STORAGE. TRAILING BLANKS ARE
        !          21866: *      TRIMMED OFF AND THE DYNAMIC STORAGE POINTER RESET TO
        !          21867: *      THE END OF THE (POSSIBLY) SHORTENED BLOCK.
        !          21868: *
        !          21869: *      (WB)                  NON-ZERO TO TRIM TRAILING BLANKS
        !          21870: *      (XR)                  POINTER TO STRING TO TRIM
        !          21871: *      JSR  TRIMR            CALL TO TRIM STRING
        !          21872: *      (XR)                  POINTER TO TRIMMED STRING
        !          21873: *      (XL,WA,WB,WC)         DESTROYED
        !          21874: *
        !          21875: *      THE CALL WITH WB ZERO STILL PERFORMS THE END ZERO PAD
        !          21876: *      AND DNAMP READJUSTMENT. IT IS USED FROM ACESS IF KVTRM=0.
        !          21877: *
        !          21878: {TRIMR{PRC{E{0{{ENTRY POINT
        !          21879: {{MOV{R9{R10{{COPY STRING POINTER
        !          21880: {{MOV{4*SCLEN(R9){R6{{LOAD STRING LENGTH
        !          21881: {{BZE{R6{TRIM2{{JUMP IF NULL INPUT
        !          21882: {{PLC{R10{R6{{ELSE POINT PAST LAST CHARACTER
        !          21883: {{BZE{R7{TRIM3{{JUMP IF NO TRIM
        !          21884: {{MOV{#CH$BL{R8{{LOAD BLANK CHARACTER
        !          21885: *
        !          21886: *      LOOP THROUGH CHARACTERS FROM RIGHT TO LEFT
        !          21887: *
        !          21888: {TRIM0{LCH{R7{-(R10){{LOAD NEXT CHARACTER
        !          21889: {{BEQ{R7{#CH$HT{TRIM1{JUMP IF HORIZONTAL TAB
        !          21890: {{BNE{R7{R8{TRIM3{JUMP IF NON-BLANK FOUND
        !          21891: {TRIM1{DCV{R6{{{ELSE DECREMENT CHARACTER COUNT
        !          21892: {{BNZ{R6{TRIM0{{LOOP BACK IF MORE TO CHECK
        !          21893: *
        !          21894: *      HERE IF RESULT IS NULL (NULL OR ALL-BLANK INPUT)
        !          21895: *
        !          21896: {TRIM2{MOV{R9{DNAMP{{WIPE OUT INPUT STRING BLOCK
        !          21897: {{MOV{#NULLS{R9{{LOAD NULL RESULT
        !          21898: {{BRN{TRIM5{{{MERGE TO EXIT
        !          21899: {{EJC{{{{
        !          21900: *
        !          21901: *      TRIMR (CONTINUED)
        !          21902: *
        !          21903: *      HERE WITH NON-BLANK FOUND (MERGE FOR NO TRIM)
        !          21904: *
        !          21905: {TRIM3{MOV{R6{4*SCLEN(R9){{SET NEW LENGTH
        !          21906: {{MOV{R9{R10{{COPY STRING POINTER
        !          21907: {{PSC{R10{R6{{READY FOR STORING BLANKS
        !          21908: {{CTB{R6{SCHAR{{GET LENGTH OF BLOCK IN BYTES
        !          21909: {{ADD{R9{R6{{POINT PAST NEW BLOCK
        !          21910: {{MOV{R6{DNAMP{{SET NEW TOP OF STORAGE POINTER
        !          21911: {{LCT{R6{#CFP$C{{GET COUNT OF CHARS IN WORD
        !          21912: {{ZER{R8{{{SET BLANK CHAR
        !          21913: *
        !          21914: *      LOOP TO ZERO PAD LAST WORD OF CHARACTERS
        !          21915: *
        !          21916: {TRIM4{SCH{R8{(R10)+{{STORE ZERO CHARACTER
        !          21917: {{BCT{R6{TRIM4{{LOOP BACK TILL ALL STORED
        !          21918: {{CSC{R10{{{COMPLETE STORE CHARACTERS
        !          21919: *
        !          21920: *      COMMON EXIT POINT
        !          21921: *
        !          21922: {TRIM5{ZER{R10{{{CLEAR GARBAGE XL POINTER
        !          21923: {{EXI{{{{RETURN TO CALLER
        !          21924: {{ENP{{{{END PROCEDURE TRIMR
        !          21925: {{EJC{{{{
        !          21926: *
        !          21927: *      TRXEQ -- EXECUTE FUNCTION TYPE TRACE
        !          21928: *
        !          21929: *      TRXEQ IS USED TO EXECUTE A TRACE WHEN A FOURTH ARGUMENT
        !          21930: *      HAS BEEN SUPPLIED. TRACE HAS ALREADY BEEN DECREMENTED.
        !          21931: *
        !          21932: *      (XR)                  POINTER TO TRBLK
        !          21933: *      (XL,WA)               NAME BASE,OFFSET FOR VARIABLE
        !          21934: *      JSR  TRXEQ            CALL TO EXECUTE TRACE
        !          21935: *      (WB,WC,RA)            DESTROYED
        !          21936: *
        !          21937: *      THE FOLLOWING STACK ENTRIES ARE MADE BEFORE PASSING
        !          21938: *      CONTROL TO THE TRACE FUNCTION USING THE CFUNC ROUTINE.
        !          21939: *
        !          21940: *                            TRXEQ RETURN POINT WORD(S)
        !          21941: *                            SAVED VALUE OF TRACE KEYWORD
        !          21942: *                            TRBLK POINTER
        !          21943: *                            NAME BASE
        !          21944: *                            NAME OFFSET
        !          21945: *                            SAVED VALUE OF R$COD
        !          21946: *                            SAVED CODE PTR (-R$COD)
        !          21947: *                            SAVED VALUE OF FLPTR
        !          21948: *      FLPTR --------------- ZERO (DUMMY FAIL OFFSET)
        !          21949: *                            NMBLK FOR VARIABLE NAME
        !          21950: *      XS ------------------ TRACE TAG
        !          21951: *
        !          21952: *      R$COD AND THE CODE PTR ARE SET TO DUMMY VALUES WHICH
        !          21953: *      CAUSE CONTROL TO RETURN TO THE TRXEQ PROCEDURE ON SUCCESS
        !          21954: *      OR FAILURE (TRXEQ IGNORES A FAILURE CONDITION).
        !          21955: *
        !          21956: {TRXEQ{PRC{R{0{{ENTRY POINT (RECURSIVE)
        !          21957: {{MOV{R$COD{R8{{LOAD CODE BLOCK POINTER
        !          21958: {{SCP{R7{{{GET CURRENT CODE POINTER
        !          21959: {{SUB{R8{R7{{MAKE CODE POINTER INTO OFFSET
        !          21960: {{MOV{KVTRA{-(SP){{STACK TRACE KEYWORD VALUE
        !          21961: {{MOV{R9{-(SP){{STACK TRBLK POINTER
        !          21962: {{MOV{R10{-(SP){{STACK NAME BASE
        !          21963: {{MOV{R6{-(SP){{STACK NAME OFFSET
        !          21964: {{MOV{R8{-(SP){{STACK CODE BLOCK POINTER
        !          21965: {{MOV{R7{-(SP){{STACK CODE POINTER OFFSET
        !          21966: {{MOV{FLPTR{-(SP){{STACK OLD FAILURE POINTER
        !          21967: {{ZER{-(SP){{{SET DUMMY FAIL OFFSET
        !          21968: {{MOV{SP{FLPTR{{SET NEW FAILURE POINTER
        !          21969: {{ZER{KVTRA{{{RESET TRACE KEYWORD TO ZERO
        !          21970: {{MOV{#TRXDC{R8{{LOAD NEW (DUMMY) CODE BLK POINTER
        !          21971: {{MOV{R8{R$COD{{SET AS CODE BLOCK POINTER
        !          21972: {{LCP{R8{{{AND NEW CODE POINTER
        !          21973: {{EJC{{{{
        !          21974: *
        !          21975: *      TRXEQ (CONTINUED)
        !          21976: *
        !          21977: *      NOW PREPARE ARGUMENTS FOR FUNCTION
        !          21978: *
        !          21979: {{MOV{R6{R7{{SAVE NAME OFFSET
        !          21980: {{MOV{#4*NMSI${R6{{LOAD NMBLK SIZE
        !          21981: {{JSR{ALLOC{{{ALLOCATE SPACE FOR NMBLK
        !          21982: {{MOV{#B$NML{(R9){{SET TYPE WORD
        !          21983: {{MOV{R10{4*NMBAS(R9){{STORE NAME BASE
        !          21984: {{MOV{R7{4*NMOFS(R9){{STORE NAME OFFSET
        !          21985: {{MOV{4*6(SP){R10{{RELOAD POINTER TO TRBLK
        !          21986: {{MOV{R9{-(SP){{STACK NMBLK POINTER (1ST ARGUMENT)
        !          21987: {{MOV{4*TRTAG(R10){-(SP){{STACK TRACE TAG (2ND ARGUMENT)
        !          21988: {{MOV{4*TRFNC(R10){R10{{LOAD TRACE FUNCTION POINTER
        !          21989: {{MOV{#NUM02{R6{{SET NUMBER OF ARGUMENTS TO TWO
        !          21990: {{BRN{CFUNC{{{JUMP TO CALL FUNCTION
        !          21991: *
        !          21992: *      SEE O$TXR FOR DETAILS OF RETURN TO THIS POINT
        !          21993: *
        !          21994: {TRXQ1{MOV{FLPTR{SP{{POINT BACK TO OUR STACK ENTRIES
        !          21995: {{ICA{SP{{{POP OFF GARBAGE FAIL OFFSET
        !          21996: {{MOV{(SP)+{FLPTR{{RESTORE OLD FAILURE POINTER
        !          21997: {{MOV{(SP)+{R7{{RELOAD CODE OFFSET
        !          21998: {{MOV{(SP)+{R8{{LOAD OLD CODE BASE POINTER
        !          21999: {{MOV{R8{R9{{COPY CDBLK POINTER
        !          22000: {{MOV{4*CDSTM(R9){KVSTN{{RESTORE STMNT NO
        !          22001: {{MOV{(SP)+{R6{{RELOAD NAME OFFSET
        !          22002: {{MOV{(SP)+{R10{{RELOAD NAME BASE
        !          22003: {{MOV{(SP)+{R9{{RELOAD TRBLK POINTER
        !          22004: {{MOV{(SP)+{KVTRA{{RESTORE TRACE KEYWORD VALUE
        !          22005: {{ADD{R8{R7{{RECOMPUTE ABSOLUTE CODE POINTER
        !          22006: {{LCP{R7{{{RESTORE CODE POINTER
        !          22007: {{MOV{R8{R$COD{{AND CODE BLOCK POINTER
        !          22008: {{EXI{{{{RETURN TO TRXEQ CALLER
        !          22009: {{ENP{{{{END PROCEDURE TRXEQ
        !          22010: {{EJC{{{{
        !          22011: *
        !          22012: *      XSCAN -- EXECUTION FUNCTION ARGUMENT SCAN
        !          22013: *
        !          22014: *      XSCAN SCANS OUT ONE TOKEN IN A PROTOTYPE ARGUMENT IN
        !          22015: *      ARRAY,CLEAR,DATA,DEFINE,LOAD FUNCTION CALLS. XSCAN
        !          22016: *      CALLS MUST BE PRECEDED BY A CALL TO THE INITIALIZATION
        !          22017: *      PROCEDURE XSCNI. THE FOLLOWING VARIABLES ARE USED.
        !          22018: *
        !          22019: *      R$XSC                 POINTER TO SCBLK FOR FUNCTION ARG
        !          22020: *      XSOFS                 OFFSET (NUM CHARS SCANNED SO FAR)
        !          22021: *
        !          22022: *      (WC)                  DELIMITER ONE (CH$XX)
        !          22023: *      (XL)                  DELIMITER TWO (CH$XX)
        !          22024: *      JSR  XSCAN            CALL TO SCAN NEXT ITEM
        !          22025: *      (XR)                  POINTER TO SCBLK FOR TOKEN SCANNED
        !          22026: *      (WA)                  COMPLETION CODE (SEE BELOW)
        !          22027: *      (WC,XL)               DESTROYED
        !          22028: *
        !          22029: *      THE SCAN STARTS FROM THE CURRENT POSITION AND CONTINUES
        !          22030: *      UNTIL ONE OF THE FOLLOWING THREE CONDITIONS OCCURS.
        !          22031: *
        !          22032: *      1)   DELIMITER ONE IS ENCOUNTERED  (WA SET TO 1)
        !          22033: *
        !          22034: *      2)   DELIMITER TWO ENCOUNTERED  (WA SET TO 2)
        !          22035: *
        !          22036: *      3)   END OF STRING ENCOUNTERED  (WA SET TO 0)
        !          22037: *
        !          22038: *      THE RESULT IS A STRING CONTAINING ALL CHARACTERS SCANNED
        !          22039: *      UP TO BUT NOT INCLUDING ANY DELIMITER CHARACTER.
        !          22040: *      THE POINTER IS LEFT POINTING PAST THE DELIMITER.
        !          22041: *
        !          22042: *      IF ONLY ONE DELIMITER IS TO BE DETECTED, DELIMITER ONE
        !          22043: *      AND DELIMITER TWO SHOULD BE SET TO THE SAME VALUE.
        !          22044: *
        !          22045: *      IN THE CASE WHERE THE END OF STRING IS ENCOUNTERED, THE
        !          22046: *      STRING INCLUDES ALL THE CHARACTERS TO THE END OF THE
        !          22047: *      STRING. NO FURTHER CALLS CAN BE MADE TO XSCAN UNTIL
        !          22048: *      XSCNI IS CALLED TO INITIALIZE A NEW ARGUMENT SCAN
        !          22049: {{EJC{{{{
        !          22050: *
        !          22051: *      XSCAN (CONTINUED)
        !          22052: *
        !          22053: {XSCAN{PRC{E{0{{ENTRY POINT
        !          22054: {{MOV{R7{XSCWB{{PRESERVE WB
        !          22055: {{MOV{R$XSC{R9{{POINT TO ARGUMENT STRING
        !          22056: {{MOV{4*SCLEN(R9){R6{{LOAD STRING LENGTH
        !          22057: {{MOV{XSOFS{R7{{LOAD CURRENT OFFSET
        !          22058: {{SUB{R7{R6{{GET NUMBER OF REMAINING CHARACTERS
        !          22059: {{BZE{R6{XSCN2{{JUMP IF NO CHARACTERS LEFT
        !          22060: {{PLC{R9{R7{{POINT TO CURRENT CHARACTER
        !          22061: *
        !          22062: *      LOOP TO SEARCH FOR DELIMITER
        !          22063: *
        !          22064: {XSCN1{LCH{R7{(R9)+{{LOAD NEXT CHARACTER
        !          22065: {{BEQ{R7{R8{XSCN3{JUMP IF DELIMITER ONE FOUND
        !          22066: {{BEQ{R7{R10{XSCN4{JUMP IF DELIMITER TWO FOUND
        !          22067: {{DCV{R6{{{DECREMENT COUNT OF CHARS LEFT
        !          22068: {{BNZ{R6{XSCN1{{LOOP BACK IF MORE CHARS TO GO
        !          22069: *
        !          22070: *      HERE FOR RUNOUT
        !          22071: *
        !          22072: {XSCN2{MOV{R$XSC{R10{{POINT TO STRING BLOCK
        !          22073: {{MOV{4*SCLEN(R10){R6{{GET STRING LENGTH
        !          22074: {{MOV{XSOFS{R7{{LOAD OFFSET
        !          22075: {{SUB{R7{R6{{GET SUBSTRING LENGTH
        !          22076: {{ZER{R$XSC{{{CLEAR STRING PTR FOR COLLECTOR
        !          22077: {{ZER{XSCRT{{{SET ZERO (RUNOUT) RETURN CODE
        !          22078: {{BRN{XSCN6{{{JUMP TO EXIT
        !          22079: {{EJC{{{{
        !          22080: *
        !          22081: *      XSCAN (CONTINUED)
        !          22082: *
        !          22083: *      HERE IF DELIMITER ONE FOUND
        !          22084: *
        !          22085: {XSCN3{MOV{#NUM01{XSCRT{{SET RETURN CODE
        !          22086: {{BRN{XSCN5{{{JUMP TO MERGE
        !          22087: *
        !          22088: *      HERE IF DELIMITER TWO FOUND
        !          22089: *
        !          22090: {XSCN4{MOV{#NUM02{XSCRT{{SET RETURN CODE
        !          22091: *
        !          22092: *      MERGE HERE AFTER DETECTING A DELIMITER
        !          22093: *
        !          22094: {XSCN5{MOV{R$XSC{R10{{RELOAD POINTER TO STRING
        !          22095: {{MOV{4*SCLEN(R10){R8{{GET ORIGINAL LENGTH OF STRING
        !          22096: {{SUB{R6{R8{{MINUS CHARS LEFT = CHARS SCANNED
        !          22097: {{MOV{R8{R6{{MOVE TO REG FOR SBSTR
        !          22098: {{MOV{XSOFS{R7{{SET OFFSET
        !          22099: {{SUB{R7{R6{{COMPUTE LENGTH FOR SBSTR
        !          22100: {{ICV{R8{{{ADJUST NEW CURSOR PAST DELIMITER
        !          22101: {{MOV{R8{XSOFS{{STORE NEW OFFSET
        !          22102: *
        !          22103: *      COMMON EXIT POINT
        !          22104: *
        !          22105: {XSCN6{ZER{R9{{{CLEAR GARBAGE CHARACTER PTR IN XR
        !          22106: {{JSR{SBSTR{{{BUILD SUB-STRING
        !          22107: {{MOV{XSCRT{R6{{LOAD RETURN CODE
        !          22108: {{MOV{XSCWB{R7{{RESTORE WB
        !          22109: {{EXI{{{{RETURN TO XSCAN CALLER
        !          22110: {{ENP{{{{END PROCEDURE XSCAN
        !          22111: {{EJC{{{{
        !          22112: *
        !          22113: *      XSCNI -- EXECUTION FUNCTION ARGUMENT SCAN
        !          22114: *
        !          22115: *      XSCNI INITIALIZES THE SCAN USED FOR PROTOTYPE ARGUMENTS
        !          22116: *      IN THE CLEAR, DEFINE, LOAD, DATA, ARRAY FUNCTIONS. SEE
        !          22117: *      XSCAN FOR THE PROCEDURE WHICH IS USED AFTER THIS CALL.
        !          22118: *
        !          22119: *      -(XS)                 ARGUMENT TO BE SCANNED (ON STACK)
        !          22120: *      JSR  XSCNI            CALL TO SCAN ARGUMENT
        !          22121: *      PPM  LOC              TRANSFER LOC IF ARG IS NOT STRING
        !          22122: *      PPM  LOC              TRANSFER LOC IF ARGUMENT IS NULL
        !          22123: *      (XS)                  POPPED
        !          22124: *      (XR,R$XSC)            ARGUMENT (SCBLK PTR)
        !          22125: *      (WA)                  ARGUMENT LENGTH
        !          22126: *      (IA,RA)               DESTROYED
        !          22127: *
        !          22128: {XSCNI{PRC{N{2{{ENTRY POINT
        !          22129: {{JSR{GTSTG{{{FETCH ARGUMENT AS STRING
        !          22130: {{PPM{XSCI1{{{JUMP IF NOT CONVERTIBLE
        !          22131: {{MOV{R9{R$XSC{{ELSE STORE SCBLK PTR FOR XSCAN
        !          22132: {{ZER{XSOFS{{{SET OFFSET TO ZERO
        !          22133: {{BZE{R6{XSCI2{{JUMP IF NULL STRING
        !          22134: {{EXI{{{{RETURN TO XSCNI CALLER
        !          22135: *
        !          22136: *      HERE IF ARGUMENT IS NOT A STRING
        !          22137: *
        !          22138: {XSCI1{EXI{1{{{TAKE NOT-STRING ERROR EXIT
        !          22139: *
        !          22140: *      HERE FOR NULL STRING
        !          22141: *
        !          22142: {XSCI2{EXI{2{{{TAKE NULL-STRING ERROR EXIT
        !          22143: {{ENP{{{{END PROCEDURE XSCNI
        !          22144: {{TTL{S{{{P I T B O L -- UTILITY ROUTINES
        !          22145: *
        !          22146: *      THE FOLLOWING SECTION CONTAINS UTILITY ROUTINES USED FOR
        !          22147: *      VARIOUS PURPOSES THROUGHOUT THE SYSTEM. THESE DIFFER
        !          22148: *      FROM THE PROCEDURES IN THE UTILITY PROCEDURES SECTION IN
        !          22149: *      THEY ARE NOT IN PROCEDURE FORM AND THEY DO NOT RETURN
        !          22150: *      TO THEIR CALLERS. THEY ARE ACCESSED WITH A BRANCH TYPE
        !          22151: *      INSTRUCTION AFTER SETTING THE REGISTERS TO APPROPRIATE
        !          22152: *      PARAMETER VALUES.
        !          22153: *
        !          22154: *      THE REGISTER VALUES REQUIRED FOR EACH ROUTINE ARE
        !          22155: *      DOCUMENTED AT THE START OF EACH ROUTINE. REGISTERS NOT
        !          22156: *      MENTIONED MAY CONTAIN ANY VALUES EXCEPT THAT XR,XL
        !          22157: *      CAN ONLY CONTAIN PROPER COLLECTABLE POINTERS.
        !          22158: *
        !          22159: *      SOME OF THESE ROUTINES WILL TOLERATE GARBAGE POINTERS
        !          22160: *      IN XL,XR ON ENTRY. THIS IS ALWAYS DOCUMENTED AND IN
        !          22161: *      EACH CASE, THE ROUTINE CLEARS THESE GARBAGE VALUES BEFORE
        !          22162: *      EXITING AFTER COMPLETING ITS TASK.
        !          22163: *
        !          22164: *      THE ROUTINES HAVE NAMES CONSISTING OF FIVE LETTERS
        !          22165: *      AND ARE ASSEMBLED IN ALPHABETICAL ORDER.
        !          22166: {{EJC{{{{
        !          22167: *      ARREF -- ARRAY REFERENCE
        !          22168: *
        !          22169: *      (XL)                  MAY BE NON-COLLECTABLE
        !          22170: *      (XR)                  NUMBER OF SUBSCRIPTS
        !          22171: *      (WB)                  SET ZERO/NONZERO FOR VALUE/NAME
        !          22172: *                            THE VALUE IN WB MUST BE COLLECTABLE
        !          22173: *      STACK                 SUBSCRIPTS AND ARRAY OPERAND
        !          22174: *      BRN  ARREF            JUMP TO CALL FUNCTION
        !          22175: *
        !          22176: *      ARREF CONTINUES BY EXECUTING THE NEXT CODE WORD WITH
        !          22177: *      THE RESULT NAME OR VALUE PLACED ON TOP OF THE STACK.
        !          22178: *      TO DEAL WITH THE PROBLEM OF ACCESSING SUBSCRIPTS IN THE
        !          22179: *      ORDER OF STACKING, XL IS USED AS A SUBSCRIPT POINTER
        !          22180: *      WORKING BELOW THE STACK POINTER.
        !          22181: *
        !          22182: {ARREF{RTN{{{{
        !          22183: {{MOV{R9{R6{{COPY NUMBER OF SUBSCRIPTS
        !          22184: {{MOV{SP{R10{{POINT TO STACK FRONT
        !          22185: {{WTB{R9{{{CONVERT TO BYTE OFFSET
        !          22186: {{ADD{R9{R10{{POINT TO ARRAY OPERAND ON STACK
        !          22187: {{ICA{R10{{{FINAL VALUE FOR STACK POPPING
        !          22188: {{MOV{R10{ARFXS{{KEEP FOR LATER
        !          22189: {{MOV{-(R10){R9{{LOAD ARRAY OPERAND POINTER
        !          22190: {{MOV{R9{R$ARF{{KEEP ARRAY POINTER
        !          22191: {{MOV{R10{R9{{SAVE POINTER TO SUBSCRIPTS
        !          22192: {{MOV{R$ARF{R10{{POINT XL TO POSSIBLE VCBLK OR TBBLK
        !          22193: {{MOV{(R10){R8{{LOAD FIRST WORD
        !          22194: {{BEQ{R8{#B$ART{ARF01{JUMP IF ARBLK
        !          22195: {{BEQ{R8{#B$VCT{ARF07{JUMP IF VCBLK
        !          22196: {{BEQ{R8{#B$TBT{ARF10{JUMP IF TBBLK
        !          22197: {{ERB{235{SUBSCRIPTED{{OPERAND IS NOT TABLE OR ARRAY
        !          22198: *
        !          22199: *      HERE FOR ARRAY (ARBLK)
        !          22200: *
        !          22201: {ARF01{BNE{R6{4*ARNDM(R10){ARF09{JUMP IF WRONG NUMBER OF DIMS
        !          22202: {{LDI{INTV0{{{GET INITIAL SUBSCRIPT OF ZERO
        !          22203: {{MOV{R9{R10{{POINT BEFORE SUBSCRIPTS
        !          22204: {{ZER{R6{{{INITIAL OFFSET TO BOUNDS
        !          22205: {{BRN{ARF03{{{JUMP INTO LOOP
        !          22206: *
        !          22207: *      LOOP TO COMPUTE SUBSCRIPTS BY MULTIPLICATIONS
        !          22208: *
        !          22209: {ARF02{MLI{4*ARDM2(R9){{{MULTIPLY TOTAL BY NEXT DIMENSION
        !          22210: *
        !          22211: *      MERGE HERE FIRST TIME
        !          22212: *
        !          22213: {ARF03{MOV{-(R10){R9{{LOAD NEXT SUBSCRIPT
        !          22214: {{STI{ARFSI{{{SAVE CURRENT SUBSCRIPT
        !          22215: {{LDI{4*ICVAL(R9){{{LOAD INTEGER VALUE IN CASE
        !          22216: {{BEQ{(R9){#B$ICL{ARF04{JUMP IF IT WAS AN INTEGER
        !          22217: {{EJC{{{{
        !          22218: *
        !          22219: *      ARREF (CONTINUED)
        !          22220: *
        !          22221: *
        !          22222: {{JSR{GTINT{{{CONVERT TO INTEGER
        !          22223: {{PPM{ARF12{{{JUMP IF NOT INTEGER
        !          22224: {{LDI{4*ICVAL(R9){{{IF OK, LOAD INTEGER VALUE
        !          22225: *
        !          22226: *      HERE WITH INTEGER SUBSCRIPT IN (IA)
        !          22227: *
        !          22228: {ARF04{MOV{R$ARF{R9{{POINT TO ARRAY
        !          22229: {{ADD{R6{R9{{OFFSET TO NEXT BOUNDS
        !          22230: {{SBI{4*ARLBD(R9){{{SUBTRACT LOW BOUND TO COMPARE
        !          22231: {{IOV{ARF13{{{OUT OF RANGE FAIL IF OVERFLOW
        !          22232: {{ILT{ARF13{{{OUT OF RANGE FAIL IF TOO SMALL
        !          22233: {{SBI{4*ARDIM(R9){{{SUBTRACT DIMENSION
        !          22234: {{IGE{ARF13{{{OUT OF RANGE FAIL IF TOO LARGE
        !          22235: {{ADI{4*ARDIM(R9){{{ELSE RESTORE SUBSCRIPT OFFSET
        !          22236: {{ADI{ARFSI{{{ADD TO CURRENT TOTAL
        !          22237: {{ADD{#4*ARDMS{R6{{POINT TO NEXT BOUNDS
        !          22238: {{BNE{R10{SP{ARF02{LOOP BACK IF MORE TO GO
        !          22239: *
        !          22240: *      HERE WITH INTEGER SUBSCRIPT COMPUTED
        !          22241: *
        !          22242: {{MFI{R6{{{GET AS ONE WORD INTEGER
        !          22243: {{WTB{R6{{{CONVERT TO OFFSET
        !          22244: {{MOV{R$ARF{R10{{POINT TO ARBLK
        !          22245: {{ADD{4*AROFS(R10){R6{{ADD OFFSET PAST BOUNDS
        !          22246: {{ICA{R6{{{ADJUST FOR ARPRO FIELD
        !          22247: {{BNZ{R7{ARF08{{EXIT WITH NAME IF NAME CALL
        !          22248: *
        !          22249: *      MERGE HERE TO GET VALUE FOR VALUE CALL
        !          22250: *
        !          22251: {ARF05{JSR{ACESS{{{GET VALUE
        !          22252: {{PPM{ARF13{{{FAIL IF ACESS FAILS
        !          22253: *
        !          22254: *      RETURN VALUE
        !          22255: *
        !          22256: {ARF06{MOV{ARFXS{SP{{POP STACK ENTRIES
        !          22257: {{ZER{R$ARF{{{FINISHED WITH ARRAY POINTER
        !          22258: {{BRN{EXIXR{{{EXIT WITH VALUE IN XR
        !          22259: {{EJC{{{{
        !          22260: *
        !          22261: *      ARREF (CONTINUED)
        !          22262: *
        !          22263: *      HERE FOR VECTOR
        !          22264: *
        !          22265: {ARF07{BNE{R6{#NUM01{ARF09{ERROR IF MORE THAN 1 SUBSCRIPT
        !          22266: {{MOV{(SP){R9{{ELSE LOAD SUBSCRIPT
        !          22267: {{JSR{GTINT{{{CONVERT TO INTEGER
        !          22268: {{PPM{ARF12{{{ERROR IF NOT INTEGER
        !          22269: {{LDI{4*ICVAL(R9){{{ELSE LOAD INTEGER VALUE
        !          22270: {{SBI{INTV1{{{SUBTRACT FOR ONES OFFSET
        !          22271: {{MFI{R6{ARF13{{GET SUBSCRIPT AS ONE WORD
        !          22272: {{ADD{#VCVLS{R6{{ADD OFFSET FOR STANDARD FIELDS
        !          22273: {{WTB{R6{{{CONVERT OFFSET TO BYTES
        !          22274: {{BGE{R6{4*VCLEN(R10){ARF13{FAIL IF OUT OF RANGE SUBSCRIPT
        !          22275: {{BZE{R7{ARF05{{BACK TO GET VALUE IF VALUE CALL
        !          22276: *
        !          22277: *      RETURN NAME
        !          22278: *
        !          22279: {ARF08{MOV{ARFXS{SP{{POP STACK ENTRIES
        !          22280: {{ZER{R$ARF{{{FINISHED WITH ARRAY POINTER
        !          22281: {{BRN{EXNAM{{{ELSE EXIT WITH NAME
        !          22282: *
        !          22283: *      HERE IF SUBSCRIPT COUNT IS WRONG
        !          22284: *
        !          22285: {ARF09{ERB{236{ARRAY{{REFERENCED WITH WRONG NUMBER OF SUBSCRIPTS
        !          22286: *
        !          22287: *      TABLE
        !          22288: *
        !          22289: {ARF10{BNE{R6{#NUM01{ARF11{ERROR IF MORE THAN 1 SUBSCRIPT
        !          22290: {{MOV{(SP){R9{{ELSE LOAD SUBSCRIPT
        !          22291: {{JSR{TFIND{{{CALL TABLE SEARCH ROUTINE
        !          22292: {{PPM{ARF13{{{FAIL IF FAILED
        !          22293: {{BNZ{R7{ARF08{{EXIT WITH NAME IF NAME CALL
        !          22294: {{BRN{ARF06{{{ELSE EXIT WITH VALUE
        !          22295: *
        !          22296: *      HERE FOR BAD TABLE REFERENCE
        !          22297: *
        !          22298: {ARF11{ERB{237{TABLE{{REFERENCED WITH MORE THAN ONE SUBSCRIPT
        !          22299: *
        !          22300: *      HERE FOR BAD SUBSCRIPT
        !          22301: *
        !          22302: {ARF12{ERB{238{ARRAY{{SUBSCRIPT IS NOT INTEGER
        !          22303: *
        !          22304: *      HERE TO SIGNAL FAILURE
        !          22305: *
        !          22306: {ARF13{ZER{R$ARF{{{FINISHED WITH ARRAY POINTER
        !          22307: {{BRN{EXFAL{{{FAIL
        !          22308: {{EJC{{{{
        !          22309: *
        !          22310: *      CFUNC -- CALL A FUNCTION
        !          22311: *
        !          22312: *      CFUNC IS USED TO CALL A SNOBOL LEVEL FUNCTION. IT IS
        !          22313: *      USED BY THE APPLY FUNCTION (S$APP), THE FUNCTION
        !          22314: *      TRACE ROUTINE (TRXEQ) AND THE MAIN FUNCTION CALL ENTRY
        !          22315: *      (O$FNC, O$FNS). IN THE LATTER CASES, CFUNC IS USED ONLY
        !          22316: *      IF THE NUMBER OF ARGUMENTS IS INCORRECT.
        !          22317: *
        !          22318: *      (XL)                  POINTER TO FUNCTION BLOCK
        !          22319: *      (WA)                  ACTUAL NUMBER OF ARGUMENTS
        !          22320: *      (XS)                  POINTS TO STACKED ARGUMENTS
        !          22321: *      BRN  CFUNC            JUMP TO CALL FUNCTION
        !          22322: *
        !          22323: *      CFUNC CONTINUES BY EXECUTING THE FUNCTION
        !          22324: *
        !          22325: {CFUNC{RTN{{{{
        !          22326: {{BLT{R6{4*FARGS(R10){CFNC1{JUMP IF TOO FEW ARGUMENTS
        !          22327: {{BEQ{R6{4*FARGS(R10){CFNC3{JUMP IF CORRECT NUMBER OF ARGS
        !          22328: *
        !          22329: *      HERE IF TOO MANY ARGUMENTS SUPPLIED, POP THEM OFF
        !          22330: *
        !          22331: {{MOV{R6{R7{{COPY ACTUAL NUMBER
        !          22332: {{SUB{4*FARGS(R10){R7{{GET NUMBER OF EXTRA ARGS
        !          22333: {{WTB{R7{{{CONVERT TO BYTES
        !          22334: {{ADD{R7{SP{{POP OFF UNWANTED ARGUMENTS
        !          22335: {{BRN{CFNC3{{{JUMP TO GO OFF TO FUNCTION
        !          22336: *
        !          22337: *      HERE IF TOO FEW ARGUMENTS
        !          22338: *
        !          22339: {CFNC1{MOV{4*FARGS(R10){R7{{LOAD REQUIRED NUMBER OF ARGUMENTS
        !          22340: {{BEQ{R7{#NINI9{CFNC3{JUMP IF CASE OF VAR NUM OF ARGS
        !          22341: {{SUB{R6{R7{{CALCULATE NUMBER MISSING
        !          22342: {{LCT{R7{R7{{SET COUNTER TO CONTROL LOOP
        !          22343: *
        !          22344: *      LOOP TO SUPPLY EXTRA NULL ARGUMENTS
        !          22345: *
        !          22346: {CFNC2{MOV{#NULLS{-(SP){{STACK A NULL ARGUMENT
        !          22347: {{BCT{R7{CFNC2{{LOOP TILL PROPER NUMBER STACKED
        !          22348: *
        !          22349: *      MERGE HERE TO JUMP TO FUNCTION
        !          22350: *
        !          22351: {CFNC3{BRI{(R10){{{JUMP THROUGH FCODE FIELD
        !          22352: {{EJC{{{{
        !          22353: *
        !          22354: *      EXFAL -- EXIT SIGNALLING SNOBOL FAILURE
        !          22355: *
        !          22356: *      (XL,XR)               MAY BE NON-COLLECTABLE
        !          22357: *      BRN  EXFAL            JUMP TO FAIL
        !          22358: *
        !          22359: *      EXFAL CONTINUES BY EXECUTING THE APPROPRIATE FAIL GOTO
        !          22360: *
        !          22361: {EXFAL{RTN{{{{
        !          22362: {{MOV{FLPTR{SP{{POP STACK
        !          22363: {{MOV{(SP){R9{{LOAD FAILURE OFFSET
        !          22364: {{ADD{R$COD{R9{{POINT TO FAILURE CODE LOCATION
        !          22365: {{LCP{R9{{{SET CODE POINTER
        !          22366: {{BRN{EXITS{{{DO NEXT CODE WORD
        !          22367: {{EJC{{{{
        !          22368: *
        !          22369: *      EXINT -- EXIT WITH INTEGER RESULT
        !          22370: *
        !          22371: *      (XL,XR)               MAY BE NONCOLLECTABLE
        !          22372: *      (IA)                  INTEGER VALUE
        !          22373: *      BRN  EXINT            JUMP TO EXIT WITH INTEGER
        !          22374: *
        !          22375: *      EXINT CONTINUES BY EXECUTING THE NEXT CODE WORD
        !          22376: *      WHICH IT DOES BY FALLING THROUGH TO EXIXR
        !          22377: *
        !          22378: {EXINT{RTN{{{{
        !          22379: {{JSR{ICBLD{{{BUILD ICBLK
        !          22380: {{EJC{{{{
        !          22381: *      EXIXR -- EXIT WITH RESULT IN (XR)
        !          22382: *
        !          22383: *      (XR)                  RESULT
        !          22384: *      (XL)                  MAY BE NON-COLLECTABLE
        !          22385: *      BRN  EXIXR            JUMP TO EXIT WITH RESULT IN (XR)
        !          22386: *
        !          22387: *      EXIXR CONTINUES BY EXECUTING THE NEXT CODE WORD
        !          22388: *      WHICH IT DOES BY FALLING THROUGH TO EXITS.
        !          22389: {EXIXR{RTN{{{{
        !          22390: *
        !          22391: {{MOV{R9{-(SP){{STACK RESULT
        !          22392: *
        !          22393: *
        !          22394: *      EXITS -- EXIT WITH RESULT IF ANY STACKED
        !          22395: *
        !          22396: *      (XR,XL)               MAY BE NON-COLLECTABLE
        !          22397: *
        !          22398: *      BRN  EXITS            ENTER EXITS ROUTINE
        !          22399: *
        !          22400: {EXITS{RTN{{{{
        !          22401: {{LCW{R9{{{LOAD NEXT CODE WORD
        !          22402: {{MOV{(R9){R10{{LOAD ENTRY ADDRESS
        !          22403: {{BRI{R10{{{JUMP TO EXECUTE NEXT CODE WORD
        !          22404: {{EJC{{{{
        !          22405: *
        !          22406: *      EXNAM -- EXIT WITH NAME IN (XL,WA)
        !          22407: *
        !          22408: *      (XL)                  NAME BASE
        !          22409: *      (WA)                  NAME OFFSET
        !          22410: *      (XR)                  MAY BE NON-COLLECTABLE
        !          22411: *      BRN  EXNAM            JUMP TO EXIT WITH NAME IN (XL,WA)
        !          22412: *
        !          22413: *      EXNAM CONTINUES BY EXECUTING THE NEXT CODE WORD
        !          22414: *
        !          22415: {EXNAM{RTN{{{{
        !          22416: {{MOV{R10{-(SP){{STACK NAME BASE
        !          22417: {{MOV{R6{-(SP){{STACK NAME OFFSET
        !          22418: {{BRN{EXITS{{{DO NEXT CODE WORD
        !          22419: {{EJC{{{{
        !          22420: *
        !          22421: *      EXNUL -- EXIT WITH NULL RESULT
        !          22422: *
        !          22423: *      (XL,XR)               MAY BE NON-COLLECTABLE
        !          22424: *      BRN  EXNUL            JUMP TO EXIT WITH NULL VALUE
        !          22425: *
        !          22426: *      EXNUL CONTINUES BY EXECUTING THE NEXT CODE WORD
        !          22427: *
        !          22428: {EXNUL{RTN{{{{
        !          22429: {{MOV{#NULLS{-(SP){{STACK NULL VALUE
        !          22430: {{BRN{EXITS{{{DO NEXT CODE WORD
        !          22431: {{EJC{{{{
        !          22432: *
        !          22433: *      EXREA -- EXIT WITH REAL RESULT
        !          22434: *
        !          22435: *      (XL,XR)               MAY BE NON-COLLECTABLE
        !          22436: *      (RA)                  REAL VALUE
        !          22437: *      BRN  EXREA            JUMP TO EXIT WITH REAL VALUE
        !          22438: *
        !          22439: *      EXREA CONTINUES BY EXECUTING THE NEXT CODE WORD
        !          22440: *
        !          22441: {EXREA{RTN{{{{
        !          22442: {{JSR{RCBLD{{{BUILD RCBLK
        !          22443: {{BRN{EXIXR{{{JUMP TO EXIT WITH RESULT IN XR
        !          22444: {{EJC{{{{
        !          22445: *
        !          22446: *      EXSID -- EXIT SETTING ID FIELD
        !          22447: *
        !          22448: *      EXSID IS USED TO EXIT AFTER BUILDING ANY OF THE FOLLOWING
        !          22449: *      BLOCKS (ARBLK, TBBLK, PDBLK, VCBLK). IT SETS THE IDVAL.
        !          22450: *
        !          22451: *      (XR)                  PTR TO BLOCK WITH IDVAL FIELD
        !          22452: *      (XL)                  MAY BE NON-COLLECTABLE
        !          22453: *      BRN  EXSID            JUMP TO EXIT AFTER SETTING ID FIELD
        !          22454: *
        !          22455: *      EXSID CONTINUES BY EXECUTING THE NEXT CODE WORD
        !          22456: *
        !          22457: {EXSID{RTN{{{{
        !          22458: {{MOV{CURID{R6{{LOAD CURRENT ID VALUE
        !          22459: {{BNE{R6{#CFP$M{EXSI1{JUMP IF NO OVERFLOW
        !          22460: {{ZER{R6{{{ELSE RESET FOR WRAPAROUND
        !          22461: *
        !          22462: *      HERE WITH OLD IDVAL IN WA
        !          22463: *
        !          22464: {EXSI1{ICV{R6{{{BUMP ID VALUE
        !          22465: {{MOV{R6{CURID{{STORE FOR NEXT TIME
        !          22466: {{MOV{R6{4*IDVAL(R9){{STORE ID VALUE
        !          22467: {{BRN{EXIXR{{{EXIT WITH RESULT IN (XR)
        !          22468: {{EJC{{{{
        !          22469: *
        !          22470: *      EXVNM -- EXIT WITH NAME OF VARIABLE
        !          22471: *
        !          22472: *      EXVNM EXITS AFTER STACKING A VALUE WHICH IS A NMBLK
        !          22473: *      REFERENCING THE NAME OF A GIVEN NATURAL VARIABLE.
        !          22474: *
        !          22475: *      (XR)                  VRBLK POINTER
        !          22476: *      (XL)                  MAY BE NON-COLLECTABLE
        !          22477: *      BRN  EXVNM            EXIT WITH VRBLK POINTER IN XR
        !          22478: *
        !          22479: {EXVNM{RTN{{{{
        !          22480: {{MOV{R9{R10{{COPY NAME BASE POINTER
        !          22481: {{MOV{#4*NMSI${R6{{SET SIZE OF NMBLK
        !          22482: {{JSR{ALLOC{{{ALLOCATE NMBLK
        !          22483: {{MOV{#B$NML{(R9){{STORE TYPE WORD
        !          22484: {{MOV{R10{4*NMBAS(R9){{STORE NAME BASE
        !          22485: {{MOV{#4*VRVAL{4*NMOFS(R9){{STORE NAME OFFSET
        !          22486: {{BRN{EXIXR{{{EXIT WITH RESULT IN XR
        !          22487: {{EJC{{{{
        !          22488: *
        !          22489: *      FLPOP -- FAIL AND POP IN PATTERN MATCHING
        !          22490: *
        !          22491: *      FLPOP POPS THE NODE AND CURSOR ON THE STACK AND THEN
        !          22492: *      DROPS THROUGH INTO FAILP TO CAUSE PATTERN FAILURE
        !          22493: *
        !          22494: *      (XL,XR)               MAY BE NON-COLLECTABLE
        !          22495: *      BRN  FLPOP            JUMP TO FAIL AND POP STACK
        !          22496: *
        !          22497: {FLPOP{RTN{{{{
        !          22498: {{ADD{#4*NUM02{SP{{POP TWO ENTRIES OFF STACK
        !          22499: {{EJC{{{{
        !          22500: *
        !          22501: *      FAILP -- FAILURE IN MATCHING PATTERN NODE
        !          22502: *
        !          22503: *      FAILP IS USED AFTER FAILING TO MATCH A PATTERN NODE.
        !          22504: *      SEE PATTERN MATCH ROUTINES FOR DETAILS OF USE.
        !          22505: *
        !          22506: *      (XL,XR)               MAY BE NON-COLLECTABLE
        !          22507: *      BRN  FAILP            SIGNAL FAILURE TO MATCH
        !          22508: *
        !          22509: *      FAILP CONTINUES BY MATCHING AN ALTERNATIVE FROM THE STACK
        !          22510: *
        !          22511: {FAILP{RTN{{{{
        !          22512: {{MOV{(SP)+{R9{{LOAD ALTERNATIVE NODE POINTER
        !          22513: {{MOV{(SP)+{R7{{RESTORE OLD CURSOR
        !          22514: {{MOV{(R9){R10{{LOAD PCODE ENTRY POINTER
        !          22515: {{BRI{R10{{{JUMP TO EXECUTE CODE FOR NODE
        !          22516: {{EJC{{{{
        !          22517: *
        !          22518: *      INDIR -- COMPUTE INDIRECT REFERENCE
        !          22519: *
        !          22520: *      (WB)                  NONZERO/ZERO FOR BY NAME/VALUE
        !          22521: *      BRN  INDIR            JUMP TO GET INDIRECT REF ON STACK
        !          22522: *
        !          22523: *      INDIR CONTINUES BY EXECUTING THE NEXT CODE WORD
        !          22524: *
        !          22525: {INDIR{RTN{{{{
        !          22526: {{MOV{(SP)+{R9{{LOAD ARGUMENT
        !          22527: {{BEQ{(R9){#B$NML{INDR2{JUMP IF A NAME
        !          22528: {{JSR{GTNVR{{{ELSE CONVERT TO VARIABLE
        !          22529: {{ERR{239{INDIRECTION{{OPERAND IS NOT NAME
        !          22530: {{BZE{R7{INDR1{{SKIP IF BY VALUE
        !          22531: {{MOV{R9{-(SP){{ELSE STACK VRBLK PTR
        !          22532: {{MOV{#4*VRVAL{-(SP){{STACK NAME OFFSET
        !          22533: {{BRN{EXITS{{{EXIT WITH RESULT ON STACK
        !          22534: *
        !          22535: *      HERE TO GET VALUE OF NATURAL VARIABLE
        !          22536: *
        !          22537: {INDR1{BRI{(R9){{{JUMP THROUGH VRGET FIELD OF VRBLK
        !          22538: *
        !          22539: *      HERE IF OPERAND IS A NAME
        !          22540: *
        !          22541: {INDR2{MOV{4*NMBAS(R9){R10{{LOAD NAME BASE
        !          22542: {{MOV{4*NMOFS(R9){R6{{LOAD NAME OFFSET
        !          22543: {{BNZ{R7{EXNAM{{EXIT IF CALLED BY NAME
        !          22544: {{JSR{ACESS{{{ELSE GET VALUE FIRST
        !          22545: {{PPM{EXFAL{{{FAIL IF ACCESS FAILS
        !          22546: {{BRN{EXIXR{{{ELSE RETURN WITH VALUE IN XR
        !          22547: {{EJC{{{{
        !          22548: *
        !          22549: *      MATCH -- INITIATE PATTERN MATCH
        !          22550: *
        !          22551: *      (WB)                  MATCH TYPE CODE
        !          22552: *      BRN  MATCH            JUMP TO INITIATE PATTERN MATCH
        !          22553: *
        !          22554: *      MATCH CONTINUES BY EXECUTING THE PATTERN MATCH. SEE
        !          22555: *      PATTERN MATCH ROUTINES (P$XXX) FOR FULL DETAILS.
        !          22556: *
        !          22557: {MATCH{RTN{{{{
        !          22558: {{MOV{(SP)+{R9{{LOAD PATTERN OPERAND
        !          22559: {{JSR{GTPAT{{{CONVERT TO PATTERN
        !          22560: {{ERR{240{PATTERN{{MATCH RIGHT OPERAND IS NOT PATTERN
        !          22561: {{MOV{R9{R10{{IF OK, SAVE PATTERN POINTER
        !          22562: {{BNZ{R7{MTCH1{{JUMP IF NOT MATCH BY NAME
        !          22563: {{MOV{(SP){R6{{ELSE LOAD NAME OFFSET
        !          22564: {{MOV{R10{-(SP){{SAVE PATTERN POINTER
        !          22565: {{MOV{4*2(SP){R10{{LOAD NAME BASE
        !          22566: {{JSR{ACESS{{{ACCESS SUBJECT VALUE
        !          22567: {{PPM{EXFAL{{{FAIL IF ACCESS FAILS
        !          22568: {{MOV{(SP){R10{{RESTORE PATTERN POINTER
        !          22569: {{MOV{R9{(SP){{STACK SUBJECT STRING VAL FOR MERGE
        !          22570: {{ZER{R7{{{RESTORE TYPE CODE
        !          22571: *
        !          22572: *      MERGE HERE WITH SUBJECT VALUE ON STACK
        !          22573: *
        !          22574: {MTCH1{MOV{(SP){R9{{LOAD SUBJECT VALUE
        !          22575: {{ZER{R$PMB{{{ASSUME NOT A BUFFER
        !          22576: {{BNE{(R9){#B$BCT{MTCHA{BRANCH IF NOT
        !          22577: {{ICA{SP{{{ELSE POP VALUE
        !          22578: {{MOV{R9{R$PMB{{SAVE POINTER
        !          22579: {{MOV{4*BCLEN(R9){R6{{GET DEFINED LENGTH
        !          22580: {{MOV{4*BCBUF(R9){R9{{POINT TO BFBLK
        !          22581: {{BRN{MTCHB{{{
        !          22582: *
        !          22583: *      HERE IF NOT BUFFER TO CONVERT TO STRING
        !          22584: *
        !          22585: {MTCHA{JSR{GTSTG{{{NOT BUFFER - CONVERT TO STRING
        !          22586: {{ERR{241{PATTERN{{MATCH LEFT OPERAND IS NOT STRING
        !          22587: *
        !          22588: *      MERGE WITH BUFFER OR STRING
        !          22589: *
        !          22590: {MTCHB{MOV{R9{R$PMS{{IF OK, STORE SUBJECT STRING POINTER
        !          22591: {{MOV{R6{PMSSL{{AND LENGTH
        !          22592: {{MOV{R7{-(SP){{STACK MATCH TYPE CODE
        !          22593: {{ZER{-(SP){{{STACK INITIAL CURSOR (ZERO)
        !          22594: {{ZER{R7{{{SET INITIAL CURSOR
        !          22595: {{MOV{SP{PMHBS{{SET HISTORY STACK BASE PTR
        !          22596: {{ZER{PMDFL{{{RESET PATTERN ASSIGNMENT FLAG
        !          22597: {{MOV{R10{R9{{SET INITIAL NODE POINTER
        !          22598: {{BNZ{KVANC{MTCH2{{JUMP IF ANCHORED
        !          22599: *
        !          22600: *      HERE FOR UNANCHORED
        !          22601: *
        !          22602: {{MOV{R9{-(SP){{STACK INITIAL NODE POINTER
        !          22603: {{MOV{#NDUNA{-(SP){{STACK POINTER TO ANCHOR MOVE NODE
        !          22604: {{BRI{(R9){{{START MATCH OF FIRST NODE
        !          22605: *
        !          22606: *      HERE IN ANCHORED MODE
        !          22607: *
        !          22608: {MTCH2{ZER{-(SP){{{DUMMY CURSOR VALUE
        !          22609: {{MOV{#NDABO{-(SP){{STACK POINTER TO ABORT NODE
        !          22610: {{BRI{(R9){{{START MATCH OF FIRST NODE
        !          22611: {{EJC{{{{
        !          22612: *
        !          22613: *      RETRN -- RETURN FROM FUNCTION
        !          22614: *
        !          22615: *      (WA)                  STRING POINTER FOR RETURN TYPE
        !          22616: *      BRN  RETRN            JUMP TO RETURN FROM (SNOBOL) FUNC
        !          22617: *
        !          22618: *      RETRN CONTINUES BY EXECUTING THE CODE AT THE RETURN POINT
        !          22619: *      THE STACK IS CLEANED OF ANY GARBAGE LEFT BY OTHER
        !          22620: *      ROUTINES WHICH MAY HAVE ALTERED FLPTR SINCE FUNCTION
        !          22621: *      ENTRY BY USING FLPRT, RESERVED FOR USE ONLY BY
        !          22622: *      FUNCTION CALL AND RETURN.
        !          22623: *
        !          22624: {RETRN{RTN{{{{
        !          22625: {{BNZ{KVFNC{RTN01{{JUMP IF NOT LEVEL ZERO
        !          22626: {{ERB{242{FUNCTION{{RETURN FROM LEVEL ZERO
        !          22627: *
        !          22628: *      HERE IF NOT LEVEL ZERO RETURN
        !          22629: *
        !          22630: {RTN01{MOV{FLPRT{SP{{POP STACK
        !          22631: {{ICA{SP{{{REMOVE FAILURE OFFSET
        !          22632: {{MOV{(SP)+{R9{{POP PFBLK POINTER
        !          22633: {{MOV{(SP)+{FLPTR{{POP FAILURE POINTER
        !          22634: {{MOV{(SP)+{FLPRT{{POP OLD FLPRT
        !          22635: {{MOV{(SP)+{R7{{POP CODE POINTER OFFSET
        !          22636: {{MOV{(SP)+{R8{{POP OLD CODE BLOCK POINTER
        !          22637: {{ADD{R8{R7{{MAKE OLD CODE POINTER ABSOLUTE
        !          22638: {{LCP{R7{{{RESTORE OLD CODE POINTER
        !          22639: {{MOV{R8{R$COD{{RESTORE OLD CODE BLOCK POINTER
        !          22640: {{DCV{KVFNC{{{DECREMENT FUNCTION LEVEL
        !          22641: {{MOV{KVTRA{R7{{LOAD TRACE
        !          22642: {{ADD{KVFTR{R7{{ADD FTRACE
        !          22643: {{BZE{R7{RTN06{{JUMP IF NO TRACING POSSIBLE
        !          22644: *
        !          22645: *      HERE IF THERE MAY BE A TRACE
        !          22646: *
        !          22647: {{MOV{R6{-(SP){{SAVE FUNCTION RETURN TYPE
        !          22648: {{MOV{R9{-(SP){{SAVE PFBLK POINTER
        !          22649: {{MOV{R6{KVRTN{{SET RTNTYPE FOR TRACE FUNCTION
        !          22650: {{MOV{R$FNC{R10{{LOAD FNCLEVEL TRBLK PTR (IF ANY)
        !          22651: {{JSR{KTREX{{{EXECUTE POSSIBLE FNCLEVEL TRACE
        !          22652: {{MOV{4*PFVBL(R9){R10{{LOAD VRBLK PTR (SGD13)
        !          22653: {{BZE{KVTRA{RTN02{{JUMP IF TRACE IS OFF
        !          22654: {{MOV{4*PFRTR(R9){R9{{ELSE LOAD RETURN TRACE TRBLK PTR
        !          22655: {{BZE{R9{RTN02{{JUMP IF NOT RETURN TRACED
        !          22656: {{DCV{KVTRA{{{ELSE DECREMENT TRACE COUNT
        !          22657: {{BZE{4*TRFNC(R9){RTN03{{JUMP IF PRINT TRACE
        !          22658: {{MOV{#4*VRVAL{R6{{ELSE SET NAME OFFSET
        !          22659: {{MOV{4*1(SP){KVRTN{{MAKE SURE RTNTYPE IS SET RIGHT
        !          22660: {{JSR{TRXEQ{{{EXECUTE FULL TRACE
        !          22661: {{EJC{{{{
        !          22662: *
        !          22663: *      RETRN (CONTINUED)
        !          22664: *
        !          22665: *      HERE TO TEST FOR FTRACE
        !          22666: *
        !          22667: {RTN02{BZE{KVFTR{RTN05{{JUMP IF FTRACE IS OFF
        !          22668: {{DCV{KVFTR{{{ELSE DECREMENT FTRACE
        !          22669: *
        !          22670: *      HERE FOR PRINT TRACE OF FUNCTION RETURN
        !          22671: *
        !          22672: {RTN03{JSR{PRTSN{{{PRINT STATEMENT NUMBER
        !          22673: {{MOV{4*1(SP){R9{{LOAD RETURN TYPE
        !          22674: {{JSR{PRTST{{{PRINT IT
        !          22675: {{MOV{#CH$BL{R6{{LOAD BLANK
        !          22676: {{JSR{PRTCH{{{PRINT IT
        !          22677: {{MOV{(SP){R10{{LOAD PFBLK PTR
        !          22678: {{MOV{4*PFVBL(R10){R10{{LOAD FUNCTION VRBLK PTR
        !          22679: {{MOV{#4*VRVAL{R6{{SET VRBLK NAME OFFSET
        !          22680: {{BNE{R9{#SCFRT{RTN04{JUMP IF NOT FRETURN CASE
        !          22681: *
        !          22682: *      FOR FRETURN, JUST PRINT FUNCTION NAME
        !          22683: *
        !          22684: {{JSR{PRTNM{{{PRINT NAME
        !          22685: {{JSR{PRTNL{{{TERMINATE PRINT LINE
        !          22686: {{BRN{RTN05{{{MERGE
        !          22687: *
        !          22688: *      HERE FOR RETURN OR NRETURN, PRINT FUNCTION NAME = VALUE
        !          22689: *
        !          22690: {RTN04{JSR{PRTNV{{{PRINT NAME = VALUE
        !          22691: *
        !          22692: *      HERE AFTER COMPLETING TRACE
        !          22693: *
        !          22694: {RTN05{MOV{(SP)+{R9{{POP PFBLK POINTER
        !          22695: {{MOV{(SP)+{R6{{POP RETURN TYPE STRING
        !          22696: *
        !          22697: *      MERGE HERE IF NO TRACE REQUIRED
        !          22698: *
        !          22699: {RTN06{MOV{R6{KVRTN{{SET RTNTYPE KEYWORD
        !          22700: {{MOV{4*PFVBL(R9){R10{{LOAD POINTER TO FN VRBLK
        !          22701: {{EJC{{{{
        !          22702: *      RETRN (CONTINUED)
        !          22703: *
        !          22704: *      GET VALUE OF FUNCTION
        !          22705: *
        !          22706: {RTN07{MOV{R10{RTNBP{{SAVE BLOCK POINTER
        !          22707: {{MOV{4*VRVAL(R10){R10{{LOAD VALUE
        !          22708: {{BEQ{(R10){#B$TRT{RTN07{LOOP BACK IF TRAPPED
        !          22709: {{MOV{R10{RTNFV{{ELSE SAVE FUNCTION RESULT VALUE
        !          22710: {{MOV{(SP)+{RTNSV{{SAVE ORIGINAL FUNCTION VALUE
        !          22711: {{MOV{(SP)+{R10{{POP SAVED POINTER
        !          22712: {{BZE{R10{RTN7C{{NO ACTION IF NONE
        !          22713: {{BZE{KVPFL{RTN7C{{JUMP IF NO PROFILING
        !          22714: {{JSR{PRFLU{{{ELSE PROFILE LAST FUNC STMT
        !          22715: {{BEQ{KVPFL{#NUM02{RTN7A{BRANCH ON VALUE OF PROFILE KEYWD
        !          22716: *
        !          22717: *      HERE IF &PROFILE = 1. START TIME MUST BE FRIGGED TO
        !          22718: *      APPEAR EARLIER THAN IT ACTUALLY IS, BY AMOUNT USED BEFORE
        !          22719: *      THE CALL.
        !          22720: *
        !          22721: {{LDI{PFSTM{{{LOAD CURRENT TIME
        !          22722: {{SBI{4*ICVAL(R10){{{FRIG BY SUBTRACTING SAVED AMOUNT
        !          22723: {{BRN{RTN7B{{{AND MERGE
        !          22724: *
        !          22725: *      HERE IF &PROFILE = 2
        !          22726: *
        !          22727: {RTN7A{LDI{4*ICVAL(R10){{{LOAD SAVED TIME
        !          22728: *
        !          22729: *      BOTH PROFILE TYPES MERGE HERE
        !          22730: *
        !          22731: {RTN7B{STI{PFSTM{{{STORE BACK CORRECT START TIME
        !          22732: *
        !          22733: *      MERGE HERE IF NO PROFILING
        !          22734: *
        !          22735: {RTN7C{MOV{4*FARGS(R9){R7{{GET NUMBER OF ARGS
        !          22736: {{ADD{4*PFNLO(R9){R7{{ADD NUMBER OF LOCALS
        !          22737: {{BZE{R7{RTN10{{JUMP IF NO ARGS/LOCALS
        !          22738: {{LCT{R7{R7{{ELSE SET LOOP COUNTER
        !          22739: {{ADD{4*PFLEN(R9){R9{{AND POINT TO END OF PFBLK
        !          22740: *
        !          22741: *      LOOP TO RESTORE FUNCTIONS AND LOCALS
        !          22742: *
        !          22743: {RTN08{MOV{-(R9){R10{{LOAD NEXT VRBLK POINTER
        !          22744: *
        !          22745: *      LOOP TO FIND VALUE BLOCK
        !          22746: *
        !          22747: {RTN09{MOV{R10{R6{{SAVE BLOCK POINTER
        !          22748: {{MOV{4*VRVAL(R10){R10{{LOAD POINTER TO NEXT VALUE
        !          22749: {{BEQ{(R10){#B$TRT{RTN09{LOOP BACK IF TRAPPED
        !          22750: {{MOV{R6{R10{{ELSE RESTORE LAST BLOCK POINTER
        !          22751: {{MOV{(SP)+{4*VRVAL(R10){{RESTORE OLD VARIABLE VALUE
        !          22752: {{BCT{R7{RTN08{{LOOP TILL ALL PROCESSED
        !          22753: *
        !          22754: *      NOW RESTORE FUNCTION VALUE AND EXIT
        !          22755: *
        !          22756: {RTN10{MOV{RTNBP{R10{{RESTORE PTR TO LAST FUNCTION BLOCK
        !          22757: {{MOV{RTNSV{4*VRVAL(R10){{RESTORE OLD FUNCTION VALUE
        !          22758: {{MOV{RTNFV{R9{{RELOAD FUNCTION RESULT
        !          22759: {{MOV{R$COD{R10{{POINT TO NEW CODE BLOCK
        !          22760: {{MOV{KVSTN{KVLST{{SET LASTNO FROM STNO
        !          22761: {{MOV{4*CDSTM(R10){KVSTN{{RESET PROPER STNO VALUE
        !          22762: {{MOV{KVRTN{R6{{LOAD RETURN TYPE
        !          22763: {{BEQ{R6{#SCRTN{EXIXR{EXIT WITH RESULT IN XR IF RETURN
        !          22764: {{BEQ{R6{#SCFRT{EXFAL{FAIL IF FRETURN
        !          22765: {{EJC{{{{
        !          22766: *
        !          22767: *      RETRN (CONTINUED)
        !          22768: *
        !          22769: *      HERE FOR NRETURN
        !          22770: *
        !          22771: {{BEQ{(R9){#B$NML{RTN11{JUMP IF IS A NAME
        !          22772: {{JSR{GTNVR{{{ELSE TRY CONVERT TO VARIABLE NAME
        !          22773: {{ERR{243{FUNCTION{{RESULT IN NRETURN IS NOT NAME
        !          22774: {{MOV{R9{R10{{IF OK, COPY VRBLK (NAME BASE) PTR
        !          22775: {{MOV{#4*VRVAL{R6{{SET NAME OFFSET
        !          22776: {{BRN{RTN12{{{AND MERGE
        !          22777: *
        !          22778: *      HERE IF RETURNED RESULT IS A NAME
        !          22779: *
        !          22780: {RTN11{MOV{4*NMBAS(R9){R10{{LOAD NAME BASE
        !          22781: {{MOV{4*NMOFS(R9){R6{{LOAD NAME OFFSET
        !          22782: *
        !          22783: *      MERGE HERE WITH RETURNED NAME IN (XL,WA)
        !          22784: *
        !          22785: {RTN12{MOV{R10{R9{{PRESERVE XL
        !          22786: {{LCW{R7{{{LOAD NEXT WORD
        !          22787: {{MOV{R9{R10{{RESTORE XL
        !          22788: {{BEQ{R7{#OFNE${EXNAM{EXIT IF CALLED BY NAME
        !          22789: {{MOV{R7{-(SP){{ELSE SAVE CODE WORD
        !          22790: {{JSR{ACESS{{{GET VALUE
        !          22791: {{PPM{EXFAL{{{FAIL IF ACCESS FAILS
        !          22792: {{MOV{R9{R10{{IF OK, COPY RESULT
        !          22793: {{MOV{(SP){R9{{RELOAD NEXT CODE WORD
        !          22794: {{MOV{R10{(SP){{STORE RESULT ON STACK
        !          22795: {{MOV{(R9){R10{{LOAD ROUTINE ADDRESS
        !          22796: {{BRI{R10{{{JUMP TO EXECUTE NEXT CODE WORD
        !          22797: {{EJC{{{{
        !          22798: *
        !          22799: *      STCOV -- SIGNAL STATEMENT COUNTER OVERFLOW
        !          22800: *
        !          22801: *      BRN  STCOV            JUMP TO SIGNAL STATEMENT COUNT OFLO
        !          22802: *
        !          22803: *      PERMIT UP TO 10 MORE STATEMENTS TO BE OBEYED SO THAT
        !          22804: *      SETEXIT TRAP CAN REGAIN CONTROL.
        !          22805: *      STCOV CONTINUES BY ISSUING THE ERROR MESSAGE
        !          22806: *
        !          22807: {STCOV{RTN{{{{
        !          22808: {{ICV{ERRFT{{{FATAL ERROR
        !          22809: {{LDI{INTVT{{{GET 10
        !          22810: {{ADI{KVSTL{{{ADD TO FORMER LIMIT
        !          22811: {{STI{KVSTL{{{STORE AS NEW STLIMIT
        !          22812: {{LDI{INTVT{{{GET 10
        !          22813: {{STI{KVSTC{{{SET AS NEW COUNT
        !          22814: {{ERB{244{STATEMENT{{COUNT EXCEEDS VALUE OF STLIMIT KEYWORD
        !          22815: {{EJC{{{{
        !          22816: *
        !          22817: *      STMGO -- START EXECUTION OF NEW STATEMENT
        !          22818: *
        !          22819: *      (XR)                  POINTER TO CDBLK FOR NEW STATEMENT
        !          22820: *      BRN  STMGO            JUMP TO EXECUTE NEW STATEMENT
        !          22821: *
        !          22822: *      STMGO CONTINUES BY EXECUTING THE NEXT STATEMENT
        !          22823: *
        !          22824: {STMGO{RTN{{{{
        !          22825: {{MOV{R9{R$COD{{SET NEW CODE BLOCK POINTER
        !          22826: {{BZE{KVPFL{STGO1{{SKIP IF NO PROFILING
        !          22827: {{JSR{PRFLU{{{ELSE PROFILE THE STATEMENT
        !          22828: {STGO1{MOV{KVSTN{KVLST{{SET LASTNO
        !          22829: {{MOV{4*CDSTM(R9){KVSTN{{SET STNO
        !          22830: {{ADD{#4*CDCOD{R9{{POINT TO FIRST CODE WORD
        !          22831: {{LCP{R9{{{SET CODE POINTER
        !          22832: {{LDI{KVSTC{{{GET STMT COUNT
        !          22833: {{ILT{EXITS{{{OMIT COUNTING IF NEGATIVE
        !          22834: {{IEQ{STCOV{{{FAIL IF STLIMIT REACHED
        !          22835: {{SBI{INTV1{{{DECREMENT
        !          22836: {{STI{KVSTC{{{REPLACE IT
        !          22837: {{BZE{R$STC{EXITS{{EXIT IF NO STCOUNT TRACE
        !          22838: *
        !          22839: *      HERE FOR STCOUNT TRACE
        !          22840: *
        !          22841: {{ZER{R9{{{CLEAR GARBAGE VALUE IN XR
        !          22842: {{MOV{R$STC{R10{{LOAD POINTER TO STCOUNT TRBLK
        !          22843: {{JSR{KTREX{{{EXECUTE KEYWORD TRACE
        !          22844: {{BRN{EXITS{{{AND THEN EXIT FOR NEXT CODE WORD
        !          22845: {{EJC{{{{
        !          22846: *
        !          22847: *      STOPR -- TERMINATE RUN
        !          22848: *
        !          22849: *      (XR)                  POINTS TO ENDING MESSAGE
        !          22850: *      BRN STOPR             JUMP TO TERMINATE RUN
        !          22851: *
        !          22852: *      TERMINATE RUN AND PRINT STATISTICS.  ON ENTRY XR POINTS
        !          22853: *      TO ENDING MESSAGE OR IS ZERO IF MESSAGE  PRINTED ALREADY.
        !          22854: *
        !          22855: {STOPR{RTN{{{{
        !          22856: {{BZE{R9{STPRA{{SKIP IF SYSAX ALREADY CALLED (REG04)
        !          22857: {{JSR{SYSAX{{{CALL AFTER EXECUTION PROC
        !          22858: {STPRA{ADD{RSMEM{DNAME{{USE THE RESERVE MEMORY
        !          22859: {{BNE{R9{#ENDMS{STPR0{SKIP IF NOT NORMAL END MESSAGE
        !          22860: {{BNZ{EXSTS{STPR3{{SKIP IF EXEC STATS SUPPRESSED
        !          22861: {{ZER{ERICH{{{CLEAR ERRORS TO INT.CH. FLAG
        !          22862: *
        !          22863: *      LOOK TO SEE IF AN ENDING MESSAGE IS SUPPLIED
        !          22864: *
        !          22865: {STPR0{JSR{PRTPG{{{EJECT PRINTER
        !          22866: {{BZE{R9{STPR1{{SKIP IF NO MESSAGE
        !          22867: {{JSR{PRTST{{{PRINT MESSAGE
        !          22868: *
        !          22869: *      MERGE HERE IF NO MESSAGE TO PRINT
        !          22870: *
        !          22871: {STPR1{JSR{PRTIS{{{PRINT BLANK LINE
        !          22872: {{MTI{KVSTN{{{GET STATEMENT NUMBER
        !          22873: {{MOV{#STPM1{R9{{POINT TO MESSAGE /IN STATEMENT XXX/
        !          22874: {{JSR{PRTMX{{{PRINT IT
        !          22875: {{JSR{SYSTM{{{GET CURRENT TIME
        !          22876: {{SBI{TIMSX{{{MINUS START TIME = ELAPSED EXEC TIM
        !          22877: {{STI{STPTI{{{SAVE FOR LATER
        !          22878: {{MOV{#STPM3{R9{{POINT TO MSG /EXECUTION TIME MSEC /
        !          22879: {{JSR{PRTMX{{{PRINT IT
        !          22880: {{LDI{KVSTL{{{GET STATEMENT LIMIT
        !          22881: {{ILT{STPR2{{{SKIP IF NEGATIVE
        !          22882: {{SBI{KVSTC{{{MINUS COUNTER = COUNT
        !          22883: {{STI{STPSI{{{SAVE
        !          22884: {{MOV{#STPM2{R9{{POINT TO MESSAGE /STMTS EXECUTED/
        !          22885: {{JSR{PRTMX{{{PRINT IT
        !          22886: {{LDI{STPTI{{{RELOAD ELAPSED TIME
        !          22887: {{MLI{INTTH{{{*1000 (MICROSECS)
        !          22888: {{IOV{STPR2{{{JUMP IF WE CANNOT COMPUTE
        !          22889: {{DVI{STPSI{{{DIVIDE BY STATEMENT COUNT
        !          22890: {{IOV{STPR2{{{JUMP IF OVERFLOW
        !          22891: {{MOV{#STPM4{R9{{POINT TO MSG (MCSEC PER STATEMENT /
        !          22892: {{JSR{PRTMX{{{PRINT IT
        !          22893: {{EJC{{{{
        !          22894: *
        !          22895: *      STOPR (CONTINUED)
        !          22896: *
        !          22897: *      MERGE TO SKIP MESSAGE (OVERFLOW OR NEGATIVE STLIMIT)
        !          22898: *
        !          22899: {STPR2{MTI{GBCNT{{{LOAD COUNT OF COLLECTIONS
        !          22900: {{MOV{#STPM5{R9{{POINT TO MESSAGE /REGENERATIONS /
        !          22901: {{JSR{PRTMX{{{PRINT IT
        !          22902: {{JSR{PRTIS{{{ONE MORE BLANK FOR LUCK
        !          22903: *
        !          22904: *      CHECK IF DUMP REQUESTED
        !          22905: *
        !          22906: {STPR3{JSR{PRFLR{{{PRINT PROFILE IF WANTED
        !          22907: *
        !          22908: {{MOV{KVDMP{R9{{LOAD DUMP KEYWORD
        !          22909: {{JSR{DUMPR{{{EXECUTE DUMP IF REQUESTED
        !          22910: {{MOV{R$FCB{R10{{GET FCBLK CHAIN HEAD
        !          22911: {{MOV{KVABE{R6{{LOAD ABEND VALUE
        !          22912: {{MOV{KVCOD{R7{{LOAD CODE VALUE
        !          22913: {{JSR{SYSEJ{{{EXIT TO SYSTEM
        !          22914: {{EJC{{{{
        !          22915: *
        !          22916: *      SUCCP -- SIGNAL SUCCESSFUL MATCH OF A PATTERN NODE
        !          22917: *
        !          22918: *      SEE PATTERN MATCH ROUTINES FOR DETAILS
        !          22919: *
        !          22920: *      (XR)                  CURRENT NODE
        !          22921: *      (WB)                  CURRENT CURSOR
        !          22922: *      (XL)                  MAY BE NON-COLLECTABLE
        !          22923: *      BRN  SUCCP            SIGNAL SUCCESSFUL PATTERN MATCH
        !          22924: *
        !          22925: *      SUCCP CONTINUES BY MATCHING THE SUCCESSOR NODE
        !          22926: *
        !          22927: {SUCCP{RTN{{{{
        !          22928: {{MOV{4*PTHEN(R9){R9{{LOAD SUCCESSOR NODE
        !          22929: {{MOV{(R9){R10{{LOAD NODE CODE ENTRY ADDRESS
        !          22930: {{BRI{R10{{{JUMP TO MATCH SUCCESSOR NODE
        !          22931: {{EJC{{{{
        !          22932: *
        !          22933: *      SYSAB -- PRINT /ABNORMAL END/ AND TERMINATE
        !          22934: *
        !          22935: {SYSAB{RTN{{{{
        !          22936: {{MOV{#ENDAB{R9{{POINT TO MESSAGE
        !          22937: {{MOV{#NUM01{KVABE{{SET ABEND FLAG
        !          22938: {{JSR{PRTNL{{{SKIP TO NEW LINE
        !          22939: {{BRN{STOPR{{{JUMP TO PACK UP
        !          22940: {{EJC{{{{
        !          22941: *
        !          22942: *      SYSTU -- PRINT /TIME UP/ AND TERMINATE
        !          22943: *
        !          22944: {SYSTU{RTN{{{{
        !          22945: {{MOV{#ENDTU{R9{{POINT TO MESSAGE
        !          22946: {{MOV{STRTU{R6{{GET CHARS /TU/
        !          22947: {{MOV{R6{KVCOD{{PUT IN KVCOD
        !          22948: {{MOV{TIMUP{R6{{CHECK STATE OF TIMEUP SWITCH
        !          22949: {{MNZ{TIMUP{{{SET SWITCH
        !          22950: {{BNZ{R6{STOPR{{STOP RUN IF ALREADY SET
        !          22951: {{ERB{245{TRANSLATION/EXECUTION{{TIME EXPIRED
        !          22952: {{TTL{S{{{P I T B O L -- STACK OVERFLOW SECTION
        !          22953: *
        !          22954: *      CONTROL COMES HERE IF THE MAIN STACK OVERFLOWS
        !          22955: *
        !          22956: {{SEC{{{{START OF STACK OVERFLOW SECTION
        !          22957: *
        !          22958: {{ICV{ERRFT{{{FATAL ERROR
        !          22959: {{MOV{FLPTR{SP{{POP STACK TO AVOID MORE FAILS
        !          22960: {{BNZ{GBCFL{STAK1{{JUMP IF GARBAGE COLLECTING
        !          22961: {{ERB{246{STACK{{OVERFLOW
        !          22962: *
        !          22963: *      NO CHANCE OF RECOVERY IN MID GARBAGE COLLECTION
        !          22964: *
        !          22965: {STAK1{MOV{#ENDSO{R9{{POINT TO MESSAGE
        !          22966: {{ZER{KVDMP{{{MEMORY IS UNDUMPABLE
        !          22967: {{BRN{STOPR{{{GIVE UP
        !          22968: {{TTL{S{{{P I T B O L -- ERROR SECTION
        !          22969: *
        !          22970: *      THIS SECTION OF CODE IS ENTERED WHENEVER A PROCEDURE
        !          22971: *      RETURN VIA AN ERR PARAMETER OR AN ERB OPCODE IS OBEYED.
        !          22972: *
        !          22973: *      (WA)                  IS THE ERROR CODE
        !          22974: *
        !          22975: *      THE GLOBAL VARIABLE STAGE INDICATES THE POINT AT WHICH
        !          22976: *      THE ERROR OCCURED AS FOLLOWS.
        !          22977: *
        !          22978: *      STAGE=STGIC           ERROR DURING INITIAL COMPILE
        !          22979: *
        !          22980: *      STAGE=STGXC           ERROR DURING COMPILE AT EXECUTE
        !          22981: *                            TIME (CODE, CONVERT FUNCTION CALLS)
        !          22982: *
        !          22983: *      STAGE=STGEV           ERROR DURING COMPILATION OF
        !          22984: *                            EXPRESSION AT EXECUTION TIME
        !          22985: *                            (EVAL, CONVERT FUNCTION CALL).
        !          22986: *
        !          22987: *      STAGE=STGXT           ERROR AT EXECUTE TIME. COMPILER
        !          22988: *                            NOT ACTIVE.
        !          22989: *
        !          22990: *      STAGE=STGCE           ERROR DURING INITIAL COMPILE AFTER
        !          22991: *                            SCANNING OUT THE END LINE.
        !          22992: *
        !          22993: *      STAGE=STGXE           ERROR DURING COMPILE AT EXECUTE
        !          22994: *                            TIME AFTER SCANNING END LINE.
        !          22995: *
        !          22996: *      STAGE=STGEE           ERROR DURING EXPRESSION EVALUATION
        !          22997: *
        !          22998: {{SEC{{{{START OF ERROR SECTION
        !          22999: *
        !          23000: {ERROR{BEQ{R$CIM{#CMLAB{CMPLE{JUMP IF ERROR IN SCANNING LABEL
        !          23001: {{MOV{R6{KVERT{{SAVE ERROR CODE
        !          23002: {{ZER{SCNRS{{{RESET RESCAN SWITCH FOR SCANE
        !          23003: {{ZER{SCNGO{{{RESET GOTO SWITCH FOR SCANE
        !          23004: {{MOV{STAGE{R9{{LOAD CURRENT STAGE
        !          23005: {{BSW{R9{STGNO{{JUMP TO APPROPRIATE ERROR CIRCUIT
        !          23006: {{IFF{STGIC{ERR01{{INITIAL COMPILE
        !          23007: {{IFF{STGXC{ERR04{{EXECUTE TIME COMPILE
        !          23008: {{IFF{STGEV{ERR04{{EVAL COMPILING EXPR.
        !          23009: {{IFF{STGXT{ERR05{{EXECUTE TIME
        !          23010: {{IFF{STGCE{ERR01{{COMPILE - AFTER END
        !          23011: {{IFF{STGXE{ERR04{{XEQ COMPILE-PAST END
        !          23012: {{IFF{STGEE{ERR04{{EVAL EVALUATING EXPR
        !          23013: {{ESW{{{{END SWITCH ON ERROR TYPE
        !          23014: {{EJC{{{{
        !          23015: *
        !          23016: *      ERROR DURING INITIAL COMPILE
        !          23017: *
        !          23018: *      THE ERROR MESSAGE IS PRINTED AS PART OF THE COMPILER
        !          23019: *      OUTPUT. THIS PRINTOUT INCLUDES THE OFFENDING LINE (IF NOT
        !          23020: *      PRINTED ALREADY) AND AN ERROR FLAG UNDER THE APPROPRIATE
        !          23021: *      COLUMN AS INDICATED BY SCNSE UNLESS SCNSE IS SET TO ZERO.
        !          23022: *
        !          23023: *      AFTER PRINTING THE MESSAGE, THE GENERATED CODE IS
        !          23024: *      MODIFIED TO AN ERROR CALL AND CONTROL IS RETURNED TO
        !          23025: *      THE CMPIL PROCEDURE AFTER RESETTING THE STACK POINTER.
        !          23026: *
        !          23027: *      IF THE ERROR OCCURS AFTER THE END LINE, CONTROL RETURNS
        !          23028: *      IN A SLIGHTLY DIFFERENT MANNER TO ENSURE PROPER CLEANUP.
        !          23029: *
        !          23030: {ERR01{MOV{CMPXS{SP{{RESET STACK POINTER
        !          23031: {{SSL{CMPSS{{{RESTORE S-R STACK PTR FOR CMPIL
        !          23032: {{BNZ{ERRSP{ERR03{{JUMP IF ERROR SUPPRESS FLAG SET
        !          23033: {{MOV{ERICH{ERLST{{SET FLAG FOR LISTR
        !          23034: {{JSR{LISTR{{{LIST LINE
        !          23035: {{JSR{PRTIS{{{TERMINATE LISTING
        !          23036: {{ZER{ERLST{{{CLEAR LISTR FLAG
        !          23037: {{MOV{SCNSE{R6{{LOAD SCAN ELEMENT OFFSET
        !          23038: {{BZE{R6{ERR02{{SKIP IF NOT SET
        !          23039: {{LCT{R7{R6{{LOOP COUNTER
        !          23040: {{ICV{R6{{{INCREASE FOR CH$EX
        !          23041: {{JSR{ALOCS{{{STRING BLOCK FOR ERROR FLAG
        !          23042: {{MOV{R9{R6{{REMEMBER STRING PTR
        !          23043: {{PSC{R9{{{READY FOR CHARACTER STORING
        !          23044: {{MOV{R$CIM{R10{{POINT TO BAD STATEMENT
        !          23045: {{PLC{R10{{{READY TO GET CHARS
        !          23046: *
        !          23047: *      LOOP TO REPLACE ALL CHARS BUT TABS BY BLANKS
        !          23048: *
        !          23049: {ERRA1{LCH{R8{(R10)+{{GET NEXT CHAR
        !          23050: {{BEQ{R8{#CH$HT{ERRA2{SKIP IF TAB
        !          23051: {{MOV{#CH$BL{R8{{GET A BLANK
        !          23052: {{EJC{{{{
        !          23053: *
        !          23054: *      MERGE TO STORE BLANK OR TAB IN ERROR LINE
        !          23055: *
        !          23056: {ERRA2{SCH{R8{(R9)+{{STORE CHAR
        !          23057: {{BCT{R7{ERRA1{{LOOP
        !          23058: {{MOV{#CH$EX{R10{{EXCLAMATION MARK
        !          23059: {{SCH{R10{(R9){{STORE AT END OF ERROR LINE
        !          23060: {{CSC{R9{{{END OF SCH LOOP
        !          23061: {{MOV{#STNPD{PROFS{{ALLOW FOR STATEMENT NUMBER
        !          23062: {{MOV{R6{R9{{POINT TO ERROR LINE
        !          23063: {{JSR{PRTST{{{PRINT ERROR LINE
        !          23064: *
        !          23065: *      HERE AFTER PLACING ERROR FLAG AS REQUIRED
        !          23066: *
        !          23067: {ERR02{JSR{ERMSG{{{GENERATE FLAG AND ERROR MESSAGE
        !          23068: {{ADD{#NUM03{LSTLC{{BUMP PAGE CTR FOR BLANK, ERROR, BLK
        !          23069: {{ZER{R9{{{IN CASE OF FATAL ERROR
        !          23070: {{BHI{ERRFT{#NUM03{STOPR{PACK UP IF SEVERAL FATALS
        !          23071: *
        !          23072: *      COUNT ERROR, INHIBIT EXECUTION IF REQUIRED
        !          23073: *
        !          23074: {{ICV{CMERC{{{BUMP ERROR COUNT
        !          23075: {{ADD{CSWER{NOXEQ{{INHIBIT XEQ IF -NOERRORS
        !          23076: {{BNE{STAGE{#STGIC{CMP10{SPECIAL RETURN IF AFTER END LINE
        !          23077: {{EJC{{{{
        !          23078: *
        !          23079: *      LOOP TO SCAN TO END OF STATEMENT
        !          23080: *
        !          23081: {ERR03{MOV{R$CIM{R9{{POINT TO START OF IMAGE
        !          23082: {{PLC{R9{{{POINT TO FIRST CHAR
        !          23083: {{LCH{R9{(R9){{GET FIRST CHAR
        !          23084: {{BEQ{R9{#CH$MN{CMPCE{JUMP IF ERROR IN CONTROL CARD
        !          23085: {{ZER{SCNRS{{{CLEAR RESCAN FLAG
        !          23086: {{MNZ{ERRSP{{{SET ERROR SUPPRESS FLAG
        !          23087: {{JSR{SCANE{{{SCAN NEXT ELEMENT
        !          23088: {{BNE{R10{#T$SMC{ERR03{LOOP BACK IF NOT STATEMENT END
        !          23089: {{ZER{ERRSP{{{CLEAR ERROR SUPPRESS FLAG
        !          23090: *
        !          23091: *      GENERATE ERROR CALL IN CODE AND RETURN TO CMPIL
        !          23092: *
        !          23093: {{MOV{#4*CDCOD{CWCOF{{RESET OFFSET IN CCBLK
        !          23094: {{MOV{#OCER${R6{{LOAD COMPILE ERROR CALL
        !          23095: {{JSR{CDWRD{{{GENERATE IT
        !          23096: {{MOV{CWCOF{4*CMSOC(SP){{SET SUCCESS FILL IN OFFSET
        !          23097: {{MNZ{4*CMFFC(SP){{{SET FAILURE FILL IN FLAG
        !          23098: {{JSR{CDWRD{{{GENERATE SUCC. FILL IN WORD
        !          23099: {{BRN{CMPSE{{{MERGE TO GENERATE ERROR AS CDFAL
        !          23100: *
        !          23101: *      ERROR DURING EXECUTE TIME COMPILE OR EXPRESSION EVALUATIO
        !          23102: *
        !          23103: *      EXECUTE TIME COMPILATION IS INITIATED THROUGH GTCOD OR
        !          23104: *      GTEXP WHICH ARE CALLED BY COMPILE, CODE OR EVAL.
        !          23105: *      BEFORE CAUSING STATEMENT FAILURE THROUGH EXFAL IT IS
        !          23106: *      HELPFUL TO SET KEYWORD ERRTEXT AND FOR GENERALITY
        !          23107: *      THESE ERRORS MAY BE HANDLED BY THE SETEXIT MECHANISM.
        !          23108: *
        !          23109: {ERR04{ZER{R$CCB{{{FORGET GARBAGE CODE BLOCK
        !          23110: {{SSL{INISS{{{RESTORE MAIN PROG S-R STACK PTR
        !          23111: {{JSR{ERTEX{{{GET FAIL MESSAGE TEXT
        !          23112: {{DCA{SP{{{ENSURE STACK OK ON LOOP START
        !          23113: *
        !          23114: *      POP STACK UNTIL FIND FLPTR FOR MOST DEEPLY NESTED PROG.
        !          23115: *      DEFINED FUNCTION CALL OR CALL OF EVAL / CODE.
        !          23116: *
        !          23117: {ERRA4{ICA{SP{{{POP STACK
        !          23118: {{BEQ{SP{FLPRT{ERRC4{JUMP IF PROG DEFINED FN CALL FOUND
        !          23119: {{BNE{SP{GTCEF{ERRA4{LOOP IF NOT EVAL OR CODE CALL YET
        !          23120: {{MOV{#STGXT{STAGE{{RE-SET STAGE FOR EXECUTE
        !          23121: {{MOV{R$GTC{R$COD{{RECOVER CODE PTR
        !          23122: {{MOV{SP{FLPTR{{RESTORE FAIL POINTER
        !          23123: {{ZER{R$CIM{{{FORGET POSSIBLE IMAGE
        !          23124: *
        !          23125: *      TEST ERRLIMIT
        !          23126: *
        !          23127: {ERRB4{BNZ{KVERL{ERR07{{JUMP IF ERRLIMIT NON-ZERO
        !          23128: {{BRN{EXFAL{{{FAIL
        !          23129: *
        !          23130: *      RETURN FROM PROG. DEFINED FUNCTION IS OUTSTANDING
        !          23131: *
        !          23132: {ERRC4{MOV{FLPTR{SP{{RESTORE STACK FROM FLPTR
        !          23133: {{BRN{ERRB4{{{MERGE
        !          23134: {{EJC{{{{
        !          23135: *
        !          23136: *      ERROR AT EXECUTE TIME.
        !          23137: *
        !          23138: *      THE ACTION TAKEN ON AN ERROR IS AS FOLLOWS.
        !          23139: *
        !          23140: *      IF ERRLIMIT KEYWORD IS ZERO, AN ABORT IS SIGNALLED,
        !          23141: *      SEE CODING FOR SYSTEM LABEL ABORT AT L$ABO.
        !          23142: *
        !          23143: *      OTHERWISE, ERRLIMIT IS DECREMENTED AND AN ERRTYPE TRACE
        !          23144: *      GENERATED IF REQUIRED. CONTROL RETURNS EITHER VIA A JUMP
        !          23145: *      TO CONTINUE (TO TAKE THE FAILURE EXIT) OR A SPECIFIED
        !          23146: *      SETEXIT TRAP IS EXECUTED AND CONTROL PASSES TO THE TRAP.
        !          23147: *      IF 3 OR MORE FATAL ERRORS OCCUR AN ABORT IS SIGNALLED
        !          23148: *      REGARDLESS OF ERRLIMIT AND SETEXIT - LOOPING IS ALL TOO
        !          23149: *      PROBABLE OTHERWISE. FATAL ERRORS INCLUDE STACK OVERFLOW
        !          23150: *      AND EXCEEDING STLIMIT.
        !          23151: *
        !          23152: {ERR05{SSL{INISS{{{RESTORE MAIN PROG S-R STACK PTR
        !          23153: {{BNZ{DMVCH{ERR08{{JUMP IF IN MID-DUMP
        !          23154: *
        !          23155: *      MERGE HERE FROM ERR08
        !          23156: *
        !          23157: {ERR06{BZE{KVERL{LABO1{{ABORT IF ERRLIMIT IS ZERO
        !          23158: {{JSR{ERTEX{{{GET FAIL MESSAGE TEXT
        !          23159: *
        !          23160: *      MERGE FROM ERR04
        !          23161: *
        !          23162: {ERR07{BGE{ERRFT{#NUM03{LABO1{ABORT IF TOO MANY FATAL ERRORS
        !          23163: {{DCV{KVERL{{{DECREMENT ERRLIMIT
        !          23164: {{MOV{R$ERT{R10{{LOAD ERRTYPE TRACE POINTER
        !          23165: {{JSR{KTREX{{{GENERATE ERRTYPE TRACE IF REQUIRED
        !          23166: {{MOV{R$COD{R$CNT{{SET CDBLK PTR FOR CONTINUATION
        !          23167: {{MOV{FLPTR{R9{{SET PTR TO FAILURE OFFSET
        !          23168: {{MOV{(R9){STXOF{{SAVE FAILURE OFFSET FOR CONTINUE
        !          23169: {{MOV{R$SXC{R9{{LOAD SETEXIT CDBLK POINTER
        !          23170: {{BZE{R9{LCNT1{{CONTINUE IF NO SETEXIT TRAP
        !          23171: {{ZER{R$SXC{{{ELSE RESET TRAP
        !          23172: {{MOV{#NULLS{STXVR{{RESET SETEXIT ARG TO NULL
        !          23173: {{MOV{(R9){R10{{LOAD PTR TO CODE BLOCK ROUTINE
        !          23174: {{BRI{R10{{{EXECUTE FIRST TRAP STATEMENT
        !          23175: *
        !          23176: *      INTERRUPTED PARTLY THROUGH A DUMP WHILST STORE IS IN A
        !          23177: *      MESS SO DO A TIDY UP OPERATION. SEE DUMPR FOR DETAILS.
        !          23178: *
        !          23179: {ERR08{MOV{DMVCH{R9{{CHAIN HEAD FOR AFFECTED VRBLKS
        !          23180: {{BZE{R9{ERR06{{DONE IF ZERO
        !          23181: {{MOV{(R9){DMVCH{{SET NEXT LINK AS CHAIN HEAD
        !          23182: {{JSR{SETVR{{{RESTORE VRGET FIELD
        !          23183: {{BRN{ERR08{{{LOOP THROUGH CHAIN
        !          23184: {{TTL{S{{{P I T B O L -- HERE ENDETH THE CODE
        !          23185: *
        !          23186: *      END OF ASSEMBLY
        !          23187: *
        !          23188: {{END{{{{END MACRO-SPITBOL ASSEMBLY

unix.superglobalmegacorp.com

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