BRC v3 — KolibriOS

Клиент для браузерного агента BRC, написанный на FASM для KolibriOS.
Адаптивный UI: все элементы пересчитываются при каждом resize окна.

Сборка

/sys/Develop/Fasm /hd0/1/brc_kolibri.asm /hd0/1/brc_kolibri

Архитектура UI

Как работает адаптация

  1. Ядро KolibriOS посылает Event 1 (redraw) при любом изменении окна
  2. get_wnd_size вызывает fn9 → читает client_box.width (offset 42) и client_box.height (offset 46)
  3. Из этих значений вычисляются все динамические координаты:
Переменная Формула Назначение
dynEW wW - EX*2 - BTN_W - 16 ширина поля ввода
dynOW wW - OX*2 ширина поля вывода
dynOH wH - OY - 40 высота поля вывода
dynSY wH - 22 Y статус-бара (прилипает к низу)
dynBX wW - BTN_W - 8 X кнопок (прилипают к правому краю)
  1. wnd_draw перерисовывает всё с нуля с новыми координатами

Файлы

  • header.asm — Заголовок MENUET01, константы окна, цвета, отступы
  • entry.asm — Точка входа: cfg_load → get_wnd_size → wnd_draw
  • evtloop.asm — Главный цикл событий: redraw / key / button / resize / timer
  • get_wnd_size.asm — Читает client_box.width/height через fn9 (offset 42/46), пересчитывает dynEW/OW/OH/SY/BX
  • check_resize.asm — Перерисовывает окно только если размер реально изменился
  • get_time.asm — Возвращает системное время в сотых долях секунды (fn26 sf9)
  • txt_draw.asm — Вывод строки текста: вычисляет длину, вызывает fn4
  • cp866_to_utf8.asm — Конвертирует строку CP866 → UTF-8 для отправки на сервер
  • parse_hex4.asm — Разбирает 4 hex-символа в число (для \uXXXX в JSON)
  • unicode_to_cp866.asm — Конвертирует Unicode codepoint → CP866 байт (кириллица)
  • wnd_draw.asm — Полная перерисовка окна: fn12 begin/end, создание окна, метки, кнопки, поля
  • draw_edit.asm — Поле ввода: фон, рамка (fn38), текст, курсор, placeholder
  • draw_out.asm — Область вывода ответа: фон, рамка, постраничный вывод строк
  • draw_status.asm — Строка статуса внизу окна — прилипает к dynSY, показывает Ready/Sending/Done
  • key_hdl.asm — Обработка клавиатуры: Enter → do_send, BS, ESC, обычные символы
  • do_send.asm — Отправка запроса: cp866→utf8→base64, 4 вызова brc_post, brc_read, parse_resp
  • parse_resp.asm — Разбор JSON-ответа: eval_result → tmpBuf, поиск ,"t":" → outBuf с конвертацией \n
  • brc_post.asm — Сборка JSON и HTTP POST для команд BRC (count/hover/confirm)
  • brc_fill.asm — HTTP POST команды fill — отправляет base64-закодированный текст
  • brc_read.asm — HTTP POST команды read — читает ответ из браузера через JS
  • http_post.asm — Низкоуровневый TCP: socket → connect → send → recv → close (fn75)
  • build_req.asm — Собирает HTTP-запрос: POST заголовки + Content-Length + тело
  • parse_ip.asm — Разбирает IP-адрес из строки в 4 байта для sockAddr
  • do_b64_buf.asm — Base64-кодирование буфера (стандартный алфавит, дополнение =)
  • cfg_load.asm — Загружает brc.ini через fn70, при ошибке использует встроенные defaults
  • ini_parse.asm — Разбирает INI-файл: api_key, browser_id, host_ip, host, path, sleep
  • key_cmp.asm — Сравнивает ключ INI-строки с образцом (без нуль-терминатора в ключе)
  • copy_val.asm — Копирует значение INI (до CR/LF) в целевой буфер
  • parse_dec.asm — Разбирает десятичное число из строки → eax
  • write_log.asm — Дописывает запрос+ответ в /hd0/1/brc.log через fn70 sf3/sf5
  • strings.asm — Строковые утилиты: s_cat, s_cpy, s_len, wrt_dec, s_str
  • data.asm — Секция данных: строки, буферы, переменные состояния, конфиг

Конфиг brc.ini

[brc]
api_key=ваш_ключ
browser_id=ваш_id
host_ip=31.31.197.18
host=lp85d.ru
path=/wp-json/brc/v1/command
sleep=1000

Файл читается при запуске через fn70. При отсутствии используются встроенные defaults.

Поток запроса

Ввод текста (CP866)
  → cp866_to_utf8
  → do_b64_buf (Base64)
  → brc_post(__brc_count_responses__)
  → brc_post(__brc_hover_last_user_message__)
  → brc_fill(__brc_fill_edit_field__:<base64>)
  → brc_post(__brc_confirm_edit__)
  → sleep(cfgSleep ms)
  → brc_read (JS читает ответ из DOM)
  → parse_resp (eval_result → ,"t":" → outBuf)
  → draw_out (вывод на экран)
image image
Description
🖥 Browser Remote Control
Readme 74 KiB
Languages
Assembly 100%