Professional Documents
Culture Documents
YREGS
PUTVAR AMODE 31
PUTVAR RMODE ANY
PUTVAR CSECT
SAVE (14,12)
LR
R12,R15
LOCAL BASE
USING PUTVAR,R12
BAS R14,INIT
PERFORM INIT
USING DYNSTG,R13
BAS R14,SETUP
PERFORM SETUP
*
GET
L
1,INP@
GET INPUT
GET (1)
LR 2,1
R2 => RECORD
LH 3,RECLEN
GET RECLEN
BCTR 3,0
R1 => INDEX
SR 5,5
BCTR 5,0
R3 = -1 (INCREMENT/COMPARE)
LOOP LA 4,0(3,2)
R4 => BYTE TO CHECK
CLI 0(4),X'40'
BLANK?
BNE PUT
NO: GO
BXH 3,5,LOOP
DO WHILE MORE
PUT
LA 3,1(,3)
ADD BACK ONE
LA 4,4(,3)
R4 = LEN (+4 FOR RDW)
L
1,OUT@
GET OUTBUF POS
STH 4,DCBLRECL-IHADCB(R1)
STORE
PUT (1)
SLL 4,16
SHIFT TO LLBB
ST 4,0(,1)
STORE RDW
LA 0,4(,1)
R0 => OUTPTR
LR 1,3
R1 => OUTLEN
MVCL 0,2
MOVE RECORD TO BUFFER
B
GET
CONTINUE
*
CLOSE CLOSE MODE=31,MF=(E,DMLIST) CLOSE FILES AND RETURN
*
L
R13,4(,R13)
RESTORE SYS SA ADDR
LM
R14,R12,12(R13) RESTORE SYS REGS
SR
R15,R15
SET RC=0
BR
R14
RETURN
*
INIT LA
R0,DSLEN
GET WORK AREA
SR
15,15
SUBPOOL=0
SR
1,1
"ZERO RESERVED REG 1"
SVC 120
ISSUE GETMAIN SVC
ST
R1,8(,R13)
CHAIN FORWARD
ST
R13,4(,R1)
CHAIN BACK
LR
R13,R1
LOCAL SAVE AREA
BR
R14
RETURN
*
SETUP ST
R14,RETSAV
STORE RETN ADDR
*
* SETUP DATA MGMT LIST
*
XC
DMLIST(2*L'DMLIST),DMLIST INIT DATA MGMT LIST AREA
*
* CREATE DCB FOR QSAM INPUT
*
LA
R0,DCBGL
LOAD GET/LOC DCB
BAS
LA
BASR
USING
MVC
ST
R14,LOAD
R15 -> DCBGL
R0,CLOSE
R0 -> EODAD
R14,R15
INSTALL EOD ADDR
IHADCB,R15
DCBDDNAM(5),=C'INPUT' SET DDNAME = INPUT
R15,INP@
STORE
*
* CREATE DCB FOR QSAM OUTPUT
*
LA
R0,DCBPL
LOAD PUT/LOC DCB
BAS R14,LOAD
R15 -> DCBPL
USING IHADCB,R15
MVC DCBDDNAM(6),=C'OUTPUT' SET DDNAME = OUTPUT
ST
R15,OUT@
STORE
OI
DMLIST+8,X'80' IND DCB = LAST FILE
*
OPEN MODE=31,MF=(E,DMLIST),(,,,OUTPUT)
*
L
R15,INP@
GET INPUT RECLEN
MVC RECLEN,DCBLRECL SAVE
DROP R15
*
L
R14,RETSAV
RESTORE RETURN ADDRESS
BR
R14
RETURN
*
LOAD LOAD EPLOC=(0)
LOAD
LR
R15,R0
R15 -> LOAD POINT
BR
R14
*
DCBGL DC
CL8'DCBGL'
DCBPL DC
CL8'DCBPL'
LTORG
*
DYNSTG DSECT
DS 18F
DMLIST DS 0D
DS
A
INP@ DS
A
INPUT DCB ADDRESS
DS
A
OUT@ DS
A
OUTPUT DCB ADDRESS
*
RETSAV DS
A
RECLEN DS
H
*
DSLEN EQU *-DYNSTG
PRINT NOGEN
DCBD DEVD=DA,DSORG=PS DCB DSECT
END PUTVAR
===========> END PUTVAR
(SOURCE 1 OF 3)
===========> BEGIN DCBGL (SOURCE 2 OF 3)
*---------------------------------------------------------------------*
* QSAM GET/LOCATE DCB
*
*---------------------------------------------------------------------*
DCBGL RMODE 24
DCBGL CSECT
USING DCBGL,15
DCB
DCB DSORG=PS,DDNAME=,MACRF=GL,DCBE=0
ORG DCB
B
DCBINI
ORG
DCBE@ DC
A(DCBEXT)
DCBINI L
1,DCBE@
ADDRESS DCBE
USING DCBE,1
ST
0,DCBEEODA
SET EODAD IN DCBE
ST
1,DCB
SET DCBE@ IN DCB
BR
14
RETURN
*---------------------------------------------------------------------*
* DCBE FOR QSAM GET/LOCATE DCB
*
*---------------------------------------------------------------------*
DCBEXT RMODE 31
DCBEXT CSECT
DCBE BLKSIZE=0,RMODE31=BUFF,EODAD=0,MULTACC=1,MULTSDN=1
IHADCBE
END DCBGL
PUNCH ' MODE RMODE(SPLIT)'
PUNCH ' SETOPT PARM(REUS=NONE)'
PUNCH ' ENTRY DCBGL'
PUNCH ' NAME DCBGL(R)'
END
===========> END DCBGL
(SOURCE 2 OF 3)
===========> BEGIN DCBPL (SOURCE 3 OF 3)
*---------------------------------------------------------------------*
* QSAM PUT/LOCATE DCB
*
*---------------------------------------------------------------------*
DCBPL RMODE 24
DCBPL CSECT
DCB DSORG=PS,DDNAME=,MACRF=PL,DCBE=DCBEXT
*---------------------------------------------------------------------*
* DCBE FOR QSAM PUT/LOCATE DCB
*
*---------------------------------------------------------------------*
DCBEXT RMODE 31
DCBEXT CSECT
DCBE BLKSIZE=0,RMODE31=BUFF
END DCBPL
PUNCH ' MODE RMODE(SPLIT)'
PUNCH ' SETOPT PARM(REUS=NONE)'
PUNCH ' ENTRY DCBPL'
PUNCH ' NAME DCBPL(R)'
END
===========> END DCBPL (SOURCE 3 OF 3)