%{/* nlmheader.y - parse NLM header specification keywords.
- Copyright (C) 1993 Free Software Foundation, Inc.
+ Copyright 1993, 1994, 1995, 1997, 1998, 2001, 2002, 2003, 2005, 2007
+ Free Software Foundation, Inc.
-This file is part of GNU Binutils.
+ This file is part of GNU Binutils.
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
This implementation is based on the description in the NetWare Tool
Maker Specification manual, edition 1.0. */
-#include <ansidecl.h>
-#include <stdio.h>
-#include <ctype.h>
-#include "bfd.h"
#include "sysdep.h"
-#include "bucomm.h"
+#include "safe-ctype.h"
+#include "bfd.h"
#include "nlm/common.h"
#include "nlm/internal.h"
+#include "bucomm.h"
#include "nlmconv.h"
/* Information is stored in the structures pointed to by these
/* File named by CUSTOM. */
char *custom_file;
/* Whether to generate debugging information (DEBUG). */
-boolean debug_info;
+bfd_boolean debug_info;
/* Procedure named by EXIT. */
char *exit_procedure;
/* Exported symbols (EXPORT). */
/* Map file name (MAP, FULLMAP). */
char *map_file;
/* Whether a full map has been requested (FULLMAP). */
-boolean full_map;
+bfd_boolean full_map;
/* File named by HELP. */
char *help_file;
/* Imported symbols (IMPORT). */
/* Start procedure name (START). */
char *start_procedure;
/* VERBOSE. */
-boolean verbose;
+bfd_boolean verbose;
/* RPC description file (XDCDATA). */
char *rpc_file;
#define yyerror(msg) nlmheader_error (msg);
/* Local functions. */
-static int yylex PARAMS ((void));
-static void nlmlex_file_push PARAMS ((const char *));
-static boolean nlmlex_file_open PARAMS ((const char *));
-static int nlmlex_buf_init PARAMS ((void));
-static char nlmlex_buf_add PARAMS ((int));
-static long nlmlex_get_number PARAMS ((const char *));
-static void nlmheader_identify PARAMS ((void));
-static void nlmheader_warn PARAMS ((const char *, int));
-static void nlmheader_error PARAMS ((const char *));
-static struct string_list * string_list_cons PARAMS ((char *,
- struct string_list *));
-static struct string_list * string_list_append PARAMS ((struct string_list *,
- struct string_list *));
-static struct string_list * string_list_append1 PARAMS ((struct string_list *,
- char *));
-static char *xstrdup PARAMS ((const char *));
+static int yylex (void);
+static void nlmlex_file_push (const char *);
+static bfd_boolean nlmlex_file_open (const char *);
+static int nlmlex_buf_init (void);
+static char nlmlex_buf_add (int);
+static long nlmlex_get_number (const char *);
+static void nlmheader_identify (void);
+static void nlmheader_warn (const char *, int);
+static void nlmheader_error (const char *);
+static struct string_list * string_list_cons (char *, struct string_list *);
+static struct string_list * string_list_append (struct string_list *,
+ struct string_list *);
+static struct string_list * string_list_append1 (struct string_list *,
+ char *);
+static char *xstrdup (const char *);
%}
%token CHECK CODESTART COPYRIGHT CUSTOM DATE DEBUG DESCRIPTION EXIT
%token EXPORT FLAG_ON FLAG_OFF FULLMAP HELP IMPORT INPUT MAP MESSAGES
%token MODULE MULTIPLE OS_DOMAIN OUTPUT PSEUDOPREEMPTION REENTRANT
-%token SCREENNAME SHARELIB STACK STACKSIZE START SYNCHRONIZE
-%token THREADNAME TYPE VERBOSE VERSION XDCDATA
+%token SCREENNAME SHARELIB STACK START SYNCHRONIZE
+%token THREADNAME TYPE VERBOSE VERSIONK XDCDATA
/* Arguments. */
/* The entire file is just a list of commands. */
-file:
+file:
commands
;
}
| CODESTART STRING
{
- nlmheader_warn ("CODESTART is not implemented; sorry", -1);
+ nlmheader_warn (_("CODESTART is not implemented; sorry"), -1);
free ($2);
}
| COPYRIGHT QUOTED_STRING
len = strlen ($2);
if (len >= NLM_MAX_COPYRIGHT_MESSAGE_LENGTH)
{
- nlmheader_warn ("copyright string is too long",
+ nlmheader_warn (_("copyright string is too long"),
NLM_MAX_COPYRIGHT_MESSAGE_LENGTH - 1);
len = NLM_MAX_COPYRIGHT_MESSAGE_LENGTH - 1;
}
free ($3);
free ($4);
if (version_hdr->month < 1 || version_hdr->month > 12)
- nlmheader_warn ("illegal month", -1);
+ nlmheader_warn (_("illegal month"), -1);
if (version_hdr->day < 1 || version_hdr->day > 31)
- nlmheader_warn ("illegal day", -1);
+ nlmheader_warn (_("illegal day"), -1);
if (version_hdr->year < 1900 || version_hdr->year > 3000)
- nlmheader_warn ("illegal year", -1);
+ nlmheader_warn (_("illegal year"), -1);
}
| DEBUG
{
- debug_info = true;
+ debug_info = TRUE;
}
| DESCRIPTION QUOTED_STRING
{
len = strlen ($2);
if (len > NLM_MAX_DESCRIPTION_LENGTH)
{
- nlmheader_warn ("description string is too long",
+ nlmheader_warn (_("description string is too long"),
NLM_MAX_DESCRIPTION_LENGTH);
len = NLM_MAX_DESCRIPTION_LENGTH;
}
| FULLMAP
{
map_file = "";
- full_map = true;
+ full_map = TRUE;
}
| FULLMAP STRING
{
map_file = $2;
- full_map = true;
+ full_map = TRUE;
}
| HELP STRING
{
if (output_file == NULL)
output_file = $2;
else
- nlmheader_warn ("ignoring duplicate OUTPUT statement", -1);
+ nlmheader_warn (_("ignoring duplicate OUTPUT statement"), -1);
}
| PSEUDOPREEMPTION
{
len = strlen ($2);
if (len >= NLM_MAX_SCREEN_NAME_LENGTH)
{
- nlmheader_warn ("screen name is too long",
+ nlmheader_warn (_("screen name is too long"),
NLM_MAX_SCREEN_NAME_LENGTH);
len = NLM_MAX_SCREEN_NAME_LENGTH;
}
var_hdr->stackSize = nlmlex_get_number ($2);
free ($2);
}
- | STACKSIZE STRING
- {
- var_hdr->stackSize = nlmlex_get_number ($2);
- free ($2);
- }
| START STRING
{
start_procedure = $2;
len = strlen ($2);
if (len >= NLM_MAX_THREAD_NAME_LENGTH)
{
- nlmheader_warn ("thread name is too long",
+ nlmheader_warn (_("thread name is too long"),
NLM_MAX_THREAD_NAME_LENGTH);
len = NLM_MAX_THREAD_NAME_LENGTH;
}
}
| VERBOSE
{
- verbose = true;
+ verbose = TRUE;
}
- | VERSION STRING STRING STRING
+ | VERSIONK STRING STRING STRING
{
long val;
version_hdr->majorVersion = nlmlex_get_number ($2);
val = nlmlex_get_number ($3);
if (val < 0 || val > 99)
- nlmheader_warn ("illegal minor version number (must be between 0 and 99)",
+ nlmheader_warn (_("illegal minor version number (must be between 0 and 99)"),
-1);
else
version_hdr->minorVersion = val;
val = nlmlex_get_number ($4);
- if (val < 1 || val > 26)
- nlmheader_warn ("illegal revision number (must be between 1 and 26)",
+ if (val < 0)
+ nlmheader_warn (_("illegal revision number (must be between 0 and 26)"),
-1);
+ else if (val > 26)
+ version_hdr->revision = 0;
else
version_hdr->revision = val;
free ($2);
free ($3);
free ($4);
}
- | VERSION STRING STRING
+ | VERSIONK STRING STRING
{
long val;
version_hdr->majorVersion = nlmlex_get_number ($2);
val = nlmlex_get_number ($3);
if (val < 0 || val > 99)
- nlmheader_warn ("illegal minor version number (must be between 0 and 99)",
+ nlmheader_warn (_("illegal minor version number (must be between 0 and 99)"),
-1);
else
version_hdr->minorVersion = val;
/* If strerror is just a macro, we want to use the one from libiberty
since it will handle undefined values. */
#undef strerror
-extern char *strerror ();
+extern char *strerror PARAMS ((int));
/* The lexer is simple, too simple for flex. Keywords are only
recognized at the start of lines. Everything else must be an
\f
/* Start the lexer going on the main input file. */
-boolean
-nlmlex_file (name)
- const char *name;
+bfd_boolean
+nlmlex_file (const char *name)
{
current.next = NULL;
return nlmlex_file_open (name);
/* Start the lexer going on a subsidiary input file. */
static void
-nlmlex_file_push (name)
- const char *name;
+nlmlex_file_push (const char *name)
{
struct input *push;
/* Start lexing from a file. */
-static boolean
-nlmlex_file_open (name)
- const char *name;
+static bfd_boolean
+nlmlex_file_open (const char *name)
{
current.file = fopen (name, "r");
if (current.file == NULL)
{
fprintf (stderr, "%s:%s: %s\n", program_name, name, strerror (errno));
++parse_errors;
- return false;
+ return FALSE;
}
current.name = xstrdup (name);
current.lineno = 1;
current.state = BEGINNING_OF_LINE;
- return true;
+ return TRUE;
}
\f
/* Table used to turn keywords into tokens. */
int token;
};
-struct keyword_tokens_struct keyword_tokens[] =
+static struct keyword_tokens_struct keyword_tokens[] =
{
{ "CHECK", CHECK },
{ "CODESTART", CODESTART },
{ "SCREENNAME", SCREENNAME },
{ "SHARELIB", SHARELIB },
{ "STACK", STACK },
- { "STACKSIZE", STACKSIZE },
+ { "STACKSIZE", STACK },
{ "START", START },
{ "SYNCHRONIZE", SYNCHRONIZE },
{ "THREADNAME", THREADNAME },
{ "TYPE", TYPE },
{ "VERBOSE", VERBOSE },
- { "VERSION", VERSION },
+ { "VERSION", VERSIONK },
{ "XDCDATA", XDCDATA }
};
((void) (lex_buf != NULL ? lex_pos = 0 : nlmlex_buf_init ()))
static int
-nlmlex_buf_init ()
+nlmlex_buf_init (void)
{
lex_size = 10;
lex_buf = xmalloc (lex_size + 1);
: nlmlex_buf_add (c)))
static char
-nlmlex_buf_add (c)
- int c;
+nlmlex_buf_add (int c)
{
if (lex_pos >= lex_size)
{
code. */
static int
-yylex ()
+yylex (void)
{
int c;
c = getc (current.file);
/* Commas are treated as whitespace characters. */
- while (isspace ((unsigned char) c) || c == ',')
+ while (ISSPACE (c) || c == ',')
{
current.state = IN_LINE;
if (c == '\n')
if (c == '\n')
++current.lineno;
}
- while (isspace ((unsigned char) c));
+ while (ISSPACE (c));
BUF_INIT ();
- while (! isspace ((unsigned char) c) && c != EOF)
+ while (! ISSPACE (c) && c != EOF)
{
BUF_ADD (c);
c = getc (current.file);
BUF_FINISH ();
ungetc (c, current.file);
-
+
nlmlex_file_push (lex_buf);
goto tail_recurse;
}
if (current.state == BEGINNING_OF_LINE)
{
BUF_INIT ();
- while (isalnum ((unsigned char) c) || c == '_')
+ while (ISALNUM (c) || c == '_')
{
- if (islower ((unsigned char) c))
- BUF_ADD (toupper ((unsigned char) c));
- else
- BUF_ADD (c);
+ BUF_ADD (TOUPPER (c));
c = getc (current.file);
}
BUF_FINISH ();
- if (c != EOF && ! isspace ((unsigned char) c) && c != ',')
+ if (c != EOF && ! ISSPACE (c) && c != ',')
{
nlmheader_identify ();
- fprintf (stderr, "%s:%d: illegal character in keyword: %c\n",
+ fprintf (stderr, _("%s:%d: illegal character in keyword: %c\n"),
current.name, current.lineno, c);
}
else
{
- int i;
+ unsigned int i;
for (i = 0; i < KEYWORD_COUNT; i++)
{
return keyword_tokens[i].token;
}
}
-
+
nlmheader_identify ();
- fprintf (stderr, "%s:%d: unrecognized keyword: %s\n",
+ fprintf (stderr, _("%s:%d: unrecognized keyword: %s\n"),
current.name, current.lineno, lex_buf);
}
if (c == EOF)
{
nlmheader_identify ();
- fprintf (stderr, "%s:%d: end of file in quoted string\n",
+ fprintf (stderr, _("%s:%d: end of file in quoted string\n"),
current.name, start_lineno);
++parse_errors;
}
/* Gather a generic argument. */
BUF_INIT ();
- while (! isspace (c)
+ while (! ISSPACE (c)
&& c != ','
&& c != COMMENT_CHAR
&& c != '('
/* Get a number from a string. */
static long
-nlmlex_get_number (s)
- const char *s;
+nlmlex_get_number (const char *s)
{
long ret;
char *send;
ret = strtol (s, &send, 10);
if (*send != '\0')
- nlmheader_warn ("bad number", -1);
+ nlmheader_warn (_("bad number"), -1);
return ret;
}
number. */
static void
-nlmheader_identify ()
+nlmheader_identify (void)
{
static int done;
if (! done)
{
- fprintf (stderr, "%s: problems in NLM command language input:\n",
+ fprintf (stderr, _("%s: problems in NLM command language input:\n"),
program_name);
done = 1;
}
/* Issue a warning. */
static void
-nlmheader_warn (s, imax)
- const char *s;
- int imax;
+nlmheader_warn (const char *s, int imax)
{
nlmheader_identify ();
fprintf (stderr, "%s:%d: %s", current.name, current.lineno, s);
/* Report an error. */
static void
-nlmheader_error (s)
- const char *s;
+nlmheader_error (const char *s)
{
nlmheader_warn (s, -1);
++parse_errors;
/* Add a string to a string list. */
static struct string_list *
-string_list_cons (s, l)
- char *s;
- struct string_list *l;
+string_list_cons (char *s, struct string_list *l)
{
struct string_list *ret;
/* Append a string list to another string list. */
static struct string_list *
-string_list_append (l1, l2)
- struct string_list *l1;
- struct string_list *l2;
+string_list_append (struct string_list *l1, struct string_list *l2)
{
register struct string_list **pp;
/* Append a string to a string list. */
static struct string_list *
-string_list_append1 (l, s)
- struct string_list *l;
- char *s;
+string_list_append1 (struct string_list *l, char *s)
{
struct string_list *n;
register struct string_list **pp;
/* Duplicate a string in memory. */
static char *
-xstrdup (s)
- const char *s;
+xstrdup (const char *s)
{
unsigned long len;
char *ret;