# Інструменти

## Огляд

У &okteta; передбачено декілька інструментів. Деякі з них відповідають за аналіз та обробку масивів даних, деякі мають загальне призначення. Задіяти або вимкнути ці інструменти можна за допомогою меню Інструменти. Кожен з інструментів має власну невеличку панель, яку буде розташовано на одній з бічних панелей або у окремому віконці. Ви можете швартувати, від’єднувати, перевпорядковувати та розташовувати стосами панельки інструментів за допомогою миші: наведіть вказівник миші на смужку заголовка панелі інструменту, натисніть ліву кнопку миші, пересуньте панель у бажане місце і відпустіть кнопку, щоб завершити компонування, або клавішу &Esc;, щоб скасувати пересування панелі.

### Інструменти аналізу та обробки

Таблиця байтів

  У цій таблиці показано список можливих значень байтів у вигляді символів і числових значень.

  Обране значення можна вставляти за поточним розташуванням курсора визначену кількість разів. Дію з вставлення можна виконати за допомогою кнопки Вставити або наведення вказівника на відповідний рядок таблиці з наступним подвійним клацанням.

Двійковий фільтр

  Фільтри виконує двійкові дії над вибраними байтами. Після вибору дії (AND, OR, ROTATE..) параметри, якщо такі є, можна встановити у полі, розташованому нижче. Виконати фільтрування можна за допомогою кнопки Фільтрувати.

Рядки

  За допомогою цього інструмента можна шукати рядки у вибраних байтах. Після того, як ви оберете мінімальну довжину рядка, рядки можна знайти за допомогою кнопки Видобути. Список рядків можна звузити введенням шаблону фільтрування.

Статистика

  За допомогою цього інструменту можна зібрати деяку статистичну інформацію щодо вибраних байтів. Серед цих даних будуть дані щодо частоти входження кожного з байтових значень до виділеного фрагмента. Наказати програмі виконати збирання інформації можна натисканням кнопки Зібрати.

Контрольна сума

  За допомогою цього інструменту можна обчислювати різноманітні контрольні суми та хеш-суми для позначених байтів. Після вибору алгоритму та встановлення значення параметра, якщо такий потрібен, відповідну суму можна обчислити натисканням кнопки Обчислити.

Таблиця розкодування

  У цій таблиці показано значення байта або байтів, починаючи від поточного розташування курсора, як їх відповідники серед простих типів даних, зокрема цілих чисел (Integer) або чисел з плаваючою комою (Float), але також у форматі UTF-8. Якщо ви наведете вказівник миші на рядок у таблиці і двічі клацнете лівою кнопкою миші, програма відкриє вікно редактора, у якому ви зможете переглянути і змінити значення.

Структури

  За допомогою цього інструменту можна вивчати та редагувати масиви байтів на основі визначених користувачем структур. Докладніший опис наведено у окремому розділі.

### Загальні інструменти

Файлова система

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

Документи

  На панелі цього інструменту буде показано пункти всіх поточних створених або завантажених файлів. Програма позначить відповідним чином пункти файлів, перегляд яких є активним, файли з незбереженими змінами та файли, які було змінено на носії даних іншою програмою.

Закладки

  Панеллю цього інструменту можна скористатися для керування закладками, якщо ви не бажаєте користуватися меню Закладки.

  У поточній версії програми закладки є лише тимчасовими, програма не зберігає їх розташування під час закриття масиву байтів або завершення роботи самої програми.

Інформація про файл

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

## Інструмент структур

### Загальне

За допомогою інструменту «Структури» можна аналізувати та редагувати масиви байтів на основі створених користувачем визначень структур, які можна побудувати з масивів, об’єднань, елементарних типів та переліків.

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

Структури визначаються за допомогою файлів визначення структур &okteta; (&XML;-файлах, з суфіксом назви `.osd`). Крім того, потрібен файл `.desktop`, що містить метадані щодо файла опису структури, зокрема відомості щодо автора, домашньої сторінки та умов ліцензування.

У поточній версії програми ще немає вбудованої підтримки створення, редагування або встановлення визначень структур, отже все це слід робити вручну у спосіб, описаний у наступних розділах.

### Встановлення визначень структур

Інструмент «Структури» шукає описи структур у підкаталозі `share/apps/okteta/structures/` каталогу даних програм користувача (визначити адресу цього каталогу можна за допомогою команди ``kde4-config` `--localprefix``). Якщо ви ще не встановлювали жодного визначення структури, можливо, вам доведеться створити відповідний підкаталог.

У цьому підкаталозі має бути власний підкаталог для кожного з визначень структури, у якому мають зберігатися обидва файла визначення: файл `.desktop` і файл `.osd`.

Наприклад, якщо каталогом даних програм є `.kde`, а визначення структури має назву ExampleStructure, має бути каталог `.kde/share/apps/okteta/structures/ExampleStructure`, що міститиме файли `ExampleStructure.desktop` і `ExampleStructure.osd`.

