Res *setVariableValue(char *varName, Res *val, ruleExecInfo_t *rei, Env *env, rError_t *errmsg, Region *r) { int i; char *varMap; char errbuf[ERR_MSG_LEN]; if (varName[0] == '$') { if(TYPE(val)!=T_STRING) { snprintf(errbuf, ERR_MSG_LEN, "error: assign a nonstring value to session variable %s.", varName); addRErrorMsg(errmsg, RE_UNSUPPORTED_OP_OR_TYPE, errbuf); return newErrorRes(r, RE_UNSUPPORTED_OP_OR_TYPE); } i = getVarMap("", varName, &varMap, 0); if (i < 0) { snprintf(errbuf, ERR_MSG_LEN, "error: unsupported session variable \"%s\".",varName); addRErrorMsg(errmsg, RE_UNSUPPORTED_SESSION_VAR, errbuf); return newErrorRes(r, RE_UNSUPPORTED_SESSION_VAR); } setVarValue(varMap, rei, strdup(val->text)); return newIntRes(r, 0); } else if(varName[0] == '*') { if(lookupFromEnv(env, varName)==NULL) { /* new variable */ if(insertIntoHashTable(env->current, varName, val) == 0) { snprintf(errbuf, ERR_MSG_LEN, "error: unable to write to local variable \"%s\".",varName); addRErrorMsg(errmsg, RE_UNABLE_TO_WRITE_LOCAL_VAR, errbuf); return newErrorRes(r, RE_UNABLE_TO_WRITE_LOCAL_VAR); } } else { updateInEnv(env, varName, val); } return newIntRes(r, 0); } return newIntRes(r, 0); }
void MystScriptParser_Channelwood::o_valveHandleMoveStop(uint16 op, uint16 var, uint16 argc, uint16 *argv) { debugC(kDebugScript, "Opcode %d: Valve handle move stop", op); MystResourceType12 *handle = static_cast<MystResourceType12 *>(_invokingResource); // Update state with valve position if (_tempVar <= 5) setVarValue(_valveVar, 1); else setVarValue(_valveVar, 0); // Play release sound uint16 soundId = handle->getList3(0); if (soundId) _vm->_sound->replaceSoundMyst(soundId); // Redraw valve _vm->redrawArea(_valveVar); // Restore cursor _vm->checkCursorHints(); }
void MystScriptParser::o_setVar(uint16 op, uint16 var, uint16 argc, uint16 *argv) { debugC(kDebugScript, "Opcode %d: Set var %d: %d", op, var, argv[0]); if (setVarValue(var, argv[0])) _vm->redrawArea(var); }
void MystScriptParser::o_setVar(uint16 var, const ArgumentsArray &args) { if (setVarValue(var, args[0])) _vm->getCard()->redrawArea(var); }