[sac-dev] small fixes for sac

Peter Goldstein peterg at llnl.gov
Wed Oct 5 10:36:37 PDT 2005


Brian,

Could you resend your patch as an attachment?  My mail tool, Eudora 
like to insert most text
attachments into the body of the message and this can cause numerous problems.
I'll also look to see if there is an option to tell it not to do 
this.  I also have to deal
with the firewall which will bounce some attachments like zip files. 
These can get
through if you rename the something like .piz.   Compressed tar file 
.tgz don't seem to
be a problem though.

For the most part, your changes sound good.  My only concerns are the 
removal of
the newstn and AddHistory pieces.  The newstn routine recognizes and 
updates names
from old LLNL data.  Probably not used much but it could be needed at 
some point and
is such a small piece of code that I don't think it hurts to leave it alone.

I also think we should leave AddToHistory for now and disable it with an #ifdef
READLINE in case someone can't or doesn't want to use the libedit 
routines.  I don't
feel real strongly about this but think it might be prudent to leave 
it for a little while
until we have a better feel for how the libedit works for a large audience.

Cheers,

Peter




>All,
>
>I have developed a patch for sac. It includes the following
>
>- removed AddHistory form main/sac.c - not needed, replaced by libedit
>- removed newstn from dff/rdhdr.c - not needed, old code
>- removed code from dispatch event which segfaults during unmapnotify
>	destorying the window using that little [x] in the corner
>	resulted in a sac segfault
>- added catch for WM_DELETE_WINDOW for destroying the plot window
>       should only close connection to X server
>- changed plotw3_pixmap = NULL to = 0 for correctness in
>	gd3.x11/dispatcheve3.c
>- inc/proto.h -- preceeded #define MIN in a #ifdef #undef #endif #define
>- added catch for WM_DELETE_WINDOW for destroying the plot window
>       should only close connection to X server
>- removed gets from utils/sgftops.c, now uses fgets()
>
>The included file is a patch file was created using
>% cvs diff -u > patch-bks-20051004
>and can be applied to the current CVS version as
>% cvs co SAC
>.....
>% ls
>SAC
>% patch -p0 < patch-bks-20051004
>
>Please test and and get back to me if you experience any problems.
>
>Cheers,
>Brian Savage
>savage13 at dtm.ciw.edu
>
>
>Index: SAC/inc/gd3.x11.h
>===================================================================
>RCS file: /export/home/cvs/repository/SAC/inc/gd3.x11.h,v
>retrieving revision 1.1.1.1
>diff -u -r1.1.1.1 gd3.x11.h
>--- SAC/inc/gd3.x11.h	27 Jul 2005 18:55:03 -0000	1.1.1.1
>+++ SAC/inc/gd3.x11.h	4 Oct 2005 13:03:38 -0000
>@@ -70,6 +70,7 @@
>    int height_p;
>    int status;
>    GC  gc;
>+  Atom wm_delete_window;
>  };
>
>  point current_pt_p3;
>Index: SAC/inc/proto.h
>===================================================================
>RCS file: /export/home/cvs/repository/SAC/inc/proto.h,v
>retrieving revision 1.1.1.1
>diff -u -r1.1.1.1 proto.h
>--- SAC/inc/proto.h	27 Jul 2005 18:55:03 -0000	1.1.1.1
>+++ SAC/inc/proto.h	4 Oct 2005 13:03:38 -0000
>@@ -22,6 +22,9 @@
>  #define ichar(s) (int)(*(s))
>  #define maxfi(f1,f2) (long) fmax(f1,f2)
>  #define minfi(f1,f2) (long) fmin(f1,f2)
>+#ifdef MIN
>+#undef MIN
>+#endif
>  #define MIN(f1,f2) ((f1) < (f2) ? (f1) : (f2))
>
>  void CSStoSAC () ;
>Index: SAC/src/dff/rdhdr.c
>===================================================================
>RCS file: /export/home/cvs/repository/SAC/src/dff/rdhdr.c,v
>retrieving revision 1.1.1.1
>diff -u -r1.1.1.1 rdhdr.c
>--- SAC/src/dff/rdhdr.c	27 Jul 2005 18:55:04 -0000	1.1.1.1
>+++ SAC/src/dff/rdhdr.c	4 Oct 2005 13:03:38 -0000
>@@ -221,7 +221,7 @@
>
>  	/* - Update station name if necessary. */
>
>-	newstn( kstnm, kstnm,9 );
>+/*	newstn( kstnm, kstnm,9 ); */
>
>  	/* - Adjust reference year if necessary. */
>
>Index: SAC/src/gd3.x11/createwindo3.c
>===================================================================
>RCS file: /export/home/cvs/repository/SAC/src/gd3.x11/createwindo3.c,v
>retrieving revision 1.1.1.1
>diff -u -r1.1.1.1 createwindo3.c
>--- SAC/src/gd3.x11/createwindo3.c	27 Jul 2005 18:55:05 -0000	1.1.1.1
>+++ SAC/src/gd3.x11/createwindo3.c	4 Oct 2005 13:03:39 -0000
>@@ -51,10 +51,13 @@
>  #include <stdio.h>
>  #include <X11/Xlib.h>
>  #include <X11/Xutil.h>
>+#include <X11/Xatom.h>
>  #include <X11/cursorfont.h>
>  #include "../../inc/gd3.x11.h"
>  #include "sac.bitmap"
>
>+Atom deletewindow3(Display *display, Window win);
>+
>  Cursor cursor;
>
>
>@@ -89,7 +92,7 @@
>    width_p = (unsigned int) ((float) (scr_width_p3-1) * (*xmax_vp - 
>*xmin_vp));
>    height_p = (unsigned int) ((float) (scr_height_p3-1) * (*ymax_vp 
>- *ymin_vp));
>
>-
>+ 
>  /* Create title label */
>
>    make_label3("Graphics Window:  ", win_num, title_label);
>@@ -206,12 +209,17 @@
>    XSelectInput(display3,plotw3[*win_num].win,
>  	       ( ExposureMask | StructureNotifyMask ));
>
>+  plotw3[*win_num].wm_delete_window =
>+    deletewindow3(display3, plotw3[*win_num].win);
>+ 
>  #endif /* USE_X11_DOUBLE_BUFFER */
>
>  /* Select events will be accepted by each window */
>
>    XSelectInput(display3,basew3[*win_num].win,
>  	       (ExposureMask | StructureNotifyMask));
>+  basew3[*win_num].wm_delete_window =
>+    deletewindow3(display3, basew3[*win_num].win);
>
>  /* Map the windows */
>
>@@ -247,3 +255,10 @@
>  #endif /* USE_X11_DOUBLE_BUFFER */
>  }
>
>+Atom
>+deletewindow3(Display *display, Window win) {
>+  Atom wm_delete_window;
>+  wm_delete_window = XInternAtom(display, "WM_DELETE_WINDOW", False);
>+  XSetWMProtocols(display, win, &wm_delete_window, 1);
>+  return(wm_delete_window);
>+}
>Index: SAC/src/gd3.x11/dispatcheve3.c
>===================================================================
>RCS file: /export/home/cvs/repository/SAC/src/gd3.x11/dispatcheve3.c,v
>retrieving revision 1.1.1.1
>diff -u -r1.1.1.1 dispatcheve3.c
>--- SAC/src/gd3.x11/dispatcheve3.c	27 Jul 2005 18:55:05 -0000	1.1.1.1
>+++ SAC/src/gd3.x11/dispatcheve3.c	4 Oct 2005 13:03:39 -0000
>@@ -98,8 +98,9 @@
>
>  /* Find out which window event occurred in and set index */
>
>-  while ((nevents = XPending(display3)) > 0) {  /* While there is an event */
>-    for (n=1; n<=nevents; n++) {
>+  while (display3 &&
>+	 (nevents = XPending(display3)) > 0){  /* While there is an event */
>+    for (n=1; display3 && n<=nevents; n++) {
>        XNextEvent(display3,&event);                 /* Get next event */
>        index = 0;
>        i = 1;
>@@ -125,28 +126,13 @@
>        while (i <= num_wins3);
>
>  /*  Process each event */
>-
>        switch (event.type) {
>-
>-#ifdef USE_X11_DOUBLE_BUFFER
>-      case DestroyNotify:
>-	fprintf(stderr, "DestroyNotify - Untested Code\n");
>-      case UnmapNotify:
>-	fprintf(stderr, "UnmapNotify - Untested Code\n");
>-	XDestroyWindow(display3, basew3[index].win);
>-	XDestroyWindow(display3, titlew3[index].win);
>-	XDestroyWindow(display3, plotw3[index].win);
>-	XFreeGC(display3, basew3[index].gc);
>-	XFreeGC(display3, titlew3[index].gc);
>-	XFreeGC(display3, plotw3[index].gc);
>-	XFreeGC(display3, cursorgc3[index]);
>-	XFreePixmap(display3, plotw3_pixmap);
>-
>-	num_wins3--;
>-	enddevice3(nerr);
>+      case ClientMessage:
>+	if(event.xclient.data.l[0] == plotw3[index].wm_delete_window &&
>+	  is_basew == 1) {
>+	  enddevice(device_name3, 13, nerr);
>+	}
>  	break;
>-#endif
>-
>
>        case ConfigureNotify:
>  	if (is_basew) {
>@@ -160,10 +146,11 @@
>  	   
>  #ifdef USE_X11_DOUBLE_BUFFER
>  	    XFreePixmap(display3, plotw3_pixmap);
>-	    plotw3_pixmap = NULL;
>+	    plotw3_pixmap = 0;
>  	    plotw3_pixmap = XCreatePixmap(display3, basew3[index].win,
>  					  basew_info.width, basew_info.height,
>-					  DefaultDepth(display3, 
>DefaultScreen(display3)));
>+					  DefaultDepth(display3,
>+ 
>DefaultScreen(display3)));
>  	    XFillRectangle(display3, plotw3_pixmap, plotw3[index].gc,
>  			   0, 0,
>  			   basew_info.width,
>@@ -420,16 +407,13 @@
>  	       break;
>
>        }
>-
>+     
>  /* Reset window flags */
>-
>        is_basew = 0;
>        is_plotw = 0;
>        is_titlew = 0;
>
>      }
>-
>    }
>-
>  }
>
>Index: SAC/src/gd3.x11/enddevice3.c
>===================================================================
>RCS file: /export/home/cvs/repository/SAC/src/gd3.x11/enddevice3.c,v
>retrieving revision 1.1.1.1
>diff -u -r1.1.1.1 enddevice3.c
>--- SAC/src/gd3.x11/enddevice3.c	27 Jul 2005 18:55:05 -0000	1.1.1.1
>+++ SAC/src/gd3.x11/enddevice3.c	4 Oct 2005 13:03:39 -0000
>@@ -19,6 +19,7 @@
>  *
> 
>*******************************************************************************/
>
>+#include <stdio.h>
>  #include <X11/Xlib.h>
>  #include "../../inc/gd3.x11.h"
>
>@@ -31,21 +32,20 @@
>    *nerr = 0;
>
>  /* Destroy window activity and set status flag */
>-
>    c_win3 = 0;
>    for (i=1; i <= num_wins3; i++) {
>-/*  XDestroyWindow(display3,basew3[i].win);*/
>+//    XDestroyWindow(display3,basew3[i].win);
>      basew3[i].status = UNAVAILABLE;
>+    plotw3[i].status = UNAVAILABLE;
>    }
>-
>+ 
>  /*  Free title font */
>-
>+ 
>  /* XUnloadFont(display3,title_font3); */
>-
>+ 
>  /*  Close window display */
>-
>    XCloseDisplay(display3);
>- 
>+  display3 = NULL;
>  }
>
> 
>/*******************************************************************************
>Index: SAC/src/main/sac.c
>===================================================================
>RCS file: /export/home/cvs/repository/SAC/src/main/sac.c,v
>retrieving revision 1.1.1.1
>diff -u -r1.1.1.1 sac.c
>--- SAC/src/main/sac.c	27 Jul 2005 18:55:05 -0000	1.1.1.1
>+++ SAC/src/main/sac.c	4 Oct 2005 13:03:39 -0000
>@@ -122,7 +122,7 @@
>  	/* the main loop of the program */
>  	while( TRUE ){
>  	    zgpmsg( kmexm.kprmt,13, kmsg,MCMSG+1 );
>-	    strcpy(kmsg,AddToHistory(kmsg)) ;
>+//	    strcpy(kmsg,AddToHistory(kmsg)) ;
>  	    ncmsg = indexb( kmsg,MCMSG+1 );
>  	    if( ncmsg >= MCMSG ){
>  		setmsg( "ERROR", 99 );
>Index: SAC/utils/sgftops.c
>===================================================================
>RCS file: /export/home/cvs/repository/SAC/utils/sgftops.c,v
>retrieving revision 1.1.1.1
>diff -u -r1.1.1.1 sgftops.c
>--- SAC/utils/sgftops.c	27 Jul 2005 18:55:06 -0000	1.1.1.1
>+++ SAC/utils/sgftops.c	4 Oct 2005 13:03:39 -0000
>@@ -270,13 +270,13 @@
>          printf("   Sample portrait:  0.5 0.5 0 0.75\n");
>          printf(" \n");
>          printf("\nx translation : ");
>-        gets(xshif);
>+	fgets(xshif, 6, stdin);
>          printf("y translation : ");
>-        gets(yshif);
>+	fgets(yshif, 6, stdin);
>          printf("rotation angle: ");
>-        gets(angle);
>+	fgets(angle, 6, stdin);
>          printf("scale........ : ");
>-        gets(sfact);
>+	fgets(sfact, 6, stdin);
>          fprintf(ofp, "gsave");
>          fprintf(ofp, "\n72 %s mul 72 %s mul translate", xshif, yshif);
>          fprintf(ofp, "\n%s rotate", angle);
>@@ -527,7 +527,7 @@
>                      if (buffer[i] == 32000 && scale_flag) {
>                          printf("Scale size 32000 encountered.\n");
>                          printf("Possible Old SGF - Scale anyway (y/n): ");
>-                        gets(scale);
>+                        fgets(scale, 4, stdin);
>                      }
>                      if (!strncmp(scale, "n", 1) || !scale_flag)  {
>                          i++; /* don't scale */
>
>_______________________________________________
>sac-dev mailing list
>sac-dev at iris.washington.edu
>http://www.iris.washington.edu/mailman/listinfo/sac-dev


-- 

Peter Goldstein, Ph.D.      (925) 423-1231 (office) 
  L-103, PO Box 808        (925) 422-5844 (fax)    
  Livermore, CA 94551      peterg at llnl.gov (email) 
  web pages: http://earthscience.llnl.gov/peterg/
             http://www.llnl.gov/sac


More information about the sac-dev mailing list