*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    LEXSNS                                                 008970
          EXT    SYNTBL,LBLPTR,TRACE,DDLDIAG,DDLPRNT,LEXSCAN,NEXTYPE
          EXT    TRACOUT                                                000770
          EXT    NEXLENW,NEXLENG
          EXT    SWITCHV
 STKLIMT  EQU    64          SPACE ALLOCATED FOR PROCESSOR REQUEST STACK
************************************************************************
*                          *   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.                   *
*    LEXSNS IS THE ENTRY POINT CALLED TO REQUEST LEXSCAN TO SKIP TO    *009000
*    THE NEXT SOURCE STATEMENT (FORTRAN ONLY) AND CONTINUE PROCESSING  *009010
*   * CAUTION: THE OPERAND NUMBERS USED ARE ALSO DEFINED IN SYNGEN AND *009020
*    THE LEXSCAN VARIANTS (CTLSCAN AND FTNSCAN).  CODES IN THIS ROUTINE*009030
*    SHOULD EXACTLY MATCH SYNGEN. THE LEXSCAN VARIANTS MAY USE A SUBSET*009040
*    OF THE CODES, BUT NOT EXTRA OR CONFLICTING CODES.                 *009050
*                                                                      *
*  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.                                                     *
*    AN OPERAND NUMBER GENERATED BY SYNGEN BUT NOT RECOGNIZED CAUSES   *009070
*    STD TO GENERATE A MODE 1 ERROR.                                   *009080
*    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     TRACOUT           WRITE OUT TRACE LINE                 000790
          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    BSS    0           ALL OPERANDS OTHER THAN +SUBS (3) REACH    009100
                             THIS POINT. FIRST PICK UP OPERAND, NEXTYPE.009110
          SB1    X6          B1 = OPERAND                               009120
          SA4    NEXTYPE                                                009130
          SB2    X4          B2 = NEXTYPE                               009140
                             THEN SEPARATE OPERAND CLASSES.             009150
          SB4    99          OPERAND LT 99 NOT TYPE CHECK,              009160
          LT     B1,B4,SCANREQ     SO TEST FOR SCAN REQUEST.            009170
          EQ     B1,B2,EQLTYPE     IF OPERAND EQ NEXTYPE, RESULT IS     009180
                                   AUTOMATICALLY POSITIVE, SO SKIP OTHER009190
                                   TESTS AND CONTINUE AT EQLTYPE.       009200
          SB4    3777B       TEST FOR UNDEFINED REFERENCE AT SYNGEN     009210
          EQ     B1,B4,GENMODE TIME WHICH RESULTED IN AN INSTRUCTION
                             DESIGNED TO GENERATE A MODE 1 ERROR. 
          SB4    112         OPERAND GT 112 NOT DEFINED.                009230
          GT     B1,B4,GENMODE     SO GENERATE MODE 1 ERROR IF BAD OP.  009240
                             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. 
                             NEXTYPE DID NOT EQ OPERAND, SO TRY FOR ALTS009260
          JP     B1+TYPECHK-99     SWITCH TO COMPLETE TYPE TEST.        009270
 TYPECHK  BSS    0           (IF NO ALT. VALUES, GO TO GETINST-STDNO)   009280
          EQ     GETINST     OPERAND =  99, TYPE TESTED FOR = FNAME -FTN009290
          EQ     GETINST     OPERAND = 100, TYPE TESTED FOR = KEYWORD.  009300
          EQ     NAME        OPERAND = 101, TYPE TESTED FOR = NAME.     009310
          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. 
 NAME     SB3    99          WHEN NEXTYPE NE NAME, TRY FNAME (99).      009330
          EQ     B2,B3,EQLTYPE     IF NEXTYPE EQ FNAME, GO TO STDYES    009340
          EQ     GETINST           ELSE, GO TO STDNO.                   009350
 NONNUM   LT     B2,B1,GETINST NEXT SOURCE TYPE IS NON-NUMERIC IF THE 
          SB3    106         CODE < 106 AND > 102.
          LT     B2,B3,EQLTYPE
          EQ     GETINST
 SCANREQ  SB4    10          SORT LAST GROUP OF OPERANDS. LOWEST IS 10, 009380
          LT     B1,B4,GENMODE     SO GENERATE MODE 1 ERROR IF BAD OP.  009390
          SB4    15          OPERAND GT 15 NOT DEFINED IN LAST GROUP,   009400
          GT     B1,B4,GENMODE     SO GENERATE MODE 1 ERROR IF BAD OP.  009410
          JP     B1+SCANCHK-10     SWITCH TO SCAN TEST OR REQUEST.      009420
 SCANCHK  BSS    0           (IF NO ALT. VALUES, GO TO GETINST-STDNO)   009430
          EQ     B1,B2,EQLTYPE OPERAND = 10, TEST FOR EOS. -FTN STMT.   009440
          EQ     EOS         IF NE, CHECK FOR ALT. VALUES.              009450
          EQ     B1,B2,STDYES+1 OPERAND = 11, TEST FOR EOF.             009460
          EQ     GETINST                                                009470
          EQ     B1,B2,STDYES+1 OPERAND = 12, TEST FOR EOT.             009480
          EQ     GETINST                                                009490
          EQ     SNWREQ      OPERAND = 13, DO SNW-SCAN NEXT WORD.       009500
          EQ     SNCREQ      OPERAND = 14, DO SNC-SCAN NEXT CARD.       009510
          EQ     SNSREQ      OPERAND = 15, DO SNS-SCAN NEXT STMT. -FTN  009520
 EOS      SB3    12          WHEN NEXTYPE NE EOS, TRY EOT (12).         009530
          EQ     B2,B3,EQLTYPE     IF NEXTYPE EQ EOT, GO TO STDYES.     009540
          SB3    11                TRY EOF (11).                        009550
          EQ     B2,B3,EQLTYPE     IF NEXTYPE EQ EOF, GO TO STDYES      009560
          EQ     GETINST           ELSE GO TO STDNO.                    009570
 SNWREQ   SB3    10          IF EOS (10) WAS REACHED IN FTN, +SNW IS    013020
          EQ     B2,B3,GETINST  A NO-OP, SO GET NEXT INSTRUCTION.       013030
          RJ     LEXSCAN     SCAN NEXT SOURCE WORD.                     000250
          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. 
 SNSREQ   RJ     LEXSNS      IF REQUEST IS +SNS, CALL LEXSNS TO GET THE 009590
                             1ST SOURCE WORD IN THE NEXT STATEMENT. -FTN009600
          EQ     GETINST     FETCH THE NEXT INSTRUCTION PARCEL.         009610
 EQLTYPE  RJ     LEXSCAN     THE NEXT SOURCE WORD IS THE TYPE TESTED,   009620
                             OR AN ACCEPTABLE ALTERNATE VALUE. CALL     009630
                             LEXSCAN TO ADVANCE IN SOURCE,              009640
          EQ     STDYES+1    AND JUMP TO STDYES.                        009650
 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 
