home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume33 / archie / part07 / ptalloc.c < prev    next >
C/C++ Source or Header  |  1992-11-11  |  2KB  |  86 lines

  1. /*
  2.  * Copyright (c) 1989, 1990, 1991 by the University of Washington
  3.  *
  4.  * For copying and distribution information, please see the file
  5.  * <copyright.h>.
  6.  */
  7.  
  8. #include <stdio.h>
  9.  
  10. #include <pfs.h>
  11. #include <pmachine.h> /* for correct definition of ZERO */
  12. #ifdef MSDOS
  13. # define free _pfree   /* otherwise we get conflicts with free() */
  14. #endif
  15.  
  16. static PTEXT    free = NULL;
  17. int         ptext_count = 0;
  18. int        ptext_max = 0;
  19.  
  20. /*
  21.  * ptalloc - allocate and initialize ptext structure
  22.  *
  23.  *    PTALLOC returns a pointer to an initialized structure of type
  24.  *    PTEXT.  If it is unable to allocate such a structure, it
  25.  *    returns NULL.
  26.  */
  27. PTEXT
  28. ptalloc()
  29.     {
  30.     PTEXT    vt;
  31.     if(free) {
  32.         vt = free;
  33.         free = free->next;
  34.     }
  35.     else {
  36.         vt = (PTEXT) malloc(sizeof(PTEXT_ST));
  37.         if (!vt) return(NULL);
  38.         ptext_max++;
  39.     }
  40.     ptext_count++;
  41.  
  42.     /* nearly all parts are 0 [or NULL] */
  43.     ZERO(vt);
  44.     /* The offset is to leave room for additional headers */
  45.     vt->start = vt->dat + MAX_PTXT_HDR;
  46.  
  47.     return(vt);
  48.     }
  49.  
  50. /*
  51.  * ptfree - free a VTEXT structure
  52.  *
  53.  *    VTFREE takes a pointer to a VTEXT structure and adds it to
  54.  *    the free list for later reuse.
  55.  */
  56. void
  57. ptfree(vt)
  58.     PTEXT    vt;
  59.     {
  60.     vt->next = free;
  61.     vt->previous = NULL;
  62.     free = vt;
  63.     ptext_count--;
  64.     }
  65.  
  66. /*
  67.  * ptlfree - free a VTEXT structure
  68.  *
  69.  *    VTLFREE takes a pointer to a VTEXT structure frees it and any linked
  70.  *    VTEXT structures.  It is used to free an entrie list of VTEXT
  71.  *    structures.
  72.  */
  73. void
  74. ptlfree(vt)
  75.     PTEXT    vt;
  76.     {
  77.     PTEXT    nxt;
  78.  
  79.     while(vt != NULL) {
  80.         nxt = vt->next;
  81.         ptfree(vt);
  82.         vt = nxt;
  83.     }
  84.     }
  85.  
  86.