X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fcommand.c;h=4203ac32d0ea7f478ed1dd65a51bae61ed58f13a;hb=8fa7f3f6640c0eec450149cf5ccfab15d5391f55;hp=eb5b1654d94cb86453fbf06b6e2b3551f518fdcc;hpb=4fdeb2145d081ff1b84e3f6c99f9d1c048c0d64a;p=pspp diff --git a/src/command.c b/src/command.c index eb5b1654d9..4203ac32d0 100644 --- a/src/command.c +++ b/src/command.c @@ -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" @@ -45,6 +45,10 @@ #if HAVE_SYS_WAIT_H #include #endif + +#include "gettext.h" +#define _(msgid) gettext (msgid) +#define N_(msgid) msgid /* 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],