|
here is a utility I wrote using the demon API....maybe you can use it for a reference.... h option(*nodebugio) ?* *EUR ^*______ ______ ____ __ __ ___ | * ^*| | | | | | \ / | / \ | * ^*|_____| |_____| | | \/ | /-----\ | * ^*| | \ | | | / \ | * ^*| | \ _|__ | | / \ |_____ * ?* ______ ______ ________ ______ __ __ ______ *EUR ?*| \ / | | | | \ / | | *EUR ?*|____ \ / |____ | |___ | \/ | |____ *EUR ?* | / | | | | | | *EUR ?*_____| / _____| | |______ | | _____| *EUR '* Program Name: LISTPF Program Author: Tommy Holden * '* Program Date: 08/09/2004 Program Purpose: * '*---------------------------------------------------------------* '* Report Output FQSysPrt o f 132 Printer OflInd(*InOF) '* Create User Space API Procedure DCrtUsrSpc pr ExtPgm('QUSCRTUS') DCUSQualUSName 20a CONST DCUSExtAttribut 10a CONST DCUSInitSize 10I 0 CONST DCUSInitValue 1a CONST DCUSPublicAuth 10a CONST DCUSDescription 50a CONST DCUSReplace 10a CONST DErrorCode 32766A options(*varsize) '* List Record Formats API Procedure DListRcdFmts pr ExtPgm('QUSLRCD') d CUSQualUSName 20a Const d CUSRcdFmt 8a Const d CUSPFName 20a Const d OverrideProc 1a Const d ErrorCode 32766a options(*varsize) '* List Fields API Procedure DListFields pr ExtPgm('QUSLFLD') d CUSFldUSName 20a Const d CUSRcdFmt 8a Const d CUSPFName 20a Const D PFRcdFmt 10a Const d OverrideProc 1a Const d ErrorCode 32766a options(*varsize) '* List Key Fields (QDBRTVFD retrieve file desc)API Procedure DListFileDesc pr ExtPgm('QDBRTVFD') d OutputData 32766a Options(*Varsize) d OutputDataLen 10i 0 Const d CUSPFNameRet 20a D PFRcdFmt 8a Const d CUSPFName 20a Const D RcdFmt 8a Const d OverrideProc 1a Const d System 10a Const d FormatType 10a Const d ErrorCode 32766a options(*varsize) '* List Members API Procedure DListMembers pr ExtPgm('QUSLMBR') d CUSMbrUSName 20a Const d CUSRcdFmt 8a Const d CUSPFName 20a Const D Members 10a Const d OverrideProc 1a Const d ErrorCode 32766a options(*varsize) '* List Database Relations API Procedure DListDBR pr ExtPgm('QDBLDBR') d CUSDBRUSName 20a Const d CUSRcdFmt 8a Const d CUSPFName 20a Const D Members 10a Const d RcdFmt 10a Const d ErrorCode 32766a options(*varsize) '* List Members Info (QUSRMBRD retrieve member desc)API Procedure DListMemberInfo pr ExtPgm('QUSRMBRD') d OutputData 32766a Options(*Varsize) d OutputDataLen 10i 0 Const D PFRcdFmt 8a Const d CUSPFName 20a Const d Member 10a Const d OverrideProc 1a Const d ErrorCode 32766a options(*varsize) '* ReSend Message API Procedure D SendMsg PR ExtPgm('QMHRSNEM') D MsgKey 4A const D ErrorCode 32766A options(*varsize) D ToStkEntry 32766A options(*varsize: *nopass) d ToStkEntryLn 10I 0 const options(*nopass) D Format 8A const options(*nopass) D FromEntry * const options(*nopass) D FromCounter 10I 0 const options(*nopass) '* Get User Space Pointer API Procedure D UserSpacePntr PR ExtPgm('QUSPTRUS') D CUSQualUSName 20A CONST D CUSPointer * '* Error Code DS For API Calls D ErrorDS DS D dsEC1 10I 0 inz(0) D dsEC2 10I 0 inz(0) '* Program Stack DS For API Calls D StackDS ds d dsRS_StkCnt 10I 0 inz(2) D dsRS_StkQual 20A inz('*NONE *NONE') D dsRS_IDLen 10I 0 inz(7) D dsRS_StkID 7A inz('*') '* User Space Header DS D USHeader ds Based(CUSPointer) d HdrUserArea 64a d HdrHdrSize 10i 0 d HdrStrLvl 4a d HdrFormat 8a d HdrAPIUsed 10a d HdrCrtDate 13a d HdrInfoSts 1a d HdrSizeOfUS 10i 0 d HdrOffsetToInp 10i 0 d HdrSizeOfInp 10i 0 d HdrOffsetToHdr 10i 0 d HdrSizeOfHdr 10i 0 d HdrOffsetToDtl 10i 0 d HdrSizeOfDtl 10i 0 d HdrNumberOfDtl 10i 0 d HdrEntrySize 10i 0 d HdrCCSID 10i 0 d HdrCountry 2a d HdrLangID 3a d HdrSubsetInd 1a d HdrReserved1 42a DSaveHdrDS ds d SavUserArea 64a d SavHdrSize 10i 0 d SavStrLvl 4a d SavFormat 8a d SavAPIUsed 10a d SavCrtDate 13a d SavInfoSts 1a d SavSizeOfUS 10i 0 d SavOffsetToInp 10i 0 d SavSizeOfInp 10i 0 d SavOffsetToHdr 10i 0 d SavSizeOfHdr 10i 0 d SavOffsetToDtl 10i 0 d SavSizeOfDtl 10i 0 d SavNumberOfDtl 10i 0 d SavEntrySize 10i 0 d SavCCSID 10i 0 d SavCountry 2a d SavLangID 3a d SavSubsetInd 1a d SavReserved1 42a DSav2HdrDS ds d Sv2UserArea 64a d Sv2HdrSize 10i 0 d Sv2StrLvl 4a d Sv2Format 8a d Sv2APIUsed 10a d Sv2CrtDate 13a d Sv2InfoSts 1a d Sv2SizeOfUS 10i 0 d Sv2OffsetToInp 10i 0 d Sv2SizeOfInp 10i 0 d Sv2OffsetToHdr 10i 0 d Sv2SizeOfHdr 10i 0 d Sv2OffsetToDtl 10i 0 d Sv2SizeOfDtl 10i 0 d Sv2NumberOfDtl 10i 0 d Sv2EntrySize 10i 0 d Sv2CCSID 10i 0 d Sv2Country 2a d Sv2LangID 3a d Sv2SubsetInd 1a d Sv2Reserved1 42a '* List Record Format Header DS D RcdFmtHdrPtr s * DRcdFmtHdrDS ds Based(RcdFmtHdrPtr) D RcdPFName 10a D RcdPFLib 10a D RcdPFType 10a D RcdPFText 50a D RcdPFCCSID 10i 0 D RcdPFCrtDate 13a '* List Record Formats DS D RcdFmtPtr s * DRcdFmtDS ds Based(RcdFmtPtr) D RcdFmtName 10a D RcdLvlChkID 13a D RcdReserved 1a D RcdLength 10i 0 D RcdNumFlds 10i 0 D RcdFmtDesc 50a D RcdReserved1 2a D RcdCCSID 10i 0 '* List Fields DS D FldPtr s * DLstFldDS ds Based(FldPtr) D FldName 10a D FldDataType 1a D FldUsage 1a D FldOutBuffPos 10i 0 D FldInBuffPos 10i 0 D FldLength 10i 0 D FldDigits 10i 0 D FldDecimals 10i 0 D FldDesc 50a D FldEditC 2a D FldEditWLen 10i 0 D FldEditWord 64a D FldColHdg1 20a D FldColHdg2 20a D FldColHdg3 20a D FldIntName 10a D FldAltName 30a D FldAltLen 10i 0 D FldDBCS# 10i 0 D FldAllowNull 1a D FldHostVar 1a D FldDateFormat 4a D FldDateSep 1a D FldVarSize 1a D FldDescCCSID 10i 0 D FldDataCCSID 10i 0 D FldColHCCSID 10i 0 D FldEdtWCCSID 10i 0 D FldUSC2Len 10i 0 D FldDataEncode 10i 0 D FldMaxObjLen 10i 0 D FldPadLen 10i 0 D FldUDTLen 10i 0 D FldUDTName 132a D FldUDTLib 10a D FldDLCntl 1a D FldDLInteg 1a '* List File Description Header DS D FDHDS ds D FDHBytesRet 10i 0 D FDHBytesAvail 10i 0 D FDHMaxKeyLen 5i 0 D FDHKeyCount 5i 0 D FDHReserved 10a D FDHFormatCnt 5i 0 D KeyRecFmt 10a D KeyReserve 2a D Key#OfKeys 5i 0 D KeyReserv1 14a D KeyInfoOffset 10i 0 '* List Key Information DS D KeyDS ds D KeyIntName 10a D KeyExtName 10a D KeyDtaType 5i 0 D KeyFldLen 5i 0 D Key#OfDigits 5i 0 D KeyDecPos 5i 0 D KeyAttrFlg 1a D KeyAltLen 5i 0 D KeyAltName 30a D KeyReserv3 1a D KeyAttrFlg1 1a D KeyReserv4 1a '* List Members Header DS D MbrHdrPtr s * D MbrHdrDS ds Based(MbrHdrPtr) D MbrQualPF 20a D MbrPFAttr 10a D MbrPFText 50a D #OfMembers 10i 0 D MbrSrcFile1 1a D MbrRsv 3a D MbrPFCCSID 10i 0 '* Member Information DS D MemberDS ds D MbrBytesRet 10i 0 D MbrBytesAvail 10i 0 D MbrPFName 10a D MbrPFLib 10a D MbrName 10a D MbrFileAttr 10a D MbrSrcType 10a D MbrCrtDate 13a D MbrLSrcChg 13a D MbrText 50a D MbrSrcFile 1a D MbrRemote 1a D MbrLForPF 1a D MbrODPShare 1a D MbrReserved 2a D MbrCurrRcds 10i 0 D MbrDltRcds 10i 0 D MbrDataSpcSize 10i 0 D MbrAccPthSize 10i 0 D Mbr#BasedOn 10i 0 D MbrChgDate 13a D MbrSaveDate 13a D MbrRstDate 13a D MbrExpDate 7a D MbrReserv1 6a D Mbr#DaysUsed 10i 0 D MbrLstUsed 7a D MbrUseReset 7a D MbrReserv2 2a D MbrDtaSpcMult 10i 0 D MbrAccPthMult 10i 0 D MbrOffset1 10i 0 D Mbr1Len 10i 0 D MbrCurrBORcds 10u 0 D MbrDltBORcds 10u 0 D MbrReserv3 6a D MbrJoinMbr 1a D MbrAccPthMaint 1a D MbrSQLType 10a D MbrReserv4 1a d MbrAllowRead 1a D MbrAllowWrite 1a D MbrAllowUpdate 1a D MbrAllowDelete 1a D MbrReserv5 1a D MbrRcdFrcWrite 10i 0 D MbrMaxPctDlt 10i 0 D MbrInit#Rcds 10i 0 D MbrIncr#Rcds 10i 0 D MbrMaxIncrem 10i 0 D MbrCurIncrem 10u 0 D MbrRcdCapacity 10u 0 D MbrRcdFmtPgm 10a D MbrRcdFmtLib 10a D Mbr#Constraint 5i 0 D MbrOffsetConst 10i 0 D MbrReserv6 46a '* Based On PF DS D BasedOnDS DS D BOPFName 10a D BOPFLib 10a D BOPFMember 10a D BORcdFmt 10a D BORest 41 112a '* DBR DS D DBRPtr s * D DBRDS ds Based(DBRPtr) d DBRPFName 10a d DBRPFLib 10a D DBRDepFile 10a D DBRDepLib 10a D DBRDepType 1a D DBRReserve 3a D DBRJoinRef# 10i 0 D DBRCstLib 10a D DBRCstNameLen 10i 0 D DBRCstName 258a '* Work Fields DCUSQualUSName s 20a DCUSFldUSName s 20a DCUSDBRUSName s 20a DCUSPFNameRet s 20a DInputPFName s 20a DCUSExtAttribut s 10a DCUSInitSize s 10I 0 DOutputDataLen s 10I 0 inz(32766) DOutputData s 32766a DCUSInitValue s 1a DCUSPublicAuth s 10a DCUSDescription s 50a DCUSReplace s 10a DCUSMbrUSName s 20a D MbrPtr s * D Member s 10a Based(MbrPtr) DFilNam s 10a DStrPos s 10i 0 DOffset s 10i 0 DTimes s 10i 0 DEndBuf s 5 0 DSeq# s 8 0 D #OfDepFiles s 10i 0 Dtmpdate s d inz(D'1995-01-01') datfmt(*usa/) Dlines s 132a inz(*All'_') d OverrideProc s 1a Inz('0') D Dependancy s 50a D a s 10i 0 D b s 10i 0 D c s 10i 0 D i s 10i 0 D j s 10i 0 D k s 10i 0 C *Entry PList C Parm CUSPFName 20 '* Set up Date & Time Output Field... c movel *date tmpdate C time utime 6 0 C Eval FilNam=%Subst(CUSPFName:1:10) '* Create The User Space For The Record Format List c Eval CUSQualUSName='RCDFMT QTEMP' c Eval CUSExtAttribut='USRSPC' c Eval CUSInitSize=1024 c Eval CUSInitValue=x'00' c Eval CUSPublicAuth='*ALL' c Eval CUSDescription='Record Formats' c Eval CUSReplace='*YES' c CallP(E) CrtUsrSpc(CUSQualUSName: c CUSExtAttribut:CUSInitSize: c CUSInitValue:CUSPublicAuth: c CUSDescription:CUSReplace: c ErrorDS) '* Create Failed c If %Error c callp SendMsg(*blanks: c ErrorDS: c StackDS: c %size(StackDS): c 'RSNM0100': c *NULL: c 0) c endif '* List Record Formats Into User Space c CallP(E) ListRcdFmts(CUSQualUSName: c 'RCDL0200': c CUSPFName: c OverrideProc: c ErrorDS) '* Access The Data via Pointer c CallP(E) UserSpacePntr(CUSQualUSName:CUSPointer) c Eval SaveHdrDS=USHeader c Eval RcdFmtHdrPtr=CUSPointer+SavOffsetToHdr c + ((a-1) * %Size(RcdFmtHdrDS)) '* Process The Detail Data c Do SavNumberOfDtli c Eval RcdFmtPtr=CUSPointer+SavOffsetToDtl c + ((i-1) * %Size(RcdFmtDS)) C Except Heads C Except Head1 '* Get Record Format Info Printed c ExSR RcdFmtSR '* Get Key Data Info Printed c ExSR KeyDataSR '* Get Member Data Info Printed c ExSR MbrDataSR c EndDo '* Terminate c ExSR Terminate '* Record Format Information c RcdFmtSR BegSR '* Create The User Space For The Field List c Z-Add 0 Seq# c Eval CUSFldUSName='FLDLST QTEMP' c Eval CUSExtAttribut='USRSPC' c Eval CUSInitSize=1024 c Eval CUSInitValue=x'00' c Eval CUSPublicAuth='*ALL' c Eval CUSDescription='Field List' c Eval CUSReplace='*YES' c CallP(E) CrtUsrSpc(CUSFldUSName: c CUSExtAttribut:CUSInitSize: c CUSInitValue:CUSPublicAuth: c CUSDescription:CUSReplace: c ErrorDS) '* Create Failed c If %Error c callp SendMsg(*blanks: c ErrorDS: c StackDS: c %size(StackDS): c 'RSNM0100': c *NULL: c 0) c endif '* Create Field List c CallP(E) ListFields(CUSFldUSName: c 'FLDL0100': c CUSPFName: c RcdFmtName: c OverrideProc: c ErrorDS) '* Access Data via Pointer c CallP(E) UserSpacePntr(CUSFldUSName:CUSPointer) c Eval OutputData=*Blanks '* Process Detail Data c Do HdrNumberOfDtlj c Eval FldPtr=CUSPointer+HdrOffsetToDtl c + ((j-1) * %Size(LstFldDS)) '* Get the Ending Buffer Position c Eval EndBuf=FldOutBuffPos+(FldLength-1) '* If Numeric Field Set On Indicator 10 c If FldDataType ='B' c OR FldDataType='D' c OR FldDataType='F' c OR FldDataType='M' c OR FldDataType='N' c OR FldDataType='P' c OR FldDataType='S' c Eval *In10=*On c Else c Eval *In10=*Off c EndIf '* Increment the Sequence Number & Write The Details c Add 10 Seq# c OF Except Heads C OF Except Head1 c Except Detail c Eval *InOF=*Off c EndDo '* Save The Number Of Fields For Total Printing c Z-Add RcdNumFlds FldCnt 10 0 c EndSR '* Key Data Information c KeyDataSR BegSR '* Get The Key Information From API Into Output Variable c Except KeyHed c Eval OutputDataLen=32766 c Eval CUSPFNameRet=*Blanks c CallP(E) ListFileDesc(OutputData: c OutputDataLen: c CUSPFNameRet: c 'FILD0300': C CUSPFName: c RcdFmtName: c OverrideProc: c '*LCL': c '*EXT': c ErrorDS) '* If Any Errors Occur or No Key Fields Found, Set Number Of Keys To 0 c If OutputData=*Blanks C OR %Error c OR %len(%Trim(OutputData))=0 c Eval Key#OfKeys=0 c Else c MoveL OutputData FDHDS c EndIf '* Process Key Information Stored in the OutputData Variable c Eval StrPos=KeyInfoOffset+1 c Do Key#OfKeys c Eval KeyDS=%Subst(OutputData:StrPos: c +%Size(KeyDS)) '* Print Key Information c OF Except Heads c OF Except KeyHed c Except KeyLine c Eval *InOF=*Off c Eval StrPos=StrPos+%Size(KeyDS) c EndDo c EndSR '* Member Information c MbrDataSR BegSR '* Create The User Space For The Member List c Except MbrHed c Eval CUSMbrUSName='MBRLST QTEMP' c Eval CUSExtAttribut='USRSPC' c Eval CUSInitSize=1024 c Eval CUSInitValue=x'00' c Eval CUSPublicAuth='*ALL' c Eval CUSDescription='MembersList' c Eval CUSReplace='*YES' c CallP(E) CrtUsrSpc(CUSMbrUSName: c CUSExtAttribut:CUSInitSize: c CUSInitValue:CUSPublicAuth: c CUSDescription:CUSReplace: c ErrorDS) '* Create Failed c If %Error c callp SendMsg(*blanks: c ErrorDS: c StackDS: c %size(StackDS): c 'RSNM0100': c *NULL: c 0) c endif '* Get Member List c CallP(E) ListMembers(CUSMbrUSName: c 'MBRL0100': c CUSPFName: c '*ALL': c OverrideProc: c ErrorDS) '* Access Member List via Pointer c CallP(E) UserSpacePntr(CUSMbrUSName:CUSPointer) c Eval Sav2HdrDS=USHeader c Eval MbrHdrPtr=CUSPointer c Eval MbrHdrPtr=MbrHdrPtr+Sv2OffsetToHdr C Eval InputPFName=CUSPFName '* Process The Member List c Do Sv2NumberOfDtlk c Eval MbrPtr=CUSPointer+Sv2OffsetToDtl c + ((k-1) * %Size(Member)) c Eval OutputDataLen=32766 c Eval OverrideProc='0' '* Retrieve The Member Information via API c If Member<>*Blanks c CallP(E) ListMemberInfo(OutputData: c OutputDataLen: c 'MBRD0300': c InputPFName: c Member: c OverrideProc: c ErrorDS) '* Error During Retrieve The Member Information via API c If OutputData=*Blanks C OR %Error c OR %len(%Trim(OutputData))=0 c Eval Mbr#BasedOn=0 c Else c MoveL OutputData MemberDS c EndIf '* Print Member Information c OF Except Heads c OF Except MbrHed c Except MbrLine '* If This is a LF, List the Based On PF Information c If MbrLForPF='1' c Eval StrPos=384 c If Mbr#BasedOn>0 c SetOn 11 c SetOff 12 c Except BasedOnHdr c Do Mbr#BasedOn c Eval BasedOnDS=%Subst(OutputData:StrPos:112) c Except BasedOnDtl c Eval StrPos=StrPos+112 c EndDo c EndIf '* If This is a PF, List the Dependent File Information c Else c SetOn 12 c SetOff 11 c ExSR ListDBRSR c EndIf c EndIf c EndDo '* Print File Totals c Except Totals c EndSR '* List Database Relations Subroutine c ListDBRSR BegSR '* Create The User Space For The DBR List c Eval CUSDBRUSName='DBRLST QTEMP' c Eval CUSExtAttribut='USRSPC' c Eval CUSInitSize=1024 c Eval CUSInitValue=x'00' c Eval CUSPublicAuth='*ALL' c Eval CUSDescription='DBR List' c Eval CUSReplace='*YES' c CallP(E) CrtUsrSpc(CUSDBRUSName: c CUSExtAttribut:CUSInitSize: c CUSInitValue:CUSPublicAuth: c CUSDescription:CUSReplace: c ErrorDS) '* Create Failed c If %Error c callp SendMsg(*blanks: c ErrorDS: c StackDS: c %size(StackDS): c 'RSNM0100': c *NULL: c 0) c endif '* List DBR Into User Space c CallP(E) ListDBR(CUSDBRUSName: c 'DBRL0100': c CUSPFName: c '*ALL': c '*ALL': c ErrorDS) '* Access Data via Pointer c CallP(E) UserSpacePntr(CUSDBRUSName:CUSPointer) c If HdrNumberOfDtl>0 C Except DBRHeads c Eval #OfDepFiles=HdrNumberOfDtl '* Process All Dependancies c Do HdrNumberOfDtlc c Eval DBRPtr=CUSPointer+HdrOffsetToDtl c + ((c-1) * %Size(DBRDS)) '* Load Dependancy Type For Print c Select c When DBRDepType='C' c Eval Dependancy='Constraint' '* c When DBRDepType='D' c Eval Dependancy='Extracted Data' '* c When DBRDepType='I' c Eval Dependancy='Extracted Data(Shared Acc Pth)' '* c When DBRDepType='O' c Eval Dependancy='Extracted Data(Owned Acc Pth)' '* c When DBRDepType='V' c Eval Dependancy='SQL View' '* c Other c Eval Dependancy='Unknown' c EndSL '* Print Dependent File Information C Except DBRDtl c EndDo c EndIf c EndSR '* Termination c Terminate BegSR c Eval *InLR=*On c Return c EndSR '* Output Specs... Oqsysprt e heads 1 03 O 'Date:' O tmpdate +1 O 40 'File Name:' o filnam +1 o +1 'In Library:' o RcdPFLib +1 O 123 'Time:' O utime 132 ' : : ' '* O e heads 1 O 42 'Rec. Format:' O RcdFmtName +1 o RcdPFText +1 O 123 'Page:' O page z 132 '* O e heads 0 o lines '* O e head1 1 O 8 'Seq. Nbr' O +1 'Field Name' O +1 'Description' O 89 'Buffer Pos.' O 109 'Attributes' '* O e detail 1 o seq# z 8 o FldName +1 o FldDesc +1 o FldOutBuffPos z +1 o +1 '-' o endbuf z +1 o 10 FldDigits z +1 o 10 FldDataType +0 o 10 FldDecimals +2 ' 0 ' O N10 FldLength z 100 o n10 FldDataType 101 '* o e keyhed 2 1 O 'Keyed By' '* o e keyline 1 O KeyExtName +10 '* o e mbrhed 2 1 O 'Members In File:' '* o e mbrline 1 O Member +10 O MbrText +1 '* O e BasedOnHdr 1 o 'Based On:' '* o e BasedOnHdr 1 o 'Physical File' o 25 'Library' o 35 'Member' o 53 'Record Format' '* o e BasedOnDtl 1 o BOPFName o BOPFLib 27 o BOPFMember 38 o BORcdFmt 49 '* o e DBRHeads 1 o 'Dependent Files:' '* o e DBRHeads 1 o 'File ' o +1 'Library ' o +1 'Dependancy Type' '* o e DBRDtl 1 o DBRDepFile o DBRDepLib +1 o Dependancy +1 '* o e totals 2 1 o lines '* o e totals 1 o 'Number Of Fields:' o FldCnt 37 ' 0 ' '* o e totals 1 o 'Number Of Keys:' o Key#OfKeys 37 ' 0 ' '* o e totals 1 o 'Number Of Members:' o #OfMembers 37 ' 0 ' '* o e 11 totals 1 o 'Number Of Based On Files:' o Mbr#BasedOn 37 ' 0 ' '* o e 12 totals 1 o 'Number Of Dependent Files:' o #OfDepFiles 37 ' 0 ' Thanks, Tommy Holden -----Original Message----- From: Scott Klement [mailto:rpg400-l@xxxxxxxxxxxxxxxx] Sent: Friday, October 01, 2004 6:56 AM To: RPG programming on the AS400 / iSeries Subject: RE: Finding Field Reference File information for Database Files Hi Jonathan, > Plus, of course, there's the opportunity of getting to grips with API > programming - I've done a bit in the past year, but not enough that I > have to keep going back to the manuals and previous programs. The only reason I suggest DSPFFD is that the QDBRTVFD API is a particularly difficult API to work with. In my opinion, they tried to do too much with one API in this case. This lead to a large number of daisy chained data structures. The particular example of the ref info is actually a relatively easy thing to get, but when drilling down to some of the info in the FILD0100 format, you can get frustrated quickly. I guess the reason I'm telling you this is to say "Don't get frustrated and give up APIs based on this one. Most aren't nearly this difficult to work with." Carsten Flensburg wrote an article that demonstrates some of the uses of this API in the Sep 9 issue of Club Tech iSeries Programming Tips newsletter. If you're a pro member of the iSeriesNetwork, you can read it at the following link: http://www.iseriesnetwork.com/resources/clubtech/index.cfm?fuseaction=ShowNe wsletterIssue&ID=19279 I don't think that it demonstrates the reference info directly, but it might be easier to modify his code than to start from scratch. If you search the iSeries Network (or the web in general) for QDBRTVFD, I'm certain that you'll find more examples. And, of course, if you get stuck, I'm sure that the members of this mailing list will help you. Good luck! -- 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.