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

взяти визначення КД;
взяти визначення пристрій_мавки;

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

  М = пристрій_мавки_створити_машину();

  текстові_аргументи = мавка::виділити<*мавка::ПредметТексту>(М, кількість_аргументів);
  п = 0;
  поки п < кількість_аргументів {
    текстові_аргументи[п] = М.створити_текст(аргументи[п]);

    п += 1;
  }

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

  мавка::звільнити(М, текстові_аргументи);
  мавка::розлаштувати_машину(М);

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

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

  аргументи_кд = пристрій_мавки_виділити(кількість_аргументів * кд.розмір) як *кд;
  п = 0;
  поки п < кількість_аргументів {
    успіх = пристрій_мавки_перекодувати_ю8_в_кд(
      аргументи[п].розмір,
      аргументи[п].дані,
      аргументи_кд[п].розмір::адреса,
      аргументи_кд[п].дані::адреса,
      позиція_помилки::адреса,
    );
    якщо не успіх {
      кількість_аргументів = п;
      код_помилки = 1;
      стрибнути вихід;
    }

    п += 1;
  }

  код_помилки = почати_мавку_кд_ю8(
    кількість_аргументів,
    аргументи_кд
  );

вихід:
  п = 0;
  поки п < кількість_аргументів {
    пристрій_мавки_звільнити(аргументи_кд[п].дані);
    п += 1;
  }
  пристрій_мавки_звільнити(аргументи_кд);
  вернути код_помилки;
}