/* gasp.c - Gnu assembler preprocessor main program.
- Copyright (C) 1994, 95, 96, 97, 1998 Free Software Foundation, Inc.
+ Copyright (C) 1994, 95, 96, 97, 98, 99, 2000
+ Free Software Foundation, Inc.
Written by Steve and Judy Chamberlain of Cygnus Support,
sac@cygnus.com
*/
#include "config.h"
+#include "bin-bugs.h"
#include <stdio.h>
#include <string.h>
it. */
extern void as_abort PARAMS ((const char *, int, const char *));
+/* The default obstack chunk size. If we set this to zero, the
+ obstack code will use whatever will fit in a 4096 byte block. This
+ is used by the hash table code used by macro.c. */
+int chunksize = 0;
+
#define MAX_INCLUDES 30 /* Maximum include depth */
#define MAX_REASONABLE 1000 /* Maximum number of expansions */
} hash_table;
-/* Structures used to store macros.
-
- Each macro knows its name and included text. It gets built with a
- list of formal arguments, and also keeps a hash table which points
- into the list to speed up formal search. Each formal knows its
- name and its default value. Each time the macro is expanded, the
- formals get the actual values attatched to them. */
-
-/* describe the formal arguments to a macro */
-
-typedef struct formal_struct
- {
- struct formal_struct *next; /* next formal in list */
- sb name; /* name of the formal */
- sb def; /* the default value */
- sb actual; /* the actual argument (changed on each expansion) */
- int index; /* the index of the formal 0..formal_count-1 */
- }
-formal_entry;
-
-/* describe the macro. */
-
-typedef struct macro_struct
- {
- sb sub; /* substitution text. */
- int formal_count; /* number of formal args. */
- formal_entry *formals; /* pointer to list of formal_structs */
- hash_table formal_hash; /* hash table of formals. */
- }
-macro_entry;
-
/* how we nest files and expand macros etc.
we keep a stack of of include_stack structs. each include file
exp_t res;
idx = exp_parse (idx, in, &res);
if (res.add_symbol.len || res.sub_symbol.len)
- ERROR ((stderr, emsg));
+ ERROR ((stderr, "%s", emsg));
*val = res.value;
return idx;
}
{
int i = 0;
sb_reset (out);
- if (ISFIRSTCHAR (in->ptr[i]))
+ if (ISFIRSTCHAR (in->ptr[i]) || in->ptr[i] == '\\')
{
sb_add_char (out, in->ptr[i]);
i++;
idx = exp_parse (idx, in, &e);
exp_string (&e, &acc);
sb_add_char (&acc, 0);
- fprintf (outfile, acc.ptr);
+ fprintf (outfile, "%s", acc.ptr);
if (idx < in->len && in->ptr[idx] == ',')
{
fprintf (outfile, ",");
have_fill = 1;
}
- if (al != 1
- && al != 2
- && al != 4)
- WARNING ((stderr, _("alignment must be one of 1, 2 or 4.\n")));
-
fprintf (outfile, ".align %d", al);
if (have_fill)
fprintf (outfile, ",%d", fill);
|| line.ptr[0] == '!'))
{
/* MRI line comment. */
- fprintf (outfile, sb_name (&line));
+ fprintf (outfile, "%s", sb_name (&line));
}
else
{
static
void
do_local (idx, line)
- int idx;
- sb *line;
+ int idx ATTRIBUTE_UNUSED;
+ sb *line ATTRIBUTE_UNUSED;
{
ERROR ((stderr, _("LOCAL outside of MACRO")));
}
return 0;
sb_terminate (in);
- if (! check_macro (in->ptr + idx, &out, comment_char, &err))
+ if (! check_macro (in->ptr + idx, &out, comment_char, &err, NULL))
return 0;
if (err != NULL)
[-Ipath] add to include path list\n\
[in-file]\n"));
if (status == 0)
- printf (_("\nReport bugs to bug-gnu-utils@gnu.org\n"));
+ printf (_("Report bugs to %s\n"), REPORT_BUGS_TO);
exit (status);
}
ifstack[0].on = 1;
ifi = 0;
+#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
setlocale (LC_MESSAGES, "");
+#endif
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);