Rotate ChangeLogs
[deliverable/binutils-gdb.git] / binutils / nlmheader.y
index 2b78b893e10c07260bd2c39852c2b40cbbda2aaf..0f1e22aa5e37241c5c88ac3caf1d98069fb97b41 100644 (file)
@@ -1,5 +1,5 @@
 %{/* nlmheader.y - parse NLM header specification keywords.
-     Copyright (C) 1993 Free Software Foundation, Inc.
+     Copyright (C) 1993, 94, 95, 97, 1998 Free Software Foundation, Inc.
 
 This file is part of GNU Binutils.
 
@@ -15,7 +15,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /* Written by Ian Lance Taylor <ian@cygnus.com>.
 
@@ -29,8 +29,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include <ansidecl.h>
 #include <stdio.h>
 #include <ctype.h>
-#include <bfd.h>
-#include "sysdep.h"
+#include "bfd.h"
 #include "bucomm.h"
 #include "nlm/common.h"
 #include "nlm/internal.h"
@@ -55,6 +54,8 @@ boolean debug_info;
 char *exit_procedure;
 /* Exported symbols (EXPORT).  */
 struct string_list *export_symbols;
+/* List of files from INPUT.  */
+struct string_list *input_files;
 /* Map file name (MAP, FULLMAP).  */
 char *map_file;
 /* Whether a full map has been requested (FULLMAP).  */
@@ -67,6 +68,8 @@ struct string_list *import_symbols;
 char *message_file;
 /* Autoload module list (MODULE).  */
 struct string_list *modules;
+/* File named by OUTPUT.  */
+char *output_file;
 /* File named by SHARELIB.  */
 char *sharelib_file;
 /* Start procedure name (START).  */
@@ -117,8 +120,8 @@ static char *xstrdup PARAMS ((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.  */
 
@@ -126,7 +129,7 @@ static char *xstrdup PARAMS ((const char *));
 %token <string> QUOTED_STRING
 
 /* Typed non-terminals.  */
-%type <list> symbol_list_opt symbol_list module_list
+%type <list> symbol_list_opt symbol_list string_list
 %type <string> symbol
 
 %%
@@ -157,7 +160,7 @@ command:
          }
        | CODESTART STRING
          {
-           nlmheader_warn ("CODESTART is not implemented; sorry", -1);
+           nlmheader_warn (_("CODESTART is not implemented; sorry"), -1);
            free ($2);
          }
        | COPYRIGHT QUOTED_STRING
@@ -168,7 +171,7 @@ command:
            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;
              }
@@ -192,6 +195,12 @@ command:
            free ($2);
            free ($3);
            free ($4);
+           if (version_hdr->month < 1 || version_hdr->month > 12)
+             nlmheader_warn (_("illegal month"), -1);
+           if (version_hdr->day < 1 || version_hdr->day > 31)
+             nlmheader_warn (_("illegal day"), -1);
+           if (version_hdr->year < 1900 || version_hdr->year > 3000)
+             nlmheader_warn (_("illegal year"), -1);
          }
        | DEBUG
          {
@@ -204,7 +213,7 @@ command:
            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;
              }
@@ -235,6 +244,11 @@ command:
            fixed_hdr->flags &=~ nlmlex_get_number ($2);
            free ($2);
          }
+       | FULLMAP
+         {
+           map_file = "";
+           full_map = true;
+         }
        | FULLMAP STRING
          {
            map_file = $2;
@@ -252,10 +266,13 @@ command:
          {
            import_symbols = string_list_append (import_symbols, $3);
          }
-       | INPUT STRING
+       | INPUT string_list
          {
-           nlmheader_warn ("INPUT not supported", -1);
-           free ($2);
+           input_files = string_list_append (input_files, $2);
+         }
+       | MAP
+         {
+           map_file = "";
          }
        | MAP STRING
          {
@@ -265,7 +282,7 @@ command:
          {
            message_file = $2;
          }
-       | MODULE module_list
+       | MODULE string_list
          {
            modules = string_list_append (modules, $2);
          }
@@ -279,8 +296,10 @@ command:
          }
        | OUTPUT STRING
          {
-           nlmheader_warn ("OUTPUT not supported", -1);
-           free ($2);
+           if (output_file == NULL)
+             output_file = $2;
+           else
+             nlmheader_warn (_("ignoring duplicate OUTPUT statement"), -1);
          }
        | PSEUDOPREEMPTION
          {
@@ -297,7 +316,7 @@ command:
            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;
              }
@@ -315,11 +334,6 @@ command:
            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;
@@ -335,13 +349,13 @@ command:
            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;
              }
            var_hdr->threadNameLength = len;
            strncpy (var_hdr->threadName, $2, len);
-           var_hdr->screenName[NLM_MAX_THREAD_NAME_LENGTH] = '\0';
+           var_hdr->threadName[len] = '\0';
            free ($2);
          }
        | TYPE STRING
@@ -353,7 +367,7 @@ command:
          {
            verbose = true;
          }
-       | VERSION STRING STRING STRING
+       | VERSIONK STRING STRING STRING
          {
            long val;
 
@@ -361,21 +375,23 @@ command:
            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;
 
@@ -383,7 +399,7 @@ command:
            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;
@@ -460,14 +476,14 @@ symbol:
          }
        ;
 
-/* A list of modules.  */
+/* A list of strings.  */
 
-module_list:
+string_list:
          /* May be empty.  */
          {
            $$ = NULL;
          }
-       | STRING module_list
+       | STRING string_list
          {
            $$ = string_list_cons ($1, $2);
          }
@@ -601,13 +617,13 @@ struct keyword_tokens_struct keyword_tokens[] =
   { "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 }
 };
 
@@ -752,12 +768,12 @@ tail_recurse:
       if (c != EOF && ! isspace ((unsigned char) 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++)
            {
@@ -773,7 +789,7 @@ tail_recurse:
            }
          
          nlmheader_identify ();
-         fprintf (stderr, "%s:%d: unrecognized keyword: %s\n",
+         fprintf (stderr, _("%s:%d: unrecognized keyword: %s\n"),
                   current.name, current.lineno, lex_buf);
        }
 
@@ -810,7 +826,7 @@ tail_recurse:
       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;
        }
@@ -851,7 +867,7 @@ nlmlex_get_number (s)
 
   ret = strtol (s, &send, 10);
   if (*send != '\0')
-    nlmheader_warn ("bad number", -1);
+    nlmheader_warn (_("bad number"), -1);
   return ret;
 }
 
@@ -867,7 +883,7 @@ nlmheader_identify ()
 
   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;
     }
This page took 0.027841 seconds and 4 git commands to generate.