home *** CD-ROM | disk | FTP | other *** search
- #include "defs.h"
-
- /// "Prototypes"
-
- Prototype long MemoryInit(void);
- Prototype void MemoryExit(void);
- Prototype APTR AllocVecPooled(ULONG,ULONG);
- Prototype void FreeVecPooled(APTR);
-
- ///
- /// "Data"
-
- static struct SignalSemaphore MemorySemaphore;
- static APTR MemoryPool;
-
- ///
- /// "MemoryInit"
-
- long
- MemoryInit(void)
- {
- InitSemaphore(&MemorySemaphore);
-
- if (MemoryPool = AsmCreatePool(MEMF_ANY | MEMF_PUBLIC, 4096, 4096, SysBase))
- return(TRUE);
- else
- return(FALSE);
- }
-
- ///
- /// "MemoryExit"
-
- void
- MemoryExit(void)
- {
- if (MemoryPool) {
-
- AsmDeletePool(MemoryPool, SysBase);
-
- MemoryPool = NULL;
- }
- }
-
- ///
- /// "AllocVecPooled"
-
- APTR
- AllocVecPooled(ULONG size, ULONG flags)
- {
- if (MemoryPool) {
-
- ULONG *data;
-
- size = (size + 3) & ~3;
-
- ObtainSemaphore(&MemorySemaphore);
-
- if (data = (ULONG *)AsmAllocPooled(MemoryPool, size + sizeof(ULONG), SysBase)) {
-
- ReleaseSemaphore(&MemorySemaphore);
-
- *data++ = size + sizeof(ULONG);
-
- if (flags & MEMF_CLEAR) {
-
- register ULONG *memory = data;
-
- size /= sizeof(ULONG);
-
- do {
-
- *memory++ = 0;
-
- } while(--size);
- }
-
- return((APTR)data);
- }
-
- ReleaseSemaphore(&MemorySemaphore);
- }
-
- return(NULL);
- }
-
- ///
- /// "FreeVecPooled"
-
- void
- FreeVecPooled(APTR memory)
- {
- if (memory) {
-
- ULONG *data = (ULONG *)memory;
-
- ObtainSemaphore(&MemorySemaphore);
-
- AsmFreePooled(MemoryPool, &data[-1], data[-1], SysBase);
-
- ReleaseSemaphore(&MemorySemaphore);
- }
- }
-
- ///
-