s4g  0.9.2
высокоуровневый, императивный, процедурный, встраиваемый, скриптовый язык программирования общего назначения, написанный на C++.
Файл s4g.h

Заголовочный файл со всеми необхожимыми данными для использования языка, посредством api функций Подробнее...

#include <common/string.h>
#include <limits.h>
#include <cstdio>

См. исходные тексты.

Макросы

#define S4G_VERSION   "0.9.2"
 версия
 
#define S4G_COPYRIGHT   "Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017"
 копирайт
 
#define S4G_SITE   "https://s4g.su"
 сайт
 
#define _VOID
 for warning C4003: not enough actual parameters for macro
 
#define S4G_API   extern
 для использования в приложении либо при компилции в библиотеку необходимо глобально объявить дефайн S4G. Подробнее...
 
#define S4G_ERROR   -1
 код ошибки
 
#define S4G_OK   0
 код успешного выполнения
 
#define S4G_MAX_LEN_TYPE_NAME   64
 максимальная длина имени типа
 
#define S4G_MAX_LEN_VAR_NAME   64
 максимальная длина имени переменной
 
#define S4G_MAX_LEN_STR_IN_FILE   1024
 максимальная длина загружаемого файла
 
#define S4G_MAX_CALL   1000
 максимальное количество вызовов (рекурсивных и вложенных)
 
#define S4G_START_COUNT_CONTEXTS   100
 стартовое количество контекстов
 
#define S4G_VM_MAX_SIZE_STACK_EXE   1000
 максимальный размер стека исполнения виртуальной машины, при превышении будет выдана ошибка
 
#define S4G_GLOBAL_NM   "_g"
 обращение в скрипте к глобальному пространству имен
 
#define S4G_MARG   "args"
 таблица для обращения к аргументам в случае если функция принимает неопределенное количество аргументов
 
#define S4G_NM_GLOBAL   INT_MIN
 глобальное пространство имен Подробнее...
 
#define S4G_NM_SYS   INT_MIN+1
 языковое/системное простраство имен Подробнее...
 
Резервация памяти
Заметки
Резер элементов - непосредственный резерв для стека хранящего определенные элементы
Резерв памяти элементов - резерв выделяемой памяти для создания новых элементов
(для всех резервов): на это же количество будет увеличиваться дополнительный резерв в случе превышения предыдущего резерва
#define S4G_RESERVE_VALUE   1000
 резерв элементов для переменных
 
#define S4G_RESERVE_VALUE_MEM   1000
 резерв памяти элементов для переменных
 
#define S4G_RESERVE_DATA   1000
 резерв элементов для данных
 
#define S4G_RESERVE_DATA_MEM   1000
 резерв памяти элементов для данных
 
#define S4G_RESERVE_BLOCKS   10
 резерв элементов блоков
 
#define S4G_RESERVE_BLOCKS_MEM   100
 резерв элементов блоков
 
#define S4G_RESERVE_CONTEXTS   100
 резерв элементов для контекстов
 
#define S4G_ADD_MEM_CONTEXTS   8
 количество создаваемых контекстов на каждый случай нехватки
 
#define S4G_RESERVE_CONTEXTS_MEM   100
 резерв памяти элементов для контекстов
 
#define S4G_RESERVE_STRING_MEM   100
 резерв памяти элементов для строк
 
#define S4G_RESERVE_SFUNC_MEM   100
 резерв памяти элементов для скриптовых функций
 
#define S4G_RESERVE_TABLE_MEM   100
 резерв памяти элементов для таблиц и массивов
 
#define S4G_RESERVE_TABLE_ELEM   8
 на сколько элементов будет резервироваться место в таблицах
 
#define S4G_RESERVE_CLASS_MEM   10
 резерв памяти элементов для классов
 
#define S4G_RESERVE_CLASS_OBJECT_MEM   100
 резерв памяти элементов для объектов класса
 
Уровни сообщений
#define S4G_MSG_LEVEL_NOTICE   0
 уведомление
 
#define S4G_MSG_LEVEL_WARNING   1
 предупреждение
 
#define S4G_MSG_LEVEL_ERROR   2
 ошибка
 

Определения типов

typedef int(* s4g_c_function) (s4g_Main *s4gm)
 тип си(++) функции Подробнее...
 
typedef void(* s4g_report_func) (s4g_Main *s4gm, int level, const char *format,...)
 тип функции вывода информации и обработки ошибок
 
Настраиваемые типы
typedef long s4g_int
 int
 
