/* These are the defines, includes, and externs peculiar to the Mac version*/
#pragma once

//Includes

#include <stdlib.h>		/* defines malloc() */
#include <stdio.h>		/* defined FILE */
#include <time.h>		/* defines localtime() */
#include <string.h>		/* defines string functions */
#include <ctype.h>
#include <AppleEvents.h>
#include <Gestalt.h>
#include <Aliases.h>
#include <Balloons.h>
#include "teach1.h"

//Defines

enum {fNext=1,fStop,fIn,fPrim,fAffix,fTrans,fExtn,fWhat,fWho,fAns,fSyn};	//Test and Review Dialog items
enum {cSelect=1,cReview,cTest,cLn,cShuffle,cLookup,cBrush,cStats,cReset,cLn2,cHelp}; //Command menu items
enum {flOpen=1,flClose,flLine,flSave,flSaveAs,flLn2,flQuit}; //File menu items
enum{moRecog=1,moRecall,moLine,moRung1,moRung2,moRung3,moTop,moErrBox};  //Mode menu items
enum{mSelect=2,mRung1,mRung2,mRung3,mTop,mErrorBox,mInDeck,mTest,mReview,mStats,mTime,mA,mB,
	mDrill,mShuffle,mC,mRecognize,mRecall,mD,mE,mPcent,mAvTim,mConfL,mI,mHelp,mJ,mFile};
enum {BtnOff, BtnOn};	// Control values

#define TTHREE
#define	appleMenu	1	/*Menu resource number for Apple Menu*/
#define	commandMenu 258	/*Resource number of command menu*/
#define	editMenu	257	/*Resource number of edit menu*/
#define	fileMenu	256	/*Resource number of file menu*/
#define 	modeMenu	259	/*Resource # of Mode menu*/
#define	lastMenu	5	/*Maximum menu count*/
#define 	MAC			/*Used to distinguish Mac programs from IBM*/
#define MAXFLDS		13	/*Maximum items in Test/Review Dialog*/
#define MAXITEMS	29	/*Maximum items in MainDialog*/
#define MFEVENT		15	/*Multifinder event number*/
#define MFILE		28	/*Main dialog item for file name*/
#define MHELP		26	/*Main dialog item for Help*/
#define NUMFILES	2	/*For checking number of files in command or click*/
#define PStrCpy(dst, src)	BlockMove( src, dst, (Size)(*src)+1) /* JPJ: Pascal String Copy */
#define statID		6	/* Resource # of statistics dialog */
#define textID		43	/*Dialog resource number of help text*/

#ifdef global
#define extern
#endif

//Globals

extern DialogPtr		gAbtDialog;	/*About MacTeach*/
extern DialogRecord		gAbtRecord;	/*About MacTeach*/
extern Rect			gDragRect;	/*Rectangles for text edit record*/
extern short			gHelp;		/*flag for indicating if help on*/
extern WindowPtr		gHelpWindow;	/*pointer to help window*/
extern WindowRecord	gHlpRecord;	/*record of help window*/
extern TEHandle		ghTE;		/*text edit record*/
extern SFReply			gInReply;		/*standard reply for input files*/
extern Handle			gItemHdl[MAXFLDS];	/*Storage for handles of Test/Review dialog*/
extern Rect			gItemBox;		/*for getting items from dialogs*/
extern DialogPtr		gMainDialog;	/*main non-modal dialog */
extern DialogRecord		gMainRecord;	/*main dialog record*/
extern Handle			gMainHdl[MAXITEMS]; /*handle storage for main Dialog items*/
extern EventRecord		gMyEvent;	/*current event record*/
extern MenuHandle		gMyMenus[lastMenu];	/*current menu handles*/
extern Ptr				gMyPtr;  //for allocatiion of temporary space.
extern Point			gOrigin;		/*used for placing standard reply*/
extern Rect			gpRect;		/*temporary rect for resizing*/
extern Rect			gReptBox;		/*used for I-beam setting*/
extern Boolean			gSDI;		/*Set default item flag*/
extern DialogRecord		gTestRecord;	/*Dialog record storage*/
extern DialogPtr		gTestDialog;	/*Dialog pointer for test & text dialogs*/
extern Point 			gTheOrigin;	/*used in Scrolling windows*/
extern Rect			gTimeBox;	/*used for I-beam setting*/
extern ControlHandle		gvScroll;		/*Scroll bar control*/
extern CursHandle		gWatch;		/*Busy cursor*/
extern ControlHandle		gWhichControl;	/*current active control*/

// Prototypes

// teach23.c 

void main(void);
void doseek(void);
void look(short n);
void promote(short n);
void setaffix(short val);
void show4(short n);
void show5(short n);
void show611(short n);
void show7(short n);

short showsel(short n);
short showtest(short n, short dlgid);

pascal void resume(void); /*Allows for return to Desktop on serious error*/

// tmcommon.c 

void alert(short n, short m);
void checkCursor(CursHandle iBeam);
void demote(short n);
void display(void);
void doabout(void);
void docommand(unsigned long mResult);
void dodrill(void);
void dohelp(void);
void domouse(WindowPtr whichWindow);
void domulti(void);
void doopen(void);
void dotimeout(void);
void DrawWindow(WindowPtr theWindow);
void eventloop(void);
void GrowWnd(WindowPtr whichWindow);
void initMac(void);
void initteach(void);
void	InitToolbox(void);
void IOCheck(OSErr code);
void MoveScrollBars(WindowPtr thiswindow, ControlHandle tvscroll, ControlHandle thscroll);
void mycpy(char *stra, char *strb);
void opentext(void);
void outlin(short no, DialogPtr dialog);
void PageScroll(short code, short amount);
void ResizePRect(WindowPtr theWindow);
void saveasdo(void);
void savestat(void);
void ScrollBits(void);
void sessions(void);
void setrr(short val);
void setrung(short val);
void setscroll(void);
void setshuf(short val);
void setupmenu(void);
void showcard(short n);
void showhelp(short n);
void showstat(void);

pascal void ScrollDown(ControlHandle whichControl, short theCode);
pascal void ScrollUp(ControlHandle whichControl, short theCode);

Boolean 	TrapAvailable(short theTrap);
Boolean 	AppleEventsInstalled(void);

pascal Boolean Timeget(DialogPtr theDialog, EventRecord *theEvent, short *item);

TrapType GetTrapType(short theTrap);

short doClose(void);
short keyequiv(short button);
short message(short n, short m, unsigned char *txt, short ID);
short NumToolboxTraps(void);

OSErr MyGotRequiredParams(AppleEvent *theAppleEvent);
pascal OSErr MyHandleOApp(AppleEvent *theAppleEvent, AppleEvent *reply, long Refcon);
pascal OSErr MyHandleODoc(AppleEvent *theAppleEvent, AppleEvent *reply, long Refcon);
pascal OSErr MyHandlePDoc(AppleEvent *theAppleEvent, AppleEvent *reply, long Refcon);
pascal OSErr MyHandleQUIT(AppleEvent *theAppleEvent, AppleEvent *reply, long Refcon);
pascal OSErr SetDialogTrackCursor (DialogPtr theDialog,Boolean tracks);

