// XML element start void cPreferences :: elementStart( const CEGUI::String &element, const CEGUI::XMLAttributes &attributes ) { if( element == "Item" ) { handle_item( attributes ); } }
rss_body *handle_body(be_node *node) { // Allocate memory for result rss_body *result = (rss_body *) malloc(sizeof(rss_body)); if (node->type == BE_DICT) { size_t i, j; // This node is a dictionary, as expected // Now read through all elements and put the common ones in our struct for (i = 0, j = 0; node->val.d[i].val; ++i) { if (strcmp(node->val.d[i].key, "title") == 0) { result->title = node->val.d[i].val->val.s; } else if (strcmp(node->val.d[i].key, "description") == 0) { result->description = node->val.d[i].val->val.s; } else if (strcmp(node->val.d[i].key, "link") == 0) { result->link = node->val.d[i].val->val.s; } else if (strcmp(node->val.d[i].key, "language") == 0) { result->language = node->val.d[i].val->val.s; } else if (strncmp(node->val.d[i].key, "item:", 5) == 0) { // Initial memory to be used for 'item'-entries int toInit = 5; if (j == 0) { // First run, so allocate the memory for the 'toInit' elements result->item = malloc(sizeof(rss_entry *) * toInit); } else if (j >= toInit) { // There are more elements then we expected in 'toInit', so allocate extra memory result->item = realloc(result->item,(j+1)*sizeof(rss_entry)); } // Add the 'item'-entry and increase counter 'j' result->item[j++] = handle_item(node->val.d[i].val); } } } return result; }
void item_list::execute() { const std::string keys = "\x1B \nabcdefghijklmnopqrstuvwxyz<>?"; char key = 0; bool done = false; while (!done) { print(); key = wait_for_key(keys); if (char_in(key, "\x1B \n")) { if (m_examine_mode) { m_examine_mode = false; } else { break; } } if (key == '<') { if (m_page > 0) { m_page--; } } else if (key == '>') { if (m_page == 0 && m_items.size() > PAGE_SIZE) { m_page++; } } else if (key == '?') { m_examine_mode = !m_examine_mode; } else if (valid_entry(key)) { if (!m_examine_mode) { done = handle_item(get_entry(key).item); } else { item_t* item_to_describe = get_entry(key).item; describe(item_to_describe); } } } if (m_action == ZAP) { if (key == '\x1B' || key == ' ' || key == '\n') { // Pop wand selection state. statestack_pop(); } } // Always cancel if escape; if (key == '\x1B') { m_chosen_items.clear(); return; } if (m_action == DROP) { handle_dropped(); } }