From 0ccf7d8383aa60f05134185329700ec8e38143db Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 7 Nov 2008 15:01:15 +0000 Subject: [PATCH] Converted tabs to four spaces --- src/osgPlugins/txp/trpage_rarchive.cpp | 374 ++++++++++++------------ src/osgPlugins/txp/trpage_readbuf.cpp | 280 +++++++++--------- src/osgPlugins/txp/trpage_warchive.cpp | 60 ++-- src/osgPlugins/txp/trpage_writebuf.cpp | 386 ++++++++++++------------- 4 files changed, 550 insertions(+), 550 deletions(-) diff --git a/src/osgPlugins/txp/trpage_rarchive.cpp b/src/osgPlugins/txp/trpage_rarchive.cpp index 2d2b2e719..b607e5749 100644 --- a/src/osgPlugins/txp/trpage_rarchive.cpp +++ b/src/osgPlugins/txp/trpage_rarchive.cpp @@ -38,10 +38,10 @@ trpgr_Archive::trpgr_Archive() trpgr_Archive::~trpgr_Archive() { if (fp) - fclose(fp); + fclose(fp); fp = NULL; if (tileCache) - delete tileCache; + delete tileCache; } int32 trpgr_Archive::GetHeaderData(char *dataPtr, int length, FILE *filehandle) @@ -65,30 +65,30 @@ bool trpgr_Archive::OpenFile(const char *name) CloseFile(); if (!(fp = fopen(file,"rb"))) - return false; + return false; // Look for a magic # and endianness int32 magic; if (fread(&magic,sizeof(int32),1,fp) != 1) - return false; + return false; headerRead = false; // Figure out the endianness from the magic number trpgEndian cpuNess = trpg_cpu_byte_order(); if (magic == GetMagicNumber()) { - ness = cpuNess; - return true; + ness = cpuNess; + return true; } if (trpg_byteswap_int(magic) == GetMagicNumber()) { - if (cpuNess == LittleEndian) - ness = BigEndian; - else - ness = LittleEndian; - return true; + if (cpuNess == LittleEndian) + ness = BigEndian; + else + ness = LittleEndian; + return true; } if (magic != GetMagicNumber()) - return false; + return false; // Not one of our files return false; @@ -106,7 +106,7 @@ trpgrImageHelper* trpgr_Archive::GetNewRImageHelper(trpgEndian ness,char *dir,co int majorVer,minorVer; GetHeader()->GetVersion(majorVer,minorVer); if((majorVer >= TRPG_NOMERGE_VERSION_MAJOR) && (minorVer>=TRPG_NOMERGE_VERSION_MINOR)) { - separateGeo = true; + separateGeo = true; } return new trpgrImageHelper(ness,dir,matTable,texTable,separateGeo); } @@ -116,10 +116,10 @@ trpgrImageHelper* trpgr_Archive::GetNewRImageHelper(trpgEndian ness,char *dir,co void trpgr_Archive::CloseFile() { if (fp) - fclose(fp); + fclose(fp); fp = NULL; if (tileCache) - delete tileCache; + delete tileCache; tileCache = NULL; } @@ -140,53 +140,53 @@ bool trpgr_Archive::ReadSubArchive(int row, int col, trpgEndian cpuNess) sprintf(blockpath,"%s%s%d%s%d%sarchive.txp",dir,PATHSEPERATOR,col,PATHSEPERATOR,row,PATHSEPERATOR); FILE *bfp = fopen(blockpath,"rb"); if(!bfp) { - return false; + return false; } // Look for a magic # and endianness int32 bmagic; if (fread(&bmagic,sizeof(int32),1,bfp) != 1) - return false; + return false; // The block archive will always be the same endianness as the master if ( (bmagic != GetMagicNumber()) && (trpg_byteswap_int(bmagic) != GetMagicNumber()) ) - return false; + return false; int32 bheaderSize=0; if (fread(&bheaderSize,sizeof(int32),1,bfp) != 1) - return false; + return false; if (ness != cpuNess) - bheaderSize = trpg_byteswap_int(bheaderSize); + bheaderSize = trpg_byteswap_int(bheaderSize); int bheadLen = bheaderSize; if (bheadLen < 0) - return false; + return false; // Read in the header whole trpgMemReadBuffer bbuf(ness); bbuf.SetLength(bheadLen); char *bdata = bbuf.GetDataPtr(); if ((ret = GetHeaderData(bdata,bheadLen,bfp)) != bheadLen) - return false; - //keep track of where this came from in the master table. + return false; + //keep track of where this came from in the master table. tileTable.SetCurrentBlock(row,col,true); texTable.SetCurrentBlock(row,col); bparser.AddCallback(TRPGHEADER,&blockHeader); bparser.AddCallback(TRPGMATTABLE,&materialTable); // Went back to oldest style for 2.0 //if(!headerHasTexTable) { - bparser.AddCallback(TRPGTEXTABLE2,&texTable); // Added for 2.0 + bparser.AddCallback(TRPGTEXTABLE2,&texTable); // Added for 2.0 //} bparser.AddCallback(TRPGMODELTABLE,&modelTable); - bparser.AddCallback(TRPGLIGHTTABLE,&lightTable); // Added for 2.0 - bparser.AddCallback(TRPGRANGETABLE,&rangeTable); // Added for 2.0 - bparser.AddCallback(TRPG_TEXT_STYLE_TABLE,&textStyleTable); // Added for 2.1 - bparser.AddCallback(TRPG_SUPPORT_STYLE_TABLE,&supportStyleTable); - bparser.AddCallback(TRPG_LABEL_PROPERTY_TABLE,&labelPropertyTable); + bparser.AddCallback(TRPGLIGHTTABLE,&lightTable); // Added for 2.0 + bparser.AddCallback(TRPGRANGETABLE,&rangeTable); // Added for 2.0 + bparser.AddCallback(TRPG_TEXT_STYLE_TABLE,&textStyleTable); // Added for 2.1 + bparser.AddCallback(TRPG_SUPPORT_STYLE_TABLE,&supportStyleTable); + bparser.AddCallback(TRPG_LABEL_PROPERTY_TABLE,&labelPropertyTable); // Don't read the tile table for v1.0 archives // It's only really used for 2.0 archives bparser.AddCallback(TRPGTILETABLE2,&tileTable); // Parse the buffer if (!bparser.Parse(bbuf)) - return false; + return false; //close the block archive fclose(bfp); @@ -207,7 +207,7 @@ bool trpgr_Archive::ReadHeader(bool readAllBlocks) int ret; if (!fp || headerRead) - return false; + return false; headerRead = true; @@ -215,19 +215,19 @@ bool trpgr_Archive::ReadHeader(bool readAllBlocks) trpgEndian cpuNess = trpg_cpu_byte_order(); int32 headerSize; if (fread(&headerSize,sizeof(int32),1,fp) != 1) - return false; + return false; if (ness != cpuNess) - headerSize = trpg_byteswap_int(headerSize); + headerSize = trpg_byteswap_int(headerSize); int headLen = headerSize; if (headLen < 0) - return false; + return false; // Read in the header whole trpgMemReadBuffer buf(ness); buf.SetLength(headLen); char *data = buf.GetDataPtr(); if ((ret = GetHeaderData(data,headLen,fp)) != headLen) - return false; + return false; // Set up a parser // Catch the tables we need for the archive @@ -238,52 +238,52 @@ bool trpgr_Archive::ReadHeader(bool readAllBlocks) parser.AddCallback(TRPGMATTABLE,&materialTable); // Went back to oldest style for 2.0 parser.AddCallback(TRPGMATTABLE2,&oldMatTable); // Added 11-14-98 (1.0 material table) parser.AddCallback(TRPGTEXTABLE,&oldTexTable); - parser.AddCallback(TRPGTEXTABLE2,&texTable); // Added for 2.0 + parser.AddCallback(TRPGTEXTABLE2,&texTable); // Added for 2.0 parser.AddCallback(TRPGMODELTABLE,&modelTable); - parser.AddCallback(TRPGLIGHTTABLE,&lightTable); // Added for 2.0 - parser.AddCallback(TRPGRANGETABLE,&rangeTable); // Added for 2.0 - parser.AddCallback(TRPG_TEXT_STYLE_TABLE,&textStyleTable); // Added for 2.1 - parser.AddCallback(TRPG_SUPPORT_STYLE_TABLE,&supportStyleTable); - parser.AddCallback(TRPG_LABEL_PROPERTY_TABLE,&labelPropertyTable); + parser.AddCallback(TRPGLIGHTTABLE,&lightTable); // Added for 2.0 + parser.AddCallback(TRPGRANGETABLE,&rangeTable); // Added for 2.0 + parser.AddCallback(TRPG_TEXT_STYLE_TABLE,&textStyleTable); // Added for 2.1 + parser.AddCallback(TRPG_SUPPORT_STYLE_TABLE,&supportStyleTable); + parser.AddCallback(TRPG_LABEL_PROPERTY_TABLE,&labelPropertyTable); // Don't read the tile table for v1.0 archives // It's only really used for 2.0 archives parser.AddCallback(TRPGTILETABLE2,&tileTable); // Parse the buffer if (!parser.Parse(buf)) - return false; + return false; if(header.GetIsMaster()) { - // bool firstBlock = true; - bool headerHasTexTable = false; - //if the master has textures, we want to use them instead of the tables in the - //block archives - int numTex = 0; - texTable.GetNumTextures(numTex); - if(numTex) - headerHasTexTable = true; - // int numTiles = 0; - //tileTable. - int totalrows,totalcols; - trpg2dPoint mhdr_swExtents; - trpg2dPoint mhdr_neExtents; - trpg3dPoint mhdr_Origin; - // integrate header information from the block header. - header.GetExtents(mhdr_swExtents,mhdr_neExtents); - header.GetOrigin(mhdr_Origin); - header.GetBlocks(totalrows,totalcols); - if(readAllBlocks) { - for(int row=0;row(lod) >= numLods) - return false; + return false; trpg2iPoint lodSize; header.GetLodSize(lod,lodSize); if (static_cast(x) >= lodSize.x || static_cast(y) >= lodSize.y) - return false; + return false; trpgTileTable::TileMode tileMode; tileTable.GetMode(tileMode); bool status = true; if (tileMode == trpgTileTable::External || tileMode == trpgTileTable::ExternalSaved) { - status = ReadExternalTile(x, y, lod, buf); - + status = ReadExternalTile(x, y, lod, buf); + } else { - // Local tile. Figure out where it is (which file) - int majorVersion, minorVersion; - header.GetVersion(majorVersion, minorVersion); - if(majorVersion == 2 && minorVersion >=1) - { - // Version 2.1 - // Tile table contains only lod 0 tiles - if(lod != 0) - status = false; - } + // Local tile. Figure out where it is (which file) + int majorVersion, minorVersion; + header.GetVersion(majorVersion, minorVersion); + if(majorVersion == 2 && minorVersion >=1) + { + // Version 2.1 + // Tile table contains only lod 0 tiles + if(lod != 0) + status = false; + } - if(status) - { - trpgwAppAddress addr; - float zmin,zmax; - status = tileTable.GetTile(x,y,lod,addr,zmin,zmax); + if(status) + { + trpgwAppAddress addr; + float zmin,zmax; + status = tileTable.GetTile(x,y,lod,addr,zmin,zmax); - if(status) - status = ReadTile(addr, buf); - } + if(status) + status = ReadTile(addr, buf); + } } return status; @@ -370,42 +370,42 @@ bool trpgr_Archive::ReadExternalTile(uint32 x,uint32 y,uint32 lod,trpgMemReadBuf int majorVer,minorVer; header.GetVersion(majorVer,minorVer); if((majorVer >= TRPG_NOMERGE_VERSION_MAJOR) && (minorVer >= TRPG_NOMERGE_VERSION_MINOR)) { - int blockx,blocky; - unsigned int denom = (1 << lod); // this should work up to lod 31 - blockx = x/denom; - blocky = y/denom; - sprintf(filename,"%s" PATHSEPERATOR "%d" PATHSEPERATOR "%d" PATHSEPERATOR "tile_%d_%d_%d.tpt", - dir,blockx,blocky,x,y,lod); + int blockx,blocky; + unsigned int denom = (1 << lod); // this should work up to lod 31 + blockx = x/denom; + blocky = y/denom; + sprintf(filename,"%s" PATHSEPERATOR "%d" PATHSEPERATOR "%d" PATHSEPERATOR "tile_%d_%d_%d.tpt", + dir,blockx,blocky,x,y,lod); } else { - sprintf(filename,"%s" PATHSEPERATOR "tile_%d_%d_%d.tpt",dir,x,y,lod); + sprintf(filename,"%s" PATHSEPERATOR "tile_%d_%d_%d.tpt",dir,x,y,lod); } // Open the file and read the contents FILE *fp= 0; try { - if (!(fp = fopen(filename,"rb"))) { + if (!(fp = fopen(filename,"rb"))) { - throw 1; - } - // Find the file end - if (fseek(fp,0,SEEK_END)) - throw 1; - // Note: This means tile is capped at 2 gigs - long pos = ftell(fp); - if (fseek(fp,0,SEEK_SET)) - throw 1; - // Now we know the size. Read the whole file - buf.SetLength(pos); - char *data = buf.GetDataPtr(); - if (fread(data,pos,1,fp) != 1) - throw 1; - fclose(fp); - fp = NULL; + throw 1; + } + // Find the file end + if (fseek(fp,0,SEEK_END)) + throw 1; + // Note: This means tile is capped at 2 gigs + long pos = ftell(fp); + if (fseek(fp,0,SEEK_SET)) + throw 1; + // Now we know the size. Read the whole file + buf.SetLength(pos); + char *data = buf.GetDataPtr(); + if (fread(data,pos,1,fp) != 1) + throw 1; + fclose(fp); + fp = NULL; } catch (...) { - if (fp) - fclose(fp); - return false; + if (fp) + fclose(fp); + return false; } return true; @@ -415,13 +415,13 @@ bool trpgr_Archive::ReadTile(const trpgwAppAddress& addr, trpgMemReadBuffer &buf // Fetch the appendable file from the cache trpgrAppFile *tf = tileCache->GetFile(ness,addr.file,addr.col,addr.row); if (!tf) - return false; + return false; // Fetch the tile if (!tf->Read(&buf,addr.offset)) - return false; + return false; else - return true; + return true; } // Get methods @@ -474,13 +474,13 @@ trpgEndian trpgr_Archive::GetEndian() const bool trpgr_Archive::trpgGetTileMBR(uint32 x,uint32 y,uint32 lod,trpg3dPoint &ll,trpg3dPoint &ur) const { if (!header.isValid()) - return false; + return false; int32 numLod; header.GetNumLods(numLod); trpg2iPoint maxXY; header.GetLodSize(lod,maxXY); if (static_cast(x) >= maxXY.x || static_cast(y)>= maxXY.y) - return false; + return false; trpg3dPoint origin; header.GetOrigin(origin); @@ -507,13 +507,13 @@ bool trpgr_Archive::trpgGetTileMBR(uint32 x,uint32 y,uint32 lod,trpg3dPoint &ll, */ trpgrImageHelper::trpgrImageHelper(trpgEndian inNess,char *inDir, - const trpgMatTable &inMatTable,const trpgTexTable &inTexTable,bool separateGeoTyp) + const trpgMatTable &inMatTable,const trpgTexTable &inTexTable,bool separateGeoTyp) { Init(inNess,inDir,inMatTable,inTexTable,separateGeoTyp); } void trpgrImageHelper::Init(trpgEndian inNess,char *inDir, - const trpgMatTable &inMatTable,const trpgTexTable &inTexTable,bool separateGeoTyp) + const trpgMatTable &inMatTable,const trpgTexTable &inTexTable,bool separateGeoTyp) { ness = inNess; strcpy(dir,inDir); @@ -527,24 +527,24 @@ void trpgrImageHelper::Init(trpgEndian inNess,char *inDir, sprintf(fullBase,"%s" PATHSEPERATOR "texFile",dir); texCache = GetNewRAppFileCache(fullBase,"txf"); if(separateGeoTyp) { - sprintf(fullBase,"%s" PATHSEPERATOR "geotypFile",dir); - geotypCache = GetNewRAppFileCache(fullBase,"txf"); + sprintf(fullBase,"%s" PATHSEPERATOR "geotypFile",dir); + geotypCache = GetNewRAppFileCache(fullBase,"txf"); } else { - geotypCache = texCache; + geotypCache = texCache; } - + } trpgrImageHelper::~trpgrImageHelper() { if (texCache) { - delete texCache; - texCache = NULL; + delete texCache; + texCache = NULL; } if(separateGeoTyp && geotypCache) { - delete geotypCache; - geotypCache = NULL; + delete geotypCache; + geotypCache = NULL; } } @@ -559,16 +559,16 @@ bool trpgrImageHelper::GetLocalGL(const trpgTexture *tex,char *data,int32 size) trpgTexture::ImageMode mode; tex->GetImageMode(mode); if (mode != trpgTexture::Local) - return false; + return false; // Fetch data data trpgwAppAddress addr; tex->GetImageAddr(addr); trpgrAppFile *af = geotypCache->GetFile(ness,addr.file,addr.col,addr.row); if (!af) - return false; + return false; if (!af->Read(data,addr.offset,0,size)) - return false; + return false; return true; } @@ -576,37 +576,37 @@ bool trpgrImageHelper::GetLocalGL(const trpgTexture *tex,char *data,int32 size) bool trpgrImageHelper::GetMipLevelLocalGL(int miplevel, const trpgTexture *tex,char *data,int32 dataSize) { if ( miplevel >= tex->CalcNumMipmaps() || miplevel < 0 ) - return false; + return false; // Make sure the texture is Local trpgTexture::ImageMode mode; tex->GetImageMode(mode); if (mode != trpgTexture::Local) - return false; + return false; // Fetch data data trpgwAppAddress addr; tex->GetImageAddr(addr); trpgrAppFile *af = texCache->GetFile(ness,addr.file,addr.col,addr.row); if (!af) - return false; + return false; int level_offset = (const_cast(tex))->MipLevelOffset(miplevel); if (!af->Read(data,addr.offset,level_offset,dataSize)) - return false; + return false; return true; } bool trpgrImageHelper::GetImageInfoForLocalMat(const trpgLocalMaterial *locMat, - const trpgMaterial **retMat,const trpgTexture **retTex,int &totSize) + const trpgMaterial **retMat,const trpgTexture **retTex,int &totSize) { return GetNthImageInfoForLocalMat(locMat, 0, retMat, retTex, totSize); } bool trpgrImageHelper::GetNthImageInfoForLocalMat(const trpgLocalMaterial *locMat, int index, - const trpgMaterial **retMat,const trpgTexture **retTex,int &totSize) + const trpgMaterial **retMat,const trpgTexture **retTex,int &totSize) { // Get the base material for the Local Material int32 matSubTable,matID; @@ -616,22 +616,22 @@ bool trpgrImageHelper::GetNthImageInfoForLocalMat(const trpgLocalMaterial *locMa // or overhaul this in some other fashion. int numTables; if (!matTable->GetNumTable(numTables)) - return false; + return false; if (index>=numTables) - return false; + return false; if (index>0) matSubTable=index; // otherwise, leave it alone - could be nonzero const trpgMaterial *mat = matTable->GetMaterialRef(matSubTable,matID); if (!mat) - return false; + return false; // Now get the texture (always the first one) trpgTextureEnv texEnv; int32 texID; if (!mat->GetTexture(0,texID,texEnv)) - return false; + return false; const trpgTexture *tex = texTable->GetTextureRef(texID); if (!tex) - return false; + return false; totSize = tex->CalcTotalSize(); @@ -648,13 +648,13 @@ bool trpgrImageHelper::GetImageForLocalMat(const trpgLocalMaterial *locMat,char bool trpgrImageHelper::GetNthImageForLocalMat(const trpgLocalMaterial *locMat,int index, char *data,int dataSize) { if (!locMat->isValid()) - return false; + return false; const trpgMaterial *mat; const trpgTexture *tex; int totSize; if (!GetNthImageInfoForLocalMat(locMat,index,&mat,&tex,totSize)) - return false; + return false; // Determine the type trpgTexture::ImageMode imageMode; @@ -662,23 +662,23 @@ bool trpgrImageHelper::GetNthImageForLocalMat(const trpgLocalMaterial *locMat,in switch (imageMode) { case trpgTexture::Template: { - // Read the image data out of the Local image (in an archive somewhere) - trpgwAppAddress addr; - if (!locMat->GetNthAddr(index,addr)) return false; - trpgrAppFile *af = texCache->GetFile(ness,addr.file,addr.col,addr.row); - if (!af) - return false; - if (!af->Read(data,addr.offset,0,dataSize)) - return false; + // Read the image data out of the Local image (in an archive somewhere) + trpgwAppAddress addr; + if (!locMat->GetNthAddr(index,addr)) return false; + trpgrAppFile *af = texCache->GetFile(ness,addr.file,addr.col,addr.row); + if (!af) + return false; + if (!af->Read(data,addr.offset,0,dataSize)) + return false; } break; case trpgTexture::Global: - // Note: Not dealing with Global textures yet - return false; - break; + // Note: Not dealing with Global textures yet + return false; + break; default: - // This is not a valid Local Material - return false; + // This is not a valid Local Material + return false; }; return true; @@ -698,10 +698,10 @@ bool trpgrImageHelper::GetNthImageMipLevelForLocalMat(int miplevel, const trpgLo const trpgTexture *tex; int totSize; if (!GetNthImageInfoForLocalMat(locMat,index,&mat,&tex,totSize)) - return false; + return false; if ( miplevel >= tex->CalcNumMipmaps() || miplevel < 0 ) - return false; + return false; // Determine the type trpgTexture::ImageMode imageMode; @@ -709,24 +709,24 @@ bool trpgrImageHelper::GetNthImageMipLevelForLocalMat(int miplevel, const trpgLo switch (imageMode) { case trpgTexture::Template: { - // Read the image data out of the Local image (in an archive somewhere) - trpgwAppAddress addr; - if (!locMat->GetNthAddr(index,addr)) return false; - trpgrAppFile *af = texCache->GetFile(ness,addr.file,addr.col,addr.row); - if (!af) return false; + // Read the image data out of the Local image (in an archive somewhere) + trpgwAppAddress addr; + if (!locMat->GetNthAddr(index,addr)) return false; + trpgrAppFile *af = texCache->GetFile(ness,addr.file,addr.col,addr.row); + if (!af) return false; - int level_offset = (const_cast(tex))->MipLevelOffset(miplevel); - if (!af->Read(data,addr.offset,level_offset,dataSize)) - return false; + int level_offset = (const_cast(tex))->MipLevelOffset(miplevel); + if (!af->Read(data,addr.offset,level_offset,dataSize)) + return false; } break; case trpgTexture::Global: - // Note: Not dealing with Global textures yet - return false; - break; + // Note: Not dealing with Global textures yet + return false; + break; default: - // This is not a valid Local Material - return false; + // This is not a valid Local Material + return false; }; return true; @@ -740,7 +740,7 @@ bool trpgrImageHelper::GetImagePath(const trpgTexture *tex,char *fullPath,int pa nameLen = strlen(name); if (static_cast(strlen(dir)) + nameLen + 2 > pathLen) - return false; + return false; sprintf(fullPath,"%s" PATHSEPERATOR "%s",dir,name); diff --git a/src/osgPlugins/txp/trpage_readbuf.cpp b/src/osgPlugins/txp/trpage_readbuf.cpp index b56f247fc..2a41e9677 100644 --- a/src/osgPlugins/txp/trpage_readbuf.cpp +++ b/src/osgPlugins/txp/trpage_readbuf.cpp @@ -18,15 +18,15 @@ #include /* trpage_readbuf.cpp - Methods for the trpgReadBuffer and trpgMemReadBuffer classes. - trpgReadBuffer is a virtual base class with a few utility functions. - It's used as generic interface for reading data out of. - trpgMemReadBuffer is a subclass of that which implements methods for - reading out of a chunk of memory. Data is read off of disk and then - dumped into a read buffer for parsing. - If you wanted to read directly from disk, for example, you could - implement a trpgDiskReadBuffer as a subclass of trpgReadBuffer. - */ + Methods for the trpgReadBuffer and trpgMemReadBuffer classes. + trpgReadBuffer is a virtual base class with a few utility functions. + It's used as generic interface for reading data out of. + trpgMemReadBuffer is a subclass of that which implements methods for + reading out of a chunk of memory. Data is read off of disk and then + dumped into a read buffer for parsing. + If you wanted to read directly from disk, for example, you could + implement a trpgDiskReadBuffer as a subclass of trpgReadBuffer. +*/ #include #include @@ -43,9 +43,9 @@ bool trpgReadBuffer::Get(int32 &ret) if (!GetData((char *)&val,sizeof(int32))) return false; if (ness != cpuNess) - ret = trpg_byteswap_int(val); + ret = trpg_byteswap_int(val); else - ret = val; + ret = val; return true; } @@ -54,11 +54,11 @@ bool trpgReadBuffer::Get(int64 &ret) int64 val; if (!GetData((char *)&val,sizeof(int64))) return false; - // trpg_byteswap_llong is defined to be 64 bit + // trpg_byteswap_llong is defined to be 64 bit if (ness != cpuNess) - ret = trpg_byteswap_llong(val); + ret = trpg_byteswap_llong(val); else - ret = val; + ret = val; return true; } @@ -87,7 +87,7 @@ bool trpgReadBuffer::Get(std::string &str) if (!Get(len)) return false; if (len < 0) - return false; + return false; // Note: Should fix this char *tmpStr = new char[len+1]; @@ -105,10 +105,10 @@ bool trpgReadBuffer::Get(float32 &ret) if (!GetData(cval,sizeof(float32))) return false; try { - if (ness == cpuNess) - memcpy(&ret,cval,4); - else - ret = trpg_byteswap_4bytes_to_float(cval); + if (ness == cpuNess) + memcpy(&ret,cval,4); + else + ret = trpg_byteswap_4bytes_to_float(cval); } catch (...) { } @@ -121,10 +121,10 @@ bool trpgReadBuffer::Get(float64 &ret) if (!GetData(cval,sizeof(float64))) return false; try { - if (ness == cpuNess) - memcpy(&ret,cval,8); - else - ret = trpg_byteswap_8bytes_to_double(cval); + if (ness == cpuNess) + memcpy(&ret,cval,8); + else + ret = trpg_byteswap_8bytes_to_double(cval); } catch (...) { } @@ -162,9 +162,9 @@ bool trpgReadBuffer::Get(trpgDiskRef &ret) if (!GetData((char *)&val,sizeof(trpgDiskRef))) return false; if (ness == cpuNess) - ret = val; + ret = val; else - ret = trpg_byteswap_llong(val); + ret = trpg_byteswap_llong(val); return true; } @@ -176,9 +176,9 @@ bool trpgReadBuffer::Get(trpgToken &ret) if (!GetData((char *)&val,sizeof(trpgToken))) return false; if (ness == cpuNess) - ret = val; + ret = val; else - ret = trpg_byteswap_short(val); + ret = trpg_byteswap_short(val); return true; } @@ -187,13 +187,13 @@ bool trpgReadBuffer::Get(trpgToken &ret) bool trpgReadBuffer::GetArray(int len,float32 **arr) { if (!GetDataRef((char **)arr,sizeof(float32)*len)) - return false; + return false; // Byteswap in place if necessary if (ness != cpuNess) { - char *ptr; - int pos; - for (pos=0,ptr = (char *)*arr;pos 0) - limits.resize(len-1); + limits.resize(len-1); } // Skip To Limit @@ -307,10 +307,10 @@ bool trpgReadBuffer::SkipToLimit() int len=0; if (limits.size() != 0) - len = limits[limits.size()-1]; + len = limits[limits.size()-1]; if (len > 0) - return Skip(len); + return Skip(len); return true; } @@ -320,8 +320,8 @@ bool trpgReadBuffer::SkipToLimit() bool trpgReadBuffer::TestLimit(int len) { for (unsigned int i=0;i limits[i]) - return false; + if (len > limits[i]) + return false; return true; } @@ -331,7 +331,7 @@ bool trpgReadBuffer::TestLimit(int len) void trpgReadBuffer::UpdateLimits(int len) { for (unsigned int i=0;i= len) - return true; + return true; // Also test the limits for (unsigned int i=0;i totLen) { - if (data) - delete [] data; - data = new char[newLen]; - totLen = newLen; + if (data) + delete [] data; + data = new char[newLen]; + totLen = newLen; } len = newLen; pos = 0; @@ -392,7 +392,7 @@ char *trpgMemReadBuffer::GetDataPtr() bool trpgMemReadBuffer::GetData(char *ret,int rlen) { if (rlen < 0) - return false; + return false; // Test against limits imposed from without if (!TestLimit(rlen)) throw 1; @@ -435,10 +435,10 @@ bool trpgMemReadBuffer::GetDataRef(char **ret,int rlen) bool trpgMemReadBuffer::Skip(int rlen) { if (rlen == 0) - return true; + return true; if (rlen < 0) - return false; + return false; // Test against limits if (!TestLimit(rlen)) return false; @@ -466,7 +466,7 @@ void trpgrAppFile::Init(trpgEndian inNess,const char *fileName) cpuNess = trpg_cpu_byte_order(); if (!(fp = fopen(fileName,"rb"))) - return; + return; valid = true; } @@ -474,7 +474,7 @@ void trpgrAppFile::Init(trpgEndian inNess,const char *fileName) trpgrAppFile::~trpgrAppFile() { if (fp) - fclose(fp); + fclose(fp); valid = false; } @@ -492,34 +492,34 @@ bool trpgrAppFile::Read(trpgMemReadBuffer *buf,int32 offset) // Seek to the right location if (fseek(fp,offset,SEEK_SET)) - return false; + return false; // Read a length int32 len; if (fread(&len,sizeof(int32),1,fp) != 1) { - valid = false; - return false; + valid = false; + return false; } // Byteswap if necessary if (ness != cpuNess) - len = trpg_byteswap_int(len); + len = trpg_byteswap_int(len); if (len < 0) { - valid = false; - return false; + valid = false; + return false; } buf->SetLength(len); char *data = buf->GetDataPtr(); if (!data) { - valid = false; - return false; + valid = false; + return false; } - if (fread(data,sizeof(char),len,fp) != (uint32)len) { - valid = false; - return false; + if (fread(data,sizeof(char),len,fp) != (uint32)len) { + valid = false; + return false; } return true; @@ -537,41 +537,41 @@ bool trpgrAppFile::Read(char *data,int32 baseOffset,int32 objOffset,int32 dataSi // Seek to the right place int result; if ((result = fseek(fp,baseOffset,SEEK_SET))) { - valid = false; - return false; + valid = false; + return false; } // Read the total object length int32 len; if (fread(&len,sizeof(int32),1,fp) != 1) { - valid = false; - return false; + valid = false; + return false; } // Byteswap if necessary if (ness != cpuNess) - len = trpg_byteswap_int(len); + len = trpg_byteswap_int(len); if (len < 0) { - valid = false; - return false; + valid = false; + return false; } // It's all right to read less than the whole data block if (objOffset+dataSize > len) - return false; + return false; // Skip to the object offset if (fseek(fp,objOffset,SEEK_CUR)) { - valid = false; - return false; + valid = false; + return false; } // Read the raw data // Note: What about byte swapping? - if (fread(data,sizeof(char),dataSize,fp) != (uint32)dataSize) { - valid = false; - return false; + if (fread(data,sizeof(char),dataSize,fp) != (uint32)dataSize) { + valid = false; + return false; } return true; @@ -601,10 +601,10 @@ trpgrAppFileCache::~trpgrAppFileCache() { unsigned int len = files.size(); for (unsigned int i=0;iisValid()) - { - of.lastUsed = timeCount; - return of.afile; - } - else - { - if (of.afile) - delete of.afile; - of.afile = NULL; - } + if (of.afile->isValid()) + { + of.lastUsed = timeCount; + return of.afile; + } + else + { + if (of.afile) + delete of.afile; + of.afile = NULL; + } } // Didn't find it. Need to reclaim one // Look for the oldest used int oldTime=-1,oldID=-1; for (i=0;i 0) { - if(baseName[len]==PATHSEPERATOR[0]) { - strcpy(filebase,&baseName[len+1]); - strcpy(dir,baseName); - dir[len]='\0'; - break; - } - } - sprintf(fileName,"%s" PATHSEPERATOR "%d" PATHSEPERATOR "%d" PATHSEPERATOR "%s_%d.%s", - dir,col,row,filebase,id,ext); + char dir[1024]; + char filebase[1024]; + //this is very ugly, but it avoids radical API changes + // find the last PATHSEPERATOR in the baseName string + int len = strlen(baseName); + while(--len > 0) { + if(baseName[len]==PATHSEPERATOR[0]) { + strcpy(filebase,&baseName[len+1]); + strcpy(dir,baseName); + dir[len]='\0'; + break; + } + } + sprintf(fileName,"%s" PATHSEPERATOR "%d" PATHSEPERATOR "%d" PATHSEPERATOR "%s_%d.%s", + dir,col,row,filebase,id,ext); } of.afile = GetNewRAppFile(ness,fileName); of.id = id; diff --git a/src/osgPlugins/txp/trpage_warchive.cpp b/src/osgPlugins/txp/trpage_warchive.cpp index 57ec5c7c5..8bf1aed15 100644 --- a/src/osgPlugins/txp/trpage_warchive.cpp +++ b/src/osgPlugins/txp/trpage_warchive.cpp @@ -534,7 +534,7 @@ bool trpgwArchive::CheckpointHeader() header.GetLodSize(i,lodSize); tileTable.SetNumTiles(lodSize.x,lodSize.y,i); } - + } firstHeaderWrite = false; } @@ -554,7 +554,7 @@ bool trpgwArchive::CheckpointHeader() } tf.tiles.clear(); - + } } @@ -607,8 +607,8 @@ bool trpgwArchive::CheckpointHeader() return false; } } - - + + if(!modelTable.Write(buf) ) { strcpy(errMess, "Error writing model table"); @@ -683,7 +683,7 @@ bool trpgwArchive::CheckpointHeader() } } } - break; + break; } // Write the disk header @@ -787,7 +787,7 @@ bool trpgwArchive::IncrementTileFile() bool trpgwArchive::DesignateTileFile(int id) { if (tileMode != TileLocal) - return false; + return false; // Close the current tile file if (tileFile) { @@ -800,7 +800,7 @@ bool trpgwArchive::DesignateTileFile(int id) sprintf(filename,"%s" PATHSEPERATOR "tileFile_%d.tpf",dir,id); tileFile = GetNewWAppFile(ness,filename); if (!tileFile->isValid()) - return false; + return false; // Add another TileFiles entry tileFiles.resize(tileFiles.size()+1); @@ -835,7 +835,7 @@ bool trpgwArchive::WriteTile(unsigned int x,unsigned int y,unsigned int lod, flo return false; // Write the header first - unsigned int len; + unsigned int len; const char *data; if (head) { data = head->getData(); @@ -1053,52 +1053,52 @@ void trpgwGeomHelper::EndPolygon() break; } - ResetPolygon(); + ResetPolygon(); } // Clean out the polygon arrays void trpgwGeomHelper::ResetPolygon() { - tmpTex.resize(0); - matPoly.resize(0); - polyTex.resize(0); - polyNorm.resize(0); - polyVert.resize(0); + tmpTex.resize(0); + matPoly.resize(0); + polyTex.resize(0); + polyNorm.resize(0); + polyVert.resize(0); } // Set the current color // Note: Required void trpgwGeomHelper::SetColor(trpgColor& /*col*/) { -// tmpColor = col; +// tmpColor = col; } // Set the current texture coord // Note: Required void trpgwGeomHelper::SetTexCoord(trpg2dPoint &pt) { - tmpTex.resize(0); - tmpTex.push_back(pt); + tmpTex.resize(0); + tmpTex.push_back(pt); } void trpgwGeomHelper::AddTexCoord(trpg2dPoint &pt) { - tmpTex.push_back(pt); + tmpTex.push_back(pt); } // Set the current normal // Note: required void trpgwGeomHelper::SetNormal(trpg3dPoint &pt) { - tmpNorm = pt; + tmpNorm = pt; } // Set the current material // Note: required void trpgwGeomHelper::SetMaterial(int32 imat) { - matPoly.resize(0); - matPoly.push_back(imat); + matPoly.resize(0); + matPoly.push_back(imat); } void trpgwGeomHelper::AddMaterial(int32 imat) @@ -1208,9 +1208,9 @@ void trpgwGeomHelper::FlushGeom() It will produce valid output, but not particularly optimized. */ #define ADDVERT(dest,vt) { \ - dest.AddVertex((trpgGeometry::DataType)dtype,vt.v); \ - dest.AddNormal((trpgGeometry::DataType)dtype,vt.n); \ - dest.AddTexCoord((trpgGeometry::DataType)dtype,vt.tex); \ + dest.AddVertex((trpgGeometry::DataType)dtype,vt.v); \ + dest.AddNormal((trpgGeometry::DataType)dtype,vt.n); \ + dest.AddTexCoord((trpgGeometry::DataType)dtype,vt.tex); \ } class optVert { public: @@ -1493,20 +1493,20 @@ trpgwAppFile * trpgwImageHelper::IncrementTextureFile(bool geotyp) { char filename[1024]; trpgwAppFile *thefile = texFile; - + if(geotyp && separateGeoTypical) { thefile = geotypFile; - sprintf(filename,"%s" PATHSEPERATOR "geotypFile_%d.txf",dir,static_cast(geotypFileIDs.size())); + sprintf(filename,"%s" PATHSEPERATOR "geotypFile_%d.txf",dir,static_cast(geotypFileIDs.size())); } else { - sprintf(filename,"%s" PATHSEPERATOR "texFile_%d.txf",dir,static_cast(texFileIDs.size())); + sprintf(filename,"%s" PATHSEPERATOR "texFile_%d.txf",dir,static_cast(texFileIDs.size())); } // Closes the current texture file if (thefile) delete thefile; thefile = NULL; - // Open the next one + // Open the next one thefile = GetNewWAppFile(ness,filename,true); if (!thefile->isValid()) return NULL; @@ -1555,7 +1555,7 @@ bool trpgwImageHelper::DesignateTextureFile(int id) return false; geotypFileIDs.push_back(id); - + return true; } @@ -1580,7 +1580,7 @@ bool trpgwImageHelper::WriteToArchive(const trpgTexture &tex,char *data,trpgwApp if (! (thefile=IncrementTextureFile(geotyp && separateGeoTypical))) return false; } - + while (maxTexFileLen > 0 && thefile->GetLengthWritten() > maxTexFileLen) { if (!(thefile=IncrementTextureFile(geotyp && separateGeoTypical))) return false; diff --git a/src/osgPlugins/txp/trpage_writebuf.cpp b/src/osgPlugins/txp/trpage_writebuf.cpp index 69c20c656..194e890fb 100644 --- a/src/osgPlugins/txp/trpage_writebuf.cpp +++ b/src/osgPlugins/txp/trpage_writebuf.cpp @@ -18,16 +18,16 @@ #include /* trpage_writebuf.cpp - This source file contains the implementation of trpgMemWriteBuffer. - That is a subclass of trpgWriteBuffer, which implements an interface - definition for an object which can accept data to be written. - The Mem version is used to write (for example) a tile's worth of data. - That data can then be written to a file (or sent over the network). - You should not need to change this implementation. Simply sublcass - trpgWriteBuffer and implement all of the required methods. The - resulting class can then be used in all the places a trpgWriteBuffer - is required. - */ + This source file contains the implementation of trpgMemWriteBuffer. + That is a subclass of trpgWriteBuffer, which implements an interface + definition for an object which can accept data to be written. + The Mem version is used to write (for example) a tile's worth of data. + That data can then be written to a file (or sent over the network). + You should not need to change this implementation. Simply sublcass + trpgWriteBuffer and implement all of the required methods. The + resulting class can then be used in all the places a trpgWriteBuffer + is required. + */ #include #include @@ -39,158 +39,158 @@ // Constructor trpgMemWriteBuffer::trpgMemWriteBuffer(trpgEndian in_ness) { - ness = in_ness; - cpuNess = trpg_cpu_byte_order(); - data = NULL; - curLen = totLen = 0; + ness = in_ness; + cpuNess = trpg_cpu_byte_order(); + data = NULL; + curLen = totLen = 0; } // Destructor trpgMemWriteBuffer::~trpgMemWriteBuffer() { - if (data) - delete [] data; - data = NULL; + if (data) + delete [] data; + data = NULL; } /* Length() - Return the length of the given buffer. - */ + Return the length of the given buffer. + */ int trpgMemWriteBuffer::length() const { - return curLen; + return curLen; } /* getData() - Return a pointer to the memory buffer. - */ + Return a pointer to the memory buffer. + */ const char *trpgMemWriteBuffer::getData() const { - return data; + return data; } /* Length() - Set the maximum buffer length. - */ + Set the maximum buffer length. + */ void trpgMemWriteBuffer::setLength(unsigned int len) { - if ((int)len > totLen) { - char *old_data = data; - int oldLen = totLen; - totLen = 2*len; - data = new char[totLen]; + if ((int)len > totLen) { + char *old_data = data; + int oldLen = totLen; + totLen = 2*len; + data = new char[totLen]; - if (old_data) { - memcpy(data,old_data,oldLen); - delete [] old_data; - } - } + if (old_data) { + memcpy(data,old_data,oldLen); + delete [] old_data; + } + } } /* append() - Append the given data to our buffer. - */ + Append the given data to our buffer. + */ void trpgMemWriteBuffer::append(unsigned int len,const char *val) { - if (len == 0) return; - setLength(curLen+len); - memcpy(&data[curLen],val,len); - curLen += len; + if (len == 0) return; + setLength(curLen+len); + memcpy(&data[curLen],val,len); + curLen += len; } /* set() - Set a specific portion of the buffer to a given value. - */ + Set a specific portion of the buffer to a given value. + */ void trpgMemWriteBuffer::set(unsigned int pos,unsigned int len,const char *val) { - if (len == 0) return; - if (pos+len > (unsigned int)curLen) return; + if (len == 0) return; + if (pos+len > (unsigned int)curLen) return; - memcpy(&data[pos],val,len); + memcpy(&data[pos],val,len); } /* --- replacement virtual functions --- */ /* Reset() - Drop whatever's being stored. - */ + Drop whatever's being stored. + */ void trpgMemWriteBuffer::Reset() { - curLen = 0; + curLen = 0; } // Add(Int32) void trpgMemWriteBuffer::Add(int32 val) { - if (ness != cpuNess) - val = trpg_byteswap_int(val); - append(sizeof(int32),(const char *)&val); + if (ness != cpuNess) + val = trpg_byteswap_int(val); + append(sizeof(int32),(const char *)&val); } // Add(int64) void trpgMemWriteBuffer::Add(int64 val) { - if (ness != cpuNess) - val = trpg_byteswap_llong(val); - append(sizeof(int64),(const char *)&val); + if (ness != cpuNess) + val = trpg_byteswap_llong(val); + append(sizeof(int64),(const char *)&val); } // Add(string) // [len] [value...] void trpgMemWriteBuffer::Add(const char *val) { - int32 len = (val ? strlen(val) : 0),vlen = len; - if (ness != cpuNess) - vlen = trpg_byteswap_int(vlen); - append(sizeof(int32),(const char *)&vlen); - append(len,val); + int32 len = (val ? strlen(val) : 0),vlen = len; + if (ness != cpuNess) + vlen = trpg_byteswap_int(vlen); + append(sizeof(int32),(const char *)&vlen); + append(len,val); } // Add(std::string) void trpgMemWriteBuffer::Add(std::string &val) { - Add(val.c_str()); + Add(val.c_str()); } // Add(float32) void trpgMemWriteBuffer::Add(float32 val) { - char cval[4]; - if (ness != cpuNess) - trpg_byteswap_float_to_4bytes(val,cval); - else - memcpy(cval,&val,4); + char cval[4]; + if (ness != cpuNess) + trpg_byteswap_float_to_4bytes(val,cval); + else + memcpy(cval,&val,4); - append(sizeof(float32),cval); + append(sizeof(float32),cval); } // Add(float64) void trpgMemWriteBuffer::Add(float64 val) { - char cval[8]; - if (ness != cpuNess) - trpg_byteswap_double_to_8bytes(val,cval); - else - memcpy(cval,&val,8); + char cval[8]; + if (ness != cpuNess) + trpg_byteswap_double_to_8bytes(val,cval); + else + memcpy(cval,&val,8); - append(sizeof(float64),cval); + append(sizeof(float64),cval); } // Add(int8) void trpgMemWriteBuffer::Add(uint8 val) { - // No byte swapping needed - append(sizeof(uint8),(const char *)&val); + // No byte swapping needed + append(sizeof(uint8),(const char *)&val); } //#if (bool != int32) // Add(bool) void trpgMemWriteBuffer::Add(bool val) { - uint8 ival; + uint8 ival; - ival = (val ? 1 : 0); - Add(ival); + ival = (val ? 1 : 0); + Add(ival); } //#endif @@ -198,83 +198,83 @@ void trpgMemWriteBuffer::Add(bool val) // Add(trpgDiskRef) void trpgMemWriteBuffer::Add(trpgDiskRef val) { - if (ness != cpuNess) - val = trpg_byteswap_llong(val); + if (ness != cpuNess) + val = trpg_byteswap_llong(val); - append(sizeof(trpgDiskRef),(const char *)&val); + append(sizeof(trpgDiskRef),(const char *)&val); } #endif // Add(trpgToken) void trpgMemWriteBuffer::Add(trpgToken val) { - if (ness != cpuNess) - val = trpg_byteswap_short(val); + if (ness != cpuNess) + val = trpg_byteswap_short(val); - append(sizeof(trpgToken),(const char *)&val); + append(sizeof(trpgToken),(const char *)&val); } // Add(tx2iPoint) void trpgWriteBuffer::Add(const trpg2iPoint &val) { - Add((int32)val.x); - Add((int32)val.y); + Add((int32)val.x); + Add((int32)val.y); } // Add(tx2dPoint) void trpgWriteBuffer::Add(const trpg2dPoint &val) { - Add((float64)val.x); - Add((float64)val.y); + Add((float64)val.x); + Add((float64)val.y); } // Add(trpg3dPoint) void trpgWriteBuffer::Add(const trpg3dPoint &val) { - Add((float64)val.x); - Add((float64)val.y); - Add((float64)val.z); + Add((float64)val.x); + Add((float64)val.y); + Add((float64)val.z); } // Add(trpgColor) void trpgWriteBuffer::Add(const trpgColor &val) { - Add(val.red); - Add(val.green); - Add(val.blue); + Add(val.red); + Add(val.green); + Add(val.blue); } // Add(std::string) void trpgWriteBuffer::Add(const std::string &val) { - Add(val.c_str()); + Add(val.c_str()); } /* Push() - Starts defining a new object. - Need to keep track of where length goes. - */ + Starts defining a new object. + Need to keep track of where length goes. + */ void trpgMemWriteBuffer::Begin(trpgToken tok) { - Add(tok); - lengths.push_back(curLen); - Add((int32)0); + Add(tok); + lengths.push_back(curLen); + Add((int32)0); } /* Push() - Pushes a level on the stack. For defining children. - */ + Pushes a level on the stack. For defining children. + */ void trpgMemWriteBuffer::Push() { - Add((trpgToken)TRPG_PUSH); + Add((trpgToken)TRPG_PUSH); } /* Pop() - Pops a level off the "stack". - */ + Pops a level off the "stack". + */ void trpgMemWriteBuffer::Pop() { - Add((trpgToken)TRPG_POP); + Add((trpgToken)TRPG_POP); } /* Will take out a pop from the end of the buffer, if there is one */ @@ -307,60 +307,60 @@ bool trpgMemWriteBuffer::UnPush() } /* End() - Finished defining an object. - Write the length out where appropriate. - */ + Finished defining an object. + Write the length out where appropriate. + */ void trpgMemWriteBuffer::End() { - if (lengths.size() == 0) - // Note: say something clever here - return; + if (lengths.size() == 0) + // Note: say something clever here + return; - int id = lengths.size()-1; - int32 len = curLen - lengths[id]; - int32 rlen = len-sizeof(int32); - if (ness != cpuNess) - rlen = trpg_byteswap_int(rlen); - set(curLen - len,sizeof(int32),(const char *)&rlen); - lengths.resize(id); + int id = lengths.size()-1; + int32 len = curLen - lengths[id]; + int32 rlen = len-sizeof(int32); + if (ness != cpuNess) + rlen = trpg_byteswap_int(rlen); + set(curLen - len,sizeof(int32),(const char *)&rlen); + lengths.resize(id); } /* Appendable File - This class is used as a simple appendable file. It's used - for dumping tile and texture (or most anything) into. + This class is used as a simple appendable file. It's used + for dumping tile and texture (or most anything) into. */ trpgwAppFile::trpgwAppFile(trpgEndian inNess,const char *fileName,bool reuse) { - Init(inNess,fileName,reuse); + Init(inNess,fileName,reuse); } void trpgwAppFile::Init(trpgEndian inNess,const char *fileName,bool reuse) { - valid = false; - ness = inNess; - cpuNess = trpg_cpu_byte_order(); + valid = false; + ness = inNess; + cpuNess = trpg_cpu_byte_order(); - if (reuse==false) { - if (!(fp = fopen(fileName,"wb"))) - return; - lengthSoFar = 0; - valid = true; - } else { - if (!(fp = fopen(fileName,"ab"))) - return; - // ftell is still zero, dammit. Arg. - fseek(fp,0,SEEK_END); - lengthSoFar = ftell(fp); - valid = true; - } + if (reuse==false) { + if (!(fp = fopen(fileName,"wb"))) + return; + lengthSoFar = 0; + valid = true; + } else { + if (!(fp = fopen(fileName,"ab"))) + return; + // ftell is still zero, dammit. Arg. + fseek(fp,0,SEEK_END); + lengthSoFar = ftell(fp); + valid = true; + } } trpgwAppFile::~trpgwAppFile() { - if (fp) - fclose(fp); - valid = false; + if (fp) + fclose(fp); + valid = false; } // Return the amount of data written so far (in total) @@ -372,87 +372,87 @@ int trpgwAppFile::GetLengthWritten() // Append the given buffer to our appendable file bool trpgwAppFile::Append(const trpgMemWriteBuffer *buf1,const trpgMemWriteBuffer *buf2) { - if (!isValid()) return false; + if (!isValid()) return false; - // Get the total length - int totLen = buf1->length() + (buf2 ? buf2->length() : 0); + // Get the total length + int totLen = buf1->length() + (buf2 ? buf2->length() : 0); - // Write the length out - if (fwrite(&totLen,sizeof(int32),1,fp) != 1) { - valid = false; - return false; - } + // Write the length out + if (fwrite(&totLen,sizeof(int32),1,fp) != 1) { + valid = false; + return false; + } - // Write the data out - const char *data = buf1->getData(); - unsigned int len = buf1->length(); - if (fwrite(data,sizeof(char),len,fp) != len) { - valid = false; - return false; - } - if (buf2) { - data = buf2->getData(); - len = buf2->length(); - if (fwrite(data,sizeof(char),len,fp) != len) { - valid = false; - return false; - } - } + // Write the data out + const char *data = buf1->getData(); + unsigned int len = buf1->length(); + if (fwrite(data,sizeof(char),len,fp) != len) { + valid = false; + return false; + } + if (buf2) { + data = buf2->getData(); + len = buf2->length(); + if (fwrite(data,sizeof(char),len,fp) != len) { + valid = false; + return false; + } + } - lengthSoFar += totLen; + lengthSoFar += totLen; - return true; + return true; } // Append the given raw data to our appendable file bool trpgwAppFile::Append(const char *data,int size) { - if (!isValid()) return false; + if (!isValid()) return false; - if (!data) - return false; + if (!data) + return false; - // Write the length out - if (fwrite(&size,sizeof(int32),1,fp) != 1) { - valid = false; - return false; - } + // Write the length out + if (fwrite(&size,sizeof(int32),1,fp) != 1) { + valid = false; + return false; + } - // Write the data out - if (fwrite(data,sizeof(char),size,fp) != (size_t)size) { - valid = false; - return false; - } + // Write the data out + if (fwrite(data,sizeof(char),size,fp) != (size_t)size) { + valid = false; + return false; + } - lengthSoFar += size; + lengthSoFar += size; - return true; + return true; } // Flushes the current tile file bool trpgwAppFile::Flush() { - // Flush the File * - if (fp) - fflush(fp); + // Flush the File * + if (fp) + fflush(fp); - return true; + return true; } // Return the current file position int64 trpgwAppFile::Pos() const { - if (!isValid()) - return 0; - - // Note: This means an appendable file is capped at 2GB - long pos = ftell(fp); + if (!isValid()) + return 0; + + // Note: This means an appendable file is capped at 2GB + long pos = ftell(fp); - return pos; + return pos; } // Validity check bool trpgwAppFile::isValid() const { - return valid; + return valid; }