gwenhywfar 5.10.1
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
27
28/* ------------------------------------------------------------------------------------------------
29 * forward declarations
30 * ------------------------------------------------------------------------------------------------
31 */
32
33
34static void setCharValueWithTypePrefix(GWEN_DB_NODE *db, const char *prefix, const char *varName, const char *value);
38 GWEN_DB_NODE *db,
39 int withTypePrefix);
40
41
42/* ------------------------------------------------------------------------------------------------
43 * implementations
44 * ------------------------------------------------------------------------------------------------
45 */
46
47
48
50
51
52
54{
56
59
60 tb->declarationsPublic=GWEN_StringList_new();
61 tb->declarationsLibrary=GWEN_StringList_new();
62 tb->declarationsProtected=GWEN_StringList_new();
63 tb->declarationsPrivate=GWEN_StringList_new();
64 tb->code=GWEN_StringList_new();
65
66 return tb;
67}
68
69
70
72{
73 if (tb) {
75
76 GWEN_StringList_free(tb->declarationsPublic);
77 GWEN_StringList_free(tb->declarationsLibrary);
78 GWEN_StringList_free(tb->declarationsProtected);
79 GWEN_StringList_free(tb->declarationsPrivate);
80 GWEN_StringList_free(tb->code);
81 free(tb->fileNamePublic);
82 free(tb->fileNameLibrary);
83 free(tb->fileNameProtected);
84 free(tb->fileNamePrivate);
85 free(tb->fileNameCode);
86 free(tb->destFolder);
88 }
89}
90
91
92
94{
95 assert(tb);
96 return tb->declarationsPublic;
97}
98
99
100
102{
103 assert(tb);
104 return tb->declarationsLibrary;
105}
106
107
108
110{
111 assert(tb);
112 return tb->declarationsProtected;
113}
114
115
116
118{
119 assert(tb);
120 return tb->declarationsPrivate;
121}
122
123
124
126{
127 assert(tb);
128 return tb->code;
129}
130
131
132
134{
135 assert(tb);
136 return tb->typeManager;
137}
138
139
140
142{
143 assert(tb);
144 tb->typeManager=tm;
145}
146
147
148
149void Typemaker2_Builder_AddDeclaration(TYPEMAKER2_BUILDER *tb, int access, const char *s)
150{
151 switch (access) {
154 break;
157 break;
160 break;
163 break;
164 default:
165 DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type");
166 break;
167 }
168}
169
170
171
173{
174 assert(tb);
175 GWEN_StringList_AppendString(tb->declarationsPublic, s, 0, 0);
176}
177
178
179
181{
182 assert(tb);
183 GWEN_StringList_AppendString(tb->declarationsLibrary, s, 0, 0);
184}
185
186
187
189{
190 assert(tb);
191 GWEN_StringList_AppendString(tb->declarationsProtected, s, 0, 0);
192}
193
194
195
197{
198 assert(tb);
199 GWEN_StringList_AppendString(tb->declarationsPrivate, s, 0, 0);
200}
201
202
203
205{
206 assert(tb);
207 GWEN_StringList_AppendString(tb->code, s, 0, 0);
208}
209
210
211
213{
214 assert(tb);
215 return tb->fileNamePublic;
216}
217
218
219
221{
222 assert(tb);
223 free(tb->fileNamePublic);
224 if (s)
225 tb->fileNamePublic=strdup(s);
226 else
227 tb->fileNamePublic=NULL;
228}
229
230
231
233{
234 assert(tb);
235 return tb->fileNameLibrary;
236}
237
238
239
241{
242 assert(tb);
243 free(tb->fileNameLibrary);
244 if (s)
245 tb->fileNameLibrary=strdup(s);
246 else
247 tb->fileNameLibrary=NULL;
248}
249
250
251
253{
254 assert(tb);
255 return tb->fileNameProtected;
256}
257
258
259
261{
262 assert(tb);
263 free(tb->fileNameProtected);
264 if (s)
265 tb->fileNameProtected=strdup(s);
266 else
267 tb->fileNameProtected=NULL;
268}
269
270
271
273{
274 assert(tb);
275 return tb->fileNamePrivate;
276}
277
278
279
281{
282 assert(tb);
283 free(tb->fileNamePrivate);
284 if (s)
285 tb->fileNamePrivate=strdup(s);
286 else
287 tb->fileNamePrivate=NULL;
288}
289
290
291
293{
294 assert(tb);
295 return tb->fileNameCode;
296}
297
298
299
301{
302 assert(tb);
303 free(tb->fileNameCode);
304 if (s)
305 tb->fileNameCode=strdup(s);
306 else
307 tb->fileNameCode=NULL;
308}
309
310
311
313{
314 assert(tb);
315 return tb->sourceFileName;
316}
317
318
319
321{
322 assert(tb);
323 free(tb->sourceFileName);
324 if (s)
325 tb->sourceFileName=strdup(s);
326 else
327 tb->sourceFileName=NULL;
328}
329
330
331
333{
334 assert(tb);
335 return tb->destFolder;
336}
337
338
339
341{
342 assert(tb);
343 free(tb->destFolder);
344 if (s)
345 tb->destFolder=strdup(s);
346 else
347 tb->destFolder=NULL;
348}
349
350
351
353{
354 assert(tb);
355 tb->buildFn=fn;
356}
357
358
359
361{
362 assert(tb);
363 if (tb->buildFn)
364 return tb->buildFn(tb, ty);
365 else
367}
368
369
370
372 TYPEMAKER2_TYPE *ty,
374 const char *src,
375 const char *dst)
376{
377 GWEN_DB_NODE *db;
378 const char *s;
379
380 db=GWEN_DB_Group_new("vars");
381
382 if (tb->typeManager) {
384 if (s && *s)
386 else
388 }
389
390 /* set some type vars */
391 if (ty) {
392 TYPEMAKER2_TYPE *bty;
393 TYPEMAKER2_MEMBER_LIST *tml;
394
396 if (s && *s)
398
400 if (s && *s)
401 GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "struct_prefix", s);
402
404 if (bty) {
406 if (s && *s)
407 GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "basetype_type", s);
408
410 if (s && *s)
411 GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "basetype_prefix", s);
412 }
413
415 if (tml) {
417
418 tmm=Typemaker2_Member_List_First(tml);
419 while (tmm) {
420 /* write members with prefix */
421 addMemberInfoToCallDb(tb, ty, tmm, db, 1);
422 tmm=Typemaker2_Member_List_Next(tmm);
423 }
424 }
425 }
426
427 /* set some member vars */
428 if (tm)
429 /* write specific member without prefix */
430 addMemberInfoToCallDb(tb, ty, tm, db, 0);
431
432 /* set src and dst */
433 if (src && *src)
435 if (dst && *dst)
437
438 /* set some fixed vars */
441 GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "buffer", "p_buffer");
442
443 return db;
444}
445
446
447
451 GWEN_DB_NODE *db,
452 int withTypePrefix)
453{
454 const char *s;
455 const char *prefix=NULL;
456 char numbuf[32];
457 TYPEMAKER2_TYPE *mty;
458
460 if (withTypePrefix)
461 prefix=s;
462
463 if (s && *s) {
464 GWEN_BUFFER *tbuf;
465
466 setCharValueWithTypePrefix(db, prefix, "name", s);
467
468 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
469 GWEN_Buffer_AppendByte(tbuf, toupper(*s));
470 GWEN_Buffer_AppendString(tbuf, s+1);
471 setCharValueWithTypePrefix(db, prefix, "nameWithCapital", GWEN_Buffer_GetStart(tbuf));
472 GWEN_Buffer_free(tbuf);
473 }
474
476 if (s && *s)
477 setCharValueWithTypePrefix(db, prefix, "element_name", s);
478 else
479 /* default behaviour is to use the name "element" for list members in GWEN_DBs */
480 setCharValueWithTypePrefix(db, prefix, "element_name", "element");
481
483
485
487 /* set field number for toObject/fromObject */
489 if (s && *s)
490 setCharValueWithTypePrefix(db, prefix, "fieldid", s);
491 }
492
493 /* maxlen */
494 snprintf(numbuf, sizeof(numbuf)-1, "%d", Typemaker2_Member_GetMaxLen(tm));
495 setCharValueWithTypePrefix(db, prefix, "maxlen", numbuf);
496
497 /* set basetype stuff */
499 assert(mty);
500 if (mty) {
501 TYPEMAKER2_TYPE *bty;
502
503 setCharValueWithTypePrefix(db, prefix, "member_type", Typemaker2_Type_GetIdentifier(mty));
504 setCharValueWithTypePrefix(db, prefix, "member_prefix", Typemaker2_Type_GetPrefix(mty));
505
507 if (bty) {
508 setCharValueWithTypePrefix(db, prefix, "member_basetype_type", Typemaker2_Type_GetIdentifier(bty));
509 setCharValueWithTypePrefix(db, prefix, "member_basetype_prefix", Typemaker2_Type_GetPrefix(bty));
510 }
511 }
512
513 /* set enum-specific stuff */
515 TYPEMAKER2_ENUM *te;
516
518 if (te) {
519 setCharValueWithTypePrefix(db, prefix, "enum_fromstring_fn", Typemaker2_Enum_GetFromStringFn(te));
520 setCharValueWithTypePrefix(db, prefix, "enum_tostring_fn", Typemaker2_Enum_GetToStringFn(te));
521 }
522 }
523}
524
525
526
527void setCharValueWithTypePrefix(GWEN_DB_NODE *db, const char *prefix, const char *varName, const char *value)
528{
529 if (value) {
530 if (prefix && *prefix) {
531 GWEN_BUFFER *tbuf;
532
533 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
534 GWEN_Buffer_AppendString(tbuf, prefix);
535 GWEN_Buffer_AppendString(tbuf, ".");
536 GWEN_Buffer_AppendString(tbuf, varName);
538 GWEN_Buffer_free(tbuf);
539 }
540 else {
542 }
543 }
544}
545
546
547
549 GWEN_DB_NODE *db,
550 GWEN_BUFFER *dbuf)
551{
552 const char *p;
553
554 p=s;
555 while (*p) {
556 if (*p=='$') {
557 p++;
558 if (*p=='$')
559 GWEN_Buffer_AppendByte(dbuf, '$');
560 else if (*p=='(') {
561 const char *pStart;
562
563 p++;
564 pStart=p;
565 while (*p && *p!=')')
566 p++;
567 if (*p!=')') {
568 DBG_ERROR(GWEN_LOGDOMAIN, "Unterminated variable name in code");
569 return GWEN_ERROR_BAD_DATA;
570 }
571 else {
572 int len;
573 char *name;
574 const char *v;
575
576 len=p-pStart;
577 if (len<1) {
578 DBG_ERROR(GWEN_LOGDOMAIN, "Empty variable name in code");
579 return GWEN_ERROR_BAD_DATA;
580 }
581 name=(char *) malloc(len+1);
582 assert(name);
583 memmove(name, pStart, len);
584 name[len]=0;
585 v=GWEN_DB_GetCharValue(db, name, 0, NULL);
586 if (v) {
587 free(name);
589 }
590#if 0 /* just replace with empty value */
591 else {
592 GWEN_Buffer_AppendString(dbuf, " [__VALUE OF ");
593 GWEN_Buffer_AppendString(dbuf, name);
594 GWEN_Buffer_AppendString(dbuf, " WAS NOT SET__] ");
595 free(name);
596 }
597#endif
598 }
599 }
600 else {
601 DBG_ERROR(GWEN_LOGDOMAIN, "Bad variable string in code");
602 return GWEN_ERROR_BAD_DATA;
603 }
604 p++;
605 }
606 else {
607 if (*p=='#') {
608 /* let # lines begin on a new line */
609 GWEN_Buffer_AppendByte(dbuf, '\n');
610 GWEN_Buffer_AppendByte(dbuf, *p);
611
612 /* skip introducing cross and copy all stuff until the next cross
613 * upon which wa inject a newline (to make the preprocessor happy)
614 */
615 p++;
616 while (*p && *p!='#') {
617 GWEN_Buffer_AppendByte(dbuf, *p);
618 p++;
619 }
620 if (*p=='#') {
621 GWEN_Buffer_AppendByte(dbuf, '\n');
622 p++;
623 }
624 }
625 else if (*p=='\\') {
626 /* check for recognized control escapes */
627 if (tolower(p[1])=='n') {
628 GWEN_Buffer_AppendByte(dbuf, '\n');
629 p+=2; /* skip introducing backslash and control character */
630 }
631 else if (tolower(p[1])=='t') {
632 GWEN_Buffer_AppendByte(dbuf, '\t');
633 p+=2; /* skip introducing backslash and control character */
634 }
635 else if (tolower(p[1])=='\\') {
636 GWEN_Buffer_AppendByte(dbuf, '\\');
637 p+=2; /* skip introducing backslash and control character */
638 }
639 else {
640 /* no known escape character, just add literally */
641 GWEN_Buffer_AppendByte(dbuf, *p);
642 p++;
643 }
644 }
645 else {
646 GWEN_Buffer_AppendByte(dbuf, *p);
647 p++;
648 }
649 }
650 }
651
652 return 0;
653}
654
655
656
657#define INVOKE_FN(macro_var1) \
658 int Typemaker2_Builder_Invoke_##macro_var1##Fn(TYPEMAKER2_BUILDER *tb, \
659 TYPEMAKER2_TYPE *ty, \
660 TYPEMAKER2_MEMBER *tm, \
661 const char *src, \
662 const char *dst, \
663 GWEN_BUFFER *dbuf) { \
664 if (tm) { \
665 TYPEMAKER2_TYPE *mty; \
666 TYPEMAKER2_CODE *tc; \
667 const char *s=NULL; \
668 \
669 mty=Typemaker2_Member_GetTypePtr(tm); \
670 if (mty==NULL) { \
671 DBG_ERROR(GWEN_LOGDOMAIN, "No type pointer for member"); \
672 return GWEN_ERROR_NO_DATA; \
673 } \
674 tc=Typemaker2_Type_FindCodeForMember(mty, tm, __STRING(macro_var1));\
675 if (tc) \
676 s=Typemaker2_Code_GetCode(tc); \
677 if (s && *s) { \
678 GWEN_DB_NODE *db; \
679 int rv; \
680 \
681 db=Typemaker2_Builder_CreateDbForCall(tb, ty, tm, src, dst); \
682 if (db==NULL) { \
683 DBG_INFO(GWEN_LOGDOMAIN, "here"); \
684 return GWEN_ERROR_BAD_DATA; \
685 } \
686 \
687 if (0) { \
688 GWEN_Buffer_AppendString(dbuf, "/* function \""); \
689 GWEN_Buffer_AppendString(dbuf, __STRING(macro_var1)); \
690 GWEN_Buffer_AppendString(dbuf, "\" of type \""); \
691 GWEN_Buffer_AppendString(dbuf, Typemaker2_Type_GetName(mty)); \
692 GWEN_Buffer_AppendString(dbuf, "\" */\n"); \
693 } \
694 rv=Typemaker2_Builder_ReplaceVars(s, db, dbuf); \
695 GWEN_DB_Group_free(db); \
696 if (rv<0) { \
697 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); \
698 return rv; \
699 } \
700 return 0; \
701 } \
702 else { \
703 DBG_INFO(GWEN_LOGDOMAIN, "No code for type [%s]", \
704 Typemaker2_Type_GetName(mty)); \
705 return 0; \
706 } \
707 } \
708 else { \
709 DBG_ERROR(GWEN_LOGDOMAIN, "No member information"); \
710 return GWEN_ERROR_NO_DATA; \
711 } \
712 }
713
714
715INVOKE_FN(Construct);
716INVOKE_FN(Destruct);
717INVOKE_FN(Assign);
719INVOKE_FN(Compare);
721INVOKE_FN(FromDb);
723INVOKE_FN(FromXml);
724INVOKE_FN(ToObject);
725INVOKE_FN(FromObject);
726INVOKE_FN(ToHashString);
727
728
729
730
732 TYPEMAKER2_TYPE *ty,
733 const char *fileName,
734 GWEN_STRINGLIST *sl,
735 int acc)
736{
738 FILE *f;
739
740 f=fopen(fileName, "w");
741 if (f==NULL) {
742 DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)",
743 fileName,
744 strerror(errno),
745 errno);
746 return GWEN_ERROR_IO;
747 }
748
749 fprintf(f,
750 "/**********************************************************\n"
751 " * This file has been automatically created by \"typemaker2\"\n"
752 " * from the file \"%s\".\n"
753 " * Please do not edit this file, all changes will be lost.\n"
754 " * Better edit the mentioned source file instead.\n"
755 " **********************************************************/\n"
756 "\n",
758
759 if (acc==TypeMaker2_Access_Unknown) {
760 const char *s;
761 TYPEMAKER2_HEADER_LIST *hl;
762
763 fprintf(f, "#ifdef HAVE_CONFIG_H\n# include <config.h>\n#endif\n\n");
764
765 s=tb->fileNamePrivate;
766 if (s==NULL)
767 s=tb->fileNameLibrary;
768 if (s==NULL)
769 s=tb->fileNameProtected;
770 if (s==NULL)
771 s=tb->fileNamePublic;
772 if (s) {
773 fprintf(f, "#include \"%s\"\n\n", s);
774 }
775
776 /* add some needed headers */
777 fprintf(f, "#include <gwenhywfar/misc.h>\n");
778 fprintf(f, "#include <gwenhywfar/debug.h>\n");
779
780 /* write code headers */
781 fprintf(f, "\n");
782 fprintf(f, "/* code headers */\n");
784 if (hl) {
786
787 h=Typemaker2_Header_List_First(hl);
788 while (h) {
791 fprintf(f, "#include <%s>\n", Typemaker2_Header_GetFileName(h));
792 else
793 fprintf(f, "#include \"%s\"\n", Typemaker2_Header_GetFileName(h));
794 }
795 h=Typemaker2_Header_List_Next(h);
796 }
797 }
798 fprintf(f, "\n");
799 }
800 else {
801 GWEN_BUFFER *xbuf;
802 char *p;
803 const char *s;
804
805 xbuf=GWEN_Buffer_new(0, 256, 0, 1);
808 GWEN_Buffer_AppendString(xbuf, "_");
809 s=strrchr(fileName, GWEN_DIR_SEPARATOR);
810 if (s && *s)
811 GWEN_Buffer_AppendString(xbuf, s+1);
812 else
813 GWEN_Buffer_AppendString(xbuf, fileName);
814 p=GWEN_Buffer_GetStart(xbuf);
815 while (*p) {
816 if (!isalnum(*p))
817 *p='_';
818 else
819 *p=toupper(*p);
820 p++;
821 }
822 fprintf(f, "#ifndef %s\n", GWEN_Buffer_GetStart(xbuf));
823 fprintf(f, "#define %s\n\n", GWEN_Buffer_GetStart(xbuf));
824
825 s=NULL;
826 switch (acc) {
828 s=tb->fileNamePrivate;
829 if (s)
830 break;
832 s=tb->fileNameLibrary;
833 if (s)
834 break;
836 s=tb->fileNameProtected;
837 if (s)
838 break;
840 s=tb->fileNamePublic;
841 if (s)
842 break;
843 default:
844 break;
845 }
846
847 if (s) {
848 fprintf(f, "#include \"%s\"\n\n", s);
849 }
850
851 fprintf(f, "\n");
852 fprintf(f, "#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n");
853 GWEN_Buffer_free(xbuf);
854 }
855
857 while (se) {
858 const char *s;
859
861 if (s)
862 fprintf(f, "%s\n", s);
863
865 }
866
867 if (acc==TypeMaker2_Access_Unknown) {
868 TYPEMAKER2_HEADER_LIST *hl;
869
870 /* write codeEnd headers */
871 fprintf(f, "\n");
872 fprintf(f, "/* code headers */\n");
874 if (hl) {
876
877 h=Typemaker2_Header_List_First(hl);
878 while (h) {
881 fprintf(f, "#include <%s>\n", Typemaker2_Header_GetFileName(h));
882 else
883 fprintf(f, "#include \"%s\"\n", Typemaker2_Header_GetFileName(h));
884 }
885 h=Typemaker2_Header_List_Next(h);
886 }
887 }
888 fprintf(f, "\n");
889 }
890
891 if (acc!=TypeMaker2_Access_Unknown) {
892 fprintf(f, "#ifdef __cplusplus\n}\n#endif\n\n");
893 fprintf(f, "#endif\n\n");
894 }
895
896 if (fclose(f)) {
897 DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)",
898 fileName,
899 strerror(errno),
900 errno);
901 return GWEN_ERROR_IO;
902 }
903
904 return 0;
905}
906
907
908
910 TYPEMAKER2_TYPE *ty,
911 const char *fileName)
912{
913 FILE *f;
914
915 f=fopen(fileName, "w");
916 if (f==NULL) {
917 DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)",
918 fileName,
919 strerror(errno),
920 errno);
921 return GWEN_ERROR_IO;
922 }
923
924 fprintf(f, "<?xml?>\n");
925 fprintf(f, "\n");
926 fprintf(f, "<tm2>\n");
927
928 fprintf(f, " <typedef id=\"%s\" type=\"pointer\" lang=\"c\" extends=\"struct_base\">\n",
930
931 fprintf(f, " <identifier>%s</identifier>\n", Typemaker2_Type_GetName(ty));
932 fprintf(f, " <prefix>%s</prefix>\n", Typemaker2_Type_GetPrefix(ty));
933
934 fprintf(f, " </typedef>\n");
935 fprintf(f, "</tm2>\n");
936
937 if (fclose(f)) {
938 DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)",
939 fileName,
940 strerror(errno),
941 errno);
942 return GWEN_ERROR_IO;
943 }
944
945 return 0;
946}
947
948
949
951 TYPEMAKER2_TYPE *ty,
952 const char *fileName)
953{
954 FILE *f;
955
956 f=fopen(fileName, "w");
957 if (f==NULL) {
958 DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)",
959 fileName,
960 strerror(errno),
961 errno);
962 return GWEN_ERROR_IO;
963 }
964
965 fprintf(f, "<?xml?>\n");
966 fprintf(f, "\n");
967 fprintf(f, "<tm2>\n");
968
969 fprintf(f, " <typedef id=\"%s_LIST\" type=\"pointer\" lang=\"c\" extends=\"list1_base\" "
970 "basetype=\"%s\">\n",
973
974 fprintf(f, " <identifier>%s_LIST</identifier>\n", Typemaker2_Type_GetName(ty));
975 fprintf(f, " <prefix>%s_List</prefix>\n", Typemaker2_Type_GetPrefix(ty));
976
977 fprintf(f, " </typedef>\n");
978 fprintf(f, "</tm2>\n");
979
980 if (fclose(f)) {
981 DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)",
982 fileName,
983 strerror(errno),
984 errno);
985 return GWEN_ERROR_IO;
986 }
987
988 return 0;
989}
990
991
992
994 TYPEMAKER2_TYPE *ty,
995 const char *fileName)
996{
997 FILE *f;
998
999 f=fopen(fileName, "w");
1000 if (f==NULL) {
1001 DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)",
1002 fileName,
1003 strerror(errno),
1004 errno);
1005 return GWEN_ERROR_IO;
1006 }
1007
1008 fprintf(f, "<?xml?>\n");
1009 fprintf(f, "\n");
1010 fprintf(f, "<tm2>\n");
1011
1012 fprintf(f, " <typedef id=\"%s_LIST2\" type=\"pointer\" lang=\"c\" extends=\"list2_base\" "
1013 "basetype=\"%s\">\n",
1016
1017 fprintf(f, " <identifier>%s_LIST2</identifier>\n", Typemaker2_Type_GetName(ty));
1018 fprintf(f, " <prefix>%s_List2</prefix>\n", Typemaker2_Type_GetPrefix(ty));
1019
1020 fprintf(f, " </typedef>\n");
1021 fprintf(f, "</tm2>\n");
1022
1023 if (fclose(f)) {
1024 DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)",
1025 fileName,
1026 strerror(errno),
1027 errno);
1028 return GWEN_ERROR_IO;
1029 }
1030
1031 return 0;
1032}
1033
1034
1035
1037 TYPEMAKER2_TYPE *ty,
1038 const char *fileName)
1039{
1040 FILE *f;
1041
1042 f=fopen(fileName, "w");
1043 if (f==NULL) {
1044 DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)",
1045 fileName,
1046 strerror(errno),
1047 errno);
1048 return GWEN_ERROR_IO;
1049 }
1050
1051 fprintf(f, "<?xml?>\n");
1052 fprintf(f, "\n");
1053 fprintf(f, "<tm2>\n");
1054
1055 fprintf(f, " <typedef id=\"%s_TREE\" type=\"pointer\" lang=\"c\" extends=\"tree_base\" "
1056 "basetype=\"%s\">\n",
1059
1060 fprintf(f, " <identifier>%s_TREE</identifier>\n", Typemaker2_Type_GetName(ty));
1061 fprintf(f, " <prefix>%s_Tree</prefix>\n", Typemaker2_Type_GetPrefix(ty));
1062
1063 fprintf(f, " </typedef>\n");
1064 fprintf(f, "</tm2>\n");
1065
1066 if (fclose(f)) {
1067 DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)",
1068 fileName,
1069 strerror(errno),
1070 errno);
1071 return GWEN_ERROR_IO;
1072 }
1073
1074 return 0;
1075}
1076
1077
1078
1080 TYPEMAKER2_TYPE *ty,
1081 const char *fileName)
1082{
1083 FILE *f;
1084
1085 f=fopen(fileName, "w");
1086 if (f==NULL) {
1087 DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)",
1088 fileName,
1089 strerror(errno),
1090 errno);
1091 return GWEN_ERROR_IO;
1092 }
1093
1094 fprintf(f, "<?xml?>\n");
1095 fprintf(f, "\n");
1096 fprintf(f, "<tm2>\n");
1097
1098 fprintf(f, " <typedef id=\"%s_TREE2\" type=\"pointer\" lang=\"c\" extends=\"tree_base\" "
1099 "basetype=\"%s\">\n",
1102
1103 fprintf(f, " <identifier>%s_TREE2</identifier>\n", Typemaker2_Type_GetName(ty));
1104 fprintf(f, " <prefix>%s_Tree2</prefix>\n", Typemaker2_Type_GetPrefix(ty));
1105
1106 fprintf(f, " </typedef>\n");
1107 fprintf(f, "</tm2>\n");
1108
1109 if (fclose(f)) {
1110 DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)",
1111 fileName,
1112 strerror(errno),
1113 errno);
1114 return GWEN_ERROR_IO;
1115 }
1116
1117 return 0;
1118}
1119
1120
1121
1123 TYPEMAKER2_TYPE *ty,
1124 const char *fileName)
1125{
1126 FILE *f;
1127
1128 f=fopen(fileName, "w");
1129 if (f==NULL) {
1130 DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)",
1131 fileName,
1132 strerror(errno),
1133 errno);
1134 return GWEN_ERROR_IO;
1135 }
1136
1137 fprintf(f, "<?xml?>\n");
1138 fprintf(f, "\n");
1139 fprintf(f, "<tm2>\n");
1140
1141 fprintf(f, " <typedef id=\"%s_IDMAP\" type=\"pointer\" lang=\"c\" extends=\"idmap_base\" "
1142 "basetype=\"%s\">\n",
1145
1146 fprintf(f, " <identifier>%s_IDMAP</identifier>\n", Typemaker2_Type_GetName(ty));
1147 fprintf(f, " <prefix>%s_IdMap</prefix>\n", Typemaker2_Type_GetPrefix(ty));
1148
1149 fprintf(f, " </typedef>\n");
1150 fprintf(f, "</tm2>\n");
1151
1152 if (fclose(f)) {
1153 DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)",
1154 fileName,
1155 strerror(errno),
1156 errno);
1157 return GWEN_ERROR_IO;
1158 }
1159
1160 return 0;
1161}
1162
1163
1164
1165
1166
1168{
1169 const char *fname;
1170
1171 if (GWEN_StringList_Count(tb->declarationsPublic)) {
1172 fname=tb->fileNamePublic;
1173 if (fname==NULL || *fname==0) {
1174 const char *s;
1175 char *t;
1176 GWEN_BUFFER *tbuf;
1177
1179 if (s==NULL || *s==0) {
1181 if (s==NULL || *s==0) {
1182 DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name");
1183 return GWEN_ERROR_BAD_DATA;
1184 }
1185 }
1186 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
1187 if (tb->destFolder) {
1188 GWEN_Buffer_AppendString(tbuf, tb->destFolder);
1190 }
1191 GWEN_Buffer_AppendString(tbuf, s);
1192 t=GWEN_Buffer_GetStart(tbuf);
1193 while (*t) {
1194 *t=tolower(*t);
1195 t++;
1196 }
1197 GWEN_Buffer_AppendString(tbuf, ".h");
1198 fname=GWEN_Buffer_GetStart(tbuf);
1200 GWEN_Buffer_free(tbuf);
1201 }
1202 }
1203
1204 if (GWEN_StringList_Count(tb->declarationsLibrary)) {
1205 fname=tb->fileNameLibrary;
1206 if (fname==NULL || *fname==0) {
1207 const char *s;
1208 char *t;
1209 GWEN_BUFFER *tbuf;
1210
1212 if (s==NULL || *s==0) {
1214 if (s==NULL || *s==0) {
1215 DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name");
1216 return GWEN_ERROR_BAD_DATA;
1217 }
1218 }
1219 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
1220 if (tb->destFolder) {
1221 GWEN_Buffer_AppendString(tbuf, tb->destFolder);
1223 }
1224 GWEN_Buffer_AppendString(tbuf, s);
1225 t=GWEN_Buffer_GetStart(tbuf);
1226 while (*t) {
1227 *t=tolower(*t);
1228 t++;
1229 }
1230 GWEN_Buffer_AppendString(tbuf, "_l.h");
1231 fname=GWEN_Buffer_GetStart(tbuf);
1233 GWEN_Buffer_free(tbuf);
1234 }
1235 }
1236
1237 if (GWEN_StringList_Count(tb->declarationsProtected)) {
1238 fname=tb->fileNameProtected;
1239 if (fname==NULL || *fname==0) {
1240 const char *s;
1241 char *t;
1242 GWEN_BUFFER *tbuf;
1243
1245 if (s==NULL || *s==0) {
1247 if (s==NULL || *s==0) {
1248 DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name");
1249 return GWEN_ERROR_BAD_DATA;
1250 }
1251 }
1252 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
1253 if (tb->destFolder) {
1254 GWEN_Buffer_AppendString(tbuf, tb->destFolder);
1256 }
1257 GWEN_Buffer_AppendString(tbuf, s);
1258 t=GWEN_Buffer_GetStart(tbuf);
1259 while (*t) {
1260 *t=tolower(*t);
1261 t++;
1262 }
1263 GWEN_Buffer_AppendString(tbuf, "_be.h");
1264 fname=GWEN_Buffer_GetStart(tbuf);
1266 GWEN_Buffer_free(tbuf);
1267 }
1268 }
1269
1270 if (GWEN_StringList_Count(tb->declarationsPrivate)) {
1271 fname=tb->fileNamePrivate;
1272 if (fname==NULL || *fname==0) {
1273 const char *s;
1274 char *t;
1275 GWEN_BUFFER *tbuf;
1276
1278 if (s==NULL || *s==0) {
1280 if (s==NULL || *s==0) {
1281 DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name");
1282 return GWEN_ERROR_BAD_DATA;
1283 }
1284 }
1285 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
1286 if (tb->destFolder) {
1287 GWEN_Buffer_AppendString(tbuf, tb->destFolder);
1289 }
1290 GWEN_Buffer_AppendString(tbuf, s);
1291 t=GWEN_Buffer_GetStart(tbuf);
1292 while (*t) {
1293 *t=tolower(*t);
1294 t++;
1295 }
1296 GWEN_Buffer_AppendString(tbuf, "_p.h");
1297 fname=GWEN_Buffer_GetStart(tbuf);
1299 GWEN_Buffer_free(tbuf);
1300 }
1301 }
1302
1303 if (GWEN_StringList_Count(tb->code)) {
1304 fname=tb->fileNameCode;
1305 if (fname==NULL || *fname==0) {
1306 const char *s;
1307 char *t;
1308 GWEN_BUFFER *tbuf;
1309
1311 if (s==NULL || *s==0) {
1313 if (s==NULL || *s==0) {
1314 DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name");
1315 return GWEN_ERROR_BAD_DATA;
1316 }
1317 }
1318 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
1319 if (tb->destFolder) {
1320 GWEN_Buffer_AppendString(tbuf, tb->destFolder);
1322 }
1323 GWEN_Buffer_AppendString(tbuf, s);
1324 t=GWEN_Buffer_GetStart(tbuf);
1325 while (*t) {
1326 *t=tolower(*t);
1327 t++;
1328 }
1329 GWEN_Buffer_AppendString(tbuf, ".c");
1330 fname=GWEN_Buffer_GetStart(tbuf);
1332 GWEN_Buffer_free(tbuf);
1333 }
1334 }
1335
1336 return 0;
1337}
1338
1339
1340
1342{
1343 const char *fname;
1344 int rv;
1345
1347 if (rv<0) {
1348 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1349 return rv;
1350 }
1351
1353 if (GWEN_StringList_Count(tb->declarationsPublic)) {
1354 fname=tb->fileNamePublic;
1355 assert(fname);
1356
1357 rv=Typemaker2_Builder_WriteFile(tb, ty, fname, tb->declarationsPublic,
1359 if (rv<0) {
1360 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1361 return rv;
1362 }
1363 }
1364
1365 if (GWEN_StringList_Count(tb->declarationsLibrary)) {
1366 fname=tb->fileNameLibrary;
1367 assert(fname);
1368
1369 rv=Typemaker2_Builder_WriteFile(tb, ty, fname, tb->declarationsLibrary,
1371 if (rv<0) {
1372 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1373 return rv;
1374 }
1375 }
1376
1377 if (GWEN_StringList_Count(tb->declarationsProtected)) {
1378 fname=tb->fileNameProtected;
1379 assert(fname);
1380
1381 rv=Typemaker2_Builder_WriteFile(tb, ty, fname, tb->declarationsProtected,
1383 if (rv<0) {
1384 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1385 return rv;
1386 }
1387 }
1388
1389 if (GWEN_StringList_Count(tb->declarationsPrivate)) {
1390 fname=tb->fileNamePrivate;
1391 assert(fname);
1392
1393 rv=Typemaker2_Builder_WriteFile(tb, ty, fname, tb->declarationsPrivate,
1395 if (rv<0) {
1396 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1397 return rv;
1398 }
1399 }
1400
1401 if (GWEN_StringList_Count(tb->code)) {
1402 fname=tb->fileNameCode;
1403 assert(fname);
1404
1405 rv=Typemaker2_Builder_WriteFile(tb, ty, fname, tb->code,
1407 if (rv<0) {
1408 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1409 return rv;
1410 }
1411 }
1412 }
1413
1414 /* write typedef file */
1416 if (1) {
1417 const char *s;
1418 char *t;
1419 GWEN_BUFFER *tbuf;
1420
1422 if (s==NULL || *s==0) {
1423 DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name");
1424 return GWEN_ERROR_BAD_DATA;
1425 }
1426 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
1427 if (tb->destFolder) {
1428 GWEN_Buffer_AppendString(tbuf, tb->destFolder);
1430 }
1431 GWEN_Buffer_AppendString(tbuf, s);
1432 t=GWEN_Buffer_GetStart(tbuf);
1433 while (*t) {
1434 *t=tolower(*t);
1435 t++;
1436 }
1437 GWEN_Buffer_AppendString(tbuf, ".tm2");
1438 fname=GWEN_Buffer_GetStart(tbuf);
1439 rv=Typemaker2_Builder_WriteTypedefFile(tb, ty, fname);
1440 GWEN_Buffer_free(tbuf);
1441 if (rv<0) {
1442 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1443 return rv;
1444 }
1445 }
1446
1447 /* write typedef file for list1 */
1449 const char *s;
1450 char *t;
1451 GWEN_BUFFER *tbuf;
1452
1454 if (s==NULL || *s==0) {
1455 DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name");
1456 return GWEN_ERROR_BAD_DATA;
1457 }
1458 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
1459 if (tb->destFolder) {
1460 GWEN_Buffer_AppendString(tbuf, tb->destFolder);
1462 }
1463 GWEN_Buffer_AppendString(tbuf, s);
1464 t=GWEN_Buffer_GetStart(tbuf);
1465 while (*t) {
1466 *t=tolower(*t);
1467 t++;
1468 }
1469 GWEN_Buffer_AppendString(tbuf, "_list.tm2");
1470 fname=GWEN_Buffer_GetStart(tbuf);
1472 GWEN_Buffer_free(tbuf);
1473 if (rv<0) {
1474 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1475 return rv;
1476 }
1477 }
1478
1479 /* write typedef file for list2 */
1481 const char *s;
1482 char *t;
1483 GWEN_BUFFER *tbuf;
1484
1486 if (s==NULL || *s==0) {
1487 DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name");
1488 return GWEN_ERROR_BAD_DATA;
1489 }
1490 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
1491 if (tb->destFolder) {
1492 GWEN_Buffer_AppendString(tbuf, tb->destFolder);
1494 }
1495 GWEN_Buffer_AppendString(tbuf, s);
1496 t=GWEN_Buffer_GetStart(tbuf);
1497 while (*t) {
1498 *t=tolower(*t);
1499 t++;
1500 }
1501 GWEN_Buffer_AppendString(tbuf, "_list2.tm2");
1502 fname=GWEN_Buffer_GetStart(tbuf);
1504 GWEN_Buffer_free(tbuf);
1505 if (rv<0) {
1506 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1507 return rv;
1508 }
1509 }
1510
1511 /* write typedef file for tree */
1513 const char *s;
1514 char *t;
1515 GWEN_BUFFER *tbuf;
1516
1518 if (s==NULL || *s==0) {
1519 DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name");
1520 return GWEN_ERROR_BAD_DATA;
1521 }
1522 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
1523 if (tb->destFolder) {
1524 GWEN_Buffer_AppendString(tbuf, tb->destFolder);
1526 }
1527 GWEN_Buffer_AppendString(tbuf, s);
1528 t=GWEN_Buffer_GetStart(tbuf);
1529 while (*t) {
1530 *t=tolower(*t);
1531 t++;
1532 }
1533 GWEN_Buffer_AppendString(tbuf, "_tree.tm2");
1534 fname=GWEN_Buffer_GetStart(tbuf);
1536 GWEN_Buffer_free(tbuf);
1537 if (rv<0) {
1538 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1539 return rv;
1540 }
1541 }
1542
1543 /* write typedef file for tree2 */
1545 const char *s;
1546 char *t;
1547 GWEN_BUFFER *tbuf;
1548
1550 if (s==NULL || *s==0) {
1551 DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name");
1552 return GWEN_ERROR_BAD_DATA;
1553 }
1554 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
1555 if (tb->destFolder) {
1556 GWEN_Buffer_AppendString(tbuf, tb->destFolder);
1558 }
1559 GWEN_Buffer_AppendString(tbuf, s);
1560 t=GWEN_Buffer_GetStart(tbuf);
1561 while (*t) {
1562 *t=tolower(*t);
1563 t++;
1564 }
1565 GWEN_Buffer_AppendString(tbuf, "_tree2.tm2");
1566 fname=GWEN_Buffer_GetStart(tbuf);
1568 GWEN_Buffer_free(tbuf);
1569 if (rv<0) {
1570 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1571 return rv;
1572 }
1573 }
1574
1575 /* write typedef file for idmap */
1577 const char *s;
1578 char *t;
1579 GWEN_BUFFER *tbuf;
1580
1582 if (s==NULL || *s==0) {
1583 DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name");
1584 return GWEN_ERROR_BAD_DATA;
1585 }
1586 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
1587 if (tb->destFolder) {
1588 GWEN_Buffer_AppendString(tbuf, tb->destFolder);
1590 }
1591 GWEN_Buffer_AppendString(tbuf, s);
1592 t=GWEN_Buffer_GetStart(tbuf);
1593 while (*t) {
1594 *t=tolower(*t);
1595 t++;
1596 }
1597 GWEN_Buffer_AppendString(tbuf, "_idmap.tm2");
1598 fname=GWEN_Buffer_GetStart(tbuf);
1600 GWEN_Buffer_free(tbuf);
1601 if (rv<0) {
1602 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1603 return rv;
1604 }
1605 }
1606 }
1607
1608 return 0;
1609}
1610
1611
1612
1614{
1615 int rv;
1616
1618 if (rv<0) {
1619 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1620 return rv;
1621 }
1622
1623 if (GWEN_StringList_Count(tb->declarationsPublic))
1624 fprintf(stdout, "%s\n", tb->fileNamePublic);
1625
1626 if (GWEN_StringList_Count(tb->declarationsLibrary))
1627 fprintf(stdout, "%s\n", tb->fileNameLibrary);
1628
1629 if (GWEN_StringList_Count(tb->declarationsProtected))
1630 fprintf(stdout, "%s\n", tb->fileNameProtected);
1631
1632 if (GWEN_StringList_Count(tb->declarationsPrivate))
1633 fprintf(stdout, "%s\n", tb->fileNamePrivate);
1634
1635 if (GWEN_StringList_Count(tb->code))
1636 fprintf(stdout, "%s\n", tb->fileNameCode);
1637
1638 return 0;
1639}
1640
1641
1642
1643
1644
#define NULL
Definition: binreloc.c:300
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition: buffer.c:42
void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition: buffer.c:89
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition: buffer.c:989
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:235
int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c)
Definition: buffer.c:394
const char * GWEN_DB_GetCharValue(GWEN_DB_NODE *n, const char *path, int idx, const char *defVal)
Definition: db.c:971
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
Definition: db.c:173
int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
Definition: db.c:997
#define GWEN_DB_FLAGS_OVERWRITE_VARS
Definition: db.h:121
struct GWEN_DB_NODE GWEN_DB_NODE
Definition: db.h:228
#define DBG_INFO(dbg_logger, format, args...)
Definition: debug.h:181
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
#define GWEN_ERROR_BAD_DATA
Definition: error.h:121
#define GWEN_ERROR_IO
Definition: error.h:123
#define GWEN_ERROR_NOT_SUPPORTED
Definition: error.h:109
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:38
#define GWEN_UNUSED
#define GWEN_DIR_SEPARATOR_S
#define GWEN_DIR_SEPARATOR
#define GWEN_INHERIT_FUNCTIONS(t)
Definition: inherit.h:163
#define GWEN_INHERIT_INIT(t, element)
Definition: inherit.h:223
#define GWEN_INHERIT_FINI(t, element)
Definition: inherit.h:238
#define GWEN_LOGDOMAIN
Definition: logger.h:35
#define GWEN_FREE_OBJECT(varname)
Definition: memory.h:61
#define GWEN_NEW_OBJECT(typ, varname)
Definition: memory.h:55
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
Definition: stringlist.c:62
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
Definition: stringlist.c:406
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
Definition: stringlist.c:398
unsigned int GWEN_StringList_Count(const GWEN_STRINGLIST *sl)
Definition: stringlist.c:427
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
Definition: stringlist.c:245
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
Definition: stringlist.c:390
GWEN_STRINGLIST * GWEN_StringList_new(void)
Definition: stringlist.c:50
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
Definition: stringlist.h:53
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
Definition: stringlist.h:56
void Typemaker2_Builder_SetSourceFileName(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:320
int Typemaker2_Builder_PrintFileNames(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder.c:1613
GWEN_STRINGLIST * Typemaker2_Builder_GetProtectedDeclarations(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:109
int Typemaker2_Builder_WriteTypedefFile_Tree2(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
Definition: tm_builder.c:1079
static void setCharValueWithTypePrefix(GWEN_DB_NODE *db, const char *prefix, const char *varName, const char *value)
Definition: tm_builder.c:527
int Typemaker2_Builder_DetermineOutFileNames(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder.c:1167
void Typemaker2_Builder_SetTypeManager(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPEMANAGER *tm)
Definition: tm_builder.c:141
GWEN_STRINGLIST * Typemaker2_Builder_GetPrivateDeclarations(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:117
#define INVOKE_FN(macro_var1)
Definition: tm_builder.c:657
TYPEMAKER2_BUILDER * Typemaker2_Builder_new()
Definition: tm_builder.c:53
void Typemaker2_Builder_SetFileNameProtected(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:260
void Typemaker2_Builder_AddCode(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:204
int Typemaker2_Builder_WriteTypedefFile_List2(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
Definition: tm_builder.c:993
void Typemaker2_Builder_free(TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:71
void Typemaker2_Builder_AddPublicDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:172
int Typemaker2_Builder_WriteTypedefFile_IdMap(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
Definition: tm_builder.c:1122
void Typemaker2_Builder_SetDestFolderName(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:340
const char * Typemaker2_Builder_GetFileNamePublic(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:212
const char * Typemaker2_Builder_GetFileNameCode(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:292
int Typemaker2_Builder_WriteFile(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName, GWEN_STRINGLIST *sl, int acc)
Definition: tm_builder.c:731
int Typemaker2_Builder_ReplaceVars(const char *s, GWEN_DB_NODE *db, GWEN_BUFFER *dbuf)
Definition: tm_builder.c:548
void Typemaker2_Builder_SetFileNamePublic(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:220
void Typemaker2_Builder_AddLibraryDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:180
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:371
void Typemaker2_Builder_AddProtectedDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:188
const char * Typemaker2_Builder_GetSourceFileName(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:312
void Typemaker2_Builder_SetFileNamePrivate(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:280
const char * Typemaker2_Builder_GetFileNamePrivate(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:272
GWEN_STRINGLIST * Typemaker2_Builder_GetPublicDeclarations(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:93
void Typemaker2_Builder_AddDeclaration(TYPEMAKER2_BUILDER *tb, int access, const char *s)
Definition: tm_builder.c:149
const char * Typemaker2_Builder_GetDestFolderName(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:332
void Typemaker2_Builder_SetBuildFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_BUILDER_BUILD_FN fn)
Definition: tm_builder.c:352
int Typemaker2_Builder_WriteTypedefFile_Tree(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
Definition: tm_builder.c:1036
const char * Typemaker2_Builder_GetFileNameLibrary(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:232
GWEN_STRINGLIST * Typemaker2_Builder_GetCode(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:125
int Typemaker2_Builder_WriteTypedefFile_List1(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
Definition: tm_builder.c:950
int Typemaker2_Builder_Build(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder.c:360
int Typemaker2_Builder_WriteTypedefFile(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
Definition: tm_builder.c:909
GWEN_STRINGLIST * Typemaker2_Builder_GetLibraryDeclarations(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:101
void Typemaker2_Builder_AddPrivateDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:196
void Typemaker2_Builder_SetFileNameCode(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:300
TYPEMAKER2_TYPEMANAGER * Typemaker2_Builder_GetTypeManager(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:133
static void addMemberInfoToCallDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_DB_NODE *db, int withTypePrefix)
int Typemaker2_Builder_WriteFiles(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, uint32_t writeFlags)
Definition: tm_builder.c:1341
void Typemaker2_Builder_SetFileNameLibrary(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:240
const char * Typemaker2_Builder_GetFileNameProtected(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:252
int(* TYPEMAKER2_BUILDER_BUILD_FN)(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder.h:35
#define TYPEMAKER2_BUILDER_WRITEFILE_FLAGS_WRITE_DEFS
Definition: tm_builder.h:22
struct TYPEMAKER2_BUILDER TYPEMAKER2_BUILDER
Definition: tm_builder.h:26
#define TYPEMAKER2_BUILDER_WRITEFILE_FLAGS_WRITE_TYPE
Definition: tm_builder.h:23
const char * Typemaker2_Enum_GetToStringFn(const TYPEMAKER2_ENUM *p_struct)
Definition: tm_enum.c:204
const char * Typemaker2_Enum_GetFromStringFn(const TYPEMAKER2_ENUM *p_struct)
Definition: tm_enum.c:210
struct TYPEMAKER2_ENUM TYPEMAKER2_ENUM
Definition: tm_enum.h:24
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_HeaderLocation_Code
Definition: tm_header.h:33
@ Typemaker2_HeaderLocation_CodeEnd
Definition: tm_header.h:34
@ Typemaker2_HeaderType_System
Definition: tm_header.h:25
struct TYPEMAKER2_HEADER TYPEMAKER2_HEADER
Definition: tm_header.h:19
const char * Typemaker2_Member_GetFieldId(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:171
const char * Typemaker2_Member_GetDefaultValue(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:388
TYPEMAKER2_TYPE * Typemaker2_Member_GetTypePtr(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:467
TYPEMAKER2_ENUM * Typemaker2_Member_GetEnumPtr(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:485
const char * Typemaker2_Member_GetPresetValue(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:414
const char * Typemaker2_Member_GetElementName(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:127
uint32_t Typemaker2_Member_GetFlags(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:237
int Typemaker2_Member_GetMaxLen(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:369
const char * Typemaker2_Member_GetName(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:83
struct TYPEMAKER2_MEMBER TYPEMAKER2_MEMBER
Definition: tm_member.h:21
TYPEMAKER2_HEADER_LIST * Typemaker2_Type_GetHeaders(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:650
const char * Typemaker2_Type_GetIdentifier(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:543
uint32_t Typemaker2_Type_GetFlags(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:341
TYPEMAKER2_TYPE * Typemaker2_Type_GetBaseTypePtr(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:623
const char * Typemaker2_Type_GetBaseFileName(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:221
const char * Typemaker2_Type_GetName(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:127
const char * Typemaker2_Type_GetPrefix(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:565
TYPEMAKER2_MEMBER_LIST * Typemaker2_Type_GetMembers(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:641
#define TYPEMAKER2_TYPEFLAGS_WITH_IDMAP
Definition: tm_type.h:59
struct TYPEMAKER2_TYPE TYPEMAKER2_TYPE
Definition: tm_type.h:21
#define TYPEMAKER2_TYPEFLAGS_WITH_LIST1
Definition: tm_type.h:56
#define TYPEMAKER2_FLAGS_ENUM
Definition: tm_type.h:38
#define TYPEMAKER2_FLAGS_VOLATILE
Definition: tm_type.h:32
@ TypeMaker2_Access_Private
Definition: tm_type.h:89
@ TypeMaker2_Access_Library
Definition: tm_type.h:88
@ TypeMaker2_Access_Protected
Definition: tm_type.h:87
@ TypeMaker2_Access_Unknown
Definition: tm_type.h:85
@ TypeMaker2_Access_Public
Definition: tm_type.h:86
#define TYPEMAKER2_TYPEFLAGS_WITH_LIST2
Definition: tm_type.h:57
#define TYPEMAKER2_TYPEFLAGS_WITH_TREE
Definition: tm_type.h:60
#define TYPEMAKER2_TYPEFLAGS_WITH_TREE2
Definition: tm_type.h:71
const char * Typemaker2_TypeManager_GetApiDeclaration(const TYPEMAKER2_TYPEMANAGER *tym)
struct TYPEMAKER2_TYPEMANAGER TYPEMAKER2_TYPEMANAGER