FileNameHandle_t CUtlFilenameSymbolTable::FindFileName( const char *pFileName ) { if ( !pFileName ) { return NULL; } // Fix slashes+dotslashes and make lower case first.. char fn[ MAX_PATH ]; Q_strncpy( fn, pFileName, sizeof( fn ) ); Q_RemoveDotSlashes( fn ); #ifdef _WIN32 strlwr( fn ); #endif // Split the filename into constituent parts char basepath[ MAX_PATH ]; Q_ExtractFilePath( fn, basepath, sizeof( basepath ) ); char filename[ MAX_PATH ]; Q_strncpy( filename, fn + Q_strlen( basepath ), sizeof( filename ) ); FileNameHandleInternal_t handle; m_lock.LockForRead(); handle.path = m_StringPool.FindStringHandle(basepath); handle.file = m_StringPool.FindStringHandle(filename); m_lock.UnlockRead(); if ( handle.path == NULL || handle.file == NULL ) return NULL; return *( FileNameHandle_t * )( &handle ); }
void CRoomTemplate::SetFullName( const char *pFullName ) { Q_strncpy( m_FullName, pFullName, MAX_PATH ); Q_StripExtension( m_FullName, m_FullName, MAX_PATH ); Q_FixSlashes( m_FullName ); Q_ExtractFilePath( m_FullName, m_SubFolder, MAX_PATH ); Q_AppendSlash( m_SubFolder, MAX_PATH ); Q_strncpy( m_TemplateName, m_FullName + Q_strlen( m_SubFolder ), MAX_PATH ); }
//----------------------------------------------------------------------------- // Purpose: // Input : *pFileName - // Output : FileNameHandle_t //----------------------------------------------------------------------------- FileNameHandle_t CUtlFilenameSymbolTable::FindOrAddFileName( const char *pFileName ) { if ( !pFileName ) { return NULL; } // find first FileNameHandle_t hFileName = FindFileName( pFileName ); if ( hFileName ) { return hFileName; } // Fix slashes+dotslashes and make lower case first.. char fn[ MAX_PATH ]; Q_strncpy( fn, pFileName, sizeof( fn ) ); Q_RemoveDotSlashes( fn ); #ifdef _WIN32 strlwr( fn ); #endif // Split the filename into constituent parts char basepath[ MAX_PATH ]; Q_ExtractFilePath( fn, basepath, sizeof( basepath ) ); char filename[ MAX_PATH ]; Q_strncpy( filename, fn + Q_strlen( basepath ), sizeof( filename ) ); // not found, lock and look again FileNameHandleInternal_t handle; m_lock.LockForWrite(); handle.path = m_StringPool.FindStringHandle( basepath ); handle.file = m_StringPool.FindStringHandle( filename ); if ( handle.path && handle.file ) { // found m_lock.UnlockWrite(); return *( FileNameHandle_t * )( &handle ); } // safely add it handle.path = m_StringPool.ReferenceStringHandle( basepath ); handle.file = m_StringPool.ReferenceStringHandle( filename ); m_lock.UnlockWrite(); return *( FileNameHandle_t * )( &handle ); }
int main(int argc, char* argv[]) { if ( argc < 2 ) { printf("Usage: test_binaries <FILENAME>\n" ); } else { char fileName[2048], dir[2048]; if ( !Q_ExtractFilePath( argv[1], dir, sizeof( dir ) ) ) { strcpy( dir, "" ); } else { Q_FixSlashes( dir, '/' ); int len = strlen(dir); if ( len && dir[len-1] !='/' ) { strcat( dir, "/" ); } } WIN32_FIND_DATA findData; HANDLE hFind = FindFirstFile( argv[1], &findData ); if ( hFind == INVALID_HANDLE_VALUE ) { printf("Can't find %s\n", argv[1] ); } else { do { sprintf( fileName, "%s%s", dir, findData.cFileName ); TestFile( fileName ); } while ( FindNextFile( hFind, &findData ) ); FindClose( hFind ); } } return 0; }
void ExpandWildcards (int *argc, char ***argv) { struct _finddata_t fileinfo; int handle; int i; char filename[1024]; char filebase[1024]; char *path; ex_argc = 0; for (i=0 ; i<*argc ; i++) { path = (*argv)[i]; if ( path[0] == '-' || ( !strstr(path, "*") && !strstr(path, "?") ) ) { ex_argv[ex_argc++] = path; continue; } handle = _findfirst (path, &fileinfo); if (handle == -1) return; Q_ExtractFilePath (path, filebase, sizeof( filebase )); do { sprintf (filename, "%s%s", filebase, fileinfo.name); ex_argv[ex_argc++] = copystring (filename); } while (_findnext( handle, &fileinfo ) != -1); _findclose (handle); } *argc = ex_argc; *argv = ex_argv; }
//----------------------------------------------------------------------------- // Purpose: Loads a gamedata (FGD) file into this object. // Input : pszFilename - // Output : Returns TRUE on success, FALSE on failure. //----------------------------------------------------------------------------- BOOL GameData::Load(const char *pszFilename) { TokenReader tr; if(GetFileAttributes(pszFilename) == 0xffffffff) return FALSE; if(!tr.Open(pszFilename)) return FALSE; trtoken_t ttype; char szToken[128]; while (1) { if (tr.GetErrorCount() >= MAX_ERRORS) { break; } ttype = tr.NextToken(szToken, sizeof(szToken)); if(ttype == TOKENEOF) break; if(ttype != OPERATOR || !IsToken(szToken, "@")) { if(!GDError(tr, "expected @")) return FALSE; } // check what kind it is, and parse a new object if (tr.NextToken(szToken, sizeof(szToken)) != IDENT) { if(!GDError(tr, "expected identifier after @")) return FALSE; } if (IsToken(szToken, "baseclass") || IsToken(szToken, "pointclass") || IsToken(szToken, "solidclass") || IsToken(szToken, "keyframeclass") || IsToken(szToken, "moveclass") || IsToken(szToken, "npcclass") || IsToken(szToken, "filterclass")) { // // New class. // GDclass *pNewClass = new GDclass; if (!pNewClass->InitFromTokens(tr, this)) { tr.IgnoreTill(OPERATOR, "@"); // go to next section delete pNewClass; } else { if (IsToken(szToken, "baseclass")) // Not directly available to user. { pNewClass->SetBaseClass(true); } else if (IsToken(szToken, "pointclass")) // Generic point class. { pNewClass->SetPointClass(true); } else if (IsToken(szToken, "solidclass")) // Tied to solids. { pNewClass->SetSolidClass(true); } else if (IsToken(szToken, "npcclass")) // NPC class - can be spawned by npc_maker. { pNewClass->SetPointClass(true); pNewClass->SetNPCClass(true); } else if (IsToken(szToken, "filterclass")) // Filter class - can be used as a filter { pNewClass->SetPointClass(true); pNewClass->SetFilterClass(true); } else if (IsToken(szToken, "moveclass")) // Animating { pNewClass->SetMoveClass(true); pNewClass->SetPointClass(true); } else if (IsToken(szToken, "keyframeclass")) // Animation keyframes { pNewClass->SetKeyFrameClass(true); pNewClass->SetPointClass(true); } // Check and see if this new class matches an existing one. If so we will override the previous definition. int nExistingClassIndex = 0; GDclass *pExistingClass = ClassForName(pNewClass->GetName(), &nExistingClassIndex); if (NULL != pExistingClass) { m_Classes.InsertAfter(nExistingClassIndex, pNewClass); m_Classes.Remove(nExistingClassIndex); } else { m_Classes.AddToTail(pNewClass); } } } else if (IsToken(szToken, "include")) { if (GDGetToken(tr, szToken, sizeof(szToken), STRING)) { // Let's assume it's in the same directory. char justPath[MAX_PATH], loadFilename[MAX_PATH]; if ( Q_ExtractFilePath( pszFilename, justPath, sizeof( justPath ) ) ) { Q_snprintf( loadFilename, sizeof( loadFilename ), "%s%s", justPath, szToken ); } else { Q_strncpy( loadFilename, szToken, sizeof( loadFilename ) ); } // First try our fully specified directory if (!Load(loadFilename)) { // Failing that, try our start directory if (!Load(szToken)) { GDError(tr, "error including file: %s", szToken); } } } } else if (IsToken(szToken, "mapsize")) { if (!ParseMapSize(tr)) { // Error in map size specifier, skip to next @ sign. tr.IgnoreTill(OPERATOR, "@"); } } else if ( IsToken( szToken, "materialexclusion" ) ) { if ( !LoadFGDMaterialExclusions( tr ) ) { // FGD exclusions not defined; skip to next @ sign. tr.IgnoreTill(OPERATOR, "@"); } } else if ( IsToken( szToken, "autovisgroup" ) ) { if ( !LoadFGDAutoVisGroups( tr ) ) { // FGD AutoVisGroups not defined; skip to next @ sign. tr.IgnoreTill(OPERATOR, "@"); } } else { GDError(tr, "unrecognized section name %s", szToken); tr.IgnoreTill(OPERATOR, "@"); } } if (tr.GetErrorCount() > 0) { return FALSE; } tr.Close(); return TRUE; }
//----------------------------------------------------------------------------- // Purpose: load up a project and parse it //----------------------------------------------------------------------------- bool CVCProjConvert::LoadProject( const char *project ) { #ifdef _WIN32 HRESULT hr; IXMLDOMDocument *pXMLDoc=NULL; hr = ::CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument, (void**)&pXMLDoc); if (FAILED(hr)) { Msg ("Cannot instantiate msxml2.dll\n"); Msg ("Please download the MSXML run-time (url below)\n"); Msg ("http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/001/766/msdncompositedoc.xml\n"); return false; } VARIANT_BOOL vtbool; _variant_t bstrProject(project); pXMLDoc->put_async( VARIANT_BOOL(FALSE) ); hr = pXMLDoc->load(bstrProject,&vtbool); if (FAILED(hr) || vtbool==VARIANT_FALSE) { Msg ("Could not open %s.\n", bstrProject); pXMLDoc->Release(); return false; } #elif _LINUX XercesDOMParser* parser = new XercesDOMParser(); parser->setValidationScheme(XercesDOMParser::Val_Always); // optional. parser->setDoNamespaces(true); // optional ErrorHandler* errHandler = (ErrorHandler*) new HandlerBase(); parser->setErrorHandler(errHandler); try { parser->parse(project); } catch (const XMLException& toCatch) { char* message = XMLString::transcode(toCatch.getMessage()); Error( "Exception message is: %s\n", message ); XMLString::release(&message); return; } catch (const DOMException& toCatch) { char* message = XMLString::transcode(toCatch.msg); Error( "Exception message is: %s\n", message ); XMLString::release(&message); return; } catch (...) { Error( "Unexpected Exception \n" ); return; } DOMDocument *pXMLDoc = parser->getDocument(); #endif ExtractProjectName( pXMLDoc ); if ( !m_Name.IsValid() ) { Msg( "Failed to extract project name\n" ); return false; } char baseDir[ MAX_PATH ]; Q_ExtractFilePath( project, baseDir, sizeof(baseDir) ); Q_StripTrailingSlash( baseDir ); m_BaseDir = baseDir; ExtractConfigurations( pXMLDoc ); if ( m_Configurations.Count() == 0 ) { Msg( "Failed to find any configurations to load\n" ); return false; } ExtractFiles( pXMLDoc ); #ifdef _WIN32 pXMLDoc->Release(); #elif _LINUX delete pXMLDoc; delete errHandler; #endif m_bProjectLoaded = true; return true; }