#ifndef __WINDOWS_TYPES__
#define __WINDOWS_TYPES__

#define MAX_NUM_DEVICES 50
#include <sys/time.h>

typedef unsigned int                    DWORD;
typedef unsigned int                    ULONG;
typedef unsigned short                  USHORT;
typedef unsigned short                  SHORT;
typedef unsigned char                   UCHAR;
typedef unsigned short                  WORD;
typedef unsigned char                   BYTE;
typedef BYTE                                    *LPBYTE;
typedef unsigned int                    BOOL;
typedef unsigned char                   BOOLEAN;
typedef unsigned char                   CHAR;
typedef BOOL                                    *LPBOOL;
typedef UCHAR                                   *PUCHAR;
typedef const char                              *LPCSTR;
typedef char                                    *PCHAR;
typedef void                                    *PVOID;
typedef void                                    *HANDLE;
typedef unsigned int                    LONG;
typedef int                                             INT;
typedef unsigned int                    UINT;
typedef char                                    *LPSTR;
typedef char                                    *LPTSTR;
typedef DWORD                                   *LPDWORD;
typedef WORD                                    *LPWORD;
typedef ULONG                                   *PULONG;
typedef PVOID                                   LPVOID;
typedef void                                    VOID;
typedef unsigned long long int  ULONGLONG;

typedef struct _OVERLAPPED {
        DWORD Internal;
        DWORD InternalHigh;
        DWORD Offset;
        DWORD OffsetHigh;
        HANDLE hEvent;
} OVERLAPPED, *LPOVERLAPPED;

typedef struct _SECURITY_ATTRIBUTES {
        DWORD nLength;
        LPVOID lpSecurityDescriptor;
        BOOL bInheritHandle;
} SECURITY_ATTRIBUTES , *LPSECURITY_ATTRIBUTES;

typedef struct timeval SYSTEMTIME;
typedef struct timeval FILETIME;
#ifndef TRUE
#define TRUE    1
#endif
#ifndef FALSE
#define FALSE   0
#endif

//
// Modem Status Flags
//
#define MS_CTS_ON           ((DWORD)0x0010)
#define MS_DSR_ON           ((DWORD)0x0020)
#define MS_RING_ON          ((DWORD)0x0040)
#define MS_RLSD_ON          ((DWORD)0x0080)

//
// Error Flags
//

#define CE_RXOVER           0x0001  // Receive Queue overflow
#define CE_OVERRUN          0x0002  // Receive Overrun Error
#define CE_RXPARITY         0x0004  // Receive Parity Error
#define CE_FRAME            0x0008  // Receive Framing error
#define CE_BREAK            0x0010  // Break Detected
#define CE_TXFULL           0x0100  // TX Queue is full
#define CE_PTO              0x0200  // LPTx Timeout
#define CE_IOE              0x0400  // LPTx I/O Error
#define CE_DNS              0x0800  // LPTx Device not selected
#define CE_OOP              0x1000  // LPTx Out-Of-Paper
#define CE_MODE             0x8000  // Requested mode unsupported

#ifndef INVALID_HANDLE_VALUE
#define INVALID_HANDLE_VALUE 0xFFFFFFFF
#endif

#endif