X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fcommand.c;h=f4c76c33b32bde5d8cb9ed67f1cafad17c8ed5a3;hb=7b98b3a4f58f6dc5a8e9cbc188b627966d5e652d;hp=40c186efd9d35f92c262259679702188f5bef8d8;hpb=4944c86a9318bc5b5578ab145a95c116ffd2c9fd;p=pspp diff --git a/src/command.c b/src/command.c index 40c186efd9..f4c76c33b3 100644 --- a/src/command.c +++ b/src/command.c @@ -17,31 +17,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* AIX requires this to be the first thing in the file. */ #include -#if __GNUC__ -#define alloca __builtin_alloca -#else -#if HAVE_ALLOCA_H -#include -#else -#ifdef _AIX -#pragma alloca -#else -#ifndef alloca /* predefined by HP cc +Olibcalls */ -char *alloca (); -#endif -#endif -#endif -#endif - #include +#include "command.h" #include #include #include #include #include "alloc.h" -#include "command.h" #include "error.h" #include "getline.h" #include "lexer.h" @@ -61,8 +44,6 @@ char *alloca (); #include #endif -#undef DEBUGGING -/*#define DEBUGGING 1*/ #include "debug-print.h" /* Global variables. */ @@ -88,14 +69,6 @@ struct command struct command *next; /* Next command with same word[0]. */ }; -/* Prototype all the command functions. */ -#define DEFCMD(NAME, T1, T2, T3, T4, FUNC) \ - int FUNC (void); -#define UNIMPL(NAME, T1, T2, T3, T4) -#include "command.def" -#undef DEFCMD -#undef UNIMPL - /* Define the command array. */ #define DEFCMD(NAME, T1, T2, T3, T4, FUNC) \ {NAME, {T1, T2, T3, T4}, FUNC, {NULL, NULL, NULL}, NULL}, @@ -276,7 +249,7 @@ cmd_parse (void) /* Perform the state transition if the command completed successfully (at least in part). */ - if (result != 0) + if (result != CMD_FAILURE) { pgm_state = cp->transition[pgm_state]; @@ -578,7 +551,7 @@ cmd_n_of_cases (void) x = lex_integer (); lex_get (); if (!lex_match_id ("ESTIMATED")) - default_dict.N = x; + dict_set_case_limit (default_dict, x); return lex_end_of_command (); } @@ -592,15 +565,24 @@ cmd_execute (void) return lex_end_of_command (); } + +#define assert_not_safer() \ + do { \ + if (set_safer) \ + { \ + msg (SE, _("This command not allowed when the SAFER option is set.")); \ + return CMD_FAILURE; \ + } \ +} while(0) + + + /* Parses, performs the ERASE command. */ int cmd_erase (void) { - if (set_safer) - { - msg (SE, _("This command not allowed when the SAFER option is set.")); - return CMD_FAILURE; - } + + assert_not_safer(); lex_match_id ("ERASE"); if (!lex_force_match_id ("FILE")) @@ -616,10 +598,10 @@ cmd_erase (void) return CMD_FAILURE; } - return lex_end_of_command (); + return CMD_SUCCESS; } -#if unix +#ifdef unix /* Spawn a shell process. */ static int shell (void) @@ -727,15 +709,11 @@ cmd_host (void) { int code; - if (set_safer) - { - msg (SE, _("This command not allowed when the SAFER option is set.")); - return CMD_FAILURE; - } + assert_not_safer(); lex_match_id ("HOST"); -#if unix +#ifdef unix /* Figure out whether to invoke an interactive shell or to execute a single shell command. */ if (lex_look_ahead () == '.')