home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / XAP / XFIG / TRANSFIG.2 / TRANSFIG / transfig / fig2dev / free.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-10-14  |  3.2 KB  |  147 lines

  1. /*
  2.  * TransFig: Facility for Translating Fig code
  3.  * Copyright (c) 1985 Supoj Sutantavibul
  4.  * Copyright (c) 1991 Micah Beck
  5.  *
  6.  * Permission to use, copy, modify, distribute, and sell this software and its
  7.  * documentation for any purpose is hereby granted without fee, provided that
  8.  * the above copyright notice appear in all copies and that both that
  9.  * copyright notice and this permission notice appear in supporting
  10.  * documentation. The authors make no representations about the suitability 
  11.  * of this software for any purpose.  It is provided "as is" without express 
  12.  * or implied warranty.
  13.  *
  14.  * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
  15.  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
  16.  * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
  17.  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
  18.  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  19.  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  20.  * PERFORMANCE OF THIS SOFTWARE.
  21.  *
  22.  */
  23.  
  24. #include <stdio.h>
  25. #include <math.h>
  26. #include "object.h"
  27.  
  28. free_arc(list)
  29. F_arc    **list;
  30. {
  31.     F_arc    *a, *arc;
  32.  
  33.     for (a = *list; a != NULL;) {
  34.         arc = a;
  35.         a = a->next;
  36.         if (arc->for_arrow) free((char*)arc->for_arrow);
  37.         if (arc->back_arrow) free((char*)arc->back_arrow);
  38.         free((char*)arc);
  39.         } 
  40.     *list = NULL;
  41.     }
  42.  
  43. free_compound(list)
  44. F_compound    **list;
  45. {
  46.     F_compound    *c, *compound;
  47.  
  48.     for (c = *list; c != NULL;) {
  49.         compound = c;
  50.         c = c->next;
  51.         free_arc(&compound->arcs);
  52.         free_compound(&compound->compounds);
  53.         free_ellipse(&compound->ellipses);
  54.         free_line(&compound->lines);
  55.         free_spline(&compound->splines);
  56.         free_text(&compound->texts);
  57.         free((char*)compound);
  58.         } 
  59.     *list = NULL;
  60.     }
  61.  
  62. free_ellipse(list)
  63. F_ellipse    **list;
  64. {
  65.     F_ellipse    *e, *ellipse;
  66.  
  67.     for (e = *list; e != NULL;) {
  68.         ellipse = e;
  69.         e = e->next;
  70.         free((char*)ellipse);
  71.         } 
  72.     *list = NULL;
  73.     }
  74.  
  75. free_line(list)
  76. F_line    **list;
  77. {
  78.     F_line    *l, *line;
  79.  
  80.     for (l = *list; l != NULL;) {
  81.         line = l;
  82.         l = l->next;
  83.         free_linestorage(line);
  84.         } 
  85.     *list = NULL;
  86.     }
  87.  
  88. free_text(list)
  89. F_text    **list;
  90. {
  91.     F_text    *t, *text;
  92.  
  93.     for (t = *list; t != NULL;) {
  94.         text = t;
  95.         t = t->next;
  96.         cfree(text->cstring);
  97.         free((char*)text);
  98.         } 
  99.     *list = NULL;
  100.     }
  101.  
  102. free_spline(list)
  103. F_spline    **list;
  104. {
  105.     F_spline    *s, *spline;
  106.  
  107.     for (s = *list; s != NULL;) {
  108.         spline = s;
  109.         s = s->next;
  110.         free_splinestorage(spline);
  111.         }
  112.     *list = NULL;
  113.     }
  114.  
  115. free_splinestorage(s)
  116. F_spline      *s;
  117. {
  118.         F_point        *p, *q;
  119.         F_control    *a, *b;
  120.  
  121.         for (p = s->points; p != NULL; p = q) {
  122.             q = p->next;
  123.             free((char*)p);
  124.             }
  125.         for (a = s->controls; a != NULL; a = b) {
  126.             b = a->next;
  127.             free((char*)a);
  128.             }
  129.     if (s->for_arrow) free((char*)s->for_arrow);
  130.     if (s->back_arrow) free((char*)s->back_arrow);
  131.         free((char*)s);
  132.         }
  133.  
  134. free_linestorage(l)
  135. F_line    *l;
  136. {
  137.     F_point    *p, *q;
  138.  
  139.     for (p = l->points; p != NULL; p = q) {
  140.         q = p->next;
  141.         free((char*)p);
  142.         }
  143.     if (l->for_arrow) free((char*)l->for_arrow);
  144.     if (l->back_arrow) free((char*)l->back_arrow);
  145.     free((char*)l);
  146.     }
  147.