10 LOCATE 1,1,0 20 SCREEN 0,0,0 30 WIDTH 80 40 COLOR 7,0 50 ON KEY(1) GOSUB 150:KEY(1) ON 60 ON KEY(2) GOSUB 150:KEY(2) ON 70 ON KEY(3) GOSUB 150:KEY(3) ON 80 ON KEY(4) GOSUB 150:KEY(4) ON 90 ON KEY(5) GOSUB 150:KEY(5) ON 100 ON KEY(6) GOSUB 150:KEY(6) ON 110 ON KEY(7) GOSUB 150:KEY(7) ON 120 ON KEY(8) GOSUB 150:KEY(8) ON 130 ON KEY(9) GOSUB 150:KEY(9) ON 140 ON KEY(10) GOSUB 150:KEY(10) ON:GOTO 160 150 RETURN 160 KEY OFF 170 CLS:GOTO 270 180 OPEN "blkbx1" AS 1 LEN=128 190 OPEN "blkbx1" AS 2 LEN=128 200 FIELD 1,100 AS Q$ 210 FIELD 2,2 AS Q$(1) 220 LSET Q$="record to initialize the file" 230 LSET Q$(1)=MKI$(-1) 240 PUT 1,2 250 PUT 2,1 260 CLOSE:RETURN 270 PRINT TAB(25) "BLACK BOX" 280 PRINT :PRINT TAB(5) "A PROGRAM CREATED BY:" 290 PRINT TAB(20) "David W. Gulliksen" 300 PRINT TAB(20) "290 Allyndale Drive" 310 PRINT TAB(20) "Stratford, Conn. 06497" 320 PRINT TAB(20) "Copyright: March 30, 1982" 330 LOCATE 15,10,0,11,12:PRINT "Press any key to start the game." 340 STRT$=INKEY$:IF STRT$="" THEN 340 350 DIM C(17) 360 BL$=" " 370 CLS 380 LOCATE 10,10,0 390 PRINT "Do you need instructions (Y/N)?"; 400 B$=INKEY$: IF B$="" THEN 400 410 IF B$="y" OR B$="Y" OR B$="n" OR B$="N" THEN 420 ELSE 400 420 IF B$="y" OR B$="Y" THEN GOSUB 1080 430 CLS 440 LOCATE 10,10,0 450 RANDOMIZE 460 CLS 470 LOCATE 10,10,0 480 PRINT "How many rocks do want you the computer to hide (0-9)?" 490 PRINT :PRINT TAB(17) "(Pressing `X' will end the game.) 500 B$=INKEY$:IF B$="" THEN 500 510 IF B$="0" THEN 8000 520 IF B$="X" OR B$="x" THEN LOCATE ,,1,11,12:CLS:CHAIN "MENU.BAS" 530 IF ASC(B$)>48 AND ASC(B$)<58 THEN 540 ELSE 500 540 CLS:B=VAL(B$):F=B 550 WHILE B>0 560 ROW=INT(RND*8+1) 570 COL=INT(RND*8+1) 580 IF B(ROW,COL)=-1 THEN 560 590 B(ROW,COL)=-1 600 B=B-1 610 WEND 620 RESTORE 630 FOR COL=1 TO 8 640 B(0,COL)=33-COL 650 B(9,COL)=8+COL 660 NEXT COL 670 FOR ROW=1 TO 8 680 B(ROW,0)=ROW 690 B(ROW,9)=25-ROW 700 NEXT ROW 710 FOR I=1 TO 17 720 READ C(I) 730 NEXT I 740 DATA 64,35,36,37,42,43,157,155,232,247,4,14,234,251,21,240,206 750 GUESS=0 760 LOCATE 3,29,0 770 PRINT "32 31 30 29 28 27 26 25" 780 FOR I=1 TO 8 790 READ A$ 800 PRINT TAB(26) A$; 810 READ A$ 820 PRINT TAB(54) A$ 830 NEXT I 840 DATA "01","24","02","23","03","22","04","21","05","20","06","19","07", "18","08","17" 850 PRINT TAB(29) "09 10 11 12 13 14 15 16" 860 IF CRE=2 THEN RETURN 870 LOCATE 7,1 880 COLOR 7,1 890 IF F=1 THEN 900 ELSE PRINT F;"Rocks are hidden.":GOTO 910 900 PRINT F;"Rock is hidden." 910 LOCATE 15,1 920 PRINT TAB(20) "A. Review instructions. "; 930 PRINT TAB(20) "B. Place a rock on the screen. "; 940 PRINT TAB(20) "C. Remove a rock from the screen. "; 950 PRINT TAB(20) "D. Trace a path on the screen. "; 960 PRINT TAB(20) "E. Ask for a clue. "; 970 PRINT TAB(20) "F. Enter the screen display as your solution. "; 980 PRINT TAB(20) "G. Ask for the solution. "; 990 PRINT TAB(80) 1000 PRINT TAB(20) "Please type the letter of the function you want: "; 1010 B$=INKEY$:IF B$="" THEN 1010 1020 IF ASC(B$)<65 OR (ASC(B$)>71 AND ASC(B$)<97) OR ASC(B$)>103 THEN 1010 1030 IF ASC(B$)<97 THEN 1060 1040 ON (ASC(B$)-96) GOSUB 1080,2420,3130,3450,5340,7310,7690 1050 GOTO 910 1060 ON (ASC(B$)-64) GOSUB 1080,2420,3130,3450,5340,7310,7690 1070 GOTO 910 1080 IF SCREEN(3,29)<>51 THEN CLS ELSE GOSUB 15030 1090 LOCATE 25,1 1100 PRINT "Press the space bar to continue or `X' to end instructions."; 1110 LOCATE 1,1 1120 PRINT TAB(30) "BLACK BOX INSTRUCTIONS" 1130 RESTORE 840 1140 LOCATE 3,29 1150 PRINT "32 31 30 29 28 27 26 25" 1160 FOR I=1 TO 8 1170 READ A$ 1180 LOCATE I+3,26:PRINT A$; 1190 READ A$ 1200 PRINT TAB(54) A$ 1210 NEXT I 1220 PRINT TAB(29) "09 10 11 12 13 14 15 16" 1230 LOCATE 15,1 1240 PRINT " Black Box is a game of deduction. The computer hides a number of rocks (";CHR$(2);") on the grid above and your task is to find them." 1250 PRINT " This is done by asking the computer for `clues'. The clue must be for a number 1 through 32. The computer replies with an answer, which may be `HIT!', `Reflection!' or another number. 1260 PRINT " The computer arrives at an answer by sending an X-ray into the grid from the number you call, and by virtue of the way the ray behaves in the grid, the answer is deduced." 1270 B$=INKEY$:IF B$<>" " AND B$<>"x" AND B$<>"X" THEN 1270 1280 IF B$<>" " THEN 2290 1290 GOSUB 15030 1300 LOCATE 15,1 1310 PRINT " A ray will always go straight unless `deflected' from a rock." 1320 LOCATE 4,35 1330 PRINT "(";CHR$(2);")" 1340 LOCATE 4,47 1350 PRINT "(";CHR$(2);")" 1360 LOCATE 5,29 1370 FOR I=1 TO 4 1380 PRINT "Ä";:FOR J=1 TO 100:NEXT J 1390 NEXT I 1400 PRINT "¿" 1410 FOR I=6 TO 11 1420 LOCATE I,33 1430 PRINT "³" 1440 FOR J=1 TO 300:NEXT J 1450 NEXT I 1460 FOR I=11 TO 6 STEP -1 1470 LOCATE I,39 1480 PRINT "³" 1490 FOR J=1 TO 300:NEXT J 1500 NEXT I 1510 LOCATE 5,39:PRINT "Ú" 1520 FOR I=40 TO 44 1530 LOCATE 5,I 1540 PRINT "Ä"; 1550 FOR J=1 TO 100:NEXT J 1560 NEXT I 1570 PRINT "¿" 1580 FOR I=6 TO 11 1590 LOCATE I,45 1600 PRINT "³" 1610 FOR J=1 TO 300:NEXT J 1620 NEXT I 1630 LOCATE 16,1 1640 PRINT " This will happen because a ray is not permitted to pass by a rock in the adjacent row or column. When this would occur, the ray deflects away at right" 1650 PRINT "angles to its previous path and away from the rock (#02,#10)." 1660 PRINT " This may involve only one rock, or a series of rocks to cause the ray to exit at virtually any location, depending on the rocks' positions (#12,#14)." 1670 B$=INKEY$:IF B$<>" " AND B$<>"x" AND B$<>"X" THEN 1670 1680 IF B$<>" " THEN 2290 1690 GOSUB 15030:GOSUB 15080 1700 LOCATE 15,1 1710 PRINT " A `HIT!' may occur in one of two ways:" 1720 LOCATE 6,50 1730 PRINT "(";CHR$(2);")" 1740 LOCATE 6,29 1750 FOR I=1 TO 20 1760 PRINT "Ä"; 1770 FOR J=1 TO 100:NEXT J 1780 NEXT I 1790 PRINT "*" 1800 LOCATE 16,1 1810 PRINT " a: A ray may come from a number and hit a rock head on (#03)." 1820 PRINT " b: A ray may not be able to enter onto the board because a rock is in the way (#22)." 1830 B$=INKEY$:IF B$<>" " AND B$<>"x" AND B$<>"X" THEN 1830 1840 IF B$<>" " THEN 2290 1850 GOSUB 15030:GOSUB 15080 1860 LOCATE 15,1 1870 PRINT " A `Reflection!' also may occur in one of two ways:" 1880 LOCATE 8,50 1890 PRINT "(";CHR$(2);")" 1900 LOCATE 7,29 1910 FOR I=1 TO 20 1920 PRINT "Ä"; 1930 FOR J=1 TO 100:NEXT J 1940 NEXT I 1950 PRINT "µ" 1960 FOR I=48 TO 29 STEP -1 1970 LOCATE 7,I 1980 PRINT "Í" 1990 FOR J=1 TO 100:NEXT J 2000 NEXT I 2010 LOCATE 16,1 2020 PRINT " a: A ray may come to two rocks situated such that it cannot pass between them or veer away because it would pass next to one of them."; 2030 PRINT " In such a case the ray must backtrack to its source (#04)." 2040 PRINT " b: A ray may not be able to enter onto the board because it would be passing next to a rock(#23,#21,#19)." 2050 PRINT :PRINT " NOTE: A `HIT!' always takes precedence over a `Reflection!' or a deflection in such cases where more than one have their rules satisfied." 2060 B$=INKEY$:IF B$<>" " AND B$<>"x" AND B$<>"X" THEN 2060 2070 IF B$<>" " THEN 2290 2080 GOSUB 15030:GOSUB 15080 2090 LOCATE 15,1 2100 PRINT " You may use the screen above while playing the game to display rocks in any location, without it being `fixed', and you may change their positions on" 2110 PRINT "the screen. This does NOT affect the actual solution. You can use the `Trace' option to show you the way a ray would travel if the rocks were placed as they are on the screen." 2120 PRINT " When you are satisfied that the rocks as you have them displayed on the screen are correct, you may enter the screen as a proposed solution and the computer will tell you whether the display matches the hidden rocks'" 2130 PRINT "positions." 2140 B$=INKEY$:IF B$<>" " AND B$<>"x" AND B$<>"X" THEN 2140 2150 IF B$<>" " THEN 2290 2160 GOSUB 15030 2170 LOCATE 15,1 2180 PRINT " Your scoring potential increases as you ask for larger numbers of rocks, but the chances of unsolvable combinations also increases. 5 is the recommended number." 2190 PRINT " Your score decreases as you ask for more clues or give an incorrect guess of the solution. A score of 100 or more is very good." 2200 B$=INKEY$:IF B$<>" " AND B$<>"x" AND B$<>"X" THEN 2200 2210 IF B$<>" " THEN 2290 2220 GOSUB 15030 2230 LOCATE 15,1 2240 PRINT " After you have gained some experience in playing the game, you may want to try setting up some of your own layouts. These can be saved for later" 2250 PRINT "solution, or entered immediately in place of the computer's setup, for solution by a second player. You do this by entering zero when the computer asks you how many rocks you want hidden." 2260 PRINT :PRINT TAB(30) "GOOD HUNTING!" 2270 B$=INKEY$:IF B$<>" " AND B$<>"x" AND B$<>"X" THEN 2270 2280 IF B$<>" " THEN 2290 2290 LOCATE 25,1 2300 PRINT " "; 2310 LOCATE 1,30 2320 PRINT " " 2330 FOR I=4 TO 11 2340 FOR J=30 TO 51 STEP 3 2350 LOCATE I,J-1 2360 IF S(I-3,J/3-9)=-1 THEN PRINT "(";CHR$(2);")" ELSE PRINT " " 2370 NEXT J 2380 NEXT I 2390 GOSUB 15030 2400 RESTORE 2410 RETURN 2420 GOSUB 15030 2430 LOCATE 15,1 2440 PRINT TAB(20) "Putting a rock on the screen" 2450 PRINT :PRINT 2460 PRINT TAB(10) "Use the directional keys at right to move the marker "; 2470 COLOR 15,0 2480 PRINT CHR$(2) 2490 COLOR 7,0 2500 PRINT TAB(10) "to the position where you want a rock placed, then press `Enter'." 2510 COLOR 15,0 2520 LOCATE 4,30 2530 PRINT CHR$(2) 2540 LOCATE 4,30 2550 ON KEY(11) GOSUB 2730 2560 ON KEY(14) GOSUB 2830 2570 ON KEY(13) GOSUB 2930 2580 ON KEY(12) GOSUB 3030 2590 KEY(11) ON 2600 KEY(12) ON 2610 KEY(13) ON 2620 KEY(14) ON 2630 MOVE$=INKEY$:IF MOVE$<>CHR$(13) THEN 2630 2640 LOCATE CSRLIN,POS(0)-1 2645 IF S(CSRLIN-3,(POS(0)-26)/3)=-1 THEN PREV=1 ELSE PREV=0 2650 S(CSRLIN-3,(POS(0)-26)/3)=-1 2660 COLOR 7,0 2670 PRINT CHR$(40);CHR$(2);CHR$(41) 2671 IF SCREEN(8,1)=68 AND PREV=0 THEN LOCATE 8,1:PRINT "Displayed: None" 2672 PREV=0 2680 KEY(11) OFF 2690 KEY(12) OFF 2700 KEY(13) OFF 2710 KEY(14) OFF 2720 RETURN 2730 IF CSRLIN=4 THEN RETURN 2740 IF S(CSRLIN-3,(POS(0)-27)/3)=0 THEN 2750 ELSE 2760 2750 PRINT " ";:GOTO 2790 2760 COLOR 7,0 2770 PRINT CHR$(2); 2780 COLOR 15,0 2790 LOCATE CSRLIN-1,POS(0)-1 2800 PRINT CHR$(2); 2810 LOCATE CSRLIN,POS(0)-1 2820 RETURN 2830 IF CSRLIN=11 THEN RETURN 2840 IF S(CSRLIN-3,(POS(0)-27)/3)=0 THEN 2850 ELSE 2860 2850 PRINT " ";:GOTO 2890 2860 COLOR 7,0 2870 PRINT CHR$(2); 2880 COLOR 15,0 2890 LOCATE CSRLIN+1,POS(0)-1 2900 PRINT CHR$(2); 2910 LOCATE CSRLIN,POS(0)-1 2920 RETURN 2930 IF POS(0)=51 THEN RETURN 2940 IF S(CSRLIN-3,(POS(0)-27)/3)=0 THEN 2950 ELSE 2960 2950 PRINT " ";:GOTO 2990 2960 COLOR 7,0 2970 PRINT CHR$(2); 2980 COLOR 15,0 2990 LOCATE CSRLIN,POS(0)+2 3000 PRINT CHR$(2); 3010 LOCATE CSRLIN,POS(0)-1 3020 RETURN 3030 IF POS(0)=30 THEN RETURN 3040 IF S(CSRLIN-3,(POS(0)-27)/3)=0 THEN 3050 ELSE 3060 3050 PRINT " ";:GOTO 3090 3060 COLOR 7,0 3070 PRINT CHR$(2); 3080 COLOR 15,0 3090 LOCATE CSRLIN,POS(0)-4 3100 PRINT CHR$(2); 3110 LOCATE CSRLIN,POS(0)-1 3120 RETURN 3130 GOSUB 15030 3140 LOCATE 15,1 3150 PRINT TAB(20) "Removing a rock from the screen" 3160 PRINT :PRINT 3170 PRINT TAB(10) "Use the directional keys at right to move the marker "; 3180 COLOR 15,0 3190 PRINT CHR$(2) 3200 COLOR 7,0 3210 PRINT TAB(10) "to the position from where you want a rock removed," 3220 PRINT TAB(10) "then press `Enter'." 3230 COLOR 15,0 3240 LOCATE 4,30 3250 PRINT CHR$(2) 3260 LOCATE 4,30 3270 ON KEY(11) GOSUB 2730 3280 ON KEY(14) GOSUB 2830 3290 ON KEY(13) GOSUB 2930 3300 ON KEY(12) GOSUB 3030 3310 KEY(11) ON 3320 KEY(12) ON 3330 KEY(13) ON 3340 KEY(14) ON 3350 MOVE$=INKEY$:IF MOVE$<>CHR$(13) THEN 3350 3360 LOCATE CSRLIN,POS(0)-1 3365 IF S(CSRLIN-3,(POS(0)-26)/3)=0 THEN PREV=1 ELSE PREV=0 3370 S(CSRLIN-3,(POS(0)-26)/3)=0 3380 COLOR 7,0 3390 PRINT CHR$(0);CHR$(0);CHR$(0) 3391 IF SCREEN(8,1)=68 AND PREV=0 THEN LOCATE 8,1:PRINT "Displayed: None" 3392 PREV=0 3400 KEY(11) OFF 3410 KEY(12) OFF 3420 KEY(13) OFF 3430 KEY(14) OFF 3440 RETURN 3450 GOSUB 15030 3460 LOCATE 15,20 3470 PRINT "Trace a path on the screen:" 3480 PRINT :PRINT 3490 PRINT "What number would you like to see traced (01-32)?"; 3500 B$=INKEY$:IF B$="" THEN 3500 3510 IF ASC(B$)<48 OR ASC(B$)>51 THEN 3500 3520 C$=B$ 3530 PRINT C$; 3540 B$=INKEY$:IF B$="" THEN 3540 3550 IF ASC(B$)<48 OR ASC(B$)>57 THEN 3540 3560 IF C$="3" AND ASC(B$)>50 THEN 3540 3570 C$=C$+B$ 3580 P=VAL(C$) 3590 PRINT B$ 3600 'ENTER ROUTINE: 3610 'ENTER RIGHT: 3620 IF P>8 THEN 3700 3630 IF S(P,1)<>-1 THEN 3660 3640 PRINT :PRINT TAB(20) "HIT! Ray can't enter board." 3650 GOTO 5240 3660 IF S(P-1,1)<>-1 AND S(P+1,1)<>-1 THEN LOCATE P+3,27:GOTO 3920 3670 PRINT :PRINT TAB(20) "Reflection! Ray can't enter board." 3680 GOTO 5240 3690 'ENTER UP 3700 IF P>16 THEN 3780 3710 IF S(8,P-8)<>-1 THEN 3740 3720 PRINT:PRINT TAB(20) "HIT! Ray can't enter board." 3730 GOTO 5240 3740 IF S(8,P-7)<>-1 AND S(8,P-9)<>-1 THEN LOCATE 12,P*3+3:GOTO 4250 3750 PRINT :PRINT TAB(20) "Reflection! Ray can't enter board." 3760 GOTO 5240 3770 'ENTER LEFT 3780 IF P>24 THEN 3860 3790 IF S(25-P,8)<>-1 THEN 3820 3800 PRINT :PRINT TAB(20) "HIT! Ray can't enter board." 3810 GOTO 5240 3820 IF S(24-P,8)<>-1 AND S(26-P,8)<>-1 THEN LOCATE 28-P,54:GOTO 4580 3830 PRINT :PRINT TAB(20) "Reflection! Ray can't enter board." 3840 GOTO 5240 3850 'ENTER DOWN 3860 IF S(1,33-P)<>-1 THEN 3890 3870 PRINT :PRINT TAB(20) "HIT! Ray can't enter board." 3880 GOTO 5240 3890 IF S(1,32-P)<>-1 AND S(1,34-P)<>-1 THEN LOCATE 3,126-P*3:GOTO 4910 3900 PRINT :PRINT TAB(20) "Reflection! Ray can't enter board." 3910 GOTO 5240 3920 'HEADING RIGHT 3930 LOCATE ,POS(0)+2 3940 IF SCREEN(CSRLIN,POS(0)+1)>178 THEN 4190 3950 IF POS(0)=53 THEN 4130 3960 IF SCREEN(CSRLIN,POS(0)+4)<>2 THEN 4010 3970 PRINT "ÄÄ*" 3980 LOCATE 20,20 3990 PRINT "HIT!" 4000 GOTO 5240 4010 IF SCREEN(CSRLIN+1,POS(0)+4)<>2 OR SCREEN(CSRLIN-1,POS(0)+4)<>2 THEN 4080 4020 PRINT "Í͵"; 4030 ROW=CSRLIN:COL=POS(0)-2 4040 LOCATE 20,20 4050 PRINT "Reflection!" 4060 LOCATE ROW,COL 4070 GOTO 4580 4080 IF SCREEN(CSRLIN+1,POS(0)+4)=2 THEN PRINT "ÄÙ ";:LOCATE ,POS(0)-2:GOTO 4250 4090 IF SCREEN(CSRLIN-1,POS(0)+4)=2 THEN PRINT "Ä¿ ";:LOCATE ,POS(0)-2:GOTO 4910 4100 PRINT "ÄÄÄ"; 4110 LOCATE ,POS(0)-2 4120 GOTO 3920 4130 ROW=CSRLIN 4140 LOCATE 20,20 4150 IF SCREEN(20,20)>32 THEN 5240 4160 PRINT "Ray ends at position #"; 4170 PRINT CHR$(SCREEN(ROW,54));CHR$(SCREEN(ROW,55)) 4180 GOTO 5240 4190 IF SCREEN(CSRLIN,POS(0)+1)=196 THEN PRINT "ÍÍÍ";:LOCATE ,POS(0)-2:GOTO 3920 4200 IF SCREEN(CSRLIN,POS(0)+1)=179 THEN PRINT "ÄÅÄ";:LOCATE ,POS(0)-2:GOTO 3920 4210 IF SCREEN(CSRLIN,POS(0)+1)=215 THEN PRINT "ÍÎÍ";:LOCATE ,POS(0)-2:GOTO 3920 4220 IF SCREEN(CSRLIN,POS(0)+1)=197 THEN PRINT "ÍØÍ";:LOCATE ,POS(0)-2:GOTO 3920 4230 IF SCREEN(CSRLIN,POS(0)+1)=217 THEN PRINT "ͼ ";:LOCATE ,POS(0)-2:GOTO 4250 4240 IF SCREEN(CSRLIN,POS(0)+1)=191 THEN PRINT "Í» ";:LOCATE ,POS(0)-2:GOTO 4910 4250 'HEADING UP 4260 LOCATE CSRLIN-1,POS(0)-1 4270 IF SCREEN(CSRLIN,POS(0)+1)>178 THEN 4520 4280 IF CSRLIN=3 THEN 4460 4290 IF SCREEN(CSRLIN-1,POS(0)+1)<>2 THEN 4340 4300 PRINT " ³ " 4310 LOCATE 20,20 4320 PRINT "HIT!" 4330 GOTO 5240 4340 IF SCREEN(CSRLIN-1,POS(0)+4)<>2 OR SCREEN(CSRLIN-1,POS(0)-2)<>2 THEN 4410 4350 PRINT "ÄÒÄ"; 4360 ROW=CSRLIN:COL=POS(0)-2 4370 LOCATE 20,20 4380 PRINT "Reflection!" 4390 LOCATE ROW,COL 4400 GOTO 4910 4410 IF SCREEN(CSRLIN-1,POS(0)+4)=2 THEN PRINT "Ä¿ ";:LOCATE ,POS(0)-2:GOTO 4580 4420 IF SCREEN(CSRLIN-1,POS(0)-2)=2 THEN PRINT " ÚÄ";:LOCATE ,POS(0)-2:GOTO 3920 4430 PRINT " ³ "; 4440 LOCATE ,POS(0)-2 4450 GOTO 4250 4460 COL=POS(0) 4470 LOCATE 20,20 4480 IF SCREEN(20,20)>32 THEN 5240 4490 PRINT "Ray ends at position #"; 4500 PRINT CHR$(SCREEN(3,COL));CHR$(SCREEN(3,COL+1)) 4510 GOTO 5240 4520 IF SCREEN(CSRLIN,POS(0)+1)=179 THEN PRINT " º ";:LOCATE ,POS(0)-2:GOTO 4250 4530 IF SCREEN(CSRLIN,POS(0)+1)=196 THEN PRINT "ÄÅÄ";:LOCATE ,POS(0)-2:GOTO 4250 4540 IF SCREEN(CSRLIN,POS(0)+1)=216 THEN PRINT "ÍÎÍ";:LOCATE ,POS(0)-2:GOTO 4250 4550 IF SCREEN(CSRLIN,POS(0)+1)=197 THEN PRINT "Ä×Ä";:LOCATE ,POS(0)-2:GOTO 4250 4560 IF SCREEN(CSRLIN,POS(0)+1)=191 THEN PRINT "Í» ";:LOCATE ,POS(0)-2:GOTO 4580 4570 IF SCREEN(CSRLIN,POS(0)+1)=218 THEN PRINT " ÉÍ";:LOCATE ,POS(0)-2:GOTO 3920 4580 'HEADING LEFT 4590 LOCATE ,POS(0)-4 4600 IF SCREEN(CSRLIN,POS(0)+1)>178 THEN 4850 4610 IF POS(0)=26 THEN 4790 4620 IF SCREEN(CSRLIN,POS(0)-2)<>2 THEN 4670 4630 PRINT "*ÄÄ" 4640 LOCATE 20,20 4650 PRINT "HIT!" 4660 GOTO 5240 4670 IF SCREEN(CSRLIN+1,POS(0)-2)<>2 OR SCREEN(CSRLIN-1,POS(0)-2)<>2 THEN 4740 4680 PRINT "ÆÍÍ"; 4690 ROW=CSRLIN:COL=POS(0)-2 4700 LOCATE 20,20 4710 PRINT "Reflection!" 4720 LOCATE ROW,COL 4730 GOTO 3920 4740 IF SCREEN(CSRLIN+1,POS(0)-2)=2 THEN PRINT " ÀÄ";:LOCATE ,POS(0)-2:GOTO 4250 4750 IF SCREEN(CSRLIN-1,POS(0)-2)=2 THEN PRINT " ÚÄ";:LOCATE ,POS(0)-2:GOTO 4910 4760 PRINT "ÄÄÄ"; 4770 LOCATE ,POS(0)-2 4780 GOTO 4580 4790 ROW=CSRLIN 4800 LOCATE 20,20 4810 IF SCREEN(20,20)>32 THEN 5240 4820 PRINT "Ray ends at position #"; 4830 PRINT CHR$(SCREEN(ROW,26));CHR$(SCREEN(ROW,27)) 4840 GOTO 5240 4850 IF SCREEN(CSRLIN,POS(0)+1)=196 THEN PRINT "ÍÍÍ";:LOCATE ,POS(0)-2:GOTO 4580 4860 IF SCREEN(CSRLIN,POS(0)+1)=179 THEN PRINT "ÄÅÄ";:LOCATE ,POS(0)-2:GOTO 4580 4870 IF SCREEN(CSRLIN,POS(0)+1)=215 THEN PRINT "ÍÎÍ";:LOCATE ,POS(0)-2:GOTO 4580 4880 IF SCREEN(CSRLIN,POS(0)+1)=197 THEN PRINT "ÍØÍ";:LOCATE ,POS(0)-2:GOTO 4580 4890 IF SCREEN(CSRLIN,POS(0)+1)=192 THEN PRINT " ÈÍ";:LOCATE ,POS(0)-2:GOTO 4250 4900 IF SCREEN(CSRLIN,POS(0)+1)=218 THEN PRINT " ÉÍ";:LOCATE ,POS(0)-2:GOTO 4910 4910 'HEADING DOWN 4920 LOCATE CSRLIN+1,POS(0)-1 4930 IF SCREEN(CSRLIN,POS(0)+1)>178 THEN 5180 4940 IF CSRLIN=12 THEN 5120 4950 IF SCREEN(CSRLIN+1,POS(0)+1)<>2 THEN 5000 4960 PRINT " ³ " 4970 LOCATE 20,20 4980 PRINT "HIT!" 4990 GOTO 5240 5000 IF SCREEN(CSRLIN+1,POS(0)+4)<>2 OR SCREEN(CSRLIN+1,POS(0)-2)<>2 THEN 5070 5010 PRINT "ÄÐÄ"; 5020 ROW=CSRLIN:COL=POS(0)-2 5030 LOCATE 20,20 5040 PRINT "Reflection!" 5050 LOCATE ROW,COL 5060 GOTO 4250 5070 IF SCREEN(CSRLIN+1,POS(0)+4)=2 THEN PRINT "ÄÙ ";:LOCATE ,POS(0)-2:GOTO 4580 5080 IF SCREEN(CSRLIN+1,POS(0)-2)=2 THEN PRINT " ÀÄ";:LOCATE ,POS(0)-2:GOTO 3920 5090 PRINT " ³ "; 5100 LOCATE ,POS(0)-2 5110 GOTO 4910 5120 COL=POS(0) 5130 LOCATE 20,20 5140 IF SCREEN(20,20)>32 THEN 5240 5150 PRINT "Ray ends at position #"; 5160 PRINT CHR$(SCREEN(12,COL));CHR$(SCREEN(12,COL+1)) 5170 GOTO 5240 5180 IF SCREEN(CSRLIN,POS(0)+1)=179 THEN PRINT " º ";:LOCATE ,POS(0)-2:GOTO 4910 5190 IF SCREEN(CSRLIN,POS(0)+1)=196 THEN PRINT "ÄÅÄ";:LOCATE ,POS(0)-2:GOTO 4910 5200 IF SCREEN(CSRLIN,POS(0)+1)=216 THEN PRINT "ÍÎÍ";:LOCATE ,POS(0)-2:GOTO 4910 5210 IF SCREEN(CSRLIN,POS(0)+1)=197 THEN PRINT "Ä×Ä";:LOCATE ,POS(0)-2:GOTO 4910 5220 IF SCREEN(CSRLIN,POS(0)+1)=217 THEN PRINT "ͼ ";:LOCATE ,POS(0)-2:GOTO 4580 5230 IF SCREEN(CSRLIN,POS(0)+1)=192 THEN PRINT " ÈÍ";:LOCATE ,POS(0)-2:GOTO 3920 5240 LOCATE 22,20 5250 PRINT "Do you want to trace another path (Y/N)?" 5260 B$=INKEY$:IF B$="" THEN 5260 5270 IF B$="y" OR B$="Y" THEN 5310 5280 IF B$<>"n" AND B$<>"N" THEN 5260 5290 GOSUB 15080 5300 RETURN 5310 GOSUB 15080 5320 GOSUB 15030 5330 GOTO 3450 5340 GOSUB 15030 5350 LOCATE 15,20 5360 PRINT "Ask for a clue:" 5370 PRINT :PRINT 5380 PRINT "What number would you like to ask about (01-32)?"; 5390 B$=INKEY$:IF B$="" THEN 5390 5400 IF ASC(B$)<48 OR ASC(B$)>51 THEN 5390 5410 C$=B$ 5420 PRINT C$; 5430 B$=INKEY$:IF B$="" THEN 5430 5440 IF ASC(B$)<48 OR ASC(B$)>57 THEN 5430 5450 IF C$="3" AND ASC(B$)>50 THEN 5430 5460 C$=C$+B$ 5470 P=VAL(C$) 5480 PRINT B$ 5490 'ENTER ROUTINE: 5500 'ENTER RIGHT: 5510 IF P>8 THEN 5620 5520 IF B(P,1)<>-1 THEN 5570 5530 IF CRE=2 THEN COLOR 0,0 5540 PRINT :PRINT TAB(20) "HIT!" 5550 LOCATE P+3,24:COLOR 15,0:PRINT "H":COLOR 7,0 5560 GOTO 7230 5570 IF B(P-1,1)<>-1 AND B(P+1,1)<>-1 THEN LOCATE P+3,27:GOTO 5950 5580 IF CRE=2 THEN COLOR 0,0 5590 PRINT :PRINT TAB(20) "Reflection!" 5600 LOCATE P+3,24:COLOR 15,0:PRINT "R":COLOR 7,0 5610 GOTO 7230 5620 IF P>16 THEN 5740 5630 IF B(8,P-8)<>-1 THEN 5680 5640 IF CRE=2 THEN COLOR 0,0 5650 PRINT:PRINT TAB(20) "HIT!" 5660 LOCATE 13,P*3+3:COLOR 15,0:PRINT "H":COLOR 7,0 5670 GOTO 7230 5680 IF B(8,P-7)<>-1 AND B(8,P-9)<>-1 THEN LOCATE 12,P*3+3:GOTO 6270 5690 IF CRE=2 THEN COLOR 0,0 5700 PRINT :PRINT TAB(20) "Reflection!" 5710 LOCATE 13,P*3+3:COLOR 15,0:PRINT "R":COLOR 7,0 5720 GOTO 7230 5730 'ENTER LEFT 5740 IF P>24 THEN 5860 5750 IF B(25-P,8)<>-1 THEN 5800 5760 IF CRE=2 THEN COLOR 0,0 5770 PRINT :PRINT TAB(20) "HIT!" 5780 LOCATE 28-P,57:COLOR 15,0:PRINT "H":COLOR 7,0 5790 GOTO 7230 5800 IF B(24-P,8)<>-1 AND B(26-P,8)<>-1 THEN LOCATE 28-P,54:GOTO 6590 5810 IF CRE=2 THEN COLOR 0,0 5820 PRINT :PRINT TAB(20) "Reflection!" 5830 LOCATE 28-P,57:COLOR 15,0:PRINT "R":COLOR 7,0 5840 GOTO 7230 5850 'ENTER DOWN 5860 IF B(1,33-P)<>-1 THEN 5910 5870 IF CRE=2 THEN COLOR 0,0 5880 PRINT :PRINT TAB(20) "HIT!" 5890 LOCATE 2,126-P*3:COLOR 15,0:PRINT "H":COLOR 7,0 5900 GOTO 7230 5910 IF B(1,32-P)<>-1 AND B(1,34-P)<>-1 THEN LOCATE 3,126-P*3:GOTO 6910 5920 IF CRE=2 THEN COLOR 0,0 5930 PRINT :PRINT TAB(20) "Reflection!" 5940 LOCATE 2,126-P*3:COLOR 15,0:PRINT "R":COLOR 7,0:GOTO 7230 5950 'HEADING RIGHT 5960 LOCATE ,POS(0)+2 5970 IF POS(0)=53 THEN 6160 5980 IF B(CSRLIN-3,CINT(POS(0)/3)-8)<>-1 THEN 6040 5990 LOCATE 20,20 6000 IF CRE=2 THEN COLOR 0,0 6010 PRINT "HIT!" 6020 GOSUB 15160 6030 GOTO 7230 6040 IF B(CSRLIN-2,CINT(POS(0)/3)-8)<>-1 OR B(CSRLIN-4,CINT(POS(0)/3)-8)<>-1 THEN 6120 6050 ROW=CSRLIN:COL=POS(0)+1 6060 LOCATE 20,20 6070 IF CRE=2 THEN COLOR 0,0 6080 PRINT "Reflection!" 6090 GOSUB 15160 6100 LOCATE ROW,COL 6110 GOTO 7230 6120 IF B(CSRLIN-2,CINT(POS(0)/3)-8)=-1 THEN LOCATE ,POS(0)+1:GOTO 6270 6130 IF B(CSRLIN-4,CINT(POS(0)/3)-8)=-1 THEN LOCATE ,POS(0)+1:GOTO 6910 6140 LOCATE ,POS(0)+1 6150 GOTO 5950 6160 ROW=CSRLIN 6170 LOCATE 20,20 6180 IF SCREEN(20,20)>32 THEN 7230 6190 IF CRE=2 THEN COLOR 0,0 6200 PRINT "Ray ends at position #"; 6210 N$=CHR$(SCREEN(ROW,54))+CHR$(SCREEN(ROW,55)) 6220 IF CRE<1 THEN PRINT N$ 6230 COLOR 7,0 6240 LOCATE ROW,57 6250 GOSUB 15160 6260 GOTO 7230 6270 'HEADING UP 6280 LOCATE CSRLIN-1,POS(0)-1 6290 IF CSRLIN=3 THEN 6480 6300 IF B(CSRLIN-4,(POS(0)+1)/3-9)<>-1 THEN 6360 6310 LOCATE 20,20 6320 IF CRE=2 THEN COLOR 0,0 6330 PRINT "HIT!" 6340 GOSUB 15160 6350 GOTO 7230 6360 IF B(CSRLIN-4,(POS(0)+4)/3-9)<>-1 OR B(CSRLIN-4,(POS(0)-2)/3-9)<>-1 THEN 6440 6370 ROW=CSRLIN:COL=POS(0)-2 6380 LOCATE 20,20 6390 IF CRE=2 THEN COLOR 0,0 6400 PRINT "Reflection!" 6410 GOSUB 15160 6420 LOCATE ROW,COL 6430 GOTO 7230 6440 IF B(CSRLIN-4,(POS(0)+4)/3-9)=-1 THEN LOCATE ,POS(0)+1:GOTO 6590 6450 IF B(CSRLIN-4,(POS(0)-2)/3-9)=-1 THEN LOCATE ,POS(0)+1:GOTO 5950 6460 LOCATE ,POS(0)+1 6470 GOTO 6270 6480 COL=POS(0) 6490 LOCATE 20,20 6500 IF SCREEN(20,20)>32 THEN 7230 6510 IF CRE=2 THEN COLOR 0,0 6520 PRINT "Ray ends at position #"; 6530 N$=CHR$(SCREEN(3,COL))+CHR$(SCREEN(3,COL+1)) 6540 IF CRE<1 THEN PRINT N$ 6550 COLOR 7,0 6560 LOCATE 2,COL+1 6570 GOSUB 15160 6580 GOTO 7230 6590 'HEADING LEFT 6600 LOCATE ,POS(0)-4 6610 IF POS(0)=26 THEN 6800 6620 IF B(CSRLIN-3,CINT(POS(0)/3)-10)<>-1 THEN 6680 6630 LOCATE 20,20 6640 IF CRE=2 THEN COLOR 0,0 6650 PRINT "HIT!" 6660 GOSUB 15160 6670 GOTO 7230 6680 IF B(CSRLIN-2,CINT(POS(0)/3)-10)<>-1 OR B(CSRLIN-4,CINT(POS(0)/3)-10)<>-1 THEN 6760 6690 ROW=CSRLIN:COL=POS(0)+1 6700 LOCATE 20,20 6710 IF CRE=2 THEN COLOR 0,0 6720 PRINT "Reflection!" 6730 GOSUB 15160 6740 LOCATE ROW,COL 6750 GOTO 7230 6760 IF B(CSRLIN-2,CINT(POS(0)/3)-10)=-1 THEN LOCATE ,POS(0)+1:GOTO 6270 6770 IF B(CSRLIN-4,CINT(POS(0)/3)-10)=-1 THEN LOCATE ,POS(0)+1:GOTO 6910 6780 LOCATE ,POS(0)+1 6790 GOTO 6590 6800 ROW=CSRLIN 6810 LOCATE 20,20 6820 IF SCREEN(20,20)>32 THEN 7230 6830 IF CRE=2 THEN COLOR 0,0 6840 PRINT "Ray ends at position #"; 6850 N$=CHR$(SCREEN(ROW,26))+CHR$(SCREEN(ROW,27)) 6860 IF CRE<1 THEN PRINT N$ 6870 COLOR 7,0 6880 LOCATE ROW,24 6890 GOSUB 15160 6900 GOTO 7230 6910 'HEADING DOWN 6920 LOCATE CSRLIN+1,POS(0)-1 6930 IF CSRLIN=12 THEN 7120 6940 IF B(CSRLIN-2,(POS(0)+1)/3-9)<>-1 THEN 7000 6950 LOCATE 20,20 6960 IF CRE=2 THEN COLOR 0,0 6970 PRINT "HIT!" 6980 GOSUB 15160 6990 GOTO 7230 7000 IF B(CSRLIN-2,(POS(0)+4)/3-9)<>-1 OR B(CSRLIN-2,(POS(0)-2)/3-9)<>-1 THEN 7080 7010 ROW=CSRLIN:COL=POS(0)-2 7020 LOCATE 20,20 7030 IF CRE=2 THEN COLOR 0,0 7040 PRINT "Reflection!" 7050 GOSUB 15160 7060 LOCATE ROW,COL 7070 GOTO 7230 7080 IF B(CSRLIN-2,(POS(0)+4)/3-9)=-1 THEN LOCATE ,POS(0)+1:GOTO 6590 7090 IF B(CSRLIN-2,(POS(0)-2)/3-9)=-1 THEN LOCATE ,POS(0)+1:GOTO 5950 7100 LOCATE ,POS(0)+1 7110 GOTO 6910 7120 COL=POS(0) 7130 LOCATE 20,20 7140 IF SCREEN(20,20)>32 THEN 7230 7150 IF CRE=2 THEN COLOR 0,0 7160 PRINT "Ray ends at position #"; 7170 N$=CHR$(SCREEN(12,COL))+CHR$(SCREEN(12,COL+1)) 7180 IF CRE<1 THEN PRINT N$ 7190 COLOR 7,0 7200 LOCATE 13,COL+1 7210 GOSUB 15160 7220 GOTO 7230 7230 IF CRE<1 THEN LOCATE 22,20 ELSE RETURN 7240 PRINT "Do you want another clue (Y/N)?" 7250 B$=INKEY$:IF B$="" THEN 7250 7260 IF B$="y" OR B$="Y" THEN 7290 7270 IF B$<>"n" AND B$<>"N" THEN 7250 7280 RETURN 7290 GOSUB 15030 7300 GOTO 5340 7310 'COMPARE SCREEN TO SOLUTION 7320 MISSB=0:MISSS=0 7330 GOSUB 15030 7340 LOCATE 15,20 7350 PRINT "Entering screen as your guess of the solution:":PRINT 7360 FOR I=1 TO 8 7370 FOR J=1 TO 8 7380 IF B(I,J)=S(I,J) THEN 7410 7390 IF B(I,J)=-1 THEN MISSB=MISSB+1 7400 IF S(I,J)=-1 THEN MISSS=MISSS+1 7410 NEXT J 7420 NEXT I 7430 IF MISSS>MISSB THEN PRINT TAB(20) "You have";MISSS-MISSB;"more rock(s) on the screen than there":PRINT TAB(20) "are in the solution. Try again with the correct number.":GOTO 7660 7440 IF MISSB>MISSS THEN PRINT TAB(20) "You have";MISSB-MISSS;"fewer rock(s) on the screen than there":PRINT TAB(20) "are in the solution. Try again with the correct number.":GOTO 7660 7450 IF MISSB>0 THEN PRINT TAB(20) "You have";MISSB;"rock(s) incorrectly placed.":GOTO 7660 7460 PRINT "Your solution is absolutely correct!" 7470 ROW=CSRLIN 7480 COL=POS(0) 7490 LOCATE 7,1 7500 PRINT TAB(21) 7510 LOCATE ROW,COL 7520 CLUES=32 7530 FOR I=4 TO 11 7540 IF SCREEN(I,24)<>0 AND SCREEN(I,24)<>32 THEN CLUES=CLUES-1 7550 IF SCREEN(I,57)<>0 AND SCREEN(I,57)<>32 THEN CLUES=CLUES-1 7560 NEXT I 7570 FOR I=30 TO 51 STEP 3 7580 IF SCREEN(13,I)<>0 AND SCREEN(13,I)<>32 THEN CLUES=CLUES-1 7590 IF SCREEN(2,I)<>0 AND SCREEN(2,I)<>32 THEN CLUES=CLUES-1 7600 NEXT I 7610 PRINT "Your score is";(CLUES-GUESS)*F 7620 PRINT "Press any key to continue." 7630 ERASE B:ERASE S 7640 B$=INKEY$:IF B$="" THEN 7640 7650 RETURN 460 7660 IF MISSS=MISSB THEN GUESS=GUESS+1 7670 PRINT :PRINT "Press any key to return to the menu." 7680 B$=INKEY$:IF B$="" THEN 7680 ELSE RETURN 7690 'SOLUTION 7700 GOSUB 15030 7710 LOCATE 15,20 7720 PRINT "Display solution:" 7730 LOCATE 7,1 7740 COLOR 15,0 7750 PRINT TAB(10) "SOLUTION " 7760 PRINT TAB(10) "--------" 7770 FOR I=4 TO 11 7780 FOR J=30 TO 51 STEP 3 7790 LOCATE I,J-1 7800 IF B(I-3,J/3-9)=-1 THEN PRINT "(";CHR$(2);")" ELSE PRINT " " 7810 NEXT J 7820 NEXT I 7830 COLOR 7,0 7840 LOCATE 17,20 7850 FOR I=1 TO 8 7860 FOR J=1 TO 8 7870 S(I,J)=B(I,J) 7880 NEXT J 7890 NEXT I 7900 PRINT "Do you want to trace any paths (Y/N)?" 7910 B$=INKEY$:IF B$="" THEN 7910 7920 IF B$<>"n" AND B$<>"N" AND B$<>"y" AND B$<>"Y" THEN 7910 7930 IF B$="Y" OR B$="y" THEN GOSUB 3450 7940 GOSUB 15030 7950 LOCATE 15,20 7960 PRINT :PRINT TAB(20) "Press any key to continue." TAB(80) 7970 ERASE S:ERASE B 7980 B$=INKEY$:IF B$="" THEN 7980 7990 RETURN 460 8000 CLS 8010 LOCATE 10,1,0 8020 PRINT TAB(10) "Please type the letter of the function you want:" 8030 PRINT :PRINT TAB(10) "A. Create a setup to be solved by someone else." 8040 PRINT TAB(10) "B. Load a previously saved setup for solution." 8050 B$=INKEY$:IF B$<>"a" AND B$<>"A" AND B$<>"b" AND B$<>"B" THEN 8050 8060 IF B$="b" OR B$="B" THEN 10620 8070 CRE=2 8080 GOSUB 540 8081 COLOR 7,0 8082 LOCATE 7,1 8083 PRINT "Record #" 8084 PRINT "Displayed: None" 8090 LOCATE 15,1,0 8100 CRE=2 8110 PRINT TAB(20) "A. Review instructions. "; 8120 PRINT TAB(20) "B. Place a rock on the screen. "; 8130 PRINT TAB(20) "C. Remove a rock from the screen. "; 8140 PRINT TAB(20) "D. Trace a path on the screen. "; 8150 PRINT TAB(20) "E. Display all clues for the setup on the screen. "; 8160 PRINT TAB(20) "F. Save/use the display on the screen as a solution. "; 8170 PRINT TAB(20) "G. Call up/delete a previously saved solution. "; 8180 PRINT TAB(20) "H. End create routine. "; 8190 PRINT TAB(80) " " 8200 PRINT TAB(20) "Please type the letter of the function you want:"; 8210 B$=INKEY$:IF B$="" THEN 8210 8220 IF ASC(B$)<65 OR (ASC(B$)>72 AND ASC(B$)<97) OR ASC(B$)>104 THEN 8210 8230 LOCATE CSRLIN,1:PRINT TAB(80) 8240 IF ASC(B$)<97 THEN 8270 8250 ON (ASC(B$)-96) GOSUB 1080,2420,3130,3450,8290,8630,12500,15000 8260 GOTO 8090 8270 ON (ASC(B$)-64) GOSUB 1080,2420,3130,3450,8290,8630,12500,15000 8280 GOTO 8090 8290 GOSUB 15030 8300 LOCATE 15,20 8310 PRINT "Display all clues:" 8320 PRINT :PRINT 8330 FOR ROWV=1 TO 8 8340 FOR COLV=1 TO 8 8350 B(ROWV,COLV)=S(ROWV,COLV) 8360 NEXT COLV 8370 NEXT ROWV 8380 FOR P=1 TO 32: 8390 LOCATE 20,20 8400 PRINT " " 8410 GOSUB 5500 8420 NEXT P 8430 LOCATE 17,1 8440 PRINT TAB(20) "Do you want to trace any paths (Y/N)?" 8450 B$=INKEY$:IF B$="" THEN 8450 8460 IF B$<>"n" AND B$<>"N" AND B$<>"y" AND B$<>"Y" THEN 8450 8470 IF B$="Y" OR B$="y" THEN GOSUB 3450 8480 FOR I=4 TO 11 8490 LOCATE I,24 8500 PRINT " " 8510 LOCATE I,57 8520 PRINT " " 8530 NEXT I 8540 LOCATE 2,24 8550 PRINT TAB(80) 8560 LOCATE 13,24 8570 PRINT TAB(80) 8580 RESTORE 8590 FOR I=1 TO 17 8600 READ C(I) 8610 NEXT I 8620 RETURN 8630 GOSUB 15030 8640 LOCATE 15,20 8650 PRINT TAB(20) "Please type the letter of the function you want:" 8660 PRINT:PRINT TAB(20) "A. Register the screen display as a solution for a" 8670 PRINT TAB(20) " second player to solve immediately." 8680 PRINT TAB(20) "B. Store the screen display for solution by someone at" 8690 PRINT TAB(20) " some future time." 8691 LOCATE 25,1,0 8692 PRINT TAB(20) "To escape save routine, press `Escape' key."; 8700 B$=INKEY$:IF B$="" THEN 8700 8705 IF B$=CHR$(27) THEN 9410 8710 IF B$="B" OR B$="b" THEN 8840 8720 IF B$<>"A" AND B$<>"a" THEN 8700 8730 CLS 8740 F=0 8750 FOR ROWV=1 TO 8 8760 FOR COLV=1 TO 8 8770 B(ROWV,COLV)=S(ROWV,COLV) 8780 IF S(ROWV,COLV)=-1 THEN F=F+1 8790 NEXT COLV 8800 NEXT ROWV 8810 CRE=0 8820 ERASE S 8830 RETURN 620 8840 GOSUB 15030 8850 ON ERROR GOTO 15370 8860 GOSUB 180 8870 OPEN "BLKBX1" AS 1 LEN=128 8880 OPEN "BLKBX1" AS 2 LEN=128 8890 FIELD 1,1 AS KYY$,2 AS NMM$,3 AS INIT$,10 AS DTE$,100 AS CMM$ 8900 FOR ROW=1 TO 8 8910 FOR COL=1 TO 8 8920 FIELD 2,((ROW-1)*16)+((COL-1)*2) AS X$,2 AS B$(ROW,COL) 8930 NEXT COL 8940 NEXT ROW 8950 GET 1,4 8960 I=4 8970 WHILE KYY$="*" 8980 I=I+2 8990 GET 1,I 9000 WEND 9002 LSET NMM$=MKI$(F) 9010 RECNO=I-2 9040 LOCATE 15,1 9050 KEY(14) ON 9060 KEY(11) ON 9070 KEY(12) ON 9080 KEY(13) ON 9090 PRINT "Please type in your initials (3 characters max.) and press `Enter' to register:" 9100 ON KEY(11) GOSUB 9200 9110 ON KEY(12) GOSUB 9120:GOTO 9150 9120 LOCATE CSRLIN,POS(0)-1 9130 IF POS(0)=34 THEN LOCATE 18,35 9140 RETURN 9150 ON KEY(13) GOSUB 9160:GOTO 9190 9160 LOCATE CSRLIN,POS(0)+1 9170 IF POS(0)=38 THEN LOCATE 18,37 9180 RETURN 9190 ON KEY(14) GOSUB 9200:GOTO 9210 9200 RETURN 9210 COLOR 1,0 9220 LOCATE 18,35,0 9230 PRINT " " 9240 LOCATE 18,35,1,1,12 9250 B$=INKEY$:IF B$="" THEN 9250 9260 IF ASC(B$)=8 THEN 9330 9270 IF B$=CHR$(27) THEN 9410 9280 IF ASC(B$)=13 THEN 9360 9290 IF ASC(B$)<32 OR ASC(B$)>127 THEN 9250 9300 PRINT B$; 9310 IF POS(0)=38 THEN LOCATE 18,37 9320 GOTO 9250 9330 PRINT " ";:LOCATE CSRLIN,POS(0)-2 9340 IF POS(0)=34 THEN LOCATE 18,35 9350 GOTO 9250 9360 LOCATE ,,0 9370 IINIT$="" 9380 FOR I=35 TO 37 9390 IINIT$=IINIT$+CHR$(SCREEN(18,I)) 9400 NEXT I 9410 COLOR 7,0 9420 IF B$<>CHR$(27) THEN 9520 9430 LOCATE 25,1,0 9440 PRINT TAB(80) 9450 GOSUB 15030 9460 CLOSE 9470 KEY(11) OFF 9480 KEY(12) OFF 9490 KEY(13) OFF 9500 KEY(14) OFF 9510 RETURN 9520 LSET INIT$=IINIT$ 9530 LOCATE 15,1 9540 PRINT "Please type in the date (10 characters max.) and press `Enter' to register: " 9550 ON KEY(11) GOSUB 9650 9560 ON KEY(12) GOSUB 9570:GOTO 9600 9570 LOCATE CSRLIN,POS(0)-1 9580 IF POS(0)=31 THEN LOCATE 18,32 9590 RETURN 9600 ON KEY(13) GOSUB 9610:GOTO 9640 9610 LOCATE CSRLIN,POS(0)+1 9620 IF POS(0)=42 THEN LOCATE 18,41 9630 RETURN 9640 ON KEY(14) GOSUB 9650:GOTO 9660 9650 RETURN 9660 COLOR 1,0 9670 LOCATE 18,32,0 9680 PRINT " " 9690 LOCATE 18,32,1,1,12 9700 B$=INKEY$:IF B$="" THEN 9700 9710 IF ASC(B$)=8 THEN 9780 9720 IF B$=CHR$(27) THEN 9410 9730 IF ASC(B$)=13 THEN 9810 9740 IF ASC(B$)<32 OR ASC(B$)>127 THEN 9700 9750 PRINT B$; 9760 IF POS(0)=42 THEN LOCATE 18,41 9770 GOTO 9700 9780 PRINT " ";:LOCATE 18,POS(0)-2 9790 IF POS(0)=31 THEN LOCATE 18,32 9800 GOTO 9700 9810 LOCATE ,,0 9820 IDTE$="" 9830 FOR I=32 TO 41 9840 IDTE$=IDTE$+CHR$(SCREEN(18,I)) 9850 NEXT I 9860 COLOR 7,0 9870 LSET DTE$=IDTE$ 9880 LOCATE 15,1,0 9890 PRINT "Type in any comment or description you would like to save along with the setup (100 characters maximum) and press `Enter' to register:" 9900 ON KEY(11) GOSUB 9910:GOTO 9930 9910 IF CSRLIN=19 THEN LOCATE 18,POS(0) 9920 RETURN 9930 ON KEY(12) GOSUB 9940:GOTO 9970 9940 LOCATE CSRLIN,POS(0)-1 9950 IF POS(0)=15 THEN LOCATE CSRLIN,16 9960 RETURN 9970 ON KEY(13) GOSUB 9980:GOTO 10010 9980 LOCATE CSRLIN,POS(0)+1 9990 IF POS(0)=66 THEN LOCATE CSRLIN,65 10000 RETURN 10010 ON KEY(14) GOSUB 10020:GOTO 10040 10020 IF CSRLIN=18 THEN LOCATE 19,POS(0) 10030 RETURN 10040 COLOR 1,0 10050 LOCATE 18,16,0 10060 PRINT TAB(66) 10070 LOCATE 19,16 10080 PRINT TAB(66) 10090 LOCATE 18,16,1,1,12 10100 B$=INKEY$:IF B$="" THEN 10100 10110 IF ASC(B$)=8 THEN 10190 10120 IF B$=CHR$(27) THEN 9410 10130 IF ASC(B$)=13 THEN 10230 10140 IF ASC(B$)<32 OR ASC(B$)>127 THEN 10100 10150 PRINT B$; 10160 IF CSRLIN=18 AND POS(0)=66 THEN LOCATE 19,16 10170 IF CSRLIN=19 AND POS(0)=66 THEN LOCATE 19,65 10180 GOTO 10100 10190 PRINT " ";:LOCATE CSRLIN,POS(0)-2 10200 IF CSRLIN=18 AND POS(0)=15 THEN LOCATE 18,16 10210 IF CSRLIN=19 AND POS(0)=15 THEN LOCATE 18,65 10220 GOTO 10100 10230 LOCATE ,,0 10240 COLOR 7,0 10250 ICMM$="" 10260 FOR I=18 TO 19 10270 FOR J=16 TO 65 10280 ICMM$=ICMM$+CHR$(SCREEN(I,J)) 10290 NEXT J 10300 NEXT I 10310 COLOR 7,0 10320 GOSUB 15030 10330 LSET CMM$=ICMM$ 10340 LSET KYY$="*" 10350 F%=0 10360 FOR ROWV=1 TO 8 10370 FOR COLV=1 TO 8 10380 IF S(ROWV,COLV)<>-1 THEN 10410 10390 F%=F%+1 10400 LSET B$(ROWV,COLV)=MKI$(-1):GOTO 10420 10410 LSET B$(ROWV,COLV)=MKI$(0) 10420 NEXT COLV 10430 NEXT ROWV 10440 LSET NMM$=MKI$(F%) 10450 LOCATE ,,0 10460 LOCATE 15,1 10470 PRINT "All data has been registered. Press `Enter' to save on the disk." 10480 B$=INKEY$:IF B$="" THEN 10480 10490 IF B$=CHR$(27) THEN 9430 10500 IF ASC(B$)<>13 THEN 10480 10510 PUT 1,RECNO+2 10520 PUT 2,RECNO+1 10530 CLOSE 10540 LOCATE 25,1,0 10550 PRINT TAB(80) 10560 LOCATE 15,1 10570 PRINT TAB(10) "Your data and display are saved as record #";CINT(RECNO/2) TAB(80) 10571 COLOR 7,0 10572 LOCATE 8,1 10573 PRINT "Displayed:";CINT(RECNO/2);" " 10580 LOCATE 18,20 10590 PRINT "Press any key to return to the menu." 10600 B$=INKEY$:IF B$="" THEN 10600 10610 GOTO 9430 10620 CLS 10630 LOCATE 10,1 10640 PRINT "Do you want to see a listing of what is available on the disk (Y/N)?" 10650 B$=INKEY$:IF B$="" THEN 10650 10660 IF B$="Y" OR B$="y" THEN GOSUB 11100:GOTO 10680 10670 IF B$<>"N" AND B$<>"n" THEN 10650 10680 LOCATE 10,1,0,1,12 10690 PRINT "Type in the record # of the solution you want to solve for (3 characters max.) then press `Enter' for the computer to load the record." 10700 LOCATE 15,1,0:PRINT TAB(20) "(Pressing `X' will escape from the selection mode)" 10710 COLOR 1,0:LOCATE 13,38,0:PRINT " " :LOCATE 13,38,1 10720 B$=INKEY$:IF B$="" THEN 10720 10730 IF B$="X" OR B$="x" THEN COLOR 7,0:GOTO 460 10740 IF ASC(B$)=13 THEN 10810 10750 IF ASC(B$)=8 THEN 10790 10760 IF ASC(B$)>57 OR ASC(B$)<47 THEN 10720 10770 PRINT B$;:IF POS(0)=41 THEN LOCATE 13,40 10780 GOTO 10720 10790 IF POS(0)=38 THEN 10720 10800 PRINT " ";:LOCATE CSRLIN,POS(0)-2:GOTO 10720 10810 B$="":COLOR 7,0:LOCATE ,,0 10820 B$=B$+CHR$(SCREEN(CSRLIN,38)) 10830 B$=B$+CHR$(SCREEN(CSRLIN,39)) 10840 B$=B$+CHR$(SCREEN(CSRLIN,40)) 10850 CELL=VAL(B$) 10860 ON ERROR GOTO 15370 10870 GOSUB 180 10880 OPEN "BLKBX1" AS 1 LEN=128 10890 OPEN "BLKBX1" AS 2 LEN=128 10900 FIELD 1,1 AS KYY$,2 AS NMM$,3 AS INIT$,10 AS DTE$,100 AS CMM$ 10910 FOR ROW=1 TO 8 10920 FOR COL=1 TO 8 10930 FIELD 2,((ROW-1)*16)+((COL-1)*2) AS X$,2 AS B$(ROW,COL) 10940 NEXT COL 10950 NEXT ROW 10960 GET 1,CELL*2+2 10970 IF KYY$<>"*" THEN 12000 10980 GET 2,(CELL*2)+1 10990 F=0 11000 FOR ROWV=1 TO 8 11010 FOR COLV=1 TO 8 11020 B(ROWV,COLV)=CVI(B$(ROWV,COLV)) 11030 IF B(ROWV,COLV)=-1 THEN F=F+1 11040 NEXT COLV 11050 NEXT ROWV 11060 CLOSE 11070 CLS 11080 GOTO 620 11100 CLS 11110 LOCATE 1,1,0 11120 PRINT STRING$(80,196);"RECORD # OF MADE # ROCKS BY DATE DESCRIPTION ";STRING$(80,196); 11130 LOCATE 25,1 11140 PRINT "Press space bar to continue listing or `ESCAPE' to leave list mode."; 11150 LOCATE 5,1 11160 OPEN "BLKBX1" AS 1 LEN=128 11170 FIELD 1,1 AS KYY$,2 AS NMM$,3 AS INIT$,10 AS DTE$,100 AS CMM$ 11180 COLOR 7,0 11190 I=4:GON$="" 11195 GET 1,I 11200 WHILE (KYY$="*" OR KYY$="!") AND GON$<>CHR$(27) 11201 IF KYY$="!" THEN 11300 11210 IF CSRLIN<23 THEN 11260 11220 GON$=INKEY$:IF GON$="" THEN 11220 11230 IF GON$=CHR$(32) THEN LOCATE 5,1,0:GOTO 11260 11240 IF GON$=CHR$(27) THEN 11200 11250 GOTO 11220 11252 GET 1,I 11255 IF I/2-1<10 THEN PRINT " "; 11257 IF I/2-1<100 THEN PRINT " "; 11260 PRINT " ";I/2-1;" ";CVI(NMM$);" ";INIT$;" "; 11265 PRINT DTE$;LEFT$(CMM$,50); 11270 PRINT " "; 11280 COLOR 1,0 11290 PRINT MID$(CMM$,51,50) 11300 COLOR 7,0 11310 I=I+2 11315 GET 1,I 11320 WEND 11330 IF GON$=CHR$(27) THEN 11380 11340 IF I>4 THEN PRINT " End of Listing " ELSE PRINT " No Records on This Disk" 11350 WHILE CSRLIN<23 11360 PRINT TAB(80):PRINT 11370 WEND 11372 GON$=INKEY$:IF GON$="" THEN 11372 11380 CLS 11385 CLOSE 1 11390 RETURN 12000 COLOR 7,0 12005 CLS 12010 LOCATE 10,1,0 12015 CLOSE 1:CLOSE 2 12020 PRINT "Record #";CELL;"does not exist. Press `L' to see a listing of available records,":PRINT "`R' to retry with another number, or `X' to escape form the selection mode." 12030 STRT$=INKEY$:IF STRT$="" THEN 12030 12040 IF STRT$="R" OR STRT$="r" THEN CLS:GOTO 10680 12050 IF STRT$="L" OR STRT$="l" THEN 11100 12060 IF STRT$="X" OR STRT$="x" THEN 460 12070 GOTO 12030 12500 GOSUB 15030 12510 LOCATE 15,2 12520 PRINT "Do you want to see a listing of what is available on the disk (Y/N)?" 12530 GO$=INKEY$:IF GO$="" THEN 12530 12540 IF GO$="Y" OR GO$="y" THEN GOSUB 11100:GOTO 12560 12550 IF GO$<>"N" AND GO$<>"n" THEN 12530 ELSE 12630 12560 COLOR 7,0 12570 CRE=2 12580 GOSUB 540 12590 COLOR 7,0 12600 LOCATE 7,1 12610 PRINT "Record #" 12620 PRINT "Displayed: None" 12630 LOCATE 25,1 12640 PRINT TAB(20) "Pressing `X' will escape from the load/delete mode."; 12650 LOCATE 15,1,0,1,12 12660 PRINT "Type in the record # of the record you want to display (3 characters max.) then press `Enter' for the computer to load the record." 12670 COLOR 1,0:LOCATE 18,38,0:PRINT " " :LOCATE 18,38,1 12680 B$=INKEY$:IF B$="" THEN 12680 12690 IF B$="X" OR B$="x" THEN COLOR 7,0:CLOSE:LOCATE 25,1,0:PRINT TAB(80):RETURN 8081 12700 IF ASC(B$)=13 THEN 12770 12710 IF ASC(B$)=8 THEN 12750 12720 IF ASC(B$)>57 OR ASC(B$)<47 THEN 12680 12730 PRINT B$;:IF POS(0)=41 THEN LOCATE 13,40 12740 GOTO 12680 12750 IF POS(0)=38 THEN 12680 12760 PRINT " ";:LOCATE CSRLIN,POS(0)-2:GOTO 12680 12770 B$="":COLOR 7,0:LOCATE ,,0 12780 B$=B$+CHR$(SCREEN(CSRLIN,38)) 12790 B$=B$+CHR$(SCREEN(CSRLIN,39)) 12800 B$=B$+CHR$(SCREEN(CSRLIN,40)) 12810 CELL=VAL(B$) 12820 ON ERROR GOTO 15370 12825 GOSUB 15030 12830 GOSUB 180 12840 OPEN "BLKBX1" AS 1 LEN=128 12850 OPEN "BLKBX1" AS 2 LEN=128 12860 FIELD 1,1 AS KYY$,2 AS NMM$,3 AS INIT$,10 AS DTE$,100 AS CMM$ 12870 FOR ROW=1 TO 8 12880 FOR COL=1 TO 8 12890 FIELD 2,((ROW-1)*16)+((COL-1)*2) AS X$,2 AS B$(ROW,COL) 12900 NEXT COL 12910 NEXT ROW 12920 GET 1,CELL*2+2 12930 IF KYY$<>"*" THEN 14800 12940 GET 2,(CELL*2)+1 12950 F=0 12960 FOR ROWV=1 TO 8 12970 FOR COLV=1 TO 8 12980 B(ROWV,COLV)=CVI(B$(ROWV,COLV)) 12990 IF B(ROWV,COLV)=-1 THEN F=F+1 13000 NEXT COLV 13010 NEXT ROWV 13020 CLOSE 13030 FOR I=1 TO 8:FOR J=1 TO 8 13040 S(I,J)=B(I,J) 13050 NEXT J:NEXT I 13060 FOR I=4 TO 11 13070 FOR J=30 TO 51 STEP 3 13080 LOCATE I,J-1,0 13090 IF B(I-3,J/3-9)=-1 THEN PRINT "(";CHR$(2);")" ELSE PRINT " " 13100 NEXT J 13110 NEXT I 13120 LOCATE 8,1 13130 PRINT "Displayed:";CELL;" " 13140 LOCATE 15,1,0 13150 PRINT STRING$(79,196) 13151 PRINT "RECORD # OF MADE # ROCKS BY DATE DESCRIPTION ";STRING$(79,196); 13160 LOCATE 19,1,0 13170 OPEN "BLKBX1" AS 1 LEN=128 13180 FIELD 1,1 AS KYY$,2 AS NMM$,3 AS INIT$,10 AS DTE$,100 AS CMM$ 13190 COLOR 7,0 13200 I=CELL*2+2 13205 GET 1,I 13210 IF I/2-1<10 THEN PRINT " "; 13220 IF I/2-1<100 THEN PRINT " "; 13230 PRINT I/2-1;" ";CVI(NMM$);" ";INIT$;" "; 13240 PRINT DTE$;LEFT$(CMM$,50); 13250 PRINT " "; 13260 COLOR 1,0 13270 PRINT MID$(CMM$,51,50) 13280 COLOR 7,0 13290 PRINT :PRINT TAB(20) "Do you want to delete this record (Y/N)?" 13300 GO$=INKEY$:IF GO$="" THEN 13300 13310 IF GO$="X" OR GO$="x" OR GO$="N" OR G$="n" THEN 13350 13320 IF GO$<>"y" AND GO$<>"Y" THEN 13300 13330 LSET KYY$="!" 13340 PUT 1,I 13350 CLOSE:COLOR 7,0:LOCATE 25,1,0:PRINT TAB(79);:GOSUB 15030:RETURN 8081 14800 COLOR 7,0 14810 GOSUB 15030 14820 LOCATE 15,1,0 14830 CLOSE 1:CLOSE 2 14840 PRINT "Record #";CELL;"does not exist. Press `L' to see a listing of available records,":PRINT "`R' to retry with another number, or `X' to escape form the selection mode." 14850 STRT$=INKEY$:IF STRT$="" THEN 14850 14860 IF STRT$="R" OR STRT$="r" THEN RETURN 12630 14870 IF STRT$="L" OR STRT$="l" THEN GOSUB 11100:RETURN 12560 14880 IF STRT$="X" OR STRT$="x" THEN COLOR 7,0:CLOSE:LOCATE 25,1,0:PRINT TAB(80):RETURN 8081 14890 GOTO 14850 15000 GOSUB 15030 15001 LOCATE 15,1 15002 PRINT TAB(20) "Please verify end create routine (Y/N)?" 15003 GO$=INKEY$: IF GO$="" THEN 15003 15004 IF GO$="Y" OR GO$="y" THEN 15008 15005 IF GO$<>"n" AND GO$<>"N" THEN 15003 15006 GOTO 8090 15008 CRE=0 15009 ON ERROR GOTO 15011 15010 ERASE S:GOTO 15013 15011 IF ERR<>5 THEN 15019 15012 RESUME 15013 15013 ON ERROR GOTO 15015 15014 ERASE B:GOTO 15019 15015 IF ERR<>5 THEN 15019 15016 RESUME 15019 15019 ON ERROR GOTO 0 15020 GOTO 460 15030 LOCATE 15,1 15040 FOR I=1 TO 9 15050 PRINT BL$ 15060 NEXT I 15070 RETURN 15080 FOR I=1 TO 8 15090 LOCATE I+3,29 15100 WHILE POS(0)<53 15110 IF SCREEN(CSRLIN,POS(0))=40 THEN LOCATE ,POS(0)+3:GOTO 15130 15120 PRINT " "; 15130 WEND 15140 NEXT I 15150 RETURN 15160 I=1 15170 WHILE C(I)=0 15180 I=I+1 15190 WEND 15200 IF SCREEN (20,20)<>72 AND SCREEN (20,21)<>101 AND (SCREEN(CSRLIN,POS(0))=0 OR SCREEN(CSRLIN,POS(0))=32) THEN PRINT CHR$(C(I)) 15210 IF P>8 THEN 15240 15220 LOCATE P+3,24 15230 GOTO 15310 15240 IF P>16 THEN 15270 15250 LOCATE 13,P*3+3 15260 GOTO 15310 15270 IF P>24 THEN 15300 15280 LOCATE 28-P,57 15290 GOTO 15310 15300 LOCATE 2,126-P*3 15310 IF SCREEN(20,20)=72 THEN COLOR 15,0:PRINT "H":COLOR 7,0:GOTO 15350 15320 IF SCREEN(20,21)=101 THEN COLOR 15,0:PRINT "R":COLOR 7,0:GOTO 15350 15330 IF SCREEN(CSRLIN,POS(0))=0 OR SCREEN(CSRLIN,POS(0))=32 THEN PRINT CHR$(C(I)) ELSE GOTO 15350 15340 C(I)=0 15350 RETURN 15360 FOR Y=1 TO 8:FOR Z=1 TO 8:PRINT B(Y,Z);:NEXT Z:PRINT :NEXT Y 15370 IF ERR<>70 THEN 15420 15380 LOCATE 15,1 15390 PRINT "Disk is write protected. Remove the protect tab or replace the disk with an unprotected one and press any key to restart." 15400 RESUME 15410 15410 B$=INKEY$:IF B$<>"" THEN RETURN **** 15420 IF ERR<>71 THEN 15470 15430 LOCATE 15,1 15440 PRINT "Disk not ready. Check to make sure a disk is in the drive and that the door is closed properly, then press any key." 15450 RESUME 15460 15460 B$=INKEY$:IF B$<>"" THEN 8840 ELSE 15460 15470 ON ERROR GOTO 0