Этот код писал школьник, который не знаком с программированием от слова "совсем".
У тебя два выбора:
- переписать всё с нуля
- бежать оттуда
Тот факт, что ты сам этого не понял, говорит о том, что твой уровень программирования на том же уровне.
Законно ли писать программу из процедур без in/out параметров, которые оперируют глобальными переменными?
Нет, не законно, согласно законам программирования DRY/SOLID и прочих. Но ты же о них не слышал, не так ли?