void GxExpose(Engine *engine, Drauing *drawing, int *xy) { XEngine *xeng = (XEngine *)engine; GpBox damage; if (!drawing || !xeng->w) return; /* xy=0 to redraw all, otherwise x0,y0,x1,y1 */ if (xy) { GpXYMap *map = &engine->devMap; damage.xmin= (xy[0]-map->x.offset)/map->x.scale; damage.xmax= (xy[2]-map->x.offset)/map->x.scale; damage.ymax= (xy[1]-map->y.offset)/map->y.scale; damage.ymin= (xy[3]-map->y.offset)/map->y.scale; } else { damage.xmin = xeng->swapped.viewport.xmin; damage.xmax = xeng->swapped.viewport.xmax; damage.ymin = xeng->swapped.viewport.ymin; damage.ymax = xeng->swapped.viewport.ymax; } if (engine->damaged) { GpSwallow(&engine->damage, &damage); } else { engine->damage = damage; engine->damaged = 1; } GdSetDrawing(drawing); GpPreempt(engine); GdDraw(1); GpPreempt(0); /* not correct if damaged during a preempt... */ GdSetDrawing(0); }
int GhSetPlotter(int number) { if (number<0 || number>=GH_NDEVS) return 1; if (currentDevice>=0) { if (ghDevices[currentDevice].display) { GdSetDrawing(ghDevices[currentDevice].drawing); GhBeforeWait(); GpDeactivate(ghDevices[currentDevice].display); } if (ghDevices[currentDevice].hcp) GpDeactivate(ghDevices[currentDevice].hcp); } if (hcpDefault) GpDeactivate(hcpDefault); currentDevice= number; if (ghDevices[number].display) GpActivate(ghDevices[number].display); return GdSetDrawing(ghDevices[number].drawing); }