*DECK S$GNCNE 
          IDENT  S$GNCNE
          TITLE  S$GNCNE -  GENERATE- COPY NON-KEY TO EXTERNAL
          COMMENT  GENERATE- COPY NON-KEY TO EXTERNAL 
          SPACE  4
**        S$GNCNE -  GENERATE- COPY NON-KEY TO EXTERNAL 
* 
*     CALLING SEQUENCE- 
*         S$GNCNE(OFFSET,LENGTH);#(S$IRRL,S$LK,S$LR,S$OREC,S$ORSA)# 
* 
*     GIVEN-
*         OFFSET = BIT OFFSET OF LEFT-MOST BIT IN EXTERNAL FIELD. 
*          THE FIRST BIT OF THE RECORD IS BIT NUMBER 0. 
*         LENGTH = NUMBER OF BITS IN THE EXTERNAL FIELD.
*         ASC = NON-ZERO IFF SORT ORDER IS ASCENDING. 
*         S$IRRL = NUMBER OF WORDS PER SLOT IN THE RECORD STORAGE AREA. 
*          (USED BY S$GNRNX)
*         S$LK = NUMBER OF BITS OF INFORMATION THAT HAVE BEEN PREVIOUSLY
*          REVERTED.
*         S$LR = NUMBER OF BITS RESERVED FOR RECORD NUMBER. 
*         S$OREC = WORD OFFSET WITHIN WSA$ FOR EXTERNAL RECORD. 
*         S$ORSA = WORD OFFSET WITHIN WSA$ OF RECORD STORAGE AREA.
*          (USED BY S$GNRNX)
* 
*     DOES- 
*         GENERATES CODE. 
*         INCREMENTS S$LK BY THE LENGTH OF THIS INTERNAL FIELD. 
* 
*     GENERATED CODE EXPECTS- 
*         *B1 = 1.
*         *B2 = ADDRESS OF WORKING STORAGE AREA  (WSA$).
*         (IF 1+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.
* 
*     GENERATED CODE DOES-
*         (BASED ON *LENGTH* AND THIS TYPE,)
*             REVERTS THE FIELD STARTING AT BIT 1+S$LR+S$LK AND 
*              PUTS IT IN THE EXTERNAL RECORD AREA (DETERMINED BY 
*              S$OREC) ACCORDING TO *OFFSET* AND *LENGTH*.
* 
*     GENERATED CODE USES-
*         B    * * - - - - -    *B1=1, *B2=WSA$ 
*         X  0 - - 3 4 - * 7    *X6=DESCRIPTOR
*         A  0 - - 3 4 - - 7
  
  
          ENTRY  S$GNCNE
 S$GNCNE  SUBR
          SB1    1           SET B1=1 FOR *GEN* 
          SA2    X1          VALUE OF OFFSET
          SB2    X2          B2 = OFFSET
          SA2    A1+1        ADDRESS OF LENGTH
          SA2    X2          VALUE OF LENGTH
          SB3    X2          B3 = TOTAL LENGTH
  
*     IF NOTHING TO COPY, EXIT
  
          IFTHEN B3=0        IF LENGTH IS ZERO, 
            EXIT               EXIT 
            ENDIF.
  
*     SET B5 := NUMBER OF BITS FOR NEXT PART
  
 GNCNE1   SB6    60 
          SB5    B3 
          IFTHEN B5>B6       IF WANT MORE BITS THAN CAN FIT IN *X4, 
            SB5    60 
            ENDIF.
  
*     PUT THE NEXT PART OF THE NON-KEY IN *X4 
  
                             B5 = LENGTH OF INTERNAL FIELD
                             S$IRRL, S$LR, S$LK, S$ORSA 
          CALL   S$GNRNX               *X4 SET TO CONTAIN INTERNAL FIELD
         *USES   B4,B6,B7,X0,AX1-3,AX6
                             X5 = OFFSET WITHIN *X4 OF INTERNAL FIELD 
                             S$LK INCREMENTED BY B5 
  
*     COPY *X4 TO *X7 
  
          GEN    (BX7 X4) 
  
*     STORE THIS PART FROM *X7 INTO THE EXTERNAL RECORD 
  
                             B2 = OFFSET OF EXTERNAL FIELD
                             B3 = LENGTH OF EXTERNAL FIELD
                             X5 = OFFSET WITHIN *X7 OF EXTERNAL FIELD 
                             S$OREC 
          CALL   S$GNRST               *STORE *X7 IN EXTERNAL RECORD
         *USES   (SAME AS GEN),X4 
  
*    IF MORE PARTS TO COPY, LOOP
  
          SB2    B2+B5       INCREMENT OFFSET BY LENGTH OF LAST PART
          SB3    B3-B5       DECREMENT TOTAL LENGTH BY SIZE OF THIS PART
          NZ     B3,GNCNE1   IF MORE TO COPY, LOOP
  
          EXIT
  
  
          END 
