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

простір мавка {
  простір пристрій {
    внутрішня дія дія_виводу(М: адреса<Машина>, значення: кд) {
      вивести_кд(М, значення);
    }

    дія взяти_файл(
      М: адреса<Машина>,
      шлях_до_файлу: адреса<ПредметДаних>,
      назва_модуля: адреса<ПредметТексту>,
      місцезнаходження: Місцезнаходження
    ) -> ЗначенняАбоСтанПадіння {
      змінна успіх: логічне = ні;
      змінна значення = НЕДІЙСНЕ;
      змінна розмір_файлу: природне = 0;
      змінна дані_файлу: памʼять<п8> = пусто;
      змінна сирий_текст: кд = кд { 0, пусто };
      змінна знаки: розбирач::Знаки;
      змінна помилка_розбору_на_знаки: розбирач::ПомилкаРозборуНаЗнаки;
      змінна сполуки: розбирач::Сполуки;
      змінна помилка_розбору_на_сполуки: розбирач::ПомилкаРозборуНаСполуки;
      змінна перекладений_код: адреса<ПредметКоду> = пусто;
      змінна помилка_перекладу: перекладач::ПомилкаПерекладу;
      змінна шлях_до_теки_модулів_ю8: ю8;
      змінна шлях_до_теки_модулів: адреса<ПредметДаних> = пусто;

      якщо знайти_взяте_значення(М, шлях_до_файлу, значення::адреса) {
        вернути значення;
      }

      успіх = пристрій_мавки_отримати_теку_шляху(
        шлях_до_файлу.розмір,
        шлях_до_файлу.дані,
        шлях_до_теки_модулів_ю8.розмір::адреса,
        шлях_до_теки_модулів_ю8.дані::адреса,
        1
      );

      якщо не успіх {
        вернути МІСЦЕПАДІННЯ(М, створити_текст(М, "Не вдалося отримати теку шляху."), місцезнаходження);
      }

      шлях_до_теки_модулів = створити_дані(М, шлях_до_теки_модулів_ю8.розмір, шлях_до_теки_модулів_ю8.дані);

      успіх = пристрій_мавки_прочитати_файл(
        шлях_до_файлу.розмір,
        шлях_до_файлу.дані,
        розмір_файлу::адреса,
        дані_файлу::адреса
      );

      якщо не успіх {
        вернути МІСЦЕПАДІННЯ(М, створити_текст(М, "Не вдалося прочитати файл."), місцезнаходження);
      }

      успіх = пристрій_мавки_перекодувати_ю8_в_кд(
        розмір_файлу,
        дані_файлу,
        сирий_текст.розмір::адреса,
        сирий_текст.дані::адреса,
        пусто
      );

      якщо не успіх {
        звільнити_памʼять(М, дані_файлу);

        вернути МІСЦЕПАДІННЯ(М, створити_текст(М, "Не вдалося перекодувати файл в код мавки."), Місцезнаходження { шлях_до_файлу, 0 });
      }

      успіх = розбирач::розібрати_на_знаки(
        М,
        сирий_текст,
        знаки::адреса,
        помилка_розбору_на_знаки::адреса
      );

      якщо не успіх {
        змінна рядок = розбирач::отримати_рядок_помилки_розбору_на_знаки(
          М,
          помилка_розбору_на_знаки
        );

        вернути МІСЦЕПАДІННЯ(М, створити_текст(М, "Не вдалось розібрати на знаки."), Місцезнаходження { шлях_до_файлу, рядок });
      }

      успіх = розбирач::розібрати_знаки_на_сполуки(
        М,
        сирий_текст,
        знаки,
        сполуки::адреса,
        помилка_розбору_на_сполуки::адреса
      );

      якщо не успіх {
        змінна рядок = розбирач::отримати_рядок_помилки_розбору_на_сполуки(
          М,
          помилка_розбору_на_сполуки
        );
        увімкнути_стан_падіння(
          М,
          МАШИННИЙ_ПРЕДМЕТ(створити_текст(М, "Не вдалось розібрати на сполуки.")),
          Місцезнаходження { шлях_до_файлу, рядок }
        );
        вернути НЕДІЙСНЕ;
      }

      успіх = перекласти_в_код(
        М,
        створити_дані(М, шлях_до_файлу.розмір, шлях_до_файлу.дані),
        сирий_текст,
        знаки,
        сполуки,
        перекладений_код::адреса,
        помилка_перекладу::адреса
      );

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

      якщо не успіх {
        вернути МІСЦЕПАДІННЯ(М, створити_текст_без_копіювання(М, помилка_перекладу.повідомлення.розмір, помилка_перекладу.повідомлення.дані), Місцезнаходження { шлях_до_файлу, помилка_перекладу.рядок });
      }

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

      записати_взяте_значення(
        М,
        шлях_до_файлу,
        МАШИННИЙ_ПРЕДМЕТ(предмет_модуля)
      );

      змінна предмет_дії_модуля = створити_дію(
        М,
        М.глобальна_дійсність,
        назва_модуля,
        М.предмет_пустої_послідовності,
        пусто,
        перекладений_код як адреса<ПредметКоду>,
        шлях_до_теки_модулів
      );

      змінна результат = предмет_дії_здійснити(
        М,
        МАШИННИЙ_ПРЕДМЕТ(предмет_модуля),
        предмет_дії_модуля,
        Задіяні { 0, пусто, 0, пусто },
        місцезнаходження
      );

      якщо М.стан_падіння {
        видалити_взяте_значення(М, шлях_до_файлу);
      }

      вернути МАШИННИЙ_ПРЕДМЕТ(предмет_модуля);
    }
  }
}