Path: uunet!cs.utexas.edu!sun-barr!cronkite.Central.Sun.COM!jethro!exodus!la.tce.com
From: pierre@la.tce.com (Pierre Willard)
Newsgroups: comp.sources.x
Subject: v13i080: xxgdb, Patch2, Part01/01
Message-ID: <16950@exodus.Eng.Sun.COM>
Date: 16 Jul 91 23:53:51 GMT
References: <csx-13i080-xxgdb@uunet.UU.NET>
Sender: news@exodus.Eng.Sun.COM
Lines: 956
Approved: argv@sun.com

Submitted-by: pierre@la.tce.com (Pierre Willard)
Posting-number: Volume 13, Issue 80
Archive-name: xxgdb/patch2
Patch-To: xxgdb: Volume 11, Issue 42-44 51-55
Patch-To: xxgdb: Volume 12, Issue 78

(2/11/91) v11i042: xxgdb/part01
	 xxgdb - X front end for gdb, Part01/08
(2/11/91) v11i043: xxgdb/part02
	xxgdb - X front end for gdb
(2/11/91) v11i044: xxgdb/part03
	 xxgdb - X front end for gdb, Part03/08
(2/11/91) v11i051: xxgdb/part04
	 xxgdb - X front end for gdb, Part04/08
(2/11/91) v11i052: xxgdb/part05
	xxgdb - X front end for gdb
(2/11/91) v11i053: xxgdb/part06
	xxgdb - X front end for gdb
(2/11/91) v11i054: xxgdb/part07
	xxgdb - X front end for gdb
(2/11/91) v11i055: xxgdb/part08
	 xxgdb - X front end for gdb, Part08/08
(5/2/91) v12i078: xxgdb/patch1
	 xxgdb - X front end for gdb, Patch1, Part01/01



	XXGDB version 1.04 ( X window interface to the GDB debugger )
	-------------------------------------------------------------

A little while ago (January 91) I posted the complete source files
for xxgdb version 1.01 (Volume 11, Issue 42-55).
In May 91 I posted the differences for xxgdb 1.03 (from 1.01)
(Volume 12, Issue 78).

Please find in the following the differences from version
1.03 to 1.04.

NEW FEATURES OF VERSION 1.04  :

	display command print all error messages (if any).
	fix bug display C structures.
	several patches for more generic BSD machines (JBL)
	patches for NeXT because some GDB incompatibilities.
	display gdb messages when executing list command.
	fix problem scrolling symbols while scrolling with keys (GWC).
	fix bug displaying arrow when up/down in recursive function.

TO PATCH XXGDB FROM VERSION 1.03 TO VERSION 1.04 :

	cd <original xxgdb 1.03 source directory>
	chmod +rw *
	patch < <patch_file>
	
THE FOLLOWING IS THE PATCH FILE FOR XXGDB 1.04 FROM XXGDB 1.03 :

diff -rc2 v1.03/Imakefile v1.04/Imakefile
*** v1.03/Imakefile	Tue Apr  2 09:33:13 1991
--- v1.04/Imakefile	Tue May 14 09:00:24 1991
***************
*** 10,18 ****
  #if defined(SunArchitecture)
  #if OSMajorVersion >= 4
! 	DEFINES = -DSUNOS4 $(DEFGDB)
  #else
! 	DEFINES = -DOLDSUNOS -DNEED_STRSTR $(DEFGDB)
  #endif
  #endif
  
  #ifdef UltrixArchitecture
--- 10,22 ----
  #if defined(SunArchitecture)
  #if OSMajorVersion >= 4
! #if OSMajorVersion == 4 && OSMinorVersion == 0
!         DEFINES = -DSUNOS4 -DNEED_STRSTR $(DEFGDB)
  #else
!         DEFINES = -DSUNOS4 $(DEFGDB)
  #endif
+ #else
+         DEFINES = -DOLDSUNOS -DNEED_STRSTR $(DEFGDB)
  #endif
+ #endif
  
  #ifdef UltrixArchitecture
***************
*** 22,25 ****
--- 26,33 ----
          DEFINES = -DBSD $(DEFGDB)
  #endif
+ #endif
+ 
+ #ifdef PegasusArchitecture
+ DEFINES = -DBSD $(DEFGDB) -DNEED_STRSTR
  #endif
  
diff -rc2 v1.03/Makefile v1.04/Makefile
*** v1.03/Makefile	Tue Apr  2 09:35:10 1991
--- v1.04/Makefile	Thu May 30 15:39:41 1991
***************
*** 37,41 ****
              SHELL = /bin/sh
  
!               TOP = /net/pi/usr/X11R4/mit
        CURRENT_DIR = .
  
--- 37,41 ----
              SHELL = /bin/sh
  
!               TOP = /net/alpha/usr3/X11R4/mit
        CURRENT_DIR = .
  
***************
*** 228,232 ****
  DEFGDB =  -DGDB -g
  
! 	DEFINES = -DSUNOS4 $(DEFGDB)
  
  mallocc = #malloc.c