Якщо ви встановили нове визначення структури створенням такого каталогу або редагуванням файлів у ньому, вам слід перезапустити &okteta;, а потім відкрити діалогове вікно параметрів інструменту «Структури». Там слід перейти на вкладку Керування записами структур і переконатися, що відповідний пункт визначення структури позначено. Якщо його не позначено, позначте пункт і натисніть кнопку Застосувати зміни, перемкніться на вкладку Структури і переконайтеся, що бажаний пункт є у списку, розташованому у правій частині вікна.

### Поширення визначень структур

Якщо потрібна вам структура є досить типовою, ви можете не створювати визначення власноруч, а скористатися готовим визначенням з якогось зі сховищ визначень, зокрема kde-files.org.

Крім того, ви і самі можете поділитися з іншими користувачами вашими визначеннями. Щоб зробити це, створіть файл архіву (наприклад, стиснутий zip архів tar, `.tgz`), який міститиме лише підкаталог з файлом `.osd` і файлом `.desktop`. Якщо скористатися нашим прикладом з попереднього розділу, ваш підкаталог має називатися `ExampleStructure`. Якщо ви користуватиметеся саме цим форматом, у майбутніх версіях інструменту «Структури» ви зможете автоматично звантажувати і встановлювати створені вами раніше визначення.

### Створення власних визначень структур

#### Перше визначення структури

Для початку ми створимо визначення дуже простої структури, що міститиме лише прості типи даних (один символ і одне 32-бітове ціле число (int)). Цю структуру можна записати мовою C/C++ так:

              struct simple {
                char aChar;
                int anInt;
              };

Спершу слід створити файл `.osd`, який ми назвемо `simplestruct.osd`:

              <?xml version="1.0" encoding="UTF-8"?>
              <data>
                <struct name="simple">
                  <primitive name="aChar" type="Char"/>
                  <primitive name="anInt" type="Int32"/>
                </struct>
              </data>

Цей файл дуже подібний до визначення структури у C/C++. Атрибутом типу може бути будь-яке з таких значень:

- Char
- Int8
- UInt8
- Int16
- UInt16
- Int32
- UInt32
- Int64
- UInt64
- Float
- Double
- Bool8
- Bool16
- Bool32
- Bool64

Наступним кроком буде написання файла метаданих `.desktop`, який по суті є просто набором пар «ключ-значення». Файл слід назвати `simplestruct.desktop`. У нашому прикладі вміст файла буде таким:

              [Desktop Entry]
              Encoding=UTF-8
              Icon=arrow-up
              Type=Service
              ServiceTypes=KPluginInfo

              Name=Simple test structure
              Comment=A very simple test structure containing only two items

              X-KDE-PluginInfo-Author=Alex Richardson
              X-KDE-PluginInfo-Email=alex.richardson@gmx.de
              X-KDE-PluginInfo-Name=simplestruct
              X-KDE-PluginInfo-Version=1.0
              X-KDE-PluginInfo-Website=http://www.plugin.org/
              X-KDE-PluginInfo-Category=structure
              X-KDE-PluginInfo-License=LGPL
              X-KDE-PluginInfo-EnabledByDefault=false

Призначення полів має бути зрозумілим з їх назв, окрім поля `X-KDE-PluginInfo-Name`. У цьому полі має бути назва файла `.osd` (без суфікса `.osd`).

Тепер створимо підкаталог `simplestruct`, як це вже було описано, скопіюємо до цього підкаталогу наші два файла і перезапустимо &okteta;.

#### Складніші структури

Тепер ми створимо визначення складнішої структури, яке назвемо "complex" і збережемо у файлі з назвою `complex.osd`. Ця структура міститиме два масиви (один фіксованої довжини і один, у якому довжина визначатиметься під час роботи програми), а також вкладену структуру і об’єднання (union).

              <?xml version="1.0" encoding="UTF-8"?>
              <data>
                <struct name="complex">
                  <primitive name="size" type="UInt8" />
                  <union name="aUnion">
                    <array name="fourBytes" length="4">
                      <primitive type="Int8" />
                    </array>
                  </union>
                  <struct name="nested">
                    <array name="string" length="size"> <!-- references the field size above -->
                      <primitive type="Char" />
                    </array>
                  </struct>
                </struct>
              </data>

Така структура формально визначається у C/C++ так:

    struct complex {
                uint8_t size;
                union aUnion {
                  int8_t fourBytes[4];
                };
                struct nested {
                  char string[size] //не відповідає стандартам C++, посилається на значення розмірності uint8
                };
              };

Очевидно, поля посилань на масиви змінної (динамічної) довжини слід вказувати до самого масиву.

Далі, ми створимо файл `complex.desktop`, як і у попередньому прикладі (переконайтеся, що значення `X-KDE-PluginInfo-Name` змінено відповідним чином), та повторимо дії зі встановлення визначення структури.

#### Докладніші відомості

Декілька прикладів визначень структур можна знайти тут. Серед цих прикладів є файл заголовка для файлів PNG. Схема &XML;, яка описує структуру файла `.osd`, зберігається тут. Якщо вам потрібні якісь додаткові відомості, зверніться до автора за адресою &Alex.Richardson.email;