You are on page 1of 3

===========> BEGIN PUTVAR (SOURCE 1 OF 3)

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)

You might also like