gwenhywfar 5.14.1
tm2c_typedef.c
Go to the documentation of this file.
1/***************************************************************************
2 begin : Thu Jul 02 2009
3 copyright : (C) 2018 by Martin Preuss
4 email : martin@libchipcard.de
5
6 ***************************************************************************
7 * Please see toplevel file COPYING for license details *
8 ***************************************************************************/
9
10#ifdef HAVE_CONFIG_H
11# include <config.h>
12#endif
13
14
15#include "tm2c_typedef.h"
16
17#include <gwenhywfar/debug.h>
18
19#include <ctype.h>
20
21
22
24static void _addPreHeaders(TYPEMAKER2_TYPE *ty, GWEN_BUFFER *tbuf);
25static void _addTypeSpecificDefs(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, uint32_t flags, GWEN_BUFFER *tbuf);
26
27
28
29
32{
33 GWEN_BUFFER *tbuf;
34 const char *s;
35 uint32_t flags;
36
37 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
38
40
42 _addPreHeaders(ty, tbuf);
43
45 GWEN_Buffer_AppendString(tbuf, "#include <aqdatabase/aqdb.h>\n");
46
47 GWEN_Buffer_AppendString(tbuf, "typedef struct ");
50 GWEN_Buffer_AppendString(tbuf, " ");
52 GWEN_Buffer_AppendString(tbuf, ";\n");
53
54 _addTypeSpecificDefs(tb, ty, flags, tbuf);
55
57 GWEN_Buffer_AppendString(tbuf, "#include <aqdatabase/aqdb_db.h>\n");
58 }
59 GWEN_Buffer_AppendString(tbuf, "\n");
60
62 GWEN_Buffer_free(tbuf);
63
64 return 0;
65}
66
67
68
70{
71 uint32_t flags;
72
74
75 /* add some system headers */
76 GWEN_Buffer_AppendString(tbuf, "/* needed system headers */\n");
77 GWEN_Buffer_AppendString(tbuf, "#include <gwenhywfar/types.h>\n");
79 GWEN_Buffer_AppendString(tbuf, "#include <gwenhywfar/list1.h>\n");
81 GWEN_Buffer_AppendString(tbuf, "#include <gwenhywfar/list2.h>\n");
83 GWEN_Buffer_AppendString(tbuf, "#include <gwenhywfar/tree.h>\n");
85 GWEN_Buffer_AppendString(tbuf, "#include <gwenhywfar/tree2.h>\n");
87 GWEN_Buffer_AppendString(tbuf, "#include <gwenhywfar/inherit.h>\n");
89 GWEN_Buffer_AppendString(tbuf, "#include <gwenhywfar/idmap.h>\n");
91 GWEN_Buffer_AppendString(tbuf, "#include <gwenhywfar/db.h>\n");
93 GWEN_Buffer_AppendString(tbuf, "#include <gwenhywfar/xml.h>\n");
95 GWEN_Buffer_AppendString(tbuf, "#include <gwenhywfar/gwensignal.h>\n");
96 GWEN_Buffer_AppendString(tbuf, "\n");
97}
98
99
100
102{
103 TYPEMAKER2_HEADER_LIST *hl;
104
105 /* handle pre-headers */
107 if (hl) {
109
110 h=Typemaker2_Header_List_First(hl);
111 if (h) {
112 GWEN_Buffer_AppendString(tbuf, "/* pre-headers */\n");
113 while (h) {
115 GWEN_Buffer_AppendString(tbuf, "#include ");
116
118 GWEN_Buffer_AppendString(tbuf, "<");
120 GWEN_Buffer_AppendString(tbuf, ">");
121 }
122 else {
123 GWEN_Buffer_AppendString(tbuf, "\"");
125 GWEN_Buffer_AppendString(tbuf, "\"");
126 }
127 GWEN_Buffer_AppendString(tbuf, "\n");
128 }
129 h=Typemaker2_Header_List_Next(h);
130 }
131 GWEN_Buffer_AppendString(tbuf, "\n");
132 }
133 }
134}
135
136
137
139{
141 const char *sTypeId;
142 const char *sTypePrefix;
143 const char *sApi;
144
147 sTypePrefix=Typemaker2_Type_GetPrefix(ty);
149
152 GWEN_Buffer_AppendArgs(tbuf, "GWEN_LIST_FUNCTION_LIB_DEFS(%s, %s, %s)\n", sTypeId, sTypePrefix, sApi);
153 else
154 GWEN_Buffer_AppendArgs(tbuf, "GWEN_LIST_FUNCTION_DEFS(%s, %s)\n", sTypeId, sTypePrefix);
155 }
156
159 GWEN_Buffer_AppendArgs(tbuf, "GWEN_LIST2_FUNCTION_LIB_DEFS(%s, %s, %s)\n", sTypeId, sTypePrefix, sApi);
160 else
161 GWEN_Buffer_AppendArgs(tbuf, "GWEN_LIST2_FUNCTION_DEFS(%s, %s)\n", sTypeId, sTypePrefix);
162 }
163
166 GWEN_Buffer_AppendArgs(tbuf, "GWEN_CONSTLIST2_FUNCTION_LIB_DEFS(%s, %s, %s)\n", sTypeId, sTypePrefix, sApi);
167 else
168 GWEN_Buffer_AppendArgs(tbuf, "GWEN_CONSTLIST2_FUNCTION_DEFS(%s, %s)\n", sTypeId, sTypePrefix);
169 }
170
171 if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE) {
173 GWEN_Buffer_AppendArgs(tbuf, "GWEN_TREE_FUNCTION_LIB_DEFS(%s, %s, %s)\n", sTypeId, sTypePrefix, sApi);
174 else
175 GWEN_Buffer_AppendArgs(tbuf, "GWEN_TREE_FUNCTION_DEFS(%s, %s)\n", sTypeId, sTypePrefix);
176 }
177
180 GWEN_Buffer_AppendArgs(tbuf, "GWEN_TREE2_FUNCTION_LIB_DEFS(%s, %s, %s)\n", sTypeId, sTypePrefix, sApi);
181 else
182 GWEN_Buffer_AppendArgs(tbuf, "GWEN_TREE2_FUNCTION_DEFS(%s, %s)\n", sTypeId, sTypePrefix);
183 }
184
187 GWEN_Buffer_AppendArgs(tbuf, "GWEN_INHERIT_FUNCTION_LIB_DEFS(%s, %s)\n", sTypeId, sApi);
188 else
189 GWEN_Buffer_AppendArgs(tbuf, "GWEN_INHERIT_FUNCTION_DEFS(%s)\n", sTypeId);
190 }
191
194 GWEN_Buffer_AppendArgs(tbuf, "GWEN_IDMAP_FUNCTION_LIB_DEFS(%s, %s, %s)\n", sTypeId, sTypePrefix, sApi);
195 else
196 GWEN_Buffer_AppendArgs(tbuf, "GWEN_IDMAP_FUNCTION_DEFS(%s, %s)\n", sTypeId, sTypePrefix);
197 }
198 GWEN_Buffer_AppendString(tbuf, "\n");
199}
200
201
202
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition buffer.c:42
int GWEN_Buffer_AppendArgs(GWEN_BUFFER *bf, const char *fmt,...)
Definition buffer.c:1087
void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition buffer.c:89
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition buffer.c:992
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition buffer.c:235
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition buffer.h:38
static void _addFlagSpecificSystemHeaders(TYPEMAKER2_TYPE *ty, GWEN_BUFFER *tbuf)
static void _addTypeSpecificDefs(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, uint32_t flags, GWEN_BUFFER *tbuf)
int TM2C_BuildTypedef(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
static void _addPreHeaders(TYPEMAKER2_TYPE *ty, GWEN_BUFFER *tbuf)
void Typemaker2_Builder_AddPublicDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition tm_builder.c:172
TYPEMAKER2_TYPEMANAGER * Typemaker2_Builder_GetTypeManager(const TYPEMAKER2_BUILDER *tb)
Definition tm_builder.c:133
struct TYPEMAKER2_BUILDER TYPEMAKER2_BUILDER
Definition tm_builder.h:26
int Typemaker2_Header_GetType(const TYPEMAKER2_HEADER *th)
Definition tm_header.c:90
int Typemaker2_Header_GetLocation(const TYPEMAKER2_HEADER *th)
Definition tm_header.c:108
const char * Typemaker2_Header_GetFileName(const TYPEMAKER2_HEADER *th)
Definition tm_header.c:68
@ Typemaker2_HeaderType_System
Definition tm_header.h:25
@ Typemaker2_HeaderLocation_Pre
Definition tm_header.h:31
struct TYPEMAKER2_HEADER TYPEMAKER2_HEADER
Definition tm_header.h:19
TYPEMAKER2_HEADER_LIST * Typemaker2_Type_GetHeaders(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:692
const char * Typemaker2_Type_GetIdentifier(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:585
uint32_t Typemaker2_Type_GetFlags(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:361
const char * Typemaker2_Type_GetPrefix(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:607
#define TYPEMAKER2_TYPEFLAGS_WITH_IDMAP
Definition tm_type.h:59
#define TYPEMAKER2_TYPEFLAGS_WITH_SIGNALS
Definition tm_type.h:62
struct TYPEMAKER2_TYPE TYPEMAKER2_TYPE
Definition tm_type.h:21
#define TYPEMAKER2_TYPEFLAGS_WITH_XML
Definition tm_type.h:54
#define TYPEMAKER2_TYPEFLAGS_WITH_LIST1
Definition tm_type.h:56
#define TYPEMAKER2_TYPEFLAGS_WITH_DB
Definition tm_type.h:53
#define TYPEMAKER2_TYPEFLAGS_WITH_INHERIT
Definition tm_type.h:58
#define TYPEMAKER2_TYPEFLAGS_WITH_LIST2
Definition tm_type.h:57
#define TYPEMAKER2_TYPEFLAGS_WITH_OBJECT
Definition tm_type.h:55
#define TYPEMAKER2_TYPEFLAGS_WITH_TREE
Definition tm_type.h:60
#define TYPEMAKER2_TYPEFLAGS_WITH_SLOTS
Definition tm_type.h:63
#define TYPEMAKER2_TYPEFLAGS_WITH_CONSTLIST2
Definition tm_type.h:70
#define TYPEMAKER2_TYPEFLAGS_WITH_TREE2
Definition tm_type.h:71
const char * Typemaker2_TypeManager_GetApiDeclaration(const TYPEMAKER2_TYPEMANAGER *tym)
struct TYPEMAKER2_TYPEMANAGER TYPEMAKER2_TYPEMANAGER