static void hb_pp_CollectReservedName( char * szName ) { PRESERVEDNAME pTemp, pLast; szName = hb_strupr( szName ); if( hb_pp_NameFound( szName ) ) return; pTemp = ( PRESERVEDNAME ) hb_xgrab( sizeof( RESERVEDNAME ) ); pTemp->szName = ( char * ) hb_xgrab( strlen( szName ) + 1 ); hb_strncpy( pTemp->szName, szName, strlen( szName ) ); pTemp->pNext = NULL; if( s_PPReservedName ) { pLast = s_PPReservedName; while( pLast->pNext ) pLast = pLast->pNext; pLast->pNext = pTemp; } else { s_PPReservedName = pTemp; } }
HB_WCHAR * hb_fsNameConvU16( const char * szFileName ) { char * pszBuffer = NULL; HB_WCHAR * lpwFileName; if( s_fFnTrim || s_cDirSep != HB_OS_PATH_DELIM_CHR || s_iFileCase != HB_SET_CASE_MIXED || s_iDirCase != HB_SET_CASE_MIXED ) { PHB_FNAME pFileName; HB_SIZE nLen; szFileName = pszBuffer = hb_strncpy( ( char * ) hb_xgrab( HB_PATH_MAX ), szFileName, HB_PATH_MAX - 1 ); if( s_cDirSep != HB_OS_PATH_DELIM_CHR ) { char * p = ( char * ) szFileName; while( *p ) { if( *p == s_cDirSep ) *p = HB_OS_PATH_DELIM_CHR; p++; } } pFileName = hb_fsFNameSplit( szFileName ); /* strip trailing and leading spaces */ if( s_fFnTrim ) { if( pFileName->szName ) { nLen = strlen( pFileName->szName ); while( nLen && pFileName->szName[ nLen - 1 ] == ' ' ) --nLen; while( nLen && pFileName->szName[ 0 ] == ' ' ) { ++pFileName->szName; --nLen; } ( ( char * ) pFileName->szName )[ nLen ] = '\0'; } if( pFileName->szExtension ) { nLen = strlen( pFileName->szExtension ); while( nLen && pFileName->szExtension[ nLen - 1 ] == ' ' ) --nLen; while( nLen && pFileName->szExtension[ 0 ] == ' ' ) { ++pFileName->szExtension; --nLen; } ( ( char * ) pFileName->szExtension )[ nLen ] = '\0'; } } /* FILECASE */ if( s_iFileCase == HB_SET_CASE_LOWER ) { if( pFileName->szName ) hb_strlow( ( char * ) pFileName->szName ); if( pFileName->szExtension ) hb_strlow( ( char * ) pFileName->szExtension ); } else if( s_iFileCase == HB_SET_CASE_UPPER ) { if( pFileName->szName ) hb_strupr( ( char * ) pFileName->szName ); if( pFileName->szExtension ) hb_strupr( ( char * ) pFileName->szExtension ); } /* DIRCASE */ if( pFileName->szPath ) { if( s_iDirCase == HB_SET_CASE_LOWER ) hb_strlow( ( char * ) pFileName->szPath ); else if( s_iDirCase == HB_SET_CASE_UPPER ) hb_strupr( ( char * ) pFileName->szPath ); } hb_fsFNameMerge( ( char * ) szFileName, pFileName ); hb_xfree( pFileName ); } lpwFileName = hb_mbtowc( szFileName ); if( pszBuffer ) hb_xfree( pszBuffer ); return lpwFileName; }
static char * hb_compChkOptionDup( const char * szSwitch ) { return hb_strupr( hb_strndup( szSwitch, hb_compChkOptionLen( szSwitch, HB_TRUE ) ) ); }
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; } } } }