*DECK S$GNLBL 
          IDENT  S$GNLBL
          TITLE  S$GNLBL -  GENERATE LABEL DEFINITION 
          COMMENT  GENERATE LABEL DEFINITION
          SPACE  4
**        S$GNLBL -  GENERATE LABEL DEFINITION
*                                                                        KEYCMP 
*     CALLING SEQUENCE-                                                  KEYCMP 
*         GENLBL LBLPTR                                                  KEYCMP 
*       OR                                                               KEYCMP 
*         SX1    /LBLPTR/<MNEMONIC> 
*         RJ     S$GNLBL
* 
*     GIVEN-
*         S$LOC = ADDRESS WHERE NEXT INSTRUCTION WILL BE STORED AND 
*          LATER EXECUTED.
*         S$POS = POSITION WITHIN WORD AT S$LOC WHERE INSTRUCTION WILL
*          BE STORED.  (VALUE IS 45, 30, 15 OR 0) 
*         S$ACODE = ORIGINAL VALUE OF S$LOC.
*                                                                        KEYCMP 
*     DOES-                                                              KEYCMP 
*         FORCES UPPER.                                                  KEYCMP 
*         DEFINES THE SPECIFIED SYMBOL.                                  KEYCMP 
*         SETS THE ADDRESS VALUE IN ALL PREVIOUS REFERENCES TO THE LABEL KEYCMP 
*                                                                        KEYCMP 
*     USES-      B    * - - - - 6 7    *B1=1                             KEYCMP 
*                X  - 1 2 3 - - 6 -                                      KEYCMP 
*                A  - 1 2 3 - - 6 -                                      KEYCMP 
                                                                         KEYCMP 
                                                                         KEYCMP 
          ENTRY  S$GNLBL
 S$GNLBL  SUBR
          SA1    S$DFLBL-1+X1  1/DEF, 41/, 18/VALUE OR LINK 
          IFTHEN X1<0        IF ALREADY DEFINED 
            SX6    X1          EXAMINE VALUE OF DEFINED LABEL 
            IFTHEN X6"0        IF NOT DUMMY DEFINITION
              SX1    =10HS$GNLBL-1
              CALL S$ABORT       ABORT
              ENDIF.
            ENDIF.
                                                                         KEYCMP 
*     FORCE UPPER IF NECESSARY                                           KEYCMP 
                                                                         KEYCMP 
          SA2    S$POS       POSITION COUNTER (45, 30, 15 OR 0) 
          IFTHEN X2"0        IF NOT ON WORD BOUNDARY                     KEYCMP 
            MX6    0           SET POSITION COUNTER TO NEW WORD          KEYCMP 
            SA6    A2 S$POS 
            SB7    X2-59       MASK FOR NO-OP INSTRUCTIONS               KEYCMP 
            MX6    1                                                     KEYCMP 
            SB7    -B7                                                   KEYCMP 
            AX6    X6,B7                                                 KEYCMP 
            SA3    =00000460006100046000B                                KEYCMP 
            BX6    -X6*X3      KEEP ONLY USED INSTRUCTIONS               KEYCMP 
            SA2    S$LOC       X2 = ADDRESS OF PARTLY FILLED WORD 
            SA3    X2          INSERT NO-OP INSTRUCTIONS                 KEYCMP 
            BX6    X3+X6                                                 KEYCMP 
            SA6    A3 (S$LOC)  STORE COMPLETE WORD
            SX6    X2+B1       INCREMENT S$LOC
            SA6    A2 S$LOC 
            ENDIF.                                                       KEYCMP 
                                                                         KEYCMP 
*     SET VALUE OF LABEL IN PREVIOUS REFERENCES TO LABEL                 KEYCMP 
                                                                         KEYCMP 
          SA2    S$LOC       VALUE OF LABEL 
          MX6    1           NOTE DEFINITION
          BX6    X6+X2
          SA6    A1          STORE VALUE IN LABEL DEFINITION             KEYCMP 
          MX6    -16                                                     KEYCMP 
          BX6    -X6*X1      BIASED ADDRESS OF FIRST REFERENCE           KEYCMP 
          ZR     X6,EXIT     IF NO PREVIOUS REFERENCES
          SA3    S$ACODE     SET BIAS OF (START-OF-CODE - 1)
          SB6    X3-1                                                    KEYCMP 
                                                                         KEYCMP 
*         X1 = 42/GARBAGE, 18/LINK                                       KEYCMP 
*         X2 = VALUE OF LABEL                                            KEYCMP 
*         X6 = NON-ZERO BIASED ADDRESS OF PREVIOUS REFERENCE             KEYCMP 
*         B6 = BIAS FOR LINK ADDRESS                                     KEYCMP 
                                                                         KEYCMP 
 GENLBL1  SA3    B6+X6       INSTRUCTION WORD WITH LABEL                 KEYCMP 
          AX1    16          RIGHT-JUSTIFY PARCEL NUMBER                 KEYCMP 
          MX6    -2          EXTRACT PARCEL NUMBER                       KEYCMP 
          BX1    -X6*X1                                                  KEYCMP 
          SA1    GENLBLA+X1  2/1,10/RESET COUNT,42/RIGHT-JUSTIFY COUNT   KEYCMP 
          SB7    X1          COUNT TO RIGHT-JUSTIFY ADDRESS FIELD        KEYCMP 
          LX3    X3,B7       RIGHT-JUSTIFY ADDRESS FIELD
          UX1    B7,X1       GET SHIFT COUNT TO RESET THE INSTRUCTION    KEYCMP 
          SX1    X3          SET NEW LINK                                KEYCMP 
          MX6    -18         STRIP LINK FROM INSTRUCTION WORD            KEYCMP 
          BX6    X6*X3                                                   KEYCMP 
          IX3    X6+X2       INSERT ADDRESS OF LABEL                     KEYCMP 
          LX6    X3,B7       RE-POSITION WORD                            KEYCMP 
          SA6    A3          STORE BACK                                  KEYCMP 
          MX6    -16         EXTRACT BIASED ADDRESS                      KEYCMP 
          BX6    -X6*X1                                                  KEYCMP 
          NZ     X6,GENLBL1  IF NOT LAST LINK,  LOOP                     KEYCMP 
                                                                         KEYCMP 
          EXIT                                                           KEYCMP 
                                                                         KEYCMP 
                                                                         KEYCMP 
 GENLBLA  VFD    2/1,10/00,48/60    0/8 = 0                              KEYCMP 
          VFD    2/1,10/15,48/45   15/8 = 1                              KEYCMP 
          BSS    1                                                       KEYCMP 
          VFD    2/1,10/30,48/30   30/8 = 3                              KEYCMP 
  
 S$ACODE  EXTERNAL           ORIGINAL VALUE OF S$LOC
  
 S$DFLBL  EXTERNAL           ADDRESS FOR DEFINITIONS OF LABELS
  
 S$LOC    EXTERNAL           ADDRESS WHERE NEXT INSTRUCTION WILL BE 
                             STORED AND LATER EXECUTED
  
 S$POS    EXTERNAL           POSITION WITHIN WORD AT S$LOC WHERE
                             INSTR. WILL BE STORED  (45, 30, 15 OR 0) 
          SPACE  4
          END 
