/* Пристрій Мавки */

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

взяти означення мавка/машина;
взяти означення мавка/розбирач;
взяти означення мавка/перекладач;

простір мавка {
  простір пристрій {
    структура ЕлементШляхуПристроюМавки {
      розмір: природне;
      дані: адреса<п8>;
    }
  }
}

дія пристрій_мавки_отримати_версію(вихід_розміру: адреса<природне>, вихід_даних: адреса<адреса<п8>>) -> логічне;
дія пристрій_мавки_перекодувати_ю8_в_кд(розмір: природне, дані: адреса<п8>, вихід_розміру: адреса<природне>, вихід_даних: адреса<адреса<п8>>, вихід_позиції_помилки: адреса<природне>) -> логічне;
дія пристрій_мавки_перекодувати_кд_в_ю8(розмір: природне, дані: адреса<п8>, вихід_розміру: адреса<природне>, вихід_даних: адреса<адреса<п8>>, вихід_позиції_помилки: адреса<природне>) -> логічне;
дія пристрій_мавки_вивести_формат(значення: природне);
дія пристрій_мавки_вивести_сирі_дані(розмір: природне, дані: адреса<п8>);
дія пристрій_мавки_вивести_кд(розмір: природне, дані: адреса<п8>);
дія пристрій_мавки_надрукувати_кд(розмір: природне, дані: адреса<п8>);
дія пристрій_мавки_вивести_ю8(розмір: природне, дані: адреса<п8>);
дія пристрій_мавки_надрукувати_ю8(розмір: природне, дані: адреса<п8>);
дія пристрій_мавки_вивести_шлях(розмір: природне, дані: адреса<п8>);
дія пристрій_мавки_надрукувати_шлях(розмір: природне, дані: адреса<п8>);
дія пристрій_мавки_виділити_сиру_памʼять(розмір: природне) -> адреса<п8>;
дія пристрій_мавки_перевиділити_сиру_памʼять(значення: адреса<п8>, новий_розмір: природне) -> адреса<п8>;
дія пристрій_мавки_звільнити_сиру_памʼять(значення: адреса<п8>);
дія пристрій_мавки_вийти(код: ц32);
дія пристрій_мавки_прочитати_файл(розмір_шляху: природне, дані_шляху: адреса<п8>, вихід_розміру: адреса<природне>, вихід_даних: адреса<адреса<п8>>) -> логічне;
дія пристрій_мавки_перетворити_п64_в_кд(значення: п64, вихід_розміру: адреса<природне>, вихід_даних: адреса<адреса<п8>>) -> логічне;
дія пристрій_мавки_перетворити_ц64_в_кд(значення: ц64, вихід_розміру: адреса<природне>, вихід_даних: адреса<адреса<п8>>) -> логічне;
дія пристрій_мавки_перетворити_р64_в_кд(значення: р64, вихід_розміру: адреса<природне>, вихід_даних: адреса<адреса<п8>>, вихід_розміру_експоненти: адреса<ціле>) -> логічне;
дія пристрій_мавки_піднести_до_степеня_п64(значення: п64, степінь: п64) -> п64;
дія пристрій_мавки_піднести_до_степеня_ц64(значення: ц64, степінь: ц64) -> ц64;
дія пристрій_мавки_піднести_до_степеня_р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>>) -> логічне;

простір мавка {
  простір пристрій {
    стала ФОчистити = 0;
    стала ФКолірТекстуЧервоний = 1;
    стала ФКолірТекстуЗелений = 2;
    стала ФКолірТекстуСиній = 3;
    стала ФКолірТекстуЖовтий = 4;

    структура КористувацькіДаніПристроюМавки {
      шлях_до_теки_модулів: адреса<Притриманий>; // ПредметДаних
      шлях_до_теки_паків: адреса<Притриманий>; // ПредметДаних
    }

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