21 cmd_handler_t function;
25 static cmd_t *cmd_list = NULL;
28 /* add a new console command */
29 void cmd_addcommand(char *cmd_name, cmd_handler_t cmd_func)
33 Assert(cmd_name != NULL);
35 for (cmd = cmd_list; cmd; cmd = cmd->next) {
36 if (!stricmp(cmd_name, cmd->name))
39 con_printf(CON_NORMAL, "command %s already exists, not adding\n", cmd_name);
44 /* create command, insert at front of list */
45 MALLOC(cmd, cmd_t, 1);
47 cmd->function = cmd_func;
53 /* execute a parsed command */
54 void cmd_execute(int argc, char **argv)
57 for (cmd = cmd_list; cmd; cmd = cmd->next) {
58 if (!stricmp(argv[0], cmd->name))
59 return cmd->function(argc, argv);
63 if (argc > 1) // set value of cvar
64 cvar_set(argv[0], argv[1]);
65 con_printf(CON_NORMAL, "%s: %f\n", argv[0], cvar(argv[0]));
69 /* Parse an input string */
70 void cmd_parse(char *input)
72 char buffer[CMD_MAX_LENGTH];
73 char *tokens[CMD_MAX_TOKENS];
77 Assert(input != NULL);
79 /* Strip leading spaces */
80 for (i=0; isspace(input[i]); i++) ;
81 strncpy( buffer, &input[i], CMD_MAX_LENGTH );
83 printf("lead strip \"%s\"\n",buffer);
85 /* If command is empty, give up */
88 /* Strip trailing spaces */
89 for (i=l-1; i>0 && isspace(buffer[i]); i--) ;
91 printf("trail strip \"%s\"\n",buffer);
93 /* Split into tokens */
99 if (isspace(buffer[i])) {
101 while (isspace(buffer[i+1]) && (i+1 < l)) i++;
102 tokens[num_tokens++] = &buffer[i+1];
106 /* Check for matching commands */
107 cmd_execute(num_tokens, tokens);
114 int Console_button_states[CMD_NUM_BUTTONS];
116 void cmd_attack_on(int argc, char **argv) { Console_button_states[CMD_ATTACK] = 1; }
117 void cmd_attack_off(int argc, char **argv) { Console_button_states[CMD_ATTACK] = 0; }
118 void cmd_attack2_on(int argc, char **argv) { Console_button_states[CMD_ATTACK2] = 1; }
119 void cmd_attack2_off(int argc, char **argv) { Console_button_states[CMD_ATTACK2] = 0; }
124 cmd_t *p = cmd_list, *temp;
135 memset(Console_button_states, 0, sizeof(int) * CMD_NUM_BUTTONS);
137 cmd_addcommand("+attack", cmd_attack_on);
138 cmd_addcommand("-attack", cmd_attack_off);
139 cmd_addcommand("+attack2", cmd_attack2_on);
140 cmd_addcommand("-attack2", cmd_attack2_off);