// 2025-2026 Богданович Давид Когут Прихожденко (кдб.дійсність.укр)
взяти визначення мавка/машина;
простір мавка {
дія отримати_інформацію_падіння(
М: *Машина,
вихід: *ІнформаціяПадіння
) -> логічне {
якщо М.стан_падіння {
змінна інформація_падіння: ІнформаціяПадіння;
інформація_падіння.значення = М.значення_падіння;
змінна шлях = М.місцезнаходження_падіння.шлях_або_код як *ПредметДаних;
змінна рядок = М.місцезнаходження_падіння.рядок_або_позиція_вказівки;
якщо шлях != пусто {
якщо шлях.клас == М.клас_Код {
змінна код = шлях як *ПредметКоду;
шлях = код.шлях;
рядок = природне(знайти_рядок_вказівки(код.місцезнаходження_вказівок, п32(рядок)));
}
}
інформація_падіння.місцезнаходження = МісцезнаходженняІнформаціїПадіння {
шлях = шлях,
рядок = рядок,
};
змінна накопичувач_історії = зробити_накопичувач<ЕлементІсторіїЗдійсненняІнформаціїПадіння>(М, 0);
змінна п: природне = 0;
поки п < М.історія_здійснення.розмір {
змінна елемент_історії = М.історія_здійснення.дані[п];
змінна елемент_історії_виконання: ЕлементІсторіїЗдійсненняІнформаціїПадіння;
якщо елемент_історії.предмет_дії != пусто {
змінна шлях = елемент_історії.місцезнаходження.шлях_або_код як *ПредметДаних;
змінна рядок = елемент_історії.місцезнаходження.рядок_або_позиція_вказівки;
якщо шлях != пусто {
якщо шлях.клас == М.клас_Код {
змінна код = шлях як *ПредметКоду;
шлях = код.шлях;
рядок = природне(знайти_рядок_вказівки(код.місцезнаходження_вказівок, п32(рядок)));
}
}
елемент_історії_виконання.місцезнаходження = МісцезнаходженняІнформаціїПадіння {
шлях = шлях,
рядок = рядок
};
елемент_історії_виконання.назва = елемент_історії.предмет_дії.назва;
покласти_в_накопичувач<ЕлементІсторіїЗдійсненняІнформаціїПадіння>(М, накопичувач_історії::адреса, елемент_історії_виконання);
}
п += 1;
}
обернути_накопичувач<ЕлементІсторіїЗдійсненняІнформаціїПадіння>(М, накопичувач_історії::адреса);
інформація_падіння.розмір_історії = накопичувач_історії.розмір;
інформація_падіння.історія = накопичувач_історії.дані;
вихід::вміст = інформація_падіння;
вернути так;
}
вернути ні;
}
дія знищити_інформацію_падіння(
М: *Машина,
інформація_падіння: ІнформаціяПадіння
) {
звільнити(М, інформація_падіння.історія);
}
}