/* acrox.c */ #include #include #include void process_flags(int argc, char* argv[]) { char* possible_flag = argv[1]; switch (argc) { case 2: if (!strcmp(possible_flag, "-h") || !strcmp(possible_flag, "-i")) { print_help(); } break; case 4: if (!strcmp(possible_flag, "-i")) { char* letters = argv[2]; char* reads = argv[3]; int i; for(i = 0; i < strlen(reads); i++) { if(reads[i] == '_') { reads[i] = ' '; } } node_t* doc = roxml_load_doc(DB); node_t* root = roxml_get_chld(doc, NULL, 0); node_t* new = roxml_add_node(root, 1, ROXML_ELM_NODE, "acro", NULL); roxml_add_node(new, 0, ROXML_ATTR_NODE, "letters", letters); roxml_add_node(new, 0, ROXML_ATTR_NODE, "reads", reads); roxml_commit_changes(doc, TEMP_DB, NULL, HUMAN_INSERT); roxml_close(doc); rename(TEMP_DB, DB); exit(OK); } else { print_help(); } break; default: print_help(); break; } } void print_help() { char* title = "\tACROX"; char* show_help = "show this\tacrox -h"; char* look_up = "look up\t\tacrox ACRO\t\t$> acrox DVD"; char* insert = "insert/edit\tacrox -i ACRO READS\t$> acrox CD Compact_Disc"; printf("\n%s\n\n\t%s\n\t%s\n\t%s\n\n", title, show_help, look_up, insert); exit(OK); } int main(int argc, char* argv[]) { if (argc > 1) { process_flags(argc, argv); } else { print_help(); } char* search = argv[1]; node_t* doc = roxml_load_doc(DB); node_t* db = roxml_get_chld(doc, NULL, 0); node_t* acro = roxml_get_chld(db, NULL, 0); node_t* res = roxml_get_attr(acro, "letters", 0); char* cont; cont = roxml_get_content(res, NULL, 0, NULL); int acros = roxml_get_chld_nb(db); int hit = 0; while (acros-- > 0) { if (strcmp(cont, search) == 0) { hit = 1; break; } acro = roxml_get_next_sibling(acro); res = roxml_get_attr(acro, "letters", 0); cont = roxml_get_content(res, NULL, 0, NULL); } if (hit) { node_t* reads_node = roxml_get_attr(acro, "reads", 0); char* reads; reads = roxml_get_content(reads_node, NULL, 0, NULL); printf("%s: %s\n", search, reads); roxml_release(reads); } else { printf("%s: No hit!\n", search); } roxml_release(cont); roxml_close(doc); return 0; }