How many times have you tried to find the source file, library, and member used to compile a given program, and you're left with blanks? The problem is that the ILE compilers are two-phase compilers. The old RPG III compiler was essentially a single-phase compiler. So the compiled program was created directly from the source code. It's relatively easy to insert the name of the source file, library, and member used to create an RPG III program.
But RPG IV programs have a two-phase ILE compiler. So DSPPGM or DSPOBJD do not show you the source file, library, and member name used to create the program. Why? Because a source member was not used to create the program.
With ILE compilers, source code is used to create a *MODULE object. Then the binder, the CRTPGM command, takes one or more *MODULE objects and "binds" it into a *PGM object. Consequently, the *PGM is created not from source code, but from one or more *MODULE objects.
It is relatively easy, using the DSPPGM command, to see the *MODULE object names that were used to create the *PGM object. On page 3 of the DSPPGM command's output is the list of module names used to create the program. Even if only one module was used, it is listed. From this module list, you may select various options, including option 5 (Display). This option runs an internal routine that is effectively a Display Module (DSPMOD) command. But it does so for the module in the program itself. From the DSPMOD command output, you can see the source file, library, and module names that were used to create the *MODULE object. In a single-module program, that member name is the source member used to "create the program."
A few years ago, I wrote an article on the use of the QBNLPGMI and QBNLSPGM APIs. These APIs enumerate (i.e., list) the modules used in a program or service program, respectively. In effect, they do the same thing as page 3 of the DSPPGM or DSPSRVPGM command, but they output to a variable or user space.
So the old habit of using DSPOBJD to view the source member name used to create a program is now effectively obsolete. Use DSPPGM, DSPSRVPGM, and those two APIs to get the information you need.
Bob Cozzi is a programmer/consultant, writer/author, and software developer of the RPG xTools, a popular add-on subprocedure library for RPG IV. His book The Modern RPG Language has been the most widely used RPG programming book for nearly two decades. He, along with others, speaks at and runs the highly-popular RPG World conference for RPG programmers.
LATEST COMMENTS
MC Press Online