System Functions

PGM( )

Return Program Line

Format

PGM(lineno[,prog_level][,ERR=stmtref])

Where:

lineno

Statement line number. Numeric expression. If between integer from 1 and 64999, defines line number. -1, -2, or -3 returns program names instead. See Description.

prog_level

Optional numeric value indicating which program level to return.

stmtref

Program line number or statement label to which to transfer control.

Returns

String, compiled format of statement.

Description

The PGM( ) function returns a string containing the internal (compiled) format of a given program statement number. If the line number is -1, the main (level 1) program name is returned; -2 returns the current program name, and -3 returns the complete name of the program as specified on the CALL/LOAD/PERFORM or RUN.

If the statement number does not exist and an ERR= option is specified, PxPlus returns an Error #21: Statement number is invalid and transfers control to stmtref. If the statement number does not exist and the ERR= option is omitted, PxPlus returns the next higher statement.

A typical occasion to use the prog_level would be to obtain lines from programs higher in the call stack, such as X$=lst(pgm(1,tcb(12)-1)), which would return the first line of the calling program.

Example

The following examples illustrate different uses for the PGM( ) function:

Example 1:

1030 SWAPTST:
2:
2:A$=pgm(-1)
2:B$=pgm(-2)
2:print A$," | ",B$

C:\OTHER\PGM\VX_MAINPR | C:\OTHER\PGM\PVX_SUBPR

Example 2:

0010 ! testpgm.-3
0020 call pgn+";label1;additional info"
0030 stop
0040 LABEL1:
0050 print "pgm(-3)='",pgm(-3),"'"
0060 exit

pgm(-3)='C:\PVX\testpgm.-3;label1;additional info'

Example 3:

0380 rem
0390 input "Enter statement to display OR <F4> to Stop: ",A
0400 if ctl<>4 then let X$=pgm(A,err=0440) else goto 0430
0410 print lst(X$)
0420 goto 0390
0430 print "DONE"; stop
0440 print "Error Transfer Works"; stop
64999 print "Cannot find statement"; end

->run
Enter statement to display OR <F4> to Stop: 400
0400 if ctl<>4 then let X$=pgm(A,err=0440) else goto 0430
Enter statement to display OR <F4> to Stop: 7000
64999 print "Cannot find statement"; end
Enter statement to display OR <F4> to Stop: <F4> (not printable)
DONE

->run
Enter statement to display OR <F4> to Stop: 65999
Error Transfer Works