Grant Weasner <
usenet@vk3heg.net> schrieb:
If I had just put:
10 list
20 goto 10
it wouldn't work because list executes something like a run-stop first.
This works silmilarily as your program for me: The programm lists itself and
then stops. I wonder why.
I tested this with vice and yapesdl.
I'll try to comment your program:
Lines 5 to 9 copies the BASIC keywords to k$() array.
5 print "initializing...": dim k$(255): rp=41111
6 for t=124 to 255: w$="": rem --- fill the cache ---
7 b=peek(rp): w$=w$+chr$(b and 127): rp=rp+1
8 if b<128 goto 7
9 k$(t)=w$+" ": if rp < 41581 then next t
The BASIC program starts at 2049, this is the addres of the first line;
clear the screen
10 ad = 2049: print chr$(147)
The next BASIC line number is at this address
20 nx = peek(ad) + 256 * peek(ad+1)
This is the end of the program
30 if nx = 0 then end
Get the BASIC program line number and print it
40 ln = peek(ad+2) + 256 * peek(ad+3)
50 print ln; " ";
Loop from line's start of text to end of line
60 for i = ad + 4 to nx - 2
Get a byte. If its value less than 128 then it is a character, print it
70 c = peek(i): if c < 128 then print chr$(c);: goto 100
It is a BASIC token, lookup in keywords table and print it.
80 print k$(c);
Loop end; print an empty line; next BASIC line address; restart loop
100 next i: print: ad = nx: goto 20
Best regards,
Tilmann.
--
Wo sich noch Bit und Byte gute Nacht sagen.
--- PyGate Linux v1.5.11
* Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)