1*37da2899SCharles.Forsythimplement Graph0; 2*37da2899SCharles.Forsyth 3*37da2899SCharles.Forsythinclude "sys.m"; 4*37da2899SCharles.Forsyth sys: Sys; 5*37da2899SCharles.Forsyth print: import sys; 6*37da2899SCharles.Forsyth 7*37da2899SCharles.Forsythinclude "draw.m"; 8*37da2899SCharles.Forsythinclude "tk.m"; 9*37da2899SCharles.Forsyth tk: Tk; 10*37da2899SCharles.Forsyth 11*37da2899SCharles.Forsythinclude "bufio.m"; 12*37da2899SCharles.Forsyth bufio: Bufio; 13*37da2899SCharles.Forsyth Iobuf: import bufio; 14*37da2899SCharles.Forsyth 15*37da2899SCharles.Forsythinclude "gr.m"; 16*37da2899SCharles.Forsyth gr: GR; 17*37da2899SCharles.Forsyth Plot: import gr; 18*37da2899SCharles.Forsyth 19*37da2899SCharles.ForsythGraph0: module{ 20*37da2899SCharles.Forsyth init: fn(nil: ref Draw->Context, argv: list of string); 21*37da2899SCharles.Forsyth}; 22*37da2899SCharles.Forsyth 23*37da2899SCharles.Forsyth 24*37da2899SCharles.Forsythplotfile(ctxt: ref Draw->Context, nil: list of string, filename: string){ 25*37da2899SCharles.Forsyth p := gr->open(ctxt,filename); 26*37da2899SCharles.Forsyth input := bufio->open(filename,bufio->OREAD); 27*37da2899SCharles.Forsyth if(input==nil){ 28*37da2899SCharles.Forsyth print("can't read %s",filename); 29*37da2899SCharles.Forsyth exit; 30*37da2899SCharles.Forsyth } 31*37da2899SCharles.Forsyth 32*37da2899SCharles.Forsyth n := 0; 33*37da2899SCharles.Forsyth maxn := 100; 34*37da2899SCharles.Forsyth x := array[maxn] of real; 35*37da2899SCharles.Forsyth y := array[maxn] of real; 36*37da2899SCharles.Forsyth while(1){ 37*37da2899SCharles.Forsyth xn := input.gett(" \t\n\r"); 38*37da2899SCharles.Forsyth if(xn==nil) 39*37da2899SCharles.Forsyth break; 40*37da2899SCharles.Forsyth yn := input.gett(" \t\n\r"); 41*37da2899SCharles.Forsyth if(yn==nil){ 42*37da2899SCharles.Forsyth print("after reading %d pairs, saw singleton\n",n); 43*37da2899SCharles.Forsyth exit; 44*37da2899SCharles.Forsyth } 45*37da2899SCharles.Forsyth if(n>=maxn){ 46*37da2899SCharles.Forsyth maxn *= 2; 47*37da2899SCharles.Forsyth newx := array[maxn] of real; 48*37da2899SCharles.Forsyth newy := array[maxn] of real; 49*37da2899SCharles.Forsyth for(i:=0; i<n; i++){ 50*37da2899SCharles.Forsyth newx[i] = x[i]; 51*37da2899SCharles.Forsyth newy[i] = y[i]; 52*37da2899SCharles.Forsyth } 53*37da2899SCharles.Forsyth x = newx; 54*37da2899SCharles.Forsyth y = newy; 55*37da2899SCharles.Forsyth } 56*37da2899SCharles.Forsyth x[n] = real xn; 57*37da2899SCharles.Forsyth y[n] = real yn; 58*37da2899SCharles.Forsyth n++; 59*37da2899SCharles.Forsyth } 60*37da2899SCharles.Forsyth if(n==0){ 61*37da2899SCharles.Forsyth print("empty input\n"); 62*37da2899SCharles.Forsyth exit; 63*37da2899SCharles.Forsyth } 64*37da2899SCharles.Forsyth 65*37da2899SCharles.Forsyth p.graph(x[0:n],y[0:n]); 66*37da2899SCharles.Forsyth p.pen(GR->CIRCLE); 67*37da2899SCharles.Forsyth p.graph(x[0:n],y[0:n]); 68*37da2899SCharles.Forsyth p.paint("",nil,"",nil); 69*37da2899SCharles.Forsyth p.bye(); 70*37da2899SCharles.Forsyth} 71*37da2899SCharles.Forsyth 72*37da2899SCharles.Forsythinit(ctxt: ref Draw->Context, argv: list of string){ 73*37da2899SCharles.Forsyth sys = load Sys Sys->PATH; 74*37da2899SCharles.Forsyth tk = load Tk Tk->PATH; 75*37da2899SCharles.Forsyth bufio = load Bufio Bufio->PATH; 76*37da2899SCharles.Forsyth if((gr = load GR GR->PATH) == nil){ 77*37da2899SCharles.Forsyth sys->print("%s: Can't load gr\n",hd argv); 78*37da2899SCharles.Forsyth exit; 79*37da2899SCharles.Forsyth } 80*37da2899SCharles.Forsyth 81*37da2899SCharles.Forsyth argv = tl argv; 82*37da2899SCharles.Forsyth if(argv!=nil) 83*37da2899SCharles.Forsyth plotfile(ctxt,argv,hd argv); 84*37da2899SCharles.Forsyth} 85