//--------------------------------------------------------------
//
//  WINDEF.H 
//
//  Basic Windows Type Definitions  
// 
//  dBASE Samples Group
//
//  $Revision:   1.4  $
//
//  Portions copyright (c) 1985-1995, Microsoft Corp. 
//
//--------------------------------------------------------------

#ifndef _WINDEF_
#define _WINDEF_

//  These can be used to include only part of the 
//  WIN32API.PRG file.
//

#define WIN32API_ALLSECTIONS         0xFFFFFFFF
#define WIN32API_KERNEL              0x00000001
#define WIN32API_USER                0x00000002
#define WIN32API_GDI                 0x00000004
#define WIN32API_ADVAPI              0x00000008
#define WIN32API_SHELL               0x00000010
#define WIN32API_INIFILE             0x00000020
#define WIN32API_REGISTRY            0x00000040
#define WIN32API_DIALOG              0x00000080
#define WIN32API_NETWORK             0x00000100

#define ULONG               CULONG
#define PULONG              CPTR CULONG
#define USHORT              CUSHORT
#define PUSHORT             CPTR CSHORT
#define UCHAR               CUCHAR
#define PUCHAR              CPTR
#define PSZ                 CSTRING

#define MAX_PATH          260

#define CFALSE              0
#define CTRUE               1

#define DWORD               CULONG
#define BOOL                CLOGICAL
#define BYTE                CUCHAR
#define WORD                CUSHORT
//#define FLOAT               CFLOAT   // Conflicts with FLOAT()

#define PFLOAT              CPTR CFLOAT
#define PBOOL               CPTR CLONG  // Should be CLOGICAL
#define LPBOOL              CPTR CLONG  // Should be CLOGICAL
#define PBYTE               CPTR
#define LPBYTE              CPTR
#define PINT                CPTR CINT
#define LPINT               CPTR CINT
#define PWORD               CPTR CUSHORT
#define LPWORD              CPTR CUSHORT
#define LPLONG              CPTR CLONG
#define PDWORD              CPTR DWORD
#define LPDWORD             CPTR DWORD
#define PVOID               CPTR
#define LPVOID              CPTR
#define LPCVOID             CPTR

// #define INT                 CINT   // Can't use INT, conflicts with INT()
#define UINT                CUINT
#define PUINT               CPTR CUINT


//
//  BUILD Version: 0093     Increment this if a change has global effects
//
// Copyright (c) 1990-1995  Microsoft Corporation
//
// Module Name:
//
//    winnt.h
//
// Abstract:
//
//    This module defines the 32-Bit Windows types and constants that are
//    defined by NT, but exposed through the Win32 API.
//
//

//
// Basics
//

#define VOID       CVOID
#define CHAR       CCHAR
#define SHORT      CSHORT
#define LONG       CLONG

#define WCHAR      CSHORT
#define PWCHAR     CPTR CSHORT
#define LPWCH      CPTR CSHORT
#define PWCH       CPTR CSHORT
#define LPCWCH     CPTR CSHORT
#define PCWCH      CPTR CSHORT
#define NWPSTR     CPTR CSHORT
#define LPWSTR     CPTR CSHORT
#define PWSTR      CPTR CSHORT
#define LPCWSTR    CPTR CSHORT
#define PCWSTR     CPTR CSHORT

//
// ANSI (Multi-byte Character) types
//
#define PCHAR      CPTR
#define LPCH       CPTR
#define PCH        CPTR
#define LPCCH      CPTR
#define PCCH       CPTR
#define NPSTR      CSTRING
#define LPSTR      CSTRING
#define PSTR       CSTRING
#define LPCSTR     CSTRING
#define PCSTR      CSTRING

//
// Neutral ANSI/UNICODE types and macros
//

#define PTCHAR       CPTR
#define PTBYTE       CPTR
#define LPTCH        LPSTR
#define PTCH         LPSTR
#define PTSTR        LPSTR
#define LPTSTR       LPSTR
#define LPCTSTR      LPCSTR

