// 2025-2026 Богданович Давид Когут Прихожденко (кдб.дійсність.укр)
/* Пристрій Мавки */
взяти визначення мавка;
простір мавка {
структура ЕлементШляхуПристроюМавки {
дані: *п8;
розмір: природне;
}
}
// ВАЖЛИВО: параметри дій пристрою НЕ ЗМІНЮВАТИ! інакше прийдеться змінювати ВСЮДИ (віндовс, лінукс, макос, васм)
// якщо треба щось таке зробити, то треба створити нову дію!
// сумісність цих дій між версіями має завжли зберігатись!
// це головна біль потім міняти їх у Васм!
дія пристрій_мавки_виділити(розмір: природне) -> адреса;
дія пристрій_мавки_перевиділити(значення: адреса, новий_розмір: природне) -> адреса;
дія пристрій_мавки_звільнити(значення: адреса);
дія пристрій_мавки_вийти(код: ц32);
дія пристрій_мавки_отримати_версію_як_ю8(вихід_даних: **п8, вихід_розміру: *природне) -> логічне;
дія пристрій_мавки_вивести_сирі_дані(дані: *п8, розмір: природне);
дія пристрій_мавки_вивести_ю8(колір: природне, дані: *п8, розмір: природне);
дія пристрій_мавки_вивести_шлях(колір: природне, дані: *п8, розмір: природне);
дія пристрій_мавки_перетворити_п64_в_ю8(значення: п64, вихід_даних: **п8, вихід_розміру: *природне) -> логічне;
дія пристрій_мавки_перетворити_ц64_в_ю8(значення: ц64, вихід_даних: **п8, вихід_розміру: *природне) -> логічне;
дія пристрій_мавки_перетворити_р64_в_ю8(значення: р64, вихід_даних: **п8, вихід_розміру: *природне, вихід_розміру_експоненти: *ціле) -> логічне;
дія пристрій_мавки_піднести_до_степеня_р64(значення: р64, степінь: р64) -> р64;
дія пристрій_мавки_читати_ю8(дані_перед: *п8, розмір_перед: природне, вихід_даних: **п8, вихід_розміру: *природне, вихід_кінець_файлу: *природне, дозволити_історію: природне) -> логічне;
дія пристрій_мавки_читати_ю8_асинхронно(дані_перед: *п8, розмір_перед: природне, обробник: (дані: *п8, розмір: природне, кінець_файлу: природне, аргумент: адреса) -> ніщо, аргумент: адреса, дозволити_історію: природне) -> логічне;
дія пристрій_мавки_прочитати_файл(дані_шляху: *п8, розмір_шляху: природне, вихід_даних: **п8, вихід_розміру: *природне) -> логічне;
дія пристрій_мавки_перевірити_чи_шлях_існує_і_є_файлом(дані_шляху: *п8, розмір_шляху: природне) -> логічне;
дія пристрій_мавки_отримати_абсолютний_шлях(дані_шляху: *п8, розмір_шляху: природне, вихід_даних: **п8, вихід_розміру: *природне) -> логічне;
дія пристрій_мавки_отримати_теку_шляху(дані_шляху: *п8, розмір_шляху: природне, вихід_даних: **п8, вихід_розміру: *природне, рівень: природне) -> логічне;
дія пристрій_мавки_отримати_теку_до_паків(дані_шляху: *п8, розмір_шляху: природне, вихід_даних: **п8, вихід_розміру: *природне) -> логічне;
дія пристрій_мавки_отримати_назву_модуля_з_шляху_ю8(дані_шляху: *п8, розмір_шляху: природне, вихід_даних: **п8, вихід_розміру: *природне) -> логічне;
дія пристрій_мавки_збити_шлях_до_модуля(кількість_елементів: природне, елементи: *мавка::ЕлементШляхуПристроюМавки, вихід_даних: **п8, вихід_розміру: *природне) -> логічне;
дія пристрій_мавки_перевірити_чи_шлях_починається_на(дані_шляху: *п8, розмір_шляху: природне, дані_початку: *п8, розмір_початку: природне) -> логічне;
дія пристрій_мавки_отримати_шлях_до_паку_з_шляху_теки_модулів(дані_шляху: *п8, розмір_шляху: природне, дані_шляху_до_паків: *п8, розмір_шляху_до_паків: природне, вихід_даних: **п8, вихід_розміру: *природне) -> логічне;
дія пристрій_мавки_отримати_поточний_шлях_процесу(вихід_даних: **п8, вихід_розміру: *природне) -> логічне;
дія пристрій_мавки_перекодувати_ю8_в_кд(розмір: природне, дані: *п8, вихід_розміру: *природне, вихід_даних: **п8, вихід_позиції_помилки: *природне) -> логічне;
дія пристрій_мавки_перекодувати_кд_в_ю8(розмір: природне, дані: *п8, вихід_розміру: *природне, вихід_даних: **п8, вихід_позиції_помилки: *природне) -> логічне;
внутрішня дія пристрій_мавки_отримати_версію(вихід_розміру: *природне, вихід_даних: **п8) -> логічне {
змінна розмір_ю8: природне;
змінна дані_ю8: *п8;
змінна позиція_помилки: природне;
якщо не пристрій_мавки_отримати_версію_як_ю8(дані_ю8::адреса, розмір_ю8::адреса) {
вернути ні;
}
якщо не пристрій_мавки_перекодувати_ю8_в_кд(розмір_ю8, дані_ю8, вихід_розміру, вихід_даних, позиція_помилки::адреса) {
пристрій_мавки_звільнити(дані_ю8);
вернути ні;
}
пристрій_мавки_звільнити(дані_ю8);
вернути так;
}
внутрішня дія пристрій_мавки_вивести_кд(колір: природне, розмір: природне, дані: *п8) {
змінна розмір_ю8: природне;
змінна дані_ю8: *п8;
змінна позиція_помилки: природне;
якщо не пристрій_мавки_перекодувати_кд_в_ю8(розмір, дані, розмір_ю8::адреса, дані_ю8::адреса, позиція_помилки::адреса) {
// потім: обробити
вернути;
}
пристрій_мавки_вивести_ю8(колір, дані_ю8, розмір_ю8);
пристрій_мавки_звільнити(дані_ю8);
}
внутрішня дія пристрій_мавки_перетворити_п64_в_кд(значення: п64, вихід_розміру: *природне, вихід_даних: **п8) -> логічне {
змінна розмір_ю8: природне;
змінна дані_ю8: *п8;
змінна позиція_помилки: природне;
якщо не пристрій_мавки_перетворити_п64_в_ю8(значення, дані_ю8::адреса, розмір_ю8::адреса) {
вернути ні;
}
якщо не пристрій_мавки_перекодувати_ю8_в_кд(розмір_ю8, дані_ю8, вихід_розміру, вихід_даних, позиція_помилки::адреса) {
пристрій_мавки_звільнити(дані_ю8);
вернути ні;
}
пристрій_мавки_звільнити(дані_ю8);
вернути так;
}
внутрішня дія пристрій_мавки_перетворити_ц64_в_кд(значення: ц64, вихід_розміру: *природне, вихід_даних: **п8) -> логічне {
змінна розмір_ю8: природне;
змінна дані_ю8: *п8;
змінна позиція_помилки: природне;
якщо не пристрій_мавки_перетворити_ц64_в_ю8(значення, дані_ю8::адреса, розмір_ю8::адреса) {
вернути ні;
}
якщо не пристрій_мавки_перекодувати_ю8_в_кд(розмір_ю8, дані_ю8, вихід_розміру, вихід_даних, позиція_помилки::адреса) {
пристрій_мавки_звільнити(дані_ю8);
вернути ні;
}
пристрій_мавки_звільнити(дані_ю8);
вернути так;
}
внутрішня дія пристрій_мавки_перетворити_р64_в_кд(значення: р64, вихід_розміру: *природне, вихід_даних: **п8, вихід_розміру_експоненти: *ціле) -> логічне {
змінна розмір_ю8: природне;
змінна дані_ю8: *п8;
змінна позиція_помилки: природне;
якщо не пристрій_мавки_перетворити_р64_в_ю8(значення, дані_ю8::адреса, розмір_ю8::адреса, вихід_розміру_експоненти) {
вернути ні;
}
якщо не пристрій_мавки_перекодувати_ю8_в_кд(розмір_ю8, дані_ю8, вихід_розміру, вихід_даних, позиція_помилки::адреса) {
пристрій_мавки_звільнити(дані_ю8);
вернути ні;
}
пристрій_мавки_звільнити(дані_ю8);
вернути так;
}
внутрішня дія пристрій_мавки_читати_кд(дані_перед: *п8, розмір_перед: природне, вихід_даних: **п8, вихід_розміру: *природне, вихід_кінець_файлу: *природне, дозволити_історію: природне) -> логічне {
змінна розмір_перед_ю8: природне;
змінна дані_перед_ю8: *п8;
змінна позиція_помилки: природне;
змінна успіх: логічне;
успіх = пристрій_мавки_перекодувати_кд_в_ю8(
розмір_перед,
дані_перед,
розмір_перед_ю8::адреса,
дані_перед_ю8::адреса,
позиція_помилки::адреса
);
якщо не успіх {
вернути ні;
}
змінна прочитаний_розмір: природне;
змінна прочитані_дані: *п8;
успіх = пристрій_мавки_читати_ю8(
дані_перед_ю8,
розмір_перед_ю8,
прочитані_дані::адреса,
прочитаний_розмір::адреса,
вихід_кінець_файлу,
дозволити_історію
);
якщо не успіх {
пристрій_мавки_звільнити(дані_перед_ю8);
вернути ні;
}
якщо вихід_кінець_файлу::вміст {
вернути так;
}
пристрій_мавки_звільнити(дані_перед_ю8);
успіх = пристрій_мавки_перекодувати_ю8_в_кд(
прочитаний_розмір,
прочитані_дані,
вихід_розміру,
вихід_даних,
позиція_помилки::адреса
);
пристрій_мавки_звільнити(прочитані_дані);
вернути успіх;
}
внутрішня дія пристрій_мавки_отримати_назву_модуля_з_шляху(розмір_шляху: природне, дані_шляху: *п8, вихід_розміру: *природне, вихід_даних: **п8) -> логічне {
змінна розмір_ю8: природне;
змінна дані_ю8: *п8;
змінна позиція_помилки: природне;
якщо не пристрій_мавки_отримати_назву_модуля_з_шляху_ю8(дані_шляху, розмір_шляху, дані_ю8::адреса, розмір_ю8::адреса) {
вернути ні;
}
якщо не пристрій_мавки_перекодувати_ю8_в_кд(розмір_ю8, дані_ю8, вихід_розміру, вихід_даних, позиція_помилки::адреса) {
пристрій_мавки_звільнити(дані_ю8);
вернути ні;
}
пристрій_мавки_звільнити(дані_ю8);
вернути так;
}
простір мавка {
простір пристрій {
дія створити_машину() -> *Машина;
дія розібрати_шлях_початкового_модуля(М: *Машина, шлях: *ПредметДаних, вихід_абсолютного_шляху: **ПредметДаних, вихід_теки_модулів: **ПредметДаних, вихід_теки_паків: **ПредметДаних, вихід_назви_модуля: **ПредметТексту) -> логічне;
дія визначити_глобально_мавка(М: *Машина);
дія визначити_глобальні_виводу(М: *Машина);
}
}