*DECK CTLSTD                                                            000250
          IDENT CTLSTD                                                  000180
          ENTRY  STD$STA
          ENTRY  STD$RET
          ENTRY  STDYES 
          ENTRY  STDNO
          ENTRY  TFLAG
          EXT    NEXLXID,SYNSEC,LEXSNC,LINELMT,NEXWORD
          EXT    SYNTBL,LBLPTR,TRACE,DDLDIAG,DDLPRNT,LEXSCAN,NEXTYPE
          EXT    NEXLENW,NEXLENG
          EXT    SWITCHV
 STKLIMT  EQU    64          SPACE ALLOCATED FOR PROCESSOR REQUEST STACK
 SNW      EQU    13          CODE FOR LEXSCAN SCAN-NEXT-WORD REQUEST. 
************************************************************************
*                          *   S T D $ S T A R T   *                   *
*                                                                      *
*  ENTRY CONDITIONS:                                                   *
*    A CALL PARAMETER IS LOCATION OF BASE OF SWITCH VECTOR TO BE USED  *
*    IN EXECUTING SUBROUTINE CALL INSTRUCTIONS FOR SEMANTIC PROCESSING.*
*    PRIOR TO CALL TO STD$START, LEXSCAN MUST HAVE BEEN CALLED TO SCAN *
*    THE 1ST SOURCE WORD AND IDENTIFY IT.                              *
*                                                                      *
*  EXTERNAL REFERENCES:                                                *
*    SYNTBLE, TRACEM, AND LBLPTRS TABLES BUILT BY SYNGEN AND SEPARATELY*
*    COMPILED ARE EXTERNALLY DEFINED ARRAYS.                           *
*    SYNSECT IS AN EXTERNALLY DEFINED ITEM FROM WHICH STD OBTAINS INDEX*
*    VALUES FOR +SUBS INSTRUCTIONS.                                    *
*    NEXTYPE IS AN EXTERNALLY DEFINED ITEM CONTAINING CODES FOR THE    *
*    SYNTACTIC TYPE OF THE NEXT SOURCE WORD.                           *
*    DDLDIAG IS THE DIAGNOSTIC MODULE OF DDL WHICH IS CALLED WHENEVER  *
*    A DIAGNOSTIC INSTRUCTION IS EXECUTED.                             *
*    LEXSCAN IS AN ENTRY CALLED TO REQUEST THE IDENTIFICATION OF THE   *
*    NEXT SOURCE WORD.                                                 *
*    LEXSNC IS THE ENTRY POINT CALLED TO REQUEST LEXSCAN TO SKIP TO    *
*    THE NEXT SOURCE RECORD AND CONTINUE PROCESSING.                   *
*                                                                      *
*  EXIT CONDITIONS:                                                    *
*    STD EXISTS LOGICALLY AS A CO-ROUTINE, SO THERE IS NO LOGICAL EXIT.*
*    WHEN THE END OF THE SOURCE STREAM IS ENCOUNTERED, HOWEVER, A      *
*    SEMANTIC PROCESSOR MAY CALL STD$RETURN, RESULTING IN A RETURN TO  *
*    WHOMEVER CALLED STD$START.                                        *
*                                                                      *
*  ERROR CONDITIONS:                                                   *
*    IF A 03777 INSTRUCTION IS ENCOUNTERED, IT SIGNIFIES A REFERENCE   *
*    TO AN UNDEFINED SYMBOL IN THE SYNGEN INPUT SOURCE. STD WILL CAUSE *
*    A MODE 1 ERROR IF SUCH AN INSTRUCTION IS EXECUTED.                *
*    A 13777 INSTRUCTION IS A REFERENCE TO AN UNDEFINED SEMANTIC SUB-  *
*    ROUTINE IN THE SOURCE INPUT TO SYNGEN AND CAUSES STD TO GENERATE A*
*    MODE 1 ERROR.                                                     *
*    IF THE STD PROCESSOR REQUEST STACK UNDERFLOWS, A COMPILER ERROR   *
*    MESSAGE IS ISSUED AND THE JOB ABORTED.                            *
*    IF THE STD PROCESSOR REQUEST STACK OVERFLOWS, A COMPILER ERROR    *
*    MESSAGE IS ISSUED AND THE JOB ABORTED.                            *
************************************************************************
 STD$RET  DATA   0           ENTRY FOR RETURN FROM SEMANTIC ROUTINES. 
 STD$STA  DATA   0           ENTRY FOR STARTING SYNTAX ANALYSIS.
          SA1    DIAGSTD
          MX2    24 
          LX2    54 
          BX6    -X2*X1 
          SA6    DIAGSTD
          SA1    DDLDIAG       BIND THE LOCATION OF THE 
          LX1    30 
          SA2    DIAGSTD       APPROPRIATE DIAGNOSTIC RTN 
          BX6    X1+X2
          SA6    DIAGSTD
          SA4    SUBCALL+1   FETCH CODE SKELETON FOR SWITCH CALL. 
          SA1    SWITCHV
          MX6    42                LOCATION OF BASE OF SWITCH VECTOR
          BX4    X6*X4
          BX6    X1+X4       ADD ADDRESS OF SWITCH TO CODE. 
          MX7    0
          SA6    A4          STORE WORD OF CODE CONTAINING SWITCH ADDR. 
          SA7    INSTWD      INITIALIZE NEXT-INSTRUCTION-WORD-POINTER.
          SX6    1
          SA7    TRANWD      INITIALIZE NEXT-TRANSFER-WORD-POINTER. 
          SA6    TRANPAR     INITIALIZE NEXT-TRANSFER-PARCEL-POINTER. 
          SA1    LBLPTR   FETCH POINTER TO FIRST SYNTBL SECTION 
          IX1    X1+X6
          SA1    X1 
          SX6    -1 
          SA7    INSTPAR     INITIALIZE NEXT-INSTRUCTION-PARCEL-POINTER.
          SA6    STKPTR      INITIALIZE PTR TO STD"S CALL STACK.
          BX6    X1 
          SA7    STKPTR      INITIALIZE PROCESSOR REQUEST STACK LEVEL.
          SA6    SECTAD      SAVE POINTER TO 1ST SYNTBLE SECTION. 
          EQ     GETINST     FETCH FIRST SYNTBLE INSTRUCTION. 
 STDNO    DATA   0
 GETINST  SA1    INSTWD      FETCH NEXT-INSTRUCTION-WORD-POINTER. 
          SA2    INSTPAR     FETCH NEXT-INSTRUCTION-PARCEL-POINTER. 
          SA4    TFLAG       CHECK TRACE REQUEST FLAG.
          ZR     X4,NOTOUT   IF ZERO, PUT OUT NO TRACE. 
          SX5    X4-1 
          ZR     X5,TROUT    IF TFLAG = 1 THEN TRACE IS PUT OUT.
          SX7    B0          IF TFLAG > 1 THEN TFLAG IS RESET AND NO
          SA7    A4          TRACE IS PUT OUT.
          SA1    INSTWD 
          EQ     NOTOUT 
 TROUT    LX1    2           USE THE WORD AND PARCEL RELATIVE VALUES TO 
          IX5    X1+X2       OBTAIN AN INDEX INTO TRACEM TABLE. 
          SA1    LINECNT
          SA4    LINELMT
          IX7    X4-X1
          NZ     X7,TLINE    TEST FOR TRACE LIMIT EXCEEDED. 
          SA7    LINECNT
          SX7    -1 
          SA7    TFLAG
          SA1    INSTWD 
          EQ     NOTOUT 
 TLINE    SX7    X1+1 
          SA7    LINECNT
          SB3    1
          SA4    TRACE    FETCH APPROPRIATE TRACE MESSAGE 
          IX4    X4+X5
          SA4    X4 
          BX6    X4 
          SA6    TMSG+1      STORE TRACE MESSAGE IN SKELETON WSA. 
          SA3    NEXLENW
          SA2    NEXLENG
          SX5    X3-5 
          SA4    NEXWORD     STORE CONTENTS OF NEXWORD IN TRACE MESSAGE.
          NG     X5,LT4WORDS MAX OF 4 WORDS LISTED ON TRACE.
          SX3    4
 LT4WORDS SB2    X3-1 
          SX7    X2+40
          SB4    TMSG+3 
          SA7    TLG
          LE     B2,ALLNEXT 
          SB7    1
 LOOPNEX  BX6    X4 
          SA4    A4+B3
          SA6    B4+B7
          SB2    B2-B3
          SB4    B4+B7
          NE     B2,LOOPNEX 
 ALLNEXT  BX6    X4 
          SA6    B4+B3
          SA3    NEXLXID     FETCH NEXLXID. 
          MX7    30 
          RJ     BINCON      CONVERT TO DISPLAY CODE. 
          SA4    =5LLXID= 
          BX6    X4+X6
          SA6    TMSG+3 
          SA3    NEXTYPE     FETCH NEXTYPE. 
          RJ     BINCON      CONVERT TO DISPLAY CODE. 
          SA4    =5LTYPE= 
          BX6    X4+X6
          SA6    TMSG+2 
          SA1    AWRITE 
          RJ     DDLPRNT
          SA1    INSTWD 
          SA2    INSTPAR
