|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T s
Length: 24217 (0x5e99) Types: TextFile Names: »showimg.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z« └─⟦2109abc41⟧ └─⟦this⟧ »./X.V10R4/showimg/showimg.c«
/* Program to display images on uVax II/GPX under the X window system. * * Bill Wyatt and Jim Gettys, Feb. 12 1986 et. seq. * * 4/23/86 WFW * Added FITS file reading capability, selected via -fits option. * * 7/86 WFW * Added disk fits format via -dfits option, for not swapping bytes, * but file otherwise in disk format. * * 7/86 WFW * Added palette subwindow, zoomx4 window, independently resizeable. * * 8/11/86 WFW * If the palette window needs to be independent instead of a subwindow, * then compile with PALWIND defined. * * 8/13/86 WFW * Added ifdef support from Eric Mandel for ROSAT & Einstein images */ #include <stdio.h> #include <sys/file.h> #include <X/Xlib.h> #include <X/XMenu.h> #include <X/Xkeyboard.h> #ifdef MC68000 #include <sys/types.h> #endif #include "show.icon.ic" #include "shimg.h" #include "shopt.h" #define TESTDEFAULT "=512x512+100+134" #define PICTDEFAULT "+50+100" #define TESTNROWS 512 #define MIN(a,b) (((a) < (b)) ? (a) : (b)) #define MAX(a,b) (((a) > (b)) ? (a) : (b)) main(argc, argv) int argc; char **argv; { struct windmain maininfo; struct colorwind colorinfo; struct imagewind imageinfo; Window wind, subwind, palwind, wzoom; Window iconwindow, iconwzoom; #ifdef PALWIND Window iconpalwind; /* palette window is independent, needs icon */ #endif WindowInfo winfo, palwinfo, wzoominfo; Cursor imcursor, pancursor, printcursor, zoom2cursor, zoom4cursor; Cursor palcursor; int xcenter = -1; int ycenter = -1; /* nominal center of displayed image */ int xtempzero, ytempzero; int xzoomsize = 124, yzoomsize = 124; XMenu *showmenu, *menusetup(); int XMenuSetFreeze(), XMenuActivate(); int *currentflags; int pane = 0, sel = 0; int lastpane = 0, lastsel = 0; unsigned char palette[2048]; /* palette window array */ short *readheader(), *readpict(); int scalepict(); int zoomfactor = 0; /* replication factor for pixel display */ int oldzoomfactor = 0; int fd, open(), close(), ipow(); int w_mapped = 1; int rshift = 0; int keycode = 0; int xbut, ybut; char *malloc(); char *keystring; int j, k, l; XEvent event, peekevent; XExposeEvent *expw = (XExposeEvent *)&event; register XKeyOrButtonEvent *but = (XButtonEvent *)&event; register XMouseMovedEvent *mouse = (XMouseMovedEvent *)&event; register int downbutton = -1; /* mouse button flag */ register int xzero, yzero; /* image coordinates of window(0,0) */ register int i; /* **** MAIN EXECUTION CODE STARTS HERE **** */ maininfo.display = NULL; colorinfo.nplanes = -1; imageinfo.pmin = 70000; imageinfo.pmax = -3000; imageinfo.headskip = 0; imageinfo.calibration = 0; imageinfo.fitsflag = 0; #ifdef XRAY imageinfo.ein = 0; imageinfo.ros = 0; #endif imageinfo.VOP_Flags = VOP_GrayScale | VOP_Initialize; imageinfo.SOP_Flags = SOP_Linear; imageinfo.COP_Flags = 0; imageinfo.FOP_Flags = 0; shgetopt(argc, argv, &maininfo, &colorinfo, &imageinfo); /* create the cursors */ make_cursors(&imcursor,&pancursor,&printcursor, &zoom2cursor, &zoom4cursor, &palcursor); /* try for 8 planes (probably only gets 6) */ if (colorinfo.nplanes < 0) colorinfo.nplanes = MAX(DisplayPlanes()-4,8); /* iterate until cells allocated. Check if enough */ if (XGetColorCells(1, 1, colorinfo.nplanes, &colorinfo.planes, &(colorinfo.pixels[0])) == 0) { while(--colorinfo.nplanes > 2) if(XGetColorCells(1,1,colorinfo.nplanes, &colorinfo.planes, &(colorinfo.pixels[0])) != 0) break; if(colorinfo.nplanes <= 2) { fprintf(stderr,"Insufficient color planes resource!\n"); exit(1); } if(colorinfo.nplanes < 6) fprintf(stderr, "Allocated %d planes\n",colorinfo.nplanes); } colorinfo.ncolors = ipow(2, colorinfo.nplanes); /* figure out how many bits we have to left shift the pixels */ colorinfo.shift = 0; i = colorinfo.pixels[0] | colorinfo.planes; while (((i >>= 1) & 1) == 0) colorinfo.shift++; /* get the menu selections ready */ showmenu = menusetup(argv[0]); if(imageinfo.calibration) { /** GENERATE TEST SCREEN */ imageinfo.ncols = imageinfo.nrows = TESTNROWS; rshift = DisplayPlanes() - colorinfo.nplanes - colorinfo.shift; if((imageinfo.image = (unsigned char *)malloc(imageinfo.nrows*imageinfo.ncols)) == NULL) { fprintf(stderr,"Can't allocate test image!\n"); exit(1); } for (j = 0; j < imageinfo.nrows; j++) for (i = 0; i < imageinfo.ncols; i++) *(imageinfo.image + j*imageinfo.ncols + i) = ((((i + j)&255) >> rshift) & colorinfo.planes) + colorinfo.pixels[0]; wind = XCreate(argv[0], argv[0], maininfo.geometry, TESTDEFAULT, &maininfo.frame, 100, 134); } else { /** READ IN IMAGE **/ #ifdef XRAY /* code and conditional added by egm */ if( imageinfo.ein == 1 ){ eimgopen(imageinfo.ict, imageinfo.filename); } else if( imageinfo.ros == 1 ){ strcpy(imageinfo.poename, imageinfo.filename); strcat(imageinfo.poename, ".poe"); strcpy(imageinfo.hdrname, imageinfo.filename); strcat(imageinfo.hdrname, ".hdr"); openpoe(imageinfo.muthict, imageinfo.poename, imageinfo.hdrname); } else { #endif if((fd = open(imageinfo.filename,O_RDONLY,0)) < 0) { fprintf(stderr,"Error opening file %s\n",imageinfo.filename); exit(1); } if((imageinfo.header = readheader(fd,imageinfo.headskip, &imageinfo.nrows,&imageinfo.ncols, imageinfo.fitsflag)) == NULL) { fprintf(stderr,"Error reading header of file %s\n", imageinfo.filename); exit(1); } #ifdef PALWIND sprintf(maininfo.filegeometry,"=%dx%d%s",imageinfo.ncols, imageinfo.nrows, PICTDEFAULT); #else sprintf(maininfo.filegeometry,"=%dx%d%s",imageinfo.ncols, imageinfo.nrows+PALHEIGHT+2*PALBORDER, PICTDEFAULT); #endif #ifdef XRAY } /* end of conditional code added by egm */ #endif if((imageinfo.image = (unsigned char *)malloc(imageinfo.nrows*imageinfo.ncols)) == NULL) { fprintf(stderr,"Can't allocate byte image?\n"); exit(1); } #ifdef XRAY /* conditional added by egm */ if( imageinfo.ein == 1 ) { /* Einstein XRAY image */ if((imageinfo.picture = (short *)malloc(imageinfo.nrows*imageinfo.ncols*2)) == NULL) { fprintf(stderr,"Can't allocate xray image?\n"); exit(1); } eimgread(imageinfo.ict,imageinfo.picture, imageinfo.ncols, imageinfo.nrows, imageinfo.iy, imageinfo.iz, imageinfo.zoom,imageinfo.zoom, imageinfo.energy); } else if( imageinfo.ros == 1) { /* ROSAT XRAY image */ selectcenter(imageinfo.muthict, imageinfo.iy, imageinfo.iz); selectres(imageinfo.muthict, imageinfo.zoom, imageinfo.zoom); if((imageinfo.picture = (short *)malloc(imageinfo.nrows*imageinfo.ncols*2)) == NULL) { fprintf(stderr,"Can't allocate xray image?\n"); exit(1); } readpoe(imageinfo.muthict, imageinfo.picture, imageinfo.ncols, imageinfo.nrows); } else { #endif /* SAOCCD or FITS image */ if((imageinfo.picture = readpict(fd,imageinfo.nrows,imageinfo.ncols, imageinfo.fitsflag)) == NULL) { fprintf(stderr,"Error reading file %s\n",imageinfo.filename); exit(1); } close(fd); #ifdef XRAY } /* end of conditional added by egm */ #endif if(imageinfo.pmin == 70000 && imageinfo.pmax == -3000) maxminpict(imageinfo.picture, imageinfo.nrows, imageinfo.ncols, &imageinfo.pmax, &imageinfo.pmin); scalepict(imageinfo.image, imageinfo.picture, imageinfo.pmax, imageinfo.pmin, colorinfo.ncolors, colorinfo.pixels[0], colorinfo.shift, imageinfo.nrows, imageinfo.ncols, imageinfo.SOP_Flags); wind = XCreate(argv[0], argv[0], maininfo.geometry, maininfo.filegeometry, &maininfo.frame, 100, 100); } if (wind == 0) { fprintf(stderr, "XCreate on root failed\n"); exit(1); } /* get current info so as to be ready for subwindow placing */ XQueryWindow(wind, &winfo); if((iconwindow = XCreateWindow(RootWindow, 0, 0, show_width, show_height, 0, 0, 0)) == 0) { fprintf(stderr, "XCreateWindow on iconwindow failed\n"); exit(1); } XSetIconWindow(wind, iconwindow); #ifdef PALWIND if((palwind = XCreateWindow(RootWindow, winfo.x, winfo.y+winfo.height, winfo.width, PALHEIGHT, border_width, maininfo.frame.border, BlackPixmap)) == 0) { fprintf(stderr, "XCreateWindow on palwind failed\n"); exit(1); } XStoreName(palwind, argv[0]); #else if((palwind = XCreateWindow(wind, 0, winfo.height-PALHEIGHT-2*PALBORDER, winfo.width-2*PALBORDER, PALHEIGHT, PALBORDER, WhitePixmap, BlackPixmap)) == 0) { fprintf(stderr, "XCreateWindow on palwind failed\n"); exit(1); } #endif if((wzoom = XCreateWindow(RootWindow, winfo.x+winfo.width+ maininfo.frame.bdrwidth, winfo.y, xzoomsize, yzoomsize, maininfo.frame.bdrwidth, maininfo.frame.border, BlackPixmap)) == 0) { fprintf(stderr, "XCreateWindow on wzoom failed\n"); exit(1); } XStoreName(wzoom, argv[0]); if((iconwzoom = XCreateWindow(RootWindow, 0, 0, show_width, show_height, 0, 0, 0)) == 0) { fprintf(stderr, "XCreateWindow on iconwzoom failed\n"); exit(1); } XSetIconWindow(wzoom, iconwzoom); #ifdef PALWIND if((iconpalwind = XCreateWindow(RootWindow, 0, 0, show_width, show_height, 0, 0, 0)) == 0) { fprintf(stderr, "XCreateWindow on iconpalwind failed\n"); exit(1); } XSetIconWindow(palwind, iconpalwind); #endif /* define the cursors */ XUndefineCursor(wind); XDefineCursor(wind,imcursor); XUndefineCursor(palwind); XDefineCursor(palwind,palcursor); /* assume we display center of image in center of window */ if(xcenter < 0) xcenter = imageinfo.ncols>>1; if(ycenter < 0) ycenter = imageinfo.nrows>>1; XSelectInput(wind, ButtonPressed | ButtonReleased | MouseMoved | KeyPressed | ExposeRegion | ExposeWindow | ExposeCopy | UnmapWindow); XSelectInput(iconwindow, ExposeWindow); XSelectInput(wzoom, ExposeWindow | UnmapWindow); XSelectInput(iconwzoom, ExposeWindow); #ifdef PALWIND XSelectInput(palwind, ExposeWindow | UnmapWindow); XSelectInput(iconpalwind, ExposeWindow); #else XSelectInput(palwind, ExposeWindow); #endif XMapWindow(wind); XMapWindow(wzoom); #ifdef PALWIND XMapWindow(palwind); #else XMapSubwindows(wind); #endif XFlush(); while(1) { if(imageinfo.VOP_Flags & VOP_Initialize) { initcmap(colorinfo.ncolors,colorinfo.cmap, colorinfo.pixels[0],colorinfo.nplanes, imageinfo.VOP_Flags); XStoreColors(colorinfo.ncolors, colorinfo.cmap); imageinfo.VOP_Flags &= ~(VOP_Initialize); } XNextEvent(&event); #ifdef GLOPEROO describe_XEvent(event.type, event.window, but->detail, wind, palwind, wzoom); #endif switch((int)event.type) { case KeyPressed: #ifdef VAX keycode = but->detail & 0x00ff; if(IsCursorKey(keycode)) { XUpdateMouse(wind,&mouse->x,&mouse->y,&subwind); i = 1<<zoomfactor; if(keycode == KC_CURSOR_UP) mouse->y -= i; if(keycode == KC_CURSOR_DOWN) mouse->y += i; if(keycode == KC_CURSOR_RIGHT) mouse->x += i; if(keycode == KC_CURSOR_LEFT) mouse->x -= i; if(mouse->x < 0) mouse->x = 0; if(mouse->y < 0) mouse->y = 0; if(mouse->x >= winfo.width) mouse->x = winfo.width-1; if(mouse->y >= winfo.height-PALHEIGHT-2*PALBORDER) mouse->y = winfo.height-PALHEIGHT-2*PALBORDER-1; XWarpMouse(wind,(int)mouse->x,(int)mouse->y); } #else keystring = XLookupMapping(but, &j); /* ANSI cursor keys are esc. seq. */ if(j > 0 && *keystring == '\033') { i = 1<<zoomfactor; if(strcmp(keystring,"\033[A") == 0) mouse->y -= i; /* up */ if(strcmp(keystring,"\033[B") == 0) mouse->y += i; /* down */ if(strcmp(keystring,"\033[C") == 0) mouse->x += i; /* right */ if(strcmp(keystring,"\033[D") == 0) mouse->x -= i; /* left */ if(mouse->x < 0) mouse->x = 0; if(mouse->y < 0) mouse->y = 0; if(mouse->x >= winfo.width) mouse->x = winfo.width-1; if(mouse->y >= winfo.height-PALHEIGHT-2*PALBORDER) XWarpMouse(wind,(int)mouse->x,(int)mouse->y); } #endif break; case ButtonPressed: /* Activate Menu ? */ if((but->detail & (ControlMask | MetaMask | ShiftMask | ShiftLockMask)) == ControlMask) { XQueryWindow(wind, &winfo); XMenuSetFreeze(showmenu); pane = lastpane; sel = lastsel; if(XMenuActivate(showmenu,&pane,&sel, but->x + winfo.x, but->y + winfo.y, ButtonReleased, ¤tflags) == XM_SUCCESS) { /* check out the selection */ lastpane = pane; lastsel = sel; switch(*currentflags & PANEMASK) { /* EXIT */ case 0: exit(0); /* normal exit */ /* Set `viewing mode' - manipulation of color map */ case VOP: imageinfo.VOP_Flags &= ~(currentflags[1]); imageinfo.VOP_Flags |= (*currentflags & SELMASK); XUndefineCursor(wind); XDefineCursor(wind, imcursor); imageinfo.COP_Flags = 0; break; /* Set cursor mode - other uses than above */ case COP: /* if in test mode, disable all but viewing */ if(imageinfo.calibration) break; imageinfo.COP_Flags &= ~(currentflags[1]); imageinfo.COP_Flags |= (*currentflags & SELMASK); if(imageinfo.COP_Flags & COP_Print) { XUndefineCursor(wind); XDefineCursor(wind, printcursor); } else if(imageinfo.COP_Flags & COP_Pan) { XUndefineCursor(wind); XDefineCursor(wind, pancursor); } else if(imageinfo.COP_Flags & COP_Zoom2) { XUndefineCursor(wind); XDefineCursor(wind, zoom2cursor); } else if(imageinfo.COP_Flags & COP_Zoom4) { XUndefineCursor(wind); XDefineCursor(wind, zoom4cursor); } break; /* set picture scaling mode */ case SOP: /* if in test mode, disable all but viewing */ if(imageinfo.calibration) break; /* first, see if any different */ if((imageinfo.SOP_Flags & (*currentflags & SELMASK)) == 0) { imageinfo.SOP_Flags &= ~(currentflags[1]); imageinfo.SOP_Flags |= (*currentflags & SELMASK); scalepict(imageinfo.image, imageinfo.picture, imageinfo.pmax, imageinfo.pmin, colorinfo.ncolors, colorinfo.pixels[0], colorinfo.shift, imageinfo.nrows, imageinfo.ncols, imageinfo.SOP_Flags); writepix( wind, imageinfo.image, imageinfo.ncols, imageinfo.nrows, zoomfactor, 0, 0, winfo.width, winfo.height, xzero, yzero, 0, GXcopy, AllPlanes); } break; case FOP: /* if in test mode, disable all but viewing */ if(imageinfo.calibration) break; break; default: fprintf(stderr,"Unknown menu pane %d\n", *currentflags>>16); } } break; } else if((but->detail & (ControlMask | MetaMask | ShiftMask | ShiftLockMask)) == 0) { /* check if viewing or cursor operation selected */ if(imageinfo.COP_Flags) break; downbutton = but->detail & (RightButton | MiddleButton | LeftButton); CalcMap(&winfo,colorinfo.cmap,(int)but->x,(int)but->y, colorinfo.ncolors, imageinfo.VOP_Flags, downbutton); XStoreColors(colorinfo.ncolors,colorinfo.cmap); break; } break; case ButtonReleased: /* check if viewing or cursor operation selected */ if(imageinfo.COP_Flags) { if(imageinfo.COP_Flags & COP_Print) { /* print 11x11 picture region */ prpict(imageinfo.picture, but->x>>zoomfactor, but->y>>zoomfactor, xzero, yzero, imageinfo.ncols, imageinfo.nrows, 11, 11); } /* recenter (pan) on cursor position */ if(imageinfo.COP_Flags & (COP_Pan | COP_Zoom2 | COP_Zoom4)) { xcenter = xzero + (but->x >> zoomfactor); ycenter = yzero + (but->y >> zoomfactor); /* alter zoomfactor to reflect new zoom */ if(imageinfo.COP_Flags & COP_Pan) zoomfactor = 0; if(imageinfo.COP_Flags & COP_Zoom2) zoomfactor = 1; if(imageinfo.COP_Flags & COP_Zoom4) zoomfactor = 2; xtempzero = MAX( 0, MIN(imageinfo.ncols - (winfo.width>>zoomfactor), xcenter - (winfo.width>>(zoomfactor+1)))); #ifdef PALWIND ytempzero = MAX( 0, MIN(imageinfo.nrows- (winfo.height>>zoomfactor), ycenter - (winfo.height>>(zoomfactor+1)))); #else ytempzero = MAX( 0, MIN(imageinfo.nrows- ((winfo.height-PALHEIGHT-2*PALBORDER) >>zoomfactor), ycenter - ((winfo.height- PALHEIGHT-2*PALBORDER) >>(zoomfactor+1)))); #endif if(xzero != xtempzero || yzero != ytempzero || oldzoomfactor != zoomfactor) { xzero = xtempzero; yzero = ytempzero; writepix( wind, imageinfo.image, imageinfo.ncols, imageinfo.nrows, zoomfactor, 0, 0, winfo.width, winfo.height, xzero, yzero, 0, GXcopy, AllPlanes); XWarpMouse(wind, (xcenter-xzero)<<zoomfactor, (ycenter-yzero)<<zoomfactor); } /* COP_OldFlags = imageinfo.COP_Flags; */ oldzoomfactor = zoomfactor; } break; } if(downbutton < 0) break; CalcMap(&winfo,colorinfo.cmap,(int)but->x,(int)but->y, colorinfo.ncolors, imageinfo.VOP_Flags, downbutton); XStoreColors(colorinfo.ncolors,colorinfo.cmap); downbutton = -1; break; case MouseMoved: XUpdateMouse(wind, &xbut, &ybut, &subwind); XQueryMouseButtons(wind, &xbut, &ybut, &subwind, &mouse->detail); if(subwind == 0 && downbutton >= 0) { CalcMap(&winfo,colorinfo.cmap,xbut,ybut, colorinfo.ncolors, imageinfo.VOP_Flags,downbutton); XStoreColors(colorinfo.ncolors,colorinfo.cmap); } else { updatezoom(wzoom, xzoomsize, yzoomsize, (xzero + (but->x >> zoomfactor)), (yzero + (but->y >> zoomfactor)), imageinfo.ncols, imageinfo.nrows, imageinfo.image, (1<<zoomfactor)); } break; /* On ExposeWindow events, recalculate the image center and * coordinates of upper left hand corner of window. */ case ExposeCopy: case ExposeWindow: if(QLength() > 0) { XPeekEvent(&peekevent); if(peekevent.type == ExposeWindow && peekevent.window == expw->window) break; } if(expw->window == iconwindow) { XBitmapBitsPut(iconwindow, 0, 0, show_width, show_height, show_bits, WhitePixel, BlackPixel, 0, GXcopy, AllPlanes); break; } #ifdef PALWIND if(expw->window == iconpalwind) { XBitmapBitsPut(iconpalwind, 0, 0, show_width, show_height, show_bits, WhitePixel, BlackPixel, 0, GXcopy, AllPlanes); break; } #endif if(expw->window == iconwzoom) { XBitmapBitsPut(iconwzoom, 0, 0, show_width, show_height, show_bits, WhitePixel, BlackPixel, 0, GXcopy, AllPlanes); break; } if(w_mapped == 0) { /* check if to remap windows */ #ifdef PALWIND if(expw->window != palwind) XMapWindow(palwind); #endif if(expw->window != wind) XMapWindow(wind); if(expw->window != wzoom) XMapWindow(wzoom); w_mapped++; } XQueryWindow(wind,&winfo); if(expw->window == wind) { XQueryWindow(palwind,&palwinfo); #ifdef PALWIND XConfigureWindow(palwind, winfo.x, winfo.y+winfo.height+ maininfo.frame.bdrwidth, winfo.width, PALHEIGHT); #else XConfigureWindow(palwind, 0, winfo.height-PALHEIGHT-2*PALBORDER, winfo.width-2*PALBORDER, PALHEIGHT); #endif XQueryWindow(wzoom,&wzoominfo); xzoomsize = wzoominfo.width; yzoomsize = wzoominfo.height; XConfigureWindow(wzoom, winfo.x+winfo.width+ maininfo.frame.bdrwidth, winfo.y, wzoominfo.width, wzoominfo.height); xzero = MAX( 0, MIN(imageinfo.ncols-(winfo.width>>zoomfactor), xcenter - (winfo.width>>(zoomfactor+1)))); #ifdef PALWIND yzero = MAX( 0, MIN(nrows- (winfo.height>>zoomfactor), ycenter - (winfo.height>>(zoomfactor+1)))); #else yzero = MAX( 0, MIN(imageinfo.nrows- ((winfo.height-PALHEIGHT-2*PALBORDER) >>zoomfactor), ycenter - ((winfo.height - PALHEIGHT-2*PALBORDER) >>(zoomfactor+1)))); #endif } if(event.type == ExposeCopy) break; /* drop through to ExposeRegion to draw the window, and * redraw the supporting windows */ case ExposeRegion: if(expw->window == palwind) { XQueryWindow(palwind,&palwinfo); for(i=0; i<palwinfo.width; i++) palette[i] = ((colorinfo.ncolors * i)/palwinfo.width) + colorinfo.pixels[0]; for(i=0; i<palwinfo.height; i++) XPixmapBitsPutZ(palwind, 0, i, palwinfo.width, 1, palette, 0, GXcopy, AllPlanes); } else if(expw->window == wzoom) { XQueryWindow(wzoom,&wzoominfo); xzoomsize = wzoominfo.width; yzoomsize = wzoominfo.height; updatezoom(wzoom, xzoomsize, yzoomsize, xcenter, ycenter, imageinfo.ncols, imageinfo.nrows, imageinfo.image, (1<<zoomfactor)); } else { if( expw->x > imageinfo.ncols<<zoomfactor || expw->y > imageinfo.nrows<<zoomfactor) break; writepix( wind, imageinfo.image, imageinfo.ncols, imageinfo.nrows, zoomfactor, expw->x, expw->y, expw->width, expw->height, xzero, yzero, 0, GXcopy, AllPlanes); } break; /* If any window is unmapped, all three are unmapped */ case UnmapWindow: #ifdef PALWIND if(event.window != palwind) XUnmapWindow(palwind); #endif if(event.window != wzoom) XUnmapWindow(wzoom); if(event.window != wind) XUnmapWindow(wind); w_mapped = 0; break; } } } #ifdef GLOPEROO describe_XEvent(etype, ewindow, detail, wind, palwind, wzoom) unsigned long etype; unsigned short detail; Window ewindow, wind, palwind, wzoom; { fprintf(stderr,"Window "); if(ewindow == wind) { fprintf(stderr,"wind, "); } else if(ewindow == palwind) { fprintf(stderr,"palwind, "); } else if(ewindow == wzoom) { fprintf(stderr,"wzoom, "); } else { fprintf("ERROR %d\n", ewindow); } switch((int)etype) { case KeyPressed: fprintf(stderr,"KeyPressed"); fprintf(stderr," detail = %x", detail); break; case KeyReleased: fprintf(stderr,"KeyReleased"); fprintf(stderr," detail = %x", detail); break; case ButtonPressed: fprintf(stderr,"ButtonPressed"); fprintf(stderr," detail = %x", detail); break; case ButtonReleased: fprintf(stderr,"ButtonReleased"); fprintf(stderr," detail = %x", detail); break; case EnterWindow: fprintf(stderr,"EnterWindow"); fprintf(stderr," detail = %x", detail); break; case LeaveWindow: fprintf(stderr,"LeaveWindow"); fprintf(stderr," detail = %x", detail); break; case MouseMoved: fprintf(stderr,"MouseMoved"); fprintf(stderr," detail = %x", detail); break; case ExposeWindow: fprintf(stderr,"ExposeWindow"); break; case ExposeRegion: fprintf(stderr,"ExposeRegion"); break; case ExposeCopy: fprintf(stderr,"ExposeCopy"); break; case UnmapWindow: fprintf(stderr,"UnmapWindow"); break; case FocusChange: fprintf(stderr,"FocusChange"); break; default: fprintf(stderr,"ERROR %d", etype); } fprintf(stderr,"\n"); fflush(stderr); } #endif