/*
 ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл
 лл                                                                         лл
 лл                    Copyright (C) 1999 Symantec Corp.                    лл
 лл                           All Rights Reserved                           лл
 лл                                                                         лл
 лл      Information in this file is proprietary and confidential, and      лл
 лл        may not be copied, reproduced or distributed in any manner       лл
 лл     without the express written permission of Symantec Corp.            лл
 лл                                                                         лл
 ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл
*/

#ifndef _INC_GPWIN
   #define _INC_GPWIN

// Message crackers for new handling or params

// (int)(short) cast is VERY important due to sign extension
#define ParseWM_COMMAND(hwnd, id, cmd, wParam, lParam) \
   (id = (int)(short)LOWORD(wParam), cmd = HIWORD(wParam), hwnd = (HWND)lParam)

#ifdef __cplusplus
#define PostWM_COMMAND(hwnd, id, cmd, hwndChild) \
   ::PostMessage(hwnd, WM_COMMAND, (WPARAM)MAKELONG(id,cmd), (LPARAM)hwndChild)
#else
#define PostWM_COMMAND(hwnd, id, cmd, hwndChild) \
   PostMessage(hwnd, WM_COMMAND, (WPARAM)MAKELONG(id,cmd), (LPARAM)hwndChild)
#endif

#ifdef __cplusplus
#define SendWM_COMMAND(hwnd, id, cmd, hwndChild) \
   ::SendMessage(hwnd, WM_COMMAND, (WPARAM)MAKELONG(id,cmd), (LPARAM)hwndChild)
#else
#define SendWM_COMMAND(hwnd, id, cmd, hwndChild) \
   SendMessage(hwnd, WM_COMMAND, (WPARAM)MAKELONG(id,cmd), (LPARAM)hwndChild)
#endif

#ifdef __cplusplus
   //::PostMessage(hwnd, WM_DDE_EXECUTE, (WPARAM)wParam, (LPARAM)lParam)
#define PostWM_DDE_EXECUTE(hwnd, wParam, hCmd) \
   ::PostMessage(hwnd, WM_DDE_EXECUTE, (WPARAM)wParam, PackDDElParam(WM_DDE_EXECUTE, 0, (UINT)hCmd))
#else
   //PostMessage(hwnd, WM_DDE_EXECUTE, (WPARAM)wParam, (LPARAM)lParam)
#define PostWM_DDE_EXECUTE(hwnd, wParam, hCmd) \
   PostMessage(hwnd, WM_DDE_EXECUTE, (WPARAM)wParam, PackDDElParam(WM_DDE_EXECUTE, 0, (UINT)hCmd))
#endif

#define PostWM_DDE_POKE(hwnd, wParam, hData, aItem) \
   PostMessage(hwnd, WM_DDE_POKE, (WPARAM)wParam, PackDDElParam(WM_DDE_POKE, (UINT)hData, aItem) )

// (int)(short) cast is VERY important due to sign extension
#define ParseWM_HSCROLL( hwnd, Code, Position, wParam, lParam ) \
   (Code = LOWORD(wParam), Position = (int)(short)HIWORD(wParam), hwnd = (HWND)lParam)

#define PostWM_HSCROLL(hwnd, Code, Position, hwndChild)\
   PostMessage(hwnd, WM_HSCROLL, (WPARAM)MAKELONG(Code,Position), (LPARAM)hwndChild)

#define SendWM_HSCROLL(hwnd, Code, Position, hwndChild) \
   SendMessage(hwnd, WM_HSCROLL, (WPARAM)MAKELONG(Code,Position), (LPARAM)hwndChild)

// (int)(short) cast is VERY important due to sign extension
#define ParseWM_VSCROLL( hwnd, Code, Position, wParam, lParam ) \
   (Code = LOWORD(wParam), Position = (int)(short)HIWORD(wParam), hwnd = (HWND)lParam)

