*DECK XREAD 
          IDENT  XREAD
 XREAD    TITLE  XREAD AND XREREAD MAIN ROUTINES
* 
**    XREAD,XREREAD - USER CALLABLE ROUTINES TO READ (READ) 
*                  AN EXTENDED CODE FILE
* 
*         INPUT  -  A1 = LOC. OF FORTRAN OR COBOL TYPE PARAMETER LIST 
*                   X1 = FIRST PARAMETER WORD 
* 
*         OUTPUT -  X6 = RETURN STATUS VALUE (NORMALIZED FLOATING PT.)
*                   X7 = 0
* 
*         PRESERVED  --, --, --, --, --, --, --, -- 
*                    A0, --, --, --, --, --, --, -- 
*                        --, --, --, --, --, --, -- 
* 
*CALL COM2
          B1=1
 SKIP     EQU    1
          SST 
          SPACE  4
 TC.XRD   VFD    42/5HXREAD,18/XREAD    TRACEBACK WORD FOR XREAD
 RD.XIT   SA1    T.STATW     STATUS RETURN ADDRESS
          SA2    T.SAVEA0    RESTORE A0 
          NX6    X5 
          SX7    B0 
          SA6    A0+W.STATUS
          SA0    X2 
          ZR     X1,XREAD    NO STATUS CELL GIVEN, DONT STORE 
          SA6    X1 
* 
 XREAD    JP     400000B+*   ENTRY POINT
 +        SX7    TC.XRD      TRACEBACK INFO 
          SX6    RD.XIT 
          SB6    RD.1 
          SA6    T.SAVEB6 
          EQ     CHKPAR      CRACK PARAMETERS 
 RD.1     SA1    A0          CHECK READ FLAG
          SA2    A0+W.FTYP   FETCH FILE TYPE
          NG     X1,RD.E1    ERROR, NOT A READ FILE 
          MX0    60-6 
          AX2    S.FTYP 
          SX7    B0 
          BX2    -X0*X2 
          SA7    A0+W.PREV   ZERO PREVIOUS RECORD POINTER 
          SX5    X2-1RT      CHECK FOR TAPE 
          ZR     X5,RD.TAPE  JP YES 
* 
          SX1    X1 
          STORE  X1,EX=RD.ERR  SET UP ERROR EXIT
          SA1    A0 
          SX1    X1 
          FETCH  X1,OC,X5    FETCH OPEN-CLOSE FLAG
          SA1    A0 
          SX1    X1 
          SX5    X5-#OPE# 
          ZR     X5,RD.2     FILE IS OPEN 
* 
          OPENM  X1,I-O,N      OPEN THE FILE                            0005   5
* 
          SA1    T.A0 
          SA0    X1 
          SA1    X1 
          SX1    X1 
          FETCH  X1,MRL,X7
          NZ     X7,RD.1A 
          SA1    A0 
          SX1    X1 
          STORE  X1,MRL=L.CARD  DEFAULT MRL 
          SX7    L.CARD 
* 
 RD.1A    SA1    A0 
          SX1    X1 
          STORE  X1,RL=X7    PRESET IN CASE RT=U
* 
          SA1    A0 
          SX1    X1 
 RD.2     SA2    A0+W.BUFR   GET BLOCK BUFFER ADDRESS 
          SX2    X2 
* 
          GETP   X1,X2,L.CARD,RD.END,,SKIP,SQ 
* 
          SA2    T.A0 
          SA1    X2          GET FIT ADDRESS
          SA0    X2 
          SX1    X1 
          STORE  X1,EX=RD.ERRX
          SA1    A0 
          SX1    X1 
          STORE  X1,DX=0
          SA1    A0 
          SX1    X1 
          FETCH  X1,PTL,X5   GET RECORD LENGTH
