/** * initialize module */ gboolean ui_log_init( ) { _ui = ui_builder("niftyconf-log.ui"); /* initialize loglevel combobox */ NftLoglevel i; for(i = L_MAX + 1; i < L_MIN - 1; i++) { gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT (UI("combobox")), nft_log_level_to_string(i)); } /* set combobox to current loglevel */ gtk_combo_box_set_active(GTK_COMBO_BOX(UI("combobox")), (gint) nft_log_level_get() - 1); /* register our custom logger function */ nft_log_func_register(_logger, UI("textview")); /* register prefs class for this module */ if(!nft_prefs_class_register (prefs(), "ui-log", _this_from_prefs, _this_to_prefs)) g_error("Failed to register prefs class for \"ui-log\""); return TRUE; }
/** * register "chain" prefs class (called once for initialization) */ NftResult _prefs_chain_class_register(NftPrefs * p) { if(!p) NFT_LOG_NULL(NFT_FAILURE); return nft_prefs_class_register(p, LED_CHAIN_NAME, &_prefs_to_chain, &_prefs_from_chain); }
/** * register "hardware" prefs class (called once for initialization) */ NftResult prefs_hardware_class_register(NftPrefs * p) { if(!p) NFT_LOG_NULL(NFT_FAILURE); return nft_prefs_class_register(p, LED_HARDWARE_NAME, &_prefs_to_hardware, &_prefs_from_hardware); }
/* save pointer to new object */ *newObj = &persons[i++]; return NFT_SUCCESS; } //~ /** create object from preferences definition */ int main(int argc, char *argv[]) { /* do preliminary version checks */ NFT_PREFS_CHECK_VERSION /* fail per default */ int result = EXIT_FAILURE; /* initialize libniftyprefs */ NftPrefs *prefs; if(!(prefs = nft_prefs_init())) { NFT_LOG(L_ERROR, "initialize prefs"); goto _deinit; } /* register "people" class to niftyprefs */ if(!(nft_prefs_class_register(prefs, PEOPLE_NAME, &_people_from_prefs, NULL))) { NFT_LOG(L_ERROR, "failed to register class"); goto _deinit; } /* register "person" class to niftyprefs */ if(!(nft_prefs_class_register(prefs, PERSON_NAME, &_person_from_prefs, NULL))) { NFT_LOG(L_ERROR, "failed to register class"); goto _deinit; } /* parse file to prefs node */ NftPrefsNode *node; if(!(node = nft_prefs_node_from_file("test-prefs.xml"))) { NFT_LOG(L_ERROR, "failed to parse prefs file \"test-prefs.xml\""); goto _deinit; } /* create object from node */ struct People *people; if(!(people = nft_prefs_obj_from_node(prefs, node, NULL))) { NFT_LOG(L_ERROR, "failed to create object from prefs node"); goto _deinit; } /* free node */ nft_prefs_node_free(node); /* process all persons */ size_t n; for(n=0; n < people->people_count; n++) { /* print info */ printf("\tperson(name=\"%s\",email=\"%s\", age=\"%d\", vitality=\"%s\")\n", people->people[n]->name, people->people[n]->email, people->people[n]->age, people->people[n]->alive ? "alive" : "dead"); } /* we should get what we put in */ if((strcmp(people->people[0]->name, "Bob") != 0) || (strcmp(people->people[0]->email, "*****@*****.**") != 0) || (people->people[0]->age != 30) || (people->people[0]->alive != true) || (strcmp(people->people[1]->name, "Alice") != 0) || (strcmp(people->people[1]->email, "*****@*****.**") != 0) || (people->people[1]->age != 30) || (people->people[1]->alive != false)) { NFT_LOG(L_ERROR, "Input from 01_obj-to-prefs.c doesn't match output!"); goto _deinit; } /** @todo check xml against DTD */ /* all went fine */ result = EXIT_SUCCESS; _deinit: nft_prefs_deinit(prefs); return result; }
/** some generic API "stresstests" */ int main(int argc, char *argv[]) { /* do preliminary version checks */ NFT_PREFS_CHECK_VERSION int res = EXIT_FAILURE; NftPrefs *p; if(!(p = nft_prefs_init())) goto _deinit; /* a bunch of objects */ struct Object { int n; char *name; }objs[OBJNUM]; int i; for(i=0; i < OBJNUM; i++) { objs[i].n = i; objs[i].name = "foobar"; } /* register a bunch of classes */ for(i=0; i < OBJNUM; i++) { char cName[64]; snprintf(cName, sizeof(cName), "%s.%d", objs[i].name, objs[i].n); NFT_LOG(L_DEBUG, "Registering class %d (%s)", i, cName); if(!(nft_prefs_class_register(p, cName, NULL, NULL))) goto _deinit; } //~ for(i=0; i < 1024; i++) //~ { //~ char cName[64]; //~ snprintf(cName, sizeof(cName), "%s.%d", objs[i].name, objs[i].n); //~ NFT_LOG(L_DEBUG, "Registering object %d", i); //~ if(!nft_prefs_obj_register(p, cName, &objs[i])) //~ goto _deinit; //~ } //~ for(i=0; i < 1024; i++) //~ { //~ char cName[64]; //~ snprintf(cName, sizeof(cName), "%s.%d", objs[i].name, objs[i].n); //~ NFT_LOG(L_DEBUG, "Unregistering object %d", i); //~ nft_prefs_obj_unregister(p, cName, &objs[i]); //~ } //~ for(i=0; i < 1024; i++) //~ { //~ char cName[64]; //~ snprintf(cName, sizeof(cName), "%s.%d", objs[i].name, objs[i].n); //~ NFT_LOG(L_DEBUG, "Unregistering class %d", i); //~ nft_prefs_class_unregister(p, cName); //~ } res = EXIT_SUCCESS; _deinit: nft_prefs_deinit(p); return res; }
/** * register "setup" prefs class (called once for initialization) */ NftResult _prefs_setup_class_register(NftPrefs * p) { return nft_prefs_class_register(p, LED_SETUP_NAME, &_prefs_to_setup, &_prefs_from_setup); }
int main(int argc, char *argv[]) { int result = EXIT_FAILURE; /* do preliminary version checks */ if(!NFT_PREFS_CHECK_VERSION) return EXIT_FAILURE; /* set loglevel */ nft_log_level_set(L_MAX); /* initialize libniftyprefs */ NftPrefs *prefs; if(!(prefs = nft_prefs_init(1))) { NFT_LOG(L_ERROR, "initialize prefs"); goto _deinit; } /* register "people" class to niftyprefs */ if(! (nft_prefs_class_register (prefs, PEOPLE_NAME, &_people_from_prefs, NULL))) { NFT_LOG(L_ERROR, "failed to register class"); goto _deinit; } /* register "person" class to niftyprefs */ if(! (nft_prefs_class_register (prefs, PERSON_NAME, &_person_from_prefs, NULL))) { NFT_LOG(L_ERROR, "failed to register class"); goto _deinit; } /* register updater for v0 "person" nodes */ if(!nft_prefs_updater_register(prefs, _update_person, PERSON_NAME, 0, NULL)) { NFT_LOG(L_ERROR, "failed to register updater"); goto _deinit; } /* parse file to prefs node */ NftPrefsNode *node; if(!(node = nft_prefs_node_from_file(prefs, "test-prefs.xml"))) { NFT_LOG(L_ERROR, "failed to parse prefs file \"test-prefs.xml\""); goto _deinit; } /* dump updated node to file */ if(!nft_prefs_node_to_file(prefs, node, "test-prefs_updated.xml", true)) { NFT_LOG(L_ERROR, "failed to save prefs file \"test-prefs_updated.xml\""); goto _deinit; } /* create object from node */ struct People *people; if(!(people = nft_prefs_obj_from_node(prefs, node, NULL))) { NFT_LOG(L_ERROR, "failed to create object from prefs node"); goto _deinit; } /* free node */ nft_prefs_node_free(node); /* process all persons */ size_t n; for(n = 0; n < people->people_count; n++) { /* print info */ printf("\tperson(name=\"%s\", email=\"%s@%s\", age=\"%d\", vitality=\"%s\")\n", people->people[n]->name, people->people[n]->email_user, people->people[n]->email_host, people->people[n]->age, people->people[n]->alive ? "alive" : "dead"); } /* we should get what we put in */ if((strcmp(people->people[0]->name, "Bob") != 0) || (strcmp(people->people[0]->email_user, "bob") != 0) || (strcmp(people->people[0]->email_host, "example.com") != 0) || (people->people[0]->age != 30) || (people->people[0]->alive != true) || (strcmp(people->people[1]->name, "Alice") != 0) || (strcmp(people->people[1]->email_user, "alice") != 0) || (strcmp(people->people[1]->email_host, "example.com") != 0) || (people->people[1]->age != 30) || (people->people[1]->alive != false)) { NFT_LOG(L_ERROR, "Updated input doesn't match output!"); goto _deinit; } /* all good */ result = EXIT_SUCCESS; _deinit: nft_prefs_deinit(prefs); return result; }