| /* Runes for special purposes (0xe800-0xfdff is Private Use Area) */ | 
 | enum {	NONE=0xe800,	/* Emit nothing */ | 
 | 	TAGS,		/* Start of tag */ | 
 | 	TAGE,		/* End of tag */ | 
 | 	SPCS,		/* Start of special character name */ | 
 | 	PAR,		/* Newline, indent */ | 
 | 	LIGS,		/* Start of ligature codes */ | 
 |  | 
 | /* need to keep in sync with utils.c:/ligtab */ | 
 | 	LACU=LIGS,	/* Acute (´) ligatures */ | 
 | 	LGRV,		/* Grave (ˋ) ligatures */ | 
 | 	LUML,		/* Umlaut (¨) ligatures */ | 
 | 	LCED,		/* Cedilla (¸) ligatures */ | 
 | 	LTIL,		/* Tilde (˜) ligatures */ | 
 | 	LBRV,		/* Breve (˘) ligatures */ | 
 | 	LRNG,		/* Ring (˚) ligatures */ | 
 | 	LDOT,		/* Dot (˙) ligatures */ | 
 | 	LDTB,		/* Dot below (.) ligatures */ | 
 | 	LFRN,		/* Frown (⌢) ligatures */ | 
 | 	LFRB,		/* Frown below (̯) ligatures */ | 
 | 	LOGO,		/* Ogonek (˛) ligatures */ | 
 | 	LMAC,		/* Macron (¯) ligatures */ | 
 | 	LHCK,		/* Hacek (ˇ) ligatures */ | 
 | 	LASP,		/* Asper (ʽ) ligatures */ | 
 | 	LLEN,		/* Lenis (ʼ) ligatures */ | 
 | 	LBRB,		/* Breve below (̮) ligatures */ | 
 | 	LIGE,		/* End of ligature codes */ | 
 |  | 
 | /* need to keep in sync with utils.c:/multitab */ | 
 | 	MULTI,		/* Start of multi-rune codes */ | 
 | 	MAAS=MULTI,	/* ʽα */ | 
 | 	MALN,		/* ʼα */ | 
 | 	MAND,		/* and */ | 
 | 	MAOQ,		/* a/q */ | 
 | 	MBRA,		/* <| */ | 
 | 	MDD,		/* .. */ | 
 | 	MDDD,		/* ... */ | 
 | 	MEAS,		/* ʽε */ | 
 | 	MELN,		/* ʼε */ | 
 | 	MEMM,		/* —— */ | 
 | 	MHAS,		/* ʽη */ | 
 | 	MHLN,		/* ʼη */ | 
 | 	MIAS,		/* ʽι */ | 
 | 	MILN,		/* ʼι */ | 
 | 	MLCT,		/* ct */ | 
 | 	MLFF,		/* ff */ | 
 | 	MLFFI,		/* ffi */ | 
 | 	MLFFL,		/* ffl */ | 
 | 	MLFL,		/* fl */ | 
 | 	MLFI,		/* fi */ | 
 | 	MLLS,		/* ll with swing */ | 
 | 	MLST,		/* st */ | 
 | 	MOAS,		/* ʽο */ | 
 | 	MOLN,		/* ʼο */ | 
 | 	MOR,		/* or */ | 
 | 	MRAS,		/* ʽρ */ | 
 | 	MRLN,		/* ʼρ */ | 
 | 	MTT,		/* ~~ */ | 
 | 	MUAS,		/* ʽυ */ | 
 | 	MULN,		/* ʼυ */ | 
 | 	MWAS,		/* ʽω */ | 
 | 	MWLN,		/* ʼω */ | 
 | 	MOE,		/* oe */ | 
 | 	MES,		/* em space */ | 
 | 	MULTIE		/* End of multi-rune codes */ | 
 | }; | 
 | #define Nligs (LIGE-LIGS) | 
 | #define Nmulti (MULTIE-MULTI) | 
 |  | 
 | typedef struct Entry Entry; | 
 | typedef struct Assoc Assoc; | 
 | typedef struct Nassoc Nassoc; | 
 | typedef struct Dict Dict; | 
 |  | 
 | struct Entry { | 
 | 	char	*start;		/* entry starts at start */ | 
 | 	char	*end;		/* and finishes just before end */ | 
 | 	long	doff;		/* dictionary offset (for debugging) */ | 
 | }; | 
 |  | 
 | struct Assoc { | 
 | 	char	*key; | 
 | 	long	val; | 
 | }; | 
 |  | 
 | struct Nassoc { | 
 | 	long	key; | 
 | 	long	val; | 
 | }; | 
 |  | 
 | struct Dict { | 
 | 	char	*name;			/* dictionary name */ | 
 | 	char	*desc;			/* description */ | 
 | 	char	*path;			/* path to dictionary data */ | 
 | 	char	*indexpath;		/* path to index data */ | 
 | 	long	(*nextoff)(long);	/* function to find next entry offset from arg */ | 
 | 	void	(*printentry)(Entry, int); /* function to print entry */ | 
 | 	void	(*printkey)(void);	/* function to print pronunciation key */ | 
 | }; | 
 |  | 
 | int	acomp(Rune*, Rune*); | 
 | Rune	*changett(Rune *, Rune *, int); | 
 | void	err(char*, ...); | 
 | void	fold(Rune *); | 
 | void	foldre(char*, char*); | 
 | Rune	liglookup(Rune, Rune); | 
 | long	lookassoc(Assoc*, int, char*); | 
 | long	looknassoc(Nassoc*, int, long); | 
 | void	outprint(char*, ...); | 
 | void	outrune(long); | 
 | void	outrunes(Rune *); | 
 | void	outchar(int); | 
 | void	outchars(char *); | 
 | void	outnl(int); | 
 | void	outpiece(char *, char *); | 
 | void	runescpy(Rune*, Rune*); | 
 | long	runetol(Rune*); | 
 | char	*dictfile(char*); | 
 |  | 
 | long	oednextoff(long); | 
 | void	oedprintentry(Entry, int); | 
 | void	oedprintkey(void); | 
 | long	ahdnextoff(long); | 
 | void	ahdprintentry(Entry, int); | 
 | void	ahdprintkey(void); | 
 | long	pcollnextoff(long); | 
 | void	pcollprintentry(Entry, int); | 
 | void	pcollprintkey(void); | 
 | long	pcollgnextoff(long); | 
 | void	pcollgprintentry(Entry, int); | 
 | void	pcollgprintkey(void); | 
 | long	movienextoff(long); | 
 | void	movieprintentry(Entry, int); | 
 | void	movieprintkey(void); | 
 | long	pgwnextoff(long); | 
 | void	pgwprintentry(Entry,int); | 
 | void	pgwprintkey(void); | 
 | void	rogetprintentry(Entry, int); | 
 | long	rogetnextoff(long); | 
 | void	rogetprintkey(void); | 
 | long	slangnextoff(long); | 
 | void	slangprintentry(Entry, int); | 
 | void	slangprintkey(void); | 
 | long	robertnextoff(long); | 
 | void	robertindexentry(Entry, int); | 
 | void	robertprintkey(void); | 
 | long	robertnextflex(long); | 
 | void	robertflexentry(Entry, int); | 
 | long	simplenextoff(long); | 
 | void	simpleprintentry(Entry, int); | 
 | void	simpleprintkey(void); | 
 | long	thesnextoff(long); | 
 | void	thesprintentry(Entry, int); | 
 | void	thesprintkey(void); | 
 | long	worldnextoff(long); | 
 | void	worldprintentry(Entry, int); | 
 | void	worldprintkey(void); | 
 |  | 
 | extern Biobuf	*bdict; | 
 | extern Biobuf	*bout; | 
 | extern int	linelen; | 
 | extern int	breaklen; | 
 | extern int	outinhibit; | 
 | extern int	debug; | 
 | extern Rune	multitab[][5]; | 
 | extern Dict	dicts[]; | 
 |  | 
 | #define asize(a) (sizeof (a)/sizeof(a[0])) |