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 */