void prim_sysparm_array(PRIM_PROTOTYPE) { stk_array *nu; int security = TUNE_MLEV(player); CHECKOP(1); oper1 = POP(); /* string: match pattern */ if (oper1->type != PROG_STRING) abort_interp("Expected a string smatch pattern."); nu = tune_parms_array(DoNullInd(oper1->data.string), security, fr->pinning); CLEAR(oper1); PushArrayRaw(nu); }
void prim_setsysparm(PRIM_PROTOTYPE) { const char *oldvalue, *newvalue; int security = TUNE_MLEV(player); CHECKOP(2); oper1 = POP(); /* string: new parameter value */ oper2 = POP(); /* string: parameter to tune */ if (mlev < 4) abort_interp("Wizbit only primitive."); if (force_level) abort_interp("Cannot be forced."); if (oper2->type != PROG_STRING) abort_interp("Invalid argument. (1)"); if (!oper2->data.string) abort_interp("Null string argument. (1)"); if (oper1->type != PROG_STRING) abort_interp("Invalid argument. (2)"); oldvalue = tune_get_parmstring(oper2->data.string->data, security); newvalue = oper1->data.string ? oper1->data.string->data : ""; result = tune_setparm(oper2->data.string->data, newvalue, security); switch (result) { case TUNESET_SUCCESS: log_status("TUNED (MUF): %s(%d) tuned %s from '%s' to '%s'", NAME(player), player, oper2->data.string->data, oldvalue, newvalue); break; case TUNESET_UNKNOWN: abort_interp("Unknown parameter. (1)"); break; case TUNESET_SYNTAX: abort_interp("Bad parameter syntax. (2)"); break; case TUNESET_BADVAL: abort_interp("Bad parameter value. (2)"); break; case TUNESET_DENIED: abort_interp("Permission denied. (1)"); break; } CLEAR(oper1); CLEAR(oper2); }
void prim_sysparm(PRIM_PROTOTYPE) { const char *ptr; CHECKOP(1); oper1 = POP(); /* string: system parm name */ if (oper1->type != PROG_STRING) abort_interp("Invalid argument."); if (oper1->data.string) { ptr = tune_get_parmstring(oper1->data.string->data, TUNE_MLEV(player)); } else { ptr = ""; } CHECKOFLOW(1); CLEAR(oper1); PushString(ptr); }
void prim_setsysparm(PRIM_PROTOTYPE) { const char *parmname, *newvalue; char *oldvalue; int security = TUNE_MLEV(player); CHECKOP(2); oper1 = POP(); /* string: new parameter value */ oper2 = POP(); /* string: parameter to tune */ if (mlev < 4) abort_interp("Wizbit only primitive."); if (force_level) abort_interp("Cannot be forced."); if (oper2->type != PROG_STRING) abort_interp("Invalid argument. (1)"); if (!oper2->data.string) abort_interp("Null string argument. (1)"); if (oper1->type != PROG_STRING) abort_interp("Invalid argument. (2)"); parmname = oper2->data.string->data; /* Duplicate the string, otherwise the oldvalue pointer will be overridden to the new value when tune_setparm() is called. */ oldvalue = strdup(tune_get_parmstring(oper2->data.string->data, security)); newvalue = DoNullInd(oper1->data.string); result = tune_setparm(player, parmname, newvalue, security); /* Note: free(oldvalue) BEFORE calling abort_interp, or it will leak. */ switch (result) { case TUNESET_SUCCESS: log_status("TUNED (MUF): %s(%d) tuned %s from '%s' to '%s'", NAME(player), player, parmname, oldvalue, newvalue); if (oldvalue) free(oldvalue); break; case TUNESET_SUCCESS_DEFAULT: /* No need to show the flag in output */ TP_CLEAR_FLAG_DEFAULT(parmname); log_status("TUNED (MUF): %s(%d) tuned %s from '%s' to default", NAME(player), player, parmname, oldvalue); if (oldvalue) free(oldvalue); break; case TUNESET_UNKNOWN: if (oldvalue) free(oldvalue); abort_interp("Unknown parameter. (1)"); case TUNESET_SYNTAX: if (oldvalue) free(oldvalue); abort_interp("Bad parameter syntax. (2)"); case TUNESET_BADVAL: if (oldvalue) free(oldvalue); abort_interp("Bad parameter value. (2)"); case TUNESET_DENIED: if (oldvalue) free(oldvalue); abort_interp("Permission denied. (1)"); default: if (oldvalue) free(oldvalue); break; } CLEAR(oper1); CLEAR(oper2); }