输入要查找的文件名及库名,查找用到此文件名的程式名称
以下是DISPLAY FILE 代码:
A*%%TS SD 20090521 122245 ITJLLI REL-V5R3M0 5722-WDS
A*%%EC
A DSPSIZ(24 80 *DS3)
A PRINT
A CF03(03 'EXIT')
A******************************************************************
A R DSPR1
A*%%TS SD 20090521 122245 ITJLLI REL-V5R3M0 5722-WDS
A OVERLAY
A PUTOVR
A BLINK
A TEXT('Single Screen')
A 1 2'FIND'
A MSGFLD0001 40A O 1 20MSGID(L01 9301 SSAZ03)
A COLOR(WHT)
A WSID 10A O 1 62
A 1 73DATE
A EDTCDE(Y)
A 2 2'SCRN-1'
A 2 21'Find File Or Program Which Program-
A Use'
A COLOR(BLU)
A 2 62USER
A 2 73TIME
A 8 8'Find Strings :'
A FINDF 10A B 8 26
A 10 8'Find Library :'
A FINDL 10A B 10 26
A 23 2'F3=Exit'
A COLOR(BLU)
A 23 12'Enter =Process'
A COLOR(BLU)
以下是CLP 代码:
/*********************************************************************/
/* COPYRIGHT SYSTEM SOFTWARE ASSOCIATES,INC. CHICAGO,ILL. 1993 */
/*********************************************************************/
/* */
/* Program Id - Find */
/* Program Name - Find File Or Program Which Program Use In The Input*/
/* Library */
/* Author - MarkLi */
/* */
/* Bmr Date Description */
/* ---- ------- ----------------------------------------------- */
/*********************************************************************/
PGM
DCLF FILE(FINDFM)
DCLF FILE(ITJLLI/PGMOBJ) OPNID(A)
DCL VAR(&WSID) TYPE(*CHAR) LEN(10)
DCL VAR(&USER) TYPE(*CHAR) LEN(10)
DCL VAR(&JBNR) TYPE(*CHAR) LEN(10)
DCL VAR(&PGMNAME) TYPE(*CHAR) LEN(10) /*OBJ NAME*/
DCL VAR(&PGMLIB) TYPE(*CHAR) LEN(10) /*OBJ LIBL*/
DCL VAR(&FINDF) TYPE(*CHAR) LEN(10) /*FIND FILE*/
DCL VAR(&FINDL) TYPE(*CHAR) LEN(10) /*FIND LIB*/
RTVJOBA JOB(&WSID) USER(&USER) NBR(&JBNR)
DISPLAY:
SNDRCVF RCDFMT(DSPR1)
RMVMSG PGMQ(*SAME) CLEAR(*ALL)
/* Cmd-3 pressed = end program */
/* Find file eq *blanks = end program */
/* Find library eq *blanks = end program */
IF COND(&IN03 *EQ '1') THEN(DO)
SNDPGMMSG MSG('Program End')
GOTO EPGM
ENDDO
IF COND(&FINDF *EQ ' ') THEN(DO)
SNDPGMMSG MSG('The Find File Can''t Be Blanks!')
GOTO EPGM
ENDDO
IF COND(&FINDL *EQ ' ') THEN(DO)
SNDPGMMSG MSG('The Find Library Can''t Be Blanks!')
GOTO EPGM
ENDDO
IF COND(&FINDL *NE ' ') THEN(DO)
CHKOBJ OBJ(&FINDL) OBJTYPE(*LIB)
MONMSG MSGID(CPF9801) EXEC(SNDPGMMSG MSGID(CPF9801) +
MSGF(QCPFMSG))
GOTO DISPLAY
ENDDO
/* Process Program */
CLRPFM FILE(ITJLLI/PGMOBJ)
DSPOBJD OBJ(&FINDL/*ALL) OBJTYPE(*PGM) +
OUTPUT(*OUTFILE) OUTFILE(ITJLLI/PGMOBJ)
MONMSG MSGID(CPF2123) EXEC(GOTO EPGM)
CLRPFM FILE(ITJLLI/PGMOBJD)
LOOPREAD: RCVF OPNID(A)
MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(EOF))
CHGVAR VAR(&PGMNAME) VALUE(&A_ODOBNM)
CHGVAR VAR(&PGMLIB) VALUE(&A_ODLBNM)
DSPPGMREF PGM(&PGMLIB/&PGMNAME) OUTPUT(*OUTFILE) +
OUTFILE(ITJLLI/PGMOBJD) OUTMBR(*FIRST *ADD)
GOTO CMDLBL(LOOPREAD)
EOF: CALL PGM(FIND01) PARM(&FINDF)
EPGM: ENDPGM
以下是一个子过程文件代码:
F***************************************************************
F* PROGRAM I.D. : FIND01
F* PROGRAM DESCRIPTION : FIND FILE OR PROGRAM WHICH PROGRAM USE
F* WRITED BY : MARK LI
F* DATE :
F*
F* MOD# Date Description
F* ------- --------- ------------------------------------------
F***************************************************************
FPGMOBJD UF E K DISK
F***************************************************************
I*
I*
C*****************************************************************
C*
C *ENTRY PLIST
C PARM FILEN 10
C*****************************************************************
C*
C READ PGMOBJD 51
C *IN51 DOWEQ*OFF
C*
C WHFNAM IFNE FILEN
C DELETQWHDRPPR
C CLEARQWHDRPPR
C ENDIF
C*
C READ PGMOBJD 51
C ENDDO
C*
C SETON LR
C*
通过运行以上的程式FIND之后,可以到ITJLLI/PGMOBJD这个表里查找即可得到想要的程式名称。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
好东东,
收藏先.
[ 本帖最后由 fusl520 于 2009-5-25 16:29 编辑 ]
从object考虑 正确性和保险性是不错 我考虑的好像有点理想化了 但是我们公司
只有要重新编译才会改写代码。
我也是用DSPPGMREF,毕竟不会随便更改文件结构的.
程序改了的话,其他程序一般是不需要重新编译的.
不是用一个命令就可以达到了么?
DSPPGMREF把所有的程序引用的OBJ放到一个OUTFILE里,在用SQL去找好了,多简单
这个程序写的想法很不错
你说的功能好像可以在代码里面有一个搜索功能吧 搜索对应的字符串 然后对应的程序就逐一显示了
不过你这个方法比较不错 收藏一下
呵呵。这个本人经过一些群里的兄弟,集合他们的看法,自己弄的一个小程式。因为我也试过会出现以上所说的问题,而且觉得找得太辛苦。所以就写了一下。
好像qingzhou版主有一个精华帖里介绍过怎样看交叉引用。
(1)假如有一个表,你不知它会在什么样的程式中使用到。而当你把这个表给修改了。那用到的程式都要重新编译。
(2)假如有一个程式,可能会有几个或多个程式用到。如果把这个程式的代码给修改了。那其他的程式也要重新编译。
这个程序的意义是什么呢