#ifndef _PEOPLE_H_
#define _PEOPLE_H_

typedef int boolean;

#define CR '\015'
#define LF '\012'
#define EOM ".\r\n"
#define CRLF "\015\012"
#define TRUE 1
#define FALSE 0
#define perfectMatch 100.00
#define almostMatch 90.00
#define maybeMatch 80.00
#define lineSize 80
#define lastNameLength 30
#define firstNameLength 30
#define middleNameLength 30
#define fullNameLength lastNameLength+firstNameLength+middleNameLength+1
#define mitIdLength 9
#define soundexLength 5
#define ssnLength 9
#define dobLength 4
#define userNameLength 20
#define emailLength 50
#define numOfPrintable 95 /* 95 printable characters in ASCII 0x20 to 0x7E */
#define TAB 9
#define SPACE 32
#define TILDE 127
#define kttLen 3
#define numberPrefix 4 /* 4 different prefix numbers in MIT ID */
#define mitIdPrefix1 950000000
#define mitIdPrefix2 960000000
#define mitIdPrefix3 970000000
#define mitIdPrefix4 980000000
#define maxRandomNumber 9999999
#define numberArguments 2
#define numberOfNumeric 10
#define numberOfAlphabet 26
#define msgUsage "Usage: PEOPLE ARGUMENT_STRING<return>\n"
#define msgMitIdError "MIT ID error.\n"
#define msgMemoryError "Memory error.\n"
#define msgSaveFile "Save file?\n"
#define msgFileError "File error.\n"

/*
boolean DEBUG = FALSE;
boolean DIRTY = FALSE;
*/
struct arguments_
{
  char ttStr[kttLen+1];
  int  ttInt;
  char lastName[lastNameLength+1];
  char firstName[firstNameLength+1];
  char middleName[middleNameLength+1];
  char ssn[ssnLength+1];
  char dob[dobLength+1];
};

struct person_
{
  char lastName[lastNameLength+1];
  char firstName[firstNameLength+1];
  char middleName[middleNameLength+1];
  char mitId[mitIdLength+1];
  char soundex[soundexLength+1];
  char ssn[ssnLength+1];
  char dob[dobLength+1];
  char userName[userNameLength+1];
  char email[emailLength+1];
  float matchScore;
  struct person_ *prev;
  struct person_ *next;
};

/* forward reference begin */

/* match.c begin */
float matchAlphaPercentage(char *string1, char *string2);
float matchDigitPercentage(char *string1, char *string2);
char *soundex(char *string);
boolean equalString(register char *string1, register char *string2);
boolean equalSoundex(register char *string1, register char *string2);
boolean equalDOB(register char *dob1, register char *dob2);
boolean equalSSN(register char *ssn1, register char *ssn2);
/* match.c end */

/* person.c begin */
void displayPerson(struct person_ *person);
void insertPerson
  (struct person_ *person, struct person_ **first, struct person_ **last);
void loadPerson(struct person_ *first, struct person_ *last);
void copyPerson(struct person_ *source, struct person_ *target);
/* person.c end */

/* random.c begin */
FILE *openFile(char *fileName);
int closeFile(FILE *filePointer);
unsigned int randomNumberGenerator();
unsigned int mitIdGenerator();
/* random.c end */

/* string.c begin */
char *substr(char *string, int offset, int length);
void replaceTabWithSpace(char *string);
char *skipSpace(char *string);
char *removeWhite(char *string);
char *removeFrontWhite(char *string);
void reverse(char *string);
char *removeRearWhite(char *string);
char *trimString(char *string);
/* string.c end */
/* handler.c begin */
int err_handler();
int msg_handler();

/* handler.c end */

/* forward reference end */
#endif












