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