Codechange: use std::string for script config

pull/562/head
Rubidium 1 year ago committed by rubidium42
parent bbcb55ebc9
commit ab51175db2

@ -70,7 +70,7 @@ void AIInstance::Died()
if (info != nullptr) { if (info != nullptr) {
ShowErrorMessage(STR_ERROR_AI_PLEASE_REPORT_CRASH, INVALID_STRING_ID, WL_WARNING); ShowErrorMessage(STR_ERROR_AI_PLEASE_REPORT_CRASH, INVALID_STRING_ID, WL_WARNING);
if (info->GetURL() != nullptr) { if (!info->GetURL().empty()) {
ScriptLog::Info("Please report the error to the following URL:"); ScriptLog::Info("Please report the error to the following URL:");
ScriptLog::Info(info->GetURL()); ScriptLog::Info(info->GetURL());
} }

@ -200,12 +200,12 @@ char *CrashLog::LogConfiguration(char *buffer, const char *last) const
if (c->ai_info == nullptr) { if (c->ai_info == nullptr) {
buffer += seprintf(buffer, last, " %2i: Human\n", (int)c->index); buffer += seprintf(buffer, last, " %2i: Human\n", (int)c->index);
} else { } else {
buffer += seprintf(buffer, last, " %2i: %s (v%d)\n", (int)c->index, c->ai_info->GetName(), c->ai_info->GetVersion()); buffer += seprintf(buffer, last, " %2i: %s (v%d)\n", (int)c->index, c->ai_info->GetName().c_str(), c->ai_info->GetVersion());
} }
} }
if (Game::GetInfo() != nullptr) { if (Game::GetInfo() != nullptr) {
buffer += seprintf(buffer, last, " GS: %s (v%d)\n", Game::GetInfo()->GetName(), Game::GetInfo()->GetVersion()); buffer += seprintf(buffer, last, " GS: %s (v%d)\n", Game::GetInfo()->GetName().c_str(), Game::GetInfo()->GetVersion());
} }
buffer += seprintf(buffer, last, "\n"); buffer += seprintf(buffer, last, "\n");

