19 /* The list of cmds */
23 cmd_handler_t function;
27 static cmd_t *cmd_list = NULL;
30 /* add a new console command */
31 void cmd_addcommand(char *cmd_name, cmd_handler_t cmd_func)
35 Assert(cmd_name != NULL);
37 for (cmd = cmd_list; cmd; cmd = cmd->next) {
38 if (!stricmp(cmd_name, cmd->name))
41 con_printf(CON_NORMAL, "command %s already exists, not adding\n", cmd_name);
46 /* create command, insert at front of list */
47 MALLOC(cmd, cmd_t, 1);
49 cmd->function = cmd_func;
55 /* execute a parsed command */
56 void cmd_execute(int argc, char **argv)
59 for (cmd = cmd_list; cmd; cmd = cmd->next) {
60 if (!stricmp(argv[0], cmd->name))
61 return cmd->function(argc, argv);
65 if (argc > 1) // set value of cvar
66 cvar_set(argv[0], argv[1]);
67 con_printf(CON_NORMAL, "%s: %f\n", argv[0], cvar(argv[0]));
71 /* Parse an input string */
72 void cmd_parse(char *input)
74 char buffer[CMD_MAX_LENGTH];
75 char *tokens[CMD_MAX_TOKENS];
79 Assert(input != NULL);
81 /* Strip leading spaces */
82 for (i=0; isspace(input[i]); i++) ;
83 strncpy( buffer, &input[i], CMD_MAX_LENGTH );
85 //printf("lead strip \"%s\"\n",buffer);
87 /* If command is empty, give up */
90 /* Strip trailing spaces */
91 for (i=l-1; i>0 && isspace(buffer[i]); i--) ;
93 //printf("trail strip \"%s\"\n",buffer);
95 /* Split into tokens */
100 for (i=1; i<l; i++) {
101 if (isspace(buffer[i])) {
103 while (isspace(buffer[i+1]) && (i+1 < l)) i++;
104 tokens[num_tokens++] = &buffer[i+1];
108 /* Check for matching commands */
109 cmd_execute(num_tokens, tokens);
116 int Console_button_states[CMD_NUM_BUTTONS];
118 void cmd_attack_on(int argc, char **argv) { Console_button_states[CMD_ATTACK] = 1; }
119 void cmd_attack_off(int argc, char **argv) { Console_button_states[CMD_ATTACK] = 0; }
120 void cmd_attack2_on(int argc, char **argv) { Console_button_states[CMD_ATTACK2] = 1; }
121 void cmd_attack2_off(int argc, char **argv) { Console_button_states[CMD_ATTACK2] = 0; }
124 void cmd_impulse(int argc, char**argv) {
127 int n = atoi(argv[1]);
128 if (n >= 1 && n <= 20) {
129 select_weapon((n-1) % 10, (n-1) / 10, 0, 1);
133 /* echo to console */
134 void cmd_echo(int argc, char **argv) {
137 for (i = 1; i < argc; i++) {
139 strncat(buf, " ", 1024);
140 strncat(buf, argv[i], 1024);
142 con_printf(CON_NORMAL, "%s\n", buf);
146 void cmd_exec(int argc, char **argv) {
152 f = PHYSFSX_openReadBuffered(argv[1]);
154 con_printf(CON_CRITICAL, "exec: %s not found\n", argv[1]);
157 while (PHYSFSX_gets(f, buf)) {
166 cmd_t *p = cmd_list, *temp;
177 memset(Console_button_states, 0, sizeof(int) * CMD_NUM_BUTTONS);
179 cmd_addcommand("+attack", cmd_attack_on);
180 cmd_addcommand("-attack", cmd_attack_off);
181 cmd_addcommand("+attack2", cmd_attack2_on);
182 cmd_addcommand("-attack2", cmd_attack2_off);
184 cmd_addcommand("impulse", cmd_impulse);
186 cmd_addcommand("echo", cmd_echo);
188 cmd_addcommand("exec", cmd_exec);