Специфікація BTRON3 (Український переклад) | Розділ 7: Графічна оболонка (GUI Shell)
Повернутися до змісту розділу Графічної оболонки
Попередня сторінка: 3.6 Менеджер даних (Повернутися)
Наступна сторінка: 3.8 Менеджер Реальних та Віртуальних об'єктів (Перейти)

3.7 Текстові примітиви введення (Text Input Primitives / TIP)

3.7.1 Функції примітивів введення тексту

3.7.1.1 Загальні відомості

Підсистема TIP (Text Input Primitives) реалізує базовий механізм обробки клавіатурного вводу та кана-канджі перетворення (FEP / IME). Вона забезпечує перетворення послідовності клавіш (прямий ввід, кана, ромаджі) у символи TRON Code, керування станами перетворення (непідтверджений текст, поточна фраза/бунсецу, підтверджений текст), а також відображення каретки/курсора.

3.7.1.2 Режими введення та перетворення

3.7.1.3 Порт введення тексту (TIP Port) та структура TIPREC

При відкритті порту введення через iopn_tip() створюється структура TIPREC, яка динамічно оновлюється під час викликів iput_key() та iput_str().

typedef struct {
    W   n_cl;       /* Загальна кількість фраз (бунсецу) */
    W   n_out;      /* Кількість підтверджених фраз */
    UW  car;        /* Позиція каретки у непідтвердженому тексті */
    UW  clause;     /* Поточна активна фраза / режим редагування читання */
    H   *cl_cnv;    /* Зсуви меж фраз у перетвореному тексті */
    TC  *cnv;       /* Перетворений текст (підтверджений + непідтверджений) */
    H   *cl_in;     /* Зсуви меж фраз у вхідному рядку читання (йомі) */
    TC  *in;        /* Вхідний рядок читання (йомі) */
} TIPREC;

3.7.1.4 Відображення каретки (CARET)

Каретка — графічний покажчик місця вставки символу (трикутна позначка з вертикальною лінією висоти шрифту), що блимає із заданим періодом.

typedef struct {
    W       sts;    /* Стан: 0 = прихована, 1 = відображена */
    W       gid;    /* ID середовища малювання */
    PNT     pos;    /* Позиція вершини каретки (відносні координати) */
    W       height; /* Висота лінії курсора (0 = лише трикутник) */
    UW      kind;   /* Напрямок: 0 = горизонтальний, 1 = вертикальний */
    COLOR   color;  /* Колір каретки */
} CARET;

3.7.2 Константи та прапори

□ Режими вводу

#define TIP_KANA    0x0000  /* Режим Кана */
#define TIP_ROMAN1  0x0001  /* Режим Ромаджі (n) */
#define TIP_ROMAN2  0x0002  /* Режим Ромаджі (nn) */

#define TIP_DIRMD   0x0100  /* Прямий режим */
#define TIP_CNVMD   0x0000  /* Режим перетворення */

#define TIP_AUTO    0       /* Автоперетворення */
#define TIP_MANUAL  1       /* Ручне перетворення */

□ Прапори результату обробки (iput_key)

#define TIP_OUT     0x1     /* З'явилася підтверджена фраза */
#define TIP_CNV     0x2     /* Змінився непідтверджений текст */
#define TIP_CAR     0x4     /* Змінилася позиція каретки */
#define TIP_CL      0x8     /* Змінилася активна фраза або межа фрази */

□ Словники (ichg_lrn)

#define TIP_DIC_COMMON  0x00000001  /* Базовий системний словник */
#define TIP_DIC_SINGLE  0x00000002  /* Словник окремих канджі */
#define TIP_DIC_USR     0x00000004  /* Словник користувача */

3.7.3 Системні виклики TIP

Усі функції повертають від'ємний код при помилці, «0» або додатне число при успіху.

ichg_mod
Change Input Mode
Зміна глобального режиму введення (Кана / Ромаджі)

【Синтаксис / Прототип】

WERR    ichg_mod(W mode)

【Параметри】

W   mode    Новий режим: TIP_KANA, TIP_ROMAN1, TIP_ROMAN2 (< 0 = не змінювати)

【Значення, що повертається】

>= 0    Попередній режим введення
 < 0    Помилка (Код помилки)

【Детальний опис】

Встановлює системний режим інтерпретації клавіш: прямий ввід Кана або фонетичний Ромаджі. При mode < 0 лише повертає поточний активний режим.

【Коди помилок】

EX_PAR  : Неприпустиме значення mode.
ichg_lrn
Change Learning / Dictionaries
Керування навчанням словника та станом словників

【Синтаксис / Прототип】

WERR    ichg_lrn(W lrn, UW dic)

【Параметри】

