Files
@ r27835:eabfaa878ced
Branch filter:
Location: cpp/openttd-patchpack/source/src/script/squirrel_std.cpp - annotation
r27835:eabfaa878ced
3.0 KiB
text/x-c
Add: calendar date for Survey results
This means no heuristics is possible on around which date people
play the game.
This means no heuristics is possible on around which date people
play the game.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12079:5f4e8bdafd48 r12079:5f4e8bdafd48 r21650:2a9ba84d38f0 r10696:8dfe83e30d01 r12994:6cf69c4b22b0 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r21410:ae5961f02724 r10696:8dfe83e30d01 r21383:942c32fb8b0e r21383:942c32fb8b0e r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r24597:afde5721a3b6 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r24597:afde5721a3b6 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r23607:36c15679007d r25655:1030dcb7eb52 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r21644:03f391299718 r10696:8dfe83e30d01 r27361:5aa53f16c6f7 r27361:5aa53f16c6f7 r27361:5aa53f16c6f7 r27361:5aa53f16c6f7 r27361:5aa53f16c6f7 r10696:8dfe83e30d01 r27361:5aa53f16c6f7 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r18439:b8326242206a r21644:03f391299718 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r11313:d549c5db5398 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r11183:50e33a2511bf r11183:50e33a2511bf r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r11183:50e33a2511bf r11183:50e33a2511bf r12994:6cf69c4b22b0 r12994:6cf69c4b22b0 r10696:8dfe83e30d01 | /*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file squirrel_std.cpp Implements the Squirrel Standard Function class */
#include "../stdafx.h"
#include <squirrel.h>
#include <sqstdmath.h>
#include "../debug.h"
#include "squirrel_std.hpp"
#include "../core/math_func.hpp"
#include "../string_func.h"
#include "../safeguards.h"
SQInteger SquirrelStd::min(HSQUIRRELVM vm)
{
SQInteger tmp1, tmp2;
sq_getinteger(vm, 2, &tmp1);
sq_getinteger(vm, 3, &tmp2);
sq_pushinteger(vm, std::min(tmp1, tmp2));
return 1;
}
SQInteger SquirrelStd::max(HSQUIRRELVM vm)
{
SQInteger tmp1, tmp2;
sq_getinteger(vm, 2, &tmp1);
sq_getinteger(vm, 3, &tmp2);
sq_pushinteger(vm, std::max(tmp1, tmp2));
return 1;
}
SQInteger SquirrelStd::require(HSQUIRRELVM vm)
{
SQInteger top = sq_gettop(vm);
const SQChar *filename;
sq_getstring(vm, 2, &filename);
/* Get the script-name of the current file, so we can work relative from it */
SQStackInfos si;
sq_stackinfos(vm, 1, &si);
if (si.source == nullptr) {
Debug(misc, 0, "[squirrel] Couldn't detect the script-name of the 'require'-caller; this should never happen!");
return SQ_ERROR;
}
/* Keep the dir, remove the rest */
std::string path = si.source;
auto p = path.find_last_of(PATHSEPCHAR);
/* Keep the PATHSEPCHAR there, remove the rest */
if (p != std::string::npos) path.erase(p + 1);
path += filename;
#if (PATHSEPCHAR != '/')
std::transform(path.begin(), path.end(), path.begin(), [](char &c) { return c == '/' ? PATHSEPCHAR : c; });
#endif
Squirrel *engine = (Squirrel *)sq_getforeignptr(vm);
bool ret = engine->LoadScript(vm, path);
/* Reset the top, so the stack stays correct */
sq_settop(vm, top);
return ret ? 0 : SQ_ERROR;
}
SQInteger SquirrelStd::notifyallexceptions(HSQUIRRELVM vm)
{
SQBool b;
if (sq_gettop(vm) >= 1) {
if (SQ_SUCCEEDED(sq_getbool(vm, -1, &b))) {
sq_notifyallexceptions(vm, b);
return 0;
}
}
return SQ_ERROR;
}
void squirrel_register_global_std(Squirrel *engine)
{
/* We don't use squirrel_helper here, as we want to register to the global
* scope and not to a class. */
engine->AddMethod("require", &SquirrelStd::require, 2, ".s");
engine->AddMethod("notifyallexceptions", &SquirrelStd::notifyallexceptions, 2, ".b");
}
void squirrel_register_std(Squirrel *engine)
{
/* We don't use squirrel_helper here, as we want to register to the global
* scope and not to a class. */
engine->AddMethod("min", &SquirrelStd::min, 3, ".ii");
engine->AddMethod("max", &SquirrelStd::max, 3, ".ii");
sqstd_register_mathlib(engine->GetVM());
}
|