home *** CD-ROM | disk | FTP | other *** search
- /*
- * M A P I W I N . H
- *
- * Definitions used by the MAPI Development Team to aid in
- * developing single-source service providers that run on
- * both WIN32 and WIN16 platforms.
- * There are three sections.
- *
- * The first section defines how to call something that
- * is available by different methods in WIN16 vs. WIN32.
- * As such, they are totally new mechanisms.
- *
- * The second section establishes things that are available
- * AS-IS in one environment but we have to define for the
- * other environment.
- *
- * The third section simply defines a few conventions
- * (simplifications) for common operations.
- *
- * Copyright 1986-1996 Microsoft Corporation. All Rights Reserved.
- */
-
- /*
- * Routines are included in the first section to manage per-instance
- * global variables for DLLs. They assume that all of the DLL's
- * per-instance global variables live in a single block of memory.
- * Functions are provided to install and retrieve the correct block of
- * memory for the current instance.
- *
- * There are only two functions:
- *
- * PvGetInstanceGlobals Call this to get the address of the
- * per-instance globals structure.
- * ScSetinstanceGlobals Call this to install the
- * per-instance globals structure. It
- * may fail if the number of instances
- * exceeds a certain limit.
- *
- * The caller is free to choose the name, size, and allocation
- * method of the per-instance global variables structure.
- *
- * The WIN32 implementation uses a pointer in the DLL's data
- * segment. This assumes that the DLL gets a separate instance
- * of the default data segment per calling process.
- *
- * The WIN16 implementation uses a fixed array of pointers and a
- * matching fixed array of keys unique to the calling process.
- */
-
- /*
- * The second section consists largely of Win32 file I/O functions
- * that are not supported under Win16. These functions are
- * implemented in mapiwin.c, using DOS calls. Most have limitations
- * relative to their Win32 counterparts, which are spelled out in
- * the comments to the source code.
- */
-
- #ifndef __MAPIWIN_H__
- #pragma option push -b -a8 -pc -A- /*P_O_Push*/
- #define __MAPIWIN_H__
-
- #if defined (WIN32) && !defined (_WIN32)
- #define _WIN32
- #endif
-
- #include "mapinls.h"
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
-
- /********************************/
- /* Our conventions for things */
- /* we choose to do differently */
- /* on WIN16 vs. WIN32. */
- /********************************/
-
- #ifdef WIN16
-
- #define MULDIV(x,y,z) MulDiv32(x,y,z)
- #define IsBadReadPtr(lp,cb) FBadReadPtr(lp,cb)
-
- #define cInstMax 50
- LPVOID FAR PASCAL PvGetInstanceGlobals(void);
- LONG FAR PASCAL ScSetInstanceGlobals(LPVOID pv);
- LONG FAR PASCAL ScSetVerifyInstanceGlobals(LPVOID pv, DWORD dwPid);
- LPVOID FAR PASCAL PvGetVerifyInstanceGlobals(DWORD dwPid);
- LPVOID FAR PASCAL PvSlowGetInstanceGlobals(DWORD dwPid);
- BOOL __export FAR PASCAL FCleanupInstanceGlobals(WORD, DWORD);
-
- #elif defined(_MAC) /* !WIN16 */
-
- #define MULDIV(x,y,z) MulDiv(x,y,z)
-
- LPVOID FAR PASCAL PvGetInstanceGlobals(WORD wDataSet);
- LONG FAR PASCAL ScSetInstanceGlobals(LPVOID pv, WORD wDataSet);
- LONG FAR PASCAL ScSetVerifyInstanceGlobals(LPVOID pv, DWORD dwPid,
- WORD wDataSet);
- LPVOID FAR PASCAL PvGetVerifyInstanceGlobals(DWORD dwPid, DWORD wDataSet);
- LPVOID FAR PASCAL PvSlowGetInstanceGlobals(DWORD dwPid, DWORD wDataSet);
- BOOL FAR PASCAL FCleanupInstanceGlobals(WORD, DWORD);
-
- #else /* !WIN16 */
-
- #define MULDIV(x,y,z) MulDiv(x,y,z)
-
- extern LPVOID pinstX;
- #define PvGetInstanceGlobals() pinstX
- #define ScSetInstanceGlobals(_pv) (pinstX = _pv, 0)
- #define PvGetVerifyInstanceGlobals(_pid) pinstX
- #define ScSetVerifyInstanceGlobals(_pv,_pid) (pinstX = _pv, 0)
- #define PvSlowGetInstanceGlobals(_pid) pinstX
-
- #endif /* WIN16 */
-
- #if defined(_WIN32) && !defined(_MAC)
- #define szMAPIDLLSuffix "32"
- #elif defined(WIN16) || defined(DOS)
- #define szMAPIDLLSuffix ""
- #elif defined(_MAC)
- #define szMAPIDLLSuffix "M"
- #else
- #error "Don't know the suffix for DLLs on this platform"
- #endif
-
- /********************************/
- /* Things missing from one */
- /* system-provided environment */
- /* or the other. */
- /********************************/
-
- #if !defined(_WIN32)
- #define ZeroMemory(pb,cb) memset((pb),0,(cb))
- #define FillMemory(pb,cb,b) memset((pb),(b),(cb))
- #define CopyMemory(pbDst,pbSrc,cb) do \
- { \
- size_t _cb = (size_t)(cb); \
- if (_cb) \
- memcpy(pbDst,pbSrc,_cb);\
- } while (FALSE)
- #define MoveMemory(pbDst,pbSrc,cb) memmove((pbDst),(pbSrc),(cb))
-
- #define UNALIGNED
-
- #endif
-
- #if defined(WIN16) || defined(_MAC)
-
- #ifndef _MAC
- #include <error.h> /* for GetLastError() */
- #endif
-
- typedef int INT;
- typedef unsigned long ULONG;
- typedef short SHORT;
- typedef unsigned short USHORT;
- typedef double LONGLONG;
- typedef double DWORDLONG;
- typedef unsigned char UCHAR;
- typedef unsigned char FAR* PUCHAR;
- typedef int BOOL;
-
-
- #ifndef _MAC
- typedef char BOOLEAN;
-
- #ifndef _FILETIME_
- #define _FILETIME_
- typedef struct tagFILETIME
- {
- DWORD dwLowDateTime;
- DWORD dwHighDateTime;
- } FILETIME;
- #endif /* _FILETIME */
-
- typedef struct _SYSTEMTIME {
- WORD wYear;
- WORD wMonth;
- WORD wDayOfWeek;
- WORD wDay;
- WORD wHour;
- WORD wMinute;
- WORD wSecond;
- WORD wMilliseconds;
- } SYSTEMTIME, *PSYSTEMTIME, FAR *LPSYSTEMTIME;
-
- typedef struct _TIME_ZONE_INFORMATION {
- LONG Bias;
- CHAR StandardName[ 32 ]; /* was WCHAR */
- SYSTEMTIME StandardDate;
- LONG StandardBias;
- CHAR DaylightName[ 32 ]; /* was WCHAR */
- SYSTEMTIME DaylightDate;
- LONG DaylightBias;
- } TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, FAR *LPTIME_ZONE_INFORMATION;
-
-
- #if defined(DOS) || defined(WIN16)
- /* Simulate effect of afx header */
- #define __T(x) x
- #define _T(x) __T(x)
- #define TEXT _T
- #endif
-
- #define APIENTRY WINAPI
-
- #define SetForegroundWindow SetActiveWindow
-
- #define wsprintfA wsprintf
- #define GetWindowsDirectoryA GetWindowsDirectory
- #define GetSystemDirectoryA GetSystemDirectory
- #define GetPrivateProfileStringA GetPrivateProfileString
- #define GetPrivateProfileIntA GetPrivateProfileInt
- #define GetProfileStringA GetProfileString
- #define GetModuleFileNameA GetModuleFileName
- #define CharUpperBuffA CharUpperBuff
- #define LoadLibraryA LoadLibrary
- #define lstrcatA lstrcat
- #define RegisterWindowMessageA RegisterWindowMessage
- #define MAKEINTRESOURCEA MAKEINTRESOURCE
-
- #define WNDCLASSA WNDCLASS
-
- #endif /* !_MAC */
-
- /* Synchronization */
- #define InterlockedIncrement(plong) (++(*(plong)))
- #define InterlockedDecrement(plong) (--(*(plong)))
-
- #ifndef CreateMutex
- #define CreateMutexA CreateMutex
- #define CreateMutexW CreateMutex
- #define CreateMutex(pv, bool, sz) (INVALID_HANDLE_VALUE)
- #endif
-
- #define WaitForSingleObject(hObj, dw) ((void)0)
- #define ReleaseMutex(hObj) ((BOOL)1)
- #define CloseMutexHandle(hObj) TRUE
-
- #define CRITICAL_SECTION ULONG
- #define InitializeCriticalSection(_pcs) ((void)0)
- #define DeleteCriticalSection(_pcs) ((void)0)
- #define EnterCriticalSection(_pcs) ((void)0)
- #define LeaveCriticalSection(_pcs) ((void)0)
-
- #define MAX_PATH 260
-
- #ifndef _MAC
- /*
- * File Access Modes
- *
- * The possible combination of file access modes as passed into
- * the CreateFile() api map to OpenFile() as follows:
- *
- * GENERIC_READ OPEN_ACCESS_READONLY
- * GENERIC_WRITE OPEN_ACCESS_WRITEONLY
- * GENERIC_READ | GENERIC_WRITE OPEN_ACCESS_READWRITE
- *
- * 0 OPEN_SHARE_DENYREADWRITE
- * FILE_SHARE_READ OPEN_SHARE_DENYWRITE
- * FILE_SHARE_WRITE OPEN_SHARE_DENYREAD
- * FILE_SHARE_READ | FILE_SHARE_WRITE OPEN_SHARE_DENYNONE
- *
- * Due to the mappings we cannot pass them through directly,
- * so we will have to use a conversion within APIs that test
- * these bits. It would be best to use the Win32 #defines
- * for these flags and convert as needed in the APIs.
- */
- #define GENERIC_READ (0x80000000) /* from WINNT.H */
- #define GENERIC_WRITE (0x40000000) /* from WINNT.H */
- #define FILE_SHARE_READ (0x00000001) /* from WINNT.H */
- #define FILE_SHARE_WRITE (0x00000002) /* from WINNT.H */
- #endif /* _MAC */
-
- #define FILE_FLAG_SEQUENTIAL_SCAN 0x08000000
-
- #define CREATE_NEW 1
- #define CREATE_ALWAYS 2
- #define OPEN_EXISTING 3
- #define OPEN_ALWAYS 4
- #define TRUNCATE_EXISTING 5
-
- #ifndef _MAC
- #define INVALID_HANDLE_VALUE ((HANDLE)(-1))
- #define DELETE 0x00010000L
-
- #define FILE_BEGIN 0
- #define FILE_CURRENT 1
- #define FILE_END 2
- #endif
-
- #define FILE_ATTRIBUTE_READONLY 0x00000001
- #define FILE_ATTRIBUTE_HIDDEN 0x00000002
- #define FILE_ATTRIBUTE_SYSTEM 0x00000004
- #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
- #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
- #define FILE_ATTRIBUTE_NORMAL 0x00000080
- #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
-
- #define FILE_FLAG_WRITE_THROUGH 0x80000000
- #define FILE_FLAG_RANDOM_ACCESS 0x10000000
-
- #ifndef _MAC
- typedef struct _WIN32_FIND_DATA {
- DWORD dwFileAttributes;
- FILETIME ftCreationTime;
- FILETIME ftLastAccessTime;
- FILETIME ftLastWriteTime;
- DWORD nFileSizeHigh;
- DWORD nFileSizeLow;
- DWORD dwReserved0;
- DWORD dwReserved1;
- CHAR cFileName[ MAX_PATH ];
- CHAR cAlternateFileName[ 16 ];
- } WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA;
-
- #define TIME_ZONE_ID_INVALID 0xFFFFFFFF
- #endif
- #define TIME_ZONE_ID_UNKNOWN 0
- #define TIME_ZONE_ID_STANDARD 1
- #define TIME_ZONE_ID_DAYLIGHT 2
-
-
-
- DWORD WINAPI GetLastError(void);
- DWORD WINAPI GetFileAttributes(LPCSTR lpFileName);
- DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh);
- BOOL WINAPI GetFileTime(HANDLE hFile, FILETIME FAR *lpftCreation,
- FILETIME FAR *lpftLastAccess, FILETIME FAR *lpftLastWrite);
- BOOL WINAPI SetFileTime(HANDLE hFile, const FILETIME FAR *lpftCreation,
- const FILETIME FAR *lpftLastAccess,
- const FILETIME FAR *lpftLastWrite);
- #ifndef _MAC
- /* IsTask can crash - here's a safer one. */
- BOOL WINAPI FIsTask(HTASK hTask);
-
- HANDLE WINAPI CreateFile(LPCSTR lpFileName, DWORD dwDesiredAccess,
- DWORD dwShareMode, LPVOID lpSecurityAttributes,
- DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes,
- HANDLE hTemplateFile);
- BOOL WINAPI ReadFile(HANDLE hFile, LPVOID lpBuffer,
- DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead,
- LPVOID lpOverlapped);
- BOOL WINAPI WriteFile(HANDLE hFile, LPCVOID lpBuffer,
- DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten,
- LPVOID lpOverlapped);
- #endif
- DWORD WINAPI SetFilePointer(HANDLE hFile, LONG lDistanceToMove,
- LONG FAR *lpDistanceToMoveHigh, DWORD dwMoveMethod);
- BOOL WINAPI SetEndOfFile(HANDLE hFile);
- BOOL WINAPI CloseHandle(HANDLE hObject);
- DWORD WINAPI GetTempPath(DWORD nBufferLength, LPSTR lpBuffer);
- UINT WINAPI GetTempFileName32 (LPCSTR lpPathName, LPCSTR lpPrefixString,
- UINT uUnique, LPSTR lpTempFileName);
- BOOL WINAPI DeleteFile(LPCSTR lpFileName);
- #ifndef _MAC
- BOOL WINAPI CreateDirectory(LPCSTR lpPathName, LPVOID lpSecurityAttributes);
- #endif
- BOOL WINAPI RemoveDirectory(LPCSTR lpPathName);
- BOOL WINAPI CopyFile(LPCSTR szSrc, LPCSTR szDst, BOOL fFailIfExists);
- BOOL WINAPI MoveFile(LPCSTR lpExistingFileName, LPCSTR lpNewFileName);
- HANDLE WINAPI FindFirstFile(LPCSTR lpFileName, LPWIN32_FIND_DATA lpFindFileData);
- BOOL WINAPI FindNextFile(HANDLE hFindFile, LPWIN32_FIND_DATA lpFindFileData);
- BOOL WINAPI FindClose(HANDLE hFindFile);
- DWORD WINAPI GetFullPathName(LPCSTR lpFileName, DWORD nBufferLength,
- LPSTR lpBuffer, LPSTR *lpFilePart);
- void WINAPI Sleep(DWORD dwMilliseconds);
- LONG WINAPI CompareFileTime(const FILETIME FAR *, const FILETIME FAR *);
- BOOL WINAPI LocalFileTimeToFileTime(const FILETIME FAR *, FILETIME FAR *);
- BOOL WINAPI FileTimeToLocalFileTime(const FILETIME FAR *, FILETIME FAR *);
- BOOL WINAPI FileTimeToSystemTime(const FILETIME FAR *, SYSTEMTIME FAR *);
- BOOL WINAPI SystemTimeToFileTime(const SYSTEMTIME FAR *, FILETIME FAR *);
- void WINAPI GetSystemTime(SYSTEMTIME FAR *);
- void WINAPI GetLocalTime(SYSTEMTIME FAR *);
- BOOL WINAPI FileTimeToDosDateTime(const FILETIME FAR * lpFileTime,
- WORD FAR *lpFatDate, WORD FAR *lpFatTime);
- BOOL WINAPI DosDateTimeToFileTime(WORD wFatDate, WORD wFatTime,
- FILETIME FAR * lpFileTime);
- DWORD WINAPI GetTimeZoneInformation(
- LPTIME_ZONE_INFORMATION lpTimeZoneInformation);
- BOOL WINAPI SetTimeZoneInformation(
- const TIME_ZONE_INFORMATION FAR *lpTimeZoneInformation);
-
- DWORD WINAPI GetCurrentProcessId(void);
- long WINAPI MulDiv32(long, long, long);
- #ifndef _MAC
- BOOL WINAPI FBadReadPtr(const void FAR* lp, UINT cb);
- #endif
-
- #else /* !WIN16 */
-
- /* Remaps GetTempFileName32() to the real 32bit version */
-
- #define GetTempFileName32(_szPath,_szPfx,_n,_lpbuf) GetTempFileName(_szPath,_szPfx,_n,_lpbuf)
-
- #define CloseMutexHandle CloseHandle
-
- #endif /* !WIN16 */
-
-
- #ifdef _MAC
- #define CRITICAL_SECTION ULONG
- #define InitializeCriticalSection(_pcs) ((void)0)
- #define DeleteCriticalSection(_pcs) ((void)0)
- #define EnterCriticalSection(_pcs) ((void)0)
- #define LeaveCriticalSection(_pcs) ((void)0)
- #endif
-
- /********************************/
- /* Our private conventions */
- /* (common to WIN16/WIN32) */
- /********************************/
-
- #define Cbtszsize(_a) ((lstrlen(_a)+1)*sizeof(TCHAR))
- #define CbtszsizeA(_a) ((lstrlenA(_a) + 1))
- #define CbtszsizeW(_a) ((lstrlenW(_a) + 1) * sizeof(WCHAR))
- #define HexCchOf(_s) (sizeof(_s)*2+1)
- #define HexSizeOf(_s) (HexCchOf(_s)*sizeof(TCHAR))
-
- BOOL WINAPI IsBadBoundedStringPtr(const void FAR* lpsz, UINT cchMax);
-
- /* FUTURE - obsolete. OLE2 no longer contains these */
- #define GetSCode GetScode
- #define ReportResult(_a,_b,_c,_d) ResultFromScode(_b)
-
- #ifdef __cplusplus
- }
- #endif
-
- #pragma option pop /*P_O_Pop*/
- #endif /* __MAPIWIN_H__ */
-