typedef unsigned long s4g_uint
 uint
 
typedef float s4g_float
 float
 
typedef short int s4g_bool
 bool
 
typedef void * s4g_pdata
 указатель
 

Перечисления

enum  S4G_TYPE {
  S4G_TYPE_NONE = -1, S4G_TYPE_NULL = 0, S4G_TYPE_TABLE = 1, S4G_TYPE_ARRAY = 2,
  S4G_TYPE_STRING = 3, S4G_TYPE_FLOAT = 4, S4G_TYPE_INT = 5, S4G_TYPE_UINT = 6,
  S4G_TYPE_BOOL = 7, S4G_TYPE_PDATA = 8, S4G_TYPE_CFUNC = 9, S4G_TYPE_SFUNC = 10,
  S4G_TYPE_CLASS = 11, S4G_TYPE_CLASS_OBJECT = 12
}
 все типы данных которые могут быть использованы в скриптах Подробнее...
 

Функции

S4G_API const char * s4g_MainGetName (s4g_Main *s4gm)
 возвращает имя скриптовой системы
 
S4G_API const char * s4g_StackTrace (s4g_Main *s4gm)
 возвращает строку с текстом результата трассировки стека вызовов
 
void s4g_Report (s4g_Main *s4gm, int level, const char *format,...)
 стандартная функция выдачи сообщений (заменяема посредством api)
 
S4G_API const char * s4g_GetStrType (S4G_TYPE type, char *szStrType=0)
 возвращает строковое представление типа type в szStrType.
 
S4G_API void s4g_SetRf (s4g_report_func fnRf)
 установить новую функцию выдачи сообщений
 
S4G_API void s4g_GenMsg (s4g_Main *s4gm, int iLevel, const char *szFormat,...)
 генерировать сообщение
 
Main
S4G_API s4g_Mains4g_MainInit (const char *szName)
 инициализация скриптовой системы
 
S4G_API int s4g_MainGetState (s4g_Main *s4gm)
 возвращает состояние скриптовой системы, S4G_ERROR - ошибка, S4G_OK - все нормально
 
S4G_API const char * s4g_MainGetErrorStr (s4g_Main *s4gm)
 возвращает текст с ошибкой
 
S4G_API void s4g_MainClear (s4g_Main *s4gm)
 очистка скриптовой системы (для перезагрзуки кода)
 
S4G_API void s4g_MainKill (s4g_Main *s4gm)
 завершение работы скриптовой системы
 
S4G_API UINT s4g_MainGetTime (s4g_Main *s4gm)
 возвращает время инициализации скриптовой системы (в млсек)
 
Load
S4G_API int s4g_LoadCode (s4g_Main *s4gm, const char *szCode, bool isFile=true)
 загрузить код, если isFile == true значит szCode содержит путь, иначе szCode содержит код, в случае успеха возвращает S4G_OK иначе S4G_ERROR.
 
GC
S4G_API void s4g_GCcall (s4g_Main *s4gm)
 вызов сборки мусора
 
S4G_API int s4g_GCgetMemBusy (s4g_Main *s4gm)
 количество занятой памяти в байтах
 
S4G_API int s4g_GCgetMemAllocated (s4g_Main *s4gm)
 количество выделенной памяти в байтах
 
S4G_API s4g_Variables4g_GCgetNull (s4g_Main *s4gm)
 возвращает константную переменную null (она уже создана и менять ее не надо)
 
S4G_API s4g_Variables4g_GCgetBool (s4g_Main *s4gm, bool bf)
 возвращает константную переменную bool типа (она уже создана и менять ее не надо)
 
S4G_API s4g_Variables4g_GCgetTrue (s4g_Main *s4gm)
 возвращает константную переменную bool типа true значения (она уже создана и менять ее не надо)
 
S4G_API s4g_Variables4g_GCgetFalse (s4g_Main *s4gm)
 возвращает константную переменную bool типа false значения (она уже создана и менять ее не надо)
 
С(++) => stack
S4G_API void s4g_StackPush_TableEmpty (s4g_Main *s4gm, int iCountReserve)
 вставка на вершину стека пустой таблицы, iCountReserve - резерв на количество элементов в таблице
 
S4G_API void s4g_StackPush_Cfunc (s4g_Main *s4gm, s4g_c_function fnFunc)
 вставка на вершину стека C++ функции
 
S4G_API void s4g_StackPush_Int (s4g_Main *s4gm, s4g_int num)
 вставка на вершину стека int.
 
