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