Skip to content

Instantly share code, notes, and snippets.

@tmzt
Created February 6, 2026 01:35
Show Gist options
  • Select an option

  • Save tmzt/3a8632d3a07896bb66e9d8e61598f54c to your computer and use it in GitHub Desktop.

Select an option

Save tmzt/3a8632d3a07896bb66e9d8e61598f54c to your computer and use it in GitHub Desktop.
DODFACILITY.cob
*
* Code generated with Gemini 3 Pro
*
IDENTIFICATION DIVISION.
PROGRAM-ID. DOD-LOGISTICS.
AUTHOR. GEMINI.
DATE-WRITTEN. 2023-10-27.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
*-----------------------------------------------------------------
* SYSTEM FLAGS AND COUNTERS
*-----------------------------------------------------------------
01 SYSTEM-FLAGS.
05 WS-EXIT-FLAG PIC X(1) VALUE 'N'.
88 SHUTDOWN-REQ VALUE 'Y'.
05 WS-ITEM-COUNT PIC 9(3) VALUE 0.
05 WS-USER-CHOICE PIC 9(1).
05 WS-SEARCH-ID PIC 9(4).
05 WS-UPDATE-AMT PIC S9(8).
05 WS-FOUND-FLAG PIC X(1).
*-----------------------------------------------------------------
* INVENTORY DATA STRUCTURE (TABLE)
*-----------------------------------------------------------------
01 INVENTORY-TABLE.
05 SUPPLY-ITEM OCCURS 100 TIMES INDEXED BY ITEM-IDX.
10 ITEM-ID PIC 9(4).
10 ITEM-NAME PIC X(20).
10 ITEM-QTY PIC S9(8).
10 REORDER-LEVEL PIC 9(8).
10 ITEM-UNIT PIC X(8).
*-----------------------------------------------------------------
* REPORT FORMATTING VARIABLES
*-----------------------------------------------------------------
01 REPORT-LINE.
05 RL-ID PIC 9(4).
05 FILLER PIC X(2) VALUE SPACES.
05 RL-NAME PIC X(20).
05 FILLER PIC X(2) VALUE SPACES.
05 RL-QTY PIC Z(7)9.
05 FILLER PIC X(2) VALUE SPACES.
05 RL-STATUS PIC X(10).
PROCEDURE DIVISION.
000-MAIN-LOGIC.
PERFORM 100-INITIALIZE-DATA
PERFORM UNTIL SHUTDOWN-REQ
PERFORM 200-DISPLAY-MENU
PERFORM 300-PROCESS-CHOICE
END-PERFORM
DISPLAY "SYSTEM SHUTDOWN COMPLETE."
STOP RUN.
*-----------------------------------------------------------------
* 100-INITIALIZE-DATA
* Loads dummy data into the table.
*-----------------------------------------------------------------
100-INITIALIZE-DATA.
ADD 1 TO WS-ITEM-COUNT
SET ITEM-IDX TO WS-ITEM-COUNT
MOVE 1001 TO ITEM-ID(ITEM-IDX)
MOVE "JP-8 AVIATION FUEL" TO ITEM-NAME(ITEM-IDX)
MOVE 50000 TO ITEM-QTY(ITEM-IDX)
MOVE 10000 TO REORDER-LEVEL(ITEM-IDX)
MOVE "GALLONS" TO ITEM-UNIT(ITEM-IDX).
ADD 1 TO WS-ITEM-COUNT
SET ITEM-IDX TO WS-ITEM-COUNT
MOVE 2055 TO ITEM-ID(ITEM-IDX)
MOVE "MRE RATIONS (CASE)" TO ITEM-NAME(ITEM-IDX)
MOVE 500 TO ITEM-QTY(ITEM-IDX)
MOVE 100 TO REORDER-LEVEL(ITEM-IDX)
MOVE "CASES" TO ITEM-UNIT(ITEM-IDX).
ADD 1 TO WS-ITEM-COUNT
SET ITEM-IDX TO WS-ITEM-COUNT
MOVE 4012 TO ITEM-ID(ITEM-IDX)
MOVE "HMMWV RUN-FLATS" TO ITEM-NAME(ITEM-IDX)
MOVE 40 TO ITEM-QTY(ITEM-IDX)
MOVE 12 TO REORDER-LEVEL(ITEM-IDX)
MOVE "UNITS" TO ITEM-UNIT(ITEM-IDX).
*-----------------------------------------------------------------
* 200-DISPLAY-MENU
*-----------------------------------------------------------------
200-DISPLAY-MENU.
DISPLAY " ".
DISPLAY "=======================================".
DISPLAY " DOD FACILITY COMMAND CENTER (COBOL)".
DISPLAY "=======================================".
DISPLAY "1. VIEW STATUS REPORT".
DISPLAY "2. UPDATE INVENTORY STOCK".
DISPLAY "3. EXIT SYSTEM".
DISPLAY "ENTER SELECTION: " WITH NO ADVANCING.
ACCEPT WS-USER-CHOICE.
*-----------------------------------------------------------------
* 300-PROCESS-CHOICE
* Directs flow based on user input.
*-----------------------------------------------------------------
300-PROCESS-CHOICE.
EVALUATE WS-USER-CHOICE
WHEN 1
PERFORM 400-GENERATE-REPORT
WHEN 2
PERFORM 500-UPDATE-STOCK
WHEN 3
MOVE 'Y' TO WS-EXIT-FLAG
WHEN OTHER
DISPLAY "INVALID COMMAND. TRY AGAIN."
END-EVALUATE.
*-----------------------------------------------------------------
* 400-GENERATE-REPORT
* Iterates through the table and prints status.
*-----------------------------------------------------------------
400-GENERATE-REPORT.
DISPLAY " ".
DISPLAY "ID ITEM NAME CURRENT STATUS".
DISPLAY "---- -------------------- -------- ----------".
PERFORM VARYING ITEM-IDX FROM 1 BY 1
UNTIL ITEM-IDX > WS-ITEM-COUNT
MOVE ITEM-ID(ITEM-IDX) TO RL-ID
MOVE ITEM-NAME(ITEM-IDX) TO RL-NAME
MOVE ITEM-QTY(ITEM-IDX) TO RL-QTY
IF ITEM-QTY(ITEM-IDX) <= REORDER-LEVEL(ITEM-IDX)
MOVE "CRITICAL!" TO RL-STATUS
ELSE
MOVE "NOMINAL" TO RL-STATUS
END-IF
DISPLAY REPORT-LINE
END-PERFORM
DISPLAY "--------------------------------------------------".
*-----------------------------------------------------------------
* 500-UPDATE-STOCK
* Finds an item by ID and modifies the quantity.
*-----------------------------------------------------------------
500-UPDATE-STOCK.
DISPLAY "ENTER ITEM ID TO UPDATE: " WITH NO ADVANCING.
ACCEPT WS-SEARCH-ID.
MOVE 'N' TO WS-FOUND-FLAG.
PERFORM VARYING ITEM-IDX FROM 1 BY 1
UNTIL ITEM-IDX > WS-ITEM-COUNT OR WS-FOUND-FLAG = 'Y'
IF ITEM-ID(ITEM-IDX) = WS-SEARCH-ID
DISPLAY "ITEM FOUND: " ITEM-NAME(ITEM-IDX)
DISPLAY "CURRENT QTY: " ITEM-QTY(ITEM-IDX)
DISPLAY "ENTER CHANGE AMOUNT (+/-): "
WITH NO ADVANCING
ACCEPT WS-UPDATE-AMT
ADD WS-UPDATE-AMT TO ITEM-QTY(ITEM-IDX)
DISPLAY "NEW QTY: " ITEM-QTY(ITEM-IDX)
MOVE 'Y' TO WS-FOUND-FLAG
END-IF
END-PERFORM.
IF WS-FOUND-FLAG = 'N'
DISPLAY "ERROR: ITEM ID NOT FOUND."
END-IF.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment