gwenhywfar  5.14.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  return ty->pack;
294 }
295 
296 
297 
299 {
300  assert(ty);
301  assert(ty->refCount);
302  ty->pack=i;
303 }
304 
305 
306 
307 
308 
310 {
311  assert(ty);
312  assert(ty->refCount);
313 
314  if (ty->baseType==NULL && ty->extendsPtr)
315  return Typemaker2_Type_GetBaseType(ty->extendsPtr);
316 
317  return ty->baseType;
318 }
319 
320 
321 
323 {
324  assert(ty);
325  assert(ty->refCount);
326  free(ty->baseType);
327  if (s && *s)
328  ty->baseType=strdup(s);
329  else
330  ty->baseType=NULL;
331 }
332 
333 
334 
336 {
337  assert(ty);
338  assert(ty->refCount);
339 
340  if (ty->inherits==NULL && ty->extendsPtr)
341  return Typemaker2_Type_GetInherits(ty->extendsPtr);
342 
343  return ty->inherits;
344 }
345 
346 
347 
349 {
350  assert(ty);
351  assert(ty->refCount);
352  free(ty->inherits);
353  if (s && *s)
354  ty->inherits=strdup(s);
355  else
356  ty->inherits=NULL;
357 }
358 
359 
360 
362 {
363  assert(ty);
364  assert(ty->refCount);
365 
366  if (ty->flags==0 && ty->extendsPtr)
367  return Typemaker2_Type_GetFlags(ty->extendsPtr);
368 
369  return ty->flags;
370 }
371 
372 
373 
375 {
376  assert(ty);
377  assert(ty->refCount);
378  ty->flags=i;
379 }
380 
381 
382 
384 {
385  assert(ty);
386  assert(ty->refCount);
387 
388  if (ty->setFlags==0 && ty->extendsPtr)
389  return Typemaker2_Type_GetSetFlags(ty->extendsPtr);
390 
391  return ty->setFlags;
392 }
393 
394 
395 
397 {
398  assert(ty);
399  assert(ty->refCount);
400  ty->setFlags=i;
401 }
402 
403 
404 
406 {
407  assert(ty);
408  assert(ty->refCount);
409 
410  if (ty->getFlags==0 && ty->extendsPtr)
411  return Typemaker2_Type_GetGetFlags(ty->extendsPtr);
412 
413  return ty->getFlags;
414 }
415 
416 
417 
419 {
420  assert(ty);
421  assert(ty->refCount);
422  ty->getFlags=i;
423 }
424 
425 
426 
428 {
429  assert(ty);
430  assert(ty->refCount);
431 
432  if (ty->dupFlags==0 && ty->extendsPtr)
433  return Typemaker2_Type_GetDupFlags(ty->extendsPtr);
434 
435  return ty->dupFlags;
436 }
437 
438 
439 
441 {
442  assert(ty);
443  assert(ty->refCount);
444  ty->dupFlags=i;
445 }
446 
447 
448 
450 {
451  assert(ty);
452  assert(ty->refCount);
453 
454  if (ty->copyFlags==0 && ty->extendsPtr)
455  return Typemaker2_Type_GetCopyFlags(ty->extendsPtr);
456 
457  return ty->copyFlags;
458 }
459 
460 
461 
463 {
464  assert(ty);
465  assert(ty->refCount);
466  ty->copyFlags=i;
467 }
468 
469 
470 
472 {
473  assert(ty);
474  assert(ty->refCount);
475 
476  if (ty->access==TypeMaker2_Access_Unknown && ty->extendsPtr)
477  return Typemaker2_Type_GetAccess(ty->extendsPtr);
478 
479  return ty->access;
480 }
481 
482 
483 
485 {
486  assert(ty);
487  assert(ty->refCount);
488  ty->access=i;
489 }
490 
491 
492 
494 {
495  assert(ty);
496  assert(ty->refCount);
497 
498  if (ty->structAccess==TypeMaker2_Access_Unknown && ty->extendsPtr)
499  return Typemaker2_Type_GetStructAccess(ty->extendsPtr);
500 
501  return ty->structAccess;
502 }
503 
504 
505 
507 {
508  assert(ty);
509  assert(ty->refCount);
510  ty->structAccess=i;
511 }
512 
513 
514 
516 {
517  assert(ty);
518  assert(ty->refCount);
519  return ty->usePrivateConstructor;
520 }
521 
522 
523 
525 {
526  assert(ty);
527  assert(ty->refCount);
528  ty->usePrivateConstructor=i;
529 }
530 
531 
532 
534 {
535  assert(ty);
536  assert(ty->refCount);
537 
538  if (ty->defaultValue==NULL && ty->extendsPtr)
539  return Typemaker2_Type_GetDefaultValue(ty->extendsPtr);
540 
541  return ty->defaultValue;
542 }
543 
544 
545 
547 {
548  assert(ty);
549  assert(ty->refCount);
550  free(ty->defaultValue);
551  if (s && *s)
552  ty->defaultValue=strdup(s);
553  else
554  ty->defaultValue=NULL;
555 }
556 
557 
558 
560 {
561  assert(ty);
562  assert(ty->refCount);
563 
564  if (ty->presetValue==NULL && ty->extendsPtr)
565  return Typemaker2_Type_GetPresetValue(ty->extendsPtr);
566 
567  return ty->presetValue;
568 }
569 
570 
571 
573 {
574  assert(ty);
575  assert(ty->refCount);
576  free(ty->presetValue);
577  if (s && *s)
578  ty->presetValue=strdup(s);
579  else
580  ty->presetValue=NULL;
581 }
582 
583 
584 
586 {
587  assert(ty);
588  assert(ty->refCount);
589  return ty->identifier;
590 }
591 
592 
593 
595 {
596  assert(ty);
597  assert(ty->refCount);
598  free(ty->identifier);
599  if (s && *s)
600  ty->identifier=strdup(s);
601  else
602  ty->identifier=NULL;
603 }
604 
605 
606 
608 {
609  assert(ty);
610  assert(ty->refCount);
611  return ty->prefix;
612 }
613 
614 
615 
617 {
618  assert(ty);
619  assert(ty->refCount);
620  free(ty->prefix);
621  if (s && *s)
622  ty->prefix=strdup(s);
623  else
624  ty->prefix=NULL;
625 }
626 
627 
628 
630 {
631  assert(ty);
632  assert(ty->refCount);
633  return ty->extendsPtr;
634 }
635 
636 
637 
639 {
640  assert(ty);
641  assert(ty->refCount);
642  ty->extendsPtr=p;
643 }
644 
645 
646 
648 {
649  assert(ty);
650  assert(ty->refCount);
651  return ty->inheritsPtr;
652 }
653 
654 
655 
657 {
658  assert(ty);
659  assert(ty->refCount);
660  ty->inheritsPtr=p;
661 }
662 
663 
664 
666 {
667  assert(ty);
668  assert(ty->refCount);
669  return ty->baseTypePtr;
670 }
671 
672 
673 
675 {
676  assert(ty);
677  assert(ty->refCount);
678  ty->baseTypePtr=p;
679 }
680 
681 
682 
683 TYPEMAKER2_MEMBER_LIST *Typemaker2_Type_GetMembers(const TYPEMAKER2_TYPE *ty)
684 {
685  assert(ty);
686  assert(ty->refCount);
687  return ty->members;
688 }
689 
690 
691 
692 TYPEMAKER2_HEADER_LIST *Typemaker2_Type_GetHeaders(const TYPEMAKER2_TYPE *ty)
693 {
694  assert(ty);
695  assert(ty->refCount);
696  return ty->headers;
697 }
698 
699 
700 
701 TYPEMAKER2_ENUM_LIST *Typemaker2_Type_GetEnums(const TYPEMAKER2_TYPE *ty)
702 {
703  assert(ty);
704  assert(ty->refCount);
705  return ty->enums;
706 }
707 
708 
709 
710 TYPEMAKER2_DEFINE_LIST *Typemaker2_Type_GetDefines(const TYPEMAKER2_TYPE *ty)
711 {
712  assert(ty);
713  assert(ty->refCount);
714  return ty->defines;
715 }
716 
717 
718 
719 TYPEMAKER2_CODE_LIST *Typemaker2_Type_GetCodeDefs(const TYPEMAKER2_TYPE *ty)
720 {
721  assert(ty);
722  assert(ty->refCount);
723  return ty->codeDefs;
724 }
725 
726 
727 
728 TYPEMAKER2_INLINE_LIST *Typemaker2_Type_GetInlines(const TYPEMAKER2_TYPE *ty)
729 {
730  assert(ty);
731  assert(ty->refCount);
732  return ty->inlines;
733 }
734 
735 
736 
737 TYPEMAKER2_VIRTUALFN_LIST *Typemaker2_Type_GetVirtualFns(const TYPEMAKER2_TYPE *ty)
738 {
739  assert(ty);
740  assert(ty->refCount);
741  return ty->virtualFns;
742 }
743 
744 
745 
746 TYPEMAKER2_SIGNAL_LIST *Typemaker2_Type_GetSignals(const TYPEMAKER2_TYPE *ty)
747 {
748  assert(ty);
749  assert(ty->refCount);
750  return ty->signals;
751 }
752 
753 
754 
755 TYPEMAKER2_SLOT_LIST *Typemaker2_Type_GetSlots(const TYPEMAKER2_TYPE *ty)
756 {
757  assert(ty);
758  assert(ty->refCount);
759  return ty->slots;
760 }
761 
762 
763 
764 TYPEMAKER2_GROUP_TREE *Typemaker2_Type_GetGroupTree(const TYPEMAKER2_TYPE *ty)
765 {
766  assert(ty);
767  assert(ty->refCount);
768  return ty->groupTree;
769 }
770 
771 
772 
774 {
775  assert(ty);
776  assert(ty->refCount);
777  return ty->nonVolatileMemberCount;
778 }
779 
780 
781 
783 {
784  assert(ty);
785  assert(ty->refCount);
786  ty->nonVolatileMemberCount=i;
787 }
788 
789 
790 
792 {
793  assert(ty);
794  assert(ty->refCount);
795  return ty->fieldCountId;
796 }
797 
798 
799 
801 {
802  assert(ty);
803  assert(ty->refCount);
804  free(ty->fieldCountId);
805  if (s)
806  ty->fieldCountId=strdup(s);
807  else
808  ty->fieldCountId=NULL;
809 }
810 
811 
812 
813 
815  const char *wantedLang)
816 {
817  GWEN_XMLNODE *n;
818 
819  /* read members */
820  n=GWEN_XMLNode_GetFirstTag(node);
821  while (n) {
822  const char *s;
823 
824  /* get tag name */
826  if (s) {
827  if (strcasecmp(s, "member")==0) {
828  TYPEMAKER2_MEMBER *tm;
829  int rv;
830 
832  rv=Typemaker2_Member_readXml(tm, n, wantedLang);
833  if (rv<0) {
834  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
836  return rv;
837  }
838  /* set current parentGroup as group */
839  Typemaker2_Member_SetGroupPtr(tm, parentGroup);
840 
841  Typemaker2_Member_List_Add(tm, ty->members);
842  }
843  else if (strcasecmp(s, "group")==0) {
844  TYPEMAKER2_GROUP *group;
845  int rv;
846 
847  /* create and read group */
848  group=Typemaker2_Group_new();
849  rv=Typemaker2_Group_readXml(group, n, wantedLang);
850  if (rv<0) {
851  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
852  Typemaker2_Group_free(group);
853  return rv;
854  }
855  Typemaker2_Group_Tree_AddChild(parentGroup, group);
856 
857  /* read sub-groups and -members */
858  rv=Typemaker2_Type_readMembersAndGroupsXml(ty, n, group, wantedLang);
859  if (rv<0) {
860  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
861  return rv;
862  }
863  }
864  }
865 
867  }
868 
869  return 0;
870 }
871 
872 
873 
874 
875 int Typemaker2_Type_readXml(TYPEMAKER2_TYPE *ty, GWEN_XMLNODE *node, const char *wantedLang)
876 {
877  GWEN_XMLNODE *langNode=NULL;
878  GWEN_XMLNODE *n;
879  const char *s;
880  TYPEMAKER2_GROUP *rootGroup=NULL;
881 
882  /* parse type */
883  s=GWEN_XMLNode_GetProperty(node, "type", "opaque");
884  if (strcasecmp(s, "opaque")==0)
886  else if (strcasecmp(s, "pointer")==0)
888  else if (strcasecmp(s, "array")==0)
890  else {
891  DBG_ERROR(GWEN_LOGDOMAIN, "Unknown type [%s]", s);
892  return GWEN_ERROR_BAD_DATA;
893  }
894 
895  s=GWEN_XMLNode_GetProperty(node, "id", NULL);
897 
898  s=GWEN_XMLNode_GetProperty(node, "extends", NULL);
900 
901  s=GWEN_XMLNode_GetProperty(node, "basetype", NULL);
903 
904  if (wantedLang)
905  langNode=GWEN_XMLNode_FindFirstTag(node, "lang", "id", wantedLang);
906  if (langNode==NULL)
907  langNode=node;
908 
909  /* read identifier and prefix */
910  s=GWEN_XMLNode_GetCharValue(langNode, "identifier", NULL);
912 
913  s=GWEN_XMLNode_GetCharValue(langNode, "prefix", NULL);
915 
916  s=GWEN_XMLNode_GetCharValue(langNode, "aqdb_type", NULL);
918 
919  /* read base file name (used to derive other output filenames) */
920  s=GWEN_XMLNode_GetCharValue(langNode, "basefilename", NULL);
922 
923  s=GWEN_XMLNode_GetCharValue(langNode, "freeHook", NULL);
925 
926  ty->pack=GWEN_XMLNode_GetIntValue(langNode, "pack", 0);
927 
928  s=GWEN_XMLNode_GetCharValue(langNode, "structAccess", "private");
929  if (s && *s) {
930  ty->structAccess=Typemaker2_AccessFromString(s);
931  if (ty->structAccess==TypeMaker2_Access_Unknown) {
932  DBG_ERROR(0, "Invalid structAcces entry [%s]", s);
933  return GWEN_ERROR_BAD_DATA;
934  }
935  }
936  else
937  ty->structAccess=TypeMaker2_Access_Private;
938 
939  /* read flags. this element exists for <type> elements.
940  * For <typedef> elements the flags are stored in the <defaults> group. */
941  s=GWEN_XMLNode_GetCharValue(langNode, "flags", NULL);
942  if (s && *s)
944 
945  /* read headers */
946  n=GWEN_XMLNode_FindFirstTag(langNode, "headers", NULL, NULL);
947  if (n) {
948  GWEN_XMLNODE *nn;
949 
950  nn=GWEN_XMLNode_FindFirstTag(n, "header", NULL, NULL);
951  while (nn) {
952  TYPEMAKER2_HEADER *th;
953  int rv;
954 
956  rv=Typemaker2_Header_readXml(th, nn);
957  if (rv<0) {
958  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
960  return rv;
961  }
962  Typemaker2_Header_List_Add(th, ty->headers);
963  nn=GWEN_XMLNode_FindNextTag(nn, "header", NULL, NULL);
964  }
965  }
966 
967  /* read description */
968  n=GWEN_XMLNode_FindFirstTag(node, "descr", NULL, NULL);
969  if (n) {
970  GWEN_BUFFER *tbuf;
971  int rv;
972 
973  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
975  if (rv<0) {
976  DBG_ERROR(0, "here (%d)", rv);
977  }
978  else {
980  }
981  GWEN_Buffer_free(tbuf);
982  }
983 
984  /* create and add root group */
985  Typemaker2_Group_Tree_Clear(ty->groupTree);
986  rootGroup=Typemaker2_Group_new();
989 
990  Typemaker2_Group_Tree_Add(ty->groupTree, rootGroup);
991 
992  /* read members */
993  n=GWEN_XMLNode_FindFirstTag(node, "members", NULL, NULL);
994  if (n) {
995  int rv;
996 
997  rv=Typemaker2_Type_readMembersAndGroupsXml(ty, n, rootGroup, wantedLang);
998  if (rv<0) {
999  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1000  return rv;
1001  }
1002  }
1003 
1004  /* read codedefs */
1005  n=GWEN_XMLNode_FindFirstTag(langNode, "codedefs", NULL, NULL);
1006  if (n) {
1007  GWEN_XMLNODE *nn;
1008 
1009  nn=GWEN_XMLNode_FindFirstTag(n, "codedef", NULL, NULL);
1010  while (nn) {
1011  TYPEMAKER2_CODE *tc;
1012 
1013  tc=Typemaker2_Code_fromXml(nn);
1014  if (tc) {
1015  const char *s;
1016 
1018  if (s && *s)
1020 
1022  if (s && *s)
1024  }
1025 
1026  Typemaker2_Code_List_Add(tc, ty->codeDefs);
1027  nn=GWEN_XMLNode_FindNextTag(nn, "codedef", NULL, NULL);
1028  }
1029  }
1030 
1031  /* read inlines */
1032  n=GWEN_XMLNode_FindFirstTag(langNode, "inlines", NULL, NULL);
1033  if (n) {
1034  GWEN_XMLNODE *nn;
1035 
1036  nn=GWEN_XMLNode_FindFirstTag(n, "inline", NULL, NULL);
1037  while (nn) {
1038  TYPEMAKER2_INLINE *ti;
1039 
1041  Typemaker2_Inline_List_Add(ti, ty->inlines);
1042  nn=GWEN_XMLNode_FindNextTag(nn, "inline", NULL, NULL);
1043  }
1044  }
1045 
1046  /* read enums */
1047  n=GWEN_XMLNode_FindFirstTag(node, "enums", NULL, NULL);
1048  if (n) {
1049  GWEN_XMLNODE *nn;
1050 
1051  nn=GWEN_XMLNode_FindFirstTag(n, "enum", NULL, NULL);
1052  while (nn) {
1053  TYPEMAKER2_ENUM *te;
1054  GWEN_XMLNODE *nnn;
1055 
1056  te=Typemaker2_Enum_fromXml(nn);
1057 
1058  /* read items */
1059  nnn=GWEN_XMLNode_FindFirstTag(nn, "item", NULL, NULL);
1060  while (nnn) {
1061  TYPEMAKER2_ITEM *ti;
1062 
1063  ti=Typemaker2_Item_fromXml(nnn);
1064  Typemaker2_Item_List_Add(ti, Typemaker2_Enum_GetItems(te));
1065  nnn=GWEN_XMLNode_FindNextTag(nnn, "item", NULL, NULL);
1066  }
1067 
1068  Typemaker2_Enum_List_Add(te, ty->enums);
1069  nn=GWEN_XMLNode_FindNextTag(nn, "enum", NULL, NULL);
1070  }
1071  }
1072 
1073  /* read defines */
1074  n=GWEN_XMLNode_FindFirstTag(node, "defines", NULL, NULL);
1075  if (n) {
1076  GWEN_XMLNODE *nn;
1077 
1078  nn=GWEN_XMLNode_FindFirstTag(n, "define", NULL, NULL);
1079  while (nn) {
1080  TYPEMAKER2_DEFINE *td;
1081  GWEN_XMLNODE *nnn;
1082 
1084 
1085  /* read items */
1086  nnn=GWEN_XMLNode_FindFirstTag(nn, "item", NULL, NULL);
1087  while (nnn) {
1088  TYPEMAKER2_ITEM *ti;
1089 
1090  ti=Typemaker2_Item_fromXml(nnn);
1091  Typemaker2_Item_List_Add(ti, Typemaker2_Define_GetItems(td));
1092  nnn=GWEN_XMLNode_FindNextTag(nnn, "item", NULL, NULL);
1093  }
1094 
1095  Typemaker2_Define_List_Add(td, ty->defines);
1096  nn=GWEN_XMLNode_FindNextTag(nn, "define", NULL, NULL);
1097  }
1098  }
1099 
1100  /* read virtual functions */
1101  n=GWEN_XMLNode_FindFirstTag(node, "virtualFns", NULL, NULL);
1102  if (n) {
1103  GWEN_XMLNODE *nn;
1104 
1105  nn=GWEN_XMLNode_FindFirstTag(n, "fn", NULL, NULL);
1106  while (nn) {
1108  int rv;
1109 
1111  rv=Typemaker2_VirtualFn_readXml(vf, nn);
1112  if (rv<0) {
1113  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1115  return rv;
1116  }
1117  Typemaker2_VirtualFn_List_Add(vf, ty->virtualFns);
1118  nn=GWEN_XMLNode_FindNextTag(nn, "fn", NULL, NULL);
1119  }
1120  }
1121 
1122  /* read signals */
1123  n=GWEN_XMLNode_FindFirstTag(node, "signals", NULL, NULL);
1124  if (n) {
1125  GWEN_XMLNODE *nn;
1126 
1127  nn=GWEN_XMLNode_FindFirstTag(n, "signal", NULL, NULL);
1128  while (nn) {
1129  TYPEMAKER2_SIGNAL *sig;
1130  GWEN_XMLNODE *nnn;
1131  int i;
1132 
1133  s=GWEN_XMLNode_GetProperty(nn, "name", NULL);
1134  if (!(s && *s)) {
1135  DBG_ERROR(GWEN_LOGDOMAIN, "Unnamed signal");
1136  return GWEN_ERROR_INVALID;
1137  }
1138  sig=Typemaker2_Signal_new();
1139  Typemaker2_Signal_SetName(sig, s);
1140  Typemaker2_Signal_SetParamType1(sig, "none");
1141  Typemaker2_Signal_SetParamType2(sig, "none");
1142 
1143  i=GWEN_XMLNode_GetIntProperty(nn, "useParam3", 0);
1144  if (i)
1146  i=GWEN_XMLNode_GetIntProperty(nn, "useParam4", 0);
1147  if (i)
1149 
1150  nnn=GWEN_XMLNode_FindFirstTag(nn, "params", NULL, NULL);
1151  if (nnn) {
1152  GWEN_XMLNODE *nnnn;
1153  int i;
1154 
1155  nnnn=GWEN_XMLNode_FindFirstTag(nnn, "param", NULL, NULL);
1156  i=1;
1157  while (nnnn && i<3) {
1158  const char *s;
1159 
1160  s=GWEN_XMLNode_GetProperty(nnnn, "type", "none");
1161  if (i==1)
1163  else
1165  i++;
1166  nnnn=GWEN_XMLNode_FindNextTag(nnnn, "param", NULL, NULL);
1167  }
1168  }
1169  Typemaker2_Signal_List_Add(sig, ty->signals);
1170  nn=GWEN_XMLNode_FindNextTag(nn, "signal", NULL, NULL);
1171  }
1172  }
1173 
1174 
1175  /* read slots */
1176  n=GWEN_XMLNode_FindFirstTag(node, "slots", NULL, NULL);
1177  if (n) {
1178  GWEN_XMLNODE *nn;
1179 
1180  nn=GWEN_XMLNode_FindFirstTag(n, "slot", NULL, NULL);
1181  while (nn) {
1182  TYPEMAKER2_SLOT *slot;
1183  GWEN_XMLNODE *nnn;
1184  int i;
1185 
1186  s=GWEN_XMLNode_GetProperty(nn, "name", NULL);
1187  if (!(s && *s)) {
1188  DBG_ERROR(GWEN_LOGDOMAIN, "Unnamed slot");
1189  return GWEN_ERROR_INVALID;
1190  }
1191  slot=Typemaker2_Slot_new();
1192  Typemaker2_Slot_SetName(slot, s);
1193  Typemaker2_Slot_SetParamType1(slot, "none");
1194  Typemaker2_Slot_SetParamType2(slot, "none");
1195 
1196  i=GWEN_XMLNode_GetIntProperty(nn, "useParam3", 0);
1197  if (i)
1199  i=GWEN_XMLNode_GetIntProperty(nn, "useParam4", 0);
1200  if (i)
1202 
1203 
1204  nnn=GWEN_XMLNode_FindFirstTag(nn, "params", NULL, NULL);
1205  if (nnn) {
1206  GWEN_XMLNODE *nnnn;
1207  int i;
1208 
1209  nnnn=GWEN_XMLNode_FindFirstTag(nnn, "param", NULL, NULL);
1210  i=1;
1211  while (nnnn && i<3) {
1212  const char *s;
1213 
1214  s=GWEN_XMLNode_GetProperty(nnnn, "type", "none");
1215  if (i==1)
1217  else
1219  i++;
1220  nnnn=GWEN_XMLNode_FindNextTag(nnnn, "param", NULL, NULL);
1221  }
1222  }
1223  Typemaker2_Slot_List_Add(slot, ty->slots);
1224  nn=GWEN_XMLNode_FindNextTag(nn, "slot", NULL, NULL);
1225  }
1226  }
1227 
1228 
1229  /* read defaults */
1230  n=GWEN_XMLNode_FindFirstTag(langNode, "defaults", NULL, NULL);
1231  if (n) {
1232  s=GWEN_XMLNode_GetCharValue(n, "default", NULL);
1234 
1235  s=GWEN_XMLNode_GetCharValue(n, "preset", NULL);
1237 
1238  /* read flags */
1239  s=GWEN_XMLNode_GetCharValue(n, "flags", NULL);
1240  if (s && *s)
1242 
1243  /* read setflags */
1244  s=GWEN_XMLNode_GetCharValue(n, "setflags", NULL);
1245  if (s && *s)
1247 
1248  /* read getflags */
1249  s=GWEN_XMLNode_GetCharValue(n, "getflags", NULL);
1250  if (s && *s)
1252 
1253  /* read dupflags */
1254  s=GWEN_XMLNode_GetCharValue(n, "dupflags", NULL);
1255  if (s && *s)
1257 
1258  /* read copyflags */
1259  s=GWEN_XMLNode_GetCharValue(n, "copyflags", NULL);
1260  if (s && *s)
1262 
1263  /* read access */
1264  s=GWEN_XMLNode_GetCharValue(n, "access", NULL);
1265  if (s && *s) {
1266  int i=Typemaker2_AccessFromString(s);
1267  if (i==TypeMaker2_Access_Unknown) {
1268  DBG_ERROR(GWEN_LOGDOMAIN, "Unknown access type [%s]", s);
1269  return GWEN_ERROR_BAD_DATA;
1270  }
1272  }
1273  }
1274 
1275  s=GWEN_XMLNode_GetProperty(langNode, "usePrivateConstructor", "0");
1276  if (s && *s)
1278 
1279  return 0;
1280 }
1281 
1282 
1283 
1284 void Typemaker2_Type_Dump(TYPEMAKER2_TYPE *ty, FILE *f, int indent)
1285 {
1286  if (ty) {
1287  int i;
1288  TYPEMAKER2_MEMBER *tm;
1289  const char *s1, *s2;
1290 
1291  for (i=0; i<indent; i++)
1292  fprintf(f, " ");
1293  fprintf(f, "Type\n");
1294 
1295  for (i=0; i<indent+2; i++)
1296  fprintf(f, " ");
1297  fprintf(f, "Name : %s\n", (ty->name)?(ty->name):"<null>");
1298 
1299  for (i=0; i<indent+2; i++)
1300  fprintf(f, " ");
1301  fprintf(f, "Identifier: %s\n", (ty->identifier)?(ty->identifier):"<null>");
1302 
1303  for (i=0; i<indent+2; i++)
1304  fprintf(f, " ");
1305  fprintf(f, "AEDB Type : %s\n", (ty->aqdb_type)?(ty->aqdb_type):"<null>");
1306 
1307  for (i=0; i<indent+2; i++)
1308  fprintf(f, " ");
1309  fprintf(f, "Extends : %s\n", (ty->extends)?(ty->extends):"<null>");
1310 
1311  for (i=0; i<indent+2; i++)
1312  fprintf(f, " ");
1313  s1=ty->inherits;
1315  fprintf(f, "Inherits : %s [%s]\n", s1?s1:"<null>", s2?s2:"<null>");
1316 
1317  for (i=0; i<indent+2; i++)
1318  fprintf(f, " ");
1319  fprintf(f, "BaseType : %s\n", (ty->baseType)?(ty->baseType):"<null>");
1320 
1321  for (i=0; i<indent+2; i++)
1322  fprintf(f, " ");
1323  fprintf(f, "Prefix : %s\n", (ty->prefix)?(ty->prefix):"<null>");
1324 
1325  for (i=0; i<indent+2; i++)
1326  fprintf(f, " ");
1327  fprintf(f, "Access : %d [%d]\n", ty->access, Typemaker2_Type_GetAccess(ty));
1328 
1329  for (i=0; i<indent+2; i++)
1330  fprintf(f, " ");
1331  fprintf(f, "Flags : %08x [%08x]\n", ty->flags, Typemaker2_Type_GetFlags(ty));
1332 
1333  for (i=0; i<indent+2; i++)
1334  fprintf(f, " ");
1335  fprintf(f, "SetFlags : %08x [%08x]\n", ty->setFlags, Typemaker2_Type_GetSetFlags(ty));
1336 
1337  for (i=0; i<indent+2; i++)
1338  fprintf(f, " ");
1339  fprintf(f, "GetFlags : %08x [%08x]\n", ty->getFlags, Typemaker2_Type_GetGetFlags(ty));
1340 
1341  for (i=0; i<indent+2; i++)
1342  fprintf(f, " ");
1343  fprintf(f, "DupFlags : %08x [%08x]\n", ty->dupFlags, Typemaker2_Type_GetDupFlags(ty));
1344 
1345  for (i=0; i<indent+2; i++)
1346  fprintf(f, " ");
1347  fprintf(f, "CopyFlags : %08x [%08x]\n", ty->copyFlags, Typemaker2_Type_GetCopyFlags(ty));
1348 
1349  for (i=0; i<indent+2; i++)
1350  fprintf(f, " ");
1351  s1=ty->defaultValue;
1353  fprintf(f, "Default : %s [%s]\n", s1?s1:"<null>", s2?s2:"<null>");
1354 
1355  for (i=0; i<indent+2; i++)
1356  fprintf(f, " ");
1357  s1=ty->presetValue;
1359  fprintf(f, "Preset : %s [%s]\n", s1?s1:"<null>", s2?s2:"<null>");
1360 
1361  for (i=0; i<indent+2; i++)
1362  fprintf(f, " ");
1363  fprintf(f, "Members\n");
1364  tm=Typemaker2_Member_List_First(ty->members);
1365  if (tm==NULL) {
1366  for (i=0; i<indent+4; i++)
1367  fprintf(f, " ");
1368  fprintf(f, "none\n");
1369  }
1370  else {
1371  while (tm) {
1372  Typemaker2_Member_Dump(tm, f, indent+4);
1373  tm=Typemaker2_Member_List_Next(tm);
1374  }
1375  }
1376  for (i=0; i<indent+2; i++)
1377  fprintf(f, " ");
1378  fprintf(f, "Field Count Id: %s\n", (ty->fieldCountId)?(ty->fieldCountId):"<null>");
1379 
1380  for (i=0; i<indent+2; i++)
1381  fprintf(f, " ");
1382  fprintf(f, "Descript. : %s\n", (ty->descr)?(ty->descr):"<null>");
1383 
1384  }
1385 }
1386 
1387 
1388 
1390 {
1391  TYPEMAKER2_ENUM *te;
1392 
1393  assert(ty);
1394  te=Typemaker2_Enum_List_First(ty->enums);
1395  while (te) {
1396  const char *n;
1397 
1398  n=Typemaker2_Enum_GetId(te);
1399  if (n && strcasecmp(s, n)==0)
1400  break;
1401  te=Typemaker2_Enum_List_Next(te);
1402  }
1403 
1404  return te;
1405 }
1406 
1407 
1408 
1410  const TYPEMAKER2_MEMBER *tm,
1411  const char *id)
1412 {
1413  TYPEMAKER2_CODE *tc=NULL;
1414  uint32_t flags=0;
1415 
1416  if (tm)
1417  flags=Typemaker2_Member_GetFlags(tm);
1418 
1419  /* try code within member definition first, if any */
1420  if (tm) {
1421  tc=Typemaker2_Code_List_First(Typemaker2_Member_GetCodeDefs(tm));
1422  while (tc) {
1423  const char *s;
1424 
1425  s=Typemaker2_Code_GetId(tc);
1426  if (s && strcasecmp(s, id)==0) {
1428  return tc;
1429  }
1430  tc=Typemaker2_Code_List_Next(tc);
1431  }
1432  }
1433 
1434  while (ty) {
1435  tc=Typemaker2_Code_List_First(ty->codeDefs);
1436  while (tc) {
1437  const char *s;
1438 
1439  s=Typemaker2_Code_GetId(tc);
1440  if (s && strcasecmp(s, id)==0) {
1442  return tc;
1443  }
1444  tc=Typemaker2_Code_List_Next(tc);
1445  }
1446 
1447  ty=ty->extendsPtr;
1448  }
1449 
1450  return NULL;
1451 }
1452 
1453 
1454 
1455 
1456 
int Typemaker2_Type_GetAccess(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:471
int Typemaker2_Type_GetPack(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:289
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
#define DBG_ERROR(dbg_logger, format,...)
Definition: debug.h:97
TYPEMAKER2_VIRTUALFN_LIST * Typemaker2_Type_GetVirtualFns(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:737
void Typemaker2_Type_SetIdentifier(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:594
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:462
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:1284
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:782
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:418
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:627
int Typemaker2_Type_readXml(TYPEMAKER2_TYPE *ty, GWEN_XMLNODE *node, const char *wantedLang)
Definition: tm_type.c:875
#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:484
#define GWEN_XML_FLAGS_SIMPLE
Definition: xml.h:89
TYPEMAKER2_SLOT_LIST * Typemaker2_Type_GetSlots(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:755
int Typemaker2_Type_GetStructAccess(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:493
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:814
TYPEMAKER2_HEADER_LIST * Typemaker2_Type_GetHeaders(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:692
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:629
void Typemaker2_Type_SetBaseTypePtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p)
Definition: tm_type.c:674
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:572
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:656
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:665
struct TYPEMAKER2_GROUP TYPEMAKER2_GROUP
Definition: tm_group.h:19
#define GWEN_LOGDOMAIN
Definition: logger.h:32
uint32_t Typemaker2_Type_GetSetFlags(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:383
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:348
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:449
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:746
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:559
void Typemaker2_Type_SetPrefix(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:616
int GWEN_XMLNode_GetIntValue(const GWEN_XMLNODE *n, const char *name, int defValue)
Definition: xml.c:923
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:524
TYPEMAKER2_INLINE_LIST * Typemaker2_Type_GetInlines(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:728
#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:322
TYPEMAKER2_ITEM * Typemaker2_Item_fromXml(GWEN_XMLNODE *p_db)
Definition: tm_item.c:209
void Typemaker2_Type_SetStructAccess(TYPEMAKER2_TYPE *ty, int i)
Definition: tm_type.c:506
void Typemaker2_Type_SetSetFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
Definition: tm_type.c:396
void Typemaker2_Type_SetPack(TYPEMAKER2_TYPE *ty, int i)
Definition: tm_type.c:298
TYPEMAKER2_HEADER * Typemaker2_Header_new()
Definition: tm_header.c:29
const char * Typemaker2_Type_GetIdentifier(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:585
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:427
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:335
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:773
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:683
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:800
#define GWEN_XML_FLAGS_HANDLE_COMMENTS
Definition: xml.h:60
TYPEMAKER2_INLINE * Typemaker2_Inline_fromXml(GWEN_XMLNODE *node)
Definition: tm_inline.c:145
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:405
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:309
#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:701
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:607
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:647
#define GWEN_LIST_INIT(t, element)
Definition: list1.h:466
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:719
void Typemaker2_Type_SetFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
Definition: tm_type.c:374
int Typemaker2_Type_GetUsePrivateConstructor(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:515
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:638
#define DBG_INFO(dbg_logger, format,...)
Definition: debug.h:181
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:440
TYPEMAKER2_GROUP_TREE * Typemaker2_Type_GetGroupTree(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:764
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:361
const char * Typemaker2_Type_GetDefaultValue(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:533
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:546
#define GWEN_LIST_FINI(t, element)
Definition: list1.h:475
TYPEMAKER2_ENUM * Typemaker2_Type_FindEnum(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:1389
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:1409
TYPEMAKER2_DEFINE_LIST * Typemaker2_Type_GetDefines(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:710
const char * Typemaker2_Type_GetFieldCountId(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:791
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