summaryrefslogtreecommitdiff
path: root/src/win95/dummyobjectchunk.cpp
diff options
context:
space:
mode:
authorSteven Fuller <relnev@icculus.org>2001-07-01 00:55:22 +0000
committerPatryk Obara <dreamer.tan@gmail.com>2019-08-20 02:09:04 +0200
commit2186d5f3f95cd74a070a490d899291648d58667a (patch)
tree55241a1afa3e1a22e0b6593a8dead0b703800f44 /src/win95/dummyobjectchunk.cpp
parent218ca90543758a20ac326e444ca0643174ca7384 (diff)
Initial revision
Diffstat (limited to 'src/win95/dummyobjectchunk.cpp')
-rw-r--r--src/win95/dummyobjectchunk.cpp181
1 files changed, 181 insertions, 0 deletions
diff --git a/src/win95/dummyobjectchunk.cpp b/src/win95/dummyobjectchunk.cpp
new file mode 100644
index 0000000..7fa86c9
--- /dev/null
+++ b/src/win95/dummyobjectchunk.cpp
@@ -0,0 +1,181 @@
+#include "DummyObjectChunk.hpp"
+
+#ifdef cencon
+#define new my_new
+#endif
+
+//macro for helping to force inclusion of chunks when using libraries
+FORCE_CHUNK_INCLUDE_IMPLEMENT(dummyobjectchunk)
+
+
+RIF_IMPLEMENT_DYNCREATE("DUMMYOBJ",Dummy_Object_Chunk)
+
+CHUNK_WITH_CHILDREN_LOADER("DUMMYOBJ",Dummy_Object_Chunk)
+/*
+Children for Dummy_Object_Chunk :
+
+"DUMOBJDT" Dummy_Object_Data_Chunk
+"DUMOBJTX" Dummy_Object_Text_Chunk
+*/
+
+
+
+Dummy_Object_Chunk::Dummy_Object_Chunk(Chunk_With_Children* parent,const char* _name,ChunkVectorInt& _location,ChunkVectorInt& min ,ChunkVectorInt& max ,ChunkQuat& orient)
+:Chunk_With_Children(parent,"DUMMYOBJ")
+{
+ new Dummy_Object_Data_Chunk(this,_name,_location,min,max,orient);
+}
+
+Dummy_Object_Data_Chunk* Dummy_Object_Chunk::get_data_chunk()
+{
+ return (Dummy_Object_Data_Chunk*) lookup_single_child("DUMOBJDT");
+}
+
+
+const char* Dummy_Object_Chunk::get_text()
+{
+ //find the text
+ Dummy_Object_Text_Chunk* text_chunk = (Dummy_Object_Text_Chunk*) lookup_single_child("DUMOBJTX");
+ if(!text_chunk)
+ {
+ //no text
+ return NULL;
+ }
+
+ return text_chunk->get_text();
+}
+
+void Dummy_Object_Chunk::set_text(const char* text)
+{
+ //find the text chunk
+ Dummy_Object_Text_Chunk* text_chunk = (Dummy_Object_Text_Chunk*) lookup_single_child("DUMOBJTX");
+
+ if(!text || strlen(text)==0)
+ {
+ //delete the text chunk if it exists
+ delete text_chunk;
+ }
+ else
+ {
+ if(text_chunk)
+ {
+ //alter the existing text
+ text_chunk->set_text(text);
+ }
+ else
+ {
+ //create a new text chunk
+ new Dummy_Object_Text_Chunk(this,text);
+ }
+ }
+}
+
+
+//////////////////////////////Dummy_Object_Data_Chunk////////////////////////////////
+
+RIF_IMPLEMENT_DYNCREATE("DUMOBJDT",Dummy_Object_Data_Chunk)
+
+Dummy_Object_Data_Chunk::Dummy_Object_Data_Chunk(Dummy_Object_Chunk* parent,const char* _name ,ChunkVectorInt& _location,ChunkVectorInt& min ,ChunkVectorInt& max ,ChunkQuat& orient)
+:Chunk(parent,"DUMOBJDT")
+{
+ location=_location;
+ min_extents=min;
+ max_extents=max;
+ orientation=orient;
+
+ name=new char[strlen(_name)+1];
+ strcpy(name,_name);
+}
+
+
+Dummy_Object_Data_Chunk::Dummy_Object_Data_Chunk(Chunk_With_Children* parent,const char* data,size_t)
+:Chunk(parent,"DUMOBJDT")
+{
+ CHUNK_EXTRACT(location,ChunkVectorInt)
+ CHUNK_EXTRACT(min_extents,ChunkVectorInt)
+ CHUNK_EXTRACT(max_extents,ChunkVectorInt)
+ CHUNK_EXTRACT(orientation,ChunkQuat)
+ CHUNK_EXTRACT_STRING(name)
+}
+
+
+Dummy_Object_Data_Chunk::~Dummy_Object_Data_Chunk()
+{
+ if(name) delete [] name;
+}
+
+
+void Dummy_Object_Data_Chunk::fill_data_block(char* data)
+{
+ CHUNK_FILL_START
+
+ CHUNK_FILL(location,ChunkVectorInt)
+ CHUNK_FILL(min_extents,ChunkVectorInt)
+ CHUNK_FILL(max_extents,ChunkVectorInt)
+ CHUNK_FILL(orientation,ChunkQuat)
+ CHUNK_FILL_STRING(name)
+
+}
+
+
+size_t Dummy_Object_Data_Chunk::size_chunk()
+{
+ chunk_size=12+3*sizeof(ChunkVectorInt)+sizeof(ChunkQuat);
+ chunk_size+=(strlen(name)+4)&~3;
+ return chunk_size;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////////Dummy_Object_Text_Chunk////////////////////////////////
+
+RIF_IMPLEMENT_DYNCREATE("DUMOBJTX",Dummy_Object_Text_Chunk)
+
+Dummy_Object_Text_Chunk::Dummy_Object_Text_Chunk(Dummy_Object_Chunk* parent,const char* _text)
+:Chunk(parent,"DUMOBJTX"),text(NULL)
+{
+ set_text(_text);
+}
+
+Dummy_Object_Text_Chunk::Dummy_Object_Text_Chunk(Chunk_With_Children* parent,const char* data,size_t)
+:Chunk(parent,"DUMOBJTX")
+{
+ CHUNK_EXTRACT_STRING(text)
+}
+
+
+Dummy_Object_Text_Chunk::~Dummy_Object_Text_Chunk()
+{
+ delete [] text;
+}
+
+void Dummy_Object_Text_Chunk::fill_data_block(char* data)
+{
+ CHUNK_FILL_START
+
+ CHUNK_FILL_STRING(text)
+}
+
+void Dummy_Object_Text_Chunk::set_text(const char* _text)
+{
+ char* new_text = NULL;
+ if(_text)
+ {
+ new_text = new char[strlen(_text)+1];
+ strcpy(new_text,_text);
+ }
+
+ delete [] text;
+ text = new_text;
+
+}
+
+
+size_t Dummy_Object_Text_Chunk::size_chunk()
+{
+ chunk_size=12;
+ if(text)
+ chunk_size+=(strlen(text)+4)&~3;
+ else
+ chunk_size+=4;
+ return chunk_size;
+}