/* :ts=4
 * Common DEFINEs and external declarations for the
 * Mandelbrot Construction Set...
 */

#define MYFRONTPEN	2 		/* Black */

/* Menus */
#define CPRMENU		0		/* Copyright Menu */
#define PRJMENU		1		/* Poject Menu */
#define OPTMENU		2		/* Option Menu */
#define FUNMENU		3		/* Functions Menu */

/* Menu items */
#define PRJNEW 		0		/* Project Menu: New */
#define PRJOPN 		1		/*               Open */
#define PRJSVE 		2		/*               Save */
#define PRJSVA 		3		/*               Save As */
#define PRJQUI 		4		/*               Quit */

#define OPTCOL 		0		/* Option Menu: Colors */
#define OPTRES 		1		/*              Resolution */
#define OPTPAR 		2		/*              Parameters */

#define FUN1		0		/* Functions Menu: Z^2-C */
#define FUN2		1		/*                 ZC1MinZ */
#define FUN3		2		/*                 Z3PlusZCMin1MinC */

/* subitems */
#define PNABS  		0		/* Project New: Absolute */
#define PNENL  		1		/*              Enlarge */
#define PNRED  		2		/*              Reduce */
#define PNSHF  		3		/*              Shift */

#define OCSEL 		0		/* Opt Color: Select */
#define OCMOD 		1		/*            Modulo */
#define OCRAN 		2		/*            Ranges */
#define OCPAL 		3		/*            Palette */

#define ORNRM 		0		/* Opt Resl: Normal */
#define OR12  		1		/*           1/2 */
#define OR13  		2		/*           1/3 */
#define OR14  		3		/*           1/4 */
#define ORFIL 		4		/*           Fill In */
#define ORHI  		5		/*           HiRes */
#define ORILC 		6		/*           Interlace */
#define ORBCK 		7		/*           Borderless */

#define	POSGADGETID	10		/* For Positive Gadget */
#define NEGGADGETID	11		/* For Negative Gadget */

#define	FNAME_SIZE	32L		/* Filename size */
#define DNAME_SIZE	66L		/* Directoryname size */

#define MAXDEPTH	512		/* Maximum maximum depth */
#define BMDEPTH		5		/* Depth of our bitmap */
#define MAXCOL (1<<BMDEPTH)	/* Maximum number of colors */

#define NOTFRAMING	0		/* We are not framing */
#define NOPOINT		1		/* We have no points of a frame */
#define POINT1		2		/* We have 1 point of a frame */
#define CENTERFRAMING 3		/* We have a center and are busy with a corner */
#define	FLASHING	4		/* We are still flashing the frame */

#define MODULO		0		/* Pen assignment to the depths */
#define RANGES		1
#define SELECT		2

#define MAND		((ULONG)'M'<<24 | (ULONG)'A'<<16 | 'N'<<8 | 'D')


/* Let's try to make `goto' a little more structured... */

#define skipto		goto
#define backto		goto


/* Type definitions */

typedef short bool;
struct BitMapHeader
{
	UWORD w, h;
	UWORD x, y;
	UBYTE nPlanes;
	UBYTE masking;
	UBYTE compression;
	UBYTE pad1;
	UWORD transparentColor;
	UBYTE xAspect, yAspect;
	WORD pageWidth, pageHeight;
};

/*ILBM_info is the structure read_iff returns, and is hopefully all
  you need to deal with out of the iff reader routines below*/
struct ILBM_info
{
	struct BitMapHeader header;
	UBYTE cmap[MAXCOL*3];	/*say hey aztec don't like odd length structures*/
	struct BitMap bitmap;
};

struct Mand
{
	ULONG	MandID;				/* 'MAND' */
	LONG	Size;				/* sizeof(struct Mand) */
	WORD	MaxDepth;			/* Maximum iteration count */
	WORD	RangeWidth;
	BYTE	RainDist;			/* From the palette Rainbow mode */
	BYTE	RainRMax;			/* From the palette Rainbow mode */
	BYTE	RainGMax;			/* From the palette Rainbow mode */
	BYTE	RainBMax;			/* From the palette Rainbow mode */
	BYTE	Coords[4 * 14];		/* Ascii representation */
};

struct BorderInfo
{
	BYTE	SizeX, SizeY;
	BYTE	MoveX, MoveY;
};

/* Some Macros */

#define MENU(menu,item,subitem)\
		(LONG)(SHIFTMENU(menu)|SHIFTITEM(item)|SHIFTSUB(subitem))

/* External declarations */

#include <functions.h>
extern long GetScreenData();
/*
extern struct Screen *OpenScreen();
extern struct Window *OpenWindow();
extern struct IntuiMessage *GetMsg();
extern struct Library *OpenLibrary();
extern struct MenuItem *ItemAddress();
extern long AutoRequest(), DisplayAlert(), Request(), MoveLayer(),
			SizeLayer();
extern void SetAPen(), WritePixel(), WindowLimits(), EndRequest();
*/


/* Forward POINTER declarations */

extern struct Screen *MandelScreen;
extern struct Window *MainWindow;
extern struct IntuiMessage *message;
extern void (*WritePixelDepth)();


/* Forward STRUCT declarations */

extern struct Menu MandelMenu[];
extern struct NewScreen MandelNScreen;
extern struct NewWindow MainNWindow;
extern struct TextAttr Topaz60, Topaz80;
extern struct IntuiText PositiveText, NegativeText;
extern struct Gadget PositiveGadget, NegativeGadget;
extern struct BorderInfo borderinfo;


/* Forward `SIMPLE' declarations */

extern int NumColors, MaxDepth, PixelStep, RangeWidth;
extern unsigned PenTableMode;
extern unsigned short FrameX1, FrameX2, FrameY1, FrameY2;
extern short MouseStatus;
extern bool finished, StillDrawing, Saved, NameValid;
extern double LeftEdge, RightEdge, TopEdge, BottomEdge, CXStep, CYStep;
extern UBYTE PenTable[MAXDEPTH];

extern SHORT RainbowDistance, RainbowRMax, RainbowGMax, RainbowBMax;

/* Forward FUNCTION declarations */

extern bool InitDisplay(), Sure(), CleanupDisplay(), InterpretMAND(),
			DoBorderless();
extern int WaitMyRequest(), write_iff();
extern float Ratio();
extern char *get_fname();
extern struct ILBM_info *read_iff();
extern struct Window *MyRequest();

extern void MyExit(), GotMenu(), UndoBorderless(), CprMenu(), PrjMenu(),
			EdtMenu(), OptMenu(), FunMenu(), UnImpl(), DrawPicture(),
			EndMyRequest(), CloseWindowSafely(), get_ea_cmap(),
			put_ea_cmap(), free_planes(), RectDraw(), CrossDraw(),
			CheckMouse(), InitPenTable(), StopFraming(),
			EnableSystemGadgets(), DisableSystemGadgets(), Parameters(),
			Palette(), MakeMAND(), StopDrawing(), CalcCSteps(),
			ZQuadMinC(), ZC1MinZ(), Z3PlusZCMin1MinC(), SelectMenu(),
			SuspendDrawing(), ResumeDrawing();
