1 /***************************************************************************
2 begin : Thu Jul 02 2009
3 copyright : (C) 2018 by Martin Preuss
4 email : martin@libchipcard.de
5
6 ***************************************************************************
7 * Please see toplevel file COPYING for license details *
8 ***************************************************************************/
9
10 #ifdef HAVE_CONFIG_H
11 # include <config.h>
12 #endif
13
14
15 #include "tm_member_p.h"
16 #include "tm_util.h"
17
18
19 #include <gwenhywfar/debug.h>
20 #include <gwenhywfar/misc.h>
21
22 #include <assert.h>
23
24
25
GWEN_LIST_FUNCTIONS(TYPEMAKER2_MEMBER,Typemaker2_Member)26 GWEN_LIST_FUNCTIONS(TYPEMAKER2_MEMBER, Typemaker2_Member)
27
28
29
30
31 TYPEMAKER2_MEMBER *Typemaker2_Member_new()
32 {
33 TYPEMAKER2_MEMBER *tm;
34
35 GWEN_NEW_OBJECT(TYPEMAKER2_MEMBER, tm);
36 tm->refCount=1;
37 GWEN_LIST_INIT(TYPEMAKER2_MEMBER, tm);
38
39 tm->codeDefs=Typemaker2_Code_List_new();
40
41 return tm;
42 }
43
44
45
Typemaker2_Member_free(TYPEMAKER2_MEMBER * tm)46 void Typemaker2_Member_free(TYPEMAKER2_MEMBER *tm)
47 {
48 if (tm) {
49 assert(tm->refCount);
50 if (tm->refCount==1) {
51 GWEN_LIST_FINI(TYPEMAKER2_MEMBER, tm);
52 Typemaker2_Code_List_free(tm->codeDefs);
53 free(tm->name);
54 free(tm->typeName);
55 free(tm->elementName);
56 free(tm->descr);
57 free(tm->fieldId);
58 free(tm->defaultValue);
59 free(tm->presetValue);
60 free(tm->aedb_type);
61 free(tm->enumId);
62 free(tm->defineId);
63 tm->refCount=0;
64 GWEN_FREE_OBJECT(tm);
65 }
66 else {
67 tm->refCount--;
68 }
69 }
70 }
71
72
73
Typemaker2_Member_Attach(TYPEMAKER2_MEMBER * tm)74 void Typemaker2_Member_Attach(TYPEMAKER2_MEMBER *tm)
75 {
76 assert(tm);
77 assert(tm->refCount);
78 tm->refCount++;
79 }
80
81
82
Typemaker2_Member_GetName(const TYPEMAKER2_MEMBER * tm)83 const char *Typemaker2_Member_GetName(const TYPEMAKER2_MEMBER *tm)
84 {
85 assert(tm);
86 assert(tm->refCount);
87 return tm->name;
88 }
89
90
91
Typemaker2_Member_SetName(TYPEMAKER2_MEMBER * tm,const char * s)92 void Typemaker2_Member_SetName(TYPEMAKER2_MEMBER *tm, const char *s)
93 {
94 assert(tm);
95 assert(tm->refCount);
96 free(tm->name);
97 if (s && *s)
98 tm->name=strdup(s);
99 else
100 tm->name=NULL;
101 }
102
103
104
Typemaker2_Member_GetTypeName(const TYPEMAKER2_MEMBER * tm)105 const char *Typemaker2_Member_GetTypeName(const TYPEMAKER2_MEMBER *tm)
106 {
107 assert(tm);
108 assert(tm->refCount);
109 return tm->typeName;
110 }
111
112
113
Typemaker2_Member_SetTypeName(TYPEMAKER2_MEMBER * tm,const char * s)114 void Typemaker2_Member_SetTypeName(TYPEMAKER2_MEMBER *tm, const char *s)
115 {
116 assert(tm);
117 assert(tm->refCount);
118 free(tm->typeName);
119 if (s && *s)
120 tm->typeName=strdup(s);
121 else
122 tm->typeName=NULL;
123 }
124
125
126
Typemaker2_Member_GetElementName(const TYPEMAKER2_MEMBER * tm)127 const char *Typemaker2_Member_GetElementName(const TYPEMAKER2_MEMBER *tm)
128 {
129 assert(tm);
130 assert(tm->refCount);
131 return tm->elementName;
132 }
133
134
135
Typemaker2_Member_SetElementName(TYPEMAKER2_MEMBER * tm,const char * s)136 void Typemaker2_Member_SetElementName(TYPEMAKER2_MEMBER *tm, const char *s)
137 {
138 assert(tm);
139 assert(tm->refCount);
140 free(tm->elementName);
141 if (s && *s)
142 tm->elementName=strdup(s);
143 else
144 tm->elementName=NULL;
145 }
146
147
148
Typemaker2_Member_GetDescription(const TYPEMAKER2_MEMBER * tm)149 const char *Typemaker2_Member_GetDescription(const TYPEMAKER2_MEMBER *tm)
150 {
151 assert(tm);
152 assert(tm->refCount);
153 return tm->descr;
154 }
155
156
157
Typemaker2_Member_SetDescription(TYPEMAKER2_MEMBER * tm,const char * s)158 void Typemaker2_Member_SetDescription(TYPEMAKER2_MEMBER *tm, const char *s)
159 {
160 assert(tm);
161 assert(tm->refCount);
162 free(tm->descr);
163 if (s && *s)
164 tm->descr=strdup(s);
165 else
166 tm->descr=NULL;
167 }
168
169
170
Typemaker2_Member_GetFieldId(const TYPEMAKER2_MEMBER * tm)171 const char *Typemaker2_Member_GetFieldId(const TYPEMAKER2_MEMBER *tm)
172 {
173 assert(tm);
174 assert(tm->refCount);
175 return tm->fieldId;
176 }
177
178
179
Typemaker2_Member_SetFieldId(TYPEMAKER2_MEMBER * tm,const char * s)180 void Typemaker2_Member_SetFieldId(TYPEMAKER2_MEMBER *tm, const char *s)
181 {
182 assert(tm);
183 assert(tm->refCount);
184 free(tm->fieldId);
185 if (s && *s)
186 tm->fieldId=strdup(s);
187 else
188 tm->fieldId=NULL;
189 }
190
191
192
Typemaker2_Member_GetEnumId(const TYPEMAKER2_MEMBER * tm)193 const char *Typemaker2_Member_GetEnumId(const TYPEMAKER2_MEMBER *tm)
194 {
195 assert(tm);
196 assert(tm->refCount);
197 return tm->enumId;
198 }
199
200
201
Typemaker2_Member_SetEnumId(TYPEMAKER2_MEMBER * tm,const char * s)202 void Typemaker2_Member_SetEnumId(TYPEMAKER2_MEMBER *tm, const char *s)
203 {
204 assert(tm);
205 assert(tm->refCount);
206 free(tm->enumId);
207 if (s && *s)
208 tm->enumId=strdup(s);
209 else
210 tm->enumId=NULL;
211 }
212
213
214
Typemaker2_Member_GetDefineId(const TYPEMAKER2_MEMBER * tm)215 const char *Typemaker2_Member_GetDefineId(const TYPEMAKER2_MEMBER *tm)
216 {
217 assert(tm);
218 assert(tm->refCount);
219 return tm->defineId;
220 }
221
222
223
Typemaker2_Member_SetDefineId(TYPEMAKER2_MEMBER * tm,const char * s)224 void Typemaker2_Member_SetDefineId(TYPEMAKER2_MEMBER *tm, const char *s)
225 {
226 assert(tm);
227 assert(tm->refCount);
228 free(tm->defineId);
229 if (s && *s)
230 tm->defineId=strdup(s);
231 else
232 tm->defineId=NULL;
233 }
234
235
236
Typemaker2_Member_GetFlags(const TYPEMAKER2_MEMBER * tm)237 uint32_t Typemaker2_Member_GetFlags(const TYPEMAKER2_MEMBER *tm)
238 {
239 assert(tm);
240 assert(tm->refCount);
241
242 if (tm->flags==0 && tm->typePtr)
243 return Typemaker2_Type_GetFlags(tm->typePtr);
244
245 return tm->flags;
246 }
247
248
249
Typemaker2_Member_SetFlags(TYPEMAKER2_MEMBER * tm,uint32_t i)250 void Typemaker2_Member_SetFlags(TYPEMAKER2_MEMBER *tm, uint32_t i)
251 {
252 assert(tm);
253 assert(tm->refCount);
254 tm->flags=i;
255 }
256
257
258
Typemaker2_Member_GetSetFlags(const TYPEMAKER2_MEMBER * tm)259 uint32_t Typemaker2_Member_GetSetFlags(const TYPEMAKER2_MEMBER *tm)
260 {
261 assert(tm);
262 assert(tm->refCount);
263
264 if (tm->setFlags==0 && tm->typePtr)
265 return Typemaker2_Type_GetSetFlags(tm->typePtr);
266
267 return tm->setFlags;
268 }
269
270
271
Typemaker2_Member_SetSetFlags(TYPEMAKER2_MEMBER * tm,uint32_t i)272 void Typemaker2_Member_SetSetFlags(TYPEMAKER2_MEMBER *tm, uint32_t i)
273 {
274 assert(tm);
275 assert(tm->refCount);
276 tm->setFlags=i;
277 }
278
279
280
Typemaker2_Member_GetGetFlags(const TYPEMAKER2_MEMBER * tm)281 uint32_t Typemaker2_Member_GetGetFlags(const TYPEMAKER2_MEMBER *tm)
282 {
283 assert(tm);
284 assert(tm->refCount);
285
286 if (tm->getFlags==0 && tm->typePtr)
287 return Typemaker2_Type_GetGetFlags(tm->typePtr);
288
289 return tm->getFlags;
290 }
291
292
293
Typemaker2_Member_SetGetFlags(TYPEMAKER2_MEMBER * tm,uint32_t i)294 void Typemaker2_Member_SetGetFlags(TYPEMAKER2_MEMBER *tm, uint32_t i)
295 {
296 assert(tm);
297 assert(tm->refCount);
298 tm->getFlags=i;
299 }
300
301
302
Typemaker2_Member_GetDupFlags(const TYPEMAKER2_MEMBER * tm)303 uint32_t Typemaker2_Member_GetDupFlags(const TYPEMAKER2_MEMBER *tm)
304 {
305 assert(tm);
306 assert(tm->refCount);
307
308 if (tm->dupFlags==0 && tm->typePtr)
309 return Typemaker2_Type_GetDupFlags(tm->typePtr);
310
311 return tm->dupFlags;
312 }
313
314
315
Typemaker2_Member_SetDupFlags(TYPEMAKER2_MEMBER * tm,uint32_t i)316 void Typemaker2_Member_SetDupFlags(TYPEMAKER2_MEMBER *tm, uint32_t i)
317 {
318 assert(tm);
319 assert(tm->refCount);
320 tm->dupFlags=i;
321 }
322
323
324
Typemaker2_Member_GetCopyFlags(const TYPEMAKER2_MEMBER * tm)325 uint32_t Typemaker2_Member_GetCopyFlags(const TYPEMAKER2_MEMBER *tm)
326 {
327 assert(tm);
328 assert(tm->refCount);
329
330 if (tm->copyFlags==0 && tm->typePtr)
331 return Typemaker2_Type_GetCopyFlags(tm->typePtr);
332
333 return tm->copyFlags;
334 }
335
336
337
Typemaker2_Member_SetCopyFlags(TYPEMAKER2_MEMBER * tm,uint32_t i)338 void Typemaker2_Member_SetCopyFlags(TYPEMAKER2_MEMBER *tm, uint32_t i)
339 {
340 assert(tm);
341 assert(tm->refCount);
342 tm->copyFlags=i;
343 }
344
345
346
Typemaker2_Member_GetAccess(const TYPEMAKER2_MEMBER * tm)347 int Typemaker2_Member_GetAccess(const TYPEMAKER2_MEMBER *tm)
348 {
349 assert(tm);
350 assert(tm->refCount);
351
352 if (tm->access==TypeMaker2_Access_Unknown && tm->typePtr)
353 return Typemaker2_Type_GetAccess(tm->typePtr);
354
355 return tm->access;
356 }
357
358
359
Typemaker2_Member_SetAccess(TYPEMAKER2_MEMBER * tm,int i)360 void Typemaker2_Member_SetAccess(TYPEMAKER2_MEMBER *tm, int i)
361 {
362 assert(tm);
363 assert(tm->refCount);
364 tm->access=i;
365 }
366
367
368
Typemaker2_Member_GetMaxLen(const TYPEMAKER2_MEMBER * tm)369 int Typemaker2_Member_GetMaxLen(const TYPEMAKER2_MEMBER *tm)
370 {
371 assert(tm);
372 assert(tm->refCount);
373
374 return tm->maxLen;
375 }
376
377
378
Typemaker2_Member_SetMaxLen(TYPEMAKER2_MEMBER * tm,int i)379 void Typemaker2_Member_SetMaxLen(TYPEMAKER2_MEMBER *tm, int i)
380 {
381 assert(tm);
382 assert(tm->refCount);
383 tm->maxLen=i;
384 }
385
386
387
Typemaker2_Member_GetDefaultValue(const TYPEMAKER2_MEMBER * tm)388 const char *Typemaker2_Member_GetDefaultValue(const TYPEMAKER2_MEMBER *tm)
389 {
390 assert(tm);
391 assert(tm->refCount);
392
393 if (tm->defaultValue==NULL && tm->typePtr)
394 return Typemaker2_Type_GetDefaultValue(tm->typePtr);
395 return tm->defaultValue;
396 }
397
398
399
Typemaker2_Member_SetDefaultValue(TYPEMAKER2_MEMBER * tm,const char * s)400 void Typemaker2_Member_SetDefaultValue(TYPEMAKER2_MEMBER *tm, const char *s)
401 {
402 assert(tm);
403 assert(tm->refCount);
404
405 free(tm->defaultValue);
406 if (s)
407 tm->defaultValue=strdup(s);
408 else
409 tm->defaultValue=NULL;
410 }
411
412
413
Typemaker2_Member_GetPresetValue(const TYPEMAKER2_MEMBER * tm)414 const char *Typemaker2_Member_GetPresetValue(const TYPEMAKER2_MEMBER *tm)
415 {
416 assert(tm);
417 assert(tm->refCount);
418
419 if (tm->presetValue==NULL && tm->typePtr)
420 return Typemaker2_Type_GetPresetValue(tm->typePtr);
421 return tm->presetValue;
422 }
423
424
425
Typemaker2_Member_SetPresetValue(TYPEMAKER2_MEMBER * tm,const char * s)426 void Typemaker2_Member_SetPresetValue(TYPEMAKER2_MEMBER *tm, const char *s)
427 {
428 assert(tm);
429 assert(tm->refCount);
430
431 free(tm->presetValue);
432 if (s)
433 tm->presetValue=strdup(s);
434 else
435 tm->presetValue=NULL;
436 }
437
438
439
Typemaker2_Member_GetAqDbType(const TYPEMAKER2_MEMBER * tm)440 const char *Typemaker2_Member_GetAqDbType(const TYPEMAKER2_MEMBER *tm)
441 {
442 assert(tm);
443 assert(tm->refCount);
444
445 if (tm->aedb_type==NULL && tm->typePtr)
446 return Typemaker2_Type_GetAqDbType(tm->typePtr);
447
448 return tm->aedb_type;
449 }
450
451
452
Typemaker2_Member_SetAqDbType(TYPEMAKER2_MEMBER * tm,const char * s)453 void Typemaker2_Member_SetAqDbType(TYPEMAKER2_MEMBER *tm, const char *s)
454 {
455 assert(tm);
456 assert(tm->refCount);
457
458 free(tm->aedb_type);
459 if (s)
460 tm->aedb_type=strdup(s);
461 else
462 tm->aedb_type=NULL;
463 }
464
465
466
Typemaker2_Member_GetTypePtr(const TYPEMAKER2_MEMBER * tm)467 TYPEMAKER2_TYPE *Typemaker2_Member_GetTypePtr(const TYPEMAKER2_MEMBER *tm)
468 {
469 assert(tm);
470 assert(tm->refCount);
471 return tm->typePtr;
472 }
473
474
475
Typemaker2_Member_SetTypePtr(TYPEMAKER2_MEMBER * tm,TYPEMAKER2_TYPE * ty)476 void Typemaker2_Member_SetTypePtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_TYPE *ty)
477 {
478 assert(tm);
479 assert(tm->refCount);
480 tm->typePtr=ty;
481 }
482
483
484
Typemaker2_Member_GetEnumPtr(const TYPEMAKER2_MEMBER * tm)485 TYPEMAKER2_ENUM *Typemaker2_Member_GetEnumPtr(const TYPEMAKER2_MEMBER *tm)
486 {
487 assert(tm);
488 assert(tm->refCount);
489 return tm->enumPtr;
490 }
491
492
493
Typemaker2_Member_SetEnumPtr(TYPEMAKER2_MEMBER * tm,TYPEMAKER2_ENUM * te)494 void Typemaker2_Member_SetEnumPtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_ENUM *te)
495 {
496 assert(tm);
497 assert(tm->refCount);
498 tm->enumPtr=te;
499 }
500
501
502
Typemaker2_Member_GetDefinePtr(const TYPEMAKER2_MEMBER * tm)503 TYPEMAKER2_DEFINE *Typemaker2_Member_GetDefinePtr(const TYPEMAKER2_MEMBER *tm)
504 {
505 assert(tm);
506 assert(tm->refCount);
507 return tm->definePtr;
508 }
509
510
511
Typemaker2_Member_SetDefinePtr(TYPEMAKER2_MEMBER * tm,TYPEMAKER2_DEFINE * td)512 void Typemaker2_Member_SetDefinePtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_DEFINE *td)
513 {
514 assert(tm);
515 assert(tm->refCount);
516 tm->definePtr=td;
517 }
518
519
520
Typemaker2_Member_GetGroupPtr(const TYPEMAKER2_MEMBER * tm)521 TYPEMAKER2_GROUP *Typemaker2_Member_GetGroupPtr(const TYPEMAKER2_MEMBER *tm)
522 {
523 assert(tm);
524 assert(tm->refCount);
525 return tm->groupPtr;
526 }
527
528
529
Typemaker2_Member_SetGroupPtr(TYPEMAKER2_MEMBER * tm,TYPEMAKER2_GROUP * gr)530 void Typemaker2_Member_SetGroupPtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_GROUP *gr)
531 {
532 assert(tm);
533 assert(tm->refCount);
534 tm->groupPtr=gr;
535 }
536
537
538
Typemaker2_Member_GetMemberPosition(const TYPEMAKER2_MEMBER * tm)539 int Typemaker2_Member_GetMemberPosition(const TYPEMAKER2_MEMBER *tm)
540 {
541 assert(tm);
542 assert(tm->refCount);
543 return tm->memberPosition;
544 }
545
546
547
Typemaker2_Member_SetMemberPosition(TYPEMAKER2_MEMBER * tm,int i)548 void Typemaker2_Member_SetMemberPosition(TYPEMAKER2_MEMBER *tm, int i)
549 {
550 assert(tm);
551 assert(tm->refCount);
552 tm->memberPosition=i;
553 }
554
555
556
Typemaker2_Member_GetCodeDefs(const TYPEMAKER2_MEMBER * tm)557 TYPEMAKER2_CODE_LIST *Typemaker2_Member_GetCodeDefs(const TYPEMAKER2_MEMBER *tm)
558 {
559 assert(tm);
560 assert(tm->refCount);
561 return tm->codeDefs;
562 }
563
564
565
Typemaker2_Member_readXml(TYPEMAKER2_MEMBER * tm,GWEN_XMLNODE * node,const char * wantedLang)566 int Typemaker2_Member_readXml(TYPEMAKER2_MEMBER *tm, GWEN_XMLNODE *node, const char *wantedLang)
567 {
568 const char *s;
569 GWEN_XMLNODE *langNode=NULL;
570 GWEN_XMLNODE *nn;
571
572 assert(tm);
573 assert(tm->refCount);
574
575 if (wantedLang)
576 langNode=GWEN_XMLNode_FindFirstTag(node, "lang", "id", wantedLang);
577 if (langNode==NULL)
578 langNode=node;
579
580 s=GWEN_XMLNode_GetProperty(node, "name", NULL);
581 if (s==NULL) {
582 DBG_ERROR(GWEN_LOGDOMAIN, "Member has no id");
583 return GWEN_ERROR_BAD_DATA;
584 }
585 Typemaker2_Member_SetName(tm, s);
586
587 s=GWEN_XMLNode_GetProperty(node, "type", NULL);
588 if (s==NULL) {
589 DBG_ERROR(GWEN_LOGDOMAIN, "Member has no type");
590 return GWEN_ERROR_BAD_DATA;
591 }
592 Typemaker2_Member_SetTypeName(tm, s);
593
594 s=GWEN_XMLNode_GetProperty(node, "elementName", NULL);
595 Typemaker2_Member_SetElementName(tm, s);
596
597 s=GWEN_XMLNode_GetProperty(node, "enum", NULL);
598 Typemaker2_Member_SetEnumId(tm, s);
599
600 s=GWEN_XMLNode_GetProperty(node, "define", NULL);
601 Typemaker2_Member_SetDefineId(tm, s);
602
603 s=GWEN_XMLNode_GetProperty(node, "maxlen", NULL);
604 if (s && *s) {
605 int i;
606
607 if (1==sscanf(s, "%i", &i))
608 tm->maxLen=i;
609 else {
610 DBG_ERROR(GWEN_LOGDOMAIN, "Bad value for maxlen [%s]", s);
611 return GWEN_ERROR_BAD_DATA;
612 }
613 }
614
615 /* read flags */
616 s=GWEN_XMLNode_GetCharValue(node, "flags", NULL);
617 if (s && *s)
618 Typemaker2_Member_SetFlags(tm, Typemaker2_FlagsFromString(s));
619
620 /* read setflags */
621 s=GWEN_XMLNode_GetCharValue(node, "setflags", NULL);
622 if (s && *s)
623 Typemaker2_Member_SetSetFlags(tm, Typemaker2_FlagsFromString(s));
624
625 /* read getflags */
626 s=GWEN_XMLNode_GetCharValue(node, "getflags", NULL);
627 if (s && *s)
628 Typemaker2_Member_SetGetFlags(tm, Typemaker2_FlagsFromString(s));
629
630 /* read dupflags */
631 s=GWEN_XMLNode_GetCharValue(node, "dupflags", NULL);
632 if (s && *s)
633 Typemaker2_Member_SetDupFlags(tm, Typemaker2_FlagsFromString(s));
634
635 /* read copyflags */
636 s=GWEN_XMLNode_GetCharValue(node, "copyflags", NULL);
637 if (s && *s)
638 Typemaker2_Member_SetCopyFlags(tm, Typemaker2_FlagsFromString(s));
639
640 /* read access */
641 s=GWEN_XMLNode_GetCharValue(node, "access", NULL);
642 if (s && *s) {
643 int i=Typemaker2_AccessFromString(s);
644 if (i==TypeMaker2_Access_Unknown) {
645 DBG_ERROR(GWEN_LOGDOMAIN, "Unknown access type [%s]", s);
646 return GWEN_ERROR_BAD_DATA;
647 }
648 Typemaker2_Member_SetAccess(tm, i);
649 }
650
651 /* read default value */
652 s=GWEN_XMLNode_GetCharValue(node, "default", NULL);
653 if (s && *s)
654 Typemaker2_Member_SetDefaultValue(tm, s);
655
656 /* read preset value */
657 s=GWEN_XMLNode_GetCharValue(node, "preset", NULL);
658 if (s && *s)
659 Typemaker2_Member_SetPresetValue(tm, s);
660
661 /* read AEDB type */
662 s=GWEN_XMLNode_GetCharValue(node, "aedb_type", NULL);
663 if (s && *s)
664 Typemaker2_Member_SetAqDbType(tm, s);
665
666 /* read description */
667 nn=GWEN_XMLNode_FindFirstTag(node, "descr", NULL, NULL);
668 if (nn) {
669 GWEN_BUFFER *tbuf;
670 int rv;
671
672 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
673 rv=GWEN_XMLNode_toBuffer(nn, tbuf, GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_HANDLE_COMMENTS);
674 if (rv<0) {
675 DBG_ERROR(0, "here (%d)", rv);
676 }
677 else {
678 Typemaker2_Member_SetDescription(tm, GWEN_Buffer_GetStart(tbuf));
679 }
680 GWEN_Buffer_free(tbuf);
681 }
682
683 /* read codedefs */
684 nn=GWEN_XMLNode_FindFirstTag(langNode, "codedefs", NULL, NULL);
685 if (nn) {
686 GWEN_XMLNODE *nnn;
687
688 nnn=GWEN_XMLNode_FindFirstTag(nn, "codedef", NULL, NULL);
689 while (nnn) {
690 TYPEMAKER2_CODE *tc;
691
692 tc=Typemaker2_Code_fromXml(nnn);
693 if (tc) {
694 const char *s;
695
696 s=Typemaker2_Code_GetMemberFlagsMask(tc);
697 if (s && *s)
698 Typemaker2_Code_SetMemberFlagsMaskInt(tc, Typemaker2_FlagsFromString(s));
699
700 s=Typemaker2_Code_GetMemberFlagsValue(tc);
701 if (s && *s)
702 Typemaker2_Code_SetMemberFlagsValueInt(tc, Typemaker2_FlagsFromString(s));
703 }
704
705 Typemaker2_Code_List_Add(tc, tm->codeDefs);
706 nnn=GWEN_XMLNode_FindNextTag(nnn, "codedef", NULL, NULL);
707 }
708 }
709
710
711 return 0;
712 }
713
714
715
Typemaker2_Member_Dump(TYPEMAKER2_MEMBER * tm,FILE * f,int indent)716 void Typemaker2_Member_Dump(TYPEMAKER2_MEMBER *tm, FILE *f, int indent)
717 {
718 if (tm) {
719 int i;
720 const char *s1, *s2;
721
722 for (i=0; i<indent; i++)
723 fprintf(f, " ");
724 fprintf(f, "Member\n");
725
726 for (i=0; i<indent+2; i++)
727 fprintf(f, " ");
728 fprintf(f, "Name : %s\n", (tm->name)?(tm->name):"<null>");
729
730 for (i=0; i<indent+2; i++)
731 fprintf(f, " ");
732 fprintf(f, "Typename : %s\n", (tm->typeName)?(tm->typeName):"<null>");
733
734 for (i=0; i<indent+2; i++)
735 fprintf(f, " ");
736 fprintf(f, "Elementname : %s\n", (tm->elementName)?(tm->elementName):"<null>");
737
738 for (i=0; i<indent+2; i++)
739 fprintf(f, " ");
740 fprintf(f, "Field Id : %s\n", (tm->fieldId)?(tm->fieldId):"<null>");
741
742 for (i=0; i<indent+2; i++)
743 fprintf(f, " ");
744 fprintf(f, "Access : %d [%d]\n", tm->access, Typemaker2_Member_GetAccess(tm));
745
746 for (i=0; i<indent+2; i++)
747 fprintf(f, " ");
748 fprintf(f, "Flags : %08x [%08x]\n", tm->flags, Typemaker2_Member_GetFlags(tm));
749
750 for (i=0; i<indent+2; i++)
751 fprintf(f, " ");
752 fprintf(f, "SetFlags : %08x [%08x]\n", tm->setFlags, Typemaker2_Member_GetSetFlags(tm));
753
754 for (i=0; i<indent+2; i++)
755 fprintf(f, " ");
756 fprintf(f, "GetFlags : %08x [%08x]\n", tm->getFlags, Typemaker2_Member_GetGetFlags(tm));
757
758 for (i=0; i<indent+2; i++)
759 fprintf(f, " ");
760 fprintf(f, "DupFlags : %08x [%08x]\n", tm->dupFlags, Typemaker2_Member_GetDupFlags(tm));
761
762 for (i=0; i<indent+2; i++)
763 fprintf(f, " ");
764 s1=tm->defaultValue;
765 s2=Typemaker2_Member_GetDefaultValue(tm);
766 fprintf(f, "Default : %s [%s]\n", s1?s1:"<null>", s2?s2:"<null>");
767
768 for (i=0; i<indent+2; i++)
769 fprintf(f, " ");
770 s1=tm->presetValue;
771 s2=Typemaker2_Member_GetPresetValue(tm);
772 fprintf(f, "Preset : %s [%s]\n", s1?s1:"<null>", s2?s2:"<null>");
773
774 for (i=0; i<indent+2; i++)
775 fprintf(f, " ");
776 fprintf(f, "Position : %d\n", tm->memberPosition);
777
778 for (i=0; i<indent+2; i++)
779 fprintf(f, " ");
780 fprintf(f, "Description : %s\n", (tm->descr)?(tm->descr):"<null>");
781
782 }
783 }
784
785
786
787
788
789
790
791