gwenhywfar  4.99.8beta
tm_builder.c
Go to the documentation of this file.
1 /***************************************************************************
2  begin : Thu Jul 02 2009
3  copyright : (C) 2009 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 "tm_builder_p.h"
16 #include "tm_member.h"
17 
18 #include <gwenhywfar/debug.h>
19 #include <gwenhywfar/misc.h>
20 
21 #include <assert.h>
22 #include <errno.h>
23 #include <string.h>
24 #include <ctype.h>
25 
26 
28 
29 
32 
35 
36  tb->declarationsPublic=GWEN_StringList_new();
37  tb->declarationsLibrary=GWEN_StringList_new();
38  tb->declarationsProtected=GWEN_StringList_new();
39  tb->declarationsPrivate=GWEN_StringList_new();
40  tb->code=GWEN_StringList_new();
41 
42  return tb;
43 }
44 
45 
46 
48  if (tb) {
50 
51  GWEN_StringList_free(tb->declarationsPublic);
52  GWEN_StringList_free(tb->declarationsLibrary);
53  GWEN_StringList_free(tb->declarationsProtected);
54  GWEN_StringList_free(tb->declarationsPrivate);
55  GWEN_StringList_free(tb->code);
56  free(tb->fileNamePublic);
57  free(tb->fileNameLibrary);
58  free(tb->fileNameProtected);
59  free(tb->fileNamePrivate);
60  free(tb->fileNameCode);
61  free(tb->destFolder);
62  GWEN_FREE_OBJECT(tb);
63  }
64 }
65 
66 
67 
69  assert(tb);
70  return tb->declarationsPublic;
71 }
72 
73 
74 
76  assert(tb);
77  return tb->declarationsLibrary;
78 }
79 
80 
81 
83  assert(tb);
84  return tb->declarationsProtected;
85 }
86 
87 
88 
90  assert(tb);
91  return tb->declarationsPrivate;
92 }
93 
94 
95 
97  assert(tb);
98  return tb->code;
99 }
100 
101 
102 
104  assert(tb);
105  return tb->typeManager;
106 }
107 
108 
109 
111  assert(tb);
112  tb->typeManager=tm;
113 }
114 
115 
116 
118  assert(tb);
119  GWEN_StringList_AppendString(tb->declarationsPublic, s, 0, 0);
120 }
121 
122 
123 
125  assert(tb);
126  GWEN_StringList_AppendString(tb->declarationsLibrary, s, 0, 0);
127 }
128 
129 
130 
132  assert(tb);
133  GWEN_StringList_AppendString(tb->declarationsProtected, s, 0, 0);
134 }
135 
136 
137 
139  assert(tb);
140  GWEN_StringList_AppendString(tb->declarationsPrivate, s, 0, 0);
141 }
142 
143 
144 
146  assert(tb);
147  GWEN_StringList_AppendString(tb->code, s, 0, 0);
148 }
149 
150 
151 
153  assert(tb);
154  return tb->fileNamePublic;
155 }
156 
157 
158 
160  assert(tb);
161  free(tb->fileNamePublic);
162  if (s) tb->fileNamePublic=strdup(s);
163  else tb->fileNamePublic=NULL;
164 }
165 
166 
167 
169  assert(tb);
170  return tb->fileNameLibrary;
171 }
172 
173 
174 
176  assert(tb);
177  free(tb->fileNameLibrary);
178  if (s) tb->fileNameLibrary=strdup(s);
179  else tb->fileNameLibrary=NULL;
180 }
181 
182 
183 
185  assert(tb);
186  return tb->fileNameProtected;
187 }
188 
189 
190 
192  assert(tb);
193  free(tb->fileNameProtected);
194  if (s) tb->fileNameProtected=strdup(s);
195  else tb->fileNameProtected=NULL;
196 }
197 
198 
199 
201  assert(tb);
202  return tb->fileNamePrivate;
203 }
204 
205 
206 
208  assert(tb);
209  free(tb->fileNamePrivate);
210  if (s) tb->fileNamePrivate=strdup(s);
211  else tb->fileNamePrivate=NULL;
212 }
213 
214 
215 
217  assert(tb);
218  return tb->fileNameCode;
219 }
220 
221 
222 
224  assert(tb);
225  free(tb->fileNameCode);
226  if (s) tb->fileNameCode=strdup(s);
227  else tb->fileNameCode=NULL;
228 }
229 
230 
231 
233  assert(tb);
234  return tb->sourceFileName;
235 }
236 
237 
238 
240  assert(tb);
241  free(tb->sourceFileName);
242  if (s) tb->sourceFileName=strdup(s);
243  else tb->sourceFileName=NULL;
244 }
245 
246 
247 
249  assert(tb);
250  return tb->destFolder;
251 }
252 
253 
254 
256  assert(tb);
257  free(tb->destFolder);
258  if (s) tb->destFolder=strdup(s);
259  else tb->destFolder=NULL;
260 }
261 
262 
263 
265  assert(tb);
266  tb->buildFn=fn;
267 }
268 
269 
270 
272  assert(tb);
273  if (tb->buildFn)
274  return tb->buildFn(tb, ty);
275  else
277 }
278 
279 
280 
282  TYPEMAKER2_TYPE *ty,
283  TYPEMAKER2_MEMBER *tm,
284  const char *src,
285  const char *dst) {
286  GWEN_DB_NODE *db;
287  const char *s;
288 
289  db=GWEN_DB_Group_new("vars");
290 
291  if (tb->typeManager) {
292  s=Typemaker2_TypeManager_GetApiDeclaration(tb->typeManager);
293  if (s && *s)
295  else
297  }
298 
299  /* set some type vars */
300  if (ty) {
301  TYPEMAKER2_TYPE *bty;
302 
304  if (s && *s)
305  GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "struct_type", s);
306 
308  if (s && *s)
309  GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "struct_prefix", s);
310 
312  if (bty) {
314  if (s && *s)
315  GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "basetype_type", s);
316 
318  if (s && *s)
319  GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "basetype_prefix", s);
320  }
321  }
322 
323  /* set some member vars */
324  if (tm) {
325  char numbuf[32];
326  TYPEMAKER2_TYPE *mty;
327 
329  if (s && *s) {
330  GWEN_BUFFER *tbuf;
331 
333 
334  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
335  GWEN_Buffer_AppendByte(tbuf, toupper(*s));
336  GWEN_Buffer_AppendString(tbuf, s+1);
338  GWEN_Buffer_free(tbuf);
339  }
340 
342  if (s && *s)
343  GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "element_name", s);
344  else
345  /* default behaviour is to use the name "element" for list members in GWEN_DBs */
346  GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "element_name", "element");
347 
349  if (s && *s)
351 
353  if (s && *s)
355 
357  /* set field number for toObject/fromObject */
359  if (s && *s)
361  }
362 
363  /* maxlen */
364  snprintf(numbuf, sizeof(numbuf)-1, "%d", Typemaker2_Member_GetMaxLen(tm));
365  GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxlen", numbuf);
366 
367  /* set basetype stuff */
369  assert(mty);
370  if (mty) {
371  TYPEMAKER2_TYPE *bty;
372 
374  if (s && *s)
375  GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "member_type", s);
376 
378  if (s && *s)
379  GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "member_prefix", s);
380 
382  if (bty) {
384  if (s && *s)
385  GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "member_basetype_type", s);
386 
388  if (s && *s)
389  GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "member_basetype_prefix", s);
390  }
391  }
392 
393  /* set enum-specific stuff */
395  TYPEMAKER2_ENUM *te;
396 
398  if (te) {
400  if (s && *s)
401  GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "enum_fromstring_fn", s);
403  if (s && *s)
404  GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "enum_tostring_fn", s);
405  }
406  }
407  }
408 
409  /* set src and dst */
410  if (src && *src)
412  if (dst && *dst)
414 
415  /* set some fixed vars */
416  GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "retval", "p_rv");
418  GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "buffer", "p_buffer");
419 
420  return db;
421 }
422 
423 
424 
426  GWEN_DB_NODE *db,
427  GWEN_BUFFER *dbuf) {
428  const char *p;
429 
430  p=s;
431  while(*p) {
432  if (*p=='$') {
433  p++;
434  if (*p=='$')
435  GWEN_Buffer_AppendByte(dbuf, '$');
436  else if (*p=='(') {
437  const char *pStart;
438 
439  p++;
440  pStart=p;
441  while(*p && *p!=')')
442  p++;
443  if (*p!=')') {
444  DBG_ERROR(GWEN_LOGDOMAIN, "Unterminated variable name in code");
445  return GWEN_ERROR_BAD_DATA;
446  }
447  else {
448  int len;
449  char *name;
450  const char *v;
451 
452  len=p-pStart;
453  if (len<1) {
454  DBG_ERROR(GWEN_LOGDOMAIN, "Empty variable name in code");
455  return GWEN_ERROR_BAD_DATA;
456  }
457  name=(char*) malloc(len+1);
458  assert(name);
459  memmove(name, pStart, len);
460  name[len]=0;
461  v=GWEN_DB_GetCharValue(db, name, 0, NULL);
462  if (v) {
463  free(name);
464  GWEN_Buffer_AppendString(dbuf, v);
465  }
466 #if 0 /* just replace with empty value */
467  else {
468  GWEN_Buffer_AppendString(dbuf, " [__VALUE OF ");
469  GWEN_Buffer_AppendString(dbuf, name);
470  GWEN_Buffer_AppendString(dbuf, " WAS NOT SET__] ");
471  free(name);
472  }
473 #endif
474  }
475  }
476  else {
477  DBG_ERROR(GWEN_LOGDOMAIN, "Bad variable string in code");
478  return GWEN_ERROR_BAD_DATA;
479  }
480  p++;
481  }
482  else {
483  if (*p=='#') {
484  /* let # lines begin on a new line */
485  GWEN_Buffer_AppendByte(dbuf, '\n');
486  GWEN_Buffer_AppendByte(dbuf, *p);
487 
488  /* skip introducing cross and copy all stuff until the next cross
489  * upon which wa inject a newline (to make the preprocessor happy)
490  */
491  p++;
492  while(*p && *p!='#') {
493  GWEN_Buffer_AppendByte(dbuf, *p);
494  p++;
495  }
496  if (*p=='#') {
497  GWEN_Buffer_AppendByte(dbuf, '\n');
498  p++;
499  }
500  }
501  else if (*p=='\\') {
502  /* check for recognized control escapes */
503  if (tolower(p[1])=='n') {
504  GWEN_Buffer_AppendByte(dbuf, '\n');
505  p+=2; /* skip introducing backslash and control character */
506  }
507  else if (tolower(p[1])=='t') {
508  GWEN_Buffer_AppendByte(dbuf, '\t');
509  p+=2; /* skip introducing backslash and control character */
510  }
511  else if (tolower(p[1])=='\\') {
512  GWEN_Buffer_AppendByte(dbuf, '\\');
513  p+=2; /* skip introducing backslash and control character */
514  }
515  else {
516  /* no known escape character, just add literally */
517  GWEN_Buffer_AppendByte(dbuf, *p);
518  p++;
519  }
520  }
521  else {
522  GWEN_Buffer_AppendByte(dbuf, *p);
523  p++;
524  }
525  }
526  }
527 
528  return 0;
529 }
530 
531 
532 
533 #define INVOKE_FN(macro_var1) \
534  int Typemaker2_Builder_Invoke_##macro_var1##Fn(TYPEMAKER2_BUILDER *tb, \
535  TYPEMAKER2_TYPE *ty, \
536  TYPEMAKER2_MEMBER *tm, \
537  const char *src, \
538  const char *dst, \
539  GWEN_BUFFER *dbuf) { \
540  if (tm) { \
541  TYPEMAKER2_TYPE *mty; \
542  TYPEMAKER2_CODE *tc; \
543  const char *s=NULL; \
544  \
545  mty=Typemaker2_Member_GetTypePtr(tm); \
546  if (mty==NULL) { \
547  DBG_ERROR(GWEN_LOGDOMAIN, "No type pointer for member"); \
548  return GWEN_ERROR_NO_DATA; \
549  } \
550  tc=Typemaker2_Type_FindCodeForMember(mty, tm, __STRING(macro_var1));\
551  if (tc) \
552  s=Typemaker2_Code_GetCode(tc); \
553  if (s && *s) { \
554  GWEN_DB_NODE *db; \
555  int rv; \
556  \
557  db=Typemaker2_Builder_CreateDbForCall(tb, ty, tm, src, dst); \
558  if (db==NULL) { \
559  DBG_INFO(GWEN_LOGDOMAIN, "here"); \
560  return GWEN_ERROR_BAD_DATA; \
561  } \
562  \
563  if (0) { \
564  GWEN_Buffer_AppendString(dbuf, "/* function \""); \
565  GWEN_Buffer_AppendString(dbuf, __STRING(macro_var1)); \
566  GWEN_Buffer_AppendString(dbuf, "\" of type \""); \
567  GWEN_Buffer_AppendString(dbuf, Typemaker2_Type_GetName(mty)); \
568  GWEN_Buffer_AppendString(dbuf, "\" */\n"); \
569  } \
570  rv=Typemaker2_Builder_ReplaceVars(s, db, dbuf); \
571  GWEN_DB_Group_free(db); \
572  if (rv<0) { \
573  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); \
574  return rv; \
575  } \
576  return 0; \
577  } \
578  else { \
579  DBG_INFO(GWEN_LOGDOMAIN, "No code for type [%s]", \
580  Typemaker2_Type_GetName(mty)); \
581  return 0; \
582  } \
583  } \
584  else { \
585  DBG_ERROR(GWEN_LOGDOMAIN, "No member information"); \
586  return GWEN_ERROR_NO_DATA; \
587  } \
588  }
589 
590 
591 INVOKE_FN(Construct);
592 INVOKE_FN(Destruct);
593 INVOKE_FN(Assign);
594 INVOKE_FN(Dup);
595 INVOKE_FN(Compare);
596 INVOKE_FN(ToDb);
597 INVOKE_FN(FromDb);
598 INVOKE_FN(ToXml);
599 INVOKE_FN(FromXml);
600 INVOKE_FN(ToObject);
601 INVOKE_FN(FromObject);
602 INVOKE_FN(ToHashString);
603 
604 
605 
606 
608  TYPEMAKER2_TYPE *ty,
609  const char *fileName,
610  GWEN_STRINGLIST *sl,
611  int acc) {
613  FILE *f;
614 
615  f=fopen(fileName, "w");
616  if (f==NULL) {
617  DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)",
618  fileName,
619  strerror(errno),
620  errno);
621  return GWEN_ERROR_IO;
622  }
623 
624  fprintf(f,
625  "/**********************************************************\n"
626  " * This file has been automatically created by \"typemaker2\"\n"
627  " * from the file \"%s\".\n"
628  " * Please do not edit this file, all changes will be lost.\n"
629  " * Better edit the mentioned source file instead.\n"
630  " **********************************************************/\n"
631  "\n",
633 
634  if (acc==TypeMaker2_Access_Unknown) {
635  const char *s;
636  TYPEMAKER2_HEADER_LIST *hl;
637 
638  fprintf(f, "#ifdef HAVE_CONFIG_H\n# include <config.h>\n#endif\n\n");
639 
640  s=tb->fileNamePrivate;
641  if (s==NULL)
642  s=tb->fileNameLibrary;
643  if (s==NULL)
644  s=tb->fileNameProtected;
645  if (s==NULL)
646  s=tb->fileNamePublic;
647  if (s) {
648  fprintf(f, "#include \"%s\"\n\n", s);
649  }
650 
651  /* add some needed headers */
652  fprintf(f, "#include <gwenhywfar/misc.h>\n");
653  fprintf(f, "#include <gwenhywfar/debug.h>\n");
654 
655  /* write code headers */
656  fprintf(f, "\n");
657  fprintf(f, "/* code headers */\n");
659  if (hl) {
661 
662  h=Typemaker2_Header_List_First(hl);
663  while(h) {
666  fprintf(f, "#include <%s>\n", Typemaker2_Header_GetFileName(h));
667  else
668  fprintf(f, "#include \"%s\"\n", Typemaker2_Header_GetFileName(h));
669  }
670  h=Typemaker2_Header_List_Next(h);
671  }
672  }
673  fprintf(f, "\n");
674  }
675  else {
676  GWEN_BUFFER *xbuf;
677  char *p;
678  const char *s;
679 
680  xbuf=GWEN_Buffer_new(0, 256, 0, 1);
682  GWEN_Buffer_AppendString(xbuf, s);
683  GWEN_Buffer_AppendString(xbuf, "_");
684  GWEN_Buffer_AppendString(xbuf, fileName);
685  p=GWEN_Buffer_GetStart(xbuf);
686  while(*p) {
687  if (*p=='.')
688  *p='_';
689  else
690  *p=toupper(*p);
691  p++;
692  }
693  fprintf(f, "#ifndef %s\n", GWEN_Buffer_GetStart(xbuf));
694  fprintf(f, "#define %s\n\n", GWEN_Buffer_GetStart(xbuf));
695 
696  s=NULL;
697  switch(acc) {
699  s=tb->fileNamePrivate;
700  if (s)
701  break;
703  s=tb->fileNameLibrary;
704  if (s)
705  break;
707  s=tb->fileNameProtected;
708  if (s)
709  break;
711  s=tb->fileNamePublic;
712  if (s)
713  break;
714  default:
715  break;
716  }
717 
718  if (s) {
719  fprintf(f, "#include \"%s\"\n\n", s);
720  }
721 
722  fprintf(f, "\n");
723  fprintf(f, "#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n");
724  GWEN_Buffer_free(xbuf);
725  }
726 
728  while(se) {
729  const char *s;
730 
732  if (s)
733  fprintf(f, "%s\n", s);
734 
736  }
737 
738  if (acc==TypeMaker2_Access_Unknown) {
739  TYPEMAKER2_HEADER_LIST *hl;
740 
741  /* write codeEnd headers */
742  fprintf(f, "\n");
743  fprintf(f, "/* code headers */\n");
745  if (hl) {
747 
748  h=Typemaker2_Header_List_First(hl);
749  while(h) {
752  fprintf(f, "#include <%s>\n", Typemaker2_Header_GetFileName(h));
753  else
754  fprintf(f, "#include \"%s\"\n", Typemaker2_Header_GetFileName(h));
755  }
756  h=Typemaker2_Header_List_Next(h);
757  }
758  }
759  fprintf(f, "\n");
760  }
761 
762  if (acc!=TypeMaker2_Access_Unknown) {
763  fprintf(f, "#ifdef __cplusplus\n}\n#endif\n\n");
764  fprintf(f, "#endif\n\n");
765  }
766 
767  if (fclose(f)) {
768  DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)",
769  fileName,
770  strerror(errno),
771  errno);
772  return GWEN_ERROR_IO;
773  }
774 
775  return 0;
776 }
777 
778 
779 
781  TYPEMAKER2_TYPE *ty,
782  const char *fileName) {
783  FILE *f;
784 
785  f=fopen(fileName, "w");
786  if (f==NULL) {
787  DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)",
788  fileName,
789  strerror(errno),
790  errno);
791  return GWEN_ERROR_IO;
792  }
793 
794  fprintf(f, "<?xml?>\n");
795  fprintf(f, "\n");
796  fprintf(f, "<tm2>\n");
797 
798  fprintf(f, " <typedef id=\"%s\" type=\"pointer\" lang=\"c\" extends=\"struct_base\">\n",
800 
801  fprintf(f, " <identifier>%s</identifier>\n", Typemaker2_Type_GetName(ty));
802  fprintf(f, " <prefix>%s</prefix>\n", Typemaker2_Type_GetPrefix(ty));
803 
804  fprintf(f, " </typedef>\n");
805  fprintf(f, "</tm2>\n");
806 
807  if (fclose(f)) {
808  DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)",
809  fileName,
810  strerror(errno),
811  errno);
812  return GWEN_ERROR_IO;
813  }
814 
815  return 0;
816 }
817 
818 
819 
821  TYPEMAKER2_TYPE *ty,
822  const char *fileName) {
823  FILE *f;
824 
825  f=fopen(fileName, "w");
826  if (f==NULL) {
827  DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)",
828  fileName,
829  strerror(errno),
830  errno);
831  return GWEN_ERROR_IO;
832  }
833 
834  fprintf(f, "<?xml?>\n");
835  fprintf(f, "\n");
836  fprintf(f, "<tm2>\n");
837 
838  fprintf(f, " <typedef id=\"%s_LIST\" type=\"pointer\" lang=\"c\" extends=\"list1_base\" "
839  "basetype=\"%s\">\n",
842 
843  fprintf(f, " <identifier>%s_LIST</identifier>\n", Typemaker2_Type_GetName(ty));
844  fprintf(f, " <prefix>%s_List</prefix>\n", Typemaker2_Type_GetPrefix(ty));
845 
846  fprintf(f, " </typedef>\n");
847  fprintf(f, "</tm2>\n");
848 
849  if (fclose(f)) {
850  DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)",
851  fileName,
852  strerror(errno),
853  errno);
854  return GWEN_ERROR_IO;
855  }
856 
857  return 0;
858 }
859 
860 
861 
863  TYPEMAKER2_TYPE *ty,
864  const char *fileName) {
865  FILE *f;
866 
867  f=fopen(fileName, "w");
868  if (f==NULL) {
869  DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)",
870  fileName,
871  strerror(errno),
872  errno);
873  return GWEN_ERROR_IO;
874  }
875 
876  fprintf(f, "<?xml?>\n");
877  fprintf(f, "\n");
878  fprintf(f, "<tm2>\n");
879 
880  fprintf(f, " <typedef id=\"%s_LIST2\" type=\"pointer\" lang=\"c\" extends=\"list2_base\" "
881  "basetype=\"%s\">\n",
884 
885  fprintf(f, " <identifier>%s_LIST2</identifier>\n", Typemaker2_Type_GetName(ty));
886  fprintf(f, " <prefix>%s_List2</prefix>\n", Typemaker2_Type_GetPrefix(ty));
887 
888  fprintf(f, " </typedef>\n");
889  fprintf(f, "</tm2>\n");
890 
891  if (fclose(f)) {
892  DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)",
893  fileName,
894  strerror(errno),
895  errno);
896  return GWEN_ERROR_IO;
897  }
898 
899  return 0;
900 }
901 
902 
903 
905  TYPEMAKER2_TYPE *ty,
906  const char *fileName) {
907  FILE *f;
908 
909  f=fopen(fileName, "w");
910  if (f==NULL) {
911  DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)",
912  fileName,
913  strerror(errno),
914  errno);
915  return GWEN_ERROR_IO;
916  }
917 
918  fprintf(f, "<?xml?>\n");
919  fprintf(f, "\n");
920  fprintf(f, "<tm2>\n");
921 
922  fprintf(f, " <typedef id=\"%s_TREE\" type=\"pointer\" lang=\"c\" extends=\"tree_base\" "
923  "basetype=\"%s\">\n",
926 
927  fprintf(f, " <identifier>%s_TREE</identifier>\n", Typemaker2_Type_GetName(ty));
928  fprintf(f, " <prefix>%s_Tree</prefix>\n", Typemaker2_Type_GetPrefix(ty));
929 
930  fprintf(f, " </typedef>\n");
931  fprintf(f, "</tm2>\n");
932 
933  if (fclose(f)) {
934  DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)",
935  fileName,
936  strerror(errno),
937  errno);
938  return GWEN_ERROR_IO;
939  }
940 
941  return 0;
942 }
943 
944 
945 
947  TYPEMAKER2_TYPE *ty,
948  const char *fileName) {
949  FILE *f;
950 
951  f=fopen(fileName, "w");
952  if (f==NULL) {
953  DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)",
954  fileName,
955  strerror(errno),
956  errno);
957  return GWEN_ERROR_IO;
958  }
959 
960  fprintf(f, "<?xml?>\n");
961  fprintf(f, "\n");
962  fprintf(f, "<tm2>\n");
963 
964  fprintf(f, " <typedef id=\"%s_IDMAP\" type=\"pointer\" lang=\"c\" extends=\"idmap_base\" "
965  "basetype=\"%s\">\n",
968 
969  fprintf(f, " <identifier>%s_IDMAP</identifier>\n", Typemaker2_Type_GetName(ty));
970  fprintf(f, " <prefix>%s_IdMap</prefix>\n", Typemaker2_Type_GetPrefix(ty));
971 
972  fprintf(f, " </typedef>\n");
973  fprintf(f, "</tm2>\n");
974 
975  if (fclose(f)) {
976  DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)",
977  fileName,
978  strerror(errno),
979  errno);
980  return GWEN_ERROR_IO;
981  }
982 
983  return 0;
984 }
985 
986 
987 
988 
989 
991  const char *fname;
992 
993  if (GWEN_StringList_Count(tb->declarationsPublic)) {
994  fname=tb->fileNamePublic;
995  if (fname==NULL || *fname==0) {
996  const char *s;
997  char *t;
998  GWEN_BUFFER *tbuf;
999 
1001  if (s==NULL || *s==0) {
1003  if (s==NULL || *s==0) {
1004  DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name");
1005  return GWEN_ERROR_BAD_DATA;
1006  }
1007  }
1008  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
1009  if (tb->destFolder) {
1010  GWEN_Buffer_AppendString(tbuf, tb->destFolder);
1012  }
1013  GWEN_Buffer_AppendString(tbuf, s);
1014  t=GWEN_Buffer_GetStart(tbuf);
1015  while(*t) {
1016  *t=tolower(*t);
1017  t++;
1018  }
1019  GWEN_Buffer_AppendString(tbuf, ".h");
1020  fname=GWEN_Buffer_GetStart(tbuf);
1022  GWEN_Buffer_free(tbuf);
1023  }
1024  }
1025 
1026  if (GWEN_StringList_Count(tb->declarationsLibrary)) {
1027  fname=tb->fileNameLibrary;
1028  if (fname==NULL || *fname==0) {
1029  const char *s;
1030  char *t;
1031  GWEN_BUFFER *tbuf;
1032 
1034  if (s==NULL || *s==0) {
1036  if (s==NULL || *s==0) {
1037  DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name");
1038  return GWEN_ERROR_BAD_DATA;
1039  }
1040  }
1041  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
1042  if (tb->destFolder) {
1043  GWEN_Buffer_AppendString(tbuf, tb->destFolder);
1045  }
1046  GWEN_Buffer_AppendString(tbuf, s);
1047  t=GWEN_Buffer_GetStart(tbuf);
1048  while(*t) {
1049  *t=tolower(*t);
1050  t++;
1051  }
1052  GWEN_Buffer_AppendString(tbuf, "_l.h");
1053  fname=GWEN_Buffer_GetStart(tbuf);
1055  GWEN_Buffer_free(tbuf);
1056  }
1057  }
1058 
1059  if (GWEN_StringList_Count(tb->declarationsProtected)) {
1060  fname=tb->fileNameProtected;
1061  if (fname==NULL || *fname==0) {
1062  const char *s;
1063  char *t;
1064  GWEN_BUFFER *tbuf;
1065 
1067  if (s==NULL || *s==0) {
1069  if (s==NULL || *s==0) {
1070  DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name");
1071  return GWEN_ERROR_BAD_DATA;
1072  }
1073  }
1074  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
1075  if (tb->destFolder) {
1076  GWEN_Buffer_AppendString(tbuf, tb->destFolder);
1078  }
1079  GWEN_Buffer_AppendString(tbuf, s);
1080  t=GWEN_Buffer_GetStart(tbuf);
1081  while(*t) {
1082  *t=tolower(*t);
1083  t++;
1084  }
1085  GWEN_Buffer_AppendString(tbuf, "_be.h");
1086  fname=GWEN_Buffer_GetStart(tbuf);
1088  GWEN_Buffer_free(tbuf);
1089  }
1090  }
1091 
1092  if (GWEN_StringList_Count(tb->declarationsPrivate)) {
1093  fname=tb->fileNamePrivate;
1094  if (fname==NULL || *fname==0) {
1095  const char *s;
1096  char *t;
1097  GWEN_BUFFER *tbuf;
1098 
1100  if (s==NULL || *s==0) {
1102  if (s==NULL || *s==0) {
1103  DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name");
1104  return GWEN_ERROR_BAD_DATA;
1105  }
1106  }
1107  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
1108  if (tb->destFolder) {
1109  GWEN_Buffer_AppendString(tbuf, tb->destFolder);
1111  }
1112  GWEN_Buffer_AppendString(tbuf, s);
1113  t=GWEN_Buffer_GetStart(tbuf);
1114  while(*t) {
1115  *t=tolower(*t);
1116  t++;
1117  }
1118  GWEN_Buffer_AppendString(tbuf, "_p.h");
1119  fname=GWEN_Buffer_GetStart(tbuf);
1121  GWEN_Buffer_free(tbuf);
1122  }
1123  }
1124 
1125  if (GWEN_StringList_Count(tb->code)) {
1126  fname=tb->fileNameCode;
1127  if (fname==NULL || *fname==0) {
1128  const char *s;
1129  char *t;
1130  GWEN_BUFFER *tbuf;
1131 
1133  if (s==NULL || *s==0) {
1135  if (s==NULL || *s==0) {
1136  DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name");
1137  return GWEN_ERROR_BAD_DATA;
1138  }
1139  }
1140  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
1141  if (tb->destFolder) {
1142  GWEN_Buffer_AppendString(tbuf, tb->destFolder);
1144  }
1145  GWEN_Buffer_AppendString(tbuf, s);
1146  t=GWEN_Buffer_GetStart(tbuf);
1147  while(*t) {
1148  *t=tolower(*t);
1149  t++;
1150  }
1151  GWEN_Buffer_AppendString(tbuf, ".c");
1152  fname=GWEN_Buffer_GetStart(tbuf);
1154  GWEN_Buffer_free(tbuf);
1155  }
1156  }
1157 
1158  return 0;
1159 }
1160 
1161 
1162 
1164  const char *fname;
1165  int rv;
1166 
1168  if (rv<0) {
1169  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1170  return rv;
1171  }
1172 
1173  if (defsOnly) {
1174  if (GWEN_StringList_Count(tb->declarationsPublic)) {
1175  fname=tb->fileNamePublic;
1176  assert(fname);
1177 
1178  rv=Typemaker2_Builder_WriteFile(tb, ty, fname, tb->declarationsPublic,
1180  if (rv<0) {
1181  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1182  return rv;
1183  }
1184  }
1185 
1186  if (GWEN_StringList_Count(tb->declarationsLibrary)) {
1187  fname=tb->fileNameLibrary;
1188  assert(fname);
1189 
1190  rv=Typemaker2_Builder_WriteFile(tb, ty, fname, tb->declarationsLibrary,
1192  if (rv<0) {
1193  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1194  return rv;
1195  }
1196  }
1197 
1198  if (GWEN_StringList_Count(tb->declarationsProtected)) {
1199  fname=tb->fileNameProtected;
1200  assert(fname);
1201 
1202  rv=Typemaker2_Builder_WriteFile(tb, ty, fname, tb->declarationsProtected,
1204  if (rv<0) {
1205  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1206  return rv;
1207  }
1208  }
1209 
1210  if (GWEN_StringList_Count(tb->declarationsPrivate)) {
1211  fname=tb->fileNamePrivate;
1212  assert(fname);
1213 
1214  rv=Typemaker2_Builder_WriteFile(tb, ty, fname, tb->declarationsPrivate,
1216  if (rv<0) {
1217  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1218  return rv;
1219  }
1220  }
1221 
1222  if (GWEN_StringList_Count(tb->code)) {
1223  fname=tb->fileNameCode;
1224  assert(fname);
1225 
1226  rv=Typemaker2_Builder_WriteFile(tb, ty, fname, tb->code,
1228  if (rv<0) {
1229  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1230  return rv;
1231  }
1232  }
1233  }
1234 
1235  /* write typedef file */
1236  if (1) {
1237  const char *s;
1238  char *t;
1239  GWEN_BUFFER *tbuf;
1240 
1242  if (s==NULL || *s==0) {
1243  DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name");
1244  return GWEN_ERROR_BAD_DATA;
1245  }
1246  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
1247  if (tb->destFolder) {
1248  GWEN_Buffer_AppendString(tbuf, tb->destFolder);
1250  }
1251  GWEN_Buffer_AppendString(tbuf, s);
1252  t=GWEN_Buffer_GetStart(tbuf);
1253  while(*t) {
1254  *t=tolower(*t);
1255  t++;
1256  }
1257  GWEN_Buffer_AppendString(tbuf, ".tm2");
1258  fname=GWEN_Buffer_GetStart(tbuf);
1259  rv=Typemaker2_Builder_WriteTypedefFile(tb, ty, fname);
1260  GWEN_Buffer_free(tbuf);
1261  if (rv<0) {
1262  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1263  return rv;
1264  }
1265  }
1266 
1267 
1268  /* write typedef file for list1 */
1270  const char *s;
1271  char *t;
1272  GWEN_BUFFER *tbuf;
1273 
1275  if (s==NULL || *s==0) {
1276  DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name");
1277  return GWEN_ERROR_BAD_DATA;
1278  }
1279  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
1280  if (tb->destFolder) {
1281  GWEN_Buffer_AppendString(tbuf, tb->destFolder);
1283  }
1284  GWEN_Buffer_AppendString(tbuf, s);
1285  t=GWEN_Buffer_GetStart(tbuf);
1286  while(*t) {
1287  *t=tolower(*t);
1288  t++;
1289  }
1290  GWEN_Buffer_AppendString(tbuf, "_list.tm2");
1291  fname=GWEN_Buffer_GetStart(tbuf);
1293  GWEN_Buffer_free(tbuf);
1294  if (rv<0) {
1295  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1296  return rv;
1297  }
1298  }
1299 
1300  /* write typedef file for list2 */
1302  const char *s;
1303  char *t;
1304  GWEN_BUFFER *tbuf;
1305 
1307  if (s==NULL || *s==0) {
1308  DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name");
1309  return GWEN_ERROR_BAD_DATA;
1310  }
1311  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
1312  if (tb->destFolder) {
1313  GWEN_Buffer_AppendString(tbuf, tb->destFolder);
1315  }
1316  GWEN_Buffer_AppendString(tbuf, s);
1317  t=GWEN_Buffer_GetStart(tbuf);
1318  while(*t) {
1319  *t=tolower(*t);
1320  t++;
1321  }
1322  GWEN_Buffer_AppendString(tbuf, "_list2.tm2");
1323  fname=GWEN_Buffer_GetStart(tbuf);
1325  GWEN_Buffer_free(tbuf);
1326  if (rv<0) {
1327  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1328  return rv;
1329  }
1330  }
1331 
1332  /* write typedef file for tree */
1334  const char *s;
1335  char *t;
1336  GWEN_BUFFER *tbuf;
1337 
1339  if (s==NULL || *s==0) {
1340  DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name");
1341  return GWEN_ERROR_BAD_DATA;
1342  }
1343  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
1344  if (tb->destFolder) {
1345  GWEN_Buffer_AppendString(tbuf, tb->destFolder);
1347  }
1348  GWEN_Buffer_AppendString(tbuf, s);
1349  t=GWEN_Buffer_GetStart(tbuf);
1350  while(*t) {
1351  *t=tolower(*t);
1352  t++;
1353  }
1354  GWEN_Buffer_AppendString(tbuf, "_tree.tm2");
1355  fname=GWEN_Buffer_GetStart(tbuf);
1356  rv=Typemaker2_Builder_WriteTypedefFile_Tree(tb, ty, fname);
1357  GWEN_Buffer_free(tbuf);
1358  if (rv<0) {
1359  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1360  return rv;
1361  }
1362  }
1363 
1364  /* write typedef file for idmap */
1366  const char *s;
1367  char *t;
1368  GWEN_BUFFER *tbuf;
1369 
1371  if (s==NULL || *s==0) {
1372  DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name");
1373  return GWEN_ERROR_BAD_DATA;
1374  }
1375  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
1376  if (tb->destFolder) {
1377  GWEN_Buffer_AppendString(tbuf, tb->destFolder);
1379  }
1380  GWEN_Buffer_AppendString(tbuf, s);
1381  t=GWEN_Buffer_GetStart(tbuf);
1382  while(*t) {
1383  *t=tolower(*t);
1384  t++;
1385  }
1386  GWEN_Buffer_AppendString(tbuf, "_idmap.tm2");
1387  fname=GWEN_Buffer_GetStart(tbuf);
1389  GWEN_Buffer_free(tbuf);
1390  if (rv<0) {
1391  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1392  return rv;
1393  }
1394  }
1395 
1396 
1397  return 0;
1398 }
1399 
1400 
1401 
1402 
1403 
int Typemaker2_Header_GetType(const TYPEMAKER2_HEADER *th)
Definition: tm_header.c:83
TYPEMAKER2_TYPEMANAGER * Typemaker2_Builder_GetTypeManager(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:103
#define INVOKE_FN(macro_var1)
Definition: tm_builder.c:533
void Typemaker2_Builder_SetFileNameProtected(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:191
void Typemaker2_Builder_SetSourceFileName(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:239
void Typemaker2_Builder_SetBuildFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_BUILDER_BUILD_FN fn)
Definition: tm_builder.c:264
TYPEMAKER2_TYPE * Typemaker2_Member_GetTypePtr(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:410
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:223
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
Definition: stringlist.h:51
uint32_t Typemaker2_Member_GetFlags(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:206
const char * Typemaker2_Enum_GetFromStringFn(const TYPEMAKER2_ENUM *p_struct)
Definition: tm_enum.c:201
#define GWEN_DB_FLAGS_OVERWRITE_VARS
Definition: db.h:121
void Typemaker2_Builder_SetFileNameCode(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:223
const char * Typemaker2_Header_GetFileName(const TYPEMAKER2_HEADER *th)
Definition: tm_header.c:65
struct GWEN_DB_NODE GWEN_DB_NODE
Definition: db.h:228
#define GWEN_INHERIT_FINI(t, element)
Definition: inherit.h:238
GWEN_STRINGLIST * Typemaker2_Builder_GetProtectedDeclarations(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:82
#define GWEN_DIR_SEPARATOR_S
const char * Typemaker2_Builder_GetFileNamePrivate(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:200
TYPEMAKER2_HEADER_LIST * Typemaker2_Type_GetHeaders(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:576
const char * Typemaker2_Member_GetFieldId(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:152
TYPEMAKER2_ENUM * Typemaker2_Member_GetEnumPtr(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:426
void Typemaker2_Builder_SetFileNameLibrary(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:175
#define GWEN_FREE_OBJECT(varname)
Definition: memory.h:92
#define NULL
Definition: binreloc.c:290
int Typemaker2_Header_GetLocation(const TYPEMAKER2_HEADER *th)
Definition: tm_header.c:99
void Typemaker2_Builder_free(TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:47
int Typemaker2_Builder_DetermineOutFileNames(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder.c:990
TYPEMAKER2_TYPE * Typemaker2_Type_GetBaseTypePtr(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:552
int Typemaker2_Builder_WriteFiles(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, int defsOnly)
Definition: tm_builder.c:1163
#define GWEN_LOGDOMAIN
Definition: logger.h:35
void Typemaker2_Builder_SetTypeManager(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPEMANAGER *tm)
Definition: tm_builder.c:110
struct TYPEMAKER2_HEADER TYPEMAKER2_HEADER
Definition: tm_header.h:19
struct TYPEMAKER2_ENUM TYPEMAKER2_ENUM
Definition: tm_enum.h:24
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition: buffer.c:38
int Typemaker2_Member_GetMaxLen(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:326
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
Definition: stringlist.c:352
#define GWEN_ERROR_IO
Definition: error.h:123
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
Definition: stringlist.c:366
void Typemaker2_Builder_SetDestFolderName(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:255
int Typemaker2_Builder_WriteTypedefFile_List1(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
Definition: tm_builder.c:820
void Typemaker2_Builder_AddPrivateDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:138
void Typemaker2_Builder_SetFileNamePrivate(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:207
int Typemaker2_Builder_ReplaceVars(const char *s, GWEN_DB_NODE *db, GWEN_BUFFER *dbuf)
Definition: tm_builder.c:425
const char * Typemaker2_Member_GetPresetValue(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:365
#define GWEN_ERROR_BAD_DATA
Definition: error.h:121
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
Definition: stringlist.c:57
int Typemaker2_Builder_WriteTypedefFile_List2(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
Definition: tm_builder.c:862
const char * Typemaker2_Builder_GetFileNameLibrary(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:168
int Typemaker2_Builder_WriteTypedefFile(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
Definition: tm_builder.c:780
#define GWEN_NEW_OBJECT(typ, varname)
Definition: memory.h:86
int Typemaker2_Builder_Build(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder.c:271
const char * Typemaker2_Builder_GetFileNamePublic(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:152
const char * Typemaker2_Builder_GetSourceFileName(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:232
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
Definition: stringlist.c:230
int Typemaker2_Builder_WriteTypedefFile_Tree(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
Definition: tm_builder.c:904
GWEN_STRINGLIST * Typemaker2_Builder_GetPrivateDeclarations(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:89
int(* TYPEMAKER2_BUILDER_BUILD_FN)(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder.h:32
const char * Typemaker2_Type_GetIdentifier(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:484
void Typemaker2_Builder_AddProtectedDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:131
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
Definition: stringlist.h:54
#define TYPEMAKER2_TYPEFLAGS_WITH_TREE
Definition: tm_type.h:59
int Typemaker2_Builder_WriteTypedefFile_IdMap(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
Definition: tm_builder.c:946
const char * Typemaker2_Builder_GetFileNameProtected(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:184
int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c)
Definition: buffer.c:380
const char * GWEN_DB_GetCharValue(GWEN_DB_NODE *n, const char *path, int idx, const char *defVal)
Definition: db.c:897
#define GWEN_INHERIT_INIT(t, element)
Definition: inherit.h:223
struct TYPEMAKER2_BUILDER TYPEMAKER2_BUILDER
Definition: tm_builder.h:23
#define TYPEMAKER2_FLAGS_ENUM
Definition: tm_type.h:38
void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition: buffer.c:83
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:41
const char * Typemaker2_Type_GetName(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:124
int Typemaker2_Builder_WriteFile(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName, GWEN_STRINGLIST *sl, int acc)
Definition: tm_builder.c:607
const char * Typemaker2_Member_GetDefaultValue(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:343
void Typemaker2_Builder_AddCode(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:145
const char * Typemaker2_Builder_GetFileNameCode(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:216
unsigned int GWEN_StringList_Count(const GWEN_STRINGLIST *sl)
Definition: stringlist.c:382
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
struct TYPEMAKER2_TYPE TYPEMAKER2_TYPE
Definition: tm_type.h:21
void Typemaker2_Builder_AddPublicDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:117
#define TYPEMAKER2_TYPEFLAGS_WITH_IDMAP
Definition: tm_type.h:58
void Typemaker2_Builder_SetFileNamePublic(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:159
#define GWEN_ERROR_NOT_SUPPORTED
Definition: error.h:109
int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
Definition: db.c:922
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
Definition: stringlist.c:359
struct TYPEMAKER2_TYPEMANAGER TYPEMAKER2_TYPEMANAGER
GWEN_STRINGLIST * Typemaker2_Builder_GetCode(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:96
#define DBG_INFO(dbg_logger, format, args...)
Definition: debug.h:164
void Typemaker2_Builder_AddLibraryDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:124
const char * Typemaker2_Builder_GetDestFolderName(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:248
const char * Typemaker2_Type_GetPrefix(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:502
TYPEMAKER2_BUILDER * Typemaker2_Builder_new()
Definition: tm_builder.c:30
const char * Typemaker2_TypeManager_GetApiDeclaration(const TYPEMAKER2_TYPEMANAGER *tym)
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
Definition: db.c:131
GWEN_STRINGLIST * Typemaker2_Builder_GetPublicDeclarations(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:68
GWEN_STRINGLIST * Typemaker2_Builder_GetLibraryDeclarations(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:75
struct TYPEMAKER2_MEMBER TYPEMAKER2_MEMBER
Definition: tm_member.h:21
const char * Typemaker2_Enum_GetToStringFn(const TYPEMAKER2_ENUM *p_struct)
Definition: tm_enum.c:196
const char * Typemaker2_Member_GetElementName(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:116
GWEN_STRINGLIST * GWEN_StringList_new(void)
Definition: stringlist.c:46
uint32_t Typemaker2_Type_GetFlags(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:304
#define TYPEMAKER2_TYPEFLAGS_WITH_LIST2
Definition: tm_type.h:56
const char * Typemaker2_Member_GetName(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:80
#define GWEN_INHERIT_FUNCTIONS(t)
Definition: inherit.h:163
#define TYPEMAKER2_FLAGS_VOLATILE
Definition: tm_type.h:32
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition: buffer.c:1014
const char * Typemaker2_Type_GetBaseFileName(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:204
GWEN_DB_NODE * Typemaker2_Builder_CreateDbForCall(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst)
Definition: tm_builder.c:281
#define TYPEMAKER2_TYPEFLAGS_WITH_LIST1
Definition: tm_type.h:55