home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
mail.altrad.com
/
2015.02.mail.altrad.com.tar
/
mail.altrad.com
/
TEST
/
COMMERC_72_53OLD
/
PROGS
/
XREF.PRG
< prev
Wrap
Text File
|
2014-04-02
|
4KB
|
194 lines
* Programme: XREF.PRG
* Auteur...: R M ALCOCK
* Date.....: 13/9/96
* Copyright: (c) 1996, R M ALCOCK, Tous droits réservés
* Notes....: Looks in all the programs in a directry for statements which
* : need modifying in a network environment.
*
*
PROCEDURE MAIN
#include "Directry.ch" // For DIRECTORY function
#include "dcprint.ch"
LOCAL I
PUBLIC aStruct, Printing := .F. , ThePath := "C:\PROJECTS\COMMERC\NEW_SYS\PROGS\"
*
SET CONFIRM ON
SET DATE FRENCH
SET DELETED ON
SET EXACT ON
SET EXCLUSIVE OFF
SET FIXED OFF
SET SCOREBOARD OFF
SET WRAP ON
SET EPOCH TO 1980
CLEAR
NET_USE (1, "XREF", .T., 0, "", "")
NET_USE (2, "XREF2", .T., 0, "", "")
aStruct = {"main.prg"}
IF CONFIRM (10,,'N',"Création Fichier ?")
SELECT XREF
ZAP
CLEAR
? "PROGRAM FILE"
? "------------"
FOR i = 1 TO LEN(aStruct)
SEARCH_IT (aStruct[i])
NEXT
ENDIF
SELECT XREF
INDEX ON FUNCN TO XREF
CLEAR
//
//----------------------------------------------------
//
IF CONFIRM (10,,'N', 'Imprimer la liste ?' )
SELECT XREF
SET PRINTER TO LPT1
DCREPORT FORM XREF NOEJECT TO PRINT
SET PRINTER TO LPT1
ENDIF
//
//----------------------------------------------------
//
IF CONFIRM (10,,'N',"Trouver références ?")
SELECT XREF2
ZAP
? "FUNCTIONS"
? "---------"
SELECT XREF
GO TOP
DO WHILE .NOT. EOF ()
?
? FUNCN
IF ST <> "STATIC"
FIND_REFS (FUNCN)
ENDIF
SELECT XREF
SKIP
ENDDO
ENDIF
RETURN
//
//---------------------------------------------------------------------
//
FUNCTION SEARCH_IT(ProgName)
LOCAL aPRG:= MEMOREAD (ThePath + ProgName), NoLines, I, TheLine, J, K, IsStatic
STATIC NetWords:={"FUNCTION",;
"PROCEDURE" }
NoLines = MLCOUNT (aPRG, 254)
FOR I=1 TO NoLines
TheLine = Get_Line (MEMOLINE(aPRG, 254, I))
FOR J=1 TO LEN(NetWords)
K = AT(NetWords [J], TheLine)
IF K <> 0
IsStatic = IIF ("STATIC" $ TheLine , "STATIC", "")
TheLine = ALLTRIM (SUBSTR (TheLine, K+LEN(NetWords[J] )))
? STR(I,4)+" "+TheLine
SELECT XREF
ADD_REC()
REPLACE PRG WITH SUBSTR (ProgName, 1, AT(".",ProgName)-1),;
ST WITH IsStatic,;
FTYPE WITH NetWords [J],;
FUNCN WITH TheLine,;
LINE WITH I
ENDIF
NEXT
NEXT
RETURN.T.
//
//---------------------------------------------------------------------
//
FUNCTION FIND_REFS (FuncName)
LOCAL aPRG, NoLines, I, TheLine, J, K, La := SELECT()
LOCAL Before, After, Delim := " {([-\@)]+=}$*!/:.;<>"
I = AT( '(' , FuncName)
IF I <> 0
FuncName = ALLTRIM (SUBSTR (FuncName, 1, I-1))
ENDIF
FuncName = ALLTRIM (FuncName)
FOR I = 1 TO LEN (aStruct)
aPRG:= MEMOREAD (ThePath + aStruct[I])
NoLines = MLCOUNT (aPRG, 254)
? " " + aStruct[I]
FOR J = 1 TO NoLines
TheLine = Get_Line (MEMOLINE(aPRG, 254, J))
K = AT(FuncName, TheLine)
IF K <> 0
// See if the previous character and the following are delimiters
// i.e. the reference is a word
IF K=1
Before = 1 // Start of a line
ELSE
Before = AT ( SUBSTR (TheLine, K-1, 1) , Delim)
ENDIF
IF K + LEN(FuncName) - 1 = LEN (TheLine)
After = 1 // End of the line
ELSE
After = AT ( SUBSTR (TheLine, K+ LEN(FuncName), 1) , Delim)
ENDIF
IF Before <> 0 .AND. After <> 0 // Delimiters both sides
? STR(J,4)+" "+TheLine
SELECT XREF2
ADD_REC()
REPLACE FUNCN WITH FuncName,;
PROG WITH aStruct[I],;
LINE WITH J
SELECT XREF
ENDIF
ENDIF
NEXT
NEXT
SELECT (La)
RETURN.T.
//
//---------------------------------------------------------------------
//
FUNCTION Get_Line(aLine)
LOCAL I
aLine = SUBSTR(UPPER(ALLTRIM(aLine)), 1, 70)
IF SUBSTR(aLine,1,1) = "*".OR. SUBSTR(aLine,1,2)="//"
RETURN ""
ENDIF
I=AT("//",aLine)
IF I=0
I=AT("&&",aLine)
ENDIF
IF I<>0
aLine=SUBSTR(aLine,1,I-1)
ENDIF
RETURN aLine