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 void hb_compChkEnvironVar( HB_COMP_DECL, const char * szSwitch ) { if( szSwitch && ! HB_COMP_PARAM->fExit ) { const char * s = szSwitch; /* If szSwitch doesn't start with a HB_OSOPTSEP char * show an error */ if( ! HB_ISOPTSEP( *s ) ) hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'F', HB_COMP_ERR_BADOPTION, s, NULL ); else { s++; switch( *s ) { case 'a': case 'A': if( *( s + 1 ) == '-' ) HB_COMP_PARAM->fAutoMemvarAssume = HB_FALSE; else HB_COMP_PARAM->fAutoMemvarAssume = HB_TRUE; break; case 'b': case 'B': { unsigned int i = 0; char *szOption = hb_strupr( hb_strdup( s ) ); while( i < strlen( szOption ) && ! HB_ISOPTSEP( szOption[ i ] ) ) i++; szOption[ i ] = '\0'; if( strcmp( szOption, "BUILD" ) == 0 ) HB_COMP_PARAM->fBuildInfo = HB_TRUE; else { if( *( s + 1 ) == '-' ) HB_COMP_PARAM->fDebugInfo = HB_FALSE; else { HB_COMP_PARAM->fDebugInfo = HB_TRUE; HB_COMP_PARAM->fLineNumbers = HB_TRUE; } } hb_xfree( szOption ); break; } case 'c': case 'C': { unsigned int i = 0; char *szOption = hb_strupr( hb_strdup( s ) ); while( i < strlen( szOption ) && ! HB_ISOPTSEP( szOption[ i ] ) ) i++; szOption[ i ] = '\0'; if( strcmp( szOption, "CREDITS" ) == 0 || strcmp( szOption, "CREDIT" ) == 0 || strcmp( szOption, "CREDI" ) == 0 || strcmp( szOption, "CRED" ) == 0 ) HB_COMP_PARAM->fCredits = HB_TRUE; else hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'F', HB_COMP_ERR_BADOPTION, szOption, NULL ); hb_xfree( szOption ); break; } case 'd': case 'D': /* NOTE: Ignore these -d switches will be processed separately */ break; case 'e': case 'E': if( *( s + 1 ) == 's' || *( s + 1 ) == 'S' ) { switch( *( s + 2 ) ) { case '\0': case '0': HB_COMP_PARAM->iExitLevel = HB_EXITLEVEL_DEFAULT; break; case '1': HB_COMP_PARAM->iExitLevel = HB_EXITLEVEL_SETEXIT; break; case '2': HB_COMP_PARAM->iExitLevel = HB_EXITLEVEL_DELTARGET; break; default: hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'F', HB_COMP_ERR_BADOPTION, s, NULL ); } } else hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'F', HB_COMP_ERR_BADOPTION, s, NULL ); break; case 'g': case 'G': switch( *( s + 1 ) ) { case 'c': case 'C': HB_COMP_PARAM->iLanguage = HB_LANG_C; switch( *( s + 2 ) ) { case '3': HB_COMP_PARAM->iGenCOutput = HB_COMPGENC_REALCODE; break; case '2': HB_COMP_PARAM->iGenCOutput = HB_COMPGENC_VERBOSE; break; case '1': HB_COMP_PARAM->iGenCOutput = HB_COMPGENC_NORMAL; break; case '\0': case '0': HB_COMP_PARAM->iGenCOutput = HB_COMPGENC_COMPACT; break; default: hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'F', HB_COMP_ERR_BADOPTION, s, NULL ); } break; case 'h': case 'H': HB_COMP_PARAM->iLanguage = HB_LANG_PORT_OBJ; break; case 'd': case 'D': if( HB_COMP_PARAM->szDepExt ) { hb_xfree( HB_COMP_PARAM->szDepExt ); HB_COMP_PARAM->szDepExt = NULL; } if( s[ 2 ] == '-' ) HB_COMP_PARAM->iTraceInclude = 0; else if( s[ 2 ] == '.' || s[ 2 ] == '\0' ) { HB_COMP_PARAM->iTraceInclude = 2; if( s[ 2 ] != '\0' ) HB_COMP_PARAM->szDepExt = hb_strdup( s + 2 ); } else hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'F', HB_COMP_ERR_BADOPTION, s, NULL ); break; case 'e': case 'E': switch( *( s + 2 ) ) { case '1': HB_COMP_PARAM->iErrorFmt = HB_ERRORFMT_IDE; break; case '\0': case '0': HB_COMP_PARAM->iErrorFmt = HB_ERRORFMT_CLIPPER; break; default: hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'F', HB_COMP_ERR_BADOPTION, s, NULL ); } break; default: hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'F', HB_COMP_ERR_UNSUPPORTED_LANG, NULL, NULL ); break; } break; /* NOTE: h or H from HELP or help */ case 'h': case 'H': case '?': break; /* NOTE: It already has support for several include files */ case 'i': case 'I': switch( *( s + 1 ) ) { case '-': HB_COMP_PARAM->fINCLUDE = HB_FALSE; break; case '+': HB_COMP_PARAM->fINCLUDE = HB_TRUE; break; default: hb_pp_addSearchPath( HB_COMP_PARAM->pLex->pPP, s + 1, HB_FALSE ); } break; case 'j': case 'J': HB_COMP_PARAM->fI18n = HB_TRUE; if( s[ 1 ] ) HB_COMP_PARAM->pI18nFileName = hb_fsFNameSplit( s + 1 ); break; case 'k': case 'K': { int i = 1; while( s[ i ] && ! HB_COMP_PARAM->fExit ) { switch( s[ i++ ] ) { case '?': hb_compPrintLogo( HB_COMP_PARAM ); hb_compPrintModes( HB_COMP_PARAM ); HB_COMP_PARAM->fLogo = HB_FALSE; HB_COMP_PARAM->fQuiet = HB_TRUE; break; case 'h': case 'H': /* default Harbour mode */ if( s[ i ] == '-' ) { i++; HB_COMP_PARAM->supported &= ~HB_COMPFLAG_HARBOUR; } else HB_COMP_PARAM->supported |= HB_COMPFLAG_HARBOUR; break; case 'c': case 'C': /* clear all flags - minimal set of features */ HB_COMP_PARAM->supported &= HB_COMPFLAG_SHORTCUTS; HB_COMP_PARAM->supported |= HB_COMPFLAG_OPTJUMP | HB_COMPFLAG_MACROTEXT; break; case 'x': case 'X': if( s[ i ] == '-' ) { i++; HB_COMP_PARAM->supported &= ~HB_COMPFLAG_XBASE; } else HB_COMP_PARAM->supported |= HB_COMPFLAG_XBASE; break; case 'i': case 'I': if( s[ i ] == '-' ) { i++; HB_COMP_PARAM->supported &= ~HB_COMPFLAG_HB_INLINE; } else HB_COMP_PARAM->supported |= HB_COMPFLAG_HB_INLINE; break; case 'j': case 'J': if( s[ i ] == '+' ) { i++; HB_COMP_PARAM->supported |= HB_COMPFLAG_OPTJUMP; } else HB_COMP_PARAM->supported &= ~HB_COMPFLAG_OPTJUMP; break; case 'm': case 'M': if( s[ i ] == '+' ) { i++; HB_COMP_PARAM->supported |= HB_COMPFLAG_MACROTEXT; } else HB_COMP_PARAM->supported &= ~HB_COMPFLAG_MACROTEXT; break; case 'd': case 'D': if( s[ i ] == '-' ) { i++; HB_COMP_PARAM->supported &= ~HB_COMPFLAG_MACRODECL; } else HB_COMP_PARAM->supported |= HB_COMPFLAG_MACRODECL; break; case 'r': case 'R': if( s[ i ] == '-' ) { i++; HB_COMP_PARAM->supported &= ~HB_COMPFLAG_RT_MACRO; } else HB_COMP_PARAM->supported |= HB_COMPFLAG_RT_MACRO; break; case 's': case 'S': if( s[ i ] == '-' ) { i++; HB_COMP_PARAM->supported &= ~HB_COMPFLAG_ARRSTR; } else HB_COMP_PARAM->supported |= HB_COMPFLAG_ARRSTR; break; case 'o': case 'O': if( s[ i ] == '-' ) { i++; HB_COMP_PARAM->supported &= ~HB_COMPFLAG_EXTOPT; } else HB_COMP_PARAM->supported |= HB_COMPFLAG_EXTOPT; break; case 'u': case 'U': if( s[ i ] == '-' ) { i++; HB_COMP_PARAM->supported &= ~HB_COMPFLAG_USERCP; } else HB_COMP_PARAM->supported |= HB_COMPFLAG_USERCP; break; default: hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'F', HB_COMP_ERR_BADOPTION, s, NULL ); break; } } break; } case 'l': case 'L': if( *( s + 1 ) == '-' ) HB_COMP_PARAM->fLineNumbers = HB_TRUE; else HB_COMP_PARAM->fLineNumbers = HB_FALSE; break; case 'm': case 'M': if( *( s + 1 ) == '-' ) HB_COMP_PARAM->fSingleModule = HB_FALSE; else HB_COMP_PARAM->fSingleModule = HB_TRUE; break; case 'n': case 'N': HB_COMP_PARAM->fNoStartUp = s[ 1 ] == '1'; switch( s[ 1 ] ) { case '-': HB_COMP_PARAM->iStartProc = 0; break; case '\0': case '0': case '1': HB_COMP_PARAM->iStartProc = 1; break; case '2': HB_COMP_PARAM->iStartProc = 2; break; default: hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'F', HB_COMP_ERR_BADOPTION, s, NULL ); } break; case 'o': case 'O': HB_COMP_PARAM->pOutPath = hb_fsFNameSplit( s + 1 ); break; /* Added for preprocessor needs */ case 'p': case 'P': if( s[ 1 ] == '+' && s[ 2 ] == '\0' ) HB_COMP_PARAM->fPPT = HB_TRUE; else { if( HB_COMP_PARAM->pPpoPath ) { hb_xfree( HB_COMP_PARAM->pPpoPath ); HB_COMP_PARAM->pPpoPath = NULL; } if( s[ 1 ] == '-' && s[ 2 ] == '\0' ) HB_COMP_PARAM->fPPO = HB_FALSE; else { if( s[ 1 ] ) HB_COMP_PARAM->pPpoPath = hb_fsFNameSplit( s + 1 ); HB_COMP_PARAM->fPPO = HB_TRUE; } } break; case 'q': case 'Q': switch( *( s + 1 ) ) { case '2': HB_COMP_PARAM->fFullQuiet = HB_TRUE; case '0': HB_COMP_PARAM->fLogo = HB_FALSE; default: HB_COMP_PARAM->fQuiet = HB_TRUE; } break; case 'r': case 'R': if( *( s + 1 ) == ':' ) { int iOverflow; int iCycles = ( int ) hb_strValInt( s + 2, &iOverflow ); if( ! iOverflow && iCycles > 0 ) HB_COMP_PARAM->iMaxTransCycles = iCycles; } else { /* TODO: Implement this switch */ hb_notSupportedInfo( HB_COMP_PARAM, s ); } break; case 's': case 'S': switch( *( s + 1 ) ) { case '\0': HB_COMP_PARAM->iSyntaxCheckOnly = 1; break; case '-': HB_COMP_PARAM->iSyntaxCheckOnly = 0; break; case 'm': case 'M': if( s[ 2 ] == '\0' ) { HB_COMP_PARAM->iSyntaxCheckOnly = 2; break; } default: hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'F', HB_COMP_ERR_BADOPTION, s, NULL ); } break; case 't': case 'T': /* TODO: Implement this switch */ hb_notSupportedInfo( HB_COMP_PARAM, s ); break; case 'u': case 'U': if( ( s[ 1 ] == 'N' || s[ 1 ] == 'n' ) && ( s[ 2 ] == 'D' || s[ 2 ] == 'd' ) && ( s[ 3 ] == 'E' || s[ 3 ] == 'e' ) && ( s[ 4 ] == 'F' || s[ 4 ] == 'f' ) && s[ 5 ] == ':' ) { /* NOTE: Ignore these -undef: switches (will be processed * separately) except -undef:.arch. */ if( s[ 6 ] == '.' && ( s[ 7 ] == 'A' || s[ 7 ] == 'a' ) && ( s[ 8 ] == 'R' || s[ 8 ] == 'r' ) && ( s[ 9 ] == 'C' || s[ 9 ] == 'c' ) && ( s[ 10 ] == 'H' || s[ 10 ] == 'h' ) && s[ 11 ] == '.' ) { HB_COMP_PARAM->fNoArchDefs = HB_TRUE; } break; } /* extended definitions file (-u+<file>) */ if( s[ 1 ] == '+' ) { if( s[ 2 ] ) { if( HB_COMP_PARAM->iStdChExt == 0 ) HB_COMP_PARAM->szStdChExt = ( char ** ) hb_xgrab( sizeof( char * ) ); else HB_COMP_PARAM->szStdChExt = ( char ** ) hb_xrealloc( HB_COMP_PARAM->szStdChExt, ( HB_COMP_PARAM->iStdChExt + 1 ) * sizeof( char * ) ); HB_COMP_PARAM->szStdChExt[ HB_COMP_PARAM->iStdChExt++ ] = hb_strdup( s + 2 ); } else hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'F', HB_COMP_ERR_BADOPTION, s, NULL ); } else { if( HB_COMP_PARAM->szStdCh ) hb_xfree( HB_COMP_PARAM->szStdCh ); HB_COMP_PARAM->szStdCh = hb_strdup( s + 1 ); } break; case 'v': case 'V': if( *( s + 1 ) == '-' ) HB_COMP_PARAM->fForceMemvars = HB_FALSE; else HB_COMP_PARAM->fForceMemvars = HB_TRUE; break; case 'w': case 'W': HB_COMP_PARAM->iWarnings = 1; if( s[ 1 ] ) /* there is -w<0,1,2,3> probably */ { HB_COMP_PARAM->iWarnings = s[ 1 ] - '0'; if( HB_COMP_PARAM->iWarnings < 0 || HB_COMP_PARAM->iWarnings > 3 ) hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'F', HB_COMP_ERR_BADOPTION, s, NULL ); } break; case 'x': case 'X': { unsigned int i = 1; while( s[ i ] && ! HB_ISOPTSEP( s[ i ] ) && i < sizeof( HB_COMP_PARAM->szPrefix ) - 1 ) { ++i; } if( i > 1 ) { memcpy( HB_COMP_PARAM->szPrefix, s + 1, i - 1 ); HB_COMP_PARAM->szPrefix[ i - 1 ] = '_'; HB_COMP_PARAM->szPrefix[ i ] = '\0'; } else { hb_snprintf( HB_COMP_PARAM->szPrefix, sizeof( HB_COMP_PARAM->szPrefix ), "%08lX_", PackDateTime() ); } break; } #ifdef YYDEBUG case 'y': case 'Y': yydebug = HB_TRUE; break; #endif case 'z': case 'Z': if( *( s + 1 ) == '-' ) HB_COMP_PARAM->supported |= HB_COMPFLAG_SHORTCUTS; else HB_COMP_PARAM->supported &= ~HB_COMPFLAG_SHORTCUTS; break; default: hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'F', HB_COMP_ERR_BADOPTION, s, NULL ); break; } } } }
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 ); }