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