/* Copyright (C) 1999-2007 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 */ #ifndef _PAKSTUFF_H_ #define _PAKSTUFF_H_ #ifndef _WIN32 #define WINAPI #else #include #endif #ifndef __cplusplus typedef int bool; // leo #endif #ifdef __cplusplus extern "C" { #endif typedef char Int8; typedef short Int16; typedef long Int32; typedef unsigned char UInt8; typedef unsigned short UInt16; typedef unsigned long UInt32; typedef float Float32; typedef double Float64; #define MAX( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) ) #define MIN( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) ) #define RANDOM( x ) ( random() % ( x ) ) #define RANDOMIZE() srand( (int) time( NULL ) ) #define FTYPE_UNKNOWN 0 #define FTYPE_IWAD 1 /* .wad "IWAD" */ #define FTYPE_PWAD 2 /* .wad "PWAD" */ #define FTYPE_PACK 3 /* .pak "PACK" */ #define FTYPE_WAD2 4 /* .wad "WAD2" */ #define FTYPE_BSP 10 /* .bsp (0x17 0x00 0x00 0x00) */ #define FTYPE_MODEL 11 /* .mdl "IDPO" */ #define FTYPE_SPRITE 12 /* .spr "IDSP" */ #define FTYPE_WAV 20 /* .wav "RIFF" */ #define FTYPE_AU 21 /* .au ".snd" */ #define FTYPE_VOC 22 /* .voc ? */ #define FTYPE_PBM_ASC 30 /* .pbm "P1" */ #define FTYPE_PGM_ASC 31 /* .pgm "P2" */ #define FTYPE_PPM_ASC 32 /* .ppm "P3" */ #define FTYPE_PBM_RAW 33 /* .pbm "P4" */ #define FTYPE_PGM_RAW 34 /* .pgm "P5" */ #define FTYPE_PPM_RAW 35 /* .ppm "P6" */ #define FTYPE_BMP 36 /* .bmp "BM" */ #define FTYPE_GIF 37 /* .gif "GIF8" */ #define FTYPE_PCX 38 /* .pcx (0x0a 0x05 0x01 0x08) */ #define FTYPE_ERROR -1 #ifdef FAT_ENDIAN Bool ReadInt16( FILE *file, UInt16 huge *x ); Bool ReadInt32( FILE *file, UInt32 huge *x ); Bool ReadFloat32( FILE *file, Float32 huge *x ); Bool WriteInt16( FILE *file, UInt16 huge *x ); Bool WriteInt32( FILE *file, UInt32 huge *x ); Bool WriteFloat32( FILE *file, Float32 huge *x ); UInt16 SwapInt16( UInt16 x ); UInt32 SwapInt32( UInt32 x ); Float32 SwapFloat32( Float32 x ); #else #define ReadInt16( f, p ) ReadBytes( ( f ), ( p ), 2L ) #define ReadInt32( f, p ) ReadBytes( ( f ), ( p ), 4L ) #define ReadFloat32( f, p ) ReadBytes( ( f ), ( p ), 4L ) #define WriteInt16( f, p ) WriteBytes( ( f ), ( p ), 2L ) #define WriteInt32( f, p ) WriteBytes( ( f ), ( p ), 4L ) #define WriteFloat32( f, p ) WriteBytes( ( f ), ( p ), 4L ) #define SwapInt16( x ) ( x ) #define SwapInt32( x ) ( x ) #define SwapFloat32( x ) ( x ) #endif /* FAT_ENDIAN */ #define FROMDISK -1 struct PACKDirectory { char name[56]; /* name of file */ UInt32 offset; /* offset to start of data */ UInt32 size; /* byte size of data */ }; typedef struct PACKDirectory *PACKDirPtr; typedef struct DirListStruct { char dirname[1024]; int from; struct DirListStruct *next; } DIRLIST; typedef struct FileListStruct { char filename[1024]; UInt32 offset; UInt32 size; struct FileListStruct *next; } FILELIST; typedef struct DirStruct { char name[1024]; FILELIST *files; struct DirStruct *next; } DIRECTORY; extern int m_nPAKIndex; extern FILE* pakfile[16]; extern bool pakopen; extern DIRECTORY *paktextures; void ClearFileList( FILELIST ** ); void ClearDirList( DIRLIST ** ); bool GetPackFileList( FILELIST **, char * ); bool GetPackTextureDirs( DIRLIST ** ); bool AddToDirListAlphabetized( DIRLIST **, char *, int ); bool AddToFileListAlphabetized( FILELIST * *t, char *, UInt32, UInt32, bool ); bool PakLoadFile( const char *, void ** ); void OpenPakFile( const char * ); void ClosePakFile( void ); int PakLoadAnyFile( const char *filename, void **bufferptr ); void WINAPI InitPakFile( const char * pBasePath, const char *pName ); #ifdef __cplusplus } #endif #endif