1 | /***************************************
2 | $Header: /home/amb/cxref/RCS/datatype.h 1.14 1999/01/24 16:53:48 amb Exp $
3 |
4 | C Cross Referencing & Documentation tool. Version 1.5.
5 |
6 | Definition of the different variables types that are used.
7 | ******************/ /******************
8 | Written by Andrew M. Bishop
9 |
10 | This file Copyright 1995,96,97,99 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 |
17 | #ifndef DATA_TYPE_H
18 | #define DATA_TYPE_H /*+ To stop multiple inclusions. +*/
19 |
20 | /*+ A pointer type to file information. +*/
21 | typedef struct _File *File;
22 |
23 | /*+ A pointer type to #include information. +*/
24 | typedef struct _Include *Include;
25 |
26 | /*+ A pointer type to #define information. +*/
27 | typedef struct _Define *Define;
28 |
29 | /*+ A pointer type to typedef information. +*/
30 | typedef struct _Typedef *Typedef;
31 |
32 | /*+ A pointer type to variable information. +*/
33 | typedef struct _Variable *Variable;
34 |
35 | /*+ A pointer type to function information. +*/
36 | typedef struct _Function *Function;
37 |
38 | /*+ A pointer type to struct and union information. +*/
39 | typedef struct _StructUnion *StructUnion;
40 |
41 | /*+ A data structure to contain lists of strings, eg functions that are called. +*/
42 | typedef struct _StringList
43 | {
44 | int n; /*+ The number of strings in the list. +*/
45 | char** s; /*+ The strings. +*/
46 | }
47 | *StringList;
48 |
49 | /*+ A data structure to contain two lists of strings, eg arguments and comments. +*/
50 | typedef struct _StringList2
51 | {
52 | int n; /*+ The number of strings in the list. +*/
53 | char** s1; /*+ The first set of strings. +*/
54 | char** s2; /*+ The second set of strings. +*/
55 | }
56 | *StringList2;
57 |
58 |
59 | /*+ A data structure to contain a complete file worth of information. +*/
60 | struct _File
61 | {
62 | char* comment; /*+ The file comment. +*/
63 |
64 | char* name; /*+ The name of the file. +*/
65 |
66 | Include includes; /*+ A linked list of include files. +*/
67 |
68 | Define defines; /*+ A linked list of #defines. +*/
69 |
70 | Typedef typedefs; /*+ A linked list of type definitions. +*/
71 |
72 | Variable variables; /*+ A linked list of variable definitions. +*/
73 |
74 | Function functions; /*+ A linked list of function prototypes. +*/
75 |
76 | StringList inc_in; /*+ The files that this file is included in. +*/
77 |
78 | StringList2 f_refs; /*+ The functions that are referenced. +*/
79 | StringList2 v_refs; /*+ The variables that are referenced. +*/
80 | };
81 |
82 | /*+ A data structure to contain information about a #include. +*/
83 | struct _Include
84 | {
85 | char* comment; /*+ The comment for the include file. +*/
86 |
87 | char* name; /*+ The name of the included file. +*/
88 |
89 | int scope; /*+ The type of file, LOCAL or GLOBAL. +*/
90 |
91 | Include includes; /*+ The files that are include by this file. +*/
92 |
93 | Include next; /*+ A pointer to the next item. +*/
94 | };
95 |
96 | /*+ A data structure to contain information about a #define. +*/
97 | struct _Define
98 | {
99 | char* comment; /*+ The comment for the #define. +*/
100 |
101 | char* name; /*+ The name that is defined. +*/
102 | char* value; /*+ The value that is defined (if simple). +*/
103 |
104 | StringList2 args; /*+ The arguments to the #define function. +*/
105 |
106 | int lineno; /*+ The line number that this definition appears on. +*/
107 |
108 | Define next; /*+ A pointer to the next item. +*/
109 | };
110 |
111 | /*+ A data structure to contain the information for a typedef. +*/
112 | struct _Typedef
113 | {
114 | char* comment; /*+ The comment for the type definition. +*/
115 |
116 | char* name; /*+ The name of the defined type. +*/
117 |
118 | char* type; /*+ The type of the definition. +*/
119 | StructUnion sutype; /*+ The type of the definition if it is a locally declared struct / union. +*/
120 | Typedef typexref; /*+ The type of the definition if it is not locally declared or a repeat definition. +*/
121 |
122 | int lineno; /*+ The line number that this type definition appears on. +*/
123 |
124 | Typedef next; /*+ A pointer to the next item. +*/
125 | };
126 |
127 | /*+ A data structure to contain the information for a variable. +*/
128 | struct _Variable
129 | {
130 | char* comment; /*+ The comment for the variable. +*/
131 |
132 | char* name; /*+ The name of the variable. +*/
133 |
134 | char* type; /*+ The type of the variable. +*/
135 |
136 | int scope; /*+ The scope of the variable, STATIC, GLOBAL or EXTERNAL +*/
137 |
138 | char* defined; /*+ The name of the file that the variable is defined in as global if extern here. +*/
139 |
140 | char* incfrom; /*+ The name of the file that the variable is included from if any. +*/
141 |
142 | StringList2 visible; /*+ The names of the files that the variable is visible in. +*/
143 | StringList2 used; /*+ The names of the files that the variable is used in. +*/
144 |
145 | int lineno; /*+ The line number that this variable definition appears on. +*/
146 |
147 | Variable next; /*+ A pointer to the next item. +*/
148 | };
149 |
150 | /*+ A data structure to contain information for a function definition. +*/
151 | struct _Function
152 | {
153 | char* comment; /*+ The comment for the function. +*/
154 |
155 | char* name; /*+ The name of the function. +*/
156 |
157 | char* type; /*+ The return type of the function. +*/
158 | char* cret; /*+ A comment for the returned value. +*/
159 |
160 | char* protofile; /*+ The name of the file where the function is prototyped +*/
161 |
162 | char* incfrom; /*+ The name of the file that the function is included from if any. +*/
163 |
164 | StringList2 args; /*+ The arguments to the function. +*/
165 |
166 | int scope; /*+ The scope of the function, LOCAL or GLOBAL. +*/
167 |
168 | StringList protos; /*+ The functions that are prototyped within this function. +*/
169 |
170 | StringList2 calls; /*+ The functions that are called from this function. +*/
171 | StringList2 called; /*+ The names of the functions that call this one. +*/
172 | StringList2 used; /*+ The places that the function is used, (references not direct calls). +*/
173 |
174 | StringList2 v_refs; /*+ The variables that are referenced from this function. +*/
175 | StringList2 f_refs; /*+ The functions that are referenced from this function. +*/
176 |
177 | int lineno; /*+ The line number that this function definition appears on. +*/
178 |
179 | Function next; /*+ A pointer to the next item. +*/
180 | };
181 |
182 | /*+ A data structure to contain a structure definition to allow structures to be matched to their typedefs (if any). +*/
183 | struct _StructUnion
184 | {
185 | char* comment; /*+ The comment for the struct or union or simple component. +*/
186 |
187 | char* name; /*+ The name of the struct or union or simple component. +*/
188 |
189 | int n_comp; /*+ The number of sub-components (if none then it is simple). +*/
190 | StructUnion* comps; /*+ The sub-components. +*/
191 | };
192 |
193 |
194 | /*++++++++++++++++++++++++++++++++++++++
195 | A function to add a pointer to the end of a linked list.
196 |
197 | dst The destination, where the pointer is to be added to.
198 |
199 | type The type of the pointer.
200 |
201 | src The pointer that is to be added to the end of the linked list.
202 | ++++++++++++++++++++++++++++++++++++++*/
203 |
204 | #define AddToLinkedList(dst,type,src) { \
205 | if(dst) \
206 | { \
207 | type temp=dst; \
208 | while(temp && temp->next) \
209 | temp=temp->next; \
210 | temp->next=src; \
211 | } \
212 | else \
213 | dst=src; \
214 | }
215 | #endif /* DATA_TYPE_H */