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