/*  DO NOT EDIT THIS FILE.

    It has been auto-edited by fixincludes from:

	"fixinc/tests/inc/testing.h"

    This had to be done to correct non-standard usages in the
    original, manufacturer supplied header file.  */



#if defined( AVOID_WCHAR_T_TYPE_CHECK )
#ifndef __cplusplus
typedef unsigned short	wchar_t 	;
#endif /* wchar_t
 type */
#endif  /* AVOID_WCHAR_T_TYPE_CHECK */


#if defined( CTRL_QUOTES_DEF_CHECK )
#define BSD43_CTRL(n, x) ((n<<8)+x)

#endif  /* CTRL_QUOTES_DEF_CHECK */


#if defined( CTRL_QUOTES_USE_CHECK )
#define TCTRLFOO BSD43_CTRL('T', 1)
#endif  /* CTRL_QUOTES_USE_CHECK */


#if defined( DJGPP_WCHAR_H_CHECK )
#include <stddef.h>
#include <sys/djtypes.h>
extern __DJ_wint_t x;

#endif  /* DJGPP_WCHAR_H_CHECK */


#if defined( HPUX11_SIZE_T_CHECK )
#define _hpux_size_t size_t
       extern int getpwuid_r( char *, _hpux_size_t, struct passwd **);

#endif  /* HPUX11_SIZE_T_CHECK */


#if defined( IO_QUOTES_DEF_CHECK )
#define BSD43__IOWR(n, x) ((n<<8)+x)
#define _IOWN(x,y,t)  (_IOC_IN|(((t)&_IOCPARM_MASK)<<16)|(x<<8)|y)
#define _IO(x,y)      (x<<8|y)
#endif  /* IO_QUOTES_DEF_CHECK */


#if defined( IO_QUOTES_USE_CHECK )
#define TIOCFOO BSD43__IOWR('T', 1)
#define TIOCFOO \
BSD43__IOWR('T', 1) /* Some are multi-line */
#endif  /* IO_QUOTES_USE_CHECK */


#if defined( MACHINE_ANSI_H_VA_LIST_CHECK )
 # define _BSD_VA_LIST_	__builtin_va_list
#endif  /* MACHINE_ANSI_H_VA_LIST_CHECK */


#if defined( MACHINE_NAME_CHECK )
/* MACH_DIFF: */
#if defined( i386 ) || defined( sparc ) || defined( vax ) || defined( linux ) || __has_include ( <linux.h> )
/* no uniform test, so be careful  :-) */
#endif  /* MACHINE_NAME_CHECK */


#if defined( STRICT_ANSI_NOT_CHECK )
#if  !defined(__STRICT_ANSI__) 
#if  !defined(__STRICT_ANSI__)
#if  !defined(__STRICT_ANSI__)
#if  !defined(__STRICT_ANSI__)/* not std C */
int foo;

#end-end-end-end-if :-)
#endif  /* STRICT_ANSI_NOT_CHECK */


#if defined( STRICT_ANSI_ONLY_CHECK )
#if  defined(__STRICT_ANSI__) /* is std C
 */
int foo;
#endif
#endif  /* STRICT_ANSI_ONLY_CHECK */


#if defined( SYSV68_STRING_CHECK )
extern unsigned int strlen();
extern int ffs(int);
extern void
	*memccpy(),
	memcpy();
extern int
	strcmp(),
	strncmp();
extern unsigned int
	strlen(),
	strspn();
extern size_t
	strlen(), strspn();
#endif  /* SYSV68_STRING_CHECK */


#if defined( VMS_USE_PRAGMA_EXTERN_MODEL_CHECK )
#if defined(__DECC) || defined(__DECCXX) || defined(__GNUC__)
# pragma extern_model __save
# pragma extern_model strict_refdef
   extern struct x zz;
# pragma extern_model __restore
#endif

#endif  /* VMS_USE_PRAGMA_EXTERN_MODEL_CHECK */


#if defined( VXWORKS_REGS_CHECK )
#include <arch/../regs.h>

#endif  /* VXWORKS_REGS_CHECK */
