[]========================================================================[] * * * Описание Flex Navigator API v1.xx для разработчиков Flx-Plugins * * doc v0.5 от 26.07.2025 (в процессе) * * * []========================================================================[] Доступ к функциям осуществляется через набор переходов в начале ядра Flex Navigator для сборки плагинов независимо от ядра. Таблица переходов начинается с адреса JUMPS + 3 или она же с BASE_ADDR + 3. Адрес начала таблицы выровнен по границе 256 байт. Первый адрес переход занят для запуска самого навигатора. Размер таблицы переходов 192 байта, после таблицы расположены некоторые переменные Flex Navigator для доступа к ним из плагинов. Для правильной работы при сборке плагина предлагается инклудить файл fn_const.a80 []------------------------------------------------------------------------[] JUMPS.ClearScreen - процедура отчистки 0-го экрана нужным цветом. на вход: A - цвет отчистки (00-0Fh) на выход: - []------------------------------------------------------------------------[] JUMPS.MakeWindow - процедура создания графического окна на вход: (SP) - описатель окна на выход: - сразу за вызовом этой процедуры в программе следует описатель окна. возврат из процедуры происходит по адресу, следующему за описателем. например: call MakeWindow ... ; описатель окна описатель окна: +00 (1) флаг вывода окна: 0 - без сохранения данных под окном (используется для полноэкранных окон) 1 - с сохранением данных под окном (используется для небольших окон) 0x7F - восстановить данные под окном (флаг служит для закрытия текущего окна) 0x8x - без привязки к описателю окна +01 (2) координата x для вывода (0 - 639) +03 (2) координата y для вывода (0 - 255) +05 (2) ширина (0 - 639) +07 (2) высота (0 - 255) далее идут об'екты окна в формате: +00 (1) тип объекта +01 ... описатели объекта об'екты окна: 0. +00 (1) == 0 - конец списка об'ектов. после этого оконная функция возвращает управление. 1. +00 (1) == 1 - текстовая строка +01 (2) смещение x от начала окна (0 - 639) +03 (2) смещение y от начала окна (0 - 255) +05 (1) цвет печати (d7-d4 цвет background, d3-d0 цвет foreground) +06 ... текстовая строка (конец строки - 0) 2. +00 (1) == 2 - заполнение прямоугольной плоскости +01 (2) смещение x от начала окна (0 - 639) +03 (2) смещение y от начала окна (0 - 255) +05 (2) длина по x (0 - 639) +07 (2) длина по y (0 - 255) +09 (1) цвет заполнения (d7-d4 цвет background, d3-d0 цвет foreground) 3. +00 (1) == 3 - отрисовка углублённой прямоугольной плоскости +01 (2) смещение x от начала окна (0 - 639) +03 (2) смещение y от начала окна (0 - 255) +05 (2) длина по x (0 - 639) +07 (2) длина по y (0 - 255) 4. +00 (1) == 4 - отрисовка выпуклой прямоугольной плоскости +01 (2) смещение x от начала окна (0 - 639) +03 (2) смещение y от начала окна (0 - 255) +05 (2) длина по x (0 - 639) +07 (2) длина по y (0 - 255) 5. +00 (1) == 5 - отрисовка кнопки с текстом +01 (2) смещение x от начала окна (0 - 639) +03 (2) смещение y от начала окна (0 - 255) +05 (2) длина по x (0 - 639) +07 (2) длина по y (0 - 255) +09 (1) цвет печати (d7-d4 цвет background, d3-d0 цвет foreground) +10 ... текстовая строка (конец строки - 0) Внимание! печать текста осуществляется с позиций x + 4, y + 1 6. +00 (1) == 6 - отрисовка горизонтального разделителя +01 (2) смещение x от начала окна (0 - 639) +03 (2) смещение y от начала окна (0 - 255) +05 (2) длина по x (0 - 639) 7. +00 (1) == 7 - отрисовка вертикального разделителя +01 (2) смещение x от начала окна (0 - 639) +03 (2) смещение y от начала окна (0 - 255) +05 (2) длина по y (0 - 255) 8. +00 (1) == 8 - отрисовка левой кнопки скролбара <- +01 (2) смещение x от начала окна (0 - 639) +03 (2) смещение y от начала окна (0 - 255) 9. +00 (1) == 9 - отрисовка правой кнопки скролбара -> +01 (2) смещение x от начала окна (0 - 639) +03 (2) смещение y от начала окна (0 - 255) 10. +00 (1) == 10 - отрисовка верхней кнопки скролбара ^ +01 (2) смещение x от начала окна (0 - 639) +03 (2) смещение y от начала окна (0 - 255) 11. +00 (1) == 11 - отрисовка нижней кнопки скролбара +01 (2) смещение x от начала окна (0 - 639) +03 (2) смещение y от начала окна (0 - 255) 12. +00 (2) == 12 - текстовая строка +01 (2) смещение x от начала окна (0 - 639) +03 (2) смещение y от начала окна (0 - 255) +05 (1) цвет печати (d7-d4 цвет background, d3-d0 цвет foreground) +06 (2) адрес текстовой строки (конец строки - 0) []------------------------------------------------------------------------[] JUMPS.InvertRectan - процедура замены цвета прямоугольной плоскости на вход: HL - x координата BC - y координата HX - длина y LX - длина x D - текущий цвет (d7-d4 цвет background, d3-d0 цвет foreground) E - нужный цвет (d7-d4 цвет background, d3-d0 цвет foreground) на выход: - к сожалению процедура не очень быстрая, поэтому большие прямоугольники советую особо не инвертировать... ;) []------------------------------------------------------------------------[] JUMPS.PrnTxtLnIFF - процедура вывода текстовых строк на графический экран 640x256 в режиме размерного по X шрифта на вход: HL - адрес текстовой строки (конец строки - 0) DE - позиция вывода по X BC - позиция вывода по Y A - цвет печати (d7-d4 цвет background, d3-d0 цвет foreground) на выход: HL - адрес байта, следующего за строкой []------------------------------------------------------------------------[] JUMPS.PrnTxtLnNorm - процедура вывода текстовых строк на графический экран 640x256 на вход: HL - адрес текстовой строки (конец строки - 0) DE - позиция вывода по X BC - позиция вывода по Y A - цвет печати (d7-d4 цвет background, d3-d0 цвет foreground) на выход: HL - адрес байта, следующего за строкой []------------------------------------------------------------------------[] JUMPS.PrnTxtLnNormC - процедура вывода текстовых строк на графический экран 640x256 с известным числом символов на вход: HL - адрес текстовой строки DE - позиция вывода по X C - позиция вывода по Y B - кол-во печатаемых символов A - цвет печати (d7-d4 цвет background, d3-d0 цвет foreground) на выход: HL - адрес байта, следующего за последним символом []------------------------------------------------------------------------[] JUMPS.PrnRangPathL - процедура вывода досовских путей на графический экран 640x256 в режиме размерного по X шрифта, прижатых к левому краю ( |-> ) на вход: IX - кол-во пикселей под вывод строки HL - адрес текстовой строки (конец строки - 0) DE - позиция вывода по X BC - позиция вывода по Y A - цвет печати (d7-d4 цвет background, d3-d0 цвет foreground) на выход: - процедура грамотно укорачивает досовский путь до нужного размера путём замещения невлезающих директорий на ..\ []------------------------------------------------------------------------[] JUMPS.PrnRangPathR - процедура вывода досовских путей на графический экран 640x256 в режиме размерного по X шрифта, прижатых к правому краю ( <-| ) на вход: IX - кол-во пикселей под вывод строки HL - адрес текстовой строки (конец строки - 0) DE - позиция вывода по X BC - позиция вывода по Y A - цвет печати (d7-d4 цвет background, d3-d0 цвет foreground) на выход: - процедура грамотно укорачивает досовский путь до нужного размера путём замещения невлезающих директорий на ..\ []------------------------------------------------------------------------[] JUMPS.PrnRangPathC - процедура вывода досовских путей на графический экран 640x256 в режиме размерного по X шрифта, отцентрированных относительно краёв ( <-|-> ) на вход: IX - кол-во пикселей под вывод строки HL - адрес текстовой строки (конец строки - 0) DE - позиция вывода по X BC - позиция вывода по Y A - цвет печати (d7-d4 цвет background, d3-d0 цвет foreground) на выход: - процедура грамотно укорачивает досовский путь до нужного размера путём замещения невлезающих директорий на ..\ []------------------------------------------------------------------------[] JUMPS.InputLine - процедура редактирования строки на графическом экране 640x256 в режиме размерного по X шрифта на вход: IX - адрес описателя строки HL - адрес описателя элементов экрана (для мышки) на выход: - описатель строки: +00 (1) максимальная длина строки +01 (1) флаг готовности +02 (1) текущая X позиция курсора (инициализируется в InputLine) +03 (1) текущая add_x (инициализируется в InputLine) +04 (1) количество введенных символов / длина строки +05 (2) X позиция строки на экране +07 (2) Y позиция строки на экране +09 (2) X длина строки на экране +0B (1) цвет строки (d7-d4 цвет background, d3-d0 цвет foreground) +0C ... сама строка процедуры для таблицы элементов экрана: JUMPS.InpLnExtN - процедура нормального выхода из редакции JUMPS.InpLnExtC - процедура выхода из редакции по cancel (восстанавливает изначальную строку) []------------------------------------------------------------------------[] JUMPS.DOSError - процедура вывода окна ошибки (для DOS ошибок) на вход: A - номер ошибки на выход: - []------------------------------------------------------------------------[] JUMPS.InitScrollBar - процедура инициализации описателя скроллбара на вход: IX - адрес описателя скроллбара на выход: - описатель скроллбара: +00 (2) X позиция скролбара (0-639) +02 (2) Y позиция скролбара (0-255) +04 (2) длина скролбара +06 (2) текущая длина скролбара (инициализируется в InitScrollBar) +08 (2) адрес ячейки, куда запишется начальная координата бара если 0, то не используется (используется для таблицы элементов экрана) +10 (2) адрес ячейки, куда запишется конечная координата бара если 0, то не используется (используется для таблицы элементов экрана) +12 (2) кол-во видимых элементов +14 (2) общее кол-во элементов +16 (2) первая видимый элемент []------------------------------------------------------------------------[] JUMPS.PrnHScrBar - процедура печати горизонтального скроллбара на вход: IX - адрес описателя скроллбара (см. выше) на выход: - []------------------------------------------------------------------------[] JUMPS.PrnVScrBar - процедура печати вертикального скроллбара на вход: IX - адрес описателя скроллбара (см. выше) на выход: - []------------------------------------------------------------------------[] JUMPS.InitProcess - процедура инициализации описателя процессбара на вход: IX - адрес описателя процессбара на выход: - описателя процессбара: +00 (2) X позиция процессбара (0-639) +02 (2) Y позиция процессбара (0-255) +04 (2) длина процессбара +06 (2) коэффициент для процесса (инициализируется в InitProcess) +08 (2) коррекция коэфициента (инициализируется в InitProcess) +10 (4) максимум (инициализируется в InitProcess) +14 (4) текущее (инициализируется в InitProcess) +18 (1) цвет процессбара (d7-d4 цвет background, d3-d0 цвет foreground) []------------------------------------------------------------------------[] JUMPS.PrnProcess - процедура печати процессбара на вход: IX - адрес описателя процессбара (см. выше) на выход: - []------------------------------------------------------------------------[] 5 команд перехода (12 байт) зарезервированы и заполнены командой RET (12 байт 0xC9) []------------------------------------------------------------------------[] JUMPS.ResFire - процедура ожидания, пока все кнопки мыши не будут отпущены на вход: - на выход: - []------------------------------------------------------------------------[] JUMPS.TestCoords - процедура проверки координат мыши по таблице элементов экрана на вход: IX - адрес таблицы элементов зкрана на выход: - таблица элементов зкрана: +00 (2) левая x координата элемента +02 (2) правая x координата элемента +04 (2) верхняя y координата элемента +06 (2) нижняя y координата элемента +08 (2) флаги элемента +10 (2) адрес обработчика при не нажатом огне +12 (2) адрес обработчика при нажатом огне (левая кнопка) +14 (2) адрес обработчика при нажатом огне (правая кнопка) если +00 == 0x8000 это считается концом таблицы элементов зкрана флаги элемента (номер бита): d00 - элемент кнопка d01 - рабочая кнопка d02 - инверт d03 - статичный инверт d04 - программа запускается без адреса возврата без огня (т.е. при попадании курсора мыши в эту прямоугольную область удаляется адрес возрата со стека и осуществляется переход на адрес, который находиться в +10) d05 - программа запускается без адреса возврата по левой кнопке огня (т.е. при нажатии левой кнопки мыши над прямоугольной областью удаляется адрес возрата со стека и осуществляется переход на адрес, который находиться в +12) d06 - программа запускается без адреса возврата по правой кнопке огня (т.е. при нажатии правой кнопки мыши над прямоугольной областью удаляется адрес возрата со стека и осуществляется переход на адрес, который находиться в +14) d07 - вызвать функцию закрытия окна перед запуском программы без огня (т.е. при попадании курсора мыши в эту прямоугольную область удаляется последнее окно с экрана) d08 - вызвать функцию закрытия окна перед запуском программы по левой кнопке (т.е. при нажатии левой кнопки мыши над прямоугольной областью удаляется последнее окно с экрана) d09 - вызвать функцию закрытия окна перед запуском программы по правой кнопке (т.е. при нажатии правой кнопки мыши над прямоугольной областью удаляется последнее окно с экрана) d15 - это флаг: 1 - инверт при огне не убирать []------------------------------------------------------------------------[] JUMPS.SetCMOSPrint - процедура включения печати даты/время из CMOS на вход: - будет описано позднее на выход: - []------------------------------------------------------------------------[] JUMPS.ResCMOSPrint - процедура выключения печати даты/время из CMOS на вход: - будет описано позднее на выход: - []------------------------------------------------------------------------[] JUMPS.SetClock - процедура установки курсора мыши в часы на вход: - на выход: - []------------------------------------------------------------------------[] JUMPS.SetMouse - процедура установки курсора мыши в нормальный курсор на вход: - на выход: - []------------------------------------------------------------------------[] 4 команды перехода (12 байт) зарезервированы и заполнены командой RET (12 байт 0xC9) []------------------------------------------------------------------------[] JUMPS.ConvNumTxt40 - процедура конвертации беззнакового числа 40 bit в текст на входе: ABCHL - число DE - адрес буфера на выходе: []------------------------------------------------------------------------[] JUMPS.MoveBytes - процедура быстрого копирования памяти с помощью акселлератора с увеличением адресов на вход: HL - откуда DE - куда BC - сколько на выход: HL - (откуда + сколько) DE - (куда + сколько) []------------------------------------------------------------------------[] JUMPS.MoveBytesUp - процедура быстрого копирования памяти с помощью акселлератора с уменьшением адресов на вход: HL - откуда DE - куда BC - сколько на выход: HL - (откуда - сколько) DE - (куда - сколько) []------------------------------------------------------------------------[] JUMPS.Mult8 - процедура беззнакового умножения 8 * 8 bit = 16 bit на вход: E * C на выход: HL - результат []------------------------------------------------------------------------[] JUMPS.Mult16X8 - процедура беззнакового умножения 16 * 8 bit = 24 bit на вход: DE * C на выход: A, HL - результат []------------------------------------------------------------------------[] JUMPS.Mult16 - процедура беззнакового умножения 16 * 16 bit = 16 bit на вход: DE * BC на выход: HL - результат []------------------------------------------------------------------------[] JUMPS.Mult16X16 - процедура беззнакового умножения 16 * 16 bit = 32 bit на вход: DE * BC на выход: HL, DE - результат []------------------------------------------------------------------------[] JUMPS.Mult32 - процедура беззнакового умножения 32 * 16 bit = 32 bit на вход: HL, DE * BC на выход: HL, DE - результат []------------------------------------------------------------------------[] JUMPS.Divis16X16 - процедура беззнакового деления 16 / 16 bit = 16.16 bit на вход: BC / DE на выход: BC - результат HL - остаток []------------------------------------------------------------------------[] JUMPS.Divis24X16 - процедура беззнакового деления 24 / 16 bit = 8.16 bit на вход: HL, C / DE на выход: A - результат HL - остаток []------------------------------------------------------------------------[] JUMPS.Divis32X16 - процедура беззнакового деления 32 / 16 bit = 16.16 bit на вход: HL, DE / BC на выход: DE - результат HL - остаток []------------------------------------------------------------------------[] JUMPS.Divis32 - процедура беззнакового деления 32 / 16 bit = 32.16 bit на вход: HL, DE / BC на выход: HL, DE - результат BC - остаток []------------------------------------------------------------------------[] JUMPS.ConvNumTxt32 - процедура конвертации беззнакового числа 32 bit в текст на вход: BC, HL - число 32 bit DE - адрес буфера на выход: DE - адрес следующего байта за числом []------------------------------------------------------------------------[] JUMPS.ConvNumTxt16 - процедура конвертации беззнакового числа 16 bit в текст на вход: HL - число 16 bit DE - адрес буфера на выход: DE - адрес следующего байта за числом []------------------------------------------------------------------------[] JUMPS.ConvNumTxt8 - процедура конвертации беззнакового числа 8 bit в текст на вход: A - число 8 bit DE - адрес буфера на выход: DE - адрес следующего байта за числом []------------------------------------------------------------------------[] JUMPS.ConvTxtNum32 - процедура конвертации текста в беззнаковое число 32 bit на вход: DE - адрес текста (конец строки - 0) на выход: HL, IX - число C flag - ошибка []------------------------------------------------------------------------[] JUMPS.ConvTxtNum16 - процедура конвертации текста в беззнаковое число 16 bit на вход: DE - адрес текста (конец строки - 0) на выход: HL - число C flag - ошибка []------------------------------------------------------------------------[] JUMPS.Resident - вызов процедур в странице на входе: DE - адрес вызова C - адрес порта окна страницы A - номер страницы на выходе: портится регистр BС (используется при вызове для хранения старого значения номера страницы для восстановления) []------------------------------------------------------------------------[]