Зачем использовать CASE при двух значениях?
Можно обойтись вложенными IF-ELSE, но это почти те же яйца только в профиль
program1()
IF($st1 = 0)
program2()
IF($st2 = 0)
program3()
IF($st3 = 0)
program4()
IF($st4 = 0)
program5()
IF($st5 = 0)
// И так далее
ELSE
exit()
END_IF
ELSE
exit()
END_IF
ELSE
exit()
END_IF
ELSE
exit()
END_IF
ELSE
exit()
END_IF
В твоём случае, даже вложенность не нужна если exit что-то завершает вместе с скриптом. Или в начале заданы все $st1, $st2... = 1
program1()
IF($st1 = 1)
exit()
END_IF
program2()
IF($st2 = 1)
exit()
END_IF
program3()
IF($st3 = 1)
exit()
END_IF
program4()
IF($st4 = 1)
exit()
END_IF
program5()
IF($st5 = 1)
exit()
END_IF
// И так далее
Смотря что ты хочешь сделать и какой вокруг остальной код. У тебя каждая подпрограмма ставит флаг "вызывать exit() или нет"? Смотря что в это эксите. Если это так и это флаг, то почему вызов exit() не перенести в сами подпрограммы. Вложенность не уберётся, но она станет поприятней
program1()
IF($st1 = 0)
program2()
IF($st2 = 0)
program3()
IF($st3 = 0)
program4()
IF($st4 = 0)
program5()
IF($st5 = 0)
// И так далее
END_IF
END_IF
END_IF
END_IF
END_IF
Если подпрограммы всегда строго идут в таком порядке, можно пойти дальше и условия работы подпрограммы перенести прямо в них
SUB(program2)
IF($st1 = 0)
// внутренности
END_IF
END_SUB
SUB(program3)
IF($st2 = 0)
// внутренности
END_IF
END_SUB
// и т.д.
Тогда код вызова становится совсем прямым
program1()
program2()
program3()
program4()
program5()