#define TONE	/* which version of the program are we producing? */
#pragma once
#include <stdio.h>

/* Character variables and arrays common to IBM and Mac versions*/

#ifdef global
#define extern
#endif

// defines

#define BEL		0x7		/*Warning noise*/
#define BS		'\b'		/*backspace character*/
#define CANERR	6		/*error canceling code*/
#define CONOUT	stdout	/*console output file*/
#define CR		'\r'		/*return character*/
#define DEL		0x7F	/*delete character*/
#define EOL		13		/*end-of-line character - same as CR*/
#define FILESIZE	42000	//Filesize
#define FF		'\f'		/*Formfeed character*/
#define LF		10		/*New line character*/
#define MAXCARDS	1100	/*Maximum number of input items*/
#define MAXCOMS	50		/*Maximum number of comment items*/
#define MAXLINE	256		/*Maximum line length*/
#define MAXR		6		/*Maximum number of rungs*/
#define NEXTF		1		/*Code to go to next card*/
#define NL		'\n'		/*New line character = LF*/
#define NUL		'\0'		/*Null character*/
#define PASSF	8		/*Code to pass over a card*/
#define SP		' '		/*Space character*/
#define STOPF		2		/*Code to end card display */
#define WORD_ALIGN

#ifdef TTHREE		

typedef struct flashcd{	/*Flashcard array for primitives and affixes*/
	char flag[4];
	char *prim;
	char *affix;
	char *trans;
	char *extn;
	} FlashCd;
	
#else

typedef struct flashcd {	/*Flashcard array for sentences*/
	char flag[6];
	char *logsent;
	char *engsent;
	} FlashCd;
	
#endif

extern FlashCd flasharray[MAXCARDS];

// Prototypes

//long labs(long n);
void brush(void);
void countflag(void);
void doselect(void);
void doshufl(void);
void dotest(short ID);
void getend(void);
void getstart(void);
void header(void);
void init(void);
short isqrt(long n);
short mycomp(char *str2, char *str1);
short RandOf(short n);
void readfile(void);
void findcmts(void);
void restore(void);
void savedo(void);
void setrank(void);
void setstat(void);
void statdo(short ticks);
void statline(void);
short strindex(char *s, char *t);
void upstat(void);
void upstring(char *stg);
void writefile(FILE *fname);

/* JPJ: made these extern so that the header can be included more than once */

extern short affixflag;	/*Flag used for indicating if affix or primitive mode*/
extern char *ansptr[20];	/*pointers to individual words in answer*/
extern short average;		/* For saving average time */
extern char bufr[2000];	/* Buffer for comment page in Mac MT1 version*/
extern short cardcount;		/* Current total number of cards*/
//cflag is 1 if there are alternatives, 2 if comments
extern short cflag;		/* Flag for comments and optional translations 1=Yes 2=0*/
extern char *cmmt;		/* Pointer to comment to Loglan text */
extern char comname[15];	/*Name of comment file for this test input */
extern long compos[MAXCOMS]; /*File positions for start of each comment*/
extern short curflag;	/*Flags affixes or primitives, and recognition or recall*/
extern short dirty;		/*indicates if file changed since last written*/
extern short drillflg;		/*# of correct responses required to leave error box*/
extern struct tm *etime;	/* Macintosh structure for obtaining the time */
extern short factor;		/*time conversion factor*/
extern char filename[256];	/*array for filename JPJ: name it 256. */
extern short ind1,ind2;		/*indexes for string comparison.  Must be global*/
extern short inpfile;		/* flag to indicate if an input file is open */
extern char instring[MAXLINE]; /* string to read in test answer*/
extern char istring[MAXLINE]; /*temp string to hold correct answer*/
extern short left;			/*Count of cards remaining in a test set*/
extern long macticks;		/*TickCount() returns a long*/
extern short maximum;		/* maximum response time recorded in a test group */
extern short minimum;		/* minimum response time in a test group */
extern short moment;		/* used in calculating standard deviation */
extern unsigned long next; /* used in random number generation */
extern short oldlevel;	/*used by teach3 for restoring after an error correction*/
extern short opt;			/*A flag showing an optional word is being processed*/
extern short percent;		/* percent correct in a test group */
extern char prog;			/*Type of program being processed*/
extern short r [MAXR];		/*holds card count at each level */
extern short rank [MAXCARDS];/* used for shuffling card order */
extern short reviewflag;	/* Indicates whether testing or review in progress */
extern short right;		/* number correct in this test group */
extern short righttot;		/*number correct in this session */
extern short rrflag;		/*Is recognition or recall current*/
extern short rungflag;		/*Indicates which rung is being tested */
extern short sdevn;		/* standard deviation of response times */
extern short selection;		/*count of cards selected*/
extern short shour;		/* starting hour */
extern short smin;			/* starting minute */
extern short shufflag;		/* flag to indicate if shuffling wanted */
extern long square;		/*used to calculate standard deviation of test group*/
extern long sqtotal;		/* used for session standard deviation */
extern struct tm *stime;	/* start time structure (Macintosh only??) */
extern short testav;		/* Session average */
extern short tested;		/* Number tested in this group */
extern short testtotl;		/* Total number tested in a session */
extern short threshld;		/* Maximum time permitted for response */
extern short ticks;		/* Macintosh time measure (60ths second) */
extern long ticktotl;		/* Total test group time */
extern long timetotl;		/* Total session time */
extern short tmouts;		/* Number of session timeouts */
extern short tsd;			/* Standard deviation for session */
extern short val;			/* Used to highlight dialog items */
extern short wall;	/*Used to establish word barriers for test string comparison*/
extern short winht;		/*Number of lines visible in a help window*/
extern char *wordptr[20]; /*pointers to individual words*/

extern FILE *inp, *out, *stats ; /* Input, output and statistics file pointers*/ 
extern FILE *cmt; /* Lesson comment files for Teach 3*/