W   lrn     Режим навчання: 0 = вимкнено, 1 = увімкнено, 2 = очистити пам'ять навчання (< 0 = без змін)
UW  dic     Бітова маска активних словників (TIP_DIC_COMMON, TIP_DIC_USR тощо)

【Значення, що повертається】

>= 0    Попередній стан навчання (0 або 1)
 < 0    Помилка (Код помилки)

【Детальний опис】

Керує адаптивним навчанням частотності слів у процесі перетворення та активує/деактивує словники користувача.

【Коди помилок】

EX_PAR  : Неприпустимий lrn або dic.
iopn_tip
Open TIP Port
Створення порту введення тексту

【Синтаксис / Прототип】

W   iopn_tip(W mode, W atr, TIPREC **tiprec)

【Параметри】

W        mode    Режим порту (TIP_DIRMD | TIP_CNVMD)
W        atr     Спосіб перетворення (TIP_AUTO | TIP_MANUAL)
TIPREC **tiprec  Буфер для вказівника на внутрішню структуру стану TIPREC

【Значення, що повертається】

>= 0    ID порту введення тексту (tipid)
 < 0    Помилка (Код помилки)

【Детальний опис】

Створює новий екземпляр порту введення і повертає його ID та адресу структури TIPREC.

【Коди помилок】

EX_ADR  : Недопустима адреса tiprec.
EX_NOSPC: Нестача пам'яті.
EX_PAR  : Неприпустимий mode або atr.
icls_tip
Close TIP Port
Закриття порту введення тексту

【Синтаксис / Прототип】

ERR icls_tip(W tipid)

【Параметри】

W   tipid   ID порту введення

【Значення, що повертається】

= 0     Успішне виконання
< 0     Помилка (Код помилки)

【Детальний опис】

Закриває порт введення і звільняє пов'язані буфери.

【Коди помилок】

EX_TID  : Порт tipid не існує.
iput_key
Put Key Event to TIP Port
Передача клавіатурної події в порт введення

【Синтаксис / Прототип】

W   iput_key(W tipid, WEVENT *evt)

【Параметри】

W       tipid   ID порту введення
WEVENT *evt     Подія клавіші (EV_KEYDWN або EV_AUTKEY)

【Значення, що повертається】

>= 0    Бітова маска змін (TIP_OUT | TIP_CNV | TIP_CAR | TIP_CL; 0 = без змін)
 < 0    Помилка (Код помилки)

【Детальний опис】

Передає клавішу в порт перетворення. Оновлює внутрішню структуру TIPREC і повертає бітову маску того, що саме змінилося, для оптимізації перемальовування.

【Коди помилок】

EX_TID  : Порт tipid не існує.
EX_PAR  : Подія не є натисканням клавіші.
EX_KEY  : Некоректний скан-код клавіші.
EX_CKEY : Функціональна клавіша натиснута без наявного тексту перетворення.
EX_LIMIT: Перевищено ліміт довжини рядка.
iput_str
Put String to TIP Port
Введення рядка для повторного перетворення

【Синтаксис / Прототип】

ERR iput_str(W tipid, TC *str)

【Параметри】

W   tipid   ID порту введення
TC *str     Рядок символів TRON Code

【Значення, що повертається】

= 0     Успішне виконання
< 0     Помилка (Код помилки)

【Детальний опис】

Завантажує готовий рядок символів у порт для повторного перетворення.

【Коди помилок】

EX_TID  : Порт tipid не існує.
EX_KEY  : Рядок містить заборонені коди.
EX_NOSPT: Порт відкрито у прямому режимі.
ichg_blk
Change Caret Blink Interval
Налаштування періоду блимання каретки

【Синтаксис / Прототип】

WERR    ichg_blk(W intvl)

【Параметри】

W   intvl   Період блимання у мілісекундах (0 = вимкнути, < 0 = лише отримати)

【Значення, що повертається】

>= 0    Попередній період блимання (мс)

【Детальний опис】

Встановлює глобальний інтервал блимання текстового курсора/каретки.

【Коди помилок】

Помилки не виникають.

idsp_car
Display Caret
Відображення, стирання або блимання каретки

【Синтаксис / Прототип】

ERR idsp_car(CARET *car, W mode)

【Параметри】

CARET *car  Структура опису каретки
W      mode Режим: 0 = сховати, > 0 = показати, < 0 = виконати крок блимання

【Значення, що повертається】

= 0     Успішне виконання
< 0     Помилка (Код помилки)

【Детальний опис】

Керує малюванням символу каретки у середовищі car->gid. При mode < 0 автоматично інвертує стан, якщо настав час наступного напівперіоду блимання.

【Коди помилок】

EX_ADR  : Недопустима адреса car.

Повернутися до змісту розділу Графічної оболонки
Попередня сторінка: 3.6 Менеджер даних (Повернутися)
Наступна сторінка: 3.8 Менеджер Реальних та Віртуальних об'єктів (Перейти)