* 
          SA1    A0+W.BUFR   BUILD RECORD POINTER 
          AX5    1           MAKE SIZE *2-CHARACTERS
          IX6    X5+X5       CONVERT TO BITS
          SX7    X1          BLOCK ADDRESS
          IX5    X5+X6
          LX5    4+36 
          BX6    X5+X7
* 
 RD.GO    SA6    A0+W.PREV
 RD.GO.1  SA2    T.USEREC    USER RECORD POINTER
          SA6    T.INREC
          SA1    T.CSTR      CONVERSION STRING POINTER
          BX7    X2 
          SX5    B0          PROVISIONAL STATUS OF 0
          ZR     X2,RD.XIT   BYPASS RECORD
          ZR     X1,RD.NOC   NO CONVERSION SPECIFIED
* 
          MX0    36 
          BX2    X0*X6       SIZE OF INPUT RECORD 
          ZR     X2,RD.3     NO CONVERSION IF NO LENGTH 
          SA7    T.OUTREC    CONVERT THE RECORD AND RETURN
          SB6    RD.4 
          SB7    B0 
          EQ     PARSE
* 
* TREAT NO-CONVERSION AS DEFAULT FOR B-B
* 
 RD.NOC   SA2    T.INREC     SOURCE 
          SB6    RD.3 
          BX1    X2 
          AX2    36          NUMBER OF BITS TO MOVE = SOURCE SIZE 
          EQ     MVBITS 
 RD.3     SA7    T.OUTREC 
          SX5    0           OK RETURN CODE 
 RD.4     SA2    T.OUTREC    WHATS LEFT OF OUTPUT AREA
          SA1    T.USEREC    ORIGINAL OUTPUT AREA 
          MX0    36 
          BX2    X0*X2       BITS LEFT IN OUTPUT AREA 
          IX7    X1-X2       DESCRIPTOR FOR ACTUAL OUTPUT RECORD
          SA7    A2          SAVE IT FOR OTHERS (FORM)
          EQ     RD.XIT 
* 
          SPACE  2
* 
* REREAD A RECORD 
* 
 TC.XRE   VFD    42/7HXREREAD,18/XREAD  TRACEBACK INFO
          EQ     RD.XIT      RETURN THROUGH XREAD 
* 
 XREREAD  JP     400000B+*   ENTRY POINT
 +        SA5    XREREAD
          SX7    TC.XRE 
          SB6    RE.1 
          BX6    X5 
          SA6    XREAD
          EQ     CHKPAR      CRACK PARAMETERS 
 RE.1     SA1    A0          CHECK READ FLAG
          SA5    A0+W.STATUS GET PREVIOUS STATUS
          NG     X1,RD.E1    ERROR, NOT A READ FILE 
          NG     X5,RD.XIT   IMMEDIATE EXIT, NO DATA
          UX6    X5,B2
          LX6    X6,B2
          SX6    X6-2 
          PL     X6,RD.XIT   LIKEWISE, PREVIOUS FILE ERROR
          SA4    A0+W.PREV   PICK UP LAST RECORD
          BX6    X4 
          EQ     RD.GO.1     AND RE-CONVERT 
* 
          SPACE  2
* 
* READ A RECORD FROM TAPE 
* 
 RD.TAPE  NZ     X5,RD.XIT   EXIT ON ERROR OR NO INFORMATION
          SA2    A0+W.RESBLK
          SB6    RD.TAPE
          BX7    X2 
          AX2    36          BITS IN CURRENT BLOCK
          ZR     X2,RDBLOCK  GET A NEW BLOCK
* 
          SA1    A0+W.TPAR   GET RECFM
          SX2    X1 
          LX2    60-2 
          SB2    X2-1 
          EQ     B1,B2,RDT.V  JP RECFM=V
          LT     B1,B2,RDT.U  JP RECFM= U 
* 
          AX1    S.LRECL     RECFM = F
          BX6    X7 
          SX1    X1          LRECL (CHARS)
          AX6    36          BITS LEFT IN THIS BLOCK
          LX1    3           LRECL (BITS) 
          IX6    X6-X1       =NEW BLOCKSIZE 
          NG     X6,RDBLOCK  NOT ENOUGH DATA LEFT IN BLOCK
