static void __stdcall DoExtractString(char* scriptData, UInt32 dataLen, char* dest, ScriptEventList* eventList) { // copy the string memcpy(dest, scriptData, dataLen); dest[dataLen] = 0; if (dataLen && dest[0] == '$' && eventList && eventList->m_script) // variable name { Script::VariableInfo* varInfo = NULL; varInfo = eventList->m_script->GetVariableByName(dest + 1); if (varInfo) { ScriptEventList::Var* var; var = eventList->GetVariable(varInfo->idx); if (var) { StringVar* strVar; strVar = g_StringMap.Get(var->data); if (strVar) if (strVar->GetLength() < 0x100) // replace string with contents of string var strcpy_s(dest, strVar->GetLength() + 1, strVar->GetCString()); } } } // "%e" becomes an empty string else if (dataLen == 2 && dest[0] == '%' && toupper(dest[1]) == 'E') dest[0] = 0; }
const char* GetString(UInt32 stringID) { StringVar* var = g_StringMap.Get(stringID); if (var) return var->GetCString(); else return NULL; }
const char* ScriptToken::GetString() const { static const char* empty = ""; const char* result = NULL; if (type == kTokenType_String) result = value.str.c_str(); #if OBLIVION else if (type == kTokenType_StringVar && value.var) { StringVar* strVar = g_StringMap.Get(value.var->data); result = strVar ? strVar->GetCString() : NULL; } #endif return result ? result : empty; }
bool Cmd_sv_ToNumeric_Execute(COMMAND_ARGS) { UInt32 strID = 0; UInt32 startPos = 0; *result = 0; if (!ExtractArgs(EXTRACT_ARGS, &strID, &startPos)) return true; StringVar* strVar = g_StringMap.Get(strID); if (strVar) { const char* cStr = strVar->GetCString(); *result = strtod(cStr + startPos, NULL); } return true; }
static UInt32 __stdcall DoExtractString(char* scriptData, UInt32 dataLen, char* dest, ScriptEventList* eventList) { // copy the string memcpy(dest, scriptData, dataLen); UInt32 newDataLen = dataLen; if (newDataLen && dest[0] == '$' && eventList && eventList->m_script) // variable name { VariableInfo* varInfo = NULL; if ((newDataLen < 0x100) && (dest[newDataLen])) dest[newDataLen] = 0; varInfo = eventList->m_script->GetVariableByName(dest + 1); if (varInfo) { ScriptEventList::Var* var; var = eventList->GetVariable(varInfo->idx); if (var) { StringVar* strVar; strVar = g_StringMap.Get(var->data); if (strVar) if (strVar->GetLength() < 0x100) { // replace string with contents of string var strcpy_s(dest, strVar->GetLength() + 1, strVar->GetCString()); newDataLen = strVar->GetLength(); } } } } // "%e" becomes an empty string else if (newDataLen == 2 && dest[0] == '%' && toupper(dest[1]) == 'E') { newDataLen = 0; } // force zero terminated string if ((newDataLen < 0x100) && (dest[newDataLen])) dest[newDataLen] = 0; return dataLen; }