void DumpBindings (FILE *f) { int i, leftright; char *spaces, *string; qbool printed = false; fprintf(f, "unbindall\n"); for (i = 0; i < (sizeof(keybindings) / sizeof(*keybindings)); i++) { leftright = Key_IsLeftRightSameBind(i) ? 1 : 0; if (keybindings[i] || leftright) { printed = true; string = Key_KeynumToString(i); spaces = CreateSpaces(BIND_ALIGN_COL - strlen(string) - 6); if (i == ';') fprintf (f, "bind \";\"%s\"%s\"\n", spaces, keybindings[i]); else fprintf (f, "bind %s%s\"%s\"\n", string, spaces, keybindings[leftright ? i + 1 : i]); if (leftright) i += 2; } } if (!printed) fprintf(f, "//no bindings\n"); }
void DumpHUD(const char *name) { // Dumps all variables from CFG_GROUP_HUD into a file extern cvar_t scr_newHud; FILE *f; int max_width = 0, i = 0, j; char *outfile, *spaces; cvar_t *var; cvar_t *sorted[MAX_DUMPED_CVARS]; outfile = va("%s/ezquake/configs/%s", com_basedir, name); if (!(f = fopen (outfile, "w"))) { FS_CreatePath(outfile); if (!(f = fopen (outfile, "w"))) { Com_Printf ("Couldn't write %s.\n", name); return; } } fprintf(f, "//\n"); fprintf(f, "// Head Up Display Configuration Dump\n"); fprintf(f, "//\n\n"); for(var = cvar_vars; var; var = var->next) if(var->group && !strcmp(var->group->name, CVAR_GROUP_HUD)) { max_width = max(max_width, strlen(var->name)); sorted[i++] = var; } max_width++; qsort(sorted, i, sizeof(cvar_t *), Cvar_CvarCompare); spaces = CreateSpaces(max_width - strlen(scr_newHud.name)); fprintf(f, "%s%s\"%d\"\n", scr_newHud.name, spaces, scr_newHud.integer); for(j = 0; j < i; j++) { spaces = CreateSpaces(max_width - strlen(sorted[j]->name)); fprintf(f, "%s%s\"%s\"\n", sorted[j]->name, spaces, sorted[j]->string); } fprintf(f, "hud_recalculate\n"); fclose(f); }
void SList_Save (FILE *f) { int i; char *spaces; for (i = 0; i < MAX_SERVER_LIST; i++) { if (!slist[i].server) break; spaces = CreateSpaces(32 - strlen(slist[i].server)); fprintf(f, "%s%s%s\n", slist[i].server, spaces, slist[i].description); } }
qbool Cvar_Command (void) { cvar_t *v; // check variables if (!(v = Cvar_Find (Cmd_Argv(0)))) return false; if (Cmd_Argc() == 1) { if (cvar_viewhelp.value) Help_DescribeCvar (v); if (cvar_viewdefault.value) { char *spaces = CreateSpaces(strlen(v->name) + 2); Com_Printf ("%s : default value is \"%s\"\n", v->name, v->defaultvalue); Com_Printf ("%s current value is \"%s\"\n", spaces, v->string); if ((v->flags & CVAR_AUTO) && v->autoString) { Com_Printf ("%s auto value is \"%s\"\n", spaces, v->autoString); } if (cvar_viewlatched.integer && v->latchedString) { Com_Printf ("%s latched value is \"%s\"\n", spaces, v->latchedString); } } else { Com_Printf ("\"%s\" is \"%s\"\n", v->name, v->string); if ((v->flags & CVAR_AUTO) && v->autoString) { Com_Printf ("auto: \"%s\"\n", v->autoString); } if (cvar_viewlatched.integer && v->latchedString) { Com_Printf ("latched: \"%s\"\n", v->latchedString); } } } else { // RestrictTriggers means that advanced (possibly cheaty) scripts are not allowed // So we will force the usage of user-created variables to go through the set command if ((v->flags & CVAR_USER_CREATED) && Rulesets_RestrictTriggers()) { Com_Printf ("Current ruleset requires \"set\" with user created variables\n"); return true; } Cvar_Set (v, Cmd_MakeArgs(1)); } return true; }
static void DumpAliases(FILE *f) { int maxlen, i, j, count, lonely_count, minus_index, minus_count; char *spaces; cmd_alias_t *b, *a, *sorted_aliases[1024], *lonely_pluses[512]; qbool partner, printed; fprintf(f, "unaliasall\n"); for (count = maxlen = 0, a = cmd_alias; (count < (sizeof(sorted_aliases) / sizeof(*sorted_aliases))) && a; a = a->next) { if (!(a->flags & (ALIAS_SERVER|ALIAS_TEMP))) { maxlen = max(maxlen, strlen(a->name)); count++; } } if (!count) { fprintf(f, "//no aliases\n"); return; } for (i = 0, a = cmd_alias; i < count; a = a->next) { if (!(a->flags & (ALIAS_SERVER|ALIAS_TEMP))) sorted_aliases[i++] = a; } qsort(sorted_aliases, count, sizeof (cmd_alias_t *), Cmd_AliasCompare); for (minus_index = -1, minus_count = i = 0; i < count; i++) { a = sorted_aliases[i]; if (a->name[0] == '-') { if (minus_index == -1) minus_index = i; minus_count++; } else if (a->name[0] != '+') break; } printed = false; for (lonely_count = i = 0; i < count; i++) { a = sorted_aliases[i]; if (a->name[0] != '+') break; for (partner = false, j = minus_index; j >= 0 && j < minus_index + minus_count; j++) { b = sorted_aliases[j]; if (!strcasecmp(b->name + 1, a->name + 1)) { spaces = CreateSpaces(maxlen + 3 - strlen(a->name)); fprintf (f, "alias %s%s\"%s\"\n", a->name, spaces, a->value); spaces = CreateSpaces(maxlen + 3 - strlen(b->name)); fprintf (f, "alias %s%s\"%s\"\n", b->name, spaces, b->value); printed = partner = true; break; } } if (!partner) lonely_pluses[lonely_count++] = a; } for (i = 0; i < lonely_count; i++) { a = lonely_pluses[i]; spaces = CreateSpaces(maxlen + 3 - strlen(a->name)); fprintf (f, "alias %s%s\"%s\"\n", a->name, spaces, a->value); printed = true; } for (i = minus_index; i >= 0 && i < minus_index + minus_count; i++) { a = sorted_aliases[i]; for (partner = false, j = 0; j < minus_index; j++) { b = sorted_aliases[j]; if (!strcasecmp(b->name + 1, a->name + 1)) { partner = true; break; } } if (!partner) { spaces = CreateSpaces(maxlen + 3 - strlen(a->name)); fprintf (f, "alias %s%s\"%s\"\n", a->name, spaces, a->value); printed = true; } } for (i = (minus_index == -1 ? 0 : minus_index + minus_count); i < count; i++) { a = sorted_aliases[i]; if (minus_index != -1 || a->name[0] != '+') { if (printed) fprintf(f, "\n"); printed = false; spaces = CreateSpaces(maxlen + 3 - strlen(a->name)); fprintf (f, "alias %s%s\"%s\"\n", a->name, spaces, a->value); } } }
static void DumpVariables(FILE *f) { cvar_t *var, *sorted_vars[MAX_DUMPED_CVARS]; cvar_group_t *group; char *spaces; int count, i, col_size; qbool skip_userinfo = false; for (col_size = 0, var = cvar_vars; var; var = var->next) { if ( !( (var->flags & (CVAR_USER_CREATED | CVAR_ROM | CVAR_INIT)) || (var->group && (!strcmp(CVAR_GROUP_NO_GROUP, var->group->name) || !strcmp(CVAR_GROUP_SERVERINFO, var->group->name)) ) )) { col_size = max(col_size, strlen(var->name)); } } col_size = min(col_size + 2, CONFIG_MAX_COL); if (cfg_save_unchanged.value) { fprintf(f, "//All variables (even those with default values) are listed below.\n"); fprintf(f, "//You can use \"cfg_save_unchanged 0\" to save only changed variables.\n\n"); } else { fprintf(f, "//Only variables with non-default values are listed below.\n"); fprintf(f, "//You can use \"cfg_save_unchanged 1\" to save all variables.\n\n"); } for (group = cvar_groups; group; group = group->next) { if ( !strcmp(CVAR_GROUP_NO_GROUP, group->name) || !strcmp(CVAR_GROUP_SERVERINFO, group->name) || (!cfg_save_userinfo.value && !strcmp(CVAR_GROUP_USERINFO, group->name)) ) continue; skip_userinfo = ((cfg_save_userinfo.value == 1) && !strcmp(CVAR_GROUP_USERINFO, group->name)) ? true : false; for (count = 0, var = group->head; var && count < MAX_DUMPED_CVARS; var = var->next_in_group) { if (skip_userinfo && ( !strcmp(var->name, "team") || !strcmp(var->name, "skin") || !strcmp(var->name, "spectator") ||!strcmp(var->name, "name") || !strcmp(var->name, "topcolor") || !strcmp(var->name, "bottomcolor") )) continue; if (Config_Unsaved_Cvar(var->name)) { continue; } if (!(var->flags & (CVAR_USER_CREATED | CVAR_ROM | CVAR_INIT))) { if (cfg_save_unchanged.value || strcmp(var->string, var->defaultvalue)) { sorted_vars[count++] = var; } } } if (!count) continue; if ( strcmp(group->name, CVAR_GROUP_ITEM_NAMES) && strcmp(group->name, CVAR_GROUP_ITEM_NEED) && strcmp(group->name, CVAR_GROUP_USERINFO) && strcmp(group->name, CVAR_GROUP_SKIN) ) qsort(sorted_vars, count, sizeof (cvar_t *), Cvar_CvarCompare); fprintf(f, "//%s\n", group->name); for (i = 0; i < count; i++) { var = sorted_vars[i]; if (cfg_save_unchanged.value || strcmp(var->string, var->defaultvalue)) { spaces = CreateSpaces(col_size - strlen(var->name)); fprintf(f, "%s%s\"%s\"\n", var->name, spaces, var->string); } } fprintf(f, "\n"); } for (count = 0, var = cvar_vars; var && count < MAX_DUMPED_CVARS; var = var->next) { if (!var->group && !(var->flags & (CVAR_USER_CREATED | CVAR_ROM | CVAR_INIT))) { if (cfg_save_unchanged.value || strcmp(var->string, var->defaultvalue)) { sorted_vars[count++] = var; } } } if (count) { qsort(sorted_vars, count, sizeof (cvar_t *), Cvar_CvarCompare); fprintf(f, "//Unsorted Variables\n"); for (i = 0; i < count; i++) { var = sorted_vars[i]; spaces = CreateSpaces(col_size - strlen(var->name)); fprintf(f, "%s%s\"%s\"\n", var->name, spaces, var->string); } fprintf(f, "\n"); } for (col_size = col_size - 2, count = 0, var = cvar_vars; var && count < MAX_DUMPED_CVARS; var = var->next) { if (var->flags & CVAR_USER_CREATED) { sorted_vars[count++] = var; col_size = max(col_size, strlen(var->name)); } } if (!count) return; col_size = min(col_size + 2, CONFIG_MAX_COL); qsort(sorted_vars, count, sizeof (cvar_t *), Cvar_CvarCompare); fprintf(f, "//User Created Variables\n"); for (i = 0; i < count; i++) { var = sorted_vars[i]; spaces = CreateSpaces(col_size - strlen(var->name) - 5); fprintf (f, "%s %s%s\"%s\"\n", (var->teamplay) ? "set_tp" : "set", var->name, spaces, var->string); } }