/* Copyright (C) 1999-2006 Id Software, Inc. and contributors. For a list of contributors, see the accompanying CONTRIBUTORS file. This file is part of GtkRadiant. GtkRadiant is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GtkRadiant is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GtkRadiant; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* Camera plugin for GtkRadiant Copyright (C) 2002 Splash Damage Ltd. */ #include "camera.h" void Sys_ERROR( char* text, ... ) { va_list argptr; char buf[32768]; va_start (argptr,text); vsprintf (buf, text,argptr); va_end (argptr); Sys_Printf("Camera::ERROR->%s", buf); } char* UnixToDosPath( char* path ) { #ifndef WIN32 return path; #else for(char* p = path; *p; p++) { if(*p == '/') *p = '\\'; } return path; #endif } void ExtractFilePath( const char *path, char *dest ) { const char *src; src = path + strlen(path) - 1; // // back up until a \ or the start // while (src != path && *(src-1) != '/' && *(src-1) != '\\') src--; memcpy (dest, path, src-path); dest[src-path] = 0; } const char* ExtractFilename( const char* path ) { char* p = strrchr(path, '/'); if(!p) { p = strrchr(path, '\\'); if(!p) return path; } return ++p; } int Q_stricmp (const char *s1, const char *s2) { return string_equal_nocase( s1, s2 ); } /* ============== FileExists ============== */ bool FileExists (const char *filename) { FILE *f; f = fopen( filename, "r" ); if( !f ) return false; fclose( f ); return true; } // // command buffer // empty wrappers, don't really use them here // void Cbuf_AddText( const char *text ) {}; void Cbuf_Execute (void) {}; // // Common // void CDECL Com_Error( int level, const char *error, ... ) { va_list argptr; char buf[32768]; va_start (argptr,error); vsprintf (buf, error,argptr); va_end (argptr); Sys_Printf("Camera::ERROR->%s", buf); } void CDECL Com_Printf( const char* msg, ... ) { va_list argptr; char buf[32768]; va_start (argptr,msg); vsprintf (buf, msg,argptr); va_end (argptr); Sys_Printf("Camera::%s", buf); } void CDECL Com_DPrintf( const char* msg, ... ) { #ifdef _DEBUG va_list argptr; char buf[32768]; va_start (argptr,msg); vsprintf (buf, msg,argptr); va_end (argptr); Sys_Printf("Camera::%s", buf); #endif } void *Com_Allocate( int bytes ) { return( malloc( bytes ) ); } void Com_Dealloc( void *ptr ) { free( ptr ); } // // Filesystem // #ifdef WIN32 #pragma warning(disable : 4311) #pragma warning(disable : 4312) #endif int FS_Read( void *buffer, int len, fileHandle_t f ) { return fread( buffer, len, 1, (FILE *)f ); } int FS_Write( const void *buffer, int len, fileHandle_t h ) { return fwrite( buffer, len, 1, (FILE *)h ); } int FS_ReadFile( const char *qpath, void **buffer ) { fileHandle_t h; byte* buf; int len; buf = NULL; len = FS_FOpenFileRead( qpath, &h, qfalse ); if( h == 0 ) { if ( buffer ) { *buffer = NULL; } return -1; } buf = (byte *)Com_Allocate( len + 1 ); *buffer = buf; FS_Read (buf, len, h); buf[len] = 0; FS_FCloseFile( h ); return len; } void FS_FreeFile( void *buffer ) { Com_Dealloc( buffer ); } int FS_FOpenFileRead( const char *filename, fileHandle_t *file, bool uniqueFILE ) { FILE *fh; long len; fh = fopen( filename, "rb" ); *file = *(fileHandle_t *)&fh; if( file ) { fseek (fh, 0, SEEK_END); len = ftell (fh); rewind (fh); return len; } else return -1; } fileHandle_t FS_FOpenFileWrite( const char *filename ) { FILE *fh; fileHandle_t f; memset( &f, 0, sizeof(f) ); fh = fopen( filename, "wb" ); f = (fileHandle_t)fh; return f; } void FS_FCloseFile( fileHandle_t f ) { fclose( (FILE *)f ); }