* 
 RDT.B    MX5    60-36       MAKE UP RECORD POINTER AND ADVANCE BLOCK 
          LX1    36 
          BX7    -X5*X7 
          LX2    2-1         CHECK FOR BLOCKING 
          IX0    X1+X7       NEW RECORD POINTER 
          NG     X2,RDT.B0   JP BLOCKING
          SX6    B0 
 RDT.B0   ZR     X6,RDT.B3   JP NO RESIDUAL BLOCK 
          LX1    60-36
          SX5    X7          =WORD
          AX7    18          =USED BIT COUNT
          SX3    60 
          IX7    X7+X1       USED BITS, REDUCE MODULO 60
 RDT.B1   IX4    X7-X3
          NG     X4,RDT.B2
          SX5    X5+B1
          BX7    X4 
          EQ     RDT.B1 
 RDT.B2   LX6    36 
          IX6    X6+X5
          LX7    18 
          BX7    X6+X7       NEW BLOCK POINTER NOW IN X7
 RDT.B3   SA7    A0+W.RESBLK
          BX6    X0          RECORD POINTER 
          EQ     RD.GO
* 
* RECFM = U 
* 
 RDT.U    AX1    S.LRECL     MAX REC LENGTH 
          BX6    X7 
          SX1    X1          LRECL(CHARS) 
          AX6    36          BITS LEFT IN BLOCK 
          LX1    3           LRECL (BITS) 
          IX6    X6-X1       =NEW BLOCKSIZE 
          PL     X6,RDT.B    O.K. 
          IX1    X6+X1       BLOCK SMALLER THAN LRECL, USE WHAT IS THERE
          SX6    B0 
          EQ     RDT.B
* 
          SPACE  2
* 
* RECFM = V 
* 
 RDT.V    BX1    X7          BLOCK POINTER
          SX6    B0 
          AX7    36          REMAINING BLOCK SIZE 
          SA6    A0+W.RESBLK FORCE NEW BLOCK IF ERROR 
          SX2    32 
          SB6    RDT.1
          IX7    X7-X2
          PL     X7,NXBITS
          EQ     RD.E2       ERROR, FUZZ AT END OF BLOCK
 RDT.1    LX6    60-16       SIZE 
          SX1    X6-32/8     RECORD SIZE (BYTES)
          MX0    60-2        =-3
          NG     X1,RD.E3    ERROR, RECORD LENGTH .LT. 0
          LX6    16-8        GET SDW BYTE 
          BX0    -X0*X6 
          LX1    3           RECSIZE (BITS) 
          BX5    X7 
          SA2    A0+W.TPAR
          AX5    36          CURRENT BLOCK REMAINDER
          IX6    X5-X1       NEW BLOCK RESIDUE
          NG     X6,RD.E4    RECORD BIGGER THAN REMAINING BLOCK 
          LX2    60-2        POSITION -S- BIT 
          NZ     X0,RDT.VS   JP VS RECORD 
* 
          LX2    2+60-S.LRECL  MAKE UP RECORD POINTER 
          MX5    60-36
          SX3    X2 
          LX1    36 
          BX7    -X5*X7 
          LX2    S.LRECL-1   CHECK FOR BLOCKING 
          IX0    X1+X7       NEW RECORD POINTER 
          LX3    3+36        MAX REC SIZE 
          IX4    X0-X3
          NG     X4,RDT.2 
          IX0    X3+X7       RECORD TOO BIG, USE LRECL
 RDT.2    NG     X2,RDT.B0   JP BLOCKING
          NZ     X6,RD.E7 
          EQ     RDT.B3      JP TO JOIN POINTER FIXUP 
* 
          SPACE  2
