IDENTIFICATION DIVISION.
PROGRAM-ID. HAVE-IT-YOUR-WAY.
AUTHOR. BILL ROGERS.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ORDER-FILE
ASSIGN TO 'ORDERS.DAT'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT KITCHEN-FILE
ASSIGN TO 'KITCHEN.TXT'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD ORDER-FILE
DATA RECORD IS ORDER-RECORD.
01 ORDER-RECORD.
02 SANDWICH PIC X(15).
02 CONDIMENTS.
03 CATSUP PIC X.
03 MUSTARD PIC X.
03 PICKLE PIC X.
03 ONION PIC X.
03 LETTUCE PIC X.
03 TOMATO PIC X.
03 CHEESE PIC X.
03 TOBASCO PIC X.
FD KITCHEN-FILE
DATA RECORD IS KITCHEN-RECORD.
01 KITCHEN-RECORD PIC X(80).
WORKING-STORAGE SECTION.
01 SANDWICH-LINE.
02 PIC X(6) VALUE 'COOK: '.
02 SL-SANDWICH PIC X(15).
01 CONDIMENT-LINE.
02 PIC X(8) VALUE SPACES.
02 CL-INSTRUCTION PIC X(5).
02 CL-CONDIMENT PIC X(10).
01 SEPARATOR-LINE PIC X(40) VALUE ALL '*'.
01 CONDIMENT-COUNT PIC 9 VALUE ZERO.
01 EOF-SWITCH PIC X VALUE 'N'.
88 END-OF-INPUT-FILE VALUE 'Y'.
PROCEDURE DIVISION.
MAIN-LINE.
PERFORM SETUP-ROUTINE.
PERFORM BURGER-LOOP
UNTIL END-OF-INPUT-FILE.
PERFORM CLEANUP-ROUTINE.
STOP RUN.
SETUP-ROUTINE.
OPEN INPUT ORDER-FILE.
OPEN OUTPUT KITCHEN-FILE.
READ ORDER-FILE
AT END MOVE 'Y' TO EOF-SWITCH.
BURGER-LOOP.
MOVE SANDWICH TO SL-SANDWICH.
WRITE KITCHEN-RECORD FROM SANDWICH-LINE.
MOVE ZERO TO CONDIMENT-COUNT.
MOVE 'ADD: ' TO CL-INSTRUCTION.
IF CATSUP = 'Y'
MOVE 'CATSUP' TO CL-CONDIMENT
WRITE KITCHEN-RECORD FROM CONDIMENT-LINE
ADD 1 TO CONDIMENT-COUNT.
IF MUSTARD = 'Y'
MOVE 'MUSTARD' TO CL-CONDIMENT
WRITE KITCHEN-RECORD FROM CONDIMENT-LINE
ADD 1 TO CONDIMENT-COUNT.
IF PICKLE = 'Y'
MOVE 'PICKLE' TO CL-CONDIMENT
WRITE KITCHEN-RECORD FROM CONDIMENT-LINE
ADD 1 TO CONDIMENT-COUNT.
IF ONION = 'Y'
MOVE 'ONION' TO CL-CONDIMENT
WRITE KITCHEN-RECORD FROM CONDIMENT-LINE
ADD 1 TO CONDIMENT-COUNT.
IF LETTUCE = 'Y'
MOVE 'LETTUCE' TO CL-CONDIMENT
WRITE KITCHEN-RECORD FROM CONDIMENT-LINE
ADD 1 TO CONDIMENT-COUNT.
IF TOMATO = 'Y'
MOVE 'TOMATO' TO CL-CONDIMENT
WRITE KITCHEN-RECORD FROM CONDIMENT-LINE
ADD 1 TO CONDIMENT-COUNT.
IF CHEESE = 'Y'
MOVE 'CHEESE' TO CL-CONDIMENT
WRITE KITCHEN-RECORD FROM CONDIMENT-LINE
ADD 1 TO CONDIMENT-COUNT.
IF TOBASCO = 'Y'
MOVE 'TOBASCO' TO CL-CONDIMENT
WRITE KITCHEN-RECORD FROM CONDIMENT-LINE
ADD 1 TO CONDIMENT-COUNT.
IF CONDIMENT-COUNT = ZERO
MOVE 'PLAIN' TO CL-INSTRUCTION
MOVE SPACES TO CL-CONDIMENT
WRITE KITCHEN-RECORD FROM CONDIMENT-LINE.
WRITE KITCHEN-RECORD FROM SEPARATOR-LINE.
READ ORDER-FILE
AT END MOVE 'Y' TO EOF-SWITCH.
CLEANUP-ROUTINE.
CLOSE ORDER-FILE.
CLOSE KITCHEN-FILE.
Given the following input:
BIG MAC NYYYYNYN WHOPPER YYYYYYYY QUARTER POUNDERYYYYYNYN HAMBURGER NNNNNNNN SLIDER NNYYNNNN VEGGIE BURGER YNNNNNNN
Here is the output:
COOK: BIG MAC
ADD: MUSTARD
ADD: PICKLE
ADD: ONION
ADD: LETTUCE
ADD: CHEESE
****************************************
COOK: WHOPPER
ADD: CATSUP
ADD: MUSTARD
ADD: PICKLE
ADD: ONION
ADD: LETTUCE
ADD: TOMATO
ADD: CHEESE
ADD: TOBASCO
****************************************
COOK: QUARTER POUNDER
ADD: CATSUP
ADD: MUSTARD
ADD: PICKLE
ADD: ONION
ADD: LETTUCE
ADD: CHEESE
****************************************
COOK: HAMBURGER
PLAIN
****************************************
COOK: SLIDER
ADD: PICKLE
ADD: ONION
****************************************
COOK: VEGGIE BURGER
ADD: CATSUP
****************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. YOU-WANT-FRIES-WITH-THAT.
AUTHOR. BILL ROGERS.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ORDER-FILE
ASSIGN TO 'ORDERS.DAT'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT KITCHEN-FILE
ASSIGN TO 'KITCHEN.TXT'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD ORDER-FILE
DATA RECORD IS ORDER-RECORD.
01 ORDER-RECORD.
02 SANDWICH PIC X(15).
02 CONDIMENTS.
03 CATSUP PIC X.
03 MUSTARD PIC X.
03 PICKLE PIC X.
03 ONION PIC X.
03 LETTUCE PIC X.
03 TOMATO PIC X.
03 CHEESE PIC X.
03 TOBASCO PIC X.
FD KITCHEN-FILE
DATA RECORD IS KITCHEN-RECORD.
01 KITCHEN-RECORD PIC X(80).
WORKING-STORAGE SECTION.
01 SANDWICH-LINE.
02 PIC X(6) VALUE 'COOK: '.
02 SL-SANDWICH PIC X(15).
01 CONDIMENT-LINE.
02 PIC X(8) VALUE SPACES.
02 CL-MESSAGE.
03 CL-INSTRUCTION PIC X(5).
03 CL-CONDIMENT PIC X(10).
01 SEPARATOR-LINE PIC X(40) VALUE ALL '*'.
01 CONDIMENT-COUNT PIC 9 VALUE ZERO.
01 EOF-SWITCH PIC X VALUE 'N'.
88 END-OF-INPUT-FILE VALUE 'Y'.
PROCEDURE DIVISION.
MAIN-LINE.
PERFORM SETUP-ROUTINE.
PERFORM BURGER-LOOP
UNTIL END-OF-INPUT-FILE.
PERFORM CLEANUP-ROUTINE.
STOP RUN.
SETUP-ROUTINE.
OPEN INPUT ORDER-FILE.
OPEN OUTPUT KITCHEN-FILE.
READ ORDER-FILE
AT END MOVE 'Y' TO EOF-SWITCH.
BURGER-LOOP.
MOVE SANDWICH TO SL-SANDWICH.
WRITE KITCHEN-RECORD FROM SANDWICH-LINE.
MOVE ZERO TO CONDIMENT-COUNT.
INSPECT CONDIMENTS
TALLYING CONDIMENT-COUNT FOR ALL 'Y'.
IF CONDIMENT-COUNT = ZERO
MOVE 'PLAIN' TO CL-MESSAGE
WRITE KITCHEN-RECORD FROM CONDIMENT-LINE
ELSE IF CONDIMENT-COUNT = 8
MOVE 'EVERYTHING' TO CL-MESSAGE
WRITE KITCHEN-RECORD FROM CONDIMENT-LINE
ELSE
MOVE 'ADD: ' TO CL-INSTRUCTION
PERFORM ADD-CONDIMENTS-TO-SANDWICH
END-IF
END-IF.
WRITE KITCHEN-RECORD FROM SEPARATOR-LINE.
READ ORDER-FILE
AT END MOVE 'Y' TO EOF-SWITCH.
CLEANUP-ROUTINE.
CLOSE ORDER-FILE.
CLOSE KITCHEN-FILE.
ADD-CONDIMENTS-TO-SANDWICH.
IF CATSUP = 'Y'
MOVE 'CATSUP' TO CL-CONDIMENT
WRITE KITCHEN-RECORD FROM CONDIMENT-LINE.
IF MUSTARD = 'Y'
MOVE 'MUSTARD' TO CL-CONDIMENT
WRITE KITCHEN-RECORD FROM CONDIMENT-LINE.
IF PICKLE = 'Y'
MOVE 'PICKLE' TO CL-CONDIMENT
WRITE KITCHEN-RECORD FROM CONDIMENT-LINE.
IF ONION = 'Y'
MOVE 'ONION' TO CL-CONDIMENT
WRITE KITCHEN-RECORD FROM CONDIMENT-LINE.
IF LETTUCE = 'Y'
MOVE 'LETTUCE' TO CL-CONDIMENT
WRITE KITCHEN-RECORD FROM CONDIMENT-LINE.
IF TOMATO = 'Y'
MOVE 'TOMATO' TO CL-CONDIMENT
WRITE KITCHEN-RECORD FROM CONDIMENT-LINE.
IF CHEESE = 'Y'
MOVE 'CHEESE' TO CL-CONDIMENT
WRITE KITCHEN-RECORD FROM CONDIMENT-LINE.
IF TOBASCO = 'Y'
MOVE 'TOBASCO' TO CL-CONDIMENT
WRITE KITCHEN-RECORD FROM CONDIMENT-LINE.
Here is the output of the second version of the program. The only difference is for the "Whopper" where the instruction is now "Everything" instead of a listing of all 8 condiments.
COOK: BIG MAC
ADD: MUSTARD
ADD: PICKLE
ADD: ONION
ADD: LETTUCE
ADD: CHEESE
****************************************
COOK: WHOPPER
EVERYTHING
****************************************
COOK: QUARTER POUNDER
ADD: CATSUP
ADD: MUSTARD
ADD: PICKLE
ADD: ONION
ADD: LETTUCE
ADD: CHEESE
****************************************
COOK: HAMBURGER
PLAIN
****************************************
COOK: SLIDER
ADD: PICKLE
ADD: ONION
****************************************
COOK: VEGGIE BURGER
ADD: CATSUP
****************************************