for(;;)
switch(event(&e)){
case Ekeyboard:
switch(e.kbdc){
case 'q':
case Kdel:
case Keof:
caseexit:
exits(nil);
case '=':
case '+':
casezoom:
if(mag < Maxmag){
mag++;
makegrid();
drawit();
}
break;
case 'g':
casegrid:
showgrid = !showgrid;
makegrid();
drawit();
break;
case '-':
case '_':
caseunzoom:
if(mag > 1){
mag--;
makegrid();
drawit();
}
break;
case '.':
case ' ':
caseredraw:
drawit();
break;
case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case'0':
mag = e.kbdc-'0';
if(mag == 0)
mag = 10;
makegrid();
drawit();
break;
}
break;
case Emouse:
if(e.mouse.buttons & 1){
lastp = e.mouse.xy;
drawit();
}
if(e.mouse.buttons & 4)
switch(emenuhit(3, &e.mouse, &menu)){
case Mzoom:
goto casezoom;
case Munzoom:
goto caseunzoom;
case Mgrid:
goto casegrid;
case Mredraw:
goto caseredraw;
case Mexit:
goto caseexit;
}
break;
}
}
void
makegrid(void)
{
int m;
if (grid != nil) {
freeimage(grid);
grid = nil;
}
if (showgrid) {
m = mag;
if (m < 5)
m *= 10;
grid = allocimage(display, Rect(0, 0, m, m),
CHAN2(CGrey, 8, CAlpha, 8), 1, DTransparent);
if (grid != nil){
draw(grid, Rect(0, 0, m, 1), chequer, nil, ZP);
draw(grid, Rect(0, 1, 1, m), chequer, nil, ZP);
}
}
}