Блин, программа настолько запутана, что только самому разбираться.
У меня по END_SUB не выходит, а почему-то перепрыгивает без всяких GOTO выше в тело подпрограммы ... и так пару раз делает, только после этого выходит.
Это я понял поставив везде LOGWRITE ("1"), с разными индексами.
В порпрограмме есть инклюды, в которых тоже подпрограммы.
Вот когда я из подпрограммы вынес инклюд, сделав его вызов по условиям работы этой подпрограммы, всё стало работать верно.
Выходит или я уже совсем запутался в коде, или в подпрограмме нельза делать инклюды в которых есть другие инклюды и вызовы подпрограмм.
ГаЛоВа кругом =).
Придется вынимать инклюды из подпрограммы, иначе не разберусь, а вам сюда давать огромный код бессмысленно. Там в основной проге 3 800 строк, и инклюдов полтора десятка с 500 до 2000 строк в каждом.
Не, не помогло.
В теле СУБа есть цикл FOR, и по команде END_SUB, программа перепрыгивает в этот цикл.
SUB (oprklass)
...
...
...
FOR ($fs = 0, $fs < $ind_klass, 1)
logwrite ("1")
...
...
...
enklass:
logwrite ("2")
END_SUB
При выполнении этого кода в логе отображается:
1
2
1
2
1
2
и т.д.
Т.е. почему-то вместо выхода из подпрограммы, команда END_SUB заставляет перепрыгнуть в тело цикла. При этом, в цикле есть условие, которое по ELSE перекидывает выполнение на enklass:.
Голова уже почти лопнула ...