/*
NAME: MacLip.h

PROGRAMMED BY: Robert A. McIvor

DATE: Version 2.02 Apr 1990

OBJECT: These are the global variables, includes, and defines for 
the set of programs used in the Loglan Interactive Parser (LIP) Macintosh version */

#pragma once

// Includes

#include <types.h>
#include <AppleEvents.h>
#include <Gestalt.h>
#include <Controls.h>
#include <Dialogs.h>
#include <Aliases.h>
#include <MixedMode.h>

// Defines

#define kAEParse,'pars' 

#define	aboutID 999	/*dialog resource for Copyright, Version etc.*/
#define	alertID 998	/*resource for alert messages*/
#define	appleMenu	1	/*apple Menu resource number*/
#define	BTNOFF	0	/*Flag for button off*/
#define	BTNON	1	/*Flag for button on*/
#define	ECHOON 12		/*Full record check box*/
#define	editMenu	257	/*Edit menu resource number*/
#define	ECOPY 4		/*Edit menu copy item*/
#define	ECUT 3		/*Edit menu cut item*/
#define	EPASTE 5		/*Edit menu paste item*/
#define	ENTER 3		/*ASCII enter character*/
#define	FILEITEMS 9	/*number of items in File Menu*/
#define	fileMenu	256	/*file menu resource number*/
#define	HELPBUT 3		/*Help button*/
#define	hwindID 1		/*Help window resource number*/
#define	lastMenu	4	/*Menu count*/
#define	mainID 1000	/*Main dialog resource number*/
#define	MAXITEMS 22	/*Maximum item counat in main dialog*/
#define	MCLOSE 4		/*Close item on file menu*/
#define	MFEVENT 15	/*Multifinder event*/
#define	MOPEN 2		/*Open item on file menu*/
#define	MQUIT 11		/*Menu quit item*/
#define	MY 6			/*Keyboard entry item on main dialog*/
#define	NUMFILES 4	/*Number of possible file types*/
#define	NUMRADGROUPS	3	/*Number of radio button groups*/
#define	parseMenu 258	/*Parse menu resource number*/
#define	PARSEBUT 1	/*Parse button on main dialog*/
#define	pwindID 2		/*Parse window resource number*/
#define	QUITBUT 4		/*Quit button item number*/
#define	SAVEBUT 2		/*Save item button number*/
#define	SAVECHK 13	/*Save edited input check box number*/
#define	SENTBYSENT 21	/*Sentence-by-Sentence radio button*/
#define	TAB 0x09		/*tabulation character*/
#define	TEXTFAST 8	/*All at once radio button*/
#define	TEXTSW 7		/*Text file entry radio button number*/
#define	TXT 5		/*Main dialog text entry box*/
#define UNDO 1		/*Undo item in Edit Menu*/
#define	US unsigned	/*For Aztec C - Lattice C requires #define US */

//Globals

