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

3.6 Менеджер даних (Data Manager)

3.6.1 Функції Менеджера даних

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

Менеджер даних (Data Manager) керує ресурсами системи та додатків — «коробками даних» (Data Box). Він забезпечує спільний доступ через спільну пам'ять (Shared Memory) до графічних патернів, зображень покажчиків курсора, піктограм, описів меню, панелей, шрифтових таблиць та елементів UI.

3.6.1.2 Типи даних та номери даних

Кожен елемент ресурсу ідентифікується парою: Тип даних (Data Type ID) та Номер даних (Data Number).

3.6.1.3 Принцип роботи Менеджера даних

При пошуку ресурсу перевірка виконується у зворотному порядку відкриття файлів Data Box: останній відкритий локальний Data Box перевіряється першим, а Системний Data Box — завжди останнім. Це дозволяє додатку легко перевизначити будь-який системний ресурс (наприклад, курсор або стиль меню), зареєструвавши свій ресурс з тим самим номером.

Ресурси завантажуються у спільну пам'ять ядра. Програмам заборонено модифікувати отримані вказівники безпосередньо — для змін необхідно копіювати дані у локальний буфер.

3.6.1.4 Структура коробки даних (Data Box)

Data Box складається з індексної секції (Index Section) та секції тіла даних (Data Section).

Заголовок коробки даних (DBOX_HDR)
typedef struct {
    H   ntyp;       /* Кількість типів даних у коробці */
    H   ixsize;     /* Повний розмір індексної секції у байтах (<= 32 КБ) */
    H   resv[6];    /* Зарезервовано */
} DBOX_HDR;
Індекс типу даних (DTYP_INX)
typedef struct {
    W   npos;           /* Зсув до індексу наступного типу даних */
    W   typ;            /* ID типу даних */
    UW  attr;           /* Атрибути (біт 0: L=1 — preload у пам'ять) */
    W   nd;             /* Кількість елементів цього типу */
    DNUM_INX dix[1];    /* Масив індексів елементів (nd штук) */
} DTYP_INX;
Індекс елемента даних (DNUM_INX)
typedef struct {
    W   id;         /* Номер даних (dnum) */
    W   pos;        /* Зсув до тіла даних у файлі */
    W   size;       /* Розмір тіла даних у байтах */
    W   info[2];    /* Внутрішнє службове поле */
} DNUM_INX;

3.6.2 Структури та константи

□ Константи типів даних (Data Type ID)

#define PTR_DATA    1   /* Зображення курсора/покажчика */
#define PICT_DATA   2   /* Піктограма */
#define PAT_DATA    3   /* Графічний патерн */
#define BMAP_DATA   4   /* Бітова карта (Bitmap) */
#define FIG_DATA    5   /* Сегмент векторної фігури TAD */
#define TEXT_DATA   6   /* Текстовий рядок */
#define PARTS_DATA  7   /* Визначення елемента управління (Parts) */
#define MENU_DATA   8   /* Стандартне меню */
#define GMENU_DATA  9   /* Узагальнене меню */
#define PANEL_DATA  10  /* Панель діалогу */
#define USER_DATA   64  /* Користувацькі ресурси (>= 64) */

3.6.3 Системні виклики Менеджера даних

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

dopn_dat
Open Data Box
Відкриття файлу коробки даних

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

W   dopn_dat(TC *path, W opt)

【Параметри】

TC *path    Шлях до файлу коробки даних (NULL = системний Data Box)
W   opt     Опції відкриття (зарезервовано, 0)

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

>= 0    ID відкритого файлу даних (fid)
 < 0    Помилка (Код помилки)

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

Відкриває файл Data Box за шляхом path, зчитує індексну секцію в пам'ять і реєструє ресурси для пошуку. При path = NULL відкриває системний Data Box.

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

