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