* 
* RECFM = VS AND FLAG NOT 00 (A REAL SPANNED RECORD)
* 
 RDT.VS   PL     X2,RD.E5    VS NOT SPECIFIED BY USER 
          NZ     X6,RD.E8    DATA AFTER SEGMENT 
          AX0    1
          SA3    A0+W.BUFR
          LX2    2+60-S.LRECL 
          NZ     X0,RD.E6    NOT INITIAL (01) SEGMENT 
          SX5    X2          LRECL
          AX3    S.RECAD
          SX2    X1          SIZE OF THIS SEGMENT 
          LX5    3+36        LRECL (BITS) 
          BX1    X7          SOURCE (BLOCK) 
          SX3    X3 
          IX7    X3+X5       DESTINATION (RECORD AREA)
          SB6    RDT.3
          EQ     MVBITS 
* 
 RDT.3    SA7    T.MPTR      SAVE RECORD POINTER
          SB6    RDT.4
          EQ     RDBLOCK     GET NEXT BLOCK/SEGMENT 
 RDT.4    NZ     X5,RD.E9    INCOMPLETE VS RECORD 
          SX6    B0 
          BX1    X7 
          SA6    A0+W.RESBLK
          AX7    36          BLOCK SIZE 
          ZR     X7,RD.E10   BLOCK EMPTY
          SX2    32 
          SB6    RDT.5
          IX3    X7-X2
          PL     X2,NXBITS
          EQ     RD.E2       LESS THAN 32 BITS IN BLOCK 
 RDT.5    LX6    60-16
          MX0    60-2        =-3
          SX2    X6-32/8     SEGMENT SIZE (CHARS) 
          LX6    16-8        GET SDW BYTE 
          NG     X2,RD.E3    LENGTH LESS THAN 4 BYTES 
          BX1    X7          RESIDUAL BLOCK POINTER 
          AX7    36          RESIDUAL BLOCK SIZE
          BX6    -X0*X6      SDW
          LX2    3           SEGMENT SIZE (BITS)
          BX0    X0-X6
          IX6    X7-X2       BLOCK-SEGMENT SIZE 
          NG     X6,RD.E4    SEGMENT EXCEEDS BLOCK
          NZ     X0,RDT.F    FINAL SEGMENT
          NZ     X6,RD.E8    DATA AFTER VS SEGMENT
          SA5    T.MPTR      RECORD POINTER 
          SB6    RDT.3
          BX7    X5 
          EQ     MVBITS      MOVE THE SEGMENT 
* 
 RDT.F    AX0    1           VS FINAL SEGMENT 
          BX5    X1 
          NZ     X0,RD.E11   NOT A FINAL (10) SEGMENT 
          ZR     X6,RDT.8    BLOCK EMPTY
          SA3    A0+W.TPAR
          AX5    18 
          SX6    X1          =WORD ADDRESS
          LX3    60-1 
          SX5    X5 
          PL     X3,RD.E7    EXTRA DATA IN UNBLOCKED FILE 
          SX4    60 
          IX5    X2+X5       USED BITS
 RDT.6    IX3    X5-X4       ADJUST BLOCK POINTER 
          NG     X3,RDT.7 
          SX6    X6+B1       ADJUST WORD
          BX5    X3          ADJUST USED BITS 
          EQ     RDT.6
 RDT.7    LX5    18 
          IX7    X7-X2       RESIDUAL BITS
          BX6    X5+X6
          LX7    36 
          IX6    X6+X7
 RDT.8    SA5    T.MPTR      GET RECORD POINTER 
          SA6    A0+W.RESBLK SAVE BLOCK POINTER 
          SB6    RDT.9
          BX7    X5 
          EQ     MVBITS      MOVE LAST SEGMENT
 RDT.9    SA1    A0+W.TPAR   GET LRECL
          SA2    A0+W.BUFR   GET RECORD ADDRESS 
          AX1    S.LRECL     LRECL (CHARS)
          SX1    X1 
          AX7    36+3        UNUSED AREA (CHARS)
          IX7    X1-X7       USED AREA (CHARS)
          AX2    S.RECAD     STARTING ADDRESS 
          SX2    X2 
          LX7    36+3 
          BX6    X2+X7
          EQ     RD.GO       GO PROCESS RECORD
