1    | /***************************************
2    |   $Header: /home/amb/cxref/RCS/file.c 1.10 1997/05/17 15:06:01 amb Exp $
3    | 
4    |   C Cross Referencing & Documentation tool. Version 1.4.
5    | 
6    |   Sets up the top level File structure.
7    |   ******************/ /******************
8    |   Written by Andrew M. Bishop
9    | 
10   |   This file Copyright 1995,96,97 Andrew M. Bishop
11   |   It may be distributed under the GNU Public License, version 2, or
12   |   any higher version.  See section COPYING of the GNU Public license
13   |   for conditions under which this file may be redistributed.
14   |   ***************************************/
15   | 
16   | /*+ To control the debugging in this file. +*/
17   | #define DEBUG 0
18   | 
19   | #include <stdlib.h>
20   | #include <stdio.h>
21   | #include <string.h>
22   | 
23   | #include "memory.h"
24   | #include "datatype.h"
25   | #include "cxref.h"
26   | 
27   | /*+ This contains the File that is currently being documented to allow the other functions access to it. +*/
28   | extern File CurFile;
29   | 
30   | /*++++++++++++++++++++++++++++++++++++++
31   |   Creates a new File structure.
32   | 
33   |   File NewFile Returns the new file structure.
34   | 
35   |   char* name The name of the file.
36   |   ++++++++++++++++++++++++++++++++++++++*/
37   | 
38   | File NewFile(char* name)
39   | {
40   |  File file=(File)Calloc(1,sizeof(struct _File));
41   | 
42   |  file->name=MallocString(name);
43   |  file->inc_in=NewStringList();
44   |  file->f_refs=NewStringList2();
45   |  file->v_refs=NewStringList2();
46   | 
47   |  return(file);
48   | }
49   | 
50   | 
51   | /*++++++++++++++++++++++++++++++++++++++
52   |   Called when a file comment has been seen. Only the first of multiple comments in a file are used.
53   | 
54   |   char* comment The comment for the file.
55   |   ++++++++++++++++++++++++++++++++++++++*/
56   | 
57   | void SeenFileComment(char* comment)
58   | {
59   |  if(!CurFile->comment)
60   |     CurFile->comment=MallocString(comment);
61   | }
62   | 
63   | 
64   | /*++++++++++++++++++++++++++++++++++++++
65   |   Deletes a file structure.
66   | 
67   |   File file The file structure to be deleted.
68   | 
69   |   This is required to go through each of the elements in the File structure and delete each of them in turn.
70   |   ++++++++++++++++++++++++++++++++++++++*/
71   | 
72   | void DeleteFile(File file)
73   | {
74   |  if(file->comment) Free(file->comment);
75   |  if(file->name)    Free(file->name);
76   | 
77   |  if(file->inc_in)  DeleteStringList(file->inc_in);
78   |  if(file->f_refs)  DeleteStringList2(file->f_refs);
79   |  if(file->v_refs)  DeleteStringList2(file->v_refs);
80   | 
81   |  if(file->includes)
82   |    {
83   |     Include p=file->includes;
84   |     do{
85   |        Include n=p->next;
86   |        DeleteIncludeType(p);
87   |        p=n;
88   |       }
89   |     while(p);
90   |    }
91   | 
92   |  if(file->defines)
93   |    {
94   |     Define p=file->defines;
95   |     do{
96   |        Define n=p->next;
97   |        DeleteDefineType(p);
98   |        p=n;
99   |       }
100  |     while(p);
101  |    }
102  | 
103  |  if(file->typedefs)
104  |    {
105  |     Typedef p=file->typedefs;
106  |     do{
107  |        Typedef n=p->next;
108  |        DeleteTypedefType(p);
109  |        p=n;
110  |       }
111  |     while(p);
112  |    }
113  | 
114  |  if(file->variables)
115  |    {
116  |     Variable p=file->variables;
117  |     do{
118  |        Variable n=p->next;
119  |        DeleteVariableType(p);
120  |        p=n;
121  |       }
122  |     while(p);
123  |    }
124  | 
125  |  if(file->functions)
126  |    {
127  |     Function p=file->functions;
128  |     do{
129  |        Function n=p->next;
130  |        DeleteFunctionType(p);
131  |        p=n;
132  |       }
133  |     while(p);
134  |    }
135  | 
136  |  Free(file);
137  | }