Code: Select all
#include "FiveWin.ch"
static oMeter2
Static lAuto
static aKey ,aDatiW
//-----------------------------------------------------------------------------------------
function Main(cStart)
LOcal bAction := { | oMeter, oText, oDlg, lEnd | CreaTag( oMeter, oText, oDlg, @lEnd ) }
lAuto := .F.
IF cStart # nil .AND. upper(cStart) == 'AUTO'
lAuto := .T.
endif
MyMsgMeter( bAction,,"Wait" )
return nil
Static function CreaTag(oMeter, oText, oDlg, lEnd)
Local aDir := {}
Local aFile := {}
Local cSubDir := ""
Local cFile := ""
Local cString := ""
Local nX ,nY := 1
local nT := 1
Local aDAti := {}
Local lOk := .F.
Local cFileExt := ""
Local cRiga := ""
Local cText := + ;
'!_TAG_FILE_FORMAT 1 /extended format; --format=1 will not append ; to lines/' + CRLF + ;
'!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/' + CRLF + ;
'!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/'+ CRLF + ;
'!_TAG_PROGRAM_NAME Exuberant Ctags //'+ CRLF + ;
'!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/'+ CRLF + ;
'!_TAG_PROGRAM_VERSION 5.6 //' + CRLF
Local cDati := cText
Local cFileDat := "c:\FWMY\prova.tag"
Local cDir := "d:\prgwin\" + space(20)
* Local cFileDat := "c:\temp\list.tag"
* Local cDir := "c:\fwh\"
Local nOutFile := 0
Local nTot := 0
Local aDbf := {}
Local lNew := .f.
Local cChiave := ""
lOCAL nKey := 1
aKey := {}
aDatiW := {}
REQUEST DBFCDX
rddsetdefault( "dbfcdx" )
IF ! lAuto
MsgGet("", "Name file cTags ", @cFileDat )
MsgGet("", "Folder _ (include subdirectoris) ", @cDir )
IF MsgNoYes( "Re-read the directory ?", "" )
ferase("DIRE.DBF")
lNew := .T.
ENDIF
endif
if ! file("DIRE.DBF")
AADD (aDbf, {"RIGA", "C", 50, 0 })
dbcreate("DIRE", aDbf , "DBFCDX")
ENDIF
USE ("DIRE") VIA "DBFCDX"
cDir := trim(cDir)
aDir := DIRECTORY(cDir,"D")
IF lNew
ZAP
FOR nX := 1 to len(aDir)
IF aDir[nX,5] == "D"
cSubDir := cDir + aDir[nX,1] + "\"
dbappend()
field->RIGA := cSubDir
ENDIF
NEXT
ENDIF
IF ! lAuto
BROWSE()
ENDIF
dbgotop()
nOutfile := FCREATE(cFileDat, 0)
FWRITE(nOutfile, cText, len(cText))
do while ! eof()
aFile := DIRECTORY((trim(field->RIGA)))
FOR nY := 1 to len(aFile)
cFile := aFile[nY,1]
IF cFileExt(cFile) == "PRG"
nTot++
ENDIF
NEXT
dbskip()
enddo
oMeter2:nTotal:= nTot
nTot := 1
*For nX := 1 to len(aDir)
dbgotop()
nX := 0
do while ! eof()
nX++
cSubdir := trim(field->RIGA)
aFile := DIRECTORY(cSubDir)
for nY := 1 to len(aFile)
cFile := aFile[nY,1]
IF cFileExt(cFile) == "PRG"
oMeter:cText := cSubDir + "\" + cFile + " " + str(nX) + str(len(aDir))
cDati := ScriviFile(cSubdir + cFile,oMeter,@cChiave)
IF ! empty(cDAti)
nKey++
ENDIF
nTot++
oMeter2:Set(nTot )
oMeter2:cText := str(nTot)+ "/" + str(oMeter2:nTotal)
endif
IF lEnd
exit
endIF
NEXT
dbskip()
enddo
ASort( aKey ,,, {|x,y| x[1] > y[1] } )
ASort(aDatiW)
FOR nX := 1 to len(aDatiW)
FWRITE(nOutfile, aDAtiW[nX], len(aDAtiW[nX]))
NEXT
FCLOSE(nOutfile)
return .t.
//---------------------------------------------------------------------------------------------
Static function ScriviFile(cFileExt,oMeter,cChiave)
Local cFile := ""
Local nX := 0
Local nT := 1
Local cString := ""
Local lOk := .F.
Local cDati := ""
cChiave := ""
cString := MEMOREAD(cFileExt)
nT := MLCOUNT(cString,254)
oMeter:nTotal := nT // CARICAVERIFICHe
for nX := 1 TO nT
lOk := .F.
cFile := UPPER(memoline(cString,254,nX))
IF at("FUNCTION",cFile) > 0
cFile := STRTRAN(cFile, "FUNCTION", "")
cFile := STRTRAN(cFile, "STATIC", "")
lOk := .T.
ENDIF
if Lok ==.f.
IF at("METHOD",cFile) > 0
IF at("CLASS",cFile) > 0
cFile := STRTRAN(cFile, "METHOD", "")
lOk := .T.
endIF
ENDIF
ENDIF // RECNO
IF lOk
cFile := STRTRAN(cFile, " ", "")
cFile := SUBSTR(cFile,1,AT("(",cFile)-1)
cFile := trim(cFile)
IF substr(cFile,1,1) == "*"
cFile := ""
ENDIF
IF ! empty(cFile)
cChiave := alltrim(cFile)
cFile += chr(9) + cFileExt + chr(9) + alltrim(str(nX))
cDati += cFile + CRLF
aadd(aDAtiW,cFile + CRLF)
ENDIF
endif
oMeter:Set(nX )
next
Return cDati
//======================================================================================================
function MyMsgMeter( bAction, cMsg, cTitle )
local oDlg, oMeter, oText, oBtn, oFont
local lEnd := .f., lCancel := .f.
local nVal,nVal2 := 0
DEFAULT bAction := { || nil },;
cMsg := "Processing...", cTitle := "Please, wait"
DEFINE FONT oFont NAME GetSysFont() SIZE 0, -8
DEFINE DIALOG oDlg FROM 5, 5 TO 13, 45 TITLE cTitle FONT oFont
@ 0.2, 0.5 SAY oText VAR cMsg SIZE 130, 10 OF oDlg
@ 1, 0.5 METER oMeter VAR nVal TOTAL 10 SIZE 150, 10 OF oDlg
@ 2, 0.5 METER oMeter2 VAR nVal2 TOTAL 10 SIZE 150, 10 OF oDlg
@ 2.2, 10.4 BUTTON oBtn PROMPT "&Cancel" OF oDlg ;
ACTION ( lEnd:= .t., lCancel:= .t. ) SIZE 32, 11
oDlg:bStart = { || Eval( bAction, oMeter, oText, oDlg, @lEnd, oBtn ),;
lEnd := .t., oDlg:End() }
ACTIVATE DIALOG oDlg CENTERED ;
VALID lEnd
oFont:End()
return lCancel