іїв), то виклику обробника окремого елемента не відбувається, відбувається виклик спеціального системного обробника.
Блоки вибору активного елемента інтерфейсу і блок розбору вихідного тексту користувальницького сценарію активуються тільки у випадку спеціального системного події. Активний елемент вибирається зі списку, сформованого в блоці формування списку активних елементів інтерфейсу.
Якщо подія не є системним, то воно передається на обробку поточним активному елементу в блок обробки події активним елементом інтерфейсу. Даний блок може виконувати різні стандартизовані операції, саме цей блок забезпечує розширюваність програми.
Після виконання обробника події, за умови зміни стану, відбувається виведення представлення нового стану програми в консоль. Оскільки елементи припускають візуальне присутність, то необхідно розташувати ці елементи в консолі за допомогою блоку розрахунку розміру елемента інтерфейсу і уявлення, сформоване в блоці формування зовнішнього вигляду елемента вивести в розрахунковий місце в консолі.
Для реалізації підтримки інтерпретатора користувальницьких сценаріїв необхідні, крім блоку розбору користувальницьких сценаріїв, ще блоки формування списку змінних і блок виклику вбудовані функцій і об'єктів.
Визначившись із загальною структурою проекту можна приступити до розробки програмних інтерфейсів.
3.2 Розробка програмних інтерфейсів
На даному етапі необхідно виділити і розробити загальну базову частину для структурних блоків. Оскільки на платформі UEFI BIOS немає бібліотек, то базовою частиною виступатимуть засоби роботи з масивами. Можливість зручного управління даними є важливим фактором, що впливає на швидкість розробки.
У даному пункті описана розробка програмних інтерфейсів для роботи з даними.
Платформа UEFI BIOS має реалізацію власного менеджера пам'яті. Пам'ять можна виділяти як сторінками віртуальної пам'яті, зручно для реалізації власного менеджера пам'яті, так і для виділення буфера заданого розміру. Передумов для написання власного менеджера пам'яті немає, так як додатки даної групи не вимогливі до них, а існуючий задовольняє всім вимоги програми.
При використанні ООП необхідно об'єднати в одному класі дані і способи їх обробки. В якості даних виступатимуть покажчик на дані, кількість елементів масиву і розмір одного елемента масиву. У базовому класі буде в якості елемента виступати байт. Серед способів обробки даних базового класу доцільно виділити основні:
довільний побайтову доступ до даних і доступ до вказівником на дані;
копіювання даних в об'єкт;
переміщення даних всередині об'єкта;
часткове і повне порівняння даних об'єкта з іншим об'єктному або його частиною;
знаходження індексу першого, останнього, наступного і попереднього часткового та повного входження даних зовнішнього об'єкта в дані поточного об'єкта;
знаходження кількість часткового та повного входження даних зовнішнього об'єкта в дані поточного об'єкта;
Наступним в ієрархії буде клас, який розширює можливості базового класу в сторону динамічної зміни розміру. Важливими даними цього об'єкта буде розмір кроку виділення пам'яті. Даний параметр описує, скільки елементів буде додатково резервуватися в пам'яті при кожному новому виділенні. Даний клас додає до функціональності базового кілька нових методів:
створення нового масиву замість старого із заданими параметрами;
розширення масиву на задану кількість елементів;
додавання і видалення заданої кількості елементів в довільне місце масиву;
включення або виключення частково або повністю в об'єкт даних із зовнішнього об'єкта або в зовнішній об'єкт в задане місце.
Для зручності програміста необхідно наслідувати від класів роботи з байтовими масивами шаблони реалізують функціонал базового класу для довільного типу елемента масиву.
На малюнку 3.2 зображена схема успадкування класів роботи з даними.
Малюнок 3.6 - Схема успадкування класів роботи з даними
Базовим класом є FixByteArray, його успадковують всі інші класи. Далі більш докладно розглядаються окремі класи.
На малюнку 3.3 представлений клас FixByteArray.
Малюнок 3.7 - Клас FixByteArray
Основними даними класу є: розмір одного елемента масиву (size_item), розмір всього масиву (size_byte) і покажчик на масив (pointer). Так як дані прихов...