*DECK S$GNRNX 
          IDENT  S$GNRNX
          TITLE  S$GNRNX -  GENERATE- GET NEXT FIELD
          COMMENT  GENERATE- GET NEXT FIELD 
          SPACE  4
**        S$GNRNX -  GENERATE- GET NEXT FIELD 
* 
*     CALLING SEQUENCE- 
*         CALL   S$GNRNX
* 
*     GIVEN-
*         B5 = NUMBER OF BITS TO EXTRACT FROM THE INTERNAL RECORD.
*         S$IRRL = NUMBER OF WORDS PER SLOT IN THE RECORD STORAGE AREA. 
*         S$LK = NUMBER OF BITS OF INFORMATION THAT HAVE BEEN PREVIOUSLY
*          REVERTED.
*         S$LR = NUMBER OF BITS RESERVED FOR RECORD NUMBER. 
*         S$ORSA = WORD OFFSET WITHIN WSA$ OF RECORD STORAGE AREA.
* 
*     DOES- 
*         GENERATES CODE. 
*         INCREMENTS S$LK BY THE LENGTH OF THIS INTERNAL FIELD. 
*         SETS X5 = NUMBER OF BITS TO LEFT OF TARGET FIELD IN *X4.
* 
*     GENERATED CODE EXPECTS- 
*         (IF 1+S$LR+S$LK IS LESS THAN 60,) 
*             THE INTERNAL RECORD IS SPECIFIED IN X6. 
*         (ELSE)
*              A0 IS THE ADDRESS OF THE WORD CONTAINING BIT 1+S$LR+S$LK 
* 
*         (IF 1+1+S$LR+S$LK IS LESS THAN 60,) 
*         (IF 1+S$LR+(NEW S$LK) IS AT LEAST 60,)
*             SETS *A0 TO THE ADDRESS OF THE WORD 
*              CONTAINING BIT NUMBER 1+S$LR+(NEW S$LK). 
*         SETS *X4 WITH THE FIELD B5 BITS LONG (B5 LE 60) 
*          FROM THE INTERNAL RECORD.
* 
*     GENERATED CODE USES-
*         B    * * - - - - -    *B1=1, *B2=WSA$ 
*         X  0 - - 3 4 - * -    *X6=DESCRIPTOR
*         A  0 - - 3 4 - - -
* 
*     S$GNRNX USES- 
*         B    * - - 4 * 6 7    *B1=1, *B5=AS ABOVE 
*         X  0 1 2 3 - - 6 -
*         A  - 1 2 3 - - 6 -
  
  
          ENTRY  S$GNRNX
 S$GNRNX  SUBR
  
*     SET B4 = NUMBER OF BITS IN WORD TO THE LEFT OF THE TARGET FIELD 
  
          SA1    S$LR 
          SA2    S$LK 
          IX1    X1+X2
          SX2    X1+1+1      1+1+LR+LK
          SX0    1S22/60+1   1/60 * 2**22 
          IX3    X2*X0       (1+1+LR+LK)/60 * 2*22
          AX3    22          (1+1+LR+LK)/60 
          SX0    60 
          IX3    X0*X3       ((1+1+LR+LK)/60) *60 
          IX3    X2-X3       (1+1+LR+LK)-((1+1+LR+LK)/60))*60 
          SB4    X3 
  
*     GET THE (FIRST) WORD
  
          SB7    X2          1+1+LR+LK
          SB6    60 
  
          IFTHEN B7<B6       IF STILL WORKING ON DESCRIPTOR IN *X6
            SB7    B4+B5       OFFSET+LENGTH
            IFTHEN B7\B6     IF NEXT IS BEYOND DESCRIPTOR 
              SA1    S$IRRL 
              ZR     X1,GNRNX1   IF ENTIRE RECORD = DESCRIPTOR
              GEN    (BX4 X6) 
              SA1    S$LR 
              GEN    (LX4 1+1),X1          *LX4 1+1+LR
              SA1    S$LR 
              BX1    -X1
              GEN    (MX0 60-0),X1     *MX0 -LR 
              GEN    (BX0 -X0*X4)      *RECORD NUMBER 
              SA1    S$IRRL 
              GEN    (SX4 0),X1 
              GEN    (IX4 X0*X4)
              SA1    S$ORSA 
              SA2    S$IRRL 
              IX1    X1-X2
              IFTHEN X1\0        IF POSITIVE MODIFIER 
                GEN    (SX4 X4+0),X1       * (RN*IRRL)+(ORSA-IRRL)
              ELSE- 
                MX0    -17         MASK ALL EXCEPT LO 17 BITS 
                BX1    -X0*X1      SO THAT A NEGATIVE MODIFIER
                                   DOES NOT PROPAGATE THE SIGN BIT
                                   INTO OP CODE FIELD OF GEN CODE 
                GEN    (SX4 X4+400000B),X1   * (RN*IRRL)+(ORSA-IRRL)
                ENDIF.
              GEN    (SA0 B2+X4)       *A0 = ADDRESS OF NEXT WORD 
 GNRNX1       BSS    0
              ENDIF.
            GEN    (BX4 X6) 
          ELSE-              IF WORD IS IN RECORD STORAGE AREA
            GEN    (SA4 A0) 
            SB7    B4+B5       OFFSET+LENGTH
            SB6    60 
            IFTHEN B7\B6     IF NEXT FIELD IS IN NEXT WORD
              GEN    (SA0 A0+B1)
              ENDIF.
            ENDIF.
  
*     ENSURE THAT THE ENTIRE FIELD IS IN *X4
  
                             B4 = NO. OF BITS IN *X4 TO LEFT OF TARGET
                             B5 = LENGTH OF TARGET FIELD
          SB6    60 
          SB7    B6-B4       NUMBER OF BITS OF FIELD IN *X4 
          IFTHEN B7<B5       IF NOT YET ENOUGH
            GEN    (SA3 A0) 
            GEN    (MX0 0),B4 
            GEN    (BX3 X0*X3)
            GEN    (BX4 -X0*X4) 
            GEN    (BX4 X3+X4)
            ENDIF.
  
*     INCREMENT S$LK BY LENGTH OF FIELD 
  
          SA1    S$LK 
          SX6    X1+B5
          SA6    S$LK 
          SX5    B4          RETURN X5 = NO BITS TO LEFT OF FIELD IN *X4
          EXIT
  
  
 S$IRRL   EXTERNAL           NUMBER OF WORDS PER SLOT IN REC STOR AREA
  
 S$LK     EXTERNAL           NUMBER OF BITS OF INFORMATION
                              THAT HAVE BEEN PREVIOUSLY REVERTED
  
 S$LR     EXTERNAL           NUMBER OF BITS RESERVED FOR RECORD NUMBER
  
 S$ORSA   EXTERNAL           WORD OFFSET WITHIN WSA$ OF REC STOR AREA 
  
  
          END 
