Простое, но архитектурно отталкивающее решение - использовать глобальную общую переменную.
Многие скажут вам, что это плохая техника кодирования. Они правы. Но вы не просите совета по передовой практике.
Просто создайте такую переменную как в вызывающем, так и в вызываемом. Процедуры, которым это не нужно, не пропустят.
Одна из ваших "обычных" программ:
/* p1.p */
message "p1, I'm normal.".
run common.p.
Ваша «особенная» программа:
/* p2.p */
define new global shared variable special as character no-undo.
message "p2, I'm special!".
run common.p.
message "special = " special.
Общая программа:
/* common.p */
define new global shared variable special as character no-undo.
message "common stuff...".
if program-name(2) = "p2.p" then special = "special value".
return.
Вы можете определять НОВУЮ ГЛОБАЛЬНУЮ переменную SHARED сколько угодно раз, и вы получите только одну ее копию. «Новый» не перезаписывает существующие переменные (если вы не укажете GLOBAL, он будет вести себя иначе).
Вы не просили об этом, и, возможно, вам это не нужно, но проверка имени программы (2) заглядывает в стек вызовов, чтобы узнать, был ли common.p вызван p2.p.
Существуют и другие, более сложные способы сделать это, но все они сводятся к одной и той же проблеме - вы создаете основу для очень уродливой связи между вашей «специальной» программой и уже не универсальной «общей» программой.
person
Tom Bascom
schedule
24.04.2012