- USED(s);
- if(first){
- if(initdraw(0,0,"plot") < 0)
- sysfatal("initdraw: %r");
- einit(Emouse);
- clipminx=mapminx=screen->r.min.x+4;
- clipminy=mapminy=screen->r.min.y+4;
- clipmaxx=mapmaxx=screen->r.max.x-5;
- clipmaxy=mapmaxy=screen->r.max.y-5;
- dx=clipmaxx-clipminx;
- dy=clipmaxy-clipminy;
- if(dx>dy){
- mapminx+=(dx-dy)/2;
- mapmaxx=mapminx+dy;
- }
- else{
- mapminy+=(dy-dx)/2;
- mapmaxy=mapminy+dx;
- }
- first=0;
- offscreen = screen;
+
+ if(once)
+ return;
+ once = 1;
+
+ if(initdraw(nil, nil, "plot") < 0)
+ sysfatal("initdraw: %r");
+///// einit(Emouse);
+ offscreen = allocimage(display, insetrect(screen->r, 4), screen->chan, 0, -1);
+ if(offscreen == nil)
+ sysfatal("Can't double buffer\n");
+ clipminx = mapminx = screen->r.min.x+4;
+ clipminy = mapminy = screen->r.min.y+4;
+ clipmaxx = mapmaxx = screen->r.max.x-5;
+ clipmaxy = mapmaxy = screen->r.max.y-5;
+ dx = clipmaxx-clipminx;
+ dy = clipmaxy-clipminy;
+ if(dx>dy){
+ mapminx += (dx-dy)/2;
+ mapmaxx = mapminx+dy;
+ }
+ else{
+ mapminy += (dy-dx)/2;
+ mapmaxy = mapminy+dx;