*DECK S$GNCVE 
          IDENT  S$GNCVE
          TITLE  S$GNCVE -  GENERATE- COPY VARIABLE PART TO EXTERNAL RECORD 
          COMMENT  GENERATE- COPY VARIABLE PART TO EXTERNAL 
  
*CALL LBLPTR
  
          SPACE  4
**        S$GNCVE -  GENERATE- COPY VARIABLE PART TO EXTERNAL RECORD
* 
*     CALLING SEQUENCE- 
*         S$GNCVE(SPEC$MNR);#(S$IRRL,S$LK,S$LR,S$OREC,S$ORSA)#
* 
*     GIVEN-
*         SPEC$MNR = NUMBER OF CHARACTERS IN FIXED-LENGTH PART
*          OF EXTERNAL 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$OREC = WORD OFFSET FROM WSA$ FOR EXTERNAL RECORD. 
*         S$ORSA = WORD OFFSET FROM WSA$ OF RECORD STORAGE AREA.
* 
*     DOES- 
*         GENERATES CODE. 
*         DOES *NOT* INCREMENT S$LK BY NUMBER OF REVERTED BITS. 
* 
*     GENERATED CODE EXPECTS- 
*         (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 2+S$LR+S$LK. 
*         "ORECLEN" = TOTAL LENGTH THAT THE EXTERNAL RECORD WILL BE.
* 
*     GENERATED CODE DOES-
*         APPENDS ("ORECLEN" - SPEC$MNR) CHARACTERS TO THE END OF THE 
*          EXTERNAL RECORD (WSA$ + S$OREC) FROM THE INTERNAL RECORD.
  
  
          ENTRY  S$GNCVE
 S$GNCVE  SUBR
          SB1    1           CONSTANT 1 
          SA2    X1          X2 = VALUE OF SPEC$MNR 
          SB2    X2          B2 = SPEC$MNR
  
*     X2 = SPEC$MNR 
*     B2 = SPEC$MNR 
*     SET B3 = LEFT-SHIFT COUNT TO STORE FIELD
*     SET *X1 = MASK TO STORE FIELD 
*     SET *B4 = WORD OFFSET FROM WSA$ TO EXTERNAL FIELD 
*     SET *B5 = WORDS LEFT TO COPY
*     SET B5 = 60 
  
************************************************
* 
* SET UP SOME CONSTANTS ASSOCIATED WITH MNR 
*  ON EXIT, X4 = (MNR/10) = WORD OFFSET 
*           X3 = 10 - ( MNR MOD 10 ) OR NUMBER OF CHARACTERS TO SHIFT 
*           B3 = 6 * X3 OR NUMBER OF BITS TO SHIFT
* 
* 
************************************************
          SX4    10          INTEGER 10 
          PX4    X4,B0       FLOATING POINT 10
          NX4                  (NORMALIZED) 
  
          SX3    B2          X3 = INTEGER MNR 
          PX3    X3,B0       FLOATING POINT MNR 
          NX3                  (NORMALIZED) 
  
          FX4    X3/X4       FLOATING POINT MNR/10
          UX4    X4,B7       UNFLOAT IT 
          LX4    B7          INTEGER MNR/10 
          BX7    X4          PUT THIS IN X7 TEMPORARILY 
          SX5    10          INTEGER 10 
          IX4    X4*X5       INTEGER MNR/10*10
          SX3    B2          X3 = INTEGER MNR 
          IX5    X3-X4       MNR MOD 10 
          SX4    10 
          IX3    X4-X5       10- (MNR MOD 10) 
          SX4    6
          IX5    X4*X3       NUMBER OF BITS TO SHIFT
          SB3    X5          B3 = NUMBER OF BITS TO SHIFT 
          BX4    X7          X4 = MNR/10
************************* 
* END SETTING UP MNR CONSTANTS
************************* 
          IFTHEN B3"0        IF NOT WORD-ALIGNED, 
            SB6    60 
            SB7    B6-B3
            GEN    (MX1 0),B7          *X1 = MASK TO STORE FIELD
           *USES   B6,B7,X0,AX1-3,AX6 
            ENDIF.
          SA1    S$OREC      WORD OFFSET FROM WSA$ TO START OF EXT
          IX1    X1+X4       WORD OFFSET FROM WSA$ TO FIRST VAR WORD
          GEN    (SB4 0),X1            *B4 = WORD OFFSET TO FIRST VAR WORD
          GEN    (SA4 "ORECLEN")       *CHAR LEN OF OREC
          SX2    B2          SPEC$MNR 
          BX1    -X2         -MNR 
          SX1    X1+9        -MNR + 9 
          MX0    -17
          BX2    -X0*X1      43/0, 17/-MNR+9
          IFTHEN X1<0 
            GEN    (SX4 X4+400000B),X2  *("ORECLEN" - MNR) + 9
          ELSE- 
            GEN    (SX4 X4+0),X2        *("ORECLEN" - MNR) + 9
            ENDIF.
          GEN    (SX0 1S20/10+1)
          GEN    (IX4 X4*X0)
          GEN    (AX4 20) 
          GEN    (SB5 X4) 
          SB5    60 
  
          NEWLBL VAR1 
          GENLBL VAR1 
  
*     *EXTRACT 60 BITS FROM INTERNAL RECORD 
  
                             S$IRRL, S$LR, S$LK, S$ORSA 
                             B5 = LENGTH OF FIELD TO EXTRACT
          CALL   S$GNRNX
         *USES   B4,B6,B7,X0,AX1-3,AX6 *USES AX0,AX3-4
                                       *X4 = WORD CONTAINING FIELD
                             X5 = NUMBER OF BITS TO LEFT OF TARGET
                              FIELD IN *X4. 
  
          IFTHEN X5"0        IF NOT LEFT-JUSTIFIED, 
            GEN    (LX4 0),X5 
            GEN    (MX0 0),X5 
            ENDIF.
  
          IFTHEN B3=0        IF TARGET IS LEFT-JUSTIFIED, 
            GEN    (BX7 X4) 
            GEN    (SA7 B2+B4)
          ELSE- 
            GEN    (LX4 0),B3          *ALIGN WITH TARGET 
            GEN    (SA3 B2+B4)
            GEN    (BX3 X1*X3)         *CLEAR IN CASE LAST WORD 
            GEN    (BX7 -X1*X4)        *RH FIRST WORD 
            GEN    (BX7 X3+X7)         *FIRST WORD
            GEN    (SA7 A3) 
            GEN    (BX7 X1*X4)         *LH SECOND WORD
            GEN    (SA7 A3+B1)
            ENDIF.
          NEWLBL VAR2 
          GEN    (EQ "VAR2")
  
  
*     EXTRACT NEXT 60 BITS FROM INTERNAL RECORD 
  
          NEWLBL VAR1 
          GENLBL VAR1 
  
          IFTHEN X5"0        IF NOT LEFT-JUSTIFIED, 
            GEN    (SA4 A0) 
            GEN    (SA0 A0+B1)
            GEN    (SA5 A0) 
            GEN    (BX4 -X0*X4) 
            GEN    (BX5 X0*X5)
            GEN    (BX4 X5+X4)
            GEN    (LX4 0),X5 
          ELSE-              IF LEFT-JUSTIFIED, 
            GEN    (SA4 A0) 
            GEN    (SA0 A0+B1)
            ENDIF.
  
*     APPEND 60 BITS TO EXTERNAL RECORD 
  
          IFTHEN B3=0        IF TARGET IS LEFT-JUSTIFIED, 
            GEN    (BX7 X4) 
            GEN    (SA7 B2+B4)
          ELSE- 
            GEN    (LX4 0),B3          *ALIGN WITH TARGET 
            GEN    (SA3 B2+B4)
            GEN    (BX3 X1*X3)         *CLEAR IN CASE LAST WORD 
            GEN    (BX7 -X1*X4)        *RH FIRST WORD 
            GEN    (BX7 X3+X7)         *FIRST WORD
            GEN    (SA7 A3) 
            GEN    (BX7 X1*X4)         *LH SECOND WORD
            GEN    (SA7 A3+B1)
            ENDIF.
  
          GENLBL VAR2 
          GEN    (SB4 B4+B1)           *INCREMENT OFFSET
          GEN    (SB5 B5-B1)           *DECREMENT COUNT 
          GEN    (GT B5,B0,"VAR1")     *LOOP IF MORE WORDS TO COPY
  
          EXIT
  
  
 S$OREC   EXTERNAL
  
  
          END 
