24 double minx = -10, maxx = 10, miny = -10, maxy = 10;
27 cvt(double x, double y)
29 return Pt((x - minx) * Dx(screen->r) / (maxx - minx) + screen->r.min.x, (maxy - y) * Dy(screen->r) / (maxy - miny) + screen->r.min.y);
33 opdraw(int, char **argv)
38 npx = px + sin(θ * PI / 180) * l;
39 npy = py + cos(θ * PI / 180) * l;
40 lines = realloc(lines, (lp + 4) * sizeof(double));
50 opturn(int, char **argv)
58 if(sp + 3 > stacksize){
59 stack = realloc(stack, (stacksize + 3) * sizeof(double));
70 if(sp == 0) sysfatal("stack underflow");
82 frames = realloc(frames, (fp + 1) * sizeof(int));
86 typedef struct Cmd Cmd;
90 void (*op)(int, char**);
108 nf = tokenize(s, f, nelem(f));
110 for(p = cmdtab; p < cmdtab + nelem(cmdtab); p++)
111 if(strcmp(p->name, f[0]) == 0){
112 if(nf != p->nargs + 1 && p->nargs >= 0)
113 sysfatal("wrong number of arguments for %s", f[0]);
117 sysfatal("unknown command %s", f[0]);
125 minx = maxx = lines[frames[curframe]];
126 miny = maxy = lines[frames[curframe]+1];
128 for(i = frames[curframe]; i < frames[curframe + 1]; i += 2){
129 if(lines[i] < minx) minx = lines[i];
130 if(lines[i] > maxx) maxx = lines[i];
131 if(lines[i+1] < miny) miny = lines[i+1];
132 if(lines[i+1] > maxy) maxy = lines[i+1];
134 maxx += (maxx - minx) * 0.05;
135 minx -= (maxx - minx) * 0.05;
136 maxy += (maxy - miny) * 0.05;
137 miny -= (maxy - miny) * 0.05;
138 if(minx == maxx){ minx -= 0.05; maxx += 0.05; }
139 if(miny == maxy){ miny -= 0.05; maxy += 0.05; }
140 draw(screen, screen->r, display->white, nil, ZP);
141 for(i = frames[curframe]; i < frames[curframe + 1]; i += 4)
142 line(screen, cvt(lines[i], lines[i+1]), cvt(lines[i+2], lines[i+3]), 0, 0, 0, display->black, ZP);
143 flushimage(display, 1);
149 if(new && getwindow(display, Refnone) < 0){
150 fprint(2, "colors: can't reattach to window: %r\n");
161 bin = Bfdopen(0, OREAD);
162 if(bin == nil) sysfatal("Bfdopen: %r");
164 frames = malloc(sizeof(int));
168 s = Brdstr(bin, '\n', 1);
173 if(initdraw(nil, nil, nil) < 0)
174 sysfatal("initdraw: %r");
175 einit(Emouse | Ekeyboard);
186 case Kup: case Kleft:
190 case ' ': case Kdown: case Kright:
191 if(curframe < fp - 2)