#define PostWM_VSCROLL(hwnd, Code, Position, hwndChild)\
   PostMessage(hwnd, WM_VSCROLL, (WPARAM)MAKELONG(Code,Position), (LPARAM)hwndChild)

#ifdef __cplusplus
#define SendWM_VSCROLL(hwnd, Code, Position, hwndChild) \
   ::SendMessage(hwnd, WM_VSCROLL, (WPARAM)MAKELONG(Code,Position), (LPARAM)hwndChild)
#else
#define SendWM_VSCROLL(hwnd, Code, Position, hwndChild) \
   SendMessage(hwnd, WM_VSCROLL, (WPARAM)MAKELONG(Code,Position), (LPARAM)hwndChild)
#endif

#define PWGetCommError( PortHandle, comstat, dwErrors) \
   ClearCommError(PortHandle, &dwErrors, &comstat)

// define special or nonexistant types
#define _pascal
#define __pascal
#define _export
#define __export
#define far
#define _far
#define __far
#define HUGE_T
#define huge
#define _huge
#define __huge
#define near
#define _near
#define __near
#define _fastcall
#define __fastcall
#undef CDECL
#define CDECL _cdecl
#define _loadds
#define __loadds
#define _LOADDS

typedef DLGPROC             MAKEPROC;
typedef HANDLE              COMM_HANDLE;

// Current NT missing functions
#define Catch(a)            TRUE
#define Throw(a,b)          (a,b)
#define UnrealizeObject(a)  (a)
#define UnlockData(a)       (a)

// no need to far functions in NT, remap to normal functions
#ifndef _INC_WINDOWSX         // These guys are defined in WINDOWSX.H, so we really don't need them
#define _fmemccpy(w,x,y,z)    memccpy(w,x,y,z)
#define _fmemchr(x,y,z)       memchr(x,y,z)
#define _fmemcmp(x,y,z)       memcmp(x,y,z)
#define _fmemcpy(x,y,z)       memcpy(x,y,z)
#define _fmemicmp(x,y,z)      memicmp(x,y,z)
#define _fmemmove(x,y,z)      memmove(x,y,z)
#define _fmemset(x,y,z)       memset(x,y,z)
#define _fstrcat(x,y)         strcat(x,y)
#define _fstrchr(x,y)         strchr(x,y)
#define _fstrcmp(x,y)         strcmp(x,y)
#define _fstrcpy(x,y)         strcpy(x,y)
#define _fstrcspn(x,y)        strcspn(x,y)
#define _fstrdup(x)           strdup(x)
#define _fstricmp(x,y)        stricmp(x,y)
#define _fstrlen(x)           strlen(x)
#define _fstrlwr(x)           strlwr(x)
#define _fstrncat(x,y,z)      strncat(x,y,z)
#define _fstrncmp(x,y,z)      strncmp(x,y,z)
#define _fstrncpy(x,y,z)      strncpy(x,y,z)
#define _fstrnicmp(x,y,z)     strnicmp(x,y,z)
#define _fstrnset(x,y,z)      strnset(x,y,z)
#define _fstrpbrk(x,y)        strpbrk(x,y)
#define _fstrrchr(x,y)        strrchr(x,y)
#define _fstrrev(x)           strrev(x)
#define _fstrset(x,y)         strset(x,y)
#define _fstrspn(x,y)         strspn(x,y)
#define _fstrstr(x,y)         strstr(x,y)
#define _fstrtok(x,y)         strtok(x,y)
#define _fstrupr(x)           strupr(x)
#define _fmalloc(x)           malloc(x)
#define _ffree(x)             free(x)
#define _frealloc(x, y)       realloc(x, y)
#define _nfree(x)             free(x)
#define _nmalloc(x)           malloc(x)
#endif

#define FILE_HANDLE     HANDLE

#define MODEM_NAME_LENGTH       58
#define EXPORTED           __declspec(dllexport)

#endif  // #ifndef  _INC_GPWIN
