home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG033.ARK / CASPGAME.BAS < prev    next >
BASIC Source File  |  1984-04-29  |  20KB  |  508 lines

  1. REM   THIS IS THE PROGRAM 'CASPGAME.BAS'
  2. REM    (COMPUTER AIDED SEARCH AND RESCUE PLANNING GAME)
  3. REM
  4. REM    WRITTEN BY MAJOR BOB GREGOIRE,OPERATIONS OFFICER,GROUP 30,
  5. REM    PENNSYLVANIA WING,CIVIL AIR PATROL
  6. REM
  7. REM THIS PROGRAM IS ESSENTIALLY IDENTICAL TO THE WORKING PROGRAM 'BITCASP'
  8. REM AND WAS WRITTEN TO DEMONSTRATE THAT PROGRAM. TO USE THIS PROGRAM A SCENARIO
  9. REM MUST BE WRITTEN FOR A TYPICAL SAR SITUATION AND THEN THE INSTRUCTOR
  10. REM MUST RUN THIS GAME TO THE EXTENT OF INPUTING ALL POT'S FOR THAT SCENNARIO.
  11. REM THE USER THEN ATTEMPTS TO RECONSTRUCT THAT POT MAP FROM THE SCENNARIO AND
  12. REM FIND THE TARGET (WHICH HAS BEEN RANDOMLY PLACED ON THE MAP WITH RESPECT TO
  13. REM THE INITIAL POT MAP) USING POD'S.
  14. REM
  15. REM    THE PURPOSE OF THIS PROGRAM IS TO RECORD AND CALCULATE THE VARIOUS
  16. REM    PROBABILITIES OF A SEARCH TARGET BASED UPON THE ESTIMATED TRACK, AREA
  17. REM    AND SEARCH RESULTS. THIS PROGRAM INTERFACES WITH A DIGITIZER IN ORDER
  18. REM    TO REDUCE MAP TRACKS, AREAS AND GRID POINTS TO MANAGEABLE FORM. THE
  19. REM    OUTPUT FROM THIS PROGRAM IS TABULAR SUMMARY OF THE PROBABILITY OF
  20. REM    TARGET OF ALL GRIDS WITHIN THE MAP AREA. WITH THESE RESULTS THE MISSION
  21. REM    COORDINATOR IS ABLE TO MORE EFFECTIVELY DISTRIBUTE HIS SEARCH FORCES.
  22. REM
  23. REM    THIS PROGRAM REQUIRES A 35K CP/M SYSTEM AND USES THE 'CBASIC' COMPILER
  24. REM    SPECIAL EQUIPMENT IS A SUMMAGRAPHICS 'BITPAD' WITH THE I/O DRIVER
  25. REM    FOR ITS PORT MODIFIED TO CHANGE ANY 'LINE FEED' CHARACTER TO 'SPACE'.
  26. REM    THIS WAS DONE BECAUSE 'CARRIAGE RETURN' IS THE OUTPUT DELIMITER IN
  27. REM    CBASIC AND BASIC-E. THEREFORE THE 'LINEFEED' IS STORED IN THE UART
  28. REM    AND ADDED AS THE FIRST CHARACTER OF THE NEXT BITPAD DATA SEQUENCE. THIS
  29. REM    CAUSES THE FIRST COORDINATE (IE XXXX) TO BE IGNORED BY THE COMPILER.
  30. REM    THE SYSTEM IS CONFIGURED WITH THE BIT PAD AT 'IOBYTE'=DECIMAL '3'
  31. REM    THE CONSOLE AND PRINTER ARE AT 'IOBYTE'=DECIMAL '129'
  32. REM    AN ADM-3 TERMINAL HAS BEEN MODIFIED TO CLEAR SCREEN WITH 'CHR$(25)'.
  33. REM    THE LINE "OUT 0,184" CHANGES MY 3P+S I/O FROM THE NORMAL 110 BAUD TO
  34. REM    THE ALTERNATE 9600 BAUD. THE LINE "POKE 35513,201" INSERTS 'RET (IE.C9)
  35. REM    AS THE FIRST INSTRUCTION OF THE 3P+S OUTPUT DRIVER IN BIOS. THE LINE
  36. REM    "POKE 35501,0" ACTIVATES A LINE-FEED CHARACTER TO SPACE CHARACTER
  37. REM    CONVERSION ROUTINE IN THE 3P+S INPUT ROUTINE.
  38. REM
  39. REM    THE BITPAD USED HAD AN RS232 OUTPUT OF 13 ASCII DIGITS (XXXX,YYYY,ZCL)
  40. REM    WHERE XXXX IS THE NUMBER OF INCHES FROM THE LOWER LEFT TIMES 200
  41. REM    YYYY=Y COORD, Z=PEN DOWN FLAG, C=CARRIAGE RETURN, L=LINE FEED
  42. REM    A SERIOUS PROBLEM IS THAT THE BIOS ATTEMPTS TO ECHO ALL BITPAD INPUT
  43. REM    TO THE BITPAD OUTPUT PORT. THIS CUTS THE THROUGHPUT CONSIDERABLY.
  44. REM    AT TIMES THE INPUT DATA WILL OVERRUN THE PROCESSING TIME AND WILL
  45. REM    CAUSE THE COMPILER TO OUTPUT AN ERROR MESSAGE TO THE BITPAD OUTPUT
  46. REM    PORT. TIMEWISE THIS WILL MESS UP THE INPUT OF THE NEXT DATA POINT
  47. REM    (WHICH CAUSES ANOTHER MESSAGE ETC ETC). AT RATE 4 (8 DATA POINTS PER
  48. REM    SECOND)THE THROUGHPUT IS ABOUT 3 DATA POINTS PER SECOND.IF THE CALLING 
  49. REM    ADDRESS OF THE BITPAD OUTPUT DRIVER HAS 'C9' (RETURN) PATCHED TO IT,
  50. REM    RATES 4,5 WILL GIVE AN HONEST THROUGHPUT OF 6 OR 12.5 DATA POINTS
  51. REM     PER SECOND (IE. 16 OR 8 SECONDS PER TRACK). THE BITPAD BAUD RATE WAS
  52. REM    SET TO 9600 (1 STOP BIT).
  53. REM
  54. REM    THIS PROGRAM HAS BEEN DESIGNED TO USE A PENNSYLVANIA MAP WHICH IS
  55. REM    GRIDDED ON 15 MINUTE (LAT+LONGITUDE) CENTERS. THERE ARE THEREFORE
  56. REM    9(NORTH-SOUTH) BY 23(EAST-WEST) GRIDS. FOR PRINTING CONVENIENCE
  57. REM    THE PENNSYVANIA MAP WAS ORIENTED WITH EAST AT THE TOP OF THE BITPAD.
  58. REM    FOR OTHER MAPS CHANGE THE VARIABLES 'NX' AND 'NY'.
  59. REM  **********************************************************************
  60. REM  VARIABLES:
  61. REM    NY=THE NUMBER OF HORIZONTAL ROWS
  62. REM    NX=THE NUMBER OF VERTICAL ROWS
  63. REM    AX,AY=UPPER LEFT MAP COORDINATE 
  64. REM    BX,BY=UPPER RIGHT MAP COORDINATE
  65. REM    CX,CY=LOWER LEFT MAP COORDINATE
  66. REM    NUMPTS=THE NUMBER OF DATA POINTS PER TRACK LINE
  67. REM    POT=PROBABILITY OF TARGET FOR A SINGLE TRACK OR GRID
  68. REM    SPOT=THE SUM OF POT'S FOR ALL GRIDS IN THE IPOT( ) MATRIX
  69. REM    TPOF=THE TOTAL PROBABILITY OF FAILURE FOR THE MAP AREA
  70. REM    POD=PROBABILITY OF DETECTION
  71. REM    ANS$=DUMMY STRING VARIABLE
  72. REM    TX,TY,Z=DUMMY VARIABLES
  73. REM    TEMP( )=MATRIX HOLDING TEMPORARY ONE TRACK POT'S
  74. REM    IPOT( )=MATRIX HOLDING THE INITIAL POT FOR ALL TRACKS/POT AREAS
  75. REM    COVF( )=MATRIX HOLDING COVERAGE FACTORS
  76. REM    APOT( )=MATRIX HOLDING THE POT'S ADJUSTED FOR POD
  77. REM    XTARGET,YTARGET=X+Y COORDINATES OF THE SECRET TARGET
  78. REM    TARGET=RANDOM NUMBER USED TO SELECT THE TARGET AND THEN USED AS MIN POD
  79. REM
  80. REM  NOTE: GRID '0,0' IS AT LOWER LEFT; GRID 'NX-1,NY-1' IS AT THE UPPER RIGHT
  81. REM    
  82. REM ************************************************************************
  83. REM
  84. REM  LOAD INITIAL DATA
  85. REM
  86.     OUT 0,184            REM COMMAND WORD TO BITPAD I/O PORT
  87.     POKE 35513,201:POKE 35501,0            REM 35K SYSTEM PATCH
  88.     PRINT CHR$(25)                    REM CLEAR SCREEN
  89.     NY=23 : NX=9 : NUMPTS=100            REM MAP SIZE
  90.     XTARGET=-1:YTARGET=-1:TPOF=1
  91.     DIM DX(NUMPTS),DY(NUMPTS)
  92.     DIM TEMP(NX-1,NY-1),IPOT(NX-1,NY-1),COVF(NX-1,NY-1),APOT(NX-1,NY-1)
  93. REM
  94. REM ****************************************************************
  95. REM
  96. REM  PROPERLY ORIENT THE MAP ,LESS THAN .15 INCH TILT ALLOWED
  97. REM
  98.     PRINT "SWITCH BITPAD TO MODE 3 AND PRESS 'CLEAR'"
  99. 105    PRINT "TOUCH PROBE TO UPPER LEFT CORNER,UPPER RIGHT,LOWER LEFT"
  100.     POKE 3,3                    REM BIT I/0 IS CONSOLE
  101.     INPUT AX,AY,Z                    REM UPPER LEFT
  102.     INPUT BX,BY,Z                    REM UPPER RIGHT
  103.     INPUT CX,CY,Z                    REM LOWER LEFT
  104.     POKE 3,129                    REM VTR IS CONSOLE
  105.     IF AX=0 THEN PRINT "TRY AGAIN":GOTO 105
  106.     IF ABS(BY-AY)>30 THEN PRINT CHR$(7);"STRAIGHTEN THE MAP":GOTO 105
  107.     PRINT "THE COORDINATES ARE ";AX/200;",";AY/200,BX/200;",";BY/200
  108.     PRINT "                     ";CX/200;",";CY/200
  109.     INPUT "OK? (Y/N)";ANS$ 
  110.     IF LEFT$(ANS$,1)<>"Y" THEN GOTO 105
  111.     TX=NX/(BX-AX) : TY=NY/(AY-CY)            REM GRID WIDTH+HEIGHT
  112. REM
  113. REM **********************************************************************
  114. REM
  115. REM  COMMAND MENUE
  116. REM
  117. 150    PRINT CHR$(25);FRE                REM CLEAR SCREEN
  118.     PRINT "CURRENT SEARCH EFFECTIVENESS=";INT(1000*(1-TPOF)+.5)/10;"%"
  119.     PRINT "YOU HAVE THE FOLLOWING OPTIONS:":PRINT
  120.     PRINT "1.ADD A NEW TRACK LINE POT";TAB(33);"4.ADD NEW POD"; \
  121.             TAB(50);"5.LIST INITIAL POT MAP"
  122.     PRINT "2.ADD A NEW GENERAL AREA POT";TAB(50);"6.LIST POD MAP"
  123.     PRINT "3.ADD AN AREA OF EMPHASIS";TAB(50);"7.LIST ADJUSTED POT MAP"
  124.     PRINT TAB(50);"8.IDENTIFY GRID POT'S":PRINT
  125.     PRINT"9.START GAME";TAB(20);"10.SAVE SCENNARIO";TAB(50);"11.QUIT GAME"
  126.         INPUT "WHICH ONE (1-11)?";COMMAND
  127.         IF COMMAND<1 OR COMMAND>11 THEN GOTO 150
  128.     ON COMMAND GOSUB 180,180,180,700,600,1000,900,1100,2000,3000,5000
  129.     GOTO 150
  130. REM
  131. REM **********************************************************************
  132. REM
  133. REM INPUT GENERAL AREA OR TRACK LINE POT
  134. REM
  135. 180    GOSUB 475                    REM ZERO TEMP( )
  136.     GOSUB 200                    REM INPUT DATA POINTS
  137.     GOSUB 300                    REM CHECK FOR OFF-MAP
  138.     GOSUB 350                    REM REM ASSIGN POT'S
  139.     IF COMMAND=2 OR COMMAND=3 THEN GOSUB 550    REM ASSIGN AREA POT'S
  140.     IF COMMAND<>3 THEN GOSUB 375 ELSE GRIDCOUNT=1    REM COUNT # OF GRIDS
  141.     GOSUB 400                    REM PRINT ROUTINE
  142.     INPUT "ARE YOU SATISFIED WITH THIS AREA/TRACK?";ANS$
  143.     IF LEFT$(ANS$,1)<>"Y" THEN GOTO 180        REM START AGAIN
  144.     PRINT "WAIT"
  145.     IF COMMAND<>3 THEN GOSUB 450 ELSE GOSUB 1200    REM LOAD IPOT( )
  146.     GOSUB 500                    REM DELPHI SCALE IPOT()
  147.     INPUT "DO YOU HAVE ANOTHER AREA/TRACK TO ADD?";ANS$
  148.     IF LEFT$(ANS$,1)="Y" THEN GOTO 180
  149.     GOSUB 800                    REM RECALCULATE APOT()
  150.    RETURN
  151. REM
  152. REM ***********************************************************************
  153. REM
  154. REM INPUT THE TRACK POT OR AREA DATA POINTS
  155. REM
  156. 200    INPUT "WHAT IS THE POT?";POT            REM IN %
  157.     PRINT "SWITCH TO MODE '1' AND RATE '4'"
  158.     PRINT "DRAW AT WRITING SPEED"            REM SWITCH STREAM MODE
  159.     POKE 3,3                    REM XFER TO BITPAD
  160.     FOR Q=1 TO NUMPTS                REM FOR ALL DATA POINTS
  161.         INPUT DX(Q),DY(Q),Z            REM INPUT FROM BITPAD
  162.     NEXT Q
  163.     POKE 3,129:PRINT CHR$(7);"WAIT"            REM 'BEEP'
  164.    RETURN
  165. REM
  166. REM ***********************************************************************
  167. REM
  168. REM  CHANGES OFF-MAP DATA POINTS TO ON-MAP POINTS AT THE BOUNDARIES
  169. REM
  170. 300    FOR Q=1 TO NUMPTS
  171.         IF DX(Q)<=AX THEN DX(Q)=AX+1        REM LEFT SIDE
  172.         IF DY(Q)<=CY THEN DY(Q)=CY+1        REM BOTTOM
  173.         IF DX(Q)>=BX THEN DX(Q)=BX-1        REM RIGHT SIDE
  174.         IF DY(Q)>=AY THEN DY(Q)=AY-1        REM TOP
  175.     NEXT Q
  176.    RETURN
  177. REM
  178. REM ***********************************************************************
  179. REM
  180. REM  ASSIGN THE POT TO A GRID IF ANY DATA POINT IS WITHIN THAT GRID
  181. REM
  182. 350    FOR Q=1 TO NUMPTS            REM FOR ALL DATA POINTS
  183.         TEMP(INT((DX(Q)-AX)*TX),INT((DY(Q)-CY)*TY))=POT
  184.     NEXT Q
  185.    RETURN
  186. REM
  187. REM ***********************************************************************
  188. REM
  189. REM THIS ROUTINE COUNTS THE # OF GRIDS AFFECTED BY THE TRACK/AREA IN ORDER
  190. REM     TO APPORTION POT TO THESE GRIDS IN THE 'XFER POT' ROUTINE
  191. REM
  192. 375    GRIDCOUNT=0                        REM RESET
  193.     FOR R=0 TO NY-1                    REM FOR ALL GRIDS
  194.         FOR S=0 TO NX-1
  195.             IF TEMP(S,R)<>0 THEN GRIDCOUNT=GRIDCOUNT+1
  196.         NEXT S
  197.     NEXT R
  198.    RETURN
  199. REM
  200. REM**********************************************************************
  201. REM
  202. REM  PRINT THE GRID POT'S ASSIGNED BY THIS TRACK
  203. REM
  204. 400    FOR R=NY-1 TO 0 STEP -1            REM PRINT FROM TOP DOWN
  205.         FOR S=0 TO NX-1                REM FOR ALL GRIDS
  206.         IF TEMP(S,R)<>0 THEN \
  207.             PRINT TAB(1+9*S);INT(10*TEMP(S,R)/GRIDCOUNT)/10;"%";\
  208.             ELSE PRINT TAB(1+9*S);"  *";
  209.         NEXT S:PRINT
  210.     NEXT R
  211.    RETURN
  212. REM
  213. REM *********************************************************************
  214. REM
  215. REM TRANSFER TEMP( ) TO IPOT( )        TEMP() HOLDS THIS-TRACK/AREA POT
  216. REM NOTE:ALL TEMP( ) ENTRIES ARE SCALED DOWN BY 'GRIDCOUNT'
  217. REM
  218. 450    FOR R=0 TO NY-1
  219.         FOR S=0 TO NX-1        REM 'SPOT' IS PRE-THIS-TRACK 'SPOT'
  220.             IPOT(S,R)=SPOT*IPOT(S,R)+TEMP(S,R)/GRIDCOUNT
  221.         NEXT S
  222.     NEXT R
  223.    RETURN
  224. REM
  225. REM *******************************************************************
  226. REM
  227. REM ZERO THE TEMP( ) MATRIX
  228. REM
  229. 475    PRINT "WAIT"
  230.     FOR R=0 TO NY-1                    REM FOR ALL GRIDS
  231.         FOR S=0 TO NX-1
  232.             TEMP(S,R)=0
  233.         NEXT S
  234.     NEXT R
  235.    RETURN
  236. REM
  237. REM ***********************************************************************
  238. REM DELPHI EVALUATION    -FOR ALL GRIDS, SUMS IPOT() THEN DIVIDES BY SUM
  239. REM
  240. 500    SPOT=0                        REM RECALCULATE SPOT
  241.     FOR R=0 TO NY-1                REM SUM ALL IPOT ENTRIES
  242.         FOR S=0 TO NX-1            REM IN THE VARIABLE 'SPOT'
  243.             SPOT=SPOT+IPOT(S,R)
  244.         NEXT S
  245.     NEXT R
  246. REM
  247. REM DELPHI SCALING ROUTINE
  248. REM
  249.     FOR R=0 TO NY-1            REM SCALE DOWN ALL IPOT ENTRIES
  250.         FOR S=0 TO NX-1                REM 0<=IPOT( )<=1.00
  251.             IPOT(S,R)=IPOT(S,R)/SPOT
  252.         NEXT S
  253.     NEXT R
  254.    RETURN
  255. REM
  256. REM **********************************************************************
  257. REM
  258. REM BILL LOWERY'S AREA POT TECHNIQUE    -FILLS AN AREA BOUNDED BY DATA POINTS
  259. REM
  260. 550    FOR S=0 TO NX-1
  261.         FIRST=-1:SECOND=-1
  262.         FOR R=0 TO NY-1
  263.             IF TEMP(S,R)=0 THEN GOTO 580
  264.             IF FIRST=-1 THEN FIRST=R:GOTO 580
  265.             SECOND=R
  266. 580        NEXT R
  267.         IF FIRST=-1 OR SECOND=-1 THEN GOTO 595
  268. 590        TEMP(S,FIRST)=POT
  269.         IF FIRST<>SECOND THEN FIRST=FIRST+1:GOTO 590
  270. 595    NEXT S
  271.    RETURN
  272. REM
  273. REM ********************************************************************
  274. REM
  275. REM PRINT THE INITIAL ALL-TRACK POT'S MATRIX
  276. REM
  277. 600 LPRINTER                        REM HARD COPY
  278.     FOR R=NY-1 TO 0 STEP -1                REM FOR ALL GRIDS
  279.         FOR S=0 TO NX-1
  280.             PRINT TAB(10+7*S);INT(1000*IPOT(S,R))/10;"%";
  281.         NEXT S:PRINT:PRINT
  282.     NEXT R
  283.     PRINT CHR$(12):CONSOLE                REM CONSOLE I/O
  284.    RETURN
  285. REM
  286. REM ************************************************************************
  287. REM
  288. REM POD INPUT ROUTINE
  289. REM
  290. REM THE FOLLOWING ROUTINE REQUIRES THE USER TO DESIGNATE BOTH THE POD AND
  291. REM GRID USING THE BITPAD IN SINGLE DATA POINT MODE. THE POD IS EQUAL TO THE
  292. REM HEIGHT OF THE DATA POINT (IN INCHES) ABOVE THE LOWER LEFT REFERENCE POINT
  293. REM TIMES 10. THIS ROUTINE IS EXITED BY POINTING TO A DATA POINT OUTSIDE THE
  294. REM UPPER OR LOWER OR RIGHT BOUNDARIES. THE POD AND GRID MAY BE DESIGNATED IN
  295. REM EITHER ORDER.
  296. REM
  297. 700    PRINT:PRINT "TOUCH GRID+POD,MODE 3"
  298.     POD=-1 : X1=-1
  299. 710    POKE 3,3                        REM BITPAD I/O
  300.     INPUT X,Y,Z                        REM DATA POINT
  301.     POKE 3,129                        REM CONSOLE I/O
  302.     IF X>BX OR Y<CY OR Y>AY THEN GOTO 800            REM EXIT
  303.     IF X<AX THEN POD=(Y-CY)/20 ELSE X1=INT((X-AX)*TX):Y1=INT((Y-CY)*TY)
  304.     IF POD<0 OR X1<0 THEN GOTO 710            REM NEED BOTH
  305.         COVF(X1,Y1)=COVF(X1,Y1)+LOG(1-POD/100)
  306.         PRINT CHR$(7);"GRID";X1+1;",";Y1+1;"WITH POD=";POD;"%" 
  307. REM GAME ROUTINE FOLLOWS
  308.         NUMSORTIE=NUMSORTIE+1            REM COUNT SORTIES
  309.     IF X1<>XTARGET OR Y1<>YTARGET THEN GOTO 700    REM ON TARGET?
  310.     IF TARGET>(1-EXP(COVF(X1,Y1))) THEN GOTO 700    REM POD BIG ENOUGH?
  311.         PRINT "YOU FOUND HIM !!!! ON THE NUMBER";NUMSORTIE;"SORTIE"
  312.         FOR X=1 TO 200 : PRINT CHR$(7); : NEXT X:PRINT
  313.         GOTO 800
  314. REM
  315. REM **************************************************************************
  316. REM
  317. REM POT ADJUSTMENT ROUTINE
  318. REM
  319. 800    TPOF=0 : PRINT "WAIT"
  320.     FOR R=0 TO NY-1                    REM FOR ALL GRIDS
  321.         FOR S=0 TO NX-1
  322.             TPOF=TPOF+IPOT(S,R)*EXP(COVF(S,R))    REM RECALC TPOF
  323.         NEXT S
  324.     NEXT R
  325. REM
  326.     FOR R=0 TO NY-1                    REM FOR ALL GRIDS
  327.         FOR S=0 TO NX-1
  328.             APOT(S,R)=IPOT(S,R)*EXP(COVF(S,R))/TPOF
  329.         NEXT S
  330.     NEXT R
  331.    RETURN
  332. REM
  333. REM *************************************************************************
  334. REM
  335. REM ADJUSTED POT OUTPUT ROUTINE
  336. REM
  337. 900 LPRINTER                            REM HARD COPY
  338.     FOR R=NY-1 TO 0 STEP -1                REM FOR ALL GRIDS
  339.         FOR S=0 TO NX-1
  340.             PRINT TAB(10+7*S);INT(1000*APOT(S,R)+.5)/10;"%";
  341.         NEXT S : PRINT:PRINT
  342.     NEXT R
  343.    PRINT CHR$(12):CONSOLE                REM CONSOLE I/O
  344.    RETURN
  345. REM
  346. REM *************************************************************************
  347. REM
  348. REM POD OUTPUT ROUTINE
  349. REM
  350. 1000 LPRINTER                            REM HARD COPY
  351.     FOR R=NY-1 TO 0 STEP -1                REM FOR ALL GRIDS
  352.         FOR S=0 TO NX-1
  353.             PRINT TAB(10+7*S);INT(100*(1-EXP(COVF(S,R)))+.5);"%";
  354.         NEXT S : PRINT:PRINT
  355.     NEXT R
  356.    PRINT CHR$(12):CONSOLE                REM CONSOLE I/O
  357.    RETURN
  358. REM
  359. REM *************************************************************************
  360. REM
  361. REM ROUTINE TO IDENTIFY GRID COMPOSITE POT'S
  362. REM IF OFF-MAP POINT IS IDENTIFIED, ROUTINE RETURNS TO COMMAND MENUE
  363. REM
  364. 1100    PRINT "SWITCH TO MODE 3"
  365. 1105    PRINT:PRINT "TOUCH THE PROBE TO ANY GRID"
  366.     POKE 3,3                    REM BITPAD I/O
  367.     INPUT X,Y,Z                    REM DATA POINT
  368.     POKE 3,129                    REM CONSOLE I/O
  369.     PRINT CHR$(7)
  370.     IF X<AX OR X>BX OR Y<CY OR Y>AY THEN RETURN        REM ONLY EXIT
  371.     X=INT((X-AX)*TX) : Y=INT((Y-CY)*TY)            REM WHAT GRID?
  372.     PRINT "FOR GRID";X+1;",";Y+1
  373.     PRINT "THE INITIAL POT WAS";INT(1000*IPOT(X,Y))/10;"%"
  374.     PRINT "THE TOTAL POD IS";INT(100*(1-EXP(COVF(X,Y)))+.5);"%"
  375.     PRINT "THE COMPOSITE POT IS";INT(1000*APOT(X,Y)+.5)/10;"%"
  376.     PRINT : GOTO 1105                    REM AGAIN
  377.    RETURN
  378. REM
  379. REM ************************************************************************
  380. REM
  381. REM ROUTINE TO INCREASE IPOT( ) IN AN AREA OF EMPHASIS
  382. REM POT IS A MULTIPLIER IN THIS ROUTINE
  383. REM
  384. 1200    FOR R=0 TO NY-1                    REM FOR ALL GRIDS
  385.         FOR S=0 TO NX-1
  386.             IPOT(S,R)=IPOT(S,R)*(1+TEMP(S,R)/100)
  387.         NEXT S
  388.     NEXT R
  389.    RETURN
  390. REM
  391. REM *************************************************************************
  392. REM
  393. REM ROUTINE TO RETRIEVE GAME SCENNARIO FROM DISC FILE
  394. REM
  395. 2000    INPUT "WHAT IS THE NAME OF YOUR EXERCISE?";ANS$
  396.     RANDOMIZE
  397.     ANS$=LEFT$(ANS$,8)+".GME"
  398.     FILE ANS$                    REM SEQUENTIAL FILE
  399.     IF END #1 THEN 2080                REM NO SUCH FILE
  400.     TARGET=RND : TOTAL=0
  401.     FOR R=0 TO NY-1
  402.         FOR S=0 TO NX-1
  403.         READ #1;TEMP(S,R)
  404.         NEXT S
  405.     NEXT R
  406.     PRINT "WAIT"
  407.     FOR R=0 TO NY-1
  408.         FOR S=0 TO NX-1
  409.         TOTAL=TOTAL + TEMP(S,R)
  410. REM            IF TEMP(S,R)<>0 THEN PRINT "GRID=";S+1;",";R+1;\
  411. REM            " VALUE=";INT(100*TEMP(S,R));\
  412. REM            " TARGET=";INT(100*TARGET);" TOTAL=";INT(100*TOTAL)
  413.         IF TOTAL>TARGET THEN XTARGET=S:YTARGET=R:TARGET=2
  414.         NEXT S
  415.     NEXT R
  416.     TARGET=RND
  417. IF TARGET>.6 THEN TARGET =.4+.2*TARGET            REM MAKES IT EASY
  418. REM        PRINT"THE TARGET IS GRID";XTARGET+1;",";YTARGET+1;\
  419. REM        "AND THE MIN POD IS";INT(100*TARGET);"%"
  420. GOTO 2099
  421. 2080 PRINT "SOMETHING WRONG HERE"
  422. 2099 CLOSE (1) : RETURN
  423. REM
  424. REM *************************************************************************
  425. REM
  426. REM ROUTINE TO SAVE IPOT( ) AS A GAME
  427. REM
  428. 3000    INPUT "WHAT NAME DO YOU WANT TO GIVE THIS SCENNARIO (8 CHAR MAX)?";ANS$
  429.     ANS$=LEFT$(ANS$,8)+".GME"
  430.     FILE ANS$
  431.     IF END #1 THEN 3099
  432.     FOR R=0 TO NY-1
  433.         FOR S=0 TO NX-1
  434.         PRINT #1;IPOT(S,R)
  435.         NEXT S
  436.     NEXT R
  437. 3099    CLOSE (1) :RETURN
  438. REM *************************************************************************
  439. REM
  440. REM QUIT GAME ROUTINE
  441. REM
  442. 5000 PRINT:PRINT
  443.      PRINT"YOU QUIT AFTER";NUMSORTIE;"SORTIES WITH A SEARCH EFFECTIVENESS OF";\
  444.                     INT(1000*(1-TPOF)+.5)/10;"%"
  445.      PRINT"THE TARGET WAS IN GRID (";XTARGET+1;",";YTARGET+1;") YOU DINGALING"
  446.     PRINT"A COMPOSITE GRID POD OF";INT(100*TARGET);"% WOULD HAVE FOUND HIM"
  447.     INPUT "DO YOU STILL WANT TO QUIT?";ANS$
  448.     IF LEFT$(ANS$,1)<>"Y" THEN RETURN
  449. END 
  450. REM
  451. GENERAL PROCEDURE TO USE THIS PROGRAM:
  452.  
  453. 1.    TAPE A REGULARLY GRIDDED MAP ONTO THE BITPAD
  454.  
  455. 2.    WHEN REQUESTED, SWITCH THE BITPAD TO MODE '3' AND TOUCH THE STYLUS TO
  456. THE UPPER LEFT, UPPER RIGHT, AND THEN LOWER LEFT CORNERS OF THE MAP (IN THAT
  457. ORDER). YOU WILL BE INFORMED IF THE MAP NEEDS STRAIGHTENING.
  458.  
  459. 3.    SELECT OPTION '1' (TRACK LINE). AFTER ENTERING THE ESTIMATED POT
  460. (PROBABILITY OF THE TARGET) ON THE CONSOLE, SELECT MODE '1' ON THE BITPAD
  461. AND THEN TRACE THE TRACKLINE ON THE MAP. HOLD THE PEN DOWN UNTIL THE CONSOLE
  462. BEEPS.  IF NECESSARY, RETRACE THE TRACKLINE.
  463.  
  464. 4.    SELECT OPTION '2' (GENERAL AREA). FOR THIS OPTION YOU MAY ELECT TO
  465. EITHER OUTLINE THE BOUNDARIES OF THE AREA (AND RELY ON THE PROGRAM TO CENTER
  466. FILL) OR PUT A DATA POINT IN EVERY GRID.  YOU SHOULD AVOID VERY IRREGULAR
  467. AREAS. EITHER SUBDIVIDE THESE AREAS AND ENTER THEM SEPARATELY OR USE OPTION '1'
  468. (WHICH DOES NOT CENTER FILL) AND PUT A DATA POINT IN EVERY AFFECTED GRID. ONCE
  469. AGAIN THE CONSOLE WILL BEEP AFTER 100 DATA POINTS ARE ENTERED.
  470.  
  471. 5.    SELECT OPTION '3' (AREA OF EMPHASIS) - IN MODE '1' TRACE AN AREA'S
  472. BOUNDARIES. THIS OPTION IS INTENDED TO BE USED FOR INCREASING THE POT OF A 
  473. PORTION OF A TRACK LINE WHERE THE TRACK LINE CROSSES MOUNTAINS OR A STORM
  474. FRONT. A TYPICAL POT FOR THIS OPTION IS 200% TO 500%. THIS ENTRY IS A 
  475. MULTIPLIER FOR THE EXISTING GRID POT'S AND SHOULD ONLY BE USED AFTER ALL
  476. TRACKS/GENERAL AREAS HAVE BEEN ENTERED. THINK OF IT AS AN AREA OF INCREASED
  477. DANGER.
  478.  
  479. 6.    SELECT OPTION '4' (ADD NEW POD). THIS OPTION IS USED TO ENTER ACTUAL
  480. SEARCH RESULTS IE. POD(PROBABILITY OF DETECTION). WHEN AN AREA IS SEARCHED, THE
  481. PROBABILITY THAT THE UNDISCOVERED TARGET STILL IS IN THAT AREA, DECREASES.
  482. SIMILIARLY, THE PROBABILITY THAT THE TARGET IS ELSEWHERE (IN A DIFFERENT GRID),
  483. INCREASES. THEREFORE THE POD IS USED TO MODIFY THE INITIAL POT AND CREATE
  484. THE ADJUSTED POT MATRIX.
  485.     THE USER SHOULD SWITCH THE BITPAD TO MODE '3' AND POINT TO THE POD
  486. (ON THE LEFT SIDE OF THE MAP) AND THEN TO THE PARTICULAR GRID. THE CONSOLE WILL
  487. BEEP TO INDICATE THAT A POD/GRID PAIR HAS BEEN ENTERED. TO EXIT THIS ROUTINE,
  488. POINT TO A LOCATION THAT IS ABOVE, BELOW OR TO THE RIGHT OF THE MAP.
  489.  
  490. 7.    SELECT OPTION '5' OR '6' OR'7' - THESE OPTIONS CAUSE HARD COPY OUTPUT
  491. OF THE "INITIAL POT MAP","POD MAP" OR "COMPOSITE ADJUSTED POT MAP" RESPECTIVELY
  492. THE COMPOSITE ADJUSTED POT MAP IS DERIVED FROM THE INITIAL POT MAP WITH
  493. ADJUSTMENTS FOR POD'S.
  494.  
  495. 8.    SELECT OPTION '8' - THIS OPTION CAUSES THE POD AND INITIAL/COMPOSITE
  496. POT'S FOR THE GRID INDICATED, TO BE LISTED ON THE CONSOLE SCREEN. TO EXIT
  497. THIS ROUTINE, POINT TO AN AREA OUTSIDE THE MAP BOUNDARIES. GRID (1,1) IS AT
  498. THE LOWER LEFT.
  499.  
  500. 9.    GENERAL COMMENTS -THIS PROGRAM WORKS BEST IF THE TRACKS/AREAS HAVE BEEN
  501. PRE-SKETCHED ON THE MAP.  IT IS SOMETIMES POSSIBLE TO CANCEL A POT TRACK LINE/
  502. AREA BY ENTERING A NEGATIVE POT AND THE SAME TRACK AS BEFORE. HOWEVER, STRANGE
  503. THINGS WILL HAPPEN IF THE EXACT TRACK IS NOT FOLLOWED.
  504.     IN BITPAD MODE '1' (SWITCH STREAM) DATA RATES 1 THROUGH 5 ARE AVAILABLE
  505. THIS CORRESPONDS TO 1,2,4,8, OR 16 DATA POINTS PER SECOND. ALTERNATELY 120,60,
  506. 30,15 OR 8 SECONDS FOR 100 DATA POINTS. RATE '4' (16 SECONDS PER TRACK) SEEMS
  507. TO WORK BEST FOR TRACKS 5 TO 10 INCHES LONG.
  508.