Dat : module { PATH : con "/dis/acme/dat.dis"; init : fn(mods : ref Mods); Mods : adt { sys : Sys; bufio : Bufio; draw : Draw; styx : Styx; styxaux : Styxaux; acme : Acme; gui : Gui; graph : Graph; dat : Dat; framem : Framem; utils : Utils; regx : Regx; scroll : Scroll; textm : Textm; filem : Filem; windowm : Windowm; rowm : Rowm; columnm : Columnm; bufferm : Bufferm; diskm : Diskm; exec : Exec; look : Look; timerm : Timerm; fsys : Fsys; xfidm : Xfidm; plumbmsg : Plumbmsg; edit: Edit; editlog: Editlog; editcmd: Editcmd; }; SZSHORT : con 2; SZINT : con 4; FALSE, TRUE, XXX : con iota; EM_NORMAL, EM_RAW, EM_MASK : con iota; Qdir,Qacme,Qcons,Qconsctl,Qdraw,Qeditout,Qindex,Qlabel,Qnew,QWaddr,QWbody,QWconsctl,QWctl,QWdata,QWeditout,QWevent,QWrdsel,QWwrsel,QWtag,QMAX : con iota; Blockincr : con 256; Maxblock : con 8*1024; NRange : con 10; Infinity : con 16r7fffffff; # huge value for regexp address # fbufalloc() guarantees room off end of BUFSIZE MAXRPC : con 8192+Styx->IOHDRSZ; BUFSIZE : con MAXRPC; EVENTSIZE : con 256; PLUMBSIZE : con 1024; Scrollwid : con 12; # width of scroll bar Scrollgap : con 4; # gap right of scroll bar Margin : con 4; # margin around text Border : con 2; # line between rows, cols, windows Maxtab : con 4; # size of a tab, in units of the '0' character Empty: con 0; Null : con '-'; Delete : con 'd'; Insert : con 'i'; Replace: con 'r'; Filename : con 'f'; # editing Inactive, Inserting, Collecting: con iota; # alphabets ALPHA_LATIN: con '\0'; ALPHA_GREEK: con '*'; ALPHA_CYRILLIC: con '@'; Astring : adt { s : string; }; Lock : adt { cnt : int; chann : chan of int; init : fn() : ref Lock; lock : fn(l : self ref Lock); unlock : fn(l : self ref Lock); locked : fn(l : self ref Lock) : int; }; # Lockx : adt {# sem : ref Lock->Semaphore;## init : fn() : ref Lockx;# lock : fn(l : self ref Lockx);# unlock : fn(l : self ref Lockx);# }; Ref : adt { l : ref Lock; cnt : int; init : fn() : ref Ref; inc : fn(r : self ref Ref) : int; dec : fn(r : self ref Ref) : int; refx : fn(r : self ref Ref) : int; }; Runestr : adt { r: string; nr: int; }; Range : adt { q0 : int; q1 : int; }; Block : adt { addr : int; # disk address in bytes n : int; # number of used runes in block next : cyclic ref Block; # pointer to next in free list }; Timer : adt { dt : int; c : chan of int; next : cyclic ref Timer; }; Command : adt { pid : int; name : string; text : string; av : list of string; iseditcmd: int; md : ref Mntdir; next : cyclic ref Command; }; Dirtab : adt { name : string; qtype : int; qid : int; perm : int; }; Mntdir : adt { id : int; refs : int; dir : string; ndir : int; next : cyclic ref Mntdir; nincl : int; incl : array of string; }; Fid : adt { fid : int; busy : int; open : int; qid : Sys->Qid; w : cyclic ref Windowm->Window; dir : array of Dirtab; next : cyclic ref Fid; mntdir : ref Mntdir; nrpart : int; rpart : array of byte; }; Rangeset : type array of Range; Expand : adt { q0 : int; q1 : int; name : string; bname : string; jump : int; at : ref Textm->Text; ar : string; a0 : int; a1 : int; }; Dirlist : adt { r : string; wid : int; }; Reffont : adt { r : ref Ref; f : ref Draw->Font; get : fn(p : int, q : int, r : int, b : string) : ref Reffont; close : fn(r : self ref Reffont); }; Cursor : adt { hot : Draw->Point; size : Draw->Point; bits : array of byte; }; Smsg0 : adt { msize : int; version : string; iounit: int; qid : Sys->Qid; count : int; data : array of byte; stat : Sys->Dir; qids: array of Sys->Qid; }; # loadfile function ptr BUFL, READL: con iota; # allwindows pick type Looper: adt{ cp: ref Edit->Cmd; XY: int; w: array of ref Windowm->Window; nw: int; }; # only one; X and Y can't nest Tofile: adt { f: ref Filem->File; r: ref Edit->String; }; Filecheck: adt{ f: ref Filem->File; r: string; nr: int; }; Allwin: adt{ pick{ LP => lp: ref Looper; FF => ff: ref Tofile; FC => fc: ref Filecheck; } }; seq : int; maxtab : int; mouse : ref Draw->Pointer; reffont : ref Reffont; modbutton : ref Draw->Image; colbutton : ref Draw->Image; button : ref Draw->Image; arrowcursor, boxcursor : ref Cursor; row : ref Rowm->Row; disk : ref Diskm->Disk; seltext : ref Textm->Text; argtext : ref Textm->Text; mousetext : ref Textm->Text; # global because Text.close needs to clear it typetext : ref Textm->Text; # ditto barttext : ref Textm->Text; # shared between mousetask and keyboardtask bartflag : int; activewin : ref Windowm->Window; activecol : ref Columnm->Column; nullrect : Draw->Rect; home : string; plumbed : int; ckeyboard : chan of int; cmouse : chan of ref Draw->Pointer; cwait : chan of string; ccommand : chan of ref Command; ckill : chan of string; cxfidalloc : chan of ref Xfidm->Xfid; cxfidfree : chan of ref Xfidm->Xfid; cerr : chan of string; cplumb : chan of ref Plumbmsg->Msg; cedit: chan of int;};
Dat : module {
PATH : con "/dis/acme/dat.dis";
init : fn(mods : ref Mods);
Mods : adt {
sys : Sys;
bufio : Bufio;
draw : Draw;
styx : Styx;
styxaux : Styxaux;
acme : Acme;
gui : Gui;
graph : Graph;
dat : Dat;
framem : Framem;
utils : Utils;
regx : Regx;
scroll : Scroll;
textm : Textm;
filem : Filem;
windowm : Windowm;
rowm : Rowm;
columnm : Columnm;
bufferm : Bufferm;
diskm : Diskm;
exec : Exec;
look : Look;
timerm : Timerm;
fsys : Fsys;
xfidm : Xfidm;
plumbmsg : Plumbmsg;
edit: Edit;
editlog: Editlog;
editcmd: Editcmd;
};
SZSHORT : con 2;
SZINT : con 4;
FALSE, TRUE, XXX : con iota;
EM_NORMAL, EM_RAW, EM_MASK : con iota;
Qdir,Qacme,Qcons,Qconsctl,Qdraw,Qeditout,Qindex,Qlabel,Qnew,QWaddr,QWbody,QWconsctl,QWctl,QWdata,QWeditout,QWevent,QWrdsel,QWwrsel,QWtag,QMAX : con iota;
Blockincr : con 256;
Maxblock : con 8*1024;
NRange : con 10;
Infinity : con 16r7fffffff; # huge value for regexp address
# fbufalloc() guarantees room off end of BUFSIZE
MAXRPC : con 8192+Styx->IOHDRSZ;
BUFSIZE : con MAXRPC;
EVENTSIZE : con 256;
PLUMBSIZE : con 1024;
Scrollwid : con 12; # width of scroll bar
Scrollgap : con 4; # gap right of scroll bar
Margin : con 4; # margin around text
Border : con 2; # line between rows, cols, windows
Maxtab : con 4; # size of a tab, in units of the '0' character
Empty: con 0;
Null : con '-';
Delete : con 'd';
Insert : con 'i';
Replace: con 'r';
Filename : con 'f';
# editing
Inactive, Inserting, Collecting: con iota;
# alphabets
ALPHA_LATIN: con '\0';
ALPHA_GREEK: con '*';
ALPHA_CYRILLIC: con '@';
Astring : adt {
s : string;
};
Lock : adt {
cnt : int;
chann : chan of int;
init : fn() : ref Lock;
lock : fn(l : self ref Lock);
unlock : fn(l : self ref Lock);
locked : fn(l : self ref Lock) : int;
};
# Lockx : adt {
# sem : ref Lock->Semaphore;
#
# init : fn() : ref Lockx;
# lock : fn(l : self ref Lockx);
# unlock : fn(l : self ref Lockx);
# };
Ref : adt {
l : ref Lock;
cnt : int;
init : fn() : ref Ref;
inc : fn(r : self ref Ref) : int;
dec : fn(r : self ref Ref) : int;
refx : fn(r : self ref Ref) : int;
};
Runestr : adt {
r: string;
nr: int;
};
Range : adt {
q0 : int;
q1 : int;
};
Block : adt {
addr : int; # disk address in bytes
n : int; # number of used runes in block
next : cyclic ref Block; # pointer to next in free list
};
Timer : adt {
dt : int;
c : chan of int;
next : cyclic ref Timer;
};
Command : adt {
pid : int;
name : string;
text : string;
av : list of string;
iseditcmd: int;
md : ref Mntdir;
next : cyclic ref Command;
};
Dirtab : adt {
name : string;
qtype : int;
qid : int;
perm : int;
};
Mntdir : adt {
id : int;
refs : int;
dir : string;
ndir : int;
next : cyclic ref Mntdir;
nincl : int;
incl : array of string;
};
Fid : adt {
fid : int;
busy : int;
open : int;
qid : Sys->Qid;
w : cyclic ref Windowm->Window;
dir : array of Dirtab;
next : cyclic ref Fid;
mntdir : ref Mntdir;
nrpart : int;
rpart : array of byte;
};
Rangeset : type array of Range;
Expand : adt {
q0 : int;
q1 : int;
name : string;
bname : string;
jump : int;
at : ref Textm->Text;
ar : string;
a0 : int;
a1 : int;
};
Dirlist : adt {
r : string;
wid : int;
};
Reffont : adt {
r : ref Ref;
f : ref Draw->Font;
get : fn(p : int, q : int, r : int, b : string) : ref Reffont;
close : fn(r : self ref Reffont);
};
Cursor : adt {
hot : Draw->Point;
size : Draw->Point;
bits : array of byte;
};
Smsg0 : adt {
msize : int;
version : string;
iounit: int;
qid : Sys->Qid;
count : int;
data : array of byte;
stat : Sys->Dir;
qids: array of Sys->Qid;
};
# loadfile function ptr
BUFL, READL: con iota;
# allwindows pick type
Looper: adt{
cp: ref Edit->Cmd;
XY: int;
w: array of ref Windowm->Window;
nw: int;
}; # only one; X and Y can't nest
Tofile: adt {
f: ref Filem->File;
r: ref Edit->String;
};
Filecheck: adt{
f: ref Filem->File;
r: string;
nr: int;
};
Allwin: adt{
pick{
LP => lp: ref Looper;
FF => ff: ref Tofile;
FC => fc: ref Filecheck;
}
};
seq : int;
maxtab : int;
mouse : ref Draw->Pointer;
reffont : ref Reffont;
modbutton : ref Draw->Image;
colbutton : ref Draw->Image;
button : ref Draw->Image;
arrowcursor, boxcursor : ref Cursor;
row : ref Rowm->Row;
disk : ref Diskm->Disk;
seltext : ref Textm->Text;
argtext : ref Textm->Text;
mousetext : ref Textm->Text; # global because Text.close needs to clear it
typetext : ref Textm->Text; # ditto
barttext : ref Textm->Text; # shared between mousetask and keyboardtask
bartflag : int;
activewin : ref Windowm->Window;
activecol : ref Columnm->Column;
nullrect : Draw->Rect;
home : string;
plumbed : int;
ckeyboard : chan of int;
cmouse : chan of ref Draw->Pointer;
cwait : chan of string;
ccommand : chan of ref Command;
ckill : chan of string;
cxfidalloc : chan of ref Xfidm->Xfid;
cxfidfree : chan of ref Xfidm->Xfid;
cerr : chan of string;
cplumb : chan of ref Plumbmsg->Msg;
cedit: chan of int;
};