-//
-bool OpenPK3(const char *filename)
-{
- char cFilename[WORK_LEN];
- char cName[WORK_LEN];
- char cWork[WORK_LEN];
- unz_file_info zInfo;
- unzFile *zFile = new unzFile(unzOpen(filename));
- g_zFiles.Add(zFile);
- if (zFile != NULL)
- {
- int nStatus = unzGoToFirstFile(*zFile);
- while (nStatus == UNZ_OK)
- {
- cFilename[0] = '\0';
- unzGetCurrentFileInfo(*zFile, &zInfo, cFilename, WORK_LEN, NULL, 0, NULL, 0);
- strlwr(cFilename);
- __ConvertDOSToUnixName( cWork, cFilename);
- if (strstr(cWork, ".") != NULL)
- {
- PK3FileInfo *pInfo = new PK3FileInfo();
- pInfo->m_pName = __StrDup(cWork);
- memcpy(&pInfo->m_zInfo, (unz_s*)*zFile, sizeof(unz_s));
- pInfo->m_lSize = zInfo.uncompressed_size;
- pInfo->m_zFile = *zFile;
- g_PK3Files.Add(pInfo);
- }
- char *p = strstr(cFilename, TEXTURE_PATH);
- if (p != NULL)
- {
- // FIXME: path differences per os ?
- // catch solo directory entry
- if (strlen(p) > strlen(TEXTURE_PATH) + 1)
- {
- // skip textures + path seperator
- p += strlen(TEXTURE_PATH) + 1;
- int nEnd = strcspn(p, PATH_SEPERATORS);
- strncpy(cName, p, nEnd);
- cName[nEnd] = '\0';
-
- bool bFound = false;
- StrList *pl = g_PK3TexturePaths.Next();
- while (pl != NULL)
- {
- if (strcmpi(pl->Ref(), cName) == 0)
- {
- // already have this, continue
- bFound = true;
- break;
- }
- pl = pl->Next();
- }
- if (!bFound)
- {
- g_PK3TexturePaths.Add(new Str(cName));
- }
- }
- }
- nStatus = unzGoToNextFile(*zFile);
- }
- }
- return (zFile != NULL);
-}
-
-void closePK3(unzFile zf)
-{
- unzClose(zf);
+//
+bool OpenPK3( const char *filename ){
+ char cFilename[WORK_LEN];
+ char cName[WORK_LEN];
+ char cWork[WORK_LEN];
+ unz_file_info zInfo;
+ unzFile *zFile = new unzFile( unzOpen( filename ) );
+ g_zFiles.Add( zFile );
+ if ( zFile != NULL ) {
+ int nStatus = unzGoToFirstFile( *zFile );
+ while ( nStatus == UNZ_OK )
+ {
+ cFilename[0] = '\0';
+ unzGetCurrentFileInfo( *zFile, &zInfo, cFilename, WORK_LEN, NULL, 0, NULL, 0 );
+ strlwr( cFilename );
+ __ConvertDOSToUnixName( cWork, cFilename );
+ if ( strstr( cWork, "." ) != NULL ) {
+ PK3FileInfo *pInfo = new PK3FileInfo();
+ pInfo->m_pName = __StrDup( cWork );
+ memcpy( &pInfo->m_zInfo, (unz_s*)*zFile, sizeof( unz_s ) );
+ pInfo->m_lSize = zInfo.uncompressed_size;
+ pInfo->m_zFile = *zFile;
+ g_PK3Files.Add( pInfo );
+ }
+ char *p = strstr( cFilename, TEXTURE_PATH );
+ if ( p != NULL ) {
+ // FIXME: path differences per os ?
+ // catch solo directory entry
+ if ( strlen( p ) > strlen( TEXTURE_PATH ) + 1 ) {
+ // skip textures + path seperator
+ p += strlen( TEXTURE_PATH ) + 1;
+ int nEnd = strcspn( p, PATH_SEPERATORS );
+ strncpy( cName, p, nEnd );
+ cName[nEnd] = '\0';
+
+ bool bFound = false;
+ StrList *pl = g_PK3TexturePaths.Next();
+ while ( pl != NULL )
+ {
+ if ( strcmpi( pl->Ref(), cName ) == 0 ) {
+ // already have this, continue
+ bFound = true;
+ break;
+ }
+ pl = pl->Next();
+ }
+ if ( !bFound ) {
+ g_PK3TexturePaths.Add( new Str( cName ) );
+ }
+ }
+ }
+ nStatus = unzGoToNextFile( *zFile );
+ }
+ }
+ return ( zFile != NULL );