home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
594a.lha
/
maker_v0.1
/
memory.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-10-18
|
3KB
|
165 lines
#include <exec/memory.h>
#include <stdio.h>
#include <proto/exec.h>
#include "maker.h"
#include "proto.h"
ULONG gTotMem = 0L;
BOOL GetMem(void **ptr, ULONG size)
{
if (*ptr != 0L)
printf("Entry to GetMem() with non-zero pointer!\n");
*ptr = AllocMem(size, MEMF_CLEAR);
if (*ptr == 0L)
{
printf("Error...Out of Memory!");
return FALSE;
}
gTotMem += size;
return TRUE;
}
BOOL DropMem(void **ptr, long size)
{
if (*ptr != 0L && size != 0L)
{
FreeMem(*ptr, size);
*ptr = 0L;
gTotMem -= size;
}
return TRUE;
}
BOOL RemLink(void **root, void *node)
{
LinkNode *tempptr;
/* Find the node in the linked list */
tempptr = (LinkNode *) root;
while(tempptr->next != 0L && tempptr->next != node)
tempptr = tempptr->next;
if (tempptr->next == 0L)
{
printf("Error: missing node in remlink() ... (corrupted memory)");
return FALSE;
}
else
{
/* Remove the node */
tempptr->next = ((LinkNode *) node)->next;
((LinkNode *) node)->next = 0L;
return TRUE;
}
}
BOOL AddLink(void **root, void *node)
{
LinkNode *tempptr;
/* Skip to the end of the linked list */
tempptr = (LinkNode *) root;
while (tempptr->next != 0L)
tempptr = tempptr->next;
/* Add the new node to the end of the linked list */
tempptr->next = node;
/* Set the node->next to point to nothing */
((LinkNode *) node)->next = 0L;
return TRUE;
}
BOOL InsertLink(void **root, void *node, USHORT pos)
{
LinkNode *tempptr;
USHORT i;
/* find the column header just before the desired position */
tempptr = (LinkNode *) root;
if (tempptr->next != 0L && pos)
{
for (i=0; i<pos; i++)
{
tempptr = tempptr->next;
if (tempptr->next == 0L)
break;
}
}
/* Add the new node to the linked list */
((LinkNode *) node)->next = tempptr->next;
tempptr->next = node;
return TRUE;
}
USHORT NodeCount(void **root)
{
USHORT i = 0;
LinkNode *tempptr;
if (!root)
return 0L;
tempptr = (LinkNode *) root;
while(tempptr = tempptr->next)
i++;
return i;
}
/*
Find node number nodenum in a linked list, return its address
*/
LinkNode *FindNode(LinkNode **root, register short nodenum)
{
register LinkNode *tempptr;
if (!root)
return 0L;
tempptr = *root;
while (tempptr && --nodenum >= 0)
tempptr = tempptr->next;
return (void *) tempptr;
}
short NodeNum(LinkNode **root, register LinkNode *targetNode)
{
register LinkNode *node;
register short nodeNum;
if (!root)
return -1;
for (node=*root, nodeNum=0; node; node=node->next, nodeNum++)
if (node == targetNode)
break;
if (!node)
nodeNum = -1;
return nodeNum;
}