Annotation of researchv10no/cmd/spitbol/b, revision 1.1.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: .DEF   .CASL
                    444: .DEF   .CAHT
                    445: .DEF   .CIOD
                    446: .DEF   .CSAX
                    447: .DEF   .CSN8
                    448: .DEF   .CUCF
                    449: .DEF   .CUEJ
                    450: .DEF   .CULC
                    451: .DEF   .CUST
                    452:        TTL  S P I T B O L -- PROCEDURES SECTION
                    453: *
                    454: *      THIS SECTION STARTS WITH DESCRIPTIONS OF THE OPERATING
                    455: *      SYSTEM DEPENDENT PROCEDURES WHICH ARE USED BY THE SPITBOL
                    456: *      TRANSLATOR. ALL SUCH PROCEDURES HAVE FIVE LETTER NAMES
                    457: *      BEGINNING WITH SYS. THEY ARE LISTED IN ALPHABETICAL
                    458: *      ORDER.
                    459: *      ALL PROCEDURES HAVE A  SPECIFICATION CONSISTING OF A
                    460: *      MODEL CALL, PRECEDED BY A POSSIBLY EMPTY LIST OF REGISTER
                    461: *      CONTENTS GIVING PARAMETERS AVAILABLE TO THE PROCEDURE AND
                    462: *      FOLLOWED BY A POSSIBLY EMPTY LIST OF REGISTER CONTENTS
                    463: *      REQUIRED ON RETURN FROM THE CALL OR WHICH MAY HAVE HAD
                    464: *      THEIR CONTENTS DESTROYED. ONLY THOSE REGISTERS EXPLICITLY
                    465: *      MENTIONED IN THE LIST AFTER THE CALL MAY HAVE THEIR
                    466: *      VALUES CHANGED.
                    467: *      THE SEGMENT OF CODE PROVIDING THE EXTERNAL PROCEDURES IS
                    468: *      CONVENIENTLY REFERRED TO AS OSINT (OPERATING SYSTEM
                    469: *      INTERFACE). THE SYSXX PROCEDURES IT CONTAINS PROVIDE
                    470: *      FACILITIES NOT USUALLY AVAILABLE AS PRIMITIVES IN
                    471: *      ASSEMBLY LANGUAGES. FOR PARTICULAR TARGET MACHINES,
                    472: *      IMPLEMENTORS MAY CHOOSE FOR SOME MINIMAL OPCODES WHICH
                    473: *      DO NOT HAVE REASONABLY DIRECT TRANSLATIONS, TO USE CALLS
                    474: *      OF ADDITIONAL PROCEDURES WHICH THEY PROVIDE IN OSINT.
                    475: *      E.G. MWB OR TRC MIGHT BE TRANSLATED AS JSR SYSMB,
                    476: *      JSR SYSTC IN SOME IMPLEMENTATIONS.
                    477: *
                    478: *      IN THE DESCRIPTIONS, REFERENCE IS MADE TO --BLK
                    479: *      FORMATS (-- = A PAIR OF LETTERS). SEE THE SPITBOL
                    480: *      DEFINITIONS SECTION FOR DETAILED DESCRIPTIONS OF ALL
                    481: *      SUCH BLOCK FORMATS EXCEPT FCBLK FOR WHICH SYSFC SHOULD
                    482: *      BE CONSULTED.
                    483: *
                    484: *      SECTION 0 CONTAINS INP,INR SPECIFICATIONS OF INTERNAL
                    485: *      PROCEDURES,ROUTINES. THIS GIVES A SINGLE PASS TRANSLATOR
                    486: *      INFORMATION MAKING IT EASY TO GENERATE ALTERNATIVE CALLS
                    487: *      IN THE TRANSLATION OF JSR-S FOR PROCEDURES OF DIFFERENT
                    488: *      TYPES IF THIS PROVES NECESSARY.
                    489: *
                    490:        SEC                   START OF PROCEDURES SECTION
                    491: .IF    .CSAX
                    492:        EJC
                    493: *
                    494: *      SYSAX -- AFTER EXECUTION
                    495: *
                    496: SYSAX  EXP                   DEFINE EXTERNAL ENTRY POINT
                    497: *
                    498: *      IF THE CONDITIONAL ASSEMBLY SYMBOL .CSAX IS DEFINED,
                    499: *      THIS ROUTINE IS CALLED IMMEDIATELY AFTER EXECUTION AND
                    500: *      BEFORE PRINTING OF EXECUTION STATISTICS OR DUMP OUTPUT.
                    501: *      PURPOSE OF CALL IS FOR IMPLEMENTOR TO DETERMINE AND
                    502: *      IF THE CALL IS NOT REQUIRED IT WILL BE OMITTED IF .CSAX
                    503: *      IS UNDEFINED. IN THIS CASE SYSAX NEED NOT BE CODED.
                    504: *
                    505: *      JSR  SYSAX            CALL AFTER EXECUTION
                    506: .ELSE
                    507: .FI
                    508:        EJC
                    509: *
                    510: *      SYSBX -- BEFORE EXECUTION
                    511: *
                    512: SYSBX  EXP                   DEFINE EXTERNAL ENTRY POINT
                    513: *
                    514: *      CALLED AFTER INITIAL SPITBOL COMPILATION AND BEFORE
                    515: *      COMMENCING EXECUTION IN CASE OSINT NEEDS
                    516: *      TO ASSIGN FILES OR PERFORM OTHER NECESSARY SERVICES.
                    517: *      OSINT MAY ALSO CHOOSE TO SEND A MESSAGE TO ONLINE
                    518: *      TERMINAL (IF ANY) INDICATING THAT EXECUTION IS STARTING.
                    519: *
                    520: *      JSR  SYSBX            CALL BEFORE EXECUTION STARTS
                    521:        EJC
                    522: .IF    .CNCI
                    523: *
                    524: *      SYSCI -- CONVERT INTEGER
                    525: *
                    526: SYSCI  EXP
                    527: *
                    528: *      SYSCI IS AN OPTIONAL OSINT ROUTINE THAT CAUSES SPITBOL TO
                    529: *      CALL SYSCI TO CONVERT INTEGER VALUES TO STRINGS, RATHER
                    530: *      THAN USING SPITBOL'S OWN INTERNAL CONVERSION CODE.  THIS
                    531: *      CODE MAY BE LESS EFFICIENT ON MACHINES WITH HARDWARE
                    532: *      CONVERSION INSTRUCTIONS AND IN SUCH CASES, IT MAY BE AN
                    533: *      ADVANTAGE TO INCLUDE SYSCI.  THE SYMBOL .CNCI MUST BE
                    534: *      DEFINED IF THIS ROUTINE IS TO BE USED.
                    535: *
                    536: *      THE RULES FOR CONVERTING INTEGERS TO STRINGS ARE THAT
                    537: *      POSITIVE VALUES ARE REPRESENTED WITHOUT ANY SIGN, AND
                    538: *      THERE ARE NEVER ANY LEADING BLANKS OR ZEROS, EXCEPT IN
                    539: *      THE CASE OF ZERO ITSELF WHICH IS REPRESENTED AS A SINGLE
                    540: *      ZERO DIGIT.  NEGATIVE NUMBERS ARE REPRESENTED WITH A
                    541: *      PRECEEDING MINUS SIGN.  THERE ARE NEVER ANY TRAILING
                    542: *      BLANKS, AND CONVERSION CANNOT FAIL.
                    543: *
                    544: *      (IA)                  VALUE TO BE CONVERTED
                    545: *      JSR  SYSCI            CALL TO CONVERT INTEGER VALUE
                    546: *      (XL)                  POINTER TO PSEUDO-SCBLK WITH STRING
                    547:        EJC
                    548: .FI
                    549: *
                    550: *      SYSDC -- DATE CHECK
                    551: *
                    552: SYSDC  EXP                   DEFINE EXTERNAL ENTRY POINT
                    553: *
                    554: *      SYSDC IS CALLED TO CHECK THAT THE EXPIRY DATE FOR A TRIAL
                    555: *      VERSION OF SPITBOL IS UNEXPIRED.
                    556: *
                    557: *      JSR  SYSDC            CALL TO CHECK DATE
                    558: *      RETURN ONLY IF DATE IS OK
                    559:        EJC
                    560: *
                    561: *      SYSDM  -- DUMP CORE
                    562: *
                    563: SYSDM  EXP                   DEFINE EXTERNAL ENTRY POINT
                    564: *
                    565: *      SYSDM IS CALLED BY A SPITBOL PROGRAM CALL OF DUMP(N) WITH
                    566: *      N GE 3.  ITS PURPOSE IS TO PROVIDE A CORE DUMP.
                    567: *      N COULD HOLD AN ENCODING OF THE START ADRS FOR DUMP AND
                    568: *      AMOUNT TO BE DUMPED E.G.  N = 256*A + S , S = START ADRS
                    569: *      IN KILOWORDS,  A = KILOWORDS TO DUMP
                    570: *
                    571: *      (XR)                  PARAMETER N OF CALL DUMP(N)
                    572: *      JSR  SYSDM            CALL TO ENTER ROUTINE
                    573:        EJC
                    574: *
                    575: *      SYSDT -- GET CURRENT DATE
                    576: *
                    577: SYSDT  EXP                   DEFINE EXTERNAL ENTRY POINT
                    578: *
                    579: *      SYSDT IS USED TO OBTAIN THE CURRENT DATE. THE DATE IS
                    580: *      RETURNED AS A CHARACTER STRING IN ANY FORMAT APPROPRIATE
                    581: *      TO THE OPERATING SYSTEM IN USE. IT MAY ALSO CONTAIN THE
                    582: *      CURRENT TIME OF DAY. SYSDT IS USED TO IMPLEMENT THE
                    583: *      SNOBOL4 FUNCTION DATE.
                    584: *
                    585: *      JSR  SYSDT            CALL TO GET DATE
                    586: *      (XL)                  POINTER TO BLOCK CONTAINING DATE
                    587: *
                    588: *      THE FORMAT OF THE BLOCK IS LIKE AN SCBLK EXCEPT THAT
                    589: *      THE FIRST WORD NEED NOT BE SET. THE RESULT IS COPIED
                    590: *      INTO SPITBOL DYNAMIC MEMORY ON RETURN.
                    591:        EJC
                    592: *
                    593: *      SYSEF -- EJECT FILE
                    594: *
                    595: SYSEF  EXP                   DEFINE EXTERNAL ENTRY POINT
                    596: *
                    597: *      SYSEF IS USED TO WRITE A PAGE EJECT TO A NAMED FILE. IT
                    598: *      MAY ONLY BE USED FOR FILES WHERE THIS CONCEPT MAKES
                    599: *      SENSE. NOTE THAT SYSEF IS NOT NORMALLY USED FOR THE
                    600: *      STANDARD OUTPUT FILE (SEE SYSEP).
                    601: *
                    602: *      (WA)                  PTR TO FCBLK OR ZERO
                    603: *      (XR)                  EJECT ARGUMENT (SCBLK PTR)
                    604: *      JSR  SYSEF            CALL TO EJECT FILE
                    605: *      PPM  LOC              RETURN HERE IF FILE DOES NOT EXIST
                    606: *      PPM  LOC              RETURN HERE IF INAPPROPRIATE FILE
                    607: *      PPM  LOC              RETURN HERE IF I/O ERROR
                    608:        EJC
                    609: *
                    610: *      SYSEJ -- END OF JOB
                    611: *
                    612: SYSEJ  EXP                   DEFINE EXTERNAL ENTRY POINT
                    613: *
                    614: *      SYSEJ IS CALLED ONCE AT THE END OF EXECUTION TO
                    615: *      TERMINATE THE RUN. THE SIGNIFICANCE OF THE ABEND AND
                    616: *      CODE VALUES IS SYSTEM DEPENDENT. IN GENERAL, THE CODE
                    617: *      VALUE SHOULD BE MADE AVAILABLE FOR TESTING, AND THE
                    618: *      ABEND VALUE SHOULD CAUSE SOME POST-MORTEM ACTION SUCH AS
                    619: *      A DUMP. NOTE THAT SYSEJ DOES NOT RETURN TO ITS CALLER.
                    620: *      SEE SYSXI FOR DETAILS OF FCBLK CHAIN
                    621: *
                    622: *      (WA)                  VALUE OF ABEND KEYWORD
                    623: *      (WB)                  VALUE OF CODE KEYWORD
                    624: *      (XL)                  O OR PTR TO HEAD OF FCBLK CHAIN
                    625: *      JSR  SYSEJ            CALL TO END JOB
                    626: *
                    627: *      THE FOLLOWING SPECIAL VALUES ARE USED AS CODES IN (WB)
                    628: *      999  EXECUTION SUPPRESSED
                    629: *      998  STANDARD OUTPUT FILE FULL OR UNAVAILABLE IN A SYSXI
                    630: *           LOAD MODULE. IN THESE CASES (WA) CONTAINS THE NUMBER
                    631: *           OF THE STATEMENT CAUSING PREMATURE TERMINATION.
                    632:        EJC
                    633: *
                    634: *      SYSEM -- GET ERROR MESSAGE TEXT
                    635: *
                    636: SYSEM  EXP                   DEFINE EXTERNAL ENTRY POINT
                    637: *
                    638: *      SYSEM IS USED TO OBTAIN THE TEXT OF ERR, ERB CALLS IN THE
                    639: *      SOURCE PROGRAM GIVEN THE ERROR CODE NUMBER. IT IS ALLOWED
                    640: *      TO RETURN A NULL STRING IF THIS FACILITY IS UNAVAILABLE.
                    641: *
                    642: *      (WA)                  ERROR CODE NUMBER
                    643: *      JSR  SYSEM            CALL TO GET TEXT
                    644: *      (XR)                  TEXT OF MESSAGE
                    645: *
                    646: *      THE RETURNED VALUE IS A POINTER TO A BLOCK IN SCBLK
                    647: *      FORMAT EXCEPT THAT THE FIRST WORD NEED NOT BE SET. THE
                    648: *      STRING IS COPIED INTO DYNAMIC MEMORY ON RETURN.
                    649: *      IF THE NULL STRING IS RETURNED EITHER BECAUSE SYSEM DOES
                    650: *      NOT PROVIDE ERROR MESSAGE TEXTS OR BECAUSE WA IS OUT OF
                    651: *      RANGE, SPITBOL WILL PRINT THE STRING STORED IN ERRTEXT
                    652: *      KEYWORD.
                    653:        EJC
                    654: *
                    655: *      SYSEN -- ENDFILE
                    656: *
                    657: SYSEN  EXP                   DEFINE EXTERNAL ENTRY POINT
                    658: *
                    659: *      SYSEN IS USED TO IMPLEMENT THE SNOBOL4 FUNCTION ENDFILE.
                    660: *      THE MEANING IS SYSTEM DEPENDENT. IN GENERAL, ENDFILE
                    661: *      IMPLIES THAT NO FURTHER I/O OPERATIONS WILL BE PERFORMED,
                    662: *      BUT DOES NOT GUARANTEE THIS TO BE THE CASE. THE FILE
                    663: *      SHOULD BE CLOSED AFTER THE CALL, A SUBSEQUENT READ
                    664: *      OR WRITE MAY REOPEN THE FILE AT THE START OR IT MAY BE
                    665: *      NECESSARY TO REOPEN THE FILE VIA SYSIO.
                    666: *
                    667: *      (WA)                  PTR TO FCBLK OR ZERO
                    668: *      (XR)                  ENDFILE ARGUMENT (SCBLK PTR)
                    669: *      JSR  SYSEN            CALL TO ENDFILE
                    670: *      PPM  LOC              RETURN HERE IF FILE DOES NOT EXIST
                    671: *      PPM  LOC              RETURN HERE IF ENDFILE NOT ALLOWED
                    672: *      PPM  LOC              RETURN HERE IF I/O ERROR
                    673: *      (WA,WB)               DESTROYED
                    674: *
                    675: *      THE SECOND ERROR RETURN IS USED FOR FILES FOR WHICH
                    676: *      ENDFILE IS NOT PERMITTED. FOR EXAMPLE, IT MAY BE EXPECTED
                    677: *      THAT THE STANDARD INPUT AND OUTPUT FILES ARE IN THIS
                    678: *      CATEGORY.
                    679:        EJC
                    680: *
                    681: *      SYSEP -- EJECT PRINTER PAGE
                    682: *
                    683: SYSEP  EXP                   DEFINE EXTERNAL ENTRY POINT
                    684: *
                    685: *      SYSEP IS CALLED TO PERFORM A PAGE EJECT ON THE STANDARD
                    686: *      PRINTER OUTPUT FILE (CORRESPONDING TO SYSPR OUTPUT).
                    687: *
                    688: *      JSR  SYSEP            CALL TO EJECT PRINTER OUTPUT
                    689:        EJC
                    690: *
                    691: *      SYSEX -- CALL EXTERNAL FUNCTION
                    692: *
                    693: SYSEX  EXP                   DEFINE EXTERNAL ENTRY POINT
                    694: *
                    695: *      SYSEX IS CALLED TO PASS CONTROL TO AN EXTERNAL FUNCTION
                    696: *      PREVIOUSLY LOADED WITH A CALL TO SYSLD.
                    697: *
                    698: *      (XS)                  POINTER TO ARGUMENTS ON STACK
                    699: *      (XL)                  POINTER TO CONTROL BLOCK (EFBLK)
                    700: *      (WA)                  NUMBER OF ARGUMENTS ON STACK
                    701: *      JSR  SYSEX            CALL TO PASS CONTROL TO FUNCTION
                    702: *      PPM  LOC              RETURN HERE IF FUNCTION CALL FAILS
                    703: *      (XS)                  POPPED PAST ARGUMENTS
                    704: *      (XR)                  RESULT RETURNED
                    705: *
                    706: *      THE ARGUMENTS ARE STORED ON THE STACK WITH
                    707: *      THE LAST ARGUMENT AT 0(XS). ON RETURN, XS
                    708: *      IS POPPED PAST THE ARGUMENTS.
                    709: *
                    710: *      THE FORM OF THE ARGUMENTS AS PASSED IS THAT USED IN THE
                    711: *      SPITBOL TRANSLATOR (SEE DEFINITIONS AND DATA STRUCTURES
                    712: *      SECTION). THE CONTROL BLOCK FORMAT IS ALSO DESCRIBED
                    713: *      (UNDER EFBLK) IN THIS SECTION.
                    714: *
                    715: *      THERE ARE TWO WAYS OF RETURNING A RESULT.
                    716: *
                    717: *      1)   RETURN A POINTER TO A BLOCK IN DYNAMIC STORAGE. THIS
                    718: *           BLOCK MUST BE IN EXACTLY CORRECT FORMAT, INCLUDING
                    719: *           THE FIRST WORD. ONLY FUNCTIONS WRITTEN WITH INTIMATE
                    720: *           KNOWLEDGE OF THE SYSTEM WILL RETURN IN THIS WAY.
                    721: *
                    722: *      2)   STRING, INTEGER AND REAL RESULTS MAY BE RETURNED BY
                    723: *           POINTING TO A PSEUDO-BLOCK OUTSIDE DYNAMIC MEMORY.
                    724: *           THIS BLOCK IS IN ICBLK, RCBLK OR SCBLK FORMAT EXCEPT
                    725: *           THAT THE FIRST WORD WILL BE OVERWRITTEN
                    726: *           BY A TYPE WORD ON RETURN AND SO NEED NOT
                    727: *           BE CORRECTLY SET. SUCH A RESULT IS
                    728: *           COPIED INTO MAIN STORAGE BEFORE PROCEEDING.
                    729: *           UNCONVERTED RESULTS MAY SIMILARLY BE RETURNED IN A
                    730: *           PSEUDO-BLOCK WHICH IS IN CORRECT FORMAT INCLUDING
                    731: *           TYPE WORD RECOGNISABLE BY GARBAGE COLLECTOR SINCE
                    732: *           BLOCK IS COPIED INTO DYNAMIC MEMORY.
                    733:        EJC
                    734: *
                    735: *      SYSFC -- FILE CONTROL BLOCK ROUTINE
                    736: *
                    737: SYSFC  EXP                   DEFINE EXTERNAL ENTRY POINT
                    738: *
                    739: *      SEE ALSO SYSIO
                    740: *      INPUT AND OUTPUT HAVE 3 ARGUMENTS REFERRED TO AS SHOWN
                    741: *           INPUT(VARIABLE NAME,FILE ARG1,FILE ARG2)
                    742: *           OUTPUT(VARIABLE NAME,FILE ARG1,FILE ARG2)
                    743: *      FILE ARG1 MAY BE AN INTEGER OR STRING USED TO IDENTIFY
                    744: *      AN I/O CHANNEL. IT IS CONVERTED TO A STRING FOR CHECKING.
                    745: *      THE EXACT SIGNIFICANCE OF FILE ARG2
                    746: *      IS NOT RIGOROUSLY PRESCRIBED BUT TO IMPROVE PORTABILITY,
                    747: *      THE SCHEME DESCRIBED IN THE SPITBOL USER MANUAL
                    748: *      SHOULD BE ADOPTED WHEN POSSIBLE. THE PREFERRED FORM IS
                    749: *      A STRING $F$,R$R$,C$C$,I$I$,...,Z$Z$  WHERE
                    750: *      $F$ IS AN OPTIONAL FILE NAME WHICH IS PLACED FIRST.
                    751: *       REMAINING ITEMS MAY BE OMITTED OR INCLUDED IN ANY ORDER.
                    752: *      $R$ IS MAXIMUM RECORD LENGTH
                    753: *      $C$ IS A CARRIAGE CONTROL CHARACTER OR CHARACTER STRING
                    754: *      $I$ IS SOME FORM OF CHANNEL IDENTIFICATION USED IN THE
                    755: *         ABSENCE OF $F$ TO ASSOCIATE THE VARIABLE
                    756: *         WITH A FILE ALLOCATED DYNAMICALLY BY JCL COMMANDS AT
                    757: *         SPITBOL LOAD TIME.
                    758: *      ,...,Z$Z$ ARE ADDITIONAL FIELDS.
                    759: *      IF , (COMMA) CANNOT BE USED AS A DELIMITER, .CIOD
                    760: *      SHOULD BE DEFINED TO INTRODUCE BY CONDITIONAL ASSEMBLY
                    761: *      ANOTHER DELIMITER (SEE
                    762: *        IODEL  EQU  *
                    763: *      EARLY IN DEFINITIONS SECTION).
                    764: *      SYSFC IS CALLED WHEN A VARIABLE IS INPUT OR OUTPUT
                    765: *      ASSOCIATED TO CHECK FILE ARG1 AND FILE ARG2 AND
                    766: *      TO  REPORT WHETHER AN FCBLK (FILE CONTROL
                    767: *      BLOCK) IS NECESSARY AND IF SO WHAT SIZE IT SHOULD BE.
                    768: *      THIS MAKES IT POSSIBLE FOR SPITBOL RATHER THAN OSINT TO
                    769: *      ALLOCATE SUCH A BLOCK IN DYNAMIC MEMORY IF REQUIRED
                    770: *      OR ALTERNATIVELY IN STATIC MEMORY.
                    771: *      THE SIGNIFICANCE OF AN FCBLK , IF ONE IS REQUESTED, IS
                    772: *      ENTIRELY UP TO THE SYSTEM INTERFACE. THE ONLY RESTRICTION
                    773: *      IS THAT IF THE FCBLK SHOULD APPEAR TO LIE IN DYNAMIC
                    774: *      MEMORY , POINTERS TO IT SHOULD BE PROPER POINTERS TO
                    775: *      THE START OF A RECOGNISABLE AND GARBAGE COLLECTABLE
                    776: *      BLOCK (THIS CONDITION WILL BE MET IF SYSFC REQUESTS
                    777: *      SPITBOL TO PROVIDE AN FCBLK).
                    778: *      AN OPTION IS PROVIDED FOR OSINT TO RETURN A POINTER IN
                    779: *      XL TO AN FCBLK WHICH IT PRIVATELY ALLOCATED. THIS PTR
                    780: *      WILL BE MADE AVAILABLE WHEN I/O OCCURS LATER.
                    781: *      PRIVATE FCBLKS MAY HAVE ARBITRARY CONTENTS AND SPITBOL
                    782: *      STORES NOTHING IN THEM.
                    783:        EJC
                    784: *      THE REQUESTED SIZE FOR AN FCBLK IN DYNAMIC MEMORY
                    785: *      SHOULD ALLOW A 2 WORD OVERHEAD FOR BLOCK TYPE AND
                    786: *      LENGTH FIELDS. INFORMATION SUBSEQUENTLY STORED IN THE
                    787: *      REMAINING WORDS MAY BE ARBITRARY IF AN XNBLK (EXTERNAL
                    788: *      NON-RELOCATABLE BLOCK) IS REQUESTED. IF THE REQUEST IS
                    789: *      FOR AN XRBLK (EXTERNAL RELOCATABLE BLOCK) THE
                    790: *      CONTENTS OF WORDS SHOULD BE COLLECTABLE (I.E. ANY
                    791: *      APPARENT POINTERS INTO DYNAMIC SHOULD BE GENUINE BLOCK
                    792: *      POINTERS). THESE RESTRICTIONS DO NOT APPLY IF AN FCBLK
                    793: *      IS ALLOCATED OUTSIDE DYNAMIC OR IS NOT ALLOCATED AT ALL.
                    794: *      IF AN FCBLK IS REQUESTED, ITS FIELDS WILL BE INITIALISED
                    795: *      TO ZERO BEFORE ENTRY TO SYSIO WITH THE EXCEPTION OF
                    796: *      WORDS 0 AND 1 IN WHICH THE BLOCK TYPE AND LENGTH
                    797: *      FIELDS ARE PLACED FOR FCBLKS IN DYNAMIC MEMORY ONLY.
                    798: *      FOR THE POSSIBLE USE OF SYSEJ AND SYSXI, IF FCBLKS
                    799: *      ARE USED, A CHAIN IS BUILT SO THAT THEY MAY ALL BE
                    800: *      FOUND - SEE SYSXI FOR DETAILS.
                    801: *      IF BOTH FILE ARG1 AND FILE ARG2 ARE NULL, CALLS OF SYSFC
                    802: *      AND SYSIO ARE OMITTED.
                    803: *      IF FILE ARG1 IS NULL (STANDARD INPUT/OUTPUT FILE), SYSFC
                    804: *      IS CALLED TO CHECK NON-NULL FILE ARG2 BUT ANY REQUEST
                    805: *      FOR AN FCBLK WILL BE IGNORED, SINCE SPITBOL HANDLES THE
                    806: *      STANDARD FILES SPECIALLY AND CANNOT READILY KEEP FCBLK
                    807: *      POINTERS FOR THEM.
                    808: *      FILEARG1 IS TYPE CHECKED BY SPITBOL SO FURTHER CHECKING
                    809: *      MAY BE UNNECCESSARY IN MANY IMPLEMENTATIONS.
                    810: *      FILE ARG2 IS PASSED SO THAT SYSFC MAY ANALYSE AND
                    811: *      CHECK IT. HOWEVER TO ASSIST IN THIS, SPITBOL ALSO PASSES
                    812: *      ON THE STACK THE COMPONENTS OF THIS ARGUMENT WITH
                    813: *      FILE NAME, $F$ (OTHERWISE NULL) EXTRACTED AND STACKED
                    814: *      FIRST.
                    815: *      THE OTHER FIELDS, IF ANY, ARE EXTRACTED AS SUBSTRINGS,
                    816: *      POINTERS TO THEM ARE STACKED AND A COUNT OF ALL ITEMS
                    817: *      STACKED IS PLACED IN WC. IF AN FCBLK WAS EARLIER
                    818: *      ALLOCATED AND POINTED TO VIA FILE ARG1, SYSFC IS ALSO
                    819: *      PASSED A POINTER TO THIS FCBLK.
                    820: *
                    821: *      (XL)                  FILE ARG1 SCBLK PTR (2ND ARG)
                    822: *      (XR)                  FILEARG2 (3RD ARG) OR NULL
                    823: *      -(XS)...-(XS)         SCBLKS FOR $F$,$R$,$C$,...
                    824: *      (WC)                  NO. OF STACKED SCBLKS ABOVE
                    825: *      (WA)                  EXISTING FILE ARG1 FCBLK PTR OR 0
                    826: *      (WB)                  0/3 FOR INPUT/OUTPUT ASSOCN
                    827: *      JSR  SYSFC            CALL TO CHECK NEED FOR FCBLK
                    828: *      PPM  LOC              INVALID FILE ARGUMENT
                    829: *      (XS)                  POPPED (WC) TIMES
                    830: *      (WA NON ZERO)         BYTE SIZE OF REQUESTED FCBLK
                    831: *      (WA=0,XL NON ZERO)    PRIVATE FCBLK PTR IN XL
                    832: *      (WA=XL=0)             NO FCBLK WANTED, NO PRIVATE FCBLK
                    833: *      (WC)                  0/1/2 REQUEST ALLOC OF XRBLK/XNBLK
                    834: *                            /STATIC BLOCK FOR USE AS FCBLK
                    835: *      (WB)                  DESTROYED
                    836:        EJC
                    837: *
                    838: *      SYSHS -- GIVE ACCESS TO HOST COMPUTER FEATURES
                    839: *
                    840: SYSHS  EXP                   DEFINE EXTERNAL ENTRY POINT
                    841: *
                    842: *      PROVIDES MEANS FOR IMPLEMENTING SPECIAL FEATURES
                    843: *      ON DIFFERENT HOST COMPUTERS. THE ONLY DEFINED ENTRY IS
                    844: *      THAT WHERE ALL ARGUMENTS ARE NULL IN WHICH CASE SYSHS
                    845: *      RETURNS AN SCBLK CONTAINING NAME OF COMPUTER,
                    846: *      NAME OF OPERATING SYSTEM AND NAME OF SITE SEPARATED BY
                    847: *      COLONS. THE SCBLK NEED NOT HAVE A CORRECT FIRST FIELD
                    848: *      AS THIS IS SUPPLIED ON COPYING STRING TO DYNAMIC MEMORY.
                    849: *      SPITBOL DOES NO ARGUMENT CHECKING BUT DOES PROVIDE A
                    850: *      SINGLE ERROR RETURN FOR ARGUMENTS CHECKED AS ERRONEOUS
                    851: *      BY OSINT. IT ALSO PROVIDES A SINGLE EXECUTION ERROR
                    852: *      RETURN. IF THESE ARE INADEQUATE, USE MAY BE MADE OF THE
                    853: *      MINIMAL ERROR SECTION DIRECT AS DESCRIBED IN MINIMAL
                    854: *      DOCUMENTATION, SECTION 10.
                    855: *      SEVERAL NON-ERROR RETURNS ARE PROVIDED. THE FIRST
                    856: *      CORRESPONDS TO THE DEFINED ENTRY OR, FOR IMPLEMENTATION
                    857: *      DEFINED ENTRIES, ANY STRING MAY BE RETURNED. THE OTHERS
                    858: *      PERMIT RESPECTIVELY,  RETURN A NULL RESULT, RETURN WITH A
                    859: *      RESULT TO BE STACKED WHICH IS POINTED AT BY XR, AND A
                    860: *      RETURN CAUSING SPITBOL STATEMENT FAILURE. IF A RETURNED
                    861: *      RESULT IS IN DYNAMIC MEMORY IT MUST OBEY GARBAGE
                    862: *      COLLECTOR RULES. THE ONLY RESULTS COPIED ON RETURN
                    863: *      ARE STRINGS RETURNED VIA PPM LOC3 RETURN.
                    864: *
                    865: *      (WA)                  ARGUMENT 1
                    866: *      (XL)                  ARGUMENT 2
                    867: *      (XR)                  ARGUMENT 3
                    868: *      JSR  SYSHS            CALL TO GET HOST INFORMATION
                    869: *      PPM  LOC1             ERRONEOUS ARG
                    870: *      PPM  LOC2             EXECUTION ERROR
                    871: *      PPM  LOC3             SCBLK PTR IN XL OR 0 IF UNAVAILABLE
                    872: *      PPM  LOC4             RETURN A NULL RESULT
                    873: *      PPM  LOC5             RETURN RESULT IN XR
                    874: *      PPM  LOC6             CAUSE STATEMENT FAILURE
                    875:        EJC
                    876: *
                    877: *      SYSID -- RETURN SYSTEM IDENTIFICATION
                    878: *
                    879: SYSID  EXP                   DEFINE EXTERNAL ENTRY POINT
                    880: *
                    881: *      THIS ROUTINE SHOULD RETURN STRINGS TO HEAD THE STANDARD
                    882: *      PRINTER OUTPUT. THE FIRST STRING WILL BE APPENDED TO
                    883: *      A HEADING LINE OF THE FORM
                    884: *           MACRO SPITBOL VERSION V.V
                    885: *      SUPPLIED BY SPITBOL ITSELF. V.V ARE DIGITS GIVING THE
                    886: *      MAJOR VERSION NUMBER AND GENERALLY AT LEAST A MINOR
                    887: *      VERSION NUMBER RELATING TO OSINT SHOULD BE SUPPLIED TO
                    888: *      GIVE SAY
                    889: *           MACRO SPITBOL VERSION V.V(M.M)
                    890: *      THE SECOND STRING SHOULD IDENTIFY AT LEAST THE MACHINE
                    891: *      AND OPERATING SYSTEM.  PREFERABLY IT SHOULD INCLUDE
                    892: *      THE DATE AND TIME OF THE RUN.
                    893: *      OPTIONALLY THE STRINGS MAY INCLUDE SITE NAME OF THE
                    894: *      THE IMPLEMENTOR AND/OR MACHINE ON WHICH RUN TAKES PLACE,
                    895: *      UNIQUE SITE OR COPY NUMBER AND OTHER INFORMATION AS
                    896: *      APPROPRIATE WITHOUT MAKING IT SO LONG AS TO BE A
                    897: *      NUISANCE TO USERS.
                    898: *      THE FIRST WORDS OF THE SCBLKS POINTED AT NEED NOT BE
                    899: *      CORRECTLY SET.
                    900: *
                    901: *      JSR  SYSID            CALL FOR SYSTEM IDENTIFICATION
                    902: *      (XR)                  SCBLK PTR FOR ADDITION TO HEADER
                    903: *      (XL)                  PTR TO SECOND HEADER SCBLK
                    904:        EJC
                    905: *
                    906: *      SYSIL -- GET INPUT RECORD LENGTH
                    907: *
                    908: SYSIL  EXP                   DEFINE EXTERNAL ENTRY POINT
                    909: *
                    910: *      SYSIL IS USED TO GET THE LENGTH OF THE NEXT INPUT RECORD
                    911: *      FROM A FILE PREVIOUSLY INPUT ASSOCIATED WITH A SYSIO
                    912: *      CALL. THE LENGTH RETURNED IS USED TO ESTABLISH A BUFFER
                    913: *      FOR A SUBSEQUENT SYSIN CALL.
                    914: *
                    915: *      (WA)                  PTR TO FCBLK OR ZERO
                    916: *      JSR  SYSIL            CALL TO GET RECORD LENGTH
                    917: *      (WA)                  LENGTH OR ZERO IF FILE CLOSED
                    918: *
                    919: *      NO HARM IS DONE IF THE VALUE RETURNED IS TOO LONG SINCE
                    920: *      UNUSED SPACE WILL BE RECLAIMED AFTER THE SYSIN CALL.
                    921: *
                    922: *      NOTE THAT IT IS THE SYSIL CALL (NOT THE SYSIO CALL) WHICH
                    923: *      CAUSES THE FILE TO BE OPENED AS REQUIRED FOR THE FIRST
                    924: *      RECORD INPUT FROM THE FILE.
                    925:        EJC
                    926: *
                    927: *      SYSIN -- READ INPUT RECORD
                    928: *
                    929: SYSIN  EXP                   DEFINE EXTERNAL ENTRY POINT
                    930: *
                    931: *      SYSIN IS USED TO READ A RECORD FROM THE FILE WHICH WAS
                    932: *      REFERENCED IN A PRIOR CALL TO SYSIL (I.E. THESE CALLS
                    933: *      ALWAYS OCCUR IN PAIRS). THE BUFFER PROVIDED IS AN
                    934: *      SCBLK FOR A STRING OF LENGTH SET FROM THE SYSIL CALL.
                    935: *      IF THE ACTUAL LENGTH READ IS LESS THAN THIS, THE LENGTH
                    936: *      FIELD OF THE SCBLK MUST BE MODIFIED BEFORE RETURNING
                    937: *      UNLESS BUFFER IS RIGHT PADDED WITH ZEROES.
                    938: *      IT IS ALSO PERMISSIBLE TO TAKE ANY OF THE ALTERNATIVE
                    939: *      RETURNS AFTER SCBLK LENGTH HAS BEEN MODIFIED.
                    940: *
                    941: *      (WA)                  PTR TO FCBLK OR ZERO
                    942: *      (XR)                  POINTER TO BUFFER (SCBLK PTR)
                    943: *      JSR  SYSIN            CALL TO READ RECORD
                    944: *      PPM  LOC              ENDFILE OR NO I/P FILE AFTER SYSXI
                    945: *      PPM  LOC              RETURN HERE IF I/O ERROR
                    946: *      PPM  LOC              RETURN HERE IF RECORD FORMAT ERROR
                    947: *      (WA,WB,WC)            DESTROYED
                    948:        EJC
                    949: *
                    950: *      SYSIO -- INPUT/OUTPUT FILE ASSOCIATION
                    951: *
                    952: SYSIO  EXP                   DEFINE EXTERNAL ENTRY POINT
                    953: *
                    954: *      SEE ALSO SYSFC.
                    955: *      SYSIO IS CALLED IN RESPONSE TO A SNOBOL4 INPUT OR OUTPUT
                    956: *      FUNCTION CALL EXCEPT WHEN FILE ARG1 AND FILE ARG2
                    957: *      ARE BOTH NULL.
                    958: *      ITS CALL ALWAYS FOLLOWS IMMEDIATELY AFTER A CALL
                    959: *      OF SYSFC. IF SYSFC REQUESTED ALLOCATION
                    960: *      OF AN FCBLK, ITS ADDRESS WILL BE IN WA.
                    961: *      FOR INPUT FILES, NON-ZERO VALUES OF $R$ SHOULD BE
                    962: *      COPIED TO WC FOR USE IN ALLOCATING INPUT BUFFERS. IF $R$
                    963: *      IS DEFAULTED OR NOT IMPLEMENTED, WC SHOULD BE ZEROISED.
                    964: *      ONCE A FILE HAS BEEN OPENED, SUBSEQUENT INPUT(),OUTPUT()
                    965: *      CALLS IN WHICH THE SECOND ARGUMENT IS IDENTICAL WITH THAT
                    966: *      IN A PREVIOUS CALL, MERELY ASSOCIATE THE ADDITIONAL
                    967: *      VARIABLE NAME (FIRST ARGUMENT) TO THE FILE AND DO NOT
                    968: *      RESULT IN RE-OPENING THE FILE.
                    969: *      IN SUBSEQUENT ASSOCIATED ACCESSES TO THE FILE A POINTER
                    970: *      TO ANY FCBLK ALLOCATED WILL BE MADE AVAILABLE.
                    971: *
                    972: *      (XL)                  FILE ARG1 SCBLK PTR (2ND ARG)
                    973: *      (XR)                  FILE ARG2 SCBLK PTR (3RD ARG)
                    974: *      (WA)                  FCBLK PTR (0 IF NONE)
                    975: *      (WB)                  0 FOR INPUT, 3 FOR OUTPUT
                    976: *      JSR  SYSIO            CALL TO ASSOCIATE FILE
                    977: *      PPM  LOC              RETURN HERE IF FILE DOES NOT EXIST
                    978: *      PPM  LOC              RETURN IF INPUT/OUTPUT NOT ALLOWED
                    979: *      (XL)                  FCBLK POINTER (0 IF NONE)
                    980: *      (WC)                  0 (FOR DEFAULT) OR MAX RECORD LNGTH
                    981: *      (WA,WB)               DESTROYED
                    982: *
                    983: *      THE SECOND ERROR RETURN IS USED IF THE FILE NAMED EXISTS
                    984: *      BUT INPUT/OUTPUT FROM THE FILE IS NOT ALLOWED. FOR
                    985: *      EXAMPLE, THE STANDARD OUTPUT FILE MAY BE IN THIS CATEGORY
                    986: *      AS REGARDS INPUT ASSOCIATION.
                    987:        EJC
                    988: *
                    989: *      SYSLD -- LOAD EXTERNAL FUNCTION
                    990: *
                    991: SYSLD  EXP                   DEFINE EXTERNAL ENTRY POINT
                    992: *
                    993: *      SYSLD IS CALLED IN RESPONSE TO THE USE OF THE SNOBOL4
                    994: *      LOAD FUNCTION. THE NAMED FUNCTION IS LOADED (WHATEVER
                    995: *      THIS MEANS), AND A POINTER IS RETURNED. THE POINTER WILL
                    996: *      BE USED ON SUBSEQUENT CALLS TO THE FUNCTION (SEE SYSEX).
                    997: *
                    998: *      (XR)                  POINTER TO FUNCTION NAME (SCBLK)
                    999: *      (XL)                  POINTER TO LIBRARY NAME (SCBLK)
                   1000: *      JSR  SYSLD            CALL TO LOAD FUNCTION
                   1001: *      PPM  LOC              RETURN HERE IF FUNC DOES NOT EXIST
                   1002: *      PPM  LOC              RETURN HERE IF I/O ERROR
                   1003: *      (XR)                  POINTER TO LOADED CODE
                   1004: *
                   1005: *      THE SIGNIFICANCE OF THE POINTER RETURNED IS UP TO THE
                   1006: *      SYSTEM INTERFACE ROUTINE. THE ONLY RESTRICTION IS THAT
                   1007: *      IF THE POINTER IS WITHIN DYNAMIC STORAGE, IT MUST BE
                   1008: *      A PROPER BLOCK POINTER.
                   1009:        EJC
                   1010: *
                   1011: *      SYSMM -- GET MORE MEMORY
                   1012: *
                   1013: SYSMM  EXP                   DEFINE EXTERNAL ENTRY POINT
                   1014: *
                   1015: *      SYSMM IS CALLED IN AN ATTEMPT TO ALLOCATE MORE DYNAMIC
                   1016: *      MEMORY. THIS MEMORY MUST BE ALLOCATED CONTIGUOUSLY WITH
                   1017: *      THE CURRENT DYNAMIC DATA AREA.
                   1018: *
                   1019: *      THE AMOUNT ALLOCATED IS UP TO THE SYSTEM TO DECIDE. ANY
                   1020: *      VALUE IS ACCEPTABLE INCLUDING ZERO IF ALLOCATION IS
                   1021: *      IMPOSSIBLE.
                   1022: *
                   1023: *      JSR  SYSMM            CALL TO GET MORE MEMORY
                   1024: *      (XR)                  NUMBER OF ADDITIONAL WORDS OBTAINED
                   1025:        EJC
                   1026: *
                   1027: *      SYSMX -- SUPPLY MXLEN
                   1028: *
                   1029: SYSMX  EXP                   DEFINE EXTERNAL ENTRY POINT
                   1030: *
                   1031: *      BECAUSE OF THE METHOD OF GARBAGE COLLECTION, NO SPITBOL
                   1032: *      OBJECT IS ALLOWED TO OCCUPY MORE BYTES OF MEMORY THAN
                   1033: *      THE INTEGER GIVING THE LOWEST ADDRESS OF DYNAMIC
                   1034: *      (GARBAGE COLLECTABLE) MEMORY. MXLEN IS THE NAME USED TO
                   1035: *      REFER TO THIS MAXIMUM LENGTH OF AN OBJECT AND FOR MOST
                   1036: *      USERS OF MOST IMPLEMENTATIONS, PROVIDED DYNAMIC MEMORY
                   1037: *      STARTS AT AN ADDRESS OF AT LEAST A FEW THOUSAND WORDS,
                   1038: *      THERE IS NO PROBLEM.
                   1039: *      IF THE DEFAULT STARTING ADDRESS IS LESS THAN SAY 10000 OR
                   1040: *      20000, THEN A LOAD TIME OPTION SHOULD BE PROVIDED WHERE A
                   1041: *      USER CAN REQUEST THAT HE BE ABLE TO CREATE LARGER
                   1042: *      OBJECTS. THIS ROUTINE INFORMS SPITBOL OF THIS REQUEST IF
                   1043: *      ANY. THE VALUE RETURNED IS EITHER AN INTEGER
                   1044: *      REPRESENTING THE DESIRED VALUE OF MXLEN (AND HENCE THE
                   1045: *      MINIMUM DYNAMIC STORE ADDRESS WHICH MAY RESULT IN
                   1046: *      NON-USE OF SOME STORE) OR ZERO IF A DEFAULT IS ACCEPTABLE
                   1047: *      IN WHICH MXLEN IS SET TO THE LOWEST ADDRESS ALLOCATED
                   1048: *      TO DYNAMIC STORE BEFORE COMPILATION STARTS.
                   1049: *      IF A NON-ZERO VALUE IS RETURNED, THIS IS USED FOR KEYWORD
                   1050: *      MAXLNGTH. OTHERWISE THE INITIAL LOW ADDRESS OF DYNAMIC
                   1051: *      MEMORY IS USED FOR THIS KEYWORD.
                   1052: *
                   1053: *      JSR  SYSMX            CALL TO GET MXLEN
                   1054: *      (WA)                  EITHER MXLEN OR 0 FOR DEFAULT
                   1055:        EJC
                   1056: *
                   1057: *      SYSOU -- OUTPUT RECORD
                   1058: *
                   1059: SYSOU  EXP                   DEFINE EXTERNAL ENTRY POINT
                   1060: *
                   1061: *      SYSOU IS USED TO WRITE A RECORD TO A FILE PREVIOUSLY
                   1062: *      ASSOCIATED WITH A SYSIO CALL.
                   1063: *
                   1064: *      (WA)                  PTR TO FCBLK OR ZERO
                   1065: *      (XR)                  RECORD TO BE WRITTEN (SCBLK)
                   1066: *      JSR  SYSOU            CALL TO OUTPUT RECORD
                   1067: *      PPM  LOC              FILE FULL OR NO FILE AFTER SYSXI
                   1068: *      PPM  LOC              RETURN HERE IF I/O ERROR
                   1069: *      (WA,WB,WC)            DESTROYED
                   1070: *
                   1071: *      NOTE THAT IT IS THE SYSOU CALL (NOT THE SYSIO CALL) WHICH
                   1072: *      CAUSES THE FILE TO BE OPENED AS REQUIRED FOR THE FIRST
                   1073: *      RECORD OUTPUT TO THE FILE.
                   1074:        EJC
                   1075: *
                   1076: *      SYSPI -- PRINT ON INTERACTIVE CHANNEL
                   1077: *
                   1078: SYSPI  EXP                   DEFINE EXTERNAL ENTRY POINT
                   1079: *
                   1080: *      IF SPITBOL IS RUN FROM AN ONLINE TERMINAL, OSINT CAN
                   1081: *      REQUEST THAT MESSAGES SUCH AS COPIES OF COMPILATION
                   1082: *      ERRORS BE SENT TO THE TERMINAL (SEE SYSPP). IF RELEVANT
                   1083: *      REPLY WAS MADE BY SYSPP THEN SYSPI IS CALLED TO SEND SUCH
                   1084: *      MESSAGES TO THE INTERACTIVE CHANNEL.
                   1085: *      SYSPI IS ALSO USED FOR SENDING OUTPUT TO THE TERMINAL
                   1086: *      THROUGH THE SPECIAL VARIABLE NAME, TERMINAL.
                   1087: *
                   1088: *      (XR)                  PTR TO LINE BUFFER (SCBLK)
                   1089: *      (WA)                  LINE LENGTH
                   1090: *      JSR  SYSPI            CALL TO PRINT LINE
                   1091: *      PPM  LOC              FAILURE RETURN
                   1092: *      (WA,WB)               DESTROYED
                   1093:        EJC
                   1094: *
                   1095: *      SYSPP -- OBTAIN PRINT PARAMETERS
                   1096: *
                   1097: SYSPP  EXP                   DEFINE EXTERNAL ENTRY POINT
                   1098: *
                   1099: *      SYSPP IS CALLED ONCE DURING COMPILATION TO OBTAIN
                   1100: *      PARAMETERS REQUIRED FOR CORRECT PRINTED OUTPUT FORMAT
                   1101: *      AND TO SELECT OTHER OPTIONS. IT MAY ALSO BE CALLED AGAIN
                   1102: *      AFTER SYSXI WHEN A LOAD MODULE IS RESUMED. IN THIS
                   1103: *      CASE THE VALUE RETURNED IN WA MAY BE LESS THAN OR EQUAL
                   1104: *      TO THAT RETURNED IN INITIAL CALL BUT MAY NOT BE
                   1105: *      GREATER.
                   1106: *      THE INFORMATION RETURNED IS -
                   1107: *      1.   LINE LENGTH IN CHARS FOR STANDARD PRINT FILE
                   1108: *      2.   NO OF LINES/PAGE. 0 IS PREFERABLE FOR A NON-PAGED
                   1109: *           DEVICE (E.G. ONLINE TERMINAL) IN WHICH CASE LISTING
                   1110: *           PAGE THROWS ARE SUPPRESSED AND PAGE HEADERS
                   1111: *           RESULTING FROM -TITLE,-STITL LINES ARE KEPT SHORT.
                   1112: *      3.   AN INITIAL -NOLIST OPTION TO SUPPRESS LISTING UNLESS
                   1113: *           THE PROGRAM CONTAINS AN EXPLICIT -LIST.
                   1114: *      4.   OPTIONS TO SUPPRESS LISTING OF COMPILATION AND/OR
                   1115: *           EXECUTION STATS (USEFUL FOR ESTABLISHED PROGRAMS) -
                   1116: *           COMBINED WITH 3. GIVES POSSIBILITY OF LISTING
                   1117: *           FILE NEVER BEING OPENED.
                   1118: *      5.   OPTION TO HAVE COPIES OF ERRORS SENT TO AN
                   1119: *           INTERACTIVE CHANNEL IN ADDITION TO STANDARD PRINTER.
                   1120: *      6.   OPTION TO KEEP PAGE HEADERS SHORT (E.G. IF LISTING
                   1121: *           TO AN ONLINE TERMINAL).
                   1122: *      7.   AN OPTION TO CHOOSE EXTENDED OR COMPACT LISTING
                   1123: *           FORMAT. IN THE FORMER A PAGE EJECT AND IN THE LATTER
                   1124: *           A FEW LINE FEEDS PRECEDE THE PRINTING OF EACH
                   1125: *           OF-- LISTING, COMPILATION STATISTICS, EXECUTION
                   1126: *           OUTPUT AND EXECUTION STATISTICS.
                   1127: *      8.   AN OPTION TO SUPPRESS EXECUTION AS THOUGH A
                   1128: *           -NOEXECUTE CARD WERE SUPPLIED.
                   1129: *      9.   AN OPTION TO REQUEST THAT NAME /TERMINAL/  BE PRE-
                   1130: *           ASSOCIATED TO AN ONLINE TERMINAL VIA SYSPI AND SYSRI
                   1131: *      10.  AN INTERMEDIATE (STANDARD) LISTING OPTION REQUIRING
                   1132: *           THAT PAGE EJECTS OCCUR IN SOURCE LISTINGS. REDUNDANT
                   1133: *           IF EXTENDED OPTION CHOSEN BUT PARTIALLY EXTENDS
                   1134: *           COMPACT OPTION.
                   1135: *      11.  OPTION TO SUPPRESS SYSID IDENTIFICATION.
                   1136: *
                   1137: *      JSR  SYSPP            CALL TO GET PRINT PARAMETERS
                   1138: *      (WA)                  PRINT LINE LENGTH IN CHARS
                   1139: *      (WB)                  NUMBER OF LINES/PAGE
                   1140: *      (WC)                  BITS VALUE ...JIHGFEDCBA WHERE
                   1141: *                            A = 1 TO SEND ERROR COPY TO INT.CH.
                   1142: *                            B = 1 MEANS STD PRINTER IS INT. CH.
                   1143: *                            C = 1 FOR -NOLIST OPTION
                   1144: *                            D = 1 TO SUPPRESS COMPILN. STATS
                   1145: *                            E = 1 TO SUPPRESS EXECN. STATS
                   1146: *                            F = 1/0 FOR EXTNDED/COMPACT LISTING
                   1147: *                            G = 1 FOR -NOEXECUTE
                   1148: *                            H = 1 PRE-ASSOCIATE /TERMINAL/
                   1149: *                            I = 1 FOR STANDARD LISTING OPTION.
                   1150: *                            J = 1 SUPPRESSES LISTING HEADER
                   1151:        EJC
                   1152: *
                   1153: *      SYSPR -- PRINT LINE ON STANDARD OUTPUT FILE
                   1154: *
                   1155: SYSPR  EXP                   DEFINE EXTERNAL ENTRY POINT
                   1156: *
                   1157: *      SYSPR IS USED TO PRINT A SINGLE LINE ON THE STANDARD
                   1158: *      OUTPUT FILE.
                   1159: *
                   1160: *      (XR)                  POINTER TO LINE BUFFER (SCBLK)
                   1161: *      (WA)                  LINE LENGTH
                   1162: *      JSR  SYSPR            CALL TO PRINT LINE
                   1163: *      PPM  LOC              TOO MUCH O/P OR NO FILE AFTER SYSXI
                   1164: *      (WA,WB)               DESTROYED
                   1165: *
                   1166: *      THE BUFFER POINTED TO IS THE LENGTH OBTAINED FROM THE
                   1167: *      SYSPP CALL AND IS FILLED OUT WITH TRAILING BLANKS. THE
                   1168: *      VALUE IN WA IS THE ACTUAL LINE LENGTH WHICH MAY BE LESS
                   1169: *      THAN THE MAXIMUM LINE LENGTH POSSIBLE. THERE IS NO SPACE
                   1170: *      CONTROL ASSOCIATED WITH THE LINE, ALL LINES ARE PRINTED
                   1171: *      SINGLE SPACED. NOTE THAT NULL LINES (WA=0) ARE POSSIBLE
                   1172: *      IN WHICH CASE A BLANK LINE IS TO BE PRINTED.
                   1173: *
                   1174: *      THE ERROR EXIT IS USED FOR SYSTEMS WHICH LIMIT THE AMOUNT
                   1175: *      OF PRINTED OUTPUT. IF POSSIBLE, PRINTING SHOULD BE
                   1176: *      PERMITTED AFTER THIS CONDITION HAS BEEN SIGNALLED ONCE TO
                   1177: *      ALLOW FOR DUMP AND OTHER DIAGNOSTIC INFORMATION.
                   1178: *      ASSUMING THIS TO BE POSSIBLE, SPITBOL MAY MAKE MORE SYSPR
                   1179: *      CALLS. IF THE ERROR RETURN OCCURS ANOTHER TIME, EXECUTION
                   1180: *      IS TERMINATED BY A CALL OF SYSEJ WITH ENDING CODE 998.
                   1181:        EJC
                   1182: *
                   1183: *      SYSRD -- READ RECORD FROM STANDARD INPUT FILE
                   1184: *
                   1185: SYSRD  EXP                   DEFINE EXTERNAL ENTRY POINT
                   1186: *
                   1187: *      SYSRD IS USED TO READ A RECORD FROM THE STANDARD INPUT
                   1188: *      FILE. THE BUFFER PROVIDED IS AN SCBLK FOR A STRING THE
                   1189: *      LENGTH OF WHICH IN CHARACTERS IS GIVEN IN WC, THIS
                   1190: *      CORRESPONDING TO THE MAXIMUM LENGTH OF STRING WHICH
                   1191: *      SPITBOL IS PREPARED TO RECEIVE. AT COMPILE TIME IT
                   1192: *      CORRESPONDS TO XXX IN THE MOST RECENT -INXXX CARD
                   1193: *      (DEFAULT 72) AND AT EXECUTION TIME TO THE MOST RECENT
                   1194: *      ,R$R$ (RECORD LENGTH) IN THE THIRD ARG OF AN INPUT()
                   1195: *      STATEMENT FOR THE STANDARD INPUT FILE (DEFAULT 80).
                   1196: *      IF FEWER THAN (WC) CHARACTERS ARE READ, THE LENGTH
                   1197: *      FIELD OF THE SCBLK MUST BE ADJUSTED BEFORE RETURNING
                   1198: *      UNLESS THE BUFFER IS RIGHT PADDED WITH ZEROES.
                   1199: *      IT IS ALSO PERMISSIBLE TO TAKE THE ALTERNATIVE RETURN
                   1200: *      AFTER SUCH AN ADJUSTMENT HAS BEEN MADE.
                   1201: *      SPITBOL MAY CONTINUE TO MAKE CALLS AFTER AN ENDFILE
                   1202: *      RETURN SO THIS ROUTINE SHOULD BE PREPARED TO MAKE
                   1203: *      REPEATED ENDFILE RETURNS.
                   1204: *
                   1205: *      (XR)                  POINTER TO BUFFER (SCBLK PTR)
                   1206: *      (WC)                  LENGTH OF BUFFER IN CHARACTERS
                   1207: *      JSR  SYSRD            CALL TO READ LINE
                   1208: *      PPM  LOC              ENDFILE OR NO I/P FILE AFTER SYSXI
                   1209: *      (WA,WB,WC)            DESTROYED
                   1210:        EJC
                   1211: *
                   1212: *      SYSRI -- READ RECORD FROM INTERACTIVE CHANNEL
                   1213: *
                   1214: SYSRI  EXP                   DEFINE EXTERNAL ENTRY POINT
                   1215: *
                   1216: *      READS A RECORD FROM ONLINE TERMINAL FOR SPITBOL VARIABLE,
                   1217: *      TERMINAL. IF ONLINE TERMINAL IS UNAVAILABLE THEN CODE THE
                   1218: *      ENDFILE RETURN ONLY.
                   1219: *      THE BUFFER PROVIDED IS OF LENGTH 120 CHARACTERS. SYSRI
                   1220: *      SHOULD REPLACE THE COUNT IN THE SECOND WORD OF THE SCBLK
                   1221: *      BY THE ACTUAL CHARACTER COUNT UNLESS BUFFER IS RIGHT
                   1222: *      PADDED WITH ZEROES.
                   1223: *      IT IS ALSO PERMISSIBLE TO TAKE THE ALTERNATIVE
                   1224: *      RETURN AFTER ADJUSTING THE COUNT.
                   1225: *      THE END OF FILE RETURN MAY BE USED IF THIS MAKES
                   1226: *      SENSE ON THE TARGET MACHINE (E.G. IF THERE IS AN
                   1227: *      EOF CHARACTER.)
                   1228: *
                   1229: *      (XR)                  PTR TO 120 CHAR BUFFER (SCBLK PTR)
                   1230: *      JSR  SYSRI            CALL TO READ LINE FROM TERMINAL
                   1231: *      PPM  LOC              END OF FILE RETURN
                   1232: *      (WA,WB,WC)            MAY BE DESTROYED
                   1233:        EJC
                   1234: *
                   1235: *      SYSRW -- REWIND FILE
                   1236: *
                   1237: SYSRW  EXP                   DEFINE EXTERNAL ENTRY POINT
                   1238: *
                   1239: *      SYSRW IS USED TO REWIND A FILE I.E. REPOSITION THE FILE
                   1240: *      AT THE START BEFORE THE FIRST RECORD. THE FILE SHOULD BE
                   1241: *      CLOSED AND THE NEXT READ OR WRITE CALL WILL OPEN THE
                   1242: *      FILE AT THE START.
                   1243: *
                   1244: *      (WA)                  PTR TO FCBLK OR ZERO
                   1245: *      (XR)                  REWIND ARG (SCBLK PTR)
                   1246: *      JSR  SYSRW            CALL TO REWIND FILE
                   1247: *      PPM  LOC              RETURN HERE IF FILE DOES NOT EXIST
                   1248: *      PPM  LOC              RETURN HERE IF REWIND NOT ALLOWED
                   1249: *      PPM  LOC              RETURN HERE IF I/O ERROR
                   1250:        EJC
                   1251: .IF    .CUST
                   1252: *
                   1253: *      SYSST -- SET FILE POINTER
                   1254: *
                   1255: SYSST  EXP                   DEFINE EXTERNAL ENTRY POINT
                   1256: *
                   1257: *      SYSST IS CALLED TO CHANGE THE POSITION OF A FILE
                   1258: *      POINTER. THIS IS ACCOMPLISHED IN A SYSTEM DEPENDENT
                   1259: *      MANNER, AND THUS THE 2ND AND 3RD ARGUMENTS ARE PASSED
                   1260: *      UNCONVERTED.
                   1261: *
                   1262: *      (WA)                  FCBLK POINTER
                   1263: *      (WB)                  2ND ARGUMENT
                   1264: *      (WC)                  3RD ARGUMENT
                   1265: *      JSR  SYSST            CALL TO SET FILE POINTER
                   1266: *      PPM  LOC              RETURN HERE IF INVALID 2ND ARG
                   1267: *      PPM  LOC              RETURN HERE IF INVALID 3RD ARG
                   1268: *      PPM  LOC              RETURN HERE IF FILE DOES NOT EXIST
                   1269: *      PPM  LOC              RETURN HERE IF SET NOT ALLOWED
                   1270: *      PPM  LOC              RETURN HERE IF I/O ERROR
                   1271: *
                   1272:        EJC
                   1273: .FI
                   1274: *
                   1275: *      SYSTM -- GET EXECUTION TIME SO FAR
                   1276: *
                   1277: SYSTM  EXP                   DEFINE EXTERNAL ENTRY POINT
                   1278: *
                   1279: *      SYSTM IS USED TO OBTAIN THE AMOUNT OF EXECUTION TIME
                   1280: *      USED SO FAR SINCE SPITBOL WAS GIVEN CONTROL. THE UNITS
                   1281: *      ARE DESCRIBED AS MILLISECONDS IN THE SPITBOL OUTPUT, BUT
                   1282: *      THE EXACT MEANING IS SYSTEM DEPENDENT. WHERE APPROPRIATE,
                   1283: *      THIS VALUE SHOULD RELATE TO PROCESSOR RATHER THAN CLOCK
                   1284: *      TIMING VALUES.
                   1285: *
                   1286: *      JSR  SYSTM            CALL TO GET TIMER VALUE
                   1287: *      (IA)                  TIME SO FAR IN MILLISECONDS
                   1288:        EJC
                   1289: *
                   1290: *      SYSTT -- TRACE TOGGLE
                   1291: *
                   1292: SYSTT  EXP                   DEFINE EXTERNAL ENTRY POINT
                   1293: *
                   1294: *      CALLED BY SPITBOL FUNCTION TRACE() WITH NO ARGS TO
                   1295: *      TOGGLE THE SYSTEM TRACE SWITCH.  THIS PERMITS TRACING OF
                   1296: *      LABELS IN SPITBOL CODE TO BE TURNED ON OR OFF.
                   1297: *
                   1298: *      JSR  SYSTT            CALL TO TOGGLE TRACE SWITCH
                   1299:        EJC
                   1300: *
                   1301: *      SYSUL -- UNLOAD EXTERNAL FUNCTION
                   1302: *
                   1303: SYSUL  EXP                   DEFINE EXTERNAL ENTRY POINT
                   1304: *
                   1305: *      SYSUL IS USED TO UNLOAD A FUNCTION PREVIOUSLY
                   1306: *      LOADED WITH A CALL TO SYSLD.
                   1307: *
                   1308: *      (XR)                  PTR TO CONTROL BLOCK (EFBLK)
                   1309: *      JSR  SYSUL            CALL TO UNLOAD FUNCTION
                   1310: *
                   1311: *      THE FUNCTION CANNOT BE CALLED FOLLOWING A SYSUL CALL
                   1312: *      UNTIL ANOTHER SYSLD CALL IS MADE FOR THE SAME FUNCTION.
                   1313: *
                   1314: *      THE EFBLK CONTAINS THE FUNCTION CODE POINTER AND ALSO A
                   1315: *      POINTER TO THE VRBLK CONTAINING THE FUNCTION NAME (SEE
                   1316: *      DEFINITIONS AND DATA STRUCTURES SECTION).
                   1317: .IF    .CNEX
                   1318: .ELSE
                   1319:        EJC
                   1320: *
                   1321: *      SYSXI -- EXIT TO PRODUCE LOAD MODULE
                   1322: *
                   1323: SYSXI  EXP                   DEFINE EXTERNAL ENTRY POINT
                   1324: *
                   1325: *      WHEN SYSXI IS CALLED, XL CONTAINS EITHER A STRING POINTER
                   1326: *      OR ZERO. IN THE FORMER CASE, THE STRING GIVES THE
                   1327: *      CHARACTER NAME OF A PROGRAM. THE INTENTION IS THAT
                   1328: *      SPITBOL EXECUTION SHOULD BE TERMINATED FORTHWITH AND
                   1329: *      THE NAMED PROGRAM LOADED AND EXECUTED. THIS TYPE OF CHAIN
                   1330: *      EXECUTION IS VERY SYSTEM DEPENDENT AND IMPLEMENTORS MAY
                   1331: *      CHOOSE TO OMIT IT OR FIND IT IMPOSSIBLE TO PROVIDE.
                   1332: *      IF (XL) IS ZERO,IA CONTAINS ONE OF THE FOLLOWING INTEGERS
                   1333: *
                   1334: *      -1, -2, -3
                   1335: *           CREATE IF POSSIBLE A LOAD MODULE CONTAINING ONLY THE
                   1336: *           IMPURE AREA OF MEMORY WHICH NEEDS TO BE LOADED WITH
                   1337: *           A COMPATIBLE PURE SEGMENT FOR SUBSEQUENT EXECUTIONS.
                   1338: *           VERSION NUMBERS TO CHECK COMPATIBILITY SHOULD BE
                   1339: *           KEPT IN BOTH SEGMENTS AND CHECKED ON LOADING.
                   1340: *           TO ASSIST WITH THIS CHECK, (XR) ON ENTRY IS A
                   1341: *           POINTER TO AN SCBLK CONTAINING THE SPITBOL MAJOR
                   1342: *           VERSION NUMBER V.V (SEE SYSID).
                   1343: *
                   1344: *      0    IF POSSIBLE, RETURN CONTROL TO JOB CONTROL
                   1345: *           COMMAND LEVEL. THE EFFECT IF AVAILABLE WILL BE
                   1346: *           SYSTEM DEPENDENT.
                   1347: *
                   1348: *      +1, +2, +3
                   1349: *           CREATE IF POSSIBLE A LOAD MODULE FROM ALL OF
                   1350: *           MEMORY. IT SHOULD BE POSSIBLE TO LOAD AND EXECUTE
                   1351: *           THIS MODULE DIRECTLY.
                   1352: *
                   1353: *      IN THE CASE OF SAVED LOAD MODULES, THE STATUS OF OPEN
                   1354: *      FILES IS NOT PRESERVED AND IMPLEMENTORS MAY CHOOSE TO
                   1355: *      OFFER MEANS OF ATTACHING FILES BEFORE EXECUTION OF LOAD
                   1356: *      MODULES STARTS OR LEAVE IT TO THE USER TO INCLUDE
                   1357: *      SUITABLE INPUT(), OUTPUT() CALLS IN HIS PROGRAM.
                   1358: *      SYSXI SHOULD MAKE A NOTE THAT NO I/O CHANNELS,
                   1359: *      INCLUDING STANDARD FILES, HAVE FILES ATTACHED SO THAT
                   1360: *      CALLS OF SYSIN, SYSOU, SYSPR, SYSRD SHOULD FAIL UNLESS
                   1361: *      NEW ASSOCIATIONS ARE MADE FOR THE LOAD MODULE.
                   1362: *      AT LEAST IN THE CASE OF THE STANDARD OUTPUT FILE, IT IS
                   1363: *      RECOMMENDED THAT EITHER THE USER BE REQUIRED TO ATTACH
                   1364: *      A FILE OR THAT A DEFAULT FILE IS ATTACHED, SINCE THE
                   1365: *      PROBLEM OF ERROR MESSAGES GENERATED BY THE LOAD MODULE
                   1366: *      IS OTHERWISE SEVERE. AS A LAST RESORT, IF SPITBOL
                   1367: *      ATTEMPTS TO WRITE TO THE STANDARD OUTPUT FILE AND GETS A
                   1368: *      REPLY INDICATING THAT SUCH OUPUT IS UNACCEPTABLE IT STOPS
                   1369: *      BY USING AN ENTRY TO SYSEJ WITH ENDING CODE 998.
                   1370: *      AS DESCRIBED BELOW, PASSING OF SOME ARGUMENTS MAKES IT
                   1371: *      CLEAR THAT LOAD MODULE WILL USE A STANDARD OUTPUT FILE.
                   1372: *
                   1373: *      IF USE IS MADE OF FCBLKS FOR I/O ASSOCIATION, SPITBOL
                   1374: *      BUILDS A CHAIN SO THAT THOSE IN USE MAY BE FOUND IN SYSXI
                   1375: *      AND SYSEJ. THE NODES ARE 4 WORDS LONG. THIRD WORD
                   1376: *      CONTAINS LINK TO NEXT NODE OR 0, FOURTH WORD CONTAINS
                   1377: *      FCBLK POINTER.
                   1378:        EJC
                   1379: *
                   1380: *      SYSXI (CONTINUED)
                   1381: *
                   1382: *      (XL)                  ZERO OR SCBLK PTR
                   1383: *      (XR)                  PTR TO V.V SCBLK
                   1384: *      (IA)                  SIGNED INTEGER ARGUMENT
                   1385: *      (WB)                  0 OR PTR TO HEAD OF FCBLK CHAIN
                   1386: *      JSR  SYSXI            CALL TO EXIT
                   1387: *      PPM  LOC              REQUESTED ACTION NOT POSSIBLE
                   1388: *      PPM  LOC              ACTION CAUSED IRRECOVERABLE ERROR
                   1389: *      (REGISTERS)           SHOULD BE PRESERVED OVER CALL
                   1390: *
                   1391: *      LOADING AND RUNNING THE LOAD MODULE OR RETURNING FROM
                   1392: *      JCL COMMAND LEVEL CAUSES EXECUTION TO RESUME AT THE POINT
                   1393: *      AFTER THE ERROR RETURNS WHICH FOLLOW THE CALL OF SYSXI.
                   1394: *      THE VALUE PASSED AS EXIT ARGUMENT IS USED TO INDICATE
                   1395: *      OPTIONS REQUIRED ON RESUMPTION OF LOAD MODULE.
                   1396: *      +1 OR -1 REQUIRE THAT ON RESUMPTION, SYSID AND SYSPP BE
                   1397: *      CALLED AND A HEADING PRINTED ON THE STANDARD OUTPUT FILE.
                   1398: *      +2 OR -2 INDICATE THAT SYSPP WILL BE CALLED BUT NOT SYSID
                   1399: *      AND NO HEADING WILL BE PUT ON STANDARD OUTPUT FILE.
                   1400: *      ABOVE OPTIONS HAVE THE OBVIOUS IMPLICATION THAT A
                   1401: *      STANDARD O/P FILE MUST BE PROVIDED FOR THE LOAD MODULE.
                   1402: *      +3 OR -3 INDICATE CALLS OF NEITHER SYSID NOR SYSPP
                   1403: *      AND NO HEADING WILL BE PLACED ON STANDARD OUTPUT FILE.
                   1404: *      NO RETURN FROM SYSXI IS POSSIBLE IF ANOTHER PROGRAM
                   1405: *      IS LOADED AND ENTERED.
                   1406: .FI

unix.superglobalmegacorp.com

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