|
I have a new RPGLE application that gets its parameters from a command. The
command is defined as:
Parm Members Type( *char ) Len( 10 ) Max( 8 )
Parm MembrTypes Type( *char ) Len( 10 ) Max( 8 )
Parm Libraries Type( *char ) Len( 10 ) Max( 8 )
Parm OmitMTypes Type( *char ) Len( 10 ) Max( 8 )
By virtue of the MAX (Maximum values allowed) parameter, set at eight, the
value issued to the CPP is a structure, starting with a 2-byte binary
number-of-values, followed by the values themselves. The nature of the
beast is that it is a variable-length structure, and "unreliable results"
follow the last entry.
In the initial development of the RPG program, I was able to process the
*Entry parms in the mainline. Essentially, this process takes the parameter
values and plants them in display file variables for display. I defined a
data structure for each parm, i.e.:
d pMbrs_ds ds 82
d pMbrs_c 5i 0
d pMbrs_a 10a Dim( 8 ) Overlay( pMbrs_ds : 3)
and processed as:
For x = 1 to pMbrs_c
Sel_Mbrs( x ) = pMbrs_a( x )
Endfor
(Sel_Mbrs is an array which overlays the eight display fields.)
In the main procedure, this works fine. However...
I would like to move this to a subproc. I have only included a snippet of
the logic, and there is more I need to do with these parameter values that I
would really REALLY like to encapsulate in a subproc. Unfortunately, I
haven't found the right incantation for passing *Entry parms to a subproc.
I already tried putting the *Entry Plist in the subproc, but that isn't
allowed.
What's interesting is that a dump shows the subproc getting the same values
as when I had this in the main proc, but once I use the value, I get
garbage. Here is a brief snippet of that subproc, preceded by the prototype
and the CallP in the main proc, with more comments below. (Note: code is
"compressed" and not in proper columns.)
d ProcessParms pr
d @Mbrs 82
d @MbrTypes 82
d @Libraries 82
d @OmitMTypes 82
c CallP ProcessParms( pMbrs
c : pMbrTypes
c : pLibraries
c : pOmitMTypes )
c Dump(a)
c Eval *inLR = *On
c *Entry plist
c parm pMbrs 82
c parm pMbrTypes 82
c parm pLibraries 82
c parm pOmitMTypes 82
p ProcessParms b
*
d ProcessParms pi
d pMbrs 82
d pMbrTypes 82
d pLibraries 82
d pOmitMTypes 82
d pMbrs_ds ds 82
d pMbrs_c 5i 0
d pMbrs_a 10a Dim( 8 ) Overlay( pMbrs_ds : 3)
d Sel_Mbrs_ds ds 80 Inz
d Sel_Mbr1 10a Overlay( Sel_Mbrs_ds : 1 )
d Sel_Mbr2 10a Overlay( Sel_Mbrs_ds : *next )
d Sel_Mbr3 10a Overlay( Sel_Mbrs_ds : *next )
d Sel_Mbr4 10a Overlay( Sel_Mbrs_ds : *next )
d Sel_Mbr5 10a Overlay( Sel_Mbrs_ds : *next )
d Sel_Mbr6 10a Overlay( Sel_Mbrs_ds : *next )
d Sel_Mbr7 10a Overlay( Sel_Mbrs_ds : *next )
d Sel_Mbr8 10a Overlay( Sel_Mbrs_ds : *next )
d Sel_Mbrs 10 Dim( 8 ) Overlay( Sel_Mbrs_ds : 1 )
d x s 5i 0
/free
pMbrs_ds = pMbrs ;
pMbrTypes_ds = pMbrTypes ;
pLibraries_ds = pLibraries ;
pOmitMTypes_ds = pOmitMTypes ;
For x = 1 to pMbrs_c ;
Sel_Mbrs( x ) = pMbrs_a( x ) ;
Endfor ;
/end-free
p ProcessParms e
In the DUMP output (called from the main proc after this subproc is called),
I am looking at the section titled "Local variables for subprocedure :
PROCESSPARMS". The value for pMbrs is as I expected, but the value for
pMbrs_ds is garbage.
Is it an issue with *Entry parms? Or command parameters of variable
lengths? Or something I missed in TFM?
TIA,
Dan
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.