void BWDB::_finalize() { if (stmt) { sqlite3_finalize(stmt); stmt = nullptr; } _clear_row(); }
const BWDB::dbrow *BWDB::get_prepared_row() { _clear_row(); rowp = new(row); int colcount = sqlite3_column_count(stmt); if (sqlite3_step(stmt) == SQLITE_ROW) { for (int i = 0; i < colcount; ++i) { const char *colname = (const char *) sqlite3_column_name(stmt, i); const char *colval = (const char *) sqlite3_column_text(stmt, i); if (colname && colval) { rowp->insert({colname, colval}); } } return rowp; } else { _finalize(); return nullptr; } }
static void _list(_choice_array_t *choices) { int start_col = _start_col(); int extra_col = _extra_col(); int row = 1; int current_type = _TYPE_UNINITIALIZED; int current_row = 0; int i; _clear_row(1); /* Prompt */ _clear_row(2); /* Header Line */ _clear_row(3); /* Header Underline */ c_put_str(TERM_YELLOW, _choose_prompt(choices), row++, start_col); switch (_display_mode) { case _DISPLAY_MODE_STATS: /* [ 1 2 ] 3 4 5 6 7 */ /* 01234567890123456789012345678901234567890123456789012345678901234567890123456 */ c_put_str(TERM_WHITE, "Name STR INT WIS DEX CON CHR Life Body ", row++, start_col); c_put_str(TERM_WHITE, "===============================================================================", row++, start_col); break; case _DISPLAY_MODE_SKILLS: c_put_str(TERM_WHITE, "Name Dsrm Dvce Save Stlh Srch Prcp Melee Bows ", row++, start_col); c_put_str(TERM_WHITE, "===============================================================================", row++, start_col); break; case _DISPLAY_MODE_EXTRA: c_put_str(TERM_WHITE, "Name Lvl Max Speed AC Pseudo-Class ", row++, start_col); c_put_str(TERM_WHITE, "===============================================================================", row++, start_col); break; } for (i = 0; i < choices->size; i++) { _choice_t *choice = &choices->choices[i]; /* Group Header */ if (choice->type != current_type) { if (current_type != _TYPE_UNINITIALIZED) _clear_row(row++); current_type = choice->type; _clear_row(row); switch (current_type) { case _TYPE_NEW: c_put_str(TERM_YELLOW, "New Form", row, start_col); break; case _TYPE_KNOWN: c_put_str(TERM_RED, "Known Forms", row, start_col); break; case _TYPE_VISIBLE: c_put_str(TERM_UMBER, "Visible Forms", row, start_col); break; } row++; } _clear_row(row); if (i == choices->current) current_row = row; if (!choice->r_idx) { assert(choice->type == _TYPE_KNOWN); c_put_str((i == choices->current) ? TERM_L_BLUE : TERM_L_DARK, format(" %-23.23s", "Unused"), row, start_col + 1 ); } else { char buf[255]; byte attr = TERM_WHITE; monster_race *r_ptr = &r_info[choice->r_idx]; /* Name */ if (i == choices->current) attr = TERM_L_BLUE; if (choice->key) sprintf(buf, " %c) %-20.20s", choice->key, r_name + r_ptr->name); else sprintf(buf, " %-20.20s", r_name + r_ptr->name); Term_putch(start_col, row, r_ptr->x_attr, r_ptr->x_char); c_put_str(attr, buf, row, start_col + 1); /* Extra Info */ if ((p_ptr->wizard || (r_ptr->r_xtra1 & MR1_POSSESSOR)) && r_ptr->body.life) { if (_display_mode == _DISPLAY_MODE_STATS) { int j; equip_template_ptr body = &b_info[r_ptr->body.body_idx]; for (j = 0; j < 6; j++) { sprintf(buf, "%+3d", r_ptr->body.stats[j]); c_put_str(j == r_ptr->body.spell_stat ? TERM_L_GREEN : TERM_WHITE, buf, row, extra_col + j * 5); } sprintf(buf, "%+3d%%", r_ptr->body.life); c_put_str(TERM_WHITE, buf, row, extra_col + 30); for (j = 0; j < body->count; j++) { int c = extra_col + 36 + j; int r = row; switch (body->slots[j].type) { case EQUIP_SLOT_GLOVES: _prt_equippy(r, c, TV_GLOVES, SV_SET_OF_GAUNTLETS); break; case EQUIP_SLOT_WEAPON_SHIELD: if (body->slots[j].hand % 2) _prt_equippy(r, c, TV_SHIELD, SV_LARGE_METAL_SHIELD); else _prt_equippy(r, c, TV_SWORD, SV_LONG_SWORD); break; case EQUIP_SLOT_WEAPON: _prt_equippy(r, c, TV_SWORD, SV_LONG_SWORD); break; case EQUIP_SLOT_RING: _prt_equippy(r, c, TV_RING, 0); break; case EQUIP_SLOT_BOW: _prt_equippy(r, c, TV_BOW, SV_LONG_BOW); break; case EQUIP_SLOT_AMULET: _prt_equippy(r, c, TV_AMULET, 0); break; case EQUIP_SLOT_LITE: _prt_equippy(r, c, TV_LITE, SV_LITE_FEANOR); break; case EQUIP_SLOT_BODY_ARMOR: _prt_equippy(r, c, TV_HARD_ARMOR, SV_CHAIN_MAIL); break; case EQUIP_SLOT_CLOAK: _prt_equippy(r, c, TV_CLOAK, SV_CLOAK); break; case EQUIP_SLOT_BOOTS: _prt_equippy(r, c, TV_BOOTS, SV_PAIR_OF_HARD_LEATHER_BOOTS); break; case EQUIP_SLOT_HELMET: _prt_equippy(r, c, TV_HELM, SV_IRON_HELM); break; case EQUIP_SLOT_ANY: Term_putch(r, c, TERM_WHITE, '*'); break; case EQUIP_SLOT_CAPTURE_BALL: _prt_equippy(r, c, TV_CAPTURE, 0); break; } } } else if (_display_mode == _DISPLAY_MODE_SKILLS) { sprintf(buf, "%2d+%-2d %2d+%-2d %2d+%-2d %4d %4d %4d %2d+%-2d %2d+%-2d\n", r_ptr->body.skills.dis, r_ptr->body.extra_skills.dis, r_ptr->body.skills.dev, r_ptr->body.extra_skills.dev, r_ptr->body.skills.sav, r_ptr->body.extra_skills.sav, r_ptr->body.skills.stl, r_ptr->body.skills.srh, r_ptr->body.skills.fos, r_ptr->body.skills.thn, r_ptr->body.extra_skills.thn, r_ptr->body.skills.thb, r_ptr->body.extra_skills.thb ); c_put_str(TERM_WHITE, buf, row, extra_col); } else if (_display_mode == _DISPLAY_MODE_EXTRA) { int speed = possessor_r_speed(choice->r_idx); int ac = possessor_r_ac(choice->r_idx); sprintf(buf, "%3d %3d %+5d %+4d %s", r_ptr->level, MAX(15, r_ptr->level + 5), speed, ac, get_class_aux(r_ptr->body.class_idx, 0)->name ); c_put_str(TERM_WHITE, buf, row, extra_col); } } } row++; } _clear_row(row++); _clear_row(row); c_put_str(TERM_WHITE, "['?' to recall, '=' for more info, ESC to cancel, ENTER to select]", row++, start_col); _clear_row(row); if (current_row) Term_gotoxy(start_col, current_row); }