void C_DoCommand (const char *cmd) { size_t argc, argsize; char **argv; char *args, *arg, *realargs; const char *data; DConsoleCommand *com; int check = -1; data = ParseString (cmd); if (!data) return; // Check if this is an action if (*com_token == '+') { check = GetActionBit (MakeKey (com_token + 1)); //if (Actions[check] < 255) // Actions[check]++; if (check != -1) Actions[check] = 1; } else if (*com_token == '-') { check = GetActionBit (MakeKey (com_token + 1)); //if (Actions[check]) // Actions[check]--; if (check != -1) Actions[check] = 0; if ((check == ACTION_LOOKDOWN || check == ACTION_LOOKUP || check == ACTION_MLOOK) && lookspring) AddCommandString ("centerview"); } // Check if this is a normal command if (check == -1) { argc = 1; argsize = strlen (com_token) + 1; realargs = new char[strlen (data) + 1]; strcpy (realargs, data); while ( (data = ParseString (data)) ) { argc++; argsize += strlen (com_token) + 1; } args = new char[argsize]; argv = new char *[argc]; arg = args; data = cmd; argsize = 0; while ( (data = ParseString (data)) ) { strcpy (arg, com_token); argv[argsize] = arg; arg += strlen (arg); *arg++ = 0; argsize++; } // Checking for matching commands follows this search order: // 1. Check the Commands map // 2. Check the CVars list command_map_t::iterator c = Commands().find(StdStringToLower(argv[0])); if (c != Commands().end()) { com = c->second; if(!safemode || stricmp(argv[0], "if")==0 || stricmp(argv[0], "exec")==0) { com->argc = argc; com->argv = argv; com->args = realargs; com->m_Instigator = consoleplayer().mo; com->Run (); } else { Printf (PRINT_HIGH, "Not a cvar command \"%s\"\n", argv[0]); } } else { // Check for any CVars that match the command cvar_t *var, *dummy; if ( (var = cvar_t::FindCVar (argv[0], &dummy)) ) { if (argc >= 2) { c = Commands().find("set"); if (c != Commands().end()) { com = c->second; com->argc = argc + 1; com->argv = argv - 1; // Hack com->m_Instigator = consoleplayer().mo; com->Run(); } else Printf(PRINT_HIGH, "set command not found\n"); } else { c = Commands().find("get"); if (c != Commands().end()) { com = c->second; com->argc = argc + 1; com->argv = argv - 1; // Hack com->m_Instigator = consoleplayer().mo; com->Run(); } else Printf(PRINT_HIGH, "get command not found\n"); } } else { // We don't know how to handle this command Printf (PRINT_HIGH, "Unknown command \"%s\"\n", argv[0]); } } delete[] argv; delete[] args; delete[] realargs; } }
void C_DoCommand (const char *cmd) { size_t argc, argsize; char **argv; char *args, *arg, *realargs; const char *data; DConsoleCommand *com; int check = -1; data = ParseString (cmd); if (!data) return; // Check if this is an action if (*com_token == '+') { check = GetActionBit (MakeKey (com_token + 1)); //if (Actions[check] < 255) // Actions[check]++; Actions[check] = 1; } else if (*com_token == '-') { check = GetActionBit (MakeKey (com_token + 1)); //if (Actions[check]) // Actions[check]--; Actions[check] = 0; if (check == ACTION_MLOOK && lookspring) { AddCommandString ("centerview"); } } // Check if this is a normal command if (check == -1) { argc = 1; argsize = strlen (com_token) + 1; realargs = new char[strlen (data) + 1]; strcpy (realargs, data); while ( (data = ParseString (data)) ) { argc++; argsize += strlen (com_token) + 1; } args = new char[argsize]; argv = new char *[argc]; arg = args; data = cmd; argsize = 0; while ( (data = ParseString (data)) ) { strcpy (arg, com_token); argv[argsize] = arg; arg += strlen (arg); *arg++ = 0; argsize++; } // Checking for matching commands follows this search order: // 1. Check the Commands map // 2. Check the CVars list command_map_t::iterator c = Commands().find(argv[0]); if (c != Commands().end()) { com = c->second; if(!safemode || strcmp(argv[0], "if")==0 || strcmp(argv[0], "exec")==0) { com->argc = argc; com->argv = argv; com->args = realargs; com->m_Instigator = consoleplayer().mo; com->Run (); } else { Printf (PRINT_HIGH, "Not a cvar command \"%s\"\n", argv[0]); } } else { // Check for any CVars that match the command cvar_t *var, *dummy; if ( (var = cvar_t::FindCVar (argv[0], &dummy)) ) { if (argc >= 2) { c = Commands().find("set"); if(c != Commands().end()) { com = c->second; com->argc = argc + 1; com->argv = argv - 1; // Hack com->m_Instigator = consoleplayer().mo; com->Run (); } else Printf (PRINT_HIGH, "set command not found\n"); } // [Russell] - Don't make the user feel inadequate, tell // them its either enabled, disabled or its other value else if (var->cstring()[0] == '1' && !(var->m_Flags & CVAR_NOENABLEDISABLE)) Printf (PRINT_HIGH, "\"%s\" is enabled.\n", var->name()); else if (var->cstring()[0] == '0' && !(var->m_Flags & CVAR_NOENABLEDISABLE)) Printf (PRINT_HIGH, "\"%s\" is disabled.\n", var->name()); else Printf (PRINT_HIGH, "\"%s\" is \"%s\"\n", var->name(), var->cstring()); } else { // We don't know how to handle this command Printf (PRINT_HIGH, "Unknown command \"%s\"\n", argv[0]); } } delete[] argv; delete[] args; delete[] realargs; } }