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> 95 DBG_ERROR(0,
"No values in enum description for \"%s\"",
149 DBG_ERROR(0,
"No values in enum description for \"%s\"",
212 if (!doCopy && !takeOver)
243 if (strcmp(typ,
"char")==0) {
296 DBG_ERROR(0,
"Unknown \"free\" function for type \"%s\"", typ);
354 if (strcmp(typ,
"char")==0) {
378 DBG_ERROR(0,
"No dup function set for type %s", typ);
400 DBG_ERROR(0,
"Unknown \"dup\" function for type \"%s\"", typ);
426 if (strcasecmp(mode,
"list")==0 ||
427 strcasecmp(mode,
"list2")==0)
448 ", GWEN_DB_GetGroup(db, " 449 "GWEN_DB_FLAGS_DEFAULT, \"");
456 if (strcasecmp(typ,
"char")==0) {
458 " if (GWEN_DB_SetCharValue(db, " 459 "GWEN_DB_FLAGS_OVERWRITE_VARS, \"");
468 else if (strcasecmp(typ,
"GWEN_STRINGLIST")==0) {
490 " if (GWEN_DB_SetCharValue(db, " 491 "GWEN_DB_FLAGS_DEFAULT, \"");
501 else if (strcasecmp(mode,
"list")==0) {
502 const char *elemType;
503 const char *elemPrefix;
509 DBG_ERROR(0,
"No \"type\" for list type \"%s\"", typ);
515 DBG_ERROR(0,
"Undefined type %s", elemType);
520 DBG_ERROR(0,
"No \"prefix\" for type \"%s\" (within %s)",
534 " dbT=GWEN_DB_GetGroup(db, " 535 "GWEN_PATH_FLAGS_CREATE_GROUP, \"");
557 "GWEN_DB_GetGroup(dbT, " 558 "GWEN_PATH_FLAGS_CREATE_GROUP, \"");
573 else if (strcasecmp(mode,
"list2")==0) {
574 const char *elemType;
575 const char *elemPrefix;
581 DBG_ERROR(0,
"No \"type\" for list type \"%s\"", typ);
587 DBG_ERROR(0,
"Undefined type %s", elemType);
592 DBG_ERROR(0,
"No \"prefix\" for type \"%s\" (within %s)",
605 " dbT=GWEN_DB_GetGroup(db, " 606 "GWEN_PATH_FLAGS_CREATE_GROUP, \"");
641 "GWEN_DB_GetGroup(dbT, " 642 "GWEN_PATH_FLAGS_CREATE_GROUP, \"");
665 DBG_ERROR(0,
"No toDb function for type \"%s\"", typ);
674 if (strcasecmp(typ,
"char")==0)
676 else if (strcasecmp(typ,
"uint32_t")==0)
678 else if (strcasecmp(typ,
"GWEN_TYPE_UINT64")==0)
684 if (strcasecmp(btype,
"int")==0) {
686 " if (GWEN_DB_SetIntValue(db, " 687 "GWEN_DB_FLAGS_OVERWRITE_VARS, \"");
689 else if (strcasecmp(btype,
"char")==0) {
691 " if (GWEN_DB_SetCharValue(db, " 692 "GWEN_DB_FLAGS_OVERWRITE_VARS, \"");
704 if (strcasecmp(tmode,
"enum")==0) {
714 if (strcasecmp(tmode,
"enum")==0) {
747 DBG_ERROR(0,
"Bad non-pointer type \"%s\" (not a base type)", typ);
753 DBG_ERROR(0,
"Bad non-pointer type \"%s\" (not a base type)", typ);
798 if (strcasecmp(mode,
"single")!=0)
819 if (strcasecmp(typ,
"char")==0) {
835 DBG_ERROR(0,
"No fromDb function for type \"%s\"", typ);
844 if (strcasecmp(typ,
"char")==0)
846 else if (strcasecmp(typ,
"uint32_t")==0)
848 else if (strcasecmp(typ,
"GWEN_TYPE_UINT64")==0)
854 if (strcasecmp(btype,
"int")==0) {
867 else if (strcasecmp(btype,
"char")==0) {
892 if (strcasecmp(tmode,
"enum")==0) {
925 DBG_ERROR(0,
"Bad non-pointer type \"%s\" (not a base type)", typ);
989 if (strcasecmp(mode,
"single")!=0)
994 if (strcasecmp(typ,
"GWEN_STRINGLIST")==0) {
1000 else if (strcasecmp(mode,
"single")!=0) {
1009 DBG_ERROR(0,
"No new-function set for type %s", typ);
1060 const char *constName;
1078 if (constName && *constName)
1250 if (strcasecmp(tmode,
"enum")!=0)
1298 if (isPtr && isConst) {
1301 if (strcasecmp(tmode,
"enum")!=0)
1332 if (strcasecmp(mode,
"single")==0) {
1333 if (strcasecmp(typ,
"char")==0)
1360 DBG_ERROR(0,
"Properties: CONST but not COPY");
1386 if (strcasecmp(typ,
"GWEN_STRINGLIST")==0) {
1471 const char *rettype;
1492 DBG_ERROR(0,
"No return type for function");
1497 isVoid=(!isPtr && strcasecmp(rettype,
"void")==0);
1500 if (!defret && !isVoid) {
1501 DBG_ERROR(0,
"No default return value for function %s", name);
1573 if (!aname || !*aname) {
1574 DBG_ERROR(0,
"No name for argument %d in function %s", idx, name);
1578 if (!atype || !*atype) {
1579 DBG_ERROR(0,
"No type for argument %d in function %s", idx, name);
1639 const char *listName)
1660 if (strcasecmp(mode,
"single")!=0)
1665 if (strcasecmp(mode,
"list")==0) {
1667 const char *elemType;
1668 const char *elemPrefix;
1677 DBG_ERROR(0,
"No \"type\" for list type \"%s\"", typ);
1683 DBG_ERROR(0,
"Undefined type %s", elemType);
1688 DBG_ERROR(0,
"No \"prefix\" for type \"%s\" (within %s)",
1753 else if (strcasecmp(mode,
"list2")==0) {
1755 const char *elemType;
1756 const char *elemPrefix;
1765 DBG_ERROR(0,
"No \"type\" for list type \"%s\"", typ);
1771 DBG_ERROR(0,
"Undefined type %s", elemType);
1776 DBG_ERROR(0,
"No \"prefix\" for type \"%s\" (within %s)",
1919 if (strcasecmp(mode,
"single")!=0)
1934 if (strcasecmp(mode,
"single")!=0 && !fname) {
1951 if (doCopy || takeOver) {
1989 const char *dupName;
2005 if (dupAcc && strcasecmp(dupAcc,
"none")!=0) {
2074 if (isVolatile==0) {
2193 if (isVolatile==0) {
2213 if (strcasecmp(mode,
"list")==0) {
2215 const char *elemType;
2216 const char *elemPrefix;
2225 DBG_ERROR(0,
"No \"type\" for list type \"%s\"", typ);
2231 DBG_ERROR(0,
"Undefined type %s", elemType);
2236 DBG_ERROR(0,
"No \"prefix\" for type \"%s\" (within %s)",
2250 " if (1) {/* just for local vars */");
2257 " dbT=GWEN_DB_GetGroup(db, " 2258 "GWEN_PATH_FLAGS_NAMEMUSTEXIST, \"");
2267 " dbT2=GWEN_DB_FindFirstGroup(dbT, \"");
2282 "DBG_ERROR(0, \"Bad element for type \\\"");
2286 "if (GWEN_Logger_GetLevel(0)>=" 2287 "GWEN_LoggerLevel_Debug)");
2289 "GWEN_DB_Dump(dbT2, 2);");
2305 " dbT2=GWEN_DB_FindNextGroup(dbT2, \"");
2315 else if (strcasecmp(mode,
"list2")==0) {
2317 const char *elemType;
2318 const char *elemPrefix;
2327 DBG_ERROR(0,
"No \"type\" for list type \"%s\"", typ);
2333 DBG_ERROR(0,
"Undefined type %s", elemType);
2338 DBG_ERROR(0,
"No \"prefix\" for type \"%s\" (within %s)",
2358 " dbT=GWEN_DB_GetGroup(db, " 2359 "GWEN_PATH_FLAGS_NAMEMUSTEXIST, \"");
2368 " dbT2=GWEN_DB_FindFirstGroup(dbT, \"");
2383 "DBG_ERROR(0, \"Bad element for type \\\"");
2387 "if (GWEN_Logger_GetLevel(0)>=" 2388 "GWEN_LoggerLevel_Debug)");
2390 "GWEN_DB_Dump(dbT2, 2);");
2406 "dbT2=GWEN_DB_FindNextGroup(dbT2, \"");
2416 else if (strcasecmp(typ,
"GWEN_STRINGLIST")==0) {
2442 if (strcasecmp(typ,
"char")!=0) {
2444 " if (1) { /* for local vars */");
2448 " dbT=GWEN_DB_GetGroup(db, " 2449 "GWEN_PATH_FLAGS_NAMEMUSTEXIST, \"");
2456 if (isPtr && strcasecmp(typ,
"char")!=0) {
2484 if (isPtr && strcasecmp(typ,
"char")!=0) {
2543 const char *fromDbName;
2544 const char *fromDbAcc;
2559 if (fromDbAcc && strcasecmp(fromDbAcc,
"none")!=0) {
2693 if (dupAcc && strcasecmp(dupAcc,
"none")!=0) {
2694 const char *dupName;
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)
#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)
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_freeElem_c(GWEN_UNUSED ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
int write_code_todbArg_c(GWEN_UNUSED ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
int write_code_todb_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
#define GWEN_SYNCIO_FILE_FLAGS_UREAD
int write_code_dupArg_c(GWEN_UNUSED ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *param)
int write_code_freeElems_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)
#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)
int write_code_dupList_c(GWEN_UNUSED ARGUMENTS *args, GWEN_XMLNODE *n, GWEN_SYNCIO *sio, const char *listName)
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)
int write_c_enums(GWEN_UNUSED ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
GWEN_XMLNODE * GWEN_XMLNode_GetNextTag(const GWEN_XMLNODE *n)
int write_code_fromdbArg_c(GWEN_UNUSED ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
int write_code_constrec_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
int write_code_fromdb_c(GWEN_UNUSED ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
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)
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_fromdbrec_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
int write_h_header(GWEN_UNUSED ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, GWEN_UNUSED const char *where)
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 write_code_builtin_c(GWEN_UNUSED ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio)
int GWEN_SyncIo_WriteChar(GWEN_SYNCIO *sio, char s)