Оказывается нельзя при декларировании SUB в перечне указывать аббревиатуру переменной, используемой
в основной MAIN программе (даже если обе они в основной программе имеют разные названия и абсолютно независимы). Контрольный пример
SUB(PROG, $a) // заглушка
move(100, 100)
END_SUB
//============ I VAR без sub ====================
$a = 100
$b = 50
WAITMS(500)
// PROG($b) - пустышка
print(" $a = ",$a) // = 100
//=============== II var c sub ==========
$a = 100
$b = 50
WAITMS(500)
PROG($b) // $ax меняет
print("c SUB $a = ",$a) // не равно 100
halt
Если в SUB(PROG, $a) вставить любое другое название переменной, напр, $c, то все работает правильно.
В реальных скриптах у меня переменная в основной программе в этих случаях могла принимать случайное не нулевое значение (причем в некоторых ветвях программы это не наблюдалось), пока я не изменял запись аббревиатуры в SUB на другую.