114 #include <common/string.h> 118 #if defined(_WINDOWS) 119 # include <Windows.h> 127 #define S4G_VERSION "0.9.2" 131 #define S4G_COPYRIGHT "Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017" 134 #define S4G_SITE "https://s4g.su" 143 #if defined(S4G_BUILD_LIB) 145 #define S4G_API extern "C" __declspec (dllimport) 146 #elif defined(S4G_LIB) 147 #define S4G_API extern "C" __declspec (dllexport) 150 #define S4G_API extern 187 #define S4G_MAX_LEN_TYPE_NAME 64 188 #define S4G_MAX_LEN_VAR_NAME 64 189 #define S4G_MAX_LEN_STR_IN_FILE 1024 191 #define S4G_MAX_CALL 1000 192 #define S4G_START_COUNT_CONTEXTS 100 193 #define S4G_VM_MAX_SIZE_STACK_EXE 1000 195 #define S4G_GLOBAL_NM "_g" 196 #define S4G_MARG "args" 204 #define S4G_RESERVE_VALUE 1000 206 #define S4G_RESERVE_VALUE_MEM 1000 211 #define S4G_RESERVE_DATA 1000 212 #define S4G_RESERVE_DATA_MEM 1000 216 #define S4G_RESERVE_BLOCKS 10 217 #define S4G_RESERVE_BLOCKS_MEM 100 219 #define S4G_RESERVE_CONTEXTS 100 221 #define S4G_ADD_MEM_CONTEXTS 8 223 #define S4G_RESERVE_CONTEXTS_MEM 100 227 #define S4G_RESERVE_STRING_MEM 100 230 #define S4G_RESERVE_SFUNC_MEM 100 233 #define S4G_RESERVE_TABLE_MEM 100 234 #define S4G_RESERVE_TABLE_ELEM 8 238 #define S4G_RESERVE_CLASS_MEM 10 241 #define S4G_RESERVE_CLASS_OBJECT_MEM 100 249 #define S4G_MSG_LEVEL_NOTICE 0 253 #define S4G_MSG_LEVEL_WARNING 1 256 #define S4G_MSG_LEVEL_ERROR 2 260 #if defined(_WINDOWS) 261 #define DBG_BREAK _asm { int 3 } 263 #define DBG_BREAK asm("int $3"); 302 #if defined(_WINDOWS) 304 freopen(
"CONOUT$",
"wt", stdout);
308 va_start(va, format);
309 vsprintf_s(buf,
sizeof(buf), format, va);
314 fprintf(stdout,
"s4g null object s4g_Main! Message: %s", buf);
359 #define S4G_NM_GLOBAL INT_MIN 364 #define S4G_NM_SYS INT_MIN+1 S4G_API void s4g_PP_AddIncludePath(s4g_Main *s4gm, const char *szPath)
добавляет путь поиска включаемых файлов
Definition: s4g.cpp:1143
S4G_API int s4g_GCgetMemBusy(s4g_Main *s4gm)
количество занятой памяти в байтах
S4G_API s4g_pdata s4g_CfuncGet_ArgPdata(s4g_Main *s4gm, int nArg)
преобразование аргумента функции к типу юзердата
Definition: s4g.cpp:859
#define S4G_MAX_LEN_TYPE_NAME
максимальная длина имени типа
Definition: s4g.h:187
S4G_API s4g_bool s4g_StackGet_Bool(s4g_Main *s4gm, int iIndex)
возвращает приведенное к bool типу значение перменной по номеру iIndex в стеке
Definition: s4g.cpp:674
S4G_API s4g_int s4g_StackGet_Int(s4g_Main *s4gm, int iIndex)
возвращает приведенное к int типу значение перменной по номеру iIndex в стеке
Definition: s4g.cpp:630
S4G_API int s4g_Dbg_GetCurrStr(s4g_Main *s4gm, char *szStr=0)
возвращает номер строки файла скрипта который выполняется в данный момент (если str то записывает в н...
Definition: s4g.cpp:1108
S4G_TYPE
все типы данных которые могут быть использованы в скриптах
Definition: s4g.h:160
S4G_API void s4g_SetRf(s4g_report_func fnRf)
установить новую функцию выдачи сообщений
Definition: s4g.cpp:20
S4G_API void s4g_StackPush_Pdata(s4g_Main *s4gm, s4g_pdata pData)
вставка на вершину стека юзердаты
Definition: s4g.cpp:303
S4G_API void s4g_StackPush_Int(s4g_Main *s4gm, s4g_int num)
вставка на вершину стека int.
Definition: s4g.cpp:263
S4G_API void s4g_StackPush_Cfunc(s4g_Main *s4gm, s4g_c_function fnFunc)
вставка на вершину стека C++ функции
Definition: s4g.cpp:255
S4G_API s4g_bool s4g_CfuncGet_ArgBool(s4g_Main *s4gm, int nArg)
преобразование аргумента функции к типу bool.
Definition: s4g.cpp:819
S4G_API S4G_TYPE s4g_VarGet_Type(s4g_Variable *pVar)
возвращает тип переменной
Definition: s4g.cpp:1020
S4G_API void s4g_StackPush_Class(s4g_Main *s4gm)
создание и вставка на вершину стека класса
Definition: s4g.cpp:344
тип отсутствует ...
Definition: s4g.h:162
S4G_API UINT s4g_MainGetTime(s4g_Main *s4gm)
возвращает время инициализации скриптовой системы (в млсек)
Definition: s4g.cpp:46
S4G_API const char * s4g_CfuncGet_TypeStr(s4g_Main *s4gm, int nArg, char *szStr=0)
возвращает строковое предствление типа аргумента
Definition: s4g.cpp:1002
таблица (ассоциативный массив)
Definition: s4g.h:164
S4G_API void s4g_StackPush_Null(s4g_Main *s4gm)
вставка на вершину стека null.
Definition: s4g.cpp:311
с(++) функция
Definition: s4g.h:172
long s4g_int
int
Definition: s4g.h:270
S4G_API int s4g_Cfunc_CountArg(s4g_Main *s4gm)
количество аргументов которые были переданы функции
Definition: s4g.cpp:754
S4G_API const char * s4g_MainGetErrorStr(s4g_Main *s4gm)
возвращает текст с ошибкой
Definition: s4g.cpp:39
S4G_API void s4g_StackPush_Str(s4g_Main *s4gm, const char *szStr)
вставка на вершину стека строки
Definition: s4g.cpp:287
S4G_API int s4g_MainGetState(s4g_Main *s4gm)
возвращает состояние скриптовой системы, S4G_ERROR - ошибка, S4G_OK - все нормально ...
Definition: s4g.cpp:32
S4G_API int s4g_CfuncIs_ArgPdata(s4g_Main *s4gm, int nArg)
является ли значение аргумента функции типом юзердата
Definition: s4g.cpp:971
S4G_API S4G_TYPE s4g_StackGet_Type(s4g_Main *s4gm, int iIndex)
возвращает тип значения переменной по номеру в стеке iIndex.
Definition: s4g.cpp:599
const char g_aS4GtypeStr[][S4G_MAX_LEN_TYPE_NAME]
строковое представление типов
Definition: s4g.h:337
void * s4g_pdata
указатель
Definition: s4g.h:282
S4G_API int s4g_StackIs_Bool(s4g_Main *s4gm, int iIndex)
является ли значение переменной в стеке по номеру iIndex типом bool.
Definition: s4g.cpp:541
скриптовая функция
Definition: s4g.h:173
S4G_API int s4g_StackIs_Class(s4g_Main *s4gm, int iIndex)
является ли значение переменной в стеке по номеру iIndex классом
Definition: s4g.cpp:583
пустое значение
Definition: s4g.h:163
таблица, наиболее распространенный тип в скриптах
Definition: s4g_types.h:123
S4G_API void s4g_GenMsg(s4g_Main *s4gm, int iLevel, const char *szFormat,...)
генерировать сообщение
Definition: s4g_main.cpp:82
S4G_API S4G_TYPE s4g_CfuncGet_Type(s4g_Main *s4gm, int nArg)
возвращает тип аргумента
Definition: s4g.cpp:993
S4G_API void s4g_MainClear(s4g_Main *s4gm)
очистка скриптовой системы (для перезагрзуки кода)
Definition: s4g.cpp:60
S4G_API int s4g_StackIs_ClassObject(s4g_Main *s4gm, int iIndex)
является ли значение переменной в стеке по номеру iIndex объектом класса
Definition: s4g.cpp:590
S4G_API int s4g_StackIs_Table(s4g_Main *s4gm, int iIndex)
является ли значение переменной в стеке по номеру iIndex типом таблицей
Definition: s4g.cpp:562
S4G_API void s4g_StackPush_Float(s4g_Main *s4gm, s4g_float num)
вставка на вершину стека float.
Definition: s4g.cpp:279
S4G_API void s4g_StackPush_TableEmpty(s4g_Main *s4gm, int iCountReserve)
вставка на вершину стека пустой таблицы, iCountReserve - резерв на количество элементов в таблице ...
Definition: s4g.cpp:244
S4G_API int s4g_StackIs_Sfunc(s4g_Main *s4gm, int iIndex)
является ли значение переменной в стеке по номеру iIndex типом скриптовой функцией ...
Definition: s4g.cpp:555
указатель на пользовательские данные
Definition: s4g.h:171
S4G_API void s4g_StackPush_ClassObject(s4g_Main *s4gm, s4g_pdata pData=0)
создание и вставка на вершину стека объекта класса, класс должен быть на вершине стека, после этого вызова класс будет вытолкнут из стека
Definition: s4g.cpp:327
S4G_API s4g_float s4g_StackGet_Float(s4g_Main *s4gm, int iIndex)
возвращает приведенное к float типу значение перменной по номеру iIndex в стеке
Definition: s4g.cpp:660
S4G_API int s4g_GCgetMemAllocated(s4g_Main *s4gm)
количество выделенной памяти в байтах
число с плавающей запятой
Definition: s4g.h:167
S4G_API const char * s4g_MainGetName(s4g_Main *s4gm)
возвращает имя скриптовой системы
Definition: s4g.cpp:68
S4G_API int s4g_CfuncIs_ArgTable(s4g_Main *s4gm, int nArg)
является ли значение аргумента функции типом table.
Definition: s4g.cpp:931
S4G_API s4g_Variable * s4g_TableGat_Var(s4g_Table *pTable, int iKey)
возвращает s4g_Variable* которая располагается в таблице по ключу key, если есть, иначе 0...
Definition: s4g.cpp:1071
S4G_API void s4g_StackPop(s4g_Main *s4gm, int iCount)
выталкивает из стека iCount значений
Definition: s4g.cpp:737
S4G_API int s4g_ArrayGet_Size(s4g_Array *pArray)
возвращает размер массива
Definition: s4g.cpp:1044
S4G_API s4g_Variable * s4g_GCgetTrue(s4g_Main *s4gm)
возвращает константную переменную bool типа true значения (она уже создана и менять ее не надо) ...
Definition: s4g.cpp:173
S4G_API void s4g_StackGet2Top(s4g_Main *s4gm, int iIndex, const char *szName)
получить значения
Definition: s4g.cpp:452
S4G_API int s4g_StackIs_Pdata(s4g_Main *s4gm, int iIndex)
является ли значение переменной в стеке по номеру iIndex типом юзердатой
Definition: s4g.cpp:569
класс
Definition: s4g.h:174
S4G_API int s4g_CfuncIs_ArgFloat(s4g_Main *s4gm, int nArg)
является ли значение аргумента функции типом float.
Definition: s4g.cpp:901
S4G_API void s4g_MainKill(s4g_Main *s4gm)
завершение работы скриптовой системы
Definition: s4g.cpp:53
S4G_API s4g_Main * s4g_MainInit(const char *szName)
инициализация скриптовой системы
Definition: s4g.cpp:27
знаковое целое десятичное число
Definition: s4g.h:169
S4G_API int s4g_StackIs_Float(s4g_Main *s4gm, int iIndex)
является ли значение переменной в стеке по номеру iIndex типом float.
Definition: s4g.cpp:527
S4G_API int s4g_TableGet_Size(s4g_Table *pTable)
возвращает размер таблицы
Definition: s4g.cpp:1028
S4G_API s4g_uint s4g_CfuncGet_ArgUint(s4g_Main *s4gm, int nArg)
преобразование аргумента функции к типу uint.
Definition: s4g.cpp:799
S4G_API void s4g_TableAdd_Var(s4g_Table *pTable, s4g_Variable *pVar, const char *szName)
добавить переменную в таблицу
Definition: s4g.cpp:1036
логическое значение
Definition: s4g.h:170
S4G_API const char * s4g_Dbg_GetCurrFile(s4g_Main *s4gm, char *szStr=0)
возвращает путь до файла скрипта который выполняется в данный момент (если str то записывает в него) ...
Definition: s4g.cpp:1102
S4G_API const char * s4g_StackGet_Str(s4g_Main *s4gm, int iIndex)
возвращает приведенное к string типу значение перменной по номеру iIndex в стеке
Definition: s4g.cpp:689
S4G_API int s4g_CfuncIs_ArgBool(s4g_Main *s4gm, int nArg)
является ли значение аргумента функции типом bool.
Definition: s4g.cpp:911
S4G_API void s4g_PP_Define(s4g_Main *s4gm, const char *szDefine)
обьявляет новый дефайн
Definition: s4g.cpp:1129
S4G_API void s4g_StackPush_ClassVar(s4g_Main *s4gm, const char *szName)
создание переменной в классе (на вершине стека) szName.
Definition: s4g.cpp:353
S4G_API const char * s4g_VarGet_Name(s4g_Main *s4gm, s4g_Variable *pVar)
возвращает имя переменной
Definition: s4g.cpp:1013
int(* s4g_c_function)(s4g_Main *s4gm)
тип си(++) функции
Definition: s4g.h:289
S4G_API s4g_Variable * s4g_GCgetFalse(s4g_Main *s4gm)
возвращает константную переменную bool типа false значения (она уже создана и менять ее не надо) ...
Definition: s4g.cpp:181
S4G_API int s4g_CfuncIs_ArgSfunc(s4g_Main *s4gm, int nArg)
является ли значение аргумента функции типом скриптовой функции
Definition: s4g.cpp:961
S4G_API s4g_pdata s4g_ClassObjectGet_Data(s4g_Variable *pVar)
возвращает юзердату объекта класса
Definition: s4g.cpp:1063
S4G_API int s4g_StackIs_Str(s4g_Main *s4gm, int iIndex)
является ли значение переменной в стеке по номеру iIndex строкой
Definition: s4g.cpp:534
S4G_API bool s4g_ClassObjectSet_Data(s4g_Variable *pVar, s4g_pdata pData)
установка юзердаты для объекта класса, возвращает true если удачно прошло
Definition: s4g.cpp:1052
S4G_API s4g_Variable * s4g_GCgetNull(s4g_Main *s4gm)
возвращает константную переменную null (она уже создана и менять ее не надо)
Definition: s4g.cpp:158
S4G_API void s4g_Call(s4g_Main *s4gm, bool isCallFunc=false)
вызов функции/исполнения скрипта
Definition: s4g.cpp:199
short int s4g_bool
bool
Definition: s4g.h:279
S4G_API int s4g_CfuncIs_ArgUint(s4g_Main *s4gm, int nArg)
является ли значение аргумента функции типом uint.
Definition: s4g.cpp:891
S4G_API int s4g_CfuncIs_ArgArray(s4g_Main *s4gm, int nArg)
является ли значение аргумента функции типом array.
Definition: s4g.cpp:941
S4G_API s4g_float s4g_CfuncGet_ArgFloat(s4g_Main *s4gm, int nArg)
преобразование аргумента функции к типу float.
Definition: s4g.cpp:809
S4G_API void s4g_PP_Undef(s4g_Main *s4gm, const char *szDefine)
удаляет указанный дефайн
Definition: s4g.cpp:1136
S4G_API s4g_Variable * s4g_CfuncGet_Arg(s4g_Main *s4gm, int nArg)
возвращает s4g_Variable значения аргумента
Definition: s4g.cpp:761
S4G_API int s4g_StackGetTop(s4g_Main *s4gm)
количество элементов в стеке, и есесно номер вершины стека
Definition: s4g.cpp:745
S4G_API s4g_int s4g_CfuncGet_ArgInt(s4g_Main *s4gm, int nArg)
преобразование аргумента функции к типу int.
Definition: s4g.cpp:789
строковое значение (пользовательская строка)
Definition: s4g.h:166
#define S4G_API
для использования в приложении либо при компилции в библиотеку необходимо глобально объявить дефайн S...
Definition: s4g.h:150
S4G_API void s4g_GCcall(s4g_Main *s4gm)
вызов сборки мусора
Definition: s4g.cpp:139
S4G_API const char * s4g_CfuncGet_ArgStr(s4g_Main *s4gm, int nArg)
преобразование аргумента функции к типу string.
Definition: s4g.cpp:829
S4G_API void s4g_StackPush_Bool(s4g_Main *s4gm, s4g_bool bf)
вставка на вершину стека bool.
Definition: s4g.cpp:295
S4G_API s4g_Variable * s4g_StackGet_Var(s4g_Main *s4gm, int iIndex)
возвращает приведенное к int типу значение перменной по номеру iIndex в стеке
Definition: s4g.cpp:615
S4G_API s4g_pdata s4g_StackGet_Pdata(s4g_Main *s4gm, int iIndex)
возвращает приведенное к юзердата типу значение перменной по номеру iIndex в стеке ...
Definition: s4g.cpp:720
S4G_API s4g_c_function s4g_CfuncGet_ArgCfunc(s4g_Main *s4gm, int nArg)
преобразование аргумента функции к типу int.
Definition: s4g.cpp:849
S4G_API int s4g_CfuncIs_ArgInt(s4g_Main *s4gm, int nArg)
является ли значение аргумента функции типом int.
Definition: s4g.cpp:881
основа взаимодествия
Definition: s4g_main.h:45
массив переменной длины
Definition: s4g_types.h:221
S4G_API int s4g_StackIs_Uint(s4g_Main *s4gm, int iIndex)
является ли значение переменной в стеке по номеру iIndex типом uint.
Definition: s4g.cpp:520
S4G_API const char * s4g_GetStrType(S4G_TYPE type, char *szStrType=0)
возвращает строковое представление типа type в szStrType.
Definition: s4g_main.cpp:69
знаковое целое десятичное число
Definition: s4g.h:168
переменная
Definition: s4g_types.h:101
S4G_API void s4g_StackPush_ClassMethod(s4g_Main *s4gm, const char *szName, s4g_c_function fnMethod)
добавление метода к классу (на вершине стека) с именем szName и C/C++ функции fnMethod.
Definition: s4g.cpp:369
S4G_API bool s4g_PP_Defined(s4g_Main *s4gm, const char *szDefine)
объявлен ли дефайн
Definition: s4g.cpp:1122
S4G_API int s4g_LoadCode(s4g_Main *s4gm, const char *szCode, bool isFile=true)
загрузить код, если isFile == true значит szCode содержит путь, иначе szCode содержит код...
Definition: s4g.cpp:77
объект класса
Definition: s4g.h:175
S4G_API s4g_c_function s4g_StackGet_Cfunc(s4g_Main *s4gm, int iIndex)
возвращает приведенное к C++ function типу значение перменной по номеру iIndex в стеке ...
Definition: s4g.cpp:704
unsigned long s4g_uint
uint
Definition: s4g.h:273
S4G_API int s4g_StackIs_Int(s4g_Main *s4gm, int iIndex)
является ли значение переменной в стеке по номеру iIndex типом int.
Definition: s4g.cpp:513
S4G_API const char * s4g_Dbg_GetCurrFunc(s4g_Main *s4gm, char *szStr=0)
возвращает функцию которая выполняется в данный момент (если str то записывает в него) ...
Definition: s4g.cpp:1114
S4G_API void s4g_StackPush_Var(s4g_Main *s4gm, s4g_Variable *pVar)
вставка на вершину стека s4g_Variable.
Definition: s4g.cpp:319
S4G_API s4g_uint s4g_StackGet_Uint(s4g_Main *s4gm, int iIndex)
возвращает приведенное к uint типу значение перменной по номеру iIndex в стеке
Definition: s4g.cpp:645
S4G_API int s4g_CfuncIs_ArgNull(s4g_Main *s4gm, int nArg)
является ли значение аргумента функции типом null.
Definition: s4g.cpp:871
S4G_API const char * s4g_StackTrace(s4g_Main *s4gm)
возвращает строку с текстом результата трассировки стека вызовов
Definition: s4g.cpp:1081
одномерный массив переменной длины
Definition: s4g.h:165
void(* s4g_report_func)(s4g_Main *s4gm, int level, const char *format,...)
тип функции вывода информации и обработки ошибок
Definition: s4g.h:292
S4G_API void s4g_StackPush_Uint(s4g_Main *s4gm, s4g_uint num)
вставка на вершину стека uint.
Definition: s4g.cpp:271
S4G_API int s4g_CfuncIs_ArgStr(s4g_Main *s4gm, int nArg)
является ли значение аргумента функции типом string.
Definition: s4g.cpp:921
S4G_API void s4g_Precall(s4g_Main *s4gm)
сообщение скриптовой системе о том что будет вызывана функция
Definition: s4g.cpp:191
float s4g_float
float
Definition: s4g.h:276
S4G_API int s4g_CfuncIs_ArgClassObject(s4g_Main *s4gm, int nArg)
является ли значение аргумента функции типом объект класса
Definition: s4g.cpp:981
S4G_API int s4g_StackIs_Cfunc(s4g_Main *s4gm, int iIndex)
является ли значение переменной в стеке по номеру iIndex типом C++ функцией
Definition: s4g.cpp:548
S4G_API String * s4g_CfuncGet_ArgStr2(s4g_Main *s4gm, int nArg)
преобразование аргумента функции к типу string.
Definition: s4g.cpp:839
S4G_API int s4g_CfuncIs_ArgCfunc(s4g_Main *s4gm, int nArg)
является ли значение аргумента функции типом C++ function.
Definition: s4g.cpp:951
void s4g_Report(s4g_Main *s4gm, int level, const char *format,...)
стандартная функция выдачи сообщений (заменяема посредством api)
Definition: s4g.h:300
S4G_API int s4g_StackIs_Null(s4g_Main *s4gm, int iIndex)
является ли значение переменной в стеке по номеру iIndex типом null.
Definition: s4g.cpp:576
S4G_API s4g_Variable * s4g_GCgetBool(s4g_Main *s4gm, bool bf)
возвращает константную переменную bool типа (она уже создана и менять ее не надо) ...
Definition: s4g.cpp:165
S4G_API const char * s4g_Dbg_GetFile(s4g_Main *s4gm, ID id, char *szStr=0)
возвращает путь до файла загруженного скрипта по его id (если str то записывает в него) ...
Definition: s4g.cpp:1087
S4G_API void s4g_StackStore(s4g_Main *s4gm, int iIndex, const char *szName)
функция сохранения в пространство имен, аналогично table(stack[index])[name] = stack[-1];.
Definition: s4g.cpp:388