#pragma once // script-call-internal.hpp - EAthena script frontend, engine, and library. // // Copyright © ????-2004 Athena Dev Teams // Copyright © 2004-2011 The Mana World Development Team // Copyright © 2011-2014 Ben Longbons // // This file is part of The Mana World (Athena server) // // This program 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, either version 3 of the License, or // (at your option) any later version. // // This program 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 this program. If not, see . #include "script-call.hpp" #include "fwd.hpp" #include "../mmo/ids.hpp" #include "../strings/rstring.hpp" #include "../generic/db.hpp" #include "script-persist.hpp" #include namespace tmwa { namespace map { enum class VariableCode : uint8_t { PARAM, VARIABLE, }; struct script_stack { std::vector stack_datav; }; enum class ScriptEndState; // future improvements coming! class ScriptState { public: struct script_stack *stack; int start, end; ScriptEndState state; BlockId rid, oid; ScriptPointer scriptp, new_scriptp; int defsp, new_defsp, freeloop; int is_true = 0; // register keys are ints (interned) // Not anymore! Well, sort of. DMap regm; // can't be DMap because we want predictable .c_str()s // TODO this can change now Map regstrm; }; void run_func(ScriptState *st); enum class ScriptEndState { ZERO, STOP, END, RERUNLINE, GOTO, RETFUNC, }; dumb_ptr script_rid2sd(ScriptState *st); void get_val(dumb_ptr sd, struct script_data *data); __attribute__((deprecated)) void get_val(ScriptState *st, struct script_data *data); struct script_data get_val2(ScriptState *st, SIR reg); void set_scope_reg(ScriptState *, SIR, struct script_data *); void set_reg(dumb_ptr sd, VariableCode type, SIR reg, struct script_data vd); void set_reg(dumb_ptr sd, VariableCode type, SIR reg, int id); void set_reg(dumb_ptr sd, VariableCode type, SIR reg, RString zd); __attribute__((warn_unused_result)) RString conv_str(ScriptState *st, struct script_data *data); __attribute__((warn_unused_result)) int conv_num(ScriptState *st, struct script_data *data); __attribute__((warn_unused_result)) Borrowed conv_script(ScriptState *st, struct script_data *data); template void push_int(struct script_stack *stack, int val); template void push_reg(struct script_stack *stack, SIR reg); template void push_script(struct script_stack *stack, Borrowed code); template void push_str(struct script_stack *stack, RString str); void push_copy(struct script_stack *stack, int pos_); void pop_stack(struct script_stack *stack, int start, int end); } // namespace map } // namespace tmwa #include "script-call-internal.tcc"