diff options
| author | Steven Fuller <relnev@icculus.org> | 2001-07-01 00:55:22 +0000 |
|---|---|---|
| committer | Patryk Obara <dreamer.tan@gmail.com> | 2019-08-20 02:09:04 +0200 |
| commit | 2186d5f3f95cd74a070a490d899291648d58667a (patch) | |
| tree | 55241a1afa3e1a22e0b6593a8dead0b703800f44 /3dc/win95/BMPNAMES.CPP | |
| parent | 218ca90543758a20ac326e444ca0643174ca7384 (diff) | |
Initial revision
Diffstat (limited to '3dc/win95/BMPNAMES.CPP')
| -rw-r--r-- | 3dc/win95/BMPNAMES.CPP | 964 |
1 files changed, 0 insertions, 964 deletions
diff --git a/3dc/win95/BMPNAMES.CPP b/3dc/win95/BMPNAMES.CPP deleted file mode 100644 index 1918033..0000000 --- a/3dc/win95/BMPNAMES.CPP +++ /dev/null @@ -1,964 +0,0 @@ -#include <string.h> -#include "bmpnames.hpp" -#include "mishchnk.hpp" - -#if engine -#define UseLocalAssert No -#include "ourasert.h" -#define assert(x) GLOBALASSERT(x) -#else -#if cencon -#include "ccassert.h" -#else -#include <assert.h> -#endif -#endif - -#ifdef cencon -#define new my_new -#endif - -//macro for helping to force inclusion of chunks when using libraries -FORCE_CHUNK_INCLUDE_IMPLEMENT(bmpnames) - - -BMP_Name::BMP_Name (const char * fname, int const gbnc_version) -: flags((BMPN_Flags)DEFAULT_BMPN_FLAGS), index(0), version_num (gbnc_version << BMPNAME_PARENT_VER_SHIFT), priority (DEFAULT_BMPN_PRIORITY), transparency_colour_union(0), enum_id(0) -#if cencon -, md5val(0) -#endif -{ - filename = new char [strlen(fname)+1]; - strcpy (filename, fname); -} - -BMP_Name::BMP_Name (const char * fname) -: flags((BMPN_Flags)DEFAULT_BMPN_FLAGS), index(0), version_num (0), priority (DEFAULT_BMPN_PRIORITY), transparency_colour_union(0), enum_id(0) -#if cencon -, md5val(0) -#endif -{ - filename = new char [strlen(fname)+1]; - strcpy (filename, fname); -} - -BMP_Name::~BMP_Name () -{ - if (filename) - delete [] filename; -} - -BMP_Name::BMP_Name (const BMP_Name & bn) -{ - if (&bn == this) return; - - filename = new char [strlen(bn.filename)+1]; - strcpy (filename, bn.filename); - flags = bn.flags; - index = bn.index; - version_num = bn.version_num; - enum_id = bn.enum_id; - priority = bn.priority; - transparency_colour_union = bn.transparency_colour_union; - #if cencon - md5val = bn.md5val; - #endif -} - -void BMP_Name::Validate(void) -{ - if (flags & ChunkBMPFlag_PriorityAndTransparencyAreValid) return; - - priority = DEFAULT_BMPN_PRIORITY; - flags = (BMPN_Flags)(flags | DEFAULT_BMPN_FLAGS); -} - -const BMP_Name & BMP_Name::operator=(const BMP_Name & bn) -{ - if (&bn == this) return(*this); - - if (filename) - delete [] filename; - - filename = new char [strlen(bn.filename)+1]; - strcpy (filename, bn.filename); - flags = bn.flags; - index = bn.index; - version_num = bn.version_num; - enum_id = bn.enum_id; - priority = bn.priority; - transparency_colour_union = bn.transparency_colour_union; - #if cencon - md5val = bn.md5val; - #endif - - return(*this); - - -} - - - -BOOL operator==(const BMP_Name &o1, const BMP_Name &o2) -{ - if (o1.filename && o2.filename) return _stricmp(o1.filename,o2.filename) ? FALSE : TRUE; - else return &o1 == &o2; -} - -BOOL operator!=(const BMP_Name &o1, const BMP_Name &o2) -{ - if (o1.filename && o2.filename) return _stricmp(o1.filename,o2.filename) ? TRUE : FALSE; - else return &o1 != &o2; -} - - -/////////////////////////////////////// - -// Class Chunk_With_BMPs functions - - - -Chunk_With_BMPs::Chunk_With_BMPs (Chunk_With_Children * parent, const char * const ident, const char * bdata, size_t /*bsize*/) -: Chunk (parent, ident), max_index (0) -{ - int temp = *(int *)bdata; - - int num = temp & 0xffff; - - int ver_num = temp >> 16 & 0xffff; // the remains of a previous mistake - not really necessary anymore - - bdata += 4; - - for (int i=0; i<num; i++) - { - int f,i,d1,d2,d3; - - f = *((int *)bdata); - bdata += 4; - i = *((int *)bdata); - bdata += 4; - d1 = *((int *)bdata); - bdata += 4; - d2 = *((int *)bdata); - bdata += 4; - d3 = *((int *)bdata); - bdata += 4; - - BMP_Name bn (bdata); - bdata += (4-strlen(bn.filename)%4) + strlen(bn.filename); - - bn.flags = (BMPN_Flags)f; - bn.index = i; - bn.version_num = d1 & BMPNAME_VERSION_NUM_MASK; - bn.enum_id = (int)((unsigned int)d1 >> BMPNAME_ENUMID_SHIFT); - bn.priority = d2; - bn.transparency_colour_union = d3; - - max_index = max (bn.index, max_index); - - bmps.add_entry (bn); - } - - if (ver_num) - { - set_version_num(ver_num); - } -} - - -size_t Chunk_With_BMPs::size_chunk () -{ - int sz = 12 + 4; - - for (LIF<BMP_Name> bl(&bmps); !bl.done(); bl.next()) - { - sz += (4-strlen(bl().filename)%4) + strlen(bl().filename) + 20; - } - - chunk_size = sz; - - return (chunk_size); - -} - -void Chunk_With_BMPs::fill_data_block (char * data_start) -{ - strncpy (data_start, identifier, 8); - - data_start += 8; - - *((int *) data_start) = chunk_size; - - data_start += 4; - - *((int *) data_start) = bmps.size(); - - data_start += 4; - - for (LIF<BMP_Name> bl(&bmps); !bl.done(); bl.next()) - { - *((int *) data_start) = bl().flags; - data_start += 4; - *((int *) data_start) = bl().index; - data_start += 4; - *((int *) data_start) = bl().version_num & BMPNAME_VERSION_NUM_MASK | bl().enum_id << BMPNAME_ENUMID_SHIFT; - data_start += 4; - *((int *) data_start) = bl().priority; - data_start += 4; - *((int *) data_start) = bl().transparency_colour_union; - data_start += 4; - - strcpy (data_start, bl().filename); - data_start += (4-strlen(bl().filename)%4) + strlen(bl().filename); - } - -} - -int Chunk_With_BMPs::get_version_num(void) -{ - if (parent) - { - List<Chunk *> verlist; - parent->lookup_child("BMNAMVER",verlist); - while (verlist.size()>1) - { - Chunk * v1 = verlist.first_entry(); - Chunk * v2 = verlist[1]; - if (((BMP_Names_Version_Chunk *)v1)->version_num > ((BMP_Names_Version_Chunk *)v2)->version_num) - { - delete verlist.last_entry(); - verlist.delete_last_entry(); - } - else - { - delete v1; - verlist.delete_first_entry(); - } - } - if (verlist.size()) - { - int rv = ((BMP_Names_Version_Chunk *)verlist.first_entry())->version_num; - return rv; - } - } - return 0; -} - -void Chunk_With_BMPs::set_version_num(int v) -{ - if (parent) - { - List<Chunk *> verlist; - parent->lookup_child("BMNAMVER",verlist); - while (verlist.size()>1) - { - Chunk * v1 = verlist.first_entry(); - Chunk * v2 = verlist[1]; - if (((BMP_Names_Version_Chunk *)v1)->version_num > ((BMP_Names_Version_Chunk *)v2)->version_num) - { - delete verlist.last_entry(); - verlist.delete_last_entry(); - } - else - { - delete v1; - verlist.delete_first_entry(); - } - } - if (verlist.size()) - { - ((BMP_Names_Version_Chunk *)verlist.first_entry())->version_num = v; - return; - } - - (new BMP_Names_Version_Chunk(parent))->version_num = v; - } -} - -void Chunk_With_BMPs::inc_version_num(void) -{ - if (parent) - { - List<Chunk *> verlist; - parent->lookup_child("BMNAMVER",verlist); - while (verlist.size()>1) - { - Chunk * v1 = verlist.first_entry(); - Chunk * v2 = verlist[1]; - if (((BMP_Names_Version_Chunk *)v1)->version_num > ((BMP_Names_Version_Chunk *)v2)->version_num) - { - delete verlist.last_entry(); - verlist.delete_last_entry(); - } - else - { - delete v1; - verlist.delete_first_entry(); - } - } - if (verlist.size()) - { - ((BMP_Names_Version_Chunk *)verlist.first_entry())->version_num ++; - return; - } - - (new BMP_Names_Version_Chunk(parent))->version_num ++; - } -} - -BMP_Names_ExtraData * Chunk_With_BMPs::GetExtendedData(void) -{ - if (parent) - { - List<Chunk *> verlist; - parent->lookup_child("BMNAMEXT",verlist); - if (verlist.size()) - { - return (BMP_Names_ExtraData_Chunk *) verlist.first_entry(); - } - return new BMP_Names_ExtraData_Chunk(parent); - } - return 0; -} - -int const * Chunk_With_BMPs::GetMD5Val(BMP_Name const & rcbmp) -{ - Bitmap_MD5_Chunk * md5c = GetMD5Chunk(rcbmp.filename); - if (md5c) - if (rcbmp.version_num == md5c->version_num) - return md5c->md5_val; - return 0; -} - -void Chunk_With_BMPs::RemoveMD5Val(char const * bname) -{ - Bitmap_MD5_Chunk * md5c = GetMD5Chunk(bname); - if (md5c) - delete md5c; -} - -void Chunk_With_BMPs::SetMD5Val(BMP_Name const & rcbmp, int const * md5id) -{ - Bitmap_MD5_Chunk * md5c = GetMD5Chunk(rcbmp.filename); - if (md5c) - { - if (rcbmp.version_num == md5c->version_num) - { - memcpy(md5c->md5_val,md5id,16); - return; - } - else - delete md5c; - } - CreateMD5Chunk(rcbmp,md5id); -} - - -///////////////////////////////////// -// Global_BMP_Name_Chunk -///////////////////////////////////// -RIF_IMPLEMENT_DYNCREATE("BMPNAMES",Global_BMP_Name_Chunk) - -Bitmap_MD5_Chunk * Global_BMP_Name_Chunk::GetMD5Chunk(char const * bname) -{ - List<Chunk *> chlst; - parent->lookup_child("BMPMD5ID",chlst); - - for (LIF<Chunk *> i_chlst(&chlst); !i_chlst.done(); i_chlst.next()) - { - Bitmap_MD5_Chunk * md5c = (Bitmap_MD5_Chunk *)i_chlst(); - - if (!strcmp(md5c->bmpname,bname)) - if (!(md5c->rifname ? *md5c->rifname : 1) && !(md5c->shapename ? *md5c->shapename : 1)) - return md5c; - } - - return 0; -} - -void Global_BMP_Name_Chunk::CreateMD5Chunk(BMP_Name const & rcbmp, int const * md5id) -{ - new Bitmap_MD5_Chunk(parent,md5id,rcbmp); -} - -///////////////////////////////////// -// Bitmap_List_Store_Chunk -///////////////////////////////////// -RIF_IMPLEMENT_DYNCREATE("BMPLSTST",Bitmap_List_Store_Chunk) - -Bitmap_MD5_Chunk * Bitmap_List_Store_Chunk::GetMD5Chunk(char const * bname) -{ - List<Chunk *> chlst; - parent->lookup_child("BMPMD5ID",chlst); - - List<Chunk *> rnlst; - parent->lookup_child("RIFFNAME",rnlst); - char const * rname = 0; - if (rnlst.size()) - { - rname = ((RIF_Name_Chunk *)rnlst.first_entry())->rif_name; - } - - for (LIF<Chunk *> i_chlst(&chlst); !i_chlst.done(); i_chlst.next()) - { - Bitmap_MD5_Chunk * md5c = (Bitmap_MD5_Chunk *)i_chlst(); - - if (!strcmp(md5c->bmpname,bname)) - if (!(md5c->rifname ? rname ? strcmp(rname,md5c->rifname) : *md5c->rifname : rname ? *rname : 0) && - !(md5c->shapename ? *md5c->shapename : 1)) - return md5c; - } - - return 0; -} - -void Bitmap_List_Store_Chunk::CreateMD5Chunk(BMP_Name const & rcbmp, int const * md5id) -{ - List<Chunk *> rnlst; - parent->lookup_child("RIFFNAME",rnlst); - char const * rname = 0; - if (rnlst.size()) - { - rname = ((RIF_Name_Chunk *)rnlst.first_entry())->rif_name; - } - new Bitmap_MD5_Chunk(parent,md5id,rcbmp,rname); -} - - - -/////////////////////////////////////// - -// Class BMP_Names_Version_Chunk functions - -RIF_IMPLEMENT_DYNCREATE("BMNAMVER",BMP_Names_Version_Chunk) - - -size_t BMP_Names_Version_Chunk::size_chunk () -{ - chunk_size = 12+4; - - return (chunk_size); - -} - -void BMP_Names_Version_Chunk::fill_data_block (char * data_start) -{ - strncpy (data_start, identifier, 8); - - data_start += 8; - - *((int *) data_start) = chunk_size; - - data_start += 4; - - *((int *) data_start) = version_num; - -} - - - -/////////////////////////////////////// - -// Class BMP_Names_ExtraData_Chunk functions - -RIF_IMPLEMENT_DYNCREATE("BMNAMEXT",BMP_Names_ExtraData_Chunk) - - -size_t BMP_Names_ExtraData_Chunk::size_chunk () -{ - chunk_size = 12+52; - - return (chunk_size); - -} - -void BMP_Names_ExtraData_Chunk::fill_data_block (char * data_start) -{ - strncpy (data_start, identifier, 8); - data_start += 8; - - *((int *) data_start) = chunk_size; - data_start += 4; - - *((int *) data_start) = flags; - data_start += 4; - - for (int i=0; i<12; ++i, data_start+=4) - { - *(int *)data_start = reserved[i]; - } - -} - -/////////////////////////////////////// - -// Class External_Shape_BMPs_Store_Chunk functions -RIF_IMPLEMENT_DYNCREATE("SHBMPNAM",External_Shape_BMPs_Store_Chunk) - -External_Shape_BMPs_Store_Chunk::External_Shape_BMPs_Store_Chunk (Chunk_With_Children * parent, char const * rifn, char const * shapen) -: Chunk_With_BMPs (parent, "SHBMPNAM"), rifname(0), shapename(0), version_num(0) -{ - for (int i=0; i<12; ++i) - reserved[i] = 0; - - flags = GBF_NONE; - - if (rifn) - { - rifname = new char [strlen(rifn)+1]; - strcpy(rifname,rifn); - } - if (shapen) - { - shapename = new char [strlen(shapen)+1]; - strcpy(shapename,shapen); - } -} - -External_Shape_BMPs_Store_Chunk::~External_Shape_BMPs_Store_Chunk() -{ - if (rifname) delete[] rifname; - if (shapename) delete[] shapename; -} - -void External_Shape_BMPs_Store_Chunk::fill_data_block(char * data_start) -{ - Chunk_With_BMPs::fill_data_block(data_start); - data_start += Chunk_With_BMPs::size_chunk(); - size_chunk(); // resize it just in case - - strcpy(data_start,rifname ? rifname : ""); - unsigned int const l1 = rifname ? strlen(rifname)+1 : 1; - - strcpy(data_start+l1,shapename ? shapename : ""); - unsigned int const l2 = shapename ? strlen(shapename)+1 : 1; - - data_start += l1+l2 +3&~3; - - *(int *)data_start = flags; - data_start+=4; - - *(int *)data_start = version_num; - data_start+=4; - - for (int i=0; i<12; ++i, data_start+=4) - *(int *)data_start = reserved[i]; -} - -External_Shape_BMPs_Store_Chunk::External_Shape_BMPs_Store_Chunk (Chunk_With_Children * parent, const char * sdata, size_t ssize) -: Chunk_With_BMPs (parent, "SHBMPNAM", sdata, ssize) -{ - sdata += Chunk_With_BMPs::size_chunk() -12; - unsigned int const l1 = strlen(sdata)+1; - rifname = new char [l1]; - strcpy(rifname,sdata); - unsigned int const l2 = strlen(sdata+l1)+1; - shapename = new char [l2]; - strcpy(shapename,sdata+l1); - - sdata += l1+l2 +3&~3; - - flags = (GlobalBMPFlags)(*(int *)sdata & GBF_MASK); - sdata+=4; - - version_num = *(int *)sdata; - sdata+=4; - - for (int i=0; i<12; ++i, sdata+=4) - reserved[i] = *(int *)sdata; -} - - -Bitmap_MD5_Chunk * External_Shape_BMPs_Store_Chunk::GetMD5Chunk(char const * bname) -{ - List<Chunk *> chlst; - parent->lookup_child("BMPMD5ID",chlst); - - for (LIF<Chunk *> i_chlst(&chlst); !i_chlst.done(); i_chlst.next()) - { - Bitmap_MD5_Chunk * md5c = (Bitmap_MD5_Chunk *)i_chlst(); - - if (!strcmp(md5c->bmpname,bname)) - if (!(md5c->rifname ? rifname ? strcmp(rifname,md5c->rifname) : *md5c->rifname : rifname ? *rifname : 0) && - !(md5c->shapename ? shapename ? strcmp(shapename,md5c->shapename) : *md5c->shapename : shapename ? *shapename : 0) && - (flags & GBF_SPRITE && md5c->flags & BMD5F_SPRITE || !(flags & GBF_SPRITE) && !(md5c->flags & BMD5F_SPRITE))) - - return md5c; - } - - return 0; -} - -void External_Shape_BMPs_Store_Chunk::CreateMD5Chunk(BMP_Name const & rcbmp, int const * md5id) -{ - Bitmap_MD5_Chunk * md5c = new Bitmap_MD5_Chunk(parent,md5id,rcbmp,rifname,shapename); - md5c->flags = flags & GBF_SPRITE ? BMD5F_SPRITE : BMD5F_0; -} - - -/*************************/ -/* matching images stuff */ -/*************************/ - -// class ImageDescriptor -// --------------------- -ImageDescriptor::ImageDescriptor() -: filename(0) -, rifname(0) -, fixrifname(0) -{ -} - -ImageDescriptor::ImageDescriptor(ImageDescriptor const & id2) -: flags(id2.flags) -, filename(0) -, rifname(0) -, fixrifname(0) -{ - spares[0] = id2.spares[0]; - spares[1] = id2.spares[1]; - spares[2] = id2.spares[2]; - - if (id2.filename) - { - filename = new char [strlen(id2.filename)+1]; - strcpy(filename,id2.filename); - } - if (id2.rifname) - { - rifname = new char [strlen(id2.rifname)+1]; - strcpy(rifname,id2.rifname); - } - if (id2.fixrifname) - { - fixrifname = new char [strlen(id2.fixrifname)+1]; - strcpy(fixrifname,id2.fixrifname); - } -} - -ImageDescriptor::ImageDescriptor(IDscFlags idscf, char const * fname, char const * rname, char const * xname) -: flags(idscf) -, filename(0) -, rifname(0) -, fixrifname(0) -{ - spares[0] = 0; - spares[1] = 0; - spares[2] = 0; - - if (fname) - { - filename = new char [strlen(fname)+1]; - strcpy(filename,fname); - } - if (rname) - { - rifname = new char [strlen(rname)+1]; - strcpy(rifname,rname); - } - if (xname) - { - fixrifname = new char [strlen(xname)+1]; - strcpy(fixrifname,xname); - } -} - -ImageDescriptor::~ImageDescriptor() -{ - if (filename) delete[] filename; - if (rifname) delete[] rifname; - if (fixrifname) delete[] fixrifname; -} - -ImageDescriptor & ImageDescriptor::operator = (ImageDescriptor const & id2) -{ - if (&id2 != this) - { - flags = id2.flags; - spares[0] = id2.spares[0]; - spares[1] = id2.spares[1]; - spares[2] = id2.spares[2]; - - if (filename) - { - delete[] filename; - filename = 0; - } - if (rifname) - { - delete[] rifname; - rifname = 0; - } - if (fixrifname) - { - delete[] fixrifname; - fixrifname = 0; - } - - if (id2.filename) - { - filename = new char [strlen(id2.filename)+1]; - strcpy(filename,id2.filename); - } - if (id2.rifname) - { - rifname = new char [strlen(id2.rifname)+1]; - strcpy(rifname,id2.rifname); - } - if (id2.fixrifname) - { - fixrifname = new char [strlen(id2.fixrifname)+1]; - strcpy(fixrifname,id2.fixrifname); - } - } - return *this; -} - - -// I/O -ImageDescriptor::ImageDescriptor(char const * datablock) -: flags((IDscFlags)(*(int const *)datablock & IDSCF_MASK)) -{ - spares[0] = *(int const *)(datablock+4); - spares[1] = *(int const *)(datablock+8); - spares[2] = *(int const *)(datablock+12); - datablock += 16; - - size_t len = strlen(datablock)+1; - filename = new char[len]; - strcpy(filename,datablock); - datablock += len; - - len = strlen(datablock)+1; - rifname = new char[len]; - strcpy(rifname,datablock); - datablock += len; - - len = strlen(datablock)+1; - fixrifname = new char[len]; - strcpy(fixrifname,datablock); -} - -size_t ImageDescriptor::Size() const -{ - return 16 - + (filename ? strlen(filename) : 0) - + (rifname ? strlen(rifname) : 0) - + (fixrifname ? strlen(fixrifname) : 0) - + 3 - +3&~3; -} - -void ImageDescriptor::WriteData(char * datablock) const -{ - *(int *)datablock = flags; - *(int *)(datablock+4) = spares[0]; - *(int *)(datablock+8) = spares[1]; - *(int *)(datablock+12) = spares[2]; - datablock+=16; - - strcpy(datablock,filename ? filename : ""); - datablock += strlen(datablock)+1; - - strcpy(datablock,rifname ? rifname : ""); - datablock += strlen(datablock)+1; - - strcpy(datablock,fixrifname ? fixrifname : ""); -} - -// operators -BOOL ImageDescriptor::operator == (ImageDescriptor const & id2) const -{ - if (flags!=id2.flags) return FALSE; - if (_stricmp(filename ? filename : "",id2.filename ? id2.filename : "")) return FALSE; - if (_stricmp(rifname ? rifname : "",id2.rifname ? id2.rifname : "")) return FALSE; - if (_stricmp(fixrifname ? fixrifname : "",id2.fixrifname ? id2.fixrifname : "")) return FALSE; - return TRUE; -} - -// class MatchingImages -// -------------------- - -// constructos; -MatchingImages::MatchingImages(ImageDescriptor const & _load, ImageDescriptor const & _insteadof) -: load(_load) -, insteadof(_insteadof) -{ - spares[0] = 0; - spares[1] = 0; - spares[2] = 0; -} - -// I/O -MatchingImages::MatchingImages(char const * datablock) -: load(datablock+12) -, insteadof(datablock+12+load.Size()) -{ - spares[0] = *(int const *)datablock; - spares[1] = *(int const *)(datablock+4); - spares[2] = *(int const *)(datablock+8); -} - -size_t MatchingImages::Size() const -{ - return 12 + load.Size() + insteadof.Size(); -} - -void MatchingImages::WriteData(char * datablock) const -{ - *(int *)datablock = spares[0]; - *(int *)(datablock+4) = spares[1]; - *(int *)(datablock+8) = spares[2]; - - load.WriteData(datablock+12); - insteadof.WriteData(datablock+12+load.Size()); -} - - -// class Matching_Images_Chunk : public Chunk -// ------------------------------------------ -RIF_IMPLEMENT_DYNCREATE("MATCHIMG",Matching_Images_Chunk) - -// I/O -Matching_Images_Chunk::Matching_Images_Chunk(Chunk_With_Children * parent, char const * datablock, size_t size) -: Chunk(parent,"MATCHIMG") -, flags ((MICFlags)(*(int *)(datablock+8) & MICF_MASK)) -{ - char const * datastart = datablock; - - spares[0] = *(int *)datablock; - spares[1] = *(int *)(datablock+4); - - int listsize = *(int *)(datablock+12); - datablock += 16; - - for (;listsize; --listsize) - { - mlist.add_entry_end(datablock); - datablock += mlist.last_entry().Size(); - } - - assert(datastart + size == datablock); -} - -size_t Matching_Images_Chunk::size_chunk() -{ - chunk_size = 28; // 2dw spares, 1dw flags, 1dw list size, 12b header - - for (LIF<MatchingImages> mlit(&mlist); !mlit.done(); mlit.next()) - { - chunk_size += mlit().Size(); - } - - return chunk_size; -} - -void Matching_Images_Chunk::fill_data_block(char * data_start) -{ - strncpy (data_start, identifier, 8); - data_start += 8; - *(int *) data_start = chunk_size; - data_start += 4; - - *(int *)data_start = spares[0]; - *(int *)(data_start+4) = spares[1]; - *(int *)(data_start+8) = flags; - - *(int *)(data_start+12) = mlist.size(); - - data_start += 16; - - for (LIF<MatchingImages> mlit(&mlist); !mlit.done(); mlit.next()) - { - mlit().WriteData(data_start); - data_start += mlit().Size(); - } -} - -ImageDescriptor const & Matching_Images_Chunk::GetLoadImage(ImageDescriptor const & _insteadof) -{ - for (LIF<MatchingImages> mlit(&mlist); !mlit.done(); mlit.next()) - { - if (_insteadof == mlit().insteadof) return mlit().load; - } - return _insteadof; -} - -// Bitmap MD5 Chunk -RIF_IMPLEMENT_DYNCREATE("BMPMD5ID",Bitmap_MD5_Chunk) - -Bitmap_MD5_Chunk::Bitmap_MD5_Chunk(Chunk_With_Children * parent, int const * md5id, BMP_Name const & rcbmp, char const * rname, char const * sname) -: Chunk(parent,"BMPMD5ID"), spare(0), flags(BMD5F_0), version_num(rcbmp.version_num) -{ - memcpy(md5_val,md5id,16); - - char const * bname = rcbmp.filename; - if (!bname) bname = ""; - bmpname = new char[strlen(bname)+1]; - strcpy(bmpname,bname); - - if (!rname) rname = ""; - rifname = new char[strlen(rname)+1]; - strcpy(rifname,rname); - - if (!sname) sname = ""; - shapename = new char[strlen(sname)+1]; - strcpy(shapename,sname); -} - -Bitmap_MD5_Chunk::Bitmap_MD5_Chunk(Chunk_With_Children * parent, char const * datablock, size_t) -: Chunk(parent,"BMPMD5ID"), spare(*(int *)datablock), flags((BMPMD5_Flags)(*(int *)(datablock+4) & BMD5F_MASK)), version_num(*(int *)(datablock+8)) -{ - memcpy(md5_val,datablock+12,16); - datablock += 28; - unsigned int const blen = strlen(datablock)+1; - bmpname = new char [blen]; - strcpy(bmpname,datablock); - datablock += blen; - unsigned int const rlen = strlen(datablock)+1; - rifname = new char [rlen]; - strcpy(rifname,datablock); - datablock += rlen; - unsigned int const slen = strlen(datablock)+1; - shapename = new char [slen]; - strcpy(shapename,datablock); -} - -Bitmap_MD5_Chunk::~Bitmap_MD5_Chunk() -{ - delete [] bmpname; - delete [] rifname; - delete [] shapename; -} - -void Bitmap_MD5_Chunk::fill_data_block(char * datastart) -{ - strncpy (datastart, identifier, 8); - datastart += 8; - *((int *) datastart) = chunk_size; - datastart += 4; - - *(int *)datastart = spare; - *(int *)(datastart+4) = flags; - *(int *)(datastart+8) = version_num; - memcpy(datastart+12,md5_val,16); - datastart += 28; - strcpy(datastart,bmpname ? bmpname : ""); - datastart += strlen(datastart)+1; - strcpy(datastart,rifname ? rifname : ""); - datastart += strlen(datastart)+1; - strcpy(datastart,shapename ? shapename : ""); -} - -size_t Bitmap_MD5_Chunk::size_chunk() -{ - return chunk_size = 12+28 - +(bmpname ? strlen(bmpname) : 0) - +(rifname ? strlen(rifname) : 0) - +(shapename ? strlen(shapename) : 0) - +3 +3&~3; -} - - - - |
