// 2026 Богданович Давид Когут Прихожденко

взяти визначення мавка;

простір мавка {
  дія почати(
    М: *Машина,
    кількість_аргументів: природне,
    аргументи: **ПредметТексту,
  ) -> ціле {
    змінна успіх: логічне;
    змінна статус_помилки: ціле;
    змінна п: природне;
    змінна шлях_до_файлу: *ПредметТексту;
    змінна абсолютний_шлях_до_файлу_модуля: *ПредметТексту;
    змінна шлях_до_біб: *ПредметТексту = пусто;
    змінна назва_модуля: *ПредметТексту;
    змінна інформація_падіння: ІнформаціяПадіння;

    п = 1;
    шлях_до_файлу = пусто;
    поки п < кількість_аргументів {
      якщо аргументи[п].значення.поч_з("-") {
        якщо аргументи[п].значення.поч_з("-Б=") {
          шлях_до_біб = М.створити_текст(кд {
            аргументи[п].значення.дані[3]::адреса,
            аргументи[п].значення.розмір - 3,
          });
        }
      } інакше {
        шлях_до_файлу = аргументи[п];
        стрибнути х;
      }

      п += 1;
    }

  х:
    якщо шлях_до_біб != пусто {
      надрукувати_кд(М, "Підключення бібліотеки наразі недоступне.");
      вернути 1;

      мавка::завантажити_РМв1(
        М,
        шлях_до_біб,
        М.створити_текст("завантажити_РМв1_бібліотеки_мавки")
      );

      якщо отримати_інформацію_падіння(М, інформація_падіння::адреса) {
        надрукувати_інформацію_падіння(
          М,
          інформація_падіння
        );

        знищити_інформацію_падіння(М, інформація_падіння);

        статус_помилки = 1;
        стрибнути вихід_з_помилкою;
      }
    }

    якщо шлях_до_файлу == пусто {
      М.шлях_до_теки_модулів = отримати_поточний_шлях_процесу(М);
      якщо М.шлях_до_теки_модулів == пусто {
        надрукувати_кд(М, "Неможливо отримати поточний шлях процесу.");
        вернути 1;
      }

      М.шлях_до_теки_паків = отримати_теку_до_паків(
        М,
        М.шлях_до_теки_модулів,
      );
      якщо М.шлях_до_теки_паків == пусто {
        надрукувати_кд(М, "Неможливо отримати теку до паків.");
        вернути 1;
      }

      вивести_кд(М, "Розмова Мавки ");
      надрукувати_кд(М, М.версія.предмет_тексту.значення);

      почати_розмову(
        М,
      );
    } інакше {
      // потім: розібрати команди

      успіх = розібрати_шлях_початкового_модуля(
        М,
        шлях_до_файлу,
        абсолютний_шлях_до_файлу_модуля::адреса,
        М.шлях_до_теки_модулів::адреса,
        М.шлях_до_теки_паків::адреса,
        назва_модуля::адреса
      );
      якщо не успіх {
        вивести_кд(М, "Неможливо виконати файл \"");
        вивести_кд(М, шлях_до_файлу.значення);
        вивести_кд(М, "\"\р");
        статус_помилки = 1;
        стрибнути вихід_з_помилкою;
      }

      взяти_файл(
        М,
        абсолютний_шлях_до_файлу_модуля,
        назва_модуля,
        Місцезнаходження { абсолютний_шлях_до_файлу_модуля, 0 }
      );

      якщо отримати_інформацію_падіння(М, інформація_падіння::адреса) {
        надрукувати_інформацію_падіння(
          М,
          інформація_падіння
        );

        знищити_інформацію_падіння(М, інформація_падіння);

        статус_помилки = 1;
        стрибнути вихід_з_помилкою;
      }
    }

    вернути 0;

  вихід_з_помилкою:
    вернути статус_помилки;
  }
}