MODNAME
WSupported on Windows
|
USupported on Unix
|
VSupported on OpenVMS
|
NSupported in Synergy .NET
|
xcall MODNAME(choice, routine, [line][, file_number])
Arguments
choice
An expression that determines which routine’s name is returned: (n)
0 = Current routine
1 = Previous routine
2 = Routine before the previous routine
and so on…
routine
The variable that will be loaded with the name of the specified routine. (a)
line
(optional) The variable that will be loaded with the line number of the XCALL statement in the specified routine. (n)
file_number
(optional) The variable that will be loaded with the number of the .INCLUDEd source file that contains the XCALL statement in the specified routine. (n)
Discussion
The MODNAME subroutine returns the name of the current or a previous routine. If the name returned is that of the main routine, it is in the form “MAIN$name,” where name is the name of the main routine.
Routine is returned with blanks if you specify a nonexistent routine in choice. For example, if choice is 10 but the current call chain only has six routines, MODNAME returns blanks. With objects, the method signature is returned, and it can be quite large.
If choice is 0, line is the line number of the MODNAME statement. If choice is 1, line is the line number (in the previous routine) of the XCALL statement that called the current routine; and so forth.
When using the .INCLUDE compiler directive to include source code, use file_number in addition to line to uniquely identify the source file in which line exists. Because the file that contains the MODNAME routine is number 1, the first .INCLUDEd file is number 2, the second is number 3, and so forth. Each new file that is processed gets a new file number, even if it has been .INCLUDEd previously. (On .NET, file_number is always returned 0.)
With Synergy .NET, Line number information is accurate only if the program is built in debug mode. For x86 systems, if an application is built in debug mode, MODNAME may return the line number of the next executable line (if one exists). This behavior is unstable across .NET versions and platforms. |
With Synergy .NET, the file_number argument for MODNAME is always returned as 0. |
Examples
The following subroutine provides the same type of traceback information that you’d get using the TRACE command in the debugger.
subroutine showtrace .define TTCHN ,1 record i ,d4 modnam ,a32 blanks ,a32 line ,d5 proc writes(TTCHN, "Calling chain is:") ;TTCHN opened by calling routine xcall modname(i, modnam, line) ;Start with current routine do begin writes(TTCHN, "in routine " + modnam) incr i xcall modname(i, modnam, line) if (modnam .ne. blanks) display(TTCHN, "at line " + %string(line)) end until(modnam .eq. blanks) xreturn endsubroutine