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

Reply via email to