EX_ADR  : Недопустима адреса path.
EX_NOSPC: Нестача пам'яті для індексної секції.
EX_NOENT: Файл не знайдено.
EX_DFMT : Некоректний формат файлу Data Box.
dcls_dat
Close Data Box
Закриття коробки даних

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

ERR dcls_dat(W fid)

【Параметри】

W   fid     ID відкритого файлу даних (0 = закрити всі, включно з системним)

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

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

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

Закриває файл Data Box fid та звільняє виділену під нього пам'ять. При завершенні процесу рекомендується викликати dcls_dat(0).

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

EX_FD   : Некоректний fid.
dget_dtp
Get Data Pointer
Отримання вказівника на ресурс у спільній пам'яті

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

ERR dget_dtp(W type, W dnum, void **datap)

【Параметри】

W       type    Тип даних (PTR_DATA, PICT_DATA, PANEL_DATA тощо)
W       dnum    Номер ресурсу
void  **datap   Буфер для збереження адреси ресурсу

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

= 0     Успішне виконання (*datap містить адресу)
< 0     Помилка (Код помилки)

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

Шукає ресурс за типом type і номером dnum. Завантажує його в спільну пам'ять (якщо ще не завантажено) та повертає вказівник у *datap.

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

EX_ADR  : Недопустима адреса datap.
EX_DNUM : Ресурс (type, dnum) не знайдено.
EX_DFMT : Некоректний формат даних.
EX_NOSPC: Нестача пам'яті.
dget_siz
Get Data Size
Отримання розміру ресурсу за адресою

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

W   dget_siz(B *addr)

【Параметри】

B  *addr    Адреса ресурсу в спільній пам'яті (отримана через dget_dtp)

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

>= 0    Розмір ресурсу у байтах
 < 0    Помилка (Код помилки)

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

Повертає розмір у байтах ресурсу, розташованого за адресою addr.

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

EX_AKEY : Некоректна адреса ресурсу.
dget_num
Get Data Number and Type
Отримання номера та типу даних за адресою

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

W   dget_num(B *addr, W *type)

【Параметри】

B  *addr    Адреса ресурсу
W  *type    Буфер для збереження типу даних (NULL = не читати)

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

>= 0    Номер даних ресурсу (dnum)
 < 0    Помилка (Код помилки)

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

Повертає номер dnum і записує тип type ресурсу за адресою addr.

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

EX_ADR  : Недопустима адреса type.
EX_AKEY : Некоректна адреса ресурсу.
ddef_dat
Redefine System Data Item
Тимчасове перевизначення системного ресурсу

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

ERR ddef_dat(W type, W dnum, void *ptr, W size)

【Параметри】

W      type     Тип даних
W      dnum     Номер даних
void  *ptr      Буфер з новими даними
W      size     Розмір буфера у байтах

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

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

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

Тимчасово перевизначає системний ресурс (type, dnum) даними ptr. Зміни діють до вивантаження або перезапуску.

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

EX_ADR  : Недопустима адреса ptr.
EX_DNUM : Ресурс не знайдено.
EX_DFMT : Некоректний формат даних.
EX_PAR  : Неприпустимий розмір.
ddef_ldt
Define Local Data Item
Реєстрація локального динамічного ресурсу

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

ERR ddef_ldt(W type, W dnum, void *ptr, W size)

【Параметри】

W      type     Тип даних
W      dnum     Номер даних
void  *ptr      Буфер з даними
W      size     Розмір даних у байтах

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

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

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

Реєструє локальний ресурс для поточного процесу. Цей ресурс має найвищий пріоритет під час пошуку в поточному процесі.

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

EX_ADR  : Недопустима адреса ptr.
EX_DFMT : Некоректний формат даних.
EX_PAR  : Неприпустимий розмір size.

Повернутися до змісту розділу Графічної оболонки
Попередня сторінка: 3.5 Менеджер трею (Повернутися)
Наступна сторінка: 3.7 Менеджер шрифтів (Перейти)