home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Hack-Phreak Scene Programs
/
cleanhpvac.zip
/
cleanhpvac
/
CONTRSRC.ZIP
/
SRC
/
EMS.H
< prev
next >
Wrap
C/C++ Source or Header
|
1994-08-06
|
8KB
|
283 lines
/* EMS.H
*
* EMS heap manager, v1.10
*
* Copyright 1994 Petteri Kangaslampi and Jarno Paananen
*
* This file is part of the MIDAS Sound System, and may only be
* used, modified and distributed under the terms of the MIDAS
* Sound System license, LICENSE.TXT. By continuing to use,
* modify or distribute this file you indicate that you have
* read the license and understand and accept it fully.
*/
#ifndef __EMS_H
#define __EMS_H
struct emsHdl;
/****************************************************************************\
* struct emsBlock
* ---------------
* Description: Allocated EMS block structure
\****************************************************************************/
typedef struct emsBlk
{
ushort addr; /* address of block inside handle
memory area */
ushort bytes; /* size of block */
struct emsBlk *next; /* pointer to next block in same
handle */
struct emsBlk *prev; /* pointer to previous block */
ushort used; /* 1 if used, 0 if not */
struct emsHdl *handle; /* handle of the block */
} emsBlock;
/****************************************************************************\
* struct emsHandle
* ----------------
* Description: One EMS handle consisting of four pages. Used internally by
* heap manager.
\****************************************************************************/
typedef struct emsHdl
{
ushort handle; /* EMM handle number */
emsBlock *block; /* pointer to first block */
struct emsHdl *next; /* pointer to next handle */
struct emsHdl *prev; /* pointer to previous handle */
} emsHandle;
#ifdef __cplusplus
extern "C" {
#endif
/****************************************************************************\
*
* Function: int emsInit(int *emmOK);
*
* Description: Initializes EMS heap. Must be called before other EMS heap
* manager functions.
*
* Input: int *emmOK pointer to variable containing EMM
* status
*
* Returns: MIDAS error code.
* *emmOK contains 1 if Expanded Memory Manager was found (EMS
* initialized succesfully) or 0 if not. Note that the lack
* of Expanded Memory Manager is _not_ an error.
*
\****************************************************************************/
int CALLING emsInit(int *emmOK);
/****************************************************************************\
*
* Function: int emsClose(void);
*
* Description: Uninitializes EMS heap freeing all allocated blocks. Must be
* called before program exits if emsInit() has been called.
*
* Returns: MIDAS error code
*
\****************************************************************************/
int CALLING emsClose(void);
/****************************************************************************\
*
* Function: int emsAlloc(ushort bytes, emsBlock **ems);
*
* Description: Allocates an EMS memory block
*
* Input: ushort bytes number of bytes to be allocated
* emsBlock **ems Pointer to EMS Block pointer
*
* Returns: MIDAS error code.
* EMS block pointer stored in *ems, NULL if failure
*
\****************************************************************************/
int CALLING emsAlloc(ushort bytes, emsBlock **ems);
/****************************************************************************\
*
* Function: int emsFree(emsBlock *ems);
*
* Description: Deallocates an EMS block allocated with emsAlloc
*
* Input: emsBlock *ems pointer to block to be deallocated
*
* Returns: MIDAS error code
*
\****************************************************************************/
int CALLING emsFree(emsBlock *ems);
/****************************************************************************\
*
* Function: int emsMap(emsBlock *ems, void **memPtr);
*
* Description: Maps an EMS block to conventional memory.
*
* Input: emsBlock *ems pointer to block to be mapped
* void **memPtr pointer to conventional memory ptr
*
* Returns: MIDAS error code.
* Pointer to the conventional memory area where the block
* was mapped is stored in *memPtr, NULL if failure.
*
\****************************************************************************/
int CALLING emsMap(emsBlock *ems, void **memPtr);
/****************************************************************************\
*
* Function: int emsSave(void);
*
* Description: Saves the EMS status. To be used by TempoTimer. Can only be
* called once.
*
* Returns: MIDAS error code
*
\****************************************************************************/
int CALLING emsSave(void);
/****************************************************************************\
*
* Function: int emsRestore(void);
*
* Description: Restores EMS status saved with emsSave(). To be used by
* TempoTimer. Can only be called once.
*
* Returns: MIDAS error code
*
\****************************************************************************/
int CALLING emsRestore(void);
/****************************************************************************\
*
* Function: int emsAllocPages(emsHandle **emsh);
*
* Description: Allocates 4 pages of EMS memory to a handle. Used internally
* by EMS heap manager.
*
* Returns: MIDAS error code.
* Pointer to a emsHandle structure for the pages stored in
* *emsh, NULL if failure.
*
\****************************************************************************/
int CALLING emsAllocPages(emsHandle **emsh);
/****************************************************************************\
*
* Function: int emsFreePages(emsHandle *handle);
*
* Description: Deallocates an EMS handle allocated by emsAllocPages(). Used
* internally by EMS heap manager.
*
* Input: emsHandle *handle pointer to handle to be deallocated.
*
* Returns: MIDAS error code
*
\****************************************************************************/
int CALLING emsFreePages(emsHandle *handle);
/****************************************************************************\
*
* Function: int emsSafe(void);
*
* Description: Sets the EMS safety flag on so that the EMS heap manager
* can optimize page mappings. Until emsStopSafe() is restored,
* no other routine than emsMap() must touch the EMS page
* mappings
*
* Returns: MIDAS error code
*
\****************************************************************************/
int CALLING emsSafe(void);
/****************************************************************************\
*
* Function: int emsStopSafe(void);
*
* Description: Sets the EMS safety flag off.
*
* Returns: MIDAS error code
*
\****************************************************************************/
int CALLING emsStopSafe(void);
/****************************************************************************\
* enum emsFunctIDs
* ----------------
* Description: ID numbers for EMS Heap Manager functions
\****************************************************************************/
enum emsFunctIDs
{
ID_emsInit = ID_ems,
ID_emsClose,
ID_emsAlloc,
ID_emsFree,
ID_emsMap,
ID_emsSave,
ID_emsRestore,
ID_emsAllocPages,
ID_emsFreePages,
ID_emsSafe,
ID_emsStopSafe
};
#ifdef __cplusplus
}
#endif
#endif