tcurses client now translates Yes/No messages etc. - 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 bed0f68f034ad938383e17dabc92e37ef0029dd6
 (DIR) parent bd79d414ea55ce5446266ddfd66005ecbb9bd821
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Mon,  2 Oct 2000 00:30:28 +0000
       
       curses client now translates Yes/No messages etc.
       
       
       Diffstat:
         M ChangeLog                           |       1 +
         M po/dopewars.pot                     |     108 ++++++++++++++++++-------------
         M src/curses_client.c                 |      50 +++++++++++++++++++++----------
       
       3 files changed, 99 insertions(+), 60 deletions(-)
       ---
 (DIR) diff --git a/ChangeLog b/ChangeLog
       t@@ -1,5 +1,6 @@
        1.4.9
            - Completely rewritten fighting code
       +    - Tense and case-sensitive translated strings
            - Internationalization (i18n) support
            - Networking revamped - now uses nonblocking sockets to improve server
              responsiveness and to remove deadlocks (previously, any client could
 (DIR) diff --git a/po/dopewars.pot b/po/dopewars.pot
       t@@ -6,7 +6,7 @@
        msgid ""
        msgstr ""
        "Project-Id-Version: PACKAGE VERSION\n"
       -"POT-Creation-Date: 2000-10-02 00:17+0100\n"
       +"POT-Creation-Date: 2000-10-02 01:27+0100\n"
        "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
        "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
        "Language-Team: LANGUAGE <LL@li.org>\n"
       t@@ -1088,7 +1088,7 @@ msgstr ""
        msgid " Are you sure? "
        msgstr ""
        
       -#: src/curses_client.c:544 src/curses_client.c:562 src/curses_client.c:1692
       +#: src/curses_client.c:544 src/curses_client.c:562 src/curses_client.c:1710
        msgid "YN"
        msgstr ""
        
       t@@ -1193,164 +1193,188 @@ msgstr ""
        msgid "There isn't that much money in the bank..."
        msgstr ""
        
       -#: src/curses_client.c:1005
       +#: src/curses_client.c:953
       +msgid "Yes"
       +msgstr ""
       +
       +#: src/curses_client.c:953
       +msgid "No"
       +msgstr ""
       +
       +#: src/curses_client.c:953
       +msgid "Run"
       +msgstr ""
       +
       +#: src/curses_client.c:954 src/gtk_client.c:525
       +msgid "Fight"
       +msgstr ""
       +
       +#: src/curses_client.c:954
       +msgid "Attack"
       +msgstr ""
       +
       +#: src/curses_client.c:954
       +msgid "Evade"
       +msgstr ""
       +
       +#: src/curses_client.c:1023
        msgid "Press any key..."
        msgstr ""
        
       -#: src/curses_client.c:1136
       +#: src/curses_client.c:1154
        msgid "Messages"
        msgstr ""
        
       -#: src/curses_client.c:1143 src/gtk_client.c:1415
       +#: src/curses_client.c:1161 src/gtk_client.c:1415
        msgid "Stats"
        msgstr ""
        
       -#: src/curses_client.c:1146
       +#: src/curses_client.c:1164
        #, c-format
        msgid "Cash %17s"
        msgstr ""
        
       -#: src/curses_client.c:1153
       +#: src/curses_client.c:1171
        #, c-format
        msgid "Health             %3d"
        msgstr ""
        
       -#: src/curses_client.c:1155
       +#: src/curses_client.c:1173
        #, c-format
        msgid "Bank %17s"
        msgstr ""
        
       -#: src/curses_client.c:1159
       +#: src/curses_client.c:1177
        #, c-format
        msgid "Debt %17s"
        msgstr ""
        
       -#: src/curses_client.c:1163
       +#: src/curses_client.c:1181
        #, c-format
        msgid "Space %6d"
        msgstr ""
        
       -#: src/curses_client.c:1165
       +#: src/curses_client.c:1183
        #, c-format
        msgid "%s %3d  Space %6d"
        msgstr ""
        
       -#: src/curses_client.c:1176
       +#: src/curses_client.c:1194
        msgid "Trenchcoat"
        msgstr ""
        
       -#: src/curses_client.c:1216
       +#: src/curses_client.c:1234
        #, c-format
        msgid "Spy reports for %s"
        msgstr ""
        
       -#: src/curses_client.c:1220 src/curses_client.c:1225
       +#: src/curses_client.c:1238 src/curses_client.c:1243
        #, c-format
        msgid "%s..."
        msgstr ""
        
       -#: src/curses_client.c:1246
       +#: src/curses_client.c:1264
        msgid "No other players are currently logged on!"
        msgstr ""
        
       -#: src/curses_client.c:1251
       +#: src/curses_client.c:1269
        msgid "Players currently logged on:-"
        msgstr ""
        
       -#: src/curses_client.c:1399
       +#: src/curses_client.c:1417
        msgid "Hey dude, what's your name? "
        msgstr ""
        
       -#: src/curses_client.c:1434
       +#: src/curses_client.c:1452
        #, c-format
        msgid "Hey dude, the prices of %s here are:"
        msgstr ""
        
       -#: src/curses_client.c:1446
       +#: src/curses_client.c:1464
        msgid "Will you B>uy"
        msgstr ""
        
       -#: src/curses_client.c:1447
       +#: src/curses_client.c:1465
        msgid ", S>ell"
        msgstr ""
        
       -#: src/curses_client.c:1448
       +#: src/curses_client.c:1466
        msgid ", D>rop"
        msgstr ""
        
       -#: src/curses_client.c:1449
       +#: src/curses_client.c:1467
        msgid ", T>alk, P>age, L>ist"
        msgstr ""
        
       -#: src/curses_client.c:1452
       +#: src/curses_client.c:1470
        msgid ", G>ive"
        msgstr ""
        
       -#: src/curses_client.c:1455
       +#: src/curses_client.c:1473
        msgid ", F>ight"
        msgstr ""
        
       -#: src/curses_client.c:1459
       +#: src/curses_client.c:1477
        msgid ", J>et"
        msgstr ""
        
       -#: src/curses_client.c:1461 src/curses_client.c:1476
       +#: src/curses_client.c:1479 src/curses_client.c:1494
        msgid ", or Q>uit? "
        msgstr ""
        
       -#: src/curses_client.c:1469
       +#: src/curses_client.c:1487
        msgid "Do you "
        msgstr ""
        
       -#: src/curses_client.c:1471
       +#: src/curses_client.c:1489
        msgid "F>ight, "
        msgstr ""
        
       -#: src/curses_client.c:1472
       +#: src/curses_client.c:1490
        msgid "S>tand, "
        msgstr ""
        
       -#: src/curses_client.c:1474
       +#: src/curses_client.c:1492
        msgid "R>un, "
        msgstr ""
        
       -#: src/curses_client.c:1475
       +#: src/curses_client.c:1493
        msgid "D>eal "
        msgstr ""
        
       -#: src/curses_client.c:1518
       +#: src/curses_client.c:1536
        msgid "Connection to server lost! Reverting to single player mode"
        msgstr ""
        
       -#: src/curses_client.c:1547
       +#: src/curses_client.c:1565
        msgid "BSDTPLGFJQ"
        msgstr ""
        
       -#: src/curses_client.c:1549
       +#: src/curses_client.c:1567
        msgid "DRFSQ"
        msgstr ""
        
       -#: src/curses_client.c:1577
       +#: src/curses_client.c:1595
        msgid "List what? P>layers or S>cores? "
        msgstr ""
        
       -#: src/curses_client.c:1578
       +#: src/curses_client.c:1596
        msgid "PS"
        msgstr ""
        
       -#: src/curses_client.c:1587
       +#: src/curses_client.c:1605
        msgid "Whom do you want to page (talk privately to) ? "
        msgstr ""
        
       -#: src/curses_client.c:1602
       +#: src/curses_client.c:1620
        msgid "Talk: "
        msgstr ""
        
       -#: src/curses_client.c:1691
       +#: src/curses_client.c:1709
        msgid "Play again? "
        msgstr ""
        
       -#: src/curses_client.c:1703
       +#: src/curses_client.c:1721
        msgid ""
        "No curses client available - rebuild the binary passing the\n"
        "--enable-curses-client option to configure, or use a windowed\n"
       t@@ -1489,10 +1513,6 @@ msgstr ""
        msgid "OK"
        msgstr ""
        
       -#: src/gtk_client.c:525
       -msgid "Fight"
       -msgstr ""
       -
        #: src/gtk_client.c:552
        msgid "_Deal %Tde"
        msgstr ""
 (DIR) diff --git a/src/curses_client.c b/src/curses_client.c
       t@@ -51,7 +51,7 @@ static void display_intro();
        static void ResizeHandle(int sig);
        static void CheckForResize(Player *Play);
        static int GetKey(char *allowed,char *orig_allowed,gboolean AllowOther,
       -                  gboolean PrintAllowed);
       +                  gboolean PrintAllowed,gboolean ExpandOut);
        static void clear_bottom(), clear_screen();
        static void clear_line(int line), clear_exceptfor(int skip);
        static void nice_wait();
       t@@ -257,7 +257,7 @@ static char *SelectServerFromMetaServer() {
              attrset(PromptAttr);
              mvaddstr(23,1,
                       _("N>ext server; P>revious server; S>elect this server... "));
       -      c=GetKey(_("NPS"),"NPS",FALSE,FALSE);
       +      c=GetKey(_("NPS"),"NPS",FALSE,FALSE,FALSE);
              switch(c) {
                 case 'S': AssignName(&ServerName,ThisServer->Name);
                           Port=ThisServer->Port;
       t@@ -331,7 +331,7 @@ static char ConnectToServer(Player *Play) {
                          _("                   dopewars -s < /dev/null & )"));
                 mvaddstr(22,1,_("         or P>lay single-player ? "));
                 attrset(TextAttr);
       -         c=GetKey(_("CLQP"),"CLQP",FALSE,FALSE);
       +         c=GetKey(_("CLQP"),"CLQP",FALSE,FALSE,FALSE);
                 switch(c) {
                    case 'Q': return FALSE;
                    case 'P': ConnectMethod=CM_SINGLE;
       t@@ -527,7 +527,7 @@ static void GiveErrand(Player *Play) {
           mvaddstr(y++,2,_("or N>o errand ? "));
           curs_set(1);
           attrset(TextAttr);
       -   c=GetKey(_("STGCN"),"STGCN",TRUE,FALSE);
       +   c=GetKey(_("STGCN"),"STGCN",TRUE,FALSE,FALSE);
           if (Play->Bitches.Carried>0 || c=='C') switch (c) {
              case 'S':
                 To=ListPlayers(Play,TRUE,_("Whom do you want to spy on? "));
       t@@ -541,7 +541,7 @@ static void GiveErrand(Player *Play) {
              case 'G':
                 attrset(PromptAttr);
                 addstr(_(" Are you sure? "));
       -         c=GetKey(_("YN"),"YN",FALSE,TRUE);
       +         c=GetKey(_("YN"),"YN",FALSE,TRUE,FALSE);
                 if (c=='Y') SendClientMessage(Play,C_NONE,C_SACKBITCH,NULL,NULL);
                 break;
              case 'C':
       t@@ -559,7 +559,7 @@ static int want_to_quit() {
           attrset(PromptAttr);
           mvaddstr(22,1,_("Are you sure you want to quit? "));
           attrset(TextAttr);
       -   return (GetKey(_("YN"),"YN",FALSE,TRUE)!='N');
       +   return (GetKey(_("YN"),"YN",FALSE,TRUE,FALSE)!='N');
        }
        
        static void change_name(Player *Play,char nullname) {
       t@@ -694,7 +694,7 @@ void HandleClientMessage(char *Message,Player *Play) {
                 wrd=GetNextWord(&pt,"");
                 PrintMessage(pt);
                 addch(' ');
       -         i=GetKey(wrd,wrd,FALSE,TRUE);
       +         i=GetKey(_(wrd),wrd,FALSE,TRUE,TRUE);
                 wrd=g_strdup_printf("%c",i);
                 SendClientMessage(Play,C_NONE,C_ANSWER,
                                   From==&Noone ? NULL : From,wrd);
       t@@ -805,7 +805,7 @@ void GunShop(Player *Play) {
              clear_line(22);
              mvaddstr(22,40-strlen(text)/2,text);
              attrset(TextAttr);
       -      c=GetKey(_("BSL"),"BSL",FALSE,FALSE);
       +      c=GetKey(_("BSL"),"BSL",FALSE,FALSE,FALSE);
              if (c=='L') break;
              if (c=='S' || c=='B') {
                 clear_line(22);
       t@@ -913,7 +913,7 @@ void Bank(Player *Play) {
              mvaddstr(18,1,_("Do you want to D>eposit money, W>ithdraw money, "
                              "or L>eave ? "));
              attrset(TextAttr);
       -      c=GetKey(_("DWL"),"DWL",FALSE,FALSE);
       +      c=GetKey(_("DWL"),"DWL",FALSE,FALSE,FALSE);
              if (c=='L') return;
              text=nice_input(_("How much money? "),19,1,1,NULL);
              money=strtoprice(text); g_free(text);
       t@@ -937,7 +937,7 @@ void Bank(Player *Play) {
        }
        
        int GetKey(char *allowed,char *orig_allowed,gboolean AllowOther,
       -           gboolean PrintAllowed) {
       +           gboolean PrintAllowed,gboolean ExpandOut) {
        /* Waits for keyboard input; will only accept a key listed in the */
        /* "allowed" string. This string may have been translated; thus   */
        /* the "orig_allowed" string contains the untranslated keys.      */
       t@@ -945,7 +945,16 @@ int GetKey(char *allowed,char *orig_allowed,gboolean AllowOther,
        /* (e.g. if 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.    */
       -   int i,c;
       +/* 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 i,j,k,c;
       +   gchar *Words[] = { N_("Yes"), N_("No"), N_("Run"),
       +                      N_("Fight"), N_("Attack"), N_("Evade") };
       +   gint numWords = sizeof(Words) / sizeof(Words[0]);
       +   gchar *trWord;
       +
           curs_set(1);
           c=0;
           if (!allowed || strlen(allowed)==0) return 0;
       t@@ -953,7 +962,16 @@ int GetKey(char *allowed,char *orig_allowed,gboolean AllowOther,
              addch('[' | TextAttr);
              for (i=0;i<strlen(allowed);i++) {
                 if (i>0) addch('/' | TextAttr);
       -         addch((guchar)allowed[i] | TextAttr);
       +         for (j=0;j<numWords;j++) {
       +            if (ExpandOut && orig_allowed[i]==Words[j][0]) {
       +               trWord=_(Words[j]);
       +               for (k=0;k<strlen(trWord);k++) {
       +                  addch((guchar)trWord[k] | TextAttr);
       +               }
       +               break;
       +            }
       +         }
       +         if (j>=numWords) addch((guchar)allowed[i] | TextAttr);
              }
              addch(']' | TextAttr);
              addch(' ' | TextAttr);
       t@@ -1544,9 +1562,9 @@ static void Curses_DoGame(Player *Play) {
              }
        #endif /* NETWORKING */
                 if (DisplayMode==DM_STREET) {
       -            c=GetKey(_("BSDTPLGFJQ"),"BSDTPLGFJQ",TRUE,FALSE);
       +            c=GetKey(_("BSDTPLGFJQ"),"BSDTPLGFJQ",TRUE,FALSE,FALSE);
                 } else if (DisplayMode==DM_FIGHT) {
       -            c=GetKey(_("DRFSQ"),"DRFSQ",TRUE,FALSE);
       +            c=GetKey(_("DRFSQ"),"DRFSQ",TRUE,FALSE,FALSE);
                 } else c=0;
        #if ! (NETWORKING || HAVE_SELECT)
                 CheckForResize(Play);
       t@@ -1575,7 +1593,7 @@ static void Curses_DoGame(Player *Play) {
                    } else if (c=='L' && Network) {
                       attrset(PromptAttr);
                       mvaddstr(23,20,_("List what? P>layers or S>cores? "));
       -               i=GetKey(_("PS"),"PS",TRUE,FALSE);
       +               i=GetKey(_("PS"),"PS",TRUE,FALSE,FALSE);
                       if (i=='P') {
                          ListPlayers(Play,FALSE,NULL);
                       } else if (i=='S') {
       t@@ -1689,7 +1707,7 @@ void CursesLoop() {
              CleanUpServer();
              attrset(TextAttr);
              mvaddstr(23,20,_("Play again? "));
       -      c=GetKey(_("YN"),"YN",TRUE,TRUE);
       +      c=GetKey(_("YN"),"YN",TRUE,TRUE,FALSE);
           }
           g_free(Name);
           end_curses();