[ASMBL.REC] [CNVRT assembler of intermediate code for "C"] [Harold V. McIntosh, 20 June 1983] { { [find/make FCB] (Jj'TTY:'EQZD;(':'UQD':'ED\64-%;0%;) ('.'U<(8a;@b;)Q|D>;Z'.DAT'IJj:) '.'FJDZ(3a;@b;)Q|JZDI 32(dpGm$r0=npGpGd0&$Sm@znpGQ&$rrS0; r12wQmwnEn;n:)D;) f [blank fill by count] (Zz(d' 'I:;)JZ;) b [zero fill] (cmpw0%(f:;)w;) 0 [zero FCB & buffer] ($m33@0130@0nn&0||pLnS;) z [set default input file] (0,30$S'5C'H12wA' 'Ew4@0n0|0|pL31$S 'TTY:'31$rrS; B9aQD(3a' 'E 'DAT';Q;)|mw31@zn31$rrS31@r;) i [open for read] (@hr15K(255='NO FILE'I;L;)L;) r [open for write] (@hpGpG4+1&SrpG19k22k^^r128&S;) w [set DMA address] ($rpG^^r^^26k;) h [open] (m@f0=n@@;nLL;) O [read] (''(AL@f(0=pG@r;'TTY:'(='T');)) ('T'='';L31pG$rr12w'TTY:'Ew;w) L@&'> 'TL(@#I;:); $r(pG^^rpGmr(0=(npGpGm128&S^^26kpGr 20K0=L;LL1npGpGm129+26%&SS;)npGmr;;) pG130&-n+&dm(u13%=;10%(=)pGI(26%=; L);ndm:)L^^rn&S;LpG^^r0&S:);) R [write] (Jj'='U<(A@f'TTY:'(=)(0=pG@w;;))>'='ED ZqtD; >'='EDZ<@g;) W [write to disk] ($r(pG^^rpGpGmrpGm- 130+n&maQD>ZnSnSL;);) g [close all files] (31pGm($r0=;pG4+r(0=L;LJj26%I;J>);nLA:0&$SL>)>LL;) > [body of variable search] (pG$r(0=)yGEz@=L;pG$r(0=;LL) Z<((jJQmpGl&$S zZ<@=>;J>);nLA:0&$S>)>L;) < [insert variable] ($ryGI;) [ [generic assignment] {(0@( 1@( {(0@: 1@: ;); ( @;(J'+=@&'Ez@1(('@[2]in'(Fz;Zz<)Z<>;J>);A:)JZDz<'/pob/poa/*a#'I1@['/+[b]a/pu[b]'I'C'@%Z>'[2]in'I;); @;(J'+=@&'Ez@1(('@&[2]in'(Fz;Zz<)Z<>;J>);A:)JZDz<'poa/pob/lb[b]/xab/*a#'I1@['/+[b]a/pu[b]'I'C'@%Z>'[2]in'I;); @;(J'-=@&'Ez@1(('@[2]in'(Fz;Zz<)Z<>;J>);A:)JZDz<'/pob/poa/*a#'I1@['/-[b]a/pu[b]'I'C'@%Z>'[2]in'I;); @;(J'-=@&'Ez@1(('@&[2]in'(Fz;Zz<)Z<>;J>);A:)JZDz<'poa/pob/lb[b]/xab/*a#'I1@['/-[b]a/pu[b]'I'C'@%Z>'[2]in'I;); @;(J {[vbl] ('@&'Ez@2'in@'Ez@2'in'Ez;) = ('@&'0@>;)}[vbl] JZDz<'/pob/poa'Iz<0@[@bZ>'/pua'I'C'@%Z>'[2]in'I;); @;(J {[vbl] ('@&'Ez@2'in@&'Ez@2'in'Ez;) = ('@&'0@>;)}[vbl] JZDz<'/poa/pob/lb[b]/xab'Iz<0@[@bZ>'/pua'I'C'@%Z>'[2]in'I;); @;(JJZD'can'I39%I't store'I;); ;)} 0@) 1@) nn$S nn$S;)} a [code for assignment options] {(( (J'='EzJZD'/sa[b]'I;); (J'+='EzJZD'/+a[b]/sa[b]'I;); (J'-='EzJZD'/-a[b]/sa[b]'I;); ;) ;)} b [generic binary] {(0@( 1@( {(0@: 1@: ;); ( @;(J'-@'Ez@1(('@'(Fz;Zz<)Z<@1>;J>);A:)JZD'[2]in'Iz<'/poa/pob/div#'I1@['/pua'I'C'@%Z>;); @;(J {[vbl] ('@[2]in@[2]in'Ez;) = ('@[2]in@[2]in'0@>;)}[vbl] JZD'[2]in'Iz<'/poa/pob'Iz<0@[@dZ>'C'@%Z>'/pua'I;); @;(J {[vbl] ('@&[2]in@[2]in'Ez;) = ('@&[2]in@[2]in'0@>;)}[vbl] JZD'[2]in'Iz<'/pob/la[b]/pob'Iz<0@[@dZ>'/pua'I'C'@%Z>;); @;(J {[vbl] ('@[2]in@&[2]in'Ez;) = ('@[2]in@&[2]in'0@>;)}[vbl] JZD'[2]in'Iz<'/poa/pob/lb[b]'Iz<0@[@dZ>'/pua'I'C'@%Z>;); @;(J {[vbl] ('@&[2]in@&[2]in'Ez;) = ('@&[2]in@&[2]in'0@>;)}[vbl] JZD'[2]in'Iz<'/pob/la[b]/pob/lb[b]'Iz<0@[@dZ>'/pua'I'C'@%Z>;); ;)} 0@) 1@) nn$S nn$S;)} c [code for binary options] {(( (J'+'EzJZD'/+ab'I;); (J'-'EzJZD'/-ab'I;); (J'*'EzJZD'/*ab'I;); ;) ;)} d [generic unary] { ( [and] Z<( [or] Z<('+'Ez; J'-'Ez; J'!'Ez;>)> [or] jJ><0@](A);>)> [and] ;) A ( [and] Z<( [or] Z<('pri'Ez; J'prd'Ez; J'poi'Ez; J'pod'Ez;>)> [or] jJ><0@](A);>)> [and] ;) B (0@( 1@( {(0@: 1@: ;); ( @;(J'&@&'Ez0@]JZD0@[;); @;(J'&'EzJZDz<'excess &'I'C'@%Z>;); @;(J'*@&*'Ez0@]JZD'&'I0@[z<'/pob/pu[b]'I'C'@%Z>;); @;(J@A'@&[2]in'EzJZD'[2]in'Iz<'/pob/pu[b]'I'C'@%Z>z'C'@%Z>;); @;(J@B'@&[2]in'EzJZD'[2]in'Iz'C'@%Z>;); @;(J@A'@[2]in'EzJZD'[2]in'Iz'C'@%Z>;); @;(J@B'@&*['Ez {[vbl] (']'Ez;) = (']'1@>;)}[vbl] JZD'[2]in'Iz'C'@%Z>;); @;(J@B'@&['Ez(('*'(Fz;Zz<)Z< {[vbl] (']'Ez;) = (']'1@>;)}[vbl] >;J>);A:)JZD'[2]in'Iz'C'@%Z>;); @;(J {[vbl] ('@[2]in'Ez;) = ('@[2]in'0@>;)}[vbl] JZD'[2]in'Iz'C'@%Z>;); ;)} 0@) 1@) nn$S nn$S;)} e [code for unary options] {(( (J'pri'EzJZD'/pob/i[b]/pu[b]'I;); (J'prd'EzJZD'/pob/d[b]/pu[b]'I;); (J'poi'EzJZD'/pob/pu[b]/i[b]'I;); (J'pod'EzJZD'/pob/pu[b]/d[b]'I;); (J'!'EzJZD'/poa/-a#1/sbb ax,ax/pua'I;); (J'-'EzJZD'/poa/neg ax/pua'I;); (J'~'EzJZD'/poa/not ax/pua'I;); ;) ;)} f [auto increment and decrement] {(0@( 1@( {(0@: 1@: ;); ( @;(J'pri@'Ez0@]JZD'/pob/la[b]/+a#'I0@['/sa[b]/pua'I;); @;(J'prd@'Ez0@]JZD'/pob/la[b]/-a#'I0@['/sa[b]/pua'I;); @;(J'poi@'Ez0@]JZD'/pob/la[b]/pua/+a#'I0@['/sa[b]'I;); @;(J'pod@'Ez0@]JZD'/pob/la[b]/pua/-a#'I0@['/sa[b]'I;); ;)} 0@) 1@) nn$S nn$S;)} g [assemble fetches] {(0@( 1@( {(0@: 1@: ;); ( @;(J' 'Ez {[vbl] (','Ez((' '(Fz;Zz<)Z< {[vbl] ( {[vbl] (','Ez;) = (1@<;)}[vbl] ;) = (0@<;)}[vbl] >;J>);A:);) = (0@<;)}[vbl] JZD'&'I1@[z<'/la#'I0@['/pua'I'C'@%Z>;); @;(J' 'Ez {[vbl] (','Ez;) = (0@<;)}[vbl] JZD'&[2]int'Iz<'/la#'I0@['/pua'I'C'@%Z>;); ;)} 0@) 1@) nn$S nn$S;)} h [assemble index] {(0@( 1@( {(0@: 1@: ;); ( @;(J'&[2]in@&['Ez(('*'(Fz;Zz<)Z< {[vbl] (']'Ez1@];) = (']'0@>;)}[vbl] >;J>);A:)JZD'&['I0@[']'I1@[z<'/pob/la[b]/pob/*a#'I0@['/+ba/pub'I'C'@%Z>;); @;(J'[2]in@&['Ez(('*'(Fz;Zz<)Z< {[vbl] (']'Ez1@];) = (']'0@>;)}[vbl] >;J>);A:)JZD'&['I0@[']'I1@[z<'/poa/pob/*a#'I0@['/+ba/pub'I'C'@%Z>;); @;(JJZD'not indexable'I;); ;)} 0@) 1@) nn$S nn$S;)} i [assemble function] {(0@( 1@( {(0@: 1@: ;); ( @;(J'&()'Ez {[vbl] ('@'Ez;) = ('@'0@>;)}[vbl] JZD0@[z<'/pob/call [bx]'I'C'@%Z>;); ;)} 0@) 1@) nn$S nn$S;)} j [option menu] { [pointer weights] ( [or] Z<('*'Ez [and] Z<('*'Ez jJ><1@](A);>)> [and] ; J'*['Ez {[vbl] (']'Ez;) = (']'1@>;)}[vbl] ; J'['Ez(('*'(Fz;Zz<)Z< {[vbl] (']'Ez;) = (']'1@>;)}[vbl] >;J>);A:);>)> [or] ;) 1 [pointer compatible] ( [or] Z<('*'Ez((']'(Fz;Zz<)Z<>;J>);A:); J'[2]'Ez; J(('*2]'(Fz;Zz<)Z<>;J>);A:);>)> [or] ;) 2 (0@( 1@( 2@( 3@( {(0@: 1@: 2@: 3@: ;); ( @;(J';'EzJZD;); @;(J':'Ez0@]JZDz<0@['C'@%Z>z<'R'@%Z>0@[;): @;(J'/fetch'Ez {[vbl] (':prog:'Ez {[vbl] (':dict:'Ez2@];) = (':dict:'1@>;)}[vbl] ;) = (':prog:'0@>;)}[vbl] JZD'::prog:'Iz<0@[','I2@[@hZ>'@'I1@[':dict:'I2@[;): @;(J'/define'Ez {[vbl] (':prog:'Ez {[vbl] (':dict:'Ez2@];) = (':dict:'1@>;)}[vbl] ;) = (':prog:'0@>;)}[vbl] JZD'::prog:'I1@[':dict:'I0@[2@[;): @;(J'/assign 'Ez {[vbl] (':prog:'Ez {[vbl] ('@'Ez {[vbl] ('@'Ez3@];) = ('@'2@>;)}[vbl] ;) = ('@'1@>;)}[vbl] ;) = (':prog:'0@>;)}[vbl] JZD'::prog:'Iz<0@['@'I1@['@'I2@[@aZ>'@'I3@[;): @;(J'/binary 'Ez {[vbl] (':prog:'Ez {[vbl] ('@'Ez {[vbl] ('@'Ez3@];) = ('@'2@>;)}[vbl] ;) = ('@'1@>;)}[vbl] ;) = (':prog:'0@>;)}[vbl] JZD'::prog:'Iz<0@['@'I1@['@'I2@[@cZ>'@'I3@[;): @;(J'/unary 'Ez {[vbl] (':prog:'Ez {[vbl] ('@'Ez2@];) = ('@'1@>;)}[vbl] ;) = (':prog:'0@>;)}[vbl] JZD'::prog:'Iz<0@['@'I1@[@eZ>'@'I2@[;): @;(J'/index:prog:'Ez {[vbl] ('@'Ez {[vbl] ('@'Ez2@];) = ('@'1@>;)}[vbl] ;) = ('@'0@>;)}[vbl] JZD'::prog:'Iz<0@['@'I1@[@iZ>'@'I2@[;): @;(J'/function:prog:'Ez {[vbl] ('@'Ez {[vbl] ('@'Ez2@];) = ('@'1@>;)}[vbl] ;) = ('@'0@>;)}[vbl] JZD'::prog:'Iz<0@['@'I1@[@jZ>'@'I2@[;): @;(J'/char'Ez0@]JZD'/define a[1]ch, b[1]ch, c[3*1]ch, d*[1]ch,'I0@[;): @;(J'/int'Ez0@]JZD'/define i[2]in, j*[2]in, k[8*2]in, o**[8*3*2]in, l()[2]in,'I0@[;): @;(J'/float'Ez0@]JZD'/define p[4]fl, q***[4]fl, r()[4]fl,'I0@[;): @;(J'/clear'EzJZD'::prog:@'Iz<'|'@%Z>':dict:'I;): @;(J((':prog:'(Fz;Zz<)Z<0@]>;J>);A:)JZDz<'nope'I'C'@%Z>'::prog:'I0@[;): ;)} 0@) 1@) 2@) 3@) nn$S nn$S nn$S nn$S;)} w [main program] {(( (JJZDz':prog:@'Iz<'|'@%Z>':dict:'I@wZ>;); ;) ;)} ~ ('i'@%'D'@%'R'@%@~JZqt'c'@%;) } [end]