15 #include "tm_builder_p.h" 18 #include <gwenhywfar/debug.h> 19 #include <gwenhywfar/misc.h> 81 free(tb->fileNamePublic);
82 free(tb->fileNameLibrary);
83 free(tb->fileNameProtected);
84 free(tb->fileNamePrivate);
85 free(tb->fileNameCode);
96 return tb->declarationsPublic;
104 return tb->declarationsLibrary;
112 return tb->declarationsProtected;
120 return tb->declarationsPrivate;
136 return tb->typeManager;
192 return tb->fileNamePublic;
200 free(tb->fileNamePublic);
202 tb->fileNamePublic=strdup(s);
204 tb->fileNamePublic=
NULL;
212 return tb->fileNameLibrary;
220 free(tb->fileNameLibrary);
222 tb->fileNameLibrary=strdup(s);
224 tb->fileNameLibrary=
NULL;
232 return tb->fileNameProtected;
240 free(tb->fileNameProtected);
242 tb->fileNameProtected=strdup(s);
244 tb->fileNameProtected=
NULL;
252 return tb->fileNamePrivate;
260 free(tb->fileNamePrivate);
262 tb->fileNamePrivate=strdup(s);
264 tb->fileNamePrivate=
NULL;
272 return tb->fileNameCode;
280 free(tb->fileNameCode);
282 tb->fileNameCode=strdup(s);
284 tb->fileNameCode=
NULL;
292 return tb->sourceFileName;
300 free(tb->sourceFileName);
302 tb->sourceFileName=strdup(s);
304 tb->sourceFileName=
NULL;
312 return tb->destFolder;
320 free(tb->destFolder);
322 tb->destFolder=strdup(s);
341 return tb->buildFn(tb, ty);
359 if (tb->typeManager) {
370 TYPEMAKER2_MEMBER_LIST *tml;
395 tmm=Typemaker2_Member_List_First(tml);
399 tmm=Typemaker2_Member_List_Next(tmm);
432 const char *prefix=
NULL;
507 if (prefix && *prefix) {
542 while (*p && *p!=
')')
558 name=(
char *) malloc(len+1);
560 memmove(name, pStart, len);
593 while (*p && *p!=
'#') {
604 if (tolower(p[1])==
'n') {
608 else if (tolower(p[1])==
't') {
612 else if (tolower(p[1])==
'\\') {
634 #define INVOKE_FN(macro_var1) \ 635 int Typemaker2_Builder_Invoke_##macro_var1##Fn(TYPEMAKER2_BUILDER *tb, \ 636 TYPEMAKER2_TYPE *ty, \ 637 TYPEMAKER2_MEMBER *tm, \ 640 GWEN_BUFFER *dbuf) { \ 642 TYPEMAKER2_TYPE *mty; \ 643 TYPEMAKER2_CODE *tc; \ 644 const char *s=NULL; \ 646 mty=Typemaker2_Member_GetTypePtr(tm); \ 648 DBG_ERROR(GWEN_LOGDOMAIN, "No type pointer for member"); \ 649 return GWEN_ERROR_NO_DATA; \ 651 tc=Typemaker2_Type_FindCodeForMember(mty, tm, __STRING(macro_var1));\ 653 s=Typemaker2_Code_GetCode(tc); \ 658 db=Typemaker2_Builder_CreateDbForCall(tb, ty, tm, src, dst); \ 660 DBG_INFO(GWEN_LOGDOMAIN, "here"); \ 661 return GWEN_ERROR_BAD_DATA; \ 665 GWEN_Buffer_AppendString(dbuf, " 671 rv=Typemaker2_Builder_ReplaceVars(s, db, dbuf); \ 672 GWEN_DB_Group_free(db); \ 674 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); \ 680 DBG_INFO(GWEN_LOGDOMAIN, "No code for type [%s]", \ 681 Typemaker2_Type_GetName(mty)); \ 686 DBG_ERROR(GWEN_LOGDOMAIN, "No member information"); \ 687 return GWEN_ERROR_NO_DATA; \ 710 const char *fileName,
717 f=fopen(fileName,
"w");
727 "/**********************************************************\n" 728 " * This file has been automatically created by \"typemaker2\"\n" 729 " * from the file \"%s\".\n" 730 " * Please do not edit this file, all changes will be lost.\n" 731 " * Better edit the mentioned source file instead.\n" 732 " **********************************************************/\n" 738 TYPEMAKER2_HEADER_LIST *hl;
740 fprintf(f,
"#ifdef HAVE_CONFIG_H\n# include <config.h>\n#endif\n\n");
742 s=tb->fileNamePrivate;
744 s=tb->fileNameLibrary;
746 s=tb->fileNameProtected;
748 s=tb->fileNamePublic;
750 fprintf(f,
"#include \"%s\"\n\n", s);
754 fprintf(f,
"#include <gwenhywfar/misc.h>\n");
755 fprintf(f,
"#include <gwenhywfar/debug.h>\n");
759 fprintf(f,
"/* code headers */\n");
764 h=Typemaker2_Header_List_First(hl);
772 h=Typemaker2_Header_List_Next(h);
805 s=tb->fileNamePrivate;
809 s=tb->fileNameLibrary;
813 s=tb->fileNameProtected;
817 s=tb->fileNamePublic;
825 fprintf(f,
"#include \"%s\"\n\n", s);
829 fprintf(f,
"#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n");
839 fprintf(f,
"%s\n", s);
845 TYPEMAKER2_HEADER_LIST *hl;
849 fprintf(f,
"/* code headers */\n");
854 h=Typemaker2_Header_List_First(hl);
862 h=Typemaker2_Header_List_Next(h);
869 fprintf(f,
"#ifdef __cplusplus\n}\n#endif\n\n");
870 fprintf(f,
"#endif\n\n");
888 const char *fileName)
892 f=fopen(fileName,
"w");
901 fprintf(f,
"<?xml?>\n");
903 fprintf(f,
"<tm2>\n");
905 fprintf(f,
" <typedef id=\"%s\" type=\"pointer\" lang=\"c\" extends=\"struct_base\">\n",
911 fprintf(f,
" </typedef>\n");
912 fprintf(f,
"</tm2>\n");
929 const char *fileName)
933 f=fopen(fileName,
"w");
942 fprintf(f,
"<?xml?>\n");
944 fprintf(f,
"<tm2>\n");
946 fprintf(f,
" <typedef id=\"%s_LIST\" type=\"pointer\" lang=\"c\" extends=\"list1_base\" " 947 "basetype=\"%s\">\n",
954 fprintf(f,
" </typedef>\n");
955 fprintf(f,
"</tm2>\n");
972 const char *fileName)
976 f=fopen(fileName,
"w");
985 fprintf(f,
"<?xml?>\n");
987 fprintf(f,
"<tm2>\n");
989 fprintf(f,
" <typedef id=\"%s_LIST2\" type=\"pointer\" lang=\"c\" extends=\"list2_base\" " 990 "basetype=\"%s\">\n",
997 fprintf(f,
" </typedef>\n");
998 fprintf(f,
"</tm2>\n");
1015 const char *fileName)
1019 f=fopen(fileName,
"w");
1028 fprintf(f,
"<?xml?>\n");
1030 fprintf(f,
"<tm2>\n");
1032 fprintf(f,
" <typedef id=\"%s_TREE\" type=\"pointer\" lang=\"c\" extends=\"tree_base\" " 1033 "basetype=\"%s\">\n",
1040 fprintf(f,
" </typedef>\n");
1041 fprintf(f,
"</tm2>\n");
1058 const char *fileName)
1062 f=fopen(fileName,
"w");
1071 fprintf(f,
"<?xml?>\n");
1073 fprintf(f,
"<tm2>\n");
1075 fprintf(f,
" <typedef id=\"%s_TREE2\" type=\"pointer\" lang=\"c\" extends=\"tree_base\" " 1076 "basetype=\"%s\">\n",
1083 fprintf(f,
" </typedef>\n");
1084 fprintf(f,
"</tm2>\n");
1101 const char *fileName)
1105 f=fopen(fileName,
"w");
1114 fprintf(f,
"<?xml?>\n");
1116 fprintf(f,
"<tm2>\n");
1118 fprintf(f,
" <typedef id=\"%s_IDMAP\" type=\"pointer\" lang=\"c\" extends=\"idmap_base\" " 1119 "basetype=\"%s\">\n",
1126 fprintf(f,
" </typedef>\n");
1127 fprintf(f,
"</tm2>\n");
1149 fname=tb->fileNamePublic;
1150 if (fname==
NULL || *fname==0) {
1156 if (s==
NULL || *s==0) {
1158 if (s==
NULL || *s==0) {
1164 if (tb->destFolder) {
1182 fname=tb->fileNameLibrary;
1183 if (fname==
NULL || *fname==0) {
1189 if (s==
NULL || *s==0) {
1191 if (s==
NULL || *s==0) {
1197 if (tb->destFolder) {
1215 fname=tb->fileNameProtected;
1216 if (fname==
NULL || *fname==0) {
1222 if (s==
NULL || *s==0) {
1224 if (s==
NULL || *s==0) {
1230 if (tb->destFolder) {
1248 fname=tb->fileNamePrivate;
1249 if (fname==
NULL || *fname==0) {
1255 if (s==
NULL || *s==0) {
1257 if (s==
NULL || *s==0) {
1263 if (tb->destFolder) {
1281 fname=tb->fileNameCode;
1282 if (fname==
NULL || *fname==0) {
1288 if (s==
NULL || *s==0) {
1290 if (s==
NULL || *s==0) {
1296 if (tb->destFolder) {
1331 fname=tb->fileNamePublic;
1343 fname=tb->fileNameLibrary;
1355 fname=tb->fileNameProtected;
1367 fname=tb->fileNamePrivate;
1379 fname=tb->fileNameCode;
1399 if (s==
NULL || *s==0) {
1404 if (tb->destFolder) {
1431 if (s==
NULL || *s==0) {
1436 if (tb->destFolder) {
1463 if (s==
NULL || *s==0) {
1468 if (tb->destFolder) {
1495 if (s==
NULL || *s==0) {
1500 if (tb->destFolder) {
1527 if (s==
NULL || *s==0) {
1532 if (tb->destFolder) {
1559 if (s==
NULL || *s==0) {
1564 if (tb->destFolder) {
#define TYPEMAKER2_TYPEFLAGS_WITH_TREE2
TYPEMAKER2_TYPEMANAGER * Typemaker2_Builder_GetTypeManager(const TYPEMAKER2_BUILDER *tb)
#define INVOKE_FN(macro_var1)
void Typemaker2_Builder_SetFileNameProtected(TYPEMAKER2_BUILDER *tb, const char *s)
void Typemaker2_Builder_SetSourceFileName(TYPEMAKER2_BUILDER *tb, const char *s)
void Typemaker2_Builder_SetBuildFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_BUILDER_BUILD_FN fn)
TYPEMAKER2_TYPE * Typemaker2_Member_GetTypePtr(const TYPEMAKER2_MEMBER *tm)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
uint32_t Typemaker2_Member_GetFlags(const TYPEMAKER2_MEMBER *tm)
const char * Typemaker2_Enum_GetFromStringFn(const TYPEMAKER2_ENUM *p_struct)
#define GWEN_DB_FLAGS_OVERWRITE_VARS
void Typemaker2_Builder_SetFileNameCode(TYPEMAKER2_BUILDER *tb, const char *s)
struct GWEN_DB_NODE GWEN_DB_NODE
#define GWEN_INHERIT_FINI(t, element)
GWEN_STRINGLIST * Typemaker2_Builder_GetProtectedDeclarations(const TYPEMAKER2_BUILDER *tb)
int Typemaker2_Builder_WriteTypedefFile_IdMap(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
#define GWEN_DIR_SEPARATOR_S
const char * Typemaker2_Builder_GetFileNamePrivate(const TYPEMAKER2_BUILDER *tb)
TYPEMAKER2_HEADER_LIST * Typemaker2_Type_GetHeaders(const TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Member_GetFieldId(const TYPEMAKER2_MEMBER *tm)
int(* TYPEMAKER2_BUILDER_BUILD_FN)(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
TYPEMAKER2_ENUM * Typemaker2_Member_GetEnumPtr(const TYPEMAKER2_MEMBER *tm)
void Typemaker2_Builder_SetFileNameLibrary(TYPEMAKER2_BUILDER *tb, const char *s)
#define GWEN_FREE_OBJECT(varname)
void Typemaker2_Builder_free(TYPEMAKER2_BUILDER *tb)
int Typemaker2_Builder_DetermineOutFileNames(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
TYPEMAKER2_TYPE * Typemaker2_Type_GetBaseTypePtr(const TYPEMAKER2_TYPE *ty)
#define TYPEMAKER2_BUILDER_WRITEFILE_FLAGS_WRITE_TYPE
int Typemaker2_Builder_WriteTypedefFile_List1(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
void Typemaker2_Builder_SetTypeManager(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPEMANAGER *tm)
int Typemaker2_Builder_WriteTypedefFile(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
struct TYPEMAKER2_ENUM TYPEMAKER2_ENUM
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
int Typemaker2_Member_GetMaxLen(const TYPEMAKER2_MEMBER *tm)
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
void Typemaker2_Builder_SetDestFolderName(TYPEMAKER2_BUILDER *tb, const char *s)
void Typemaker2_Builder_AddPrivateDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
void Typemaker2_Builder_SetFileNamePrivate(TYPEMAKER2_BUILDER *tb, const char *s)
int Typemaker2_Builder_ReplaceVars(const char *s, GWEN_DB_NODE *db, GWEN_BUFFER *dbuf)
static void addMemberInfoToCallDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_DB_NODE *db, int withTypePrefix)
const char * Typemaker2_Member_GetPresetValue(const TYPEMAKER2_MEMBER *tm)
#define GWEN_ERROR_BAD_DATA
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
const char * Typemaker2_Builder_GetFileNameLibrary(const TYPEMAKER2_BUILDER *tb)
#define GWEN_NEW_OBJECT(typ, varname)
int Typemaker2_Builder_Build(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Builder_GetFileNamePublic(const TYPEMAKER2_BUILDER *tb)
const char * Typemaker2_Builder_GetSourceFileName(const TYPEMAKER2_BUILDER *tb)
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
GWEN_STRINGLIST * Typemaker2_Builder_GetPrivateDeclarations(const TYPEMAKER2_BUILDER *tb)
const char * Typemaker2_Type_GetIdentifier(const TYPEMAKER2_TYPE *ty)
void Typemaker2_Builder_AddProtectedDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
#define TYPEMAKER2_TYPEFLAGS_WITH_TREE
const char * Typemaker2_Builder_GetFileNameProtected(const TYPEMAKER2_BUILDER *tb)
int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c)
const char * GWEN_DB_GetCharValue(GWEN_DB_NODE *n, const char *path, int idx, const char *defVal)
int Typemaker2_Builder_WriteTypedefFile_Tree(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
#define GWEN_INHERIT_INIT(t, element)
struct TYPEMAKER2_BUILDER TYPEMAKER2_BUILDER
#define TYPEMAKER2_FLAGS_ENUM
TYPEMAKER2_MEMBER_LIST * Typemaker2_Type_GetMembers(const TYPEMAKER2_TYPE *ty)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
const char * Typemaker2_Type_GetName(const TYPEMAKER2_TYPE *ty)
int Typemaker2_Builder_WriteFile(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName, GWEN_STRINGLIST *sl, int acc)
const char * Typemaker2_Member_GetDefaultValue(const TYPEMAKER2_MEMBER *tm)
void Typemaker2_Builder_AddCode(TYPEMAKER2_BUILDER *tb, const char *s)
const char * Typemaker2_Builder_GetFileNameCode(const TYPEMAKER2_BUILDER *tb)
unsigned int GWEN_StringList_Count(const GWEN_STRINGLIST *sl)
#define DBG_ERROR(dbg_logger, format, args...)
struct TYPEMAKER2_TYPE TYPEMAKER2_TYPE
void Typemaker2_Builder_AddPublicDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
int Typemaker2_Builder_WriteTypedefFile_List2(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
#define TYPEMAKER2_TYPEFLAGS_WITH_IDMAP
void Typemaker2_Builder_SetFileNamePublic(TYPEMAKER2_BUILDER *tb, const char *s)
#define GWEN_ERROR_NOT_SUPPORTED
int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
#define GWEN_DIR_SEPARATOR
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
struct TYPEMAKER2_TYPEMANAGER TYPEMAKER2_TYPEMANAGER
GWEN_STRINGLIST * Typemaker2_Builder_GetCode(const TYPEMAKER2_BUILDER *tb)
static void setCharValueWithTypePrefix(GWEN_DB_NODE *db, const char *prefix, const char *varName, const char *value)
#define DBG_INFO(dbg_logger, format, args...)
void Typemaker2_Builder_AddLibraryDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
const char * Typemaker2_Builder_GetDestFolderName(const TYPEMAKER2_BUILDER *tb)
const char * Typemaker2_Type_GetPrefix(const TYPEMAKER2_TYPE *ty)
TYPEMAKER2_BUILDER * Typemaker2_Builder_new()
const char * Typemaker2_TypeManager_GetApiDeclaration(const TYPEMAKER2_TYPEMANAGER *tym)
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
GWEN_STRINGLIST * Typemaker2_Builder_GetPublicDeclarations(const TYPEMAKER2_BUILDER *tb)
GWEN_STRINGLIST * Typemaker2_Builder_GetLibraryDeclarations(const TYPEMAKER2_BUILDER *tb)
struct TYPEMAKER2_MEMBER TYPEMAKER2_MEMBER
const char * Typemaker2_Enum_GetToStringFn(const TYPEMAKER2_ENUM *p_struct)
int Typemaker2_Builder_WriteTypedefFile_Tree2(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
const char * Typemaker2_Member_GetElementName(const TYPEMAKER2_MEMBER *tm)
GWEN_STRINGLIST * GWEN_StringList_new(void)
uint32_t Typemaker2_Type_GetFlags(const TYPEMAKER2_TYPE *ty)
#define TYPEMAKER2_TYPEFLAGS_WITH_LIST2
const char * Typemaker2_Member_GetName(const TYPEMAKER2_MEMBER *tm)
#define TYPEMAKER2_BUILDER_WRITEFILE_FLAGS_WRITE_DEFS
#define GWEN_INHERIT_FUNCTIONS(t)
#define TYPEMAKER2_FLAGS_VOLATILE
int Typemaker2_Builder_WriteFiles(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, uint32_t writeFlags)
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
const char * Typemaker2_Type_GetBaseFileName(const TYPEMAKER2_TYPE *ty)
GWEN_DB_NODE * Typemaker2_Builder_CreateDbForCall(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst)
#define TYPEMAKER2_TYPEFLAGS_WITH_LIST1