@ -368,7 +368,7 @@ static const PerformanceElement DISPLAY_ORDER_PFE[PFE_MAX] = {
static const char * GetAIName(int ai_index) static const char * GetAIName(int ai_index)
{ {
if (!Company::IsValidAiID(ai_index)) return ""; if (!Company::IsValidAiID(ai_index)) return "";
return Company::Get(ai_index)->ai_info->GetName(); return Company::Get(ai_index)->ai_info->GetName().c_str();
} }
/** @hideinitializer */ /** @hideinitializer */

@ -73,7 +73,7 @@ void GameInstance::Died()
if (info != nullptr) { if (info != nullptr) {
ShowErrorMessage(STR_ERROR_AI_PLEASE_REPORT_CRASH, INVALID_STRING_ID, WL_WARNING); ShowErrorMessage(STR_ERROR_AI_PLEASE_REPORT_CRASH, INVALID_STRING_ID, WL_WARNING);
if (info->GetURL() != nullptr) { if (!info->GetURL().empty()) {
ScriptLog::Info("Please report the error to the following URL:"); ScriptLog::Info("Please report the error to the following URL:");
ScriptLog::Info(info->GetURL()); ScriptLog::Info(info->GetURL());
} }

@ -153,7 +153,7 @@ struct ScriptListWindow : public Window {
SetDParam(0, selected_info->GetVersion()); SetDParam(0, selected_info->GetVersion());
DrawString(tr, STR_AI_LIST_VERSION); DrawString(tr, STR_AI_LIST_VERSION);
tr.top += FONT_HEIGHT_NORMAL + WidgetDimensions::scaled.vsep_normal; tr.top += FONT_HEIGHT_NORMAL + WidgetDimensions::scaled.vsep_normal;
if (selected_info->GetURL() != nullptr) { if (!selected_info->GetURL().empty()) {
SetDParamStr(0, selected_info->GetURL()); SetDParamStr(0, selected_info->GetURL());
DrawString(tr, STR_AI_LIST_URL); DrawString(tr, STR_AI_LIST_URL);
tr.top += FONT_HEIGHT_NORMAL + WidgetDimensions::scaled.vsep_normal; tr.top += FONT_HEIGHT_NORMAL + WidgetDimensions::scaled.vsep_normal;

@ -20,13 +20,6 @@
ScriptInfo::~ScriptInfo() ScriptInfo::~ScriptInfo()
{ {
free(this->author);
free(this->name);
free(this->short_name);
free(this->description);
free(this->date);
free(this->instance_name);
free(this->url);
free(this->SQ_instance); free(this->SQ_instance);
} }
@ -69,17 +62,17 @@ bool ScriptInfo::CheckMethod(const char *name) const
info->tar_file = info->scanner->GetTarFile(); info->tar_file = info->scanner->GetTarFile();
/* Cache the data the info file gives us. */ /* Cache the data the info file gives us. */
if (!info->engine->CallStringMethodStrdup(*info->SQ_instance, "GetAuthor", &info->author, MAX_GET_OPS)) return SQ_ERROR; if (!info->engine->CallStringMethod(*info->SQ_instance, "GetAuthor", &info->author, MAX_GET_OPS)) return SQ_ERROR;
if (!info->engine->CallStringMethodStrdup(*info->SQ_instance, "GetName", &info->name, MAX_GET_OPS)) return SQ_ERROR; if (!info->engine->CallStringMethod(*info->SQ_instance, "GetName", &info->name, MAX_GET_OPS)) return SQ_ERROR;
if (!info->engine->CallStringMethodStrdup(*info->SQ_instance, "GetShortName", &info->short_name, MAX_GET_OPS)) return SQ_ERROR; if (!info->engine->CallStringMethod(*info->SQ_instance, "GetShortName", &info->short_name, MAX_GET_OPS)) return SQ_ERROR;
if (!info->engine->CallStringMethodStrdup(*info->SQ_instance, "GetDescription", &info->description, MAX_GET_OPS)) return SQ_ERROR; if (!info->engine->CallStringMethod(*info->SQ_instance, "GetDescription", &info->description, MAX_GET_OPS)) return SQ_ERROR;
if (!info->engine->CallStringMethodStrdup(*info->SQ_instance, "GetDate", &info->date, MAX_GET_OPS)) return SQ_ERROR; if (!info->engine->CallStringMethod(*info->SQ_instance, "GetDate", &info->date, MAX_GET_OPS)) return SQ_ERROR;
if (!info->engine->CallIntegerMethod(*info->SQ_instance, "GetVersion", &info->version, MAX_GET_OPS)) return SQ_ERROR; if (!info->engine->CallIntegerMethod(*info->SQ_instance, "GetVersion", &info->version, MAX_GET_OPS)) return SQ_ERROR;
if (!info->engine->CallStringMethodStrdup(*info->SQ_instance, "CreateInstance", &info->instance_name, MAX_CREATEINSTANCE_OPS)) return SQ_ERROR; if (!info->engine->CallStringMethod(*info->SQ_instance, "CreateInstance", &info->instance_name, MAX_CREATEINSTANCE_OPS)) return SQ_ERROR;
/* The GetURL function is optional. */ /* The GetURL function is optional. */
if (info->engine->MethodExists(*info->SQ_instance, "GetURL")) { if (info->engine->MethodExists(*info->SQ_instance, "GetURL")) {
if (!info->engine->CallStringMethodStrdup(*info->SQ_instance, "GetURL", &info->url, MAX_GET_OPS)) return SQ_ERROR; if (!info->engine->CallStringMethod(*info->SQ_instance, "GetURL", &info->url, MAX_GET_OPS)) return SQ_ERROR;
} }
/* Check if we have settings */ /* Check if we have settings */

@ -32,14 +32,7 @@ public:
ScriptInfo() : ScriptInfo() :
engine(nullptr), engine(nullptr),
SQ_instance(nullptr), SQ_instance(nullptr),
author(nullptr),
name(nullptr),
short_name(nullptr),
description(nullptr),
date(nullptr),
instance_name(nullptr),
version(0), version(0),
url(nullptr),
scanner(nullptr) scanner(nullptr)
{} {}
~ScriptInfo(); ~ScriptInfo();
@ -47,22 +40,22 @@ public:
/** /**
* Get the Author of the script. * Get the Author of the script.
*/ */
const char *GetAuthor() const { return this->author; } const std::string &GetAuthor() const { return this->author; }
/** /**
* Get the Name of the script. * Get the Name of the script.
*/ */
const char *GetName() const { return this->name; } const std::string &GetName() const { return this->name; }
/** /**
* Get the 4 character long short name of the script. * Get the 4 character long short name of the script.
*/ */
const char *GetShortName() const { return this->short_name; } const std::string &GetShortName() const { return this->short_name; }
/** /**
* Get the description of the script. * Get the description of the script.
*/ */
const char *GetDescription() const { return this->description; } const std::string &GetDescription() const { return this->description; }
/** /**
* Get the version of the script. * Get the version of the script.
@ -72,27 +65,27 @@ public:
/** /**
* Get the last-modified date of the script. * Get the last-modified date of the script.
*/ */
const char *GetDate() const { return this->date; } const std::string &GetDate() const { return this->date; }
/** /**
* Get the name of the instance of the script to create. * Get the name of the instance of the script to create.
*/ */
const char *GetInstanceName() const { return this->instance_name; } const std::string &GetInstanceName() const { return this->instance_name; }
/** /**
* Get the website for this script. * Get the website for this script.
*/ */
const char *GetURL() const { return this->url; } const std::string &GetURL() const { return this->url; }
/** /**
* Get the filename of the main.nut script. * Get the filename of the main.nut script.
*/ */
const char *GetMainScript() const { return this->main_script.c_str(); } const std::string &GetMainScript() const { return this->main_script; }
/** /**
* Get the filename of the tar the script is in. * Get the filename of the tar the script is in.
*/ */
std::string GetTarFile() const { return this->tar_file; } const std::string &GetTarFile() const { return this->tar_file; }
/** /**
* Check if a given method exists. * Check if a given method exists.
@ -152,14 +145,14 @@ protected:
private: private:
std::string main_script; ///< The full path of the script. std::string main_script; ///< The full path of the script.
std::string tar_file; ///< If, which tar file the script was in. std::string tar_file; ///< If, which tar file the script was in.
const char *author; ///< Author of the script. std::string author; ///< Author of the script.
const char *name; ///< Full name of the script. std::string name; ///< Full name of the script.
const char *short_name; ///< Short name (4 chars) which uniquely identifies the script. std::string short_name; ///< Short name (4 chars) which uniquely identifies the script.
const char *description; ///< Small description of the script. std::string description; ///< Small description of the script.
const char *date; ///< The date the script was written at. std::string date; ///< The date the script was written at.
const char *instance_name; ///< Name of the main class in the script. std::string instance_name; ///< Name of the main class in the script.
int version; ///< Version of the script. int version; ///< Version of the script.
const char *url; ///< URL of the script. std::string url; ///< URL of the script.
class ScriptScanner *scanner; ///< ScriptScanner object that was used to scan this script info. class ScriptScanner *scanner; ///< ScriptScanner object that was used to scan this script info.
}; };

@ -67,7 +67,7 @@ ScriptInstance::ScriptInstance(const char *APIName) :
this->engine->SetPrintFunction(&PrintFunc); this->engine->SetPrintFunction(&PrintFunc);
} }
void ScriptInstance::Initialize(const char *main_script, const char *instance_name, CompanyID company) void ScriptInstance::Initialize(const std::string &main_script, const std::string &instance_name, CompanyID company)
{ {
ScriptObject::ActiveInstance active(this); ScriptObject::ActiveInstance active(this);
@ -80,7 +80,7 @@ void ScriptInstance::Initialize(const char *main_script, const char *instance_na
try { try {
ScriptObject::SetAllowDoCommand(false); ScriptObject::SetAllowDoCommand(false);
/* Load and execute the script for this script */ /* Load and execute the script for this script */
if (strcmp(main_script, "%_dummy") == 0) { if (main_script == "%_dummy") {
this->LoadDummyScript(); this->LoadDummyScript();
} else if (!this->engine->LoadScript(main_script) || this->engine->IsSuspended()) { } else if (!this->engine->LoadScript(main_script) || this->engine->IsSuspended()) {
if (this->engine->IsSuspended()) ScriptLog::Error("This script took too long to load script. AI is not started."); if (this->engine->IsSuspended()) ScriptLog::Error("This script took too long to load script. AI is not started.");

@ -55,7 +55,7 @@ public:
* @param instance_name The name of the instance out of the script to load. * @param instance_name The name of the instance out of the script to load.
* @param company Which company this script is serving. * @param company Which company this script is serving.
*/ */
void Initialize(const char *main_script, const char *instance_name, CompanyID company); void Initialize(const std::string &main_script, const std::string &instance_name, CompanyID company);
/** /**
* Get the value of a setting of the current instance. * Get the value of a setting of the current instance.

@ -97,8 +97,8 @@ void ScriptScanner::RegisterScript(ScriptInfo *info)
std::string script_name = fmt::format("{}.{}", script_original_name, info->GetVersion()); std::string script_name = fmt::format("{}.{}", script_original_name, info->GetVersion());
/* Check if GetShortName follows the rules */ /* Check if GetShortName follows the rules */
if (strlen(info->GetShortName()) != 4) { if (info->GetShortName().size() != 4) {
Debug(script, 0, "The script '{}' returned a string from GetShortName() which is not four characaters. Unable to load the script.", info->GetName()); Debug(script, 0, "The script '{}' returned a string from GetShortName() which is not four characters. Unable to load the script.", info->GetName());
delete info; delete info;
return; return;
} }
@ -107,9 +107,9 @@ void ScriptScanner::RegisterScript(ScriptInfo *info)
/* This script was already registered */ /* This script was already registered */
#ifdef _WIN32 #ifdef _WIN32
/* Windows doesn't care about the case */ /* Windows doesn't care about the case */
if (StrEqualsIgnoreCase(this->info_list[script_name]->GetMainScript(), info->GetMainScript()) == 0) { if (StrEqualsIgnoreCase(this->info_list[script_name]->GetMainScript(), info->GetMainScript())) {
#else #else
if (strcmp(this->info_list[script_name]->GetMainScript(), info->GetMainScript()) == 0) { if (this->info_list[script_name]->GetMainScript() == info->GetMainScript()) {
#endif #endif
delete info; delete info;
return; return;
@ -206,7 +206,7 @@ struct ScriptFileChecksumCreator : FileScanner {
static bool IsSameScript(const ContentInfo *ci, bool md5sum, ScriptInfo *info, Subdirectory dir) static bool IsSameScript(const ContentInfo *ci, bool md5sum, ScriptInfo *info, Subdirectory dir)
{ {
uint32 id = 0; uint32 id = 0;
const char *str = info->GetShortName(); const char *str = info->GetShortName().c_str();
for (int j = 0; j < 4 && *str != '\0'; j++, str++) id |= *str << (8 * j); for (int j = 0; j < 4 && *str != '\0'; j++, str++) id |= *str << (8 * j);
if (id != ci->unique_id) return false; if (id != ci->unique_id) return false;
@ -251,7 +251,7 @@ bool ScriptScanner::HasScript(const ContentInfo *ci, bool md5sum)
const char *ScriptScanner::FindMainScript(const ContentInfo *ci, bool md5sum) const char *ScriptScanner::FindMainScript(const ContentInfo *ci, bool md5sum)
{ {
for (const auto &item : this->info_list) { for (const auto &item : this->info_list) {
if (IsSameScript(ci, md5sum, item.second, this->GetDirectory())) return item.second->GetMainScript(); if (IsSameScript(ci, md5sum, item.second, this->GetDirectory())) return item.second->GetMainScript().c_str();
} }
return nullptr; return nullptr;
} }

@ -469,7 +469,7 @@ bool Squirrel::CallBoolMethod(HSQOBJECT instance, const char *method_name, bool
return true; return true;
} }
/* static */ bool Squirrel::CreateClassInstanceVM(HSQUIRRELVM vm, const char *class_name, void *real_instance, HSQOBJECT *instance, SQRELEASEHOOK release_hook, bool prepend_API_name) /* static */ bool Squirrel::CreateClassInstanceVM(HSQUIRRELVM vm, const std::string &class_name, void *real_instance, HSQOBJECT *instance, SQRELEASEHOOK release_hook, bool prepend_API_name)
{ {
Squirrel *engine = (Squirrel *)sq_getforeignptr(vm); Squirrel *engine = (Squirrel *)sq_getforeignptr(vm);
@ -479,12 +479,9 @@ bool Squirrel::CallBoolMethod(HSQOBJECT instance, const char *method_name, bool
sq_pushroottable(vm); sq_pushroottable(vm);
if (prepend_API_name) { if (prepend_API_name) {
size_t len = strlen(class_name) + strlen(engine->GetAPIName()) + 1; std::string prepended_class_name = engine->GetAPIName();
char *class_name2 = MallocT<char>(len); prepended_class_name += class_name;
seprintf(class_name2, class_name2 + len - 1, "%s%s", engine->GetAPIName(), class_name); sq_pushstring(vm, prepended_class_name, -1);
sq_pushstring(vm, class_name2, -1);
free(class_name2);
} else { } else {
sq_pushstring(vm, class_name, -1); sq_pushstring(vm, class_name, -1);
} }
@ -520,7 +517,7 @@ bool Squirrel::CallBoolMethod(HSQOBJECT instance, const char *method_name, bool
return true; return true;
} }
bool Squirrel::CreateClassInstance(const char *class_name, void *real_instance, HSQOBJECT *instance) bool Squirrel::CreateClassInstance(const std::string &class_name, void *real_instance, HSQOBJECT *instance)
{ {
ScriptAllocatorScope alloc_scope(this); ScriptAllocatorScope alloc_scope(this);
return Squirrel::CreateClassInstanceVM(this->vm, class_name, real_instance, instance, nullptr); return Squirrel::CreateClassInstanceVM(this->vm, class_name, real_instance, instance, nullptr);

@ -179,12 +179,12 @@ public:
* @param prepend_API_name Optional parameter; if true, the class_name is prefixed with the current API name. * @param prepend_API_name Optional parameter; if true, the class_name is prefixed with the current API name.
* @return False if creating failed. * @return False if creating failed.
*/ */
static bool CreateClassInstanceVM(HSQUIRRELVM vm, const char *class_name, void *real_instance, HSQOBJECT *instance, SQRELEASEHOOK release_hook, bool prepend_API_name = false); static bool CreateClassInstanceVM(HSQUIRRELVM vm, const std::string &class_name, void *real_instance, HSQOBJECT *instance, SQRELEASEHOOK release_hook, bool prepend_API_name = false);
/** /**
* Exactly the same as CreateClassInstanceVM, only callable without instance of Squirrel. * Exactly the same as CreateClassInstanceVM, only callable without instance of Squirrel.
*/ */
bool CreateClassInstance(const char *class_name, void *real_instance, HSQOBJECT *instance); bool CreateClassInstance(const std::string &class_name, void *real_instance, HSQOBJECT *instance);
/** /**
* Get the real-instance pointer. * Get the real-instance pointer.

Loading…
Cancel
Save