Name: Anonymous 2012-11-16 21:32
IDENTIFICATION DIVISION.
PROGRAM-ID. CRACK-SHIP-GENERATOR.
AUTHOR. YOU-KNOW-WHO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CHARACTER-FILE ASSIGN TO 'CHARACTERS.DAT'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD CHARACTER-FILE.
01 IN-CHARACTER.
05 IN-CHAR-GROUP PIC 99.
05 FILLER PIC X VALUE SPACE.
05 IN-CHAR-NAME PIC X(40).
01 CF-SWITCH PIC X VALUE 'N'.
88 CF-END-OF-FILE VALUE 'Y'.
WORKING-STORAGE SECTION.
01 RANDOM-STORAGE.
05 RANDOM-SEED PIC 9(8).
05 RANDOM-TEMP PIC 9(9).
01 CHARACTER-TABLE.
05 CHAR-IDX PIC 999 VALUE 1.
05 NUM-CHARS PIC 999 VALUE 0.
05 CHAR-DATA
OCCURS 0 TO 500 TIMES DEPENDING ON NUM-CHARS.
10 CHARACTER-GROUP PIC 99.
10 FILLER PIC X VALUE SPACE.
10 CHARACTER-NAME PIC X(30).
01 SHIP-TABLE.
05 SHIP-IDX PIC 9 VALUE 1.
05 SHIP-TYPE PIC XXX VALUE SPACES.
88 FLUSHED VALUE '<3 '.
88 PALE VALUE '<> '.
88 ASHEN VALUE 'c3<'.
88 CALIGINOUS VALUE '<3<'.
05 SHIP-ARITY PIC 9 VALUE 2.
05 SHIP-CHAR-IDX PIC 999
OCCURS 2 TO 3 TIMES DEPENDING ON SHIP-ARITY.
01 SHIP-WORK.
05 SHIP-NAME1 PIC X(30) VALUE SPACES.
05 SHIP-TYPE1 PIC XXX VALUE SPACES.
05 SHIP-NAME2 PIC X(30) VALUE SPACES.
05 SHIP-TYPE2 PIC XXX VALUE SPACES.
05 SHIP-NAME3 PIC X(30) VALUE SPACES.
01 OUT-TEXT PIC X(80) VALUE SPACES.
01 LINE-POS PIC 99 VALUE 1.
01 NUM-SHIPS-PRINTED PIC 99 VALUE 0.
PROCEDURE DIVISION.
ACCEPT RANDOM-SEED FROM TIME.
COMPUTE RANDOM-TEMP = FUNCTION RANDOM (RANDOM-SEED).
PERFORM LOAD-TABLE.
PERFORM SELECT-SHIP THROUGH DISPLAY-SHIP
VARYING NUM-SHIPS-PRINTED FROM 1 BY 1
UNTIL NUM-SHIPS-PRINTED > 10.
STOP RUN.
LOAD-TABLE.
OPEN INPUT CHARACTER-FILE.
PERFORM UNTIL CF-END-OF-FILE
READ CHARACTER-FILE
AT END SET CF-END-OF-FILE TO TRUE
NOT AT END PERFORM LOAD-CHARACTER
END-READ
END-PERFORM
CLOSE CHARACTER-FILE.
LOAD-CHARACTER.
ADD 1 TO NUM-CHARS.
MOVE IN-CHARACTER TO CHAR-DATA (NUM-CHARS).
SELECT-CHARACTER.
* The value returned by ``FUNCTION RANDOM'' is actually a
* fraction between 0 and 1. Multiply it by a large number
* to get a useful value.
COMPUTE RANDOM-TEMP = FUNCTION RANDOM * 1025.
COMPUTE SHIP-CHAR-IDX (SHIP-IDX) =
FUNCTION MOD (RANDOM-TEMP, NUM-CHARS) + 1.
SELECT-SHIP.
SET SHIP-ARITY TO 2
COMPUTE RANDOM-TEMP = FUNCTION RANDOM * 4 + 1.
IF RANDOM-TEMP = 1 SET FLUSHED TO TRUE.
IF RANDOM-TEMP = 2 SET PALE TO TRUE.
IF RANDOM-TEMP = 4 SET CALIGINOUS TO TRUE.
IF RANDOM-TEMP = 3 THEN
SET ASHEN TO TRUE
SET SHIP-ARITY TO 3
END-IF.
PERFORM SELECT-CHARACTER
VARYING SHIP-IDX FROM 1 BY 1
UNTIL SHIP-IDX > SHIP-ARITY.
DISPLAY-SHIP.
SET LINE-POS TO 1.
MOVE SPACES TO SHIP-WORK.
MOVE SPACES TO OUT-TEXT.
MOVE CHARACTER-NAME (SHIP-CHAR-IDX (1)) TO SHIP-NAME1.
MOVE SHIP-TYPE TO SHIP-TYPE1.
MOVE CHARACTER-NAME (SHIP-CHAR-IDX (2)) TO SHIP-NAME2.
IF ASHEN THEN
MOVE SHIP-TYPE TO SHIP-TYPE2
MOVE CHARACTER-NAME (SHIP-CHAR-IDX (3)) TO SHIP-NAME3
END-IF.
STRING SHIP-NAME1 DELIMITED BY ' '
SPACE DELIMITED BY SIZE
SHIP-TYPE1 DELIMITED BY SPACE
SPACE DELIMITED BY SIZE
SHIP-NAME2 DELIMITED BY ' '
SPACE DELIMITED BY SIZE
SHIP-TYPE2 DELIMITED BY SPACE
SPACE DELIMITED BY SIZE
SHIP-NAME3 DELIMITED BY ' '
INTO OUT-TEXT
WITH POINTER LINE-POS.
DISPLAY OUT-TEXT.