gwenhywfar  5.10.1
tm_type.c
Go to the documentation of this file.
1 /***************************************************************************
2  begin : Wed Jul 01 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_type_p.h"
16 #include "tm_util.h"
17 
18 #include <gwenhywfar/debug.h>
19 #include <gwenhywfar/misc.h>
20 
21 #include <assert.h>
22 
23 
24 
25 
26 GWEN_LIST_FUNCTIONS(TYPEMAKER2_TYPE, Typemaker2_Type);
27 GWEN_LIST2_FUNCTIONS(TYPEMAKER2_TYPE, Typemaker2_Type);
28 
29 
30 
31 
33 {
34  TYPEMAKER2_TYPE *ty;
35 
37  ty->refCount=1;
39 
40  ty->headers=Typemaker2_Header_List_new();
41  ty->enums=Typemaker2_Enum_List_new();
42  ty->defines=Typemaker2_Define_List_new();
43  ty->codeDefs=Typemaker2_Code_List_new();
44  ty->inlines=Typemaker2_Inline_List_new();
45  ty->virtualFns=Typemaker2_VirtualFn_List_new();
46  ty->signals=Typemaker2_Signal_List_new();
47  ty->slots=Typemaker2_Slot_List_new();
48 
49  ty->structIncludes=GWEN_StringList_new();
50  ty->privateIncludes=GWEN_StringList_new();
51  ty->libraryIncludes=GWEN_StringList_new();
52  ty->publicIncludes=GWEN_StringList_new();
53  ty->codeIncludes=GWEN_StringList_new();
54 
55  ty->members=Typemaker2_Member_List_new();
56 
57  ty->groupTree=Typemaker2_Group_Tree_new();
58 
59 
60  return ty;
61 }
62 
63 
64 
66 {
67  if (ty) {
68  assert(ty->refCount);
69  if (ty->refCount==1) {
71  free(ty->name);
72  free(ty->extends);
73  free(ty->baseType);
74  free(ty->inherits);
75  free(ty->identifier);
76  free(ty->prefix);
77 
78  free(ty->defaultValue);
79  free(ty->presetValue);
80 
81  free(ty->aqdb_type);
82  free(ty->baseFileName);
83 
84  free(ty->freeHook);
85 
86  free(ty->descr);
87 
88  Typemaker2_Header_List_free(ty->headers);
89  Typemaker2_Enum_List_free(ty->enums);
90  Typemaker2_Define_List_free(ty->defines);
91  Typemaker2_Code_List_free(ty->codeDefs);
92  Typemaker2_Inline_List_free(ty->inlines);
93  Typemaker2_VirtualFn_List_free(ty->virtualFns);
94  Typemaker2_Signal_List_free(ty->signals);
95  Typemaker2_Slot_List_free(ty->slots);
96 
97  GWEN_StringList_free(ty->structIncludes);
98  GWEN_StringList_free(ty->privateIncludes);
99  GWEN_StringList_free(ty->libraryIncludes);
100  GWEN_StringList_free(ty->publicIncludes);
101  GWEN_StringList_free(ty->codeIncludes);
102 
103  Typemaker2_Member_List_free(ty->members);
104  Typemaker2_Group_Tree_free(ty->groupTree);
105 
106  free(ty->fieldCountId);
107 
108  ty->refCount=0;
109  GWEN_FREE_OBJECT(ty);
110  }
111  else
112  ty->refCount--;
113  }
114 }
115 
116 
117 
119 {
120  assert(ty);
121  assert(ty->refCount);
122  ty->refCount++;
123 }
124 
125 
126 
128 {
129  assert(ty);
130  assert(ty->refCount);
131  return ty->name;
132 }
133 
134 
135 
136 void Typemaker2_Type_SetName(TYPEMAKER2_TYPE *ty, const char *s)
137 {
138  assert(ty);
139  assert(ty->refCount);
140  free(ty->name);
141  if (s && *s)
142  ty->name=strdup(s);
143  else
144  ty->name=NULL;
145 }
146 
147 
148 
150 {
151  assert(ty);
152  assert(ty->refCount);
153  return ty->descr;
154 }
155 
156 
157 
159 {
160  assert(ty);
161  assert(ty->refCount);
162  free(ty->descr);
163  if (s && *s)
164  ty->descr=strdup(s);
165  else
166  ty->descr=NULL;
167 }
168 
169 
170 
172 {
173  assert(ty);
174  assert(ty->refCount);
175 
176  /* nothing here? ask extended type */
177  if (ty->type==TypeMaker2_Type_Unknown &&
178  ty->extendsPtr)
179  return Typemaker2_Type_GetType(ty->extendsPtr);
180 
181  return ty->type;
182 }
183 
184 
185 
187 {
188  assert(ty);
189  assert(ty->refCount);
190  ty->type=i;
191 }
192 
193 
194 
196 {
197  assert(ty);
198  assert(ty->refCount);
199 
200  if (ty->aqdb_type==NULL && ty->extendsPtr)
201  return Typemaker2_Type_GetAqDbType(ty->extendsPtr);
202 
203  return ty->aqdb_type;
204 }
205 
206 
207 
209 {
210  assert(ty);
211  assert(ty->refCount);
212  free(ty->aqdb_type);
213  if (s && *s)
214  ty->aqdb_type=strdup(s);
215  else
216  ty->aqdb_type=NULL;
217 }
218 
219 
220 
222 {
223  assert(ty);
224  assert(ty->refCount);
225 
226  return ty->baseFileName;
227 }
228 
229 
230 
232 {
233  assert(ty);
234  assert(ty->refCount);
235  free(ty->baseFileName);
236  if (s && *s)
237  ty->baseFileName=strdup(s);
238  else
239  ty->baseFileName=NULL;
240 }
241 
242 
243 
245 {
246  assert(ty);
247  assert(ty->refCount);
248 
249  return ty->freeHook;
250 }
251 
252 
253 
255 {
256  assert(ty);
257  assert(ty->refCount);
258  free(ty->freeHook);
259  if (s && *s)
260  ty->freeHook=strdup(s);
261  else
262  ty->freeHook=NULL;
263 }
264 
265 
266 
268 {
269  assert(ty);
270  assert(ty->refCount);
271  return ty->extends;
272 }
273 
274 
275 
277 {
278  assert(ty);
279  assert(ty->refCount);
280  free(ty->extends);
281  if (s && *s)
282  ty->extends=strdup(s);
283  else
284  ty->extends=NULL;
285 }
286 
287 
288 
290 {
291  assert(ty);
292  assert(ty->refCount);
293 
294  if (ty->baseType==NULL && ty->extendsPtr)
295  return Typemaker2_Type_GetBaseType(ty->extendsPtr);
296 
297  return ty->baseType;
298 }
299 
300 
301 
303 {
304  assert(ty);
305  assert(ty->refCount);
306  free(ty->baseType);
307  if (s && *s)
308  ty->baseType=strdup(s);
309  else
310  ty->baseType=NULL;
311 }
312 
313 
314 
316 {
317  assert(ty);
318  assert(ty->refCount);
319 
320  if (ty->inherits==NULL && ty->extendsPtr)
321  return Typemaker2_Type_GetInherits(ty->extendsPtr);
322 
323  return ty->inherits;
324 }
325 
326 
327 
329 {
330  assert(ty);
331  assert(ty->refCount);
332  free(ty->inherits);
333  if (s && *s)
334  ty->inherits=strdup(s);
335  else
336  ty->inherits=NULL;
337 }
338 
339 
340 
342 {
343  assert(ty);
344  assert(ty->refCount);
345 
346  if (ty->flags==0 && ty->extendsPtr)
347  return Typemaker2_Type_GetFlags(ty->extendsPtr);
348 
349  return ty->flags;
350 }
351 
352 
353 
355 {
356  assert(ty);
357  assert(ty->refCount);
358  ty->flags=i;
359 }
360 
361 
362 
364 {
365  assert(ty);
366  assert(ty->refCount);
367 
368  if (ty->setFlags==0 && ty->extendsPtr)
369  return Typemaker2_Type_GetSetFlags(ty->extendsPtr);
370 
371  return ty->setFlags;
372 }
373 
374 
375 
377 {
378  assert(ty);
379  assert(ty->refCount);
380  ty->setFlags=i;
381 }
382 
383 
384 
386 {
387  assert(ty);
388  assert(ty->refCount);
389 
390  if (ty->getFlags==0 && ty->extendsPtr)
391  return Typemaker2_Type_GetGetFlags(ty->extendsPtr);
392 
393  return ty->getFlags;
394 }
395 
396 
397 
399 {
400  assert(ty);
401  assert(ty->refCount);
402  ty->getFlags=i;
403 }
404 
405 
406 
408 {
409  assert(ty);
410  assert(ty->refCount);
411 
412  if (ty->dupFlags==0 && ty->extendsPtr)
413  return Typemaker2_Type_GetDupFlags(ty->extendsPtr);
414 
415  return ty->dupFlags;
416 }
417 
418 
419 
421 {
422  assert(ty);
423  assert(ty->refCount);
424  ty->dupFlags=i;
425 }
426 
427 
428 
430 {
431  assert(ty);
432  assert(ty->refCount);
433 
434  if (ty->copyFlags==0 && ty->extendsPtr)
435  return Typemaker2_Type_GetCopyFlags(ty->extendsPtr);
436 
437  return ty->copyFlags;
438 }
439 
440 
441 
443 {
444  assert(ty);
445  assert(ty->refCount);
446  ty->copyFlags=i;
447 }
448 
449 
450 
452 {
453  assert(ty);
454  assert(ty->refCount);
455 
456  if (ty->access==TypeMaker2_Access_Unknown && ty->extendsPtr)
457  return Typemaker2_Type_GetAccess(ty->extendsPtr);
458 
459  return ty->access;
460 }
461 
462 
463 
465 {
466  assert(ty);
467  assert(ty->refCount);
468  ty->access=i;
469 }
470 
471 
472 
474 {
475  assert(ty);
476  assert(ty->refCount);
477  return ty->usePrivateConstructor;
478 }
479 
480 
481 
483 {
484  assert(ty);
485  assert(ty->refCount);
486  ty->usePrivateConstructor=i;
487 }
488 
489 
490 
492 {
493  assert(ty);
494  assert(ty->refCount);
495 
496  if (ty->defaultValue==NULL && ty->extendsPtr)
497  return Typemaker2_Type_GetDefaultValue(ty->extendsPtr);
498 
499  return ty->defaultValue;
500 }
501 
502 
503 
505 {
506  assert(ty);
507  assert(ty->refCount);
508  free(ty->defaultValue);
509  if (s && *s)
510  ty->defaultValue=strdup(s);
511  else
512  ty->defaultValue=NULL;
513 }
514 
515 
516 
518 {
519  assert(ty);
520  assert(ty->refCount);
521 
522  if (ty->presetValue==NULL && ty->extendsPtr)
523  return Typemaker2_Type_GetPresetValue(ty->extendsPtr);
524 
525  return ty->presetValue;
526 }
527 
528 
529 
531 {
532  assert(ty);
533  assert(ty->refCount);
534  free(ty->presetValue);
535  if (s && *s)
536  ty->presetValue=strdup(s);
537  else
538  ty->presetValue=NULL;
539 }
540 
541 
542 
544 {
545  assert(ty);
546  assert(ty->refCount);
547  return ty->identifier;
548 }
549 
550 
551 
553 {
554  assert(ty);
555  assert(ty->refCount);
556  free(ty->identifier);
557  if (s && *s)
558  ty->identifier=strdup(s);
559  else
560  ty->identifier=NULL;
561 }
562 
563 
564 
566 {
567  assert(ty);
568  assert(ty->refCount);
569  return ty->prefix;
570 }
571 
572 
573 
575 {
576  assert(ty);
577  assert(ty->refCount);
578  free(ty->prefix);
579  if (s && *s)
580  ty->prefix=strdup(s);
581  else
582  ty->prefix=NULL;
583 }
584 
585 
586 
588 {
589  assert(ty);
590  assert(ty->refCount);
591  return ty->extendsPtr;
592 }
593 
594 
595 
597 {
598  assert(ty);
599  assert(ty->refCount);
600  ty->extendsPtr=p;
601 }
602 
603 
604 
606 {
607  assert(ty);
608  assert(ty->refCount);
609  return ty->inheritsPtr;
610 }
611 
612 
613 
615 {
616  assert(ty);
617  assert(ty->refCount);
618  ty->inheritsPtr=p;
619 }
620 
621 
622 
624 {
625  assert(ty);
626  assert(ty->refCount);
627  return ty->baseTypePtr;
628 }
629 
630 
631 
633 {
634  assert(ty);
635  assert(ty->refCount);
636  ty->baseTypePtr=p;
637 }
638 
639 
640 
641 TYPEMAKER2_MEMBER_LIST *Typemaker2_Type_GetMembers(const TYPEMAKER2_TYPE *ty)
642 {
643  assert(ty);
644  assert(ty->refCount);
645  return ty->members;
646 }
647 
648 
649 
650 TYPEMAKER2_HEADER_LIST *Typemaker2_Type_GetHeaders(const TYPEMAKER2_TYPE *ty)
651 {
652  assert(ty);
653  assert(ty->refCount);
654  return ty->headers;
655 }
656 
657 
658 
659 TYPEMAKER2_ENUM_LIST *Typemaker2_Type_GetEnums(const TYPEMAKER2_TYPE *ty)
660 {
661  assert(ty);
662  assert(ty->refCount);
663  return ty->enums;
664 }
665 
666 
667 
668 TYPEMAKER2_DEFINE_LIST *Typemaker2_Type_GetDefines(const TYPEMAKER2_TYPE *ty)
669 {
670  assert(ty);
671  assert(ty->refCount);
672  return ty->defines;
673 }
674 
675 
676 
677 TYPEMAKER2_CODE_LIST *Typemaker2_Type_GetCodeDefs(const TYPEMAKER2_TYPE *ty)
678 {
679  assert(ty);
680  assert(ty->refCount);
681  return ty->codeDefs;
682 }
683 
684 
685 
686 TYPEMAKER2_INLINE_LIST *Typemaker2_Type_GetInlines(const TYPEMAKER2_TYPE *ty)
687 {
688  assert(ty);
689  assert(ty->refCount);
690  return ty->inlines;
691 }
692 
693 
694 
695 TYPEMAKER2_VIRTUALFN_LIST *Typemaker2_Type_GetVirtualFns(const TYPEMAKER2_TYPE *ty)
696 {
697  assert(ty);
698  assert(ty->refCount);
699  return ty->virtualFns;
700 }
701 
702 
703 
704 TYPEMAKER2_SIGNAL_LIST *Typemaker2_Type_GetSignals(const TYPEMAKER2_TYPE *ty)
705 {
706  assert(ty);
707  assert(ty->refCount);
708  return ty->signals;
709 }
710 
711 
712 
713 TYPEMAKER2_SLOT_LIST *Typemaker2_Type_GetSlots(const TYPEMAKER2_TYPE *ty)
714 {
715  assert(ty);
716  assert(ty->refCount);
717  return ty->slots;
718 }
719 
720 
721 
722 TYPEMAKER2_GROUP_TREE *Typemaker2_Type_GetGroupTree(const TYPEMAKER2_TYPE *ty)
723 {
724  assert(ty);
725  assert(ty->refCount);
726  return ty->groupTree;
727 }
728 
729 
730 
732 {
733  assert(ty);
734  assert(ty->refCount);
735  return ty->nonVolatileMemberCount;
736 }
737 
738 
739 
741 {
742  assert(ty);
743  assert(ty->refCount);
744  ty->nonVolatileMemberCount=i;
745 }
746 
747 
748 
750 {
751  assert(ty);
752  assert(ty->refCount);
753  return ty->fieldCountId;
754 }
755 
756 
757 
759 {
760  assert(ty);
761  assert(ty->refCount);
762  free(ty->fieldCountId);
763  if (s)
764  ty->fieldCountId=strdup(s);
765  else
766  ty->fieldCountId=NULL;
767 }
768 
769 
770 
771 
773  const char *wantedLang)
774 {
775  GWEN_XMLNODE *n;
776 
777  /* read members */
778  n=GWEN_XMLNode_GetFirstTag(node);
779  while (n) {
780  const char *s;
781 
782  /* get tag name */
784  if (s) {
785  if (strcasecmp(s, "member")==0) {
786  TYPEMAKER2_MEMBER *tm;
787  int rv;
788 
790  rv=Typemaker2_Member_readXml(tm, n, wantedLang);
791  if (rv<0) {
792  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
794  return rv;
795  }
796  /* set current parentGroup as group */
797  Typemaker2_Member_SetGroupPtr(tm, parentGroup);
798 
799  Typemaker2_Member_List_Add(tm, ty->members);
800  }
801  else if (strcasecmp(s, "group")==0) {
802  TYPEMAKER2_GROUP *group;
803  int rv;
804 
805  /* create and read group */
806  group=Typemaker2_Group_new();
807  rv=Typemaker2_Group_readXml(group, n, wantedLang);
808  if (rv<0) {
809  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
810  Typemaker2_Group_free(group);
811  return rv;
812  }
813  Typemaker2_Group_Tree_AddChild(parentGroup, group);
814 
815  /* read sub-groups and -members */
816  rv=Typemaker2_Type_readMembersAndGroupsXml(ty, n, group, wantedLang);
817  if (rv<0) {
818  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
819  return rv;
820  }
821  }
822  }
823 
825  }
826 
827  return 0;
828 }
829 
830 
831 
832 
833 int Typemaker2_Type_readXml(TYPEMAKER2_TYPE *ty, GWEN_XMLNODE *node, const char *wantedLang)
834 {
835  GWEN_XMLNODE *langNode=NULL;
836  GWEN_XMLNODE *n;
837  const char *s;
838  TYPEMAKER2_GROUP *rootGroup=NULL;
839 
840  /* parse type */
841  s=GWEN_XMLNode_GetProperty(node, "type", "opaque");
842  if (strcasecmp(s, "opaque")==0)
844  else if (strcasecmp(s, "pointer")==0)
846  else if (strcasecmp(s, "array")==0)
848  else {
849  DBG_ERROR(GWEN_LOGDOMAIN, "Unknown type [%s]", s);
850  return GWEN_ERROR_BAD_DATA;
851  }
852 
853  s=GWEN_XMLNode_GetProperty(node, "id", NULL);
855 
856  s=GWEN_XMLNode_GetProperty(node, "extends", NULL);
858 
859  s=GWEN_XMLNode_GetProperty(node, "basetype", NULL);
861 
862  if (wantedLang)
863  langNode=GWEN_XMLNode_FindFirstTag(node, "lang", "id", wantedLang);
864  if (langNode==NULL)
865  langNode=node;
866 
867  /* read identifier and prefix */
868  s=GWEN_XMLNode_GetCharValue(langNode, "identifier", NULL);
870 
871  s=GWEN_XMLNode_GetCharValue(langNode, "prefix", NULL);
873 
874  s=GWEN_XMLNode_GetCharValue(langNode, "aqdb_type", NULL);
876 
877  /* read base file name (used to derive other output filenames) */
878  s=GWEN_XMLNode_GetCharValue(langNode, "basefilename", NULL);
880 
881  s=GWEN_XMLNode_GetCharValue(langNode, "freeHook", NULL);
883 
884  /* read flags. this element exists for <type> elements.
885  * For <typedef> elements the flags are stored in the <defaults> group. */
886  s=GWEN_XMLNode_GetCharValue(langNode, "flags", NULL);
887  if (s && *s)
889 
890  /* read headers */
891  n=GWEN_XMLNode_FindFirstTag(langNode, "headers", NULL, NULL);
892  if (n) {
893  GWEN_XMLNODE *nn;
894 
895  nn=GWEN_XMLNode_FindFirstTag(n, "header", NULL, NULL);
896  while (nn) {
897  TYPEMAKER2_HEADER *th;
898  int rv;
899 
901  rv=Typemaker2_Header_readXml(th, nn);
902  if (rv<0) {
903  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
905  return rv;
906  }
907  Typemaker2_Header_List_Add(th, ty->headers);
908  nn=GWEN_XMLNode_FindNextTag(nn, "header", NULL, NULL);
909  }
910  }
911 
912  /* read description */
913  n=GWEN_XMLNode_FindFirstTag(node, "descr", NULL, NULL);
914  if (n) {
915  GWEN_BUFFER *tbuf;
916  int rv;
917 
918  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
920  if (rv<0) {
921  DBG_ERROR(0, "here (%d)", rv);
922  }
923  else {
925  }
926  GWEN_Buffer_free(tbuf);
927  }
928 
929  /* create and add root group */
930  Typemaker2_Group_Tree_Clear(ty->groupTree);
931  rootGroup=Typemaker2_Group_new();
934 
935  Typemaker2_Group_Tree_Add(ty->groupTree, rootGroup);
936 
937  /* read members */
938  n=GWEN_XMLNode_FindFirstTag(node, "members", NULL, NULL);
939  if (n) {
940  int rv;
941 
942  rv=Typemaker2_Type_readMembersAndGroupsXml(ty, n, rootGroup, wantedLang);
943  if (rv<0) {
944  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
945  return rv;
946  }
947  }
948 
949  /* read codedefs */
950  n=GWEN_XMLNode_FindFirstTag(langNode, "codedefs", NULL, NULL);
951  if (n) {
952  GWEN_XMLNODE *nn;
953 
954  nn=GWEN_XMLNode_FindFirstTag(n, "codedef", NULL, NULL);
955  while (nn) {
956  TYPEMAKER2_CODE *tc;
957 
959  if (tc) {
960  const char *s;
961 
963  if (s && *s)
965 
967  if (s && *s)
969  }
970 
971  Typemaker2_Code_List_Add(tc, ty->codeDefs);
972  nn=GWEN_XMLNode_FindNextTag(nn, "codedef", NULL, NULL);
973  }
974  }
975 
976  /* read inlines */
977  n=GWEN_XMLNode_FindFirstTag(langNode, "inlines", NULL, NULL);
978  if (n) {
979  GWEN_XMLNODE *nn;
980 
981  nn=GWEN_XMLNode_FindFirstTag(n, "inline", NULL, NULL);
982  while (nn) {
983  TYPEMAKER2_INLINE *ti;
984 
986  Typemaker2_Inline_List_Add(ti, ty->inlines);
987  nn=GWEN_XMLNode_FindNextTag(nn, "inline", NULL, NULL);
988  }
989  }
990 
991  /* read enums */
992  n=GWEN_XMLNode_FindFirstTag(node, "enums", NULL, NULL);
993  if (n) {
994  GWEN_XMLNODE *nn;
995 
996  nn=GWEN_XMLNode_FindFirstTag(n, "enum", NULL, NULL);
997  while (nn) {
998  TYPEMAKER2_ENUM *te;
999  GWEN_XMLNODE *nnn;
1000 
1001  te=Typemaker2_Enum_fromXml(nn);
1002 
1003  /* read items */
1004  nnn=GWEN_XMLNode_FindFirstTag(nn, "item", NULL, NULL);
1005  while (nnn) {
1006  TYPEMAKER2_ITEM *ti;
1007 
1008  ti=Typemaker2_Item_fromXml(nnn);
1009  Typemaker2_Item_List_Add(ti, Typemaker2_Enum_GetItems(te));
1010  nnn=GWEN_XMLNode_FindNextTag(nnn, "item", NULL, NULL);
1011  }
1012 
1013  Typemaker2_Enum_List_Add(te, ty->enums);
1014  nn=GWEN_XMLNode_FindNextTag(nn, "enum", NULL, NULL);
1015  }
1016  }
1017 
1018  /* read defines */
1019  n=GWEN_XMLNode_FindFirstTag(node, "defines", NULL, NULL);
1020  if (n) {
1021  GWEN_XMLNODE *nn;
1022 
1023  nn=GWEN_XMLNode_FindFirstTag(n, "define", NULL, NULL);
1024  while (nn) {
1025  TYPEMAKER2_DEFINE *td;
1026  GWEN_XMLNODE *nnn;
1027 
1029 
1030  /* read items */
1031  nnn=GWEN_XMLNode_FindFirstTag(nn, "item", NULL, NULL);
1032  while (nnn) {
1033  TYPEMAKER2_ITEM *ti;
1034 
1035  ti=Typemaker2_Item_fromXml(nnn);
1036  Typemaker2_Item_List_Add(ti, Typemaker2_Define_GetItems(td));
1037  nnn=GWEN_XMLNode_FindNextTag(nnn, "item", NULL, NULL);
1038  }
1039 
1040  Typemaker2_Define_List_Add(td, ty->defines);
1041  nn=GWEN_XMLNode_FindNextTag(nn, "define", NULL, NULL);
1042  }
1043  }
1044 
1045  /* read virtual functions */
1046  n=GWEN_XMLNode_FindFirstTag(node, "virtualFns", NULL, NULL);
1047  if (n) {
1048  GWEN_XMLNODE *nn;
1049 
1050  nn=GWEN_XMLNode_FindFirstTag(n, "fn", NULL, NULL);
1051  while (nn) {
1053  int rv;
1054 
1056  rv=Typemaker2_VirtualFn_readXml(vf, nn);
1057  if (rv<0) {
1058  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1060  return rv;
1061  }
1062  Typemaker2_VirtualFn_List_Add(vf, ty->virtualFns);
1063  nn=GWEN_XMLNode_FindNextTag(nn, "fn", NULL, NULL);
1064  }
1065  }
1066 
1067  /* read signals */
1068  n=GWEN_XMLNode_FindFirstTag(node, "signals", NULL, NULL);
1069  if (n) {
1070  GWEN_XMLNODE *nn;
1071 
1072  nn=GWEN_XMLNode_FindFirstTag(n, "signal", NULL, NULL);
1073  while (nn) {
1074  TYPEMAKER2_SIGNAL *sig;
1075  GWEN_XMLNODE *nnn;
1076  int i;
1077 
1078  s=GWEN_XMLNode_GetProperty(nn, "name", NULL);
1079  if (!(s && *s)) {
1080  DBG_ERROR(GWEN_LOGDOMAIN, "Unnamed signal");
1081  return GWEN_ERROR_INVALID;
1082  }
1083  sig=Typemaker2_Signal_new();
1084  Typemaker2_Signal_SetName(sig, s);
1085  Typemaker2_Signal_SetParamType1(sig, "none");
1086  Typemaker2_Signal_SetParamType2(sig, "none");
1087 
1088  i=GWEN_XMLNode_GetIntProperty(nn, "useParam3", 0);
1089  if (i)
1091  i=GWEN_XMLNode_GetIntProperty(nn, "useParam4", 0);
1092  if (i)
1094 
1095  nnn=GWEN_XMLNode_FindFirstTag(nn, "params", NULL, NULL);
1096  if (nnn) {
1097  GWEN_XMLNODE *nnnn;
1098  int i;
1099 
1100  nnnn=GWEN_XMLNode_FindFirstTag(nnn, "param", NULL, NULL);
1101  i=1;
1102  while (nnnn && i<3) {
1103  const char *s;
1104 
1105  s=GWEN_XMLNode_GetProperty(nnnn, "type", "none");
1106  if (i==1)
1108  else
1110  i++;
1111  nnnn=GWEN_XMLNode_FindNextTag(nnnn, "param", NULL, NULL);
1112  }
1113  }
1114  Typemaker2_Signal_List_Add(sig, ty->signals);
1115  nn=GWEN_XMLNode_FindNextTag(nn, "signal", NULL, NULL);
1116  }
1117  }
1118 
1119 
1120  /* read slots */
1121  n=GWEN_XMLNode_FindFirstTag(node, "slots", NULL, NULL);
1122  if (n) {
1123  GWEN_XMLNODE *nn;
1124 
1125  nn=GWEN_XMLNode_FindFirstTag(n, "slot", NULL, NULL);
1126  while (nn) {
1127  TYPEMAKER2_SLOT *slot;
1128  GWEN_XMLNODE *nnn;
1129  int i;
1130 
1131  s=GWEN_XMLNode_GetProperty(nn, "name", NULL);
1132  if (!(s && *s)) {
1133  DBG_ERROR(GWEN_LOGDOMAIN, "Unnamed slot");
1134  return GWEN_ERROR_INVALID;
1135  }
1136  slot=Typemaker2_Slot_new();
1137  Typemaker2_Slot_SetName(slot, s);
1138  Typemaker2_Slot_SetParamType1(slot, "none");
1139  Typemaker2_Slot_SetParamType2(slot, "none");
1140 
1141  i=GWEN_XMLNode_GetIntProperty(nn, "useParam3", 0);
1142  if (i)
1144  i=GWEN_XMLNode_GetIntProperty(nn, "useParam4", 0);
1145  if (i)
1147 
1148 
1149  nnn=GWEN_XMLNode_FindFirstTag(nn, "params", NULL, NULL);
1150  if (nnn) {
1151  GWEN_XMLNODE *nnnn;
1152  int i;
1153 
1154  nnnn=GWEN_XMLNode_FindFirstTag(nnn, "param", NULL, NULL);
1155  i=1;
1156  while (nnnn && i<3) {
1157  const char *s;
1158 
1159  s=GWEN_XMLNode_GetProperty(nnnn, "type", "none");
1160  if (i==1)
1162  else
1164  i++;
1165  nnnn=GWEN_XMLNode_FindNextTag(nnnn, "param", NULL, NULL);
1166  }
1167  }
1168  Typemaker2_Slot_List_Add(slot, ty->slots);
1169  nn=GWEN_XMLNode_FindNextTag(nn, "slot", NULL, NULL);
1170  }
1171  }
1172 
1173 
1174  /* read defaults */
1175  n=GWEN_XMLNode_FindFirstTag(langNode, "defaults", NULL, NULL);
1176  if (n) {
1177  s=GWEN_XMLNode_GetCharValue(n, "default", NULL);
1179 
1180  s=GWEN_XMLNode_GetCharValue(n, "preset", NULL);
1182 
1183  /* read flags */
1184  s=GWEN_XMLNode_GetCharValue(n, "flags", NULL);
1185  if (s && *s)
1187 
1188  /* read setflags */
1189  s=GWEN_XMLNode_GetCharValue(n, "setflags", NULL);
1190  if (s && *s)
1192 
1193  /* read getflags */
1194  s=GWEN_XMLNode_GetCharValue(n, "getflags", NULL);
1195  if (s && *s)
1197 
1198  /* read dupflags */
1199  s=GWEN_XMLNode_GetCharValue(n, "dupflags", NULL);
1200  if (s && *s)
1202 
1203  /* read copyflags */
1204  s=GWEN_XMLNode_GetCharValue(n, "copyflags", NULL);
1205  if (s && *s)
1207 
1208  /* read access */
1209  s=GWEN_XMLNode_GetCharValue(n, "access", NULL);
1210  if (s && *s) {
1211  int i=Typemaker2_AccessFromString(s);
1212  if (i==TypeMaker2_Access_Unknown) {
1213  DBG_ERROR(GWEN_LOGDOMAIN, "Unknown access type [%s]", s);
1214  return GWEN_ERROR_BAD_DATA;
1215  }
1217  }
1218  }
1219 
1220  s=GWEN_XMLNode_GetProperty(langNode, "usePrivateConstructor", "0");
1221  if (s && *s)
1223 
1224  return 0;
1225 }
1226 
1227 
1228 
1229 void Typemaker2_Type_Dump(TYPEMAKER2_TYPE *ty, FILE *f, int indent)
1230 {
1231  if (ty) {
1232  int i;
1233  TYPEMAKER2_MEMBER *tm;
1234  const char *s1, *s2;
1235 
1236  for (i=0; i<indent; i++)
1237  fprintf(f, " ");
1238  fprintf(f, "Type\n");
1239 
1240  for (i=0; i<indent+2; i++)
1241  fprintf(f, " ");
1242  fprintf(f, "Name : %s\n", (ty->name)?(ty->name):"<null>");
1243 
1244  for (i=0; i<indent+2; i++)
1245  fprintf(f, " ");
1246  fprintf(f, "Identifier: %s\n", (ty->identifier)?(ty->identifier):"<null>");
1247 
1248  for (i=0; i<indent+2; i++)
1249  fprintf(f, " ");
1250  fprintf(f, "AEDB Type : %s\n", (ty->aqdb_type)?(ty->aqdb_type):"<null>");
1251 
1252  for (i=0; i<indent+2; i++)
1253  fprintf(f, " ");
1254  fprintf(f, "Extends : %s\n", (ty->extends)?(ty->extends):"<null>");
1255 
1256  for (i=0; i<indent+2; i++)
1257  fprintf(f, " ");
1258  s1=ty->inherits;
1260  fprintf(f, "Inherits : %s [%s]\n", s1?s1:"<null>", s2?s2:"<null>");
1261 
1262  for (i=0; i<indent+2; i++)
1263  fprintf(f, " ");
1264  fprintf(f, "BaseType : %s\n", (ty->baseType)?(ty->baseType):"<null>");
1265 
1266  for (i=0; i<indent+2; i++)
1267  fprintf(f, " ");
1268  fprintf(f, "Prefix : %s\n", (ty->prefix)?(ty->prefix):"<null>");
1269 
1270  for (i=0; i<indent+2; i++)
1271  fprintf(f, " ");
1272  fprintf(f, "Access : %d [%d]\n", ty->access, Typemaker2_Type_GetAccess(ty));
1273 
1274  for (i=0; i<indent+2; i++)
1275  fprintf(f, " ");
1276  fprintf(f, "Flags : %08x [%08x]\n", ty->flags, Typemaker2_Type_GetFlags(ty));
1277 
1278  for (i=0; i<indent+2; i++)
1279  fprintf(f, " ");
1280  fprintf(f, "SetFlags : %08x [%08x]\n", ty->setFlags, Typemaker2_Type_GetSetFlags(ty));
1281 
1282  for (i=0; i<indent+2; i++)
1283  fprintf(f, " ");
1284  fprintf(f, "GetFlags : %08x [%08x]\n", ty->getFlags, Typemaker2_Type_GetGetFlags(ty));
1285 
1286  for (i=0; i<indent+2; i++)
1287  fprintf(f, " ");
1288  fprintf(f, "DupFlags : %08x [%08x]\n", ty->dupFlags, Typemaker2_Type_GetDupFlags(ty));
1289 
1290  for (i=0; i<indent+2; i++)
1291  fprintf(f, " ");
1292  fprintf(f, "CopyFlags : %08x [%08x]\n", ty->copyFlags, Typemaker2_Type_GetCopyFlags(ty));
1293 
1294  for (i=0; i<indent+2; i++)
1295  fprintf(f, " ");
1296  s1=ty->defaultValue;
1298  fprintf(f, "Default : %s [%s]\n", s1?s1:"<null>", s2?s2:"<null>");
1299 
1300  for (i=0; i<indent+2; i++)
1301  fprintf(f, " ");
1302  s1=ty->presetValue;
1304  fprintf(f, "Preset : %s [%s]\n", s1?s1:"<null>", s2?s2:"<null>");
1305 
1306  for (i=0; i<indent+2; i++)
1307  fprintf(f, " ");
1308  fprintf(f, "Members\n");
1309  tm=Typemaker2_Member_List_First(ty->members);
1310  if (tm==NULL) {
1311  for (i=0; i<indent+4; i++)
1312  fprintf(f, " ");
1313  fprintf(f, "none\n");
1314  }
1315  else {
1316  while (tm) {
1317  Typemaker2_Member_Dump(tm, f, indent+4);
1318  tm=Typemaker2_Member_List_Next(tm);
1319  }
1320  }
1321  for (i=0; i<indent+2; i++)
1322  fprintf(f, " ");
1323  fprintf(f, "Field Count Id: %s\n", (ty->fieldCountId)?(ty->fieldCountId):"<null>");
1324 
1325  for (i=0; i<indent+2; i++)
1326  fprintf(f, " ");
1327  fprintf(f, "Descript. : %s\n", (ty->descr)?(ty->descr):"<null>");
1328 
1329  }
1330 }
1331 
1332 
1333 
1335 {
1336  TYPEMAKER2_ENUM *te;
1337 
1338  assert(ty);
1339  te=Typemaker2_Enum_List_First(ty->enums);
1340  while (te) {
1341  const char *n;
1342 
1343  n=Typemaker2_Enum_GetId(te);
1344  if (n && strcasecmp(s, n)==0)
1345  break;
1346  te=Typemaker2_Enum_List_Next(te);
1347  }
1348 
1349  return te;
1350 }
1351 
1352 
1353 
1355  const TYPEMAKER2_MEMBER *tm,
1356  const char *id)
1357 {
1358  TYPEMAKER2_CODE *tc=NULL;
1359  uint32_t flags=0;
1360 
1361  if (tm)
1362  flags=Typemaker2_Member_GetFlags(tm);
1363 
1364  /* try code within member definition first, if any */
1365  if (tm) {
1366  tc=Typemaker2_Code_List_First(Typemaker2_Member_GetCodeDefs(tm));
1367  while (tc) {
1368  const char *s;
1369 
1370  s=Typemaker2_Code_GetId(tc);
1371  if (s && strcasecmp(s, id)==0) {
1373  return tc;
1374  }
1375  tc=Typemaker2_Code_List_Next(tc);
1376  }
1377  }
1378 
1379  while (ty) {
1380  tc=Typemaker2_Code_List_First(ty->codeDefs);
1381  while (tc) {
1382  const char *s;
1383 
1384  s=Typemaker2_Code_GetId(tc);
1385  if (s && strcasecmp(s, id)==0) {
1387  return tc;
1388  }
1389  tc=Typemaker2_Code_List_Next(tc);
1390  }
1391 
1392  ty=ty->extendsPtr;
1393  }
1394 
1395  return NULL;
1396 }
1397 
1398 
1399 
1400 
1401 
int Typemaker2_Type_GetAccess(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:451
void Typemaker2_Type_SetExtends(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:276
void Typemaker2_Type_SetFreeHook(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:254
TYPEMAKER2_VIRTUALFN_LIST * Typemaker2_Type_GetVirtualFns(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:695
void Typemaker2_Type_SetIdentifier(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:552
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:235
void Typemaker2_Type_SetCopyFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
Definition: tm_type.c:442
void Typemaker2_Signal_SetParamType1(TYPEMAKER2_SIGNAL *p_struct, const char *p_src)
Definition: tm_signal.c:166
void Typemaker2_Type_Dump(TYPEMAKER2_TYPE *ty, FILE *f, int indent)
Definition: tm_type.c:1229
uint32_t Typemaker2_Member_GetFlags(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:237
void Typemaker2_Code_SetMemberFlagsMaskInt(TYPEMAKER2_CODE *p_struct, uint32_t p_src)
Definition: tm_code.c:246
const char * Typemaker2_Type_GetDescription(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:149
struct TYPEMAKER2_SIGNAL TYPEMAKER2_SIGNAL
Definition: tm_signal.h:27
void Typemaker2_Type_SetNonVolatileMemberCount(TYPEMAKER2_TYPE *ty, int i)
Definition: tm_type.c:740
TYPEMAKER2_ITEM_LIST * Typemaker2_Enum_GetItems(const TYPEMAKER2_ENUM *p_struct)
Definition: tm_enum.c:198
void Typemaker2_Type_SetGetFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
Definition: tm_type.c:398
TYPEMAKER2_ENUM * Typemaker2_Enum_fromXml(GWEN_XMLNODE *p_db)
Definition: tm_enum.c:412
void Typemaker2_Type_SetBaseFileName(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:231
GWENHYWFAR_API int GWEN_XMLNode_toBuffer(const GWEN_XMLNODE *n, GWEN_BUFFER *buf, uint32_t flags)
Definition: xmlrw.c:626
int Typemaker2_Type_readXml(TYPEMAKER2_TYPE *ty, GWEN_XMLNODE *node, const char *wantedLang)
Definition: tm_type.c:833
#define GWEN_ERROR_INVALID
Definition: error.h:67
void Typemaker2_Type_free(TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:65
const char * Typemaker2_Type_GetExtends(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:267
void Typemaker2_Type_SetAccess(TYPEMAKER2_TYPE *ty, int i)
Definition: tm_type.c:464
#define GWEN_XML_FLAGS_SIMPLE
Definition: xml.h:89
TYPEMAKER2_SLOT_LIST * Typemaker2_Type_GetSlots(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:713
const char * GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n, const char *name, const char *defaultValue)
Definition: xml.c:239
int Typemaker2_Type_readMembersAndGroupsXml(TYPEMAKER2_TYPE *ty, GWEN_XMLNODE *node, TYPEMAKER2_GROUP *parentGroup, const char *wantedLang)
Definition: tm_type.c:772
TYPEMAKER2_HEADER_LIST * Typemaker2_Type_GetHeaders(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:650
const char * Typemaker2_Type_GetAqDbType(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:195
TYPEMAKER2_TYPE * Typemaker2_Type_GetExtendsPtr(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:587
void Typemaker2_Type_SetBaseTypePtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p)
Definition: tm_type.c:632
GWEN_XMLNODE * GWEN_XMLNode_FindNextTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
Definition: xml.c:794
void Typemaker2_Type_SetPresetValue(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:530
const char * Typemaker2_Code_GetMemberFlagsMask(const TYPEMAKER2_CODE *p_struct)
Definition: tm_code.c:160
TYPEMAKER2_MEMBER * Typemaker2_Member_new()
Definition: tm_member.c:31
TYPEMAKER2_SLOT * Typemaker2_Slot_new(void)
Definition: tm_slot.c:24
void Typemaker2_Type_SetInheritsPtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p)
Definition: tm_type.c:614
TYPEMAKER2_SIGNAL * Typemaker2_Signal_new(void)
Definition: tm_signal.c:24
#define GWEN_FREE_OBJECT(varname)
Definition: memory.h:61
#define NULL
Definition: binreloc.c:300
struct TYPEMAKER2_SLOT TYPEMAKER2_SLOT
Definition: tm_slot.h:27
#define TYPEMAKER2_SLOT_FLAGS_USE_PARAM3
Definition: tm_slot.h:17
#define TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM4
Definition: tm_signal.h:18
void Typemaker2_Member_free(TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:46
TYPEMAKER2_TYPE * Typemaker2_Type_GetBaseTypePtr(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:623
struct TYPEMAKER2_GROUP TYPEMAKER2_GROUP
Definition: tm_group.h:19
#define GWEN_LOGDOMAIN
Definition: logger.h:35
uint32_t Typemaker2_Type_GetSetFlags(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:363
const char * Typemaker2_Code_GetMemberFlagsValue(const TYPEMAKER2_CODE *p_struct)
Definition: tm_code.c:166
void Typemaker2_Type_SetInherits(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:328
struct TYPEMAKER2_DEFINE TYPEMAKER2_DEFINE
Definition: tm_define.h:24
struct TYPEMAKER2_HEADER TYPEMAKER2_HEADER
Definition: tm_header.h:19
void Typemaker2_Signal_SetName(TYPEMAKER2_SIGNAL *p_struct, const char *p_src)
Definition: tm_signal.c:152
struct TYPEMAKER2_ENUM TYPEMAKER2_ENUM
Definition: tm_enum.h:24
uint32_t Typemaker2_Type_GetCopyFlags(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:429
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition: buffer.c:42
TYPEMAKER2_SIGNAL_LIST * Typemaker2_Type_GetSignals(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:704
int Typemaker2_Group_readXml(TYPEMAKER2_GROUP *gr, GWEN_XMLNODE *node, GWEN_UNUSED const char *wantedLang)
Definition: tm_group.c:117
struct TYPEMAKER2_ITEM TYPEMAKER2_ITEM
Definition: tm_item.h:22
void Typemaker2_Member_Dump(TYPEMAKER2_MEMBER *tm, FILE *f, int indent)
Definition: tm_member.c:716
const char * Typemaker2_Type_GetPresetValue(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:517
void Typemaker2_Type_SetPrefix(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:574
struct TYPEMAKER2_INLINE TYPEMAKER2_INLINE
Definition: tm_inline.h:19
struct TYPEMAKER2_VIRTUALFN TYPEMAKER2_VIRTUALFN
Definition: tm_virtualfn.h:21
#define GWEN_ERROR_BAD_DATA
Definition: error.h:121
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
Definition: stringlist.c:62
GWEN_XMLNODE * GWEN_XMLNode_FindFirstTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
Definition: xml.c:776
const char * Typemaker2_Enum_GetId(const TYPEMAKER2_ENUM *p_struct)
Definition: tm_enum.c:180
TYPEMAKER2_TYPE * Typemaker2_Type_new()
Definition: tm_type.c:32
void Typemaker2_Type_SetUsePrivateConstructor(TYPEMAKER2_TYPE *ty, int i)
Definition: tm_type.c:482
TYPEMAKER2_INLINE_LIST * Typemaker2_Type_GetInlines(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:686
#define GWEN_NEW_OBJECT(typ, varname)
Definition: memory.h:55
void Typemaker2_VirtualFn_free(TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:45
int GWEN_XMLNode_GetIntProperty(const GWEN_XMLNODE *n, const char *name, int defaultValue)
Definition: xml.c:263
void Typemaker2_Member_SetGroupPtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_GROUP *gr)
Definition: tm_member.c:530
const char * GWEN_XMLNode_GetCharValue(const GWEN_XMLNODE *n, const char *name, const char *defValue)
Definition: xml.c:812
GWEN_XMLNODE * GWEN_XMLNode_GetNextTag(const GWEN_XMLNODE *n)
Definition: xml.c:712
void Typemaker2_Type_SetBaseType(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:302
TYPEMAKER2_ITEM * Typemaker2_Item_fromXml(GWEN_XMLNODE *p_db)
Definition: tm_item.c:209
void Typemaker2_Type_SetSetFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
Definition: tm_type.c:376
TYPEMAKER2_HEADER * Typemaker2_Header_new()
Definition: tm_header.c:29
const char * Typemaker2_Type_GetIdentifier(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:543
uint32_t Typemaker2_FlagsFromString(const char *t)
Definition: tm_util.c:23
int Typemaker2_AccessFromString(const char *s)
Definition: tm_util.c:163
uint32_t Typemaker2_Code_GetMemberFlagsMaskInt(const TYPEMAKER2_CODE *p_struct)
Definition: tm_code.c:178
const char * Typemaker2_Type_GetFreeHook(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:244
TYPEMAKER2_CODE_LIST * Typemaker2_Member_GetCodeDefs(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:557
int Typemaker2_VirtualFn_readXml(TYPEMAKER2_VIRTUALFN *vf, GWEN_XMLNODE *node)
Definition: tm_virtualfn.c:76
uint32_t Typemaker2_Type_GetDupFlags(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:407
TYPEMAKER2_CODE * Typemaker2_Code_fromXml(GWEN_XMLNODE *p_db)
Definition: tm_code.c:372
TYPEMAKER2_GROUP * Typemaker2_Group_new()
Definition: tm_group.c:29
const char * Typemaker2_Type_GetInherits(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:315
TYPEMAKER2_ITEM_LIST * Typemaker2_Define_GetItems(const TYPEMAKER2_DEFINE *p_struct)
Definition: tm_define.c:202
int Typemaker2_Type_GetNonVolatileMemberCount(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:731
int Typemaker2_Member_readXml(TYPEMAKER2_MEMBER *tm, GWEN_XMLNODE *node, const char *wantedLang)
Definition: tm_member.c:566
TYPEMAKER2_MEMBER_LIST * Typemaker2_Type_GetMembers(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:641
void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition: buffer.c:89
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:38
GWEN_LIST2_FUNCTIONS(TYPEMAKER2_TYPE, Typemaker2_Type)
const char * Typemaker2_Type_GetName(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:127
void Typemaker2_Type_SetFieldCountId(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:758
#define GWEN_XML_FLAGS_HANDLE_COMMENTS
Definition: xml.h:60
TYPEMAKER2_INLINE * Typemaker2_Inline_fromXml(GWEN_XMLNODE *node)
Definition: tm_inline.c:145
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
GWEN_XMLNODE * GWEN_XMLNode_GetFirstTag(const GWEN_XMLNODE *n)
Definition: xml.c:705
struct TYPEMAKER2_TYPE TYPEMAKER2_TYPE
Definition: tm_type.h:21
#define TYPEMAKER2_SLOT_FLAGS_USE_PARAM4
Definition: tm_slot.h:18
const char * GWEN_XMLNode_GetData(const GWEN_XMLNODE *n)
Definition: xml.c:370
void Typemaker2_Slot_SetParamType2(TYPEMAKER2_SLOT *p_struct, const char *p_src)
Definition: tm_slot.c:180
uint32_t Typemaker2_Type_GetGetFlags(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:385
void Typemaker2_Signal_SetParamType2(TYPEMAKER2_SIGNAL *p_struct, const char *p_src)
Definition: tm_signal.c:180
uint32_t Typemaker2_TypeFlagsFromString(const char *t)
Definition: tm_util.c:95
const char * Typemaker2_Type_GetBaseType(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:289
#define TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM3
Definition: tm_signal.h:17
void Typemaker2_Type_SetType(TYPEMAKER2_TYPE *ty, int i)
Definition: tm_type.c:186
void Typemaker2_Code_SetMemberFlagsValueInt(TYPEMAKER2_CODE *p_struct, uint32_t p_src)
Definition: tm_code.c:252
TYPEMAKER2_DEFINE * Typemaker2_Define_fromXml(GWEN_XMLNODE *p_db)
Definition: tm_define.c:419
void Typemaker2_Group_SetDescription(TYPEMAKER2_GROUP *gr, const char *s)
Definition: tm_group.c:103
TYPEMAKER2_VIRTUALFN * Typemaker2_VirtualFn_new()
Definition: tm_virtualfn.c:30
TYPEMAKER2_ENUM_LIST * Typemaker2_Type_GetEnums(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:659
#define DBG_INFO(dbg_logger, format, args...)
Definition: debug.h:181
int Typemaker2_Header_readXml(TYPEMAKER2_HEADER *th, GWEN_XMLNODE *node)
Definition: tm_header.c:126
const char * Typemaker2_Type_GetPrefix(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:565
void Typemaker2_Group_free(TYPEMAKER2_GROUP *gr)
Definition: tm_group.c:42
void Typemaker2_Signal_AddFlags(TYPEMAKER2_SIGNAL *p_struct, uint32_t p_src)
Definition: tm_signal.c:200
TYPEMAKER2_TYPE * Typemaker2_Type_GetInheritsPtr(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:605
#define GWEN_LIST_INIT(t, element)
Definition: list1.h:465
int Typemaker2_Type_GetType(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:171
void Typemaker2_Type_SetName(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:136
TYPEMAKER2_CODE_LIST * Typemaker2_Type_GetCodeDefs(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:677
void Typemaker2_Type_SetFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
Definition: tm_type.c:354
int Typemaker2_Type_GetUsePrivateConstructor(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:473
GWEN_LIST_FUNCTIONS(TYPEMAKER2_TYPE, Typemaker2_Type)
struct TYPEMAKER2_MEMBER TYPEMAKER2_MEMBER
Definition: tm_member.h:21
struct TYPEMAKER2_CODE TYPEMAKER2_CODE
Definition: tm_code.h:24
void Typemaker2_Type_Attach(TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:118
void Typemaker2_Type_SetExtendsPtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p)
Definition: tm_type.c:596
void Typemaker2_Group_SetTitle(TYPEMAKER2_GROUP *gr, const char *s)
Definition: tm_group.c:79
void Typemaker2_Type_SetDupFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
Definition: tm_type.c:420
TYPEMAKER2_GROUP_TREE * Typemaker2_Type_GetGroupTree(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:722
void Typemaker2_Slot_SetParamType1(TYPEMAKER2_SLOT *p_struct, const char *p_src)
Definition: tm_slot.c:166
void Typemaker2_Type_SetAqDbType(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:208
void Typemaker2_Header_free(TYPEMAKER2_HEADER *th)
Definition: tm_header.c:42
GWEN_STRINGLIST * GWEN_StringList_new(void)
Definition: stringlist.c:50
uint32_t Typemaker2_Type_GetFlags(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:341
const char * Typemaker2_Type_GetDefaultValue(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:491
void Typemaker2_Slot_AddFlags(TYPEMAKER2_SLOT *p_struct, uint32_t p_src)
Definition: tm_slot.c:200
void Typemaker2_Type_SetDefaultValue(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:504
#define GWEN_LIST_FINI(t, element)
Definition: list1.h:474
TYPEMAKER2_ENUM * Typemaker2_Type_FindEnum(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:1334
struct GWEN__XMLNODE GWEN_XMLNODE
Definition: xml.h:156
TYPEMAKER2_CODE * Typemaker2_Type_FindCodeForMember(const TYPEMAKER2_TYPE *ty, const TYPEMAKER2_MEMBER *tm, const char *id)
Definition: tm_type.c:1354
TYPEMAKER2_DEFINE_LIST * Typemaker2_Type_GetDefines(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:668
const char * Typemaker2_Type_GetFieldCountId(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:749
uint32_t Typemaker2_Code_GetMemberFlagsValueInt(const TYPEMAKER2_CODE *p_struct)
Definition: tm_code.c:184
void Typemaker2_Slot_SetName(TYPEMAKER2_SLOT *p_struct, const char *p_src)
Definition: tm_slot.c:152
const char * Typemaker2_Code_GetId(const TYPEMAKER2_CODE *p_struct)
Definition: tm_code.c:154
const char * Typemaker2_Type_GetBaseFileName(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:221
void Typemaker2_Type_SetDescription(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:158