home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 3 / 3640 < prev    next >
Text File  |  1991-07-16  |  41KB  |  1,170 lines

  1. Newsgroups: alt.sources
  2. From: jtsillas@sprite.ma30.bull.com (James Tsillas)
  3. Subject: mxgdb Part 2/9
  4. Date: 16 Jul 91 13:02:24
  5. Message-ID: <JTSILLAS.91Jul16130224@sprite.ma30.bull.com>
  6.  
  7.  
  8.  
  9. ---- Cut Here and feed the following to sh ----
  10. #!/bin/sh
  11. # this is mxgdb.02 (part 2 of a multipart archive)
  12. # do not concatenate these parts, unpack them in order with /bin/sh
  13. # file mxgdb/calldbx.c continued
  14. #
  15. if test ! -r _shar_seq_.tmp; then
  16.     echo 'Please unpack part 1 first!'
  17.     exit 1
  18. fi
  19. (read Scheck
  20.  if test "$Scheck" != 2; then
  21.     echo Please unpack part "$Scheck" next!
  22.     exit 1
  23.  else
  24.     exit 0
  25.  fi
  26. ) < _shar_seq_.tmp || exit 1
  27. if test ! -f _shar_wnt_.tmp; then
  28.     echo 'x - still skipping mxgdb/calldbx.c'
  29. else
  30. echo 'x - continuing file mxgdb/calldbx.c'
  31. sed 's/^X//' << 'SHAR_EOF' >> 'mxgdb/calldbx.c' &&
  32. X *    call dbx.
  33. X *
  34. X *    open_master():    Open the master side of pty.
  35. X *    open_slave():     Open the slave side of pty.
  36. X *    calldbx():     Invoke dbx.
  37. X */
  38. X
  39. #include    <termio.h>
  40. #include    "global.h"
  41. X
  42. #ifdef SYSV 
  43. #ifdef SCO
  44. #  include        <sys/fcntl.h>
  45. #endif
  46. #endif
  47. X
  48. FILE               *dbxfp = NULL;        /* file pointer to dbx */
  49. int                dbxpid = 0;        /* dbx process id */
  50. #ifdef SYSV 
  51. char            dbxfbuf[BUFSIZ];        
  52. #endif
  53. static int    dbxInputId;        /* dbx input id */
  54. static char     pty[11] = "/dev/pty??";    /* master side of pseudo-terminal */
  55. static char     tty[11] = "/dev/tty??";    /* slave side of pseudo-terminal */
  56. extern char    *dbxprompt;
  57. X
  58. /*
  59. X *  Xdbx talks to dbx through a pseudo terminal which is a pair of master
  60. X *  and slave devices: /dev/pty?? and /dev/tty??, where ?? goes from p0 to
  61. X *  sf (system dependent).  The pty is opened for both read and write.
  62. X */
  63. static int open_master()
  64. {
  65. X    int  i, master; 
  66. X    char c;
  67. X    
  68. #ifndef SCO
  69. X    for (c='p'; c<'t'; c++) {
  70. X    for (i=0; i<16; i++) {
  71. #else
  72. X    c = 'p';
  73. X    for (i=0; i<8; i++) {
  74. #endif
  75. X        pty[8] = c;
  76. X        pty[9] = "0123456789abcdef"[i];
  77. X        if ((master = open(pty, O_RDWR)) >= 0) 
  78. X        return (master); 
  79. X    }
  80. #ifndef SCO
  81. X    }
  82. #endif
  83. X
  84. #ifdef GDB
  85. X    fprintf(stderr, "xxgdb: all ptys in use\n");
  86. #else
  87. X    fprintf(stderr, "xdbx: all ptys in use\n");
  88. #endif
  89. X    exit(1);
  90. }
  91. X
  92. static int open_slave()
  93. {
  94. X    int slave;
  95. X
  96. X    tty[8] = pty[8];
  97. X    tty[9] = pty[9];
  98. X    if ((slave = open(tty, O_RDWR)) >= 0)
  99. X    return (slave);
  100. X    fprintf(stderr, "open: cannot open slave pty %s", tty);
  101. X    exit(1);
  102. }
  103. X
  104. /* ARGSUSED */
  105. void calldbx(argc, argv)
  106. int argc;
  107. char *argv[];
  108. {
  109. X    struct termio Termio;
  110. X    int        master;        /* file descriptor of master pty */
  111. X    int        slave;         /* file descriptor of slave pty */
  112. X    int          fd;             /* file descriptor of controlling tty */
  113. X    int          pid;            /* process id */
  114. X    int          pgrp;            /* process group id */
  115. X    char       *debugger;         /* name of executable debugger */
  116. X    char      errmsg[LINESIZ];
  117. X
  118. #ifdef GDB    /* for GDB, we use XXGDB_DEBUGGER instead */
  119. X    debugger = (char *) getenv("XXGDB_DEBUGGER");    /* first looks up env var */
  120. #else
  121. X    debugger = (char *) getenv("DEBUGGER");    /* first looks up env var */
  122. #endif
  123. X    if (debugger == NULL)
  124. X    debugger = XtNewString(DEBUGGER);
  125. X  
  126. X    /* construct dbx prompt string based on the name of debugger invoked */
  127. X    if (dbxprompt == NULL) {
  128. X    dbxprompt = XtMalloc((4+strlen(debugger)) * sizeof(char));
  129. X    sprintf(dbxprompt, "(%s) ", debugger);
  130. X    }
  131. X  
  132. X    /*
  133. X     * Clear controlling tty.  Do this now, so that open_slave and
  134. X     * open_master will cause the selected pty to become the
  135. X     * controlling tty.
  136. X     */
  137. X    if ((fd = open("/dev/tty", O_RDWR)) > 0) {
  138. #ifndef SYSV 
  139. X    ioctl(fd, TIOCNOTTY, 0);
  140. #endif /* SYSV */
  141. X    close(fd);
  142. X    }
  143. X
  144. X    master = open_master();
  145. X
  146. #ifndef SYSV 
  147. X    slave = open_slave();
  148. #endif
  149. X
  150. X    dbxpid = fork();
  151. X    if (dbxpid == -1) {
  152. #ifdef GDB
  153. X    perror("xxgdb error: cannot fork process");
  154. #else
  155. X    perror("xdbx error: cannot fork process");
  156. #endif
  157. X    exit(1);
  158. X    }
  159. X    else if (dbxpid) { 
  160. X    /* 
  161. X     * Parent : close the slave side of pty
  162. X     *        close stdin and stdout
  163. X     *        set the dbx file descriptor to nonblocking mode
  164. X     *        open file pointer with read/write access to dbx
  165. X     *        set line buffered mode
  166. X     *        register dbx input with X
  167. X     */
  168. X    close(slave);
  169. X    close(0);
  170. X    close(1);
  171. X    fcntl(master, F_SETFL, FNDELAY);
  172. X        dbxfp = (FILE *)fdopen(master, "r+");
  173. X    setvbuf(dbxfp, dbxfbuf, _IONBF, BUFSIZ);
  174. X    dbxInputId = XtAppAddInput(app_context, master, XtInputReadMask, 
  175. X                   read_dbx, NULL);
  176. X    }
  177. X    else { 
  178. X    /* 
  179. X     * Child : close master side of pty
  180. X     *        redirect stdin, stdout, stderr of dbx to pty
  181. X     *       unbuffer output data from dbx
  182. X     *       exec dbx with arguments
  183. X     */
  184. X      
  185. #ifdef SYSV 
  186. X        setpgrp();
  187. X        slave = open_slave();
  188. #endif
  189. X    close(master);
  190. X
  191. X    /*
  192. X     * Modify local and output mode of slave pty
  193. X     */
  194. X
  195. X    ioctl(slave, TCGETA, &Termio);
  196. X    Termio.c_lflag &= ~ECHO;    /* No echo */
  197. X    Termio.c_oflag &= ~ONLCR;    /* Do not map NL to CR-NL on output */
  198. X    ioctl(slave, TCSETA, &Termio);
  199. X
  200. X    dup2(slave, 0);
  201. X    dup2(slave, 1);
  202. X    dup2(slave, 2);
  203. X    if (slave > 2)
  204. X        close(slave);
  205. X
  206. X    fcntl(1, F_SETFL, FAPPEND);
  207. X    setbuf(stdout, NULL);
  208. X
  209. X    /*
  210. X     * Set our process group to that of the terminal,
  211. X     * so we can change the group of the terminal.
  212. X     */
  213. X
  214. X    
  215. X
  216. #ifndef SYSV
  217. X    setpgrp(0, pgrp);
  218. X    /*
  219. X     * Now set the process group of the terminal and of us
  220. X     * to our process id.  This clears us from the control
  221. X     * of the other process group.
  222. X     */
  223. X    pid = getpid();
  224. X    ioctl(0, TIOCSPGRP, &pid);
  225. X    setpgrp(0, pid);
  226. #endif
  227. X
  228. X    argv[0] = debugger;
  229. X    execvp(debugger, argv);
  230. #ifdef GDB
  231. X    sprintf(errmsg, "xxgdb error: cannot exec %s", debugger);
  232. #else
  233. X    sprintf(errmsg, "xdbx error: cannot exec %s", debugger);
  234. #endif
  235. X    perror(errmsg);
  236. X    exit(1);
  237. X    }
  238. }
  239. SHAR_EOF
  240. echo 'File mxgdb/calldbx.c is complete' &&
  241. chmod 0664 mxgdb/calldbx.c ||
  242. echo 'restore of mxgdb/calldbx.c failed'
  243. Wc_c="`wc -c < 'mxgdb/calldbx.c'`"
  244. test 8040 -eq "$Wc_c" ||
  245.     echo 'mxgdb/calldbx.c: original size 8040, current size' "$Wc_c"
  246. rm -f _shar_wnt_.tmp
  247. fi
  248. # ============= mxgdb/bitmaps.h ==============
  249. if test -f 'mxgdb/bitmaps.h' -a X"$1" != X"-c"; then
  250.     echo 'x - skipping mxgdb/bitmaps.h (File already exists)'
  251.     rm -f _shar_wnt_.tmp
  252. else
  253. > _shar_wnt_.tmp
  254. echo 'x - extracting mxgdb/bitmaps.h (Text)'
  255. sed 's/^X//' << 'SHAR_EOF' > 'mxgdb/bitmaps.h' &&
  256. /* $Id: bitmaps.h,v 1.2 1991/06/26 18:42:06 jtsillas Exp $ */
  257. X
  258. /*****************************************************************************
  259. X *
  260. X *  xdbx - X Window System interface to the dbx debugger
  261. X *
  262. X *  Copyright 1989 The University of Texas at Austin
  263. X *  Copyright 1990 Microelectronics and Computer Technology Corporation
  264. X *
  265. X *  Permission to use, copy, modify, and distribute this software and its
  266. X *  documentation for any purpose and without fee is hereby granted,
  267. X *  provided that the above copyright notice appear in all copies and that
  268. X *  both that copyright notice and this permission notice appear in
  269. X *  supporting documentation, and that the name of The University of Texas
  270. X *  and Microelectronics and Computer Technology Corporation (MCC) not be 
  271. X *  used in advertising or publicity pertaining to distribution of
  272. X *  the software without specific, written prior permission.  The
  273. X *  University of Texas and MCC makes no representations about the 
  274. X *  suitability of this software for any purpose.  It is provided "as is" 
  275. X *  without express or implied warranty.
  276. X *
  277. X *  THE UNIVERSITY OF TEXAS AND MCC DISCLAIMS ALL WARRANTIES WITH REGARD TO
  278. X *  THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
  279. X *  FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF TEXAS OR MCC BE LIABLE FOR
  280. X *  ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
  281. X *  RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
  282. X *  CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  283. X *  CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  284. X *
  285. X *  Author:      Po Cheung
  286. X *  Created:       April 9, 1990
  287. X *
  288. X *****************************************************************************/
  289. X
  290. /*  bitmaps.h
  291. X *
  292. X *    Contain bitmap data for a 48x48 and a 64x64 xdbx icon, and the 
  293. X *    stop sign, execution arrow, up-down arrow, and bomb sign used 
  294. X *    in the source window.
  295. X */
  296. X
  297. /* bitmap data for 48x48 xdbx icon */
  298. X
  299. #define xdbx48_width 48
  300. #define xdbx48_height 48
  301. static char xdbx48_bits[] = {
  302. X   0xff, 0x0f, 0x00, 0x00, 0x00, 0xf0, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0xf0,
  303. X   0xfc, 0x3f, 0x00, 0x00, 0x00, 0x78, 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x3c,
  304. X   0xf8, 0x7f, 0x00, 0x02, 0x00, 0x3c, 0xf0, 0xff, 0x00, 0x02, 0x00, 0x1e,
  305. X   0xe0, 0xff, 0x01, 0x04, 0x00, 0x0f, 0xe0, 0xff, 0x01, 0x04, 0x80, 0x07,
  306. X   0xc0, 0xff, 0xe3, 0xff, 0xc0, 0x03, 0x80, 0xff, 0x1f, 0x01, 0xc7, 0x03,
  307. X   0x00, 0xff, 0x27, 0x01, 0xf8, 0x01, 0x00, 0xff, 0xcf, 0x60, 0xf0, 0x10,
  308. X   0x00, 0xfe, 0x1f, 0x90, 0xf8, 0x10, 0x00, 0xfc, 0x3f, 0x90, 0xbc, 0x08,
  309. X   0x00, 0xfc, 0x7f, 0x60, 0x3c, 0x07, 0x00, 0xfe, 0xff, 0x03, 0x1e, 0x02,
  310. X   0x00, 0xfe, 0xff, 0x04, 0x0f, 0x02, 0x00, 0xff, 0xff, 0x85, 0x07, 0x04,
  311. X   0x80, 0xff, 0xff, 0xc3, 0xc3, 0x04, 0x80, 0xdf, 0xff, 0xe7, 0x23, 0x05,
  312. X   0x84, 0x9f, 0xff, 0xef, 0x25, 0x09, 0xc8, 0x19, 0xff, 0xf7, 0xc4, 0x08,
  313. X   0xf0, 0x18, 0xfe, 0x7b, 0x03, 0x08, 0xc0, 0x1f, 0xfc, 0x3d, 0x00, 0x08,
  314. X   0xc0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xc0, 0x1f, 0x78, 0x7f, 0x00, 0x08,
  315. X   0xf0, 0x98, 0xbd, 0xff, 0x00, 0x08, 0xc8, 0x59, 0xde, 0xff, 0x61, 0x08,
  316. X   0x84, 0x5f, 0xef, 0xff, 0x91, 0x04, 0x80, 0x9f, 0xc7, 0xff, 0x93, 0x04,
  317. X   0x80, 0x9f, 0x87, 0xff, 0x67, 0x04, 0x00, 0xdf, 0x03, 0xff, 0x0f, 0x02,
  318. X   0x00, 0xfe, 0x19, 0xfe, 0x1f, 0x02, 0x00, 0xfe, 0x24, 0xfe, 0x1f, 0x07,
  319. X   0x00, 0x7c, 0x24, 0xfc, 0xff, 0x08, 0x00, 0x78, 0x18, 0xfa, 0x7f, 0x10,
  320. X   0x00, 0x3c, 0x00, 0xf2, 0xff, 0x10, 0x00, 0xde, 0x00, 0xfc, 0xff, 0x00,
  321. X   0x00, 0x8f, 0x0f, 0xe0, 0xff, 0x01, 0x80, 0x87, 0xf0, 0xff, 0xff, 0x03,
  322. X   0x80, 0x87, 0x00, 0x84, 0xff, 0x07, 0xc0, 0x43, 0x00, 0x84, 0xff, 0x07,
  323. X   0xe0, 0x21, 0x00, 0x02, 0xff, 0x0f, 0xf0, 0x00, 0x00, 0x02, 0xfe, 0x1f,
  324. X   0x78, 0x00, 0x00, 0x00, 0xfc, 0x3f, 0x78, 0x00, 0x00, 0x00, 0xfc, 0x3f,
  325. X   0x3c, 0x00, 0x00, 0x00, 0xf8, 0x7f, 0x1e, 0x00, 0x00, 0x00, 0xf0, 0xff};
  326. X
  327. X
  328. /* bitmap data for 64x64 xdbx icon */
  329. X
  330. #define xdbx64_width 64
  331. #define xdbx64_height 64
  332. static char xdbx64_bits[] = {
  333. X   0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfe, 0xff, 0x01, 0x00,
  334. X   0x00, 0x00, 0x00, 0xf8, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7c,
  335. X   0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x3e, 0xf8, 0xff, 0x07, 0x00,
  336. X   0x00, 0x00, 0x00, 0x1f, 0xf0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x80, 0x0f,
  337. X   0xe0, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x80, 0x0f, 0xc0, 0xff, 0x3f, 0x00,
  338. X   0x00, 0x00, 0xc0, 0x07, 0xc0, 0xff, 0x3f, 0x00, 0x01, 0x00, 0xe0, 0x03,
  339. X   0x80, 0xff, 0x7f, 0x00, 0x02, 0x00, 0xf0, 0x01, 0x00, 0xff, 0xff, 0x00,
  340. X   0x04, 0x00, 0xf8, 0x00, 0x00, 0xfe, 0xff, 0x01, 0x04, 0x00, 0xf8, 0x00,
  341. X   0x00, 0xfe, 0xff, 0x01, 0x04, 0x00, 0x7c, 0x00, 0x00, 0xfc, 0xff, 0xff,
  342. X   0xff, 0x01, 0x3e, 0x04, 0x00, 0xf8, 0xff, 0x07, 0x00, 0x1e, 0x1f, 0x04,
  343. X   0x00, 0xf0, 0xff, 0x0f, 0x00, 0xe0, 0x0f, 0x04, 0x00, 0xf0, 0xff, 0x0f,
  344. X   0x80, 0x81, 0x07, 0x02, 0x00, 0xe0, 0xff, 0x1f, 0x40, 0xc2, 0x07, 0x01,
  345. X   0x00, 0xc0, 0xff, 0xbf, 0x41, 0xe2, 0x8b, 0x01, 0x00, 0xc0, 0xff, 0x7f,
  346. X   0x82, 0xf1, 0xd1, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x02, 0xf8, 0x60, 0x00,
  347. X   0x00, 0xf0, 0xff, 0xff, 0x01, 0x7c, 0x40, 0x00, 0x00, 0xf8, 0xfe, 0xff,
  348. X   0x01, 0x7c, 0x80, 0x00, 0x00, 0xfc, 0xfc, 0xff, 0x03, 0x3e, 0x80, 0x00,
  349. X   0x00, 0xfc, 0xfc, 0xff, 0x03, 0x1f, 0x00, 0x01, 0x00, 0xfe, 0xf8, 0xff,
  350. X   0x87, 0x0f, 0x03, 0x01, 0x00, 0xff, 0xf0, 0xff, 0xcf, 0x87, 0x04, 0x02,
  351. X   0x08, 0xff, 0xe0, 0xff, 0xcf, 0x87, 0x04, 0x02, 0x10, 0xe7, 0xe0, 0xff,
  352. X   0xe7, 0x03, 0x03, 0x02, 0xe0, 0xe3, 0xc0, 0xff, 0xf3, 0x01, 0x00, 0x04,
  353. X   0x80, 0xff, 0x80, 0xff, 0xf9, 0x00, 0x00, 0x04, 0x80, 0xff, 0x00, 0xff,
  354. X   0xfc, 0x00, 0x00, 0x04, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07,
  355. X   0x80, 0xff, 0x00, 0x7e, 0xfe, 0x01, 0x00, 0x04, 0x80, 0xff, 0x00, 0x3e,
  356. X   0xff, 0x1b, 0x00, 0x04, 0xe0, 0xe3, 0x00, 0x9f, 0xff, 0x27, 0x00, 0x04,
  357. X   0x10, 0xe7, 0xb0, 0xcf, 0xff, 0x2f, 0x30, 0x02, 0x08, 0xff, 0xc8, 0xe7,
  358. X   0xff, 0x1f, 0x48, 0x02, 0x00, 0xff, 0xe8, 0xe7, 0xff, 0x1f, 0x48, 0x02,
  359. X   0x00, 0xfe, 0xf0, 0xc3, 0xff, 0x3f, 0x30, 0x01, 0x00, 0xfc, 0xf0, 0xc1,
  360. X   0xff, 0x3f, 0x00, 0x01, 0x00, 0xfc, 0xf8, 0x80, 0xff, 0x7f, 0x80, 0x00,
  361. X   0x00, 0xf8, 0x7c, 0x00, 0xff, 0xff, 0x80, 0x00, 0x00, 0xf0, 0x7c, 0x18,
  362. X   0xfe, 0xff, 0xc1, 0x00, 0x00, 0xe0, 0x3e, 0x24, 0xfe, 0xff, 0x61, 0x00,
  363. X   0x00, 0xc0, 0x1f, 0x24, 0xfc, 0xff, 0xd3, 0x00, 0x00, 0x80, 0x0f, 0x18,
  364. X   0xf8, 0xff, 0x8f, 0x01, 0x00, 0xc0, 0x07, 0x00, 0xf4, 0xff, 0x0f, 0x01,
  365. X   0x00, 0xe0, 0x0f, 0x00, 0xe4, 0xff, 0x1f, 0x02, 0x00, 0xf0, 0x39, 0x00,
  366. X   0xf8, 0xff, 0x1f, 0x04, 0x00, 0xf0, 0xc9, 0x03, 0xc0, 0xff, 0x3f, 0x04,
  367. X   0x00, 0xf8, 0x08, 0xfc, 0xff, 0xff, 0x7f, 0x04, 0x00, 0x7c, 0x04, 0x00,
  368. X   0x01, 0xff, 0x7f, 0x00, 0x00, 0x3e, 0x02, 0x00, 0x01, 0xff, 0xff, 0x00,
  369. X   0x00, 0x3e, 0x00, 0x00, 0x01, 0xfe, 0xff, 0x01, 0x00, 0x1f, 0x00, 0x80,
  370. X   0x00, 0xfc, 0xff, 0x03, 0x80, 0x0f, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03,
  371. X   0xc0, 0x07, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x07, 0xe0, 0x03, 0x00, 0x00,
  372. X   0x00, 0xf0, 0xff, 0x0f, 0xe0, 0x03, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x1f,
  373. X   0xf0, 0x01, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x1f, 0xf8, 0x00, 0x00, 0x00,
  374. X   0x00, 0xc0, 0xff, 0x3f, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x7f,
  375. X   0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff};
  376. X
  377. X
  378. /* bitmap data for stop sign */
  379. X
  380. #define stop_width 16
  381. #define stop_height 16
  382. #define stop_x_hot -1
  383. #define stop_y_hot -1
  384. static char stop_bits[] = {
  385. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0xa0, 0x03, 0xb8, 0x0e,
  386. X   0xa8, 0x0a, 0xa8, 0x0a, 0xa8, 0x0a, 0x18, 0x08, 0x10, 0x08, 0x30, 0x0c,
  387. X   0xe0, 0x07, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00};
  388. X
  389. /* bitmap data for arrow sign */
  390. X
  391. #define arrow_width 16
  392. #define arrow_height 16
  393. #define arrow_x_hot -1
  394. #define arrow_y_hot -1
  395. static char arrow_bits[] = {
  396. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x01, 0x80, 0x03,
  397. X   0xff, 0x07, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x07, 0x80, 0x03, 0x80, 0x01,
  398. X   0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  399. X
  400. X
  401. /* bitmap data for up-down (outlined arrow) sign */
  402. X
  403. #define updown_width 16
  404. #define updown_height 16
  405. #define updown_x_hot -1
  406. #define updown_y_hot -1
  407. static char updown_bits[] = {
  408. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x01, 0x80, 0x03,
  409. X   0xff, 0x06, 0x01, 0x0c, 0x01, 0x0c, 0xff, 0x06, 0x80, 0x03, 0x80, 0x01,
  410. X   0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  411. X
  412. X
  413. /* bitmap data for bomb sign */
  414. X
  415. #define bomb_width 16
  416. #define bomb_height 16
  417. static char bomb_bits[] = {
  418. X   0x00, 0x00, 0x69, 0x00, 0x94, 0x00, 0x8a, 0x00, 0xc0, 0x01, 0xc5, 0x01,
  419. X   0xf0, 0x07, 0xf0, 0x07, 0xf8, 0x0f, 0xf8, 0x0d, 0xf8, 0x0d, 0xf8, 0x0d,
  420. X   0xf0, 0x06, 0xf0, 0x07, 0xc0, 0x01, 0x00, 0x00};
  421. SHAR_EOF
  422. chmod 0664 mxgdb/bitmaps.h ||
  423. echo 'restore of mxgdb/bitmaps.h failed'
  424. Wc_c="`wc -c < 'mxgdb/bitmaps.h'`"
  425. test 8571 -eq "$Wc_c" ||
  426.     echo 'mxgdb/bitmaps.h: original size 8571, current size' "$Wc_c"
  427. rm -f _shar_wnt_.tmp
  428. fi
  429. # ============= mxgdb/dbx.c ==============
  430. if test -f 'mxgdb/dbx.c' -a X"$1" != X"-c"; then
  431.     echo 'x - skipping mxgdb/dbx.c (File already exists)'
  432.     rm -f _shar_wnt_.tmp
  433. else
  434. > _shar_wnt_.tmp
  435. echo 'x - extracting mxgdb/dbx.c (Text)'
  436. sed 's/^X//' << 'SHAR_EOF' > 'mxgdb/dbx.c' &&
  437. static char rcsid[] = "$Id: dbx.c,v 1.1.1.1 1991/05/16 21:41:50 jtsillas Exp $";
  438. X
  439. /*****************************************************************************
  440. X *
  441. X *  xdbx - X Window System interface to the dbx debugger
  442. X *
  443. X *  Copyright 1989 The University of Texas at Austin
  444. X *  Copyright 1990 Microelectronics and Computer Technology Corporation
  445. X *
  446. X *  Permission to use, copy, modify, and distribute this software and its
  447. X *  documentation for any purpose and without fee is hereby granted,
  448. X *  provided that the above copyright notice appear in all copies and that
  449. X *  both that copyright notice and this permission notice appear in
  450. X *  supporting documentation, and that the name of The University of Texas
  451. X *  and Microelectronics and Computer Technology Corporation (MCC) not be 
  452. X *  used in advertising or publicity pertaining to distribution of
  453. X *  the software without specific, written prior permission.  The
  454. X *  University of Texas and MCC makes no representations about the 
  455. X *  suitability of this software for any purpose.  It is provided "as is" 
  456. X *  without express or implied warranty.
  457. X *
  458. X *  THE UNIVERSITY OF TEXAS AND MCC DISCLAIMS ALL WARRANTIES WITH REGARD TO
  459. X *  THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
  460. X *  FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF TEXAS OR MCC BE LIABLE FOR
  461. X *  ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
  462. X *  RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
  463. X *  CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  464. X *  CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  465. X *
  466. X *  Author:      Po Cheung
  467. X *  Created:       March 10, 1989
  468. X * 
  469. X *****************************************************************************
  470. X * 
  471. X *  xxgdb - X Window System interface to the gdb debugger
  472. X *  
  473. X *     Copyright 1990 Thomson Consumer Electronics, Inc.
  474. X *  
  475. X *  Permission to use, copy, modify, and distribute this software and its
  476. X *  documentation for any purpose and without fee is hereby granted,
  477. X *  provided that the above copyright notice appear in all copies and that
  478. X *  both that copyright notice and this permission notice appear in
  479. X *  supporting documentation, and that the name of Thomson Consumer
  480. X *  Electronics (TCE) not be used in advertising or publicity pertaining
  481. X *  to distribution of the software without specific, written prior
  482. X *  permission.  TCE makes no representations about the suitability of
  483. X *  this software for any purpose.  It is provided "as is" without express
  484. X *  or implied warranty.
  485. X *
  486. X *  TCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  487. X *  ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT
  488. X *  SHALL TCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES
  489. X *  OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  490. X *  WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
  491. X *  ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  492. X *  SOFTWARE.
  493. X *
  494. X *  Adaptation to GDB:  Pierre Willard
  495. X *  XXGDB Created:       December, 1990
  496. X *
  497. X *****************************************************************************/
  498. X
  499. /*
  500. X *  dbx.c
  501. X *
  502. X *    Handle dbx command initialization file (.dbxinit) and communication 
  503. X *    between dbx and xdbx.
  504. X *
  505. X *    dbx_init():    Handle .dbxinit
  506. X *    debug_init():    
  507. X *    read_dbx():    Read dbx output, parse and filter it before displaying
  508. X *            onto the dialog window.
  509. X *    write_dbx():    Send a command to dbx.
  510. X *    query_dbx():    Send a command to dbx and process it.
  511. X */
  512. X
  513. #include "global.h"
  514. X
  515. Boolean    Prompt;            /* True when dbx prompt arrives */
  516. char     *concat();
  517. char    *dbxprompt; 
  518. char    *xdbxprompt;
  519. X
  520. /*  Given a dbx command initialization file, this routine executes each dbx 
  521. X *  command in the file.  It sends the command to dbx, and calls read_dbx() 
  522. X *  directly to process output returned from dbx.
  523. X */
  524. static void dbx_init(xdbxinit)
  525. char *xdbxinit;
  526. {
  527. X    FILE *fp;
  528. X    char s[LINESIZ];
  529. X
  530. X    if (!strcmp(xdbxinit, ""))
  531. X    return;
  532. X    if (fp = fopen(xdbxinit, "r")) {
  533. X    while (fgets(s, LINESIZ, fp)) {
  534. #ifdef GDB
  535. X        /* if GDB:
  536. X            Check for comment line,
  537. X            DO NOT SEND '\n',
  538. X            Take care of source command.
  539. X        */
  540. X        if ((*s != '#') && strcmp(s,"\n"))
  541. X          {
  542. X            if ((!gdb_source_command(s,TRUE)) && 
  543. X            (!gdb_define_command(s,fp))) 
  544. X              {
  545. X            write_dbx(s);
  546. X            insert_command(s);
  547. X            AppendDialogText(s);
  548. X              }
  549. #else /* GDB */
  550. X        send_command(s);
  551. X        AppendDialogText(s);
  552. #endif
  553. X        Prompt = False;
  554. X        while (!Prompt)
  555. X        read_dbx();
  556. #ifdef GDB
  557. X        }
  558. #endif /* GDB */
  559. X    }
  560. X    close((int)fp);
  561. X    }
  562. }
  563. X
  564. /*
  565. X *  This routine is called after getting the first dbx prompt.  
  566. X *  > check the use list to create a list of directories for searching
  567. X *    source files.
  568. X *  > ask dbx for the source file and display it if it exists.
  569. X *  > open the command initialization file and executed the commands;
  570. X *    if Tstartup is true, remove the initialization file.
  571. X */
  572. void debug_init()
  573. {
  574. X    static visited = False;
  575. X
  576. X    if (!visited) {
  577. X    visited = True;
  578. X    dbx_init(xdbxinit);
  579. X    if (Tstartup)
  580. X        unlink(xdbxinit);
  581. X    strcpy(xdbxinit, "");
  582. X    }
  583. }
  584. X
  585. /*
  586. X *  This is a callback procedure invoked everytime when input is pending
  587. X *  on the file descriptor to dbx.
  588. X *  o reads all the data available on the file descriptor line by line
  589. X *    into local variable 'string' and global variable 'output'.
  590. X *    'output' records the entire dbx output whereas 'string' records
  591. X *    only the data read in this invocation of read_dbx().
  592. X *  o in Echo mode, the contents in 'string' is edited by filter()
  593. X *    before it gets displayed on the dialog window.
  594. X *  o once the dbx prompt is read, calls parse() to analyse the dbx output
  595. X *    and take appropriate action.
  596. X */
  597. /* ARGSUSED */
  598. void read_dbx(master, source, id)
  599. XXtPointer master;
  600. int       *source;
  601. XXtInputId *id;
  602. {
  603. X    static char *output = NULL;     /* buffer for dbx output */
  604. X    static char *next_string = NULL;
  605. X    static char *command;
  606. X    char     *string = NULL;
  607. X    char     s[LINESIZ];
  608. X    Boolean     more;
  609. X    
  610. X    more = True;
  611. X    while (more) {
  612. X    Prompt = False;
  613. X    /* keep reading until no more or until prompt arrives */
  614. X    while (more = fgets(s, LINESIZ, dbxfp) && !Prompt) {
  615. X        if (debug)
  616. X        fprintf(stderr, "=>%s", s);
  617. X        /* receive prompt? */
  618. X        if (!strncmp(s, dbxprompt, strlen(dbxprompt))) {
  619. X        Prompt = True;
  620. X        /* more stuff behind prompt? */
  621. X        if (s[strlen(dbxprompt)])
  622. X            /* remember it */
  623. X            next_string = XtNewString(s+strlen(dbxprompt));
  624. X        /* destroy contents */
  625. X        strcpy(s, "");
  626. X        }
  627. X        string = concat(string, s);
  628. X        strcpy(s, "");
  629. X    }
  630. X    output = concat(output, string);
  631. X    command = get_command();
  632. X        
  633. X    if (Echo) {
  634. X        filter(string, output, command);
  635. X        if (Prompt) AppendDialogText(xdbxprompt);
  636. X    }
  637. X    if (string) {
  638. X        XtFree(string);
  639. X        string = NULL;
  640. X    }
  641. X    if (next_string) {
  642. X        string = concat(string, next_string);
  643. X        XtFree(next_string);
  644. X        next_string = NULL;
  645. X    }
  646. X    if (Prompt) {
  647. X        parse(output, command);
  648. X        delete_command();
  649. X        XtFree(output);
  650. X        output = NULL;
  651. X    }
  652. X    }
  653. }
  654. X
  655. /*  Write string s to dbx, and flush the output.  */
  656. X
  657. void write_dbx(s)
  658. char *s;
  659. {
  660. X    if (debug)
  661. X        fprintf(stderr, ">>%s", s);        /* (PW) see what is sent to GDB */
  662. X        
  663. X    fputs(s, dbxfp);
  664. X    fflush(dbxfp);
  665. }
  666. X
  667. /*  Sends a command to dbx and read the corresponding output, directly
  668. X *  invoking the Xt input procedure, read_dbx().
  669. X */
  670. void query_dbx(command)
  671. char *command;
  672. {
  673. X    write_dbx(command);
  674. X    insert_command(command);
  675. X
  676. X    Echo = False;
  677. X    Prompt = False;
  678. X    while (!Prompt)
  679. X        read_dbx();
  680. X
  681. X    Parse = True;    /* Always reset Parse and Echo to True */
  682. X    Echo = True;
  683. }
  684. SHAR_EOF
  685. chmod 0664 mxgdb/dbx.c ||
  686. echo 'restore of mxgdb/dbx.c failed'
  687. Wc_c="`wc -c < 'mxgdb/dbx.c'`"
  688. test 7618 -eq "$Wc_c" ||
  689.     echo 'mxgdb/dbx.c: original size 7618, current size' "$Wc_c"
  690. rm -f _shar_wnt_.tmp
  691. fi
  692. # ============= mxgdb/datadpy.h ==============
  693. if test -f 'mxgdb/datadpy.h' -a X"$1" != X"-c"; then
  694.     echo 'x - skipping mxgdb/datadpy.h (File already exists)'
  695.     rm -f _shar_wnt_.tmp
  696. else
  697. > _shar_wnt_.tmp
  698. echo 'x - extracting mxgdb/datadpy.h (Text)'
  699. sed 's/^X//' << 'SHAR_EOF' > 'mxgdb/datadpy.h' &&
  700. /* $Id: datadpy.h,v 1.1.1.1 1991/05/16 21:41:47 jtsillas Exp $ */
  701. X
  702. /*****************************************************************************
  703. X *
  704. X *  xdbx - X Window System interface to the dbx debugger
  705. X *
  706. X *  Copyright 1989 The University of Texas at Austin
  707. X *  Copyright 1990 Microelectronics and Computer Technology Corporation
  708. X *
  709. X *  Permission to use, copy, modify, and distribute this software and its
  710. X *  documentation for any purpose and without fee is hereby granted,
  711. X *  provided that the above copyright notice appear in all copies and that
  712. X *  both that copyright notice and this permission notice appear in
  713. X *  supporting documentation, and that the name of The University of Texas
  714. X *  and Microelectronics and Computer Technology Corporation (MCC) not be 
  715. X *  used in advertising or publicity pertaining to distribution of
  716. X *  the software without specific, written prior permission.  The
  717. X *  University of Texas and MCC makes no representations about the 
  718. X *  suitability of this software for any purpose.  It is provided "as is" 
  719. X *  without express or implied warranty.
  720. X *
  721. X *  THE UNIVERSITY OF TEXAS AND MCC DISCLAIMS ALL WARRANTIES WITH REGARD TO
  722. X *  THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
  723. X *  FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF TEXAS OR MCC BE LIABLE FOR
  724. X *  ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
  725. X *  RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
  726. X *  CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  727. X *  CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  728. X *
  729. X *  Author:      Po Cheung
  730. X *  Created:       March 10, 1989
  731. X * 
  732. X *****************************************************************************
  733. X * 
  734. X *  xxgdb - X Window System interface to the gdb debugger
  735. X *  
  736. X *     Copyright 1990 Thomson Consumer Electronics, Inc.
  737. X *  
  738. X *  Permission to use, copy, modify, and distribute this software and its
  739. X *  documentation for any purpose and without fee is hereby granted,
  740. X *  provided that the above copyright notice appear in all copies and that
  741. X *  both that copyright notice and this permission notice appear in
  742. X *  supporting documentation, and that the name of Thomson Consumer
  743. X *  Electronics (TCE) not be used in advertising or publicity pertaining
  744. X *  to distribution of the software without specific, written prior
  745. X *  permission.  TCE makes no representations about the suitability of
  746. X *  this software for any purpose.  It is provided "as is" without express
  747. X *  or implied warranty.
  748. X *
  749. X *  TCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  750. X *  ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT
  751. X *  SHALL TCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES
  752. X *  OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  753. X *  WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
  754. X *  ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  755. X *  SOFTWARE.
  756. X *
  757. X *  Adaptation to GDB:  Pierre Willard
  758. X *  XXGDB Created:       December, 1990
  759. X *
  760. X *****************************************************************************/
  761. X
  762. /*  datadpy.h:
  763. X *
  764. X *  Regular expression pattern matching for C structures
  765. X *
  766. X *  The reg_token array indicates the register no. for each token type.
  767. X *      reg_token[0] : level of indentation
  768. X *      reg_token[2] : field name
  769. X *      reg_token[4] : pointer string
  770. X */
  771. X
  772. #define TK_INDENT       0
  773. #define TK_FIELD        2
  774. #define TK_POINTER      4
  775. X
  776. #define D_POINTER    0
  777. #define D_FIELD        1
  778. #define D_STRUCT    2
  779. X
  780. /*
  781. X    Note : for GDB the 'set prettyprint on' must be ON.
  782. X    
  783. X    Exaamples "
  784. X    
  785. X        $3 = (struct toto *) 0x40c0
  786. X        
  787. X        $2 = {
  788. X          pt = 0x40b4,
  789. X          u = 5,
  790. X          v = 6
  791. X        }
  792. */
  793. X
  794. PatternRec dataPattern[] = {
  795. X    {"0x[0-9a-f]+",                   
  796. X     NULL, {-1, -1, -1, -1, -1, -1}
  797. X    },
  798. X    {"\\([ ]*\\)\\(.*[^ ]+\\)[ ]* = \\((.*) \\)?\\(0x[0-9a-f]+\\)[,]?[ ]*\n", 
  799. X     NULL, { 1, -1,  2, -1,  4, -1}
  800. X    },
  801. X    {"\\([ ]*\\)\\(.*[^ ]*\\)[ ]* = {\n",           
  802. X     NULL, { 1, -1,  2, -1, -1, -1}
  803. X    },
  804. X    NULL
  805. };
  806. X
  807. X
  808. SHAR_EOF
  809. chmod 0664 mxgdb/datadpy.h ||
  810. echo 'restore of mxgdb/datadpy.h failed'
  811. Wc_c="`wc -c < 'mxgdb/datadpy.h'`"
  812. test 4052 -eq "$Wc_c" ||
  813.     echo 'mxgdb/datadpy.h: original size 4052, current size' "$Wc_c"
  814. rm -f _shar_wnt_.tmp
  815. fi
  816. # ============= mxgdb/dialog.c ==============
  817. if test -f 'mxgdb/dialog.c' -a X"$1" != X"-c"; then
  818.     echo 'x - skipping mxgdb/dialog.c (File already exists)'
  819.     rm -f _shar_wnt_.tmp
  820. else
  821. > _shar_wnt_.tmp
  822. echo 'x - extracting mxgdb/dialog.c (Text)'
  823. sed 's/^X//' << 'SHAR_EOF' > 'mxgdb/dialog.c' &&
  824. static char rcsid[] = "$Id: dialog.c,v 1.2 1991/05/20 14:04:09 jtsillas Exp $";
  825. X
  826. /*****************************************************************************
  827. X *
  828. X *  xdbx - X Window System interface to the dbx debugger
  829. X *
  830. X *  Copyright 1989 The University of Texas at Austin
  831. X *  Copyright 1990 Microelectronics and Computer Technology Corporation
  832. X *
  833. X *  Permission to use, copy, modify, and distribute this software and its
  834. X *  documentation for any purpose and without fee is hereby granted,
  835. X *  provided that the above copyright notice appear in all copies and that
  836. X *  both that copyright notice and this permission notice appear in
  837. X *  supporting documentation, and that the name of The University of Texas
  838. X *  and Microelectronics and Computer Technology Corporation (MCC) not be 
  839. X *  used in advertising or publicity pertaining to distribution of
  840. X *  the software without specific, written prior permission.  The
  841. X *  University of Texas and MCC makes no representations about the 
  842. X *  suitability of this software for any purpose.  It is provided "as is" 
  843. X *  without express or implied warranty.
  844. X *
  845. X *  THE UNIVERSITY OF TEXAS AND MCC DISCLAIMS ALL WARRANTIES WITH REGARD TO
  846. X *  THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
  847. X *  FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF TEXAS OR MCC BE LIABLE FOR
  848. X *  ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
  849. X *  RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
  850. X *  CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  851. X *  CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  852. X *
  853. X *  Author:      Po Cheung
  854. X *  Created:       March 10, 1989
  855. X * 
  856. X *****************************************************************************
  857. X * 
  858. X *  xxgdb - X Window System interface to the gdb debugger
  859. X *  
  860. X *     Copyright 1990 Thomson Consumer Electronics, Inc.
  861. X *  
  862. X *  Permission to use, copy, modify, and distribute this software and its
  863. X *  documentation for any purpose and without fee is hereby granted,
  864. X *  provided that the above copyright notice appear in all copies and that
  865. X *  both that copyright notice and this permission notice appear in
  866. X *  supporting documentation, and that the name of Thomson Consumer
  867. X *  Electronics (TCE) not be used in advertising or publicity pertaining
  868. X *  to distribution of the software without specific, written prior
  869. X *  permission.  TCE makes no representations about the suitability of
  870. X *  this software for any purpose.  It is provided "as is" without express
  871. X *  or implied warranty.
  872. X *
  873. X *  TCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  874. X *  ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT
  875. X *  SHALL TCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES
  876. X *  OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  877. X *  WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
  878. X *  ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  879. X *  SOFTWARE.
  880. X *
  881. X *  Adaptation to GDB:  Pierre Willard
  882. X *  XXGDB Created:       December, 1990
  883. X *
  884. X *****************************************************************************/
  885. X
  886. /*  dialog.c
  887. X *
  888. X *    Create the dialogue window where the user enter dbx commands, and
  889. X *    provide action procs to make a text widget behave like a terminal.
  890. X *
  891. X *    InsertSpace():    Prevent user from deleting past the prompt (action proc
  892. X *            for DELETE or BACKSPACE).
  893. X *    Dispatch():    Send an input command line to dbx. (action proc for CR).
  894. X *    SigInt():        Send SIGINT to dbx (action proc for Ctrl-C).
  895. X *    SigEof():        Send an EOF signal to dbx (action proc for Ctrl-D).
  896. X *    SigQuit():    Send SIGQUIT to dbx (action proc for Ctrl-\).
  897. X *    CreateDialogWindow(): Create dialog window and install action table.
  898. X *    AppendDialogText():       Append string to dialog window.
  899. X */
  900. X
  901. #include <signal.h>
  902. #include "global.h"
  903. #include <Xm/Xm.h>
  904. #include <Xm/Text.h>
  905. X
  906. Widget    dialogWindow;            /* text window as a dbx terminal */
  907. Boolean FalseSignal = FALSE;        /* set to TRUE before self-generated
  908. X                       interrupt/quit signals */
  909. static XmTextPosition  StartPos;          /* starting position of input text */
  910. X
  911. X
  912. /*  This procedure prevents the user from deleting past the prompt, or
  913. X *  any text appended by AppendDialogText() to the dialog window.
  914. X *  It checks the last position of text, if it matches StartPos, set
  915. X *  by AppendDialogText(), it inserts a space so that delete-previous-
  916. X *  character() can only delete the space character.
  917. X */
  918. /* ARGSUSED */
  919. static void InsertSpace(w, event, params, num_params)
  920. X    Widget w;
  921. X    XEvent *event;
  922. X    String *params;
  923. X    Cardinal *num_params;
  924. {
  925. X  XmTextPosition lastPos;
  926. X
  927. X  if (XmTextGetInsertionPosition(w) <= StartPos) {
  928. X    lastPos = TextGetLastPos(w);
  929. X    if (lastPos == StartPos) 
  930. X      XmTextInsert(w, lastPos, " ");
  931. X    }
  932. }
  933. X
  934. static void InsertSelection(w, event, params, num_params)
  935. X    Widget w;
  936. X    XEvent *event;
  937. X    String *params;
  938. X    Cardinal *num_params;
  939. {
  940. X  XmTextSetInsertionPosition(w, XmTextGetLastPosition(w));
  941. }
  942. X
  943. X
  944. /*  Dispatch() is invoked on every <CR>.
  945. X *  It collects text from the dialog window and sends it to dbx.
  946. X *  If the string is a command to dbx (Prompt would be TRUE),
  947. X *  it is stored in the global variable, Command.
  948. X */
  949. /* ARGSUSED */
  950. static void Dispatch(w, event, params, num_params)
  951. X    Widget w;
  952. X    XEvent *event;
  953. X    String *params;
  954. X    Cardinal *num_params; 
  955. {
  956. X  char *DialogText;
  957. X    /* 
  958. X    For GDB, '\n' means exec previous command again.
  959. X    default command is space+CR, so that we never send
  960. X    CR to gdb (the repeat is managed here)
  961. X    */
  962. X    static char gdb_command[LINESIZ] = " \n";
  963. X    char s[LINESIZ];
  964. X
  965. X  DialogText = XmTextGetString(dialogWindow);
  966. X  strcpy(s, DialogText + StartPos);
  967. X    /* (PW)18DEC90 : bug xdbx : without the following line,
  968. X    xdbx sends several times the same lines when Prompt is false */
  969. X    StartPos = TextGetLastPos(dialogWindow);
  970. X
  971. X    if (Prompt) {
  972. X    if (gdb_source_command(s,FALSE))    /* filter source command (& do not display source command) */
  973. X        {
  974. X        strcpy(gdb_command," \n");    /* do not execute anything if next command is '\n' */
  975. X        return;
  976. X        }
  977. X    /* When we send \n to gdb, it executes the last command,
  978. X    so better tell xxgdb what gdb is doing */
  979. X    if (strcmp(s, "\n"))
  980. X        strcpy(gdb_command,s);
  981. X    else
  982. X        strcpy(s,gdb_command);
  983. X    send_command(s);
  984. X    }
  985. X    else {
  986. X        write_dbx(s);
  987. X    }
  988. X  XtFree(DialogText);
  989. }
  990. X
  991. X
  992. /*  Sends an interrupt signal, SIGINT, to dbx.
  993. X *  Simulates the action of the INTR character (ctrl-C).
  994. X */
  995. /* ARGSUSED */
  996. static void SigInt(w, event, params, num_params)
  997. X    Widget w;
  998. X    XEvent *event;
  999. X    String *params;
  1000. X    Cardinal *num_params;
  1001. {
  1002. X    FalseSignal = TRUE;
  1003. X    killpg(dbxpid, SIGINT);
  1004. }
  1005. X
  1006. X
  1007. /*  Sends an EOF signal to dbx. (ctrl-D) */
  1008. /* ARGSUSED */
  1009. static void SigEof(w, event, params, num_params)
  1010. X    Widget w;
  1011. X    XEvent *event;
  1012. X    String *params;
  1013. X    Cardinal *num_params;
  1014. {
  1015. X    write_dbx("\04");
  1016. }
  1017. X
  1018. X
  1019. /*  Sends a QUIT signal, SIGQUIT, to dbx. 
  1020. X *  Simulates the action of the QUIT character (ctrl-\) 
  1021. X */
  1022. /* ARGSUSED */
  1023. static void SigQuit(w, event, params, num_params)
  1024. X    Widget w;
  1025. X    XEvent *event;
  1026. X    String *params;
  1027. X    Cardinal *num_params;
  1028. {
  1029. X    FalseSignal = TRUE;
  1030. X    killpg(dbxpid, SIGQUIT);
  1031. }
  1032. X
  1033. X
  1034. /* 
  1035. X *  Dialog window has its own set of translations for editing.
  1036. X *  Special action procedures for keys Delete/Backspace, Carriage Return,
  1037. X *  Ctrl-U, Ctrl-C, Ctrl-D, Ctrl-\, and word selection.
  1038. X */
  1039. void CreateDialogWindow(parent)
  1040. Widget parent;
  1041. {
  1042. X    Arg     args[MAXARGS];
  1043. X    Cardinal     n;
  1044. X
  1045. X    static XtActionsRec dialog_actions[] = {
  1046. X    {"SigInt",     (XtActionProc) SigInt},
  1047. X    {"SigEof",     (XtActionProc) SigEof},
  1048. X    {"SigQuit",     (XtActionProc) SigQuit},
  1049. X    {"InsertSpace", (XtActionProc) InsertSpace},
  1050. X    {"InsertSelection", (XtActionProc) InsertSelection},
  1051. X    {"Dispatch",     (XtActionProc) Dispatch},
  1052. X        {NULL, NULL}
  1053. X    };
  1054. X
  1055. X    XtSetArg(args[0], XmNeditMode, XmMULTI_LINE_EDIT);
  1056. X    XtSetArg(args[1], XmNautoShowCursorPosition, True);
  1057. X    XtSetArg(args[2], XmNscrollingPolicy, XmAUTOMATIC);
  1058. X    XtSetArg(args[3], XmNscrollLeftSide, True);
  1059. X    XtSetArg(args[4], XmNwordWrap, True);
  1060. X    dialogWindow = XmCreateScrolledText(parent, "dialogWindow",
  1061. X                                          args, 5);
  1062. X    XtManageChild(dialogWindow);
  1063. X
  1064. X    XtAppAddActions(app_context, dialog_actions, XtNumber(dialog_actions));
  1065. }
  1066. X
  1067. static void TextSetLastPos(w, lastPos)
  1068. Widget w;
  1069. XXmTextPosition lastPos;
  1070. {
  1071. X    Arg         args[MAXARGS];
  1072. X    XtSetArg(args[0], XmNcursorPosition, lastPos);
  1073. X    XtSetValues(w, args, 1);
  1074. }
  1075. void AppendDialogText(s)
  1076. X    char   *s;
  1077. {
  1078. X    XmTextPosition     i, lastPos;
  1079. X    XmTextBlockRec        textblock, nullblock;
  1080. X    Arg         args[MAXARGS];
  1081. X    Cardinal         n;
  1082. X
  1083. X    if (!s || !strcmp(s, "")) return;
  1084. X
  1085. X    textblock.length   = strlen(s);
  1086. X    textblock.ptr      = s;
  1087. X
  1088. X    lastPos = XmTextGetLastPosition(dialogWindow);
  1089. X
  1090. X    XmTextInsert(dialogWindow, lastPos,
  1091. X          textblock.ptr);
  1092. X    StartPos = TextGetLastPos(dialogWindow);
  1093. X    XmTextSetInsertionPosition(dialogWindow, 
  1094. X                   XmTextGetLastPosition(dialogWindow));
  1095. }
  1096. SHAR_EOF
  1097. chmod 0664 mxgdb/dialog.c ||
  1098. echo 'restore of mxgdb/dialog.c failed'
  1099. Wc_c="`wc -c < 'mxgdb/dialog.c'`"
  1100. test 9041 -eq "$Wc_c" ||
  1101.     echo 'mxgdb/dialog.c: original size 9041, current size' "$Wc_c"
  1102. rm -f _shar_wnt_.tmp
  1103. fi
  1104. # ============= mxgdb/regex.c ==============
  1105. if test -f 'mxgdb/regex.c' -a X"$1" != X"-c"; then
  1106.     echo 'x - skipping mxgdb/regex.c (File already exists)'
  1107.     rm -f _shar_wnt_.tmp
  1108. else
  1109. > _shar_wnt_.tmp
  1110. echo 'x - extracting mxgdb/regex.c (Text)'
  1111. sed 's/^X//' << 'SHAR_EOF' > 'mxgdb/regex.c' &&
  1112. static char rcsid[] = "$Id: regex.c,v 1.1.1.1 1991/05/16 21:42:37 jtsillas Exp $";
  1113. X
  1114. /* Extended regular expression matching and search.
  1115. X   Copyright (C) 1985 Free Software Foundation, Inc.
  1116. X
  1117. X               NO WARRANTY
  1118. X
  1119. X  BECAUSE THIS PROGRAM IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY
  1120. NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW.  EXCEPT
  1121. WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC,
  1122. RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE THIS PROGRAM "AS IS"
  1123. WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
  1124. BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  1125. FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY
  1126. AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE
  1127. DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
  1128. CORRECTION.
  1129. X
  1130. X IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.
  1131. STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY
  1132. WHO MAY MODIFY AND REDISTRIBUTE THIS PROGRAM AS PERMITTED BELOW, BE
  1133. LIABLE TO YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR
  1134. OTHER SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
  1135. USE OR INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR
  1136. DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR
  1137. A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) THIS
  1138. PROGRAM, EVEN IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH
  1139. DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY.
  1140. X
  1141. X        GENERAL PUBLIC LICENSE TO COPY
  1142. X
  1143. X  1. You may copy and distribute verbatim copies of this source file
  1144. as you receive it, in any medium, provided that you conspicuously and
  1145. appropriately publish on each copy a valid copyright notice "Copyright
  1146. (C) 1985 Free Software Foundation, Inc."; and include following the
  1147. copyright notice a verbatim copy of the above disclaimer of warranty
  1148. and of this License.  You may charge a distribution fee for the
  1149. physical act of transferring a copy.
  1150. X
  1151. X  2. You may modify your copy or copies of this source file or
  1152. any portion of it, and copy and distribute such modifications under
  1153. SHAR_EOF
  1154. true || echo 'restore of mxgdb/regex.c failed'
  1155. fi
  1156. echo 'End of  part 2'
  1157. echo 'File mxgdb/regex.c is continued in part 3'
  1158. echo 3 > _shar_seq_.tmp
  1159. exit 0
  1160. --
  1161.  == James Tsillas                    Bull HN Information Systems Inc. ==
  1162.  == (508) 294-2937                   300 Concord Road   826A          ==
  1163.  == jtsillas@bubba.ma30.bull.com     Billerica, MA 01821              ==
  1164.  ==                                                                   ==
  1165.  == The opinions expressed above are solely my own and do not reflect ==
  1166.  == those of my employer.                                             ==
  1167.             -== no solicitations please ==-
  1168.