static int cpqw_user_cmd (void) { int argc, i; progs_t *pr = &sv_pr_state; if (cpqw_funcs.ClientCommand) { argc = Cmd_Argc (); if (argc > 7) argc = 7; *sv_globals.time = sv.time; *sv_globals.self = EDICT_TO_PROG (&sv_pr_state, sv_player); PR_PushFrame (pr); P_FLOAT (pr, 0) = argc; for (i = 0; i < argc; i++) P_STRING (pr, i + 1) = PR_SetTempString (pr, Cmd_Argv (i)); for (; i < 7; i++) P_STRING (pr, i + 1) = 0; PR_ExecuteProgram (pr, cpqw_funcs.ClientCommand); PR_PopFrame (pr); return (int) R_FLOAT (pr); } return 0; }
void SV_SetLocalinfo (const char *key, const char *value) { char *oldvalue = 0; if (sv_funcs.LocalinfoChanged) oldvalue = strdup (Info_ValueForKey (localinfo, key)); if (*value) Info_SetValueForKey (localinfo, key, value, !sv_highchars->int_val); else Info_RemoveKey (localinfo, key); if (sv_funcs.LocalinfoChanged) { *sv_globals.time = sv.time; *sv_globals.self = 0; PR_PushFrame (&sv_pr_state); PR_RESET_PARAMS (&sv_pr_state); P_STRING (&sv_pr_state, 0) = PR_SetTempString (&sv_pr_state, key); P_STRING (&sv_pr_state, 1) = PR_SetTempString (&sv_pr_state, oldvalue); P_STRING (&sv_pr_state, 2) = PR_SetTempString (&sv_pr_state, value); PR_ExecuteProgram (&sv_pr_state, sv_funcs.LocalinfoChanged); PR_PopFrame (&sv_pr_state); } if (oldvalue) free (oldvalue); }
/* PF_padstr string(string st, float len) padstr */ static void PF_padstr (progs_t *pr) { const char *st; size_t i, padlen, givenlen; char *padding; st = P_GSTRING (pr, 0); padlen = (unsigned int) P_FLOAT (pr, 1); givenlen = strlen (st); // Check if nothing should be done due to error or no need to.. if ( (padlen <= givenlen)) { // nothing should be done R_INT (pr) = P_STRING (pr, 0); // return given string return; } // ok, lets pad it! padlen -= givenlen; padding = alloca (padlen + 1); for (i = 0; i < padlen; i++) padding[i] = ' '; padding[i] = '\0'; R_STRING (pr) = PR_CatStrings (pr, st, padding); }
static void bi_Menu_Enter (progs_t *pr) { menu_item_t *item; if (!menu) return; item = menu->items[menu->cur_item]; if (item->func) { run_menu_pre (); PR_PushFrame (&menu_pr_state); PR_RESET_PARAMS (&menu_pr_state); P_STRING (&menu_pr_state, 0) = PR_SetTempString (&menu_pr_state, item->text); P_INT (&menu_pr_state, 1) = 0; PR_ExecuteProgram (&menu_pr_state, item->func); PR_PopFrame (&menu_pr_state); run_menu_post (); } else { menu = item; if (menu->enter_hook) { run_menu_pre (); PR_ExecuteProgram (&menu_pr_state, menu->enter_hook); run_menu_post (); } } }
int Menu_KeyEvent (knum_t key, short unicode, qboolean down) { menu_item_t *item; int ret; if (!menu) return 0; if (menu->keyevent) { run_menu_pre (); PR_RESET_PARAMS (&menu_pr_state); P_INT (&menu_pr_state, 0) = key; P_INT (&menu_pr_state, 1) = unicode; P_INT (&menu_pr_state, 2) = down; PR_ExecuteProgram (&menu_pr_state, menu->keyevent); ret = R_INT (&menu_pr_state); run_menu_post (); if (ret) return 1; } else if (menu->items && menu->items[menu->cur_item]->func && menu->items[menu->cur_item]->allkeys) { run_menu_pre (); PR_PushFrame (&menu_pr_state); item = menu->items[menu->cur_item]; PR_RESET_PARAMS (&menu_pr_state); P_STRING (&menu_pr_state, 0) = PR_SetTempString (&menu_pr_state, item->text); P_INT (&menu_pr_state, 1) = key; PR_ExecuteProgram (&menu_pr_state, item->func); PR_PopFrame (&menu_pr_state); ret = R_INT (&menu_pr_state); run_menu_post (); if (ret) return 1; } if (!menu || !menu->items) return 0; switch (key) { case QFK_DOWN: case QFM_WHEEL_DOWN: bi_Menu_Next (&menu_pr_state); return 1; case QFK_UP: case QFM_WHEEL_UP: bi_Menu_Prev (&menu_pr_state); return 1; case QFK_RETURN: case QFM_BUTTON1: bi_Menu_Enter (&menu_pr_state); return 1; default: return 0; } }
static void PF_delstr (progs_t *pr) { PR_FreeString (pr, P_STRING (pr, 0)); }
static void PF_colstr (progs_t *pr) { const char *srcstr; unsigned char *result; unsigned action; size_t len, i; srcstr = P_GSTRING (pr, 0); action = (unsigned) P_FLOAT (pr, 1); len = strlen (srcstr); // Check for errors, if any, return given string if (len == 0 || action > COLSTR_NUMBERV) { R_INT (pr) = P_STRING (pr, 0); // return given string return; } // Process string.. result = alloca (len + 1); strcpy ((char *) result, srcstr); switch (action) { case COLSTR_WHITE: for (i = 0; i < len; i++) { if (result[i] > 160) // is red char result[i] -= 128; } break; case COLSTR_MIX1: for (i = 0; i < len; i++) { if (i & 0x01) { if (result[i] < 128 && result[i] > 32) // is white char result[i] += 128; } else { if (result[i] > 160) // is red char result[i] -= 128; } } break; case COLSTR_RED: for (i = 0; i < len; i++) { if (result[i] < 128 && result[i] > 32) // is white char result[i] += 128; } break; case COLSTR_MIX2: for (i = 0; i < len; i++) { if (i & 0x01) { if (result[i] > 160) // is red char result[i] -= 128; } else { if (result[i] < 128 && result[i] > 32) // is white char result[i] += 128; } } break; case COLSTR_NUMBER: for (i = 0; i < len; i++) { if (result[i] > 47 && result[i] < 58) // is a white number result[i] -= 30; } break; case COLSTR_NUMBERV: for (i = 0; i < len; i++) { if (result[i] > 47 && result[i] < 58) // is a white number result[i] += 98; } } RETURN_STRING (pr, (char *) result); }