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

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

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

    якщо розмір_позиційних > позиція {
      вихід_значення::вміст = задіяні.дані[позиція];

      знайдено = так;
    }

    якщо задіяні.кількість_імен > 0 {
      змінна п: п32 = 0;

      поки п < задіяні.кількість_імен {
        змінна елемент = задіяні.дані[розмір_позиційних + задіяні.кількість_імен + п].дані як *Предмет як *ПредметТексту;

        якщо перевірити_чи_предмети_тексту_рівні(М, елемент, назва) {
          вихід_значення::вміст = задіяні.дані[розмір_позиційних + п];

          вернути так;
        }

        п += 1;
      }
    }

    вернути знайдено;
  }

  дія перебрати_позиційні_задіяні(
    М: *Машина,
    задіяні: Задіяні,
    дія_перебору: ДіяПереборуПозиційнихЗадіяних,
    аргумент: невідома_адреса
  ) {
    змінна розмір_позиційних = задіяні.розмір - (задіяні.кількість_імен * 2);
    змінна п: п32 = 0;

    поки п < розмір_позиційних {
      дія_перебору(
        М,
        задіяні,
        розмір_позиційних,
        п,
        задіяні.дані[п],
        аргумент
      );

      п += 1;
    }
  }

  дія перебрати_іменовані_задіяні(
    М: *Машина,
    задіяні: Задіяні,
    дія_перебору: ДіяПереборуІменованихЗадіяних,
    аргумент: невідома_адреса
  ) {
    змінна розмір_позиційних = задіяні.розмір - (задіяні.кількість_імен * 2);
    змінна п: п32 = 0;

    поки п < розмір_позиційних {
      дія_перебору(
        М,
        задіяні,
        розмір_позиційних + задіяні.кількість_імен + п,
        задіяні.дані[розмір_позиційних + задіяні.кількість_імен + п].дані як *Предмет як *ПредметТексту,
        задіяні.дані[розмір_позиційних + п],
        аргумент
      );

      п += 1;
    }
  }

  дія звільнити_задіяні(
    М: *Машина,
    задіяні: Задіяні
  ) {
    якщо задіяні.вид == ВидЗадіяних1 {
      вернути; // задіяні з накопичувача діяльності не можна звільняти
    }

    якщо задіяні.дані != пусто {
      звільнити(М, задіяні.дані);
    }
  }
}