|
|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 65280 (0xff00)
Types: TextFile
Names: »ass31tx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
└─⟦75ff9bef3⟧
└─⟦this⟧ »ass31tx «
\f
m. slang text 1
b. g4
d.
p.<:fpnames:>
l.
m. slang text 1
m.rc 1985.03.28
s.k=10000,j44,i37,g82,e63,d12,c56
; use of slang names:
; a local labels
; b local variables and constants
; c constants
; d labels
; e procedures
; f assembly variables
; g variables
; h fp-names
; i control variables
; j code modifications
; control variables:
i0=-1 ; local listing = true
i1=20 ; standard work area size
c. h57 < 3 ; if system 3 then
i1=1<1+1 ; standard work area size, and -device
z.
t.
; variables 1
w.g63: i11 ; length ; current word
; g64 and g65 used together
g64: d7. ; entry: ; current word addr
g65: am. (-2) ; goto init; ; last word addr
g34: jl. -4 ; source
g36: 0 ; slang generated name
g37: 0 ; segments
2<12+4 ; content=2, entry=4
g38: 0 ; bytes
g39: 0,r.4 ; source chain
g40: -1 ; inblock addr-2
g41: -1 ; outblock addr
g46: -1 ; saved size
g43: 0,r.4 ; result name
w. ; xref zone descriptor:
0,r.5 ; z+h0+0: base buffer area
; z+h0+2: last of buffer
; z+h0+4: used share
; z+h0+6: first share (=g71)
; z+h0+8: last share (=g71)
i1 ; z+h1+0: std sortarea size (in system 2)
0,r.8 ; z+h1+2: document name
; z+h1+10: name table address
; z+h1+12: file count (not used)
; z+h1+14: block count
; z+h1+16: segment count
0,r.4 ; z+h2+0: give up mask (=0)
; z+h2+2: give up action
; z+h2+4: partial word
; z+h2+6: free parameter (=saved record base)
g70: -1,r.3 ; z+h3+0: record base (=-1, if not used...)
; z+h3+2: last byte
; z+h3+4: record length
; z+h3+6: free parameter (omitted)
; users parameters (omitted)
h.g71: 0,r.h6,w. ; s+0: state
; s+2: first shared (=d8)
; s+4: last shared
; s+6: latest message
; s+22: top transferred
; procedure outsegment;
; comment: outputs a slang segment by means of the fp
; outblock procedure.
; call: exit:
; w0 destroyed
; w1 seg addr destroyed
; w2 prog top destroyed
; w3 return destroyed;
b.b5,a4
w. ; outsegment zone descriptor:
0,r.5 ; z+h0+0: base buffer area
; z+h0+2: last of buffer
; z+h0+4: used share
; z+h0+6: first share
; z+h0+8: last share
0,r.9 ; z+h1+0: 1<11 + mode, kind
; z+h1+2: document name
; z+h1+10: name addr
; z+h1+12: file count
; z+h1+14: block count
; z+h1+16: segment count
0,r.4 ; z+h2+0: give up mask
; z+h2+2: give up action
; z+h2+4: partial word
; z+h2+6: free parameter (=buffer addr)
g35: 0,r.3 ; z+h3+0: record base
; z+h3+2: last byte
; z+h3+4: record length
; z+h3+6: free parameter (omitted)
; users parameters (omitted)
h. 0,r.h6 ; s+0: state
; s+2: first shared
; s+4: last shared
; s+6: latest message
; s+22: top transferred
w.b0: 0 ; saved prog top
b1: 0 ; saved return
b2: 0 ; next out
b3: 0 ; base
b4: 0 ; saved seg addr
b5: 1 ; outsize
e0: ds.w3 b1. ; begin
rs.w1 b4.
rl.w0 b2. ; if tape version then
; jl. j20-e0-4 ; goto tape version;
ws w1 0
rs.w1 b3. ; base:= seg addr-next out;
sh w0 0 ; if next out<=0 then
jl. a2. ; goto test more;
rl.w2 g35.+h2+6 ; first shared:= buffer addr;
rs.w2 g35.+6+2
al w3 x2+510 ; last addr of transfer:=
rs.w3 g35.+6+10 ; first shared+510;
; test if it is nescesarry to output the xref buffer...
al.w1 g70. ; save xref buffer:
rl w3 x1+h3+0 ; save xref record base;
rs w3 x1+h2+6 ;
sl.w3(g71.+2) ; if record base >= first shared then
jl.w3(g41.) ; outblock;
al.w1 g35.
al w3 -1
wa.w3 g35.+h1+16; segment count:=
rs.w3 g35.+h1+16; segment count-1;
rl.w3 g40.
jl w3 x3+2 ; inblock;
al w3 -1
wa.w3 g35.+h1+16; segment count:=
rs.w3 g35.+h1+16; segment count-1;
rl.w3 b0.
ws.w3 b3.
sl w3 514 ; limit:= min(prog top
al w3 512 ; -base,512);
al w3 x3-2 ; limit:= limit-2;
hs.w3 a1.
rl.w1 b3.
rl.w2 b2.
rl.w3 g35.+6+2
a0: al w2 x2+2 ; again:
am x2-2 ; next out:= next out+2;
rl w0 x1+0
am x2-2 ; word(first shared+next out-2):=
rs w0 x3+0 ; word(base+next out-2);
a1=k+1
sh w2;limit ; if next out<=limit then
jl. a0. ; goto again;
al w1 x1+512 ; base:= base+512;
rs.w1 b3.
al.w1 g35.
jl.w3(g41.) ; outblock;
al w3 510
la w2 6 ; next out:= next out
rs.w2 b2. ; and 510;
; test if the xref buffer is to be reestablished...
rl.w0 g70.+h2+6 ; restore xref buffer:
sn.w0(g70.+h3+0); if record base <> saved record base then
jl. a2. ; begin
rl.w2 g70.+h1+16; segment count := segment count - 1;
al w2 x2-1 ;
rs.w2 g70.+h1+16;
al.w1 g70. ;
am. (g40.) ; inblock(xref zone);
jl w3 +2 ; reset segment count;
rs.w0 g70.+h3+0 ; record base := saved record base;
rs.w2 g70.+h1+16; end;
a2: rl.w2 b0. ; test more:
rl.w1 b3.
sh w2 x1+0 ; if prog top<=base then
jl. a4. ; goto exit;
ws w2 2 ; first shared:= base;
al w2 x2+510 ; outsize:= (prog top
ls w2 -9 ; -base+510)//512;
c. h57 < 2 ; if system 2 then include the following:
rl.w3 g46.
ws.w3 g35.+h1+16; room:= saved size-segment count;
sh w2 x3+0 ; if outsize>room then
jl. a3. ; begin
rl.w0 g46. ; bytes:= saved size
ls w0 9 ; *512-prog top
ws.w0 b0. ; +seg addr;
wa.w0 b4.
rs.w0 g38.
al w2 x3+0 ; outsize:= room;
al.w3 c1.
rl w0 x3+i14 ; kill outsegment;
rs.w0 e0. ; write error return(
al w0 x3+i22 ; <:program too big:>)
jl w3 x3+i21 ; end;
z. ; end system 2;
a3: rs.w2 b5.
ls w2 9 ; last addr of transfer:= base
wa w2 2 ; +outsize*512-2;
; goto outblock;
j20: al w3 x2-2 ; tape version:
rs.w1 g35.+6+2 ; first shared:= seg addr;
rs.w3 g35.+6+4 ; last shared:= prog top-2;
rs.w3 g35.+6+10 ; last addr of transfer:= prog top-2;
al.w1 g35. ; outblock:
sl.w3(g35.+6+2) ; if last addr of transfer>=first shared then
jl.w3(g41.) ; outblock;
rl.w3 b0.
ws.w3 b3.
al w0 510 ; next out:=
la w0 6 ; (prog top-base)
rs.w0 b2. ; and 510;
a4: rl.w2 b0. ; exit:
ws.w2 b4.
wa.w2 g38. ; bytes:= bytes
rs.w2 g38. ; +prog top-seg addr;
rl.w2 b5.
se w2 0 ; if outsize<>0 then
am 1
al w2 0
wa.w2 g37. ; segments:= segments+1;
rs.w2 g37.
jl. (b1.) ; end outsegment;
j21: jl. j20-e0-4
c.i0i.z.
e.
b.b2,a7
w.b0: -1 ; saved w3
b1: -1 ; saved w3
b2: -1 ; saved w0
; procedure stack in(current chain);
; comment: sets chain to current chain and continues with e32;
w.e38: am -2
; procedure stack in(chain);
; comment: uses the corresponding fp procedure.
; call: exit:
; w0 destroyed
; w1 in descr
; w2 chain
; w3 return destroyed;
w.e32: al w0 h29-2 ; begin
al w1 1
wa.w0 g52.
rs.w0 b0.
al w0 -1 ; record base:=
aa.w1 g65. ; current word addr-1;
am. (g52.) ; last byte:=
ds w1 h20+h3+2 ; last word addr+1;
rl.w1 g63. ; partial word:= current word;
am. (g52.)
rs w1 h20+h2+4 ; stack input(chain)
jl. (b0.) ; end;
; procedure init in;
; comment: initialises the variables for character reading.
; call: exit:
; w0 0
; w1 in descr
; w2 destroyed
; w3 return destroyed;
w.e37: al w0 0 ; begin
rs.w3 b0. ; result:= 0;
a3: dl w3 x1+h3+2 ; save(return);
al w2 x2+1 ; current word addr:=
al w3 x3-1 ; record base+1;
ds.w3 g65. ; last word addr:=
rl w3 x1+h2+4 ; last byte-1;
sn w3 0 ; if partial word=0 then
al w3 1 ; partial word:= 1;
rs.w3 g63. ; current word:= partial word;
rl w3 x1+h1
am. c1.
se w3(i18)
am -2 ; typewriter medium:=
rl.w3 j14. ; kind=8;
rs.w3 j13.
a0: sn w0 0 ; check result:
jl. (b0.) ; if result=0 then
rl.w0 j12. ; goto exit;
rs.w0 e5. ; end source list:= true;
al w0 2
hs.w0 j27. ; kill write end source;
al.w2 c1. ;
rl w1 x2+i25 ; write term file(
; <:connect :>,
al w0 x2+i10 ; <source file>);
; exit:
jl x2+i21 ; end;
; procedure select n input;
; comment:
; call: exit:
; w0 0
; w1 in descr
; w2 destroyed
; w3 return;
w.e1: rs.w3 b1. ; begin
am. c1.
rl w0 i15
se w0 0 ; if normal then
jl x3+0 ; goto exit;
jl.w3 e38. ; stack in(current chain);
al.w2 g39. ; normal:= true;
al w0 -1 ; goto unstack;
; exit:
jl. a1. ; end;
; procedure select t input;
; comment:
; call: exit:
; w0 0
; w1 in descr
; w2 destroyed
; w3 return;
w.e2: rs.w3 b1. ; begin
al.w1 c1.
rl w0 x1+i15
sn w0 0 ; if -,normal then
jl x3+0 ; goto exit;
rl w0 x1+i24 ;
am. (g52.) ; if procedure source then
sn w0(+h20+h2+6); goto exit;
jl x3+0 ;
al w0 x1+i20
jl w3 x1+i21 ; write error return(<:type :>);
rl.w1 g41. ; outend(null);
jl w3 x1+h59-h23;
al.w2 g39.
jl.w3 e32. ; stack in(source chain);
al w0 0 ; normal:= false;
a1: am. c1. ; unstack:
rs w0 i15
rl.w3 b1. ; if normal then
se w0 0 ; unstack in(source chain)
; else unstack in(current chain);
; init in;
am 2 ; exit:
; procedure unstack current chain
; call: exit:
; w0 0
; w1 in descr
; w2 destroyed
; w3 return destroyed
w.e62: am h30-h27-2 ; end;
; connect in(medium);
; comment: uses the corresponding fp procedure and init in.
; call: exit:
; w0 0
; w1 in descr
; w2 name addr destroyed
; w3 return destroyed;
w.a6: al w1 h27-2
al w0 0 ; result := 0;
rs.w3 b0.
am. (g52.)
jl w3 x1+0
jl. a3.
b. f3 w.
e36: al w0 0 ; entry from procsource
a5: rs. w0 f1. ; entry from source: save file
rs. w3 b0. ; save w3
rs. w2 f2. ; save w2
am. (g52.) ;
al w1 h54 ; w1:=tail addr
al w3 x2 ; w3:=name addr
jd 1<11+42 ; lookup
se w0 0 ;
jl. a7. ; if not found then alarm
al w2 x1 ; w2:=tail addr
rl w0 x1 ;
sl w0 0 ; if size>0 then
jl. f3. ; goto exit;
rl. w0 f1.
wa w0 x2+12 ; filecount:=filecount+file;
rs w0 x2+12 ;
rl. w3 b0. ; restore w3
jl. a6. ; goto connect in
f1: 0
f2: 0
f3: rl. w2 f2. ; restore w2
rl. w3 b0. ; restore w3
jl. a6. ; goto connect
a7: al. w2 c1. ;
rl w1 x2+i25 ; w1:=source addr
al w0 x2+i30 ; w0:=<:source unknown:>
jl x2+i21 ; goto alarm
e.
; procedure select next source(empty);
; comment: connects the next item in the source list. if the
; list is empty, the procedure next symbol is modified to
; deliver an infinite number of <z.>s and <e.>s and the
; procedure returns to empty.
; call: exit: empty:
; w0
; w1 destroyed destroyed
; w2 source 10
; w3 return destroyed 6;
w.b.f1
w.f0: 1<15 ; list.on == true
f1: -1-1<15-1<7 ; mask for removing markbits from sourcename
w.e16: rs.w0 b1. ; begin
rs.w3 b2.
al w1 x3+0
rl.w2 g34. ; save(return);
am 2047
rs.w2 i34. ; source name := source;
bl w3 x2+0
sh w3 15 ; if byte(source)<=15 then
jl. a2. ; goto end source list;
rl.w3 g52.
jl w3 x3+h79-4 ; terminate zone(current input);
rl w1 x2 ; if list-on-off mode then
so w1 1<7 ; begin
jl. a4. ; comment in the first word of
; sourcename bit 1<7 and 1<15 are
; special bits ... see initialization;
sz.w1(f0.) ; list := saved list :=
am 4 ; if list.on then true
am 2047
rl.w3 i26. ; else false;
am 2047
rs.w3 i27. ;
rs.w3 j11. ;
la.w1 f1. ; remove markbits from sourcename;
rs w1 x2 ; end;
e.
a4: rl w0 x2+8 ; w0:=file;
jl.w3 a5. ; connect in(source);
dl.w1 b2. ; restore(return);
al w2 10
wa.w2 g34. ; source:= source+1;
rs.w2 g34.
jl x1+2 ; goto exit;
a2: rl.w2 j12. ; end source list:
rs.w2 e5. ; insert end generator;
rl.w2 j15. ; end source list:= true;
rs.w2 g44. ; intext:= false;
am 2047
jl.w3 i37. ; if list then
al w0 0 ; writeaddr;
am. c1. ; char state:= 0;
rs w0 i8 ; delim state:= 0;
al w2 10 ; symbol:= nl;
al w3 14 ; symbol type:= end line;
jl x1+0 ; goto empty
c.i0i.z. ; exit:
e. ; end;
; procedure next symbol;
; comment:
; call: exit:
; w0
; w1 return
; w2 symbol
; w3 symbol type
b.b8,a7
w.e5: rl.w3 g63. ; begin
; jl. a1-e5 ; if end source list then
; goto end generation;
sn.w3(b4.) ; if current word=end word then
jl. a3. ; goto next word;
al w2 0 ; symbol:= current word(0:7);
ld w3 8 ; current word:= current word shift 8;
a2: rs.w3 g63. ; return word:
a0: bl.w3 x2+d0. ; look up: symbol type := char table(symbol);
sn w3 14 ; if symbol type = <newline> then
jl. a7. ; goto newline;
sl w2 33 ; if grafic symbol then
sl w2 126 ; grafic := true;
jl. j11. ;
hs.w3 5 ;
jl. j11. ; goto test line;
a7: sn w3 14;grafic ; newline: if <newline> and last char was
jl. j11. ; grafic then
hs.w3 a7.+1 ; begin
am 2047
rx.w1 i29. ;
al w1 x1+1 ; lineno := lineno + 1;
am 2047
rx.w1 i29. ; save (lineno);
; here may be inserted any test on linenumber or k-value,
; controlling e.g. listing or xref...
j11: jl x1+0 ; test line:
; am 0 ; if -,list then
ds.w0 b0. ; goto exit;
i7: jl.w3 e13.;2 ; if empty line then
al w0 x2+0 ; writeaddr;
sn w2 10
jl. a6. ; if symbol<>25
se w2 25 ; and symbol<>10 then
jl.w3 e9. ; writechar(symbol);
se w2 12 ;
j29: am i4
a6: al w0 i5 ; empty line:= symbol=10 or symbol=12;
hs.w0 i7.+1
dl.w0 b0. ; goto exit;
jl x1+0
j12: jl. 2-e5.
a1: rl.w3 b5. ; end generation:
se w3 46 ; delivers alternating
jl. 8 ; <z.> and <e.>;
dl.w3 b6.
rx w3 4
ds.w3 b6.
dl.w3 b1.
rx w3 4
ds.w3 b1.
jl. a0. ; goto look up;
-1 ; saved w3
b0: -1 ; saved w3 and saved w0
b5: 46 ; <.>
b1: 101 ; <e>
b6: 122 ; <z>
b2: -1 ; saved w1
b3: 24<16+24<8+24 ; cancel characters
b8: <:cancel<0>:>
b4: 1<16 ; end word
b7: 1<23+1<15+1<7
a3: rl.w3 g64. ; next word:
sl.w3(g65.) ; if current word addr
jl. a4. ; >=last word addr then
al w3 x3+2 ; goto next block;
rs.w3 g64. ; current word addr:=
rl w3 x3+0 ; current word addr+2;
sz.w3(b7.) ; if any char>127 then
jl. a5. ; goto no text;
al w2 0 ; symbol:= current word(0:7);
ld w3 8 ; current word:= current word
al w3 x3+1 ; shift 8+1;
jl. a2. ; goto return word;
a4: rs.w1 b2. ; next block:
jl.w3(g40.) ; save(w1);
dl w3 x1+h3+2 ; inblock;
al w2 x2-1 ; current word addr:=
al w3 x3-1 ; record base-1;
ds.w3 g65. ; last word addr:=
rl.w1 b2. ; last byte-1;
j13: jl. a3. ; restore(w1);
; rl w3 x3+0 ; if typewriter medium then
lx.w3 b3. ; begin
sz w3 255 ; word:= word(last word addr);
ls w3 -8 ; if word(16:23)=24
sz w3 255 ; or word(8:15)=24
ls w3 -8 ; or word(0:7)=24 then
sz w3 255 ; begin
jl. a3. ; write warn(<:cancel:>);
rs.w0 b0. ; goto next block
al.w0 b8. ; end
jl.w3 e15. ; end;
rl.w0 b0. ; goto next word;
jl. a4.
a5: rl.w1 g34. ; no text:
al w1 x1-8 ; write term file(
al.w2 c1. ; <:no text :>,
al w0 x2+i23 ; <source file>)
jl. e15.
jl. a3-j13 ; exit:
j14: rl w3 x3+0 ; end;
c.i0i.z.
e.
; end slang
b.a9,b1
w.b0: 10<12
b1: 25<16+25<8+1 ; end medium characters
d6: al.w1 g35.
rl.w2 g52.
al w0 0
j25: am 0 ; if output connected then
; jl w3 x2+h79 ; terminate zone(file mark);
jl.w3 e1. ; select n input;
rl.w3 g52.
al w0 -1
j24: jl w3 x3+h79-4 ; if source list then
; am 0 ; terminate zone(current input);
; record base:=
al w1 1 ; current word addr-1;
aa.w1 g65. ; last byte:=
rl.w2 g52. ; last word addr+1;
ds w1 x2+h20+h3+2
rl.w1 g63. ; partial word:= current word;
rl.w0 e5.
se.w0(j12.) ; if end source list then
jl. 10 ; begin
rl.w1 b1. ; partial word:=
am. c1. ; em characters;
al w0 i17 ; if write end source not killed then
j27=k+1 ; write error return(
jl.w3 e15. ; <:end source:>)
; jl.w3 2
rs w1 x2+h20+h2+4
; end;
j22: jl. a1. ; if entry.no then
; am 0 ; goto out;
c. h57 < 2 ; if system 2 then include the following:
dl.w1 g38.
am. c1.
rl w3 i19
sn w3 -1 ; if fp note then
jl. a3. ; begin
ds w1 x3+20 ; fp note(18:20):=
rl.w0 g36. ; (2.4,bytes);
sn w0 0 ; if slang generated name then
jl. a1. ; begin
rl.w2 g38. ; fp note(2):=
al w2 x2+510 ; (bytes+510)//512;
ls w2 -9
rx w2 x3+2 ; change entry(document name);
al w1 x3+2
al w3 x3+4 ; fp note(2):= bs
jd 1<11+44 ; end
rs w2 x3-2 ; end
jl. a2. ; else
z. ; end system 2;
a3: al.w3 g43. ; begin
al.w1 g35.
jd 1<11+42 ; lookup entry(result name);
dl w0 110
ld w0 5
rs w3 x1+10 ; tail(10):=shortclock;
dl.w3 g38.
ds w3 x1+18 ; tail(16:18):= (2.4,bytes);
al.w3 g43. ; change entry(result name)
a2: jd 1<11+44 ; end;
c. h57 < 3 ; if system 3 then include the following:
al.w3 g35.+h1+2 ; if <outfile> is backing storage then
jd 1<11+42 ; reduce the area to the used size;
rl.w0 g35.+h1+16;
rs w0 x1
bz.w0 g35.+h1+1
sn w0 4
jd 1<11+44
z. ; end system 3;
a1: am. c1. ; out:
rl w2 i6
sn w2 0 ; if error or warn then
jl. a4. ; writetext(<:<10>***slang sorry:>)
am 2047
al.w0 i35.
jl.w3 e11. ; else if warning.yes then
jl. a5. ; writetext(<:<10>slang ok:>);
a4: bl.w0 j19. ; <*warning.no => warn and error untouched and no of errors = 0*>
sz w0 2.1
jl. a7.
am 4
a5: am 2047
al.w0 i36.
jl.w3 e11.
am 2047
rl.w0 i31. ; if no of error messages > 0 then
se w0 0 ;
jl.w3 e17. ; writeinteger1(no of error messages);
a7: al.w3 g35.+h1+2 ; if slang generated name
la.w2 g36. ; and error
sz w2 2.1 ; and remove.yes then
j23: jd 1<11+48 ; remove entry(document name);
; am 0
c. h57 < 2 ; if system 2 then include the following:
rl.w2 g37.
sn w2 0
sn.w2(g36.) ; if slang generated name
jl. 4 ; and segments=0 then
jd 1<11+48 ; remove entry(document name);
am. c1.
rl w1 i19 ; if fpnote then
sn w1 -1 ; begin
jl. a6.
al.w1 d0.
jd 1<11+42 ; lookup entry(document name);
se w0 3
jl. a6. ; if result=3 then
al w0 0 ; fpnote(4):= 0
am. c1.
rl w1 i19 ; end;
rs w0 x1+4
z. ; end system 2;
a6: jl.w3 e3. ; writechar(bl);
rl.w0 g37.
jl.w3 e10. ; writeinteger(segments);
al w0 47
jl.w3 e9. ; writechar(/);
rl.w0 g38.
jl.w3 e10. ; writeinteger(bytes);
al w0 47
jl.w3 e9. ; writechar(/);
al w0 510
wa.w0 g38.
ls w0 -9
jl.w3 e10. ; writeinteger((bytes+510)//512);
jl.w3 e4. ; writechar(nl);
am 2047
rl.w0 i32. ; if no of xref records > 0 then
sn w0 0 ; begin
jl. a0. ; comment: prepare a call of the
rl.w2 g52. ; output-program, slangxref, like this:
rl w3 x2+h8 ; slangxref <xref area> <no of recs>;
a8: ba w3 x3+1 ; upspace fp stack pointer;
bl w1 x3+0 ; upspace stack to end list
sn w1 -4 ; or next command line;
jl. a9. ;
sz w1 -3 ;
jl. a8. ;
a9: al w3 x3-26 ; stack := stack-26;
rs w3 x2+h8 ; stack := stack-26;
rs w0 x3+24 ; stack(24) := no of xref records;
dl.w1 c51. ; stack(0:2) := (2<12+2,2<12+10);
ds w1 x3+2 ;
dl.w1 c53. ; stack(4:10) := <:slangxref:>;
ds w1 x3+6 ;
dl.w1 c54. ;
ds w1 x3+10 ;
rl.w1 c52. ; stack(12) := 4<12+10;
rs w1 x3+12 ;
hl w1 2 ; stack(22) := 4<12+4;
rs w1 x3+22 ;
dl.w1 g70.+h1+4 ; stack(14:20) := <xref area name>;
ds w1 x3+16 ;
dl.w1 g70.+h1+8 ;
ds w1 x3+20 ;
al.w1 g70. ; if record base >= first shared then
rl w3 x1+h3+0 ;
sl.w3(g71.+2) ; outblock(xref zone);
jl.w3(g41.) ; end;
a0: al w2 3 ; w2 := warning, error;
am 2047
la.w2 i33. ;
rl.w1 g52.
jl w3 x1+h7 ; end program;
c.i0i.z.
e.
; tables
; char table
; in the table below each character is described by a byte
; giving the character type.
; input: iso value
; output: character type
; value graph type
h.d0: 8 ; 0 nul blind
12 ; 1 soh illegal
12 ; 2 stx illegal
12 ; 3 etx illegal
12 ; 4 eot illegal
12 ; 5 enq illegal
12 ; 6 ack illegal
12 ; 7 bel illegal
12 ; 8 bs illegal
8 ; 9 ht blind
14 ; 10 nl end line
14 ; 11 vt end line
14 ; 12 ff end line
8 ; 13 cr blind
12 ; 14 so illegal
12 ; 15 si illegal
12 ; 16 dle illegal
12 ; 17 dc1 illegal
12 ; 18 dc2 illegal
12 ; 19 dc3 illegal
12 ; 20 dc4 illegal
12 ; 21 nak illegal
12 ; 22 syn illegal
12 ; 23 etb illegal
12 ; 24 can illegal
13 ; 25 em end medium
12 ; 26 sub illegal
12 ; 27 esc illegal
12 ; 28 fs illegal
12 ; 29 gs illegal
12 ; 30 rs illegal
12 ; 31 us illegal
7 ; 32 bl blank
4 ; 33 ! special
4 ; 34 " special
4 ; 35 # special
4 ; 36 $ special
4 ; 37 % special
4 ; 38 & special
j28: 11 ; 39 ' exponent
9 ; 40 ( left par
7 ; 41 ) blank
4 ; 42 * special
3 ; 43 + sign
4 ; 44 , special
3 ; 45 - sign
2 ; 46 . point
4 ; 47 / special
1 ; 48 0 digit
1 ; 49 1 digit
1 ; 50 2 digit
1 ; 51 3 digit
1 ; 52 4 digit
1 ; 53 5 digit
1 ; 54 6 digit
1 ; 55 7 digit
1 ; 56 8 digit
1 ; 57 9 digit
10 ; 58 : colon
6 ; 59 ; semicolon
5 ; 60 < less gr
4 ; 61 = special
5 ; 62 > less gr
4 ; 63 ? special
4 ; 64 @ special
0 ; 65 a letter
0 ; 66 b letter
0 ; 67 c letter
0 ; 68 d letter
0 ; 69 e letter
0 ; 70 f letter
0 ; 71 g letter
0 ; 72 h letter
0 ; 73 i letter
0 ; 74 j letter
0 ; 75 k letter
0 ; 76 l letter
0 ; 77 m letter
0 ; 78 n letter
0 ; 79 o letter
0 ; 80 p letter
0 ; 81 q letter
0 ; 82 r letter
0 ; 83 s letter
0 ; 84 t letter
0 ; 85 u letter
0 ; 86 v letter
0 ; 87 w letter
0 ; 88 x letter
0 ; 89 y letter
0 ; 90 z letter
0 ; 91 æ letter
0 ; 92 ø letter
0 ; 93 å letter
4 ; 94 ^ special
4 ; 95 _ special
4 ; 96 ` special
0 ; 97 a letter
0 ; 98 b letter
0 ; 99 c letter
0 ; 100 d letter
0 ; 101 e letter
0 ; 102 f letter
0 ; 103 g letter
0 ; 104 h letter
0 ; 105 i letter
0 ; 106 j letter
0 ; 107 k letter
0 ; 108 l letter
0 ; 109 m letter
0 ; 110 n letter
0 ; 111 o letter
0 ; 112 p letter
0 ; 113 q letter
0 ; 114 r letter
0 ; 115 s letter
0 ; 116 t letter
0 ; 117 u letter
0 ; 118 v letter
0 ; 119 w letter
0 ; 120 x letter
0 ; 121 y letter
0 ; 122 z letter
0 ; 123 æ letter
0 ; 124 ø letter
0 ; 125 å letter
4 ; 126 ü special
8 ; 127 del blind
c.d0.+128-1m.char table short
z.
c.-d0.-128-1m.char table long
z.
b.f42 ; begin f names for next char and next delim
; char matrix
; the transition matrix below contains a byte for each combination
; of the char state and the symbol type. the byte is an address of
; a working action. the meaning of the char states are:
; 0: start
; 1: after letter
; 2: after digit
; 3: after less
; 4: after left par
; 5: after colon
; table look-up: the character type is used to select an entry in
; the matrix. the entry contains one byte for each state value.
b.a14
h.d1: a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14
a0=-d1. ; letter:
f1 ; 0: letter again
f8 ; 1: compound
f6 ; 2: not compound
f6 ; 3: not compound
f6 ; 4: not compound
f5 ; 5: colon
a1=-d1. ; digit:
f0 ; 0: digit again
f7 ; 1: register
f6 ; 2: not compound
f6 ; 3: not compound
f6 ; 4: not compound
f5 ; 5: colon
a2=-d1. ; point:
f18 ; 0: exit
f8 ; 1: compound
f17 ; 2: digit point
f6 ; 3: not compound
f6 ; 4: not compound
f5 ; 5: colon
a3=-d1. ; sign:
f18 ; 0: exit
f6 ; 1: not compound
f6 ; 2: not compound
f6 ; 3: not compound
f6 ; 4: not compound
f5 ; 5: colon
a4=-d1. ; special:
f18 ; 0: exit
f6 ; 1: not compound
f6 ; 2: not compound
f6 ; 3: not compound
f6 ; 4: not compound
f5 ; 5: colon
a5=-d1. ; less gr:
f10 ; 0: less gr
f6 ; 1: not compound
f6 ; 2: not compound
f6 ; 3: not compound
f6 ; 4: not compound
f15 ; 5: colon less gr
a6=-d1. ; semicolon:
f12 ; 0: comment
f6 ; 1: not compound
f6 ; 2: not compound
f6 ; 3: not compound
f6 ; 4: not compound
f5 ; 5: colon
a7=-d1. ; blank:
f19 ; 0: blank
f19 ; 1: blank
f19 ; 2: blank
f19 ; 3: blank
f19 ; 4: blank
f9 ; 5: colon blank
a8=-d1. ; blind:
f3 ; 0: read
f3 ; 1: read
f3 ; 2: read
f3 ; 3: read
f3 ; 4: read
f3 ; 5: read
a9=-d1. ; left par:
f11 ; 0: left par
f6 ; 1: not compound
f6 ; 2: not compound
f6 ; 3: not compound
f6 ; 4: not compound
f5 ; 5: colon
a10=-d1. ; colon:
f4 ; 0: colon read
f6 ; 1: not compound
f6 ; 2: not compound
f16 ; 3: less colon
f8 ; 4: compound
f5 ; 5: colon
a11=-d1. ; exponent:
f18 ; 0: exit
f6 ; 1: not compound
f6 ; 2: not compound
f6 ; 3: not compound
f6 ; 4: not compound
f5 ; 5: colon
a12=-d1. ; illegal:
f13 ; 0: illegal
f13 ; 1: illegal
f13 ; 2: illegal
f13 ; 3: illegal
f13 ; 4: illegal
f13 ; 5: illegal
a13=-d1. ; end medium:
f14 ; 0: end medium
f14 ; 1: end medium
f14 ; 2: end medium
f14 ; 3: end medium
f14 ; 4: end medium
f14 ; 5: end medium
a14=-d1. ; end line:
f20 ; 0: end line
f6 ; 1: not compound
f6 ; 2: not compound
f6 ; 3: not compound
f6 ; 4: not compound
f5 ; 5: colon
c.d1.+15*7-1m.char matrix short
z.
c.-d1.-15*7-1m.char matrix long
z.
c.i0i.z.
e.
; delim matrix
; the transition matrix below contains a byte for each combination
; of the delimiter state and the character type. the leftmost 6 bits
; defines a new state and the rightmost 6 bits is a switch to a
; working action. the meaning of the delimiter states are:
; 0: after error
; 1: start not real
; 2: after id digit
; 3: delim expected
; 4: after digit
; 5: after id letter
; 6: in text
; 7: in num
; 8: start real
; 9: after frac sign
; 10: after point
; 11: after exponent
; 12: after exp sign
; 30: irrelevant
; 31: unused
; table look-up: the character type is used to select an entry in
; the matrix. the entry contains one byte for each state value.
b.a11
h.d2: a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11
a0=-d2. ; letter:
0<6+ 0 ; 0: 0 cont scan
5<6+ 4 ; 1: 5 init id
0<6+19 ; 2: 0 unknown
0<6+19 ; 3: 0 unknown
0<6+19 ; 4: 0 unknown
31<6+22 ; 5: 31 slang fault
6<6+17 ; 6: 6 text char
0<6+20 ; 7: 0 text unknown
5<6+ 4 ; 8: 5 init id
0<6+19 ; 9: 0 unknown
0<6+19 ; 10: 0 unknown
0<6+19 ; 11: 0 unknown
0<6+19 ; 12: 0 unknown
a1=-d2. ; digit:
0<6+ 0 ; 0: 0 cont scan
4<6+ 2 ; 1: 4 init dec
2<6+ 3 ; 2: 2 conv radix
0<6+19 ; 3: 0 unknown
4<6+ 3 ; 4: 4 conv radix
2<6+ 3 ; 5: 2 conv radix
6<6+17 ; 6: 16 text char
7<6+ 3 ; 7: 7 conv radix
9<6+ 9 ; 8: 9 before point
9<6+ 9 ; 9: 9 before point
10<6+ 8 ; 10: 10 after point
12<6+13 ; 11: 12 after exp
12<6+13 ; 12: 12 after exp
a2=-d2. ; point:
30<6+ 7 ; 0: 30 single
30<6+ 7 ; 1: 30 single
31<6+22 ; 2: 31 slang fault
30<6+ 7 ; 3: 30 single
31<6+22 ; 4: 31 slang fault
0<6+19 ; 5: 0 unknown
6<6+17 ; 6: 6 text char
0<6+20 ; 7: 0 text unknown
10<6+10 ; 8: 10 set real
10<6+ 0 ; 9: 10 cont scan
30<6+ 7 ; 10: 30 single
30<6+ 7 ; 11: 30 single
30<6+ 7 ; 12: 30 single
a3=-d2. ; sign:
30<6+ 7 ; 0: 30 single
30<6+ 7 ; 1: 30 single
30<6+ 7 ; 2: 30 single
30<6+ 7 ; 3: 30 single
30<6+ 7 ; 4: 30 single
0<6+19 ; 5: 0 unknown
6<6+17 ; 6: 6 text char
0<6+20 ; 7: 0 text unknown
9<6+11 ; 8: 9 sign
30<6+ 7 ; 9: 30 single
30<6+ 7 ; 10: 30 single
12<6+11 ; 11: 12 sign
30<6+ 7 ; 12: 30 single
a4=-d2. ; special:
30<6+ 7 ; 0: 30 single
30<6+ 7 ; 1: 30 single
30<6+ 7 ; 2: 30 single
30<6+ 7 ; 3: 30 single
30<6+ 7 ; 4: 30 single
0<6+19 ; 5: 0 unknown
6<6+17 ; 6: 6 text char
0<6+20 ; 7: 0 text unknown
30<6+ 7 ; 8: 30 single
30<6+ 7 ; 9: 30 single
30<6+ 7 ; 10: 30 single
30<6+ 7 ; 11: 30 single
30<6+ 7 ; 12: 30 single
a5=-d2. ; less gr:
30<6+ 7 ; 0: 30 single
30<6+ 7 ; 1: 30 single
30<6+ 7 ; 2: 30 single
30<6+ 7 ; 3: 30 single
30<6+ 7 ; 4: 30 single
0<6+19 ; 5: 0 unknown
6<6+15 ; 6: 6 init num
6<6+16 ; 7: 6 end num
30<6+ 7 ; 8: 30 single
30<6+ 7 ; 9: 30 single
30<6+ 7 ; 10: 30 single
30<6+ 7 ; 11: 30 single
30<6+ 7 ; 12: 30 single
a6=-d2. ; end line:
30<6+21 ; 0: 30 end line
30<6+21 ; 1: 30 end line
30<6+21 ; 2: 30 end line
30<6+21 ; 3: 30 end line
30<6+21 ; 4: 30 end line
0<6+19 ; 5: 0 unknown
6<6+17 ; 6: 6 text char
0<6+20 ; 7: 0 text unknown
30<6+21 ; 8: 30 end line
30<6+21 ; 9: 30 end line
30<6+21 ; 10: 30 end line
30<6+21 ; 11: 30 end line
30<6+21 ; 12: 30 end line
a7=-d2. ; blank:
31<6+22 ; 0: 31 slang fault
31<6+22 ; 1: 31 slang fault
31<6+22 ; 2: 31 slang fault
31<6+22 ; 3: 31 slang fault
31<6+22 ; 4: 31 slang fault
31<6+22 ; 5: 31 slang fault
6<6+17 ; 6: 6 text char
7<6+ 0 ; 7: 7 cont scan
31<6+22 ; 8: 31 slang fault
31<6+22 ; 9: 31 slang fault
31<6+22 ; 10: 31 slang fault
31<6+22 ; 11: 31 slang fault
31<6+22 ; 12: 31 slang fault
a8=-d2. ; syllable:
30<6+ 6 ; 0: 30 pair
30<6+ 6 ; 1: 30 pair
30<6+ 6 ; 2: 30 pair
30<6+ 6 ; 3: 30 pair
30<6+ 6 ; 4: 30 pair
0<6+19 ; 5: 0 unknown
31<6+22 ; 6: 31 slang fault
31<6+22 ; 7: 31 slang fault
30<6+ 6 ; 8: 30 pair
30<6+ 6 ; 9: 30 pair
30<6+ 6 ; 10: 30 pair
30<6+ 6 ; 11: 30 pair
30<6+ 6 ; 12: 30 pair
a9=-d2. ; digit point:
0<6+ 0 ; 0: 0 cont scan
4<6+ 1 ; 1: 4 init radix
3<6+ 5 ; 2: 3 rel id
0<6+19 ; 3: 0 unknown
4<6+ 1 ; 4: 4 init radix
3<6+ 5 ; 5: 3 rel id
31<6+22 ; 6: 31 slang fault
31<6+22 ; 7: 31 slang fault
10<6+ 9 ; 8: 10 before point
10<6+ 9 ; 9: 10 before point
0<6+19 ; 10: 0 unknown
0<6+19 ; 11: 0 unknown
0<6+19 ; 12: 0 unknown
a10=-d2. ; text term:
0<6+ 0 ; 0: 0 cont scan
6<6+14 ; 1: 6 init text
0<6+20 ; 2: 0 text unknown
0<6+20 ; 3: 0 text unknown
0<6+20 ; 4: 0 text unknown
0<6+20 ; 5: 0 text unknown
3<6+18 ; 6: 3 end text
0<6+20 ; 7: 0 text unknown
0<6+20 ; 8: 0 text unknown
0<6+20 ; 9: 0 text unknown
0<6+20 ; 10: 0 text unknown
0<6+20 ; 11: 0 text unknown
0<6+20 ; 12: 0 text unknown
a11=-d2. ; exponent:
0<6+ 0 ; 0: 0 cont scan
0<6+19 ; 1: 0 unknown
0<6+19 ; 2: 0 unknown
0<6+19 ; 3: 0 unknown
0<6+19 ; 4: 0 unknown
0<6+19 ; 5: 0 unknown
6<6+17 ; 6: 6 text char
0<6+20 ; 7: 0 text unknown
11<6+12 ; 8: 11 exponent
11<6+12 ; 9: 11 exponent
11<6+12 ; 10: 11 exponent
0<6+19 ; 11: 0 unknown
0<6+19 ; 12: 0 unknown
c.d2.+12*14-1m.delim matrix short
z.
c.-d2.-12*14-1m.delim matrix long
z.
c.i0i.z.
e.
; syllable list
; in the table below each delimiter is described by 2 bytes of 2
; characters each: the rightmost byte contain internal values of
; the characters in the syllable (for a single character delimiter
; the second character is set to zero). the leftmost byte contain
; an internal description of the value and the type of the
; delimiter. the meaning of the delimiter types are:
; 0: control s. b. c. e. h. w. f. t. n. x. y.
; æ. ø. i. m. j. z. carret p. u. l. d.
; 1: comma ,
; 2: label :
; 3: assign = r.
; 4: op code ac ad .... xl xs
; 5: op mod . ( w0 w1 w2 w3 x0 x1 x2 x3
; 6: sign + -
; 7: operator * / < > o. a.
; 8: left par (:
; 9: right par :)
; table look-up: an index is formed by the sum modulo 16 of the
; two characters. this is used to select an entry in the syllable
; list. from this entry a search for the delimiter is performed.
b.a15
h.d3: a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15
w.a0=-d3.
; group 0: ; value type syllable
54<18+ 4<12+36<6+44 ; 54 op code dl
1<18+ 0<12+34<6+14 ; 1 control b.
39<18+ 4<12+44<6+36 ; 39 op code ld
0<18+ 3<12+50<6+14 ; 0 assign r.
30<18+ 4<12+45<6+51 ; 30 op code ms
a1=-d3.
; group 1: ; value type syllable
43<18+ 4<12+51<6+46 ; 43 op code sn
2<18+ 0<12+35<6+14 ; 2 control c.
0<18+ 0<12+51<6+14 ; 0 control s.
34<18+ 4<12+46<6+51 ; 34 op code ns
2<18+ 4<12+37<6+44 ; 2 op code el
30<18+ 4<12+33<6+48 ; 30 op code ap
61<18+ 4<12+41<6+56 ; 61 op code ix
31<18+ 4<12+53<6+44 ; 31 op code ul
12<18+ 4<12+56<6+41 ; 12 op code xi
a2=-d3.
; group 2: ; value type syllable
44<18+ 4<12+51<6+47 ; 44 op code so
35<18+ 4<12+46<6+36 ; 35 op code nd
56<18+ 4<12+33<6+33 ; 56 op code aa
16<18+ 8<12+ 8<6+26 ; 16 left par (:
7<18+ 0<12+52<6+14 ; 7 control t.
21<18+ 0<12+36<6+14 ; 21 control d.
a3=-d3.
; group 3: ; value type syllable
18<18+ 4<12+34<6+33 ; 18 op code ba
50<18+ 4<12+38<6+45 ; 50 op code fm
3<18+ 0<12+37<6+14 ; 3 control e.
17<18+ 9<12+26<6+ 9 ; 17 right par :)
21<18+ 4<12+51<6+48 ; 21 op code sp
29<18+ 4<12+48<6+51 ; 29 op code ps
19<18+ 0<12+53<6+14 ; 19 control u.
1<18+ 4<12+36<6+47 ; 1 op code do
a4=-d3.
; group 4: ; value type syllable
33<18+ 4<12+33<6+35 ; 33 op code ac
16<18+ 4<12+56<6+44 ; 16 op code xl
6<18+ 4<12+44<6+56 ; 6 op code lx
10<18+ 4<12+55<6+45 ; 10 op code wm
36<18+ 4<12+33<6+51 ; 36 op code as
6<18+ 0<12+38<6+14 ; 6 control f.
3<18+ 4<12+40<6+44 ; 3 op code hl
58<18+ 4<12+36<6+48 ; 58 op code dp
a5=-d3.
; group 5: ; value type syllable
23<18+ 4<12+50<6+51 ; 23 op code rs
17<18+ 4<12+34<6+51 ; 17 op code bs
5<18+ 0<12+55<6+14 ; 5 control w.
37<18+ 4<12+33<6+36 ; 37 op code ad
59<18+ 4<12+45<6+40 ; 59 op code mh
a6=-d3.
; group 6: ; value type syllable
13<18+ 4<12+42<6+44 ; 13 op code jl
4<18+ 0<12+40<6+14 ; 4 control h.
57<18+ 4<12+51<6+51 ; 57 op code ss
9<18+ 0<12+56<6+14 ; 9 control x.
18<18+ 4<12+37<6+33 ; 18 op code ea
19<18+ 4<12+58<6+44 ; 19 op code zl
a7=-d3.
; group 7: ; value type syllable
8<18+ 5<12+55<6+16 ; 8 op mod w0
55<18+ 4<12+36<6+51 ; 55 op code ds
48<18+ 4<12+38<6+33 ; 48 op code fa
22<18+ 4<12+43<6+44 ; 22 op code kl
10<18+ 0<12+57<6+14 ; 10 control y.
13<18+ 0<12+41<6+14 ; 13 control i.
60<18+ 4<12+44<6+43 ; 60 op code lk
22<18+ 4<12+50<6+37 ; 22 op code re
47<18+ 4<12+39<6+48 ; 47 op code gp
a8=-d3.
; group 8: ; value type syllable
24<18+ 5<12+55<6+17 ; 24 op mod w1
1<18+ 5<12+56<6+16 ; 1 op mod x0
34<18+ 5<12+ 8<6+ 0 ; 34 op mod (
42<18+ 4<12+51<6+37 ; 42 op code se
7<18+ 4<12+55<6+33 ; 7 op code wa
1<18+ 4<12+41<6+47 ; 1 op code io
0<18+ 4<12+33<6+55 ; 0 op code aw
15<18+ 0<12+42<6+14 ; 15 control j.
16<18+ 0<12+58<6+14 ; 16 control z.
17<18+ 4<12+37<6+51 ; 17 op code es
a9=-d3.
; group 9: ; value type syllable
40<18+ 5<12+55<6+18 ; 40 op mod w2
17<18+ 5<12+56<6+17 ; 17 op mod x1
49<18+ 4<12+38<6+51 ; 49 op code fs
53<18+ 4<12+35<6+38 ; 53 op code cf
12<18+ 4<12+45<6+44 ; 12 op code ml
11<18+ 0<12+59<6+14 ; 11 control æ.
a10=-d3.
; group 10: ; value type syllable
56<18+ 5<12+55<6+19 ; 56 op mod w3
0<18+ 2<12+26<6+ 0 ; 0 label :
33<18+ 5<12+56<6+18 ; 33 op mod x2
8<18+ 4<12+55<6+51 ; 8 op code ws
52<18+ 4<12+38<6+36 ; 52 op code fd
25<18+ 4<12+50<6+56 ; 25 op code rx
10<18+ 7<12+10<6+ 0 ; 10 operator *
12<18+ 0<12+60<6+14 ; 12 control ø.
20<18+ 0<12+44<6+14 ; 20 control l.
a11=-d3.
; group 11: ; value type syllable
9<18+ 6<12+11<6+ 0 ; 9 sign +
26<18+ 4<12+40<6+51 ; 26 op code hs
49<18+ 5<12+56<6+19 ; 49 op mod x3
40<18+ 4<12+51<6+40 ; 40 op code sh
46<18+ 4<12+51<6+56 ; 46 op code sx
5<18+ 4<12+44<6+47 ; 5 op code lo
24<18+ 4<12+55<6+36 ; 24 op code wd
27<18+ 4<12+56<6+51 ; 27 op code xs
14<18+ 0<12+45<6+14 ; 14 control m.
12<18+ 4<12+50<6+41 ; 12 op code ri
a12=-d3.
; group 12: ; value type syllable
17<18+ 1<12+12<6+ 0 ; 17 comma ,
19<18+ 4<12+34<6+58 ; 19 op code bz
14<18+ 7<12+28<6+ 0 ; 14 operator <
32<18+ 4<12+35<6+41 ; 32 op code ci
28<18+ 4<12+48<6+44 ; 28 op code pl
31<18+ 4<12+41<6+51 ; 31 op code is
47<18+ 4<12+41<6+35 ; 47 op code ic
8<18+ 0<12+46<6+14 ; 8 control n.
a13=-d3.
; group 13: ; value type syllable
11<18+ 4<12+33<6+44 ; 11 op code al
8<18+ 6<12+13<6+ 0 ; 8 sign -
4<18+ 4<12+44<6+33 ; 4 op code la
45<18+ 4<12+51<6+58 ; 45 op code sz
1<18+ 3<12+29<6+ 0 ; 1 assign =
13<18+ 7<12+47<6+14 ; 13 operator o.
29<18+ 4<12+36<6+41 ; 29 op code di
a14=-d3.
; group 14: ; value type syllable
36<18+ 5<12+14<6+ 0 ; 36 op mod .
20<18+ 4<12+50<6+44 ; 20 op code rl
2<18+ 4<12+34<6+44 ; 2 op code bl
9<18+ 4<12+33<6+45 ; 9 op code am
14<18+ 4<12+42<6+36 ; 14 op code jd
15<18+ 7<12+30<6+ 0 ; 15 operator >
51<18+ 4<12+43<6+51 ; 51 op code ks
18<18+ 0<12+48<6+14 ; 18 control p.
28<18+ 4<12+39<6+39 ; 28 op code gg
a15=-d3.
; group 15: ; value type syllable
41<18+ 4<12+51<6+44 ; 41 op code sl
38<18+ 4<12+44<6+51 ; 38 op code ls
12<18+ 7<12+33<6+14 ; 12 operator a.
15<18+ 4<12+42<6+37 ; 15 op code je
11<18+ 7<12+15<6+ 0 ; 11 operator /
d4: 0 ; last syllable
c.d3.+258-1m.syllable list short
z.
c.-d3.-258-1m.syllable list long
z.
c.i0i.z.
e.
; program matrix
; the transition matrix below contains a byte for each combination
; of the program state and the delimiter type. the leftmost 6 bits
; defines a new state and the rightmost 6 bits is a switch to a
; working action. the meaning of the program states are:
; 0: after error
; 1: after begin
; 2: after halfword
; 3: after byte instruction
; 4: after word
; 5: after word instruction
; 6: after real
; 7: after left paranthesis
; 8: after operator
; 9: after right paranthesis
; 31: irrelevant
; table look-up: the character type is used to select an entry in
; the matrix. the entry contains one byte for each state value.
b.a9
h.d5: a0,a0,a2,a3,a4,a5,a6,a7,a8,a9
a0=-d5. ; control:
31<6+22 ; 0: 31 restore
1<6+ 0 ; 1: 1 declare 1
2<6+ 7 ; 2: 2 byte 1
2<6+ 9 ; 3: 2 byte instr
4<6+10 ; 4: 4 word 1
4<6+12 ; 5: 4 word instr
6<6+ 5 ; 6: 6 real 1
7<6+18 ; 7: 7 terminator 2
7<6+18 ; 8: 7 terminator 2
7<6+17 ; 9: 7 terminator 1
c.-1; comma has got the same syntactical position as control...
a1=-d5. ; comma:
31<6+22 ; 0: 31 restore
1<6+ 1 ; 1: 1 declare 2
2<6+ 8 ; 2: 2 byte 2
2<6+ 9 ; 3: 2 byte instr
4<6+11 ; 4: 4 word 2
4<6+12 ; 5: 4 word instr
6<6+ 6 ; 6: 6 real 2
7<6+18 ; 7: 7 terminator 2
7<6+18 ; 8: 7 terminator 2
7<6+17 ; 9: 7 terminator 1
z.
a2=-d5. ; label:
0<6+24 ; 0: 0 next delim
1<6+ 2 ; 1: 1 label
2<6+ 2 ; 2: 2 label
0<6+23 ; 3: 0 syntax error
4<6+ 2 ; 4: 2 label
0<6+23 ; 5: 0 syntax error
6<6+ 2 ; 6: 6 label
0<6+23 ; 7: 0 syntax error
0<6+23 ; 8: 0 syntax error
0<6+23 ; 9: 0 syntax error
a3=-d5. ; assign:
0<6+24 ; 0: 0 next delim
7<6+15 ; 1: 7 assign expr 1
7<6+16 ; 2: 7 assign expr 2
0<6+23 ; 3: 0 syntax error
7<6+16 ; 4: 7 assign expr 2
0<6+23 ; 5: 0 syntax error
7<6+16 ; 6: 7 assign expr 2
0<6+23 ; 7: 0 syntax error
0<6+23 ; 8: 0 syntax error
0<6+23 ; 9: 0 syntax error
a4=-d5. ; op code:
0<6+24 ; 0: 0 next delim
0<6+23 ; 1: 0 syntax error
3<6+ 3 ; 2: 3 op code
0<6+23 ; 3: 0 syntax error
5<6+ 3 ; 4: 5 op code
0<6+23 ; 5: 0 syntax error
0<6+23 ; 6: 0 syntax error
0<6+23 ; 7: 0 syntax error
0<6+23 ; 8: 0 syntax error
0<6+23 ; 9: 0 syntax error
a5=-d5. ; op mod:
0<6+24 ; 0: 0 next delim
0<6+23 ; 1: 0 syntax error
0<6+23 ; 2: 0 syntax error
3<6+ 4 ; 3: 3 op mod
0<6+23 ; 4: 0 syntax error
5<6+ 4 ; 5: 5 op mod
0<6+23 ; 6: 0 syntax error
0<6+23 ; 7: 0 syntax error
0<6+23 ; 8: 0 syntax error
0<6+23 ; 9: 0 syntax error
a6=-d5. ; sign:
0<6+24 ; 0: 0 next delim
0<6+23 ; 1: 0 syntax error
2<6+13 ; 2: 2 data sign
0<6+23 ; 3: 0 syntax error
4<6+13 ; 4: 4 data sign
5<6+13 ; 5: 5 data sign
0<6+23 ; 6: 0 syntax error
8<6+20 ; 7: 8 expr sign
8<6+21 ; 8: 8 operator 2
8<6+19 ; 9: 8 operator 1
a7=-d5. ; operator:
0<6+24 ; 0: 0 next delim
0<6+23 ; 1: 0 syntax error
8<6+14 ; 2: 8 data expr
0<6+23 ; 3: 0 syntax error
8<6+14 ; 4: 8 data expr
8<6+14 ; 5: 8 data expr
0<6+23 ; 6: 0 syntax error
8<6+21 ; 7: 8 operator 2
8<6+21 ; 8: 8 operator 2
8<6+19 ; 9: 8 operator 1
a8=-d5. ; left par:
0<6+24 ; 0: 0 next delim
0<6+23 ; 1: 0 syntax error
7<6+14 ; 2: 7 data expr
0<6+23 ; 3: 0 syntax error
7<6+14 ; 4: 7 data expr
7<6+14 ; 5: 7 data expr
0<6+23 ; 6: 0 syntax error
7<6+19 ; 7: 7 operator 1
7<6+19 ; 8: 7 operator 1
0<6+23 ; 9: 0 syntax error
a9=-d5. ; right par:
0<6+24 ; 0: 0 next delim
0<6+23 ; 1: 0 syntax error
0<6+23 ; 2: 0 syntax error
0<6+23 ; 3: 0 syntax error
0<6+23 ; 4: 0 syntax error
0<6+23 ; 5: 0 syntax error
0<6+23 ; 6: 0 syntax error
9<6+21 ; 7: 9 operator 2
9<6+21 ; 8: 9 operator 2
9<6+19 ; 9: 9 operator 1
d5=d5-10 ; simulate the presence of the a1-action (comma)
c.d5.+10*11-1m.program matrix short
z.
c.-d5.-10*11-1m.program matrix long
z.
d5=d5+10 ; simulate the presence of the a1-action (comma)
c.i0i.z.
e.
m. slang text 1 included
▶EOF◀