000100 cbl lib 000200 Identification Division. 000300 Program-Id. FREQUPDT. 000400 Environment Division. 000500 Input-Output Section. 000600 File-Control. 000700 Select FREQFILE Assign to FREQFDD 000800 Organization is Indexed 000900 Access is Random 001000 Record Key is Flight-Date in File-Record 001100 File Status is Freqfile-Status 001200 . 001300 Select TRXFILE Assign to FREQTDD 001400 Organization is Sequential 001500 Access is Sequential 001600 File Status is Trxfile-Status 001700 . 001800 Select FREQMILE Assign to FREQMDD 001900 Organization is Indexed 002000 Access is Random 002100 Record Key is City-Pair in Mile-Record 002200 File Status is Freqfile-Status 002300 . 002400 Select FREQLOG Assign to FREQLDD 002500 Organization is Sequential 002600 Access is Sequential 002700 File Status is Freqlog-Status 002800 . 002900 Data Division. 003000 File Section. 003100 FD FREQFILE. 003200 01 File-Record. 003300 88 End-Of-Freqfile Value High-Values. 003400 05 Pic X(01). 003500 05 Flight-Date Pic X(05). 003600 05 City-Pair. 003700 10 Origin Pic X(03). 003800 10 Pic X(01). 003900 10 Dest Pic X(03). 004000 05 Airline-Id Pic X(02). 004100 05 Flight-Number Pic 9(04). 004200 05 Class-Of-Travel Pic X(01). 004300 88 Tourist Value 'Y'. 004400 88 Business Value 'C'. 004500 88 Firstclass Value 'F'. 004600 05 Pic X(60). 004700 004800 004900 FD TRXFILE Recording Mode F. 005000 01 Trx-Record. 005100 88 End-Of-TrxFile Value High-Value. 005200 05 Trx-Type Pic X(01). 005300 88 AddTrans Value 'A'. 005400 88 RemoveTrans Value 'R'. 005500 88 UpdateTrans Value 'U'. 005600 05 Flight-Date. 005700 10 Flight-Month Pic X(02). 005800 10 Pic X(01). 005900 10 Flight-Day Pic X(02). 006000 05 Trx-Data Pic X(74). 006100 006200 01 Trx-Record-A. 006300 05 Pic X(01). 006400 05 Pic X(05). 006500 05 City-Pair. 006600 10 Origin Pic X(03). 006700 10 Pic X(01). 006800 10 Dest Pic X(03). 006900 05 Airline-Id Pic X(02). 007000 05 Flight-Number Pic 9(04). 007100 05 Class-Of-Travel Pic X(01). 007200 88 Tourist Value 'Y'. 007300 88 Business Value 'C'. 007400 88 Firstclass Value 'F'. 007500 05 Pic X(60). 007600 007700 01 Trx-Record-U. 007800 05 Pic X(01). 007900 05 Flight-Date Pic X(05). 008000 05 Class-Of-Travel Pic X(01). 008100 05 Pic X(73). 008200 008300 FD FREQMILE. 008400 01 Mile-Record. 008500 05 City-Pair. 008600 10 Origin Pic X(03). 008700 10 Pic X(01). 008800 10 Dest Pic X(03). 008900 05 Pic X(01). 009000 05 Mileage Pic 9(05). 009100 05 Pic X(67). 009200 009300 FD FREQLOG Recording mode F. 009400 01 LogRecord Pic X(120). 009500 009600*--------------------------------------- 009700 Working-Storage Section. 009800*--------------------------------------- 009900 01 My-Return-Code Pic S9(04) Binary Value 0. 010000 010100 01 Current-Date. 010200 05 Check-Date. 010300 10 Check-Date-Length Pic S9(04) Binary Value 6. 010400 10 Check-Month Pic X(02). 010500 10 Check-Day Pic X(02). 010600 10 Check-Year Pic X(02). 010700 05 Check-Date-Format. 010800 10 Check-Date-Format-Length Pic S9(04) Binary Value 6. 010900 10 Check-Date-Format-Text Pic X(08) Value 'MMDDYY'. 011000 011100 05 Check-Date-Int Pic S9(09) Binary. 011200 011300 01 Check-Date-RC Pic S9(09) Binary. 011400 88 DateValid Value 0. 011500 88 DateInValid Values 1 thru 99999999. 011600 011700 01 Freqfile-Status Pic X(02). 011800 88 FreqfileOK Value '00'. 011900 88 Freqfile-Openerror Values '01' thru '99'. 012000 88 AddTransError Values '01' thru '99'. 012100 88 UpdateTransError Values '01' thru '99'. 012200 88 RemoveTransError Values '01' thru '99'. 012300 012400 01 Trxfile-Status Pic X(02). 012500 88 Trxfile-Openerror Values '01' thru '99'. 012600 01 Freqmile-Status Pic X(02). 012700 88 Freqmile-Openerror Values '01' thru '99'. 012800 01 Freqlog-Status Pic X(02). 012900 88 Freqlog-Openerror Values '01' thru '99'. 013000 013100 01 Log-Blankrow. 013200 05 Pic X(120) Value Spaces. 013300 013400 01 Log-Header1. 013500 05 Pic X(35) Value 'Frequent Flyer Update Log'. 013600 013700 01 Log-Trailer. 013800 05 Pic X(35) 013900 Value '*** End-Of-Log-Report ***'. 014000 01 Log-Record1. 014100 05 Pic X(20) Value '*** Log-Record: '. 014200 05 Pic X(35) Value Space. 014300 88 InvalidLogrecordMsg Value 'Invalid Logrecord'. 014400 88 AddTransErrorMsg Value '*** Error adding record'. 014500 88 AddTransOKMsg Value 'AddTrans status OK'. 014600 88 UpdateTransErrorMsg Value '*** Error updating reord'. 014700 88 UpdateTransOKMsg Value 'UpdateTrans status OK'. 014800 88 RemoveTransErrorMsg Value '*** Error deleting reord'. 014900 88 RemoveTransOKMsg Value 'DeleteTrans status OK'. 015000 88 InvalidDateMsg Value '*** Date is invalid'. 015100 05 Log-Record1-Status Pic X(02). 015200 015300*--------------------------------------- 015400 Procedure Division. 015500*--------------------------------------- 015600 Display '==> FREQUPDT is starting...' 015700 Perform Open-Files 015800 Perform Write-Log-Headers 015900 Perform Read-Trxfile Until End-of-Trxfile 016000 Perform Write-Log-Trailer 016100 Perform Close-Files 016200 Display '==> FREQUPDT ended' 016300 016400 Move My-Return-Code to Return-Code 016500 016600 GoBack 016700 . 016800*------------------------------------- 016900 Read-Trxfile. 017000*------------------------------------- 017100 Read TRXFILE 017200 At End 017300 Set End-Of-Trxfile to True 017400 Not At End 017500 Display '==> TRX-Record: ' TRX-Record 017600 Evaluate True 017700 When AddTrans 017800 Perform Do-AddTrans 017900 When UpdateTrans 018000 Perform Do-UpdateTrans 018100 When RemoveTrans 018200 Perform Do-RemoveTrans 018300 When Other 018400 Set InvalidLogRecordMsg to True 018500 End-Evaluate 018600 End-Read 018700 Perform Write-Log-Record 018800 . 018900*------------------------------------- 019000 Do-AddTrans. 019100*------------------------------------- 019200 Perform Check-Date-Validity 019300 If DateValid 019400 Move TRX-Record-A to File-Record 019500 Write File-Record 019600 If AddTransError 019700 Set AddtransErrorMsg to True 019800 Move FreqFile-Status to Log-Record1-Status 019900 Perform Write-Log-Record 020000 Else 020100 Set AddtransOKMsg to True 020200 End-If 020300 Else 020400 Set InvalidDateMsg to True 020500 Move 100 to My-Return-Code 020600 Display '**** Invalid date detected. RC = ' 020700 My-Return-Code 020800 End-If 020900 . 021000*------------------------------------- 021100 Check-Date-Validity. 021200*------------------------------------- 021300 Move Function Current-Date(3:4) to Check-Year 021400 Move Flight-Month to Check-Month 021500 Move Flight-Day to Check-Day 021600 Display '==> Checking transactio date ...' 021700 Display '==> Check-Date MMDDYY: ' Check-Date(3:) 021800 021900 CALL 'CEEDAYS' Using Check-Date, Check-Date-Format, 022000 Check-Date-Int, Check-Date-RC 022100 If DateValid 022200 Display '==> Date is +++ VALID +++' 022300 Else 022400 DISPLAY '==> Date is *** INVALID ***' 022500 End-If 022510 Display 'CEEDAYS Return-Code: ' Return-Code 022600 Display Space 022700 . 022800*------------------------------------- 022900 Do-UpdateTrans. 023000*------------------------------------- 023100 Perform Check-Date-Validity 023200 If DateValid 023300 Move Flight-Date in TRX-Record to 023400 Flight-Date in File-Record 023500 Read FREQFILE 023600 If UpdateTransError 023700 Move FreqFile-Status to Log-Record1-Status 023800 Set UpdateTransErrorMsg to True 023810 Move 100 to My-Return-Code 023900 Else 024000 024100 Move Class-Of-Travel in TRX-Record-U to 024200 Class-Of-Travel in File-Record 024300 024400 Rewrite File-Record 024500 If UpdateTransError 024600 Set UpdateTransErrorMsg to True 024610 Move 100 to My-Return-Code 024700 Else 024800 Set UpdateTransOKMsg to True 024900 End-If 025000 End-If 025100 Else 025200 Set InvalidDateMsg to True 025300 Move 100 to My-Return-Code 025400 Display '**** Invalid date detected. RC = ' 025500 My-Return-Code 025600 End-If 025700 . 025800*------------------------------------- 025900 Do-RemoveTrans. 026000*------------------------------------- 026100 Move Flight-Date in TRX-Record to 026200 Flight-Date in File-Record 026300 Read FREQFILE 026400 If RemoveTransError 026500 Move FreqFile-Status to Log-Record1-Status 026600 Set RemoveTransErrorMsg to True 026610 Move 100 to My-Return-Code 026700 Else 026800 Delete FREQFILE 026900 If RemoveTransError 027000 Move FreqFile-Status to Log-Record1-Status 027100 Set RemoveTransErrorMsg to True 027110 Move 100 to My-Return-Code 027200 Else 027300 Set RemoveTransOKMsg to True 027400 End-If 027500 End-If 027600 Exit 027700 . 027800*------------------------------------- 027900 Write-Log-Record. 028000*------------------------------------- 028100 Write LogRecord from Log-Record1 028200 Write LogRecord from TRX-Record 028300 Write LogRecord from Log-Blankrow 028400 Initialize Log-Record1 028500 . 028600*------------------------------------- 028700 Write-Log-Headers. 028800*------------------------------------- 028900 Write LogRecord from Log-Header1 029000 Write LogRecord from Log-Blankrow 029100 . 029200*------------------------------------- 029300 Write-Log-Trailer. 029400*------------------------------------- 029500 Write LogRecord 029600 from Log-Blankrow 029700 Write LogRecord 029800 from Log-Trailer 029900 . 030000*------------------------------------- 030100 Open-Files. 030200*------------------------------------- 030300 Open I-O FREQFILE 030400 If Freqfile-Openerror 030500 Display '==> Openerror: FREQFILE' 030600 Display '==> Status : ' Freqfile-Status 030700 Move 21 to Return-Code 030800 Goback 030900 End-If 031000 Display '==> FREQFILE is Open' 031100 031200 Open Input TRXFILE 031300 If Trxfile-Openerror 031400 Display '==> Openerror: TRXFILE' 031500 Display '==> Status : ' Trxfile-Status 031600 Move 22 to Return-Code 031700 Goback 031800 End-If 031900 Display '==> TRXFILE is Open' 032000 Open Input FREQMILE 032100 If Freqmile-Openerror 032200 Display '==> Openerror: FREQMILE' 032300 Display '==> Status : ' Freqmile-Status 032400 Move 23 to Return-Code 032500 Goback 032600 End-If 032700 Display '==> FREQMILE is Open' 032800 032900 Open Output FREQLOG 033000 If Freqlog-Openerror 033100 Display '==> Openerror: FREQLOG' 033200 Display '==> Status : ' Freqlog-Status 033300 Move 24 to Return-Code 033400 Goback 033500 End-If 033600 Display '==> FREQLOG is Open' 033700 . 033800*------------------------------------- 033900 Close-Files. 034000*------------------------------------- 034100 Close FREQFILE 034200 TRXFILE 034300 FREQMILE 034400 FREQLOG 034500 . 034600 End Program FREQUPDT. 034700