static int maincsm_onmessage(CSM_RAM *data, GBS_MSG *msg) { MAIN_CSM *csm=(MAIN_CSM*)data; if ((msg->msg==MSG_GUI_DESTROYED)&&((int)msg->data0==csm->gui_id)) { csm->csm.state=-3; } if(msg->msg == MSG_RECONFIGURE_REQ) { char *successed_conf_name=GetConfigName (); if (strncasecmp(successed_conf_name, (char *)msg->data0, strlen(successed_conf_name) ) == 0 ) { InitConfig(ELF_NAME); IsFontCfgUpdate=1; char upd_msg[128]; sprintf (upd_msg, "%s::%s", ELF_NAME, "Config updated!"); ShowMSG (1, (int)upd_msg); } } return(1); }
void *BridgeMessageSend(void *func_ptr, int type, void *packed_args) { ThreadInfo *i = (ThreadInfo*) malloc(sizeof(ThreadInfo)); i->sync = (type == NU_SYNCHRONIZED_PROC); i->loked = 1; i->ret = 0; if(i->sync && NU_Create_Semaphore(&i->loker, "mopi", 0, NU_PRIORITY) != NU_SUCCESS) { ShowMSG(1, (int)"ProcB: Semaphore init failed"); free(i); return 0; } GBS_SendMessage(BridgeMOPI_ID, MOPI_THREAD_PROC, func_ptr, i, packed_args); switch(type) { case NU_SYNCHRONIZED_PROC: NU_Obtain_Semaphore(&i->loker, NU_SUSPEND); break; case NU_ASYNC_PROC: /* in async mode return not support */ return 0; } if(i->sync) NU_Delete_Semaphore(&i->loker); /* возвращаемое значение */ void *ret = i->ret; /* больше не нужно оно */ free(i); /* чистим стек аргументов */ free(packed_args); /* возвращаем результат выполнения */ return ret; }
void main(void) { FILE *fp; char str[128]; const char *xml_path = "0:\\Zbin\\Utilities\\mxmltest\\test.xml"; fp = fopen(xml_path, "r"); if (fp == NULL) { sprintf(str, "Can't open file: %s", xml_path); ShowMSG(1, (int)str); return; } mxml_node_t *tree = mxmlLoadFile(NULL, fp, MXML_TEXT_CALLBACK); fclose(fp); if (tree == NULL) { ShowMSG(1, (int)"mxmlLoadFile = NULL"); return; } const char *log_path = "0:\\Zbin\\Log\\mxmltest.log"; fp = fopen(log_path, "a"); if (fp == NULL) { sprintf(str, "Can't open file: %s", log_path); ShowMSG(1, (int)str); mxmlDelete(tree); return; } mxml_node_t *node = tree; mxml_node_t *next = NULL; while (node != NULL) { switch (mxmlGetType(node)) { case MXML_ELEMENT: sprintf(str, "MXML_ELEMENT = %s\n", mxmlGetElement(node)); fwrite(str, sizeof(char), strlen(str), fp); break; case MXML_TEXT: sprintf(str, "MXML_TEXT = %s\n", mxmlGetText(node, 0)); fwrite(str, sizeof(char), strlen(str), fp); break; } next = mxmlGetFirstChild(node); if (next != NULL) { node = next; } else { next = mxmlGetNextSibling(node); if (next == NULL) { next = mxmlWalkNext(node, NULL, MXML_DESCEND); } node = next; } } fclose(fp); mxmlDelete(tree); }
/* Bridge of mopi and nucleus */ void MopiBridgeMessenger() { GBS_MSG msg; if (GBS_RecActDstMessage(&msg)) { if (msg.msg == MOPI_THREAD_PROC) { if(msg.submess) { ThreadInfo *inf = (ThreadInfo *)msg.data0; uint32_t pcnt; void **args, *pret = 0, *arg_ptr = msg.data1; void *(*ptr_func)(void *, ...) = (void *(*)(void *, ...))msg.submess; /* нету параметров */ if(!arg_ptr) { ptr_func(0); pcnt = 0; } else pcnt = unpack_args(arg_ptr, &args); switch(pcnt) { case 0: pret = ptr_func(0); break; case 1: pret = ptr_func(args[0]); break; case 2: pret = ptr_func(args[0], args[1]); break; case 3: pret = ptr_func(args[0], args[1], args[2]); break; case 4: pret = ptr_func(args[0], args[1], args[2], args[3]); break; case 5: pret = ptr_func(args[0], args[1], args[2], args[3], args[4]); break; case 6: pret = ptr_func(args[0], args[1], args[2], args[3], args[4], args[5]); break; case 7: pret = ptr_func(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); break; case 8: pret = ptr_func(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); break; case 9: pret = ptr_func(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); break; case 10: pret = ptr_func(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]); break; case 11: pret = ptr_func(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10]); break; case 12: pret = ptr_func(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11]); break; default: ShowMSG(1, (int)"Bridge invalid param!"); break; } if(inf->sync) { inf->ret = pret; inf->loked = 0; NU_Release_Semaphore(&inf->loker); } else { free(arg_ptr); free(inf); } } } else { GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,msg.pid_from,msg.msg,msg.submess); } } }