S4G_API void s4g_StackPush_Uint (s4g_Main *s4gm, s4g_uint num)
 вставка на вершину стека uint.
 
S4G_API void s4g_StackPush_Float (s4g_Main *s4gm, s4g_float num)
 вставка на вершину стека float.
 
S4G_API void s4g_StackPush_Str (s4g_Main *s4gm, const char *szStr)
 вставка на вершину стека строки
 
S4G_API void s4g_StackPush_Bool (s4g_Main *s4gm, s4g_bool bf)
 вставка на вершину стека bool.
 
S4G_API void s4g_StackPush_Pdata (s4g_Main *s4gm, s4g_pdata pData)
 вставка на вершину стека юзердаты
 
S4G_API void s4g_StackPush_Null (s4g_Main *s4gm)
 вставка на вершину стека null.
 
S4G_API void s4g_StackPush_Var (s4g_Main *s4gm, s4g_Variable *pVar)
 вставка на вершину стека s4g_Variable.
 
S4G_API void s4g_StackPush_ClassObject (s4g_Main *s4gm, s4g_pdata pData=0)
 создание и вставка на вершину стека объекта класса, класс должен быть на вершине стека, после этого вызова класс будет вытолкнут из стека
 
S4G_API void s4g_StackPush_Class (s4g_Main *s4gm)
 создание и вставка на вершину стека класса
 
S4G_API void s4g_StackPush_ClassVar (s4g_Main *s4gm, const char *szName)
 создание переменной в классе (на вершине стека) szName.
 
S4G_API void s4g_StackPush_ClassMethod (s4g_Main *s4gm, const char *szName, s4g_c_function fnMethod)
 добавление метода к классу (на вершине стека) с именем szName и C/C++ функции fnMethod.
 
stack => script
S4G_API void s4g_StackStore (s4g_Main *s4gm, int iIndex, const char *szName)
 функция сохранения в пространство имен, аналогично table(stack[index])[name] = stack[-1];. Подробнее...
 
S4G_API void s4g_StackGet2Top (s4g_Main *s4gm, int iIndex, const char *szName)
 получить значения Подробнее...
 
stack => C(++)
S4G_API int s4g_StackIs_Int (s4g_Main *s4gm, int iIndex)
 является ли значение переменной в стеке по номеру iIndex типом int.
 
S4G_API int s4g_StackIs_Uint (s4g_Main *s4gm, int iIndex)
 является ли значение переменной в стеке по номеру iIndex типом uint.
 
S4G_API int s4g_StackIs_Float (s4g_Main *s4gm, int iIndex)
 является ли значение переменной в стеке по номеру iIndex типом float.
 
S4G_API int s4g_StackIs_Str (s4g_Main *s4gm, int iIndex)
 является ли значение переменной в стеке по номеру iIndex строкой
 
S4G_API int s4g_StackIs_Bool (s4g_Main *s4gm, int iIndex)
 является ли значение переменной в стеке по номеру iIndex типом bool.
 
S4G_API int s4g_StackIs_Cfunc (s4g_Main *s4gm, int iIndex)
 является ли значение переменной в стеке по номеру iIndex типом C++ функцией
 
S4G_API int s4g_StackIs_Sfunc (s4g_Main *s4gm, int iIndex)
 является ли значение переменной в стеке по номеру iIndex типом скриптовой функцией
 
S4G_API int s4g_StackIs_Table (s4g_Main *s4gm, int iIndex)
 является ли значение переменной в стеке по номеру iIndex типом таблицей
 
S4G_API int s4g_StackIs_Pdata (s4g_Main *s4gm, int iIndex)
 является ли значение переменной в стеке по номеру iIndex типом юзердатой
 
S4G_API int s4g_StackIs_Null (s4g_Main *s4gm, int iIndex)
 является ли значение переменной в стеке по номеру iIndex типом null.
 
S4G_API int s4g_StackIs_Class (s4g_Main *s4gm, int iIndex)
 является ли значение переменной в стеке по номеру iIndex классом
 
S4G_API int s4g_StackIs_ClassObject (s4g_Main *s4gm, int iIndex)
 является ли значение переменной в стеке по номеру iIndex объектом класса
 
S4G_API S4G_TYPE s4g_StackGet_Type (s4g_Main *s4gm, int iIndex)
 возвращает тип значения переменной по номеру в стеке iIndex.
 
S4G_API s4g_Variables4g_StackGet_Var (s4g_Main *s4gm, int iIndex)
 возвращает приведенное к int типу значение перменной по номеру iIndex в стеке
 
