0 DIM C$(254),Y(200):: GOTO 32707 :: !@P- 32707 DISPLAY AT(1,1)ERASE ALL:"TOKEN/READ by B.A. Traver" :: DISPLAY AT(3,6):"I n purpose, TOKEN/READ":"is similar to my MERGE/READ" 32708 DISPLAY AT(5,1):"program published in the":"March 1984 issue of *THE":"SMA RT PROGRAMMER*." 32709 DISPLAY AT(9,6):"This program provides":"access to the actual tokens":"use d by a BASIC program and":"assists you in understanding" 32710 DISPLAY AT(13,1):"the meaning and use of those":"tokens." :: DISPLAY AT(16 ,6):"MERGE/READ provided":"*sequential access* to the" 32711 DISPLAY AT(18,1):"program in merge format on":"disk; TOKEN/READ provides": "*random access* to the pro-":"gram in actual (you guessed" 32712 DISPLAY AT(22,1):"it) RAM.": :"(Press any key to continue.)" 32713 CALL KEY(0,K,S):: IF S=0 THEN 32713 32714 DISPLAY AT(1,1)ERASE ALL:"TOKEN/READ by B.A. Traver" :: DISPLAY AT(3,6):"B efore you can use this":"program you must first save" 32715 DISPLAY AT(5,1):"it to disk using the commandSAVE DSK1.TOKEN/READ, MERGE." :: DISPLAY AT(8,6):"To use this program," 32716 DISPLAY AT(9,1):"follow the following steps:" :: DISPLAY AT(11,6):"(1) Loa d the program":"you want to inspect into" 32717 DISPLAY AT(13,1):"memory in the usual way,":"i.e., OLD DSK1.PROGRAM." :: D ISPLAY AT(16,6):"(2) Merge this program" 32718 DISPLAY AT(17,1):"into memory with it, by":"means of the command MERGE DS K1.TOKEN/READ." 32719 DISPLAY AT(21,6):"(3) RUN the merged":"program." :: DISPLAY AT(24,1):"(Pre ss any key to continue.)" 32720 CALL KEY(0,K,S):: IF S=0 THEN 32720 32721 DISPLAY AT(1,1)ERASE ALL:"TOKEN/READ by B.A. Traver" :: DISPLAY AT(3,6):"A ll you have to do is":"provide the line number of" 32722 DISPLAY AT(5,1):"the program line you want toinspect, and this program d oes the rest!" 32723 DISPLAY AT(9,6):"CAUTION: If you provide":"a non-existent line number,":"y ou will get nonsense on thescreen." 32724 DISPLAY AT(14,6):"This is in accordance" :: DISPLAY AT(15,1):"with the old saying in the Army Computer Corps, ""G.I." 32725 DISPLAY AT(17,1):"Gee-Oh!"" (pronounced ""G.I.":"Joe"" with a slight accen t)!" :: DISPLAY AT(20,6):"(Soon available should" 32726 DISPLAY AT(21,1):"be a program upgrade which allows output to printer.)": :"(Press any key to continue.)" 32727 CALL KEY(0,K,S):: IF S=0 THEN 32727 ELSE DISPLAY AT(14,7)ERASE ALL:"INITIA LIZING...." 32728 FOR I=129 TO 254 :: READ C$(I):: NEXT I 32729 DISPLAY AT(12,10)ERASE ALL:"LINE?" :: ACCEPT AT(12,16):L :: DISPLAY AT(14, 9):"SEARCHING...." :: CALL FIND(L,J):: CALL PEEK(J,A1) 32730 FOR I=1 TO A1 :: CALL PEEK(J+I,A):: Y(I+2)=A :: NEXT I :: CALL CLEAR :: DI SPLAY AT(1,4):"ASCII CODE FOR LINE" 32731 IF L=65535 THEN 32748 32732 L1=INT(L/256):: L2=L-(L1*256) 32733 DISPLAY AT(1,24):STR$(L):: C=1 :: J=2 32734 S1=LEN(STR$(L1)):: DISPLAY AT(3,4-S1):STR$(L1)&" "&STR$(L1)&"*256" :: S2=L EN(STR$(L2)):: DISPLAY AT(4,4-S2):STR$(L2)&" +"&STR$(L2) 32735 FOR I=3 TO A1+2 32736 R=I+2+2*(C-1):: IF I>40 THEN R=R-16 :: IF I>80 THEN R=R-16 :: IF I>120 THE N R=R-16 32737 J=J+1 :: DISPLAY AT(R,C+3-LEN(STR$(Y(I)))):STR$(Y(I)) 32738 DISPLAY AT(R,C+3-LEN(STR$(Y(I)))):STR$(Y(I)) 32739 IF Y(I-2)=201 THEN IF Y(I-1)=0 THEN DISPLAY AT(R,C+4):STR$(Y(I)):: GOTO 32 744 ELSE DISPLAY AT(R,C+4):"+"&STR$(Y(I)):: GOTO 32744 32740 IF Y(I-1)=201 THEN IF Y(I)=0 THEN 32744 ELSE DISPLAY AT(R,C+4):STR$(256*Y( I)):: GOTO 32744 32741 IF Y(I)>254 THEN DISPLAY AT(R,C+4):"*" 32742 IF Y(I)>128 AND Y(I)<255 THEN DISPLAY AT(R,C+4):C$(Y(I)) 32743 IF Y(I)>31 AND Y(I)<128 THEN DISPLAY AT(R,C+4):CHR$(Y(I)) 32744 IF J<20 THEN 32747 32745 C=C+14 :: J=0 :: IF C>16 THEN C=1 32746 IF I=40 OR I=80 OR I=120 THEN 32750 32747 NEXT I :: IF I=LEN(X$)+1 THEN 32750 32748 GOSUB 32752 32749 GOTO 32729 32750 GOSUB 32752 32751 IF I<>LEN(X$)+1 THEN 32747 ELSE 32731 32752 DISPLAY AT(24,3)BEEP:"PRESS ANY KEY TO GO ON" 32753 CALL KEY(0,K,S):: IF S=0 THEN 32753 32754 FOR CL=3 TO 24 :: DISPLAY AT(CL,1):"" :: NEXT CL :: RETURN 32755 !@P+ 32756 A1,A,C,CL,I,J,K,L,L1,L2,R,S,S1,S2,N$,X$ :: CALL CLEAR :: CALL FIND :: CALL KEY :: CALL PEEK 32757 DATA ELSE,::,!,IF,GO,GOTO,GOSUB,RETURN,DEF,DIM,END,FOR,LET,BREAK,UNBREAK,T RACE,UNTRACE,INPUT,DATA,RESTORE,RANDOMIZE 32758 DATA NEXT,READ,STOP,DELETE,REM,ON,PRINT,CALL,OPTION,OPEN,CLOSE,SUB,DISPLAY ,IMAGE,ACCEPT,ERROR,WARNING,SUBEXIT,SUBEND,RUN 32759 DATA LINPUT,,,,,,THEN,TO,STEP,",",;,:,),(,&,,OR,AND,XOR,NOT,=,<,>,+,-,*,/, ^,,""" """,,,EOF,ABS,ATN,COS,EXP,INT 32760 DATA LOG,SGN,SIN,SQR,TAN,LEN,CHR$,RND,SEG$,POS,VAL,STR$,ASC,PI,REC,MAX,MIN ,RPT$,,,,,,,NUMERIC,DIGIT,UALPHA,SIZE,ALL 32761 DATA USING,BEEP,ERASE,AT,BASE,,VARIABLE,RELATIVE,INTERNAL,SEQUENTIAL,OUTPU T,UPDATE,APPEND,FIXED,PERMANENT,TAB,#,VALIDATE 32762 SUB FIND(L,S)! Michael Riccio assisted with subprogram. 32763 CALL PEEK(-31952,A,B,C,D):: X=A*256+B-65536 :: Y=C*256+D-65536 32764 L1=INT(L/256):: L2=L-256*(INT(L/256)):: S=0 32765 IF X>Y THEN SUBEXIT 32766 CALL PEEK(X,A,B,C,D):: IF A<>L1 OR B<>L2 THEN X=X+4 :: GOTO 32765 32767 S=C*256+D-65537 :: SUBEND