text: /*
  
    Definitions for winsock 1.1
    
    Portions Copyright (c) 1980, 1983, 1988, 1993
    The Regents of the University of California.  All rights reserved.
  
    Portions Copyright (c) 1993 by Digital Equipment Corporation.
   */
  
  #ifndef _WINSOCK_H
  #define _WINSOCK_H
  #define _GNU_H_WINDOWS32_SOCKETS
  #include <windows.h>
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  #ifndef _SYS_TYPES_H
  typedef unsigned char	u_char;
  typedef unsigned short	u_short;
  typedef unsigned int	u_int;
  typedef unsigned long	u_long;
  #endif /* ndef _SYS_TYPES_H */
  typedef u_int	SOCKET;
  #ifndef FD_SETSIZE
  #define FD_SETSIZE	64
  #endif
  
  /* shutdown() how types */
  #define SD_RECEIVE      0x00
  #define SD_SEND         0x01
  #define SD_BOTH         0x02
  
  #ifndef _SYS_TYPES_H
  /* fd_set may have been defined by the newlib <sys/types.h>.  */
  #ifdef fd_set
  #undef fd_set
  #endif
  typedef struct fd_set {
  	u_int   fd_count;
  	SOCKET  fd_array[FD_SETSIZE];
  } fd_set;
  int PASCAL __WSAFDIsSet(SOCKET,fd_set*);
  #ifndef FD_CLR
  #define FD_CLR(fd,set) do { u_int __i;\
  for (__i = 0; __i < ((fd_set *)(set))->fd_count ; __i++) {\
  	if (((fd_set *)(set))->fd_array[__i] == fd) {\
  	while (__i < ((fd_set *)(set))->fd_count-1) {\
  		((fd_set*)(set))->fd_array[__i] = ((fd_set*)(set))->fd_array[__i+1];\
  		__i++;\
  	}\
  	((fd_set*)(set))->fd_count--;\
  	break;\
  	}\
  }\
  } while (0)
  #endif
  #ifndef FD_SET
  #define FD_SET(fd, set) do { \
      if (((fd_set *)(set))->fd_count < FD_SETSIZE) \
  	((fd_set *)(set))->fd_array[((fd_set *)(set))->fd_count++]=(fd);\
  }while (0)
  #endif
  #ifndef FD_ZERO
  #define FD_ZERO(set) (((fd_set *)(set))->fd_count=0)
  #endif
  #ifndef FD_ISSET
  #define FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (fd_set *)(set))
  #endif
  #endif /* ndef _SYS_TYPES_H */
  #ifndef __INSIDE_CYGWIN__
  struct timeval {
  	long    tv_sec;
  	long    tv_usec;
  };
  struct  hostent {
  	char	*h_name;
  	char	**h_aliases;
  	short	h_addrtype;
  	short	h_length;
  	char	**h_addr_list;
  #define h_addr h_addr_list[0]
  };
  struct linger {
  	u_short l_onoff;
  	u_short l_linger;
  };
  #endif /* ndef __INSIDE_CYGWIN__ */
  #define timerisset(tvp)	 ((tvp)->tv_sec || (tvp)->tv_usec)
  #define timercmp(tvp, uvp, cmp) \
  	((tvp)->tv_sec cmp (uvp)->tv_sec || \
  	 (tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec)
  #define timerclear(tvp)	 (tvp)->tv_sec = (tvp)->tv_usec = 0
  #define IOCPARM_MASK	0x7f
  #define IOC_VOID	0x20000000
  #define IOC_OUT	0x40000000
  #define IOC_IN	0x80000000
  #define IOC_INOUT	(IOC_IN|IOC_OUT)
  
  #ifndef __INSIDE_CYGWIN__
  #define _IO(x,y)	(IOC_VOID|((x)<<8)|(y))
  #define _IOR(x,y,t)	(IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
  #define _IOW(x,y,t)	(IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
  #define FIONBIO	_IOW('f', 126, u_long)
  #endif /* ndef __INSIDE_CYGWIN__ */
  
  #define FIONREAD	_IOR('f', 127, u_long)
  #define FIOASYNC	_IOW('f', 125, u_long)
  #define SIOCSHIWAT	_IOW('s',  0, u_long)
  #define SIOCGHIWAT	_IOR('s',  1, u_long)
  #define SIOCSLOWAT	_IOW('s',  2, u_long)
  #define SIOCGLOWAT	_IOR('s',  3, u_long)
  #define SIOCATMARK	_IOR('s',  7, u_long)
  
  #ifndef __INSIDE_CYGWIN__
  struct netent {
  	char	* n_name;
  	char	**n_aliases;
  	short	n_addrtype;
  	u_long n_net;
  };
  struct  servent {
  	char	*s_name;
  	char	**s_aliases;
  	short	s_port;
  	char	*s_proto;
  };
  struct  protoent {
  	char	*p_name;
  	char	**p_aliases;
  	short	p_proto;
  };
  #endif /* __INSIDE_CYGWIN__ */
  
  #define IPPROTO_IP	0
  #define IPPROTO_ICMP	1
  #define IPPROTO_GGP	2
  #define IPPROTO_TCP	6
  #define IPPROTO_PUP	12
  #define IPPROTO_UDP	17
  #define IPPROTO_IDP	22
  #define IPPROTO_ND	77
  #define IPPROTO_RAW	255
  #define IPPROTO_MAX	256
  #define IPPORT_ECHO	7
  #define IPPORT_DISCARD	9
  #define IPPORT_SYSTAT	11
  #define IPPORT_DAYTIME  13
  #define IPPORT_NETSTAT  15
  #define IPPORT_FTP      21
  #define IPPORT_TELNET   23
  #define IPPORT_SMTP     25
  #define IPPORT_TIMESERVER 37
  #define IPPORT_NAMESERVER 42
  #define IPPORT_WHOIS	43
  #define IPPORT_MTP	57
  #define IPPORT_TFTP	69
  #define IPPORT_RJE	77
  #define IPPORT_FINGER	79
  #define IPPORT_TTYLINK	87
  #define IPPORT_SUPDUP	95
  #define IPPORT_EXECSERVER	512
  #define IPPORT_LOGINSERVER	513
  #define IPPORT_CMDSERVER	514
  #define IPPORT_EFSSERVER	520
  #define IPPORT_BIFFUDP	512
  #define IPPORT_WHOSERVER	513
  #define IPPORT_ROUTESERVER	520
  #define IPPORT_RESERVED	1024
  #define IMPLINK_IP	155
  #define IMPLINK_LOWEXPER	156
  #define IMPLINK_HIGHEXPER       158
  struct in_addr {
  	union {
  		struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
  		struct { u_short s_w1,s_w2; } S_un_w;
  		u_long S_addr;
  	} S_un;
  #define s_addr  S_un.S_addr
  #define s_host  S_un.S_un_b.s_b2
  #define s_net   S_un.S_un_b.s_b1
  #define s_imp   S_un.S_un_w.s_w2
  #define s_impno S_un.S_un_b.s_b4
  #define s_lh    S_un.S_un_b.s_b3
  };
  #define IN_CLASSA(i)	((long)(i)&0x80000000)
  #define IN_CLASSA_NET	0xff000000
  #define IN_CLASSA_NSHIFT	24
  #define IN_CLASSA_HOST	0x00ffffff
  #define IN_CLASSA_MAX	128
  #define IN_CLASSB(i)	(((long)(i)&0xc0000000)==0x80000000)
  #define IN_CLASSB_NET	   0xffff0000
  #define IN_CLASSB_NSHIFT	16
  #define IN_CLASSB_HOST	  0x0000ffff
  #define IN_CLASSB_MAX	   65536
  #define IN_CLASSC(i)	(((long)(i)&0xe0000000)==0xc0000000)
  #define IN_CLASSC_NET	   0xffffff00
  #define IN_CLASSC_NSHIFT	8
  #define IN_CLASSC_HOST	  0xff
  #define INADDR_ANY	      (u_long)0
  #define INADDR_LOOPBACK	 0x7f000001
  #define INADDR_BROADCAST	(u_long)0xffffffff
  #define INADDR_NONE	0xffffffff
  struct sockaddr_in {
  	short	sin_family;
  	u_short	sin_port;
  	struct	in_addr sin_addr;
  	char	sin_zero[8];
  };
  #define WSADESCRIPTION_LEN	256
  #define WSASYS_STATUS_LEN	128
  typedef struct WSAData {
  	WORD	wVersion;
  	WORD	wHighVersion;
  	char	szDescription[WSADESCRIPTION_LEN+1];
  	char	szSystemStatus[WSASYS_STATUS_LEN+1];
  	unsigned short	iMaxSockets;
  	unsigned short	iMaxUdpDg;
  	char * 	lpVendorInfo;
  } WSADATA;
  typedef WSADATA *LPWSADATA;
  
  #ifndef __INSIDE_CYGWIN__
  #define IP_OPTIONS	1
  #define SO_DEBUG	1
  #define SO_ACCEPTCONN	2
  #define SO_REUSEADDR	4
  #define SO_KEEPALIVE	8
  #define SO_DONTROUTE	16
  #define SO_BROADCAST	32
  #define SO_USELOOPBACK	64
  #define SO_LINGER	128
  #define SO_OOBINLINE	256
  #define SO_DONTLINGER	(u_int)(~SO_LINGER)
  #define SO_SNDBUF	0x1001
  #define SO_RCVBUF	0x1002
  #define SO_SNDLOWAT	0x1003
  #define SO_RCVLOWAT	0x1004
  #define SO_SNDTIMEO	0x1005
  #define SO_RCVTIMEO	0x1006
  #define SO_ERROR	0x1007
  #define SO_TYPE	0x1008
  #define SO_CONNDATA	0x7000
  #define SO_CONNOPT	0x7001
  #define SO_DISCDATA	0x7002
  #define SO_DISCOPT	0x7003
  #define SO_CONNDATALEN	0x7004
  #define SO_CONNOPTLEN	0x7005
  #define SO_DISCDATALEN	0x7006
  #define SO_DISCOPTLEN	0x7007
  #define SO_OPENTYPE	0x7008
  #define SO_SYNCHRONOUS_ALERT	0x10
  #define SO_SYNCHRONOUS_NONALERT	0x20
  #define SO_MAXDG	0x7009
  #define SO_MAXPATHDG	0x700A
  #endif
  #define IP_MULTICAST_IF	2
  #define IP_MULTICAST_TTL	3
  #define IP_MULTICAST_LOOP	4
  #define IP_ADD_MEMBERSHIP	5
  #define IP_DROP_MEMBERSHIP  6
  #define IP_DEFAULT_MULTICAST_TTL   1
  #define IP_DEFAULT_MULTICAST_LOOP  1
  #define IP_MAX_MEMBERSHIPS	 20
  struct ip_mreq {
  	struct in_addr imr_multiaddr;
  	struct in_addr imr_interface;
  };
  #define INVALID_SOCKET (SOCKET)(~0)
  #define SOCKET_ERROR	(-1)
  #define SOCK_STREAM	1
  #define SOCK_DGRAM	2
  #define SOCK_RAW	3
  #define SOCK_RDM	4
  #define SOCK_SEQPACKET	5
  #define TCP_NODELAY	0x0001
  #define TCP_BSDURGENT	0x7000
  #define AF_UNSPEC	0
  #define AF_UNIX	1
  #define AF_INET	2
  #define AF_IMPLINK	3
  #define AF_PUP	4
  #define AF_CHAOS	5
  #define AF_IPX	6
  #define AF_NS	6
  #define AF_ISO	7
  #define AF_OSI	AF_ISO
  #define AF_ECMA	8
  #define AF_DATAKIT	9
  #define AF_CCITT	10
  #define AF_SNA	11
  #define AF_DECnet	12
  #define AF_DLI	13
  #define AF_LAT	14
  #define AF_HYLINK	15
  #define AF_APPLETALK	16
  #define AF_NETBIOS	17
  #define AF_VOICEVIEW	18
  #ifndef __INSIDE_CYGWIN__
  #define AF_MAX	19
  struct sockaddr {
  	u_short sa_family;
  	char	sa_data[14];
  };
  #endif /* ndef __INSIDE_CYGWIN__ */
  
  struct sockproto {
  	u_short sp_family;
  	u_short sp_protocol;
  };
  #define PF_UNSPEC	AF_UNSPEC
  #define PF_UNIX	AF_UNIX
  #define PF_INET	AF_INET
  #define PF_IMPLINK	AF_IMPLINK
  #define PF_PUP	AF_PUP
  #define PF_CHAOS	AF_CHAOS
  #define PF_NS	AF_NS
  #define PF_IPX	AF_IPX
  #define PF_ISO	AF_ISO
  #define PF_OSI	AF_OSI
  #define PF_ECMA	AF_ECMA
  #define PF_DATAKIT	AF_DATAKIT
  #define PF_CCITT	AF_CCITT
  #define PF_SNA	AF_SNA
  #define PF_DECnet	AF_DECnet
  #define PF_DLI	AF_DLI
  #define PF_LAT	AF_LAT
  #define PF_HYLINK	AF_HYLINK
  #define PF_APPLETALK	AF_APPLETALK
  #define PF_VOICEVIEW	AF_VOICEVIEW
  #define PF_MAX	AF_MAX
  #define SOL_SOCKET	0xffff
  #define SOMAXCONN	5
  #ifndef __INSIDE_CYGWIN__
  #define MSG_OOB	1
  #define MSG_PEEK	2
  #define MSG_DONTROUTE	4
  #endif  /* ndef __INSIDE_CYGWIN__ */
  #define MSG_MAXIOVLEN	16
  #define MSG_PARTIAL	0x8000
  #define MAXGETHOSTSTRUCT	1024
  #define FD_READ	1
  #define FD_WRITE	2
  #define FD_OOB	4
  #define FD_ACCEPT	8
  #define FD_CONNECT	16
  #define FD_CLOSE	32
  #define WSABASEERR	10000
  #define WSAEINTR	(WSABASEERR+4)
  #define WSAEBADF	(WSABASEERR+9)
  #define WSAEACCES	(WSABASEERR+13)
  #define WSAEFAULT	(WSABASEERR+14)
  #define WSAEINVAL	(WSABASEERR+22)
  #define WSAEMFILE	(WSABASEERR+24)
  #define WSAEWOULDBLOCK	(WSABASEERR+35)
  #define WSAEINPROGRESS	(WSABASEERR+36)
  #define WSAEALREADY	(WSABASEERR+37)
  #define WSAENOTSOCK	(WSABASEERR+38)
  #define WSAEDESTADDRREQ	(WSABASEERR+39)
  #define WSAEMSGSIZE	(WSABASEERR+40)
  #define WSAEPROTOTYPE	(WSABASEERR+41)
  #define WSAENOPROTOOPT	(WSABASEERR+42)
  #define WSAEPROTONOSUPPORT	(WSABASEERR+43)
  #define WSAESOCKTNOSUPPORT	(WSABASEERR+44)
  #define WSAEOPNOTSUPP	(WSABASEERR+45)
  #define WSAEPFNOSUPPORT	(WSABASEERR+46)
  #define WSAEAFNOSUPPORT	(WSABASEERR+47)
  #define WSAEADDRINUSE	(WSABASEERR+48)
  #define WSAEADDRNOTAVAIL	(WSABASEERR+49)
  #define WSAENETDOWN	(WSABASEERR+50)
  #define WSAENETUNREACH	(WSABASEERR+51)
  #define WSAENETRESET	(WSABASEERR+52)
  #define WSAECONNABORTED	(WSABASEERR+53)
  #define WSAECONNRESET	(WSABASEERR+54)
  #define WSAENOBUFS	(WSABASEERR+55)
  #define WSAEISCONN	(WSABASEERR+56)
  #define WSAENOTCONN	(WSABASEERR+57)
  #define WSAESHUTDOWN	(WSABASEERR+58)
  #define WSAETOOMANYREFS	(WSABASEERR+59)
  #define WSAETIMEDOUT	(WSABASEERR+60)
  #define WSAECONNREFUSED	(WSABASEERR+61)
  #define WSAELOOP	(WSABASEERR+62)
  #define WSAENAMETOOLONG	(WSABASEERR+63)
  #define WSAEHOSTDOWN	(WSABASEERR+64)
  #define WSAEHOSTUNREACH	(WSABASEERR+65)
  #define WSAENOTEMPTY	(WSABASEERR+66)
  #define WSAEPROCLIM	(WSABASEERR+67)
  #define WSAEUSERS	(WSABASEERR+68)
  #define WSAEDQUOT	(WSABASEERR+69)
  #define WSAESTALE	(WSABASEERR+70)
  #define WSAEREMOTE	(WSABASEERR+71)
  #define WSAEDISCON	(WSABASEERR+101)
  #define WSASYSNOTREADY	(WSABASEERR+91)
  #define WSAVERNOTSUPPORTED	(WSABASEERR+92)
  #define WSANOTINITIALISED	(WSABASEERR+93)
  #define WSAHOST_NOT_FOUND	(WSABASEERR+1001)
  #define WSATRY_AGAIN	(WSABASEERR+1002)
  #define WSANO_RECOVERY	(WSABASEERR+1003)
  #define WSANO_DATA	(WSABASEERR+1004)
  #define WSANO_ADDRESS	WSANO_DATA
  #ifndef __INSIDE_CYGWIN__
  #define h_errno WSAGetLastError()
  #define HOST_NOT_FOUND	WSAHOST_NOT_FOUND
  #define TRY_AGAIN	WSATRY_AGAIN
  #define NO_RECOVERY	WSANO_RECOVERY
  #define NO_DATA	WSANO_DATA
  #define NO_ADDRESS	WSANO_ADDRESS
  #endif
  SOCKET PASCAL accept(SOCKET,struct sockaddr*,int*);
  int PASCAL bind(SOCKET,const struct sockaddr*,int);
  int PASCAL closesocket(SOCKET);
  int PASCAL connect(SOCKET,const struct sockaddr*,int);
  int PASCAL ioctlsocket(SOCKET,long,u_long *);
  int PASCAL getpeername(SOCKET,struct sockaddr*,int*);
  int PASCAL getsockname(SOCKET,struct sockaddr*,int*);
  int PASCAL getsockopt(SOCKET,int,int,char*,int*);
  unsigned long PASCAL inet_addr(const char*);
  char * PASCAL inet_ntoa(struct in_addr);
  int PASCAL listen(SOCKET,int);
  int PASCAL recv(SOCKET,char*,int,int);
  int PASCAL recvfrom(SOCKET,char*,int,int,struct sockaddr*,int*);
  int PASCAL send(SOCKET,const char*,int,int);
  int PASCAL sendto(SOCKET,const char*,int,int,const struct sockaddr*,int);
  int PASCAL setsockopt(SOCKET,int,int,const char*,int);
  int PASCAL shutdown(SOCKET,int);
  SOCKET PASCAL socket(int,int,int);
  struct hostent* PASCAL gethostbyaddr(const char*,int,int);
  struct hostent* PASCAL gethostbyname(const char*);
  struct servent* PASCAL getservbyport(int,const char*);
  struct servent* PASCAL getservbyname(const char*,const char*);
  struct protoent* PASCAL getprotobynumber(int);
  struct protoent* PASCAL getprotobyname(const char*);
  int PASCAL WSAStartup(WORD,LPWSADATA);
  int PASCAL WSACleanup(void);
  void PASCAL WSASetLastError(int);
  int PASCAL WSAGetLastError(void);
  BOOL PASCAL WSAIsBlocking(void);
  int PASCAL WSAUnhookBlockingHook(void);
  FARPROC PASCAL WSASetBlockingHook(FARPROC);
  int PASCAL WSACancelBlockingCall(void);
  HANDLE PASCAL WSAAsyncGetServByName(HWND,u_int,const char*,const char*,char*,int);
  HANDLE PASCAL WSAAsyncGetServByPort(HWND,u_int,int,const char*,char*,int);
  HANDLE PASCAL WSAAsyncGetProtoByName(HWND,u_int,const char*,char*,int);
  HANDLE PASCAL WSAAsyncGetProtoByNumber(HWND,u_int,int,char*,int);
  HANDLE PASCAL WSAAsyncGetHostByName(HWND,u_int,const char*,char*,int);
  HANDLE PASCAL WSAAsyncGetHostByAddr(HWND,u_int,const char*,int,int,char*,int);
  int PASCAL WSACancelAsyncRequest(HANDLE);
  int PASCAL WSAAsyncSelect(SOCKET,HWND,u_int,long);
  int PASCAL WSARecvEx(SOCKET,char*,int,int*);
  typedef struct _TRANSMIT_FILE_BUFFERS {
  	PVOID Head;
  	DWORD HeadLength;
  	PVOID Tail;
  	DWORD TailLength;
  } TRANSMIT_FILE_BUFFERS, *PTRANSMIT_FILE_BUFFERS, *LPTRANSMIT_FILE_BUFFERS;
  BOOL PASCAL TransmitFile(SOCKET,HANDLE,DWORD,DWORD,LPOVERLAPPED,LPTRANSMIT_FILE_BUFFERS,DWORD);
  #ifndef __INSIDE_CYGWIN__
  u_long PASCAL htonl(u_long);
  u_long PASCAL ntohl(u_long);
  #ifdef _WIN32
  u_short PASCAL htons(u_long);
  u_short PASCAL ntohs(u_long);
  #else
  u_short PASCAL htons(u_short);
  u_short PASCAL ntohs(u_short);
  #endif
  int PASCAL select(int nfds,fd_set*,fd_set*,fd_set*,const struct timeval*);
  int PASCAL gethostname(char*,int);
  #endif /* ndef __INSIDE_CYGWIN__ */
  
  #define WSAMAKEASYNCREPLY(b,e)	MAKELONG(b,e)
  #define WSAMAKESELECTREPLY(e,error)	MAKELONG(e,error)
  #define WSAGETASYNCBUFLEN(l)	LOWORD(l)
  #define WSAGETASYNCERROR(l)	HIWORD(l)
  #define WSAGETSELECTEVENT(l)	LOWORD(l)
  #define WSAGETSELECTERROR(l)	HIWORD(l)
  
  typedef struct sockaddr SOCKADDR;
  typedef struct sockaddr *PSOCKADDR;
  typedef struct sockaddr *LPSOCKADDR;
  typedef struct sockaddr_in SOCKADDR_IN;
  typedef struct sockaddr_in *PSOCKADDR_IN;
  typedef struct sockaddr_in *LPSOCKADDR_IN;
  typedef struct linger LINGER;
  typedef struct linger *PLINGER;
  typedef struct linger *LPLINGER;
  typedef struct in_addr IN_ADDR;
  typedef struct in_addr *PIN_ADDR;
  typedef struct in_addr *LPIN_ADDR;
  typedef struct fd_set FD_SET;
  typedef struct fd_set *PFD_SET;
  typedef struct fd_set *LPFD_SET;
  typedef struct hostent HOSTENT;
  typedef struct hostent *PHOSTENT;
  typedef struct hostent *LPHOSTENT;
  typedef struct servent SERVENT;
  typedef struct servent *PSERVENT;
  typedef struct servent *LPSERVENT;
  typedef struct protoent PROTOENT;
  typedef struct protoent *PPROTOENT;
  typedef struct protoent *LPPROTOENT;
  typedef struct timeval TIMEVAL;
  typedef struct timeval *PTIMEVAL;
  typedef struct timeval *LPTIMEVAL;
  
  #ifdef __cplusplus
  }
  #endif
  #endif
  