/*******************************************************************
*
*		INSIDE MAC INCLUDES
*
********************************************************************/
#ifndef ASTToolbox
#define ASTToolbox

/* =============================== Structures ===================== */
typedef	struct	
{
	PenState	pnState;
	long		fgColor;
	long		bkColor;
}	ColorPenState;
/*------------------------------------------------------------------*/

typedef struct		/* rearranged 8/90 so it is the same start as TextStyle struct */
{
	short			font,style,size;
	RGBColor	color;
	Point		position;
	short 		align;
}
TextSpec, *TextSpecPtr;
enum {cBlack, cYellow, cMagenta, cRed, cCyan, cGreen, cBlue, cWhite };
/*------------------------------------------------------------------*/
typedef struct
{
	short      count;      /* Number of cursors or ÒframesÓ in the cursor list */
	short      frame;      /* Cursor list index of the next cursor frame */
	CursHandle cursors []; /* Variable-sized list of cursor handles */
} AnimCursRec, *AnimCursPtr, **AnimCursHnd;

/* =============================== Prototypes ===================== */
#define _Point2Long(pointP)			(*(long *) pointP)
#define _Long2Point(longP)			(*(Point *) longP)
#define _Degs2Rads(angle)			(angle * PI / 180.0)
/*-----------------------------------------------------ASSORTED---------*/

void		InitMacintosh		(void);
void 		TestEnvironment		(SysEnvRec	*theWorldP);
void 		Pause				(long nTicks);
long 		GetCurrentDate		(void);
void 		WaitForUser			(void);
void		PictureAlert		(short picID,Str255 caption);
WindowPtr	ShowPicInWin		(short picID,Str255 caption);
void 		ShowValue			(Rect box,long val,short type);
void 		EAlert				(char *ErrStr,short ErrNum,Boolean Recoverable);
void 		BugReport			(short strId,short id,Boolean  Recoverable);	
void 		OopsAlert			(short classID,short strId,short id,Boolean  Recoverable);
Boolean 	AnyKeyDown			(void);
Boolean 	IsKeyDown			(unsigned short keyCode);
Boolean 	PullOutEffect		(Point pt,Rect *rP,Boolean pullout,Boolean gEffects);
Handle 		OpenDocument		(Str255 prompt,SFTypeList fileTypes);
void 		InsertBit			(long *flagP,short bitNum);
void 		SqueezeBit			(long *flagP,short bitNum);
void 		DoRegistration		(void);
/*-----------------------------------------------------COLOR---------*/
RGBColor 	Idx2Color			(short idx);
void		SignedColor			(Boolean isNeg);
void 		SetColor			(RGBColor color);
void 		SetColorPen			(long x,Boolean UseColor);
void		GetColorPenState	(ColorPenState	*ColorPenStruct);
void		SetColorPenState	(ColorPenState	*ColorPenStruct);

/*-----------------------------------------------------CTRL---------*/
ControlHandle NewButton			(WindowPtr wP,Point pt,Str255 title, short ref);
void		ButtonOutline		(ControlHandle cH);
/*-----------------------------------------------------DATES---------*/

DateTimeRec AddToDate			(DateTimeRec startDate,short perType,short nPers);
void		ChangePeriod		(DateTimeRec inDate,DateTimeRec *outDateP,short newPeriod);
short 		GetDayOfYear		(DateTimeRec date);
long 		DeltaDays			(DateTimeRec date1,DateTimeRec date2);
long 		NPeriodsToDays		(short perType,short nPers);
long 		DaysPlusNPeriods	(long start,short perType,short nPers);
void		PrevEvenMonday		(DateTimeRec *dateP);
void		PrevMonday			(DateTimeRec  *dateP);
long		DateToDays			(DateTimeRec date);
DateTimeRec DaysToDate			(long days);
short 		GetMonth			(long days);
long 		Today				(void);
void 		Date2String			(unsigned long num,Str255 string,short	Format);
void 		MyString2Date		(char	*string,unsigned long *numP,short	Format);
short 		DatePreCheck		(Str31 string,short Format);
Boolean 	GetDateToken		(Str31 string,long *offsetP,Str31 token);


/*---------------------------------------------------DLOG--------*/

