92 lines
5.9 KiB
C
92 lines
5.9 KiB
C
/*
|
||
Файл - Реализация загрузки модулей формул и вызова функций их этих модулей.
|
||
|
||
Краткое описание системы модулей формул
|
||
Модели формул представляют из себя динамическую библиотеку,
|
||
имеющую специальную функцию экспорта таблицы функций для формульного
|
||
движка.
|
||
Данная Функция экспортирует в программу таблицу с указателями на
|
||
функции и наименование конкретной функции.
|
||
|
||
Наменования функций записаны в виде UTF-8 строки заканчивающейся
|
||
нуль-терминатором. Строка не должна начинаться с символов цифр, и не
|
||
должна включать в себя следующие символы "!","<","=",">","^","(",")",
|
||
"*","&",""", управляющих ASCII символов и других служебных символов.
|
||
|
||
Символ "$" считается разделителем между названием функции, описанием
|
||
выходных значений и описанием аргументов.
|
||
|
||
Пример:
|
||
"sum$d$eed"
|
||
\___/| \_/
|
||
название / | \описание аргументов функции - перечисление значений/ячеек
|
||
функции | типа double
|
||
|
|
||
Описание типа выходного значения - значение типа double
|
||
|
||
Примером вызова данной функции может быть следующая запись:
|
||
"=sum({3,4,5,6:9},A1,A2:C4,1,2,0)"
|
||
|
||
Типы аргументов и выходного значения имеют одинаковый вид записи,
|
||
в виде символа-обозначения типа:
|
||
d - double - Числовой и булевый тип. Булевые значения кодируются
|
||
в виде чисел, где: 1.0 соответствует значению TRUE
|
||
а 0.0 соответствет значению FALSE
|
||
s - string - Строковый тип данных, представляет из себя UTF-8
|
||
строку завершающуюся нуль-терминатором. Кроме этого,
|
||
строки в ячейках начинающиеся с символа "=" не
|
||
подпадают под данный тип, их тип вычисляется
|
||
формульным движком.
|
||
t - time - Тип представляющий собой дату и время
|
||
i - image - Значение представляющее собой 32 битное RAW изображение
|
||
с указанием размера и выравнивания линий. Может быть
|
||
использовано для вывода графика, но это не точно.
|
||
|
||
c - cell - Специальный тип - ячейка. Данный тип представляет собой
|
||
специальный ID, который указывает на "ячейку"(в том
|
||
числе виртуальную для константных занчений) у которой
|
||
можно узнать тип во время исполнения агоритма работы
|
||
функции. Запись в ячейки данного типа также позволяет
|
||
выбрать тип возвращаемого значения.
|
||
eX - enum - Специальный тип, представляющий из себя набор значений
|
||
типа X. Данный тип описывает перечесление значений
|
||
только в рамках одной записи, что позволяет получать
|
||
несколько таких перечеслений.
|
||
eeX - enums - Специальный тип - перечисление перечислений. Может быть
|
||
записан только один раз в конце названия. Все парамеры
|
||
которые идут далее и под этот тип будут неявно
|
||
преобразованы под тип enum.
|
||
b - button - Специальный тип - Кнопка. Данный тип нужен для создания
|
||
интерактивной кнопки, позволяющей
|
||
|
||
|
||
Так как у формул количество аргументов может быть достаточно большое, то в
|
||
функцию передаётся указатель на массив идентификаторов.
|
||
stdcall int (*formula)(uint32_t input_id, uint32_t* output_ids);
|
||
|
||
*/
|
||
#include "modules.h"
|
||
|
||
|
||
int formulas_init(module_t* this) {
|
||
//check and call 'tmodule_formulas' function
|
||
import_formula_t* (*module_get_formulas)(uint32_t);
|
||
module_get_formulas = _ksys_dlsym(this -> dll, "tmodule_formulas");
|
||
if (module_get_formulas) return 0;
|
||
this -> formulas = module_get_formulas(this -> pdata);
|
||
return 0
|
||
}
|
||
|
||
|
||
|
||
/*
|
||
https://senior-sigan.notion.site/e371029e51bf4748ab04f0c904f9fc0d
|
||
|
||
тип (*имя_указателя) (типы_параметров);
|
||
Например:
|
||
void (*message) (void);
|
||
|
||
тип (*имя_массива[размер]) (параметры)
|
||
Например:
|
||
double (*actions[]) (int, int)
|
||
*/ |