0100 ! Skitter program - 6/15/87 Tom Sibert 0110 ‘INIT’: DESTROY ALL @ CFLAG 0 @ CFLAG 1 0120 IF POS(VER$,"ADVPRO")=0 THEN 0130 DISP "Need ADVPRLEX!" 0140 BEEP 999,.1 @ BEEP 667,.1 0150 GOTO ‘E1’ 0160 END IF 0170 DISP "Initializing data..." 0180 DESTROY ALL @ DIM A$(16),B$(16),C$(16) 0190 LC OFF 0200 SFLAG -23 @ ENDLINE CHR$(0)&CHR$(13)&CHR$(10) 0210 GOTO ‘START’ 0220 ‘S’: ON ERROR GOTO ‘IOOOPS’ @ RESTORE IO 0230 DISP "All clear (Y/N) ?" 0240 K$=KEYWAIT$ 0250 ON POS("YN",K$)+1 GOTO ‘R’,’YEP’,’NOPE’ 0260 ‘NOPE’: 0270 DISP "Get clear of robot!" @ BEEP 333,1 @ GOTO ‘MENU’ 0280 ‘YEP’: 0290 DISP "Prepare to reset..." 0300 FOR I=1 TO 4 0310 BEEP 777,.25 0320 WAIT .75 0330 NEXT I 0340 BEEP 999,.5 0350 OUTPUT :1 ;"B1000;B2000;B3000" @ GOTO ‘MENU’ 0360 ‘START’: FOR I=1 TO 16 0370 READ O$ 0380 A$(I)=O$ 0390 NEXT I 0400 FOR I=1 TO 16 0410 READ O$ 0420 B$(I)=O$ 0430 NEXT I 0440 FOR I=1 TO 16 0450 READ O$ 0460 C$(I)=O$ 0470 NEXT I 0480 LC OFF 0490 ‘MENU’: ON ERROR GOTO ‘MENU’ @ CFLAG 1 0500 DISP "C:E:e:H:R:S:W" 0510 K$=KEYWAIT$ 0520 IF K$>"Z" THEN K$&"1" ELSE K$ 0530 ‘W’: INPUT "Filename ? ",F$;F$ 0540 UNSECURE F$ @ ASSIGN #1 TO F$ @ READ #1,0;N,W 0550 ‘WT’: INPUT "Waiting period (s) ? ",STR$(W);W 0560 IF W<=0 THEN W=1 @ DISP "No waiting period..." @ WAIT .5 0570 PRINT #1,0;N,W 0580 IF FLAG(2)=1 THEN CFLAG 2 @ RETURN 0590 ‘WTEND’: ASSIGN #1 TO * @ SECURE F$ 0600 GOTO ‘MENU’ 0610 ‘E’: ON ERROR GOTO ‘NEWFILE’ @ I=1 @ N=0 ! Edit 0620 INPUT "Filename ? ",F$;F$ @ IF LEN(F$)>6 THEN F$="" @ GOTO ‘E’ 0630 UNSECURE F$ @ ASSIGN #1 TO F$ 0640 ‘NEWRET’: ON ERROR GOTO ‘PRTN’ @ READ #1,0;N,W 0650 ‘PRTN’: ! PRINT #1;N 0660 ON ERROR GOTO ’TOOPS’ 0670 ’TOP’: T=I/10 @ READ #1,I;L$ @ IF L$#"" THEN SFLAG 1 0680 GOTO ’TNXT’ 0690 ’TOOPS’: L$="" 0700 ’TNXT’: I$="" 0710 FOR K=1 TO LEN(L$) 0720 IF POS("ABC",L$[K,K])#0 THEN ‘AC’ ELSE ‘NXT’ 0730 ‘AC’: IF K#1 THEN I$=I$&","&L$[K,K+2] ELSE I$=I$&L$[K,K+2] 0740 ‘NXT’: NEXT K 0750 DISP USING "#,k";"t=";T; 0760 LINPUT " ",I$;I1$ 0770 ‘STRINGIN’: 0780 ON POS("EHNP",I1$[1,1])+1 GOTO ‘CON’,’EDEXIT’,’EDITHELP’,’NEX’,’PREV’ 0790 ‘CON’: IF FLAG(1)=1 AND I1$#I$ THEN 0800 CFLAG 1 @ N=N-1 0810 IF I1$="" THEN N=N-1 @ GOTO ‘LTRHNDLG’ 0820 END IF 0830 IF I1$="" AND FLAG(1)=1 THEN N=N-1 @ CFLAG 1 @ GOTO ‘DTOP’ 0840 IF I1$="" THEN ‘BOTTOM’ ELSE T1=VAL(I1$) 0850 IF T1>0 AND T1<=30 THEN 0860 I=T1*10 @ GOTO ’TOP’ 0870 ELSE 0880 IF T1<0 OR T1>30 THEN ‘BEPEO’ 0890 END IF 0900 ‘CHECK’: 0910 C=POS(I1$,",") 0920 IF C#0 THEN 0930 I1$=I1$[1,C-1]&I1$[C+1,LEN(I1$)] 0940 GOTO ‘CHECK’ 0950 END IF 0960 FOR J=1 TO LEN(I1$) 0970 IF I1$[J,J]>"C" THEN ‘BEPEO’ 0980 IF POS("ABC",I1$[J,J])#0 THEN 0990 IF VAL(I1$[J+1,J+2])>16 THEN ‘BEPEO’ ELSE J=J+2 1000 END IF 1010 NEXT J 1020 ‘LTRHNDLG’: ! If here data is good 1030 IF NOT FLAG(1) THEN 1040 PRINT #1,I;I1$ 1050 N=N+1 1060 ELSE 1070 CFLAG 1 1080 END IF 1090 ‘BOTTOM’: 1100 IF I=300 THEN DISP "Done." @ WAIT .5 @ GOTO ‘EDEXIT’ 1110 I=I+1 @ GOTO ’TOP’ 1120 ‘NEX’: I1=I @ DISP "Searching..." @ SFLAG 1 1130 ‘NTOP’: I=I+1 1140 IF I=0 OR I=300 THEN 1150 DISP "Out of data!" @ BEEP 999,.1 @ BEEP 667,.1 1160 WAIT .5 @ I=I1 @ CFLAG 1 @ GOTO ’TOP’ 1170 END IF 1180 READ #1,I;L$ 1190 IF L$="" THEN ‘NTOP’ 1200 GOTO ’TOP’ 1210 ‘PREV’: I1=I @ DISP "Searching..." @ SFLAG 1 1220 ‘PTOP’: I=I-1 1230 IF I=0 OR I=300 THEN 1240 DISP "Out of data!" @ BEEP 999,.1 @ BEEP 667,.1 1250 WAIT .5 @ I=I1 @ CFLAG 1 @ GOTO ’TOP’ 1260 END IF 1270 READ #1,I;L$ 1280 IF L$="" THEN ‘PTOP’ 1290 GOTO ’TOP’ 1300 ‘EDEXIT’: PRINT #1,0;N,W @ SECURE F$ 1310 ASSIGN #1 TO * @ GOTO ‘MENU’ 1320 ‘EDHELP’: DISP "Exit:Help:Next:Previous" @ K$=KEYWAIT$ @ GOTO ’TOP’ 1330 ‘NEWFILE’: 1340 OFF ERROR @ IF F$="" THEN ‘MENU’ 1350 DISP "Creating new file..." 1360 CREATE DATA F$,301,16 @ ASSIGN #1 TO F$ 1370 FOR K=1 TO 300 @ PRINT #1,K;"" @ NEXT K 1380 GOTO ‘NEWRET’ 1390 ‘BEPEO’: DISP "Invalid data!" @ BEEP 999,.1 @ BEEP 667,.1 @ GOTO ’TOP’ 1400 ‘C’: ! Compile 1410 ON ERROR GOTO ‘NAUGHTY’ 1420 INPUT "File to compile ? ",F$;F$ 1430 UNSECURE F$ 1440 ASSIGN #1 TO F$ 1450 READ #1,0;N,W @ IF W#0 THEN ‘SKIP’ 1460 SFLAG 2 @ GOSUB ‘WT’ 1470 ‘SKIP’: ON ERROR GOTO ‘CYN’ 1480 F2$=F$&"RN" 1490 UNSECURE F2$ 1500 ‘ERAS’: 1510 DISP "Purge old file (Y/N)?" 1520 K$=KEYWAIT$ @ ON POS("YN",K$)+1 GOTO ‘ERAS’,’CY’,’CN’ 1530 ‘CY’: UNSECURE F2$ @ PURGE F2$ 1540 ‘CYN’: CREATE DATA F2$,N+1,64 1550 ASSIGN #2 TO F2$ @ GOTO ‘RUNRET’ 1560 ! FOR K=1 TO N @ PRINT #2,K;"" @ NEXT K @ GOTO ‘RUNRET’ 1570 ‘CN’: ASSIGN #1 TO * @ ASSIGN #2 TO * 1580 ON ERROR GOTO ‘MENU’ @ SECURE F$ @ SECURE F2$ 1590 GOTO ‘MENU’ 1600 ‘RUNRET’: 1610 READ #1,0;N,W @ PRINT #2,0;N,W 1620 DESTROY C,S,B1$,B2$,B3$ 1630 ‘CTOP’: DISP "Compiling..." @ ON ERROR GOTO ‘DTOP’ 1640 FOR I=1 TO N 1650 ‘DTOP’: C=C+1 @ READ #1,C;I$ @ DISP C/10 1660 IF I$="" THEN ‘DTOP’ 1670 ‘CONVERT’: ! b1$,b2$,b3$=output bytes in .rn file 1680 B1$="" @ B2$="" @ B3$="" 1690 ‘REDO’: SELECT I$[1,1] 1700 CASE "A" @ B1$=A$(VAL(I$[2,3])) 1710 I$=I$[4,LEN(I$)] @ GOTO ‘REDO’ 1720 CASE "B" @ B2$=B$(VAL(I$[2,3])) 1730 I$=I$[4,LEN(I$)] @ GOTO ‘REDO’ 1740 CASE "C" @ B3$=C$(VAL(I$[2,3])) 1750 I$=I$[4,LEN(I$)] @ GOTO ‘REDO’ 1760 CASE ELSE 1770 ‘BINBOT’: 1780 IF I#1 THEN 1790 S=C/10-S1 1800 PRINT #2,I-1;B4$,B5$,B6$,S 1810 END IF 1820 S1=C/10 1830 B4$=B1$ @ B5$=B2$ @ B6$=B3$ 1840 ‘DONE’: NEXT I 1850 ‘LEAVE’: S=C/10-S1 1860 PRINT #2,I-1;B4$,B5$,B6$,S 1870 ASSIGN #1 TO * @ ASSIGN #2 TO * 1880 SECURE F$ @ SECURE F2$ 1890 GOTO ‘MENU’ 1900 ‘INFILE’: 1910 INPUT "Filename?";F$ @ UNSECURE F$ @ ASSIGN #1 TO F$ 1920 GOTO ‘INRET’ 1930 ‘NAUGHTY’: 1940 DISP "Bad filename!" @ BEEP 999,.1 @ BEEP 667,.1 1950 GOTO ‘MENU’ 1960 ‘R’: ! Make Skitter dance 1970 ON ERROR GOTO ‘IOOOPS’ @ RESTORE IO 1980 ON ERROR GOTO ‘DBLFALT’ 1990 INPUT "Dancing file ? ",F2$;F2$ 2000 UNSECURE F2$ @ SECURE F2$ ! See if file exists 2010 ASSIGN #1 TO F2$ 2020 ON ERROR GOTO ‘GOBAD’ 2030 READ #1;N,W 2040 IF W>5 THEN W1=W-5 ELSE W1=0 2050 DISP "Waiting..." @ T9=TIME 2060 SETTIME "00:00:00" 2070 CLOCK ON 2080 WAIT W1 2090 FOR I=1 TO 35 2100 OUTPUT :1 ;"B0001" 2110 OUTPUT :1 ;"B0000" 2120 NEXT I 2130 CLOCK OFF @ BEEP 999,.1 @ BEEP 999,.1 2140 DISP "I’m a dancin’ fool!" 2150 ‘LOOP’: 2160 FOR I=1 TO N 2170 READ #1,I;B1$,B2$,B3$,D 2180 OUTPUT :1 ;B1$&";"&B2$&";"&B3$ 2190 WAIT D 2200 IF KEY$#"" THEN ‘HIST’ 2210 NEXT I 2220 ‘HIST’: 2230 ASSIGN #1 TO * 2240 DISP ‘Press R to reset’ ! Reset positions 2250 SETTIME TIME+T9 2260 CLOCK OFF 2270 GOTO ‘MENU’ 2280 ‘DBLFALT’: 2290 DISP "No existo filo!" @ BEEP 999,.1 @ BEEP 667,.1 2300 WAIT .5 @ GOTO ‘MENU’ 2310 ‘GOBAD’: DISP "Bad data!" @ BEEP 999,.1 @ BEEP 667,.1 @ GOTO ‘HIST’ 2320 ‘IOOOPS’: DISP ERRM$ @ FOR I=1 TO 4 @ BEEP 999,.1 @ NEXT I @ WAIT .5 @ GOTO ‘MENU’ 2330 ‘H’: DISP "Compile:Edit:exit:Help:Run:Setup:Wait" 2340 K$=KEYWAIT$ @ GOTO ‘MENU’ 2350 DATA "B1000","B1004","B1008","B1012" 2360 DATA "B1001","B1005","B1009","B1013" 2370 DATA "B1002","B1006","B1010","B1014" 2380 DATA "B1003","B1007","B1011","B1015" 2390 DATA "B2000","B2004","B2008","B2012" 2400 DATA "B2001","B2005","B2009","B2013" 2410 DATA "B2002","B2006","B2010","B2014" 2420 DATA "B2003","B2007","B2011","B2015" 2430 DATA "B3000","B3004","B3008","B3012" 2440 DATA "B3001","B3005","B3009","B3013" 2450 DATA "B3002","B3006","B3010","B3014" 2460 DATA "B3003","B3007","B3011","B3015" 2470 ‘E1’: OFF IO @ DESTROY ALL @ LC ON 2480 DISP "Done." 2490 END