#define PSHORT       CPTR CSHORT
#define PLONG        CPTR CLONG
#define HANDLE       CHANDLE
#define PHANDLE      CPTR CUINT

//#define CCHAR        CCHAR      
#define LCID         DWORD
#define PLCID        PDWORD
#define LANGID       WORD

#define LONGLONG     CDOUBLE
#define DWORDLONG    CDOUBLE

#define PLONGLONG    CPTR CDOUBLE
#define PDWORDLONG   CPTR CDOUBLE

#define USN          LONGLONG

#define LARGE_INTEGER    CPTR
#define PLARGE_INTEGER   CPTR
#define ULARGE_INTEGER   CPTR
#define PULARGE_INTEGER  CPTR

#define LUID             LARGE_INTEGER
#define PLUID            PLARGE_INTEGER

#define SECURITY_INFORMATION  DWORD
#define PSECURITY_INFORMATION PDWORD
// End winnt.h

// Types use for passing & returning polymorphic values 
#define WPARAM              UINT
#define LPARAM              LONG
#define LRESULT             LONG

//
//  Cast macros added for Visual dBASE
//
#define CASTBYTE(a)         (mod(a,2^8))
#define CASTWORD(a)         (mod(a,2^16))
#define CASTLONG(a)         (mod(a,2^32))

#define MAKEWORD(a, b)      (bitor(CASTBYTE(a),bitlshift(CASTBYTE(b), 8)))
#define MAKELONG(a, b)      (bitor(CASTWORD(a),bitlshift(CASTWORD(b),16)))
#define LOWORD(l)           (CASTWORD(l))
#define HIWORD(l)           (bitrshift(CASTLONG(l),16))
#define LOBYTE(w)           (CASTBYTE(w))
#define HIBYTE(w)           (bitrshift(CASTWORD(w),8))

// #define HWND             CHANDLE  // conflicts with dBASE hWnd property
#define CHWND               CHANDLE  // substitute for standard HWND
#define HHOOK               CHANDLE

#define ATOM                WORD

#define SPHANDLE            CPTR CUINT
#define LPHANDLE            CPTR CUINT

#define HGLOBAL             HANDLE
#define HLOCAL              HANDLE
//#define GLOBALHANDLE        HANDLE   // Conflicts with API function name since
//#define LOCALHANDLE         HANDLE   // dBASE is not case sensitive

#define FARPROC             CPTR
#define NEARPROC            CPTR

#define HGDIOBJ             HANDLE

#define HACCEL              HANDLE
#define HBITMAP             HANDLE
#define HBRUSH              HANDLE
#define HCOLORSPACE         HANDLE
#define HDC                 HANDLE
#define HGLRC               HANDLE
#define HDESK               HANDLE
#define HENHMETAFILE        HANDLE
#define HFONT               HANDLE
#define HICON               HANDLE
#define PHICON              CPTR
#define HMENU               HANDLE
#define HMETAFILE           HANDLE
#define HINSTANCE           HANDLE
#define HMODULE             HINSTANCE   // HMODULEs can be used in place of HINSTANCEs 
#define HPALETTE            HANDLE
#define HPEN                HANDLE
#define HRGN                HANDLE
#define HRSRC               HANDLE
#define HSTR                HANDLE
#define HTASK               HANDLE
#define HWINSTA             HANDLE
#define HKL                 HANDLE

#define HFILE               CINT
#define HCURSOR             HICON   // HICONs & HCURSORs are polymorphic 

#define COLORREF            CULONG         // DWORD
#define LPCOLORREF          CPTR CULONG

//
//  Added for Visual dBASE
//
#define ENUM                SHORT
#define PSTRUCTURE          CPTR
#define LPSTRUCTURE         CPTR
#define va_list             CPTR
//
// From WINGDI.H
//
#define PDEVMODEA           LPSTRUCTURE
#define LPDEVMODEA          LPSTRUCTURE
#define PDEVMODE            LPSTRUCTURE
#define LPDEVMODE           LPSTRUCTURE


// OTHERS
#define LPRECT              LPSTRUCTURE
#define LPPOINT             LPSTRUCTURE

#endif // _WINDEF_ 
