17 #include "typemaker_p.h"
18 #include <gwenhywfar/debug.h>
19 #include <gwenhywfar/logger.h>
20 #include <gwenhywfar/xml.h>
21 #include <gwenhywfar/syncio_file.h>
26 #include <sys/types.h>
94 DBG_ERROR(0,
"No values in enum description for \"%s\"",
148 DBG_ERROR(0,
"No values in enum description for \"%s\"",
210 if (!doCopy && !takeOver)
232 if (strcmp(typ,
"char")==0) {
261 DBG_ERROR(0,
"Unknown \"free\" function for type \"%s\"", typ);
317 if (strcmp(typ,
"char")==0) {
332 DBG_ERROR(0,
"No dup function set for type %s", typ);
345 DBG_ERROR(0,
"Unknown \"dup\" function for type \"%s\"", typ);
370 if (strcasecmp(mode,
"list")==0 ||
371 strcasecmp(mode,
"list2")==0)
392 ", GWEN_DB_GetGroup(db, "
393 "GWEN_DB_FLAGS_DEFAULT, \"");
400 if (strcasecmp(typ,
"char")==0) {
402 " if (GWEN_DB_SetCharValue(db, "
403 "GWEN_DB_FLAGS_OVERWRITE_VARS, \"");
412 else if (strcasecmp(typ,
"GWEN_STRINGLIST")==0) {
434 " if (GWEN_DB_SetCharValue(db, "
435 "GWEN_DB_FLAGS_DEFAULT, \"");
445 else if (strcasecmp(mode,
"list")==0) {
446 const char *elemType;
447 const char *elemPrefix;
453 DBG_ERROR(0,
"No \"type\" for list type \"%s\"", typ);
459 DBG_ERROR(0,
"Undefined type %s", elemType);
464 DBG_ERROR(0,
"No \"prefix\" for type \"%s\" (within %s)",
478 " dbT=GWEN_DB_GetGroup(db, "
479 "GWEN_PATH_FLAGS_CREATE_GROUP, \"");
501 "GWEN_DB_GetGroup(dbT, "
502 "GWEN_PATH_FLAGS_CREATE_GROUP, \"");
517 else if (strcasecmp(mode,
"list2")==0) {
518 const char *elemType;
519 const char *elemPrefix;
525 DBG_ERROR(0,
"No \"type\" for list type \"%s\"", typ);
531 DBG_ERROR(0,
"Undefined type %s", elemType);
536 DBG_ERROR(0,
"No \"prefix\" for type \"%s\" (within %s)",
549 " dbT=GWEN_DB_GetGroup(db, "
550 "GWEN_PATH_FLAGS_CREATE_GROUP, \"");
585 "GWEN_DB_GetGroup(dbT, "
586 "GWEN_PATH_FLAGS_CREATE_GROUP, \"");
609 DBG_ERROR(0,
"No toDb function for type \"%s\"", typ);
618 if (strcasecmp(typ,
"char")==0)
620 else if (strcasecmp(typ,
"uint32_t")==0)
622 else if (strcasecmp(typ,
"GWEN_TYPE_UINT64")==0)
628 if (strcasecmp(btype,
"int")==0) {
630 " if (GWEN_DB_SetIntValue(db, "
631 "GWEN_DB_FLAGS_OVERWRITE_VARS, \"");
633 else if (strcasecmp(btype,
"char")==0) {
635 " if (GWEN_DB_SetCharValue(db, "
636 "GWEN_DB_FLAGS_OVERWRITE_VARS, \"");
648 if (strcasecmp(tmode,
"enum")==0) {
658 if (strcasecmp(tmode,
"enum")==0) {
691 DBG_ERROR(0,
"Bad non-pointer type \"%s\" (not a base type)", typ);
697 DBG_ERROR(0,
"Bad non-pointer type \"%s\" (not a base type)", typ);
741 if (strcasecmp(mode,
"single")!=0)
762 if (strcasecmp(typ,
"char")==0) {
778 DBG_ERROR(0,
"No fromDb function for type \"%s\"", typ);
787 if (strcasecmp(typ,
"char")==0)
789 else if (strcasecmp(typ,
"uint32_t")==0)
791 else if (strcasecmp(typ,
"GWEN_TYPE_UINT64")==0)
797 if (strcasecmp(btype,
"int")==0) {
810 else if (strcasecmp(btype,
"char")==0) {
835 if (strcasecmp(tmode,
"enum")==0) {
868 DBG_ERROR(0,
"Bad non-pointer type \"%s\" (not a base type)", typ);
931 if (strcasecmp(mode,
"single")!=0)
936 if (strcasecmp(typ,
"GWEN_STRINGLIST")==0) {
942 else if (strcasecmp(mode,
"single")!=0) {
951 DBG_ERROR(0,
"No new-function set for type %s", typ);
1001 const char *constName;
1019 if (constName && *constName)
1189 if (strcasecmp(tmode,
"enum")!=0)
1237 if (isPtr && isConst) {
1240 if (strcasecmp(tmode,
"enum")!=0)
1271 if (strcasecmp(mode,
"single")==0) {
1272 if (strcasecmp(typ,
"char")==0)
1299 DBG_ERROR(0,
"Properties: CONST but not COPY");
1325 if (strcasecmp(typ,
"GWEN_STRINGLIST")==0) {
1410 const char *rettype;
1431 DBG_ERROR(0,
"No return type for function");
1436 isVoid=(!isPtr && strcasecmp(rettype,
"void")==0);
1439 if (!defret && !isVoid) {
1440 DBG_ERROR(0,
"No default return value for function %s", name);
1512 if (!aname || !*aname) {
1513 DBG_ERROR(0,
"No name for argument %d in function %s", idx, name);
1517 if (!atype || !*atype) {
1518 DBG_ERROR(0,
"No type for argument %d in function %s", idx, name);
1578 const char *listName) {
1598 if (strcasecmp(mode,
"single")!=0)
1603 if (strcasecmp(mode,
"list")==0) {
1605 const char *elemType;
1606 const char *elemPrefix;
1615 DBG_ERROR(0,
"No \"type\" for list type \"%s\"", typ);
1621 DBG_ERROR(0,
"Undefined type %s", elemType);
1626 DBG_ERROR(0,
"No \"prefix\" for type \"%s\" (within %s)",
1691 else if (strcasecmp(mode,
"list2")==0) {
1693 const char *elemType;
1694 const char *elemPrefix;
1703 DBG_ERROR(0,
"No \"type\" for list type \"%s\"", typ);
1709 DBG_ERROR(0,
"Undefined type %s", elemType);
1714 DBG_ERROR(0,
"No \"prefix\" for type \"%s\" (within %s)",
1856 if (strcasecmp(mode,
"single")!=0)
1871 if (strcasecmp(mode,
"single")!=0 && !fname) {
1888 if (doCopy || takeOver) {
1925 const char *dupName;
1941 if (dupAcc && strcasecmp(dupAcc,
"none")!=0) {
2009 if (isVolatile==0) {
2126 if (isVolatile==0) {
2146 if (strcasecmp(mode,
"list")==0) {
2148 const char *elemType;
2149 const char *elemPrefix;
2158 DBG_ERROR(0,
"No \"type\" for list type \"%s\"", typ);
2164 DBG_ERROR(0,
"Undefined type %s", elemType);
2169 DBG_ERROR(0,
"No \"prefix\" for type \"%s\" (within %s)",
2183 " if (1) {/* just for local vars */");
2190 " dbT=GWEN_DB_GetGroup(db, "
2191 "GWEN_PATH_FLAGS_NAMEMUSTEXIST, \"");
2200 " dbT2=GWEN_DB_FindFirstGroup(dbT, \"");
2215 "DBG_ERROR(0, \"Bad element for type \\\"");
2219 "if (GWEN_Logger_GetLevel(0)>="
2220 "GWEN_LoggerLevel_Debug)");
2222 "GWEN_DB_Dump(dbT2, 2);");
2238 " dbT2=GWEN_DB_FindNextGroup(dbT2, \"");
2248 else if (strcasecmp(mode,
"list2")==0) {
2250 const char *elemType;
2251 const char *elemPrefix;
2260 DBG_ERROR(0,
"No \"type\" for list type \"%s\"", typ);
2266 DBG_ERROR(0,
"Undefined type %s", elemType);
2271 DBG_ERROR(0,
"No \"prefix\" for type \"%s\" (within %s)",
2291 " dbT=GWEN_DB_GetGroup(db, "
2292 "GWEN_PATH_FLAGS_NAMEMUSTEXIST, \"");
2301 " dbT2=GWEN_DB_FindFirstGroup(dbT, \"");
2316 "DBG_ERROR(0, \"Bad element for type \\\"");
2320 "if (GWEN_Logger_GetLevel(0)>="
2321 "GWEN_LoggerLevel_Debug)");
2323 "GWEN_DB_Dump(dbT2, 2);");
2339 "dbT2=GWEN_DB_FindNextGroup(dbT2, \"");
2349 else if (strcasecmp(typ,
"GWEN_STRINGLIST")==0) {
2375 if (strcasecmp(typ,
"char")!=0) {
2377 " if (1) { /* for local vars */");
2381 " dbT=GWEN_DB_GetGroup(db, "
2382 "GWEN_PATH_FLAGS_NAMEMUSTEXIST, \"");
2389 if (isPtr && strcasecmp(typ,
"char")!=0) {
2417 if (isPtr && strcasecmp(typ,
"char")!=0) {
2474 const char *fromDbName;
2475 const char *fromDbAcc;
2490 if (fromDbAcc && strcasecmp(fromDbAcc,
"none")!=0) {
2623 if (dupAcc && strcasecmp(dupAcc,
"none")!=0) {
2624 const char *dupName;
int write_c_enums(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
int write_h_header(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *where)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
int write_code_setget_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
int GWEN_SyncIo_Connect(GWEN_SYNCIO *sio)
int write_code_dupList_c(ARGUMENTS *args, GWEN_XMLNODE *n, GWEN_SYNCIO *sio, const char *listName)
#define GWEN_SYNCIO_FILE_FLAGS_WRITE
#define GWEN_SYNCIO_FILE_FLAGS_READ
const char * GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n, const char *name, const char *defaultValue)
int write_code_dupArg_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *param)
GWEN_XMLNODE * GWEN_XMLNode_FindNextTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
GWEN_XMLNODE * GWEN_XMLNode_GetFirstData(const GWEN_XMLNODE *n)
int write_code_todb_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
#define GWEN_SYNCIO_FILE_FLAGS_UREAD
int write_code_freeElems_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
int write_code_fromdb_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
#define DBG_ERROR_ERR(dbg_logger, dbg_err)
uint32_t GWEN_Buffer_GetPos(const GWEN_BUFFER *bf)
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
int write_code_todbArg_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
#define GWEN_SYNCIO_FILE_FLAGS_GREAD
int GWEN_SyncIo_WriteLine(GWEN_SYNCIO *sio, const char *s)
int write_code_readdb_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
GWEN_XMLNODE * GWEN_XMLNode_FindFirstTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
int write_code_todbrec_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
GWEN_XMLNODE * get_typedef(GWEN_XMLNODE *node, const char *name)
struct GWEN_SYNCIO GWEN_SYNCIO
GWEN_XMLNODE_TYPE GWEN_XMLNode_GetType(const GWEN_XMLNODE *n)
const char * get_struct_property(GWEN_XMLNODE *node, const char *pname, const char *defval)
GWEN_XMLNODE * GWEN_XMLNode_GetNextTag(const GWEN_XMLNODE *n)
int write_code_constrec_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
int write_code_builtin_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
#define GWEN_SYNCIO_FILE_FLAGS_GWRITE
int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c)
#define GWEN_SYNCIO_FILE_FLAGS_UWRITE
void GWEN_Buffer_free(GWEN_BUFFER *bf)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
void GWEN_SyncIo_free(GWEN_SYNCIO *sio)
const char * get_property(GWEN_XMLNODE *node, const char *pname, const char *defval)
void GWEN_SyncIo_AddFlags(GWEN_SYNCIO *sio, uint32_t fl)
int GWEN_Buffer_Crop(GWEN_BUFFER *bf, uint32_t pos, uint32_t l)
int write_code_file_c(ARGUMENTS *args, GWEN_XMLNODE *node)
#define DBG_ERROR(dbg_logger, format, args...)
GWEN_XMLNODE * GWEN_XMLNode_GetFirstTag(const GWEN_XMLNODE *n)
int GWEN_SyncIo_WriteString(GWEN_SYNCIO *sio, const char *s)
const char * GWEN_XMLNode_GetData(const GWEN_XMLNODE *n)
int GWEN_Buffer_SetPos(GWEN_BUFFER *bf, uint32_t i)
int GWEN_SyncIo_Disconnect(GWEN_SYNCIO *sio)
int write_code_const_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
int write_code_dest_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
const char * get_function_name(GWEN_XMLNODE *node, const char *ftype)
int write_code_files_c(ARGUMENTS *args, GWEN_XMLNODE *node)
int write_code_freeElem_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
GWENHYWFAR_API GWEN_SYNCIO * GWEN_SyncIo_File_new(const char *path, GWEN_SYNCIO_FILE_CREATIONMODE cm)
int write_code_dup_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
int write_code_fromdbArg_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
int write_code_fromdbrec_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
struct GWEN__XMLNODE GWEN_XMLNODE
int write_code_duprec_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
int GWEN_SyncIo_WriteChar(GWEN_SYNCIO *sio, char s)