Table: All editor code files have been added from the flash drive.
The start date of development is September 12, 2024.
This commit is contained in:
92
formulas.c
Normal file
92
formulas.c
Normal file
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
Файл - Реализация загрузки модулей формул и вызова функций их этих модулей.
|
||||
|
||||
Краткое описание системы модулей формул
|
||||
Модели формул представляют из себя динамическую библиотеку,
|
||||
имеющую специальную функцию экспорта таблицы функций для формульного
|
||||
движка.
|
||||
Данная Функция экспортирует в программу таблицу с указателями на
|
||||
функции и наименование конкретной функции.
|
||||
|
||||
Наменования функций записаны в виде 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)
|
||||
*/
|
Reference in New Issue
Block a user