* 
          SPACE  4,24 
* 
* RDBLOCK - READ ANOTHER BLOCK FROM A TAPE-LIKE DEVICE
* 
*         INPUT  -  B1 = 1
*                   B6 = RETURN ADDRESS 
*                   A0 = WSA
* 
*         OUTPUT -  X5 = RETURN FLAG   +2.0 = ERROR ON FILE (GOES TO
*                                       0.0 = O.K.              ERROR)
*                                      -1.0 = END-OF-SECTION
*                                      -2.0 = END-OF-PARTITION
*                                      -3.0 = END-OF-INFORMATION
*                   X7 = RESIDUAL BLOCK POINTER  (0 IF X5 IS NOT 0) 
* 
*                   A0+W.RESBLK = RESIDUAL BLOCK POINTER
* 
*         PRESERVED --, --, --, --, --, --, --, --
*                   A0, --, --  --  --  --  --  --
*                       B1, --, --, --, --, B6, --
* 
* 
*         TEMPORARY CELLS USED..   T.SAVEB6, T.A0 
* **
          SPACE  4
 RDBLOCK  SX6    B6          SAVE B6 VALUE
          SA1    A0          GET FIT ADDRESS
          SA6    T.SAVEB6 
          SX1    X1 
          STORE  X1,EX=RD.ERR  SET UP ERROR EXIT
          SA1    A0 
          SX1    X1 
          FETCH  X1,OC,X5    GET OPEN-CLOSE FLAG
          SA1    A0 
          SX1    X1 
          SX5    X5-#OPE# 
          ZR     X5,RDB.0    FILE IS OPEN 
* 
          OPENM  X1,INPUT,N  OPEN THE FILE
* 
          SA1    T.A0 
          SA0    X1 
          SA1    X1 
 RDB.A    SX1    X1 
          FETCH  X1,MRL,X7
          NZ     X7,RDB.A1
          SA5    A0+W.TPAR   USE BLKSIZE AS DEFAULT MRL 
          SA1    A0 
          AX5    S.BLKSZ
          SX1    X1 
          SX7    X5 
* 
* UNTIL 6RM CAN HANDLE 8-BIT COUNTS, WE MUST CONVERT TO 6-BIT COUNT HERE
* 
          SX5    5                     *
          LX7    3           *8        *
          IX7    X7+X5       *8+5      *
          IX7    X7/X5,6               *
* ***** 
          STORE  X1,MRL=X7
          SA1    A0 
          EQ     RDB.A
* 
 RDB.A1   SA1    A0 
          SX1    X1 
          STORE  X1,RL=X7    PRESET IN CASE RT=U
* 
          SA1    A0 
          SX1    X1 
 RDB.0    BSS    0
          FETCH  X1,RT,X5    GET RECORD TYPE
          SX5    X5-#UT#
          NZ     X5,RDB.0A   BR IF NOT U TYPE 
          FETCH  X1,MRL,X7
          STORE  X1,RL=X7    SET RL=MRL FOR U TYPE
 RDB.0A   SA3    A0+W.TPAR    GET BLOCK SIZE
          SA2    A0+W.BUFR   GET BLOCK BUFFER ADDRESS 
          AX3    S.BLKSZ
          SX2    X2 
          SX3    X3 
* 
* UNTIL 6RM CAN HANDLE 8-BIT COUNTS, WE MUST CONVERT TO 6-BIT COUNT HERE
* 
          LX3    3           *8        *
          SX4    5                     *
          IX3    X3+X4       *8+5      *
          IX3    X3/X4,6               *
* ***** 
          GETP   X1,X2,X3,RD.END,,SKIP,SQ 
