ref: babf901b4a508c3ec5d1f89655f10377bbdf9637
dir: /module/alphabet/fs.m/
# warning: autogenerated code; don't bother to change this, change mktypeset.b or fs.b instead
Fs: module {
PATH: con "/dis/alphabet/fs.dis";
Value: adt {
r: fn(v: self ref Value): ref Value.Vr; # status
d: fn(v: self ref Value): ref Value.Vd; # data
c: fn(v: self ref Value): ref Value.Vc; # command
f: fn(v: self ref Value): ref Value.Vf; # fd
s: fn(v: self ref Value): ref Value.Vs; # string
m: fn(v: self ref Value): ref Value.Vm; # selector
p: fn(v: self ref Value): ref Value.Vp; # gate
t: fn(v: self ref Value): ref Value.Vt; # entries
x: fn(v: self ref Value): ref Value.Vx; # fs
typec: fn(v: self ref Value): int;
type2s: fn(t: int): string;
free: fn(v: self ref Value, used: int);
dup: fn(v: self ref Value): ref Value;
pick {
Vr =>
i: chan of string;
Vd =>
i: Datachan;
Vc =>
i: ref Sh->Cmd;
Vf =>
i: chan of ref Sys->FD;
Vs =>
i: string;
Vm =>
i: Cmpchan;
Vp =>
i: Gatechan;
Vt =>
i: Entrychan;
Vx =>
i: Fschan;
}
};
init: fn();
sendnulldir: fn(c: Fschan): int;
copy: fn(src, dst: Fschan): int;
Option: adt {
opt: int;
args: list of ref Value;
};
Datachan: adt {
d: chan of array of byte;
stop: chan of int;
};
Entrychan: adt {
sync: chan of int;
c: chan of Entry;
};
Cmpchan: type chan of (ref Sys->Dir, ref Sys->Dir, chan of int);
Entry: type (ref Sys->Dir, string, int);
Gatequery: type (Entry, chan of int);
Gatechan: type chan of Gatequery;
Fsdata: adt {
dir: ref Sys->Dir;
data: array of byte;
};
Fschan: type chan of (Fsdata, chan of int);
Next, Down, Skip, Quit: con iota;
Nilentry: con (nil, nil, 0);
};
Fsmodule: module {
types: fn(): string;
init: fn();
run: fn(ctxt: ref Draw->Context, r: ref Reports->Report,
opts: list of Fs->Option, args: list of ref Fs->Value): ref Fs->Value;
};
Fsfilter: module {
PATH: con "/dis/alphabet/fsfilter.dis";
filter: fn[T](t: T, src, dst: Fs->Fschan)
for{
T =>
query: fn(t: self T, d: ref Sys->Dir, name: string, depth: int): int;
};
};