S4G_API s4g_int s4g_StackGet_Int (s4g_Main *s4gm, int iIndex)
 возвращает приведенное к int типу значение перменной по номеру iIndex в стеке
 
S4G_API s4g_uint s4g_StackGet_Uint (s4g_Main *s4gm, int iIndex)
 возвращает приведенное к uint типу значение перменной по номеру iIndex в стеке
 
S4G_API s4g_float s4g_StackGet_Float (s4g_Main *s4gm, int iIndex)
 возвращает приведенное к float типу значение перменной по номеру iIndex в стеке
 
S4G_API s4g_bool s4g_StackGet_Bool (s4g_Main *s4gm, int iIndex)
 возвращает приведенное к bool типу значение перменной по номеру iIndex в стеке
 
S4G_API const char * s4g_StackGet_Str (s4g_Main *s4gm, int iIndex)
 возвращает приведенное к string типу значение перменной по номеру iIndex в стеке
 
S4G_API s4g_c_function s4g_StackGet_Cfunc (s4g_Main *s4gm, int iIndex)
 возвращает приведенное к C++ function типу значение перменной по номеру iIndex в стеке
 
S4G_API s4g_pdata s4g_StackGet_Pdata (s4g_Main *s4gm, int iIndex)
 возвращает приведенное к юзердата типу значение перменной по номеру iIndex в стеке
 
S4G_API void s4g_StackPop (s4g_Main *s4gm, int iCount)
 выталкивает из стека iCount значений
 
S4G_API int s4g_StackGetTop (s4g_Main *s4gm)
 количество элементов в стеке, и есесно номер вершины стека
 
script call
Заметки
Cначала вызывается s4g_Precall, затем в стек ложится сама вызываемая функция, затем аргументы если есть и только потом s4g_Call
S4G_API void s4g_Call (s4g_Main *s4gm, bool isCallFunc=false)
 вызов функции/исполнения скрипта
 
S4G_API void s4g_Precall (s4g_Main *s4gm)
 сообщение скриптовой системе о том что будет вызывана функция Подробнее...
 
script => C(++) function
Заметки
Номер аргумента это его порядковый номер, то есть первый начинается с цифры 1, второй - 2 и так далее
S4G_API int s4g_Cfunc_CountArg (s4g_Main *s4gm)
 количество аргументов которые были переданы функции
 
S4G_API s4g_Variables4g_CfuncGet_Arg (s4g_Main *s4gm, int nArg)
 возвращает s4g_Variable значения аргумента
 
S4G_API s4g_int s4g_CfuncGet_ArgInt (s4g_Main *s4gm, int nArg)
 преобразование аргумента функции к типу int.
 
S4G_API s4g_uint s4g_CfuncGet_ArgUint (s4g_Main *s4gm, int nArg)
 преобразование аргумента функции к типу uint.
 
S4G_API s4g_float s4g_CfuncGet_ArgFloat (s4g_Main *s4gm, int nArg)
 преобразование аргумента функции к типу float.
 
S4G_API s4g_bool s4g_CfuncGet_ArgBool (s4g_Main *s4gm, int nArg)
 преобразование аргумента функции к типу bool.
 
S4G_API const char * s4g_CfuncGet_ArgStr (s4g_Main *s4gm, int nArg)
 преобразование аргумента функции к типу string.
 
S4G_API String * s4g_CfuncGet_ArgStr2 (s4g_Main *s4gm, int nArg)
 преобразование аргумента функции к типу string.
 
S4G_API s4g_c_function s4g_CfuncGet_ArgCfunc (s4g_Main *s4gm, int nArg)
 преобразование аргумента функции к типу int.
 
S4G_API s4g_pdata s4g_CfuncGet_ArgPdata (s4g_Main *s4gm, int nArg)
 преобразование аргумента функции к типу юзердата
 
S4G_API int s4g_CfuncIs_ArgNull (s4g_Main *s4gm, int nArg)
 является ли значение аргумента функции типом null.
 
S4G_API int s4g_CfuncIs_ArgInt (s4g_Main *s4gm, int nArg)
 является ли значение аргумента функции типом int.
 
S4G_API int s4g_CfuncIs_ArgUint (s4g_Main *s4gm, int nArg)
 является ли значение аргумента функции типом uint.
 
S4G_API int s4g_CfuncIs_ArgFloat (s4g_Main *s4gm, int nArg)
 является ли значение аргумента функции типом float.
 
