Also change 2018/burton2/src.doc.rot13 to 2018/burton2/src.doc.txt and address the "SPOILER WARNING" in the manifest.
82 lines
1.8 KiB
Plaintext
82 lines
1.8 KiB
Plaintext
memory map: M (offset, length)
|
|
0,256 tokenization flags
|
|
256,128 keyword length offset map
|
|
384,640 keyword strings (453 chars)
|
|
1024,32 option bit map
|
|
1056,32 getopt string
|
|
1088,256 trigraph map
|
|
|
|
freecode: trinary, alphabet 0 { 1 } 2 ;
|
|
using three trits, the alphabet A-Z with a space/null can be encoded:
|
|
0 space/null, 1 A, 2 B, 3 C, ...
|
|
although this encoding is not the only one
|
|
code is free-form, space agnostic (one or more spaces are required for it to be 'free')
|
|
decoding is context dependent, typically using 3 or more trits
|
|
the program comments use b(3) and the alphabet encoding above,
|
|
but they are not cleanly split on 3-trit boundaries(!)
|
|
|
|
i A cw
|
|
B
|
|
i C cc
|
|
D
|
|
i E cx
|
|
p F[] keywords, token init, options init, option string, trigraph init
|
|
G
|
|
i H comment history
|
|
i I ci
|
|
J
|
|
i K ck
|
|
i L cl
|
|
c M[2053] memory: token flags, keyword table, option table, trigraph table
|
|
N
|
|
p O start of whitespace
|
|
P
|
|
Q
|
|
i R ts
|
|
S
|
|
i T tk
|
|
d U defined usage message (-DU="\"help text\"")
|
|
V
|
|
d W defined reserved word string (-DW=\"keywords\")
|
|
X
|
|
Y
|
|
i Z 256
|
|
i a global
|
|
i b(i) decode freecode using i bits
|
|
i c global
|
|
i d(s,i) is a keyword?
|
|
p e end of buffer
|
|
v f(i,i) compat
|
|
v g(i,i) compat_words
|
|
i h(s,i) print i chars of s, or until null
|
|
p i buffer
|
|
i j() lexer
|
|
k
|
|
i l 10 / newline
|
|
i m(c) want(c), handles escapes
|
|
n global
|
|
i o global
|
|
p
|
|
p q keyword index table
|
|
i r(i,i) print arg1 as int to stdout/err by arg2, trailed by space/newline
|
|
s start of token
|
|
t
|
|
u
|
|
i v cmd line flags
|
|
w
|
|
x
|
|
y
|
|
p z current pointer
|
|
|
|
functions
|
|
|
|
i h(s,i) print i chars of s, or until null
|
|
i r(i,i) print arg1 as int to stdout/err by arg2, trailed by space/newline
|
|
i m(c) want(c), handles escapes
|
|
i d(s,i) is a keyword?
|
|
i j() lexer
|
|
v g(i,i) compat_words
|
|
v f(i,i) compat
|
|
i b(i) decode freecode using i bits
|
|
i main(c,pp) init, options, read, count, print
|