*DECK S$GNCVI 
          IDENT  S$GNCVI
          TITLE  S$GNCVI -  GENERATE- COPY VARIABLE PART TO INTERNAL
          COMMENT  GENERATE- COPY VARIABLE PART TO INTERNAL 
  
*CALL LBLPTR
  
          SPACE  4
**        S$GNCVI -  GENERATE- COPY VARIABLE PART TO INTERNAL 
* 
*     CALLING SEQUENCE- 
*         S$GNCVI(SPEC$MNR);#(S$IRRL,S$LK,S$LR,S$OREC,S$ORSA)#
* 
*     GIVEN-
*         SPEC$MNR = NUMBER OF CHARACTERS PREVIOUSLY INCORPORATED.
*         S$IRRL = LENGTH OF SLOT IN RECORD STORAGE AREA (REC$IRRL).
*         S$LK = NUMBER OF BITS OF INFORMATION THAT HAVE BEEN 
*          PREVIOUSLY APPENDED. 
*         S$LR = NMUMBER OF BITS RESERVED FOR RECORD NUMBER  (REC$LR).
*         S$OREC = WORD OFFSET FROM WSA$ FOR EXTERNAL RECORD. 
*         S$ORSA = WORD OFFSET WITHIN WSA$ OF RECORD STOREAGE AREA. 
* 
*     DOES- 
*         GENERATES CODE. 
* 
*     GENERATED CODE EXPECTS- 
*         "ORECLEN" = CHARACTER LENGTH OF ENTIRE EXTERNAL RECORD. 
* 
*     GENERATED CODE DOES-
*         COPIES THE REMAINDER OF THE VARIABLE-LENGTH RECORD
*          TO THE END OF THE INTERNAL RECORD. 
* 
*     GENERATED CODE USES-
  
  
  
  
          ENTRY  S$GNCVI
 S$GNCVI  SUBR
          SB1    1           CONSTANT 1 
          SA2    X1          VALUE OF SPEC$MNR
          SB2    X2          B2 = SPEC$MNR
  
*     GET THE NUMBER OF CHARACTERS TO APPEND
  
          GEN    (SA1 "ORECLEN")       *+TOTAL CHARS IN OREC
         *USES    B6,B7,X0,AX1-3,AX6
          SX2    -B2         -MNR 
          MX0    -17
          BX1    -X0*X2      43/0, 17/-MNR
          IFTHEN X2<0 
            GEN    (SB7 X1+400000B),X1 *"ORECLEN" - MNR 
          ELSE- 
            GEN    (SB7 X1+0),X1       *"ORECLEN" - MNR 
            ENDIF.
* 
* 
  
          NEWLBL NEXT 
          NEWLBL VBITS
          SA1    S$LK 
          BX7    X1 
          SA7    HOLDLK      HOLD CORRECT VALUE OF S$LK 
          GEN    (SX7 0),X1  *X1 := S$LK *BEFORE* GNCVI 
          GEN    (SA7 "VBITS")
          GEN    (EQ "NEXT")
          GENLBL VBITS
          GENMAC (DATA 0) 
          GENLBL NEXT 
  
*     GET FIRST WORD
  
          SB7    B2+B2       2*MNR
          SB6    B7+B7       4*MNR
          SB2    B6+B7       6*MNR
                             B2 = BIT OFFSET FROM OREC
          CALL   S$GNIWD
         *USES    B6,B7,X0,AX1-3,X5,AX6 *X5 = WORD WITH BIT B2
                                       *A5 = ADDRESS OF *X5 
                             X5 = BIT OFFSET WITHIN *X5 
  
*    ENSURE 60 BITS, LEFT-JUSTIFIED 
  
          IFTHEN X5"0        IF NOT LEFT-JUSTIFIED, 
            GEN    (MX0 0),X5 
            GEN    (BX4 -X0*X5) 
            GEN    (SA5 A5+B1)
            GEN    (BX1 X0*X5)
            GEN    (BX4 X1+X4)
            GEN    (LX4 0),X5 
          ELSE- 
            GEN    (BX4 X5) 
            ENDIF.
  
*     APPEND FIRST WORD, WHICH MAY SET *A0
  
          NEWLBL VAR2 
          GEN    (LE B7,B0,"VAR2")
          GEN    (SA1 "VBITS")
          GEN    (SX2 60) 
          GEN    (IX7 X1+X2) VBITS := VBITS + 60
          GEN    (SA7 "VBITS")
          GNAPN  0,60                  *APPEND 60 BITS FROM *X4 WITH
         *USES    B5-7,X0,AX1-3,AX6      0 UNUSED BITS ON LEFT
                                       *USES AX3,X4,AX6 
  
*         APPEND ANOTHER WORD IF NECESSARY
*         ( DETERMINE IF NECESSARY AT EXECUTION TIME, BUT 
*           GENERATE THE CODE NOW ) 
  
          GEN    (SB7 B7-10) *DECREMENT CHARS LEFT
          GEN    (LE B7,B0,"VAR2")   *IF DONE,SKIP
          CALL   GNGET60
          GEN    (SA1 "VBITS")
          GEN    (SX2 60) 
          GEN    (IX7 X1+X2) VBITS := VBITS + 60
          GEN    (SA7 "VBITS")
  
          GNAPN  0,60 
  
          GEN    (SB7 B7-10) DECREMENT CHARS LEFT 
          GEN    (LE B7,B0,"VAR2")   *IF DONE, SKIP 
          NEWLBL VAR1 
          GENLBL VAR1 
  
*     GET NEXT 60 BITS, LEFT-JUSTIFIED
  
          CALL   GNGET60               *SET *X4 = 60 BITS, L.J. 
  
*     APPEND THE NEXT 60 BITS 
  
          GEN    (SA1 "VBITS")
          GEN    (SX2 60) 
          GEN    (IX7 X1+X2) VBITS := VBITS + 60
          GEN    (SA7 "VBITS")
                                       *A0 = SET TO ADDRESS 
          GNAPN  0,60                  *APPEND 60 BITS FROM *X4 WITH
                                         0 UNUSED BITS ON THE LEFT
  
*     DECREMENT CHARACTER COUNT AND POSSIBLY LOOP 
  
          GENLBL VAR2 
          GEN    (SB7 B7-10)
          GEN    (GT B7,B0,"VAR1")
*         RESTORE CORRECT VALUE OF S$LK AFTER 
*         WE HAVE MASSACRED IT
  
          SA1    HOLDLK 
          BX7    X1 
          SA7    S$LK 
  
          EXIT
          SPACE  4
 GNGET60  SUBR
          IFTHEN X5"0        IF NOT LEFT-JUSTIFIED, 
            GEN    (BX4 -X0*X5) 
            GEN    (SA5 A5+B1)
            GEN    (BX1 X0*X5)
            GEN    (BX4 X1+X4)
            GEN    (LX4 0),X5 
          ELSE- 
            GEN    (SA5 A5+B1)
            GEN    (BX4 X5) 
            ENDIF.
          EXIT
  
  
 S$LK     EXTERNAL           NUMBER OF BITS OF INFORMATION THAT HAVE
                             BEEN PREVIOUSLY INVERTED 
  
 S$LR     EXTERNAL           NUMBER OF BITS RESERVED FOR RECORD NUMBER
  
HOLDLK    BSS    1    HOLD CORRECT VALUE OF S$LK
  
          END 
