000100*> cobol-free-format-fixed.cob - PAY-EDIT, 000200*> fixed format. Same program as the free-format listing, 000300*> cobol-free-format.cob 000400*> Dialect: GnuCOBOL 3.x, fixed format (the compiler default) 000500*> Status : compiled and run with GnuCOBOL 3.2 on 2026-10-29 000600*> Inputs : datasets/cobol-free-format-columns-8-and-12.dat 000700*> 36-byte timecard records, LF endings, no header 000800*> Outputs: one detail line per timecard and four total lines 000900*> Build : cobc -x -fixed -I code -o pay-edit-fixed \ 001000*> code/cobol-free-format-fixed.cob 001100*> Columns: 1-6 sequence number, 7 indicator, 8-11 Area A, 001200*> 12-72 Area B. No line here reaches column 73. 001300 IDENTIFICATION DIVISION. 001400 PROGRAM-ID. PAY-EDIT. 001500 ENVIRONMENT DIVISION. 001600 INPUT-OUTPUT SECTION. 001700 FILE-CONTROL. 001800 SELECT Time-Card-File 001900 ASSIGN TO "datasets/cobol-free-format-columns-8-and-12.dat" 002000 ORGANIZATION IS LINE SEQUENTIAL 002100 FILE STATUS IS WS-FS. 002200 DATA DIVISION. 002300 FILE SECTION. 002400 FD Time-Card-File. 002500 COPY "cobol-free-format-columns-8-and-12.cpy". 002600 WORKING-STORAGE SECTION. 002700 77 WS-FS PIC XX. 002800 77 WS-Standard-Hours PIC 9(3)V99 VALUE 40.00. 002900 77 WS-Overtime-Factor PIC 9V9 VALUE 1.5. 003000 77 WS-Basic-Hours PIC 9(3)V99 VALUE 0. 003100 77 WS-Overtime-Hours PIC 9(3)V99 VALUE 0. 003200 77 WS-Basic-Pay PIC 9(6)V99 VALUE 0. 003300 77 WS-Overtime-Pay PIC 9(6)V99 VALUE 0. 003400 77 WS-Gross-Pay PIC 9(6)V99 VALUE 0. 003500 77 WS-Cards PIC 9(5) VALUE 0. 003600 77 WS-With-Overtime PIC 9(5) VALUE 0. 003700 77 WS-Total-Gross PIC 9(7)V99 VALUE 0. 003800 77 WS-Total-Overtime PIC 9(7)V99 VALUE 0. 003900 77 WS-Show-Hours PIC ZZ9.99. 004000 77 WS-Show-Pay PIC ZZZ,ZZ9.99. 004100 77 WS-Show-Count PIC ZZ,ZZ9. 004200 01 WS-Flags. 004300 05 WS-EOF-Flag PIC X VALUE "N". 004400 88 End-Of-Cards VALUE "Y". 004500 PROCEDURE DIVISION. 004600 Main-Paragraph. 004700 OPEN INPUT Time-Card-File 004800 IF WS-FS NOT = "00" 004900 DISPLAY "Cannot open the timecard file, status " WS-FS 005000 STOP RUN 005100 END-IF 005200 DISPLAY "ID NAME DPT HOURS GROSS" 005300 PERFORM Read-Card 005400 PERFORM UNTIL End-Of-Cards 005500 PERFORM Pay-One-Card 005600 PERFORM Read-Card 005700 END-PERFORM 005800 CLOSE Time-Card-File 005900 MOVE WS-Cards TO WS-Show-Count 006000 DISPLAY "Timecards read " WS-Show-Count 006100 MOVE WS-With-Overtime TO WS-Show-Count 006200 DISPLAY "With overtime " WS-Show-Count 006300 MOVE WS-Total-Overtime TO WS-Show-Pay 006400 DISPLAY "Overtime pay " WS-Show-Pay 006500 MOVE WS-Total-Gross TO WS-Show-Pay 006600 DISPLAY "Total gross pay " WS-Show-Pay 006700 STOP RUN. 006800 Read-Card. 006900 READ Time-Card-File 007000 AT END 007100 SET End-Of-Cards TO TRUE 007200 END-READ 007300 IF WS-FS NOT = "00" AND WS-FS NOT = "10" 007400 DISPLAY "Timecard read failed, status " WS-FS 007500 STOP RUN 007600 END-IF. 007700 Pay-One-Card. 007800 ADD 1 TO WS-Cards 007900 IF TC-Hours > WS-Standard-Hours 008000 MOVE WS-Standard-Hours TO WS-Basic-Hours 008100 SUBTRACT WS-Standard-Hours FROM TC-Hours 008200 GIVING WS-Overtime-Hours 008300 ADD 1 TO WS-With-Overtime 008400 ELSE 008500 MOVE TC-Hours TO WS-Basic-Hours 008600 MOVE 0 TO WS-Overtime-Hours 008700 END-IF 008800 COMPUTE WS-Basic-Pay ROUNDED = 008900 WS-Basic-Hours * TC-Rate 009000 COMPUTE WS-Overtime-Pay ROUNDED = 009100 WS-Overtime-Hours * TC-Rate * WS-Overtime-Factor 009200 ADD WS-Basic-Pay TO WS-Overtime-Pay GIVING WS-Gross-Pay 009300 ADD WS-Gross-Pay TO WS-Total-Gross 009400 ADD WS-Overtime-Pay TO WS-Total-Overtime 009500 MOVE TC-Hours TO WS-Show-Hours 009600 MOVE WS-Gross-Pay TO WS-Show-Pay 009700 DISPLAY TC-Emp-Id " " TC-Name " " TC-Dept " " 009800 WS-Show-Hours " " WS-Show-Pay.