cheung%SW.MCC.COM@MCC.COM (Po Cheung) (08/28/90)
Submitted-by: cheung%SW.MCC.COM@MCC.COM (Po Cheung) Posting-number: Volume 8, Issue 105 Archive-name: xdbx/part01 The subject says it all -- this is version 2.0 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 1 (of 7)." # Contents: Imakefile README XDbx.ad bsd_regex.h calldbx.c datadpy.h # dbx.c mips_regex.h patchlevel.h signals.c sun_regex.h utils.c # windows.c # Wrapped by cheung@espresso.sw.mcc.com on Fri Aug 24 03:24:41 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'Imakefile' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Imakefile'\" else echo shar: Extracting \"'Imakefile'\" \(726 characters\) sed "s/^X//" >'Imakefile' <<'END_OF_FILE' X#if defined(SunArchitecture) && OSMajorVersion >= 4 X DEFINES = -DSUNOS4 X#endif X X#ifdef UltrixArchitecture X#ifdef MipsArchitecture X DEFINES = -DBSD -DMIPS X#else X DEFINES = -DBSD X#endif X#endif X X DEPLIBS = $(DEPXAWLIB) $(DEPXMULIB) $(DEPXTOOLLIB) $(DEPXLIB) XLOCAL_LIBRARIES = $(XAWLIB) $(XMULIB) $(XTOOLLIB) $(XLIB) X X SRCS = calldbx.c command.c dbx.c dialog.c datadpy.c filemenu.c \ X handler.c parser.c regex.c signs.c signals.c source.c \ X utils.c windows.c xdbx.c X X OBJS = calldbx.o command.o dbx.o dialog.o datadpy.o filemenu.o \ X handler.o parser.o regex.o signs.o signals.o source.o \ X utils.o windows.o xdbx.o X XComplexProgramTarget(xdbx) XInstallAppDefaults(XDbx) END_OF_FILE if test 726 -ne `wc -c <'Imakefile'`; then echo shar: \"'Imakefile'\" unpacked with wrong size! fi # end of 'Imakefile' fi if test -f 'README' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'README'\" else echo shar: Extracting \"'README'\" \(968 characters\) sed "s/^X//" >'README' <<'END_OF_FILE' X XXdbx Version 2.1 X~~~~~~~~~~~~~~~~ XThis is the source distribution of xdbx, version 2.1 for X11R4 only. XXdbx implements an X window system interface to the dbx debugger. It Xuses X11R4 Xt Intrinsics and Athena widgets. Xdbx supports dbx on the XSun 3, Sun 4 workstations, and the DECstation 3100. X XChanges since version 2.0 X + conversion to R4 X + addition of icon X + text selection behavior X + bug fixes and enhancement X XXdbx has been tested on the following platforms: X o Sun 4 running SunOS 4.0.3 X o Sun 3 running SunOS 4.1 X o Sun 3 running SunOS 4.0.3 X o DECStation 3100 running Ultrix 3.1 X o OpenWindows 1.1, 2.0 X o Window managers: mwm, twm, olwm X XBugs: X o xdbx may get into an infinte loop while running on the DECstation 3100 X XPlease send comments and bug reports to: X X Po Cheung X cheung@sw.mcc.com X Microelectronics and Computer Technology Corporation X -- or -- X po@cerc.utexas.edu X University of Texas at Austin X END_OF_FILE if test 968 -ne `wc -c <'README'`; then echo shar: \"'README'\" unpacked with wrong size! fi # end of 'README' fi if test -f 'XDbx.ad' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'XDbx.ad'\" else echo shar: Extracting \"'XDbx.ad'\" \(1734 characters\) sed "s/^X//" >'XDbx.ad' <<'END_OF_FILE' X# X# Xdbx 2.1 Application defaults file X# X X*background: snow1 X*foreground: black X*fileWindow*background: snow2 X*messageWindow.background: snow2 X*commandWindow.background: snow2 X*Scrollbar.foreground: snow3 X X*allowShellResize: True X*borderWidth: 1 X*font: fixed X*vpane.width: 550 X*fileWindow*font: variable X*fileLabel.width: 500 X*lineLabel.width: 50 X*sourceForm.preferredPaneSize: 320 X*sourceWindow.leftMargin: 35 X*sourceWindow.scrollHorizontal: whenNeeded X*sourceWindow.translations: #override \n\ X <Btn1Down>: SelectStart() SelectWord() \n\ X Shift<Btn1Up>: Update() SelectEnd() PrintSelection() \n\ X <Btn1Up>: Update() SelectEnd() \n X*messageWindow*font: variable X*messageWindow.min: 30 X*messageWindow.max: 30 X*dialogWindow.preferredPaneSize: 200 X*dialogWindow.resizeToPreferred: True X*dialogWindow.translations: #override \n\ X <Btn1Down>: SelectStart() SelectWord() \n\ X Shift<Btn1Up>: SelectEnd() PrintSelection() \n\ X <Btn1Up>: SelectEnd() \n X*commandWindow.preferredPaneSize: 106 X*commandWindow.skipAdjust: True X*commandWindow.hSpace: 14 X*commandWindow.vSpace: 10 X*Command.height: 20 X*Command.width: 60 X*List.columnSpacing: 10 X*displayWindow.preferredPaneSize: 50 X*displayWindow.skipAdjust: True X*displayWindow.scrollVertical: whenNeeded X*displayWindow.scrollHorizontal: whenNeeded X*displayWindow.translations: #override \n\ X <Btn1Down>: SelectStart() SelectWord() \n\ X Shift<Btn1Up>: SelectEnd() PrintSelection() \n\ X <Btn1Up>: SelectEnd() \n X*popup*showGrip: False END_OF_FILE if test 1734 -ne `wc -c <'XDbx.ad'`; then echo shar: \"'XDbx.ad'\" unpacked with wrong size! fi # end of 'XDbx.ad' fi if test -f 'bsd_regex.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'bsd_regex.h'\" else echo shar: Extracting \"'bsd_regex.h'\" \(5064 characters\) sed "s/^X//" >'bsd_regex.h' <<'END_OF_FILE' X/***************************************************************************** X * X * xdbx - X Window System interface to the dbx debugger X * X * Copyright 1989 The University of Texas at Austin X * Copyright 1990 Microelectronics and Computer Technology Corporation X * X * Permission to use, copy, modify, and distribute this software and its X * documentation for any purpose and without fee is hereby granted, X * provided that the above copyright notice appear in all copies and that X * both that copyright notice and this permission notice appear in X * supporting documentation, and that the name of The University of Texas X * and Microelectronics and Computer Technology Corporation (MCC) not be X * used in advertising or publicity pertaining to distribution of X * the software without specific, written prior permission. The X * University of Texas and MCC makes no representations about the X * suitability of this software for any purpose. It is provided "as is" X * without express or implied warranty. X * X * THE UNIVERSITY OF TEXAS AND MCC DISCLAIMS ALL WARRANTIES WITH REGARD TO X * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND X * FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF TEXAS OR MCC BE LIABLE FOR X * ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER X * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF X * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN X * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. X * X * Author: Po Cheung X * Created: March 10, 1989 X * X *****************************************************************************/ X X/* bsd_regex.h X * X * Regular expression pattern matching for Berkeley dbx. X * X * The reg_token array indicates the register no. for each token type. X * reg_token[0] : message X * reg_token[1] : stop number X * reg_token[2] : function name X * reg_token[3] : line number X * reg_token[4] : file name X * reg_token[5] : display command output X */ X X#define TK_MESG 0 X#define TK_STOP 1 X#define TK_FUNC 2 X#define TK_LINE 3 X#define TK_FILE 4 X#define TK_DISP 5 X X#define O_EXEC 0 X#define O_DONE 1 X#define O_STOPAT 2 X#define O_STOPIN 3 X#define O_UPDOWN 4 X#define O_BELL 5 X#define O_LIST 6 X#define O_FILE 7 X#define O_SEARCH 8 X#define O_PRINT 9 X#define O_DEBUG 10 X X#define C_ANY -1 X#define C_EXEC 0 X#define C_STOPAT 1 X#define C_STOPIN 2 X#define C_UPDOWN 3 X#define C_DELETE 4 X#define C_FUNC 5 X#define C_FILE 6 X#define C_USE 7 X#define C_LIST 8 X#define C_SEARCH 9 X#define C_PRINT 10 X#define C_STATUS 11 X X Xstatic PatternRec output_pattern[] = { X /* exec */ X {"\\(.*\n\\)*.*\\(\[[0-9]+\\] \\)?\\(\\(stopped\\|Bus error\\|Segmentation \ Xfault\\|Interrupt\\) in \\([^ ]+\\) at line \ X\\([0-9]+\\)\\( in file \"\\([^ ]+\\)\"\\)?\\)\n", X NULL, X {3, -1, 5, 6, 8, -1} X }, X /* done */ X {"\\(.*\n\\)*execution completed", X NULL, X {-1, -1, -1, -1, -1, -1} X }, X /* stop at */ X {"\\[\\([0-9]+\\)\\] stop at \\(\"\\([^ ]+\\)\":\\)?\\([0-9]+\\)\n", X NULL, X {-1, 1, -1, 4, 3, -1} X }, X /* stop in */ X {"\\[\\([0-9]+\\)\\] stop in \\([^ ]+\\)\n", X NULL, X {-1, 1, 2, -1, -1, -1} X }, X /* up, down */ X {"\\([^ ]+\\)(.*), line \\([0-9]+\\) in \"\\([^ ]+\\)\"\n", X NULL, X {-1, -1, 1, 2, 3, -1} X }, X /* bell */ X {"\\(not that many levels\n\\|can't continue execution\n\\)", X NULL, X {-1, -1, -1, -1, -1, -1} X }, X /* list */ X {"\\([ ]*[0-9]+.*\n\\)*[ ]+\\([0-9]+\\)[ ]+{.*\n", X NULL, X {-1, -1, -1, 2, -1, -1} X }, X /* file */ X {"\\([^ ]*\\)\n", X NULL, X {-1, -1, -1, -1, 1, -1} X }, X /* search */ X {"[ ]*\\([0-9]+\\).*\n", X NULL, X {-1, -1, -1, 1, -1, -1} X }, X /* print, display */ X {"\\(warning: .*\n\\)?\\(\\(.*\\) = .*\n\\(.*\n\\)*\\)", X NULL, X { 3, -1, -1, -1, -1, 2} X }, X NULL X}; X Xstatic PatternRec command_pattern[] = { X {"[ ]*\\(run\\|r\\|cont\\|c\\|next\\|n\\|step\\|s\\|return\\)", X NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*\\(stop\\|st\\)[ ]+at[ ]+[0-9]+", NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*\\(stop\\|st\\)[ ]+in[ ]+[^ ]+", NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*\\(where\\|up\\|down\\)", NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*\\(delete\\|d\\)", NULL, {-1, -1, -1, 1, -1, -1}}, X {"[ ]*func[ ]*\\([^ ]+\\)[ ]*", NULL, {-1, -1, 1, -1, -1, -1}}, X {"[ ]*file[ ]*", NULL, {-1, -1, -1, -1, 1, -1}}, X {"[ ]*use[ ]*", NULL, {-1, -1, -1, -1, 1, -1}}, X {"[ ]*list[ ]*", NULL, {-1, -1, -1, -1, 1, -1}}, X {"[ ]*\\(/\\|\?\\)", NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*print[ ]*[^ ]+", NULL, {-1, -1, -1, -1, -1, -1}}, X NULL X}; END_OF_FILE if test 5064 -ne `wc -c <'bsd_regex.h'`; then echo shar: \"'bsd_regex.h'\" unpacked with wrong size! fi # end of 'bsd_regex.h' fi if test -f 'calldbx.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'calldbx.c'\" else echo shar: Extracting \"'calldbx.c'\" \(5814 characters\) sed "s/^X//" >'calldbx.c' <<'END_OF_FILE' X/***************************************************************************** X * X * xdbx - X Window System interface to the dbx debugger X * X * Copyright 1989 The University of Texas at Austin X * Copyright 1990 Microelectronics and Computer Technology Corporation X * X * Permission to use, copy, modify, and distribute this software and its X * documentation for any purpose and without fee is hereby granted, X * provided that the above copyright notice appear in all copies and that X * both that copyright notice and this permission notice appear in X * supporting documentation, and that the name of The University of Texas X * and Microelectronics and Computer Technology Corporation (MCC) not be X * used in advertising or publicity pertaining to distribution of X * the software without specific, written prior permission. The X * University of Texas and MCC makes no representations about the X * suitability of this software for any purpose. It is provided "as is" X * without express or implied warranty. X * X * THE UNIVERSITY OF TEXAS AND MCC DISCLAIMS ALL WARRANTIES WITH REGARD TO X * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND X * FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF TEXAS OR MCC BE LIABLE FOR X * ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER X * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF X * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN X * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. X * X * Author: Po Cheung X * Created: March 10, 1989 X * X *****************************************************************************/ X X/* calldbx.c X * X * Set up communication between dbx and xdbx using pseudo terminal, and X * call dbx. X * X * open_master(): Open the master side of pty. X * open_slave(): Open the slave side of pty. X * calldbx(): Invoke dbx. X */ X X#include <termio.h> X#include "global.h" X XFILE *dbxfp = NULL; /* file pointer to dbx */ Xint dbxpid = 0; /* dbx process id */ X Xstatic int dbxInputId; /* dbx input id */ Xstatic char pty[11] = "/dev/pty??"; /* master side of pseudo-terminal */ Xstatic char tty[11] = "/dev/tty??"; /* slave side of pseudo-terminal */ Xextern char *dbxprompt; X X/* X * Xdbx talks to dbx through a pseudo terminal which is a pair of master X * and slave devices: /dev/pty?? and /dev/tty??, where ?? goes from p0 to X * sf (system dependent). The pty is opened for both read and write. X */ Xstatic int open_master() X{ X int i, master; X char c; X X for (c='p'; c<='s'; c++) { X pty[8] = c; X for (i=0; i<16; i++) { X pty[9] = "0123456789abcdef"[i]; X if ((master = open(pty, O_RDWR)) != -1) X return (master); X } X } X fprintf(stderr, "xdbx: all ptys in use\n"); X exit(1); X} X Xstatic int open_slave() X{ X int slave; X X tty[8] = pty[8]; X tty[9] = pty[9]; X if ((slave = open(tty, O_RDWR)) != -1) X return (slave); X fprintf(stderr, "open: cannot open slave pty %s", tty); X exit(1); X} X X/* ARGSUSED */ Xvoid calldbx(argc, argv) Xint argc; Xchar *argv[]; X{ X struct termio Termio; X int master; /* file descriptor of master pty */ X int slave; /* file descriptor of slave pty */ X int fd; /* file descriptor of controlling tty */ X int pid; /* process id */ X int pgrp; /* process group id */ X char *debugger; /* name of executable debugger */ X char errmsg[LINESIZ]; X X debugger = (char *) getenv("DEBUGGER"); /* first looks up env var */ X if (debugger == NULL) X debugger = XtNewString(DEBUGGER); X X /* construct dbx prompt string based on the name of debugger invoked */ X if (dbxprompt == NULL) { X dbxprompt = XtMalloc((4+strlen(debugger)) * sizeof(char)); X sprintf(dbxprompt, "(%s) ", debugger); X } X X /* X * Clear controlling tty. Do this now, so that open_slave and X * open_master will cause the selected pty to become the X * controlling tty. X */ X if ((fd = open("/dev/tty", O_RDWR)) > 0) { X ioctl(fd, TIOCNOTTY, 0); X close(fd); X } X X master = open_master(); X slave = open_slave(); X X dbxpid = fork(); X if (dbxpid == -1) { X perror("xdbx error: cannot fork process"); X exit(1); X } X else if (dbxpid) { X /* X * Parent : close the slave side of pty X * close stdin and stdout X * set the dbx file descriptor to nonblocking mode X * open file pointer with read/write access to dbx X * set line buffered mode X * register dbx input with X X */ X close(slave); X close(0); X close(1); X fcntl(master, F_SETFL, FNDELAY); X dbxfp = fdopen(master, "r+"); X setlinebuf(dbxfp); X dbxInputId = XtAppAddInput(app_context, master, XtInputReadMask, X read_dbx, NULL); X } X else { X /* X * Child : close master side of pty X * redirect stdin, stdout, stderr of dbx to pty X * unbuffer output data from dbx X * exec dbx with arguments X */ X close(master); X X /* X * Modify local and output mode of slave pty X */ X ioctl(slave, TCGETA, &Termio); X Termio.c_lflag &= ~ECHO; /* No echo */ X Termio.c_oflag &= ~ONLCR; /* Do not map NL to CR-NL on output */ X ioctl(slave, TCSETA, &Termio); X X dup2(slave, 0); X dup2(slave, 1); X dup2(slave, 2); X if (slave > 2) X close(slave); X fcntl(1, F_SETFL, FAPPEND); X setbuf(stdout, NULL); X X /* X * Set our process group to that of the terminal, X * so we can change the group of the terminal. X */ X ioctl(0, TIOCGPGRP, &pgrp); X setpgrp(0, pgrp); X X /* X * Now set the process group of the terminal and of us X * to our process id. This clears us from the control X * of the other process group. X */ X pid = getpid(); X ioctl(0, TIOCSPGRP, &pid); X setpgrp(0, pid); X X argv[0] = debugger; X execvp(debugger, argv); X sprintf(errmsg, "xdbx error: cannot exec %s", debugger); X perror(errmsg); X exit(1); X } X} END_OF_FILE if test 5814 -ne `wc -c <'calldbx.c'`; then echo shar: \"'calldbx.c'\" unpacked with wrong size! fi # end of 'calldbx.c' fi if test -f 'datadpy.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'datadpy.h'\" else echo shar: Extracting \"'datadpy.h'\" \(2390 characters\) sed "s/^X//" >'datadpy.h' <<'END_OF_FILE' X/***************************************************************************** X * X * xdbx - X Window System interface to the dbx debugger X * X * Copyright 1989 The University of Texas at Austin X * Copyright 1990 Microelectronics and Computer Technology Corporation X * X * Permission to use, copy, modify, and distribute this software and its X * documentation for any purpose and without fee is hereby granted, X * provided that the above copyright notice appear in all copies and that X * both that copyright notice and this permission notice appear in X * supporting documentation, and that the name of The University of Texas X * and Microelectronics and Computer Technology Corporation (MCC) not be X * used in advertising or publicity pertaining to distribution of X * the software without specific, written prior permission. The X * University of Texas and MCC makes no representations about the X * suitability of this software for any purpose. It is provided "as is" X * without express or implied warranty. X * X * THE UNIVERSITY OF TEXAS AND MCC DISCLAIMS ALL WARRANTIES WITH REGARD TO X * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND X * FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF TEXAS OR MCC BE LIABLE FOR X * ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER X * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF X * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN X * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. X * X * Author: Po Cheung X * Created: March 10, 1989 X * X *****************************************************************************/ X X/* datadpy.h: X * X * Regular expression pattern matching for C structures X * X * The reg_token array indicates the register no. for each token type. X * reg_token[0] : level of indentation X * reg_token[2] : field name X * reg_token[4] : pointer string X */ X X#define TK_INDENT 0 X#define TK_FIELD 2 X#define TK_POINTER 4 X X#define D_POINTER 0 X#define D_FIELD 1 X#define D_STRUCT 2 X XPatternRec dataPattern[] = { X {"0x[0-9a-f]+", X NULL, {-1, -1, -1, -1, -1, -1} X }, X {"\\([ ]*\\)\\(.*[^ ]+\\)[ ]* = \\(0x[0-9a-f]+\\)\n", X NULL, { 1, -1, 2, -1, 3, -1} X }, X {"\\([ ]*\\)\\(.*[^ ]*\\)[ ]* = {\n", X NULL, { 1, -1, 2, -1, -1, -1} X }, X NULL X}; END_OF_FILE if test 2390 -ne `wc -c <'datadpy.h'`; then echo shar: \"'datadpy.h'\" unpacked with wrong size! fi # end of 'datadpy.h' fi if test -f 'dbx.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dbx.c'\" else echo shar: Extracting \"'dbx.c'\" \(5682 characters\) sed "s/^X//" >'dbx.c' <<'END_OF_FILE' X/***************************************************************************** X * X * xdbx - X Window System interface to the dbx debugger X * X * Copyright 1989 The University of Texas at Austin X * Copyright 1990 Microelectronics and Computer Technology Corporation X * X * Permission to use, copy, modify, and distribute this software and its X * documentation for any purpose and without fee is hereby granted, X * provided that the above copyright notice appear in all copies and that X * both that copyright notice and this permission notice appear in X * supporting documentation, and that the name of The University of Texas X * and Microelectronics and Computer Technology Corporation (MCC) not be X * used in advertising or publicity pertaining to distribution of X * the software without specific, written prior permission. The X * University of Texas and MCC makes no representations about the X * suitability of this software for any purpose. It is provided "as is" X * without express or implied warranty. X * X * THE UNIVERSITY OF TEXAS AND MCC DISCLAIMS ALL WARRANTIES WITH REGARD TO X * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND X * FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF TEXAS OR MCC BE LIABLE FOR X * ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER X * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF X * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN X * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. X * X * Author: Po Cheung X * Created: March 10, 1989 X * X *****************************************************************************/ X X/* X * dbx.c X * X * Handle dbx command initialization file (.dbxinit) and communication X * between dbx and xdbx. X * X * dbx_init(): Handle .dbxinit X * debug_init(): X * read_dbx(): Read dbx output, parse and filter it before displaying X * onto the dialog window. X * write_dbx(): Send a command to dbx. X * query_dbx(): Send a command to dbx and process it. X */ X X#include "global.h" X XBoolean Prompt; /* True when dbx prompt arrives */ Xchar *concat(); Xchar *dbxprompt; Xchar *xdbxprompt; X X/* Given a dbx command initialization file, this routine executes each dbx X * command in the file. It sends the command to dbx, and calls read_dbx() X * directly to process output returned from dbx. X */ Xstatic void dbx_init(xdbxinit) Xchar *xdbxinit; X{ X FILE *fp; X char s[LINESIZ]; X X if (strcmp(xdbxinit, "") == NULL) X return; X if (fp = fopen(xdbxinit, "r")) { X while (fgets(s, LINESIZ, fp)) { X send_command(s); X AppendDialogText(s); X Prompt = False; X while (!Prompt) X read_dbx(); X } X close(fp); X } X} X X/* X * This routine is called after getting the first dbx prompt. X * > check the use list to create a list of directories for searching X * source files. X * > ask dbx for the source file and display it if it exists. X * > open the command initialization file and executed the commands; X * if Tstartup is true, remove the initialization file. X */ Xvoid debug_init() X{ X static visited = False; X X if (!visited) { X visited = True; X dbx_init(xdbxinit); X if (Tstartup) X unlink(xdbxinit); X strcpy(xdbxinit, ""); X } X} X X/* X * This is a callback procedure invoked everytime when input is pending X * on the file descriptor to dbx. X * o reads all the data available on the file descriptor line by line X * into local variable 'string' and global variable 'output'. X * 'output' records the entire dbx output whereas 'string' records X * only the data read in this invocation of read_dbx(). X * o in Echo mode, the contents in 'string' is edited by filter() X * before it gets displayed on the dialog window. X * o once the dbx prompt is read, calls parse() to analyse the dbx output X * and take appropriate action. X */ X/* ARGSUSED */ Xvoid read_dbx(master, source, id) XXtPointer master; Xint *source; XXtInputId *id; X{ X static char *output = NULL; /* buffer for dbx output */ X static char *next_string = NULL; X static char *command; X char *string = NULL; X char s[LINESIZ]; X Boolean more; X X more = True; X while (more) { X Prompt = False; X /* keep reading until no more or until prompt arrives */ X while (more = fgets(s, LINESIZ, dbxfp) && !Prompt) { X if (debug) X fprintf(stderr, "=>%s", s); X /* receive prompt? */ X if (strncmp(s, dbxprompt, strlen(dbxprompt)) == NULL) { X Prompt = True; X /* more stuff behind prompt? */ X if (s[strlen(dbxprompt)]) X /* remember it */ X next_string = XtNewString(s+strlen(dbxprompt)); X /* destroy contents */ X strcpy(s, ""); X } X string = concat(string, s); X strcpy(s, ""); X } X output = concat(output, string); X command = get_command(); X if (Echo) { X filter(string, output, command); X if (Prompt) AppendDialogText(xdbxprompt); X } X if (string) { X XtFree(string); X string = NULL; X } X if (next_string) { X string = concat(string, next_string); X XtFree(next_string); X next_string = NULL; X } X if (Prompt) { X parse(output, command); X delete_command(); X XtFree(output); X output = NULL; X } X } X} X X/* Write string s to dbx, and flush the output. */ X Xvoid write_dbx(s) Xchar *s; X{ X fputs(s, dbxfp); X fflush(dbxfp); X} X X/* Sends a command to dbx and read the corresponding output, directly X * invoking the Xt input procedure, read_dbx(). X */ Xvoid query_dbx(command) Xchar *command; X{ X write_dbx(command); X insert_command(command); X X Echo = False; X Prompt = False; X while (!Prompt) X read_dbx(); X X Parse = True; /* Always reset Parse and Echo to True */ X Echo = True; X} END_OF_FILE if test 5682 -ne `wc -c <'dbx.c'`; then echo shar: \"'dbx.c'\" unpacked with wrong size! fi # end of 'dbx.c' fi if test -f 'mips_regex.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'mips_regex.h'\" else echo shar: Extracting \"'mips_regex.h'\" \(5442 characters\) sed "s/^X//" >'mips_regex.h' <<'END_OF_FILE' X/***************************************************************************** X * X * xdbx - X Window System interface to the dbx debugger X * X * Copyright 1989 The University of Texas at Austin X * Copyright 1990 Microelectronics and Computer Technology Corporation X * X * Permission to use, copy, modify, and distribute this software and its X * documentation for any purpose and without fee is hereby granted, X * provided that the above copyright notice appear in all copies and that X * both that copyright notice and this permission notice appear in X * supporting documentation, and that the name of The University of Texas X * and Microelectronics and Computer Technology Corporation (MCC) not be X * used in advertising or publicity pertaining to distribution of X * the software without specific, written prior permission. The X * University of Texas and MCC makes no representations about the X * suitability of this software for any purpose. It is provided "as is" X * without express or implied warranty. X * X * THE UNIVERSITY OF TEXAS AND MCC DISCLAIMS ALL WARRANTIES WITH REGARD TO X * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND X * FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF TEXAS OR MCC BE LIABLE FOR X * ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER X * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF X * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN X * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. X * X * Author: Po Cheung X * Created: November 24, 1989 X * X *****************************************************************************/ X X/* mips_regex.h: X * X * Regular expression pattern matching for dbx on DECStation. X * X * The reg_token array indicates the register no. for each token type. X * reg_token[0] : message X * reg_token[1] : stop number X * reg_token[2] : function name X * reg_token[3] : line number X * reg_token[4] : file name X * reg_token[5] : display command output X */ X X#define TK_MESG 0 X#define TK_STOP 1 X#define TK_FUNC 2 X#define TK_LINE 3 X#define TK_FILE 4 X#define TK_DISP 5 X X#define O_EXEC 0 X#define O_DONE 1 X#define O_STOPAT 2 X#define O_STOPIN 3 X#define O_UPDOWN 4 X#define O_FUNC 4 X#define O_BELL 5 X#define O_LIST 6 X#define O_FILE 7 X#define O_SEARCH 8 X#define O_PRINT 9 X#define O_DEBUG 10 X X#define C_ANY -1 X#define C_EXEC 0 X#define C_STOPAT 1 X#define C_STOPIN 2 X#define C_UPDOWN 3 X#define C_DELETE 4 X#define C_FUNC 5 X#define C_FILE 6 X#define C_USE 7 X#define C_LIST 8 X#define C_SEARCH 9 X#define C_PRINT 10 X#define C_STATUS 11 X X Xstatic PatternRec output_pattern[] = { X /* exec */ X {"\\(.*\n\\)*\\(\\(\\(\\(\[[0-9]+\\] \\)?\\(stopped at \\)?\\)\\|Bus error \ X\\|Segmentation fault \\|Interrupt \\)?\\[\\([^ ]+\\):\\([0-9]+\\).*\\]\\).*\n", X NULL, X {2, -1, 7, 8, -1, -1} X }, X /* done */ X {"\\(.*\n\\)*Program terminated normally\n", X NULL, X {-1, -1, -1, -1, -1, -1} X }, X /* stop at */ X {"\\[\\([0-9]+\\)\\] stop at \\(\"\\([^ ]+\\)\":\\)?\\([0-9]+\\)\n", X NULL, X {-1, 1, -1, 4, 3, -1} X }, X /* stop in */ X {"\\(\\[.*\\]\n\\)*\\[\\([0-9]+\\)\\] stop in \\([^ ]+\\)\n", X NULL, X {-1, 2, 3, -1, -1, -1} X }, X /* up, down, func */ X {"\\(.*\n\\)*\\([^ ]+\\):[ ]*\\([0-9]+\\).*\n", X NULL, X {2, -1, 2, 3, -1, -1} X }, X /* bell */ X {"\n\\(not that many levels\\|program not active\\|program is not active\\|\ Xcannot read register unless program is active\\|cannot dump unless program is \ Xactive\\)\n", X NULL, X {-1, -1, -1, -1, -1, -1} X }, X /* list */ X {"[ ]*\\([0-9]+\\).*\n", X NULL, X {-1, -1, -1, 1, -1, -1} X }, X /* file */ X {"\\([^ ]+\\)\n", X NULL, X {-1, -1, -1, -1, 1, -1} X }, X /* search */ X {"[ ]*\\([0-9]+\\).*\n", X NULL, X {-1, -1, -1, 1, -1, -1} X }, X /* print */ X {"\\(.+\n\\(.*\n\\)*\\)", X NULL, X { 1, -1, -1, -1, -1, -1} X }, X /* dbx init */ X {"\\(.*\n\\)*.*\\(dbx version .*\nType 'help' for help.\nreading symbolic \ Xinformation ...\n\\)\\(\nwarning: .*\n\\)?\\([^ ]+\\):[ ]*\\([0-9]+\\).*\n", X NULL, X {-1, -1, 4, 5, -1, -1} X }, X NULL X}; X Xstatic PatternRec command_pattern[] = { X {"[ ]*\\(run\\|r\\|cont\\|c\\|next\\|n\\|step\\|s\\|return\\)\\( \\|\n\\)", X NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*\\(stop\\|st\\)[ ]+at[ ]+[0-9]+", NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*\\(stop\\|st\\)[ ]+in[ ]+[^ ]+", NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*\\(up\\|down\\)", NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*\\(delete\\|d\\)", NULL, {-1, -1, -1, 1, -1, -1}}, X {"[ ]*func[ ]*\\([^ ]+\\)[ ]*", NULL, {-1, -1, 1, -1, -1, -1}}, X {"[ ]*file[ ]*", NULL, {-1, -1, -1, -1, 1, -1}}, X {"[ ]*use[ ]*", NULL, {-1, -1, -1, -1, 1, -1}}, X {"[ ]*list[ ]*", NULL, {-1, -1, -1, -1, 1, -1}}, X {"[ ]*\\(/\\|\?\\)", NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*\\(print\\|p\\)[ ]*[^ ]+", NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*status[ ]*", NULL, {-1, -1, -1, -1, 1, -1}}, X NULL X}; END_OF_FILE if test 5442 -ne `wc -c <'mips_regex.h'`; then echo shar: \"'mips_regex.h'\" unpacked with wrong size! fi # end of 'mips_regex.h' fi if test -f 'patchlevel.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'patchlevel.h'\" else echo shar: Extracting \"'patchlevel.h'\" \(21 characters\) sed "s/^X//" >'patchlevel.h' <<'END_OF_FILE' X#define PATCHLEVEL 2 END_OF_FILE if test 21 -ne `wc -c <'patchlevel.h'`; then echo shar: \"'patchlevel.h'\" unpacked with wrong size! fi # end of 'patchlevel.h' fi if test -f 'signals.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'signals.c'\" else echo shar: Extracting \"'signals.c'\" \(3952 characters\) sed "s/^X//" >'signals.c' <<'END_OF_FILE' X/***************************************************************************** X * X * xdbx - X Window System interface to the dbx debugger X * X * Copyright 1989 The University of Texas at Austin X * Copyright 1990 Microelectronics and Computer Technology Corporation X * X * Permission to use, copy, modify, and distribute this software and its X * documentation for any purpose and without fee is hereby granted, X * provided that the above copyright notice appear in all copies and that X * both that copyright notice and this permission notice appear in X * supporting documentation, and that the name of The University of Texas X * and Microelectronics and Computer Technology Corporation (MCC) not be X * used in advertising or publicity pertaining to distribution of X * the software without specific, written prior permission. The X * University of Texas and MCC makes no representations about the X * suitability of this software for any purpose. It is provided "as is" X * without express or implied warranty. X * X * THE UNIVERSITY OF TEXAS AND MCC DISCLAIMS ALL WARRANTIES WITH REGARD TO X * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND X * FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF TEXAS OR MCC BE LIABLE FOR X * ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER X * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF X * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN X * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. X * X * Author: Po Cheung X * Created: March 10, 1989 X * X *****************************************************************************/ X X/* signals.c X * X * Signal handling for xdbx and dbx. X * X * kill_hanlder(): For SIGINT, SIGQUIT, SIGILL, SIGBUS, SIGTERM X * print error message and exit with signal status. X * quit_handler(): SIGCHLD, wait for dbx to die and exit gracefully. X * stop_handler(): SIGTSTP, stop dbx process, then stop own process. X * cont_handler(): SIGCONT, continue dbx process. X * trap_signals(): Install signal handlers. X */ X X#include <signal.h> X#include <sys/wait.h> X#include "global.h" X X/* Kill the dbx child process and then exits. */ X/* ARGSUSED */ Xstatic void kill_handler(sig, code, scp, addr) X int sig, code; X struct sigcontext *scp; X char *addr; X{ X if (FalseSignal) { X FalseSignal = FALSE; X return; X } X kill(dbxpid, SIGKILL); X switch (sig) { X case SIGINT : fprintf(stderr, "Interrupt\n"); break; X case SIGQUIT : fprintf(stderr, "Quit\n"); break; X case SIGILL : fprintf(stderr, "Illegal instruction\n"); break; X case SIGBUS : fprintf(stderr, "Bus error\n"); break; X case SIGSEGV : fprintf(stderr, "Segmentation violation\n"); break; X case SIGTERM : fprintf(stderr, "Soft kill\n"); break; X } X exit(sig); X} X X Xstatic void quit_handler() X{ X union wait status; X X /* wait for the child to report its status; if the child has died, X * exit gracefully. X */ X wait3(&status, WNOHANG|WUNTRACED, NULL); X if ((WIFEXITED(status) || WIFSIGNALED(status)) && !WIFSTOPPED(status)) { X exit(1); X } X} X X Xstatic void stop_handler() X{ X if (dbxpid) X kill(dbxpid, SIGSTOP); /* stop dbx process */ X kill(0, SIGSTOP); /* stop own process */ X} X X Xstatic void cont_handler() X{ X if (dbxpid) { X sleep(1); /* we need this */ X kill(dbxpid, SIGCONT); /* continue dbx after stop */ X } X} X X X/* X * Trap signals to xdbx so that the child process can be handled properly. X */ Xvoid trap_signals() X{ X signal(SIGINT, kill_handler); X signal(SIGQUIT, kill_handler); X signal(SIGILL, kill_handler); X signal(SIGBUS, kill_handler); X signal(SIGSEGV, kill_handler); X signal(SIGTERM, kill_handler); X X signal(SIGTSTP, stop_handler); /* stop signal from keyboard */ X signal(SIGCONT, cont_handler); /* continue after stop */ X signal(SIGCHLD, quit_handler); /* child status has changed */ X} END_OF_FILE if test 3952 -ne `wc -c <'signals.c'`; then echo shar: \"'signals.c'\" unpacked with wrong size! fi # end of 'signals.c' fi if test -f 'sun_regex.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'sun_regex.h'\" else echo shar: Extracting \"'sun_regex.h'\" \(5571 characters\) sed "s/^X//" >'sun_regex.h' <<'END_OF_FILE' X/***************************************************************************** X * X * xdbx - X Window System interface to the dbx debugger X * X * Copyright 1989 The University of Texas at Austin X * Copyright 1990 Microelectronics and Computer Technology Corporation X * X * Permission to use, copy, modify, and distribute this software and its X * documentation for any purpose and without fee is hereby granted, X * provided that the above copyright notice appear in all copies and that X * both that copyright notice and this permission notice appear in X * supporting documentation, and that the name of The University of Texas X * and Microelectronics and Computer Technology Corporation (MCC) not be X * used in advertising or publicity pertaining to distribution of X * the software without specific, written prior permission. The X * University of Texas and MCC makes no representations about the X * suitability of this software for any purpose. It is provided "as is" X * without express or implied warranty. X * X * THE UNIVERSITY OF TEXAS AND MCC DISCLAIMS ALL WARRANTIES WITH REGARD TO X * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND X * FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF TEXAS OR MCC BE LIABLE FOR X * ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER X * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF X * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN X * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. X * X * Author: Po Cheung X * Created: March 10, 1989 X * X *****************************************************************************/ X X/* sun_regex.h: X * X * Regular expression pattern matching for Sun dbx. X * X * The reg_token array indicates the register no. for each token type. X * reg_token[0] : message X * reg_token[1] : stop number X * reg_token[2] : function name X * reg_token[3] : line number X * reg_token[4] : file name X * reg_token[5] : display command output X */ X X#define TK_MESG 0 X#define TK_STOP 1 X#define TK_FUNC 2 X#define TK_LINE 3 X#define TK_FILE 4 X#define TK_DISP 5 X X#define O_EXEC 0 X#define O_DONE 1 X#define O_STOPAT 2 X#define O_STOPIN 3 X#define O_UPDOWN 4 X#define O_BELL 5 X#define O_LIST 6 X#define O_SEARCH 6 X#define O_FILE 7 X#define O_PRINT 8 X#define O_DEBUG 9 X X#define C_ANY -1 X#define C_EXEC 0 X#define C_STOPAT 1 X#define C_STOPIN 2 X#define C_UPDOWN 3 X#define C_DELETE 4 X#define C_FUNC 5 X#define C_FILE 6 X#define C_DEBUG 7 X#define C_CD 8 X#define C_USE 9 X#define C_PWD 10 X#define C_LIST 11 X#define C_SEARCH 12 X#define C_DISPLAY 13 X#define C_PRINT 14 X Xstatic PatternRec output_pattern[] = { X /* exec */ X {"\\(.*\n\\)*.*\\(\\(stopped\\|Bus error\\|Segmentation fault\\|\ XInterrupt\\|signal.*\\) in \\([^ ]+\\) at line \\([0-9]+\\)\\( in file\ X \"\\([^ ]+\\)\"\\)?\\)\n\\(.*\n\\)?\\(\\(.*\n\\)*\\)", X NULL, X {2, -1, 4, 5, 7, 9} X }, X /* done */ X {"\\(.*\n\\)*\\(execution completed\\|program exited with [0-9]+\\)", X NULL, X {-1, -1, -1, -1, -1, -1} X }, X /* stop at */ X {"(\\([0-9]+\\)) stop at \\(\"\\([^ ]+\\)\":\\)?\\([0-9]+\\)\n", X NULL, X {-1, 1, -1, 4, 3, -1} X }, X /* stop in */ X {"(\\([0-9]+\\)) stop in \\([^ ]+\\)\n", X NULL, X {-1, 1, 2, -1, -1, -1} X }, X /* up, down */ X {"\\(.*\n\\)?\\(Current function is \\([^ ]+\\)\n\\)\\([ ]*\\([0-9]+\\).*\n\\)", X NULL, X {2, -1, 3, 5, -1, -1} X }, X /* bell */ X {"\\(Already at the \\(top\\|bottom\\) call level\n\\|\ XNo active stack frames\n\\|no program to run\n\\|no process to run\n\\|\ Xprogram is not active\n\\|can't continue execution\n\\|\ X.*\ncan't write to process.*\n\\|\ X\\(Top\\|End\\)-of-file; did not find search string:.*\n\\)", X NULL, X {-1, -1, -1, -1, -1} X }, X /* list, search */ X {"[ ]*\\([0-9]+\\).*\n", X NULL, X {-1, -1, -1, 1, -1, -1} X }, X /* file */ X {"\\(\\([^ ]*\\)\\|No current source file\\)\n", X NULL, X {-1, -1, -1, -1, 2, -1} X }, X /* print, display */ X {"\\(warning: .*\n\\)?\\(\\(.*\\) = .*\n\\(.*\n\\)*\\)", X NULL, X { 3, -1, -1, -1, -1, 2} X }, X /* debug */ X {"Reading symbolic information...\nRead [0-9]+ symbols\n", X NULL, X { -1, -1, -1, -1, -1, -1} X }, X NULL X}; X X Xstatic PatternRec command_pattern[] = { X {"[ ]*\\(run\\|rerun\\|cont\\|next\\|step\\)\\( [0-9]+\\)?[ ]*", X NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*stop[ ]+at[ ]+\\(\"[^ ]+\":\\)?[0-9]+[ ]*\n", X NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*stop[ ]+in[ ]+[^ ]+[ ]*\n", NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*\\(up\\|down\\)[ ]*\\( [0-9]+\\)?[ ]*\n", X NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*\\(delete\\|d\\)[ ]+\\(all\\|[0-9]+\\)", X NULL, {-1, -1, -1, 1, -1, -1}}, X {"[ ]*func[ ]+\\([^ ]+\\)[ ]*\n", NULL, {-1, -1, 1, -1, -1, -1}}, X {"[ ]*file[ ]*\\([^ ]+\\)?[ ]*\n", NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*debug[ ]*[^ ]+[ ]*\n", NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*cd[ ]*[^ ]+[ ]*", NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*use[ ]*", NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*pwd[ ]*\n", NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*list[ ]*", NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*\\(/\\|\?\\)[ ]*", NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*\\(un\\)?display[ ]*[^ ]+[ ]*", NULL, {-1, -1, -1, -1, -1, -1}}, X {"[ ]*print[ ]*[^ ]+[ ]*", NULL, {-1, -1, -1, -1, -1, -1}}, X NULL X}; END_OF_FILE if test 5571 -ne `wc -c <'sun_regex.h'`; then echo shar: \"'sun_regex.h'\" unpacked with wrong size! fi # end of 'sun_regex.h' fi if test -f 'utils.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'utils.c'\" else echo shar: Extracting \"'utils.c'\" \(3943 characters\) sed "s/^X//" >'utils.c' <<'END_OF_FILE' X/***************************************************************************** X * X * xdbx - X Window System interface to the dbx debugger X * X * Copyright 1989 The University of Texas at Austin X * Copyright 1990 Microelectronics and Computer Technology Corporation X * X * Permission to use, copy, modify, and distribute this software and its X * documentation for any purpose and without fee is hereby granted, X * provided that the above copyright notice appear in all copies and that X * both that copyright notice and this permission notice appear in X * supporting documentation, and that the name of The University of Texas X * and Microelectronics and Computer Technology Corporation (MCC) not be X * used in advertising or publicity pertaining to distribution of X * the software without specific, written prior permission. The X * University of Texas and MCC makes no representations about the X * suitability of this software for any purpose. It is provided "as is" X * without express or implied warranty. X * X * THE UNIVERSITY OF TEXAS AND MCC DISCLAIMS ALL WARRANTIES WITH REGARD TO X * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND X * FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF TEXAS OR MCC BE LIABLE FOR X * ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER X * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF X * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN X * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. X * X * Author: Po Cheung X * Created: March 10, 1989 X * X *****************************************************************************/ X X/* utils.c X * X * Contain common routines used by other functions. X * X * TextGetLastPos(): Get the last insertion position of text. X * TextPositionToLine(): Return text position give a line number. X * LineToStopNo(): Return the stop number given a line number. X * DisableWindowResize(): Fix the size of a window inside vpane. X * bell(): Ring the bell. X * concat(): Concatenate two strings together X */ X X#include "global.h" X XXawTextPosition TextGetLastPos(w) X Widget w; X{ X TextWidget ctx = (TextWidget) w; X return (ctx->text.lastPos); X} X X/* X * Get the line number where the caret is. X */ Xint TextPositionToLine(pos) XXawTextPosition pos; X{ X int line; X X if (displayedFile) { X if (pos >= displayedFile->linepos[displayedFile->topline]) { X for (line = displayedFile->topline; X pos > displayedFile->linepos[line]; line++); X return (pos == displayedFile->linepos[line] ? line : line-1); X } X else { X for (line = 1; pos > displayedFile->linepos[line]; line++); X return (pos == displayedFile->linepos[line] ? line : line-1); X } X } X else X return 0; X} X X/* X * Return the stop number associated with a given line number. X * Return 0 if stop number not found. X */ Xint LineToStop_no(line) Xint line; X{ X int i; X X for (i=1; i <= nstops; i++) X if (stops[i].line == line && stops[i].file && displayedFile && X strcmp(stops[i].file, displayedFile->pathname) == NULL) { X return i; X } X return 0; X} X X Xvoid DisableWindowResize(w) XWidget w; X{ X Arg args[MAXARGS]; X Cardinal n; X Dimension height; X X n = 0; X XtSetArg(args[n], XtNheight, &height); n++; X XtGetValues(w, args, n); X XawPanedSetMinMax(w, height, height); X XawPanedAllowResize(w, False); X} X X Xvoid bell(volume) Xint volume; X{ X XBell(XtDisplay(toplevel), volume); X} X X/* append string s2 to end of string s1 and return the result */ X Xchar *concat(s1, s2) Xchar *s1, *s2; X{ X if (s2) { X if (s1 == NULL) { X s1 = XtMalloc((strlen(s2)+1)*sizeof(char)); X strcpy(s1, s2); X } X else { X s1 = XtRealloc(s1, strlen(s1)+strlen(s2)+2); X strcat(s1, s2); X } X } X else X s1 = NULL; X return (s1); X} END_OF_FILE if test 3943 -ne `wc -c <'utils.c'`; then echo shar: \"'utils.c'\" unpacked with wrong size! fi # end of 'utils.c' fi if test -f 'windows.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'windows.c'\" else echo shar: Extracting \"'windows.c'\" \(6616 characters\) sed "s/^X//" >'windows.c' <<'END_OF_FILE' X/***************************************************************************** X * X * xdbx - X Window System interface to dbx X * X * Copyright 1989, 1990 The University of Texas at Austin X * X * Permission to use, copy, modify, and distribute this software and its X * documentation for any purpose and without fee is hereby granted, X * provided that the above copyright notice appear in all copies and that X * both that copyright notice and this permission notice appear in X * supporting documentation, and that the name of The University of Texas X * not be used in advertising or publicity pertaining to distribution of X * the software without specific, written prior permission. The X * University of Texas makes no representations about the suitability of X * this software for any purpose. It is provided "as is" without express X * or implied warranty. X * X * THE UNIVERSITY OF TEXAS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS X * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND X * FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF TEXAS BE LIABLE FOR ANY X * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER X * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF X * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN X * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. X * X * Author: Po Cheung, The University of Texas at Austin X * Created: March 10, 1989 X * X *****************************************************************************/ X X/* windows.c: X * X * CreateTitleBar() : Create title bar. X * CreateFileLabel() : Create file label in file window. X * CreateLineLabel() : Create line label in file window. X * CreateFileWindow() : Create file window. X * CreateMessageWindow() : Create message window. X * CreateDisplayWindow() : Create display window. X * CreateSubWindows() : Create the subwindows. X * UpdateFileLabel() : Update file label. X * UpdateLineLabel() : Update line label. X * UpdateMessageWindow() : Update message window. X */ X X#include "global.h" X XWidget fileWindow, /* parent of fileLabel and lineLabel */ X messageWindow, /* window for displaying messages */ X separator, /* separator in vpane */ X displayWindow; /* area for displaying variables */ X Xstatic Widget fileLabel, /* filename of displayed text */ X lineLabel; /* line number of caret position */ X X/* X * Private routines for creating various subwindows for xdbx. X */ X Xstatic void CreateFileLabel(parent) XWidget parent; X{ X Arg args[MAXARGS]; X Cardinal n; X X n = 0; X XtSetArg(args[n], XtNlabel, (XtArgVal) "No Source File"); n++; X XtSetArg(args[n], XtNborderWidth, (XtArgVal) 0); n++; X fileLabel = XtCreateManagedWidget("fileLabel", labelWidgetClass, X parent, args, n); X} X Xstatic void CreateLineLabel(parent) XWidget parent; X{ X Arg args[MAXARGS]; X Cardinal n; X X n = 0; X XtSetArg(args[n], XtNlabel, (XtArgVal) ""); n++; X XtSetArg(args[n], XtNborderWidth, (XtArgVal) 0); n++; X XtSetArg(args[n], XtNfromHoriz, (XtArgVal) fileLabel); n++; X XtSetArg(args[n], XtNhorizDistance, (XtArgVal) 0); n++; X lineLabel = XtCreateManagedWidget("lineLabel", labelWidgetClass, X parent, args, n); X} X Xstatic void CreateFileWindow(parent) XWidget parent; X{ X Arg args[MAXARGS]; X Cardinal n; X X n = 0; X XtSetArg(args[n], XtNshowGrip, (XtArgVal) False); n++; X fileWindow = XtCreateManagedWidget("fileWindow", formWidgetClass, X parent, args, n); X CreateFileLabel(fileWindow); X CreateLineLabel(fileWindow); X} X Xstatic void CreateMessageWindow(parent) XWidget parent; X{ X Arg args[MAXARGS]; X Cardinal n; X X n = 0; X XtSetArg(args[n], XtNlabel, (XtArgVal) ""); n++; X XtSetArg(args[n], XtNjustify, (XtArgVal) XtJustifyLeft); n++; X XtSetArg(args[n], XtNshowGrip, (XtArgVal) False); n++; X messageWindow = XtCreateManagedWidget("messageWindow", labelWidgetClass, X parent, args, n); X} X X/* Create a window for displaying variables as specified by the display X * command in dbx. X */ Xstatic void CreateDisplayWindow(parent) XWidget parent; X{ X Arg args[MAXARGS]; X Cardinal n; X X n = 0; X XtSetArg(args[n], XtNborderWidth, (XtArgVal) 0); n++; X XtSetArg(args[n], XtNmin, (XtArgVal) 2); n++; X XtSetArg(args[n], XtNmax, (XtArgVal) 2); n++; X XtSetArg(args[n], XtNshowGrip, (XtArgVal) False); n++; X separator = XtCreateWidget("", labelWidgetClass, parent, args, n); X X n = 0; X XtSetArg(args[n], XtNeditType, (XtArgVal) XawtextRead); n++; X displayWindow = XtCreateWidget("displayWindow", asciiTextWidgetClass, X parent, args, n); X X if (app_resources.displayWindow) { X XtManageChild(separator); X XtManageChild(displayWindow); X } X} X X X/* PUBLIC ROUTINES */ X/* X * Top level function for creating all the xdbx subwindows. X */ Xvoid CreateSubWindows(parent) XWidget parent; X{ X Widget vpane; /* outer widget containing various subwindows */ X Arg args[MAXARGS]; X Cardinal n; X X n = 0; X vpane = XtCreateManagedWidget("vpane", panedWidgetClass, parent, args, n); X X CreateFileWindow(vpane); X CreateSourceWindow(vpane); X CreateMessageWindow(vpane); X CreateCommandPanel(vpane); X CreateDialogWindow(vpane); X#ifndef BSD X CreateDisplayWindow(vpane); X#endif X} X X/* X * Routines for updating fields for the filename and line number X * in the file window, and the execution status in the message window. X */ X Xvoid UpdateFileLabel(string) Xchar *string; X{ X Arg args[MAXARGS]; X Cardinal n; X X n = 0; X XtSetArg(args[n], XtNlabel, (XtArgVal) string); n++; X XtSetValues(fileLabel, args, n); X} X Xvoid UpdateLineLabel(line) XCardinal line; X{ X Arg args[MAXARGS]; X Cardinal n; X char string[10]; X X n = 0; X if (line > 0) X sprintf(string, "%d", line); X else X strcpy(string, ""); X XtSetArg(args[n], XtNlabel, (XtArgVal) string); n++; X XtSetValues(lineLabel, args, n); X} X Xvoid UpdateMessageWindow(format, arg) Xchar *format, *arg; X{ X char message[LINESIZ], string[LINESIZ]; X Arg args[MAXARGS]; X Cardinal n; X X strcpy(message, " "); X sprintf(string, format, arg); X strcat(message, string); X n = 0; X XtSetArg(args[n], XtNlabel, (XtArgVal) message); n++; X XtSetValues(messageWindow, args, n); X} X Xvoid ClearMessageWindow() X{ X Arg args[MAXARGS]; X Cardinal n; X X n = 0; X XtSetArg(args[n], XtNlabel, (XtArgVal) ""); n++; X XtSetValues(messageWindow, args, n); X} X END_OF_FILE if test 6616 -ne `wc -c <'windows.c'`; then echo shar: \"'windows.c'\" unpacked with wrong size! fi # end of 'windows.c' fi echo shar: End of archive 1 \(of 7\). cp /dev/null ark1isdone MISSING="" for I in 1 2 3 4 5 6 7 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 7 archives. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 dan ---------------------------------------------------- O'Reilly && Associates argv@sun.com / argv@ora.com Opinions expressed reflect those of the author only.