/*
 * $Id$
 *
 * Copyright 1992, 1993, Geoff Kuenning, Granada Hills, CA
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All modifications to the source code must be clearly marked as
 *    such.  Binary redistributions based on modified source code
 *    must be clearly marked as modified versions in the documentation
 *    and/or other materials provided with the distribution.
 * 4. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgment:
 *      This product includes software developed by Geoff Kuenning and
 *      other unpaid contributors.
 * 5. The name of Geoff Kuenning may not be used to endorse or promote
 *    products derived from this software without specific prior
 *    written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 */

/*
 * $Log$
 * Revision 1.1  2007/01/09 23:57:18  lattner
 * initial recheckin of mibench
 *
 * Revision 1.1.1.1  2007/01/09 02:59:04  evancheng
 * Add selected tests from MiBench 1.0 to LLVM test suite.
 *
 * Revision 1.15  1994/10/25  05:46:38  geoff
 * Protoize bzero the way 4.1.1 does it (which I hope is the standard).
 *
 * Revision 1.14  1994/05/24  06:23:10  geoff
 * Make cap_ok a global routine.
 *
 * Revision 1.13  1994/05/17  06:44:20  geoff
 * Add the new arguments to chk_aff, good, and compoundgood.
 *
 * Revision 1.12  1994/03/16  03:49:15  geoff
 * Add an ifdef so that there won't be a conflict with the definition of
 * free() on braindamaged Sun systems.
 *
 * Revision 1.11  1994/02/14  00:34:55  geoff
 * Add new arguments to the prototype for correct().
 *
 * Revision 1.10  1994/02/08  05:45:34  geoff
 * Don't undef P unless we're going to redefine it
 *
 * Revision 1.9  1994/02/07  08:10:47  geoff
 * Add the GENERATE_LIBRARY_PROTOS option.  Put the definitions of
 * index/rindex back the way they were, because that's what's needed on
 * my system (sigh).
 *
 * Revision 1.8  1994/02/07  05:45:25  geoff
 * Change the second parameter of index/rindex to be a char
 *
 * Revision 1.7  1994/01/25  07:12:05  geoff
 * Get rid of all old RCS log lines in preparation for the 3.1 release.
 *
 */

extern int	addvheader P ((struct dent * ent));
extern void	askmode P ((void));
extern void	backup P ((void));
#ifndef NO_CAPITALIZATION_SUPPORT
extern int	cap_ok P ((ichar_t * word, struct success * hit, int len));
#endif /* NO_CAPITALIZATION_SUPPORT */
extern int	casecmp P ((char * a, char * b, int canonical));
extern void	chupcase P ((char * s));
extern void	checkfile P ((void));
extern void	checkline P ((FILE * ofile));
extern void	chk_aff P ((ichar_t * word, ichar_t * ucword, int len,
		  int ignoreflagbits, int allhits, int pfxopts, int sfxopts));
extern int	combinecaps P ((struct dent * hdr, struct dent * newent));
extern int	compoundgood P ((ichar_t * word, int pfxopts));
extern void	copyout P ((char ** cc, int cnt));
extern void	correct P ((char * ctok, int ctokl, ichar_t * itok, int itokl,
		  char ** curchar));
extern char *	do_regex_lookup P ((char * expr, int whence));
extern SIGNAL_TYPE done P ((int));
extern void	dumpmode P ((void));
extern void	erase P ((void));
extern int	expand_pre P ((char * croot, ichar_t * rootword,
		  MASKTYPE mask[], int option, char *extra));
extern int	expand_suf P ((char * croot, ichar_t * rootword,
		  MASKTYPE mask[], int crossonly, int option, char * extra));
extern int	findfiletype P ((char * name, int searchnames,
		  int * deformatter));
extern void	flagpr P ((ichar_t * word, int preflag, int prestrip,
		  int preadd, int sufflag, int sufadd));