NOTOUT    SA3    SYNTBL 
          IX3    X3+X1
          SA3    X3 
          BX6    X2 
          MX0    15          MASK FOR INSTRUCTION.
          LX6    4           16 * PARCEL. 
          SB1    X6 
          SB7    X2+1        INCREMENT NEXT-INSTRUCTION-PARCEL-POINTER. 
          SB2    X2 
          SB2    B1-B2       15 * PARCEL
          SX2    B7-4 
          LX6    X3,B2       LEFT-JUSTIFY PROPER PARCEL OF SYNTBLE WORD.
          BX5    X0*X6       ISOLATE INSTRUCTION. 
          NZ     X2,SETPAR   IF NEXT PARCEL IS IN THE NEXT SYNTBLE WORD 
          SB7    B0          THEN NEXT-INSTRUCTION-PARCEL-POINTER MUST
          SX6    X1+1        BE SET TO 1ST PARCEL OF NEXT SYNTBLE WORD
          SA6    A1          AND NEXT-INSTRUCTION-WORD-POINTER INCRMENTD
 SETPAR   SX7    B7 
          MX1    56          MASK FOR SEPARATING OPERATOR AND OPERAND.
          SA7    A2          STORE NEXT-INSTRUCTION-PARCEL-POINTER. 
          LX1    56 
          BX6    X1*X5       PICK OFF OPERAND.
          BX2    -X1*X5      PICK OFF OPERATOR. 
          AX6    45 
          LX2    4
          SA6    OPERAND     SAVE OPERAND.
          SB1    X2          SAVE OPERATOR IN B1 FOR USE IN A SWITCH
          JP     B1+OPRATOR  SWITCH TO PROPER OPERATOR ROUTINE. 
 OPRATOR  EQ     DRIVEREQ    OPERATOR = 0.
          EQ     DIAGNOS     OPERATOR = 1.
          EQ     SUBCALL     OPERATOR = 2.
          EQ     KEY$        OPERATOR = 3.
          EQ     KEY         OPERATOR = 4.
          EQ     LBLCALL     OPERATOR = 5.
          EQ     ERROP       OPERATOR = 6.
          EQ     ERROP       OPERATOR = 7.
          EQ     SUBLBL      OPERATOR = 8.
          EQ     SUBLBL      OPERATOR = 9.
          EQ     SUBLBL      OPERATOR = 10. 
          EQ     SUBLBL      OPERATOR = 11. 
          EQ     TRANSF      OPERATOR = 12. 
          EQ     TRANSF      OPERATOR = 13. 
          EQ     TRANSF      OPERATOR = 14. 
 TRANSF   MX0    58          LAST 2 BITS OF OPERATOR TELL WHICH PARCEL. 
          SA5    SECTAD      GET ADDRESS OF CURRENT SYNTBLE SECTION.
          BX7    -X0*X2 
          SA7    TRANPAR     SET NEXT-TRANSFER-PARCEL-POINTER.
          IX6    X6+X5       OPERAND VALUE IS NEXT-TRANSFER-WORD- 
          SA6    TRANWD      POINTER VALUE RELATIVE TO BASE OF SECTION. 
          EQ     GETINST     FETCH NEXT INSTRUCTION.
 SUBLBL   MX0    58          LAST 2 BITS OF OPERATOR TELL WHICH PARCEL. 
          SA5    SECTAD      GET BASE ADDRESS OF CURRENT LABELLED SECT. 
          BX7    -X0*X2 
          SA7    A2          SET NEXT-INSTRUCTION-PARCEL-POINTER. 
          IX6    X5+X6
          SA6    A1          SET NEXT-INSTRUCTION-WORD-POINTER. 
          EQ     GETINST     FETCH NEXT INSTRUCTION.
 LBLCALL  SA2    STKPTR      FETCH DEPTH OF PROCESSOR REQUEST STACK.
          SX3    X2-STKLIMT  CHECK DEPTH OF STACK AGAINST ALLOCATED SIZE
          NZ     X3,STKOK    IF STACK OVERFLOW OCCURS, PRINT DAYFILE
          MESSAGE OVRFLOW    MESSAGE AND ABORT JOB. 
          ABORT 
 STKOK    SX4    X2+1        PUCH DOWN STACK BY INCREMENTING DEPTH-PTR. 
          SA5    SECTAD      FETCH POINTER TO BASE OF CURRENT SYNTBLE 
                             SECTION. 
          SA1    A1          FETCH NEXT-INSTRUCTION-WORD-POINTER. 
          LX5    2
          SA3    TRANWD      FETCH NEXT-TRANSFER-WORD-POINTER.
          BX5    X5+X7       COMBINE SECTADD WITH NEXT-PARCEL-POINTER.
          SA2    TRANPAR     FETCH NEXT-TRANSFER-PARCEL-POINTER.
          LX5    18 
          BX5    X1+X5       INSERT NEXT-INSTRUCTION-WORD POINTER.
          LX2    18          POSITION NEXT-TRANSFER-PARCEL-POINTER. 
          BX1    X2+X3
          LX5    20 
          IX7    X5+X1       PLACE NEXT-INSTRUCTION AND NEXT-TRANSFER 
          SA7    STDSTK+X4   POINTERS ON TOP OF PROCESSOR REQUEST STACK.
          SA2    LBLPTR   USE OPERAND AS INDEX INTO LBLPTR TABLE
          IX2    X2+X6
          SA2    X2 
          BX7    X4 
          MX6    0           START OF NEW LABELLED SECTION IS WORD BNDRY
          SA7    STKPTR      STORE NEW DEPTH-POINTER VALUE. 
          SA6    INSTPAR     STORE NEW NEXT-INSTRUCTION-PARCEL-POINTER. 
          BX7    X2 
          SA7    SECTAD      SAVE POINTER TO NEW LABELLED SECTION.
          SA7    INSTWD      STORE NEW NEXT-INSTRUCTIO-WORD-POINTER.
          EQ     GETINST     FETCH NEXT INSTRUCTION.
 KEY      SA1    NEXLXID     FETCH LEXID OF NEXT SOURCE WORD, AND 
          MX0    49          COMPARE 11 LOW-ORDER BITS WITH OPERAND 
          BX1    -X0*X1      VALUE. 
          IX4    X6-X1
          NZ     X4,GETINST  IF SOURCE WORD IS NOT THE SPECIFIC KEYWORD 
                             TESTED FOR, THEN GO EXECUTE NEXT SYNTBLE 
                             INSTRUCTION. 
          RJ     LEXSCAN     IF SOURCE = KEYWORD BEING TESTED FOR, CALL 
                             LEXSCAN TO ADVANCE IN SOURCE STREAM AND
          EQ     GETINST     THEN GO EXECUTE THE NEXT SYNTBLE INSTRUCT. 
 KEY$     SA1    NEXLXID     FETCH LEXID OF NEXT SOURCE WORD AND COMPARE
          MX0    49          11 LOW-ORDER BITS WITH OPERAND VALUE.
          BX1    -X0*X1 
          IX4    X6-X1
          NZ     X4,GETINST  IF NOT THE KEYWORD THEN GO EXECUTE THE NEXT
                             SYNTBLE INSTRUCTION. 
          RJ     LEXSCAN     IF SOURCE = KEYWORD BEING TESTED FOR, CALL 
                             LEXSCAN TO ADVANCE IN SOURCE STREAM AND
          EQ     STDYES+1    JUMP TO NEXT-TRANSFER-POINT. 
 SUBCALL  SB1    X6          OPERAND USED AS INDEX INTO USER"S SWITCH 
                             VECTOR TO CALL A SEMANTIC PROCESSING RTN.
          SB4    3777B       TEST FOR A REFERENCE TO A SUBROUTINE WHICH 
          EQ     B1,B4,GENMODE WAS UNDEFINED AT SYNGEN TIME.
          JP     B1+0        THIS CODE WILL BE MODIFIED AT EXECUTION. 
 DIAGNOS  SA1    OPNDADD     PASS OPERAND AS PARAMETER IN CALL TO THE 
