From 9f90b480c791f5642bec0d610f4233a93dae799b Mon Sep 17 00:00:00 2001 From: Bruno Date: Sat, 28 Jun 2025 11:12:07 +0700 Subject: [PATCH] ximage x exit --- src/xplot/main/ximage.c | 311 +++++++++++++++++++++------------------- 1 file changed, 160 insertions(+), 151 deletions(-) diff --git a/src/xplot/main/ximage.c b/src/xplot/main/ximage.c index 744fa408..969dbf6b 100644 --- a/src/xplot/main/ximage.c +++ b/src/xplot/main/ximage.c @@ -129,18 +129,18 @@ NULL}; * Berend Scheffers, Delft, colorbar (legend) * * Brian K. Macy, Phillips Petroleum, 11/27/98, added curve plotting option - * + * * G.Klein, GEOMAR Kiel, 2004-03-12, added cursor scrolling and * interactive change of zoom and clipping. - * + * * Zhaobo Meng, ConocoPhillips, 12/02/04, added amplitude display - * + * * Garry Perratt, Geocon, 08/04/05, modified perc handling to center colorbar if balance==1. */ /**************** end self doc ********************************/ /* functions defined and used internally */ -static void zoomBox (int x, int y, int w, int h, +static void zoomBox (int x, int y, int w, int h, int xb, int yb, int wb, int hb, int nx, int ix, float x1, float x2, int ny, int iy, float y1, float y2, @@ -151,7 +151,7 @@ static unsigned char *newInterpBytes (int n1in, int n2in, unsigned char *bin, void xMouseLoc(Display *dpy, Window win, XEvent event, int style, Bool show, int x, int y, int width, int height, float x1begb, float x1endb, float x2begb, float x2endb, - float *z, float f1, float d1, int n1,float f2, float d2, + float *z, float f1, float d1, int n1,float f2, float d2, int n2, int verbose); void xMousePrint(XEvent event, int style, FILE *mpicksfp, int x, int y, int width, int height, @@ -163,6 +163,7 @@ void intl2b_block(int nxin, float dxin, float fxin, int nyout, float dyout, float fyout, unsigned char *zout); /* .... JG */ + int main (int argc,char **argv) { @@ -216,12 +217,12 @@ main (int argc,char **argv) int curve,*npair=NULL,ncurvecolor=0,ncurvewidth=0,*curvewidth=NULL; char **curvefile,**curvecolor=NULL; FILE *curvefp; - + char *plotfile; /* filename of plotfile GK */ int lock=0; /* lock/unlock zoom while scrolling */ float mve; /* distance for scrolling */ - float mvefac=8.; /* window factor for scrolldistance - * 2=half window size; + float mvefac=8.; /* window factor for scrolldistance + * 2=half window size; * 8=one eighths of the window size */ char *msg=""; /* message on screen */ @@ -230,7 +231,7 @@ main (int argc,char **argv) requestdoc(1); /* get parameters describing 1st dimension sampling */ - if (!getparint("n1",&n1)) + if (!getparint("n1", &n1)) err("Must specify number of samples in 1st dimension!\n"); d1 = 1.0; getparfloat("d1",&d1); f1 = 0.0; getparfloat("f1",&f1); @@ -328,7 +329,7 @@ main (int argc,char **argv) if (balance==0) for (iz=0; izwidth,image->height); @@ -666,58 +671,58 @@ main (int argc,char **argv) x1begb,x1endb,x2begb,x2endb); } else if (keysym==XK_l ) { - /* set lock */ + /* set lock */ lock = 1 ; if (verbose) warn("zoom lock set %d\n",lock); } else if (keysym==XK_u ) { - /* unset lock */ + /* unset lock */ lock = 0 ; if (verbose) warn("zoom lock released %d\n",lock); - } else if (keysym==XK_Shift_L ) { - /* if (verbose) + } else if (keysym==XK_Shift_L ) { + /* if (verbose) fprintf(stderr,"Shift Left pressed \n");*/ - } else if (keysym==XK_KP_1 || keysym==XK_1 ) { + } else if (keysym==XK_KP_1 || keysym==XK_1 ) { mvefac=1.; fprintf(stderr,"Zoom/Move factor = 1 \n"); - } else if (keysym==XK_KP_2 || keysym==XK_2 ) { + } else if (keysym==XK_KP_2 || keysym==XK_2 ) { mvefac=2.; fprintf(stderr,"Zoom/Move factor = 2 \n"); - } else if (keysym==XK_KP_3 || keysym==XK_3 ) { + } else if (keysym==XK_KP_3 || keysym==XK_3 ) { mvefac=3.; - if (verbose) + if (verbose) fprintf(stderr,"Zoom/Move factor = 3 \n"); - } else if (keysym==XK_KP_4 || keysym==XK_4 ) { + } else if (keysym==XK_KP_4 || keysym==XK_4 ) { mvefac=4.; - if (verbose) + if (verbose) fprintf(stderr,"Zoom/Move factor = 4 \n"); - } else if (keysym==XK_KP_5 || keysym==XK_5 ) { + } else if (keysym==XK_KP_5 || keysym==XK_5 ) { mvefac=5.; - if (verbose) + if (verbose) fprintf(stderr,"Zoom/Move factor = 5 \n"); - } else if (keysym==XK_KP_6 || keysym==XK_6 ) { + } else if (keysym==XK_KP_6 || keysym==XK_6 ) { mvefac=6.; - if (verbose) + if (verbose) fprintf(stderr,"Zoom/Move factor = 6 \n"); - } else if (keysym==XK_KP_7 || keysym==XK_7 ) { + } else if (keysym==XK_KP_7 || keysym==XK_7 ) { mvefac=7.; - if (verbose) + if (verbose) fprintf(stderr,"Zoom/Move factor = 7 \n"); - } else if (keysym==XK_KP_8 || keysym==XK_8 ) { + } else if (keysym==XK_KP_8 || keysym==XK_8 ) { mvefac=8.; - if (verbose) + if (verbose) fprintf(stderr,"Zoom/Move factor = 8\n"); - } else if (keysym==XK_KP_9 || keysym==XK_9 ) { + } else if (keysym==XK_KP_9 || keysym==XK_9 ) { mvefac=9.; - if (verbose) + if (verbose) fprintf(stderr,"Zoom/Move factor = 9\n"); } else if (keysym==XK_Left ) { /* move zoom box to left by half window width */ mve = (x2endb - x2begb)/mvefac ; x2begb = x2begb - mve ; x2endb = x2endb - mve ; - msg="move "; + msg="move "; /* check for bounds of full window */ if (x2begb < x2beg){ if ( lock ) { x2begb = x2begb + mve ; @@ -732,9 +737,9 @@ main (int argc,char **argv) if (verbose) fprintf(stderr,"%s %g\n",msg,mve); ixb+=-(int)(mve/dx); - if ( (ixb<0) || - ((ixb+nxb)>nx) || - (nxb<2) || + if ( (ixb<0) || + ((ixb+nxb)>nx) || + (nxb<2) || (nxb>nx)) {ixb=0;nxb=nx; x2begb=x2beg; x2endb=x2end;} @@ -745,20 +750,20 @@ main (int argc,char **argv) for (i=0,czbp=czb; i x2end){ if ( lock ) { x2begb = x2begb - mve ; @@ -770,15 +775,15 @@ main (int argc,char **argv) } } if (verbose) fprintf(stderr,"%s %g\n",msg,mve); - - /* for replot require + + /* for replot require * ixb,iyb start samples of image * nxb,nyb number of samples of image */ - + ixb+=(int)(mve/dx); - if ( (ixb<0) || - ((ixb+nxb)>nx) || - (nxb<2) || + if ( (ixb<0) || + ((ixb+nxb)>nx) || + (nxb<2) || (nxb>nx)) {ixb=0;nxb=nx; x2begb=x2beg; x2endb=x2end;} @@ -790,21 +795,21 @@ main (int argc,char **argv) for (i=0,czbp=czb; i x1end){ if ( lock ) { x1begb = x1begb - mve ; @@ -818,11 +823,11 @@ main (int argc,char **argv) if (verbose) fprintf(stderr,"%s %g\n",msg,mve); iyb+=(int)(mve/dy); - + /* reset to original if out of range */ - if ( (iyb<0) || - ((iyb+nyb)>ny) || - (nyb<2) || + if ( (iyb<0) || + ((iyb+nyb)>ny) || + (nyb<2) || (nyb>ny)) {iyb=0;nyb=ny; x1begb=x1beg; x1endb=x1end;} @@ -839,17 +844,17 @@ main (int argc,char **argv) for (i=0,czbp=czb; iny)) {iyb=0;nyb=ny; x1begb=x1beg; x1endb=x1end;} @@ -877,18 +882,18 @@ main (int argc,char **argv) for (i=0,czbp=czb; iny)) {iyb=0;nyb=ny;} - + /* .... and horizontal */ mve = (x2endb - x2begb)/mvefac ; x2begb = x2begb - mve ; @@ -929,30 +934,30 @@ main (int argc,char **argv) } nxb=(int)((x2endb-x2begb)/dx); ixb+=-(int)(mve/dx); - if ( (ixb<0) || - ((ixb+nxb)>nx) || - (nxb<0) || + if ( (ixb<0) || + ((ixb+nxb)>nx) || + (nxb<0) || (nxb>nx)) { ixb=0;nxb=nx; x2begb=x2beg; x2endb=x2end;} - + if (czb!=cz) free1(czb); czb = ealloc1(nxb*nyb, sizeof(signed char)); for (i=0,czbp=czb; inx)|| (ixb>nx)|| (nxb<0) ) {ixb=0;nxb=nx; x2begb=x2beg; x2endb=x2end;} - if ( (iyb<0) || + if ( (iyb<0) || (nyb>ny)|| (iyb>ny)|| (nyb<0) ) {iyb=0;nyb=ny; @@ -982,7 +987,7 @@ main (int argc,char **argv) /* clear area and force an expose event */ XClearArea(dpy,win,0,0,0,0,True); - + /* note that image is out of date */ imageOutOfDate = 1; if (czb!=cz) free1(czb); @@ -991,16 +996,16 @@ main (int argc,char **argv) for (i=0,czbp=czb; ix+w) wb = x-xb+w; if (yb+hb>y+h) hb = y-yb+h; - + /* determine number of samples in rubber box (at least 2) */ *nxb = MAX(nx*wb/w,2); *nyb = MAX(ny*hb/h,2); - + /* determine indices of first samples in box */ *ixb = ix+(xb-x)*(nx-1)/w; *ixb = MIN(*ixb,ix+nx-*nxb); *iyb = iy+(yb-y)*(ny-1)/h; *iyb = MIN(*iyb,iy+ny-*nyb); - - + + /* determine box limits to nearest samples */ *x1b = x1+(*ixb-ix)*(x2-x1)/(nx-1); *x2b = x1+(*ixb+*nxb-1-ix)*(x2-x1)/(nx-1); @@ -1306,7 +1315,7 @@ static unsigned char *newInterpBytes (int n1in, int n2in, unsigned char *bin, { unsigned char *bout; float d1in,d2in,d1out,d2out,f1in,f2in,f1out,f2out; - + f1in = f2in = f1out = f2out = 0.0; d1in = d2in = 1.0; d1out = d1in*(float)(n1in-1)/(float)(n1out-1); @@ -1404,32 +1413,32 @@ a two-dimensional contiguous array of unsigned char values. Constant extrapolation of zin is used to compute zout for output x and y outside the range of input x and y. - + Mapping of bytes between arrays is done to preserve appearance of `gridblocks': no smooth interpolation is performed. *****************************************************************************/ -{ +{ int ixout,iyout,iin,jin; float xoff,yoff; - + xoff=fxout+0.5*dxin-fxin; yoff=fyout+0.5*dyin-fyin; for (iyout=0;iyoutx1last) return -999.0; + if (x1x1last) return -999.0; x2last = f2 + (n2-1)*d2; - if (x2x2last) return -999.0; + if (x2x2last) return -999.0; x1i = (x1-f1)/d1; ix1 = MIN(x1i,n1-1);