From 64c38d95bfd6b24e34bc86f7d4ce7ba345c5a963 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Wed, 4 Nov 2009 22:45:50 +0100 Subject: Split up view.cc. --- crawl-ref/source/viewchar.cc | 103 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 crawl-ref/source/viewchar.cc (limited to 'crawl-ref/source/viewchar.cc') diff --git a/crawl-ref/source/viewchar.cc b/crawl-ref/source/viewchar.cc new file mode 100644 index 0000000000..a0cef43408 --- /dev/null +++ b/crawl-ref/source/viewchar.cc @@ -0,0 +1,103 @@ +#include "AppHdr.h" + +#include "viewchar.h" + +#include "options.h" +#include "state.h" + +// For order and meaning of symbols, see dungeon_char_type in enum.h. +static const unsigned dchar_table[ NUM_CSET ][ NUM_DCHAR_TYPES ] = +{ + // CSET_ASCII + { + '#', '*', '.', ',', '\'', '+', '^', '>', '<', // wall .. stairs up + '_', '\\', '}', '{', '8', '~', '~', // altar .. item detect + '0', ')', '[', '/', '%', '?', '=', '!', '(', // orb .. missile + ':', '|', '}', '%', '$', '"', '#', '7', // book .. trees + ' ', '!', '#', '%', ':', ')', '*', '+', // space .. fired_burst + '/', '=', '?', 'X', '[', '`', '#' // fi_stick .. explosion + }, + + // CSET_IBM - this is ANSI 437 + { + 177, 176, 249, 250, '\'', 254, '^', '>', '<', // wall .. stairs up + 220, 239, 244, 247, '8', '~', '~', // altar .. item detect + '0', ')', '[', '/', '%', '?', '=', '!', '(', // orb .. missile + '+', '\\', '}', '%', '$', '"', '#', 234, // book .. trees + ' ', '!', '#', '%', '+', ')', '*', '+', // space .. fired_burst + '/', '=', '?', 'X', '[', '`', '#' // fi_stick .. explosion + }, + + // CSET_DEC - remember: 224-255 are mapped to shifted 96-127 + { + 225, 224, 254, ':', '\'', 238, '^', '>', '<', // wall .. stairs up + 251, 182, 167, 187, '8', 171, 168, // altar .. item detect + '0', ')', '[', '/', '%', '?', '=', '!', '(', // orb .. missile + '+', '\\', '}', '%', '$', '"', '#', '7', // book .. trees + ' ', '!', '#', '%', '+', ')', '*', '+', // space .. fired_burst + '/', '=', '?', 'X', '[', '`', '#' // fi_stick .. explosion + }, + + // CSET_UNICODE + { + 0x2592, 0x2591, 0xB7, 0x25E6, '\'', 0x25FC, '^', '>', '<', + '_', 0x2229, 0x2320, 0x2248, '8', '~', '~', + '0', ')', '[', '/', '%', '?', '=', '!', '(', + '+', '|', '}', '%', '$', '"', '#', 0x2663, + ' ', '!', '#', '%', '+', ')', '*', '+', // space .. fired_burst + '/', '=', '?', 'X', '[', '`', '#' // fi_stick .. explosion + }, +}; + +dungeon_char_type dchar_by_name(const std::string &name) +{ + const char *dchar_names[] = + { + "wall", "wall_magic", "floor", "floor_magic", "door_open", + "door_closed", "trap", "stairs_down", "stairs_up", "altar", "arch", + "fountain", "wavy", "statue", "invis_exposed", "item_detected", + "item_orb", "item_weapon", "item_armour", "item_wand", "item_food", + "item_scroll", "item_ring", "item_potion", "item_missile", "item_book", + "item_stave", "item_miscellany", "item_corpse", "item_gold", + "item_amulet", "cloud", "trees", + }; + + for (unsigned i = 0; i < sizeof(dchar_names) / sizeof(*dchar_names); ++i) + if (dchar_names[i] == name) + return dungeon_char_type(i); + + return (NUM_DCHAR_TYPES); +} + +void init_char_table( char_set_type set ) +{ + for (int i = 0; i < NUM_DCHAR_TYPES; i++) + { + if (Options.cset_override[set][i]) + Options.char_table[i] = Options.cset_override[set][i]; + else + Options.char_table[i] = dchar_table[set][i]; + } +} + +unsigned dchar_glyph(dungeon_char_type dchar) +{ + return (Options.char_table[dchar]); +} + +std::string stringize_glyph(unsigned glyph) +{ + if (crawl_state.glyph2strfn && Options.char_set == CSET_UNICODE) + return (*crawl_state.glyph2strfn)(glyph); + + return (std::string(1, glyph)); +} + +int multibyte_strlen(const std::string &s) +{ + if (crawl_state.multibyte_strlen) + return (*crawl_state.multibyte_strlen)(s); + + return (s.length()); +} + -- cgit v1.2.3-54-g00ecf