DIAGSTD   VFD    6/1,54/0         DIAGNOSTIC MODULE 
          EQ     GETINST     FETCH NEXT INSTRUCTION.
 DRIVEREQ ZR     X5,GETINST  INSTRUCTION PARCEL OF ZERO TREATED AS NO-OP
          SX4    X6-3 
          ZR     X4,SUBS     IF OPERAND IS 3 THEN INSTRUCTION IS +SUBS. 
          PL     X4,AMBIG    ELSE MAY BE EITHER TYPE CHECK OR SCAN REQ. 
          LX4    59          SHIFT TO FIND WHETHER OPERAND = YES OR NO. 
          SA1    STKPTR      FETCH PTR TO TOP OF PROCESSOR REQUEST STACK
          SB1    X1 
          SA3    STDSTK+X1   FETCH TOP OF STACK.
          GE     B1,OKSTK    IF STACK UNDERFLOW OCCURS, ABORT WITH A
          MESSAGE UNDRFLO    DAYFILE MESSAGE. 
          ABORT 
 OKSTK    LX3    20 
          MX0    2           MASK FOR PARCEL POINTER. 
          SX7    X3          ISOLATE BASE ADDRESS OF SYNTBLE SECTION. 
          PL     X4,NO
          LX3    20          POSITION TO YES-RETURN POINTERS. 
 NO       LX0    20 
          SA7    SECTAD      SAVE BASE ADDRESS OF SECTION TO WHICH
                             CONTROL IS RETURNING.
          LX3    20          POSITION TO YES OR NO RETURN POINTERS. 
          SX6    X3          ISOLATE WORD POINTER.
          BX7    X3*X0       ISOLATE PARCEL POINTER.
          SA6    INSTWD      STORE NEXT-INSTRUCTION-WORD-POINTER. 
          AX7    18 
          SA7    INSTPAR     STORE NEXT-INSTRUCTION-PARCEL-POINTER. 
          PL     X4,SETRANS  FOR YES-RETURN, SET TRANSFER POINTERS = 0. 
          SX6    B0 
          MX7    0
          EQ     STORTRN
 SETRANS  LX3    20          FOR NO-RETURN, RESET TRANSFER POINTERS WITH
          SX6    X3          STACKED VALUES.
          BX7    X3*X0
 STORTRN  SA6    TRANWD      STORE NEXT-TRANSFER-WORD-POINTER.
          AX7    18 
          SX6    X1-1        POP REQUEST STACK. 
          SA7    TRANPAR     STORE NEXT-TRANSFER-PARCEL-POINTER.
          SA6    STKPTR 
          EQ     GETINST     FETCH NEXT INSTRUCTION.
