Google
 

Trailing-Edge - PDP-10 Archives - decuslib10-07 - 43,50443/ulxcom.lst
There are 2 other files named ulxcom.lst in the archive. Click here to see a list.
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 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   */                                 *
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 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  *
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 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    *
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 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.      *
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 5
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  221        PROCEDURE_DEPTH CONTAINS THE CURRENT NUMBER OF PROCEDURES NESTED.          *
  222        ALPHABET CONTAINS THE ABC'S IN UPPER CASE                                  *
  223     */                                                                            *
  224     DECLARE ALPHABET CHARACTER INITIAL ('ABCDEFGHIJKLMNOPQRSTUVWXYZ');            *
  225     DECLARE BUFFER CHARACTER, TEXT CHARACTER, TEXT_LIMIT FIXED,                   *
  226         CARD_COUNT FIXED, ERROR_COUNT FIXED,                                      *
  227         SEVERE_ERRORS FIXED, PREVIOUS_ERROR FIXED,                                *
  228         LINE_LENGTH  FIXED,         /* LENGTH OF SOURCE STATEMENT */              *
  229         CURRENT_PROCEDURE CHARACTER,                                              *
  230         PROCEDURE_DEPTH FIXED;                                                    *
  231                                                                                   *
  232     /* NUMBER_VALUE CONTAINS THE NUMERIC VALUE OF THE LAST CONSTANT SCANNED,      *
  233     */                                                                            *
  234     DECLARE NUMBER_VALUE FIXED, JBASE FIXED, BASE FIXED;                          *
  235     /* EACH OF THE FOLLOWING CONTAINS THE INDEX INTO V() OF THE CORRESPONDING     *
  236        SYMBOL.   WE ASK:    IF TOKEN = IDENT    ETC.    */                        *
  237     DECLARE IDENT FIXED, STRING FIXED, NUMBER FIXED, DIVIDE FIXED, EOFILE FIXED,  *
  238        LABELSET FIXED;                                                            *
  239     DECLARE ORSYMBOL FIXED, CONCATENATE FIXED;                                    *
  240     DECLARE BALANCE CHARACTER, LB FIXED ;                                         *
  241     DECLARE MACRO_LIMIT LITERALLY '60', MACRO_NAME (MACRO_LIMIT) CHARACTER,       *
  242        MACRO_TEXT(MACRO_LIMIT) CHARACTER, MACRO_INDEX (255) BIT (8),              *
  243        MACRO_COUNT (MACRO_LIMIT) FIXED, MACRO_DECLARE (MACRO_LIMIT) FIXED,        *
  244        TOP_MACRO FIXED;                                                           *
  245     DECLARE EXPANSION_COUNT FIXED, EXPANSION_LIMIT LITERALLY '300';               *
  246     /* STOPIT() IS A TABLE OF SYMBOLS WHICH ARE ALLOWED TO TERMINATE THE ERROR    *
  247        FLUSH PROCESS.  IN GENERAL THEY ARE SYMBOLS OF SUFFICIENT SYNTACTIC        *
  248        HIERARCHY THAT WE EXPECT TO AVOID ATTEMPTING TO START CHECKING AGAIN       *
  249        RIGHT INTO ANOTHER ERROR PRODUCING SITUATION.  THE TOKEN STACK IS ALSO     *
  250        FLUSHED DOWN TO SOMETHING ACCEPTABLE TO A STOPIT() SYMBOL.                 *
  251        FAILSOFT IS A BIT WHICH ALLOWS THE COMPILER ONE ATTEMPT AT A GENTLE        *
  252        RECOVERY.   THEN IT TAKES A STRONG HAND.   WHEN THERE IS REAL TROUBLE      *
  253        COMPILING IS SET TO FALSE, THEREBY TERMINATING THE COMPILATION.            *
  254     */                                                                            *
  255     DECLARE STOPIT(TERMINAL#) BIT(1), FAILSOFT FIXED, COMPILING FIXED;            *
  256     /*   THE FOLLOWING SWITCH IS USED BY THE LALR PARSER   */                     *
  257                                                                                   *
  258     DECLARE NO_LOOK_AHEAD_DONE BIT(1);                                            *
  259     DECLARE TARGET_REGISTER FIXED;       /* FOR FINDAR */                         *
  260     DECLARE TRUELOC FIXED;               /* LOCATION OF CONSTANT 1 */             *
  261     DECLARE FALSELOC FIXED;              /* LOCATION OF CONSTANT 0 */             *
  262     DECLARE BYTEPTRS FIXED,              /* LOCATION OF 4 PTRS FOR LDB & DPB */   *
  263             PSBITS FIXED;                /* BYTE PTRS FORE MOVE */                *
  264     DECLARE STRING_CHECK FIXED,          /* COMPACTIFY CALLER */                  *
  265             CATENTRY FIXED,              /* CATENATION SUBROUTINE */              *
  266             NMBRENTRY FIXED,             /* NUMBER TO STRING SUBROUTINE */        *
  267             STRCOMP FIXED,               /* STRING COMPARE SUBROUTINE */          *
  268             CALLTYPE FIXED INITIAL (1),  /* DIST BETWEEN SUB & FUNCTION */        *
  269             MOVER FIXED,                 /* STRING MOVE SUBROUTINE */             *
  270             STRING_RECOVER FIXED,        /* SYT LOCATION OF COMPACTIFY */         *
  271             COREBYTELOC FIXED,           /* SYT LOCATION OF COREBYTE */           *
  272             LIMITWORD FIXED,             /* ADDRESS OF FREELIMIT */               *
  273             TSA FIXED;                   /* ADDRESS OF FREEPOINT */               *
  274     DECLARE NDESC FIXED;                 /* ADDRESS OF NDESCRIPT               */ *
  275     DECLARE LIBRARY FIXED,               /* ADDRESS OF RUNTIME LIBRARY */         *
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 6
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  276             LIBRARY_SAVE FIXED,          /* PLACE TO STORE R11 ON LIB CALLS */    *
  277             STR  FIXED;                  /* DESCRIPTOR OF LAST STRING */          *
  278     DECLARE STEPK FIXED;                 /* USED FOR DO LOOPS */                  *
  279     DECLARE A FIXED, B FIXED, C FIXED;   /* FOR CATENATION & CONVERSION */        *
  280     DECLARE LENGTHMASK FIXED;            /* ADDR OF DV LENGTH MASK */             *
  281     DECLARE ADDRMASK FIXED;              /* ADDRESS OF "FFFFF" */                 *
  282     DECLARE LABEL_SINK FIXED INITIAL(0); /* FOR LABEL GENERATOR */                *
  283     DECLARE LABEL_GEN CHARACTER;         /* CONTAINS LABEL FOR NEXT INST*/        *
  284     DECLARE ACC(15) FIXED;               /* KEEPS TRACK OF ACCUMULATORS */        *
  285     DECLARE AVAIL LITERALLY '0', BUSY LITERALLY '1';                              *
  286      /* CALL COUNTS OF IMPORTANT PROCEDURES */                                    *
  287     DECLARE COUNT_SCAN FIXED, /* SCAN               */                            *
  288              COUNT_INST FIXED,  /* EMITINST           */                          *
  289              COUNT_FORCE FIXED, /* FORCEACCUMULATOR   */                          *
  290              COUNT_ARITH FIXED, /* ARITHEMIT          */                          *
  291              COUNT_STORE FIXED; /* GENSTORE           */                          *
  292                                                                                   *
  293     DECLARE TITLE        CHARACTER,     /*TITLE LINE FOR LISTING */               *
  294             SUBTITLE     CHARACTER,     /*SUBTITLE FOR LISTING */                 *
  295             PAGE_COUNT   FIXED,         /*CURRENT PAGE NUMBER FOR LISTING*/       *
  296             LINE_COUNT   FIXED,         /*NUMBER OF LINES PRINTED */              *
  297             PAGE_MAX LITERALLY '54',    /*MAX NO OF LINES ON PAGE*/               *
  298             EJECT_PAGE LITERALLY 'LINE_COUNT = PAGE_MAX+1';                       *
  299     DECLARE SOURCE CHARACTER;           /*FILE NAME BEING COMPILED*/              *
  300     DECLARE DATAFILE LITERALLY '2';     /* SCRATCH FILE FOR DATA */               *
  301     DECLARE CODEFILE LITERALLY '3';     /* SCRATCH FILE FOR CODE */               *
  302     DECLARE RELFILE  LITERALLY '4';     /* BINARY OUTPUT FILE */                  *
  303     DECLARE LIBFILE  LITERALLY '5';     /* SOURCE LIBRARY FILE */                 *
  304     DECLARE READING  BIT(1);            /* 0 IFF READING LIBFILE */               *
  305     DECLARE DATACARD CHARACTER;         /* DATA BUFFER */                         *
  306     DECLARE PP      FIXED,              /* CURRENT PROGRAM POINTER */             *
  307             CODE(3) CHARACTER,           /* THE CODE BUFFER */                    *
  308             CODE_FULL(3) BIT(1),         /* FULLNESS FLAG */                      *
  309             CODE_HEAD FIXED,             /* FRONT OF BUFFER */                    *
  310             CODE_TAIL FIXED,             /* END OF BUFFER */                      *
  311             DP      FIXED,              /* CURRENT DATA POINTER */                *
  312             DPOFFSET FIXED;             /* CURRENT DP BYTE OFFSET */              *
  313     DECLARE CODESTRING CHARACTER;     /*FOR COPYING CODE INTO DATA FILE*/         *
  314                                                                                   *
  315     /*   THE FOLLOWING ARE FOR RELOCATABLE BINARY CODE EMISSION */                *
  316                                                                                   *
  317     DECLARE BUFFERSIZE LITERALLY '18';   /* SIZE OF BINARY BUFFERS */             *
  318     DECLARE CODE_BUFFER (BUFFERSIZE) FIXED;   /*CODE (HIGH) BUFFER */             *
  319     DECLARE DATA_BUFFER (BUFFERSIZE) FIXED;   /* DATA (LOW) BUFFER */             *
  320     DECLARE LABEL_BUFFER (BUFFERSIZE) FIXED;  /* LABELS DEFINED BUFFER */         *
  321     DECLARE CODE_REL(3) FIXED,         /* BINARY CODE BUFFER (SEE CODE) */        *
  322             CODE_PP(3) FIXED,                                                     *
  323             CODE_RBITS(3) FIXED;                                                  *
  324                                                                                   *
  325     DECLARE RPTR FIXED,                  /* POINTER TO CODE_BUFFER */             *
  326             RCTR FIXED,                  /* COUNTER FOR CODE_BUFFER */            *
  327             DPTR FIXED,                   /* POINTER TO DATA_BUFFER */            *
  328             DCTR FIXED,                  /* COUNTER FOR DATA_BUFFER */            *
  329             DLOC FIXED;                   /* LOCATION OF NEXT WORD IN DATA BUFFER */*
  330     DECLARE LABEL_COUNT FIXED;            /*NO OF LABELS IN LABEL_BUFFER */       *
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 7
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  331                                                                                   *
  332     DECLARE FOR_MAX  LITERALLY '50';      /* MAXIMUM FORWARD REFERENCES */        *
  333     DECLARE FOR_REF   (FOR_MAX) FIXED,    /* FORWARD REFERENCED LABELS */         *
  334             FOR_LABEL (FOR_MAX) FIXED,    /* LABEL REFERENCED */                  *
  335             FOR_COUNT FIXED;              /* COUNT OF CURRENT FORWARD REFS */     *
  336     DECLARE PWORD FIXED;                  /* PART-WORD ACC. FOR BYTES*/           *
  337     DECLARE STARTLOC FIXED;               /* FIRST INSTRUCTION TO BE EXECUTED */  *
  338                                                                                   *
  339                                                                                   *
  340     DECLARE CODE_TYPE LITERALLY '"(3)1000000"';   /* CODE & DATA TYPE BLOCK */    *
  341     DECLARE SYMB_TYPE LITERALLY '"(3)2000000"';   /* SYMBOL DEFN TYPE BLOCK */    *
  342     DECLARE HISEG_TYPE LITERALLY '"(3)3000000"';  /* HIGH SEGMENT TYPE BLOCK */   *
  343     DECLARE END_TYPE LITERALLY '"(3)5000000"';    /* END TYPE BLOCK */            *
  344     DECLARE NAME_TYPE LITERALLY '"(3)6000000"';   /* NAME TYPE BLOCK */           *
  345     DECLARE START_TYPE LITERALLY '"(3)7000000"';  /* START ADDRESS TYPE BLOCK */  *
  346     DECLARE INTREQ_TYPE LITERALLY '"(3)10000000"'; /* INTERNAL REQUEST TYPE BLOCK */*
  347                                                                                   *
  348                                                                                   *
  349     /* END OF DEFINITIONS FOR RELOCATABLE BINARY FILES */                         *
  350                                                                                   *
  351     DECLARE ADR     FIXED;                                                        *
  352     DECLARE ITYPE FIXED;                                                          *
  353     DECLARE NEWDP FIXED, NEWDSP FIXED, NEWDPOFFSET FIXED; /* FOR ALLOCATION */    *
  354     DECLARE OLDDP FIXED, OLDDSP FIXED, OLDDPOFFSET FIXED; /* FOR ALLOCATION */    *
  355     DECLARE DESCLIMIT LITERALLY '1000', /* NUMBER OF STRING DESCRIPTORS */        *
  356             DESCA (DESCLIMIT) FIXED,     /* STRING DESCRIPTOR ADDRESS */          *
  357             DESCL (DESCLIMIT) FIXED,     /* STRING DESCRIPTOR LENGTH */           *
  358             DESCREF (DESCLIMIT) FIXED,    /* LAST REFERENCE TO STRING */          *
  359             DSP     FIXED;              /* DESCRIPTOR POINTER */                  *
  360     DECLARE S CHARACTER;                                                          *
  361     DECLARE OPNAME (15) CHARACTER INITIAL (                                       *
  362  '      .INIT..INPT..OUTP..EXIT.      .FILI..FILO..NAME.',                        *
  363  'CALL  INIT  UUO042UUO043UUO044UUO045UUO046CALLI OPEN  TTCALLUUO052UUO053UUO054  *
  364  RENAMEIN    OUT   SETSTSSTATO GETSTSSTATZ INBUF OUTBUFINPUT OUTPUTCLOSE          *
  365  RELEASMTAPE UGETF USETI USETO LOOKUPENTER ',                                     *
  366  'UUO100UUO101UUO102UUO103UUO104UUO105UUO106UUO107UUO110UUO111UUO112UUO113UUO114U *
  367  UO115UUO116UUO117UUO120UUO121UUO122UUO123UUO124UUO125UUO126UUO127UFA   DFN   FSC *
  368     IBP   ILDB  LDB   IDPB  DPB   ',                                              *
  369  '',                                                                              *
  370  'MOVE  MOVEI MOVEM MOVES MOVS  MOVSI MOVSM MOVSS MOVN  MOVNI MOVNM MOVNS MOVM  M *
  371  OVMI MOVMM MOVMS IMUL  IMULI IMULM IMULB MUL   MULI  MULM  MULB  IDIV  IDIVI IDI *
  372  VM IDIVB DIV   DIVI  DIVM  DIVB  ',                                              *
  373  'ASH   ROT   LSH   JFFO  ASHC  ROTC  LSHC  ......EXCH  BLT   AOBJP AOBJN JRST  J *
  374  FCL  XCT   ......PUSHJ PUSH  POP   POPJ  JSR   JSP   JSA   JRA   ADD   ADDI  ADD *
  375  M  ADDB  SUB   SUBI  SUBM  SUBB  ',                                              *
  376  'CAI   CAIL  CAIE  CAILE CAIA  CAIGE CAIN  CAIG  CAM   CAML  CAME  CAMLE CAMA  C *
  377  AMGE CAMN  CAMG  JUMP  JUMPL JUMPE JUMPLEJUMPA JUMPGEJUMPN JUMPG SKIP  SKIPL SKI *
  378  PE SKIPLESKIPA SKIPGESKIPN SKIPG ',                                              *
  379   'AOJ   AOJL  AOJE  AOJLE AOJA  AOJGE AOJN  AOJG  AOS   AOSL  AOSE  AOSLE AOSA  A*
  380  OSGE AOSN  AOSG  SOJ   SOJL  SOJE  SOJLE SOJA  SOJGE SOJN  SOJG  SOS   SOSL  SOS *
  381  E  SOSLE SOSA  SOSGE SOSN  SOSG  ',                                              *
  382  'SETZ  SETZI SETZM SETZB AND   ANDI  ANMD  ANDB  ANDCA ANDCAIANDCAMANDCABSETM  S *
  383  ETMI SETMM SETMB ANDCM ANDCMIANDCMMANDCMBSETA  SETAI SETAM SETAB XOR   XORI  XOR *
  384  M  XORB  IOR   IORI  IORM  IORB  ',                                              *
  385  'ANDCB ANDCBIANDCBMANDCBBEQV   EQVI  EQVM  EQVB  SETCA SETCAISETCAMSETCABORCA  O *
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 8
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  386  RCAI ORCAM ORCAB SETCM SETCMISETCMMSETCMBORCM  ORCMI ORCMM ORCMB ORCB  ORCBI ORC *
  387  BM ORCBB SETO  SETOI SETOM SETOB ',                                              *
  388  'HLL   HLLI  HLLM  HLLS  HRL   HRLI  HRLM  HRLS  HLLZ  HLLZI HLLZM HLLZS HRLZ  H *
  389  RLZI HRLZM HRLZS HLLO  HLLOI HLLOM HLLOS HRLO  HRLOI HRLOM HRLOS HLLE  HLLEI HLL *
  390  EM HLLES HRLE  HRLEI HRLEM HRLES ',                                              *
  391  'HRR   HRRI  HRRM  HRRS  HLR   HLRI  HLRM  HLRS  HRRZ  HRRZI HRRZM HRRZS HLRZ  H *
  392  LRZI HLRZM HLRZS HRRO  HRROI HRROM HRROS HLRO  HLROI HLROM HLROS HRRE  HRREI HRR *
  393  EM HRRES HLRE  HLREI HLREM HLRES ',                                              *
  394  'TRN   TLN   TRNE  TLNE  TRNA  TLNA  TRNN  TLNN  TDN   TSN   TDNE  TSNE  TDNA  T *
  395  SNA  TDNN  TSNN  TRZ   TLZ   TRZE  TLZE  TRZA  TLZA  TRZN  TLZN  TDZ   TSZ   TDZ *
  396  E  TSZE  TDZA  TSZA  TDZN  TSZN  ',                                              *
  397  'TRC   TLC   TRCE  TLCE  TRCA  TLCA  TRCN  TLCN  TDC   TSC   TDCE  TSCE  TDCA  T *
  398  SCA  TDCN  TSCN  TRO   TLO   TROE  TLOE  TROA  TLOA  TRON  TLON  TDO   TSO   TDO *
  399  E  TSOE  TDOA  TSOA  TDON  TSON  ',                                              *
  400  '',                                                                              *
  401  '');                                                                             *
  402     DECLARE INSTRUCT(511) FIXED;         /* COUNT OF THE INSTRUCTIONS ISSUED */   *
  403           /* COMMONLY USED OPCODES */                                             *
  404     DECLARE ADD    FIXED INITIAL ("(3)270"),                                      *
  405             ADDI   FIXED INITIAL ("(3)271"),                                      *
  406             ADDM   FIXED INITIAL ("(3)272"),                                      *
  407             AND    FIXED INITIAL ("(3)404"),                                      *
  408             ANDI   FIXED INITIAL ("(3)405"),                                      *
  409             AOSA   FIXED INITIAL ("(3)354"),                                      *
  410             BLT    FIXED INITIAL ("(3)251"),                                      *
  411             CALLI  FIXED INITIAL ("(3)047"),                                      *
  412             CAM    FIXED INITIAL ("(3)310"),                                      *
  413             CAMGE  FIXED INITIAL ("(3)315"),                                      *
  414             CAML   FIXED INITIAL ("(3)311"),                                      *
  415             CAMLE  FIXED INITIAL ("(3)313"),                                      *
  416             CAMN   FIXED INITIAL ("(3)316"),                                      *
  417             CMPRHI FIXED INITIAL ("(3)317"),                                      *
  418             DPB    FIXED INITIAL ("(3)137"),                                      *
  419             HLL    FIXED INITIAL ("(3)500"),                                      *
  420             HLRZ   FIXED INITIAL ("(3)554"),                                      *
  421             HRLI   FIXED INITIAL ("(3)505"),                                      *
  422             HRLM   FIXED INITIAL ("(3)506"),                                      *
  423             HRREI  FIXED INITIAL ("(3)571"),                                      *
  424             IDIV   FIXED INITIAL ("(3)230"),                                      *
  425             IDIVI  FIXED INITIAL ("(3)231"),                                      *
  426             IDPB   FIXED INITIAL ("(3)136"),                                      *
  427             ILDB   FIXED INITIAL ("(3)134"),                                      *
  428             IMUL   FIXED INITIAL ("(3)220"),                                      *
  429             IOR    FIXED INITIAL ("(3)434"),                                      *
  430             JRST   FIXED INITIAL ("(3)254"),                                      *
  431             JUMP   FIXED INITIAL ("(3)320"),                                      *
  432             JUMPE  FIXED INITIAL ("(3)322"),                                      *
  433             JUMPGE FIXED INITIAL ("(3)325"),                                      *
  434             JUMPN  FIXED INITIAL ("(3)326"),                                      *
  435             LDB    FIXED INITIAL ("(3)135"),                                      *
  436             LSH    FIXED INITIAL ("(3)242"),                                      *
  437             LSHC   FIXED INITIAL ("(3)246"),                                      *
  438             MOVE   FIXED INITIAL ("(3)200"),                                      *
  439             MOVEI  FIXED INITIAL ("(3)201"),                                      *
  440             MOVEM  FIXED INITIAL ("(3)202"),                                      *
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 9
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  441             MOVM   FIXED INITIAL ("(3)214"),                                      *
  442             MOVN   FIXED INITIAL ("(3)210"),                                      *
  443             POP    FIXED INITIAL ("(3)262"),                                      *
  444             POPJ   FIXED INITIAL ("(3)263"),                                      *
  445             PUSH   FIXED INITIAL ("(3)261"),                                      *
  446             PUSHJ  FIXED INITIAL ("(3)260"),                                      *
  447             ROT    FIXED INITIAL ("(3)241"),                                      *
  448             SETCA  FIXED INITIAL ("(3)450"),                                      *
  449             SETZM  FIXED INITIAL ("(3)402"),                                      *
  450             SKIP   FIXED INITIAL ("(3)330"),                                      *
  451             SKIPE  FIXED INITIAL ("(3)332"),                                      *
  452             SOJG   FIXED INITIAL ("(3)367"),                                      *
  453             SUB    FIXED INITIAL ("(3)274"),                                      *
  454             SUBI   FIXED INITIAL ("(3)275");                                      *
  455     DECLARE COMPARESWAP (7) FIXED INITIAL (0,7,2,5,0,3,6,1);                      *
  456     DECLARE STILLCOND FIXED,            /* PEEP HOLE FOR BOOL BRANCHING */        *
  457             STILLINZERO FIXED;          /* PEEPHOLE FOR REDUNDANT MOVES */        *
  458     DECLARE STATEMENT_COUNT FIXED;      /* A COUNT OF THE XPL STATEMENTS */       *
  459     DECLARE IDCOMPARES FIXED;                                                     *
  460     DECLARE X1 CHARACTER INITIAL (' ');                                           *
  461     DECLARE X2 CHARACTER INITIAL ('  ');                                          *
  462     DECLARE X3 CHARACTER INITIAL ('   ');                                         *
  463     DECLARE X4 CHARACTER INITIAL ('    ');                                        *
  464     DECLARE X7 CHARACTER INITIAL ('       ');                                     *
  465     DECLARE INFO CHARACTER;         /* FOR LISTING INFORMATION*/                  *
  466     DECLARE CHAR_TEMP CHARACTER;                                                  *
  467     DECLARE I_STRING CHARACTER;      /* FOR I_FORMAT */                           *
  468     DECLARE I FIXED, J FIXED, K FIXED, L FIXED;                                   *
  469     DECLARE PROCMARK FIXED, NDECSY FIXED, MAXNDECSY FIXED, PARCT FIXED;           *
  470     DECLARE RETURNED_TYPE FIXED;                                                  *
  471     DECLARE LABELTYPE     LITERALLY  '1',                                         *
  472             ACCUMULATOR   LITERALLY  '2',                                         *
  473             VARIABLE      LITERALLY  '3',                                         *
  474             CONSTANT      LITERALLY  '4',                                         *
  475             CHRTYPE       LITERALLY  '6',                                         *
  476             FIXEDTYPE     LITERALLY  '7',                                         *
  477             BYTETYPE      LITERALLY  '8',                                         *
  478             FORWARDTYPE   LITERALLY  '9',                                         *
  479             DESCRIPT      LITERALLY '10',                                         *
  480             SPECIAL       LITERALLY '11',                                         *
  481             FORWARDCALL   LITERALLY '12',                                         *
  482             PROCTYPE      LITERALLY '13',                                         *
  483             CHARPROCTYPE  LITERALLY '14';                                         *
  484     DECLARE TYPENAME (14) CHARACTER INITIAL ('', 'LABEL    ', '', '', '', '',     *
  485             'CHARACTER', 'FIXED    ', 'BIT (9)  ' , '', '', '', '',               *
  486             'PROCEDURE','CHARACTER PROCEDURE');                                   *
  487     /*  THE SYMBOL TABLE IS INITIALIZED WITH THE NAMES OF ALL                     *
  488         BUILTIN FUNCTIONS AND PSEUDO VARIABLES.  THE PROCEDURE                    *
  489         INITIALIZE DEPENDS ON THE ORDER AND PLACEMENT OF THESE                    *
  490         NAMES.  CHANGES SHOULD BE MADE OBSERVING DUE CAUTION TO                   *
  491         AVOID MESSING THINGS UP.                                                  *
  492     */                                                                            *
  493     DECLARE SYTSIZE LITERALLY '420';     /* THE SYMBOL TABLE SIZE */              *
  494     DECLARE SYT (SYTSIZE) CHARACTER      /* THE VARIABLE NAME */                  *
  495        INITIAL ('COREWORD', 'COREBYTE', 'FREEPOINT', 'DESCRIPTOR',                *
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 10
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  496           'NDESCRIPT',   'LENGTH', 'SUBSTR', 'BYTE', 'SHL', 'SHR',                *
  497           'INPUT', 'OUTPUT', 'FILE', 'INLINE', 'TRACE', 'UNTRACE',                *
  498           'EXIT', 'TIME', 'DATE', 'CLOCK_TRAP', 'INTERRUPT_TRAP',                 *
  499           'MONITOR', 'ADDR', 'RUNTIME', 'FILENAME',                               *
  500           'COMPACTIFY', 'FREELIMIT', 'FREEBASE');                                 *
  501     DECLARE SYTYPE (SYTSIZE) BIT (8)     /* TYPE OF VARIABLE */                   *
  502        INITIAL (FIXEDTYPE, BYTETYPE, FIXEDTYPE, FIXEDTYPE,                        *
  503           FIXEDTYPE, SPECIAL, SPECIAL, SPECIAL, SPECIAL, SPECIAL,                 *
  504           SPECIAL, SPECIAL, SPECIAL, SPECIAL, SPECIAL, SPECIAL,                   *
  505            SPECIAL, SPECIAL, SPECIAL, SPECIAL, SPECIAL,                           *
  506           SPECIAL, SPECIAL, SPECIAL, SPECIAL,                                     *
  507           FORWARDCALL, FIXEDTYPE, FIXEDTYPE);                                     *
  508     DECLARE SYTLOC (SYTSIZE) FIXED       /* LOCATION OF VARIABLE */               *
  509        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,     *
  510            0,0,0);                                                                *
  511     DECLARE SYTSEG (SYTSIZE) BIT(8)      /* SEGMENT OF VARIABLE */                *
  512        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);         *
  513     DECLARE SYTCO (SYTSIZE) FIXED;       /* A COUNT OF REFERENCES */              *
  514     DECLARE SYTCARD (SYTSIZE) FIXED;     /* WHERE SYMBOL IS DEFINED */            *
  515                                                                                   *
  516     DECLARE HASH (255)      FIXED,       /* HASH TABLE INTO SYMBOL TABLE*/        *
  517             PTR  (SYTSIZE)  FIXED,       /* POINTS TO NEXT SYMBOL IN HASH*/       *
  518             IDX             FIXED;       /* INDEX WHILE USING HASH*/              *
  519                                                                                   *
  520     /*  THE COMPILER STACKS DECLARED BELOW ARE USED TO DRIVE THE SYNTACTIC        *
  521        ANALYSIS ALGORITHM AND STORE INFORMATION RELEVANT TO THE INTERPRETATION    *
  522        OF THE TEXT.  THE STACKS ARE ALL POINTED TO BY THE STACK POINTER SP.  */   *
  523     DECLARE STACKSIZE LITERALLY '50';  /* SIZE OF STACK  */                       *
  524     DECLARE STATE_STACK (STACKSIZE)  BIT (8);                                     *
  525     DECLARE TYPE        (STACKSIZE)  FIXED;                                       *
  526     DECLARE REG         (STACKSIZE)  FIXED;                                       *
  527     DECLARE INX         (STACKSIZE)  FIXED;                                       *
  528     DECLARE CNT         (STACKSIZE)  FIXED;                                       *
  529     DECLARE VAR         (STACKSIZE)  CHARACTER;                                   *
  530     DECLARE FIXV        (STACKSIZE)  FIXED;                                       *
  531     DECLARE PPSAVE      (STACKSIZE)  FIXED;                                       *
  532     DECLARE FIXL        (STACKSIZE)  FIXED;                                       *
  533     DECLARE SP FIXED, MP FIXED, MPP1 FIXED;                                       *
  534                                                                                   *
  535     DECLARE CASELIMIT LITERALLY '175',                                            *
  536             CASESTACK (CASELIMIT) FIXED, /* CONTAINS ADDR OF STMTS OF CASE */     *
  537             CASEP  FIXED;                /* POINTS TO CURRENT CASESTACK ENTRY */  *
  538                                                                                   *
  539     DECLARE CODEMSG  CHARACTER INITIAL ('CODE = '),                               *
  540             DATAMSG  CHARACTER INITIAL ('DATA = '),                               *
  541             BACKMSG  CHARACTER INITIAL ('BACK UP CODE EMITTER'),                  *
  542             FILEMSG  CHARACTER INITIAL ('MISSING NUMBER FOR FILE');               *
  543                                                                                   *
  544                                                                                   *
  545  /*                                                                               *
  546            G L O B A L   P R O C E D U R E S                                      *
  547  */                                                                               *
  548                                                                                   *
  549  I_FORMAT:                                                                        *
  550     PROCEDURE (NUMBER, WIDTH);                                                    *
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 11
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  551     DECLARE NUMBER  FIXED,                                                         I_FORMAT
  552             WIDTH   FIXED;                                                         I_FORMAT
  553     DECLARE L       FIXED;                                                         I_FORMAT
  554     I_STRING = NUMBER;                                                             I_FORMAT
  555     L = LENGTH (I_STRING);                                                         I_FORMAT
  556     IF L < WIDTH THEN                                                              I_FORMAT
  557           I_STRING = SUBSTR(X70,0,WIDTH-L) ^^ I_STRING;                            I_FORMAT
  558     END  I_FORMAT;                                                                 I_FORMAT

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
L               FIXED      9121     DATA    553       3
NUMBER          FIXED      9119     DATA    550       1
WIDTH           FIXED      9120     DATA    550       2
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 12
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  559                                                                                   *
  560  PRINTLINE:                                                                       *
  561     PROCEDURE (LINE, IND);                                                        *
  562     DECLARE LINE CHARACTER,             /*LINE TO BE PRINTED */                    PRINTLINE
  563             IND FIXED;                  /*FORMAT INDICATOR*/                       PRINTLINE
  564     DECLARE CTL(5) CHARACTER INITIAL ('0','1','','','','');                        PRINTLINE
  565     DECLARE SKIPS (5) FIXED INITIAL (2,99,0,0,0,0);                                PRINTLINE
  566     IF LINE_COUNT > PAGE_MAX THEN                                                  PRINTLINE
  567        DO;                                                                         PRINTLINE
  568           PAGE_COUNT = PAGE_COUNT + 1;                                             PRINTLINE
  569           OUTPUT(1) = TITLE ^^ PAGE_COUNT;                                         PRINTLINE
  570           OUTPUT = SUBTITLE;                                                       PRINTLINE
  571           OUTPUT = ' ';                                                            PRINTLINE
  572           LINE_COUNT = 0;                                                          PRINTLINE
  573        END;                                                                        PRINTLINE
  574     IF IND < 0 ^ IND > 5 THEN                                                      PRINTLINE
  575        DO;                                                                         PRINTLINE
  576           OUTPUT = LINE;                                                           PRINTLINE
  577           LINE_COUNT = LINE_COUNT + 1;                                             PRINTLINE
  578        END;                                                                        PRINTLINE
  579     ELSE                                                                           PRINTLINE
  580        DO;                                                                         PRINTLINE
  581           OUTPUT(1) = CTL(IND) ^^ LINE;                                            PRINTLINE
  582           LINE_COUNT = LINE_COUNT + SKIPS(IND);                                    PRINTLINE
  583        END;                                                                        PRINTLINE
  584  END PRINTLINE;                                                                    PRINTLINE

