Adopt use of gnulib for portability.
[pspp-builds.git] / src / command.c
index eb5b1654d94cb86453fbf06b6e2b3551f518fdcc..4203ac32d0ea7f478ed1dd65a51bae61ed58f13a 100644 (file)
@@ -28,7 +28,7 @@
 #include "dictionary.h"
 #include "error.h"
 #include "glob.h"
-#include "getline.h"
+#include "getl.h"
 #include "lexer.h"
 #include "main.h"
 #include "settings.h"
 #if HAVE_SYS_WAIT_H
 #include <sys/wait.h>
 #endif
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+#define N_(msgid) msgid
 \f
 /* Global variables. */
 
@@ -74,7 +78,7 @@ struct command
        {NAME, {T1, T2, T3, T4}, FUNC, 1, 1},
 #define SPCCMD(NAME, T1, T2, T3, T4, FUNC)             \
        {NAME, {T1, T2, T3, T4}, FUNC, 0, 0},
-#define UNIMPL(NAME, T1, T2, T3, T4)                   \
+#define UNIMPL(NAME, T1, T2, T3, T4, DESC)             \
        {NAME, {T1, T2, T3, T4}, NULL, 1, 0},
 static const struct command commands[] = 
   {
@@ -134,7 +138,8 @@ static const struct command *parse_command_name (void);
 /* Determines whether command C is appropriate to call in this
    part of a FILE TYPE structure. */
 static int
-FILE_TYPE_okay (const struct command *c)
+FILE_TYPE_okay (const struct command *c UNUSED)
+#if 0
 {
   int okay = 0;
   
@@ -143,7 +148,6 @@ FILE_TYPE_okay (const struct command *c)
       && c->func != cmd_repeating_data
       && c->func != cmd_end_file_type)
     msg (SE, _("%s not allowed inside FILE TYPE/END FILE TYPE."), c->name);
-#if 0
   /* FIXME */
   else if (c->func == cmd_repeating_data && fty.type == FTY_GROUPED)
     msg (SE, _("%s not allowed inside FILE TYPE GROUPED/END FILE TYPE."),
@@ -151,17 +155,19 @@ FILE_TYPE_okay (const struct command *c)
   else if (!fty.had_rec_type && c->func != cmd_record_type)
     msg (SE, _("RECORD TYPE must be the first command inside a "
                      "FILE TYPE structure."));
-#endif
   else
     okay = 1;
 
-#if 0
   if (c->func == cmd_record_type)
     fty.had_rec_type = 1;
-#endif
 
   return okay;
 }
+#else
+{
+  return 1;
+}
+#endif
 
 /* Parses an entire PSPP command.  This includes everything from the
    command name to the terminating dot.  Does most of its work by
@@ -183,7 +189,7 @@ cmd_parse (void)
     return CMD_SUCCESS;
 
   /* Parse comments. */
-  if ((token == T_ID && !strcmp (tokid, "COMMENT"))
+  if ((token == T_ID && !strcasecmp (tokid, "COMMENT"))
       || token == T_EXP || token == '*' || token == '[')
     {
       lex_skip_comment ();
@@ -281,7 +287,7 @@ match_strings (const char *a, size_t a_len,
   while (a_len > 0 && b_len > 0) 
     {
       /* Mismatch always returns zero. */
-      if (*a++ != *b++)
+      if (toupper ((unsigned char) *a++) != toupper ((unsigned char) *b++))
         return 0;
 
       /* Advance. */
@@ -303,7 +309,7 @@ static const char *
 find_word (const char *string, size_t *word_len) 
 {
   /* Skip whitespace and asterisks. */
-  while (isspace (*string))
+  while (isspace ((unsigned char) *string))
     string++;
 
   /* End of string? */
@@ -341,14 +347,14 @@ conflicting_3char_prefixes (const char *a, const char *b)
   assert (aw != NULL && bw != NULL);
 
   /* Words that are the same don't conflict. */
-  if (aw_len == bw_len && !memcmp (aw, bw, aw_len))
+  if (aw_len == bw_len && !buf_compare_case (aw, bw, aw_len))
     return 0;
   
   /* Words that are otherwise the same in the first three letters
      do conflict. */
   return ((aw_len > 3 && bw_len > 3)
           || (aw_len == 3 && bw_len > 3)
-          || (bw_len == 3 && aw_len > 3)) && !memcmp (aw, bw, 3);
+          || (bw_len == 3 && aw_len > 3)) && !buf_compare_case (aw, bw, 3);
 }
 
 /* Returns nonzero if CMD can be confused with another command
@@ -390,7 +396,7 @@ cmd_match_words (const struct command *cmd,
        word != NULL && word_idx < word_cnt;
        word = find_word (word + word_len, &word_len), word_idx++)
     if (word_len != strlen (words[word_idx])
-        || memcmp (word, words[word_idx], word_len))
+        || buf_compare_case (word, words[word_idx], word_len))
       {
         size_t match_chars = match_strings (word, word_len,
                                             words[word_idx],