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 >
C/C++ Source or Header  |  1991-10-18  |  3KB  |  165 lines

  1. #include <exec/memory.h>
  2.  
  3. #include <stdio.h>
  4.  
  5. #include <proto/exec.h>
  6.  
  7. #include "maker.h"
  8. #include "proto.h"
  9.  
  10. ULONG        gTotMem = 0L;
  11.  
  12. BOOL GetMem(void **ptr, ULONG size)
  13. {
  14.     if (*ptr != 0L)
  15.         printf("Entry to GetMem() with non-zero pointer!\n");
  16.  
  17.     *ptr = AllocMem(size, MEMF_CLEAR);
  18.  
  19.     if (*ptr == 0L)
  20.     {
  21.         printf("Error...Out of Memory!");
  22.         return FALSE;
  23.     }
  24.     gTotMem += size;
  25.  
  26.     return TRUE;
  27. }
  28.  
  29. BOOL DropMem(void **ptr, long size)
  30. {
  31.     if (*ptr != 0L && size != 0L)
  32.     {
  33.         FreeMem(*ptr, size);
  34.         *ptr = 0L;
  35.         gTotMem -= size;
  36.     }
  37.     return TRUE;
  38. }
  39.  
  40. BOOL    RemLink(void **root, void *node)
  41. {
  42.     LinkNode        *tempptr;
  43.  
  44. /*        Find the node in the linked list        */
  45.  
  46.     tempptr = (LinkNode *) root;
  47.     while(tempptr->next != 0L && tempptr->next != node)
  48.         tempptr = tempptr->next;
  49.     
  50.     if (tempptr->next == 0L)
  51.     {
  52.         printf("Error: missing node in remlink() ... (corrupted memory)");
  53.         return FALSE;
  54.     }
  55.     else
  56.     {
  57.  
  58. /*        Remove the node    */
  59.  
  60.         tempptr->next =  ((LinkNode *) node)->next;
  61.         ((LinkNode *) node)->next = 0L;
  62.         return TRUE; 
  63.     }
  64. }
  65.  
  66. BOOL    AddLink(void **root, void *node)
  67. {
  68.     LinkNode        *tempptr;
  69.  
  70. /*        Skip to the end of the linked list        */
  71.  
  72.     tempptr = (LinkNode *) root;
  73.     while (tempptr->next != 0L)
  74.         tempptr = tempptr->next;
  75.  
  76. /*        Add the new node to the end of the linked list        */
  77.  
  78.     tempptr->next = node;
  79.  
  80. /*        Set the node->next to point to nothing    */
  81.  
  82.     ((LinkNode *) node)->next = 0L;
  83.  
  84.     return TRUE;
  85. }
  86.  
  87. BOOL    InsertLink(void **root, void *node, USHORT pos)
  88. {
  89.     LinkNode     *tempptr;
  90.     USHORT        i;
  91.  
  92. /* find the column header just before the desired position */
  93.  
  94.     tempptr = (LinkNode *) root;
  95.     if (tempptr->next != 0L && pos)
  96.     {
  97.         for (i=0; i<pos; i++)
  98.         {
  99.             tempptr = tempptr->next;
  100.             if (tempptr->next == 0L)
  101.                 break;
  102.         }
  103.     }
  104.  
  105. /*        Add the new node to the linked list        */
  106.  
  107.     ((LinkNode *) node)->next = tempptr->next;
  108.     tempptr->next = node;
  109.  
  110.     return TRUE;
  111. }
  112.  
  113. USHORT NodeCount(void **root)
  114. {
  115.     USHORT            i = 0;
  116.     LinkNode            *tempptr;
  117.  
  118.     if (!root)
  119.         return 0L;
  120.  
  121.     tempptr = (LinkNode *) root;
  122.     while(tempptr = tempptr->next)
  123.         i++;
  124.  
  125.     return i;
  126. }
  127.  
  128. /*
  129.     Find node number nodenum in a linked list, return its address
  130. */
  131.  
  132. LinkNode *FindNode(LinkNode **root, register short nodenum)
  133. {
  134.     register LinkNode     *tempptr;
  135.  
  136.     if (!root)
  137.         return 0L;
  138.  
  139.     tempptr = *root;
  140.  
  141.     while (tempptr && --nodenum >= 0)
  142.         tempptr = tempptr->next;
  143.  
  144.     return (void *) tempptr;
  145. }
  146.         
  147. short NodeNum(LinkNode **root, register LinkNode *targetNode)
  148. {
  149.     register LinkNode     *node;
  150.     register short            nodeNum;
  151.  
  152.     if (!root)
  153.         return -1;
  154.  
  155.     for (node=*root, nodeNum=0; node; node=node->next, nodeNum++)
  156.         if (node == targetNode)
  157.             break;
  158.             
  159.     if (!node)
  160.         nodeNum = -1;
  161.  
  162.     return nodeNum;
  163. }
  164.         
  165.