Hi
Szakáts Viktor wrote:
>
> Hi Pritpal,
> Thanks, please send them to the list or to me and I'll try to add
> them to source.
>
> Part of my goal is to present a relatively strict format for these
> files, otherwise we will fall back to formatting issues and choosing
> formatting styles. I wanted to avoid that. Anyhow there is probably
> a few ways to enhance current state (like placement of filters f.e.).
>
Here it is. It is just separating key=value pairs in .hbp files.
STATIC PROCEDURE HBP_ProcessOne( cFileName,;
/* @ */ aPOT,;
/* @ */ aLIBUSER,;
/* @ */ aLIBUSERGT,;
/* @ */ aLIBPATH,;
/* @ */ aLIBDYNHAS,;
/* @ */ aINCPATH,;
/* @ */ aINCTRYPATH,;
/* @ */ aOPTPRG,;
/* @ */ aOPTC,;
/* @ */ aOPTRES,;
/* @ */ aOPTL,;
/* @ */ lGUI,;
/* @ */ lMT,;
/* @ */ lSHARED,;
/* @ */ lSTATICFULL,;
/* @ */ lDEBUG,;
/* @ */ lOPT,;
/* @ */ lNULRDD,;
/* @ */ lMAP,;
/* @ */ lSTRIP,;
/* @ */ nCOMPR,;
/* @ */ nHEAD,;
/* @ */ lRUN,;
/* @ */ lINC,;
/* @ */ cGT )
LOCAL cFile := MemoRead( cFileName ) /* NOTE: Intentionally using
MemoRead() which handles EOF char. */
LOCAL cLine, cKeyWord, n
LOCAL cItem
IF ! hb_osNewLine() == _EOL
cFile := StrTran( cFile, hb_osNewLine(), _EOL )
ENDIF
IF ! hb_osNewLine() == Chr( 13 ) + Chr( 10 )
cFile := StrTran( cFile, Chr( 13 ) + Chr( 10 ), _EOL )
ENDIF
FOR EACH cLine IN hb_ATokens( cFile, _EOL )
cLine := AllTrim( ArchCompFilter( AllTrim( cLine ) ) )
if ( n := at( '=', cLine ) ) > 0
cKeyWord := lower( alltrim( substr( cLine, 1, n-1 ) ) )
cLine := alltrim( substr( cLine, n+1 ) )
endif
DO CASE
//CASE Lower( Left( cLine, Len( "pots=" ) ) ) == "pots="
; cLine := SubStr( cLine, Len( "pots=" ) + 1 )
CASE cKeyWord == "pots"
FOR EACH cItem IN hb_ATokens( cLine,, .T. )
cItem := PathSepToTarget( MacroProc( StrStripQuote( cItem ),
FN_DirGet( cFileName ) ) )
IF AScan( aPOT, {|tmp| tmp == cItem } ) == 0
AAddNotEmpty( aPOT, cItem )
ENDIF
NEXT
//CASE Lower( Left( cLine, Len( "libs=" ) ) ) == "libs="
; cLine := SubStr( cLine, Len( "libs=" ) + 1 )
CASE cKeyWord == "libs"
FOR EACH cItem IN hb_ATokens( cLine,, .T. )
cItem := PathSepToTarget( MacroProc( StrStripQuote( cItem ),
FN_DirGet( cFileName ) ) )
IF AScan( aLIBUSER, {|tmp| tmp == cItem } ) == 0
AAddNotEmpty( aLIBUSER, cItem )
ENDIF
NEXT
//CASE Lower( Left( cLine, Len( "libpaths=" ) ) ) == "libpaths="
; cLine := SubStr( cLine, Len( "libpaths=" ) + 1 )
CASE cKeyWord == "libpaths"
FOR EACH cItem IN hb_ATokens( cLine,, .T. )
cItem := PathSepToTarget( MacroProc( StrStripQuote( cItem ),
FN_DirGet( cFileName ) ) )
IF ! Empty( cItem ) .AND. hb_DirExists( cItem )
IF AScan( aLIBPATH, {|tmp| tmp == cItem } ) == 0
AAdd( aLIBPATH, cItem )
ENDIF
ENDIF
NEXT
//CASE Lower( Left( cLine, Len( "incpaths=" ) ) ) == "incpaths="
; cLine := SubStr( cLine, Len( "incpaths=" ) + 1 )
CASE cKeyWord == "incpaths"
FOR EACH cItem IN hb_ATokens( cLine,, .T. )
cItem := PathSepToTarget( MacroProc( StrStripQuote( cItem ),
FN_DirGet( cFileName ) ) )
IF AScan( aINCPATH, {|tmp| tmp == cItem } ) == 0
AAddNotEmpty( aINCPATH, cItem )
ENDIF
NEXT
//CASE Lower( Left( cLine, Len( "inctrypaths=" ) ) ) ==
"inctrypaths=" ; cLine := SubStr( cLine, Len( "inctrypaths=" ) + 1 )
CASE cKeyWord == "inctrypaths"
FOR EACH cItem IN hb_ATokens( cLine,, .T. )
cItem := PathSepToTarget( MacroProc( StrStripQuote( cItem ),
FN_DirGet( cFileName ) ) )
IF AScan( aINCTRYPATH, {|tmp| tmp == cItem } ) == 0
AAddNotEmpty( aINCTRYPATH, cItem )
ENDIF
NEXT
/* NOTE: This keyword is used in hbmk.cfg and signals whether
a given optional module (gtsln, gtcrs, gtxwc) is part of the
Harbour shared library, so that we can automatically add
the required libs here. [vszakats] */
//CASE Lower( Left( cLine, Len( "libdynhas=" ) ) ) == "libdynhas="
; cLine := SubStr( cLine, Len( "libdynhas=" ) + 1 )
CASE cKeyWord == "libdynhas"
FOR EACH cItem IN hb_ATokens( cLine,, .T. )
cItem := PathSepToTarget( StrStripQuote( cItem ) )
IF ! Empty( cItem )
IF AScan( aLIBDYNHAS, {|tmp| tmp == cItem } ) == 0
AAdd( aLIBDYNHAS, cItem )
ENDIF
IF Lower( Left( cItem, 2 ) ) == "gt" .AND. ;
AScan( s_aLIBCOREGT, {|tmp| Lower( tmp ) == Lower( cItem )
} ) == 0
AAdd( s_aLIBCOREGT, cItem )
ENDIF
ENDIF
NEXT
//CASE Lower( Left( cLine, Len( "echo=" ) ) ) == "echo="
; cLine := SubStr( cLine, Len( "echo=" ) + 1 )
CASE cKeyWord == "echo"
cLine := MacroProc( cLine, FN_DirGet( cFileName ) )
IF ! Empty( cLine )
OutStd( hb_StrFormat( I_( "%1$s" ), cLine ), hb_osNewLine() )
ENDIF
//CASE Lower( Left( cLine, Len( "prgflags=" ) ) ) == "prgflags="
; cLine := SubStr( cLine, Len( "prgflags=" ) + 1 )
CASE cKeyWord == "prgflags"
FOR EACH cItem IN hb_ATokens( cLine,, .T. )
cItem := PathSepToTarget( MacroProc( StrStripQuote( cItem ),
FN_DirGet( cFileName ) ) )
IF AScan( aOPTPRG, {|tmp| tmp == cItem } ) == 0
AAddNotEmpty( aOPTPRG, cItem )
ENDIF
NEXT
//CASE Lower( Left( cLine, Len( "cflags=" ) ) ) == "cflags="
; cLine := SubStr( cLine, Len( "cflags=" ) + 1 )
CASE cKeyWord == "cflags"
FOR EACH cItem IN hb_ATokens( cLine,, .T. )
cItem := MacroProc( StrStripQuote( cItem ), FN_DirGet( cFileName
) )
IF AScan( aOPTC, {|tmp| tmp == cItem } ) == 0
AAddNotEmpty( aOPTC, cItem )
ENDIF
NEXT
//CASE Lower( Left( cLine, Len( "resflags=" ) ) ) == "resflags="
; cLine := SubStr( cLine, Len( "resflags=" ) + 1 )
CASE cKeyWord == "resflags"
FOR EACH cItem IN hb_ATokens( cLine,, .T. )
cItem := MacroProc( StrStripQuote( cItem ), FN_DirGet( cFileName
) )
IF AScan( aOPTRES, {|tmp| tmp == cItem } ) == 0
AAddNotEmpty( aOPTRES, cItem )
ENDIF
NEXT
//CASE Lower( Left( cLine, Len( "ldflags=" ) ) ) == "ldflags="
; cLine := SubStr( cLine, Len( "ldflags=" ) + 1 )
CASE cKeyWord == "ldflags"
FOR EACH cItem IN hb_ATokens( cLine,, .T. )
cItem := MacroProc( StrStripQuote( cItem ), FN_DirGet( cFileName
) )
IF AScan( aOPTL, {|tmp| tmp == cItem } ) == 0
AAddNotEmpty( aOPTL, cItem )
ENDIF
NEXT
//CASE Lower( Left( cLine, Len( "gui=" ) ) ) == "gui="
; cLine := SubStr( cLine, Len( "gui=" ) + 1 )
CASE cKeyWord == "gui"
DO CASE
CASE ValueIsT( cLine ) ; lGUI := .T.
CASE ValueIsF( cLine ) ; lGUI := .F.
ENDCASE
//CASE Lower( Left( cLine, Len( "mt=" ) ) ) == "mt="
; cLine := SubStr( cLine, Len( "mt=" ) + 1 )
CASE cKeyWord == "mt"
DO CASE
CASE Lower( cLine ) == "mt" ; lMT := .T. /* Compatibility */
CASE ValueIsT( cLine ) ; lMT := .T.
CASE ValueIsF( cLine ) ; lMT := .F.
ENDCASE
//CASE Lower( Left( cLine, Len( "shareddef=" ) ) ) == "shareddef="
; cLine := SubStr( cLine, Len( "shareddef=" ) + 1 )
CASE cKeyWord == "shareddef"
IF lSHARED == NIL
DO CASE
CASE ValueIsT( cLine ) ; lSHARED := .T. ; lSTATICFULL := .F.
CASE ValueIsF( cLine ) ; lSHARED := .F. ; lSTATICFULL := .F.
ENDCASE
ENDIF
//CASE Lower( Left( cLine, Len( "shared=" ) ) ) == "shared="
; cLine := SubStr( cLine, Len( "shared=" ) + 1 )
CASE cKeyWord == "shared"
DO CASE
CASE ValueIsT( cLine ) ; lSHARED := .T. ; lSTATICFULL := .F.
CASE ValueIsF( cLine ) ; lSHARED := .F. ; lSTATICFULL := .F.
ENDCASE
//CASE Lower( Left( cLine, Len( "fullstatic=" ) ) ) == "fullstatic="
; cLine := SubStr( cLine, Len( "fullstatic=" ) + 1 )
CASE cKeyWord == "fullstatic"
DO CASE
CASE ValueIsT( cLine ) ; lSHARED := .F. ; lSTATICFULL := .T.
CASE ValueIsF( cLine ) ; lSHARED := .F. ; lSTATICFULL := .F.
ENDCASE
//CASE Lower( Left( cLine, Len( "debug=" ) ) ) == "debug="
; cLine := SubStr( cLine, Len( "debug=" ) + 1 )
CASE cKeyWord == "debug"
DO CASE
CASE ValueIsT( cLine ) ; lDEBUG := .T.
CASE ValueIsF( cLine ) ; lDEBUG := .F.
ENDCASE
//CASE Lower( Left( cLine, Len( "opt=" ) ) ) == "opt="
; cLine := SubStr( cLine, Len( "opt=" ) + 1 )
CASE cKeyWord == "opt"
DO CASE
CASE ValueIsT( cLine ) ; lOPT := .T.
CASE ValueIsF( cLine ) ; lOPT := .F.
ENDCASE
//CASE Lower( Left( cLine, Len( "nulrdd=" ) ) ) == "nulrdd="
; cLine := SubStr( cLine, Len( "nulrdd=" ) + 1 )
CASE cKeyWord == "nulrdd"
DO CASE
CASE ValueIsT( cLine ) ; lNULRDD := .T.
CASE ValueIsF( cLine ) ; lNULRDD := .F.
ENDCASE
//CASE Lower( Left( cLine, Len( "map=" ) ) ) == "map="
; cLine := SubStr( cLine, Len( "map=" ) + 1 )
CASE cKeyWord == "map"
DO CASE
CASE ValueIsT( cLine ) ; lMAP := .T.
CASE ValueIsF( cLine ) ; lMAP := .F.
ENDCASE
//CASE Lower( Left( cLine, Len( "strip=" ) ) ) == "strip="
; cLine := SubStr( cLine, Len( "strip=" ) + 1 )
CASE cKeyWord == "strip"
DO CASE
CASE ValueIsT( cLine ) ; lSTRIP := .T.
CASE ValueIsF( cLine ) ; lSTRIP := .F.
ENDCASE
//CASE Lower( Left( cLine, Len( "compr=" ) ) ) == "compr="
; cLine := SubStr( cLine, Len( "compr=" ) + 1 )
CASE cKeyWord == "compr"
DO CASE
CASE ValueIsT( cLine ) ; nCOMPR := _COMPR_DEF
CASE ValueIsF( cLine ) ; nCOMPR := _COMPR_OFF
CASE Lower( cLine ) == "def" ; nCOMPR := _COMPR_DEF
CASE Lower( cLine ) == "min" ; nCOMPR := _COMPR_MIN
CASE Lower( cLine ) == "max" ; nCOMPR := _COMPR_MAX
ENDCASE
//CASE Lower( Left( cLine, Len( "head=" ) ) ) == "head="
; cLine := SubStr( cLine, Len( "head=" ) + 1 )
CASE cKeyWord == "head"
DO CASE
CASE Lower( cLine ) == "off" ; nHEAD := _HEAD_OFF
CASE Lower( cLine ) == "full" ; nHEAD := _HEAD_FULL
CASE Lower( cLine ) == "partial" ; nHEAD := _HEAD_PARTIAL
ENDCASE
//CASE Lower( Left( cLine, Len( "run=" ) ) ) == "run="
; cLine := SubStr( cLine, Len( "run=" ) + 1 )
CASE cKeyWord == "run"
DO CASE
CASE ValueIsT( cLine ) ; lRUN := .T.
CASE ValueIsF( cLine ) ; lRUN := .F.
ENDCASE
//CASE Lower( Left( cLine, Len( "inc=" ) ) ) == "inc="
; cLine := SubStr( cLine, Len( "inc=" ) + 1 )
CASE cKeyWord == "inc"
DO CASE
CASE ValueIsT( cLine ) ; lINC := .T.
CASE ValueIsF( cLine ) ; lINC := .F.
ENDCASE
/* NOTE: This keyword is used to signal the default GT used when
building Harbour. It only needs to be filled if this default
GT is different from the Harbour default one, IOW when it
was overridden by user at Harbour build time. [vszakats] */
//CASE Lower( Left( cLine, Len( "gtdef=" ) ) ) == "gtdef="
; cLine := SubStr( cLine, Len( "gtdef=" ) + 1 )
CASE cKeyWord == "gtdef"
IF ! Empty( cLine )
IF ! SetupForGT( cLine, @s_cGTDEFAULT, @lGUI )
cLine := NIL
ENDIF
IF ! Empty( cLine ) .AND. !( Lower( cLine ) == "gtnul" )
IF AScan( s_aLIBCOREGT, {|tmp| Lower( tmp ) == Lower( cLine )
} ) == 0 .AND. ;
AScan( aLIBUSERGT , {|tmp| Lower( tmp ) == Lower( cLine )
} ) == 0
AAddNotEmpty( aLIBUSERGT, PathSepToTarget( cLine ) )
ENDIF
ENDIF
ENDIF
//CASE Lower( Left( cLine, Len( "gt=" ) ) ) == "gt="
; cLine := SubStr( cLine, Len( "gt=" ) + 1 )
CASE cKeyWord == "gt"
IF ! Empty( cLine )
IF cGT == NIL
IF ! SetupForGT( cLine, @cGT, @lGUI )
cLine := NIL
ENDIF
ENDIF
IF ! Empty( cLine ) .AND. !( Lower( cLine ) == "gtnul" )
IF AScan( s_aLIBCOREGT, {|tmp| Lower( tmp ) == Lower( cLine )
} ) == 0 .AND. ;
AScan( aLIBUSERGT , {|tmp| Lower( tmp ) == Lower( cLine )
} ) == 0
AAddNotEmpty( aLIBUSERGT, PathSepToTarget( cLine ) )
ENDIF
ENDIF
ENDIF
ENDCASE
NEXT
RETURN
Regards
Pritpal Bedi
--
View this message in context:
http://www.nabble.com/HBMK2---Few-Changes-tp23348709p23348999.html
Sent from the Harbour - Dev mailing list archive at Nabble.com.
_______________________________________________
Harbour mailing list
[email protected]
http://lists.harbour-project.org/mailman/listinfo/harbour