summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/viewchar.cc
diff options
context:
space:
mode:
authorRobert Vollmert <rvollmert@gmx.net>2009-11-04 22:45:50 +0100
committerRobert Vollmert <rvollmert@gmx.net>2009-11-04 22:45:50 +0100
commit64c38d95bfd6b24e34bc86f7d4ce7ba345c5a963 (patch)
tree9aaba99b80cd44b032cdd30e40f8b6625508ee89 /crawl-ref/source/viewchar.cc
parentce5c888daccae3cf40be8e28176f415e54b26650 (diff)
downloadcrawl-ref-64c38d95bfd6b24e34bc86f7d4ce7ba345c5a963.tar.gz
crawl-ref-64c38d95bfd6b24e34bc86f7d4ce7ba345c5a963.zip
Split up view.cc.
Diffstat (limited to 'crawl-ref/source/viewchar.cc')
-rw-r--r--crawl-ref/source/viewchar.cc103
1 files changed, 103 insertions, 0 deletions
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());
+}
+