You are on page 1of 29

X Command /*/PCMD /* /* /* CRTCMD /* /* /* /* /*/ECMD /*

CMD(*OBJLIB/*OBJNAM) + SRCFILE(*SRCLIB/*SRCFIL) + SRCMBR(*SRCMBR) + PGM(XREF0011)

*/ */ */ */ */ */ */ */ */ */

CMD PARM

PARM

PARM PARM

PROMPT('VIEW THE X-REF FOR AN OBJECT ') KWD(X_OBJECT) TYPE(*CHAR) LEN(10) + ALWUNPRT(*NO) DTAARA(*NO) FILE(*UNSPFD) + CHOICE('UPTO 10 CHARACTERS') + PROMPT('ENTER OBJECT TO XREF') KWD(X_LIB) TYPE(*CHAR) LEN(10) DFT(*LIBL) + ALWUNPRT(*NO) ALWVAR(*NO) DTAARA(*NO) + FILE(*NO) CHOICE('*LIBL IS THE DEFAULT + VALUE') PROMPT('ENTER LIBRARY FOR XREF') KWD(X_USAGE) TYPE(*DEC) LEN(2) DFT(9) + CHOICE('A # FROM 0 TO 13. 9(DEFAULT)') + PROMPT('ENTER USAGE NUMBER') KWD(X_MOS) TYPE(*CHAR) LEN(1) RSTD(*YES) + DFT(M) VALUES('M' 'S') + CHOICE('M(ATCH(DEFAULT)) OR S(EARCH)') + PROMPT('ENTER MATCH TYPE')

XREF0001.CLP /*/PCMD /* /* CRTCLPGM PGM(*OBJLIB/*OBJNAM) + /* SRCFILE(*SRCLIB/*SRCFIL) + /* SRCMBR(*SRCMBR) + /* OPTION(*SRCDBG) /* /*/ECMD PGM DCL DCL DCL &Thislib &FirstTime &BatchStat *CHAR LEN(10) *CHAR LEN( 1) *CHAR LEN( 1)

*/ */ */ */ */ */ */ */

DCLF XRefLib /* **************************************************************** + See if this is running interactively, if then submit. + **************************************************************** */ RtvJobA Type(&BatchStat) If Cond(&BatchStat = '1') Then(Do) SBMJOB CMD(CALL PGM(XREF0001)) + JOB(XREF_BUILD) + JOBQ(QTXTSRCH) + LOGCLPGM(*YES) goto EndNow

EndDo /* **************************************************************** + Loop through the XRef Library file. Process each one. + **************************************************************** */ ChgVar &FirstTime Value('Y') LOOP: RCVF MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(EOJ)) CHGVAR VAR(&ThisLib) VALUE(&LibLib) Call XRef0002 Parm(&ThisLib + &FirstTime ) ChgVar &FirstTime Value('N') GoTo EOJ: /* **************************************************************** + Remove any blank references + **************************************************************** */ RUNSQL SQLSTRING('Delete From XRef where + substr(whfnam,1,1) in ('' + '',''&'',''$'',''*'',''#'',''@'',''1'')') ENDNOW: ENDPGM Loop

XERF0002.CLP /*/PCMD /* /* CRTCLPGM PGM(*OBJLIB/*OBJNAM) + /* SRCFILE(*SRCLIB/*SRCFIL) + /* SRCMBR(*SRCMBR) + /* OPTION(*SRCDBG) /* /*/ECMD */ PGM DCL DCL Parm(&ThisLIb &FirstTime) &Thislib &FirstTime *CHAR LEN(10) *CHAR LEN( 1)

*/ */ */ */ */ */ */ */

/* **************************************************************** + Only for the fist time, replace the file, otherwise add 2 it. + **************************************************************** */ If Cond(&FirstTime = 'Y') Then(Do) + + + +

