Beispiel #1
0
Environment_Game_Mode_Chunk::Environment_Game_Mode_Chunk(Chunk_With_Children* const parent,const char* data,size_t const size)
:Chunk_With_Children(parent,"GAMEMODE") , envd_parent((Environment_Data_Chunk *)parent)
{
	const char * buffer_ptr = data;
	while ((data-buffer_ptr)< (signed) size) {
		if ((*(int *)(data + 8)) + (data-buffer_ptr) > (signed) size) {
			Parent_File->error_code = CHUNK_FAILED_ON_LOAD_NOT_RECOGNISED;
			break;
		}
		
		DynCreate(data);
		data += *(int *)(data + 8);
	}
}
Beispiel #2
0
PRIVATE void PutApplicationOnHold (SUIT_object o)
{
    DynArray objectList = DynCreate(sizeof (SUIT_object), 1);
    static boolean firsttime = TRUE;

    DynAdd (objectList, (void *) &o);
    if (firsttime) {
	DialogStack = DynCreate(sizeof(SUIT_object), 1);
	firsttime = FALSE;
    }
    DynAdd (DialogStack, (void *) &o);

    if (SUIT_getBoolean (o, GRAB_RETURN_KEY))
	SUIT_registerTrapper (GrabReturn);

    while (!SUIT_getBoolean (o, FINISHED))
	SUIT_limitedCheckAndProcessInput(INDEFINITE, objectList);

    if (SUIT_getBoolean (o, GRAB_RETURN_KEY))
	SUIT_unregisterTrapper ();
    SUIT_performRedisplay();
    DynDelete (DialogStack, DynHigh(DialogStack));
    DynDestroy (objectList);
}
Beispiel #3
0
// from buffer
Object_Interface_Data_Chunk::Object_Interface_Data_Chunk(Chunk_With_Children * parent, const char *data, size_t size)
: Chunk_With_Children (parent, "OBINTDT")
{
	const char * buffer_ptr = data;

	while ((data-buffer_ptr)< (signed) size) {

		if ((*(int *)(data + 8)) + (data-buffer_ptr) > (signed) size) {
			Parent_File->error_code = CHUNK_FAILED_ON_LOAD_NOT_RECOGNISED;
			break;
		}

		DynCreate(data);
		data += *(int *)(data + 8);
	}
}
Beispiel #4
0
Object_Module_Data_Chunk::Object_Module_Data_Chunk (Chunk_With_Children * parent,const char * mdata, size_t msize)
: Chunk_With_Children (parent, "MODULEDT")
{
	const char * buffer_ptr = mdata;

	while ((mdata-buffer_ptr)< (signed) msize) {

		if ((*(int *)(mdata + 8)) + (mdata-buffer_ptr) > (signed) msize) {
			Parent_File->error_code = CHUNK_FAILED_ON_LOAD_NOT_RECOGNISED;
			break;
		}
		DynCreate(mdata);
		mdata += *(int *)(mdata + 8);

	}
	
}
Beispiel #5
0
	Chunk * Chunk::Load(ID idParent, Archive * pArchv, ID idChunk, bool bKnown)
	{
		if (!idChunk)
			pArchv->Transfer(idChunk);
		
		Chunk * pChunk = bKnown ? DynCreate(idParent, idChunk) : new MiscChunk(idChunk);
		
		UINT32 nSize;
		pArchv->Transfer(nSize);
		
		Archive * pSubArchv = pArchv->OpenSubArchive(nSize);
		pChunk->Serialize(pSubArchv);
		pArchv->CloseSubArchive(pSubArchv);
		
		BYTE z = 0;
		if (nSize & 1) pArchv->Transfer(z);

		return pChunk;
	}
Beispiel #6
0
// from buffer
Object_Chunk::Object_Chunk(Chunk_With_Children * parent, const char *data, size_t size)
: Lockable_Chunk_With_Children (parent, "RBOBJECT"),
 object_data ()
{
	const char * buffer_ptr = data;

	object_data_store = (ChunkObject *) &object_data;
	
	while ((data-buffer_ptr)< (signed) size) {

		if ((*(int *)(data + 8)) + (data-buffer_ptr) > (signed) size) {
			Parent_File->error_code = CHUNK_FAILED_ON_LOAD_NOT_RECOGNISED;
			break;
		}

		DynCreate(data);
		data += *(int *)(data + 8);

	}

	program_object_index=-1;

}
Beispiel #7
0
Sprite_Header_Chunk::Sprite_Header_Chunk(const char * file_name, Chunk_With_Children * parent)
: Chunk_With_Children(parent,"SPRIHEAD")
{
// Load in whole chunk and traverse
	FILE *rif_file;
	DWORD file_size;
	DWORD file_size_from_file;
	char * buffer;
	char * buffer_ptr;
	char id_buffer[9];

	Parent_File = this;

	error_code = 0;


	rif_file = OpenGameFile(file_name, FILEMODE_READONLY, FILETYPE_PERM);	
	if (rif_file == NULL) {
		return;
	}

	fseek(rif_file, 0, SEEK_END);
	file_size = ftell(rif_file);
	rewind(rif_file);
	
	if (fread(id_buffer, 1, 8, rif_file) != 8) {
		error_code = CHUNK_FAILED_ON_LOAD;
		fclose(rif_file);
		return;
	}	

	if (strncmp(id_buffer, "SPRIHEAD", 8) != 0) {
		error_code = CHUNK_FAILED_ON_LOAD_NOT_RECOGNISED;
		fclose(rif_file);
		return;
	}	

	if (fread(&file_size_from_file, 1, 4, rif_file) != 4) {
		error_code = CHUNK_FAILED_ON_LOAD;
		fclose(rif_file);
		return;
	}	

	if (file_size != file_size_from_file) {
		error_code = CHUNK_FAILED_ON_LOAD_NOT_RECOGNISED;
		fclose(rif_file);
		return;
	}	

	buffer = new char [file_size];

	if (fread(buffer, 1, (file_size-12), rif_file) != (file_size-12)) {
		error_code = CHUNK_FAILED_ON_LOAD;
		delete [] buffer;
		
		fclose(rif_file);
		return;
	}

	fclose(rif_file);
	
	// Process the file

	buffer_ptr = buffer;

	
	// The start of the first chunk

	while ((buffer_ptr-buffer)< ((signed) file_size-12) && !error_code) {
		if ((*(int *)(buffer_ptr + 8)) + (buffer_ptr-buffer) > ((signed) file_size-12)) {
			error_code = CHUNK_FAILED_ON_LOAD_NOT_RECOGNISED;
			break;
		}

		DynCreate(buffer_ptr);
		buffer_ptr += *(int *)(buffer_ptr + 8);
	}

	delete [] buffer;
}