static void notepad_add_continued(const char *name, void* UNUSED(data)) { int i = nr_notes++; int potential_id, next_id = 0; if (i >= note_list_size) increase_note_storage(); for (potential_id = 0; potential_id < nr_notes; potential_id++) { int test_id; int found_id = 0; for (test_id=0; test_id<nr_notes; test_id++) { widget_list *w = widget_find(main_note_tab_id, note_list[test_id].button_id); if (w && w->id == potential_id) { found_id = 1; break; } } if (!found_id) { next_id = potential_id; break; } } init_note (i, name, NULL); note_button_add (i, next_id); open_note_tab_continued (i); }
static int notepad_load_file() { xmlDocPtr doc; xmlNodePtr cur; if (note_list == 0) { note_list = calloc (NOTE_LIST_INIT_SIZE, sizeof (note)); note_list_size = NOTE_LIST_INIT_SIZE; } notepad_loaded = 1; doc = xmlParseFile ("notes.xml"); if (doc == NULL) { LOG_ERROR_OLD (cant_parse_notes); return 0; } cur = xmlDocGetRootElement (doc); if (cur == NULL) { // Not an error, just an empty notepad //LOG_ERROR_OLD ("Empty xml notepad. It will be overwritten."); xmlFreeDoc(doc); return 0; } if (xmlStrcasecmp (cur->name, (const xmlChar *) "PAD")) { LOG_ERROR_OLD (notes_wrong); xmlFreeDoc(doc); return 0; } // Load child node cur = cur->xmlChildrenNode; // Loop while we have a node, copying ATTRIBS, etc while (cur != NULL) { if ((!xmlStrcasecmp (cur->name, (const xmlChar *)"NOTE"))) { xmlChar* xmlName = xmlGetProp (cur, BAD_CAST "NAME"); char* name = fromUTF8 (xmlName, strlen ((const char*) xmlName)); char* data = NULL; if (cur->children) data = fromUTF8 (cur->children->content, strlen ((const char*)cur->children->content)); if (nr_notes >= note_list_size) { int new_size = note_list_size * 2; note_list = realloc (note_list, new_size * sizeof (note)); note_list_size = new_size; } init_note (nr_notes, name, data); if (data) free (data); free (name); xmlFree (xmlName); rewrap_message (¬e_list[nr_notes].text, 1.0f, notepad_win_x_len - 70, NULL); nr_notes++; } else if(cur->type == XML_ELEMENT_NODE) { LOG_ERROR_OLD ("%s: [%s]", wrong_note_node, cur->name); } cur = cur->next; // Advance to the next node. } return 1; }