src/object_writer.cxx

changeset 75
bf8c57437231
parent 74
007fbadfa7f9
child 76
c8058716070a
--- a/src/object_writer.cxx	Mon Jan 13 00:15:38 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,193 +0,0 @@
-/*
-	Copyright (c) 2013-2014, Santeri Piippo
-	All rights reserved.
-
-	Redistribution and use in source and binary forms, with or without
-	modification, are permitted provided that the following conditions are met:
-
-		* Redistributions of source code must retain the above copyright
-		  notice, this list of conditions and the following disclaimer.
-
-		* Redistributions in binary form must reproduce the above copyright
-		  notice, this list of conditions and the following disclaimer in the
-		  documentation and/or other materials provided with the distribution.
-
-		* Neither the name of the <organization> nor the
-		  names of its contributors may be used to endorse or promote products
-		  derived from this software without specific prior written permission.
-
-	THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-	ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-	WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-	DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
-	DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-	(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-	LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-	ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-	(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-	SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "main.h"
-#include "str.h"
-#include "object_writer.h"
-#include "data_buffer.h"
-#include "stringtable.h"
-#include "bots.h"
-
-extern bool g_GotMainLoop;
-
-object_writer::ObjectWriter (string path)
-{
-	MainBuffer = new data_buffer;
-	MainLoopBuffer = new data_buffer;
-	OnEnterBuffer = new data_buffer;
-	SwitchBuffer = null; // created on demand
-	numWrittenBytes = 0;
-	numWrittenReferences = 0;
-}
-
-void object_writer::write_string (string a)
-{
-	write (a.length());
-
-	for (int i = 0; i < a.length(); i++)
-		write (a[i]);
-}
-
-void object_writer::write_buffer (data_buffer* buf)
-{
-	get_current_buffer()->merge (buf);
-}
-
-void object_writer::write_member_buffers()
-{
-	// If there was no mainloop defined, write a dummy one now.
-	if (!g_GotMainLoop)
-	{
-		MainLoopBuffer->write (DH_MAINLOOP);
-		MainLoopBuffer->write (DH_ENDMAINLOOP);
-	}
-
-	// Write the onenter and mainloop buffers, IN THAT ORDER
-	for (int i = 0; i < 2; i++)
-	{
-		data_buffer** buf = (!i) ? &OnEnterBuffer : &MainLoopBuffer;
-		write_buffer (*buf);
-
-		// Clear the buffer afterwards for potential next state
-		*buf = new data_buffer;
-	}
-
-	// Next state definitely has no mainloop yet
-	g_GotMainLoop = false;
-}
-
-// Write string table
-void object_writer::write_string_table()
-{
-	int stringcount = num_strings_in_table();
-
-	if (!stringcount)
-		return;
-
-	// Write header
-	write (DH_STRINGLIST);
-	write (stringcount);
-
-	// Write all strings
-	for (int a = 0; a < stringcount; a++)
-		write_string (get_string_table() [a]);
-}
-
-// Write main buffer to file
-void object_writer::write_to_file (string filepath)
-{
-	fp = fopen (filepath, "w");
-	CHECK_FILE (fp, filepath, "writing");
-
-	// First, resolve references
-	numWrittenReferences = 0;
-
-	for (int u = 0; u < MAX_MARKS; u++)
-	{
-		ScriptMarkReference* ref = MainBuffer->refs[u];
-
-		if (!ref)
-			continue;
-
-		// Substitute the placeholder with the mark position
-		generic_union<word> uni;
-		uni.as_word = static_cast<word> (MainBuffer->marks[ref->num]->pos);
-
-		for (int v = 0; v < sizeof (word); v++)
-			memset (MainBuffer->buffer + ref->pos + v, uni.as_bytes[v], 1);
-
-		/*
-		printf ("reference %u at %d resolved to %u at %d\n",
-			u, ref->pos, ref->num, MainBuffer->marks[ref->num]->pos);
-		*/
-		numWrittenReferences++;
-	}
-
-	// Then, dump the main buffer to the file
-	for (int x = 0; x < MainBuffer->writesize; x++)
-		write_data_to_file<byte> (*(MainBuffer->buffer + x));
-
-	print ("-- %1 byte%s1 written to %2\n", numWrittenBytes, filepath);
-	fclose (fp);
-}
-
-data_buffer* object_writer::get_current_buffer()
-{
-	return	SwitchBuffer ? SwitchBuffer :
-			(g_CurMode == MODE_MAINLOOP) ? MainLoopBuffer :
-			(g_CurMode == MODE_ONENTER) ? OnEnterBuffer :
-			MainBuffer;
-}
-
-ScriptMark* g_ScriptMark = null;
-
-// Adds a mark
-int object_writer::add_mark (string name)
-{
-	return get_current_buffer()->add_mark (name);
-}
-
-// Adds a reference
-int object_writer::add_reference (int mark)
-{
-	data_buffer* b = get_current_buffer();
-	return b->add_reference (mark);
-}
-
-// Finds a mark
-int object_writer::find_byte_mark (string name)
-{
-	data_buffer* b = get_current_buffer();
-
-	for (int u = 0; u < MAX_MARKS; u++)
-	{
-		if (b->marks[u] && b->marks[u]->name.to_uppercase() == name.to_uppercase())
-			return u;
-	}
-
-	return MAX_MARKS;
-}
-
-// Moves a mark to the current position
-void object_writer::move_mark (int mark)
-{
-	get_current_buffer()->move_mark (mark);
-}
-
-// Deletes a mark
-void object_writer::delete_mark (int mark)
-{
-	get_current_buffer()->delete_mark (mark);
-}
-
-void object_writer::offset_mark (int mark, int offset)
-{
-	get_current_buffer()->offset_mark (mark, offset);
-}

mercurial