// 2025-2026 Богданович Давид Когут Прихожденко (кдб.дійсність.укр)
взяти визначення мавка;
взяти визначення мавка/бібліотека;
дія перевірити_чи_ю8_починається_на(значення: ю8, початок: ю8) -> логічне {
змінна п: природне = 0;
поки п < початок.розмір {
якщо п >= значення.розмір {
вернути ні;
}
якщо значення.дані[п] != початок.дані[п] {
вернути ні;
}
п += 1;
}
вернути так;
}
// дія обробити_чергу_здійснення(М: *мавка::Машина) -> ц32 {
// змінна інформація_падіння: мавка::ІнформаціяПадіння;
// змінна елемент_черги_здійснення: мавка::ЕлементЧергиЗдійснення;
// поки мавка::забрати_з_черги_здійснення(М, елемент_черги_здійснення::адреса) {
// мавка::здійснити(
// М,
// мавка::НЕДІЙСНЕ,
// елемент_черги_здійснення.значення,
// елемент_черги_здійснення.задіяні,
// мавка::Місцезнаходження { пусто, 0 }
// );
// якщо мавка::отримати_інформацію_падіння(М, інформація_падіння::адреса) {
// мавка::пристрій::надрукувати_інформацію_падіння(
// М,
// інформація_падіння
// );
// мавка::знищити_інформацію_падіння(М, інформація_падіння);
// вернути 1;
// }
// }
// вернути 0;
// }
дія старт(кількість_аргументів: природне, аргументи: *ю8) -> ц32 {
змінна шлях_до_теки_модулів_ю8: ю8;
змінна шлях_до_теки_паків_ю8: ю8;
змінна шлях_до_стандартного_вводу_ю8 = ю8"діалог";
змінна шлях_до_файлу: ю8;
змінна знайдено_шлях_до_файлу = ні;
змінна п: природне;
змінна успіх: логічне;
змінна абсолютний_шлях_до_файлу_модуля: *мавка::ПредметДаних;
змінна шлях_до_теки_модулів: *мавка::ПредметДаних;
змінна шлях_до_теки_паків: *мавка::ПредметДаних;
змінна шлях_до_стандартного_вводу: *мавка::ПредметДаних;
змінна назва_модуля: *мавка::ПредметТексту;
змінна М: *мавка::Машина;
змінна кількість_назв_взяти: природне;
змінна назви_взяти: **мавка::ПредметТексту;
змінна інформація_падіння: мавка::ІнформаціяПадіння;
змінна текст_помилки: кд;
змінна елемент_черги_здійснення: мавка::ЕлементЧергиЗдійснення;
змінна результат: ц32;
п = 1;
поки п < кількість_аргументів {
якщо перевірити_чи_ю8_починається_на(аргументи[п], ю8"--") {
} інакше {
шлях_до_файлу = аргументи[п];
знайдено_шлях_до_файлу = так;
п = кількість_аргументів; // Вийти з циклу
}
п += 1;
}
М = мавка::пристрій::створити_машину();
мавка::пристрій::визначити_глобально_мавка(М);
мавка::пристрій::визначити_глобальні_виводу(М);
мавка::бібліотека::ініціалізувати(М);
якщо знайдено_шлях_до_файлу {
якщо КД::перевірити_чи_ю8_рівні(шлях_до_файлу, ю8"версія") {
змінна версія_мавки_кд: кд;
пристрій_мавки_отримати_версію(версія_мавки_кд.розмір::адреса, версія_мавки_кд.дані::адреса);
мавка::надрукувати_кд(М, версія_мавки_кд);
мавка::звільнити(М, версія_мавки_кд.дані);
вернути 0;
}
успіх = мавка::пристрій::розібрати_шлях_початкового_модуля(
М,
мавка::створити_дані(М, шлях_до_файлу.розмір, шлях_до_файлу.дані),
абсолютний_шлях_до_файлу_модуля::адреса,
шлях_до_теки_модулів::адреса,
шлях_до_теки_паків::адреса,
назва_модуля::адреса
);
якщо не успіх {
мавка::вивести_кд(М, "Неможливо виконати файл \"");
пристрій_мавки_вивести_ю8(шлях_до_файлу.розмір, шлях_до_файлу.дані);
мавка::вивести_кд(М, "\"\р");
вернути 1;
}
мавка::пристрій::записати_шлях_до_теки_модулів_та_паків(
М,
шлях_до_теки_модулів,
шлях_до_теки_паків,
);
мавка::пристрій::взяти_файл(
М,
абсолютний_шлях_до_файлу_модуля,
назва_модуля,
мавка::Місцезнаходження { абсолютний_шлях_до_файлу_модуля, 0 }
);
якщо мавка::отримати_інформацію_падіння(М, інформація_падіння::адреса) {
мавка::пристрій::надрукувати_інформацію_падіння(
М,
інформація_падіння
);
мавка::знищити_інформацію_падіння(М, інформація_падіння);
вернути 1;
}
} інакше {
успіх = пристрій_мавки_отримати_поточний_шлях_процесу(
шлях_до_теки_модулів_ю8.розмір::адреса,
шлях_до_теки_модулів_ю8.дані::адреса
);
якщо не успіх {
мавка::надрукувати_кд(М, "Неможливо отримати поточний шлях процесу.");
вернути 1;
}
успіх = пристрій_мавки_отримати_теку_до_паків(
шлях_до_теки_модулів_ю8.розмір,
шлях_до_теки_модулів_ю8.дані,
шлях_до_теки_паків_ю8.розмір::адреса,
шлях_до_теки_паків_ю8.дані::адреса
);
якщо не успіх {
мавка::надрукувати_кд(М, "Неможливо отримати теку до паків.");
вернути 1;
}
шлях_до_теки_модулів = мавка::створити_дані(М, шлях_до_теки_модулів_ю8.розмір, шлях_до_теки_модулів_ю8.дані);
шлях_до_теки_паків = мавка::створити_дані(М, шлях_до_теки_паків_ю8.розмір, шлях_до_теки_паків_ю8.дані);
шлях_до_стандартного_вводу = мавка::створити_дані(М, шлях_до_стандартного_вводу_ю8.розмір, шлях_до_стандартного_вводу_ю8.дані);
мавка::пристрій::записати_шлях_до_теки_модулів_та_паків(
М,
шлях_до_теки_модулів,
шлях_до_теки_паків,
);
змінна версія_мавки_кд: кд;
пристрій_мавки_отримати_версію(версія_мавки_кд.розмір::адреса, версія_мавки_кд.дані::адреса);
мавка::вивести_кд(М, "Діалог Мавки ");
мавка::надрукувати_кд(М, версія_мавки_кд);
мавка::звільнити(М, версія_мавки_кд.дані);
мавка::пристрій::почати_діалог(
М,
шлях_до_теки_модулів,
шлях_до_стандартного_вводу
);
}
// результат = обробити_чергу_здійснення(М);
// якщо результат != 0 {
// вернути результат;
// }
// потім: запустити очікувач подій
вернути 0;
}