void hb_compChkSetDefines( HB_COMP_DECL ) { PHB_PPDEFINE pDefine = HB_COMP_PARAM->ppdefines; while( pDefine ) { if( pDefine->szValue == s_szUndefineMarker ) hb_pp_delDefine( HB_COMP_PARAM->pLex->pPP, pDefine->szName ); else hb_pp_addDefine( HB_COMP_PARAM->pLex->pPP, pDefine->szName, pDefine->szValue ); pDefine = pDefine->pNext; } }
static void hb_compChkDefineSwitch( HB_COMP_DECL, const char * pszSwitch ) { if( pszSwitch && HB_ISOPTSEP( pszSwitch[ 0 ] ) ) { if( pszSwitch[ 1 ] == 'd' || pszSwitch[ 1 ] == 'D' ) { if( pszSwitch[ 2 ] ) { char * szDefText = hb_strdup( pszSwitch + 2 ), * szAssign; szAssign = strchr( szDefText, '=' ); if( szAssign ) *szAssign++ = '\0'; hb_pp_addDefine( HB_COMP_PARAM->pLex->pPP, szDefText, szAssign ); hb_xfree( szDefText ); } } else if( ( pszSwitch[ 1 ] == 'U' || pszSwitch[ 1 ] == 'u' ) && ( pszSwitch[ 2 ] == 'N' || pszSwitch[ 2 ] == 'n' ) && ( pszSwitch[ 3 ] == 'D' || pszSwitch[ 3 ] == 'd' ) && ( pszSwitch[ 4 ] == 'E' || pszSwitch[ 4 ] == 'e' ) && ( pszSwitch[ 5 ] == 'F' || pszSwitch[ 5 ] == 'f' ) && pszSwitch[ 6 ] == ':' ) { char *szDefText = hb_strdup( pszSwitch + 7 ); unsigned int i = 0; while( szDefText[ i ] && ! HB_ISOPTSEP( szDefText[ i ] ) ) { i++; } szDefText[ i ] = '\0'; if( szDefText[ 0 ] ) { if( hb_stricmp( szDefText, ".ARCH." ) == 0 ) hb_pp_delDefine( HB_COMP_PARAM->pLex->pPP, szDefText ); } hb_xfree( szDefText ); } } }
static int hb_pp_parseChangelog( PHB_PP_STATE pState, const char * pszFileName, BOOL fQuiet, char * piSVNID, char * piSVNDateID, char ** pszChangeLogID, char ** pszLastEntry ) { int iResult = 0; const char * pszFile; FILE * file_in; pszFile = pszFileName ? pszFileName : "../../../../ChangeLog"; do { if( hb_fsFileExists( pszFile ) ) break; pszFile += 3; } while( ! pszFileName && ( *pszFile == '.' || *pszFile == 'C' ) ); file_in = hb_fopen( pszFile, "r" ); if( ! file_in ) { if( ! fQuiet ) { #if ! defined( __MINGW32CE__ ) && ! defined( HB_OS_WIN_CE ) perror( pszFile ); #else fprintf( stderr, "Cannot open the %s file.\n", pszFile ); #endif } iResult = 1; } else { char szLine[ 256 ]; char szLine1[ 256 ]; char szId[ 128 ]; char szLog[ 128 ]; char * szFrom, * szTo; int iLen; *szId = *szLog = *szLine1 = '\0'; do { if( ! fgets( szLine, sizeof( szLine ), file_in ) ) break; if( ! *szId ) { szFrom = strstr( szLine, "$Id: " ); if( szFrom ) { szFrom += 5; szTo = strstr( szFrom, " $" ); if( szTo ) { *szTo = 0; } hb_strncpy( szId, szFrom, sizeof( szId ) - 1 ); hb_strncpy( szLine1, szLine + 1, sizeof( szLine1 ) - 1 ); } } else if( ! *szLog ) { if( szLine[ 4 ] == '-' && szLine[ 7 ] == '-' && szLine[ 10 ] == ' ' && szLine[ 13 ] == ':' ) { int iLen; hb_strncpy( szLog, szLine, sizeof( szLog ) - 1 ); iLen = strlen( szLog ); while( iLen-- && HB_ISSPACE( szLog[ iLen ] ) ) szLog[ iLen ] = '\0'; } } } while( ! *szLog ); fclose( file_in ); if( ! *szLog ) { if( ! fQuiet ) fprintf( stderr, "Cannot find valid $Id end log entry in the %s file.\n", pszFile ); iResult = 1; } else { char _szId[ 6 ]; int u = 0; hb_xmemset( _szId, 0, 6 ); *szLine = '"'; hb_strncpy( szLine + 1, szLog, sizeof( szLine ) - 3 ); iLen = strlen( szLine ); szLine[ iLen ] = '"'; szLine[ ++iLen ] = '\0'; hb_pp_addDefine( pState, "HB_VER_LENTRY", szLine ); *pszLastEntry = hb_strdup( szLog ); hb_strncpy( szLine + 1, szId, sizeof( szLine ) - 3 ); iLen = strlen( szLine ); szLine[ iLen ] = '"'; szLine[ ++iLen ] = '\0'; hb_pp_addDefine( pState, "HB_VER_CHLCVS", szLine ); *pszChangeLogID = hb_strdup( szId ); szFrom = strchr( szLine, ' ' ); if( szFrom ) { while( *szFrom == ' ' ) ++szFrom; iLen = 0; while( ! HB_ISSPACE( szFrom[ iLen ] ) ) { _szId[ u++ ] = szFrom[ iLen ]; ++iLen; } /* Latest CVS version before migration to SVN: ChangeLog,v 1.6768 2011/01/25 18:50:35 guerra000 */ if( iLen ) { #if 0 int iCurrentVersion = atoi( _szId ) + 6768; sprintf( _szId, "%i", iCurrentVersion ); hb_strncpy( piSVNID, _szId, strlen( _szId ) ); #else hb_strncpy( piSVNID, _szId, u ); #endif } else _szId[ 0 ] = 0; } if( _szId[ 0 ] ) { char szSVNDateID[ 10 ]; int iLen = 0, u = 0, wLen = ( int ) strlen( szLine1 ); char *szDate = NULL; *szSVNDateID ='\0'; do { if ( szLine1[ u ] == ' ' ) iLen ++; if ( iLen == 4 ) { iLen = u; szDate = szLine1 + iLen + 1; break; } ++u; } while ( u < wLen ); iLen = 0; u = 0; do { if (! ( szDate[ iLen ] == '-' ) ) szSVNDateID[ u++ ] = szDate[ iLen ]; if ( szDate[ iLen ] == ' ' ) break; ++iLen; } while( szDate [ iLen ] ); szSVNDateID[ u ] = 0; hb_strncpy( piSVNDateID, szSVNDateID, u ); hb_pp_addDefine( pState, "HB_VER_BUILDDATE", szSVNDateID ); hb_pp_addDefine( pState, "HB_VER_CVSID", _szId ); } else { if( ! fQuiet ) fprintf( stderr, "Unrecognized Id entry in the %s file.\n", pszFile ); iResult = 1; } } } return iResult; }
int main( int argc, char * argv[] ) { char * szFile = NULL, * szRuleFile = NULL, * szVerFile = NULL; char * szStdCh = NULL, * szLogFile = NULL, * szInclude; HB_BOOL fWrite = HB_FALSE, fChgLog = HB_FALSE; char * szChangeLogID = NULL, * szLastEntry = NULL; int iRevID = 0, iResult = 0, iQuiet = 0, i; char * szPPRuleFuncName = NULL; PHB_PP_STATE pState; pState = hb_pp_new(); if( argc >= 2 ) { szFile = argv[ 1 ]; for( i = 2; szFile && i < argc; i++ ) { if( ! HB_ISOPTSEP( argv[ i ][ 0 ] ) ) szFile = NULL; else { switch( argv[ i ][ 1 ] ) { case 'q': case 'Q': if( ! argv[ i ][ 2 ] ) iQuiet = 1; else if( argv[ i ][ 2 ] == '-' && ! argv[ i ][ 3 ] ) iQuiet = 0; else if( argv[ i ][ 2 ] >= '0' && argv[ i ][ 2 ] <= '2' && ! argv[ i ][ 3 ] ) iQuiet = argv[ i ][ 2 ] - '0'; else szFile = NULL; break; case 'd': case 'D': if( ! argv[ i ][ 2 ] ) szFile = NULL; else { char * szDefText = hb_strdup( argv[ i ] + 2 ), * szAssign; szAssign = strchr( szDefText, '=' ); if( szAssign ) *szAssign++ = '\0'; hb_pp_addDefine( pState, szDefText, szAssign ); hb_xfree( szDefText ); } break; case 'e': case 'E': if( argv[ i ][ 2 ] ) szPPRuleFuncName = argv[ i ] + 2; else szPPRuleFuncName = NULL; break; case 'w': case 'W': if( argv[ i ][ 2 ] ) szFile = NULL; else fWrite = HB_TRUE; break; case 'c': case 'C': fChgLog = HB_TRUE; if( argv[ i ][ 2 ] ) szLogFile = argv[ i ] + 2; break; case 'i': case 'I': if( argv[ i ][ 2 ] ) hb_pp_addSearchPath( pState, argv[ i ] + 2, HB_FALSE ); else szFile = NULL; break; case 'o': case 'O': if( argv[ i ][ 2 ] ) szRuleFile = argv[ i ] + 2; else szFile = NULL; break; case 'v': case 'V': if( argv[ i ][ 2 ] ) szVerFile = argv[ i ] + 2; else szFile = NULL; break; case 'u': case 'U': if( argv[ i ][ 2 ] ) szStdCh = argv[ i ] + 2; else szStdCh = NULL; break; default: szFile = NULL; break; } } } } if( iQuiet < 2 ) { printf( "Harbour Preprocessor %d.%d.%d%s\n", HB_VER_MAJOR, HB_VER_MINOR, HB_VER_RELEASE, HB_VER_STATUS ); printf( "Copyright (c) 1999-2014, http://harbour-project.org/\n" ); } if( szFile ) { if( ! szRuleFile && ! szVerFile ) fWrite = HB_TRUE; hb_pp_init( pState, iQuiet != 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ); szInclude = hb_getenv( "INCLUDE" ); if( szInclude ) { if( szInclude[ 0 ] ) hb_pp_addSearchPath( pState, szInclude, HB_FALSE ); hb_xfree( szInclude ); } if( szStdCh ) hb_pp_readRules( pState, szStdCh ); if( hb_pp_inFile( pState, szFile, HB_TRUE, NULL, HB_TRUE ) ) { if( fWrite ) { char szFileName[ HB_PATH_MAX ]; PHB_FNAME pFileName; pFileName = hb_fsFNameSplit( szFile ); pFileName->szExtension = ".ppo"; hb_fsFNameMerge( szFileName, pFileName ); hb_xfree( pFileName ); hb_pp_outFile( pState, szFileName, NULL ); } if( fChgLog ) iResult = hb_pp_parseChangelog( pState, szLogFile, iQuiet, &iRevID, &szChangeLogID, &szLastEntry ); if( iResult == 0 ) iResult = hb_pp_preprocesfile( pState, szRuleFile, szPPRuleFuncName ); if( iResult == 0 && szVerFile ) iResult = hb_pp_generateVerInfo( szVerFile, iRevID, szChangeLogID, szLastEntry ); if( iResult == 0 && hb_pp_errorCount( pState ) > 0 ) iResult = 1; } else iResult = 1; } else { hb_pp_usage( argv[ 0 ] ); iResult = 1; } if( szChangeLogID ) hb_xfree( szChangeLogID ); if( szLastEntry ) hb_xfree( szLastEntry ); hb_pp_free( pState ); return iResult; }
static int hb_pp_parseChangelog( PHB_PP_STATE pState, const char * pszFileName, int iQuiet, int * piRevID, char ** pszChangeLogID, char ** pszLastEntry ) { char * pszFree = NULL; int iResult = 0; FILE * file_in; char szToCheck[ HB_PATH_MAX ]; PHB_FNAME pFileName = hb_fsFNameSplit( pszFileName ); if( ! pFileName->szName ) { static const char * s_szNames[] = { "ChangeLog.txt", "CHANGES.txt", #if defined( HB_OS_DOS ) "ChangeLo.txt", "Change~1.txt", "Change~?.txt", "Chang~??.txt", #endif NULL }; int i = 0; if( ! pFileName->szPath ) pFileName->szPath = "../../../../.."; pszFileName = s_szNames[ i++ ]; while( pszFileName ) { pFileName->szName = pszFileName; hb_fsFNameMerge( szToCheck, pFileName ); if( hb_fsFileExists( szToCheck ) ) { pszFileName = szToCheck; break; } if( strchr( szToCheck, '?' ) != NULL ) { pszFree = hb_fsFileFind( szToCheck ); if( pszFree ) { pszFileName = pszFree; break; } } pszFileName = s_szNames[ i++ ]; } if( ! pszFileName ) pszFileName = s_szNames[ 0 ]; } hb_xfree( pFileName ); file_in = hb_fopen( pszFileName, "r" ); if( ! file_in ) { if( iQuiet < 2 ) { #if ! defined( HB_OS_WIN_CE ) perror( pszFileName ); #else fprintf( stderr, "Cannot open the %s file.\n", pszFileName ); #endif } iResult = 1; } else { char szLine[ 256 ]; char szId[ 128 ]; char szLog[ 128 ]; char * szFrom, * szTo; int iLen; if( iQuiet == 0 ) fprintf( stdout, "Reading ChangeLog file: %s\n", pszFileName ); *szId = *szLog = '\0'; do { if( ! fgets( szLine, sizeof( szLine ), file_in ) ) break; if( ! *szId ) { szFrom = strstr( szLine, "$" "Id" ); if( szFrom ) { szFrom += 3; szTo = strchr( szFrom, '$' ); if( szTo ) { /* Is it tarball source package? */ if( szTo == szFrom ) { /* we do not have revision number :-( */ hb_strncpy( szId, "unknown -1 (source tarball without keyword expanding)", sizeof( szId ) - 1 ); } else if( szTo - szFrom > 3 && szTo[ -1 ] == ' ' && szFrom[ 0 ] == ':' && szFrom[ 1 ] == ' ' ) { szTo[ -1 ] = '\0'; hb_strncpy( szId, szFrom + 2, sizeof( szId ) - 1 ); } } } } else if( ! *szLog ) { if( szLine[ 4 ] == '-' && szLine[ 7 ] == '-' && szLine[ 10 ] == ' ' && szLine[ 13 ] == ':' ) { hb_strncpy( szLog, szLine, sizeof( szLog ) - 1 ); iLen = ( int ) strlen( szLog ); while( iLen-- && HB_ISSPACE( szLog[ iLen ] ) ) szLog[ iLen ] = '\0'; } } } while( ! *szLog ); fclose( file_in ); if( ! *szLog ) { if( iQuiet < 2 ) fprintf( stderr, "Cannot find valid $" "Id entry in the %s file.\n", pszFileName ); iResult = 1; } else { char szRevID[ 18 ]; *szLine = '"'; hb_strncpy( szLine + 1, szLog, sizeof( szLine ) - 3 ); iLen = ( int ) strlen( szLine ); szLine[ iLen ] = '"'; szLine[ ++iLen ] = '\0'; hb_pp_addDefine( pState, "HB_VER_LENTRY", szLine ); *pszLastEntry = hb_strdup( szLog ); hb_strncpy( szLine + 1, szId, sizeof( szLine ) - 3 ); iLen = ( int ) strlen( szLine ); szLine[ iLen ] = '"'; szLine[ ++iLen ] = '\0'; hb_pp_addDefine( pState, "HB_VER_CHLID", szLine ); *pszChangeLogID = hb_strdup( szId ); if( strlen( szLog ) >= 16 ) { long lJulian = 0, lMilliSec = 0; int iUTC = 0; if( strlen( szLog ) >= 25 && szLog[ 17 ] == 'U' && szLog[ 18 ] == 'T' && szLog[ 19 ] == 'C' && ( szLog[ 20 ] == '+' || szLog[ 20 ] == '-' ) && HB_ISDIGIT( szLog[ 21 ] ) && HB_ISDIGIT( szLog[ 22 ] ) && HB_ISDIGIT( szLog[ 23 ] ) && HB_ISDIGIT( szLog[ 24 ] ) ) { iUTC = ( ( int ) ( szLog[ 21 ] - '0' ) * 10 + ( int ) ( szLog[ 22 ] - '0' ) ) * 60 + ( int ) ( szLog[ 23 ] - '0' ) * 10 + ( int ) ( szLog[ 24 ] - '0' ); } szLog[ 16 ] = '\0'; if( iUTC != 0 && hb_timeStampStrGetDT( szLog, &lJulian, &lMilliSec ) ) { hb_timeStampUnpackDT( hb_timeStampPackDT( lJulian, lMilliSec ) - ( double ) iUTC / ( 24 * 60 ), &lJulian, &lMilliSec ); } if( lJulian && lMilliSec ) { hb_timeStampStrRawPut( szRevID, lJulian, lMilliSec ); memmove( szRevID, szRevID + 2, 10 ); } else { szRevID[ 0 ] = szLog[ 2 ]; szRevID[ 1 ] = szLog[ 3 ]; szRevID[ 2 ] = szLog[ 5 ]; szRevID[ 3 ] = szLog[ 6 ]; szRevID[ 4 ] = szLog[ 8 ]; szRevID[ 5 ] = szLog[ 9 ]; szRevID[ 6 ] = szLog[ 11 ]; szRevID[ 7 ] = szLog[ 12 ]; szRevID[ 8 ] = szLog[ 14 ]; szRevID[ 9 ] = szLog[ 15 ]; } szRevID[ 10 ] = '\0'; } else szRevID[ 0 ] = '\0'; *piRevID = ( int ) hb_strValInt( szRevID, &iLen ); hb_pp_addDefine( pState, "HB_VER_REVID", szRevID ); #ifdef HB_LEGACY_LEVEL4 hb_pp_addDefine( pState, "HB_VER_SVNID", szRevID ); #endif } } if( pszFree ) hb_xfree( pszFree ); return iResult; }
static int hb_pp_parseRepoVer( PHB_PP_STATE pState, const char * pszFileName, int iQuiet, char ** pszCommitID, int * piCommitRev, char ** pszCommitInfo ) { FILE * file_in; char szId[ _VALUE_SIZE ]; char szDate[ _VALUE_SIZE ]; char szName[ _VALUE_SIZE ]; char szMail[ _VALUE_SIZE ]; char szCommitInfo[ _VALUE_SIZE ]; int iLen; *szId = *szDate = *szName = *szMail = *szCommitInfo = '\0'; file_in = hb_fopen( pszFileName, "r" ); if( ! file_in ) { if( iQuiet < 2 ) fprintf( stderr, "'%s' not found. Skipping.\n", pszFileName ); } else { char szLine[ 256 ]; char * pszValue; if( iQuiet == 0 ) fprintf( stdout, "Reading repository revision file: %s\n", pszFileName ); for( ;; ) { if( ! fgets( szLine, sizeof( szLine ), file_in ) ) break; if( ! *szId ) pszValue = szId; else if( ! *szDate ) pszValue = szDate; else if( ! *szName ) pszValue = szName; else if( ! *szMail ) pszValue = szMail; else break; { hb_strncpy( pszValue, szLine, _VALUE_SIZE - 1 ); iLen = ( int ) strlen( pszValue ); while( iLen-- && HB_ISSPACE( pszValue[ iLen ] ) ) pszValue[ iLen ] = '\0'; } } fclose( file_in ); } hb_pp_addDefine( pState, "HB_VER_COMMIT_ID", szId ); #if defined( HB_LEGACY_LEVEL4 ) hb_pp_addDefine( pState, "HB_VER_CHLID", szId ); #endif *pszCommitID = hb_strdup( szId ); if( szDate[ 0 ] && szName[ 0 ] && szMail[ 0 ] ) { iLen = ( int ) strlen( szMail ); while( iLen-- ) { if( szMail[ iLen ] == '@' ) szMail[ iLen ] = ' '; } #if defined( __HB_INCLUDE_MORE_COMMIT_INFO ) hb_snprintf( szCommitInfo, sizeof( szCommitInfo ), "%s %s (%s)", szDate, szName, szMail ); #else hb_snprintf( szCommitInfo, sizeof( szCommitInfo ), "%s", szDate ); HB_SYMBOL_UNUSED( szName ); HB_SYMBOL_UNUSED( szMail ); #endif if( *pszCommitInfo ) hb_xfree( *pszCommitInfo ); hb_pp_delDefine( pState, "HB_VER_COMMIT_INFO" ); hb_pp_addDefine( pState, "HB_VER_COMMIT_INFO", szCommitInfo ); *pszCommitInfo = hb_strdup( szCommitInfo ); *piCommitRev = hb_pp_TimeStampToNum( pState, szCommitInfo ); } return 0; }
static int hb_pp_parseChangelog( PHB_PP_STATE pState, const char * pszFileName, int iQuiet, int * piCommitRev, char ** pszCommitInfo ) { char * pszFree = NULL; int iResult = 0; FILE * file_in; char szToCheck[ HB_PATH_MAX ]; PHB_FNAME pFileName = hb_fsFNameSplit( pszFileName ); if( ! pFileName->szName ) { static const char * s_szNames[] = { "ChangeLog.txt", "CHANGES.txt", #if defined( HB_OS_DOS ) "ChangeLo.txt", "Change~1.txt", "Change~?.txt", "Chang~??.txt", #endif NULL }; int i = 0; if( ! pFileName->szPath ) pFileName->szPath = "../../../../.."; pszFileName = s_szNames[ i++ ]; while( pszFileName ) { pFileName->szName = pszFileName; hb_fsFNameMerge( szToCheck, pFileName ); if( hb_fsFileExists( szToCheck ) ) { pszFileName = szToCheck; break; } if( strchr( szToCheck, '?' ) != NULL ) { pszFree = hb_fsFileFind( szToCheck ); if( pszFree ) { pszFileName = pszFree; break; } } pszFileName = s_szNames[ i++ ]; } if( ! pszFileName ) pszFileName = s_szNames[ 0 ]; } hb_xfree( pFileName ); file_in = hb_fopen( pszFileName, "r" ); if( ! file_in ) { if( iQuiet < 2 ) { #if ! defined( HB_OS_WIN_CE ) perror( pszFileName ); #else fprintf( stderr, "Cannot open the %s file.\n", pszFileName ); #endif } iResult = 1; } else { char szLine[ 256 ]; char szLog[ 128 ]; int iLen; if( iQuiet == 0 ) fprintf( stdout, "Reading ChangeLog file: %s\n", pszFileName ); *szLog = '\0'; do { if( ! fgets( szLine, sizeof( szLine ), file_in ) ) break; if( ! *szLog ) { if( szLine[ 4 ] == '-' && szLine[ 7 ] == '-' && szLine[ 10 ] == ' ' && szLine[ 13 ] == ':' ) { hb_strncpy( szLog, szLine, sizeof( szLog ) - 1 ); iLen = ( int ) strlen( szLog ); while( iLen-- && HB_ISSPACE( szLog[ iLen ] ) ) szLog[ iLen ] = '\0'; } } } while( ! *szLog ); fclose( file_in ); if( ! *szLog ) { if( iQuiet < 2 ) fprintf( stderr, "Cannot find valid $" "Id entry in the %s file.\n", pszFileName ); iResult = 1; } else { *szLine = '"'; hb_strncpy( szLine + 1, szLog, sizeof( szLine ) - 3 ); iLen = ( int ) strlen( szLine ); szLine[ iLen ] = '"'; szLine[ ++iLen ] = '\0'; hb_pp_addDefine( pState, "HB_VER_COMMIT_INFO", szLine ); *pszCommitInfo = hb_strdup( szLog ); *piCommitRev = hb_pp_TimeStampToNum( pState, szLog ); } } if( pszFree ) hb_xfree( pszFree ); return iResult; }
static int hb_pp_TimeStampToNum( PHB_PP_STATE pState, char * pszLog ) { char szRevID[ 18 ]; int iLen; if( strlen( pszLog ) >= 16 ) { long lJulian = 0, lMilliSec = 0; int iUTC = 0; if( strlen( pszLog ) >= 25 && ( pszLog[ 20 ] == '+' || pszLog[ 20 ] == '-' ) && HB_ISDIGIT( pszLog[ 21 ] ) && HB_ISDIGIT( pszLog[ 22 ] ) && HB_ISDIGIT( pszLog[ 23 ] ) && HB_ISDIGIT( pszLog[ 24 ] ) ) { iUTC = ( ( int ) ( pszLog[ 21 ] - '0' ) * 10 + ( int ) ( pszLog[ 22 ] - '0' ) ) * 60 + ( int ) ( pszLog[ 23 ] - '0' ) * 10 + ( int ) ( pszLog[ 24 ] - '0' ); if( pszLog[ 20 ] == '-' ) iUTC *= -1; } pszLog[ 16 ] = '\0'; if( iUTC != 0 && hb_timeStampStrGetDT( pszLog, &lJulian, &lMilliSec ) ) { hb_timeStampUnpackDT( hb_timeStampPackDT( lJulian, lMilliSec ) - ( double ) iUTC / ( 24 * 60 ), &lJulian, &lMilliSec ); } if( lJulian && lMilliSec ) { hb_timeStampStrRawPut( szRevID, lJulian, lMilliSec ); memmove( szRevID, szRevID + 2, 10 ); } else { szRevID[ 0 ] = pszLog[ 2 ]; szRevID[ 1 ] = pszLog[ 3 ]; szRevID[ 2 ] = pszLog[ 5 ]; szRevID[ 3 ] = pszLog[ 6 ]; szRevID[ 4 ] = pszLog[ 8 ]; szRevID[ 5 ] = pszLog[ 9 ]; szRevID[ 6 ] = pszLog[ 11 ]; szRevID[ 7 ] = pszLog[ 12 ]; szRevID[ 8 ] = pszLog[ 14 ]; szRevID[ 9 ] = pszLog[ 15 ]; } szRevID[ 10 ] = '\0'; } else szRevID[ 0 ] = '\0'; hb_pp_delDefine( pState, "HB_VER_COMMIT_REV" ); hb_pp_addDefine( pState, "HB_VER_COMMIT_REV", szRevID ); #if defined( HB_LEGACY_LEVEL4 ) hb_pp_delDefine( pState, "HB_VER_SVNID" ); hb_pp_addDefine( pState, "HB_VER_SVNID", szRevID ); #endif return ( int ) hb_strValInt( szRevID, &iLen ); }