Google
 

Trailing-Edge - PDP-10 Archives - decuslib10-07 - 43,50443/xcom.lst
There are 2 other files named xcom.lst in the archive. Click here to see a list.
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 1
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
    1   /*                                                                              *
    2                                P D P - 1 0   X P L                                *
    3                                V E R S I O N   1                                  *
    4        A COMPILER-COMPILER FOR PROGRAMMING LANGUAGE 1.                            *
    5                                                 RICHARD L. BISBEY II              *
    6                                                 JULY 1971                         *
    7                                                                                   *
    8  VERSION 4.0        NOVEMBER 1975.                                                *
    9                                                                                   *
   10        VERION 4 OF THE COMPILER PROCESSES THE ENTIRE XPL GRAMMAR.                 *
   11                                                                                   *
   12  VERSION 3.0        NOVEMBER, 1975.                                               *
   13                                                                                   *
   14        VERSION 3.0 CONTAINS THE FOLLOWING DIFFERENCES FROM VERSION 2.0:           *
   15        RELOCATABLE BINARY CODE OUTPUT,                                            *
   16        CALL INLINE FACILITY IMPLEMENTED,                                          *
   17        UUOS USED TO CALL THE RUN-TIME ROUTINES,                                   *
   18        SOME SWITCHES CAN BE SPECIFIED FROM THE TERMINAL,                          *
   19        "COMPACTIFY" IS COMPILED FROM A SOURCE LIBRARY,                            *
   20        REDUNDANT SAVES OF PROCEDURE RESULTS IN OTHER REGISTERS IS                 *
   21           AVOIDED IN MOST INSTANCES.                                              *
   22                                                                                   *
   23        VERSION 2.0                                                                *
   24        HASH-CODED SYMBOL TABLE,                                                   *
   25        LEFT-TO-RIGHT GENERATION OF STRINGS FROM NUMBERS,                          *
   26        SPECIAL CASE CHECKS IN STRING CATENATION ROUTINE,                          *
   27        FASTER, MORE EFFICIENT PROCEDURE CALLS,                                    *
   28        GENERAL INPUT/OUTPUT, FILE, FILENAME PROCEDURES,                           *
   29        BETTER LISTING, SYMBOL DUMP FORMAT, ETC.                                   *
   30                                                                                   *
   31               R. W. HAY,                                                          *
   32               COMPUTER GROUP,                                                     *
   33               DEPT. OF ELECTRICAL ENG.,                                           *
   34               UNIVERSITY OF TORONTO,                                              *
   35               TORONTO, ONTARIO, CANADA.                                           *
   36                                                                                   *
   37                                                                                   *
   38        THE MAIN STRUCTURE OF THE PROGRAM IS AS FOLLOWS:                           *
   39              CONTENTS.                                                            *
   40              RECOGNITION TABLES FOR THE SYNTAX ANALYZER.                          *
   41              DECLARATION OF SCANNER/COMPILER VARIABLES.                           *
   42              STORAGE COMPACTIFICATION PROCEDURE.                                  *
   43              SCANNER PROCEDURES.                                                  *
   44              PARSER PROCEDURES.                                                   *
   45              CODE/DATA EMITTER PROCEDURES.                                        *
   46              SYMBOL TABLE PROCEDURES.                                             *
   47              CODE GENERATION PROCEDURES.                                          *
   48              INITIALIZATION PROCEDURE.                                            *
   49              ANALYSIS ALGORITHM.                                                  *
   50              PRODUCTION RULES.                                                    *
   51     */                                                                            *
   52                                                                                   *
   53     DECLARE VERSION LITERALLY '''4.0''';                                          *
   54                                                                                   *
   55           /*   THESE ARE LALR PARSING TABLES   */                                 *
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 2
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
   56                                                                                   *
   57           DECLARE MAXR# LITERALLY '99'; /* MAX READ # */                          *
   58                                                                                   *
   59           DECLARE MAXL# LITERALLY '125'; /* MAX LOOK # */                         *
   60                                                                                   *
   61           DECLARE MAXP# LITERALLY '125'; /* MAX PUSH # */                         *
   62                                                                                   *
   63           DECLARE MAXS# LITERALLY '234'; /* MAX STATE # */                        *
   64                                                                                   *
   65           DECLARE START_STATE LITERALLY '1';                                      *
   66                                                                                   *
   67           DECLARE TERMINAL# LITERALLY '42'; /* # OF TERMINALS */                  *
   68                                                                                   *
   69           DECLARE VOCAB# LITERALLY '91';                                          *
   70                                                                                   *
   71           DECLARE VOCAB(VOCAB#) CHARACTER INITIAL ('','<','(','+','^','&','*',')' *
   72           ,';','\','-','/',',','>',':','=','^^','BY','DO','GO','IF','TO','BIT'    *
   73           ,'END','EOF','MOD','CALL','CASE','ELSE','GOTO','THEN','FIXED','LABEL'   *
   74           ,'WHILE','RETURN','DECLARE','INITIAL','<NUMBER>','<STRING>','CHARACTER' *
   75           ,'LITERALLY','PROCEDURE','<IDENTIFIER>','<TERM>','<TYPE>','<GO TO>'     *
   76           ,'<GROUP>','<ENDING>','<PRIMARY>','<PROGRAM>','<REPLACE>','<BIT HEAD>'  *
   77           ,'<CONSTANT>','<RELATION>','<VARIABLE>','<IF CLAUSE>','<LEFT PART>'     *
   78           ,'<STATEMENT>','<TRUE PART>','<ASSIGNMENT>','<BOUND HEAD>'              *
   79           ,'<EXPRESSION>','<GROUP HEAD>','<IF STATEMENT>','<INITIAL HEAD>'        *
   80           ,'<INITIAL LIST>','<WHILE CLAUSE>','<CASE SELECTOR>','<CALL STATEMENT>' *
   81           ,'<LOGICAL FACTOR>','<PARAMETER HEAD>','<PARAMETER LIST>'               *
   82           ,'<PROCEDURE HEAD>','<PROCEDURE NAME>','<STATEMENT LIST>'               *
   83           ,'<SUBSCRIPT HEAD>','<BASIC STATEMENT>','<GO TO STATEMENT>'             *
   84           ,'<IDENTIFIER LIST>','<LOGICAL PRIMARY>','<STEP DEFINITION>'            *
   85           ,'<LABEL DEFINITION>','<RETURN STATEMENT>','<TYPE DECLARATION>'         *
   86           ,'<ITERATION CONTROL>','<LOGICAL SECONDARY>','<STRING EXPRESSION>'      *
   87           ,'<DECLARATION ELEMENT>','<PROCEDURE DEFINITION>'                       *
   88           ,'<ARITHMETIC EXPRESSION>','<DECLARATION STATEMENT>'                    *
   89           ,'<IDENTIFIER SPECIFICATION>');                                         *
   90                                                                                   *
   91           DECLARE P# LITERALLY '109'; /* # OF PRODUCTIONS */                      *
   92                                                                                   *
   93           DECLARE STATE_NAME(MAXR#) BIT(8) INITIAL (0,0,1,2,3,3,4,5,6,7,9,9,10,10 *
   94           ,11,12,13,16,17,18,19,20,21,22,23,25,26,27,33,34,35,36,37,37,40,42,42   *
   95           ,42,42,42,43,43,43,43,43,44,44,45,46,50,50,51,52,53,54,54,55,56,58,59   *
   96           ,60,61,61,61,61,61,61,61,61,61,61,62,64,66,67,68,69,69,70,71,72,73,74   *
   97           ,74,75,76,77,78,80,81,81,82,83,86,86,88,89,89,90,91);                   *
   98                                                                                   *
   99           DECLARE RSIZE LITERALLY '337'; /*  READ STATES INFO  */                 *
  100                                                                                   *
  101           DECLARE LSIZE LITERALLY '69'; /* LOOK AHEAD STATES INFO */              *
  102                                                                                   *
  103           DECLARE ASIZE LITERALLY '105'; /* APPLY PRODUCTION STATES INFO */       *
  104                                                                                   *
  105           DECLARE READ1(RSIZE) BIT(8) INITIAL (0,8,18,19,20,26,29,34,35,42,15,2,3 *
  106           ,9,10,37,38,42,2,37,38,42,2,37,38,42,2,3,9,10,37,38,42,2,3,9,10,37,38   *
  107           ,42,2,37,38,42,22,31,32,39,2,3,10,37,38,42,1,13,15,2,37,38,42,2,37,38   *
  108           ,42,2,37,38,42,2,42,15,2,3,10,37,38,42,2,3,9,10,37,38,42,8,27,33,42,21  *
  109           ,2,3,9,10,37,38,42,2,3,9,10,37,38,42,2,42,2,37,38,42,42,2,3,9,10,37,38  *
  110           ,42,2,3,9,10,37,38,42,2,3,9,10,37,38,42,2,42,2,7,7,38,2,14,2,40,7,12,7  *
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 3
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  111           ,12,6,11,25,6,11,25,6,11,25,6,11,25,6,11,25,8,8,42,8,2,3,9,10,37,38,42  *
  112           ,2,3,9,10,37,38,42,37,7,12,2,3,10,37,38,42,12,15,15,8,18,19,20,26,29,34 *
  113           ,35,42,42,8,18,19,20,26,29,34,35,42,8,37,4,30,4,4,7,12,4,4,4,7,4,4,21,4 *
  114           ,17,4,8,18,19,20,23,26,29,34,35,42,37,38,8,8,8,5,5,42,8,22,31,32,39,8   *
  115           ,18,19,20,26,29,34,35,42,2,8,22,31,32,39,8,18,19,20,24,26,29,34,35,42,8 *
  116           ,18,19,20,23,26,29,34,35,42,2,3,9,10,37,38,42,28,8,42,8,8,18,19,20,26   *
  117           ,29,34,35,41,42,8,18,19,20,23,26,29,34,35,41,42,8,36,1,9,13,15,16,16,8  *
  118           ,3,10,3,10,8,12,2,22,31,32,39);                                         *
  119                                                                                   *
  120           DECLARE LOOK1(LSIZE) BIT(8) INITIAL (0,15,0,15,0,42,0,8,0,2,14,0,2,0,40 *
  121           ,0,6,11,25,0,6,11,25,0,6,11,25,0,6,11,25,0,6,11,25,0,4,0,4,0,4,0,4,0,8  *
  122           ,0,4,0,5,0,5,0,28,0,36,0,1,9,13,15,16,0,16,0,3,10,0,3,10,0);            *
  123                                                                                   *
  124           /*  PUSH STATES ARE BUILT-IN TO THE INDEX TABLES  */                    *
  125                                                                                   *
  126           DECLARE APPLY1(ASIZE) BIT(8) INITIAL (0,0,80,0,56,58,71,82,83,0,56,89   *
  127           ,90,0,89,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,90,0,71,83,90,0,0,0,0,0,0,15 *
  128           ,0,0,9,79,99,0,0,0,0,0,0,0,57,0,55,0,0,3,18,22,27,28,29,49,50,84,0,6,0  *
  129           ,7,0,10,0,0,53,0,17,0,4,5,12,13,0,8,14,25,0,1,19,26,56,57,58,71,80,82   *
  130           ,83,89,90,0,0,72,0);                                                    *
  131                                                                                   *
  132           DECLARE READ2(RSIZE) BIT(8) INITIAL (0,138,19,20,21,26,174,103,30,104   *
  133           ,213,3,4,10,12,234,233,105,3,234,233,105,3,234,233,105,3,4,10,12,234    *
  134           ,233,105,3,4,10,12,234,233,105,3,234,233,105,23,182,184,183,3,4,12,234  *
  135           ,233,105,211,212,210,3,234,233,105,3,234,233,105,3,234,233,105,190,106  *
  136           ,214,3,4,12,234,233,105,3,4,10,12,234,233,105,146,27,28,105,173,3,4,10  *
  137           ,12,234,233,105,3,4,10,12,234,233,105,186,166,3,234,233,105,105,3,4,10  *
  138           ,12,234,233,105,3,4,10,12,234,233,105,3,4,10,12,234,233,105,190,106,193 *
  139           ,9,185,178,231,168,231,34,189,191,162,164,8,14,25,8,14,25,8,14,25,8,14  *
  140           ,25,8,14,25,158,160,172,132,3,4,10,12,234,233,105,3,4,10,12,234,233,105 *
  141           ,33,192,194,3,4,12,234,233,105,198,197,197,138,19,20,21,26,174,103,30   *
  142           ,104,105,138,19,20,21,26,174,103,30,104,131,32,6,143,6,6,230,232,6,6,6  *
  143           ,228,6,6,22,6,18,6,138,19,20,21,102,26,174,103,30,104,234,233,148,149   *
  144           ,135,7,7,39,159,23,182,184,183,138,19,20,21,26,174,103,30,104,163,157   *
  145           ,23,182,184,183,138,19,20,21,126,26,174,103,30,104,138,19,20,21,102,26  *
  146           ,174,103,30,104,3,4,10,12,234,233,105,144,136,38,147,138,19,20,21,26    *
  147           ,174,103,30,161,104,138,19,20,21,102,26,174,103,30,161,104,134,31,100   *
  148           ,11,101,207,17,17,133,5,13,5,13,137,15,187,23,182,184,183);             *
  149                                                                                   *
  150           DECLARE LOOK2(LSIZE) BIT(8) INITIAL (0,2,208,16,209,24,165,169,29,35,35 *
  151           ,229,36,229,37,188,40,40,40,217,41,41,41,220,42,42,42,221,43,43,43,218  *
  152           ,44,44,44,219,62,170,64,155,65,154,67,195,152,69,70,153,76,199,77,200   *
  153           ,85,129,92,177,93,93,93,93,93,205,94,206,96,96,215,97,97,216);          *
  154                                                                                   *
  155           DECLARE APPLY2(ASIZE) BIT(8) INITIAL (0,0,83,82,140,141,150,128,128,127 *
  156           ,120,139,139,129,142,142,130,56,58,48,71,88,151,73,74,95,80,81,79,78    *
  157           ,156,167,145,90,90,90,89,91,75,86,47,98,176,175,121,180,46,179,45,51,60 *
  158           ,99,87,181,72,196,59,50,49,57,66,117,116,113,114,112,115,68,63,61,119   *
  159           ,118,202,201,204,203,53,123,122,125,124,108,110,109,111,107,223,224,225 *
  160           ,222,54,55,171,54,54,54,54,54,54,54,54,54,227,84,52,226);               *
  161                                                                                   *
  162           DECLARE INDEX1(MAXS#) BIT(16) INITIAL (0,1,10,11,18,22,26,33,40,44,48   *
  163           ,54,57,61,65,69,71,72,78,85,89,90,97,104,105,106,110,111,118,125,132    *
  164           ,134,135,136,137,138,140,141,142,144,146,149,152,155,158,161,162,163    *
  165           ,164,165,172,179,180,182,188,190,191,200,201,210,211,212,214,215,218    *
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 4
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  166           ,219,220,222,223,225,227,228,238,240,241,242,243,244,245,246,251,260    *
  167           ,266,276,286,293,294,295,296,297,307,318,319,320,325,326,327,329,331    *
  168           ,333,1,3,5,7,9,12,14,16,20,24,28,32,36,38,40,42,44,46,48,50,52,54,56,62 *
  169           ,64,67,1,2,2,4,4,10,10,10,10,10,10,10,10,10,14,14,14,17,18,19,20,20,20  *
  170           ,20,20,21,22,22,23,24,25,26,26,26,26,27,28,29,29,30,30,30,33,37,37,38   *
  171           ,39,40,40,41,41,42,42,44,44,44,45,45,45,45,49,50,51,51,52,52,53,54,54   *
  172           ,55,55,57,59,60,60,70,70,72,72,74,74,76,76,76,76,76,76,76,76,77,77,79   *
  173           ,79,79,79,79,81,81,81,81,86,86,86,90,90,103,103,104,104);               *
  174                                                                                   *
  175           DECLARE INDEX2(MAXS#) BIT(8) INITIAL (0,9,1,7,4,4,7,7,4,4,6,3,4,4,4,2,1 *
  176           ,6,7,4,1,7,7,1,1,4,1,7,7,7,2,1,1,1,1,2,1,1,2,2,3,3,3,3,3,1,1,1,1,7,7,1  *
  177           ,2,6,2,1,9,1,9,1,1,2,1,3,1,1,2,1,2,2,1,10,2,1,1,1,1,1,1,5,9,6,10,10,7,1 *
  178           ,1,1,1,10,11,1,1,5,1,1,2,2,2,5,2,2,2,2,3,2,2,4,4,4,4,4,2,2,2,2,2,2,2,2  *
  179           ,2,2,6,2,3,3,1,0,1,0,0,1,1,1,1,1,1,1,0,1,1,2,1,2,1,1,1,2,2,2,1,3,1,3,1  *
  180           ,1,2,1,2,2,3,1,2,0,2,0,1,1,1,0,1,1,1,1,0,1,2,0,2,1,3,1,0,0,0,2,1,1,0,2  *
  181           ,0,2,2,1,2,2,1,0,1,0,2,0,2,0,1,0,2,0,0,0,1,1,1,1,1,0,2,0,2,2,1,1,0,2,2  *
  182           ,2,0,0,2,0,2,1,2,0,0);                                                  *
  183                                                                                   *
  184                                                                                   *
  185     /*  DECLARATIONS FOR THE SCANNER                                        */    *
  186     /* TOKEN IS THE INDEX INTO THE VOCABULARY V() OF THE LAST SYMBOL SCANNED,     *
  187        CP IS THE POINTER TO THE LAST CHARACTER SCANNED IN THE CARDIMAGE,          *
  188        BCD IS THE LAST SYMBOL SCANNED (LITERAL CHARACTER STRING). */              *
  189                                                                                   *
  190     DECLARE TOKEN FIXED, BCD CHARACTER, CH FIXED, CP FIXED;                       *
  191                                                                                   *
  192     /* SET UP SOME CONVENIENT ABBREVIATIONS FOR PRINTER CONTROL */                *
  193                                                                                   *
  194     DECLARE TRUE LITERALLY '"1"', FALSE LITERALLY '"0"',                          *
  195        FOREVER LITERALLY 'WHILE TRUE',                                            *
  196        X70 CHARACTER INITIAL ('                                                   *
  197                                ');                                                *
  198     DECLARE POINTER CHARACTER INITIAL    ('                                       *
  199                                                             ^');                  *
  200     /* LENGTH OF LONGEST SYMBOL IN V */                                           *
  201     DECLARE RESERVED_LIMIT FIXED;                                                 *
  202                                                                                   *
  203     /* CHARTYPE() IS USED TO DISTINGUISH CLASSES OF SYMBOLS IN THE SCANNER.       *
  204        TX() IS A TABLE USED FOR TRANSLATING FROM ONE CHARACTER SET TO ANOTHER.    *
  205        CONTROL() HOLDS THE VALUE OF THE COMPILER CONTROL TOGGLES SET IN $ CARDS.  *
  206        NOT_LETTER_OR_DIGIT() IS SIMILIAR TO CHARTYPE() BUT USED IN SCANNING       *
  207        IDENTIFIERS ONLY.                                                          *
  208                                                                                   *
  209        ALL ARE USED BY THE SCANNER AND CONTROL() IS SET THERE.                    *
  210     */                                                                            *
  211     DECLARE CHARTYPE(255) BIT(8), TX(255) BIT(8), CONTROL(255) BIT(1),            *
  212        NOT_LETTER_OR_DIGIT(255) BIT(1);                                           *
  213     /* BUFFER HOLDS THE LATEST CARDIMAGE,                                         *
  214        TEXT HOLDS THE PRESENT STATE OF THE INPUT TEXT                             *
  215        (NOT INCLUDING THE PORTIONS DELETED BY THE SCANNER),                       *
  216        TEXT_LIMIT IS A CONVENIENT PLACE TO STORE THE POINTER TO THE END OF TEXT,  *
  217        CARD_COUNT IS INCREMENTED BY ONE FOR EVERY SOURCE CARD READ,               *
  218        ERROR_COUNT TABULATES THE ERRORS AS THEY ARE DETECTED,                     *
  219        SEVERE_ERRORS TABULATES THOSE ERRORS OF FATAL SIGNIFICANCE.                *
  220        CURRENT_PROCEDURE CONTAINS THE NAME OF THE PROCEDURE BEING PROCESSED.      *
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 5
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  221     */                                                                            *
  222     DECLARE BUFFER CHARACTER, TEXT CHARACTER, TEXT_LIMIT FIXED,                   *
  223         CARD_COUNT FIXED, ERROR_COUNT FIXED,                                      *
  224         SEVERE_ERRORS FIXED, PREVIOUS_ERROR FIXED,                                *
  225         LINE_LENGTH  FIXED,         /* LENGTH OF SOURCE STATEMENT */              *
  226         CURRENT_PROCEDURE CHARACTER;                                              *
  227                                                                                   *
  228     /* NUMBER_VALUE CONTAINS THE NUMERIC VALUE OF THE LAST CONSTANT SCANNED,      *
  229     */                                                                            *
  230     DECLARE NUMBER_VALUE FIXED, JBASE FIXED, BASE FIXED;                          *
  231     /* EACH OF THE FOLLOWING CONTAINS THE INDEX INTO V() OF THE CORRESPONDING     *
  232        SYMBOL.   WE ASK:    IF TOKEN = IDENT    ETC.    */                        *
  233     DECLARE IDENT FIXED, STRING FIXED, NUMBER FIXED, DIVIDE FIXED, EOFILE FIXED,  *
  234        LABELSET FIXED;                                                            *
  235     DECLARE ORSYMBOL FIXED, CONCATENATE FIXED;                                    *
  236     DECLARE BALANCE CHARACTER, LB FIXED ;                                         *
  237     DECLARE MACRO_LIMIT LITERALLY '60', MACRO_NAME (MACRO_LIMIT) CHARACTER,       *
  238        MACRO_TEXT(MACRO_LIMIT) CHARACTER, MACRO_INDEX (255) BIT (8),              *
  239        MACRO_COUNT (MACRO_LIMIT) FIXED, MACRO_DECLARE (MACRO_LIMIT) FIXED,        *
  240        TOP_MACRO FIXED;                                                           *
  241     DECLARE EXPANSION_COUNT FIXED, EXPANSION_LIMIT LITERALLY '300';               *
  242     /* STOPIT() IS A TABLE OF SYMBOLS WHICH ARE ALLOWED TO TERMINATE THE ERROR    *
  243        FLUSH PROCESS.  IN GENERAL THEY ARE SYMBOLS OF SUFFICIENT SYNTACTIC        *
  244        HIERARCHY THAT WE EXPECT TO AVOID ATTEMPTING TO START CHECKING AGAIN       *
  245        RIGHT INTO ANOTHER ERROR PRODUCING SITUATION.  THE TOKEN STACK IS ALSO     *
  246        FLUSHED DOWN TO SOMETHING ACCEPTABLE TO A STOPIT() SYMBOL.                 *
  247        FAILSOFT IS A BIT WHICH ALLOWS THE COMPILER ONE ATTEMPT AT A GENTLE        *
  248        RECOVERY.   THEN IT TAKES A STRONG HAND.   WHEN THERE IS REAL TROUBLE      *
  249        COMPILING IS SET TO FALSE, THEREBY TERMINATING THE COMPILATION.            *
  250     */                                                                            *
  251     DECLARE STOPIT(TERMINAL#) BIT(1), FAILSOFT FIXED, COMPILING FIXED;            *
  252     /*   THE FOLLOWING SWITCH IS USED BY THE LALR PARSER   */                     *
  253                                                                                   *
  254     DECLARE NO_LOOK_AHEAD_DONE BIT(1);                                            *
  255     DECLARE TARGET_REGISTER FIXED;       /* FOR FINDAR */                         *
  256     DECLARE TRUELOC FIXED;               /* LOCATION OF CONSTANT 1 */             *
  257     DECLARE FALSELOC FIXED;              /* LOCATION OF CONSTANT 0 */             *
  258     DECLARE BYTEPTRS FIXED,              /* LOCATION OF 4 PTRS FOR LDB & DPB */   *
  259             PSBITS FIXED;                /* BYTE PTRS FORE MOVE */                *
  260     DECLARE STRING_CHECK FIXED,          /* COMPACTIFY CALLER */                  *
  261             CATENTRY FIXED,              /* CATENATION SUBROUTINE */              *
  262             NMBRENTRY FIXED,             /* NUMBER TO STRING SUBROUTINE */        *
  263             STRCOMP FIXED,               /* STRING COMPARE SUBROUTINE */          *
  264             CALLTYPE FIXED INITIAL (1),  /* DIST BETWEEN SUB & FUNCTION */        *
  265             MOVER FIXED,                 /* STRING MOVE SUBROUTINE */             *
  266             STRING_RECOVER FIXED,        /* SYT LOCATION OF COMPACTIFY */         *
  267             COREBYTELOC FIXED,           /* SYT LOCATION OF COREBYTE */           *
  268             LIMITWORD FIXED,             /* ADDRESS OF FREELIMIT */               *
  269             TSA FIXED;                   /* ADDRESS OF FREEPOINT */               *
  270     DECLARE NDESC FIXED;                 /* ADDRESS OF NDESCRIPT               */ *
  271     DECLARE LIBRARY FIXED,               /* ADDRESS OF RUNTIME LIBRARY */         *
  272             LIBRARY_SAVE FIXED,          /* PLACE TO STORE R11 ON LIB CALLS */    *
  273             STR  FIXED;                  /* DESCRIPTOR OF LAST STRING */          *
  274     DECLARE STEPK FIXED;                 /* USED FOR DO LOOPS */                  *
  275     DECLARE A FIXED, B FIXED, C FIXED;   /* FOR CATENATION & CONVERSION */        *
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 6
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  276     DECLARE LENGTHMASK FIXED;            /* ADDR OF DV LENGTH MASK */             *
  277     DECLARE ADDRMASK FIXED;              /* ADDRESS OF "FFFFF" */                 *
  278     DECLARE LABEL_SINK FIXED INITIAL(0); /* FOR LABEL GENERATOR */                *
  279     DECLARE LABEL_GEN CHARACTER;         /* CONTAINS LABEL FOR NEXT INST*/        *
  280     DECLARE ACC(15) FIXED;               /* KEEPS TRACK OF ACCUMULATORS */        *
  281     DECLARE AVAIL LITERALLY '0', BUSY LITERALLY '1';                              *
  282      /* CALL COUNTS OF IMPORTANT PROCEDURES */                                    *
  283     DECLARE COUNT_SCAN FIXED, /* SCAN               */                            *
  284              COUNT_INST FIXED,  /* EMITINST           */                          *
  285              COUNT_FORCE FIXED, /* FORCEACCUMULATOR   */                          *
  286              COUNT_ARITH FIXED, /* ARITHEMIT          */                          *
  287              COUNT_STORE FIXED; /* GENSTORE           */                          *
  288                                                                                   *
  289     DECLARE TITLE        CHARACTER,     /*TITLE LINE FOR LISTING */               *
  290             SUBTITLE     CHARACTER,     /*SUBTITLE FOR LISTING */                 *
  291             PAGE_COUNT   FIXED,         /*CURRENT PAGE NUMBER FOR LISTING*/       *
  292             LINE_COUNT   FIXED,         /*NUMBER OF LINES PRINTED */              *
  293             PAGE_MAX LITERALLY '54',    /*MAX NO OF LINES ON PAGE*/               *
  294             EJECT_PAGE LITERALLY 'LINE_COUNT = PAGE_MAX+1';                       *
  295     DECLARE SOURCE CHARACTER;           /*FILE NAME BEING COMPILED*/              *
  296     DECLARE DATAFILE LITERALLY '2';     /* SCRATCH FILE FOR DATA */               *
  297     DECLARE CODEFILE LITERALLY '3';     /* SCRATCH FILE FOR CODE */               *
  298     DECLARE RELFILE  LITERALLY '4';     /* BINARY OUTPUT FILE */                  *
  299     DECLARE LIBFILE  LITERALLY '5';     /* SOURCE LIBRARY FILE */                 *
  300     DECLARE READING  BIT(1);            /* 0 IFF READING LIBFILE */               *
  301     DECLARE DATACARD CHARACTER;         /* DATA BUFFER */                         *
  302     DECLARE PP      FIXED,              /* CURRENT PROGRAM POINTER */             *
  303             CODE(3) CHARACTER,           /* THE CODE BUFFER */                    *
  304             CODE_FULL(3) BIT(1),         /* FULLNESS FLAG */                      *
  305             CODE_HEAD FIXED,             /* FRONT OF BUFFER */                    *
  306             CODE_TAIL FIXED,             /* END OF BUFFER */                      *
  307             DP      FIXED,              /* CURRENT DATA POINTER */                *
  308             DPOFFSET FIXED;             /* CURRENT DP BYTE OFFSET */              *
  309     DECLARE CODESTRING CHARACTER;     /*FOR COPYING CODE INTO DATA FILE*/         *
  310                                                                                   *
  311     /*   THE FOLLOWING ARE FOR RELOCATABLE BINARY CODE EMISSION */                *
  312                                                                                   *
  313     DECLARE BUFFERSIZE LITERALLY '18';   /* SIZE OF BINARY BUFFERS */             *
  314     DECLARE CODE_BUFFER (BUFFERSIZE) FIXED;   /*CODE (HIGH) BUFFER */             *
  315     DECLARE DATA_BUFFER (BUFFERSIZE) FIXED;   /* DATA (LOW) BUFFER */             *
  316     DECLARE LABEL_BUFFER (BUFFERSIZE) FIXED;  /* LABELS DEFINED BUFFER */         *
  317     DECLARE CODE_REL(3) FIXED,         /* BINARY CODE BUFFER (SEE CODE) */        *
  318             CODE_PP(3) FIXED,                                                     *
  319             CODE_RBITS(3) FIXED;                                                  *
  320                                                                                   *
  321     DECLARE RPTR FIXED,                  /* POINTER TO CODE_BUFFER */             *
  322             RCTR FIXED,                  /* COUNTER FOR CODE_BUFFER */            *
  323             DPTR FIXED,                   /* POINTER TO DATA_BUFFER */            *
  324             DCTR FIXED,                  /* COUNTER FOR DATA_BUFFER */            *
  325             DLOC FIXED;                   /* LOCATION OF NEXT WORD IN DATA BUFFER */*
  326     DECLARE LABEL_COUNT FIXED;            /*NO OF LABELS IN LABEL_BUFFER */       *
  327                                                                                   *
  328     DECLARE FOR_MAX  LITERALLY '50';      /* MAXIMUM FORWARD REFERENCES */        *
  329     DECLARE FOR_REF   (FOR_MAX) FIXED,    /* FORWARD REFERENCED LABELS */         *
  330             FOR_LABEL (FOR_MAX) FIXED,    /* LABEL REFERENCED */                  *
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 7
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  331             FOR_COUNT FIXED;              /* COUNT OF CURRENT FORWARD REFS */     *
  332     DECLARE PWORD FIXED;                  /* PART-WORD ACC. FOR BYTES*/           *
  333     DECLARE STARTLOC FIXED;               /* FIRST INSTRUCTION TO BE EXECUTED */  *
  334                                                                                   *
  335                                                                                   *
  336     DECLARE CODE_TYPE LITERALLY '"(3)1000000"';   /* CODE & DATA TYPE BLOCK */    *
  337     DECLARE SYMB_TYPE LITERALLY '"(3)2000000"';   /* SYMBOL DEFN TYPE BLOCK */    *
  338     DECLARE HISEG_TYPE LITERALLY '"(3)3000000"';  /* HIGH SEGMENT TYPE BLOCK */   *
  339     DECLARE END_TYPE LITERALLY '"(3)5000000"';    /* END TYPE BLOCK */            *
  340     DECLARE NAME_TYPE LITERALLY '"(3)6000000"';   /* NAME TYPE BLOCK */           *
  341     DECLARE START_TYPE LITERALLY '"(3)7000000"';  /* START ADDRESS TYPE BLOCK */  *
  342     DECLARE INTREQ_TYPE LITERALLY '"(3)10000000"'; /* INTERNAL REQUEST TYPE BLOCK */*
  343                                                                                   *
  344                                                                                   *
  345     /* END OF DEFINITIONS FOR RELOCATABLE BINARY FILES */                         *
  346                                                                                   *
  347     DECLARE ADR     FIXED;                                                        *
  348     DECLARE ITYPE FIXED;                                                          *
  349     DECLARE NEWDP FIXED, NEWDSP FIXED, NEWDPOFFSET FIXED; /* FOR ALLOCATION */    *
  350     DECLARE OLDDP FIXED, OLDDSP FIXED, OLDDPOFFSET FIXED; /* FOR ALLOCATION */    *
  351     DECLARE DESCLIMIT LITERALLY '1000', /* NUMBER OF STRING DESCRIPTORS */        *
  352             DESCA (DESCLIMIT) FIXED,     /* STRING DESCRIPTOR ADDRESS */          *
  353             DESCL (DESCLIMIT) FIXED,     /* STRING DESCRIPTOR LENGTH */           *
  354             DESCREF (DESCLIMIT) FIXED,    /* LAST REFERENCE TO STRING */          *
  355             DSP     FIXED;              /* DESCRIPTOR POINTER */                  *
  356     DECLARE S CHARACTER;                                                          *
  357     DECLARE OPNAME (15) CHARACTER INITIAL (                                       *
  358  '      .INIT..INPT..OUTP..EXIT.      .FILI..FILO..NAME.',                        *
  359  'CALL  INIT  UUO042UUO043UUO044UUO045UUO046CALLI OPEN  TTCALLUUO052UUO053UUO054  *
  360  RENAMEIN    OUT   SETSTSSTATO GETSTSSTATZ INBUF OUTBUFINPUT OUTPUTCLOSE          *
  361  RELEASMTAPE UGETF USETI USETO LOOKUPENTER ',                                     *
  362  'UUO100UUO101UUO102UUO103UUO104UUO105UUO106UUO107UUO110UUO111UUO112UUO113UUO114U *
  363  UO115UUO116UUO117UUO120UUO121UUO122UUO123UUO124UUO125UUO126UUO127UFA   DFN   FSC *
  364     IBP   ILDB  LDB   IDPB  DPB   ',                                              *
  365  '',                                                                              *
  366  'MOVE  MOVEI MOVEM MOVES MOVS  MOVSI MOVSM MOVSS MOVN  MOVNI MOVNM MOVNS MOVM  M *
  367  OVMI MOVMM MOVMS IMUL  IMULI IMULM IMULB MUL   MULI  MULM  MULB  IDIV  IDIVI IDI *
  368  VM IDIVB DIV   DIVI  DIVM  DIVB  ',                                              *
  369  'ASH   ROT   LSH   JFFO  ASHC  ROTC  LSHC  ......EXCH  BLT   AOBJP AOBJN JRST  J *
  370  FCL  XCT   ......PUSHJ PUSH  POP   POPJ  JSR   JSP   JSA   JRA   ADD   ADDI  ADD *
  371  M  ADDB  SUB   SUBI  SUBM  SUBB  ',                                              *
  372  'CAI   CAIL  CAIE  CAILE CAIA  CAIGE CAIN  CAIG  CAM   CAML  CAME  CAMLE CAMA  C *
  373  AMGE CAMN  CAMG  JUMP  JUMPL JUMPE JUMPLEJUMPA JUMPGEJUMPN JUMPG SKIP  SKIPL SKI *
  374  PE SKIPLESKIPA SKIPGESKIPN SKIPG ',                                              *
  375   'AOJ   AOJL  AOJE  AOJLE AOJA  AOJGE AOJN  AOJG  AOS   AOSL  AOSE  AOSLE AOSA  A*
  376  OSGE AOSN  AOSG  SOJ   SOJL  SOJE  SOJLE SOJA  SOJGE SOJN  SOJG  SOS   SOSL  SOS *
  377  E  SOSLE SOSA  SOSGE SOSN  SOSG  ',                                              *
  378  'SETZ  SETZI SETZM SETZB AND   ANDI  ANMD  ANDB  ANDCA ANDCAIANDCAMANDCABSETM  S *
  379  ETMI SETMM SETMB ANDCM ANDCMIANDCMMANDCMBSETA  SETAI SETAM SETAB XOR   XORI  XOR *
  380  M  XORB  IOR   IORI  IORM  IORB  ',                                              *
  381  'ANDCB ANDCBIANDCBMANDCBBEQV   EQVI  EQVM  EQVB  SETCA SETCAISETCAMSETCABORCA  O *
  382  RCAI ORCAM ORCAB SETCM SETCMISETCMMSETCMBORCM  ORCMI ORCMM ORCMB ORCB  ORCBI ORC *
  383  BM ORCBB SETO  SETOI SETOM SETOB ',                                              *
  384  'HLL   HLLI  HLLM  HLLS  HRL   HRLI  HRLM  HRLS  HLLZ  HLLZI HLLZM HLLZS HRLZ  H *
  385  RLZI HRLZM HRLZS HLLO  HLLOI HLLOM HLLOS HRLO  HRLOI HRLOM HRLOS HLLE  HLLEI HLL *
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 8
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  386  EM HLLES HRLE  HRLEI HRLEM HRLES ',                                              *
  387  'HRR   HRRI  HRRM  HRRS  HLR   HLRI  HLRM  HLRS  HRRZ  HRRZI HRRZM HRRZS HLRZ  H *
  388  LRZI HLRZM HLRZS HRRO  HRROI HRROM HRROS HLRO  HLROI HLROM HLROS HRRE  HRREI HRR *
  389  EM HRRES HLRE  HLREI HLREM HLRES ',                                              *
  390  'TRN   TLN   TRNE  TLNE  TRNA  TLNA  TRNN  TLNN  TDN   TSN   TDNE  TSNE  TDNA  T *
  391  SNA  TDNN  TSNN  TRZ   TLZ   TRZE  TLZE  TRZA  TLZA  TRZN  TLZN  TDZ   TSZ   TDZ *
  392  E  TSZE  TDZA  TSZA  TDZN  TSZN  ',                                              *
  393  'TRC   TLC   TRCE  TLCE  TRCA  TLCA  TRCN  TLCN  TDC   TSC   TDCE  TSCE  TDCA  T *
  394  SCA  TDCN  TSCN  TRO   TLO   TROE  TLOE  TROA  TLOA  TRON  TLON  TDO   TSO   TDO *
  395  E  TSOE  TDOA  TSOA  TDON  TSON  ',                                              *
  396  '',                                                                              *
  397  '');                                                                             *
  398     DECLARE INSTRUCT(511) FIXED;         /* COUNT OF THE INSTRUCTIONS ISSUED */   *
  399           /* COMMONLY USED OPCODES */                                             *
  400     DECLARE ADD    FIXED INITIAL ("(3)270"),                                      *
  401             ADDI   FIXED INITIAL ("(3)271"),                                      *
  402             ADDM   FIXED INITIAL ("(3)272"),                                      *
  403             AND    FIXED INITIAL ("(3)404"),                                      *
  404             ANDI   FIXED INITIAL ("(3)405"),                                      *
  405             AOSA   FIXED INITIAL ("(3)354"),                                      *
  406             BLT    FIXED INITIAL ("(3)251"),                                      *
  407             CALLI  FIXED INITIAL ("(3)047"),                                      *
  408             CAM    FIXED INITIAL ("(3)310"),                                      *
  409             CAMGE  FIXED INITIAL ("(3)315"),                                      *
  410             CAML   FIXED INITIAL ("(3)311"),                                      *
  411             CAMLE  FIXED INITIAL ("(3)313"),                                      *
  412             CAMN   FIXED INITIAL ("(3)316"),                                      *
  413             CMPRHI FIXED INITIAL ("(3)317"),                                      *
  414             DPB    FIXED INITIAL ("(3)137"),                                      *
  415             HLL    FIXED INITIAL ("(3)500"),                                      *
  416             HLRZ   FIXED INITIAL ("(3)554"),                                      *
  417             HRLI   FIXED INITIAL ("(3)505"),                                      *
  418             HRLM   FIXED INITIAL ("(3)506"),                                      *
  419             HRREI  FIXED INITIAL ("(3)571"),                                      *
  420             IDIV   FIXED INITIAL ("(3)230"),                                      *
  421             IDIVI  FIXED INITIAL ("(3)231"),                                      *
  422             IDPB   FIXED INITIAL ("(3)136"),                                      *
  423             ILDB   FIXED INITIAL ("(3)134"),                                      *
  424             IMUL   FIXED INITIAL ("(3)220"),                                      *
  425             IOR    FIXED INITIAL ("(3)434"),                                      *
  426             JRST   FIXED INITIAL ("(3)254"),                                      *
  427             JUMP   FIXED INITIAL ("(3)320"),                                      *
  428             JUMPE  FIXED INITIAL ("(3)322"),                                      *
  429             JUMPGE FIXED INITIAL ("(3)325"),                                      *
  430             JUMPN  FIXED INITIAL ("(3)326"),                                      *
  431             LDB    FIXED INITIAL ("(3)135"),                                      *
  432             LSH    FIXED INITIAL ("(3)242"),                                      *
  433             LSHC   FIXED INITIAL ("(3)246"),                                      *
  434             MOVE   FIXED INITIAL ("(3)200"),                                      *
  435             MOVEI  FIXED INITIAL ("(3)201"),                                      *
  436             MOVEM  FIXED INITIAL ("(3)202"),                                      *
  437             MOVM   FIXED INITIAL ("(3)214"),                                      *
  438             MOVN   FIXED INITIAL ("(3)210"),                                      *
  439             POP    FIXED INITIAL ("(3)262"),                                      *
  440             POPJ   FIXED INITIAL ("(3)263"),                                      *
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 9
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  441             PUSH   FIXED INITIAL ("(3)261"),                                      *
  442             PUSHJ  FIXED INITIAL ("(3)260"),                                      *
  443             ROT    FIXED INITIAL ("(3)241"),                                      *
  444             SETCA  FIXED INITIAL ("(3)450"),                                      *
  445             SETZM  FIXED INITIAL ("(3)402"),                                      *
  446             SKIP   FIXED INITIAL ("(3)330"),                                      *
  447             SKIPE  FIXED INITIAL ("(3)332"),                                      *
  448             SOJG   FIXED INITIAL ("(3)367"),                                      *
  449             SUB    FIXED INITIAL ("(3)274"),                                      *
  450             SUBI   FIXED INITIAL ("(3)275");                                      *
  451     DECLARE COMPARESWAP (7) FIXED INITIAL (0,7,2,5,0,3,6,1);                      *
  452     DECLARE STILLCOND FIXED,            /* PEEP HOLE FOR BOOL BRANCHING */        *
  453             STILLINZERO FIXED;          /* PEEPHOLE FOR REDUNDANT MOVES */        *
  454     DECLARE STATEMENT_COUNT FIXED;      /* A COUNT OF THE XPL STATEMENTS */       *
  455     DECLARE IDCOMPARES FIXED;                                                     *
  456     DECLARE X1 CHARACTER INITIAL (' ');                                           *
  457     DECLARE X2 CHARACTER INITIAL ('  ');                                          *
  458     DECLARE X3 CHARACTER INITIAL ('   ');                                         *
  459     DECLARE X4 CHARACTER INITIAL ('    ');                                        *
  460     DECLARE X7 CHARACTER INITIAL ('       ');                                     *
  461     DECLARE INFO CHARACTER;         /* FOR LISTING INFORMATION*/                  *
  462     DECLARE CHAR_TEMP CHARACTER;                                                  *
  463     DECLARE I_STRING CHARACTER;      /* FOR I_FORMAT */                           *
  464     DECLARE I FIXED, J FIXED, K FIXED, L FIXED;                                   *
  465     DECLARE PROCMARK FIXED, NDECSY FIXED, MAXNDECSY FIXED, PARCT FIXED;           *
  466     DECLARE RETURNED_TYPE FIXED;                                                  *
  467     DECLARE LABELTYPE     LITERALLY  '1',                                         *
  468             ACCUMULATOR   LITERALLY  '2',                                         *
  469             VARIABLE      LITERALLY  '3',                                         *
  470             CONSTANT      LITERALLY  '4',                                         *
  471             CHRTYPE       LITERALLY  '6',                                         *
  472             FIXEDTYPE     LITERALLY  '7',                                         *
  473             BYTETYPE      LITERALLY  '8',                                         *
  474             FORWARDTYPE   LITERALLY  '9',                                         *
  475             DESCRIPT      LITERALLY '10',                                         *
  476             SPECIAL       LITERALLY '11',                                         *
  477             FORWARDCALL   LITERALLY '12',                                         *
  478             PROCTYPE      LITERALLY '13',                                         *
  479             CHARPROCTYPE  LITERALLY '14';                                         *
  480     DECLARE TYPENAME (14) CHARACTER INITIAL ('', 'LABEL    ', '', '', '', '',     *
  481             'CHARACTER', 'FIXED    ', 'BIT (9)  ' , '', '', '', '',               *
  482             'PROCEDURE','CHARACTER PROCEDURE');                                   *
  483     /*  THE SYMBOL TABLE IS INITIALIZED WITH THE NAMES OF ALL                     *
  484         BUILTIN FUNCTIONS AND PSEUDO VARIABLES.  THE PROCEDURE                    *
  485         INITIALIZE DEPENDS ON THE ORDER AND PLACEMENT OF THESE                    *
  486         NAMES.  CHANGES SHOULD BE MADE OBSERVING DUE CAUTION TO                   *
  487         AVOID MESSING THINGS UP.                                                  *
  488     */                                                                            *
  489     DECLARE SYTSIZE LITERALLY '420';     /* THE SYMBOL TABLE SIZE */              *
  490     DECLARE SYT (SYTSIZE) CHARACTER      /* THE VARIABLE NAME */                  *
  491        INITIAL ('COREWORD', 'COREBYTE', 'FREEPOINT', 'DESCRIPTOR',                *
  492           'NDESCRIPT',   'LENGTH', 'SUBSTR', 'BYTE', 'SHL', 'SHR',                *
  493           'INPUT', 'OUTPUT', 'FILE', 'INLINE', 'TRACE', 'UNTRACE',                *
  494           'EXIT', 'TIME', 'DATE', 'CLOCK_TRAP', 'INTERRUPT_TRAP',                 *
  495           'MONITOR', 'ADDR', 'RUNTIME', 'FILENAME',                               *
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 10
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  496           'COMPACTIFY', 'FREELIMIT', 'FREEBASE');                                 *
  497     DECLARE SYTYPE (SYTSIZE) BIT (8)     /* TYPE OF VARIABLE */                   *
  498        INITIAL (FIXEDTYPE, BYTETYPE, FIXEDTYPE, FIXEDTYPE,                        *
  499           FIXEDTYPE, SPECIAL, SPECIAL, SPECIAL, SPECIAL, SPECIAL,                 *
  500           SPECIAL, SPECIAL, SPECIAL, SPECIAL, SPECIAL, SPECIAL,                   *
  501            SPECIAL, SPECIAL, SPECIAL, SPECIAL, SPECIAL,                           *
  502           SPECIAL, SPECIAL, SPECIAL, SPECIAL,                                     *
  503           FORWARDCALL, FIXEDTYPE, FIXEDTYPE);                                     *
  504     DECLARE SYTLOC (SYTSIZE) FIXED       /* LOCATION OF VARIABLE */               *
  505        INITIAL (0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,     *
  506            0,0,0);                                                                *
  507     DECLARE SYTSEG (SYTSIZE) BIT(8)      /* SEGMENT OF VARIABLE */                *
  508        INITIAL (0,0,1,3,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,1);         *
  509     DECLARE SYTCO (SYTSIZE) FIXED;       /* A COUNT OF REFERENCES */              *
  510     DECLARE SYTCARD (SYTSIZE) FIXED;     /* WHERE SYMBOL IS DEFINED */            *
  511                                                                                   *
  512     DECLARE HASH (255)      FIXED,       /* HASH TABLE INTO SYMBOL TABLE*/        *
  513             PTR  (SYTSIZE)  FIXED,       /* POINTS TO NEXT SYMBOL IN HASH*/       *
  514             IDX             FIXED;       /* INDEX WHILE USING HASH*/              *
  515                                                                                   *
  516     /*  THE COMPILER STACKS DECLARED BELOW ARE USED TO DRIVE THE SYNTACTIC        *
  517        ANALYSIS ALGORITHM AND STORE INFORMATION RELEVANT TO THE INTERPRETATION    *
  518        OF THE TEXT.  THE STACKS ARE ALL POINTED TO BY THE STACK POINTER SP.  */   *
  519     DECLARE STACKSIZE LITERALLY '50';  /* SIZE OF STACK  */                       *
  520     DECLARE STATE_STACK (STACKSIZE)  BIT (8);                                     *
  521     DECLARE TYPE        (STACKSIZE)  FIXED;                                       *
  522     DECLARE REG         (STACKSIZE)  FIXED;                                       *
  523     DECLARE INX         (STACKSIZE)  FIXED;                                       *
  524     DECLARE CNT         (STACKSIZE)  FIXED;                                       *
  525     DECLARE VAR         (STACKSIZE)  CHARACTER;                                   *
  526     DECLARE FIXV        (STACKSIZE)  FIXED;                                       *
  527     DECLARE PPSAVE      (STACKSIZE)  FIXED;                                       *
  528     DECLARE FIXL        (STACKSIZE)  FIXED;                                       *
  529     DECLARE SP FIXED, MP FIXED, MPP1 FIXED;                                       *
  530                                                                                   *
  531     DECLARE CASELIMIT LITERALLY '175',                                            *
  532             CASESTACK (CASELIMIT) FIXED, /* CONTAINS ADDR OF STMTS OF CASE */     *
  533             CASEP  FIXED;                /* POINTS TO CURRENT CASESTACK ENTRY */  *
  534                                                                                   *
  535     DECLARE CODEMSG  CHARACTER INITIAL ('CODE = '),                               *
  536             DATAMSG  CHARACTER INITIAL ('DATA = '),                               *
  537             BACKMSG  CHARACTER INITIAL ('BACK UP CODE EMITTER'),                  *
  538             FILEMSG  CHARACTER INITIAL ('MISSING NUMBER FOR FILE');               *
  539                                                                                   *
  540                                                                                   *
  541  /*                                                                               *
  542            G L O B A L   P R O C E D U R E S                                      *
  543  */                                                                               *
  544                                                                                   *
  545  I_FORMAT:                                                                        *
  546     PROCEDURE (NUMBER, WIDTH);                                                    *
  547     DECLARE NUMBER  FIXED,                                                         I_FORMAT
  548             WIDTH   FIXED;                                                         I_FORMAT
  549     DECLARE L       FIXED;                                                         I_FORMAT
  550     I_STRING = NUMBER;                                                             I_FORMAT
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 11
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  551     L = LENGTH (I_STRING);                                                         I_FORMAT
  552     IF L < WIDTH THEN                                                              I_FORMAT
  553           I_STRING = SUBSTR(X70,0,WIDTH-L) ^^ I_STRING;                            I_FORMAT
  554     END  I_FORMAT;                                                                 I_FORMAT

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
L               FIXED      9113     DATA    549       3
NUMBER          FIXED      9111     DATA    546       1
WIDTH           FIXED      9112     DATA    546       2
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 12
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  555                                                                                   *
  556  PRINTLINE:                                                                       *
  557     PROCEDURE (LINE, IND);                                                        *
  558     DECLARE LINE CHARACTER,             /*LINE TO BE PRINTED */                    PRINTLINE
  559             IND FIXED;                  /*FORMAT INDICATOR*/                       PRINTLINE
  560     DECLARE CTL(5) CHARACTER INITIAL ('0','1','','','','');                        PRINTLINE
  561     DECLARE SKIPS (5) FIXED INITIAL (2,99,0,0,0,0);                                PRINTLINE
  562     IF LINE_COUNT > PAGE_MAX THEN                                                  PRINTLINE
  563        DO;                                                                         PRINTLINE
  564           PAGE_COUNT = PAGE_COUNT + 1;                                             PRINTLINE
  565           OUTPUT(1) = TITLE ^^ PAGE_COUNT;                                         PRINTLINE
  566           OUTPUT = SUBTITLE;                                                       PRINTLINE
  567           OUTPUT = ' ';                                                            PRINTLINE
  568           LINE_COUNT = 0;                                                          PRINTLINE
  569        END;                                                                        PRINTLINE
  570     IF IND < 0 ^ IND > 5 THEN                                                      PRINTLINE
  571        DO;                                                                         PRINTLINE
  572           OUTPUT = LINE;                                                           PRINTLINE
  573           LINE_COUNT = LINE_COUNT + 1;                                             PRINTLINE
  574        END;                                                                        PRINTLINE
  575     ELSE                                                                           PRINTLINE
  576        DO;                                                                         PRINTLINE
  577           OUTPUT(1) = CTL(IND) ^^ LINE;                                            PRINTLINE
  578           LINE_COUNT = LINE_COUNT + SKIPS(IND);                                    PRINTLINE
  579        END;                                                                        PRINTLINE
  580  END PRINTLINE;                                                                    PRINTLINE

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
CTL             CHARACTER   753   STRING    560       1
IND             FIXED      9114     DATA    557       4
LINE            CHARACTER   752   STRING    557       2
SKIPS           FIXED      9116     DATA    561       1
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 13
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  581     ERROR:                                                                        *
  582        PROCEDURE (MSG, SEVERITY);                                                 *
  583     /* PRINT THE ERROR MESSAGE WITH A POINTER POINTING TO THE CURRENT TOKEN        ERROR
  584        BEING SCANNED.  IF SOURCE LISTING IS DISABLED, ALSO PRINT THE CURRENT       ERROR
  585        SOURCE IMAGE.                                                               ERROR
  586     */                                                                             ERROR
  587        DECLARE MSG CHARACTER, SEVERITY FIXED;                                      ERROR
  588        DECLARE I FIXED;                                                            ERROR
  589        ERROR_COUNT = ERROR_COUNT + 1;                                              ERROR
  590        IF CONTROL(BYTE('L')) = 0 THEN                                              ERROR
  591           DO;                                                                      ERROR
  592              I = 5 - LENGTH(CARD_COUNT);                                           ERROR
  593              CALL PRINTLINE (SUBSTR (X70, 0, I) ^^ CARD_COUNT ^^ X4 ^^ BUFFER,-1); ERROR
  594           END;                                                                     ERROR
  595        CALL PRINTLINE (SUBSTR(POINTER,LENGTH(POINTER)-7-                           ERROR
  596              (LINE_LENGTH+CP-TEXT_LIMIT-LB-1)),-1);                                ERROR
  597                                                                                    ERROR
  598        OUTPUT(-1) = CARD_COUNT ^^ X4 ^^ BUFFER;                                    ERROR
  599        OUTPUT(-1) = X7 ^^ MSG;                                                     ERROR
  600                                                                                    ERROR
  601        IF PREVIOUS_ERROR > 0 THEN                                                  ERROR
  602           MSG = MSG ^^ '. LAST PREVIOUS ERROR WAS ON LINE ' ^^ PREVIOUS_ERROR;     ERROR
  603        CALL PRINTLINE ('*** ERROR. ' ^^ MSG,-1);                                   ERROR
  604        PREVIOUS_ERROR = CARD_COUNT;                                                ERROR
  605        IF SEVERITY > 0 THEN                                                        ERROR
  606           IF SEVERE_ERRORS > 25 THEN                                               ERROR
  607              DO;                                                                   ERROR
  608                  CALL PRINTLINE ('*** TOO MANY SEVERE ERRORS, COMPILATION ABORTED ***',0); ERROR
  609                  COMPILING = FALSE;                                                ERROR
  610               END;                                                                 ERROR
  611             ELSE SEVERE_ERRORS = SEVERE_ERRORS + 1;                                ERROR
  612     END ERROR;                                                                     ERROR

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9124     DATA    588       2
MSG             CHARACTER   760   STRING    582       4
SEVERITY        FIXED      9123     DATA    582       1
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 14
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  613     /*                THE SCANNER PROCEDURES              */                      *
  614     BUILD_BCD:                                                                    *
  615        PROCEDURE (C);                                                             *
  616        DECLARE C BIT(9);                                                           BUILD_BCD
  617        IF LENGTH(BCD) > 0 THEN BCD = BCD ^^ X1;                                    BUILD_BCD
  618        ELSE BCD = SUBSTR(X1 ^^ X1, 1);                                             BUILD_BCD
  619        COREBYTE(FREEPOINT-1) = C;                                                  BUILD_BCD C5 = 134217727
  620     END BUILD_BCD;                                                                 BUILD_BCD

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
C               BIT (9)    9149     DATA    615       1
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 15
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  621     GET_CARD:                                                                     *
  622        PROCEDURE;                                                                 *
  623        /* DOES ALL CARD READING AND LISTING                                 */     GET_CARD
  624        DECLARE I FIXED, TEMPO CHARACTER, TEMP2 CHARACTER;                          GET_CARD
  625        IF LB \= 0 THEN                                                             GET_CARD
  626           DO;                                                                      GET_CARD
  627              IF CP >= 255 THEN                                                     GET_CARD
  628                 DO;                                                                GET_CARD
  629                    TEXT = SUBSTR(TEXT, LB);                                        GET_CARD
  630                    CP = CP - LB;                                                   GET_CARD
  631                    CALL ERROR ('IDENTIFIER TOO LONG', 0);                          GET_CARD
  632                 END;                                                               GET_CARD
  633                 IF LB > 255 - CP THEN I = 255 - CP;                                GET_CARD
  634                 ELSE I = LB;                                                       GET_CARD
  635                 LB = LB - I;                                                       GET_CARD
  636                 TEXT = TEXT ^^ SUBSTR(BALANCE, 0, I);                              GET_CARD
  637                 BALANCE = SUBSTR(BALANCE, I);                                      GET_CARD
  638                 TEXT_LIMIT = LENGTH(TEXT) - 1;                                     GET_CARD
  639                 RETURN;                                                            GET_CARD
  640           END;                                                                     GET_CARD
  641        EXPANSION_COUNT = 0;    /* CHECKED IN SCANNER  */                           GET_CARD
  642        IF READING THEN   /* READING IS FALSE INITIALLY, TO READ LIBRARY */         GET_CARD
  643           DO;                                                                      GET_CARD
  644              BUFFER = INPUT;                                                       GET_CARD
  645              IF LENGTH(BUFFER) = 0 THEN                                            GET_CARD
  646                 DO;                                                                GET_CARD
  647                    CALL ERROR ('EOF MISSING', 0);                                  GET_CARD
  648                    BUFFER = ' /* '' /* */ EOF; END; EOF; END; EOF';                GET_CARD
  649                 END;                                                               GET_CARD
  650              ELSE CARD_COUNT = CARD_COUNT + 1;                                     GET_CARD
  651           END;                                                                     GET_CARD
  652        ELSE                                                                        GET_CARD
  653           DO;                                                                      GET_CARD
  654              BUFFER = INPUT(LIBFILE);                                              GET_CARD
  655              IF LENGTH(BUFFER) = 0 THEN                                            GET_CARD
  656                 DO;                                                                GET_CARD
  657                    READING = TRUE;                                                 GET_CARD
  658                    BUFFER = INPUT;                                                 GET_CARD
  659                    CARD_COUNT = CARD_COUNT + 1;                                    GET_CARD
  660                    STATEMENT_COUNT = 0;                                            GET_CARD
  661                    CONTROL(BYTE('L')) = TRUE & \ CONTROL(BYTE('K'));               GET_CARD
  662                 END;                                                               GET_CARD
  663           END;                                                                     GET_CARD
  664        LINE_LENGTH = LENGTH (BUFFER);                                              GET_CARD
  665        IF CP + LENGTH(BUFFER) > 255 THEN                                           GET_CARD
  666           DO;                                                                      GET_CARD
  667              I = 255 - CP;                                                         GET_CARD
  668              TEXT = TEXT ^^ SUBSTR(BUFFER, 0, I);                                  GET_CARD
  669              BALANCE = SUBSTR(BUFFER, I);                                          GET_CARD
  670              LB = LENGTH(BALANCE);                                                 GET_CARD
  671           END;                                                                     GET_CARD
  672        ELSE TEXT = TEXT ^^ BUFFER;                                                 GET_CARD
  673        TEXT_LIMIT = LENGTH(TEXT) - 1;                                              GET_CARD
  674        IF CONTROL(BYTE('M')) THEN CALL PRINTLINE(BUFFER,-1);                       GET_CARD
  675        ELSE IF CONTROL(BYTE('L')) THEN                                             GET_CARD
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 16
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  676           DO;                                                                      GET_CARD
  677              TEMPO = CARD_COUNT;                                                   GET_CARD
  678              I = 5 - LENGTH (TEMPO);                                               GET_CARD
  679              TEMPO = SUBSTR(X70, 0, I) ^^ TEMPO ^^ X2 ^^ BUFFER;                   GET_CARD
  680              I = 88 - LENGTH(TEMPO);                                               GET_CARD
  681              IF I >= 70 THEN                                                       GET_CARD
  682                 DO;                                                                GET_CARD
  683                    I = I - 70;                                                     GET_CARD
  684                    TEMPO = TEMPO ^^ X70;                                           GET_CARD
  685                 END;                                                               GET_CARD
  686              IF I > 0 THEN TEMPO = TEMPO ^^ SUBSTR(X70, 0, I);                     GET_CARD
  687              TEMP2 = CURRENT_PROCEDURE ^^ INFO;                                    GET_CARD
  688              IF CONTROL(BYTE('F')) THEN                                            GET_CARD
  689                     TEMP2 = X2 ^^ PP ^^ X1 ^^ DP ^^ X1 ^^ DSP ^^ TEMP2;            GET_CARD
  690              IF LENGTH (TEMP2) > 44 THEN TEMP2 = SUBSTR (TEMP2,0,44);              GET_CARD
  691              CALL PRINTLINE (TEMPO ^^ TEMP2,-1);                                   GET_CARD C6 = 5905580032
  692           END;                                                                     GET_CARD
  693        INFO = '';           /* CLEAR INFORMATION BUFFER */                         GET_CARD
  694     END GET_CARD;                                                                  GET_CARD

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9151     DATA    624      16
TEMP2           CHARACTER   765   STRING    624       7
TEMPO           CHARACTER   764   STRING    624      10
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 17
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  695     CHAR:                                                                         *
  696        PROCEDURE;                                                                 *
  697        CP = CP + 1;                                                                CHAR
  698        IF CP <= TEXT_LIMIT THEN RETURN;                                            CHAR
  699        CP = 0;                                                                     CHAR
  700        TEXT = '';                                                                  CHAR
  701        CALL GET_CARD;                                                              CHAR
  702     END CHAR;                                                                      CHAR
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 18
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  703     DEBLANK:                                                                      *
  704        PROCEDURE;                                                                 *
  705        CALL CHAR;                                                                  DEBLANK
  706        DO WHILE BYTE (TEXT, CP) = BYTE (' ');                                      DEBLANK
  707           CALL CHAR;                                                               DEBLANK
  708        END;                                                                        DEBLANK
  709     END DEBLANK;                                                                   DEBLANK
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 19
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  710     BCHAR:                                                                        *
  711        PROCEDURE;                                                                 *
  712        DO FOREVER;                                                                 BCHAR
  713           CALL DEBLANK;                                                            BCHAR
  714           CH = BYTE(TEXT, CP);                                                     BCHAR
  715           IF CH \= BYTE ('(') THEN RETURN;                                         BCHAR
  716           /*  (BASE WIDTH)  */                                                     BCHAR
  717            CALL DEBLANK;                                                           BCHAR
  718           JBASE = BYTE (TEXT, CP) - BYTE ('0');  /* WIDTH */                       BCHAR
  719           IF JBASE < 1 ^ JBASE > 4 THEN                                            BCHAR
  720              DO;                                                                   BCHAR
  721                 CALL ERROR ('ILLEGAL BIT STRING WIDTH: ' ^^ SUBSTR(TEXT,CP,1),0);  BCHAR
  722                 JBASE = 4;  /* DEFAULT WIDTH FOR ERROR */                          BCHAR C7 = 134217728
  723              END;                                                                  BCHAR
  724           BASE = SHL(1, JBASE);                                                    BCHAR
  725           CALL DEBLANK;                                                            BCHAR
  726          IF BYTE(TEXT,CP)\=BYTE(')')THEN CALL ERROR('MISSING ) IN BIT STRING',0);  BCHAR
  727        END;                                                                        BCHAR
  728     END BCHAR;                                                                     BCHAR
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 20
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  729     SCAN:                                                                         *
  730        PROCEDURE;     /* GET THE NEXT TOKEN FROM THE TEXT  */                     *
  731        DECLARE S1 FIXED, S2 FIXED;                                                 SCAN
  732     DECLARE LSTRNGM CHARACTER INITIAL ('STRING TOO LONG');                         SCAN
  733     DECLARE LBITM CHARACTER INITIAL ('BIT STRING TOO LONG');                       SCAN
  734      COUNT_SCAN = COUNT_SCAN + 1;                                                  SCAN
  735        FAILSOFT = TRUE;                                                            SCAN
  736        BCD = '';  NUMBER_VALUE = 0;                                                SCAN
  737     RESCAN:                                                                        SCAN
  738        IF CP > TEXT_LIMIT THEN                                                     SCAN
  739           DO;                                                                      SCAN
  740              TEXT = '';                                                            SCAN
  741              CALL GET_CARD;                                                        SCAN
  742           END;                                                                     SCAN
  743        ELSE                                                                        SCAN
  744           DO;                                                                      SCAN
  745              TEXT_LIMIT = TEXT_LIMIT - CP;                                         SCAN
  746              TEXT = SUBSTR(TEXT, CP);                                              SCAN
  747           END;                                                                     SCAN
  748        CP = 0;                                                                     SCAN
  749     /*  BRANCH ON NEXT CHARACTER IN TEXT                  */                       SCAN
  750        DO CASE CHARTYPE(BYTE(TEXT));                                               SCAN
  751           /*  CASE 0  */                                                           SCAN CASE 0.
  752           /* ILLEGAL CHARACTERS FALL HERE  */                                      SCAN
  753           CALL ERROR ('ILLEGAL CHARACTER: ' ^^ SUBSTR (TEXT, 0, 1), 0);            SCAN
  754           /*  CASE 1  */                                                           SCAN CASE 1.
  755           /*  BLANK  */                                                            SCAN
  756           DO CP = 1 TO TEXT_LIMIT;                                                 SCAN
  757              IF BYTE (TEXT, CP) \= BYTE (' ') THEN GOTO RESCAN;                    SCAN
  758           END;                                                                     SCAN
  759           /*  CASE 2  */                                                           SCAN CASE 2.
  760           DO FOREVER;   /* STRING QUOTE ('):  CHARACTER STRING       */            SCAN
  761              TOKEN = STRING;                                                       SCAN
  762              DO CP = CP + 1 TO TEXT_LIMIT;                                         SCAN
  763                 IF BYTE (TEXT, CP) = BYTE ('''') THEN                              SCAN
  764                    DO;                                                             SCAN
  765                       IF LENGTH(BCD) + CP > 257 THEN                               SCAN
  766                          DO;                                                       SCAN
  767                             CALL ERROR (LSTRNGM, 0);                               SCAN
  768                             RETURN;                                                SCAN
  769                          END;                                                      SCAN
  770                       IF CP > 1 THEN                                               SCAN
  771                       BCD = BCD ^^ SUBSTR(TEXT, 1, CP-1);                          SCAN
  772                       CALL CHAR;                                                   SCAN
  773                        IF BYTE (TEXT, CP) = BYTE ('''') THEN                       SCAN
  774                           IF LENGTH(BCD) = 255 THEN                                SCAN
  775                             DO;                                                    SCAN
  776                               CALL ERROR (LSTRNGM, 0);                             SCAN
  777                               RETURN;                                              SCAN
  778                             END;                                                   SCAN
  779                          ELSE                                                      SCAN
  780                             DO;                                                    SCAN
  781                                BCD = BCD ^^ SUBSTR(TEXT, CP, 1);                   SCAN
  782                                GO TO RESCAN;                                       SCAN
  783                             END;                                                   SCAN
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 21
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  784                       RETURN;                                                      SCAN
  785                    END;                                                            SCAN
  786              END;                                                                  SCAN
  787              /*  WE HAVE RUN OFF A CARD  */                                        SCAN
  788              IF LENGTH(BCD) + CP > 257 THEN                                        SCAN
  789                 DO;                                                                SCAN
  790                   CALL ERROR (LSTRNGM, 0);                                         SCAN
  791                   RETURN;                                                          SCAN
  792                 END;                                                               SCAN
  793              IF CP > 1 THEN BCD = BCD ^^ SUBSTR(TEXT, 1, CP-1);                    SCAN
  794              TEXT = X1;                                                            SCAN
  795              CP = 0;                                                               SCAN
  796              CALL GET_CARD;                                                        SCAN
  797           END;                                                                     SCAN
  798           /*  CASE 3  */                                                           SCAN CASE 3.
  799           DO;      /*  BIT QUOTE("):  BIT STRING  */                               SCAN
  800              JBASE = 4;  BASE = 16;  /* DEFAULT WIDTH */                           SCAN
  801              TOKEN = NUMBER;                                                       SCAN
  802              S1 = 0;                                                               SCAN
  803              CALL BCHAR;                                                           SCAN
  804              DO WHILE CH \= BYTE ('"');                                            SCAN
  805                 S1 = S1 + JBASE;                                                   SCAN
  806                 IF CH >= BYTE ('0') & CH <= BYTE ('9') THEN S2 = CH - BYTE ('0');  SCAN
  807                 ELSE S2 = CH + 10 - BYTE ('A');                                    SCAN
  808                 IF S2 >= BASE ^ S2 < 0 THEN                                        SCAN
  809                    CALL ERROR ('ILLEGAL CHARACTER IN BIT STRING: '                 SCAN
  810                    ^^ SUBSTR(TEXT, CP, 1), 0);                                     SCAN
  811                 IF S1 > 36 THEN TOKEN = STRING;                                    SCAN
  812                 IF TOKEN = STRING THEN                                             SCAN
  813                    DO WHILE S1 - JBASE >= 9;                                       SCAN
  814                       IF LENGTH(BCD) >= 255 THEN                                   SCAN
  815                          DO;                                                       SCAN
  816                             CALL ERROR ( LBITM, 0);                                SCAN
  817                             RETURN;                                                SCAN
  818                          END;                                                      SCAN
  819                       S1 = S1 - 9;                                                 SCAN
  820                       CALL BUILD_BCD (SHR(NUMBER_VALUE, S1-JBASE));                SCAN
  821                    END;                                                            SCAN
  822                 NUMBER_VALUE = SHL(NUMBER_VALUE, JBASE) + S2;                      SCAN
  823                 CALL BCHAR;                                                        SCAN
  824              END;     /* OF DO WHILE CH...  */                                     SCAN
  825              CP = CP + 1;                                                          SCAN
  826              IF TOKEN = STRING THEN                                                SCAN
  827                 IF LENGTH(BCD) >= 255 THEN CALL ERROR (LBITM,0);                   SCAN
  828                 ELSE CALL BUILD_BCD (SHL(NUMBER_VALUE, 9 - S1));                   SCAN
  829               RETURN;                                                              SCAN
  830           END;                                                                     SCAN
  831           /*  CASE 4  */                                                           SCAN CASE 4.
  832           DO FOREVER;   /*  A LETTER:  IDENTIFIERS AND RESERVED WORDS  */          SCAN
  833              DO CP = CP + 1 TO TEXT_LIMIT;                                         SCAN
  834                 IF NOT_LETTER_OR_DIGIT(BYTE(TEXT, CP)) THEN                        SCAN
  835                    DO;  /* END OF IDENTIFIER  */                                   SCAN
  836                       BCD = SUBSTR(TEXT, 0, CP);                                   SCAN
  837                       IF CP > 1 THEN IF CP <= RESERVED_LIMIT THEN                  SCAN
  838                          /* CHECK FOR RESERVED WORDS */                            SCAN
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 22
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  839                          DO I = 1 TO TERMINAL#;                                    SCAN
  840                             IF BCD = VOCAB(I) THEN                                 SCAN C8 = 42
  841                                DO;                                                 SCAN
  842                                   TOKEN = I;                                       SCAN
  843                                   RETURN;                                          SCAN
  844                                END;                                                SCAN
  845                          END;                                                      SCAN
  846                       DO I = MACRO_INDEX(CP-1) TO MACRO_INDEX(CP) - 1;             SCAN
  847                          IF BCD = MACRO_NAME(I) THEN                               SCAN
  848                             DO;                                                    SCAN
  849                              MACRO_COUNT(I) = MACRO_COUNT(I) + 1;                  SCAN
  850                                BCD = MACRO_TEXT(I);                                SCAN
  851                                IF EXPANSION_COUNT < EXPANSION_LIMIT THEN           SCAN
  852                                   EXPANSION_COUNT = EXPANSION_COUNT + 1;           SCAN
  853                                ELSE CALL PRINTLINE ('** WARNING, TOO MANY EXPANSIONS FOR SCAN
  854   THE MACRO: ' ^^ BCD,-1);                                                         SCAN
  855                                TEXT = SUBSTR(TEXT, CP);                            SCAN
  856                                TEXT_LIMIT = TEXT_LIMIT - CP;                       SCAN
  857                                IF LENGTH(BCD) + TEXT_LIMIT > 255 THEN              SCAN
  858                                   DO;                                              SCAN
  859                                      IF LB + TEXT_LIMIT > 255 THEN                 SCAN
  860                                         CALL ERROR('MACRO EXPANSION TOO LONG',0);  SCAN
  861                                      ELSE                                          SCAN
  862                                         DO;                                        SCAN
  863                                            BALANCE = TEXT ^^ BALANCE;              SCAN
  864                                            LB = LENGTH(BALANCE);                   SCAN
  865                                            TEXT = BCD;                             SCAN
  866                                         END;                                       SCAN
  867                                   END;                                             SCAN
  868                                ELSE TEXT = BCD ^^ TEXT;                            SCAN
  869                                BCD = '';                                           SCAN
  870                                TEXT_LIMIT = LENGTH(TEXT) - 1;                      SCAN
  871                                CP = 0;                                             SCAN
  872                                GO TO RESCAN;                                       SCAN
  873                             END;                                                   SCAN
  874                       END;                                                         SCAN
  875                       /*  RESERVED WORDS EXIT HIGHER:  THEREFORE <IDENTIFIER> */   SCAN
  876                       TOKEN = IDENT;                                               SCAN
  877                       RETURN;                                                      SCAN
  878                    END;                                                            SCAN
  879              END;                                                                  SCAN
  880              /*  END OF CARD  */                                                   SCAN
  881              CALL GET_CARD;                                                        SCAN
  882              CP = CP - 1;                                                          SCAN
  883           END;                                                                     SCAN
  884           /*  CASE 5  */                                                           SCAN CASE 5.
  885            DO FOREVER;   /*  DIGIT:  A NUMBER  */                                  SCAN
  886              TOKEN = NUMBER;                                                       SCAN
  887              DO CP = CP TO TEXT_LIMIT;                                             SCAN
  888                 S1 = BYTE(TEXT, CP);                                               SCAN
  889                 IF S1 < BYTE ('0') ^ S1 > BYTE ('9') THEN RETURN;                  SCAN
  890                 NUMBER_VALUE = 10 * NUMBER_VALUE + S1 - BYTE ('0');                SCAN
  891              END;                                                                  SCAN
  892              CALL GET_CARD;                                                        SCAN
  893           END;                                                                     SCAN
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 23
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  894           /*  CASE 6  */                                                           SCAN CASE 6.
  895           DO;      /*  A /:  MAY BE DIVIDE OR START OF COMMENT  */                 SCAN
  896              CALL CHAR;                                                            SCAN
  897              IF BYTE (TEXT, CP) \= BYTE ('*') THEN                                 SCAN
  898                 DO;                                                                SCAN
  899                    TOKEN = DIVIDE;                                                 SCAN
  900                    RETURN;                                                         SCAN
  901                 END;                                                               SCAN
  902              /* WE HAVE A COMMENT  */                                              SCAN
  903              S1, S2 = BYTE (' ');                                                  SCAN
  904              DO WHILE S1 \= BYTE ('*') ^ S2 \= BYTE ('/');                         SCAN
  905                 IF S1 = BYTE ('$') THEN /* A CONTROL CHAR */                       SCAN
  906                      CONTROL(S2) = \CONTROL(S2) & 1;                               SCAN
  907                 S1 = S2;                                                           SCAN
  908                 CALL CHAR;                                                         SCAN
  909                 S2 = BYTE(TEXT, CP);                                               SCAN
  910              END;                                                                  SCAN
  911           END;                                                                     SCAN
  912           /*  CASE 7  */                                                           SCAN CASE 7.
  913           DO;      /*  SPECIAL CHARACTERS  */                                      SCAN
  914              TOKEN = TX(BYTE(TEXT));                                               SCAN
  915              CP = 1;                                                               SCAN
  916              RETURN;                                                               SCAN
  917           END;                                                                     SCAN
  918           /*  CASE 8  */                                                           SCAN CASE 8.
  919           DO;   /* A ^:  MAY BE  ^  OR  ^^  */                                     SCAN
  920              CALL CHAR;                                                            SCAN
  921              IF BYTE(TEXT, CP) = BYTE('^') THEN                                    SCAN
  922                 DO;                                                                SCAN
  923                    CALL CHAR;                                                      SCAN
  924                    TOKEN = CONCATENATE;                                            SCAN
  925                 END;                                                               SCAN
  926              ELSE TOKEN = ORSYMBOL;                                                SCAN
  927              RETURN;                                                               SCAN
  928           END;                                                                     SCAN
  929        END;     /* OF CASE ON CHARTYPE  */                                         SCAN CASE 9.
  930        CP = CP + 1;  /* ADVANCE SCANNER AND RESUME SEARCH FOR TOKEN  */            SCAN
  931        GO TO RESCAN;                                                               SCAN
  932     END SCAN;                                                                      SCAN

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
LBITM           CHARACTER   772   STRING    733       2
LSTRNGM         CHARACTER   771   STRING    732       3
RESCAN          LABEL       996  PROGRAM    737       4
S1              FIXED      9184     DATA    731      17
S2              FIXED      9185     DATA    731      11
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 24
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  933     /*                                                                            *
  934              C O D E   E M I S S I O N   P R O C E D U R E S                      *
  935   */                                                                              *
  936  FLUSH_DATA_BUFFER:                                                               *
  937     PROCEDURE;                                                                    *
  938        /* CLEAN OUT THE DATA BUFFER AND STICK ALL CURRENT CONTENTS                 FLUSH_DATA_BUFFER
  939           INTO THE REL FILE */                                                     FLUSH_DATA_BUFFER
  940        DECLARE I FIXED, J FIXED;                                                   FLUSH_DATA_BUFFER
  941        IF (DPTR+DCTR) > 1 THEN                                                     FLUSH_DATA_BUFFER
  942           DO;                                                                      FLUSH_DATA_BUFFER
  943              J = (DPTR/19)*18 + DCTR -1;                                           FLUSH_DATA_BUFFER
  944              FILE(RELFILE) = CODE_TYPE + J;                                        FLUSH_DATA_BUFFER
  945              I = DPTR+DCTR-1;                                                      FLUSH_DATA_BUFFER C9 = 262144
  946              DO J = 0 TO I;                                                        FLUSH_DATA_BUFFER
  947                 FILE(RELFILE) = DATA_BUFFER(J);                                    FLUSH_DATA_BUFFER
  948                 END;                                                               FLUSH_DATA_BUFFER
  949           END;                                                                     FLUSH_DATA_BUFFER
  950        DPTR = 0;                                                                   FLUSH_DATA_BUFFER
  951        DCTR = 1;                                                                   FLUSH_DATA_BUFFER
  952     END FLUSH_DATA_BUFFER;                                                         FLUSH_DATA_BUFFER

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9233     DATA    940       2
J               FIXED      9234     DATA    940       4
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 25
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  953  FLUSH_CODE_BUFFER:                                                               *
  954     PROCEDURE;                                                                    *
  955        /* CLEAN OUT THE CODE BUFFER AND STICK ALL CURRENT CONTENTS                 FLUSH_CODE_BUFFER
  956           INTO THE REL FILE */                                                     FLUSH_CODE_BUFFER
  957        DECLARE I FIXED, J FIXED;                                                   FLUSH_CODE_BUFFER
  958        IF (RPTR+RCTR) > 1 THEN                                                     FLUSH_CODE_BUFFER
  959           DO;                                                                      FLUSH_CODE_BUFFER
  960              I = (RPTR/19)*18 + RCTR -1;                                           FLUSH_CODE_BUFFER
  961              J = RPTR+RCTR-1;                                                      FLUSH_CODE_BUFFER
  962              FILE (RELFILE) = CODE_TYPE+I;                                         FLUSH_CODE_BUFFER
  963              DO I = 0 TO J;                                                        FLUSH_CODE_BUFFER
  964                 FILE(RELFILE) = CODE_BUFFER(I);                                    FLUSH_CODE_BUFFER
  965                 END;                                                               FLUSH_CODE_BUFFER
  966           END;                                                                     FLUSH_CODE_BUFFER
  967        RPTR = 0;                                                                   FLUSH_CODE_BUFFER
  968        RCTR = 1;                                                                   FLUSH_CODE_BUFFER
  969     END FLUSH_CODE_BUFFER;                                                         FLUSH_CODE_BUFFER

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9237     DATA    957       4
J               FIXED      9238     DATA    957       2
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 26
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  970  RADIX50:                                                                         *
  971     PROCEDURE (SYMBOL);                                                           *
  972     /* PROCEDURE TO RETURN THE RADIX-50 REPRESENTATION OF A SYMBOL.                RADIX50
  973        ONLY THE FIRST 6 CHARACTERS ARE USED. */                                    RADIX50
  974     DECLARE SYMBOL CHARACTER;                                                      RADIX50
  975     DECLARE (I,J,K,L) FIXED;                                                       RADIX50
  976                                                                                    RADIX50
  977     J = 0;                                                                         RADIX50
  978     IF LENGTH(SYMBOL) < 6 THEN SYMBOL = SYMBOL ^^ X7;                              RADIX50
  979     DO L = 0 TO 5;                                                                 RADIX50
  980        I = BYTE(SYMBOL,L);                                                         RADIX50 C10 = 5
  981        IF I = BYTE(' ') THEN K = 0;                                                RADIX50
  982           ELSE IF I = BYTE ('.') THEN K = "(3)45";                                 RADIX50
  983           ELSE IF I = BYTE ('$') THEN K = "(3)46";                                 RADIX50
  984           ELSE IF I = BYTE ('%') THEN K = "(3)47";                                 RADIX50
  985           ELSE IF I >= BYTE ('0') & I <= BYTE ('9') THEN                           RADIX50
  986                      K = I-BYTE('0') + "(3)1";                                     RADIX50
  987           ELSE IF I >= BYTE ('A') & I <= BYTE ('Z') THEN                           RADIX50
  988                      K = I - BYTE ('A') + "(3)13";                                 RADIX50
  989           ELSE RETURN J;                                                           RADIX50
  990        J = J * "(3)50" + K;                                                        RADIX50
  991        END;                                                                        RADIX50
  992     RETURN J;                                                                      RADIX50
  993     END RADIX50;                                                                   RADIX50

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9240     DATA    975      11
J               FIXED      9241     DATA    975       5
K               FIXED      9242     DATA    975       7
L               FIXED      9243     DATA    975       2
SYMBOL          CHARACTER   777   STRING    971       4
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 27
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  994  OUTPUT_CODEWORD:                                                                 *
  995     PROCEDURE;                                                                    *
  996     /* SPIT OUT THE INSTRUCTION AT CODEXXX(CODE_TAIL) */                           OUTPUT_CODEWORD
  997     IF CODE_FULL(CODE_TAIL) THEN                                                   OUTPUT_CODEWORD
  998        DO;                                                                         OUTPUT_CODEWORD
  999           IF CONTROL(BYTE('A')) THEN OUTPUT (CODEFILE) = CODE (CODE_TAIL);         OUTPUT_CODEWORD
 1000           IF RCTR+RPTR = 1 THEN                                                    OUTPUT_CODEWORD
 1001              DO;                                                                   OUTPUT_CODEWORD
 1002                 CODE_BUFFER(0) =SHL(1,34);                                         OUTPUT_CODEWORD
 1003                 CODE_BUFFER(1) = CODE_PP(CODE_TAIL) + "(3)400000";                 OUTPUT_CODEWORD
 1004                 RCTR = RCTR +1;                                                    OUTPUT_CODEWORD
 1005              END;                                                                  OUTPUT_CODEWORD
 1006           CODE_BUFFER(RPTR) = SHL(CODE_RBITS(CODE_TAIL),36-RCTR*2)^CODE_BUFFER(RPTR); OUTPUT_CODEWORD
 1007           CODE_BUFFER(RPTR+RCTR) = CODE_REL(CODE_TAIL);                            OUTPUT_CODEWORD
 1008           RCTR = RCTR +1;                                                          OUTPUT_CODEWORD
 1009           IF RPTR+RCTR > BUFFERSIZE THEN CALL FLUSH_CODE_BUFFER;                   OUTPUT_CODEWORD
 1010           IF RCTR > 18 THEN                                                        OUTPUT_CODEWORD
 1011              DO;                                                                   OUTPUT_CODEWORD
 1012                 RPTR = RPTR +19;                                                   OUTPUT_CODEWORD
 1013                 RCTR = 1;                                                          OUTPUT_CODEWORD
 1014                 CODE_BUFFER(RPTR) = 0;                                             OUTPUT_CODEWORD
 1015              END;                                                                  OUTPUT_CODEWORD
 1016        END;                                                                        OUTPUT_CODEWORD
 1017     CODE_FULL(CODE_TAIL) = FALSE;                                                  OUTPUT_CODEWORD
 1018     CODE_TAIL = (CODE_TAIL+1) & 3;                                                 OUTPUT_CODEWORD
 1019     END OUTPUT_CODEWORD;                                                           OUTPUT_CODEWORD
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 28
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1020  FLUSH_LABELS:                                                                    *
 1021     PROCEDURE;                                                                    *
 1022        /* CLEAN OUT LABEL BUFFER BY GENERATING INTERNAL REQUEST                    FLUSH_LABELS
 1023           TYPE BLOCK AND DEFINING ALL LABELS NOW KNOWN */                          FLUSH_LABELS
 1024        DECLARE I FIXED;                                                            FLUSH_LABELS
 1025        IF LABEL_COUNT = 0 THEN RETURN;                                             FLUSH_LABELS
 1026        DO WHILE CODE_TAIL \= CODE_HEAD;                                            FLUSH_LABELS
 1027           CALL OUTPUT_CODEWORD;                                                    FLUSH_LABELS
 1028           END;                                                                     FLUSH_LABELS
 1029        CALL OUTPUT_CODEWORD;                                                       FLUSH_LABELS
 1030        CODE_TAIL = CODE_HEAD;      /* RESET POINTERS, SINCE BUFFERS NOW EMPTY */   FLUSH_LABELS
 1031        STILLCOND, STILLINZERO = 0; /* MAKE SURE PEEPHOLE WORKS */                  FLUSH_LABELS
 1032        CALL FLUSH_CODE_BUFFER;                                                     FLUSH_LABELS
 1033        FILE (RELFILE) = INTREQ_TYPE+LABEL_COUNT;                                   FLUSH_LABELS
 1034        DO I = 0 TO LABEL_COUNT;                                                    FLUSH_LABELS C11 = 2097152
 1035           FILE (RELFILE) = LABEL_BUFFER(I);                                        FLUSH_LABELS
 1036           END;                                                                     FLUSH_LABELS
 1037        LABEL_COUNT = 0;                                                            FLUSH_LABELS
 1038        LABEL_BUFFER(0) = 0;                                                        FLUSH_LABELS
 1039     END FLUSH_LABELS;                                                              FLUSH_LABELS

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9245     DATA   1024       2
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 29
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1040  OUTPUT_DATAWORD:                                                                 *
 1041     PROCEDURE (W,LOC);                                                            *
 1042        /* OUTPUT A WORD TO THE LOW SEGMENT */                                      OUTPUT_DATAWORD
 1043        DECLARE W  FIXED, LOC FIXED;                                                OUTPUT_DATAWORD
 1044        IF (DPTR+DCTR)>BUFFERSIZE ^ DLOC \= LOC THEN CALL FLUSH_DATA_BUFFER;        OUTPUT_DATAWORD
 1045        IF DPTR+DCTR = 1 THEN                                                       OUTPUT_DATAWORD
 1046           DO;                                                                      OUTPUT_DATAWORD
 1047              DATA_BUFFER(0) = "(3)200000000000";                                   OUTPUT_DATAWORD
 1048              DATA_BUFFER(1) = LOC;                                                 OUTPUT_DATAWORD C12 = 17179869184
 1049              DATA_BUFFER(2) = W;                                                   OUTPUT_DATAWORD
 1050              DLOC = LOC + 1;                                                       OUTPUT_DATAWORD
 1051              DCTR = DCTR + 2;                                                      OUTPUT_DATAWORD
 1052              RETURN;                                                               OUTPUT_DATAWORD
 1053           END;                                                                     OUTPUT_DATAWORD
 1054        DATA_BUFFER (DPTR+DCTR) = W;                                                OUTPUT_DATAWORD
 1055        DCTR = DCTR +1;                                                             OUTPUT_DATAWORD
 1056        DLOC = DLOC + 1;                                                            OUTPUT_DATAWORD
 1057        IF DPTR+DCTR > BUFFERSIZE THEN CALL FLUSH_DATA_BUFFER;                      OUTPUT_DATAWORD
 1058        IF DCTR > 18 THEN                                                           OUTPUT_DATAWORD
 1059          DO;                                                                       OUTPUT_DATAWORD
 1060              DCTR = 1;                                                             OUTPUT_DATAWORD
 1061              DPTR = DPTR + 19;                                                     OUTPUT_DATAWORD
 1062              DATA_BUFFER(DPTR) = 0;                                                OUTPUT_DATAWORD
 1063           END;                                                                     OUTPUT_DATAWORD
 1064     END OUTPUT_DATAWORD;                                                           OUTPUT_DATAWORD

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
LOC             FIXED      9249     DATA   1041       3
W               FIXED      9248     DATA   1041       2
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 30
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1065  FLUSH_DATACARD:PROCEDURE;                                                        *
 1066        IF CONTROL(BYTE('A')) ^ CONTROL(BYTE('B')) THEN                             FLUSH_DATACARD
 1067           DO;                                                                      FLUSH_DATACARD
 1068              DATACARD = DATACARD ^^ '; D' ^^ DP;                                   FLUSH_DATACARD
 1069              IF CONTROL(BYTE('A')) THEN OUTPUT (DATAFILE) = DATACARD;              FLUSH_DATACARD
 1070              IF CONTROL(BYTE('B')) THEN CALL PRINTLINE (DATAMSG ^^ DATACARD,-1);   FLUSH_DATACARD
 1071           END;                                                                     FLUSH_DATACARD
 1072        CALL OUTPUT_DATAWORD (PWORD,DP);                                            FLUSH_DATACARD
 1073        PWORD = 0;                                                                  FLUSH_DATACARD
 1074        DPOFFSET = 0;                                                               FLUSH_DATACARD
 1075        DP = DP + 1;                                                                FLUSH_DATACARD
 1076  END FLUSH_DATACARD;                                                               FLUSH_DATACARD
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 31
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1077  EMITBLOCK:                                                                       *
 1078     PROCEDURE (I);                                                                *
 1079        /* RESERVE A BLOCK OF I WORDS */                                            EMITBLOCK
 1080        DECLARE I FIXED;                                                            EMITBLOCK
 1081        IF CONTROL(BYTE('A')) ^ CONTROL(BYTE('B')) THEN                             EMITBLOCK
 1082           DO;                                                                      EMITBLOCK
 1083              DATACARD = '       REPEAT ' ^^ I ^^ ',<0>; D' ^^ DP;                  EMITBLOCK
 1084              IF CONTROL(BYTE('A')) THEN OUTPUT (DATAFILE) = DATACARD;              EMITBLOCK
 1085              IF CONTROL(BYTE('B')) THEN CALL PRINTLINE (DATAMSG ^^ DATACARD,-1);   EMITBLOCK
 1086           END;                                                                     EMITBLOCK
 1087        DP = DP + I;                                                                EMITBLOCK
 1088  END EMITBLOCK;                                                                    EMITBLOCK

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9252     DATA   1078       2
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 32
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1089  EMITDATAWORD:                                                                    *
 1090     PROCEDURE (W);                                                                *
 1091        DECLARE W FIXED;                                                            EMITDATAWORD
 1092        /* SEND AN 80 CHARACTER CARD TO THE DATA FILE */                            EMITDATAWORD
 1093        IF DPOFFSET > 0 THEN CALL FLUSH_DATACARD;                                   EMITDATAWORD
 1094        IF CONTROL(BYTE('A')) ^ CONTROL(BYTE('B')) THEN                             EMITDATAWORD
 1095           DO;                                                                      EMITDATAWORD
 1096              DATACARD = X7 ^^ W ^^ '; D' ^^ DP;                                    EMITDATAWORD
 1097              IF CONTROL(BYTE('A')) THEN OUTPUT (DATAFILE) = DATACARD;              EMITDATAWORD
 1098              IF CONTROL(BYTE('B')) THEN CALL PRINTLINE (DATAMSG ^^ DATACARD,-1);   EMITDATAWORD
 1099           END;                                                                     EMITDATAWORD
 1100        CALL OUTPUT_DATAWORD(W,DP);                                                 EMITDATAWORD
 1101        DP = DP + 1;                                                                EMITDATAWORD
 1102  END EMITDATAWORD;                                                                 EMITDATAWORD

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
W               FIXED      9259     DATA   1090       2
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 33
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1103  EMITBYTE:                                                                        *
 1104     PROCEDURE (C);                                                                *
 1105        DECLARE C FIXED;                                                            EMITBYTE
 1106        /* SEND ONE 9-BIT BYTE TO THE DATA AREA */                                  EMITBYTE
 1107        IF CONTROL(BYTE('A')) ^ CONTROL(BYTE('B')) THEN                             EMITBYTE
 1108           IF DPOFFSET = 0 THEN DATACARD = '       BYTE (9)'^^ C;                   EMITBYTE
 1109           ELSE DATACARD = DATACARD ^^ ',' ^^ C;                                    EMITBYTE
 1110        PWORD = PWORD + SHL(C&"(3)777",9*(3-DPOFFSET));                             EMITBYTE
 1111        DPOFFSET = DPOFFSET + 1;                                                    EMITBYTE
 1112        IF DPOFFSET = 4 THEN CALL FLUSH_DATACARD;                                   EMITBYTE
 1113  END EMITBYTE;                                                                     EMITBYTE

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
C               FIXED      9261     DATA   1104       3
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 34
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1114  EMITCONSTANT:                                                                    *
 1115     PROCEDURE (C);                                                                *
 1116        DECLARE C FIXED;                                                            EMITCONSTANT
 1117        DECLARE CTAB (100) FIXED, CADD (100) FIXED, NC FIXED, I FIXED;              EMITCONSTANT
 1118        /* SEE IF C HAS ALREADY BEEN EMITED, AND IF NOT, EMIT IT.  SET UP ADR.  */  EMITCONSTANT
 1119        DO I = 1 TO NC;                  /* STEP THRU THE CONSTANTS */              EMITCONSTANT
 1120           IF CTAB (I) = C THEN                                                     EMITCONSTANT
 1121              DO;                                                                   EMITCONSTANT
 1122                 ADR = CADD (I);                                                    EMITCONSTANT
 1123                 RETURN;                                                            EMITCONSTANT
 1124              END;                                                                  EMITCONSTANT
 1125        END;                                                                        EMITCONSTANT
 1126        CTAB (I) = C;                                                               EMITCONSTANT
 1127        CALL EMITDATAWORD (C);                                                      EMITCONSTANT
 1128        ADR, CADD (I) = DP - 1;                                                     EMITCONSTANT
 1129        IF I < 100 THEN NC = I;                                                     EMITCONSTANT
 1130        IF CONTROL(BYTE('C')) THEN CALL PRINTLINE ('* CONSTANT ' ^^ NC ^^ ' = ' ^^ C,-1); EMITCONSTANT
 1131           ELSE IF CONTROL(BYTE('L')) THEN INFO=INFO^^ ' C'^^ NC ^^' = ' ^^ C;      EMITCONSTANT
 1132  END EMITCONSTANT;                                                                 EMITCONSTANT

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
C               FIXED      9266     DATA   1115       5
CADD            FIXED      9368     DATA   1117       2
CTAB            FIXED      9267     DATA   1117       2
I               FIXED      9470     DATA   1117       7
NC              FIXED      9469     DATA   1117       4
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 35
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1133  EMITCODEWORD:PROCEDURE (W,WORD,RBITS);                                           *
 1134         DECLARE W CHARACTER;                                                       EMITCODEWORD
 1135        DECLARE WORD FIXED;                                                         EMITCODEWORD
 1136        DECLARE RBITS FIXED;                                                        EMITCODEWORD
 1137        /* SEND AN 80 CHARACTER CODE CARD TO THE BUFFER AREA */                     EMITCODEWORD
 1138        CODE_HEAD = (CODE_HEAD+1) & 3;                                              EMITCODEWORD
 1139        IF CODE_HEAD = CODE_TAIL THEN CALL OUTPUT_CODEWORD;                         EMITCODEWORD
 1140        IF CONTROL(BYTE('A')) ^ CONTROL(BYTE('E')) THEN                             EMITCODEWORD
 1141              CODE(CODE_HEAD) = LABEL_GEN ^^ W;                                     EMITCODEWORD
 1142        IF CONTROL(BYTE('E')) THEN                                                  EMITCODEWORD
 1143              CALL PRINTLINE (CODEMSG ^^ CODE(CODE_HEAD),-1);                       EMITCODEWORD
 1144        CODE_REL(CODE_HEAD) = WORD;                                                 EMITCODEWORD
 1145        CODE_PP(CODE_HEAD) = PP;                                                    EMITCODEWORD
 1146        CODE_RBITS(CODE_HEAD) = RBITS;                                              EMITCODEWORD
 1147        CODE_FULL(CODE_HEAD) = TRUE;                                                EMITCODEWORD
 1148        LABEL_GEN = '';                                                             EMITCODEWORD
 1149        STILLCOND, STILLINZERO = 0;                                                 EMITCODEWORD
 1150        PP = PP + 1;                                                                EMITCODEWORD
 1151  END EMITCODEWORD;                                                                 EMITCODEWORD

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
RBITS           FIXED      9478     DATA   1133       1
W               CHARACTER   788   STRING   1133       1
WORD            FIXED      9477     DATA   1133       1
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 36
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1152  OUTPUTLABEL:                                                                     *
 1153     PROCEDURE (J);                                                                *
 1154     DECLARE J FIXED;                                                               OUTPUTLABEL
 1155     LABEL_COUNT = LABEL_COUNT+1;                                                   OUTPUTLABEL
 1156     LABEL_BUFFER(0) = SHL(3,36-LABEL_COUNT*2)^LABEL_BUFFER(0);                     OUTPUTLABEL
 1157     LABEL_BUFFER(LABEL_COUNT) = J;                                                 OUTPUTLABEL
 1158     IF(LABEL_COUNT >= BUFFERSIZE) THEN CALL FLUSH_LABELS;                          OUTPUTLABEL
 1159     END OUTPUTLABEL;                                                               OUTPUTLABEL

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
J               FIXED      9479     DATA   1153       1
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 37
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1160  EMITLABEL:PROCEDURE(L,R);                                                        *
 1161        DECLARE L FIXED;                                                            EMITLABEL
 1162        DECLARE R FIXED;                                                            EMITLABEL
 1163        DECLARE I FIXED;                                                            EMITLABEL
 1164        DECLARE J FIXED;                                                            EMITLABEL
 1165        IF R = 3 THEN                                                               EMITLABEL
 1166           DO;                                                                      EMITLABEL
 1167              IF DESCREF(L) = 0 THEN RETURN;                                        EMITLABEL
 1168              J = SHL(DESCREF(L),18) + DP;                                          EMITLABEL
 1169              CALL OUTPUTLABEL(J);                                                  EMITLABEL
 1170              DESCREF(L) = 0;                                                       EMITLABEL
 1171              RETURN;                                                               EMITLABEL
 1172           END;                                                                     EMITLABEL
 1173        STILLINZERO = 0;    /* DON'T TRY OPTIMIZING OVER LABEL */                   EMITLABEL
 1174        J = SHL(R,18) + L;                                                          EMITLABEL
 1175        DO I = 1 TO FOR_COUNT;                                                      EMITLABEL
 1176           IF J = FOR_LABEL(I) THEN                                                 EMITLABEL
 1177              DO;                                                                   EMITLABEL
 1178                 J = SHL(FOR_REF(I)+"(3)400000",18);                                EMITLABEL
 1179                 IF R = 4 THEN J = J + PP + "(3)400000";                            EMITLABEL
 1180                          ELSE J = J + DP;                                          EMITLABEL
 1181                 CALL OUTPUTLABEL(J);                                               EMITLABEL
 1182                 J = I;                                                             EMITLABEL
 1183                 DO WHILE J < FOR_COUNT;                                            EMITLABEL
 1184                    FOR_LABEL(J) = FOR_LABEL(J+1);                                  EMITLABEL
 1185                    FOR_REF(J) = FOR_REF(J+1);                                      EMITLABEL
 1186                    J = J + 1;                                                      EMITLABEL
 1187                 END;                                                               EMITLABEL
 1188                 FOR_LABEL(FOR_COUNT) = 0;                                          EMITLABEL
 1189                 FOR_REF(FOR_COUNT) = 0;                                            EMITLABEL
 1190                 FOR_COUNT = FOR_COUNT -1;                                          EMITLABEL
 1191                 /* PUT A LABEL ON THE NEXT INSTRUCTION GENERATED */                EMITLABEL
 1192                 IF R = 4 & (CONTROL(BYTE('A')) ^ CONTROL(BYTE('E'))) THEN          EMITLABEL
 1193                              LABEL_GEN = LABEL_GEN ^^ '$' ^^ L ^^ ':';             EMITLABEL
 1194                 RETURN;                                                            EMITLABEL
 1195              END;                                                                  EMITLABEL
 1196        END;                                                                        EMITLABEL
 1197        IF R = 4 & (CONTROL(BYTE('A')) ^ CONTROL(BYTE('E'))) THEN                   EMITLABEL
 1198            LABEL_GEN = LABEL_GEN ^^ '$' ^^ L ^^ ':';                               EMITLABEL
 1199        RETURN;                                                                     EMITLABEL
 1200  END EMITLABEL;                                                                    EMITLABEL

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9482     DATA   1163       4
J               FIXED      9483     DATA   1164      18
L               FIXED      9480     DATA   1160       6
R               FIXED      9481     DATA   1160       5
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 38
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1201  REFCHECK:                                                                        *
 1202     PROCEDURE (I);                                                                *
 1203        /* CHECK TO SEE IF THIS SATISFIES ANY FORWARD REFERENCES.                   REFCHECK
 1204           IF SO, SET UP LABEL BUFFER.  IF NOT, CHECK IF THIS                       REFCHECK
 1205           SHOULD BE CHAINED. */                                                    REFCHECK
 1206        DECLARE I FIXED;                                                            REFCHECK
 1207        DECLARE J FIXED;                                                            REFCHECK
 1208        IF SHR(I,18) = 3 THEN                                                       REFCHECK
 1209           DO;                                                                      REFCHECK
 1210              I = I & "(3)777777";                                                  REFCHECK
 1211              J = DESCREF(I);                                                       REFCHECK
 1212              DESCREF(I) = PP + "(3)400000";                                        REFCHECK
 1213              RETURN J;                                                             REFCHECK
 1214           END;                                                                     REFCHECK
 1215        J = 1;                                                                      REFCHECK
 1216        DO WHILE J <= FOR_COUNT;                                                    REFCHECK
 1217           IF FOR_LABEL(J) = I THEN                                                 REFCHECK
 1218              DO;                                                                   REFCHECK
 1219                 I = FOR_REF(J) + "(3)400000";                                      REFCHECK
 1220                 FOR_REF(J) = PP;                                                   REFCHECK
 1221                 RETURN I;                                                          REFCHECK
 1222              END;                                                                  REFCHECK
 1223           J=J+1;                                                                   REFCHECK
 1224        END;                                                                        REFCHECK
 1225        FOR_COUNT = FOR_COUNT +1;                                                   REFCHECK
 1226        IF FOR_COUNT > FOR_MAX THEN CALL ERROR ('TOO MANY FORWARD REFERENCES',3);   REFCHECK
 1227        FOR_REF(FOR_COUNT) = PP;                                                    REFCHECK
 1228        FOR_LABEL(FOR_COUNT) = I;                                                   REFCHECK
 1229        RETURN 0;                                                                   REFCHECK
 1230     END REFCHECK;                                                                  REFCHECK

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9486     DATA   1202       9
J               FIXED      9487     DATA   1207       9
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 39
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1231  EMITINST:PROCEDURE (OPCODE,TREG,INDIRECT,OPERAND,IREG,RELOCATION);               *
 1232        DECLARE OPCODE FIXED,                                                       EMITINST
 1233                TREG FIXED,                                                         EMITINST
 1234                INDIRECT FIXED,                                                     EMITINST
 1235                OPERAND FIXED,                                                      EMITINST
 1236                IREG FIXED,                                                         EMITINST
 1237                RELOCATION FIXED;                                                   EMITINST
 1238        DECLARE RBITS FIXED,                                                        EMITINST
 1239                WORD FIXED;                                                         EMITINST
 1240        /* EMIT A 80 CHARACTER INSTRUCTION IMAGE */                                 EMITINST
 1241        DECLARE RELOC (5) CHARACTER                                                 EMITINST
 1242                INITIAL ('', 'D+', 'P+', 'S+', '$', '$');                           EMITINST
 1243        DECLARE I FIXED,                                                            EMITINST
 1244                J FIXED,                                                            EMITINST
 1245                CARD CHARACTER,                                                     EMITINST
 1246                INDIR (1) CHARACTER INITIAL ('', '@');                              EMITINST
 1247        COUNT_INST = COUNT_INST + 1;                                                EMITINST
 1248                                                                                    EMITINST
 1249        WORD = SHL(OPCODE,27) + SHL(TREG&"F",23) + SHL(INDIRECT&1,22)               EMITINST
 1250               + SHL(IREG&"F",18);                                                  EMITINST
 1251        DO CASE RELOCATION;                                                         EMITINST
 1252           /* CASE 0 : ABSOLUTE ADDRESS - NO RELOCATION */                          EMITINST CASE 0.
 1253           DO;                                                                      EMITINST
 1254              WORD = WORD + (OPERAND&"(3)777777");                                  EMITINST
 1255              RBITS = 0;                                                            EMITINST
 1256           END;                                                                     EMITINST
 1257                                                                                    EMITINST CASE 1.
 1258           /* CASE 1 : RELATIVE TO THE BEGINNING OF DATA SEGMENT */                 EMITINST
 1259           DO;                                                                      EMITINST
 1260              WORD = WORD + (OPERAND&"(3)777777");                                  EMITINST
 1261              RBITS = 1;                                                            EMITINST
 1262           END;                                                                     EMITINST
 1263                                                                                    EMITINST CASE 2.
 1264           /* CASE 2 : RELATIVE TO BEGINNING OF CODE SEGMENT */                     EMITINST
 1265           DO;                                                                      EMITINST
 1266              WORD = WORD + (OPERAND&"(3)777777") + "(3)400000";                    EMITINST
 1267              RBITS = 1;                                                            EMITINST
 1268           END;                                                                     EMITINST
 1269                                                                                    EMITINST CASE 3.
 1270           /* CASE 3 : RELATIVE TO BEGINNING OF STRINGS */                          EMITINST
 1271           DO;                                                                      EMITINST
 1272              I = SHL(RELOCATION,18) + (OPERAND&"(3)777777");                       EMITINST
 1273              J = REFCHECK(I);                                                      EMITINST
 1274              WORD = WORD + J;                                                      EMITINST
 1275              IF J = 0 THEN RBITS = 0;                                              EMITINST
 1276                       ELSE RBITS = 1;                                              EMITINST
 1277           END;                                                                     EMITINST
 1278                                                                                    EMITINST CASE 4.
 1279           /* CASE 4 : FORWARD LABEL REFERENCE IN CODE AREA */                      EMITINST
 1280           DO;                                                                      EMITINST
 1281              J = REFCHECK("(3)4000000" + (OPERAND&"(3)777777"));                   EMITINST
 1282              WORD = WORD + J;                                                      EMITINST C13 = 1048576
 1283              IF J = 0 THEN RBITS = 0;                                              EMITINST
 1284                       ELSE RBITS = 1;                                              EMITINST
 1285           END;                                                                     EMITINST
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 40
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1286                                                                                    EMITINST CASE 5.
 1287           /* CASE 5 : FORWARD LABEL REFERENCE IN DATA AREA */                      EMITINST
 1288           DO;                                                                      EMITINST
 1289              J = REFCHECK("(3)5000000" + (OPERAND&"(3)777777"));                   EMITINST
 1290              WORD = WORD + J;                                                      EMITINST C14 = 1310720
 1291              IF J = 0 THEN RBITS = 0;                                              EMITINST
 1292                       ELSE RBITS = 1;                                              EMITINST
 1293           END;                                                                     EMITINST
 1294        END;  /* END OF DO CASE RELOCATION */                                       EMITINST CASE 6.
 1295                                                                                    EMITINST
 1296        IF CONTROL(BYTE('A')) ^ CONTROL(BYTE('E')) THEN                             EMITINST
 1297           DO;                                                                      EMITINST
 1298              I = SHR(OPCODE,5);                                                    EMITINST
 1299              CARD = X7 ^^ SUBSTR(OPNAME(I),(OPCODE-I*32)*6,6) ^^ X1 ^^TREG ^^ ','  EMITINST
 1300                     ^^ INDIR(INDIRECT) ^^ RELOC(RELOCATION) ^^ OPERAND;            EMITINST C15 = 805306368
 1301              IF IREG > 0 THEN CARD = CARD ^^ '(' ^^ IREG ^^ ')';                   EMITINST
 1302              CARD = CARD ^^ '; P' ^^ PP;                                           EMITINST
 1303           END;                                                                     EMITINST
 1304        INSTRUCT(OPCODE) = INSTRUCT(OPCODE) + 1;                                    EMITINST
 1305        CALL EMITCODEWORD (CARD,WORD,RBITS);                                        EMITINST
 1306  END EMITINST;                                                                     EMITINST

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
CARD            CHARACTER   800   STRING   1245       6
I               FIXED      9505     DATA   1243       5
INDIR           CHARACTER   801   STRING   1246       1
INDIRECT        FIXED      9497     DATA   1231       2
IREG            FIXED      9499     DATA   1231       3
J               FIXED      9506     DATA   1244       9
OPCODE          FIXED      9495     DATA   1231       5
OPERAND         FIXED      9498     DATA   1231       7
RBITS           FIXED      9501     DATA   1238      10
RELOC           CHARACTER   794   STRING   1241       1
RELOCATION      FIXED      9500     DATA   1231       3
TREG            FIXED      9496     DATA   1231       2
WORD            FIXED      9502     DATA   1239      14
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 41
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1307  EMITDESC:PROCEDURE (L,A);                                                        *
 1308        DECLARE L FIXED,                                                            EMITDESC
 1309                A FIXED;                                                            EMITDESC
 1310        /* SEND A LENGTH AND STRING ADDRESS TO THE DESCRIPTOR AREA */               EMITDESC
 1311        IF DSP > DESCLIMIT THEN                                                     EMITDESC
 1312           DO;                                                                      EMITDESC
 1313              CALL ERROR ('TOO MANY STRINGS',1);                                    EMITDESC
 1314              DSP = 0;                                                              EMITDESC
 1315           END;                                                                     EMITDESC
 1316         IF CONTROL(BYTE('B')) THEN                                                 EMITDESC
 1317           CALL PRINTLINE (X70 ^^ 'DESC =        ' ^^ L ^^ ',' ^^ A ^^ '; S' ^^ DSP,-1); EMITDESC
 1318        DESCL(DSP) = L;                                                             EMITDESC
 1319        DESCA(DSP) = A;                                                             EMITDESC
 1320        DSP = DSP + 1;                                                              EMITDESC
 1321  END EMITDESC;                                                                     EMITDESC

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
A               FIXED      9514     DATA   1307       2
L               FIXED      9513     DATA   1307       2
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 42
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1322  FINDLABEL:PROCEDURE;                                                             *
 1323        LABEL_SINK = LABEL_SINK + 1;                                                FINDLABEL
 1324        RETURN (LABEL_SINK);                                                        FINDLABEL
 1325  END FINDLABEL;                                                                    FINDLABEL
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 43
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1326   /*                                                                              *
 1327             S Y M B O L   T A B L E   P R O C E D U R E S                         *
 1328   */                                                                              *
 1329                                                                                   *
 1330  HASHER:                                                                          *
 1331     PROCEDURE (ID);          /* CALCULATE HASH INDEX INTO HASH TABLE*/            *
 1332     DECLARE ID   CHARACTER;                                                        HASHER
 1333     DECLARE L    FIXED;                                                            HASHER
 1334     L = LENGTH (ID);                                                               HASHER
 1335     RETURN (BYTE (ID) + BYTE (ID, L-1) + SHL (L,4)) & "FF";                        HASHER
 1336     END HASHER;                                                                    HASHER

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
ID              CHARACTER   811   STRING   1331       3
L               FIXED      9524     DATA   1333       3
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 44
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1337                                                                                   *
 1338  ENTER:PROCEDURE (N, T, L, S);                                                    *
 1339        DECLARE T FIXED, L FIXED, S FIXED;                                          ENTER
 1340        DECLARE N CHARACTER;                                                        ENTER
 1341   /* ENTER THE NAME N IN THE SYMBOL TABLE WITH TYPE T AT LOCATION L SEGMENT S */   ENTER
 1342        DECLARE I FIXED, K FIXED;                                                   ENTER
 1343        IDX = HASHER (N);                                                           ENTER
 1344        I = HASH (IDX);                                                             ENTER
 1345        DO WHILE I >= PROCMARK;                                                     ENTER
 1346           IDCOMPARES = IDCOMPARES + 1;                                             ENTER
 1347           IF N = SYT (I) THEN                                                      ENTER
 1348              DO;                                                                   ENTER
 1349                 K = SYTYPE (I);                                                    ENTER
 1350                 IF T = LABELTYPE & (K = FORWARDTYPE ^ K = FORWARDCALL) THEN        ENTER
 1351                    DO;                                                             ENTER
 1352                       IF CONTROL (BYTE ('E')) THEN                                 ENTER
 1353                          CALL PRINTLINE (X70 ^^ 'FIXED REFERENCES TO: ' ^^ N,-1);  ENTER
 1354                       IF K = FORWARDTYPE THEN                                      ENTER
 1355                          DO;                                                       ENTER
 1356                             CALL EMITLABEL(SYTLOC(I),4);                           ENTER
 1357                             SYTLOC(I) = L;                                         ENTER
 1358                             SYTSEG(I) = S;                                         ENTER
 1359                          END;                                                      ENTER
 1360                       SYTYPE (I) = T;                                              ENTER
 1361                    END;                                                            ENTER
 1362                 ELSE IF PROCMARK + PARCT < I THEN                                  ENTER
 1363                    CALL ERROR ('DUPLICATE DECLARATION FOR: ' ^^ N, 0);             ENTER
 1364                 RETURN I;                                                          ENTER
 1365              END;                                                                  ENTER
 1366           I = PTR (I);                                                             ENTER
 1367        END;                                                                        ENTER
 1368        NDECSY = NDECSY + 1;                                                        ENTER
 1369        IF NDECSY > MAXNDECSY THEN                                                  ENTER
 1370           IF NDECSY > SYTSIZE THEN                                                 ENTER
 1371              DO;                                                                   ENTER
 1372                 CALL ERROR ('SYMBOL TABLE OVERFLOW', 1);                           ENTER
 1373                 NDECSY = NDECSY - 1;                                               ENTER
 1374              END;                                                                  ENTER
 1375           ELSE MAXNDECSY = NDECSY;                                                 ENTER
 1376        SYT (NDECSY) = N;                                                           ENTER
 1377        SYTYPE (NDECSY) = T;                                                        ENTER
 1378        SYTLOC (NDECSY) = L;                                                        ENTER
 1379        SYTSEG (NDECSY) = S;                                                        ENTER
 1380        SYTCO (NDECSY) = 0;                                                         ENTER
 1381        SYTCARD (NDECSY) = CARD_COUNT;                                              ENTER
 1382        PTR (NDECSY) = HASH (IDX);                                                  ENTER
 1383        HASH (IDX) = NDECSY;                                                        ENTER
 1384        RETURN (NDECSY);                                                            ENTER
 1385  END ENTER;                                                                        ENTER

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9528     DATA   1342      12
K               FIXED      9529     DATA   1342       4
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 45
SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
 
L               FIXED      9526     DATA   1338       2
N               CHARACTER   812   STRING   1338       5
S               FIXED      9527     DATA   1338       2
T               FIXED      9525     DATA   1338       3
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 46
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1386   ID_LOOKUP:                                                                      *
 1387     PROCEDURE (P);                                                                *
 1388        /* LOOKS UP THE IDENTIFIER AT P IN THE ANALYSIS STACK IN THE                ID_LOOKUP
 1389           SYMBOL TABLE AND INITIALIZES FIXL, CNT, TYPE, AND INX                    ID_LOOKUP
 1390           APPROPRIATELY.  IF THE IDENTIFIER IS NOT FOUND, FIXL IS                  ID_LOOKUP
 1391           SET TO -1                                                                ID_LOOKUP
 1392        */                                                                          ID_LOOKUP
 1393        DECLARE P FIXED, I FIXED;                                                   ID_LOOKUP
 1394        CHAR_TEMP = VAR (P);                                                        ID_LOOKUP
 1395        I = HASH (HASHER (CHAR_TEMP));                                              ID_LOOKUP
 1396        DO WHILE I \= -1;                                                           ID_LOOKUP
 1397           IDCOMPARES = IDCOMPARES + 1;                                             ID_LOOKUP C16 = -1
 1398           IF SYT(I) = CHAR_TEMP THEN                                               ID_LOOKUP
 1399              DO;                                                                   ID_LOOKUP
 1400                 FIXL (P) = I;                                                      ID_LOOKUP
 1401                 CNT (P) = 0;        /* INITIALIZE SUBSCRIPT COUNT */               ID_LOOKUP
 1402                 TYPE (P) = VARIABLE;                                               ID_LOOKUP
 1403                 IF SYTYPE (I) = SPECIAL THEN                                       ID_LOOKUP
 1404                    FIXV (P) = SYTLOC (I);    /* BUILTIN FUNCTION */                ID_LOOKUP
 1405                 ELSE                                                               ID_LOOKUP
 1406                    FIXV (P) = 0;                                                   ID_LOOKUP
 1407                 INX (P) = 0;       /* LOCATION OF INDEX */                         ID_LOOKUP
 1408                 REG(P) = 0;                                                        ID_LOOKUP
 1409                 SYTCO (I) = SYTCO (I) + 1;                                         ID_LOOKUP
 1410                 RETURN;                                                            ID_LOOKUP
 1411              END;                                                                  ID_LOOKUP
 1412           I = PTR (I);                                                             ID_LOOKUP
 1413        END;                                                                        ID_LOOKUP
 1414        FIXL (P) = -1;              /* IDENTIFIER NOT FOUND */                      ID_LOOKUP
 1415  END ID_LOOKUP;                                                                    ID_LOOKUP

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9549     DATA   1393      10
P               FIXED      9548     DATA   1387       9
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 47
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1416  UNDECLARED_ID:                                                                   *
 1417     PROCEDURE (P);                                                                *
 1418        /* ISSUES AN ERROR MESSAGE FOR UNDECLARED IDENTIFIERS AND                   UNDECLARED_ID
 1419           ENTERS THEM WITH DEFAULT TYPE IN THE SYMBOL TABLE                        UNDECLARED_ID
 1420       */                                                                           UNDECLARED_ID
 1421        DECLARE P FIXED;                                                            UNDECLARED_ID
 1422        CALL ERROR ('UNDECLARED IDENTIFIER: ' ^^ VAR (P), 0);                       UNDECLARED_ID
 1423        CALL EMITDATAWORD (0);                                                      UNDECLARED_ID
 1424        FIXL (P) = ENTER (VAR (P), FIXEDTYPE, DP-1, 1);                             UNDECLARED_ID
 1425        CNT (P) = 0;                                                                UNDECLARED_ID
 1426        FIXV (P) = 0;                                                               UNDECLARED_ID
 1427        INX (P) = 0;                                                                UNDECLARED_ID
 1428        SYTCO (NDECSY) = 1;            /* COUNT FIRST REFERENCE */                  UNDECLARED_ID
 1429        SYTCARD (NDECSY) = -1;         /* FLAG UNDECLARED IDENTIFIER */             UNDECLARED_ID
 1430        TYPE (P) = VARIABLE;                                                        UNDECLARED_ID
 1431  END UNDECLARED_ID;                                                                UNDECLARED_ID

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
P               FIXED      9551     DATA   1417       7
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 48
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1432   /*                                                                              *
 1433          A R I T H E M E T I C   P R O C E D U R E S                              *
 1434   */                                                                              *
 1435  CLEARARS:                                                                        *
 1436     PROCEDURE;                                                                    *
 1437        /* FREE ALL THE TEMPROARY ARITHEMETIC REGISTERS */                          CLEARARS
 1438        DO I = 0 TO 11;                                                             CLEARARS
 1439           ACC(I) = AVAIL;                                                          CLEARARS C17 = 11
 1440        END;                                                                        CLEARARS
 1441  END CLEARARS;                                                                     CLEARARS
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 49
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1442  FINDAR:                                                                          *
 1443     PROCEDURE;                                                                    *
 1444         DECLARE I FIXED;                                                           FINDAR
 1445        /* GET A TEMPORARY ARITHEMETIC REGISTER */                                  FINDAR
 1446        IF TARGET_REGISTER > -1 THEN                                                FINDAR
 1447           IF ACC (TARGET_REGISTER) = AVAIL THEN                                    FINDAR
 1448              DO;                                                                   FINDAR
 1449                 ACC (TARGET_REGISTER) = BUSY;                                      FINDAR
 1450                 RETURN TARGET_REGISTER;                                            FINDAR
 1451              END;                                                                  FINDAR
 1452        DO I = 1 TO 11;                                                             FINDAR
 1453           IF ACC(I) = AVAIL THEN                                                   FINDAR
 1454              DO;                                                                   FINDAR
 1455                 ACC(I) = BUSY;                                                     FINDAR
 1456                 RETURN (I);                                                        FINDAR
 1457              END;                                                                  FINDAR
 1458        END;                                                                        FINDAR
 1459        CALL ERROR ('USED ALL ACCUMULATORS', 0);                                    FINDAR
 1460        RETURN (0);                                                                 FINDAR
 1461  END FINDAR;                                                                       FINDAR

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9559     DATA   1444       4
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 50
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1462  MOVESTACKS:                                                                      *
 1463     PROCEDURE (F, T);                                                             *
 1464        DECLARE F FIXED, T FIXED;                                                   MOVESTACKS
 1465        /* MOVE ALL COMPILER STACKS DOWN FROM F TO T */                             MOVESTACKS
 1466        TYPE (T) = TYPE (F);                                                        MOVESTACKS
 1467        REG (T) = REG (F);                                                          MOVESTACKS
 1468        CNT (T) = CNT (F);                                                          MOVESTACKS
 1469        VAR (T) = VAR (F);                                                          MOVESTACKS
 1470        FIXL (T) = FIXL (F);                                                        MOVESTACKS
 1471        FIXV (T) = FIXV (F);                                                        MOVESTACKS
 1472        INX (T) = INX (F);                                                          MOVESTACKS
 1473        PPSAVE (T) = PPSAVE (F);                                                    MOVESTACKS
 1474  END MOVESTACKS;                                                                   MOVESTACKS

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
F               FIXED      9566     DATA   1463       8
T               FIXED      9567     DATA   1463       8
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 51
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1475  FORCEADDRESS:                                                                    *
 1476     PROCEDURE(SP);                                                                *
 1477        /* GENERATES THE ADDRESS OF <VARIABLE> IN THE ANALYSIS STACK                FORCEADDRESS
 1478           AT SP.                                                                   FORCEADDRESS
 1479        */                                                                          FORCEADDRESS
 1480        DECLARE SP FIXED, J FIXED, R FIXED;                                         FORCEADDRESS
 1481        R = FINDAR;                                                                 FORCEADDRESS
 1482        J = FIXL(SP);                                                               FORCEADDRESS
 1483        CALL EMITINST (MOVEI,R,0,SYTLOC(J),0,SYTSEG(J));                            FORCEADDRESS
 1484        REG(J) = R;                                                                 FORCEADDRESS
 1485  END FORCEADDRESS;                                                                 FORCEADDRESS

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
J               FIXED      9569     DATA   1480       4
R               FIXED      9570     DATA   1480       3
SP              FIXED      9568     DATA   1476       1
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 52
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1486  SETINIT:                                                                         *
 1487     PROCEDURE;                                                                    *
 1488        /* PLACES INITIAL VALUES INTO DATA AREA */                                  SETINIT
 1489        DECLARE TMIIIL CHARACTER INITIAL ('TOO MANY ITEMS IN INITIAL LIST');        SETINIT
 1490        IF ITYPE = CHRTYPE THEN                                                     SETINIT
 1491           DO;                                                                      SETINIT
 1492              IF DSP < NEWDSP THEN                                                  SETINIT
 1493                 DO;                                                                SETINIT
 1494                    IF TYPE (MPP1) \= CHRTYPE THEN S = FIXV (MPP1);                 SETINIT
 1495                    ELSE S = VAR (MPP1);     /* THE STRING */                       SETINIT
 1496                    I = LENGTH (S);                                                 SETINIT
 1497                    IF I = 0 THEN                                                   SETINIT
 1498                       CALL EMITDESC (0,0);                                         SETINIT
 1499                    ELSE                                                            SETINIT
 1500                       DO;                                                          SETINIT
 1501                          CALL EMITDESC (I, DPOFFSET+SHL(DP,2));                    SETINIT
 1502                          DO J = 0 TO I - 1;                                        SETINIT
 1503                             CALL EMITBYTE (BYTE (S, J));                           SETINIT
 1504                          END;                                                      SETINIT
 1505                        END;                                                        SETINIT
 1506                 END;                                                               SETINIT
 1507              ELSE CALL ERROR (TMIIIL,0);                                           SETINIT
 1508           END;                                                                     SETINIT
 1509        ELSE                                                                        SETINIT
 1510           IF TYPE (MPP1) \= CONSTANT THEN                                          SETINIT
 1511              CALL ERROR ('ILLEGAL CONSTANT IN INITIAL LIST',0);                    SETINIT
 1512           ELSE                                                                     SETINIT
 1513              IF ITYPE = FIXEDTYPE THEN                                             SETINIT
 1514                 DO;                                                                SETINIT
 1515                 IF DP < NEWDP THEN CALL EMITDATAWORD (FIXV(MPP1));                 SETINIT
 1516                 ELSE CALL ERROR (TMIIIL,0);                                        SETINIT
 1517                 END;                                                               SETINIT
 1518              ELSE   /* MUST BE BYTETYPE */                                         SETINIT
 1519                 IF DP < NEWDP ^ (DP = NEWDP & DPOFFSET < NEWDPOFFSET) THEN         SETINIT
 1520                    CALL EMITBYTE(FIXV(MPP1));                                      SETINIT
 1521                 ELSE CALL ERROR (TMIIIL,0);                                        SETINIT
 1522  END SETINIT;                                                                      SETINIT

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
TMIIIL          CHARACTER   818   STRING   1489       3
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 53
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1523  SAVE_ACS:                                                                        *
 1524     PROCEDURE (N);                                                                *
 1525        /* GENERATE CODE TO SAVE BUSY ACS, UP TO AC-N */                            SAVE_ACS
 1526        DECLARE N FIXED;                                                            SAVE_ACS
 1527        DECLARE I FIXED;                                                            SAVE_ACS
 1528        DO I = 1 TO N;                                                              SAVE_ACS
 1529           IF (ACC(I) = BUSY) THEN CALL EMITINST (PUSH,15,0,I,0,0);                 SAVE_ACS
 1530        END;                                                                        SAVE_ACS
 1531  END SAVE_ACS;                                                                     SAVE_ACS

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9589     DATA   1527       3
N               FIXED      9588     DATA   1524       1
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 54
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1532  RESTORE_ACS:                                                                     *
 1533     PROCEDURE (N);                                                                *
 1534        /* GENERATE CODE TO RESTORE BUSY ACS, UP TO AC-N  */                        RESTORE_ACS
 1535        DECLARE N FIXED;                                                            RESTORE_ACS
 1536        DECLARE I FIXED, J FIXED;                                                   RESTORE_ACS
 1537        DO I = 1 TO N;                                                              RESTORE_ACS
 1538           J = N - I + 1;                                                           RESTORE_ACS
 1539           IF (ACC(J) = BUSY) THEN CALL EMITINST (POP,15,0,J,0,0);                  RESTORE_ACS
 1540        END;                                                                        RESTORE_ACS
 1541  END RESTORE_ACS;                                                                  RESTORE_ACS

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9592     DATA   1536       2
J               FIXED      9593     DATA   1536       3
N               FIXED      9591     DATA   1533       2
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 55
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1542  PROC_START:                                                                      *
 1543     PROCEDURE;                                                                    *
 1544        /* GENERATES CODE FOR THE HEAD OF A PROCEDURE */                            PROC_START
 1545        PPSAVE(MP) = FINDLABEL;           /* SOMETHING TO GOTO */                   PROC_START
 1546        CALL EMITINST (JRST,0,0,PPSAVE(MP),0,4); /* GO AROUND PROC */               PROC_START
 1547        IF SYTSEG(FIXL(MP)) = 4 THEN CALL EMITLABEL(SYTLOC(FIXL(MP)),4);            PROC_START
 1548        SYTSEG(FIXL(MP)) = 2;                                                       PROC_START
 1549        SYTLOC(FIXL(MP)) = PP;            /* ADDR OF PROC */                        PROC_START
 1550  END PROC_START;                                                                   PROC_START
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 56
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1551  TDECLARE:                                                                        *
 1552     PROCEDURE (DIM);                                                              *
 1553     /* ALLOCATES STORAGE FOR IDENTIFIERS IN DECLARATION */                         TDECLARE
 1554        DECLARE DIM FIXED;                                                          TDECLARE
 1555        DECLARE I   FIXED;                                                          TDECLARE
 1556     ALLOCATE:                                                                      TDECLARE
 1557        PROCEDURE (P, DIM);                                                         TDECLARE
 1558           /* ALLOCATES STORAGE FOR THE IDENTIFIER AT P IN THE ANALYSIS             ALLOCATE
 1559              STACK WITH DIMENSION DIM                                              ALLOCATE
 1560           */                                                                       ALLOCATE
 1561           DECLARE P FIXED, DIM FIXED, J FIXED, K FIXED;                            ALLOCATE
 1562           DIM = DIM + 1;                    /* ACTUAL NUMBER OF ITEMS */           ALLOCATE
 1563           DO CASE TYPE (P);                                                        ALLOCATE
 1564              ;    /*  CASE 0 -- DUMMY */                                           ALLOCATE CASE 0.
 1565              ;    /*  CASE 1 -- LABEL TYPE */                                      ALLOCATE CASE 1.
 1566              ;    /*  CASE 2 -- ACCUMULATOR */                                     ALLOCATE CASE 2.
 1567              ;    /*  CASE 3 -- VARIABLE */                                        ALLOCATE CASE 3.
 1568              ;    /*  CASE 4 -- CONSTANT */                                        ALLOCATE CASE 4.
 1569              ;    /*  CASE 5 -- CONDITION */                                       ALLOCATE CASE 5.
 1570              DO;   /* CASE 6 -- CHRTYPE */                                         ALLOCATE CASE 6.
 1571                 J = DSP; K = 3;                                                    ALLOCATE
 1572                 NEWDSP = DSP + DIM;                                                ALLOCATE
 1573              END;                                                                  ALLOCATE
 1574              DO;  /*  CASE 7 -- FIXEDTYPE */                                       ALLOCATE CASE 7.
 1575                 IF DPOFFSET > 0 THEN                                               ALLOCATE
 1576                    DO;                                                             ALLOCATE
 1577                       CALL FLUSH_DATACARD;                                         ALLOCATE
 1578                       OLDDP = DP;                                                  ALLOCATE
 1579                       OLDDPOFFSET = 0;                                             ALLOCATE
 1580                    END;                                                            ALLOCATE
 1581                 J = DP; K = 1;                                                     ALLOCATE
 1582                 NEWDP = DP + DIM; NEWDPOFFSET = 0;                                 ALLOCATE
 1583              END;                                                                  ALLOCATE
 1584              DO;  /*  CASE 8 -- BYTETYPE */                                        ALLOCATE CASE 8.
 1585                 IF DPOFFSET > 0 THEN                                               ALLOCATE
 1586                    IF I = 1 THEN                                                   ALLOCATE
 1587                       DO;                                                          ALLOCATE
 1588                          CALL FLUSH_DATACARD;                                      ALLOCATE
 1589                          OLDDP = DP; OLDDPOFFSET = 0;                              ALLOCATE
 1590                       END;                                                         ALLOCATE
 1591                    ELSE                                                            ALLOCATE
 1592                       DO;                                                          ALLOCATE
 1593                          DP = DP + 1; DPOFFSET = 0;                                ALLOCATE
 1594                       END;                                                         ALLOCATE
 1595                 NEWDPOFFSET = DIM MOD 4;                                           ALLOCATE
 1596                 NEWDP = DP + DIM/4;                                                ALLOCATE
 1597                 J = DP; K = 1;                                                     ALLOCATE
 1598              END;                                                                  ALLOCATE
 1599              DO;  /*  CASE 9 -- FORWARDTYPE */                                     ALLOCATE CASE 9.
 1600                 J = FINDLABEL; K = 4;                                              ALLOCATE
 1601                 NEWDP = DP; NEWDPOFFSET = DPOFFSET; /* COPY OLD POINTERS  */       ALLOCATE
 1602              END;                                                                  ALLOCATE
 1603              ;    /*  CASE 10 -- DESCRIPT */                                       ALLOCATE CASE 10.
 1604              ;    /*  CASE 11 -- SPECIAL */                                        ALLOCATE CASE 11.
 1605              ;    /*  CASE 12 -- FORWARDCALL */                                    ALLOCATE CASE 12.
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 57
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1606              ;    /*  CASE 13 -- PROCTYPE */                                       ALLOCATE CASE 13.
 1607              ;    /*  CASE 14 -- CHARPROCTYPE */                                   ALLOCATE CASE 14.
 1608           END; /* CASE ON TYPE (P) */                                              ALLOCATE CASE 15.
 1609           SYTYPE (FIXL(P)) = TYPE (P);                                             ALLOCATE
 1610           SYTLOC (FIXL (P)) = J;                                                   ALLOCATE
 1611           SYTSEG (FIXL (P)) = K;                                                   ALLOCATE
 1612     END ALLOCATE;                                                                  ALLOCATE

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
DIM             FIXED      9598     DATA   1557       6
J               FIXED      9599     DATA   1561       5
K               FIXED      9600     DATA   1561       5
P               FIXED      9597     DATA   1557       5
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 58
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1613                                                                                    TDECLARE
 1614        OLDDP = DP;                                                                 TDECLARE
 1615        OLDDSP = DSP;                                                               TDECLARE
 1616        OLDDPOFFSET = DPOFFSET;                                                     TDECLARE
 1617        TYPE(MP) = TYPE(SP);                                                        TDECLARE
 1618        CASEP = FIXL(MP);                                                           TDECLARE
 1619        DO I = 1 TO INX(MP);                                                        TDECLARE
 1620           FIXL(MP) = CASESTACK(CASEP+I); /* SYMBOL TABLE POINTER */                TDECLARE
 1621           CALL ALLOCATE (MP,DIM);                                                  TDECLARE
 1622           DP = NEWDP;                                                              TDECLARE
 1623           DSP = NEWDSP;                                                            TDECLARE
 1624           DPOFFSET = NEWDPOFFSET;                                                  TDECLARE
 1625           END;                                                                     TDECLARE
 1626        DP = OLDDP;                                                                 TDECLARE
 1627        DSP = OLDDSP;                                                               TDECLARE
 1628        DPOFFSET = OLDDPOFFSET;                                                     TDECLARE
 1629  END TDECLARE;                                                                     TDECLARE

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
ALLOCATE        PROCEDURE  3520  PROGRAM   1556       1
  PARAMETER  1  FIXED      9597     DATA   1557       6
  PARAMETER  2  FIXED      9598     DATA   1557       7
DIM             FIXED      9595     DATA   1552       1
I               FIXED      9596     DATA   1555       3
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 59
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1630  CHECK_STRING_OVERFLOW:                                                           *
 1631     PROCEDURE;                                                                    *
 1632        /* GENERATE A CHECK TO SEE IF COMPACTIFY NEEDS TO BE CALLED */              CHECK_STRING_OVERFLOW
 1633        CALL EMITINST (PUSHJ,15,0,STRING_CHECK,0,2);                                CHECK_STRING_OVERFLOW
 1634  END CHECK_STRING_OVERFLOW;                                                        CHECK_STRING_OVERFLOW
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 60
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1635  CALLSUB:PROCEDURE (SL,F,P);                                                      *
 1636        /* GENERATES CODE TO CALL A FUNCTION OR PROCEDURE AT SL                     CALLSUB
 1637           ALSO DOES HOUSEKEEPING FOR RETURN VALUES                                 CALLSUB
 1638        */                                                                          CALLSUB
 1639        DECLARE SL FIXED, F FIXED, P FIXED;                                         CALLSUB
 1640        CALL SAVE_ACS (11);                                                         CALLSUB
 1641        CALL EMITINST (PUSHJ,15,0,SL,0,SYTSEG(FIXL(P)));                            CALLSUB
 1642        CALL RESTORE_ACS (11);                                                      CALLSUB
 1643        IF F = 1 THEN                                                               CALLSUB
 1644           DO;  /* MOVE RETURNED VALUE FROM REGISTER ZERO */                        CALLSUB
 1645              I = FINDAR;                                                           CALLSUB
 1646              IF I \= 0 THEN CALL EMITINST (MOVE,I,0,0,0,0);                        CALLSUB
 1647              TYPE(P) = ACCUMULATOR;                                                CALLSUB
 1648              REG(P) = I;                                                           CALLSUB
 1649              ACC(I) = BUSY;                                                        CALLSUB
 1650              STILLINZERO = I;                                                      CALLSUB
 1651           END;                                                                     CALLSUB
 1652  END CALLSUB;                                                                      CALLSUB

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
F               FIXED      9603     DATA   1635       1
P               FIXED      9604     DATA   1635       3
SL              FIXED      9602     DATA   1635       1
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 61
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1653  BACKUP:                                                                          *
 1654     PROCEDURE;                                                                    *
 1655           CODE_FULL(CODE_HEAD) = FALSE;                                            BACKUP
 1656           CODE_HEAD = (CODE_HEAD-1) & 3;                                           BACKUP
 1657           INSTRUCT(MOVE) = INSTRUCT(MOVE) -1;                                      BACKUP
 1658           PP = PP - 1;                                                             BACKUP
 1659           STILLINZERO = 0;                                                         BACKUP
 1660           IF CONTROL(BYTE('E')) THEN                                               BACKUP
 1661              CALL PRINTLINE (BACKMSG,-1);                                          BACKUP
 1662     END BACKUP;                                                                    BACKUP
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 62
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1663  DELETE_MOVE:                                                                     *
 1664     PROCEDURE (P,OP,AC,IND,OPERAND,INDEX,RELOC);                                  *
 1665     /*  CHECK STILLINZERO FLAG TO SEE IF THE DATUM ABOUT TO                        DELETE_MOVE
 1666          BE MOVED IS STILL IN REGISTER ZERO.  IF SO, THEN DELETE                   DELETE_MOVE
 1667          THE LAST INSTRUCTION GENERATED (IF A "MOVE"),                             DELETE_MOVE
 1668          AND MOVE IT DIRECTLY FROM 0 TO THE DESRIED DEST.                          DELETE_MOVE
 1669          THIS IS DESIGNED TO ELIMINATE MOST EXTRA MOVES                            DELETE_MOVE
 1670          OF FUNCTION RESULTS. */                                                   DELETE_MOVE
 1671        DECLARE P FIXED;                                                            DELETE_MOVE
 1672        DECLARE OP FIXED, AC FIXED, IND FIXED, OPERAND FIXED,                       DELETE_MOVE
 1673             INDEX FIXED, RELOC FIXED;                                              DELETE_MOVE
 1674        IF STILLINZERO \= 0 THEN                                                    DELETE_MOVE
 1675           DO;                                                                      DELETE_MOVE
 1676              IF OP = MOVEM & STILLINZERO = AC THEN                                 DELETE_MOVE
 1677                 DO;                                                                DELETE_MOVE
 1678                    CALL BACKUP;                                                    DELETE_MOVE
 1679                    ACC(REG(P)) = AVAIL;                                            DELETE_MOVE
 1680                    REG(P) = 0;                                                     DELETE_MOVE
 1681                    AC = 0;                                                         DELETE_MOVE
 1682                 END;                                                               DELETE_MOVE
 1683              ELSE IF OP = MOVE  & STILLINZERO = OPERAND                            DELETE_MOVE
 1684                                 & (IND + INDEX + RELOC) = 0 THEN                   DELETE_MOVE
 1685                 DO;                                                                DELETE_MOVE
 1686                    CALL BACKUP;                                                    DELETE_MOVE
 1687                    ACC(REG(P)) = AVAIL;                                            DELETE_MOVE
 1688                    REG(P) = 0;                                                     DELETE_MOVE
 1689                    OPERAND = 0;                                                    DELETE_MOVE
 1690                 END;                                                               DELETE_MOVE
 1691           END;                                                                     DELETE_MOVE
 1692        CALL EMITINST (OP,AC,IND,OPERAND,INDEX,RELOC);                              DELETE_MOVE
 1693     END DELETE_MOVE;                                                               DELETE_MOVE

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
AC              FIXED      9607     DATA   1664       3
IND             FIXED      9608     DATA   1664       2
INDEX           FIXED      9610     DATA   1664       2
OP              FIXED      9606     DATA   1664       3
OPERAND         FIXED      9609     DATA   1664       3
P               FIXED      9605     DATA   1664       4
RELOC           FIXED      9611     DATA   1664       2
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 63
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1694  EMIT_INLINE:                                                                     *
 1695     PROCEDURE (FLAG);                                                             *
 1696     /* GENERATE AN ARBITRARY INSTRUCTION SPECIFIED BY PROGRAMMER */                EMIT_INLINE
 1697        DECLARE FLAG BIT(1);                                                        EMIT_INLINE
 1698        DECLARE FL FIXED;                                                           EMIT_INLINE
 1699        DECLARE INST(5) FIXED;                                                      EMIT_INLINE
 1700        DECLARE BINLM CHARACTER INITIAL ('IMPROPER ARGUMENT TO INLINE');            EMIT_INLINE
 1701        IF CNT(MP) < 5 THEN                                                         EMIT_INLINE
 1702           DO;                                                                      EMIT_INLINE
 1703              IF TYPE(MPP1) = CONSTANT THEN INST(CNT(MP)-1) = FIXV(MPP1);           EMIT_INLINE
 1704              ELSE CALL ERROR (BINLM,1);                                            EMIT_INLINE
 1705              IF FLAG THEN CALL ERROR (BINLM,1);                                    EMIT_INLINE
 1706           END;                                                                     EMIT_INLINE
 1707        ELSE IF CNT(MP) = 5 THEN                                                    EMIT_INLINE
 1708           DO;                                                                      EMIT_INLINE
 1709              IF TYPE(MPP1) = CONSTANT THEN                                         EMIT_INLINE
 1710                 DO;                                                                EMIT_INLINE
 1711                    INST(4) = FIXV(MPP1);                                           EMIT_INLINE
 1712                    INST(5) = 0;                                                    EMIT_INLINE
 1713                 END;                                                               EMIT_INLINE
 1714              ELSE IF TYPE(MPP1) = VARIABLE THEN                                    EMIT_INLINE
 1715                 DO;                                                                EMIT_INLINE
 1716                    FL = FIXL(MPP1);                                                EMIT_INLINE
 1717                    INST(4) = SYTLOC(FL);                                           EMIT_INLINE
 1718                    INST(5) = SYTSEG(FL);                                           EMIT_INLINE
 1719                 END;                                                               EMIT_INLINE
 1720              ELSE CALL ERROR (BINLM,1);                                            EMIT_INLINE
 1721              CALL EMITINST (INST(0),INST(1),INST(2),INST(4),INST(3),INST(5));      EMIT_INLINE
 1722              REG(MP) = INST(1);                                                    EMIT_INLINE
 1723              TYPE(MP) = ACCUMULATOR;                                               EMIT_INLINE
 1724           END;                                                                     EMIT_INLINE
 1725        ELSE CALL ERROR (BINLM,1);  /* TOO MANY ARGS TO INLINE */                   EMIT_INLINE
 1726     END EMIT_INLINE;                                                               EMIT_INLINE

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
BINLM           CHARACTER   820   STRING   1700       4
FL              FIXED      9613     DATA   1698       3
FLAG            BIT (9)    9612     DATA   1695       1
INST            FIXED      9614     DATA   1699      12
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 64
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1727  LIBRARY_CALL:   PROCEDURE (RESULT, CODE, MP, SP);                                *
 1728     /*                                                                             LIBRARY_CALL
 1729     GENERATE THE CODE FOR A CALL TO THE RUN-TIME ROUTINES.                         LIBRARY_CALL
 1730     */                                                                             LIBRARY_CALL
 1731     DECLARE RESULT FIXED,   /* 0 = L.H.S. OF = */                                  LIBRARY_CALL
 1732             CODE FIXED,     /* CODE FOR RUN-TIME ROUTINE*/                         LIBRARY_CALL
 1733             MP   FIXED,     /* STACK POINTER */                                    LIBRARY_CALL
 1734             SP   FIXED;     /* TOP OF STACK POINTER */                             LIBRARY_CALL
 1735     DECLARE R    FIXED;                                                            LIBRARY_CALL
 1736                                                                                    LIBRARY_CALL
 1737     IF RESULT = 0 THEN                                                             LIBRARY_CALL
 1738        DO;                                                                         LIBRARY_CALL
 1739           IF STILLINZERO = REG(SP) THEN                                            LIBRARY_CALL
 1740              DO;                                                                   LIBRARY_CALL
 1741                 CALL BACKUP;                                                       LIBRARY_CALL
 1742                 ACC(REG(SP)) = AVAIL;                                              LIBRARY_CALL
 1743                 REG(SP) = 0;                                                       LIBRARY_CALL
 1744              END;                                                                  LIBRARY_CALL
 1745           R = REG(SP);                                                             LIBRARY_CALL
 1746        END;                                                                        LIBRARY_CALL
 1747     ELSE                                                                           LIBRARY_CALL
 1748        R = FINDAR;                                                                 LIBRARY_CALL
 1749     IF CNT(MP) > 0 THEN CALL EMITINST (CODE+1,R,0,0,REG(MP),0);                    LIBRARY_CALL
 1750                    ELSE CALL EMITINST (CODE+1,R,0,0,0,0);                          LIBRARY_CALL
 1751     IF RESULT \= 0 THEN                                                            LIBRARY_CALL
 1752        DO;                                                                         LIBRARY_CALL
 1753           REG(MP) = R;                                                             LIBRARY_CALL
 1754           TYPE(MP) = RESULT;                                                       LIBRARY_CALL
 1755        END;                                                                        LIBRARY_CALL
 1756     END LIBRARY_CALL;                                                              LIBRARY_CALL

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
CODE            FIXED      9628     DATA   1727       2
MP              FIXED      9629     DATA   1727       4
R               FIXED      9631     DATA   1735       5
RESULT          FIXED      9627     DATA   1727       3
SP              FIXED      9630     DATA   1727       4
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 65
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1757  MONITOR_CALL:   PROCEDURE (CODE, P, JOBFLG);                                     *
 1758     /*                                                                             MONITOR_CALL
 1759     ROUTINE TO GENERATE CODE FOR PDP-10 CALLI UUO.                                 MONITOR_CALL
 1760     */                                                                             MONITOR_CALL
 1761     DECLARE CODE  FIXED,    /* CALLI NUMBER */                                     MONITOR_CALL
 1762            JOBFLG FIXED,  /* CLEAR AC FLAG */                                      MONITOR_CALL
 1763             P     FIXED;    /* STACK POINTER*/                                     MONITOR_CALL
 1764     DECLARE R     FIXED;    /* CONTAINS REGISTER TO USE */                         MONITOR_CALL
 1765                                                                                    MONITOR_CALL
 1766     R = FINDAR;                                                                    MONITOR_CALL
 1767     IF JOBFLG THEN CALL EMITINST (MOVEI,R,0,0,0,0);                                MONITOR_CALL
 1768     CALL EMITINST (CALLI,R,0,CODE,0,0);                                            MONITOR_CALL
 1769     REG(P) = R;                                                                    MONITOR_CALL
 1770     TYPE(P) = ACCUMULATOR;                                                         MONITOR_CALL
 1771  END MONITOR_CALL;                                                                 MONITOR_CALL

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
CODE            FIXED      9632     DATA   1757       1
JOBFLG          FIXED      9633     DATA   1757       1
P               FIXED      9634     DATA   1757       2
R               FIXED      9635     DATA   1764       4
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 66
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1772  FORCEACCUMULATOR:PROCEDURE (P);                                                  *
 1773        DECLARE P FIXED;                                                            FORCEACCUMULATOR
 1774        /* FORCE THE OPERAND AT P INTO AN ACCUMULATOR */                            FORCEACCUMULATOR
 1775        DECLARE SL FIXED, TP FIXED, SFP FIXED, SS FIXED;                            FORCEACCUMULATOR
 1776        DECLARE T1 CHARACTER;                                                       FORCEACCUMULATOR
 1777        DECLARE R FIXED;                                                            FORCEACCUMULATOR
 1778        COUNT_FORCE = COUNT_FORCE + 1;                                              FORCEACCUMULATOR
 1779        TP = TYPE(P);                                                               FORCEACCUMULATOR
 1780        IF TP = VARIABLE THEN                                                       FORCEACCUMULATOR
 1781            DO;                                                                     FORCEACCUMULATOR
 1782              SL = SYTLOC(FIXL(P));                                                 FORCEACCUMULATOR
 1783              SS = SYTSEG(FIXL(P));                                                 FORCEACCUMULATOR
 1784              SFP = SYTYPE(FIXL(P));                                                FORCEACCUMULATOR
 1785              IF SFP = PROCTYPE ^ SFP = FORWARDCALL ^ SFP = CHARPROCTYPE THEN       FORCEACCUMULATOR
 1786                 DO;                                                                FORCEACCUMULATOR
 1787                    CALL CALLSUB (SL,CALLTYPE,P);                                   FORCEACCUMULATOR
 1788                    R = FIXL(P)+CNT(P)+1;                                           FORCEACCUMULATOR
 1789                    IF LENGTH(SYT(R)) = 0 THEN                                      FORCEACCUMULATOR
 1790                       IF R <= NDECSY THEN                                          FORCEACCUMULATOR
 1791                          CALL PRINTLINE ('** WARNING--NOT ALL PARAMETERS SUPPLIED.',-1); FORCEACCUMULATOR
 1792                    IF SFP = CHARPROCTYPE THEN TYPE(P) = DESCRIPT;                  FORCEACCUMULATOR
 1793                 END;                                                               FORCEACCUMULATOR
 1794              ELSE IF SFP = SPECIAL THEN                                            FORCEACCUMULATOR
 1795                 DO;                                                                FORCEACCUMULATOR
 1796                    IF SL = 6 THEN                                                  FORCEACCUMULATOR
 1797                       DO;  /* BUILTIN FUNCTION INPUT */                            FORCEACCUMULATOR
 1798                          CALL CHECK_STRING_OVERFLOW;                               FORCEACCUMULATOR
 1799                          CALL EMITINST (MOVE,13,0,TSA,0,1);                        FORCEACCUMULATOR
 1800                          CALL LIBRARY_CALL (DESCRIPT,1,P,0);                       FORCEACCUMULATOR
 1801                          CALL EMITINST (MOVEM,13,0,TSA,0,1);                       FORCEACCUMULATOR
 1802                          CALL EMITINST (MOVEM,12,0,STR,0,3);                       FORCEACCUMULATOR
 1803                       END;                                                         FORCEACCUMULATOR
 1804                    ELSE IF SL = 8 THEN                                             FORCEACCUMULATOR
 1805                       DO;  /* BUILT-IN FUNCTION FILE */                            FORCEACCUMULATOR
 1806                        IF CNT(P) \= 1 THEN CALL ERROR (FILEMSG,0);                 FORCEACCUMULATOR
 1807                           ELSE CALL LIBRARY_CALL (ACCUMULATOR,5,P,0);              FORCEACCUMULATOR
 1808                       END;                                                         FORCEACCUMULATOR
 1809                    ELSE IF SL = 12 THEN                                            FORCEACCUMULATOR
 1810                       DO;  /* EXIT */                                              FORCEACCUMULATOR
 1811                          CALL EMITINST (4,0,0,0,0,0);                              FORCEACCUMULATOR
 1812                       END;                                                         FORCEACCUMULATOR
 1813                    ELSE IF SL = 13 THEN CALL MONITOR_CALL (19,P,0);                FORCEACCUMULATOR
 1814                    ELSE IF SL = 14 THEN CALL MONITOR_CALL (12,P,0);                FORCEACCUMULATOR
 1815                    ELSE IF SL = 19 THEN CALL MONITOR_CALL (23,P,1);                FORCEACCUMULATOR
 1816                    ELSE CALL ERROR ('ILLEGAL USE OF ' ^^ SYT(FIXL(P)),0);          FORCEACCUMULATOR
 1817                 END;                                                               FORCEACCUMULATOR
 1818              ELSE                                                                  FORCEACCUMULATOR
 1819                 DO;  /* FETCH THE VARIABLE (ALL ELSE HAS FAILED) */                FORCEACCUMULATOR
 1820                    IF SFP \= BYTETYPE THEN                                         FORCEACCUMULATOR
 1821                       DO;   /* WE DON'T HAVE TO DO CRAZY ADDRESSING */             FORCEACCUMULATOR
 1822                          R = FINDAR;     /* GET REG FOR RESULT */                  FORCEACCUMULATOR
 1823                          CALL EMITINST (MOVE,R,0,SL,INX(P),SS);                    FORCEACCUMULATOR
 1824                       END;                                                         FORCEACCUMULATOR
 1825                    ELSE                                                            FORCEACCUMULATOR
 1826                       DO;  /* BYTE ADDRESSING */                                   FORCEACCUMULATOR
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 67
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1827                          IF INX(P) \= 0 THEN                                       FORCEACCUMULATOR
 1828                             DO; /* GOOD GRIEF, SUBSCRIPTING OF BYTES */            FORCEACCUMULATOR
 1829                                R = FINDAR;                                         FORCEACCUMULATOR
 1830                                CALL EMITINST (MOVE,12,0,INX(P),0,0);               FORCEACCUMULATOR
 1831                                CALL EMITINST (LSH,12,0,    -2,0,0);                FORCEACCUMULATOR
 1832                                CALL EMITINST (ANDI,INX(P),0,3,0,0);                FORCEACCUMULATOR
 1833                                IF (SL ^ SS) \= 0 THEN CALL EMITINST (ADDI,12,0,SL,0,SS); FORCEACCUMULATOR
 1834                                CALL EMITINST (LDB,R,0,BYTEPTRS,INX(P),1);          FORCEACCUMULATOR
 1835                             END;                                                   FORCEACCUMULATOR
 1836                           ELSE                                                     FORCEACCUMULATOR
 1837                             DO; /* NON-SUBSCRIPTED BYTE */                         FORCEACCUMULATOR
 1838                                R = FINDAR;                                         FORCEACCUMULATOR
 1839                                CALL EMITINST (MOVEI,12,0,SL,0,SS);                 FORCEACCUMULATOR
 1840                                CALL EMITINST (LDB,R,0,BYTEPTRS,0,1);               FORCEACCUMULATOR
 1841                             END;                                                   FORCEACCUMULATOR
 1842                       END;                                                         FORCEACCUMULATOR
 1843                    IF SFP = CHRTYPE THEN TYPE(P) = DESCRIPT;                       FORCEACCUMULATOR
 1844                    ELSE TYPE(P) = ACCUMULATOR;                                     FORCEACCUMULATOR
 1845                    REG(P) = R;                                                     FORCEACCUMULATOR
 1846                    IF INX(P) \= 0 THEN ACC(INX(P)) = AVAIL;                        FORCEACCUMULATOR
 1847                 END;                                                               FORCEACCUMULATOR
 1848           END;                                                                     FORCEACCUMULATOR
 1849        ELSE IF TP = CONSTANT THEN                                                  FORCEACCUMULATOR
 1850           DO;  /* FETCH A CONSTANT INTO AN ACCUMULATOR */                          FORCEACCUMULATOR
 1851              R = FINDAR;                                                           FORCEACCUMULATOR
 1852              IF FIXV(P) < "20000" & FIXV(P) > - "20000" THEN                       FORCEACCUMULATOR
 1853                 CALL EMITINST (HRREI,R,0,FIXV(P),0,0);                             FORCEACCUMULATOR
 1854              ELSE                                                                  FORCEACCUMULATOR C18 = -131072
 1855                 DO;  /* PUT DOWN A CONSTANT AND PICK IT UP */                      FORCEACCUMULATOR
 1856                    CALL EMITCONSTANT (FIXV(P));                                    FORCEACCUMULATOR
 1857                    CALL EMITINST (MOVE,R,0,ADR,0,1);                               FORCEACCUMULATOR
 1858                 END;                                                               FORCEACCUMULATOR
 1859              REG(P) = R;                                                           FORCEACCUMULATOR
 1860              TYPE(P) = ACCUMULATOR;                                                FORCEACCUMULATOR
 1861           END;                                                                     FORCEACCUMULATOR
 1862        ELSE IF TP = CHRTYPE THEN                                                   FORCEACCUMULATOR
 1863           DO;  /* FETCH A DESCRIPTOR INTO AN ACCUMULATOR */                        FORCEACCUMULATOR
 1864              R = FINDAR;                                                           FORCEACCUMULATOR
 1865              TYPE(P) = DESCRIPT;                                                   FORCEACCUMULATOR
 1866              REG(P) = R;                                                           FORCEACCUMULATOR
 1867              T1 = VAR(P);                                                          FORCEACCUMULATOR
 1868              SL = LENGTH(T1);                                                      FORCEACCUMULATOR
 1869              IF SL = 0 THEN CALL EMITINST (MOVEI,R,0,0,0,0);                       FORCEACCUMULATOR
 1870              ELSE                                                                  FORCEACCUMULATOR
 1871                 DO;  /* GENERATE DESCRIPTOR AND STRING, THEN PICK IT UP */         FORCEACCUMULATOR
 1872                    CALL EMITINST (MOVE,R,0,DSP,0,3);                               FORCEACCUMULATOR
 1873                    CALL EMITDESC (SL,SHL(DP,2)+DPOFFSET);                          FORCEACCUMULATOR
 1874                    DO SL = 0 TO SL-1;                                              FORCEACCUMULATOR
 1875                       CALL EMITBYTE (BYTE(T1,SL));                                 FORCEACCUMULATOR
 1876                    END;                                                            FORCEACCUMULATOR
 1877                 END;                                                               FORCEACCUMULATOR
 1878           END;                                                                     FORCEACCUMULATOR
 1879        ELSE IF TP \= ACCUMULATOR THEN IF TP \= DESCRIPT THEN                       FORCEACCUMULATOR
 1880                 CALL ERROR ('FORCEACCUMULATOR FAILED ***',1);                      FORCEACCUMULATOR
 1881  END FORCEACCUMULATOR;                                                             FORCEACCUMULATOR
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 68
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
P               FIXED      9636     DATA   1772      34
R               FIXED      9641     DATA   1777      18
SFP             FIXED      9639     DATA   1775       8
SL              FIXED      9637     DATA   1775      18
SS              FIXED      9640     DATA   1775       5
T1              CHARACTER   821   STRING   1776       3
TP              FIXED      9638     DATA   1775       6
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 69
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1882  FORCEDESCRIPTOR:                                                                 *
 1883     PROCEDURE (P);                                                                *
 1884        /* GET A DESCRIPTOR FOR THE OPERAND P */                                    FORCEDESCRIPTOR
 1885        DECLARE P FIXED;                                                            FORCEDESCRIPTOR
 1886        CALL FORCEACCUMULATOR (P);                                                  FORCEDESCRIPTOR
 1887        IF TYPE (P) \= DESCRIPT THEN                                                FORCEDESCRIPTOR
 1888           DO; /* USE THE NUMBER TO DECIMAL STRING CONVERSION ROUTINE */            FORCEDESCRIPTOR
 1889              CALL DELETE_MOVE (P,MOVEM,REG(P),0,C,0,1);  /* SAVE AS C */           FORCEDESCRIPTOR
 1890              ACC(REG(P)) = AVAIL;                                                  FORCEDESCRIPTOR
 1891              CALL SAVE_ACS (1);                                                    FORCEDESCRIPTOR
 1892              CALL EMITINST (PUSHJ,15,0,NMBRENTRY,0,2);                             FORCEDESCRIPTOR
 1893              CALL RESTORE_ACS (1);                                                 FORCEDESCRIPTOR
 1894              ACC(REG(P)) = BUSY;                                                   FORCEDESCRIPTOR
 1895              IF REG(P) \= 0 THEN CALL EMITINST (MOVE,REG(P),0,0,0,0);              FORCEDESCRIPTOR
 1896              TYPE (P) = DESCRIPT;             /* IT IS NOW A STRING */             FORCEDESCRIPTOR
 1897              STILLINZERO = REG(P);                                                 FORCEDESCRIPTOR
 1898           END;                                                                     FORCEDESCRIPTOR
 1899  END FORCEDESCRIPTOR;                                                              FORCEDESCRIPTOR

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
P               FIXED      9665     DATA   1883      10
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 70
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1900  GENSTORE:PROCEDURE (MP, SP);                                                     *
 1901        DECLARE MP FIXED, SP FIXED;                                                 GENSTORE
 1902        /* GENERATE TYPE CONVERSION (IF NECESSARY) & STORAGE CODE --                GENSTORE
 1903           ALSO HANDLES OUTPUT ON THE LEFT OF THE REPLACEMENT OPERATOR              GENSTORE
 1904        */                                                                          GENSTORE
 1905        DECLARE SL FIXED, SFP FIXED, SS FIXED;                                      GENSTORE
 1906        COUNT_STORE = COUNT_STORE + 1;                                              GENSTORE
 1907        SL = SYTLOC(FIXL(MP));                                                      GENSTORE
 1908        SS = SYTSEG(FIXL(MP));                                                      GENSTORE
 1909        SFP = SYTYPE(FIXL(MP));                                                     GENSTORE
 1910        IF SFP = SPECIAL THEN                                                       GENSTORE
 1911           DO;                                                                      GENSTORE
 1912              IF SL = 7 THEN                                                        GENSTORE
 1913                 DO;  /* BUILTIN FUNCTION OUTPUT */                                 GENSTORE
 1914                    CALL FORCEDESCRIPTOR(SP);                                       GENSTORE
 1915                    CALL LIBRARY_CALL (0,2,MP,SP);                                  GENSTORE
 1916                 END;                                                               GENSTORE
 1917              ELSE IF SL = 8 THEN                                                   GENSTORE
 1918                 DO;   /* BUILTIN FUNCTION FILE */                                  GENSTORE
 1919                    IF CNT(MP) \= 1 THEN                                            GENSTORE
 1920                       CALL ERROR (FILEMSG,0);                                      GENSTORE
 1921                    CALL FORCEACCUMULATOR (SP);                                     GENSTORE
 1922                    CALL LIBRARY_CALL (0,6,MP,SP);                                  GENSTORE
 1923                 END;                                                               GENSTORE
 1924              ELSE IF SL = 20 THEN                                                  GENSTORE
 1925                 DO;    /* BUILT-IN FUNCTION  FILENAME */                           GENSTORE
 1926                    CALL FORCEDESCRIPTOR(SP);                                       GENSTORE
 1927                    CALL LIBRARY_CALL (0,7,MP,SP);                                  GENSTORE
 1928                 END;                                                               GENSTORE
 1929              ELSE CALL ERROR ('ILLEGAL USE OF ' ^^ SYT(FIXL(MP)),0);               GENSTORE
 1930           END;                                                                     GENSTORE
 1931        ELSE                                                                        GENSTORE
 1932           DO;                                                                      GENSTORE
 1933              IF SFP = CHRTYPE THEN                                                 GENSTORE
 1934                 DO;                                                                GENSTORE
 1935                    CALL FORCEDESCRIPTOR(SP);                                       GENSTORE
 1936                    CALL DELETE_MOVE (SP,MOVEM,REG(SP),0,SL,INX(MP),SS);            GENSTORE
 1937                 END;                                                               GENSTORE
 1938              ELSE IF TYPE(SP) = DESCRIPT ^ TYPE(SP) = CHRTYPE THEN                 GENSTORE
 1939                   CALL ERROR ('ASSIGNMENT REQUIRES ILLEGAL TYPE CONVERSION.',0);   GENSTORE
 1940              ELSE                                                                  GENSTORE
 1941                 DO;     /* FIXEDTYPE OR BYTETYPE */                                GENSTORE
 1942                    IF SFP = FIXEDTYPE THEN                                         GENSTORE
 1943                       DO;                                                          GENSTORE
 1944                       IF TYPE(SP) = CONSTANT & FIXV(SP) = 0 THEN                   GENSTORE
 1945                          CALL EMITINST(SETZM,0,0,SL,INX(MP),SS);                   GENSTORE
 1946                          ELSE                                                      GENSTORE
 1947                             DO;                                                    GENSTORE
 1948                                CALL FORCEACCUMULATOR(SP);                          GENSTORE
 1949                                CALL DELETE_MOVE (SP,MOVEM,REG(SP),0,SL,INX(MP),SS); GENSTORE
 1950                             END;                                                   GENSTORE
 1951                       END;                                                         GENSTORE
 1952                    ELSE                                                            GENSTORE
 1953                       DO;      /* MUST BE BYTETYPE */                              GENSTORE
 1954                          CALL FORCEACCUMULATOR(SP);                                GENSTORE
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 71
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1955                          IF INX(MP) \= 0 THEN                                      GENSTORE
 1956                             DO;  /* GOOD GRIEF, SUBSCRIPTING */                    GENSTORE
 1957                                 CALL EMITINST (MOVE,12,0,INX(MP),0,0);             GENSTORE
 1958                                 CALL EMITINST (LSH,12,0,    -2,0,0);               GENSTORE
 1959                                 CALL EMITINST (ANDI,INX(MP),0,3,0,0);              GENSTORE
 1960                                 IF (SL ^ SS) \= 0 THEN CALL EMITINST (ADDI,12,0,SL,0,SS); GENSTORE
 1961                                 CALL EMITINST (DPB,REG(SP),0,BYTEPTRS,INX(MP),1);  GENSTORE
 1962                             END;                                                   GENSTORE
 1963                          ELSE                                                      GENSTORE
 1964                             DO;                                                    GENSTORE
 1965                                 CALL EMITINST (MOVEI,12,0,SL,0,SS);                GENSTORE
 1966                                 CALL EMITINST (DPB,REG(SP),0,BYTEPTRS,0,1);        GENSTORE
 1967                             END;                                                   GENSTORE
 1968                       END;                                                         GENSTORE
 1969                 END;                                                               GENSTORE
 1970           END;                                                                     GENSTORE
 1971        ACC(INX(MP)) = AVAIL;                                                       GENSTORE
 1972        CALL MOVESTACKS (SP,MP);                                                    GENSTORE
 1973  END GENSTORE;                                                                     GENSTORE

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
MP              FIXED      9666     DATA   1900      17
SFP             FIXED      9669     DATA   1905       4
SL              FIXED      9668     DATA   1905      10
SP              FIXED      9667     DATA   1900      20
SS              FIXED      9670     DATA   1905       7
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 72
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1974  SHOULDCOMMUTE:PROCEDURE;                                                         *
 1975        IF TYPE(SP) = CONSTANT THEN RETURN (FALSE);                                 SHOULDCOMMUTE
 1976        IF TYPE(MP) = CONSTANT THEN RETURN (TRUE);                                  SHOULDCOMMUTE
 1977        IF TYPE(SP) = VARIABLE & SYTYPE(FIXL(SP)) = FIXEDTYPE THEN RETURN (FALSE);  SHOULDCOMMUTE
 1978        IF TYPE(MP) = VARIABLE & SYTYPE(FIXL(MP)) = FIXEDTYPE THEN RETURN (TRUE);   SHOULDCOMMUTE
 1979        RETURN FALSE;                                                               SHOULDCOMMUTE
 1980  END SHOULDCOMMUTE;                                                                SHOULDCOMMUTE
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 73
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1981  ARITHEMIT:PROCEDURE(OP,COMMUTATIVE);                                             *
 1982     DECLARE OP FIXED, COMMUTATIVE FIXED, TP FIXED;                                 ARITHEMIT
 1983     DECLARE AWASD CHARACTER INITIAL ('ARITHMETIC WITH A STRING DESCRIPTOR');       ARITHEMIT
 1984     /* EMIT AN INSTRUCTION FOR AN INFIX OPERATOR -- CONNECT MP & SP */             ARITHEMIT
 1985     COUNT_ARITH = COUNT_ARITH + 1;                                                 ARITHEMIT
 1986     TP = 0;                                                                        ARITHEMIT
 1987     IF COMMUTATIVE THEN                                                            ARITHEMIT
 1988        IF SHOULDCOMMUTE THEN                                                       ARITHEMIT
 1989           DO;                                                                      ARITHEMIT
 1990              TP = MP; MP = SP; SP = TP;                                            ARITHEMIT
 1991              IF OP >= CAM & OP <= CMPRHI THEN OP = COMPARESWAP(OP-CAM)+CAM;        ARITHEMIT
 1992           END;                                                                     ARITHEMIT
 1993     CALL FORCEACCUMULATOR(MP);  /* GET THE LEFT ONE INTO AN ACCUMULATOR */         ARITHEMIT
 1994     IF TYPE(MP) = DESCRIPT THEN CALL ERROR (AWASD,0);                              ARITHEMIT
 1995     ELSE IF TYPE(SP) = VARIABLE & SYTYPE(FIXL(SP)) = FIXEDTYPE THEN                ARITHEMIT
 1996        DO;  /* OPERATE FROM STORAGE */                                             ARITHEMIT
 1997           CALL EMITINST (OP,REG(MP),0,SYTLOC(FIXL(SP)),INX(SP),SYTSEG(FIXL(SP)));  ARITHEMIT
 1998           ACC(INX(SP)) = AVAIL;                                                    ARITHEMIT
 1999        END;                                                                        ARITHEMIT
 2000     ELSE IF TYPE(SP) = CONSTANT THEN                                               ARITHEMIT
 2001        DO;                                                                         ARITHEMIT
 2002           IF FIXV(SP) < "40000" & FIXV(SP) >= 0 THEN /* USE IMMEDIATE */           ARITHEMIT
 2003              DO;                                                                   ARITHEMIT
 2004                 IF OP >= CAM & OP <= CMPRHI THEN OP=OP-9; /* SOB CODE ORDER */     ARITHEMIT
 2005                    CALL EMITINST(OP+1,REG(MP),0,FIXV(SP),0,0);                     ARITHEMIT
 2006              END;                                                                  ARITHEMIT
 2007           ELSE                                                                     ARITHEMIT
 2008              DO;                                                                   ARITHEMIT
 2009                 CALL EMITCONSTANT (FIXV(SP));                                      ARITHEMIT
 2010                 CALL EMITINST (OP,REG(MP),0,ADR,0,1);                              ARITHEMIT
 2011              END;                                                                  ARITHEMIT
 2012        END;                                                                        ARITHEMIT
 2013     ELSE                                                                           ARITHEMIT
 2014         DO;                                                                        ARITHEMIT
 2015           CALL FORCEACCUMULATOR(SP);                                               ARITHEMIT
 2016           IF TYPE(SP) \= ACCUMULATOR THEN CALL ERROR (AWASD,0);                    ARITHEMIT
 2017           ELSE CALL EMITINST (OP,REG(MP),0,REG(SP),0,0);                           ARITHEMIT
 2018           ACC(REG(SP)) = AVAIL;                                                    ARITHEMIT
 2019        END;                                                                        ARITHEMIT
 2020     IF TP \= 0 THEN                                                                ARITHEMIT
 2021        DO;                                                                         ARITHEMIT
 2022           SP = MP; MP = TP;                                                        ARITHEMIT
 2023           CALL MOVESTACKS (SP,MP);                                                 ARITHEMIT
 2024        END;                                                                        ARITHEMIT
 2025  END ARITHEMIT;                                                                    ARITHEMIT

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
AWASD           CHARACTER   827   STRING   1983       2
COMMUTATIVE     FIXED      9687     DATA   1981       1
OP              FIXED      9686     DATA   1981      12
TP              FIXED      9688     DATA   1982       5
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 74
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2026  BOOLBRANCH:PROCEDURE (SP,MP);                                                    *
 2027     DECLARE SP FIXED, MP FIXED, R FIXED;                                           BOOLBRANCH
 2028     /* GENERATE A CONDITIONAL BRANCH FOR DO WHILE OR AN IF STATEMENT               BOOLBRANCH
 2029        PLACE THE ADDRESS OF THIS BRANCH IN FIXL(MP)                                BOOLBRANCH
 2030     */                                                                             BOOLBRANCH
 2031     IF STILLCOND \= 0 THEN                                                         BOOLBRANCH
 2032        DO;  /* WE HAVE NOT GENERATED CODE SINCE SETTING THE CONDITION */           BOOLBRANCH
 2033           /* REMOVE THE MOVEI =1 AND MOVEI =0 AROUND THE CAM? */                   BOOLBRANCH
 2034           CODE_HEAD = (CODE_HEAD-2) &3; /* BACK UP PTR */                          BOOLBRANCH
 2035           R = (CODE_HEAD + 1) & 3;                                                 BOOLBRANCH
 2036           CODE(CODE_HEAD) = CODE(R);                                               BOOLBRANCH
 2037           CODE_REL(CODE_HEAD) = CODE_REL(R);                                       BOOLBRANCH
 2038           CODE_PP(CODE_HEAD) = CODE_PP(R) -1;                                      BOOLBRANCH
 2039           CODE_RBITS(CODE_HEAD) = CODE_RBITS(R);                                   BOOLBRANCH
 2040           CODE_FULL(R) = FALSE;                                                    BOOLBRANCH
 2041           CODE_FULL(R+1&3) = FALSE;                                                BOOLBRANCH
 2042           PP = PP - 2;                                                             BOOLBRANCH
 2043           CODE(CODE_HEAD) = CODE(CODE_HEAD) ^^ ' P' ^^ PP-1;                       BOOLBRANCH
 2044           IF CONTROL(BYTE('E')) THEN                                               BOOLBRANCH
 2045              DO;                                                                   BOOLBRANCH
 2046                 CALL PRINTLINE (BACKMSG,-1);                                       BOOLBRANCH
 2047                 CALL PRINTLINE (CODEMSG ^^ CODE(CODE_HEAD),-1);                    BOOLBRANCH
 2048              END;                                                                  BOOLBRANCH
 2049           INSTRUCT(MOVEI) = INSTRUCT(MOVEI) - 2;                                   BOOLBRANCH
 2050           ACC(REG(SP)) = AVAIL;          /* FREE CONDITION REGISTER */             BOOLBRANCH
 2051           R = 4;                         /* JUMP ALWAYS */                         BOOLBRANCH
 2052        END;                                                                        BOOLBRANCH
 2053     ELSE                                                                           BOOLBRANCH
 2054        DO;                                                                         BOOLBRANCH
 2055           CALL FORCEACCUMULATOR(SP);                                               BOOLBRANCH
 2056           CALL EMITINST (ANDI,REG(SP),0,1,0,0);  /* TEST ONLY LOW ORDER BIT */     BOOLBRANCH
 2057           ACC(REG(SP)) = AVAIL;          /* FREE UP VARIABLE REGISTER */           BOOLBRANCH
 2058           R = 2;                         /* JUMP IF REGISTER ZERO */               BOOLBRANCH
 2059        END;                                                                        BOOLBRANCH
 2060     FIXL(MP) = FINDLABEL;                /* GET A NEW LABEL */                     BOOLBRANCH
 2061     CALL EMITINST (JUMP+R,REG(SP),0,FIXL(MP),0,4);                                 BOOLBRANCH
 2062  END BOOLBRANCH;                                                                   BOOLBRANCH

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
MP              FIXED      9699     DATA   2026       2
R               FIXED      9700     DATA   2027      10
SP              FIXED      9698     DATA   2026       5
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 75
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2063  SETLIMIT:                                                                        *
 2064     PROCEDURE;                                                                    *
 2065        /* SETS DO LOOP LIMIT FOR <ITERATION CONTROL> */                            SETLIMIT
 2066        IF TYPE (MPP1) = CONSTANT THEN                                              SETLIMIT
 2067           CALL EMITCONSTANT (FIXV(MPP1));                                          SETLIMIT
 2068        ELSE                                                                        SETLIMIT
 2069           DO;                                                                      SETLIMIT
 2070              CALL FORCEACCUMULATOR (MPP1);  /* GET LOOP LIMIT */                   SETLIMIT
 2071              CALL EMITDATAWORD (0);                                                SETLIMIT
 2072              ADR = DP - 1;                                                         SETLIMIT
 2073              CALL EMITINST(MOVEM,REG(MPP1),0,ADR,0,1); /* SAVE IT */               SETLIMIT
 2074              ACC(REG(MPP1)) = AVAIL;                                               SETLIMIT
 2075           END;                                                                     SETLIMIT
 2076        FIXV (MP) = ADR;                                                            SETLIMIT
 2077   END SETLIMIT;                                                                    SETLIMIT
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 76
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2078  STUFF_PARAMETER:                                                                 *
 2079     PROCEDURE;                                                                    *
 2080        /* GENERATE CODE TO SEND AN ACTUAL PARAMETER TO A PROCEDURE */              STUFF_PARAMETER
 2081        DECLARE (I,J) FIXED;                                                        STUFF_PARAMETER
 2082        I = FIXL (MP) + CNT (MP);  J = SYTLOC (I);                                  STUFF_PARAMETER
 2083        IF LENGTH (SYT(I)) = 0 THEN                                                 STUFF_PARAMETER
 2084           DO;                                                                      STUFF_PARAMETER
 2085              SYTCO (I) = SYTCO (I) + 1;  /* COUNT THE REFERENCE                */  STUFF_PARAMETER
 2086                 DO;                                                                STUFF_PARAMETER
 2087                    IF SYTYPE(I) = BYTETYPE THEN                                    STUFF_PARAMETER
 2088                      DO;                                                           STUFF_PARAMETER
 2089                         CALL FORCEACCUMULATOR(MPP1);                               STUFF_PARAMETER
 2090                         CALL EMITINST (MOVEI,12,0,J,0,SYTSEG(I));                  STUFF_PARAMETER
 2091                         CALL EMITINST (DPB,REG(MPP1),0,BYTEPTRS,0,1);              STUFF_PARAMETER
 2092                      END;                                                          STUFF_PARAMETER
 2093                    ELSE                                                            STUFF_PARAMETER
 2094                      DO;                                                           STUFF_PARAMETER
 2095                         IF TYPE(MPP1) = CONSTANT & FIXV(MPP1) = 0 THEN             STUFF_PARAMETER
 2096                            DO;                                                     STUFF_PARAMETER
 2097                               CALL EMITINST (SETZM,0,0,J,0,SYTSEG(I));             STUFF_PARAMETER
 2098                               RETURN;                                              STUFF_PARAMETER
 2099                            END;                                                    STUFF_PARAMETER
 2100                         CALL FORCEACCUMULATOR (MPP1);                              STUFF_PARAMETER
 2101                         CALL DELETE_MOVE (MPP1,MOVEM,REG(MPP1),0,J,0,SYTSEG(I));   STUFF_PARAMETER
 2102                      END;                                                          STUFF_PARAMETER
 2103                    ACC(REG(MPP1)) = AVAIL;                                         STUFF_PARAMETER
 2104                 END;                                                               STUFF_PARAMETER
 2105           END;                                                                     STUFF_PARAMETER
 2106        ELSE                                                                        STUFF_PARAMETER
 2107           CALL ERROR ('TOO MANY ACTUAL PARAMETERS', 1);                            STUFF_PARAMETER
 2108  END STUFF_PARAMETER;                                                              STUFF_PARAMETER

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9702     DATA   2081       9
J               FIXED      9703     DATA   2081       4
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 77
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2109  DIVIDE_CODE:PROCEDURE(T);                                                        *
 2110     DECLARE T FIXED, I FIXED;                                                      DIVIDE_CODE
 2111     /* EMIT CODE TO PERFORM A DIVIDE (T=1) OR MOD (T=0) */                         DIVIDE_CODE
 2112     /* FIND A FREE REGISTER PAIR FOR THE DIVIDEND */                               DIVIDE_CODE
 2113     IF TYPE(MP) = ACCUMULATOR THEN                                                 DIVIDE_CODE
 2114        DO;   /* WE MAY BE ABLE TO USE THE REGISTER TO THE RIGHT */                 DIVIDE_CODE
 2115           I = REG(MP);                                                             DIVIDE_CODE
 2116           IF ACC(I+1) = AVAIL THEN GOTO FITS;                                      DIVIDE_CODE
 2117        END;                                                                        DIVIDE_CODE
 2118     DO I = T TO 11;                                                                DIVIDE_CODE
 2119        IF ACC(I) = AVAIL THEN IF ACC(I+1) = AVAIL THEN GOTO FIT;                   DIVIDE_CODE
 2120     END;                                                                           DIVIDE_CODE
 2121     CALL ERROR ('NO FREE REGISTERS FOR DIVISION OR MOD.',0);                       DIVIDE_CODE
 2122     RETURN;                                                                        DIVIDE_CODE
 2123  FIT:                                                                              DIVIDE_CODE
 2124     TARGET_REGISTER = I;                                                           DIVIDE_CODE
 2125     CALL FORCEACCUMULATOR(MP);                                                     DIVIDE_CODE
 2126     TARGET_REGISTER = -1;                                                          DIVIDE_CODE
 2127     IF REG(MP) \= I THEN                                                           DIVIDE_CODE
 2128        DO;                                                                         DIVIDE_CODE
 2129           CALL EMITINST (MOVE,I,0,REG(MP),0,0);                                    DIVIDE_CODE
 2130           ACC(REG(MP)) = AVAIL;                                                    DIVIDE_CODE
 2131           REG(MP) = I;                                                             DIVIDE_CODE
 2132        END;                                                                        DIVIDE_CODE
 2133        ACC(I) = BUSY;                                                              DIVIDE_CODE
 2134   FITS:                                                                            DIVIDE_CODE
 2135     ACC(I+1) = BUSY;                                                               DIVIDE_CODE
 2136     CALL ARITHEMIT (IDIV,0);                                                       DIVIDE_CODE
 2137     IF T = 0 THEN                                                                  DIVIDE_CODE
 2138        DO;  /* MOD, SWITCH REGISTER TO POINT TO REMAINDER */                       DIVIDE_CODE
 2139           ACC(I) = AVAIL;                /* FREE QUOTIENT */                       DIVIDE_CODE
 2140           REG(MP) = I+1;                 /* POINT TO REMAINDER */                  DIVIDE_CODE
 2141        END;                                                                        DIVIDE_CODE
 2142     ELSE ACC(I+1) = AVAIL;               /* FREE REMAINDER */                      DIVIDE_CODE
 2143     IF REG(MP) =12 THEN                                                            DIVIDE_CODE
 2144        DO;  /* TRANSFER THE MOD REMAINDER FROM A SCRATCH REGISTER */               DIVIDE_CODE
 2145           I = FINDAR;                                                              DIVIDE_CODE
 2146           CALL EMITINST (MOVE,I,0,REG(MP),0,0);                                    DIVIDE_CODE
 2147           ACC(REG(MP)) = AVAIL;                                                    DIVIDE_CODE
 2148           REG(MP) = I;                                                             DIVIDE_CODE
 2149        END;                                                                        DIVIDE_CODE
 2150  END DIVIDE_CODE;                                                                  DIVIDE_CODE

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
FIT             LABEL      5434  PROGRAM   2119       1
FITS            LABEL      5465  PROGRAM   2116       1
I               FIXED      9712     DATA   2110      17
T               FIXED      9711     DATA   2109       2
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 78
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2151  SHIFT_CODE:                                                                      *
 2152     PROCEDURE (OP);                                                               *
 2153        DECLARE OP FIXED;                                                           SHIFT_CODE
 2154        /* GENERATE CODE FOR THE BUILTIN FUNCTIONS SHL AND SHR */                   SHIFT_CODE
 2155        /* OP: LEFT = 0, RIGHT = 1 */                                               SHIFT_CODE
 2156        SP = MPP1;                                                                  SHIFT_CODE
 2157        IF CNT (MP) \= 2 THEN                                                       SHIFT_CODE
 2158           CALL ERROR ('SHIFT REQUIRES TWO ARGUMENTS', 0);                          SHIFT_CODE
 2159        ELSE                                                                        SHIFT_CODE
 2160           IF TYPE (MPP1) = CONSTANT THEN                                           SHIFT_CODE
 2161              DO;                                                                   SHIFT_CODE
 2162                 IF OP = 1 THEN FIXV(MPP1) = -FIXV(MPP1);                           SHIFT_CODE
 2163                 CALL EMITINST(LSH,REG(MP),0,FIXV(MPP1),0,0);                       SHIFT_CODE
 2164              END;                                                                  SHIFT_CODE
 2165        ELSE                                                                        SHIFT_CODE
 2166           DO;                                                                      SHIFT_CODE
 2167              /* DO SHIFT WITH VARIABLE */                                          SHIFT_CODE
 2168              CALL FORCEACCUMULATOR(MPP1);                                          SHIFT_CODE
 2169              IF OP = 1 THEN                                                        SHIFT_CODE
 2170                    CALL EMITINST (MOVN,REG(MPP1),0,REG(MPP1),0,0);                 SHIFT_CODE
 2171              CALL EMITINST (LSH,REG(MP),0,0,REG(MPP1),0);                          SHIFT_CODE
 2172              ACC(REG(MPP1)) = AVAIL;                                               SHIFT_CODE
 2173           END;                                                                     SHIFT_CODE
 2174        TYPE(MP) = ACCUMULATOR;                                                     SHIFT_CODE
 2175  END SHIFT_CODE;                                                                   SHIFT_CODE

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
OP              FIXED      9723     DATA   2152       2
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 79
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2176  STRINGCOMPARE:                                                                   *
 2177     PROCEDURE;                                                                    *
 2178        /* GENERATES CODE TO COMPARE THE STRINGS AT SP AND MP.                      STRINGCOMPARE
 2179           COMPARISONS ARE DONE FIRST ON LENGTH, AND SECOND ON A                    STRINGCOMPARE
 2180           CHARACTER BY CHARACTER COMPARISON USING THE PDP-10 COLLATING             STRINGCOMPARE
 2181           SEQUENCE.                                                                STRINGCOMPARE
 2182        */                                                                          STRINGCOMPARE
 2183        CALL FORCEDESCRIPTOR (SP);                                                  STRINGCOMPARE
 2184        CALL DELETE_MOVE (SP,MOVEM,REG(SP),0,B,0,3);                                STRINGCOMPARE
 2185        ACC(REG(SP)) = AVAIL;                                                       STRINGCOMPARE
 2186        CALL FORCEDESCRIPTOR (MP);                                                  STRINGCOMPARE
 2187        CALL DELETE_MOVE (MP,MOVEM,REG(MP),0,A,0,3);                                STRINGCOMPARE
 2188        CALL SAVE_ACS (5);                                                          STRINGCOMPARE
 2189        CALL EMITINST (PUSHJ,15,0,STRCOMP,0,2); /* CALL STRING COMPARE */           STRINGCOMPARE
 2190        CALL RESTORE_ACS (5);                                                       STRINGCOMPARE
 2191        CALL EMITINST (MOVEI,REG(MP),0,1,0,0);                                      STRINGCOMPARE
 2192         CALL EMITINST (SKIP+INX(MPP1),0,0,0,0,0);                                  STRINGCOMPARE
 2193        CALL EMITINST (MOVEI,REG(MP),0,0,0,0);                                      STRINGCOMPARE
 2194        TYPE(MP) = ACCUMULATOR;                                                     STRINGCOMPARE
 2195        STILLCOND = INX(MPP1);                                                      STRINGCOMPARE
 2196  END STRINGCOMPARE;                                                                STRINGCOMPARE
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 80
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2197  SYMBOLDUMP:                                                                      *
 2198     PROCEDURE;                                                                    *
 2199        /* LIST THE SYMBOLS IN THE PROCEDURE THAT HAS JUST BEEN                     SYMBOLDUMP
 2200           COMPILED IF TOGGLE S IS ENABLED AND L IS ENABLED.                        SYMBOLDUMP
 2201        */                                                                          SYMBOLDUMP
 2202        DECLARE SUBTITLE_SAVE CHARACTER;                                            SYMBOLDUMP
 2203        DECLARE HEADING CHARACTER INITIAL ('TYPE       LOC   SEGMENT DEFINED REF COUNT'); SYMBOLDUMP
 2204        DECLARE SEG(4) CHARACTER INITIAL ('ABSOLUTE','    DATA',' PROGRAM',         SYMBOLDUMP
 2205                 '  STRING','   LABEL');                                            SYMBOLDUMP
 2206        DECLARE EXCHANGES FIXED, I FIXED, LMAX FIXED,                               SYMBOLDUMP
 2207           J FIXED, K FIXED, L FIXED, M FIXED, SYTSORT (SYTSIZE) FIXED;             SYMBOLDUMP
 2208        DECLARE BLANKS CHARACTER,                                                   SYMBOLDUMP
 2209                TAG    CHARACTER;                                                   SYMBOLDUMP
 2210                                                                                    SYMBOLDUMP
 2211     STRING_GT:                                                                     SYMBOLDUMP
 2212        PROCEDURE (A,B);                                                            SYMBOLDUMP
 2213           /* DO AN HONEST STRING COMPARISON:                                       STRING_GT
 2214              XPL CAN BE TRUSTED ONLY IF STRINGS ARE OF THE SAME LENGTH.            STRING_GT
 2215              IF LENGTHS DIFFER, LET XPL SEE ONLY THE SHORTER, AND THE              STRING_GT
 2216              MATCHING PART OF THE LONGER, AND ARRANGE COMPARISONS SO               STRING_GT
 2217              THAT RESULT IS RIGHT.   */                                            STRING_GT
 2218           DECLARE A CHARACTER,                                                     STRING_GT
 2219                   B CHARACTER;                                                     STRING_GT
 2220           DECLARE LA FIXED,  LB FIXED;                                             STRING_GT
 2221                                                                                    STRING_GT
 2222           LA = LENGTH (A);                                                         STRING_GT
 2223           LB = LENGTH (B);                                                         STRING_GT
 2224           IF LA = LB THEN RETURN (A > B);                                          STRING_GT
 2225           ELSE IF LA > LB THEN RETURN (SUBSTR (A,0,LB) >= B);                      STRING_GT
 2226                ELSE RETURN (A > SUBSTR(B,0,LA));                                   STRING_GT
 2227        END STRING_GT;                                                              STRING_GT

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
A               CHARACTER   841   STRING   2212       4
B               CHARACTER   842   STRING   2212       4
LA              FIXED     10180     DATA   2220       4
LB              FIXED     10181     DATA   2220       4
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 81
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2228                                                                                    SYMBOLDUMP
 2229        IF CONTROL(BYTE('L'))  = 0 THEN RETURN; /* DON'T DUMP IF NOT LISTING */     SYMBOLDUMP
 2230        IF PROCMARK <= NDECSY THEN                                                  SYMBOLDUMP
 2231           DO;                                                                      SYMBOLDUMP
 2232              CALL PRINTLINE ('SYMBOL TABLE DUMP',0);                               SYMBOLDUMP
 2233              LMAX = 15;                                                            SYMBOLDUMP
 2234              DO I = PROCMARK TO NDECSY;  /* PAD ALL NAMES TO THE SAME LENGTH */    SYMBOLDUMP
 2235                 IF LENGTH (SYT (I)) > LMAX THEN                                    SYMBOLDUMP
 2236                    LMAX = LENGTH (SYT (I));                                        SYMBOLDUMP
 2237                 SYTSORT (I) = I;                                                   SYMBOLDUMP
 2238              END;                                                                  SYMBOLDUMP
 2239              IF LMAX > 70 THEN LMAX = 70;                                          SYMBOLDUMP
 2240              BLANKS = SUBSTR (X70,0,LMAX);                                         SYMBOLDUMP
 2241              EXCHANGES = TRUE;                                                     SYMBOLDUMP
 2242              K = NDECSY - PROCMARK;                                                SYMBOLDUMP
 2243              DO WHILE EXCHANGES;                                                   SYMBOLDUMP
 2244                 EXCHANGES = FALSE;                                                 SYMBOLDUMP
 2245                 DO J = 0 TO K - 1;                                                 SYMBOLDUMP
 2246                    I = NDECSY - J;                                                 SYMBOLDUMP
 2247                    L = I - 1;                                                      SYMBOLDUMP
 2248                    IF STRING_GT(SYT (SYTSORT(L)),SYT(SYTSORT(I))) THEN             SYMBOLDUMP
 2249                       DO;                                                          SYMBOLDUMP
 2250                          M = SYTSORT (I);                                          SYMBOLDUMP
 2251                          SYTSORT (I) = SYTSORT (L);                                SYMBOLDUMP
 2252                          SYTSORT (L) = M;                                          SYMBOLDUMP
 2253                          EXCHANGES = TRUE;                                         SYMBOLDUMP
 2254                          K = J;          /* RECORD THE LAST SWAP */                SYMBOLDUMP
 2255                       END;                                                         SYMBOLDUMP
 2256                  END;                                                              SYMBOLDUMP
 2257              END;                                                                  SYMBOLDUMP
 2258              I = PROCMARK;                                                         SYMBOLDUMP
 2259              DO WHILE LENGTH (SYT (SYTSORT (I))) = 0;                              SYMBOLDUMP
 2260                 I = I + 1;               /* IGNORE NULL NAMES */                   SYMBOLDUMP
 2261              END;                                                                  SYMBOLDUMP
 2262              SUBTITLE_SAVE = SUBTITLE;                                             SYMBOLDUMP
 2263              SUBTITLE = 'SYMBOL' ^^ SUBSTR(BLANKS,0,LMAX-5) ^^ HEADING;            SYMBOLDUMP
 2264              CALL PRINTLINE (SUBTITLE,0);                                          SYMBOLDUMP
 2265              DO I = I TO NDECSY;                                                   SYMBOLDUMP
 2266                 K = SYTSORT (I);                                                   SYMBOLDUMP
 2267                 TAG = SYT(K) ^^ SUBSTR(X70,0,LMAX-LENGTH(SYT(K)));                 SYMBOLDUMP
 2268                 CALL I_FORMAT (SYTLOC(K),5);                                       SYMBOLDUMP
 2269                 TAG = TAG ^^ X1 ^^ TYPENAME(SYTYPE(K)) ^^ X1 ^^ I_STRING;          SYMBOLDUMP
 2270                 CALL I_FORMAT (SYTCARD(K),5);                                      SYMBOLDUMP
 2271                 TAG = TAG ^^ X1 ^^ SEG(SYTSEG(K)) ^^ X2 ^^ I_STRING;               SYMBOLDUMP
 2272                 CALL I_FORMAT (SYTCO(K),5);                                        SYMBOLDUMP
 2273                 IF SYTCO(K) = 0 THEN I_STRING = I_STRING ^^ ' *';                  SYMBOLDUMP
 2274                 CALL PRINTLINE (TAG ^^ X3 ^^ I_STRING,-1);                         SYMBOLDUMP
 2275                                                                                    SYMBOLDUMP
 2276                 K = K + 1;                                                         SYMBOLDUMP
 2277                 DO WHILE (LENGTH (SYT (K)) = 0) & (K <= NDECSY);                   SYMBOLDUMP
 2278                    J = K - SYTSORT (I);                                            SYMBOLDUMP
 2279                    TAG = '  PARAMETER  ' ^^ J ^^ SUBSTR(BLANKS,13) ^^              SYMBOLDUMP
 2280                          TYPENAME(SYTYPE(K));                                      SYMBOLDUMP C19 = 1744830451
 2281                    CALL I_FORMAT (SYTLOC(K),5);                                    SYMBOLDUMP
 2282                    TAG = TAG ^^ X1 ^^ I_STRING;                                    SYMBOLDUMP
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 82
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2283                    CALL I_FORMAT (SYTCARD(K),5);                                   SYMBOLDUMP
 2284                    TAG = TAG ^^ X1 ^^ SEG(SYTSEG(K)) ^^ X2 ^^ I_STRING;            SYMBOLDUMP
 2285                    CALL I_FORMAT (SYTCO(K),5);                                     SYMBOLDUMP
 2286                    CALL PRINTLINE (TAG ^^ X3 ^^ I_STRING,-1);                      SYMBOLDUMP
 2287                    K = K + 1;                                                      SYMBOLDUMP
 2288                 END;                                                               SYMBOLDUMP
 2289              END;                                                                  SYMBOLDUMP
 2290              SUBTITLE = SUBTITLE_SAVE;                                             SYMBOLDUMP
 2291           END;                                                                     SYMBOLDUMP
 2292           EJECT_PAGE;                                                              SYMBOLDUMP
 2293  END SYMBOLDUMP;                                                                   SYMBOLDUMP

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
BLANKS          CHARACTER   839   STRING   2208       3
EXCHANGES       FIXED      9752     DATA   2206       4
HEADING         CHARACTER   833   STRING   2203       1
I               FIXED      9753     DATA   2206      18
J               FIXED      9755     DATA   2207       5
K               FIXED      9756     DATA   2207      24
L               FIXED      9757     DATA   2207       4
LMAX            FIXED      9754     DATA   2206       8
M               FIXED      9758     DATA   2207       2
SEG             CHARACTER   834   STRING   2204       2
STRING_GT       PROCEDURE  5679  PROGRAM   2211       1
  PARAMETER  1  CHARACTER   841   STRING   2212       5
  PARAMETER  2  CHARACTER   842   STRING   2212       5
SUBTITLE_SAVE   CHARACTER   832   STRING   2202       2
SYTSORT         FIXED      9759     DATA   2207      10
TAG             CHARACTER   840   STRING   2209      12
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 83
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2294  DUMPIT:                                                                          *
 2295     PROCEDURE;                                                                    *
 2296        DECLARE CHAR360 CHARACTER;                                                  DUMPIT
 2297        DECLARE T1 CHARACTER, T2 CHARACTER, L FIXED, LL FIXED;                      DUMPIT
 2298        /* PUT OUT STATISTICS KEPT WITHIN THE COMPILER */                           DUMPIT
 2299       IF TOP_MACRO >= 0 THEN                                                       DUMPIT
 2300            DO; /* DUMP MACRO DICTIONARY */                                         DUMPIT
 2301               CALL PRINTLINE ( 'MACRO DEFINITIONS:',0);                            DUMPIT
 2302               CALL PRINTLINE (X1,-1);                                              DUMPIT
 2303               L = LENGTH (MACRO_NAME(TOP_MACRO));                                  DUMPIT
 2304               IF L > 70 THEN L = 70;                                               DUMPIT
 2305               SUBTITLE = 'NAME' ^^ SUBSTR (X70,0,L-2) ^^                           DUMPIT
 2306                          'AT LINE REF COUNT LITERAL VALUE';                        DUMPIT
 2307               CALL PRINTLINE (SUBTITLE,-1);                                        DUMPIT
 2308               DO I = 0 TO TOP_MACRO;                                               DUMPIT
 2309                  K = LENGTH (MACRO_NAME(I));                                       DUMPIT
 2310                  IF K < L THEN                                                     DUMPIT
 2311                     DO;                                                            DUMPIT
 2312                         CHAR360 = SUBSTR (X70,0,L-K);                              DUMPIT
 2313                         MACRO_NAME (I) = MACRO_NAME (I) ^^ CHAR360;                DUMPIT
 2314                     END;                                                           DUMPIT
 2315                  ELSE                                                              DUMPIT
 2316                     MACRO_NAME(I) = SUBSTR(MACRO_NAME(I),0,L);                     DUMPIT
 2317                  T1 = MACRO_DECLARE(I);                                            DUMPIT
 2318                  T2 = MACRO_COUNT(I);                                              DUMPIT
 2319                  LL = LENGTH (T1);                                                 DUMPIT
 2320                  IF LL < 8 THEN T1 = SUBSTR(X70,0,8-LL) ^^ T1;                     DUMPIT
 2321                  LL = LENGTH (T2);                                                 DUMPIT
 2322                  IF LL < 9 THEN T2 = SUBSTR(X70,0,9-LL) ^^ T2;                     DUMPIT
 2323                  CALL PRINTLINE (MACRO_NAME(I) ^^ T1 ^^ T2 ^^ X4 ^^ MACRO_TEXT(I),-1); DUMPIT
 2324               END;                                                                 DUMPIT
 2325            END;                                                                    DUMPIT
 2326        SUBTITLE = '';                                                              DUMPIT
 2327        CALL PRINTLINE (X1,-1);                                                     DUMPIT
 2328        CALL PRINTLINE ('ID COMPARES       = ' ^^ IDCOMPARES,-1);                   DUMPIT
 2329        CALL PRINTLINE ('SYMBOL TABLE SIZE = ' ^^ MAXNDECSY,-1);                    DUMPIT
 2330        CALL PRINTLINE ('MACRO DEFINITIONS = ' ^^ TOP_MACRO + 1,-1);                DUMPIT
 2331        CALL PRINTLINE ('SCAN              = ' ^^ COUNT_SCAN,-1);                   DUMPIT
 2332        CALL PRINTLINE ('EMITINST          = ' ^^ COUNT_INST,-1);                   DUMPIT
 2333        CALL PRINTLINE ('FORCE ACCUMULATOR = ' ^^ COUNT_FORCE,-1);                  DUMPIT
 2334        CALL PRINTLINE ('ARITHEMIT         = ' ^^ COUNT_ARITH,-1);                  DUMPIT
 2335        CALL PRINTLINE ('GENERATE STORE    = ' ^^ COUNT_STORE,-1);                  DUMPIT
 2336        CALL PRINTLINE ('FREE STRING AREA  = ' ^^ FREELIMIT - FREEBASE,-1);         DUMPIT
 2337        CALL PRINTLINE ('COMPACTIFICATIONS = ' ^^ COUNT_COMPACT,-1);                DUMPIT
 2338        SUBTITLE = 'INSTRUCTION FREQUENCIES';                                       DUMPIT
 2339        EJECT_PAGE;                                                                 DUMPIT
 2340        DO I = 0 TO 15;                                                             DUMPIT
 2341           J = I * 32;                                                              DUMPIT C20 = 15
 2342           DO K = 0 TO 31;                                                          DUMPIT
 2343              IF INSTRUCT(J+K) > 0 THEN                                             DUMPIT C21 = 31
 2344                  CALL PRINTLINE (SUBSTR(OPNAME(I),K*6,6) ^^ X4 ^^ INSTRUCT(J+K),-1); DUMPIT
 2345           END;                                                                     DUMPIT
 2346        END;                                                                        DUMPIT
 2347  END DUMPIT;                                                                       DUMPIT

SYMBOL TABLE DUMP
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 84
SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
 

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
CHAR360         CHARACTER   847   STRING   2296       2
L               FIXED     10197     DATA   2297       7
LL              FIXED     10198     DATA   2297       6
T1              CHARACTER   848   STRING   2297       5
T2              CHARACTER   849   STRING   2297       5
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 85
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2348     INITIALIZE:                                                                   *
 2349        PROCEDURE;                                                                 *
 2350        DECLARE CH CHARACTER;                                                       INITIALIZE
 2351        DECLARE TIME1 FIXED, HOURS FIXED, MINUTES FIXED, SECS FIXED;                INITIALIZE
 2352        DECLARE DATE1 FIXED, DAY FIXED, YEAR FIXED, L FIXED;                        INITIALIZE
 2353        DECLARE MONTH CHARACTER;                                                    INITIALIZE
 2354        DECLARE MONTHS (11)CHARACTER INITIAL ('-JAN-',                              INITIALIZE
 2355              '-FEB-','-MAR-','-APR-','-MAY-','-JUN-','-JUL-','-AUG-',              INITIALIZE
 2356              '-SEP-','-OCT-','-NOV-','-DEC-');                                     INITIALIZE
 2357        OUTPUT(-2) = 'FILENAME TO BE COMPILED: ';                                   INITIALIZE
 2358        CHAR_TEMP = INPUT(-1);                                                      INITIALIZE
 2359        SOURCE = '';                                                                INITIALIZE
 2360        CONTROL(BYTE('A')) = FALSE;                                                 INITIALIZE
 2361        CONTROL(BYTE('D')) = TRUE;                                                  INITIALIZE
 2362        CONTROL(BYTE('S')) = TRUE;                                                  INITIALIZE
 2363        DO I = 0 TO LENGTH(CHAR_TEMP)-1;                                            INITIALIZE
 2364           CH =  SUBSTR(CHAR_TEMP,I,1);                                             INITIALIZE
 2365           IF BYTE(CH) = BYTE('/') THEN                                             INITIALIZE
 2366              DO;                                                                   INITIALIZE
 2367                 CH = SUBSTR(CHAR_TEMP,I+1,1);                                      INITIALIZE
 2368                 CONTROL(BYTE(CH)) = \ CONTROL(BYTE(CH));                           INITIALIZE
 2369                 I = I + 1;                                                         INITIALIZE
 2370              END;                                                                  INITIALIZE
 2371           ELSE                                                                     INITIALIZE
 2372              SOURCE = SOURCE ^^ CH;                                                INITIALIZE
 2373           END;                                                                     INITIALIZE
 2374        FILENAME (0) = 'SYSIN:' ^^ SOURCE ^^ '.XPL';                                INITIALIZE
 2375        FILENAME (1) = 'SYSOUT:' ^^ SOURCE ^^ '.LST';                               INITIALIZE
 2376        IF CONTROL(BYTE('A')) THEN                                                  INITIALIZE
 2377           DO;                                                                      INITIALIZE
 2378              FILENAME (DATAFILE) = SOURCE ^^ '.MAC';                               INITIALIZE
 2379              FILENAME(CODEFILE) = SOURCE ^^ '.TMP';                                INITIALIZE
 2380           END;                                                                     INITIALIZE
 2381        FILENAME(RELFILE) = SOURCE ^^ '.REL';                                       INITIALIZE
 2382        TIME1 = (TIME+500)/ 1000;                                                   INITIALIZE
 2383        HOURS = TIME1 /3600;                                                        INITIALIZE
 2384        MINUTES = (TIME1 MOD 3600) / 60;                                            INITIALIZE
 2385        SECS = TIME1 MOD 60;                                                        INITIALIZE
 2386        DATE1 = DATE;                                                               INITIALIZE
 2387        DAY = DATE1 MOD 31 + 1;                                                     INITIALIZE
 2388        DATE1 = DATE1 / 31;                                                         INITIALIZE
 2389        MONTH = MONTHS(DATE1 MOD 12);                                               INITIALIZE
 2390        YEAR = DATE1 / 12 + 1964;                                                   INITIALIZE
 2391        TITLE = '1' ^^ SOURCE ^^ '.XPL  COMPILED ' ^^ DAY ^^ MONTH ^^               INITIALIZE
 2392               YEAR ^^ '  AT ' ^^HOURS ^^ ':' ^^ MINUTES ^^ ':' ^^ SECS             INITIALIZE
 2393               ^^ ' BY VERSION ' ^^ VERSION;                                        INITIALIZE
 2394        L = LENGTH (TITLE);                                                         INITIALIZE
 2395        TITLE = TITLE ^^ SUBSTR(X70,0,90-L) ^^ 'PAGE ';                             INITIALIZE
 2396        SUBTITLE = ' LINE    SOURCE STATEMENT' ^^ SUBSTR(X70,7)                     INITIALIZE
 2397              ^^ 'PROCEDURE AND COMPILER INFORMATION';                              INITIALIZE C22 = 939524089
 2398        PAGE_COUNT = 0;                                                             INITIALIZE
 2399        LINE_COUNT = 99;                                                            INITIALIZE
 2400        DO I = 1 TO TERMINAL#;                                                      INITIALIZE
 2401           S = VOCAB(I);                                                            INITIALIZE
 2402           IF S = '<NUMBER>' THEN NUMBER = I;  ELSE                                 INITIALIZE
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 86
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2403           IF S = '<IDENTIFIER>' THEN IDENT = I;  ELSE                              INITIALIZE
 2404           IF S = '<STRING>' THEN STRING = I;  ELSE                                 INITIALIZE
 2405           IF S = '/' THEN DIVIDE = I;  ELSE                                        INITIALIZE
 2406           IF S = 'EOF' THEN EOFILE = I;  ELSE                                      INITIALIZE
 2407           IF S = 'DECLARE' THEN STOPIT(I) = TRUE;  ELSE                            INITIALIZE
 2408           IF S = 'PROCEDURE' THEN STOPIT(I) = TRUE;  ELSE                          INITIALIZE
 2409           IF S = 'END' THEN STOPIT(I) = TRUE;  ELSE                                INITIALIZE
 2410           IF S = 'DO' THEN STOPIT(I) = TRUE;  ELSE                                 INITIALIZE
 2411           IF S = ';' THEN STOPIT(I) = TRUE;  ELSE                                  INITIALIZE
 2412           IF S = '^' THEN ORSYMBOL = I; ELSE                                       INITIALIZE
 2413           IF S = '^^' THEN CONCATENATE = I;                                        INITIALIZE
 2414        END;                                                                        INITIALIZE
 2415        IF IDENT = TERMINAL# THEN RESERVED_LIMIT = LENGTH(VOCAB(TERMINAL#-1));      INITIALIZE
 2416        ELSE RESERVED_LIMIT = LENGTH(VOCAB(TERMINAL#));                             INITIALIZE
 2417        STOPIT(EOFILE) = TRUE;                                                      INITIALIZE
 2418     DO I = TERMINAL# TO  VOCAB#;                                                   INITIALIZE
 2419        S = VOCAB(I);                                                               INITIALIZE C23 = 91
 2420        IF S = '<LABEL DEFINITION>' THEN LABELSET = I;                              INITIALIZE
 2421     END;                                                                           INITIALIZE
 2422        CHARTYPE (BYTE(' ')) = 1;                                                   INITIALIZE
 2423        CHARTYPE (BYTE('''')) = 2;                                                  INITIALIZE
 2424        CHARTYPE (BYTE('"')) = 3;                                                   INITIALIZE
 2425        DO I = 0 TO 255;                                                            INITIALIZE
 2426           NOT_LETTER_OR_DIGIT(I) = TRUE;                                           INITIALIZE C24 = 255
 2427        END;                                                                        INITIALIZE
 2428        DO I = 0 TO 29;                                                             INITIALIZE
 2429           J = BYTE('ABCDEFGHIJKLMNOPQRSTUVWXYZ_$@#', I);                           INITIALIZE C25 = 29
 2430           NOT_LETTER_OR_DIGIT(J) = FALSE;                                          INITIALIZE
 2431           CHARTYPE(J) = 4;                                                         INITIALIZE
 2432        END;                                                                        INITIALIZE
 2433        DO I = 0 TO 9;                                                              INITIALIZE
 2434           J = BYTE('0123456789', I);                                               INITIALIZE C26 = 9
 2435           NOT_LETTER_OR_DIGIT(J) = FALSE;                                          INITIALIZE
 2436           CHARTYPE(J) = 5;                                                         INITIALIZE
 2437         END;                                                                       INITIALIZE
 2438        I = 1;                                                                      INITIALIZE
 2439        DO WHILE (LENGTH(VOCAB(I))= 1);                                             INITIALIZE
 2440           J = BYTE(VOCAB(I));                                                      INITIALIZE
 2441           TX(J) = I;                                                               INITIALIZE
 2442           CHARTYPE(J) = 7;                                                         INITIALIZE
 2443           I = I + 1;                                                               INITIALIZE
 2444        END;                                                                        INITIALIZE
 2445        CHARTYPE(BYTE('^')) = 8;                                                    INITIALIZE
 2446        CHARTYPE (BYTE('/')) = 6;                                                   INITIALIZE
 2447        PP = 0;            /* PROGRAM ORIGIN */                                     INITIALIZE
 2448        DP = 0;            /* DATA ORIGIN */                                        INITIALIZE
 2449        DPOFFSET = 0;                                                               INITIALIZE
 2450        DSP = 0;           /* DESCRIPTOR ORIGIN */                                  INITIALIZE
 2451        RETURNED_TYPE = FIXEDTYPE;     /* INITIAL DEFAULT TYPE */                   INITIALIZE
 2452        TOP_MACRO = -1;                                                             INITIALIZE
 2453        TARGET_REGISTER = -1;                                                       INITIALIZE
 2454                                                                                    INITIALIZE
 2455        CODEMSG = X70 ^^ CODEMSG;                                                   INITIALIZE
 2456        DATAMSG = X70 ^^ DATAMSG;                                                   INITIALIZE
 2457        BACKMSG = X70 ^^ BACKMSG;                                                   INITIALIZE
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 87
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2458                                                                                    INITIALIZE
 2459  /*    INITIALIZE THE SYMBOL TABLE AND ITS HASH TABLE */                           INITIALIZE
 2460        PROCMARK = 25; NDECSY = 27; PARCT = 0;                                      INITIALIZE
 2461        DO I = 0 TO SYTSIZE;                                                        INITIALIZE
 2462           PTR (I) = -1;                                                            INITIALIZE C27 = 420
 2463        END;                                                                        INITIALIZE
 2464        DO I = 0 TO "FF";                                                           INITIALIZE
 2465           HASH (I) = -1;                                                           INITIALIZE
 2466        END;                                                                        INITIALIZE
 2467        DO I = 0 TO NDECSY;                                                         INITIALIZE
 2468           IDX = HASHER (SYT(I));                                                   INITIALIZE
 2469           PTR (I) = HASH (IDX);                                                    INITIALIZE
 2470           HASH (IDX) = I;                                                          INITIALIZE
 2471        END;                                                                        INITIALIZE
 2472        RPTR, DPTR, DLOC,FOR_COUNT, LABEL_COUNT = 0;                                INITIALIZE
 2473        RCTR, DCTR = 1;                                                             INITIALIZE
 2474                                                                                    INITIALIZE
 2475        FILE(RELFILE) = NAME_TYPE + 2;                                              INITIALIZE
 2476        FILE(RELFILE) = 0;                                                          INITIALIZE C28 = 1572864
 2477        FILE(RELFILE) = RADIX50(SOURCE);                                            INITIALIZE
 2478        FILE(RELFILE) = "(3)17000000" + 0;                                          INITIALIZE
 2479        FILE(RELFILE) = HISEG_TYPE + 1;                                             INITIALIZE C29 = 3932160
 2480        FILE(RELFILE) = "(3)200000000000" ;                                         INITIALIZE C30 = 786432
 2481        FILE(RELFILE) = "(3)400000400000";                                          INITIALIZE
 2482                                                                                    INITIALIZE C31 = -34359607296
 2483        CODE_HEAD, CODE_TAIL = 0;                                                   INITIALIZE
 2484        CODE_FULL(0) = FALSE;                                                       INITIALIZE
 2485        IF CONTROL(BYTE('A')) THEN                                                  INITIALIZE
 2486           DO;                                                                      INITIALIZE
 2487              LABEL_GEN = 'P:';                /* ORG THE CODE SEGMENT */           INITIALIZE
 2488              OUTPUT (DATAFILE) = '       TITLE ' ^^ SOURCE ;                       INITIALIZE
 2489              OUTPUT (DATAFILE) = '       TWOSEG 400000;';                          INITIALIZE
 2490              OUTPUT (DATAFILE) = '       RELOC 0;';                                INITIALIZE
 2491              OUTPUT (DATAFILE) = '       RADIX 10;';                               INITIALIZE
 2492              OUTPUT (CODEFILE) = '       RELOC ^O400000;';                         INITIALIZE
 2493              OUTPUT (DATAFILE) = '       OPDEF   .INIT. [1B8];';                   INITIALIZE
 2494              OUTPUT (DATAFILE) = '       OPDEF   .INPT. [2B8];';                   INITIALIZE
 2495              OUTPUT (DATAFILE) = '       OPDEF   .OUTP. [3B8];';                   INITIALIZE
 2496              OUTPUT (DATAFILE) = '       OPDEF   .EXIT. [4B8];';                   INITIALIZE
 2497              OUTPUT (DATAFILE) = '       OPDEF   .FILI. [6B8];';                   INITIALIZE
 2498              OUTPUT (DATAFILE) = '       OPDEF   .FILO. [7B8];';                   INITIALIZE
 2499              OUTPUT (DATAFILE) = '       OPDEF   .NAME. [8B8];';                   INITIALIZE
 2500              OUTPUT (DATAFILE) = 'D:';                                             INITIALIZE
 2501           END;                                                                     INITIALIZE
 2502        BYTEPTRS = DP;                                                              INITIALIZE
 2503        CALL EMITDATAWORD ("(3)331114000000"); /*   POINT 9,0(12),8 */              INITIALIZE
 2504        CALL EMITDATAWORD ("(3)221114000000"); /*   POINT 9,0(12),17 */             INITIALIZE C32 = 29145169920
 2505        CALL EMITDATAWORD ("(3)111114000000"); /*   POINT 9,0(12),26 */             INITIALIZE C33 = 19481493504
 2506        CALL EMITDATAWORD ("(3)001114000000"); /*   POINT 9,0(12),35 */             INITIALIZE C34 = 9817817088
 2507        PSBITS = DP;                                                                INITIALIZE C35 = 154140672
 2508        CALL EMITDATAWORD ("(3)331100000000"); /*   POINT 9,0,8  */                 INITIALIZE
 2509        CALL EMITDATAWORD ("(3)221100000000"); /*   POINT 9,0,17 */                 INITIALIZE C36 = 29142024192
 2510        CALL EMITDATAWORD ("(3)111100000000"); /*   POINT 9,0,26 */                 INITIALIZE C37 = 19478347776
 2511        CALL EMITDATAWORD ("(3)001100000000"); /*   POINT 9,0,35 */                 INITIALIZE C38 = 9814671360
 2512        CALL EMITCONSTANT (1);            /* ENTER A 1 */                           INITIALIZE C39 = 150994944
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 88
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2513        TRUELOC = ADR;                    /* SAVE ITS ADDRESS */                    INITIALIZE
 2514        CALL EMITCONSTANT (0);            /* ENTER A 0 */                           INITIALIZE
 2515        FALSELOC = ADR;                   /* SAVE ITS ADDRESS */                    INITIALIZE
 2516        TSA = DP; SYTLOC(2) = DP;         /* FREEPOINT */                           INITIALIZE
 2517        CALL EMITDATAWORD (0);                                                      INITIALIZE
 2518        NDESC, SYTLOC(4) = FINDLABEL;     /* NDESCRIPT */                           INITIALIZE
 2519        COREBYTELOC = 1;                  /* SYT LOCATION OF COREBYTE */            INITIALIZE
 2520        STRING_RECOVER = 25;              /* SYT LOCATION OF COMPACTIFY */          INITIALIZE
 2521        SYTLOC(25) = FINDLABEL;           /* LABEL FOR COMPACTIFY */                INITIALIZE
 2522        LIMITWORD = DP; SYTLOC(26) = DP;  /* FREELIMIT */                           INITIALIZE
 2523        CALL EMITDATAWORD (0);                                                      INITIALIZE
 2524        STR = DSP;                        /* PLACE TO SAVE LAST STRING GENERATED */ INITIALIZE
 2525        CALL EMITDESC (0,0);                                                        INITIALIZE
 2526        LIBRARY_SAVE = DP;                /* PLACE TO SAVE R11 ON LIB CALLS */      INITIALIZE
 2527        CALL EMITDATAWORD (0);                                                      INITIALIZE
 2528        LIBRARY = DP;                     /* ADDRESS OF LIBRARY GOES HERE */        INITIALIZE
 2529        IF CONTROL(BYTE('A')) THEN                                                  INITIALIZE
 2530           DO;                                                                      INITIALIZE
 2531              OUTPUT (DATAFILE) = '       XPLLIB;';                                 INITIALIZE
 2532              OUTPUT (DATAFILE) = '       EXTERN XPLLIB;';                          INITIALIZE
 2533           END;                                                                     INITIALIZE
 2534        DP = DP + 1;                                                                INITIALIZE
 2535        CALL EMITCONSTANT ("FFFFF");      /* MASK FOR ADDRESSES ONLY  */            INITIALIZE
 2536        ADDRMASK = ADR;                   /* SAVE IT                  */            INITIALIZE
 2537        CALL EMITCONSTANT(-134217728);  /* DV LENGTH FIELD */                       INITIALIZE
 2538        LENGTHMASK = ADR;                                                           INITIALIZE
 2539                                                                                    INITIALIZE
 2540  /* CHECK-STRING-OVERFLOW  SEE IF COMPACTIFY NEEDS TO BE CALLED */                 INITIALIZE
 2541                                                                                    INITIALIZE
 2542        CALL EMITBLOCK (15);                                                        INITIALIZE
 2543        I = DP - 15;                                                                INITIALIZE
 2544        STRING_CHECK = PP;                                                          INITIALIZE
 2545        CALL EMITINST (MOVE,0,0,TSA,0,1); /* PICK UP TOP OF STRINGS */              INITIALIZE
 2546        CALL EMITINST (CAMGE,0,0,LIMITWORD,0,1); /* COMPARE WITH LIMIT WORD */      INITIALIZE
 2547        CALL EMITINST (POPJ,15,0,0,0,0);                                            INITIALIZE
 2548        CALL EMITINST (MOVEI,0,0,I,0,1);                                            INITIALIZE
 2549        CALL EMITINST (HRLI,0,0,1,0,0);                                             INITIALIZE
 2550        CALL EMITINST (BLT,0,0,I+14,0,1);                                           INITIALIZE
 2551        CALL EMITINST (PUSHJ,15,0,SYTLOC(STRING_RECOVER),0,SYTSEG(STRING_RECOVER)); INITIALIZE
 2552        CALL EMITINST (MOVEI,0,0,1,0,0);                                            INITIALIZE
 2553        CALL EMITINST (HRLI,0,0,I,0,1);                                             INITIALIZE
 2554        CALL EMITINST (BLT,0,0,14,0,0);                                             INITIALIZE
 2555        CALL EMITINST (POPJ,15,0,0,0,0);                                            INITIALIZE
 2556        SYTCO (STRING_RECOVER) = SYTCO (STRING_RECOVER) + 1;                        INITIALIZE
 2557                                                                                    INITIALIZE
 2558   /* STRING COMPARISON */                                                          INITIALIZE
 2559                                                                                    INITIALIZE
 2560        A = DSP;                                                                    INITIALIZE
 2561        CALL EMITDESC (0,0);                                                        INITIALIZE
 2562        B = DSP;                                                                    INITIALIZE
 2563        CALL EMITDESC (0,0);                                                        INITIALIZE
 2564        STRCOMP = PP;                                                               INITIALIZE
 2565        CALL EMITINST (MOVE,0,0,A,0,3);   /* FETCH LEFT DESCRIPTOR */               INITIALIZE
 2566        CALL EMITINST (LSH,0,0,    -27,0,0);                                        INITIALIZE
 2567        CALL EMITINST (MOVE,1,0,B,0,3);    /* FETCH RIGHT DESCRIPTOR */             INITIALIZE
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 89
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2568        CALL EMITINST (LSH,1,0,    -27,0,0);                                        INITIALIZE
 2569        CALL EMITINST (SUB,0,0,1,0,0);    /* SUBTRACT THE LENGTHS */                INITIALIZE
 2570        CALL EMITINST (JUMPE,0,0,PP+2,0,2);                                         INITIALIZE
 2571        CALL EMITINST (POPJ,15,0,0,0,0);   /* RETURN W/ -, 0, OR + IF LENGTH \= */  INITIALIZE
 2572        CALL EMITINST (MOVEI,2,0,0,0,0);  /* CLEAR A LENGTH REGISTER */             INITIALIZE
 2573        CALL EMITINST (MOVE,3,0,A,0,3);                                             INITIALIZE
 2574        CALL EMITINST (SUBI,3,0,1,0,0);                                             INITIALIZE
 2575        CALL EMITINST (LSHC,2,0,  9,0,0); /* ISOLATE THE LENGTH */                  INITIALIZE
 2576        CALL EMITINST (LSHC,3,0,-11,0,0); /* ISOLATE BYTE INDEX IN R4 */            INITIALIZE
 2577        CALL EMITINST (LSH,4,0,    -34,0,0);                                        INITIALIZE
 2578        CALL EMITINST (HLL,3,0,PSBITS,4,1); /* BUILD BYTE PTR IN R3 */              INITIALIZE
 2579        CALL EMITINST (MOVE,4,0,B,0,3);                                             INITIALIZE
 2580        CALL EMITINST (SUBI,4,0,1,0,0);                                             INITIALIZE
 2581        CALL EMITINST (LSHC,4,0,    -2,0,0);                                        INITIALIZE
 2582        CALL EMITINST (LSH,5,0,    -34,0,0);                                        INITIALIZE
 2583        CALL EMITINST (HLL,4,0,PSBITS,5,1); /* BUILD BYTE PTR IN R4 */              INITIALIZE
 2584                                                                                    INITIALIZE
 2585        /* ONE CHARACTER GOES INTO R0 WHILE THE OTHER GOES INTO R1.  LENGTH IS      INITIALIZE
 2586           CONTROLLED IN R2 AND THE BYTE PTRS ARE IN R3 & R4 FOR SPEED.             INITIALIZE
 2587        */                                                                          INITIALIZE
 2588        CALL EMITINST (ILDB,0,0,3,0,0);   /* FETCH 1ST BYTE */                      INITIALIZE
 2589        CALL EMITINST (ILDB,1,0,4,0,0);   /* FETCH 2ND BYTE */                      INITIALIZE
 2590        CALL EMITINST (CAMN,0,0,1,0,0);   /* SKIP IF \= */                          INITIALIZE
 2591        CALL EMITINST (SOJG,2,0,PP-3,0,2);/* LOOP FOR ALL BYTES */                  INITIALIZE
 2592        CALL EMITINST (SUB,0,0,1,0,0);    /* SUB DIFF BYTES OR LAST TWO EQUAL */    INITIALIZE
 2593        CALL EMITINST (POPJ,15,0,0,0,0);                                            INITIALIZE
 2594                                                                                    INITIALIZE
 2595   /* MOVE CHARACTER SUBROUTINE */                                                  INITIALIZE
 2596                                                                                    INITIALIZE
 2597        MOVER = PP;                                                                 INITIALIZE
 2598        /* USES REGISTERS 1, 2, 11, 12, & 13 */                                     INITIALIZE
 2599        CALL EMITINST (SUBI,12,0,1,0,0);  /* DECR ADDR OF SOURCE */                 INITIALIZE
 2600        CALL EMITINST (MOVEI,11,0,0,0,0); /* CLEAR LENGTH REG */                    INITIALIZE
 2601        CALL EMITINST (LSHC,11,0,  9,0,0);/* ISOLATE LENGTH */                      INITIALIZE
 2602        CALL EMITINST (LSHC,12,0,-11,0,0);/* ISOLATE BYTE INDEX */                  INITIALIZE
 2603        CALL EMITINST (LSH,13,0,    -34,0,0);                                       INITIALIZE
 2604        CALL EMITINST (HLL,12,0,PSBITS,13,1); /* MAKE FROM BYTEPTR */               INITIALIZE
 2605        CALL EMITINST (MOVE,13,0,11,0,0); /* COPY LENGTH */                         INITIALIZE
 2606        CALL EMITINST (ADD,13,0,1,0,0);   /* CREATE NEW TSA */                      INITIALIZE
 2607        CALL EMITINST (SUBI,1,0,1,0,0);   /* DECR TO ADDR */                        INITIALIZE
 2608        CALL EMITINST (LSHC,1,0,    -2,0,0); /* ISOLATE BYTE INDEX */               INITIALIZE
 2609        CALL EMITINST (LSH,2,0,    -34,0,0);                                        INITIALIZE
 2610        CALL EMITINST (HLL,1,0,PSBITS,2,1);  /* TO BYTEPTR */                       INITIALIZE
 2611                                                                                    INITIALIZE
 2612        /* CHARACTER GOES INTO R2, LENGTH IS IN R11, AND THE NEW TSA IS IN R13.     INITIALIZE
 2613           BYTEPTRS ARE IN R1 & R12 FOR SPEED.                                      INITIALIZE
 2614        */                                                                          INITIALIZE
 2615        CALL EMITINST (ILDB,2,0,12,0,0);  /* FETCH A BYTE */                        INITIALIZE
 2616        CALL EMITINST (IDPB,2,0,1,0,0);   /* STORE A BYTE */                        INITIALIZE
 2617        CALL EMITINST (SOJG,11,0,PP-2,0,2);  /* LOOP FOR ALL BYTES */               INITIALIZE
 2618        CALL EMITINST (MOVE,1,0,13,0,0);  /* RETURN WITH NEW TSA */                 INITIALIZE
 2619        CALL EMITINST (POPJ,15,0,0,0,0);                                            INITIALIZE
 2620                                                                                    INITIALIZE
 2621   /* CATENATION SUBROUTINE */                                                      INITIALIZE
 2622                                                                                    INITIALIZE
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 90
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2623        CATENTRY = PP;                                                              INITIALIZE
 2624        CALL CHECK_STRING_OVERFLOW;       /* SQUEEZE CORE IF NECESSARY */           INITIALIZE
 2625        CALL EMITINST (MOVE,0,0,B,0,3);   /* SEE IF LENGTH (B) = 0 */               INITIALIZE
 2626        CALL EMITINST (AND,0,0,LENGTHMASK,0,1);                                     INITIALIZE
 2627        CALL EMITINST (JUMPN,0,0,PP+3,0,2);                                         INITIALIZE
 2628        CALL EMITINST (MOVE,0,0,A,0,3);   /* YES, RETURN WITH A */                  INITIALIZE
 2629        CALL EMITINST (POPJ,15,0,0,0,0);                                            INITIALIZE
 2630        CALL EMITINST (MOVE,1,0,A,0,3);   /* SEE IF LENGTH(A) = 0 */                INITIALIZE
 2631        CALL EMITINST (AND,1,0,LENGTHMASK,0,1);                                     INITIALIZE
 2632        CALL EMITINST (JUMPN,1,0,PP+3,0,2);                                         INITIALIZE
 2633        CALL EMITINST (MOVE,0,0,B,0,3);   /* YES, RETURN WITH B */                  INITIALIZE
 2634        CALL EMITINST (POPJ,15,0,0,0,0);                                            INITIALIZE
 2635                                                                                    INITIALIZE
 2636        /*  WE HAVE TO CONSTRUCT A NEW STRING.  CHECK TO SEE IF STRING 'A'          INITIALIZE
 2637          IS ADJACENT TO THE FIRST AVAILABLE BYTE.  IF IT IS, WE NEED               INITIALIZE
 2638          ONLY ACTUALLY MOVE STRING 'B' AND DUMMY UP A NEW DESCRIPTOR.  */          INITIALIZE
 2639                                                                                    INITIALIZE
 2640        CALL EMITINST (ROT,1,0,9,0,0);     /* PUT L(A) IN LOW END */                INITIALIZE
 2641        CALL EMITINST (ADD,1,0,A,0,3);     /* ADD A DESC. */                        INITIALIZE
 2642        CALL EMITINST (AND,1,0,ADDRMASK,0,1); /* KEEP ONLY BYTE ADDRESS */          INITIALIZE
 2643        CALL EMITINST (ADD,0,0,A,0,3);     /* ADD L(B) TO DESC. A */                INITIALIZE
 2644        CALL EMITINST (MOVE,12,0,B,0,3);     /* GE DESC. B */                       INITIALIZE
 2645        CALL EMITINST (AND,12,0,ADDRMASK,0,1);/* KEEP BYTE ADDRESS */               INITIALIZE
 2646        CALL EMITINST (CAMN,12,0,1,0,0);    /* IS THIS SAME AS END(A)+1? */         INITIALIZE
 2647        CALL EMITINST (JRST,0,0,PP+11,0,2);  /*YES. THEN DONE */                    INITIALIZE
 2648        CALL EMITINST (CAML,1,0,TSA,0,1);  /* IS 'A' LAST STRING ? */               INITIALIZE
 2649        CALL EMITINST (JRST,0,0,PP+6,0,2); /* YES. JUMP TO JUST MOVE B */           INITIALIZE
 2650        CALL EMITINST (AND,0,0,LENGTHMASK,0,1); /* NO. MAKE NEW DESC. */            INITIALIZE
 2651        CALL EMITINST (IOR,0,0,TSA,0,1);  /* NEW DOPE VECTOR */                     INITIALIZE
 2652        CALL EMITINST (MOVE,1,0,TSA,0,1); /* TARGET OF MOVE */                      INITIALIZE
 2653        CALL EMITINST (MOVE,12,0,A,0,3);  /* SOURCE OF MOVE & LENGTH */             INITIALIZE
 2654        CALL EMITINST (PUSHJ,15,0,MOVER,0,2);   /* CALL MOVE SUBROUTINE */          INITIALIZE
 2655        CALL EMITINST (MOVE,12,0,B,0,3);  /* SOURCE OF MOVE */                      INITIALIZE
 2656        CALL EMITINST (PUSHJ,15,0,MOVER,0,2);   /* CALL MOVE SUBROUTINE*/           INITIALIZE
 2657        CALL EMITINST (MOVEM,1,0,TSA,0,1);/* SAVE NEW TSA */                        INITIALIZE
 2658        CALL EMITINST (MOVEM,0,0,STR,0,3);  /* SAVE LAST STRING DESCRIPTOR */       INITIALIZE
 2659        CALL EMITINST (POPJ,15,0,0,0,0);                                            INITIALIZE
 2660                                                                                    INITIALIZE
 2661   /* NUMBER TO STRING CONVERSION */                                                INITIALIZE
 2662                                                                                    INITIALIZE
 2663        NMBRENTRY = PP;                                                             INITIALIZE
 2664        /* USES REGISTERS 0,1,12,13 */                                              INITIALIZE
 2665                                                                                    INITIALIZE
 2666        CALL EMITBLOCK (1);                                                         INITIALIZE
 2667        C = DP - 1;                                                                 INITIALIZE
 2668        CALL CHECK_STRING_OVERFLOW;                                                 INITIALIZE
 2669        CALL EMITINST (MOVE,12,0,TSA,0,1);   /* GET LOC'N FIRST FREE BYTE*/         INITIALIZE
 2670        CALL EMITINST (SUBI,12,0,1,0,0);    /* ADJUST FOR IDBP */                   INITIALIZE
 2671        CALL EMITINST (MOVEI,13,0,0,0,0);    /* CLEAR 13 FOR SHIFT */               INITIALIZE
 2672        CALL EMITINST (LSHC,12,0,-2,0,0);    /* WORD ADDRESS TO 12 */               INITIALIZE
 2673        CALL EMITINST (ROT,13,0,2,0,0);      /* DISPL. TO 13 */                     INITIALIZE
 2674        CALL EMITINST (HLL,12,0,PSBITS,13,1);/* MAKE BYTE POINTER IN 12 */          INITIALIZE
 2675        CALL EMITINST (MOVE,0,0,C,0,1);      /* LOAD NUMBER TO BE CONVERTED */      INITIALIZE
 2676        CALL EMITINST (MOVEI,13,0,0,0,0);    /* CLEAR COUNT OF BYTES */             INITIALIZE
 2677        CALL EMITINST (JUMPGE,0,0,PP+5,0,2); /* JUMP AROUND SIGN IF >= 0 */         INITIALIZE
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 91
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2678        CALL EMITINST (MOVEI,1,0,BYTE('-'),0,0);/* PUT - INTO REG. */               INITIALIZE
 2679        CALL EMITINST (IDPB,1,0,12,0,0);     /* PUT BYTE AWAY */                    INITIALIZE
 2680        CALL EMITINST (MOVEI,13,0,1,0,0);    /* SET BYTE COUNT TO 1 */              INITIALIZE
 2681        CALL EMITINST (MOVM,0,0,0,0,0);      /* MAKE NUMBER POSITIVE */             INITIALIZE
 2682        CALL EMITINST (PUSHJ,15,0,PP+8,0,2); /* GENERATE BYTE STRING */             INITIALIZE
 2683        CALL EMITINST (ROT,13,0,-9,0,0);     /* PUT BYTE COUNT IN LENGTH */         INITIALIZE
 2684        CALL EMITINST (MOVE,0,0,TSA,0,1);    /* PICK STARTING ADDRESS OF STRING */  INITIALIZE
 2685        CALL EMITINST (ADD,0,0,13,0,0);      /* ADD LENGTH TO MAKE DESC. */         INITIALIZE
 2686        CALL EMITINST (ROT,13,0,9,0,0);      /* PUT COUNT BACK */                   INITIALIZE
 2687        CALL EMITINST (ADDM,13,0,TSA,0,1);   /* ADJUST TSA FOR NEXT TIME */         INITIALIZE
 2688        CALL EMITINST (MOVEM,0,0,STR,0,3);   /* SAVE NEW DESCRIPTOR */              INITIALIZE
 2689        CALL EMITINST (POPJ,15,0,0,0,0);     /* RETURN */                           INITIALIZE
 2690                                                                                    INITIALIZE
 2691        /* SUBROUTINE TO CONVERT NUMBER TO CHAR STRING BY REPETITIVE                INITIALIZE
 2692           DIVISION.  PUTS OUT DIGITS FROM HIGH-TO-LOW ORDER. */                    INITIALIZE
 2693                                                                                    INITIALIZE
 2694        CALL EMITINST (IDIVI,0,0,10,0,0);    /* QUOTIENT TO 0, REMAINDER TO 1 */    INITIALIZE
 2695        CALL EMITINST (HRLM,1,0,0,15,0);     /* SAVE REMAINDER ON STACK */          INITIALIZE
 2696        CALL EMITINST (JUMPE,0,0,PP+2,0,2);  /* IF QUOTIENT = 0, ALL DIGITS */      INITIALIZE
 2697        CALL EMITINST (PUSHJ,15,0,PP-3,0,2); /* LOOP BACK FOR NEXT DIGIT */         INITIALIZE
 2698        CALL EMITINST (HLRZ,1,0,0,15,0);     /* RETRIEVE DIGIT FROM STACK */        INITIALIZE
 2699        CALL EMITINST (ADDI,1,0,BYTE('0'),0,0); /* CONVERT TO ASCII CHARACTER */    INITIALIZE
 2700        CALL EMITINST (IDPB,1,0,12,0,0);     /* STUFF BYTE OUT */                   INITIALIZE
 2701        CALL EMITINST (ADDI,13,0,1,0,0);     /* INCREMENT BYTE COUNTER */           INITIALIZE
 2702        CALL EMITINST (POPJ,15,0,0,0,0);     /* RETURN (FOR MORE OR TO CALLER */    INITIALIZE
 2703                                                                                    INITIALIZE
 2704     /* THE COMPILED PROGRAM WILL BEGIN EXECUTION HERE.  MAKE THE FIRST JUMP        INITIALIZE
 2705        POINT HERE, INITIALIZE THE LIBRARY, AND FALL INTO COMPILE CODE.             INITIALIZE
 2706     */                                                                             INITIALIZE
 2707                                                                                    INITIALIZE
 2708        STARTLOC = PP;                      /* START LOCATION */                    INITIALIZE
 2709        CALL EMITLABEL (0,4);               /* ORG PROGRAM HERE */                  INITIALIZE
 2710        /* INITIALIZE LIBRARY ROUTINE, FREEBASE, FREELIMIT, & FREEPOINT */          INITIALIZE
 2711        CALL EMITINST (JUMP,0,0,0,0,0);   /* PATCH NOP */                           INITIALIZE
 2712        CALL EMITINST (1,0,0,0,0,0);      /* INIT LIB CODE */                       INITIALIZE
 2713        CALL EMITINST (MOVEM,12,0,TSA,0,1); /* SAVE AS FREEPOINT */                 INITIALIZE
 2714        CALL EMITINST (MOVEM,12,0,DP,0,1); /* SAVE AS FREEBASE */                   INITIALIZE
 2715        SYTLOC (27) = DP;                                                           INITIALIZE
 2716        CALL EMITDATAWORD (0);                                                      INITIALIZE
 2717        CALL EMITINST (SUBI,13,0,256,0,0);                                          INITIALIZE
 2718        CALL EMITINST (MOVEM,13,0,LIMITWORD,0,1); /* SAVE AS FREELIMIT */           INITIALIZE
 2719        /* ROUTINE TO RELOCATE STRING DESCRIPTORS */                                INITIALIZE
 2720        CALL EMITINST (MOVEI,12,0,0,0,1); /* GET ADDRESS OF DATA SEGMENT */         INITIALIZE
 2721        CALL EMITINST (LSH,12,0,  2,0,0);    /* MULTIPLY BY 4 FOR BYTE ADDRESS*/    INITIALIZE
 2722        CALL EMITINST (MOVE,13,0,NDESC,0,5);   /* GET # DESCRIPTORS AS INDEX */     INITIALIZE
 2723        CALL EMITINST (SKIPE,0,0,0,13,3); /* DON'T CHANGE NULL DESC.S */            INITIALIZE
 2724        CALL EMITINST (ADDM,12,0,0,13,3); /* ADD RELOC TO A DESCRIPTOR */           INITIALIZE
 2725        CALL EMITINST (SOJG,13,0,PP-2,0,2);    /* LOOP THRU ALL DESCRIPTORS */      INITIALIZE
 2726        CP = 0;  TEXT = '';  TEXT_LIMIT = -1;                                       INITIALIZE
 2727        COMPILING = TRUE;                                                           INITIALIZE
 2728        READING = CONTROL(BYTE('X'));                                               INITIALIZE
 2729        IF READING THEN                                                             INITIALIZE
 2730            CONTROL(BYTE('L')) = \ (CONTROL(BYTE('K')) ^ CONTROL(BYTE('M'))) & 1;   INITIALIZE
 2731        FILENAME(LIBFILE) = 'LIB:XPL.LIB';                                          INITIALIZE
 2732        CURRENT_PROCEDURE = '*';                                                    INITIALIZE
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 92
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2733        CALL SCAN;                                                                  INITIALIZE
 2734        NO_LOOK_AHEAD_DONE = FALSE;                                                 INITIALIZE
 2735     END INITIALIZE;                                                                INITIALIZE

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
CH              CHARACTER   864   STRING   2350       6
DATE1           FIXED     10276     DATA   2352       6
DAY             FIXED     10277     DATA   2352       2
HOURS           FIXED     10273     DATA   2351       2
L               FIXED     10279     DATA   2352       2
MINUTES         FIXED     10274     DATA   2351       2
MONTH           CHARACTER   865   STRING   2353       2
MONTHS          CHARACTER   866   STRING   2354       1
SECS            FIXED     10275     DATA   2351       2
TIME1           FIXED     10272     DATA   2351       4
YEAR            FIXED     10278     DATA   2352       2
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 93
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2736  STACK_DUMP:                                                                      *
 2737     PROCEDURE;                                                                    *
 2738        DECLARE LINE CHARACTER;                                                     STACK_DUMP
 2739        IF \ CONTROL(BYTE('R')) THEN RETURN;  /* 'R' IS BARF SWITCH */              STACK_DUMP
 2740        LINE = 'PARTIAL PARSE TO THIS POINT IS: ';                                  STACK_DUMP
 2741        DO I = 0 TO SP;                                                             STACK_DUMP
 2742           IF LENGTH(LINE) > 105 THEN                                               STACK_DUMP
 2743              DO;                                                                   STACK_DUMP
 2744                 CALL PRINTLINE (LINE,-1);                                          STACK_DUMP
 2745                 LINE = X4;                                                         STACK_DUMP
 2746              END;                                                                  STACK_DUMP
 2747           LINE = LINE ^^ X1 ^^ VOCAB(STATE_NAME(STATE_STACK(I)));                  STACK_DUMP
 2748        END;                                                                        STACK_DUMP
 2749        CALL PRINTLINE (LINE,-1);                                                   STACK_DUMP
 2750     END STACK_DUMP;                                                                STACK_DUMP

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
LINE            CHARACTER   929   STRING   2738       7
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 94
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2751                                                                                   *
 2752    /*                  THE SYNTHESIS ALGORITHM FOR XPL                      */    *
 2753                                                                                   *
 2754                                                                                   *
 2755  SYNTHESIZE:                                                                      *
 2756  PROCEDURE(PRODUCTION_NUMBER);                                                    *
 2757     DECLARE PRODUCTION_NUMBER FIXED;                                               SYNTHESIZE
 2758     DECLARE TOOMSG CHARACTER INITIAL ('TOO MANY ARGUMENTS FOR ');                  SYNTHESIZE
 2759                                                                                    SYNTHESIZE
 2760     STACK_CASE:                                                                    SYNTHESIZE
 2761        PROCEDURE (DATUM);                                                          SYNTHESIZE
 2762           DECLARE DATUM FIXED;                                                     STACK_CASE
 2763           DECLARE DCLRM CHARACTER                                                  STACK_CASE
 2764                 INITIAL ('TOO MANY CASES OR FACTORED DECLARATIONS');               STACK_CASE
 2765           IF CASEP >= CASELIMIT THEN CALL ERROR (DCLRM,1);                         STACK_CASE
 2766                                 ELSE CASEP = CASEP + 1;                            STACK_CASE
 2767           CASESTACK(CASEP) = DATUM;                                                STACK_CASE
 2768     END STACK_CASE;                                                                STACK_CASE

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
DATUM           FIXED     10486     DATA   2761       1
DCLRM           CHARACTER   932   STRING   2764       1
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 95
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2769                                                                                    SYNTHESIZE
 2770        DO CASE (PRODUCTION_NUMBER);                                                SYNTHESIZE
 2771     /*  ONE STATEMENT FOR EACH PRODUCTION OF THE GRAMMAR*/                         SYNTHESIZE CASE 0.
 2772     ;      /*  CASE 0 IS A DUMMY, BECAUSE WE NUMBER PRODUCTIONS FROM 1  */         SYNTHESIZE
 2773                                                                                    SYNTHESIZE CASE 1.
 2774  /*      1   <PROGRAM> ::= <STATEMENT LIST> EOF                       */           SYNTHESIZE
 2775  DO;  /* END OF COMPILING */                                                       SYNTHESIZE
 2776     COMPILING = FALSE;                                                             SYNTHESIZE
 2777     IF MP \= 0  THEN                                                               SYNTHESIZE
 2778        DO;                                                                         SYNTHESIZE
 2779           CALL ERROR ('INPUT DID NOT PARSE TO <PROGRAM>.', 1);                     SYNTHESIZE
 2780           CALL STACK_DUMP;                                                         SYNTHESIZE
 2781        END;                                                                        SYNTHESIZE
 2782     DO I = PROCMARK TO NDECSY;                                                     SYNTHESIZE
 2783        IF SYTYPE (I) = FORWARDTYPE ^ SYTYPE (I) = FORWARDCALL THEN                 SYNTHESIZE
 2784           IF SYTCO (I) > 0 THEN                                                    SYNTHESIZE
 2785               CALL ERROR ('UNDEFINED LABEL OR PROCEDURE: ' ^^ SYT(I),1);           SYNTHESIZE
 2786     END;                                                                           SYNTHESIZE
 2787        IF DPOFFSET > 0 THEN CALL FLUSH_DATACARD;                                   SYNTHESIZE
 2788  END;                                                                              SYNTHESIZE
 2789                                                                                    SYNTHESIZE CASE 2.
 2790  /*      2   <STATEMENT LIST> ::= <STATEMENT>                         */           SYNTHESIZE
 2791     ;                                                                              SYNTHESIZE
 2792  /*      3                      ^ <STATEMENT LIST> <STATEMENT>        */           SYNTHESIZE CASE 3.
 2793     ;                                                                              SYNTHESIZE
 2794  /*      4   <STATEMENT> ::= <BASIC STATEMENT>                        */           SYNTHESIZE CASE 4.
 2795     DO;                                                                            SYNTHESIZE
 2796        STATEMENT_COUNT = STATEMENT_COUNT + 1;                                      SYNTHESIZE
 2797        CALL CLEARARS;                                                              SYNTHESIZE
 2798     END;                                                                           SYNTHESIZE
 2799                                                                                    SYNTHESIZE CASE 5.
 2800  /*      5                 ^ <IF STATEMENT>                           */           SYNTHESIZE
 2801     CALL CLEARARS;                                                                 SYNTHESIZE
 2802  /*      6   <BASIC STATEMENT> ::= <ASSIGNMENT> ;                     */           SYNTHESIZE CASE 6.
 2803     ;                                                                              SYNTHESIZE
 2804  /*      7                       ^ <GROUP> ;                          */           SYNTHESIZE CASE 7.
 2805     ;                                                                              SYNTHESIZE
 2806  /*      8                       ^ <PROCEDURE DEFINITION> ;           */           SYNTHESIZE CASE 8.
 2807     ;                                                                              SYNTHESIZE
 2808  /*      9                       ^ <RETURN STATEMENT> ;               */           SYNTHESIZE CASE 9.
 2809     ;                                                                              SYNTHESIZE
 2810  /*     10                       ^ <CALL STATEMENT> ;                 */           SYNTHESIZE CASE 10.
 2811     ;                                                                              SYNTHESIZE
 2812  /*     11                       ^ <GO TO STATEMENT> ;                */           SYNTHESIZE CASE 11.
 2813     ;                                                                              SYNTHESIZE
 2814  /*     12                       ^ <DECLARATION STATEMENT> ;          */           SYNTHESIZE CASE 12.
 2815     ;                                                                              SYNTHESIZE
 2816  /*     13                       ^ ;                                  */           SYNTHESIZE CASE 13.
 2817     ;                                                                              SYNTHESIZE
 2818  /*     14                       ^ <LABEL DEFINITION>                 */           SYNTHESIZE CASE 14.
 2819  /*     14                         <BASIC STATEMENT>                  */           SYNTHESIZE
 2820     ;                                                                              SYNTHESIZE
 2821  /*     15   <IF STATEMENT> ::= <IF CLAUSE> <STATEMENT>               */           SYNTHESIZE CASE 15.
 2822     CALL EMITLABEL(FIXL(MP),4);            /* FIX ESCAPE BRANCH */                 SYNTHESIZE
 2823  /*     16                    ^ <IF CLAUSE> <TRUE PART> <STATEMENT>   */           SYNTHESIZE CASE 16.
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 96
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2824     CALL EMITLABEL (FIXL(MPP1),4);         /* FIX ESCAPE BRANCH */                 SYNTHESIZE
 2825  /*     17                    ^ <LABEL DEFINITION> <IF STATEMENT>     */           SYNTHESIZE CASE 17.
 2826     ;                                                                              SYNTHESIZE
 2827  /*     18   <IF CLAUSE> ::= IF <EXPRESSION> THEN                     */           SYNTHESIZE CASE 18.
 2828        CALL BOOLBRANCH(MPP1,MP);  /* BRANCH ON FALSE OVER TRUE PART */             SYNTHESIZE
 2829                                                                                    SYNTHESIZE CASE 19.
 2830  /*     19   <TRUE PART> ::= <BASIC STATEMENT> ELSE                   */           SYNTHESIZE
 2831     DO; /* SAVE THE PROGRAM POINTER AND EMIT THE CONDITIONAL BRANCH */             SYNTHESIZE
 2832        FIXL(MP) = FINDLABEL;                                                       SYNTHESIZE
 2833        CALL EMITINST(JRST ,0,0,FIXL(MP),0,4);                                      SYNTHESIZE
 2834        CALL EMITLABEL (FIXL(MP-1),4);      /* COMPLETE HOP AROUND TRUE */          SYNTHESIZE
 2835        CALL CLEARARS;                                                              SYNTHESIZE
 2836     END;                                                                           SYNTHESIZE
 2837                                                                                    SYNTHESIZE CASE 20.
 2838  /*     20   <GROUP> ::= <GROUP HEAD> <ENDING>                        */           SYNTHESIZE
 2839          /* BRANCH BACK TO LOOP AND FIX ESCAPE BRANCH */                           SYNTHESIZE
 2840        IF INX (MP) = 1 ^ INX (MP) = 2 THEN                                         SYNTHESIZE
 2841           DO;  /* STEP OR WHILE LOOP FIXUP */                                      SYNTHESIZE
 2842              CALL EMITINST (JRST ,0,0,PPSAVE(MP),0,2);                             SYNTHESIZE
 2843              CALL EMITLABEL(FIXL(MP),4);                                           SYNTHESIZE
 2844           END;                                                                     SYNTHESIZE
 2845         ELSE IF INX (MP) = 3 THEN                                                  SYNTHESIZE
 2846           DO;  /* CASE GROUP */                                                    SYNTHESIZE
 2847              CALL EMITLABEL(FIXL(MP),4);   /* FIX BRANCH INTO JUMP LIST */         SYNTHESIZE
 2848              DO I = PPSAVE (MP) TO CASEP - 1;                                      SYNTHESIZE
 2849                 CALL EMITINST (JRST ,0,0,CASESTACK(I),0,2); /* JUMP LIST */        SYNTHESIZE
 2850                 END;                                                               SYNTHESIZE
 2851              CASEP = PPSAVE (MP) - 1;                                              SYNTHESIZE
 2852              CALL EMITLABEL(FIXV(MP),4);   /* FIX ESCAPE BRANCH */                 SYNTHESIZE
 2853           END;                                                                     SYNTHESIZE
 2854                                                                                    SYNTHESIZE
 2855  /*     21   <GROUP HEAD> ::= DO ;                                    */           SYNTHESIZE
 2856     INX (MP) = 0;                       /* ZERO DENOTES ORDINARY GROUP */          SYNTHESIZE
 2857                                                                                    SYNTHESIZE CASE 21. CASE 22.
 2858  /*     22                  ^ DO <STEP DEFINITION> ;                  */           SYNTHESIZE
 2859     DO;                                                                            SYNTHESIZE
 2860        CALL MOVESTACKS (MPP1, MP);                                                 SYNTHESIZE
 2861        INX (MP) = 1;                    /* ONE DENOTES STEP */                     SYNTHESIZE
 2862        CALL CLEARARS;                                                              SYNTHESIZE
 2863     END;                                                                           SYNTHESIZE
 2864                                                                                    SYNTHESIZE CASE 23.
 2865  /*     23                  ^ DO <WHILE CLAUSE> ;                     */           SYNTHESIZE
 2866     DO;                                                                            SYNTHESIZE
 2867        CALL MOVESTACKS (MPP1,MP);                                                  SYNTHESIZE
 2868        INX (MP) = 2;                    /* TWO DENOTES WHILE */                    SYNTHESIZE
 2869        CALL CLEARARS;                                                              SYNTHESIZE
 2870     END;                                                                           SYNTHESIZE
 2871                                                                                    SYNTHESIZE CASE 24.
 2872  /*     24                  ^ DO <CASE SELECTOR> ;                    */           SYNTHESIZE
 2873     DO;                                                                            SYNTHESIZE
 2874        CALL MOVESTACKS (MPP1, MP);                                                 SYNTHESIZE
 2875        INX (MP) = 3;                    /* THREE DENOTES CASE */                   SYNTHESIZE
 2876        CALL CLEARARS;                                                              SYNTHESIZE
 2877        INFO = INFO ^^ ' CASE 0.';                                                  SYNTHESIZE
 2878     END;                                                                           SYNTHESIZE
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 97
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2879                                                                                    SYNTHESIZE CASE 25.
 2880  /*     25                  ^ <GROUP HEAD> <STATEMENT>                */           SYNTHESIZE
 2881     IF INX (MP) = 3 THEN                                                           SYNTHESIZE
 2882        DO; /* CASE GROUP, MUST RECORD STATEMENT ADDRESSES */                       SYNTHESIZE
 2883           CALL EMITINST (JRST ,0,0,FIXV(MP),0,4);                                  SYNTHESIZE
 2884           CALL STACK_CASE (PP);                                                    SYNTHESIZE
 2885           INFO = INFO ^^ ' CASE ' ^^ CASEP - PPSAVE(MP) ^^ '.';                    SYNTHESIZE
 2886        END;                                                                        SYNTHESIZE
 2887                                                                                    SYNTHESIZE
 2888  /*     26   <STEP DEFINITION> ::= <VARIABLE> <REPLACE>               */           SYNTHESIZE
 2889  /*     26                         <EXPRESSION> <ITERATION CONTROL>   */           SYNTHESIZE
 2890     DO; /* EMIT CODE FOR STEPPING DO LOOPS */                                      SYNTHESIZE
 2891        CALL FORCEACCUMULATOR (MP+2);     /* GET INITIAL VALUE */                   SYNTHESIZE CASE 26.
 2892        STEPK = FINDLABEL;                                                          SYNTHESIZE
 2893        CALL EMITINST (JRST ,0,0,STEPK,0,4);/* BRANCH AROUND INCR CODE */           SYNTHESIZE
 2894        PPSAVE(MP) = PP;                  /* SAVE ADDRESS FOR LATER FIX */          SYNTHESIZE
 2895        IF CNT (MP) > 0 THEN CALL ERROR ('DO INDEX MAY NOT BE SUBSCRIPTED',0);      SYNTHESIZE
 2896                                                                                    SYNTHESIZE
 2897                         /*  INCREMENT INDUCTION VARIABLE */                        SYNTHESIZE
 2898        IF SYTYPE(FIXL(MP)) = FIXEDTYPE & FIXL(SP) = TRUELOC THEN                   SYNTHESIZE
 2899           DO;           /* USE AOS IF INCREMENTING BY 1 */                         SYNTHESIZE
 2900              REG(MP) = REG(MP+2);                                                  SYNTHESIZE
 2901              CALL EMITINST (AOSA,REG(MP),0,SYTLOC(FIXL(MP)),0,1);                  SYNTHESIZE
 2902              TYPE(MP) = ACCUMULATOR;                                               SYNTHESIZE
 2903           END;                                                                     SYNTHESIZE
 2904        ELSE                                                                        SYNTHESIZE
 2905           DO;           /* CAN'T USE AOS INST. */                                  SYNTHESIZE
 2906              ACC(REG(MP+2)) = AVAIL;     /* MAKE SURE SAME REGISTER IS USED */     SYNTHESIZE
 2907              TARGET_REGISTER = REG(MP+2);                                          SYNTHESIZE
 2908              CALL FORCEACCUMULATOR (MP); /* FETCH THE INDEX     */                 SYNTHESIZE
 2909              TARGET_REGISTER = -1;                                                 SYNTHESIZE
 2910              CALL EMITINST(ADD,REG(MP),0,FIXL(MP+3),0,1);                          SYNTHESIZE
 2911           END;                                                                     SYNTHESIZE
 2912                         /* UPDATE INDUCTION VARIABLE AND TEST FOR END */           SYNTHESIZE
 2913        CALL EMITLABEL(STEPK,4);                                                    SYNTHESIZE
 2914        CALL GENSTORE (MP,MP);                                                      SYNTHESIZE
 2915        CALL EMITINST (CAMLE,REG(MP),0,FIXV(SP),0,1);                               SYNTHESIZE
 2916        FIXL (MP) = FINDLABEL;                                                      SYNTHESIZE
 2917        CALL EMITINST (JRST ,0,0,FIXL(MP),0,4);                                     SYNTHESIZE
 2918        ACC(REG(MP)) = AVAIL;                                                       SYNTHESIZE
 2919     END;                                                                           SYNTHESIZE
 2920                                                                                    SYNTHESIZE CASE 27.
 2921  /*     27   <ITERATION CONTROL> ::= TO <EXPRESSION>                  */           SYNTHESIZE
 2922     DO;                                                                            SYNTHESIZE
 2923        FIXL(MP) = TRUELOC;   /* POINT AT THE CONSTANT ONE FOR STEP */              SYNTHESIZE
 2924        CALL SETLIMIT;                                                              SYNTHESIZE
 2925     END;                                                                           SYNTHESIZE
 2926                                                                                    SYNTHESIZE CASE 28.
 2927  /*     28                         ^ TO <EXPRESSION> BY               */           SYNTHESIZE
 2928  /*     28                           <EXPRESSION>                     */           SYNTHESIZE
 2929     DO;                                                                            SYNTHESIZE
 2930        IF TYPE (SP) = CONSTANT THEN CALL EMITCONSTANT (FIXV(SP));                  SYNTHESIZE
 2931        ELSE                                                                        SYNTHESIZE
 2932           DO;                                                                      SYNTHESIZE
 2933              CALL FORCEACCUMULATOR (SP);                                           SYNTHESIZE
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 98
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2934              CALL EMITDATAWORD (0);                                                SYNTHESIZE
 2935              ADR = DP - 1;                                                         SYNTHESIZE
 2936              CALL EMITINST (MOVEM,REG(SP),0,ADR,0,1);                              SYNTHESIZE
 2937              ACC(REG(SP)) = AVAIL;                                                 SYNTHESIZE
 2938           END;                                                                     SYNTHESIZE
 2939        FIXL (MP) =ADR;                                                             SYNTHESIZE
 2940        CALL SETLIMIT;                                                              SYNTHESIZE
 2941     END;                                                                           SYNTHESIZE
 2942                                                                                    SYNTHESIZE CASE 29.
 2943  /*     29   <WHILE CLAUSE> ::= WHILE <EXPRESSION>                    */           SYNTHESIZE
 2944     CALL BOOLBRANCH (SP,MP);                                                       SYNTHESIZE
 2945                                                                                    SYNTHESIZE CASE 30.
 2946  /*     30   <CASE SELECTOR> ::= CASE <EXPRESSION>                    */           SYNTHESIZE
 2947     /* THE FOLLOWING USE IS MADE OF THE PARALLEL STACKS BELOW <CASE SELECTOR>      SYNTHESIZE
 2948           PPSAVE     PREVIOUS MAXIMUM CASE STACK POINTER                           SYNTHESIZE
 2949           FIXL       ADDRESS OF INDEXED GOTO INTO LIST                             SYNTHESIZE
 2950           FIXV       ADDRESS OF ESCAPE GOTO FOR CASES                              SYNTHESIZE
 2951     */                                                                             SYNTHESIZE
 2952     DO;                                                                            SYNTHESIZE
 2953        CALL FORCEACCUMULATOR (SP);       /* GET THE INDEX IN TO AR */              SYNTHESIZE
 2954        ACC(REG(SP)) = AVAIL;                                                       SYNTHESIZE
 2955        FIXL(MP) = FINDLABEL;                                                       SYNTHESIZE
 2956        CALL EMITINST (JRST ,0,1,FIXL(MP),REG(SP),4);/* INDIRECT INDEXED BRANCH */  SYNTHESIZE
 2957        FIXV(MP) = FINDLABEL;             /* ADDRESS OF ESCAPE BRANCH */            SYNTHESIZE
 2958        CALL STACK_CASE (PP);                                                       SYNTHESIZE
 2959        PPSAVE (MP) = CASEP;                                                        SYNTHESIZE
 2960     END;                                                                           SYNTHESIZE
 2961                                                                                    SYNTHESIZE CASE 31.
 2962  /*     31   <PROCEDURE DEFINITION> ::= <PROCEDURE HEAD>              */           SYNTHESIZE
 2963  /*     31                              <STATEMENT LIST> <ENDING>     */           SYNTHESIZE
 2964     /* THE FOLLOWING USE IS MADE OF THE PARALLEL STACKS BELOW                      SYNTHESIZE
 2965        <PROCEDURE HEAD>                                                            SYNTHESIZE
 2966        PPSAVE           ADDRESS OF PREVIOUS PROC RETURN                            SYNTHESIZE
 2967        FIXL             ADDRESS OF PREVIOUS PROC ACCUMULATOR AREA                  SYNTHESIZE
 2968        FIXV             POINTER TO SYMBOL TABLE FOR THIS BLOCK                     SYNTHESIZE
 2969        CNT              COUNT OF THE PARAMETERS OF PREVIOUS PROC                   SYNTHESIZE
 2970     */                                                                             SYNTHESIZE
 2971     DO;   /* PROCEDURE IS DEFINED, RESTORE SYMBOL TABLE */                         SYNTHESIZE
 2972        IF LENGTH (VAR(SP)) > 0 THEN                                                SYNTHESIZE
 2973           IF SUBSTR (CURRENT_PROCEDURE,1) \= VAR(SP) THEN                          SYNTHESIZE
 2974              CALL ERROR ('PROCEDURE' ^^ CURRENT_PROCEDURE ^^ ' CLOSED BY END '     SYNTHESIZE
 2975                          ^^ VAR(SP), 0);                                           SYNTHESIZE
 2976        IF CONTROL(BYTE('S')) THEN CALL SYMBOLDUMP;                                 SYNTHESIZE
 2977        DO I = PROCMARK TO NDECSY;                                                  SYNTHESIZE
 2978           IF SYTYPE (I) = FORWARDTYPE ^ SYTYPE (I) = FORWARDCALL THEN              SYNTHESIZE
 2979              IF SYTCO (I) > 0 THEN                                                 SYNTHESIZE
 2980                 CALL ERROR ('UNDEFINED LABEL OR PROCEDURE: ' ^^ SYT (I), 1);       SYNTHESIZE
 2981        END;                                                                        SYNTHESIZE
 2982        DO I = 0 TO (NDECSY + 1) - (PROCMARK + PARCT);                              SYNTHESIZE
 2983           J = NDECSY - I;                                                          SYNTHESIZE
 2984           IF (J >= (PROCMARK + PARCT)) & (LENGTH(SYT(J)) > 0) THEN                 SYNTHESIZE
 2985              DO;                                                                   SYNTHESIZE
 2986                 HASH (HASHER(SYT(J))) = PTR (J);                                   SYNTHESIZE
 2987                 PTR (J) = -1;                                                      SYNTHESIZE
 2988              END;                                                                  SYNTHESIZE
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 99
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2989        END;                                                                        SYNTHESIZE
 2990        DO I = PROCMARK + PARCT TO NDECSY;                                          SYNTHESIZE
 2991            SYT (I) = X1;                                                           SYNTHESIZE
 2992        END;                                                                        SYNTHESIZE
 2993        NDECSY = PROCMARK + PARCT - 1;                                              SYNTHESIZE
 2994        /* PARAMETER ADDRESSES MUST BE SAVED BUT NAMES DISCARDED */                 SYNTHESIZE
 2995        IF PARCT > 0 THEN                                                           SYNTHESIZE
 2996           DO J = 0 TO NDECSY - PROCMARK;                                           SYNTHESIZE
 2997              I = NDECSY - J;                                                       SYNTHESIZE
 2998              IF SYTYPE (I) = 0 THEN                                                SYNTHESIZE
 2999                 DO;                                                                SYNTHESIZE
 3000                    CALL ERROR ('UNDECLARED PARAMETER: ' ^^ SYT (I), 0);            SYNTHESIZE
 3001                    SYTYPE (I) = FIXEDTYPE;                                         SYNTHESIZE
 3002                    CALL EMITDATAWORD (0);                                          SYNTHESIZE
 3003                    SYTLOC(I) = DP -1;                                              SYNTHESIZE
 3004                 END;                                                               SYNTHESIZE
 3005              HASH (HASHER(SYT(I))) = PTR (I);                                      SYNTHESIZE
 3006              PTR (I) = -1;                                                         SYNTHESIZE
 3007              SYT (I) = '';                                                         SYNTHESIZE
 3008           END;                                                                     SYNTHESIZE
 3009        PROCMARK = FIXV (MP);                                                       SYNTHESIZE
 3010        PARCT = CNT (MP);                                                           SYNTHESIZE
 3011        CURRENT_PROCEDURE = VAR (MP);                                               SYNTHESIZE
 3012        /* EMIT A GRATUITOUS RETURN */                                              SYNTHESIZE
 3013        CALL EMITINST (POPJ,15,0,0,0,0);                                            SYNTHESIZE
 3014        /* COMPLETE JUMP AROUND THE PROCEDURE DEFINITION */                         SYNTHESIZE
 3015        CALL EMITLABEL(PPSAVE(MP),4);                                               SYNTHESIZE
 3016        RETURNED_TYPE = TYPE(MP);                                                   SYNTHESIZE
 3017     END;                                                                           SYNTHESIZE
 3018                                                                                    SYNTHESIZE CASE 32.
 3019  /*     32   <PROCEDURE HEAD> ::= <PROCEDURE NAME> ;                  */           SYNTHESIZE
 3020     DO;      /* MUST POINT AT FIRST PARAMETER EVEN IF NON EXISTANT */              SYNTHESIZE
 3021        /* SAVE OLD PARAMETER COUNT */                                              SYNTHESIZE
 3022        CNT (MP) = PARCT;                                                           SYNTHESIZE
 3023        PARCT = 0;                                                                  SYNTHESIZE
 3024        /* SAVE OLD PROCEDURE MARK IN SYMBOL TABLE */                               SYNTHESIZE
 3025        FIXV(MP) = PROCMARK;                                                        SYNTHESIZE
 3026        PROCMARK = NDECSY + 1;                                                      SYNTHESIZE
 3027        TYPE(MP) = RETURNED_TYPE;                                                   SYNTHESIZE
 3028        RETURNED_TYPE = 0;                                                          SYNTHESIZE
 3029        CALL PROC_START;                                                            SYNTHESIZE
 3030     END;                                                                           SYNTHESIZE
 3031                                                                                    SYNTHESIZE CASE 33.
 3032  /*     33                      ^ <PROCEDURE NAME> <TYPE> ;           */           SYNTHESIZE
 3033     DO;                                                                            SYNTHESIZE
 3034        CNT (MP) = PARCT;           /* SAVE OLD PARAMETER COUNT */                  SYNTHESIZE
 3035        PARCT = 0;                                                                  SYNTHESIZE
 3036        FIXV(MP) = PROCMARK;        /* SAVE OLD PROCEDURE MARK IN SYMBOL TABLE */   SYNTHESIZE
 3037        PROCMARK = NDECSY + 1;                                                      SYNTHESIZE
 3038        TYPE(MP) = RETURNED_TYPE;                                                   SYNTHESIZE
 3039        RETURNED_TYPE = TYPE(SP-1);                                                 SYNTHESIZE
 3040        IF RETURNED_TYPE = CHRTYPE THEN SYTYPE(FIXL(MP)) = CHARPROCTYPE;            SYNTHESIZE
 3041        CALL PROC_START;                                                            SYNTHESIZE
 3042     END;                                                                           SYNTHESIZE
 3043                                                                                    SYNTHESIZE CASE 34.
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 100
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3044  /*     34                      ^ <PROCEDURE NAME> <PARAMETER LIST>   */           SYNTHESIZE
 3045  /*     34                        ;                                   */           SYNTHESIZE
 3046     DO;                                                                            SYNTHESIZE
 3047        CNT(MP) = CNT(MPP1);  /* SAVE PARAMETER COUNT */                            SYNTHESIZE
 3048        FIXV(MP) = FIXV (MPP1);                                                     SYNTHESIZE
 3049        TYPE(MP) = RETURNED_TYPE;                                                   SYNTHESIZE
 3050        RETURNED_TYPE = 0;                                                          SYNTHESIZE
 3051        CALL PROC_START;                                                            SYNTHESIZE
 3052     END;                                                                           SYNTHESIZE
 3053                                                                                    SYNTHESIZE CASE 35.
 3054  /*     35                      ^ <PROCEDURE NAME> <PARAMETER LIST>   */           SYNTHESIZE
 3055  /*     35                        <TYPE> ;                            */           SYNTHESIZE
 3056     DO;                                                                            SYNTHESIZE
 3057        CNT(MP) = CNT(MPP1);  /* SAVE PARAMETER COUNT */                            SYNTHESIZE
 3058        FIXV(MP) = FIXV (MPP1);                                                     SYNTHESIZE
 3059        TYPE(MP) = RETURNED_TYPE;                                                   SYNTHESIZE
 3060        RETURNED_TYPE = TYPE(SP-1);                                                 SYNTHESIZE
 3061        IF RETURNED_TYPE = CHRTYPE THEN SYTYPE(FIXL(MP)) = CHARPROCTYPE;            SYNTHESIZE
 3062        CALL PROC_START;                                                            SYNTHESIZE
 3063     END;                                                                           SYNTHESIZE
 3064                                                                                    SYNTHESIZE CASE 36.
 3065  /*     36   <PROCEDURE NAME> ::= <LABEL DEFINITION> PROCEDURE        */           SYNTHESIZE
 3066     DO;                                                                            SYNTHESIZE
 3067        SYTYPE (FIXL (MP)) = PROCTYPE;                                              SYNTHESIZE
 3068        S = CURRENT_PROCEDURE;                                                      SYNTHESIZE
 3069        CURRENT_PROCEDURE = X1 ^^ VAR (MP);                                         SYNTHESIZE
 3070        VAR (MP) = S;                                                               SYNTHESIZE
 3071     END;                                                                           SYNTHESIZE
 3072                                                                                    SYNTHESIZE CASE 37.
 3073                                                                                    SYNTHESIZE
 3074  /*     37   <PARAMETER LIST> ::= <PARAMETER HEAD> <IDENTIFIER> )     */           SYNTHESIZE
 3075     DO;                                                                            SYNTHESIZE
 3076        PARCT = PARCT + 1;   /* BUMP THE PARAMETER COUNT */                         SYNTHESIZE
 3077        CALL ENTER (VAR(MPP1), 0, 0, 0);                                            SYNTHESIZE
 3078     END;                                                                           SYNTHESIZE
 3079                                                                                    SYNTHESIZE CASE 38.
 3080  /*     38   <PARAMETER HEAD> ::= (                                   */           SYNTHESIZE
 3081     DO;  /* POINT AT THE FIRST PARAMETER FOR SYMBOL TABLE */                       SYNTHESIZE
 3082        FIXV(MP) = PROCMARK;                                                        SYNTHESIZE
 3083        PROCMARK = NDECSY + 1;                                                      SYNTHESIZE
 3084        CNT (MP) = PARCT;        /* SAVE OLD PARAMETER COUNT */                     SYNTHESIZE
 3085        PARCT = 0;                                                                  SYNTHESIZE
 3086     END;                                                                           SYNTHESIZE
 3087                                                                                    SYNTHESIZE CASE 39.
 3088  /*     39                      ^ <PARAMETER HEAD> <IDENTIFIER> ,     */           SYNTHESIZE
 3089     DO;                                                                            SYNTHESIZE
 3090         PARCT = PARCT + 1;          /* BUMP THE PARAMETER COUNT */                 SYNTHESIZE
 3091        CALL ENTER (VAR(MPP1), 0, 0, 0);                                            SYNTHESIZE
 3092     END;                                                                           SYNTHESIZE
 3093                                                                                    SYNTHESIZE CASE 40.
 3094  /*     40   <ENDING> ::= END                                         */           SYNTHESIZE
 3095     ;                                                                              SYNTHESIZE
 3096  /*     41              ^ END <IDENTIFIER>                            */           SYNTHESIZE CASE 41.
 3097     VAR (MP) = VAR (SP);                                                           SYNTHESIZE
 3098                                                                                    SYNTHESIZE CASE 42.
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 101
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3099  /*     42              ^ <LABEL DEFINITION> <ENDING>                 */           SYNTHESIZE
 3100     ;                                                                              SYNTHESIZE
 3101  /*     43   <LABEL DEFINITION> ::= <IDENTIFIER> :                    */           SYNTHESIZE CASE 43.
 3102     FIXL(MP) = ENTER (VAR(MP), LABELTYPE, PP, 2);                                  SYNTHESIZE
 3103                                                                                    SYNTHESIZE CASE 44.
 3104  /*     44   <RETURN STATEMENT> ::= RETURN                            */           SYNTHESIZE
 3105     DO;                                                                            SYNTHESIZE
 3106        CALL EMITINST (POPJ,15,0,0,0,0);                                            SYNTHESIZE
 3107     END;                                                                           SYNTHESIZE
 3108                                                                                    SYNTHESIZE CASE 45.
 3109  /*     45                        ^ RETURN <EXPRESSION>               */           SYNTHESIZE
 3110     DO;  /* EMIT A RETURN AND PASS A VALUE */                                      SYNTHESIZE
 3111        TARGET_REGISTER = 0;                                                        SYNTHESIZE
 3112        IF RETURNED_TYPE = CHRTYPE THEN                                             SYNTHESIZE
 3113           CALL FORCEDESCRIPTOR(SP);                                                SYNTHESIZE
 3114        ELSE                                                                        SYNTHESIZE
 3115           CALL FORCEACCUMULATOR (SP);                                              SYNTHESIZE
 3116        TARGET_REGISTER = -1;                                                       SYNTHESIZE
 3117        IF REG(SP) \= 0 THEN CALL EMITINST(MOVE,0,0,REG(SP),0,0);                   SYNTHESIZE
 3118        CALL EMITINST (POPJ,15,0,0,0,0);                                            SYNTHESIZE
 3119     END;                                                                           SYNTHESIZE
 3120                                                                                    SYNTHESIZE CASE 46.
 3121  /*     46   <CALL STATEMENT> ::= CALL <VARIABLE>                     */           SYNTHESIZE
 3122     DO;                                                                            SYNTHESIZE
 3123        I = SYTYPE(FIXL(SP));                                                       SYNTHESIZE
 3124        IF I=PROCTYPE ^ I=FORWARDCALL ^ I = CHARPROCTYPE                            SYNTHESIZE
 3125                      ^ (I=SPECIAL & SYTLOC(FIXL(SP))=12)                           SYNTHESIZE
 3126                      ^ (I=SPECIAL & SYTLOC(FIXL(SP))=9)  THEN                      SYNTHESIZE
 3127           DO;                                                                      SYNTHESIZE
 3128              CALLTYPE = 0;               /* NO RETURN VALUE */                     SYNTHESIZE
 3129              CALL FORCEACCUMULATOR(SP);                                            SYNTHESIZE
 3130              CALLTYPE = 1;                                                         SYNTHESIZE
 3131           END;                                                                     SYNTHESIZE
 3132        ELSE CALL ERROR ('UNDEFINED PROCEDURE: ' ^^ SYT(FIXL(SP)),0);               SYNTHESIZE
 3133     END;                                                                           SYNTHESIZE
 3134                                                                                    SYNTHESIZE CASE 47.
 3135  /*     47   <GO TO STATEMENT> ::= <GO TO> <IDENTIFIER>               */           SYNTHESIZE
 3136     DO;                                                                            SYNTHESIZE
 3137        CALL ID_LOOKUP(SP);                                                         SYNTHESIZE
 3138        J = FIXL (SP);                                                              SYNTHESIZE
 3139        IF J < 0 THEN                                                               SYNTHESIZE
 3140           DO;  /* FIRST OCURRANCE OF THE LABEL */                                  SYNTHESIZE
 3141              I = FINDLABEL;                                                        SYNTHESIZE
 3142              CALL EMITINST (JRST ,0,0,I,0,4);                                      SYNTHESIZE
 3143              J = ENTER (VAR(SP),FORWARDTYPE,I,4);                                  SYNTHESIZE
 3144              SYTCO (J) = 1;                                                        SYNTHESIZE
 3145           END;                                                                     SYNTHESIZE
 3146        ELSE IF SYTYPE(J) = LABELTYPE ^ SYTYPE(J) = FORWARDTYPE THEN                SYNTHESIZE
 3147            CALL EMITINST (JRST ,0,0,SYTLOC(J),0,SYTSEG(J));                        SYNTHESIZE
 3148        ELSE                                                                        SYNTHESIZE
 3149          CALL ERROR ('TARGET OF GOTO IS NOT A LABEL', 0);                          SYNTHESIZE
 3150     END;                                                                           SYNTHESIZE
 3151                                                                                    SYNTHESIZE CASE 48.
 3152  /*     48   <GO TO> ::= GO TO                                        */           SYNTHESIZE
 3153     ;                                                                              SYNTHESIZE
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 102
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3154  /*     49             ^ GOTO                                         */           SYNTHESIZE CASE 49.
 3155     ;                                                                              SYNTHESIZE
 3156  /*     50   <DECLARATION STATEMENT> ::= DECLARE                      */           SYNTHESIZE CASE 50.
 3157  /*     50                               <DECLARATION ELEMENT>        */           SYNTHESIZE
 3158     ;                                                                              SYNTHESIZE
 3159  /*     51                             ^ <DECLARATION STATEMENT> ,    */           SYNTHESIZE CASE 51.
 3160  /*     51                               <DECLARATION ELEMENT>        */           SYNTHESIZE
 3161     ;                                                                              SYNTHESIZE
 3162  /*     52   <DECLARATION ELEMENT> ::= <TYPE DECLARATION>             */           SYNTHESIZE CASE 52.
 3163        IF TYPE (MP) = CHRTYPE THEN                                                 SYNTHESIZE
 3164           DO WHILE (DSP < NEWDSP);                                                 SYNTHESIZE
 3165              CALL EMITDESC (0,0);                                                  SYNTHESIZE
 3166           END;                                                                     SYNTHESIZE
 3167        ELSE                                                                        SYNTHESIZE
 3168           DO;                                                                      SYNTHESIZE
 3169              IF DP < NEWDP THEN                                                    SYNTHESIZE
 3170                 DO;                                                                SYNTHESIZE
 3171                    IF DPOFFSET > 0 THEN CALL FLUSH_DATACARD;                       SYNTHESIZE
 3172                    IF DP < NEWDP THEN CALL EMITBLOCK (NEWDP-DP);                   SYNTHESIZE
 3173                 END;                                                               SYNTHESIZE
 3174              DO WHILE (DPOFFSET < NEWDPOFFSET);                                    SYNTHESIZE
 3175                 CALL EMITBYTE(0);                                                  SYNTHESIZE
 3176              END;                                                                  SYNTHESIZE
 3177           END;                                                                     SYNTHESIZE
 3178                                                                                    SYNTHESIZE CASE 53.
 3179  /*     53                           ^ <IDENTIFIER> LITERALLY         */           SYNTHESIZE
 3180  /*     53                             <STRING>                       */           SYNTHESIZE
 3181     IF TOP_MACRO >= MACRO_LIMIT THEN                                               SYNTHESIZE
 3182        CALL ERROR ('MACRO TABLE OVERFLOW', 1);                                     SYNTHESIZE
 3183     ELSE DO;                                                                       SYNTHESIZE
 3184        TOP_MACRO = TOP_MACRO + 1;                                                  SYNTHESIZE
 3185        I = LENGTH(VAR(MP));                                                        SYNTHESIZE
 3186        J = MACRO_INDEX(I);                                                         SYNTHESIZE
 3187        DO L = 1 TO TOP_MACRO - J;                                                  SYNTHESIZE
 3188           K = TOP_MACRO - L;                                                       SYNTHESIZE
 3189           MACRO_NAME(K+1) = MACRO_NAME(K);                                         SYNTHESIZE
 3190           MACRO_TEXT(K+1) = MACRO_TEXT(K);                                         SYNTHESIZE
 3191           MACRO_COUNT(K+1) = MACRO_COUNT(K);                                       SYNTHESIZE
 3192           MACRO_DECLARE(K+1) = MACRO_DECLARE(K);                                   SYNTHESIZE
 3193        END;                                                                        SYNTHESIZE
 3194        MACRO_NAME(J) = VAR(MP);                                                    SYNTHESIZE
 3195        MACRO_TEXT(J) = VAR(SP);                                                    SYNTHESIZE
 3196        MACRO_COUNT(J) = 0;                                                         SYNTHESIZE
 3197        MACRO_DECLARE(J) = CARD_COUNT;                                              SYNTHESIZE
 3198        DO J = I TO 255;                                                            SYNTHESIZE
 3199           MACRO_INDEX(J) = MACRO_INDEX(J) + 1;                                     SYNTHESIZE
 3200        END;                                                                        SYNTHESIZE
 3201     END;                                                                           SYNTHESIZE
 3202                                                                                    SYNTHESIZE CASE 54.
 3203  /*     54   <TYPE DECLARATION> ::= <IDENTIFIER SPECIFICATION>        */           SYNTHESIZE
 3204  /*     54                          <TYPE>                            */           SYNTHESIZE
 3205     CALL TDECLARE (0);                                                             SYNTHESIZE
 3206                                                                                    SYNTHESIZE CASE 55.
 3207  /*     55                        ^ <BOUND HEAD> <NUMBER> ) <TYPE>    */           SYNTHESIZE
 3208     CALL TDECLARE (FIXV(MPP1));                                                    SYNTHESIZE
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 103
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3209                                                                                    SYNTHESIZE CASE 56.
 3210  /*     56                        ^ <TYPE DECLARATION>                */           SYNTHESIZE
 3211  /*     56                          <INITIAL LIST>                    */           SYNTHESIZE
 3212     ;                                                                              SYNTHESIZE
 3213  /*     57   <TYPE> ::= FIXED                                         */           SYNTHESIZE CASE 57.
 3214     TYPE (MP) = FIXEDTYPE;                                                         SYNTHESIZE
 3215  /*     58            ^ CHARACTER                                     */           SYNTHESIZE CASE 58.
 3216     TYPE (MP) = CHRTYPE;                                                           SYNTHESIZE
 3217  /*     59            ^ LABEL                                         */           SYNTHESIZE CASE 59.
 3218     TYPE (MP) = FORWARDTYPE;                                                       SYNTHESIZE
 3219                                                                                    SYNTHESIZE CASE 60.
 3220  /*     60            ^ <BIT HEAD> <NUMBER> )                         */           SYNTHESIZE
 3221     IF FIXV(MPP1) <= 9 THEN TYPE (MP) = BYTETYPE; ELSE                             SYNTHESIZE
 3222        IF FIXV (MPP1) <= 36 THEN TYPE (MP) = FIXEDTYPE; ELSE                       SYNTHESIZE
 3223           TYPE (MP) = CHRTYPE;                                                     SYNTHESIZE
 3224                                                                                    SYNTHESIZE CASE 61.
 3225  /*     61   <BIT HEAD> ::= BIT (                                     */           SYNTHESIZE
 3226     ;                                                                              SYNTHESIZE
 3227  /*     62   <BOUND HEAD> ::= <IDENTIFIER SPECIFICATION> (            */           SYNTHESIZE CASE 62.
 3228     ;                                                                              SYNTHESIZE
 3229  /*     63   <IDENTIFIER SPECIFICATION> ::= <IDENTIFIER>              */           SYNTHESIZE CASE 63.
 3230     DO;                                                                            SYNTHESIZE
 3231        INX(MP) = 1;                                                                SYNTHESIZE
 3232        FIXL(MP) = CASEP;                                                           SYNTHESIZE
 3233        CALL STACK_CASE (ENTER(VAR(MP),0,0,0));                                     SYNTHESIZE
 3234     END;                                                                           SYNTHESIZE
 3235  /*     64                                ^ <IDENTIFIER LIST>         */           SYNTHESIZE CASE 64.
 3236  /*     64                                  <IDENTIFIER> )            */           SYNTHESIZE
 3237     DO;                                                                            SYNTHESIZE
 3238        INX(MP) = INX(MP) + 1;                                                      SYNTHESIZE
 3239        CALL STACK_CASE (ENTER(VAR(MPP1),0,0,0));                                   SYNTHESIZE
 3240     END;                                                                           SYNTHESIZE
 3241  /*     65   <IDENTIFIER LIST> ::= (                                  */           SYNTHESIZE CASE 65.
 3242     DO;                                                                            SYNTHESIZE
 3243        INX(MP) = 0;                                                                SYNTHESIZE
 3244        FIXL(MP) = CASEP;                                                           SYNTHESIZE
 3245     END;                                                                           SYNTHESIZE
 3246  /*     66                       ^ <IDENTIFIER LIST> <IDENTIFIER> ,   */           SYNTHESIZE CASE 66.
 3247     DO;                                                                            SYNTHESIZE
 3248        INX(MP) = INX(MP) + 1;                                                      SYNTHESIZE
 3249        CALL STACK_CASE (ENTER(VAR(MPP1),0,0,0));                                   SYNTHESIZE
 3250     END;                                                                           SYNTHESIZE
 3251                                                                                    SYNTHESIZE CASE 67.
 3252  /*     67   <INITIAL LIST> ::= <INITIAL HEAD> <CONSTANT> )           */           SYNTHESIZE
 3253     CALL SETINIT;                                                                  SYNTHESIZE
 3254                                                                                    SYNTHESIZE CASE 68.
 3255  /*     68   <INITIAL HEAD> ::= INITIAL (                             */           SYNTHESIZE
 3256     IF INX(MP-1) = 1 THEN                                                          SYNTHESIZE
 3257        ITYPE = TYPE (MP-1);  /* COPY INFORMATION FROM <TYPE DECLARATION> */        SYNTHESIZE
 3258     ELSE                                                                           SYNTHESIZE
 3259        DO;                                                                         SYNTHESIZE
 3260           CALL ERROR ('INITIAL MAY NOT BE USED WITH IDENTIFIER LIST',0);           SYNTHESIZE
 3261           ITYPE = 0;                                                               SYNTHESIZE
 3262        END;                                                                        SYNTHESIZE
 3263                                                                                    SYNTHESIZE CASE 69.
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 104
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3264  /*     69                    ^ <INITIAL HEAD> <CONSTANT> ,           */           SYNTHESIZE
 3265     CALL SETINIT;                                                                  SYNTHESIZE
 3266  /*     70   <ASSIGNMENT> ::= <VARIABLE> <REPLACE> <EXPRESSION>       */           SYNTHESIZE CASE 70.
 3267     CALL GENSTORE(MP,SP);                                                          SYNTHESIZE
 3268  /*     71                  ^ <LEFT PART> <ASSIGNMENT>                */           SYNTHESIZE CASE 71.
 3269     CALL GENSTORE(MP,SP);                                                          SYNTHESIZE
 3270  /*     72   <REPLACE> ::= =                                          */           SYNTHESIZE CASE 72.
 3271     ;                                                                              SYNTHESIZE
 3272  /*     73   <LEFT PART> ::= <VARIABLE> ,                             */           SYNTHESIZE CASE 73.
 3273     ;                                                                              SYNTHESIZE
 3274  /*     74   <EXPRESSION> ::= <LOGICAL FACTOR>                        */           SYNTHESIZE CASE 74.
 3275     ;                                                                              SYNTHESIZE
 3276  /*     75                  ^ <EXPRESSION> ^ <LOGICAL FACTOR>         */           SYNTHESIZE CASE 75.
 3277     CALL ARITHEMIT (IOR,1);                                                        SYNTHESIZE
 3278  /*     76   <LOGICAL FACTOR> ::= <LOGICAL SECONDARY>                 */           SYNTHESIZE CASE 76.
 3279     ;                                                                              SYNTHESIZE
 3280  /*     77                      ^ <LOGICAL FACTOR> &                  */           SYNTHESIZE CASE 77.
 3281  /*     77                        <LOGICAL SECONDARY>                 */           SYNTHESIZE
 3282     CALL ARITHEMIT (AND,1);                                                        SYNTHESIZE
 3283  /*     78   <LOGICAL SECONDARY> ::= <LOGICAL PRIMARY>                */           SYNTHESIZE CASE 78.
 3284     ;                                                                              SYNTHESIZE
 3285  /*     79                         ^ \ <LOGICAL PRIMARY>              */           SYNTHESIZE CASE 79.
 3286     DO;                                                                            SYNTHESIZE
 3287        CALL MOVESTACKS (SP, MP);                                                   SYNTHESIZE
 3288         /* GET 1'S COMPLEMENT */                                                   SYNTHESIZE
 3289        CALL FORCEACCUMULATOR(MP);                                                  SYNTHESIZE
 3290        CALL EMITINST (SETCA,REG(MP),0,0,0,0);                                      SYNTHESIZE
 3291     END;                                                                           SYNTHESIZE
 3292                                                                                    SYNTHESIZE CASE 80.
 3293  /*     80   <LOGICAL PRIMARY> ::= <STRING EXPRESSION>                */           SYNTHESIZE
 3294     ;                                                                              SYNTHESIZE
 3295  /*     81                       ^ <STRING EXPRESSION> <RELATION>     */           SYNTHESIZE CASE 81.
 3296  /*     81                         <STRING EXPRESSION>                */           SYNTHESIZE
 3297        /* RELATIONS ARE ENCODED AS TO THEIR CAM? INSTRICTION CODE */               SYNTHESIZE
 3298        /*                                                                          SYNTHESIZE
 3299           <     1                                                                  SYNTHESIZE
 3300           >     7                                                                  SYNTHESIZE
 3301           \=    6                                                                  SYNTHESIZE
 3302           =     2                                                                  SYNTHESIZE
 3303           <=    3                                                                  SYNTHESIZE
 3304           \>    3                                                                  SYNTHESIZE
 3305           >=    5                                                                  SYNTHESIZE
 3306           \<    5                                                                  SYNTHESIZE
 3307        */                                                                          SYNTHESIZE
 3308     DO;                                                                            SYNTHESIZE
 3309        I = TYPE (MP);                                                              SYNTHESIZE
 3310        J = TYPE (SP);                                                              SYNTHESIZE
 3311        IF I = DESCRIPT ^ I = CHRTYPE THEN CALL STRINGCOMPARE; ELSE                 SYNTHESIZE
 3312        IF I = VARIABLE & SYTYPE(FIXL(MP)) = CHRTYPE THEN CALL STRINGCOMPARE; ELSE  SYNTHESIZE
 3313        IF J = DESCRIPT ^ J = CHRTYPE THEN CALL STRINGCOMPARE; ELSE                 SYNTHESIZE
 3314        IF J = VARIABLE & SYTYPE(FIXL(SP)) = CHRTYPE THEN CALL STRINGCOMPARE; ELSE  SYNTHESIZE
 3315           DO;                                                                      SYNTHESIZE
 3316              IF I = VARIABLE & SYTYPE(FIXL(MP)) = BYTETYPE THEN                    SYNTHESIZE
 3317                     CALL FORCEACCUMULATOR(MP);                                     SYNTHESIZE
 3318              IF J = VARIABLE & SYTYPE(FIXL(SP)) = BYTETYPE THEN                    SYNTHESIZE
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 105
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3319                     CALL FORCEACCUMULATOR(SP);                                     SYNTHESIZE
 3320              IF SHOULDCOMMUTE THEN CALL FORCEACCUMULATOR(SP);                      SYNTHESIZE
 3321              ELSE CALL FORCEACCUMULATOR(MP);                                       SYNTHESIZE
 3322              I = FINDAR;                                                           SYNTHESIZE
 3323              CALL EMITINST(MOVEI,I,0,1,0,0);                                       SYNTHESIZE
 3324              CALL ARITHEMIT (CAM+INX(MPP1),1);                                     SYNTHESIZE
 3325              CALL EMITINST (MOVEI,I,0,0,0,0);                                      SYNTHESIZE
 3326              STILLCOND = INX(MPP1);                                                SYNTHESIZE
 3327              ACC(REG(MP))=AVAIL;                                                   SYNTHESIZE
 3328              REG(MP) = I;                                                          SYNTHESIZE
 3329              TYPE(MP) = ACCUMULATOR;                                               SYNTHESIZE
 3330           END;                                                                     SYNTHESIZE
 3331     END;                                                                           SYNTHESIZE
 3332                                                                                    SYNTHESIZE CASE 82.
 3333  /*     82   <RELATION> ::= =                                         */           SYNTHESIZE
 3334     INX(MP) = 2;                                                                   SYNTHESIZE
 3335  /*     83                ^ <                                         */           SYNTHESIZE CASE 83.
 3336     INX(MP) = 1;                                                                   SYNTHESIZE
 3337  /*     84                ^ >                                         */           SYNTHESIZE CASE 84.
 3338     INX(MP) = 7;                                                                   SYNTHESIZE
 3339  /*     85                ^ \ =                                       */           SYNTHESIZE CASE 85.
 3340     INX(MP) = 6;                                                                   SYNTHESIZE
 3341  /*     86                ^ \ <                                       */           SYNTHESIZE CASE 86.
 3342     INX (MP) = 5;                                                                  SYNTHESIZE
 3343  /*     87                ^ \ >                                       */           SYNTHESIZE CASE 87.
 3344     INX(MP) = 3;                                                                   SYNTHESIZE
 3345  /*     88                ^ < =                                       */           SYNTHESIZE CASE 88.
 3346     INX(MP) = 3;                                                                   SYNTHESIZE
 3347  /*     89                ^ > =                                       */           SYNTHESIZE CASE 89.
 3348     INX (MP) = 5;                                                                  SYNTHESIZE
 3349  /*     90   <STRING EXPRESSION> ::= <ARITHMETIC EXPRESSION>          */           SYNTHESIZE CASE 90.
 3350     ;                                                                              SYNTHESIZE
 3351                                                                                    SYNTHESIZE CASE 91.
 3352  /*     91                         ^ <STRING EXPRESSION> ^^           */           SYNTHESIZE
 3353  /*     91                           <ARITHMETIC EXPRESSION>          */           SYNTHESIZE
 3354      DO; /* CATENATE TWO STRINGS */                                                SYNTHESIZE
 3355        CALL FORCEDESCRIPTOR (MP);                                                  SYNTHESIZE
 3356        CALL DELETE_MOVE (MP,MOVEM,REG(MP),0,A,0,3);                                SYNTHESIZE
 3357        ACC(REG(MP)) = AVAIL;                                                       SYNTHESIZE
 3358        CALL FORCEDESCRIPTOR (SP);                                                  SYNTHESIZE
 3359        CALL DELETE_MOVE (SP,MOVEM,REG(SP),0,B,0,3);                                SYNTHESIZE
 3360        ACC(REG(SP)) = AVAIL;                                                       SYNTHESIZE
 3361        CALL SAVE_ACS (2);                                                          SYNTHESIZE
 3362        IF ACC(11) \= AVAIL THEN CALL EMITINST (PUSH,15,0,11,0,0);                  SYNTHESIZE
 3363        CALL EMITINST (PUSHJ,15,0,CATENTRY,0,2);                                    SYNTHESIZE
 3364        IF ACC(11) \= AVAIL THEN CALL EMITINST (POP,15,0,11,0,0);                   SYNTHESIZE
 3365        CALL RESTORE_ACS (2);                                                       SYNTHESIZE
 3366        I = FINDAR;                                                                 SYNTHESIZE
 3367        CALL EMITINST (MOVE,I,0,0,0,0);                                             SYNTHESIZE
 3368        STILLINZERO = I;                                                            SYNTHESIZE
 3369        REG(MP) = I;                                                                SYNTHESIZE
 3370     END;                                                                           SYNTHESIZE
 3371                                                                                    SYNTHESIZE CASE 92.
 3372  /*     92   <ARITHMETIC EXPRESSION> ::= <TERM>                       */           SYNTHESIZE
 3373     ;                                                                              SYNTHESIZE
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 106
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3374  /*     93                             ^ <ARITHMETIC EXPRESSION> +    */           SYNTHESIZE CASE 93.
 3375  /*     93                               <TERM>                       */           SYNTHESIZE
 3376     CALL ARITHEMIT (ADD,1);                                                        SYNTHESIZE
 3377  /*     94                             ^ <ARITHMETIC EXPRESSION> -    */           SYNTHESIZE CASE 94.
 3378  /*     94                               <TERM>                       */           SYNTHESIZE
 3379     CALL ARITHEMIT (SUB,0);                                                        SYNTHESIZE
 3380  /*     95                             ^ + <TERM>                     */           SYNTHESIZE CASE 95.
 3381     CALL MOVESTACKS (MPP1, MP);                                                    SYNTHESIZE
 3382                                                                                    SYNTHESIZE CASE 96.
 3383  /*     96                             ^ - <TERM>                     */           SYNTHESIZE
 3384     DO;                                                                            SYNTHESIZE
 3385        CALL MOVESTACKS (MPP1, MP);                                                 SYNTHESIZE
 3386        IF TYPE (MP) = CONSTANT THEN FIXV (MP) = - FIXV (MP);                       SYNTHESIZE
 3387        ELSE                                                                        SYNTHESIZE
 3388           DO;                                                                      SYNTHESIZE
 3389              CALL FORCEACCUMULATOR (MP);                                           SYNTHESIZE
 3390              CALL EMITINST (MOVN,REG(MP),0,REG(MP),0,0);                           SYNTHESIZE
 3391           END;                                                                     SYNTHESIZE
 3392     END;                                                                           SYNTHESIZE
 3393                                                                                    SYNTHESIZE CASE 97.
 3394  /*     97   <TERM> ::= <PRIMARY>                                     */           SYNTHESIZE
 3395     ;                                                                              SYNTHESIZE
 3396  /*     98            ^ <TERM> * <PRIMARY>                            */           SYNTHESIZE CASE 98.
 3397     CALL ARITHEMIT (IMUL,1);                                                       SYNTHESIZE
 3398  /*     99            ^ <TERM> / <PRIMARY>                            */           SYNTHESIZE CASE 99.
 3399     CALL DIVIDE_CODE(1);                                                           SYNTHESIZE
 3400  /*    100            ^ <TERM> MOD <PRIMARY>                          */           SYNTHESIZE CASE 100.
 3401     CALL DIVIDE_CODE(0);                                                           SYNTHESIZE
 3402  /*    101   <PRIMARY> ::= <CONSTANT>                                 */           SYNTHESIZE CASE 101.
 3403     ;                                                                              SYNTHESIZE
 3404  /*    102               ^ <VARIABLE>                                 */           SYNTHESIZE CASE 102.
 3405     ;                                                                              SYNTHESIZE
 3406  /*    103               ^ ( <EXPRESSION> )                           */           SYNTHESIZE CASE 103.
 3407     CALL MOVESTACKS (MPP1, MP);                                                    SYNTHESIZE
 3408                                                                                    SYNTHESIZE CASE 104.
 3409  /*    104   <VARIABLE> ::= <IDENTIFIER>                              */           SYNTHESIZE
 3410     /* THE FOLLOWING USE IS MADE OF THE PARALLEL STACKS BELOW <VARIABLE>           SYNTHESIZE
 3411            CNT      THE NUMBER OF SUBSCRIPTS                                       SYNTHESIZE
 3412            FIXL     THE SYMBOL TABLE POINTER                                       SYNTHESIZE
 3413            FIXV     BUILTIN CODE IF SPECIAL                                        SYNTHESIZE
 3414            TYPE     VARIABLE                                                       SYNTHESIZE
 3415            INX      ZERO OR ACCUMULATOR OF SUBSCRIPT                               SYNTHESIZE
 3416        AFTER THE VARIABLE IS FORCED INTO AN ACCUMULATOR                            SYNTHESIZE
 3417            TYPE     ACCUMULATOR OR DESCRIPT                                        SYNTHESIZE
 3418            REG      CURRENT ACCUMULATOR                                            SYNTHESIZE
 3419     */                                                                             SYNTHESIZE
 3420     DO;   /* FIND THE IDENTIFIER IN THE SYMBOL TABLE */                            SYNTHESIZE
 3421        CALL ID_LOOKUP (MP);                                                        SYNTHESIZE
 3422         IF FIXL (MP) = -1 THEN CALL UNDECLARED_ID (MP);                            SYNTHESIZE
 3423     END;                                                                           SYNTHESIZE
 3424                                                                                    SYNTHESIZE CASE 105.
 3425  /*    105                ^ <SUBSCRIPT HEAD> <EXPRESSION> )           */           SYNTHESIZE
 3426                                                                                    SYNTHESIZE
 3427     DO; /* EITHER A PROCEDURE CALL, ARRAY, OR BUILTIN FUNCTION */                  SYNTHESIZE
 3428        CNT (MP) = CNT (MP) + 1;          /* COUNT SUBSCRIPTS */                    SYNTHESIZE
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 107
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3429        I = FIXV (MP);                    /* ZERO OR BUILTIN FUNCTION NUMBER */     SYNTHESIZE
 3430        IF I < 6 THEN DO CASE I;                                                    SYNTHESIZE
 3431           /* CASE 0 -- ARRAY OR CALL */                                            SYNTHESIZE CASE 0.
 3432           DO;                                                                      SYNTHESIZE
 3433              IF SYTYPE (FIXL (MP)) = PROCTYPE                                      SYNTHESIZE
 3434               ^ SYTYPE (FIXL (MP)) = CHARPROCTYPE THEN CALL STUFF_PARAMETER;       SYNTHESIZE
 3435              ELSE                                                                  SYNTHESIZE
 3436                 IF CNT (MP) > 1 THEN                                               SYNTHESIZE
 3437                    CALL ERROR ('MULTIPLE SUBSCRIPTS NOT ALLOWED', 0);              SYNTHESIZE
 3438                 ELSE                                                               SYNTHESIZE
 3439                    DO;                                                             SYNTHESIZE
 3440                       CALL FORCEACCUMULATOR (MPP1);                                SYNTHESIZE
 3441                       INX (MP) = REG(MPP1);                                        SYNTHESIZE
 3442                    END;                                                            SYNTHESIZE
 3443           END;                                                                     SYNTHESIZE
 3444           /* CASE 1 -- BUILTIN FUNCTION LENGTH */                                  SYNTHESIZE CASE 1.
 3445           DO;                                                                      SYNTHESIZE
 3446              CALL FORCEDESCRIPTOR (MPP1);                                          SYNTHESIZE
 3447              CALL EMITINST(LSH,REG(MPP1),0,    -27,0,0);/* SHIFT OUT ADDRESS */    SYNTHESIZE
 3448              TYPE (MP) = ACCUMULATOR;                                              SYNTHESIZE
 3449              REG(MP) = REG(MPP1);                                                  SYNTHESIZE
 3450           END;                                                                     SYNTHESIZE
 3451           /* CASE 2 -- BUILTIN FUNCTION SUBSTR */                                  SYNTHESIZE CASE 2.
 3452           DO;  /* BUILTIN FUNCTION SUBSTR */                                       SYNTHESIZE
 3453              IF CNT(MP) = 2 THEN                                                   SYNTHESIZE
 3454                 DO;                                                                SYNTHESIZE
 3455                    IF TYPE(MPP1) = CONSTANT THEN                                   SYNTHESIZE
 3456                       DO;  /* EMIT A COMPLEX CONSTANT */                           SYNTHESIZE
 3457                          CALL EMITCONSTANT (SHL(FIXV(MPP1),27)-FIXV(MPP1));        SYNTHESIZE
 3458                          CALL EMITINST (SUB,REG(MP),0,ADR,0,1);                    SYNTHESIZE
 3459                       END;                                                         SYNTHESIZE
 3460                    ELSE                                                            SYNTHESIZE
 3461                       DO;                                                          SYNTHESIZE
 3462                         CALL FORCEACCUMULATOR (MPP1);                              SYNTHESIZE
 3463                         CALL EMITINST (ADD,REG(MP),0,REG(MPP1),0,0);               SYNTHESIZE
 3464                         CALL EMITINST (LSH,REG(MPP1),0,    27,0,0);                SYNTHESIZE
 3465                         CALL EMITINST (SUB,REG(MP),0,REG(MPP1),0,0);               SYNTHESIZE
 3466                         ACC(REG(MPP1)) = AVAIL;                                    SYNTHESIZE
 3467                       END;                                                         SYNTHESIZE
 3468                 END;                                                               SYNTHESIZE
 3469              ELSE                                                                  SYNTHESIZE
 3470                 DO;  /* THREE ARGUMENTS */                                         SYNTHESIZE
 3471                    IF TYPE(MPP1) = CONSTANT THEN                                   SYNTHESIZE
 3472                       DO;  /* MAKE A CONSTANT LENGTH TO OR IN */                   SYNTHESIZE
 3473                          CALL EMITCONSTANT (SHL(FIXV(MPP1),27));                   SYNTHESIZE
 3474                          CALL EMITINST (IOR,REG(MP),0,ADR,0,1);                    SYNTHESIZE
 3475                       END;                                                         SYNTHESIZE
 3476                    ELSE                                                            SYNTHESIZE
 3477                       DO;                                                          SYNTHESIZE
 3478                          CALL FORCEACCUMULATOR (MPP1);                             SYNTHESIZE
 3479                          CALL EMITINST (LSH,REG(MPP1),0,    27,0,0);               SYNTHESIZE
 3480                          CALL EMITINST(IOR,REG(MP),0,REG(MPP1),0,0);               SYNTHESIZE
 3481                           ACC(REG(MPP1)) = AVAIL;                                  SYNTHESIZE
 3482                       END;                                                         SYNTHESIZE
 3483                 END;                                                               SYNTHESIZE
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 108
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3484              TYPE (MP) = DESCRIPT;                                                 SYNTHESIZE
 3485           END;                                                                     SYNTHESIZE
 3486           /* CASE 3 -- BUILTIN FUNCTION BYTE */                                    SYNTHESIZE CASE 3.
 3487           DO;  /* BUILTIN FUNCTION BYTE */                                         SYNTHESIZE
 3488              IF CNT(MP) = 1 THEN                                                   SYNTHESIZE
 3489                 DO;                                                                SYNTHESIZE
 3490                    IF TYPE (MPP1) = CHRTYPE THEN                                   SYNTHESIZE
 3491                       DO;                                                          SYNTHESIZE
 3492                          FIXV(MP) = BYTE(VAR(MPP1));                               SYNTHESIZE
 3493                          TYPE (MP) = CONSTANT;                                     SYNTHESIZE
 3494                       END;                                                         SYNTHESIZE
 3495                    ELSE                                                            SYNTHESIZE
 3496                       DO;                                                          SYNTHESIZE
 3497                          CALL FORCEDESCRIPTOR (MPP1);                              SYNTHESIZE
 3498                          CALL EMITINST (AND,REG(MPP1),0,ADDRMASK,0,1);             SYNTHESIZE
 3499                          /* FAKE A COREBYTE */                                     SYNTHESIZE
 3500                          TYPE(MPP1) = VARIABLE;                                    SYNTHESIZE
 3501                          FIXL(MPP1) = COREBYTELOC;                                 SYNTHESIZE
 3502                          INX(MPP1) = REG(MPP1);                                    SYNTHESIZE
 3503                          CNT(MPP1) = 1;                                            SYNTHESIZE
 3504                          CALL FORCEACCUMULATOR (MPP1);                             SYNTHESIZE
 3505                          TYPE(MP) = TYPE(MPP1);                                    SYNTHESIZE
 3506                          REG(MP) = REG(MPP1);                                      SYNTHESIZE
 3507                       END;                                                         SYNTHESIZE
 3508                 END;                                                               SYNTHESIZE
 3509              ELSE IF CNT (MP) = 2 THEN                                             SYNTHESIZE
 3510                 DO;                                                                SYNTHESIZE
 3511                    SP = MPP1;  /* SO WE CAN USE ARITHEMIT */                       SYNTHESIZE
 3512                    CALL ARITHEMIT (ADD,1);                                         SYNTHESIZE
 3513                    /* FAKE A COREBYTE */                                           SYNTHESIZE
 3514                    TYPE(MPP1) = VARIABLE;                                          SYNTHESIZE
 3515                    FIXL(MPP1) = COREBYTELOC;                                       SYNTHESIZE
 3516                          CNT(MPP1) = 1;                                            SYNTHESIZE
 3517                    INX(MPP1) = REG(MP);                                            SYNTHESIZE
 3518                    CALL FORCEACCUMULATOR(MPP1);                                    SYNTHESIZE
 3519                    TYPE(MP) = TYPE(MPP1);                                          SYNTHESIZE
 3520                    REG(MP) = REG(MPP1);                                            SYNTHESIZE
 3521                 END;                                                               SYNTHESIZE
 3522              ELSE CALL ERROR (TOOMSG ^^ SYT(FIXL(MP)),0);                          SYNTHESIZE
 3523           END;                                                                     SYNTHESIZE
 3524           /* CASE 4 -- BUILTIN FUNCTION SHL */                                     SYNTHESIZE CASE 4.
 3525           CALL SHIFT_CODE (0);           /* <- */                                  SYNTHESIZE
 3526           /* CASE 5 -- BUILTIN FUNCTION SHR */                                     SYNTHESIZE CASE 5.
 3527           CALL SHIFT_CODE (1);           /* -> */                                  SYNTHESIZE
 3528        END; /* CASE ON I */                                                        SYNTHESIZE CASE 6.
 3529        ELSE IF I = 9 THEN CALL EMIT_INLINE(1);  /*BUILT-IN FUNCTION INLINE */      SYNTHESIZE
 3530        ELSE IF I = 18 THEN                                                         SYNTHESIZE
 3531           DO;  /* BUILTIN FUNCTION ADDR */                                         SYNTHESIZE
 3532              CALL FORCEADDRESS (MPP1);                                             SYNTHESIZE
 3533              TYPE (MP) = ACCUMULATOR;                                              SYNTHESIZE
 3534           END;                                                                     SYNTHESIZE
 3535        ELSE DO;    /* SOME SORT OF BUILTIN FUNCTION */                             SYNTHESIZE
 3536                CALL FORCEACCUMULATOR(MPP1);                                        SYNTHESIZE
 3537                IF CNT(MP) = 1 THEN REG(MP) = REG(MPP1);                            SYNTHESIZE
 3538                 ELSE INX(MP) = REG(MPP1);                                          SYNTHESIZE
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 109
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3539             END;                                                                   SYNTHESIZE
 3540     END;                                                                           SYNTHESIZE
 3541                                                                                    SYNTHESIZE CASE 106.
 3542  /*    106   <SUBSCRIPT HEAD> ::= <IDENTIFIER> (                      */           SYNTHESIZE
 3543     DO;                                                                            SYNTHESIZE
 3544        CALL ID_LOOKUP(MP);                                                         SYNTHESIZE
 3545        IF FIXL(MP) = -1 THEN CALL UNDECLARED_ID (MP);                              SYNTHESIZE
 3546     END;                                                                           SYNTHESIZE
 3547                                                                                    SYNTHESIZE CASE 107.
 3548  /*    107                      ^ <SUBSCRIPT HEAD> <EXPRESSION> ,     */           SYNTHESIZE
 3549                                                                                    SYNTHESIZE
 3550     DO; /* BUILTIN FUNCTION OR PROCEDURE CALL */                                   SYNTHESIZE
 3551        CNT (MP) = CNT (MP) + 1;                                                    SYNTHESIZE
 3552        IF FIXV (MP) = 0 THEN                                                       SYNTHESIZE
 3553           DO; /* NOT A BUILTIN FUNCTION */                                         SYNTHESIZE
 3554              IF SYTYPE(FIXL(MP)) = PROCTYPE                                        SYNTHESIZE
 3555               ^ SYTYPE(FIXL(MP)) = CHARPROCTYPE THEN CALL STUFF_PARAMETER;         SYNTHESIZE
 3556              ELSE CALL FORCEACCUMULATOR (MPP1);                                    SYNTHESIZE
 3557           END;                                                                     SYNTHESIZE
 3558        ELSE IF FIXV(MP) = 2 ^ FIXV (MP) = 3 THEN                                   SYNTHESIZE
 3559           DO; /* SUBSTR OR BYTE */                                                 SYNTHESIZE
 3560              IF CNT(MP) = 1 THEN                                                   SYNTHESIZE
 3561                 DO;                                                                SYNTHESIZE
 3562                    CALL FORCEDESCRIPTOR (MPP1);                                    SYNTHESIZE
 3563                    TYPE (MP) = ACCUMULATOR;                                        SYNTHESIZE
 3564                    REG(MP) = REG(MPP1);                                            SYNTHESIZE
 3565                 END;                                                               SYNTHESIZE
 3566              ELSE IF CNT (MP) = 2 & FIXV (MP) = 2 THEN                             SYNTHESIZE
 3567                 DO; /* JUST SUBSTR, WE'LL NOTE ERROR ON BYTE LATER */              SYNTHESIZE
 3568                    IF TYPE(MPP1) \= CONSTANT ^ FIXV(MPP1) \= 0 THEN                SYNTHESIZE
 3569                       DO;                                                          SYNTHESIZE
 3570                          SP = MPP1;  /* SO WE CAN USE ARITHEMIT */                 SYNTHESIZE
 3571                         CALL ARITHEMIT (ADD,1);                                    SYNTHESIZE
 3572                          FIXV(MP) = 2; /* IF IT COMMUTES, ARITHMIT CHANGES IT */   SYNTHESIZE
 3573                       END;                                                         SYNTHESIZE
 3574                    CALL EMITINST(AND,REG(MP),0,ADDRMASK,0,1);/* AND OUT LENGTH */  SYNTHESIZE
 3575                 END;                                                               SYNTHESIZE
 3576              ELSE CALL ERROR (TOOMSG ^^ SYT(FIXL(MP)),0);                          SYNTHESIZE
 3577           END;                                                                     SYNTHESIZE
 3578        ELSE IF FIXV(MP) = 4 ^ FIXV (MP) = 5 THEN                                   SYNTHESIZE
 3579           DO; /* SHR OR SHL */                                                     SYNTHESIZE
 3580              CALL FORCEACCUMULATOR (MPP1);                                         SYNTHESIZE
 3581              REG(MP) = REG(MPP1);                                                  SYNTHESIZE
 3582           END;                                                                     SYNTHESIZE
 3583        ELSE IF FIXV(MP) = 9 THEN CALL EMIT_INLINE(0); /* INLINE */                 SYNTHESIZE
 3584        ELSE DO; /* SOME SORT OF BUILTIN FUNCTION */                                SYNTHESIZE
 3585                IF CNT (MP) = 1 THEN                                                SYNTHESIZE
 3586                   DO;                                                              SYNTHESIZE
 3587                      CALL FORCEACCUMULATOR (MPP1); /* PICK UP THE VARIABLE */      SYNTHESIZE
 3588                      REG(MP) = REG(MPP1);                                          SYNTHESIZE
 3589                   END;                                                             SYNTHESIZE
 3590                ELSE CALL ERROR (TOOMSG ^^ SYT(FIXL(MP)),0);                        SYNTHESIZE
 3591             END;                                                                   SYNTHESIZE
 3592     END;                                                                           SYNTHESIZE
 3593                                                                                    SYNTHESIZE CASE 108.
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 110
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3594  /*    108   <CONSTANT> ::= <STRING>                                  */           SYNTHESIZE
 3595     TYPE (MP) = CHRTYPE;                                                           SYNTHESIZE
 3596  /*    109                ^ <NUMBER>                                  */           SYNTHESIZE CASE 109.
 3597     TYPE (MP) = CONSTANT;                                                          SYNTHESIZE
 3598                                                                                    SYNTHESIZE CASE 110.
 3599  END;  /* OF CASE ON PRODUCTION NUMBER */                                          SYNTHESIZE
 3600  END SYNTHESIZE;                                                                   SYNTHESIZE

SYMBOL TABLE DUMP

SYMBOL            TYPE       LOC   SEGMENT DEFINED REF COUNT
PRODUCTION_NUMBER FIXED     10479     DATA   2756       1
STACK_CASE        PROCEDURE  8802  PROGRAM   2760       5
  PARAMETER  1    FIXED     10486     DATA   2761       6
TOOMSG            CHARACTER   931   STRING   2758       3
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 111
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3601                                                                                   *
 3602    /*              SYNTACTIC PARSING FUNCTIONS                              */    *
 3603                                                                                   *
 3604                                                                                   *
 3605   CONFLICT: PROCEDURE (CURRENT_STATE);                                            *
 3606                                                                                    CONFLICT
 3607           DECLARE I FIXED, CURRENT_STATE FIXED;                                    CONFLICT
 3608                                                                                    CONFLICT
 3609           /*   THIS PROC IS TRUE IF THE CURRENT TOKEN IS NOT   */                  CONFLICT
 3610           /*   A TRANSITION SYMBOL FROM THE CURRENT STATE      */                  CONFLICT
 3611                                                                                    CONFLICT
 3612           /*   (A CONFLICT THEREFORE EXISTS BETWEEN THE        */                  CONFLICT
 3613           /*   CURRENT STATE AND THE NEXT TOKEN)               */                  CONFLICT
 3614                                                                                    CONFLICT
 3615           I = INDEX1(CURRENT_STATE);   /*   STARTING POINT FOR STATE        */     CONFLICT
 3616                                        /*   TRANSITION SYMBOLS              */     CONFLICT
 3617           DO I = I TO I+INDEX2(CURRENT_STATE)-1;   /*   COMPARE WITH EACH   */     CONFLICT
 3618           IF READ1(I) = TOKEN THEN RETURN (FALSE); /*   FOUND IT            */     CONFLICT
 3619           END;                                                                     CONFLICT
 3620           RETURN (TRUE);   /*   NOT THERE   */                                     CONFLICT
 3621                                                                                    CONFLICT
 3622           END CONFLICT;                                                            CONFLICT

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
CURRENT_STATE   FIXED     10589     DATA   3605       2
I               FIXED     10588     DATA   3607       5
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 112
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3623                                                                                   *
 3624                                                                                   *
 3625   RECOVER: PROCEDURE;                                                             *
 3626                                                                                    RECOVER
 3627           DECLARE ANSWER BIT(1);                                                   RECOVER
 3628                                                                                    RECOVER
 3629           /*   THIS IS A VERY CRUDE ERROR RECOVERY PROCEDURE               */      RECOVER
 3630           /*   IT RETURNS TRUE IF THE PARSE MUST BE RESUMED IN             */      RECOVER
 3631           /*   A NEW STATE (THE ONE IN THE CURRENT POSITION OF THE STATE   */      RECOVER
 3632           /*   STACK)                                                      */      RECOVER
 3633           /*   IT RETURNS FALSE IF THE PARSE IS RESUMED WITH THE SAME      */      RECOVER
 3634           /*   STATE AS WAS INTENDED BEFORE RECOVER WAS CALLED             */      RECOVER
 3635                                                                                    RECOVER
 3636           ANSWER = FALSE;                                                          RECOVER
 3637           /*   IF THIS IS THE SECOND SUCCESSIVE CALL TO RECOVER, DISCARD   */      RECOVER
 3638           /*   ONE SYMBOL (FAILSOFT IS SET TRUE BY SCAN)                   */      RECOVER
 3639           IF \ FAILSOFT & 1 THEN CALL SCAN;                                        RECOVER
 3640           FAILSOFT = FALSE;                                                        RECOVER
 3641           /*   FIND SOMETHING SOLID IN THE TEXT   */                               RECOVER
 3642           DO WHILE (\STOPIT(TOKEN) & 1);                                           RECOVER
 3643           CALL SCAN;                                                               RECOVER
 3644           END;                                                                     RECOVER
 3645           NO_LOOK_AHEAD_DONE = FALSE;                                              RECOVER
 3646           /*   DELETE PARSE STACK UNTIL THE HARD TOKEN IS   */                     RECOVER
 3647           /*   LEGAL AS A TRANSITION SYMBOL                 */                     RECOVER
 3648           DO WHILE CONFLICT (STATE_STACK(SP));                                     RECOVER
 3649           IF SP > 0                                                                RECOVER
 3650                THEN DO;                                                            RECOVER
 3651                     /*   DELETE ONE ITEM FROM THE STACK   */                       RECOVER
 3652                     SP = SP - 1;                                                   RECOVER
 3653                     ANSWER = TRUE;   /*   PARSE TO BE RESUMED IN NEW STATE   */    RECOVER
 3654                     END;                                                           RECOVER
 3655                ELSE DO;   /*   STACK IS EMPTY   */                                 RECOVER
 3656                     /*   TRY TO FIND A LEGAL TOKEN (FOR START STATE)   */          RECOVER
 3657                      CALL SCAN;                                                    RECOVER
 3658                     IF TOKEN = EOFILE                                              RECOVER
 3659                          THEN DO;                                                  RECOVER
 3660                               /*   MUST STOP COMPILING                */           RECOVER
 3661                               /*   RESUME PARSE IN AN ILLEGAL STATE   */           RECOVER
 3662                               ANSWER = TRUE;                                       RECOVER
 3663                               STATE_STACK(SP) = 0;                                 RECOVER
 3664                               RETURN (ANSWER);                                     RECOVER
 3665                               END;                                                 RECOVER
 3666                     END;                                                           RECOVER
 3667           END;                                                                     RECOVER
 3668           /*   FOUND AN ACCEPTABLE TOKEN FROM WHICH TO RESUME THE PARSE   */       RECOVER
 3669           CALL PRINTLINE ('RESUME:' ^^ SUBSTR(POINTER,LENGTH(POINTER)-             RECOVER
 3670              (LINE_LENGTH+CP-TEXT_LIMIT-LB-1)+LENGTH(BCD)),-1);                    RECOVER
 3671           RETURN (ANSWER);                                                         RECOVER
 3672                                                                                    RECOVER
 3673           END RECOVER;                                                             RECOVER

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 113
SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
 
ANSWER          BIT (9)   10591     DATA   3627       5
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 114
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3674                                                                                   *
 3675                                                                                   *
 3676   COMPILATION_LOOP:                                                               *
 3677     PROCEDURE;                                                                    *
 3678                                                                                    COMPILATION_LOOP
 3679           DECLARE OVERFLOW CHARACTER INITIAL (                                     COMPILATION_LOOP
 3680           'STACK OVERFLOW *** COMPILATION ABORTED ***');                           COMPILATION_LOOP
 3681           DECLARE I FIXED, J FIXED, STATE FIXED;                                   COMPILATION_LOOP
 3682           DECLARE END_OF_FILE CHARACTER INITIAL (                                  COMPILATION_LOOP
 3683           'END OF FILE FOUND UNEXPECTEDLY *** COMPILATION ABORTED ***');           COMPILATION_LOOP
 3684                                                                                    COMPILATION_LOOP
 3685           /*   THIS PROC PARSES THE INPUT STRING (BY CALLING THE SCANNER)   */     COMPILATION_LOOP
 3686           /*   AND CALLS THE CODE EMISSION PROC (SYNTHESIZE) WHENEVER A     */     COMPILATION_LOOP
 3687           /*   PRODUCTION CAN BE APPLIED                                    */     COMPILATION_LOOP
 3688                                                                                    COMPILATION_LOOP
 3689           /*   INITIALIZE                                                   */     COMPILATION_LOOP
 3690           COMPILING = TRUE;                                                        COMPILATION_LOOP
 3691           STATE = START_STATE;                                                     COMPILATION_LOOP
 3692           SP = -1;                                                                 COMPILATION_LOOP
 3693           /*   STOP COMPILING IF FINISHED                                   */     COMPILATION_LOOP
 3694   COMP:   DO WHILE (COMPILING);                                                    COMPILATION_LOOP
 3695           /*   FIND WHICH OF THE FOUR KINDS OF STATES WE ARE DEALING WITH:  */     COMPILATION_LOOP
 3696           /*   READ,APPLY PRODUCTION,LOOKAHEAD, OR PUSH STATE               */     COMPILATION_LOOP
 3697           IF STATE <= MAXR#                                                        COMPILATION_LOOP
 3698                THEN DO;   /*   READ STATE   */                                     COMPILATION_LOOP
 3699                     SP = SP+1;   /*   ADD AN ELEMENT TO THE STACK   */             COMPILATION_LOOP
 3700                     IF SP = STACKSIZE                                              COMPILATION_LOOP
 3701                          THEN DO;                                                  COMPILATION_LOOP
 3702                               CALL ERROR (OVERFLOW,2);                             COMPILATION_LOOP
 3703                               RETURN;                                              COMPILATION_LOOP
 3704                               END;                                                 COMPILATION_LOOP
 3705                     STATE_STACK(SP) = STATE;   /*   PUSH PRESENT STATE   */        COMPILATION_LOOP
 3706                     I = INDEX1(STATE);         /*   GET STARTING POINT   */        COMPILATION_LOOP
 3707                     IF NO_LOOK_AHEAD_DONE                                          COMPILATION_LOOP
 3708                          THEN DO;   /*   READ IF NECESSARY   */                    COMPILATION_LOOP
 3709                               CALL SCAN;                                           COMPILATION_LOOP
 3710                               NO_LOOK_AHEAD_DONE = FALSE;                          COMPILATION_LOOP
 3711                               END;                                                 COMPILATION_LOOP
 3712                     /*   COMPARE TOKEN WITH EACH TRANSITION SYMBOL IN    */        COMPILATION_LOOP
 3713                     /*   READ STATE                                      */        COMPILATION_LOOP
 3714                      DO I = I TO I+INDEX2(STATE)-1;                                COMPILATION_LOOP
 3715                     IF READ1(I) = TOKEN                                            COMPILATION_LOOP
 3716                          THEN DO;   /*   FOUND IT   */                             COMPILATION_LOOP
 3717                               VAR(SP) = BCD;                                       COMPILATION_LOOP
 3718                               FIXV(SP) = NUMBER_VALUE;                             COMPILATION_LOOP
 3719                               FIXL(SP) = CARD_COUNT;                               COMPILATION_LOOP
 3720                               PPSAVE(SP) = PP;                                     COMPILATION_LOOP
 3721                               STATE = READ2(I);                                    COMPILATION_LOOP
 3722                               NO_LOOK_AHEAD_DONE = TRUE;                           COMPILATION_LOOP
 3723                               GO TO COMP;                                          COMPILATION_LOOP
 3724                               END;                                                 COMPILATION_LOOP
 3725                     END;                                                           COMPILATION_LOOP
 3726                     /*   FOUND AN ERROR   */                                       COMPILATION_LOOP
 3727                     CALL ERROR ('ILLEGAL SYMBOL PAIR: ' ^^                         COMPILATION_LOOP
 3728                                 VOCAB(STATE_NAME(STATE)) ^^ X1 ^^                  COMPILATION_LOOP
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 115
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3729                                 VOCAB(TOKEN),1);                                   COMPILATION_LOOP
 3730                     CALL STACK_DUMP;    /*  DISPLAY THE STACK   */                 COMPILATION_LOOP
 3731                     /*   TRY TO RECOVER   */                                       COMPILATION_LOOP
 3732                     IF RECOVER                                                     COMPILATION_LOOP
 3733                          THEN DO;                                                  COMPILATION_LOOP
 3734                               STATE = STATE_STACK(SP);   /*   NEW STARTING PT  */  COMPILATION_LOOP
 3735                               IF STATE = 0                                         COMPILATION_LOOP
 3736                                    THEN DO;   /*   UNEXPECTED EOFILE   */          COMPILATION_LOOP
 3737                                         CALL ERROR (END_OF_FILE,2);                COMPILATION_LOOP
 3738                                         RETURN;                                    COMPILATION_LOOP
 3739                                         END;                                       COMPILATION_LOOP
 3740                               END;                                                 COMPILATION_LOOP
 3741                     SP = SP-1;   /*   STACK AT SP CONTAINS JUNK   */               COMPILATION_LOOP
 3742                     END;                                                           COMPILATION_LOOP
 3743                ELSE                                                                COMPILATION_LOOP
 3744           IF STATE > MAXP#                                                         COMPILATION_LOOP
 3745                THEN DO;   /*   APPLY PRODUCTION STATE   */                         COMPILATION_LOOP
 3746                     /*   SP POINTS AT RIGHT END OF PRODUCTION   */                 COMPILATION_LOOP
 3747                     /*   MP POINTS AT LEST END OF PRODUCTION   */                  COMPILATION_LOOP
 3748                     MP = SP-INDEX2(STATE);                                         COMPILATION_LOOP
 3749                     MPP1 = MP+1;                                                   COMPILATION_LOOP
 3750                     CALL SYNTHESIZE (STATE-MAXP#);   /*   APPLY PRODUCTION   */    COMPILATION_LOOP
 3751                     SP = MP;   /*   RESET STACK POINTER   */                       COMPILATION_LOOP
 3752                     I = INDEX1(STATE);                                             COMPILATION_LOOP
 3753                     /*   COMPARE TOP OF STATE STACK WITH TABLES   */               COMPILATION_LOOP
 3754                     J = STATE_STACK(SP);                                           COMPILATION_LOOP
 3755                     DO WHILE APPLY1(I) \= 0;                                       COMPILATION_LOOP
 3756                     IF J = APPLY1(I) THEN GO TO TOP_MATCH;                         COMPILATION_LOOP
 3757                     I = I+1;                                                       COMPILATION_LOOP
 3758                     END;                                                           COMPILATION_LOOP
 3759                     /*   HAS THE PROGRAM GOAL BEEN REACHED   */                    COMPILATION_LOOP
 3760          TOP_MATCH: IF APPLY2(I) =0                                                COMPILATION_LOOP
 3761                          THEN DO;   /*   YES IT HAS   */                           COMPILATION_LOOP
 3762                               COMPILING = FALSE;                                   COMPILATION_LOOP
 3763                               RETURN;                                              COMPILATION_LOOP
 3764                               END;                                                 COMPILATION_LOOP
 3765                     STATE = APPLY2(I);   /*   PICK UP THE NEXT STATE   */          COMPILATION_LOOP
 3766                     END;                                                           COMPILATION_LOOP
 3767                ELSE                                                                COMPILATION_LOOP
 3768           IF STATE <= MAXL#                                                        COMPILATION_LOOP
 3769                THEN DO;   /*   LOOKAHEAD STATE   */                                COMPILATION_LOOP
 3770                      I = INDEX1(STATE);   /*   INDEX INTO THE TABLE   */           COMPILATION_LOOP
 3771                     IF NO_LOOK_AHEAD_DONE                                          COMPILATION_LOOP
 3772                          THEN DO;   /*   GET A TOKEN   */                          COMPILATION_LOOP
 3773                               CALL SCAN;                                           COMPILATION_LOOP
 3774                               NO_LOOK_AHEAD_DONE = FALSE;                          COMPILATION_LOOP
 3775                               END;                                                 COMPILATION_LOOP
 3776                     /*   CHECK TOKEN AGAINST LEGAL LOOKAHEAD TRANSITION SYMBOLS*/  COMPILATION_LOOP
 3777                     DO WHILE LOOK1(I) \= 0;                                        COMPILATION_LOOP
 3778                     IF LOOK1(I) = TOKEN                                            COMPILATION_LOOP
 3779                          THEN GO TO LOOK_MATCH;   /*   FOUND ONE   */              COMPILATION_LOOP
 3780                     I = I+1;                                                       COMPILATION_LOOP
 3781                     END;                                                           COMPILATION_LOOP
 3782         LOOK_MATCH: STATE = LOOK2(I);                                              COMPILATION_LOOP
 3783                     END;                                                           COMPILATION_LOOP
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 116
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3784                ELSE DO;   /*   PUSH STATE   */                                     COMPILATION_LOOP
 3785                     SP = SP+1;   /*   PUSH A NON-TERMINAL ONTO THE STACK   */      COMPILATION_LOOP
 3786                     IF SP = STACKSIZE                                              COMPILATION_LOOP
 3787                          THEN DO;                                                  COMPILATION_LOOP
 3788                               CALL ERROR (OVERFLOW,2);                             COMPILATION_LOOP
 3789                               RETURN;                                              COMPILATION_LOOP
 3790                               END;                                                 COMPILATION_LOOP
 3791                     /*   PUSH A STATE # INTO THE STATE_STACK   */                  COMPILATION_LOOP
 3792                     STATE_STACK(SP) = INDEX2(STATE);                               COMPILATION_LOOP
 3793                     /*   GET NEXT STATE                        */                  COMPILATION_LOOP
 3794                     STATE = INDEX1(STATE);                                         COMPILATION_LOOP
 3795                     END;                                                           COMPILATION_LOOP
 3796           END;   /*   OF COMPILE LOOP   */                                         COMPILATION_LOOP
 3797                                                                                    COMPILATION_LOOP
 3798           END COMPILATION_LOOP;                                                    COMPILATION_LOOP

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
COMP            LABEL     11377  PROGRAM   3694       1
END_OF_FILE     CHARACTER   950   STRING   3682       1
I               FIXED     10604     DATA   3681      19
J               FIXED     10605     DATA   3681       2
LOOK_MATCH      LABEL     11615  PROGRAM   3779       1
OVERFLOW        CHARACTER   949   STRING   3679       2
STATE           FIXED     10606     DATA   3681      20
TOP_MATCH       LABEL     11562  PROGRAM   3756       1
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 117
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3799                                                                                   *
 3800  PRINT_TIME:                                                                      *
 3801     PROCEDURE (TEXT, TIME);                                                       *
 3802     /* PRINT TEXT FOLLOWED BY TIME, WHICH IS IN MILLISECONDS */                    PRINT_TIME
 3803        DECLARE TEXT CHARACTER, TIME FIXED;                                         PRINT_TIME
 3804        K = TIME;                                                                   PRINT_TIME
 3805        I = K / 60000;                                                              PRINT_TIME
 3806        J = K MOD 60000 / 1000;                                                     PRINT_TIME
 3807        K = K MOD 1000;                                                             PRINT_TIME
 3808        CALL PRINTLINE (TEXT ^^ I ^^ ':' ^^ J ^^ '.' ^^ K,-1);                      PRINT_TIME
 3809     END PRINT_TIME;                                                                PRINT_TIME

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
TEXT            CHARACTER   952   STRING   3801       1
TIME            FIXED     10629     DATA   3801       1
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 118
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3810                                                                                   *
 3811     /*   E X E C U T I O N   S T A R T S   H E R E                          */    *
 3812                                                                                   *
 3813     DECLARE TIME_START FIXED,                                                     *
 3814             TIME_INIT FIXED,                                                      *
 3815             TIME_COMPILE FIXED,                                                   *
 3816             TIME_FINISH FIXED;                                                    *
 3817                                                                                   *
 3818     TIME_START = RUNTIME;           /* GET TIME(CPU) STARTED*/                    *
 3819     CALL INITIALIZE;                                                              *
 3820     TIME_INIT = RUNTIME;     /* TIME TO INITIALIZE */                             *
 3821     CALL COMPILATION_LOOP;                                                        *
 3822     TIME_COMPILE = RUNTIME;     /* TIME TO COMPILE THE PROGRAM*/                  *
 3823     CONTROL(BYTE('E')) = FALSE;                                                   *
 3824     CONTROL(BYTE('B')) = FALSE;                                                   *
 3825     SUBTITLE = '';                                                                *
 3826     IF CONTROL(BYTE('S')) THEN CALL SYMBOLDUMP;                                   *
 3827     ELSE EJECT_PAGE;                                                              *
 3828     /* NOW ENTER THE VALUE OF NDESCRIPT                                        */ *
 3829     CALL EMITLABEL (NDESC,5);            /* GENERATE LABEL */                     *
 3830     IF CONTROL(BYTE('A')) THEN                                                    *
 3831        OUTPUT(DATAFILE) = '$' ^^ NDESC ^^ ':'; /* LABEL FOR ASSEMBLER */          *
 3832     CALL EMITDATAWORD (DSP-1);           /* PUT DOWN NUMBER OF DESC'S */          *
 3833     IF CONTROL(BYTE('A')) THEN                                                    *
 3834        OUTPUT(DATAFILE) = 'S=.;';           /* START STRING SEGMENT */            *
 3835     /* ADD THE DESCRIPTORS TO THE DATA SEGMENT                                 */ *
 3836     DO I = 0 TO DSP-1;                                                            *
 3837        IF CONTROL(BYTE('A')) THEN                                                 *
 3838           OUTPUT(DATAFILE)='       BYTE (9)'^^DESCL(I)^^ '(27)' ^^DESCA(I)^^ ';'; *
 3839        CALL OUTPUT_DATAWORD (SHL(DESCL(I),27) + DESCA(I), DP);                    *
 3840        CALL EMITLABEL (I,3);                                                      *
 3841        DP = DP + 1;                                                               *
 3842     END;                                                                          *
 3843     /* FINAL CODE FOR SYSTEM INTERFACE                                         */ *
 3844     CALL EMITINST (4,0,0,0,0,0);                                                  *
 3845     CALL FLUSH_DATA_BUFFER;                                                       *
 3846     CALL FLUSH_LABELS;                                                            *
 3847     DO WHILE CODE_TAIL \= CODE_HEAD;                                              *
 3848        CALL OUTPUT_CODEWORD;                                                      *
 3849        END;                                                                       *
 3850     CALL OUTPUT_CODEWORD;                                                         *
 3851     CALL FLUSH_CODE_BUFFER;                                                       *
 3852     IF CONTROL(BYTE('A')) THEN                                                    *
 3853        DO;                                                                        *
 3854           OUTPUT (CODEFILE) = '       END $0;';                                   *
 3855           /* COPY CODE FILE TO END OF DATA FILE */                                *
 3856           CODESTRING = INPUT(CODEFILE);                                           *
 3857           DO WHILE LENGTH(CODESTRING) > 0;                                        *
 3858              OUTPUT(DATAFILE) = CODESTRING;                                       *
 3859              CODESTRING = INPUT(CODEFILE);                                        *
 3860           END;                                                                    *
 3861           OUTPUT (CODEFILE) = ' ';                                                *
 3862        END;                                                                       *
 3863                                                                                   *
 3864     FILE(RELFILE) = SYMB_TYPE + 2;      /* GENERATE EXTERNAL REFS */              *
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 119
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3865     FILE(RELFILE) = "(3)040000000000";                                            * C40 = 524288
 3866     FILE(RELFILE) = "(3)600000000000" + RADIX50 ('XPLLIB');                       * C41 = 4294967296
 3867     FILE(RELFILE) = LIBRARY;                                                      * C42 = -17179869184
 3868     FILE(RELFILE) = START_TYPE + 1;                                               *
 3869     FILE(RELFILE) = "(3)200000000000";                                            * C43 = 1835008
 3870     FILE(RELFILE) = "(3)400000" + STARTLOC;                                       *
 3871     FILE(RELFILE) = END_TYPE + 2;                                                 *
 3872     FILE(RELFILE) = "(3)240000000000";                                            *
 3873     FILE(RELFILE) = "(3)400000" + PP;                                             * C44 = 21474836480
 3874     FILE(RELFILE) = DP;                                                           *
 3875                                                                                   *
 3876     TIME_FINISH = RUNTIME;   /* TIME TO DO ALL BUT FINAL STATS */                 *
 3877     CALL PRINTLINE (SUBSTR(X70, 0, 40) ^^ 'C O M P I L E R   S T A T I S T I C S',-1);*
 3878     CALL PRINTLINE (CARD_COUNT ^^ ' LINES CONTAINING ' ^^ STATEMENT_COUNT ^^      * C45 = 5368709120
 3879        ' STATEMENTS WERE COMPILED.',0);                                           *
 3880     IF ERROR_COUNT = 0 THEN CALL PRINTLINE ('NO ERRORS WERE DETECTED.',-1);       *
 3881     ELSE IF ERROR_COUNT > 1 THEN                                                  *
 3882        CALL PRINTLINE (ERROR_COUNT ^^ ' ERRORS (' ^^ SEVERE_ERRORS                *
 3883        ^^ ' SEVERE) WERE DETECTED.',-1);                                          *
 3884     ELSE IF SEVERE_ERRORS = 1 THEN CALL PRINTLINE ('ONE SEVERE ERROR WAS DETECTED.',-1);*
 3885        ELSE CALL PRINTLINE ('ONE ERROR WAS DETECTED.',-1);                        *
 3886      IF PREVIOUS_ERROR > 0 THEN                                                   *
 3887         CALL PRINTLINE ('LAST ERROR WAS ON LINE ' ^^ PREVIOUS_ERROR ,-1);         *
 3888     CALL PRINTLINE (PP ^^ ' WORDS OF PROGRAM, ' ^^ DP-DSP ^^ ' WORDS OF DATA, AND ' ^^*
 3889        DSP ^^ ' WORDS OF DESCRIPTORS.  TOTAL CORE REQUIREMENT ' ^^ PP+DP ^^       *
 3890        ' WORDS.',-1);                                                             *
 3891                                                                                   *
 3892  /* NOW COMPUTE TIMES AND PRINT THEM */                                           *
 3893     TIME_INIT = TIME_INIT - TIME_START;                                           *
 3894     TIME_COMPILE = TIME_COMPILE - TIME_START;                                     *
 3895     TIME_FINISH = TIME_FINISH - TIME_START;                                       *
 3896                                                                                   *
 3897     CALL PRINT_TIME ('TOTAL TIME IN COMPILER    = ',TIME_FINISH);                 *
 3898     CALL PRINT_TIME ('INITIALIZATION TIME       = ',TIME_INIT);                   *
 3899     CALL PRINT_TIME ('ACTUAL COMPILATION TIME   = ',TIME_COMPILE - TIME_INIT);    *
 3900     CALL PRINT_TIME ('POST-COMPILATION CLEAN-UP = ',TIME_FINISH-TIME_COMPILE);    *
 3901                                                                                   *
 3902     IF CONTROL(BYTE('D')) THEN CALL DUMPIT;                                       *
 3903  EOF EOF EOF EOF EOF EOF EOF EOF EOF EOF EOF EOF EOF EOF EOF EOF EOF EOF EOF EOF  *

SYMBOL TABLE DUMP

SYMBOL                TYPE       LOC   SEGMENT DEFINED REF COUNT
A                     FIXED      1923     DATA    275      10
ACC                   FIXED      1929     DATA    280      43
ADD                   FIXED      6253     DATA    400       9
ADDI                  FIXED      6254     DATA    401       4
ADDM                  FIXED      6255     DATA    402       2
ADDRMASK              FIXED      1927     DATA    277       5
ADR                   FIXED      2139     DATA    347      16
AND                   FIXED      6256     DATA    403       8
ANDI                  FIXED      6257     DATA    404       3
AOSA                  FIXED      6258     DATA    405       1
APPLY1                BIT (9)     932     DATA    126       2
APPLY2                BIT (9)    1062     DATA    155       2
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 120
SYMBOL                TYPE       LOC   SEGMENT DEFINED REF COUNT
 
ARITHEMIT             PROCEDURE  4907  PROGRAM   1981       9
  PARAMETER  1        FIXED      9686     DATA   1981      21
  PARAMETER  2        FIXED      9687     DATA   1981      10
B                     FIXED      1924     DATA    275       9
BACKMSG               CHARACTER   750   STRING    537       4
BACKUP                PROCEDURE  3747  PROGRAM   1653       3
BALANCE               CHARACTER   103   STRING    236       8
BASE                  FIXED      1691     DATA    230       3
BCD                   CHARACTER    97   STRING    190      27
BCHAR                 PROCEDURE   920  PROGRAM    710       2
BLT                   FIXED      6259     DATA    406       2
BOOLBRANCH            PROCEDURE  5099  PROGRAM   2026       2
  PARAMETER  1        FIXED      9698     DATA   2026       7
  PARAMETER  2        FIXED      9699     DATA   2026       4
BUFFER                CHARACTER   100   STRING    222      15
BUILD_BCD             PROCEDURE   561  PROGRAM    614       2
  PARAMETER  1        BIT (9)    9149     DATA    615       3
BYTEPTRS              FIXED      1906     DATA    258       6
C                     FIXED      1925     DATA    275       3
CALLI                 FIXED      6260     DATA    407       1
CALLSUB               PROCEDURE  3694  PROGRAM   1635       1
  PARAMETER  1        FIXED      9602     DATA   1635       2
  PARAMETER  2        FIXED      9603     DATA   1635       2
  PARAMETER  3        FIXED      9604     DATA   1635       4
CALLTYPE              FIXED      1912     DATA    264       3
CAM                   FIXED      6261     DATA    408       5
CAMGE                 FIXED      6262     DATA    409       1
CAML                  FIXED      6263     DATA    410       1
CAMLE                 FIXED      6264     DATA    411       1
CAMN                  FIXED      6265     DATA    412       2
CARD_COUNT            FIXED      1684     DATA    223      13
CASEP                 FIXED      9095     DATA    533      12
CASESTACK             FIXED      8919     DATA    532       3
CATENTRY              FIXED      1909     DATA    261       2
CH                    FIXED      1384     DATA    190       7
CHAR                  PROCEDURE   894  PROGRAM    695       7
CHARTYPE              BIT (9)    1427     DATA    211       9
CHAR_TEMP             CHARACTER   259   STRING    462       7
CHECK_STRING_OVERFLOW PROCEDURE  3681  PROGRAM   1630       3
CLEARARS              PROCEDURE  3199  PROGRAM   1435       6
CMPRHI                FIXED      6266     DATA    413       2
CNT                   FIXED      8712     DATA    524      36
CODE                  CHARACTER   231   STRING    303       8
CODEMSG               CHARACTER   748   STRING    535       4
CODESTRING            CHARACTER   235   STRING    309       4
CODE_BUFFER           FIXED      1959     DATA    314       7
CODE_FULL             BIT (9)    1954     DATA    304       7
CODE_HEAD             FIXED      1955     DATA    305      26
CODE_PP               FIXED      2020     DATA    318       4
CODE_RBITS            FIXED      2024     DATA    319       4
CODE_REL              FIXED      2016     DATA    317       4
CODE_TAIL             FIXED      1956     DATA    306      13
COMPACTIFY            PROCEDURE   128  PROGRAM      0       1
COMPARESWAP           FIXED      6304     DATA    451       1
COMPILATION_LOOP      PROCEDURE 11371  PROGRAM   3676       1
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 121
SYMBOL                TYPE       LOC   SEGMENT DEFINED REF COUNT
 
COMPILING             FIXED      1901     DATA    251       6
CONCATENATE           FIXED      1699     DATA    235       2
CONFLICT              PROCEDURE 11246  PROGRAM   3605       1
  PARAMETER  1        FIXED     10589     DATA   3605       3
CONTROL               BIT (9)    1555     DATA    211      61
COREBYTELOC           FIXED      1915     DATA    267       3
COUNT_ARITH           FIXED      1948     DATA    286       3
COUNT_COMPACT         FIXED        33     DATA      0       3
COUNT_FORCE           FIXED      1947     DATA    285       3
COUNT_INST            FIXED      1946     DATA    284       3
COUNT_SCAN            FIXED      1945     DATA    283       3
COUNT_STORE           FIXED      1949     DATA    287       3
CP                    FIXED      1385     DATA    190      62
CURRENT_PROCEDURE     CHARACTER   102   STRING    226       7
DATACARD              CHARACTER   230   STRING    301      13
DATAMSG               CHARACTER   749   STRING    536       5
DATA_BUFFER           FIXED      1978     DATA    315       6
DCTR                  FIXED      2031     DATA    324      15
DEBLANK               PROCEDURE   907  PROGRAM    703       3
DELETE_MOVE           PROCEDURE  3782  PROGRAM   1663       8
  PARAMETER  1        FIXED      9605     DATA   1664      12
  PARAMETER  2        FIXED      9606     DATA   1664      11
  PARAMETER  3        FIXED      9607     DATA   1664      11
  PARAMETER  4        FIXED      9608     DATA   1664      10
  PARAMETER  5        FIXED      9609     DATA   1664      11
  PARAMETER  6        FIXED      9610     DATA   1664      10
  PARAMETER  7        FIXED      9611     DATA   1664      10
DESCA                 FIXED      2147     DATA    352       3
DESCL                 FIXED      3148     DATA    353       3
DESCREF               FIXED      4149     DATA    354       5
DIVIDE                FIXED      1695     DATA    233       2
DIVIDE_CODE           PROCEDURE  5399  PROGRAM   2109       2
  PARAMETER  1        FIXED      9711     DATA   2109       4
DLOC                  FIXED      2032     DATA    325       5
DP                    FIXED      1957     DATA    307      60
DPB                   FIXED      6267     DATA    414       3
DPOFFSET              FIXED      1958     DATA    308      21
DPTR                  FIXED      2030     DATA    323      12
DSP                   FIXED      5150     DATA    355      24
DUMPIT                PROCEDURE  6113  PROGRAM   2294       1
EMITBLOCK             PROCEDURE  2007  PROGRAM   1077       3
  PARAMETER  1        FIXED      9252     DATA   1078       5
EMITBYTE              PROCEDURE  2148  PROGRAM   1103       4
  PARAMETER  1        FIXED      9261     DATA   1104       7
EMITCODEWORD          PROCEDURE  2299  PROGRAM   1133       1
  PARAMETER  1        CHARACTER   788   STRING   1133       2
  PARAMETER  2        FIXED      9477     DATA   1133       2
  PARAMETER  3        FIXED      9478     DATA   1133       2
EMITCONSTANT          PROCEDURE  2204  PROGRAM   1114      10
  PARAMETER  1        FIXED      9266     DATA   1115      15
EMITDATAWORD          PROCEDURE  2073  PROGRAM   1089      19
  PARAMETER  1        FIXED      9259     DATA   1090      21
EMITDESC              PROCEDURE  2825  PROGRAM   1307       7
  PARAMETER  1        FIXED      9513     DATA   1307       9
  PARAMETER  2        FIXED      9514     DATA   1307       9
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 122
SYMBOL                TYPE       LOC   SEGMENT DEFINED REF COUNT
 
EMITINST              PROCEDURE  2613  PROGRAM   1231     219
  PARAMETER  1        FIXED      9495     DATA   1231     224
  PARAMETER  2        FIXED      9496     DATA   1231     221
  PARAMETER  3        FIXED      9497     DATA   1231     221
  PARAMETER  4        FIXED      9498     DATA   1231     226
  PARAMETER  5        FIXED      9499     DATA   1231     222
  PARAMETER  6        FIXED      9500     DATA   1231     222
EMITLABEL             PROCEDURE  2396  PROGRAM   1160      13
  PARAMETER  1        FIXED      9480     DATA   1160      19
  PARAMETER  2        FIXED      9481     DATA   1160      18
EMIT_INLINE           PROCEDURE  3844  PROGRAM   1694       2
  PARAMETER  1        BIT (9)    9612     DATA   1695       3
ENTER                 PROCEDURE  2921  PROGRAM   1338       8
  PARAMETER  1        CHARACTER   812   STRING   1338      13
  PARAMETER  2        FIXED      9525     DATA   1338      11
  PARAMETER  3        FIXED      9526     DATA   1338      10
  PARAMETER  4        FIXED      9527     DATA   1338      10
EOFILE                FIXED      1696     DATA    233       3
ERROR                 PROCEDURE   431  PROGRAM    581      56
  PARAMETER  1        CHARACTER   760   STRING    582      60
  PARAMETER  2        FIXED      9123     DATA    582      57
ERROR_COUNT           FIXED      1685     DATA    223       5
EXPANSION_COUNT       FIXED      1888     DATA    241       4
FAILSOFT              FIXED      1900     DATA    251       3
FALSELOC              FIXED      1905     DATA    257       1
FILEMSG               CHARACTER   751   STRING    538       2
FINDAR                PROCEDURE  3210  PROGRAM   1442      12
FINDLABEL             PROCEDURE  2888  PROGRAM   1322      11
FIXL                  FIXED      8865     DATA    528      78
FIXV                  FIXED      8763     DATA    526      58
FLUSH_CODE_BUFFER     PROCEDURE  1634  PROGRAM    953       3
FLUSH_DATACARD        PROCEDURE  1940  PROGRAM   1065       6
FLUSH_DATA_BUFFER     PROCEDURE  1598  PROGRAM    936       3
FLUSH_LABELS          PROCEDURE  1843  PROGRAM   1020       2
FORCEACCUMULATOR      PROCEDURE  4037  PROGRAM   1772      33
  PARAMETER  1        FIXED      9636     DATA   1772      67
FORCEADDRESS          PROCEDURE  3280  PROGRAM   1475       1
  PARAMETER  1        FIXED      9568     DATA   1476       2
FORCEDESCRIPTOR       PROCEDURE  4502  PROGRAM   1882      11
  PARAMETER  1        FIXED      9665     DATA   1883      21
FOR_COUNT             FIXED      2136     DATA    331      13
FOR_LABEL             FIXED      2085     DATA    330       6
FOR_REF               FIXED      2034     DATA    329       7
FREEBASE              FIXED        32     DATA      0       2
FREELIMIT             FIXED        11     DATA      0       2
GENSTORE              PROCEDURE  4569  PROGRAM   1900       3
  PARAMETER  1        FIXED      9666     DATA   1900      20
  PARAMETER  2        FIXED      9667     DATA   1900      23
GET_CARD              PROCEDURE   590  PROGRAM    621       5
HASH                  FIXED      7868     DATA    512       9
HASHER                PROCEDURE  2895  PROGRAM   1330       5
  PARAMETER  1        CHARACTER   811   STRING   1331       8
HLL                   FIXED      6268     DATA    415       5
HLRZ                  FIXED      6269     DATA    416       1
HRLI                  FIXED      6270     DATA    417       2
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 123
SYMBOL                TYPE       LOC   SEGMENT DEFINED REF COUNT
 
HRLM                  FIXED      6271     DATA    418       1
HRREI                 FIXED      6272     DATA    419       1
I                     FIXED      6321     DATA    464     144
IDCOMPARES            FIXED      6315     DATA    455       5
IDENT                 FIXED      1692     DATA    233       3
IDIV                  FIXED      6273     DATA    420       1
IDIVI                 FIXED      6274     DATA    421       1
IDPB                  FIXED      6275     DATA    422       3
IDX                   FIXED      8545     DATA    514       7
ID_LOOKUP             PROCEDURE  3089  PROGRAM   1386       3
  PARAMETER  1        FIXED      9548     DATA   1387      12
ILDB                  FIXED      6276     DATA    423       3
IMUL                  FIXED      6277     DATA    424       1
INDEX1                FIXED      1089     DATA    162       5
INDEX2                BIT (9)    1324     DATA    175       4
INFO                  CHARACTER   258   STRING    461       8
INITIALIZE            PROCEDURE  6436  PROGRAM   2348       1
INSTRUCT              FIXED      5741     DATA    398       8
INX                   FIXED      8661     DATA    523      53
IOR                   FIXED      6278     DATA    425       4
ITYPE                 FIXED      2140     DATA    348       4
I_FORMAT              PROCEDURE   351  PROGRAM    545       6
  PARAMETER  1        FIXED      9111     DATA    546       7
  PARAMETER  2        FIXED      9112     DATA    546       8
I_STRING              CHARACTER   260   STRING    463      12
J                     FIXED      6322     DATA    464      46
JBASE                 FIXED      1690     DATA    230      10
JRST                  FIXED      6279     DATA    426      12
JUMP                  FIXED      6280     DATA    427       2
JUMPE                 FIXED      6281     DATA    428       2
JUMPGE                FIXED      6282     DATA    429       1
JUMPN                 FIXED      6283     DATA    430       2
K                     FIXED      6323     DATA    464      22
L                     FIXED      6324     DATA    464       2
LABELSET              FIXED      1697     DATA    234       1
LABEL_BUFFER          FIXED      1997     DATA    316       5
LABEL_COUNT           FIXED      2033     DATA    326      10
LABEL_GEN             CHARACTER   226   STRING    279       7
LABEL_SINK            FIXED      1928     DATA    278       3
LB                    FIXED      1700     DATA    236      12
LDB                   FIXED      6284     DATA    431       2
LENGTHMASK            FIXED      1926     DATA    276       4
LIBRARY               FIXED      1919     DATA    271       2
LIBRARY_CALL          PROCEDURE  3948  PROGRAM   1727       5
  PARAMETER  1        FIXED      9627     DATA   1727       8
  PARAMETER  2        FIXED      9628     DATA   1727       7
  PARAMETER  3        FIXED      9629     DATA   1727       9
  PARAMETER  4        FIXED      9630     DATA   1727       9
LIBRARY_SAVE          FIXED      1920     DATA    272       1
LIMITWORD             FIXED      1916     DATA    268       3
LINE_COUNT            FIXED      1951     DATA    292      10
LINE_LENGTH           FIXED      1688     DATA    225       3
LOOK1                 BIT (9)     914     DATA    120       2
LOOK2                 BIT (9)    1044     DATA    150       1
LSH                   FIXED      6285     DATA    432      14
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 124
SYMBOL                TYPE       LOC   SEGMENT DEFINED REF COUNT
 
LSHC                  FIXED      6286     DATA    433       7
MACRO_COUNT           FIXED      1765     DATA    239       6
MACRO_DECLARE         FIXED      1826     DATA    239       4
MACRO_INDEX           BIT (9)    1701     DATA    238       5
MACRO_NAME            CHARACTER   104   STRING    237      11
MACRO_TEXT            CHARACTER   165   STRING    238       5
MAXNDECSY             FIXED      6327     DATA    465       3
MONITOR_CALL          PROCEDURE  4005  PROGRAM   1757       3
  PARAMETER  1        FIXED      9632     DATA   1757       4
  PARAMETER  2        FIXED      9634     DATA   1757       5
  PARAMETER  3        FIXED      9633     DATA   1757       4
MOVE                  FIXED      6287     DATA    434      34
MOVEI                 FIXED      6288     DATA    435      21
MOVEM                 FIXED      6289     DATA    436      19
MOVER                 FIXED      1913     DATA    265       3
MOVESTACKS            PROCEDURE  3246  PROGRAM   1462       9
  PARAMETER  1        FIXED      9566     DATA   1463      17
  PARAMETER  2        FIXED      9567     DATA   1463      17
MOVM                  FIXED      6290     DATA    437       1
MOVN                  FIXED      6291     DATA    438       2
MP                    FIXED      8917     DATA    529     252
MPP1                  FIXED      8918     DATA    529     112
NDECSY                FIXED      6326     DATA    465      38
NDESC                 FIXED      1918     DATA    270       4
NEWDP                 FIXED      2141     DATA    349      10
NEWDPOFFSET           FIXED      2143     DATA    349       6
NEWDSP                FIXED      2142     DATA    349       4
NMBRENTRY             FIXED      1910     DATA    262       2
NOT_LETTER_OR_DIGIT   BIT (9)    1619     DATA    212       4
NO_LOOK_AHEAD_DONE    BIT (9)    1902     DATA    254       7
NUMBER                FIXED      1694     DATA    233       3
NUMBER_VALUE          FIXED      1689     DATA    230       8
OLDDP                 FIXED      2144     DATA    350       4
OLDDPOFFSET           FIXED      2146     DATA    350       4
OLDDSP                FIXED      2145     DATA    350       2
OPNAME                CHARACTER   237   STRING    357       2
ORSYMBOL              FIXED      1698     DATA    235       2
OUTPUTLABEL           PROCEDURE  2374  PROGRAM   1152       2
  PARAMETER  1        FIXED      9479     DATA   1153       3
OUTPUT_CODEWORD       PROCEDURE  1760  PROGRAM    994       5
OUTPUT_DATAWORD       PROCEDURE  1880  PROGRAM   1040       3
  PARAMETER  1        FIXED      9248     DATA   1041       5
  PARAMETER  2        FIXED      9249     DATA   1041       6
PAGE_COUNT            FIXED      1950     DATA    291       4
PARCT                 FIXED      6328     DATA    465      18
POINTER               CHARACTER    99   STRING    198       4
POP                   FIXED      6292     DATA    439       2
POPJ                  FIXED      6293     DATA    440      13
PP                    FIXED      1953     DATA    302      42
PPSAVE                FIXED      8814     DATA    527      12
PREVIOUS_ERROR        FIXED      1687     DATA    224       5
PRINTLINE             PROCEDURE   374  PROGRAM    556      50
  PARAMETER  1        CHARACTER   752   STRING    557      52
  PARAMETER  2        FIXED      9114     DATA    557      54
PRINT_TIME            PROCEDURE 11653  PROGRAM   3800       4
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 125
SYMBOL                TYPE       LOC   SEGMENT DEFINED REF COUNT
 
  PARAMETER  1        CHARACTER   952   STRING   3801       5
  PARAMETER  2        FIXED     10629     DATA   3801       5
PROCMARK              FIXED      6325     DATA    465      21
PROC_START            PROCEDURE  3473  PROGRAM   1542       4
PSBITS                FIXED      1907     DATA    259       6
PTR                   FIXED      8124     DATA    513       9
PUSH                  FIXED      6294     DATA    441       2
PUSHJ                 FIXED      6295     DATA    442      10
PWORD                 FIXED      2137     DATA    332       4
RADIX50               PROCEDURE  1670  PROGRAM    970       2
  PARAMETER  1        CHARACTER   777   STRING    971       6
RCTR                  FIXED      2029     DATA    322      15
READ1                 BIT (9)     829     DATA    105       2
READ2                 BIT (9)     959     DATA    132       1
READING               BIT (9)    1952     DATA    300       4
RECOVER               PROCEDURE 11279  PROGRAM   3625       1
REFCHECK              PROCEDURE  2554  PROGRAM   1201       3
  PARAMETER  1        FIXED      9486     DATA   1202      12
REG                   FIXED      8610     DATA    522     123
RESERVED_LIMIT        FIXED      1426     DATA    201       3
RESTORE_ACS           PROCEDURE  3444  PROGRAM   1532       4
  PARAMETER  1        FIXED      9591     DATA   1533       6
RETURNED_TYPE         FIXED      6329     DATA    466      13
ROT                   FIXED      6296     DATA    443       4
RPTR                  FIXED      2028     DATA    321      13
S                     CHARACTER   236   STRING    356      21
SAVE_ACS              PROCEDURE  3419  PROGRAM   1523       4
  PARAMETER  1        FIXED      9588     DATA   1524       5
SCAN                  PROCEDURE   988  PROGRAM    729       6
SETCA                 FIXED      6297     DATA    444       1
SETINIT               PROCEDURE  3307  PROGRAM   1486       2
SETLIMIT              PROCEDURE  5242  PROGRAM   2063       2
SETZM                 FIXED      6298     DATA    445       2
SEVERE_ERRORS         FIXED      1686     DATA    224       5
SHIFT_CODE            PROCEDURE  5511  PROGRAM   2151       2
  PARAMETER  1        FIXED      9723     DATA   2152       4
SHOULDCOMMUTE         PROCEDURE  4851  PROGRAM   1974       2
SKIP                  FIXED      6299     DATA    446       1
SKIPE                 FIXED      6300     DATA    447       1
SOJG                  FIXED      6301     DATA    448       3
SOURCE                CHARACTER   229   STRING    295      11
SP                    FIXED      8916     DATA    529      97
STACK_DUMP            PROCEDURE  8740  PROGRAM   2736       2
STARTLOC              FIXED      2138     DATA    333       2
STATEMENT_COUNT       FIXED      6314     DATA    454       4
STATE_NAME            BIT (9)     804     DATA     93       2
STATE_STACK           BIT (9)    8546     DATA    520       7
STEPK                 FIXED      1922     DATA    274       3
STILLCOND             FIXED      6312     DATA    452       5
STILLINZERO           FIXED      6313     DATA    453      11
STOPIT                BIT (9)    1889     DATA    251       7
STR                   FIXED      1921     DATA    273       4
STRCOMP               FIXED      1911     DATA    263       2
STRING                FIXED      1693     DATA    233       5
STRINGCOMPARE         PROCEDURE  5585  PROGRAM   2176       4
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 126
SYMBOL                TYPE       LOC   SEGMENT DEFINED REF COUNT
 
STRING_CHECK          FIXED      1908     DATA    260       2
STRING_RECOVER        FIXED      1914     DATA    266       5
STUFF_PARAMETER       PROCEDURE  5279  PROGRAM   2078       2
SUB                   FIXED      6302     DATA    449       5
SUBI                  FIXED      6303     DATA    450       6
SUBTITLE              CHARACTER   228   STRING    290      11
SYMBOLDUMP            PROCEDURE  5678  PROGRAM   2197       2
SYNTHESIZE            PROCEDURE  8801  PROGRAM   2755       1
  PARAMETER  1        FIXED     10479     DATA   2756       2
SYT                   CHARACTER   276   STRING    490      28
SYTCARD               FIXED      7447     DATA    510       4
SYTCO                 FIXED      7026     DATA    509      14
SYTLOC                FIXED      6499     DATA    504      26
SYTSEG                BIT (9)    6920     DATA    507      18
SYTYPE                BIT (9)    6393     DATA    497      34
TARGET_REGISTER       FIXED      1903     DATA    255      11
TDECLARE              PROCEDURE  3519  PROGRAM   1551       2
  PARAMETER  1        FIXED      9595     DATA   1552       3
TEXT                  CHARACTER   101   STRING    222      44
TEXT_LIMIT            FIXED      1683     DATA    222      18
TIME_COMPILE          FIXED     10633     DATA   3815       5
TIME_FINISH           FIXED     10634     DATA   3816       5
TIME_INIT             FIXED     10632     DATA   3814       5
TIME_START            FIXED     10631     DATA   3813       4
TITLE                 CHARACTER   227   STRING    289       5
TOKEN                 FIXED      1383     DATA    190      18
TOP_MACRO             FIXED      1887     DATA    240      10
TRUELOC               FIXED      1904     DATA    256       3
TSA                   FIXED      1917     DATA    269      12
TX                    BIT (9)    1491     DATA    211       2
TYPE                  FIXED      8559     DATA    521      80
TYPENAME              CHARACTER   261   STRING    480       2
UNDECLARED_ID         PROCEDURE  3156  PROGRAM   1416       2
  PARAMETER  1        FIXED      9551     DATA   1417       9
VAR                   CHARACTER   697   STRING    525      27
VOCAB                 CHARACTER     5   STRING     71      10
X1                    CHARACTER   253   STRING    456      18
X2                    CHARACTER   254   STRING    457       4
X3                    CHARACTER   255   STRING    458       2
X4                    CHARACTER   256   STRING    459       5
X7                    CHARACTER   257   STRING    460       4
X70                   CHARACTER    98   STRING    196      19
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 127

 
                                        C O M P I L E R   S T A T I S T I C S

3903 LINES CONTAINING 2090 STATEMENTS WERE COMPILED.
NO ERRORS WERE DETECTED.
12136 WORDS OF PROGRAM, 10761 WORDS OF DATA, AND 981 WORDS OF DESCRIPTORS.  TOTAL CORE REQUIREMENT 23878 WORDS.
TOTAL TIME IN COMPILER    = 1:13.356
INITIALIZATION TIME       = 0:0.71
ACTUAL COMPILATION TIME   = 0:58.663
POST-COMPILATION CLEAN-UP = 0:14.622

MACRO DEFINITIONS:
 
NAME             AT LINE REF COUNT LITERAL VALUE
P#                   91        0    109
TRUE                194       27    "1"
BUSY                281        8    1
MAXR#                57        2    99
MAXL#                59        1    125
MAXP#                61        2    125
MAXS#                63        2    234
RSIZE                99        2    337
LSIZE               101        2    69
ASIZE               103        2    105
FALSE               194       24    "0"
AVAIL               281       35    0
VOCAB#               69        2    91
DX_SIZE               0        2    500
VERSION              53        1    '4.0'
FOREVER             195        4    WHILE TRUE
RELFILE             298       25    4
LIBFILE             299        2    5
FOR_MAX             328        3    50
CHRTYPE             471       18    6
SPECIAL             476       25    11
SYTSIZE             489       10    420
PAGE_MAX            293        4    54
DATAFILE            296       22    2
CODEFILE            297        7    3
END_TYPE            339        1    "(3)5000000"
VARIABLE            469       13    3
CONSTANT            470       18    4
BYTETYPE            473        6    8
DESCRIPT            475       12    10
PROCTYPE            478        5    13
TERMINAL#            67        7    42
CODE_TYPE           336        2    "(3)1000000"
SYMB_TYPE           337        1    "(3)2000000"
NAME_TYPE           340        1    "(3)6000000"
DESCLIMIT           351        4    1000
LABELTYPE           467        3    1
FIXEDTYPE           472       17    7
STACKSIZE           519       11    50
CASELIMIT           531        2    175
EJECT_PAGE          294        3    LINE_COUNT = PAGE_MAX+1
BUFFERSIZE          313        7    18
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 128
NAME             AT LINE REF COUNT LITERAL VALUE
 
HISEG_TYPE          338        1    "(3)3000000"
START_TYPE          341        1    "(3)7000000"
START_STATE          65        1    1
MACRO_LIMIT         237        5    60
INTREQ_TYPE         342        1    "(3)10000000"
ACCUMULATOR         468       16    2
FORWARDTYPE         474        7    9
FORWARDCALL         477        6    12
CHARPROCTYPE        479        7    14
EXPANSION_LIMIT     241        1    300
 
ID COMPARES       = 8188
SYMBOL TABLE SIZE = 410
MACRO DEFINITIONS = 52
SCAN              = 26322
EMITINST          = 13005
FORCE ACCUMULATOR = 5946
ARITHEMIT         = 862
GENERATE STORE    = 1026
FREE STRING AREA  = 14160
COMPACTIFICATIONS = 153
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 129
INSTRUCTION FREQUENCIES
 
.INIT.    1
.INPT.    6
.OUTP.    41
.EXIT.    3
.FILO.    24
.NAME.    6
CALLI     6
ILDB      3
LDB       158
IDPB      3
DPB       65
MOVE      3163
MOVEI     252
MOVEM     2540
MOVN      3
MOVM      1
IMULI     11
IDIVI     18
ROT       4
LSH       311
LSHC      7
BLT       2
JRST      714
PUSHJ     952
PUSH      62
POP       62
POPJ      137
ADD       114
ADDI      308
ADDM      2
SUB       71
SUBI      80
CAIL      14
CAIE      175
CAILE     7
CAIGE     14
CAIN      37
CAIG      54
CAML      16
CAME      21
CAMLE     62
CAMGE     6
CAMN      7
CAMG      8
JUMP      1
JUMPE     106
JUMPA     284
JUMPGE    1
JUMPN     2
SKIPE     18
SKIPGE    1
SKIPN     1
SKIPG     2
AOSA      52
SOJG      3
XCOM.XPL  COMPILED 12-MAY-1977  AT 22:34:47 BY VERSION 4.0                               PAGE 130
INSTRUCTION FREQUENCIES
 
SETZM     838
AND       79
ANDI      328
IOR       70
SETCA     7
HLL       5
HRLI      2
HRLM      1
HLRZ      1
HRREI     783