SUBS      SA2    SYNSEC 
          SA2    X2      USE VALUE ON SYNSEC AS OPERAND FOR A 
          BX6    X2          LABEL CALL.
          ZR     X2,GENMODE  0 IS AN ILLEGAL INDEX VALUE FOR LBLPTRS
                             ARRAY. 
          EQ     LBLCALL
 AMBIG    SB1    X6-100      TEST FOR SCAN REQUEST OR TYPE CHECK. 
          LT     B1,SCANREQ  OPERAND < 100 MEANS POSSIBLE SCAN REQUEST. 
          SB4    3777B-100   TEST FOR UNDEFINED REFERENCE AT SYNGEN 
          EQ     B1,B4,GENMODE TIME WHICH RESULTED IN AN INSTRUCTION
                             DESIGNED TO GENERATE A MODE 1 ERROR. 
                             IN THE FOLLOWING TEST, THE TEST IS TRUE
                             (RESULTING IN A CALL TO STDYES) IF THE TWO 
                             VALUES IN NEXTYPE AND OPERAND ARE EQUAL OR 
                             NEXTYPE SPECIFIES A TYPE INCLUDED IN A MORE
                             GENERAL TYPE CODED IN OPERAND. 
          SA4    NEXTYPE     FETCH SYNTACTIC-TYPE CODE OF NEXT SOURCE 
          SB2    X4-100      WORD AND COMPARE WITH OPERAND VALUE. IF THE
          EQ     B1,B2,EQLTYPE VALUES ARE NOT EQUAL HAVE TO GO THROUGH
          JP     B1+TYPECHK  SWITCH TO COMPLETE TYPE TEST.
 TYPECHK  EQ     GETINST     OPERAND = 100, TYPE TESTED FOR = KEYWORD.
          EQ     GETINST     OPERAND = 101, TYPE TESTED FOR = NAME. 
          GE     B2,B1,EQLTYPE OPERAND = 102, TYPE TESTED FOR = ANY 
          EQ     GETINST     LITERAL STRING.
          EQ     NONNUM      OPERAND = 103, TYPE TESTED FOR = NONNUMERIC
          EQ     GETINST     OPERAND = 104, TYPE TESTED FOR = CHAR MASK.
          EQ     GETINST     OPERAND = 105, TYPE TESTED FOR = BIT MASK. 
          GE     B2,B1,EQLTYPE OPERAND = 106, TYPE TESTED FOR = ANY 
          EQ     GETINST     NUMERIC TYPE 
          EQ     GETINST     OPERAND = 107, TYPE TESTED FOR = INTEGER.
          EQ     GETINST     OPERAND = 108, TYPE TESTED FOR = FIXED PT. 
          EQ     GETINST     OPERAND = 109, TYPE TESTED FOR = COMPLEX.
          GE     B2,B1,EQLTYPE OPERAND = 110, TYPE TESTED FOR = EITHER
          EQ     GETINST     SINGLE OR DOUBLE PREC FLOATING POINT.
          EQ     GETINST     OPERAND = 111, TYPE TESTED FOR = SINGLE. 
          EQ     GETINST     OPERAND = 112, TYPE TESTED FOR = DOUBLE. 
 EQLTYPE  RJ     LEXSCAN     THE NEXT SOURCE WORD IS THE TYPE TESTED FOR
          EQ     STDYES+1    ADVANCE IN SOURCE AND JMP TO NEXT TRANSFER.
 NONNUM   LT     B2,B1,GETINST NEXT SOURCE TYPE IS NON-NUMERIC IF THE 
          SB3    106-100     CODE < 106 AND > 102 
          LT     B2,B3,EQLTYPE
          EQ     GETINST
 SCANREQ  SB2    X6-SNW      IF SCAN REQUEST IS +SNC THEN CALL LEXSNC TO
          GT     B2,B0,SNCREQ  GET THE NEXT SOURCE RECORD.
          EQ     B2,B0,SNWREQ  IF +SNW THEN CALL LEXSCAN TO GET THE NEXT
                               SOURCE WORD. 
          SA4    NEXTYPE     REQUEST IS +EOT OR +EOF. IF NEXTYPE IS 
          BX4    X4-X6       EITHER EOT OR EOF AND THE REQUESTED TYPE IS
          NZ     X4,GETINST  DIFFERENT , GO TO STDNO
          EQ     STDYES+1    THE SAME , GO TO STDYES
 SNWREQ   RJ     LEXSCAN     SCAN NEXT SOURCE WORD. 
          EQ     GETINST     FETCH THE NEXT INSTRUCTION PARCEL. 
 SNCREQ   RJ     LEXSNC      IF REQUEST IS +SNC, CALL LEXSNC TO GET THE 
                             1ST SOURCE WORD IN THE NEXT SOURCE RECORD. 
          EQ     GETINST     FETCH THE NEXT INSTRUCTION PARCEL. 
 STDYES   DATA   0
          SA1    TRANWD      FETCH NEXT-TRANSFER-WORD-POINTER.
          SA2    TRANPAR     FETCH NEXT-TRANSFER-PARCEL-POINTER.
          MX6    0
          BX7    X1 
          SA6    TRANWD      SET NEXT-TRANSFER-WORD-POINTER TO ZERO.
          SA7    INSTWD      STORE NEW VALUE IN NEXT-INSTRUCTION-WORD.
          SA6    A2          SET NEXT-TRANSFER-PARCEL-POINTER TO ZERO.
          BX7    X2 
          SA7    INSTPAR     STORE NEW VALUE IN NEXT-INSTRUCTION-PARCEL.
          EQ     GETINST     FETCH NEXT INSTRUCTION.
 GENMODE  EQ     377777B     GENERATES A MODE ERROR FOR UNDEFINED REF-
                             ERENCE INSTRUCTIONS. 
 ERROP    ABORT 
 BINCON   DATA   0           CONVERTS A 12-BIT, UNSIGNED, BINARY INTEGER
          MX0    48          IN X3 TO DISPLAY-CODED OCTAL,LEFT-JUSTIFIED
          BX3    -X0*X3      IN X6 AND PADDED WITH 1 BLANK TO MAKE 5
          NZ     X3,NONZERO  CHARACTERS RETURNED IN X6. 
          SA4    =5R   0
          BX6    X4 
          EQ     BINCON 
 NONZERO  MX0    57 
          SB7    4
          MX6    0
          SB6    -1 
          LX3    48 
 SHIFTL   LX3    3
          BX4    -X0*X3 
          SX5    X4+33B 
          SB7    B7+B6
          BX6    X6+X5
          BX3    X3*X0
          LX6    6
          NE     B7,SHIFTL
          SX5    55B
          BX6    X6+X5
          EQ     BINCON 
 OPNDADD  CON    OPERAND     POINTER TO OPERAND FOR PARAMETER PASSING 
          CON    NULL,NULL   END OF PARAMETER LIST FOR DIAG 
