#ifndef ___INCLUDES_H__
#define ___INCLUDES_H__
/*
 * Nessus system includes 
 */
#include <config.h>


#ifndef NESSUSNT
#if HAVE_UNISTD_H
#include <unistd.h>
#endif /* HAVE_UNISTD_H */
#endif /* NESSUSNT */

#if defined(HAVE_STDLIB_H) || defined(NESSUSNT)
#include <stdlib.h>
#endif

#if defined(HAVE_STDIO_H) || defined(NESSUSNT)
#include <stdio.h>
#endif

#if HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif

#ifdef HAVE_CTYPE_H
#include <ctype.h>
#endif

#ifndef NESSUSNT
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif

#ifndef HAVE_UCBINCLUDE
#include <fcntl.h>
#else
/* Solaris */
#include "/usr/ucbinclude/fcntl.h"
#endif

#ifdef HAVE_MEMORY_H
#include <memory.h>
#endif

#if STDC_HEADERS && HAVE_STRING_H                                                       
#include <string.h>                                                    
#else                                                     
#ifndef HAVE_STRCHR                                                     
#define strchr index                                                   
#define strrchr rindex                                                
#endif /* not defined HAVE_STRCHR */                                                         
char *strchr (), *strrchr ();                 
#ifndef HAVE_MEMCPY
#define memcpy(d, s, n) bcopy ((s), (d), (n))                      
#define memmove(d, s, n) bcopy ((s), (d), (n))                        
#endif  /* not defined (HAVE_MEMCPY) */                                                         
#endif  /* STDC_HEADERS && HAVE_STRING_H */      

#endif /* not defined(NESSUSNT) */


/* 
 * Unix specific includes  -- once more :)
 */
#ifndef NESSUSNT

#ifdef HAVE_STRINGS_H
#include <strings.h>
#endif /* HAVE_STRINGS_H */

#include <netdb.h>
#include <sys/socket.h>

#ifdef HAVE_NETINET_IN_SYSTM_H
#include <netinet/in_systm.h>
#endif

#include <netinet/in.h>

#ifdef HAVE_SYS_UN_H
#include <sys/un.h>
#endif

#include <arpa/inet.h>
#include <signal.h>



#ifdef HAVE_DLFCN_H
#include <dlfcn.h>
#endif

                                          
#if HAVE_SYS_WAIT_H                                                     
#include <sys/wait.h>                                                
#endif                                                                

#ifndef WEXITSTATUS
#define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)               
#endif                                                                

#ifndef WIFEXITED                                                        
#define WIFEXITED(stat_val) (((stat_val) & 255) == 0)                 
#endif    

#if TIME_WITH_SYS_TIME                                           
#include <sys/time.h>                                                
#include <time.h>                                               
#else                
#if HAVE_SYS_TIME_H
#include <sys/time.h> 
#else                                                                
#include <time.h>                                                  
#endif                                                                
#endif   

#ifdef HAVE_SYS_IOCTL_H
#include <sys/ioctl.h>
#endif


#include <sys/stat.h>


#ifdef HAVE_SYS_FILIO_H
#include <sys/filio.h>
#endif


#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif

#if HAVE_DIRENT_H                                                     
#include <dirent.h>
#define NAMLEN(dirent) strlen((dirent)->d_name)                 
#else                                                                  
#define dirent direct
#define NAMLEN(dirent) (dirent)->d_namlen                         
#if HAVE_SYS_NDIR_H                                                     
#include <sys/ndir.h>                                                  
#endif                                                             
#if HAVE_SYS_DIR_H
#include <sys/dir.h>                                                
#endif                                                               
#if HAVE_NDIR_H                                                         
#include <ndir.h>                                         
#endif            
#endif   


/*
 * Threads management
 *
 * Nessus is currently able to deal with 
 * 3 kinds of threads API :
 *
 * - the POSIX Threads
 * - the WindowsNT Threads
 * - fork() used as Threads
 *
 */

#ifdef NESSUSNT
#define USE_NT_THREADS
#else
#ifndef USE_PTHREADS
#define USE_FORK_THREADS
#endif
#endif

#ifdef USE_PTHREADS
#if HAVE_PTHREAD_H
#include <pthread.h>
#else
#error "Your system is lacking pthread support"
#endif
#endif

#endif /* not defined(NESSUSNT) */

#ifdef BSD_BYTE_ORDERING
#define FIX(n) (n)
#else
#define FIX(n) htons(n)
#endif

#include <ntcompat.h>
#include <nessuslib.h>
#include <nessus-devel.h>

#endif /* not defined(___INCLUDES_H) */


