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;
215 return tb->fileNamePublic;
223 free(tb->fileNamePublic);
225 tb->fileNamePublic=strdup(s);
227 tb->fileNamePublic=
NULL;
235 return tb->fileNameLibrary;
243 free(tb->fileNameLibrary);
245 tb->fileNameLibrary=strdup(s);
247 tb->fileNameLibrary=
NULL;
255 return tb->fileNameProtected;
263 free(tb->fileNameProtected);
265 tb->fileNameProtected=strdup(s);
267 tb->fileNameProtected=
NULL;
275 return tb->fileNamePrivate;
283 free(tb->fileNamePrivate);
285 tb->fileNamePrivate=strdup(s);
287 tb->fileNamePrivate=
NULL;
295 return tb->fileNameCode;
303 free(tb->fileNameCode);
305 tb->fileNameCode=strdup(s);
307 tb->fileNameCode=
NULL;
315 return tb->sourceFileName;
323 free(tb->sourceFileName);
325 tb->sourceFileName=strdup(s);
327 tb->sourceFileName=
NULL;
335 return tb->destFolder;
343 free(tb->destFolder);
345 tb->destFolder=strdup(s);
364 return tb->buildFn(tb, ty);
382 if (tb->typeManager) {
393 TYPEMAKER2_MEMBER_LIST *tml;
418 tmm=Typemaker2_Member_List_First(tml);
422 tmm=Typemaker2_Member_List_Next(tmm);
455 const char *prefix=
NULL;
530 if (prefix && *prefix) {
565 while (*p && *p!=
')')
581 name=(
char *) malloc(len+1);
583 memmove(name, pStart, len);
616 while (*p && *p!=
'#') {
627 if (tolower(p[1])==
'n') {
631 else if (tolower(p[1])==
't') {
635 else if (tolower(p[1])==
'\\') {
657#define INVOKE_FN(macro_var1) \
658 int Typemaker2_Builder_Invoke_##macro_var1##Fn(TYPEMAKER2_BUILDER *tb, \
659 TYPEMAKER2_TYPE *ty, \
660 TYPEMAKER2_MEMBER *tm, \
663 GWEN_BUFFER *dbuf) { \
665 TYPEMAKER2_TYPE *mty; \
666 TYPEMAKER2_CODE *tc; \
667 const char *s=NULL; \
669 mty=Typemaker2_Member_GetTypePtr(tm); \
671 DBG_ERROR(GWEN_LOGDOMAIN, "No type pointer for member"); \
672 return GWEN_ERROR_NO_DATA; \
674 tc=Typemaker2_Type_FindCodeForMember(mty, tm, __STRING(macro_var1));\
676 s=Typemaker2_Code_GetCode(tc); \
681 db=Typemaker2_Builder_CreateDbForCall(tb, ty, tm, src, dst); \
683 DBG_INFO(GWEN_LOGDOMAIN, "here"); \
684 return GWEN_ERROR_BAD_DATA; \
688 GWEN_Buffer_AppendString(dbuf, "/* function \""); \
689 GWEN_Buffer_AppendString(dbuf, __STRING(macro_var1)); \
690 GWEN_Buffer_AppendString(dbuf, "\" of type \""); \
691 GWEN_Buffer_AppendString(dbuf, Typemaker2_Type_GetName(mty)); \
692 GWEN_Buffer_AppendString(dbuf, "\" */\n"); \
694 rv=Typemaker2_Builder_ReplaceVars(s, db, dbuf); \
695 GWEN_DB_Group_free(db); \
697 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); \
703 DBG_INFO(GWEN_LOGDOMAIN, "No code for type [%s]", \
704 Typemaker2_Type_GetName(mty)); \
709 DBG_ERROR(GWEN_LOGDOMAIN, "No member information"); \
710 return GWEN_ERROR_NO_DATA; \
733 const char *fileName,
740 f=fopen(fileName,
"w");
750 "/**********************************************************\n"
751 " * This file has been automatically created by \"typemaker2\"\n"
752 " * from the file \"%s\".\n"
753 " * Please do not edit this file, all changes will be lost.\n"
754 " * Better edit the mentioned source file instead.\n"
755 " **********************************************************/\n"
761 TYPEMAKER2_HEADER_LIST *hl;
763 fprintf(f,
"#ifdef HAVE_CONFIG_H\n# include <config.h>\n#endif\n\n");
765 s=tb->fileNamePrivate;
767 s=tb->fileNameLibrary;
769 s=tb->fileNameProtected;
771 s=tb->fileNamePublic;
773 fprintf(f,
"#include \"%s\"\n\n", s);
777 fprintf(f,
"#include <gwenhywfar/misc.h>\n");
778 fprintf(f,
"#include <gwenhywfar/debug.h>\n");
782 fprintf(f,
"/* code headers */\n");
787 h=Typemaker2_Header_List_First(hl);
795 h=Typemaker2_Header_List_Next(h);
828 s=tb->fileNamePrivate;
832 s=tb->fileNameLibrary;
836 s=tb->fileNameProtected;
840 s=tb->fileNamePublic;
848 fprintf(f,
"#include \"%s\"\n\n", s);
852 fprintf(f,
"#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n");
862 fprintf(f,
"%s\n", s);
868 TYPEMAKER2_HEADER_LIST *hl;
872 fprintf(f,
"/* code headers */\n");
877 h=Typemaker2_Header_List_First(hl);
885 h=Typemaker2_Header_List_Next(h);
892 fprintf(f,
"#ifdef __cplusplus\n}\n#endif\n\n");
893 fprintf(f,
"#endif\n\n");
911 const char *fileName)
915 f=fopen(fileName,
"w");
924 fprintf(f,
"<?xml?>\n");
926 fprintf(f,
"<tm2>\n");
928 fprintf(f,
" <typedef id=\"%s\" type=\"pointer\" lang=\"c\" extends=\"struct_base\">\n",
934 fprintf(f,
" </typedef>\n");
935 fprintf(f,
"</tm2>\n");
952 const char *fileName)
956 f=fopen(fileName,
"w");
965 fprintf(f,
"<?xml?>\n");
967 fprintf(f,
"<tm2>\n");
969 fprintf(f,
" <typedef id=\"%s_LIST\" type=\"pointer\" lang=\"c\" extends=\"list1_base\" "
970 "basetype=\"%s\">\n",
977 fprintf(f,
" </typedef>\n");
978 fprintf(f,
"</tm2>\n");
995 const char *fileName)
999 f=fopen(fileName,
"w");
1008 fprintf(f,
"<?xml?>\n");
1010 fprintf(f,
"<tm2>\n");
1012 fprintf(f,
" <typedef id=\"%s_LIST2\" type=\"pointer\" lang=\"c\" extends=\"list2_base\" "
1013 "basetype=\"%s\">\n",
1020 fprintf(f,
" </typedef>\n");
1021 fprintf(f,
"</tm2>\n");
1038 const char *fileName)
1042 f=fopen(fileName,
"w");
1051 fprintf(f,
"<?xml?>\n");
1053 fprintf(f,
"<tm2>\n");
1055 fprintf(f,
" <typedef id=\"%s_TREE\" type=\"pointer\" lang=\"c\" extends=\"tree_base\" "
1056 "basetype=\"%s\">\n",
1063 fprintf(f,
" </typedef>\n");
1064 fprintf(f,
"</tm2>\n");
1081 const char *fileName)
1085 f=fopen(fileName,
"w");
1094 fprintf(f,
"<?xml?>\n");
1096 fprintf(f,
"<tm2>\n");
1098 fprintf(f,
" <typedef id=\"%s_TREE2\" type=\"pointer\" lang=\"c\" extends=\"tree_base\" "
1099 "basetype=\"%s\">\n",
1106 fprintf(f,
" </typedef>\n");
1107 fprintf(f,
"</tm2>\n");
1124 const char *fileName)
1128 f=fopen(fileName,
"w");
1137 fprintf(f,
"<?xml?>\n");
1139 fprintf(f,
"<tm2>\n");
1141 fprintf(f,
" <typedef id=\"%s_IDMAP\" type=\"pointer\" lang=\"c\" extends=\"idmap_base\" "
1142 "basetype=\"%s\">\n",
1149 fprintf(f,
" </typedef>\n");
1150 fprintf(f,
"</tm2>\n");
1172 fname=tb->fileNamePublic;
1173 if (fname==
NULL || *fname==0) {
1179 if (s==
NULL || *s==0) {
1181 if (s==
NULL || *s==0) {
1187 if (tb->destFolder) {
1205 fname=tb->fileNameLibrary;
1206 if (fname==
NULL || *fname==0) {
1212 if (s==
NULL || *s==0) {
1214 if (s==
NULL || *s==0) {
1220 if (tb->destFolder) {
1238 fname=tb->fileNameProtected;
1239 if (fname==
NULL || *fname==0) {
1245 if (s==
NULL || *s==0) {
1247 if (s==
NULL || *s==0) {
1253 if (tb->destFolder) {
1271 fname=tb->fileNamePrivate;
1272 if (fname==
NULL || *fname==0) {
1278 if (s==
NULL || *s==0) {
1280 if (s==
NULL || *s==0) {
1286 if (tb->destFolder) {
1304 fname=tb->fileNameCode;
1305 if (fname==
NULL || *fname==0) {
1311 if (s==
NULL || *s==0) {
1313 if (s==
NULL || *s==0) {
1319 if (tb->destFolder) {
1354 fname=tb->fileNamePublic;
1366 fname=tb->fileNameLibrary;
1378 fname=tb->fileNameProtected;
1390 fname=tb->fileNamePrivate;
1402 fname=tb->fileNameCode;
1422 if (s==
NULL || *s==0) {
1427 if (tb->destFolder) {
1454 if (s==
NULL || *s==0) {
1459 if (tb->destFolder) {
1486 if (s==
NULL || *s==0) {
1491 if (tb->destFolder) {
1518 if (s==
NULL || *s==0) {
1523 if (tb->destFolder) {
1550 if (s==
NULL || *s==0) {
1555 if (tb->destFolder) {
1582 if (s==
NULL || *s==0) {
1587 if (tb->destFolder) {
1624 fprintf(stdout,
"%s\n", tb->fileNamePublic);
1627 fprintf(stdout,
"%s\n", tb->fileNameLibrary);
1630 fprintf(stdout,
"%s\n", tb->fileNameProtected);
1633 fprintf(stdout,
"%s\n", tb->fileNamePrivate);
1636 fprintf(stdout,
"%s\n", tb->fileNameCode);
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
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)
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
#define GWEN_DB_FLAGS_OVERWRITE_VARS
struct GWEN_DB_NODE GWEN_DB_NODE
#define DBG_INFO(dbg_logger, format, args...)
#define DBG_ERROR(dbg_logger, format, args...)
#define GWEN_ERROR_BAD_DATA
#define GWEN_ERROR_NOT_SUPPORTED
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
#define GWEN_DIR_SEPARATOR_S
#define GWEN_DIR_SEPARATOR
#define GWEN_INHERIT_FUNCTIONS(t)
#define GWEN_INHERIT_INIT(t, element)
#define GWEN_INHERIT_FINI(t, element)
#define GWEN_FREE_OBJECT(varname)
#define GWEN_NEW_OBJECT(typ, varname)
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
unsigned int GWEN_StringList_Count(const GWEN_STRINGLIST *sl)
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
GWEN_STRINGLIST * GWEN_StringList_new(void)
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
void Typemaker2_Builder_SetSourceFileName(TYPEMAKER2_BUILDER *tb, const char *s)
int Typemaker2_Builder_PrintFileNames(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
GWEN_STRINGLIST * Typemaker2_Builder_GetProtectedDeclarations(const TYPEMAKER2_BUILDER *tb)
int Typemaker2_Builder_WriteTypedefFile_Tree2(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
static void setCharValueWithTypePrefix(GWEN_DB_NODE *db, const char *prefix, const char *varName, const char *value)
int Typemaker2_Builder_DetermineOutFileNames(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
void Typemaker2_Builder_SetTypeManager(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPEMANAGER *tm)
GWEN_STRINGLIST * Typemaker2_Builder_GetPrivateDeclarations(const TYPEMAKER2_BUILDER *tb)
#define INVOKE_FN(macro_var1)
TYPEMAKER2_BUILDER * Typemaker2_Builder_new()
void Typemaker2_Builder_SetFileNameProtected(TYPEMAKER2_BUILDER *tb, const char *s)
void Typemaker2_Builder_AddCode(TYPEMAKER2_BUILDER *tb, const char *s)
int Typemaker2_Builder_WriteTypedefFile_List2(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
void Typemaker2_Builder_free(TYPEMAKER2_BUILDER *tb)
void Typemaker2_Builder_AddPublicDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
int Typemaker2_Builder_WriteTypedefFile_IdMap(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
void Typemaker2_Builder_SetDestFolderName(TYPEMAKER2_BUILDER *tb, const char *s)
const char * Typemaker2_Builder_GetFileNamePublic(const TYPEMAKER2_BUILDER *tb)
const char * Typemaker2_Builder_GetFileNameCode(const TYPEMAKER2_BUILDER *tb)
int Typemaker2_Builder_WriteFile(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName, GWEN_STRINGLIST *sl, int acc)
int Typemaker2_Builder_ReplaceVars(const char *s, GWEN_DB_NODE *db, GWEN_BUFFER *dbuf)
void Typemaker2_Builder_SetFileNamePublic(TYPEMAKER2_BUILDER *tb, const char *s)
void Typemaker2_Builder_AddLibraryDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
GWEN_DB_NODE * Typemaker2_Builder_CreateDbForCall(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst)
void Typemaker2_Builder_AddProtectedDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
const char * Typemaker2_Builder_GetSourceFileName(const TYPEMAKER2_BUILDER *tb)
void Typemaker2_Builder_SetFileNamePrivate(TYPEMAKER2_BUILDER *tb, const char *s)
const char * Typemaker2_Builder_GetFileNamePrivate(const TYPEMAKER2_BUILDER *tb)
GWEN_STRINGLIST * Typemaker2_Builder_GetPublicDeclarations(const TYPEMAKER2_BUILDER *tb)
void Typemaker2_Builder_AddDeclaration(TYPEMAKER2_BUILDER *tb, int access, const char *s)
const char * Typemaker2_Builder_GetDestFolderName(const TYPEMAKER2_BUILDER *tb)
void Typemaker2_Builder_SetBuildFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_BUILDER_BUILD_FN fn)
int Typemaker2_Builder_WriteTypedefFile_Tree(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
const char * Typemaker2_Builder_GetFileNameLibrary(const TYPEMAKER2_BUILDER *tb)
GWEN_STRINGLIST * Typemaker2_Builder_GetCode(const TYPEMAKER2_BUILDER *tb)
int Typemaker2_Builder_WriteTypedefFile_List1(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
int Typemaker2_Builder_Build(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
int Typemaker2_Builder_WriteTypedefFile(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName)
GWEN_STRINGLIST * Typemaker2_Builder_GetLibraryDeclarations(const TYPEMAKER2_BUILDER *tb)
void Typemaker2_Builder_AddPrivateDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
void Typemaker2_Builder_SetFileNameCode(TYPEMAKER2_BUILDER *tb, const char *s)
TYPEMAKER2_TYPEMANAGER * Typemaker2_Builder_GetTypeManager(const TYPEMAKER2_BUILDER *tb)
static void addMemberInfoToCallDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_DB_NODE *db, int withTypePrefix)
int Typemaker2_Builder_WriteFiles(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, uint32_t writeFlags)
void Typemaker2_Builder_SetFileNameLibrary(TYPEMAKER2_BUILDER *tb, const char *s)
const char * Typemaker2_Builder_GetFileNameProtected(const TYPEMAKER2_BUILDER *tb)
int(* TYPEMAKER2_BUILDER_BUILD_FN)(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
#define TYPEMAKER2_BUILDER_WRITEFILE_FLAGS_WRITE_DEFS
struct TYPEMAKER2_BUILDER TYPEMAKER2_BUILDER
#define TYPEMAKER2_BUILDER_WRITEFILE_FLAGS_WRITE_TYPE
const char * Typemaker2_Enum_GetToStringFn(const TYPEMAKER2_ENUM *p_struct)
const char * Typemaker2_Enum_GetFromStringFn(const TYPEMAKER2_ENUM *p_struct)
struct TYPEMAKER2_ENUM TYPEMAKER2_ENUM
const char * Typemaker2_Member_GetFieldId(const TYPEMAKER2_MEMBER *tm)
const char * Typemaker2_Member_GetDefaultValue(const TYPEMAKER2_MEMBER *tm)
TYPEMAKER2_TYPE * Typemaker2_Member_GetTypePtr(const TYPEMAKER2_MEMBER *tm)
TYPEMAKER2_ENUM * Typemaker2_Member_GetEnumPtr(const TYPEMAKER2_MEMBER *tm)
const char * Typemaker2_Member_GetPresetValue(const TYPEMAKER2_MEMBER *tm)
const char * Typemaker2_Member_GetElementName(const TYPEMAKER2_MEMBER *tm)
uint32_t Typemaker2_Member_GetFlags(const TYPEMAKER2_MEMBER *tm)
int Typemaker2_Member_GetMaxLen(const TYPEMAKER2_MEMBER *tm)
const char * Typemaker2_Member_GetName(const TYPEMAKER2_MEMBER *tm)
struct TYPEMAKER2_MEMBER TYPEMAKER2_MEMBER
TYPEMAKER2_HEADER_LIST * Typemaker2_Type_GetHeaders(const TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Type_GetIdentifier(const TYPEMAKER2_TYPE *ty)
uint32_t Typemaker2_Type_GetFlags(const TYPEMAKER2_TYPE *ty)
TYPEMAKER2_TYPE * Typemaker2_Type_GetBaseTypePtr(const TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Type_GetBaseFileName(const TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Type_GetName(const TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Type_GetPrefix(const TYPEMAKER2_TYPE *ty)
TYPEMAKER2_MEMBER_LIST * Typemaker2_Type_GetMembers(const TYPEMAKER2_TYPE *ty)
#define TYPEMAKER2_TYPEFLAGS_WITH_IDMAP
struct TYPEMAKER2_TYPE TYPEMAKER2_TYPE
#define TYPEMAKER2_TYPEFLAGS_WITH_LIST1
#define TYPEMAKER2_FLAGS_ENUM
#define TYPEMAKER2_FLAGS_VOLATILE
@ TypeMaker2_Access_Private
@ TypeMaker2_Access_Library
@ TypeMaker2_Access_Protected
@ TypeMaker2_Access_Unknown
@ TypeMaker2_Access_Public
#define TYPEMAKER2_TYPEFLAGS_WITH_LIST2
#define TYPEMAKER2_TYPEFLAGS_WITH_TREE
#define TYPEMAKER2_TYPEFLAGS_WITH_TREE2
const char * Typemaker2_TypeManager_GetApiDeclaration(const TYPEMAKER2_TYPEMANAGER *tym)
struct TYPEMAKER2_TYPEMANAGER TYPEMAKER2_TYPEMANAGER