// 2025-2026 Богданович Давид Когут Прихожденко (кдб.дійсність.укр)
взяти визначення мавка/пристрій;
простір мавка {
простір пристрій {
дія почати_діалог(
М: *Машина,
шлях_до_теки_модулів: *ПредметДаних,
шлях_до_стандартного_вводу: *ПредметДаних
) {
змінна сирий_текст: кд;
змінна успіх = ні;
змінна зупинено = ні;
змінна перед = "- ";
змінна знаки: розбирач::Знаки;
змінна помилка_розбору_на_знаки: розбирач::ПомилкаРозборуНаЗнаки;
змінна сполуки: розбирач::Сполуки;
змінна помилка_розбору_на_сполуки: розбирач::ПомилкаРозборуНаСполуки;
змінна перекладений_код: *ПредметКоду = пусто;
змінна помилка_перекладу: перекладач::ПомилкаПерекладу;
змінна інформація_падіння: ІнформаціяПадіння;
змінна кінець_файлу = природне(ні);
змінна предмет_модуля = створити_модуль(
М,
створити_текст(М, "діалог")
);
змінна дійсність = створити_дійсність(
М,
М.глобальна_дійсність
);
поки не зупинено {
крок_початок:
успіх = пристрій_мавки_читати_кд(
перед.розмір,
перед.дані,
сирий_текст.розмір::адреса,
сирий_текст.дані::адреса,
природне(так),
кінець_файлу::адреса
);
якщо не успіх {
змінна помилка = "Помилка читання входу діалогу.";
пристрій_мавки_надрукувати_кд(помилка.розмір, помилка.дані);
стрибнути крок_початок;
}
якщо кінець_файлу {
зупинено = так;
стрибнути крок_кінець;
}
якщо сирий_текст.розмір == 0 {
стрибнути крок_початок;
}
успіх = розбирач::розібрати_на_знаки(
М,
сирий_текст,
знаки::адреса,
помилка_розбору_на_знаки::адреса
);
якщо не успіх {
змінна рядок = розбирач::отримати_рядок_помилки_розбору_на_знаки(
М,
помилка_розбору_на_знаки
);
змінна помилка = "Не вдалось розібрати текст входу діалогу.";
пристрій_мавки_надрукувати_кд(помилка.розмір, помилка.дані);
стрибнути крок_початок;
}
успіх = розбирач::розібрати_знаки_на_сполуки(
М,
сирий_текст,
знаки,
сполуки::адреса,
помилка_розбору_на_сполуки::адреса
);
якщо не успіх {
змінна рядок = розбирач::отримати_рядок_помилки_розбору_на_сполуки(
М,
помилка_розбору_на_сполуки
);
змінна помилка = "Не вдалось розібрати знаки входу діалогу.";
пристрій_мавки_надрукувати_кд(помилка.розмір, помилка.дані);
стрибнути крок_початок;
}
успіх = перекласти_в_код(
М,
шлях_до_стандартного_вводу,
сирий_текст,
знаки,
сполуки,
перекладений_код::адреса,
помилка_перекладу::адреса
);
якщо не успіх {
змінна помилка = "Не вдалось перекласти сполуки на код.";
пристрій_мавки_надрукувати_кд(помилка.розмір, помилка.дані);
стрибнути крок_початок;
}
змінна предмет_дії = створити_дію(
М,
дійсність,
створити_текст(М, "діалог"),
М.предмет_пустої_послідовності,
пусто,
перекладений_код,
шлях_до_теки_модулів
);
змінна розмір_історії = М.історія_здійснення.розмір;
змінна розмір_накопичувача_значень = М.накопичувач_значень.розмір;
змінна елемент_історії = покласти_в_історію_здійснення(
М,
дійсність,
ПРЕДМЕТ(предмет_модуля),
предмет_дії,
Задіяні { 0, пусто, 0, пусто },
Місцезнаходження { шлях_до_стандартного_вводу, 0 }
);
змінна результат = виконати_код(
М,
М.накопичувач_значень::адреса,
елемент_історії.спроби::адреса,
дійсність,
ПРЕДМЕТ(предмет_модуля),
перекладений_код,
0,
предмет_дії.шлях_до_теки_модулів
);
якщо отримати_інформацію_падіння(М, інформація_падіння::адреса) {
пристрій::надрукувати_інформацію_падіння(
М,
інформація_падіння
);
знищити_інформацію_падіння(М, інформація_падіння);
вимкнути_стан_падіння(М);
} інакше {
надрукувати_значення(М, результат, 2, 0);
}
видалити_з_історії_здійснення(М, М.історія_здійснення.розмір - розмір_історії);
М.накопичувач_значень.розмір = розмір_накопичувача_значень;
крок_кінець:
}
}
}
}