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