From: Stu Grossman Date: Tue, 23 Jun 1992 04:31:56 +0000 (+0000) Subject: * Centralize all Cadillac interface defs into defs.h. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=671603ffa853a8ac29e814ec5312ca0248c23f42;p=binutils-gdb.git * Centralize all Cadillac interface defs into defs.h. * Use prototypes for all interface routines (fix bugs found as a result of doing so). * Make full_filename more robust in the face of null dirname/filenames. * Get pty at startup instead of at child creation time. Put GDB descriptors 0, 1 and 2 on it so that we can see the output of shell commands. * Get rid of prompt(), use print_prompt() instead. Fixes loads of stupid prompting problems. --- diff --git a/gdb/cadillac.c b/gdb/cadillac.c index 734e1dd02ba..c8665e82f5f 100755 --- a/gdb/cadillac.c +++ b/gdb/cadillac.c @@ -1,5 +1,5 @@ -/* Cadillac interface routines. - Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Energize (formerly known as Cadillac) interface routines. + Copyright 1991, 1992 Free Software Foundation, Inc. This file is part of GDB. @@ -34,6 +34,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include +#ifdef USG +#include +#endif #include #include #include @@ -42,6 +45,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include +/* Non-zero means that we're doing the cadillac interface. */ +int cadillac = 0; + /* Connection block for debugger<=>kernel communications. */ static Connection *conn = 0; @@ -63,8 +69,6 @@ extern int pgrp_inferior; extern char *source_path; -extern int cadillac; - char **pprompt; /* Pointer to pointer to prompt */ /* Tell cadillac_command_line_input() where to get its text from */ @@ -79,21 +83,15 @@ static int command_line_length = 0; #define PTY_EVENT 2 -static void -prompt() -{ - fputs_filtered(*pprompt, stdout); -} - /* This routine redirects the output of fputs_filtered to the kernel so that the user can see what's going on in his debugger window. */ void cadillac_fputs(ptr) - char *ptr; + const char *ptr; { if (conn) - CVWriteTranscriptInfo (conn, instance_id, ptr); + CVWriteTranscriptInfo (conn, instance_id, (char *)ptr); else fputs (ptr, stdout); } @@ -195,9 +193,24 @@ full_filename(symtab) if (!symtab) return NULL; - pathlen = strlen(symtab->dirname) + strlen(symtab->filename); + if (symtab->fullname) + return savestring(symtab->fullname, strlen(symtab->fullname)); + + if (symtab->dirname) + pathlen = strlen(symtab->dirname); + else + pathlen = 0; + if (symtab->filename) + pathlen += strlen(symtab->filename); + filename = xmalloc(pathlen+1); - sprintf(filename, "%s%s", symtab->dirname, symtab->filename); + + if (symtab->dirname) + strcpy(filename, symtab->dirname); + else + *filename = '\000'; + if (symtab->filename) + strcat(filename, symtab->filename); return filename; } @@ -532,6 +545,7 @@ go_busy() } +void cadillac_symbol_file(objfile) struct objfile *objfile; { @@ -757,8 +771,8 @@ cadillac_ignore_breakpoint(b) /* Open up a pty and its associated tty. Return the fd of the tty. */ -char * -cadillac_getpty() +static void +getpty() { int n, ptyfd, ttyfd; static char dev[30]; @@ -767,9 +781,6 @@ cadillac_getpty() #define HIGHPTY (('z' - 'p') * 16 - 1) - if (inferior_pty >= 0) /* Only do this once */ - return dev; - for (n = 0; n <= HIGHPTY; n++) { sprintf(dev, "/dev/pty%c%x", n/16 + 'p', n%16); @@ -795,7 +806,7 @@ cadillac_getpty() inferior_pty = ptyfd; inferior_tty = ttyfd; - return dev; + return; } error ("getpty: can't get a pty\n"); @@ -974,7 +985,7 @@ kernel_dispatch(queue) if (*text != '\000') execute_command_1(0, queue, "%s", text); else - prompt(); /* User just typed a blank line */ + print_prompt(); /* User just typed a blank line */ } break; case QueryResponseRType: @@ -1336,6 +1347,11 @@ cadillac_initialize(cadillac_id, execarg) /* Tell the rest of the world that Cadillac is now set up. */ cadillac = 1; + + getpty(); /* Setup the pty */ + dup2(inferior_tty, 0); /* Attach all GDB I/O to the pty */ + dup2(inferior_tty, 1); + dup2(inferior_tty, 2); } /* This is called from execute_command, and provides a wrapper around @@ -1359,7 +1375,7 @@ cadillac_call_command(cmdblk, arg, from_tty) else (*cmdblk->function.cfunc)(arg, from_tty); - prompt(); + print_prompt(); } void @@ -1411,14 +1427,11 @@ null_routine(arg) /* All requests from the Cadillac kernel eventually end up here. */ void -cadillac_main_loop(pp) - char **pp; +cadillac_main_loop() { CTtyRequest *req; struct cleanup *old_chain; - pprompt = pp; - doing_breakcommands_message = 0; /* We will come thru here any time there is an error, so send status if @@ -1426,7 +1439,7 @@ cadillac_main_loop(pp) send_status(); - prompt(); + print_prompt(); /* The actual event loop! */