#ifndef LIBRARIES_SWAZBLANKER_H
#define LIBRARIES_SWAZBLANKER_H
/*
**      $Filename: libraries/swazblanker.h $
**      $Release: 2.5 $
**      $Revision: 41.0 $
**
**	SwazBlanker definitions
**
**	(C) Copyright 1993-94 David Swasbrook
**	    All Rights Reserved
*/

/*****************************************************************************/

#ifndef EXEC_LIBRARIES_H
#include <exec/libraries.h>
#endif

/*****************************************************************************/

#define SWAZBLANKERNAME	"swazblanker.library"
#define SB_TagBase		TAG_USER+0x80000

/*****************************************************************************/


/*****************************************************************************
   This structure is private, you should not have any need to read or write
   to this. If you need read/write please use the SB_Get and SB_Set functions.
 */
struct SwazBlankerBase {
	struct Library LibNode;
	UBYTE	Flags;
	APTR	SegList;

	struct SignalSemaphore Semaphore;	/* Shared resources management */
	APTR	OldMousePtr;		/* A blank pointer, useful when opening a blank screen */

	struct Task *ServerMaster;		/* Pointer to swazblanker master task */
	struct Task *BlankerTask;		/* Pointer to blanker task */

	struct Screen *Screen;		/* Pointer to blanker screen */
	struct Window *Window;		/* Pointer to blanker window */

	BYTE	BlankerDieSignal;		/* Signal to server task from blanker */
	BYTE	BlankerReadySignal;		/* Signal to server task from blanker */

	WORD	Pad2;

	STRPTR	OldInterfaceFontName;	/* Name of font to use for interfaces (NULL) */
	STRPTR	BlankerDir;		/* Full Path to blanker directory */

	struct MsgPort *SBPort;		/* Port for use by SwazBlanker only */

	STRPTR	DocumentationDir;		/* Full Path to documentation directory */

	/* PRIVATE FIELDS FOLLOW */

	BYTE	BlankerTaskPri;
	STRPTR	GuiFont;
	struct Window *PrefsWindow;

	struct List PrefsList;		/* List of preferences modules running */
};

/*****************************************************************************
   This structure is for messages to the SBPort
 */

struct SBMessage {
	struct Message Message;
	ULONG Type;			/* See below for message types */
	ULONG Data;			/* Specific for type */
	ULONG Result;			/* Result */
};

#define SBMSG_PING			0
#define SBMSG_BECOMEBLANKER		1
#define SBMSG_BECOMEBLANKER_END	2

/*****************************************************************************
   This structure is returned by SB_BlankerInfo()
 */
struct BlankerInfo {
	struct Node Node;
	struct DateStamp Date;
	LONG	FileType;
	LONG	FileSize;
	UWORD	Version;			/* Version of blanker module */
	UWORD	Revision;			/* Revision of blanker module */
	ULONG	stack;			/* recommended stack size */
	ULONG	kickstart;		/* minimum kickstart required */
	ULONG	cpu;			/* cpu */
	STRPTR	email;			/* email address */
	STRPTR	author;			/* authors name */
	STRPTR	title;			/* breif description */
	STRPTR	load;			/* cpu loading */
	STRPTR	info;			/* information buffer */
	STRPTR	copyright;		/* copyright info */
};

/*****************************************************************************
   This structure is returned by SB_OpenColorCycleTagList()
   Structure is PRIVATE!
 */

struct SBColorCyc {
	ULONG	Flags;
	BYTE	DieSig;
	struct Screen *Screen;
	struct ViewPort *ViewPort;
	struct Task *ColorTask;
	struct Task *CreatorTask;
	APTR	Private;
};


/*****************************************************************************
   This structure is returned by SB_OpenCopperTagList()
   Structure is PRIVATE!
 */
#define	SB_MINCOPPER	30
#define	SB_MAXCOPPER	200

struct SBCopper {
	BYTE	DieSig;
	UBYTE	Pen;
	UBYTE	ColorAdd;
	UBYTE	ColorRemove;
	UBYTE	Color[3];
	UBYTE	Pad;
	WORD	Spacing;
	WORD	SpectrumLength;
	WORD	YOffset;
	struct Screen *Screen;
	struct Task *CopperTask;
	struct Task *CreatorTask;
	struct ViewPort *ViewPort;
	struct UCopList *UCopList;

	WORD	Speed;
	WORD	CurrLev;

	WORD	YStart;
	WORD	YStop;

	/* Raw data follows ... */
	LONG	Spectrum[SB_MAXCOPPER*2];
};

/*****************************************************************************
   This structure is returned by SB_AddPrefsTaskTagList()
 */

struct BlankerPrefsNode {
	struct Node Node;		/* Standard exec node */
	struct Task *task;		/* Pointer to prefs task */
	struct Window *window;	/* Pointer to window owned by prefs task */
	APTR SBHelp;		/* Pointer returned by SB_HelpTagList() */
};


/*****************************************************************************
    Mode values for SB_LockSBBase() and SB_UnLockSBBase().
 */
#define SBLOCK_READ		0
#define SBLOCK_WRITE	1

/*****************************************************************************
    Tag values for SB_SetBaseVarTagList() and SB_GetBaseVarTagList().
 */

#define SBBV_ObtainSemaphore	SB_TagBase+0x01
#define SBBV_FontInfo	SB_TagBase+0x02
#define SBBV_PrefsWindow	SB_TagBase+0x03
#define SBBV_BlankerPath	SB_TagBase+0x04
#define SBBV_DocPath	SB_TagBase+0x05
#define SBBV_BlankerTaskPri	SB_TagBase+0x06
#define SBBV_NumberOfPrefsTasks SB_TagBase+0x07

/*****************************************************************************
    Tag values for SB_BlankerInfoTagList();
 */

#define SBBI_Buffer		SB_TagBase+0x100

/*****************************************************************************
    Tag values for SB_HelpTagList();
 */
#define SBHELP_BlankerPrefs	SB_TagBase+0x101
#define SBHELP_Directory	SB_TagBase+0x102

#define SBHELPDIR_SYS	0	/* Dir for main help files etc... */
#define SBHELPDIR_BLANKERS	1	/* Directory for blanker help files */

/*****************************************************************************
    Tag values for SB_OpenCopperTagList() and SB_SerCopperTagList().
 */

#define SBCOPPER_RandomiseColors	SB_TagBase+0x201	/* Randomise the colors being used */
#define SBCOPPER_YStart		SB_TagBase+0x202	/* First line of copper */
#define SBCOPPER_YStop		SB_TagBase+0x203	/* Last line of copper */
#define SBCOPPER_Disabled		SB_TagBase+0x204	/* Set to TRUE to turn effect off */
#define SBCOPPER_ScanLinesPerColor	SB_TagBase+0x205	/* How many scanlines before color change */
#define SBCOPPER_Speed		SB_TagBase+0x206	/* How far copper should move in scanlines/vnblank */
#define SBCOPPER_Pen		SB_TagBase+0x207	/* Pen to use for copper effect */
#endif	/* LIBRARIES_SWAZBLANKER_H */
