 
#ifndef __dl_save_h
#define __dl_save_h
#ifdef __cplusplus
extern "C" {
#endif
#ifndef __stdlib_h
#include <stdlib.h>
#endif
#ifndef __dl_event_h
#include "Event.h"
#endif
typedef BOOL (*save_filesaver)(char *f, void *ref);
typedef int (*save_ramsaver)(
task_handle sourcetask, 
void *ref,
task_handle desttask,
void *destbuffer,
unsigned int buffersize,
int progress 
);
typedef enum
{
save_SAVEOK = 0,
save_RECEIVERFAILED,
save_FILESAVERFAILED,
save_RAMSAVERFAILED
} save_result;
typedef void (*save_resulthandler)(save_result result, void *ref);
typedef struct
{
window_handle window; 
union
{
unsigned int value;
struct
{
unsigned int is_menu : 1; 
unsigned int is_save_window : 1; 
unsigned int we_are_dragging : 1; 
unsigned int quit_after_save : 1; 
unsigned int release_after : 1; 
unsigned int padding : 27;
} data;
} flags;
icon_handle dragsprite;
icon_handle okbutton;
icon_handle cancelbutton;
icon_handle filenameicon;
save_filesaver filesaver;
save_ramsaver ramsaver;
save_resulthandler resulthandler;
size_t estimatedsize;
int filetype;
void *ref;
int ram_progress; 
unsigned int last_message_ref; 
} save_saveblock;
save_saveblock *Save_InitSaveWindowHandler(
window_handle window, 
BOOL is_menu, 
BOOL is_save_window, 
BOOL release_after, 
icon_handle dragsprite, 
icon_handle okbutton, 
icon_handle cancelbutton, 
icon_handle filenameicon, 
save_filesaver filesaver, 
save_ramsaver ramsaver, 
save_resulthandler resulthandler, 
size_t estimatedsize, 
int filetype,
void *ref 
);
void Save_ReleaseSaveHandlers(save_saveblock *saveblock);
void Save_SetFiletype(save_saveblock *saveblock, int filetype);
#ifdef __cplusplus
}
#endif
#endif
