/*
    ####             #    #     # #
    #   #            #    #       #          The FreeWare C library for 
    #   #  ##   ###  #  # #     # ###             RISC OS machines
    #   # #  # #     # #  #     # #  #   ___________________________________
    #   # ####  ###  ##   #     # #  #                                      
    #   # #        # # #  #     # #  #    Please refer to the accompanying
    ####   ### ####  #  # ##### # ###    documentation for conditions of use
    ________________________________________________________________________

    File:    TaskWindow.h
    Author:  Julian Smith
    Version: 1.00 (03 Feb 1997)
    Purpose: Support for child tasks using TaskWindow module.
    History:
*/

/*
This is rather incomplete at the moment. 

In particular, I haven't implemented Desk_TaskWindow_KillChild(),
Desk_TaskWindow_SuspendChild(), Desk_TaskWindow_ResumeChild().

Also, I haven't been able to get Desk_TaskWindow_SendData and
Desk_TaskWindow_SendDataSmall to work.

So, all that works is Desk_TaskWindow_CreateChild(). This can be
sufficient for many things though.
 */

#ifndef __Desk_TaskWindow_h
#define __Desk_TaskWindow_h

#include <stddef.h>

typedef int	Desk_taskwindow_id;

typedef void	(*Desk_taskwindow_displayfn)( void* data, size_t datasize, Desk_taskwindow_id childid, void* reference);
/*
Called with data=NULL when child dies.
 */

typedef void	(*Desk_taskwindow_egofn)( Desk_task_handle task, Desk_taskwindow_id childid, void* reference);
/*
Called when child task starts up.
 */

Desk_taskwindow_id
	Desk_TaskWindow_CreateChild( 
		Desk_taskwindow_displayfn	displayfn,
		Desk_taskwindow_egofn		egofn,		/* Can be NULL. Otherwise called after child starts up	*/
		const char*			command,	/* Including 'TaskWindow' at start.			*/
		void*				reference	/* Passed to 'displayfn'.				*/
		);
/*
This creates a child task with the specified command, and sends all
output from the taskwindow to 'displayfn'.

The child runs under control of the TaskWindow module, so will
preemtively multitask etc.

Returns unique reference for the child task, which should be used in
calls to Desk_TaskWindow_SendData, Desk_TaskWindow_SendDataSmall,
Desk_TaskWindow_GetTaskHandle(), Desk_TaskWindow_KillChild(),
Desk_TaskWindow_SuspendChild(), Desk_TaskWindow_ResumeChild().
 */


void	Desk_TaskWindow_SendData( 
		Desk_taskwindow_id	childid, 
		void*			data, 
		size_t			datasize
		);
/*
Calls Desk_TaskWindow_SendDataSmall or uses RAM transfer.
 */

void	Desk_TaskWindow_SendDataSmall( 
		Desk_taskwindow_id	childid, 
		void*			data, 
		size_t			datasize
		);
/*
Use when all data transfer has datasize<=236.
 */

Desk_task_handle
	Desk_TaskWindow_GetTaskHandle( Desk_taskwindow_id childid);


void	Desk_TaskWindow_KillChild( Desk_taskwindow_id childid);
/*
Not implemented yet.
 */

void	Desk_TaskWindow_SuspendChild( Desk_taskwindow_id childid);
/*
Not implemented yet.
 */

void	Desk_TaskWindow_ResumeChild( Desk_taskwindow_id childid);
/*
Not implemented yet.
 */


#endif
