xref: /inferno-os/module/format.m (revision 46439007cf417cbd9ac8049bb4122c890097a0fa)
1*46439007SCharles.ForsythFormat: module {
2*46439007SCharles.Forsyth	PATH: con "/dis/lib/format.dis";
3*46439007SCharles.Forsyth	Fmtspec: adt {
4*46439007SCharles.Forsyth		name: string;
5*46439007SCharles.Forsyth		fields: cyclic array of Fmtspec;
6*46439007SCharles.Forsyth	};
7*46439007SCharles.Forsyth	Fmt: adt {
8*46439007SCharles.Forsyth		kind: int;
9*46439007SCharles.Forsyth		fields: cyclic array of Fmt;
10*46439007SCharles.Forsyth	};
11*46439007SCharles.Forsyth	Fmtval: adt {
12*46439007SCharles.Forsyth		val: ref Sexprs->Sexp;
13*46439007SCharles.Forsyth		recs: cyclic array of array of Fmtval;
14*46439007SCharles.Forsyth
15*46439007SCharles.Forsyth		text: fn(v: self Fmtval): string;
16*46439007SCharles.Forsyth	};
17*46439007SCharles.Forsyth	Fmtfile: adt {
18*46439007SCharles.Forsyth		spec: array of Fmtspec;
19*46439007SCharles.Forsyth		descr: array of byte;
20*46439007SCharles.Forsyth
21*46439007SCharles.Forsyth		new: fn(spec: array of Fmtspec): Fmtfile;
22*46439007SCharles.Forsyth		open: fn(f: self Fmtfile, name: string): ref Bufio->Iobuf;
23*46439007SCharles.Forsyth		read: fn(f: self Fmtfile, iob: ref Bufio->Iobuf): (array of Fmtval, string);
24*46439007SCharles.Forsyth	};
25*46439007SCharles.Forsyth	init: fn();
26*46439007SCharles.Forsyth	spec2se: fn(spec: array of Fmtspec): list of ref Sexprs->Sexp;
27*46439007SCharles.Forsyth	spec2fmt: fn(spec: array of Fmtspec): array of Fmt;
28*46439007SCharles.Forsyth	se2fmt: fn(spec: array of Fmtspec, se: ref Sexprs->Sexp): (array of Fmt, string);
29*46439007SCharles.Forsyth	rec2val: fn(spec: array of Fmtspec, rec: ref Sexprs->Sexp): (array of Fmtval, string);
30*46439007SCharles.Forsyth};
31