8.4 KiB
8.4 KiB
BRC v3 — KolibriOS
Клиент для браузерного агента BRC, написанный на FASM для KolibriOS.
Адаптивный UI: все элементы пересчитываются при каждом resize окна.
Сборка
/sys/Develop/Fasm /hd0/1/brc_kolibri.asm /hd0/1/brc_kolibri
Архитектура UI
Как работает адаптация
- Ядро KolibriOS посылает Event 1 (redraw) при любом изменении окна
get_wnd_sizeвызывает fn9 → читаетclient_box.width(offset 42) иclient_box.height(offset 46)- Из этих значений вычисляются все динамические координаты:
| Переменная | Формула | Назначение |
|---|---|---|
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 кнопок (прилипают к правому краю) |
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 (вывод на экран)