|
phon_P is telDS_P - I made mistake while I was creating example... Igor.Beslic@xxxxxxxxxxxx Sent by: rpg400-l-bounces+igor.beslic=volksbank.hr@xxxxxxxxxxxx 13.10.2004 15:55 Please respond to RPG programming on the AS400 / iSeries <rpg400-l@xxxxxxxxxxxx> To rpg400-l@xxxxxxxxxxxx cc Subject exported Data structures and files Hi I have question abouth data structures and EXPORT keyword... I have 3 modules writerMOD, formatMOD, mainMOD and 2 DataStructures that should be accessable from writerMOD and formatMOD. prototypes and DS definitions are in one source member ********************************************************* ***prjctProto source ********************************************************* D nameDS DS D Lab1 14A INZ('Name of user: ') D User 10A D phoneDS DS %BASED(telDS_P) D Fld1 14A D Fld2 20A *DS is automaticly loaded performing read of FILEt1 D phon1DS DS D Lab2 14A INZ('Telephone No: ') D TelNo1 20A *DS is automaticly loaded performing read of FILEt2 D phon2DS DS D Lab3 14A INZ('Telephone No: ') D TelNo2 20A DwriteLine PR D 2S 0 VALUE DdefineName PR D 5A VALUE DdefinePhone PR D 5A VALUE D 1A VALUE mainMOD reads input file and decides what Names will be written ********************************************************** ***mainMOD source ********************************************************** F mainFileIF E DISK /copy prjctProto . . . C read mainRF C CALLP defineName(UsrID) C CALLP definePhone(UsrID:phoneID) . . . writerMOD copies data from data structures nameDS and telephoneDS in to txtLine and write txtLine to stmf. ******************************************************** ***writerMOD source ******************************************************** HNOMAIN F FileUser IF E K DISK F FileT1 IF E K DISK F FileT2 IF E K DISK /copy prjctProto PwriteLine B EXPORT DwriteLine PI D lineID 2S 0 VALUE D txtLINE S 100A /free Select; when lineID=LINE_USER; txtLINE=nameDS; when lineID=LINE_PHONE; txtLine=phoneDS; . . . EndSl; //the rest of code writes the line /end-free PwriteLine E formatMOD contains subprocedures that fill nameDS and telephoneDS with desired data *********************************************************** ***formatMOD source *********************************************************** HNOMAIN F FileUser IF E K DISK USROPN F FileT1 IF E K DISK USROPN F FileT2 IF E K DISK USROPN /copy prjctProto PdefineName B EXPORT D defineName PI D user 5A VALUE *after this operation nameDS is filled with data /FREE OPEN FileUser chain user fileUserRF; WriteLine(LINE_USER); CLOSE FileUser /END-FREE pdefineName E PdefinePhone B EXPORT D definePhone PI D user 5A VALUE D phone1 1A VALUE *after this operation nameDS is filled with data /FREE OPEN FILEt1; OPEN FILEt2; if phone1='Y' chain user fileT1RF; phon_P=%ADDR(phon1DS); else; chain user fileT2RF; phon_P=%ADDR(phon2DS); EndIf; writeLine(LINE_PHONE); CLOSE FILEt1; CLOSE FILEt2; /END-FREE pdefinePhone E well, problem is in telephoneDS which is defined in prototype copy member with D phoneDS DS %BASED(telDS_P) I have primary and secondary phone number difined in separate files, so I use phon1DS to be automaticly loaded on chain to FileT1 and phon2DS on chain to FileT2.But when execution comes to phon_P=%ADDR(phon1DS); in formatMOD there is issued memory not referenced prior Error. Well I put out statements which define phon1DS and phon2DS from prototype member and enter it directly in formatMOD and writerMOD (definitions are present in 2 modules now) and program that is compiled from that three modules works fine!! I wonder what's the reason of error and is there any better solution if I use EXPORT keyword on data structures. Maybe there is something with files definition (fields TelNo1, TelNo2 and User are members of FileUser, Filet1 and Filet2)?? My final goal is to have all ds defined in one module (formatMod for example) or in one place but that they are still accessable from writter. You maybe wonder why I'm using Based keyword and %addr(), why I don't just eval phoneDS=phon1DS but it's long story... Help if you can and Best regards!! Igor Bešlić, dipl. ing. rač. -- 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-2024 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.