xref: /inferno-os/appl/cmd/auxi/digest.b (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsythimplement Digest;
2*37da2899SCharles.Forsyth
3*37da2899SCharles.Forsyth#
4*37da2899SCharles.Forsyth# read a classifier example file and write its digest
5*37da2899SCharles.Forsyth#
6*37da2899SCharles.Forsyth
7*37da2899SCharles.Forsythinclude "sys.m";
8*37da2899SCharles.Forsyth	sys: Sys;
9*37da2899SCharles.Forsyth
10*37da2899SCharles.Forsythinclude "draw.m";
11*37da2899SCharles.Forsyth
12*37da2899SCharles.Forsythinclude "bufio.m";
13*37da2899SCharles.Forsyth	bufio: Bufio;
14*37da2899SCharles.Forsyth	Iobuf: import bufio;
15*37da2899SCharles.Forsyth
16*37da2899SCharles.Forsythinclude "strokes.m";
17*37da2899SCharles.Forsyth	strokes: Strokes;
18*37da2899SCharles.Forsyth	Classifier, Penpoint, Stroke: import strokes;
19*37da2899SCharles.Forsyth	readstrokes: Readstrokes;
20*37da2899SCharles.Forsyth	writestrokes: Writestrokes;
21*37da2899SCharles.Forsyth
22*37da2899SCharles.Forsythinclude "arg.m";
23*37da2899SCharles.Forsyth
24*37da2899SCharles.ForsythDigest: module
25*37da2899SCharles.Forsyth{
26*37da2899SCharles.Forsyth	init:	fn(nil: ref Draw->Context, nil: list of string);
27*37da2899SCharles.Forsyth};
28*37da2899SCharles.Forsyth
29*37da2899SCharles.Forsythusage()
30*37da2899SCharles.Forsyth{
31*37da2899SCharles.Forsyth	sys->fprint(sys->fildes(2), "Usage: digest [file.cl ...]\n");
32*37da2899SCharles.Forsyth	raise "fail:usage";
33*37da2899SCharles.Forsyth}
34*37da2899SCharles.Forsyth
35*37da2899SCharles.Forsythinit(nil: ref Draw->Context, args: list of string)
36*37da2899SCharles.Forsyth{
37*37da2899SCharles.Forsyth	sys = load Sys Sys->PATH;
38*37da2899SCharles.Forsyth	bufio = load Bufio Bufio->PATH;
39*37da2899SCharles.Forsyth	strokes = load Strokes Strokes->PATH;
40*37da2899SCharles.Forsyth	if(strokes == nil)
41*37da2899SCharles.Forsyth		nomod(Strokes->PATH);
42*37da2899SCharles.Forsyth	strokes->init();
43*37da2899SCharles.Forsyth	readstrokes = load Readstrokes Readstrokes->PATH;
44*37da2899SCharles.Forsyth	if(readstrokes == nil)
45*37da2899SCharles.Forsyth		nomod(Readstrokes->PATH);
46*37da2899SCharles.Forsyth	readstrokes->init(strokes);
47*37da2899SCharles.Forsyth	writestrokes = load Writestrokes Writestrokes->PATH;
48*37da2899SCharles.Forsyth	if(writestrokes == nil)
49*37da2899SCharles.Forsyth		nomod(Writestrokes->PATH);
50*37da2899SCharles.Forsyth	writestrokes->init(strokes);
51*37da2899SCharles.Forsyth
52*37da2899SCharles.Forsyth	arg := load Arg Arg->PATH;
53*37da2899SCharles.Forsyth	if(arg == nil)
54*37da2899SCharles.Forsyth		nomod(Arg->PATH);
55*37da2899SCharles.Forsyth	arg->init(args);
56*37da2899SCharles.Forsyth	while((opt := arg->opt()) != 0)
57*37da2899SCharles.Forsyth		case opt {
58*37da2899SCharles.Forsyth		* =>
59*37da2899SCharles.Forsyth			usage();
60*37da2899SCharles.Forsyth		}
61*37da2899SCharles.Forsyth	args = arg->argv();
62*37da2899SCharles.Forsyth	arg = nil;
63*37da2899SCharles.Forsyth
64*37da2899SCharles.Forsyth	for(; args != nil; args = tl args){
65*37da2899SCharles.Forsyth		ofile := file := hd args;
66*37da2899SCharles.Forsyth		n := len file;
67*37da2899SCharles.Forsyth		if(n >= 3 && ofile[n-3:] == ".cl")
68*37da2899SCharles.Forsyth			ofile = ofile[0:n-3];
69*37da2899SCharles.Forsyth		ofile += ".clx";
70*37da2899SCharles.Forsyth		(err, rec) := readstrokes->read_classifier(hd args, 1, 0);
71*37da2899SCharles.Forsyth		if(err != nil)
72*37da2899SCharles.Forsyth			error(sys->sprint("error reading classifier from %s: %s", file, err));
73*37da2899SCharles.Forsyth		fd := sys->create(ofile, Sys->OWRITE, 8r666);
74*37da2899SCharles.Forsyth		if(fd == nil)
75*37da2899SCharles.Forsyth			error(sys->sprint("can't create %s: %r", file));
76*37da2899SCharles.Forsyth		err = writestrokes->write_digest(fd, rec.cnames, rec.dompts);
77*37da2899SCharles.Forsyth		if(err != nil)
78*37da2899SCharles.Forsyth			error(sys->sprint("error writing digest to %s: %s", file, err));
79*37da2899SCharles.Forsyth	}
80*37da2899SCharles.Forsyth}
81*37da2899SCharles.Forsyth
82*37da2899SCharles.Forsythnomod(s: string)
83*37da2899SCharles.Forsyth{
84*37da2899SCharles.Forsyth	error(sys->sprint("can't load %s: %r", s));
85*37da2899SCharles.Forsyth}
86*37da2899SCharles.Forsyth
87*37da2899SCharles.Forsytherror(s: string)
88*37da2899SCharles.Forsyth{
89*37da2899SCharles.Forsyth	sys->fprint(sys->fildes(2), "digest: %s\n", s);
90*37da2899SCharles.Forsyth	raise "fail:error";
91*37da2899SCharles.Forsyth}
92