       IDENTIFICATION DIVISION.
       PROGRAM-ID. TIMER.

       DATA DIVISION.
       WORKING-STORAGE SECTION.

       01 WS-NOW-DATETIME.
          05 WS-NOW-YYYY PIC 9(4).
          05 WS-NOW-MO   PIC 9(2).
          05 WS-NOW-DD   PIC 9(2).
          05 WS-NOW-HH   PIC 9(2).
          05 WS-NOW-MM   PIC 9(2).
          05 WS-NOW-SS   PIC 9(2).
          05 FILLER      PIC X(9).

       01 WS-IN-HHMM      PIC 9(4).
       01 WS-IN-HH        PIC 99.
       01 WS-IN-MM        PIC 99.

       01 NOW-SEC         PIC 9(7).
       01 TARGET-SEC      PIC 9(7).
       01 DIFF-SEC        PIC S9(7).

       01 OUT-HH          PIC S99.
       01 OUT-MM          PIC S99.
       01 OUT-SS          PIC S99.

       01 WS-OUTPUT-TEXT  PIC X(60).

       SCREEN SECTION.
       01 CLEAR-SCREEN.
          05 BLANK SCREEN.

       01 OUTPUT-SCREEN.
          05 LINE 7 COLUMN 5 PIC X(60) FROM WS-OUTPUT-TEXT.

       PROCEDURE DIVISION.
       MAIN-LOGIC.

           DISPLAY CLEAR-SCREEN

           DISPLAY "----------------------------------------".
           DISPLAY "        ROCKET COBOL TIMER (3-UUR)".
           DISPLAY "----------------------------------------".

           DISPLAY "Voer tijd in (HHMM): ".
           ACCEPT WS-IN-HHMM FROM CONSOLE.

           MOVE WS-IN-HHMM(1:2) TO WS-IN-HH.
           MOVE WS-IN-HHMM(3:2) TO WS-IN-MM.

           COMPUTE TARGET-SEC =
               (WS-IN-HH * 3600)
             + (WS-IN-MM * 60).

           PERFORM CALCULATE-AND-DISPLAY

           PERFORM UNTIL 1 = 2
               CALL "C$SLEEP" USING 1
               PERFORM CALCULATE-AND-DISPLAY
           END-PERFORM

           STOP RUN.

       CALCULATE-AND-DISPLAY.

           MOVE FUNCTION CURRENT-DATE TO WS-NOW-DATETIME

           COMPUTE NOW-SEC =
               (WS-NOW-HH * 3600)
             + (WS-NOW-MM * 60)
             +  WS-NOW-SS

           *> Ruw verschil in seconden
           COMPUTE DIFF-SEC = TARGET-SEC - NOW-SEC

           *> Meer dan 3 uur te vroeg
           IF DIFF-SEC > 10800
              MOVE "MEER DAN 3 UUR TE VROEG" TO WS-OUTPUT-TEXT
              DISPLAY OUTPUT-SCREEN
              EXIT PARAGRAPH
           END-IF

           *> Meer dan 3 uur te laat
           IF DIFF-SEC < -10800
              MOVE "MEER DAN 3 UUR TE LAAT" TO WS-OUTPUT-TEXT
              DISPLAY OUTPUT-SCREEN
              EXIT PARAGRAPH
           END-IF

           *> OP TIJD (0–59 seconden)
           IF DIFF-SEC >= 0 AND DIFF-SEC <= 59
              MOVE "OP TIJD" TO WS-OUTPUT-TEXT
              DISPLAY OUTPUT-SCREEN
              EXIT PARAGRAPH
           END-IF

           *> Uren/minuten/seconden binnen het 3-uur-venster
           DIVIDE DIFF-SEC BY 3600
               GIVING OUT-HH
               REMAINDER DIFF-SEC

           DIVIDE DIFF-SEC BY 60
               GIVING OUT-MM
               REMAINDER OUT-SS

           *> Te vroeg (NOG ...)
           IF DIFF-SEC > 0
              STRING "NOG "
                     OUT-HH " UUR "
                     OUT-MM " MIN "
                     OUT-SS " SEC"
                     DELIMITED BY SIZE
                     INTO WS-OUTPUT-TEXT
           *> Te laat (... TE LAAT)
           ELSE
              COMPUTE OUT-HH = OUT-HH * -1
              COMPUTE OUT-MM = OUT-MM * -1
              COMPUTE OUT-SS = OUT-SS * -1

              STRING OUT-HH " UUR "
                     OUT-MM " MIN "
                     OUT-SS " SEC TE LAAT"
                     DELIMITED BY SIZE
                     INTO WS-OUTPUT-TEXT
           END-IF

           DISPLAY OUTPUT-SCREEN.

