2025-04-27 07:49:33 -04:00

132 lines
3.7 KiB
C

/***************************************************************************\
*
* FREELIST.H
*
* Copyright (C) Microsoft Corporation 1995.
* All Rights reserved.
*
*****************************************************************************
*
* Program Description: Private header for FREELIST Modules
*
*****************************************************************************
*
* Revision History: Created 07/17/95 - davej
*
*
*****************************************************************************
*
* Notes: Free blocks are always kept in order by their starting position.
*
*****************************************************************************
*
* Known Bugs: None
*
\***************************************************************************/
// If Critical structures get messed up in /Zp8, use:
// #pragma pack(1)
#ifndef __FREELIST_H__
#define __FREELIST_H__
#include <fileoff.h>
#include <iterror.h>
/***************************************************************************\
*
* Defines
*
\***************************************************************************/
typedef HANDLE HFREELIST;
/***************************************************************************\
*
* Types
*
\***************************************************************************/
/***************************************************************************\
*
* Free List Private Types
*
\***************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
#pragma pack(1)
typedef struct _freelist_stats
{
DWORD dwBytesInFreeList;
DWORD dwBytesLostForever;
DWORD dwSmallestBlock;
DWORD dwLargestBlock;
WORD wNumBlocks;
} FREELISTSTATS, FAR * LPFREELISTSTATS;
typedef struct _freelist_hr
{
WORD wNumBlocks; // Number of blocks in list
WORD wMaxBlocks; // Max number of blocks in list
DWORD dwLostBytes; // Number of bytes totally lost forever
} FREELISTHDR;
typedef struct _freeitem
{
FILEOFFSET foStart; // Start of free block
FILEOFFSET foBlock; // Size of free block
} FREEITEM, FAR * QFREEITEM;
typedef struct _freelist
{
FREELISTHDR flh;
FREEITEM afreeitem[1];
} FREELIST, FAR * QFREELIST;
#pragma pack()
HFREELIST PASCAL FAR FreeListInit ( WORD, LPERRB );
HFREELIST PASCAL FAR FreeListRealloc ( HFREELIST, WORD, LPERRB );
LONG PASCAL FAR FreeListSize ( HFREELIST, LPERRB );
LONG PASCAL FAR FreeListBlockUsed ( HFREELIST, LPERRB );
RC PASCAL FAR FreeListDestroy ( HFREELIST );
RC FAR FreeListAdd ( HFREELIST, FILEOFFSET, FILEOFFSET );
FILEOFFSET PASCAL FAR FreeListGetBestFit ( HFREELIST, FILEOFFSET, LPERRB );
FILEOFFSET PASCAL FAR FreeListGetBlockAt ( HFREELIST, FILEOFFSET, LPERRB );
RC PASCAL FAR FreeListGetLastBlock ( HFREELIST, FILEOFFSET *, FILEOFFSET *, FILEOFFSET );
HFREELIST PASCAL FAR FreeListInitFromMem ( LPVOID, LPERRB );
RC PASCAL FAR FreeListGetMem ( HFREELIST, LPVOID );
LONG PASCAL FAR FreeListSizeFromMem ( LPVOID, LPERRB );
RC PASCAL FAR FreeListGetStats ( HFREELIST hFreeList, LPFREELISTSTATS lpStats);
/***************************************************************************
*
* Cute little memory block manager incorporating the free list!
*
***************************************************************************/
LPSTR PASCAL FAR EXPORT_API NewMemory( WORD wcbSize );
void PASCAL FAR EXPORT_API DisposeMemory( LPSTR lpMemory);
WORD PASCAL FAR EXPORT_API StatusOfMemory( void );
#ifdef __cplusplus
}
#endif
#endif // __FREELIST_H__
/* EOF */