ref: babf901b4a508c3ec5d1f89655f10377bbdf9637
dir: /appl/acme/dat.m/
Dat : module {
PATH : con "/dis/acme/dat.dis";
init : fn(mods : ref Mods);
Mods : adt {
sys : Sys;
bufio : Bufio;
env : Env;
arg : Arg;
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 '@';
Kscrollup: con 16re050;
Kscrolldown: con 16re051;
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;
};