DspPgmRef Pgm(&ThisLib/*All) OutPut(*OutFile) ObjType(*All) OutFile(XRef) OutMbr(*First *RePlace) MONMSG MSGID(CPF3064 CPF3033) EndDo

Else Do DspPgmRef Pgm(&ThisLib/*All) + OutPut(*OutFile) + ObjType(*All) + OutFile(XRef) + OutMbr(*First *Add) MONMSG MSGID(CPF3064 CPF3033) EndDo /* **************************************************************** + Now Add the Qry info for the library + **************************************************************** */ SBMJOB CMD(CALL PGM(XREF0003) PARM(&THISLIB)) + JOB(XREF_BLD_Q) ENDPGM

XREF0003.CLP /*/PCMD /* /* CRTCLPGM PGM(*OBJLIB/*OBJNAM) + /* SRCFILE(*SRCLIB/*SRCFIL) + /* SRCMBR(*SRCMBR) + /* OPTION(*SRCDBG) /* /*/ECMD

*/ */ */ */ */ */ */ */ */

PGM DCL DCL DCLF DSPOBJD MONMSG OVRDBF CRTPF MONMSG LOOP: RCVF MONMSG

Parm(&ThisLIb) &Thislib &FirstTime *CHAR LEN(10) *CHAR LEN( 1)

FILE(QADSPOBJ) /* IBM object */ OBJ(&ThisLib/*ALL) OBJTYPE(*QRYDFN) + OUTPUT(*OUTFILE) OUTFILE(QTEMP/X_QRY_DOD) MSGID(CPF2123 CPF2124) EXEC(GOTO CMDLBL(EOJ)) FILE(QADSPOBJ) TOFILE(QTEMP/X_QRY_DOD) FILE(QTEMP/XREFINLINE) SRCFILE(SRC) + OPTION(*NOSRC *NOLIST) MSGID(CPF7302) /* Object already exists in qtemp */ MSGID(CPF0864) EXEC(GOTO CMDLBL(EOJ))

/* DUMP THE OBJECT */ DMPOBJ OBJ(&ODLBNM/&ODOBNM) OBJTYPE(*QRYDFN) MONMSG MSGID(CPF3562) EXEC(GOTO CMDLBL(LOOP)) /* OBJECT NOT IN *LIBL */ /* COPY THE REPORT TO A DB FILE AND DELETE SPLF WHEN DONE */ CLRPFM FILE(QTEMP/XREFINLINE) MBR(XREFINLINE)

CPYSPLF DLTSPLF

FILE(QPSRVDMP) TOFILE(QTEMP/XREFINLINE) + SPLNBR(*LAST) FILE(QPSRVDMP) SPLNBR(*LAST)

/* PLACE THE RECORDS FROM XREFINLINE INTO THE XREF FILE */ OVRDBF FILE(XREFINLINE) TOFILE(QTEMP/XREFINLINE) CALL PGM(XREF0004) PARM(&ODOBNM &ODOBTX &ODLBNM) DLTOVR FILE(XREFINLINE) GOTO EOJ: ENDPGM CMDLBL(LOOP)

XREF0004.RPGLE */PCMD *MODULE * CRTRPGMOD MODULE(QTEMP/*OBJNAM) + * SRCFILE(*SRCLIB/*SRCFIL) + * SRCMBR(*SRCMBR) + * DBGVIEW(*ALL ) */ECMD */PCMD *PGM * CRTPGM * * * * /ECMD PGM(*OBJLIB/*OBJNAM) + MODULE(QTEMP/*OBJNAM) + ACTGRP(*CALLER) + DETAIL(*BASIC)

H Option(*NoDebugIo:*SrcStmt:*NoExpDds) H Debug( *Yes ) H AlwNull(*UsrCtl) // Modification Highlights // Date Programmer Description // // Fxref UF A E DISK FxrefinlineIF E DISK temp file *--------------------------------------------------------------------------------------D r_line ds D type 12 20A D file_r 22 31A D lib_r 66 75 *--------------------------------------------------------------------------------------C *ENTRY PLIST C PARM obj_r 10 C PARM obj_d 50 C PARM obj_l 10 C C READ xinline 99 C DOW *IN99 = *OFF C IF type = 'SYP 19 01' C CLEAR QWHDRPPR C EVAL whpnam = obj_r

SETON LR *---------------------------------------------------------------------------------------

C C C C C C C C C C C C C

EVAL EVAL EVAL EVAL EVAL EVAL WRITE ENDIF READ ENDDO

whtext = obj_d whfnam = file_r whlib = obj_l whfusg = 11 whlnam = lib_r whspkg = 'Q' QWHDRPPR xinline 99

XREF0010.SQLRPGLE */PCMD * * CRTSQLRPGI OBJ(QTEMP/*OBJNAM) + * SRCFILE(*SRCLIB/*SRCFIL) + * SRCMBR(*SRCMBR) + * OBJTYPE(*MODULE) + * CLOSQLCSR(*ENDMOD) + * COMMIT(*NONE) + * DBGVIEW(*SOURCE) * * CRTPGM PGM(*OBJLIB/*OBJNAM) + * MODULE(QTEMP/*OBJNAM) + * ACTGRP(*NEW) * * * /ECMD * Purpose : This allows the user to search for an object and find out * what has references to it. * H Option(*NoDebugIo:*SrcStmt:*NoExpDds) H Debug( *Yes ) H AlwNull(*UsrCtl) // Modification Highlights // Date Programmer Description // // *------------------------------------------------------------------------Fxref IF E K DISK FMMenuoL4 IF E K DISK FXRef0010DfCF E WORKSTN F SFILE(sfl1:rr1) *------------------------------------------------------------------------* Program status data structure D PSDS SDS D Df_Pgm 1 10 D prgstatus *STATUS D errtype 40 42 D errcode 43 46 D JunkIso S D D rr1Save S 10I 0 D rr1 S 10I 0

lvl S 2 0 sav_SubSet S 11A sav_xobj S 11A sav_xlib S 10A sav_xusage S 2 0 sav_mos S 1A last_obj S 10A xdbr_parm S 23A xRef_parm S 120A dbf_parm S 27A len_parm S 15 5 file_parm S 10A PAssBack S 10A //---------------------------------------------------------------------- * the index for the xarray is the level of indenture for the object. D xary S 11A DIM(99) INZ(*BLANKS) D xLib S 11A DIM(99) INZ(*BLANKS) D xSub S 11A DIM(99) INZ(*BLANKS) D usg S 25A DIM(15) CTDATA PERRCD(1) //----------------------------------------------------------------------D GetDates PR ExtPgm('XREF0013') D 10A D 10A D 10A D 13A D 7A D 5 0 //----------------------------------------------------------------------D GetXRefD PR ExtPgm('XREF0012') D 10A D 50A D 50A D 50A D 13A D 7A D 5 0 //----------------------------------------------------------------------D p_obj S 10 D p_desc S 50 D s_desc S 50 D f_desc S 50 D PCreate S 13 D PLast S 7 D Pused S 5 0 //----------------------------------------------------------------------D BrowseObj PR ExtPgm('XREFCL10') D 10A D 10A //----------------------------------------------------------------------D SystemCommand PR ExtPgm('QCMDEXC') D 51A D 15 5 //----------------------------------------------------------------------D PopUp PR ExtPgm('QUSCMDLN') //----------------------------------------------------------------------D CommandLine S 51A D CommandLength S 15 5 //----------------------------------------------------------------------D XFile PR ExtPgm('XREFRI2') D 10A

D D D D D D D D D D D D D

10A 10A //----------------------------------------------------------------------D SendMessage PR ExtPgm('QMHSNDPM') D 7A D 20A D 75A D 9B 0 D 10A D 20A D 9B 0 D 4A D 256A //----------------------------------------------------------------------D Qm_MsgId S 7A Inz('CPF9897') D Qm_MsgTxt S 75A D Qm_MsgTyp S 10A Inz('*STATUS') D Qm_MsgQ S 20A Inz('*EXT') D Qm_MsgKy S 7A //---------------------------------------------------------------------- // Error return code for the apis //----------------------------------------------------------------------D apierr ds D $bytpv 1 4b 0 inz(8) D $bytav 5 8b 0 inz(8) D $msgid 9 15 D $resvd 16 16 D $exdta 17 256 //---------------------------------------------------------------------- // define message Parms for status messages. D ds D QM_msgf 1 20 INZ('QCPFMSG *LIBL ') D QM_stkctr 21 24B 0 INZ(0) D QM_msgdln 25 28B 0 INZ(75) //----------------------------------------------------------------------D ThisSearch S 10A varying D ThisPosition S 2 0 D jde_item S 10 D jda_pgm S 8 D Opt_Out S 5 D Crap S 2 0 D SqlOpen S N Inz(*Off) D JDEOpen S N Inz(*Off) D JDAOpen S N Inz(*Off) *------------------------------------------------------------------------D SqlStmt S 1024 Varying D SqlObject S 13 Varying D SqlLibrary S 13 Varying D SqlSubSet S 13 Varying D D DS1 DS D ThisLibrary 10 D ThisProgram 10 D ThisText 50 D ThisObject 11 D ThisFusg 3 0 D ThisSpkg 1 *------------------------------------------------------------------------D C *ENTRY PLIST

D D

C C C C C

PARM PARM PARM PARM PARM

x_obj x_lib x_usage x_mos rtn_err

10 10 2 0 1 5

/Free ExSr @Initial; DoW *IN03 = *OFF and but2 <> 3; Write Footer; ExFmt sfc1; Read Footer; QM_msgtxt = ''; ExSr @WrtMsg; Select; When *IN13; ExFmt help; When *In04 OR but2 = 4; ExSr @XUsage; ExSr @Position; ExSr @LoadSf; // Bring up the source for the object on the top of the screen' When *In09 OR but2 = 9; CallP BrowseObj (Df_XObj: Df_XLib); When *In08; CommandLine = 'WRKOBJ OBJ(*AllUsr/' + %Trim(df_Xobj) + ')'; CommandLength = %Len(CommandLine); CallP SystemCommand(CommandLine : CommandLength); When *IN06 OR but2 = 6; If DF_TYPE = 'File '; file_parm = df_xobj; CommandLine = 'WRKDBF FILENAME(' + file_parm+')'; CommandLength = 27; CallP SystemCommand(CommandLine : CommandLength); Else; QM_msgtxt = 'You can not use F6 '+ 'unless the X-Object is a file.'; ExSr @WrtMsg; EndIf; When *IN12 OR but2 = 7; If lvl <= 1; QM_msgtxt = 'You can not go back a '+ ' level. Already at base level.'; ExSr @WrtMsg; Else; lvl = lvl - 1; df_level = lvl; df_xobj = xary(lvl); df_xlib = xLib(lvl); df_SubSet = xSub(lvl); Sav_Subset = xSub(lvl); Sav_XLib= xLib(lvl);

When

SAV_xobj = xary(lvl); ExSr @Position; ExSr @LoadSf; EndIf; *IN21 OR but2 = 8; Callp PopUp();

When *IN03 OR but2 = 3; Other; If (df_mos = 'M') OR (df_mos = 'S'); ExSr @Main; Else; QM_msgtxt = 'The Match or Search field ' + 'has to be "M" or "S". Try again.'; ExSr @Wrtmsg; EndIf; EndSl; EndDO; If SqlOpen; ExSr @Close; EndIf; *InLr = *On; Return; /End-Free //----------------------------------------------------------------------// End of main control. Subroutines follow. //---------------------------------------------------------------------/Free BegSr @Initial;

ExSr @ClearSf; Clear sfl1; Rr1 = 1; Write sfl1; // Set for first usage df_xlib = x_lib; df_xusage = x_usage; df_mos = x_mos; df_level = lvl; df_xobj = x_obj; df_hits = 0; df_unique = 0; Last_obj = ''; *IN89 = *ON; // Was a parm sent in If df_xobj <> ''; Rr1 = 0; ExSr @Main; EndIf; EndSr; /End-Free //----------------------------------------------------------------------/Free BegSr @ClearSf; *In57 = *ON;

Write sfc1; *IN57 = *Off; rr1 = 0; df_hits = 0; df_unique = 0; sflrcd = rr1 + 1; EndSr; /End-Free //---------------------------------------------------------------------- // Subroutine to send status messages //----------------------------------------------------------------------/Free BegSr @wrtmsg; CallP(E) SendMessage( QM_MsgId : QM_MsgF : QM_MsgTxt : QM_Msgdln : QM_MsgTyp : Qm_MsgQ : Qm_StkCtr : Qm_MsgKy : APIERR ); EndSr; /End-Free //----------------------------------------------------------------------/Free BegSr @XUsage; w_usage = df_xusage; ExFmt WIN1; df_xusage = w_usage; EndSr; /End-Free //---------------------------------------------------------------------- //Determine if the user changed the Xobject or pressed enter with a selec //----------------------------------------------------------------------/Free BegSr @Main; *In89 = *Off; If (sav_xobj <> df_xobj) OR (sav_xlib <> df_xlib) OR (sav_xusage <> df_xusage) OR (sav_SubSet <> df_SubSet) OR (sav_mos <> df_mos); lvl += 1; df_level = lvl; xary(lvl) = df_xobj; xLib(lvl) = df_xlib; xSub(lvl) = df_SubSet; sav_xobj = df_xobj; Sav_xlib = df_xlib; sav_xusage = df_xusage; sav_SubSet = df_SubSet; sav_mos = df_mos; ExSr @Position; ExSr @LoadSf; Else; IF *IN25; ExSr @LoadSf; Else;

ExSr @readSf; EndIf; EndIf; EndSr; /End-Free //----------------------------------------------------------------------// Get the stuff for the top of the screen, build the SQL //----------------------------------------------------------------------/Free BegSr @Position; If df_xlib = ''; df_xlib = '*LIBL '; SqlLibrary = '%'; ElseIf Df_XLib = '*LIBL'; SqlLibrary = '%'; Else; SqlLibrary = '%' + %Trim(Df_XLib) + '%'; EndIf; If df_SubSet = ''; SqlSubSet = '%'; Else; SqlSubSet = '%' + %Trim(Df_SubSet) + '%'; EndIf;

If df_mos = 'M'; df_search = ''; SqlObject = %Trim(Df_XObj); // Build the basic statement SqlStmt = 'select WhLib, WhPnam, WhText, WhFNam, ' WhFusg, WhSpkg ' From XRef Where Whfnam = ? ' And WhLib Like ? ' And WhPNam Like ? ' order by whlib , whpnam Else; df_search = 'Search XObj'; SqlObject = '%' + %Trim(Df_XObj) + '%'; // Build the basic statement SqlStmt = 'select WhLib, WhPnam, WhText, WhFNam, ' WhFusg, WhSpkg ' From XRef Where Whfnam like ? ' And WhLib Like ? ' And WhPNam Like ? ' order by whlib ,whpnam EndIf; ExSr @ClearSf;

' + ' + ' + ' + ' + ';

' ' ' ' ' '

+ + + + + ;

QM_msgtxt = 'please Wait, Fetching records...'; ExSr @WrtMsg; If SqlOpen; ExSr @Close; EndIf; // Prepare the statement ExSr @Prepare;

// Declare the cursor ExSr @Declare; ExSr @OpenCursor; SqlOpen = *on; //Get the Obs type and description and place on scree. p_obj = xary(lvl); p_desc = *blanks; f_desc = *blanks; s_desc = *blanks; Df_Create = 0; Df_Last = 0; Df_Used = 0; CallP GetXRefD (p_obj : P_desc : S_desc : F_desc : PCreate : PLast : PUsed ); Select; When p_desc <> ''; df_desc = p_desc; df_type = 'Program'; When f_desc <> ''; df_desc = f_desc; df_type = 'File'; When s_desc <> ''; f_desc = s_desc; df_type = 'Service PG'; Other; df_desc = 'Unresolved by system'; df_type = 'Unresolved'; EndSl; If PCreate <> ''; Df_Create = %UNS(%SubSt(PCreate:2:6)); JunkIso = %Date(Df_Create:*YMD); Df_Create = %UNS(%CHAR(JunkIso:*MDY0)); EndIf; If PLast <> ''; Df_Last = %UNS(%SubSt(PLast:2:6)); JunkIso = %Date(Df_Last:*YMD); Df_Last = %UNS(%CHAR(JunkIso:*MDY0)); EndIf; Df_Used = PUsed; EndSr; /End-Free //---------------------------------------------------------------------- // load subfile with the selected xobject and options //----------------------------------------------------------------------/Free BegSr @LoadSf; If SqlCod = 0; sflrcd = rr1 + 1; For Crap = 1 to 17; ExSr @Fetch; If SqlCod <> 0; ExSr @GetMenus; Leave; EndIf;

If last_obj <> ThisProgram; df_unique = df_unique + 1; *In52 = *On; Else; *In52 = *Off; EndIf; Clear Sfl1; If *In52 = *On; *In51 = *On; EndIf; sf_sel = ' '; sf_obj = ThisProgram; sf_lib = ThisLibrary; sf_desc = ThisText; sf_usage = usg(Thisfusg + 1); last_obj = ThisProgram; If df_mos = 'M'; sf_xobj = *blanks; Else; sf_xobj = ThisObject; EndIf; Select; When Thisspkg = 'P'; sf_type = 'Program'; Sf_ThisTyp = '*PGM'; When ThisSpkg = 'S'; sf_type = 'SQLPackage'; sf_ThisTyp = '*SQLPKG'; When ThisSpkg = 'V'; sf_type = 'Service PG'; Sf_ThisTyp = '*SRVPGM'; When ThisSpkg = 'M'; sf_type = 'Module ILE'; Sf_ThisTyp = '*MODULE'; When ThisSpkg = 'Q'; sf_type = 'Query/400 '; Sf_ThisTyp = '*QRYDFN'; When ThisSpkg = 'I'; sf_type = 'Inter Quer'; Sf_ThisTyp = '*USRSPC'; When ThisSpkg = 'L'; sf_type = '*QmQry SQL'; Sf_ThisTyp = '*QMQRY'; Other; sf_type = 'System hlp'; EndSl; rr1 = rr1 + 1; df_hits = rr1; Sf_Create = 0; Sf_Last = 0; Sf_Used = 0; CallP GetDates ( ThisProgram: ThisLibrary: Sf_ThisTyp: PCreate: PLast:

Pused); If PCreate <> ''; Sf_Create = %UNS(%SubSt(PCreate:2:6)); JunkIso = %Date(Sf_Create:*YMD); Sf_Create = %UNS(%CHAR(JunkIso:*MDY0)); EndIf; If PLast <> ''; Sf_Last = %UNS(%SubSt(PLast:2:6)); JunkIso = %Date(Sf_Last:*YMD); Sf_Last = %UNS(%CHAR(JunkIso:*MDY0)); EndIf; Sf_Used = PUsed; Write sfl1; EndFor; Else; ExSr @GetMenus; EndIf; QM_msgtxt = ''; ExSr @WrtMsg; EndSr; /End-Free //----------------------------------------------------------------------/Free BegSr @ReadSf; *In70 = *Off; rr1Save = rr1; rr1 = 1; Chain rr1 Sfl1; DoW %Found(); If sf_sel = '2' or Sf_Sel = '5'; CallP BrowseObj (Sf_Obj: Sf_Lib); sflrcd = rr1; sf_sel = ''; Update Sfl1; Leave; elseIf sf_sel = '8'; CommandLine = XRef_parm = 'WRKOBJ OBJ(' + %Trim(sf_lib) + '/' + %Trim(sf_obj) + ')'; CommandLength = %Len(CommandLine); CallP SystemCommand(CommandLine : CommandLength); sflrcd = rr1; sf_sel = ''; Update Sfl1; Leave; elseIf sf_sel = '9'; CommandLine = 'WRKOBJ OBJ(*AllUsr/' + %Trim(sf_obj) + ')'; CommandLength = %Len(CommandLine); CallP SystemCommand(CommandLine : CommandLength); sflrcd = rr1; sf_sel = ''; Update Sfl1; Leave; elseIf sf_sel <> *blanks; lvl = lvl + 1; df_level = lvl;

df_xobj = df_xLib = xary(lvl) = xLib(lvl) = xSub(lvl) = sav_xobj = sav_xlib = sav_xusage = sav_mos = *In70 = *ON; Leave; Else; rr1 += 1; Chain rr1 Sfl1; EndIf; EndDo;

sf_obj; sf_Lib; sf_obj; sf_Lib; Df_SubSet; sf_obj; Sf_lib; df_xusage; df_mos;

If *IN70; sav_xusage = 9; df_xusage = 9; ExSr @Position; ExSr @LoadSf; Else; Rr1 = Rr1Save; EndIf; EndSr; /End-Free //----------------------------------------------------------------------/Free BegSr @GetMenus; Clear Sfl1; Jda_Pgm = %SUbST( xary(lvl) :1:08); SetLl (Jda_Pgm) MMenuoL4; ReadE (Jda_Pgm) MMenuoL4; JDAOpen = *Off; DoW Not %EOF(MMenuoL4); JDAOpen = *On; Opt_Out = %EditC(OptNbr:'Z'); sf_desc = 'Found on Menu : ' + OptMnu + ' Option : ' + opt_out; sflrcd = rr1 + 1; rr1 = rr1 + 1; Write sfl1; ReadE (Jda_Pgm) MMenuoL4; EndDo; If Not JDAOpen And Rr1 = 0; Clear Sfl1; sf_desc = 'Object not found for selections'; sflrcd = rr1 + 1; rr1 = rr1 + 1; Write sfl1; EndIf; EndSr; /End-Free //----------------------------------------------------------------------C *PSSR BEGSR C MOVE errcode rtn_err C MOVE '*CANCL' ReturnPt 6 C ENDSR ReturnPt //------------------------------------------------------------------

// Prepare the statement C @Prepare BegSr C/exec sql C+ PREPARE P1 FROM :SqlStmt C/end-exec C EndSr //----------------------------------------------------------------- // Declare the cursor C @Declare BegSr C/exec sql C+ DECLARE C1 CURSOR FOR P1 C/end-exec C EndSr //----------------------------------------------------------------- // Fetch the records C @Fetch BegSr C/exec sql C+ FETCH C1 INTO :DS1 C/end-exec C EndSr //-----------------------------------------------------------------C @Close BegSr C/exec sql C+ CLOSE C1 C/end-exec C EndSr //----------------------------------------------------------------- // Open the Cursor C @OpenCursor BegSr C/EXEC SQL C+ Open C1 Using: SqlObject, C+ : SqlLibrary, C+ : SqlSubSet C/END-EXEC C EndSr 2737 //-----------------------------------------------------------------** Usage Array 1 is added to the usage for the index to get this data. call/DtaAra Inpt file Prt/Out file Dspf Upd Only OvR/OPNQRYF Up w/ ADD I/O/A Not Reslvd by system *ALL Default Variable used in program Qry/400 input IQuery Input IQuery Output

XREF0010DF.DSPF A*/PCMD A* A* CRTDSPF

FILE(*OBJLIB/*OBJNAM) +

A* A* A* A*/ECMD A*%%EC A A A A A A A A A A A A A A A A A A A 51 A N51 A A A A A A A A A A A A A A A A A A A A A A A A A A A A N57 A N57 A 57 A 47 A A A A

SRCFILE(*SRCLIB/*SRCFIL) + SRCMBR(*SRCMBR) + RSTDSP(*YES) DSPSIZ(27 132 *DS4) PRINT R FOOTER BUT2 OVERLAY 2Y 0B 26 2PSHBTNFLD((*NUMROW 1) (*GUTTER 1)) PSHBTNCHC(1 ' Enter ') PSHBTNCHC(2 ' ') PSHBTNCHC(3 'F1/F3Exit') PSHBTNCHC(4 'F4X-Usage') PSHBTNCHC(5 ' ') PSHBTNCHC(6 'F6 WRKDBF') PSHBTNCHC(7 'F12 Back') PSHBTNCHC(8 'F21 CLine') PSHBTNCHC(9 'F9 Source') SFL 10A H 1A B 8 2 11A O 8 4 COLOR(BLU) COLOR(GRN) 10A O 8 16 50A O 8 27 10A O 8 78 7A O 8 89 6Y 0O 8 97EDTCDE(Y) COLOR(WHT) 6Y 0O 8106EDTCDE(Y) COLOR(PNK) 5Y 0O 8115EDTCDE(Z) COLOR(BLU) 9A O 8121 SFLCTL(SFL1) SFLSIZ(0018) SFLPAG(0017) CF13(13 'HELP') CF01(03 'Exit') CA03(03) CF04(04 'USAGE SELECT') CF05(05 'X-DATABASE RELATIONS') CF06(06 'WORK DATA BASE FILE') CF08(08 'WORK Object Top') CF12(12 'BACK 1 LEVEL') CF21(21 'COMMAND LINE') CF09(09 'View Source of XObj') CF10(10 'View J- File') CF11(11 'Powerlock') OVERLAY SFLDSP SFLDSPCTL SFLCLR SFLEND(*SCRBAR *MORE) ROLLUP(25 'RollUp') 4S 0H SFLRCDNBR(CURSOR) 1 3'Date :' 1 10DATE

R SFL1 SF_THISTYP SF_SEL SF_OBJ SF_LIB SF_DESC SF_USAGE SF_TYPE SF_CREATE SF_LAST SF_USED SF_XOBJ R SFC1

SFLRCD

A A A A A A A A A A A A A A A A A A 89 A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A

DF_PGM DF_XOBJ DF_TYPE DF_DESC DF_CREATE

10

11A B 10A O 50A O 6Y 0O

DF_XLIB DF_SUBSET DF_LAST

10A B 10A B 6Y 0O

DF_LEVEL

2Y 0O

DF_XUSAGE

2Y 0B

DF_MOS DF_HITS DF_UNIQUE DF_USED

1A B 4Y 0O 4Y 0O 5Y 0O

EDTCDE(Y) 1 54'X-Object Cross Refference' COLOR(WHT) 1116'User :' 1123USER 2 3'Time :' 2 10TIME 2 27'X-Type ' COLOR(YLW) 2 39'X-Description ' COLOR(YLW) 2116'Pgm :' 2123 3 2'X-Obj ' COLOR(YLW) 3 13ENTFLDATR((*DSPATR UL)) DSPATR(PC) 3 27 3 39 3 94'Creation Date:' 3109EDTCDE(Y) DSPATR(UL) COLOR(WHT) 4 2'X-Lib ' COLOR(YLW) 4 13ENTFLDATR((*DSPATR UL)) 4 27'SubSet -->' COLOR(YLW) 4 39ENTFLDATR((*DSPATR UL)) 4 93'Last Used Date:' 4109EDTCDE(Y) COLOR(PNK) DSPATR(UL) 4121'Level:' 4128COLOR(WHT) EDTCDE(3) 5 2'X-Usage ' COLOR(YLW) 5 13EDTCDE(Z) ENTFLDATR((*DSPATR UL)) 5 16'(M)atch or (S)earch' COLOR(YLW) 5 36 5 40'Number of X-Refs' COLOR(YLW) 5 57EDTCDE(Z) 5 63'Number of Unique X-Refs' COLOR(YLW) 5 87EDTCDE(Z) COLOR(WHT) 5 93'Day Used Count:' 5112DSPATR(UL) EDTCDE(Z) COLOR(BLU) 6 2'2/5=' COLOR(WHT) 6 7'Source' COLOR(BLU) 6 15'8='

A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A

COLOR(WHT) 6 18'WrkObj/Lib' COLOR(BLU) 6 30'9=' COLOR(WHT) 6 33'WrkObj/*AllUsr' COLOR(BLU) 6 69'Any Key=' COLOR(WHT) 6 79'Drill Down' COLOR(BLU) 6115'F8=' COLOR(WHT) 6119'WrkObj(XObj)' COLOR(BLU) 7 2'S' DSPATR(UL) 7 4'Ref Object' DSPATR(UL) 7 16'Ref Lib ' DSPATR(UL) 7 27'Description ' DSPATR(UL) 7 78'Usage ' DSPATR(UL) 7 89'Type ' DSPATR(UL) 7 97' Create' DSPATR(UL) 7106' Last' DSPATR(UL) 7115' Days' DSPATR(UL) 11A O 7121DSPATR(UL) WINDOW(*DFT 17 40) 1 10'Select An Usage Number' COLOR(WHT) 2Y 0B 2 1EDTCDE(Z) COMP(LE 14) 2 4'0' COLOR(WHT) 2 6'Program call Or Data Area' 3 4'1' COLOR(WHT) 3 6'Input file' 4 4'2' COLOR(WHT) 4 6'Printer Or Output file' 5 4'3' COLOR(WHT) 5 6'Display file' 6 4'4' COLOR(WHT) 6 6'Update Only' 7 4'5' COLOR(WHT) 7 6'OverRide Or OPNQRYF' 8 4'6'

DF_SEARCH R WIN1

W_USAGE

A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A

COLOR(WHT) 8 6'Update with ADD' 9 4'7' COLOR(WHT) 9 6'DFU or Display file' 10 4'8' COLOR(WHT) 10 6'Not Resolved by system' 11 4'9' COLOR(WHT) 11 6'*ALL' 11 12'Default' 12 3'10' COLOR(WHT) 12 6'Variable used in program' 13 3'11' COLOR(WHT) 13 6'Query/400 input' 14 3'12' COLOR(WHT) 14 6'Interactive Query - NGS Inc. Input' 15 3'13' COLOR(WHT) 15 6'Interactive Query - NGS Inc. Output' 16 3'14' COLOR(WHT) 16 6'*QmQry (SQL)' R HELP 1 3'Date :' 1 10DATE EDTCDE(Y) 1 29'HELP' DSPATR(RI) COLOR(BLU) 1 57' ' COLOR(WHT) 1116'User :' 1123USER 2 3'Time :' 2 10TIME 2 54'X-Object Cross Refference' COLOR(WHT) 2116'Pgm :' 2123'XREFMMBR1' 4 3'Scope: This program shows how an object is referenced by the AS/400. This is accomplished by using the DSPPGMREF for all user' 5 10'libaries.' 5 21'You can see how a file/data area/pgm/srv pgm is being used and where program calls can be found.' 7 3'How to Use: the XMMB command starts this program. The command can beprompted to provide automatic action. Once in the program' 8 15'enter an object and press enter. The subfile builds with all hits for this object. You can then enter -

A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A

BUT3

select a ' 9 15'entry and press enter. This will then show you how this object is referenced. The Level on the top right of the ' 10 15'screen increases by 1. This alowsyou to press F12 and go back to the previous Xobject.' 12 3'Options: The Xlib should be 1. *LIBL to search all user created libaries.' 13 31'2. Any user created libary.' 15 12'The Xusage can be a number from 0 through 11. Use F4 to select and see descriptions of each usage.' 17 12'The Match or Search can be M. The will perform an exact match for theXobject.' 18 39'S. The Search will posistion the file at the first or nearest record of the object.' 19 42'The left most column will contain the Xobject that is being reference.' 20 42'The search is mainly intended for logical refference, but is not limited to this.' 22 12'The F12 Back function is used to go back and see what were previous selections from the subfile.' 2Y 0B 26 66PSHBTNFLD((*NUMROW 1) (*GUTTER 1)) PSHBTNCHC(1 'PRESS ENTER WHEN DONE') 1 90'HELP' DSPATR(RI) COLOR(BLU) 24 3'Any object that comes back as Unresolved as the X-Type is just an object that is not in your *LIBL but is in the *ALLUSRLIBL.'

XREF0011.CLP /*/PCMD /* /* CRTCLPGM PGM(*OBJLIB/*OBJNAM) + /* SRCFILE(*SRCLIB/*SRCFIL) + /* SRCMBR(*SRCMBR) + /* OPTION(*SRCDBG) /* /*/ECMD PGM /* IN PARM */DCL PARM(&OBJ &LIB &USAGE &MOS) VAR(&OBJ)

*/ */ */ */ */ */ */ */

TYPE(*CHAR) LEN(10) /* THE OBJECT

*/

/* /* /* /*

IN PARM IN PARM IN PARM RETURN

*/DCL */DCL */DCL */DCL CHGJOB CALL MONMSG GOTO

VAR(&LIB) VAR(&USAGE) VAR(&MOS) VAR(&RTN_ERR)

TYPE(*CHAR) TYPE(*DEC) TYPE(*CHAR) TYPE(*CHAR)

LEN(10) LEN(2 0) LEN(1) LEN(5)

/* /* /* /*

THE LIBRARY THE USAGE THE MATCH RETURN ERROR

*/ */ */ */

INQMSGRPY(*DFT) PGM(XREF0010) PARM(&OBJ &LIB &USAGE &MOS &RTN_ERR) MSGID(CEE9901) EXEC(GOTO CMDLBL(ERROR)) CMDLBL(OK)

ERROR: OK:

SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('You + have to be using a session with 27 x 132 + Lines. XRef has been cancelled.') RCLRSC CHGJOB INQMSGRPY(*SYSRPYL) ENDPGM

XREF0012.CLP /*/PCMD /* /* CRTCLPGM PGM(*OBJLIB/*OBJNAM) + /* SRCFILE(*SRCLIB/*SRCFIL) + /* SRCMBR(*SRCMBR) + /* OPTION(*SRCDBG) /* /*/ECMD PGM /* IN PARM */DCL */ /* RETURNED*/DCL */ /* RETURNED*/DCL */ /* RETURNED*/DCL */ /* RETURNED*/DCL */ /* RETURNED*/DCL */ /* RETURNED*/DCL */ MONMSG PARM(&OBJ &P_DESC &S_DESC &F_DESC &PCreate &PLast &PCount) VAR(&OBJ) +

*/ */ */ */ */ */ */ */

TYPE(*CHAR) LEN(10) /* THE OBJECT

VAR(&P_DESC) TYPE(*CHAR) LEN(50) /* PROGRAM DESCRIPTION VAR(&S_DESC) TYPE(*CHAR) LEN(50) /* SERVICE PGM DESCRIPT VAR(&F_DESC) TYPE(*CHAR) LEN(50) /* FILE DESCRIPTION VAR(&PCreate) TYPE(*Char) LEN(13 ) /* Create Date VAR(&PLast ) TYPE(*Char) LEN(7 ) /* last used Date

VAR(&PCount ) TYPE(*Dec ) LEN(5 0) /* Days Used COunt

MSGID(CPF9811 CPF9812 CPF9801 CPF0001) /* + The object does not exist in one ore more + of the chioces */

RTVOBJD

OBJ(&OBJ) OBJTYPE(*PGM) TEXT(&P_DESC) + CRTDATE(&PCREATE) USEDATE(&PLAST) + USECOUNT(&PCOUNT) OBJ(&OBJ) OBJTYPE(*SrvPgm) TEXT(&s_DESC) + CRTDATE(&PCREATE) USEDATE(&PLAST) + USECOUNT(&PCOUNT) OBJ(&OBJ) OBJTYPE(*File) TEXT(&F_DESC) + CRTDATE(&PCREATE) USEDATE(&PLAST) + USECOUNT(&PCOUNT)

RTVOBJD

RTVOBJD

ENDPGM

XREF0013.CLP /*/PCMD /* /* CRTCLPGM PGM(*OBJLIB/*OBJNAM) + /* SRCFILE(*SRCLIB/*SRCFIL) + /* SRCMBR(*SRCMBR) + /* OPTION(*SRCDBG) /* /*/ECMD PGM /* IN PARM */DCL */ /* IN PARM */DCL */ /* IN PARM */DCL */ /* RETURNED*/DCL */ /* RETURNED*/DCL */ /* RETURNED*/DCL */ MONMSG PARM(&OBJ &Lib &Type + &PCreate &PLast &PCount) VAR(&OBJ) VAR(&Lib) VAR(&Type)

*/ */ */ */ */ */ */ */

TYPE(*CHAR) LEN(10) /* THE OBJECT TYPE(*CHAR) LEN(10) /* THE Library TYPE(*CHAR) LEN(10) /* THE Type

VAR(&PCreate) TYPE(*Char) LEN(13 ) /* Create Date VAR(&PLast ) TYPE(*Char) LEN(7 ) /* last used Date

VAR(&PCount ) TYPE(*Dec ) LEN(5 0) /* Days Used COunt MSGID(CPF9811 CPF9812 CPF9801 CPF0001 + CPF9821) /* The object does not exist in + one ore more of the chioces */ OBJ(&LIB/&OBJ) OBJTYPE(&TYPE) + CRTDATE(&PCREATE) USEDATE(&PLAST) + USECOUNT(&PCOUNT) MSGID(CPF9802 CPF9820)

RTVOBJD MONMSG ENDPGM ENDPGM

XREF0014.RPGLE */PCMD *MODULE * CRTRPGMOD MODULE(QTEMP/*OBJNAM) + * SRCFILE(*SRCLIB/*SRCFIL) + * SRCMBR(*SRCMBR) + * DBGVIEW(*ALL ) */ECMD */PCMD *PGM * CRTPGM * * * * /ECMD PGM(*OBJLIB/*OBJNAM) + MODULE(QTEMP/*OBJNAM) + ACTGRP(*CALLER) + DETAIL(*BASIC)

H Option(*NoDebugIo:*SrcStmt:*NoExpDds) H Debug( *Yes ) H AlwNull(*UsrCtl) // Modification Highlights // Date Programmer Description // // * List ILE program information API D QBNLPGMI PR ExtPgm('QBNLPGMI') D UsrSpc 20A const D Format 8A const D PgmName 20A const D Errors 32766A options(*varsize) * List ILE service program information API D QBNLSPGM PR ExtPgm('QBNLSPGM') D UsrSpc 20A const D Format 8A const D SrvPgm 20A const D Errors 32766A options(*varsize) * Create User Space API D QUSCRTUS PR D UsrSpc 20A D ExtAttr 10A D InitSize 10I 0 D InitVal 1A D PublicAuth 10A D Text 50A D Replace 10A D Errors 32766A * Retrieve pointer to user space API D QUSPTRUS PR D UsrSpc 20A D Pointer * D D D D D D * API error code structure dsEC DS dsECBytesP dsECBytesA dsECMsgID dsECReserv dsECMsgDta ExtPgm('QUSCRTUS') const const const const const const const options(*varsize) ExtPgm('QUSPTRUS') const

10I 0 inz(%size(dsEC)) 10I 0 inz(0) 7A 1A 240A

* List API generic header structure D p_Header S * D dsLH DS BASED(p_Header) D* Filler D dsLHFill1 103A D* Status (I=Incomplete,C=Complete D* F=Partially Complete) D dsLHStatus 1A D* Filler D dsLHFill2 12A D* Header Offset D dsLHHdrOff 10I 0 D* Header Size D dsLHHdrSiz 10I 0 D* List Offset D dsLHLstOff 10I 0 D* List Size D dsLHLstSiz 10I 0 D* Count of Entries in List D dsLHEntCnt 10I 0 D* Size of a single entry D dsLHEntSiz 10I 0 * PGML0100 format: modules in program * SPGL0100 format: modules in service program * (these fields are the same in both APIs) D p_Entry S * D dsPgm DS based(p_Entry) D dsPgm_Pgm 10A D dsPgm_PgmLib 10A D dsPgm_Module 10A D dsPgm_ModLib 10A D dsPgm_SrcF 10A D dsPgm_SrcLib 10A D dsPgm_SrcMbr 10A D dsPgm_Attrib 10A D dsPgm_CrtDat 13A D dsPgm_SrcDat 13A D peProgram S 10A D peLibrary S 10A D oeSrcFile S 10A D oeSrcLib S 10A D oeSrcMember S 10A D ComboPgmLib S 20A D Entry S 10I 0 c c c c c c c c c c *entry plist parm parm parm parm parm eval eval eval eval peProgram peLibrary oeSrcFile oeSrcLib oeSrcMember ComboPgmLib = peProgram + peLibrary oeSrcFile oeSrcLib oeSrcMember = '' = '' = ''

* Create a user space to stuff module info into callp QUSCRTUS('MODULES QTEMP': 'USRSPC': 1024*1024: x'00': '*ALL': 'List of modules': '*YES': dsEC) callp QUSPTRUS('MODULES QTEMP': p_Header) * List all ILE programs modules to space c callp QBNLPGMI('MODULES QTEMP': 'PGML0100': c ComboPgmLib : dsEC) * Only get the first module. c eval p_Entry = p_Header + dsLHLstOff c c c c c c c c eval eval eval oeSrcFile oeSrcLib oeSrcMember = dsPgm_SrcF = dsPgm_SrcLib = dsPgm_SrcMbr

* And that's about the size of it eval *inlr = *on

XREF.PF ********************************************************************** * PRECOMPILER DIRECTIVES */PCMD * CRTPF * * * */ECMD A* A A* A A A* A A A* A A A* A A A A A* A A A A A* A A A A FILE(*OBJLIB/*OBJNAM) + SRCFILE(*SRCLIB/*SRCFIL) + SRCMBR(*SRCMBR) + SIZE(*NOMAX)

R QWHDRPPR WHLIB WHPNAM WHTEXT WHFNUM 10A 10A 50A 5S 0

TEXT('DSPPGMREF format') COLHDG('Library') TEXT('Library') COLHDG('Program') TEXT('Program') COLHDG('Description') TEXT('Text description') COLHDG('Number Of' 'Objects Referenced') TEXT('Number of objects referenced') COLHDG('Retrieval' 'Date And Time') TEXT('Retrieval date: century/date/time') COLHDG('Object' 'Referenced') TEXT('Object referenced: 1=*EXPR')

WHDTTM

13A

WHFNAM

11A

A* A A A A* A A A A A* A A A A A A* A A A A A* A A A A* A A A A A* A A A A* A A A A* A A A* A A A A* A A A A A* A A A A A*

WHLNAM

11A

COLHDG('Library') TEXT('Library referenced:1=*EXPR') COLHDG('Source' 'File Name') TEXT('File name in sourceprogram: 1=*EXPR') COLHDG('Number Of' 'RecordFormats') TEXT('Number of record formats referenced. -1=See WHRFNB') COLHDG('File Usage') TEXT('1=I,2=O,3=I/O,4=U,5=I/U,6=O/U,7=I/O/U,8=N/S,0=N/A') COLHDG('Record' 'Format') TEXT('Record format referenced') COLHDG('Format Level' 'Identifier') TEXT('Format level identifier') COLHDG('Number Of' 'Fields') TEXT('Number of fields') COLHDG('Object' 'Type') TEXT('Object type: F=File,P=Program, D=Data area') COLHDG('Object' 'Type') TEXT('Object type') COLHDG('System' 'Name') TEXT('System Name (SourceSystem, if file is DDM)') COLHDG('Referencing' 'Object' 'Type') TEXT('PGM=P, SQLPKG=S, SRVPGM=V, MODULE=M') COLHDG('Number Of' 'RecordFormats') TEXT('Number of record formats referenced.')

WHSNAM

11A

WHRFNO

3S 0

WHFUSG

2S 0

WHRFNM

10A

WHRFSN

13A

WHRFFN

5S 0

WHOBJT

1A

WHOTYP WHSYSN

10A 8A

WHSPKG

1A

WHRFNB

5S 0

K WHFNAM K WHLIB K WHPNAM

XREFBLD.CMD /*/PCMD /* /* /* CRTCMD /* /* /* /* /*/ECMD /* */ */ */ */ */ */ */ */ */ */

CMD(*OBJLIB/*OBJNAM) + SRCFILE(*SRCLIB/*SRCFIL) + SRCMBR(*SRCMBR) + PGM(XREF0001)

CMD

PROMPT('Submits The XRef (Re)Build')

XREFCL10.CLP /*/PCMD /* /* CRTCLPGM PGM(*OBJLIB/*OBJNAM) + /* SRCFILE(*SRCLIB/*SRCFIL) + /* SRCMBR(*SRCMBR) + /* OPTION(*SRCDBG) /* /*/ECMD PGM DCL DCL DCL DCL DCL PARM(&ThisObj &ThisLib ) &ThisObj &Thislib &ThisSFile &ThisSLib &ThisSMem *CHAR LEN(10) *CHAR LEN(10) *CHAR LEN(10) *CHAR LEN(10) *CHAR LEN(10)

*/ */ */ */ */ */ */ */ */

/* **************************************************************** + Try and retreive the values for this object + **************************************************************** */ Call Xref0017 Parm(&ThisObj + &Thislib + &ThisSFile + &ThisSLib + &ThisSMem ) StrSeu SrcFile(&ThisSLib/&ThisSFile) + SrcMBR(&ThisSMem) OPTION(5) /* INDRPG SRCMBR(&ThisSMem) SRCFILE(&ThisSLib/&ThisSFile) * / MONMSG MSGID(CPF0001 CPF9810) enddo ENDPGM

XREFINLINE.PF */PCMD * CRTPF FILE(*OBJLIB/*OBJNAM) + * SRCFILE(*SRCLIB/*SRCFIL) * SRCMBR(*SRCMBR) + * SIZE(*NOMAX) */ECMD A* A R XINLINE A* A R_LINE 132A A

TEXT('DUMP Receiver') COLHDG('Dump') TEXT('DUmp')

You might also like