1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
| PRINT GEN
GOSVB START 0
GOSVB AMODE 31
GOSVB RMODE 24
BAKR 14,0
USING GOSVB,R12
LR R12,R15
LR R10,R1 FOR ADDRESSING PARAMETERS
LA R5,DCBFILE
USING IHADCB,R5
L R2,4(,R10) GET DDNAME
MVC DCBDDNAM,0(R2) STORE DDNAME IN DCBFILE
L R2,16(,R10) GET RETURN CODE
XC 0(4,R2),0(R2) CLEAR RETURN CODE
L R2,0(,R10) GET CODTRA
CLC 0(8,R2),=CL8'OPENGET ' CODTRA = OPENGET ?
BE OPENGET YES GO OPEN FOR OPEN INPUT FILE
CLC 0(8,R2),=CL8'OPENPUT ' CODTRA = OPENPUT ?
BE OPENPUT YES GO OPEN FOR OPEN OUTPUT FILE
CLC 0(8,R2),=CL8'GET ' CODTRA = GET ?
BE GETFILE YES GO READ FILE
CLC 0(8,R2),=CL8'PUT ' CODTRA = PUT ?
BE PUTFILE YES GO WRITE RECORD
CLC 0(8,R2),=CL8'CLOSE ' CODTRA = PUT ?
BE CLSFILE YES GO WRITE RECORD
L R2,16(,R10) GET RETURN CODE
LA R3,200 INVALID CODTRA
ST R3,0(R2) RETURN CODE = 200
RETURN EQU *
SR R15,R15
PR BYE BYE
OPENGET EQU *
WTO 'ICI SVA01'
L R2,4(,R10) GET DDNAME
MVC DCBDDNAM,0(R2) STORE DDNAME IN DCBFILE
OPEN (DCBFILE,(INPUT))
B CHECKOPN
CHECKOPN EQU *
WTO 'ICI SVA02'
TM DCBFILE+48,X'10' OPEN OK ?
BO OPENOK YES CONTINUE
L R2,16(,R10) GET RETURN CODE
LA R3,110 ERROR DURING OPEN FILE
ST R3,0(R2) RETURN CODE = 110
B RETURN
OPENOK EQU *
WTO 'ICI SVA03'
RDJFCB DCBFILE RETRIEVE LRECL
LTR R15,R15
BZ GETLRECL
L R2,16(,R10) GET RETURN CODE
ST R15,0(R2) RETURN CODE = R15
B RETURN
GETLRECL EQU *
WTO 'ICI SVA04'
LA R6,JFCBAREA
USING JFCB,R6
L R2,12(,R10) GET LGTAREA
XC 0(4,R2),0(R2) CLEAR LGTAREA
XR R4,R4 CLEAR R4
LH R4,JFCLRECL GET LRECL
TM JFCBTSDM,JFCSDS SYSIN FILE ?
BO GETRECFM
TM JFCDSRG1,JFCORGPS CHECK FOR PS FILE
BO GETRECFM OK CONTINUE
TM JFCDSRG1,JFCORGPO CHECK FOR PO FILE
BNO FILEINVA NO,INVALID ORGANISATION
CLI JFCBELNM,X'40' YES,MEMBER NAME PRESENT ?
BNZ GETRECFM YES CONTINUE
FILEINVA EQU *
WTO 'ICI SVA05'
L R2,16(,R10) GET RETURN CODE
LA R3,120 NOT PS FILE
ST R3,0(R2) RETURN CODE = 120
B RETURN
GETRECFM EQU *
WTO 'ICI SVA06'
TM JFCRECFM,JFCFIX RECFM = F ?
BO RECFMF YES CONTINUE
TM JFCRECFM,JFCVAR RECFM = V ?
BO RECFMV YES CONTINUE
L R2,16(,R10) GET RETURN CODE
LA R3,130 INVALID RECFM
ST R3,0(R2) RETURN CODE = 130
B RETURN
RECFMF EQU *
WTO 'ICI SVA07'
MVI RECFM,C'F' STORE RECFM
SAVLRECL EQU *
WTO 'ICI SVA08'
ST R4,LRECL
ST R4,0(R2) STORE LRECL INTO LGTAREA
B RETURN
RECFMV EQU *
WTO 'ICI SVA09'
MVI RECFM,C'V' STORE RECFM
SH R4,=H'4'
B SAVLRECL
OPENPUT EQU *
WTO 'ICI SVA10'
L R2,4(,R10) GET DDNAME
MVC DCBDDNAM,0(R2) STORE DDNAME IN DCBFILE
OPEN (DCBFILE,(OUTPUT))
B CHECKOPN
GETFILE EQU *
WTO 'ICI SVA11'
GET DCBFILE,IOAREA
LA R8,IOAREA
XR R7,R7
LH R7,DCBLRECL GET LENGTH OF RECORD.
CLI RECFM,C'F' RECFM = F ?
BE TRSFREC YES GO TO MOVE
SH R7,=H'4' SUBTRACT 4 FROM LENGTH
LA R8,4(R8) JUMP THE RDW
TRSFREC EQU *
WTO 'ICI SVA12'
L R2,12(,R10) GET LGTAREA
ST R7,0(R2) STORE LGT OF RECORD INTO LGTAREA
L R6,8(,R10) GET ZONEIO
LR R9,R7 GET LENGTH OF RECORD
MVCL R6,R8 MOVE IOAREA TO ZONEIO
B RETURN
PUTFILE EQU *
WTO 'ICI SVA13'
L R6,8(,R10) GET ZONEIO
LA R8,IOAREA GET ZONE OUTPUT
L R2,12(,R10) GET LGTAREA
CLI RECFM,C'V' IF RECFM = F THAN
BE GETLGT WE MOVE WITH THE SAVED LRECL
MVC 0(4,R2),LRECL
GETLGT EQU *
WTO 'ICI SVA14'
L R7,0(,R2) GET LENGTH OF RECORD TO WRITE
C R7,LRECL LENGTH > MAX LRECL
BNH ADAPTLGT NO CONTINUE
L R2,16(,R10) GET RETURN CODE
LA R3,140 INVALID LENGTH
ST R3,0(R2) RETURN CODE = 140
B RETURN
ADAPTLGT EQU *
WTO 'ICI SVA15'
CLI RECFM,C'F'
BE PUTREC
AH R7,=H'4' INCREASE LENGTH FOR RDW
STH R7,IOAREA CREATE RDW
XC IOAREA+2(2),IOAREA+2 CLEAR NEXT 2 BYTES
LA R8,4(R8) JUMP RDW
PUTREC EQU *
WTO 'ICI SVA16'
LR R9,R7 GET LENGTH OF RECORD
MVCL R8,R6 MOVE ZONEIO TO IOAREA
PUT DCBFILE,IOAREA
B RETURN
CLSFILE EQU *
WTO 'ICI SVA17'
CLOSE DCBFILE
B RETURN
EOFILE EQU *
WTO 'ICI SVA18'
L R2,16(,R10) GET RETURN CODE
WTO 'CODE RETOUR : ',ROUTCDE=11
LA R3,100 END OF FILE
ST R3,0(R2) RETURN CODE = 100
B RETURN
LST DS 0F
DC X'87'
DC AL3(JFCBAREA)
JFCBAREA DS 0F
DS CL176
RECFM DS CL1
LRECL DS 1F
LTORG
DCBFILE DCB DSORG=PS,MACRF=(GM,PM), *
DDNAME=SYSUT1,DCBE=DCBEFILE,EXLST=LST
DCBEFILE DCBE EODAD=EOFILE,RMODE31=BUFF
IOAREA DS CL32768
DCBD DSORG=PS
JFCB DSECT
IEFJFCBN LIST=YES
*
R0 EQU 0
R1 EQU 1
R2 EQU 2
R3 EQU 3
R4 EQU 4
R5 EQU 5
R6 EQU 6
R7 EQU 7
R8 EQU 8
R9 EQU 9
R10 EQU 10
R11 EQU 11
R12 EQU 12
R13 EQU 13
R14 EQU 14
R15 EQU 15
END |
Partager