void		DlogButtonOutline	(DialogPtr dlog,short item);
void		SetButtonState		(DialogPtr dlog,short item, Boolean TurnOn);
Boolean		GetCheck			(DialogPtr dlog,short item);
void 		GetEditBox			(DialogPtr dlog,short item,char *str);
void 		SetEditBox			(DialogPtr dlog,short item,char *str);
long 		GetEditBoxNum		(DialogPtr dlog,short item);
void 		SetEditBoxNum		(DialogPtr dlog,short item,long val);
Boolean 	UserWarning			(short winID,short pictID,short defltBtn, Str255 str);
short 		UserConfirm			(short winID,Str255 str,short defltBtn);
short 		MultipleChoice		(short id,short dflt, short butn1, short butn2, short butn3);
float 		GetEditBoxFloat		(DialogPtr dlog,short item);
void 		SetEditBoxFloat		(DialogPtr dlog,short item, float f);
void 		ToggleChk			(DialogPtr dlog, short item);
short 		GetChk				(DialogPtr dlog, short item);
void 		SetChk				(DialogPtr dlog, short item,short val);

/*--------------------------------------------------LIST -----------*/

void		HackintoCell		(Ptr ptr, Cell cell,ListHandle  lst,short  format);
void		HackOutaCell		(Ptr ptr, Cell cell,ListHandle  lst,short  format);

/*----------------------------------------------------MEMORY----------*/

void 		InitHandleChecker	(void);
void 		ScrunchHandleChecker	(void);
Handle 		GetNewHandle		(long TheHandleSize);
void		DisposeAndChkHandle	(Handle *TheHandle);
void		NullOutHandle		(Handle h);
void 		NullOutBytes		(long *longP,long siz);
Handle 		DupHandle			(Handle srcH);
void 		AppendToHandle		(Handle h,Ptr p,Size s);
void		Lock				(Handle h);
void		UnLock				(Handle h);
void 		WriteHandleToFile(Handle h,SFReply *replyP,long Creator,long FileType);
Handle 		ReadHandleFromFile(SFTypeList myTypes,SFReply *replyP);


/*------------------------------------------------- MENUS ------*/
void 		CreateMenuBar		(MenuHandle *Menus, short nMenus,short FirstID);
short 		FindByName			(Str255 str,MenuHandle menu,short fromItem);
void		ChangeItemStr		(MenuHandle menu,char *oldName, char *newName);
short 		FindFirstCheck		(MenuHandle menu);
void 		CheckNamedItem		(Str255 str,MenuHandle menu,short fromItem);
void 		UnCheckAll			(MenuHandle menu);
void 		AddStrToMenu		(Str255 str,MenuHandle menu,short fromItem);
void 		DelStrFromMenu		(Str255 str,MenuHandle menu,short fromItem);
void 		EnDisItem			(MenuHandle menu,short item,Boolean on);
long 		PopMenu				(short id,short checkItem,short displace);
short 		PopMenuHandle		(MenuHandle theMenu,short lastChoice,Rect bounds);
/*------------------------------------------------- QUICKDRAW ------*/

void 		DrawLine			(Point a,Point b);
void		NoClipping			(void);
Boolean 	PtCompare			(Point *aP,Point *bP);
Rect  		CirclePoint			(Point pt,short radius);

short		Width				(Rect r);
short		Height				(Rect r);
long		LWidth				(LongRect r);
long		LHeight				(LongRect r);
short 		Area				(Rect r);
short 		Distance			(Point pt1,Point pt2);
Point 		Center				(Rect r);
Point 		OffCenter			(Rect r,float h,float v);
void 		ShadowFrameRect		(Rect *rp);
void 		SetRectFromDiag		(Rect *rp,Point a,Point b);
void 		SortRect			(Rect *rp);
void 		TransposeRect		(Rect *rP);
void 		MoveRectTo			(Rect *rP,Point pt);
void 		DimRect				(Rect r);
void 		SquareOut			(Rect *rP);
Point 		CenterPt			(Point a,Point b);

Point 		SubPtFromRect		(Rect r,Point pt);
Point 		PinPtToRect			(Rect r,Point pt);

void 		Arc					(short l,short t,short r,short b,short deg);
void 		DrawRad				(Rect r,short angle);
Point 		PtOnArc				(Rect r,short angle);
Rect 		DrawRadExtension	(Rect r,short angle,RgnHandle clip);

