00001 /* 00002 ClanLib, the platform independent game SDK. 00003 This library is distributed under the GNU LIBRARY GENERAL PUBLIC 00004 LICENSE version 2. See COPYING for details. For a total list of 00005 contributers see CREDITS. 00006 00007 $Id: datafile_writer.h,v 1.2 2000/07/15 15:45:50 starch Exp $ 00008 00009 */ 00010 00011 #ifndef header_datafilewriter 00012 #define header_datafilewriter 00013 00014 #define datafile_id "ClanSoft datafile version 3.0" 00015 00016 #include <list> 00017 00018 #ifdef __BEOS__ 00019 #include <gnu/zlib.h> 00020 #else 00021 #include <zlib.h> // Zlib compression library 00022 #endif 00023 00024 #include "API/Core/System/clanstring.h" 00025 #include "API/Core/IOData/outputsource.h" 00026 #include "API/Core/IOData/outputsource_provider.h" 00027 00028 /* 00029 class CL_Datafile_Write 00030 { 00031 protected: 00032 char *filename; 00033 00034 int datafile; 00035 int index; 00036 int data; 00037 gzFile data_indexed; 00038 bool index_open; 00039 int num_indexes; 00040 00041 void init_datafile(); 00042 void finish_datafile(); 00043 00044 void copy_file(int dest, int source, long len); 00045 00046 int cur_index_size; 00047 00048 public: 00049 CL_Datafile_Write(char *filename); 00050 virtual ~CL_Datafile_Write(); 00051 00052 void create_index(char *index); 00053 void write_data(void *data, int data_size); 00054 gzFile get_file_pointer(); 00055 }; 00056 */ 00057 00058 class DatafileIndex 00059 { 00060 public: 00061 CL_String name; 00062 int pos; 00063 int size; 00064 00065 DatafileIndex(const char *_name, int _pos) 00066 { 00067 name = _name; 00068 pos = _pos; 00069 size = 0; 00070 } 00071 }; 00072 00073 class OutputSourceProvider_Datafile : public CL_OutputSourceProvider 00074 { 00075 protected: 00076 CL_String filename; 00077 int datafile_fd; 00078 00079 std::list<DatafileIndex*> indexes; 00080 00081 public: 00082 OutputSourceProvider_Datafile(const char *filename); 00083 virtual ~OutputSourceProvider_Datafile(); 00084 00085 gzFile create_index(const char *index); 00086 void close_index(gzFile gz_fd, int size); 00087 00088 virtual CL_OutputSource *open_source(const char *handle); 00089 virtual CL_OutputSourceProvider *clone(); 00090 }; 00091 00092 class OutputSource_Datafile : public CL_OutputSource 00093 { 00094 protected: 00095 OutputSourceProvider_Datafile *provider; 00096 gzFile output_fd; 00097 int pos; 00098 00099 public: 00100 OutputSource_Datafile(const char *handle, OutputSourceProvider_Datafile *provider); 00101 virtual ~OutputSource_Datafile(); 00102 00103 virtual void set_system_mode(); 00104 virtual void set_big_endian_mode(); 00105 virtual void set_little_endian_mode(); 00106 00107 virtual void write_int32(int data); 00108 virtual void write_uint32(unsigned int data); 00109 00110 virtual void write_short16(short data); 00111 virtual void write_ushort16(unsigned short data); 00112 00113 virtual void write_char8(char data); 00114 virtual void write_uchar8(unsigned char data); 00115 00116 virtual void write_float32(float data); 00117 00118 virtual int write(const void *data, int size); 00119 00120 virtual void open(); 00121 virtual void close(); 00122 00123 virtual CL_OutputSource *clone(); 00124 00125 virtual int tell(); 00126 virtual int size(); 00127 00128 virtual void write_string(const char *string); 00129 }; 00130 00131 #endif
1.2.6 written by Dimitri van Heesch,
© 1997-2001