--- 228,232 ----
  DEFGDB =  -DGDB -g
  
!         DEFINES = -DSUNOS4 $(DEFGDB)
  
  mallocc = #malloc.c
diff -rc2 v1.03/XDbx.ad v1.04/XDbx.ad
*** v1.03/XDbx.ad	Mon Nov 26 17:31:00 1990
--- v1.04/XDbx.ad	Thu May 30 17:51:39 1991
***************
*** 21,27 ****
  *sourceWindow.scrollHorizontal:		whenNeeded
  *sourceWindow.translations:		#override \n\
! 	<Btn1Down>:             SelectStart() SelectWord() \n\
! 	Shift<Btn1Up>:          Update() SelectEnd() PrintSelection() \n\
! 	<Btn1Up>:               Update() SelectEnd() \n
  *messageWindow*font:  			variable
  *messageWindow.min:  			30
--- 21,39 ----
  *sourceWindow.scrollHorizontal:		whenNeeded
  *sourceWindow.translations:		#override \n\
! 	<Btn1Down>:     SelectStart() SelectWord() \n\
! 	Shift<Btn1Up>:  Update(warp) SelectEnd() PrintSelection() \n\
! 	<Btn1Up>:       Update(warp) SelectEnd() \n\
! 	<Key>Down:      next-line() Update()\n\
! 	<Key>Up:        previous-line() Update() \n\
! 	Ctrl<Key>L:     redraw-display() Update() \n\
! 	Ctrl<Key>N:     next-line() Update() \n\
! 	Ctrl<Key>P:     previous-line() Update() \n\
! 	Ctrl<Key>V:     next-page() Update() \n\
! 	Ctrl<Key>Z:     scroll-one-line-up() Update() \n\
! 	Meta<Key>V:     previous-page() Update() \n\
! 	Meta<Key>Z:     scroll-one-line-down() Update() \n\
! 	:Meta<Key>\>:   end-of-file() Update() \n\
! 	:Meta<Key>]:    forward-paragraph() Update() \n\
! 	:Meta<Key>[:    backward-paragraph() Update()
  *messageWindow*font:  			variable
  *messageWindow.min:  			30
diff -rc2 v1.03/XXGDB_README v1.04/XXGDB_README
*** v1.03/XXGDB_README	Tue Apr 16 09:03:21 1991
--- v1.04/XXGDB_README	Tue Jul  9 13:36:08 1991
***************
*** 165,168 ****
--- 165,172 ----
  	See display_info_handler function in gdb_handler.c
  	
+ 	- Copy the application default file (XDbx.ad) into your home
+ 	directory or into the X '/usr/lib/X11/app-defaults' directory
+ 	(eg, 'cp -p XDbx.ad ~/XDbx').
+ 	
  	- The name of the debugger called by xxgdb is by default 'gdb'.
  	It can be overridden with the environment variable XXGDB_DEBUGGER.
***************
*** 235,238 ****
--- 239,250 ----
  				Fix bug define commands in .gdbinit or source files
  				Add db_name and db_prompt option (GWC)
+ 	1.04	May 1991
+ 				display command print all error messages (if any).
+ 				fix bug display C structures.
+ 				several patches for more generic BSD machines (JBL)
+ 				patches for NeXT because some GDB incompatibilities.
+ 				display gdb messages when executing list command.
+ 				fix problem scrolling symbols while scrolling with keys (GWC).
+ 				fix bug displaying arrow when up/down in recursive function.
  				
  
***************
*** 242,245 ****
--- 254,261 ----
  	Thanks to Guy Cherry (GWC) for his numerous bug reports and
  	suggestions, and to all of you who helped improve xxgdb.
+ 	
+ 	Thanks to j braham levy (JBL) for his modifications for
+ 	generic BSD machines.
+ 	
  	
  				--------------------------
diff -rc2 v1.03/calldbx.c v1.04/calldbx.c
*** v1.03/calldbx.c	Fri Apr 19 15:55:06 1991
--- v1.04/calldbx.c	Tue May 14 09:10:10 1991
***************
*** 69,73 ****
   */
  
! #ifdef OLDSUNOS
  #include	<sys/ioctl.h>
  #else
--- 69,76 ----
   */
  
! /*
!  * (JBL)10MAY91 : not only OLDSUNOS but generic BSD have sgttyb
!  */
! #if defined(OLDSUNOS) || defined(BSD)
  #include	<sys/ioctl.h>
  #else
***************
*** 146,150 ****
  char *argv[];
  {
! #ifndef OLDSUNOS
      struct termio Termio;
  #else
--- 149,156 ----
  char *argv[];
  {
! /*
!  * (JBL)10MAY91 : use sgttyb if generic BSD
!  */
! #if !(defined(OLDSUNOS) || defined(BSD))
      struct termio Termio;
  #else
***************
*** 232,235 ****
--- 238,246 ----
      of gdbinit files. Also for SYSV setvbuf is required. */
   /*	setlinebuf(dbxfp); */
+  
+    /* (JBL)10MAY91 : to get the thing to work on my machine
+     * i needed to set unbuffered mode via setbuf command
+     * this should work on generic BSD platforms
+     */
     
  #ifdef SYSV
***************
*** 236,241 ****
--- 247,256 ----
  	setvbuf(dbxfp, dbxfbuf, _IONBF, BUFSIZ); */
  #else
+ #ifdef BSD
+ 	setbuf(dbxfp, NULL);
+ #else
  	setvbuf(dbxfp, NULL, _IONBF, 0);
  #endif
+ #endif
  
  	dbxInputId = XtAppAddInput(app_context, master, XtInputReadMask, 
***************
*** 260,264 ****
  	 */
  	 
! #ifndef OLDSUNOS
  	ioctl(slave, TCGETA, &Termio);
  	Termio.c_lflag &= ~ECHO;	/* No echo */
--- 275,282 ----
  	 */
  	 
! 	/*
! 	 * (JBL)10MAY91 : use sgttyb if OLDSUN or generic BSD
! 	 */ 
! #if !(defined(OLDSUNOS) || defined(BSD))
  	ioctl(slave, TCGETA, &Termio);
  	Termio.c_lflag &= ~ECHO;	/* No echo */
diff -rc2 v1.03/dbx.c v1.04/dbx.c
*** v1.03/dbx.c	Fri Apr 12 17:05:54 1991
--- v1.04/dbx.c	Tue May  7 14:59:14 1991
***************
*** 183,186 ****
--- 183,192 ----
  	command = get_command();
  		
+ #ifdef GDB
+ 	if (Echo || Filter)
+ 	    filter(string, output, command);
+ 	if (Echo && Prompt)
+ 	    AppendDialogText(xdbxprompt);
+ #else
  	if (Echo) {
  	    filter(string, output, command);
***************
*** 187,190 ****
--- 193,197 ----
  	    if (Prompt) AppendDialogText(xdbxprompt);
  	}
+ #endif
  	if (string) {
  	    XtFree(string);
***************
*** 224,228 ****
  char *command;
  {
! 	query_dbx_echo(command, False);
  }
  
--- 231,235 ----
  char *command;
  {
! 	query_dbx_echo(command, False, False);
  }
  
diff -rc2 v1.03/gdb_handler.c v1.04/gdb_handler.c
*** v1.03/gdb_handler.c	Fri Apr 12 17:06:15 1991
--- v1.04/gdb_handler.c	Tue May  7 14:59:11 1991
***************
*** 83,87 ****
   *    done_handler():		Progrm execution completed, clear breakpoints
   *    source_handler():		Exec commands of source file specified.
!  *    query_dbx_echo():		Send command with echo on or off.
   */
  
--- 83,87 ----
   *    done_handler():		Progrm execution completed, clear breakpoints
   *    source_handler():		Exec commands of source file specified.
!  *    query_dbx_echo():		Send command with echo on or off, filter on/off.
   */
  
***************
*** 138,144 ****
   
   	/* here we use query_dbx_echo instead of query_dbx so that any
!  	error message will be displayed ! */
   	
!  	query_dbx_echo("list ,main\n", TRUE);	/* tell gdb to use main file 
   								and get line number of main(). (,main will end at main) */
     
--- 138,144 ----
   
   	/* here we use query_dbx_echo instead of query_dbx so that any
!  	error message will be displayed ! (because Filter is True) */
   	
!  	query_dbx_echo("list ,main\n", False, True);	/* tell gdb to use main file 
   								and get line number of main(). (,main will end at main) */
     
***************
*** 181,185 ****
      Arg		args[MAXARGS];
      Cardinal	n;
! 
  #ifdef UNDISPWIN
  	/* this code removes the display window when there is nothing to display (GWC) */
--- 181,185 ----
      Arg		args[MAXARGS];
      Cardinal	n;
!     
  #ifdef UNDISPWIN
  	/* this code removes the display window when there is nothing to display (GWC) */
***************
*** 322,326 ****
  void display_handler()	/* display or undisplay */
  {
!     query_dbx("display\n");	/* update display */
  }
  
--- 322,326 ----
  void display_handler()	/* display or undisplay */
  {
!     query_dbx_echo("display\n",False, True);	/* update display */
  }
  
***************
*** 517,521 ****
  					}
  				else
! 					query_dbx_echo (s, TRUE);
  				}
  			}
--- 517,521 ----
  					}
  				else
! 					query_dbx_echo (s, TRUE, TRUE);
  				}
  			}
