/* 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" #include "globaldefs.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) { #if !GDEF_OS_WINDOWS 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, ...) { #if GDEF_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 // #if GDEF_COMPILER_MSVC #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); }