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