*DECK S$GNCNI 
          IDENT  S$GNCNI
          TITLE  S$GNCNI -  GENERATE- COPY NON-KEY TO INTERNAL RECORD 
          COMMENT  COPY NON-KEY TO INTERNAL RECORD
  
*CALL LBLPTR
  
          SPACE  4
**        S$GNCNI -  GENERATE- COPY NON-KEY TO INTERNAL RECORD
* 
*     CALLING SEQUENCE- 
*         S$GNCNI(OFFSET, LENGTH);
* 
*     GIVEN-
*         OFFSET = NUMBER OF BIT STARTING THE KEY FIELD IN THE
*          EXTERNAL RECORD.  THE FIRST BIT IS NUMBER 0. 
*         S$IRRL = LENGTH OF SLOT IN RECORD STORAGE AREA (REC$IRRL).
*         LENGTH = LENGTH OF FIELD TO APPEND TO INTERNAL RECORD.
*         S$LK = NUMBER OF BITS OF INFORMATION THAT HAVE BEEN 
*          PREVIOUSLY APPENDED.   (USED BY S$GNAPN) 
*         S$OREC = WORD OFFSET WITHIN WSA$ OF EXTERNAL RECORD.
*          (USED BY S$GNIWD)
*         S$ORSA = WORD OFFSET WITHIN WSA$ OF RECORD STORAGE AREA.
*          (USED BY S$GNAPN)
*         S$LR = NUMBER OF BITS RESERVED FOR RECORD NUMBER (REC$LR).
*          (USED BY S$GNAPN)
* 
*     DOES- 
*         GENERATES CODE. 
*         INCREMENTS S$LK BY LENGTH.
* 
*     GENERATED CODE EXPECTS- 
*         "RECDESC" = DESCRIPTOR FOR THIS RECORD, 
*           CONTAINING THE RECORD NUMBER. 
*         "WSA" = ADDRESS OF WORKING STORAGE AREA (WSA$). 
  
*         (IF S$LK " 0,)
*             *X6 = CURRENT VALUE OF KEY, 
*             REVERTS THE FIELD STARTING AT BIT 1+1+S$LR+S$LK AND 
*               (EXCEPT 0 MEANS 60).
* 
*    GENERATED CODE DOES- 
*         APPENDS THE INDICATED FIELD TO THE INTERNAL RECORD. 
  
*     NOTE- 
*         THE ABOVE PHRASES ENCLOSED IN PARENTHESES INDICATE
*         DECISIONS OR ACTIONS DONE AT CODE GENERATION TIME RATHER
*         THAN EXECUTION TIME.
* 
*     GENERATED CODE USES-
*         B    * * - - - - - *B1=1, B2=WSA$ 
*         X  - - - 3 4 5 6 -
*         A  - - - 3 - 5 6 -
* 
*     S$GNCNI USES- 
*         B    * 2 3 4 5 6 7 *B1=1
*         X  0 1 2 3 - 5 6 -
*         A  - 1 2 3 - - 6 -
  
  
  
          ENTRY  S$GNCNI
 S$GNCNI  SUBR
          SB1    1           B1 = CONSTANT 1
          SA2    X1          VALUE OF OFFSET
          SB2    X2          B2 = OFFSET
          SA2    A1+1        ADDRESS OF LENGTH
          SA2    X2          VALUE OF LENGTH
          SB3    X2          B3 = LENGTH
  
          IFTHEN B3@0        IF LENGTH IS ZERO OR NEGATIVE
                             -NEGATIVE FOR OVERLAPPING KEYS 
_____       EXIT               EXIT 
            ENDIF.
  
                             B2 = OFFSET OF FIELD WITHIN RECORD 
          CALL   S$GNIWD               *GET WORD FOR INVERSION
         *USES   B1=1,B6,B7,X0,AX1-3,X5,AX6   *B2=WSA$, *AX5
                                       *X5 = ADDRESS OF (FIRST) WORD
                                       *X5 = (FIRST) WORD 
                             X5 = BIT OFFSET OF FIELD WITHIN WORD 
          SB2    X5 
  
 GNCNI1   SB6    60 
          SB4    B6-B2       BITS LEFT IN *X4 
          IFTHEN B4>B3       IF FIELD ENDS BEFORE END OF *X4
            SB4    B3          B4 := LENGTH OF FIELD
            ENDIF.
                             B4 = LENGTH OF FIELD WITHIN *X4
          GEN    (BX4 X5) 
          GNAPN  B2,B4                 *APPEND B4 BITS FROM *X4 WITH
                                         B2 UNUSED BITS ON THE LEFT 
          SB3    B3-B4       DECREASE TOTAL LENGTH BY APPENDEE
          IFTHEN B3>0        IF MORE TO COPY, 
            GEN    (SA5 A5+B1)         *GET NEXT WORD FROM EXTERNAL REC.
            SB2    0           0 UNUSED BITS ON LEFT
_____       EQ     GNCNI1    GO COPY FIELD FROM *X5 
            ENDIF.
          EXIT
  
          END 
