// 2025-2026 Богданович Давид Когут Прихожденко (кдб.дійсність.укр)

взяти визначення мавка/бібліотека;
взяти визначення мавка/пристрій;

простір мавка {
  простір бібліотека {
    внутрішня дія машина_взяти_біб(
      М: *Машина,
      довжина_шляху: природне,
      шлях: **ПредметТексту,
      місцезнаходження: Місцезнаходження
    ) -> ЗначенняАбоСтанПадіння {
      змінна кдбм = М.користувацькі_дані_бібліотеки.значення як *КористувацькіДаніБібліотекиМавки;

      якщо довжина_шляху == 1 {
        змінна п: природне = 0;

        поки п < кдбм.додані_модулі.розмір {
          змінна додмод = кдбм.додані_модулі.дані[п]::адреса;
          змінна назва = додмод.назва.предмет як *ПредметТексту;

          якщо порівняти_тексти(М, шлях[0], назва) {
            якщо додмод.взято == пусто {
              змінна предмет_модуля = створити_модуль(
                М,
                назва
              );

              додмод.взято = притримати_глобально(
                М,
                предмет_модуля як *Предмет
              );

              додмод.ініціалізувати(М, предмет_модуля);

              якщо М.стан_падіння {
                відпустити_притриманий_глобально(М, додмод.взято);
                додмод.взято = пусто;

                вернути НЕДІЙСНЕ;
              }
            }

            вернути ПРЕДМЕТ(додмод.взято.предмет);
          }

          п += 1;
        }

      }

      увімкнути_стан_падіння(
        М,
        ПРЕДМЕТ(створити_текст(М, "Неможливо взяти модуль бібліотеки.")),
        місцезнаходження
      );
      вернути НЕДІЙСНЕ;
    }

    внутрішня дія дія_перед_знищенням_користувацьких_даних_бібліотеки_мавки(
      М: *Машина,
      користувацькі_дані: *КористувацькіДані
    ) {
      змінна кдбм = користувацькі_дані.значення як *КористувацькіДаніБібліотекиМавки;

      // потім: відпустити взяті і звільнити кдбм
    }

    дія ініціалізувати(М: *Машина) {
      М.налаштування.взяти_біб = машина_взяти_біб;

      змінна кдбм = виділити<КористувацькіДаніБібліотекиМавки>(М, 1);
      кдбм.додані_модулі = зробити_накопичувач<ДоданийМодуль>(М, 0);
      кдбм.інет__Слуга = пусто;
      кдбм.інет__Звʼязок = пусто;

      додати_модуль_біб(М, кдбм, М.константи_назв._мат, ініціалізувати__мат);
      додати_модуль_біб(М, кдбм, М.константи_назв._афс, ініціалізувати__афс);
      додати_модуль_біб(М, кдбм, М.константи_назв._аввід, ініціалізувати__аввід);
      додати_модуль_біб(М, кдбм, М.константи_назв._інет, ініціалізувати__інет);

      М.користувацькі_дані_бібліотеки = створити_користувацькі_дані(
        М,
        кдбм,
        дія_перед_знищенням_користувацьких_даних_бібліотеки_мавки
      );
    }
  }
}