204 lines
6.7 KiB
C
204 lines
6.7 KiB
C
/* OpenDoors Online Software Programming Toolkit
|
|
* (C) Copyright 1991 - 1999 by Brian Pirie.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*
|
|
*
|
|
* File: ODPlat.h
|
|
*
|
|
* Description: Contains platform-related definitions and prototypes for
|
|
* those function's whose implementation is platform-specific
|
|
* (functions implemented in odplat.c). Non-platform specific
|
|
* utility functions are defined in odutil.h and implemented in
|
|
* odutil.c.
|
|
*
|
|
* Revisions: Date Ver Who Change
|
|
* ---------------------------------------------------------------
|
|
* Oct 14, 1994 6.00 BP Created.
|
|
* Nov 01, 1994 6.00 BP Added ODDir...() functions.
|
|
* Dec 31, 1994 6.00 BP Added timing, file delete functions.
|
|
* Dec 31, 1994, 6.00 BP Added ODMultitasker and ODPlatInit()
|
|
* Nov 14, 1995 6.00 BP 32-bit portability.
|
|
* Nov 17, 1995 6.00 BP Added multithreading functions.
|
|
* Dec 13, 1995 6.00 BP Added ODThreadWaitForExit().
|
|
* Dec 13, 1995 6.00 BP Added ODThreadGetCurrent().
|
|
* Jan 23, 1996 6.00 BP Added ODProcessExit().
|
|
* Jan 30, 1996 6.00 BP Add semaphore timeout.
|
|
* Jan 31, 1996 6.00 BP Add ODTimerLeft(), rm ODTimerSleep().
|
|
* Feb 19, 1996 6.00 BP Changed version number to 6.00.
|
|
* Mar 03, 1996 6.10 BP Begin version 6.10.
|
|
*/
|
|
|
|
#ifndef _INC_ODPLAT
|
|
#define _INC_ODPLAT
|
|
|
|
#include <time.h>
|
|
|
|
#include "ODTypes.h"
|
|
#include "ODGen.h"
|
|
|
|
#ifdef ODPLAT_NIX
|
|
#include <sys/time.h>
|
|
#endif
|
|
|
|
#ifdef ODPLAT_WIN32
|
|
#include "windows.h"
|
|
#endif /* ODPLAT_WIN32 */
|
|
|
|
/* odplat.c initialization function prototype */
|
|
void ODPlatInit(void);
|
|
|
|
|
|
/* ========================================================================= */
|
|
/* Millisecond timer functions. */
|
|
/* ========================================================================= */
|
|
|
|
/* Timer data type. */
|
|
typedef struct
|
|
{
|
|
#ifdef ODPLAT_DOS
|
|
clock_t Start;
|
|
clock_t Duration;
|
|
#elif defined(ODPLAT_NIX)
|
|
time_t Start;
|
|
tODMilliSec Duration;
|
|
#else /* !ODPLAT_DOS */
|
|
tODMilliSec Start;
|
|
tODMilliSec Duration;
|
|
#endif /* !ODPLAT_DOS */
|
|
} tODTimer;
|
|
|
|
/* Timer function prototypes. */
|
|
void ODTimerStart(tODTimer *pTimer, tODMilliSec Duration);
|
|
BOOL ODTimerElapsed(tODTimer *pTimer);
|
|
void ODTimerWaitForElapse(tODTimer *pTimer);
|
|
tODMilliSec ODTimerLeft(tODTimer *pTimer);
|
|
|
|
|
|
/* ========================================================================= */
|
|
/* Multithreading and synchronization support. */
|
|
/* ========================================================================= */
|
|
|
|
#ifdef OD_MULTITHREADED
|
|
|
|
/* Thread handle data type. */
|
|
#ifdef ODPLAT_WIN32
|
|
typedef HANDLE tODThreadHandle;
|
|
#endif /* ODPLAT_WIN32 */
|
|
|
|
/* Thread priority enumeration. */
|
|
typedef enum
|
|
{
|
|
OD_PRIORITY_LOWEST,
|
|
OD_PRIORITY_BELOW_NORMAL,
|
|
OD_PRIORITY_NORMAL,
|
|
OD_PRIORITY_ABOVE_NORMAL,
|
|
OD_PRIORITY_HIGHEST
|
|
} tODThreadPriority;
|
|
|
|
/* Thread start proceedure type. */
|
|
#define OD_THREAD_FUNC WINAPI
|
|
#ifdef ODPLAT_WIN32
|
|
typedef DWORD (OD_THREAD_FUNC ptODThreadProc)(void *);
|
|
#endif /* ODPLAT_WIN32 */
|
|
|
|
/* Thread creation, temination and suspension. */
|
|
tODResult ODThreadCreate(tODThreadHandle *phThread,
|
|
ptODThreadProc *pfThreadProc, void *pThreadParam);
|
|
void ODThreadExit();
|
|
tODResult ODThreadTerminate(tODThreadHandle hThread);
|
|
tODResult ODThreadSuspend(tODThreadHandle hThread);
|
|
tODResult ODThreadResume(tODThreadHandle hThread);
|
|
tODResult ODThreadSetPriority(tODThreadHandle hThread,
|
|
tODThreadPriority ThreadPriority);
|
|
void ODThreadWaitForExit(tODThreadHandle hThread);
|
|
tODThreadHandle ODThreadGetCurrent(void);
|
|
|
|
|
|
/* Semaphore handle data type. */
|
|
#ifdef ODPLAT_WIN32
|
|
typedef HANDLE tODSemaphoreHandle;
|
|
#endif /* ODPLAT_WIN32 */
|
|
|
|
/* Semaphore manipulation functions. */
|
|
tODResult ODSemaphoreAlloc(tODSemaphoreHandle *phSemaphore, INT nInitialCount,
|
|
INT nMaximumCount);
|
|
void ODSemaphoreFree(tODSemaphoreHandle hSemaphore);
|
|
void ODSemaphoreUp(tODSemaphoreHandle hSemaphore, INT nIncrementBy);
|
|
tODResult ODSemaphoreDown(tODSemaphoreHandle hSemaphore, tODMilliSec Timeout);
|
|
|
|
#endif /* OD_MULTITHREADED */
|
|
|
|
void ODProcessExit(INT nExitCode);
|
|
|
|
|
|
/* ========================================================================= */
|
|
/* DOS multitasker information. */
|
|
/* ========================================================================= */
|
|
#ifdef ODPLAT_DOS
|
|
typedef enum
|
|
{
|
|
kMultitaskerNone,
|
|
kMultitaskerDV,
|
|
kMultitaskerWin,
|
|
kMultitaskerOS2
|
|
} tODMultitasker;
|
|
|
|
extern tODMultitasker ODMultitasker;
|
|
#endif /* ODPLAT_DOS */
|
|
|
|
|
|
/* ========================================================================= */
|
|
/* Directory Access. */
|
|
/* ========================================================================= */
|
|
|
|
/* Open directory handle type. */
|
|
typedef tODHandle tODDirHandle;
|
|
|
|
/* Directory entry structure. */
|
|
#define DIR_FILENAME_SIZE 1024
|
|
|
|
#define DIR_ATTRIB_NORMAL 0x00
|
|
#define DIR_ATTRIB_RDONLY 0x01
|
|
#define DIR_ATTRIB_HIDDEN 0x02
|
|
#define DIR_ATTRIB_SYSTEM 0x04
|
|
#define DIR_ATTRIB_LABEL 0x08
|
|
#define DIR_ATTRIB_DIREC 0x10
|
|
#define DIR_ATTRIB_ARCH 0x20
|
|
|
|
typedef struct
|
|
{
|
|
char szFileName[DIR_FILENAME_SIZE];
|
|
WORD wAttributes;
|
|
time_t LastWriteTime;
|
|
DWORD dwFileSize;
|
|
} tODDirEntry;
|
|
|
|
/* Directory function prototypes. */
|
|
tODResult ODDirOpen(CONST char *pszPath, WORD wAttributes, tODDirHandle *phDir);
|
|
tODResult ODDirRead(tODDirHandle hDir, tODDirEntry *pDirEntry);
|
|
void ODDirClose(tODDirHandle hDir);
|
|
void ODDirChangeCurrent(char *pszPath);
|
|
void ODDirGetCurrent(char *pszPath, INT nMaxPathChars);
|
|
|
|
|
|
/* ========================================================================= */
|
|
/* Miscellaneous Functions. */
|
|
/* ========================================================================= */
|
|
tODResult ODFileDelete(CONST char *pszPath);
|
|
BOOL ODFileAccessMode(char *pszFilename, int nAccessMode);
|
|
|
|
#endif /* !_INC_ODPLAT */
|