 
#ifndef __dl_sprite_h
#define __dl_sprite_h
#ifdef __cplusplus
extern "C" {
#endif
#ifndef __dl_core_h
#include "Core.h"
#endif
#ifndef __dl_wimp_h
#include "Wimp.h"
#endif
#ifndef __dl_coord_h
#include "Coord.h"
#endif
#include <stdarg.h>
#define sprite_MAXNAME 12
#define spritepool_SYSTEM 0
#define spritepool_WIMP 1
typedef struct {
unsigned int areasize ;
unsigned int numsprites ;
unsigned int firstoffset ;
unsigned int freeoffset ;
} sprite_areainfo ;
typedef sprite_areainfo *sprite_area;
typedef struct {
unsigned int width ;
unsigned int height ;
unsigned int maskstatus ;
unsigned int mode ;
} sprite_info ;
typedef sprite_info *sprite;
typedef struct {
int callno ;
sprite_area spritearea ;
sprite sprite ;
void *savearea ;
} sprite_outputstate ;
typedef struct
{
int offset_next;
char name[sprite_MAXNAME];
int width;
int height;
int leftbit;
int rightbit;
int imageoffset;
int maskoffset;
int screenmode;
} sprite_header;
typedef struct
{
wimp_point multiply;
wimp_point divide;
} sprite_scalefactors;
extern os_error *Sprite_ScreenSave(char *filename, BOOL savepalette);
extern os_error *Sprite_ScreenLoad(char *filename);
extern os_error *Sprite_InitArea(sprite_area area);
extern os_error *Sprite_Load(sprite_area area, char *filename) ;
extern os_error *Sprite_Merge(sprite_area area, char *filename);
extern os_error *Sprite_Save(sprite_area area, char *filename);
extern os_error *Sprite_Create(sprite_area area, char *name, int haspalette,
int width, int height, int screenmode);
extern os_error *Sprite_Select(sprite_area area, char *name,
sprite_header **spriteptr);
extern os_error *Sprite_Delete(sprite_area area, char *name);
extern os_error *Sprite_Rename(sprite_area area, char *oldname, char *newname);
extern os_error *Sprite_Copy(sprite_area area, char *oldname, char *newname);
extern os_error *Sprite_Get(sprite_area area, char *name, int with_palette,
int left, int bottom, int right, int top,
sprite *sprite_ptr);
extern os_error *Sprite_Plot(sprite_area area, char *name, 
int x, int y, int plot_action);
extern os_error *Sprite_ReadInfo(sprite_area area, char *name,
sprite_info *info);
extern os_error *Sprite_Redirect(sprite_area area, char *name,
void *savearea, sprite_outputstate *oldstate);
extern os_error *Sprite_UnRedirect(sprite_outputstate *oldstate);
extern os_error *Sprite_ReadSaveAreaSize(sprite_area area, char *name,
int *saveareasize);
extern int Sprite_ReadControl(sprite_area area, int *size, sprite *firstsprite,
void *firstfree);
extern int Sprite_GetName(sprite_area area, char *name, int spritenumber);
extern os_error *Sprite_CreateMask(sprite_area area, char *name);
extern os_error *Sprite_RemoveMask(sprite_area area, char *name);
extern os_error *Sprite_InsertRow(sprite_area area, char *name, int pos);
extern os_error *Sprite_DeleteRow(sprite_area area, char *name, int pos);
extern os_error *Sprite_FlipX(sprite_area area, char *name);
extern os_error *Sprite_Append(sprite_area area, char *name1, char *name2,
int dir);
extern int Sprite_CreatePalette(sprite_area area, char *name, BOOL big);
extern os_error *Sprite_RemovePalette(sprite_area area, char *name);
extern int Sprite_ReadPixel(sprite_area area, char *name, wimp_point *pos);
extern os_error *Sprite_WritePixel(sprite_area area, char *name,
wimp_point *pos, int colour, int tint);
extern BOOL Sprite_ReadMask(sprite_area area, char *name, wimp_point *pos);
extern os_error *Sprite_WriteMask(sprite_area area, char *name, wimp_point *pos,
BOOL solid);
extern os_error *Sprite_InsertColumn(sprite_area area, char *name, int pos);
extern os_error *Sprite_DeleteColumn(sprite_area area, char *name, int pos);
extern os_error *Sprite_FlipY(sprite_area area, char *name);
extern os_error *Sprite_PlotMask(sprite_area area, char *name, wimp_point *pos);
extern os_error *Sprite_PlotMaskScaled(sprite_area area, char *name,
wimp_point *pos, sprite_scalefactors sc);
extern os_error *Sprite_PlotScaled(sprite_area area, char *name,
wimp_point *pos, sprite_scalefactors *scale,
void *pixtrans);
extern os_error *Sprite_PlotGrey(sprite_area area, char *name,
wimp_point *pos, sprite_scalefactors scale,
void *pixtrans);
extern os_error *Sprite_WimpPlot(sprite_area area, char *name, wimp_point *pos,
convert_block *convert, int plot_action);
typedef enum
{
sprite_HASNOMASKPAL = 0x00, 
sprite_HASNOPALMASK = 0x00,
sprite_HASMASK = 0x01, 
sprite_HASPAL = 0x02, 
sprite_HASMASKPAL = 0x03, 
sprite_HASPALMASK = 0x03
} spritemem_flags;
extern int Sprite_MemorySize(int width, int height, int mode,
spritemem_flags flags);
extern int Sprite_IconMemorySize(window_block *pWinBlock, icon_handle icon,
int mode, spritemem_flags flags,
wimp_point *dimensions);
extern sprite_area Sprite_LoadFile(char *filename);
extern sprite_area Sprite_LoadFiles(int nooffiles,...);
#ifdef __cplusplus
}
#endif
#endif
