|
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◀