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