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