home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / ASMUTL / PC370.ZIP / TESTIO.ALC < prev    next >
Encoding:
Text File  |  1987-05-24  |  21.9 KB  |  779 lines

  1.     TITLE 'TESTIO  - TEST FIXED, VARIABLE, AND TEXT FILE I/O'
  2. *
  3. * PGM-ID. TESTIO.ALC
  4. * COPYRIGHT 1987 DONALD S. HIGGINS
  5. *
  6. * MAINTENANCE.
  7. *
  8. * 03/30/85 CONVERTED TO 8086 PC/370 R1.0
  9. * 02/25/87 CONVERT DCB FOR PC/370 R2.0 WITH EXTENDED ADDRESS SPACE
  10. *          AND MS-DOC FILE HANDLE I/O SUPPORT
  11. * 02/27/87 RESTRUCTURE FOR MULTIPLE TESTS WITH DIFFERENT LRECL/BLKSZ
  12. * 03/02/87 ADD EMPTY FILE TEST AND SHORT FIXED BLOCK READ/WRITE TEST
  13. * 03/03/87 ADD SHORT MEMORY TESTS
  14. * 04/16/87 CLEAR R1 FOR GET/PUT/READ/WRITE FOR RCD/BUF OPTION TESTS
  15. * 04/17/87 ADD TEST OF BLK AND RCD OPTIONS IN SWF AND SPF RTNS
  16. * 05/24/87 ADD TEST OF SYNAD EXIT FOR BAD RBA RANDOM READ/WRITE
  17. *
  18. *  MAINLINE
  19. *
  20. TESTIO   CSECT
  21.     LR    R10,R15
  22.     USING TESTIO,R10
  23.     LA    R11,4095(R10)
  24.     USING TESTIO+4095,R11
  25.     LA    R2,=C'TESTIO STARTED$'
  26.     SVC   WTO
  27.     CLC   =A(LDCB),=A(86) VERIFY IHADCB LENGTH
  28.     BNE   FSYN
  29.     LA    R2,=C'FMEM - SAVE ORIGINAL FREE QUEUE ELEMENT$'
  30.     SVC   WTO
  31.     L     R1,ASCBASF R1=FIRST FQE
  32.     MVC   SAVEFQE,0(R1)
  33.     BAL   R12,FINIT  SEARCH AND DELETE
  34.     LA    R2,=C'FSET - LRECL=BLKSZ=128$'
  35.     SVC   WTO
  36.     BAL   R12,FNUL   FIXED OPEN CLOSE OPEN GET CLOSE
  37.     BAL   R12,FSPF   SEQ PUT FIXED
  38.     CLC   TESTF+(IOCNT-IHADCB)(4),=F'10'
  39.     BNE   FSYN  VERIFY 10 I/O'S FOR 10 RECORDS
  40.     BAL   R12,FSGF   SEQ GET FIXED
  41.     CLC   TESTF+(IOCNT-IHADCB)(4),=F'10'
  42.     BNE   FSYN  VERIFY 10 I/O'S FOR 10 RECORDS
  43.     CLC   TESTF+(PRECL-IHADCB)(2),=H'128'
  44.     BNE   FSYN  VERIFY LAST PHYICAL RECORD LENGTH READ
  45.     LA    R2,=C'FSET - LRECL=128 BLKSZ=256$'
  46.     SVC   WTO
  47.     MVC   TESTF+(BLKSZ-IHADCB)(2),=H'256'
  48.     BAL   R12,FSPF   SEQ PUT FIXED
  49.     CLC   TESTF+(IOCNT-IHADCB)(4),=F'5'
  50.     BNE   FSYN  VERIFY 5 I/O'S FOR 10 RECORDS
  51.     BAL   R12,FSGF   SEQ GET FIXED
  52.     CLC   TESTF+(PRECL-IHADCB)(2),=H'256'
  53.     BNE   FSYN  VERIFY LAST PHYICAL RECORD LENGTH READ
  54.     CLC   TESTF+(IOCNT-IHADCB)(4),=F'5'
  55.     BNE   FSYN  VERIFY 5 I/O'S FOR 10 RECORDS
  56.     BAL   R12,FRWR   RANDOM UPDATE
  57.     BAL   R12,FREN   SEARCH, RENAME, DELETE
  58.     BAL   R12,FSWF   SEQ WRITE FIXED
  59.     BAL   R12,FSRF   SEQ READ FIXED
  60.     CLC   TESTF+(PRECL-IHADCB)(2),=H'128'
  61.     BNE   FSYN  VERIFY LAST PHYICAL RECORD LENGTH READ
  62.     CLC   TESTF+(IOCNT-IHADCB)(4),=F'10'
  63.     BNE   FSYN  VERIFY 10 I/O'S FOR 10 RECORDS
  64.     LA    R2,=C'FSET - LRECL=500 BLKSZ=500$'
  65.     SVC   WTO
  66.     MVC   TESTF+(LRECL-IHADCB)(2),=H'500'
  67.     BAL   R12,FCPY   COPY TESTF.DAT TO TESTC.DAT
  68.     CLC   TESTF+(PRECL-IHADCB)(2),=AL2(10*128-2*500)  280
  69.     BNE   FSYN  VERIFY LAST PHYICAL RECORD LENGTH READ
  70.     CLC   TESTF+(IOCNT-IHADCB)(4),=F'3'
  71.     BNE   FSYN  VERIFY 3 I/O'S FOR 10 RECORDS
  72.     LA    R2,=C'VSET - LRECL=55 BLKSZ=0$'
  73.     SVC   WTO
  74.     SVC   TRACE
  75.     DC    C'V00'
  76.     BAL   R12,VNUL   VAR OPEN CLOSE OPEN GET CLOSE
  77.     BAL   R12,VSPV   SEQ PUT VAR
  78.     CLC   TESTV+(IOCNT-IHADCB)(4),=F'1'
  79.     BNE   VSYN  VERIFY 1 I/O'S FOR 10 RECORDS
  80.     BAL   R12,VSGV   SEQ GET VAR
  81.     CLC   TESTV+(PRECL-IHADCB)(2),=AL2(15)
  82.     BNE   VSYN  VERIFY LAST PHYICAL RECORD LENGTH READ
  83.     CLC   TESTV+(IOCNT-IHADCB)(4),=F'1'
  84.     BNE   VSYN  VERIFY 1 I/O'S FOR 10 RECORDS
  85.     LA    R2,=C'VSET - LRECL=55 BLKSZ=16$'
  86.     SVC   WTO
  87.     MVC   TESTV+(BLKSZ-IHADCB)(2),=H'16'
  88.     SVC   TRACE
  89.     DC    C'V25'
  90.     BAL   R12,VSPV   SEQ PUT VAR
  91.     CLC   TESTV+(IOCNT-IHADCB)(4),=F'1'
  92.     BNE   VSYN  VERIFY 1 I/O'S FOR 10 RECORDS
  93.     BAL   R12,VSGV   SEQ GET VAR
  94.     CLC   TESTV+(PRECL-IHADCB)(2),=AL2(15)
  95.     BNE   VSYN  VERIFY LAST PHYICAL RECORD LENGTH READ
  96.     CLC   TESTV+(IOCNT-IHADCB)(4),=F'1'
  97.     BNE   VSYN  VERIFY 1 I/O'S FOR 10 RECORDS
  98.     LA    R2,=C'VSET - LRECL=55 BLKSZ=8$'
  99.     SVC   WTO
  100.     MVC   TESTV+(BLKSZ-IHADCB)(2),=H'8'
  101.     SVC   TRACE
  102.     DC    C'V25'
  103.     BAL   R12,VSPV   SEQ PUT VAR
  104.     CLC   TESTV+(IOCNT-IHADCB)(4),=F'2'
  105.     BNE   VSYN  VERIFY 2 I/O'S FOR 10 RECORDS
  106.     BAL   R12,VSGV   SEQ GET VAR
  107.     CLC   TESTV+(PRECL-IHADCB)(2),=AL2(7)
  108.     BNE   VSYN  VERIFY LAST PHYICAL RECORD LENGTH READ
  109.     CLC   TESTV+(IOCNT-IHADCB)(4),=F'2'
  110.     BNE   VSYN  VERIFY 2 I/O'S FOR 10 RECORDS
  111.     LA    R2,=C'FMEM - SET MAX MEMORY AVAIL = 64$'
  112.     SVC   WTO
  113.     L     R1,ASCBASF
  114.     CLC   SAVEFQE,0(R1)
  115.     BNE   FSYN
  116.     MVC   SAVEFQE+4(4),=A(64)
  117.     MVC   4(4,R1),=A(64)
  118.     SVC   TRACE
  119.     DC    C'M64'
  120.     LA    R2,=C'TSET - LRECL=128 BLKSZ=0$'
  121.     SVC   WTO
  122.     BAL   R12,TNUL   TXT OPEN CLOSE OPEN GET CLOSE
  123.     BAL   R12,TSPT   SEQ PUT TXT
  124.     CLC   TESTT+(BLKSZ-IHADCB)(2),=H'64'
  125.     BNE   FSYN
  126.     CLC   TESTT+(IOCNT-IHADCB)(4),=F'1'
  127.     BNE   TSYN  VERIFY 1 I/O'S FOR 2 RECORDS
  128.     BAL   R12,TSGT   SEQ GET TXT
  129.     CLC   TESTT+(PRECL-IHADCB)(2),=AL2(17)
  130.     BNE   TSYN  VERIFY LAST PHYICAL RECORD LENGTH READ
  131.     CLC   TESTT+(IOCNT-IHADCB)(4),=F'1'
  132.     BNE   TSYN  VERIFY 1 I/O'S FOR 2 RECORDS
  133.     LA    R2,=C'TSET - LRECL=55 BLKSZ=16$'
  134.     SVC   WTO
  135.     MVC   TESTT+(BLKSZ-IHADCB)(2),=H'16'
  136.     BAL   R12,TSPT   SEQ PUT VAR
  137.     CLC   TESTT+(IOCNT-IHADCB)(4),=F'1'
  138.     BNE   TSYN  VERIFY 1 I/O'S FOR 2 RECORDS
  139.     BAL   R12,TSGT   SEQ GET VAR
  140.     CLC   TESTT+(PRECL-IHADCB)(2),=AL2(1)
  141.     BNE   TSYN  VERIFY LAST PHYICAL RECORD LENGTH READ
  142.     CLC   TESTT+(IOCNT-IHADCB)(4),=F'2'
  143.     BNE   TSYN  VERIFY 2 I/O'S FOR 2 RECORDS (EOF IN BUF 2)
  144.     LA    R2,=C'TSET - LRECL=55 BLKSZ=8$'
  145.     SVC   WTO
  146.     MVC   TESTT+(BLKSZ-IHADCB)(2),=H'8'
  147.     BAL   R12,TSPT   SEQ PUT VAR
  148.     CLC   TESTT+(IOCNT-IHADCB)(4),=F'2'
  149.     BNE   TSYN  VERIFY 2 I/O'S FOR 2 RECORDS
  150.     BAL   R12,TSGT   SEQ GET VAR
  151.     CLC   TESTT+(PRECL-IHADCB)(2),=AL2(1)
  152.     BNE   TSYN  VERIFY LAST PHYICAL RECORD LENGTH READ
  153.     CLC   TESTT+(IOCNT-IHADCB)(4),=F'3'
  154.     BNE   TSYN  VERIFY 3 I/O'S FOR 2 RECORDS (EOF IN BUF 3)
  155.     L     R1,ASCBASF
  156.     CLC   SAVEFQE,0(R1)
  157.     BNE   FSYN                VERIFY ORIG. FQE
  158.     LA    R2,=C'TESTIO END$'
  159.     SVC   WTO
  160.     SVC   EXIT
  161. *
  162. * FILE I/O ROUTINES
  163. *
  164. *
  165. * TESTF TEST FIXED LENGTH RECORD I/O
  166. *
  167. FINIT    EQU   *
  168.     LA    R2,=C'FINT - SEARCH DELETE TESTF.DAT$'
  169.     SVC   WTO
  170.     LA    R2,TESTF
  171.     SVC   SEARCH
  172.     CLM   R0,1,=X'00'
  173.     BNE   FNFD  TESTF.DAT NOT FOUND
  174.     LA    R2,TESTF
  175.     SVC   DELETE
  176.     LA    R2,TESTF
  177.     SVC   SEARCH
  178.     CLM   R0,1,=X'00'
  179.     BE    FSYN  ERROR IF FOUND  THIS TIME
  180. FNFD     EQU   *
  181.     BR    R12
  182. FNUL     EQU   *
  183.     LA    R2,=C'FNUL - FIXED OPEN CLOSE OPEN GET CLOSE$'
  184.     SVC   WTO
  185.     LA    R2,TESTF
  186.     USING IHADCB,R2
  187.     MVI   MACRF,C'W'
  188.     MVC   SYNAD,=A(FNUL1)
  189.     L     R1,ASCBASF
  190.     MVC   4(4,R1),=A(64) FORCE SYNAD EXIT - BLKSZ NOT AVAIL FOR W
  191.     SVC   TRACE
  192.     DC    C'FME'
  193.     SVC   OPEN
  194.     B     FSYN
  195. FNUL1    EQU   *
  196.     L     R1,ASCBASF
  197.     CLC   SAVEFQE(4),0(R1)
  198.     BNE   FSYN
  199.     CLC   4(4,R1),=A(64)
  200.     BNE   FSYN
  201.     MVC   4(4,R1),SAVEFQE+4 RESTORE FQE
  202.     MVI   MACRF,C'P'
  203.     MVC   SYNAD,=A(FSYN)
  204.     SVC   OPEN
  205.     SVC   CLOSE
  206.     MVC   EODAD,=A(FNULEOF1)
  207.     MVI   MACRF,C'G'
  208.     SVC   OPEN
  209.     SR    R1,R1
  210.     SVC   GET
  211.     B     FSYN
  212. FNULEOF1 EQU   *
  213.     SVC   CLOSE
  214.     MVI   MACRF,C'W'
  215.     SVC   OPEN
  216.     SVC   CLOSE
  217.     MVC   EODAD,=A(FNULEOF2)
  218.     MVI   MACRF,C'R'
  219.     SVC   OPEN
  220.     SR    R1,R1
  221.     SVC   GET
  222.     B     FSYN
  223. FNULEOF2 EQU   *
  224.     SVC   CLOSE
  225.     BR    R12
  226. FSPF     EQU   *
  227.     LA    R2,=C'FSPT - SEQ PUT FIXED$'
  228.     SVC   WTO
  229.     LA    R2,TESTF
  230.     USING IHADCB,R2
  231.     MVI   MACRF,C'P'
  232.     MVC   RCD,=A(0)  ZERO DEFAULT AREA ADDR TO TEST OVERRIDE
  233.     SVC   OPEN
  234.     LA    R3,10
  235.     LA    R4,1
  236. PFLOOP   EQU   *
  237.     STC   R4,FREC
  238.     MVC   FREC+1(L'FREC-1),FREC FILL RECORD WITH RECORD #
  239.     LA    R4,1(R4)
  240.     LA    R1,FREC   OVERRIDE AREA ADDRESS
  241.     SVC   PUT   SEQUENTIALLY WRITE FIXED FILE RECORDS
  242.     BCT   R3,PFLOOP
  243.     SVC   CLOSE
  244.     BR    R12
  245. FSGF     EQU   *
  246.     LA    R2,=C'FSGF - SEQ GET FIXED$'
  247.     SVC   WTO
  248.     LA    R2,TESTF
  249.     USING IHADCB,R2
  250.     MVC   EODAD,=A(GFEOF)
  251.     MVI   MACRF,C'G'
  252.     SVC   OPEN
  253.     LA    R4,0
  254. GFLOOP   EQU   *
  255.     SR    R1,R1
  256.     SVC   GET   SEQUENTIALLY GET FIXED FILE RECORDS
  257.     LA    R4,1(R4)
  258.     CLM   R4,1,FREC
  259.     BNE   FSYN
  260.     CLC   FREC+1(L'FREC-1),FREC FILL RECORD WITH RECORD #
  261.     BNE   FSYN
  262.     B     GFLOOP
  263. GFEOF    EQU   *
  264.     CH    R4,=H'10'
  265.     BNE   FSYN
  266.     SVC   CLOSE
  267.     BR    R12
  268. FRWR     EQU   *
  269.     LA    R2,=C'FRWR - RANDOM UDATE$'
  270.     SVC   WTO
  271.     LA    R2,TESTF
  272.     MVI   DSORG,C'R' RANDOM
  273.     MVI   MACRF,C'W' READ OR WRITE
  274.     MVC   SYNAD,=A(FRWRSYN)
  275.     MVI   SYNOK,FALSE    NO SYNAD ALLOWED DEFAULT
  276.     SVC   OPEN
  277.     LA    R4,4       RELATIVE RECORD NUMBER 4
  278.     MH    R4,LRECL   RELALIVE BYTE
  279.     ST    R4,RBA
  280.     SR    R1,R1
  281.     SVC   READ  RANDOMLY READ RECORD 5
  282.     L     R5,BLK
  283.     CLI   0(R5),5
  284.     BAL   R14,CHKF
  285.     CLC   1(L'FREC-1,R5),0(R5)
  286.     BAL   R14,CHKF
  287.     MVI   0(R5),X'FF'
  288.     MVC   1(L'FREC-1,R5),0(R5)
  289.     SVC   TRACE
  290.     DC    C'WR5'
  291.     SVC   WRITE   UPDATE RECORD 5 WITH HIGH VALUES
  292.     LA    R4,1
  293.     MH    R4,LRECL
  294.     ST    R4,RBA
  295.     SR    R1,R1
  296.     SVC   READ    RANDOMLY READ RECORD 2 AND VERIFY
  297.     CLI   0(R5),2
  298.     BAL   R14,CHKF
  299.     CLC   1(L'FREC-1,R5),0(R5)
  300.     BAL   R14,CHKF
  301.     LA    R4,4       RELATIVE RECORD NUMBER 4
  302.     MH    R4,LRECL   REALITVE BYTE
  303.     ST    R4,RBA
  304.     SR    R1,R1
  305.     SVC   READ   REREAD RECORD 5 AND VERFIY
  306.     CLI   0(R5),X'FF'
  307.     BAL   R14,CHKF
  308.     CLC   1(L'FREC-1,R5),0(R5)
  309.     BAL   R14,CHKF
  310.     L     R4,=X'0FFFFFFF' ATTEMPT RANDOM WRITE BEYOND DISK CAP.
  311.     ST    R4,RBA
  312.     SR    R1,R1
  313.     LA    R14,FRWROK1
  314.     MVI   SYNOK,TRUE
  315.     SVC   TRACE
  316.     DC    C'RW1'
  317.     SVC   WRITE
  318.     B     FSYN
  319. FRWROK1  EQU   *
  320.     L     R4,=X'0FFFFFFF' ATTEMPT RANDOM WRITE BEYOND DISK CAP.
  321.     ST    R4,RBA
  322.     SR    R1,R1
  323.     LA    R14,FRWROK2
  324.     MVI   SYNOK,TRUE
  325.     SVC   TRACE
  326.     DC    C'RW2'
  327.     SVC   READ
  328.     B     FSYN
  329. FRWROK2  EQU   *
  330.     MVI   SYNOK,FALSE
  331.     SVC   CLOSE
  332.     BR    R12
  333. FREN     EQU   *
  334.     LA    R2,=C'FREN - SEARCH RENAME DELETE$'
  335.     SVC   WTO
  336.     LA    R2,TESTF
  337.     SVC   SEARCH
  338.     CLM   R0,1,=X'00'
  339.     BNE   FSYN  TESTF.DAT NOT FOUND
  340.     LA    R2,TESTF
  341.     MVC   DCBDSN,=A(TESTFTST)
  342.     SVC   SEARCH
  343.     CLM   R0,1,=X'00'
  344.     BNE   SKPDTST  TESTF.TST NOT FOUND
  345.     LA    R2,TESTF
  346.     SVC   DELETE
  347. SKPDTST  EQU   *
  348.     LA    R2,TESTF
  349.     MVC   DCBDSN,=A(FDSN)
  350.     MVC   REN,=A(TESTFTST)
  351.     SVC   RENAME
  352.     LA    R2,TESTF
  353.     MVC   DCBDSN,=A(TESTFTST)
  354.     SVC   SEARCH
  355.     CLM   R0,1,=X'00'
  356.     BNE   FSYN  ERROR IF RENAMED FILE NOT FOUND
  357.     LA    R2,TESTF
  358.     SVC   TRACE
  359.     DC    C'TST '
  360.     SVC   DELETE
  361.     LA    R2,TESTF
  362.     MVC   DCBDSN,=A(TESTFTST)
  363.     SVC   SEARCH
  364.     CLM   R0,1,=X'00'
  365.     BE    FSYN  ERROR IF DELETED RENAMED FILE FOUND
  366.     BR    R12
  367. *
  368. * TESTF SWF/SRF
  369. *
  370. FSWF     EQU   *
  371.     LA    R2,=C'FSWF - SEQ WRITE FIXED$'
  372.     SVC   WTO
  373.     LA    R2,TESTF
  374.     USING IHADCB,R2
  375.     MVI   DSORG,C'S'
  376.     MVI   MACRF,C'W'
  377.     MVC   DCBDSN,=A(FDSN)
  378.     MVC   BLKSZ,LRECL      RESET BLKSZ=LRECL
  379.     OI    DCBFLG,DFUBUF SET USER BUFFER OPTION
  380.     MVC   BLK,=A(FREC)     INIT TO PRIMARY RECORD AREA
  381.     SVC   OPEN
  382.     LA    R3,10
  383.     LA    R4,1
  384.     LA    R5,FALT
  385. WFLOOP   EQU   *
  386.     SVC   TRACE
  387.     DC    C'SWF '
  388.     STC   R4,0(R5)
  389.     MVC   1(L'FREC-1,R5),0(R5) FILL BLOCK WITH RECORD #
  390.     LA    R4,1(R4)
  391.     LA    R1,FALT OVERRIDE BUFFER ADDRESS FOR WRITE
  392.     SVC   WRITE   SEQUENTIALLY WRITE FIXED FILE RECORDS
  393.     BCT   R3,WFLOOP
  394.     SVC   CLOSE
  395.     XI    DCBFLG,DFUBUF TURN OFF USER BUFFER
  396.     MVC   BLK,=A(0) RESET BLK POINTER
  397.     BR    R12
  398. FSRF     EQU   *
  399.     LA    R2,=C'FSRF - SEQ READ FIXED$'
  400.     SVC   WTO
  401.     LA    R2,TESTF
  402.     USING IHADCB,R2
  403.     MVC   EODAD,=A(RFEOF)
  404.     MVI   MACRF,C'R'
  405.     SVC   OPEN
  406.     LA    R4,0
  407.     L     R5,BLK
  408. RFLOOP   EQU   *
  409.     SVC   TRACE
  410.     DC    C'RWF '
  411.     SR    R1,R1
  412.     SVC   READ  SEQUENTIALLY READ FIXED FILE RECORDS
  413.     LA    R4,1(R4)
  414.     CLM   R4,1,0(R5)
  415.     BNE   FSYN
  416.     CLC   1(L'FREC-1,R5),0(R5) CHECK FULL BLOCK
  417.     BNE   FSYN
  418.     B     RFLOOP
  419. RFEOF    EQU   *
  420.     CH    R4,=H'10'
  421.     BNE   FSYN
  422.     SVC   CLOSE
  423.     BR    R12
  424. FCPY     EQU   *
  425.     LA    R2,=C'FCPY - SEQ READ/WRITE FIXED COPY$'
  426.     SVC   WTO
  427.     LA    R2,TESTC
  428.     USING IHADCB,R2
  429.     MVC   LRECL,TESTF+(LRECL-IHADCB) COPY LRECL SET
  430.     MVC   BLKSZ,LRECL
  431.     SVC   OPEN         OPEN SWF OUTPUT COPY FILE
  432.     L     R1,BLK
  433.     LA    R2,TESTF
  434.     USING IHADCB,R2
  435.     MVC   LRECL,TESTF+(LRECL-IHADCB)
  436.     MVC   BLKSZ,LRECL
  437.     ST    R1,BLK         SET INPUT FILE BUFFER TO OUTPUT BUFFER
  438.     OI    DCBFLG,DFUBUF  TURN ON USER DEFINED BUFFER
  439.     MVC   EODAD,=A(FCEOF)
  440.     MVI   MACRF,C'R'
  441.     SVC   OPEN         OPEN SRF INPUT FILE
  442. FCLOOP   EQU   *
  443.     LA    R2,TESTF
  444.     SR    R1,R1
  445.     SVC   READ
  446.     LH    R1,PRECL
  447.     LA    R2,TESTC
  448.     STH   R1,PRECL     COPY PHYSICAL RECORD LENGTH READ VS BLOCK
  449.     SVC   WRITE   SEQUENTIALLY WRITE FIXED FILE RECORDS
  450.     B     FCLOOP
  451. FCEOF    EQU   *
  452.     LA    R2,TESTF
  453.     SVC   CLOSE
  454.     LA    R2,TESTC
  455.     SVC   CLOSE
  456.     BR    R12
  457. *
  458. * TESTV TEST VARIABLE SPANNED RECORDS WITH 2 BYTE LENGTH PREFIX
  459. *
  460. VNUL     EQU   *
  461.     LA    R2,=C'VNUL - VAR OPEN CLOSE OPEN GET CLOSE$'
  462.     SVC   WTO
  463.     LA    R2,TESTV
  464.     USING IHADCB,R2
  465.     MVI   MACRF,C'P'
  466.     SVC   OPEN
  467.     SVC   CLOSE
  468.     MVI   MACRF,C'G'
  469.     MVC   EODAD,=A(VNULEOF)
  470.     SVC   OPEN
  471.     SR    R1,R1
  472.     SVC   GET
  473.     B     VSYN
  474. VNULEOF  EQU   *
  475.     SVC   CLOSE
  476.     BR    R12
  477. VSPV     EQU   *
  478.     LA    R2,=C'VSPV - SEQ PUT VAR$'
  479.     SVC   WTO
  480.     LA    R2,TESTV
  481.     USING IHADCB,R2
  482.     MVI   MACRF,C'P'
  483.     SVC   OPEN
  484.     LA    R3,2
  485.     LA    R4,0
  486. VLOOP    EQU   *
  487.     LA    R4,5(R4)
  488.     STH   R4,VREC
  489.     SR    R1,R1
  490.     SVC   PUT SEQUENTIALLY WRITE 10 RCDS FROM 5 TO 50
  491.     BCT   R3,VLOOP
  492.     SVC   CLOSE
  493.     BR    R12
  494. VSGV     EQU   *
  495.     LA    R2,=C'VSGV - SEQ GET VAR$'
  496.     SVC   WTO
  497.     LA    R2,TESTV
  498.     MVI   MACRF,C'G'
  499.     MVC   EODAD,=A(VEOF)
  500.     SVC   OPEN
  501.     LA    R4,0
  502. VRLOOP   EQU   *
  503.     SR    R1,R1
  504.     SVC   GET  SEQ. READ AND VERIFY LENGTHS
  505.     LA    R4,5(R4)
  506.     CLM   R4,3,VREC
  507.     BAL   R14,CHKV
  508.     B     VRLOOP
  509. VEOF     EQU   *
  510.     SVC   CLOSE
  511.     CH    R4,=H'10' FOR TEST ****************
  512.     BAL   R14,CHKV
  513.     BR    R12
  514. *
  515. * TESTT -TEST TEXT FILES
  516. *
  517. TNUL     EQU   *
  518.     LA    R2,=C'TNUL - TEXT OPEN CLOSE OPEN GET CLOSE$'
  519.     SVC   WTO
  520.     LA    R2,TESTT
  521.     USING IHADCB,R2
  522.     MVI   MACRF,C'P'
  523.     SVC   OPEN
  524.     SVC   CLOSE
  525.     MVI   MACRF,C'G'
  526.     MVC   EODAD,=A(TNULEOF)
  527.     SVC   OPEN
  528.     SR    R1,R1
  529.     SVC   GET  SEQ. READ
  530.     B     TSYN
  531. TNULEOF  EQU   *
  532.     SVC   CLOSE
  533.     BR    R12
  534. TSPT     EQU   *
  535.     LA    R2,=C'TSPT - SEQ PUT TXT$'
  536.     SVC   WTO
  537.     LA    R2,TESTT
  538.     USING IHADCB,R2
  539.     MVI   MACRF,C'P'
  540.     SVC   OPEN
  541.     MVC   TREC,TL1
  542.     SVC   TRACE
  543.     DC    C'SPT '
  544.     SR    R1,R1
  545.     SVC   PUT
  546.     MVC   TREC,TL2
  547.     SR    R1,R1
  548.     SVC   PUT
  549.     SVC   CLOSE
  550.     BR    R12
  551. TSGT     EQU   *
  552.     LA    R2,=C'TSGT - SEQ GET TXT$'
  553.     SVC   WTO
  554.     LA    R2,TESTT
  555.     MVI   MACRF,C'G'
  556.     MVC   EODAD,=A(TEOF)
  557.     SVC   OPEN
  558.     SVC   TRACE
  559.     DC    C'SGT '
  560.     SR    R1,R1
  561.     SVC   GET  SEQ. READ
  562.     CLC   TL1,TREC
  563.     BNE   TSYN
  564.     SR    R1,R1
  565.     SVC   GET
  566.     CLC   TL2,TREC
  567.     BNE   TSYN
  568.     MVI   TEOF+1,X'00'  NOP TEOF FOR EXPECTED EOF
  569.     SR    R1,R1
  570.     SVC   GET
  571.     B     FSYN
  572. TEOF     B     FSYN   CHANGED TO NOP IF OK
  573.     SVC   CLOSE
  574.     BR    R12
  575. CHKF     EQU   *
  576.     BER   R14
  577. FEOF     EQU   *
  578. FSYN     EQU   *
  579.     SVC   TRACE
  580.     DC    C'BUG'
  581.     SVC   EXIT
  582. FRWRSYN  EQU   *
  583.     CLI   SYNOK,TRUE
  584.     BER   R14
  585.     B     FSYN
  586. CHKV     EQU   *
  587.     BER   R14
  588. VSYN     EQU   *
  589. TSYN     EQU   *
  590.     SVC   TRACE
  591.     DC    C'BUG'
  592.     SVC   EXIT
  593.     LTORG
  594. SYNOK    DC    AL1(FALSE)
  595. FALSE    EQU   0
  596. TRUE     EQU   1
  597. R0       EQU   0
  598. R1       EQU   1
  599. R2       EQU   2
  600. R3       EQU   3
  601. R4       EQU   4
  602. R5       EQU   5
  603. R6       EQU   6
  604. R7       EQU   7
  605. R8       EQU   8
  606. R9       EQU   9
  607. R10      EQU   10 BASE
  608. R11      EQU   11 BASE+4095
  609. R12      EQU   12 ROUTINE LINK
  610. R13      EQU   13
  611. R14      EQU   14
  612. R15      EQU   15
  613. WTO      EQU   209 WRITE TO OPERATOR
  614. EXIT     EQU   0 EXIT  TO CP/M
  615. OPEN     EQU   1 OPEN FILE
  616. CLOSE    EQU   2 CLOSE FILE
  617. READ     EQU   3 READ BLOCK
  618. WRITE    EQU   4 WRITE BLOCK
  619. GET      EQU   5 GET RECORD
  620. PUT      EQU   6 PUT RECORD
  621. DELETE   EQU   7 DELETE FILE
  622. SEARCH   EQU   8 LOCATE FILE (R0=0 IF FOUND)
  623. RENAME   EQU  23 RENAME FILE
  624. TRACE    EQU   9 TRACE SVC
  625. ****************************************************************************
  626. *
  627. * IHADCB - I HAD A DCB DSECT FOR PC/370 RELEASE 2.0+ FILE DATA CONTROL BLOCK
  628. *
  629. ****************************************************************************
  630. IHADCB   DSECT
  631. DCBDCB   DS    CL4 CONSTANT EBCDIC C'ADCB' DCB IDENTIFIER
  632. DCBDSN   DS    A   ADDRESS OF UP TO 64 BYTE PATH/FILE SPEC FOLLOWED BY ZERO
  633. DCBFID   DS    H   FILE HANDLE ASSIGNED BY MS-DOS AT OPEN (X'FFFF'DEFAULT)
  634. DCBFLG   DS    X   DATA CONTROL BLOCK FLAGS (ONLY DFTRAN MAY BE SET BY USER)
  635. DFOPEN   EQU   X'80' FILE OPEN
  636. DFUBUF   EQU   X'40' USER DEFINED BLOCK AREA (NO DYNAMIC ALLOC/DEALLOC)
  637. DFOUT    EQU   X'20' OPEN FOR OUTPUT
  638. DFGEOF   EQU   X'10' END OF FILE PENDING ON SHORT BLOCK
  639. DFTRAN   EQU   X'08' TRANSLATE GET/PUT RECORDS FOR ASCII FILE
  640. DFADCB   EQU   X'01' ASSIST DCB - DO NOT TRANSLATE 370 ADDRESSES
  641. DSORG    DS    C   DATA SET ORGANIZATION (R=RANDOM, S=SEQUENTIAL)
  642. MACRF    DS    C   DATA SET ACCESS MODE (R=READ, W=WRITE, G=GET, P=PUT)
  643. RECFM    DS    C   DATA SET RECORD FORMAT (F=FIXED, V=VAR, T=TEXT)
  644. EOR      DS    X   END OF RECORD CODE (DEFAULT IS LINE FEED X'0A')
  645. EOF      DS    X   END OF FILE CODE   (DEFAULT IS CTL-Z X'1A')
  646. LRECL    DS    H   RECORD LENGTH (2<LRECL<64K-16)
  647. BLKSZ    DS    H   BLOCK  LENGTH (2<BLKSZ<64K-16)
  648. EODAD    DS    A   END OF DATA EXIT ADDRESS
  649. SYNAD    DS    A   SYCHRONOUS ERROR EXIT ADDRESS
  650. RCD      DS    A   RECORD AREA ADDRESS FOR GET/PUT
  651. BLK      DS    A   BLOCK  AREA ADDRESS (0 FOR DYNAMICALLY ALLOCATED)
  652. RBA      DS    A   RELATIVE BYTE ADDRESS FOR RANDOM READ/WRITE
  653. REN      DS    A   RENAME ASCIIZ FILE (ONLY USED BY RENAME SVC)
  654. IOCNT    DS    F   BLOCK I/O COUNT SINCE OPEN
  655. PRECL    DS    H   PHYSICAL BLOCK SIZE OF LAST READ/WRITE
  656. *
  657. * RESERVED AREA FOR USE BY PC/370 IOS SUPERVISOR WHILE FILE OPEN
  658. *
  659. DSNSG    DS    XL4 SEGMENT:OFFSET OF DCBDSN PATH/FILE NAME
  660. EODSG    DS    XL4 SEGMENT:OFFSET OF EODAD EXIT
  661. SYNSG    DS    XL4 SEGMENT:OFFSET OF SYNAD EXIT
  662. RCDSG    DS    XL4 SEGMENT:OFFSET OF RECORD AREA FOR GET/PUT
  663. RENSG    DS    XL4 SEGMENT:OFFSET OF RENAME FILE NAME
  664. BLKSG    DS    XL4 SEGMENT:OFFSET OF BLOCK AREA
  665. BLKPTR   DS    XL4 SEGMENT:OFFSET OF CURRENT RECORD IN BLOCK AREA
  666. BLKEOD   DS    XL2 OFFSET OF CURRENT END OF DATA IN BLOCK AREA
  667. BLKEND   DS    XL2 OFFSET OF END OF ALLOCATED BLOCK AREA
  668. WLRECL   DS    H   REVERSED LRECL
  669. WBLKSZ   DS    H   REVERSED BLKSZ
  670. LDCB     EQU   *-IHADCB
  671. *
  672. ******************************************************************************
  673. TESTIO   CSECT
  674.     DC    C'FREC'
  675. FREC     DC    XL128'00'
  676.     DC    C'FALT'
  677. FALT     DC    XL128'FF'
  678.     DC    C'VREC'
  679. VREC     DC    XL55'00'
  680. TESTFTST DC    C'TESTF.TST',X'00' RENAME ASCIIZ FOR TESTF.DAT
  681. FDSN     DC    C'TESTF.DAT',X'00'
  682.     DC    C'TESTF DCB'
  683. TESTF    DS    0A
  684.     DC    C'ADCB'  DCBDCB EDCDIC DCB IDENTIFIER
  685.     DC    A(FDSN)  DCBDSN PATH/FILE NAME FOLLOWED BY ZERO
  686.     DC    X'FFFF'  DCBFID FILE ID ASSIGNED BY MS-DOS AT OPEN
  687.     DC    X'00'    DCBFLG FLAGS
  688.     DC    C'S'     DSORG  DATA SET ORGANIZATION
  689.     DC    C'P'     MACRF  ACCESS MODE
  690.     DC    C'F'     RECFM  RECORD FORMAT
  691.     DC    X'0A'    EOR    END OF RECORD CODE (TEST ONLY)
  692.     DC    X'1A'    EOF    END OF FILE CODE (TEXT ONLY)
  693.     DC    H'128'   LRECL  LOGICAL RECORD LENGTH
  694.     DC    H'128'   BLKSZ  BLOCK SIZE
  695.     DC    A(FEOF)  EODAD  END OF DATA EXIT ADDRESS
  696.     DC    A(FSYN)  SYNAD  ERROR EXIT ADDRESS
  697.     DC    A(FREC)  RCD    RECORD AREA FOR GET/PUT
  698.     DC    A(0)     BLK    BLOCK AREA FOR READ/WRITE (0 FOR DYNAMIC)
  699.     DC    A(0)     RBA    RELATIVE BYTE ADDRESS FOR RANDOM READ/WRITE
  700.     DC    A(0)     REN    RENAME FILE FOLLOWED BY ZERO
  701.     DC    F'0'     IOCNT  BLOCK I/O COUNT SINCE OPEN
  702.     DC    H'0'     PRECL  PHYSICAL BLOCK SIZE OF LAST READ/WRITE
  703.     DC    XL(TESTF+LDCB-*)'00' RESERVED WORK AREA (SEE IHADCB)
  704. CDSN     DC    C'TESTC.DAT',X'00'
  705.     DC    C'TESTC DCB'
  706. TESTC    DS    0A
  707.     DC    C'ADCB'  DCBDCB EDCDIC DCB IDENTIFIER
  708.     DC    A(CDSN)  DCBDSN PATH/FILE NAME FOLLOWED BY ZERO
  709.     DC    X'FFFF'  DCBFID FILE ID ASSIGNED BY MS-DOS AT OPEN
  710.     DC    X'00'    DCBFLG FLAGS
  711.     DC    C'S'     DSORG  DATA SET ORGANIZATION
  712.     DC    C'W'     MACRF  ACCESS MODE
  713.     DC    C'F'     RECFM  RECORD FORMAT
  714.     DC    X'0A'    EOR    END OF RECORD CODE (TEST ONLY)
  715.     DC    X'1A'    EOF    END OF FILE CODE (TEXT ONLY)
  716.     DC    H'500'   LRECL  LOGICAL RECORD LENGTH
  717.     DC    H'500'   BLKSZ  BLOCK SIZE
  718.     DC    A(FCEOF) EODAD  END OF DATA EXIT ADDRESS
  719.     DC    A(FSYN)  SYNAD  ERROR EXIT ADDRESS
  720.     DC    A(FREC)  RCD    RECORD AREA FOR GET/PUT
  721.     DC    A(0)     BLK    BLOCK AREA FOR READ/WRITE (0 FOR DYNAMIC)
  722.     DC    A(0)     RBA    RELATIVE BYTE ADDRESS FOR RANDOM READ/WRITE
  723.     DC    A(0)     REN    RENAME FILE FOLLOWED BY ZERO
  724.     DC    F'0'     IOCNT  BLOCK I/O COUNT SINCE OPEN
  725.     DC    H'0'     PRECL  PHYSICAL BLOCK SIZE OF LAST READ/WRITE
  726.     DC    XL(TESTC+LDCB-*)'00' RESERVED WORK AREA (SEE IHADCB)
  727. VDSN     DC    C'TESTV.DAT',X'00'
  728.     DC    C'TESTV DCB'
  729. TESTV    DS    0A
  730.     DC    C'ADCB'  DCBDCB EBCDIC DCB IDENTIFIER
  731.     DC    A(VDSN)  DCBDSN PATH/FILE NAME FOLLOWED BY ZERO
  732.     DC    X'FFFF'  DCBFID FILE ID ASSIGNED BY MS-DOS AT OPEN
  733.     DC    X'00'    DCBFLG FLAGS
  734.     DC    C'S'     DSORG  DATA SET ORGANIZATION
  735.     DC    C'P'     MACRF  ACCESS MODE
  736.     DC    C'V'     RECFM  RECORD FORMAT
  737.     DC    X'0A'    EOR    END OF RECORD CODE (TEST ONLY)
  738.     DC    X'1A'    EOF    END OF FILE CODE (TEXT ONLY)
  739.     DC    H'55'    LRECL  LOGICAL RECORD LENGTH
  740.     DC    H'2048'  BLKSZ  BLOCK SIZE
  741.     DC    A(VEOF)  EODAD  END OF DATA EXIT ADDRESS
  742.     DC    A(VSYN)  SYNAD  ERROR EXIT ADDRESS
  743.     DC    A(VREC)  RCD    RECORD AREA FOR GET/PUT
  744.     DC    A(0)     BLK    BLOCK AREA FOR READ/WRITE (0 FOR DYNAMIC)
  745.     DC    A(0)     RBA    RELATIVE BYTE ADDRESS FOR RANDOM READ/WRITE
  746.     DC    A(0)     REN    RENAME FILE FOLLOWED BY ZERO
  747.     DC    F'0'     IOCNT  BLOCK I/O COUNT SINCE OPEN
  748.     DC    H'0'     PRECL  PHYSICAL BLOCK SIZE OF LAST READ/WRITE
  749.     DC    XL(TESTV+LDCB-*)'00' RESERVED WORK AREA (SEE IHADCB)
  750. TREC     DC    XL10'00'
  751. TL1      DC    0CL8' ',C'TEXT 1',X'0D0A'
  752. TL2      DC    0CL8' ',C'TEXT 2',X'0D0A'
  753. TDSN     DC    C'TESTT.DAT',X'00'
  754.     DC    C'TESTT DCB'
  755. TESTT    DS    0A
  756.     DC    C'ADCB'  DCBDCB EDCDIC DCB IDENTIFIER
  757.     DC    A(TDSN)  DCBDSN PATH/FILE NAME FOLLOWED BY ZERO
  758.     DC    X'FFFF'  DCBFID FILE ID ASSIGNED BY MS-DOS AT OPEN
  759.     DC    X'00'    DCBFLG FLAGS
  760.     DC    C'S'     DSORG  DATA SET ORGANIZATION
  761.     DC    C'P'     MACRF  ACCESS MODE
  762.     DC    C'T'     RECFM  RECORD FORMAT
  763.     DC    X'0A'    EOR    END OF RECORD CODE (TEST ONLY)
  764.     DC    X'1A'    EOF    END OF FILE CODE (TEXT ONLY)
  765.     DC    H'10'    LRECL  LOGICAL RECORD LENGTH
  766.     DC    H'0'     BLKSZ  BLOCK SIZE
  767.     DC    A(TEOF)  EODAD  END OF DATA EXIT ADDRESS
  768.     DC    A(TSYN)  SYNAD  ERROR EXIT ADDRESS
  769.     DC    A(TREC)  RCD    RECORD AREA FOR GET/PUT
  770.     DC    A(0)     BLK    BLOCK AREA FOR READ/WRITE (0 FOR DYNAMIC)
  771.     DC    A(0)     RBA    RELATIVE BYTE ADDRESS FOR RANDOM READ/WRITE
  772.     DC    A(0)     REN    RENAME FILE FOLLOWED BY ZERO
  773.     DC    F'0'     IOCNT  BLOCK I/O COUNT SINCE OPEN
  774.     DC    H'0'     PRECL  PHYSICAL BLOCK SIZE OF LAST READ/WRITE
  775.     DC    XL(TESTT+LDCB-*)'00' RESERVED WORK AREA (SEE IHADCB)
  776. ASCBASF  EQU   X'118'   ASCB FREE MEMORY QUEUE POINTER
  777. SAVEFQE  DC    XL8'00'  SAVE FIRST FQE FOR VERIFY AT EOJ
  778.     END   TESTIO
  779.