NULL      DATA   0           DUMMY PARAMETER FOR DIAG 
 LINECNT  BSSZ   1
 TFLAG    DATA   0           FLAG FOR TRACE REQUEST 
 INSTWD   BSS    1           NEXT-INSTRUCTION-WORD-POINTER
 INSTPAR  BSS    1           NEXT-INSTRUCTION-PARCEL-POINTER
 TRANWD   BSS    1           NEXT-TRANSFER-WORD-POINTER 
 TRANPAR  BSS    1           NEXT-TRANSFER-PARCEL-POINTER 
 STKPTR   BSS    1           POINTER TO TOP OF PROCESSOR REQUEST STACK
 OPERAND  BSS    1           VALUE OF CURRENT OPERAND 
 SECTAD   BSS    1           POINTER TO 1ST WORD OF CURRENT SYNTBLE SECT
 STDSTK   BSS    STKLIMT     SPACE FOR PROCESSOR REQUEST STACK
 ZEROES   DATA   10H0000000000
 BLANKS   DATA   10H
 TMSG     DIS    ,* INSTRUCT=                             * 
          DATA   40H
 OVRFLOW  DIS    ,* COMPILER ERROR - STD STACK OVERFLOW * 
          VFD    48/8H        ,12/0 
 UNDRFLO  DIS    ,* COMPILER ERROR - STD STACK UNDERFLOW* 
          VFD    48/8H        ,12/0 
AWRITE    CON    TMSG,TLG,TRC  PARAMETER LIST FOR WRITE 
 TLG      DATA   110         NUMBER CHARS IN TRACE OUTPUT LINE. 
TRC       BSS    1           I/O RETURN CODE FROM WRITE 
          END 
