From f930f46fb089d84e480cf24113171e9829966e61 Mon Sep 17 00:00:00 2001 From: nillerusr Date: Mon, 16 Nov 2020 20:31:06 +0300 Subject: [PATCH 1/4] port bsp31migrate to linux --- utils/bsp31migrate/bsp31migrate.cpp | 15 ++--- utils/bsp31migrate/bsp31migrate.h | 5 +- utils/bsp31migrate/bspfile.cpp | 5 +- utils/common/basetypes.h | 5 +- utils/common/bspfile.h | 2 +- utils/common/cmdlib.cpp | 57 ++++++++++++++---- utils/common/cmdlib.h | 4 +- utils/common/conprint.cpp | 90 ++++++++++++++++++++++++++-- utils/common/filesystem.cpp | 92 ++++++++++++++++++++++------- utils/common/mathlib.cpp | 10 +++- utils/common/scriplib.cpp | 3 +- utils/common/stringlib.cpp | 13 ++-- utils/common/wadfile.cpp | 5 +- utils/common/zone.cpp | 6 +- 14 files changed, 240 insertions(+), 72 deletions(-) diff --git a/utils/bsp31migrate/bsp31migrate.cpp b/utils/bsp31migrate/bsp31migrate.cpp index 1387b10..2875473 100644 --- a/utils/bsp31migrate/bsp31migrate.cpp +++ b/utils/bsp31migrate/bsp31migrate.cpp @@ -19,15 +19,16 @@ int main( int argc, char **argv ) { int i; -// if( argc <= 1 ) -// COM_FatalError( "usage: bsp31migrate -file -output \n" ); - COM_InitCmdlib( argv, argc ); - - if(( i = COM_CheckParm( "-dev" )) != 0 ) - { + i = COM_CheckParm( "-dev" ); + if( i != 0 && argc > i+1 ) SetDeveloperLevel( atoi( argv[i+1] )); + + if( COM_CheckParm( "--help" ) != 0 ) + { + Msg( "usage: bsp31migrate -file -output \n" ); + return 0; } return BspConvert( argc, argv ); -} \ No newline at end of file +} diff --git a/utils/bsp31migrate/bsp31migrate.h b/utils/bsp31migrate/bsp31migrate.h index 7ffd9c0..243f6fe 100644 --- a/utils/bsp31migrate/bsp31migrate.h +++ b/utils/bsp31migrate/bsp31migrate.h @@ -16,7 +16,7 @@ GNU General Public License for more details. #ifndef BSP31MIGRATE_H #define BSP31MIGRATE_H -#include +#include "port.h" #include "cmdlib.h" #include "mathlib.h" #include "stringlib.h" @@ -26,7 +26,6 @@ GNU General Public License for more details. #include "wadfile.h" #include "bspfile31.h" #include -#include typedef enum { @@ -46,4 +45,4 @@ typedef enum extern int BspConvert( int argc, char **argv ); -#endif//BSP31MIGRATE_H \ No newline at end of file +#endif//BSP31MIGRATE_H diff --git a/utils/bsp31migrate/bspfile.cpp b/utils/bsp31migrate/bspfile.cpp index 37e2b43..1f588b0 100644 --- a/utils/bsp31migrate/bspfile.cpp +++ b/utils/bsp31migrate/bspfile.cpp @@ -1205,8 +1205,5 @@ int BspConvert( int argc, char **argv ) Mem_Free( search ); Mem_Check(); - Msg( "press any key to exit\n" ); - system( "pause>nul" ); - return 0; -} \ No newline at end of file +} diff --git a/utils/common/basetypes.h b/utils/common/basetypes.h index db0c1dc..1048b0d 100644 --- a/utils/common/basetypes.h +++ b/utils/common/basetypes.h @@ -34,12 +34,15 @@ typedef unsigned long ulong; typedef unsigned char uint8; typedef signed char int8; + +#ifdef _MSC_VER typedef __int16 int16; typedef unsigned __int16 uint16; typedef __int32 int32; typedef unsigned __int32 uint32; typedef __int64 int64; typedef unsigned __int64 uint64; +#endif #undef true #undef false @@ -77,4 +80,4 @@ enum #define DXT_ENCODE_ALPHA_SDF 0x1A04 // signed distance field #define DXT_ENCODE_NORMAL_AG_PARABOLOID 0x1A07 // paraboloid projection -#endif//BASETYPES_H \ No newline at end of file +#endif//BASETYPES_H diff --git a/utils/common/bspfile.h b/utils/common/bspfile.h index 1e58643..ec4e322 100644 --- a/utils/common/bspfile.h +++ b/utils/common/bspfile.h @@ -76,7 +76,7 @@ BRUSH MODELS .bsp contain level static geometry with including PVS and lightning info ============================================================================== */ -#include "..\..\common\bspfile.h" +#include "../../common/bspfile.h" // header #define Q1BSP_VERSION 29 // quake1 regular version (beta is 28) diff --git a/utils/common/cmdlib.cpp b/utils/common/cmdlib.cpp index c03828c..64e6f74 100644 --- a/utils/common/cmdlib.cpp +++ b/utils/common/cmdlib.cpp @@ -21,13 +21,19 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ // cmdlib.c +#ifdef _WIN32 #include #include +#include +#endif + #include #include -#include #include "stringlib.h" #include "cmdlib.h" +#include +#include +#include static char **com_argv; static int com_argc = 0; @@ -118,7 +124,7 @@ void COM_FatalError( const char *error, ... ) va_list argptr; va_start( argptr, error ); - _vsnprintf( message, sizeof( message ), error, argptr ); + snprintf( message, sizeof( message ), error, argptr ); va_end( argptr ); Msg( "^1Fatal Error:^7 %s", message ); @@ -138,7 +144,7 @@ void COM_Assert( const char *error, ... ) va_list argptr; va_start( argptr, error ); - _vsnprintf( message, sizeof( message ), error, argptr ); + snprintf( message, sizeof( message ), error, argptr ); va_end( argptr ); Msg( "^1assert failed at:^7 %s", message ); @@ -147,8 +153,12 @@ void COM_Assert( const char *error, ... ) void Q_getwd( char *out, size_t size ) { - _getcwd( out, size ); + getcwd( out, size ); +#ifdef _WIN32 Q_strncat( out, "\\", size ); +#else + Q_strncat( out, "/", size ); +#endif } /* @@ -209,19 +219,40 @@ I_FloatTime g-cont. the prefix 'I' was come from Doom code heh ================ */ -double I_FloatTime( void ) -{ - static LARGE_INTEGER g_Frequency; - static LARGE_INTEGER g_ClockStart; - LARGE_INTEGER CurrentTime; - if( !g_Frequency.QuadPart ) +#ifdef _WIN32 +#include + +double GAME_EXPORT I_FloatTime( void ) +{ + static LARGE_INTEGER g_PerformanceFrequency; + static LARGE_INTEGER g_ClockStart; + LARGE_INTEGER CurrentTime; + + if( !g_PerformanceFrequency.QuadPart ) { - QueryPerformanceFrequency( &g_Frequency ); + QueryPerformanceFrequency( &g_PerformanceFrequency ); QueryPerformanceCounter( &g_ClockStart ); } QueryPerformanceCounter( &CurrentTime ); + return (double)( CurrentTime.QuadPart - g_ClockStart.QuadPart ) / (double)( g_PerformanceFrequency.QuadPart ); +} +#elif _LINUX +double GAME_EXPORT I_FloatTime( void ) +{ + static longtime_t g_PerformanceFrequency; + static longtime_t g_ClockStart; + longtime_t CurrentTime; + struct timespec ts; - return (double)( CurrentTime.QuadPart - g_ClockStart.QuadPart ) / (double)( g_Frequency.QuadPart ); -} \ No newline at end of file + if( !g_PerformanceFrequency ) + { + struct timespec res; + if( !clock_getres(CLOCK_MONOTONIC, &res) ) + g_PerformanceFrequency = 1000000000LL/res.tv_nsec; + } + clock_gettime(CLOCK_MONOTONIC, &ts); + return (double) ts.tv_sec + (double) ts.tv_nsec/1000000000.0; +} +#endif diff --git a/utils/common/cmdlib.h b/utils/common/cmdlib.h index 99e1a97..b722cc4 100644 --- a/utils/common/cmdlib.h +++ b/utils/common/cmdlib.h @@ -18,8 +18,10 @@ GNU General Public License for more details. #ifndef CMDLIB_H #define CMDLIB_H +#include "port.h" #include #include "conprint.h" +#include "mathlib.h" // bit routines #define BIT( n ) (1<<( n )) @@ -108,4 +110,4 @@ void CRC32_Final( dword *pulCRC ); void CRC32_ProcessByte( dword *pulCRC, byte ch ); void CRC32_ProcessBuffer( dword *pulCRC, const void *pBuffer, int nBuffer ); -#endif \ No newline at end of file +#endif diff --git a/utils/common/conprint.cpp b/utils/common/conprint.cpp index da19252..0880050 100644 --- a/utils/common/conprint.cpp +++ b/utils/common/conprint.cpp @@ -14,15 +14,19 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */ -#include #include -#include +#include "basetypes.h" #include "stringlib.h" #include "conprint.h" +#include "stdarg.h" +#include #define IsColorString( p ) ( p && *( p ) == '^' && *(( p ) + 1) && *(( p ) + 1) >= '0' && *(( p ) + 1 ) <= '9' ) #define ColorIndex( c ) ((( c ) - '0' ) & 7 ) +#ifdef _WIN32 +#include + static unsigned short g_color_table[8] = { FOREGROUND_INTENSITY, // black @@ -34,6 +38,7 @@ FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY, // cyan FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY, // magenta FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE, // default color (white) }; +#endif static int devloper_level = DEFAULT_DEVELOPER; static bool ignore_log = false; @@ -87,8 +92,77 @@ void Sys_PrintLog( const char *pMsg ) if( !pMsg || ignore_log ) return; - if( !logfile ) return; - fprintf( logfile, "%s", pMsg ); + time_t crt_time; + const struct tm *crt_tm; + char logtime[32] = ""; + static char lastchar; + + time( &crt_time ); + crt_tm = localtime( &crt_time ); + +#ifdef __ANDROID__ + __android_log_print( ANDROID_LOG_DEBUG, "Xash", "%s", pMsg ); +#endif + + if( !lastchar || lastchar == '\n') + strftime( logtime, sizeof( logtime ), "[%H:%M:%S] ", crt_tm ); //short time + +#ifdef COLORIZE_CONSOLE + { + char colored[4096]; + const char *msg = pMsg; + int len = 0; + while( *msg && ( len < 4090 ) ) + { + static char q3ToAnsi[ 8 ] = + { + '0', // COLOR_BLACK + '1', // COLOR_RED + '2', // COLOR_GREEN + '3', // COLOR_YELLOW + '4', // COLOR_BLUE + '6', // COLOR_CYAN + '5', // COLOR_MAGENTA + 0 // COLOR_WHITE + }; + + if( IsColorString( msg ) ) + { + int color; + + msg++; + color = q3ToAnsi[ *msg++ % 8 ]; + colored[len++] = '\033'; + colored[len++] = '['; + if( color ) + { + colored[len++] = '3'; + colored[len++] = color; + } + else + colored[len++] = '0'; + colored[len++] = 'm'; + } + else + colored[len++] = *msg++; + } + colored[len] = 0; + printf( "\033[34m%s\033[0m%s\033[0m", logtime, colored ); + } +#else +#if !defined __ANDROID__ + printf( "%s %s", logtime, pMsg ); + fflush( stdout ); +#endif +#endif + lastchar = pMsg[strlen(pMsg)-1]; + if( !logfile ) + return; + + if( !lastchar || lastchar == '\n') + strftime( logtime, sizeof( logtime ), "[%Y:%m:%d|%H:%M:%S]", crt_tm ); //full time + + fprintf( logfile, "%s %s", logtime, pMsg ); fflush( logfile ); } @@ -101,6 +175,7 @@ print into win32 console */ void Sys_Print( const char *pMsg ) { +#ifdef _WIN32 char tmpBuf[8192]; HANDLE hOut = GetStdHandle( STD_OUTPUT_HANDLE ); unsigned long cbWritten; @@ -146,6 +221,9 @@ void Sys_Print( const char *pMsg ) Sys_PrintLog( tmpBuf ); pTemp = tmpBuf; } +#else + Sys_PrintLog( pMsg ); +#endif } /* @@ -203,6 +281,7 @@ void MsgDev( int level, const char *pMsg, ... ) void MsgAnim( int level, const char *pMsg, ... ) { +#ifdef _WIN32 va_list argptr; char text[1024]; char empty[1024]; @@ -228,4 +307,5 @@ void MsgAnim( int level, const char *pMsg, ... ) Sleep( 150 ); } Msg( "^7\n" ); -} \ No newline at end of file +#endif +} diff --git a/utils/common/filesystem.cpp b/utils/common/filesystem.cpp index fb33932..ba4788f 100644 --- a/utils/common/filesystem.cpp +++ b/utils/common/filesystem.cpp @@ -13,11 +13,19 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */ +#ifdef _WIN32 #include #include +#include +#else +#include +#include +#include +#define O_BINARY 0 +#endif + #include #include -#include #include "conprint.h" #include "cmdlib.h" #include "stringlib.h" @@ -147,16 +155,21 @@ void stringlistsort( stringlist_t *list ) } } -void listdirectory( stringlist_t *list, const char *path, bool tolower ) +void listdirectory( stringlist_s *list, const char *path, bool lowercase ) { - char pattern[4096]; - struct _finddata_t n_file; - long hFile; - char *c; int i; + signed char *c; +#ifdef _WIN32 + char pattern[4096]; + struct _finddata_t n_file; + int hFile; +#else + DIR *dir; + struct dirent *entry; +#endif - Q_strncpy( pattern, path, sizeof( pattern )); - Q_strncat( pattern, "*", sizeof( pattern )); +#ifdef _WIN32 + Q_snprintf( pattern, sizeof( pattern ), "%s*", path ); // ask for the directory listing handle hFile = _findfirst( pattern, &n_file ); @@ -164,22 +177,33 @@ void listdirectory( stringlist_t *list, const char *path, bool tolower ) // start a new chain with the the first name stringlistappend( list, n_file.name ); - // iterate through the directory while( _findnext( hFile, &n_file ) == 0 ) stringlistappend( list, n_file.name ); _findclose( hFile ); +#else + if( !( dir = opendir( path ) ) ) + return; - if( !tolower ) return; + // iterate through the directory + while( ( entry = readdir( dir ) )) + stringlistappend( list, entry->d_name ); + closedir( dir ); +#endif // convert names to lowercase because windows doesn't care, but pattern matching code often does - for( i = 0; i < list->numstrings; i++ ) + if( lowercase ) { - for( c = list->strings[i]; *c; c++ ) - *c = Q_tolower( *c ); + for( i = 0; i < list->numstrings; i++ ) + { + for( c = (signed char *)list->strings[i]; *c; c++ ) + { + if( *c >= 'A' && *c <= 'Z' ) + *c += 'a' - 'A'; + } + } } } - /* ============================================================================= @@ -212,20 +236,21 @@ search_t *COM_Search( const char *pattern, int caseinsensitive, wfile_t *source_ return NULL; } - if( !GetCurrentDirectory( sizeof( root ), root )) + Q_getwd( root, sizeof( root ) ); + if( !root ) { MsgDev( D_ERROR, "couldn't determine current directory\n" ); return NULL; } - Q_strncat( root, "\\", sizeof( root )); stringlistinit( &resultlist ); stringlistinit( &dirlist ); + slash = Q_strrchr( pattern, '/' ); backslash = Q_strrchr( pattern, '\\' ); colon = Q_strrchr( pattern, ':' ); - separator = max( slash, backslash ); - separator = max( separator, colon ); + separator = Q_max( slash, backslash ); + separator = Q_max( separator, colon ); basepathlength = separator ? (separator + 1 - pattern) : 0; basepath = (char *)Mem_Alloc( basepathlength + 1 ); if( basepathlength ) memcpy( basepath, pattern, basepathlength ); @@ -357,7 +382,11 @@ void COM_CreatePath( char *path ) // create the directory save = *ofs; *ofs = 0; - _mkdir( path ); +#ifdef _WIN32 + mkdir( path ); +#else + mkdir( path, 0777); +#endif *ofs = save; } } @@ -555,9 +584,28 @@ COM_FolderExists */ bool COM_FolderExists( const char *path ) { - DWORD dwFlags = GetFileAttributes( path ); +#if XASH_WIN32 + DWORD dwFlags = GetFileAttributes( path ); - return ( dwFlags != -1 ) && FBitSet( dwFlags, FILE_ATTRIBUTE_DIRECTORY ); + return ( dwFlags != -1 ) && ( dwFlags & FILE_ATTRIBUTE_DIRECTORY ); +#else + DIR *dir = opendir( path ); + + if( dir ) + { + closedir( dir ); + return true; + } + else if( (errno == ENOENT) || (errno == ENOTDIR) ) + { + return false; + } + else + { + MsgDev( D_ERROR, "FS_SysFolderExists: problem while opening dir: %s\n", strerror( errno ) ); + return false; + } +#endif } /* @@ -618,4 +666,4 @@ void SafeWriteExt( long handle, void *buffer, int count, const char *file, const if( write_count != (size_t)count ) COM_FatalError( "file write failure ( %i != %i ) at %s:%i\n", write_count, count, file, line ); -} \ No newline at end of file +} diff --git a/utils/common/mathlib.cpp b/utils/common/mathlib.cpp index dbb11fc..dc75d34 100644 --- a/utils/common/mathlib.cpp +++ b/utils/common/mathlib.cpp @@ -193,6 +193,7 @@ SinCos */ void SinCos( float radians, float *sine, float *cosine ) { + #ifdef _MSC_VER _asm { fld dword ptr [radians] @@ -204,6 +205,10 @@ void SinCos( float radians, float *sine, float *cosine ) fstp dword ptr [edx] fstp dword ptr [eax] } + #else + *sine = sin(radians); + *cosine = cos(radians); + #endif } /* @@ -405,7 +410,8 @@ fast box on planeside test */ int SignbitsForPlane( const vec3_t normal ) { - for( int bits = 0, i = 0; i < 3; i++ ) + int bits, i; + for( bits = 0, i = 0; i < 3; i++ ) if( normal[i] < 0.0f ) bits |= 1< -#include /* ============================================================================= @@ -558,4 +557,4 @@ void TokenError( const char *fmt, ... ) vsprintf( output, fmt, args ); COM_FatalError( "%s", output ); } -} \ No newline at end of file +} diff --git a/utils/common/stringlib.cpp b/utils/common/stringlib.cpp index 98ae423..beda42f 100644 --- a/utils/common/stringlib.cpp +++ b/utils/common/stringlib.cpp @@ -3,11 +3,12 @@ // stringlib.cpp - safety string routines //======================================================================= -#include +#include "port.h" +#include #include "stringlib.h" -#include #include "cmdlib.h" #include "mathlib.h" +#include "stdarg.h" void Q_strnupr( const char *in, char *out, size_t size_out ) { @@ -287,17 +288,21 @@ int Q_vsnprintf( char *buffer, size_t buffersize, const char *format, va_list ar { size_t result; +#ifdef _MSC_VER __try +#endif { - result = _vsnprintf( buffer, buffersize, format, args ); + result = vsnprintf( buffer, buffersize, format, args ); } // to prevent crash while output +#ifdef _MSC_VER __except( EXCEPTION_EXECUTE_HANDLER ) { Q_strncpy( buffer, "^1sprintf throw exception^7\n", buffersize ); result = buffersize; } +#endif if( result < 0 || result >= buffersize ) { @@ -534,4 +539,4 @@ skipwhite: token[len] = 0; return data; -} \ No newline at end of file +} diff --git a/utils/common/wadfile.cpp b/utils/common/wadfile.cpp index f8cced1..78d0459 100644 --- a/utils/common/wadfile.cpp +++ b/utils/common/wadfile.cpp @@ -14,11 +14,8 @@ GNU General Public License for more details. */ #include "conprint.h" -#include -#include #include #include -#include #include "cmdlib.h" #include "stringlib.h" #include "filesystem.h" @@ -930,4 +927,4 @@ void W_SearchForFile( wfile_t *wad, const char *pattern, stringlist_t *resultlis *((char *)separator) = 0; } } -} \ No newline at end of file +} diff --git a/utils/common/zone.cpp b/utils/common/zone.cpp index ad6e283..c180ff8 100644 --- a/utils/common/zone.cpp +++ b/utils/common/zone.cpp @@ -13,7 +13,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */ -#include +//#include #include "cmdlib.h" #include "threads.h" #include "stringlib.h" @@ -62,7 +62,7 @@ static void *attempt_calloc( size_t size ) if(( base = (void *)calloc( size, 1 )) != NULL ) return base; // try for half a second or so - Sleep( 100 ); + usleep( 100000 ); } return NULL; } @@ -173,4 +173,4 @@ size_t Mem_Size( void *ptr ) chunk = (memhdr_t *)((byte *)ptr - sizeof( memhdr_t )); return chunk->size; -} \ No newline at end of file +} -- 2.34.1 From 2d035e9c5a77a6b9a2444eb1a29a3b4ebe09d329 Mon Sep 17 00:00:00 2001 From: nillerusr Date: Mon, 16 Nov 2020 20:37:58 +0300 Subject: [PATCH 2/4] mathlib: check for x86 architecture in SinCos --- utils/common/mathlib.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/common/mathlib.cpp b/utils/common/mathlib.cpp index dc75d34..a54b870 100644 --- a/utils/common/mathlib.cpp +++ b/utils/common/mathlib.cpp @@ -193,7 +193,7 @@ SinCos */ void SinCos( float radians, float *sine, float *cosine ) { - #ifdef _MSC_VER + #if defined _MSC_VER && defined(__i386__) _asm { fld dword ptr [radians] -- 2.34.1 From a1c9c58972ef8b647cf7af39fcd43f03d3ff2cab Mon Sep 17 00:00:00 2001 From: nillerusr Date: Mon, 16 Nov 2020 21:43:24 +0300 Subject: [PATCH 3/4] fix COM_FileExists, implement args for bsp31migrate --- utils/bsp31migrate/bsp31migrate.cpp | 2 +- utils/bsp31migrate/bspfile.cpp | 42 +++++++++++++---------------- utils/common/filesystem.cpp | 16 +++++++++-- 3 files changed, 33 insertions(+), 27 deletions(-) diff --git a/utils/bsp31migrate/bsp31migrate.cpp b/utils/bsp31migrate/bsp31migrate.cpp index 2875473..aeecfeb 100644 --- a/utils/bsp31migrate/bsp31migrate.cpp +++ b/utils/bsp31migrate/bsp31migrate.cpp @@ -24,7 +24,7 @@ int main( int argc, char **argv ) if( i != 0 && argc > i+1 ) SetDeveloperLevel( atoi( argv[i+1] )); - if( COM_CheckParm( "--help" ) != 0 ) + if( COM_CheckParm( "-help" ) != 0 ) { Msg( "usage: bsp31migrate -file -output \n" ); return 0; diff --git a/utils/bsp31migrate/bspfile.cpp b/utils/bsp31migrate/bspfile.cpp index 1f588b0..312658b 100644 --- a/utils/bsp31migrate/bspfile.cpp +++ b/utils/bsp31migrate/bspfile.cpp @@ -15,6 +15,7 @@ GNU General Public License for more details. #include "bsp31migrate.h" #include "filesystem.h" +#include "stringlib.h" #define VALVE_FORMAT 220 @@ -117,46 +118,38 @@ void PrintMapInfo( void ) char *ptr = &g_mapinfo[infolen-2]; if( *ptr == ',' ) *ptr = '.'; - - Msg( "Map name: %s", g_mapname ); - Msg( "\nMap type: " ); + Msg( "Map name: %s\n", g_mapname ); switch( g_maptype ) { case MAP_XASH31: - Msg( "^2XashXT BSP31^7" ); + Msg("Map Type: ^2XashXT BSP31^7\n"); break; default: COM_FatalError( "%s unknown map format\n", g_mapname ); break; } - if( g_subtype != MAP_NORMAL ) - Msg( "\nSub type: " ); - else Msg( "\n" ); - switch( g_subtype ) { case MAP_HLFX06: - Msg( "^4HLFX 0.6^7\n" ); + Msg( "Sub type: ^4HLFX 0.6^7\n" ); break; case MAP_XASHXT_OLD: - Msg( "^4XashXT 0.5^7\n" ); + Msg( "Sub type: ^4XashXT 0.5^7\n" ); break; case MAP_P2SAVIOR: - Msg( "^4Paranoia2: Savior^7\n" ); + Msg( "Sub type: ^4Paranoia2: Savior^7\n" ); break; case MAP_DEPRECATED: - Msg( "^1intermediate deprecated version^7\n" ); + Msg( "Sub type: ^1intermediate deprecated version^7\n" ); break; case MAP_XASH3D_EXT: - Msg( "^4Xash3D extended^7\n" ); + Msg( "Sub type: ^4Xash3D extended^7\n" ); break; } - if( g_mapinfo[0] ) Msg( "Map info: %s", g_mapinfo ); - - Msg( "\n\n" ); + if( g_mapinfo[0] ) Msg( "Map info: %s\n", g_mapinfo ); } //============================================================================= @@ -1180,12 +1173,17 @@ void LoadBSPFile( const char *infilename, const char *outfilename ) int BspConvert( int argc, char **argv ) { - char source[1024], name[1024]; - char output[1024]; + char source[1024], name[1024], name_output[1024]; + char output[1024], root[1024]; - if( !COM_GetParmExt( "-file", source, sizeof( source ))) - Q_strncpy( source, "*.bsp", sizeof( source )); + if( COM_GetParmExt( "-file", source, sizeof( source )) && COM_GetParmExt( "-output", output, sizeof( output )) ) + { + LoadBSPFile( source, output ); + return 0; + } + + Q_strncpy( source, "*.bsp", sizeof( source )); search_t *search = COM_Search( source, true ); @@ -1195,10 +1193,6 @@ int BspConvert( int argc, char **argv ) { COM_FileBase( search->filenames[i], name ); Q_snprintf( output, sizeof( output ), "%s.bsp", name ); -#if 0 - if( COM_FileExists( output )) - continue; // map already converted -#endif LoadBSPFile( search->filenames[i], output ); } diff --git a/utils/common/filesystem.cpp b/utils/common/filesystem.cpp index ba4788f..3882133 100644 --- a/utils/common/filesystem.cpp +++ b/utils/common/filesystem.cpp @@ -224,7 +224,7 @@ search_t *COM_Search( const char *pattern, int caseinsensitive, wfile_t *source_ int i, basepathlength, numfiles, numchars; int resultlistindex, dirlistindex; const char *slash, *backslash, *colon, *separator; - char netpath[1024], temp[1024], root[1204]; + char netpath[1024], temp[1024], root[1024]; stringlist_t resultlist, dirlist; char *basepath; @@ -399,13 +399,25 @@ COM_FileExists */ bool COM_FileExists( const char *path ) { +#ifdef _WIN32 int desc; - + if(( desc = open( path, O_RDONLY|O_BINARY )) < 0 ) return false; close( desc ); return true; +#else + int ret; + struct stat buf; + + ret = stat( path, &buf ); + + if( ret < 0 ) + return false; + + return S_ISREG( buf.st_mode ); +#endif } /* -- 2.34.1 From c3bff79991e2d3baa698954de1d8bec9652ddb20 Mon Sep 17 00:00:00 2001 From: nillerusr Date: Mon, 16 Nov 2020 21:45:58 +0300 Subject: [PATCH 4/4] bsp31migrate: remove unused variables --- utils/bsp31migrate/bspfile.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/bsp31migrate/bspfile.cpp b/utils/bsp31migrate/bspfile.cpp index 312658b..0eaa5a5 100644 --- a/utils/bsp31migrate/bspfile.cpp +++ b/utils/bsp31migrate/bspfile.cpp @@ -1173,8 +1173,8 @@ void LoadBSPFile( const char *infilename, const char *outfilename ) int BspConvert( int argc, char **argv ) { - char source[1024], name[1024], name_output[1024]; - char output[1024], root[1024]; + char source[1024], name[1024]; + char output[1024]; if( COM_GetParmExt( "-file", source, sizeof( source )) && COM_GetParmExt( "-output", output, sizeof( output )) ) -- 2.34.1