* 
          SA1    T.A0        RESTORE A0 
          SA0    X1 
          SA1    X1          GET FIT
          SX1    X1 
          FETCH  X1,PTL,X5   GET RECORD LENGTH
* 
* WITHOUT 8-BIT COUNTS, WE MUST CONVERT FROM A 6-BIT COUNT HERE 
*                                      *
          IX4    X5+X5       *2        *
          LX5    2           *4        *
          IX5    X4+X5       *6        *
          IX5    X5/X4,8               *
* ***** 
          SA1    A0+W.BUFR   BUILD BLOCK POINTER
          SA2    T.SAVEB6    RESTORE B6 
          LX5    36+3        BLOCK SIZE IN BITS 
          SX7    X1 
          SB6    X2 
          IX7    X7+X5
          SA1    A0+W.TPAR
          SA7    A0+W.RESBLK
          SX2    B1+B1       =2, CODE FOR V-RECORDS 
          SX1    X1 
          AX1    2
          SX1    X1          RECFM FIELD
          IX1    X1-X2
          NZ     X1,RDB.DON  NOT V--
* 
          LX2    18+4        PICK UP FIRST 32 BITS OF BLOCK 
          IX7    X7+X2
          LX2    18 
          IX7    X7-X2       ADJUST BLOCK POINTER 
          NG     X7,RDBLOCK  IGNORE VERY SHORT BLOCK
          SA1    X7 
          AX1    60-16       CHARACTER COUNT FROM HEADER
          BX5    X7 
          SX1    X1-4        CHARACTER COUNT FROM V-HEADER
          AX5    36+3        BLOCK CHARACTER COUNT
          IX4    X5-X1
          NG     X4,RDB.E1   ERROR, BLOCK SHORTER THAN COUNT
          LX4    36+3        OK 
          IX7    X7-X4       RESET AVAIL. TO GIVEN LENGTH 
          SA7    A7 
 RDB.DON  SA1    A0          RESET EX,DX FIELDS IN FIT
          SX1    X1 
          STORE  X1,EX=RD.ERRX
          SA1    A0 
          SX1    X1 
          STORE  X1,DX=0
          SA4    A0+W.RESBLK
          SX5    B0          FLAG = OK
          BX7    X4 
          JP     B6 
* 
* END DATA AND ERROR PROCESSES
* 
 RD.END   PS     0
          SA1    T.A0         RESTORE A0 ON AT END ENTRY
          SA0    X1 
          SA1    X1          GET FIT
          SX1    X1 
          FETCH  X1,FP,X5    GET END CONDITION
          SB6    X5          SAVE IT
          SA1    A0          RESET EXITS
          SX1    X1 
          STORE  X1,DX=0
          SA1    A0 
          SX1    X1 
          STORE  X1,EX=RD.ERRX
          SA2    T.SAVEB6    RESTORE B6 
          SX3    B6          FP 
          MX5    58          =-3 (EOI)
          SB6    X2 
          LX3    59-6 
          NG     X3,RDB.1    JP EOI 
          LX3    1
          SX5    X5+B1       =-2 (EOP)
          NG     X3,RDB.1    JP EOP 
          SX5    -B1         =-1 (EOS)
 RDB.1    PX5    X5          PACK STATUS
          JP     B6          EXIT 
* 
* 
 RD.ERR   PS     0           ERROR IN I/O ENTRY 
          SA1    T.A0        RESTORE A0 
          SA0    X1 
          SA1    X1 
          SX1    X1 
          FETCH  X1,IRS,X5   FETCH ERROR STATUS 
          SB2    X5-142B
          EQ     B2,B0,RD.ER1     EXCESS DATA 
          EQ     B2,B1,RD.ER1        INSUFF DATA
          SA1    A0          RESET END CONDITIONS 
          SX1    X1 
          STORE  X1,DX=0
          SA1    A0 
          SX1    X1 
          STORE  X1,EX=RD.ERRX
          EQ     RDB.E2 
 RD.ER1   FETCH  X1,ECT,X5    ERROR COUNT 
          ZR     X5,RD.ERR    BR IF ERROR LIMIT ZERO
          SX5    X5-1 
          STORE  X1,ECT=X5   DECREMENT ERROR COUNT
          EQ     RD.ERR 
 RD.ERRXT VFD    42/7H*ERROR*,18/RD.ERRX
 RD.ERRX  PS     0
          SX6    RD.ERRXT 
          SA6    T.ENTRY
          EQ     RDB.E2 
