xref: /inferno-os/appl/lib/strokes/writestrokes.b (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsythimplement Writestrokes;
2*37da2899SCharles.Forsyth
3*37da2899SCharles.Forsyth#
4*37da2899SCharles.Forsyth# write structures to classifier files
5*37da2899SCharles.Forsyth#
6*37da2899SCharles.Forsyth
7*37da2899SCharles.Forsythinclude "sys.m";
8*37da2899SCharles.Forsyth	sys: Sys;
9*37da2899SCharles.Forsyth
10*37da2899SCharles.Forsythinclude "bufio.m";
11*37da2899SCharles.Forsyth	bufio: Bufio;
12*37da2899SCharles.Forsyth	Iobuf: import bufio;
13*37da2899SCharles.Forsyth
14*37da2899SCharles.Forsythinclude "strokes.m";
15*37da2899SCharles.Forsyth	strokes: Strokes;
16*37da2899SCharles.Forsyth	Penpoint, Stroke: import strokes;
17*37da2899SCharles.Forsyth
18*37da2899SCharles.Forsythinit(s: Strokes)
19*37da2899SCharles.Forsyth{
20*37da2899SCharles.Forsyth	sys = load Sys Sys->PATH;
21*37da2899SCharles.Forsyth	bufio = load Bufio Bufio->PATH;
22*37da2899SCharles.Forsyth	strokes = s;
23*37da2899SCharles.Forsyth}
24*37da2899SCharles.Forsyth
25*37da2899SCharles.Forsythwrite_examples(fd: ref Sys->FD, names: array of string, examples: array of list of ref Stroke): string
26*37da2899SCharles.Forsyth{
27*37da2899SCharles.Forsyth	fp := bufio->fopen(fd, Bufio->OWRITE);
28*37da2899SCharles.Forsyth	nclass := len names;
29*37da2899SCharles.Forsyth	fp.puts(sys->sprint("%d\n", nclass));
30*37da2899SCharles.Forsyth	for(i := 0; i < nclass; i++){
31*37da2899SCharles.Forsyth		exl := examples[i];
32*37da2899SCharles.Forsyth		fp.puts(sys->sprint("%d %s\n", len exl, names[i]));
33*37da2899SCharles.Forsyth		for(; exl != nil; exl = tl exl){
34*37da2899SCharles.Forsyth			putpoints(fp, hd exl);
35*37da2899SCharles.Forsyth			fp.putc('\n');
36*37da2899SCharles.Forsyth		}
37*37da2899SCharles.Forsyth	}
38*37da2899SCharles.Forsyth	if(fp.flush() == Bufio->ERROR)
39*37da2899SCharles.Forsyth		return sys->sprint("write error: %r");
40*37da2899SCharles.Forsyth	fp.close();
41*37da2899SCharles.Forsyth	return nil;
42*37da2899SCharles.Forsyth}
43*37da2899SCharles.Forsyth
44*37da2899SCharles.Forsythwrite_digest(fd: ref Sys->FD, cnames: array of string, dompts: array of ref Stroke): string
45*37da2899SCharles.Forsyth{
46*37da2899SCharles.Forsyth	fp := bufio->fopen(fd, Bufio->OWRITE);
47*37da2899SCharles.Forsyth	n := len cnames;
48*37da2899SCharles.Forsyth	for(i := 0; i < n; i++){
49*37da2899SCharles.Forsyth		d := dompts[i];
50*37da2899SCharles.Forsyth		npts := d.npts;
51*37da2899SCharles.Forsyth		fp.puts(cnames[i]);
52*37da2899SCharles.Forsyth		putpoints(fp, d);
53*37da2899SCharles.Forsyth		fp.putc('\n');
54*37da2899SCharles.Forsyth	}
55*37da2899SCharles.Forsyth	if(fp.flush() == Bufio->ERROR)
56*37da2899SCharles.Forsyth		return sys->sprint("write error: %r");
57*37da2899SCharles.Forsyth	fp.close();
58*37da2899SCharles.Forsyth	return nil;
59*37da2899SCharles.Forsyth}
60*37da2899SCharles.Forsyth
61*37da2899SCharles.Forsythputpoints(fp: ref Iobuf, d: ref Stroke)
62*37da2899SCharles.Forsyth{
63*37da2899SCharles.Forsyth	fp.puts(sys->sprint(" %d", d.npts));
64*37da2899SCharles.Forsyth	for(j := 0; j < d.npts; j++){
65*37da2899SCharles.Forsyth		p := d.pts[j];
66*37da2899SCharles.Forsyth		fp.puts(sys->sprint(" %d %d", p.x, p.y));
67*37da2899SCharles.Forsyth	}
68*37da2899SCharles.Forsyth}
69