• Re: COBOL, Article on new mainframe use (2/3)

    From Scott Lurndal@21:1/5 to John Levine on Fri Aug 23 17:54:36 2024
    [continued from previous message]

    5900-EXIT. EXIT.

    6000-TRANSFER.
    COMPUTE A = Y + RCNTR.
    COMPUTE B = X + KCNTR.
    MOVE MACOL (A , B) TO MCOL (RCNTR , KCNTR).
    6000-EXIT. EXIT.

    6500-DISPLAY-MT.
    DISPLAY "= = = = = = = = = = = = = = = =".
    PERFORM 6600-MINI-DIS THRU 6600-EXIT
    VARYING RCNTR FROM 1 BY 1 UNTIL RCNTR > 14.
    DISPLAY "= = = = = = = = = = = = = = = =".
    6500-EXIT. EXIT.

    6600-MINI-DIS.
    PERFORM 6700-MINI-MOD THRU 6700-EXIT
    VARYING KCNTR FROM 1 BY 1 UNTIL KCNTR > 14.
    DISPLAY "=" MD-ROW " =".
    6600-EXIT. EXIT.

    6700-MINI-MOD.
    COMPUTE MOD-CTR = 2 * KCNTR.
    MOVE MCOL (RCNTR , KCNTR) TO MD-SUB (MOD-CTR).
    6700-EXIT. EXIT.

    7000-NAV-CK.
    IF SRCTR < 1 OR SRCTR > 126 OR SKCTR < 1 OR SKCTR > 126
    DISPLAY "WARP DRIVE SHUT DOWN - "
    DISPLAY "UNAUTHORIZED ATTEMPT TO LEAVE GALAXY "
    PERFORM 8100-DMG-COM THRU 8100-EXIT
    GO TO 2000-EXIT
    ELSE
    MOVE " " TO MACOL (MRCTR , MKCTR)
    MOVE SRCTR TO MRCTR.
    MOVE SKCTR TO MKCTR.
    IF MACOL (MRCTR , MKCTR) = "K" OR MACOL (MRCTR , MKCTR) =
    "R" OR MACOL (MRCTR , MKCTR) = "B"
    PERFORM 8000-BOMB THRU 8000-EXIT
    ELSE
    MOVE "E" TO MACOL (MRCTR , MKCTR).
    7000-EXIT. EXIT.

    ********************************************
    * 7100-NAV THRU 7800-INT EXECUTE VARIOUS *
    * COMMANDS FROM THE USER, AND PRESENT THE *
    * RESULTS AND CONSEQUENCES OF EACH COMMAND *
    * *
    * CALLED FROM 2000-PROCESS OR 3000-COM-FUN *
    ********************************************

    7100-NAV.
    PERFORM 8340-CK-FL THRU 8340-EXIT.
    COMPUTE FUEL-COUNT = FUEL-COUNT - (200 * WARP-A).
    IF WARP-A > 0
    MOVE WARP-A TO RX-S
    ELSE
    COMPUTE RX-S ROUNDED = WARP-B / 100.
    MOVE MRCTR TO SRCTR.
    MOVE MKCTR TO SKCTR.
    COMPUTE WARP1 ROUNDED = (WARP-A * 5) + (WARP-B * .05).
    COMPUTE WARP2 ROUNDED = (WARP-A * 8) + (WARP-B * .08).
    COMPUTE WARP3 ROUNDED = (COURSE-B * .05) * RX-S.
    COMPUTE WARP4 ROUNDED = (COURSE-B * .03) * RX-S.
    GO TO
    7110-NAV
    7120-NAV
    7130-NAV
    7140-NAV
    7150-NAV
    7160-NAV
    7170-NAV
    7180-NAV
    DEPENDING ON COURSE-A.
    DISPLAY "INVALID COURSE".
    GO TO 7100-EXIT.
    7110-NAV.
    COMPUTE SRCTR = SRCTR - WARP2 + WARP4.
    COMPUTE SKCTR = SKCTR + WARP3.
    PERFORM 7000-NAV-CK THRU 7000-EXIT.
    GO TO 7100-EXIT.
    7120-NAV.
    COMPUTE SRCTR = SRCTR - WARP1 + WARP3.
    COMPUTE SKCTR = SKCTR + WARP1 + WARP4.
    PERFORM 7000-NAV-CK THRU 7000-EXIT.
    GO TO 7100-EXIT.
    7130-NAV.
    COMPUTE SRCTR = SRCTR + WARP3.
    COMPUTE SKCTR = SKCTR + WARP2 - WARP4.
    PERFORM 7000-NAV-CK THRU 7000-EXIT.
    GO TO 7100-EXIT.
    7140-NAV.
    COMPUTE SRCTR = SRCTR + WARP1 + WARP4.
    COMPUTE SKCTR = SKCTR + WARP1 - WARP3.
    PERFORM 7000-NAV-CK THRU 7000-EXIT.
    GO TO 7100-EXIT.
    7150-NAV.
    COMPUTE SRCTR = SRCTR + WARP2 - WARP4.
    COMPUTE SKCTR = SKCTR - WARP3.
    PERFORM 7000-NAV-CK THRU 7000-EXIT.
    GO TO 7100-EXIT.
    7160-NAV.
    COMPUTE SRCTR = SRCTR + WARP1 - WARP3.
    COMPUTE SKCTR = SKCTR - WARP1 - WARP4.
    PERFORM 7000-NAV-CK THRU 7000-EXIT.
    GO TO 7100-EXIT.
    7170-NAV.
    COMPUTE SRCTR = SRCTR - WARP3.
    COMPUTE SKCTR = SKCTR - WARP2 + WARP4.
    PERFORM 7000-NAV-CK THRU 7000-EXIT.
    GO TO 7100-EXIT.
    7180-NAV.
    COMPUTE SRCTR = SRCTR - WARP1 - WARP4.
    COMPUTE SKCTR = SKCTR - WARP1 + WARP3.
    PERFORM 7000-NAV-CK THRU 7000-EXIT.
    GO TO 7100-EXIT.
    7100-EXIT. EXIT.

    7200-PHA.
    IF KLGNS < 1 AND ROMULONS < 1
    DISPLAY "SCIENCE OFFICER SPOCK REPORTS NO ENEMY "
    DISPLAY "VESSELS IN THIS QUADRANT, " NAME-X
    GO TO 7200-EXIT.
    PERFORM 8340-CK-FL THRU 8340-EXIT.
    IF FUEL-COUNT < 9999
    MOVE FUEL-COUNT TO FUEL-CO
    DISPLAY "MAXIMUM OF " FUEL-CO " UNITS AVAILABLE TO
    - " PHASERS ".
    DISPLAY "HOW MANY UNITS TO PHASER BANKS? ".
    ACCEPT VAR4-AN.
    PERFORM 7210-REP-BL THRU 7210-EXIT.
    PERFORM 7220-COMPUTE-DIST THRU 7220-EXIT.
    COMPUTE VAR2 = 450000 / (SHIELD-CNT + 100).
    PERFORM 8150-TEST-AGN THRU 8150-EXIT.
    IF KLGNS > 1 AND TRAP-VEC
    DISPLAY "*ENTERPRISE DESTROYED* "
    DISPLAY "DIRECT HITS FROM " KLGNS " KLINGONS "
    MOVE 1 TO INDICATE-X.
    PERFORM 8200-CK-DONE THRU 8200-EXIT.
    COMPUTE DM-VAR4 = VAR4 - (DAMAGE-CNT / 15).
    COMPUTE VAR3 = VAR2 / 2.
    IF ROMULONS > 0
    DISPLAY "*ROMULON VESSELS PRESENT IN QUADRANT* "
    DISPLAY "DO YOU WANT TO FIRE ON ROMULONS? "
    ACCEPT LST-REPLY
    IF YES-LST
    PERFORM 7250-ROMULON-CK THRU 7250-EXIT
    GO TO 7200-EXIT.
    IF KLGNS > 0
    COMPUTE VAR2 = VAR2 / (DIST-X / 10)
    SUBTRACT VAR4 FROM FUEL-COUNT
    MOVE DM-VAR4 TO VAR4
    ADD KH-TL TO VAR4
    IF VAR4 < 400
    PERFORM 4700-DISP-HIT THRU 4700-EXIT
    DISPLAY "*KLINGON DISABLED* "
    PERFORM 4500-DISP-HIT THRU 4500-EXIT
    COMPUTE VAR4 = .75 * VAR4
    ADD VAR4 TO KH-TL
    ADD VAR2 TO DAMAGE-CNT
    SUBTRACT VAR3 FROM SHIELD-CNT
    ELSE
    PERFORM 7201-REPLACE THRU 7201-EXIT
    VARYING REP-CTR FROM 1 BY 1 UNTIL REP-CTR > RX
    INSPECT MINI-TABLE REPLACING FIRST "K" BY " "
    INSPECT MINI-TABLE REPLACING ALL "X" BY "K"
    COMPUTE VAR4 = VAR4 / (DIST-X ** .224)
    PERFORM 4700-DISP-HIT THRU 4700-EXIT
    DISPLAY "*KLINGON DESTROYED* "
    MOVE 0 TO KH-TL
    SUBTRACT 1 FROM KLGNS
    SUBTRACT 1 FROM KLINGONS
    PERFORM 5400-TRANS-BACK THRU 5400-EXIT
    IF KLGNS > 0
    PERFORM 4500-DISP-HIT THRU 4500-EXIT
    ADD VAR2 TO DAMAGE-CNT
    COMPUTE VAR2 = .75 * VAR2
    SUBTRACT VAR2 FROM SHIELD-CNT
    ELSE
    MOVE VAR3 TO VAR2
    PERFORM 4500-DISP-HIT THRU 4500-EXIT
    ADD VAR3 TO DAMAGE-CNT
    SUBTRACT VAR3 FROM SHIELD-CNT
    ELSE
    DISPLAY "THERE ARE 0 KLINGONS IN THIS QUADRANT, " NAME-X.
    PERFORM 8120-DAM-COM THRU 8120-EXIT.
    PERFORM 8300-CK-FUEL-DAMAGE THRU 8300-EXIT.
    PERFORM 8200-CK-DONE THRU 8200-EXIT.
    7200-EXIT. EXIT.

    7201-REPLACE.
    INSPECT MINI-TABLE REPLACING FIRST "K" BY "X".
    7201-EXIT. EXIT.

    7202-REPLACE.
    INSPECT MINI-TABLE REPLACING FIRST "R" BY "X".
    7202-EXIT. EXIT.

    7210-REP-BL.
    MOVE 0 TO TAL4.
    INSPECT VAR4-AN TALLYING TAL4 FOR ALL " ".
    IF TAL4 > 0
    INSPECT VAR4-AN REPLACING ALL " " BY ZEROS
    IF VAR4-AN NUMERIC
    MOVE VAR4-AN TO VAR4
    COMPUTE VAR4 = VAR4 / (10 ** TAL4)
    ELSE
    MOVE 300 TO VAR4
    ELSE
    IF VAR4-AN NUMERIC
    MOVE VAR4-AN TO VAR4
    ELSE
    MOVE 300 TO VAR4.
    IF VAR4 < 300
    MOVE 300 TO VAR4.
    7210-EXIT. EXIT.

    7220-COMPUTE-DIST.
    MOVE 30 TO DIST-B.
    MOVE 30 TO DIST-X.
    MOVE 30 TO DIST-R.
    MOVE 0 TO CT-K.
    MOVE 0 TO CT-R.
    PERFORM 7225-FIND-E THRU 7225-EXIT
    VARYING RCNTR FROM 1 BY 1 UNTIL RCNTR > 14
    AFTER KCNTR FROM 1 BY 1 UNTIL KCNTR > 14.
    PERFORM 7230-COMPUTE THRU 7230-EXIT
    VARYING RCNTR FROM 1 BY 1 UNTIL RCNTR > 14
    AFTER KCNTR FROM 1 BY 1 UNTIL KCNTR > 14.
    PERFORM 7247-EST-NBR THRU 7247-EXIT.
    7220-EXIT. EXIT.

    7225-FIND-E.
    IF MCOL (RCNTR , KCNTR) = "E"
    MOVE RCNTR TO E1
    MOVE KCNTR TO E2.
    7225-EXIT. EXIT.

    7230-COMPUTE.
    IF MCOL (RCNTR , KCNTR) = "K"
    MOVE RCNTR TO K1
    MOVE KCNTR TO K2
    ADD 1 TO CT-K
    MOVE DIST-X TO STR-A
    PERFORM 7240-DIST-K THRU 7240-EXIT
    IF DIST-X > STR-A
    MOVE STR-A TO DIST-X.
    IF MCOL (RCNTR , KCNTR) = "R"
    MOVE RCNTR TO R1
    MOVE KCNTR TO R2
    ADD 1 TO CT-R
    MOVE DIST-R TO STR-R
    PERFORM 7243-DIST-R THRU 7243-EXIT
    IF DIST-R > STR-R
    MOVE STR-R TO DIST-R.
    IF MCOL (RCNTR , KCNTR) = "B"
    MOVE RCNTR TO B1
    MOVE KCNTR TO B2
    MOVE DIST-B TO STR-X
    PERFORM 7245-DIST-B THRU 7245-EXIT
    IF DIST-B > STR-X
    MOVE STR-X TO DIST-B.
    7230-EXIT. EXIT.

    7240-DIST-K.
    IF K1 > E1
    COMPUTE K1 = K1 - E1
    ELSE
    COMPUTE K1 = E1 - K1.
    IF K2 > E2
    COMPUTE K2 = K2 - E2
    ELSE
    COMPUTE K2 = E2 - K2.
    COMPUTE DIST-X ROUNDED = ((K1 ** 2) + (K2 ** 2)) ** .5.
    MOVE DIST-X TO DKC (CT-K).
    7240-EXIT. EXIT.

    7243-DIST-R.
    IF R1 > E1
    COMPUTE R1 = R1 - E1
    ELSE
    COMPUTE R1 = E1 - R1.
    IF R2 > E2
    COMPUTE R2 = R2 - E2
    ELSE
    COMPUTE R2 = E2 - R2.
    COMPUTE DIST-R ROUNDED = ((R1 ** 2) + (R2 ** 2)) ** .5.
    MOVE DIST-R TO DRC (CT-R).
    7243-EXIT. EXIT.

    7245-DIST-B.
    IF B1 > E1
    COMPUTE B1 = B1 - E1
    ELSE
    COMPUTE B1 = E1 - B1.
    IF B2 > E2
    COMPUTE B2 = B2 - E2
    ELSE
    COMPUTE B2 = E2 - B2.
    COMPUTE DIST-B ROUNDED = ((B1 ** 2) + (B2 ** 2)) ** .5.
    7245-EXIT. EXIT.

    7247-EST-NBR.
    MOVE 30 TO STR-X.
    PERFORM 7248-EST-K THRU 7248-EXIT

    VARYING RT FROM 1 BY 1 UNTIL RT > CT-K.
    PERFORM 7249-EST-R THRU 7249-EXIT
    VARYING QT FROM 1 BY 1 UNTIL QT > CT-R.
    7247-EXIT. EXIT.

    7248-EST-K.
    IF DKC (RT) < STR-X
    MOVE DKC (RT) TO STR-X
    COMPUTE RX = RT - 1.
    7248-EXIT. EXIT.

    7249-EST-R.
    IF DRC (QT) < STR-R
    MOVE DRC (QT) TO STR-R
    COMPUTE QX = QT - 1.
    7249-EXIT. EXIT.

    7250-ROMULON-CK.
    IF ROMULONS > 2 AND NO-WAY
    DISPLAY "*ENTERPRISE FIRING ON ROMULONS*"
    DISPLAY "*ROMULONS RETURNING FIRE* "
    DISPLAY "SIMULTANEOUS HITS FROM " ROMULONS " ROMULONS "
    DISPLAY "*ENTERPRISE DESTROYED*"
    MOVE 1 TO INDICATE-X
    PERFORM 8200-CK-DONE THRU 8200-EXIT
    ELSE
    PERFORM 8400-GENERATE THRU 8400-EXIT
    DISPLAY "*ENTERPRISE FIRING ON ROMULONS* "
    SUBTRACT VAR4 FROM FUEL-COUNT
    IF NO-WAY OR VAR4 < 447
    COMPUTE VAR4 = VAR4 / (DIST-R ** .224)
    MOVE VAR4 TO VAR5
    DISPLAY VAR5 " UNIT HIT ON ROMULON "
    DISPLAY "*ROMULON RETURNING FIRE*"
    PERFORM 8400-GENERATE THRU 8400-EXIT
    IF NO-WAY
    DISPLAY "*ENTERPRISE DESTROYED BY ROMULON
    - " TORPEDO* "
    MOVE 1 TO INDICATE-X
    PERFORM 8200-CK-DONE THRU 8200-EXIT
    ELSE
    COMPUTE VAR2 = 3 * VAR2 / (DIST-R / 10)
    PERFORM 4500-DISP-HIT THRU 4500-EXIT
    ADD VAR2 TO DAMAGE-CNT
    COMPUTE VAR3 = VAR2 / 2
    IF VAR3 < 9999
    SUBTRACT VAR3 FROM SHIELD-CNT
    ELSE
    MOVE 0 TO SHIELD-CNT

    ELSE
    COMPUTE VAR4 = VAR4 / (DIST-X ** .125)
    MOVE VAR4 TO VAR5
    DISPLAY VAR5 " UNIT HIT ON ROMULON "
    DISPLAY "*ROMULON DESTROYED*"
    PERFORM 7202-REPLACE THRU 7202-EXIT
    VARYING REP-CTR FROM 1 BY 1 UNTIL REP-CTR > QX
    INSPECT MINI-TABLE REPLACING FIRST "R" BY " "
    INSPECT MINI-TABLE REPLACING ALL "X" BY "R"
    SUBTRACT 1 FROM ROMULONS
    PERFORM 5400-TRANS-BACK THRU 5400-EXIT.
    PERFORM 8100-DMG-COM THRU 8100-EXIT.
    PERFORM 8300-CK-FUEL-DAMAGE THRU 8300-EXIT.
    PERFORM 8200-CK-DONE THRU 8200-EXIT.
    7250-EXIT. EXIT.

    7300-TOR.
    IF KLGNS < 1 AND ROMULONS < 1
    DISPLAY "THERE ARE 0 ENEMY VESSELS IN THIS QUADRANT, "
    - NAME-X
    GO TO 7300-EXIT.
    PERFORM 8400-GENERATE THRU 8400-EXIT.
    COMPUTE VAR2 = 250000 / (SHIELD-CNT + 100).
    PERFORM 8150-TEST-AGN THRU 8150-EXIT.
    PERFORM 7220-COMPUTE-DIST THRU 7220-EXIT.
    IF KLGNS > 2
    COMPUTE VAR2 = VAR2 * (KLGNS + 1) / 2.
    COMPUTE VAR3 = .75 * VAR2.
    IF ROMULONS > 0 AND TORPS > 0
    DISPLAY "*ROMULONS PRESENT IN QUADRANT*"
    DISPLAY "DO YOU WANT TO FIRE ON THEM? "
    ACCEPT LST-REPLY
    IF YES-LST
    PERFORM 7350-ROMULON-CK THRU 7350-EXIT
    GO TO 7300-EXIT.
    IF TORPS > 0
    IF KLGNS > 0
    IF SHIELD-CNT < 475 AND NO-WAY
    DISPLAY "*ENTERPRISE DESTROYED*"
    DISPLAY "LOW SHIELDS AT TIME OF ENEMY ATTACK "
    MOVE 1 TO INDICATE-X
    PERFORM 8200-CK-DONE THRU 8200-EXIT
    ELSE
    IF NO-WAY AND DIST-X > 4
    COMPUTE VAR2 = VAR2 / (DIST-X / 10)
    DISPLAY "TORPEDO MISSED "
    PERFORM 4500-DISP-HIT THRU 4500-EXIT
    ADD VAR2 TO DAMAGE-CNT
    SUBTRACT 1 FROM TORPS
    SUBTRACT VAR3 FROM SHIELD-CNT
    PERFORM 8120-DAM-COM THRU 8120-EXIT
    ELSE
    DISPLAY "*KLINGON DESTROYED*"
    SUBTRACT VAR3 FROM DAMAGE-CNT
    PERFORM 7201-REPLACE THRU 7201-EXIT
    VARYING REP-CTR FROM 1 BY 1 UNTIL REP-CTR
    - > RX
    INSPECT MINI-TABLE REPLACING FIRST "K" BY " "
    INSPECT MINI-TABLE REPLACING ALL "X" BY "K"
    SUBTRACT 1 FROM TORPS
    SUBTRACT 1 FROM KLGNS
    SUBTRACT 1 FROM KLINGONS
    PERFORM 5400-TRANS-BACK THRU 5400-EXIT
    IF KLGNS > 0
    PERFORM 4500-DISP-HIT THRU 4500-EXIT
    ADD VAR2 TO DAMAGE-CNT
    SUBTRACT VAR3 FROM SHIELD-CNT
    PERFORM 8120-DAM-COM THRU 8120-EXIT
    ELSE
    PERFORM 8120-DAM-COM THRU 8120-EXIT
    ELSE
    DISPLAY "THERE ARE 0 KLINGON VESSELS IN THIS
    - " QUADRANT, " NAME-X
    ELSE
    DISPLAY "0 TORPEDOES REMAINING, " NAME-X.
    PERFORM 8300-CK-FUEL-DAMAGE THRU 8300-EXIT.
    PERFORM 8200-CK-DONE THRU 8200-EXIT.
    7300-EXIT. EXIT.

    7350-ROMULON-CK.
    IF ROMULONS > 1 AND NO-WAY
    DISPLAY "*ENTERPRISE FIRING ON ROMULONS*"
    DISPLAY "*ROMULONS RETURNING FIRE*"
    DISPLAY "SIMULTANEOUS HITS FROM " ROMULONS " ROMULONS "
    DISPLAY "*ENTERPRISE DESTROYED*"
    MOVE 1 TO INDICATE-X
    PERFORM 8200-CK-DONE THRU 8200-EXIT
    ELSE
    DISPLAY "*ENTERPRISE FIRING ON ROMULONS*"
    SUBTRACT 1 FROM TORPS
    IF NO-WAY AND DIST-R > 4
    DISPLAY "TORPEDO MISSED "
    DISPLAY "*ROMULONS RETURNING FIRE*"
    PERFORM 8400-GENERATE THRU 8400-EXIT
    IF NO-WAY AND SHIELD-CNT < 4000
    DISPLAY "*ENTERPRISE DESTROYED BY ROMULON
    - " TORPEDO*"
    MOVE 1 TO INDICATE-X
    PERFORM 8200-CK-DONE THRU 8200-EXIT
    ELSE
    COMPUTE VAR2 = 3 * VAR2 / (DIST-R / 10)
    PERFORM 4500-DISP-HIT THRU 4500-EXIT
    ADD VAR2 TO DAMAGE-CNT
    COMPUTE VAR3 = VAR2 / 2
    SUBTRACT VAR3 FROM SHIELD-CNT
    ELSE
    DISPLAY "*ROMULON DESTROYED*"
    PERFORM 7202-REPLACE THRU 7202-EXIT
    VARYING REP-CTR FROM 1 BY 1 UNTIL REP-CTR > QX
    INSPECT MINI-TABLE REPLACING FIRST "R" BY " "
    INSPECT MINI-TABLE REPLACING ALL "X" BY "R"
    SUBTRACT 1 FROM ROMULONS
    PERFORM 5400-TRANS-BACK THRU 5400-EXIT.
    PERFORM 8300-CK-FUEL-DAMAGE THRU 8300-EXIT.
    PERFORM 8200-CK-DONE THRU 8200-EXIT.
    7350-EXIT. EXIT.

    7400-STA.
    COMPUTE VAR3 = (DAMAGE-CNT / 60).
    MOVE VAR3 TO VAR6.
    MOVE FUEL-COUNT TO FUEL-CO.
    MOVE SHIELD-CNT TO SHIELD-CO.
    DISPLAY " ".
    DISPLAY "FUEL UNITS DAMAGE ".
    DISPLAY "REMAINING LEVEL ".
    DISPLAY " ".
    DISPLAY " " FUEL-CO " " VAR6 "%".
    DISPLAY " ".
    DISPLAY "===================".
    DISPLAY " ".
    DISPLAY " PHOTON SHIELD ".
    DISPLAY "TORPEDOES LEVEL ".
    DISPLAY " ".
    DISPLAY " " TORPS " " SHIELD-CO.
    DISPLAY " ".
    PERFORM 8100-DMG-COM THRU 8100-EXIT.
    PERFORM 8300-CK-FUEL-DAMAGE THRU 8300-EXIT.
    PERFORM 8200-CK-DONE THRU 8200-EXIT.
    7400-EXIT. EXIT.

    7500-DEF.
    ADD SHIELD-CNT TO FUEL-COUNT.
    DISPLAY "HOW MANY UNITS TO SHIELDS (0 - 9999)? ".
    PERFORM 7520-ASC THRU 7520-EXIT.
    IF SHIELD-CNT < FUEL-COUNT
    SUBTRACT SHIELD-CNT FROM FUEL-COUNT
    ELSE
    MOVE FUEL-COUNT TO FUEL-CO
    DISPLAY "MAXIMUM AMOUNT TO SHIELDS: " FUEL-CO
    DISPLAY "HOW MANY UNITS TO SHIELDS? "
    PERFORM 7520-ASC THRU 7520-EXIT
    SUBTRACT SHIELD-CNT FROM FUEL-COUNT.
    MOVE SHIELD-CNT TO SHIELD-CO.
    DISPLAY "SHIELDS AT " SHIELD-CO " PER YOUR COMMAND ".
    7500-EXIT. EXIT.

    7520-ASC.
    ACCEPT SHIELD-CNT-AN.
    MOVE 0 TO SBL.
    INSPECT SHIELD-CNT-AN TALLYING SBL FOR ALL " ".
    INSPECT SHIELD-CNT-AN REPLACING ALL " " BY ZEROS.
    IF SHIELD-CNT-AN NOT NUMERIC
    MOVE 0 TO SBL
    DISPLAY "INVALID - ENTRY MUST BE NUMERIC "
    DISPLAY "HOW MANY UNITS TO SHIELDS? "
    ACCEPT SHIELD-CNT-AN
    INSPECT SHIELD-CNT-AN TALLYING SBL FOR ALL " "
    INSPECT SHIELD-CNT-AN REPLACING ALL " " BY ZEROS
    IF SHIELD-CNT-AN NOT NUMERIC
    MOVE 0 TO SHIELD-CNT
    GO TO 7520-EXIT.
    MOVE SHIELD-CNT-AN TO SHIELD-CNT.
    IF SBL > 0
    COMPUTE SHIELD-CNT = SHIELD-CNT / (10 ** SBL).
    7520-EXIT. EXIT.

    7600-DOC.
    PERFORM 8400-GENERATE THRU 8400-EXIT.
    IF BASE-CNT > 0
    PERFORM 7220-COMPUTE-DIST THRU 7220-EXIT
    IF DIST-B < 7
    IF NO-WAY
    DISPLAY "*UNSUCCESSFUL DOCKING ATTEMPT* "
    DISPLAY "STAR BASE REPORTS ALL BAYS IN USE "
    PERFORM 8100-DMG-COM THRU 8100-EXIT
    ELSE
    MOVE 5 TO TORPS
    MOVE 25000 TO FUEL-COUNT
    MOVE 0 TO DAMAGE-CNT
    MOVE 0 TO SHIELD-CNT
    DISPLAY "SHIELDS DROPPED TO DOCK AT STAR BASE "
    DISPLAY "*DOCK SUCCESSFUL* "
    ELSE
    DISPLAY "THE NEAREST STAR BASE IS " DIST-B " PARSECS"
    DISPLAY "YOU MUST MANEUVER TO WITHIN 6 PARSECS TO
    - "DOCK "
    ELSE
    DISPLAY "THERE ARE 0 STAR BASES IN THIS QUADRANT, "
    - NAME-X.
    PERFORM 8300-CK-FUEL-DAMAGE THRU 8300-EXIT.
    PERFORM 8200-CK-DONE THRU 8200-EXIT.
    7600-EXIT. EXIT.

    7650-TRANS-STAR.
    IF Q1 = 1
    MOVE 2 TO Q9
    ELSE
    IF Q1 = 9
    MOVE 8 TO Q9
    ELSE
    MOVE Q1 TO Q9.
    IF Q2 = 1
    MOVE 2 TO R9
    ELSE
    IF Q2 = 9
    MOVE 8 TO R9
    ELSE
    MOVE Q2 TO R9.
    COMPUTE W = (Q9 - 2) * 14.
    COMPUTE Z = (R9 - 2) * 14.
    PERFORM 7670-STRANS THRU 7670-EXIT
    VARYING RCTR FROM 1 BY 1 UNTIL RCTR > 42
    AFTER KCTR FROM 1 BY 1 UNTIL KCTR > 42.
    7650-EXIT. EXIT.

    7670-STRANS.
    COMPUTE A = Z + RCTR.
    COMPUTE B = W + KCTR.
    MOVE MACOL (A , B) TO KOLUMN (RCTR , KCTR).
    7670-EXIT. EXIT.

    7700-LRS.
    PERFORM 7650-TRANS-STAR THRU 7650-EXIT.
    MOVE ZEROS TO SCAN-KEEP.
    MOVE 0 TO SCAN-CTR.
    IF Q1 = 1
    MOVE 1 TO QT1
    MOVE 3 TO QT3
    ELSE
    IF Q1 = 9
    MOVE 7 TO QT1
    MOVE 9 TO QT3
    ELSE
    COMPUTE QT1 = Q1 - 1
    COMPUTE QT3 = Q1 + 1.
    IF Q2 = 1
    MOVE 1 TO QT2
    MOVE 3 TO QT4
    ELSE
    IF Q2 = 9
    MOVE 7 TO QT2
    MOVE 9 TO QT4
    ELSE
    COMPUTE QT2 = Q2 - 1
    COMPUTE QT4 = Q2 + 1.
    PERFORM 7730-TRADE-TBL THRU 7730-EXIT
    VARYING TR2 FROM 0 BY 1 UNTIL TR2 > 2
    AFTER TR1 FROM 0 BY 1 UNTIL TR1 > 2.
    DISPLAY " ".
    DISPLAY "=========================".
    DISPLAY "= = = =".
    DISPLAY "= " CV (1) "," CV (2) " = " CV (3) "," CV (4) " = "
    - CV (5) "," CV (6) " = ".
    DISPLAY "= = = =".
    DISPLAY "=========================".
    DISPLAY "= = = =".
    DISPLAY "= " CV (7) "," CV (8) " = " CV (9) "," CV (10) " = "
    CV (11) "," CV (12) " =".
    DISPLAY "= = = =".
    DISPLAY "=========================".
    DISPLAY "= = = =".
    DISPLAY "= " CV (13) "," CV (14) " = " CV (15) "," CV (16)
    - " = " CV (17) "," CV (18) " =".
    DISPLAY "= = = =".
    DISPLAY "=========================".
    DISPLAY "KEY: ".
    DISPLAY "QUADRANTS " QT1 "," QT2 " THRU " QT3 "," QT4.
    DISPLAY "FORMAT - KLINGONS,STAR BASES ".
    IF Q1 = 1 OR Q1 = 9 OR Q2 = 1 OR Q2 = 9
    DISPLAY "*ENTERPRISE ON GALACTIC BOUNDARY*".
    DISPLAY "ENTERPRISE IN QUADRANT " Q1 "," Q2.
    DISPLAY " ".
    PERFORM 8100-DMG-COM THRU 8100-EXIT.
    PERFORM 8300-CK-FUEL-DAMAGE THRU 8300-EXIT.
    PERFORM 8200-CK-DONE THRU 8200-EXIT.
    7700-EXIT. EXIT.

    7730-TRADE-TBL.
    COMPUTE QT = (TR1 * 14).
    COMPUTE RT = (TR2 * 14).
    PERFORM 7750-TRADE-ACT THRU 7750-EXIT
    VARYING KTCTR FROM 1 BY 1 UNTIL KTCTR > 14
    AFTER RTCTR FROM 1 BY 1 UNTIL RTCTR > 14.
    PERFORM 7770-INSPECT-SCAN THRU 7770-EXIT.
    7730-EXIT. EXIT.

    7750-TRADE-ACT.
    COMPUTE QX = QT + KTCTR.
    COMPUTE RX = RT + RTCTR.
    MOVE KOLUMN (RX , QX) TO SCAN-COL (RTCTR , KTCTR).
    7750-EXIT. EXIT.

    7770-INSPECT-SCAN.
    ADD 1 TO SCAN-CTR.
    INSPECT SCAN-TABLE TALLYING CV (SCAN-CTR) FOR ALL "K".
    ADD 1 TO SCAN-CTR.
    INSPECT SCAN-TABLE TALLYING CV (SCAN-CTR) FOR ALL "B".
    7770-EXIT. EXIT.

    7800-INT.
    IF KLINGONS > 0
    MOVE 1 TO CX
    MOVE 1 TO DX
    PERFORM 7850-SEARCH THRU 7850-EXIT
    UNTIL MACOL (CX , DX) = "K" OR DX > 126
    COMPUTE CX-1 = (DX - 1) / 14 + 1
    COMPUTE DX-1 = (CX - 1) / 14 + 1
    DISPLAY " "
    DISPLAY "LATEST INTELLIGENCE GATHERING REPORTS "
    DISPLAY "INDICATE 1 OR MORE KLINGON VESSELS "
    DISPLAY "IN THE VICINITY OF QUADRANT " CX-1 "," DX-1
    DISPLAY " "
    DISPLAY "ENTERPRISE IN QUADRANT " Q1 "," Q2
    DISPLAY " ".
    7800-EXIT. EXIT.

    7850-SEARCH.
    ADD 1 TO CX.
    IF CX > 126
    ADD 1 TO DX
    MOVE 1 TO CX.
    7850-EXIT. EXIT.

    8000-BOMB.
    IF MACOL (MRCTR , MKCTR) = "K"
    DISPLAY "*ENTERPRISE DESTROYED IN COLLISION WITH
    - " KLINGON*"
    ELSE
    IF MACOL (MRCTR , MKCTR) = "R"
    DISPLAY "*ENTERPRISE DESTROYED IN COLLISION WITH
    - " ROMULON*"
    ELSE
    DISPLAY "*ENTERPRISE DESTROYED IN COLLISION WITH STAR
    - " BASE*".
    MOVE 1 TO INDICATE-X.
    PERFORM 8200-CK-DONE THRU 8200-EXIT.
    8000-EXIT. EXIT.

    ****************************************************
    * 8100-DMG-COM AND 8120-DAM-COM CALCULATE AND DIS- *
    * PLAY HITS ON THE ENTERPRISE FROM ENEMY VESSELS *
    * IN QUADRANT. -- CALLED FOLLOWING POSSIBLE CON- *
    * TACT WITH ENEMY VESSELS. *
    ****************************************************

    8100-DMG-COM.
    IF KLGNS > 0
    COMPUTE VAR2 = (K-OR - KLINGONS) * KLGNS * FUEL-COUNT /
    - (SHIELD-CNT + 21)
    PERFORM 8150-TEST-AGN THRU 8150-EXIT
    COMPUTE VAR3 = .75 * VAR2
    DISPLAY "*ENTERPRISE ENCOUNTERING KLINGON FIRE*"
    PERFORM 4500-DISP-HIT THRU 4500-EXIT
    ADD VAR2 TO DAMAGE-CNT
    SUBTRACT VAR3 FROM SHIELD-CNT.
    8100-EXIT. EXIT.

    8120-DAM-COM.
    IF ROMULONS > 0
    COMPUTE VAR2 = ROMULONS * FUEL-COUNT / (SHIELD-CNT + 7)
    PERFORM 8160-TEST-AGN THRU 8160-EXIT
    COMPUTE VAR3 = .75 * VAR2
    DISPLAY "*ENTERPRISE ENCOUNTERING ROMULON FIRE*"
    PERFORM 4500-DISP-HIT THRU 4500-EXIT
    ADD VAR2 TO DAMAGE-CNT
    SUBTRACT VAR3 FROM SHIELD-CNT.
    8120-EXIT. EXIT.

    8150-TEST-AGN.
    IF VAR2 < 325 AND KLGNS > 0
    ADD 177 TO VAR2
    COMPUTE VAR2 = (KLGNS * VAR2 / 2.7) + (VAR2 * DAMAGE-CNT
    - / 980).
    8150-EXIT. EXIT.

    8160-TEST-AGN.
    IF VAR2 < 525 AND ROMULONS > 0
    ADD 254 TO VAR2
    COMPUTE VAR2 = (ROMULONS * VAR2 / 4.7) + (VAR2 *
    - DAMAGE-CNT / 365).
    8160-EXIT. EXIT.

    8200-CK-DONE.
    IF BYE-BYE
    GO TO 2000-EXIT.
    8200-EXIT. EXIT.

    *************************************************
    * 8300-CK-FUEL-DAMAGE CHECKS AND NOTIFIES THE *
    * USER OF LOW SHIELDS, LOW FUEL RESERVES, OR *
    * HIGH DAMAGE TO THE SHIP, IN ORDER THAT HE MAY *
    * ATTEMPT TO DOCK BEFORE THE ENTERPRISE IS *
    * DISABLED. -- CALLED FOLLOWING POSSIBLE *
    * CONTACT WITH ENEMY VESSELS. *
    *************************************************

    8300-CK-FUEL-DAMAGE.
    IF FUEL-COUNT < 4500 AND FUEL-COUNT > 0
    DISPLAY "LT. SCOTT REPORTS FUEL IS RUNNING LOW, " NAME-X
    ELSE
    IF FUEL-COUNT NOT > 0
    DISPLAY "FUEL RESERVES DEPLETED "
    DISPLAY "THE ENTERPRISE IS DRIFTING IN SPACE "
    PERFORM 8350-CK-SHIFT THRU 8350-EXIT.
    IF DAMAGE-CNT > 6000
    DISPLAY "ENTERPRISE STRANDED BECAUSE OF HEAVY DAMAGE "
    MOVE 1 TO INDICATE-X
    PERFORM 8200-CK-DONE THRU 8200-EXIT.
    IF DAMAGE-CNT > 4500
    DISPLAY "DAMAGE CONTROL REPORTS HEAVY DAMAGE TO ENTERPRIS
    - "E, " NAME-X.
    IF SHIELD-CNT < 800 AND (KLGNS > 0 OR ROMULONS > 0)
    DISPLAY "LT. SULU REPORTS SHIELDS DANGEROUSLY LOW, " NAME
    - -X.
    8300-EXIT. EXIT.

    8340-CK-FL.
    IF FUEL-COUNT NOT > 180
    DISPLAY "*INSUFFICIENT FUEL TO CONTINUE*"
    PERFORM 8350-CK-SHIFT THRU 8350-EXIT
    GO TO 2000-EXIT.
    8340-EXIT. EXIT.

    8350-CK-SHIFT.
    IF SHIELD-CNT > 200
    DISPLAY "LT. SULU ADVISES YOU LOWER SHIELDS "
    DISPLAY "TO INCREASE FUEL SUPPLY, " NAME-X
    ELSE
    MOVE 1 TO INDICATE-X
    PERFORM 8200-CK-DONE THRU 8200-EXIT.
    8350-EXIT. EXIT.

    8400-GENERATE.
    IF NX > 24
    MOVE 0 TO NX.
    ADD 1 TO NX.
    * NOTE. USED TO BE IF CHAR (NX) NUMERIC
    IF NX EQUAL NX
    MOVE 1 TO GENRTE-RESULT
    ELSE
    MOVE 0 TO INDICATE-Y
    MOVE 0 TO GENRTE-RESULT
    IF CHAR (NX) = "F"
    MOVE 1 TO INDICATE-Y.
    8400-EXIT. EXIT.

    8500-FINISH-GAME.
    DISPLAY " ".
    IF BYE-BYE
    IF S-DATE > DS-DATE
    MOVE KLINGONS TO VAE1
    MOVE WS-DATE TO DS-DATE
    DISPLAY "IT IS NOW STAR DATE " S-DATE
    DISPLAY "STAR DATE " DS-DATE " STAR FLEET HQ"
    DISPLAY "WAS DESTROYED BY " VAE1 " KLINGON VESSELS"
    DISPLAY NAME-X " COURT MARTIALED"
    ELSE
    DISPLAY NAME-X " COURT MARTIALED"
    ELSE
    DISPLAY "CONGRATULATIONS ON A JOB WELL DONE. "
    DISPLAY "THE FEDERATION IS PROUD OF YOU, " NAME-X.
    DISPLAY " ".
    8500-EXIT. EXIT.

    9000-END-OF-JOB-SECTION SECTION.

    [continued in next message]

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)