home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 3 / 3647 < prev    next >
Encoding:
Text File  |  1991-07-17  |  36.5 KB  |  1,209 lines

  1. Newsgroups: alt.sources
  2. From: jtsillas@sprite.ma30.bull.com (James Tsillas)
  3. Subject: mxgdb Part 9/9
  4. Date: 16 Jul 91 13:15:27
  5. Message-ID: <JTSILLAS.91Jul16131527@sprite.ma30.bull.com>
  6.  
  7.  
  8.  
  9. ---- Cut Here and feed the following to sh ----
  10. #!/bin/sh
  11. # this is mxgdb.09 (part 9 of a multipart archive)
  12. # do not concatenate these parts, unpack them in order with /bin/sh
  13. # file mxgdb/signs.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" != 9; 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/signs.c'
  29. else
  30. echo 'x - continuing file mxgdb/signs.c'
  31. sed 's/^X//' << 'SHAR_EOF' >> 'mxgdb/signs.c' &&
  32. X    }
  33. X    else if (!bombsign[i].mapped) {
  34. X        XtMapWidget(bombsign[i].w);
  35. X        bombsign[i].mapped = TRUE;
  36. X    }
  37. X    }
  38. }
  39. SHAR_EOF
  40. echo 'File mxgdb/signs.c is complete' &&
  41. chmod 0664 mxgdb/signs.c ||
  42. echo 'restore of mxgdb/signs.c failed'
  43. Wc_c="`wc -c < 'mxgdb/signs.c'`"
  44. test 10723 -eq "$Wc_c" ||
  45.     echo 'mxgdb/signs.c: original size 10723, current size' "$Wc_c"
  46. rm -f _shar_wnt_.tmp
  47. fi
  48. # ============= mxgdb/utils.c ==============
  49. if test -f 'mxgdb/utils.c' -a X"$1" != X"-c"; then
  50.     echo 'x - skipping mxgdb/utils.c (File already exists)'
  51.     rm -f _shar_wnt_.tmp
  52. else
  53. > _shar_wnt_.tmp
  54. echo 'x - extracting mxgdb/utils.c (Text)'
  55. sed 's/^X//' << 'SHAR_EOF' > 'mxgdb/utils.c' &&
  56. static char rcsid[] = "$Id: utils.c,v 1.1.1.1 1991/05/16 21:42:53 jtsillas Exp $";
  57. X
  58. /*****************************************************************************
  59. X *
  60. X *  xdbx - X Window System interface to the dbx debugger
  61. X *
  62. X *  Copyright 1989 The University of Texas at Austin
  63. X *  Copyright 1990 Microelectronics and Computer Technology Corporation
  64. X *
  65. X *  Permission to use, copy, modify, and distribute this software and its
  66. X *  documentation for any purpose and without fee is hereby granted,
  67. X *  provided that the above copyright notice appear in all copies and that
  68. X *  both that copyright notice and this permission notice appear in
  69. X *  supporting documentation, and that the name of The University of Texas
  70. X *  and Microelectronics and Computer Technology Corporation (MCC) not be 
  71. X *  used in advertising or publicity pertaining to distribution of
  72. X *  the software without specific, written prior permission.  The
  73. X *  University of Texas and MCC makes no representations about the 
  74. X *  suitability of this software for any purpose.  It is provided "as is" 
  75. X *  without express or implied warranty.
  76. X *
  77. X *  THE UNIVERSITY OF TEXAS AND MCC DISCLAIMS ALL WARRANTIES WITH REGARD TO
  78. X *  THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
  79. X *  FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF TEXAS OR MCC BE LIABLE FOR
  80. X *  ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
  81. X *  RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
  82. X *  CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  83. X *  CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  84. X *
  85. X *  Author:      Po Cheung
  86. X *  Created:       March 10, 1989
  87. X *
  88. X *****************************************************************************/
  89. X
  90. /*  utils.c
  91. X *
  92. X *    Contain common routines used by other functions.
  93. X *
  94. X *    TextGetLastPos():        Get the last insertion position of text.
  95. X *    TextPositionToLine():     Return text position give a line number.
  96. X *    LineToStopNo():        Return the stop number given a line number.
  97. X *    DisableWindowResize():    Fix the size of a window inside vpane.
  98. X *    bell():            Ring the bell.
  99. X *    concat():            Concatenate two strings together
  100. X */
  101. X
  102. #include "global.h"
  103. #include <Xm/Xm.h>
  104. #include <Xm/Text.h>
  105. X
  106. X
  107. XXmTextPosition TextGetLastPos(w)
  108. X    Widget w;
  109. {
  110. X    Arg    args[MAXARGS];
  111. X    XmTextPosition cursorPos;
  112. X
  113. X    XtSetArg(args[0], XmNcursorPosition, &cursorPos);
  114. X    XtGetValues(w, args, 1);
  115. X    return(cursorPos);    
  116. }
  117. X
  118. /*
  119. X * Get the line number where the caret is.
  120. X */
  121. int TextPositionToLine(pos)
  122. XXmTextPosition pos;
  123. {
  124. X    int line;
  125. X
  126. X    if (displayedFile) {
  127. X    if (pos >= displayedFile->linepos[displayedFile->topline]) {
  128. X        for (line = displayedFile->topline;
  129. X         pos > displayedFile->linepos[line]; line++);
  130. X        return (pos == displayedFile->linepos[line] ? line : line-1);
  131. X    }
  132. X    else {
  133. X        for (line = 1; pos > displayedFile->linepos[line]; line++);
  134. X        return (pos == displayedFile->linepos[line] ? line : line-1);
  135. X    }
  136. X    }
  137. X    else
  138. X        return 0;
  139. }
  140. X
  141. /*
  142. X *  Return the stop number associated with a given line number.
  143. X *  Return 0 if stop number not found.
  144. X */
  145. int LineToStop_no(line)
  146. int line;
  147. {
  148. X    int i;
  149. X
  150. X    for (i=1; i <= nstops; i++)
  151. X        if (stops[i].line == line && stops[i].file && displayedFile &&
  152. X            !strcmp(stops[i].file, displayedFile->pathname)) {
  153. X            return i;
  154. X        }
  155. X    return 0;
  156. }
  157. X
  158. void bell(volume)
  159. int volume;
  160. {
  161. X    XBell(XtDisplay(toplevel), volume);
  162. }
  163. X
  164. /* append string s2 to end of string s1 and return the result */
  165. X
  166. char *concat(s1, s2)
  167. char *s1, *s2;
  168. {
  169. X    if (s2) {
  170. X        if (s1 == NULL) {
  171. X            s1 = XtMalloc((strlen(s2)+1)*sizeof(char));
  172. X            strcpy(s1, s2);
  173. X        }
  174. X        else {
  175. X            s1 = XtRealloc(s1, strlen(s1)+strlen(s2)+2);
  176. X            strcat(s1, s2);
  177. X        }
  178. X    }
  179. #if 0    /*(PW)4DEC90 : bug ! if s2 is null, there is no reason to set s1 to 0 */
  180. X    else
  181. X        s1 = NULL;
  182. #endif
  183. X    return (s1);
  184. }
  185. SHAR_EOF
  186. chmod 0664 mxgdb/utils.c ||
  187. echo 'restore of mxgdb/utils.c failed'
  188. Wc_c="`wc -c < 'mxgdb/utils.c'`"
  189. test 3928 -eq "$Wc_c" ||
  190.     echo 'mxgdb/utils.c: original size 3928, current size' "$Wc_c"
  191. rm -f _shar_wnt_.tmp
  192. fi
  193. # ============= mxgdb/gdb_handler.c ==============
  194. if test -f 'mxgdb/gdb_handler.c' -a X"$1" != X"-c"; then
  195.     echo 'x - skipping mxgdb/gdb_handler.c (File already exists)'
  196.     rm -f _shar_wnt_.tmp
  197. else
  198. > _shar_wnt_.tmp
  199. echo 'x - extracting mxgdb/gdb_handler.c (Text)'
  200. sed 's/^X//' << 'SHAR_EOF' > 'mxgdb/gdb_handler.c' &&
  201. /* $Id: gdb_handler.c,v 1.5 1991/07/11 21:14:13 jtsillas Exp $ */
  202. X
  203. /*****************************************************************************
  204. X *
  205. X *  xdbx - X Window System interface to the dbx debugger
  206. X *
  207. X *  Copyright 1989 The University of Texas at Austin
  208. X *  Copyright 1990 Microelectronics and Computer Technology Corporation
  209. X *
  210. X *  Permission to use, copy, modify, and distribute this software and its
  211. X *  documentation for any purpose and without fee is hereby granted,
  212. X *  provided that the above copyright notice appear in all copies and that
  213. X *  both that copyright notice and this permission notice appear in
  214. X *  supporting documentation, and that the name of The University of Texas
  215. X *  and Microelectronics and Computer Technology Corporation (MCC) not be 
  216. X *  used in advertising or publicity pertaining to distribution of
  217. X *  the software without specific, written prior permission.  The
  218. X *  University of Texas and MCC makes no representations about the 
  219. X *  suitability of this software for any purpose.  It is provided "as is" 
  220. X *  without express or implied warranty.
  221. X *
  222. X *  THE UNIVERSITY OF TEXAS AND MCC DISCLAIMS ALL WARRANTIES WITH REGARD TO
  223. X *  THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
  224. X *  FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF TEXAS OR MCC BE LIABLE FOR
  225. X *  ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
  226. X *  RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
  227. X *  CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  228. X *  CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  229. X *
  230. X *  Author:      Po Cheung
  231. X *  Created:       March 10, 1989
  232. X * 
  233. X *****************************************************************************
  234. X * 
  235. X *  xxgdb - X Window System interface to the gdb debugger
  236. X *  
  237. X *     Copyright 1990 Thomson Consumer Electronics, Inc.
  238. X *  
  239. X *  Permission to use, copy, modify, and distribute this software and its
  240. X *  documentation for any purpose and without fee is hereby granted,
  241. X *  provided that the above copyright notice appear in all copies and that
  242. X *  both that copyright notice and this permission notice appear in
  243. X *  supporting documentation, and that the name of Thomson Consumer
  244. X *  Electronics (TCE) not be used in advertising or publicity pertaining
  245. X *  to distribution of the software without specific, written prior
  246. X *  permission.  TCE makes no representations about the suitability of
  247. X *  this software for any purpose.  It is provided "as is" without express
  248. X *  or implied warranty.
  249. X *
  250. X *  TCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  251. X *  ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT
  252. X *  SHALL TCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES
  253. X *  OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  254. X *  WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
  255. X *  ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  256. X *  SOFTWARE.
  257. X *
  258. X *  Adaptation to GDB:  Pierre Willard
  259. X *  XXGDB Created:       December, 1990
  260. X *
  261. X *****************************************************************************
  262. X
  263. /*  gdb_handler.c
  264. X *
  265. X *    WARNING : gdb_handler.c is included by handler.c for GDB.
  266. X *
  267. X *    Contain action handlers for the parser to invoke upon a dbx command.
  268. X *
  269. X *    updown_handler():        Update file, line label, updown arrow position.
  270. X *    debug_handler():        Check directory use list, display main source file.
  271. X *    pwd_handler():        Update current working directory.
  272. X *    search_handler():        Adjust source file to display matched line.
  273. X *    display_info_handler(): Update display window.
  274. X *    break_handler():        Place stop sign on line or function or address specified.
  275. X *    info_dir_handler():    Update search directory list. 
  276. X *    directory_handler():    Update search directory list. 
  277. X *    list_handler():        Adjust source file to display result. 
  278. X *    info_line_handler():    Update current file. 
  279. X *    clear_handler():        Remove stop sign.
  280. X *    display_handler():    Update display window.
  281. X *    info_break_handler():    Update stop signs.
  282. X *    cd_handler():            Record current working directory.
  283. X *    frame_curr_handler():    Update current function name.
  284. X *    exec_handler():        Update file, line label, arrow position.
  285. X *    done_handler():        Progrm execution completed, clear breakpoints
  286. X *    source_handler():        Exec commands of source file specified.
  287. X *    query_dbx_echo():        Send command with echo on.
  288. X */
  289. X
  290. #include <Xm/Xm.h>
  291. #include <Xm/Label.h>
  292. #include <Xm/PushB.h>
  293. X
  294. #ifdef SYSV 
  295. #   include <signal.h>
  296. #endif
  297. X
  298. void query_dbx_echo();
  299. X
  300. /*  
  301. X *  Display an outlined arrow to locate the calling routine in a stack
  302. X *  frame.  BSD and SUN dbx have slightly different output semantics here.
  303. X *  The appropriate file with the calling routine is displayed and the
  304. X *  file variable is set accordingly.
  305. X */
  306. void updown_handler()
  307. {
  308. X    char command[LINESIZ], *func, *file;
  309. X    int     line;
  310. X
  311. X    line = Token.line;
  312. X    func = XtNewString(Token.func);
  313. #ifdef MIPS
  314. X    LoadCurrentFile();
  315. #endif
  316. #ifdef BSD
  317. X    file = GetPathname(Token.file);
  318. #else
  319. X    if (line <= 0) line = 1;
  320. X    LoadCurrentFile();
  321. X    if (displayedFile)
  322. X    file = displayedFile->pathname;
  323. #endif
  324. X
  325. X    if (line <= 0 || func == NULL || file == NULL)
  326. X        {
  327. X        XtFree(func);
  328. X        return;
  329. X        }
  330. X        
  331. X    if (displayedFile && strcmp(file, displayedFile->pathname)) {
  332. X    LoadFile(file);
  333. X    }
  334. X    updown.line = line;
  335. X    strcpy(updown.func, func);
  336. X    if (displayedFile)
  337. X        strcpy(updown.file, displayedFile->pathname);
  338. X    AdjustText(line);
  339. X    XtFree(func);
  340. }
  341. X
  342. /* ARGSUSED */
  343. void debug_handler()
  344. {
  345. X    /* debug_handler is executed at start-up and with 'symbol-file' command */
  346. X    query_dbx("set screensize 0\n");
  347. X    query_dbx("set prettyprint on\n");
  348. X    query_dbx("info directories\n");
  349. X    displayedFile = NULL;        /* force reloading of source file */
  350. X     /* here we use query_dbx_echo instead of query_dbx so that any
  351. X     error message will be displayed ! */
  352. X     
  353. X     query_dbx_echo("list ,main\n");    /* tell gdb to use main file 
  354. X                                 and get line number of main(). (,main will end at main) */
  355. X   
  356. X    if (LoadCurrentFile() == 0)
  357. X        {
  358. X        arrow.line = 0;            /* clear arrow sign */
  359. X        updown.line = 0;        /* clear updown sign */
  360. X        bomb.line = 0;            /* clear bomb sign */
  361. X        UpdateArrow(displayedFile);
  362. X        UpdateUpdown(displayedFile);
  363. X        UpdateBomb(displayedFile);
  364. X        ClearStops();
  365. X        UpdateStops(displayedFile, -1);
  366. X        }
  367. X        
  368. X    UpdateMessageWindow("Ready for execution", NULL);
  369. X    query_dbx("display\n");        /* clear display window */
  370. }
  371. X
  372. /* ARGSUSED */
  373. void pwd_handler(s)
  374. char *s;
  375. {
  376. X    strcpy(cwd, (char *)strtok(s, "\n"));
  377. }
  378. X
  379. /* ARGSUSED */
  380. void search_handler()
  381. {
  382. X    AdjustText(Token.line);
  383. }
  384. X
  385. /* ARGSUSED */
  386. /*  Show output on the display window.
  387. X *  If output is null but the display window is managed, replace contents of
  388. X *  the display window with the null string.
  389. X */
  390. void display_info_handler()
  391. {
  392. X    Arg        args[MAXARGS];
  393. X    Cardinal    n;
  394. X
  395. X    if (!Token.display || !strcmp(Token.display, "")) {
  396. X    if (!XtIsManaged(displayFD))
  397. X        return;
  398. X    else {
  399. X        XtFree(Token.display);
  400. X        Token.display = XtNewString("");
  401. X    }
  402. X    }
  403. X
  404. X    n = 0;
  405. X    XtSetArg(args[n], XmNvalue, (XtArgVal) Token.display);        n++;
  406. X    XtSetValues(displayWindow, args, n);
  407. X    XtFree(Token.display);
  408. X    Token.display = 0;        /*(PW)14JAN91 */
  409. }
  410. X
  411. /*  Place a stop sign next to the line specified on the source file window 
  412. X *  if it is to be viewable.
  413. X */
  414. void break_handler()
  415. {
  416. char * file;
  417. int line;
  418. int stop;
  419. X
  420. X    if (Token.stop == 0 || Token.line == 0 || Token.file == 0)
  421. X    return;
  422. X    
  423. X    line = Token.line;
  424. X    stop = Token.stop;
  425. X    
  426. X    if (Token.stop >= 256)    /* see MAXSTOPS in signs.c */
  427. X        {
  428. X        fprintf(stderr,"Too many breakpoints\n");
  429. X        return;
  430. X        }
  431. X    
  432. X    /* load & display file if none is displayed */
  433. X    
  434. X    file = GetPathname(Token.file);
  435. X    
  436. X    if (file == NULL)
  437. X        return;        /* (PW)11JAN91 */
  438. X        
  439. X    if (displayedFile == NULL)
  440. X        {
  441. X        LoadFile(file);
  442. X        AdjustText(line);
  443. X        }
  444. X        
  445. X    stops[stop].file = file;
  446. X    stops[stop].line = line;
  447. X    stops[stop].tag = 0;
  448. X    nstops = stop;
  449. X
  450. X    /* display breakpoint sign if file is displayed */
  451. X    
  452. X    if (displayedFile)
  453. X        {
  454. X        if (!strcmp(file, displayedFile->pathname))    
  455. X            DisplayStop(displayedFile, line);
  456. X        }
  457. }
  458. X
  459. /*  info directories 
  460. X */
  461. void info_dir_handler()
  462. {
  463. X    if (Token.file)
  464. X        MakeDirList(Token.file);
  465. }
  466. X
  467. /* ARGSUSED */
  468. void directory_handler(output)
  469. char *output;
  470. {
  471. X    /* Note : for GDB, the 'directory' command with no
  472. X    parameter will reset search directories to current 
  473. X    directory only. GDB requires confirmation */
  474. X    
  475. X    query_dbx("info directories\n");    
  476. }
  477. X
  478. void list_handler()
  479. {
  480. X    int     line;
  481. X    
  482. X    line = Token.line;
  483. X
  484. X    if (line)
  485. X        {
  486. X        /* We will display the last line listed. 
  487. X        Since we used 'list ,main' we will effectively display main in that case. */
  488. X
  489. X        LoadCurrentFile(line);
  490. X        AdjustText(line);
  491. X        }
  492. X    else
  493. X        {
  494. X        AppendDialogText("Error list command\n");
  495. X        bell(0);
  496. X        }
  497. }
  498. X
  499. /* ARGSUSED */
  500. void info_line_handler()     /* Command was 'info line' */
  501. {
  502. X    if (Token.file)
  503. X    strcpy(CurrentFile, Token.file);
  504. X    else
  505. X    strcpy(CurrentFile, "");
  506. }
  507. X
  508. /*
  509. X *  Clear handler remove the stop specified and undisplayed the stopsign
  510. X *  if it's visible.
  511. X *  It calls the dbx status command to find out what stops are left, and
  512. X *  then update the array of stops accordingly.
  513. X */
  514. /* ARGSUSED */
  515. X
  516. void clear_handler()
  517. {
  518. X    query_dbx("info break\n");    /* update breakpoints */
  519. }
  520. X
  521. void display_handler()    /* display or undisplay */
  522. {
  523. X    query_dbx("display\n");    /* update display */
  524. }
  525. X
  526. /* 
  527. (gdb) info break
  528. Breakpoints:
  529. Num Enb   Address    Where
  530. #1   y  0x000022f4  in main (pw.c line 34)
  531. #2   y  0x000022a0  in foo (pw.c line 5)
  532. (gdb) info break
  533. No breakpoints.
  534. */
  535. X
  536. void info_break_handler(output_string)
  537. char *output_string;
  538. {
  539. int  i; 
  540. int     line;
  541. char c;
  542. X
  543. X
  544. X    if (!output_string)
  545. X        return;
  546. X        
  547. X    while(*output_string)
  548. X        {
  549. X        if (*(output_string++) == '#')
  550. X            {
  551. X            if (sscanf(output_string, "%d %c", &i,&c) == 2)
  552. X                if (i > 0 && i <= nstops && stops[i].line > 0 &&
  553. X                    (c == 'y' || c == 'o')) 
  554. X                    stops[i].tag = 1;
  555. X            }
  556. X        }
  557. X        
  558. X    for (i=1; i<=nstops; i++)
  559. X    if (stops[i].line > 0)
  560. X        {
  561. X        if (stops[i].tag)
  562. X            stops[i].tag = 0;
  563. X        else 
  564. X            {
  565. X
  566. X            line = stops[i].line;
  567. X            stops[i].line = 0;
  568. X            stops[i].file = NULL;
  569. X            if (LineToStop_no(line) == 0)
  570. X                RemoveStop(line);
  571. X            }
  572. X        }
  573. }
  574. X
  575. /* ARGSUSED */
  576. void cd_handler(s)
  577. char *s;
  578. {
  579. X    strcpy(cwd,s);
  580. }
  581. X
  582. /* this handler justs update the function name.
  583. Because the function name is not always displayed
  584. after next,step ... */
  585. X
  586. static char* funcname = 0;
  587. X
  588. void frame_curr_handler()
  589. {
  590. X    if (Token.func == NULL)
  591. X        return;
  592. X        
  593. X    if (funcname)
  594. X        {
  595. X        XtFree(funcname);
  596. X        funcname = 0;
  597. X        }
  598. X        
  599. X    funcname = XtNewString(Token.func);
  600. }
  601. X
  602. /*  Handle dbx output of run, cont, next, step, return commands.
  603. X *  Result of output parsing is returned in a set of tokens.
  604. X *
  605. X *    If message is not 0, this is an important message and should
  606. X *    be displayed instead of Token.mesg.
  607. X *    This message will hold the Bus error and segmentation violation errors.
  608. X *    signal is the signal number received (if any).
  609. X */
  610. void exec_handler(message,signal)
  611. char *message;
  612. int signal;
  613. {
  614. X    int     line, status;
  615. X    char *func;
  616. X
  617. X    /* Print "stopped in ..." line in message window 
  618. X     * Adjust text displayed
  619. X     */
  620. X    if (Token.line == 0) 
  621. X        return; 
  622. X        
  623. X    if (message)
  624. X        UpdateMessageWindow(message, NULL);
  625. X    else
  626. X        UpdateMessageWindow(Token.mesg, NULL);
  627. X        
  628. X    line = Token.line;
  629. X    func = (Token.func) ? XtNewString(Token.func) : 0;
  630. X    
  631. X    if (Token.file)
  632. X    status = LoadFile(Token.file);
  633. X
  634. X    display_info_handler();        /* uses Token.display ! */
  635. X
  636. X    /* because of tbreak, we have to call info break here */
  637. X    
  638. X    query_dbx("info break\n");    /* update breakpoints */
  639. X
  640. X    if (func == NULL)
  641. X        {
  642. X        query_dbx("frame\n"); /* this will just update funcname (see frame_curr_handler) */
  643. X        func = funcname;
  644. X        if (func == NULL)
  645. X            return;
  646. X        funcname = 0;    /* tell frame_curr_handler WE are going to XtFree it */
  647. X        }
  648. X        
  649. X    arrow.line = line;            /* update arrow sign position */
  650. X    strcpy(arrow.func, func);
  651. X    
  652. X    updown.line = 0;            /* remove updown, if any */
  653. X    if (displayedFile) {
  654. X        strcpy(arrow.file, displayedFile->pathname);
  655. X    }
  656. X    
  657. X    /* Display bomb sign if segmentation fault occurs in source code */
  658. X    
  659. X    if (status != -1 && message && signal == SIGSEGV) {
  660. X    arrow.line = 0;
  661. X    bomb.line = line;
  662. X    if (func)
  663. X    strcpy(bomb.func, func);
  664. X    if (displayedFile) strcpy(bomb.file, displayedFile->pathname);
  665. X    }
  666. X    else
  667. X    bomb.line = 0;
  668. X
  669. X    AdjustText(line);
  670. X    XtFree(func);
  671. }
  672. X
  673. /*  Remove all the arrow and updown signs, print message, then 
  674. X *  change the file variable to the file name displayed.
  675. X */
  676. void done_handler(message,signal)
  677. char *message;
  678. int signal;
  679. {
  680. X    char command[LINESIZ];
  681. X
  682. X    arrow.line = 0;
  683. X    updown.line = 0;
  684. X    UpdateArrow(displayedFile);
  685. X    UpdateUpdown(displayedFile);
  686. X    UpdateMessageWindow("Ready for execution", NULL);
  687. }
  688. X
  689. /* WARNING : source_handler() is NOT called by the parser.
  690. It is called by gdb_source_command() in gdb_parser.c.
  691. This is because 'source' command is NEVER sent to gdb,
  692. instead xxgdb sends the commands in the specified file
  693. one by one. */
  694. X
  695. void source_handler()
  696. {
  697. char *file;
  698. FILE *fp;
  699. char s[LINESIZ];
  700. X
  701. X    if (!Token.file || !strcmp(Token.file, ""))
  702. X        {
  703. X        XtFree(Token.file);
  704. X        Token.file = XtNewString(".gdbinit");        /* default is .gdbinit */
  705. X        }
  706. X        
  707. X    file = GetPathname(Token.file);
  708. X    
  709. X    if (file == NULL)
  710. X        return;        /* (PW)11JAN91 */
  711. X
  712. X    if (fp = fopen(file, "r"))
  713. X        {
  714. X        while (fgets(s, LINESIZ, fp))
  715. X            {
  716. X            /* DO NOT SEND \n and Take care of source command */
  717. X            if ((*s != '#') && strcmp(s,"\n"))
  718. X              {
  719. X                if ((!gdb_source_command(s,TRUE)) 
  720. X                && (!gdb_define_command(s,fp)))    
  721. X                {
  722. X                write_dbx(s);
  723. X                insert_command(s);
  724. X                AppendDialogText(s);
  725. X              }
  726. X                Prompt = False;
  727. X                while (!Prompt)
  728. X                    read_dbx();
  729. X                }
  730. X            }
  731. X        close((int)fp);
  732. X        }
  733. }
  734. X
  735. /*  Sends a command to dbx and read the corresponding output, directly
  736. X *  invoking the Xt input procedure, read_dbx().
  737. X *
  738. X *    Same as query_dbx() in dbx.c except that Echo = True.
  739. X */
  740. void query_dbx_echo(command)
  741. char *command;
  742. {
  743. X    write_dbx(command);
  744. X    insert_command(command);
  745. X
  746. X    Echo = True;
  747. X    Prompt = False;
  748. X    while (!Prompt)
  749. X        read_dbx();
  750. X
  751. X    Parse = True;    /* Always reset Parse and Echo to True */
  752. X    Echo = True;
  753. }
  754. X
  755. Widget helpbuttons[NHELPBUTTONS];
  756. char callbackargs[NHELPBUTTONS][40];
  757. Widget helplabels[NHELPLABELS];
  758. char helpstack[5][40];
  759. int helpstackidx=0;
  760. char help_buttons_use_flag = 0;
  761. X
  762. void HelpButtonActivate(w, helpname, call_data)
  763. X     Widget w;
  764. X     char *helpname;
  765. X     XmPushButtonCallbackStruct *call_data;
  766. {
  767. X  char command[256];
  768. X
  769. X  strcpy(helpstack[helpstackidx++], helpname);
  770. X  sprintf(command, "help %s\n", helpname);
  771. X  help_buttons_use_flag = 1;
  772. X  query_dbx(command);
  773. X  help_buttons_use_flag = 0;
  774. }
  775. X
  776. void help_handler(command,output)
  777. char *command;
  778. char *output;
  779. {
  780. X  Arg args[10];
  781. X  int index=0;
  782. X  int nlabel=0;
  783. X  int nbutton=0;
  784. X  Boolean isbutton;
  785. X  char buttonstring[256];
  786. X  char labelstring[256];
  787. X  char *useforlabel;
  788. X  int buttonindex=0;
  789. X  int labelindex=0;
  790. X  int atline=0;
  791. X  Cardinal nargs=0;
  792. X
  793. X
  794. X
  795. X  if(!XtIsManaged(helpFD))XtManageChild(helpFD);
  796. X  if(help_buttons_use_flag == 0) 
  797. X    helpstackidx = 0;
  798. X
  799. X  XtUnmanageChild(helpselectscroll);
  800. X
  801. X  if(helpstackidx > 0)
  802. X    XtManageChild(helpupbutton);
  803. X
  804. X  if(helpstackidx < 1) 
  805. X    XtUnmanageChild(helpupbutton);
  806. X
  807. X
  808. X  for(nlabel = 0; nlabel < NHELPLABELS; nlabel++)
  809. X    if(helplabels[nlabel] && XtIsManaged(helplabels[nlabel]))
  810. X      XtUnmanageChild(helplabels[nlabel]);
  811. X  nlabel = 0;
  812. X        
  813. X  for(nbutton = 0; nbutton < NHELPBUTTONS; nbutton++)
  814. X    if(helpbuttons[nbutton] && XtIsManaged(helpbuttons[nbutton]))
  815. X      XtUnmanageChild(helpbuttons[nbutton]);
  816. X  nbutton = 0;
  817. X        
  818. X  while(output[index])
  819. X    {
  820. X      buttonindex = 0;
  821. X      labelindex=0;
  822. X      isbutton = False;
  823. X      while(output[index] != '\n')
  824. X    {
  825. X      if(isbutton == False)
  826. X        buttonstring[buttonindex++] = output[index];
  827. X      else
  828. X        labelstring[labelindex++] = output[index];
  829. X      index++;
  830. X      if((output[index] == '-') && (output[index+1] == '-'))
  831. X        {
  832. X          isbutton = True;
  833. X          buttonstring[buttonindex-1] = '\0';
  834. X        }
  835. X    }
  836. X      if(isbutton == True)
  837. X    {
  838. X      labelstring[labelindex] = '\0';
  839. X      useforlabel = labelstring;
  840. X      strcpy(callbackargs[nbutton], buttonstring);
  841. X
  842. X      XtSetArg(args[0], XmNlabelString, 
  843. X           XmStringCreateLtoR(buttonstring, 
  844. X                      XmSTRING_DEFAULT_CHARSET));
  845. X      XtSetArg(args[1], XmNleftAttachment, XmATTACH_FORM);
  846. X      XtSetArg(args[2], XmNtopAttachment, XmATTACH_WIDGET);
  847. X      XtSetArg(args[3], XmNhighlightOnEnter, True);
  848. X      if(!nbutton)
  849. X        XtSetArg(args[4], XmNtopWidget, helplabels[nlabel-1]);
  850. X      else
  851. X        XtSetArg(args[4], XmNtopWidget, helpbuttons[nbutton-1]);
  852. X      if(!helpbuttons[nbutton])
  853. X        {
  854. X          helpbuttons[nbutton] = 
  855. X        XtCreateManagedWidget("helpbutton", xmPushButtonWidgetClass,
  856. X                      helpselectscroll, args, 5);
  857. X        }
  858. X      else
  859. X        {
  860. X          XtRemoveCallback(helpbuttons[nbutton], XmNactivateCallback,
  861. X                   HelpButtonActivate, callbackargs[nbutton]);
  862. X          XtSetValues(helpbuttons[nbutton], args, 5);
  863. X          XtManageChild(helpbuttons[nbutton]);
  864. X        }
  865. X      XtAddCallback(helpbuttons[nbutton], XmNactivateCallback,
  866. X            HelpButtonActivate, callbackargs[nbutton]);
  867. X      
  868. X      nbutton++;
  869. X    }
  870. X      else
  871. X    {
  872. X      buttonstring[buttonindex] = '\0';
  873. X      useforlabel = buttonstring;
  874. X    }
  875. X      XtSetArg(args[0], XmNlabelString, 
  876. X           XmStringCreateLtoR(useforlabel, 
  877. X                  XmSTRING_DEFAULT_CHARSET));
  878. X      XtSetArg(args[1], XmNrightAttachment, XmATTACH_FORM);
  879. X
  880. X      if(isbutton == True)
  881. X    {
  882. X      XtSetArg(args[2], XmNleftAttachment, XmATTACH_WIDGET);
  883. X      XtSetArg(args[3], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET);
  884. X      XtSetArg(args[4], XmNbottomWidget, helpbuttons[nbutton-1]);
  885. X      XtSetArg(args[5], XmNleftWidget, helpbuttons[nbutton-1]);
  886. X      XtSetArg(args[6], XmNtopAttachment, XmATTACH_NONE);
  887. X      XtSetArg(args[7], XmNalignment, XmALIGNMENT_BEGINNING);
  888. X      nargs = 8;
  889. X    }
  890. X      else
  891. X    {
  892. X      XtSetArg(args[2], XmNleftAttachment, XmATTACH_FORM);
  893. X      XtSetArg(args[3], XmNbottomAttachment, XmATTACH_NONE);
  894. X      XtSetArg(args[4], XmNalignment, XmALIGNMENT_CENTER);
  895. X      if(!nlabel) 
  896. X        {
  897. X          XtSetArg(args[5], XmNtopAttachment, XmATTACH_FORM);
  898. X          nargs = 6;
  899. X        }
  900. X      else
  901. X        {
  902. X          XtSetArg(args[5], XmNtopAttachment, XmATTACH_WIDGET);
  903. X          XtSetArg(args[6], XmNtopWidget, helplabels[nlabel-1]);
  904. X          nargs = 7;
  905. X        }
  906. X    }
  907. X      if(!helplabels[nlabel])
  908. X    helplabels[nlabel] = XtCreateManagedWidget("helplabel",
  909. X                           xmLabelWidgetClass,
  910. X                           helpselectscroll,
  911. X                           args, nargs);
  912. X      else
  913. X    {
  914. X      XtSetValues(helplabels[nlabel], args, nargs);
  915. X      XtManageChild(helplabels[nlabel]);
  916. X    }
  917. X      nlabel++;
  918. X      index++;
  919. X      atline++;
  920. X    }
  921. X  XtManageChild(helpselectscroll);
  922. }
  923. X
  924. X
  925. X
  926. SHAR_EOF
  927. chmod 0664 mxgdb/gdb_handler.c ||
  928. echo 'restore of mxgdb/gdb_handler.c failed'
  929. Wc_c="`wc -c < 'mxgdb/gdb_handler.c'`"
  930. test 18708 -eq "$Wc_c" ||
  931.     echo 'mxgdb/gdb_handler.c: original size 18708, current size' "$Wc_c"
  932. rm -f _shar_wnt_.tmp
  933. fi
  934. # ============= mxgdb/Mxgdb.ad ==============
  935. if test -f 'mxgdb/Mxgdb.ad' -a X"$1" != X"-c"; then
  936.     echo 'x - skipping mxgdb/Mxgdb.ad (File already exists)'
  937.     rm -f _shar_wnt_.tmp
  938. else
  939. > _shar_wnt_.tmp
  940. echo 'x - extracting mxgdb/Mxgdb.ad (Text)'
  941. sed 's/^X//' << 'SHAR_EOF' > 'mxgdb/Mxgdb.ad' &&
  942. Mxgdb*allowShellResize:        True
  943. Mxgdb*vpane.sashWidth:    30
  944. Mxgdb*fileSel.borderWidth:    1
  945. Mxgdb*fileWindow.height:    15
  946. Mxgdb*fileLabel.borderWidth:    0
  947. Mxgdb*fileLabel.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  948. Mxgdb*lineLabel.borderWidth:    0
  949. Mxgdb*lineLabel.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  950. Mxgdb*helpbutton.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  951. Mxgdb*fileCButton.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  952. Mxgdb*filePbutton.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  953. Mxgdb*searchPbutton.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  954. Mxgdb*helpPbutton.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  955. Mxgdb*quitPbutton.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  956. Mxgdb*commandsCButton.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  957. Mxgdb*runningCB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  958. Mxgdb*dataCB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  959. Mxgdb*breakpointsCB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  960. Mxgdb*stackCB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  961. Mxgdb*infoCB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  962. Mxgdb*runPMB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  963. Mxgdb*contPMB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  964. Mxgdb*nextPMB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  965. Mxgdb*stepPMB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  966. Mxgdb*finishPMB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  967. Mxgdb*printPMB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  968. Mxgdb*displayPMB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  969. Mxgdb*undisplayPMB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  970. Mxgdb*breakPMB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  971. Mxgdb*clearPMB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  972. Mxgdb*tbreakPMB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  973. Mxgdb*upPMB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  974. Mxgdb*downPMB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  975. Mxgdb*ilocalsPMB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  976. Mxgdb*iargsPMB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  977. Mxgdb*istackPMB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  978. Mxgdb*helpPMB.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  979. Mxgdb*helpCButton.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  980. Mxgdb*helpquitbutton.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  981. Mxgdb*helpquitbutton.leftOffset:    5
  982. Mxgdb*helpquitbutton.topOffset:    5
  983. Mxgdb*helpupbutton.rightOffset:    5
  984. Mxgdb*helpupbutton.topOffset:    5
  985. Mxgdb*helpFD.borderWidth:    0
  986. Mxgdb*helpFD.shadowThickness:    0
  987. Mxgdb*scrollselect.topOffset:    40
  988. Mxgdb*scrollselect.bottomOffset:    5
  989. Mxgdb*scrollselect.leftOffset:    5
  990. Mxgdb*scrollselect.rightOffset:    5
  991. Mxgdb*scrollselect.height:    300
  992. Mxgdb*scrollselect.width:    400
  993. Mxgdb*sourceScroll.paneMinimum:    100
  994. Mxgdb*sourceForm.borderWidth:    0
  995. Mxgdb*sourceForm.shadowThickness:    0
  996. Mxgdb*sourceForm.width:        500
  997. Mxgdb*sourceWindow.borderWidth:    0
  998. Mxgdb*sourceWindow.highlightThickness:    0
  999. Mxgdb*sourceWindow.shadowThickness:    0
  1000. Mxgdb*sourceWindow.rows:        19
  1001. Mxgdb*sourceWindow.leftOffset:        50
  1002. Mxgdb*sourceWindow.rightOffset:        65    
  1003. Mxgdb*sourceWindow.marginWidth:    5
  1004. Mxgdb*sourceWindow.fontList:    6x13
  1005. Mxgdb*sourceWindow.translations: #override \
  1006. X    Shift<Btn1Down>,Shift<Btn1Up>: SelectWord() Update(warp) \n\
  1007. X    <Btn1Down>: SelectStart() \n\
  1008. X    <Btn1Motion>: SelectAdjust() \n\
  1009. X    <Btn1Up>: SelectEnd() Update(warp) \n\
  1010. X    <Key>osfUp: process-up() Update() \n\
  1011. X    <Key>osfDown: process-down() Update() \n\
  1012. X    <Key>osfLeft: backward-character() Update() \n\
  1013. X    <Key>osfRight: forward-character() Update() \n\
  1014. X    <Key>osfPageDown: next-page() Update(warp) \n\
  1015. X    <Key>osfPageUp:    previous-page() Update(warp) \n\
  1016. X    Ctrl<Key>osfPageUp:    page-left() Update(warp) \n\
  1017. X    Ctrl<Key>osfPageDown:    page-right() Update(warp) \n\
  1018. X    Ctrl<Key>osfBeginLine:    beginning-of-file() Update() \n\
  1019. X    Ctrl<Key>osfEndLine:    end-of-file() Update() 
  1020. Mxgdb*sourceForm.fractionBase:    100
  1021. Mxgdb*messageWindow.fontList:    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  1022. Mxgdb*messageWindow.height:    25
  1023. Mxgdb*dialogWindowSW.paneMinimum:    50
  1024. Mxgdb*dialogWindow.highlightOnEnter:    True
  1025. Mxgdb*dialogWindow.borderWidth:    1
  1026. Mxgdb*dialogWindow.highlightThickness:    2
  1027. Mxgdb*dialogWindow.shadowThickness:    2
  1028. Mxgdb*dialogWindow.height:    200
  1029. Mxgdb*dialogWindow.fontList:    6x13
  1030. Mxgdb*dialogWindow.translations:    #override \
  1031. X    Shift<Btn1Down>,Shift<Btn1Up>: SelectWord() \n\
  1032. X    <Btn1Down>:    SelectStart() \n\
  1033. X    <Btn1Motion>: SelectAdjust() \n\
  1034. X    <Btn1Up>:    SelectEnd()\n\
  1035. X    <Btn2Down>:    InsertSelection() copy-primary() \n\
  1036. X     Ctrl<Key>C:    SigInt()\n\
  1037. X     Ctrl<Key>D:    SigEof()\n\
  1038. X     Ctrl<Key>|:    SigQuit()\n\
  1039. X    <Key>osfBackSpace: InsertSpace() delete-previous-character() \n\
  1040. X     <Key>Return:    end-of-file() newline() Dispatch() \n\
  1041. X    <Key>:        end-of-file() self-insert()
  1042. Mxgdb*displayWindow.translations:    #override \n\
  1043. X        <Btn1Up>:    set-insertion-point() SelectVar() 
  1044. Mxgdb*displayWindow.height:        150
  1045. Mxgdb*displayWindow.borderWidth:    1
  1046. Mxgdb*displayWindow.highlightThickness:    1
  1047. Mxgdb*displayWindow.shadowThickness:    1
  1048. Mxgdb*displayWindow.scrollHorizontal:     False
  1049. Mxgdb*displayWindow.fontList:        6x13
  1050. Mxgdb*searchPopupShell.height:        150
  1051. Mxgdb*searchPopupShell.width:        300
  1052. Mxgdb*searchText.width:            265
  1053. Mxgdb*searchText.height:        35
  1054. Mxgdb*searchText.topPosition:        20
  1055. Mxgdb*searchText.leftPosition:        5
  1056. Mxgdb*searchText.rightPosition:        95
  1057. Mxgdb*searchText.fontList:        -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  1058. Mxgdb*searchText.highlightOnEnter:    True
  1059. Mxgdb*arrowL.width:            40
  1060. Mxgdb*arrowL.height:            40
  1061. Mxgdb*arrowL.bottomPosition:        90
  1062. Mxgdb*arrowL.leftPosition:        5
  1063. Mxgdb*arrowL.highlightOnEnter:    True
  1064. Mxgdb*arrowL.borderWidth:    0
  1065. Mxgdb*arrowL.shadowThickness:    3
  1066. Mxgdb*arrowR.width:            40
  1067. Mxgdb*arrowR.height:            40
  1068. Mxgdb*arrowR.bottomPosition:        90
  1069. Mxgdb*arrowR.leftPosition:        23
  1070. Mxgdb*arrowR.highlightOnEnter:    True
  1071. Mxgdb*arrowR.borderWidth:    0
  1072. Mxgdb*arrowR.shadowThickness:    3
  1073. Mxgdb*cancelButton.x:            135
  1074. Mxgdb*cancelButton.width:        65
  1075. Mxgdb*cancelButton.height:        40
  1076. Mxgdb*cancelButton.fontList:        -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  1077. Mxgdb*cancelButton.bottomPosition:    90
  1078. Mxgdb*cancelButton.rightPosition:    65
  1079. Mxgdb*cancelButton.highlightOnEnter:    True
  1080. Mxgdb*cancelButton.borderWidth:    0
  1081. Mxgdb*cancelButton.shadowThickness:    3
  1082. Mxgdb*helpButton.width:            65
  1083. Mxgdb*helpButton.height:        40
  1084. Mxgdb*helpButton.fontList:        -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  1085. Mxgdb*helpButton.bottomPosition:    90
  1086. Mxgdb*helpButton.rightPosition:        95
  1087. Mxgdb*helpButton.highlightOnEnter:    True
  1088. Mxgdb*helpButton.borderWidth:    0
  1089. Mxgdb*helpButton.shadowThickness:    3
  1090. Mxgdb*searchLabel.y:            5
  1091. Mxgdb*searchLabel.fontList:        -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
  1092. Mxgdb*searchLabel.borderWidth:        0
  1093. Mxgdb*searchLabel.leftPosition:        5
  1094. Mxgdb*searchLabel.topPosition:        5
  1095. Mxgdb*pageLbutton.bottomPosition:    99
  1096. Mxgdb*pageLbutton.topPosition:        88
  1097. Mxgdb*undispbutton.bottomPosition:    99
  1098. Mxgdb*undispbutton.topPosition:        88
  1099. Mxgdb*undispbutton.rightOffset:        32
  1100. Mxgdb*pageRbutton.bottomPosition:    88
  1101. Mxgdb*pageRbutton.topPosition:        77
  1102. Mxgdb*dispbutton.bottomPosition:    88
  1103. Mxgdb*dispbutton.topPosition:        77
  1104. Mxgdb*dispbutton.rightOffset:        32
  1105. Mxgdb*breakbutton.bottomPosition:    77
  1106. Mxgdb*breakbutton.topPosition:        66
  1107. Mxgdb*clearbutton.bottomPosition:    77
  1108. Mxgdb*clearbutton.topPosition:        66
  1109. Mxgdb*clearbutton.rightOffset:        32
  1110. Mxgdb*stepbutton.bottomPosition:    66
  1111. Mxgdb*stepbutton.topPosition:        55
  1112. Mxgdb*finishbutton.topPosition:        55
  1113. Mxgdb*finishbutton.bottomPosition:    66
  1114. Mxgdb*finishbutton.rightOffset:        32
  1115. Mxgdb*nextbutton.bottomPosition:    55
  1116. Mxgdb*nextbutton.topPosition:        44
  1117. Mxgdb*contbutton.topPosition:        44
  1118. Mxgdb*contbutton.bottomPosition:    55
  1119. Mxgdb*contbutton.rightOffset:        32
  1120. Mxgdb*printbutton.bottomPosition:    44
  1121. Mxgdb*printbutton.topPosition:        33
  1122. Mxgdb*printsbutton.bottomPosition:    44
  1123. Mxgdb*printsbutton.topPosition:        33
  1124. Mxgdb*printsbutton.rightOffset:        32
  1125. Mxgdb*downbutton.bottomPosition:    33
  1126. Mxgdb*downbutton.topPosition:        22
  1127. Mxgdb*argsbutton.bottomPosition:    33
  1128. Mxgdb*argsbutton.topPosition:        22
  1129. Mxgdb*argsbutton.rightOffset:        32
  1130. Mxgdb*upbutton.bottomPosition:        22
  1131. Mxgdb*upbutton.topPosition:        11
  1132. Mxgdb*localsbutton.bottomPosition:    22
  1133. Mxgdb*localsbutton.topPosition:        11
  1134. Mxgdb*localsbutton.rightOffset:        32
  1135. Mxgdb*stackbutton.bottomPosition:    11
  1136. Mxgdb*stackbutton.topPosition:        0
  1137. Mxgdb*runbutton.topPosition:        0
  1138. Mxgdb*runbutton.bottomPosition:        11
  1139. Mxgdb*runbutton.rightOffset:        32
  1140. SHAR_EOF
  1141. chmod 0664 mxgdb/Mxgdb.ad ||
  1142. echo 'restore of mxgdb/Mxgdb.ad failed'
  1143. Wc_c="`wc -c < 'mxgdb/Mxgdb.ad'`"
  1144. test 9020 -eq "$Wc_c" ||
  1145.     echo 'mxgdb/Mxgdb.ad: original size 9020, current size' "$Wc_c"
  1146. rm -f _shar_wnt_.tmp
  1147. fi
  1148. # ============= mxgdb/README ==============
  1149. if test -f 'mxgdb/README' -a X"$1" != X"-c"; then
  1150.     echo 'x - skipping mxgdb/README (File already exists)'
  1151.     rm -f _shar_wnt_.tmp
  1152. else
  1153. > _shar_wnt_.tmp
  1154. echo 'x - extracting mxgdb/README (Text)'
  1155. sed 's/^X//' << 'SHAR_EOF' > 'mxgdb/README' &&
  1156. X
  1157. 7-16-91
  1158. X
  1159. This is an alpha release of a Motif translation of xxgdb.
  1160. During translation alot has been changed to fit the Motif style
  1161. and my own personal preference. You may not agree with some of the
  1162. changes and I ask that you let me know; I'll listen at the very least.
  1163. X
  1164. A bug which is in this version and which I have no time to fix
  1165. is with the handling of the vertical scroll bar for the source 
  1166. window. Some source files may cause the scroll bar to fail. If you
  1167. notice this problem please let me know and give some details as 
  1168. to how you found it.
  1169. X
  1170. I am ready to make additions and changes to the GUI. I am thinking of
  1171. adding a vertically split source window with one window containing C code 
  1172. and the other containing corresponding _assembly code_. This sounds
  1173. like a very neat feature but I'm wondering how useful.
  1174. X
  1175. The 'display' window command could also be spruced up. Send comments on
  1176. this. 
  1177. X
  1178. When writing GUI's its a big help if you know what the final look will be
  1179. before you start so I am eager to hear from people who wish to see a
  1180. particular look. 
  1181. X
  1182. I have included a very big Mxgdb.ad resource file so that you can customize
  1183. lots of stuff. This file will get froxen into the source in the beta-version.
  1184. X
  1185. Enjoy.
  1186. X
  1187. -Jim.
  1188. SHAR_EOF
  1189. chmod 0644 mxgdb/README ||
  1190. echo 'restore of mxgdb/README failed'
  1191. Wc_c="`wc -c < 'mxgdb/README'`"
  1192. test 1231 -eq "$Wc_c" ||
  1193.     echo 'mxgdb/README: original size 1231, current size' "$Wc_c"
  1194. rm -f _shar_wnt_.tmp
  1195. fi
  1196. rm -f _shar_seq_.tmp
  1197. echo You have unpacked the last part
  1198. exit 0
  1199. --
  1200.  == James Tsillas                    Bull HN Information Systems Inc. ==
  1201.  == (508) 294-2937                   300 Concord Road   826A          ==
  1202.  == jtsillas@bubba.ma30.bull.com     Billerica, MA 01821              ==
  1203.  ==                                                                   ==
  1204.  == The opinions expressed above are solely my own and do not reflect ==
  1205.  == those of my employer.                                             ==
  1206.             -== no solicitations please ==-
  1207.