00001
00002
00003
00004
00005
00006
00007
00008
00009
00012 #include <squirrel.h>
00013 #include "../stdafx.h"
00014
00015 #include "../string_func.h"
00016 #include "../strings_func.h"
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00028 void Script_CreateDummyInfo(HSQUIRRELVM vm, const char *type, const char *dir)
00029 {
00030 char dummy_script[4096];
00031 char *dp = dummy_script;
00032 dp += seprintf(dp, lastof(dummy_script), "class Dummy%s extends %sInfo {\n", type, type);
00033 dp += seprintf(dp, lastof(dummy_script), "function GetAuthor() { return \"OpenTTD Developers Team\"; }\n");
00034 dp += seprintf(dp, lastof(dummy_script), "function GetName() { return \"Dummy%s\"; }\n", type);
00035 dp += seprintf(dp, lastof(dummy_script), "function GetShortName() { return \"DUMM\"; }\n");
00036 dp += seprintf(dp, lastof(dummy_script), "function GetDescription() { return \"A Dummy %s that is loaded when your %s/ dir is empty\"; }\n", type, dir);
00037 dp += seprintf(dp, lastof(dummy_script), "function GetVersion() { return 1; }\n");
00038 dp += seprintf(dp, lastof(dummy_script), "function GetDate() { return \"2008-07-26\"; }\n");
00039 dp += seprintf(dp, lastof(dummy_script), "function CreateInstance() { return \"Dummy%s\"; }\n", type);
00040 dp += seprintf(dp, lastof(dummy_script), "} RegisterDummy%s(Dummy%s());\n", type, type);
00041
00042 const SQChar *sq_dummy_script = OTTD2SQ(dummy_script);
00043
00044 sq_pushroottable(vm);
00045
00046
00047 if (SQ_SUCCEEDED(sq_compilebuffer(vm, sq_dummy_script, scstrlen(sq_dummy_script), _SC("dummy"), SQTrue))) {
00048 sq_push(vm, -2);
00049 if (SQ_SUCCEEDED(sq_call(vm, 1, SQFalse, SQTrue))) {
00050 sq_pop(vm, 1);
00051 return;
00052 }
00053 }
00054 NOT_REACHED();
00055 }
00056
00058 void Script_CreateDummy(HSQUIRRELVM vm, StringID string, const char *type)
00059 {
00060
00061
00062
00063
00064 char error_message[1024];
00065 GetString(error_message, string, lastof(error_message));
00066
00067
00068 char safe_error_message[1024];
00069 char *q = safe_error_message;
00070 for (const char *p = error_message; *p != '\0' && q < lastof(safe_error_message) - 2; p++, q++) {
00071 if (*p == '"' || *p == '\\') *q++ = '\\';
00072 *q = *p;
00073 }
00074 *q = '\0';
00075
00076
00077 char dummy_script[4096];
00078 char *dp = dummy_script;
00079 dp += seprintf(dp, lastof(dummy_script), "class Dummy%s extends %sController {\n function Start()\n {\n", type, type);
00080
00081
00082
00083 char *newline;
00084 char *p = safe_error_message;
00085 do {
00086 newline = strchr(p, '\n');
00087 if (newline != NULL) *newline = '\0';
00088
00089 dp += seprintf(dp, lastof(dummy_script), " %sLog.Error(\"%s\");\n", type, p);
00090 p = newline + 1;
00091 } while (newline != NULL);
00092
00093 dp = strecpy(dp, " }\n}\n", lastof(dummy_script));
00094
00095
00096
00097
00098 const SQChar *sq_dummy_script = OTTD2SQ(dummy_script);
00099
00100
00101 sq_pushroottable(vm);
00102 if (SQ_SUCCEEDED(sq_compilebuffer(vm, sq_dummy_script, scstrlen(sq_dummy_script), _SC("dummy"), SQTrue))) {
00103 sq_push(vm, -2);
00104 if (SQ_SUCCEEDED(sq_call(vm, 1, SQFalse, SQTrue))) {
00105 sq_pop(vm, 1);
00106 return;
00107 }
00108 }
00109 NOT_REACHED();
00110 }