***************
*** 553,560 ****
   *
   *	Same as query_dbx() in dbx.c except that Echo = True or False.
   */
! void query_dbx_echo(command, echo)
  char *command;
  int echo;
  {
      write_dbx(command);
--- 553,564 ----
   *
   *	Same as query_dbx() in dbx.c except that Echo = True or False.
+  *  and in case Echo = False, filter says if filter() must be called.
   */
! Boolean Filter; /* filter dbx output (if Echo == false) ? */
! 
! void query_dbx_echo(command, echo, filter)
  char *command;
  int echo;
+ int filter;
  {
      write_dbx(command);
***************
*** 562,565 ****
--- 566,570 ----
  
      Echo = echo;
+     Filter = filter;
      Prompt = False;
      while (!Prompt)
diff -rc2 v1.03/gdb_parser.c v1.04/gdb_parser.c
*** v1.03/gdb_parser.c	Fri Apr 12 17:05:32 1991
--- v1.04/gdb_parser.c	Wed May 22 16:46:47 1991
***************
*** 256,260 ****
  	    break;
  
! 	case C_DISPLAY:
  		{
  	    if ((strcmp(output_string, "") == NULL) ||
--- 256,260 ----
  	    break;
  
! 	case C_DISPLAY:	/* means "display foo\n" command */
  		{
  	    if ((strcmp(output_string, "") == NULL) ||
***************
*** 273,277 ****
  	    break;
  
! 	case C_DISPLAY_INFO:
  		{
  	    if ((strcmp(output_string, "") == NULL) ||
--- 273,277 ----
  	    break;
  
! 	case C_DISPLAY_INFO: /* means "display\n" command */
  		{
  	    if ((strcmp(output_string, "") == NULL) ||
***************
*** 472,484 ****
  			/* try to find end of display structure */
  			
! 			while(p1 = strstr(p,"}\n"))		/* find next occurrence of "}\n" */
! 				{
! 				if (p1 && ((p1 == p) || (*(p1-1) == '\n')))
! 					{
! 					/* this line is the end of the current display */
! 					p = p1 + strlen("}\n");
! 					break;
! 					}
! 				}
  			}
  		}
--- 472,477 ----
  			/* try to find end of display structure */
  			
! 			if (p1 = strstr(p,"\n}\n"))
! 				p = p1 + strlen("\n}\n");
  			}
  		}
***************
*** 585,588 ****
--- 578,595 ----
  				strcpy(s, "");
  			    break;
+ 
+ 			case C_DISPLAY_INFO:
+    				 /* (PW)7MAY91 : display error messages */
+ 			    if (match(output_pattern, s, O_DISPLAY_INFO) != -1)
+ 					{    
+     				if (Token.mesg && strcmp(Token.mesg, ""))	
+    				    	{
+ 						AppendDialogText(Token.mesg);
+ 						bell(0);
+     					}		
+ 					strcpy(s, "");
+     				}
+ 			    break;
+ 			    
  			case C_SEARCH:
  			    if (match(output_pattern, s, O_SEARCH) != -1)
***************
*** 590,595 ****
  			    break;
  			case C_LIST:
  			    if (match(output_pattern, s, O_LIST) != -1)
! 				strcpy(s, "");
  			    break;
  			case C_PRINT:
--- 597,611 ----
  			    break;
  			case C_LIST:
+    				 /* (PW)22MAY91 : display messages ") */
  			    if (match(output_pattern, s, O_LIST) != -1)
! 					{    
!     				if (Token.mesg && strcmp(Token.mesg, ""))	
!    				    	{
! 						AppendDialogText(Token.mesg);
! 						if (strstr(Token.mesg,"Source file is more recent than executable."))
! 							bell(0); /* Warn user WYSIWYG not true */
!     					}		
! 					strcpy(s, "");
!     				}
  			    break;
  			case C_PRINT:
***************
*** 612,615 ****
--- 628,632 ----
  			{
  			case C_DISPLAY:
+ 			case C_DISPLAY_INFO:
  			case C_SEARCH:
  			case C_LIST:
diff -rc2 v1.03/gdb_regex.h v1.04/gdb_regex.h
*** v1.03/gdb_regex.h	Fri Apr 12 10:06:33 1991
--- v1.04/gdb_regex.h	Thu May 30 16:54:06 1991
***************
*** 280,285 ****
  
  static PatternRec output_pattern[] = {
      /* exec with Message after */
!     {"\\(.*\n\\)*\032\032\\([^ ]+\\):\\([0-9]+\\):\\([0-9]+\\):\\([^ ]+\\):0x.+\n\\([ ]*[^0-9].*\n\\)\\(\\([0-9]+:.*\n\\(\\( .*\n\\)*}\n\\)?\\)*\\)",
       NULL,
       {6, -1, -1, 3, 2, 7}
--- 280,287 ----
  
  static PatternRec output_pattern[] = {
+ 
+ #ifndef NeXT  /* if standard GDB */
      /* exec with Message after */
!     {"\\(.*\n\\)*\032\032\\([^ \n]+\\):\\([0-9]+\\):\\([0-9]+\\):\\([^ \n]+\\):0x.+\n\\([ ]*[^0-9\n].*\n\\)\\(\\([0-9]+:.*\n\\(\\( .*\n\\)*}\n\\)?\\)*\\)",
       NULL,
       {6, -1, -1, 3, 2, 7}
***************
*** 286,290 ****
      },
      /* exec with Message before */
!     {"\\(.*\n\\)*\\([ ]*[^ ].*\n\\)\032\032\\([^ ]+\\):\\([0-9]+\\):\\([0-9]+\\):\\([^ ]+\\):0x.+\n\\(\\([0-9]+:.*\n\\(\\( .*\n\\)*}\n\\)?\\)*\\)",
       NULL,
       {2, -1, -1, 4, 3, 7}	
--- 288,292 ----
      },
      /* exec with Message before */
!     {"\\(.*\n\\)*\\([ ]*[^ \n].*\n\\)\032\032\\([^ \n]+\\):\\([0-9]+\\):\\([0-9]+\\):\\([^ \n]+\\):0x.+\n\\(\\([0-9]+:.*\n\\(\\( .*\n\\)*}\n\\)?\\)*\\)",
       NULL,
       {2, -1, -1, 4, 3, 7}	
***************
*** 291,298 ****
      },
      /* exec without Message */
!     {"\\(.*\n\\)*\032\032\\(\\([^ ]+\\):\\([0-9]+\\):\\([0-9]+\\):\\([^ ]+\\):0x.+\n\\)\\(\\([0-9]+:.*\n\\(\\( .*\n\\)*}\n\\)?\\)*\\)",
       NULL,
       {2, -1, -1, 4, 3, 7}
      },
      /* done */
      {"\\(.*\n\\)*\n\\(Program terminated with signal \\|Program exited with code 0\\|Program exited normally\\).*\n\\(.*\n\\)*",
--- 293,319 ----
      },
      /* exec without Message */
!     {"\\(.*\n\\)*\032\032\\(\\([^ \n]+\\):\\([0-9]+\\):\\([0-9]+\\):\\([^ \n]+\\):0x.+\n\\)\\(\\([0-9]+:.*\n\\(\\( .*\n\\)*}\n\\)?\\)*\\)",
       NULL,
       {2, -1, -1, 4, 3, 7}
      },
+     
+ #else  /* NeXT is a special case : same as standard except that ":0x.+" are removed. */
+     /* exec with Message after */
+     {"\\(.*\n\\)*\032\032\\([^ \n]+\\):\\([0-9]+\\):\\([0-9]+\\):\\([^ \n]+\\)\n\\([ ]*[^0-9\n].*\n\\)\\(\\([0-9]+:.*\n\\(\\( .*\n\\)*}\n\\)?\\)*\\)",
+      NULL,
+      {6, -1, -1, 3, 2, 7}
+     },
+     /* exec with Message before */
+     {"\\(.*\n\\)*\\([ ]*[^ \n].*\n\\)\032\032\\([^ \n]+\\):\\([0-9]+\\):\\([0-9]+\\):\\([^ \n]+\\)\n\\(\\([0-9]+:.*\n\\(\\( .*\n\\)*}\n\\)?\\)*\\)",
+      NULL,
+      {2, -1, -1, 4, 3, 7}	
+     },
+     /* exec without Message */
+     {"\\(.*\n\\)*\032\032\\(\\([^ \n]+\\):\\([0-9]+\\):\\([0-9]+\\):\\([^ \n]+\\)\n\\)\\(\\([0-9]+:.*\n\\(\\( .*\n\\)*}\n\\)?\\)*\\)",
+      NULL,
+      {2, -1, -1, 4, 3, 7}
+     },
+ #endif /* NeXT */
+ 
      /* done */
      {"\\(.*\n\\)*\n\\(Program terminated with signal \\|Program exited with code 0\\|Program exited normally\\).*\n\\(.*\n\\)*",
***************
*** 301,305 ****
      },
      /* break */
!     {"\\(.*\n\\)*Breakpoint \\([0-9]+\\) at [^ ]+: file \\([^ ]+\\), line \\([0-9]+\\).\n",
       NULL,
       {-1, 2, -1, 4, 3, -1}
--- 322,326 ----
      },
      /* break */
!     {"\\(.*\n\\)*Breakpoint \\([0-9]+\\) at [^ \n]+: file \\([^ \n]+\\), line \\([0-9]+\\).\n",
       NULL,
       {-1, 2, -1, 4, 3, -1}
***************
*** 306,318 ****
      },
      /* info directories */
!     {"Source directories searched:[ ]*\\([^ ]+\\)[ ]*\n",
       NULL,
       { -1, -1, -1, -1, 1, -1}
      },
      /* up, down */
!     {"\\(.*\n\\)*\\(#[0-9]+[ ]+\\(0x[^ ]+[ ]+in[ ]+\\)?\\([^ ]+\\)[^\032]*\\)\032\032\\([^ ]+\\):\\([0-9]+\\):\\([0-9]+\\):\\([^ ]+\\):0x.+\n",
       NULL,
       {2, -1, 4, 6, 5, -1}	
      },
      /* bell */
      {"\\(Undefined command: .*\n\\|Already at the \\(top\\|bottom\\) call level\n\\|\
--- 327,351 ----
      },
      /* info directories */
!     {"Source directories searched:[ ]*\\([^ \n]+\\)[ ]*\n",
       NULL,
       { -1, -1, -1, -1, 1, -1}
      },
+     
+     
+ #ifndef NeXT  /* if standard GDB */
      /* up, down */
!     {"\\(.*\n\\)*\\(#[0-9]+[ ]+\\(0x[^ \n]+[ ]+in[ ]+\\)?\\([^ \n]+\\)[^\032]*\\)\032\032\\([^ \n]+\\):\\([0-9]+\\):\\([0-9]+\\):\\([^ \n]+\\):0x.+\n",
       NULL,
       {2, -1, 4, 6, 5, -1}	
      },
+ #else  /* NeXT is a special case : same as standard except that ":0x.+" are removed. */
+     /* up, down */
+     {"\\(.*\n\\)*\\(#[0-9]+[ ]+\\(0x[^ \n]+[ ]+in[ ]+\\)?\\([^ \n]+\\)[^\032]*\\)\032\032\\([^ \n]+\\):\\([0-9]+\\):\\([0-9]+\\):\\([^ \n]+\\)\n",
+      NULL,
+      {2, -1, 4, 6, 5, -1}	
+     },
+ #endif /* NeXT */
+ 
+ 
      /* bell */
      {"\\(Undefined command: .*\n\\|Already at the \\(top\\|bottom\\) call level\n\\|\
***************
*** 330,334 ****
      },
      /* info line */
!     {"\\(Line \\(number \\)?[0-9]+ \\(of\\|is out of range for\\) \"\\([^ ]+\\)\".*\\)\n",
       NULL,
       {-1, -1, -1, -1, 4, -1}
--- 363,367 ----
      },
      /* info line */
!     {"\\(Line \\(number \\)?[0-9]+ \\(of\\|is out of range for\\) \"\\([^ \n]+\\)\".*\\)\n",
       NULL,
       {-1, -1, -1, -1, 4, -1}
***************
*** 345,357 ****
      },
      /* directory */
!     {"\\([^ ]+ is already in the source path.[ ]*\n\\)*Source directories searched:[ ]*\\([^ ]+\\)[ ]*\n",
       NULL,
       { -1, -1, -1, -1, 1, -1}
      },
!     /* list */
!     {"\\(.*\n\\)*\\(\\([0-9]+\\).*\n\\)",
       NULL,
!      { -1, -1, -1, 3, -1, -1}
      },
      /* display */
      {"\\([0-9]+:.*\n\\)",
--- 378,395 ----
      },
      /* directory */
!     {"\\([^ \n]+ is already in the source path.[ ]*\n\\)*Source directories searched:[ ]*\\([^ \n]+\\)[ ]*\n",
       NULL,
       { -1, -1, -1, -1, 1, -1}
      },
!     /* list : 22MAY91 put message in Token.mesg (edit again 30MAY91) */
!     {"\\(\\([^0-9\n]+.*\n\\)*\\)\\(.*\n\\)*\\(\\([0-9]+\\).*\n\\)",
       NULL,
!      { 1, -1, -1, 5, -1, -1}
      },
+ /*    {"\\(\\(.*\n\\)*\\)\\(\\([0-9]+\\).*\n\\)",
+      NULL,
+      { 1, -1, -1, 4, -1, -1}
+     },
+ */
      /* display */
      {"\\([0-9]+:.*\n\\)",
***************
*** 360,369 ****
      },
      /* info display */
!     {"\\(\\([0-9]+:.*\n\\(\\( .*\n\\)*}\n\\)?\\)*\\)",
       NULL,
       { -1, -1, -1, -1, -1, 1}
      },
      /* pwd or cd */
!     {"Working directory[ ]+\\([^ ]+\\).[ ]*\n\\([ ]*(canonically[ ]+\\([^ ]+\\)).\n\\)?",
       NULL,
       { 1, -1, -1, -1, -1, 3}
--- 398,412 ----
      },
      /* info display */
!     {"\\(\\([0-9]+:.*\n\\(\\( .*\n\\)*}\n\\)?\\)*\\)\\(\\(.*\n\\)*\\)",
       NULL,
+      {  5, -1, -1, -1, -1, 1}
+     },
+ /*    {"\\(\\([0-9]+:.*\n\\(\\( .*\n\\)*}\n\\)?\\)*\\)",
+      NULL,
       { -1, -1, -1, -1, -1, 1}
      },
+ */
      /* pwd or cd */
!     {"Working directory[ ]+\\([^ \n]+\\).[ ]*\n\\([ ]*(canonically[ ]+\\([^ \n]+\\)).\n\\)?",
       NULL,
       { 1, -1, -1, -1, -1, 3}
***************
*** 370,374 ****
      },
      /* program received signal */
!     {"\\(.*\n\\)*\n\\(Program received signal \\([-]?[0-9]+\\), [^ ]+.*\n\\)\\(.*\n\\)*",
  	NULL,
       {  2, 3, -1, -1, -1, -1}
--- 413,417 ----
      },
      /* program received signal */
!     {"\\(.*\n\\)*\n\\(Program received signal \\([-]?[0-9]+\\), [^ \n]+.*\n\\)\\(.*\n\\)*",
  	NULL,
       {  2, 3, -1, -1, -1, -1}
***************
*** 375,379 ****
      },
      /* special for test in filter_display_info() */
!     {"\\([^0-9].*\n\\)*\\([0-9]+:.*\n\\)\\(.*\n\\)*",
       NULL,
       { -1, -1, -1, -1, -1, 2}
--- 418,422 ----
      },
      /* special for test in filter_display_info() */
!     {"\\([^0-9\n].*\n\\)*\\([0-9]+:.*\n\\)\\(.*\n\\)*",
       NULL,
       { -1, -1, -1, -1, -1, 2}
***************
*** 385,389 ****
      },
      /* core-file */
!     {"\\(.*\n\\)*\\(Program terminated with signal \\([-]?[0-9]+\\), [^ ]+.*\n\\)\\(.*\n\\)*",
  	NULL,
       {  2, 3, -1, -1, -1, -1}
--- 428,432 ----
      },
      /* core-file */
!     {"\\(.*\n\\)*\\(Program terminated with signal \\([-]?[0-9]+\\), [^ \n]+.*\n\\)\\(.*\n\\)*",
  	NULL,
       {  2, 3, -1, -1, -1, -1}
***************
*** 434,438 ****
      /* symbol-file */
      {"[ ]*sy.*\n", 							NULL, {-1, -1, -1, -1, -1, -1}},
!     {"[ ]*cd[ ]*[^ ]+[ ]*\n", 				NULL, {-1, -1, -1, -1, -1, -1}},
      
      /* directory */
--- 477,481 ----
      /* symbol-file */
      {"[ ]*sy.*\n", 							NULL, {-1, -1, -1, -1, -1, -1}},
!     {"[ ]*cd[ ]*[^ \n]+[ ]*\n", 			NULL, {-1, -1, -1, -1, -1, -1}},
      
      /* directory */
***************
*** 451,455 ****
      add any expression to be displayed */
  	{"[ ]*disp[lay]*[ ]*\n",							NULL, {-1, -1, -1, -1, -1, -1}},
! 	{"[ ]*disp[lay]\\(/[^ ]+\\)?*[ ]*[^ ]+[ ]*.*\n",	NULL, {-1, -1, -1, -1, -1, -1}},
  	
  	/* undisplay */
--- 494,498 ----
      add any expression to be displayed */
  	{"[ ]*disp[lay]*[ ]*\n",							NULL, {-1, -1, -1, -1, -1, -1}},
! 	{"[ ]*disp[lay]\\(/[^ \n]+\\)?*[ ]*[^ \n]+[ ]*.*\n",	NULL, {-1, -1, -1, -1, -1, -1}},
  	
  	/* undisplay */
***************
*** 458,462 ****
  	/* Note that Token.mesg (if any) is updated with print command (see 1) */
  	
!     {"[ ]*print[ ]*\\([^ ]?\\([ ]+[^ ]+\\)*\\)[ ]*\n",	NULL, { 1, -1, -1, -1, -1, -1}},
      {"[ ]*info[ ]+break[ ]*\n",				NULL, {-1, -1, -1, -1, -1, -1}},
      
--- 501,505 ----
  	/* Note that Token.mesg (if any) is updated with print command (see 1) */
  	
!     {"[ ]*print[ ]*\\([^ \n]?\\([ ]+[^ \n]+\\)*\\)[ ]*\n",	NULL, { 1, -1, -1, -1, -1, -1}},
      {"[ ]*info[ ]+break[ ]*\n",				NULL, {-1, -1, -1, -1, -1, -1}},
      
***************
*** 471,477 ****
  
      /* define */
!     {"[ ]*def[ine]*[ ]+[^ ]+\n", 			NULL, {-1, -1, -1, -1, -1, -1}},
      /* document */
!     {"[ ]*doc[ument]*[ ]+[^ ]+\n", 			NULL, {-1, -1, -1, -1, -1, -1}},
      /* end of define or document */
      {"[ ]*end[ ]*.*", 						NULL, {-1, -1, -1, -1, -1, -1}},
--- 514,520 ----
  
      /* define */
!     {"[ ]*def[ine]*[ ]+[^ \n]+\n", 			NULL, {-1, -1, -1, -1, -1, -1}},
      /* document */
!     {"[ ]*doc[ument]*[ ]+[^ \n]+\n", 		NULL, {-1, -1, -1, -1, -1, -1}},
      /* end of define or document */
      {"[ ]*end[ ]*.*", 						NULL, {-1, -1, -1, -1, -1, -1}},
diff -rc2 v1.03/global.h v1.04/global.h
*** v1.03/global.h	Tue Apr  2 09:00:55 1991
--- v1.04/global.h	Tue May  7 14:59:20 1991
***************
*** 225,228 ****
--- 225,229 ----
  
  #ifdef GDB
+ extern Boolean 	Filter;			/* filter dbx output (if Echo == false) ? */
  extern void 		display_info_handler();
  extern void 		break_handler();
diff -rc2 v1.03/signs.c v1.04/signs.c
*** v1.03/signs.c	Mon Nov 26 17:31:32 1990
--- v1.04/signs.c	Tue Jul  9 13:32:49 1991
***************
*** 332,340 ****
  
      if (file == NULL) return;
      if (updown.file && !strcmp(updown.file, arrow.file) && 
! 	!strcmp(updown.func, arrow.func)) {
  	updown.line = 0;
  	strcpy(updown.file, "");
      }
      i = updown.i;
      if (i>=0 && i<file->lines)
--- 332,343 ----
  
      if (file == NULL) return;
+     
+ /* (PW)9JULY91 : add test line else it prevents up/down when a function calls itself */
      if (updown.file && !strcmp(updown.file, arrow.file) && 
! 	!strcmp(updown.func, arrow.func) && (updown.line == arrow.line)) {
  	updown.line = 0;
  	strcpy(updown.file, "");
      }
+ 
      i = updown.i;
      if (i>=0 && i<file->lines)
diff -rc2 v1.03/source.c v1.04/source.c
*** v1.03/source.c	Thu Apr 11 14:33:58 1991
--- v1.04/source.c	Thu May 30 17:53:57 1991
***************
*** 131,135 ****
  	    file->bottomline = MIN (file->topline + file->lines - 1, 
  				    file->lastline);
! 	    XawTextSetInsertionPoint(sourceWindow, file->linepos[file->topline]);
  	    UpdateLineLabel(file->topline);
      	    UpdateStops(file);
--- 131,151 ----
  	    file->bottomline = MIN (file->topline + file->lines - 1, 
  				    file->lastline);
! 	    /* 
! 	      03/26/91 mod 7 GWC
! 	      Fixed a bug where the special margin symbols (arrows, stop signs,
! 	      etc.) did not scroll when one moved the text with keyboard commands
! 	      such as Ctrl<Key>n.  To do this the Update action procedure should
! 	      be called after text widget actions such as next-line.
! 	      Unfortunately Update needed to be enhanced a bit not to always warp
! 	      the cursor to the top of the window.  You can now call Update with a
! 	      parameter "warp" to warp the cursor to the top of the screen; the
! 	      default is not to warp.
! 	      */
! 	    if (*num_params == 1 && strcmp(params[0], "warp") == 0)
! 	      {
! 		XawTextSetInsertionPoint(sourceWindow,
! 					 file->linepos[file->topline]);
! 	      }
! 
  	    UpdateLineLabel(file->topline);
      	    UpdateStops(file);
***************
*** 598,601 ****
--- 614,626 ----
      	dirList[i] = NULL;
      }
+ 
+ #if defined(NeXT) && defined(GDB)
+ 	/* for NeXT computer, send 'directory' command for each directory */
+     for (i=0; dirList[i]; i++) {
+     sprintf(command, "directory %s\n", dirList[i]);
+     Parse = False;
+     query_dbx(command);
+     }
+ #else /* not NeXT */
      strcpy(list, "");				/* tell dbx our new list */
      for (i=0; dirList[i]; i++) {
***************
*** 610,613 ****
--- 635,639 ----
      Parse = False;
      query_dbx(command);
+ #endif /* not NeXT */
  }
  
diff -rc2 v1.03/windows.c v1.04/windows.c
*** v1.03/windows.c	Wed Apr  3 15:54:34 1991
--- v1.04/windows.c	Mon May 20 09:27:40 1991
***************
*** 246,250 ****
      Cardinal 	n;
  
! 	fulllength = strlen ("  ") + strlen (format) + 1 + (arg == NULL) ? 0 : strlen (arg);
  	
  	if (fulllength > LINESIZ)
--- 246,250 ----
      Cardinal 	n;
  
! 	fulllength = strlen ("  ") + strlen (format) + 1 + ((arg == NULL) ? 0 : strlen (arg));
  	
  	if (fulllength > LINESIZ)
diff -rc2 v1.03/xdbx.c v1.04/xdbx.c
*** v1.03/xdbx.c	Tue Apr 16 10:22:40 1991
--- v1.04/xdbx.c	Mon Jul 15 15:50:50 1991
***************
*** 72,76 ****
  
  #ifdef GDB
! #define XGDBVERSION	"1.03"
  #endif
  
--- 72,76 ----
  
  #ifdef GDB
! #define XGDBVERSION	"1.04"
  #endif
  
***************
*** 261,265 ****
  
  #ifdef GDB
!     sprintf(title, "xxgdb %s (from xdbx %s patch level %d)", XGDBVERSION,VERSION, PATCHLEVEL);
      XStoreName(display, XtWindow(toplevel), title);
      XSetIconName(display, XtWindow(toplevel), "xxgdb");
--- 261,265 ----
  
  #ifdef GDB
!     sprintf(title, "xxgdb %s", XGDBVERSION);
      XStoreName(display, XtWindow(toplevel), title);
      XSetIconName(display, XtWindow(toplevel), "xxgdb");

--
Dan Heller
O'Reilly && Associates       Z-Code Software    Comp-sources-x:
Senior Writer                President          comp-sources-x@uunet.uu.net
argv@ora.com                 argv@zipcode.com
