#ifndef PIANOMETER_H
#define PIANOMETER_H


/* Some defines */

#define NORMPRI  10			/* priority during normal operation */

/* Library bases */

extern struct ExecBase			*SysBase;
extern struct DosLibrary		*DOSBase;
extern struct GfxBase			*GfxBase;
extern struct IntuitionBase	*IntuitionBase;
extern struct Library 			*GadToolsBase;
extern struct Library			*UtilityBase;
extern struct Library			*AslBase;
extern struct Library			*WorkbenchBase;
extern struct Library			*CamdBase;


/* the main program's task */

extern struct Task *MyTask;


/* these flags serve for keeping track of asynchronous tasks */

typedef enum
{
	AboutTask  = 0x00000001,	/* these are the asynchronous messages */
	SaveTask   = 0x00000002,
	ErrTask    = 0x00000004,
	DropTask   = 0x00000008,
	LaunchTask = 0x00000010,
	CloseTask  = 0x00000020,
	
	PlayTask   = 0x00000100,	/* these are the file requesters */
	
	LinkTask   = 0x00001000,	/* the MIDI link requester */

} TaskFlag;


/* global preferences data */

struct Prefs
{
	UBYTE Header[12];
	UWORD Version;
	UBYTE Link[32];
	ULONG Flags;
	UWORD Octaves;
	UWORD WinX;
	UWORD WinY;
	UWORD WinW;
	UWORD WinH;
	UBYTE MIDIFile[240];
	UWORD Mask;
};

#define PREFF_GM         (1L<<1)
#define PREFF_GS         (1L<<2)
#define PREFF_XG         (1L<<3)
#define PREFF_MT32       (1L<<4)
#define PREFF_ASLHOOKS   (1L<<5)


/* all data structures and pointers needed by this program */

struct Globals
{
	BOOL Classes;
	
	struct Screen *LockedScreen;
	struct Screen *Screen;
	APTR VisualInfo;
	
	struct Window *Window;
	struct Menu   *Menu;
	
	struct Gadget *FirstGad;
	struct Gadget *PianoGad;
	struct Gadget *ChanLedGad[16];
	
	struct Window *ProcWindow;
	
	struct MsgPort *AppPort;
	struct AppWindow *AppWindow;
	
	WORD ww, wh;
	
	struct MidiNode *midi;
	struct MidiLink *link;
	
	UBYTE WTitle[80];
	
	BOOL LinkRefresh;
	
	struct FileRequester *MIDIFR;
	
	ULONG TaskAlloc;
};

#endif	/* PIANOMETER_H */