S4G_API int s4g_CfuncIs_ArgBool (s4g_Main *s4gm, int nArg)
 является ли значение аргумента функции типом bool.
 
S4G_API int s4g_CfuncIs_ArgStr (s4g_Main *s4gm, int nArg)
 является ли значение аргумента функции типом string.
 
S4G_API int s4g_CfuncIs_ArgTable (s4g_Main *s4gm, int nArg)
 является ли значение аргумента функции типом table.
 
S4G_API int s4g_CfuncIs_ArgArray (s4g_Main *s4gm, int nArg)
 является ли значение аргумента функции типом array.
 
S4G_API int s4g_CfuncIs_ArgCfunc (s4g_Main *s4gm, int nArg)
 является ли значение аргумента функции типом C++ function.
 
S4G_API int s4g_CfuncIs_ArgSfunc (s4g_Main *s4gm, int nArg)
 является ли значение аргумента функции типом скриптовой функции
 
S4G_API int s4g_CfuncIs_ArgPdata (s4g_Main *s4gm, int nArg)
 является ли значение аргумента функции типом юзердата
 
S4G_API int s4g_CfuncIs_ArgClassObject (s4g_Main *s4gm, int nArg)
 является ли значение аргумента функции типом объект класса
 
S4G_API S4G_TYPE s4g_CfuncGet_Type (s4g_Main *s4gm, int nArg)
 возвращает тип аргумента
 
S4G_API const char * s4g_CfuncGet_TypeStr (s4g_Main *s4gm, int nArg, char *szStr=0)
 возвращает строковое предствление типа аргумента
 
Variable
S4G_API const char * s4g_VarGet_Name (s4g_Main *s4gm, s4g_Variable *pVar)
 возвращает имя переменной
 
S4G_API S4G_TYPE s4g_VarGet_Type (s4g_Variable *pVar)
 возвращает тип переменной
 
S4G_API int s4g_TableGet_Size (s4g_Table *pTable)
 возвращает размер таблицы
 
S4G_API void s4g_TableAdd_Var (s4g_Table *pTable, s4g_Variable *pVar, const char *szName)
 добавить переменную в таблицу
 
S4G_API int s4g_ArrayGet_Size (s4g_Array *pArray)
 возвращает размер массива
 
S4G_API bool s4g_ClassObjectSet_Data (s4g_Variable *pVar, s4g_pdata pData)
 установка юзердаты для объекта класса, возвращает true если удачно прошло
 
S4G_API s4g_pdata s4g_ClassObjectGet_Data (s4g_Variable *pVar)
 возвращает юзердату объекта класса
 
S4G_API s4g_Variables4g_TableGat_Var (s4g_Table *pTable, int iKey)
 возвращает s4g_Variable* которая располагается в таблице по ключу key, если есть, иначе 0.
 
DEBUG
S4G_API const char * s4g_Dbg_GetFile (s4g_Main *s4gm, ID id, char *szStr=0)
 возвращает путь до файла загруженного скрипта по его id (если str то записывает в него)
 
S4G_API const char * s4g_Dbg_GetCurrFile (s4g_Main *s4gm, char *szStr=0)
 возвращает путь до файла скрипта который выполняется в данный момент (если str то записывает в него)
 
S4G_API int s4g_Dbg_GetCurrStr (s4g_Main *s4gm, char *szStr=0)
 возвращает номер строки файла скрипта который выполняется в данный момент (если str то записывает в него)
 
S4G_API const char * s4g_Dbg_GetCurrFunc (s4g_Main *s4gm, char *szStr=0)
 возвращает функцию которая выполняется в данный момент (если str то записывает в него)
 
Pre Process
S4G_API bool s4g_PP_Defined (s4g_Main *s4gm, const char *szDefine)
 объявлен ли дефайн
 
S4G_API void s4g_PP_Define (s4g_Main *s4gm, const char *szDefine)
 обьявляет новый дефайн
 
S4G_API void s4g_PP_Undef (s4g_Main *s4gm, const char *szDefine)
 удаляет указанный дефайн
 
S4G_API void s4g_PP_AddIncludePath (s4g_Main *s4gm, const char *szPath)
 добавляет путь поиска включаемых файлов
 

Переменные

const char g_aS4GtypeStr [][S4G_MAX_LEN_TYPE_NAME]
 строковое представление типов
 

Подробное описание

Заголовочный файл со всеми необхожимыми данными для использования языка, посредством api функций