home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magazyn Amiga Shareware Floppies
/
ma58.dms
/
ma58.adf
/
superplay-lib_DEV
/
Programmers
/
Example_SPObjects
/
ST
/
SP_MemSubs.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-05-27
|
2KB
|
90 lines
/* SP_MemSubs.c
- Memory Management Routines for SPObject-Support -
(c) 1990-94 by Andreas R. Kleinert
Last changes : 25.02.1994
*/
#include "spobject.h"
/* Memory-Support-Functions */
struct AIM_MemList * __saveds __stdargs AIM_GetMemList(void);
void __saveds __stdargs AIM_FreeMemList(struct AIM_MemList *MemList);
long __saveds __stdargs AIM_AddMemEntry(struct AIM_MemList *mlist, APTR pointer, long size);
APTR __saveds __stdargs AIM_AllocMemEntry(struct AIM_MemList *mlist, ULONG size, ULONG type);
struct AIM_MemList * __saveds __stdargs AIM_GetMemList(void)
{
struct AIM_MemList *MemList = N;
struct List *samelist = N;
samelist = (struct List *) AllocVec(sizeof(struct AIM_MemList), MEMF_CLEAR);
if(samelist)
{
MemList = (APTR) samelist;
MemList->ml_NumEntries = 0;
samelist->lh_Head = (struct Node *) &(samelist->lh_Tail);
samelist->lh_Tail = N;
samelist->lh_TailPred = (struct Node *) &(samelist->lh_Head);
samelist->lh_Type = NT_UNKNOWN;
}else return(NULL);
return(MemList);
}
void __saveds __stdargs AIM_FreeMemList(struct AIM_MemList *MemList)
{
struct AIM_MemEntry *entry;
if(MemList)
{
for(entry=(APTR) MemList->ml_EntryList.lh_Head;(entry)&&(entry!=(APTR) &(MemList->ml_EntryList.lh_Tail));)
{
Remove((APTR) entry);
FreeVec(entry->MemPointer);
FreeVec(entry);
entry = (APTR) MemList->ml_EntryList.lh_Head;
}
FreeVec(MemList);
}
}
long __saveds __stdargs AIM_AddMemEntry(struct AIM_MemList *mlist, APTR pointer, long size)
{
struct AIM_MemEntry *entry;
if(!mlist || !pointer || !size) return(FALSE);
entry = (APTR) AllocVec(sizeof(struct AIM_MemEntry), (MEMF_CLEAR|MEMF_PUBLIC));
if(!entry)
{
FreeVec(pointer);
return(FALSE);
}
mlist->ml_NumEntries++;
entry->MemPointer = pointer;
AddHead((APTR)mlist, (APTR)entry);
return(TRUE);
}
APTR __saveds __stdargs AIM_AllocMemEntry(struct AIM_MemList *mlist, ULONG size, ULONG type)
{
APTR alloc;
alloc = AllocVec(size, type);
if(!alloc) return(N);
if(!AIM_AddMemEntry(mlist, alloc, size)) return(N);
return(alloc);
}