* harbour/include/common.ch
* harbour/source/debug/dbghelp.prg
* harbour/source/debug/dbgmenu.prg
* harbour/source/debug/dbgtarr.prg
* harbour/source/debug/dbgtobj.prg
* harbour/source/debug/dbgwa.prg
* harbour/source/debug/debugger.prg
* harbour/source/rdd/dbupdat.prg
* harbour/source/rtl/achoice.prg
* harbour/source/rtl/checkbox.prg
* harbour/source/rtl/dbedit.prg
* harbour/source/rtl/getsys.prg
* harbour/source/rtl/listbox.prg
* harbour/source/rtl/persist.prg
* harbour/source/rtl/pushbtn.prg
* harbour/source/rtl/radiobtn.prg
* harbour/source/rtl/tbcolumn.prg
* harbour/source/rtl/tbrowse.prg
* harbour/source/rtl/tclass.prg
* harbour/source/rtl/teditor.prg
* harbour/source/rtl/tget.prg
* harbour/source/rtl/tgetlist.prg
* harbour/source/rtl/tlabel.prg
* harbour/source/rtl/treport.prg
* harbour/utils/hbdoc/genchm.prg
* harbour/utils/hbdoc/genhtm.prg
* harbour/utils/hbdoc/genng.prg
* harbour/utils/hbdoc/genos2.prg
* harbour/utils/hbdoc/genrtf.prg
* harbour/utils/hbdoc/gentrf.prg
* harbour/utils/hbdoc/html.prg
* harbour/utils/hbdoc/ng.prg
* harbour/utils/hbdoc/os2.prg
* harbour/utils/hbdoc/rtf.prg
* harbour/utils/hbmake/checks.prg
* harbour/utils/hbmake/hbmake.prg
* harbour/utils/hbmake/hbmutils.prg
* harbour/utils/hbmake/radios.prg
* harbour/utils/hbtest/rt_hvm.prg
+ HB_SYMBOL_UNUSED() added for .prg code. It can suppress unused
var warnings where applicable. The code won't generate any final
pcodes, so it won't cause overhead. The only current downside
is that it cannot be used inside codeblocks.
! Fixed a number (>200) of declared but unused variable /w2 error.
All parts were scanned and fixed (except contrib).
Note that there are several false "unreachable code" warnings,
and there are still quite a few unused var warnings inside
codeblocks. After fixing these /w2 switch could be added to
the standard build process to maintain code quality.
393 lines
13 KiB
Plaintext
393 lines
13 KiB
Plaintext
#include "common.ch"
|
|
#ifndef __HARBOUR__
|
|
#include 'hbclip.ch'
|
|
#else
|
|
DECLARE extenprg( cExt AS STRING, nType AS NUMERIC ) AS STRING
|
|
declare exten( cExt as string, nType as numeric ) as string
|
|
DECLARE GetSourceFiles( lSubdir as logical ) as ARRAY
|
|
DECLARE GetDirs( cPat as USUAL ) as Array
|
|
DECLARE GetBccDir() as String
|
|
DECLARE GetVccDir() as String
|
|
DECLARE GetMakeDir() as String
|
|
DECLARE HB_ARGV( n as numeric ) as string
|
|
declare hbmake_filedate( c as String ) as string
|
|
declare listasArray2( cString as String, cSep as String ) as Array
|
|
#endif
|
|
Function GetSourceFiles( lSubdir )
|
|
|
|
Local adirs AS ARRAY
|
|
Local aRet AS ARRAY := {}
|
|
Local lLinux := At( 'linux', lower(Os() )) > 0
|
|
Local cdir as String := If( !llinux, '\' + Curdir() + '\', '/' + Curdir() + '/' )
|
|
Local aStru := { cDir }
|
|
Local aData AS ARRAY
|
|
Local nCounter as numeric := 0
|
|
Local nArrayLen as numeric
|
|
Local nDatalen as numeric
|
|
Local y as numeric
|
|
Local cItem as String
|
|
Local cext
|
|
Local cpath
|
|
Local cdrive
|
|
Local nPos
|
|
Local xItem
|
|
|
|
Default lSubdir To .t.
|
|
|
|
|
|
While ++ nCounter <= Len( aStru )
|
|
If !Empty( adirs := GetDirs( astru[ nCounter ] ) ) // There are elements!
|
|
Aeval( aDirs, { | xItem | Aadd( aStru, xItem ) } )
|
|
Endif
|
|
Enddo
|
|
aDirs := {}
|
|
|
|
Asort( aStru )
|
|
nArrayLen := Len( aStru )
|
|
|
|
For nCounter := 1 To nArrayLen
|
|
|
|
|
|
If Len( aData := DIR_MULTI(aStru[ nCounter ]+"*.prg |"+aStru[ nCounter ]+"*.c") ) != 0
|
|
|
|
nDataLen := Len( aData )
|
|
|
|
For y := 1 To nDataLen
|
|
If At( '.PRG', Upper( adata[ y, 1 ] ) ) > 0 .or. At( '.C', Upper( adata[ y, 1 ] ) ) > 0
|
|
If lSubdir
|
|
Aadd( aRet, Strtran( astru[ nCounter ], cDir, '' ) + aData[ y, 1 ] + ;
|
|
Str( aData[ y, 2 ], 8 ) + ' ' + ;
|
|
Dtoc( aData[ y, 3 ] ) + ' ' + ;
|
|
aData[ y, 4 ] )
|
|
Elseif !lsubdir .and. At( If( lLinux, "/", "\" ), Strtran( astru[ nCounter ], cDir, '' ) ) == 0
|
|
Aadd( aRet, Pad( aData[ y, 1 ], 18 ) + ;
|
|
Str( aData[ y, 2 ], 8 ) + ' ' + ;
|
|
Dtoc( aData[ y, 3 ] ) + ' ' + ;
|
|
aData[ y, 4 ] )
|
|
Endif
|
|
Endif
|
|
Next
|
|
Endif
|
|
Next
|
|
|
|
For nCounter := 1 To Len( aret )
|
|
|
|
xItem := Substr( aret[ nCounter ], Rat( If( llinux, "/", '\' ), aret[ nCounter ] ) + 1 )
|
|
|
|
nPos := Ascan( astru, { | x | x := Substr( x, Rat( If( llinux, "/", '\' ), x ) + 1 ), Left( x, At( ".", x ) ) == Left( xitem, At( ".", xitem ) ) } )
|
|
If nPos > 0
|
|
Adel( astru, nPos )
|
|
Asize( astru, Len( astru ) - 1 )
|
|
Endif
|
|
|
|
Next
|
|
For nCounter := 1 To Len( aStru )
|
|
hb_FNAMESPLIT( Left( astru[ nCounter ], At( ' ', astru[ nCounter ] ) - 1 ), @cPath, @cItem, @cExt, @cDrive )
|
|
If ( cExt == '.C' ) .or. ( cExt == ".c" )
|
|
Aadd( aret, astru[ nCounter ] )
|
|
Endif
|
|
Next
|
|
|
|
Return aRet
|
|
|
|
Function extenprg( cExt, nType )
|
|
|
|
Local aext AS ARRAY := { "C", "c" }
|
|
Local nPos AS NUMERIC
|
|
Local cTemp AS String := ""
|
|
nPos := Ascan( aext, { | a | a == cExt } )
|
|
If nPos > 0
|
|
If nTYpe == 1
|
|
cTemp := Strtran( cExt, aExt[ nPos ], 'prg' )
|
|
Elseif ntype == 2
|
|
cTemp := Strtran( cExt, aExt[ nPos ], 'prG' )
|
|
Elseif ntype == 3
|
|
cTemp := Strtran( cExt, aExt[ nPos ], 'pRg' )
|
|
Elseif ntype == 4
|
|
cTemp := Strtran( cExt, aExt[ nPos ], 'Prg' )
|
|
Elseif ntype == 5
|
|
cTemp := Strtran( cExt, aExt[ nPos ], 'PRg' )
|
|
Elseif ntype == 6
|
|
cTemp := Strtran( cExt, aExt[ nPos ], 'PrG' )
|
|
Elseif ntype == 7
|
|
cTemp := Strtran( cExt, aExt[ nPos ], 'PRG' )
|
|
|
|
Endif
|
|
Endif
|
|
Return ctemp
|
|
|
|
Static Function GetDirs( cPattern )
|
|
|
|
Local aDir := {}
|
|
Local lLinux := At( 'linux', lower(Os()) ) > 0
|
|
|
|
Aeval( Directory( cPattern + if(lLinux,"*","*."), "D" ), ;
|
|
{ | xItem | If( xItem[ 5 ] = "D" .and. ;
|
|
( xItem[ 1 ] != "." .and. xItem[ 1 ] != ".." ), ;
|
|
( Aadd( aDir, cPattern + xItem[ 1 ] + If( llinux, "/", '\' ) ), ;
|
|
Outstd( "." ) ), "" ) } )
|
|
|
|
Return ( aDir )
|
|
|
|
Function GetBccDir()
|
|
|
|
Local cPath := ''
|
|
Local cEnv := Gete( "PATH" )
|
|
Local aEnv := listasarray2( cEnv, ";" )
|
|
Local nPos
|
|
|
|
For nPos := 1 To Len( aEnv )
|
|
If File( aenv[ nPos ] + '\bcc32.exe' ) .or. File( Upper( aenv[ nPos ] ) + '\BCC32.EXE' )
|
|
cPath := aenv[ nPos ]
|
|
cPath := Left( cPath, Rat( '\', cPath ) - 1 )
|
|
Exit
|
|
Endif
|
|
Next
|
|
|
|
Return cPath
|
|
Function GetVccDir()
|
|
|
|
Local cPath AS STRING := ''
|
|
Local cEnv AS STRING := Gete( "PATH" )
|
|
Local aEnv as array of string := listasarray2( cEnv, ";" )
|
|
Local nPos as numeric
|
|
|
|
For nPos := 1 To Len( aEnv )
|
|
If File( aenv[ nPos ] + '\cl.exe' ) .or. File( Upper( aenv[ nPos ] ) + '\cl.EXE' )
|
|
cPath := aenv[ nPos ]
|
|
cPath := Left( cPath, Rat( '\', cPath ) - 1 )
|
|
Exit
|
|
Endif
|
|
Next
|
|
|
|
Return cPath
|
|
|
|
Function exten( cExt, nType )
|
|
|
|
Local aext as array := { 'C', 'c' }
|
|
Local nPos as numeric
|
|
Local cTemp as string := ""
|
|
nPos := Ascan( aext, { | a | a == cExt } )
|
|
If nPos > 0
|
|
If nTYpe == 1
|
|
cTemp := Strtran( cExt, aExt[ nPos ], 'o' )
|
|
Elseif ntype == 2
|
|
cTemp := Strtran( cExt, aExt[ nPos ], 'obj' )
|
|
Endif
|
|
Endif
|
|
Return ctemp
|
|
Function ListAsArray2( cList, cDelimiter )
|
|
|
|
Local nPos as numeric
|
|
Local aList as array := {} // Define an empty array
|
|
|
|
If cDelimiter = NIL
|
|
cDelimiter := ","
|
|
Endif
|
|
//
|
|
Do While ( nPos := At( cDelimiter, cList ) ) != 0
|
|
Aadd( aList, Alltrim( Substr( cList, 1, nPos - 1 ) ) ) // Add a new element
|
|
cList := Substr( cList, nPos + 1 )
|
|
Enddo
|
|
Aadd( aList, Alltrim( cList ) ) // Add final element
|
|
//
|
|
Return aList // Return the array
|
|
|
|
Function GetMakeDir()
|
|
|
|
Local cPath := ""
|
|
Local cExe := HB_ARGV( 0 )
|
|
|
|
cExe:=strtran(cExe,"/","\")
|
|
cPath := Left( cexe, Rat( "\", cexe ) - 1 )
|
|
cPath := Left( cPath, Rat( "\", cPath ) - 1 )
|
|
|
|
Return cPath
|
|
|
|
Function GetSourceDirMacros()
|
|
|
|
Local adirs AS ARRAY
|
|
Local lLinux := At( 'linux', lower(Os()) ) > 0
|
|
Local cdir as String := If( llinux, '/' + Curdir() + '/', '\' + Curdir() + '\' )
|
|
Local aStru := { cDir }
|
|
|
|
Local nCounter as numeric := 0
|
|
Local amacros as Array := {}
|
|
While ++ nCounter <= Len( aStru )
|
|
If !Empty( adirs := GetDirs( astru[ nCounter ] ) ) // There are elements!
|
|
Aeval( aDirs, { | xItem | Aadd( aStru, xItem ) } )
|
|
Endif
|
|
Enddo
|
|
For nCounter := 1 To Len( aStru )
|
|
Aadd( amacros, { "SRC" + Strzero( nCounter, 2, 0 ), Strtran( astru[ nCounter ], cDir, '' ), .f. } )
|
|
Next
|
|
Return amacros
|
|
|
|
Function hbmake_filedate( cFileName )
|
|
|
|
Local aFiles := Directory( cFileName )
|
|
|
|
Return If( Len( aFiles ) == 1, aFiles[ 1, 3 ], Ctod( '' ) )
|
|
|
|
Function hbmake_filetime( cFileName )
|
|
|
|
Local aFiles := Directory( cFileName )
|
|
|
|
Return If( Len( aFiles ) == 1, aFiles[ 1, 4 ], '' )
|
|
|
|
Function TD2JUL( CTIME, DDATE )
|
|
|
|
Return DDATE - Ctod( '01/01/1900' ) + ( PRB_INT( TTOS( CTIME ) / 100000,, 5 ) )
|
|
|
|
Function TTOS( CTIME )
|
|
|
|
Return ( Val( Substr( CTIME, 7, 2 ) ) ) + ;
|
|
( Val( Substr( CTIME, 4, 2 ) ) * 60 ) + ;
|
|
( Val( Substr( CTIME, 1, 2 ) ) * 3600 )
|
|
|
|
Function PRB_INT( SOMENUMBER, length, NUM_DECIMALS )
|
|
|
|
Local NEGATIVE := ( SOMENUMBER < 0 )
|
|
Local SOMESTRING
|
|
Local dotat
|
|
|
|
Default NUM_DECIMALS To 0
|
|
Default length To 19
|
|
|
|
If NEGATIVE
|
|
SOMENUMBER := Abs( SOMENUMBER )
|
|
Endif
|
|
|
|
SOMENUMBER += .0000000000000005
|
|
|
|
SOMESTRING := Alltrim( Str( SOMENUMBER ) )
|
|
|
|
dotat := At( '.', somestring )
|
|
|
|
Do Case
|
|
Case NUM_DECIMALS == 0
|
|
If dotat > 0
|
|
somestring := Left( somestring, dotat - 1 )
|
|
Endif
|
|
Case NUM_DECIMALS > 0
|
|
If dotat > 0
|
|
somestring := Left( somestring, dotat + num_decimals )
|
|
Endif
|
|
Endcase
|
|
|
|
If NEGATIVE
|
|
SOMESTRING := '-' + SOMESTRING
|
|
Endif
|
|
|
|
Return Val( SOMESTRING )
|
|
Function exte( cExt, nType )
|
|
|
|
Local aext := { 'prg', 'prG', 'pRg', 'Prg', 'PRg', 'PrG', 'PRG' }
|
|
Local nPos
|
|
Local cTemp := ""
|
|
nPos := Ascan( aext, { | a | a == cExt } )
|
|
If nPos > 0
|
|
If nTYpe == 1
|
|
cTemp := Strtran( cExt, aExt[ nPos ], 'c' )
|
|
Elseif ntype == 2
|
|
cTemp := Strtran( cExt, aExt[ nPos ], 'obj' )
|
|
Elseif ntype == 3
|
|
cTemp := Strtran( cExt, aExt[ nPos ], 'o' )
|
|
|
|
Endif
|
|
Endif
|
|
Return ctemp
|
|
Procedure ATTENTION( CSTRING, NLINENUM, CCOLOR )
|
|
|
|
Local COLDCOLOR
|
|
|
|
Default NLINENUM To 24
|
|
Default CCOLOR To 'GR+/R'
|
|
|
|
COLDCOLOR := Setcolor( CCOLOR )
|
|
|
|
CSTRING := ' ' + Alltrim( CSTRING ) + ' '
|
|
|
|
Devpos( NLINENUM, c( CSTRING ) )
|
|
|
|
Devout( CSTRING )
|
|
|
|
Setcolor( COLDCOLOR )
|
|
|
|
Return
|
|
|
|
Function c( CSTRING )
|
|
|
|
Return Max( ( Maxcol() / 2 ) - Int( Len( CSTRING ) / 2 ), 0 )
|
|
|
|
Function ReadLN( leof )
|
|
|
|
Local cBuffer := ""
|
|
cBuffer := FT_FREADLN()
|
|
cBuffer := Strtran( cBuffer, Chr( 13 ), '' )
|
|
cBuffer := Strtran( cBuffer, Chr( 10 ), '' )
|
|
FT_FSKIP( 1 )
|
|
leof := ft_FEOF()
|
|
Return cBuffer
|
|
|
|
Function GetinstaledLibs( clibs, lGcc )
|
|
|
|
Local adeflib := { 'lang' + If( lgcc, '.a', '.lib' ), 'vm' + If( lgcc, '.a', '.lib' ), 'rtl' + If( lgcc, '.a', '.lib' ), 'rdd' + If( lgcc, '.a', '.lib' ), 'macro' + If( lgcc, '.a', '.lib' ), 'pp' + If( lgcc, '.a', '.lib' ), 'dbfntx' + If( lgcc, '.a', '.lib' ), 'dbfcdx' + If( lgcc, '.a', '.lib' ), 'common' + If( lgcc, '.a', '.lib' ), 'gtwin' + If( lgcc, '.a', '.lib' ), 'debug' + If( lgcc, '.a', '.lib' ), 'gtpca' + If( lgcc, '.a', '.lib' ), 'gtdos' + If( lgcc, '.a', '.lib' ), 'gtsln' + If( lgcc, '.a', '.lib' ), 'gtstd' + If( lgcc, '.a', '.lib' ), 'zlib1' + If( lgcc, '.a', '.lib' ), 'ziparchive' + If( lgcc, '.a', '.lib' ), 'rddads' + If( lgcc, '.a', '.lib' ), 'ace32' + If( lgcc, '.a', '.lib' ), 'libnf' + If( lgcc, '.a', '.lib' ), 'libct' + If( lgcc, '.a', '.lib' ), 'htmllib' + If( lgcc, '.a', '.lib' ), 'libgt' + If( lgcc, '.a', '.lib' ), 'libmisc' + If( lgcc, '.a', '.lib' ), 'mysql' + If( lgcc, '.a', '.lib' ), 'libmysql' + If( lgcc, '.a', '.lib' ), 'mysqlclient' + If( lgcc, '.a', '.lib' ), 'samples' + If( lgcc, '.a', '.lib' ), 'pdflib' + If( lgcc, '.a', '.lib' ), 'nulsys' + If( lgcc, '.a', '.lib' ), 'gtcgi' + If( lgcc, '.a', '.lib' ) }
|
|
Local aReturnLibs := {}
|
|
Local aLibs := Directory( clibs )
|
|
Local nPos
|
|
Local nCount
|
|
Local citem
|
|
if lgcc
|
|
aeval(aLibs,{|x,y| citem:=x[1] ,if(left(citem,3)=="lib", alibs[y,1]:=substr(cItem,4),)})
|
|
endif
|
|
|
|
For ncount := 1 To Len( alibs )
|
|
citem := Lower( alibs[ ncount, 1 ] )
|
|
npos := Ascan( adeflib, { | a | Lower( a ) == citem } )
|
|
If npos == 0
|
|
Aadd( aReturnLibs, alibs[ ncount, 1 ] )
|
|
Endif
|
|
Next
|
|
|
|
Return aReturnLibs
|
|
Function Getlibs( lgcc ,cDir)
|
|
Local lLinux:=at('linux',lower(os()))>0
|
|
Local ainstaledlibs := Getinstaledlibs( If( !llinux, if(!lgcc, cDir+"\*.lib",cDir+"\*.a") , '/usr/lib/harbour/*.a' ),lGcc )
|
|
Local aLibsDesc := { { "Harbour Ct3 library - Libct", 'ct' + If( lgcc, '.a', '.lib' ) }, ;
|
|
{ "Harbour Misc library - Libmisc", 'misc' + If( lgcc, '.a', '.lib' ) }, ;
|
|
{ "Harbour html library - Htmllib", 'html' + If( lgcc, '.a', '.lib' ) }, ;
|
|
{ "Harbour Nanfor library - Libnf", 'nf' + If( lgcc, '.a', '.lib' ) }, ;
|
|
{ "Harbour Gt library - Libgt", 'nf' + If( lgcc, '.a', '.lib' ) }, ;
|
|
{ "Harbour Zip library Zlib1", 'zlib1.lib ziparchive' + If( lgcc, '.a', '.lib' ) }, ;
|
|
{ "Harbour Hbole library Hbole", 'hbole' + If( lgcc, '.a', '.lib' ) + ' ole2' + If( lgcc, '.a', '.lib' ) }, ;
|
|
{ "Harbour Mysql library - MySql", 'mysql' + If( lgcc, '.a', '.lib' ) + ' libmysql' + If( lgcc, '.a', '.lib' ) + ' mysqlclient' + If( lgcc, '.a', '.lib' ) }, ;
|
|
{ "Harbour Samples library - Samples", 'samples' + If( lgcc, '.a', '.lib' ) } }
|
|
Aeval( ainstaledlibs, { | x | Aadd( aLibsDesc, { "User - " + x +" Library", x } ) } )
|
|
Return aLibsDesc
|
|
|
|
*+ EOF: HBMUTILS.PRG
|
|
FUNCTION DIR_MULTI( cFileMaskList, cAttr )
|
|
LOCAL aList := ListasArray2( cFileMaskList, "|" )
|
|
AEval( aList, {|tmp, tmp1| aList[ tmp1 ] := DIRECTORY( tmp, cAttr ) })
|
|
RETURN ArrayAJoin(alist)
|
|
FUNCTION ArrayAJoin( array )
|
|
LOCAL tmp
|
|
LOCAL nLenArray := Len( array )
|
|
LOCAL nLen
|
|
LOCAL nPos := Len( array[ 1 ] ) + 1
|
|
|
|
nLen := 0
|
|
FOR tmp := 1 TO nLenArray
|
|
nLen += Len( array[ tmp ] )
|
|
NEXT
|
|
|
|
ASize( array[ 1 ], nLen )
|
|
|
|
FOR tmp := 2 TO nLenArray
|
|
ACopy( array[ tmp ], array[ 1 ], , , nPos )
|
|
nPos += Len( array[ tmp ] )
|
|
NEXT
|
|
|
|
RETURN array[ 1 ]
|