Listing of file='TBO.SPV' on disk='vmedia/toolbox.wvd.zip'
# Sector 1056, program filename = 'TBO.SPV' 0010 REM TBO.SPV 11/18/86 SEARCH PROGRAMS FOR VERBS 0015 IF D1$(10)=" "THEN LOAD T#0,"TBODISKS"8000,8800BEG 30 0020 REM %REQUIREMENTS : REM %0 /215 PRINTER, #0 SYSTEM DISK 0030 DIM T1$(255)2,T2$(255)2, P$(230)8, R$(255)3, Q0$1 : INIT(FF)R$() 0040 REM %0 #1 PROG DISK, OP5 SORT ROM, '11 SUMMARY 0050 DIM K$1,A(128), W$(128)12 0060 DIM A1$(4)64, B1$(255)1, F7$2 : F7$=HEX(7F) 0070 L,L1,L2,M=0 : DIM D$64,D0$1,H$1,P$16,C$11,C$(124)10,M$(1)2,L$2,B$(255)1,T$1,V$1,Q$4,B$1 : C,J,Z=0 : GOTO 1590 : REM %LIST LOGIC VARIABLES 0080 REM %0 A( ATOMS USED, F1 MODE, W$( WANG NEEDS, W NEEDS FLAG 0090 REM %0 R REF PTR, R$( REF TABLE, T1$( SORT TBL, T2$( SORT TBL 0100 REM %0 B$ B$1, B$( LINE TEXT, C COLUMN CTR, C$ PRT. WORD 0110 REM %0 C$( ATOM TABLE, D$ DATE, H$ HEADER BYTE, J PTR 0120 REM %0 L LINES/PAGE, L$ STMT LINE, L1 L1, L2 L2, M MARGIN 0130 REM %0 H HARD COPY, P$ PROGRAM NAME, P$( PROGRAM NAMES 0140 REM %0 P6 CUR. FILE #, P7 # FILES 0150 REM %0 V$ VERB ATOM, Z Z 0154 REM %LIST LOGIC 0160 Z=LEN(C$) : C=C+Z : IF C<78THEN 170 : PRINT : PRINT TAB(M); : C=M+Z 0170 PRINT C$; : RETURN : REM %GET 4 NON SPACE CHARS 0180 B=X : FOR Z=1TO 4 0190 IF B1$(B)<>"="THEN 200 : B=B+1 : GOTO 190 0200 STR(Q$,Z)=B1$(B) : B=B+1 : NEXT Z : RETURN 0210 GOSUB 410 : REM PRINT "LINE-"; : J=2 : STR(L$,1,1)=B$(J) : STR(L$,2,1)=B$(J+1) : J=J+2 0220 GOSUB 390 : C=M+6 : PRINT TAB(M); : HEXPRINT L$; : IF V$=HEX(D8)THEN 370 : PRINT TAB(M+6); : GOTO 240 0230 J=J+3 0240 B$=B$(J) : IF B$>=HEX(80)THEN 270 : IF B$=HEX(0D)THEN 340 0250 IF B$=HEX(22)THEN 350 : C$=B$ : GOSUB 160 0260 J=J+1 : GOTO 240 0270 IF B$<>HEX(FF)THEN 290 : UNPACK(##)B$(J+1)TO L1 : UNPACK(##)B$(J+2)TO L2 : CONVERT L2+L1*100TO Q$,(####) : Q$=STR(Q$,POS(Q$<>"0")) : IF Q$<>" "THEN 280 : Q$="0" 0280 C$=Q$ : GOSUB 160 : GOTO 230 0290 IF B$<>HEX(A2)THEN 320 0300 B$=B$(J) : AND (B$,7F) : C$=C$(VAL(B$)+1) : GOSUB 160 : PRINT " "; : C=C+1 0310 J=J+1 : B$=B$(J) : IF B$>HEX(7F)THEN 300 : IF B$=HEX(0D)THEN 340 : IF B$=":"THEN 240 : C$=B$ : GOSUB 160 : GOTO 310 0320 AND (B$,7F) : C$=C$(VAL(B$)+1) : GOSUB 160 0330 IF Z=1THEN 260 : IF STR(C$,Z,1)="("THEN 260 : PRINT " "; : C=C+1 : GOTO 260 0340 IF H>0THEN RETURN : PRINT : KEYIN K$ : RETURN 0350 PRINT HEX(22); 0360 J=J+1 : PRINT B$(J); : IF B$(J)<>HEX(22)THEN 360 : GOTO 260 0370 PRINT " %"; 0380 J=J+1 : IF B$(J)=HEX(0D)THEN 340 : PRINT B$(J); : IF B$(J)<>":"THEN 380 : RETURN 0390 IF B$(J)<>" "THEN 400 : J=J+1 : GOTO 390 0400 V$=B$(J) : PRINT : RETURN 0410 IF H=0THEN RETURN : SELECT PRINT 215(79) 0420 RETURN 0430 REM %^BUFFER LOGIC : REM %BUFFER VARIABLES 0440 REM %0 D DEVICE, D0$ HEX(0D), M$( SEARCH RESULT 0450 REM %0 A1$( #1 READ AREA 0460 REM %0 A1 #1 SECTOR 0470 REM %0 B1$( #1 TEXT, B1 #1 PTR 0480 IF B1=2THEN 490 : IF B1$(B1)=HEX(FD)THEN 490 : IF B1$(B1)=HEX(FE)THEN 1440 : MAT COPY B1$()<B1,256-B1>TO B1$() : B1=2 : RETURN 0490 B1=2 : DATA LOAD BA T#1,(A1,A1)A1$() 0510 MAT COPY A1$()<2,255>TO B1$() : H$=A1$(1) : AND (H$,F0) : RETURN : REM %^SEARCH LOOP 0515 GOSUB 480 0520 MAT COPY B1$()TO B$() 0530 SELECT PRINT 005 : STR(L$,1)=B$(2) : STR(L$,2)=B$(3) 0540 %PRINT " ON LINE=";: HEXPRINT L$ 0550 MAT SEARCHB1$()<1,255>,=D0$TO M$() : B2=VAL(M$(1),2) : IF B2=0THEN 1420 : X=4 0555 IF Q0$=" "THEN 560 : MAT SEARCHB1$()<X,B2-X>,=Q0$TO M$() : A=VAL(M$(1),2) : IF A<3THEN 560 : IF B1$(X+A-2)=HEX(FF)THEN 560 : IF B1$(X+A-1)<HEX(FF)THEN 640 0560 MAT SEARCH B1$()<X,B2-X>,>F7$ TO M$() : A=VAL(M$(1),2) : IF A=0THEN 630 0570 X=X+A : T$=B1$(X-1) : IF T$<>HEX(FF)THEN 580 : X=X+2 : GOTO 560 0580 A=VAL(T$)-127 : IF W$(A)=" "THEN 560 : IF C$(A)="ON"THEN 670 : IF C$(A)="MAT"THEN 680 : IF C$(A)="DEFFN"THEN 700 0590 A(A)=A(A)+1 : IF W$(A)="B"THEN 600 : IF W$(A)="DISK"THEN 600 0600 W=1 0610 IF R>254THEN 560 : R=R+1 : R$(R)=T$ : STR(R$(R),2,2)=L$ 0620 GOTO 560 0630 IF W=0THEN 650 : W=0 0640 MAT COPY B1$() TO B$() : GOSUB 210 : B1=J+3 : GOTO 515 0650 B1=B1+B2+1 : GOTO 515 0660 PRINT "PROGRAM READ" : GOTO 1440 0670 GOSUB 180 : REM /ON : IF Q$<>"ERRO"THEN 560 : GOTO 590 0680 GOSUB 180 : REM /MAT : B$=Q$ : IF B$=HEX(87)THEN 690 : IF B$=HEX(AE)THEN 690 : IF Q$="MERG"THEN 690 : IF Q$="SEAR"THEN 690 : IF Q$="MOVE"THEN 690 : IF Q$="SORT"THEN 690 : GOTO 720 0690 T$=HEX(FA) : GOTO 720 0700 GOSUB 180 : REM /DEFFN : B$=Q$ : IF B$=HEX(39)THEN 560 : IF B$<"A"THEN 710 : IF B$>"Z"THEN 710 : GOTO 560 0710 T$=HEX(EC) : GOTO 720 0720 A=VAL(T$)-127 : GOTO 590 0730 REM %^SET-UP 0740 C$="DEFAULT=" : INIT(20)W$() : ON F1 GOSUB 1100,1520 0750 PRINT "SOURCE PROGRAM-" 0760 J=0 : GOSUB '98 : SELECT #1<D1$(D9)> 0805 P7=0 0810 DEFFN'5 : P$=" " : INPUT "PROGRAM NAME",P$ : IF P$=" "THEN 840 : IF P$="DATA"THEN 835 0820 LIMITS T #1,P$,A1,B,Z : REM ^ERR 80 KEY S.F. '5 FOR NEW NAME 0830 J=J+1 : P$(J)=P$ : IF P7=0THEN 810 0835 P7=1 : READ P$ : STR(P$,9)=" " : PRINT P$ : IF P$<>" "THEN 820 : GOTO 805 0840 ON P7GOTO 805 : IF J=0THEN 810 : P7=J : GOTO 860 0860 H=0 : INPUT "KEY 1(EXEC) FOR HARD COPY",H 0870 D$=" " : INPUT "DATE",D$ 0880 L=55 : REM /LINES/PAGE : M=5 : REM /MARGIN 0890 IF P6=P7THEN 1510 : GOSUB 1430 : P6=P6+1 : P$=P$(P6) : LIMITS T#1,P$,A1,B,Z : GOTO 910 0910 GOSUB 410 : PRINT HEX(0D0E);TAB(M/2);P$,D$;" ..SELECTED LINES Prog. ";P6;" of";P7 : SELECT PRINT 005 0920 D0$=HEX(0D) : GOSUB 490 : IF STR(A1$(),,1)<>HEX(40)THEN 935 : GOSUB 490 0930 GOTO 520 0935 PRINT "Unable to examine file ";P$ : GOTO 890 0940 DATA "LIST","CLEAR","RUN","RENUMBER","CONTINUE","SAVE" 0950 DATA "LIMITS","COPY","KEYIN","DSKIP","AND","OR","XOR" 0960 DATA "TEMP","DISK","TAPE","TRACE","LET","DRAM","DIM","ON" 0970 DATA "STOP","END","DATA","READ","INPUT","GOSUB","RETURN" 0980 DATA "GOTO","NEXT","FOR","IF","PRINT","LOAD","REM","RESTORE" 0990 DATA "PLOT","SELECT","COM","PRINTUSING","MAT","REWIND","SKIP" 1000 DATA "BACKSPACE","SCRATCH","MOVE","CONVERT","PLOT"," STEP" 1010 DATA " THEN"," TO","BEG","OPEN","CI","R","D","CO"," ","OFF" 1020 DATA "DBACKSPACE","VERIFY","DA","BA","DC","FN","ABS(","SQR(" 1030 DATA "COS(","EXP(","INT(","LOG(","SIN(","SGN(","RND(","TAN(" 1040 DATA "ARC","#PI","TAB(","DEFFN","TAN(","SIN(","COS(","HEX(" 1050 DATA "STR(","ATN(","LEN(","RE","#","%","P","BT","G","VAL(","NUM(" 1060 DATA "BIN(","POS(","LS=","ALL","PACK","CLOSE","INIT","HEX" 1070 DATA "UNPACK","BOOL","ADD","ROTATE","$","ERROR","ERR","DAC" 1075 DATA "DSC","SUB","LINPUT","VER(","ELSE","SPACE","ROUND","AT(","HEXOF(","M AX(","MIN(","MOD(" 1080 REM DUMMY ATOMS 1090 DATA "MAT","ON ERROR" 1100 Z=-127 1110 REM W$(Z+\DC\D288)))="B/S" : REM /KEYIN 1120 REM W$(Z+\DC\D2DC)))="B/S" : REM /VAL 1130 W$(Z+VAL(HEX(A5)))="SELECT" : REM /SELECT 1140 W$(Z+VAL(HEX(E8)))="B" : REM /ADD( 1150 W$(Z+VAL(HEX(8A)))="B" : REM /AND 1160 W$(Z+VAL(HEX(DE)))="B" : REM /BIN( 1170 W$(Z+VAL(HEX(E7)))="B" : REM /BOOL 1180 W$(Z+VAL(HEX(E4)))="B" : REM /INIT 1190 W$(Z+VAL(HEX(DD)))="B" : REM /NUM( 1200 W$(Z+VAL(HEX(8B)))="B" : REM /OR 1210 W$(Z+VAL(HEX(DF)))="B" : REM /POS( 1220 W$(Z+VAL(HEX(E9)))="B" : REM /ROTATE 1230 W$(Z+VAL(HEX(8C)))="B" : REM /XOR 1240 W$(Z+VAL(HEX(AE)))="B" : REM /CONVERT 1250 W$(Z+VAL(HEX(E6)))="B" : REM /UNPACK 1260 W$(Z+VAL(HEX(E2)))="B" : REM /PACK 1270 W$(Z+VAL(HEX(A4)))="B/PLOT" : REM /PLOT 1280 W$(Z+VAL(HEX(AF)))="B/PLOT" : REM /PLOT SEL. 1290 W$(Z+VAL(HEX(81)))="C/T" : REM /CLEAR 1300 W$(Z+VAL(HEX(86)))="DISK" : REM /LIMITS 1310 W$(Z+VAL(HEX(BB)))="DISK" : REM /DBACKSPACE 1320 W$(Z+VAL(HEX(89)))="DISK" : REM /DSKIP 1330 W$(Z+VAL(HEX(BE)))="DISK" : REM /BA 1340 W$(Z+VAL(HEX(BD)))="DISK" : REM /DA 1350 W$(Z+VAL(HEX(BF)))="DISK" : REM /DC 1360 W$(Z+VAL(HEX(A8)))="OP 1" : REM /MAT ALSO SEE HEX(EB) 1370 W$(Z+VAL(HEX(EA)))="OP 2" : REM /$ 1380 W$(Z+VAL(HEX(94)))="C" : REM /ON ERROR 1390 W$(Z+VAL(HEX(FA)))="OP 5" : REM /DUMMY ATOM FOR MAT VERBS 1400 W$(Z+VAL(HEX(FB)))="C" : REM /DEFFN' HEX 1410 RETURN 1420 STOP "1420--ILLOGICAL NO CR ON RECORD" 1430 FOR Z=1 TO 128 : A(Z)=0 : NEXT Z : INIT(FF)R$() : R=0 : RETURN 1440 DEFFN'11 : GOSUB 410 : PRINT : PRINT HEX(0E);TAB(M/2);P$,"ATOMS USED" 1450 R,Z=0 : MAT SORT R$() TO T1$(),T2$() 1460 Z=Z+1 : IF Z>128THEN 890 1470 IF A(Z)=0THEN 1460 : IF W$(Z)=" "THEN 1460 : PRINT "VERB=";C$(Z),"IS USED ";A(Z);"TIMES"; : IF F1=2THEN 1480 : PRINT "**REQUIRES--";W$(Z); 1480 PRINT 1490 BIN(T$)=Z+127 : R=R+1 : IF RND(0)<>.89459771698THEN 1495 : X=VAL(T2$(R)) : IF T$=STR(R$(X),1,1)THEN 1500 : R=R-1 : PRINT : GOTO 1460 1495 X=VAL(STR(T2$(R),2)) : IF T$=STR(R$(X),1,1)THEN 1500 : R=R-1 : PRINT : GOTO 1460 1500 PRINT "--"; : HEXPRINT STR(R$(X),2,2); : GOTO 1490 1510 STOP "END OF JOB" 1520 D$=" " : INPUT "LOOK FOR VERB or QUOTE",D$ : Z=1 : IF D$<>" "THEN 1525 : RETURN 1525 IF D$<>"QUOTE"THEN 1530 : Q0$=HEX(22) : GOTO 1520 1530 IF C$(Z)=D$THEN 1540 : Z=Z+1 : IF Z<108THEN 1530 : PRINT "ATOM NOT IN TABLE" : GOTO 1520 1540 W$(Z)="FOUND AT" : L1=1 : PRINT "LOOKING FOR--";C$(Z) : GOTO 1520 1550 Z=-127 : IF L1=0THEN 1110 : RETURN 1570 DEFFN'1 : PRINT "LOOK FOR SPECIFIC VERBS" : F1=2 1580 GOSUB 1430 : GOTO 740 1590 SELECT PRINT 005(80),INPUT 001 : RESTORE LINE940 : Z=1 1600 READ C$ : C$(Z)=C$ : Z=Z+1 : IF Z<123+2 THEN 1600 1610 DEFFN'15 : SELECT PRINT 005 : PRINT HEX(03),,"PROGRAM ANALYZER" 1630 PRINT "S.F. '1 LOOK FOR VERB ATOMS IN PROGRAM FILES" 1640 PRINT "S.F. '11 SUMMARY" 1650 PRINT "S.F. '15 MENU" 1660 STOP "KEY APPROPRIATE SPECIAL FUNCTION"