xref: /inferno-os/appl/math/graph0.b (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
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