#ifndef __Desk_OSBuffer_h
#define __Desk_OSBuffer_h

typedef struct	{
	void*	id;
	void	(*serviceroutine)( void);
	void*	pw;
	}
	Desk_osbuffer_block;


Desk_osbuffer_block*	Desk_OSBuffer_Init( int bufferhandle);
/*
Calls Buffer_InternalInfo for the specified buffer handle, and returns a
suitably malloced and settup Desk_osbuffer_block.
 */

void	Desk_OSBuffer_Final( Desk_osbuffer_block* osbuffer);
/*
Frees osbuffer.
 */


int	Desk_OSBuffer_InsertByte( Desk_osbuffer_block* osbuffer, int byte);
/*
Returns non-zero if failed to insert (ie of C set by service routine).

PRMs 5a-216.
 */

int	Desk_OSBuffer_InsertBlock( Desk_osbuffer_block* osbuffer, void* data, int numbytes);
/*
Returns numbytes not inserted (ie r3 on return from service routine).

PRMs 5a-216.
 */

int	Desk_OSBuffer_RemoveByte( Desk_osbuffer_block* osbuffer);
/*
Returns byte removed, or -1 if failed.

PRMs 5a-217.
 */

int	Desk_OSBuffer_RemoveBlock( Desk_osbuffer_block* osbuffer, void* buffer, int numbytes);
/*
Returns number of bytes not removed (ie r3 on return from service routine).

PRMs 5a-217.
 */

int	Desk_OSBuffer_ExamineByte( Desk_osbuffer_block* osbuffer);
/*
Returns next byte to be removed, or -1 if failed.

PRMs 5a-218
 */

int	Desk_OSBuffer_ExamineBlock( Desk_osbuffer_block* osbuffer, void* buffer, int numbytes);
/*
Returns number of bytes not transferred.
 */

int	Desk_OSBuffer_ReturnUsedSpace( Desk_osbuffer_block* osbuffer);
/*
Returns number of bytes in the specified buffer.

PRMs 5a-219
 */

int	Desk_OSBuffer_ReturnFreeSpace( Desk_osbuffer_block* osbuffer);
/*
Returns number of fre bytes in the specified buffer.

PRMs 5a-219
 */


void	Desk_OSBuffer_PurgeBuffer( Desk_osbuffer_block* osbuffer);
/*
Purges all data in the specified buffer.

PRMs 5a-219
 */


void*	Desk_OSBuffer_NextFilledBlock( Desk_osbuffer_block* osbuffer, int* numbytes);
/*
On exit, returns r2 from the service routine. *numbytes contains r3 from
service routine.
 */


#endif
