all remaining *.c *.h files from hp merge.

This commit is contained in:
David Taylor
1998-12-31 21:58:30 +00:00
parent c450a7fe3f
commit 65b07ddca8
62 changed files with 27574 additions and 1386 deletions

View File

@ -53,9 +53,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Prototypes for local functions */
static void vfprintf_maybe_filtered PARAMS ((FILE *, const char *, va_list, int));
static void vfprintf_maybe_filtered PARAMS ((GDB_FILE *, const char *,
va_list, int));
static void fputs_maybe_filtered PARAMS ((const char *, FILE *, int));
static void fputs_maybe_filtered PARAMS ((const char *, GDB_FILE *, int));
#if defined (USE_MMALLOC) && !defined (NO_MMCHECK)
static void malloc_botch PARAMS ((void));
@ -70,12 +71,19 @@ prompt_for_continue PARAMS ((void));
static void
set_width_command PARAMS ((char *, int, struct cmd_list_element *));
static void
set_width PARAMS ((void));
/* If this definition isn't overridden by the header files, assume
that isatty and fileno exist on this system. */
#ifndef ISATTY
#define ISATTY(FP) (isatty (fileno (FP)))
#endif
#ifndef GDB_FILE_ISATTY
#define GDB_FILE_ISATTY(GDB_FILE_PTR) (gdb_file_isatty(GDB_FILE_PTR))
#endif
/* Chain of cleanup actions established with make_cleanup,
to be executed if an error happens. */
@ -132,6 +140,9 @@ char *quit_pre_print;
/* String to be printed before warning messages, if any. */
char *warning_pre_print = "\nwarning: ";
int pagination_enabled = 1;
/* Add a new cleanup to the cleanup_chain,
and return the previous chain pointer
@ -969,10 +980,16 @@ mstrsave (md, ptr)
void
print_spaces (n, file)
register int n;
register FILE *file;
register GDB_FILE *file;
{
while (n-- > 0)
fputc (' ', file);
if (file->ts_streamtype == astring) {
gdb_file_adjust_strbuf (n, file);
while (n-- > 0)
strcat(file->ts_strbuf, ' ');
} else {
while (n-- > 0)
fputc (' ', file->ts_filestream);
}
}
/* Print a host address. */
@ -1052,21 +1069,43 @@ query (va_alist)
fputs_unfiltered ("\n", gdb_stdout);
#endif /* MPW */
wrap_here("");
gdb_flush (gdb_stdout);
answer = fgetc (stdin);
#if defined(TUI)
if (!tui_version || cmdWin == tuiWinWithFocus())
#endif
answer = fgetc (stdin);
#if defined(TUI)
else
answer = (unsigned char)tuiBufferGetc();
#endif
clearerr (stdin); /* in case of C-d */
if (answer == EOF) /* C-d */
{
retval = 1;
break;
}
if (answer != '\n') /* Eat rest of input line, to EOF or newline */
/* Eat rest of input line, to EOF or newline */
if ((answer != '\n') || (tui_version && answer != '\r'))
do
{
ans2 = fgetc (stdin);
#if defined(TUI)
if (!tui_version || cmdWin == tuiWinWithFocus())
#endif
ans2 = fgetc (stdin);
#if defined(TUI)
else
ans2 = (unsigned char)tuiBufferGetc();
#endif
clearerr (stdin);
}
while (ans2 != EOF && ans2 != '\n');
while (ans2 != EOF && ans2 != '\n' && ans2 != '\r');
TUIDO(((TuiOpaqueFuncPtr)tui_vStartNewLines, 1));
if (answer >= 'a')
answer -= 040;
if (answer == 'Y')
@ -1178,7 +1217,7 @@ parse_escape (string_ptr)
void
gdb_printchar (c, stream, quoter)
register int c;
FILE *stream;
GDB_FILE *stream;
int quoter;
{
@ -1283,13 +1322,87 @@ static char *wrap_indent;
is not in effect. */
static int wrap_column;
/* ARGSUSED */
static void
set_width_command (args, from_tty, c)
char *args;
int from_tty;
struct cmd_list_element *c;
/* Inialize the lines and chars per page */
void
init_page_info()
{
#if defined(TUI)
if (tui_version && m_winPtrNotNull(cmdWin))
{
lines_per_page = cmdWin->generic.height;
chars_per_line = cmdWin->generic.width;
}
else
#endif
{
/* These defaults will be used if we are unable to get the correct
values from termcap. */
#if defined(__GO32__)
lines_per_page = ScreenRows();
chars_per_line = ScreenCols();
#else
lines_per_page = 24;
chars_per_line = 80;
#if !defined (MPW) && !defined (_WIN32)
/* No termcap under MPW, although might be cool to do something
by looking at worksheet or console window sizes. */
/* Initialize the screen height and width from termcap. */
{
char *termtype = getenv ("TERM");
/* Positive means success, nonpositive means failure. */
int status;
/* 2048 is large enough for all known terminals, according to the
GNU termcap manual. */
char term_buffer[2048];
if (termtype)
{
status = tgetent (term_buffer, termtype);
if (status > 0)
{
int val;
val = tgetnum ("li");
if (val >= 0)
lines_per_page = val;
else
/* The number of lines per page is not mentioned
in the terminal description. This probably means
that paging is not useful (e.g. emacs shell window),
so disable paging. */
lines_per_page = UINT_MAX;
val = tgetnum ("co");
if (val >= 0)
chars_per_line = val;
}
}
}
#endif /* MPW */
#if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
/* If there is a better way to determine the window size, use it. */
SIGWINCH_HANDLER (SIGWINCH);
#endif
#endif
/* If the output is not a terminal, don't paginate it. */
if (!GDB_FILE_ISATTY (gdb_stdout))
lines_per_page = UINT_MAX;
} /* the command_line_version */
set_width();
}
static void
set_width()
{
if (chars_per_line == 0)
init_page_info();
if (!wrap_buffer)
{
wrap_buffer = (char *) xmalloc (chars_per_line + 2);
@ -1297,7 +1410,17 @@ set_width_command (args, from_tty, c)
}
else
wrap_buffer = (char *) xrealloc (wrap_buffer, chars_per_line + 2);
wrap_pointer = wrap_buffer; /* Start it at the beginning */
wrap_pointer = wrap_buffer; /* Start it at the beginning */
}
/* ARGSUSED */
static void
set_width_command (args, from_tty, c)
char *args;
int from_tty;
struct cmd_list_element *c;
{
set_width ();
}
/* Wait, so the user can read what's on the screen. Prompt the user
@ -1436,18 +1559,100 @@ begin_line ()
}
}
int
gdb_file_isatty (stream)
GDB_FILE *stream;
{
if (stream->ts_streamtype == afile)
return (isatty(fileno(stream->ts_filestream)));
else return 0;
}
GDB_FILE *
gdb_file_init_astring (n)
int n;
{
GDB_FILE *tmpstream;
tmpstream = xmalloc (sizeof(GDB_FILE));
tmpstream->ts_streamtype = astring;
tmpstream->ts_filestream = NULL;
if (n > 0)
{
tmpstream->ts_strbuf = xmalloc ((n + 1)*sizeof(char));
tmpstream->ts_strbuf[0] = '\0';
}
else
tmpstream->ts_strbuf = NULL;
tmpstream->ts_buflen = n;
return tmpstream;
}
void
gdb_file_deallocate (streamptr)
GDB_FILE **streamptr;
{
GDB_FILE *tmpstream;
tmpstream = *streamptr;
if ((tmpstream->ts_streamtype == astring) &&
(tmpstream->ts_strbuf != NULL))
{
free (tmpstream->ts_strbuf);
}
free (tmpstream);
*streamptr = NULL;
}
char *
gdb_file_get_strbuf (stream)
GDB_FILE *stream;
{
return (stream->ts_strbuf);
}
/* adjust the length of the buffer by the amount necessary
to accomodate appending a string of length N to the buffer contents */
void
gdb_file_adjust_strbuf (n, stream)
int n;
GDB_FILE *stream;
{
int non_null_chars;
non_null_chars = strlen(stream->ts_strbuf);
if (n > (stream->ts_buflen - non_null_chars - 1))
{
stream->ts_buflen = n + non_null_chars + 1;
stream->ts_strbuf = xrealloc (stream->ts_strbuf, stream->ts_buflen);
}
}
GDB_FILE *
gdb_fopen (name, mode)
char * name;
char * mode;
{
return fopen (name, mode);
int gdb_file_size;
GDB_FILE *tmp;
gdb_file_size = sizeof(GDB_FILE);
tmp = (GDB_FILE *) xmalloc (gdb_file_size);
tmp->ts_streamtype = afile;
tmp->ts_filestream = fopen (name, mode);
tmp->ts_strbuf = NULL;
tmp->ts_buflen = 0;
return tmp;
}
void
gdb_flush (stream)
FILE *stream;
GDB_FILE *stream;
{
if (flush_hook
&& (stream == gdb_stdout
@ -1457,7 +1662,18 @@ gdb_flush (stream)
return;
}
fflush (stream);
fflush (stream->ts_filestream);
}
void
gdb_fclose(streamptr)
GDB_FILE **streamptr;
{
GDB_FILE *tmpstream;
tmpstream = *streamptr;
fclose (tmpstream->ts_filestream);
gdb_file_deallocate (streamptr);
}
/* Like fputs but if FILTER is true, pause after every screenful.
@ -1476,7 +1692,7 @@ gdb_flush (stream)
static void
fputs_maybe_filtered (linebuffer, stream, filter)
const char *linebuffer;
FILE *stream;
GDB_FILE *stream;
int filter;
{
const char *lineptr;
@ -1580,7 +1796,7 @@ fputs_maybe_filtered (linebuffer, stream, filter)
void
fputs_filtered (linebuffer, stream)
const char *linebuffer;
FILE *stream;
GDB_FILE *stream;
{
fputs_maybe_filtered (linebuffer, stream, 1);
}
@ -1600,7 +1816,7 @@ putchar_unfiltered (c)
int
fputc_unfiltered (c, stream)
int c;
FILE * stream;
GDB_FILE * stream;
{
char buf[2];
@ -1613,7 +1829,7 @@ fputc_unfiltered (c, stream)
int
fputc_filtered (c, stream)
int c;
FILE * stream;
GDB_FILE * stream;
{
char buf[2];
@ -1713,7 +1929,7 @@ puts_debug (prefix, string, suffix)
static void
vfprintf_maybe_filtered (stream, format, args, filter)
FILE *stream;
GDB_FILE *stream;
const char *format;
va_list args;
int filter;
@ -1735,7 +1951,7 @@ vfprintf_maybe_filtered (stream, format, args, filter)
void
vfprintf_filtered (stream, format, args)
FILE *stream;
GDB_FILE *stream;
const char *format;
va_list args;
{
@ -1744,7 +1960,7 @@ vfprintf_filtered (stream, format, args)
void
vfprintf_unfiltered (stream, format, args)
FILE *stream;
GDB_FILE *stream;
const char *format;
va_list args;
{
@ -1781,7 +1997,7 @@ vprintf_unfiltered (format, args)
/* VARARGS */
void
#ifdef ANSI_PROTOTYPES
fprintf_filtered (FILE *stream, const char *format, ...)
fprintf_filtered (GDB_FILE *stream, const char *format, ...)
#else
fprintf_filtered (va_alist)
va_dcl
@ -1791,11 +2007,11 @@ fprintf_filtered (va_alist)
#ifdef ANSI_PROTOTYPES
va_start (args, format);
#else
FILE *stream;
GDB_FILE *stream;
char *format;
va_start (args);
stream = va_arg (args, FILE *);
stream = va_arg (args, GDB_FILE *);
format = va_arg (args, char *);
#endif
vfprintf_filtered (stream, format, args);
@ -1805,7 +2021,7 @@ fprintf_filtered (va_alist)
/* VARARGS */
void
#ifdef ANSI_PROTOTYPES
fprintf_unfiltered (FILE *stream, const char *format, ...)
fprintf_unfiltered (GDB_FILE *stream, const char *format, ...)
#else
fprintf_unfiltered (va_alist)
va_dcl
@ -1815,11 +2031,11 @@ fprintf_unfiltered (va_alist)
#ifdef ANSI_PROTOTYPES
va_start (args, format);
#else
FILE *stream;
GDB_FILE *stream;
char *format;
va_start (args);
stream = va_arg (args, FILE *);
stream = va_arg (args, GDB_FILE *);
format = va_arg (args, char *);
#endif
vfprintf_unfiltered (stream, format, args);
@ -1832,7 +2048,7 @@ fprintf_unfiltered (va_alist)
/* VARARGS */
void
#ifdef ANSI_PROTOTYPES
fprintfi_filtered (int spaces, FILE *stream, const char *format, ...)
fprintfi_filtered (int spaces, GDB_FILE *stream, const char *format, ...)
#else
fprintfi_filtered (va_alist)
va_dcl
@ -1843,12 +2059,12 @@ fprintfi_filtered (va_alist)
va_start (args, format);
#else
int spaces;
FILE *stream;
GDB_FILE *stream;
char *format;
va_start (args);
spaces = va_arg (args, int);
stream = va_arg (args, FILE *);
stream = va_arg (args, GDB_FILE *);
format = va_arg (args, char *);
#endif
print_spaces_filtered (spaces, stream);
@ -1978,7 +2194,7 @@ n_spaces (n)
void
print_spaces_filtered (n, stream)
int n;
FILE *stream;
GDB_FILE *stream;
{
fputs_filtered (n_spaces (n), stream);
}
@ -1992,7 +2208,7 @@ print_spaces_filtered (n, stream)
void
fprintf_symbol_filtered (stream, name, lang, arg_mode)
FILE *stream;
GDB_FILE *stream;
char *name;
enum language lang;
int arg_mode;
@ -2071,6 +2287,50 @@ strcmp_iw (string1, string2)
return (*string1 != '\0' && *string1 != '(') || (*string2 != '\0');
}
/*
** subsetCompare()
** Answer whether stringToCompare is a full or partial match to
** templateString. The partial match must be in sequence starting
** at index 0.
*/
int
#ifdef _STDC__
subsetCompare(
char *stringToCompare,
char *templateString)
#else
subsetCompare(stringToCompare, templateString)
char *stringToCompare;
char *templateString;
#endif
{
int match = 0;
if (templateString != (char *)NULL && stringToCompare != (char *)NULL &&
strlen(stringToCompare) <= strlen(templateString))
match = (strncmp(templateString,
stringToCompare,
strlen(stringToCompare)) == 0);
return match;
} /* subsetCompare */
void pagination_on_command(arg, from_tty)
char *arg;
int from_tty;
{
pagination_enabled = 1;
}
void pagination_off_command(arg, from_tty)
char *arg;
int from_tty;
{
pagination_enabled = 0;
}
void
initialize_utils ()
@ -2090,62 +2350,10 @@ initialize_utils ()
"Set number of lines gdb thinks are in a page.", &setlist),
&showlist);
/* These defaults will be used if we are unable to get the correct
values from termcap. */
#if defined(__GO32__)
lines_per_page = ScreenRows();
chars_per_line = ScreenCols();
#else
lines_per_page = 24;
chars_per_line = 80;
init_page_info ();
#if !defined (MPW) && !defined (_WIN32)
/* No termcap under MPW, although might be cool to do something
by looking at worksheet or console window sizes. */
/* Initialize the screen height and width from termcap. */
{
char *termtype = getenv ("TERM");
/* Positive means success, nonpositive means failure. */
int status;
/* 2048 is large enough for all known terminals, according to the
GNU termcap manual. */
char term_buffer[2048];
if (termtype)
{
status = tgetent (term_buffer, termtype);
if (status > 0)
{
int val;
val = tgetnum ("li");
if (val >= 0)
lines_per_page = val;
else
/* The number of lines per page is not mentioned
in the terminal description. This probably means
that paging is not useful (e.g. emacs shell window),
so disable paging. */
lines_per_page = UINT_MAX;
val = tgetnum ("co");
if (val >= 0)
chars_per_line = val;
}
}
}
#endif /* MPW */
#if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
/* If there is a better way to determine the window size, use it. */
SIGWINCH_HANDLER (SIGWINCH);
#endif
#endif
/* If the output is not a terminal, don't paginate it. */
if (!ISATTY (gdb_stdout))
if (!GDB_FILE_ISATTY (gdb_stdout))
lines_per_page = UINT_MAX;
set_width_command ((char *)NULL, 0, c);
@ -2157,6 +2365,19 @@ initialize_utils ()
&setprintlist),
&showprintlist);
add_show_from_set
(add_set_cmd ("pagination", class_support,
var_boolean, (char *)&pagination_enabled,
"Set state of pagination.", &setlist),
&showlist);
if (xdb_commands)
{
add_com("am", class_support, pagination_on_command,
"Enable pagination");
add_com("sm", class_support, pagination_off_command,
"Disable pagination");
}
add_show_from_set
(add_set_cmd ("sevenbit-strings", class_support, var_boolean,
(char *)&sevenbit_strings,