Listing of file='PROGVERB' on disk='vmedia/tbo_81.wvd.zip'
# Sector 780, program filename = 'PROGVERB' 0010 REM "PROGVERB" T.OLSEN 11/15/79 PROGRAM ANALYZER 0020 REM %REQUIREMENTS : REM %0 /215 PRINTER, #0 (CASSETTE) 0030 DIM T1$(255)2,T2$(255)2, P$(30)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 : REM %K.B.WAIT 0152 KEYIN K$,154,154 0153 RETURN 0154 KEYIN K$,153,153 : GOTO 154 : 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 : 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 PRINT : GOSUB 152 : 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 420 : 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 660 : MAT COPY B1$()<B1,256-B1>TO B1$() : B1=2 : RETURN 0490 B1=2 : IF D=0THEN 500 : DATA LOAD BA T#1,(A1,A1)A1$() : GOTO 510 0500 DATA LOAD BTA1$() 0510 MAT COPY A1$()<2,255>TO B1$() : H$=A1$(1) : AND (H$,F0) : RETURN : REM %^SEARCH LOOP 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=256*VAL(M$(1))+VAL(STR(M$(1),2)) : IF B2=0THEN 1420 : X=4 0555 IF Q0$=" "THEN 560 : MAT SEARCHB1$()<X,B2-X>,=Q0$TO M$() : A=256*VAL(M$(1))+VAL(STR(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=256*VAL(M$(1))+VAL(STR(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 : PRINT TAB(20);"ATOM="; : HEXPRINT T$; : PRINT " ";C$(VAL(T$)-127) 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 : GOSUB 480 : GOTO 520 0650 B1=B1+B2+1 : GOSUB 480 : GOTO 520 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 D=1 : J=0 : PRINT "0=TAPE OR DISKS 1=(F)310 2=(R)B10 3=(F)320 4=(R)B20",C$;D; : INPUT D : ON D+1GOTO 850,770,780,790,800 : GOTO 760 0770 SELECT #1 310 : GOTO 805 0780 SELECT #1 B10 : GOTO 805 0790 SELECT #1 320 : GOTO 805 0800 SELECT #1 B20 0805 P7=0 0810 DEFFN'5 : P$=" " : D=1 : INPUT "PROGRAM NAME",P$ : IF P$=" "THEN 840 : IF P$="DATA"THEN 835 0820 LIMITS T #1,P$,A,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 0850 P7=1 : PRINT "HOW MANY FILES (DEFAULT)=";P7 : INPUT P7 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 : IF D=0THEN 900 : P$=P$(P6) : LIMITS T#1,P$,A1,B,Z : GOTO 910 0900 GOSUB 500 : P$=STR(A1$(1),2,8) 0910 GOSUB 410 : PRINT HEX(0C0E);TAB(M/2);P$,D$ : PRINT TAB(M);"SELECTED STATEMENT LINES" : SELECT PRINT 005 0920 D0$=HEX(0D) : B1=2 : GOSUB 480 : B1=2 : GOSUB 480 0930 GOTO 520 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 : PRINT HEX(0E);" ATOMS USED",P$,D$ 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 1560 DEFFN'0 : PRINT "ANALYZE CONFIGURATION" : F1=1 : GOTO 1580 1570 DEFFN'1 : PRINT "LOOK FOR SPECIFIC VERBS" : F1=2 1580 GOSUB 1430 : GOTO 740 1590 SELECT PRINT 005(64),INPUT 001 : PRINT HEX(03);"PROGRAM ANALYZER" : RESTORE : 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" 1620 PRINT "S.F. '0 DETERMINE CONFIGURATION FOR PROGRAM FILES" 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"