summaryrefslogtreecommitdiff
path: root/appl/wm/samstub.m
diff options
context:
space:
mode:
Diffstat (limited to 'appl/wm/samstub.m')
-rw-r--r--appl/wm/samstub.m132
1 files changed, 132 insertions, 0 deletions
diff --git a/appl/wm/samstub.m b/appl/wm/samstub.m
new file mode 100644
index 00000000..5bde16d8
--- /dev/null
+++ b/appl/wm/samstub.m
@@ -0,0 +1,132 @@
+Samstub: module
+{
+ PATH: con "/dis/wm/samstub.dis";
+ SAM: con "sam -R";
+
+ VERSION: con 0;
+ UTFmax: con 3;
+
+ TBLOCKSIZE: con 512; # largest piece of text sent to terminal ...
+ DATASIZE: con (UTFmax*TBLOCKSIZE+30);
+ # ... including protocol header stuff
+ SNARFSIZE: con 4096; # maximum length of exchanged snarf buffer
+
+ # Message types
+ Error, Status, Debug: con iota;
+
+ Sammsg: adt {
+ mtype: int;
+ mcount: int;
+ mdata: array of byte;
+
+ inshort: fn(h: self ref Sammsg, n: int): int;
+ inlong: fn(h: self ref Sammsg, n: int): int;
+ invlong: fn(h: self ref Sammsg, n: int): big;
+ outcopy: fn(h: self ref Sammsg, pos: int, data: array of byte);
+ outshort: fn(h: self ref Sammsg, pos: int, s: int);
+ outlong: fn(h: self ref Sammsg, pos: int, s: int);
+ outvlong: fn(h: self ref Sammsg, pos: int, s: big);
+ };
+
+ Samio: adt {
+ ctl: ref Sys->FD; # /cmd/nnn/ctl
+ data: ref Sys->FD; # /cmd/nnn/data
+ buffer: array of byte; # buffered data read from sam
+ index: int;
+ count: int; # pointers into buffer
+
+ };
+
+ init: fn(ctxt: ref Context);
+
+ start: fn(): (ref Samio, chan of ref Sammsg);
+ sender: fn(s: ref Samio, c: chan of ref Sammsg);
+ receiver: fn(s: ref Samio, c: chan of ref Sammsg);
+
+ outTs: fn(t, s: int);
+ outTv: fn(t: int, i: big);
+ outT0: fn(t: int);
+ outTsl: fn(t, m, l: int);
+ outTslS: fn(t, s1, l1: int, s: string);
+ outTsll: fn(t, m, l1, l2: int);
+
+ cleanout: fn();
+ close: fn(win, tag: int);
+ cut: fn(t: ref Text, fl: ref Flayer);
+ findhole: fn(t: ref Text): (int, int);
+ grow: fn(t: ref Text, l1, l2: int);
+ horigin: fn(m, l: int);
+ inmesg: fn(h: ref Sammsg): int;
+ keypress: fn(key: string);
+ look: fn(t: ref Text, fl: ref Flayer);
+ menuins: fn(p: int, s: string, t: ref Text, tg: int);
+ newtext: fn(tag, tp: int): int;
+ paste: fn(t: ref Text, fl: ref Flayer);
+ scrollto: fn(fl: ref Flayer, where: int);
+ sctget: fn(scts: list of ref Section, p1, p2: int): string;
+ sctgetlines: fn(scts: list of ref Section, p, n: int):
+ (int, string);
+ scthole: fn(t: ref Text, f: int): (int, int);
+ sctput: fn(scts: list of ref Section, pos: int, s: string):
+ list of ref Section;
+ search: fn(t: ref Text, fl: ref Flayer);
+ send: fn(t: ref Text, fl: ref Flayer);
+ setlock: fn();
+ snarf: fn(t: ref Text, fl: ref Flayer);
+ startcmdfile: fn();
+ startfile: fn(tag: int): int;
+ startnewfile: fn();
+ updatefls: fn(t: ref Text, l: int, s: string);
+ zerox: fn(t: ref Text);
+
+ Tversion, # version
+ Tstartcmdfile, # terminal just opened command frame
+ Tcheck, # ask host to poke with Hcheck
+ Trequest, # request data to fill a hole
+ Torigin, # gimme an Horigin near here
+ Tstartfile, # terminal just opened a file's frame
+ Tworkfile, # set file to which commands apply
+ Ttype, # add some characters, but terminal already knows
+ Tcut,
+ Tpaste,
+ Tsnarf,
+ Tstartnewfile, # terminal just opened a new frame
+ Twrite, # write file
+ Tclose, # terminal requests file close; check mod. status
+ Tlook, # search for literal current text
+ Tsearch, # search for last regular expression
+ Tsend, # pretend he typed stuff
+ Tdclick, # double click
+ Tstartsnarf, # initiate snarf buffer exchange
+ Tsetsnarf, # remember string in snarf buffer
+ Tack, # acknowledge Hack
+ Texit, # exit
+ TMAX: con iota;
+
+ Hversion, # version
+ Hbindname, # attach name[0] to text in terminal
+ Hcurrent, # make named file the typing file
+ Hnewname, # create "" name in menu
+ Hmovname, # move file name in menu
+ Hgrow, # insert space in rasp
+ Hcheck0, # see below
+ Hcheck, # ask terminal to check whether it needs more data
+ Hunlock, # command is finished; user can do things
+ Hdata, # store this data in previously allocated space
+ Horigin, # set origin of file/frame in terminal
+ Hunlockfile, # unlock file in terminal
+ Hsetdot, # set dot in terminal
+ Hgrowdata, # Hgrow + Hdata folded together
+ Hmoveto, # scrolling, context search, etc.
+ Hclean, # named file is now 'clean'
+ Hdirty, # named file is now 'dirty'
+ Hcut, # remove space from rasp
+ Hsetpat, # set remembered regular expression
+ Hdelname, # delete file name from menu
+ Hclose, # close file and remove from menu
+ Hsetsnarf, # remember string in snarf buffer
+ Hsnarflen, # report length of implicit snarf
+ Hack, # request acknowledgement
+ Hexit,
+ HMAX: con iota;
+};