aboutsummaryrefslogtreecommitdiff
path: root/gdb/=xgdb.msg
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/=xgdb.msg')
-rw-r--r--gdb/=xgdb.msg997
1 files changed, 0 insertions, 997 deletions
diff --git a/gdb/=xgdb.msg b/gdb/=xgdb.msg
deleted file mode 100644
index ac32300..0000000
--- a/gdb/=xgdb.msg
+++ /dev/null
@@ -1,997 +0,0 @@
-From beatty@unh.cs.cmu.edu Sat Jul 4 12:04:01 1987
-Received: by PREP.AI.MIT.EDU; Sat, 4 Jul 87 12:03:37 EDT
-Message-Id: <8707041603.AA08600@prep.ai.mit.edu>
-To: phr@prep.ai.mit.edu (Paul Rubin)
-Date: Sat, 4 Jul 87 12:03:01 EDT
-From: Derek Beatty <beatty@unh.cs.cmu.edu>
-Subject: Re: gdb and X (msg 1 of 3)
-Status: R
-
-This is part 1 of 3 parts. It consists of the cursor I used, and a message
-I sent to Zalman Stern at Andrew regarding what I did, and why. The
-code and context diffs will follow in other messages.
-
-#define gdb_width 16
-#define gdb_height 16
-#define gdb_x_hot 7
-#define gdb_y_hot 0
-static short gdb_bits[] = {
- 0x0000, 0x0140, 0x0220, 0x0220,
- 0x23e2, 0x13e4, 0x09c8, 0x0ff8,
- 0x0220, 0x3ffe, 0x0630, 0x03e0,
- 0x0220, 0x1ffc, 0x2632, 0x01c0};
-
-#define gdb_mask_width 16
-#define gdb_mask_height 16
-#define gdb_mask_x_hot 7
-#define gdb_mask_y_hot 0
-static short gdb_mask_bits[] = {
- 0x0360, 0x07f0, 0x07f0, 0x77f7,
- 0x7fff, 0x7fff, 0x1ffc, 0x1ffc,
- 0x7fff, 0x7fff, 0x7fff, 0x0ff8,
- 0x3ffe, 0x7fff, 0x7fff, 0x7fff};
-
->
-> The X support I added is minimal; it was inspired by Suntools' dbxtool,
-> together with the availability of the V10 implementation of the X V11
-> toolkit specification. Design was guided by simplicity and the facilities
-> of the toolkit. The debugger window provides a view into the code
-> corresponding to the current stack frame, and several buttons for the
-> breakpoint, print, step, next, continue, finish, up, and down commands.
-> The standard gdb command interface remains available in the tty window from
-> which gdb was started. The breakpoint and print buttons make use of the
-> current selection, so you can do simple things like click at text in the
-> source window, then click the "Go 'til" button to continue until that
-> point.
->
-> Such an interface is simple to program ( ~ 20 hours, about 700 lines),
-> but it has some drawbacks. First, I didn't take the time to understand
-> the longjmp's in gdb, and I'm not exactly happy with the idea of them
-> jumping out of my callback procedures that were invoked by toolkit routines.
-> There's one core dump bug (it shows up when gdb can't find a source
-> file) that I haven't tracked down, and it may be related to this. Second,
-> selection in the text window is not particularly graceful: double-clicking
-> highlights one word of text, as the toolkit defines a word. It would
-> be much more graceful were double-clicking to highlight a C identifier.
-> Finally, and most seriously, most buttons operate by building textual
-> command lines and passing them to gdb's execute_command function. This
-> means that all selected expressions are evaluated and printed in the
-> lexical scope corresponding to the current stack frame, although the
-> selected text may be in a different lexical scope. This serious bug would
-> require work to fix.
->
-> I wrote the X support out of frustration at not having dbxtool available
-> when I work on a vax. The hope of portability to V11 via the toolkit
-> also helped motivate me to write V10 code at this late date. Finally,
-> I'd never written any nontrivial code that ran on a windowing system
-> (although that turns out still to be the case). Were I to make a more
-> serious effort at this project, I would probably add a general "define-button"
-> command akin to gdb's "define" command.
->
-> Look in /usr/beatty/gnu/gdb on vlsi.cs.cmu.edu. All files I have modified
-> are marked, and also have associated backups (.B extensions). Bennet
-> Yee has a copy of the toolkit library; see /usr/bsy/Xtlib on f.gp.cs.cmu.edu.
->
-> -- Derek
->
-
- -- Derek Beatty
-
-From beatty@unh.cs.cmu.edu Sat Jul 4 12:12:47 1987
-Received: by PREP.AI.MIT.EDU; Sat, 4 Jul 87 12:09:20 EDT
-Message-Id: <8707041609.AA08643@prep.ai.mit.edu>
-To: phr@PREP.AI.MIT.EDU (Paul Rubin)
-Date: Sat, 4 Jul 87 12:07:25 EDT
-From: Derek Beatty <beatty@unh.cs.cmu.edu>
-Subject: Re: gdb and X (msg 2 of 3)
-In-Reply-To: Message from "Paul Rubin" of Jul 4, 87 at 1:22 am
-Status: R
-
-The following is "tool.c". I hereby grant permission to do anything you
-like with it.
-
- -- Derek Beatty
-
-[nosave]
-/*
- * gdb tool for X V10R4 (using V11-compatible toolkit).
- * Derek Beatty 30 June 87.
- */
-#include <X/Xlib.h>
-#include <X/Xt/Xtlib.h>
-#include <stdio.h>
-
-#include "defs.h"
-#include "symtab.h"
-
-#include "gdb.cursor"
-#include "gdb_mask.cursor"
-
-
-
-/* forward refs */
-
-static Window createFileText();
-/*
- * Windows manipulated by this package.
- */
-
-static Window
- icon,
- frame,
- srcLabelStrip,
- srcText,
- ctlPanel,
- execLabelStrip;
-
-static Cursor curse;
-
-/*
- * Source text display.
- */
-
-static struct symtab *displayedSymtab= 0;
-
-extern struct symtab *current_source_symtab;
-extern int current_source_line;
-
-toolDisplaySource()
-{
- char *fullName;
- static Arg labelArgs[1];
- int linenumbers_changed= 0;
- static int newWidget= 1;
-
- struct symtab_and_line get_selected_frame_sal();
- struct symtab_and_line sal;
-
- /* we could be called before we are initialized */
- if (!frame) return;
-
- sal= get_selected_frame_sal();
-
- /* strictly this is wrong, but better than a blank display */
- if (sal.symtab==NULL) {
- sal.symtab= current_source_symtab;
- /* current_source_line may be off by a small number like 4 */
- sal.line= current_source_line;
- }
-
- /*
- * Switch to a new file if necessary.
- */
-
- if (sal.symtab)
- linenumbers_changed= get_filename_and_charpos(sal.symtab,
- sal.line,
- &fullName);
- if (!fullName) sal.symtab= NULL;
- /* if the display may be wrong, destroy it */
- if (linenumbers_changed || displayedSymtab != sal.symtab) {
- XtVPanedWindowDeletePane( srcText);
- XtSendDestroyNotify( srcText);
- XDestroyWindow( srcText);
- srcText= 0;
- }
- /* if there's no display, create one */
- if (!srcText) {
- newWidget= 1;
- /* if there's no valid display, create a dummy display */
- if (!sal.symtab ) {
- displayedSymtab= NULL;
- srcText= createFileText(frame, "/dev/null");
- XtVPanedWindowAddPane(frame, srcText, 1, 20, 1000, 1);
- /* create /dev/null text widget */
- XtSetArg(labelArgs[0], XtNlabel, "No source displayed.");
- XtLabelSetValues(srcLabelStrip, labelArgs, XtNumber(labelArgs));
- } else {
- displayedSymtab= sal.symtab;
- srcText= createFileText(frame, fullName);
- XtVPanedWindowAddPane(frame, srcText, 1, 20, 1000, 1);
- XtSetArg(labelArgs[0], XtNlabel, fullName);
- XtLabelSetValues(srcLabelStrip, labelArgs, XtNumber(labelArgs));
- /* free filename (maybe: check gdb code!) */
- }
- }
-
- /*
- * Update display and cursor positions as necessary.
- * Cursor should be placed on line sal.line.
- */
-
- {
- static int prevTop= 0, highWaterMark= 0;
- int currentTop;
- Arg textArgs[1];
-
- /* get positions of start of display, and caret */
- XtSetArg(textArgs[0], XtNdisplayPosition, NULL);
- XtTextGetValues(srcText, textArgs, XtNumber(textArgs));
- currentTop= cvtCharToLine(displayedSymtab,
- (int) textArgs[0].value);
-
- highWaterMark += currentTop - prevTop;
-
- if ( sal.line < currentTop
- || sal.line > highWaterMark
- || newWidget) {
-
- /* warp the display */
-
- newWidget= 0;
-
- /* yes, these magic numbers are ugly, but I don't know how
- * to get the height of a text widget in a V11-portable way
- */
- currentTop= (sal.line > 15) ? sal.line - 15 : 0;
- highWaterMark= currentTop + 35;
-
- XtSetArg(textArgs[0], XtNdisplayPosition,
- cvtLineToChar(displayedSymtab, currentTop));
- XtTextSetValues(srcText, textArgs, XtNumber(textArgs));
- }
- XtSetArg(textArgs[0], XtNinsertPosition,
- cvtLineToChar(displayedSymtab, sal.line));
- XtTextSetValues(srcText, textArgs, XtNumber(textArgs));
-
- prevTop= currentTop;
- }
-}
-
-/* return the character position of a line */
-int
-cvtLineToChar( s, line)
- struct symtab *s;
- int line;
-{
- if (!s) return 0;
- if (!s->line_charpos) return 0;
- if (line < 0) line= 0;
- if (line > s->nlines) line= s->nlines;
- return *(s->line_charpos + line-1);
-}
-
-/* return the line position of a character */
-int
-cvtCharToLine( s, chr)
- register struct symtab *s;
- register int chr;
-{
- register int lineNumber= 0;
- register int *lnp;
-
- if (!s) return 0;
- lnp= s->line_charpos;
- /* files are usually short, so sequential search is Ok */
- while ( lineNumber < s->nlines && *lnp <= chr) {
- lineNumber++;
- lnp++;
- }
- if (lineNumber >= s->nlines)
- lineNumber= s->nlines;
- return lineNumber;
-}
-
-/*
- * title bar at bottom
- */
-
-static char *execFileName;
-
-toolSetExecFile(s)
- char *s;
-{
- execFileName= s;
- if (execLabelStrip) {
- static Arg labelArgs[1];
-
- XtSetArg(labelArgs[0], XtNlabel, execFileName);
- XtLabelSetValues(execLabelStrip, labelArgs, XtNumber(labelArgs));
- }
-}
-
-/*
- * Command line into which command are placed for execution.
- * There's some ugly interaction between this and readline in main.c.
- */
-extern char *line;
-extern int linesize;
-
-/*
- * Do any necessary prompting, etc.
- */
-static char *gdbPrompt;
-
-static void
-printPrompt()
-{
- if (gdbPrompt) {
- printf("%s", gdbPrompt);
- fflush(stdout);
- }
-}
-
-/*
- * Callback procedures for control panel.
- */
-
-/* used by "print" and "print*" buttons */
-static void printButnProc_1( starflag)
- int starflag;
-{
- int selnLen;
- char *seln;
-
- char *cmd= starflag ? "print * " : "print ";
- register int cmdlen= strlen(cmd);
-
- seln= XFetchBytes(&selnLen);
- if (selnLen) {
- if (selnLen+cmdlen >= linesize-1) {
- linesize= (selnLen+cmdlen > linesize*2-1) ? selnLen+cmdlen+1 : linesize*2;
- line= (char *) xrealloc(line, linesize);
- }
- strcpy(line, cmd);
- strncpy(line+cmdlen, seln, selnLen);
- *(line+cmdlen+selnLen)= '\0';
- execute_command(line, 0);
- free(seln);
- }
- printPrompt();
-}
-
-static void printButnProc()
-{
- printButnProc_1( 0);
-}
-
-static void printStarButnProc()
-{
- printButnProc_1( 1);
-}
-
-static void nextButnProc()
-{
- strcpy(line, "next");
- execute_command(line, 0);
- toolDisplaySource();
- printPrompt();
-}
-
-static void stepButnProc()
-{
- strcpy(line, "step");
- execute_command(line, 0);
- toolDisplaySource();
- printPrompt();
-}
-
-static void contButnProc()
-{
- strcpy(line, "cont");
- execute_command(line, 0);
- toolDisplaySource();
- printPrompt();
-}
-
-static void finButnProc()
-{
- strcpy(line, "finish");
- execute_command(line, 0);
- toolDisplaySource();
- printPrompt();
-}
-
-/* used by "stop at" and "go till" buttons */
-static void stopAtButnProc_1( gotillFlag)
- int gotillFlag;
-{
- XtTextPosition start, finish;
- static int lineNumber;
-
- XtTextGetSelectionPos(srcText, &start, &finish);
- if (!displayedSymtab)
- printf("No source file displayed.\n");
- else {
- break_command_for_tool( displayedSymtab,
- cvtCharToLine(displayedSymtab, start),
- gotillFlag);
- if (gotillFlag) {
- strcpy(line, "cont");
- execute_command(line, 0);
- toolDisplaySource();
- }
- }
- printPrompt();
-}
-
-static void stopAtButnProc()
-{
- stopAtButnProc_1( 0);
-}
-
-static void untilButnProc()
-{
- stopAtButnProc_1( 1);
-}
-
-/* decide if a character is trash */
-static int
-garbage(c)
- char c;
-{
- if ('a' <= c && c <= 'z') return 0;
- if ('A' <= c && c <= 'Z') return 0;
- if ('0' <= c && c <= '9') return 0;
- if (c == '_') return 0;
- return 1;
-}
-
-static void stopInButnProc()
-{
- static int selnLen;
- static char *seln;
- char *sp, *selnp;
-
- seln= XFetchBytes(&selnLen);
- if (selnLen) {
- if (selnLen+6 >= linesize-1) {
- linesize= (selnLen+6 > linesize*2-1) ? selnLen+7 : linesize*2;
- line= (char *) xrealloc(line, linesize);
- }
- strcpy(line, "break ");
- /* copy selection but not garbage */
- selnp= seln;
- sp= line+strlen(line);
- while (garbage(*selnp) && selnLen) selnp++, selnLen--;
- while (!garbage(*selnp) && selnLen) {
- *sp++= *selnp++;
- selnLen--;
- }
- *sp= '\0';
- execute_command(line, 0);
- free(seln);
- }
- printPrompt();
-}
-
-static void deIconifyButnProc()
-{
- XUnmapWindow(icon);
- XMapWindow(frame);
-}
-
-static void iconifyButnProc()
-{
- static Arg iconArgs[1];
- XtSetArg(iconArgs[0], XtNlabel, gdbPrompt);
- XtCommandSetValues(icon, iconArgs, XtNumber(iconArgs));
- XUnmapWindow(frame);
- XMapWindow(icon);
-}
-
-static void upButnProc()
-{
- strcpy(line, "up");
- execute_command(line, 0);
- toolDisplaySource();
- printPrompt();
-}
-
-static void downButnProc()
-{
- strcpy(line, "down");
- execute_command(line, 0);
- toolDisplaySource();
- printPrompt();
-}
-
-#define addbutton(w) XtSetArg(buttons[buttoncount], XtNwindow, w); \
- buttoncount++;
-static Arg buttons[20];
-static int buttoncount= 0;
-
-/*
- * Create control panel buttons.
- */
-static createButtons(parent)
- Window parent;
-{
- static Window button;
- static Arg commandArgs[2];
-
-#define crButn(label,fn) \
- XtSetArg(commandArgs[0], XtNlabel, label);\
- XtSetArg(commandArgs[1], XtNfunction, fn);\
- button= XtCommandCreate(parent, commandArgs, XtNumber(commandArgs));\
- addbutton(button);
-
- crButn("Brk At", stopAtButnProc);
- crButn("Brk In", stopInButnProc);
- crButn("Go 'til", untilButnProc);
-
- crButn("Print", printButnProc);
- crButn("Print*", printStarButnProc);
-
- crButn("Next", nextButnProc);
- crButn("Step", stepButnProc);
- crButn("Cont", contButnProc);
- crButn("Finish", finButnProc);
-
- crButn("Up", upButnProc);
- crButn("Down", downButnProc);
-
- crButn("Iconify", iconifyButnProc);
-#undef crButn
-}
-
-static Window createLabel(parent, name, label)
- Window parent;
- char *name, *label;
-{
- static Arg labelArgs[2];
-
- XtSetArg(labelArgs[0], XtNname, name);
- XtSetArg(labelArgs[1], XtNlabel, label);
- return XtLabelCreate(frame, labelArgs, XtNumber(labelArgs));
-}
-
-static Window createFileText( parent, filename)
- Window parent;
- char *filename;
-{
- static Arg fileArgs[2];
-
- XtSetArg(fileArgs[0], XtNfile, filename);
- XtSetArg(fileArgs[1], XtNtextOptions, scrollVertical);
- return XtTextDiskCreate(parent, fileArgs, XtNumber(fileArgs));
-}
-
-/***************** Externally referenced routine **************/
-int createTool()
-{
- static Arg frameArgs[]= {
- {XtNwidth, (XtArgVal) 600},
- {XtNheight, (XtArgVal) 700},
- };
-
- ResourceDataBase db;
- FILE *rdbFile;
-
- /*
- * init and database stuff... this is wrong but what the heck
- */
- if (XOpenDisplay("") == NULL)
- return 0;
- printf("Initializing tool..."); fflush(stdout);
- XtInitialize();
- /* should be checking .Xdefaults in $HOME */
- if ((rdbFile= fopen(".Xresources", "r")) != NULL) {
- XtGetDataBase(rdbFile, &db);
- XtSetCurrentDataBase(db);
- fclose(rdbFile);
- }
-
- /*
- * create the frame
- */
- frame= XtVPanedWindowCreate(RootWindow, frameArgs, XtNumber(frameArgs));
-
- /* create source label strip and add to frame */
- srcLabelStrip= createLabel(frame, "Source File", "No source file yet.");
- XtVPanedWindowAddPane(frame, srcLabelStrip, 0, 15, 15, 0);
-
- /* create text widget and add to frame */
- srcText= createFileText(frame, "/dev/null");
- XtVPanedWindowAddPane(frame, srcText, 1, 20, 1000, 1);
-
- /* create button box */
- ctlPanel= XtButtonBoxCreate(frame, NULL, 0);
- createButtons( ctlPanel);
- XtButtonBoxAddButton(ctlPanel, buttons, buttoncount);
- XtVPanedWindowAddPane(frame, ctlPanel, 2, 30, 30, 0);
-
- /* create exec label strip and add */
- execLabelStrip= createLabel(frame, "Executable",
- execFileName ? execFileName : "No executable specified.");
- XtVPanedWindowAddPane(frame, execLabelStrip, 3, 15, 15, 0);
-
-
- /* create icon */
- {
- static Arg iconArgs[2];
- XtSetArg(iconArgs[0], XtNlabel, "(gdb)");
- XtSetArg(iconArgs[1], XtNfunction, deIconifyButnProc);
- icon= XtCommandCreate(RootWindow, iconArgs, XtNumber(iconArgs));
- XMoveWindow(icon, 100, 100); /* HACK */
- XSetIconWindow(frame, icon);
- }
-
- /* throw it onto the display */
- curse= XCreateCursor(gdb_width, gdb_height, gdb_bits, gdb_mask_bits,
- gdb_x_hot, gdb_y_hot,
- BlackPixel, WhitePixel, GXcopy);
- XDefineCursor(frame, curse);
- XDefineCursor(icon, curse);
- XMapWindow(frame);
- XMapSubwindows(frame);
- XFlush();
- printf("done\n");
- return 1;
-}
-
-/**************** Externally referenced routine. ***********/
-/* toolDispatcher -- dispatch events until data is available on fp */
-toolDispatcher(fp, prompt)
- FILE *fp;
- char *prompt;
-{
- int inMask= 1 << fileno(fp);
- int xMask= 1 << dpyno();
- int rfds= 0;
- int nfds;
- XEvent ev;
- int pend;
-
- gdbPrompt= prompt;
-
- while (! (rfds & inMask)) {
- pend= XPending();
- if (!pend) {
- rfds= inMask | xMask;
- /* this isn't right for 4.3 but it works 'cuz of 4.2 compatibility */
- nfds= select( 32, &rfds, 0, 0, (struct timeval *) 0);
- }
- if (pend || rfds & xMask) {
- XNextEvent(&ev);
- XtDispatchEvent(&ev);
- }
- }
-}
-
-From beatty@unh.cs.cmu.edu Sat Jul 4 12:17:44 1987
-Received: by PREP.AI.MIT.EDU; Sat, 4 Jul 87 12:15:18 EDT
-Message-Id: <8707041615.AA08691@prep.ai.mit.edu>
-To: phr@PREP.AI.MIT.EDU (Paul Rubin)
-Date: Sat, 4 Jul 87 12:14:08 EDT
-From: Derek Beatty <beatty@unh.cs.cmu.edu>
-Subject: Re: gdb and X (msg 3 of 3)
-In-Reply-To: Message from "Paul Rubin" of Jul 4, 87 at 1:22 am
-Status: R
-
-Context diffs follow. The original files are from GDB 2.1 (emacs distribution
-18.40).
-
- -- Derek Beatty
-[nosave]
-*** /usr/misc/.gdb/src/core.c Fri Mar 27 12:20:14 1987
---- core.c Sat Jul 4 11:12:16 1987
-***************
-*** 1,3
- /* Work with core dump and executable files, for GDB.
- Copyright (C) 1986, 1987 Free Software Foundation, Inc.
-
-
---- 1,5 -----
-+ /* modified by Beatty 1 Jul 87 for gdb tool. */
-+
- /* Work with core dump and executable files, for GDB.
- Copyright (C) 1986, 1987 Free Software Foundation, Inc.
-
-***************
-*** 257,262
- }
- else if (from_tty)
- printf ("No exec file now.\n");
- }
-
- /* If we have both a core file and an exec file,
-
---- 259,267 -----
- }
- else if (from_tty)
- printf ("No exec file now.\n");
-+ #ifdef TOOL
-+ toolSetExecFile( filename ? filename : "No executable specified.\n");
-+ #endif /* def TOOL */
- }
-
- /* If we have both a core file and an exec file,
-*** /usr/misc/.gdb/src/breakpoint.c Fri Mar 27 12:20:11 1987
---- breakpoint.c Wed Jul 1 11:27:31 1987
-***************
-*** 1,3
- /* Everything about breakpoints, for GDB.
- Copyright (C) 1986, 1987 Free Software Foundation, Inc.
-
-
---- 1,5 -----
-+ /* modified by Beatty 1 Jul 87 for gdbtool */
-+
- /* Everything about breakpoints, for GDB.
- Copyright (C) 1986, 1987 Free Software Foundation, Inc.
-
-***************
-*** 513,518
- break;
- }
- }
-
- /* Set a breakpoint according to ARG (function, linenum or *address)
- and make it temporary if TEMPFLAG is nonzero. */
-
---- 515,571 -----
- break;
- }
- }
-+
-+ #ifdef TOOL
-+ /* set a breakpoint from a symtab and line */
-+ void break_command_for_tool( s, line, tempflag)
-+ struct symtab *s;
-+ int line;
-+ int tempflag;
-+ {
-+ register struct breakpoint *b;
-+ struct symtab_and_line sal;
-+
-+ sal.symtab= s;
-+ sal.line= line;
-+ sal.pc= find_line_pc( sal.symtab, sal.line);
-+ if (sal.pc==0) {
-+ error("No line %d in file \"%s\".\n", sal.line, sal.symtab->filename);
-+ } else {
-+ b= set_raw_breakpoint( sal);
-+ b->number= ++breakpoint_count;
-+ b->cond= 0;
-+ if (tempflag)
-+ b->enable= temporary;
-+
-+ printf ("Breakpoint %d at 0x%x", b->number, b->address);
-+ if (b->symtab)
-+ printf (": file %s, line %d.", b->symtab->filename, b->line_number);
-+ printf ("\n");
-+
-+ {
-+ int others = 0;
-+ ALL_BREAKPOINTS (b)
-+ if (b->address == sal.pc && b->number != breakpoint_count)
-+ others++;
-+ if (others > 0)
-+ {
-+ printf ("Note: breakpoint%s ", (others > 1) ? "s" : "");
-+ ALL_BREAKPOINTS (b)
-+ if (b->address == sal.pc && b->number != breakpoint_count)
-+ {
-+ others--;
-+ printf ("%d%s%s ",
-+ b->number,
-+ (b->enable == disabled) ? " (disabled)" : "",
-+ (others > 1) ? "," : ((others == 1) ? " and" : ""));
-+ }
-+ printf (" also set at pc 0x%x\n", sal.pc);
-+ }
-+ }
-+ }
-+ }
-+ #endif /* def TOOL */
-
- /* Set a breakpoint according to ARG (function, linenum or *address)
- and make it temporary if TEMPFLAG is nonzero. */
-*** /usr/misc/.gdb/src/main.c Fri Mar 27 12:20:45 1987
---- main.c Sat Jul 4 11:13:32 1987
-***************
-*** 1,3
- /* Top level for GDB, the GNU debugger.
- Copyright (C) 1986, 1987 Free Software Foundation, Inc.
-
-
---- 1,5 -----
-+ /* modified by Beatty 30 june 87 for gdb tool */
-+
- /* Top level for GDB, the GNU debugger.
- Copyright (C) 1986, 1987 Free Software Foundation, Inc.
-
-***************
-*** 42,47
-
- FILE *instream;
-
- void free_command_lines ();
- char *read_line ();
- static void initialize_main ();
-
---- 44,54 -----
-
- FILE *instream;
-
-+ #ifdef TOOL
-+ /* flag indicating whether we are running in a window system */
-+ int isaTool= 0;
-+ #endif /* def TOOL */
-+
- void free_command_lines ();
- char *read_line ();
- static void initialize_main ();
-***************
-*** 214,219
-
- while (1)
- {
- if (!setjmp (to_top_level))
- command_loop ();
- clearerr (stdin); /* Don't get hung if C-d is typed. */
-
---- 221,232 -----
-
- while (1)
- {
-+
-+ #ifdef TOOL
-+ if (!isaTool)
-+ isaTool= createTool();
-+ #endif /* def TOOL */
-+
- if (!setjmp (to_top_level))
- command_loop ();
- clearerr (stdin); /* Don't get hung if C-d is typed. */
-***************
-*** 270,275
- printf ("%s", prompt);
- fflush (stdout);
-
- quit_flag = 0;
- execute_command (read_line (instream == stdin), instream == stdin);
- /* Do any commands attached to breakpoint we stopped at. */
-
---- 283,294 -----
- printf ("%s", prompt);
- fflush (stdout);
-
-+ #ifdef TOOL
-+ toolDisplaySource();
-+ if (isaTool) toolDispatcher(instream,
-+ instream==stdin ? prompt : NULL);
-+ #endif /* def TOOL */
-+
- quit_flag = 0;
- execute_command (read_line (instream == stdin), instream == stdin);
- /* Do any commands attached to breakpoint we stopped at. */
-***************
-*** 320,325
-
- while (1)
- {
- c = fgetc (instream);
- if (c == -1 || c == '\n')
- break;
-
---- 339,345 -----
-
- while (1)
- {
-+
- c = fgetc (instream);
- if (c == -1 || c == '\n')
- break;
-***************
-*** 765,770
- GDB is free software and you are welcome to distribute copies of it\n\
- under certain conditions; type \"info copying\" to see the conditions.\n",
- version);
- }
-
- static void
-
---- 785,793 -----
- GDB is free software and you are welcome to distribute copies of it\n\
- under certain conditions; type \"info copying\" to see the conditions.\n",
- version);
-+ #ifdef TOOL
-+ printf( "(CMU X support is available in this version.)\n");
-+ #endif
- }
-
- static void
-*** /usr/misc/.gdb/src/source.c Fri Mar 27 12:20:50 1987
---- source.c Wed Jul 1 17:56:58 1987
-***************
-*** 1,3
- /* List lines of source files for GDB, the GNU debugger.
- Copyright (C) 1986, 1987 Free Software Foundation, Inc.
-
-
---- 1,5 -----
-+ /* modified 1 July 87 by Beatty for gdbtool */
-+
- /* List lines of source files for GDB, the GNU debugger.
- Copyright (C) 1986, 1987 Free Software Foundation, Inc.
-
-***************
-*** 295,300
- s->nlines = nlines;
- s->line_charpos = (int *) xrealloc (line_charpos, nlines * sizeof (int));
- }
-
- /* Print source lines from the file of symtab S,
- starting with line number LINE and stopping before line number STOPLINE. */
-
---- 297,328 -----
- s->nlines = nlines;
- s->line_charpos = (int *) xrealloc (line_charpos, nlines * sizeof (int));
- }
-+
-+ #ifdef TOOL
-+ /* Get full pathname and line number positions for a symtab
-+ * return nonzero if line numbers may have changed
-+ * set full pathname to NULL if no file found
-+ */
-+ int
-+ get_filename_and_charpos(s, line, fullname)
-+ struct symtab *s;
-+ int line;
-+ char **fullname;
-+ {
-+ register int desc, linenums_changed= 0;
-+
-+ desc= openp(source_path, 0, s->filename, O_RDONLY, 0, fullname);
-+ if (desc < 0) {
-+ *fullname= NULL;
-+ return 0;
-+ }
-+ if (s->line_charpos==0) linenums_changed= 1;
-+ if (linenums_changed) find_source_lines(s, desc);
-+ close(desc);
-+ return linenums_changed;
-+ }
-+ #endif /* def TOOL */
-+
-
- /* Print source lines from the file of symtab S,
- starting with line number LINE and stopping before line number STOPLINE. */
-*** /usr/misc/.gdb/src/stack.c Fri Mar 27 12:20:51 1987
---- stack.c Wed Jul 1 17:27:34 1987
-***************
-*** 1,3
- /* Print and select stack frames for GDB, the GNU debugger.
- Copyright (C) 1986, 1987 Free Software Foundation, Inc.
-
-
---- 1,5 -----
-+ /* modified by Beatty 1 Jul 87 for gdbtool */
-+
- /* Print and select stack frames for GDB, the GNU debugger.
- Copyright (C) 1986, 1987 Free Software Foundation, Inc.
-
-***************
-*** 42,47
- static void select_calling_frame ();
-
- void print_frame_info ();
-
- /* Print a stack frame briefly. FRAME should be the frame address
- and LEVEL should be its level in the stack (or -1 for level not defined).
-
---- 44,62 -----
- static void select_calling_frame ();
-
- void print_frame_info ();
-+
-+ #ifdef TOOL
-+ /* get symtab and line of selected frame, for tool display */
-+ struct symtab_and_line
-+ get_selected_frame_sal()
-+ {
-+ struct frame_info fi;
-+
-+ fi= get_frame_info( selected_frame);
-+ return find_pc_line(fi.pc, fi.next_frame);
-+ }
-+
-+ #endif /* TOOL */
-
- /* Print a stack frame briefly. FRAME should be the frame address
- and LEVEL should be its level in the stack (or -1 for level not defined).
-End of context diffs. The presence of this line verifies that this message
-has not been truncated.
-