extern void	givehelp P ((int interactive));
extern int	good P ((ichar_t * word, int ignoreflagbits, int allhits,
		  int pfxopts, int sfxopts));
extern int	hash P ((ichar_t * word, int hashtablesize));
#ifndef ICHAR_IS_CHAR
extern int	icharcmp P ((ichar_t * s1, ichar_t * s2));
extern ichar_t * icharcpy P ((ichar_t * out, ichar_t * in));
extern int	icharlen P ((ichar_t * str));
extern int	icharncmp P ((ichar_t * s1, ichar_t * s2, int n));
#endif /* ICHAR_IS_CHAR */
extern int	ichartostr P ((char * out, ichar_t * in, int outlen,
		  int canonical));
extern char *	ichartosstr P ((ichar_t * in, int canonical));
extern int	ins_root_cap P ((ichar_t * word, ichar_t * pattern,
		  int prestrip, int preadd, int sufstrip, int sufadd,
		  struct dent * firstdent, struct flagent * pfxent,
		  struct flagent * sufent));
extern void	inverse P ((void));
extern int	linit P ((void));
extern struct dent * lookup P ((ichar_t * word, int dotree));
extern void	lowcase P ((ichar_t * string));
extern int	makedent P ((char * lbuf, int lbuflen, struct dent * d));
extern void	makepossibilities P ((ichar_t * word));
extern void	move P ((int row, int col));
extern void	normal P ((void));
extern char *	printichar P ((int in));
#ifdef USESH
extern int	shellescape P ((char * buf));
extern void	shescape P ((char * buf));
#else /* USESH */
#ifndef REGEX_LOOKUP
extern int	shellescape P ((char * buf));
#endif /* REGEX_LOOKUP */
#endif /* USESH */
extern char *	skipoverword P ((char * bufp));
extern void	stop P ((void));
extern int	stringcharlen P ((char * bufp, int canonical));
extern int	strtoichar P ((ichar_t * out, char * in, int outlen,
		  int canonical));
extern ichar_t * strtosichar P ((char * in, int canonical));
extern void	terminit P ((void));
extern void	toutent P ((FILE * outfile, struct dent * hent,
		  int onlykeep));
extern void	treeinit P ((char * persdict, char * LibDict));
extern void	treeinsert P ((char * word, int wordlen, int keep));
extern struct dent * treelookup P ((ichar_t * word));
extern void	treeoutput P ((void));
extern void	upcase P ((ichar_t * string));
#ifndef NO_CAPITALIZATION_SUPPORT
extern long	whatcap P ((ichar_t * word));
#endif
extern char *	xgets P ((char * string, int size, FILE * stream));
extern void	yyinit P ((void));
extern int	yyopen P ((char * file));
extern int	yyparse P ((void));

extern void	myfree P ((VOID * area));
extern VOID *	mymalloc P ((unsigned int));
extern VOID *	myrealloc P ((VOID * area, unsigned int size,
		  unsigned int oldsize));

/*
 * C library functions.  If possible, we get these from stdlib.h.
 *
 * Even if stdlib.h doesn't exist, we don't generate proper prototypes
 * on most systems.  This protects us against minor differences in
 * declarations that break the compilation unnecessarily.
 * GENERATE_LIBRARY_PROTOS is mostly for the benefit of the ispell
 * developer.
 */
#ifndef GENERATE_LIBRARY_PROTOS
#undef P
#define P(x)	()
#endif /* GENERATE_LIBRARY_PROTOS */

