void MVD_ClockList_TopItems_Draw(double time_limit, int style, int x, int y, float scale) { mvd_clock_t *current = mvd_clocklist; char *clockitem; while (current && current->clockval - cls.demotime < time_limit) { int time = (int) ((current->clockval - cls.demotime) + 1); if(style == 1){ // tp_name_* clockitem = va("%s", TP_ItemName(mvd_wp_info[current->itemtype].it)); }else if (style == 2){ // brown + white clockitem = va("%s", mvd_wp_info[current->itemtype].name); CharsToBrown(clockitem, clockitem + strlen(mvd_wp_info[current->itemtype].name)); }else{ // built-in color(GL) or simple white (software) clockitem = va("%s", mvd_wp_info[current->itemtype].colored_name); } if(time > 0) clockitem = va("%s %d", clockitem, time); else clockitem = va("%s spawn", clockitem); Draw_SString (x, y, clockitem, scale); current = current->next; y += LETTERHEIGHT * scale; } }
// XXX: this could do with some refactoring void Cvar_Set_Calc_f(void) { cvar_t *var, *var2; char *var_name, *op, *a2, *a3; int pos, len, division_by_zero = 0; float num1, num2, result; char buf[1024]; var_name = Cmd_Argv (1); var = Cvar_Find (var_name); if (!var) var = Cvar_Create (var_name, Cmd_Argv (2), 0); a2 = Cmd_Argv (2); a3 = Cmd_Argv (3); if (!strcmp (a2, "strlen")) { Cvar_SetValue (var, strlen (a3)); return; } else if (!strcmp (a2, "int")) { Cvar_SetValue (var, (int) Q_atof (a3)); return; } else if (!strcmp (a2, "substr")) { int var2len; var2 = Cvar_Find (a3); if (!var2) { Com_Printf ("Unknown variable \"%s\"\n", a3); return; } pos = atoi (Cmd_Argv (4)); len = (Cmd_Argc () < 6)? 1 : atoi (Cmd_Argv (5)); if (len == 0) { Cvar_Set (var, ""); return; } if (len < 0 || pos < 0) { Com_Printf ("substr: invalid len or pos\n"); return; } var2len = strlen (var2->string); if (var2len < pos) { Com_Printf ("substr: string length exceeded\n"); return; } len = min (var2len - pos, len); strlcpy (buf, var2->string + pos, len); Cvar_Set (var, buf); return; } else if (!strcmp (a2, "set_substr")) { int var1len,var2len; var2 = Cvar_Find (a3); if (!var2) { Com_Printf ("Unknown variable \"%s\"\n", a3); return; } var1len = strlen (var->string); var2len = strlen (var2->string); pos = atoi (Cmd_Argv (4)); strlcpy (buf, var->string, sizeof (buf)); if (pos + var2len > var1len) { // need to expand int i; for (i = var1len; i < pos + var2len; i++) buf[i] = ' '; buf[pos+var2len] = 0; } strlcpy (buf + pos, var2->string, sizeof (buf) - pos); Cvar_Set (var, buf); return; } else if (!strcmp (a2, "pos")) { var2 = Cvar_Find (a3); if (!var2) { Com_Printf ("Unknown variable \"%s\"\n", a3); return; } op = strstr (var2->string, Cmd_Argv (4)); Cvar_SetValue (var, op ? op - var2->string : -1); return; } else if (!strcmp (a2, "tobrown")) { strlcpy (buf, var->string, sizeof (buf)); CharsToBrown (buf, buf + strlen (buf)); Cvar_Set (var, buf); return; } else if (!strcmp (a2, "towhite")) { strlcpy (buf, var->string, sizeof (buf)); CharsToWhite (buf, buf + strlen (buf)); Cvar_Set (var, buf); return; } num1 = Q_atof (a2); op = a3; num2 = Q_atof (Cmd_Argv (4)); if (!strcmp (op, "+")) result = num1 + num2; else if (!strcmp (op, "-")) result = num1 - num2; else if (!strcmp (op, "*")) result = num1 * num2; else if (!strcmp (op, "/")) { if (num2 != 0) result = num1 / num2; else division_by_zero = 1; } else if (!strcmp (op, "%")) { if ((int) num2 != 0) result = (int) num1 % (int) num2; else division_by_zero = 1; } else if (!strcmp (op, "div")) { if ((int) num2 != 0) result = (int) num1 / (int) num2; else division_by_zero = 1; } else if (!strcmp (op, "and")) { result = (int) num1 & (int) num2; } else if (!strcmp (op, "or")) { result = (int) num1 | (int) num2; } else if (!strcmp (op, "xor")) { result = (int) num1 ^ (int) num2; } else { Com_Printf ("set_calc: unknown operator: %s\nvalid operators are: + - * / div %% and or xor\n", op); // Com_Printf("set_calc: unknown command: %s\nvalid commands are: strlen int substr set_substr pos\n", a2); return; } if (division_by_zero) { Com_Printf ("set_calc: can't divide by zero\n"); result = 999; } Cvar_SetValue (var, result); }
void Help_VarDescription (const char *varname, char* buf, size_t bufsize) { extern void CharsToBrown(char*, char*); extern cvar_t menu_advanced; xml_variable_t *var; variable_enum_value_t *cv; var = XSD_Variable_Load (va ("help/variables/%s.xml", varname)); if(menu_advanced.integer && strlen(varname)){ strlcat(buf, "Variable name: ", bufsize); strlcat(buf, varname, bufsize); CharsToBrown(buf, buf + strlen (buf) - strlen(varname)); strlcat(buf, "\n", bufsize); } if (!var) return; if (var->description && strlen (var->description) > 1) { strlcat (buf, var->description, bufsize); strlcat (buf, "\n", bufsize); } if (var->remarks) { strlcat (buf, "remarks: ", bufsize); strlcat (buf, var->remarks, bufsize); strlcat (buf, "\n", bufsize); } switch (var->value_type) { case t_boolean: if (var->value.boolean_value.false_description) { strlcat (buf, "0: ", bufsize); strlcat (buf, var->value.boolean_value.false_description, bufsize); strlcat (buf, "\n", bufsize); } if (var->value.boolean_value.true_description) { strlcat (buf, "1: ", bufsize); strlcat (buf, var->value.boolean_value.true_description, bufsize); strlcat (buf, "\n", bufsize); } break; case t_float: if (var->value.float_description) { strlcat (buf, var->value.float_description, bufsize); strlcat (buf, "\n", bufsize); } break; case t_integer: if (var->value.integer_description) { strlcat (buf, var->value.integer_description, bufsize); strlcat (buf, "\n", bufsize); } break; case t_string: if (var->value.string_description) { strlcat (buf, var->value.string_description, bufsize); strlcat (buf, "\n", bufsize); } break; case t_enum: cv = var->value.enum_value; while(cv) { if (cv->name && cv->description) { strlcat (buf, cv->name, bufsize); strlcat (buf, ":", bufsize); strlcat (buf, cv->description, bufsize); strlcat (buf, "\n", bufsize); } cv = cv->next; } break; } XSD_Variable_Free ((xml_t *) var); }