         SYSTEM   BPM
         SYSTEM   SIG7FDP
         DEF      C:VPL
         REF      C:CFD,C:CDB
         REF      C:ABA
R1       EQU      1
R2       EQU      2
R3       EQU      3
R4       EQU      4
R5       EQU      5
R6       EQU      6
R7       EQU      7
R8       EQU      8
R9       EQU      9
R10      EQU      10
BADJ     RES      2                 BYTE
PARE     RES      1                 END OF PARAM ADDR
PARM     RES      1                 PARAM COUNT
NLTOTL   RES      1                 LENGTH ACCUMULATED
NATOTL   RES      1
VLTOTL   RES      1
VATOTL   RES      1
PARML    RES      1
ADRF     RES      1                 ADDR ADJUST FLAG
WADF     RES      1                 BYTE - WADJ FLAG
DSIZ     RES      1                 DSIZE
DECP     RES      1                 DECP
MXOC     RES      1                 MAX OCCURANCE
SIZE     RES      1                 SIZE OF DATA
SLAK     RES      1                 SLACK BYTE COUNT
ZERO     DATA     0
         DATA     X'F0'
TDBC     RES      5                 INDEX OR SUBSCRIPT INPUT
BSIZ     GEN,8,24 0,BA(TDBC)
BLKRG    GEN,8,24 40,BA(BADJ)
SAVR     RES      15
PPADJ    AI,R7    -4                PARAM POINTER ADJUSTMENT
         AI,R7    4
MASK     AND,R5   L(X'FFFFFFFF')    LENGTH ALIGNMENT
         AND,R5   L(X'FFFFFFFE')
         AND,R5   L(X'FFFFFFFC')
         AND,R5   L(X'FFFFFFF8')
ASLK     DATA,2   0
         DATA,2   1
         DATA,2   3
         DATA,2   7
BCLAS    B        NDSU              NDS
         B        NDSU              NDU
         B        NCSU              NCS
         B        NCSU              NCU
         B        TDBE
         B        TDBE
         B        BIDX              INDEX
         B        BIDX              BIN
         B        FLS               FLS
         B        FLL               FLL
*  THIS RUNLIB CALCULATES THE ADDRESS & LENGTH ADJUSTMENT
*     FOR VARIABLE LENGTH RECORD DATA
*    INPUT  - R7 CONTAINS PARAM ADDR
*    OUTPUT - R7 CONTAINS THE ADDRESS OF BADJ
C:VPL    LCI      15
         STM,R1   SAVR
         LW,R1    BLKRG
         MBS,0    BA(ZERO)          INITIALIZATION
         LW,R9    0,R7              PARAM COUNT
         STW,R9   PARM
         SLS,R9   2                 POINTS TO
         AI,R9    1                     END OF
         AW,R9    R7                        PARAMETER
         STW,R9   PARE
PTR01    LW,R2    1,R7
         BCS,1    PTR02             ADDRESS PARAM
         MTW,4    PARML
         MTW,-1   PARM
         BEZ      VPL01             LENGTH ONLY
         AI,R7    4
         B        PTR01             TO NEXT PARAM
PTR02    LW,R6    PARML
         BEZ      VPL01
         AWM,R6   SAVR+6            LNTH PARAM START ADDR
         AI,R7    -4
VPL01    INT,R2   1,R7              CLASS IN R2, SIZE IN R3
         BCR,8    %+2
         MTW,1    ADRF              VAR ADRESS FLAG
         STH,R3   SIZE
         SLD,R2   -8
         STW,R2   SLAK              SLACK BYTE COUNT
         LB,R2    R3
         LW,R1    L(X'70000000')    GET ALLIGNMENT FLAG
         AND,R1   1,R7
         SCS,R1   4
         STW,R1   WADF              BYTE - WORD ALLIGNMENT FLAG
VPL00    LW,R4    3,R7
         STB,R4   BSIZ              BYTE SIZE
         STW,R4   DSIZ              DIGIT SIZE
         LW,R4    4,R7
         STH,R4   MXOC              MAX OCCURANCE
         STW,R4   DECP              DECIMAL POINT
         LW,4     2,R7              DATA BA
         LW,5     BSIZ
         MBS,4    0
         B        BCLAS-6,R2        BRANCH BY CLASS