* 
          SPACE  2
**    READBLOCK ERROR ACTIONS 
* 
 RDB.E1   SA2    RDB.M1 
          EQ     ERR.IO 
 RDB.E2   SA2    RDB.M2 
          EQ     ERR.IO 
****
* 
 RDB.M1   VFD    12/0,18/E.IO,12/0,18/*+1 
          DATA    C/INPUT BLOCK SHORTER THAN V HEADER SIZE/ 
 RDB.M2   VFD    12/0,18/E.IO,12/0,18/*+1 
          DATA    C/UNRECOVERABLE ERROR ON READ FILE/ 
****
          SPACE  2
**    XREAD ERROR ACTIONS 
* 
 RD.E1    SA2    RD.M1
          EQ     ERR.CON
 RD.E2    SA2    RD.M2
          EQ     ERR.IO 
 RD.E3    SA2    RD.M3
          EQ     ERR.IO 
 RD.E4    SA2    RD.M4
          EQ     ERR.IO 
 RD.E5    SA2    RD.M5
          EQ     ERR.IO 
 RD.E6    SA2    RD.M6
          EQ     ERR.IO 
 RD.E7    SA2    RD.M7
          EQ     ERR.IO 
 RD.E8    SA2    RD.M8
          EQ     ERR.IO 
 RD.E9    SA2    RD.M9
          EQ     ERR.IO 
 RD.E10   SA2    RD.M10 
          EQ     ERR.IO 
 RD.E11   SA2    RD.M11 
          EQ     ERR.IO 
****
* 
 RD.M1    VFD    12/0,18/E.PAR,12/0,18/*+1
          DATA    C/FILE NOT SPECIFIED AS READ MODE/
 RD.M2    VFD    12/0,18/E.IO,12/0,18/*+1 
          DATA    C/V-BLOCK HAS SHORT RECORD FRAGMENT/
 RD.M3    VFD    12/0,18/E.IO,12/0,18/*+1 
          DATA    C/V-RECORD LENGTH LESS THAN 4 BYTES/
 RD.M4    VFD    12/0,18/E.IO,12/0,18/*+1 
          DATA    C/V-RECORD LENGTH EXCEEDS BLOCKSIZE/
 RD.M5    VFD    12/0,18/E.IO,12/0,18/*+1 
          DATA    C/VS-RECORD FOUND IN TYPE V FILE/ 
 RD.M6    VFD    12/0,18/E.IO,12/0,18/*+1 
          DATA    C/VS-RECORD INITIAL SEGMENT MISSING/
 RD.M7    VFD    12/0,18/E.IO,12/0,18/*+1 
          DATA    C/MORE DATA AFTER RECORD IN V-UNBLOCKED FILE/ 
 RD.M8    VFD    12/0,18/E.IO,12/0,18/*+1 
          DATA    C/MORE DATA AFTER VS-RECORD SEGMENT/
 RD.M9    VFD    12/0,18/E.IO,12/0,18/*+1 
          DATA    C/INCOMPLETE VS-RECORD AT END-OF-DATA/
 RD.M10   VFD    12/0,18/E.IO,12/0,18/*+1 
          DATA    C/EMPTY BLOCK IN VS-RECORD/ 
 RD.M11   VFD    12/0,18/E.IO,12/0,18/*+1 
          DATA    C/VS-RECORD FINAL SEGMENT MISSING/
****
          END 
