mud++0.35/etc/
mud++0.35/etc/guilds/
mud++0.35/help/propert/
mud++0.35/mudC/
mud++0.35/player/
mud++0.35/src/interface/
mud++0.35/src/os/cygwin32/
mud++0.35/src/os/win32/
mud++0.35/src/os/win32/bcppbuilder/
mud++0.35/src/osaddon/
mud++0.35/src/util/
/*
....[@@@..[@@@..............[@.................. MUD++ is a written from
....[@..[@..[@..[@..[@..[@@@@@....[@......[@.... scratch multi-user swords and
....[@..[@..[@..[@..[@..[@..[@..[@@@@@..[@@@@@.. sorcery game written in C++.
....[@......[@..[@..[@..[@..[@....[@......[@.... This server is an ongoing
....[@......[@..[@@@@@..[@@@@@.................. development project.  All 
................................................ contributions are welcome. 
....Copyright(C).1995.Melvin.Smith.............. Enjoy. 
------------------------------------------------------------------------------
Melvin Smith (aka Fusion)         msmith@hom.net
MUD++ development mailing list    mudpp@van.ml.org
------------------------------------------------------------------------------
asmobjfile.h
*/

#ifndef _ASMOBJFILE_H
#define _ASMOBJFILE_H

#include "streamable.h"
#include "memoryblock.h"
#include "array.h"
#include "io.h"
#include "vmtypes.h"

#define ASMOBJ_MAGIC "mo++"

typedef struct
{
	char	magic[4];
	int 	code_length;
	int 	consts_length;
} asmobjheader;

typedef struct
{
	vmtype	type;
	int 	offset;
} asmobjconst;

typedef struct
{
	int start;
	int end;
	int name;
} vmfilefun;



class AsmObjFile : public MemoryCellBlock
{

	public:
		Array< asmobjconst > constants_def;
		Array< int >	relocation_table;
		ConstantsBlock constants;

		AsmObjFile()
		{ 
			enlargeMemBlock(32000);
			constants.allocMemBlock( 100 );
		}

		virtual ~AsmObjFile()
		{
		}

		virtual int readFrom( StaticInput & );
		virtual int writeTo( Output & ) const;

		int addConstant( vmtype type, const void * src_ptr, int size);
		void addRelocation( int offset ) { relocation_table.add(offset); }
		void addRelocation() { addRelocation(getUsedSize()); }
		int numberOfConstants() { return constants_def.length(); }
		int importLookup( vmtype, const char * );

		bool canLink( AsmObjFile & );
		void link( AsmObjFile & );
};

#endif