319 lines
9.5 KiB
C
319 lines
9.5 KiB
C
|
/*************************************************************************
|
||
|
* *
|
||
|
* MVOPSYS.H *
|
||
|
* *
|
||
|
* Copyright (C) Microsoft Corporation 1990-1994 *
|
||
|
* All Rights reserved. *
|
||
|
* *
|
||
|
**************************************************************************
|
||
|
* *
|
||
|
* Module Intent *
|
||
|
* Include platform dependent include files *
|
||
|
* *
|
||
|
**************************************************************************
|
||
|
* *
|
||
|
* Current Owner: BinhN *
|
||
|
* *
|
||
|
*************************************************************************/
|
||
|
|
||
|
#ifndef __MVOPSYS_H_
|
||
|
#define __MVOPSYS_H_
|
||
|
|
||
|
/* There is C and C++ code, use these defines for interfaces between the 2 */
|
||
|
#if defined( __cplusplus ) // {
|
||
|
#define EXTC extern "C"
|
||
|
#define EXTCSTART EXTC {
|
||
|
#define EXTCEND }
|
||
|
#else // } {
|
||
|
#define EXTC
|
||
|
#define EXTCSTART
|
||
|
#define EXTCEND
|
||
|
#endif // }
|
||
|
|
||
|
|
||
|
#include <windows.h>
|
||
|
#include <windowsx.h>
|
||
|
#include <string.h>
|
||
|
|
||
|
#if defined(_WIN32) && !defined(_32BIT)
|
||
|
#define _32BIT
|
||
|
#endif
|
||
|
|
||
|
#ifdef _32BIT // {
|
||
|
#include <wincon.h>
|
||
|
|
||
|
/*****************************************************
|
||
|
* 32-BIT SPECIFIC DEFINITIONS
|
||
|
*
|
||
|
* All 32-bit platforms related definitions should be
|
||
|
* placed here, eg. _MAC, _NT, etc
|
||
|
*****************************************************/
|
||
|
|
||
|
/* Some _32BIT specific bits & pieces */
|
||
|
|
||
|
#define _loadds
|
||
|
#define __loadds
|
||
|
#define far
|
||
|
#define _far
|
||
|
#define huge
|
||
|
#define _huge
|
||
|
#define _export
|
||
|
#define __export
|
||
|
#define EXPORT_API
|
||
|
#define PRIVATE
|
||
|
|
||
|
// These old macros are still used in some places.
|
||
|
#define WRITE OF_WRITE
|
||
|
#define READ OF_READ
|
||
|
|
||
|
// Define PAGE_SIZE (this is processor dependent)
|
||
|
#ifdef ALPHA
|
||
|
#define PAGE_SIZE 8192
|
||
|
#else
|
||
|
#define PAGE_SIZE 4096
|
||
|
#endif
|
||
|
|
||
|
/**************************************************
|
||
|
* FUNCTIONS SPECIFIC TO 32-BIT ONLY
|
||
|
**************************************************/
|
||
|
|
||
|
#ifdef _MAC
|
||
|
#define LOCKSEMAPHORE(pl) ((*(pl)==0) ? (*(pl)=1,0) : 1)
|
||
|
#define UNLOCKSEMAPHORE(pl) (*(pl)=0)
|
||
|
#else
|
||
|
#define LOCKSEMAPHORE(pl) InterlockedExchange((pl),1)
|
||
|
#define UNLOCKSEMAPHORE(pl) InterlockedExchange((pl),0)
|
||
|
#endif
|
||
|
|
||
|
/* GetProfileString */
|
||
|
#define GETPROFILESTRING(a,b,c,d,e)
|
||
|
|
||
|
/* MakeProcInstance is not needed for Win32 */
|
||
|
|
||
|
#define MAKEPROCINSTANCE(a,b) a
|
||
|
#define FREEPROCINSTANCE(a)
|
||
|
|
||
|
/* DLL currently not supported */
|
||
|
|
||
|
#define FREELIBRARY(a)
|
||
|
|
||
|
/* Function calls changes between 16 and 32 bit */
|
||
|
|
||
|
#define SETVIEWPORTORG(a,b,c) SetViewportOrgEx(a,b,c,NULL)
|
||
|
#define SETVIEWPORTEXT(a,b,c) SetViewportExtEx(a,b,c,NULL)
|
||
|
#define SETWINDOWEXT(a,b,c) SetWindowExtEx(a,b,c,NULL)
|
||
|
#define SETWINDOWORG(a,b,c) SetWindowOrgEx(a,b,c,NULL)
|
||
|
#define MOVETO(a,b,c) MoveToEx(a,b,c,NULL)
|
||
|
#define SETBRUSHORG(a,b,c) SetBrushOrgEx(a,b,c,NULL)
|
||
|
#define ENUMFONTFAMILIES(a,b,c,d) EnumFontFamilies(a,b,c,(LPARAM)d)
|
||
|
#define GETCWD( addr, len ) (GetCurrentDirectory( len, addr ) ? addr : NULL)
|
||
|
#define MAKEPOINT(l) { (LONG)(WORD)(l) , (LONG)(WORD)(l >> 16)}
|
||
|
|
||
|
// Can't have NULL as path... must be a string
|
||
|
#define GETTEMPFILENAME GetTempFileNameEx
|
||
|
|
||
|
WORD EXPORT_API PASCAL FAR GetTempFileNameEx(
|
||
|
LPCSTR lpszPath, /* address of name of dir. where temp. file is created */
|
||
|
LPCSTR lpszPrefix, /* address of prefix of temp. filename */
|
||
|
WORD uUnique, /* number used to create temp. filename */
|
||
|
LPSTR lpszTempFile) ; /* address buffer that will receive temp. filename */
|
||
|
|
||
|
#define MEMCPY memmove
|
||
|
#define MEMSET memset
|
||
|
#define MEMCMP memcmp
|
||
|
#define FREE free
|
||
|
#define MALLOC malloc
|
||
|
#define REALLOC realloc
|
||
|
#define MEMMOVE memmove
|
||
|
#define QVCOPY memmove
|
||
|
#define VSNPRINTF _vsnprintf
|
||
|
#define SPRINTF wsprintf
|
||
|
#define ITOA _itoa
|
||
|
#define ATOI atoi
|
||
|
#define ATOL atol
|
||
|
#define ISDIGIT isdigit
|
||
|
#define ISXDIGIT isxdigit
|
||
|
#define QvCopy memmove
|
||
|
#define STRLEN strlen
|
||
|
#define STRCPY strcpy
|
||
|
#define STRDUP _strdup
|
||
|
#define STRCHR strchr
|
||
|
#define STRCAT strcat
|
||
|
#define STRTOK strtok
|
||
|
#define STRUPR _strupr
|
||
|
#define STRCMP strcmp
|
||
|
#define STRICMP _stricmp
|
||
|
#define STRNICMP _strnicmp
|
||
|
#define STRNCPY strncpy
|
||
|
#define STRNCAT strncat
|
||
|
|
||
|
// Define some new macros
|
||
|
// I'm afraid of just defining the ones
|
||
|
// above to the appropriate UNICODE versions
|
||
|
// since the B-tree code (for example) is not
|
||
|
// yet UNICODE
|
||
|
|
||
|
#define WSTRLEN wcslen
|
||
|
#define WSTRCPY wcscpy
|
||
|
#define WSTRDUP _wcsdup
|
||
|
#define WSTRCHR wcschr
|
||
|
#define WSTRCAT wcscat
|
||
|
#define WSTRTOK wcstok
|
||
|
#define WSTRUPR _wcsupr
|
||
|
#define WSTRCMP wcscmp
|
||
|
#define WSTRICMP _wcsicmp
|
||
|
#define WSTRNICMP _wcsnicmp
|
||
|
#define WSTRNCPY wcsncpy
|
||
|
#define WSTRNCAT wcsncat
|
||
|
#define WTOI _wtoi
|
||
|
#define WTOL _wtol
|
||
|
|
||
|
|
||
|
#define GETINSTANCE(h) ((HINSTANCE)GetWindowLong(h,GWL_HINSTANCE))
|
||
|
/***********************************************
|
||
|
* MAC SPECIFIC DEFINITIONS & DECLARATIONS
|
||
|
***********************************************/
|
||
|
|
||
|
#ifdef _MAC // {
|
||
|
|
||
|
/* Currently, Pascal convention is inefficient on the MAC, becuase:
|
||
|
* - Returned value are passed back on the stack instead of using register
|
||
|
* - For earlier CPU (<68910), the return code is less efficient
|
||
|
* movel (a7)+, a0
|
||
|
* adda.w #cbParams, a7
|
||
|
* jmp (a0)
|
||
|
*/
|
||
|
//#undef PASCAL
|
||
|
//#define PASCAL
|
||
|
#endif // }
|
||
|
|
||
|
#ifdef _BIG_E // BigEndian {
|
||
|
|
||
|
/* The below defines are needed to handle difference in architectures between
|
||
|
* Motorola's 68K and Intel's x86 memory mappings
|
||
|
*/
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C"
|
||
|
{
|
||
|
WORD PASCAL FAR SwapWord (WORD);
|
||
|
DWORD PASCAL FAR SwapLong (DWORD);
|
||
|
WORD PASCAL FAR GetMacWord (BYTE FAR *);
|
||
|
VOID PASCAL FAR SetMacWord (BYTE FAR *, WORD);
|
||
|
DWORD PASCAL FAR GetMacLong (BYTE FAR *);
|
||
|
VOID PASCAL FAR SetMacLong (BYTE FAR *, DWORD);
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#define GETWORD(p) GetMacWord((BYTE FAR *)(p))
|
||
|
#define SETWORD(p,w) SetMacWord((BYTE FAR *)(p),(w))
|
||
|
#define SWAPWORD(p) SwapWord((p))
|
||
|
#define GETLONG(p) GetMacLong((BYTE FAR *)(p))
|
||
|
#define SETLONG(p,l) SetMacLong((BYTE FAR *)(p),(l))
|
||
|
#define SWAPLONG(p) SwapLong((p))
|
||
|
#define GETVA(p) GetMacVA((p))
|
||
|
#define SWAPVA(p) GetMacVA((p))
|
||
|
#define GETMBHD(p,q) GetMacMBHD((p),(q))
|
||
|
#define GETMFCP(p,q) GetMacMFCP((p),(q))
|
||
|
#define HI_BYTE 1
|
||
|
#define LO_BYTE 0
|
||
|
|
||
|
#else // regular 32 bit }{
|
||
|
#define GETWORD(p) (*((USHORT UNALIGNED FAR *)(p)))
|
||
|
#define SETWORD(a, b) (*((USHORT UNALIGNED FAR *)(a))=(b))
|
||
|
#define GETLONG(p) (*((DWORD UNALIGNED FAR *)(p)))
|
||
|
#define SETLONG(p,l) ((*((DWORD UNALIGNED FAR *)(p))) = (l))
|
||
|
|
||
|
|
||
|
#define SWAPWORD(p) ((p))
|
||
|
#define SWAPLONG(p) ((p))
|
||
|
#define GETVA(p) ((p))
|
||
|
#define SWAPVA(p) ((p))
|
||
|
#define GETMBHD(p,q) QvCopy((p),(q), sizeof(MBHD))
|
||
|
#define GETMFCP(p,q) QvCopy((p),(q), sizeof(MFCP))
|
||
|
#define HI_BYTE 0
|
||
|
#define LO_BYTE 1
|
||
|
|
||
|
#endif // _BIG_E}
|
||
|
|
||
|
|
||
|
/*********************************************************************
|
||
|
* Typecast to get rid of the unalignment problems on the RISC
|
||
|
*********************************************************************/
|
||
|
typedef USHORT UNALIGNED FAR * LPUW;
|
||
|
typedef DWORD UNALIGNED FAR * LPUL;
|
||
|
|
||
|
#else
|
||
|
|
||
|
/***************************************************
|
||
|
* 16-BITS DEFINITIONS & DECLARATIONS
|
||
|
***************************************************/
|
||
|
|
||
|
#define EXPORT_API _export
|
||
|
#define UNALIGNED
|
||
|
|
||
|
#define GETWORD(p) (*((USHORT FAR UNALIGNED *)(p)))
|
||
|
#define SWAPWORD(p) (p)
|
||
|
#define GETLONG(p) (*((DWORD FAR UNALIGNED *)(p)))
|
||
|
#define SETLONG(p,l) ((*((DWORD FAR UNALIGNED *)(p))) = l)
|
||
|
#define SWAPLONG(p) (p)
|
||
|
#define GETVA(p) (p)
|
||
|
#define SWAPVA(p) (p)
|
||
|
#define GETMBHD(p,q) QvCopy((p),(q), sizeof(MBHD))
|
||
|
#define GETMFCP(p,q) QvCopy((p),(q), sizeof(MFCP))
|
||
|
#define HI_BYTE 0
|
||
|
#define LO_BYTE 1
|
||
|
|
||
|
#define LOCKSEMAPHORE(pl) ((*(pl)==0) ? (*(pl)=1,0) : 1)
|
||
|
#define UNLOCKSEMAPHORE(pl) (*(pl)=0)
|
||
|
|
||
|
/* GetProfileString */
|
||
|
#define GETPROFILESTRING(a,b,c,d,e) GetProfileString(a,b,c,d,e)
|
||
|
|
||
|
/* DLL currently not supported */
|
||
|
|
||
|
#define FREELIBRARY(a) FreeLibrary(a)
|
||
|
|
||
|
/* Viewport calls */
|
||
|
|
||
|
#define SETVIEWPORTORG(a,b,c) SetViewportOrg(a,b,c)
|
||
|
#define SETVIEWPORTEXT(a,b,c) SetViewportExt(a,b,c)
|
||
|
#define SETWINDOWEXT(a,b,c) SetWindowExt(a,b,c)
|
||
|
#define SETWINDOWORG(a,b,c) SetWindowOrg(a,b,c)
|
||
|
#define MOVETO(a,b,c) MoveTo(a,b,c)
|
||
|
#define SETBRUSHORG(a,b,c) SetBrushOrg(a,b,c)
|
||
|
#define ENUMFONTFAMILIES(a,b,c,d) EnumFontFamilies(a,b,c,(LPSTR)d)
|
||
|
#define GETCWD( addr, len ) getcwd( addr, len )
|
||
|
|
||
|
#define MEMCPY _fmemmove
|
||
|
#define MEMSET _fmemset
|
||
|
#define MEMCMP _fmemcmp
|
||
|
#define STRLEN _fstrlen
|
||
|
#define STRCPY _fstrcpy
|
||
|
#define STRDUP _fstrdup
|
||
|
#define STRCHR _fstrchr
|
||
|
#define STRCAT _fstrcat
|
||
|
#define STRTOK _fstrtok
|
||
|
#define STRUPR _fstrupr
|
||
|
#define STRCMP _fstrcmp
|
||
|
#define STRICMP _fstricmp
|
||
|
#define STRNICMP _fstrnicmp
|
||
|
#define FREE _ffree
|
||
|
#define MALLOC _fmalloc
|
||
|
#define REALLOC _frealloc
|
||
|
#define STRNCPY _fstrncpy
|
||
|
#define MEMMOVE _fmemmove
|
||
|
#define QVCOPY _fmemmove
|
||
|
#define VSNPRINTF _vsnprintf
|
||
|
#define STRNCAT _fstrncat
|
||
|
#define SPRINTF wsprintf
|
||
|
#define ITOA itoa
|
||
|
|
||
|
#define MAKEPROCINSTANCE(a,b) MakeProcInstance(a,b)
|
||
|
#define FREEPROCINSTANCE(a) FreeProcInstance(a)
|
||
|
#define GETTEMPFILENAME GetTempFileName
|
||
|
|
||
|
#define GETINSTANCE(h) ((HINSTANCE)GetWindowWord(h,GWW_HINSTANCE))
|
||
|
#endif // } _32BIT
|
||
|
#endif // __MVOPSYS_H_
|