#ifdef NO_STDLIB_H
extern int	access P ((const char * file, int mode));
extern int	atoi P ((const char * string));
#ifndef USG
extern VOID *	bcopy P ((const VOID * src, VOID * dest, unsigned int size));
extern void	bzero P ((VOID * dest, int size));
#endif /* USG */
extern VOID *	calloc P ((unsigned int nelems, unsigned int elemsize));
#ifdef _POSIX_SOURCE
extern int	chmod P ((const char * file, unsigned int mode));
#else /* _POSIX_SOURCE */
extern int	chmod P ((const char * file, unsigned long mode));
#endif /* POSIX_SOURCE */
extern int	close P ((int fd));
extern int	creat P ((const char * file, int mode));
extern int	execvp P ((const char * name, const char * argv[]));
extern void	_exit P ((int status));
extern void	exit P ((int status));
extern char *	fgets P ((char * string, int size, FILE * stream));
extern int	fork P ((void));
#ifdef __STDC__
/*
 * Some flaming cretin at Sun decided that free() should be declared
 * as returning an int in /usr/include/malloc.h, so the following
 * declaration causes a conflict.  Fortunately, it doesn't really do a
 * lot of harm to leave it undeclared, since (a) we always properly
 * ignore the return value and (b) any machine that really needs
 * special code to handle ignoring the return value is likely to also
 * provide a correct declaration.
 *
 * (Why is this ifdef'ed on __STDC__?  Because I want it to be correct
 * on my development machine, so I can catch lint problems.)
 *
 * A pox on those who violate long-established standards!
 */
extern void	free P ((VOID * area));
#endif /* __STDC__ */
extern char *	getenv P ((const char * varname));
extern int	ioctl P ((int fd, int func, char * arg));
extern int	kill P ((int pid, int sig));
extern int	link P ((const char * existing, const char * new));
extern long	lseek P ((int fd, long offset, int whence));
extern VOID *	malloc P ((unsigned int size));
#ifdef USG
extern VOID *	memcpy P ((VOID * dest, const VOID * src));
extern VOID *	memset P ((VOID * dest, int val, unsigned int len));
#endif /* USG */
extern char *	mktemp P ((char * prototype));
extern int	open P ((const char * file, int mode));
extern void	perror P ((const char * msg));
extern void	qsort P ((VOID * array, unsigned int nelems,
		  unsigned int elemsize,
		  int (*cmp) (const VOID * a, const VOID * b)));
extern int	read P ((int fd, VOID * buf, unsigned int n));
extern VOID *	realloc P ((VOID * area, unsigned int size));
extern unsigned int
		sleep P ((unsigned int));
extern char *	strcat P ((char * dest, const char * src));
#ifdef USG
extern char *	strchr P ((const char * string, int ch));
#endif /* USG */
extern int	strcmp P ((const char * s1, const char * s2));
extern char *	strcpy P ((char * dest, const char * src));
extern unsigned	int
		strlen P ((const char * str));
extern int	strncmp P ((const char * s1, const char * s2,
		  unsigned int len));
#ifdef USG
extern char *	strrchr P ((const char * string, int ch));
#endif /* USG */
extern int	system P ((const char * command));
extern int	unlink P ((const char * file));
extern int	wait P ((int * statusp));
#else /* NO_STDLIB_H */
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#endif /* NO_STDLIB_H */

#ifndef USG
extern char *	index P ((const char * string, int ch));
extern char *	rindex P ((const char * string, int ch));
#endif /* USG */
#ifdef REGEX_LOOKUP
#ifdef USG
extern char *	regcmp P ((const char * expr, const char * terminator, ...));
extern char *	regex P ((const char * pat, const char * subject, ...));
#else /* USG */
extern char *	re_comp P ((const char * expr));
extern int *	re_exec P ((const char * pat));
#endif /* USG */
#endif /* REGEX_LOOKUP */
extern int	tgetent P ((char * buf, const char * termname));
extern int	tgetnum P ((const char * id));
extern char *	tgetstr P ((const char * id, char ** area));
extern char *	tgoto P ((const char * cm, int col, int row));
extern char *	tputs P ((const char * str, int pad, int (*func) (int ch)));

#ifndef GENERATE_LIBRARY_PROTOS
#ifdef __STDC__
#undef P
#define P(x)	x
#endif /* __STDC__ */
#endif /* GENERATE_LIBRARY_PROTOS */
