mirror of
https://github.com/moshix/mvs.git
synced 2026-02-25 16:00:18 +00:00
330 lines
8.0 KiB
Plaintext
330 lines
8.0 KiB
Plaintext
TITLE 'TESTCIO - PC/370 TEST COBOL SUBROUTINE I/O'
|
||
*
|
||
* AUTHOR. Don Higgins.
|
||
* DATE. 11/13/87. (Copied and modified from PRINTDOC.ALC)
|
||
* REMARKS. PC/370 COBOL SUBROUTINE TO READ FILE NAME PASSED FROM
|
||
* COBOL and print it with page control.
|
||
*
|
||
* COPYRIGHT. None. This is a public domain program.
|
||
*
|
||
* MAINTENANCE.
|
||
*
|
||
* 11/20/87 ADD SYNERROR CALL TO DISPLAY ANY I/O ERRORS AND EXIT
|
||
* RELOCATE ROUTINE REQUIRED TO CONVERT DCB AND EXTERNAL
|
||
* ADDRESS CONSTANTS TO V=R. CLEAR R15 RETURN CODE.
|
||
* INPUT
|
||
*
|
||
* 1. CALL 'TESTCIO' USING FILE-NAME.
|
||
*
|
||
* FILE-NAME = MS-DOS DRIVE\PATH\FILENAME WITH TRAILING BLANKS.
|
||
*
|
||
* OUTPUT
|
||
*
|
||
* 1. File will be printed on the standard printer device with
|
||
* page control added via TITLE, EJECT, and SPACE statements as
|
||
* defined in standard OS/VS assembler.
|
||
*
|
||
TESTCIO CSECT
|
||
STM R14,R12,12(R13)
|
||
LR R10,R15
|
||
USING TESTCIO,R10
|
||
L R1,0(R1)
|
||
MVC DSNUT1,0(R1) MOVE FILE NAME TO WORK AREA
|
||
LA R2,=C'PC/370 TESTCIO FILE PRINT SUBROUTINE$'
|
||
SVC WTO
|
||
LA R2,=C' $'
|
||
SVC WTO
|
||
BAL R14,RELOCATE ADJUST DCB ADDRESSES TO ABS. ADDR.
|
||
BAL R14,GETPARM
|
||
LTR R15,R15
|
||
BNZ EOJ
|
||
BAL R12,OPENFILE
|
||
LTR R15,R15
|
||
BNZ EOJ
|
||
LA R1,ASCTITLE
|
||
LA R2,L'ASCTITLE+L'ASCEJECT+L'ASCSPACE
|
||
SVC EBCASC
|
||
LA R2,=C'ENTER P FOR PRINTER OUTPUT OR ANY KEY FOR CONSOLE$'
|
||
SVC WTO
|
||
SVC READKEY
|
||
STC R0,OPTION
|
||
MAINLOOP EQU *
|
||
BAL R12,GETREC
|
||
LTR R15,R15 TEST FOR END OF FILE
|
||
BNZ ENDFILE
|
||
BAL R14,SCAN
|
||
LTR R15,R15 TEST FOR COMMAND AND SKIP PRINTING IT
|
||
BNZ MAINLOOP
|
||
AP LINE,=P'1'
|
||
CP LINE,MAXLINE
|
||
BNH NEXTLINE
|
||
BAL R11,NEWPAGE
|
||
NEXTLINE EQU *
|
||
LA R0,RECORD
|
||
BAL R12,PUTREC
|
||
B MAINLOOP
|
||
ENDFILE EQU *
|
||
BAL R12,CLOSEFIL
|
||
EOJ EQU *
|
||
LM R14,R12,12(R13)
|
||
XR R15,R15
|
||
BR R14
|
||
TITLE 'GETPARM - MOVE PARM TO DCB'
|
||
GETPARM EQU *
|
||
LA R1,DSNUT1
|
||
LA R2,L'DSNUT1
|
||
FNDBLK EQU *
|
||
CLI 0(R1),C' ' FIND FIRST BLANK
|
||
BE HITBLK
|
||
LA R1,1(R1)
|
||
BCT R2,FNDBLK
|
||
LA R2,=C'NO BLANK FOUND AFTER FILENAME$'
|
||
SVC WTO
|
||
LA R15,16
|
||
BR R14
|
||
HITBLK EQU *
|
||
MVI 0(R1),0 PLACE TRAILING NULL FOR OPEN
|
||
SR R15,R15
|
||
BR R14
|
||
TITLE 'SCAN FOR TITLE, EJECT, AND SPACE COMMANDS'
|
||
SCAN EQU *
|
||
CLI RECORD,ASCBLK
|
||
BE SCANOP
|
||
CLI RECORD,ASCTAB
|
||
BNE SCANEXIT EXIT IF FIRST CHAR. NOT BLANK OR TAB
|
||
SCANOP EQU *
|
||
LA R4,RECORD+1
|
||
SKIPBLK EQU *
|
||
CLI 0(R4),ASCLF
|
||
BE SCANEXIT
|
||
CLI 0(R4),ASCBLK
|
||
LA R4,1(R4)
|
||
BE SKIPBLK
|
||
BCTR R4,0
|
||
CLC 0(5,R4),ASCTITLE
|
||
BE TITLE
|
||
CLC 0(5,R4),ASCEJECT
|
||
BE EJECT
|
||
CLC 0(5,R4),ASCSPACE
|
||
BE SPACE
|
||
SCANEXIT EQU *
|
||
SR R15,R15
|
||
BR R14
|
||
TITLE EQU *
|
||
LA R4,5(R4)
|
||
FINDQ1 EQU *
|
||
CLI 0(R4),ASCBLK
|
||
BL SCANEXIT IGNORE TITLE IF FIRST QUOTE NOT FOUND
|
||
CLI 0(R4),ASCQ
|
||
LA R4,1(R4)
|
||
BNE FINDQ1
|
||
LA R3,TITLEMSG
|
||
LA R5,TITLEMSG+L'TITLEMSG
|
||
FINDQ2 EQU *
|
||
CLI 0(R4),ASCBLK
|
||
BL SETTITLE TRUNCATE IF SECOND QUOTE NOT FOUND
|
||
CLI 0(R4),ASCQ
|
||
BE SETTITLE
|
||
CLR R3,R5
|
||
BNL SETTITLE TRUNCATE IF TOO LONG
|
||
MVC 0(1,R3),0(R4) COPY TITLE
|
||
LA R3,1(R3)
|
||
LA R4,1(R4)
|
||
B FINDQ2
|
||
SETTITLE EQU *
|
||
CLR R3,R5
|
||
BNL EJECT
|
||
MVI 0(R3),ASCBLK PAD WITH BLANKS
|
||
LA R3,1(R3)
|
||
B SETTITLE
|
||
EJECT EQU *
|
||
BAL R11,NEWPAGE
|
||
LA R15,1
|
||
BR R14
|
||
SPACE EQU *
|
||
LA R0,SPACEMSG
|
||
BAL R12,PUTREC
|
||
LA R0,SPACEMSG
|
||
BAL R12,PUTREC
|
||
AP LINE,=P'2'
|
||
LA R15,1
|
||
BR R14
|
||
TITLE 'NEWPAGE - PRINT HEADING'
|
||
NEWPAGE EQU *
|
||
AP PAGE,=P'1'
|
||
ZAP LINE,=P'0'
|
||
MVC DPAGE,MASK
|
||
ED DPAGE,PAGE
|
||
MVC PAGEMSG,PAGEWORK
|
||
LA R1,PAGEMSG
|
||
LA R2,L'PAGEMSG
|
||
SVC EBCASC
|
||
LA R0,HEADING
|
||
BAL R12,PUTREC
|
||
MVI HEADCC,ASCFF FORCE FORM FEED AFTER FIRST PAGE
|
||
LA R0,SPACEMSG
|
||
BAL R12,PUTREC SKIP SPACE AFTER TITLE
|
||
BR R11
|
||
TITLE 'OPEN/CLOSE FILE ROUTINES'
|
||
*
|
||
* NOTE SYNAD EXIT WILL CALL SYNERROR TO FORMAT ERROR AND EXIT TO R12
|
||
*
|
||
OPENFILE EQU *
|
||
LA R2,SYSUT1
|
||
SVC OPEN
|
||
BR R12
|
||
CLOSEFIL EQU *
|
||
LA R2,SYSUT1
|
||
SVC CLOSE
|
||
BR R12
|
||
TITLE 'GETREC - GET NEXT TEXT RECORD OR SET EOF'
|
||
GETREC EQU *
|
||
LA R2,SYSUT1
|
||
LA R1,RECORD
|
||
SVC GET
|
||
SR R15,R15
|
||
BR R12
|
||
EOFRTN EQU *
|
||
LA R15,1
|
||
BR R12
|
||
SYNRTN EQU *
|
||
L R15,ASYNERR
|
||
BALR R14,R15
|
||
LA R15,16
|
||
BR R12
|
||
TITLE 'PUTREC - PUT RECORD TO STD. PRINT DEVICE'
|
||
PUTREC EQU *
|
||
LR R4,R0
|
||
PUTLOOP EQU *
|
||
IC R2,0(R4)
|
||
CLI 0(R4),ASCTAB
|
||
LA R3,1
|
||
BNE PUTCHAR
|
||
LA R3,9
|
||
LA R2,ASCBLK
|
||
PUTCHAR EQU *
|
||
SVC CONSOLEC PRINT ON CONSOLE
|
||
CLI OPTION,ASCP
|
||
BE ISUSVC
|
||
CLI OPTION,ASCPL
|
||
BE ISUSVC
|
||
B PUTSKPP
|
||
ISUSVC SVC PRINTC PRINT ON STD. OUTPUT DEVICE ALSO
|
||
PUTSKPP EQU *
|
||
BCT R3,PUTCHAR
|
||
CLI 0(R4),ASCLF
|
||
LA R4,1(R4)
|
||
BNE PUTLOOP
|
||
PUTEXIT EQU *
|
||
SR R15,R15
|
||
BR R12
|
||
RELOCATE EQU * CONVERT DCB ADDRESSES TO ABSOLUTE ADDR.
|
||
CLI RESET,TRUE ONLY RELOCATE ONCE
|
||
BER R14
|
||
MVI RESET,TRUE
|
||
LR R1,R10
|
||
SH R1,=AL2(X'200') R1 = ORIGIN USED BY L370 (BIN+X'10')
|
||
LA R2,SYSUT1
|
||
USING IHADCB,R2
|
||
LR R0,R1
|
||
A R0,ASYNERR R0 = ABS. ADDR. OF SYNERROR ROUTINE
|
||
ST R0,ASYNERR
|
||
LR R0,R1
|
||
A R0,DCBDSN R0 = ABS. ADDR. OF DSN
|
||
ST R0,DCBDSN
|
||
LR R0,R1
|
||
A R0,SYNAD
|
||
ST R0,SYNAD
|
||
LR R0,R1
|
||
A R0,EODAD
|
||
ST R0,EODAD
|
||
LR R0,R1
|
||
A R0,RCD
|
||
ST R0,RCD
|
||
DROP R2
|
||
BR R14
|
||
TITLE 'DATA SECTION'
|
||
LTORG
|
||
*
|
||
* REGISTER USAGE
|
||
*
|
||
R0 EQU 0 SVC RETURN CODE
|
||
R1 EQU 1 SVC ARGUMENT
|
||
R2 EQU 2 SVC ARGUMENT (DCB ADDRESS, DMA, MSG, ETC.)
|
||
R3 EQU 3 POINTER FOR MOVING TITLE
|
||
R4 EQU 4 OUTPUT BYTE PTR FOR PUTREC
|
||
R5 EQU 5 END OF TITLE AREA
|
||
R10 EQU 10 BASE
|
||
R11 EQU 11 LINK FOR NEWPAGE
|
||
R12 EQU 12 LINK FOR GETREC AND PUTREC
|
||
R13 EQU 13 SAVE
|
||
R14 EQU 14 LINK FROM MAINLINE TO ROUTINES
|
||
R15 EQU 15 RETURN CODE FROM ROUTINES
|
||
*
|
||
* PC/370 SVC'S
|
||
*
|
||
EXIT EQU 0
|
||
OPEN EQU 1
|
||
CLOSE EQU 2
|
||
GET EQU 5
|
||
PUT EQU 6
|
||
TRACE EQU 9
|
||
GMAIN EQU 10
|
||
FMAIN EQU 11
|
||
ASCEBC EQU 12
|
||
EBCASC EQU 13
|
||
READKEY EQU 200+1 MS-DOS SVC 1 READ KEY
|
||
CONSOLEC EQU 200+2 MS-DOS SVC 2 DISPLAY CHAR IN R2 ON CONSOLE
|
||
PRINTC EQU 200+5 MS-DOS SVC 5 PRINT CHAR IN R2 ON STD. PRINTER
|
||
WTO EQU 200+9 MS-DOS SVC 9 PRINT STRING WITH ENDING $ ON CON.
|
||
*
|
||
* DATA AREAS
|
||
*
|
||
RESET DC AL1(FALSE) SWITCH TO RELOCATE CODE ONLY ONCE
|
||
TRUE EQU 1
|
||
FALSE EQU 0
|
||
TBUFF EQU X'80' BUFFER FOR DIRECTORY SEARCH
|
||
ASYNERR DC V(SYNERROR) SYNAD ERROR MESSAGE ROUTINE
|
||
RECORD DS XL256 LOGICAL RECORD AREA
|
||
ASCLF EQU X'0A' ASCII LINE FEED
|
||
ASCCR EQU X'0D' ASCII CARRIAGE RETURN
|
||
ASCASK EQU X'2A' ASCII ASTERISK FOR ALC COMMENT CHECK
|
||
ASCBLK EQU X'20' ASCII SPACE
|
||
ASCQ EQU X'27' ASCII QUOTE
|
||
ASCTAB EQU X'09' ASCII TAB
|
||
ASCFF EQU X'0C' ASCII FORM FEED
|
||
ASCP EQU X'50' UPPERCASE ASCII P
|
||
ASCPL EQU X'70' LOWER CASE ASCII P
|
||
OPTION DC X'00'
|
||
ASCTITLE DC C'TITLE'
|
||
ASCEJECT DC C'EJECT'
|
||
ASCSPACE DC C'SPACE'
|
||
PAGE DC PL2'0'
|
||
LINE DC PL2'50'
|
||
MAXLINE DC PL2'50'
|
||
MASK DC X'40202020' EDIT MASK FOR PL2
|
||
HEADING EQU *
|
||
HEADCC DC AL1(ASCBLK)
|
||
TITLEMSG DC 0CL65' ',65AL1(ASCBLK),2AL1(ASCBLK)
|
||
PAGEMSG DC 0CL8' ',9AL1(ASCBLK)
|
||
SPACEMSG DC AL1(ASCCR,ASCLF) END OF HEADING
|
||
WORK DC 0CL20' '
|
||
PAGEWORK DC 0CL8' ',C'PAGE'
|
||
DPAGE DC CL4' ZZZ'
|
||
DSNUT1 DC CL64' '
|
||
COPY CPY\IHADCB
|
||
TESTCIO CSECT
|
||
SYSUT1 DC 0F'0',C'ADCB'
|
||
DC A(DSNUT1) PATH/FILE NAME IN PARM
|
||
DC X'FFFF'
|
||
DC X'00'
|
||
DC C'SGT' SEQ. GET TEXT
|
||
DC X'0A1A'
|
||
DC H'255' LRECL
|
||
DC H'8192' BLKSZ
|
||
DC A(EOFRTN) EODAD
|
||
DC A(SYNRTN) SYNAD
|
||
DC A(RECORD) RECORD AREA
|
||
DC XL(SYSUT1+LDCB-*)'00'
|
||
END TESTCIO
|
||
|