short 		GetLineHeight		(void);
short 		GetVertTextShift		(void);
void		DrawIcon			(Rect r,short iconID);
short		PicHeight			(PicHandle p);
short		PicWidth			(PicHandle p);
void		DrawPic				(short x,short y,PicHandle picture);
void		DrawPicAt			(short x,short y,PicHandle picture);
void		DumpPic				(PicHandle pic);
void		DrawCenteredPict	(PicHandle pict,Point pt);

void 		GetScreenRect		(Rect *rp);
void 		GetDragRect			(Rect *rp);
long		GetTextState		(void);
void		SetTextState		(long TextState);
void		SetText				(short font,short size,short style);
long 		TextToState			(short font,short size,short style);
void		StateToText			(long state,short *fontP,short *sizeP,short *styleP);
void 		SetTextSpec			(TextSpec ts);
void 		InitTextSpec		(TextSpec *tsP);
void		TurnWatchOn			(void);
void		TurnWatchOff		(void);
void		TurnArrowOn			(void);
void 		SetResCursor		(short resId);

void 		FrameTriangle		(Rect *rP);
void 		PaintTriangle		(Rect *rP);

void 		InitMovingWatch		(void);
void 		MoveWatch			(void);
void 		KillWatch			(void);
short 		NewBitMap			(BitMap *bmP,Rect r);
void 		ClearBitMap			(BitMap *aBitMapP);
void 		TextNormal			(void);
PicHandle 	GetSymbolPicture	(short symbolSize, short symbolShape);

/*--------------------------------------------------SOUND-----------*/

void 		PlaySound			(short SoundID);
/*--------------------------------------------------TEXTEDIT-----------*/
void	TESetString(TEHandle teH,Str255 str);
void	TEGetString(TEHandle teH,Str255 str);
long	TEInsertStr(TEHandle teH,Str255 str);
long	TEFind(TEHandle teH,Str255 str);
long	TEReplace(TEHandle teH,Str255 target,Str255 replaceStr);
void	GetTESelection(TEHandle teH,short * startP, short *strLengthP);

/*-------------------------------------------------- WINDOW MGR -----*/

short		WindowWidth			(WindowPtr	wP);
short		WindowHeight		(WindowPtr	wP);
short 		NumOpenWindows		(WindowPtr	wP);
void 		ClearWindow			(WindowPtr	wP);
void 		InvalWindow			(WindowPtr	wP);
Boolean 	OurWindow			(WindowPeek	wP);
Point 		GetTopLeft			(WindowPtr	wP);
Point 		GetBottomRight		(WindowPtr	wP);
Rect 		GetWindowRect		(WindowPtr	wP);
WindowPtr 	MyFrontWindow		(void);	
void		CenterWindow		(WindowPtr wP);
void 		UpperCenterWindow	(WindowPtr wP);
void 		DrawOnlyGrowIcon	(WindowPtr	wP);
void		InvalWindowRect		(WindowPtr TheUpdateWindow,Rect *rect);
WindowPtr 	SecondWindow		(void );

/*------------------------------------------------------------------*/
Boolean 	KeyLegal			(unsigned char key,TEHandle teH,short	Type,short MaxLen);
short 		DoneWithInput		(short key);
/*------------------------------------------------------------------*/
Handle 		GetTextHandle		(void);
Boolean 	GetFileDialog		(Str255 fileName,short *vRefNumP);
Handle 		ReadTextFile 		(Str255 fileName,short vRefNum);
Handle 		GetResTextHandle	(short id);
/*------------------------------------------------------------------*/
long 		FindFirst			(TEHandle teH,Str255 str);
long 		FindNext			(TEHandle teH);
long 		FindNextDoubleCR	(TEHandle teH);
pascal long FindPat(Ptr	TextPtr, long TextLen,long TextOffset,Ptr PatPtr, long PatLen,Boolean CaseSens);
void 		GetItemString		(DialogPtr dlog,short item,Str255 *sP);
long 		GetLives			(TEHandle teH);
/*------------------------------------------------------------------*/
void 		MarqueeOn		(void);
void 		MarqueeOff		(void);
Boolean 	IsMarqueeOn		(void);
void 		SetMarqueeRect	(Rect r);
void 		DrawMarquee		(void);
void 		ClearMarquee		(void);
Boolean		MouseInMarquee	(void);
#endif