000100 Identification Division. 000200 Program-Id. FREQPGM7. 000300 Environment Division. 000400 Input-Output Section. 000500 File-Control. 000600 Select FREQFILE Assign to FREQFDD 000700 Organization is Indexed 000800 Access is Sequential 000900 Record Key is Flight-Date in File-Record 001000 File Status is Freqfile-Status 001100 . 001200 Select FREQMILE Assign to FREQMDD 001300 Organization is Indexed 001400 Access is Random 001500 Record Key is City-Pair in Mile-Record 001600 File Status is Freqmile-Status 001700 . 001800 Select FREQLINE Assign to FREQADD 001900 Organization is Indexed 002000 Access is Sequential 002100 Record Key is Airline-Id in Line-Record 002200 File Status is Freqline-Status 002300 . 002400 Select FREQLIST Assign to FREQLDD 002500 Organization is Sequential 002600 Access is Sequential 002700 File Status is Freqlist-Status 002800 . 002900 Data Division. 003000 File Section. 003100 FD FREQFILE. 003200 01 File-Record. 003300 05 Pic X(01). 003400 05 Flight-Date Pic X(05). 003500 05 City-Pair. 003600 10 Origin Pic X(03). 003700 10 Pic X(01). 003800 10 Dest Pic X(03). 003900 05 Airline-Id Pic X(02). 004000 05 Flight-Number Pic 9(04). 004100 05 Class-Of-Travel Pic X(01). 004200 88 Tourist Value 'Y'. 004300 88 Business Value 'C'. 004400 88 Firstclass Value 'F'. 004500 05 Pic X(60). 004600 FD FREQMILE. 004700 01 Mile-Record. 004800 05 City-Pair. 004900 10 Origin Pic X(03). 005000 10 Pic X(01). 005100 10 Dest Pic X(03). 005200 05 Pic X(01). 005300 05 Mileage Pic 9(05). 005400 05 Pic X(67). 005500 FD FREQLINE. 005600 01 Line-Record. 005700 05 Airline-Id Pic X(02). 005800 05 Airline-Name Pic X(25). 005900 05 Pic X(53). 006000 FD FREQLIST. 006100 01 Listrow Pic X(120). 006200 006300*--------------------------------------- 006400 Working-Storage Section. 006500*--------------------------------------- 006600 006700 77 Mileage-Total Pic 9(08) Value 0. 006800 77 Incbonus-Value Pic 9(08) Value 0. 006900 77 Incbonus-Total Pic 9(08) Value 0. 007000 007100 01 Freqfile-Status Pic X(02). 007200 88 Freqfile-Openerror Values '01' thru '99'. 007300 01 Freqmile-Status Pic X(02). 007400 88 Freqmile-Openerror Values '01' thru '99'. 007500 01 Freqline-Status Pic X(02). 007600 88 Freqline-Openerror Values '01' thru '99'. 007700 01 Freqlist-Status Pic X(02). 007800 88 Freqlist-Openerror Values '01' thru '99'. 007900 008000 01 Pic 9 Value 0. 008100 88 Readend Value 1. 008200 88 Lineend Value 2. 008300 008400 77 Line-Table-Rows Pic 99 Value 1. 008500 01 Tables. 008600 05 Line-Table Occurs 25 Times 008700 Depending on Line-Table-Rows 008800 Ascending 008900 Key is Line-Table-Airline-Id 009000 Indexed by Lineindex. 009100 10 Line-Table-Airline-Id Pic X(02). 009200 10 Line-Table-Airline-Name Pic X(25). 009300 009400 01 List-Blankrow Pic X(120) Value Spaces. 009500 009600 77 Date-Pgm Pic X(08) Value 'FREQDATE'. 009700 77 Date-Pgm-Parm-Status Pic 9. 009800 88 Parm-Error Value 0. 009900 88 Parm-OK Value 1. 010000 010100 01 Date-Row1. 010200 05 Pic X(20) Value 'Printed :'. 010300 05 Date-Pgm-Date-Row1 Pic X(50) Value Space. 010400 010500 01 Date-Row2. 010600 05 Pic X(20) Value 'Valid Until :'. 010700 05 Date-Pgm-Date-Row2 Pic X(50) Value Space. 010800 010900 01 List-Header1. 011000 05 Pic X(25) Value 'Frequent Flyer Report -'. 011100 05 Pic X(30) Value 'Robinsons Soft Drinks Ltd'. 011200 011300 01 List-Header2. 011400 05 Flight-Date Pic X(07) Value 'Date'. 011500 05 Airline-Name Pic X(27) Value 'Airline-Name'. 011600 05 Flight-Number Pic X(06) Value 'Flnr'. 011700 05 Class-Of-Travel Pic X(03) Value 'Cl'. 011800 05 City-Pair Pic X(10) Value 'C-Pair'. 011900 05 Mileage Pic X(11) Value 'Mileage'. 012000 05 Incbonus Pic X(11) Value 'Inc Bonus'. 012100 012200 01 List-Trailer1. 012300 05 Pic X(48) 012400 Value 'Total Mileage '. 012500 05 Mileage Pic Z(11). 012600 05 Incbonus Pic Z(11). 012700 012800 01 List-Detail. 012900 05 Flight-Date Pic X(05). 013000 05 Pic X(02). 013100 05 Airline-Name Pic X(25). 013200 05 Pic X(02). 013300 05 Flight-Number Pic Z(04). 013400 05 Pic X(02). 013500 05 Class-Of-Travel Pic X(01). 013600 05 Pic X(02). 013700 05 City-Pair Pic X(07). 013800 05 Pic X(02). 013900 05 Mileage Pic Z(07). 014000 05 Pic X(04). 014100 05 Incbonus Pic Z(07). 014200 05 Pic X(04). 014300 014400 Linkage Section. 014500 01 Parameter. 014600 05 Parameter-Len Pic S9(04) Binary. 014700 05 Date-Pgm-Parm-Data Pic X(07). 014800 014900*--------------------------------------- 015000 Procedure Division Using Parameter. 015100*--------------------------------------- 015200 Display '==> FREQREAD is starting...' 015300 Perform Check-Parameter-Len 015400 Perform Call-Datepgm 015500 Perform Open-Files 015600 Perform Write-Freq-Header1 015700 Perform Write-Freq-Daterows 015800 Perform Fill-Line-Table 015900 Perform Write-Freq-Header2 016000 Perform Read-Freqfile Until Readend 016100 Perform Write-Freq-Trailer1 016200 Perform Close-Files 016300 Display '==> FREQREAD ended normally' 016400 GoBack 016500 . 016600*------------------------------------- 016700 Check-Parameter-Len. 016800*------------------------------------- 016900 If Parameter-Len = 0 017000 Display '*** Parameter missing' 017100 Move 12 to Return-Code 017200 GoBack 017300 End-If 017400 . 017500*------------------------------------- 017600 Call-Datepgm. 017700*------------------------------------- 017800 Call Date-Pgm Using 017900 Date-Pgm-Parm-Data 018000 Date-Pgm-Parm-Status 018100 Date-Pgm-Date-Row1 018200 Date-Pgm-Date-Row2 018300 018400 If Parm-Error 018500 Display '*** Parameter ' 018600 Date-Pgm-Parm-Data 018700 ' is invalid' 018800 Move 8 to Return-Code 018900 GoBack 019000 End-If 019100 . 019200*------------------------------------- 019300 Read-Freqfile. 019400*------------------------------------- 019500 Read Freqfile 019600 At End 019700 Set Readend to True 019800 Not At End 019900 Perform Write-Freq-Detail 020000 End-Read 020100 . 020200*------------------------------------- 020300 Read-Freqmile. 020400*------------------------------------- 020500 Move City-Pair in File-Record to 020600 City-Pair in Mile-Record 020700 Read Freqmile 020800 Invalid Key 020900 Perform Read-FreqMile-Again 021000 Not Invalid Key 021100 Move Mileage in Mile-Record to 021200 Mileage in List-Detail 021300 End-Read 021400 . 021500*------------------------------------- 021600 Read-Freqmile-Again. 021700*------------------------------------- 021800* Reverse City-Pair 021900*------------------------------------- 022000 Move Origin in File-Record to 022100 Dest in Mile-record 022200 Move Dest in File-Record to 022300 Origin in Mile-record 022400 Read Freqmile 022500 Invalid Key 022600 Display 'Hittar inte City-Pair: ' 022700 City-Pair in Mile-Record 022800 Move 99 to Return-Code 022900 GoBack 023000 Not Invalid Key 023100 Move Mileage in Mile-Record to 023200 Mileage in List-Detail 023300 End-Read 023400 . 023500*------------------------------------- 023600 Fill-Line-Table. 023700*------------------------------------- 023800 Perform Until Lineend 023900 Read Freqline 024000 At End 024100 Set Lineend to True 024200 Not At End 024300 Move Airline-Id in Line-Record to 024400 Line-Table-Airline-Id(Line-Table-Rows) 024500 Move Airline-Name in Line-Record to 024600 Line-Table-Airline-Name(Line-Table-Rows) 024700 Add 1 to Line-Table-Rows 024800 End-Read 024900 End-Perform 025000 . 025100*------------------------------------- 025200 Search-Line-Table. 025300*------------------------------------- 025400 Search All Line-Table 025500 At End 025600 Move '*** N/A ***' to 025700 Airline-Name in List-Detail 025800 When Line-Table-Airline-Id(Lineindex) = 025900 Airline-Id in File-Record 026000 Move Line-Table-Airline-Name(Lineindex) to 026100 Airline-Name in List-Detail 026200 026300 End-Search 026400 . 026500*------------------------------------- 026600 Write-Freq-Header1. 026700*------------------------------------- 026800 Write Listrow 026900 from List-Header1 027000 Write Listrow 027100 from List-Blankrow 027200 . 027300*------------------------------------- 027400 Write-Freq-Daterows. 027500*------------------------------------- 027600 Write Listrow 027700 from Date-Row1 027800 Write Listrow 027900 from Date-Row2 028000 Write Listrow 028100 from List-Blankrow 028200 . 028300*------------------------------------- 028400 Write-Freq-Header2. 028500*------------------------------------- 028600 Write Listrow 028700 from List-Header2 028800 Write Listrow 028900 from List-Blankrow 029000 . 029100*------------------------------------- 029200 Write-Freq-Trailer1. 029300*------------------------------------- 029400 Write Listrow 029500 from List-Blankrow 029600 Move Mileage-Total to 029700 Mileage in List-Trailer1 029800 Move Incbonus-Total to 029900 Incbonus in List-Trailer1 030000 Write Listrow 030100 from List-Trailer1 030200 . 030300*------------------------------------- 030400 Write-Freq-Detail. 030500*------------------------------------- 030600 Perform Read-FreqMile 030700 Perform Calculate-Bonus 030800 Perform Search-Line-Table 030900 Move Corr File-Record to List-Detail 031000 Add Mileage in Mile-Record to 031100 Mileage-Total 031200 Write Listrow 031300 from List-Detail 031400 . 031500*------------------------------------- 031600 Calculate-Bonus. 031700*------------------------------------- 031800 Evaluate True 031900 When Mileage in Mile-Record Less Than 500 032000 Move 500 to Incbonus-Value 032100 Incbonus in List-Detail 032200 When Tourist 032300 Move Mileage in Mile-Record to 032400 Incbonus-Value 032500 Incbonus in List-Detail 032600 When Business 032700 Compute Incbonus-Value = 032800 Mileage in Mile-record * 1.25 032900 Move Incbonus-Value to 033000 Incbonus in List-Detail 033100 When Firstclass 033200 Compute Incbonus-Value = 033300 Mileage in Mile-record * 1.50 033400 Move Incbonus-Value to 033500 Incbonus in List-Detail 033600 End-Evaluate 033700 033800 Add Incbonus-Value to Incbonus-Total 033900 . 034000*------------------------------------- 034100 Open-Files. 034200*------------------------------------- 034300 Open Input FREQFILE 034400 If Freqfile-Openerror 034500 Display '==> Openerror: FREQFILE' 034600 Display '==> Status : ' Freqfile-Status 034700 Move 12 to Return-Code 034800 Goback 034900 End-If 035000 Display '==> FREQFILE is Open' 035100 035200 Open Output FREQLIST 035300 If Freqlist-Openerror 035400 Display '==> Openerror: FREQLIST' 035500 Display '==> Status : ' Freqlist-Status 035600 Move 12 to Return-Code 035700 Goback 035800 End-If 035900 Display '==> FREQLIST is Open' 036000 036100 Open Input FREQMILE 036200 If Freqmile-Openerror 036300 Display '==> Openerror: FREQMILE' 036400 Display '==> Status : ' Freqmile-Status 036500 Move 12 to Return-Code 036600 Goback 036700 End-If 036800 Display '==> FREQMILE is Open' 036900 037000 Open Input FREQLINE 037100 If Freqline-Openerror 037200 Display '==> Openerror: FREQLINE' 037300 Display '==> Status : ' Freqline-Status 037400 Move 12 to Return-Code 037500 Goback 037600 End-If 037700 Display '==> FREQLINE is Open' 037800 . 037900*------------------------------------- 038000 Close-Files. 038100*------------------------------------- 038200 Close FREQFILE 038300 FREQMILE 038400 FREQLIST 038500 FREQLINE 038600 .