#include <string.h>

#include "swis.h"

#include "Desk.Error2.h"
#include "Desk.Debug.h"
#include "Desk.MsgTrans.h"


void	Desk_MessageTrans_OpenLookupCloseIntoBufferPos( 
		Desk_deskmem_buffer*	buffer,
		int			pos,
		const char*		filename,
		const char*		token,
		const char*		p0,
		const char*		p1,
		const char*		p2,
		const char*		p3
		)
	{
	Desk_msgtrans_filedesc*	mfile;
	
	/* Claim space in RMA for file descripter	*/
	Desk_Error2_CheckOS(
		_swix( OS_Module, _IN(0)|_IN(3)|_OUT(2), 6, 16, &mfile)
		);
	
	Desk_Debug4_Printf( Desk_error_PLACE "Desk_MessageTrans_OpenLookupCloseIntoBufferPos called, pos=%i, filename=%p='%s', token='%s'\n",
		pos, filename, filename, token
		);
	
	/*Desk_MessageTrans_OpenFile( mfile, (char*) filename, NULL);*/
	Desk_Error2_CheckOS(
		_swix( MessageTrans_OpenFile, _INR(0,2), mfile, filename, 0)
		);
	
	Desk_Error2_TryCatch(
		Desk_MessageTrans_LookupIntoBufferPos( buffer, pos, mfile, token, p0, p1, p2, p3);
		,
		Desk_MessageTrans_CloseFile( mfile);
		Desk_Error2_CheckOS(
			_swix( OS_Module, _IN(0)|_IN(2), 7, mfile)
			);
		Desk_Error2_ReThrow();
		)
	
	/*Desk_MessageTrans_CloseFile( mfile);*/
	Desk_Error2_CheckOS(
		_swix( MessageTrans_CloseFile, _IN(0), mfile)
		);
	Desk_Error2_CheckOS(
		_swix( OS_Module, _IN(0)|_IN(2), 7, mfile)
		);
	
	}



void	Desk_MessageTrans_OpenLookupCloseIntoBuffer( 
		Desk_deskmem_buffer*	buffer,
		const char*		filename,
		const char*		token,
		const char*		p0,
		const char*		p1,
		const char*		p2,
		const char*		p3
		)
	{
	Desk_MessageTrans_OpenLookupCloseIntoBufferPos( buffer, 0, filename, token, p0, p1, p2, p3);
	}



void	Desk_MessageTrans_OpenLookupCloseIntoBufferCat( 
		Desk_deskmem_buffer*	buffer,
		const char*		filename,
		const char*		token,
		const char*		p0,
		const char*		p1,
		const char*		p2,
		const char*		p3
		)
	{
	Desk_MessageTrans_OpenLookupCloseIntoBufferPos( buffer, strlen( Desk_DeskMem_BufferGetString( buffer)), filename, token, p0, p1, p2, p3);
	}
