|
Dan, You really need a LIKEDS here d arry_ds ds qualified d count 5i 0 d data_a 10a Dim( 8 ) d mainline pr extpgm('MYRPGLEPGM') d pMbrs likeds(arry_ds) d pMbrTypes likeds(arry_ds) d pLibraries likeds(arry_ds) d pOmitMTypes likeds(arry_ds) d ProcessParms pr d @Mbrs likeds(arry_ds) d @MbrTypes likeds(arry_ds) d @Libraries likeds(arry_ds) d @OmitMTypes likeds(arry_ds) c CallP ProcessParms( pMbrs c : pMbrTypes c : pLibraries c : pOmitMTypes ) c Dump(a) c Eval *inLR = *On p ProcessParms b * d ProcessParms pi d @Mbrs likeds(arry_ds) d @MbrTypes likeds(arry_ds) d @Libraries likeds(arry_ds) d @OmitMTypes likeds(arry_ds) d Sel_Mbrs s 10a Dim( 8 ) d x s 5i 0 /free For x = 1 to @Mbrs.count ; Sel_Mbrs( x ) = Mbrs.data_a( x ) ; Endfor ; /end-free p ProcessParms e HTH, Charles Wilt -- iSeries Systems Administrator / Developer Mitsubishi Electric Automotive America ph: 513-573-4343 fax: 513-398-1121 > -----Original Message----- > From: rpg400-l-bounces@xxxxxxxxxxxx > [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Dan > Sent: Tuesday, December 13, 2005 1:47 PM > To: RPG400-L@xxxxxxxxxxxx > Subject: Handling *Entry parms from command (using MAX(8)) in > a subproc > > 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 > -- > This is the RPG programming on the AS400 / iSeries (RPG400-L) > mailing list > To post a message email: RPG400-L@xxxxxxxxxxxx > To subscribe, unsubscribe, or change list options, > visit: http://lists.midrange.com/mailman/listinfo/rpg400-l > or email: RPG400-L-request@xxxxxxxxxxxx > Before posting, please take a moment to review the archives > at http://archive.midrange.com/rpg400-l. > >
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.