// 2025-2026 Богданович Давид Когут Прихожденко (кдб.дійсність.укр)

/* Мавка */

простір мавка {
  структура Місцезнаходження;
  структура Притриманий;
  структура Притримувач;
  структура КористувацькіДані;
  структура Предмет;
  структура ПредметПослідовності;
  структура Дійсність;
  структура ПредметДаних;
  структура ПредметПроміжкаЧисел;
  структура ПредметДії;
  структура ПредметКоду;
  структура ПредметМодуля;
  структура ПредметПараметра;
  структура ПредметОзнаки;
  структура ПредметПереборуПроміжкаЧисел;
  структура ПредметПереборуСписку;
  структура ПредметСловника;
  структура ПредметСписку;
  структура ПредметКласу;
  структура ПредметТексту;
  структура СкладенийПредмет;
  структура Машина;

  стала ЗНедійсне = 0;
  стала ЗДійсне = 1;
  стала ЗЧисло = 2;
  стала ЗПредмет = 3;

  структура Значення {
    дані: *Предмет | р64;
    вид: п8;
  }

  стала НЕДІЙСНЕ = Значення { дані = пусто як *Предмет, вид = ЗНедійсне };
  стала ДІЙСНЕ = Значення { дані = пусто як *Предмет, вид = ЗДійсне };

  внутрішня дія ЧИСЛО(значення: р64) -> Значення {
    вернути Значення { дані = значення, вид = ЗЧисло };
  }

  внутрішня дія ПРЕДМЕТ(предмет: адреса) -> Значення {
    вернути Значення { дані = предмет як *Предмет, вид = ЗПредмет };
  }

  внутрішня дія ЛОГЛОГ(значення: логічне) -> Значення {
    якщо значення {
      вернути ДІЙСНЕ;
    } інакше {
      вернути НЕДІЙСНЕ;
    }
  }

  синонім ЗначенняАбоСтанПадіння = Значення;
  синонім СтанПадіння = ніщо;

  стала ВПокластиНедійсне = 0; // []() -> [недійсне]
  стала ВПокластиДійсне = 1; // []() -> [дійсне]
  стала ВПокластиПредмет = 3; // []() -> [Предмет]
  стала ВПокластиЯ = 4; // []() -> [значення_я]
  стала ВПокластиКонстанту = 5; // [](позиція_константи) -> [константа]
  стала ВСтворитиПослідовність = 6; // [...](кількість_елементів) -> [значення_послідовності]
  стала ВСтворитиДію = 7; // [назва, ..., тип_результату, код](кількість_параметрів) -> [предмет_дії]
  стала ВСтворитиКлас = 8; // [назва, ...](кількість_параметрів) -> [предмет_класу]
  стала ВСтворитиМодуль = 9; // [назва, код]() -> [предмет_модуля]
  стала ВСтворитиСписок = 10; // [...](кількість_елементів) -> [предмет_списку]
  стала ВСтворитиСловник = 11; // [...](кількість_елементів) -> [предмет_словника]
  стала ВСтворитиПроміжок = 12; // [від, включно, до]() -> [предмет_проміжка]
  стала ВСтворитиПараметр = 13; // [назва, тип, значення]() -> [параметр]
  стала ВСтворитиОзнаку = 68; // [назва, тип, значення]() -> [ознака]
  стала ВСтворитиТип = 14; // [...](кількість_структур) -> [тип]
  стала ВЗаписатиМетод = 15; // [предмет_класу, назва, предмет_дії]() -> [предмет_дії]
  стала ВВизначити = 16; // [назва, значення]() -> []
  стала ВЗвернутись = 17; // [назва]() -> [предмет]
  стала ВЗдійснити = 18; // [предмет_дії, ..., ...](кількість_аргументів, кількість_іменованих_аргументів) -> [результат]
  стала ВОтриматиВластивість = 19; // [предмет, назва]() -> [предмет_властивості]
  стала ВЗмінитиВластивість = 20; // [предмет, назва, значення]() -> []
  стала ВЗдійснитиВластивість = 21; // [предмет, назва, ..., ...](кількість_аргументів, кількість_іменованих_аргументів) -> [результат]
  стала ВОтриматиЕлемент = 22; // [предмет, ключ]() -> [елемент]
  стала ВЗмінитиЕлемент = 23; // [предмет, ключ, значення]() -> []
  стала ВОтриматиПеребір = 24; // [предмет]() -> [предмет_перебору]
  стала ВДодати = 25; // [а, б]() -> [результат]
  стала ВВідняти = 26; // [а, б]() -> [результат]
  стала ВПомножити = 27; // [а, б]() -> [результат]
  стала ВПоділити = 28; // [а, б]() -> [результат]
  стала ВОтриматиОстачуДілення = 29; // [а, б]() -> [результат]
  стала ВОтриматиНеповнуЧасткуДілення = 30; // [а, б]() -> [результат]
  стала ВПіднестиДоСтепеня = 31; // [а, б]() -> [результат]
  стала ВЗсунутиВліво = 32; // [а, б]() -> [результат]
  стала ВЗсунутиВправо = 33; // [а, б]() -> [результат]
  стала ВЗсунутиВправо2 = 34; // [а, б]() -> [результат]
  стала ВДвійковеІ = 35; // [а, б]() -> [результат]
  стала ВДвійковеАБО = 36; // [а, б]() -> [результат]
  стала ВДвійковеВиключнеАБО = 37; // [а, б]() -> [результат]
  стала ВМенше = 38; // [а, б]() -> [результат]
  стала ВБільше = 39; // [а, б]() -> [результат]
  стала ВНеБільше = 40; // [а, б]() -> [результат]
  стала ВНеМенше = 41; // [а, б]() -> [результат]
  стала ВРівно = 42; // [а, б]() -> [результат]
  стала ВНеРівно = 43; // [а, б]() -> [результат]
  стала ВЄ = 46; // [а, б]() -> [результат]
  стала ВНеЄ = 47; // [а, б]() -> [результат]
  стала ВДвійковеНЕ = 48; // [а]() -> [результат]
  стала ВВідʼємне = 49; // [а]() -> [результат]
  стала ВЗаперечити = 51; // [а]() -> [результат]
  стала ВПочатиСпробу = 52; // [назва](позиція_вказівки_зловити) -> []
  стала ВВпасти = 53; // [предмет_помилки]() -> []
  стала ВЗакінчитиСпробу = 54; // [](позиція_вказівки_виходу) -> []
  стала ВВзяти = 55; // [назва, ...](кількість_назв) -> [предмет_модуля]
  стала ВДати = 56; // [предмет, назва]() -> []
  стала ВПеребратиДалі = 57; // [предмет_перебору]() -> [предмет_перебору, результат_виконання]
  стала ВЗбитиТекст = 58; // [...](кількість_предметів) -> [збитий_текст]
  стала ВСтрибнути = 59; // [](позиція_вказівки) -> []
  стала ВСтрибнутиЯкщоНедійсне = 60; // [предмет](позиція_вказівки) -> []
  стала ВЗабрати = 61; // [предмет]() -> []
  стала ВВернути = 62; // [предмет]() -> []
  стала ВСтрибнутиЯкщоДійсне = 63; // [предмет](позиція_вказівки) -> [предмет]
  стала ВДублювати = 64; // [предмет]() -> [предмет, предмет]
  стала ВВизначитиНавпаки = 65; // [значення, назва]() -> []
  стала ВВизначитиШвидко = 66; // [значення](позиція_в_дійсності) -> []
  стала ВЗвернутисьШвидко = 67; // [](позиція_в_дійсності) -> [предмет]

  структура Шлях {
    розмір: природне;
    дані: *п8;
  }

  структура Місцезнаходження {
    шлях_або_код: *ПредметДаних | *ПредметКоду;
    рядок_або_позиція_вказівки: природне;
  }

  структура Притриманий {
    попередній: *Притриманий;
    наступний: *Притриманий;
    предмет: *Предмет;
  }

  структура Притримувач {
    наступний: *Притримувач;
    попередній: *Притримувач;
    перший: *Притриманий;
    останній: *Притриманий;
  }

  синонім ДіяПередЗнищеннямКористувацькихДаних = (М: *Машина, користувацькі_дані: *КористувацькіДані) -> ніщо;

  структура КористувацькіДані {
    значення: адреса;
    дія_перед_знищенням: ДіяПередЗнищеннямКористувацькихДаних;
  }

  структура НакопичувачТексту {
    розмір: природне;
    дані: *п8;
    вмісткість: природне;
  }

  структура Предмет {
    наступний: *Предмет;
    позначено: логічне;
    клас: *ПредметКласу;
    користувацькі_дані: *КористувацькіДані;
  }

  структура ПредметПослідовності {
    наступний: *Предмет;
    позначено: логічне;
    клас: *ПредметКласу;
    користувацькі_дані: *КористувацькіДані;
    розмір: природне;
    елементи: *Значення;
  }

  структура Призначене;

  структура Призначене {
    наступний: *Призначене;
    назва: *ПредметТексту;
    значення: Значення;
  }

  структура Призначення {
    розмір: природне;
    дані: **Призначене;
    вмісткість: природне;
  }

  структура Дійсність {
    попередня: *Дійсність;
    наступна: *Дійсність;
    позначено: логічне;
    кількість_запозичень: природне;
    зовні: *Дійсність;
    призначення: Призначення;
  }

  структура Метод {
    назва: *ПредметТексту;
    значення: *ПредметДії;
  }

  структура Методи {
    розмір: природне;
    дані: *Метод;
  }

  стала ВидЗадіяних1 = 1; // з накопичувача діяльності
  стала ВидЗадіяних2 = 2; // виділені користувачем

  структура Задіяні {
    вид: п8;
    розмір: п32;
    дані: *Значення;
    кількість_імен: п32;
  }

  структура Діяльність;

  синонім РіднаДія = (
    М: *Машина,
    діяльність: *Діяльність
  ) -> ЗначенняАбоСтанПадіння;

  структура ЕлементСловника {
    ключ: Значення;
    значення: Значення;
  }

  структура ПредметКласу {
    наступний: *Предмет;
    позначено: логічне;
    клас: *ПредметКласу;
    користувацькі_дані: *КористувацькіДані;
    вбудований: логічне;
    заборонити_наслідування: логічне;
    назва: *ПредметТексту;
    ознаки: *ПредметПослідовності;
    методи: Методи;
    властивості: Призначення;
  }

  структура ПредметДії {
    наступний: *Предмет;
    позначено: логічне;
    клас: *ПредметКласу;
    користувацькі_дані: *КористувацькіДані;
    дійсність_створення: *Дійсність;
    рідна: логічне;
    назва: *ПредметТексту;
    параметри: *ПредметПослідовності;
    тип_результату: *Предмет;
    код: *ПредметКоду | РіднаДія;
    метод_класу: *ПредметКласу;
    шлях_до_теки_модулів: *ПредметДаних;
  }

  структура ПредметСписку {
    наступний: *Предмет;
    позначено: логічне;
    клас: *ПредметКласу;
    користувацькі_дані: *КористувацькіДані;
    розмір: природне;
    елементи: *Значення;
  }

  структура ПредметСловника {
    наступний: *Предмет;
    позначено: логічне;
    клас: *ПредметКласу;
    користувацькі_дані: *КористувацькіДані;
    розмір: природне;
    елементи: *ЕлементСловника;
  }

  структура ПредметМодуля {
    наступний: *Предмет;
    позначено: логічне;
    клас: *ПредметКласу;
    користувацькі_дані: *КористувацькіДані;
    готовий: логічне;
    назва: *ПредметТексту;
    властивості: Призначення;
  }

  структура ПредметПараметра {
    наступний: *Предмет;
    позначено: логічне;
    клас: *ПредметКласу;
    користувацькі_дані: *КористувацькіДані;
    назва: *ПредметТексту;
    тип: адреса;
    значення: Значення;
  }

  структура ПредметОзнаки {
    наступний: *Предмет;
    позначено: логічне;
    клас: *ПредметКласу;
    користувацькі_дані: *КористувацькіДані;
    назва: *ПредметТексту;
    тип: адреса;
    значення: Значення;
  }

  структура ПредметТексту {
    наступний: *Предмет;
    позначено: логічне;
    клас: *ПредметКласу;
    користувацькі_дані: *КористувацькіДані;
    значення: кд;
  }

  структура МісцезнаходженняВказівки {
    початок: п32;
    кінець: п32;
    рядок: п32;
  }

  структура МісцезнаходженняВказівок {
    розмір: природне;
    дані: *МісцезнаходженняВказівки;
  }

  структура ПредметКоду {
    наступний: *Предмет;
    позначено: логічне;
    клас: *ПредметКласу;
    користувацькі_дані: *КористувацькіДані;
    константи: *ПредметПослідовності;
    вказівки: *ПредметДаних;
    шлях: *ПредметДаних;
    місцезнаходження_вказівок: МісцезнаходженняВказівок;
  }

  структура ПредметДаних {
    наступний: *Предмет;
    позначено: логічне;
    клас: *ПредметКласу;
    користувацькі_дані: *КористувацькіДані;
    розмір: природне;
    дані: *п8;
  }

  структура ПредметПроміжкаЧисел {
    наступний: *Предмет;
    позначено: логічне;
    клас: *ПредметКласу;
    користувацькі_дані: *КористувацькіДані;
    від: р64;
    до: р64;
    включно: логічне;
  }

  структура ПредметПереборуДаних {
    наступний: *Предмет;
    позначено: логічне;
    клас: *ПредметКласу;
    користувацькі_дані: *КористувацькіДані;
    предмет_даних: *ПредметДаних;
    почато: логічне;
    позиція: природне;
    поточне_значення: р64;
  }

  структура ПредметПереборуПроміжкаЧисел {
    наступний: *Предмет;
    позначено: логічне;
    клас: *ПредметКласу;
    користувацькі_дані: *КористувацькіДані;
    предмет_проміжка: *ПредметПроміжкаЧисел;
    почато: логічне;
    поточне_значення: р64;
  }

  структура ПредметПереборуПослідовності {
    наступний: *Предмет;
    позначено: логічне;
    клас: *ПредметКласу;
    користувацькі_дані: *КористувацькіДані;
    предмет_послідовності: *ПредметПослідовності;
    почато: логічне;
    позиція: природне;
    поточне_значення: Значення;
  }

  структура ПредметПереборуСловника {
    наступний: *Предмет;
    позначено: логічне;
    клас: *ПредметКласу;
    користувацькі_дані: *КористувацькіДані;
    предмет_словника: *ПредметСловника;
    почато: логічне;
    позиція: природне;
    поточне_значення: Значення;
  }

  структура ПредметПереборуСписку {
    наступний: *Предмет;
    позначено: логічне;
    клас: *ПредметКласу;
    користувацькі_дані: *КористувацькіДані;
    предмет_списку: *ПредметСписку;
    почато: логічне;
    позиція: природне;
    поточне_значення: Значення;
  }

  структура ПредметПереборуТексту {
    наступний: *Предмет;
    позначено: логічне;
    клас: *ПредметКласу;
    користувацькі_дані: *КористувацькіДані;
    предмет_тексту: *ПредметТексту;
    почато: логічне;
    позиція: природне;
    поточне_значення: р64;
  }

  структура СкладенийПредмет {
    наступний: *Предмет;
    позначено: логічне;
    клас: *ПредметКласу;
    користувацькі_дані: *КористувацькіДані;
    властивості: Призначення;
  }

  стала КолірВиводуСтандартний = 0;
  стала КолірВиводуЧервоний = 1;
  стала КолірВиводуЗелений = 2;
  стала КолірВиводуСиній = 3;
  стала КолірВиводуЖовтий = 4;

  структура Налаштування {
    виділити_сиру_памʼять: (М: *Машина, розмір: природне) -> адреса;
    перевиділити_сиру_памʼять: (М: *Машина, значення: адреса, новий_розмір: природне) -> адреса;
    звільнити_сиру_памʼять: (М: *Машина, значення: адреса) -> ніщо;
    запанікувати: (М: *Машина, повідомлення: кд) -> ніщо;
    вивести_кд: (М: *Машина, колір: природне, значення: кд) -> ніщо;
    вивести_шлях: (М: *Машина, колір: природне, розмір: природне, дані: *п8) -> ніщо;
    отримати_теку_файлу: (М: *Машина, шлях_до_файлу: *ПредметДаних, глибина: природне) -> *ПредметДаних;
    прочитати_файл: (М: *Машина, шлях_до_файлу: *ПредметДаних) -> *ПредметДаних;
    перевірити_чи_шлях_починається_на: (М: *Машина, шлях: *ПредметДаних, початок: *ПредметДаних) -> логічне;
    отримати_шлях_до_паку_з_шляху_теки_модулів: (М: *Машина, шлях_до_теки_модулів: *ПредметДаних, шлях_до_теки_паків: *ПредметДаних, вихід: **ПредметДаних) -> логічне;
    збити_шлях_до_модуля: (М: *Машина, розмір: природне, елементи: **ПредметДаних, вихід: **ПредметДаних) -> логічне;
    взяти_біб: (М: *Машина, довжина_шляху: природне, шлях: **ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  }

  структура НакопичувачЗначень {
    розмір: природне;
    дані: *Значення;
    вмісткість: природне;
  }

  структура Спроба {
    назва_зловити: *ПредметТексту;
    позиція_вказівки_зловити: природне;
    розмір_історії_здійснення: природне;
    розмір_накопичувача_значень: природне;
  }

  структура Спроби {
    розмір: природне;
    дані: *Спроба;
  }

  структура Діяльність {
    дійсність: *Дійсність;
    здійснювач: Значення;
    предмет_дії: *ПредметДії;
    задіяні: Задіяні;
    місцезнаходження: Місцезнаходження;
    спроби: Спроби;
  }

  структура ІсторіяЗдійснення {
    розмір: природне;
    дані: *Діяльність;
    вмісткість: природне;
  }

  структура МісцезнаходженняІнформаціїПадіння {
    шлях: *ПредметДаних;
    рядок: природне;
  }

  структура ЕлементІсторіїЗдійсненняІнформаціїПадіння {
    місцезнаходження: МісцезнаходженняІнформаціїПадіння;
    назва: *ПредметТексту;
  }

  структура ІнформаціяПадіння {
    значення: Значення;
    місцезнаходження: МісцезнаходженняІнформаціїПадіння;
    розмір_історії: природне;
    історія: *ЕлементІсторіїЗдійсненняІнформаціїПадіння;
  }

  структура КонстантиНазв {
    _значення: *ПредметТексту;
    _недійсне: *ПредметТексту;
    _дійсне: *ПредметТексту;
    _Послідовність: *ПредметТексту;
    _дійсність: *ПредметТексту;
    _Предмет: *ПредметТексту;
    _Структура: *ПредметТексту;
    _Модуль: *ПредметТексту;
    _Параметр: *ПредметТексту;
    _Ознака: *ПредметТексту;
    _Число: *ПредметТексту;
    _Текст: *ПредметТексту;
    _Код: *ПредметТексту;
    _Дія: *ПредметТексту;
    _Список: *ПредметТексту;
    _Словник: *ПредметТексту;
    _Дані: *ПредметТексту;
    _ПроміжокЧисел: *ПредметТексту;
    _ПеребірПроміжкаЧисел: *ПредметТексту;
    _ПеребірСписку: *ПредметТексту;
    _далі: *ПредметТексту;
    _з: *ПредметТексту;
    _довжина: *ПредметТексту;
    _0: *ПредметТексту;
    _1: *ПредметТексту;
    _модуль: *ПредметТексту;
    _пак: *ПредметТексту;
    _біб: *ПредметТексту;
    _читати: *ПредметТексту;
    _перед: *ПредметТексту;
    _розмір: *ПредметТексту;
    _чародія: *ПредметТексту;
    _чародія_число: *ПредметТексту;
    _чародія_текст: *ПредметТексту;
    _чародія_межа: *ПредметТексту;
    _чародія_перебір: *ПредметТексту;
    _чародія_послідовність: *ПредметТексту;
    _дія_перевірки: *ПредметТексту;
    _дія_перетворення: *ПредметТексту;
    _додати: *ПредметТексту;
    _забрати: *ПредметТексту;
    _знайти: *ПредметТексту;
    _знайти_позицію: *ПредметТексту;
    _відібрати: *ПредметТексту;
    _перетворити: *ПредметТексту;
    _обернути: *ПредметТексту;
    _містить: *ПредметТексту;
    _ключ: *ПредметТексту;
    _ключі: *ПредметТексту;
    _список: *ПредметТексту;
    _словник: *ПредметТексту;
    _послідовність: *ПредметТексту;
    _дані: *ПредметТексту;
    _проміжок: *ПредметТексту;
    _ПеребірПослідовності: *ПредметТексту;
    _ПеребірДаних: *ПредметТексту;
    _назва: *ПредметТексту;
    _параметри: *ПредметТексту;
    _ознаки: *ПредметТексту;
    _тип_результату: *ПредметТексту;
    _код: *ПредметТексту;
    _константи: *ПредметТексту;
    _вказівки: *ПредметТексту;
    _шлях: *ПредметТексту;
    _ПеребірСловника: *ПредметТексту;
    _ПеребірТексту: *ПредметТексту;
    _текст: *ПредметТексту;
    _нескінченність: *ПредметТексту;
    _невизначеність: *ПредметТексту;
    _система: *ПредметТексту;
    _прочитати: *ПредметТексту;
    _тип: *ПредметТексту;
    _записати: *ПредметТексту;
    _куди: *ПредметТексту;
    _дописати: *ПредметТексту;
    _видалити: *ПредметТексту;
    _створити_папку: *ПредметТексту;
    _виконати: *ПредметТексту;
    _аргументи: *ПредметТексту;
    _РезультатВиконання: *ПредметТексту;
    _стдвив: *ПредметТексту;
    _стдпом: *ПредметТексту;
    _команда: *ПредметТексту;
    _с: *ПредметТексту;
    _місцезнаходження_вказівок: *ПредметТексту;
    _від: *ПредметТексту;
    _до: *ПредметТексту;
    _включно: *ПредметТексту;
    _дія_значення: *ПредметТексту;
    _позиція: *ПредметТексту;
    _Клас: *ПредметТексту;
    _предок: *ПредметТексту;
    _Перебір: *ПредметТексту;
    _виділити: *ПредметТексту;
    _обнулено: *ПредметТексту;
    _отримати_назву: *ПредметТексту;
    _фс: *ПредметТексту;
    _мат: *ПредметТексту;
    _Е: *ПредметТексту;
    _ПІ: *ПредметТексту;
    _ЛОГ2Е: *ПредметТексту;
    _ЛОГ10Е: *ПредметТексту;
    _ЛОГ2: *ПредметТексту;
    _ЛОГ10: *ПредметТексту;
    _КОРІНЬ2: *ПредметТексту;
    _КОРІНЬ1_2: *ПредметТексту;
    _син: *ПредметТексту;
    _кос: *ПредметТексту;
    _тан: *ПредметТексту;
    _асин: *ПредметТексту;
    _акос: *ПредметТексту;
    _атан: *ПредметТексту;
    _абс: *ПредметТексту;
    _експ: *ПредметТексту;
    _кор2: *ПредметТексту;
    _стеля: *ПредметТексту;
    _підлога: *ПредметТексту;
    _округлити: *ПредметТексту;
  }

  структура ВзятеЗначення {
    шлях: *ПредметДаних;
    значення: Значення;
  }

  структура ВзятіЗначення {
    розмір: природне;
    дані: *ВзятеЗначення;
  }

  структура ЕлементЧергиЗдійснення;

  структура ЕлементЧергиЗдійснення {
    наступний: *ЕлементЧергиЗдійснення;
    значення: Значення;
    задіяні: Задіяні;
  }

  структура ЧергаЗдійснення {
    перший: *ЕлементЧергиЗдійснення;
    останній: *ЕлементЧергиЗдійснення;
  }

  синонім ПочатиРозмовуДіяЧитати = (М: *Машина, перед: кд, історія: логічне, обробник: (значення: кд, кінець_файлу: логічне, помилка: природне, позиція_помилки: природне, аргумент: адреса) -> ніщо, аргумент: адреса) -> логічне;
  синонім ПочатиРозмовуДіяОбробитиПадіння = (М: *Машина, інформація_падіння: ІнформаціяПадіння) -> ніщо;
  синонім ПочатиРозмовуДіяОбробитиЗначення = (М: *Машина, значення: Значення) -> ніщо;

  структура Розмова {
    М: *Машина;
    читати: ПочатиРозмовуДіяЧитати;
    шлях_до_стандартного_вводу: *ПредметДаних;
    обробити_значення: ПочатиРозмовуДіяОбробитиЗначення;
    обробити_падіння: ПочатиРозмовуДіяОбробитиПадіння;
    предмет_модуля: *ПредметМодуля;
    дійсність: *Дійсність;
  }

  структура Машина {
    налаштування: Налаштування;
    шлях_до_теки_модулів: *ПредметДаних;
    шлях_до_теки_паків: *ПредметДаних;
    перша_дійсність: *Дійсність;
    остання_дійсність: *Дійсність;
    перший_предмет: *Предмет;
    останній_предмет: *Предмет;
    кількість_дійсних: природне;
    кількість_дійсних_для_очищення: природне;
    потребує_очищення: логічне;
    клас_Клас: *ПредметКласу;
    клас_Дані: *ПредметКласу;
    клас_ПроміжокЧисел: *ПредметКласу;
    клас_Дія: *ПредметКласу;
    клас_Код: *ПредметКласу;
    клас_Модуль: *ПредметКласу;
    клас_Параметр: *ПредметКласу;
    клас_Ознака: *ПредметКласу;
    клас_ПеребірДаних: *ПредметКласу;
    клас_ПеребірПроміжкаЧисел: *ПредметКласу;
    клас_ПеребірПослідовності: *ПредметКласу;
    клас_ПеребірСловника: *ПредметКласу;
    клас_ПеребірСписку: *ПредметКласу;
    клас_ПеребірТексту: *ПредметКласу;
    клас_Послідовність: *ПредметКласу;
    клас_Словник: *ПредметКласу;
    клас_Список: *ПредметКласу;
    клас_Текст: *ПредметКласу;
    клас_Число: *ПредметКласу;
    пуста_послідовність: *ПредметПослідовності;
    глобальна_дійсність: *Дійсність;
    накопичувач_значень: НакопичувачЗначень;
    історія_здійснення: ІсторіяЗдійснення;
    стан_падіння: логічне;
    значення_падіння: Значення;
    місцезнаходження_падіння: Місцезнаходження;
    константи_назв: КонстантиНазв;
    взяті_значення: ВзятіЗначення;
    користувацькі_дані_пристрою: *КористувацькіДані;
    користувацькі_дані_бібліотеки: *КористувацькіДані;
    черга_здійснення: ЧергаЗдійснення;
    глобальний_притримувач: *Притримувач; // перший притримувач
    останній_притримувач: *Притримувач;
    розмова: *Розмова;
  }

  дія перетворити_п64_в_кд(М: *Машина, значення: п64, вихід_текстового_значення: *кд) -> логічне;
  дія перетворити_ц64_в_кд(М: *Машина, значення: ц64, вихід_текстового_значення: *кд) -> логічне;
  дія перетворити_р64_в_кд(М: *Машина, значення: р64, вихід_текстового_значення: *кд) -> логічне;

  дія піднести_до_степеня_р64(М: *Машина, значення: р64, степінь: р64) -> р64;

  внутрішня дія ЗАПАНІКУВАТИ(М: *Машина, повідомлення: кд) {
    М.налаштування.запанікувати(М, повідомлення);
  }

  внутрішня дія виділити<Т>(М: *Машина, кількість: природне) -> *Т {
    вернути М.налаштування.виділити_сиру_памʼять(М, кількість * Т.розмір) як *Т;
  }

  внутрішня дія перевиділити<Т>(М: *Машина, значення: адреса, нова_кількість: природне) -> *Т {
    вернути М.налаштування.перевиділити_сиру_памʼять(М, значення як *п8, нова_кількість * Т.розмір) як *Т;
  }

  внутрішня дія звільнити(М: *Машина, значення: адреса) -> ніщо {
    М.налаштування.звільнити_сиру_памʼять(М, значення як *п8);
  }

  внутрішня дія вивести_кд(М: *Машина, значення: кд) {
    М.налаштування.вивести_кд(М, КолірВиводуСтандартний, значення);
  }

  внутрішня дія вивести_кольорово(М: *Машина, колір: природне, значення: кд) {
    М.налаштування.вивести_кд(М, колір, значення);
  }

  внутрішня дія надрукувати_кд(М: *Машина, значення: кд) {
    вивести_кд(М, значення);
    вивести_кд(М, "");
  }

  внутрішня дія надрукувати_кольорово(М: *Машина, колір: природне, значення: кд) {
    вивести_кольорово(М, колір, значення);
    вивести_кд(М, "");
  }

  внутрішня дія вивести_шлях(М: *Машина, розмір: природне, дані: *п8) {
    М.налаштування.вивести_шлях(М, КолірВиводуСтандартний, розмір, дані);
  }

  внутрішня дія вивести_шлях_кольорово(М: *Машина, колір: природне, розмір: природне, дані: *п8) {
    М.налаштування.вивести_шлях(М, колір, розмір, дані);
  }

  внутрішня дія надрукувати_шлях(М: *Машина, розмір: природне, дані: *п8) {
    вивести_шлях(М, розмір, дані);
    вивести_кд(М, "");
  }

  внутрішня дія надрукувати_шлях_кольорово(М: *Машина, колір: природне, розмір: природне, дані: *п8) {
    вивести_шлях_кольорово(М, колір, розмір, дані);
    вивести_кд(М, "");
  }

  внутрішня дія вивести_п64(М: *Машина, значення: п64) {
    змінна текстове_значення: кд;

    якщо перетворити_п64_в_кд(М, значення, текстове_значення::адреса) {
      вивести_кд(М, текстове_значення);

      звільнити(М, текстове_значення.дані);
    }
  }

  внутрішня дія надрукувати_п64(М: *Машина, значення: п64) {
    вивести_п64(М, значення);
    вивести_кд(М, "");
  }

  внутрішня дія вивести_ц64(М: *Машина, значення: ц64) {
    змінна текстове_значення: кд;

    якщо перетворити_ц64_в_кд(М, значення, текстове_значення::адреса) {
      вивести_кд(М, текстове_значення);

      звільнити(М, текстове_значення.дані);
    }
  }

  внутрішня дія надрукувати_ц64(М: *Машина, значення: ц64) {
    вивести_ц64(М, значення);
    вивести_кд(М, "");
  }

  внутрішня дія вивести_р64(М: *Машина, значення: р64) {
    змінна текстове_значення: кд;

    якщо перетворити_р64_в_кд(М, значення, текстове_значення::адреса) {
      вивести_кд(М, текстове_значення);

      звільнити(М, текстове_значення.дані);
    }
  }

  внутрішня дія надрукувати_р64(М: *Машина, значення: р64) {
    вивести_р64(М, значення);
    вивести_кд(М, "");
  }

  внутрішня дія вивести_природне(М: *Машина, значення: природне) {
    вивести_п64(М, значення);
  }

  внутрішня дія отримати_теку_файлу(М: *Машина, шлях_до_файлу: *ПредметДаних, глибина: природне) -> *ПредметДаних {
    вернути М.налаштування.отримати_теку_файлу(М, шлях_до_файлу, глибина);
  }

  внутрішня дія прочитати_файл(М: *Машина, шлях_до_файлу: *ПредметДаних) -> *ПредметДаних {
    вернути М.налаштування.прочитати_файл(М, шлях_до_файлу);
  }

  внутрішня дія перевірити_чи_шлях_починається_на(М: *Машина, шлях: *ПредметДаних, початок: *ПредметДаних) -> логічне {
    вернути М.налаштування.перевірити_чи_шлях_починається_на(М, шлях, початок);
  }

  внутрішня дія отримати_шлях_до_паку_з_шляху_теки_модулів(М: *Машина, шлях_до_теки_модулів: *ПредметДаних, шлях_до_теки_паків: *ПредметДаних, вихід: **ПредметДаних) -> логічне {
    вернути М.налаштування.отримати_шлях_до_паку_з_шляху_теки_модулів(М, шлях_до_теки_модулів, шлях_до_теки_паків, вихід);
  }

  внутрішня дія збити_шлях_до_модуля(М: *Машина, розмір: природне, елементи: **ПредметДаних, вихід: **ПредметДаних) -> логічне {
    вернути М.налаштування.збити_шлях_до_модуля(М, розмір, елементи, вихід);
  }

  дія перекодувати_ю8_в_кд(М: *Машина, значення: ю8, вихід: *кд, вихід_позиції_помилки: *природне) -> логічне;
  дія перекодувати_кд_в_ю8(М: *Машина, значення: кд, вихід: *ю8, вихід_позиції_помилки: *природне) -> логічне;
}

простір мавка {
  структура Накопичувач<Т> {
    розмір: природне;
    дані: *Т;
    вмісткість: природне;
  }

  внутрішня дія виділити_накопичувач<Т>(М: *Машина, початкова_вмісткість: природне) -> *Накопичувач<Т> {
    змінна накопичувач = виділити<Накопичувач<Т>>();

    накопичувач.розмір = 0;
    якщо початкова_вмісткість > 0 {
      накопичувач.дані = виділити<Т>(М, початкова_вмісткість);
    } інакше {
      накопичувач.дані = пусто;
    }
    накопичувач.вмісткість = початкова_вмісткість;

    вернути накопичувач;
  }

  внутрішня дія зробити_накопичувач<Т>(М: *Машина, початкова_вмісткість: природне) -> Накопичувач<Т> {
    змінна накопичувач: Накопичувач<Т>;

    накопичувач.розмір = 0;
    якщо початкова_вмісткість > 0 {
      накопичувач.дані = виділити<Т>(М, початкова_вмісткість);
    } інакше {
      накопичувач.дані = пусто;
    }
    накопичувач.вмісткість = початкова_вмісткість;

    вернути накопичувач;
  }

  внутрішня дія покласти_в_накопичувач<Т>(М: *Машина, накопичувач: *Накопичувач<Т>, значення: Т) {
    якщо накопичувач.розмір == накопичувач.вмісткість {
      накопичувач.вмісткість += 1;
      накопичувач.дані = перевиділити<Т>(М, накопичувач.дані, накопичувач.вмісткість);
    }

    накопичувач.дані[накопичувач.розмір] = значення;
    накопичувач.розмір += 1;
  }

  внутрішня дія змінити_в_накопичувачі<Т>(М: *Машина, накопичувач: *Накопичувач<Т>, позиція: природне, значення: Т) {
    якщо позиція >= накопичувач.вмісткість {
      накопичувач.вмісткість = позиція + 1;
      накопичувач.дані = перевиділити<Т>(М, накопичувач.дані, накопичувач.вмісткість);
    }

    накопичувач.дані[позиція] = значення;
    накопичувач.розмір = позиція + 1;
  }

  внутрішня дія змінити_в_накопичувачі_без_розширення<Т>(М: *Машина, накопичувач: *Накопичувач<Т>, позиція: природне, значення: Т) {
    накопичувач.дані[позиція] = значення;
  }

  внутрішня дія обернути_накопичувач<Т>(М: *Машина, накопичувач: *Накопичувач<Т>) {
    змінна п: природне = 0;

    поки п < накопичувач.розмір / 2 {
      змінна тимчасове = накопичувач.дані[п];

      накопичувач.дані[п] = накопичувач.дані[накопичувач.розмір - п - 1];
      накопичувач.дані[накопичувач.розмір - п - 1] = тимчасове;

      п += 1;
    }
  }

  внутрішня дія звільнити_значення_накопичувача<Т>(М: *Машина, накопичувач: Накопичувач<Т>) {
    звільнити(М, накопичувач.дані);
  }

  внутрішня дія звільнити_накопичувач<Т>(М: *Машина, накопичувач: *Накопичувач<Т>) {
    звільнити_значення_накопичувача<Т>(М, накопичувач::вміст);
    звільнити(М, накопичувач);
  }
}

простір мавка {
  внутрішня дія виділити_дійсність(М: *Машина) -> *Дійсність {
    змінна дійсність = виділити<Дійсність>(М, 1);

    дійсність.попередня = М.остання_дійсність;
    дійсність.наступна = пусто;
    дійсність.позначено = ні;
    дійсність.кількість_запозичень = 0;
    дійсність.зовні = пусто;
    дійсність.призначення = Призначення { 0, пусто, 0 };

    М.остання_дійсність.наступна = дійсність;
    М.остання_дійсність = дійсність;

    вернути дійсність;
  }

  дія звільнити_призначення(М: *Машина, призначення: Призначення);

  дія перебрати_призначення(
    М: *Машина,
    призначення: Призначення,
    дія_перебору: (М: *Машина, призначення: Призначення, назва: *ПредметТексту, значення: Значення, аргумент: адреса) -> логічне,
    аргумент: адреса
  ) -> логічне;

  внутрішня дія відпустити_дійсність(М: *Машина, дійсність: *Дійсність) -> ніщо {
    дійсність.кількість_запозичень -= 1;

    якщо дійсність.кількість_запозичень == 0 {
      якщо дійсність.попередня == пусто {
        М.перша_дійсність = дійсність.наступна;
      } інакше {
        дійсність.попередня.наступна = дійсність.наступна;
      }

      якщо дійсність.наступна == пусто {
        М.остання_дійсність = дійсність.попередня;
      } інакше {
        дійсність.наступна.попередня = дійсність.попередня;
      }

      якщо дійсність.зовні != пусто {
        відпустити_дійсність(М, дійсність.зовні);
      }

      звільнити_призначення(М, дійсність.призначення);
      звільнити(М, дійсність);
    }
  }

  внутрішня дія виділити_предмет<Т>(М: *Машина, клас: *ПредметКласу) -> *Т {
    змінна предмет = виділити<Т>(М, 1);

    предмет.наступний = пусто;
    предмет.позначено = ні;
    предмет.клас = клас;
    предмет.користувацькі_дані = пусто;

    М.останній_предмет.наступний = предмет як *Предмет;
    М.останній_предмет = предмет як *Предмет;
    М.кількість_дійсних += 1;
    М.потребує_очищення = М.кількість_дійсних >= М.кількість_дійсних_для_очищення;

    вернути предмет;
  }

  // Взяти
  дія взяти_файл(М: *Машина, шлях_до_файлу: *ПредметДаних, назва_модуля: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія взяти_модуль(М: *Машина, шлях_до_теки_модулів: *ПредметДаних, відносно: логічне, довжина_шляху: природне, шлях: **ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія взяти_пак(М: *Машина, довжина_шляху: природне, шлях: **ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія взяти_біб(М: *Машина, довжина_шляху: природне, шлях: **ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;

  // ВзятіЗначення
  дія записати_взяте_значення(М: *Машина, шлях: *ПредметДаних, значення: Значення);
  дія знайти_взяте_значення(М: *Машина, шлях: *ПредметДаних, вихід_значення: *Значення) -> логічне;
  дія видалити_взяте_значення(М: *Машина, шлях: *ПредметДаних) -> логічне;

  // Вивід
  дія надрукувати_інформацію_падіння(М: *Машина, інформація_падіння: ІнформаціяПадіння);
  дія вивести_значення(М: *Машина, значення: Значення, розмір_відступу: природне, глибина: природне);
  дія надрукувати_значення(М: *Машина, значення: Значення, розмір_відступу: природне, глибина: природне);

  // Дійсність
  дія створити_дійсність(М: *Машина, зовні: *Дійсність) -> *Дійсність;
  дія записати_в_дійсність(М: *Машина, дійсність: *Дійсність, назва: *ПредметТексту, значення: Значення);
  дія знайти_в_дійсності(М: *Машина, дійсність: *Дійсність, назва: *ПредметТексту, вихід_значення: *Значення) -> логічне;

  // Призначення
  дія призначити(М: *Машина, призначення: *Призначення, назва: *ПредметТексту, значення: Значення);
  дія знайти_призначене(М: *Машина, призначення: Призначення, назва: *ПредметТексту, вихід: *Значення) -> логічне;

  // Допоміжне
  дія розібрати_число_з_кд(М: *Машина, значення: кд, вихід: *р64) -> логічне;

  // Задіяні
  синонім ДіяПереборуПозиційнихЗадіяних = (М: *Машина, задіяні: Задіяні, розмір_позиційних: п32, позиція: п32, значення: Значення, аргумент: адреса) -> ніщо;
  синонім ДіяПереборуІменованихЗадіяних = (М: *Машина, задіяні: Задіяні, позиція: п32, назва: *ПредметТексту, значення: Значення, аргумент: адреса) -> ніщо;
  дія знайти_задіяне(М: *Машина, задіяні: Задіяні, позиція: п32, назва: *ПредметТексту, вихід_значення: *Значення) -> логічне;
  дія перебрати_позиційні_задіяні(М: *Машина, задіяні: Задіяні, дія_перебору: ДіяПереборуПозиційнихЗадіяних, аргумент: адреса);
  дія перебрати_іменовані_задіяні(М: *Машина, задіяні: Задіяні, дія_перебору: ДіяПереборуІменованихЗадіяних, аргумент: адреса);
  дія звільнити_задіяні(М: *Машина, задіяні: Задіяні);

  // Значення
  дія здійснити(М: *Машина, здійснювач: Значення, значення: Значення, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія отримати_властивість(М: *Машина, предмет: Значення, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія змінити_властивість(М: *Машина, предмет: Значення, назва: *ПредметТексту, значення: Значення, місцезнаходження: Місцезнаходження) -> СтанПадіння;
  дія здійснити_властивість(М: *Машина, предмет: Значення, назва: *ПредметТексту, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія отримати_елемент(М: *Машина, предмет: Значення, ключ: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія змінити_елемент(М: *Машина, предмет: Значення, ключ: Значення, значення: Значення, місцезнаходження: Місцезнаходження) -> СтанПадіння;
  дія отримати_текст(М: *Машина, значення: Значення, місцезнаходження: Місцезнаходження) -> *ПредметТексту;
  дія отримати_послідовність(М: *Машина, значення: Значення, місцезнаходження: Місцезнаходження) -> *ПредметПослідовності;
  дія отримати_проміжок(М: *Машина, від: Значення, до: Значення, включно: логічне, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія отримати_перебір(М: *Машина, предмет: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія порівняти_значення(М: *Машина, а: Значення, б: Значення) -> логічне;
  дія перевірити_чи_предмет_є(М: *Машина, а: *Предмет, б: *ПредметКласу) -> логічне;

  // ІнформаціяПадіння
  дія отримати_інформацію_падіння(М: *Машина, вихід: *ІнформаціяПадіння) -> логічне;
  дія знищити_інформацію_падіння(М: *Машина, інформація_падіння: ІнформаціяПадіння) -> ніщо;

  // КористувацькіДані
  дія створити_користувацькі_дані(М: *Машина, значення: адреса, дія_перед_знищенням: ДіяПередЗнищеннямКористувацькихДаних) -> *КористувацькіДані;

  // Машина
  дія налаштувати_машину(М: *Машина, налаштування: Налаштування);
  дія розлаштувати_машину(М: *Машина);
  дія увімкнути_стан_падіння(М: *Машина, значення_падіння: Значення, місцезнаходження_падіння: Місцезнаходження);
  дія вимкнути_стан_падіння(М: *Машина);
  дія покласти_в_історію_здійснення(М: *Машина, дійсність: *Дійсність, здійснювач: Значення, предмет_дії: *ПредметДії, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> *Діяльність;
  дія видалити_з_історії_здійснення(М: *Машина, кількість: природне);
  дія покласти_в_чергу_здійснення(М: *Машина, предмет_дії: *ПредметДії, задіяні: Задіяні);
  дія забрати_з_черги_здійснення(М: *Машина, вихід: *ЕлементЧергиЗдійснення) -> логічне;

  // МісцезнаходженняВказівок
  дія покласти_місцезнаходження_вказівки(М: *Машина, місцезнаходження_вказівок: *МісцезнаходженняВказівок, рядок: п32, позиція_вказівки: п32);

  // НакопичувачТексту
  дія зробити_накопичувач_тексту(М: *Машина, вмісткість: природне) -> НакопичувачТексту;
  дія покласти_в_накопичувач_тексту(М: *Машина, накопичувач: *НакопичувачТексту, значення: кд);

  // Очищувач
  дія запустити_очищувач(М: *Машина);

  // Притримувач
  дія створити_притримувач(М: *Машина) -> *Притримувач;
  дія притримати(М: *Машина, притримувач: *Притримувач, предмет: *Предмет) -> *Притриманий;
  дія відпустити_притриманий(М: *Машина, притримувач: *Притримувач, притриманий: *Притриманий);
  дія притримати_глобально(М: *Машина, предмет: *Предмет) -> *Притриманий;
  дія відпустити_притриманий_глобально(М: *Машина, притриманий: *Притриманий);

  // Розмова
  дія почати_розмову(М: *Машина, шлях_до_файлу_стандартного_входу: *ПредметДаних, читати: ПочатиРозмовуДіяЧитати, обробити_значення: ПочатиРозмовуДіяОбробитиЗначення, обробити_падіння: ПочатиРозмовуДіяОбробитиПадіння);

  // Спроби
  дія покласти_спробу(М: *Машина, спроби: *Спроби, назва_зловити: *ПредметТексту, позиція_вказівки_зловити: природне) -> *Спроба;
  дія видалити_останню_спробу(М: *Машина, спроби: *Спроби);
}

простір мавка {
  // ПредметДаних
  дія заповнити_клас_Дані(М: *Машина);
  дія створити_дані(М: *Машина, розмір: природне, дані: *п8) -> *ПредметДаних;
  дія створити_дані_без_копіювання(М: *Машина, розмір: природне, дані: *п8) -> *ПредметДаних;
  дія здійснити_клас_даних(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_даних_отримати_властивість(М: *Машина, предмет_даних: *ПредметДаних, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_даних_отримати_елемент(М: *Машина, предмет_даних: *ПредметДаних, ключ: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_даних_змінити_елемент(М: *Машина, предмет_даних: *ПредметДаних, ключ: Значення, значення: Значення, місцезнаходження: Місцезнаходження) -> СтанПадіння;

  // ПредметПроміжкаЧисел
  дія заповнити_клас_ПроміжокЧисел(М: *Машина);
  дія створити_проміжок_чисел(М: *Машина, від: р64, до: р64, включно: логічне) -> *ПредметПроміжкаЧисел;
  дія здійснити_клас_проміжка_чисел(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_проміжка_чисел_отримати_властивість(М: *Машина, предмет_проміжка_чисел: *ПредметПроміжкаЧисел, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;

  // ПредметДії
  дія заповнити_клас_Дія(М: *Машина);
  дія створити_дію(М: *Машина, дійсність_створення: *Дійсність, назва: *ПредметТексту, параметри: *ПредметПослідовності, тип_результату: *Предмет, код: *ПредметКоду, шлях_до_теки_модулів: *ПредметДаних) -> *ПредметДії;
  дія створити_рідну_дію(М: *Машина, назва: *ПредметТексту, параметри: *ПредметПослідовності, тип_результату: *Предмет, рідна_дія: РіднаДія, шлях_до_теки_модулів: *ПредметДаних) -> *ПредметДії;
  дія здійснити_клас_дії(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_дії_здійснити(М: *Машина, здійснювач: Значення, предмет_дії: *ПредметДії, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_дії_отримати_властивість(М: *Машина, предмет_дії: *ПредметДії, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;

  // ПредметКоду
  дія заповнити_клас_Код(М: *Машина);
  дія створити_код(М: *Машина, константи: *ПредметПослідовності, вказівки: *ПредметДаних, шлях: *ПредметДаних, місцезнаходження_вказівок: МісцезнаходженняВказівок) -> *ПредметКоду;
  дія знайти_рядок_вказівки(місцезнаходження_вказівок: МісцезнаходженняВказівок, позиція_вказівки: п32) -> п32;

  // ПредметМодуля
  дія заповнити_клас_Модуль(М: *Машина);
  дія створити_модуль(М: *Машина, назва: *ПредметТексту) -> *ПредметМодуля;
  дія здійснити_клас_модуля(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія записати_властивість_модуля(М: *Машина, предмет_модуля: *ПредметМодуля, назва: *ПредметТексту, значення: Значення);
  дія предмет_модуля_отримати_властивість(М: *Машина, предмет_модуля: *ПредметМодуля, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;

  // ПредметПараметра
  дія заповнити_клас_Параметр(М: *Машина);
  дія створити_параметр(М: *Машина, назва: *ПредметТексту, тип: *Предмет, значення: Значення) -> *ПредметПараметра;
  дія здійснити_клас_параметра(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_параметра_отримати_властивість(М: *Машина, предмет_параметра: *ПредметПараметра, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;

  // ПредметОзнаки
  дія заповнити_клас_Ознака(М: *Машина);
  дія створити_ознаку(М: *Машина, назва: *ПредметТексту, тип: *Предмет, значення: Значення) -> *ПредметОзнаки;
  дія здійснити_клас_ознаки(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_ознаки_отримати_властивість(М: *Машина, предмет_ознаки: *ПредметОзнаки, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;

  // ПредметПереборуДаних
  дія заповнити_клас_ПеребірДаних(М: *Машина);
  дія створити_перебір_даних(М: *Машина, предмет_даних: *ПредметДаних) -> *ПредметПереборуДаних;
  дія здійснити_клас_перебору_даних(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_перебору_даних_отримати_властивість(М: *Машина, предмет_перебору_даних: *ПредметПереборуДаних, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;

  // ПредметПереборуПроміжкаЧисел
  дія заповнити_клас_ПеребірПроміжкаЧисел(М: *Машина);
  дія створити_перебір_проміжка_чисел(М: *Машина, предмет_проміжка: *ПредметПроміжкаЧисел) -> *ПредметПереборуПроміжкаЧисел;
  дія здійснити_клас_перебору_проміжка_чисел(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_перебору_проміжка_чисел_отримати_властивість(М: *Машина, предмет_перебору_проміжка_чисел: *ПредметПереборуПроміжкаЧисел, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;

  // ПредметПереборуПослідовності
  дія заповнити_клас_ПеребірПослідовності(М: *Машина);
  дія створити_перебір_послідовності(М: *Машина, предмет_послідовності: *ПредметПослідовності) -> *ПредметПереборуПослідовності;
  дія здійснити_клас_перебору_послідовності(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_перебору_послідовності_отримати_властивість(М: *Машина, предмет_перебору_послідовності: *ПредметПереборуПослідовності, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;

  // ПредметПереборуСловника
  дія заповнити_клас_ПеребірСловника(М: *Машина);
  дія створити_перебір_словника(М: *Машина, предмет_словника: *ПредметСловника) -> *ПредметПереборуСловника;
  дія здійснити_клас_перебору_словника(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_перебору_словника_отримати_властивість(М: *Машина, предмет_перебору_словника: *ПредметПереборуСловника, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;

  // ПредметПереборуСписку
  дія заповнити_клас_ПеребірСписку(М: *Машина);
  дія створити_перебір_списку(М: *Машина, предмет_списку: *ПредметСписку) -> *ПредметПереборуСписку;
  дія здійснити_клас_перебору_списку(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_перебору_списку_отримати_властивість(М: *Машина, предмет_перебору_списку: *ПредметПереборуСписку, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;

  // ПредметПереборуТексту
  дія заповнити_клас_ПеребірТексту(М: *Машина);
  дія створити_перебір_тексту(М: *Машина, предмет_тексту: *ПредметТексту) -> *ПредметПереборуТексту;
  дія здійснити_клас_перебору_тексту(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_перебору_тексту_отримати_властивість(М: *Машина, предмет_перебору_тексту: *ПредметПереборуТексту, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;

  // ПредметПослідовності
  дія заповнити_клас_Послідовність(М: *Машина);
  дія створити_послідовність(М: *Машина, розмір: природне, елементи: *Значення) -> *ПредметПослідовності;
  дія створити_послідовність_без_копіювання(М: *Машина, розмір: природне, елементи: *Значення) -> *ПредметПослідовності;
  дія створити_сиру_послідовність(М: *Машина, розмір: природне) -> *ПредметПослідовності;
  дія здійснити_клас_послідовності(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_послідовності_отримати_властивість(М: *Машина, предмет_послідовності: *ПредметПослідовності, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_послідовності_отримати_елемент(М: *Машина, предмет_послідовності: *ПредметПослідовності, ключ: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  внутрішня дія порівняти_послідовності(М: *Машина, а: *ПредметПослідовності, б: *ПредметПослідовності) -> логічне;

  // ПредметСловника
  дія заповнити_клас_Словник(М: *Машина);
  дія створити_словник(М: *Машина) -> *ПредметСловника;
  дія здійснити_клас_словника(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_словника_отримати_властивість(М: *Машина, предмет_словника: *ПредметСловника, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_словника_отримати_елемент(М: *Машина, предмет_словника: *ПредметСловника, ключ: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_словника_змінити_елемент(М: *Машина, предмет_словника: *ПредметСловника, ключ: Значення, значення_елемента: Значення, місцезнаходження: Місцезнаходження) -> СтанПадіння;
  дія записати_в_словник(М: *Машина, словник: *ПредметСловника, ключ: Значення, значення: Значення);

  // ПредметСписку
  дія заповнити_клас_Список(М: *Машина);
  дія створити_список(М: *Машина, розмір: природне) -> *ПредметСписку;
  дія здійснити_клас_списку(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_списку_отримати_властивість(М: *Машина, предмет_списку: *ПредметСписку, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_списку_отримати_елемент(М: *Машина, предмет_списку: *ПредметСписку, ключ: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_списку_змінити_елемент(М: *Машина, предмет_списку: *ПредметСписку, ключ: Значення, значення_елемента: Значення, місцезнаходження: Місцезнаходження) -> СтанПадіння;
  дія записати_в_список(М: *Машина, предмет_списку: *ПредметСписку, позиція: природне, значення: Значення);

  // ПредметКласу
  дія заповнити_клас_Клас(М: *Машина);
  дія створити_клас(М: *Машина, назва: *ПредметТексту, ознаки: *ПредметПослідовності) -> *ПредметКласу;
  дія змінити_властивість_класу(М: *Машина, предмет_класу: *ПредметКласу, назва: *ПредметТексту, значення: Значення);
  дія клас_здійснити(М: *Машина, значення: *ПредметКласу, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія знайти_метод_в_класі(М: *Машина, предмет_класу: *ПредметКласу, назва: *ПредметТексту) -> *ПредметДії;
  дія записати_метод_класу(М: *Машина, предмет_класу: *ПредметКласу, назва: *ПредметТексту, значення_дії: *ПредметДії);
  дія клас_отримати_властивість(М: *Машина, предмет_класу: *ПредметКласу, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія клас_змінити_властивість(М: *Машина, предмет_класу: *ПредметКласу, назва: *ПредметТексту, значення: Значення, місцезнаходження: Місцезнаходження) -> СтанПадіння;

  // ПредметТексту
  дія заповнити_клас_Текст(М: *Машина);
  дія створити_текст(М: *Машина, значення: кд) -> *ПредметТексту;
  дія створити_текст_без_копіювання(М: *Машина, розмір: природне, дані: *п8) -> *ПредметТексту;
  дія здійснити_клас_тексту(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_тексту_отримати_властивість(М: *Машина, предмет_тексту: *ПредметТексту, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_тексту_отримати_елемент(М: *Машина, предмет_тексту: *ПредметТексту, ключ: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  внутрішня дія порівняти_тексти(М: *Машина, а: *ПредметТексту, б: *ПредметТексту) -> логічне;

  // ПредметЧисла
  дія заповнити_клас_Число(М: *Машина);
  дія створити_число(М: *Машина, значення: р64) -> Значення;
  дія здійснити_клас_числа(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія предмет_числа_отримати_властивість(М: *Машина, значення: р64, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;

  // СкладенийПредмет
  дія створити_складений_предмет(М: *Машина, значення_класу: *ПредметКласу) -> *СкладенийПредмет;
  дія складений_предмет_отримати_властивість(М: *Машина, складений_предмет: *СкладенийПредмет, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
  дія складений_предмет_змінити_властивість(М: *Машина, складений_предмет: *СкладенийПредмет, назва: *ПредметТексту, значення: Значення, місцезнаходження: Місцезнаходження) -> СтанПадіння;
}

простір мавка {
  внутрішня дія ПАДІННЯ(М: *Машина, предмет_тексту: *ПредметТексту) -> Значення {
    увімкнути_стан_падіння(
      М,
      ПРЕДМЕТ(предмет_тексту),
      Місцезнаходження { пусто, 0 }
    );

    вернути НЕДІЙСНЕ;
  }

  внутрішня дія МІСЦЕПАДІННЯ(М: *Машина, предмет_тексту: *ПредметТексту, місцезнаходження: Місцезнаходження) -> Значення {
    увімкнути_стан_падіння(
      М,
      ПРЕДМЕТ(предмет_тексту),
      місцезнаходження
    );

    вернути НЕДІЙСНЕ;
  }
}

простір мавка {
  внутрішня дія порівняти_тексти(
    М: *Машина,
    а: *ПредметТексту,
    б: *ПредметТексту
  ) -> логічне {
    якщо а == б {
      вернути так;
    }

    якщо а.значення.розмір != б.значення.розмір {
      вернути ні;
    }

    змінна п: природне = 0;
    поки п < а.значення.розмір {
      якщо а.значення.дані[п] != б.значення.дані[п] {
        вернути ні;
      }

      п += 1;
    }

    вернути так;
  }

  внутрішня дія порівняти_послідовності(
    М: *Машина,
    а: *ПредметПослідовності,
    б: *ПредметПослідовності
  ) -> логічне {
    якщо а == б {
      вернути так;
    }

    якщо а.розмір != б.розмір {
      вернути ні;
    }

    змінна п: природне = 0;
    поки п < а.розмір {
      якщо не порівняти_значення(М, а.елементи[п], б.елементи[п]) {
        вернути ні;
      }

      п += 1;
    }

    вернути так;
  }
}