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 / BITCASP.BAS < prev    next >
BASIC Source File  |  1984-04-29  |  18KB  |  451 lines

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