Fluxo dos fontes
Enviado: 20 Nov 2025 09:48
Sei lá....
Mexendo com aplicativo velho, e criando ferramentas pra tentar ajudar em alguma coisa.
A mais recente foi esta, como quebra galho, direcionado ao uso encontrado.
O resultado
Mexendo com aplicativo velho, e criando ferramentas pra tentar ajudar em alguma coisa.
A mais recente foi esta, como quebra galho, direcionado ao uso encontrado.
Código: Selecionar todos
#include "directry.ch"
#include "inkey.ch"
PROCEDURE main
LOCAL aPRGList := {}, aItem, aItem2, aNewList := {}, nPos
setmode(33,100)
CLS
processapath( ".\", @aPRGList, 1 )
processapath( "d:\fontes\volmer\", @aPRGList, 2 )
// chamado e quem chama
// transformar pro contrário
FOR EACH aItem IN aPrgList
FOR EACH aItem2 IN aItem[3]
nPos := hb_AScan( aNewList, { | e | e[1] == aItem2[1] } )
IF nPos == 0
AAdd( aNewList, { aItem2[1], {} } )
nPos := Len( aNewList )
ENDIF
AAdd( aNewList[ nPos ][ 2 ], { aItem[1], {} } )
NEXT
NEXT
// tentar mover pra onde foi chamada, se só chamada 1 vez
FOR EACH aItem IN aNewList DESCEND
IF MoveItem( aItem, aNewList )
hb_ADel( aNewList, aItem:__EnumIndex(), .T. )
ENDIF
NEXT
ShowList( aNewList, "" )
? "Fim"
Inkey(0)
RETURN
FUNCTION ShowList( aList, cText )
LOCAL aItem
FOR EACH aItem IN aList
? cText + iif( Len( cText ) == 0, Space(3), "\--" ) + Pad( aItem[ 1 ], 10 )
Inkey(1)
IF Len( aItem[2] ) > 0
ShowList( aItem[2], cText + Space(10) )
ENDIF
NEXT
RETURN Nil
STATIC FUNCTION MoveItem( aSource, aList )
LOCAL nCount := 0, aNew, aNew2, aTarget, xItem
FOR EACH aNew IN aList
FOR EACH aNew2 IN aNew[2]
IF aNew2[1] == aSource[1]
nCount += 1
aTarget := aNew2[2]
ENDIF
NEXT
NEXT
IF nCount == 1
FOR EACH xItem IN aSource[2]
AAdd( aTarget, xItem )
NEXT
RETURN .T.
ENDIF
RETURN .F.
FUNCTION processapath( cPath, aPRGList, nStep )
LOCAL aList, aFile, cTxt, aItem
IF "tools" $ Lower( cPath ) .OR. "novo" $ Lower( cPath )
RETURN Nil
ENDIF
aList := Directory( cPath + "*.*", "D" )
FOR EACH aFile IN aList
DO CASE
CASE aFile[ F_NAME ] $ ".,.."
CASE "D" $ aFile[ F_ATTR ]
ProcessaPath( cPath + aFile[ F_NAME ] + "\", @aPRGList, nStep )
CASE Lower( Right( aFile[ F_NAME ], 4 ) ) == ".prg"
IF nStep == 1
AAdd( aPrgList, { hb_FNameName( Lower( aFile[ F_NAME ] ) ), cPath, {} } )
ELSE
cTxt := Lower( MemoRead( cPath + aFile[ F_NAME ] ) )
FOR EACH aItem IN aPrgList
IF ! Lower( hb_FNameName( aFile[ F_NAME ] ) ) == aItem[1] .AND. "do " + aItem[1] $ cTxt
AAdd( aItem[3], { hb_FNameName( aFile[ F_NAME ] ), cPath } )
ENDIF
NEXT
ENDIF
ENDCASE
NEXT
RETURN Nil
Código: Selecionar todos
me003_a
\--cp003_a
\--atpre_a
\--atpro_a
\--cp007_a
\--cp247
\--cp591_a
\--cp184_a
\--cp185_a
\--cpcap_a
\--cpipe_a
\--cppfo_a
\--ct000_a
\--ctela_a
\--ctsel_a
\--cthpe_a
\--cp187_a
\--cp360_a
\--cp400_a
\--cp403_a
\--cp409_a
\--cp413_a
\--cp421_a
\--cp431_a
\--cp443_a
\--cp560_a
\--cpcap_a
\--cp815
\--cpcap_a
\--cp947
\--cpbao_a
\--cpvfa_a
\--ha401_a
\--cpamk_a
\--ha402_a
\--ft600_a
\--me100
\--cp336
\--ha403
\--ftm07
\--ha404
\--ft001
\--ha405
\--me200
\--clien_a
\--cp310
\--cp337
\--forne_a
\--moeda_a
\--me300
\--cp145_a
\--cp146_a
\--cp673_a
\--cp904_a
\--cp741_a
\--cp853_a
\--cp854_a
\--ft607_a
\--ftmfa_a
\--me400_a
\--cp514_a
\--cp515_a
\--cp516_a