MFmainframe-rea
WS carddemo · 26f629ef

cobol · 430 lines · sha256 f8eb6e3a561ff96a · guides at columns 7 and 72app/cbl/CBACT01C.cbl

1000100******************************************************************
2000200* PROGRAM : CBACT01C.CBL
3000300* Application : CardDemo
4000400* Type : BATCH COBOL Program
5000500* FUNCTION : READ THE ACCOUNT FILE AND WRITE INTO FILES.
6000600******************************************************************
7000700* Copyright Amazon.com, Inc. or its affiliates.
8000800* All Rights Reserved.
9000900*
10001000* Licensed under the Apache License, Version 2.0 (the "License").
11001100* You may not use this file except in compliance with the License.
12001200* You may obtain a copy of the License at
13001300*
14001400* http://www.apache.org/licenses/LICENSE-2.0
15001500*
16001600* Unless required by applicable law or agreed to in writing,
17001700* software distributed under the License is distributed on an
18001800* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
19001900* either express or implied. See the License for the specific
20002000* language governing permissions and limitations under the License
21002100******************************************************************
22 IDENTIFICATION DIVISION.
23 PROGRAM-ID. CBACT01C.
24 AUTHOR. AWS.
25
26 ENVIRONMENT DIVISION.
27 INPUT-OUTPUT SECTION.
28 FILE-CONTROL.
29 SELECT ACCTFILE-FILE ASSIGN TO ACCTFILE
30 ORGANIZATION IS INDEXED
31 ACCESS MODE IS SEQUENTIAL
32 RECORD KEY IS FD-ACCT-ID
33 FILE STATUS IS ACCTFILE-STATUS.
34 *
35 SELECT OUT-FILE ASSIGN TO OUTFILE
36 ORGANIZATION IS SEQUENTIAL
37 ACCESS MODE IS SEQUENTIAL
38 FILE STATUS IS OUTFILE-STATUS.
39 *
40 SELECT ARRY-FILE ASSIGN TO ARRYFILE
41 ORGANIZATION IS SEQUENTIAL
42 ACCESS MODE IS SEQUENTIAL
43 FILE STATUS IS ARRYFILE-STATUS.
44 *
45 SELECT VBRC-FILE ASSIGN TO VBRCFILE
46 ORGANIZATION IS SEQUENTIAL
47 ACCESS MODE IS SEQUENTIAL
48 FILE STATUS IS VBRCFILE-STATUS.
49 *
50 DATA DIVISION.
51 FILE SECTION.
52 FD ACCTFILE-FILE.
53 01 FD-ACCTFILE-REC.
54 05 FD-ACCT-ID PIC 9(11).
55 05 FD-ACCT-DATA PIC X(289).
56 FD OUT-FILE.
57 01 OUT-ACCT-REC.
58 05 OUT-ACCT-ID PIC 9(11).
59 05 OUT-ACCT-ACTIVE-STATUS PIC X(01).
60 05 OUT-ACCT-CURR-BAL PIC S9(10)V99.
61 05 OUT-ACCT-CREDIT-LIMIT PIC S9(10)V99.
62 05 OUT-ACCT-CASH-CREDIT-LIMIT PIC S9(10)V99.
63 05 OUT-ACCT-OPEN-DATE PIC X(10).
64 05 OUT-ACCT-EXPIRAION-DATE PIC X(10).
65 05 OUT-ACCT-REISSUE-DATE PIC X(10).
66 05 OUT-ACCT-CURR-CYC-CREDIT PIC S9(10)V99.
67 05 OUT-ACCT-CURR-CYC-DEBIT PIC S9(10)V99
68 USAGE IS COMP-3.
69 05 OUT-ACCT-GROUP-ID PIC X(10).
70 *
71 FD ARRY-FILE.
72 01 ARR-ARRAY-REC.
73 05 ARR-ACCT-ID PIC 9(11).
74 05 ARR-ACCT-BAL OCCURS 5 TIMES.
75 10 ARR-ACCT-CURR-BAL PIC S9(10)V99.
76 10 ARR-ACCT-CURR-CYC-DEBIT PIC S9(10)V99
77 USAGE IS COMP-3.
78 05 ARR-FILLER PIC X(04).
79 *
80 FD VBRC-FILE
81 RECORDING MODE IS V
82 RECORD IS VARYING IN SIZE
83 FROM 10 TO 80 DEPENDING
84 ON WS-RECD-LEN.
85 01 VBR-REC PIC X(80).
86 WORKING-STORAGE SECTION.
87
88 ****0************************************************************
89 COPY CVACT01Y.
90 COPY CODATECN.
91 01 ACCTFILE-STATUS.
92 05 ACCTFILE-STAT1 PIC X.
93 05 ACCTFILE-STAT2 PIC X.
94 01 OUTFILE-STATUS.
95 05 OUTFILE-STAT1 PIC X.
96 05 OUTFILE-STAT2 PIC X.
97 01 ARRYFILE-STATUS.
98 05 ARRYFILE-STAT1 PIC X.
99 05 ARRYFILE-STAT2 PIC X.
100 01 VBRCFILE-STATUS.
101 05 VBRCFILE-STAT1 PIC X.
102 05 VBRCFILE-STAT2 PIC X.
103
104 01 IO-STATUS.
105 05 IO-STAT1 PIC X.
106 05 IO-STAT2 PIC X.
107 01 TWO-BYTES-BINARY PIC 9(4) BINARY.
108 01 TWO-BYTES-ALPHA REDEFINES TWO-BYTES-BINARY.
109 05 TWO-BYTES-LEFT PIC X.
110 05 TWO-BYTES-RIGHT PIC X.
111 01 IO-STATUS-04.
112 05 IO-STATUS-0401 PIC 9 VALUE 0.
113 05 IO-STATUS-0403 PIC 999 VALUE 0.
114
115 01 APPL-RESULT PIC S9(9) COMP.
116 88 APPL-AOK VALUE 0.
117 88 APPL-EOF VALUE 16.
118
119 01 END-OF-FILE PIC X(01) VALUE 'N'.
120 01 ABCODE PIC S9(9) BINARY.
121 01 TIMING PIC S9(9) BINARY.
122 01 WS-RECD-LEN PIC 9(04).
123 01 VBRC-REC1.
124 05 VB1-ACCT-ID PIC 9(11).
125 05 VB1-ACCT-ACTIVE-STATUS PIC X(01).
126 01 VBRC-REC2.
127 05 VB2-ACCT-ID PIC 9(11).
128 05 VB2-ACCT-CURR-BAL PIC S9(10)V99.
129 05 VB2-ACCT-CREDIT-LIMIT PIC S9(10)V99.
130 05 VB2-ACCT-REISSUE-YYYY PIC X(04).
131 01 WS-ACCT-REISSUE-DATE.
132 05 WS-ACCT-REISSUE-YYYY PIC X(04).
133 05 WS-FILLER-1 PIC X(01).
134 05 WS-ACCT-REISSUE-MM PIC X(02).
135 05 WS-FILLER-2 PIC X(01).
136 05 WS-ACCT-REISSUE-DD PIC X(02).
137 01 WS-REISSUE-DATE REDEFINES WS-ACCT-REISSUE-DATE PIC X(10).
138
139 *****************************************************************
140 PROCEDURE DIVISION.
141 DISPLAY 'START OF EXECUTION OF PROGRAM CBACT01C'.
142 PERFORM 0000-ACCTFILE-OPEN.
143 PERFORM 2000-OUTFILE-OPEN.
144 PERFORM 3000-ARRFILE-OPEN.
145 PERFORM 4000-VBRFILE-OPEN.
146
147 PERFORM UNTIL END-OF-FILE = 'Y'
148 IF END-OF-FILE = 'N'
149 PERFORM 1000-ACCTFILE-GET-NEXT
150 IF END-OF-FILE = 'N'
151 DISPLAY ACCOUNT-RECORD
152 END-IF
153 END-IF
154 END-PERFORM.
155
156 PERFORM 9000-ACCTFILE-CLOSE.
157
158 DISPLAY 'END OF EXECUTION OF PROGRAM CBACT01C'.
159
160 GOBACK.
161
162 *****************************************************************
163 * I/O ROUTINES TO ACCESS A KSDS, VSAM DATA SET... *
164 *****************************************************************
165 1000-ACCTFILE-GET-NEXT.
166 READ ACCTFILE-FILE INTO ACCOUNT-RECORD.
167 IF ACCTFILE-STATUS = '00'
168 MOVE 0 TO APPL-RESULT
169 INITIALIZE ARR-ARRAY-REC
170 PERFORM 1100-DISPLAY-ACCT-RECORD
171 PERFORM 1300-POPUL-ACCT-RECORD
172 PERFORM 1350-WRITE-ACCT-RECORD
173 PERFORM 1400-POPUL-ARRAY-RECORD
174 PERFORM 1450-WRITE-ARRY-RECORD
175 INITIALIZE VBRC-REC1
176 PERFORM 1500-POPUL-VBRC-RECORD
177 PERFORM 1550-WRITE-VB1-RECORD
178 PERFORM 1575-WRITE-VB2-RECORD
179 ELSE
180 IF ACCTFILE-STATUS = '10'
181 MOVE 16 TO APPL-RESULT
182 ELSE
183 MOVE 12 TO APPL-RESULT
184 END-IF
185 END-IF
186 IF APPL-AOK
187 CONTINUE
188 ELSE
189 IF APPL-EOF
190 MOVE 'Y' TO END-OF-FILE
191 ELSE
192 DISPLAY 'ERROR READING ACCOUNT FILE'
193 MOVE ACCTFILE-STATUS TO IO-STATUS
194 PERFORM 9910-DISPLAY-IO-STATUS
195 PERFORM 9999-ABEND-PROGRAM
196 END-IF
197 END-IF
198 EXIT.
199 *---------------------------------------------------------------*
200 1100-DISPLAY-ACCT-RECORD.
201 DISPLAY 'ACCT-ID :' ACCT-ID
202 DISPLAY 'ACCT-ACTIVE-STATUS :' ACCT-ACTIVE-STATUS
203 DISPLAY 'ACCT-CURR-BAL :' ACCT-CURR-BAL
204 DISPLAY 'ACCT-CREDIT-LIMIT :' ACCT-CREDIT-LIMIT
205 DISPLAY 'ACCT-CASH-CREDIT-LIMIT :' ACCT-CASH-CREDIT-LIMIT
206 DISPLAY 'ACCT-OPEN-DATE :' ACCT-OPEN-DATE
207 DISPLAY 'ACCT-EXPIRAION-DATE :' ACCT-EXPIRAION-DATE
208 DISPLAY 'ACCT-REISSUE-DATE :' ACCT-REISSUE-DATE
209 DISPLAY 'ACCT-CURR-CYC-CREDIT :' ACCT-CURR-CYC-CREDIT
210 DISPLAY 'ACCT-CURR-CYC-DEBIT :' ACCT-CURR-CYC-DEBIT
211 DISPLAY 'ACCT-GROUP-ID :' ACCT-GROUP-ID
212 DISPLAY '-------------------------------------------------'
213 EXIT.
214 *---------------------------------------------------------------*
215 1300-POPUL-ACCT-RECORD.
216 MOVE ACCT-ID TO OUT-ACCT-ID.
217 MOVE ACCT-ACTIVE-STATUS TO OUT-ACCT-ACTIVE-STATUS.
218 MOVE ACCT-CURR-BAL TO OUT-ACCT-CURR-BAL.
219 MOVE ACCT-CREDIT-LIMIT TO OUT-ACCT-CREDIT-LIMIT.
220 MOVE ACCT-CASH-CREDIT-LIMIT TO OUT-ACCT-CASH-CREDIT-LIMIT.
221 MOVE ACCT-OPEN-DATE TO OUT-ACCT-OPEN-DATE.
222 MOVE ACCT-EXPIRAION-DATE TO OUT-ACCT-EXPIRAION-DATE.
223 MOVE ACCT-REISSUE-DATE TO CODATECN-INP-DATE
224 WS-REISSUE-DATE.
225 MOVE '2' TO CODATECN-TYPE.
226 MOVE '2' TO CODATECN-OUTTYPE.
227
228 *---------------------------------------------------------------*
229 *CALL ASSEMBLER PROGRAM FOR DATE FORMATTING *
230 *---------------------------------------------------------------*
231 CALL 'COBDATFT' USING CODATECN-REC.
232
233 MOVE CODATECN-0UT-DATE TO OUT-ACCT-REISSUE-DATE.
234
235 MOVE ACCT-CURR-CYC-CREDIT TO OUT-ACCT-CURR-CYC-CREDIT.
236 IF ACCT-CURR-CYC-DEBIT EQUAL TO ZERO
237 MOVE 2525.00 TO OUT-ACCT-CURR-CYC-DEBIT
238 END-IF.
239 MOVE ACCT-GROUP-ID TO OUT-ACCT-GROUP-ID.
240 EXIT.
241 *---------------------------------------------------------------*
242 1350-WRITE-ACCT-RECORD.
243 WRITE OUT-ACCT-REC.
244
245 IF OUTFILE-STATUS NOT = '00' AND OUTFILE-STATUS NOT = '10'
246 DISPLAY 'ACCOUNT FILE WRITE STATUS IS:' OUTFILE-STATUS
247 MOVE OUTFILE-STATUS TO IO-STATUS
248 PERFORM 9910-DISPLAY-IO-STATUS
249 PERFORM 9999-ABEND-PROGRAM
250 END-IF.
251 EXIT.
252 *---------------------------------------------------------------*
253 1400-POPUL-ARRAY-RECORD.
254 MOVE ACCT-ID TO ARR-ACCT-ID.
255 MOVE ACCT-CURR-BAL TO ARR-ACCT-CURR-BAL(1).
256 MOVE 1005.00 TO ARR-ACCT-CURR-CYC-DEBIT(1).
257 MOVE ACCT-CURR-BAL TO ARR-ACCT-CURR-BAL(2).
258 MOVE 1525.00 TO ARR-ACCT-CURR-CYC-DEBIT(2).
259 MOVE -1025.00 TO ARR-ACCT-CURR-BAL(3).
260 MOVE -2500.00 TO ARR-ACCT-CURR-CYC-DEBIT(3).
261 EXIT.
262 *---------------------------------------------------------------*
263 1450-WRITE-ARRY-RECORD.
264 WRITE ARR-ARRAY-REC.
265
266 IF ARRYFILE-STATUS NOT = '00'
267 AND ARRYFILE-STATUS NOT = '10'
268 DISPLAY 'ACCOUNT FILE WRITE STATUS IS:'
269 ARRYFILE-STATUS
270 MOVE ARRYFILE-STATUS TO IO-STATUS
271 PERFORM 9910-DISPLAY-IO-STATUS
272 PERFORM 9999-ABEND-PROGRAM
273 END-IF.
274 EXIT.
275 *---------------------------------------------------------------*
276 1500-POPUL-VBRC-RECORD.
277 MOVE ACCT-ID TO VB1-ACCT-ID
278 VB2-ACCT-ID.
279 MOVE ACCT-ACTIVE-STATUS TO VB1-ACCT-ACTIVE-STATUS.
280 MOVE ACCT-CURR-BAL TO VB2-ACCT-CURR-BAL.
281 MOVE ACCT-CREDIT-LIMIT TO VB2-ACCT-CREDIT-LIMIT.
282 MOVE WS-ACCT-REISSUE-YYYY TO VB2-ACCT-REISSUE-YYYY.
283 DISPLAY 'VBRC-REC1:' VBRC-REC1.
284 DISPLAY 'VBRC-REC2:' VBRC-REC2.
285 EXIT.
286 *---------------------------------------------------------------*
287 1550-WRITE-VB1-RECORD.
288 MOVE 12 TO WS-RECD-LEN.
289 MOVE VBRC-REC1 TO VBR-REC(1:WS-RECD-LEN).
290 WRITE VBR-REC.
291
292 IF VBRCFILE-STATUS NOT = '00'
293 AND VBRCFILE-STATUS NOT = '10'
294 DISPLAY 'ACCOUNT FILE WRITE STATUS IS:'
295 VBRCFILE-STATUS
296 MOVE VBRCFILE-STATUS TO IO-STATUS
297 PERFORM 9910-DISPLAY-IO-STATUS
298 PERFORM 9999-ABEND-PROGRAM
299 END-IF.
300 EXIT.
301 *---------------------------------------------------------------*
302 1575-WRITE-VB2-RECORD.
303 MOVE 39 TO WS-RECD-LEN.
304 MOVE VBRC-REC2 TO VBR-REC(1:WS-RECD-LEN).
305 WRITE VBR-REC.
306
307 IF VBRCFILE-STATUS NOT = '00'
308 AND VBRCFILE-STATUS NOT = '10'
309 DISPLAY 'ACCOUNT FILE WRITE STATUS IS:'
310 VBRCFILE-STATUS
311 MOVE VBRCFILE-STATUS TO IO-STATUS
312 PERFORM 9910-DISPLAY-IO-STATUS
313 PERFORM 9999-ABEND-PROGRAM
314 END-IF.
315 EXIT.
316 *---------------------------------------------------------------*
317 0000-ACCTFILE-OPEN.
318 MOVE 8 TO APPL-RESULT.
319 OPEN INPUT ACCTFILE-FILE
320 IF ACCTFILE-STATUS = '00'
321 MOVE 0 TO APPL-RESULT
322 ELSE
323 MOVE 12 TO APPL-RESULT
324 END-IF
325 IF APPL-AOK
326 CONTINUE
327 ELSE
328 DISPLAY 'ERROR OPENING ACCTFILE'
329 MOVE ACCTFILE-STATUS TO IO-STATUS
330 PERFORM 9910-DISPLAY-IO-STATUS
331 PERFORM 9999-ABEND-PROGRAM
332 END-IF
333 EXIT.
334 2000-OUTFILE-OPEN.
335 MOVE 8 TO APPL-RESULT.
336 OPEN OUTPUT OUT-FILE
337 IF OUTFILE-STATUS = '00'
338 MOVE 0 TO APPL-RESULT
339 ELSE
340 MOVE 12 TO APPL-RESULT
341 END-IF
342 IF APPL-AOK
343 CONTINUE
344 ELSE
345 DISPLAY 'ERROR OPENING OUTFILE' OUTFILE-STATUS
346 MOVE OUTFILE-STATUS TO IO-STATUS
347 PERFORM 9910-DISPLAY-IO-STATUS
348 PERFORM 9999-ABEND-PROGRAM
349 END-IF
350 EXIT.
351 *---------------------------------------------------------------*
352 3000-ARRFILE-OPEN.
353 MOVE 8 TO APPL-RESULT.
354 OPEN OUTPUT ARRY-FILE
355 IF ARRYFILE-STATUS = '00'
356 MOVE 0 TO APPL-RESULT
357 ELSE
358 MOVE 12 TO APPL-RESULT
359 END-IF
360 IF APPL-AOK
361 CONTINUE
362 ELSE
363 DISPLAY 'ERROR OPENING ARRAYFILE' ARRYFILE-STATUS
364 MOVE ARRYFILE-STATUS TO IO-STATUS
365 PERFORM 9910-DISPLAY-IO-STATUS
366 PERFORM 9999-ABEND-PROGRAM
367 END-IF
368 EXIT.
369 *---------------------------------------------------------------*
370 4000-VBRFILE-OPEN.
371 MOVE 8 TO APPL-RESULT.
372 OPEN OUTPUT VBRC-FILE
373 IF VBRCFILE-STATUS = '00'
374 MOVE 0 TO APPL-RESULT
375 ELSE
376 MOVE 12 TO APPL-RESULT
377 END-IF
378 IF APPL-AOK
379 CONTINUE
380 ELSE
381 DISPLAY 'ERROR OPENING VBRC FILE' VBRCFILE-STATUS
382 MOVE VBRCFILE-STATUS TO IO-STATUS
383 PERFORM 9910-DISPLAY-IO-STATUS
384 PERFORM 9999-ABEND-PROGRAM
385 END-IF
386 EXIT.
387 *---------------------------------------------------------------*
388 9000-ACCTFILE-CLOSE.
389 ADD 8 TO ZERO GIVING APPL-RESULT.
390 CLOSE ACCTFILE-FILE
391 IF ACCTFILE-STATUS = '00'
392 SUBTRACT APPL-RESULT FROM APPL-RESULT
393 ELSE
394 ADD 12 TO ZERO GIVING APPL-RESULT
395 END-IF
396 IF APPL-AOK
397 CONTINUE
398 ELSE
399 DISPLAY 'ERROR CLOSING ACCOUNT FILE'
400 MOVE ACCTFILE-STATUS TO IO-STATUS
401 PERFORM 9910-DISPLAY-IO-STATUS
402 PERFORM 9999-ABEND-PROGRAM
403 END-IF
404 EXIT.
405
406 9999-ABEND-PROGRAM.
407 DISPLAY 'ABENDING PROGRAM'
408 MOVE 0 TO TIMING
409 MOVE 999 TO ABCODE
410 CALL 'CEE3ABD' USING ABCODE, TIMING.
411
412 *****************************************************************
413 9910-DISPLAY-IO-STATUS.
414 IF IO-STATUS NOT NUMERIC
415 OR IO-STAT1 = '9'
416 MOVE IO-STAT1 TO IO-STATUS-04(1:1)
417 MOVE 0 TO TWO-BYTES-BINARY
418 MOVE IO-STAT2 TO TWO-BYTES-RIGHT
419 MOVE TWO-BYTES-BINARY TO IO-STATUS-0403
420 DISPLAY 'FILE STATUS IS: NNNN' IO-STATUS-04
421 ELSE
422 MOVE '0000' TO IO-STATUS-04
423 MOVE IO-STATUS TO IO-STATUS-04(3:2)
424 DISPLAY 'FILE STATUS IS: NNNN' IO-STATUS-04
425 END-IF
426 EXIT.
427
428 *
429 * Ver: CardDemo_v2.0-25-gdb72e6b-235 Date: 2025-04-29 11:01:27 CDT
430 *