PROGRAM-NAME( n )The numeric argument. If n is 1, the name of the current program is returned. If n is 2, the name of the calling program is returned. If there is no calling program then you have reached the top of the call stack and the AVM returns the Unknown value (?).This procedure returns the names of any procedure(s) that called it, and displays the number of levels that the procedure was nested:
/* Note this program should be run as a subroutine. *//* The deeper the nesting, the better the illustration. */DEFINE VARIABLE level AS INTEGER NO-UNDO INITIAL 1.REPEAT WHILE PROGRAM-NAME(level) <> ?:DISPLAY LEVEL PROGRAM-NAME(level) FORMAT "x(30)".level = level + 1.END.
![]()
If you execute a procedure directly from the Procedure Editor or the User Interface Builder, then PROGRAM-NAME(1) returns the name of a temporary file rather than the name of the actual procedure file.
![]()
The PROGRAM-NAME function is useful when developing on-line help. For example, you can use the following code in your help routine to produce a program trace:
DEFINE VARIABLE ix AS INTEGER NO-UNDO INITIAL 2.DEFINE VARIABLE plist AS CHARACTER NO-UNDO FORMAT "x(70)".FORM plistWITH FRAME what-prog OVERLAY ROW 10 CENTERED 5 DOWN NO-LABELSTITLE " Program Trace "./* ix = 2, so skip the current routine: PROGRAM-NAME(1) */DO WHILE PROGRAM-NAME(ix) <> ?:IF ix = 2 THENplist = "Currently in : " + PROGRAM-NAME(ix).ELSEplist = "Which was called by: " + PROGRAM-NAME(ix).ix = ix + 1.DISPLAY plist WITH FRAME what-prog.DOWN WITH FRAME what-prog.END.PAUSE.HIDE FRAME what-prog.
![]()
If the procedure you reference is an internal procedure, then PROGRAM-NAME returns a string with the following form:
"internal-procedure-name source-file-name"
![]()
If the procedure you reference is a user interface trigger associated with a widget, then PROGRAM-NAME returns a string with the following form:
"USER-INTERFACE-TRIGGER source-file-name"
![]()
If the procedure you reference is a user interface trigger that uses the ANYWHERE keyword, then PROGRAM-NAME returns a string with the following form:
"SYSTEM-TRIGGER source-file-name"
![]()
If the procedure you reference is a session database trigger, then PROGRAM-NAME returns a string with the following form:
"type-TRIGGER source-file-name"Where type is either ASSIGN, CREATE, DELETE, FIND, or WRITE.
![]()
If the call stack contains a method reference, then PROGRAM-NAME returns a string with the following form:
"method-name class-file-name"Where class-file-name is the name of the class definition (.cls) file in which method-name is implemented.
© 2012 Progress Software Corporation and/or its subsidiaries or affiliates. |