DialogPtr		abDialog;	/*Pointer to about dialog*/
DialogRecord	abRecord; /*Dialog record storage*/
Boolean			ascript;	// Mar 95 for detecting a script call
Rect			BlitRect;	/*Off screen Grafport*/
TEHandle		dlgTE;	/*TEHandle for parse text */
short			DoIt;	/*Used for multifinder capability*/
Rect			dragRect;	/*TEEdit rectangle for dragging*/
DialogRecord	dRecord;	/*main Dialog record*/
long			factor;	/*used for calculating scrolling distance*/
Rect			growRect;	/*TEEdit rectangle for growing*/
Boolean			gSDI;		/*Set default item flag*/
short			hasGestalt; /*Boolean to check for Gestalt*/
WindowPtr		helpWindow;	/*Pointer to the help window*/
WindowRecord	hRecord;	/*Window record for the help window*/
ControlHandle	hScroll;	/*Horizontal Scroll handle*/
TEHandle		hTE;		/*Text edit Record handle (for help info)*/
short			i;		/*File index number*/
CursHandle	iBeam;	/*Cursor handle for text entry*/
US char		inpnam[30];	/*For name of input file*/
short		inpos;		/*selection point at cut*/
SFReply		inReply;	/*Standard file reply record*/
Rect			itemBox;	/*Used in getting handles to dialog items*/
Handle		itemHdl[MAXITEMS];	/*To hold dialog item handles*/
short			itemHit;	/*Item hit in a dialog or modal dialog*/
long			lseek();	/*Function declaration*/
short			myControl;/*Temporary control handle*/
DialogPtr		myDialog;	/*Temporary dialog handle*/
EventRecord	myEvent;	/*Temporary event record*/
MenuHandle	myMenus[lastMenu];	/*Handles to the various menus*/
GrafPort		myPort;	/*Temporary graph port*/
GrafPtr		myPtr;	/*Temporary graph port pointer*/
SFTypeList	myType;	/*Temporary file type list*/
short			OffRowBytes;	/*Measure of off-screen bit map*/
BitMap		OffScreen;	/*OffScreen bit map*/
Point		oldOrigin;	/*Used in calculating scrolling distance*/
Point		Origin;	/*Used in calculating scrolling*/
SFReply		outReply;	/*Standard file dialog out reply*/
TextStyle	parseTS;	/*TextStyle record for parse window */
WindowPtr		parseWindow;	/*Pointer to parse window*/
short			penx;	/*Used for scrolling parse tree*/
short			peny;	/*Used for scrolling parse tree*/
WindowRecord	pRecord;	/*Window record for parse window*/
Rect			pRect;	/*Rectangle used in updating*/
ControlHandle	pvScroll;	/*Control hangle for tree scrolling*/
Rect			radBox;	/*Box for text input, used for setting cursor*/
Handle		radHdl;	/*Handle to same*/
long		Reply;	/*return from Gestalt*/
OSErr		resultCode;	/*Result code for IO errors*/
GrafPtr		savePort;	/*Temporary Graf pointer for saving*/
long			SizeofOff;/*Used in offscreen grafport*/
long			sleeep;	/*Used for Multifinder compatibility*/
Point		tpOrigin;	/*Used in scroll updating*/
Point		thOrigin;	/*Used in scroll updating*/
short			theType;	/*Used for getting dialog handles*/
SysEnvRec		theWorld;	/*Used for Multifinder compatibility*/
ControlHandle	vScroll;	/*Control handle for vertical scroll bar (help)*/
CursHandle	Watch;	/*Delay cursor*/
ControlHandle	whichControl;	/*Temporary control handle*/
DialogPtr		whichDialog;	/*Temporary dialog pointer*/
WindowPtr		whichWindow;	/*Temporary window pointer*/
long			winht;	/*Used in calculating scrolling length*/
short			WNE;		/*Wait Next Event flag*/

struct rSet {	/*Structure for radio buttons*/
	unsigned char defaultOn;
	unsigned char nowOn;
	}radSet[NUMRADGROUPS];

// Prototypes

void AdjustControl(Point penpos);
void alert(short n,short m);
void checkCursor(void);
void checkout(short item, unsigned char *name, short fileno);
void control(short ctrlno, short ctlval, short set);
void doClose(void);
void docommand(unsigned long mResult);
void domulti(void);
void DoOffScreen(Rect *Offrect);
void doparse(void);
void dosave(void);
void DrawWindow(WindowPtr theWindow,short hpos,short vpos);
void GrowWnd(WindowPtr whichWindow);
void IClose(short refno, short flag);
void IOCheck(OSErr code);
void IOpen (char *name,short vol,short *refno);				
void initlip(void);
void initMac(void);
void initRects(void);
void message(short n,short m, unsigned char *txt);
void MoveScrollBars(WindowPtr thisWindow, ControlHandle tvscroll,ControlHandle thscroll);
void nfputc (char c);
void nfputs (unsigned char *str, short style);
void openout(ControlHandle handle,unsigned char *name,short fileno);
void opentext(void);
void outlin(short no,DialogPtr dialog);
void PageScroll(short code,long amount);
void parseline(void);
void radioset(short i);
void ResizePRect(WindowPtr theWindow);
void ScrollBits(void);
void setupdialogs(void);
void setupmenu(void);
void setscroll(void);
void WriteParse(void);

Boolean AppleEventsInstalled(void);
Boolean GetLine(char *str);
Boolean INextLine(short refno);
Boolean TrapAvailable(short theTrap);

short NumToolboxTraps(void);

TrapType GetTrapType(short theTrap);
OSErr DoAEParse(AEDesc *ptrToTheResult,char *iline);
pascal void resume(void);
pascal void ScrollDown(ControlHandle whichControl, short theCode);
pascal void ScrollUp(ControlHandle whichControl, short theCode);

pascal 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 HandleAEParse(const AppleEvent *theAppleEvent, const AppleEvent *theReply, long theRefCon);



