diff options
Diffstat (limited to 'appl/acme/edit.m')
| -rw-r--r-- | appl/acme/edit.m | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/appl/acme/edit.m b/appl/acme/edit.m new file mode 100644 index 00000000..0ea3503d --- /dev/null +++ b/appl/acme/edit.m @@ -0,0 +1,85 @@ +Edit: module { + #pragma varargck argpos editerror 1 + + PATH: con "/dis/acme/edit.dis"; + + String: adt{ + n: int; + r: string; + }; + + Addr: adt{ + typex: int; # # (char addr), l (line addr), / ? . $ + - , ; + num: int; + next: cyclic ref Addr; # or right side of , and ; + re: ref String; + left: cyclic ref Addr; # left side of , and ; + }; + + Address: adt{ + r: Dat->Range; + f: ref Filem->File; + }; + + Cmd: adt{ + addr: ref Addr; # address (range of text) + re: ref String; # regular expression for e.g. 'x' + next: cyclic ref Cmd; # pointer to next element in {} + num: int; + flag: int; # whatever + cmdc: int; # command character; 'x' etc. + cmd: cyclic ref Cmd; # target of x, g, {, etc. + text: ref String; # text of a, c, i; rhs of s + mtaddr: ref Addr; # address for m, t + }; + + Cmdt: adt{ + cmdc: int; # command character + text: int; # takes a textual argument? + regexp: int; # takes a regular expression? + addr: int; # takes an address (m or t)? + defcmd: int; # default command; 0==>none + defaddr: int; # default address + count: int; # takes a count e.g. s2/// + token: string; # takes text terminated by one of these + fnc: int; # function to call with parse tree + }; + + cmdtab: array of Cmdt; + + INCR: con 25; # delta when growing list + + List: adt{ + nalloc: int; + nused: int; + pick{ + C => cmdptr: array of ref Cmd; + S => stringptr: array of ref String; + A => addrptr: array of ref Addr; + } + }; + + aNo, aDot, aAll: con iota; # default addresses + + ALLLOOPER, ALLTOFILE, ALLMATCHFILE, ALLFILECHECK, ALLELOGTERM, ALLEDITINIT, ALLUPDATE: con iota; + + C_nl, C_a, C_b, C_c, C_d, C_B, C_D, C_e, C_f, C_g, C_i, C_k, C_m, C_n, C_p, C_s, C_u, C_w, C_x, C_X, C_pipe, C_eq: con iota; + + editing: int; + curtext: ref Textm->Text; + + init : fn(mods : ref Dat->Mods); + + allocstring: fn(a0: int): ref String; + freestring: fn(a0: ref String); + getregexp: fn(a0: int): ref String; + newaddr: fn(): ref Addr; + editcmd: fn(t: ref Textm->Text, r: string, n: int); + editerror: fn(a0: string); + cmdlookup: fn(a0: int): int; + Straddc: fn(a0: ref String, a1: int); + + allelogterm: fn(w: ref Windowm->Window); + alleditinit: fn(w: ref Windowm->Window); + allupdate: fn(w: ref Windowm->Window); +}; |
