osd_util.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:10k
- /* BSDI osd_util.h,v 1.8 1998/06/03 19:14:58 karels Exp */
- /*
- * Copyright (c) 1996-1999 Distributed Processing Technology Corporation
- * All rights reserved.
- *
- * Redistribution and use in source form, with or without modification, are
- * permitted provided that redistributions of source code must retain the
- * above copyright notice, this list of conditions and the following disclaimer.
- *
- * This software is provided `as is' by Distributed Processing Technology and
- * any express or implied warranties, including, but not limited to, the
- * implied warranties of merchantability and fitness for a particular purpose,
- * are disclaimed. In no event shall Distributed Processing Technology be
- * liable for any direct, indirect, incidental, special, exemplary or
- * consequential damages (including, but not limited to, procurement of
- * substitute goods or services; loss of use, data, or profits; or business
- * interruptions) however caused and on any theory of liability, whether in
- * contract, strict liability, or tort (including negligence or otherwise)
- * arising in any way out of the use of this driver software, even if advised
- * of the possibility of such damage.
- *
- */
- #ifndef __OSD_UTIL_H
- #define __OSD_UTIL_H
- /*File - OSD_UTIL.H
- ****************************************************************************
- *
- *Description:
- *
- * This file contains defines and function prototypes that are
- *operating system dependent. The resources defined in this file
- *are not specific to any particular application.
- *
- *Copyright Distributed Processing Technology, Corp.
- * 140 Candace Dr.
- * Maitland, Fl. 32751 USA
- * Phone: (407) 830-5522 Fax: (407) 260-5366
- * All Rights Reserved
- *
- *Author: Doug Anderson
- *Date: 1/7/94
- *
- *Editors:
- *
- *Remarks:
- *
- *
- *****************************************************************************/
- /*Definitions - Defines & Constants ----------------------------------------- */
- /*----------------------------- */
- /* Operating system selections: */
- /*----------------------------- */
- /*#define _DPT_MSDOS */
- /*#define _DPT_WIN_3X */
- /*#define _DPT_WIN_4X */
- /*#define _DPT_WIN_NT */
- /*#define _DPT_NETWARE */
- /*#define _DPT_OS2 */
- /*#define _DPT_SCO */
- /*#define _DPT_UNIXWARE */
- /*#define _DPT_SOLARIS */
- /*#define _DPT_NEXTSTEP */
- /*#define _DPT_BANYAN */
- /*-------------------------------- */
- /* Include the OS specific defines */
- /*-------------------------------- */
- /*#define OS_SELECTION From Above List */
- /*#define SEMAPHORE_T ??? */
- /*#define DLL_HANDLE_T ??? */
- #if (defined(KERNEL) && (defined(__FreeBSD__) || defined(__bsdi__)))
- # include "i386/isa/dpt_osd_defs.h"
- #else
- # include "osd_defs.h"
- #endif
- #ifndef DPT_UNALIGNED
- #define DPT_UNALIGNED
- #endif
- #ifndef DPT_EXPORT
- #define DPT_EXPORT
- #endif
- #ifndef DPT_IMPORT
- #define DPT_IMPORT
- #endif
- #ifndef DPT_RUNTIME_IMPORT
- #define DPT_RUNTIME_IMPORT DPT_IMPORT
- #endif
- /*--------------------- */
- /* OS dependent defines */
- /*--------------------- */
- #if defined (_DPT_MSDOS) || defined (_DPT_WIN_3X)
- #define _DPT_16_BIT
- #else
- #define _DPT_32_BIT
- #endif
- #if defined (_DPT_SCO) || defined (_DPT_UNIXWARE) || defined (_DPT_SOLARIS) || defined (_DPT_AIX) || defined (SNI_MIPS) || defined (_DPT_BSDI) || defined (_DPT_FREE_BSD) || defined(_DPT_LINUX)
- #define _DPT_UNIX
- #endif
- #if defined (_DPT_WIN_3x) || defined (_DPT_WIN_4X) || defined (_DPT_WIN_NT)
- || defined (_DPT_OS2)
- #define _DPT_DLL_SUPPORT
- #endif
- #if !defined (_DPT_MSDOS) && !defined (_DPT_WIN_3X) && !defined (_DPT_NETWARE)
- #define _DPT_PREEMPTIVE
- #endif
- #if !defined (_DPT_MSDOS) && !defined (_DPT_WIN_3X)
- #define _DPT_MULTI_THREADED
- #endif
- #if !defined (_DPT_MSDOS)
- #define _DPT_MULTI_TASKING
- #endif
- /* These exist for platforms that */
- /* chunk when accessing mis-aligned */
- /* data */
- #if defined (SNI_MIPS) || defined (_DPT_SOLARIS)
- #if defined (_DPT_BIG_ENDIAN)
- #if !defined (_DPT_STRICT_ALIGN)
- #define _DPT_STRICT_ALIGN
- #endif
- #endif
- #endif
- /* Determine if in C or C++ mode */
- #ifdef __cplusplus
- #define _DPT_CPP
- #else
- #define _DPT_C
- #endif
- /*-------------------------------------------------------------------*/
- /* Under Solaris the compiler refuses to accept code like: */
- /* { {"DPT"}, 0, NULL .... }, */
- /* and complains about the {"DPT"} part by saying "cannot use { } */
- /* to initialize char*". */
- /* */
- /* By defining these ugly macros we can get around this and also */
- /* not have to copy and #ifdef large sections of code. I know that */
- /* these macros are *really* ugly, but they should help reduce */
- /* maintenance in the long run. */
- /* */
- /*-------------------------------------------------------------------*/
- #if !defined (DPTSQO)
- #if defined (_DPT_SOLARIS)
- #define DPTSQO
- #define DPTSQC
- #else
- #define DPTSQO {
- #define DPTSQC }
- #endif /* solaris */
- #endif /* DPTSQO */
- /*---------------------- */
- /* OS dependent typedefs */
- /*---------------------- */
- #if defined (_DPT_MSDOS) || defined (_DPT_SCO)
- #define BYTE unsigned char
- #define WORD unsigned short
- #endif
- #ifndef _DPT_TYPEDEFS
- #define _DPT_TYPEDEFS
- typedef unsigned char uCHAR;
- typedef unsigned short uSHORT;
- typedef unsigned int uINT;
- typedef unsigned long uLONG;
- typedef union {
- uCHAR u8[4];
- uSHORT u16[2];
- uLONG u32;
- } access_U;
- #endif
- #if !defined (NULL)
- #define NULL 0
- #endif
- /*Prototypes - function ----------------------------------------------------- */
- #ifdef __cplusplus
- extern "C" { /* Declare all these functions as "C" functions */
- #endif
- /*------------------------ */
- /* Byte reversal functions */
- /*------------------------ */
- /* Reverses the byte ordering of a 2 byte variable */
- #if (!defined(osdSwap2))
- uSHORT osdSwap2(DPT_UNALIGNED uSHORT *);
- #endif // !osdSwap2
- /* Reverses the byte ordering of a 4 byte variable and shifts left 8 bits */
- #if (!defined(osdSwap3))
- uLONG osdSwap3(DPT_UNALIGNED uLONG *);
- #endif // !osdSwap3
- #ifdef _DPT_NETWARE
- #include "novpass.h" /* For DPT_Bswapl() prototype */
- /* Inline the byte swap */
- #ifdef __cplusplus
- inline uLONG osdSwap4(uLONG *inLong) {
- return *inLong = DPT_Bswapl(*inLong);
- }
- #else
- #define osdSwap4(inLong) DPT_Bswapl(inLong)
- #endif // cplusplus
- #else
- /* Reverses the byte ordering of a 4 byte variable */
- # if (!defined(osdSwap4))
- uLONG osdSwap4(DPT_UNALIGNED uLONG *);
- # endif // !osdSwap4
- /* The following functions ALWAYS swap regardless of the *
- * presence of DPT_BIG_ENDIAN */
- uSHORT trueSwap2(DPT_UNALIGNED uSHORT *);
- uLONG trueSwap4(DPT_UNALIGNED uLONG *);
- #endif // netware
- /*-------------------------------------*
- * Network order swap functions *
- * *
- * These functions/macros will be used *
- * by the structure insert()/extract() *
- * functions. *
- *
- * We will enclose all structure *
- * portability modifications inside *
- * #ifdefs. When we are ready, we *
- * will #define DPT_PORTABLE to begin *
- * using the modifications. *
- *-------------------------------------*/
- uLONG netSwap4(uLONG val);
- #if defined (_DPT_BIG_ENDIAN)
- // for big-endian we need to swap
- #ifndef NET_SWAP_2
- #define NET_SWAP_2(x) (((x) >> 8) | ((x) << 8))
- #endif // NET_SWAP_2
- #ifndef NET_SWAP_4
- #define NET_SWAP_4(x) netSwap4((x))
- #endif // NET_SWAP_4
- #else
- // for little-endian we don't need to do anything
- #ifndef NET_SWAP_2
- #define NET_SWAP_2(x) (x)
- #endif // NET_SWAP_2
- #ifndef NET_SWAP_4
- #define NET_SWAP_4(x) (x)
- #endif // NET_SWAP_4
- #endif // big endian
- /*----------------------------------- */
- /* Run-time loadable module functions */
- /*----------------------------------- */
- /* Loads the specified run-time loadable DLL */
- DLL_HANDLE_T osdLoadModule(uCHAR *);
- /* Unloads the specified run-time loadable DLL */
- uSHORT osdUnloadModule(DLL_HANDLE_T);
- /* Returns a pointer to a function inside a run-time loadable DLL */
- void * osdGetFnAddr(DLL_HANDLE_T,uCHAR *);
- /*--------------------------------------- */
- /* Mutually exclusive semaphore functions */
- /*--------------------------------------- */
- /* Create a named semaphore */
- SEMAPHORE_T osdCreateNamedSemaphore(char *);
- /* Create a mutually exlusive semaphore */
- SEMAPHORE_T osdCreateSemaphore(void);
- /* create an event semaphore */
- SEMAPHORE_T osdCreateEventSemaphore(void);
- /* create a named event semaphore */
- SEMAPHORE_T osdCreateNamedEventSemaphore(char *);
- /* Destroy the specified mutually exclusive semaphore object */
- uSHORT osdDestroySemaphore(SEMAPHORE_T);
- /* Request access to the specified mutually exclusive semaphore */
- uLONG osdRequestSemaphore(SEMAPHORE_T,uLONG);
- /* Release access to the specified mutually exclusive semaphore */
- uSHORT osdReleaseSemaphore(SEMAPHORE_T);
- /* wait for a event to happen */
- uLONG osdWaitForEventSemaphore(SEMAPHORE_T, uLONG);
- /* signal an event */
- uLONG osdSignalEventSemaphore(SEMAPHORE_T);
- /* reset the event */
- uLONG osdResetEventSemaphore(SEMAPHORE_T);
- /*----------------- */
- /* Thread functions */
- /*----------------- */
- /* Releases control to the task switcher in non-preemptive */
- /* multitasking operating systems. */
- void osdSwitchThreads(void);
- /* Starts a thread function */
- uLONG osdStartThread(void *,void *);
- /* what is my thread id */
- uLONG osdGetThreadID(void);
- /* wakes up the specifed thread */
- void osdWakeThread(uLONG);
- /* osd sleep for x miliseconds */
- void osdSleep(uLONG);
- #define DPT_THREAD_PRIORITY_LOWEST 0x00
- #define DPT_THREAD_PRIORITY_NORMAL 0x01
- #define DPT_THREAD_PRIORITY_HIGHEST 0x02
- uCHAR osdSetThreadPriority(uLONG tid, uCHAR priority);
- #ifdef __cplusplus
- } /* end the xtern "C" declaration */
- #endif
- #endif /* osd_util_h */