tTranslate keys inside GetKey function itself - vaccinewars - be a doctor and try to vaccinate the world
(HTM) git clone git://src.adamsgaard.dk/vaccinewars
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit d3f6073683e5ce50eb65de0e232374232d5a8fe2
(DIR) parent 66759ed944ee03eb776cc2609172e3e920dfc668
(HTM) Author: Ben Webb <ben@salilab.org>
Date: Sun, 3 Jan 2021 10:24:19 -0800
Translate keys inside GetKey function itself
Rather than passing both the original (English) list
of allowed keys *and* the translated equivalent, just
pass the English list and have the GetKey function itself
do the translation. This simplifies the call signature
and reduces the possibility of making mistakes.
Diffstat:
M src/curses_client/curses_client.c | 39 +++++++++++++++++--------------
1 file changed, 21 insertions(+), 18 deletions(-)
---
(DIR) diff --git a/src/curses_client/curses_client.c b/src/curses_client/curses_client.c
t@@ -77,7 +77,7 @@ static FightPoint fp;
static void display_intro(void);
static void ResizeHandle(int sig);
static void CheckForResize(Player *Play);
-static int GetKey(char *allowed, char *orig_allowed, gboolean AllowOther,
+static int GetKey(const char *orig_allowed, gboolean AllowOther,
gboolean PrintAllowed, gboolean ExpandOut);
static void clear_bottom(void), clear_screen(void);
static void clear_line(int line), clear_exceptfor(int skip);
t@@ -517,7 +517,7 @@ static gboolean SelectServerFromMetaServer(Player *Play, GString *errstr)
if you translate them, keep the keys in the same order (N>ext,
P>revious, S>elect) as they are here, otherwise they'll do the
wrong things. */
- c = GetKey(_("NPS"), "NPS", FALSE, FALSE, FALSE);
+ c = GetKey(N_("NPS"), FALSE, FALSE, FALSE);
switch (c) {
case 'S':
AssignName(&ServerName, ThisServer->Name);
t@@ -735,7 +735,7 @@ static gboolean ConnectToServer(Player *Play)
/* Translate these 4 keys in line with the above options, keeping
the order the same (C>onnect, L>ist, Q>uit, P>lay single-player) */
- c = GetKey(_("CLQP"), "CLQP", FALSE, FALSE, FALSE);
+ c = GetKey(N_("CLQP"), FALSE, FALSE, FALSE);
switch (c) {
case 'Q':
g_string_free(errstr, TRUE);
t@@ -1033,7 +1033,7 @@ static void GiveErrand(Player *Play)
/* Translate these 5 keys to match the above options, keeping the
original order the same (S>py, T>ip off, G>et stuffed, C>ontact spy,
N>o errand) */
- c = GetKey(_("STGCN"), "STGCN", TRUE, FALSE, FALSE);
+ c = GetKey(N_("STGCN"), TRUE, FALSE, FALSE);
if (Play->Bitches.Carried > 0 || c == 'C')
switch (c) {
t@@ -1056,7 +1056,7 @@ static void GiveErrand(Player *Play)
/* The two keys that are valid for answering Yes/No - if you
translate them, keep them in the same order - i.e. "Yes" before
"No" */
- c = GetKey(_("YN"), "YN", FALSE, TRUE, FALSE);
+ c = GetKey(N_("YN"), FALSE, TRUE, FALSE);
if (c == 'Y')
SendClientMessage(Play, C_NONE, C_SACKBITCH, NULL, NULL);
t@@ -1079,7 +1079,7 @@ static int want_to_quit(void)
attrset(PromptAttr);
mvaddstr(get_prompt_line(), 1, _("Are you sure you want to quit? "));
attrset(TextAttr);
- return (GetKey(_("YN"), "YN", FALSE, TRUE, FALSE) != 'N');
+ return (GetKey(N_("YN"), FALSE, TRUE, FALSE) != 'N');
}
/*
t@@ -1241,7 +1241,7 @@ void HandleClientMessage(char *Message, Player *Play)
wrd = GetNextWord(&pt, "");
PrintMessage(pt);
addch(' ');
- i = GetKey(_(wrd), wrd, FALSE, TRUE, TRUE);
+ i = GetKey(wrd, FALSE, TRUE, TRUE);
wrd = g_strdup_printf("%c", i);
SendClientMessage(Play, C_NONE, C_ANSWER,
From == &Noone ? NULL : From, wrd);
t@@ -1492,7 +1492,7 @@ void GunShop(Player *Play)
the order (B>uy, S>ell, L>eave) the same - you can change the
wording of the prompt, but if you change the order in this key
list, the keys will do the wrong things! */
- action = GetKey(_("BSL"), "BSL", FALSE, FALSE, FALSE);
+ action = GetKey(N_("BSL"), FALSE, FALSE, FALSE);
if (action == 'S')
SellGun(Play);
else if (action == 'B')
t@@ -1557,7 +1557,7 @@ void Bank(Player *Play)
/* Make sure you keep the order the same if you translate these keys!
(D>eposit, W>ithdraw, L>eave) */
- action = GetKey(_("DWL"), "DWL", FALSE, FALSE, FALSE);
+ action = GetKey(N_("DWL"), FALSE, FALSE, FALSE);
if (action == 'D' || action == 'W') {
/* Prompt for putting money in or taking money out of the bank */
t@@ -1591,18 +1591,16 @@ void Bank(Player *Play)
/*
* Waits for keyboard input; will only accept a key listed in the
- * "allowed" string (in the locale encoding, usually UTF-8). This string
- * may have been translated; thus the "orig_allowed" string (in ASCII)
- * contains the untranslated keys.
+ * translated form of the "orig_allowed" string.
* Returns the untranslated key corresponding to the key pressed
- * (e.g. if allowed[2] is pressed, orig_allowed[2] is returned)
+ * (e.g. if translated(orig_allowed[2]) is pressed, orig_allowed[2] is returned)
* Case insensitive. If "AllowOther" is TRUE, keys other than the
* given selection are allowed, and cause a zero return value.
* If "PrintAllowed" is TRUE, the allowed keys are printed after
* the prompt. If "ExpandOut" is also TRUE, the full words for
* the commands, rather than just their first letters, are displayed.
*/
-int GetKey(char *allowed, char *orig_allowed, gboolean AllowOther,
+int GetKey(const char *orig_allowed, gboolean AllowOther,
gboolean PrintAllowed, gboolean ExpandOut)
{
int ch;
t@@ -1618,6 +1616,11 @@ int GetKey(char *allowed, char *orig_allowed, gboolean AllowOther,
guint numWords = sizeof(Words) / sizeof(Words[0]);
gchar *trWord;
+ /* Translate allowed keys
+ * Note that allowed is in the locale encoding, usually UTF-8, while
+ * orig_allowed is plain ASCII */
+ char *allowed = _(orig_allowed);
+
curs_set(1);
ch = '\0';
t@@ -2566,13 +2569,13 @@ static void Curses_DoGame(Player *Play)
/* N.B. You must keep the order of these keys the same as the
original when you translate (B>uy, S>ell, D>rop, T>alk, P>age,
L>ist, G>ive errand, F>ight, J>et, Q>uit) */
- c = GetKey(_("BSDTPLGFJQ"), "BSDTPLGFJQ", TRUE, FALSE, FALSE);
+ c = GetKey(N_("BSDTPLGFJQ"), TRUE, FALSE, FALSE);
} else if (DisplayMode == DM_FIGHT) {
/* N.B. You must keep the order of these keys the same as the
original when you translate (D>eal drugs, R>un, F>ight, S>tand,
Q>uit) */
- c = GetKey(_("DRFSQ"), "DRFSQ", TRUE, FALSE, FALSE);
+ c = GetKey(N_("DRFSQ"), TRUE, FALSE, FALSE);
} else
c = 0;
t@@ -2606,7 +2609,7 @@ static void Curses_DoGame(Player *Play)
mvaddstr(get_prompt_line() + 1, 20,
_("List what? P>layers or S>cores? "));
/* P>layers, S>cores */
- i = GetKey(_("PS"), "PS", TRUE, FALSE, FALSE);
+ i = GetKey(N_("PS"), TRUE, FALSE, FALSE);
if (i == 'P') {
ListPlayers(Play, FALSE, NULL);
} else if (i == 'S') {
t@@ -2766,7 +2769,7 @@ void CursesLoop(struct CMDLINE *cmdline)
RestoreConfig();
attrset(TextAttr);
mvaddstr(get_prompt_line() + 1, 20, _("Play again? "));
- c = GetKey(_("YN"), "YN", TRUE, TRUE, FALSE);
+ c = GetKey(N_("YN"), TRUE, TRUE, FALSE);
} while (c == 'Y');
FirstClient = RemovePlayer(Play, FirstClient);
end_curses();