SYMBOL TABLE DUMP

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

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9132     DATA    592       2
MSG             CHARACTER   761   STRING    586       4
SEVERITY        FIXED      9131     DATA    586       1
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 14
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  617     /*                THE SCANNER PROCEDURES              */                      *
  618     BUILD_BCD:                                                                    *
  619        PROCEDURE (C);                                                             *
  620        DECLARE C BIT(9);                                                           BUILD_BCD
  621        IF LENGTH(BCD) > 0 THEN BCD = BCD ^^ X1;                                    BUILD_BCD
  622        ELSE BCD = SUBSTR(X1 ^^ X1, 1);                                             BUILD_BCD
  623        COREBYTE(FREEPOINT-1) = C;                                                  BUILD_BCD C5 = 134217727
  624     END BUILD_BCD;                                                                 BUILD_BCD

SYMBOL TABLE DUMP

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

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9159     DATA    628      27
TEMP2           CHARACTER   766   STRING    628       7
TEMPO           CHARACTER   765   STRING    628      15
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 17
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  710     CHAR:                                                                         *
  711        PROCEDURE;                                                                 *
  712        CP = CP + 1;                                                                CHAR
  713        IF CP <= TEXT_LIMIT THEN RETURN;                                            CHAR
  714        CP = 0;                                                                     CHAR
  715        TEXT = '';                                                                  CHAR
  716        CALL GET_CARD;                                                              CHAR
  717     END CHAR;                                                                      CHAR
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 18
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  718     DEBLANK:                                                                      *
  719        PROCEDURE;                                                                 *
  720        CALL CHAR;                                                                  DEBLANK
  721        DO WHILE BYTE (TEXT, CP) = BYTE (' ');                                      DEBLANK
  722           CALL CHAR;                                                               DEBLANK
  723        END;                                                                        DEBLANK
  724     END DEBLANK;                                                                   DEBLANK
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 19
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  725     BCHAR:                                                                        *
  726        PROCEDURE;                                                                 *
  727        DO FOREVER;                                                                 BCHAR
  728           CALL DEBLANK;                                                            BCHAR
  729           CH = BYTE(TEXT, CP);                                                     BCHAR
  730           IF CH \= BYTE ('(') THEN RETURN;                                         BCHAR
  731           /*  (BASE WIDTH)  */                                                     BCHAR
  732            CALL DEBLANK;                                                           BCHAR
  733           JBASE = BYTE (TEXT, CP) - BYTE ('0');  /* WIDTH */                       BCHAR
  734           IF JBASE < 1 ^ JBASE > 4 THEN                                            BCHAR
  735              DO;                                                                   BCHAR
  736                 CALL ERROR ('ILLEGAL BIT STRING WIDTH: ' ^^ SUBSTR(TEXT,CP,1),0);  BCHAR
  737                 JBASE = 4;  /* DEFAULT WIDTH FOR ERROR */                          BCHAR C7 = 134217728
  738              END;                                                                  BCHAR
  739           BASE = SHL(1, JBASE);                                                    BCHAR
  740           CALL DEBLANK;                                                            BCHAR
  741          IF BYTE(TEXT,CP)\=BYTE(')')THEN CALL ERROR('MISSING ) IN BIT STRING',0);  BCHAR
  742        END;                                                                        BCHAR
  743     END BCHAR;                                                                     BCHAR
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 20
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  744                                                                                   *
  745     LOWUP:       /* CONVERT S TO UPPER CASE */                                    *
  746       PROCEDURE (S) CHARACTER;                                                    *
  747       DECLARE (S,T) CHARACTER;                                                     LOWUP
  748       T = '';                                                                      LOWUP
  749       DO I = 0 TO LENGTH(S)-1;                                                     LOWUP
  750          IF BYTE(S,I) > 96 THEN                                                    LOWUP
  751             T = T ^^ SUBSTR(ALPHABET,BYTE(S,I)-97,1);                              LOWUP
  752          ELSE                                                                      LOWUP
  753             T = T ^^ SUBSTR(S,I,1);                                                LOWUP
  754          END;                                                                      LOWUP
  755       RETURN T;                                                                    LOWUP
  756       END LOWUP;                                                                   LOWUP

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
S               CHARACTER   772   STRING    746       4
T               CHARACTER   773   STRING    747       6
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 21
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  757                                                                                   *
  758     SCAN:                                                                         *
  759        PROCEDURE;     /* GET THE NEXT TOKEN FROM THE TEXT  */                     *
  760        DECLARE S1 FIXED, S2 FIXED;                                                 SCAN
  761     DECLARE LSTRNGM CHARACTER INITIAL ('STRING TOO LONG');                         SCAN
  762     DECLARE LBITM CHARACTER INITIAL ('BIT STRING TOO LONG');                       SCAN
  763      COUNT_SCAN = COUNT_SCAN + 1;                                                  SCAN
  764        FAILSOFT = TRUE;                                                            SCAN
  765        BCD = '';  NUMBER_VALUE = 0;                                                SCAN
  766     RESCAN:                                                                        SCAN
  767        IF CP > TEXT_LIMIT THEN                                                     SCAN
  768           DO;                                                                      SCAN
  769              TEXT = '';                                                            SCAN
  770              CALL GET_CARD;                                                        SCAN
  771           END;                                                                     SCAN
  772        ELSE                                                                        SCAN
  773           DO;                                                                      SCAN
  774              TEXT_LIMIT = TEXT_LIMIT - CP;                                         SCAN
  775              TEXT = SUBSTR(TEXT, CP);                                              SCAN
  776           END;                                                                     SCAN
  777        CP = 0;                                                                     SCAN
  778     /*  BRANCH ON NEXT CHARACTER IN TEXT                  */                       SCAN
  779        DO CASE CHARTYPE(BYTE(TEXT));                                               SCAN
  780           /*  CASE 0  */                                                           SCAN CASE 0.
  781           /* ILLEGAL CHARACTERS FALL HERE  */                                      SCAN
  782           CALL ERROR ('ILLEGAL CHARACTER: ' ^^ SUBSTR (TEXT, 0, 1) ^^              SCAN
  783              '  (' ^^ BYTE(TEXT) ^^ ')', 0);                                       SCAN
  784           /*  CASE 1  */                                                           SCAN CASE 1.
  785           /*  BLANK  */                                                            SCAN
  786           DO CP = 1 TO TEXT_LIMIT;                                                 SCAN
  787              IF BYTE (TEXT, CP) \= BYTE (' ') THEN GOTO RESCAN;                    SCAN
  788           END;                                                                     SCAN
  789           /*  CASE 2  */                                                           SCAN CASE 2.
  790           DO FOREVER;   /* STRING QUOTE ('):  CHARACTER STRING       */            SCAN
  791              TOKEN = STRING;                                                       SCAN
  792              DO CP = CP + 1 TO TEXT_LIMIT;                                         SCAN
  793                 IF BYTE (TEXT, CP) = BYTE ('''') THEN                              SCAN
  794                    DO;                                                             SCAN
  795                       IF LENGTH(BCD) + CP > 257 THEN                               SCAN
  796                          DO;                                                       SCAN
  797                             CALL ERROR (LSTRNGM, 0);                               SCAN
  798                             RETURN;                                                SCAN
  799                          END;                                                      SCAN
  800                       IF CP > 1 THEN                                               SCAN
  801                       BCD = BCD ^^ SUBSTR(TEXT, 1, CP-1);                          SCAN
  802                       CALL CHAR;                                                   SCAN
  803                        IF BYTE (TEXT, CP) = BYTE ('''') THEN                       SCAN
  804                           IF LENGTH(BCD) = 255 THEN                                SCAN
  805                             DO;                                                    SCAN
  806                               CALL ERROR (LSTRNGM, 0);                             SCAN
  807                               RETURN;                                              SCAN
  808                             END;                                                   SCAN
  809                          ELSE                                                      SCAN
  810                             DO;                                                    SCAN
  811                                BCD = BCD ^^ SUBSTR(TEXT, CP, 1);                   SCAN
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 22
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  812                                GO TO RESCAN;                                       SCAN
  813                             END;                                                   SCAN
  814                       RETURN;                                                      SCAN
  815                    END;                                                            SCAN
  816              END;                                                                  SCAN
  817              /*  WE HAVE RUN OFF A CARD  */                                        SCAN
  818              IF LENGTH(BCD) + CP > 257 THEN                                        SCAN
  819                 DO;                                                                SCAN
  820                   CALL ERROR (LSTRNGM, 0);                                         SCAN
  821                   RETURN;                                                          SCAN
  822                 END;                                                               SCAN
  823              IF CP > 1 THEN BCD = BCD ^^ SUBSTR(TEXT, 1, CP-1);                    SCAN
  824              TEXT = X1;                                                            SCAN
  825              CP = 0;                                                               SCAN
  826              CALL GET_CARD;                                                        SCAN
  827           END;                                                                     SCAN
  828           /*  CASE 3  */                                                           SCAN CASE 3.
  829           DO;      /*  BIT QUOTE("):  BIT STRING  */                               SCAN
  830              JBASE = 4;  BASE = 16;  /* DEFAULT WIDTH */                           SCAN
  831              TOKEN = NUMBER;                                                       SCAN
  832              S1 = 0;                                                               SCAN
  833              CALL BCHAR;                                                           SCAN
  834              DO WHILE CH \= BYTE ('"');                                            SCAN
  835                 S1 = S1 + JBASE;                                                   SCAN
  836                 IF CH >= BYTE ('0') & CH <= BYTE ('9') THEN S2 = CH - BYTE ('0');  SCAN
  837                 ELSE S2 = CH + 10 - BYTE ('A');                                    SCAN
  838                 IF S2 >= BASE ^ S2 < 0 THEN                                        SCAN
  839                    CALL ERROR ('ILLEGAL CHARACTER IN BIT STRING: '                 SCAN
  840                    ^^ SUBSTR(TEXT, CP, 1), 0);                                     SCAN
  841                 IF S1 > 36 THEN TOKEN = STRING;                                    SCAN
  842                 IF TOKEN = STRING THEN                                             SCAN
  843                    DO WHILE S1 - JBASE >= 9;                                       SCAN
  844                       IF LENGTH(BCD) >= 255 THEN                                   SCAN
  845                          DO;                                                       SCAN
  846                             CALL ERROR ( LBITM, 0);                                SCAN
  847                             RETURN;                                                SCAN
  848                          END;                                                      SCAN
  849                       S1 = S1 - 9;                                                 SCAN
  850                       CALL BUILD_BCD (SHR(NUMBER_VALUE, S1-JBASE));                SCAN
  851                    END;                                                            SCAN
  852                 NUMBER_VALUE = SHL(NUMBER_VALUE, JBASE) + S2;                      SCAN
  853                 CALL BCHAR;                                                        SCAN
  854              END;     /* OF DO WHILE CH...  */                                     SCAN
  855              CP = CP + 1;                                                          SCAN
  856              IF TOKEN = STRING THEN                                                SCAN
  857                 IF LENGTH(BCD) >= 255 THEN CALL ERROR (LBITM,0);                   SCAN
  858                 ELSE CALL BUILD_BCD (SHL(NUMBER_VALUE, 9 - S1));                   SCAN
  859               RETURN;                                                              SCAN
  860           END;                                                                     SCAN
  861           /*  CASE 4  */                                                           SCAN CASE 4.
  862           DO FOREVER;   /*  A LETTER:  IDENTIFIERS AND RESERVED WORDS  */          SCAN
  863              DO CP = CP + 1 TO TEXT_LIMIT;                                         SCAN
  864                 IF NOT_LETTER_OR_DIGIT(BYTE(TEXT, CP)) THEN                        SCAN
  865                    DO;  /* END OF IDENTIFIER  */                                   SCAN
  866                       BCD = LOWUP(SUBSTR(TEXT, 0, CP));                            SCAN
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 23
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  867                       IF CP > 1 THEN IF CP <= RESERVED_LIMIT THEN                  SCAN
  868                          /* CHECK FOR RESERVED WORDS */                            SCAN
  869                          DO I = 1 TO TERMINAL#;                                    SCAN
  870                             IF BCD = VOCAB(I) THEN                                 SCAN C8 = 42
  871                                DO;                                                 SCAN
  872                                   TOKEN = I;                                       SCAN
  873                                   RETURN;                                          SCAN
  874                                END;                                                SCAN
  875                          END;                                                      SCAN
  876                       DO I = MACRO_INDEX(CP-1) TO MACRO_INDEX(CP) - 1;             SCAN
  877                          IF BCD = MACRO_NAME(I) THEN                               SCAN
  878                             DO;                                                    SCAN
  879                              MACRO_COUNT(I) = MACRO_COUNT(I) + 1;                  SCAN
  880                                BCD = MACRO_TEXT(I);                                SCAN
  881                                IF EXPANSION_COUNT < EXPANSION_LIMIT THEN           SCAN
  882                                   EXPANSION_COUNT = EXPANSION_COUNT + 1;           SCAN
  883                                ELSE CALL PRINTLINE ('** WARNING, TOO MANY EXPANSIONS FOR SCAN
  884   THE MACRO: ' ^^ BCD,-1);                                                         SCAN
  885                                TEXT = SUBSTR(TEXT, CP);                            SCAN
  886                                TEXT_LIMIT = TEXT_LIMIT - CP;                       SCAN
  887                                IF LENGTH(BCD) + TEXT_LIMIT > 255 THEN              SCAN
  888                                   DO;                                              SCAN
  889                                      IF LB + TEXT_LIMIT > 255 THEN                 SCAN
  890                                         CALL ERROR('MACRO EXPANSION TOO LONG',0);  SCAN
  891                                      ELSE                                          SCAN
  892                                         DO;                                        SCAN
  893                                            BALANCE = TEXT ^^ BALANCE;              SCAN
  894                                            LB = LENGTH(BALANCE);                   SCAN
  895                                            TEXT = BCD;                             SCAN
  896                                         END;                                       SCAN
  897                                   END;                                             SCAN
  898                                ELSE TEXT = BCD ^^ TEXT;                            SCAN
  899                                BCD = '';                                           SCAN
  900                                TEXT_LIMIT = LENGTH(TEXT) - 1;                      SCAN
  901                                CP = 0;                                             SCAN
  902                                GO TO RESCAN;                                       SCAN
  903                             END;                                                   SCAN
  904                       END;                                                         SCAN
  905                       /*  RESERVED WORDS EXIT HIGHER:  THEREFORE <IDENTIFIER> */   SCAN
  906                       TOKEN = IDENT;                                               SCAN
  907                       RETURN;                                                      SCAN
  908                    END;                                                            SCAN
  909              END;                                                                  SCAN
  910              /*  END OF CARD  */                                                   SCAN
  911              CALL GET_CARD;                                                        SCAN
  912              CP = CP - 1;                                                          SCAN
  913           END;                                                                     SCAN
  914           /*  CASE 5  */                                                           SCAN CASE 5.
  915            DO FOREVER;   /*  DIGIT:  A NUMBER  */                                  SCAN
  916              TOKEN = NUMBER;                                                       SCAN
  917              DO CP = CP TO TEXT_LIMIT;                                             SCAN
  918                 S1 = BYTE(TEXT, CP);                                               SCAN
  919                 IF S1 < BYTE ('0') ^ S1 > BYTE ('9') THEN RETURN;                  SCAN
  920                 NUMBER_VALUE = 10 * NUMBER_VALUE + S1 - BYTE ('0');                SCAN
  921              END;                                                                  SCAN
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 24
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  922              CALL GET_CARD;                                                        SCAN
  923           END;                                                                     SCAN
  924           /*  CASE 6  */                                                           SCAN CASE 6.
  925           DO;      /*  A /:  MAY BE DIVIDE OR START OF COMMENT  */                 SCAN
  926              CALL CHAR;                                                            SCAN
  927              IF BYTE (TEXT, CP) \= BYTE ('*') THEN                                 SCAN
  928                 DO;                                                                SCAN
  929                    TOKEN = DIVIDE;                                                 SCAN
  930                    RETURN;                                                         SCAN
  931                 END;                                                               SCAN
  932              /* WE HAVE A COMMENT  */                                              SCAN
  933              S1, S2 = BYTE (' ');                                                  SCAN
  934              DO WHILE S1 \= BYTE ('*') ^ S2 \= BYTE ('/');                         SCAN
  935                 IF S1 = BYTE ('$') THEN /* A CONTROL CHAR */                       SCAN
  936                      CONTROL(S2) = \CONTROL(S2) & 1;                               SCAN
  937                 S1 = S2;                                                           SCAN
  938                 CALL CHAR;                                                         SCAN
  939                 S2 = BYTE(TEXT, CP);                                               SCAN
  940              END;                                                                  SCAN
  941           END;                                                                     SCAN
  942           /*  CASE 7  */                                                           SCAN CASE 7.
  943           DO;      /*  SPECIAL CHARACTERS  */                                      SCAN
  944              TOKEN = TX(BYTE(TEXT));                                               SCAN
  945              CP = 1;                                                               SCAN
  946              RETURN;                                                               SCAN
  947           END;                                                                     SCAN
  948           /*  CASE 8  */                                                           SCAN CASE 8.
  949           DO;   /* A ^:  MAY BE  ^  OR  ^^  */                                     SCAN
  950              CALL CHAR;                                                            SCAN
  951              IF BYTE(TEXT, CP) = BYTE('^') THEN                                    SCAN
  952                 DO;                                                                SCAN
  953                    CALL CHAR;                                                      SCAN
  954                    TOKEN = CONCATENATE;                                            SCAN
  955                 END;                                                               SCAN
  956              ELSE TOKEN = ORSYMBOL;                                                SCAN
  957              RETURN;                                                               SCAN
  958           END;                                                                     SCAN
  959        END;     /* OF CASE ON CHARTYPE  */                                         SCAN CASE 9.
  960        CP = CP + 1;  /* ADVANCE SCANNER AND RESUME SEARCH FOR TOKEN  */            SCAN
  961        GO TO RESCAN;                                                               SCAN
  962     END SCAN;                                                                      SCAN

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
LBITM           CHARACTER   775   STRING    762       2
LSTRNGM         CHARACTER   774   STRING    761       3
RESCAN          LABEL      1098  PROGRAM    766       4
S1              FIXED      9193     DATA    760      17
S2              FIXED      9194     DATA    760      11
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 25
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  963     /*                                                                            *
  964              C O D E   E M I S S I O N   P R O C E D U R E S                      *
  965   */                                                                              *
  966  FLUSH_DATA_BUFFER:                                                               *
  967     PROCEDURE;                                                                    *
  968        /* CLEAN OUT THE DATA BUFFER AND STICK ALL CURRENT CONTENTS                 FLUSH_DATA_BUFFER
  969           INTO THE REL FILE */                                                     FLUSH_DATA_BUFFER
  970        DECLARE I FIXED, J FIXED;                                                   FLUSH_DATA_BUFFER
  971        IF (DPTR+DCTR) > 1 THEN                                                     FLUSH_DATA_BUFFER
  972           DO;                                                                      FLUSH_DATA_BUFFER
  973              J = (DPTR/19)*18 + DCTR -1;                                           FLUSH_DATA_BUFFER
  974              FILE(RELFILE) = CODE_TYPE + J;                                        FLUSH_DATA_BUFFER
  975              I = DPTR+DCTR-1;                                                      FLUSH_DATA_BUFFER C9 = 262144
  976              DO J = 0 TO I;                                                        FLUSH_DATA_BUFFER
  977                 FILE(RELFILE) = DATA_BUFFER(J);                                    FLUSH_DATA_BUFFER
  978                 END;                                                               FLUSH_DATA_BUFFER
  979           END;                                                                     FLUSH_DATA_BUFFER
  980        DPTR = 0;                                                                   FLUSH_DATA_BUFFER
  981        DCTR = 1;                                                                   FLUSH_DATA_BUFFER
  982     END FLUSH_DATA_BUFFER;                                                         FLUSH_DATA_BUFFER

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9243     DATA    970       2
J               FIXED      9244     DATA    970       4
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 26
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
  983  FLUSH_CODE_BUFFER:                                                               *
  984     PROCEDURE;                                                                    *
  985        /* CLEAN OUT THE CODE BUFFER AND STICK ALL CURRENT CONTENTS                 FLUSH_CODE_BUFFER
  986           INTO THE REL FILE */                                                     FLUSH_CODE_BUFFER
  987        DECLARE I FIXED, J FIXED;                                                   FLUSH_CODE_BUFFER
  988        IF (RPTR+RCTR) > 1 THEN                                                     FLUSH_CODE_BUFFER
  989           DO;                                                                      FLUSH_CODE_BUFFER
  990              I = (RPTR/19)*18 + RCTR -1;                                           FLUSH_CODE_BUFFER
  991              J = RPTR+RCTR-1;                                                      FLUSH_CODE_BUFFER
  992              FILE (RELFILE) = CODE_TYPE+I;                                         FLUSH_CODE_BUFFER
  993              DO I = 0 TO J;                                                        FLUSH_CODE_BUFFER
  994                 FILE(RELFILE) = CODE_BUFFER(I);                                    FLUSH_CODE_BUFFER
  995                 END;                                                               FLUSH_CODE_BUFFER
  996           END;                                                                     FLUSH_CODE_BUFFER
  997        RPTR = 0;                                                                   FLUSH_CODE_BUFFER
  998                                                                                    FLUSH_CODE_BUFFER
  999        RCTR = 1;                                                                   FLUSH_CODE_BUFFER
 1000     END FLUSH_CODE_BUFFER;                                                         FLUSH_CODE_BUFFER

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9247     DATA    987       4
J               FIXED      9248     DATA    987       2
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 27
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1001                                                                                   *
 1002  RADIX50:                                                                         *
 1003     PROCEDURE (SYMBOL);                                                           *
 1004     /* PROCEDURE TO RETURN THE RADIX-50 REPRESENTATION OF A SYMBOL.                RADIX50
 1005        ONLY THE FIRST 6 CHARACTERS ARE USED. */                                    RADIX50
 1006     DECLARE SYMBOL CHARACTER;                                                      RADIX50
 1007     DECLARE (I,J,K,L) FIXED;                                                       RADIX50
 1008                                                                                    RADIX50
 1009     J = 0;                                                                         RADIX50
 1010     IF LENGTH(SYMBOL) < 6 THEN SYMBOL = SYMBOL ^^ X7;                              RADIX50
 1011     DO L = 0 TO 5;                                                                 RADIX50
 1012        I = BYTE(SYMBOL,L);                                                         RADIX50 C10 = 5
 1013        IF I = BYTE(' ') THEN K = 0;                                                RADIX50
 1014                                                                                    RADIX50
 1015           ELSE IF I = BYTE ('.') THEN K = "(3)45";                                 RADIX50
 1016                                                                                    RADIX50
 1017           ELSE IF I = BYTE ('$') THEN K = "(3)46";                                 RADIX50
 1018                                                                                    RADIX50
 1019           ELSE IF I = BYTE ('%') THEN K = "(3)47";                                 RADIX50
 1020           ELSE IF I >= BYTE ('0') & I <= BYTE ('9') THEN                           RADIX50
 1021                                                                                    RADIX50
 1022                      K = I-BYTE('0') + "(3)1";                                     RADIX50
 1023           ELSE IF I >= BYTE ('A') & I <= BYTE ('Z') THEN                           RADIX50
 1024                      K = I - BYTE ('A') + "(3)13";                                 RADIX50
 1025           ELSE RETURN J;                                                           RADIX50
 1026        J = J * "(3)50" + K;                                                        RADIX50
 1027        END;                                                                        RADIX50
 1028     RETURN J;                                                                      RADIX50
 1029     END RADIX50;                                                                   RADIX50

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9250     DATA   1007      11
J               FIXED      9251     DATA   1007       5
K               FIXED      9252     DATA   1007       7
L               FIXED      9253     DATA   1007       2
SYMBOL          CHARACTER   782   STRING   1003       4
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 28
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1030  OUTPUT_CODEWORD:                                                                 *
 1031     PROCEDURE;                                                                    *
 1032     /* SPIT OUT THE INSTRUCTION AT CODEXXX(CODE_TAIL) */                           OUTPUT_CODEWORD
 1033                                                                                    OUTPUT_CODEWORD
 1034     IF CODE_FULL(CODE_TAIL) THEN                                                   OUTPUT_CODEWORD
 1035                                                                                    OUTPUT_CODEWORD
 1036        DO;                                                                         OUTPUT_CODEWORD
 1037           IF CONTROL(BYTE('A')) THEN OUTPUT (CODEFILE) = CODE (CODE_TAIL);         OUTPUT_CODEWORD
 1038                                                                                    OUTPUT_CODEWORD
 1039           IF RCTR+RPTR = 1 THEN                                                    OUTPUT_CODEWORD
 1040              DO;                                                                   OUTPUT_CODEWORD
 1041                 CODE_BUFFER(0) =SHL(1,34);                                         OUTPUT_CODEWORD
 1042                 CODE_BUFFER(1) = CODE_PP(CODE_TAIL) + "(3)400000";                 OUTPUT_CODEWORD
 1043                 RCTR = RCTR +1;                                                    OUTPUT_CODEWORD
 1044              END;                                                                  OUTPUT_CODEWORD
 1045           CODE_BUFFER(RPTR) = SHL(CODE_RBITS(CODE_TAIL),36-RCTR*2)^CODE_BUFFER(RPTR); OUTPUT_CODEWORD
 1046           CODE_BUFFER(RPTR+RCTR) = CODE_REL(CODE_TAIL);                            OUTPUT_CODEWORD
 1047           RCTR = RCTR +1;                                                          OUTPUT_CODEWORD
 1048           IF RPTR+RCTR > BUFFERSIZE THEN CALL FLUSH_CODE_BUFFER;                   OUTPUT_CODEWORD
 1049           IF RCTR > 18 THEN                                                        OUTPUT_CODEWORD
 1050              DO;                                                                   OUTPUT_CODEWORD
 1051                 RPTR = RPTR +19;                                                   OUTPUT_CODEWORD
 1052                 RCTR = 1;                                                          OUTPUT_CODEWORD
 1053                 CODE_BUFFER(RPTR) = 0;                                             OUTPUT_CODEWORD
 1054              END;                                                                  OUTPUT_CODEWORD
 1055        END;                                                                        OUTPUT_CODEWORD
 1056     CODE_FULL(CODE_TAIL) = FALSE;                                                  OUTPUT_CODEWORD
 1057     CODE_TAIL = (CODE_TAIL+1) & 3;                                                 OUTPUT_CODEWORD
 1058     END OUTPUT_CODEWORD;                                                           OUTPUT_CODEWORD
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 29
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1059  FLUSH_LABELS:                                                                    *
 1060     PROCEDURE;                                                                    *
 1061        /* CLEAN OUT LABEL BUFFER BY GENERATING INTERNAL REQUEST                    FLUSH_LABELS
 1062           TYPE BLOCK AND DEFINING ALL LABELS NOW KNOWN */                          FLUSH_LABELS
 1063        DECLARE I FIXED;                                                            FLUSH_LABELS
 1064        IF LABEL_COUNT = 0 THEN RETURN;                                             FLUSH_LABELS
 1065        DO WHILE CODE_TAIL \= CODE_HEAD;                                            FLUSH_LABELS
 1066           CALL OUTPUT_CODEWORD;                                                    FLUSH_LABELS
 1067           END;                                                                     FLUSH_LABELS
 1068        CALL OUTPUT_CODEWORD;                                                       FLUSH_LABELS
 1069        CODE_TAIL = CODE_HEAD;      /* RESET POINTERS, SINCE BUFFERS NOW EMPTY */   FLUSH_LABELS
 1070        STILLCOND, STILLINZERO = 0; /* MAKE SURE PEEPHOLE WORKS */                  FLUSH_LABELS
 1071        CALL FLUSH_CODE_BUFFER;                                                     FLUSH_LABELS
 1072        FILE (RELFILE) = INTREQ_TYPE+LABEL_COUNT;                                   FLUSH_LABELS
 1073        DO I = 0 TO LABEL_COUNT;                                                    FLUSH_LABELS C11 = 2097152
 1074           FILE (RELFILE) = LABEL_BUFFER(I);                                        FLUSH_LABELS
 1075           END;                                                                     FLUSH_LABELS
 1076        LABEL_COUNT = 0;                                                            FLUSH_LABELS
 1077        LABEL_BUFFER(0) = 0;                                                        FLUSH_LABELS
 1078     END FLUSH_LABELS;                                                              FLUSH_LABELS

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9255     DATA   1063       2
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 30
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1079  OUTPUT_DATAWORD:                                                                 *
 1080     PROCEDURE (W,LOC);                                                            *
 1081        /* OUTPUT A WORD TO THE LOW SEGMENT */                                      OUTPUT_DATAWORD
 1082        DECLARE W  FIXED, LOC FIXED;                                                OUTPUT_DATAWORD
 1083        IF (DPTR+DCTR)>BUFFERSIZE ^ DLOC \= LOC THEN CALL FLUSH_DATA_BUFFER;        OUTPUT_DATAWORD
 1084        IF DPTR+DCTR = 1 THEN                                                       OUTPUT_DATAWORD
 1085           DO;                                                                      OUTPUT_DATAWORD
 1086              DATA_BUFFER(0) = "(3)200000000000";                                   OUTPUT_DATAWORD
 1087              DATA_BUFFER(1) = LOC;                                                 OUTPUT_DATAWORD C12 = 17179869184
 1088              DATA_BUFFER(2) = W;                                                   OUTPUT_DATAWORD
 1089              DLOC = LOC + 1;                                                       OUTPUT_DATAWORD
 1090              DCTR = DCTR + 2;                                                      OUTPUT_DATAWORD
 1091              RETURN;                                                               OUTPUT_DATAWORD
 1092           END;                                                                     OUTPUT_DATAWORD
 1093        DATA_BUFFER (DPTR+DCTR) = W;                                                OUTPUT_DATAWORD
 1094        DCTR = DCTR +1;                                                             OUTPUT_DATAWORD
 1095        DLOC = DLOC + 1;                                                            OUTPUT_DATAWORD
 1096        IF DPTR+DCTR > BUFFERSIZE THEN CALL FLUSH_DATA_BUFFER;                      OUTPUT_DATAWORD
 1097        IF DCTR > 18 THEN                                                           OUTPUT_DATAWORD
 1098          DO;                                                                       OUTPUT_DATAWORD
 1099              DCTR = 1;                                                             OUTPUT_DATAWORD
 1100              DPTR = DPTR + 19;                                                     OUTPUT_DATAWORD
 1101              DATA_BUFFER(DPTR) = 0;                                                OUTPUT_DATAWORD
 1102           END;                                                                     OUTPUT_DATAWORD
 1103     END OUTPUT_DATAWORD;                                                           OUTPUT_DATAWORD

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
LOC             FIXED      9259     DATA   1080       3
W               FIXED      9258     DATA   1080       2
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 31
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1104  FLUSH_DATACARD:PROCEDURE;                                                        *
 1105        IF CONTROL(BYTE('A')) ^ CONTROL(BYTE('B')) THEN                             FLUSH_DATACARD
 1106           DO;                                                                      FLUSH_DATACARD
 1107              DATACARD = DATACARD ^^ '; D' ^^ DP;                                   FLUSH_DATACARD
 1108              IF CONTROL(BYTE('A')) THEN OUTPUT (DATAFILE) = DATACARD;              FLUSH_DATACARD
 1109              IF CONTROL(BYTE('B')) THEN CALL PRINTLINE (DATAMSG ^^ DATACARD,-1);   FLUSH_DATACARD
 1110           END;                                                                     FLUSH_DATACARD
 1111        CALL OUTPUT_DATAWORD (PWORD,DP);                                            FLUSH_DATACARD
 1112        PWORD = 0;                                                                  FLUSH_DATACARD
 1113        DPOFFSET = 0;                                                               FLUSH_DATACARD
 1114        DP = DP + 1;                                                                FLUSH_DATACARD
 1115  END FLUSH_DATACARD;                                                               FLUSH_DATACARD
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 32
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1116  EMITBLOCK:                                                                       *
 1117     PROCEDURE (I);                                                                *
 1118        /* RESERVE A BLOCK OF I WORDS */                                            EMITBLOCK
 1119        DECLARE I FIXED;                                                            EMITBLOCK
 1120        IF CONTROL(BYTE('A')) ^ CONTROL(BYTE('B')) THEN                             EMITBLOCK
 1121           DO;                                                                      EMITBLOCK
 1122              DATACARD = '       REPEAT ' ^^ I ^^ ',<0>; D' ^^ DP;                  EMITBLOCK
 1123              IF CONTROL(BYTE('A')) THEN OUTPUT (DATAFILE) = DATACARD;              EMITBLOCK
 1124              IF CONTROL(BYTE('B')) THEN CALL PRINTLINE (DATAMSG ^^ DATACARD,-1);   EMITBLOCK
 1125           END;                                                                     EMITBLOCK
 1126        DP = DP + I;                                                                EMITBLOCK
 1127  END EMITBLOCK;                                                                    EMITBLOCK

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9262     DATA   1117       2
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 33
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1128  EMITDATAWORD:                                                                    *
 1129     PROCEDURE (W);                                                                *
 1130        DECLARE W FIXED;                                                            EMITDATAWORD
 1131        /* SEND AN 80 CHARACTER CARD TO THE DATA FILE */                            EMITDATAWORD
 1132        IF DPOFFSET > 0 THEN CALL FLUSH_DATACARD;                                   EMITDATAWORD
 1133        IF CONTROL(BYTE('A')) ^ CONTROL(BYTE('B')) THEN                             EMITDATAWORD
 1134           DO;                                                                      EMITDATAWORD
 1135              DATACARD = X7 ^^ W ^^ '; D' ^^ DP;                                    EMITDATAWORD
 1136              IF CONTROL(BYTE('A')) THEN OUTPUT (DATAFILE) = DATACARD;              EMITDATAWORD
 1137              IF CONTROL(BYTE('B')) THEN CALL PRINTLINE (DATAMSG ^^ DATACARD,-1);   EMITDATAWORD
 1138           END;                                                                     EMITDATAWORD
 1139        CALL OUTPUT_DATAWORD(W,DP);                                                 EMITDATAWORD
 1140        DP = DP + 1;                                                                EMITDATAWORD
 1141  END EMITDATAWORD;                                                                 EMITDATAWORD

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
W               FIXED      9269     DATA   1129       2
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 34
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1142  EMITBYTE:                                                                        *
 1143     PROCEDURE (C);                                                                *
 1144        DECLARE C FIXED;                                                            EMITBYTE
 1145        /* SEND ONE 9-BIT BYTE TO THE DATA AREA */                                  EMITBYTE
 1146        IF CONTROL(BYTE('A')) ^ CONTROL(BYTE('B')) THEN                             EMITBYTE
 1147           IF DPOFFSET = 0 THEN DATACARD = '       BYTE (9)'^^ C;                   EMITBYTE
 1148           ELSE DATACARD = DATACARD ^^ ',' ^^ C;                                    EMITBYTE
 1149        PWORD = PWORD + SHL(C&"(3)777",9*(3-DPOFFSET));                             EMITBYTE
 1150        DPOFFSET = DPOFFSET + 1;                                                    EMITBYTE
 1151        IF DPOFFSET = 4 THEN CALL FLUSH_DATACARD;                                   EMITBYTE
 1152  END EMITBYTE;                                                                     EMITBYTE

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
C               FIXED      9271     DATA   1143       3
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 35
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1153  EMITCONSTANT:                                                                    *
 1154     PROCEDURE (C);                                                                *
 1155        DECLARE C FIXED;                                                            EMITCONSTANT
 1156        DECLARE CTAB (100) FIXED, CADD (100) FIXED, NC FIXED, I FIXED;              EMITCONSTANT
 1157        /* SEE IF C HAS ALREADY BEEN EMITED, AND IF NOT, EMIT IT.  SET UP ADR.  */  EMITCONSTANT
 1158        DO I = 1 TO NC;                  /* STEP THRU THE CONSTANTS */              EMITCONSTANT
 1159           IF CTAB (I) = C THEN                                                     EMITCONSTANT
 1160              DO;                                                                   EMITCONSTANT
 1161                 ADR = CADD (I);                                                    EMITCONSTANT
 1162                 RETURN;                                                            EMITCONSTANT
 1163              END;                                                                  EMITCONSTANT
 1164        END;                                                                        EMITCONSTANT
 1165        CTAB (I) = C;                                                               EMITCONSTANT
 1166        CALL EMITDATAWORD (C);                                                      EMITCONSTANT
 1167        ADR, CADD (I) = DP - 1;                                                     EMITCONSTANT
 1168        IF I < 100 THEN NC = I;                                                     EMITCONSTANT
 1169        IF CONTROL(BYTE('C')) THEN CALL PRINTLINE ('* CONSTANT ' ^^ NC ^^ ' = ' ^^ C,-1); EMITCONSTANT
 1170           ELSE IF CONTROL(BYTE('L')) THEN INFO=INFO^^ ' C'^^ NC ^^' = ' ^^ C;      EMITCONSTANT
 1171  END EMITCONSTANT;                                                                 EMITCONSTANT

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
C               FIXED      9276     DATA   1154       5
CADD            FIXED      9378     DATA   1156       2
CTAB            FIXED      9277     DATA   1156       2
I               FIXED      9480     DATA   1156       7
NC              FIXED      9479     DATA   1156       4
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 36
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1172  EMITCODEWORD:PROCEDURE (W,WORD,RBITS);                                           *
 1173         DECLARE W CHARACTER;                                                       EMITCODEWORD
 1174        DECLARE WORD FIXED;                                                         EMITCODEWORD
 1175        DECLARE RBITS FIXED;                                                        EMITCODEWORD
 1176        /* SEND AN 80 CHARACTER CODE CARD TO THE BUFFER AREA */                     EMITCODEWORD
 1177        CODE_HEAD = (CODE_HEAD+1) & 3;                                              EMITCODEWORD
 1178        IF CODE_HEAD = CODE_TAIL THEN CALL OUTPUT_CODEWORD;                         EMITCODEWORD
 1179        IF CONTROL(BYTE('A')) ^ CONTROL(BYTE('E')) THEN                             EMITCODEWORD
 1180              CODE(CODE_HEAD) = LABEL_GEN ^^ W;                                     EMITCODEWORD
 1181        IF CONTROL(BYTE('E')) THEN                                                  EMITCODEWORD
 1182              CALL PRINTLINE (CODEMSG ^^ CODE(CODE_HEAD),-1);                       EMITCODEWORD
 1183        CODE_REL(CODE_HEAD) = WORD;                                                 EMITCODEWORD
 1184        CODE_PP(CODE_HEAD) = PP;                                                    EMITCODEWORD
 1185        CODE_RBITS(CODE_HEAD) = RBITS;                                              EMITCODEWORD
 1186        CODE_FULL(CODE_HEAD) = TRUE;                                                EMITCODEWORD
 1187        LABEL_GEN = '';                                                             EMITCODEWORD
 1188        STILLCOND, STILLINZERO = 0;                                                 EMITCODEWORD
 1189        PP = PP + 1;                                                                EMITCODEWORD
 1190  END EMITCODEWORD;                                                                 EMITCODEWORD

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
RBITS           FIXED      9488     DATA   1172       1
W               CHARACTER   793   STRING   1172       1
WORD            FIXED      9487     DATA   1172       1
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 37
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1191  OUTPUTLABEL:                                                                     *
 1192     PROCEDURE (J);                                                                *
 1193     DECLARE J FIXED;                                                               OUTPUTLABEL
 1194     LABEL_COUNT = LABEL_COUNT+1;                                                   OUTPUTLABEL
 1195     LABEL_BUFFER(0) = SHL(3,36-LABEL_COUNT*2)^LABEL_BUFFER(0);                     OUTPUTLABEL
 1196     LABEL_BUFFER(LABEL_COUNT) = J;                                                 OUTPUTLABEL
 1197     IF(LABEL_COUNT >= BUFFERSIZE) THEN CALL FLUSH_LABELS;                          OUTPUTLABEL
 1198     END OUTPUTLABEL;                                                               OUTPUTLABEL

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
J               FIXED      9489     DATA   1192       1
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 38
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1199  EMITLABEL:PROCEDURE(L,R);                                                        *
 1200        DECLARE L FIXED;                                                            EMITLABEL
 1201        DECLARE R FIXED;                                                            EMITLABEL
 1202        DECLARE I FIXED;                                                            EMITLABEL
 1203        DECLARE J FIXED;                                                            EMITLABEL
 1204        IF R = 3 THEN                                                               EMITLABEL
 1205           DO;                                                                      EMITLABEL
 1206              IF DESCREF(L) = 0 THEN RETURN;                                        EMITLABEL
 1207              J = SHL(DESCREF(L),18) + DP;                                          EMITLABEL
 1208              CALL OUTPUTLABEL(J);                                                  EMITLABEL
 1209              DESCREF(L) = 0;                                                       EMITLABEL
 1210              RETURN;                                                               EMITLABEL
 1211           END;                                                                     EMITLABEL
 1212        STILLINZERO = 0;    /* DON'T TRY OPTIMIZING OVER LABEL */                   EMITLABEL
 1213        J = SHL(R,18) + L;                                                          EMITLABEL
 1214        DO I = 1 TO FOR_COUNT;                                                      EMITLABEL
 1215           IF J = FOR_LABEL(I) THEN                                                 EMITLABEL
 1216              DO;                                                                   EMITLABEL
 1217                 J = SHL(FOR_REF(I)+"(3)400000",18);                                EMITLABEL
 1218                 IF R = 4 THEN J = J + PP + "(3)400000";                            EMITLABEL
 1219                          ELSE J = J + DP;                                          EMITLABEL
 1220                 CALL OUTPUTLABEL(J);                                               EMITLABEL
 1221                 J = I;                                                             EMITLABEL
 1222                 DO WHILE J < FOR_COUNT;                                            EMITLABEL
 1223                    FOR_LABEL(J) = FOR_LABEL(J+1);                                  EMITLABEL
 1224                    FOR_REF(J) = FOR_REF(J+1);                                      EMITLABEL
 1225                    J = J + 1;                                                      EMITLABEL
 1226                 END;                                                               EMITLABEL
 1227                 FOR_LABEL(FOR_COUNT) = 0;                                          EMITLABEL
 1228                 FOR_REF(FOR_COUNT) = 0;                                            EMITLABEL
 1229                 FOR_COUNT = FOR_COUNT -1;                                          EMITLABEL
 1230                 /* PUT A LABEL ON THE NEXT INSTRUCTION GENERATED */                EMITLABEL
 1231                 IF R = 4 & (CONTROL(BYTE('A')) ^ CONTROL(BYTE('E'))) THEN          EMITLABEL
 1232                              LABEL_GEN = LABEL_GEN ^^ '$' ^^ L ^^ ':';             EMITLABEL
 1233                 RETURN;                                                            EMITLABEL
 1234              END;                                                                  EMITLABEL
 1235        END;                                                                        EMITLABEL
 1236        IF R = 4 & (CONTROL(BYTE('A')) ^ CONTROL(BYTE('E'))) THEN                   EMITLABEL
 1237            LABEL_GEN = LABEL_GEN ^^ '$' ^^ L ^^ ':';                               EMITLABEL
 1238        RETURN;                                                                     EMITLABEL
 1239  END EMITLABEL;                                                                    EMITLABEL

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9492     DATA   1202       4
J               FIXED      9493     DATA   1203      18
L               FIXED      9490     DATA   1199       6
R               FIXED      9491     DATA   1199       5
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 39
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1240  REFCHECK:                                                                        *
 1241     PROCEDURE (I);                                                                *
 1242        /* CHECK TO SEE IF THIS SATISFIES ANY FORWARD REFERENCES.                   REFCHECK
 1243           IF SO, SET UP LABEL BUFFER.  IF NOT, CHECK IF THIS                       REFCHECK
 1244           SHOULD BE CHAINED. */                                                    REFCHECK
 1245        DECLARE I FIXED;                                                            REFCHECK
 1246        DECLARE J FIXED;                                                            REFCHECK
 1247        IF SHR(I,18) = 3 THEN                                                       REFCHECK
 1248           DO;                                                                      REFCHECK
 1249              I = I & "(3)777777";                                                  REFCHECK
 1250              J = DESCREF(I);                                                       REFCHECK
 1251              DESCREF(I) = PP + "(3)400000";                                        REFCHECK
 1252              RETURN J;                                                             REFCHECK
 1253           END;                                                                     REFCHECK
 1254        J = 1;                                                                      REFCHECK
 1255        DO WHILE J <= FOR_COUNT;                                                    REFCHECK
 1256           IF FOR_LABEL(J) = I THEN                                                 REFCHECK
 1257              DO;                                                                   REFCHECK
 1258                 I = FOR_REF(J) + "(3)400000";                                      REFCHECK
 1259                 FOR_REF(J) = PP;                                                   REFCHECK
 1260                 RETURN I;                                                          REFCHECK
 1261              END;                                                                  REFCHECK
 1262           J=J+1;                                                                   REFCHECK
 1263        END;                                                                        REFCHECK
 1264        FOR_COUNT = FOR_COUNT +1;                                                   REFCHECK
 1265        IF FOR_COUNT > FOR_MAX THEN CALL ERROR ('TOO MANY FORWARD REFERENCES',3);   REFCHECK
 1266        FOR_REF(FOR_COUNT) = PP;                                                    REFCHECK
 1267        FOR_LABEL(FOR_COUNT) = I;                                                   REFCHECK
 1268        RETURN 0;                                                                   REFCHECK
 1269     END REFCHECK;                                                                  REFCHECK

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9496     DATA   1241       9
J               FIXED      9497     DATA   1246       9
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 40
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1270  EMITINST:PROCEDURE (OPCODE,TREG,INDIRECT,OPERAND,IREG,RELOCATION);               *
 1271        DECLARE OPCODE FIXED,                                                       EMITINST
 1272                TREG FIXED,                                                         EMITINST
 1273                INDIRECT FIXED,                                                     EMITINST
 1274                OPERAND FIXED,                                                      EMITINST
 1275                IREG FIXED,                                                         EMITINST
 1276                RELOCATION FIXED;                                                   EMITINST
 1277        DECLARE RBITS FIXED,                                                        EMITINST
 1278                WORD FIXED;                                                         EMITINST
 1279        /* EMIT A 80 CHARACTER INSTRUCTION IMAGE */                                 EMITINST
 1280        DECLARE RELOC (5) CHARACTER                                                 EMITINST
 1281                INITIAL ('', 'D+', 'P+', 'S+', '$', '$');                           EMITINST
 1282        DECLARE I FIXED,                                                            EMITINST
 1283                J FIXED,                                                            EMITINST
 1284                CARD CHARACTER,                                                     EMITINST
 1285                INDIR (1) CHARACTER INITIAL ('', '@');                              EMITINST
 1286        COUNT_INST = COUNT_INST + 1;                                                EMITINST
 1287                                                                                    EMITINST
 1288        WORD = SHL(OPCODE,27) + SHL(TREG&"F",23) + SHL(INDIRECT&1,22)               EMITINST
 1289               + SHL(IREG&"F",18);                                                  EMITINST
 1290        DO CASE RELOCATION;                                                         EMITINST
 1291           /* CASE 0 : ABSOLUTE ADDRESS - NO RELOCATION */                          EMITINST CASE 0.
 1292           DO;                                                                      EMITINST
 1293              WORD = WORD + (OPERAND&"(3)777777");                                  EMITINST
 1294              RBITS = 0;                                                            EMITINST
 1295           END;                                                                     EMITINST
 1296                                                                                    EMITINST CASE 1.
 1297           /* CASE 1 : RELATIVE TO THE BEGINNING OF DATA SEGMENT */                 EMITINST
 1298           DO;                                                                      EMITINST
 1299              WORD = WORD + (OPERAND&"(3)777777");                                  EMITINST
 1300              RBITS = 1;                                                            EMITINST
 1301           END;                                                                     EMITINST
 1302                                                                                    EMITINST CASE 2.
 1303           /* CASE 2 : RELATIVE TO BEGINNING OF CODE SEGMENT */                     EMITINST
 1304           DO;                                                                      EMITINST
 1305              WORD = WORD + (OPERAND&"(3)777777") + "(3)400000";                    EMITINST
 1306              RBITS = 1;                                                            EMITINST
 1307           END;                                                                     EMITINST
 1308                                                                                    EMITINST CASE 3.
 1309           /* CASE 3 : RELATIVE TO BEGINNING OF STRINGS */                          EMITINST
 1310           DO;                                                                      EMITINST
 1311              I = SHL(RELOCATION,18) + (OPERAND&"(3)777777");                       EMITINST
 1312              J = REFCHECK(I);                                                      EMITINST
 1313              WORD = WORD + J;                                                      EMITINST
 1314              IF J = 0 THEN RBITS = 0;                                              EMITINST
 1315                       ELSE RBITS = 1;                                              EMITINST
 1316           END;                                                                     EMITINST
 1317                                                                                    EMITINST CASE 4.
 1318           /* CASE 4 : FORWARD LABEL REFERENCE IN CODE AREA */                      EMITINST
 1319           DO;                                                                      EMITINST
 1320              J = REFCHECK("(3)4000000" + (OPERAND&"(3)777777"));                   EMITINST
 1321              WORD = WORD + J;                                                      EMITINST C13 = 1048576
 1322              IF J = 0 THEN RBITS = 0;                                              EMITINST
 1323                       ELSE RBITS = 1;                                              EMITINST
 1324           END;                                                                     EMITINST
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 41
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1325                                                                                    EMITINST CASE 5.
 1326           /* CASE 5 : FORWARD LABEL REFERENCE IN DATA AREA */                      EMITINST
 1327           DO;                                                                      EMITINST
 1328              J = REFCHECK("(3)5000000" + (OPERAND&"(3)777777"));                   EMITINST
 1329              WORD = WORD + J;                                                      EMITINST C14 = 1310720
 1330              IF J = 0 THEN RBITS = 0;                                              EMITINST
 1331                       ELSE RBITS = 1;                                              EMITINST
 1332           END;                                                                     EMITINST
 1333        END;  /* END OF DO CASE RELOCATION */                                       EMITINST CASE 6.
 1334                                                                                    EMITINST
 1335        IF CONTROL(BYTE('A')) ^ CONTROL(BYTE('E')) THEN                             EMITINST
 1336           DO;                                                                      EMITINST
 1337              I = SHR(OPCODE,5);                                                    EMITINST
 1338              CARD = X7 ^^ SUBSTR(OPNAME(I),(OPCODE-I*32)*6,6) ^^ X1 ^^TREG ^^ ','  EMITINST
 1339                     ^^ INDIR(INDIRECT) ^^ RELOC(RELOCATION) ^^ OPERAND;            EMITINST C15 = 805306368
 1340              IF IREG > 0 THEN CARD = CARD ^^ '(' ^^ IREG ^^ ')';                   EMITINST
 1341              CARD = CARD ^^ '; P' ^^ PP;                                           EMITINST
 1342           END;                                                                     EMITINST
 1343        INSTRUCT(OPCODE) = INSTRUCT(OPCODE) + 1;                                    EMITINST
 1344        CALL EMITCODEWORD (CARD,WORD,RBITS);                                        EMITINST
 1345  END EMITINST;                                                                     EMITINST

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
CARD            CHARACTER   805   STRING   1284       6
I               FIXED      9515     DATA   1282       5
INDIR           CHARACTER   806   STRING   1285       1
INDIRECT        FIXED      9507     DATA   1270       2
IREG            FIXED      9509     DATA   1270       3
J               FIXED      9516     DATA   1283       9
OPCODE          FIXED      9505     DATA   1270       5
OPERAND         FIXED      9508     DATA   1270       7
RBITS           FIXED      9511     DATA   1277      10
RELOC           CHARACTER   799   STRING   1280       1
RELOCATION      FIXED      9510     DATA   1270       3
TREG            FIXED      9506     DATA   1270       2
WORD            FIXED      9512     DATA   1278      14
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 42
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1346  EMITDESC:PROCEDURE (L,A);                                                        *
 1347        DECLARE L FIXED,                                                            EMITDESC
 1348                A FIXED;                                                            EMITDESC
 1349        /* SEND A LENGTH AND STRING ADDRESS TO THE DESCRIPTOR AREA */               EMITDESC
 1350        IF DSP > DESCLIMIT THEN                                                     EMITDESC
 1351           DO;                                                                      EMITDESC
 1352              CALL ERROR ('TOO MANY STRINGS',1);                                    EMITDESC
 1353              DSP = 0;                                                              EMITDESC
 1354           END;                                                                     EMITDESC
 1355         IF CONTROL(BYTE('B')) THEN                                                 EMITDESC
 1356           CALL PRINTLINE (X70 ^^ 'DESC =        ' ^^ L ^^ ',' ^^ A ^^ '; S' ^^ DSP,-1); EMITDESC
 1357        DESCL(DSP) = L;                                                             EMITDESC
 1358        DESCA(DSP) = A;                                                             EMITDESC
 1359        DSP = DSP + 1;                                                              EMITDESC
 1360  END EMITDESC;                                                                     EMITDESC

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
A               FIXED      9524     DATA   1346       2
L               FIXED      9523     DATA   1346       2
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 43
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1361  FINDLABEL:PROCEDURE;                                                             *
 1362        LABEL_SINK = LABEL_SINK + 1;                                                FINDLABEL
 1363        RETURN (LABEL_SINK);                                                        FINDLABEL
 1364  END FINDLABEL;                                                                    FINDLABEL
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 44
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1365   /*                                                                              *
 1366             S Y M B O L   T A B L E   P R O C E D U R E S                         *
 1367   */                                                                              *
 1368                                                                                   *
 1369  HASHER:                                                                          *
 1370     PROCEDURE (ID);          /* CALCULATE HASH INDEX INTO HASH TABLE*/            *
 1371     DECLARE ID   CHARACTER;                                                        HASHER
 1372     DECLARE L    FIXED;                                                            HASHER
 1373     L = LENGTH (ID);                                                               HASHER
 1374     RETURN (BYTE (ID) + BYTE (ID, L-1) + SHL (L,4)) & "FF";                        HASHER
 1375     END HASHER;                                                                    HASHER

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
ID              CHARACTER   816   STRING   1370       3
L               FIXED      9534     DATA   1372       3
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 45
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1376                                                                                   *
 1377  ENTER:PROCEDURE (N, T, L, S);                                                    *
 1378        DECLARE T FIXED, L FIXED, S FIXED;                                          ENTER
 1379        DECLARE N CHARACTER;                                                        ENTER
 1380   /* ENTER THE NAME N IN THE SYMBOL TABLE WITH TYPE T AT LOCATION L SEGMENT S */   ENTER
 1381        DECLARE I FIXED, K FIXED;                                                   ENTER
 1382        IDX = HASHER (N);                                                           ENTER
 1383        I = HASH (IDX);                                                             ENTER
 1384        DO WHILE I >= PROCMARK;                                                     ENTER
 1385           IDCOMPARES = IDCOMPARES + 1;                                             ENTER
 1386           IF N = SYT (I) THEN                                                      ENTER
 1387              DO;                                                                   ENTER
 1388                 K = SYTYPE (I);                                                    ENTER
 1389                 IF T = LABELTYPE & (K = FORWARDTYPE ^ K = FORWARDCALL) THEN        ENTER
 1390                    DO;                                                             ENTER
 1391                       IF CONTROL (BYTE ('E')) THEN                                 ENTER
 1392                          CALL PRINTLINE (X70 ^^ 'FIXED REFERENCES TO: ' ^^ N,-1);  ENTER
 1393                       IF K = FORWARDTYPE THEN                                      ENTER
 1394                          DO;                                                       ENTER
 1395                             CALL EMITLABEL(SYTLOC(I),4);                           ENTER
 1396                             SYTLOC(I) = L;                                         ENTER
 1397                             SYTSEG(I) = S;                                         ENTER
 1398                          END;                                                      ENTER
 1399                       SYTYPE (I) = T;                                              ENTER
 1400                    END;                                                            ENTER
 1401                 ELSE IF PROCMARK + PARCT < I THEN                                  ENTER
 1402                    CALL ERROR ('DUPLICATE DECLARATION FOR: ' ^^ N, 0);             ENTER
 1403                 RETURN I;                                                          ENTER
 1404              END;                                                                  ENTER
 1405           I = PTR (I);                                                             ENTER
 1406        END;                                                                        ENTER
 1407        NDECSY = NDECSY + 1;                                                        ENTER
 1408        IF NDECSY > MAXNDECSY THEN                                                  ENTER
 1409           IF NDECSY > SYTSIZE THEN                                                 ENTER
 1410              DO;                                                                   ENTER
 1411                 CALL ERROR ('SYMBOL TABLE OVERFLOW', 1);                           ENTER
 1412                 NDECSY = NDECSY - 1;                                               ENTER
 1413              END;                                                                  ENTER
 1414           ELSE MAXNDECSY = NDECSY;                                                 ENTER
 1415        SYT (NDECSY) = N;                                                           ENTER
 1416        SYTYPE (NDECSY) = T;                                                        ENTER
 1417        SYTLOC (NDECSY) = L;                                                        ENTER
 1418        SYTSEG (NDECSY) = S;                                                        ENTER
 1419        SYTCO (NDECSY) = 0;                                                         ENTER
 1420        SYTCARD (NDECSY) = CARD_COUNT;                                              ENTER
 1421        PTR (NDECSY) = HASH (IDX);                                                  ENTER
 1422        HASH (IDX) = NDECSY;                                                        ENTER
 1423        RETURN (NDECSY);                                                            ENTER
 1424  END ENTER;                                                                        ENTER

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9538     DATA   1381      12
K               FIXED      9539     DATA   1381       4
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 46
SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
 
L               FIXED      9536     DATA   1377       2
N               CHARACTER   817   STRING   1377       5
S               FIXED      9537     DATA   1377       2
T               FIXED      9535     DATA   1377       3
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 47
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1425   ID_LOOKUP:                                                                      *
 1426     PROCEDURE (P);                                                                *
 1427        /* LOOKS UP THE IDENTIFIER AT P IN THE ANALYSIS STACK IN THE                ID_LOOKUP
 1428           SYMBOL TABLE AND INITIALIZES FIXL, CNT, TYPE, AND INX                    ID_LOOKUP
 1429           APPROPRIATELY.  IF THE IDENTIFIER IS NOT FOUND, FIXL IS                  ID_LOOKUP
 1430           SET TO -1                                                                ID_LOOKUP
 1431        */                                                                          ID_LOOKUP
 1432        DECLARE P FIXED, I FIXED;                                                   ID_LOOKUP
 1433        CHAR_TEMP = VAR (P);                                                        ID_LOOKUP
 1434        I = HASH (HASHER (CHAR_TEMP));                                              ID_LOOKUP
 1435        DO WHILE I \= -1;                                                           ID_LOOKUP
 1436           IDCOMPARES = IDCOMPARES + 1;                                             ID_LOOKUP C16 = -1
 1437           IF SYT(I) = CHAR_TEMP THEN                                               ID_LOOKUP
 1438              DO;                                                                   ID_LOOKUP
 1439                 FIXL (P) = I;                                                      ID_LOOKUP
 1440                 CNT (P) = 0;        /* INITIALIZE SUBSCRIPT COUNT */               ID_LOOKUP
 1441                 TYPE (P) = VARIABLE;                                               ID_LOOKUP
 1442                 IF SYTYPE (I) = SPECIAL THEN                                       ID_LOOKUP
 1443                    FIXV (P) = SYTLOC (I);    /* BUILTIN FUNCTION */                ID_LOOKUP
 1444                 ELSE                                                               ID_LOOKUP
 1445                    FIXV (P) = 0;                                                   ID_LOOKUP
 1446                 INX (P) = 0;       /* LOCATION OF INDEX */                         ID_LOOKUP
 1447                 REG(P) = 0;                                                        ID_LOOKUP
 1448                 SYTCO (I) = SYTCO (I) + 1;                                         ID_LOOKUP
 1449                 RETURN;                                                            ID_LOOKUP
 1450              END;                                                                  ID_LOOKUP
 1451           I = PTR (I);                                                             ID_LOOKUP
 1452        END;                                                                        ID_LOOKUP
 1453        FIXL (P) = -1;              /* IDENTIFIER NOT FOUND */                      ID_LOOKUP
 1454  END ID_LOOKUP;                                                                    ID_LOOKUP

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9559     DATA   1432      10
P               FIXED      9558     DATA   1426       9
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 48
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1455  UNDECLARED_ID:                                                                   *
 1456     PROCEDURE (P);                                                                *
 1457        /* ISSUES AN ERROR MESSAGE FOR UNDECLARED IDENTIFIERS AND                   UNDECLARED_ID
 1458           ENTERS THEM WITH DEFAULT TYPE IN THE SYMBOL TABLE                        UNDECLARED_ID
 1459       */                                                                           UNDECLARED_ID
 1460        DECLARE P FIXED;                                                            UNDECLARED_ID
 1461        CALL ERROR ('UNDECLARED IDENTIFIER: ' ^^ VAR (P), 0);                       UNDECLARED_ID
 1462        CALL EMITDATAWORD (0);                                                      UNDECLARED_ID
 1463        FIXL (P) = ENTER (VAR (P), FIXEDTYPE, DP-1, 1);                             UNDECLARED_ID
 1464        CNT (P) = 0;                                                                UNDECLARED_ID
 1465        FIXV (P) = 0;                                                               UNDECLARED_ID
 1466        INX (P) = 0;                                                                UNDECLARED_ID
 1467        SYTCO (NDECSY) = 1;            /* COUNT FIRST REFERENCE */                  UNDECLARED_ID
 1468        SYTCARD (NDECSY) = -1;         /* FLAG UNDECLARED IDENTIFIER */             UNDECLARED_ID
 1469        TYPE (P) = VARIABLE;                                                        UNDECLARED_ID
 1470  END UNDECLARED_ID;                                                                UNDECLARED_ID

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
P               FIXED      9561     DATA   1456       7
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 49
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1471   /*                                                                              *
 1472          A R I T H E M E T I C   P R O C E D U R E S                              *
 1473   */                                                                              *
 1474  CLEARARS:                                                                        *
 1475     PROCEDURE;                                                                    *
 1476        /* FREE ALL THE TEMPROARY ARITHEMETIC REGISTERS */                          CLEARARS
 1477        DO I = 0 TO 11;                                                             CLEARARS
 1478           ACC(I) = AVAIL;                                                          CLEARARS C17 = 11
 1479        END;                                                                        CLEARARS
 1480  END CLEARARS;                                                                     CLEARARS
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 50
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1481  FINDAR:                                                                          *
 1482     PROCEDURE;                                                                    *
 1483         DECLARE I FIXED;                                                           FINDAR
 1484        /* GET A TEMPORARY ARITHEMETIC REGISTER */                                  FINDAR
 1485        IF TARGET_REGISTER > -1 THEN                                                FINDAR
 1486           IF ACC (TARGET_REGISTER) = AVAIL THEN                                    FINDAR
 1487              DO;                                                                   FINDAR
 1488                 ACC (TARGET_REGISTER) = BUSY;                                      FINDAR
 1489                 RETURN TARGET_REGISTER;                                            FINDAR
 1490              END;                                                                  FINDAR
 1491        DO I = 1 TO 11;                                                             FINDAR
 1492           IF ACC(I) = AVAIL THEN                                                   FINDAR
 1493              DO;                                                                   FINDAR
 1494                 ACC(I) = BUSY;                                                     FINDAR
 1495                 RETURN (I);                                                        FINDAR
 1496              END;                                                                  FINDAR
 1497        END;                                                                        FINDAR
 1498        CALL ERROR ('USED ALL ACCUMULATORS', 0);                                    FINDAR
 1499        RETURN (0);                                                                 FINDAR
 1500  END FINDAR;                                                                       FINDAR

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9569     DATA   1483       4
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 51
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1501  MOVESTACKS:                                                                      *
 1502     PROCEDURE (F, T);                                                             *
 1503        DECLARE F FIXED, T FIXED;                                                   MOVESTACKS
 1504        /* MOVE ALL COMPILER STACKS DOWN FROM F TO T */                             MOVESTACKS
 1505        TYPE (T) = TYPE (F);                                                        MOVESTACKS
 1506        REG (T) = REG (F);                                                          MOVESTACKS
 1507        CNT (T) = CNT (F);                                                          MOVESTACKS
 1508        VAR (T) = VAR (F);                                                          MOVESTACKS
 1509        FIXL (T) = FIXL (F);                                                        MOVESTACKS
 1510        FIXV (T) = FIXV (F);                                                        MOVESTACKS
 1511        INX (T) = INX (F);                                                          MOVESTACKS
 1512        PPSAVE (T) = PPSAVE (F);                                                    MOVESTACKS
 1513  END MOVESTACKS;                                                                   MOVESTACKS

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
F               FIXED      9576     DATA   1502       8
T               FIXED      9577     DATA   1502       8
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 52
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1514  FORCEADDRESS:                                                                    *
 1515     PROCEDURE(SP);                                                                *
 1516        /* GENERATES THE ADDRESS OF <VARIABLE> IN THE ANALYSIS STACK                FORCEADDRESS
 1517           AT SP.                                                                   FORCEADDRESS
 1518        */                                                                          FORCEADDRESS
 1519        DECLARE SP FIXED, J FIXED, R FIXED;                                         FORCEADDRESS
 1520        R = FINDAR;                                                                 FORCEADDRESS
 1521        J = FIXL(SP);                                                               FORCEADDRESS
 1522        CALL EMITINST (MOVEI,R,0,SYTLOC(J),0,SYTSEG(J));                            FORCEADDRESS
 1523        REG(J) = R;                                                                 FORCEADDRESS
 1524  END FORCEADDRESS;                                                                 FORCEADDRESS

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
J               FIXED      9579     DATA   1519       4
R               FIXED      9580     DATA   1519       3
SP              FIXED      9578     DATA   1515       1
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 53
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1525  SETINIT:                                                                         *
 1526     PROCEDURE;                                                                    *
 1527        /* PLACES INITIAL VALUES INTO DATA AREA */                                  SETINIT
 1528        DECLARE TMIIIL CHARACTER INITIAL ('TOO MANY ITEMS IN INITIAL LIST');        SETINIT
 1529        IF ITYPE = CHRTYPE THEN                                                     SETINIT
 1530           DO;                                                                      SETINIT
 1531              IF DSP < NEWDSP THEN                                                  SETINIT
 1532                 DO;                                                                SETINIT
 1533                    IF TYPE (MPP1) \= CHRTYPE THEN S = FIXV (MPP1);                 SETINIT
 1534                    ELSE S = VAR (MPP1);     /* THE STRING */                       SETINIT
 1535                    I = LENGTH (S);                                                 SETINIT
 1536                    IF I = 0 THEN                                                   SETINIT
 1537                       CALL EMITDESC (0,0);                                         SETINIT
 1538                    ELSE                                                            SETINIT
 1539                       DO;                                                          SETINIT
 1540                          CALL EMITDESC (I, DPOFFSET+SHL(DP,2));                    SETINIT
 1541                          DO J = 0 TO I - 1;                                        SETINIT
 1542                             CALL EMITBYTE (BYTE (S, J));                           SETINIT
 1543                          END;                                                      SETINIT
 1544                        END;                                                        SETINIT
 1545                 END;                                                               SETINIT
 1546              ELSE CALL ERROR (TMIIIL,0);                                           SETINIT
 1547           END;                                                                     SETINIT
 1548        ELSE                                                                        SETINIT
 1549           IF TYPE (MPP1) \= CONSTANT THEN                                          SETINIT
 1550              CALL ERROR ('ILLEGAL CONSTANT IN INITIAL LIST',0);                    SETINIT
 1551           ELSE                                                                     SETINIT
 1552              IF ITYPE = FIXEDTYPE THEN                                             SETINIT
 1553                 DO;                                                                SETINIT
 1554                 IF DP < NEWDP THEN CALL EMITDATAWORD (FIXV(MPP1));                 SETINIT
 1555                 ELSE CALL ERROR (TMIIIL,0);                                        SETINIT
 1556                 END;                                                               SETINIT
 1557              ELSE   /* MUST BE BYTETYPE */                                         SETINIT
 1558                 IF DP < NEWDP ^ (DP = NEWDP & DPOFFSET < NEWDPOFFSET) THEN         SETINIT
 1559                    CALL EMITBYTE(FIXV(MPP1));                                      SETINIT
 1560                 ELSE CALL ERROR (TMIIIL,0);                                        SETINIT
 1561  END SETINIT;                                                                      SETINIT

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
TMIIIL          CHARACTER   823   STRING   1528       3
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 54
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1562  SAVE_ACS:                                                                        *
 1563     PROCEDURE (N);                                                                *
 1564        /* GENERATE CODE TO SAVE BUSY ACS, UP TO AC-N */                            SAVE_ACS
 1565        DECLARE N FIXED;                                                            SAVE_ACS
 1566        DECLARE I FIXED;                                                            SAVE_ACS
 1567        DO I = 1 TO N;                                                              SAVE_ACS
 1568           IF (ACC(I) = BUSY) THEN CALL EMITINST (PUSH,15,0,I,0,0);                 SAVE_ACS
 1569        END;                                                                        SAVE_ACS
 1570  END SAVE_ACS;                                                                     SAVE_ACS

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9599     DATA   1566       3
N               FIXED      9598     DATA   1563       1
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 55
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1571  RESTORE_ACS:                                                                     *
 1572     PROCEDURE (N);                                                                *
 1573        /* GENERATE CODE TO RESTORE BUSY ACS, UP TO AC-N  */                        RESTORE_ACS
 1574        DECLARE N FIXED;                                                            RESTORE_ACS
 1575        DECLARE I FIXED, J FIXED;                                                   RESTORE_ACS
 1576        DO I = 1 TO N;                                                              RESTORE_ACS
 1577           J = N - I + 1;                                                           RESTORE_ACS
 1578           IF (ACC(J) = BUSY) THEN CALL EMITINST (POP,15,0,J,0,0);                  RESTORE_ACS
 1579        END;                                                                        RESTORE_ACS
 1580  END RESTORE_ACS;                                                                  RESTORE_ACS

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9602     DATA   1575       2
J               FIXED      9603     DATA   1575       3
N               FIXED      9601     DATA   1572       2
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 56
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1581  PROC_START:                                                                      *
 1582     PROCEDURE;                                                                    *
 1583        /* GENERATES CODE FOR THE HEAD OF A PROCEDURE */                            PROC_START
 1584        PPSAVE(MP) = FINDLABEL;           /* SOMETHING TO GOTO */                   PROC_START
 1585        CALL EMITINST (JRST,0,0,PPSAVE(MP),0,4); /* GO AROUND PROC */               PROC_START
 1586        IF SYTSEG(FIXL(MP)) = 4 THEN CALL EMITLABEL(SYTLOC(FIXL(MP)),4);            PROC_START
 1587        SYTSEG(FIXL(MP)) = 2;                                                       PROC_START
 1588        SYTLOC(FIXL(MP)) = PP;            /* ADDR OF PROC */                        PROC_START
 1589  END PROC_START;                                                                   PROC_START
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 57
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1590  TDECLARE:                                                                        *
 1591     PROCEDURE (DIM);                                                              *
 1592     /* ALLOCATES STORAGE FOR IDENTIFIERS IN DECLARATION */                         TDECLARE
 1593        DECLARE DIM FIXED;                                                          TDECLARE
 1594        DECLARE I   FIXED;                                                          TDECLARE
 1595     ALLOCATE:                                                                      TDECLARE
 1596        PROCEDURE (P, DIM);                                                         TDECLARE
 1597           /* ALLOCATES STORAGE FOR THE IDENTIFIER AT P IN THE ANALYSIS             ALLOCATE
 1598              STACK WITH DIMENSION DIM                                              ALLOCATE
 1599           */                                                                       ALLOCATE
 1600           DECLARE P FIXED, DIM FIXED, J FIXED, K FIXED;                            ALLOCATE
 1601           DIM = DIM + 1;                    /* ACTUAL NUMBER OF ITEMS */           ALLOCATE
 1602           DO CASE TYPE (P);                                                        ALLOCATE
 1603              ;    /*  CASE 0 -- DUMMY */                                           ALLOCATE CASE 0.
 1604              ;    /*  CASE 1 -- LABEL TYPE */                                      ALLOCATE CASE 1.
 1605              ;    /*  CASE 2 -- ACCUMULATOR */                                     ALLOCATE CASE 2.
 1606              ;    /*  CASE 3 -- VARIABLE */                                        ALLOCATE CASE 3.
 1607              ;    /*  CASE 4 -- CONSTANT */                                        ALLOCATE CASE 4.
 1608              ;    /*  CASE 5 -- CONDITION */                                       ALLOCATE CASE 5.
 1609              DO;   /* CASE 6 -- CHRTYPE */                                         ALLOCATE CASE 6.
 1610                 J = DSP; K = 3;                                                    ALLOCATE
 1611                 NEWDSP = DSP + DIM;                                                ALLOCATE
 1612              END;                                                                  ALLOCATE
 1613              DO;  /*  CASE 7 -- FIXEDTYPE */                                       ALLOCATE CASE 7.
 1614                 IF DPOFFSET > 0 THEN                                               ALLOCATE
 1615                    DO;                                                             ALLOCATE
 1616                       CALL FLUSH_DATACARD;                                         ALLOCATE
 1617                       OLDDP = DP;                                                  ALLOCATE
 1618                       OLDDPOFFSET = 0;                                             ALLOCATE
 1619                    END;                                                            ALLOCATE
 1620                 J = DP; K = 1;                                                     ALLOCATE
 1621                 NEWDP = DP + DIM; NEWDPOFFSET = 0;                                 ALLOCATE
 1622              END;                                                                  ALLOCATE
 1623              DO;  /*  CASE 8 -- BYTETYPE */                                        ALLOCATE CASE 8.
 1624                 IF DPOFFSET > 0 THEN                                               ALLOCATE
 1625                    IF I = 1 THEN                                                   ALLOCATE
 1626                       DO;                                                          ALLOCATE
 1627                          CALL FLUSH_DATACARD;                                      ALLOCATE
 1628                          OLDDP = DP; OLDDPOFFSET = 0;                              ALLOCATE
 1629                       END;                                                         ALLOCATE
 1630                    ELSE                                                            ALLOCATE
 1631                       DO;                                                          ALLOCATE
 1632                          DP = DP + 1; DPOFFSET = 0;                                ALLOCATE
 1633                       END;                                                         ALLOCATE
 1634                 NEWDPOFFSET = DIM MOD 4;                                           ALLOCATE
 1635                 NEWDP = DP + DIM/4;                                                ALLOCATE
 1636                 J = DP; K = 1;                                                     ALLOCATE
 1637              END;                                                                  ALLOCATE
 1638              DO;  /*  CASE 9 -- FORWARDTYPE */                                     ALLOCATE CASE 9.
 1639                 J = FINDLABEL; K = 4;                                              ALLOCATE
 1640                 NEWDP = DP; NEWDPOFFSET = DPOFFSET; /* COPY OLD POINTERS  */       ALLOCATE
 1641              END;                                                                  ALLOCATE
 1642              ;    /*  CASE 10 -- DESCRIPT */                                       ALLOCATE CASE 10.
 1643              ;    /*  CASE 11 -- SPECIAL */                                        ALLOCATE CASE 11.
 1644              ;    /*  CASE 12 -- FORWARDCALL */                                    ALLOCATE CASE 12.
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 58
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1645              ;    /*  CASE 13 -- PROCTYPE */                                       ALLOCATE CASE 13.
 1646              ;    /*  CASE 14 -- CHARPROCTYPE */                                   ALLOCATE CASE 14.
 1647           END; /* CASE ON TYPE (P) */                                              ALLOCATE CASE 15.
 1648           SYTYPE (FIXL(P)) = TYPE (P);                                             ALLOCATE
 1649           SYTLOC (FIXL (P)) = J;                                                   ALLOCATE
 1650           SYTSEG (FIXL (P)) = K;                                                   ALLOCATE
 1651     END ALLOCATE;                                                                  ALLOCATE

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
DIM             FIXED      9608     DATA   1596       6
J               FIXED      9609     DATA   1600       5
K               FIXED      9610     DATA   1600       5
P               FIXED      9607     DATA   1596       5
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 59
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1652                                                                                    TDECLARE
 1653        OLDDP = DP;                                                                 TDECLARE
 1654        OLDDSP = DSP;                                                               TDECLARE
 1655        OLDDPOFFSET = DPOFFSET;                                                     TDECLARE
 1656        TYPE(MP) = TYPE(SP);                                                        TDECLARE
 1657        CASEP = FIXL(MP);                                                           TDECLARE
 1658        DO I = 1 TO INX(MP);                                                        TDECLARE
 1659           FIXL(MP) = CASESTACK(CASEP+I); /* SYMBOL TABLE POINTER */                TDECLARE
 1660           CALL ALLOCATE (MP,DIM);                                                  TDECLARE
 1661           DP = NEWDP;                                                              TDECLARE
 1662           DSP = NEWDSP;                                                            TDECLARE
 1663           DPOFFSET = NEWDPOFFSET;                                                  TDECLARE
 1664           END;                                                                     TDECLARE
 1665        DP = OLDDP;                                                                 TDECLARE
 1666        DSP = OLDDSP;                                                               TDECLARE
 1667        DPOFFSET = OLDDPOFFSET;                                                     TDECLARE
 1668  END TDECLARE;                                                                     TDECLARE

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
ALLOCATE        PROCEDURE  3644  PROGRAM   1595       1
  PARAMETER  1  FIXED      9607     DATA   1596       6
  PARAMETER  2  FIXED      9608     DATA   1596       7
DIM             FIXED      9605     DATA   1591       1
I               FIXED      9606     DATA   1594       3
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 60
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1669  CHECK_STRING_OVERFLOW:                                                           *
 1670     PROCEDURE;                                                                    *
 1671        /* GENERATE A CHECK TO SEE IF COMPACTIFY NEEDS TO BE CALLED */              CHECK_STRING_OVERFLOW
 1672        CALL EMITINST (PUSHJ,15,0,STRING_CHECK,0,2);                                CHECK_STRING_OVERFLOW
 1673  END CHECK_STRING_OVERFLOW;                                                        CHECK_STRING_OVERFLOW
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 61
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1674  CALLSUB:PROCEDURE (SL,F,P);                                                      *
 1675        /* GENERATES CODE TO CALL A FUNCTION OR PROCEDURE AT SL                     CALLSUB
 1676           ALSO DOES HOUSEKEEPING FOR RETURN VALUES                                 CALLSUB
 1677        */                                                                          CALLSUB
 1678        DECLARE SL FIXED, F FIXED, P FIXED;                                         CALLSUB
 1679        CALL SAVE_ACS (11);                                                         CALLSUB
 1680        CALL EMITINST (PUSHJ,15,0,SL,0,SYTSEG(FIXL(P)));                            CALLSUB
 1681        CALL RESTORE_ACS (11);                                                      CALLSUB
 1682        IF F = 1 THEN                                                               CALLSUB
 1683           DO;  /* MOVE RETURNED VALUE FROM REGISTER ZERO */                        CALLSUB
 1684              I = FINDAR;                                                           CALLSUB
 1685              IF I \= 0 THEN CALL EMITINST (MOVE,I,0,0,0,0);                        CALLSUB
 1686              TYPE(P) = ACCUMULATOR;                                                CALLSUB
 1687              REG(P) = I;                                                           CALLSUB
 1688              ACC(I) = BUSY;                                                        CALLSUB
 1689              STILLINZERO = I;                                                      CALLSUB
 1690           END;                                                                     CALLSUB
 1691  END CALLSUB;                                                                      CALLSUB

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
F               FIXED      9613     DATA   1674       1
P               FIXED      9614     DATA   1674       3
SL              FIXED      9612     DATA   1674       1
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 62
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1692  BACKUP:                                                                          *
 1693     PROCEDURE;                                                                    *
 1694           CODE_FULL(CODE_HEAD) = FALSE;                                            BACKUP
 1695           CODE_HEAD = (CODE_HEAD-1) & 3;                                           BACKUP
 1696           INSTRUCT(MOVE) = INSTRUCT(MOVE) -1;                                      BACKUP
 1697           PP = PP - 1;                                                             BACKUP
 1698           STILLINZERO = 0;                                                         BACKUP
 1699           IF CONTROL(BYTE('E')) THEN                                               BACKUP
 1700              CALL PRINTLINE (BACKMSG,-1);                                          BACKUP
 1701     END BACKUP;                                                                    BACKUP
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 63
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1702  DELETE_MOVE:                                                                     *
 1703     PROCEDURE (P,OP,AC,IND,OPERAND,INDEX,RELOC);                                  *
 1704     /*  CHECK STILLINZERO FLAG TO SEE IF THE DATUM ABOUT TO                        DELETE_MOVE
 1705          BE MOVED IS STILL IN REGISTER ZERO.  IF SO, THEN DELETE                   DELETE_MOVE
 1706          THE LAST INSTRUCTION GENERATED (IF A "MOVE"),                             DELETE_MOVE
 1707          AND MOVE IT DIRECTLY FROM 0 TO THE DESRIED DEST.                          DELETE_MOVE
 1708          THIS IS DESIGNED TO ELIMINATE MOST EXTRA MOVES                            DELETE_MOVE
 1709          OF FUNCTION RESULTS. */                                                   DELETE_MOVE
 1710        DECLARE P FIXED;                                                            DELETE_MOVE
 1711        DECLARE OP FIXED, AC FIXED, IND FIXED, OPERAND FIXED,                       DELETE_MOVE
 1712             INDEX FIXED, RELOC FIXED;                                              DELETE_MOVE
 1713        IF STILLINZERO \= 0 THEN                                                    DELETE_MOVE
 1714           DO;                                                                      DELETE_MOVE
 1715              IF OP = MOVEM & STILLINZERO = AC THEN                                 DELETE_MOVE
 1716                 DO;                                                                DELETE_MOVE
 1717                    CALL BACKUP;                                                    DELETE_MOVE
 1718                    ACC(REG(P)) = AVAIL;                                            DELETE_MOVE
 1719                    REG(P) = 0;                                                     DELETE_MOVE
 1720                    AC = 0;                                                         DELETE_MOVE
 1721                 END;                                                               DELETE_MOVE
 1722              ELSE IF OP = MOVE  & STILLINZERO = OPERAND                            DELETE_MOVE
 1723                                 & (IND + INDEX + RELOC) = 0 THEN                   DELETE_MOVE
 1724                 DO;                                                                DELETE_MOVE
 1725                    CALL BACKUP;                                                    DELETE_MOVE
 1726                    ACC(REG(P)) = AVAIL;                                            DELETE_MOVE
 1727                    REG(P) = 0;                                                     DELETE_MOVE
 1728                    OPERAND = 0;                                                    DELETE_MOVE
 1729                 END;                                                               DELETE_MOVE
 1730           END;                                                                     DELETE_MOVE
 1731        CALL EMITINST (OP,AC,IND,OPERAND,INDEX,RELOC);                              DELETE_MOVE
 1732     END DELETE_MOVE;                                                               DELETE_MOVE

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
AC              FIXED      9617     DATA   1703       3
IND             FIXED      9618     DATA   1703       2
INDEX           FIXED      9620     DATA   1703       2
OP              FIXED      9616     DATA   1703       3
OPERAND         FIXED      9619     DATA   1703       3
P               FIXED      9615     DATA   1703       4
RELOC           FIXED      9621     DATA   1703       2
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 64
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1733  EMIT_INLINE:                                                                     *
 1734     PROCEDURE (FLAG);                                                             *
 1735     /* GENERATE AN ARBITRARY INSTRUCTION SPECIFIED BY PROGRAMMER */                EMIT_INLINE
 1736        DECLARE FLAG BIT(1);                                                        EMIT_INLINE
 1737        DECLARE FL FIXED;                                                           EMIT_INLINE
 1738        DECLARE INST(5) FIXED;                                                      EMIT_INLINE
 1739        DECLARE BINLM CHARACTER INITIAL ('IMPROPER ARGUMENT TO INLINE');            EMIT_INLINE
 1740        IF CNT(MP) < 5 THEN                                                         EMIT_INLINE
 1741           DO;                                                                      EMIT_INLINE
 1742              IF TYPE(MPP1) = CONSTANT THEN INST(CNT(MP)-1) = FIXV(MPP1);           EMIT_INLINE
 1743              ELSE CALL ERROR (BINLM,1);                                            EMIT_INLINE
 1744              IF FLAG THEN CALL ERROR (BINLM,1);                                    EMIT_INLINE
 1745           END;                                                                     EMIT_INLINE
 1746        ELSE IF CNT(MP) = 5 THEN                                                    EMIT_INLINE
 1747           DO;                                                                      EMIT_INLINE
 1748              IF TYPE(MPP1) = CONSTANT THEN                                         EMIT_INLINE
 1749                 DO;                                                                EMIT_INLINE
 1750                    INST(4) = FIXV(MPP1);                                           EMIT_INLINE
 1751                    INST(5) = 0;                                                    EMIT_INLINE
 1752                 END;                                                               EMIT_INLINE
 1753              ELSE IF TYPE(MPP1) = VARIABLE THEN                                    EMIT_INLINE
 1754                 DO;                                                                EMIT_INLINE
 1755                    FL = FIXL(MPP1);                                                EMIT_INLINE
 1756                    INST(4) = SYTLOC(FL);                                           EMIT_INLINE
 1757                    INST(5) = SYTSEG(FL);                                           EMIT_INLINE
 1758                 END;                                                               EMIT_INLINE
 1759              ELSE CALL ERROR (BINLM,1);                                            EMIT_INLINE
 1760              CALL EMITINST (INST(0),INST(1),INST(2),INST(4),INST(3),INST(5));      EMIT_INLINE
 1761              REG(MP) = INST(1);                                                    EMIT_INLINE
 1762              TYPE(MP) = ACCUMULATOR;                                               EMIT_INLINE
 1763           END;                                                                     EMIT_INLINE
 1764        ELSE CALL ERROR (BINLM,1);  /* TOO MANY ARGS TO INLINE */                   EMIT_INLINE
 1765     END EMIT_INLINE;                                                               EMIT_INLINE

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
BINLM           CHARACTER   825   STRING   1739       4
FL              FIXED      9623     DATA   1737       3
FLAG            BIT (9)    9622     DATA   1734       1
INST            FIXED      9624     DATA   1738      12
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 65
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1766  LIBRARY_CALL:   PROCEDURE (RESULT, CODE, MP, SP);                                *
 1767     /*                                                                             LIBRARY_CALL
 1768     GENERATE THE CODE FOR A CALL TO THE RUN-TIME ROUTINES.                         LIBRARY_CALL
 1769     */                                                                             LIBRARY_CALL
 1770     DECLARE RESULT FIXED,   /* 0 = L.H.S. OF = */                                  LIBRARY_CALL
 1771             CODE FIXED,     /* CODE FOR RUN-TIME ROUTINE*/                         LIBRARY_CALL
 1772             MP   FIXED,     /* STACK POINTER */                                    LIBRARY_CALL
 1773             SP   FIXED;     /* TOP OF STACK POINTER */                             LIBRARY_CALL
 1774     DECLARE R    FIXED;                                                            LIBRARY_CALL
 1775                                                                                    LIBRARY_CALL
 1776     IF RESULT = 0 THEN                                                             LIBRARY_CALL
 1777        DO;                                                                         LIBRARY_CALL
 1778           IF STILLINZERO = REG(SP) THEN                                            LIBRARY_CALL
 1779              DO;                                                                   LIBRARY_CALL
 1780                 CALL BACKUP;                                                       LIBRARY_CALL
 1781                 ACC(REG(SP)) = AVAIL;                                              LIBRARY_CALL
 1782                 REG(SP) = 0;                                                       LIBRARY_CALL
 1783              END;                                                                  LIBRARY_CALL
 1784           R = REG(SP);                                                             LIBRARY_CALL
 1785        END;                                                                        LIBRARY_CALL
 1786     ELSE                                                                           LIBRARY_CALL
 1787        R = FINDAR;                                                                 LIBRARY_CALL
 1788     IF CNT(MP) > 0 THEN CALL EMITINST (CODE+1,R,0,0,REG(MP),0);                    LIBRARY_CALL
 1789                    ELSE CALL EMITINST (CODE+1,R,0,0,0,0);                          LIBRARY_CALL
 1790     IF RESULT \= 0 THEN                                                            LIBRARY_CALL
 1791        DO;                                                                         LIBRARY_CALL
 1792           REG(MP) = R;                                                             LIBRARY_CALL
 1793           TYPE(MP) = RESULT;                                                       LIBRARY_CALL
 1794        END;                                                                        LIBRARY_CALL
 1795     END LIBRARY_CALL;                                                              LIBRARY_CALL

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
CODE            FIXED      9638     DATA   1766       2
MP              FIXED      9639     DATA   1766       4
R               FIXED      9641     DATA   1774       5
RESULT          FIXED      9637     DATA   1766       3
SP              FIXED      9640     DATA   1766       4
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 66
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1796  MONITOR_CALL:   PROCEDURE (CODE, P, JOBFLG);                                     *
 1797     /*                                                                             MONITOR_CALL
 1798     ROUTINE TO GENERATE CODE FOR PDP-10 CALLI UUO.                                 MONITOR_CALL
 1799     */                                                                             MONITOR_CALL
 1800     DECLARE CODE  FIXED,    /* CALLI NUMBER */                                     MONITOR_CALL
 1801            JOBFLG FIXED,  /* CLEAR AC FLAG */                                      MONITOR_CALL
 1802             P     FIXED;    /* STACK POINTER*/                                     MONITOR_CALL
 1803     DECLARE R     FIXED;    /* CONTAINS REGISTER TO USE */                         MONITOR_CALL
 1804                                                                                    MONITOR_CALL
 1805     R = FINDAR;                                                                    MONITOR_CALL
 1806     IF JOBFLG THEN CALL EMITINST (MOVEI,R,0,0,0,0);                                MONITOR_CALL
 1807     CALL EMITINST (CALLI,R,0,CODE,0,0);                                            MONITOR_CALL
 1808     REG(P) = R;                                                                    MONITOR_CALL
 1809     TYPE(P) = ACCUMULATOR;                                                         MONITOR_CALL
 1810  END MONITOR_CALL;                                                                 MONITOR_CALL

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
CODE            FIXED      9642     DATA   1796       1
JOBFLG          FIXED      9643     DATA   1796       1
P               FIXED      9644     DATA   1796       2
R               FIXED      9645     DATA   1803       4
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 67
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1811  FORCEACCUMULATOR:PROCEDURE (P);                                                  *
 1812        DECLARE P FIXED;                                                            FORCEACCUMULATOR
 1813        /* FORCE THE OPERAND AT P INTO AN ACCUMULATOR */                            FORCEACCUMULATOR
 1814        DECLARE SL FIXED, TP FIXED, SFP FIXED, SS FIXED;                            FORCEACCUMULATOR
 1815        DECLARE T1 CHARACTER;                                                       FORCEACCUMULATOR
 1816        DECLARE R FIXED;                                                            FORCEACCUMULATOR
 1817        COUNT_FORCE = COUNT_FORCE + 1;                                              FORCEACCUMULATOR
 1818        TP = TYPE(P);                                                               FORCEACCUMULATOR
 1819        IF TP = VARIABLE THEN                                                       FORCEACCUMULATOR
 1820            DO;                                                                     FORCEACCUMULATOR
 1821              SL = SYTLOC(FIXL(P));                                                 FORCEACCUMULATOR
 1822              SS = SYTSEG(FIXL(P));                                                 FORCEACCUMULATOR
 1823              SFP = SYTYPE(FIXL(P));                                                FORCEACCUMULATOR
 1824              IF SFP = PROCTYPE ^ SFP = FORWARDCALL ^ SFP = CHARPROCTYPE THEN       FORCEACCUMULATOR
 1825                 DO;                                                                FORCEACCUMULATOR
 1826                    CALL CALLSUB (SL,CALLTYPE,P);                                   FORCEACCUMULATOR
 1827                    R = FIXL(P)+CNT(P)+1;                                           FORCEACCUMULATOR
 1828                    IF LENGTH(SYT(R)) = 0 THEN                                      FORCEACCUMULATOR
 1829                       IF R <= NDECSY THEN                                          FORCEACCUMULATOR
 1830                          CALL PRINTLINE ('** WARNING--NOT ALL PARAMETERS SUPPLIED.',-1); FORCEACCUMULATOR
 1831                    IF SFP = CHARPROCTYPE THEN TYPE(P) = DESCRIPT;                  FORCEACCUMULATOR
 1832                 END;                                                               FORCEACCUMULATOR
 1833              ELSE IF SFP = SPECIAL THEN                                            FORCEACCUMULATOR
 1834                 DO;                                                                FORCEACCUMULATOR
 1835                    IF SL = 6 THEN                                                  FORCEACCUMULATOR
 1836                       DO;  /* BUILTIN FUNCTION INPUT */                            FORCEACCUMULATOR
 1837                          CALL CHECK_STRING_OVERFLOW;                               FORCEACCUMULATOR
 1838                          CALL EMITINST (MOVE,13,0,TSA,0,1);                        FORCEACCUMULATOR
 1839                          CALL LIBRARY_CALL (DESCRIPT,1,P,0);                       FORCEACCUMULATOR
 1840                          CALL EMITINST (MOVEM,13,0,TSA,0,1);                       FORCEACCUMULATOR
 1841                          CALL EMITINST (MOVEM,12,0,STR,0,3);                       FORCEACCUMULATOR
 1842                       END;                                                         FORCEACCUMULATOR
 1843                    ELSE IF SL = 8 THEN                                             FORCEACCUMULATOR
 1844                       DO;  /* BUILT-IN FUNCTION FILE */                            FORCEACCUMULATOR
 1845                        IF CNT(P) \= 1 THEN CALL ERROR (FILEMSG,0);                 FORCEACCUMULATOR
 1846                           ELSE CALL LIBRARY_CALL (ACCUMULATOR,5,P,0);              FORCEACCUMULATOR
 1847                       END;                                                         FORCEACCUMULATOR
 1848                    ELSE IF SL = 12 THEN                                            FORCEACCUMULATOR
 1849                       DO;  /* EXIT */                                              FORCEACCUMULATOR
 1850                          CALL EMITINST (4,0,0,0,0,0);                              FORCEACCUMULATOR
 1851                       END;                                                         FORCEACCUMULATOR
 1852                    ELSE IF SL = 13 THEN CALL MONITOR_CALL (19,P,0);                FORCEACCUMULATOR
 1853                    ELSE IF SL = 14 THEN CALL MONITOR_CALL (12,P,0);                FORCEACCUMULATOR
 1854                    ELSE IF SL = 19 THEN CALL MONITOR_CALL (23,P,1);                FORCEACCUMULATOR
 1855                    ELSE CALL ERROR ('ILLEGAL USE OF ' ^^ SYT(FIXL(P)),0);          FORCEACCUMULATOR
 1856                 END;                                                               FORCEACCUMULATOR
 1857              ELSE                                                                  FORCEACCUMULATOR
 1858                 DO;  /* FETCH THE VARIABLE (ALL ELSE HAS FAILED) */                FORCEACCUMULATOR
 1859                    IF SFP \= BYTETYPE THEN                                         FORCEACCUMULATOR
 1860                       DO;   /* WE DON'T HAVE TO DO CRAZY ADDRESSING */             FORCEACCUMULATOR
 1861                          R = FINDAR;     /* GET REG FOR RESULT */                  FORCEACCUMULATOR
 1862                          CALL EMITINST (MOVE,R,0,SL,INX(P),SS);                    FORCEACCUMULATOR
 1863                       END;                                                         FORCEACCUMULATOR
 1864                    ELSE                                                            FORCEACCUMULATOR
 1865                       DO;  /* BYTE ADDRESSING */                                   FORCEACCUMULATOR
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 68
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1866                          IF INX(P) \= 0 THEN                                       FORCEACCUMULATOR
 1867                             DO; /* GOOD GRIEF, SUBSCRIPTING OF BYTES */            FORCEACCUMULATOR
 1868                                R = FINDAR;                                         FORCEACCUMULATOR
 1869                                CALL EMITINST (MOVE,12,0,INX(P),0,0);               FORCEACCUMULATOR
 1870                                CALL EMITINST (LSH,12,0,    -2,0,0);                FORCEACCUMULATOR
 1871                                CALL EMITINST (ANDI,INX(P),0,3,0,0);                FORCEACCUMULATOR
 1872                                IF (SL ^ SS) \= 0 THEN CALL EMITINST (ADDI,12,0,SL,0,SS); FORCEACCUMULATOR
 1873                                CALL EMITINST (LDB,R,0,BYTEPTRS,INX(P),1);          FORCEACCUMULATOR
 1874                             END;                                                   FORCEACCUMULATOR
 1875                           ELSE                                                     FORCEACCUMULATOR
 1876                             DO; /* NON-SUBSCRIPTED BYTE */                         FORCEACCUMULATOR
 1877                                R = FINDAR;                                         FORCEACCUMULATOR
 1878                                CALL EMITINST (MOVEI,12,0,SL,0,SS);                 FORCEACCUMULATOR
 1879                                CALL EMITINST (LDB,R,0,BYTEPTRS,0,1);               FORCEACCUMULATOR
 1880                             END;                                                   FORCEACCUMULATOR
 1881                       END;                                                         FORCEACCUMULATOR
 1882                    IF SFP = CHRTYPE THEN TYPE(P) = DESCRIPT;                       FORCEACCUMULATOR
 1883                    ELSE TYPE(P) = ACCUMULATOR;                                     FORCEACCUMULATOR
 1884                    REG(P) = R;                                                     FORCEACCUMULATOR
 1885                    IF INX(P) \= 0 THEN ACC(INX(P)) = AVAIL;                        FORCEACCUMULATOR
 1886                 END;                                                               FORCEACCUMULATOR
 1887           END;                                                                     FORCEACCUMULATOR
 1888        ELSE IF TP = CONSTANT THEN                                                  FORCEACCUMULATOR
 1889           DO;  /* FETCH A CONSTANT INTO AN ACCUMULATOR */                          FORCEACCUMULATOR
 1890              R = FINDAR;                                                           FORCEACCUMULATOR
 1891              IF FIXV(P) < "20000" & FIXV(P) > - "20000" THEN                       FORCEACCUMULATOR
 1892                 CALL EMITINST (HRREI,R,0,FIXV(P),0,0);                             FORCEACCUMULATOR
 1893              ELSE                                                                  FORCEACCUMULATOR C18 = -131072
 1894                 DO;  /* PUT DOWN A CONSTANT AND PICK IT UP */                      FORCEACCUMULATOR
 1895                    CALL EMITCONSTANT (FIXV(P));                                    FORCEACCUMULATOR
 1896                    CALL EMITINST (MOVE,R,0,ADR,0,1);                               FORCEACCUMULATOR
 1897                 END;                                                               FORCEACCUMULATOR
 1898              REG(P) = R;                                                           FORCEACCUMULATOR
 1899              TYPE(P) = ACCUMULATOR;                                                FORCEACCUMULATOR
 1900           END;                                                                     FORCEACCUMULATOR
 1901        ELSE IF TP = CHRTYPE THEN                                                   FORCEACCUMULATOR
 1902           DO;  /* FETCH A DESCRIPTOR INTO AN ACCUMULATOR */                        FORCEACCUMULATOR
 1903              R = FINDAR;                                                           FORCEACCUMULATOR
 1904              TYPE(P) = DESCRIPT;                                                   FORCEACCUMULATOR
 1905              REG(P) = R;                                                           FORCEACCUMULATOR
 1906              T1 = VAR(P);                                                          FORCEACCUMULATOR
 1907              SL = LENGTH(T1);                                                      FORCEACCUMULATOR
 1908              IF SL = 0 THEN CALL EMITINST (MOVEI,R,0,0,0,0);                       FORCEACCUMULATOR
 1909              ELSE                                                                  FORCEACCUMULATOR
 1910                 DO;  /* GENERATE DESCRIPTOR AND STRING, THEN PICK IT UP */         FORCEACCUMULATOR
 1911                    CALL EMITINST (MOVE,R,0,DSP,0,3);                               FORCEACCUMULATOR
 1912                    CALL EMITDESC (SL,SHL(DP,2)+DPOFFSET);                          FORCEACCUMULATOR
 1913                    DO SL = 0 TO SL-1;                                              FORCEACCUMULATOR
 1914                       CALL EMITBYTE (BYTE(T1,SL));                                 FORCEACCUMULATOR
 1915                    END;                                                            FORCEACCUMULATOR
 1916                 END;                                                               FORCEACCUMULATOR
 1917           END;                                                                     FORCEACCUMULATOR
 1918        ELSE IF TP \= ACCUMULATOR THEN IF TP \= DESCRIPT THEN                       FORCEACCUMULATOR
 1919                 CALL ERROR ('FORCEACCUMULATOR FAILED ***',1);                      FORCEACCUMULATOR
 1920  END FORCEACCUMULATOR;                                                             FORCEACCUMULATOR
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 69
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
P               FIXED      9646     DATA   1811      34
R               FIXED      9651     DATA   1816      18
SFP             FIXED      9649     DATA   1814       8
SL              FIXED      9647     DATA   1814      18
SS              FIXED      9650     DATA   1814       5
T1              CHARACTER   826   STRING   1815       3
TP              FIXED      9648     DATA   1814       6
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 70
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1921  FORCEDESCRIPTOR:                                                                 *
 1922     PROCEDURE (P);                                                                *
 1923        /* GET A DESCRIPTOR FOR THE OPERAND P */                                    FORCEDESCRIPTOR
 1924        DECLARE P FIXED;                                                            FORCEDESCRIPTOR
 1925        CALL FORCEACCUMULATOR (P);                                                  FORCEDESCRIPTOR
 1926        IF TYPE (P) \= DESCRIPT THEN                                                FORCEDESCRIPTOR
 1927           DO; /* USE THE NUMBER TO DECIMAL STRING CONVERSION ROUTINE */            FORCEDESCRIPTOR
 1928              CALL DELETE_MOVE (P,MOVEM,REG(P),0,C,0,1);  /* SAVE AS C */           FORCEDESCRIPTOR
 1929              ACC(REG(P)) = AVAIL;                                                  FORCEDESCRIPTOR
 1930              CALL SAVE_ACS (1);                                                    FORCEDESCRIPTOR
 1931              CALL EMITINST (PUSHJ,15,0,NMBRENTRY,0,2);                             FORCEDESCRIPTOR
 1932              CALL RESTORE_ACS (1);                                                 FORCEDESCRIPTOR
 1933              ACC(REG(P)) = BUSY;                                                   FORCEDESCRIPTOR
 1934              IF REG(P) \= 0 THEN CALL EMITINST (MOVE,REG(P),0,0,0,0);              FORCEDESCRIPTOR
 1935              TYPE (P) = DESCRIPT;             /* IT IS NOW A STRING */             FORCEDESCRIPTOR
 1936              STILLINZERO = REG(P);                                                 FORCEDESCRIPTOR
 1937           END;                                                                     FORCEDESCRIPTOR
 1938  END FORCEDESCRIPTOR;                                                              FORCEDESCRIPTOR

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
P               FIXED      9675     DATA   1922      10
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 71
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1939  GENSTORE:PROCEDURE (MP, SP);                                                     *
 1940        DECLARE MP FIXED, SP FIXED;                                                 GENSTORE
 1941        /* GENERATE TYPE CONVERSION (IF NECESSARY) & STORAGE CODE --                GENSTORE
 1942           ALSO HANDLES OUTPUT ON THE LEFT OF THE REPLACEMENT OPERATOR              GENSTORE
 1943        */                                                                          GENSTORE
 1944        DECLARE SL FIXED, SFP FIXED, SS FIXED;                                      GENSTORE
 1945        COUNT_STORE = COUNT_STORE + 1;                                              GENSTORE
 1946        SL = SYTLOC(FIXL(MP));                                                      GENSTORE
 1947        SS = SYTSEG(FIXL(MP));                                                      GENSTORE
 1948        SFP = SYTYPE(FIXL(MP));                                                     GENSTORE
 1949        IF SFP = SPECIAL THEN                                                       GENSTORE
 1950           DO;                                                                      GENSTORE
 1951              IF SL = 7 THEN                                                        GENSTORE
 1952                 DO;  /* BUILTIN FUNCTION OUTPUT */                                 GENSTORE
 1953                    CALL FORCEDESCRIPTOR(SP);                                       GENSTORE
 1954                    CALL LIBRARY_CALL (0,2,MP,SP);                                  GENSTORE
 1955                 END;                                                               GENSTORE
 1956              ELSE IF SL = 8 THEN                                                   GENSTORE
 1957                 DO;   /* BUILTIN FUNCTION FILE */                                  GENSTORE
 1958                    IF CNT(MP) \= 1 THEN                                            GENSTORE
 1959                       CALL ERROR (FILEMSG,0);                                      GENSTORE
 1960                    CALL FORCEACCUMULATOR (SP);                                     GENSTORE
 1961                    CALL LIBRARY_CALL (0,6,MP,SP);                                  GENSTORE
 1962                 END;                                                               GENSTORE
 1963              ELSE IF SL = 20 THEN                                                  GENSTORE
 1964                 DO;    /* BUILT-IN FUNCTION  FILENAME */                           GENSTORE
 1965                    CALL FORCEDESCRIPTOR(SP);                                       GENSTORE
 1966                    CALL LIBRARY_CALL (0,7,MP,SP);                                  GENSTORE
 1967                 END;                                                               GENSTORE
 1968              ELSE CALL ERROR ('ILLEGAL USE OF ' ^^ SYT(FIXL(MP)),0);               GENSTORE
 1969           END;                                                                     GENSTORE
 1970        ELSE                                                                        GENSTORE
 1971           DO;                                                                      GENSTORE
 1972              IF SFP = CHRTYPE THEN                                                 GENSTORE
 1973                 DO;                                                                GENSTORE
 1974                    CALL FORCEDESCRIPTOR(SP);                                       GENSTORE
 1975                    CALL DELETE_MOVE (SP,MOVEM,REG(SP),0,SL,INX(MP),SS);            GENSTORE
 1976                 END;                                                               GENSTORE
 1977              ELSE IF TYPE(SP) = DESCRIPT ^ TYPE(SP) = CHRTYPE THEN                 GENSTORE
 1978                   CALL ERROR ('ASSIGNMENT REQUIRES ILLEGAL TYPE CONVERSION.',0);   GENSTORE
 1979              ELSE                                                                  GENSTORE
 1980                 DO;     /* FIXEDTYPE OR BYTETYPE */                                GENSTORE
 1981                    IF SFP = FIXEDTYPE THEN                                         GENSTORE
 1982                       DO;                                                          GENSTORE
 1983                       IF TYPE(SP) = CONSTANT & FIXV(SP) = 0 THEN                   GENSTORE
 1984                          CALL EMITINST(SETZM,0,0,SL,INX(MP),SS);                   GENSTORE
 1985                          ELSE                                                      GENSTORE
 1986                             DO;                                                    GENSTORE
 1987                                CALL FORCEACCUMULATOR(SP);                          GENSTORE
 1988                                CALL DELETE_MOVE (SP,MOVEM,REG(SP),0,SL,INX(MP),SS); GENSTORE
 1989                             END;                                                   GENSTORE
 1990                       END;                                                         GENSTORE
 1991                    ELSE                                                            GENSTORE
 1992                       DO;      /* MUST BE BYTETYPE */                              GENSTORE
 1993                          CALL FORCEACCUMULATOR(SP);                                GENSTORE
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 72
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 1994                          IF INX(MP) \= 0 THEN                                      GENSTORE
 1995                             DO;  /* GOOD GRIEF, SUBSCRIPTING */                    GENSTORE
 1996                                 CALL EMITINST (MOVE,12,0,INX(MP),0,0);             GENSTORE
 1997                                 CALL EMITINST (LSH,12,0,    -2,0,0);               GENSTORE
 1998                                 CALL EMITINST (ANDI,INX(MP),0,3,0,0);              GENSTORE
 1999                                 IF (SL ^ SS) \= 0 THEN CALL EMITINST (ADDI,12,0,SL,0,SS); GENSTORE
 2000                                 CALL EMITINST (DPB,REG(SP),0,BYTEPTRS,INX(MP),1);  GENSTORE
 2001                             END;                                                   GENSTORE
 2002                          ELSE                                                      GENSTORE
 2003                             DO;                                                    GENSTORE
 2004                                 CALL EMITINST (MOVEI,12,0,SL,0,SS);                GENSTORE
 2005                                 CALL EMITINST (DPB,REG(SP),0,BYTEPTRS,0,1);        GENSTORE
 2006                             END;                                                   GENSTORE
 2007                       END;                                                         GENSTORE
 2008                 END;                                                               GENSTORE
 2009           END;                                                                     GENSTORE
 2010        ACC(INX(MP)) = AVAIL;                                                       GENSTORE
 2011        CALL MOVESTACKS (SP,MP);                                                    GENSTORE
 2012  END GENSTORE;                                                                     GENSTORE

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
MP              FIXED      9676     DATA   1939      17
SFP             FIXED      9679     DATA   1944       4
SL              FIXED      9678     DATA   1944      10
SP              FIXED      9677     DATA   1939      20
SS              FIXED      9680     DATA   1944       7
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 73
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2013  SHOULDCOMMUTE:PROCEDURE;                                                         *
 2014        IF TYPE(SP) = CONSTANT THEN RETURN (FALSE);                                 SHOULDCOMMUTE
 2015        IF TYPE(MP) = CONSTANT THEN RETURN (TRUE);                                  SHOULDCOMMUTE
 2016        IF TYPE(SP) = VARIABLE & SYTYPE(FIXL(SP)) = FIXEDTYPE THEN RETURN (FALSE);  SHOULDCOMMUTE
 2017        IF TYPE(MP) = VARIABLE & SYTYPE(FIXL(MP)) = FIXEDTYPE THEN RETURN (TRUE);   SHOULDCOMMUTE
 2018        RETURN FALSE;                                                               SHOULDCOMMUTE
 2019  END SHOULDCOMMUTE;                                                                SHOULDCOMMUTE
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 74
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2020  ARITHEMIT:PROCEDURE(OP,COMMUTATIVE);                                             *
 2021     DECLARE OP FIXED, COMMUTATIVE FIXED, TP FIXED;                                 ARITHEMIT
 2022     DECLARE AWASD CHARACTER INITIAL ('ARITHMETIC WITH A STRING DESCRIPTOR');       ARITHEMIT
 2023     /* EMIT AN INSTRUCTION FOR AN INFIX OPERATOR -- CONNECT MP & SP */             ARITHEMIT
 2024     COUNT_ARITH = COUNT_ARITH + 1;                                                 ARITHEMIT
 2025     TP = 0;                                                                        ARITHEMIT
 2026     IF COMMUTATIVE THEN                                                            ARITHEMIT
 2027        IF SHOULDCOMMUTE THEN                                                       ARITHEMIT
 2028           DO;                                                                      ARITHEMIT
 2029              TP = MP; MP = SP; SP = TP;                                            ARITHEMIT
 2030              IF OP >= CAM & OP <= CMPRHI THEN OP = COMPARESWAP(OP-CAM)+CAM;        ARITHEMIT
 2031           END;                                                                     ARITHEMIT
 2032     CALL FORCEACCUMULATOR(MP);  /* GET THE LEFT ONE INTO AN ACCUMULATOR */         ARITHEMIT
 2033     IF TYPE(MP) = DESCRIPT THEN CALL ERROR (AWASD,0);                              ARITHEMIT
 2034     ELSE IF TYPE(SP) = VARIABLE & SYTYPE(FIXL(SP)) = FIXEDTYPE THEN                ARITHEMIT
 2035        DO;  /* OPERATE FROM STORAGE */                                             ARITHEMIT
 2036           CALL EMITINST (OP,REG(MP),0,SYTLOC(FIXL(SP)),INX(SP),SYTSEG(FIXL(SP)));  ARITHEMIT
 2037           ACC(INX(SP)) = AVAIL;                                                    ARITHEMIT
 2038                                                                                    ARITHEMIT
 2039        END;                                                                        ARITHEMIT
 2040     ELSE IF TYPE(SP) = CONSTANT THEN                                               ARITHEMIT
 2041        DO;                                                                         ARITHEMIT
 2042           IF FIXV(SP) < "40000" & FIXV(SP) >= 0 THEN /* USE IMMEDIATE */           ARITHEMIT
 2043              DO;                                                                   ARITHEMIT
 2044                 IF OP >= CAM & OP <= CMPRHI THEN OP=OP-9; /* SOB CODE ORDER */     ARITHEMIT
 2045                    CALL EMITINST(OP+1,REG(MP),0,FIXV(SP),0,0);                     ARITHEMIT
 2046              END;                                                                  ARITHEMIT
 2047           ELSE                                                                     ARITHEMIT
 2048              DO;                                                                   ARITHEMIT
 2049                 CALL EMITCONSTANT (FIXV(SP));                                      ARITHEMIT
 2050                 CALL EMITINST (OP,REG(MP),0,ADR,0,1);                              ARITHEMIT
 2051              END;                                                                  ARITHEMIT
 2052        END;                                                                        ARITHEMIT
 2053     ELSE                                                                           ARITHEMIT
 2054         DO;                                                                        ARITHEMIT
 2055           CALL FORCEACCUMULATOR(SP);                                               ARITHEMIT
 2056           IF TYPE(SP) \= ACCUMULATOR THEN CALL ERROR (AWASD,0);                    ARITHEMIT
 2057           ELSE CALL EMITINST (OP,REG(MP),0,REG(SP),0,0);                           ARITHEMIT
 2058           ACC(REG(SP)) = AVAIL;                                                    ARITHEMIT
 2059        END;                                                                        ARITHEMIT
 2060     IF TP \= 0 THEN                                                                ARITHEMIT
 2061        DO;                                                                         ARITHEMIT
 2062           SP = MP; MP = TP;                                                        ARITHEMIT
 2063           CALL MOVESTACKS (SP,MP);                                                 ARITHEMIT
 2064        END;                                                                        ARITHEMIT
 2065  END ARITHEMIT;                                                                    ARITHEMIT

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
AWASD           CHARACTER   832   STRING   2022       2
COMMUTATIVE     FIXED      9697     DATA   2020       1
OP              FIXED      9696     DATA   2020      12
TP              FIXED      9698     DATA   2021       5
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 75
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2066  BOOLBRANCH:PROCEDURE (SP,MP);                                                    *
 2067     DECLARE SP FIXED, MP FIXED, R FIXED;                                           BOOLBRANCH
 2068     /* GENERATE A CONDITIONAL BRANCH FOR DO WHILE OR AN IF STATEMENT               BOOLBRANCH
 2069        PLACE THE ADDRESS OF THIS BRANCH IN FIXL(MP)                                BOOLBRANCH
 2070     */                                                                             BOOLBRANCH
 2071     IF STILLCOND \= 0 THEN                                                         BOOLBRANCH
 2072        DO;  /* WE HAVE NOT GENERATED CODE SINCE SETTING THE CONDITION */           BOOLBRANCH
 2073           /* REMOVE THE MOVEI =1 AND MOVEI =0 AROUND THE CAM? */                   BOOLBRANCH
 2074           CODE_HEAD = (CODE_HEAD-2) &3; /* BACK UP PTR */                          BOOLBRANCH
 2075           R = (CODE_HEAD + 1) & 3;                                                 BOOLBRANCH
 2076           CODE(CODE_HEAD) = CODE(R);                                               BOOLBRANCH
 2077           CODE_REL(CODE_HEAD) = CODE_REL(R);                                       BOOLBRANCH
 2078           CODE_PP(CODE_HEAD) = CODE_PP(R) -1;                                      BOOLBRANCH
 2079           CODE_RBITS(CODE_HEAD) = CODE_RBITS(R);                                   BOOLBRANCH
 2080           CODE_FULL(R) = FALSE;                                                    BOOLBRANCH
 2081           CODE_FULL(R+1&3) = FALSE;                                                BOOLBRANCH
 2082           PP = PP - 2;                                                             BOOLBRANCH
 2083           CODE(CODE_HEAD) = CODE(CODE_HEAD) ^^ ' P' ^^ PP-1;                       BOOLBRANCH
 2084           IF CONTROL(BYTE('E')) THEN                                               BOOLBRANCH
 2085              DO;                                                                   BOOLBRANCH
 2086                 CALL PRINTLINE (BACKMSG,-1);                                       BOOLBRANCH
 2087                 CALL PRINTLINE (CODEMSG ^^ CODE(CODE_HEAD),-1);                    BOOLBRANCH
 2088              END;                                                                  BOOLBRANCH
 2089           INSTRUCT(MOVEI) = INSTRUCT(MOVEI) - 2;                                   BOOLBRANCH
 2090           ACC(REG(SP)) = AVAIL;          /* FREE CONDITION REGISTER */             BOOLBRANCH
 2091           R = 4;                         /* JUMP ALWAYS */                         BOOLBRANCH
 2092        END;                                                                        BOOLBRANCH
 2093     ELSE                                                                           BOOLBRANCH
 2094        DO;                                                                         BOOLBRANCH
 2095           CALL FORCEACCUMULATOR(SP);                                               BOOLBRANCH
 2096           CALL EMITINST (ANDI,REG(SP),0,1,0,0);  /* TEST ONLY LOW ORDER BIT */     BOOLBRANCH
 2097           ACC(REG(SP)) = AVAIL;          /* FREE UP VARIABLE REGISTER */           BOOLBRANCH
 2098           R = 2;                         /* JUMP IF REGISTER ZERO */               BOOLBRANCH
 2099        END;                                                                        BOOLBRANCH
 2100     FIXL(MP) = FINDLABEL;                /* GET A NEW LABEL */                     BOOLBRANCH
 2101     CALL EMITINST (JUMP+R,REG(SP),0,FIXL(MP),0,4);                                 BOOLBRANCH
 2102  END BOOLBRANCH;                                                                   BOOLBRANCH

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
MP              FIXED      9709     DATA   2066       2
R               FIXED      9710     DATA   2067      10
SP              FIXED      9708     DATA   2066       5
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 76
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2103  SETLIMIT:                                                                        *
 2104     PROCEDURE;                                                                    *
 2105        /* SETS DO LOOP LIMIT FOR <ITERATION CONTROL> */                            SETLIMIT
 2106        IF TYPE (MPP1) = CONSTANT THEN                                              SETLIMIT
 2107           CALL EMITCONSTANT (FIXV(MPP1));                                          SETLIMIT
 2108        ELSE                                                                        SETLIMIT
 2109           DO;                                                                      SETLIMIT
 2110              CALL FORCEACCUMULATOR (MPP1);  /* GET LOOP LIMIT */                   SETLIMIT
 2111              CALL EMITDATAWORD (0);                                                SETLIMIT
 2112              ADR = DP - 1;                                                         SETLIMIT
 2113              CALL EMITINST(MOVEM,REG(MPP1),0,ADR,0,1); /* SAVE IT */               SETLIMIT
 2114              ACC(REG(MPP1)) = AVAIL;                                               SETLIMIT
 2115           END;                                                                     SETLIMIT
 2116        FIXV (MP) = ADR;                                                            SETLIMIT
 2117   END SETLIMIT;                                                                    SETLIMIT
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 77
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2118  STUFF_PARAMETER:                                                                 *
 2119     PROCEDURE;                                                                    *
 2120        /* GENERATE CODE TO SEND AN ACTUAL PARAMETER TO A PROCEDURE */              STUFF_PARAMETER
 2121        DECLARE (I,J) FIXED;                                                        STUFF_PARAMETER
 2122        I = FIXL (MP) + CNT (MP);  J = SYTLOC (I);                                  STUFF_PARAMETER
 2123        IF LENGTH (SYT(I)) = 0 THEN                                                 STUFF_PARAMETER
 2124           DO;                                                                      STUFF_PARAMETER
 2125              SYTCO (I) = SYTCO (I) + 1;  /* COUNT THE REFERENCE                */  STUFF_PARAMETER
 2126                 DO;                                                                STUFF_PARAMETER
 2127                    IF SYTYPE(I) = BYTETYPE THEN                                    STUFF_PARAMETER
 2128                      DO;                                                           STUFF_PARAMETER
 2129                         CALL FORCEACCUMULATOR(MPP1);                               STUFF_PARAMETER
 2130                         CALL EMITINST (MOVEI,12,0,J,0,SYTSEG(I));                  STUFF_PARAMETER
 2131                         CALL EMITINST (DPB,REG(MPP1),0,BYTEPTRS,0,1);              STUFF_PARAMETER
 2132                      END;                                                          STUFF_PARAMETER
 2133                    ELSE                                                            STUFF_PARAMETER
 2134                      DO;                                                           STUFF_PARAMETER
 2135                         IF TYPE(MPP1) = CONSTANT & FIXV(MPP1) = 0 THEN             STUFF_PARAMETER
 2136                            DO;                                                     STUFF_PARAMETER
 2137                               CALL EMITINST (SETZM,0,0,J,0,SYTSEG(I));             STUFF_PARAMETER
 2138                               RETURN;                                              STUFF_PARAMETER
 2139                            END;                                                    STUFF_PARAMETER
 2140                         CALL FORCEACCUMULATOR (MPP1);                              STUFF_PARAMETER
 2141                         CALL DELETE_MOVE (MPP1,MOVEM,REG(MPP1),0,J,0,SYTSEG(I));   STUFF_PARAMETER
 2142                      END;                                                          STUFF_PARAMETER
 2143                    ACC(REG(MPP1)) = AVAIL;                                         STUFF_PARAMETER
 2144                 END;                                                               STUFF_PARAMETER
 2145           END;                                                                     STUFF_PARAMETER
 2146        ELSE                                                                        STUFF_PARAMETER
 2147           CALL ERROR ('TOO MANY ACTUAL PARAMETERS', 1);                            STUFF_PARAMETER
 2148  END STUFF_PARAMETER;                                                              STUFF_PARAMETER

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
I               FIXED      9712     DATA   2121       9
J               FIXED      9713     DATA   2121       4
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 78
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2149  DIVIDE_CODE:PROCEDURE(T);                                                        *
 2150     DECLARE T FIXED, I FIXED;                                                      DIVIDE_CODE
 2151     /* EMIT CODE TO PERFORM A DIVIDE (T=1) OR MOD (T=0) */                         DIVIDE_CODE
 2152     /* FIND A FREE REGISTER PAIR FOR THE DIVIDEND */                               DIVIDE_CODE
 2153     IF TYPE(MP) = ACCUMULATOR THEN                                                 DIVIDE_CODE
 2154        DO;   /* WE MAY BE ABLE TO USE THE REGISTER TO THE RIGHT */                 DIVIDE_CODE
 2155           I = REG(MP);                                                             DIVIDE_CODE
 2156           IF ACC(I+1) = AVAIL THEN GOTO FITS;                                      DIVIDE_CODE
 2157        END;                                                                        DIVIDE_CODE
 2158     DO I = T TO 11;                                                                DIVIDE_CODE
 2159        IF ACC(I) = AVAIL THEN IF ACC(I+1) = AVAIL THEN GOTO FIT;                   DIVIDE_CODE
 2160     END;                                                                           DIVIDE_CODE
 2161     CALL ERROR ('NO FREE REGISTERS FOR DIVISION OR MOD.',0);                       DIVIDE_CODE
 2162     RETURN;                                                                        DIVIDE_CODE
 2163  FIT:                                                                              DIVIDE_CODE
 2164     TARGET_REGISTER = I;                                                           DIVIDE_CODE
 2165     CALL FORCEACCUMULATOR(MP);                                                     DIVIDE_CODE
 2166     TARGET_REGISTER = -1;                                                          DIVIDE_CODE
 2167     IF REG(MP) \= I THEN                                                           DIVIDE_CODE
 2168        DO;                                                                         DIVIDE_CODE
 2169           CALL EMITINST (MOVE,I,0,REG(MP),0,0);                                    DIVIDE_CODE
 2170           ACC(REG(MP)) = AVAIL;                                                    DIVIDE_CODE
 2171           REG(MP) = I;                                                             DIVIDE_CODE
 2172        END;                                                                        DIVIDE_CODE
 2173        ACC(I) = BUSY;                                                              DIVIDE_CODE
 2174   FITS:                                                                            DIVIDE_CODE
 2175     ACC(I+1) = BUSY;                                                               DIVIDE_CODE
 2176     CALL ARITHEMIT (IDIV,0);                                                       DIVIDE_CODE
 2177     IF T = 0 THEN                                                                  DIVIDE_CODE
 2178        DO;  /* MOD, SWITCH REGISTER TO POINT TO REMAINDER */                       DIVIDE_CODE
 2179           ACC(I) = AVAIL;                /* FREE QUOTIENT */                       DIVIDE_CODE
 2180           REG(MP) = I+1;                 /* POINT TO REMAINDER */                  DIVIDE_CODE
 2181        END;                                                                        DIVIDE_CODE
 2182     ELSE ACC(I+1) = AVAIL;               /* FREE REMAINDER */                      DIVIDE_CODE
 2183     IF REG(MP) =12 THEN                                                            DIVIDE_CODE
 2184        DO;  /* TRANSFER THE MOD REMAINDER FROM A SCRATCH REGISTER */               DIVIDE_CODE
 2185           I = FINDAR;                                                              DIVIDE_CODE
 2186           CALL EMITINST (MOVE,I,0,REG(MP),0,0);                                    DIVIDE_CODE
 2187           ACC(REG(MP)) = AVAIL;                                                    DIVIDE_CODE
 2188           REG(MP) = I;                                                             DIVIDE_CODE
 2189        END;                                                                        DIVIDE_CODE
 2190  END DIVIDE_CODE;                                                                  DIVIDE_CODE

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
FIT             LABEL      5558  PROGRAM   2159       1
FITS            LABEL      5589  PROGRAM   2156       1
I               FIXED      9722     DATA   2150      17
T               FIXED      9721     DATA   2149       2
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 79
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2191  SHIFT_CODE:                                                                      *
 2192     PROCEDURE (OP);                                                               *
 2193        DECLARE OP FIXED;                                                           SHIFT_CODE
 2194        /* GENERATE CODE FOR THE BUILTIN FUNCTIONS SHL AND SHR */                   SHIFT_CODE
 2195        /* OP: LEFT = 0, RIGHT = 1 */                                               SHIFT_CODE
 2196        SP = MPP1;                                                                  SHIFT_CODE
 2197        IF CNT (MP) \= 2 THEN                                                       SHIFT_CODE
 2198           CALL ERROR ('SHIFT REQUIRES TWO ARGUMENTS', 0);                          SHIFT_CODE
 2199        ELSE                                                                        SHIFT_CODE
 2200           IF TYPE (MPP1) = CONSTANT THEN                                           SHIFT_CODE
 2201              DO;                                                                   SHIFT_CODE
 2202                 IF OP = 1 THEN FIXV(MPP1) = -FIXV(MPP1);                           SHIFT_CODE
 2203                 CALL EMITINST(LSH,REG(MP),0,FIXV(MPP1),0,0);                       SHIFT_CODE
 2204              END;                                                                  SHIFT_CODE
 2205        ELSE                                                                        SHIFT_CODE
 2206           DO;                                                                      SHIFT_CODE
 2207              /* DO SHIFT WITH VARIABLE */                                          SHIFT_CODE
 2208              CALL FORCEACCUMULATOR(MPP1);                                          SHIFT_CODE
 2209              IF OP = 1 THEN                                                        SHIFT_CODE
 2210                    CALL EMITINST (MOVN,REG(MPP1),0,REG(MPP1),0,0);                 SHIFT_CODE
 2211              CALL EMITINST (LSH,REG(MP),0,0,REG(MPP1),0);                          SHIFT_CODE
 2212              ACC(REG(MPP1)) = AVAIL;                                               SHIFT_CODE
 2213           END;                                                                     SHIFT_CODE
 2214        TYPE(MP) = ACCUMULATOR;                                                     SHIFT_CODE
 2215  END SHIFT_CODE;                                                                   SHIFT_CODE

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
OP              FIXED      9733     DATA   2192       2
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 80
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2216  STRINGCOMPARE:                                                                   *
 2217     PROCEDURE;                                                                    *
 2218        /* GENERATES CODE TO COMPARE THE STRINGS AT SP AND MP.                      STRINGCOMPARE
 2219           COMPARISONS ARE DONE FIRST ON LENGTH, AND SECOND ON A                    STRINGCOMPARE
 2220           CHARACTER BY CHARACTER COMPARISON USING THE PDP-10 COLLATING             STRINGCOMPARE
 2221           SEQUENCE.                                                                STRINGCOMPARE
 2222        */                                                                          STRINGCOMPARE
 2223        CALL FORCEDESCRIPTOR (SP);                                                  STRINGCOMPARE
 2224        CALL DELETE_MOVE (SP,MOVEM,REG(SP),0,B,0,3);                                STRINGCOMPARE
 2225        ACC(REG(SP)) = AVAIL;                                                       STRINGCOMPARE
 2226        CALL FORCEDESCRIPTOR (MP);                                                  STRINGCOMPARE
 2227        CALL DELETE_MOVE (MP,MOVEM,REG(MP),0,A,0,3);                                STRINGCOMPARE
 2228        CALL SAVE_ACS (5);                                                          STRINGCOMPARE
 2229        CALL EMITINST (PUSHJ,15,0,STRCOMP,0,2); /* CALL STRING COMPARE */           STRINGCOMPARE
 2230        CALL RESTORE_ACS (5);                                                       STRINGCOMPARE
 2231        CALL EMITINST (MOVEI,REG(MP),0,1,0,0);                                      STRINGCOMPARE
 2232         CALL EMITINST (SKIP+INX(MPP1),0,0,0,0,0);                                  STRINGCOMPARE
 2233        CALL EMITINST (MOVEI,REG(MP),0,0,0,0);                                      STRINGCOMPARE
 2234        TYPE(MP) = ACCUMULATOR;                                                     STRINGCOMPARE
 2235        STILLCOND = INX(MPP1);                                                      STRINGCOMPARE
 2236  END STRINGCOMPARE;                                                                STRINGCOMPARE
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 81
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2237  SYMBOLDUMP:                                                                      *
 2238     PROCEDURE;                                                                    *
 2239        /* LIST THE SYMBOLS IN THE PROCEDURE THAT HAS JUST BEEN                     SYMBOLDUMP
 2240           COMPILED IF TOGGLE S IS ENABLED AND L IS ENABLED.                        SYMBOLDUMP
 2241        */                                                                          SYMBOLDUMP
 2242        DECLARE SUBTITLE_SAVE CHARACTER;                                            SYMBOLDUMP
 2243        DECLARE HEADING CHARACTER INITIAL ('TYPE       LOC   SEGMENT DEFINED REF COUNT'); SYMBOLDUMP
 2244        DECLARE SEG(4) CHARACTER INITIAL ('ABSOLUTE','    DATA',' PROGRAM',         SYMBOLDUMP
 2245                 '  STRING','   LABEL');                                            SYMBOLDUMP
 2246        DECLARE EXCHANGES FIXED, I FIXED, LMAX FIXED,                               SYMBOLDUMP
 2247           J FIXED, K FIXED, L FIXED, M FIXED, SYTSORT (SYTSIZE) FIXED;             SYMBOLDUMP
 2248        DECLARE BLANKS CHARACTER,                                                   SYMBOLDUMP
 2249                TAG    CHARACTER;                                                   SYMBOLDUMP
 2250                                                                                    SYMBOLDUMP
 2251     STRING_GT:                                                                     SYMBOLDUMP
 2252        PROCEDURE (A,B);                                                            SYMBOLDUMP
 2253           /* DO AN HONEST STRING COMPARISON:                                       STRING_GT
 2254              XPL CAN BE TRUSTED ONLY IF STRINGS ARE OF THE SAME LENGTH.            STRING_GT
 2255              IF LENGTHS DIFFER, LET XPL SEE ONLY THE SHORTER, AND THE              STRING_GT
 2256              MATCHING PART OF THE LONGER, AND ARRANGE COMPARISONS SO               STRING_GT
 2257              THAT RESULT IS RIGHT.   */                                            STRING_GT
 2258           DECLARE A CHARACTER,                                                     STRING_GT
 2259                   B CHARACTER;                                                     STRING_GT
 2260           DECLARE LA FIXED,  LB FIXED;                                             STRING_GT
 2261                                                                                    STRING_GT
 2262           LA = LENGTH (A);                                                         STRING_GT
 2263           LB = LENGTH (B);                                                         STRING_GT
 2264           IF LA = LB THEN RETURN (A > B);                                          STRING_GT
 2265           ELSE IF LA > LB THEN RETURN (SUBSTR (A,0,LB) >= B);                      STRING_GT
 2266                ELSE RETURN (A > SUBSTR(B,0,LA));                                   STRING_GT
 2267        END STRING_GT;                                                              STRING_GT

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
A               CHARACTER   846   STRING   2252       4
B               CHARACTER   847   STRING   2252       4
LA              FIXED     10190     DATA   2260       4
LB              FIXED     10191     DATA   2260       4
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 82
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2268                                                                                    SYMBOLDUMP
 2269        IF CONTROL(BYTE('L'))  = 0 THEN RETURN; /* DON'T DUMP IF NOT LISTING */     SYMBOLDUMP
 2270        IF PROCMARK <= NDECSY THEN                                                  SYMBOLDUMP
 2271           DO;                                                                      SYMBOLDUMP
 2272              CALL PRINTLINE ('SYMBOL TABLE DUMP',0);                               SYMBOLDUMP
 2273              LMAX = 15;                                                            SYMBOLDUMP
 2274              DO I = PROCMARK TO NDECSY;  /* PAD ALL NAMES TO THE SAME LENGTH */    SYMBOLDUMP
 2275                 IF LENGTH (SYT (I)) > LMAX THEN                                    SYMBOLDUMP
 2276                    LMAX = LENGTH (SYT (I));                                        SYMBOLDUMP
 2277                 SYTSORT (I) = I;                                                   SYMBOLDUMP
 2278              END;                                                                  SYMBOLDUMP
 2279              IF LMAX > 70 THEN LMAX = 70;                                          SYMBOLDUMP
 2280              BLANKS = SUBSTR (X70,0,LMAX);                                         SYMBOLDUMP
 2281              EXCHANGES = TRUE;                                                     SYMBOLDUMP
 2282              K = NDECSY - PROCMARK;                                                SYMBOLDUMP
 2283              DO WHILE EXCHANGES;                                                   SYMBOLDUMP
 2284                 EXCHANGES = FALSE;                                                 SYMBOLDUMP
 2285                 DO J = 0 TO K - 1;                                                 SYMBOLDUMP
 2286                    I = NDECSY - J;                                                 SYMBOLDUMP
 2287                    L = I - 1;                                                      SYMBOLDUMP
 2288                    IF STRING_GT(SYT (SYTSORT(L)),SYT(SYTSORT(I))) THEN             SYMBOLDUMP
 2289                       DO;                                                          SYMBOLDUMP
 2290                          M = SYTSORT (I);                                          SYMBOLDUMP
 2291                          SYTSORT (I) = SYTSORT (L);                                SYMBOLDUMP
 2292                          SYTSORT (L) = M;                                          SYMBOLDUMP
 2293                          EXCHANGES = TRUE;                                         SYMBOLDUMP
 2294                          K = J;          /* RECORD THE LAST SWAP */                SYMBOLDUMP
 2295                       END;                                                         SYMBOLDUMP
 2296                  END;                                                              SYMBOLDUMP
 2297              END;                                                                  SYMBOLDUMP
 2298              I = PROCMARK;                                                         SYMBOLDUMP
 2299              DO WHILE LENGTH (SYT (SYTSORT (I))) = 0;                              SYMBOLDUMP
 2300                 I = I + 1;               /* IGNORE NULL NAMES */                   SYMBOLDUMP
 2301              END;                                                                  SYMBOLDUMP
 2302              SUBTITLE_SAVE = SUBTITLE;                                             SYMBOLDUMP
 2303              SUBTITLE = 'SYMBOL' ^^ SUBSTR(BLANKS,0,LMAX-5) ^^ HEADING;            SYMBOLDUMP
 2304              CALL PRINTLINE (SUBTITLE,0);                                          SYMBOLDUMP
 2305              DO I = I TO NDECSY;                                                   SYMBOLDUMP
 2306                 K = SYTSORT (I);                                                   SYMBOLDUMP
 2307                 TAG = SYT(K) ^^ SUBSTR(X70,0,LMAX-LENGTH(SYT(K)));                 SYMBOLDUMP
 2308                 CALL I_FORMAT (SYTLOC(K),5);                                       SYMBOLDUMP
 2309                 TAG = TAG ^^ X1 ^^ TYPENAME(SYTYPE(K)) ^^ X1 ^^ I_STRING;          SYMBOLDUMP
 2310                 CALL I_FORMAT (SYTCARD(K),5);                                      SYMBOLDUMP
 2311                 TAG = TAG ^^ X1 ^^ SEG(SYTSEG(K)) ^^ X2 ^^ I_STRING;               SYMBOLDUMP
 2312                 CALL I_FORMAT (SYTCO(K),5);                                        SYMBOLDUMP
 2313                 IF SYTCO(K) = 0 THEN I_STRING = I_STRING ^^ ' *';                  SYMBOLDUMP
 2314                 CALL PRINTLINE (TAG ^^ X3 ^^ I_STRING,-1);                         SYMBOLDUMP
 2315                                                                                    SYMBOLDUMP
 2316                 K = K + 1;                                                         SYMBOLDUMP
 2317                 DO WHILE (LENGTH (SYT (K)) = 0) & (K <= NDECSY);                   SYMBOLDUMP
 2318                    J = K - SYTSORT (I);                                            SYMBOLDUMP
 2319                    TAG = '  PARAMETER  ' ^^ J ^^ SUBSTR(BLANKS,13) ^^              SYMBOLDUMP
 2320                          TYPENAME(SYTYPE(K));                                      SYMBOLDUMP C19 = 1744830451
 2321                    CALL I_FORMAT (SYTLOC(K),5);                                    SYMBOLDUMP
 2322                    TAG = TAG ^^ X1 ^^ I_STRING;                                    SYMBOLDUMP
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 83
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2323                    CALL I_FORMAT (SYTCARD(K),5);                                   SYMBOLDUMP
 2324                    TAG = TAG ^^ X1 ^^ SEG(SYTSEG(K)) ^^ X2 ^^ I_STRING;            SYMBOLDUMP
 2325                    CALL I_FORMAT (SYTCO(K),5);                                     SYMBOLDUMP
 2326                    CALL PRINTLINE (TAG ^^ X3 ^^ I_STRING,-1);                      SYMBOLDUMP
 2327                    K = K + 1;                                                      SYMBOLDUMP
 2328                 END;                                                               SYMBOLDUMP
 2329              END;                                                                  SYMBOLDUMP
 2330              SUBTITLE = SUBTITLE_SAVE;                                             SYMBOLDUMP
 2331           END;                                                                     SYMBOLDUMP
 2332           EJECT_PAGE;                                                              SYMBOLDUMP
 2333  END SYMBOLDUMP;                                                                   SYMBOLDUMP

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
BLANKS          CHARACTER   844   STRING   2248       3
EXCHANGES       FIXED      9762     DATA   2246       4
HEADING         CHARACTER   838   STRING   2243       1
I               FIXED      9763     DATA   2246      18
J               FIXED      9765     DATA   2247       5
K               FIXED      9766     DATA   2247      24
L               FIXED      9767     DATA   2247       4
LMAX            FIXED      9764     DATA   2246       8
M               FIXED      9768     DATA   2247       2
SEG             CHARACTER   839   STRING   2244       2
STRING_GT       PROCEDURE  5803  PROGRAM   2251       1
  PARAMETER  1  CHARACTER   846   STRING   2252       5
  PARAMETER  2  CHARACTER   847   STRING   2252       5
SUBTITLE_SAVE   CHARACTER   837   STRING   2242       2
SYTSORT         FIXED      9769     DATA   2247      10
TAG             CHARACTER   845   STRING   2249      12
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 84
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2334  DUMPIT:                                                                          *
 2335     PROCEDURE;                                                                    *
 2336        DECLARE CHAR360 CHARACTER;                                                  DUMPIT
 2337        DECLARE T1 CHARACTER, T2 CHARACTER, L FIXED, LL FIXED;                      DUMPIT
 2338        /* PUT OUT STATISTICS KEPT WITHIN THE COMPILER */                           DUMPIT
 2339       IF TOP_MACRO >= 0 THEN                                                       DUMPIT
 2340            DO; /* DUMP MACRO DICTIONARY */                                         DUMPIT
 2341               CALL PRINTLINE ( 'MACRO DEFINITIONS:',0);                            DUMPIT
 2342               CALL PRINTLINE (X1,-1);                                              DUMPIT
 2343               L = LENGTH (MACRO_NAME(TOP_MACRO));                                  DUMPIT
 2344               IF L > 70 THEN L = 70;                                               DUMPIT
 2345               SUBTITLE = 'NAME' ^^ SUBSTR (X70,0,L-2) ^^                           DUMPIT
 2346                          'AT LINE REF COUNT LITERAL VALUE';                        DUMPIT
 2347               CALL PRINTLINE (SUBTITLE,-1);                                        DUMPIT
 2348               DO I = 0 TO TOP_MACRO;                                               DUMPIT
 2349                  K = LENGTH (MACRO_NAME(I));                                       DUMPIT
 2350                  IF K < L THEN                                                     DUMPIT
 2351                     DO;                                                            DUMPIT
 2352                         CHAR360 = SUBSTR (X70,0,L-K);                              DUMPIT
 2353                         MACRO_NAME (I) = MACRO_NAME (I) ^^ CHAR360;                DUMPIT
 2354                     END;                                                           DUMPIT
 2355                  ELSE                                                              DUMPIT
 2356                     MACRO_NAME(I) = SUBSTR(MACRO_NAME(I),0,L);                     DUMPIT
 2357                  T1 = MACRO_DECLARE(I);                                            DUMPIT
 2358                  T2 = MACRO_COUNT(I);                                              DUMPIT
 2359                  LL = LENGTH (T1);                                                 DUMPIT
 2360                  IF LL < 8 THEN T1 = SUBSTR(X70,0,8-LL) ^^ T1;                     DUMPIT
 2361                  LL = LENGTH (T2);                                                 DUMPIT
 2362                  IF LL < 9 THEN T2 = SUBSTR(X70,0,9-LL) ^^ T2;                     DUMPIT
 2363                  CALL PRINTLINE (MACRO_NAME(I) ^^ T1 ^^ T2 ^^ X4 ^^ MACRO_TEXT(I),-1); DUMPIT
 2364               END;                                                                 DUMPIT
 2365            END;                                                                    DUMPIT
 2366        SUBTITLE = '';                                                              DUMPIT
 2367        CALL PRINTLINE (X1,-1);                                                     DUMPIT
 2368        CALL PRINTLINE ('ID COMPARES       = ' ^^ IDCOMPARES,-1);                   DUMPIT
 2369        CALL PRINTLINE ('SYMBOL TABLE SIZE = ' ^^ MAXNDECSY,-1);                    DUMPIT
 2370        CALL PRINTLINE ('MACRO DEFINITIONS = ' ^^ TOP_MACRO + 1,-1);                DUMPIT
 2371        CALL PRINTLINE ('SCAN              = ' ^^ COUNT_SCAN,-1);                   DUMPIT
 2372        CALL PRINTLINE ('EMITINST          = ' ^^ COUNT_INST,-1);                   DUMPIT
 2373        CALL PRINTLINE ('FORCE ACCUMULATOR = ' ^^ COUNT_FORCE,-1);                  DUMPIT
 2374        CALL PRINTLINE ('ARITHEMIT         = ' ^^ COUNT_ARITH,-1);                  DUMPIT
 2375        CALL PRINTLINE ('GENERATE STORE    = ' ^^ COUNT_STORE,-1);                  DUMPIT
 2376        CALL PRINTLINE ('FREE STRING AREA  = ' ^^ FREELIMIT - FREEBASE,-1);         DUMPIT
 2377        CALL PRINTLINE ('COMPACTIFICATIONS = ' ^^ COUNT_COMPACT,-1);                DUMPIT
 2378        SUBTITLE = 'INSTRUCTION FREQUENCIES';                                       DUMPIT
 2379        EJECT_PAGE;                                                                 DUMPIT
 2380        DO I = 0 TO 15;                                                             DUMPIT
 2381           J = I * 32;                                                              DUMPIT C20 = 15
 2382           DO K = 0 TO 31;                                                          DUMPIT
 2383              IF INSTRUCT(J+K) > 0 THEN                                             DUMPIT C21 = 31
 2384                  CALL PRINTLINE (SUBSTR(OPNAME(I),K*6,6) ^^ X4 ^^ INSTRUCT(J+K),-1); DUMPIT
 2385           END;                                                                     DUMPIT
 2386        END;                                                                        DUMPIT
 2387  END DUMPIT;                                                                       DUMPIT

SYMBOL TABLE DUMP
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 85
SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
 

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

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
CH              CHARACTER   869   STRING   2390       8
DATE1           FIXED     10286     DATA   2392       6
DAY             FIXED     10287     DATA   2392       2
HOURS           FIXED     10283     DATA   2391       2
L               FIXED     10289     DATA   2392       2
MINUTES         FIXED     10284     DATA   2391       2
MONTH           CHARACTER   870   STRING   2393       2
MONTHS          CHARACTER   871   STRING   2394       1
SECS            FIXED     10285     DATA   2391       2
TIME1           FIXED     10282     DATA   2391       4
YEAR            FIXED     10288     DATA   2392       2
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 94
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2798  STACK_DUMP:                                                                      *
 2799     PROCEDURE;                                                                    *
 2800        DECLARE LINE CHARACTER;                                                     STACK_DUMP
 2801        IF \ CONTROL(BYTE('R')) THEN RETURN;  /* 'R' IS BARF SWITCH */              STACK_DUMP
 2802        LINE = 'PARTIAL PARSE TO THIS POINT IS: ';                                  STACK_DUMP
 2803        DO I = 0 TO SP;                                                             STACK_DUMP
 2804           IF LENGTH(LINE) > 105 THEN                                               STACK_DUMP
 2805              DO;                                                                   STACK_DUMP
 2806                 CALL PRINTLINE (LINE,-1);                                          STACK_DUMP
 2807                 LINE = X4;                                                         STACK_DUMP
 2808              END;                                                                  STACK_DUMP
 2809           LINE = LINE ^^ X1 ^^ VOCAB(STATE_NAME(STATE_STACK(I)));                  STACK_DUMP
 2810        END;                                                                        STACK_DUMP
 2811        CALL PRINTLINE (LINE,-1);                                                   STACK_DUMP
 2812     END STACK_DUMP;                                                                STACK_DUMP

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
LINE            CHARACTER   935   STRING   2800       7
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 95
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 2813                                                                                   *
 2814    /*                  THE SYNTHESIS ALGORITHM FOR XPL                      */    *
 2815                                                                                   *
 2816                                                                                   *
 2817  SYNTHESIZE:                                                                      *
 2818  PROCEDURE(PRODUCTION_NUMBER);                                                    *
 2819     DECLARE PRODUCTION_NUMBER FIXED;                                               SYNTHESIZE
 2820     DECLARE TOOMSG CHARACTER INITIAL ('TOO MANY ARGUMENTS FOR ');                  SYNTHESIZE
 2821                                                                                    SYNTHESIZE
 2822     STACK_CASE:                                                                    SYNTHESIZE
 2823        PROCEDURE (DATUM);                                                          SYNTHESIZE
 2824           DECLARE DATUM FIXED;                                                     STACK_CASE
 2825           DECLARE DCLRM CHARACTER                                                  STACK_CASE
 2826                 INITIAL ('TOO MANY CASES OR FACTORED DECLARATIONS');               STACK_CASE
 2827           IF CASEP >= CASELIMIT THEN CALL ERROR (DCLRM,1);                         STACK_CASE
 2828                                 ELSE CASEP = CASEP + 1;                            STACK_CASE
 2829           CASESTACK(CASEP) = DATUM;                                                STACK_CASE
 2830     END STACK_CASE;                                                                STACK_CASE

SYMBOL TABLE DUMP

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

SYMBOL TABLE DUMP

SYMBOL            TYPE       LOC   SEGMENT DEFINED REF COUNT
PRODUCTION_NUMBER FIXED     10492     DATA   2818       1
STACK_CASE        PROCEDURE  9014  PROGRAM   2822       5
  PARAMETER  1    FIXED     10499     DATA   2823       6
TOOMSG            CHARACTER   937   STRING   2820       3
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 112
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3670                                                                                   *
 3671    /*              SYNTACTIC PARSING FUNCTIONS                              */    *
 3672                                                                                   *
 3673                                                                                   *
 3674   CONFLICT: PROCEDURE (CURRENT_STATE);                                            *
 3675                                                                                    CONFLICT
 3676           DECLARE I FIXED, CURRENT_STATE FIXED;                                    CONFLICT
 3677                                                                                    CONFLICT
 3678           /*   THIS PROC IS TRUE IF THE CURRENT TOKEN IS NOT   */                  CONFLICT
 3679           /*   A TRANSITION SYMBOL FROM THE CURRENT STATE      */                  CONFLICT
 3680                                                                                    CONFLICT
 3681           /*   (A CONFLICT THEREFORE EXISTS BETWEEN THE        */                  CONFLICT
 3682           /*   CURRENT STATE AND THE NEXT TOKEN)               */                  CONFLICT
 3683                                                                                    CONFLICT
 3684           I = INDEX1(CURRENT_STATE);   /*   STARTING POINT FOR STATE        */     CONFLICT
 3685                                        /*   TRANSITION SYMBOLS              */     CONFLICT
 3686           DO I = I TO I+INDEX2(CURRENT_STATE)-1;   /*   COMPARE WITH EACH   */     CONFLICT
 3687           IF READ1(I) = TOKEN THEN RETURN (FALSE); /*   FOUND IT            */     CONFLICT
 3688           END;                                                                     CONFLICT
 3689           RETURN (TRUE);   /*   NOT THERE   */                                     CONFLICT
 3690                                                                                    CONFLICT
 3691           END CONFLICT;                                                            CONFLICT

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
CURRENT_STATE   FIXED     10602     DATA   3674       2
I               FIXED     10601     DATA   3676       5
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 113
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3692                                                                                   *
 3693                                                                                   *
 3694   RECOVER: PROCEDURE;                                                             *
 3695                                                                                    RECOVER
 3696           DECLARE ANSWER BIT(1);                                                   RECOVER
 3697                                                                                    RECOVER
 3698           /*   THIS IS A VERY CRUDE ERROR RECOVERY PROCEDURE               */      RECOVER
 3699           /*   IT RETURNS TRUE IF THE PARSE MUST BE RESUMED IN             */      RECOVER
 3700           /*   A NEW STATE (THE ONE IN THE CURRENT POSITION OF THE STATE   */      RECOVER
 3701           /*   STACK)                                                      */      RECOVER
 3702           /*   IT RETURNS FALSE IF THE PARSE IS RESUMED WITH THE SAME      */      RECOVER
 3703           /*   STATE AS WAS INTENDED BEFORE RECOVER WAS CALLED             */      RECOVER
 3704                                                                                    RECOVER
 3705           ANSWER = FALSE;                                                          RECOVER
 3706           /*   IF THIS IS THE SECOND SUCCESSIVE CALL TO RECOVER, DISCARD   */      RECOVER
 3707           /*   ONE SYMBOL (FAILSOFT IS SET TRUE BY SCAN)                   */      RECOVER
 3708           IF \ FAILSOFT & 1 THEN CALL SCAN;                                        RECOVER
 3709           FAILSOFT = FALSE;                                                        RECOVER
 3710           /*   FIND SOMETHING SOLID IN THE TEXT   */                               RECOVER
 3711           DO WHILE (\STOPIT(TOKEN) & 1);                                           RECOVER
 3712           CALL SCAN;                                                               RECOVER
 3713           END;                                                                     RECOVER
 3714           NO_LOOK_AHEAD_DONE = FALSE;                                              RECOVER
 3715           /*   DELETE PARSE STACK UNTIL THE HARD TOKEN IS   */                     RECOVER
 3716           /*   LEGAL AS A TRANSITION SYMBOL                 */                     RECOVER
 3717           DO WHILE CONFLICT (STATE_STACK(SP));                                     RECOVER
 3718           IF SP > 0                                                                RECOVER
 3719                THEN DO;                                                            RECOVER
 3720                     /*   DELETE ONE ITEM FROM THE STACK   */                       RECOVER
 3721                     SP = SP - 1;                                                   RECOVER
 3722                     ANSWER = TRUE;   /*   PARSE TO BE RESUMED IN NEW STATE   */    RECOVER
 3723                     END;                                                           RECOVER
 3724                ELSE DO;   /*   STACK IS EMPTY   */                                 RECOVER
 3725                     /*   TRY TO FIND A LEGAL TOKEN (FOR START STATE)   */          RECOVER
 3726                      CALL SCAN;                                                    RECOVER
 3727                     IF TOKEN = EOFILE                                              RECOVER
 3728                          THEN DO;                                                  RECOVER
 3729                               /*   MUST STOP COMPILING                */           RECOVER
 3730                               /*   RESUME PARSE IN AN ILLEGAL STATE   */           RECOVER
 3731                               ANSWER = TRUE;                                       RECOVER
 3732                               STATE_STACK(SP) = 0;                                 RECOVER
 3733                               RETURN (ANSWER);                                     RECOVER
 3734                               END;                                                 RECOVER
 3735                     END;                                                           RECOVER
 3736           END;                                                                     RECOVER
 3737           /*   FOUND AN ACCEPTABLE TOKEN FROM WHICH TO RESUME THE PARSE   */       RECOVER
 3738           CALL PRINTLINE ('RESUME:' ^^ SUBSTR(POINTER,LENGTH(POINTER)-             RECOVER
 3739              (LINE_LENGTH+CP-TEXT_LIMIT-LB-1)+LENGTH(BCD)),-1);                    RECOVER
 3740           RETURN (ANSWER);                                                         RECOVER
 3741                                                                                    RECOVER
 3742           END RECOVER;                                                             RECOVER

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 114
SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
 
ANSWER          BIT (9)   10604     DATA   3696       5
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 115
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3743                                                                                   *
 3744                                                                                   *
 3745   COMPILATION_LOOP:                                                               *
 3746     PROCEDURE;                                                                    *
 3747                                                                                    COMPILATION_LOOP
 3748           DECLARE OVERFLOW CHARACTER INITIAL (                                     COMPILATION_LOOP
 3749           'STACK OVERFLOW *** COMPILATION ABORTED ***');                           COMPILATION_LOOP
 3750           DECLARE I FIXED, J FIXED, STATE FIXED;                                   COMPILATION_LOOP
 3751           DECLARE END_OF_FILE CHARACTER INITIAL (                                  COMPILATION_LOOP
 3752           'END OF FILE FOUND UNEXPECTEDLY *** COMPILATION ABORTED ***');           COMPILATION_LOOP
 3753                                                                                    COMPILATION_LOOP
 3754           /*   THIS PROC PARSES THE INPUT STRING (BY CALLING THE SCANNER)   */     COMPILATION_LOOP
 3755           /*   AND CALLS THE CODE EMISSION PROC (SYNTHESIZE) WHENEVER A     */     COMPILATION_LOOP
 3756           /*   PRODUCTION CAN BE APPLIED                                    */     COMPILATION_LOOP
 3757                                                                                    COMPILATION_LOOP
 3758           /*   INITIALIZE                                                   */     COMPILATION_LOOP
 3759           COMPILING = TRUE;                                                        COMPILATION_LOOP
 3760           STATE = START_STATE;                                                     COMPILATION_LOOP
 3761           SP = -1;                                                                 COMPILATION_LOOP
 3762           /*   STOP COMPILING IF FINISHED                                   */     COMPILATION_LOOP
 3763   COMP:   DO WHILE (COMPILING);                                                    COMPILATION_LOOP
 3764           /*   FIND WHICH OF THE FOUR KINDS OF STATES WE ARE DEALING WITH:  */     COMPILATION_LOOP
 3765           /*   READ,APPLY PRODUCTION,LOOKAHEAD, OR PUSH STATE               */     COMPILATION_LOOP
 3766           IF STATE <= MAXR#                                                        COMPILATION_LOOP
 3767                THEN DO;   /*   READ STATE   */                                     COMPILATION_LOOP
 3768                     SP = SP+1;   /*   ADD AN ELEMENT TO THE STACK   */             COMPILATION_LOOP
 3769                     IF SP = STACKSIZE                                              COMPILATION_LOOP
 3770                          THEN DO;                                                  COMPILATION_LOOP
 3771                               CALL ERROR (OVERFLOW,2);                             COMPILATION_LOOP
 3772                               RETURN;                                              COMPILATION_LOOP
 3773                               END;                                                 COMPILATION_LOOP
 3774                     STATE_STACK(SP) = STATE;   /*   PUSH PRESENT STATE   */        COMPILATION_LOOP
 3775                     I = INDEX1(STATE);         /*   GET STARTING POINT   */        COMPILATION_LOOP
 3776                     IF NO_LOOK_AHEAD_DONE                                          COMPILATION_LOOP
 3777                          THEN DO;   /*   READ IF NECESSARY   */                    COMPILATION_LOOP
 3778                               CALL SCAN;                                           COMPILATION_LOOP
 3779                               NO_LOOK_AHEAD_DONE = FALSE;                          COMPILATION_LOOP
 3780                               END;                                                 COMPILATION_LOOP
 3781                     /*   COMPARE TOKEN WITH EACH TRANSITION SYMBOL IN    */        COMPILATION_LOOP
 3782                     /*   READ STATE                                      */        COMPILATION_LOOP
 3783                      DO I = I TO I+INDEX2(STATE)-1;                                COMPILATION_LOOP
 3784                     IF READ1(I) = TOKEN                                            COMPILATION_LOOP
 3785                          THEN DO;   /*   FOUND IT   */                             COMPILATION_LOOP
 3786                               VAR(SP) = BCD;                                       COMPILATION_LOOP
 3787                               FIXV(SP) = NUMBER_VALUE;                             COMPILATION_LOOP
 3788                               FIXL(SP) = CARD_COUNT;                               COMPILATION_LOOP
 3789                               PPSAVE(SP) = PP;                                     COMPILATION_LOOP
 3790                               STATE = READ2(I);                                    COMPILATION_LOOP
 3791                               NO_LOOK_AHEAD_DONE = TRUE;                           COMPILATION_LOOP
 3792                               GO TO COMP;                                          COMPILATION_LOOP
 3793                               END;                                                 COMPILATION_LOOP
 3794                     END;                                                           COMPILATION_LOOP
 3795                     /*   FOUND AN ERROR   */                                       COMPILATION_LOOP
 3796                     CALL ERROR ('ILLEGAL SYMBOL PAIR: ' ^^                         COMPILATION_LOOP
 3797                                 VOCAB(STATE_NAME(STATE)) ^^ X1 ^^                  COMPILATION_LOOP
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 116
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3798                                 VOCAB(TOKEN),1);                                   COMPILATION_LOOP
 3799                     CALL STACK_DUMP;    /*  DISPLAY THE STACK   */                 COMPILATION_LOOP
 3800                     /*   TRY TO RECOVER   */                                       COMPILATION_LOOP
 3801                     IF RECOVER                                                     COMPILATION_LOOP
 3802                          THEN DO;                                                  COMPILATION_LOOP
 3803                               STATE = STATE_STACK(SP);   /*   NEW STARTING PT  */  COMPILATION_LOOP
 3804                               IF STATE = 0                                         COMPILATION_LOOP
 3805                                    THEN DO;   /*   UNEXPECTED EOFILE   */          COMPILATION_LOOP
 3806                                         CALL ERROR (END_OF_FILE,2);                COMPILATION_LOOP
 3807                                         RETURN;                                    COMPILATION_LOOP
 3808                                         END;                                       COMPILATION_LOOP
 3809                               END;                                                 COMPILATION_LOOP
 3810                     SP = SP-1;   /*   STACK AT SP CONTAINS JUNK   */               COMPILATION_LOOP
 3811                     END;                                                           COMPILATION_LOOP
 3812                ELSE                                                                COMPILATION_LOOP
 3813           IF STATE > MAXP#                                                         COMPILATION_LOOP
 3814                THEN DO;   /*   APPLY PRODUCTION STATE   */                         COMPILATION_LOOP
 3815                     /*   SP POINTS AT RIGHT END OF PRODUCTION   */                 COMPILATION_LOOP
 3816                     /*   MP POINTS AT LEST END OF PRODUCTION   */                  COMPILATION_LOOP
 3817                     MP = SP-INDEX2(STATE);                                         COMPILATION_LOOP
 3818                     MPP1 = MP+1;                                                   COMPILATION_LOOP
 3819                     CALL SYNTHESIZE (STATE-MAXP#);   /*   APPLY PRODUCTION   */    COMPILATION_LOOP
 3820                     SP = MP;   /*   RESET STACK POINTER   */                       COMPILATION_LOOP
 3821                     I = INDEX1(STATE);                                             COMPILATION_LOOP
 3822                     /*   COMPARE TOP OF STATE STACK WITH TABLES   */               COMPILATION_LOOP
 3823                     J = STATE_STACK(SP);                                           COMPILATION_LOOP
 3824                     DO WHILE APPLY1(I) \= 0;                                       COMPILATION_LOOP
 3825                     IF J = APPLY1(I) THEN GO TO TOP_MATCH;                         COMPILATION_LOOP
 3826                     I = I+1;                                                       COMPILATION_LOOP
 3827                     END;                                                           COMPILATION_LOOP
 3828                     /*   HAS THE PROGRAM GOAL BEEN REACHED   */                    COMPILATION_LOOP
 3829          TOP_MATCH: IF APPLY2(I) =0                                                COMPILATION_LOOP
 3830                          THEN DO;   /*   YES IT HAS   */                           COMPILATION_LOOP
 3831                               COMPILING = FALSE;                                   COMPILATION_LOOP
 3832                               RETURN;                                              COMPILATION_LOOP
 3833                               END;                                                 COMPILATION_LOOP
 3834                     STATE = APPLY2(I);   /*   PICK UP THE NEXT STATE   */          COMPILATION_LOOP
 3835                     END;                                                           COMPILATION_LOOP
 3836                ELSE                                                                COMPILATION_LOOP
 3837           IF STATE <= MAXL#                                                        COMPILATION_LOOP
 3838                THEN DO;   /*   LOOKAHEAD STATE   */                                COMPILATION_LOOP
 3839                      I = INDEX1(STATE);   /*   INDEX INTO THE TABLE   */           COMPILATION_LOOP
 3840                     IF NO_LOOK_AHEAD_DONE                                          COMPILATION_LOOP
 3841                          THEN DO;   /*   GET A TOKEN   */                          COMPILATION_LOOP
 3842                               CALL SCAN;                                           COMPILATION_LOOP
 3843                               NO_LOOK_AHEAD_DONE = FALSE;                          COMPILATION_LOOP
 3844                               END;                                                 COMPILATION_LOOP
 3845                     /*   CHECK TOKEN AGAINST LEGAL LOOKAHEAD TRANSITION SYMBOLS*/  COMPILATION_LOOP
 3846                     DO WHILE LOOK1(I) \= 0;                                        COMPILATION_LOOP
 3847                     IF LOOK1(I) = TOKEN                                            COMPILATION_LOOP
 3848                          THEN GO TO LOOK_MATCH;   /*   FOUND ONE   */              COMPILATION_LOOP
 3849                     I = I+1;                                                       COMPILATION_LOOP
 3850                     END;                                                           COMPILATION_LOOP
 3851         LOOK_MATCH: STATE = LOOK2(I);                                              COMPILATION_LOOP
 3852                     END;                                                           COMPILATION_LOOP
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 117
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3853                ELSE DO;   /*   PUSH STATE   */                                     COMPILATION_LOOP
 3854                     SP = SP+1;   /*   PUSH A NON-TERMINAL ONTO THE STACK   */      COMPILATION_LOOP
 3855                     IF SP = STACKSIZE                                              COMPILATION_LOOP
 3856                          THEN DO;                                                  COMPILATION_LOOP
 3857                               CALL ERROR (OVERFLOW,2);                             COMPILATION_LOOP
 3858                               RETURN;                                              COMPILATION_LOOP
 3859                               END;                                                 COMPILATION_LOOP
 3860                     /*   PUSH A STATE # INTO THE STATE_STACK   */                  COMPILATION_LOOP
 3861                     STATE_STACK(SP) = INDEX2(STATE);                               COMPILATION_LOOP
 3862                     /*   GET NEXT STATE                        */                  COMPILATION_LOOP
 3863                     STATE = INDEX1(STATE);                                         COMPILATION_LOOP
 3864                     END;                                                           COMPILATION_LOOP
 3865           END;   /*   OF COMPILE LOOP   */                                         COMPILATION_LOOP
 3866                                                                                    COMPILATION_LOOP
 3867           END COMPILATION_LOOP;                                                    COMPILATION_LOOP

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
COMP            LABEL     11608  PROGRAM   3763       1
END_OF_FILE     CHARACTER   956   STRING   3751       1
I               FIXED     10617     DATA   3750      19
J               FIXED     10618     DATA   3750       2
LOOK_MATCH      LABEL     11846  PROGRAM   3848       1
OVERFLOW        CHARACTER   955   STRING   3748       2
STATE           FIXED     10619     DATA   3750      20
TOP_MATCH       LABEL     11793  PROGRAM   3825       1
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 118
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3868                                                                                   *
 3869  PRINT_TIME:                                                                      *
 3870     PROCEDURE (TEXT, TIME);                                                       *
 3871     /* PRINT TEXT FOLLOWED BY TIME, WHICH IS IN MILLISECONDS */                    PRINT_TIME
 3872        DECLARE TEXT CHARACTER, TIME FIXED;                                         PRINT_TIME
 3873        K = TIME;                                                                   PRINT_TIME
 3874        I = K / 60000;                                                              PRINT_TIME
 3875        J = K MOD 60000 / 1000;                                                     PRINT_TIME
 3876        K = K MOD 1000;                                                             PRINT_TIME
 3877        CALL PRINTLINE (TEXT ^^ I ^^ ':' ^^ J ^^ '.' ^^ K,-1);                      PRINT_TIME
 3878     END PRINT_TIME;                                                                PRINT_TIME

SYMBOL TABLE DUMP

SYMBOL          TYPE       LOC   SEGMENT DEFINED REF COUNT
TEXT            CHARACTER   958   STRING   3870       1
TIME            FIXED     10642     DATA   3870       1
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 119
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3879                                                                                   *
 3880     /*   E X E C U T I O N   S T A R T S   H E R E                          */    *
 3881                                                                                   *
 3882     DECLARE TIME_START FIXED,                                                     *
 3883             TIME_INIT FIXED,                                                      *
 3884             TIME_COMPILE FIXED,                                                   *
 3885             TIME_FINISH FIXED;                                                    *
 3886                                                                                   *
 3887     TIME_START = RUNTIME;           /* GET TIME(CPU) STARTED*/                    *
 3888     CALL INITIALIZE;                                                              *
 3889     TIME_INIT = RUNTIME;     /* TIME TO INITIALIZE */                             *
 3890     CALL COMPILATION_LOOP;                                                        *
 3891     TIME_COMPILE = RUNTIME;     /* TIME TO COMPILE THE PROGRAM*/                  *
 3892     CONTROL(BYTE('E')) = FALSE;                                                   *
 3893     CONTROL(BYTE('B')) = FALSE;                                                   *
 3894     SUBTITLE = '';                                                                *
 3895     IF CONTROL(BYTE('S')) THEN CALL SYMBOLDUMP;                                   *
 3896     ELSE EJECT_PAGE;                                                              *
 3897     /* NOW ENTER THE VALUE OF NDESCRIPT                                        */ *
 3898     CALL EMITLABEL (NDESC,5);            /* GENERATE LABEL */                     *
 3899     IF CONTROL(BYTE('A')) THEN                                                    *
 3900        OUTPUT(DATAFILE) = '$' ^^ NDESC ^^ ':'; /* LABEL FOR ASSEMBLER */          *
 3901     CALL EMITDATAWORD (DSP-1);           /* PUT DOWN NUMBER OF DESC'S */          *
 3902     IF CONTROL(BYTE('A')) THEN                                                    *
 3903        OUTPUT(DATAFILE) = 'S=.;';           /* START STRING SEGMENT */            *
 3904     /* ADD THE DESCRIPTORS TO THE DATA SEGMENT                                 */ *
 3905     DO I = 0 TO DSP-1;                                                            *
 3906        IF CONTROL(BYTE('A')) THEN                                                 *
 3907           OUTPUT(DATAFILE)='       BYTE (9)'^^DESCL(I)^^ '(27)' ^^DESCA(I)^^ ';'; *
 3908        CALL OUTPUT_DATAWORD (SHL(DESCL(I),27) + DESCA(I), DP);                    *
 3909        CALL EMITLABEL (I,3);                                                      *
 3910        DP = DP + 1;                                                               *
 3911     END;                                                                          *
 3912     /* FINAL CODE FOR SYSTEM INTERFACE                                         */ *
 3913     CALL EMITINST (4,0,0,0,0,0);                                                  *
 3914     CALL FLUSH_DATA_BUFFER;                                                       *
 3915     CALL FLUSH_LABELS;                                                            *
 3916     DO WHILE CODE_TAIL \= CODE_HEAD;                                              *
 3917        CALL OUTPUT_CODEWORD;                                                      *
 3918        END;                                                                       *
 3919     CALL OUTPUT_CODEWORD;                                                         *
 3920     CALL FLUSH_CODE_BUFFER;                                                       *
 3921     IF CONTROL(BYTE('A')) THEN                                                    *
 3922        DO;                                                                        *
 3923           OUTPUT (CODEFILE) = '       END $0;';                                   *
 3924           /* COPY CODE FILE TO END OF DATA FILE */                                *
 3925           CODESTRING = INPUT(CODEFILE);                                           *
 3926           DO WHILE LENGTH(CODESTRING) > 0;                                        *
 3927              OUTPUT(DATAFILE) = CODESTRING;                                       *
 3928              CODESTRING = INPUT(CODEFILE);                                        *
 3929           END;                                                                    *
 3930           OUTPUT (CODEFILE) = ' ';                                                *
 3931        END;                                                                       *
 3932                                                                                   *
 3933     FILE(RELFILE) = SYMB_TYPE + 2;      /* GENERATE EXTERNAL REFS */              *
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 120
 LINE    SOURCE STATEMENT                                                               PROCEDURE AND COMPILER INFORMATION
 
 3934     FILE(RELFILE) = "(3)040000000000";                                            * C40 = 524288
 3935     FILE(RELFILE) = "(3)600000000000" + RADIX50 ('XPLLIB');                       * C41 = 4294967296
 3936     FILE(RELFILE) = LIBRARY;                                                      * C42 = -17179869184
 3937     FILE(RELFILE) = START_TYPE + 1;                                               *
 3938     FILE(RELFILE) = "(3)200000000000";                                            * C43 = 1835008
 3939     FILE(RELFILE) = "(3)400000" + STARTLOC;                                       *
 3940     FILE(RELFILE) = END_TYPE + 2;                                                 *
 3941     FILE(RELFILE) = "(3)240000000000";                                            *
 3942     FILE(RELFILE) = "(3)400000" + PP;                                             * C44 = 21474836480
 3943     FILE(RELFILE) = DP;                                                           *
 3944                                                                                   *
 3945     TIME_FINISH = RUNTIME;   /* TIME TO DO ALL BUT FINAL STATS */                 *
 3946     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);*
 3947     CALL PRINTLINE (CARD_COUNT ^^ ' LINES CONTAINING ' ^^ STATEMENT_COUNT ^^      * C45 = 5368709120
 3948        ' STATEMENTS WERE COMPILED.',0);                                           *
 3949     IF ERROR_COUNT = 0 THEN CALL PRINTLINE ('NO ERRORS WERE DETECTED.',-1);       *
 3950     ELSE IF ERROR_COUNT > 1 THEN                                                  *
 3951        CALL PRINTLINE (ERROR_COUNT ^^ ' ERRORS (' ^^ SEVERE_ERRORS                *
 3952        ^^ ' SEVERE) WERE DETECTED.',-1);                                          *
 3953     ELSE IF SEVERE_ERRORS = 1 THEN CALL PRINTLINE ('ONE SEVERE ERROR WAS DETECTED.',-1);*
 3954        ELSE CALL PRINTLINE ('ONE ERROR WAS DETECTED.',-1);                        *
 3955      IF PREVIOUS_ERROR > 0 THEN                                                   *
 3956         CALL PRINTLINE ('LAST ERROR WAS ON LINE ' ^^ PREVIOUS_ERROR ,-1);         *
 3957     CALL PRINTLINE (PP ^^ ' WORDS OF PROGRAM, ' ^^ DP-DSP ^^ ' WORDS OF DATA, AND ' ^^*
 3958        DSP ^^ ' WORDS OF DESCRIPTORS.  TOTAL CORE REQUIREMENT ' ^^ PP+DP ^^       *
 3959        ' WORDS.',-1);                                                             *
 3960                                                                                   *
 3961  /* NOW COMPUTE TIMES AND PRINT THEM */                                           *
 3962     TIME_INIT = TIME_INIT - TIME_START;                                           *
 3963     TIME_COMPILE = TIME_COMPILE - TIME_START;                                     *
 3964     TIME_FINISH = TIME_FINISH - TIME_START;                                       *
 3965                                                                                   *
 3966     CALL PRINT_TIME ('TOTAL TIME IN COMPILER    = ',TIME_FINISH);                 *
 3967     CALL PRINT_TIME ('INITIALIZATION TIME       = ',TIME_INIT);                   *
 3968     CALL PRINT_TIME ('ACTUAL COMPILATION TIME   = ',TIME_COMPILE - TIME_INIT);    *
 3969     CALL PRINT_TIME ('POST-COMPILATION CLEAN-UP = ',TIME_FINISH-TIME_COMPILE);    *
 3970                                                                                   *
 3971     IF CONTROL(BYTE('D')) THEN CALL DUMPIT;                                       *
 3972  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      1931     DATA    279      10
ACC                   FIXED      1937     DATA    284      43
ADD                   FIXED      6261     DATA    404       9
ADDI                  FIXED      6262     DATA    405       4
ADDM                  FIXED      6263     DATA    406       2
ADDRMASK              FIXED      1935     DATA    281       5
ADR                   FIXED      2147     DATA    351      16
ALPHABET              CHARACTER   100   STRING    224       1
AND                   FIXED      6264     DATA    407       8
ANDI                  FIXED      6265     DATA    408       3
AOSA                  FIXED      6266     DATA    409       1
APPLY1                BIT (9)     932     DATA    126       2
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 121
SYMBOL                TYPE       LOC   SEGMENT DEFINED REF COUNT
 
APPLY2                BIT (9)    1062     DATA    155       2
ARITHEMIT             PROCEDURE  5031  PROGRAM   2020       9
  PARAMETER  1        FIXED      9696     DATA   2020      21
  PARAMETER  2        FIXED      9697     DATA   2020      10
B                     FIXED      1932     DATA    279       9
BACKMSG               CHARACTER   751   STRING    541       4
BACKUP                PROCEDURE  3871  PROGRAM   1692       3
BALANCE               CHARACTER   104   STRING    240       8
BASE                  FIXED      1699     DATA    234       3
BCD                   CHARACTER    97   STRING    190      27
BCHAR                 PROCEDURE   971  PROGRAM    725       2
BLT                   FIXED      6267     DATA    410       2
BOOLBRANCH            PROCEDURE  5223  PROGRAM   2066       2
  PARAMETER  1        FIXED      9708     DATA   2066       7
  PARAMETER  2        FIXED      9709     DATA   2066       4
BUFFER                CHARACTER   101   STRING    225      15
BUILD_BCD             PROCEDURE   561  PROGRAM    618       2
  PARAMETER  1        BIT (9)    9157     DATA    619       3
BYTEPTRS              FIXED      1914     DATA    262       6
C                     FIXED      1933     DATA    279       3
CALLI                 FIXED      6268     DATA    411       1
CALLSUB               PROCEDURE  3818  PROGRAM   1674       1
  PARAMETER  1        FIXED      9612     DATA   1674       2
  PARAMETER  2        FIXED      9613     DATA   1674       2
  PARAMETER  3        FIXED      9614     DATA   1674       4
CALLTYPE              FIXED      1920     DATA    268       3
CAM                   FIXED      6269     DATA    412       5
CAMGE                 FIXED      6270     DATA    413       1
CAML                  FIXED      6271     DATA    414       1
CAMLE                 FIXED      6272     DATA    415       1
CAMN                  FIXED      6273     DATA    416       2
CARD_COUNT            FIXED      1691     DATA    226      13
CASEP                 FIXED      9103     DATA    537      12
CASESTACK             FIXED      8927     DATA    536       3
CATENTRY              FIXED      1917     DATA    265       2
CH                    FIXED      1384     DATA    190       7
CHAR                  PROCEDURE   945  PROGRAM    710       7
CHARTYPE              BIT (9)    1427     DATA    211      11
CHAR_TEMP             CHARACTER   260   STRING    466       7
CHECK_STRING_OVERFLOW PROCEDURE  3805  PROGRAM   1669       3
CLEARARS              PROCEDURE  3323  PROGRAM   1474       6
CMPRHI                FIXED      6274     DATA    417       2
CNT                   FIXED      8720     DATA    528      36
CODE                  CHARACTER   232   STRING    307       8
CODEMSG               CHARACTER   749   STRING    539       4
CODESTRING            CHARACTER   236   STRING    313       4
CODE_BUFFER           FIXED      1967     DATA    318       7
CODE_FULL             BIT (9)    1962     DATA    308       7
CODE_HEAD             FIXED      1963     DATA    309      26
CODE_PP               FIXED      2028     DATA    322       4
CODE_RBITS            FIXED      2032     DATA    323       4
CODE_REL              FIXED      2024     DATA    321       4
CODE_TAIL             FIXED      1964     DATA    310      13
COMPACTIFY            PROCEDURE   128  PROGRAM      0       1
COMPARESWAP           FIXED      6312     DATA    455       1
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 122
SYMBOL                TYPE       LOC   SEGMENT DEFINED REF COUNT
 
COMPILATION_LOOP      PROCEDURE 11602  PROGRAM   3745       1
COMPILING             FIXED      1909     DATA    255       6
CONCATENATE           FIXED      1707     DATA    239       2
CONFLICT              PROCEDURE 11477  PROGRAM   3674       1
  PARAMETER  1        FIXED     10602     DATA   3674       3
CONTROL               BIT (9)    1555     DATA    211      61
COREBYTELOC           FIXED      1923     DATA    271       3
COUNT_ARITH           FIXED      1956     DATA    290       3
COUNT_COMPACT         FIXED        33     DATA      0       3
COUNT_FORCE           FIXED      1955     DATA    289       3
COUNT_INST            FIXED      1954     DATA    288       3
COUNT_SCAN            FIXED      1953     DATA    287       3
COUNT_STORE           FIXED      1957     DATA    291       3
CP                    FIXED      1385     DATA    190      62
CURRENT_PROCEDURE     CHARACTER   103   STRING    229       8
DATACARD              CHARACTER   231   STRING    305      13
DATAMSG               CHARACTER   750   STRING    540       5
DATA_BUFFER           FIXED      1986     DATA    319       6
DCTR                  FIXED      2039     DATA    328      15
DEBLANK               PROCEDURE   958  PROGRAM    718       3
DELETE_MOVE           PROCEDURE  3906  PROGRAM   1702       8
  PARAMETER  1        FIXED      9615     DATA   1703      12
  PARAMETER  2        FIXED      9616     DATA   1703      11
  PARAMETER  3        FIXED      9617     DATA   1703      11
  PARAMETER  4        FIXED      9618     DATA   1703      10
  PARAMETER  5        FIXED      9619     DATA   1703      11
  PARAMETER  6        FIXED      9620     DATA   1703      10
  PARAMETER  7        FIXED      9621     DATA   1703      10
DESCA                 FIXED      2155     DATA    356       3
DESCL                 FIXED      3156     DATA    357       3
DESCREF               FIXED      4157     DATA    358       5
DIVIDE                FIXED      1703     DATA    237       2
DIVIDE_CODE           PROCEDURE  5523  PROGRAM   2149       2
  PARAMETER  1        FIXED      9721     DATA   2149       4
DLOC                  FIXED      2040     DATA    329       5
DP                    FIXED      1965     DATA    311      60
DPB                   FIXED      6275     DATA    418       3
DPOFFSET              FIXED      1966     DATA    312      21
DPTR                  FIXED      2038     DATA    327      12
DSP                   FIXED      5158     DATA    359      24
DUMPIT                PROCEDURE  6237  PROGRAM   2334       1
EMITBLOCK             PROCEDURE  2131  PROGRAM   1116       3
  PARAMETER  1        FIXED      9262     DATA   1117       5
EMITBYTE              PROCEDURE  2272  PROGRAM   1142       4
  PARAMETER  1        FIXED      9271     DATA   1143       7
EMITCODEWORD          PROCEDURE  2423  PROGRAM   1172       1
  PARAMETER  1        CHARACTER   793   STRING   1172       2
  PARAMETER  2        FIXED      9487     DATA   1172       2
  PARAMETER  3        FIXED      9488     DATA   1172       2
EMITCONSTANT          PROCEDURE  2328  PROGRAM   1153      10
  PARAMETER  1        FIXED      9276     DATA   1154      15
EMITDATAWORD          PROCEDURE  2197  PROGRAM   1128      19
  PARAMETER  1        FIXED      9269     DATA   1129      21
EMITDESC              PROCEDURE  2949  PROGRAM   1346       7
  PARAMETER  1        FIXED      9523     DATA   1346       9
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 123
SYMBOL                TYPE       LOC   SEGMENT DEFINED REF COUNT
 
  PARAMETER  2        FIXED      9524     DATA   1346       9
EMITINST              PROCEDURE  2737  PROGRAM   1270     219
  PARAMETER  1        FIXED      9505     DATA   1270     224
  PARAMETER  2        FIXED      9506     DATA   1270     221
  PARAMETER  3        FIXED      9507     DATA   1270     221
  PARAMETER  4        FIXED      9508     DATA   1270     226
  PARAMETER  5        FIXED      9509     DATA   1270     222
  PARAMETER  6        FIXED      9510     DATA   1270     222
EMITLABEL             PROCEDURE  2520  PROGRAM   1199      13
  PARAMETER  1        FIXED      9490     DATA   1199      19
  PARAMETER  2        FIXED      9491     DATA   1199      18
EMIT_INLINE           PROCEDURE  3968  PROGRAM   1733       2
  PARAMETER  1        BIT (9)    9622     DATA   1734       3
ENTER                 PROCEDURE  3045  PROGRAM   1377       8
  PARAMETER  1        CHARACTER   817   STRING   1377      13
  PARAMETER  2        FIXED      9535     DATA   1377      11
  PARAMETER  3        FIXED      9536     DATA   1377      10
  PARAMETER  4        FIXED      9537     DATA   1377      10
EOFILE                FIXED      1704     DATA    237       3
ERROR                 PROCEDURE   431  PROGRAM    585      56
  PARAMETER  1        CHARACTER   761   STRING    586      60
  PARAMETER  2        FIXED      9131     DATA    586      57
ERROR_COUNT           FIXED      1692     DATA    226       5
EXPANSION_COUNT       FIXED      1896     DATA    245       4
FAILSOFT              FIXED      1908     DATA    255       3
FALSELOC              FIXED      1913     DATA    261       1
FILEMSG               CHARACTER   752   STRING    542       2
FINDAR                PROCEDURE  3334  PROGRAM   1481      12
FINDLABEL             PROCEDURE  3012  PROGRAM   1361      11
FIXL                  FIXED      8873     DATA    532      78
FIXV                  FIXED      8771     DATA    530      58
FLUSH_CODE_BUFFER     PROCEDURE  1758  PROGRAM    983       3
FLUSH_DATACARD        PROCEDURE  2064  PROGRAM   1104       6
FLUSH_DATA_BUFFER     PROCEDURE  1722  PROGRAM    966       3
FLUSH_LABELS          PROCEDURE  1967  PROGRAM   1059       2
FORCEACCUMULATOR      PROCEDURE  4161  PROGRAM   1811      33
  PARAMETER  1        FIXED      9646     DATA   1811      67
FORCEADDRESS          PROCEDURE  3404  PROGRAM   1514       1
  PARAMETER  1        FIXED      9578     DATA   1515       2
FORCEDESCRIPTOR       PROCEDURE  4626  PROGRAM   1921      11
  PARAMETER  1        FIXED      9675     DATA   1922      21
FOR_COUNT             FIXED      2144     DATA    335      13
FOR_LABEL             FIXED      2093     DATA    334       6
FOR_REF               FIXED      2042     DATA    333       7
FREEBASE              FIXED        32     DATA      0       2
FREELIMIT             FIXED        11     DATA      0       2
GENSTORE              PROCEDURE  4693  PROGRAM   1939       3
  PARAMETER  1        FIXED      9676     DATA   1939      20
  PARAMETER  2        FIXED      9677     DATA   1939      23
GET_CARD              PROCEDURE   590  PROGRAM    625       5
HASH                  FIXED      7876     DATA    516       9
HASHER                PROCEDURE  3019  PROGRAM   1369       5
  PARAMETER  1        CHARACTER   816   STRING   1370       8
HLL                   FIXED      6276     DATA    419       5
HLRZ                  FIXED      6277     DATA    420       1
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 124
SYMBOL                TYPE       LOC   SEGMENT DEFINED REF COUNT
 
HRLI                  FIXED      6278     DATA    421       2
HRLM                  FIXED      6279     DATA    422       1
HRREI                 FIXED      6280     DATA    423       1
I                     FIXED      6329     DATA    468     152
IDCOMPARES            FIXED      6323     DATA    459       5
IDENT                 FIXED      1700     DATA    237       3
IDIV                  FIXED      6281     DATA    424       1
IDIVI                 FIXED      6282     DATA    425       1
IDPB                  FIXED      6283     DATA    426       3
IDX                   FIXED      8553     DATA    518       7
ID_LOOKUP             PROCEDURE  3213  PROGRAM   1425       3
  PARAMETER  1        FIXED      9558     DATA   1426      12
ILDB                  FIXED      6284     DATA    427       3
IMUL                  FIXED      6285     DATA    428       1
INDEX1                FIXED      1089     DATA    162       5
INDEX2                BIT (9)    1324     DATA    175       4
INFO                  CHARACTER   259   STRING    465       8
INITIALIZE            PROCEDURE  6560  PROGRAM   2388       1
INSTRUCT              FIXED      5749     DATA    402       8
INX                   FIXED      8669     DATA    527      53
IOR                   FIXED      6286     DATA    429       4
ITYPE                 FIXED      2148     DATA    352       4
I_FORMAT              PROCEDURE   351  PROGRAM    549       6
  PARAMETER  1        FIXED      9119     DATA    550       7
  PARAMETER  2        FIXED      9120     DATA    550       8
I_STRING              CHARACTER   261   STRING    467      12
J                     FIXED      6330     DATA    468      55
JBASE                 FIXED      1698     DATA    234      10
JRST                  FIXED      6287     DATA    430      12
JUMP                  FIXED      6288     DATA    431       2
JUMPE                 FIXED      6289     DATA    432       2
JUMPGE                FIXED      6290     DATA    433       1
JUMPN                 FIXED      6291     DATA    434       2
K                     FIXED      6331     DATA    468      22
L                     FIXED      6332     DATA    468       2
LABELSET              FIXED      1705     DATA    238       1
LABEL_BUFFER          FIXED      2005     DATA    320       5
LABEL_COUNT           FIXED      2041     DATA    330      10
LABEL_GEN             CHARACTER   227   STRING    283       7
LABEL_SINK            FIXED      1936     DATA    282       3
LB                    FIXED      1708     DATA    240      12
LDB                   FIXED      6292     DATA    435       2
LENGTHMASK            FIXED      1934     DATA    280       4
LIBRARY               FIXED      1927     DATA    275       2
LIBRARY_CALL          PROCEDURE  4072  PROGRAM   1766       5
  PARAMETER  1        FIXED      9637     DATA   1766       8
  PARAMETER  2        FIXED      9638     DATA   1766       7
  PARAMETER  3        FIXED      9639     DATA   1766       9
  PARAMETER  4        FIXED      9640     DATA   1766       9
LIBRARY_SAVE          FIXED      1928     DATA    276       1
LIMITWORD             FIXED      1924     DATA    272       3
LINE_COUNT            FIXED      1959     DATA    296      10
LINE_LENGTH           FIXED      1695     DATA    228       3
LOOK1                 BIT (9)     914     DATA    120       2
LOOK2                 BIT (9)    1044     DATA    150       1
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 125
SYMBOL                TYPE       LOC   SEGMENT DEFINED REF COUNT
 
LOWUP                 CHARACTER PROCEDURE  1039  PROGRAM    745       1
  PARAMETER  1        CHARACTER   772   STRING    746       5
LSH                   FIXED      6293     DATA    436      14
LSHC                  FIXED      6294     DATA    437       7
MACRO_COUNT           FIXED      1773     DATA    243       6
MACRO_DECLARE         FIXED      1834     DATA    243       4
MACRO_INDEX           BIT (9)    1709     DATA    242       5
MACRO_NAME            CHARACTER   105   STRING    241      11
MACRO_TEXT            CHARACTER   166   STRING    242       5
MAXNDECSY             FIXED      6335     DATA    469       3
MONITOR_CALL          PROCEDURE  4129  PROGRAM   1796       3
  PARAMETER  1        FIXED      9642     DATA   1796       4
  PARAMETER  2        FIXED      9644     DATA   1796       5
  PARAMETER  3        FIXED      9643     DATA   1796       4
MOVE                  FIXED      6295     DATA    438      34
MOVEI                 FIXED      6296     DATA    439      21
MOVEM                 FIXED      6297     DATA    440      19
MOVER                 FIXED      1921     DATA    269       3
MOVESTACKS            PROCEDURE  3370  PROGRAM   1501       9
  PARAMETER  1        FIXED      9576     DATA   1502      17
  PARAMETER  2        FIXED      9577     DATA   1502      17
MOVM                  FIXED      6298     DATA    441       1
MOVN                  FIXED      6299     DATA    442       2
MP                    FIXED      8925     DATA    533     252
MPP1                  FIXED      8926     DATA    533     112
NDECSY                FIXED      6334     DATA    469      38
NDESC                 FIXED      1926     DATA    274       4
NEWDP                 FIXED      2149     DATA    353      10
NEWDPOFFSET           FIXED      2151     DATA    353       6
NEWDSP                FIXED      2150     DATA    353       4
NMBRENTRY             FIXED      1918     DATA    266       2
NOT_LETTER_OR_DIGIT   BIT (9)    1619     DATA    212       5
NO_LOOK_AHEAD_DONE    BIT (9)    1910     DATA    258       7
NUMBER                FIXED      1702     DATA    237       3
NUMBER_VALUE          FIXED      1697     DATA    234       8
OLDDP                 FIXED      2152     DATA    354       4
OLDDPOFFSET           FIXED      2154     DATA    354       4
OLDDSP                FIXED      2153     DATA    354       2
OPNAME                CHARACTER   238   STRING    361       2
ORSYMBOL              FIXED      1706     DATA    239       2
OUTPUTLABEL           PROCEDURE  2498  PROGRAM   1191       2
  PARAMETER  1        FIXED      9489     DATA   1192       3
OUTPUT_CODEWORD       PROCEDURE  1884  PROGRAM   1030       5
OUTPUT_DATAWORD       PROCEDURE  2004  PROGRAM   1079       3
  PARAMETER  1        FIXED      9258     DATA   1080       5
  PARAMETER  2        FIXED      9259     DATA   1080       6
PAGE_COUNT            FIXED      1958     DATA    295       4
PARCT                 FIXED      6336     DATA    469      18
POINTER               CHARACTER    99   STRING    198       4
POP                   FIXED      6300     DATA    443       2
POPJ                  FIXED      6301     DATA    444      13
PP                    FIXED      1961     DATA    306      42
PPSAVE                FIXED      8822     DATA    531      12
PREVIOUS_ERROR        FIXED      1694     DATA    227       5
PRINTLINE             PROCEDURE   374  PROGRAM    560      50
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 126
SYMBOL                TYPE       LOC   SEGMENT DEFINED REF COUNT
 
  PARAMETER  1        CHARACTER   753   STRING    561      52
  PARAMETER  2        FIXED      9122     DATA    561      54
PRINT_TIME            PROCEDURE 11884  PROGRAM   3869       4
  PARAMETER  1        CHARACTER   958   STRING   3870       5
  PARAMETER  2        FIXED     10642     DATA   3870       5
PROCEDURE_DEPTH       FIXED      1696     DATA    230       6
PROCMARK              FIXED      6333     DATA    469      21
PROC_START            PROCEDURE  3597  PROGRAM   1581       4
PSBITS                FIXED      1915     DATA    263       6
PTR                   FIXED      8132     DATA    517       9
PUSH                  FIXED      6302     DATA    445       2
PUSHJ                 FIXED      6303     DATA    446      10
PWORD                 FIXED      2145     DATA    336       4
RADIX50               PROCEDURE  1794  PROGRAM   1002       2
  PARAMETER  1        CHARACTER   782   STRING   1003       6
RCTR                  FIXED      2037     DATA    326      15
READ1                 BIT (9)     829     DATA    105       2
READ2                 BIT (9)     959     DATA    132       1
READING               BIT (9)    1960     DATA    304       4
RECOVER               PROCEDURE 11510  PROGRAM   3694       1
REFCHECK              PROCEDURE  2678  PROGRAM   1240       3
  PARAMETER  1        FIXED      9496     DATA   1241      12
REG                   FIXED      8618     DATA    526     123
RESERVED_LIMIT        FIXED      1426     DATA    201       3
RESTORE_ACS           PROCEDURE  3568  PROGRAM   1571       4
  PARAMETER  1        FIXED      9601     DATA   1572       6
RETURNED_TYPE         FIXED      6337     DATA    470      13
ROT                   FIXED      6304     DATA    447       4
RPTR                  FIXED      2036     DATA    325      13
S                     CHARACTER   237   STRING    360      21
SAVE_ACS              PROCEDURE  3543  PROGRAM   1562       4
  PARAMETER  1        FIXED      9598     DATA   1563       5
SCAN                  PROCEDURE  1090  PROGRAM    758       6
SETCA                 FIXED      6305     DATA    448       1
SETINIT               PROCEDURE  3431  PROGRAM   1525       2
SETLIMIT              PROCEDURE  5366  PROGRAM   2103       2
SETZM                 FIXED      6306     DATA    449       2
SEVERE_ERRORS         FIXED      1693     DATA    227       5
SHIFT_CODE            PROCEDURE  5635  PROGRAM   2191       2
  PARAMETER  1        FIXED      9733     DATA   2192       4
SHOULDCOMMUTE         PROCEDURE  4975  PROGRAM   2013       2
SKIP                  FIXED      6307     DATA    450       1
SKIPE                 FIXED      6308     DATA    451       1
SOJG                  FIXED      6309     DATA    452       3
SOURCE                CHARACTER   230   STRING    299      18
SP                    FIXED      8924     DATA    533      97
STACK_DUMP            PROCEDURE  8952  PROGRAM   2798       2
STARTLOC              FIXED      2146     DATA    337       2
STATEMENT_COUNT       FIXED      6322     DATA    458       4
STATE_NAME            BIT (9)     804     DATA     93       2
STATE_STACK           BIT (9)    8554     DATA    524       7
STEPK                 FIXED      1930     DATA    278       3
STILLCOND             FIXED      6320     DATA    456       5
STILLINZERO           FIXED      6321     DATA    457      11
STOPIT                BIT (9)    1897     DATA    255       7
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 127
SYMBOL                TYPE       LOC   SEGMENT DEFINED REF COUNT
 
STR                   FIXED      1929     DATA    277       4
STRCOMP               FIXED      1919     DATA    267       2
STRING                FIXED      1701     DATA    237       5
STRINGCOMPARE         PROCEDURE  5709  PROGRAM   2216       4
STRING_CHECK          FIXED      1916     DATA    264       2
STRING_RECOVER        FIXED      1922     DATA    270       5
STUFF_PARAMETER       PROCEDURE  5403  PROGRAM   2118       2
SUB                   FIXED      6310     DATA    453       5
SUBI                  FIXED      6311     DATA    454       6
SUBTITLE              CHARACTER   229   STRING    294      11
SYMBOLDUMP            PROCEDURE  5802  PROGRAM   2237       2
SYNTHESIZE            PROCEDURE  9013  PROGRAM   2817       1
  PARAMETER  1        FIXED     10492     DATA   2818       2
SYT                   CHARACTER   277   STRING    494      28
SYTCARD               FIXED      7455     DATA    514       4
SYTCO                 FIXED      7034     DATA    513      14
SYTLOC                FIXED      6507     DATA    508      26
SYTSEG                BIT (9)    6928     DATA    511      18
SYTYPE                BIT (9)    6401     DATA    501      34
TARGET_REGISTER       FIXED      1911     DATA    259      11
TDECLARE              PROCEDURE  3643  PROGRAM   1590       2
  PARAMETER  1        FIXED      9605     DATA   1591       3
TEXT                  CHARACTER   102   STRING    225      45
TEXT_LIMIT            FIXED      1690     DATA    225      18
TIME_COMPILE          FIXED     10646     DATA   3884       5
TIME_FINISH           FIXED     10647     DATA   3885       5
TIME_INIT             FIXED     10645     DATA   3883       5
TIME_START            FIXED     10644     DATA   3882       4
TITLE                 CHARACTER   228   STRING    293       5
TOKEN                 FIXED      1383     DATA    190      18
TOP_MACRO             FIXED      1895     DATA    244      10
TRUELOC               FIXED      1912     DATA    260       3
TSA                   FIXED      1925     DATA    273      12
TX                    BIT (9)    1491     DATA    211       2
TYPE                  FIXED      8567     DATA    525      80
TYPENAME              CHARACTER   262   STRING    484       2
UNDECLARED_ID         PROCEDURE  3280  PROGRAM   1455       2
  PARAMETER  1        FIXED      9561     DATA   1456       9
VAR                   CHARACTER   698   STRING    529      27
VOCAB                 CHARACTER     5   STRING     71      10
X1                    CHARACTER   254   STRING    460      18
X2                    CHARACTER   255   STRING    461       4
X3                    CHARACTER   256   STRING    462       2
X4                    CHARACTER   257   STRING    463       5
X7                    CHARACTER   258   STRING    464       4
X70                   CHARACTER    98   STRING    196      21
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 128

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

3972 LINES CONTAINING 2116 STATEMENTS WERE COMPILED.
NO ERRORS WERE DETECTED.
12367 WORDS OF PROGRAM, 10774 WORDS OF DATA, AND 987 WORDS OF DESCRIPTORS.  TOTAL CORE REQUIREMENT 24128 WORDS.
TOTAL TIME IN COMPILER    = 1:21.909
INITIALIZATION TIME       = 0:0.72
ACTUAL COMPILATION TIME   = 1:6.835
POST-COMPILATION CLEAN-UP = 0:15.2

MACRO DEFINITIONS:
 
NAME             AT LINE REF COUNT LITERAL VALUE
P#                   91        0    109
TRUE                194       27    "1"
BUSY                285        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       25    "0"
AVAIL               285       35    0
VOCAB#               69        2    91
DX_SIZE               0        2    500
VERSION              53        1    '4.0'
FOREVER             195        4    WHILE TRUE
RELFILE             302       25    4
LIBFILE             303        2    5
FOR_MAX             332        3    50
CHRTYPE             475       18    6
SPECIAL             480       25    11
SYTSIZE             493       10    420
PAGE_MAX            297        4    54
DATAFILE            300       22    2
CODEFILE            301        7    3
END_TYPE            343        1    "(3)5000000"
VARIABLE            473       13    3
CONSTANT            474       18    4
BYTETYPE            477        6    8
DESCRIPT            479       12    10
PROCTYPE            482        5    13
TERMINAL#            67        7    42
CODE_TYPE           340        2    "(3)1000000"
SYMB_TYPE           341        1    "(3)2000000"
NAME_TYPE           344        1    "(3)6000000"
DESCLIMIT           355        4    1000
LABELTYPE           471        3    1
FIXEDTYPE           476       17    7
STACKSIZE           523       11    50
CASELIMIT           535        2    175
EJECT_PAGE          298        3    LINE_COUNT = PAGE_MAX+1
BUFFERSIZE          317        7    18
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 129
NAME             AT LINE REF COUNT LITERAL VALUE
 
HISEG_TYPE          342        1    "(3)3000000"
START_TYPE          345        1    "(3)7000000"
START_STATE          65        1    1
MACRO_LIMIT         241        5    60
INTREQ_TYPE         346        1    "(3)10000000"
ACCUMULATOR         472       16    2
FORWARDTYPE         478        7    9
FORWARDCALL         481        6    12
CHARPROCTYPE        483        7    14
EXPANSION_LIMIT     245        1    300
 
ID COMPARES       = 8365
SYMBOL TABLE SIZE = 414
MACRO DEFINITIONS = 52
SCAN              = 26676
EMITINST          = 13257
FORCE ACCUMULATOR = 6066
ARITHEMIT         = 891
GENERATE STORE    = 1048
FREE STRING AREA  = 14084
COMPACTIFICATIONS = 158
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 130
INSTRUCTION FREQUENCIES
 
.INIT.    1
.INPT.    6
.OUTP.    42
.EXIT.    3
.FILO.    24
.NAME.    7
CALLI     6
ILDB      3
LDB       163
IDPB      3
DPB       68
MOVE      3215
MOVEI     257
MOVEM     2576
MOVN      3
MOVM      1
IMULI     11
IDIVI     20
ROT       4
LSH       329
LSHC      7
BLT       2
JRST      725
PUSHJ     963
PUSH      64
POP       64
POPJ      139
ADD       121
ADDI      317
ADDM      2
SUB       74
SUBI      84
CAIL      15
CAIE      179
CAILE     7
CAIGE     14
CAIN      37
CAIG      55
CAML      16
CAME      22
CAMLE     64
CAMGE     7
CAMN      7
CAMG      8
JUMP      1
JUMPE     107
JUMPA     290
JUMPGE    1
JUMPN     2
SKIPE     18
SKIPGE    1
SKIPN     1
SKIPG     2
AOSA      54
SOJG      3
ULXCOM.XPL  COMPILED 26-JUL-1977  AT 20:16:29 BY VERSION 4.0                             PAGE 131
INSTRUCTION FREQUENCIES
 
SETZM     841
AND       89
ANDI      337
IOR       77
SETCA     7
HLL       5
HRLI      2
HRLM      1
HLRZ      1
HRREI     792