FLS      LW,R4    TDBC              FLS TO PACKED DECIMAL
         LI,R5    0
         B        FL01
FLL      LD,R4    TDBC              FLL TO PACKED DECIMAL
FL01     LW,R10   DECP
         BAL,11   C:CFD             CONVERT FL TO PACKED DECIMAL
         BCS,5    TDBE              OVERFLOW OR NEGATIVE
         B        NCSU3
NDSU     LB,R4    BSIZ              NUMERIC DISPLAY
         AI,R4    2
         SLS,R4   -1                L COUNT
         LW,R5    NDSU1
         AND,R5   L(X'FF0FFFFF')
         SLS,R4   20
         OR,R5    R4                TO INSTRUCTION
         STW,R5   NDSU1
         LB,R5    BSIZ
         AND,R5   L(X'1')           CHECK ODD OR EVEN
         AI,R5    -1
NDSU1    PACK,0   TDBC,R5
         B        NCSU2
NCSU     LB,R4    BSIZ              PACKED DECIMAL
         SLS,R4   20
         LW,R5    NCSU1
         AND,R5   L(X'FF0FFFFF')
         OR,R5    R4
         STW,R5   NCSU1
NCSU1    DL,0     TDBC
NCSU2    LH,R10   DECP              DECIMAL POINT
NCSU3    LCW,R10  R10
         STW,R10  DECP
         BEZ      %+4
         DSA      *DECP
         BCS,5    TDBE              NEGATIVE
         LI,R10   0
         BAL,11   C:CDB             PACK DECIMAL TO BINARY
         BCS,5    TDBE              OVERFLOW OR NEGATIVE
         B        VPL02
BIDX     LW,R4    TDBC              BIN OR INDEX
VPL02    MTW,0    R4
         BLZ      TDBE              NEGATIVE ODO DATA
         CH,R4    MXOC
         BLE      VPL03
TDBE     LI,R2    X'99'             ABORT THE JOB
         STB,R2   R10               ODO DATA EXCEEDS MAXIMUM VALUE
         LW,R8    11                SET FOR REL LOC PRINT OUT           VPL
         B        C:ABA
VPL03    LH,R2    MXOC
         MH,R2    SIZE              MAX LENGTH
         MH,R4    SIZE              CURRENT LENGTH
         LW,R2    WADF
         LW,R4    ADRF
         BNEZ     LLNTH
         LW,R8    PARML             LNTH PARAM COUNT
         CI,R8    4
         BG       LLNTH             NOT LAST
         AW,R3    NLTOTL,R4
         AW,R5    VLTOTL,R4
         B        LLNTH1
LLNTH    AW,R3    SLAK              ADD SLAK BYTE
         AWM,R3   NLTOTL,R4         TOTAL NORMAL LNTH
         LW,R3    NLTOTL,R4
         LH,R6    ASLK,R2
         AND,R6   R3                SLACK CARRIED OVER
         SW,R5    R6
         AW,R5    VLTOTL,R4
         AH,R5    ASLK,R2
         EXU      MASK,R2
         AW,R5    R6
         STW,R5   VLTOTL,R4         TOTAL VAR LENGTH
LLNTH1   SW,R3    R5
         STW,R3   BADJ,R4           TOTAL ADJUSTMENT
         EXU      PPADJ,R4
         LI,R4    0
         XW,R4    ADRF              RESET ADRF
         BNEZ     VPL04             FOR ADDR PARAM
         MTW,-4   PARML
         BGZ      VPL01             LNTH PROSSING
         MTW,0    PARM
         BLEZ     VPL05             NO ADDR PARAM
         LW,R7    SAVR+6
         B        VPL01             START ADDR PARAM
VPL04    MTW,-1   PARM
         BGZ      VPL01             NEXT ADDR PARAM
VPL05    LCI      15
         LM,R1    SAVR
         LI,R7    BADJ
         B        *11
         END
