V10/cmd/spitbol/4.3/diff.out

1,4c1,6
<        TTL  S P I T B O L - REVISION HISTORY
<        EJC
< *      R E V I S I O N   H I S T O R Y
< *      -------------------------------
---
> *      CHANGES [SGD]
> *      -------------
> *      1. COMMENTED OUT DEFAULT .DEF, .UNDEF AS THESE MACHINE-
> *         DEPENDENT.  I SUGGEST AGAIN THAT THESE DO NOT BELONG
> *         IN MINIMAL SOURCE, UNLESS SOMETHING OF THE FORM .*DEF
> *         IS TO BE INCORPORTATED INTO MINIMAL LANGUAGE DEFN.
5a8,11
> *      2. NOTED THAT DESCRIPTION OF BEV, BOD MISSING FROM
> *         SBL42.CMT MINIMAL DESCRIPTION, AND DISCUSSION OF
> *         "ODD"/"EVEN" AND REQUIREMENTS PERTAINING THERETO
> *         SEEMS INSUFFICIENT.
7,8c13,21
< *      VERSION 3.5B (FEB 81... - SGD PATCHES)
< *      -----------------------------------
---
> *      3. PERMIT CODE KEYWORD TO CONTAIN ANY INTEGER VALUE.
> *         THIS CONSISTS OF REMOVING THE ENFORCED RESTRICTION
> *         IN ASIGN (SEE ASG24), SINCE CODE CONTAINS NO RELOC.
> *         USE OF KEYWORD VALUE (AS IT SHOULDNT).  SBL DOC.
> *         MUST BE UPDATED.  ADDRESS OF CODE VALUE NOW PASSED TO
> *         OSINT (KVCOD), INSTEAD OF VALUE ITSELF.  HENCE OSINT
> *         DOCUMENTATION MUST LIKEWISE BE REVISED.  CHANGES
> *         MADE IN KEYWORD DEFINITION TABLES, PROCEDURES ACESS
> *         AND ASIGN SINCE CODE NOW SPECIAL KEYWORD.
10,42c23,24
< *      SGD03 - ADDITION OF .CNCI AND SYSCI (INT->STRING
< *              SYSTEM ROUTINE OPTION)
< *      SGD04 - (06-MAY-1981) MODIFIED INILN TO 132
< *      SGD05 - (13-MAY-1981) INSERTED MISSING WTB AFTER SYSMM
< *              CALLS
< *      SGD06 - (25-MAY-1981) MERGED IN PROFILER PATCHES
< *              (NOT MARKED)
< *      SGD07 - (25-MAY-1981) MUCHO PATCHES TO PROFILER (MARKED,
< *              BUT BEST JUST TO EXTRACT ENMASSE)
< *      SGD08 - (25-MAY-1981) USE STRING LENGTH IN HASHS
< *      SGD09 - (25-MAY-1981) FIXED SERIOUS PARSER PROBLEM
< *              RELATING TO (X Y) ON LINE BEING VIEWED AS PATTERN
< *              MATCH.  FIXED BY ADDITION OF NEW CMTYP VALUE
< *              C$CNP (CONCATENATION - NOT PATTERN MATCH)
< *      SGD10 - (01-AUG-1981) FIXED EXIT(N) RESPECIFICATION CODE
< *              TO PROPERLY OBSERVE HEADER SEMANTICS ON RETURN.
< *      SGD11 - (07-AUG-1981) BYPASS PRTPG CALL AT INITIALIZATION
< *              FOLLOWING COMPILATION IF NO OUTPUT GENERATED.
< *              THIS PREVENTS OUTPUT FILES CONSISTING OF THE
< *              HEADERS AND A FEW BLANK LINES WHEN THERE IS NO
< *              SOURCE LISTING AND NO COMPILATION STATS.
< *              ALSO FIX TIMSX INITIALIZATION IN SAME CODE.
< *      SGD12 - (17-AUG-1981) B$EFC CODE DID NOT CHECK FOR
< *              UNCONVERTED RESULT RETURNING NULL STRING.  FIXED.
< *      SGDBF - (   NOV-1981) ADDED BUFFER TYPE AND SYMBOL CNBF
< *      SGD13 - (03-MAR-1982) LOAD PFVBL FIELD IN RETRN FOR
< *              RETURN TRACING. THIS WAS CAUSING BUG ON RETURN
< *              TRACES THAT TRIED TO ACCESS THE VARIABLE NAME
< *      SGD14 - ADDED CHAR FUNCTION.  CHAR(N) RETURNS NTH
< *              CHARACTER OF HOST MACHINE CHARACTER SET.
< *              NOT CONDITIONALIZED OR MARKED.
< *      SGD15 - FIXED PROBLEM RELATING TO COMPILATION OF GOTO
< *              FIELDS CONTAINING SMALL INTEGERS (IN CONST SEC).
---
> *         EROSI RETURNS NOW CONTAIN NEW CODE KEYWORD VALUE IN
> *         IA. OSINT DOCUMENTATION MUST BE REVISED.
44,48c26,29
< *      REG01 - (XX-AUG-82)
< *              ADDED CFP$U TO EASE TRANSLATION ON SMALLER
< *              SYSTEMS                  - CONDITIONAL .CUCF
< *              ADDED LOWER CASE SUPPORT - CONDITIONAL .CULC
< *              ADDED SET I/O FUNCTION   - CONDITIONAL .CUST
---
> *         INTERESTINGLY, THIS SHOULD PERMIT THE SPITBOL PROGRAM
> *         TO INTERROGATE THE CODE KEYWORD AT THE START OF
> *         EXECUTION TO DETERMINE IF COMPILATION ERRORS
> *         OCCURRED.
50,51c31,46
< *      REG02 - (XX-SEP-82)
< *              CHANGED INILN AND AND INILS TO 258
---
> *      4. ADD -COPY "FILETAG" CONTROL CARD.  -COPY PERMITTED IN
> *         CODE STRINGS.  NESTING IS PERMITTED TO ANY LEVEL,
> *         THOUGH OSINT IS FREE TO RESTRICT THE MAXIMUM LEVEL.
> *         NOTE REQUIREMENT FOR FILETAG SPECIFIED AS
> *         STRING CONSTANT SINCE FILETAGS MAY CONTAIN SEMICOLONS.
> *         I HAVE TRIED TO MAKE THIS ENHANCEMENT WITH MINIMUM
> *         (MINIMAL?) AMOUNT OF NEW CODE, SO THE FEATURE IS
> *         NOT CONDITIONALIZED.  THE SOLUTION
> *         REQUIRED THE ADDITION OF A NEW BLOCK TYPE (COBLK) TO
> *         BUILD THE INPUT CONTEXT SAVE STACK AS A CHAIN OF
> *         COBLKS.  A RECUSIVE SOLUTION ON CMPIL/READR/NEXTS
> *         WOULD HAVE REQUIRED EXTENSIVE MODIFICATIONS AND
> *         SUBSTANTIAL NEW CODE.  NOTE THAT FORMS SUCH AS
> *         CODE('-COPY "FILE.SBL"') ARE ACCEPTABLE, WHICH IS
> *         VIEWED AS SIGNIFICANT ENHANCEMENT IN ADDITION TO
> *         COMPILE-TIME INCLUDE.
53,59c48,50
< *      REG03 - (XX-OCT-82)
< *              CONDITIONALIZED THE PAGE EJECT AFTER CALL TO SYSBX
< *              AND ADDED ANOTHER BEFORE CALL TO SYSBX, SO THAT,
< *              IF DESIRED BY THE IMPLEMENTOR, STANDARD OUTPUT
< *              WILL REFLECT ASSIGNMENTS MADE BY EXECUTING PROGRAM
< *              ONLY. CONDITIONAL .CUEJ CONTROLS - IF DEFINED
< *              EJECT IS BEFORE CALL TO SYSBX.
---
> *         TO SUPPORT THIS FEATURE, TWO NEW OSINT ROUTINES ARE
> *         DEFINED, SYSSC (START COPY) AND SYSEC (END COPY) WITH
> *         LOGICS DESCRIBED IN THE .CMT FILE.
61,63c52,57
< *      REG04 - (XX-NOV-82)
< *              FIXED DIFFICULTIES WITH LISTINGS DURING EXECUTION
< *              WHEN NO LISTING GENERATED DURING COMPILATION.
---
> *         BECAUSE OF ANNOYANCE FACTOR, SOURCE LISTING OF
> *         CODE() INFO VIA -LIST, INCLUDING -COPY INPUT, IS
> *         NO LONGER POSSIBLE.  IF THIS IS PERMITTED, THEN
> *         ONE FINDS -COPY INPUT BEING PRINTED ON STD.
> *         OUTPUT CHANNEL (DEPENDING ON STATE OF -LIST),
> *         UNLESS EXPLICIT -NOLIST IS GIVEN.
65,67c59,63
< *              -LIST TO CODE() CAUSED BOMB. FIX IS TO RESET
< *              R$TTL AND R$STL TO NULLS NOT 0 AFTER COMPILATION.
< *              (LISTR AND LISTT EXPECT NULLS)
---
> *      5. THE DOCUMENTATION FOR SYSIO IS INCONSISTENT.  IT
> *         SHOWS 0,1,2,3 BEING POSSIBLE INPUTS DEPENDING ON
> *         INPUT/OUTPUT, STD/NONSTD.  HOWEVER, IT ALSO APPEARS
> *         (AND IS STATED) THAT SYSIO IS NOT CALLED FOR STD
> *         INPUT/OUTPUT.
69,224c65,67
< *              WHEN LISTING AND STATISTICS ROUTED TO DIFFERENT
< *              FILE THAN EXECUTION OUTPUT, ERROR MESSAGE IS SENT
< *              TO EXECUTION OUTPUT (AND GETS SEPARATED FROM
< *              ... IN STATEMENT ... MSG). LABO1 CALLS SYSAX AND
< *              STOPR DOES NOT CALL SYSAX IF ENTERED FROM LABO1.
< *
< *      REG05 - (XX-NOV-82)
< *              PREVENT CLEAR() FROM CLOBBERING PROTECTED VARIABLES
< *              AT LABEL SCLR5.
< *
< *      REG06 - (XX-NOV-82)
< *              FIXED GTEXP FROM ACCEPTING TRAILING SEMICOLON OR
< *              COLON. NOT LEGAL WAY TO END AN EXPRESSION.
< *
< *      VERSION 3.5A (OCT 79 - SGD PATCHES)
< *      -----------------------------------
< *
< *      SGD01 - PATCH IN ASIGN TO FIX MULTIPLE TRAP BLOCK PROBLEM
< *              (ASG10+2)
< *      SGD02 - PATCH IN GTARR TO FIX NULL CONVERT (GTAR9+0)
< *
<        TTL  S P I T B O L  -- BASIC INFORMATION
<        EJC
< *
< *      GENERAL STRUCTURE
< *      -----------------
< *
< *      THIS PROGRAM IS A TRANSLATOR FOR A VERSION OF THE SNOBOL4
< *      PROGRAMMING LANGUAGE. LANGUAGE DETAILS ARE CONTAINED IN
< *      THE MANUAL MACRO SPITBOL BY DEWAR AND MCCANN, TECHNICAL
< *      REPORT 90, UNIVERSITY OF LEEDS 1976.  THE LANGUAGE
< *      IS IDENTICAL TO THAT IMPLEMENTED BY THE BTL TRANSLATOR
< *      (R. E. GRISWOLD ET AL.) WITH THE FOLLOWING EXCEPTIONS.
< *
< *      1)   REDEFINITION OF STANDARD SYSTEM FUNCTIONS AND
< *           OPERATORS IS NOT PERMITTED.
< *
< *      2)   THE VALUE FUNCTION IS NOT PROVIDED.
< *
< *      3)   ACCESS TRACING IS PROVIDED IN ADDITION TO THE
< *           OTHER STANDARD TRACE MODES.
< *
< *      4)   THE KEYWORD STFCOUNT IS NOT PROVIDED.
< *
< *      5)   THE KEYWORD FULLSCAN IS NOT PROVIDED AND ALL PATTERN
< *           MATCHING TAKES PLACE IN FULLSCAN MODE (I.E. WITH NO
< *           HEURISTICS APPLIED).
< *
< *      6)   A SERIES OF EXPRESSIONS SEPARATED BY COMMAS MAY
< *           BE GROUPED WITHIN PARENTHESES TO PROVIDE A SELECTION
< *           CAPABILITY. THE SEMANTICS ARE THAT THE SELECTION
< *           ASSUMES THE VALUE OF THE FIRST EXPRESSION WITHIN IT
< *           WHICH SUCCEEDS AS THEY ARE EVALUATED FROM THE LEFT.
< *           IF NO EXPRESSION SUCCEEDS THE ENTIRE STATEMENT FAILS
< *
< *      7)   AN EXPLICIT PATTERN MATCHING OPERATOR IS PROVIDED.
< *           THIS IS THE BINARY QUERY (SEE GIMPEL SIGPLAN OCT 74)
< *
< *      8)   THE ASSIGNMENT OPERATOR IS INTRODUCED AS IN THE
< *           GIMPEL REFERENCE.
< *
< *      9)   THE EXIT FUNCTION IS PROVIDED FOR GENERATING LOAD
< *           MODULES - CF. GIMPELS SITBOL.
< *
< *
< *      THE METHOD USED IN THIS PROGRAM IS TO TRANSLATE THE
< *      SOURCE CODE INTO AN INTERNAL PSEUDO-CODE (SEE FOLLOWING
< *      SECTION). AN INTERPRETOR IS THEN USED TO EXECUTE THIS
< *      GENERATED PSEUDO-CODE. THE NATURE OF THE SNOBOL4 LANGUAGE
< *      IS SUCH THAT THE LATTER TASK IS MUCH MORE COMPLEX THAN
< *      THE ACTUAL TRANSLATION PHASE. ACCORDINGLY, NEARLY ALL THE
< *      CODE IN THE PROGRAM SECTION IS CONCERNED WITH THE ACTUAL
< *      EXECUTION OF THE SNOBOL4 PROGRAM.
<        EJC
< *
< *      INTERPRETIVE CODE FORMAT
< *      ------------------------
< *
< *      THE INTERPRETIVE PSEUDO-CODE CONSISTS OF A SERIES OF
< *      ADDRESS POINTERS. THE EXACT FORMAT OF THE CODE IS
< *      DESCRIBED IN CONNECTION WITH THE CDBLK FORMAT. THE
< *      PURPOSE OF THIS SECTION IS TO GIVE GENERAL INSIGHT INTO
< *      THE INTERPRETIVE APPROACH INVOLVED.
< *
< *      THE BASIC FORM OF THE CODE IS RELATED TO REVERSE POLISH.
< *      IN OTHER WORDS, THE OPERANDS PRECEDE THE OPERATORS WHICH
< *      ARE ZERO ADDRESS OPERATORS. THERE ARE SOME EXCEPTIONS TO
< *      THESE RULES, NOTABLY THE UNARY NOT OPERATOR AND THE
< *      SELECTION CONSTRUCTION WHICH CLEARLY REQUIRE ADVANCE
< *      KNOWLEDGE OF THE OPERATOR INVOLVED.
< *
< *      THE OPERANDS ARE MOVED TO THE TOP OF THE MAIN STACK AND
< *      THE OPERATORS ARE APPLIED TO THE TOP STACK ENTRIES. LIKE
< *      OTHER VERSIONS OF SPITBOL, THIS PROCESSOR DEPENDS ON
< *      KNOWING WHETHER OPERANDS ARE REQUIRED BY NAME OR BY VALUE
< *      AND MOVES THE APPROPRIATE OBJECT TO THE STACK. THUS NO
< *      NAME/VALUE CHECKS ARE INCLUDED IN THE OPERATOR CIRCUITS.
< *
< *      THE ACTUAL POINTERS IN THE CODE POINT TO A BLOCK WHOSE
< *      FIRST WORD IS THE ADDRESS OF THE INTERPRETOR ROUTINE
< *      TO BE EXECUTED FOR THE CODE WORD.
< *
< *      IN THE CASE OF OPERATORS, THE POINTER IS TO A WORD WHICH
< *      CONTAINS THE ADDRESS OF THE OPERATOR TO BE EXECUTED. IN
< *      THE CASE OF OPERANDS SUCH AS CONSTANTS, THE POINTER IS TO
< *      THE OPERAND ITSELF. ACCORDINGLY, ALL OPERANDS CONTAIN
< *      A FIELD WHICH POINTS TO THE ROUTINE TO LOAD THE VALUE OF
< *      THE OPERAND ONTO THE STACK. IN THE CASE OF A VARIABLE,
< *      THERE ARE THREE SUCH POINTERS. ONE TO LOAD THE VALUE,
< *      ONE TO STORE THE VALUE AND A THIRD TO JUMP TO THE LABEL.
< *
< *      THE HANDLING OF FAILURE RETURNS DESERVES SPECIAL COMMENT.
< *      THE LOCATION FLPTR CONTAINS THE POINTER TO THE LOCATION
< *      ON THE MAIN STACK WHICH CONTAINS THE FAILURE RETURN
< *      WHICH IS IN THE FORM OF A BYTE OFFSET IN THE CURRENT
< *      CODE BLOCK (CDBLK OR EXBLK). WHEN A FAILURE OCCURS, THE
< *      STACK IS POPPED AS INDICATED BY THE SETTING OF FLPTR AND
< *      CONTROL IS PASSED TO THE APPROPRIATE LOCATION IN THE
< *      CURRENT CODE BLOCK WITH THE STACK POINTER POINTING TO THE
< *      FAILURE OFFSET ON THE STACK AND FLPTR UNCHANGED.
<        EJC
< *
< *      INTERNAL DATA REPRESENTATIONS
< *      -----------------------------
< *
< *      REPRESENTATION OF VALUES
< *
< *      A VALUE IS REPRESENTED BY A POINTER TO A BLOCK WHICH
< *      DESCRIBES THE TYPE AND PARTICULARS OF THE DATA VALUE.
< *      IN GENERAL, A VARIABLE IS A LOCATION CONTAINING SUCH A
< *      POINTER (ALTHOUGH IN THE CASE OF TRACE ASSOCIATIONS THIS
< *      IS MODIFIED, SEE DESCRIPTION OF TRBLK).
< *
< *      THE FOLLOWING IS A LIST OF POSSIBLE DATATYPES SHOWING THE
< *      TYPE OF BLOCK USED TO HOLD THE VALUE. THE DETAILS OF
< *      EACH BLOCK FORMAT ARE GIVEN LATER.
< *
< *      DATATYPE              BLOCK TYPE
< *      --------              ----------
< *
< *
< *      ARRAY                 ARBLK OR VCBLK
< *
< *      CODE                  CDBLK
< *
< *      EXPRESSION            EXBLK OR SEBLK
< *
< *      INTEGER               ICBLK
< *
< *      NAME                  NMBLK
< *
< *      PATTERN               P0BLK OR P1BLK OR P2BLK
< *
< *      REAL                  RCBLK
< *
< *      STRING                SCBLK
---
> *      6. SINCE -PRINT,-NOPRINT REMOVED IN V4, I HAVE
> *         REINSTATED THE CIRCUIT IN NEXTS TO AVOID LISTING
> *         CONTROL CARDS (-COPY FORCES LIST IN CNCRD THOUGH).
226c69,70
< *      TABLE                 TBBLK
---
> *      7. WA NOW CONTAINS THE INITIAL VALUE OF &CODE ON ENTRY
> *         TO SPITBOL.
228,229c72,77
< *      PROGRAM DATATYPE      PDBLK
<        EJC
---
> *      8. ADDED DDC (DEFINE DISPLAY CONSTANT).  IS IDENTICAL
> *         TO DTC EXCEPT THAT ON SYSTEMS SUPPORTING LOWER CASE,
> *         THE DISPLAY TEXT CAN BE TRANSLATED WITH A
> *         CASE MIX.  FOR EXAMPLE, CAPITALIZE ONLY THE FIRST
> *         LETTER, OR THE FIRST LETTER OF EVERY WORD, OR NO
> *         UPPER CASE (FOR EUNICHS), ETC.
231,232c79,81
< *      REPRESENTATION OF VARIABLES
< *      ---------------------------
---
> *      9. FIX MINOR OVERSIGHT IN FAILING TO CLEAR R$PMB AT
> *         END OF PATTERN MATCH, THUS LEAVING PTR TO BCBLK
> *         THAT CANNOT BE COLLECTED.
234,238c83,92
< *      DURING THE COURSE OF EVALUATING EXPRESSIONS, IT IS
< *      NECESSARY TO GENERATE NAMES OF VARIABLES (FOR EXAMPLE
< *      ON THE LEFT SIDE OF A BINARY EQUALS OPERATOR). THESE ARE
< *      NOT TO BE CONFUSED WITH OBJECTS OF DATATYPE NAME WHICH
< *      ARE IN FACT VALUES.
---
> *     10. AFTER CONSULTATION WITH DAVE SHIELDS, IT WAS AGREED
> *         TO REINSTATE ARG,FIELD,ITEM AND LOCAL FUNCTIONS.
> *         COMMENTS WERE RECEIVED THAT REMOVING THEM BREAKS
> *         EXISTING CODE IN DIFFICULT-TO-FIX WAYS, INCLUDING
> *         A NUMBER OF THE UTILITY ROUTINES IN GIMPELS BOOK.
> *         IN ANY EVENT, THESE ARE SNOBOL4 COMPATIBILITY
> *         FUNCTIONS THAT TAKE LITTLE CODE SPACE.  AS A
> *         RESULT OF THIS, AND -COPY, ERROR NUMBERS HAVE
> *         BEEN PUSHED BACK OVER THE 255 THRESHOLD, WHICH
> *         SEEMS UNAVOIDABLE UNLESS MAJOR SURGERY IS DONE.
240,250c94,95
< *      FROM A LOGICAL POINT OF VIEW, SUCH NAMES COULD BE SIMPLY
< *      REPRESENTED BY A POINTER TO THE APPROPRIATE VALUE CELL.
< *      HOWEVER IN THE CASE OF ARRAYS AND PROGRAM DEFINED
< *      DATATYPES, THIS WOULD VIOLATE THE RULE THAT THERE MUST BE
< *      NO POINTERS INTO THE MIDDLE OF A BLOCK IN DYNAMIC STORE.
< *      ACCORDINGLY, A NAME IS ALWAYS REPRESENTED BY A BASE AND
< *      OFFSET. THE BASE POINTS TO THE START OF THE BLOCK
< *      CONTAINING THE VARIABLE VALUE AND THE OFFSET IS THE
< *      OFFSET WITHIN THIS BLOCK IN BYTES. THUS THE ADDRESS
< *      OF THE ACTUAL VARIABLE IS DETERMINED BY ADDING THE BASE
< *      AND OFFSET VALUES.
---
> *     11. VERSION ID CHANGED TO V4.3 DUE TO SUBSTANTIAL
> *         CHANGES.
252,253c97,98
< *      THE FOLLOWING ARE THE INSTANCES OF VARIABLES REPRESENTED
< *      IN THIS MANNER.
---
> *     12. PERMIT DOLLAR SIGN IN VARIABLE NAMES.  MINOR
> *         CHANGE TO OPERATOR TABLE AND SCANE.
255,256c100,103
< *      1)   NATURAL VARIABLE BASE IS PTR TO VRBLK
< *                            OFFSET IS *VRVAL
---
> *     13. PERMIT BUFFER TYPE FOR LOAD SPECIFICATION.  AS
> *         A SIDE-EFFECT, THE CODE FOR BUFFER CONVERSION HAS
> *         BEEN CENTRALIZED IN GTBUF.  ALSO FIXED PADDING
> *         BUG IN INSBF RELATED TO ZERO PADDING.
258,259c105,108
< *      2)   TABLE ELEMENT    BASE IS PTR TO TEBLK
< *                            OFFSET IS *TEVAL
---
> *     14. DOCUMENT THAT SYSIL MUST NEVER REQUEST ZERO BYTES.
> *         DOING SO CAUSES ACESS TO POTENTIALLY CREATE
> *         INVALID MEMORY CAUSING LATER GARBAGE COLLECTOR
> *         PROBLEMS OR MISADJUSTMENTS OF DNAMP, ETC.
261,262c110,112
< *      3)   ARRAY ELEMENT    BASE IS PTR TO ARBLK
< *                            OFFSET IS OFFSET TO ELEMENT
---
> *     15. VDIFFER FUNCTION ADDED.  VDIFFER(X,Y) RETURNS X
> *         IF DIFFERENT FROM Y.  IN MOST CASES IT IS EXPECTED
> *         THAT Y WOULD BE NULL.
264,281c114
< *      4)   VECTOR ELEMENT   BASE IS PTR TO VCBLK
< *                            OFFSET IS OFFSET TO ELEMENT
< *
< *      5)   PROG DEF DTP     BASE IS PTR TO PDBLK
< *                            OFFSET IS OFFSET TO FIELD VALUE
< *
< *      IN ADDITION THERE ARE TWO CASES OF OBJECTS WHICH ARE
< *      LIKE VARIABLES BUT CANNOT BE HANDLED IN THIS MANNER.
< *      THESE ARE CALLED PSEUDO-VARIABLES AND ARE REPRESENTED
< *      WITH A SPECIAL BASE POINTER AS FOLLOWS=
< *
< *      EXPRESSION VARIABLE   PTR TO EVBLK (SEE EVBLK)
< *
< *      KEYWORD VARIABLE      PTR TO KVBLK (SEE KVBLK)
< *
< *      PSEUDO-VARIABLES ARE HANDLED AS SPECIAL CASES BY THE
< *      ACCESS PROCEDURE (ACESS) AND THE ASSIGNMENT PROCEDURE
< *      (ASIGN). SEE THESE TWO PROCEDURES FOR DETAILS.
---
>        SEC                   FORMAL START OF PROCEDURES SECTION
284,411d116
< *      ORGANIZATION OF DATA AREA
< *      -------------------------
< *
< *
< *      THE DATA AREA IS DIVIDED INTO TWO REGIONS.
< *
< *      STATIC AREA
< *
< *      THE STATIC AREA BUILDS UP FROM THE BOTTOM AND CONTAINS
< *      DATA AREAS WHICH ARE ALLOCATED DYNAMICALLY BUT ARE NEVER
< *      DELETED OR MOVED AROUND. THE MACRO-PROGRAM ITSELF
< *      USES THE STATIC AREA FOR THE FOLLOWING.
< *
< *      1)   ALL VARIABLE BLOCKS (VRBLK).
< *
< *      2)   THE HASH TABLE FOR VARIABLE BLOCKS.
< *
< *      3)   MISCELLANEOUS BUFFERS AND WORK AREAS (SEE PROGRAM
< *           INITIALIZATION SECTION).
< *
< *      IN ADDITION, THE SYSTEM PROCEDURES MAY USE THIS AREA FOR
< *      INPUT/OUTPUT BUFFERS, EXTERNAL FUNCTIONS ETC. SPACE IN
< *      THE STATIC REGION IS ALLOCATED BY CALLING PROCEDURE ALOST
< *
< *      THE FOLLOWING GLOBAL VARIABLES DEFINE THE CURRENT
< *      LOCATION AND SIZE OF THE STATIC AREA.
< *
< *      STATB                 ADDRESS OF START OF STATIC AREA
< *      STATE                 ADDRESS+1 OF LAST WORD IN AREA.
< *
< *      THE MINIMUM SIZE OF STATIC IS GIVEN APPROXIMATELY BY
< *           12 + *E$HNB + *E$STS + SPACE FOR ALPHABET STRING
< *           AND STANDARD PRINT BUFFER.
<        EJC
< *
< *      DYNAMIC AREA
< *
< *      THE DYNAMIC AREA IS BUILT UPWARDS IN MEMORY AFTER THE
< *      STATIC REGION. DATA IN THIS AREA MUST ALL BE IN STANDARD
< *      BLOCK FORMATS SO THAT IT CAN BE PROCESSED BY THE GARBAGE
< *      COLLECTOR (PROCEDURE GBCOL). GBCOL COMPACTS BLOCKS DOWN
< *      IN THIS REGION AS REQUIRED BY SPACE EXHAUSTION AND CAN
< *      ALSO MOVE ALL BLOCKS UP TO ALLOW FOR EXPANSION OF THE
< *      STATIC REGION.
< *      WITH THE EXCEPTION OF TABLES AND ARRAYS, NO SPITBOL
< *      OBJECT ONCE BUILT IN DYNAMIC MEMORY IS EVER SUBSEQUENTLY
< *      MODIFIED. OBSERVING THIS RULE NECESSITATES A COPYING
< *      ACTION DURING STRING AND PATTERN CONCATENATION.
< *
< *      GARBAGE COLLECTION IS FUNDAMENTAL TO THE ALLOCATION OF
< *      SPACE FOR VALUES. SPITBOL USES A VERY EFFICIENT GARBAGE
< *      COLLECTOR WHICH INSISTS THAT POINTERS INTO DYNAMIC STORE
< *      SHOULD BE IDENTIFIABLE WITHOUT USE OF BIT TABLES,
< *      MARKER BITS ETC. TO SATISFY THIS REQUIREMENT, DYNAMIC
< *      MEMORY MUST NOT START AT TOO LOW AN ADDRESS AND LENGTHS
< *      OF ARRAYS, TABLES, STRINGS, CODE AND EXPRESSION BLOCKS
< *      MAY NOT EXCEED THE NUMERICAL VALUE OF THE LOWEST DYNAMIC
< *      ADDRESS. TO AVOID EITHER PENALIZING USERS WITH MODEST
< *      REQUIREMENTS OR RESTRICTING THOSE WITH GREATER NEEDS ON
< *      HOST SYSTEMS WHERE DYNAMIC MEMORY IS ALLOCATED IN LOW
< *      ADDRESSES, THE MINIMUM DYNAMIC ADDRESS MAY BE SPECIFIED
< *      SUFFICIENTLY HIGH TO PERMIT ARBITRARILY LARGE SPITBOL
< *      OBJECTS TO BE CREATED ( WITH THE POSSIBILITY IN EXTREME
< *      CASES OF WASTING LARGE AMOUNTS OF MEMORY BELOW THE
< *      START ADDRESS). THIS MINIMUM VALUE IS MADE AVAILABLE
< *      IN VARIABLE MXLEN BY A SYSTEM ROUTINE, SYSMX.
< *      ALTERNATIVELY SYSMX MAY INDICATE THAT A
< *      DEFAULT MAY BE USED IN WHICH DYNAMIC IS PLACED
< *      AT THE LOWEST POSSIBLE ADDRESS FOLLOWING STATIC.
< *
< *      THE FOLLOWING GLOBAL WORK CELLS DEFINE THE LOCATION AND
< *      LENGTH OF THE DYNAMIC AREA.
< *
< *      DNAMB                 START OF DYNAMIC AREA
< *      DNAMP                 NEXT AVAILABLE LOCATION
< *      DNAME                 LAST AVAILABLE LOCATION + 1
< *
< *      DNAMB IS ALWAYS HIGHER THAN STATE SINCE THE ALOST
< *      PROCEDURE MAINTAINS SOME EXPANSION SPACE ABOVE STATE.
< *      *** DNAMB MUST NEVER BE PERMITTED TO HAVE A VALUE LESS
< *      THAN THAT IN MXLEN ***
< *
< *      SPACE IN THE DYNAMIC REGION IS ALLOCATED BY THE ALLOC
< *      PROCEDURE. THE DYNAMIC REGION MAY BE USED BY SYSTEM
< *      PROCEDURES PROVIDED THAT ALL THE RULES ARE OBEYED.
<        EJC
< *
< *      REGISTER USAGE
< *      --------------
< *
< *      (CP)                  CODE POINTER REGISTER. USED TO
< *                            HOLD A POINTER TO THE CURRENT
< *                            LOCATION IN THE INTERPRETIVE PSEUDO
< *                            CODE (I.E. PTR INTO A CDBLK).
< *
< *      (XL,XR)               GENERAL INDEX REGISTERS. USUALLY
< *                            USED TO HOLD POINTERS TO BLOCKS IN
< *                            DYNAMIC STORAGE. AN IMPORTANT
< *                            RESTRICTION IS THAT THE VALUE IN
< *                            XL MUST BE COLLECTABLE FOR
< *                            A GARBAGE COLLECT CALL. A VALUE
< *                            IS COLLECTABLE IF IT EITHER POINTS
< *                            OUTSIDE THE DYNAMIC AREA, OR IF IT
< *                            POINTS TO THE START OF A BLOCK IN
< *                            THE DYNAMIC AREA.
< *
< *      (XS)                  STACK POINTER. USED TO POINT TO
< *                            THE STACK FRONT. THE STACK MAY
< *                            BUILD UP OR DOWN AND IS USED
< *                            TO STACK SUBROUTINE RETURN POINTS
< *                            AND OTHER RECURSIVELY SAVED DATA.
< *
< *      (XT)                  AN ALTERNATIVE NAME FOR XL DURING
< *                            ITS USE IN ACCESSING STACKED ITEMS.
< *
< *      (WA,WB,WC)            GENERAL WORK REGISTERS. CANNOT BE
< *                            USED FOR INDEXING, BUT MAY HOLD
< *                            VARIOUS TYPES OF DATA.
< *
< *      (IA)                  USED FOR ALL SIGNED INTEGER
< *                            ARITHMETIC, BOTH THAT USED BY THE
< *                            TRANSLATOR AND THAT ARISING FROM
< *                            USE OF SNOBOL4 ARITHMETIC OPERATORS
< *
< *      (RA)                  REAL ACCUMULATOR. USED FOR ALL
< *                            FLOATING POINT ARITHMETIC.
<        EJC
< *
416,422c121,134
< *      ASSEMBLY SYMBOLS ARE REFERRED TO. TO INCORPORATE THE
< *      FEATURES REFERRED TO, THE MINIMAL SOURCE SHOULD BE
< *      PREFACED BY SUITABLE CONDITIONAL ASSEMBLY SYMBOL
< *      DEFINITIONS.
< *      IN ALL CASES IT IS PERMISSIBLE TO DEFAULT THE DEFINITIONS
< *      IN WHICH CASE THE ADDITIONAL FEATURES WILL BE OMITTED
< *      FROM THE TARGET CODE.
---
> *      ASSEMBLY SYMBOLS ARE REFERRED TO.
> *      A PARTICULAR SET OF DEFAULT SETTINGS IS GIVEN IN THIS
> *      SOURCE BY USE OF .DEF AND .UNDEF PSEUDO OPS.
> *      A DIFFERENT SELECTION MAY BE MADE BY VARYING THE
> *      DEFINITIONS. AS AN ALTERNATIVE, THIS SECTION MAY BE
> *      COMMENTED OUT AND THE MINIMAL TRANSLATOR PRELOADED WITH
> *      THE SELECTED DEFINITIONS, THUS ALLOWING A MORE DYNAMIC
> *      CHOICE TO BE MADE.
> *      SOME OF THE CONDITIONAL FEATURES CHOOSE AMONGST A VARIETY
> *      OF OPTIONS. OTHERS ARE DEFINED PRINCIPALLY TO ALLOW
> *      OMISSION OF A FEATURE WHICH IS NOT WANTED IN ORDER TO
> *      SAVE MEMORY OR BECAUSE IT CANNOT BE SUPPORTED.
> *      NOTE THAT IF .CPLC OPTION IS CHOSEN, TRANSLATION OF DTC,
> *      ERR, ERB ARGUMENTS SHOULD BE TO LOWER CASE.
424,505c136,158
< *      .CASL                 DEFINE TO INCLUDE 26 SHIFTED LETTRS
< *      .CAHT                 DEFINE TO INCLUDE HORIZONTAL TAB
< *      .CAVT                 DEFINE TO INCLUDE VERTICAL TAB
< *      .CIOD                 IF DEFINED, DEFAULT DELIMITER IS
< *                            NOT USED IN PROCESSING 3RD ARG OF
< *                            INPUT() AND OUTPUT()
< *      .CNBT                 DEFINE TO OMIT BATCH INITIALISATION
< *      .CNCI                 DEFINE TO ENABLE SYSCI ROUTINE
< *      .CNEX                 DEFINE TO OMIT EXIT() CODE.
< *      .CNLD                 DEFINE TO OMIT LOAD() CODE.
< *      .CNPF                 DEFINE TO OMIT PROFILE STUFF
< *      .CNRA                 DEFINE TO OMIT ALL REAL ARITHMETIC
< *      .CNSR                 DEFINE TO OMIT SORT, RSORT
< *      .CSAX                 DEFINE IF SYSAX IS TO BE CALLED
< *      .CSN6                 DEFINE TO PAD STMT NOS TO 6 CHARS
< *      .CSN8                 DEFINE TO PAD STMT NOS TO 8 CHARS
< *      .CUCF                 DEFINE TO INCLUDE CFP$U
< *      .CULC                 DEFINE TO INCLUDE &CASE (LC NAMES)
< *      .CUST                 DEFINE TO INCLUDE SET() CODE
< .DEF   .CASL
< .DEF   .CAHT
< .DEF   .CIOD
< .DEF   .CSAX
< .DEF   .CSN8
< .DEF   .CUCF
< .DEF   .CUEJ
< .DEF   .CULC
< .DEF   .CUST
<        TTL  S P I T B O L -- PROCEDURES SECTION
< *
< *      THIS SECTION STARTS WITH DESCRIPTIONS OF THE OPERATING
< *      SYSTEM DEPENDENT PROCEDURES WHICH ARE USED BY THE SPITBOL
< *      TRANSLATOR. ALL SUCH PROCEDURES HAVE FIVE LETTER NAMES
< *      BEGINNING WITH SYS. THEY ARE LISTED IN ALPHABETICAL
< *      ORDER.
< *      ALL PROCEDURES HAVE A  SPECIFICATION CONSISTING OF A
< *      MODEL CALL, PRECEDED BY A POSSIBLY EMPTY LIST OF REGISTER
< *      CONTENTS GIVING PARAMETERS AVAILABLE TO THE PROCEDURE AND
< *      FOLLOWED BY A POSSIBLY EMPTY LIST OF REGISTER CONTENTS
< *      REQUIRED ON RETURN FROM THE CALL OR WHICH MAY HAVE HAD
< *      THEIR CONTENTS DESTROYED. ONLY THOSE REGISTERS EXPLICITLY
< *      MENTIONED IN THE LIST AFTER THE CALL MAY HAVE THEIR
< *      VALUES CHANGED.
< *      THE SEGMENT OF CODE PROVIDING THE EXTERNAL PROCEDURES IS
< *      CONVENIENTLY REFERRED TO AS OSINT (OPERATING SYSTEM
< *      INTERFACE). THE SYSXX PROCEDURES IT CONTAINS PROVIDE
< *      FACILITIES NOT USUALLY AVAILABLE AS PRIMITIVES IN
< *      ASSEMBLY LANGUAGES. FOR PARTICULAR TARGET MACHINES,
< *      IMPLEMENTORS MAY CHOOSE FOR SOME MINIMAL OPCODES WHICH
< *      DO NOT HAVE REASONABLY DIRECT TRANSLATIONS, TO USE CALLS
< *      OF ADDITIONAL PROCEDURES WHICH THEY PROVIDE IN OSINT.
< *      E.G. MWB OR TRC MIGHT BE TRANSLATED AS JSR SYSMB,
< *      JSR SYSTC IN SOME IMPLEMENTATIONS.
< *
< *      IN THE DESCRIPTIONS, REFERENCE IS MADE TO --BLK
< *      FORMATS (-- = A PAIR OF LETTERS). SEE THE SPITBOL
< *      DEFINITIONS SECTION FOR DETAILED DESCRIPTIONS OF ALL
< *      SUCH BLOCK FORMATS EXCEPT FCBLK FOR WHICH SYSFC SHOULD
< *      BE CONSULTED.
< *
< *      SECTION 0 CONTAINS INP,INR SPECIFICATIONS OF INTERNAL
< *      PROCEDURES,ROUTINES. THIS GIVES A SINGLE PASS TRANSLATOR
< *      INFORMATION MAKING IT EASY TO GENERATE ALTERNATIVE CALLS
< *      IN THE TRANSLATION OF JSR-S FOR PROCEDURES OF DIFFERENT
< *      TYPES IF THIS PROVES NECESSARY.
< *
<        SEC                   START OF PROCEDURES SECTION
< .IF    .CSAX
<        EJC
< *
< *      SYSAX -- AFTER EXECUTION
< *
< SYSAX  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      IF THE CONDITIONAL ASSEMBLY SYMBOL .CSAX IS DEFINED,
< *      THIS ROUTINE IS CALLED IMMEDIATELY AFTER EXECUTION AND
< *      BEFORE PRINTING OF EXECUTION STATISTICS OR DUMP OUTPUT.
< *      PURPOSE OF CALL IS FOR IMPLEMENTOR TO DETERMINE AND
< *      IF THE CALL IS NOT REQUIRED IT WILL BE OMITTED IF .CSAX
< *      IS UNDEFINED. IN THIS CASE SYSAX NEED NOT BE CODED.
< *
< *      JSR  SYSAX            CALL AFTER EXECUTION
---
> *.DEF   .CAHT                 DEFINE TO INCLUDE HORIZONTAL TAB
> *.DEF   .CASL                 DEFINE TO INCLUDE 26 SHIFTED LETTRS
> *.DEF   .CAVT                 DEFINE TO INCLUDE VERTICAL TAB
> *.UNDEF .CEPP                 DEFINE FOR ODD PARITY ENTRY POINTS
> *.UNDEF .CNBF                 DEFINE TO OMIT BUFFER EXTENSION
> *.UNDEF .CNBT                 DEFINE TO OMIT BATCH INITIALISATION
> *.UNDEF .CNEX                 DEFINE TO OMIT EXIT() CODE
> *.UNDEF .CNFN                 DEFINE TO OMIT FENCE() CODE
> *.UNDEF .CNLD                 DEFINE TO OMIT LOAD() CODE
> *.UNDEF .CNPF                 DEFINE TO OMIT PROFILE CODE
> *.UNDEF .CNRA                 DEFINE TO OMIT ALL REAL ARITHMETIC
> *.UNDEF .CNSR                 DEFINE TO OMIT SORT, RSORT CODE
> *.DEF   .CPLC                 DEFINE IF HOST PREFERS LOWER CASE
> *.UNDEF .CRPP                 DEFINE FOR ODD PARITY RETURN POINTS
> *.UNDEF .CS16                 DEFINE TO INITIALIZE STLIM TO 32767
> *.UNDEF .CSAX                 DEFINE IF SYSAX IS TO BE CALLED
> *.UNDEF .CSCI                 DEFINE TO ENABLE SYSCI ROUTINE
> *.UNDEF .CSCV                 DEFINE FOR CLU, CUL CASE CONVERSION
> *.DEF   .CSIG                 DEFINE TO IGNORE CASE OF LETTERS
> *.UNDEF .CSN6                 DEFINE TO PAD STMT NOS TO 6 CHARS
> *.DEF   .CSN8                 DEFINE TO PAD STMT NOS TO 8 CHARS
> *.UNDEF .CTMD                 DEFINE IF SYSTM UNIT IS DECISECOND
> .IF    .CASL
506a160,161
> .UNDEF .CSIG                 .CSIG USELESS WITHOUT LC LETTERS
> .UNDEF .CPLC                 .CPLC ERRONEOUS WITHOUT LC LETTERS
510c165
< *      SYSBX -- BEFORE EXECUTION
---
> *      ACTUAL PROCESSABLE EXP PROCEDURE DEFINITIONS
512,547c167,169
< SYSBX  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      CALLED AFTER INITIAL SPITBOL COMPILATION AND BEFORE
< *      COMMENCING EXECUTION IN CASE OSINT NEEDS
< *      TO ASSIGN FILES OR PERFORM OTHER NECESSARY SERVICES.
< *      OSINT MAY ALSO CHOOSE TO SEND A MESSAGE TO ONLINE
< *      TERMINAL (IF ANY) INDICATING THAT EXECUTION IS STARTING.
< *
< *      JSR  SYSBX            CALL BEFORE EXECUTION STARTS
<        EJC
< .IF    .CNCI
< *
< *      SYSCI -- CONVERT INTEGER
< *
< SYSCI  EXP
< *
< *      SYSCI IS AN OPTIONAL OSINT ROUTINE THAT CAUSES SPITBOL TO
< *      CALL SYSCI TO CONVERT INTEGER VALUES TO STRINGS, RATHER
< *      THAN USING SPITBOL'S OWN INTERNAL CONVERSION CODE.  THIS
< *      CODE MAY BE LESS EFFICIENT ON MACHINES WITH HARDWARE
< *      CONVERSION INSTRUCTIONS AND IN SUCH CASES, IT MAY BE AN
< *      ADVANTAGE TO INCLUDE SYSCI.  THE SYMBOL .CNCI MUST BE
< *      DEFINED IF THIS ROUTINE IS TO BE USED.
< *
< *      THE RULES FOR CONVERTING INTEGERS TO STRINGS ARE THAT
< *      POSITIVE VALUES ARE REPRESENTED WITHOUT ANY SIGN, AND
< *      THERE ARE NEVER ANY LEADING BLANKS OR ZEROS, EXCEPT IN
< *      THE CASE OF ZERO ITSELF WHICH IS REPRESENTED AS A SINGLE
< *      ZERO DIGIT.  NEGATIVE NUMBERS ARE REPRESENTED WITH A
< *      PRECEEDING MINUS SIGN.  THERE ARE NEVER ANY TRAILING
< *      BLANKS, AND CONVERSION CANNOT FAIL.
< *
< *      (IA)                  VALUE TO BE CONVERTED
< *      JSR  SYSCI            CALL TO CONVERT INTEGER VALUE
< *      (XL)                  POINTER TO PSEUDO-SCBLK WITH STRING
<        EJC
---
> .IF    .CSAX
> SYSAX  EXP  E,0
> .ELSE
549,1250c171,203
< *
< *      SYSDC -- DATE CHECK
< *
< SYSDC  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SYSDC IS CALLED TO CHECK THAT THE EXPIRY DATE FOR A TRIAL
< *      VERSION OF SPITBOL IS UNEXPIRED.
< *
< *      JSR  SYSDC            CALL TO CHECK DATE
< *      RETURN ONLY IF DATE IS OK
<        EJC
< *
< *      SYSDM  -- DUMP CORE
< *
< SYSDM  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SYSDM IS CALLED BY A SPITBOL PROGRAM CALL OF DUMP(N) WITH
< *      N GE 3.  ITS PURPOSE IS TO PROVIDE A CORE DUMP.
< *      N COULD HOLD AN ENCODING OF THE START ADRS FOR DUMP AND
< *      AMOUNT TO BE DUMPED E.G.  N = 256*A + S , S = START ADRS
< *      IN KILOWORDS,  A = KILOWORDS TO DUMP
< *
< *      (XR)                  PARAMETER N OF CALL DUMP(N)
< *      JSR  SYSDM            CALL TO ENTER ROUTINE
<        EJC
< *
< *      SYSDT -- GET CURRENT DATE
< *
< SYSDT  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SYSDT IS USED TO OBTAIN THE CURRENT DATE. THE DATE IS
< *      RETURNED AS A CHARACTER STRING IN ANY FORMAT APPROPRIATE
< *      TO THE OPERATING SYSTEM IN USE. IT MAY ALSO CONTAIN THE
< *      CURRENT TIME OF DAY. SYSDT IS USED TO IMPLEMENT THE
< *      SNOBOL4 FUNCTION DATE.
< *
< *      JSR  SYSDT            CALL TO GET DATE
< *      (XL)                  POINTER TO BLOCK CONTAINING DATE
< *
< *      THE FORMAT OF THE BLOCK IS LIKE AN SCBLK EXCEPT THAT
< *      THE FIRST WORD NEED NOT BE SET. THE RESULT IS COPIED
< *      INTO SPITBOL DYNAMIC MEMORY ON RETURN.
<        EJC
< *
< *      SYSEF -- EJECT FILE
< *
< SYSEF  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SYSEF IS USED TO WRITE A PAGE EJECT TO A NAMED FILE. IT
< *      MAY ONLY BE USED FOR FILES WHERE THIS CONCEPT MAKES
< *      SENSE. NOTE THAT SYSEF IS NOT NORMALLY USED FOR THE
< *      STANDARD OUTPUT FILE (SEE SYSEP).
< *
< *      (WA)                  PTR TO FCBLK OR ZERO
< *      (XR)                  EJECT ARGUMENT (SCBLK PTR)
< *      JSR  SYSEF            CALL TO EJECT FILE
< *      PPM  LOC              RETURN HERE IF FILE DOES NOT EXIST
< *      PPM  LOC              RETURN HERE IF INAPPROPRIATE FILE
< *      PPM  LOC              RETURN HERE IF I/O ERROR
<        EJC
< *
< *      SYSEJ -- END OF JOB
< *
< SYSEJ  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SYSEJ IS CALLED ONCE AT THE END OF EXECUTION TO
< *      TERMINATE THE RUN. THE SIGNIFICANCE OF THE ABEND AND
< *      CODE VALUES IS SYSTEM DEPENDENT. IN GENERAL, THE CODE
< *      VALUE SHOULD BE MADE AVAILABLE FOR TESTING, AND THE
< *      ABEND VALUE SHOULD CAUSE SOME POST-MORTEM ACTION SUCH AS
< *      A DUMP. NOTE THAT SYSEJ DOES NOT RETURN TO ITS CALLER.
< *      SEE SYSXI FOR DETAILS OF FCBLK CHAIN
< *
< *      (WA)                  VALUE OF ABEND KEYWORD
< *      (WB)                  VALUE OF CODE KEYWORD
< *      (XL)                  O OR PTR TO HEAD OF FCBLK CHAIN
< *      JSR  SYSEJ            CALL TO END JOB
< *
< *      THE FOLLOWING SPECIAL VALUES ARE USED AS CODES IN (WB)
< *      999  EXECUTION SUPPRESSED
< *      998  STANDARD OUTPUT FILE FULL OR UNAVAILABLE IN A SYSXI
< *           LOAD MODULE. IN THESE CASES (WA) CONTAINS THE NUMBER
< *           OF THE STATEMENT CAUSING PREMATURE TERMINATION.
<        EJC
< *
< *      SYSEM -- GET ERROR MESSAGE TEXT
< *
< SYSEM  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SYSEM IS USED TO OBTAIN THE TEXT OF ERR, ERB CALLS IN THE
< *      SOURCE PROGRAM GIVEN THE ERROR CODE NUMBER. IT IS ALLOWED
< *      TO RETURN A NULL STRING IF THIS FACILITY IS UNAVAILABLE.
< *
< *      (WA)                  ERROR CODE NUMBER
< *      JSR  SYSEM            CALL TO GET TEXT
< *      (XR)                  TEXT OF MESSAGE
< *
< *      THE RETURNED VALUE IS A POINTER TO A BLOCK IN SCBLK
< *      FORMAT EXCEPT THAT THE FIRST WORD NEED NOT BE SET. THE
< *      STRING IS COPIED INTO DYNAMIC MEMORY ON RETURN.
< *      IF THE NULL STRING IS RETURNED EITHER BECAUSE SYSEM DOES
< *      NOT PROVIDE ERROR MESSAGE TEXTS OR BECAUSE WA IS OUT OF
< *      RANGE, SPITBOL WILL PRINT THE STRING STORED IN ERRTEXT
< *      KEYWORD.
<        EJC
< *
< *      SYSEN -- ENDFILE
< *
< SYSEN  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SYSEN IS USED TO IMPLEMENT THE SNOBOL4 FUNCTION ENDFILE.
< *      THE MEANING IS SYSTEM DEPENDENT. IN GENERAL, ENDFILE
< *      IMPLIES THAT NO FURTHER I/O OPERATIONS WILL BE PERFORMED,
< *      BUT DOES NOT GUARANTEE THIS TO BE THE CASE. THE FILE
< *      SHOULD BE CLOSED AFTER THE CALL, A SUBSEQUENT READ
< *      OR WRITE MAY REOPEN THE FILE AT THE START OR IT MAY BE
< *      NECESSARY TO REOPEN THE FILE VIA SYSIO.
< *
< *      (WA)                  PTR TO FCBLK OR ZERO
< *      (XR)                  ENDFILE ARGUMENT (SCBLK PTR)
< *      JSR  SYSEN            CALL TO ENDFILE
< *      PPM  LOC              RETURN HERE IF FILE DOES NOT EXIST
< *      PPM  LOC              RETURN HERE IF ENDFILE NOT ALLOWED
< *      PPM  LOC              RETURN HERE IF I/O ERROR
< *      (WA,WB)               DESTROYED
< *
< *      THE SECOND ERROR RETURN IS USED FOR FILES FOR WHICH
< *      ENDFILE IS NOT PERMITTED. FOR EXAMPLE, IT MAY BE EXPECTED
< *      THAT THE STANDARD INPUT AND OUTPUT FILES ARE IN THIS
< *      CATEGORY.
<        EJC
< *
< *      SYSEP -- EJECT PRINTER PAGE
< *
< SYSEP  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SYSEP IS CALLED TO PERFORM A PAGE EJECT ON THE STANDARD
< *      PRINTER OUTPUT FILE (CORRESPONDING TO SYSPR OUTPUT).
< *
< *      JSR  SYSEP            CALL TO EJECT PRINTER OUTPUT
<        EJC
< *
< *      SYSEX -- CALL EXTERNAL FUNCTION
< *
< SYSEX  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SYSEX IS CALLED TO PASS CONTROL TO AN EXTERNAL FUNCTION
< *      PREVIOUSLY LOADED WITH A CALL TO SYSLD.
< *
< *      (XS)                  POINTER TO ARGUMENTS ON STACK
< *      (XL)                  POINTER TO CONTROL BLOCK (EFBLK)
< *      (WA)                  NUMBER OF ARGUMENTS ON STACK
< *      JSR  SYSEX            CALL TO PASS CONTROL TO FUNCTION
< *      PPM  LOC              RETURN HERE IF FUNCTION CALL FAILS
< *      (XS)                  POPPED PAST ARGUMENTS
< *      (XR)                  RESULT RETURNED
< *
< *      THE ARGUMENTS ARE STORED ON THE STACK WITH
< *      THE LAST ARGUMENT AT 0(XS). ON RETURN, XS
< *      IS POPPED PAST THE ARGUMENTS.
< *
< *      THE FORM OF THE ARGUMENTS AS PASSED IS THAT USED IN THE
< *      SPITBOL TRANSLATOR (SEE DEFINITIONS AND DATA STRUCTURES
< *      SECTION). THE CONTROL BLOCK FORMAT IS ALSO DESCRIBED
< *      (UNDER EFBLK) IN THIS SECTION.
< *
< *      THERE ARE TWO WAYS OF RETURNING A RESULT.
< *
< *      1)   RETURN A POINTER TO A BLOCK IN DYNAMIC STORAGE. THIS
< *           BLOCK MUST BE IN EXACTLY CORRECT FORMAT, INCLUDING
< *           THE FIRST WORD. ONLY FUNCTIONS WRITTEN WITH INTIMATE
< *           KNOWLEDGE OF THE SYSTEM WILL RETURN IN THIS WAY.
< *
< *      2)   STRING, INTEGER AND REAL RESULTS MAY BE RETURNED BY
< *           POINTING TO A PSEUDO-BLOCK OUTSIDE DYNAMIC MEMORY.
< *           THIS BLOCK IS IN ICBLK, RCBLK OR SCBLK FORMAT EXCEPT
< *           THAT THE FIRST WORD WILL BE OVERWRITTEN
< *           BY A TYPE WORD ON RETURN AND SO NEED NOT
< *           BE CORRECTLY SET. SUCH A RESULT IS
< *           COPIED INTO MAIN STORAGE BEFORE PROCEEDING.
< *           UNCONVERTED RESULTS MAY SIMILARLY BE RETURNED IN A
< *           PSEUDO-BLOCK WHICH IS IN CORRECT FORMAT INCLUDING
< *           TYPE WORD RECOGNISABLE BY GARBAGE COLLECTOR SINCE
< *           BLOCK IS COPIED INTO DYNAMIC MEMORY.
<        EJC
< *
< *      SYSFC -- FILE CONTROL BLOCK ROUTINE
< *
< SYSFC  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SEE ALSO SYSIO
< *      INPUT AND OUTPUT HAVE 3 ARGUMENTS REFERRED TO AS SHOWN
< *           INPUT(VARIABLE NAME,FILE ARG1,FILE ARG2)
< *           OUTPUT(VARIABLE NAME,FILE ARG1,FILE ARG2)
< *      FILE ARG1 MAY BE AN INTEGER OR STRING USED TO IDENTIFY
< *      AN I/O CHANNEL. IT IS CONVERTED TO A STRING FOR CHECKING.
< *      THE EXACT SIGNIFICANCE OF FILE ARG2
< *      IS NOT RIGOROUSLY PRESCRIBED BUT TO IMPROVE PORTABILITY,
< *      THE SCHEME DESCRIBED IN THE SPITBOL USER MANUAL
< *      SHOULD BE ADOPTED WHEN POSSIBLE. THE PREFERRED FORM IS
< *      A STRING $F$,R$R$,C$C$,I$I$,...,Z$Z$  WHERE
< *      $F$ IS AN OPTIONAL FILE NAME WHICH IS PLACED FIRST.
< *       REMAINING ITEMS MAY BE OMITTED OR INCLUDED IN ANY ORDER.
< *      $R$ IS MAXIMUM RECORD LENGTH
< *      $C$ IS A CARRIAGE CONTROL CHARACTER OR CHARACTER STRING
< *      $I$ IS SOME FORM OF CHANNEL IDENTIFICATION USED IN THE
< *         ABSENCE OF $F$ TO ASSOCIATE THE VARIABLE
< *         WITH A FILE ALLOCATED DYNAMICALLY BY JCL COMMANDS AT
< *         SPITBOL LOAD TIME.
< *      ,...,Z$Z$ ARE ADDITIONAL FIELDS.
< *      IF , (COMMA) CANNOT BE USED AS A DELIMITER, .CIOD
< *      SHOULD BE DEFINED TO INTRODUCE BY CONDITIONAL ASSEMBLY
< *      ANOTHER DELIMITER (SEE
< *        IODEL  EQU  *
< *      EARLY IN DEFINITIONS SECTION).
< *      SYSFC IS CALLED WHEN A VARIABLE IS INPUT OR OUTPUT
< *      ASSOCIATED TO CHECK FILE ARG1 AND FILE ARG2 AND
< *      TO  REPORT WHETHER AN FCBLK (FILE CONTROL
< *      BLOCK) IS NECESSARY AND IF SO WHAT SIZE IT SHOULD BE.
< *      THIS MAKES IT POSSIBLE FOR SPITBOL RATHER THAN OSINT TO
< *      ALLOCATE SUCH A BLOCK IN DYNAMIC MEMORY IF REQUIRED
< *      OR ALTERNATIVELY IN STATIC MEMORY.
< *      THE SIGNIFICANCE OF AN FCBLK , IF ONE IS REQUESTED, IS
< *      ENTIRELY UP TO THE SYSTEM INTERFACE. THE ONLY RESTRICTION
< *      IS THAT IF THE FCBLK SHOULD APPEAR TO LIE IN DYNAMIC
< *      MEMORY , POINTERS TO IT SHOULD BE PROPER POINTERS TO
< *      THE START OF A RECOGNISABLE AND GARBAGE COLLECTABLE
< *      BLOCK (THIS CONDITION WILL BE MET IF SYSFC REQUESTS
< *      SPITBOL TO PROVIDE AN FCBLK).
< *      AN OPTION IS PROVIDED FOR OSINT TO RETURN A POINTER IN
< *      XL TO AN FCBLK WHICH IT PRIVATELY ALLOCATED. THIS PTR
< *      WILL BE MADE AVAILABLE WHEN I/O OCCURS LATER.
< *      PRIVATE FCBLKS MAY HAVE ARBITRARY CONTENTS AND SPITBOL
< *      STORES NOTHING IN THEM.
<        EJC
< *      THE REQUESTED SIZE FOR AN FCBLK IN DYNAMIC MEMORY
< *      SHOULD ALLOW A 2 WORD OVERHEAD FOR BLOCK TYPE AND
< *      LENGTH FIELDS. INFORMATION SUBSEQUENTLY STORED IN THE
< *      REMAINING WORDS MAY BE ARBITRARY IF AN XNBLK (EXTERNAL
< *      NON-RELOCATABLE BLOCK) IS REQUESTED. IF THE REQUEST IS
< *      FOR AN XRBLK (EXTERNAL RELOCATABLE BLOCK) THE
< *      CONTENTS OF WORDS SHOULD BE COLLECTABLE (I.E. ANY
< *      APPARENT POINTERS INTO DYNAMIC SHOULD BE GENUINE BLOCK
< *      POINTERS). THESE RESTRICTIONS DO NOT APPLY IF AN FCBLK
< *      IS ALLOCATED OUTSIDE DYNAMIC OR IS NOT ALLOCATED AT ALL.
< *      IF AN FCBLK IS REQUESTED, ITS FIELDS WILL BE INITIALISED
< *      TO ZERO BEFORE ENTRY TO SYSIO WITH THE EXCEPTION OF
< *      WORDS 0 AND 1 IN WHICH THE BLOCK TYPE AND LENGTH
< *      FIELDS ARE PLACED FOR FCBLKS IN DYNAMIC MEMORY ONLY.
< *      FOR THE POSSIBLE USE OF SYSEJ AND SYSXI, IF FCBLKS
< *      ARE USED, A CHAIN IS BUILT SO THAT THEY MAY ALL BE
< *      FOUND - SEE SYSXI FOR DETAILS.
< *      IF BOTH FILE ARG1 AND FILE ARG2 ARE NULL, CALLS OF SYSFC
< *      AND SYSIO ARE OMITTED.
< *      IF FILE ARG1 IS NULL (STANDARD INPUT/OUTPUT FILE), SYSFC
< *      IS CALLED TO CHECK NON-NULL FILE ARG2 BUT ANY REQUEST
< *      FOR AN FCBLK WILL BE IGNORED, SINCE SPITBOL HANDLES THE
< *      STANDARD FILES SPECIALLY AND CANNOT READILY KEEP FCBLK
< *      POINTERS FOR THEM.
< *      FILEARG1 IS TYPE CHECKED BY SPITBOL SO FURTHER CHECKING
< *      MAY BE UNNECCESSARY IN MANY IMPLEMENTATIONS.
< *      FILE ARG2 IS PASSED SO THAT SYSFC MAY ANALYSE AND
< *      CHECK IT. HOWEVER TO ASSIST IN THIS, SPITBOL ALSO PASSES
< *      ON THE STACK THE COMPONENTS OF THIS ARGUMENT WITH
< *      FILE NAME, $F$ (OTHERWISE NULL) EXTRACTED AND STACKED
< *      FIRST.
< *      THE OTHER FIELDS, IF ANY, ARE EXTRACTED AS SUBSTRINGS,
< *      POINTERS TO THEM ARE STACKED AND A COUNT OF ALL ITEMS
< *      STACKED IS PLACED IN WC. IF AN FCBLK WAS EARLIER
< *      ALLOCATED AND POINTED TO VIA FILE ARG1, SYSFC IS ALSO
< *      PASSED A POINTER TO THIS FCBLK.
< *
< *      (XL)                  FILE ARG1 SCBLK PTR (2ND ARG)
< *      (XR)                  FILEARG2 (3RD ARG) OR NULL
< *      -(XS)...-(XS)         SCBLKS FOR $F$,$R$,$C$,...
< *      (WC)                  NO. OF STACKED SCBLKS ABOVE
< *      (WA)                  EXISTING FILE ARG1 FCBLK PTR OR 0
< *      (WB)                  0/3 FOR INPUT/OUTPUT ASSOCN
< *      JSR  SYSFC            CALL TO CHECK NEED FOR FCBLK
< *      PPM  LOC              INVALID FILE ARGUMENT
< *      (XS)                  POPPED (WC) TIMES
< *      (WA NON ZERO)         BYTE SIZE OF REQUESTED FCBLK
< *      (WA=0,XL NON ZERO)    PRIVATE FCBLK PTR IN XL
< *      (WA=XL=0)             NO FCBLK WANTED, NO PRIVATE FCBLK
< *      (WC)                  0/1/2 REQUEST ALLOC OF XRBLK/XNBLK
< *                            /STATIC BLOCK FOR USE AS FCBLK
< *      (WB)                  DESTROYED
<        EJC
< *
< *      SYSHS -- GIVE ACCESS TO HOST COMPUTER FEATURES
< *
< SYSHS  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      PROVIDES MEANS FOR IMPLEMENTING SPECIAL FEATURES
< *      ON DIFFERENT HOST COMPUTERS. THE ONLY DEFINED ENTRY IS
< *      THAT WHERE ALL ARGUMENTS ARE NULL IN WHICH CASE SYSHS
< *      RETURNS AN SCBLK CONTAINING NAME OF COMPUTER,
< *      NAME OF OPERATING SYSTEM AND NAME OF SITE SEPARATED BY
< *      COLONS. THE SCBLK NEED NOT HAVE A CORRECT FIRST FIELD
< *      AS THIS IS SUPPLIED ON COPYING STRING TO DYNAMIC MEMORY.
< *      SPITBOL DOES NO ARGUMENT CHECKING BUT DOES PROVIDE A
< *      SINGLE ERROR RETURN FOR ARGUMENTS CHECKED AS ERRONEOUS
< *      BY OSINT. IT ALSO PROVIDES A SINGLE EXECUTION ERROR
< *      RETURN. IF THESE ARE INADEQUATE, USE MAY BE MADE OF THE
< *      MINIMAL ERROR SECTION DIRECT AS DESCRIBED IN MINIMAL
< *      DOCUMENTATION, SECTION 10.
< *      SEVERAL NON-ERROR RETURNS ARE PROVIDED. THE FIRST
< *      CORRESPONDS TO THE DEFINED ENTRY OR, FOR IMPLEMENTATION
< *      DEFINED ENTRIES, ANY STRING MAY BE RETURNED. THE OTHERS
< *      PERMIT RESPECTIVELY,  RETURN A NULL RESULT, RETURN WITH A
< *      RESULT TO BE STACKED WHICH IS POINTED AT BY XR, AND A
< *      RETURN CAUSING SPITBOL STATEMENT FAILURE. IF A RETURNED
< *      RESULT IS IN DYNAMIC MEMORY IT MUST OBEY GARBAGE
< *      COLLECTOR RULES. THE ONLY RESULTS COPIED ON RETURN
< *      ARE STRINGS RETURNED VIA PPM LOC3 RETURN.
< *
< *      (WA)                  ARGUMENT 1
< *      (XL)                  ARGUMENT 2
< *      (XR)                  ARGUMENT 3
< *      JSR  SYSHS            CALL TO GET HOST INFORMATION
< *      PPM  LOC1             ERRONEOUS ARG
< *      PPM  LOC2             EXECUTION ERROR
< *      PPM  LOC3             SCBLK PTR IN XL OR 0 IF UNAVAILABLE
< *      PPM  LOC4             RETURN A NULL RESULT
< *      PPM  LOC5             RETURN RESULT IN XR
< *      PPM  LOC6             CAUSE STATEMENT FAILURE
<        EJC
< *
< *      SYSID -- RETURN SYSTEM IDENTIFICATION
< *
< SYSID  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      THIS ROUTINE SHOULD RETURN STRINGS TO HEAD THE STANDARD
< *      PRINTER OUTPUT. THE FIRST STRING WILL BE APPENDED TO
< *      A HEADING LINE OF THE FORM
< *           MACRO SPITBOL VERSION V.V
< *      SUPPLIED BY SPITBOL ITSELF. V.V ARE DIGITS GIVING THE
< *      MAJOR VERSION NUMBER AND GENERALLY AT LEAST A MINOR
< *      VERSION NUMBER RELATING TO OSINT SHOULD BE SUPPLIED TO
< *      GIVE SAY
< *           MACRO SPITBOL VERSION V.V(M.M)
< *      THE SECOND STRING SHOULD IDENTIFY AT LEAST THE MACHINE
< *      AND OPERATING SYSTEM.  PREFERABLY IT SHOULD INCLUDE
< *      THE DATE AND TIME OF THE RUN.
< *      OPTIONALLY THE STRINGS MAY INCLUDE SITE NAME OF THE
< *      THE IMPLEMENTOR AND/OR MACHINE ON WHICH RUN TAKES PLACE,
< *      UNIQUE SITE OR COPY NUMBER AND OTHER INFORMATION AS
< *      APPROPRIATE WITHOUT MAKING IT SO LONG AS TO BE A
< *      NUISANCE TO USERS.
< *      THE FIRST WORDS OF THE SCBLKS POINTED AT NEED NOT BE
< *      CORRECTLY SET.
< *
< *      JSR  SYSID            CALL FOR SYSTEM IDENTIFICATION
< *      (XR)                  SCBLK PTR FOR ADDITION TO HEADER
< *      (XL)                  PTR TO SECOND HEADER SCBLK
<        EJC
< *
< *      SYSIL -- GET INPUT RECORD LENGTH
< *
< SYSIL  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SYSIL IS USED TO GET THE LENGTH OF THE NEXT INPUT RECORD
< *      FROM A FILE PREVIOUSLY INPUT ASSOCIATED WITH A SYSIO
< *      CALL. THE LENGTH RETURNED IS USED TO ESTABLISH A BUFFER
< *      FOR A SUBSEQUENT SYSIN CALL.
< *
< *      (WA)                  PTR TO FCBLK OR ZERO
< *      JSR  SYSIL            CALL TO GET RECORD LENGTH
< *      (WA)                  LENGTH OR ZERO IF FILE CLOSED
< *
< *      NO HARM IS DONE IF THE VALUE RETURNED IS TOO LONG SINCE
< *      UNUSED SPACE WILL BE RECLAIMED AFTER THE SYSIN CALL.
< *
< *      NOTE THAT IT IS THE SYSIL CALL (NOT THE SYSIO CALL) WHICH
< *      CAUSES THE FILE TO BE OPENED AS REQUIRED FOR THE FIRST
< *      RECORD INPUT FROM THE FILE.
<        EJC
< *
< *      SYSIN -- READ INPUT RECORD
< *
< SYSIN  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SYSIN IS USED TO READ A RECORD FROM THE FILE WHICH WAS
< *      REFERENCED IN A PRIOR CALL TO SYSIL (I.E. THESE CALLS
< *      ALWAYS OCCUR IN PAIRS). THE BUFFER PROVIDED IS AN
< *      SCBLK FOR A STRING OF LENGTH SET FROM THE SYSIL CALL.
< *      IF THE ACTUAL LENGTH READ IS LESS THAN THIS, THE LENGTH
< *      FIELD OF THE SCBLK MUST BE MODIFIED BEFORE RETURNING
< *      UNLESS BUFFER IS RIGHT PADDED WITH ZEROES.
< *      IT IS ALSO PERMISSIBLE TO TAKE ANY OF THE ALTERNATIVE
< *      RETURNS AFTER SCBLK LENGTH HAS BEEN MODIFIED.
< *
< *      (WA)                  PTR TO FCBLK OR ZERO
< *      (XR)                  POINTER TO BUFFER (SCBLK PTR)
< *      JSR  SYSIN            CALL TO READ RECORD
< *      PPM  LOC              ENDFILE OR NO I/P FILE AFTER SYSXI
< *      PPM  LOC              RETURN HERE IF I/O ERROR
< *      PPM  LOC              RETURN HERE IF RECORD FORMAT ERROR
< *      (WA,WB,WC)            DESTROYED
<        EJC
< *
< *      SYSIO -- INPUT/OUTPUT FILE ASSOCIATION
< *
< SYSIO  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SEE ALSO SYSFC.
< *      SYSIO IS CALLED IN RESPONSE TO A SNOBOL4 INPUT OR OUTPUT
< *      FUNCTION CALL EXCEPT WHEN FILE ARG1 AND FILE ARG2
< *      ARE BOTH NULL.
< *      ITS CALL ALWAYS FOLLOWS IMMEDIATELY AFTER A CALL
< *      OF SYSFC. IF SYSFC REQUESTED ALLOCATION
< *      OF AN FCBLK, ITS ADDRESS WILL BE IN WA.
< *      FOR INPUT FILES, NON-ZERO VALUES OF $R$ SHOULD BE
< *      COPIED TO WC FOR USE IN ALLOCATING INPUT BUFFERS. IF $R$
< *      IS DEFAULTED OR NOT IMPLEMENTED, WC SHOULD BE ZEROISED.
< *      ONCE A FILE HAS BEEN OPENED, SUBSEQUENT INPUT(),OUTPUT()
< *      CALLS IN WHICH THE SECOND ARGUMENT IS IDENTICAL WITH THAT
< *      IN A PREVIOUS CALL, MERELY ASSOCIATE THE ADDITIONAL
< *      VARIABLE NAME (FIRST ARGUMENT) TO THE FILE AND DO NOT
< *      RESULT IN RE-OPENING THE FILE.
< *      IN SUBSEQUENT ASSOCIATED ACCESSES TO THE FILE A POINTER
< *      TO ANY FCBLK ALLOCATED WILL BE MADE AVAILABLE.
< *
< *      (XL)                  FILE ARG1 SCBLK PTR (2ND ARG)
< *      (XR)                  FILE ARG2 SCBLK PTR (3RD ARG)
< *      (WA)                  FCBLK PTR (0 IF NONE)
< *      (WB)                  0 FOR INPUT, 3 FOR OUTPUT
< *      JSR  SYSIO            CALL TO ASSOCIATE FILE
< *      PPM  LOC              RETURN HERE IF FILE DOES NOT EXIST
< *      PPM  LOC              RETURN IF INPUT/OUTPUT NOT ALLOWED
< *      (XL)                  FCBLK POINTER (0 IF NONE)
< *      (WC)                  0 (FOR DEFAULT) OR MAX RECORD LNGTH
< *      (WA,WB)               DESTROYED
< *
< *      THE SECOND ERROR RETURN IS USED IF THE FILE NAMED EXISTS
< *      BUT INPUT/OUTPUT FROM THE FILE IS NOT ALLOWED. FOR
< *      EXAMPLE, THE STANDARD OUTPUT FILE MAY BE IN THIS CATEGORY
< *      AS REGARDS INPUT ASSOCIATION.
<        EJC
< *
< *      SYSLD -- LOAD EXTERNAL FUNCTION
< *
< SYSLD  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SYSLD IS CALLED IN RESPONSE TO THE USE OF THE SNOBOL4
< *      LOAD FUNCTION. THE NAMED FUNCTION IS LOADED (WHATEVER
< *      THIS MEANS), AND A POINTER IS RETURNED. THE POINTER WILL
< *      BE USED ON SUBSEQUENT CALLS TO THE FUNCTION (SEE SYSEX).
< *
< *      (XR)                  POINTER TO FUNCTION NAME (SCBLK)
< *      (XL)                  POINTER TO LIBRARY NAME (SCBLK)
< *      JSR  SYSLD            CALL TO LOAD FUNCTION
< *      PPM  LOC              RETURN HERE IF FUNC DOES NOT EXIST
< *      PPM  LOC              RETURN HERE IF I/O ERROR
< *      (XR)                  POINTER TO LOADED CODE
< *
< *      THE SIGNIFICANCE OF THE POINTER RETURNED IS UP TO THE
< *      SYSTEM INTERFACE ROUTINE. THE ONLY RESTRICTION IS THAT
< *      IF THE POINTER IS WITHIN DYNAMIC STORAGE, IT MUST BE
< *      A PROPER BLOCK POINTER.
<        EJC
< *
< *      SYSMM -- GET MORE MEMORY
< *
< SYSMM  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SYSMM IS CALLED IN AN ATTEMPT TO ALLOCATE MORE DYNAMIC
< *      MEMORY. THIS MEMORY MUST BE ALLOCATED CONTIGUOUSLY WITH
< *      THE CURRENT DYNAMIC DATA AREA.
< *
< *      THE AMOUNT ALLOCATED IS UP TO THE SYSTEM TO DECIDE. ANY
< *      VALUE IS ACCEPTABLE INCLUDING ZERO IF ALLOCATION IS
< *      IMPOSSIBLE.
< *
< *      JSR  SYSMM            CALL TO GET MORE MEMORY
< *      (XR)                  NUMBER OF ADDITIONAL WORDS OBTAINED
<        EJC
< *
< *      SYSMX -- SUPPLY MXLEN
< *
< SYSMX  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      BECAUSE OF THE METHOD OF GARBAGE COLLECTION, NO SPITBOL
< *      OBJECT IS ALLOWED TO OCCUPY MORE BYTES OF MEMORY THAN
< *      THE INTEGER GIVING THE LOWEST ADDRESS OF DYNAMIC
< *      (GARBAGE COLLECTABLE) MEMORY. MXLEN IS THE NAME USED TO
< *      REFER TO THIS MAXIMUM LENGTH OF AN OBJECT AND FOR MOST
< *      USERS OF MOST IMPLEMENTATIONS, PROVIDED DYNAMIC MEMORY
< *      STARTS AT AN ADDRESS OF AT LEAST A FEW THOUSAND WORDS,
< *      THERE IS NO PROBLEM.
< *      IF THE DEFAULT STARTING ADDRESS IS LESS THAN SAY 10000 OR
< *      20000, THEN A LOAD TIME OPTION SHOULD BE PROVIDED WHERE A
< *      USER CAN REQUEST THAT HE BE ABLE TO CREATE LARGER
< *      OBJECTS. THIS ROUTINE INFORMS SPITBOL OF THIS REQUEST IF
< *      ANY. THE VALUE RETURNED IS EITHER AN INTEGER
< *      REPRESENTING THE DESIRED VALUE OF MXLEN (AND HENCE THE
< *      MINIMUM DYNAMIC STORE ADDRESS WHICH MAY RESULT IN
< *      NON-USE OF SOME STORE) OR ZERO IF A DEFAULT IS ACCEPTABLE
< *      IN WHICH MXLEN IS SET TO THE LOWEST ADDRESS ALLOCATED
< *      TO DYNAMIC STORE BEFORE COMPILATION STARTS.
< *      IF A NON-ZERO VALUE IS RETURNED, THIS IS USED FOR KEYWORD
< *      MAXLNGTH. OTHERWISE THE INITIAL LOW ADDRESS OF DYNAMIC
< *      MEMORY IS USED FOR THIS KEYWORD.
< *
< *      JSR  SYSMX            CALL TO GET MXLEN
< *      (WA)                  EITHER MXLEN OR 0 FOR DEFAULT
<        EJC
< *
< *      SYSOU -- OUTPUT RECORD
< *
< SYSOU  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SYSOU IS USED TO WRITE A RECORD TO A FILE PREVIOUSLY
< *      ASSOCIATED WITH A SYSIO CALL.
< *
< *      (WA)                  PTR TO FCBLK OR ZERO
< *      (XR)                  RECORD TO BE WRITTEN (SCBLK)
< *      JSR  SYSOU            CALL TO OUTPUT RECORD
< *      PPM  LOC              FILE FULL OR NO FILE AFTER SYSXI
< *      PPM  LOC              RETURN HERE IF I/O ERROR
< *      (WA,WB,WC)            DESTROYED
< *
< *      NOTE THAT IT IS THE SYSOU CALL (NOT THE SYSIO CALL) WHICH
< *      CAUSES THE FILE TO BE OPENED AS REQUIRED FOR THE FIRST
< *      RECORD OUTPUT TO THE FILE.
<        EJC
< *
< *      SYSPI -- PRINT ON INTERACTIVE CHANNEL
< *
< SYSPI  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      IF SPITBOL IS RUN FROM AN ONLINE TERMINAL, OSINT CAN
< *      REQUEST THAT MESSAGES SUCH AS COPIES OF COMPILATION
< *      ERRORS BE SENT TO THE TERMINAL (SEE SYSPP). IF RELEVANT
< *      REPLY WAS MADE BY SYSPP THEN SYSPI IS CALLED TO SEND SUCH
< *      MESSAGES TO THE INTERACTIVE CHANNEL.
< *      SYSPI IS ALSO USED FOR SENDING OUTPUT TO THE TERMINAL
< *      THROUGH THE SPECIAL VARIABLE NAME, TERMINAL.
< *
< *      (XR)                  PTR TO LINE BUFFER (SCBLK)
< *      (WA)                  LINE LENGTH
< *      JSR  SYSPI            CALL TO PRINT LINE
< *      PPM  LOC              FAILURE RETURN
< *      (WA,WB)               DESTROYED
<        EJC
< *
< *      SYSPP -- OBTAIN PRINT PARAMETERS
< *
< SYSPP  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SYSPP IS CALLED ONCE DURING COMPILATION TO OBTAIN
< *      PARAMETERS REQUIRED FOR CORRECT PRINTED OUTPUT FORMAT
< *      AND TO SELECT OTHER OPTIONS. IT MAY ALSO BE CALLED AGAIN
< *      AFTER SYSXI WHEN A LOAD MODULE IS RESUMED. IN THIS
< *      CASE THE VALUE RETURNED IN WA MAY BE LESS THAN OR EQUAL
< *      TO THAT RETURNED IN INITIAL CALL BUT MAY NOT BE
< *      GREATER.
< *      THE INFORMATION RETURNED IS -
< *      1.   LINE LENGTH IN CHARS FOR STANDARD PRINT FILE
< *      2.   NO OF LINES/PAGE. 0 IS PREFERABLE FOR A NON-PAGED
< *           DEVICE (E.G. ONLINE TERMINAL) IN WHICH CASE LISTING
< *           PAGE THROWS ARE SUPPRESSED AND PAGE HEADERS
< *           RESULTING FROM -TITLE,-STITL LINES ARE KEPT SHORT.
< *      3.   AN INITIAL -NOLIST OPTION TO SUPPRESS LISTING UNLESS
< *           THE PROGRAM CONTAINS AN EXPLICIT -LIST.
< *      4.   OPTIONS TO SUPPRESS LISTING OF COMPILATION AND/OR
< *           EXECUTION STATS (USEFUL FOR ESTABLISHED PROGRAMS) -
< *           COMBINED WITH 3. GIVES POSSIBILITY OF LISTING
< *           FILE NEVER BEING OPENED.
< *      5.   OPTION TO HAVE COPIES OF ERRORS SENT TO AN
< *           INTERACTIVE CHANNEL IN ADDITION TO STANDARD PRINTER.
< *      6.   OPTION TO KEEP PAGE HEADERS SHORT (E.G. IF LISTING
< *           TO AN ONLINE TERMINAL).
< *      7.   AN OPTION TO CHOOSE EXTENDED OR COMPACT LISTING
< *           FORMAT. IN THE FORMER A PAGE EJECT AND IN THE LATTER
< *           A FEW LINE FEEDS PRECEDE THE PRINTING OF EACH
< *           OF-- LISTING, COMPILATION STATISTICS, EXECUTION
< *           OUTPUT AND EXECUTION STATISTICS.
< *      8.   AN OPTION TO SUPPRESS EXECUTION AS THOUGH A
< *           -NOEXECUTE CARD WERE SUPPLIED.
< *      9.   AN OPTION TO REQUEST THAT NAME /TERMINAL/  BE PRE-
< *           ASSOCIATED TO AN ONLINE TERMINAL VIA SYSPI AND SYSRI
< *      10.  AN INTERMEDIATE (STANDARD) LISTING OPTION REQUIRING
< *           THAT PAGE EJECTS OCCUR IN SOURCE LISTINGS. REDUNDANT
< *           IF EXTENDED OPTION CHOSEN BUT PARTIALLY EXTENDS
< *           COMPACT OPTION.
< *      11.  OPTION TO SUPPRESS SYSID IDENTIFICATION.
< *
< *      JSR  SYSPP            CALL TO GET PRINT PARAMETERS
< *      (WA)                  PRINT LINE LENGTH IN CHARS
< *      (WB)                  NUMBER OF LINES/PAGE
< *      (WC)                  BITS VALUE ...JIHGFEDCBA WHERE
< *                            A = 1 TO SEND ERROR COPY TO INT.CH.
< *                            B = 1 MEANS STD PRINTER IS INT. CH.
< *                            C = 1 FOR -NOLIST OPTION
< *                            D = 1 TO SUPPRESS COMPILN. STATS
< *                            E = 1 TO SUPPRESS EXECN. STATS
< *                            F = 1/0 FOR EXTNDED/COMPACT LISTING
< *                            G = 1 FOR -NOEXECUTE
< *                            H = 1 PRE-ASSOCIATE /TERMINAL/
< *                            I = 1 FOR STANDARD LISTING OPTION.
< *                            J = 1 SUPPRESSES LISTING HEADER
<        EJC
< *
< *      SYSPR -- PRINT LINE ON STANDARD OUTPUT FILE
< *
< SYSPR  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SYSPR IS USED TO PRINT A SINGLE LINE ON THE STANDARD
< *      OUTPUT FILE.
< *
< *      (XR)                  POINTER TO LINE BUFFER (SCBLK)
< *      (WA)                  LINE LENGTH
< *      JSR  SYSPR            CALL TO PRINT LINE
< *      PPM  LOC              TOO MUCH O/P OR NO FILE AFTER SYSXI
< *      (WA,WB)               DESTROYED
< *
< *      THE BUFFER POINTED TO IS THE LENGTH OBTAINED FROM THE
< *      SYSPP CALL AND IS FILLED OUT WITH TRAILING BLANKS. THE
< *      VALUE IN WA IS THE ACTUAL LINE LENGTH WHICH MAY BE LESS
< *      THAN THE MAXIMUM LINE LENGTH POSSIBLE. THERE IS NO SPACE
< *      CONTROL ASSOCIATED WITH THE LINE, ALL LINES ARE PRINTED
< *      SINGLE SPACED. NOTE THAT NULL LINES (WA=0) ARE POSSIBLE
< *      IN WHICH CASE A BLANK LINE IS TO BE PRINTED.
< *
< *      THE ERROR EXIT IS USED FOR SYSTEMS WHICH LIMIT THE AMOUNT
< *      OF PRINTED OUTPUT. IF POSSIBLE, PRINTING SHOULD BE
< *      PERMITTED AFTER THIS CONDITION HAS BEEN SIGNALLED ONCE TO
< *      ALLOW FOR DUMP AND OTHER DIAGNOSTIC INFORMATION.
< *      ASSUMING THIS TO BE POSSIBLE, SPITBOL MAY MAKE MORE SYSPR
< *      CALLS. IF THE ERROR RETURN OCCURS ANOTHER TIME, EXECUTION
< *      IS TERMINATED BY A CALL OF SYSEJ WITH ENDING CODE 998.
<        EJC
< *
< *      SYSRD -- READ RECORD FROM STANDARD INPUT FILE
< *
< SYSRD  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SYSRD IS USED TO READ A RECORD FROM THE STANDARD INPUT
< *      FILE. THE BUFFER PROVIDED IS AN SCBLK FOR A STRING THE
< *      LENGTH OF WHICH IN CHARACTERS IS GIVEN IN WC, THIS
< *      CORRESPONDING TO THE MAXIMUM LENGTH OF STRING WHICH
< *      SPITBOL IS PREPARED TO RECEIVE. AT COMPILE TIME IT
< *      CORRESPONDS TO XXX IN THE MOST RECENT -INXXX CARD
< *      (DEFAULT 72) AND AT EXECUTION TIME TO THE MOST RECENT
< *      ,R$R$ (RECORD LENGTH) IN THE THIRD ARG OF AN INPUT()
< *      STATEMENT FOR THE STANDARD INPUT FILE (DEFAULT 80).
< *      IF FEWER THAN (WC) CHARACTERS ARE READ, THE LENGTH
< *      FIELD OF THE SCBLK MUST BE ADJUSTED BEFORE RETURNING
< *      UNLESS THE BUFFER IS RIGHT PADDED WITH ZEROES.
< *      IT IS ALSO PERMISSIBLE TO TAKE THE ALTERNATIVE RETURN
< *      AFTER SUCH AN ADJUSTMENT HAS BEEN MADE.
< *      SPITBOL MAY CONTINUE TO MAKE CALLS AFTER AN ENDFILE
< *      RETURN SO THIS ROUTINE SHOULD BE PREPARED TO MAKE
< *      REPEATED ENDFILE RETURNS.
< *
< *      (XR)                  POINTER TO BUFFER (SCBLK PTR)
< *      (WC)                  LENGTH OF BUFFER IN CHARACTERS
< *      JSR  SYSRD            CALL TO READ LINE
< *      PPM  LOC              ENDFILE OR NO I/P FILE AFTER SYSXI
< *      (WA,WB,WC)            DESTROYED
<        EJC
< *
< *      SYSRI -- READ RECORD FROM INTERACTIVE CHANNEL
< *
< SYSRI  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      READS A RECORD FROM ONLINE TERMINAL FOR SPITBOL VARIABLE,
< *      TERMINAL. IF ONLINE TERMINAL IS UNAVAILABLE THEN CODE THE
< *      ENDFILE RETURN ONLY.
< *      THE BUFFER PROVIDED IS OF LENGTH 120 CHARACTERS. SYSRI
< *      SHOULD REPLACE THE COUNT IN THE SECOND WORD OF THE SCBLK
< *      BY THE ACTUAL CHARACTER COUNT UNLESS BUFFER IS RIGHT
< *      PADDED WITH ZEROES.
< *      IT IS ALSO PERMISSIBLE TO TAKE THE ALTERNATIVE
< *      RETURN AFTER ADJUSTING THE COUNT.
< *      THE END OF FILE RETURN MAY BE USED IF THIS MAKES
< *      SENSE ON THE TARGET MACHINE (E.G. IF THERE IS AN
< *      EOF CHARACTER.)
< *
< *      (XR)                  PTR TO 120 CHAR BUFFER (SCBLK PTR)
< *      JSR  SYSRI            CALL TO READ LINE FROM TERMINAL
< *      PPM  LOC              END OF FILE RETURN
< *      (WA,WB,WC)            MAY BE DESTROYED
<        EJC
< *
< *      SYSRW -- REWIND FILE
< *
< SYSRW  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SYSRW IS USED TO REWIND A FILE I.E. REPOSITION THE FILE
< *      AT THE START BEFORE THE FIRST RECORD. THE FILE SHOULD BE
< *      CLOSED AND THE NEXT READ OR WRITE CALL WILL OPEN THE
< *      FILE AT THE START.
< *
< *      (WA)                  PTR TO FCBLK OR ZERO
< *      (XR)                  REWIND ARG (SCBLK PTR)
< *      JSR  SYSRW            CALL TO REWIND FILE
< *      PPM  LOC              RETURN HERE IF FILE DOES NOT EXIST
< *      PPM  LOC              RETURN HERE IF REWIND NOT ALLOWED
< *      PPM  LOC              RETURN HERE IF I/O ERROR
<        EJC
---
> SYSBX  EXP  E,0
> .IF    .CSCI
> SYSCI  EXP  E,0
> .FI
> SYSDT  EXP  E,0
> SYSEC  EXP  E,2
> SYSEF  EXP  E,2
> SYSEJ  EXP  E,0
> SYSEM  EXP  E,0
> SYSEN  EXP  E,2
> SYSEP  EXP  E,2
> .IF    .CNLD
> .ELSE
> SYSEX  EXP  E,1
> .FI
> SYSHS  EXP  E,2
> SYSID  EXP  E,0
> SYSIL  EXP  E,0
> SYSIN  EXP  E,2
> SYSIO  EXP  E,2
> .IF    .CNLD
> .ELSE
> SYSLD  EXP  E,2
> .FI
> SYSMM  EXP  E,0
> SYSMX  EXP  E,0
> SYSOU  EXP  E,2
> SYSPI  EXP  E,2
> SYSPP  EXP  E,0
> SYSPR  EXP  E,2
> SYSRD  EXP  E,2
> SYSRI  EXP  E,2
> SYSSC  EXP  E,2
1252,1272c205
< *
< *      SYSST -- SET FILE POINTER
< *
< SYSST  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SYSST IS CALLED TO CHANGE THE POSITION OF A FILE
< *      POINTER. THIS IS ACCOMPLISHED IN A SYSTEM DEPENDENT
< *      MANNER, AND THUS THE 2ND AND 3RD ARGUMENTS ARE PASSED
< *      UNCONVERTED.
< *
< *      (WA)                  FCBLK POINTER
< *      (WB)                  2ND ARGUMENT
< *      (WC)                  3RD ARGUMENT
< *      JSR  SYSST            CALL TO SET FILE POINTER
< *      PPM  LOC              RETURN HERE IF INVALID 2ND ARG
< *      PPM  LOC              RETURN HERE IF INVALID 3RD ARG
< *      PPM  LOC              RETURN HERE IF FILE DOES NOT EXIST
< *      PPM  LOC              RETURN HERE IF SET NOT ALLOWED
< *      PPM  LOC              RETURN HERE IF I/O ERROR
< *
<        EJC
---
> SYSST  EXP  E,2
1274,1316c207,212
< *
< *      SYSTM -- GET EXECUTION TIME SO FAR
< *
< SYSTM  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SYSTM IS USED TO OBTAIN THE AMOUNT OF EXECUTION TIME
< *      USED SO FAR SINCE SPITBOL WAS GIVEN CONTROL. THE UNITS
< *      ARE DESCRIBED AS MILLISECONDS IN THE SPITBOL OUTPUT, BUT
< *      THE EXACT MEANING IS SYSTEM DEPENDENT. WHERE APPROPRIATE,
< *      THIS VALUE SHOULD RELATE TO PROCESSOR RATHER THAN CLOCK
< *      TIMING VALUES.
< *
< *      JSR  SYSTM            CALL TO GET TIMER VALUE
< *      (IA)                  TIME SO FAR IN MILLISECONDS
<        EJC
< *
< *      SYSTT -- TRACE TOGGLE
< *
< SYSTT  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      CALLED BY SPITBOL FUNCTION TRACE() WITH NO ARGS TO
< *      TOGGLE THE SYSTEM TRACE SWITCH.  THIS PERMITS TRACING OF
< *      LABELS IN SPITBOL CODE TO BE TURNED ON OR OFF.
< *
< *      JSR  SYSTT            CALL TO TOGGLE TRACE SWITCH
<        EJC
< *
< *      SYSUL -- UNLOAD EXTERNAL FUNCTION
< *
< SYSUL  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      SYSUL IS USED TO UNLOAD A FUNCTION PREVIOUSLY
< *      LOADED WITH A CALL TO SYSLD.
< *
< *      (XR)                  PTR TO CONTROL BLOCK (EFBLK)
< *      JSR  SYSUL            CALL TO UNLOAD FUNCTION
< *
< *      THE FUNCTION CANNOT BE CALLED FOLLOWING A SYSUL CALL
< *      UNTIL ANOTHER SYSLD CALL IS MADE FOR THE SAME FUNCTION.
< *
< *      THE EFBLK CONTAINS THE FUNCTION CODE POINTER AND ALSO A
< *      POINTER TO THE VRBLK CONTAINING THE FUNCTION NAME (SEE
< *      DEFINITIONS AND DATA STRUCTURES SECTION).
---
> SYSTM  EXP  E,0
> SYSTT  EXP  E,0
> .IF    .CNLD
> .ELSE
> SYSUL  EXP  E,0
> .FI
1319,1405c215
<        EJC
< *
< *      SYSXI -- EXIT TO PRODUCE LOAD MODULE
< *
< SYSXI  EXP                   DEFINE EXTERNAL ENTRY POINT
< *
< *      WHEN SYSXI IS CALLED, XL CONTAINS EITHER A STRING POINTER
< *      OR ZERO. IN THE FORMER CASE, THE STRING GIVES THE
< *      CHARACTER NAME OF A PROGRAM. THE INTENTION IS THAT
< *      SPITBOL EXECUTION SHOULD BE TERMINATED FORTHWITH AND
< *      THE NAMED PROGRAM LOADED AND EXECUTED. THIS TYPE OF CHAIN
< *      EXECUTION IS VERY SYSTEM DEPENDENT AND IMPLEMENTORS MAY
< *      CHOOSE TO OMIT IT OR FIND IT IMPOSSIBLE TO PROVIDE.
< *      IF (XL) IS ZERO,IA CONTAINS ONE OF THE FOLLOWING INTEGERS
< *
< *      -1, -2, -3
< *           CREATE IF POSSIBLE A LOAD MODULE CONTAINING ONLY THE
< *           IMPURE AREA OF MEMORY WHICH NEEDS TO BE LOADED WITH
< *           A COMPATIBLE PURE SEGMENT FOR SUBSEQUENT EXECUTIONS.
< *           VERSION NUMBERS TO CHECK COMPATIBILITY SHOULD BE
< *           KEPT IN BOTH SEGMENTS AND CHECKED ON LOADING.
< *           TO ASSIST WITH THIS CHECK, (XR) ON ENTRY IS A
< *           POINTER TO AN SCBLK CONTAINING THE SPITBOL MAJOR
< *           VERSION NUMBER V.V (SEE SYSID).
< *
< *      0    IF POSSIBLE, RETURN CONTROL TO JOB CONTROL
< *           COMMAND LEVEL. THE EFFECT IF AVAILABLE WILL BE
< *           SYSTEM DEPENDENT.
< *
< *      +1, +2, +3
< *           CREATE IF POSSIBLE A LOAD MODULE FROM ALL OF
< *           MEMORY. IT SHOULD BE POSSIBLE TO LOAD AND EXECUTE
< *           THIS MODULE DIRECTLY.
< *
< *      IN THE CASE OF SAVED LOAD MODULES, THE STATUS OF OPEN
< *      FILES IS NOT PRESERVED AND IMPLEMENTORS MAY CHOOSE TO
< *      OFFER MEANS OF ATTACHING FILES BEFORE EXECUTION OF LOAD
< *      MODULES STARTS OR LEAVE IT TO THE USER TO INCLUDE
< *      SUITABLE INPUT(), OUTPUT() CALLS IN HIS PROGRAM.
< *      SYSXI SHOULD MAKE A NOTE THAT NO I/O CHANNELS,
< *      INCLUDING STANDARD FILES, HAVE FILES ATTACHED SO THAT
< *      CALLS OF SYSIN, SYSOU, SYSPR, SYSRD SHOULD FAIL UNLESS
< *      NEW ASSOCIATIONS ARE MADE FOR THE LOAD MODULE.
< *      AT LEAST IN THE CASE OF THE STANDARD OUTPUT FILE, IT IS
< *      RECOMMENDED THAT EITHER THE USER BE REQUIRED TO ATTACH
< *      A FILE OR THAT A DEFAULT FILE IS ATTACHED, SINCE THE
< *      PROBLEM OF ERROR MESSAGES GENERATED BY THE LOAD MODULE
< *      IS OTHERWISE SEVERE. AS A LAST RESORT, IF SPITBOL
< *      ATTEMPTS TO WRITE TO THE STANDARD OUTPUT FILE AND GETS A
< *      REPLY INDICATING THAT SUCH OUPUT IS UNACCEPTABLE IT STOPS
< *      BY USING AN ENTRY TO SYSEJ WITH ENDING CODE 998.
< *      AS DESCRIBED BELOW, PASSING OF SOME ARGUMENTS MAKES IT
< *      CLEAR THAT LOAD MODULE WILL USE A STANDARD OUTPUT FILE.
< *
< *      IF USE IS MADE OF FCBLKS FOR I/O ASSOCIATION, SPITBOL
< *      BUILDS A CHAIN SO THAT THOSE IN USE MAY BE FOUND IN SYSXI
< *      AND SYSEJ. THE NODES ARE 4 WORDS LONG. THIRD WORD
< *      CONTAINS LINK TO NEXT NODE OR 0, FOURTH WORD CONTAINS
< *      FCBLK POINTER.
<        EJC
< *
< *      SYSXI (CONTINUED)
< *
< *      (XL)                  ZERO OR SCBLK PTR
< *      (XR)                  PTR TO V.V SCBLK
< *      (IA)                  SIGNED INTEGER ARGUMENT
< *      (WB)                  0 OR PTR TO HEAD OF FCBLK CHAIN
< *      JSR  SYSXI            CALL TO EXIT
< *      PPM  LOC              REQUESTED ACTION NOT POSSIBLE
< *      PPM  LOC              ACTION CAUSED IRRECOVERABLE ERROR
< *      (REGISTERS)           SHOULD BE PRESERVED OVER CALL
< *
< *      LOADING AND RUNNING THE LOAD MODULE OR RETURNING FROM
< *      JCL COMMAND LEVEL CAUSES EXECUTION TO RESUME AT THE POINT
< *      AFTER THE ERROR RETURNS WHICH FOLLOW THE CALL OF SYSXI.
< *      THE VALUE PASSED AS EXIT ARGUMENT IS USED TO INDICATE
< *      OPTIONS REQUIRED ON RESUMPTION OF LOAD MODULE.
< *      +1 OR -1 REQUIRE THAT ON RESUMPTION, SYSID AND SYSPP BE
< *      CALLED AND A HEADING PRINTED ON THE STANDARD OUTPUT FILE.
< *      +2 OR -2 INDICATE THAT SYSPP WILL BE CALLED BUT NOT SYSID
< *      AND NO HEADING WILL BE PUT ON STANDARD OUTPUT FILE.
< *      ABOVE OPTIONS HAVE THE OBVIOUS IMPLICATION THAT A
< *      STANDARD O/P FILE MUST BE PROVIDED FOR THE LOAD MODULE.
< *      +3 OR -3 INDICATE CALLS OF NEITHER SYSID NOR SYSPP
< *      AND NO HEADING WILL BE PLACED ON STANDARD OUTPUT FILE.
< *      NO RETURN FROM SYSXI IS POSSIBLE IF ANOTHER PROGRAM
< *      IS LOADED AND ENTERED.
---
> SYSXI  EXP  E,2
1407a218
> *      NAME GLOBAL LABELS, INTERNAL PROCEDURES AND ROUTINES.
1409,1410c220,228
< *      INTRODUCE THE INTERNAL PROCEDURES.
< *
---
> CMPCE  GLB
> CMPEL  GLB
> CMPLE  GLB
> CMPSE  GLB
> EVLXF  GLB
> EVLXN  GLB
> EVLXV  GLB
> LCNXE  GLB
> TRXQR  GLB
1420d237
< APNDB  INP  E,2
1428a246
> CBLCK  INP  N,1
1437c255
< COPYB  INP  N,1
---
> COPND  INP  E,0
1439d256
< DTACH  INP  E,0
1444c261
< EVALI  INP  R,4
---
> EVALI  INP  R,3
1446c263
< EVALS  INP  R,3
---
> EVALS  INP  R,2
1453,1455d269
< .IF    .CULC
< FLSTG  INP  R,0
< .FI
1458a273,276
> .IF    .CNBF
> .ELSE
> GTBUF  INP  E,1
> .FI
1481,1483c299,300
< IOFCB  INP  N,2
< IOPPF  INP  N,0
< IOPUT  INP  N,6
---
> IOFTG  INP  N,1
> IOPUT  INP  N,4
1500a318
> PRTCF  INP  E,0
1502,1503c320,321
< PRTIC  INP  E,0
< PRTIS  INP  E,0
---
> PRTFB  INP  E,0
> PRTFH  INP  R,0
1506,1507d323
< PRTMX  INP  E,0
< PRTNL  INP  R,0
1511a328
> PRTSF  INP  E,0
1515c332
< PRTTR  INP  E,0
---
> PRTVF  INP  E,0
1517a335,336
> PTTFH  INP  E,0
> PTTST  INP  E,0
1522a342,345
> .IF    .CASL
> SBSCC  INP  E,0
> SBSTG  INP  E,0
> .FI
1529c352
< SORTA  INP  N,0
---
> SORTA  INP  N,1
1532c355
< SORTH  INP  E,0
---
> SORTH  INP  N,0
1535c358
< TRACE  INP  N,2
---
> TRACE  INP  N,3
1536a360
> TRCHN  INP  E,1
1541,1543d364
< *
< *      INTRODUCE THE INTERNAL ROUTINES
< *
1545a367,368
> EROSI  INR
> ERROR  INR
1560a384
> INITL  INR
1562a387
> STAKV  INR
1567,1568d391
< SYSAB  INR
< SYSTU  INR
1569a393,395
> *      THIS SECTION CONTAINS ALL SYMBOL DEFINITIONS AND ALSO
> *      PICTURES OF ALL DATA STRUCTURES USED IN THE SYSTEM.
> *
1577a404,407
> *      NOTE THAT EVEN IF CONDITIONAL ASSEMBLY IS USED TO OMIT
> *      SOME FEATURE (E.G. REAL ARITHMETIC) A FULL SET OF CFP$-
> *      VALUES MUST BE SUPPLIED. USE DUMMY VALUES IF GENUINE
> *      ONES ARE NOT NEEDED.
1581c411
< CFP$B  EQU  *                BYTES/WORD ADDRESSING FACTOR
---
> CFP$B  EQU  *                BAUS/WORD ADDRESSING FACTOR
1585c415
< CFP$F  EQU  *                OFFSET IN BYTES TO CHARS IN
---
> CFP$F  EQU  *                OFFSET IN BAUS TO CHARS IN
1594,1601d423
< *      THE FOLLOWING DEFINITIONS REQUIRE THE SUPPLY OF EITHER
< *      A SINGLE PARAMETER IF REAL ARITHMETIC IS OMITTED OR
< *      THREE PARAMETERS IF REAL ARITHMETIC IS INCLUDED.
< *
< .IF    .CNRA
< NSTMX  EQU  *                NO. OF DECIMAL DIGITS IN CFP$M
< .ELSE
< *
1606,1613d427
< CFP$X  EQU  *                MAX DIGITS IN REAL EXPONENT
< *
< MXDGS  EQU  CFP$S+CFP$X      MAX DIGITS IN REAL NUMBER
< *
< NSTMX  EQU  MXDGS+5          MAX SPACE FOR REAL (FOR +0.E+)
< .FI
< .IF    .CUCF
< *
1620c434,439
< .FI
---
> *
> CFP$X  EQU  *                MAX DIGITS IN REAL EXPONENT
> *
> MXDGS  EQU  CFP$S+CFP$X      MAX DIGITS IN REAL NUMBER
> *
> NSTMX  EQU  MXDGS+5          MAX SPACE FOR REAL (FOR +0.E+)
1759a579
> *      THEY ARE ALL UNDER CONDITIONAL ASSEMBLY.
1798a619,620
> .IF    .CASL
> DFA$A  EQU  CH$$A-CH$LA      DIFF BETWEEN LC AND UC LETTERS
1800,1807d621
< *      IF A DELIMITER OTHER THAN CH$CM MUST BE USED IN
< *      THE THIRD ARGUMENT OF INPUT(),OUTPUT() THEN .CIOD SHOULD
< *      BE DEFINED AND A PARAMETER SUPPLIED FOR IODEL.
< *
< .IF    .CIOD
< IODEL  EQU  *
< .ELSE
< IODEL  EQU  CH$CM
1927c741,742
< BL$CT  EQU  BL$CM+1          CTBLK
---
> BL$CO  EQU  BL$CM+1          COBLK
> BL$CT  EQU  BL$CO+1          CTBLK
2030,2033d844
< .IF    .CNBF
< .ELSE
< *      BCBLK                 BUFFER CONTROL BLOCK
< .FI
2079c890
< ARLEN  EQU  IDVAL+1          LENGTH OF ARBLK IN BYTES
---
> ARLEN  EQU  IDVAL+1          LENGTH OF ARBLK IN BAUS
2096c907
< *      THE LENGTH OF AN ARBLK IN BYTES MAY NOT EXCEED MXLEN.
---
> *      THE LENGTH OF AN ARBLK IN BAUS MAY NOT EXCEED MXLEN.
2103c914
< *
---
>        EJC
2197,2198c1008,1009
< CCLEN  EQU  CCTYP+1          LENGTH OF CCBLK IN BYTES
< CCUSE  EQU  CCLEN+1          OFFSET PAST LAST USED WORD (BYTES)
---
> CCLEN  EQU  CCTYP+1          LENGTH OF CCBLK IN BAUS
> CCUSE  EQU  CCLEN+1          OFFSET PAST LAST USED WORD (BAUS)
2227c1038
< CDLEN  EQU  OFFS2            LENGTH OF CDBLK IN BYTES
---
> CDLEN  EQU  OFFS2            LENGTH OF CDBLK IN BAUS
2564c1375
< CMLEN  EQU  CMIDN+1          LENGTH OF CMBLK IN BYTES
---
> CMLEN  EQU  CMIDN+1          LENGTH OF CMBLK IN BAUS
2626a1438,1477
> *      COPY FILE BLOCK (COBLK)
> *
> *      A CHAIN STACK OF COPY BLOCKS IS BUILT FOR EVERY NESTED
> *      -COPY CONTROL CARD.  THE CONTROL BLOCK IS USED TO PRESERVE
> *      THE INPUT CONTEXT OF THE FILE CONTAINING THE -COPY.
> *      AS -COPYS ARE ENDED, THESE BLOCKS ARE POPPED OFF THE CHAIN
> *      AND THE STATE RESTORED.  SEE ROUTINES CNCRD, COPND.
> *
> *           +------------------------------------+
> *           I                COTYP               I
> *           +------------------------------------+
> *           I                CONXT               I
> *           +------------------------------------+
> *           I                COIOT               I
> *           +------------------------------------+
> *           I                COTTI               I
> *           +------------------------------------+
> *           I                COCIM               I
> *           +------------------------------------+
> *           I                COSPT               I
> *           +------------------------------------+
> *           I                COSLS               I
> *           +------------------------------------+
> *           I                COSIN               I
> *           +------------------------------------+
> *           I                COSTL               I
> *           +------------------------------------+
> *
> COTYP  EQU  0                POINTER TO DUMMY ROUTINE B$COP
> CONXT  EQU  COTYP+1          POINT TO NEXT (OUTER -COPY) COBLK
> COIOT  EQU  CONXT+1          RECORD IOTAG FOR OSINT
> COTTI  EQU  COIOT+1          RECORD TTINS FLAG
> COCIM  EQU  COTTI+1          RECORD R$CIM COMPILER IMAGE
> COSPT  EQU  COCIM+1          RECORD SCNPT SCAN POINTER
> COSLS  EQU  COSPT+1          RECORD CSWLS LISTING FLAG
> COSIN  EQU  COSLS+1          RECORD CSWIN -INXXX VALUE
> COSTL  EQU  COSIN+1          RECORD R$STL -STITL STRING PTR
> COSI$  EQU  COSTL+1          SIZE OF COBLK
>        EJC
> *
2688c1539
< DFLEN  EQU  FARGS+1          LENGTH OF DFBLK IN BYTES
---
> DFLEN  EQU  FARGS+1          LENGTH OF DFBLK IN BAUS
2798a1650,1651
> .IF    .CNLD
> .ELSE
2826c1679
< EFLEN  EQU  FARGS+1          LENGTH OF EFBLK IN BYTES
---
> EFLEN  EQU  FARGS+1          LENGTH OF EFBLK IN BAUS
2845a1699,1700
> *           4                TYPE IS BUFFER
> .FI
2901c1756
< EXLEN  EQU  EXSTM+1          LENGTH OF EXBLK IN BYTES
---
> EXLEN  EQU  EXSTM+1          LENGTH OF EXBLK IN BAUS
2941c1796
< FFOFS  EQU  FFNXT+1          OFFSET (BYTES) TO FIELD IN PDBLK
---
> FFOFS  EQU  FFNXT+1          OFFSET (BAUS) TO FIELD IN PDBLK
3022c1877
< *      IS FOUND NMOFS BYTES PAST THE ADDRESS IN NMBAS.
---
> *      IS FOUND NMOFS BAUS PAST THE ADDRESS IN NMBAS.
3135c1990
< *      CONTAINS THE LENGTH OF THE PDBLK IN BYTES (FIELD DFPDL).
---
> *      CONTAINS THE LENGTH OF THE PDBLK IN BAUS (FIELD DFPDL).
3169c2024
< PFLEN  EQU  FARGS+1          LENGTH OF PFBLK IN BYTES
---
> PFLEN  EQU  FARGS+1          LENGTH OF PFBLK IN BAUS
3176c2031
< PFAGB  EQU  PFARG-1          OFFSET BEHIND PFARG FOR ARG, LOCAL
---
> PFAGB  EQU  PFARG-1          OFFSET BEHIND PFARG FOR ARG,LOCAL
3237c2092
< *      IS GIVEN IN BYTES BY CFP$F AND THAT THIS VALUE IS
---
> *      IS GIVEN IN BAUS BY CFP$F AND THAT THIS VALUE IS
3278c2133
< *           I                SVCHS               I
---
> *           /                SVCHS               /
3323c2178,2181
< SVFPK  EQU  SVFNP+SVKVC      PREEVAL FCN + CONST KEYWD + VAL
---
> .IF    .CNFN
> .ELSE
> SVFPK  EQU  SVFNP+SVKVC      PREEVAL FUNC + CONST KEYWD+VAL
> .FI
3333c2191
< *      THE ITEM AND APPLY FUNCTIONS FALL OUTSIDE THIS CATEGORY.
---
> *      THE APPLY FUNCTION FALLS OUTSIDE THIS CATEGORY.
3373c2231
< *           PREDEFINED FUNCTIONS USING THIS ARE APPLY AND ITEM.
---
> *           PREDEFINED FUNCTION USING THIS IS APPLY.
3401,3409c2259,2260
< K$ABE  EQU  0                ABEND
< K$ANC  EQU  K$ABE+CFP$B      ANCHOR
< .IF    .CULC
< K$CAS  EQU  K$ANC+CFP$B      CASE
< K$COD  EQU  K$CAS+CFP$B      CODE
< .ELSE
< K$COD  EQU  K$ANC+CFP$B      CODE
< .FI
< K$DMP  EQU  K$COD+CFP$B      DUMP
---
> K$ANC  EQU  0                ANCHOR
> K$DMP  EQU  K$ANC+CFP$B      DUMP
3447c2298,2299
< K$STC  EQU  K$RTN+1          STCOUNT
---
> K$COD  EQU  K$RTN+1          CODE
> K$STC  EQU  K$COD+1          STCOUNT
3454a2307
> K$$CD  EQU  K$COD-K$ALP      CODE
3478d2330
< *           +------------------------------------+
3487c2339
< TBLEN  EQU  OFFS2            LENGTH OF TBBLK IN BYTES
---
> TBLEN  EQU  OFFS2            LENGTH OF TBBLK IN BAUS
3546c2398
< *           I       TRTAG OR TRTER OR TRTRF      I
---
> *           I            TRTAG OR TRTER          I
3548c2400
< *           I            TRFNC OR TRFPT          I
---
> *           I            TRFNC OR TRTRI          I
3557c2409
< TRTAG  EQU  TRVAL+1          TRACE TAG
---
> TRTAG  EQU  TRVAL+1          TRACE TAG OR IOTAG
3559d2410
< TRTRF  EQU  TRTAG            PTR TO TRBLK HOLDING FCBLK PTR
3561c2412
< TRFPT  EQU  TRFNC            FCBLK PTR FOR SYSIO
---
> TRTRI  EQU  TRFNC            PTR TO TRACE BLOCK HOLDING IOTAG
3567,3568c2418,2419
< TRTOU  EQU  TRTVL+1          TRACE TYPE FOR OUTPUT ASSOCIATION
< TRTFC  EQU  TRTOU+1          TRACE TYPE FOR FCBLK IDENTIFICATION
---
> TRTIO  EQU  TRTVL+1          TRACE TYPE FOR IOTAG TRACE BLOCK
> TRTOU  EQU  TRTIO+1          TRACE TYPE FOR OUTPUT ASSOCIATION
3584,3586c2435
< *           TRTRF POINTS TO THE TRAP BLOCK WHICH IN TURN POINTS
< *           TO AN FCBLK USED FOR I/O ASSOCIATION.
< *           TRFPT IS THE FCBLK PTR RETURNED BY SYSIO.
---
> *           TRTRI IS A PTR TO IOTAG TRBLK FROM SYSIO OR ZERO.
3625,3627c2474
< *           TRTRF POINTS TO THE TRAP BLOCK WHICH IN TURN POINTS
< *           TO AN FCBLK USED FOR I/O ASSOCIATION.
< *           TRFPT IS THE FCBLK PTR RETURNED BY SYSIO.
---
> *           TRTRI IS A PTR TO IOTAG TRBLK FROM SYSIO OR ZERO.
3681c2528
< *      INPUT/OUTPUT FILE ARG1 TRAP BLOCK
---
> *      INPUT/OUTPUT FILETAG TRAP BLOCK (TRTIO)
3683c2530
< *           THE VALUE FIELD OF THE VARIABLE POINTS TO A TRBLK
---
> *           THE VALUE FIELD OF THE FILETAG VBL POINTS TO A TRBLK
3687,3689c2534
< *           TO HOLD A POINTER TO THE FCBLK WHICH AN
< *           IMPLEMENTATION MAY REQUEST TO HOLD INFORMATION
< *           ABOUT A FILE.
---
> *           TO HOLD THE IOTAG RETURNED BY A SYSIO CALL
3691,3694c2536,2538
< *           TRTYP IS SET TO TRTFC
< *           TRNEXT POINTS TO NEXT TRBLK OR TRVAL IS VARIABLE VAL
< *           TRFNM IS 0
< *           TRFPT IS THE FCBLK POINTER.
---
> *           TRTYP IS SET TO TRTIO
> *           TRNXT POINTS TO NEXT TRBLK OR TRVAL IS VARIABLE VAL
> *           TRTAG HOLDS THE IOTAG.
3701a2546
> *      FILETAG ASSOCIATION (IF PRESENT)
3729c2574
< VCLEN  EQU  OFFS2            LENGTH OF VCBLK IN BYTES
---
> VCLEN  EQU  OFFS2            LENGTH OF VCBLK IN BAUS
3832c2677
< *      VRCHS IS THE NAME (LJRZ) IF VRLEN IS NON-ZERO.
---
> *      VRCHS IS THE NAME IF VRLEN IS NON-ZERO.
3843,3844d2687
< *      THIS TYPE OF BLOCK MAY BE USED AS A FILE CONTROL BLOCK.
< *      SEE SYSFC,SYSIN,SYSOU,S$INP,S$OUP FOR DETAILS.
3857c2700
< XNLEN  EQU  XNTYP+1          LENGTH OF XNBLK IN BYTES
---
> XNLEN  EQU  XNTYP+1          LENGTH OF XNBLK IN BAUS
3873,3874d2715
< *      THIS TYPE OF BLOCK MAY BE USED AS A FILE CONTROL BLOCK.
< *      SEE SYSFC,SYSIN,SYSOU,S$INP,S$OUP FOR DETAILS.
3887c2728
< XRLEN  EQU  XRTYP+1          LENGTH OF XRBLK IN BYTES
---
> XRLEN  EQU  XRTYP+1          LENGTH OF XRBLK IN BAUS
3911,3912c2752
< INILN  EQU  132              DEFAULT IMAGE LENGTH FOR COMPILER
< INILS  EQU  80               IMAGE LENGTH IF -SEQU IN EFFECT
---
> INILN  EQU  160              DEFAULT IMAGE LENGTH FOR COMPILER
3914,3916d2753
< IONMB  EQU  2                NAME BASE USED FOR IOCHN IN SYSIO
< IONMO  EQU  4                NAME OFFSET USED FOR IOCHN IN SYSIO
< *
3931d2767
< NINI8  EQU  998
3934d2769
<        EJC
3945c2780
< RILEN  EQU  120              BUFFER LENGTH FOR SYSRI
---
> RILEN  EQU  160              BUFFER LENGTH FOR SYSRI
4051,4053c2886,2888
< .IF    .CULC
< CC$CA  EQU  0                -CASE
< CC$DO  EQU  CC$CA+1          -DOUBLE
---
> .IF    .CASL
> CC$CI  EQU  0                -CASEIG
> CC$CO  EQU  CC$CI+1          -COPY
4055c2890
< CC$DO  EQU  0                -DOUBLE
---
> CC$CO  EQU  0                -COPY
4057,4061c2892,2893
< CC$DU  EQU  CC$DO+1          -DUMP
< CC$EJ  EQU  CC$DU+1          -EJECT
< CC$ER  EQU  CC$EJ+1          -ERRORS
< CC$EX  EQU  CC$ER+1          -EXECUTE
< CC$FA  EQU  CC$EX+1          -FAIL
---
> CC$EJ  EQU  CC$CO+1          -EJECT
> CC$FA  EQU  CC$EJ+1          -FAIL
4063,4065c2895,2900
< CC$NR  EQU  CC$LI+1          -NOERRORS
< CC$NX  EQU  CC$NR+1          -NOEXECUTE
< CC$NF  EQU  CC$NX+1          -NOFAIL
---
> .IF    .CASL
> CC$NC  EQU  CC$LI+1          -NOCASEIG
> CC$NF  EQU  CC$NC+1          -NOFAIL
> .ELSE
> CC$NF  EQU  CC$LI+1          -NOFAIL
> .FI
4067,4073c2902
< CC$NO  EQU  CC$NL+1          -NOOPT
< CC$NP  EQU  CC$NO+1          -NOPRINT
< CC$OP  EQU  CC$NP+1          -OPTIMISE
< CC$PR  EQU  CC$OP+1          -PRINT
< CC$SI  EQU  CC$PR+1          -SINGLE
< CC$SP  EQU  CC$SI+1          -SPACE
< CC$ST  EQU  CC$SP+1          -STITL
---
> CC$ST  EQU  CC$NL+1          -STITL
4076c2905
< CC$NC  EQU  CC$TR+1          NUMBER OF CONTROL CARDS
---
> CC$CT  EQU  CC$TR+1          NUMBER OF CONTROL CARDS
4079d2907
<        EJC
4108d2935
< *
4157c2984
< .IF    .CULC
---
> .IF    .CASL
4159c2986
<        DTC  /DOUB/
---
>        DTC  /COPY/
4161c2988
< CCNMS  DTC  /DOUB/
---
> CCNMS  DTC  /COPY/
4163d2989
<        DTC  /DUMP/
4165,4166d2990
<        DTC  /ERRO/
<        DTC  /EXEC/
4169,4170c2993,2995
<        DTC  /NOER/
<        DTC  /NOEX/
---
> .IF    .CASL
>        DTC  /NOCA/
> .FI
4173,4178d2997
<        DTC  /NOOP/
<        DTC  /NOPR/
<        DTC  /OPTI/
<        DTC  /PRIN/
<        DTC  /SING/
<        DTC  /SPAC/
4185c3004
< DMHDK  DAC  B$SCL            DUMP OF KEYWORD VALUES
---
> DMHDK  DAC  B$SCL
4187c3006
<        DTC  /DUMP OF KEYWORD VALUES/
---
>        DDC  /DUMP OF KEYWORD VALUES/
4189c3008
< DMHDV  DAC  B$SCL            DUMP OF NATURAL VARIABLES
---
> DMHDV  DAC  B$SCL
4191,4192c3010
<        DTC  /DUMP OF NATURAL VARIABLES/
<        EJC
---
>        DDC  /DUMP OF NATURAL VARIABLES/
4198c3016
<        DTC  /STORE USED/
---
>        DDC  /STORE USED/
4202c3020
<        DTC  /STORE LEFT/
---
>        DDC  /STORE LEFT/
4206c3024
<        DTC  /COMP ERRORS/
---
>        DDC  /COMP ERRORS/
4210c3028,3032
<        DTC  /COMP TIME-MSEC/
---
> .IF    .CTMD
>        DDC  /COMP TIME-DSEC/
> .ELSE
>        DDC  /COMP TIME-MSEC/
> .FI
4212c3034
< ENCM5  DAC  B$SCL            EXECUTION SUPPRESSED
---
> ENCM5  DAC  B$SCL
4214c3036,3037
<        DTC  /EXECUTION SUPPRESSED/
---
>        DDC  /EXECUTION SUPPRESSED/
>        EJC
4216c3039
< *      STRING CONSTANT FOR ABNORMAL END
---
> *      FOR TERMINATION IN COMPILATION
4218,4221c3041,3043
< ENDAB  DAC  B$SCL
<        DAC  12
<        DTC  /ABNORMAL END/
<        EJC
---
> ENDIC  DAC  B$SCL
>        DAC  14
>        DDC  /IN COMPILATION/
4227c3049
<        DTC  /MEMORY OVERFLOW/
---
>        DDC  /MEMORY OVERFLOW/
4233c3055
<        DTC  /NORMAL END/
---
>        DDC  /NORMAL END/
4237c3059
< ENDSO  DAC  B$SCL            STACK OVERFLOW IN GARBAGE COLLECTOR
---
> ENDSO  DAC  B$SCL
4239,4245c3061
<        DTC  /STACK OVERFLOW IN GARBAGE COLLECTION/
< *
< *      STRING CONSTANT FOR TIME UP
< *
< ENDTU  DAC  B$SCL
<        DAC  15
<        DTC  /ERROR - TIME UP/
---
>        DDC  /STACK OVERFLOW IN GARBAGE COLLECTION/
4250c3066
< ERMMS  DAC  B$SCL            ERROR
---
> ERMMS  DAC  B$SCL
4252c3068
<        DTC  /ERROR/
---
>        DDC  /ERROR/
4254c3070
< ERMNS  DAC  B$SCL            STRING / -- /
---
> ERMNS  DAC  B$SCL
4257a3074,3076
> *
> ERRTF  DAC  251              FATAL ERROR CODE - SEE LABEL ERRAF
> *
4260c3079
< LSTMS  DAC  B$SCL            PAGE
---
> LSTMS  DAC  B$SCL
4262c3081
<        DTC  /PAGE /
---
>        DDC  /PAGE /
4268c3087
<        DTC  /MACRO SPITBOL VERSION 3.5/
---
>        DDC  /MACRO SPITBOL VERSION 4.3/
4272c3091
<        DTC  /3.5/
---
>        DTC  /4.3/
4301a3121,3123
> NDEXC  DAC  P$EXC            EXPRESSION
> .IF    .CNFN
> .ELSE
4304c3126
< NDEXC  DAC  P$EXC            EXPRESSION
---
> .FI
4351,4353c3173,3175
< *      OPDVS IS USED WHEN SCANNING BELOW THE TOP LEVEL TO
< *      INSURE THAT THE CONCATENATION WILL NOT BE LATER
< *      MISTAKEN FOR PATTERN MATCHING
---
> *      OPDVP IS USED WHEN SCANNING BELOW TOP LEVEL TO ENSURE
> *      THE CONCATENATION WILL NOT LATER BE MISTAKEN FOR
> *      PATTERN MATCHING
4355c3177
< OPDVP  DAC  O$CNC            CONCATENATION - NOT PATTERN MATCH
---
> OPDVP  DAC  O$CNC            PROVEN CONCATENATION
4459,4467d3280
<        DAC  O$IMA            IMMEDIATE ASSIGNMENT
<        DAC  C$BVN
<        DAC  LLDLD
<        DAC  RRDLD
< *
<        DAC  O$INV            INDIRECTION
<        DAC  C$IND
<        DAC  LLUNO
< *
4497a3311,3319
>        DAC  O$IMA            IMMEDIATE ASSIGNMENT
>        DAC  C$BVN
>        DAC  LLDLD
>        DAC  RRDLD
> *
>        DAC  O$INV            INDIRECTION
>        DAC  C$IND
>        DAC  LLUNO
> *
4580c3402
<        DTC  /PROGRAM PROFILE/
---
>        DDC  /PROGRAM PROFILE/
4583c3405
<        DTC  /STMT    NUMBER OF     -- EXECUTION TIME --/
---
>        DDC  /STMT    NUMBER OF     -- EXECUTION TIME --/
4586c3408
<        DTC  /NUMBER  EXECUTIONS  TOTAL(MSEC) PER EXCN(MCSEC)/
---
>        DDC  /NUMBER  EXECUTIONS  TOTAL(MSEC) PER EXCN(MCSEC)/
4588d3409
< *
4616a3438,3439
> .IF    .CNBF
> .ELSE
4618c3441
< SCBUF  DAC  B$SCL            BUFFER
---
> SCBUF  DAC  B$SCL
4620a3444
> .FI
4717a3542,3544
> .IF    .CS16
> STLIM  DIC  +32767           DEFAULT STATEMENT LIMIT
> .ELSE
4718a3546
> .FI
4749c3577
< STPM1  DAC  B$SCL            IN STATEMENT
---
> STPM1  DAC  B$SCL
4751c3579
<        DTC  /IN STATEMENT/
---
>        DDC  /IN STATEMENT/
4755c3583
<        DTC  /STMTS EXECUTED/
---
>        DDC  /STMTS EXECUTED/
4759c3587,3591
<        DTC  /RUN TIME-MSEC/
---
> .IF    .CTMD
>        DDC  /RUN TIME-DSEC/
> .ELSE
>        DDC  /RUN TIME-MSEC/
> .FI
4763c3595
<        DTC  $MCSEC / STMT$
---
>        DDC  $MCSEC / STMT$
4767c3599
<        DTC  /REGENERATIONS/
---
>        DDC  /REGENERATIONS/
4769,4772d3600
< *      CHARS FOR /TU/ ENDING CODE
< *
< STRTU  DTC  /TU/
< *
4800c3628
< TMASB  DAC  B$SCL            ASTERISKS FOR TRACE STATEMENT NO
---
> TMASB  DAC  B$SCL
4803d3630
< 
4805c3632
< TMBEB  DAC  B$SCL            BLANK-EQUAL-BLANK
---
> TMBEB  DAC  B$SCL
4891a3719,3724
> V$CTI  DBC  SVFNP            CTI
>        DAC  3
>        DTC  /CTI/
>        DAC  S$CTI
>        DAC  1
> *
4896a3730,3735
> V$ITC  DBC  SVFNN            ITC
>        DAC  3
>        DTC  /ITC/
>        DAC  S$ITC
>        DAC  1
> *
4967d3805
< .IF    .CULC
4969,4980d3806
< V$CAS  DBC  SVKNM            CASE
<        DAC  4
<        DTC  /CASE/
<        DAC  K$CAS
< .FI
< *
< V$CHR  DBC  SVFNP            CHAR
<        DAC  4
<        DTC  /CHAR/
<        DAC  S$CHR
<        DAC  1
< *
5077a3904
>        EJC
5078a3906,3908
> *      STANDARD VARIABLE BLOCKS (CONTINUED)
> *
> *
5133,5137d3962
< V$ABE  DBC  SVKNM            ABEND
<        DAC  5
<        DTC  /ABEND/
<        DAC  K$ABE
< *
5183a4009,4011
> .IF    .CNFN
> V$FEN  DBC  SVKVC            FENCE
> .ELSE
5184a4013
> .FI
5187a4017,4018
> .IF    .CNFN
> .ELSE
5189a4021
> .FI
5217d4048
< *
5257a4089,4092
>        EJC
> *
> *      STANDARD VARIABLE BLOCKS (CONTINUED)
> *
5260,5261c4095
< *
< V$APN  DBC  SVFNN
---
> V$APN  DBC  SVFNN            APPEND
5273d4106
< *
5286c4119
<        DAC  S$DEF
---
>        DAC  S$DFN
5294d4126
<        EJC
5296,5297d4127
< *      STANDARD VARIABLE BLOCKS (CONTINUED)
< *
5308c4138
< *
---
>        EJC
5310a4141
> *
5316d4146
< *
5317a4148
> *
5341,5346d4171
< V$REW  DBC  SVFNN            REWIND
<        DAC  6
<        DTC  /REWIND/
<        DAC  S$REW
<        DAC  1
< *
5377c4202
<        DAC  S$CNV
---
>        DAC  S$CVT
5384c4209
<        DAC  1
---
>        DAC  2
5414d4238
< *
5423a4248
> *
5462a4288,4293
> V$VDF  DBC  SVFPR            VDIFFER
>        DAC  7
>        DTC  /VDIFFER/
>        DAC  S$VDF
>        DAC  2
> *
5466a4298
>        EJC
5467a4300,4301
> *      STANDARD VARIABLE BLOCKS (CONTINUED)
> *
5472d4305
<        EJC
5474,5475d4306
< *      STANDARD VARIABLE BLOCKS (CONTINUED)
< *
5516,5518d4346
< .IF    .CULC
<        DAC  V$CAS            CCASE
< .FI
5548,5553c4376,4377
< .IF    .CULC
<        DAC  V$CAS            START OF 4 CHAR VARIABLES
< .ELSE
<        DAC  V$CHR            START OF 4 CHAR VARIABLES
< .FI
<        DAC  V$ABE            START OF 5 CHAR VARIABLES
---
>        DAC  V$COD            START OF 4 CHAR VARIABLES
>        DAC  V$ABO            START OF 5 CHAR VARIABLES
5598c4422
< *      LABEL TO MARK START OF WORK AREA
---
> *      LABEL TO MARK START OF WORK AREA WHICH IS CLEARED
5663,5665c4487,4489
< CSWDB  DAC  0                0/1 FOR -SINGLE/-DOUBLE
< CSWER  DAC  0                0/1 FOR -ERRORS/-NOERRORS
< CSWEX  DAC  0                0/1 FOR -EXECUTE/-NOEXECUTE
---
> .IF    .CASL
> CSWCI  DAC  0                0/1 FOR -NOCASEIG/CASEIG
> .FI
5669,5670c4493
< CSWNO  DAC  0                0/1 FOR -OPTIMISE/-NOOPT
< CSWPR  DAC  0                0/1 FOR -NOPRINT/-PRINT
---
>        EJC
5676d4498
<        EJC
5711,5715d4532
< *      WORK AREA FOR DTACH
< *
< DTCNB  DAC  0                NAME BASE
< DTCNM  DAC  0                NAME PTR
< *
5726,5727c4543
< ERICH  DAC  0                COPY ERROR REPORTS TO INT.CHAN IF 1
< ERLST  DAC  0                FOR LISTR WHEN ERRORS GO TO INT.CH.
---
> EROSN  DAC  0                FLAG FOR SPECIAL EROSI RETURN
5741a4558
> *
5798a4616
> GTNSV  DIC  +0               SAVE IA
5821a4640
>        EJC
5827c4646
< *      FLAG FOR HEADER PRINTING
---
> *      FLAGS FOR HEADER PRINTING
5828a4648
> HEADN  DAC  0                NON-ZERO IF HDRS NOT TO BE PRINTED
5838a4659
> INICD  DIC  +0               CODE KWD VAL (NEEDED FOR BATCH)
5846c4667,4669
< INSAB  DAC  0                ENTRY WA + ENTRY WB
---
> INSAB  DAC  0                ENTRY WA PLUS ENTRY WB
> INSBB  DAC  0                BFBLK POINTER
> INSBC  DAC  0                BCBLK POINTER
5849d4671
< INSSC  DAC  0                SAVE ENTRY WC
5854c4676,4680
< IOPTT  DAC  0                TYPE OF ASSOCIATION
---
> IOPNF  DAC  0                NAME OFFSET
> IOPVR  DAC  0                FILETAG VRBLK
> IOPWA  DAC  0                KEEP WA
> IOPWB  DAC  0                KEEP WB
> IOPWC  DAC  0                KEEP WC
5861d4686
< KVABE  DAC  0                ABEND
5863,5866d4687
< .IF    .CULC
< KVCAS  DAC  0                CASE
< .FI
< KVCOD  DAC  0                CODE
5887a4709,4713
> KVCOD  DIC  0                CODE
> .IF    .CS16
> KVSTL  DIC  +32767           STLIMIT
> KVSTC  DIC  +32767           STCOUNT (COUNTS DOWN FROM STLIMIT)
> .ELSE
5889a4716
> .FI
5897a4725
>        EJC
5920c4748
< PFDMP  DAC  0                SET NON-0 IF &PROFILE SET NON-0
---
> PFDMP  DAC  0                SET NON-0 IF PROFILE SET NON-0
5927c4755
< PFSTE  DIC  +0               GETS INT REP OF TABLE ENTRY SIZE
---
> PFSTE  DIC  +0               TABLE ENTRY SIZE IN BAUS
5929d4756
< *
5938,5943d4764
< *      FLAGS USED FOR STANDARD FILE LISTING OPTIONS
< *
< PRICH  DAC  0                PRINTER ON INTERACTIVE CHANNEL
< PRSTD  DAC  0                TESTED BY PRTPG
< PRSTO  DAC  0                STANDARD LISTING OPTION FLAG
< *
5957a4779,4780
> PRAVL  DAC  0                SET IF PRINT FILE AVAILABLE
> PRBLK  DAC  0                ADDRESS OF BUFFER BLANKING STRING
5958a4782,4783
> PRCHS  DAC  0                ADDRESS OF CHARS IN PRINT BUFFER
> PRCMV  DAC  0                NO. OF BAUS TO MOVE IN BFR CLEARING
5961d4785
< PRLNW  DAC  0                LENGTH OF PRINT BUFFER IN WORDS
5962a4787,4789
> PRPUT  DAC  0                SET IF CHARS TO BE PUT IN BFR
> PRSTD  DAC  0                TESTED BY PRTPG
> PRSTO  DAC  0                STANDARD LISTING OPTION FLAG
5965c4792
< *      WORK AREAS FOR PRTST PROCEDURE
---
> *      WORK AREAS FOR PRTST, PTTST PROCEDURES
5969c4796,4797
< PRSVC  DAC  0                SAVE CHAR COUNTER
---
> PRTVA  DAC  0                SAVE WA
> PRTVB  DAC  0                SAVE WB
5971,5975d4798
< *      WORK AREA FOR PRTNL
< *
< PRTSA  DAC  0                SAVE WA
< PRTSB  DAC  0                SAVE WB
< *
5985a4809,4812
> *      FLAG TO TELL ERROR THAT WE ARE READING SOURCE LINE
> *
> RDRER  DAC  0                READ-SOURCE-LINE IN PROGRESS FLAG
> *
6009a4837
> R$COP  DAC  0                PTR TO -COPY CHAIN STACK
6014d4841
< R$FCB  DAC  0                FCBLK CHAIN HEAD
6017,6022c4844,4847
< R$IO1  DAC  0                FILE ARG1 FOR IOPUT
< R$IO2  DAC  0                FILE ARG2 FOR IOPUT
< R$IOF  DAC  0                FCBLK PTR OR 0
< R$ION  DAC  0                NAME BASE PTR
< R$IOP  DAC  0                PREDECESSOR BLOCK PTR FOR IOPUT
< R$IOT  DAC  0                TRBLK PTR FOR IOPUT
---
> R$IO1  DAC  0                FIRST ARGUMENT
> R$IOL  DAC  0                SECOND ARGUMENT (FILETAG) SCBLK PTR
> R$IOR  DAC  0                FILEPROPS SCBLK PTR
> R$IOT  DAC  0                TRTIO TRACE BLK PTR
6077a4903,4910
> *
> *      WORK AREA FOR DETACH PROCEDURE
> *
> SDETF  DAC  0                TRACE BLOCK FLAG
> *
> *      WORK AREA FOR ENDFILE PROCEDURE
> *
> SENFR  DAC  0                SAVE XR
6102c4935
< *      GLOBAL VALUE FOR INDICATING STAGE (SEE ERROR SECTION)
---
> *      VALUES FOR INDICATING COMPILATION/EXECUTION STAGE
6104a4938
> STAGX  DAC  0                NON-ZERO IF EXECUTING
6119a4954
> STPXR  DAC  0                SAVE XR
6133d4967
< TIMUP  DAC  0                SET WHEN TIME UP OCCURS
6134a4969,4981
> *      TERMINAL BUFFER ADDRESSES, FLAGS ETC
> *
> TTBLK  DAC  0                BLANKING STRING ADRS
> TTBUF  DAC  0                BUFFER ADRS
> TTCHS  DAC  0                START OF BUFFER CHARACTERS
> TTCMV  DAC  0                COUNT OF BLANKING CHARS TO MOVE
> TTERL  DAC  0                ERROR FLAG
> TTINS  DAC  0                NON-ZERO IF STD INPUT FROM TERML
> TTLEN  DAC  0                LENGTH OF TERMINAL BUFFER
> TTLST  DAC  0                COPY STD O/P TO TERML IF SET
> TTOFS  DAC  0                OFFSET TO POSITION IN TERML BFR
> TTOUS  DAC  0                SET IF STD OUTPUT TO TERMINAL
> *
6136a4984,4985
> XSCBL  DAC  0                COUNT OF TRAILING BLANKS
> XSCNB  DAC  0                NON-ZERO IF NON-BLANKS SEEN
6155a5005
> *      (WA)                  INITIAL &CODE VALUE
6158c5008,5010
<        JSR  SYSTM            INITIALISE TIMER
---
> *
> INITL  RTN                   INITIALISATION CODE
>        MOV  WA,INICD         SAVE INITIAL CODE KYWD VALUE
6160d5011
<        STI  TIMSX            STORE TIME
6196c5047
<        MOV  WA,CSWIN         -IN72
---
>        MOV  WA,CSWIN         STORE FOR LATER USE
6206d5056
<        STI  TIMSX            STORE TIME IN CORRECT PLACE
6211a5062,5068
> .IF    .CSIG
>        MNZ  CSWCI            -CASEIG
> .FI
>        JSR  SYSTM            INITIALISE TIMER
>        STI  TIMSX            STORE TIME
>        LDI  INICD            LOAD INITIAL CODE KWD VALUE
>        STI  KVCOD            STORE
6247a5105,5106
>        ADD  TTLEN,WA         ADD TERMINAL BUFFER LENGTH
>        ADD  WA,WA            ALLOW FOR EQUALLY BIG BLANK STRINGS
6250c5109
<        CTB  WA,8             CONVERT TO BYTES, ALLOWING A MARGIN
---
>        CTB  WA,8             CONVERT TO BAUS, ALLOWING A MARGIN
6258c5117
<        BGT  XR,WA,INI06      SKIP IF STATIC HI EXCEEDS MXLEN
---
>        BGT  XR,WA,INI05      SKIP IF STATIC HI EXCEEDS MXLEN
6265c5124
< INI06  MOV  XR,DNAMB         DYNAMIC BASE ADRS
---
> INI05  MOV  XR,DNAMB         DYNAMIC BASE ADRS
6267c5126
<        BNZ  WA,INI07         SKIP IF NON-ZERO MXLEN
---
>        BNZ  WA,INI06         SKIP IF NON-ZERO MXLEN
6271d5129
<        EJC
6276,6277c5134,5135
< INI07  MOV  XL,DNAME         STORE DYNAMIC END ADDRESS
<        BLT  DNAMB,XL,INI09   SKIP IF HIGH ENOUGH
---
> INI06  MOV  XL,DNAME         STORE DYNAMIC END ADDRESS
>        BLT  DNAMB,XL,INI08   SKIP IF HIGH ENOUGH
6279c5137
<        WTB  XR               GET AS BAUS (SGD05)
---
>        WTB  XR               CONVERT TO BAUS
6281c5139
<        BNZ  XR,INI07         TRY AGAIN
---
>        BNZ  XR,INI06         TRY AGAIN
6283c5141
<        MOV  ENDML,WA         MESSAGE LENGTH
---
>        MOV  ENDML,WC         MESSAGE LENGTH
6285c5143,5148
<        PPM                   SHOULD NOT FAIL
---
>        PPM  INI07
>        PPM  INI07
> *
> *      EMERGENCY SHUTDOWN
> *
> INI07  MOV  =KVCOD,WA        CODE KEYWORD
6286a5150
>        EJC
6290c5154
< INI09  MOV  PRLEN,WC         NO. OF CHARS IN PRINT BFR
---
> INI08  MOV  PRLEN,WA         NO. OF CHARS IN PRINT BFR
6294,6297c5158,5169
<        MOV  WC,(XR)+         AND STRING LENGTH
<        CTW  WC,0             GET NUMBER OF WORDS IN BUFFER
<        MOV  WC,PRLNW         STORE FOR BUFFER CLEAR
<        LCT  WC,WC            WORDS TO CLEAR
---
>        MOV  WA,(XR)+         AND STRING LENGTH
>        MOV  XR,PRCHS         KEEP ADRS OF BUFFER PROPER
>        MOV  XR,XL            COPY IT
>        CTB  WA,0             WORDS NEEDED EXPRESSED IN BAUS
>        MOV  WA,PRCMV         KEEP FOR CLEARING BUFFER
>        MOV  XR,PRBLK         CONSTRUCT ADRS OF BLANKING STRING
>        ADD  WA,PRBLK         ADD OFFSET TO BLANKING STRING
>        ADD  WA,WA            CLEAR BOTH BFR AND BLANKING STRING
>        MOV  NULLW,(XR)+      CLEAR FIRST WORD
>        BZE  WA,INI09         SKIP IF NO PRINT BUFFER
>        DCA  WA               ADJUST FOR FIRST WORD
>        MVW                   PERFORM BLANKING
6299c5171
< *      LOOP TO CLEAR BUFFER
---
> *      SET UP TERMINAL BUFFER
6301,6302c5173,5187
< INI10  MOV  NULLW,(XR)+      STORE BLANK
<        BCT  WC,INI10         LOOP
---
> INI09  MOV  TTLEN,WA         LENGTH OF TERMINAL BUFFER
>        MOV  XR,TTBUF         ADRS OF TERMINAL STRING BUFFER
>        MOV  =B$SCL,(XR)+     STRING TYPE CODE
>        MOV  WA,(XR)+         STRING LENGTH
>        MOV  XR,TTCHS         KEEP ADRS OF BUFFER PROPER
>        MOV  XR,XL            COPY IT
>        CTB  WA,0             WORDS NEEDED EXPRESSED IN BAUS
>        MOV  WA,TTCMV         KEEP FOR CLEARING BUFFER
>        MOV  XR,TTBLK         CONSTRUCT ADRS OF BLANKING STRING
>        ADD  WA,TTBLK         ADD OFFSET TO BLANKING STRING
>        ADD  WA,WA            CLEAR BOTH BFR AND BLANKING STRING
>        MOV  NULLW,(XR)+      CLEAR FIRST WORD
>        BZE  WA,INI10         SKIP IF NO PRINT BUFFER
>        DCA  WA               ADJUST FOR FIRST WORD
>        MVW                   PERFORM BLANKING
6306c5191
<        MOV  =E$HNB,WA        GET NUMBER OF HASH HEADERS
---
> INI10  MOV  =E$HNB,WA        GET NUMBER OF HASH HEADERS
6321c5206
<        CTB  WA,SCSI$         NO OF BYTES NEEDED
---
>        CTB  WA,SCSI$         NO OF BAUS NEEDED
6333c5218
<        CTB  WB,SCSI$         NO. OF BYTES NEEDED
---
>        CTB  WB,SCSI$         NO. OF BAUS NEEDED
6347c5232
< *      INITIALIZE VARIABLE BLOCKS FOR INPUT AND OUTPUT
---
> *      INITIALIZE VARIABLE BLOCKS FOR INPUT OUTPUT TERMINAL
6355,6357c5240,5246
<        MOV  INITR,WC         TERMINAL FLAG
<        BZE  WC,INI13         SKIP IF NO TERMINAL
<        JSR  PRPAR            ASSOCIATE TERMINAL
---
>        BZE  TTLEN,INI13      SKIP IF NO TERMINAL I/O
>        MOV  =V$TER,XL        POINT TO STRING /TERMINAL/
>        MOV  =TRTOU,WB        TRTYP FOR OUTPUT
>        JSR  INOUT            PERFORM ASSOCIATION
>        MOV  =V$TER,XL
>        MOV  =TRTIN,WB        TRTYP FOR INPUT
>        JSR  INOUT            PERFORM ASSOCIATION
6360d5248
< *      CHECK FOR EXPIRY DATE
6362,6363c5250
< INI13  JSR  SYSDC            CALL DATE CHECK
<        MOV  XS,FLPTR         IN CASE STACK OVERFLOWS IN COMPILER
---
> *      PREPARE FOR COMPILATION
6364a5252,5253
> INI13  MOV  XS,FLPTR         IN CASE STACK OVERFLOWS IN COMPILER
> *
6369,6370c5258,5259
<        MOV  =NULLS,R$TTL     FORGET TITLE      (REG04)
<        MOV  =NULLS,R$STL     FORGET SUB-TITLE  (REG04)
---
>        MOV  =NULLS,R$TTL     FORGET TITLE
>        MOV  =NULLS,R$STL     FORGET SUB-TITLE
6375c5264
<        BNZ  CPSTS,INIX0      SKIP IF NO LISTING OF COMP STATS
---
>        BNZ  CPSTS,INIX1      SKIP IF NO LISTING OF COMP STATS
6404,6407d5292
< .IF    .CUEJ
<        BZE  HEADP,INIX0      NO EJECT IF NOTHING PRINTED (SDG11)
<        JSR  PRTPG            EJECT PRINTER
< .FI
6412d5296
< *      SET DEFAULT INPUT RECORD LENGTH
6414,6415c5298
< INIX0  BGT  CSWIN,=INILN,INIX1 SKIP IF NOT DEFAULT -IN72 USED
<        MOV  =INILS,CSWIN     ELSE USE DEFAULT RECORD LENGTH
---
> *      CHECK FOR NOEXECUTE
6417,6422c5300
< *      RESET TIMER
< *
< INIX1  JSR  SYSTM            GET TIME AGAIN
<        STI  TIMSX            STORE FOR END RUN PROCESSING
<        ADD  CSWEX,NOXEQ      ADD -NOEXECUTE FLAG
<        BNZ  NOXEQ,INIX2      JUMP IF EXECUTION SUPPRESSED
---
> INIX1  BNZ  NOXEQ,INIX3      JUMP IF EXECUTION SUPPRESSED
6424,6429c5302,5303
<        JSR  SYSBX            CALL BEFORE STARTING EXECUTION
< .IF    .CUEJ
< .ELSE
<        BZE  HEADP,INIY0      NO EJECT IF NOTHING PRINTED (SGD11)
<        JSR  PRTPG            EJECT PRINTER
< .FI
---
>        BZE  HEADP,INIX2      SKIP IF NO PRTPG CALLS IN COMPILN
>        JSR  PRTPG            EJECT STANDARD PRINTER FILE
6431c5305
< *      MERGE WHEN LISTING FILE SET FOR EXECUTION
---
> *      INFORM OSINT OF STAGE
6433c5307
< INIY0  MNZ  HEADP            MARK HEADERS OUT REGARDLESS
---
> INIX2  JSR  SYSBX            CALL BEFORE STARTING EXECUTION
6437a5312,5313
>        JSR  SYSTM            GET TIME
>        STI  TIMSX            STORE FOR END RUN PROCESSING
6440,6442c5316,5317
<        MOV  CMPSN,PFNTE      COPY STMTS COMPILED COUNT IN CASE
<        JSR  SYSTM            TIME YET AGAIN
<        STI  PFSTM
---
>        STI  PFSTM            STORE TIME FOR PROFILER
>        MOV  CMPSN,PFNTE      COPY STATEMENTS COMPILED COUNT
6448c5323
< INIX2  JSR  PRTNL            PRINT A BLANK LINE
---
> INIX3  JSR  PRTFH            PRINT A BLANK LINE
6450,6453c5325,5327
<        JSR  PRTST            PRINT STRING
<        JSR  PRTNL            OUTPUT LINE
<        ZER  WA               SET ABEND VALUE TO ZERO
<        MOV  =NINI9,WB        SET SPECIAL CODE VALUE
---
>        MOV  TTERL,TTLST      TO FORCE MSG TO TERMINAL
>        JSR  PRTSF            PRINT NOEXECUTE MESSAGE
>        MOV  =KVCOD,WA        ENDING CODE
6500c5374
<        ERB  261,ADDITION CAUSED REAL OVERFLOW
---
>        ERB  004,ADDITION CAUSED REAL OVERFLOW
6509c5383
<        ERR  004,AFFIRMATION OPERAND IS NOT NUMERIC
---
>        ERR  005,AFFIRMATION OPERAND IS NOT NUMERIC
6518c5392
<        ERR  005,ALTERNATION RIGHT OPERAND IS NOT PATTERN
---
>        ERR  006,ALTERNATION RIGHT OPERAND IS NOT PATTERN
6527c5401
<        ERR  006,ALTERNATION LEFT OPERAND IS NOT PATTERN
---
>        ERR  007,ALTERNATION LEFT OPERAND IS NOT PATTERN
6551d5424
<        EJC
6559d5431
<        EJC
6583c5455
<        WTB  WA               CONVERT TO BYTES
---
>        WTB  WA               CONVERT TO BAUS
6622c5494
<        WTB  WA               CONVERT TO BYTES
---
>        WTB  WA               CONVERT TO BAUS
6636c5508
< *      ASSIGNMENT
---
> *      ASSIGNMENT (O$RPL MERGES)
6639,6642c5511
< *
< *      O$RPL (PATTERN REPLACEMENT) MERGES HERE
< *
< OASS0  MOV  (XS)+,WB         LOAD VALUE TO BE ASSIGNED
---
>        MOV  (XS)+,WB         LOAD VALUE TO BE ASSIGNED
6649d5517
<        EJC
6654,6655c5522
<        ERB  007,COMPILATION ERROR ENCOUNTERED DURING EXECUTION
<        EJC
---
>        ERB  008,COMPILATION ERROR ENCOUNTERED DURING EXECUTION
6729c5596
<        ERR  008,CONCATENATION LEFT OPND IS NOT STRING OR PATTERN
---
>        ERR  009,CONCATENATION LEFT OPND IS NOT STRING OR PATTERN
6733c5600
<        ERR  009,CONCATENATION RIGHT OPD IS NOT STRING OR PATTERN
---
>        ERR  010,CONCATENATION RIGHT OPD IS NOT STRING OR PATTERN
6754c5621
<        ERR  010,COMPLEMENTATION OPERAND IS NOT NUMERIC
---
>        ERR  011,COMPLEMENTATION OPERAND IS NOT NUMERIC
6762c5629
<        ERB  011,COMPLEMENTATION CAUSED INTEGER OVERFLOW
---
>        ERB  012,COMPLEMENTATION CAUSED INTEGER OVERFLOW
6778,6779c5645,5646
<        ERR  012,DIVISION LEFT OPERAND IS NOT NUMERIC
<        ERR  013,DIVISION RIGHT OPERAND IS NOT NUMERIC
---
>        ERR  013,DIVISION LEFT OPERAND IS NOT NUMERIC
>        ERR  014,DIVISION RIGHT OPERAND IS NOT NUMERIC
6789c5656
<        ERB  014,DIVISION CAUSED INTEGER OVERFLOW
---
>        ERB  015,DIVISION CAUSED INTEGER OVERFLOW
6797c5664
<        ERB  262,DIVISION CAUSED REAL OVERFLOW
---
>        ERB  016,DIVISION CAUSED REAL OVERFLOW
6806c5673
<        ERR  015,EXPONENTIATION RIGHT OPERAND IS NOT NUMERIC
---
>        ERR  017,EXPONENTIATION RIGHT OPERAND IS NOT NUMERIC
6814c5681
<        ERR  016,EXPONENTIATION LEFT OPERAND IS NOT NUMERIC
---
>        ERR  018,EXPONENTIATION LEFT OPERAND IS NOT NUMERIC
6840c5707
< OEXP2  ERB  017,EXPONENTIATION CAUSED INTEGER OVERFLOW
---
> OEXP2  ERB  019,EXPONENTIATION CAUSED INTEGER OVERFLOW
6858c5725
< OEXP4  ERB  018,EXPONENTIATION RESULT IS UNDEFINED
---
> OEXP4  ERB  020,EXPONENTIATION RESULT IS UNDEFINED
6871c5738
< OEXP6  ERB  266,EXPONENTIATION CAUSED REAL OVERFLOW
---
> OEXP6  ERB  021,EXPONENTIATION CAUSED REAL OVERFLOW
6875c5742
< OEXP7  ERB  267,EXPONENTIATION RIGHT OPERAND IS REAL NOT INTEGER
---
> OEXP7  ERB  022,EXPONENTIATION RIGHT OPERAND IS REAL NOT INTEGER
6880c5747
< OEXP8  ERB  019,EXPONENTIATION RIGHT OPERAND IS NEGATIVE
---
> OEXP8  ERB  023,EXPONENTIATION RIGHT OPERAND IS NEGATIVE
6890,6891c5757
<        BRN  EVLX6            JUMP TO FAILURE LOC IN EVALX
<        EJC
---
>        JMG  EVLXF            JUMP TO FAILURE LOC IN EVALX
6896,6897c5762
<        ERB  020,GOTO EVALUATION FAILURE
<        EJC
---
>        ERB  024,GOTO EVALUATION FAILURE
6907d5771
<        EJC
6914c5778,5779
<        BZE  2(XS),EVLX3      OK IF EXPR. WAS WANTED BY VALUE
---
>        BNZ  2(XS),OFNE1      FAIL UNLESS EXPRN WANTED BY VALUE
>        JMG  EVLXV            JOIN EXPRESSION BY VALUE CODE
6918,6919c5783
< OFNE1  ERB  021,FUNCTION CALLED BY NAME RETURNED A VALUE
<        EJC
---
> OFNE1  ERB  025,FUNCTION CALLED BY NAME RETURNED A VALUE
6933,6934c5797
<        ERB  022,UNDEFINED FUNCTION CALLED
<        EJC
---
>        ERB  026,UNDEFINED FUNCTION CALLED
6946,6947c5809
< OGOC1  ERB  023,GOTO OPERAND IS NOT A NATURAL VARIABLE
<        EJC
---
> OGOC1  ERB  027,GOTO OPERAND IS NOT A NATURAL VARIABLE
6954,6957c5816,5818
<        BEQ  WA,=B$CDS,BCDS0  JUMP IF CODE BLOCK TO CODE ROUTINE
<        BEQ  WA,=B$CDC,BCDC0  JUMP IF CODE BLOCK TO CODE ROUTINE
<        ERB  024,GOTO OPERAND IN DIRECT GOTO IS NOT CODE
<        EJC
---
>        BEQ  WA,=B$CDC,OGOD1  JUMP IF CODE BLOCK
>        BEQ  WA,=B$CDS,OGOD2  JUMP IF CODE BLOCK
>        ERB  028,GOTO OPERAND IN DIRECT GOTO IS NOT CODE
6958a5820,5831
> *      CASE OF COMPLEX FAILURE CODE
> *
> OGOD1  MOV  FLPTR,XS         POP GARBAGE OFF STACK
>        MOV  CDFAL(XR),(XS)   SET NEW FAILURE OFFSET
>        BRN  STMGO            JUMP TO EXECUTE CODE
> *
> *      CASE OF SIMPLE FAILURE CODE
> *
> OGOD2  MOV  FLPTR,XS         POP GARBAGE OFF STACK
>        MOV  *CDFAL,(XS)      SET NEW FAILURE OFFSET
>        BRN  STMGO            JUMP TO EXECUTE CODE
> *
6985c5858
<        ERR  025,IMMEDIATE ASSIGNMENT LEFT OPERAND IS NOT PATTERN
---
>        ERR  029,IMMEDIATE ASSIGNMENT LEFT OPERAND IS NOT PATTERN
6992d5864
<        EJC
6999d5870
<        EJC
7006d5876
<        EJC
7020d5889
<        EJC
7030d5898
<        EJC
7044d5911
<        EJC
7060d5926
<        EJC
7066,7067c5932,5933
<        ERR  026,MULTIPLICATION LEFT OPERAND IS NOT NUMERIC
<        ERR  027,MULTIPLICATION RIGHT OPERAND IS NOT NUMERIC
---
>        ERR  030,MULTIPLICATION LEFT OPERAND IS NOT NUMERIC
>        ERR  031,MULTIPLICATION RIGHT OPERAND IS NOT NUMERIC
7077c5943
<        ERB  028,MULTIPLICATION CAUSED INTEGER OVERFLOW
---
>        ERB  032,MULTIPLICATION CAUSED INTEGER OVERFLOW
7085c5951
<        ERB  263,MULTIPLICATION CAUSED REAL OVERFLOW
---
>        ERB  033,MULTIPLICATION CAUSED REAL OVERFLOW
7087d5952
<        EJC
7123d5987
<        EJC
7128,7129c5992
<        ERB  029,UNDEFINED OPERATOR REFERENCED
<        EJC
---
>        ERB  034,UNDEFINED OPERATOR REFERENCED
7145c6008
<        ERR  030,PATTERN ASSIGNMENT LEFT OPERAND IS NOT PATTERN
---
>        ERR  035,PATTERN ASSIGNMENT LEFT OPERAND IS NOT PATTERN
7159d6021
<        EJC
7170d6031
<        EJC
7177d6037
<        EJC
7184d6043
<        EJC
7189,7190c6048,6050
<        BRN  LEND0            JUMP TO END CIRCUIT
<        EJC
---
>        MOV  =ENDMS,XR        ENDING MESSAGE
>        ZER  WA               NO ERROR CODE
>        BRN  STOPR            STOP THE RUN
7198c6058
<        BRN  EVLX4            RETURN TO EVALX PROCEDURE
---
>        JMG  EVLXN            RETURN TO EVALX PROCEDURE
7210c6070
< *                            SUBJECT POINTER
---
> *                            SUBJECT STRING POINTER
7215c6075
<        ERR  031,PATTERN REPLACEMENT RIGHT OPERAND IS NOT STRING
---
>        ERR  036,PATTERN REPLACEMENT RIGHT OPERAND IS NOT STRING
7222c6082
<        BEQ  (XL),=B$BCT,ORPL4 BRANCH IF BUFFER ASSIGNMENT
---
>        BEQ  (XL),=B$BCT,ORPL5 BRANCH IF BUFFER ASSIGNMENT
7257c6117
<        BZE  WA,OASS0         JUMP TO ASSIGN IF PART 3 IS NULL
---
>        BZE  WA,ORPL4         JUMP TO ASSIGN IF PART 3 IS NULL
7260c6120
<        BRN  OASS0            JUMP TO PERFORM ASSIGNMENT
---
>        BRN  ORPL4            JUMP TO PERFORM ASSIGNMENT
7266c6126,6130
<        BRN  OASS0            JUMP TO ASSIGN NULL VALUE
---
> *
> *      MERGE WITH ASSIGNMENT ROUTINE
> *
> ORPL4  MOV  =O$ASS,XL        CONTINUATION ROUTINE
>        BRI  XL               ENTER ROUTINE
7272c6136
< ORPL4  MOV  XR,XL            COPY SCBLK REPLACEMENT PTR
---
> ORPL5  MOV  XR,XL            COPY SCBLK REPLACEMENT PTR
7292c6156
<        BRN  EVLX3            RETURN TO EVALX PROCEDURE
---
>        BRN  EVLXV            RETURN TO EVALX PROCEDURE
7337,7338c6201,6202
<        ERR  032,SUBTRACTION LEFT OPERAND IS NOT NUMERIC
<        ERR  033,SUBTRACTION RIGHT OPERAND IS NOT NUMERIC
---
>        ERR  037,SUBTRACTION LEFT OPERAND IS NOT NUMERIC
>        ERR  038,SUBTRACTION RIGHT OPERAND IS NOT NUMERIC
7348c6212
<        ERB  034,SUBTRACTION CAUSED INTEGER OVERFLOW
---
>        ERB  039,SUBTRACTION CAUSED INTEGER OVERFLOW
7356c6220
<        ERB  264,SUBTRACTION CAUSED REAL OVERFLOW
---
>        ERB  040,SUBTRACTION CAUSED REAL OVERFLOW
7358d6221
<        EJC
7363,7364c6226
<        BRN  TRXQ1            JUMP INTO TRXEQ PROCEDURE
<        EJC
---
>        JMG  TRXQR            JUMP INTO TRXEQ PROCEDURE
7375c6237
<        ERB  035,UNEXPECTED FAILURE IN -NOFAIL MODE
---
>        ERB  041,UNEXPECTED FAILURE IN -NOFAIL MODE
7387d6248
<        EJC
7391a6253,6255
>        MOV  KVERT,WA         LOAD ERROR CODE
>        ZER  XR               INDICATE NO ENDING MESSAGE
>        BNZ  WA,STOPR         STOP RUN
7393d6256
< *      MERGE HERE IF EXECUTION TERMINATES IN ERROR
7395,7404c6258
< LABO1  MOV  KVERT,WA         LOAD ERROR CODE
<        BZE  WA,LABO2         JUMP IF NO ERROR HAS OCCURED
< .IF    .CSAX
<        JSR  SYSAX            CALL AFTER EXECUTION PROC (REG04)
< .ELSE
< .FI
<        JSR  PRTPG            ELSE EJECT PRINTER
<        JSR  ERMSG            PRINT ERROR MESSAGE
<        ZER  XR               INDICATE NO MESSAGE TO PRINT
<        BRN  STOPR            JUMP TO ROUTINE TO STOP RUN
---
> *      FAIL IF NO ERROR HAD OCCURED
7406c6260
< *      HERE IF NO ERROR HAD OCCURED
---
>        ERB  042,GOTO ABORT WITH NO PRECEDING ERROR
7408,7410d6261
< LABO2  ERB  036,GOTO ABORT WITH NO PRECEDING ERROR
<        EJC
< *
7417,7418c6268,6269
< LCNT1  MOV  R$CNT,XR         LOAD CONTINUATION CODE BLOCK PTR
<        BZE  XR,LCNT2         JUMP IF NO PREVIOUS ERROR
---
> LCNXE  MOV  R$CNT,XR         LOAD CONTINUATION CODE BLOCK PTR
>        BZE  XR,LCNT1         JUMP IF NO PREVIOUS ERROR
7428c6279
< LCNT2  ERB  037,GOTO CONTINUE WITH NO PRECEDING ERROR
---
> LCNT1  ERB  043,GOTO CONTINUE WITH NO PRECEDING ERROR
7434,7437c6285,6286
< *
< *      MERGE HERE FROM END CODE CIRCUIT
< *
< LEND0  MOV  =ENDMS,XR        POINT TO MESSAGE /NORMAL TERM../
---
>        MOV  =ENDMS,XR        POINT TO MESSAGE /NORMAL TERM../
>        ZER  WA               NO ERROR CODE
7439d6287
<        EJC
7446d6293
<        EJC
7453d6299
<        EJC
7460d6305
<        EJC
7465c6310
<        ERB  038,GOTO UNDEFINED LABEL
---
>        ERB  044,GOTO UNDEFINED LABEL
7523d6367
<        EJC
7536d6379
<        EJC
7547d6389
<        EJC
7565d6406
<        EJC
7582d6422
<        EJC
7594c6434
< BCDC0  MOV  FLPTR,XS         POP GARBAGE OFF STACK
---
>        MOV  FLPTR,XS         POP GARBAGE OFF STACK
7597d6436
<        EJC
7599,7600d6437
< *      CDBLK (CONTINUED)
< *
7606c6443
< BCDS0  MOV  FLPTR,XS         POP GARBAGE OFF STACK
---
>        MOV  FLPTR,XS         POP GARBAGE OFF STACK
7609d6445
<        EJC
7616d6451
<        EJC
7617a6453,6458
> *      COBLK
> *
> *      THE ROUTINE FOR A COBLK IS NEVER EXECUTED
> *
> B$COP  ENT  BL$CO            ENTRY POINT (COBLK)
> *
7646a6488,6489
> .IF    .CNLD
> .ELSE
7657,7658d6499
< .IF    .CNLD
< .ELSE
7671,7676c6512
< .IF    .CNRA
<        BSW  XR,3             SWITCH ON TYPE
< .ELSE
<        BSW  XR,4             SWITCH ON TYPE
< .FI
<        IFF  0,BEFC7          NO CONVERSION NEEDED
---
>        BSW  XR,5,BEFC7       SWITCH ON EFTAR TYPE
7682a6519,6522
> .IF    .CNBF
> .ELSE
>        IFF  4,BEFCA          BUFFER
> .FI
7689c6529
<        ERR  039,EXTERNAL FUNCTION ARGUMENT IS NOT STRING
---
>        ERR  045,EXTERNAL FUNCTION ARGUMENT IS NOT STRING
7700c6540
<        ERR  040,EXTERNAL FUNCTION ARGUMENT IS NOT INTEGER
---
>        ERR  046,EXTERNAL FUNCTION ARGUMENT IS NOT INTEGER
7710,7711c6550
<        ERR  265,EXTERNAL FUNCTION ARGUMENT IS NOT REAL
< .FI
---
>        ERR  047,EXTERNAL FUNCTION ARGUMENT IS NOT REAL
7714a6554,6570
> .FI
> .IF    .CNBF
> .ELSE
>        BRN  BEFC5            MERGE
> *
> *      HERE TO CONVERT BUFFER
> *
> BEFCA  MOV  (XT),XR          LOAD ARGUMENT
>        MOV  WC,BEFOF         SAVE OFFSET
>        MOV  XL,-(XS)         SAVE EFBLK PTR
>        JSR  GTBUF            GET A BUFFER
>        ERR  259,EXTERNAL FUNCTION ARGUMENT IS NOT BUFFER
>        MOV  (XS)+,XL         RESTORE EFBLK PTR
> *
> *      INTEGER AND REAL CASE MERGES HERE
> *
> .FI
7739c6595
<        MOV  EFRSL(XL),WB     GET RESULT TYPE ID
---
>        MOV  EFRSL(XL),WB     GET RESULT TYPE
7764a6621
>        BEQ  WB,=NUM03,BEF10  YES JUMP
7765a6623,6627
> .IF    .CNBF
> .ELSE
>        MOV  =B$BCT,WA        BUFFER
>        BEQ  WB,=NUM04,BEF10  YES JUMP
> .FI
7780d6641
<        EJC
7811,7812c6672
< BFFC2  ERB  041,FIELD FUNCTION ARGUMENT IS WRONG DATATYPE
<        EJC
---
> BFFC2  ERB  048,FIELD FUNCTION ARGUMENT IS WRONG DATATYPE
7814,7815d6673
< *      FFBLK (CONTINUED)
< *
7851d6708
<        EJC
7858d6714
<        EJC
7871d6726
<        EJC
7924c6779
<        WTB  WA               CONVERT NO. OF ARGS TO BYTES OFFSET
---
>        WTB  WA               CONVERT NO. OF ARGS TO BAUS OFFSET
7989c6844
< *      HERE IF &PROFILE = 1
---
> *      HERE IF PROFILE = 1
7998c6853
< *       HERE IF &PROFILE = 2
---
> *      HERE IF PROFILE = 2
8007a6863
>        EJC
8008a6865,6866
> *      PFBLK (CONTINUED)
> *
8078c6936
<        WTB  WB               CONVERT TO BYTE OFFSET
---
>        WTB  WB               CONVERT TO BAU OFFSET
8095,8096c6953
<        JSR  PRTCH            PRINT TO TERMINATE OUTPUT
<        JSR  PRTNL            TERMINATE PRINT LINE
---
>        JSR  PRTCF            PRINT TO TERMINATE OUTPUT
8122d6978
<        EJC
8133d6988
<        EJC
8140d6994
<        EJC
8147d7000
<        EJC
8176d7028
<        EJC
8178,8179d7029
< *      VRBLK (CONTINUED)
< *
8185,8186c7035
<        ERB  042,ATTEMPT TO CHANGE VALUE OF PROTECTED VARIABLE
<        EJC
---
>        ERB  049,ATTEMPT TO CHANGE VALUE OF PROTECTED VARIABLE
8188,8189d7036
< *      VRBLK (CONTINUED)
< *
8199d7045
<        EJC
8201,8202d7046
< *      VRBLK (CONTINUED)
< *
8223d7066
<        EJC
8225,8226d7067
< *      VRBLK (CONTINUED)
< *
8252,8253c7093
<        JSR  PRTCH            PRINT IT
<        JSR  PRTNL            TERMINATE LINE
---
>        JSR  PRTCF            PRINT IT
8286d7125
<        EJC
8593a7433,7434
> .IF    .CNFN
> .ELSE
8596,8597d7436
< *      COMPOUNT PATTERN STRUCTURES (CONTINUED)
< *
8627c7466,7467
< *      STACK BACK PAST THE INNTER STACK BASE CREATED BY P$FNA
---
> *      STACK BACK PAST THE INNER STACK BASE CREATED BY P$FNA
> .FI
8734d7573
<        EJC
8743d7581
<        EJC
8767d7604
<        EJC
8784d7620
<        EJC
8809d7644
<        EJC
8811a7647
> *      EXPRESSION ARGUMENT CASE MERGES
8817,8820c7653
< *
< *      EXPRESSION ARGUMENT CASE MERGES HERE
< *
< PANY1  BEQ  WB,PMSSL,FAILP   FAIL IF NO CHARACTERS LEFT
---
>        BEQ  WB,PMSSL,FAILP   FAIL IF NO CHARACTERS LEFT
8825c7658
<        WTB  WA               CHANGE TO BYTE OFFSET
---
>        WTB  WA               CHANGE TO BAU OFFSET
8832d7664
<        EJC
8838a7671
>        MOV  =P$ANY,WA        PCODE FOR NEW NODE
8840c7673
<        ERR  043,ANY EVALUATED ARGUMENT IS NOT STRING
---
>        ERR  050,ANY EVALUATED ARGUMENT IS NOT STRING
8842c7675
<        PPM  PANY1            MERGE MULTI-CHAR CASE IF OK
---
>        BRI  XL               MERGE MULTI-CHAR CASE IF OK
8859d7691
<        EJC
8922a7755
>        MOV  =P$BRK,WA        PCODE FOR NEW NODE
8924c7757
<        ERR  044,BREAK EVALUATED ARGUMENT IS NOT STRING
---
>        ERR  051,BREAK EVALUATED ARGUMENT IS NOT STRING
8926,8927c7759
<        PPM  PBRK1            MERGE WITH MULTI-CHAR CASE IF OK
<        EJC
---
>        BRI  XL               MERGE WITH MULTI-CHAR CASE IF OK
8950a7783
> *      EXPRESSION ARGUMENT CASE MERGES
8956,8959c7789
< *
< *      EXPRESSION ARGUMENT MERGES HERE
< *
< PBRK1  MOV  PMSSL,WC         LOAD SUBJECT STRING LENGTH
---
>        MOV  PMSSL,WC         LOAD SUBJECT STRING LENGTH
8971c7801
<        WTB  WA               CONVERT TO BYTE OFFSET
---
>        WTB  WA               CONVERT TO BAU OFFSET
8993d7822
<        EJC
9004a7834
>        MOV  =P$BRK,WA        PCODE FOR NEW NODE
9006c7836
<        ERR  045,BREAKX EVALUATED ARGUMENT IS NOT STRING
---
>        ERR  052,BREAKX EVALUATED ARGUMENT IS NOT STRING
9008,9009c7838
<        PPM  PBRK1            MERGE WITH BREAK IF ALL OK
<        EJC
---
>        BRI  XL               MERGE WITH BREAK IF ALL OK
9060c7889
<        ERR  046,EXPRESSION DOES NOT EVALUATE TO PATTERN
---
>        ERR  053,EXPRESSION DOES NOT EVALUATE TO PATTERN
9068c7897,7908
<        BRN  PSTR1            ELSE MERGE WITH STRING CIRCUIT
---
>        MOV  XR,PSAVE         SAVE NODE PTR
>        MOV  R$PMS,XR         LOAD SUBJECT STRING PTR
>        PLC  XR,WB            POINT TO CURRENT CHAR
>        ADD  SCLEN(XL),WB     COMPUTE NEW CURSOR POSITION
>        BGT  WB,PMSSL,FAILP   FAIL IF PAST END OF STRING
>        MOV  WB,PSAVC         SAVE UPDATED CURSOR
>        MOV  SCLEN(XL),WA     NUMBER OF CHARS TO COMPARE
>        PLC  XL               POINT TO TEST STRING CHARS
>        CMC  FAILP,FAILP      COMPARE, FAIL IF UNEQUAL
>        MOV  PSAVE,XR         IF ALL MATCHED, RESTORE NODE PTR
>        MOV  PSAVC,WB         RESTORE UPDATED CURSOR
>        BRN  SUCCP            AND SUCCEED
9093d7932
<        EJC
9102d7940
< *
9114c7952,7953
<        EJC
---
> .IF    .CNFN
> .ELSE
9128d7966
<        EJC
9137d7974
<        EJC
9155d7991
<        EJC
9163a8000
> .FI
9180d8016
<        EJC
9232d8067
<        EJC
9251,9254c8086
< *
< *      EXPRESSION ARGUMENT CASE MERGES HERE
< *
< PLEN1  ADD  PARM1(XR),WB     PUSH CURSOR INDICATED AMOUNT
---
>        ADD  PARM1(XR),WB     PUSH CURSOR INDICATED AMOUNT
9257d8088
<        EJC
9265,9266c8096,8097
<        ERR  047,LEN EVALUATED ARGUMENT IS NOT INTEGER
<        ERR  048,LEN EVALUATED ARGUMENT IS NEGATIVE OR TOO LARGE
---
>        ERR  054,LEN EVALUATED ARGUMENT IS NOT INTEGER
>        ERR  055,LEN EVALUATED ARGUMENT IS NEGATIVE OR TOO LARGE
9268c8099,8101
<        PPM  PLEN1            MERGE WITH NORMAL CIRCUIT IF OK
---
>        ADD  PARM1(XR),WB     PUSH CURSOR INDICATED AMOUNT
>        BLE  WB,PMSSL,SUCCP   SUCCEED IF NOT OFF END
>        BRN  FAILP            ELSE FAIL
9275a8109
>        MOV  =P$NAY,WA        PCODE FOR NEW NODE
9277c8111
<        ERR  049,NOTANY EVALUATED ARGUMENT IS NOT STRING
---
>        ERR  056,NOTANY EVALUATED ARGUMENT IS NOT STRING
9279c8113
<        PPM  PNAY1            MERGE WITH MULTI-CHAR CASE IF OK
---
>        BRI  XL               MERGE WITH MULTI-CHAR CASE IF OK
9296a8131
> *      EXPRESSION ARGUMENT CASE MERGES
9302,9305c8137
< *
< *      EXPRESSION ARGUMENT CASE MERGES HERE
< *
< PNAY1  BEQ  WB,PMSSL,FAILP   FAIL IF NO CHARACTERS LEFT
---
>        BEQ  WB,PMSSL,FAILP   FAIL IF NO CHARACTERS LEFT
9309c8141
<        WTB  WA               CONVERT TO BYTE OFFSET
---
>        WTB  WA               CONVERT TO BAU OFFSET
9405a8238
>        ZER  R$PMB            CLEAR POSSIBLE BCBLK PTR FOR GBCOL
9418a8252
>        MOV  XL,-(XS)         STACK SUBJECT STRING POINTER
9422c8256
< .FI
---
>        ZER  R$PMB            CLEAR BCBLK PTR FOR GBCOL
9426a8261
> .FI
9435,9438c8270
< *
< *      EXPRESSION ARGUMENT CASE MERGES HERE
< *
< PPOS1  BEQ  WB,PARM1(XR),SUCCP SUCCEED IF AT RIGHT LOCATION
---
>        BEQ  WB,PARM1(XR),SUCCP SUCCEED IF AT RIGHT LOCATION
9440d8271
<        EJC
9448,9449c8279,8280
<        ERR  050,POS EVALUATED ARGUMENT IS NOT INTEGER
<        ERR  051,POS EVALUATED ARGUMENT IS NEGATIVE OR TOO LARGE
---
>        ERR  057,POS EVALUATED ARGUMENT IS NOT INTEGER
>        ERR  058,POS EVALUATED ARGUMENT IS NEGATIVE OR TOO LARGE
9451c8282,8283
<        PPM  PPOS1            MERGE WITH NORMAL CASE IF OK
---
>        BEQ  WB,PARM1(XR),SUCCP SUCCEED IF AT RIGHT LOCATION
>        BRN  FAILP            ELSE FAIL
9465d8296
<        EJC
9476d8306
<        EJC
9493d8322
<        EJC
9513d8341
<        EJC
9521,9522c8349,8350
<        ERR  052,RPOS EVALUATED ARGUMENT IS NOT INTEGER
<        ERR  053,RPOS EVALUATED ARGUMENT IS NEGATIVE OR TOO LARGE
---
>        ERR  059,RPOS EVALUATED ARGUMENT IS NOT INTEGER
>        ERR  060,RPOS EVALUATED ARGUMENT IS NEGATIVE OR TOO LARGE
9524,9525c8352,8353
<        PPM  PRPS1            MERGE WITH NORMAL CASE IF OK
<        EJC
---
>        MOV  =P$RPS,XL        CONTINUATION ROUTINE
>        BRI  XL               ENTER ROUTINE
9527a8356
> *      EXPRESSION ARGUMENT CASE MERGES
9532,9535c8361
< *
< *      EXPRESSION ARGUMENT CASE MERGES HERE
< *
< PRPS1  MOV  PMSSL,WC         GET LENGTH OF STRING
---
>        MOV  PMSSL,WC         GET LENGTH OF STRING
9541a8368
> *      EXPRESSION ARGUMENT CASE MERGES
9546,9549c8373
< *
< *      EXPRESSION ARGUMENT CASE MERGES HERE
< *
< PRTB1  MOV  WB,WC            SAVE INITIAL CURSOR
---
>        MOV  WB,WC            SAVE INITIAL CURSOR
9555d8378
<        EJC
9563,9564c8386,8387
<        ERR  054,RTAB EVALUATED ARGUMENT IS NOT INTEGER
<        ERR  055,RTAB EVALUATED ARGUMENT IS NEGATIVE OR TOO LARGE
---
>        ERR  061,RTAB EVALUATED ARGUMENT IS NOT INTEGER
>        ERR  062,RTAB EVALUATED ARGUMENT IS NEGATIVE OR TOO LARGE
9566c8389,8390
<        PPM  PRTB1            MERGE WITH NORMAL CASE IF SUCCESS
---
>        MOV  =P$RTB,XL        CONTINUATION ROUTINE
>        BRI  XL               ENTER ROUTINE
9573a8398
>        MOV  =P$SPN,WA        PCODE FOR NEW NODE
9575c8400
<        ERR  056,SPAN EVALUATED ARGUMENT IS NOT STRING
---
>        ERR  063,SPAN EVALUATED ARGUMENT IS NOT STRING
9577,9578c8402
<        PPM  PSPN1            MERGE WITH MULTI-CHAR CASE IF OK
<        EJC
---
>        BRI  XL               MERGE WITH MULTI-CHAR CASE IF OK
9580a8405
> *      EXPRESSION ARGUMENT CASE MERGES
9586,9589c8411
< *
< *      EXPRESSION ARGUMENT CASE MERGES HERE
< *
< PSPN1  MOV  PMSSL,WC         COPY SUBJECT STRING LENGTH
---
>        MOV  PMSSL,WC         COPY SUBJECT STRING LENGTH
9601c8423
<        WTB  WA               CONVERT TO BYTE OFFSET
---
>        WTB  WA               CONVERT TO BAU OFFSET
9641d8462
<        EJC
9643c8464
< *      MULTI-CHARACTER STRING
---
> *      MULTI-CHARACTER STRING (MERGE FROM P$EXA)
9652,9655c8473
< *
< *      MERGE HERE AFTER EVALUATING EXPRESSION WITH STRING VALUE
< *
< PSTR1  MOV  XR,PSAVE         SAVE NODE POINTER
---
>        MOV  XR,PSAVE         SAVE NODE POINTER
9682a8501
> *      EXPRESSION CASE MERGES
9687,9690c8506
< *
< *      EXPRESSION ARGUMENT CASE MERGES HERE
< *
< PTAB1  BGT  WB,PARM1(XR),FAILP FAIL IF TOO FAR ALREADY
---
>        BGT  WB,PARM1(XR),FAILP FAIL IF TOO FAR ALREADY
9694d8509
<        EJC
9702,9703c8517,8518
<        ERR  057,TAB EVALUATED ARGUMENT IS NOT INTEGER
<        ERR  058,TAB EVALUATED ARGUMENT IS NEGATIVE OR TOO LARGE
---
>        ERR  064,TAB EVALUATED ARGUMENT IS NOT INTEGER
>        ERR  065,TAB EVALUATED ARGUMENT IS NEGATIVE OR TOO LARGE
9705,9706c8520,8521
<        PPM  PTAB1            MERGE WITH NORMAL CASE IF OK
<        EJC
---
>        MOV  =P$TAB,XL        CONTINUATION ROUTINE
>        BRI  XL               ENTER ROUTINE
9721d8535
<        EJC
9764c8578
<        ERR  059,ANY ARGUMENT IS NOT STRING OR EXPRESSION
---
>        ERR  066,ANY ARGUMENT IS NOT STRING OR EXPRESSION
9766d8579
<        EJC
9768a8582
>        EJC
9776c8590
<        ERB  275,APPEND FIRST ARGUMENT IS NOT BUFFER
---
>        ERB  067,APPEND FIRST ARGUMENT IS NOT BUFFER
9780,9781c8594,8597
< SAPN1  JSR  APNDB            DO THE APPEND
<        ERR  276,APPEND SECOND ARGUMENT IS NOT STRING
---
> SAPN1  MOV  BCLEN(XR),WA     OFFSET TO BUFFER END
>        ZER  WB               NO CHARS TO BE REPLACED
>        JSR  INSBF            DO THE APPEND
>        ERR  068,APPEND SECOND ARGUMENT IS NOT STRING
9784d8599
<        EJC
9785a8601
>        EJC
9796c8612
<        WTB  WB               CONVERT TO BYTES
---
>        WTB  WB               CONVERT TO BAUS
9819c8635
< SAPP3  ERB  060,APPLY FIRST ARG IS NOT NATURAL VARIABLE NAME
---
> SAPP3  ERB  069,APPLY FIRST ARG IS NOT NATURAL VARIABLE NAME
9841c8657
<        ERR  061,ARBNO ARGUMENT IS NOT PATTERN
---
>        ERR  070,ARBNO ARGUMENT IS NOT PATTERN
9857c8673
<        ERR  062,ARG SECOND ARGUMENT IS NOT INTEGER
---
>        ERR  253,ARG SECOND ARGUMENT IS NOT INTEGER
9874c8690
< SARG1  ERB  063,ARG FIRST ARGUMENT IS NOT PROGRAM FUNCTION NAME
---
> SARG1  ERB  252,ARG FIRST ARGUMENT IS NOT PROGRAM FUNCTION NAME
9892c8708
<        WTB  WA               CONVERT LENGTH TO BYTES
---
>        WTB  WA               CONVERT LENGTH TO BAUS
9914c8730
<        ERR  064,ARRAY FIRST ARGUMENT IS NOT INTEGER OR STRING
---
>        ERR  071,ARRAY FIRST ARGUMENT IS NOT INTEGER OR STRING
9938c8754
<        ERR  065,ARRAY FIRST ARGUMENT LOWER BOUND IS NOT INTEGER
---
>        ERR  072,ARRAY FIRST ARGUMENT LOWER BOUND IS NOT INTEGER
9950,9951c8766,8772
< SAR04  JSR  GTINT            CONVERT HIGH BOUND TO INTEGER
<        ERR  066,ARRAY FIRST ARGUMENT UPPER BOUND IS NOT INTEGER
---
> SAR04  BNZ  WA,SAR4A         SKIP IF DELIMITER 1 OR 2
>        BNZ  XSCNB,SAR10      JUMP IF ILLEGALLY PLACED BLANK
> *
> *      CHECK FOR INTEGER BOUND
> *
> SAR4A  JSR  GTINT            CONVERT HIGH BOUND TO INTEGER
>        ERR  073,ARRAY FIRST ARGUMENT UPPER BOUND IS NOT INTEGER
9989c8810
<        WTB  WB               ELSE CONVERT TO LENGTH IN BYTES
---
>        WTB  WB               ELSE CONVERT TO LENGTH IN BAUS
10007c8828
<        MOV  WA,WC            SAVE LENGTH IN BYTES
---
>        MOV  WA,WC            SAVE LENGTH IN BAUS
10024c8845
<        MOV  WC,ARLEN(XR)     STORE LENGTH IN BYTES
---
>        MOV  WC,ARLEN(XR)     STORE LENGTH IN BAUS
10044c8865
< SAR10  ERB  067,ARRAY DIMENSION IS ZERO,NEGATIVE OR OUT OF RANGE
---
> SAR10  ERB  074,BAD DIMENSION, ZERO, NEGATIVE OR OUT OF RANGE
10048c8869
< SAR11  ERB  068,ARRAY SIZE EXCEEDS MAXIMUM PERMITTED
---
> SAR11  ERB  075,ARRAY SIZE EXCEEDS MAXIMUM PERMITTED
10050,10051d8870
< .IF    .CNBF
< .ELSE
10053,10078d8871
< *      BUFFER
< *
< S$BUF  ENT                   ENTRY POINT
<        MOV  (XS)+,XL         GET INITIAL VALUE
<        MOV  (XS)+,XR         GET REQUESTED ALLOCATION
<        JSR  GTINT            CONVERT TO INTEGER
<        ERR  269,BUFFER FIRST ARGUMENT IS NOT INTEGER
<        LDI  ICVAL(XR)        GET VALUE
<        ILE  SBF01            BRANCH IF NEGATIVE OR ZERO
<        MFI  WA,SBF02         MOVE WITH OVERFLOW CHECK
<        JSR  ALOBF            ALLOCATE THE BUFFER
<        JSR  APNDB            COPY IT IN
<        ERR  270,BUFFER SECOND ARGUMENT IS NOT STRING OR BUFFER
<        ERR  271,BUFFER INITIAL VALUE TOO BIG FOR ALLOCATION
<        BRN  EXSID            EXIT SETTING IDVAL
< *
< *      HERE FOR INVALID ALLOCATION SIZE
< *
< SBF01  ERB  272,BUFFER FIRST ARGUMENT IS NOT POSITIVE
< *
< *      HERE FOR ALLOCATION SIZE INTEGER OVERFLOW
< *
< SBF02  ERB  273,BUFFER SIZE IS TOO BIG
<        EJC
< .FI
< *
10086c8879
<        ERR  069,BREAK ARGUMENT IS NOT STRING OR EXPRESSION
---
>        ERR  076,BREAK ARGUMENT IS NOT STRING OR EXPRESSION
10100c8893
<        ERR  070,BREAKX ARGUMENT IS NOT STRING OR EXPRESSION
---
>        ERR  077,BREAKX ARGUMENT IS NOT STRING OR EXPRESSION
10113a8907,8908
> .IF    .CNBF
> .ELSE
10116c8911
< *      CHAR
---
> *      BUFFER
10118,10130c8913,8923
< S$CHR  ENT                   ENTRY POINT
<        JSR  GTSMI            CONVERT ARG TO INTEGER
<        ERR  281,CHAR ARGUMENT NOT INTEGER
<        PPM  SCHR1            TOO BIG ERROR EXIT
<        BGE  WC,=CFP$A,SCHR1  SEE IF OUT OF RANGE OF HOST SET
<        MOV  =NUM01,WA        IF NOT SET SCBLK ALLOCATION
<        MOV  WC,WB            SAVE CHAR CODE
<        JSR  ALOCS            ALLOCATE 1 BAU SCBLK
<        MOV  XR,XL            COPY SCBLK POINTER
<        PSC  XL               GET SET TO STUFF CHAR
<        SCH  WB,(XL)+         STUFF IT
<        ZER  XL               CLEAR SLOP IN XL
<        BRN  EXIXR            EXIT WITH SCBLK POINTER
---
> S$BUF  ENT                   ENTRY POINT
>        MOV  (XS)+,XL         GET INITIAL STRING
>        JSR  GTSMI            CONVERT MEMORY REQUEST TO INTEGER
>        ERR  078,BUFFER FIRST ARGUMENT IS NOT INTEGER
>        PPM  SBF01            FAIL IF OUT OF RANGE
>        MOV  WC,WA            MOVE LENGTH TO CORRECT REGISTER
>        JSR  ALOBF            ALLOCATE THE BUFFER
>        JSR  INSBF            COPY INITIAL ARG IN
>        ERR  079,BUFFER SECOND ARGUMENT IS NOT STRING OR BUFFER
>        ERR  080,BUFFER INITIAL VALUE TOO BIG FOR ALLOCATION
>        BRN  EXSID            EXIT SETTING IDVAL
10132c8925
< *      HERE IF CHAR ARGUMENT IS OUT OF RANGE
---
> *      HERE FOR INVALID ALLOCATION SIZE
10134c8927,8928
< SCHR1  ERB  282,CHAR ARGUMENT NOT IN RANGE
---
> SBF01  ERB  081,BUFFER FIRST ARGUMENT IS OUT OF RANGE
> .FI
10141c8935
<        ERR  071,CLEAR ARGUMENT IS NOT STRING
---
>        ERR  082,CLEAR ARGUMENT IS NOT STRING
10145c8939
< *      THE LIST ARE FALGGED BY SETTING VRGET OF VRBLK TO ZERO.
---
> *      THE LIST ARE FLAGGED BY SETTING VRGET OF VRBLK TO ZERO.
10151c8945
<        ERR  072,CLEAR ARGUMENT HAS NULL VARIABLE NAME
---
>        PPM  SCLR7            ERRONEOUS NAME
10153a8948
>        BNZ  XSCNB,SCLR7      BADLY PLACED BLANK
10181c8976
< *      PRROTECTED VARIABLES (ARB, ETC) ARE EXEMPT
---
> *      PROTECTED VARIABLES (ARB ETC) ARE EXEMPT
10183,10184c8978,8979
< SCLR5  BEQ  VRSTO(XR),=B$VRE,SCLR4 CHECK FOR PROTECTED VARIABLE (REG05)
<        MOV  XR,XL            COPY VRBLK POINTER (REG05)
---
> SCLR5  BEQ  VRSTO(XR),=B$VRE,SCLR4 CHECK FOR PROTECTED VARIABLE
>        MOV  XR,XL            COPY VRBLK POINTER
10196a8992,8995
> *
> *      ERROR POINT
> *
> SCLR7  ERB  083,NULL VARIABLE NAME OR ILLEGAL BLANK IN CLEAR ARG
10213c9012
<        ERR  073,COLLECT ARGUMENT IS NOT INTEGER
---
>        ERR  084,COLLECT ARGUMENT IS NOT INTEGER
10220c9019
<        BTW  WA               CONVERT BYTES TO WORDS
---
>        BTW  WA               CONVERT BAUS TO WORDS
10231c9030
< S$CNV  ENT                   ENTRY POINT
---
> S$CVT  ENT                   ENTRY POINT
10233,10235c9032,9036
<        ERR  074,CONVERT SECOND ARGUMENT IS NOT STRING
< .IF    .CULC
<        JSR  FLSTG            FOLD LOWER CASE TO UPPER CASE
---
>        ERR  085,CONVERT SECOND ARGUMENT IS NOT STRING
> .IF    .CASL
>        MOV  XR,XL            COPY STRING PTR TO XL
>        ZER  WB               ZERO OFFSET
>        JSR  SBSTG            CONVERT CASE OF ARG IF NECESSARY
10253c9054
<        MOV  WA,WC            SAVE LENGTH OF ARGUMENT STRING
---
>        MOV  SCLEN(XR),WC     SAVE LENGTH OF ARGUMENT STRING
10287c9088
<        IFF  CNVRT,SCV08      REAL
---
>        IFF  9,SCV08          REAL
10371c9172
<        WTB  WA               CONVERT LENGTH TO BYTES
---
>        WTB  WA               CONVERT LENGTH TO BAUS
10441,10442c9242
< SCV28  MOV  XR,-(XS)         STACK STRING FOR PROCEDURE
<        JSR  GTSTG            CONVERT TO STRING
---
> SCV28  JSR  GTBUF            CONVERT TO BUFFER
10444,10448d9243
<        MOV  XR,XL            SAVE STRING POINTER
<        JSR  ALOBF            ALLOCATE BUFFER OF SAME SIZE
<        JSR  APNDB            COPY IN THE STRING
<        PPM                   ALREADY STRING - CANT FAIL TO CNV
<        PPM                   MUST BE ENOUGH ROOM
10450d9244
<        EJC
10451a9246
>        EJC
10456c9251
<        JSR  COPYB            COPY THE BLOCK
---
>        JSR  CBLCK            COPY THE BLOCK
10458a9254,9270
> *
> *      CTI
> *
> S$CTI  ENT
>        LDI  INTV0            ZERO IN CASE NULL STRING
>        JSR  GTSTG            GET ARG AS A STRING
>        ERR  086,CTI ARGUMENT IS NOT A STRING
>        BZE  WA,SCT01         SKIP IF NULL
>        PLC  XR               PREPARE TO READ THE CHARACTER
>        LCH  WB,(XR)          GET THE CHARACTER
>        MTI  WB               CONVERT TO INTEGER
>        ZER  XR               CLEAR GARBAGE
> *
> *      MAKE ICBLK AND RETURN
> *
> SCT01  JSR  ICBLD            BUILD ICBLK
>        BRN  EXIXR            RETURN INTEGER RESULT
10465,10466c9277,9278
<        ERR  075,DATA ARGUMENT IS NOT STRING
<        ERR  076,DATA ARGUMENT IS NULL
---
>        ERR  087,DATA ARGUMENT IS NOT STRING
>        ERR  088,DATA ARGUMENT IS NULL
10474c9286
<        ERB  077,DATA ARGUMENT IS MISSING A LEFT PAREN
---
>        ERB  089,DATA ARGUMENT IS MISSING A LEFT PAREN
10478,10482d9289
< .IF    .CULC
< SDAT1  MOV  SCLEN(XR),WA     GET LENGTH
<        JSR  FLSTG            FOLD LOWER CASE TO UPPER CASE
<        MOV  XR,XL            SAVE NAME PTR
< .ELSE
10484d9290
< .FI
10493c9299
<        ERR  078,DATA ARGUMENT HAS NULL DATATYPE NAME
---
>        ERR  090,DATA ARGUMENT HAS NULL DATATYPE NAME
10504c9310
<        ERB  079,DATA ARGUMENT IS MISSING A RIGHT PAREN
---
>        ERB  091,BAD BLANK OR MISSING RIGHT PAREN IN DATA ARG
10509c9315
<        ERR  080,DATA ARGUMENT HAS NULL FIELD NAME
---
>        ERR  092,DATA ARGUMENT HAS NULL FIELD NAME
10521c9327
<        WTB  WA               CONVERT LENGTH TO BYTES
---
>        WTB  WA               CONVERT LENGTH TO BAUS
10608c9414
< S$DEF  ENT                   ENTRY POINT
---
> S$DFN  ENT                   ENTRY POINT
10619,10620c9425,9426
<        ERR  081,DEFINE FIRST ARGUMENT IS NOT STRING
<        ERR  082,DEFINE FIRST ARGUMENT IS NULL
---
>        ERR  093,DEFINE FIRST ARGUMENT IS NOT STRING
>        ERR  094,DEFINE FIRST ARGUMENT IS NULL
10625c9431
<        ERB  083,DEFINE FIRST ARGUMENT IS MISSING A LEFT PAREN
---
>        ERB  095,DEFINE FIRST ARGUMENT IS MISSING A LEFT PAREN
10630c9436
<        ERR  084,DEFINE FIRST ARGUMENT HAS NULL FUNCTION NAME
---
>        ERR  096,DEFINE FIRST ARGUMENT HAS NULL FUNCTION NAME
10642,10643c9448,9454
<        BNZ  WA,SDF04         SKIP IF DELIMITER FOUND
<        ERB  085,NULL ARG NAME OR MISSING ) IN DEFINE FIRST ARG.
---
>        BZE  WA,SDF14         FAIL IF RUNOUT
>        JSR  GTNVR            GET VRBLK POINTER
>        PPM  SDF04            IGNORE NULL NAME
>        MOV  XR,-(XS)         STACK ARGUMENT VRBLK POINTER
>        ICV  WB               INCREMENT COUNTER
>        BEQ  WA,=NUM02,SDF03  LOOP BACK IF STOPPED BY A COMMA
>        BRN  SDF05            JUMP FOR RIGHT PAREN
10648c9459
< *      HERE AFTER SCANNING AN ARGUMENT NAME
---
> *      NULL ARG FOUND. CONTINUE IF STOPPED BY COMMA
10650,10651c9461
< SDF04  BNE  XR,=NULLS,SDF05  SKIP IF NON-NULL
<        BZE  WB,SDF06         IGNORE NULL IF CASE OF NO ARGUMENTS
---
> SDF04  BEQ  WA,=NUM02,SDF03  LOOP IF COMMA
10653,10660d9462
< *      HERE AFTER DEALING WITH THE CASE OF NO ARGUMENTS
< *
< SDF05  JSR  GTNVR            GET VRBLK POINTER
<        PPM  SDF03            LOOP BACK TO IGNORE NULL NAME
<        MOV  XR,-(XS)         STACK ARGUMENT VRBLK POINTER
<        ICV  WB               INCREMENT COUNTER
<        BEQ  WA,=NUM02,SDF03  LOOP BACK IF STOPPED BY A COMMA
< *
10663c9465
< SDF06  MOV  WB,DEFNA         SAVE NUMBER OF ARGUMENTS
---
> SDF05  MOV  WB,DEFNA         SAVE NUMBER OF ARGUMENTS
10668c9470
< SDF07  MOV  =CH$CM,WC        SET DELIMITER ONE = COMMA
---
> SDF06  MOV  =CH$CM,WC        SET DELIMITER ONE = COMMA
10671,10672c9473,9474
<        BNE  XR,=NULLS,SDF08  SKIP IF NON-NULL
<        BZE  WB,SDF09         IGNORE NULL IF CASE OF NO LOCALS
---
>        BNZ  WA,SDF07         SKIP IF COMMA FOUND
>        BNZ  XSCNB,SDF14      FAIL IF BAD BLANK, OK IF LAST LOC
10676,10677c9478,9479
< SDF08  JSR  GTNVR            GET VRBLK POINTER
<        PPM  SDF07            LOOP BACK TO IGNORE NULL NAME
---
> SDF07  JSR  GTNVR            GET VRBLK POINTER
>        PPM  SDF08            IGNORE NULL NAME
10680c9482,9487
<        BNZ  WA,SDF07         LOOP BACK IF STOPPED BY A COMMA
---
>        BNZ  WA,SDF06         LOOP BACK IF STOPPED BY A COMMA
>        BRN  SDF09            JUMP FOR END OF STRING
> *
> *      NULL LOCAL
> *
> SDF08  BNZ  WA,SDF06         LOOP IF COMMA AFTER NULL LOCAL
10691c9498
<        WTB  WA               CONVERT LENGTH TO BYTES
---
>        WTB  WA               CONVERT LENGTH TO BAUS
10734c9541,9545
< SDF13  ERB  086,DEFINE FUNCTION ENTRY POINT IS NOT DEFINED LABEL
---
> SDF13  ERB  097,DEFINE FUNCTION ENTRY POINT IS NOT DEFINED LABEL
> *
> *      ERRONEOUS ARG OR LOCAL
> *
> SDF14  ERB  098,BAD BLANK OR MISSING RIGHT PAREN IN DEFINE ARG
10742,10744c9553,9573
<        ERR  087,DETACH ARGUMENT IS NOT APPROPRIATE NAME
<        JSR  DTACH            DETACH I/O ASSOCIATION FROM NAME
<        BRN  EXNUL            RETURN NULL RESULT
---
>        ERR  099,DETACH ARGUMENT IS NOT APPROPRIATE NAME
>        MOV  WA,-(XS)         KEEP OFFSET
>        ZER  SDETF            CLEAR FAIL FLAG
>        MOV  =TRTIN,WB        TRACE TYPE
>        ZER  XR               REMOVE TRBLK
>        JSR  TRCHN            REMOVE ANY INPUT ASSOCIATION
>        PPM  SDET1            SKIP IF NO INPUT TRBLK
>        MNZ  SDETF            NOTE TRBLK REMOVED
> *
> *      REPEAT FOR OUTPUT TRBLK
> *
> SDET1  MOV  (XS)+,WA         RECOVER OFFSET
>        MOV  =TRTOU,WB        TRTYP
>        JSR  TRCHN            REMOVE ANY OUTPUT ASSOCIATION
>        PPM  SDET2            SKIP IF NO TRBLK
>        BRN  EXNUL            SUCCEED
> *
> *      CHECK AT LEAST ONE TRBLK REMOVED
> *
> SDET2  BNZ  SDETF,EXNUL      SUCCEED IF SO
>        BRN  EXFAL            ELSE FAIL
10761,10762c9590,9591
<        ERR  088,DUMP ARGUMENT IS NOT INTEGER
<        ERR  089,DUMP ARGUMENT IS NEGATIVE OR TOO LARGE
---
>        ERR  100,DUMP ARGUMENT IS NOT INTEGER
>        ERR  101,DUMP ARGUMENT IS NEGATIVE OR TOO LARGE
10771c9600
<        ERR  090,DUPL SECOND ARGUMENT IS NOT INTEGER
---
>        ERR  102,DUPL SECOND ARGUMENT IS NOT INTEGER
10816c9645
<        ERR  091,DUPL FIRST ARGUMENT IS NOT STRING OR PATTERN
---
>        ERR  103,DUPL FIRST ARGUMENT IS NOT STRING OR PATTERN
10848,10850c9677,9685
<        JSR  IOFCB            CALL FCBLK ROUTINE
<        ERR  092,EJECT ARGUMENT IS NOT A SUITABLE NAME
<        PPM  SEJC1            NULL ARGUMENT
---
>        MOV  (XS)+,WB         GET ARGUMENT
>        MOV  WB,-(XS)         RESTACK IT
>        JSR  GTSTG            CONVERT TO STRING
>        PPM  SEJC2            FAIL IF CANT
>        BZE  WA,SEJC1         SKIP IF NULL STRING
>        MOV  WB,-(XS)         RESTACK ORIGINAL ARG
>        JSR  IOFTG            CALL FILETAG ROUTINE
>        PPM  SEJC2            FAIL
>        BZE  WA,EXFAL         FAIL IF NOT ASSOCIATED
10852,10854c9687,9688
<        ERR  093,EJECT FILE DOES NOT EXIST
<        ERR  094,EJECT FILE DOES NOT PERMIT PAGE EJECT
<        ERR  095,EJECT CAUSED NON-RECOVERABLE OUTPUT ERROR
---
>        PPM  EXFAL            FAIL RETURN
>        PPM  EROSI            ERROR RETURN
10859a9694,9695
>        PPM  EXFAL            FAIL RETURN
>        PPM  EROSI            ERROR RETURN
10860a9697,9700
> *
> *      ERROR POINT
> *
> SEJC2  ERB  104,EJECT ARGUMENT IS NOT A SUITABLE FILETAG
10866,10873c9706,9709
<        JSR  IOFCB            CALL FCBLK ROUTINE
<        ERR  096,ENDFILE ARGUMENT IS NOT A SUITABLE NAME
<        ERR  097,ENDFILE ARGUMENT IS NULL
<        JSR  SYSEN            CALL ENDFILE ROUTINE
<        ERR  098,ENDFILE FILE DOES NOT EXIST
<        ERR  099,ENDFILE FILE DOES NOT PERMIT ENDFILE
<        ERR  100,ENDFILE CAUSED NON-RECOVERABLE OUTPUT ERROR
<        MOV  XL,WB            REMEMBER VRBLK PTR FROM IOFCB CALL
---
>        JSR  GTSTG            CONVERT SECOND ARG TO STRING
>        ERR  105,ENDFILE SECOND ARGUMENT IS NOT A STRING
>        BNZ  WA,SENF1         SKIP IF NON NULL SECOND ARG
>        ZER  XR               0 IF NULL
10875c9711
< *      LOOP TO FIND TRTRF BLOCK
---
> *      NOW PROCESS FILETAG
10877,10909c9713,9728
< SENF1  MOV  XL,XR            COPY POINTER
<        MOV  TRVAL(XR),XR     CHAIN ALONG
<        BNE  (XR),=B$TRT,EXNUL SKIP OUT IF CHAIN END
<        BNE  TRTYP(XR),=TRTFC,SENF1 LOOP IF NOT FOUND
<        MOV  TRVAL(XR),TRVAL(XL) REMOVE TRTRF
<        MOV  TRTRF(XR),ENFCH  POINT TO HEAD OF IOCHN
<        MOV  TRFPT(XR),WC     POINT TO FCBLK
<        MOV  WB,XR            FILEARG1 VRBLK FROM IOFCB
<        JSR  SETVR            RESET IT
<        MOV  =R$FCB,XL        PTR TO HEAD OF FCBLK CHAIN
<        SUB  *NUM02,XL        ADJUST READY TO ENTER LOOP
< *
< *      FIND FCBLK
< *
< SENF2  MOV  XL,XR            COPY PTR
<        MOV  2(XL),XL         GET NEXT LINK
<        BZE  XL,SENF4         STOP IF CHAIN END
<        BEQ  3(XL),WC,SENF3   JUMP IF FCBLK FOUND
<        BRN  SENF2            LOOP
< *
< *      REMOVE FCBLK
< *
< SENF3  MOV  2(XL),2(XR)      DELETE FCBLK FROM CHAIN
< *
< *      LOOP WHICH DETACHES ALL VBLS ON IOCHN CHAIN
< *
< SENF4  MOV  ENFCH,XL         GET CHAIN HEAD
<        BZE  XL,EXNUL         FINISHED IF CHAIN END
<        MOV  TRTRF(XL),ENFCH  CHAIN ALONG
<        MOV  IONMO(XL),WA     NAME OFFSET
<        MOV  IONMB(XL),XL     NAME BASE
<        JSR  DTACH            DETACH NAME
<        BRN  SENF4            LOOP TILL DONE
---
> SENF1  MOV  XR,SENFR         KEEP SECOND ARG
>        JSR  IOFTG            CALL FILETAG PROC (WB = VRBLK PTR)
>        ERR  106,ENDFILE FIRST ARGUMENT IS NOT A SUITABLE FILETAG
>        BZE  WA,EXFAL         FAIL IF NO IOTAG
>        MOV  SENFR,XR         RECOVER SECOND ARG
>        JSR  SYSEN            CALL ENDFILE ROUTINE
>        PPM  EXFAL            FAIL RETURN
>        PPM  EROSI            ERROR RETURN
>        BNZ  WA,EXNUL         RETURN NULL IF NO FILE CLOSURE
>        MOV  WB,XL            POINT TO FILETAG VRBLK
>        MOV  *VRVAL,WA        OFFSET TO VALUE FIELD
>        ZER  XR               FOR TRBLK REMOVAL
>        MOV  =TRTIO,WB        TRTYP
>        JSR  TRCHN            REMOVE TRBLK
>        PPM  EXFAL            (CANT FAIL HERE)
>        BRN  EXNUL            RETURN NULL
10916,10917c9735,9736
<        ERR  101,EQ FIRST ARGUMENT IS NOT NUMERIC
<        ERR  102,EQ SECOND ARGUMENT IS NOT NUMERIC
---
>        ERR  107,EQ FIRST ARGUMENT IS NOT NUMERIC
>        ERR  108,EQ SECOND ARGUMENT IS NOT NUMERIC
10928c9747
<        ERR  103,EVAL ARGUMENT IS NOT EXPRESSION
---
>        ERR  109,EVAL ARGUMENT IS NOT EXPRESSION
10963c9782
<        ERR  104,EXIT ARGUMENT IS NOT SUITABLE INTEGER OR STRING
---
>        ERR  110,EXIT ARGUMENT IS NOT SUITABLE INTEGER OR STRING
10969d9787
<        MOV  R$FCB,WB         GET FCBLK CHAIN HEADER
10973a9792
>        MOV  =KVCOD,WA        VALUE OF CODE KEYWORD
10975,10976c9794,9795
<        ERR  105,EXIT ACTION NOT AVAILABLE IN THIS IMPLEMENTATION
<        ERR  106,EXIT ACTION CAUSED IRRECOVERABLE ERROR
---
>        PPM  EXFAL            FAIL RETURN
>        PPM  EROSI            ERROR RETURN
10978c9797
<        ZER  GBCNT            RESUMING EXECUTION SO RESET
---
>        ZER  GBCNT            RESUMING EXECUTION SO.
10984c9803
< SEXT2  MFI  WC               GET VALUE IN WORK REG
---
> SEXT2  MFI  WC               GET VALUE IN WORK REGISTER
10989c9808
<        MOV  (XS)+,WC         RESTORE VALUE
---
>        MOV  (XS)+,WA         RESTORE VALUE
10991c9810
< *      DEAL WITH HEADER OPTION (FIDDLED BY PRPAR)
---
> *      DEAL WITH HEADER OPTIONS (FIDDLED BY PRPAR)
10999c9818
< SEXT4  JSR  SYSTM            GET EXECUTION TIME START (SGD11)
---
> SEXT4  JSR  SYSTM            GET RECOMMENCEMENT TIME
11004a9824,9825
> .IF    .CNFN
> .ELSE
11006a9828,9848
> *      FENCE
> *
> S$FNC  ENT                   ENTRY POINT
>        MOV  =P$FNC,WB        SET PCODE FOR P$FNC
>        ZER  XR               P0BLK
>        JSR  PBILD            BUILD P$FNC NODE
>        MOV  XR,XL            SAVE POINTER TO IT
>        MOV  (XS)+,XR         GET ARGUMENT
>        JSR  GTPAT            CONVERT TO PATTERN
>        ERR  180,FENCE ARGUMENT IS NOT PATTERN
>        JSR  PCONC            CONCATENATE TO P$FNC NODE
>        MOV  XR,XL            SAVE PTR TO CONCATENATED PATTERN
>        MOV  =P$FNA,WB        SET FOR P$FNA PCODE
>        ZER  XR               P0BLK
>        JSR  PBILD            CONSTRUCT P$FNA NODE
>        MOV  XL,PTHEN(XR)     SET PATTERN AS PTHEN
>        MOV  XR,-(XS)         SET AS RESULT
>        BRN  EXITS            DO NEXT CODE WORD
>        EJC
> .FI
> *
11011c9853
<        ERR  107,FIELD SECOND ARGUMENT IS NOT INTEGER
---
>        ERR  255,FIELD SECOND ARGUMENT IS NOT INTEGER
11031c9873
< SFLD1  ERB  108,FIELD FIRST ARGUMENT IS NOT DATATYPE NAME
---
> SFLD1  ERB  254,FIELD FIRST ARGUMENT IS NOT DATATYPE NAME
11034,11053d9875
< *      FENCE
< *
< S$FNC  ENT                   ENTRY POINT
<        MOV  =P$FNC,WB        SET PCODE FOR P$FNC
<        ZER  XR               P0BLK
<        JSR  PBILD            BUILD P$FNC NODE
<        MOV  XR,XL            SAVE POINTER TO IT
<        MOV  (XS)+,XR         GET ARGUMENT
<        JSR  GTPAT            CONVERT TO PATTERN
<        ERR  259,FENCE ARGUMENT IS NOT PATTERN
<        JSR  PCONC            CONCATENATE TO P$FNC NODE
<        MOV  XR,XL            SAVE PTR TO CONCATENATED PATTERN
<        MOV  =P$FNA,WB        SET FOR P$FNA PCODE
<        ZER  XR               P0BLK
<        JSR  PBILD            CONSTRUCT P$FNA NODE
<        MOV  XL,PTHEN(XR)     SET PATTERN AS PTHEN
<        MOV  XR,-(XS)         SET AS RESULT
<        BRN  EXITS            DO NEXT CODE WORD
<        EJC
< *
11058,11059c9880,9881
<        ERR  109,GE FIRST ARGUMENT IS NOT NUMERIC
<        ERR  110,GE SECOND ARGUMENT IS NOT NUMERIC
---
>        ERR  111,GE FIRST ARGUMENT IS NOT NUMERIC
>        ERR  112,GE SECOND ARGUMENT IS NOT NUMERIC
11063d9884
<        EJC
11069,11070c9890,9891
<        ERR  111,GT FIRST ARGUMENT IS NOT NUMERIC
<        ERR  112,GT SECOND ARGUMENT IS NOT NUMERIC
---
>        ERR  113,GT FIRST ARGUMENT IS NOT NUMERIC
>        ERR  114,GT SECOND ARGUMENT IS NOT NUMERIC
11079,11087c9900,9913
<        MOV  (XS)+,XR         GET THIRD ARG
<        MOV  (XS)+,XL         GET SECOND ARG
<        MOV  (XS)+,WA         GET FIRST ARG
<        JSR  SYSHS            ENTER SYSHS ROUTINE
<        ERR  254,ERRONEOUS ARGUMENT FOR HOST
<        ERR  255,ERROR DURING EXECUTION OF HOST
<        PPM  SHST1            STORE HOST STRING
<        PPM  EXNUL            RETURN NULL RESULT
<        PPM  EXIXR            RETURN XR
---
>        JSR  GTSTG            CONVERT ARG TO STRING
>        ERR  115,ERRONEOUS THIRD ARGUMENT FOR HOST
>        MOV  WA,WB            KEEP LENGTH
>        MOV  XR,WC            KEEP THIRD ARG
>        JSR  GTSTG            CONVERT ARG TO STRING
>        ERR  116,ERRONEOUS SECOND ARGUMENT FOR HOST
>        ORB  WA,WB            NON ZERO UNLESS TWO ARGS NULL
>        MOV  XR,XL            KEEP SECOND ARG
>        JSR  GTSTG            CONVERT ARG TO STRING
>        ERR  117,ERRONEOUS FIRST ARGUMENT FOR HOST
>        ORB  WA,WB            NON ZERO UNLESS ALL ARGS NULL
>        MOV  XR,WA            KEEP FIRST ARG
>        MOV  WC,XR            GET THIRD ARG
>        JSR  SYSHS            CALL SYSHS ROUTINE
11089,11093c9915,9916
< *
< *      RETURN HOST STRING
< *
< SHST1  BZE  XL,EXNUL         NULL STRING IF SYSHS UNCOOPERATIVE
<        MOV  SCLEN(XL),WA     LENGTH
---
>        PPM  EROSI            ERROR RETURN
>        MOV  SCLEN(XL),WA     LENGTH OF RETURNED STRING
11115,11120c9938,9941
<        ERR  113,INPUT THIRD ARGUMENT IS NOT A STRING
<        ERR  114,INAPPROPRIATE SECOND ARGUMENT FOR INPUT
<        ERR  115,INAPPROPRIATE FIRST ARGUMENT FOR INPUT
<        ERR  116,INAPPROPRIATE FILE SPECIFICATION FOR INPUT
<        PPM  EXFAL            FAIL IF FILE DOES NOT EXIST
<        ERR  117,INPUT FILE CANNOT BE READ
---
>        ERR  118,INPUT THIRD ARGUMENT (FILEPROPS) IS NOT A STRING
>        ERR  119,INAPPROPRIATE SECOND ARGUMENT (FILETAG) FOR INPUT
>        ERR  120,INAPPROPRIATE FIRST ARGUMENT FOR INPUT
>        PPM  EXFAL            FAIL RETURN
11122d9942
<        EJC
11124a9945
>        EJC
11131c9952
<        ERR  277,INSERT THIRD ARGUMENT NOT INTEGER
---
>        ERR  121,INSERT THIRD ARGUMENT NOT INTEGER
11135c9956
<        ERR  278,INSERT SECOND ARGUMENT NOT INTEGER
---
>        ERR  122,INSERT SECOND ARGUMENT NOT INTEGER
11142c9963
<        ERB  279,INSERT FIRST ARGUMENT NOT BUFFER
---
>        ERB  123,INSERT FIRST ARGUMENT NOT BUFFER
11147c9968
<        ERR  280,INSERT FOURTH ARGUMENT NOT A STRING
---
>        ERR  124,INSERT FOURTH ARGUMENT NOT A STRING
11150d9970
<        EJC
11151a9972
>        EJC
11162a9984,10000
> *      ITC
> *
> S$ITC  ENT
>        JSR  GTSMI            OBTAIN ARG AS AN INTEGER
>        ERR  125,ITC ARGUMENT IS NOT A SMALL INTEGER
>        PPM  EXFAL            FAIL IF OUT OF RANGE
>        BGE  WC,=CFP$A,EXFAL  FURTHER RANGE CHECK
>        MOV  WC,WB            PRESERVE WC
>        MOV  =NUM01,WA        FOR SCBLK REQUEST
>        JSR  ALOCS            BUILD STRING BLOCK
>        MOV  XR,XL            COPY STRING PTR
>        PSC  XL               READY TO STORE CHAR
>        SCH  WB,(XL)          STORE IT
>        ZER  XL               CLEAR GARBAGE
>        BRN  EXIXR            RETURN STRING RESULT
>        EJC
> *
11200,11201c10038,10039
<        ERR  118,LE FIRST ARGUMENT IS NOT NUMERIC
<        ERR  119,LE SECOND ARGUMENT IS NOT NUMERIC
---
>        ERR  126,LE FIRST ARGUMENT IS NOT NUMERIC
>        ERR  127,LE SECOND ARGUMENT IS NOT NUMERIC
11213,11214c10051,10052
<        ERR  120,LEN ARGUMENT IS NOT INTEGER OR EXPRESSION
<        ERR  121,LEN ARGUMENT IS NEGATIVE OR TOO LARGE
---
>        ERR  128,LEN ARGUMENT IS NOT INTEGER OR EXPRESSION
>        ERR  129,LEN ARGUMENT IS NEGATIVE OR TOO LARGE
11222,11223c10060,10061
<        ERR  122,LEQ FIRST ARGUMENT IS NOT STRING
<        ERR  123,LEQ SECOND ARGUMENT IS NOT STRING
---
>        ERR  130,LEQ FIRST ARGUMENT IS NOT STRING
>        ERR  131,LEQ SECOND ARGUMENT IS NOT STRING
11233,11234c10071,10072
<        ERR  124,LGE FIRST ARGUMENT IS NOT STRING
<        ERR  125,LGE SECOND ARGUMENT IS NOT STRING
---
>        ERR  132,LGE FIRST ARGUMENT IS NOT STRING
>        ERR  133,LGE SECOND ARGUMENT IS NOT STRING
11244,11245c10082,10083
<        ERR  126,LGT FIRST ARGUMENT IS NOT STRING
<        ERR  127,LGT SECOND ARGUMENT IS NOT STRING
---
>        ERR  134,LGT FIRST ARGUMENT IS NOT STRING
>        ERR  135,LGT SECOND ARGUMENT IS NOT STRING
11255,11256c10093,10094
<        ERR  128,LLE FIRST ARGUMENT IS NOT STRING
<        ERR  129,LLE SECOND ARGUMENT IS NOT STRING
---
>        ERR  136,LLE FIRST ARGUMENT IS NOT STRING
>        ERR  137,LLE SECOND ARGUMENT IS NOT STRING
11266,11267c10104,10105
<        ERR  130,LLT FIRST ARGUMENT IS NOT STRING
<        ERR  131,LLT SECOND ARGUMENT IS NOT STRING
---
>        ERR  138,LLT FIRST ARGUMENT IS NOT STRING
>        ERR  139,LLT SECOND ARGUMENT IS NOT STRING
11277,11278c10115,10116
<        ERR  132,LNE FIRST ARGUMENT IS NOT STRING
<        ERR  133,LNE SECOND ARGUMENT IS NOT STRING
---
>        ERR  140,LNE FIRST ARGUMENT IS NOT STRING
>        ERR  141,LNE SECOND ARGUMENT IS NOT STRING
11282,11309d10119
<        EJC
< *
< *      LOCAL
< *
< S$LOC  ENT                   ENTRY POINT
<        JSR  GTSMI            GET SECOND ARGUMENT (LOCAL NUMBER)
<        ERR  134,LOCAL SECOND ARGUMENT IS NOT INTEGER
<        PPM  EXFAL            FAIL IF OUT OF RANGE
<        MOV  XR,WB            SAVE LOCAL NUMBER
<        MOV  (XS)+,XR         LOAD FIRST ARGUMENT
<        JSR  GTNVR            POINT TO VRBLK
<        PPM  SLOC1            JUMP IF NOT VARIABLE NAME
<        MOV  VRFNC(XR),XR     ELSE LOAD FUNCTION POINTER
<        BNE  (XR),=B$PFC,SLOC1 JUMP IF NOT PROGRAM DEFINED
< *
< *      HERE IF WE HAVE A PROGRAM DEFINED FUNCTION NAME
< *
<        BZE  WB,EXFAL         FAIL IF SECOND ARG IS ZERO
<        BGT  WB,PFNLO(XR),EXFAL OR TOO LARGE
<        ADD  FARGS(XR),WB     ELSE ADJUST OFFSET TO INCLUDE ARGS
<        WTB  WB               CONVERT TO BYTES
<        ADD  WB,XR            POINT TO LOCAL POINTER
<        MOV  PFAGB(XR),XR     LOAD VRBLK POINTER
<        BRN  EXVNM            EXIT BUILDING NMBLK
< *
< *      HERE IF FIRST ARGUMENT IS NO GOOD
< *
< SLOC1  ERB  135,LOCAL FIRST ARG IS NOT A PROGRAM FUNCTION NAME
11318c10128
<        ERR  136,LOAD SECOND ARGUMENT IS NOT STRING
---
>        ERR  142,LOAD SECOND ARGUMENT IS NOT STRING
11321,11322c10131,10132
<        ERR  137,LOAD FIRST ARGUMENT IS NOT STRING
<        ERR  138,LOAD FIRST ARGUMENT IS NULL
---
>        ERR  143,LOAD FIRST ARGUMENT IS NOT STRING
>        ERR  144,LOAD FIRST ARGUMENT IS NULL
11329c10139
<        ERB  139,LOAD FIRST ARGUMENT IS MISSING A LEFT PAREN
---
>        ERB  145,LOAD FIRST ARGUMENT IS MISSING A LEFT PAREN
11334c10144
<        ERR  140,LOAD FIRST ARGUMENT HAS NULL FUNCTION NAME
---
>        ERR  146,LOAD FIRST ARGUMENT HAS NULL FUNCTION NAME
11345c10155
<        ERB  141,LOAD FIRST ARGUMENT IS MISSING A RIGHT PAREN
---
>        ERB  147,BAD BLANK OR MISSING RIGHT PAREN IN LOAD ARG
11355c10165
<        MOV  =NUM01,WB        SET STRING CODE IN CASE
---
>        MOV  =NUM01,WB        SET STRING CODE IN CASE (1)
11363a10174
>        ICV  WB               ELSE SET CODE FOR REAL (3)
11366,11367c10177
<        MOV  (XS),XR          ELSE RELOAD STRING POINTER
<        ICV  WB               SET CODE FOR REAL (3)
---
>        MOV  (XS),XR          RELOAD STRING POINTER
11371a10182,10189
>        ICV  WB               SET CODE FOR BUFFER (4)
> .IF    .CNBF
> .ELSE
>        MOV  (XS),XR          RELOAD STRING POINTER
>        MOV  =SCBUF,XL        POINT TO /BUFFER/
>        JSR  IDENT            CHECK FOR MATCH
>        PPM  SLOD4            JUMP IF MATCH
> .FI
11395c10213
<        WTB  WA               CONVERT LENGTH TO BYTES
---
>        WTB  WA               CONVERT LENGTH TO BAUS
11420,11421c10238,10239
<        ERR  142,LOAD FUNCTION DOES NOT EXIST
<        ERR  143,LOAD FUNCTION CAUSED INPUT ERROR DURING LOAD
---
>        PPM  EXFAL            FAIL RETURN
>        PPM  EROSI            ERROR RETURN
11429a10248,10275
> *      LOCAL
> *
> S$LOC  ENT                   ENTRY POINT
>        JSR  GTSMI            GET SECOND ARGUMENT (LOCAL NUMBER)
>        ERR  256,LOCAL SECOND ARGUMENT IS NOT INTEGER
>        PPM  EXFAL            FAIL IF OUT OF RANGE
>        MOV  XR,WB            SAVE LOCAL NUMBER
>        MOV  (XS)+,XR         LOAD FIRST ARGUMENT
>        JSR  GTNVR            POINT TO VRBLK
>        PPM  SLOC1            JUMP IF NOT VARIABLE NAME
>        MOV  VRFNC(XR),XR     ELSE LOAD FUNCTION POINTER
>        BNE  (XR),=B$PFC,SLOC1 JUMP IF NOT PROGRAM DEFINED
> *
> *      HERE IF WE HAVE A PROGRAM DEFINED FUNCTION NAME
> *
>        BZE  WB,EXFAL         FAIL IF SECOND ARG IS ZERO
>        BGT  WB,PFNLO(XR),EXFAL OR TOO LARGE
>        ADD  FARGS(XR),WB     ELSE ADJUST OFFSET TO INCLUDE ARGS
>        WTB  WB               CONVERT TO BYTES
>        ADD  WB,XR            POINT TO LOCAL POINTER
>        MOV  PFAGB(XR),XR     LOAD VRBLK POINTER
>        BRN  EXVNM            EXIT BUILDING NMBLK
> *
> *      HERE IF FIRST ARGUMENT IS NO GOOD
> *
> SLOC1  ERB  257,LOCAL FIRST ARG IS NOT A PROGRAM FUNCTION NAME
>        EJC
> *
11434c10280
<        ERR  144,LPAD THIRD ARGUMENT NOT A STRING
---
>        ERR  148,LPAD THIRD ARGUMENT NOT A STRING
11438c10284
<        ERR  145,LPAD SECOND ARGUMENT IS NOT INTEGER
---
>        ERR  149,LPAD SECOND ARGUMENT IS NOT INTEGER
11444c10290
<        ERR  146,LPAD FIRST ARGUMENT IS NOT STRING
---
>        ERR  150,LPAD FIRST ARGUMENT IS NOT STRING
11485,11486c10331,10332
<        ERR  147,LT FIRST ARGUMENT IS NOT NUMERIC
<        ERR  148,LT SECOND ARGUMENT IS NOT NUMERIC
---
>        ERR  151,LT FIRST ARGUMENT IS NOT NUMERIC
>        ERR  152,LT SECOND ARGUMENT IS NOT NUMERIC
11496,11497c10342,10343
<        ERR  149,NE FIRST ARGUMENT IS NOT NUMERIC
<        ERR  150,NE SECOND ARGUMENT IS NOT NUMERIC
---
>        ERR  153,NE FIRST ARGUMENT IS NOT NUMERIC
>        ERR  154,NE SECOND ARGUMENT IS NOT NUMERIC
11510c10356
<        ERR  151,NOTANY ARGUMENT IS NOT STRING OR EXPRESSION
---
>        ERR  155,NOTANY ARGUMENT IS NOT STRING OR EXPRESSION
11518,11519c10364,10365
<        ERR  152,OPSYN THIRD ARGUMENT IS NOT INTEGER
<        ERR  153,OPSYN THIRD ARGUMENT IS NEGATIVE OR TOO LARGE
---
>        ERR  156,OPSYN THIRD ARGUMENT IS NOT INTEGER
>        ERR  157,OPSYN THIRD ARGUMENT IS NEGATIVE OR TOO LARGE
11523c10369
<        ERR  154,OPSYN SECOND ARG IS NOT NATURAL VARIABLE NAME
---
>        ERR  158,OPSYN SECOND ARG IS NOT NATURAL VARIABLE NAME
11531c10377
<        ERR  155,OPSYN FIRST ARG IS NOT NATURAL VARIABLE NAME
---
>        ERR  159,OPSYN FIRST ARG IS NOT NATURAL VARIABLE NAME
11574c10420
< SOPS5  ERB  156,OPSYN FIRST ARG IS NOT CORRECT OPERATOR NAME
---
> SOPS5  ERB  160,OPSYN FIRST ARG IS NOT CORRECT OPERATOR NAME
11586c10432
<        MOV  =NUM03,WB        OUTPUT FLAG
---
>        MOV  =NUM02,WB        OUTPUT FLAG
11588,11593c10434,10437
<        ERR  157,OUTPUT THIRD ARGUMENT IS NOT A STRING
<        ERR  158,INAPPROPRIATE SECOND ARGUMENT FOR OUTPUT
<        ERR  159,INAPPROPRIATE FIRST ARGUMENT FOR OUTPUT
<        ERR  160,INAPPROPRIATE FILE SPECIFICATION FOR OUTPUT
<        PPM  EXFAL            FAIL IF FILE DOES NOT EXIST
<        ERR  161,OUTPUT FILE CANNOT BE WRITTEN TO
---
>        ERR  161,OUTPUT THIRD ARGUMENT (FILEPROPS) IS NOT A STRING
>        ERR  162,INAPPROPRIATE SECOND ARGUMENT (FILETAG) FOR OUTPUT
>        ERR  163,INAPPROPRIATE FIRST ARGUMENT FOR OUTPUT
>        PPM  EXFAL            FAIL RETURN
11603,11604c10447,10448
<        ERR  162,POS ARGUMENT IS NOT INTEGER OR EXPRESSION
<        ERR  163,POS ARGUMENT IS NEGATIVE OR TOO LARGE
---
>        ERR  164,POS ARGUMENT IS NOT INTEGER OR EXPRESSION
>        ERR  165,POS ARGUMENT IS NEGATIVE OR TOO LARGE
11617a10462,10463
> .IF    .CNBF
> .ELSE
11619c10465,10466
<        ERB  164,PROTOTYPE ARGUMENT IS NOT VALID OBJECT
---
> .FI
>        ERB  166,PROTOTYPE ARGUMENT IS NOT TABLE OR ARRAY
11657c10504
<        ERR  165,REMDR SECOND ARGUMENT IS NOT INTEGER
---
>        ERR  167,REMDR SECOND ARGUMENT IS NOT INTEGER
11668c10515
<        ERB  167,REMDR CAUSED INTEGER OVERFLOW
---
>        ERB  168,REMDR CAUSED INTEGER OVERFLOW
11672c10519
< SRM01  ERB  166,REMDR FIRST ARGUMENT IS NOT INTEGER
---
> SRM01  ERB  169,REMDR FIRST ARGUMENT IS NOT INTEGER
11684c10531
<        ERR  168,REPLACE THIRD ARGUMENT IS NOT STRING
---
>        ERR  170,REPLACE THIRD ARGUMENT IS NOT STRING
11687c10534
<        ERR  169,REPLACE SECOND ARGUMENT IS NOT STRING
---
>        ERR  171,REPLACE SECOND ARGUMENT IS NOT STRING
11749c10596
<        ERR  170,REPLACE FIRST ARGUMENT IS NOT STRING
---
>        ERR  172,REPLACE FIRST ARGUMENT IS NOT STRING
11768c10615
< SRPL5  ERB  171,NULL OR UNEQUALLY LONG 2ND, 3RD ARGS TO REPLACE
---
> SRPL5  ERB  173,NULL OR UNEQUALLY LONG 2ND, 3RD ARGS TO REPLACE
11771,11783d10617
< *      REWIND
< *
< S$REW  ENT                   ENTRY POINT
<        JSR  IOFCB            CALL FCBLK ROUTINE
<        ERR  172,REWIND ARGUMENT IS NOT A SUITABLE NAME
<        ERR  173,REWIND ARGUMENT IS NULL
<        JSR  SYSRW            CALL SYSTEM REWIND FUNCTION
<        ERR  174,REWIND FILE DOES NOT EXIST
<        ERR  175,REWIND FILE DOES NOT PERMIT REWIND
<        ERR  176,REWIND CAUSED NON-RECOVERABLE ERROR
<        BRN  EXNUL            EXIT WITH NULL RESULT IF NO ERROR
<        EJC
< *
11788c10622
<        ERR  177,REVERSE ARGUMENT IS NOT STRING
---
>        ERR  174,REVERSE ARGUMENT IS NOT STRING
11810c10644
<        ERR  178,RPAD THIRD ARGUMENT IS NOT STRING
---
>        ERR  175,RPAD THIRD ARGUMENT IS NOT STRING
11814c10648
<        ERR  179,RPAD SECOND ARGUMENT IS NOT INTEGER
---
>        ERR  176,RPAD SECOND ARGUMENT IS NOT INTEGER
11820c10654
<        ERR  180,RPAD FIRST ARGUMENT IS NOT STRING
---
>        ERR  177,RPAD FIRST ARGUMENT IS NOT STRING
11863,11864c10697,10698
<        ERR  181,RTAB ARGUMENT IS NOT INTEGER OR EXPRESSION
<        ERR  182,RTAB ARGUMENT IS NEGATIVE OR TOO LARGE
---
>        ERR  178,RTAB ARGUMENT IS NOT INTEGER OR EXPRESSION
>        ERR  179,RTAB ARGUMENT IS NEGATIVE OR TOO LARGE
11872c10706
<        MOV  (XS)+,R$IO2      SAVE THIRD ARG
---
>        MOV  (XS)+,R$IOL      SAVE THIRD ARG
11874,11876c10708,10710
<        JSR  IOFCB            CALL FCBLK ROUTINE
<        ERR  291,SET FIRST ARGUMENT IS NOT A SUITABLE NAME
<        ERR  292,SET FIRST ARGUMENT IS NULL
---
>        JSR  IOFTG            CALL IOTAG ROUTINE
>        ERR  180,SET FIRST ARGUMENT IS NOT A SUITABLE NAME
>        BZE  WA,EXFAL         FAIL IF NO IOTAG
11878c10712
<        MOV  R$IO2,WC         LOAD THIRD ARG
---
>        MOV  R$IOL,WC         LOAD THIRD ARG
11880,11885c10714,10716
<        ERR  293,INAPPROPRIATE SECOND ARGUMENT TO SET
<        ERR  294,INAPPROPRIATE THIRD ARGUMENT TO SET
<        ERR  295,SET FILE DOES NOT EXIST
<        ERR  296,SET FILE DOES NOT PERMIT SETTING FILE POINTER
<        ERR  297,SET CAUSED NON-RECOVERABLE I/O ERROR
<        BRN  EXNUL            OTHERWISEW RETURN NULL
---
>        PPM  EXFAL            FAILURE RETURN
>        PPM  EROSI            ERROR RETURN
>        BRN  EXNUL            OTHERWISE RETURN NULL
11889,11899d10719
< *      TAB
< *
< S$TAB  ENT                   ENTRY POINT
<        MOV  =P$TAB,WB        SET PCODE FOR INTEGER ARG CASE
<        MOV  =P$TBD,WA        SET PCODE FOR EXPRESSION ARG CASE
<        JSR  PATIN            CALL COMMON ROUTINE TO BUILD NODE
<        ERR  183,TAB ARGUMENT IS NOT INTEGER OR EXPRESSION
<        ERR  184,TAB ARGUMENT IS NEGATIVE OR TOO LARGE
<        BRN  EXIXR            RETURN PATTERN NODE
<        EJC
< *
11906,11907c10726,10727
<        ERR  185,RPOS ARGUMENT IS NOT INTEGER OR EXPRESSION
<        ERR  186,RPOS ARGUMENT IS NEGATIVE OR TOO LARGE
---
>        ERR  181,RPOS ARGUMENT IS NOT INTEGER OR EXPRESSION
>        ERR  182,RPOS ARGUMENT IS NEGATIVE OR TOO LARGE
11917a10738
>        PPM  EXFAL            FAIL EMPTY TABLE
11946c10767
< SSTX2  ERB  187,SETEXIT ARGUMENT IS NOT LABEL NAME OR NULL
---
> SSTX2  ERB  183,SETEXIT ARGUMENT IS NOT LABEL NAME OR NULL
11955a10777
>        PPM  EXFAL            FAIL EMPTY TABLE
11967c10789
<        ERR  188,SPAN ARGUMENT IS NOT STRING OR EXPRESSION
---
>        ERR  184,SPAN ARGUMENT IS NOT STRING OR EXPRESSION
11974a10797
>        JSR  GTSTG            LOAD STRING ARGUMENT
11981d10803
< .FI
11986c10808,10809
<        ERR  189,SIZE ARGUMENT IS NOT STRING
---
> .FI
>        ERR  185,SIZE ARGUMENT IS NOT STRING
11996,11997c10819,10821
<        ERR  190,STOPTR FIRST ARGUMENT IS NOT APPROPRIATE NAME
<        ERR  191,STOPTR SECOND ARGUMENT IS NOT TRACE TYPE
---
>        ERR  186,STOPTR FIRST ARGUMENT IS NOT APPROPRIATE NAME
>        ERR  187,STOPTR SECOND ARGUMENT IS NOT TRACE TYPE
>        PPM  EXFAL            FAIL RETURN
12005c10829
<        ERR  192,SUBSTR THIRD ARGUMENT IS NOT INTEGER
---
>        ERR  188,SUBSTR THIRD ARGUMENT IS NOT INTEGER
12009c10833
<        ERR  193,SUBSTR SECOND ARGUMENT IS NOT INTEGER
---
>        ERR  189,SUBSTR SECOND ARGUMENT IS NOT INTEGER
12014a10839
>        JSR  GTSTG            LOAD FIRST ARGUMENT
12024d10848
< .FI
12026c10850,10855
<        ERR  194,SUBSTR FIRST ARGUMENT IS NOT STRING
---
> .FI
>        ERR  190,SUBSTR FIRST ARGUMENT IS NOT STRING
>        MOV  XR,XL            COPY POINTER TO FIRST ARG
> .IF    .CNBF
>        MOV  SBSSV,WC         RELOAD THIRD ARGUMENT
> .ELSE
12028c10857
< *      MERGE WITH BFBLK OR SCBLK PTR IN XR.  WA HAS LENGTH
---
> *      MERGE WITH BFBLK OR SCBLK IN XR, LENGTH IN WA
12030a10860
> .FI
12032c10862
<        MOV  WA,WC            ELSE GET STRING LENGTH
---
>        MOV  SCLEN(XL),WC     ELSE GET STRING LENGTH
12038,12039c10868
< SSUB1  MOV  WA,XL            SAVE STRING LENGTH
<        MOV  WC,WA            SET LENGTH OF SUBSTRING
---
> SSUB1  MOV  WC,WA            SET LENGTH OF SUBSTRING
12041,12042c10870
<        BGT  WC,XL,EXFAL      JUMP IF IMPROPER SUBSTRING
<        MOV  XR,XL            COPY POINTER TO FIRST ARG
---
>        BGT  WC,SCLEN(XL),EXFAL JUMP IF IMPROPER SUBSTRING
12046a10875,10885
> *      TAB
> *
> S$TAB  ENT                   ENTRY POINT
>        MOV  =P$TAB,WB        SET PCODE FOR INTEGER ARG CASE
>        MOV  =P$TBD,WA        SET PCODE FOR EXPRESSION ARG CASE
>        JSR  PATIN            CALL COMMON ROUTINE TO BUILD NODE
>        ERR  191,TAB ARGUMENT IS NOT INTEGER OR EXPRESSION
>        ERR  192,TAB ARGUMENT IS NEGATIVE OR TOO LARGE
>        BRN  EXIXR            RETURN PATTERN NODE
>        EJC
> *
12053,12054c10892,10893
<        ERR  195,TABLE ARGUMENT IS NOT INTEGER
<        ERR  196,TABLE ARGUMENT IS OUT OF RANGE
---
>        ERR  193,TABLE ARGUMENT IS NOT INTEGER
>        ERR  194,TABLE ARGUMENT IS OUT OF RANGE
12062c10901
<        WTB  WA               CONVERT LENGTH TO BYTES
---
>        WTB  WA               CONVERT LENGTH TO BAUS
12101c10940
< STR01  ERB  197,TRACE FOURTH ARG IS NOT FUNCTION NAME OR NULL
---
> STR01  ERB  195,TRACE FOURTH ARG IS NOT FUNCTION NAME OR NULL
12110,12111c10949,10951
<        ERR  198,TRACE FIRST ARGUMENT IS NOT APPROPRIATE NAME
<        ERR  199,TRACE SECOND ARGUMENT IS NOT TRACE TYPE
---
>        ERR  196,TRACE FIRST ARGUMENT IS NOT APPROPRIATE NAME
>        ERR  197,TRACE SECOND ARGUMENT IS NOT TRACE TYPE
>        PPM                   UNUSED RETURN
12125c10965
<        ERR  200,TRIM ARGUMENT IS NOT STRING
---
>        ERR  198,TRIM ARGUMENT IS NOT STRING
12142c10982
<        ERR  201,UNLOAD ARGUMENT IS NOT NATURAL VARIABLE NAME
---
>        ERR  199,UNLOAD ARGUMENT IS NOT NATURAL VARIABLE NAME
12145a10986,10995
>        EJC
> *
> *      VDIFFER
> *
> S$VDF  ENT                   ENTRY POINT
>        MOV  (XS)+,XR         LOAD SECOND ARGUMENT
>        MOV  (XS),XL          LOAD FIRST ARGUMENT
>        JSR  IDENT            CALL IDENT COMPARISON ROUTINE
>        PPM  EXFAL            FAIL IF IDENT
>        BRN  EXITS            RETURN FIRST ARG IF DIFFER
12255c11105
<        MOV  TRFPT(XR),XL     GET FILE CTRL BLK PTR OR ZERO
---
>        MOV  TRTRI(XR),XL     GET TRTIO BLOCK PTR OR 0
12263c11113,11121
<        JSR  SYSRD            READ NEXT STANDARD INPUT IMAGE
---
>        BZE  TTINS,ACSA5      SKIP IF NOT TERML STD INPUT
>        JSR  SYSRI            READ FROM TERMINAL
>        PPM  ACS03            END FILE
>        PPM  EROSI            ERROR
>        BRN  ACS07            MERGE
> *
> *      GENUINE STD INPUT FILE
> *
> ACSA5  JSR  SYSRD            READ NEXT STANDARD INPUT IMAGE
12264a11123
>        PPM  EROSI            ERROR RETURN
12269c11128,11129
< ACS06  MOV  XL,WA            FCBLK PTR
---
> ACS06  MOV  TRTAG(XL),WA     OBTAIN IOTAG
>        BZE  WA,ACS03         FAIL IF ENDFILE DONE
12272c11132
<        MOV  XL,WA            FCBLK PTR
---
>        MOV  TRTAG(XL),WA     GET IOTAG
12275,12276c11135
<        PPM  ACS22            ERROR
<        PPM  ACS23            ERROR
---
>        PPM  ACS22            ERROR RETURN
12328c11187
<        MTI  KVABE(XR)        ELSE LOAD VALUE AS INTEGER
---
>        MTI  KVANC(XR)        ELSE LOAD VALUE AS INTEGER
12338a11198
>        WTB  XR               CONVERT TO OFFSET IN BAUS
12347c11207
<        BSW  XR,5             SWITCH ON KEYWORD NUMBER
---
>        BSW  XR,6             SWITCH ON KEYWORD NUMBER
12349a11210
>        IFF  K$$CD,ACS23      CODE
12385a11247
>        PPM  EROSI            ERROR RETURN
12388c11250
< *      ERROR RETURNS
---
> *      ERROR RETURN
12391c11253
<        ERB  202,INPUT FROM FILE CAUSED NON-RECOVERABLE ERROR
---
>        BRN  EROSI            GENERATE ERROR MESSAGE
12393,12394c11255,11258
< ACS23  MOV  XR,DNAMP         POP UNUSED SCBLK
<        ERB  203,INPUT FILE RECORD HAS INCORRECT FORMAT
---
> *      ACCESS CODE KEYWORD
> *
> ACS23  LDI  KVCOD            GET CODE VALUE
>        BRN  ACS13            EXIT
12480c11344
< *      (WA)                  LENGTH REQUIRED IN BYTES
---
> *      (WA)                  LENGTH REQUIRED IN BAUS
12514c11378
<        WTB  XR               CONVERT TO BAUS (SGD05)
---
>        WTB  XR               CONVERT TO BAUS
12520c11384
<        ERB  204,MEMORY OVERFLOW
---
>        ERB  200,MEMORY OVERFLOW
12528c11392
<        BTW  WB               CONVERT BYTES TO WORDS
---
>        BTW  WB               CONVERT BAUS TO WORDS
12539c11403
<        WTB  XR               CONVERT TO BAUS (SGD05)
---
>        WTB  XR               CONVERT TO BAUS
12561a11426,11427
> *      (WA)                  0 (INITIAL OFFSET TO BFBLK CHARS)
> *      (WB)                  0 (INITIAL BCLEN)
12563d11428
< *      (WA,WB)               DESTROYED
12580c11445,11446
<        ZER  BFCHR(XL)        CLEAR FIRST WORD (NULL PAD)
---
>        ZER  WB               CLEAR FOR RETURN
>        MOV  WB,BFCHR(XL)     CLEAR FIRST WORD (NULL PAD)
12581a11448
>        ZER  WA               CLEAR FOR RETURN
12586c11453
< ALB01  ERB  274,REQUESTED BUFFER ALLOCATION EXCEEDS MXLEN
---
> ALB01  ERB  201,REQUESTED BUFFER ALLOCATION EXCEEDS MAXLNGTH
12611c11478
<        CTB  WA,SCSI$         COMPUTE LENGTH OF SCBLK IN BYTES
---
>        CTB  WA,SCSI$         COMPUTE LENGTH OF SCBLK IN BAUS
12634c11501
< ALCS2  ERB  205,STRING LENGTH EXCEEDS VALUE OF MAXLNGTH KEYWORD
---
> ALCS2  ERB  202,STRING LENGTH EXCEEDS VALUE OF MAXLNGTH KEYWORD
12640c11507
< *      (WA)                  LENGTH REQUIRED IN BYTES
---
> *      (WA)                  LENGTH REQUIRED IN BAUS
12676,12677d11542
< .IF    .CNBF
< .ELSE
12679,12712d11543
< *      APNDB -- APPEND STRING TO BUFFER
< *
< *      THIS ROUTINE IS USED BY BUFFER HANDLING ROUTINES TO
< *      APPEND DATA TO AN EXISTING BFBLK.
< *
< *      (XR)                  EXISTING BCBLK TO BE APPENDED
< *      (XL)                  CONVERTABLE TO STRING
< *      JSR  APNDB            CALL TO APPEND TO BUFFER
< *      PPM  LOC              THREAD IF (XL) CANT BE CONVERTED
< *      PPM  LOC              IF NOT ENOUGH ROOM
< *      (WA,WB)               DESTROYED
< *
< *      IF MORE CHARACTERS ARE SPECIFIED THAN CAN BE INSERTED,
< *      THEN NO ACTION IS TAKEN AND THE SECOND RETURN IS TAKEN.
< *
< APNDB  PRC  E,2              ENTRY POINT
<        MOV  BCLEN(XR),WA     LOAD OFFSET TO INSERT
<        ZER  WB               REPLACE SECTION IS NULL
<        JSR  INSBF            CALL TO INSERT AT END
<        PPM  APN01            CONVERT ERROR
<        PPM  APN02            NO ROOM
<        EXI                   RETURN TO CALLER
< *
< *      HERE TO TAKE CONVERT FAILURE EXIT
< *
< APN01  EXI  1                RETURN TO CALLER ALTERNATE
< *
< *      HERE FOR NO FIT EXIT
< *
< APN02  EXI  2                ALTERNATE EXIT TO CALLER
<        ENP                   END PROCEDURE APNDB
<        EJC
< .FI
< *
12882c11713
< *      HERE FOR FAILURE DURING EXPRESSION EVALUATION
---
> *      HERE FOR FAILURE RETURNS
12885d11715
<        EXI  1                TAKE FAILURE EXIT
12886a11717,11718
> ASG3A  EXI  1                TAKE FAILURE EXIT
> *
12933c11765
<        MOV  TRVAL(WC),-(XS)  STACK VALUE TO OUTPUT (SGD01)
---
>        MOV  TRVAL(XR),-(XS)  STACK VALUE TO OUTPUT
12939c11771
< ASG11  MOV  TRFPT(XL),WA     FCBLK PTR
---
> ASG11  MOV  TRTRI(XL),WA     TRTIO BLK PTR
12943a11776,11779
>        MOV  WA,XL            COPY TRTIO BLOCK PTR TO XL
>        MOV  TRTAG(XL),WA     GET IOTAG
>        BZE  WA,ASG3A         FAIL IF ENDFILE DONE
>        MOV  SCLEN(XR),WC     STRING LENGTH
12945,12946c11781,11782
<        ERR  206,OUTPUT CAUSED FILE OVERFLOW
<        ERR  207,OUTPUT CAUSED NON-RECOVERABLE ERROR
---
>        PPM  ASG3A            FAIL RETURN
>        PPM  EROSI            ERROR RETURN
12954c11790
< *      HERE TO PRINT A STRING ON THE PRINTER
---
> *      HERE TO PRINT A STRING
12956,12958c11792,11793
< ASG13  JSR  PRTST            PRINT STRING VALUE
<        BEQ  TRTER(XL),=V$TER,ASG20 JUMP IF TERMINAL OUTPUT
<        JSR  PRTNL            END OF LINE
---
> ASG13  BEQ  TRTER(XL),=V$TER,ASG20 JUMP IF TERMINAL OUTPUT
>        JSR  PRTSF            PRINT STRING AND FLUSH BUFFER
12970c11805
<        ERR  208,KEYWORD VALUE ASSIGNED IS NOT INTEGER
---
>        ERR  203,KEYWORD VALUE ASSIGNED IS NOT INTEGER
12972a11808
>        BEQ  XL,=K$COD,ASG24  JUMP IF SPECIAL CASE OF CODE
12981c11817
<        ERB  209,KEYWORD IN ASSIGNMENT IS PROTECTED
---
>        ERB  204,KEYWORD IN ASSIGNMENT IS PROTECTED
12985c11821
< ASG15  MOV  WA,KVABE(XL)     STORE NEW VALUE
---
> ASG15  MOV  WA,KVANC(XL)     STORE NEW VALUE
12998a11835
>        EJC
12999a11837,11838
> *      ASIGN (CONTINUED)
> *
13006c11845
< ASG18  ERB  210,KEYWORD VALUE ASSIGNED IS NEGATIVE OR TOO LARGE
---
> ASG18  ERB  205,KEYWORD VALUE ASSIGNED IS NEGATIVE OR TOO LARGE
13012c11851
<        ERR  211,VALUE ASSIGNED TO KEYWORD ERRTEXT NOT A STRING
---
>        ERR  206,VALUE ASSIGNED TO KEYWORD ERRTEXT NOT A STRING
13018c11857,11858
< ASG20  JSR  PRTTR            PRINT
---
> ASG20  JSR  PTTST            PRINT STRING TO TERMINAL
>        JSR  PTTFH            FLUSH TERMINAL BUFFER
13020d11859
< *
13029c11868
<        ERB  268,INCONSISTENT VALUE ASSIGNED TO KEYWORD PROFILE
---
>        ERB  207,INCONSISTENT VALUE ASSIGNED TO KEYWORD PROFILE
13031c11870
< ASG22  MOV  WA,PFDMP          NOTE VALUE ON FIRST ASSIGNMENT
---
> ASG22  MOV  WA,PFDMP         NOTE VALUE ON FIRST ASSIGNMENT
13035a11875,11879
> *
> *      HERE FOR KEYWORD ASSIGNMENT TO CODE
> *
> ASG24  STI  KVCOD            STORE VALUE
>        EXI                   RETURN TO CALLER
13093c11937
< *      (WA)                  LENGTH OF BLOCK IN BYTES
---
> *      (WA)                  LENGTH OF BLOCK IN BAUS
13107,13111d11950
< .IF    .CNBF
< .ELSE
<        IFF  BL$BC,BLN04      BCBLK
<        IFF  BL$BF,BLN11      BFBLK
< .FI
13112a11952
>        IFF  BL$CO,BLN12      COBLK
13131a11972,11976
> .IF    .CNBF
> .ELSE
>        IFF  BL$BC,BLN04      BCBLK
>        IFF  BL$BF,BLN11      BFBLK
> .FI
13162c12007
< *      HERE FOR FOUR WORD BLOCKS (P2,TE,BC)
---
> *      HERE FOR FOUR WORD BLOCKS (P2,TE)
13202c12047
<        CTB  WA,SCSI$         CALCULATE LENGTH IN BYTES
---
>        CTB  WA,SCSI$         CALCULATE LENGTH IN BAUS
13209,13210c12054,12055
< BLN11  MOV  BFALC(XR),WA     GET ALLOCATION IN BYTES
<        CTB  WA,BFSI$         CALCULATE LENGTH IN BYTES
---
> BLN11  MOV  BFALC(XR),WA     GET ALLOCATION IN BAUS
>        CTB  WA,BFSI$         CALCULATE LENGTH IN BAUS
13212a12058,12062
> *
> *      HERE FOR COBLK
> *
> BLN12  MOV  *COSI$,WA        GET SIZE IN BAUS
>        EXI                   RETURN TO BLKLN CALLER
13216c12066
< *      COPYB -- COPY A BLOCK
---
> *      CBLCK -- COPY A BLOCK
13219c12069
< *      JSR  COPYB            CALL TO COPY BLOCK
---
> *      JSR  CBLCK            CALL TO COPY BLOCK
13226c12076
< COPYB  PRC  N,1              ENTRY POINT
---
> CBLCK  PRC  N,1              ENTRY POINT
13228c12078
<        BEQ  XR,=NULLS,COP10  RETURN ARGUMENT IF IT IS NULL
---
>        BEQ  XR,=NULLS,CBL10  RETURN ARGUMENT IF IT IS NULL
13237,13239c12087,12089
<        BEQ  WB,=B$TBT,COP05  JUMP IF TABLE
<        BEQ  WB,=B$VCT,COP01  JUMP IF VECTOR
<        BEQ  WB,=B$PDT,COP01  JUMP IF PROGRAM DEFINED
---
>        BEQ  WB,=B$TBT,CBL05  JUMP IF TABLE
>        BEQ  WB,=B$VCT,CBL01  JUMP IF VECTOR
>        BEQ  WB,=B$PDT,CBL01  JUMP IF PROGRAM DEFINED
13242c12092
<        BEQ  WB,=B$BCT,COP11  JUMP IF BUFFER
---
>        BEQ  WB,=B$BCT,CBL11  JUMP IF BUFFER
13244c12094
<        BNE  WB,=B$ART,COP10  RETURN COPY IF NOT ARRAY
---
>        BNE  WB,=B$ART,CBL10  RETURN COPY IF NOT ARRAY
13249c12099
<        BRN  COP02            JUMP TO MERGE
---
>        BRN  CBL02            JUMP TO MERGE
13253c12103
< COP01  ADD  *PDFLD,XR        POINT TO PDFLD = VCVLS
---
> CBL01  ADD  *PDFLD,XR        POINT TO PDFLD = VCVLS
13258c12108
< COP02  MOV  (XR),XL          LOAD NEXT POINTER
---
> CBL02  MOV  (XR),XL          LOAD NEXT POINTER
13262c12112
< COP03  BNE  (XL),=B$TRT,COP04 JUMP IF NOT TRAPPED
---
> CBL03  BNE  (XL),=B$TRT,CBL04 JUMP IF NOT TRAPPED
13264c12114
<        BRN  COP03            AND LOOP BACK
---
>        BRN  CBL03            AND LOOP BACK
13267c12117
< *      COPYB (CONTINUED)
---
> *      CBLCK (CONTINUED)
13271,13273c12121,12123
< COP04  MOV  XL,(XR)+         STORE REAL VALUE, BUMP POINTER
<        BNE  XR,DNAMP,COP02   LOOP BACK IF MORE TO GO
<        BRN  COP09            ELSE JUMP TO EXIT
---
> CBL04  MOV  XL,(XR)+         STORE REAL VALUE, BUMP POINTER
>        BNE  XR,DNAMP,CBL02   LOOP BACK IF MORE TO GO
>        BRN  CBL09            ELSE JUMP TO EXIT
13277c12127
< COP05  ZER  IDVAL(XR)        ZERO ID TO STOP DUMP BLOWING UP
---
> CBL05  ZER  IDVAL(XR)        ZERO ID TO STOP DUMP BLOWING UP
13283,13284c12133,12134
< COP06  MOV  (XS),XR          LOAD TABLE POINTER
<        BEQ  WC,TBLEN(XR),COP09 JUMP TO EXIT IF ALL DONE
---
> CBL06  MOV  (XS),XR          LOAD TABLE POINTER
>        BEQ  WC,TBLEN(XR),CBL09 JUMP TO EXIT IF ALL DONE
13291c12141
< COP07  MOV  TENXT(XR),XL     LOAD POINTER TO NEXT TEBLK
---
> CBL07  MOV  TENXT(XR),XL     LOAD POINTER TO NEXT TEBLK
13293c12143
<        BEQ  (XL),=B$TBT,COP06 BACK FOR NEXT BUCKET IF CHAIN END
---
>        BEQ  (XL),=B$TBT,CBL06 BACK FOR NEXT BUCKET IF CHAIN END
13306,13307c12156,12157
< COP08  MOV  TEVAL(XL),XL     LOAD VALUE
<        BEQ  (XL),=B$TRT,COP08 LOOP BACK IF TRAPPED
---
> CBL08  MOV  TEVAL(XL),XL     LOAD VALUE
>        BEQ  (XL),=B$TRT,CBL08 LOOP BACK IF TRAPPED
13309c12159
<        BRN  COP07            BACK FOR NEXT TEBLK
---
>        BRN  CBL07            BACK FOR NEXT TEBLK
13313c12163
< COP09  MOV  (XS)+,XR         LOAD POINTER TO BLOCK
---
> CBL09  MOV  (XS)+,XR         LOAD POINTER TO BLOCK
13318,13319c12168
< COP10  EXI  1                RETURN
<        EJC
---
> CBL10  EXI  1                RETURN
13321a12171
>        EJC
13325c12175
< COP11  MOV  BCBUF(XR),XL     GET BFBLK PTR
---
> CBL11  MOV  BCBUF(XR),XL     GET BFBLK PTR
13335c12185
<        BRN  COP09            BRANCH TO EXIT
---
>        BRN  CBL09            BRANCH TO EXIT
13337c12187,12188
<        ENP                   END PROCEDURE COPYB
---
>        ENP                   END PROCEDURE CBLCK
>        EJC
13455c12306
< CGN01  ERB  212,SYNTAX ERROR. VALUE USED WHERE NAME IS REQUIRED
---
> CGN01  ERB  208,SYNTAX ERROR. VALUE USED WHERE NAME IS REQUIRED
13586,13592d12436
<        BNZ  VRLEN(XR),CGVL0  JUMP IF NOT SYSTEM VARIABLE
<        MOV  XR,-(XS)         STACK XR
<        MOV  VRSVP(XR),XR     POINT TO SVBLK
<        MOV  SVBIT(XR),WA     GET SVBLK PROPERTY BITS
<        MOV  (XS)+,XR         RECOVER XR
<        ANB  BTCKW,WA         CHECK IF CONSTANT KEYWORD
<        NZB  WA,CGV00         JUMP IF CONSTANT KEYWORD
13616,13617c12460
< *      PREPARE TO GENERATE CODE FOR CMBLK. WC IS SET TO THE
< *      VALUE OF CSWNO (ZERO IF -OPTIMISE, 1 IF -NOOPT) TO
---
> *      PREPARE TO GENERATE CODE FOR CMBLK. WC IS CLEARED TO
13624c12467
<        MOV  CSWNO,WC         RESET CONSTANT FLAG
---
>        ZER  WC               CLEAR OPTIMISE FLAG
13644d12486
<        IFF  C$CNP,CGV24      CONCATENATION (NOT PATTERN MATCH)
13645a12488
>        IFF  C$CNP,CGV24      CONCAT. NOT PATTERN
13688,13689c12531,12532
< CGV07  SUB  *CMVLS,WB        GET NUMBER OF ARG PTRS (BYTES)
<        BTW  WB               CONVERT BYTES TO WORDS
---
> CGV07  SUB  *CMVLS,WB        GET NUMBER OF ARG PTRS (BAUS)
>        BTW  WB               CONVERT BAUS TO WORDS
13968c12811
<        WTB  XR               CONVERT WORD OFFSET TO BYTES
---
>        WTB  XR               CONVERT WORD OFFSET TO BAUS
14105c12948
< CDWD5  ERB  213,SYNTAX ERROR. STATEMENT IS TOO COMPLICATED.
---
> CDWD5  ERB  209,SYNTAX ERROR. STATEMENT IS TOO COMPLICATED.
14258,14260c13101,13107
<        BNE  STAGE,=STGIC,CMP02 SKIP UNLESS INITIAL COMPILE
<        JSR  READR            READ NEXT INPUT IMAGE
<        BZE  XR,CMP09         JUMP IF NO INPUT AVAILABLE
---
>        BEQ  STAGE,=STGIC,CMPC1 READ IF INITIAL COMPILE
>        BZE  R$COP,CMP02      ELSE SKIP IF NO -COPY IN FORCE
> *
> *      HERE TO ATTEMPT READ (STGIC OR -COPY)
> *
> CMPC1  JSR  READR            READ NEXT INPUT IMAGE
>        BZE  XR,CMPC2         JUMP IF NO INPUT AVAILABLE
14265a13113,13119
> *      HERE IF READR HAD NOTHING TO RETURN.  IF NOT DURING
> *      INITIAL COMPILE, THEN MUST BE AT OUTER LEVEL OF -COPY
> *      IN CODE().  R$CIM HAS BEEN RESTORED TO CODE STRING
> *      BY COPND SO WE CONTINUE FROM THE -COPY STMT.
> *
> CMPC2  BEQ  STAGE,=STGIC,CMP09 JUMP IF INITIAL COMPILE
> *
14296c13150
<        BEQ  WC,=CH$MN,CMP32  JUMP IF CONTROL CARD
---
>        BEQ  WC,=CH$MN,CMP33  JUMP IF CONTROL CARD
14324c13178
<        ERB  214,BAD LABEL OR MISPLACED CONTINUATION LINE
---
>        ERB  210,BAD LABEL OR MISPLACED CONTINUATION LINE
14363c13217
<        BEQ  XL,=T$SMC,CMP10  JUMP IF END OF IMAGE
---
>        BEQ  XL,=T$SMC,CMPEE  JUMP IF END OF IMAGE
14371c13225
<        BEQ  XL,=T$SMC,CMP10  JUMP IF OK (END OF IMAGE)
---
>        BEQ  XL,=T$SMC,CMPEE  JUMP IF OK (END OF IMAGE)
14375c13229
< CMP08  ERB  215,SYNTAX ERROR. UNDEFINED OR ERRONEOUS ENTRY LABEL
---
> CMP08  ERB  211,SYNTAX ERROR. UNDEFINED OR ERRONEOUS ENTRY LABEL
14380,14381c13234,13235
<        BEQ  STAGE,=STGXE,CMP10 JUMP IF CODE CALL (OK)
<        ERB  216,SYNTAX ERROR. MISSING END LINE
---
>        BEQ  STAGE,=STGXE,CMPEE JUMP IF CODE CALL (OK)
>        ERB  212,SYNTAX ERROR. MISSING END LINE
14385c13239
< CMP10  MOV  =OSTP$,WA        SET STOP CALL POINTER
---
> CMPEE  MOV  =OSTP$,WA        SET STOP CALL POINTER
14397c13251
<        ERB  217,SYNTAX ERROR. DUPLICATE LABEL
---
>        ERB  213,SYNTAX ERROR. DUPLICATE LABEL
14414c13268
<        BEQ  XL,=T$SMC,CMP31  JUMP IF NO FIELDS LEFT
---
>        BEQ  XL,=T$SMC,CMP32  JUMP IF NO FIELDS LEFT
14450c13304
< CMP17  ERB  218,SYNTAX ERROR. DUPLICATED GOTO FIELD
---
> CMP17  ERB  214,SYNTAX ERROR. DUPLICATED GOTO FIELD
14599d13452
<        EXI                   AND RETURN TO CMPIL CALLER
14600a13454,13459
> *      LOOP TO UNNEST ANY OUTSTANDING -COPY LEVELS
> *
> CMP31  JSR  COPND            CALL TO UNNEST -COPY
>        BNZ  R$COP,CMP31      LOOP IF NOT ALL -COPYS CLOSED
>        EXI                   RETURN TO CMPIL CALLER
> *
14603c13462
< CMP31  MOV  CMFGO(XS),WB     GET FAIL GOTO
---
> CMP32  MOV  CMFGO(XS),WB     GET FAIL GOTO
14606c13465
<        ERB  219,SYNTAX ERROR. EMPTY GOTO FIELD
---
>        ERB  215,SYNTAX ERROR. EMPTY GOTO FIELD
14610c13469
< CMP32  ICV  WB               POINT PAST CH$MN
---
> CMP33  ICV  WB               POINT PAST CH$MN
14634c13493
< CNC01  BGE  SCNPT,SCNIL,CNC09 RETURN IF END OF IMAGE
---
> CNC01  BGE  SCNPT,SCNIL,CNC10 RETURN IF END OF IMAGE
14638,14640d13496
< .IF    .CULC
<        FLC  WA               FOLD TO UPPER CASE
< .FI
14641a13498,13500
> .IF    .CASL
>        BEQ  WA,=CH$$I,CNC07  DITTO (LC)
> .FI
14649a13509,13511
> .IF    .CASL
>        JSR  SBSCC            CONVERT CASE BEFORE COMPARISON
> .ELSE
14651,14653d13512
< .IF    .CULC
<        MOV  SCLEN(XR),WA     RELOAD LENGTH
<        JSR  FLSTG            FOLD TO UPPER CASE
14658c13517
<        LCT  WC,=CC$NC        NUMBER OF STANDARD NAMES
---
>        LCT  WC,=CC$CT        NUMBER OF STANDARD NAMES
14682,14684c13541,13543
<        BSW  XL,CC$NC         SWITCH
< .IF    .CULC
<        IFF  CC$CA,CNC37      -CASE
---
>        BSW  XL,CC$CT         SWITCH
> .IF    .CASL
>        IFF  CC$CI,CNC11      -CASEIG
14686,14687c13545
<        IFF  CC$DO,CNC10      -DOUBLE
<        IFF  CC$DU,CNC11      -DUMP
---
>        IFF  CC$CO,CNC23      -COPY
14689,14705c13547,13556
<        IFF  CC$ER,CNC13      -ERRORS
<        IFF  CC$EX,CNC14      -EXECUTE
<        IFF  CC$FA,CNC15      -FAIL
<        IFF  CC$LI,CNC16      -LIST
<        IFF  CC$NR,CNC17      -NOERRORS
<        IFF  CC$NX,CNC18      -NOEXECUTE
<        IFF  CC$NF,CNC19      -NOFAIL
<        IFF  CC$NL,CNC20      -NOLIST
<        IFF  CC$NO,CNC21      -NOOPT
<        IFF  CC$NP,CNC22      -NOPRINT
<        IFF  CC$OP,CNC24      -OPTIMISE
<        IFF  CC$PR,CNC25      -PRINT
<        IFF  CC$SI,CNC27      -SINGLE
<        IFF  CC$SP,CNC28      -SPACE
<        IFF  CC$ST,CNC31      -STITLE
<        IFF  CC$TI,CNC32      -TITLE
<        IFF  CC$TR,CNC36      -TRACE
---
>        IFF  CC$FA,CNC13      -FAIL
>        IFF  CC$LI,CNC14      -LIST
> .IF    .CASL
>        IFF  CC$NC,CNC15      -NOCASEIG
> .FI
>        IFF  CC$NF,CNC16      -NOFAIL
>        IFF  CC$NL,CNC17      -NOLIST
>        IFF  CC$ST,CNC18      -STITLE
>        IFF  CC$TI,CNC19      -TITLE
>        IFF  CC$TR,CNC22      -TRACE
14717c13568
< CNC06  ERB  247,INVALID CONTROL CARD
---
> CNC06  ERB  216,INVALID CONTROL CARD
14722,14723c13573,13574
< .IF    .CULC
<        FLC  WA               FOLD TO UPPER CASE
---
> .IF    .CASL
>        BEQ  WA,=CH$$N,CNC08  SKIP IF LC N
14725a13577,13579
> .IF    .CASL
> CNC08  ADD  =NUM02,SCNPT     BUMP OFFSET PAST -IN
> .ELSE
14726a13581
> .FI
14739c13594
< CNC08  MOV  SCNPT,WA         PRESERVE IN CASE XEQ TIME COMPILE
---
> CNC09  MOV  SCNPT,WA         PRESERVE IN CASE XEQ TIME COMPILE
14746c13601,13602
< CNC09  EXI                   RETURN
---
> CNC10  EXI                   RETURN
> .IF    .CASL
14748c13604
< *      -DOUBLE
---
> *      -CASEIG
14750,14751c13606,13608
< CNC10  MNZ  CSWDB            SET SWITCH
<        BRN  CNC08            MERGE
---
> CNC11  MNZ  CSWCI            SET SWITCH
>        BRN  CNC09            MERGE
> .FI
14753,14759d13609
< *      -DUMP
< *      THIS IS USED FOR SYSTEM DEBUGGING . IT HAS THE EFFECT OF
< *      PRODUCING A CORE DUMP AT COMPILATION TIME
< *
< CNC11  JSR  SYSDM            CALL DUMPER
<        BRN  CNC09            FINISHED
< *
14762c13612
< CNC12  BZE  CSWLS,CNC09      RETURN IF -NOLIST
---
> CNC12  BZE  CSWLS,CNC10      RETURN IF -NOLIST
14765c13615
<        BRN  CNC09            FINISHED
---
>        BRN  CNC10            FINISHED
14767,14776d13616
< *      -ERRORS
< *
< CNC13  ZER  CSWER            CLEAR SWITCH
<        BRN  CNC08            MERGE
< *
< *      -EXECUTE
< *
< CNC14  ZER  CSWEX            CLEAR SWITCH
<        BRN  CNC08            MERGE
< *
14779,14780c13619,13620
< CNC15  MNZ  CSWFL            SET SWITCH
<        BRN  CNC08            MERGE
---
> CNC13  MNZ  CSWFL            SET SWITCH
>        BRN  CNC09            MERGE
14784,14785c13624,13626
< CNC16  MNZ  CSWLS            SET SWITCH
<        BEQ  STAGE,=STGIC,CNC08 DONE IF COMPILE TIME
---
> CNC14  MNZ  CSWLS            SET SWITCH
>        BRN  CNC09            MERGE
> .IF    .CASL
14787c13628
< *      LIST CODE LINE IF EXECUTE TIME COMPILE
---
> *      -NOCASEIG
14789,14792c13630,13632
<        ZER  LSTPF            PERMIT LISTING
<        JSR  LISTR            LIST LINE
<        BRN  CNC08            MERGE
<        EJC
---
> CNC15  ZER  CSWCI            CLEAR SWITCH
>        BRN  CNC09            MERGE
> .FI
14794,14805d13633
< *      CNCRD (CONTINUED)
< *
< *      -NOERRORS
< *
< CNC17  MNZ  CSWER            SET SWITCH
<        BRN  CNC08            MERGE
< *
< *      -NOEXECUTE
< *
< CNC18  MNZ  CSWEX            SET SWITCH
<        BRN  CNC08            MERGE
< *
14808,14834c13636,13637
< CNC19  ZER  CSWFL            CLEAR SWITCH
<        BRN  CNC08            MERGE
< *
< *      -NOLIST
< *
< CNC20  ZER  CSWLS            CLEAR SWITCH
<        BRN  CNC08            MERGE
< *
< *      -NOOPTIMISE
< *
< CNC21  MNZ  CSWNO            SET SWITCH
<        BRN  CNC08            MERGE
< *
< *      -NOPRINT
< *
< CNC22  ZER  CSWPR            CLEAR SWITCH
<        BRN  CNC08            MERGE
< *
< *      -OPTIMISE
< *
< CNC24  ZER  CSWNO            CLEAR SWITCH
<        BRN  CNC08            MERGE
< *
< *      -PRINT
< *
< CNC25  MNZ  CSWPR            SET SWITCH
<        BRN  CNC08            MERGE
---
> CNC16  ZER  CSWFL            CLEAR SWITCH
>        BRN  CNC09            MERGE
14839c13642
< *      -SINGLE
---
> *      -NOLIST
14841,14863c13644
< CNC27  ZER  CSWDB            CLEAR SWITCH
<        BRN  CNC08            MERGE
< *
< *      -SPACE
< *
< CNC28  BZE  CSWLS,CNC09      RETURN IF -NOLIST
<        JSR  SCANE            SCAN INTEGER AFTER -SPACE
<        MOV  =NUM01,WC        1 SPACE IN CASE
<        BEQ  XR,=T$SMC,CNC29  JUMP IF NO INTEGER
<        MOV  XR,-(XS)         STACK IT
<        JSR  GTSMI            CHECK INTEGER
<        PPM  CNC06            FAIL IF NOT INTEGER
<        PPM  CNC06            FAIL IF NEGATIVE OR LARGE
<        BNZ  WC,CNC29         JUMP IF NON ZERO
<        MOV  =NUM01,WC        ELSE 1 SPACE
< *
< *      MERGE WITH COUNT OF LINES TO SKIP
< *
< CNC29  ADD  WC,LSTLC         BUMP LINE COUNT
<        LCT  WC,WC            CONVERT TO LOOP COUNTER
<        BLT  LSTLC,LSTNP,CNC30 JUMP IF FITS ON PAGE
<        JSR  PRTPS            EJECT
<        JSR  LISTT            LIST TITLE
---
> CNC17  ZER  CSWLS            CLEAR SWITCH
14866,14874d13646
< *      SKIP LINES
< *
< CNC30  JSR  PRTNL            PRINT A BLANK
<        BCT  WC,CNC30         LOOP
<        BRN  CNC09            MERGE
<        EJC
< *
< *      CNCRD (CONTINUED)
< *
14877,14878c13649,13650
< CNC31  MOV  =R$STL,CNR$T     PTR TO R$STL
<        BRN  CNC33            MERGE
---
> CNC18  MOV  =R$STL,CNR$T     PTR TO R$STL
>        BRN  CNC20            MERGE
14882c13654
< CNC32  MOV  =NULLS,R$STL     CLEAR SUBTITLE
---
> CNC19  MOV  =NULLS,R$STL     CLEAR SUBTITLE
14887c13659
< CNC33  MOV  =NULLS,XR        NULL IN CASE NEEDED
---
> CNC20  MOV  =NULLS,XR        NULL IN CASE NEEDED
14891c13663
<        BLO  WA,WB,CNC34      JUMP IF NO CHARS LEFT
---
>        BLO  WA,WB,CNC21      JUMP IF NO CHARS LEFT
14898c13670
< CNC34  MOV  CNR$T,XL         POINT TO STORAGE LOCATION
---
> CNC21  MOV  CNR$T,XL         POINT TO STORAGE LOCATION
14900,14908c13672
<        BEQ  XL,=R$STL,CNC09  RETURN IF STITL
<        BNZ  PRECL,CNC09      RETURN IF EXTENDED LISTING
<        BZE  PRICH,CNC09      RETURN IF REGULAR PRINTER
<        MOV  SCLEN(XR),XL     GET LENGTH OF TITLE
<        MOV  XL,WA            COPY IT
<        BZE  XL,CNC35         JUMP IF NULL
<        ADD  =NUM10,XL        INCREMENT
<        BHI  XL,PRLEN,CNC09   USE DEFAULT LSTP0 VAL IF TOO LONG
<        ADD  =NUM04,WA        POINT JUST PAST TITLE
---
>        BRN  CNC10            RETURN
14910,14914d13673
< *      STORE OFFSET TO PAGE NN MESSAGE FOR SHORT TITLE
< *
< CNC35  MOV  WA,LSTPO         STORE OFFSET
<        BRN  CNC09            RETURN
< *
14915a13675
> *
14919,14921c13679,13680
< CNC36  JSR  SYSTT            TOGGLE SWITCH
<        BRN  CNC08            MERGE
< .IF    .CULC
---
> CNC22  JSR  SYSTT            TOGGLE SWITCH
>        BRN  CNC09            MERGE
14923,14925c13682
< *      -CASE
< *      SETS VALUE OF KVCAS SO THAT NAMES ARE FOLDED OR NOT
< *      DURING COMPILATION.
---
> *      -COPY
14927,14936c13684,13708
< CNC37  JSR  SCANE            SCAN INTEGER AFTER -CASE
<        ZER  WC               GET 0 IN CASE NONE THERE
<        BEQ  XL,=T$SMC,CNC38  SKIP IF NO INTEGER
<        MOV  XR,-(XS)         STACK IT
<        JSR  GTSMI            CHECK INTEGER
<        PPM  CNC06            FAIL IF NOT INTEGER
<        PPM  CNC06            FAIL IF NEGATIVE OR TOO LARGE
< CNC38  MOV  WC,KVCAS         STORE NEW CASE VALUE
<        BRN  CNC09            MERGE
< .FI
---
> *      GET FILETAG AND NOTIFY OSINT THAT WE ARE NESTING
> *
> CNC23  JSR  SCANE            GET FILETAG
>        BNE  =T$CON,XL,CNC06  ERR IF NOT CONSTANT
>        BNE  =B$SCL,(XR),CNC06 ERR IF NOT SCBLK
>        JSR  SYSSC            CALL TO START COPY
>        ERR  258,COPY FILE DOES NOT EXIST
>        PPM  EROSI            ERROR RETURN (ALWAYS)
>        MOV  WA,WB            SAVE IOTAG FROM OSINT
>        MOV  *COSI$,WA        GET SIZE OF COPY BLOCK
>        JSR  ALLOC            ALLOCATE
>        MOV  =B$COP,COTYP(XR) SET TYPE
>        MOV  R$COP,CONXT(XR)  PLACE AT FRONT OF STACK CHN
>        MOV  XR,R$COP         SPLICE IT IN
>        MOV  WB,COIOT(XR)     SAVE OSINT IOTAG
>        MOV  TTINS,COTTI(XR)  SAVE TTINS
>        ZER  TTINS            INPUT NOT FROM TERMINAL NOW
>        MOV  R$CIM,COCIM(XR)  SAVE R$CIM IN CASE EXEC TIME
>        MOV  SCNPT,COSPT(XR)  SAVE SCNPT IN CASE EXEC TIME
>        MOV  CSWLS,COSLS(XR)  SAVE LIST FLAG
>        MOV  CSWIN,COSIN(XR)  SAVE -INXXX VALUE
>        MOV  R$STL,COSTL(XR)  SAVE SUBTITLE
>        BZE  CSWLS,CNC10      NO LIST -COPY IF -NOLIST
>        JSR  LISTR            LIST -COPY CARD
>        BRN  CNC10            EXIT
14939a13712,13750
> *      COPND -- END -COPY NESTING
> *
> *      COPND IS CALLED FROM CMPIL AND READR IN ORDER TO
> *      UNNEST ONE LEVEL OF -COPY AND RESTORE THE PREVIOUS
> *      INPUT COMPILE STRING.  THE COPY BLOCK IS REMOVED
> *      FROM THE CHAIN AND THE STATE RESTORED FROM IT.
> *
> *      JSR  COPND            CALL TO END -COPY AT CUR. LEVEL
> *      (XL,WA,WB,WC)         DESTROYED
> *
> COPND  PRC  E,0              ENTRY POINT
>        MOV  R$COP,XL         GET POINTER TO CURRENT COBLK
>        BZE  XL,COP02         EXIT IF NONE
>        MOV  CONXT(XL),R$COP  TAKE OFF CHAIN
>        MOV  COIOT(XL),WA     GET IOTAG FOR OSINT
>        JSR  SYSEC            CALL TO END COPY
>        PPM                   DO NOT USE
>        PPM  EROSI            ERROR EXIT
>        BZE  CSWLS,COP01      SKIP LISTING IF -NOLIST
>        JSR  LISTR            LIST CURRENT IMAGE
> *
> *      MERGE AFTER POSSIBLE LISTING OF CURRENT IMAGE
> *
> COP01  MOV  COTTI(XL),TTINS  RESTORE TERMINAL INPUT FLAG
>        MOV  COSLS(XL),CSWLS  RESTORE LISTING STATE
>        MOV  COSPT(XL),SCNPT  GET OLD SCAN POINTER
>        MOV  COSIN(XL),CSWIN  OLD INPUT IMAGE LENGTH
>        MOV  COSTL(XL),R$STL  RESTORE SUBTITLE STRING
>        MNZ  LSTPF            THIS IMAGE LISTED IN CNCRD
>        MOV  COCIM(XL),XL     GET OLD COMPILER IMAGE SCBLK
>        MOV  XL,R$CIM         RESTORE IT
>        MOV  SCLEN(XL),SCNIL  SET INPUT IMAGE LENGTH TOO
> *
> *      MERGE TO EXIT
> *
> COP02  EXI                   RETURN TO CALLER
>        ENP                   END PROCEDURE COPND
>        EJC
> *
14950a13762,13763
> .IF    .CNLD
> .ELSE
14957,14958d13769
< .IF    .CNLD
< .ELSE
14966d13776
< .FI
14970a13781
> .FI
14981c13792
<        ERB  248,ATTEMPTED REDEFINITION OF SYSTEM FUNCTION
---
>        ERB  217,ATTEMPTED REDEFINITION OF SYSTEM FUNCTION
14991,15058d13801
< *      DTACH -- DETACH I/O ASSOCIATED NAMES
< *
< *      DETACHES TRBLKS FROM I/O ASSOCIATED VARIABLES, REMOVES
< *      ENTRY FROM IOCHN CHAIN ATTACHED TO FILEARG1 VRBLK AND MAY
< *      REMOVE VRBLK ACCESS AND STORE TRAPS.
< *      INPUT, OUTPUT, TERMINAL ARE HANDLED SPECIALLY.
< *
< *      (XL)                  I/O ASSOC. VBL NAME BASE PTR
< *      (WA)                  OFFSET TO NAME
< *      JSR  DTACH            CALL FOR DETACH OPERATION
< *      (XL,XR,WA,WB,WC)      DESTROYED
< *
< DTACH  PRC  E,0              ENTRY POINT
<        MOV  XL,DTCNB         STORE NAME BASE (GBCOL NOT CALLED)
<        ADD  WA,XL            POINT TO NAME LOCATION
<        MOV  XL,DTCNM         STORE IT
< *
< *      LOOP TO SEARCH FOR I/O TRBLK
< *
< DTCH1  MOV  XL,XR            COPY NAME POINTER
< *
< *      CONTINUE AFTER BLOCK DELETION
< *
< DTCH2  MOV  (XL),XL          POINT TO NEXT VALUE
<        BNE  (XL),=B$TRT,DTCH6 JUMP AT CHAIN END
<        MOV  TRTYP(XL),WA     GET TRAP BLOCK TYPE
<        BEQ  WA,=TRTIN,DTCH3  JUMP IF INPUT
<        BEQ  WA,=TRTOU,DTCH3  JUMP IF OUTPUT
<        ADD  *TRNXT,XL        POINT TO NEXT LINK
<        BRN  DTCH1            LOOP
< *
< *      DELETE AN OLD ASSOCIATION
< *
< DTCH3  MOV  TRVAL(XL),(XR)   DELETE TRBLK
<        MOV  XL,WA            DUMP XL ...
<        MOV  XR,WB            ... AND XR
<        MOV  TRTRF(XL),XL     POINT TO TRTRF TRAP BLOCK
<        BZE  XL,DTCH5         JUMP IF NO IOCHN
<        BNE  (XL),=B$TRT,DTCH5 JUMP IF INPUT, OUTPUT, TERMINAL
< *
< *      LOOP TO SEARCH IOCHN CHAIN FOR NAME PTR
< *
< DTCH4  MOV  XL,XR            REMEMBER LINK PTR
<        MOV  TRTRF(XL),XL     POINT TO NEXT LINK
<        BZE  XL,DTCH5         JUMP IF END OF CHAIN
<        MOV  IONMB(XL),WC     GET NAME BASE
<        ADD  IONMO(XL),WC     ADD OFFSET
<        BNE  WC,DTCNM,DTCH4   LOOP IF NO MATCH
<        MOV  TRTRF(XL),TRTRF(XR) REMOVE NAME FROM CHAIN
<        EJC
< *
< *      DTACH (CONTINUED)
< *
< *      PREPARE TO RESUME I/O TRBLK SCAN
< *
< DTCH5  MOV  WA,XL            RECOVER XL ...
<        MOV  WB,XR            ... AND XR
<        ADD  *TRVAL,XL        POINT TO VALUE FIELD
<        BRN  DTCH2            CONTINUE
< *
< *      EXIT POINT
< *
< DTCH6  MOV  DTCNB,XR         POSSIBLE VRBLK PTR
<        JSR  SETVR            RESET VRBLK IF NECESSARY
<        EXI                   RETURN
<        ENP                   END PROCEDURE DTACH
<        EJC
< *
15069c13812
<        WTB  XR               CONVERT TO BYTE OFFSET
---
>        WTB  XR               CONVERT TO BAU OFFSET
15092,15093c13835
< *      DMARG EQ 2            FULL DUMP (INCL ARRAYS ETC.)
< *      DMARG GE 3            CORE DUMP
---
> *      DMARG GE 2            FULL DUMP (INCL ARRAYS ETC.)
15101d13842
<        BGT  XR,=NUM02,DMP29  JUMP IF CORE DUMP REQUIRED
15108,15110c13849
<        JSR  PRTST            PRINT IT
<        JSR  PRTNL            TERMINATE PRINT LINE
<        JSR  PRTNL            AND PRINT A BLANK LINE
---
>        JSR  PRTFB            PRINT IT
15227,15228c13966,13967
< DMP11  JSR  PRTNL            PRINT BLANK LINE
<        JSR  PRTNL            AND ANOTHER
---
> DMP11  JSR  PRTFH            PRINT BLANK LINE
>        JSR  PRTFH            AND ANOTHER
15230,15232c13969
<        JSR  PRTST            PRINT HEADING
<        JSR  PRTNL            END LINE
<        JSR  PRTNL            PRINT ONE BLANK LINE
---
>        JSR  PRTFB            PRINT HEADING
15256,15257c13993
<        JSR  PRTVL            PRINT KEYWORD VALUE
<        JSR  PRTNL            TERMINATE PRINT LINE
---
>        JSR  PRTVF            PRINT KEYWORD VALUE
15276c14012
<        BEQ  WA,=B$BCT,DMP30  JUMP IF BUFFER
---
>        BEQ  WA,=B$BCT,DMP29  JUMP IF BUFFER
15310c14046
<        JSR  PRTNL            PRINT BLANK LINE
---
>        JSR  PRTFH            PRINT BLANK LINE
15312c14048
<        JSR  PRTVL            PRINT BLOCK VALUE (FOR TITLE)
---
>        JSR  PRTVF            PRINT BLOCK VALUE (FOR TITLE)
15314d14049
<        JSR  PRTNL            END PRINT LINE
15380,15384d14114
< *
< *      CALL SYSTEM CORE DUMP ROUTINE
< *
< DMP29  JSR  SYSDM            CALL IT
<        BRN  DMP28            RETURN
15393,15395c14123,14124
< DMP30  JSR  PRTNL            PRINT BLANK LINE
<        JSR  PRTVL            PRINT VALUE ID FOR TITLE
<        JSR  PRTNL            FORCE NEW LINE
---
> DMP29  JSR  PRTFH            PRINT BLANK LINE
>        JSR  PRTVF            PRINT VALUE ID FOR TITLE
15415,15416c14144
<        JSR  PRTCH            PRINT IT
<        JSR  PRTNL            PRINT NEW LINE
---
>        JSR  PRTCF            PRINT IT
15430c14158
<        JSR  PRTIS            PRINT ERROR PTR OR BLANK LINE
---
>        JSR  PRTFH            PRINT ERROR PTR OR BLANK LINE
15448,15450c14176
<        JSR  PRTST            PRINT ERROR MESSAGE TEXT
<        JSR  PRTIS            PRINT LINE
<        JSR  PRTIS            PRINT BLANK LINE
---
>        JSR  PRTFB            PRINT ERROR MESSAGE TEXT
15465a14192
>        BNZ  EROSN,ERT03      SKIP IF SPECIAL EROSI RETURN
15483a14211,14216
> *
> *      SPECIAL CASE SET UP BY EROSI RETURN TO AVOID SYSEM CALL
> *
> ERT03  ZER  EROSN            CLEAR FLAG
>        MOV  R$ETX,XR         GET ERROR MESSAGE TEXT
>        BRN  ERT01            RETURN WITHOUT MAKING SYSEM CALL
15498,15499d14230
< *      PPM  LOC              TRANSFER LOC FOR SUCCESSFUL EVAL
< *      (THE NORMAL RETURN IS NEVER TAKEN)
15507c14238
< EVALI  PRC  R,4              ENTRY POINT (RECURSIVE)
---
> EVALI  PRC  R,3              ENTRY POINT (RECURSIVE)
15518c14249
<        EXI  4                TAKE SUCCESSFUL EXIT
---
>        EXI                   SUCCESSFUL RETURN
15621a14353
> *      (WA)                  APPROPRIATE MULTI CHARACTER PCODE
15626,15627c14358
< *      PPM  LOC              TRANSFER LOC FOR SUCCESSFUL EVAL
< *      (THE NORMAL RETURN IS NEVER TAKEN)
---
> *      (XL)                  PCODE OF NEW NODE (ENTRY WA)
15629c14360
< *      (XL,WC,RA)            DESTROYED
---
> *      (WA,WC,RA)            DESTROYED
15634a14366,14367
> *      THIS IS DONE BY THE USUAL INDIRECT BRANCH THROUGH THE
> *      PCODE PASSED IN WA.
15636c14369,14370
< EVALS  PRC  R,3              ENTRY POINT (RECURSIVE)
---
> EVALS  PRC  R,2              ENTRY POINT (RECURSIVE)
>        MOV  WA,-(XS)         KEEP PCODE
15638a14373
>        MOV  (XS)+,WA         RECOVER PCODE
15644c14379
<        MOV  =P$BRK,XL        APPROPRIATE PCODE FOR OUR USE
---
>        MOV  WA,XL            APPROPRIATE PCODE FOR OUR USE
15649c14384,14385
<        EXI  3                TAKE SUCCESS RETURN
---
>        MOV  (XR),XL          GET PCODE
>        EXI                   TAKE SUCCESS RETURN
15653c14389,14390
< EVLS1  EXI  2                TAKE FAILURE RETURN
---
> EVLS1  MOV  (XS)+,WA         POP STACK
>        EXI  2                TAKE FAILURE RETURN
15733c14470
< EVLX3  MOV  (XS)+,XR         LOAD VALUE
---
> EVLXV  MOV  (XS)+,XR         LOAD VALUE
15735c14472
<        ERB  249,EXPRESSION EVALUATED BY NAME RETURNED VALUE
---
>        ERB  218,EXPRESSION EVALUATED BY NAME RETURNED VALUE
15739c14476
< EVLX4  MOV  (XS)+,WA         LOAD NAME OFFSET
---
> EVLXN  MOV  (XS)+,WA         LOAD NAME OFFSET
15743c14480
<        PPM  EVLX6            JUMP IF FAILURE DURING ACCESS
---
>        PPM  EVLXF            JUMP IF FAILURE DURING ACCESS
15752c14489
< EVLX6  MNZ  WB               NOTE UNSUCCESSFUL
---
> EVLXF  MNZ  WB               NOTE UNSUCCESSFUL
15806c14543
<        BTW  WA               CONVERT BYTE COUNT TO WORD COUNT
---
>        BTW  WA               CONVERT BAU COUNT TO WORD COUNT
15985c14722
<        MOV  =OPDVP,XR        ELSE POINT TO UNMISTAKABLE CONCAT.
---
>        MOV  =OPDVP,XR        ELSE POINT TO UNMISTAKEABLE CONCAT
15987c14724
< *      MERGE HERE WHEN XR SET UP WITH PROPER CONCATENATION DVBLK
---
> *      MERGE WITH CORRECT CONCATENATION DVBLK IN XR
15991c14728
<        ERB  220,SYNTAX ERROR. MISSING OPERATOR
---
>        ERB  219,SYNTAX ERROR. MISSING OPERATOR
15998c14735
<        ERB  221,SYNTAX ERROR. MISSING OPERAND
---
>        ERB  220,SYNTAX ERROR. MISSING OPERAND
16023c14760
< EXP08  ERB  222,SYNTAX ERROR. INVALID USE OF LEFT BRACKET
---
> EXP08  ERB  221,SYNTAX ERROR. INVALID USE OF LEFT BRACKET
16049c14786
<        ERB  223,SYNTAX ERROR. INVALID USE OF COMMA
---
>        ERB  222,SYNTAX ERROR. INVALID USE OF COMMA
16062c14799
<        ERB  224,SYNTAX ERROR. UNBALANCED RIGHT PARENTHESIS
---
>        ERB  223,SYNTAX ERROR. UNBALANCED RIGHT PARENTHESIS
16080c14817
<        WTB  WA               CONVERT LENGTH TO BYTES
---
>        WTB  WA               CONVERT LENGTH TO BAUS
16124c14861
<        ERB  225,SYNTAX ERROR. UNBALANCED RIGHT BRACKET
---
>        ERB  224,SYNTAX ERROR. UNBALANCED RIGHT BRACKET
16153c14890
< EXP21  ERB  226,SYNTAX ERROR. MISSING RIGHT PAREN
---
> EXP21  ERB  225,SYNTAX ERROR. MISSING RIGHT PAREN
16157c14894
< EXP22  ERB  227,SYNTAX ERROR. RIGHT PAREN MISSING FROM GOTO
---
> EXP22  ERB  226,SYNTAX ERROR. RIGHT PAREN MISSING FROM GOTO
16161c14898
< EXP23  ERB  228,SYNTAX ERROR. RIGHT BRACKET MISSING FROM GOTO
---
> EXP23  ERB  227,SYNTAX ERROR. RIGHT BRACKET MISSING FROM GOTO
16165c14902
< EXP24  ERB  229,SYNTAX ERROR. MISSING RIGHT ARRAY BRACKET
---
> EXP24  ERB  228,SYNTAX ERROR. MISSING RIGHT ARRAY BRACKET
16269c15006
< EXDM1  BLE  1(XS),=NUM05,EXDM2 JUMP IF STACK BOTTOM (SAVED LEVEL
---
> EXDM1  BLE  1(XS),=NUM05,EXDM2 JUMP IF STACK BOTTOM (SAVED LEVEL)
16324d15060
< .IF    .CULC
16326,16369d15061
< *      FLSTG -- FOLD STRING TO UPPER CASE
< *
< *      FLSTG FOLDS A CHARACTER STRING CONTAINING LOWER CASE
< *      CHARACCTERS TO ONE CONTAINING UPPER CASE CHARACTERS.
< *      FOLDING IS ONLY DONE IF &CASE (KVCAS) IS NOT ZERO.
< *
< *      (XR)                  STRING ARGUMENT
< *      (WA)                  LENGTH OF STRING
< *      JSR  FLSTG            CALL TO FOLD STRING
< *      (XR)                  RESULT STRING (POSSIBLY ORIGINAL)
< *      (WC)                  DESTROYED
< *
< FLSTG  PRC  R,0              ENTRY POINT
<        BZE  KVCAS,FST99      SKIP IF &CASE IS 0
<        MOV  XL,-(XS)         SAVE XL ACROSS CALL
<        MOV  XR,-(XS)         SAVE ORIGINAL SCBLK PTR
<        JSR  ALOCS            ALLOCATE NEW STRING BLOCK
<        MOV  (XS),XL          POINT TO ORIGINAL SCBLK
<        MOV  XR,-(XS)         SAVE POINTER TO NEW SCBLK
<        PLC  XL               POINT TO ORIGINAL CHARS
<        PLC  XR               POINT TO NEW CHARS
<        ZER  -(XS)            INIT DID FOLD FLAG
<        LCT  WC,WC            LOAD LOOP COUNTER
< FST01  LCH  WA,(XL)+         LOAD CHARACTER
<        BGT  =CH$$A,WA,FST02  SKIP IF LESS THAN LC A
<        BGT  WA,=CH$$$,FST02  SKIP IF GREATER THAN LC Z
<        FLC  WA               FOLD CHARACTER TO UPPER CASE
<        MNZ  (XS)             SET DID FOLD CHARACTER FLAG
< FST02  SCH  WA,(XR)+         STORE (POSSIBLY FOLDED) CHARACTER
<        BCT  WC,FST01         LOOP THRU ENTIRE STRING
<        CSC  XR               COMPLETE STORE CHARACTERS
<        BNZ  (XS)+,FST10      SKIP IF FOLDING DONE
<        MOV  (XS)+,DNAMP      DO NOT NEED NEW SCBLK
<        MOV  (XS)+,XR         RETURN ORIGINAL SCBLK
<        BRN  FST20            MERGE BELOW
< FST10  MOV  (XS)+,XR         RETURN NEW SCBLK
<        ICA  XS               THROW AWAY ORIGINAL SCBLK POINTER
< FST20  MOV  SCLEN(XR),WA     RELOAD STRING LENGTH
<        MOV  (XS)+,XL         RESTORE XL
< FST99  EXI                   RETURN
<        ENP
<        EJC
< .FI
< *
16414c15106
< *      ENTRY VALUE OF WB IS THE NUMBER OF BYTES TO MOVE UP.
---
> *      ENTRY VALUE OF WB IS THE NUMBER OF BAUS TO MOVE UP.
16549,16550c15241,15242
< *                            BYTES. SET TO THE ADDRESS OF THE
< *                            FIRST BYTE WHILE ACTUALLY SCANNING
---
> *                            BAUS. SET TO THE ADDRESS OF THE
> *                            FIRST BAU WHILE ACTUALLY SCANNING
16570a15263,15265
> .IF    .CEPP
>        BOD  WA,GBC07         JUMP IF ENTRY POINTER (UNUSED)
> .ELSE
16572a15268
> .FI
16578a15275,15277
> .IF    .CEPP
>        BEV  WA,GBC06         LOOP BACK IF NOT END OF CHAIN
> .ELSE
16580a15280
> .FI
16603a15304,15306
> .IF    .CEPP
>        BEV  WA,GBC09         JUMP IF IN USE
> .ELSE
16605a15309
> .FI
16672c15376
<        ERB  250,INSUFFICIENT MEMORY TO COMPLETE DUMP
---
>        ERB  229,INSUFFICIENT MEMORY TO COMPLETE DUMP
16702a15407,15410
> .IF    .CRPP
>        BOD  XL,GPF02         JUMP IF NOT PTR INTO DYNAMIC AREA
> .ELSE
> .FI
16714a15423,15425
> .IF    .CEPP
>        BOD  WA,GPF03         JUMP IF NOT ALREADY PROCESSED
> .ELSE
16716a15428
> .FI
16752a15465
>        IFF  BL$CO,GPF19      COBLK
16889a15603,15608
> *
> *      COBLK
> *
> GPF19  MOV  *COSI$,WA        SET LENGTH
>        MOV  *CONXT,WB        AND OFFSET
>        BRN  GPF05            ALL SET
16890a15610,15611
> .IF    .CNBF
> .ELSE
16892a15614,15648
> *      GTBUF -- GET BUFFER
> *
> *      GTBUF IS PASSED AN OBJECT AND RETURNS A BUFFER IF
> *      POSSIBLE.  UNLESS THE OBJECT IS ALREADY A BUFFER,
> *      THIS INVOLVES A CONVERSION TO STRING AND THEN
> *      STRING TO BUFFER.
> *
> *      (XR)                  OBJECT TO BE CONVERTED
> *      JSR  GTBUF            CALL TO GET BUFFER
> *      PPM  LOC              TRANSFER LOC FOR CONVERT IMPOSSIBLE
> *      (XR)                  RESULTING BUFFER
> *      (XL,WA,WB,WC)         DESTROYED
> *
> GTBUF  PRC  E,1              ENTRY POINT
>        BEQ  (XR),=B$BCT,GTB01 EXIT IF ALREADY BUFFER
>        MOV  XR,-(XS)         STACK TO CONVERT TO STRING
>        JSR  GTSTG            CONVERT TO STRING
>        PPM  GTB02            CONVERSION ERROR
>        MOV  XR,XL            SAVE STRING POINTER
>        JSR  ALOBF            ALLOCATE BUFFER OF SAME SIZE
>        JSR  INSBF            COPY IN THE STRING
>        PPM                   ALREADY STRING - CANT FAIL TO CNV
>        PPM                   MUST BE ENOUGH ROOM
> *
> *      MERGE TO EXIT WITH BUFFER CONTROL BLK IN (XR)
> *
> GTB01  EXI                   RETURN TO CALLER
> *
> *      HERE ON CONVERSION FAILURE
> *
> GTB02  EXI  1                TAKE FAILURE EXIT
>        ENP
> .FI
>        EJC
> *
16895c15651
< *      GTARR IS PASSED AN OBJECT AND RETURNS AN ARRAY IF POSSIBL
---
> *      GTARR IS PASSED AN OBJECT AND RETURNS AN ARRAY IF POSSIBLE
16907c15663,15664
<        BNE  WA,=B$TBT,GTA9A  ELSE FAIL IF NOT A TABLE (SGD02)
---
>        MOV  XR,-(XS)         PLACE POSSIBLE TBBLK PTR ON STACK
>        BNE  WA,=B$TBT,GTAR9  ELSE FAIL IF NOT A TABLE
16911d15667
<        MOV  XR,-(XS)         REPLACE TBBLK POINTER ON STACK
16973c15729
<        WTB  WA               CONVERT LENGTH TO BYTES
---
>        WTB  WA               CONVERT LENGTH TO BAUS
17027,17031c15783,15784
< GTAR9  MOV  (XS)+,XR         RESTORE STACK FOR CONV ERR (SGD02)
< *
< *      MERGE TO TAKE CONVERT ERROR WHEN STACK ADJUSTED OK
< *
< GTA9A  EXI  1                RETURN
---
> GTAR9  MOV  (XS)+,XR         CLEAR UP STACK
>        EXI  1                RETURN
17095,17099c15848,15852
< *      CHECK THE LAST CHARACTER OF THE STRING FOR COLON OR
< *      SEMICOLON.  THESE CHARACTERS CAN LEGITIMATELY END AN
< *      EXPRESSION IN OPEN CODE, SO EXPAN WILL NOT DETECT THEM
< *      AS ERRORS, BUT THEY ARE INVALID AS TERMINATORS FOR A
< *      STRING THAT IS BEING CONVERTED TO EXPRESSION FORM.
---
> *      CHECK THE LAST CHAR OF STRING FOR COLON OR
> *      SEMICOLON. THEY CAN LEGITIMATELY END AN EXPRESSION
> *      IN OPEN CODE, SO EXPAN WILL NOT FAIL THEM BUT THEY ARE
> *      INVALID AS TERMINATORS FOR A STRING WHICH IS TO BE
> *      CONVERTED TO EXPRESSION FORM.
17101,17105c15854,15858
<        MOV  XR,XL            COPY INPUT STRING POINTER (REG06)
<        PLC  XL,WA            POINT ONE PAST THE STRING END (REG06)
<        LCH  XL,-(XL)         FETCH THE LAST CHARACTER (REG06)
<        BEQ  XL,=CH$CL,GTEX2  ERROR IF IT IS A SEMICOLON (REG06)
<        BEQ  XL,=CH$SM,GTEX2  OR IF IT IS A COLON (REG06)
---
>        MOV  XR,XL            COPY ARGUMENT STRING
>        PLC  XL,WA            POINT PAST STRING END
>        LCH  XL,-(XL)         GET LAST CHAR
>        BEQ  XL,=CH$CL,GTEX2  FAIL IF COLON
>        BEQ  XL,=CH$SM,GTEX2  FAIL IF SEMICOLON
17196c15949
<        BEQ  WA,=B$ICL,GTN34  JUMP IF INTEGER (NO CONVERSION)
---
>        BEQ  WA,=B$ICL,GTN3A  JUMP IF INTEGER (NO CONVERSION)
17199c15952
<        BEQ  WA,=B$RCL,GTN34  JUMP IF REAL (NO CONVERSION)
---
>        BEQ  WA,=B$RCL,GTN3A  JUMP IF REAL (NO CONVERSION)
17204a15958
>        STI  GTNSV            SAVE IA
17357,17359c16111,16113
< .IF    .CULC
<        BEQ  WB,=CH$$E,GTN15  JUMP IF E FOR EXPONENT
<        BEQ  WB,=CH$$D,GTN15  JUMP IF D FOR EXPONENT
---
> .IF    .CASL
>        BEQ  WB,=CH$$E,GTN15  JUMP FOR EXPT
>        BEQ  WB,=CH$$D,GTN15  JUMP FOR EXPT
17462c16216
<        WTB  WA               CONVERT REMAINING SCALE TO BYTE OFS
---
>        WTB  WA               CONVERT REMAINING SCALE TO BAU OFS
17490c16244
<        WTB  WA               CONVERT REMAINING SCALE TO BYTE OFS
---
>        WTB  WA               CONVERT REMAINING SCALE TO BAU OFS
17524c16278,16279
< GTN34  EXI                   RETURN TO GTNUM CALLER
---
> GTN34  LDI  GTNSV            RECOVER IA
> GTN3A  EXI                   RETURN TO GTNUM CALLER
17538a16294
>        LDI  GTNSV            RECOVER IA
17552d16307
< *      (WA,WB)               DESTROYED (CONVERSION ERROR ONLY)
17558a16314
>        BRN  GNV01            FAIL
17559a16316,16320
> *      RESTORE REGS AND FAIL
> *
> GNV00  MOV  GNVSA,WA         RESTORE REGS
>        MOV  GNVSB,WB
> *
17570,17574c16331,16332
<        PPM  GNV01            JUMP IF CONVERSION ERROR
<        BZE  WA,GNV01         NULL STRING IS AN ERROR
< .IF    .CULC
<        JSR  FLSTG            FOLD LOWER CASE TO UPPER CASE
< .FI
---
>        PPM  GNV00            JUMP IF CONVERSION ERROR
>        BZE  WA,GNV00         NULL STRING IS AN ERROR
17575a16334,16339
> .IF    .CASL
>        MOV  XR,XL            COPY STRING POINTER
>        ZER  WB               ZERO OFFSET
>        JSR  SBSTG            CONVERT TO PREFERRED CASE
>        MOV  SCLEN(XR),WA     RECOVER STRING LENGTH
> .FI
17586c16350
<        WTB  WC               CONVERT OFFSET TO BYTES
---
>        WTB  WC               CONVERT OFFSET TO BAUS
17635c16399
<        WTB  XL               CONVERT TO BYTE OFFSET
---
>        WTB  XL               CONVERT TO BAU OFFSET
17687c16451
<        WTB  WA               CONVERT LENGTH TO BYTES
---
>        WTB  WA               CONVERT LENGTH TO BAUS
17703c16467
<        WTB  WA               CONVERT TO LENGTH IN BYTES
---
>        WTB  WA               CONVERT TO LENGTH IN BAUS
17826c16590
< *      MERGE HERE TO EXIT OF NO CONVERSION REQUIRED
---
> *      MERGE HERE TO EXIT IF NO CONVERSION REQUIRED
17901c16665
<        BGT  WC,MXLEN,GTSM3   OR IF TOO SMALL
---
>        BGT  WC,MXLEN,GTSM3   OR IF TOO LARGE
17979c16743
< .IF    .CNCI
---
> .IF    .CSCI
18008d16771
< .FI
18023a16787
> .FI
18181a16946,16948
> .IF    .CPLC
>        MOV  =CH$$E,WA        GET CHAR LETTER E
> .ELSE
18182a16950
> .FI
18265c17033
<        MOV  BCBUF(XL),XL     POINT TO BFBLK
---
>        MOV  BCBUF(XL),XL     POINT TOBFBLK
18326c17094
< *      HASHS IS USED TO CONVERT A STRING TO A UNIQUE INTEGER
---
> *      HASHS REPRODUCIBLY MAPS A STRING TO AN INTEGER
18337c17105
< *      START WITH THE LENGTH OF THE STRING (SGD07)
---
> *      START WITH THE LENGTH OF THE STRING
18383,18384c17151,17154
<        MFI  XR,ICBL1         COPY SMALL INTEGERS
<        BLE  XR,=NUM02,ICBL3  JUMP IF 0,1 OR 2
---
>        ILT  ICBL1            SKIP IF NEGATIVE
>        SBI  INTV2            REDUCE BY TWO
>        ILE  ICBL3            JUMP IF 0 , 1 OR 2
>        ADI  INTV2            RESTORE VALUE
18405c17175,17177
< ICBL3  WTB  XR               CONVERT INTEGER TO OFFSET
---
> ICBL3  ADI  INTV2            RESTORE VALUE
>        MFI  XR               CONVERT TO SHORT INTEGER
>        WTB  XR               CONVERT INTEGER TO OFFSET
18503c17275
< *      INOUT - USED TO INITIALISE INPUT AND OUTPUT VARIABLES
---
> *      INOUT - USED TO INITIALISE .INPUT .OUTPUT .TERMINAL
18506c17278
< *      (WB)                  TRBLK TYPE
---
> *      (WB)                  TRBLK TYPE (TRTYP FIELD)
18508,18509d17279
< *      (XL)                  VRBLK PTR
< *      (XR)                  TRBLK PTR
18521c17291
<        JSR  GTNVR            BUILD VRBLK
---
>        JSR  GTNVR            FIND OR BUILD VRBLK
18524,18525c17294,17296
<        MOV  (XS)+,WB         GET TRTER FIELD
<        ZER  XL               ZERO TRFPT
---
>        MOV  (XS)+,WB         GET TRTYP FIELD
>        ZER  XL               ZERO TRTRI
>        MOV  VRSVP(XR),XR     GET SVBLK POINTER
18528,18531c17299,17301
<        MOV  VRSVP(XL),TRTER(XR) STORE SVBLK POINTER
<        MOV  XR,VRVAL(XL)     STORE TRBLK PTR IN VRBLK
<        MOV  =B$VRA,VRGET(XL) SET TRAPPED ACCESS
<        MOV  =B$VRV,VRSTO(XL) SET TRAPPED STORE
---
>        MOV  *VRVAL,WA        OFFSET TO VALUE FIELD
>        JSR  TRCHN            PUT TRBLK IN TRACE CHAIN
>        PPM                   CANT FAIL
18542,18543c17312,17313
< *      SECTION TO BE REPLACED IS DIFFERENT THAN THE LENGTH OF
< *      THE GIVEN STRING, AND THE REPLACEMENT IS NOT AN APPEND,
---
> *      SECTION TO BE REPLACED DIFFERS FROM THAT OF THE
> *      GIVEN STRING, AND THE REPLACEMENT IS NOT AN APPEND,
18547,18548c17317,17318
< *      (XR)                  POINTER TO BFBLK
< *      (XL)                  OBJECT WHICH IS STRING CONVERTABLE
---
> *      (XR)                  POINTER TO BCBLK
> *      (XL)                  OBJECT WHICH IS STRING CONVERTIBLE
18552,18553c17322,17324
< *      PPM  LOC              THREAD IF (XR) NOT CONVERTABLE
< *      PPM  LOC              THREAD IF INSERT NOT POSSIBLE
---
> *      PPM  LOC              ERROR IF (XR) NOT CONVERTIBLE
> *      PPM  LOC              FAIL IF INSERT NOT POSSIBLE
> *      (XL,WA,WB,WC)         DESTROYED
18562d17332
<        MOV  WC,INSSC         SAVE ENTRY WC
18568d17337
<        MOV  XL,-(XS)         SAVE ENTRY XL
18570c17339
<        MOV  XL,-(XS)         STACK AGAIN FOR GTSTG
---
>        MOV  XL,-(XS)         STACK STRING POINTER FOR GTSTG
18572c17341
<        PPM  INS05            TAKE STRING CONVERT ERR EXIT
---
>        PPM  INS06            TAKE STRING CONVERT ERR EXIT
18574c17343,17346
<        MOV  (XS),XR          RESTORE BCBLK PTR
---
>        MOV  (XS)+,XR         RESTORE BCBLK PTR
>        MOV  XR,INSBC         BCBLK PTR - NO DANGER OF GARB COLLN
>        MOV  BCBUF(XR),XR     POINT TO BFBLK
>        MOV  XR,INSBB         BFBLK PTR - NO DANGER OF GARB COLLN
18577,18579c17349,17350
<        MOV  BCBUF(XR),XR     POINT TO BFBLK
<        BGT  WA,BFALC(XR),INS06 FAIL IF RESULT EXCEEDS ALLOCATION
<        MOV  (XS),XR          RESTORE BCBLK PTR
---
>        BGT  WA,BFALC(XR),INS07 FAIL IF RESULT EXCEEDS ALLOCATION
>        MOV  INSBC,XR         RESTORE BCBLK PTR
18586,18588c17357
<        BZE  WA,INS04         SKIP SHIFT IF NOTHING TO DO
<        BEQ  INSSB,SCLEN(XL),INS04 SKIP SHIFT IF LENGTHS MATCH
<        MOV  BCBUF(XR),XR     POINT TO BFBLK
---
>        MOV  INSBB,XR         POINT TO BFBLK
18590c17359,17361
<        BLO  INSSB,SCLEN(XL),INS01 BRN IF SHFT IS FOR MORE ROOM
---
>        BZE  WA,INS02         SKIP SHIFT IF NOTHING TO DO
>        BEQ  INSSB,SCLEN(XL),INS02 SKIP SHIFT IF LENGTHS MATCH
>        BLO  INSSB,SCLEN(XL),INS01 BRN IF SHIFT IS FOR MORE ROOM
18597c17368
< *      SEGMENT BEING REPLACED.)  REGISTERS ARE SET AS:
---
> *      SEGMENT BEING REPLACED). REGISTERS ARE SET AS -
18622c17393
< *      MERGE HERE AFTER MOVE TO ADJUST PADDING AT NEW BUFFER END
---
> *      MERGE HERE AFTER POSSIBLE MOVE TO ADJUST ZERO FILL AT END
18626a17398
>        BTC  WA               CONVERT TO CHAR COUNT
18629,18630c17401
<        MOV  (XS),XR          GET BCBLK PTR
<        MOV  BCBUF(XR),XR     GET BFBLK PTR
---
>        MOV  INSBB,XR         POINT TO BFBLK
18633a17405
>        EJC
18634a17407,17408
> *      INSBF (CONTINUED)
> *
18639d17412
<        EJC
18641,18642d17413
< *      INSBF (CONTINUED)
< *
18646,18647c17417
< INS04  MOV  (XS),XR          GET BCBLK PTR
<        MOV  BCBUF(XR),XR     GET BFBLK PTR
---
> INS04  MOV  INSBB,XR         POINT TO BFBLK
18648a17419
>        BZE  WA,INS05         SKIP IF NO CHARS TO INSERT
18652,18656c17423,17427
<        MOV  (XS)+,XR         RESTORE ENTRY XR
<        MOV  (XS)+,XL         RESTORE ENTRY XL
<        MOV  INSSA,WA         RESTORE ENTRY WA
<        MOV  INSSB,WB         RESTORE ENTRY WB
<        MOV  INSSC,WC         RESTORE ENTRY WC
---
> *
> *      SUCCESSFUL RETURN
> *
> INS05  MOV  INSBC,XR         RESTORE ENTRY XR
>        ZER  XL               CLEAR GARBAGE CHAR POINTER
18661,18665c17432
< INS05  MOV  (XS)+,XR         RESTORE ENTRY XR
<        MOV  (XS)+,XL         RESTORE ENTRY XL
<        MOV  INSSA,WA         RESTORE ENTRY WA
<        MOV  INSSB,WB         RESTORE ENTRY WB
<        MOV  INSSC,WC         RESTORE ENTRY WC
---
> INS06  ICA  XS               DISCARD UNWANTED STACK TOP
18670,18678c17437
< INS06  MOV  (XS)+,XR         RESTORE ENTRY XR
<        MOV  (XS)+,XL         RESTORE ENTRY XL
< *
< *      MERGE FOR LENGTH FAILURE EXIT WITH STACK SET
< *
< INS07  MOV  INSSA,WA         RESTORE ENTRY WA
<        MOV  INSSB,WB         RESTORE ENTRY WB
<        MOV  INSSC,WC         RESTORE ENTRY WC
<        EXI  2                ALTERNATE EXIT
---
> INS07  EXI  2                ALTERNATE EXIT
18681a17441
> *      IOFTG -- GET IOTAG
18683c17443,17444
< *      IOFCB -- GET INPUT/OUTPUT FCBLK POINTER
---
> *      USED TO FIND THE IOTAG (IF ANY) CORRESPONDING TO THE
> *      FILETAG ARGUMENT.
18685,18691c17446,17448
< *      USED BY ENDFILE, EJECT AND REWIND TO FIND THE FCBLK
< *      (IF ANY) CORRESPONDING TO THEIR ARGUMENT.
< *
< *      -(XS)                 ARGUMENT
< *      JSR  IOFCB            CALL TO FIND FCBLK
< *      PPM  LOC              ARG IS AN UNSUITABLE NAME
< *      PPM  LOC              ARG IS NULL STRING
---
> *      -(XS)                 FILETAG ARGUMENT
> *      JSR  IOFTG            CALL TO FIND IOTAG
> *      PPM  LOC              ARG IS AN UNSUITABLE FILETAG
18693,18696c17450,17454
< *      (XL)                  PTR TO FILEARG1 VRBLK
< *      (XR)                  ARGUMENT
< *      (WA)                  FCBLK PTR OR 0
< *      (WB)                  DESTROYED
---
> *      (XL)                  PTR TO FILETAG SCBLK
> *      (XR)                  PTR TO TRTIO TRACE BLK OR ZERO
> *      (WA)                  IOTAG OR ZERO
> *      (WB)                  PTR TO FILETAG VRBLK
> *      (WC)                  VALUE/0 FOR INTEGER/STRING FILETAG
18698c17456
< IOFCB  PRC  N,2              ENTRY POINT
---
> IOFTG  PRC  N,1              ENTRY POINT
18700c17458
<        PPM  IOFC2            FAIL
---
>        PPM  IOFT4            FAIL
18702,18705c17460,17474
<        JSR  GTNVR            GET AS NATURAL VARIABLE
<        PPM  IOFC3            FAIL IF NULL
<        MOV  XL,WB            COPY STRING POINTER AGAIN
<        MOV  XR,XL            COPY VRBLK PTR FOR RETURN
---
>        MOV  XR,-(XS)         STACK STRING
>        JSR  GTSMI            TRY CONVERSION TO INTEGER
>        PPM  IOFT5            SKIP IF CANT
>        PPM  IOFT5            SKIP IF CANT
> *
> *      MERGE WITH WC SET UP
> *
> IOFT1  MOV  WC,WB            KEEP INTEGER OR ZERO
>        MOV  XL,XR            FILETAG STRING TO XR FOR GTNVR CALL
>        JSR  GTNVR            FIND VRBLK
>        PPM  IOFT4            SKIP IF NULL STRING
>        MOV  XL,-(XS)         KEEP SCBLK PTR
>        ZER  XL               IN CASE NO TRTIO BLK FOUND
>        MOV  WB,WC            KEEP INTEGER OR ZERO
>        MOV  XR,WB            COPY VRBLK PTR FOR RETURN
18710,18715c17479,17483
< IOFC1  MOV  VRVAL(XR),XR     GET POSSIBLE TRBLK PTR
<        BNE  (XR),=B$TRT,IOFC2 FAIL IF END OF CHAIN
<        BNE  TRTYP(XR),=TRTFC,IOFC1 LOOP IF NOT FILE ARG TRBLK
<        MOV  TRFPT(XR),WA     GET FCBLK PTR
<        MOV  WB,XR            COPY ARG
<        EXI                   RETURN
---
> IOFT2  MOV  VRVAL(XR),XR     GET POSSIBLE TRBLK PTR
>        BNE  (XR),=B$TRT,IOFT3 SKIP IF END OF CHAIN
>        BNE  TRTYP(XR),=TRTIO,IOFT2 LOOP IF NOT FILETAG TRBLK
>        MOV  TRTAG(XR),WA     GET IOTAG OR 0
>        MOV  XR,XL            TRTIO BLK PTR
18717c17485
< *      FAIL RETURN
---
> *      RETURN POINT
18719c17487,17489
< IOFC2  EXI  1                FAIL
---
> IOFT3  MOV  XL,XR            TRTIO BLK PTR OR 0
>        MOV  (XS)+,XL         RECOVER SCBLK PTR
>        EXI                   SUCCESSFUL RETURN
18721c17491
< *      NULL ARG
---
> *      FAIL RETURN
18723,18724c17493
< IOFC3  EXI  2                NULL ARG RETURN
<        ENP                   END PROCEDURE IOFCB
---
> IOFT4  EXI  1                FAIL
18727c17496
< *      IOPPF -- PROCESS FILEARG2 FOR IOPUT
---
> *      NON NUMERIC FILETAG
18729,18755c17498,17500
< *      (R$XSC)               FILEARG2 PTR
< *      JSR  IOPPF            CALL TO PROCESS FILEARG2
< *      (XL)                  FILEARG1 PTR
< *      (XR)                  FILE ARG2 PTR
< *      -(XS)..-(XS)          FIELDS EXTRACTED FROM FILEARG2
< *      (WC)                  NO. OF FIELDS EXTRACTED
< *      (WB)                  INPUT/OUTPUT FLAG
< *      (WA)                  FCBLK PTR OR 0
< *
< IOPPF  PRC  N,0              ENTRY POINT
<        ZER  WB               TO COUNT FIELDS EXTRACTED
< *
< *      LOOP TO EXTRACT FIELDS
< *
< IOPP1  MOV  =IODEL,XL        GET DELIMITER
<        MOV  XL,WC            COPY IT
<        JSR  XSCAN            GET NEXT FIELD
<        MOV  XR,-(XS)         STACK IT
<        ICV  WB               INCREMENT COUNT
<        BNZ  WA,IOPP1         LOOP
<        MOV  WB,WC            COUNT OF FIELDS
<        MOV  IOPTT,WB         I/O MARKER
<        MOV  R$IOF,WA         FCBLK PTR OR 0
<        MOV  R$IO2,XR         FILE ARG2 PTR
<        MOV  R$IO1,XL         FILEARG1
<        EXI                   RETURN
<        ENP                   END PROCEDURE IOPPF
---
> IOFT5  ZER  WC               NOTE NON NUMERIC
>        BRN  IOFT1            MERGE
>        ENP                   END PROCEDURE IOFTG
18758c17503
< *      IOPUT -- ROUTINE USED BY INPUT AND OUTPUT
---
> *      IOPUT -- PROCESS INPUT AND OUTPUT ARGUMENTS
18760,18763c17505,17507
< *      IOPUT SETS UP INPUT/OUTPUT  ASSOCIATIONS. IT BUILDS
< *      SUCH TRACE AND FILE CONTROL BLOCKS AS ARE NECESSARY AND
< *      CALLS SYSFC,SYSIO TO PERFORM CHECKS ON THE
< *      ARGUMENTS AND TO OPEN THE FILES.
---
> *      IOPUT CHECKS THE ARGUMENTS OF INPUT AND OUTPUT CALLS,
> *      SETS UP THE REQUIRED ASSOCIATIONS AND CALLS SYSIO TO
> *      OPEN THE REQUESTED FILES.
18765,18820d17508
< *         +-----------+   +---------------+       +-----------+
< *      +-.I           I   I               I------.I   =B$XRT  I
< *      I  +-----------+   +---------------+       +-----------+
< *      I  /           /        (R$FCB)            I    *4     I
< *      I  /           /                           +-----------+
< *      I  +-----------+   +---------------+       I           I-
< *      I  I   NAME    +--.I    =B$TRT     I       +-----------+
< *      I  /           /   +---------------+       I           I
< *      I   (FIRST ARG)    I =TRTIN/=TRTOU I       +-----------+
< *      I                  +---------------+             I
< *      I                  I     VALUE     I             I
< *      I                  +---------------+             I
< *      I                  I(TRTRF) 0   OR I--+          I
< *      I                  +---------------+  I          I
< *      I                  I(TRFPT) 0   OR I----+        I
< *      I                  +---------------+  I I        I
< *      I                     (I/O TRBLK)     I I        I
< *      I  +-----------+                      I I        I
< *      I  I           I                      I I        I
< *      I  +-----------+                      I I        I
< *      I  I           I                      I I        I
< *      I  +-----------+   +---------------+  I I        I
< *      I  I           +--.I    =B$TRT     I.-+ I        I
< *      I  +-----------+   +---------------+    I        I
< *      I  /           /   I    =TRTFC     I    I        I
< *      I  /           /   +---------------+    I        I
< *      I    (FILEARG1     I     VALUE     I    I        I
< *      I         VRBLK)   +---------------+    I        I
< *      I                  I(TRTRF) 0   OR I--+ I        .
< *      I                  +---------------+  I .  +-----------+
< *      I                  I(TRFPT) 0   OR I------./   FCBLK   /
< *      I                  +---------------+  I    +-----------+
< *      I                       (TRTRF)       I
< *      I                                     I
< *      I                                     I
< *      I                  +---------------+  I
< *      I                  I    =B$XRT     I.-+
< *      I                  +---------------+
< *      I                  I      *5       I
< *      I                  +---------------+
< *      +------------------I               I
< *                         +---------------+       +-----------+
< *                         I(TRTRF) O   OR I------.I  =B$XRT   I
< *                         +---------------+       +-----------+
< *                         I  NAME OFFSET  I       I    ETC    I
< *                         +---------------+
< *                           (IOCHN - CHAIN OF NAME POINTERS)
<        EJC
< *
< *      IOPUT (CONTINUED)
< *
< *      NO ADDITIONAL TRAP BLOCKS ARE USED FOR STANDARD INPUT/OUT
< *      FILES. OTHERWISE AN I/O TRAP BLOCK IS ATTACHED TO SECOND
< *      ARG (FILEARG1) VRBLK. SEE DIAGRAM ABOVE FOR DETAILS OF
< *      THE STRUCTURE BUILT.
< *
18822,18824c17510,17512
< *      -(XS)                 2ND ARG (FILE ARG1)
< *      -(XS)                 3RD ARG (FILE ARG2)
< *      (WB)                  0 FOR INPUT, 3 FOR OUTPUT ASSOC.
---
> *      -(XS)                 2ND ARG (FILETAG)
> *      -(XS)                 3RD ARG (FILEPROPS)
> *      (WB)                  0 FOR INPUT, 2 FOR OUTPUT ASSOC.
18827c17515
< *      PPM  LOC              2ND ARG NOT A SUITABLE NAME
---
> *      PPM  LOC              2ND ARG NOT A SUITABLE FILETAG
18829,18831c17517
< *      PPM  LOC              INAPPROPRIATE FILE SPEC FOR I/O
< *      PPM  LOC              I/O FILE DOES NOT EXIST
< *      PPM  LOC              I/O FILE CANNOT BE READ/WRITTEN
---
> *      PPM  LOC              FAIL RETURN
18835,18858d17520
< IOPUT  PRC  N,6              ENTRY POINT
<        ZER  R$IOT            IN CASE NO TRTRF BLOCK USED
<        ZER  R$IOF            IN CASE NO FCBLK ALOCATED
<        MOV  WB,IOPTT         STORE I/O TRACE TYPE
<        JSR  XSCNI            PREPARE TO SCAN FILEARG2
<        PPM  IOP13            FAIL
<        PPM  IOPA0            NULL FILE ARG2
< *
< IOPA0  MOV  XR,R$IO2         KEEP FILE ARG2
<        MOV  WA,XL            COPY LENGTH
<        JSR  GTSTG            CONVERT FILEARG1 TO STRING
<        PPM  IOP14            FAIL
<        MOV  XR,R$IO1         KEEP FILEARG1 PTR
<        JSR  GTNVR            CONVERT TO NATURAL VARIABLE
<        PPM  IOP00            JUMP IF NULL
<        BRN  IOP04            JUMP TO PROCESS NON-NULL ARGS
< *
< *      NULL FILEARG1
< *
< IOP00  BZE  XL,IOP01         SKIP IF BOTH ARGS NULL
<        JSR  IOPPF            PROCESS FILEARG2
<        JSR  SYSFC            CALL FOR FILEARG2 CHECK
<        PPM  IOP16            FAIL
<        BRN  IOP11            COMPLETE FILE ASSOCIATION
18859a17522,17538
> *      FIRST ARG NAME
> *      I      I
> *      +------+
> *      I      I-----+
> *      +------+     V
> *      I      I   +----------------+
> *                 I     =B$TRT     I
> *                 +----------------+
> *                 I =TRTIN/=TRTOU  I
> *                 +----------------+
> *                 I VALUE OR TRCHN +
> *                 +----------------+
> *           TRTER I                I-----+
> *                 +----------------+     V
> *           TRTRI I        0       I   +------+
> *                 +----------------+   I      I SVBLK
> *                  I/O TRACE BLOCK     +------+
18861c17540
< *      IOPUT (CONTINUED)
---
> *      1. ASSOCIATION TO STANDARD FILES.
18863c17542,17558
< *      HERE WITH 0 OR FCBLK PTR IN (XL)
---
> *      FIRST ARG NAME                      FILETAG VRBLK
> *      I      I                              I      I
> *      +------+  LK1                         +------+ LK2
> *      I      I---+                  +---+   I      I---+
> *      +------+   V                  I   V   +------+   V
> *      I      I  +----------------+  I  +----------------+
> *                I     =B$TRT     I  I  I     =B$TRT     I
> *                +----------------+  I  +----------------+
> *                I =TRTIN/=TRTOU  I  I  I     =TRTIO     I
> *                +----------------+  I  +----------------+
> *                I VALUE OR TRCHN I  I  I VALUE OR TRCHN I
> *                +----------------+  I  +----------------+
> *          TRTER I       0        I  I  I   0 OR IOTAG   I TRTAG
> *                +----------------+  I  +----------------+
> *          TRTRI I                I--+  I        0       I TRTRI
> *                +----------------+     +----------------+
> *                 I/O TRACE BLOCK           TRTIO BLOCK
18865,18875c17560
< IOP01  MOV  IOPTT,WB         GET TRACE TYPE
<        MOV  R$IOT,XR         GET 0 OR TRTRF PTR
<        JSR  TRBLD            BUILD TRBLK
<        MOV  XR,WC            COPY TRBLK POINTER
<        MOV  (XS)+,XR         GET VARIABLE FROM STACK
<        JSR  GTVAR            POINT TO VARIABLE
<        PPM  IOP15            FAIL
<        MOV  XL,R$ION         SAVE NAME POINTER
<        MOV  XL,XR            COPY NAME POINTER
<        ADD  WA,XR            POINT TO VARIABLE
<        SUB  *VRVAL,XR        SUBTRACT OFFSET,MERGE INTO LOOP
---
> *      2. REGULAR CASE.
18877,18902c17562,17579
< *      LOOP TO END OF TRBLK CHAIN IF ANY
< *
< IOP02  MOV  XR,XL            COPY BLK PTR
<        MOV  VRVAL(XR),XR     LOAD PTR TO NEXT TRBLK
<        BNE  (XR),=B$TRT,IOP03    JUMP IF NOT TRAPPED
<        BNE  TRTYP(XR),IOPTT,IOP02 LOOP IF NOT SAME ASSOCN
<        MOV  TRNXT(XR),XR     GET VALUE AND DELETE OLD TRBLK
< *
< *      IOPUT (CONTINUED)
< *
< *      STORE NEW ASSOCIATION
< *
< IOP03  MOV  WC,VRVAL(XL)     LINK TO THIS TRBLK
<        MOV  WC,XL            COPY POINTER
<        MOV  XR,TRNXT(XL)     STORE VALUE IN TRBLK
<        MOV  R$ION,XR         RESTORE POSSIBLE VRBLK POINTER
<        MOV  WA,WB            KEEP OFFSET TO NAME
<        JSR  SETVR            IF VRBLK, SET VRGET,VRSTO
<        MOV  R$IOT,XR         GET 0 OR TRTRF PTR
<        BNZ  XR,IOP19         JUMP IF TRTRF BLOCK EXISTS
<        EXI                   RETURN TO CALLER
< *
< *      NON STANDARD FILE
< *      SEE IF AN FCBLK HAS ALREADY BEEN ALLOCATED.
< *
< IOP04  ZER  WA               IN CASE NO FCBLK FOUND
---
> *      THE STRUCTURES BUILT FOR I/O ASSOCIATIONS ARE AS SHOWN
> *      ABOVE. A TRACE BLOCK CHAIN (TRCHN) MAY HOLD ANY OR ALL
> *      OF THE TYPES, =TRTIN, =TRTOU, =TRTIO, BUT NOT MORE THAN
> *      ONE BLOCK OF ANY GIVEN TYPE. CASES ARE -
> *      1. NO FILETAG OR IOTAG IS USED FOR ASSOCIATING STANDARD
> *         FILES (SYSRD, SYSPR, TERMINAL). THE I/O TRACE BLOCK
> *         IS DISTINGUISHED BY A NON-NULL TRTER FIELD POINTING
> *         TO THE RELEVANT SVBLK (V$INP, V$OUP, V$TER) AND A
> *         ZERO TRTRI FIELD. FOR TERMINAL, TRBLKS OF BOTH
> *         INPUT AND OUTPUT TYPE ARE CHAINED FROM THE FIRST ARG
> *         VIA THE TRCHN FIELD.
> *      2. THE I/O TRACE BLOCK FOR THE REGULAR CASE HAS A ZERO
> *         TRTER FIELD AND A POINTER TO A TRTIO BLOCK IS IN
> *         THE TRTRI FIELD. THE FILETAG MUST BE A NATURAL
> *         VARIABLE AND THE TRTIO TRACE BLOCK ATTACHED TO IT
> *         HOLDS THE IOTAG.
> *      THE EFFECT OF ENDFILE() IS TO CLEAR IOTAG AND BREAK LK2.
> *      THE EFFECT OF DETACH() IS TO BREAK LK1.
18903a17581,17586
> IOPUT  PRC  N,4              ENTRY POINT
>        MOV  WB,IOPWB         KEEP ASSOCIATION TYPE FLAG
>        JSR  GTSTG            CONVERT THIRD ARG TO STRING
>        PPM  IOP12            FAIL THIRD ARG
>        BNZ  WA,IOP01         SKIP IF NON NULL
>        ZER  XR               NOTE NULL ARG
18905c17588
< *      IOPUT (CONTINUED)
---
> *      PROCESS SECOND ARG
18907,18950c17590,17610
< *      SEARCH POSSIBLE TRBLK CHAIN TO PICK UP THE FCBLK
< *
< IOP05  MOV  XR,WB            REMEMBER BLK PTR
<        MOV  VRVAL(XR),XR     CHAIN ALONG
<        BNE  (XR),=B$TRT,IOP06 JUMP IF END OF TRBLK CHAIN
<        BNE  TRTYP(XR),=TRTFC,IOP05 LOOP IF MORE TO GO
<        MOV  XR,R$IOT         POINT TO FILE ARG1 TRBLK
<        MOV  TRFPT(XR),WA     GET FCBLK PTR FROM TRBLK
< *
< *      WA = 0 OR FCBLK PTR
< *      WB = PTR TO PRECEDING BLK TO WHICH ANY TRTRF BLOCK
< *           FOR FILE ARG1 MUST BE CHAINED.
< *
< IOP06  MOV  WA,R$IOF         KEEP POSSIBLE FCBLK PTR
<        MOV  WB,R$IOP         KEEP PRECEDING BLK PTR
<        JSR  IOPPF            PROCESS FILEARG2
<        JSR  SYSFC            SEE IF FCBLK REQUIRED
<        PPM  IOP16            FAIL
<        BZE  WA,IOP12         SKIP IF NO NEW FCBLK WANTED
<        BLT  WC,=NUM02,IOP6A  JUMP IF FCBLK IN DYNAMIC
<        JSR  ALOST            GET IT IN STATIC
<        BRN  IOP6B            SKIP
< *
< *      OBTAIN FCBLK IN DYNAMIC
< *
< IOP6A  JSR  ALLOC            GET SPACE FOR FCBLK
< *
< *      MERGE
< *
< IOP6B  MOV  XR,XL            POINT TO FCBLK
<        MOV  WA,WB            COPY ITS LENGTH
<        BTW  WB               GET COUNT AS WORDS (SGD APR80)
<        LCT  WB,WB            LOOP COUNTER
< *
< *      CLEAR FCBLK
< *
< IOP07  ZER  (XR)+            CLEAR A WORD
<        BCT  WB,IOP07         LOOP
<        BEQ  WC,=NUM02,IOP09  SKIP IF IN STATIC - DONT SET FIELDS
<        MOV  =B$XNT,(XL)      STORE XNBLK CODE IN CASE
<        MOV  WA,1(XL)         STORE LENGTH
<        BNZ  WC,IOP09         JUMP IF XNBLK WANTED
<        MOV  =B$XRT,(XL)      XRBLK CODE REQUESTED
< *
---
> IOP01  MOV  XR,R$IOR         KEEP FILEPROPS STRING PTR
>        JSR  IOFTG            CHECK SECOND ARG
>        PPM  IOP07            FAIL SECOND ARG
>        MOV  XL,R$IOL         KEEP SCBLK FOR FILETAG
>        MOV  XR,R$IOT         KEEP TRTIO BLK PTR
>        MOV  WA,IOPWA         KEEP IOTAG
>        MOV  WB,IOPVR         KEEP FILETAG VRBLK PTR
>        MOV  WC,IOPWC         KEEP FILETAG VALUE
>        MOV  (XS)+,XR         GET FIRST ARG OFF STACK
>        JSR  GTVAR            CONVERT TO NAME
>        PPM  IOP13            FAIL FIRST ARG
>        MOV  XL,R$IO1         SAVE FIRST ARG NAME BASE ADRS
>        MOV  WA,IOPNF         SAVE FIRST ARG NAME OFFSET
>        MOV  WB,XR            FILETAG VRBLK PTR
>        BNZ  VRLEN(XR),IOP02  NOT SPECIAL CASE IF NOT SYS NAME
>        MOV  VRSVP(XR),WC     GET SVBLK PTR
>        MOV  =TRTIN,WB        IN CASE .INPUT
>        BEQ  WC,=V$INP,IOP06  JUMP IF .INPUT
>        MOV  =TRTOU,WB        IN CASE .OUTPUT OR .TERMINAL
>        BEQ  WC,=V$OUP,IOP08  JUMP IF .OUTPUT
>        BEQ  WC,=V$TER,IOP09  JUMP IF .TERMINAL
18952d17611
< *      IOPUT (CONTINUED)
18954c17613
< *      COMPLETE FCBLK INITIALISATION
---
> *      NORMAL CASE
18956,18958c17615,17624
< IOP09  MOV  R$IOT,XR         GET POSSIBLE TRBLK PTR
<        MOV  XL,R$IOF         STORE FCBLK PTR
<        BNZ  XR,IOP10         JUMP IF TRBLK ALREADY FOUND
---
> IOP02  BNZ  R$IOT,IOP03      SKIP IF TRTIO BLK EXISTS ALREADY
>        MOV  =TRTIO,WB        TRACE BLOCK TYPE WORD
>        ZER  XR               ZERO IOTAG WORD
>        ZER  XL               ZERO TRTRI FIELD
>        JSR  TRBLD            BUILD TRTIO TRBLK
>        MOV  XR,R$IOT         SAVE TRTIO BLK PTR
>        MOV  IOPVR,XL         GET FILETAG VRBLK
>        MOV  *VRVAL,WA        OFFSET TO VALUE FIELD
>        JSR  TRCHN            PLACE IN TRBLK CHAIN FOR FILETAG
>        PPM                   UNUSED RETURN
18960c17626
< *      A NEW TRBLK IS NEEDED
---
> *      MERGE TO BUILD TRBLK FOR FIRST ARG
18962,18970c17628,17630
<        MOV  =TRTFC,WB        TRTYP FOR FCBLK TRAP BLK
<        JSR  TRBLD            MAKE THE BLOCK
<        MOV  XR,R$IOT         COPY TRTRF PTR
<        MOV  R$IOP,XL         POINT TO PRECEDING BLK
<        MOV  VRVAL(XL),VRVAL(XR) COPY VALUE FIELD TO TRBLK
<        MOV  XR,VRVAL(XL)     LINK NEW TRBLK INTO CHAIN
<        MOV  XL,XR            POINT TO PREDECESSOR BLK
<        JSR  SETVR            SET TRACE INTERCEPTS
<        MOV  VRVAL(XR),XR     RECOVER TRBLK PTR
---
> IOP03  MOV  =TRTIN,WB        IN CASE INPUT
>        BZE  IOPWB,IOP04      SKIP IF SO
>        MOV  =TRTOU,WB        IN CASE OUTPUT
18972c17632
< *      XR IS PTR TO TRBLK, XL IS FCBLK PTR OR 0
---
> *      BUILD TRACE BLOCK
18974c17634,17641
< IOP10  MOV  R$IOF,TRFPT(XR)  STORE FCBLK PTR
---
> IOP04  ICV  IOPWB            NOTE NOT STANDARD I/O FILE
>        MOV  R$IOT,XL         TRTIO BLK PTR TO TRTRI FIELD
>        ZER  XR               ZERO TRTER FIELD
>        JSR  TRBLD            BUILD I/O TRACE BLOCK
>        MOV  R$IO1,XL         ASSOCIATED VBL NAME BASE
>        MOV  IOPNF,WA         NAME OFFSET
>        JSR  TRCHN            UPDATE TRACE CHAIN FOR FIRST ARG
>        PPM                   UNUSED RETURN
18976c17643
< *      CALL SYSIO TO COMPLETE FILE ACCESSING
---
> *      PREPARE FOR AND MAKE SYSIO CALL
18978,19003c17645,17656
< IOP11  MOV  R$IOF,WA         COPY FCBLK PTR OR 0
<        MOV  IOPTT,WB         GET INPUT/OUTPUT FLAG
<        MOV  R$IO2,XR         GET FILE ARG2
<        MOV  R$IO1,XL         GET FILE ARG1
<        JSR  SYSIO            ASSOCIATE TO THE FILE
<        PPM  IOP17            FAIL
<        PPM  IOP18            FAIL
<        BNZ  R$IOT,IOP01      NOT STD INPUT IF NON-NULL TRTRF BLK
<        BNZ  IOPTT,IOP01      JUMP IF OUTPUT
<        BZE  WC,IOP01         NO CHANGE TO STANDARD READ LENGTH
<        MOV  WC,CSWIN         STORE NEW READ LENGTH FOR STD FILE
<        BRN  IOP01            MERGE TO FINISH THE TASK
< *
< *      SYSFC MAY HAVE RETURNED A POINTER TO A PRIVATE FCBLK
< *
< IOP12  BNZ  XL,IOP09         JUMP IF PRIVATE FCBLK
<        BRN  IOP11            FINISH THE ASSOCIATION
< *
< *      FAILURE RETURNS
< *
< IOP13  EXI  1                3RD ARG NOT A STRING
< IOP14  EXI  2                2ND ARG UNSUITABLE
< IOP15  EXI  3                1ST ARG UNSUITABLE
< IOP16  EXI  4                FILE SPEC WRONG
< IOP17  EXI  5                I/O FILE DOES NOT EXIST
< IOP18  EXI  6                I/O FILE CANNOT BE READ/WRITTEN
---
> IOP05  MOV  R$IOL,XL         FILETAG SCBLK PTR
>        MOV  R$IOR,XR         FILEPROPS SCBLK PTR
>        MOV  IOPWA,WA         IOTAG OR ZERO
>        MOV  IOPWB,WB         ASSOCIATION TYPE NUMBER
>        MOV  IOPWC,WC         POSSIBLE FILETAG VALUE
>        JSR  SYSIO            CALL SYSTEM ROUTINE TO OPEN FILE
>        PPM  IOP14            FAIL RETURN
>        PPM  EROSI            ERROR RETURN
>        MOV  R$IOT,XL         TRTIO POINTER
>        BZE  XL,IOP11         DONE IF ZERO
>        MOV  WA,TRTAG(XL)     STORE RETURNED IOTAG
>        BRN  IOP11            SUCCEED
19006c17659
< *      IOPUT (CONTINUED)
---
> *      SPECIAL CASE OF .INPUT
19008,19009c17661
< *      ADD TO IOCHN CHAIN OF ASSSOCIATED VARIABLES UNLESS ALREAD
< *      PRESENT.
---
> IOP06  BZE  IOPWB,IOP09      FAIL OUTPUT(.X,.INPUT)
19011c17663
< IOP19  MOV  R$ION,WC         WC = NAME BASE, WB = NAME OFFSET
---
> *      BAD FILETAG
19013c17665
< *      SEARCH LOOP
---
> IOP07  EXI  2                ERRONEOUS SECOND ARG
19015,19019c17667
< IOP20  MOV  TRTRF(XR),XR     NEXT LINK OF CHAIN
<        BZE  XR,IOP21         NOT FOUND
<        BNE  WC,IONMB(XR),IOP20 NO MATCH
<        BEQ  WB,IONMO(XR),IOP22 EXIT IF MATCHED
<        BRN  IOP20            LOOP
---
> *      SPECIAL CASE OF .OUTPUT
19021c17669
< *      NOT FOUND
---
> IOP08  BZE  IOPWB,IOP07      FAIL INPUT(.X,.OUTPUT)
19023,19032c17671
< IOP21  MOV  *NUM05,WA        SPACE NEEDED
<        JSR  ALLOC            GET IT
<        MOV  =B$XRT,(XR)      STORE XRBLK CODE
<        MOV  WA,1(XR)         STORE LENGTH
<        MOV  WC,IONMB(XR)     STORE NAME BASE
<        MOV  WB,IONMO(XR)     STORE NAME OFFSET
<        MOV  R$IOT,XL         POINT TO TRTRF BLK
<        MOV  TRTRF(XL),WA     GET PTR FIELD CONTENTS
<        MOV  XR,TRTRF(XL)     STORE PTR TO NEW BLOCK
<        MOV  WA,TRTRF(XR)     COMPLETE THE LINKING
---
> *      SPECIAL CASE OF .TERMINAL AND MERGE FOR OTHERS
19034c17673,17685
< *      INSERT FCBLK ON FCBLK CHAIN FOR SYSEJ, SYSXI
---
> IOP09  ZER  R$IOT            NOTE NO TRTIO BLOCK
>        MOV  WC,XR            SVBLK PTR FOR TRTER FIELD
>        ZER  XL               ZERO TRTRI FIELD
>        JSR  TRBLD            BUILD TRBLK
>        MOV  R$IO1,XL         ASSOCIATED VBL NAME BASE
>        MOV  IOPNF,WA         NAME OFFSET
>        JSR  TRCHN            UPDATE TRACE CHAIN FOR ARG 1
>        PPM                   UNUSED RETURN
>        BNE  TRTER(XR),=V$TER,IOP10 DONE UNLESS TERMINAL
>        BNE  TRTYP(XR),=TRTOU,IOP10 DONE IF TERM. 2ND TIME ROUND
>        MOV  =V$TER,WC        TRTER FIELD
>        MOV  =TRTIN,WB        TRTYP FIELD
>        BRN  IOP09            REPEAT LOOP FOR TERMINAL
19036,19037c17687
< IOP22  BZE  R$IOF,IOP25      SKIP IF NO FCBLK
<        MOV  R$FCB,XL         PTR TO HEAD OF EXISTING CHAIN
---
> *      CHECK SPECIAL CASES FOR NON-NULL THIRD ARGS
19039c17689,17690
< *      SEE IF FCBLK ALREADY ON CHAIN
---
> IOP10  ZER  IOPWA            NO IOTAG
>        BNZ  R$IOR,IOP05      MERGE ONLY IF FILEPROPS NON-NULL
19041,19044c17692
< IOP23  BZE  XL,IOP24         NOT ON IF END OF CHAIN
<        BEQ  3(XL),R$IOF,IOP25 DONT DUPLICATE IF FIND IT
<        MOV  2(XL),XL         GET NEXT LINK
<        BRN  IOP23            LOOP
---
> *      SUCCESS RETURN
19046c17694,17698
< *      NOT FOUND SO ADD AN ENTRY FOR THIS FCBLK
---
> IOP11  ZER  R$IO1            CLEAR GARBAGE
>        ZER  R$IOL
>        ZER  R$IOR
>        ZER  R$IOT
>        EXI                   RETURN TO CALLER
19048,19054c17700
< IOP24  MOV  *NUM04,WA        SPACE NEEDED
<        JSR  ALLOC            GET IT
<        MOV  =B$XRT,(XR)      STORE BLOCK CODE
<        MOV  WA,1(XR)         STORE LENGTH
<        MOV  R$FCB,2(XR)      STORE PREVIOUS LINK IN THIS NODE
<        MOV  R$IOF,3(XR)      STORE FCBLK PTR
<        MOV  XR,R$FCB         INSERT NODE INTO FCBLK CHAIN
---
> *      ERROR RETURNS
19056c17702
< *      RETURN
---
> IOP12  EXI  1                ERRONEOUS THIRD ARG
19058c17704,17706
< IOP25  EXI                   RETURN TO CALLER
---
> IOP13  EXI  3                ERRONEOUS FIRST ARG
> *
> IOP14  EXI  4                FAIL RETURN FROM SYSIO
19098,19099c17746
<        JSR  PRTVL            PRINT KEYWORD VALUE
<        JSR  PRTNL            TERMINATE PRINT LINE
---
>        JSR  PRTVF            PRINT KEYWORD VALUE
19144c17791
< KWNM1  ERB  251,KEYWORD OPERAND IS NOT NAME OF DEFINED KEYWORD
---
> KWNM1  ERB  230,KEYWORD OPERAND IS NOT NAME OF DEFINED KEYWORD
19173c17820
<        BLO  WA,WB,LCMP1      JUMP IF ARG 1 LENGTH IS SMALLER
---
>        BLO  WA,WB,LCMP0      JUMP IF ARG 1 LENGTH IS SMALLER
19178,19179c17825,17830
< LCMP1  CMC  LCMP4,LCMP3      COMPARE STRINGS, JUMP IF UNEQUAL
<        BNE  WB,WC,LCMP2      IF EQUAL, JUMP IF LENGTHS UNEQUAL
---
> LCMP0  BZE  WA,LCMP1         SKIP IF A NULL ARG
>        CMC  LCMP4,LCMP3      COMPARE STRINGS, JUMP IF UNEQUAL
> *
> *      EQUAL STRINGS OR AT LEAST ONE NULL ARG
> *
> LCMP1  BNE  WB,WC,LCMP2      IF EQUAL, JUMP IF LENGTHS UNEQUAL
19239c17890,17897
<        BNZ  CNTTL,LIST5      JUMP IF -TITLE OR -STITL
---
>        MOV  STAGE,WA         GET COMPILER STAGE
>        BEQ  WA,=STGIC,LIST0  LIST OK IF INITIAL COMPILE
>        BEQ  WA,=STGCE,LIST0  LIST OK IF END LINE
>        BRN  LIST4            ELSE NO LISTING OF SOURCE
> *
> *      HERE WHEN STAGE IS OK TO LIST
> *
> LIST0  BNZ  CNTTL,LIST5      JUMP IF -TITLE OR -STITL
19245c17903
< LIST0  MOV  R$CIM,XR         LOAD POINTER TO CURRENT IMAGE
---
> LIST1  MOV  R$CIM,XR         LOAD POINTER TO CURRENT IMAGE
19251d17908
<        BNE  STAGE,=STGIC,LIST1 SKIP IF EXECUTE TIME
19254,19257c17911
< *
< *      PRINT STATEMENT NUMBER
< *
< LIST1  JSR  PRTIN            ELSE PRINT STATEMENT NUMBER
---
>        JSR  PRTIN            ELSE PRINT STATEMENT NUMBER
19267c17921
<        JSR  PRTST            PRINT IT
---
>        JSR  PRTSF            PRINT IT
19269,19273c17923
<        BNZ  ERLST,LIST3      JUMP IF ERROR COPY TO INT.CH.
<        JSR  PRTNL            TERMINATE LINE
<        BZE  CSWDB,LIST3      JUMP IF -SINGLE MODE
<        JSR  PRTNL            ELSE ADD A BLANK LINE
<        ICV  LSTLC            AND BUMP LINE COUNTER
---
>        MNZ  LSTPF            SET FLAG FOR LINE PRINTED
19275,19278d17924
< *      HERE AFTER PRINTING SOURCE IMAGE
< *
< LIST3  MNZ  LSTPF            SET FLAG FOR LINE PRINTED
< *
19290,19291c17936,17937
<        BZE  PRICH,LIST7      SKIP IF LISTING TO REGULAR PRINTER
<        BEQ  R$TTL,=NULLS,LIST0 TERMINAL LISTING OMITS NULL TITLE
---
>        BNZ  PRLEN,LIST7      SKIP IF LISTING TO REGULAR PRINTER
>        BEQ  R$TTL,=NULLS,LIST1 TERMINAL LISTING OMITS NULL TITLE
19296c17942
<        BRN  LIST0            MERGE
---
>        BRN  LIST1            MERGE
19316c17962
<        JSR  PRTNL            TERMINATE TITLE LINE
---
>        JSR  PRTFH            TERMINATE TITLE LINE
19323,19324c17969
<        JSR  PRTST            ELSE PRINT SUB-TITLE
<        JSR  PRTNL            TERMINATE LINE
---
>        JSR  PRTSF            ELSE PRINT SUB-TITLE
19329c17974
< LSTT1  JSR  PRTNL            PRINT A BLANK LINE
---
> LSTT1  JSR  PRTFH            PRINT A BLANK LINE
19358c18003
<        BZE  CSWLS,NXTS2      JUMP IF -NOLIST
---
>        BZE  CSWLS,NXTS1      JUMP IF -NOLIST
19360c18005
<        BZE  XR,NXTS2         JUMP IF NO IMAGE
---
>        BZE  XR,NXTS1         JUMP IF NO IMAGE
19363,19364c18008,18009
<        BNE  WA,=CH$MN,NXTS1  JUMP IF NOT CTRL CARD
<        BZE  CSWPR,NXTS2      JUMP IF -NOPRINT
---
>        BEQ  WA,=CH$MN,NXTS1  SKIP LISTING IF CONTROL CARD
>        JSR  LISTR            LIST LINE
19366,19369d18010
< *      HERE TO CALL LISTER
< *
< NXTS1  JSR  LISTR            LIST LINE
< *
19372c18013
< NXTS2  MOV  R$CNI,XR         POINT TO NEXT IMAGE
---
> NXTS1  MOV  R$CNI,XR         POINT TO NEXT IMAGE
19377c18018
<        BLO  WA,WB,NXTS3      SKIP IF NOT TOO LONG
---
>        BLO  WA,WB,NXTS2      SKIP IF NOT TOO LONG
19382c18023
< NXTS3  MOV  WA,SCNIL         USE AS RECORD LENGTH
---
> NXTS2  MOV  WA,SCNIL         USE AS RECORD LENGTH
19505c18146
<        WTB  WA               CONVERT TO BYTE OFFSET
---
>        WTB  WA               CONVERT TO BAU OFFSET
19697d18337
<        EJC
19699a18340
>        EJC
19714,19716c18355
<        JSR  PRTST            AND PRINT IT
<        JSR  PRTNL            FOLLOWED BY NEWLINE
<        JSR  PRTNL            AND ANOTHER
---
>        JSR  PRTFB            AND PRINT IT
19718,19719c18357
<        JSR  PRTST            PRINT IT
<        JSR  PRTNL            NEW LINE
---
>        JSR  PRTSF            PRINT IT
19721,19723c18359
<        JSR  PRTST            PRINT IT
<        JSR  PRTNL            NEW LINE
<        JSR  PRTNL            AND ANOTHER BLANK LINE
---
>        JSR  PRTFB
19726c18362,18363
<        ADD  *NUM02,XR        BIAS PAST XNBLK HEADER (SGD07)
---
>        ADD  *NUM02,XR        BIASS PAST XNBLK HEADER
>        EJC
19728c18365
< *      LOOP HERE TO PRINT SUCCESSIVE ENTRIES
---
> *      PRFLR (CONTINUED)
19729a18367,18368
> *      LOOP FOR PRINTING TABLE ENTRIES
> *
19748c18387
< *      MERGE AFTER PRINTING TIME
---
> *      PRINT A BLANK
19750c18389
< PRFL2  JSR  PRTNL            THATS ANOTHER LINE
---
> PRFL2  JSR  PRTFH            THATS ANOTHER LINE
19752c18391
< *      HERE TO GO TO NEXT ENTRY
---
> *      TEST TO SEE IF LOOP FINISHED
19754c18393
< PRFL3  ADD  *PF$I2,XR        BUMP INDEX PTR (SGD07)
---
> PRFL3  ADD  *PF$I2,XR        BUMP INDEX POINTER
19759c18398
< *      HERE TO EXIT
---
> *      RETURN POINT
19775c18414
<        MOV  WA,PFSVW         SAVE WA (SGD07)
---
>        MOV  WA,PFSVW         SAVE WA
19786c18425
<        SUB  =NUM01,PFNTE     ADJUST FOR EXTRA COUNT (SGD07)
---
>        SUB  =NUM01,PFNTE     ADJUST FOR EXTRA COUNT
19804c18443,18444
<        BCT  WA,PFLU1         AND ALLLLLLL THE REST
---
>        BCT  WA,PFLU1         AND ALL THE REST
>        EJC
19805a18446,18447
> *      PRFLU (CONTINUED)
> *
19828c18470
< *      MERGE HERE TO EXIT
---
> *      RETURN POINT
19831c18473
<        MOV  PFSVW,WA         RESTORE SAVED REG
---
>        MOV  PFSVW,WA         RESTORE WA
19841d18482
<        EJC
19842a18484
>        EJC
19844c18486
< *      PRPAR - PROCESS PRINT PARAMETERS
---
> *      PRPAR -- PROCESS PRINT PARAMETERS
19846d18487
< *      (WC)                  IF NONZERO ASSOCIATE TERMINAL ONLY
19848c18489
< *      (XL,XR,WA,WB,WC)      DESTROYED
---
> *      (XR,WA,WB,WC)         DESTROYED
19850,19853d18490
< *      SINCE MEMORY ALLOCATION IS UNDECIDED ON INITIAL CALL,
< *      TERMINAL CANNOT BE ASSOCIATED. THE ENTRY WITH WC NON-ZERO
< *      IS PROVIDED SO A LATER CALL CAN BE MADE TO COMPLETE THIS.
< *
19855c18492
<        BNZ  WC,PRPA7         JUMP TO ASSOCIATE TERMINAL
---
>        MOV  XL,-(XS)         SAVE XL
19866,19868c18503,18504
<        MOV  PRLEN,WB         GET PRIOR LENGTH IF ANY
<        BZE  WB,PRPA2         SKIP IF NO LENGTH
<        BGT  WA,WB,PRPA3      SKIP STORING IF TOO BIG
---
>        BZE  PRLEN,PRPA2      SKIP IF NOT SYSXI RESUMPTION
>        BHI  WA,PRLEN,PRPA3   SKIP IF BIGGER THAN PRIOR BFRS
19874c18510
< *      PROCESS BITS OPTIONS
---
> *      CHECK TERMINAL BUFFER SIZE
19876,19879c18512,18513
< PRPA3  MOV  BITS3,WB         BIT 3 MASK
<        ANB  WC,WB            GET -NOLIST BIT
<        ZRB  WB,PRPA4         SKIP IF CLEAR
<        ZER  CSWLS            SET -NOLIST
---
> PRPA3  BZE  TTLEN,PRPA4      SKIP IF NOT SYSXI RESUMPTION
>        BHI  XL,TTLEN,PRPA5   SKIP IF TOO BIG
19881c18515
< *      CHECK IF FAIL REPORTS GOTO INTERACTIVE CHANNEL
---
> *      STORE TERMINAL BUFFER LENGTH
19883c18517,18521
< PRPA4  MOV  BITS1,WB         BIT 1 MASK
---
> PRPA4  MOV  XL,TTLEN         BFR LENGTH
> *
> *      PROCESS BITS OPTIONS
> *
> PRPA5  MOV  BITS1,WB         BIT 1 MASK
19885c18523
<        MOV  WB,ERICH         STORE INT. CHAN. ERROR FLAG
---
>        MOV  WB,TTINS         INPUT FROM TERMINAL FLAG
19888,19894c18526,18533
<        MOV  WB,PRICH         FLAG FOR STD PRINTER ON INT. CHAN.
<        MOV  BITS4,WB         BIT 4 MASK
<        ANB  WC,WB            GET BIT
<        MOV  WB,CPSTS         FLAG FOR COMPILE STATS SUPPRESSN.
<        MOV  BITS5,WB         BIT 5 MASK
<        ANB  WC,WB            GET BIT
<        MOV  WB,EXSTS         FLAG FOR EXEC STATS SUPPRESSION
---
>        MOV  WB,TTOUS         STD OUTPUT TO TERMINAL FLAG
>        MOV  TTLEN,TTERL      ERRORS TO TERML IF AVAILABLE
>        MOV  PRLEN,PRAVL      NOTE IF A PRINT FILE IS AVAILABLE
>        ZRB  WB,PRPA6         IF FLAG SET, CLEAR TTERL SINCE ...
>        ZER  TTERL            ... TERML GETS ALL OUTPUT ALREADY
>        MOV  TTLEN,TTOUS      REGULAR O/P TO TERML IF AVAILABLE
>        MOV  TTLEN,PRLEN      REVISED PRINT BUFFER LENGTH
>        ZER  TTLEN            DONT NEED SEPARATE TERML BUFFER
19899,19904c18538
<        MOV  BITS6,WB         BIT 6 MASK
<        ANB  WC,WB            GET BIT
<        MOV  WB,PRECL         EXTENDED/COMPACT LISTING FLAG
<        SUB  =NUM08,WA        POINT 8 CHARS FROM LINE END
<        ZRB  WB,PRPA5         JUMP IF NOT EXTENDED
<        MOV  WA,LSTPO         STORE FOR LISTING PAGE HEADINGS
---
> *      GET OFFSET TO /PAGE NN/ PART OF HEADER
19906c18540,18543
< *       CONTINUE OPTION PROCESSING
---
> PRPA6  MOV  PRLEN,WA         STD BFR LENGTH
>        BNZ  WA,PRPA7         USE IF NON-ZERO
>        MOV  TTLEN,WA         ELSE TRY TERMINAL
>        BZE  WA,PRPA8         GIVE UP IF ZERO ALSO
19908,19920c18545
< PRPA5  MOV  BITS7,WB         BIT 7 MASK
<        ANB  WC,WB            GET BIT 7
<        MOV  WB,CSWEX         SET -NOEXECUTE IF NON-ZERO
<        MOV  BIT10,WB         BIT 10 MASK
<        ANB  WC,WB            GET BIT 10
<        MOV  WB,HEADP         PRETEND PRINTED TO OMIT HEADERS
<        MOV  BITS9,WB         BIT 9 MASK
<        ANB  WC,WB            GET BIT 9
<        MOV  WB,PRSTO         KEEP IT AS STD LISTING OPTION
<        ZRB  WB,PRPA6         SKIP IF CLEAR
<        MOV  PRLEN,WA         GET PRINT BUFFER LENGTH
<        SUB  =NUM08,WA        POINT 8 CHARS FROM LINE END
<        MOV  WA,LSTPO         STORE PAGE OFFSET
---
> *      GET OFFSET
19922c18547,18552
< *      CHECK FOR TERMINAL
---
> PRPA7  MOV  WA,PRLEN         STORE AS BUFFER LENGTH
>        SUB  =NUM08,WA        JUST BEFORE END OF LINE
>        MOV  WA,LSTPO         KEEP IT
>        MOV  TTOUS,WB         CONSTRUCT VALUE FOR ...
>        ORB  PRAVL,WB         ... USE IN DECIDING WHETHER TO ...
>        MOV  WB,PRPUT         ... PUT STRINGS IN OUTPUT BUFFER
19924,19932c18554
< PRPA6  ANB  BITS8,WC         SEE IF TERMINAL TO BE ACTIVATED
<        BNZ  WC,PRPA7         JUMP IF TERMINAL REQUIRED
<        BZE  INITR,PRPA8      JUMP IF NO TERMINAL TO DETACH
<        MOV  =V$TER,XL        PTR TO /TERMINAL/
<        JSR  GTNVR            GET VRBLK POINTER
<        PPM                   CANT FAIL
<        MOV  =NULLS,VRVAL(XR) CLEAR VALUE OF TERMINAL
<        JSR  SETVR            REMOVE ASSOCIATION
<        BRN  PRPA8            RETURN
---
> *      MORE BITS
19934c18556,18559
< *      ASSOCIATE TERMINAL
---
> PRPA8  MOV  BITS3,WB         BIT 3 MASK
>        ANB  WC,WB            GET -NOLIST BIT
>        ZRB  WB,PRPA9         SKIP IF CLEAR
>        ZER  CSWLS            SET -NOLIST
19936,19945c18561
< PRPA7  MNZ  INITR            NOTE TERMINAL ASSOCIATED
<        BZE  DNAMB,PRPA8      CANT IF MEMORY NOT ORGANISED
<        MOV  =V$TER,XL        POINT TO TERMINAL STRING
<        MOV  =TRTOU,WB        OUTPUT TRACE TYPE
<        JSR  INOUT            ATTACH OUTPUT TRBLK TO VRBLK
<        MOV  XR,-(XS)         STACK TRBLK PTR
<        MOV  =V$TER,XL        POINT TO TERMINAL STRING
<        MOV  =TRTIN,WB        INPUT TRACE TYPE
<        JSR  INOUT            ATTACH INPUT TRACE BLK
<        MOV  (XS)+,VRVAL(XR)  ADD OUTPUT TRBLK TO CHAIN
---
> *      MORE BITS
19947c18563,18575
< *      RETURN POINT
---
> PRPA9  MOV  BITS4,WB         BIT 4 MASK
>        ANB  WC,WB            GET BIT
>        MOV  WB,CPSTS         FLAG FOR COMPILE STATS SUPPRESSN.
>        MOV  BITS5,WB         BIT 5 MASK
>        ANB  WC,WB            GET BIT
>        MOV  WB,EXSTS         FLAG FOR EXEC STATS SUPPRESSION
>        MOV  BITS6,WB         BIT 6 MASK
>        ANB  WC,WB            GET BIT
>        MOV  WB,NOXEQ         SET NOEXECUTE IF NON-ZERO
>        MOV  BITS7,WB         BIT 7 MASK
>        ANB  WC,WB            GET BIT
>        ZRB  WB,PRP10         SKIP IF NOT SET
>        ZER  TTERL            CLEAR ERRORS TO TERML IF SET
19949c18577,18589
< PRPA8  EXI                   RETURN
---
> *      MORE BITS
> *
> PRP10  MOV  BITS8,WB         BIT 8 MASK
>        ANB  WC,WB            GET BIT
>        MOV  WB,HEADN         SYSID HEADERS INCLUDE/OMIT FLAG
>        MOV  BITS9,WB         BIT 9 MASK
>        ANB  WC,WB            GET BIT
>        MOV  WB,PRSTO         STANDARD LISTING FLAG
>        MOV  BIT10,WB         BIT 10 MASK
>        ANB  WC,WB            GET BIT
>        MOV  WB,PRECL         EXTENDED LISTING OPTION
>        MOV  (XS)+,XL         RESTORE XL
>        EXI                   RETURN
19953c18593
< *      PRTCH -- PRINT A CHARACTER
---
> *      PRTCF -- PRINT CHAR TO STD PRINTER AND FLUSH BFR
19954a18595,18605
> *      (WA)                  CHAR TO PRINT
> *      JSR  PRTCF            CALL TO PRINT AND FLUSH
> *
> PRTCF  PRC  E,0              ENTRY POINT
>        JSR  PRTCH            PRINT CHARACTER
>        JSR  PRTFH            FLUSH BUFFER
>        EXI                   RETURN TO CALLER
>        ENP                   END PROCEDURE PRTCF
> *
> *      PRTCH -- PRINT A CHARACTER ON STANDARD PRINTER
> *
19960a18612
>        BZE  PRLEN,PTCH2      SKIP IF NO PRINT FILE
19962,19963c18614,18615
<        BNE  PROFS,PRLEN,PRCH1 JUMP IF ROOM IN BUFFER
<        JSR  PRTNL            ELSE PRINT THIS LINE
---
>        BNE  PROFS,PRLEN,PTCH1 JUMP IF ROOM IN BUFFER
>        JSR  PRTFH            ELSE PRINT THIS LINE
19967c18619
< PRCH1  MOV  PRBUF,XR         POINT TO PRINT BUFFER
---
> PTCH1  MOV  PRBUF,XR         POINT TO PRINT BUFFER
19973c18625,18628
<        EXI                   RETURN TO PRTCH CALLER
---
> *
> *      RETURN POINT
> *
> PTCH2  EXI                   RETURN TO PRTCH CALLER
19974a18630,18640
> *
> *      PRTFB -- PRINT STRING, FLUSH BFR AND PRINT BLANK LINE
> *
> *      (XR)                  STRING TO PRINT
> *      JSR  PRTFB            CALL FOR PRINT FLUSH AND BLANK
> *
> PRTFB  PRC  E,0              ENTRY POINT
>        JSR  PRTSF            PRINT AND FLUSH
>        JSR  PRTFH            PRINT BLANK
>        EXI                   RETURN TO CALLER
>        ENP                   END PROCEDURE PRTFB
19977c18643
< *      PRTIC -- PRINT TO INTERACTIVE CHANNEL
---
> *      PRTFH -- FLUSH STANDARD PRINT BUFFER
19979,19982c18645,18649
< *      PRTIC IS CALLED TO PRINT THE CONTENTS OF THE STANDARD
< *      PRINT BUFFER TO THE INTERACTIVE CHANNEL. IT IS ONLY
< *      CALLED AFTER PRTST HAS SET UP THE STRING FOR PRINTING.
< *      IT DOES NOT CLEAR THE BUFFER.
---
> *      PRTFH PRINTS THE CONTENTS OF THE PRINT BUFFER, RESETS
> *      THE BUFFER TO ALL BLANKS AND RESETS THE PRINT POINTER.
> *      ON ITS FIRST CALL IT MAY PRINT LISTING HEADERS.
> *      IF TTLST IS NON-ZERO, IT COPIES PRINT BUFFER TO
> *      TERMINAL AND FLUSHES THIS ALSO.
19984,19985c18651
< *      JSR  PRTIC            CALL FOR PRINT
< *      (WA,WB)               DESTROYED
---
> *      JSR  PRTFH            CALL TO FLUSH BUFFER
19987,19992c18653,18655
< PRTIC  PRC  E,0              ENTRY POINT
<        MOV  XR,-(XS)         SAVE XR
<        MOV  PRBUF,XR         POINT TO BUFFER
<        MOV  PROFS,WA         NO OF CHARS
<        JSR  SYSPI            PRINT
<        PPM  PRTC2            FAIL RETURN
---
> PRTFH  PRC  R,0              ENTRY POINT
>        BNZ  HEADP,PTFH1      WERE HEADERS PRINTED
>        JSR  PRTPS            NO - PRINT THEM
19994c18657
< *      RETURN
---
> *      HEADERS DONE
19996,19997c18659,18668
< PRTC1  MOV  (XS)+,XR         RESTORE XR
<        EXI                   RETURN
---
> PTFH1  BZE  PRLEN,PTFH4      SKIP IF NO OUTPUT POSSIBLE
>        MOV  XL,-(XS)         SAVE XL
>        MOV  XR,-(XS)         SAVE XR
>        MOV  WA,-(XS)         SAVE WA
>        MOV  WC,-(XS)         SAVE WC
>        MOV  PRBUF,XR         LOAD POINTER TO BUFFER
>        MOV  PROFS,WC         LOAD NUMBER OF CHARS IN BUFFER
>        BNZ  PRAVL,PTFH5      SKIP IF PRINT FILE AVAILABLE
>        BNZ  TTOUS,PTFH2      SKIP IF STD OUTPUT TO TERML
>        BZE  TTLST,PTFH3      LAST POSSIBILITY IS ERROR TO TERML
19999c18670
< *      ERROR OCCURED
---
> *       SEND TO TERMINAL
20001,20004c18672,18674
< PRTC2  ZER  ERICH            PREVENT LOOPING
<        ERB  252,ERROR ON PRINTING TO INTERACTIVE CHANNEL
<        BRN  PRTC1            RETURN
<        ENP                   PROCEDURE PRTIC
---
> PTFH2  JSR  SYSPI            PRINT TO TERMINAL
>        PPM  PTFH6            FAIL
>        PPM  EROSI            ERROR
20005a18676
> *      PRTFH (CONTINUED)
20007c18678
< *      PRTIS -- PRINT TO INTERACTIVE AND STANDARD PRINTER
---
> *      BLANK BUFFER
20009,20013c18680,18688
< *      PRTIS PUTS A LINE FROM THE PRINT BUFFER ONTO THE
< *      INTERACTIVE CHANNEL (IF ANY) AND THE STANDARD PRINTER.
< *      IT ALWAYS PRINTS TO THE STANDARD PRINTER BUT DOES
< *      NOT DUPLICATE LINES IF THE STANDARD PRINTER IS
< *      INTERACTIVE.  IT CLEARS DOWN THE PRINT BUFFER.
---
> PTFH3  MOV  PRBLK,XL         POINT TO BLANKING STRING
>        MOV  PRCHS,XR         POINT TO BUFFER
>        MOV  PRCMV,WA         COUNT OF BAUS TO MOVE
>        MVW                   MOVE BLANKS INTO BUFFER
>        ZER  PROFS            RESET OFFSET
>        MOV  (XS)+,WC         RESTORE WC
>        MOV  (XS)+,WA         RECOVER WA
>        MOV  (XS)+,XR         RESTORE XR
>        MOV  (XS)+,XL         RESTORE XL
20015,20016c18690
< *      JSR  PRTIS            CALL FOR PRINTING
< *      (WA,WB)               DESTROYED
---
> *      RETURN POINT
20018,20021c18692
< PRTIS  PRC  E,0              ENTRY POINT
<        BNZ  PRICH,PRTS1      JUMP IF STANDARD PRINTER IS INT.CH.
<        BZE  ERICH,PRTS1      SKIP IF NOT DOING INT. ERROR REPS.
<        JSR  PRTIC            PRINT TO INTERACTIVE CHANNEL
---
> PTFH4  EXI                   RETURN TO CALLER
20023c18694
< *      MERGE AND EXIT
---
> *      HERE FOR REGULAR PRINT FILE
20025,20027c18696,18710
< PRTS1  JSR  PRTNL            PRINT TO STANDARD PRINTER
<        EXI                   RETURN
<        ENP                   END PROCEDURE PRTIS
---
> PTFH5  JSR  SYSPR            CALL SYSTEM PRINT ROUTINE
>        PPM  PTFH6            JUMP IF FAILED
>        PPM  EROSI            STOP IF ERROR
>        BZE  TTLST,PTFH3      SKIP IF NO COPY TO TERMINAL
>        MOV  PROFS,SCLEN(XR)  SET STRING LENGTH FOR PTTST
>        JSR  PTTST            COPY STD BUFFER TO TERML BFR
>        JSR  PTTFH            FLUSH IT
>        MOV  PRLEN,SCLEN(XR)  RESTORE BUFFER LENGTH
>        BRN  PTFH3            MERGE
> *
> *      A FAILURE SUCH AS FILE OVERFILLED OCCURRED
> *
> PTFH6  BZE  STAGX,PTFH3      IGNORE IF COMPILE TIME
>        BRN  EXFAL            ELSE CAUSE STMT FAILURE
>        ENP                   END PROCEDURE PRTFH
20057d18739
<        EJC
20071c18753
<        JSR  PRTNL            PRINT LINE
---
>        JSR  PRTFH            PRINT LINE
20076,20140d18757
< *      PRTMX  -- AS PRTMI WITH EXTRA COPY TO INTERACTIVE CHAN.
< *
< *      JSR  PRTMX            CALL FOR PRINTING
< *      (WA,WB)               DESTROYED
< *
< PRTMX  PRC  E,0              ENTRY POINT
<        JSR  PRTST            PRINT STRING MESSAGE
<        MOV  =PRTMF,PROFS     SET PTR TO COLUMN 15
<        JSR  PRTIN            PRINT INTEGER
<        JSR  PRTIS            PRINT LINE
<        EXI                   RETURN
<        ENP                   END PROCEDURE PRTMX
<        EJC
< *
< *      PRTNL -- PRINT NEW LINE (END PRINT LINE)
< *
< *      PRTNL PRINTS THE CONTENTS OF THE PRINT BUFFER, RESETS
< *      THE BUFFER TO ALL BLANKS AND RESETS THE PRINT POINTER.
< *
< *      JSR  PRTNL            CALL TO PRINT LINE
< *
< PRTNL  PRC  R,0              ENTRY POINT
<        BNZ  HEADP,PRNL0      WERE HEADERS PRINTED
<        JSR  PRTPS            NO - PRINT THEM
< *
< *      CALL SYSPR
< *
< PRNL0  MOV  XR,-(XS)         SAVE ENTRY XR
<        MOV  WA,PRTSA         SAVE WA
<        MOV  WB,PRTSB         SAVE WB
<        MOV  PRBUF,XR         LOAD POINTER TO BUFFER
<        MOV  PROFS,WA         LOAD NUMBER OF CHARS IN BUFFER
<        JSR  SYSPR            CALL SYSTEM PRINT ROUTINE
<        PPM  PRNL2            JUMP IF FAILED
<        LCT  WA,PRLNW         LOAD LENGTH OF BUFFER IN WORDS
<        ADD  *SCHAR,XR        POINT TO CHARS OF BUFFER
<        MOV  NULLW,WB         GET WORD OF BLANKS
< *
< *      LOOP TO BLANK BUFFER
< *
< PRNL1  MOV  WB,(XR)+         STORE WORD OF BLANKS, BUMP PTR
<        BCT  WA,PRNL1         LOOP TILL ALL BLANKED
< *
< *      EXIT POINT
< *
<        MOV  PRTSB,WB         RESTORE WB
<        MOV  PRTSA,WA         RESTORE WA
<        MOV  (XS)+,XR         RESTORE ENTRY XR
<        ZER  PROFS            RESET PRINT BUFFER POINTER
<        EXI                   RETURN TO PRTNL CALLER
< *
< *      FILE FULL OR NO OUTPUT FILE FOR LOAD MODULE
< *
< PRNL2  BNZ  PRTEF,PRNL3      JUMP IF NOT FIRST TIME
<        MNZ  PRTEF            MARK FIRST OCCURRENCE
<        ERB  253,PRINT LIMIT EXCEEDED ON STANDARD OUTPUT CHANNEL
< *
< *      STOP AT ONCE
< *
< PRNL3  MOV  =NINI8,WB        ENDING CODE
<        MOV  KVSTN,WA         STATEMENT NUMBER
<        JSR  SYSEJ            STOP
<        ENP                   END PROCEDURE PRTNL
<        EJC
< *
20376,20377c18993
<        JSR  PRTVL            PRINT VALUE
<        JSR  PRTNL            TERMINATE LINE
---
>        JSR  PRTVF            PRINT VALUE
20384c19000
< *      PRTPG  -- PRINT A PAGE THROW
---
> *      PRTPG -- PRINT A PAGE THROW
20387c19003
< *      LISTING CHANNEL DEPENDING ON THE LISTING OPTIONS CHOSEN.
---
> *      LISTING FILE DEPENDING ON THE LISTING OPTIONS CHOSEN.
20392,20393c19008,19009
<        BEQ  STAGE,=STGXT,PRP01 JUMP IF EXECUTION TIME
<        BZE  LSTLC,PRP06      RETURN IF TOP OF PAGE ALREADY
---
>        BNZ  STAGX,PTPG1      SKIP IF EXECUTION TIME
>        BZE  LSTLC,PTPG6      RETURN IF TOP OF PAGE ALREADY
20398,20401c19014,19017
< PRP01  MOV  XR,-(XS)         PRESERVE XR
<        BNZ  PRSTD,PRP02      EJECT IF FLAG SET
<        BNZ  PRICH,PRP03      JUMP IF INTERACTIVE LISTING CHANNEL
<        BZE  PRECL,PRP03      JUMP IF COMPACT LISTING
---
> PTPG1  MOV  XR,-(XS)         PRESERVE XR
>        BNZ  PRECL,PTPG2      EJECT IF EXTENDED LISTING
>        BZE  PRSTD,PTPG3      SKIP IF COMPACT LISTING
>        BNZ  TTOUS,PTPG3      SKIP IF LISTING TO TERMINAL
20405,20406c19021,19024
< PRP02  JSR  SYSEP            EJECT
<        BRN  PRP04            MERGE
---
> PTPG2  JSR  SYSEP            EJECT
>        PPM  PTPG4            IGNORE FAILURE
>        PPM  EROSI            ERROR
>        BRN  PTPG4            MERGE
20408,20409c19026
< *      COMPACT OR INTERACTIVE CHANNEL LISTING. CANT PRINT
< *      BLANKS UNTIL CHECK MADE FOR HEADERS PRINTED AND FLAG SET.
---
> *      COMPACT LISTING.
20411,20416c19028,19033
< *
< PRP03  MOV  HEADP,XR         REMEMBER HEADP
<        MNZ  HEADP            SET TO AVOID REPEATED PRTPG CALLS
<        JSR  PRTNL            PRINT BLANK LINE
<        JSR  PRTNL            PRINT BLANK LINE
<        JSR  PRTNL            PRINT BLANK LINE
---
> PTPG3  BNZ  HEADN,PTPG4      SKIP IF HEADERS OMITTED
>        MOV  HEADP,XR         REMEMBER HEADP
>        MNZ  HEADP            SET TO AVOID RECURSIVE PRTPG CALLS
>        JSR  PRTFH            PRINT BLANK LINE
>        JSR  PRTFH            PRINT BLANK LINE
>        JSR  PRTFH            PRINT BLANK LINE
20425c19042
< PRP04  BNZ  HEADP,PRP05      JUMP IF HEADER LISTED
---
> PTPG4  BNZ  HEADP,PTPG5      JUMP IF HEADER LISTED
20426a19044
>        BNZ  HEADN,PTPG5      SKIP IF HEADERS OMITTED
20431,20432c19049
<        JSR  PRTST            APPEND EXTRA CHARS
<        JSR  PRTNL            PRINT IT
---
>        JSR  PRTSF            APPEND EXTRA CHARS AND PRINT
20434,20437c19051,19052
<        JSR  PRTST            PLACE IT
<        JSR  PRTNL            PRINT IT
<        JSR  PRTNL            PRINT A BLANK
<        JSR  PRTNL            AND ANOTHER
---
>        JSR  PRTFB            PLACE IT AND A BLANK
>        JSR  PRTFH            AND ANOTHER
20443c19058
< PRP05  MOV  (XS)+,XR         RESTORE XR
---
> PTPG5  MOV  (XS)+,XR         RESTORE XR
20447c19062
< PRP06  EXI                   RETURN
---
> PTPG6  EXI                   RETURN
20451c19066
< *      PRTPS - PRINT PAGE WITH TEST FOR STANDARD LISTING OPTION
---
> *      PRTPS -- PRINT PAGE WITH TEST FOR STANDARD LISTING OPTION
20463a19079,19089
> *
> *      PRTSF -- PRINT STRING TO STD PRINTER AND FLUSH BFR
> *
> *      (XR)                  STRING TO PRINT
> *      JSR  PRTSF            CALL TO PRINT AND FLUSH
> *
> PRTSF  PRC  E,0              ENTRY POINT
>        JSR  PRTST            PRINT STRING
>        JSR  PRTFH            FLUSH BUFFER
>        EXI                   RETURN TO CALLER
>        ENP                   END PROCEDURE PRTSF
20512c19138
< *      PRTST -- PRINT STRING
---
> *      PRTST -- PRINT STRING TO STANDARD FILE
20514c19140
< *      PRTST PLACES A STRING OF CHARACTERS IN THE PRINT BUFFER
---
> *      PLACE A STRING OF CHARACTERS IN THE STANDARD PRINT BUFFER
20516,20517d19141
< *      SEE PRTNL FOR GLOBAL LOCATIONS USED
< *
20519a19144,19147
> *      IF GLOBAL TTOUS IS NON-ZERO, STRING IS SENT TO TERMINAL
> *      INSTEAD OF STANDARD OUTPUT FILE.
> *      IF GLOBAL TTLST IS NON-ZERO, STRING IS SENT TO
> *      TERMINAL AS WELL AS STANDARD OUTPUT FILE
20526c19154
<        BNZ  HEADP,PRST0      WERE HEADERS PRINTED
---
>        BNZ  HEADP,PTST1      WERE HEADERS PRINTED
20529c19157
< *      CALL SYSPR
---
> *      HEADERS DEALT WITH
20531c19159,19165
< PRST0  MOV  WA,PRSVA         SAVE WA
---
> PTST1  BZE  PRLEN,PTST7      SKIP IF NO O/P POSSIBLE
>        BNZ  PRPUT,PTST2      SKIP IF PUTTING IS OK
>        BZE  TTLST,PTST7      SKIP OUT IF NOT ERROR TO TERML
> *
> *       KEEP REGISTERS
> *
> PTST2  MOV  WA,PRSVA         SAVE WA
20537c19171
< PRST1  MOV  SCLEN(XR),WA     LOAD STRING LENGTH
---
> PTST3  MOV  SCLEN(XR),WA     LOAD STRING LENGTH
20539c19173
<        BZE  WA,PRST4         JUMP TO EXIT IF NONE LEFT
---
>        BZE  WA,PTST6         JUMP TO EXIT IF NONE LEFT
20545,20546c19179,19180
<        BNZ  XR,PRST2         SKIP IF ROOM LEFT ON THIS LINE
<        JSR  PRTNL            ELSE PRINT THIS LINE
---
>        BNZ  XR,PTST4         SKIP IF ROOM LEFT ON THIS LINE
>        JSR  PRTFH            PRINT THIS LINE
20554c19188
< PRST2  BLO  WA,XR,PRST3      JUMP IF ROOM FOR REST OF STRING
---
> PTST4  BLO  WA,XR,PTST5      JUMP IF ROOM FOR REST OF STRING
20559c19193
< PRST3  MOV  PRBUF,XR         POINT TO PRINT BUFFER
---
> PTST5  MOV  PRBUF,XR         POINT TO PRINT BUFFER
20564d19197
<        MOV  WB,PRSVC         PRESERVE CHAR COUNTER
20566d19198
<        MOV  PRSVC,WB         RECOVER CHAR COUNTER
20569c19201
<        BRN  PRST1            LOOP BACK TO TEST FOR MORE
---
>        BRN  PTST3            LOOP BACK TO TEST FOR MORE
20573c19205
< PRST4  MOV  PRSVB,WB         RESTORE ENTRY WB
---
> PTST6  MOV  PRSVB,WB         RESTORE ENTRY WB
20575,20577d19206
<        EXI                   RETURN TO PRTST CALLER
<        ENP                   END PROCEDURE PRTST
<        EJC
20579c19208
< *      PRTTR -- PRINT TO TERMINAL
---
> *      RETURN POINT
20581,20582c19210,19211
< *      CALLED TO PRINT CONTENTS OF STANDARD PRINT BUFFER TO
< *      ONLINE TERMINAL. CLEARS BUFFER DOWN AND RESETS PROFS.
---
> PTST7  EXI                   RETURN TO PRTST CALLER
>        ENP                   END PROCEDURE PRTST
20584,20585c19213
< *      JSR  PRTTR            CALL FOR PRINT
< *      (WA,WB)               DESTROYED
---
> *      PRTVF -- PLACE A VALUE AND FLUSH STANDARD BUFFER
20587,20593c19215,19216
< PRTTR  PRC  E,0              ENTRY POINT
<        MOV  XR,-(XS)         SAVE XR
<        JSR  PRTIC            PRINT BUFFER CONTENTS
<        MOV  PRBUF,XR         POINT TO PRINT BFR TO CLEAR IT
<        LCT  WA,PRLNW         GET BUFFER LENGTH
<        ADD  *SCHAR,XR        POINT PAST SCBLK HEADER
<        MOV  NULLW,WB         GET BLANKS
---
> *      (XR)                  VALUE TO PRINT
> *      JSR  PRTVF            CALL TO PRINT AND FLUSH
20595,20602c19218,19222
< *      LOOP TO CLEAR BUFFER
< *
< PRTT1  MOV  WB,(XR)+         CLEAR A WORD
<        BCT  WA,PRTT1         LOOP
<        ZER  PROFS            RESET PROFS
<        MOV  (XS)+,XR         RESTORE XR
<        EXI                   RETURN
<        ENP                   END PROCEDURE PRTTR
---
> PRTVF  PRC  E,0              ENTRY POINT
>        JSR  PRTVL            PLACE VALUE
>        JSR  PRTFH            FLUSH BUFFER
>        EXI                   RETURN TO CALLER
>        ENP                   END PROCEDURE PRTVF
20676c19296
< *      VCBLK, TBBLK, BCBLK MERGE HERE FOR ) BLANK NUMBER IDVAL
---
> *      VCBLK, TBBLK MERGE HERE FOR ) BLANK NUMBER IDVAL
20814a19435,19536
>        EJC
> *
> *      PTTFH -- FLUSH TERMINAL BUFFER
> *
> *      PRINTS THE CONTENTS OF THE TTY BUFFER, RESETS
> *      THE BUFFER TO ALL BLANKS AND RESETS THE POINTER.
> *
> *      JSR  PTTFH            CALL TO FLUSH BUFFER
> *
> PTTFH  PRC  E,0              ENTRY POINT
>        BZE  TTLEN,PTTF2      SKIP IF NO TERMINAL
>        MOV  XL,-(XS)         SAVE XL
>        MOV  XR,-(XS)         SAVE XR
>        MOV  WA,-(XS)         SAVE WA
>        MOV  WC,-(XS)         SAVE WC
>        MOV  TTBUF,XR         LOAD POINTER TO BUFFER
>        MOV  TTOFS,WC         LOAD NUMBER OF CHARS IN BUFFER
>        JSR  SYSPI            CALL SYSTEM PRINT ROUTINE
>        PPM  PTTF3            JUMP IF FAILED
>        PPM  EROSI            STOP IF ERROR
> *
> *      BLANK BUFFER
> *
> PTTF1  MOV  TTBLK,XL         POINT TO BLANKING STRING
>        MOV  TTCHS,XR         POINT TO BUFFER
>        MOV  TTCMV,WA         COUNT OF BAUS TO MOVE
>        MVW                   MOVE BLANKS INTO BUFFER
>        ZER  TTOFS            RESET OFFSET
>        MOV  (XS)+,WC         RESTORE WC
>        MOV  (XS)+,WA         RECOVER WA
>        MOV  (XS)+,XR         RESTORE XR
>        MOV  (XS)+,XL         RESTORE XL
> *
> *      RETURN POINT
> *
> PTTF2  EXI                   RETURN TO CALLER
> *
> *      A FAILURE SUCH AS FILE OVERFILLED OCCURRED
> *
> PTTF3  BZE  STAGX,PTTF1      IGNORE IF COMPILE TIME
>        BRN  EXFAL            ELSE CAUSE STMT FAILURE
>        ENP                   END PROCEDURE
>        EJC
> *
> *      PTTST -- PRINT STRING TO TERMINAL
> *
> *      PLACE A STRING OF CHARACTERS IN THE TERMINAL BUFFER
> *
> *      NOTE THAT THE FIRST WORD OF THE BLOCK (NORMALLY B$SCL)
> *      IS NOT USED AND NEED NOT BE SET CORRECTLY (SEE PRTVN)
> *
> *      (XR)                  STRING TO BE PRINTED
> *      JSR  PTTST            CALL TO PRINT STRING
> *      (TTOFS)               UPDATED PAST CHARS PLACED
> *
> PTTST  PRC  E,0              ENTRY POINT
>        BZE  TTLEN,PTTS5      SKIP IF NO TERMINAL
>        MOV  WA,PRTVA         SAVE WA
>        MOV  WB,PRTVB         SAVE WB
>        ZER  WB               SET CHARS PRINTED COUNT TO ZERO
> *
> *      LOOP TO PRINT SUCCESSIVE LINES FOR LONG STRING
> *
> PTTS1  MOV  SCLEN(XR),WA     LOAD STRING LENGTH
>        SUB  WB,WA            SUBTRACT COUNT OF CHARS ALREADY OUT
>        BZE  WA,PTTS4         JUMP TO EXIT IF NONE LEFT
>        MOV  XL,-(XS)         ELSE STACK ENTRY XL
>        MOV  XR,-(XS)         SAVE ARGUMENT
>        MOV  XR,XL            COPY FOR EVENTUAL MOVE
>        MOV  TTLEN,XR         LOAD BUFFER LENGTH
>        SUB  TTOFS,XR         GET CHARS LEFT IN BUFFER
>        BNZ  XR,PTTS2         SKIP IF ROOM LEFT ON THIS LINE
>        JSR  PTTFH            ELSE PRINT THIS LINE
>        MOV  TTLEN,XR         AND SET FULL WIDTH AVAILABLE
> *
> *      HERE WITH CHARS TO PRINT AND SOME ROOM IN BUFFER
> *
> PTTS2  BLO  WA,XR,PTTS3      JUMP IF ROOM FOR REST OF STRING
>        MOV  XR,WA            ELSE SET TO FILL LINE
> *
> *      MERGE HERE WITH CHARACTER COUNT IN WA
> *
> PTTS3  MOV  TTBUF,XR         POINT TO PRINT BUFFER
>        PLC  XL,WB            POINT TO LOCATION IN STRING
>        PSC  XR,TTOFS         POINT TO LOCATION IN BUFFER
>        ADD  WA,WB            BUMP STRING CHARS COUNT
>        ADD  WA,TTOFS         BUMP BUFFER POINTER
>        MVC                   MOVE CHARACTERS TO BUFFER
>        MOV  (XS)+,XR         RESTORE ARGUMENT POINTER
>        MOV  (XS)+,XL         RESTORE ENTRY XL
>        BRN  PTTS1            LOOP BACK TO TEST FOR MORE
>        EJC
> *
> *      HERE TO EXIT AFTER PRINTING STRING
> *
> PTTS4  MOV  PRTVB,WB         RESTORE ENTRY WB
>        MOV  PRTVA,WA         RESTORE ENTRY WA
> *
> *      RETURN POINT
> *
> PTTS5  EXI                   RETURN TO PTTST CALLER
>        ENP                   END PROCEDURE PTTST
20851a19574,19578
> *      THE GLOBAL FLAG RDRER IS SET JUST BEFORE THE READ, AND
> *      CLEARED AFTER IT.  THIS IS SO THAT IN THE EVENT SYSRD
> *      OR SYSRI TAKE AN EROSI EXIT, THE ERROR APPENDAGE CAN
> *      RECOGNIZE THE SITUATION AND TAKE APPROPRIATE ACTION.
> *
20859,20861c19586,19596
<        BNZ  XR,READ3         EXIT IF ALREADY READ
<        BNE  STAGE,=STGIC,READ3 EXIT IF NOT INITIAL COMPILE
<        MOV  CSWIN,WA         MAX READ LENGTH
---
>        BNZ  XR,READ5         EXIT IF ALREADY READ
> *
> *      MERGE FROM -COPY EOF TO TRY READ
> *
> READ0  BEQ  STAGE,=STGIC,READ1 READ IF INITIAL COMPILE
>        BZE  R$COP,READ6      ELSE EXIT IF NO -COPY IN FORCE
> *
> *      ATTEMPT READ
> *
> READ1  MOV  CSWIN,WA         MAX READ LENGTH
>        MNZ  RDRER            NOTE IN-READR IN CASE EROSI
20863,20864c19598,19612
<        JSR  SYSRD            READ INPUT IMAGE
<        PPM  READ4            JUMP IF END OF FILE
---
>        BZE  TTINS,READ2      SKIP IF STANDARD INPUT FILE
>        JSR  SYSRI            READ FROM TERMINAL
>        PPM  READ7            FAIL
>        PPM  EROSI            ERROR
>        BRN  READ3            MERGE
> *
> *      READ FROM STANDARD FILE
> *
> READ2  JSR  SYSRD            READ INPUT IMAGE
>        PPM  READ7            JUMP IF END OF FILE
>        PPM  EROSI            ERROR RETURN
> *
> *      MERGE
> *
> READ3  ZER  RDRER            NOTE NOT-IN-READR FOR ERROR RTN
20866c19614
<        BLE  SCLEN(XR),CSWIN,READ1  USE SMALLER OF STRING LNTH ..
---
>        BLE  SCLEN(XR),CSWIN,READ4  USE SMALLER OF STRING LNTH..
20871c19619
< READ1  JSR  TRIMR            TRIM TRAILING BLANKS
---
> READ4  JSR  TRIMR            TRIM TRAILING BLANKS
20875c19623
< READ2  MOV  XR,R$CNI         STORE COPY OF POINTER
---
> READ5  MOV  XR,R$CNI         STORE COPY OF POINTER
20879c19627
< READ3  EXI                   RETURN TO READR CALLER
---
> READ6  EXI                   RETURN TO READR CALLER
20883c19631,19632
< READ4  MOV  XR,DNAMP         POP UNUSED SCBLK
---
> READ7  ZER  RDRER            NOTE NOT-IN-READR FOR ERR
>        MOV  XR,DNAMP         POP UNUSED SCBLK
20885c19634,19636
<        BRN  READ2            MERGE
---
>        BZE  R$COP,READ5      SKIP IF NO -COPY IN FORCE
>        JSR  COPND            CALL TO END THIS -COPY (EOF)
>        BRN  READ0            TRY AGAIN
20886a19638
> .IF    .CASL
20888a19641,19724
> *      SBSCC -- BUILD SUBSTRING WITH CASE CONVERSION
> *
> *      (XL)                  PTR TO SCBLK CONTAINING CHARS
> *      (WA)                  CHAR COUNT
> *      (WB)                  OFFSET TO FIRST CHAR IN SCBLK
> *      JSR  SBSCC            CALL TO BUILD SUBSTRING
> *      (XR)                  PTR TO NEW SCBLK WITH SUBSTRING
> *      (WA,WB,WC,XL,IA)      DESTROYED
> *
> *      IF OPTION .CPLC IS SELECTED (PREFER LOWER CASE), TARGET
> *      CASE IS LOWER CASE, OTHERWISE IT IS UPPER CASE.
> *
> SBSCC  PRC  E,0              ENTRY POINT
>        BZE  WA,SBSC4         JUMP IF NULL SUBSTRING
>        JSR  ALOCS            ELSE ALLOCATE SCBLK
>        MOV  WC,WA            MOVE NUMBER OF CHARACTERS
>        MOV  XR,WC            SAVE PTR TO NEW SCBLK
>        PLC  XL,WB            PREPARE TO LOAD CHARS FROM OLD BLK
>        PSC  XR               PREPARE TO STORE CHARS IN NEW BLK
>        LCT  WA,WA            TO COUNT ROUND LOOP
> *
> *      LOOP TO COPY AND TRANSLATE CHARS
> *
> SBSC1  LCH  WB,(XL)+         GET CHAR
> .IF    .CPLC
>        BGT  WB,=CH$L$,SBSC2  SKIP IF NOT UC LETTER
>        BLT  WB,=CH$LA,SBSC2  SKIP IF NOT UC LETTER
> .IF    .CSCV
>        CUL  WB               CONVERT FROM UC TO LC
> .ELSE
>        ADD  =DFA$A,WB        CONVERT FROM UC TO LC
> .FI
> .ELSE
>        BGT  WB,=CH$$$,SBSC2  SKIP IF NOT A LC LETTER
>        BLT  WB,=CH$$A,SBSC2  SKIP IF NOT A LC LETTER
> .IF    .CSCV
>        CLU  WB               CONVERT FROM LC TO UC
> .ELSE
>        SUB  =DFA$A,WB        CONVERT FROM LC TO UC
> .FI
> .FI
> *
> *      STORE CHAR IN NEW SUBSTRING
> *
> SBSC2  SCH  WB,(XR)+         STORE CHAR
>        BCT  WA,SBSC1         LOOP
>        MOV  WC,XR            RESTORE SCBLK POINTER
> *
> *      RETURN POINT
> *
> SBSC3  ZER  XL               CLEAR GARBAGE POINTER IN XL
>        EXI                   RETURN TO SBSCC CALLER
> *
> *      HERE FOR NULL SUBSTRING
> *
> SBSC4  MOV  =NULLS,XR        SET NULL STRING AS RESULT
>        BRN  SBSC3            RETURN
>        ENP                   END PROCEDURE SBSCC
>        EJC
> *
> *      SBSTG -- BUILD SUBSTRING POSSIBLY CONVERTING CASE
> *
> *      (XL)                  PTR TO SCBLK CONTAINING CHARS
> *      (WA)                  CHAR COUNT
> *      (WB)                  OFFSET TO FIRST CHAR IN SCBLK
> *      JSR  SBSTG            CALL TO BUILD SUBSTRING
> *      (XR)                  PTR TO NEW SCBLK WITH SUBSTRING
> *      (WA,WB,WC,XL,IA)      DESTROYED
> *
> *      IF CASE IS TO BE IGNORED (-CASEIG OR .CSIG), SUBSTRING
> *      IS CONVERTED TO PREFERRED CASE (DEFAULT UPPER),
> *      OTHERWISE CASE IS LEFT ALONE.
> *
> SBSTG  PRC  E,0              ENTRY POINT
>        BZE  CSWCI,SBSG1      SKIP IF CASE NOT IGNORED
>        JSR  SBSCC            CONVERT TO IGNORE CASE
>        EXI                   RETURN TO CALLER
> *
> SBSG1  JSR  SBSTR            READ SUBSTRING IN MIXED CASE
>        EXI                   RETURN TO CALLER
>        ENP                   END PROCEDURE SBSTG
> .FI
>        EJC
> *
20891c19727
< *      (XL)                  PTR TO SCBLK/BFBLK WITH CHARS
---
> *      (XL)                  PTR TO SCBLK CONTAINING CHARS
20896d19731
< *      (XL)                  ZERO
21086,21087c19921
< .IF    .CUCF
<        BLO  =CFP$U,XR,SCN07  QUICK CHECK FOR OTHER CHAR
---
>        BGE  XR,=CFP$U,SCN07  QUICK CHECK FOR OTHER CHAR
21089,21091d19922
< .ELSE
<        BSW  XR,CFP$A,SCN07   SWITCH ON SCANNED CHARACTER
< .FI
21187,21190c20018,20021
<        IFF  CH$PL,SCN33      PLUS
<        IFF  CH$MN,SCN34      MINUS
<        IFF  CH$NT,SCN35      NOT
<        IFF  CH$DL,SCN36      DOLLAR
---
>        IFF  CH$PL,SCN34      PLUS
>        IFF  CH$MN,SCN35      MINUS
>        IFF  CH$NT,SCN36      NOT
>        IFF  CH$DL,SCN33      DOLLAR
21206c20037
<        ERB  230,SYNTAX ERROR. ILLEGAL CHARACTER
---
>        ERB  232,SYNTAX ERROR. ILLEGAL CHARACTER
21260c20091
< SCN14  ERB  231,SYNTAX ERROR. INVALID NUMERIC ITEM
---
> SCN14  ERB  233,SYNTAX ERROR. INVALID NUMERIC ITEM
21263a20095,20097
> .IF    .CASL
> SCN15  JSR  SBSTG            BUILD STRING NAME OF VARIABLE
> .ELSE
21264a20099
> .FI
21305c20140
<        ERB  232,SYNTAX ERROR. UNMATCHED STRING QUOTE
---
>        ERB  234,SYNTAX ERROR. UNMATCHED STRING QUOTE
21381,21382c20216,20217
< *      THE FIRST THREE ENTRIES ARE SPECIAL SINCE THEY CAN OCCUR
< *      AS PART OF A VARIABLE NAME (.) OR CONSTANT (.+-).
---
> *      THE FIRST FOUR ENTRIES ARE SPECIAL SINCE THEY CAN OCCUR
> *      AS PART OF A VARIABLE NAME (.$) OR CONSTANT (.+-).
21387c20222,20225
< SCN33  BZE  WC,SCN09         PLUS CAN BE PART OF CONSTANT
---
> SCN33  BZE  WB,SCN09         DOLLAR CAN BE PART OF NAME
>        ADD  WB,WC            ELSE BUMP POINTER
> *
> SCN34  BZE  WC,SCN09         PLUS CAN BE PART OF CONSTANT
21391c20229
< SCN34  BZE  WC,SCN09         MINUS CAN BE PART OF CONSTANT
---
> SCN35  BZE  WC,SCN09         MINUS CAN BE PART OF CONSTANT
21393a20232,20234
>        LCH  XR,(XL)          GET NEXT CHARACTER
>        BLT  XR,=CH$D0,SCN36  SKIP IF NOT DIGIT
>        BLE  XR,=CH$D9,SCN08  JUMP IF DIGIT
21395,21396c20236
< SCN35  ADD  WB,WC            NOT
< SCN36  ADD  WB,WC            DOLLAR
---
> SCN36  ADD  WB,WC            NOT
21405a20246
>        EJC
21406a20248,20249
> *      SCANE (CONTINUED)
> *
21439c20282
< SCN48  ERB  233,SYNTAX ERROR. INVALID USE OF OPERATOR
---
> SCN48  ERB  235,SYNTAX ERROR. INVALID USE OF OPERATOR
21494c20337
<        ERB  234,SYNTAX ERROR. GOTO FIELD INCORRECT
---
>        ERB  236,SYNTAX ERROR. GOTO FIELD INCORRECT
21500,21501c20343,20344
<        MOV  =OPDVN,WA        POINT TO OPDV FOR COMPLEX GOTO
<        BLE  XR,STATB,SCNG3   JUMP IF NOT IN STATIC (SGD15)
---
>        MOV  =OPDVN,WA        ELSE POINT TO OPDV FOR COMPLEX GOTO
>        BLE  XR,STATB,SCNG3   JUMP IF NOT IN STATIC
21503c20346
<        BRN  SCNG3            COMPLEX GOTO - MERGE
---
>        BRN  SCNG3            AND MERGE
21571c20414
< *      THE SORT USED IS HEAPSORT, FUNDAMENTALS OF DATA STRUCTURE
---
> *      THE SORT USED IS HEAPSORT, FUNDAMENTALS OF DATA STRUCTURES,
21576c20419
< *      SORT ARRAY) CONTAINING AT ITS HIGH ADDRESS END, BYTE
---
> *      SORT ARRAY) CONTAINING AT ITS HIGH ADDRESS END, BAU
21588a20432,20433
> *      GIVES ERROR MESSAGES FOR INCORRECT ARGS, RETURNS EXI 1
> *      FOR EMPTY TABLE.
21593a20439
> *      PPM  LOC              FAIL RETURN FOR EMPTY TABLE
21600c20446
< SORTA  PRC  N,0              ENTRY POINT
---
> SORTA  PRC  N,1              ENTRY POINT
21606a20453,20455
>        MOV  (XR),WA          GET ARG TYPE
>        BEQ  WA,=B$ART,SRT00  SKIP IF ARRAY
>        BNE  WA,=B$TBT,SRT16  ERROR IF NOT TABLE
21608,21611c20457,20463
<        PPM  SRT16            FAIL
<        MOV  XR,-(XS)         STACK PTR TO RESULTING KEY ARRAY
<        MOV  XR,-(XS)         ANOTHER COPY FOR COPYB
<        JSR  COPYB            GET COPY ARRAY FOR SORTING INTO
---
>        PPM  SRT18            FAIL
> *
> *      MAKE COPY OF ARRAY
> *
> SRT00  MOV  XR,-(XS)         STACK PTR TO RESULTING KEY ARRAY
>        MOV  XR,-(XS)         ANOTHER COPY FOR CBLCK
>        JSR  CBLCK            GET COPY ARRAY FOR SORTING INTO
21619c20471
<        ERR  257,ERRONEOUS 2ND ARG IN SORT/RSORT OF VECTOR
---
>        ERR  237,ERRONEOUS 2ND ARG IN SORT/RSORT OF VECTOR
21627c20479
<        SUB  *VCSI$,WA        GET NO. OF ENTRIES, N (IN BYTES)
---
>        SUB  *VCSI$,WA        GET NO. OF ENTRIES, N (IN BAUS)
21635c20487
<        MOV  *ARVLS,WB        OFFSET TO FIRST VALUE IF ONE
---
>        MOV  *ARVLS,WB        OFFSET TO FIRST VALUE IF ONE DIM.
21637,21639c20489,20491
<        BEQ  ARNDM(XL),=NUM01,SRT04 JUMP IN FACT IF ONE DIM.
<        BNE  ARNDM(XL),=NUM02,SRT16  FAIL UNLESS TWO DIMENS
<        LDI  ARLB2(XL)        GET LOWER BOUND 2 AS DEFAULT
---
>        BEQ  ARNDM(XL),=NUM01,SRT04 JUMP IF IN FACT ONE DIMENSION
>        BNE  ARNDM(XL),=NUM02,SRT16  FAIL UNLESS TWO DIMENSIONAL
>        LDI  ARLB2(XL)        GET LOWER BOUND 2 AS DEFAULT COLUMN
21662c20514
<        WTB  WA               CONVERT TO BYTES
---
>        WTB  WA               CONVERT TO BAUS
21679c20531
< *      WA = NUMBER OF ITEMS, N (CONVERTED TO BYTES).
---
> *      WA = NUMBER OF ITEMS, N (CONVERTED TO BAUS).
21714c20566
<        BTW  WC               CONVERT FROM BYTES
---
>        BTW  WC               CONVERT FROM BAUS
21726c20578
< *      (SRTSN)               NUMBER OF ITEMS TO SORT, N (BYTES)
---
> *      (SRTSN)               NUMBER OF ITEMS TO SORT, N (BAUS)
21732c20584
<        WTB  WC               CONVERT BACK TO BYTES
---
>        WTB  WC               CONVERT BACK TO BAUS
21742c20594
< *      ITEM, SINCE ALGORITHM INITIALISES IT AS, AND THEN MAINTAI
---
> *      ITEM, SINCE ALGORITHM INITIALISES IT AS, AND THEN MAINTAINS
21799,21800c20651,20656
< SRT16  ERB  256,SORT/RSORT 1ST ARG NOT SUITABLE ARRAY OR TABLE
< SRT17  ERB  258,SORT/RSORT 2ND ARG OUT OF RANGE OR NON-INTEGER
---
> SRT16  ERB  238,SORT/RSORT 1ST ARG NOT SUITABLE ARRAY OR TABLE
> SRT17  ERB  239,SORT/RSORT 2ND ARG OUT OF RANGE OR NON-INTEGER
> *
> *      SOFT FAIL RETURN
> *
> SRT18  EXI  1                RETURN
21964c20820
<        WTB  WC               CONVERT TO BYTES
---
>        WTB  WC               CONVERT TO BAUS
21993c20849
< *      (WA)                  MAX ARRAY INDEX, N (IN BYTES)
---
> *      (WA)                  MAX ARRAY INDEX, N (IN BAUS)
22045c20901
<        WTB  WC               CONVERT BACK TO BYTES
---
>        WTB  WC               CONVERT BACK TO BAUS
22057c20913
<        WTB  WC               CONVERT BACK TO BYTES
---
>        WTB  WC               CONVERT BACK TO BAUS
22123a20980,20982
> *      POSSIBILITY OF OVERFLOW EXIST ON TWOS COMPLEMENT
> *      MACHINE IF HASH SOURCE IS MOST NEGATIVE INTEGER OR IS
> *      A REAL HAVING THE SAME BIT PATTERN.
22149c21008
<        WTB  WC               CONVERT TO BYTE OFFSET
---
>        WTB  WC               CONVERT TO BAU OFFSET
22202a21062
>        MOV  XR,WB            COPY DEFAULT VALUE
22211c21071
<        MOV  =NULLS,TEVAL(XR) SET NULL AS INITIAL VALUE
---
>        MOV  WB,TEVAL(XR)     SET DEFAULT AS INITIAL VALUE
22214c21074
<        ICA  XS               POP PAST NAME/VALUE INDICATOR
---
>        MOV  (XS)+,WB         RESTORE NAME/VALUE INDICATOR
22235a21096
> *      PPM  LOC              FAIL STOPTR IF NON-EXISTENT TRACE
22239c21100
< TRACE  PRC  N,2              ENTRY POINT
---
> TRACE  PRC  N,3              ENTRY POINT
22244,22246c21105,21112
< .IF    .CULC
<        FLC  WA               FOLD TO UPPER CASE
< .FI
---
> .IF    .CASL
>        BLT  WA,=CH$$A,TRC00  SKIP IF NOT LOWER CASE
>        SUB  =DFA$A,WA        CONVERT LOWER TO UPPER CASE
> *
> *      HERE WITH UPPER CASE TRACE TYPE CODE
> *
> TRC00  MOV  (XS),XR          LOAD NAME ARGUMENT
> .ELSE
22247a21114
> .FI
22253,22255d21119
< .IF    .CULC
<        BZE  WA,TRC10         JUMP IF BLANK (VALUE)
< .ELSE
22257d21120
< .FI
22273a21137
>        MOV  XL,WB            COPY TRBLK PTR OR 0
22280a21145
>        ORB  PFCTR(XR),WB     STOPTR FAIL CHECK
22282c21147
<        BEQ  WA,=CH$LC,EXNUL  EXIT WITH NULL IF C (CALL)
---
>        BEQ  WA,=CH$LC,TRC11  RETURN IF LETTER C
22286,22287c21151,21153
< TRC02  MOV  XL,PFRTR(XR)     SET/RESET RETURN TRACE
<        EXI                   RETURN
---
> TRC02  ORB  PFRTR(XR),WB     STOPTR FAIL CHECK
>        MOV  XL,PFRTR(XR)     SET/RESET RETURN TRACE
>        BRN  TRC11            RETURN
22292a21159
>        MOV  (XS)+,WB         GET TRBLK OR ZERO
22295a21163
>        BRN  TRCA4            MERGE
22299,22300c21167,21171
< TRC04  BEQ  XL,=STNDL,TRC16  ERROR IF UNDEFINED LABEL
<        MOV  (XS)+,WB         GET TRBLK PTR AGAIN
---
> TRC04  BZE  WB,TRC12         FAIL IF STOPTR OF UNTRACED LABEL
> *
> *      TEST FOR UNDEFINED LABEL
> *
> TRCA4  BEQ  XL,=STNDL,TRC17  ERROR IF UNDEFINED LABEL
22326c21197
< *      MERGE HERE WITH TRBLK SET UP IN WB (OR ZERO)
---
> *      MERGE HERE WITH TRBLK SET UP IN XL (OR ZERO)
22328a21200
>        MOV  XL,WB            COPY TRBLK PR OR 0
22334a21207
>        ORB  R$FNC,WB         STOPTR FAIL CHECK
22336c21209
<        EXI                   RETURN
---
>        BRN  TRC11            RETURN
22340,22341c21213,21215
< TRC08  MOV  XL,R$ERT         SET/RESET ERRTYPE TRACE
<        EXI                   RETURN
---
> TRC08  ORB  R$ERT,WB         STOPTR FAIL CHECK
>        MOV  XL,R$ERT         SET/RESET ERRTYPE TRACE
>        BRN  TRC11            RETURN
22345,22346c21219,21221
< TRC09  MOV  XL,R$STC         SET/RESET STCOUNT TRACE
<        EXI                   RETURN
---
> TRC09  ORB  R$STC,WB         STOPTR FAIL CHECK
>        MOV  XL,R$STC         SET/RESET STCOUNT TRACE
>        BRN  TRC11            RETURN
22355,22357c21230,21234
<        MOV  (XS)+,WB         GET NEW TRBLK PTR AGAIN
<        ADD  XL,WA            POINT TO VARIABLE LOCATION
<        MOV  WA,XR            COPY VARIABLE POINTER
---
>        MOV  (XS)+,XR         GET NEW TRBLK PTR AGAIN
>        MOV  WC,WB            COPY TRACE TYPE
>        JSR  TRCHN            UPDATE TRACE CHAIN
>        PPM  TRC12            FAIL
>        EXI                   RETURN
22359c21236
< *      LOOP TO SEARCH TRBLK CHAIN
---
> *      RETURN AFTER CHECKING STOPTR FAIL CONDITION (WB = 0)
22361,22367c21238,21239
< TRC11  MOV  (XR),XL          POINT TO NEXT ENTRY
<        BNE  (XL),=B$TRT,TRC13  JUMP IF NOT TRBLK
<        BLT  WC,TRTYP(XL),TRC13 JUMP IF TOO FAR OUT ON CHAIN
<        BEQ  WC,TRTYP(XL),TRC12 JUMP IF THIS MATCHES OUR TYPE
<        ADD  *TRNXT,XL        ELSE POINT TO LINK FIELD
<        MOV  XL,XR            COPY POINTER
<        BRN  TRC11            AND LOOP BACK
---
> TRC11  ZRB  WB,TRC12         FAIL IF NECESSARY
>        EXI                   ELSE RETURN
22369c21241
< *      HERE TO DELETE AN OLD TRBLK OF THE TYPE WE WERE GIVEN
---
> *      FAIL STOPTR
22371,22372c21243
< TRC12  MOV  TRNXT(XL),XL     GET PTR TO NEXT BLOCK OR VALUE
<        MOV  XL,(XR)          STORE TO DELETE THIS TRBLK
---
> TRC12  EXI  3                FAIL RETURN
22374,22388d21244
< *      HERE AFTER DELETING ANY OLD ASSOCIATION OF THIS TYPE
< *
< TRC13  BZE  WB,TRC14         JUMP IF STOPTR CASE
<        MOV  WB,(XR)          ELSE LINK NEW TRBLK IN
<        MOV  WB,XR            COPY TRBLK POINTER
<        MOV  XL,TRNXT(XR)     STORE FORWARD POINTER
<        MOV  WC,TRTYP(XR)     STORE APPROPRIATE TRAP TYPE CODE
< *
< *      HERE TO MAKE SURE VRGET,VRSTO ARE SET PROPERLY
< *
< TRC14  MOV  WA,XR            RECALL POSSIBLE VRBLK POINTER
<        SUB  *VRVAL,XR        POINT BACK TO VRBLK
<        JSR  SETVR            SET FIELDS IF VRBLK
<        EXI                   RETURN
< *
22409c21265
< *      (XL)                  TRFNC OR TRFPT
---
> *      (XL)                  TRFNC OR TRTRI
22420,22421c21276,21277
<        MOV  XL,TRFNC(XR)     STORE TRFNC (OR TRFPT)
<        MOV  (XS)+,TRTAG(XR)  STORE TRTAG (OR TRFNM)
---
>        MOV  XL,TRFNC(XR)     STORE TRFNC (OR TRTRI)
>        MOV  (XS)+,TRTAG(XR)  STORE TRTAG (OR TRTER)
22427a21284,21340
> *      TRCHN -- UPDATE TRACE BLOCK CHAIN
> *
> *      CALLED WHEN A TRACE BLOCK CHAIN IS TO BE UPDATED BY
> *      ADDITION OR REMOVAL OF A TRBLK.
> *      IF A TRBLK OF THE SAME TYPE AS AN ADDITION IS ALREADY
> *      PRESENT IT IS DELETED. THE TRTAG FIELD OF ANY DELETED
> *      TRBLK IS CLEARED AS REQUIRED BY S$ENF.
> *
> *      (XL,WA)               POINTER, OFFSET TO TRACED VARIABLE
> *      (XR)                  PTR TO NEW TRBLK OR 0 FOR REMOVAL
> *      (WB)                  TRACE TYPE (TRTYP)
> *      JSR  TRCHN            CALL TO UPDATE TRACE CHAIN
> *      PPM  LOC              NO TRACE BLK OF REQD DELETION TYPE
> *      (WA,WC)               DESTROYED
> *
> TRCHN  PRC  E,1              ENTRY POINT
>        ADD  XL,WA            KEEP POINTER TO TRACED LOCATION
>        MOV  WA,XL            COPY POINTER
>        SUB  *TRNXT,XL        ADJUST OFFSET BEFORE ENTERING LOOP
>        MOV  XR,WC            COPY TRBLK PTR
> *
> *      LOOP TO FIND TRACE BLOCK
> *
> TRCH1  MOV  XL,XR            COPY SO XR POINTS TO PREDECESSOR
>        MOV  TRNXT(XL),XL     POINT TO POSSIBLE TRACE BLOCK
>        BNE  (XL),=B$TRT,TRCH2 SKIP OUT AT CHAIN END
>        BLT  WB,TRTYP(XL),TRCH2 SKIP IF TOO FAR OUT ON CHAIN
>        BNE  WB,TRTYP(XL),TRCH1 LOOP UNLESS TYPE MATCHES
>        MOV  TRNXT(XL),TRNXT(XR) REMOVE LINK TO OLD TRBLK
>        ZER  TRTAG(XL)        CLEAR IOTAG FIELD OF DELETED BLOCK
>        BZE  WC,TRCH3         DONE IF NO NEW TRBLK
> *
> *      OLD TRBLK REMOVED AND/OR END OF CHAIN REACHED
> *
> TRCH2  BZE  WC,TRCH4         FAIL IF REQD BLOCK TYPE NOT FOUND
>        MOV  WC,XL            POINT TO NEW TRBLK
>        MOV  TRNXT(XR),TRNXT(XL) ATTACH TAIL OF CHAIN TO IT
>        MOV  WC,TRNXT(XR)     LINK NEW BLOCK IN
>        MOV  WB,TRTYP(XL)     ENSURE TRTYP FIELD SET UP
> *
> *      UPDATE ACCESS FIELDS OF NAME IF IT IS A VRBLK
> *
> TRCH3  MOV  WA,XR            POINT TO VBL
>        SUB  *VRVAL,XR        ADJUST TO POSSIBLE VRBLK NAME BASE
>        JSR  SETVR            UPDATE ACCESS FIELDS
>        MOV  WA,XL            RECOVER XL
>        MOV  WC,XR            RECOVER XR
>        EXI                   RETURN TO CALLER
> *
> *      FAIL RETURN
> *
> TRCH4  MOV  WA,XL            RECOVER XL
>        MOV  WC,XR            RECOVER XR
>        EXI  1                FAIL
>        ENP                   END PROCEDURE TRCHN
>        EJC
> *
22475,22476c21388,21389
<        PSC  XL,WA            READY FOR STORING BLANKS
<        CTB  WA,SCHAR         GET LENGTH OF BLOCK IN BYTES
---
>        PSC  XL,WA            READY FOR STORING ZEROES
>        CTB  WA,SCHAR         GET LENGTH OF BLOCK IN BAUS
22480c21393
<        ZER  WC               SET BLANK CHAR
---
>        ZER  WC               SET ZERO CHAR
22562c21475
< TRXQ1  MOV  FLPTR,XS         POINT BACK TO OUR STACK ENTRIES
---
> TRXQR  MOV  FLPTR,XS         POINT BACK TO OUR STACK ENTRIES
22595a21509
> *      (XSCNB)               ERROR INDICATOR - SEE 4) BELOW
22596a21511,21513
> *      LEADING BLANKS AND TRAILING BLANKS POSITIONED BEFORE A
> *      DELIMITER OR AT THE END OF THE ARGUMENT STRING ARE
> *      IGNORED. OTHER BLANKS ARE ILLEGAL.
22598c21515
< *      UNTIL ONE OF THE FOLLOWING THREE CONDITIONS OCCURS.
---
> *      UNTIL ONE OF THE FOLLOWING CONDITIONS OCCURS.
22604c21521
< *      3)   END OF STRING ENCOUNTERED  (WA SET TO 0)
---
> *      3)   END OF STRING ENCOUNTERED  (WA AND XSCNB SET TO 0)
22605a21523,21524
> *      4)   ILLEGAL BLANK  (WA 0, XSCNB NON-ZERO)
> *
22622a21542,21543
>        ZER  XSCBL            CLEAR COUNT OF TRAILING BLANKS
>        ZER  XSCNB            CLEAR NON-BLANK SEEN FLAG
22632c21553
< XSCN1  LCH  WB,(XR)+         LOAD NEXT CHARACTER
---
> XSCN0  LCH  WB,(XR)+         LOAD NEXT CHARACTER
22635,22636c21556,21561
<        DCV  WA               DECREMENT COUNT OF CHARS LEFT
<        BNZ  WA,XSCN1         LOOP BACK IF MORE CHARS TO GO
---
>        BEQ  WB,=CH$BL,XSCN7  SKIP IF IT IS A BLANK
> .IF    .CAHT
>        BEQ  WB,=CH$HT,XSCN7  SKIP IF IT IS A TAB
> .FI
>        BNZ  XSCBL,XSCN2      FAIL CHAR AFTER TRAILING BLANK
>        MNZ  XSCNB            NOTE A NON-BLANK SEEN
22637a21563,21568
> *      COUNT CHARS DONE
> *
> XSCN1  DCV  WA               DECREMENT COUNT OF CHARS LEFT
>        BNZ  WA,XSCN0         LOOP BACK IF MORE CHARS TO GO
>        ZER  XSCNB            CLEAR ERRONEOUS BLANKS FLAG
> *
22643a21575
>        SUB  XSCBL,WA         ADJUST FOR TRAILING BLANKS
22665a21598
>        SUB  XSCBL,WA         ADJUST FOR TRAILING BLANKS
22673a21607,21609
> .IF    .CASL
>        JSR  SBSTG            BUILD SUBSTRING
> .ELSE
22674a21611
> .FI
22677a21615,21625
> *
> *      DEAL WITH BLANK
> *
> XSCN7  BZE  XSCNB,XSCN8      SKIP IF LEADING BLANK
>        ICV  XSCBL            ELSE COUNT TRAILING BLANK
>        BRN  XSCN1            LOOP
> *
> *      LEADING BLANK
> *
> XSCN8  ICV  XSOFS            PUSH OFFSET PAST BLANK
>        BRN  XSCN1            LOOP
22753c21701
<        WTB  XR               CONVERT TO BYTE OFFSET
---
>        WTB  XR               CONVERT TO BAU OFFSET
22765c21713
<        ERB  235,SUBSCRIPTED OPERAND IS NOT TABLE OR ARRAY
---
>        ERB  240,SUBSCRIPTED OPERAND IS NOT TABLE OR ARRAY
22841c21789
<        WTB  WA               CONVERT OFFSET TO BYTES
---
>        WTB  WA               CONVERT OFFSET TO BAUS
22853c21801
< ARF09  ERB  236,ARRAY REFERENCED WITH WRONG NUMBER OF SUBSCRIPTS
---
> ARF09  ERB  241,ARRAY REFERENCED WITH WRONG NUMBER OF SUBSCRIPTS
22866c21814
< ARF11  ERB  237,TABLE REFERENCED WITH MORE THAN ONE SUBSCRIPT
---
> ARF11  ERB  242,TABLE REFERENCED WITH MORE THAN ONE SUBSCRIPT
22870c21818
< ARF12  ERB  238,ARRAY SUBSCRIPT IS NOT INTEGER
---
> ARF12  ERB  243,ARRAY SUBSCRIPT IS NOT INTEGER
22901c21849
<        WTB  WB               CONVERT TO BYTES
---
>        WTB  WB               CONVERT TO BAUS
22921a21870,21888
> *      EROSI -- PROCESS ERROR RETURN FROM OSINT
> *
> *      (WA)                  0 OR ERROR CODE IN 256 TO 998
> *      (XL)                  0 OR PSEUDO SCBLK FOR ERROR MESSAGE
> *      (IA)                  NEW VALUE FOR CODE KEYWORD
> *      BRN  EROSI            JUMP TO PROCESS ERROR
> *
> EROSI  RTN
>        STI  KVCOD            STORE NEW CODE KEYWORD VALUE
>        MOV  WA,KVERT         STORE ERROR CODE
>        BZE  XL,ERROR         FAIL AT ONCE IF NO ERROR MSG TEXT
>        MOV  SCLEN(XL),WA     STRING LENGTH
>        ZER  WB               ZERO OFFSET
>        JSR  SBSTR            COPY ERROR MESSAGE STRING
>        MOV  XR,R$ETX         AND STORE IT
>        MNZ  EROSN            NOTE NO CALL OF SYSEM
>        MOV  KVERT,WA         RECALL ERROR CODE
>        BRN  ERROR            ENTER ERROR SECTION
> *
22935d21901
<        EJC
22972d21937
<        EJC
22999d21963
<        EJC
23015d21978
<        EJC
23058d22020
<        EJC
23070d22031
<        EJC
23100c22061
<        ERR  239,INDIRECTION OPERAND IS NOT NAME
---
>        ERR  244,INDIRECTION OPERAND IS NOT NAME
23131c22092
<        ERR  240,PATTERN MATCH RIGHT OPERAND IS NOT PATTERN
---
>        ERR  245,PATTERN MATCH RIGHT OPERAND IS NOT PATTERN
23161c22122,22125
<        ERR  241,PATTERN MATCH LEFT OPERAND IS NOT STRING
---
>        ERR  246,PATTERN MATCH LEFT OPERAND IS NOT STRING
> .IF    .CNBF
>        MOV  XR,R$PMS         IF OK, STORE SUBJECT STRING POINTER
> .ELSE
23163c22127
< *      MERGE WITH BUFFER OR STRING
---
> *      MERGE WITH NULL STRING OR BUFFER
23165a22130
> .FI
23173a22139
>        EJC
23174a22141,22142
> *      MATCH (CONTINUED)
> *
23201c22169
<        ERB  242,FUNCTION RETURN FROM LEVEL ZERO
---
>        ERB  247,FUNCTION RETURN FROM LEVEL ZERO
23227c22195
<        MOV  PFVBL(XR),XL     LOAD VRBLK PTR (SGD13)
---
>        MOV  PFVBL(XR),XL     LOAD VRBLK POINTER
23260c22228
<        JSR  PRTNL            TERMINATE PRINT LINE
---
>        JSR  PRTFH            TERMINATE PRINT LINE
23295c22263
< *      HERE IF &PROFILE = 1. START TIME MUST BE FRIGGED TO
---
> *      HERE IF PROFILE = 1. START TIME MUST BE FRIGGED TO
23303c22271
< *      HERE IF &PROFILE = 2
---
> *      HERE IF PROFILE = 2
23331a22300
>        EJC
23332a22302,22303
> *      RETRN (CONTINUED)
> *
23344d22314
<        EJC
23346,23347d22315
< *      RETRN (CONTINUED)
< *
23352c22320
<        ERR  243,FUNCTION RESULT IN NRETURN IS NOT NAME
---
>        ERR  248,FUNCTION RESULT IN NRETURN IS NOT NAME
23393c22361
<        ERB  244,STATEMENT COUNT EXCEEDS VALUE OF STLIMIT KEYWORD
---
>        ERB  249,STATEMENT COUNT EXCEEDS VALUE OF STLIMIT KEYWORD
23409a22378,22380
> *
> *      MERGE PROFILE, NO-PROFILE CASES
> *
23432c22403,22404
< *      (XR)                  POINTS TO ENDING MESSAGE
---
> *      (WA)                  0 OR ERROR MESSAGE CODE
> *      (XR)                  0 OR ENDING MESSAGE POINTER
23436c22408,22410
< *      TO ENDING MESSAGE OR IS ZERO IF MESSAGE  PRINTED ALREADY.
---
> *      TO ENDING MESSAGE OR IS ZERO IF MESSAGE PRINTED ALREADY.
> *      (WA) AND (XR) ARE BOTH NON-ZERO ONLY IN THE CASE OF FATAL
> *      ERRORS DURING INITIAL COMPILE.
23440d22413
<        BZE  XR,STPRA         SKIP IF SYSAX ALREADY CALLED (REG04)
23442d22414
< STPRA  ADD  RSMEM,DNAME      USE THE RESERVE MEMORY
23444d22415
<        ADD  RSMEM,DNAME      USE THE RESERVE MEMORY
23446,23448c22417,22424
<        BNE  XR,=ENDMS,STPR0  SKIP IF NOT NORMAL END MESSAGE
<        BNZ  EXSTS,STPR3      SKIP IF EXEC STATS SUPPRESSED
<        ZER  ERICH            CLEAR ERRORS TO INT.CH. FLAG
---
>        ADD  RSMEM,DNAME      USE THE RESERVE MEMORY
>        BZE  WA,STPR1         SKIP IF NO ERROR MESSAGE
>        MOV  XR,STPXR         KEEP 0 OR ENDING MESSAGE
>        MOV  TTERL,TTLST      SEND ERROR AND STATS TO TERML
>        JSR  PRTPG            PAGE THROW
>        JSR  ERMSG            PRINT ERROR MESSAGE
>        MOV  STPXR,XR         RECOVER 0 OR ENDING MESSAGE
>        ZER  EXSTS            TO FORCE ENDING STATS OUT FOR ERROR
23450c22426
< *      LOOK TO SEE IF AN ENDING MESSAGE IS SUPPLIED
---
> *      PROCESS ENDING STATISTICS
23452,23454c22428,22433
< STPR0  JSR  PRTPG            EJECT PRINTER
<        BZE  XR,STPR1         SKIP IF NO MESSAGE
<        JSR  PRTST            PRINT MESSAGE
---
> STPR1  MTI  KVSTN            GET STATEMENT NUMBER
>        IEQ  STPR6            SKIP IF COMPILE TIME
>        BNZ  EXSTS,STPR4      SKIP IF NO STATS TO BE PRINTED
>        JSR  PRTPG            EJECT PRINTER
>        BZE  XR,STPR2         SKIP IF NO MESSAGE
>        JSR  PRTFB            PRINT MESSAGE
23458,23459c22437
< STPR1  JSR  PRTIS            PRINT BLANK LINE
<        MTI  KVSTN            GET STATEMENT NUMBER
---
> STPR2  JSR  PRTFH            PRINT BLANK LINE
23461c22439
<        JSR  PRTMX            PRINT IT
---
>        JSR  PRTMI            PRINT IT
23466c22444
<        JSR  PRTMX            PRINT IT
---
>        JSR  PRTMI            PRINT IT
23468c22446
<        ILT  STPR2            SKIP IF NEGATIVE
---
>        ILT  STPR3            SKIP IF NEGATIVE
23472c22450,22452
<        JSR  PRTMX            PRINT IT
---
>        JSR  PRTMI            PRINT IT
> .IF    .CTMD
> .ELSE
23475c22455
<        IOV  STPR2            JUMP IF WE CANNOT COMPUTE
---
>        IOV  STPR3            JUMP IF WE CANNOT COMPUTE
23477c22457
<        IOV  STPR2            JUMP IF OVERFLOW
---
>        IOV  STPR3            JUMP IF OVERFLOW
23479c22459,22460
<        JSR  PRTMX            PRINT IT
---
>        JSR  PRTMI            PRINT IT
> .FI
23486c22467
< STPR2  MTI  GBCNT            LOAD COUNT OF COLLECTIONS
---
> STPR3  MTI  GBCNT            LOAD COUNT OF COLLECTIONS
23488,23489c22469,22470
<        JSR  PRTMX            PRINT IT
<        JSR  PRTIS            ONE MORE BLANK FOR LUCK
---
>        JSR  PRTMI            PRINT IT
>        JSR  PRTFH            ONE MORE BLANK FOR LUCK
23494c22475
< STPR3  MOV  KVDMP,XR         LOAD DUMP KEYWORD
---
> STPR4  MOV  KVDMP,XR         LOAD DUMP KEYWORD
23496,23497c22477
< STPR3  JSR  PRFLR            PRINT PROFILE IF WANTED
< *
---
> STPR4  JSR  PRFLR            PRINT PROFILE IF WANTED
23501,23503c22481,22484
<        MOV  R$FCB,XL         GET FCBLK CHAIN HEAD
<        MOV  KVABE,WA         LOAD ABEND VALUE
<        MOV  KVCOD,WB         LOAD CODE VALUE
---
> *
> *      MERGE TO END RUN FOR SEVERE COMPILATION ERRORS
> *
> STPR5  MOV  =KVCOD,WA        LOAD CODE VALUE
23504a22486,22496
> *
> *      TERMINATION DURING COMPILE
> *
> STPR6  BZE  XR,STPR7         SKIP IF NO MESSAGE
>        JSR  PRTSF            ELSE PRINT IT
> *
> *      NOTIFICATION THAT IT IS COMPILE TIME
> *
> STPR7  MOV  =ENDIC,XR        NOTIFY USER
>        JSR  PRTSF            SEND IT
>        BRN  STPR5            END
23522,23542d22513
<        EJC
< *
< *      SYSAB -- PRINT /ABNORMAL END/ AND TERMINATE
< *
< SYSAB  RTN
<        MOV  =ENDAB,XR        POINT TO MESSAGE
<        MOV  =NUM01,KVABE     SET ABEND FLAG
<        JSR  PRTNL            SKIP TO NEW LINE
<        BRN  STOPR            JUMP TO PACK UP
<        EJC
< *
< *      SYSTU -- PRINT /TIME UP/ AND TERMINATE
< *
< SYSTU  RTN
<        MOV  =ENDTU,XR        POINT TO MESSAGE
<        MOV  STRTU,WA         GET CHARS /TU/
<        MOV  WA,KVCOD         PUT IN KVCOD
<        MOV  TIMUP,WA         CHECK STATE OF TIMEUP SWITCH
<        MNZ  TIMUP            SET SWITCH
<        BNZ  WA,STOPR         STOP RUN IF ALREADY SET
<        ERB  245,TRANSLATION/EXECUTION TIME EXPIRED
23548a22520
> STAKV  RTN                   ENTRY POINT FOR STACK OVERFLOW
23552c22524
<        ERB  246,STACK OVERFLOW
---
>        ERB  250,STACK OVERFLOW
23557a22530,22531
>        ZER  WA               NO ERROR MESSAGE
>        MOV  TTERL,TTLST      SEND MESSAGE TO TERML IF POSSIBLE
23591c22565,22567
< ERROR  BEQ  R$CIM,=CMLAB,CMPLE JUMP IF ERROR IN SCANNING LABEL
---
> ERROR  RTN                   ERROR CODE ENTRY POINT
>        BGE  ERRFT,=NUM03,ERR16 SKIP IF TOO MANY FATALS
>        BEQ  R$CIM,=CMLAB,ERRG1 JUMP IF ERROR IN LABEL SCAN
23598,23601c22574,22577
<        IFF  STGXC,ERR04      EXECUTE TIME COMPILE
<        IFF  STGEV,ERR04      EVAL COMPILING EXPR.
<        IFF  STGEE,ERR04      EVAL EVALUATING EXPR
<        IFF  STGXT,ERR05      EXECUTE TIME
---
>        IFF  STGXC,ERR08      EXECUTE TIME COMPILE
>        IFF  STGEV,ERR08      EVAL COMPILING EXPR.
>        IFF  STGEE,ERR08      EVAL EVALUATING EXPR
>        IFF  STGXT,ERR12      EXECUTE TIME
23603c22579
<        IFF  STGXE,ERR04      XEQ COMPILE-PAST END
---
>        IFF  STGXE,ERR08      XEQ COMPILE-PAST END
23605d22580
<        EJC
23608d22582
< *
23613d22586
< *
23617d22589
< *
23619a22592
>        EJC
23623,23624c22596,22600
<        BNZ  ERRSP,ERR03      JUMP IF ERROR SUPPRESS FLAG SET
<        MOV  ERICH,ERLST      SET FLAG FOR LISTR
---
>        BNZ  ERRSP,ERR06      JUMP IF ERROR SUPPRESS FLAG SET
>        JSR  PRTFH            PRINT A BLANK
>        MOV  TTERL,TTLST      SET FLAG FOR LISTR
>        ADD  =NUM03,LSTLC     CAUSE EJECT IF BELOW 4 LINES LEFT
>        MOV  LSTLC,-(XS)      KEEP LINE COUNT
23626,23629c22602,22609
<        JSR  PRTIS            TERMINATE LISTING
<        ZER  ERLST            CLEAR LISTR FLAG
<        MOV  SCNSE,WA         LOAD SCAN ELEMENT OFFSET
<        BZE  WA,ERR02         SKIP IF NOT SET
---
>        JSR  PRTFH            TERMINATE LISTING
>        MOV  (XS)+,WA         RECOVER LINE COUNT
>        BGT  LSTLC,WA,ERR02   SKIP IF NOT NEW PAGE
>        ADD  =NUM04,LSTLC     BUMP FOR LINES PRINTED
> *
> *      PRINT FLAG UNDER BAD ELEMENT
> *
> ERR02  MOV  SCNSE,WA         LOAD SCAN ELEMENT OFFSET
23631c22611
<        LCT  WB,WA            LOOP COUNTER
---
>        MOV  WA,WB            COPY OFFSET
23635a22616
>        BZE  WB,ERR05         SKIP IF NO BLANKS BEFORE ERROR FLAG
23637a22619
>        LCT  WB,WB            LOOP COUNTER
23641,23642c22623,22624
< ERRA1  LCH  WC,(XL)+         GET NEXT CHAR
<        BEQ  WC,=CH$HT,ERRA2  SKIP IF TAB
---
> ERR03  LCH  WC,(XL)+         GET NEXT CHAR
>        BEQ  WC,=CH$HT,ERR04  SKIP IF TAB
23648,23650c22630,22636
< ERRA2  SCH  WC,(XR)+         STORE CHAR
<        BCT  WB,ERRA1         LOOP
<        MOV  =CH$EX,XL        EXCLAMATION MARK
---
> ERR04  SCH  WC,(XR)+         STORE CHAR
>        BCT  WB,ERR03         LOOP
>        EJC
> *
> *      MERGE IN CASE OF NO PRECEDING BLANKS
> *
> ERR05  MOV  =CH$EX,XL        EXCLAMATION MARK
23658c22644
<        MFI  GTNSI            STORE AS SIGNED INTEGER
---
>        STI  GTNSI            STORE AS SIGNED INTEGER
23662c22648
<        STI  PROFS            USE AS CHARACTER OFFSET
---
>        MFI  PROFS            USE AS CHARACTER OFFSET
23669,23670c22655,22656
< ERR02  JSR  ERMSG            GENERATE FLAG AND ERROR MESSAGE
<        ADD  =NUM03,LSTLC     BUMP PAGE CTR FOR BLANK, ERROR, BLK
---
>        JSR  ERMSG            GENERATE FLAG AND ERROR MESSAGE
>        ZER  TTLST            REVERT TO REGULAR LISTING
23672c22658,22659
<        BHI  ERRFT,=NUM03,STOPR PACK UP IF SEVERAL FATALS
---
>        ICV  CMERC            BUMP ERROR COUNT
>        BNE  STAGE,=STGIC,ERRG2  SPECIAL RETURN IF AFTER END LINE
23674c22661,22662
< *      COUNT ERROR, INHIBIT EXECUTION IF REQUIRED
---
> *      IF ERROR IN READR THEN EITHER CLOSE OUT
> *      CURRENT -COPY LEVEL, OR IF AT TOP THEN ABORT
23676,23679c22664,22667
<        ICV  CMERC            BUMP ERROR COUNT
<        ADD  CSWER,NOXEQ      INHIBIT XEQ IF -NOERRORS
<        BNE  STAGE,=STGIC,CMP10  SPECIAL RETURN IF AFTER END LINE
<        EJC
---
>        BZE  RDRER,ERR06      SKIP IF NOT ERROR WHILE READING
>        BZE  R$COP,ERR16      ABORT IF AT TOP LEVEL INPUT FILE
>        ZER  RDRER            ELSE CLEAR READR ERROR FLAG
>        JSR  COPND            AND CLOSE OUT THIS COPY LEVEL
23683c22671,22672
< ERR03  MOV  R$CIM,XR         POINT TO START OF IMAGE
---
> ERR06  MOV  R$CIM,XR         POINT TO START OF IMAGE
>        BZE  XR,ERR07         SKIP IF NO INPUT IMAGE
23686c22675
<        BEQ  XR,=CH$MN,CMPCE  JUMP IF ERROR IN CONTROL CARD
---
>        BEQ  XR,=CH$MN,ERRG3  JUMP IF ERROR IN CONTROL CARD
23690c22679
<        BNE  XL,=T$SMC,ERR03  LOOP BACK IF NOT STATEMENT END
---
>        BNE  XL,=T$SMC,ERR06  LOOP BACK IF NOT STATEMENT END
23691a22681
>        EJC
23695c22685
<        MOV  *CDCOD,CWCOF     RESET OFFSET IN CCBLK
---
> ERR07  MOV  *CDCOD,CWCOF     RESET OFFSET IN CCBLK
23701c22691,22692
<        BRN  CMPSE            MERGE TO GENERATE ERROR AS CDFAL
---
>        JMG  CMPSE            MERGE TO GENERATE ERROR AS CDFAL
>        EJC
23703c22694
< *      ERROR DURING EXECUTE TIME COMPILE OR EXPRESSION EVALUATIO
---
> *      ERROR DURING EXECUTE TIME COMPILE OR EXPRESSION EVALUATION.
23711c22702,22704
< ERR04  ZER  R$CCB            FORGET GARBAGE CODE BLOCK
---
> ERR08  JSR  COPND            CALL TO CLOSE OFF THIS LEVEL
>        BNZ  R$COP,ERR08      LOOP IF NOT ALL -COPYS CLOSED
>        ZER  R$CCB            FORGET GARBAGE CODE BLOCK
23719,23721c22712,22714
< ERRA4  ICA  XS               POP STACK
<        BEQ  XS,FLPRT,ERRC4   JUMP IF PROG DEFINED FN CALL FOUND
<        BNE  XS,GTCEF,ERRA4   LOOP IF NOT EVAL OR CODE CALL YET
---
> ERR09  ICA  XS               POP STACK
>        BEQ  XS,FLPRT,ERR11   JUMP IF PROG DEFINED FN CALL FOUND
>        BNE  XS,GTCEF,ERR09   LOOP IF NOT EVAL OR CODE CALL YET
23729c22722
< ERRB4  BNZ  KVERL,ERR07      JUMP IF ERRLIMIT NON-ZERO
---
> ERR10  BNZ  KVERL,ERR14      JUMP IF ERRLIMIT NON-ZERO
23734,23736c22727,22728
< ERRC4  MOV  FLPTR,XS         RESTORE STACK FROM FLPTR
<        BRN  ERRB4            MERGE
<        EJC
---
> ERR11  MOV  FLPTR,XS         RESTORE STACK FROM FLPTR
>        BRN  ERR10            MERGE
23742,23744c22734
< *      IF ERRLIMIT KEYWORD IS ZERO, AN ABORT IS SIGNALLED,
< *      SEE CODING FOR SYSTEM LABEL ABORT AT L$ABO.
< *
---
> *      IF ERRLIMIT KEYWORD IS ZERO, THE RUN IS ABORTED.
23749c22739
< *      IF 3 OR MORE FATAL ERRORS OCCUR AN ABORT IS SIGNALLED
---
> *      IF 3 OR MORE FATAL ERRORS OCCUR AN ABORT OCCURS
23752a22743
>        EJC
23754,23755c22745,22746
< ERR05  SSL  INISS            RESTORE MAIN PROG S-R STACK PTR
<        BNZ  DMVCH,ERR08      JUMP IF IN MID-DUMP
---
> ERR12  SSL  INISS            RESTORE MAIN PROG S-R STACK PTR
>        BNZ  DMVCH,ERR15      JUMP IF IN MID-DUMP
23757c22748
< *      MERGE HERE FROM ERR08
---
> *      MERGE HERE AFTER DUMP TIDY UP
23759c22750,22751
< ERR06  BZE  KVERL,LABO1      ABORT IF ERRLIMIT IS ZERO
---
> ERR13  ZER  XR               CLEAR XR FLAG
>        BZE  KVERL,STOPR      ABORT IF ERRLIMIT IS ZERO
23762c22754
< *      MERGE FROM ERR04
---
> *      MERGE AFTER ERRLIMIT TEST
23764,23765c22756
< ERR07  BGE  ERRFT,=NUM03,LABO1 ABORT IF TOO MANY FATAL ERRORS
<        DCV  KVERL            DECREMENT ERRLIMIT
---
> ERR14  DCV  KVERL            DECREMENT ERRLIMIT
23772c22763
<        BZE  XR,LCNT1         CONTINUE IF NO SETEXIT TRAP
---
>        BZE  XR,ERRG4         CONTINUE IF NO SETEXIT TRAP
23781,23782c22772,22773
< ERR08  MOV  DMVCH,XR         CHAIN HEAD FOR AFFECTED VRBLKS
<        BZE  XR,ERR06         DONE IF ZERO
---
> ERR15  MOV  DMVCH,XR         CHAIN HEAD FOR AFFECTED VRBLKS
>        BZE  XR,ERR13         DONE IF ZERO
23785c22776,22795
<        BRN  ERR08            LOOP THROUGH CHAIN
---
>        BRN  ERR15            LOOP THROUGH CHAIN
> *
> *      TAKE DRACONIAN STEPS FOR REPEATED FATAL ERRORS
> *
> ERR16  MOV  ERRTF,WA         ERROR CODE
>        MOV  WA,KVERT         PLACE ERROR CODE FOR ERMSG
>        MNZ  XR               IN CASE COMPILE TIME
>        BEQ  STAGE,=STGIC,STOPR JUMP IF SO
>        BEQ  STAGE,=STGCE,STOPR ALSO COMPILE TIME
>        ZER  XR               INDICATE EXECUTION
>        BRN  STOPR            TERMINATE RUN
> *
> ERRAF  ERB  251,TOO MANY FATAL ERRORS
> *
> *      HERE FOR GLOBAL ERROR JUMPS
> *
> ERRG1  JMG  CMPLE
> ERRG2  JMG  CMPEE
> ERRG3  JMG  CMPCE
> ERRG4  JMG  LCNXE
23791,23801d22800
< 
< 
< 
< 
< 
< 
< 
< 
< 
< 
<