#include #include #include "direction.h" #include "util/language.h" #include "util/umlaut.h" #include void init_direction(const struct locale *lang, direction_t dir, const char *str) { void **tokens = get_translations(lang, UT_DIRECTIONS); variant token; token.i = dir; addtoken(tokens, str, token); } void init_directions(const struct locale *lang) { /* mit dieser routine kann man mehrere namen für eine direction geben, * das ist für die hexes ideal. */ const struct { const char *name; direction_t direction; } dirs[] = { { "dir_ne", D_NORTHEAST }, { "dir_nw", D_NORTHWEST }, { "dir_se", D_SOUTHEAST }, { "dir_sw", D_SOUTHWEST }, { "dir_east", D_EAST }, { "dir_west", D_WEST }, { "northeast", D_NORTHEAST }, { "northwest", D_NORTHWEST }, { "southeast", D_SOUTHEAST }, { "southwest", D_SOUTHWEST }, { "east", D_EAST }, { "west", D_WEST }, { "PAUSE", D_PAUSE }, { NULL, NODIRECTION } }; int i; void **tokens = get_translations(lang, UT_DIRECTIONS); for (i = 0; dirs[i].direction != NODIRECTION; ++i) { const char *str = locale_string(lang, dirs[i].name); if (str) { variant token; token.i = dirs[i].direction; addtoken(tokens, str, token); } } } direction_t get_direction(const char *s, const struct locale *lang) { void **tokens = get_translations(lang, UT_DIRECTIONS); variant token; if (findtoken(*tokens, s, &token) == E_TOK_SUCCESS) { return (direction_t)token.i; } return NODIRECTION; } direction_t finddirection(const char *str) { int i; for (i=0;i!=MAXDIRECTIONS+2;++i) { if (directions[i] && strcmp(str, directions[i])==0) { return (direction_t)i; } } return NODIRECTION; } const char * directions[MAXDIRECTIONS+2] = { "northwest", "northeast", "east", "southeast", "southwest", "west", 0, "pause" };