/* Файл - Реализация загрузки модулей формул и вызова функций их этих модулей. Краткое описание системы модулей формул Модели формул представляют из себя динамическую библиотеку, имеющую специальную функцию экспорта таблицы функций для формульного движка. Данная Функция экспортирует в программу таблицу с указателями на функции и наименование конкретной функции. Наменования функций записаны в виде 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) */