tInitial support for tense/case-sensitive strings (tstrings) - 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 bd79d414ea55ce5446266ddfd66005ecbb9bd821
(DIR) parent 12764cbe8302c45154e781bdbd576222a590e2da
(HTM) Author: Ben Webb <ben@salilab.org>
Date: Sun, 1 Oct 2000 23:25:48 +0000
Initial support for tense/case-sensitive strings (tstrings)
Diffstat:
M po/dopewars.pot | 590 ++++++++++++++++---------------
M src/Makefile.am | 2 +-
M src/Makefile.in | 6 +++---
M src/gtk_client.c | 162 +++++++++++++++++++------------
M src/message.c | 27 +++++++++++++++++++--------
M src/message.h | 4 ----
M src/serverside.c | 46 +++++++++++++++++++++----------
A src/tstring.c | 110 +++++++++++++++++++++++++++++++
A src/tstring.h | 33 +++++++++++++++++++++++++++++++
9 files changed, 602 insertions(+), 378 deletions(-)
---
(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-01 19:16+0100\n"
+"POT-Creation-Date: 2000-10-02 00:17+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@@ -1002,7 +1002,7 @@ msgstr ""
msgid "CLQP"
msgstr ""
-#: src/curses_client.c:371 src/gtk_client.c:817
+#: src/curses_client.c:371 src/gtk_client.c:822
msgid "Where to, dude ? "
msgstr ""
t@@ -1108,12 +1108,12 @@ msgstr ""
msgid "The server has terminated. Reverting to single player mode."
msgstr ""
-#: src/curses_client.c:649 src/gtk_client.c:341 src/serverside.c:258
+#: src/curses_client.c:649 src/gtk_client.c:340 src/serverside.c:259
#, c-format
msgid "%s joins the game!"
msgstr ""
-#: src/curses_client.c:654 src/gtk_client.c:347
+#: src/curses_client.c:654 src/gtk_client.c:346
#, c-format
msgid "%s has left the game."
msgstr ""
t@@ -1150,22 +1150,22 @@ msgstr ""
msgid "You don't have any %s to sell!"
msgstr ""
-#: src/curses_client.c:820 src/gtk_client.c:1092
+#: src/curses_client.c:820
#, c-format
msgid "You'll need more %s to carry any more %s!"
msgstr ""
-#: src/curses_client.c:842 src/gtk_client.c:1096
+#: src/curses_client.c:842
#, c-format
msgid "You don't have enough space to carry that %s!"
msgstr ""
-#: src/curses_client.c:850 src/gtk_client.c:1100
+#: src/curses_client.c:850
#, c-format
msgid "You don't have enough cash to buy that %s!"
msgstr ""
-#: src/curses_client.c:863 src/gtk_client.c:1104
+#: src/curses_client.c:863 src/gtk_client.c:1134
msgid "You don't have any to sell!"
msgstr ""
t@@ -1173,7 +1173,7 @@ msgstr ""
msgid "How much money do you pay back? "
msgstr ""
-#: src/curses_client.c:893 src/curses_client.c:923 src/gtk_client.c:1934
+#: src/curses_client.c:893 src/curses_client.c:923 src/gtk_client.c:1962
msgid "You don't have that much money!"
msgstr ""
t@@ -1189,7 +1189,7 @@ msgstr ""
msgid "How much money? "
msgstr ""
-#: src/curses_client.c:926 src/gtk_client.c:1927
+#: src/curses_client.c:926 src/gtk_client.c:1955
msgid "There isn't that much money in the bank..."
msgstr ""
t@@ -1201,7 +1201,7 @@ msgstr ""
msgid "Messages"
msgstr ""
-#: src/curses_client.c:1143 src/gtk_client.c:1386
+#: src/curses_client.c:1143 src/gtk_client.c:1415
msgid "Stats"
msgstr ""
t@@ -1357,91 +1357,91 @@ msgid ""
"client (if available) instead!\n"
msgstr ""
-#: src/gtk_client.c:141
+#: src/gtk_client.c:142
msgid "/_Game"
msgstr ""
-#: src/gtk_client.c:142
+#: src/gtk_client.c:143
msgid "/Game/_New"
msgstr ""
-#: src/gtk_client.c:143
+#: src/gtk_client.c:144
msgid "/Game/_Quit"
msgstr ""
-#: src/gtk_client.c:144
+#: src/gtk_client.c:145
msgid "/_Talk"
msgstr ""
-#: src/gtk_client.c:145
+#: src/gtk_client.c:146
msgid "/Talk/To _All"
msgstr ""
-#: src/gtk_client.c:146
+#: src/gtk_client.c:147
msgid "/Talk/To _Player"
msgstr ""
-#: src/gtk_client.c:147
+#: src/gtk_client.c:148
msgid "/_List"
msgstr ""
-#: src/gtk_client.c:148
+#: src/gtk_client.c:149
msgid "/List/_Players"
msgstr ""
-#: src/gtk_client.c:149
+#: src/gtk_client.c:150
msgid "/List/_Scores"
msgstr ""
-#: src/gtk_client.c:150
+#: src/gtk_client.c:151
msgid "/List/_Inventory"
msgstr ""
-#: src/gtk_client.c:151
+#: src/gtk_client.c:152
msgid "/_Errands"
msgstr ""
-#: src/gtk_client.c:152
+#: src/gtk_client.c:153
msgid "/Errands/_Spy"
msgstr ""
-#: src/gtk_client.c:153
+#: src/gtk_client.c:154
msgid "/Errands/_Tipoff"
msgstr ""
-#: src/gtk_client.c:154
+#: src/gtk_client.c:155
msgid "/Errands/Sack _Bitch"
msgstr ""
-#: src/gtk_client.c:155
+#: src/gtk_client.c:156
msgid "/Errands/_Get spy reports"
msgstr ""
-#: src/gtk_client.c:156
+#: src/gtk_client.c:157
msgid "/_Help"
msgstr ""
-#: src/gtk_client.c:157
+#: src/gtk_client.c:158
msgid "/Help/_About"
msgstr ""
-#: src/gtk_client.c:167
+#: src/gtk_client.c:168
msgid "Warning"
msgstr ""
-#: src/gtk_client.c:167
+#: src/gtk_client.c:168
msgid "Message"
msgstr ""
-#: src/gtk_client.c:173 src/gtk_client.c:184
+#: src/gtk_client.c:174 src/gtk_client.c:185
msgid "Quit Game"
msgstr ""
-#: src/gtk_client.c:173 src/gtk_client.c:185 src/gtk_client.c:192
+#: src/gtk_client.c:174 src/gtk_client.c:186 src/gtk_client.c:193
msgid "Abandon current game?"
msgstr ""
-#: src/gtk_client.c:191
+#: src/gtk_client.c:192
msgid "Start new game"
msgstr ""
t@@ -1449,192 +1449,227 @@ msgstr ""
msgid "Inventory"
msgstr ""
-#: src/gtk_client.c:240 src/gtk_client.c:2169 src/gtk_client.c:2533
+#: src/gtk_client.c:238 src/gtk_client.c:2197 src/gtk_client.c:2578
msgid "Close"
msgstr ""
-#: src/gtk_client.c:270
+#: src/gtk_client.c:268
msgid "Connection to server lost - switching to single player mode"
msgstr ""
-#: src/gtk_client.c:315
+#: src/gtk_client.c:314
msgid "You have been pushed from the server."
msgstr ""
-#: src/gtk_client.c:320
+#: src/gtk_client.c:319
msgid "The server has terminated."
msgstr ""
-#: src/gtk_client.c:361
-#, c-format
-msgid "Jetting to %s"
+#: src/gtk_client.c:360
+msgid "Jetting to %tde"
msgstr ""
-#: src/gtk_client.c:369
+#: src/gtk_client.c:370
#, c-format
msgid "_Spy\t(%s)"
msgstr ""
-#: src/gtk_client.c:373
+#: src/gtk_client.c:374
#, c-format
msgid "_Tipoff\t(%s)"
msgstr ""
-#: src/gtk_client.c:407
+#: src/gtk_client.c:408
msgid "High Scores"
msgstr ""
-#: src/gtk_client.c:441 src/gtk_client.c:1043 src/gtk_client.c:1499
-#: src/gtk_client.c:1844 src/gtk_client.c:2008 src/gtk_client.c:2284
-#: src/gtk_client.c:2441
+#: src/gtk_client.c:442 src/gtk_client.c:1057 src/gtk_client.c:1527
+#: src/gtk_client.c:1872 src/gtk_client.c:2036 src/gtk_client.c:2317
+#: src/gtk_client.c:2484
msgid "OK"
msgstr ""
-#: src/gtk_client.c:523
+#: src/gtk_client.c:525
msgid "Fight"
msgstr ""
-#: src/gtk_client.c:550
-#, c-format
-msgid "_Deal %s"
+#: src/gtk_client.c:552
+msgid "_Deal %Tde"
msgstr ""
-#: src/gtk_client.c:554 src/gtk_client.c:1135 src/gtk_client.c:1332
+#: src/gtk_client.c:558 src/gtk_client.c:1165 src/gtk_client.c:1362
msgid "_Fight"
msgstr ""
-#: src/gtk_client.c:557
+#: src/gtk_client.c:561
msgid "_Stand"
msgstr ""
-#: src/gtk_client.c:560 src/gtk_client.c:1134
+#: src/gtk_client.c:564 src/gtk_client.c:1164
msgid "_Run"
msgstr ""
-#: src/gtk_client.c:808
+#: src/gtk_client.c:644
+msgid "**Stats: Guns** %Tde"
+msgstr ""
+
+#: src/gtk_client.c:651
+msgid "**Stats: Bitches** %Tde"
+msgstr ""
+
+#: src/gtk_client.c:813
msgid "Jet to location"
msgstr ""
-#: src/gtk_client.c:877
+#: src/gtk_client.c:883
#, c-format
msgid "at %s"
msgstr ""
-#: src/gtk_client.c:882
-#, c-format
-msgid "You are currently carrying %d %s"
+#: src/gtk_client.c:888
+msgid "You are currently carrying %d %tde"
msgstr ""
-#: src/gtk_client.c:887
+#: src/gtk_client.c:895
#, c-format
msgid "Available space: %d"
msgstr ""
-#: src/gtk_client.c:892
+#: src/gtk_client.c:900
#, c-format
msgid "You can afford %d"
msgstr ""
-#: src/gtk_client.c:941 src/gtk_client.c:1072
+#: src/gtk_client.c:949 src/gtk_client.c:1087
msgid "Buy"
msgstr ""
-#: src/gtk_client.c:942 src/gtk_client.c:1073
+#: src/gtk_client.c:950 src/gtk_client.c:1088
msgid "Sell"
msgstr ""
-#: src/gtk_client.c:943 src/gtk_client.c:1074
+#: src/gtk_client.c:951 src/gtk_client.c:1089
msgid "Drop"
msgstr ""
-#: src/gtk_client.c:1031
-#, c-format
-msgid "%s how many?"
+#: src/gtk_client.c:1040
+msgid "Buy how many?"
+msgstr ""
+
+#: src/gtk_client.c:1042
+msgid "Sell how many?"
+msgstr ""
+
+#: src/gtk_client.c:1044
+msgid "Drop how many?"
msgstr ""
-#: src/gtk_client.c:1049 src/gtk_client.c:1844 src/gtk_client.c:2019
-#: src/gtk_client.c:2292
+#: src/gtk_client.c:1063 src/gtk_client.c:1872 src/gtk_client.c:2047
+#: src/gtk_client.c:2325
msgid "Cancel"
msgstr ""
-#: src/gtk_client.c:1088
-#, c-format
-msgid "You don't have any %s!"
+#: src/gtk_client.c:1100
+msgid "Buy %tde"
+msgstr ""
+
+#: src/gtk_client.c:1101
+msgid "Sell %tde"
+msgstr ""
+
+#: src/gtk_client.c:1102
+msgid "Drop %tde"
msgstr ""
-#: src/gtk_client.c:1134 src/gtk_client.c:1845
+#: src/gtk_client.c:1108
+msgid "You don't have any %tde!"
+msgstr ""
+
+#: src/gtk_client.c:1115
+msgid "You'll need more %tde to carry any more %tde!"
+msgstr ""
+
+#: src/gtk_client.c:1122
+msgid "You don't have enough space to carry that %tde!"
+msgstr ""
+
+#: src/gtk_client.c:1129
+msgid "You don't have enough cash to buy that %tde!"
+msgstr ""
+
+#: src/gtk_client.c:1164 src/gtk_client.c:1873
msgid "_Yes"
msgstr ""
-#: src/gtk_client.c:1134 src/gtk_client.c:1845
+#: src/gtk_client.c:1164 src/gtk_client.c:1873
msgid "_No"
msgstr ""
-#: src/gtk_client.c:1135
+#: src/gtk_client.c:1165
msgid "_Attack"
msgstr ""
-#: src/gtk_client.c:1135
+#: src/gtk_client.c:1165
msgid "_Evade"
msgstr ""
-#: src/gtk_client.c:1153
+#: src/gtk_client.c:1183
msgid "Question"
msgstr ""
-#: src/gtk_client.c:1282
+#: src/gtk_client.c:1312
msgid "Space"
msgstr ""
-#: src/gtk_client.c:1287
+#: src/gtk_client.c:1317
msgid "Cash"
msgstr ""
-#: src/gtk_client.c:1292
+#: src/gtk_client.c:1322
msgid "Debt"
msgstr ""
-#: src/gtk_client.c:1297
+#: src/gtk_client.c:1327
msgid "Bank"
msgstr ""
-#: src/gtk_client.c:1312
+#: src/gtk_client.c:1342
msgid "Health"
msgstr ""
-#: src/gtk_client.c:1332
+#: src/gtk_client.c:1362
msgid "_Jet!"
msgstr ""
-#: src/gtk_client.c:1363
+#: src/gtk_client.c:1392
msgid "dopewars"
msgstr ""
-#: src/gtk_client.c:1446
+#: src/gtk_client.c:1474
msgid "Drug Dealing and Research"
msgstr ""
-#: src/gtk_client.c:1447
+#: src/gtk_client.c:1475
msgid "Play Testing"
msgstr ""
-#: src/gtk_client.c:1448
+#: src/gtk_client.c:1476
msgid "Extensive Play Testing"
msgstr ""
-#: src/gtk_client.c:1450
+#: src/gtk_client.c:1478
msgid "Constructive Criticism"
msgstr ""
-#: src/gtk_client.c:1452
+#: src/gtk_client.c:1480
msgid "Unconstructive Criticism"
msgstr ""
-#: src/gtk_client.c:1456
+#: src/gtk_client.c:1484
msgid "About dopewars"
msgstr ""
-#: src/gtk_client.c:1465
+#: src/gtk_client.c:1493
msgid ""
"Based on John E. Dell's old Drug Wars game, dopewars is a simulation of an\n"
"imaginary drug market. dopewars is an All-American game which features\n"
t@@ -1646,245 +1681,243 @@ msgid ""
"have one month of game time to make your fortune.\n"
msgstr ""
-#: src/gtk_client.c:1473
+#: src/gtk_client.c:1501
#, c-format
msgid ""
"Version %s Copyright (C) 1998-2000 Ben Webb ben@bellatrix.pcl.ox.ac.uk\n"
"dopewars is released under the GNU General Public Licence\n"
msgstr ""
-#: src/gtk_client.c:1491
+#: src/gtk_client.c:1519
msgid ""
"\n"
"For information on the command line options, type dopewars -h at your\n"
"Unix prompt. This will display a help screen, listing the available options."
msgstr ""
-#: src/gtk_client.c:1529 src/gtk_client.c:1552
+#: src/gtk_client.c:1557 src/gtk_client.c:1580
#, c-format
msgid "Status: Could not connect (%s)"
msgstr ""
-#: src/gtk_client.c:1540
+#: src/gtk_client.c:1568
#, c-format
msgid "Status: Attempting to contact %s..."
msgstr ""
-#: src/gtk_client.c:1600
+#: src/gtk_client.c:1628
#, c-format
msgid "%d of %d"
msgstr ""
-#: src/gtk_client.c:1664 src/gtk_client.c:1705 src/gtk_client.c:1746
+#: src/gtk_client.c:1692 src/gtk_client.c:1733 src/gtk_client.c:1774
msgid "Server"
msgstr ""
-#: src/gtk_client.c:1665 src/gtk_client.c:1720
+#: src/gtk_client.c:1693 src/gtk_client.c:1748
msgid "Port"
msgstr ""
-#: src/gtk_client.c:1666
+#: src/gtk_client.c:1694
msgid "Version"
msgstr ""
-#: src/gtk_client.c:1667
+#: src/gtk_client.c:1695
msgid "Players"
msgstr ""
-#: src/gtk_client.c:1668
+#: src/gtk_client.c:1696
msgid "Comment"
msgstr ""
-#: src/gtk_client.c:1681
+#: src/gtk_client.c:1709
msgid "New Game"
msgstr ""
-#: src/gtk_client.c:1690
+#: src/gtk_client.c:1718
msgid "Hey dude, what's your _name?"
msgstr ""
-#: src/gtk_client.c:1712
+#: src/gtk_client.c:1740
msgid "Host name"
msgstr ""
-#: src/gtk_client.c:1735 src/gtk_client.c:1798
+#: src/gtk_client.c:1763 src/gtk_client.c:1826
msgid "_Connect"
msgstr ""
-#: src/gtk_client.c:1748 src/gtk_client.c:1769
+#: src/gtk_client.c:1776 src/gtk_client.c:1797
msgid "Single player"
msgstr ""
-#: src/gtk_client.c:1754
+#: src/gtk_client.c:1782
msgid "_Antique mode"
msgstr ""
-#: src/gtk_client.c:1761
+#: src/gtk_client.c:1789
msgid "_Start single-player game"
msgstr ""
-#: src/gtk_client.c:1771 src/gtk_client.c:1809
+#: src/gtk_client.c:1799 src/gtk_client.c:1837
msgid "Metaserver"
msgstr ""
-#: src/gtk_client.c:1788
+#: src/gtk_client.c:1816
msgid "_Update"
msgstr ""
-#: src/gtk_client.c:1813
+#: src/gtk_client.c:1841
msgid "Status: Waiting for user input"
msgstr ""
-#: src/gtk_client.c:1965
+#: src/gtk_client.c:1993
#, c-format
msgid "Cash: %s"
msgstr ""
-#: src/gtk_client.c:1972
+#: src/gtk_client.c:2000
#, c-format
msgid "Debt: %s"
msgstr ""
-#: src/gtk_client.c:1975
+#: src/gtk_client.c:2003
#, c-format
msgid "Bank: %s"
msgstr ""
-#: src/gtk_client.c:1983
+#: src/gtk_client.c:2011
msgid "Pay back:"
msgstr ""
-#: src/gtk_client.c:1986
+#: src/gtk_client.c:2014
msgid "Deposit"
msgstr ""
-#: src/gtk_client.c:1990
+#: src/gtk_client.c:2018
msgid "Withdraw"
msgstr ""
-#: src/gtk_client.c:2014
+#: src/gtk_client.c:2042
msgid "Pay all"
msgstr ""
-#: src/gtk_client.c:2036
+#: src/gtk_client.c:2064
msgid "Player List"
msgstr ""
-#: src/gtk_client.c:2124
+#: src/gtk_client.c:2152
msgid "Talk to player(s)"
msgstr ""
-#: src/gtk_client.c:2146
+#: src/gtk_client.c:2174
msgid "Talk to all players"
msgstr ""
-#: src/gtk_client.c:2150
+#: src/gtk_client.c:2178
msgid "Message:-"
msgstr ""
-#: src/gtk_client.c:2163
+#: src/gtk_client.c:2191
msgid "Send"
msgstr ""
-#: src/gtk_client.c:2254
+#: src/gtk_client.c:2283
msgid "Spy On Player"
msgstr ""
-#: src/gtk_client.c:2256
-#, c-format
+#: src/gtk_client.c:2285
msgid ""
-"Please choose the player to spy on. Your %s will\n"
+"Please choose the player to spy on. Your %tde will\n"
"then offer his services to the player, and if successful,\n"
"you will be able to view the player's stats with the\n"
-"\"Get spy reports\" menu. Remember that the %s will leave\n"
-"you, so any %s or %s that he's carrying may be lost!"
+"\"Get spy reports\" menu. Remember that the %tde will leave\n"
+"you, so any %tde or %tde that he's carrying may be lost!"
msgstr ""
-#: src/gtk_client.c:2264
+#: src/gtk_client.c:2295
msgid "Tip Off The Cops"
msgstr ""
-#: src/gtk_client.c:2266
-#, c-format
+#: src/gtk_client.c:2297
msgid ""
-"Please choose the player to tip off the cops to. Your %s will\n"
+"Please choose the player to tip off the cops to. Your %tde will\n"
"help the cops to attack that player, and then report back to you\n"
-"on the encounter. Remember that the %s will leave you temporarily,\n"
-"so any %s or %s that he's carrying may be lost!"
+"on the encounter. Remember that the %tde will leave you temporarily,\n"
+"so any %tde or %tde that he's carrying may be lost!"
msgstr ""
-#: src/gtk_client.c:2306
-#, c-format
-msgid "Sack %s"
+#: src/gtk_client.c:2339
+msgid "Sack %Tde"
msgstr ""
-#: src/gtk_client.c:2307
-#, c-format
+#: src/gtk_client.c:2343
msgid ""
-"Are you sure? (Any %s or %s carried\n"
-"by this %s may be lost!)"
+"Are you sure? (Any %tde or %tde carried\n"
+"by this %tde may be lost!)"
msgstr ""
-#: src/gtk_client.c:2327
+#: src/gtk_client.c:2366
msgid "Name"
msgstr ""
-#: src/gtk_client.c:2328
+#: src/gtk_client.c:2367
msgid "Price"
msgstr ""
-#: src/gtk_client.c:2329
+#: src/gtk_client.c:2368
msgid "Number"
msgstr ""
-#: src/gtk_client.c:2331
+#: src/gtk_client.c:2370
msgid "_Buy ->"
msgstr ""
-#: src/gtk_client.c:2332
+#: src/gtk_client.c:2371
msgid "<- _Sell"
msgstr ""
-#: src/gtk_client.c:2333
+#: src/gtk_client.c:2372
msgid "_Drop <-"
msgstr ""
-#: src/gtk_client.c:2338
-#, c-format
-msgid "%s here"
+#: src/gtk_client.c:2377
+msgid "%Tde here"
msgstr ""
-#: src/gtk_client.c:2341
-#, c-format
-msgid "%s carried"
+#: src/gtk_client.c:2382
+msgid "%Tde carried"
msgstr ""
-#: src/gtk_client.c:2417
+#: src/gtk_client.c:2460
msgid "Change Name"
msgstr ""
-#: src/gtk_client.c:2427
+#: src/gtk_client.c:2470
msgid ""
"Unfortunately, somebody else is already using \"your\" name. Please change "
"it:-"
msgstr ""
-#: src/gtk_client.c:2486
+#: src/gtk_client.c:2507
+msgid "**GunShop window title** %Tde"
+msgstr ""
+
+#: src/gtk_client.c:2531
msgid "Done"
msgstr ""
-#: src/gtk_client.c:2519
+#: src/gtk_client.c:2564
msgid "Spy reports"
msgstr ""
-#: src/gtk_client.c:2590
+#: src/gtk_client.c:2630
msgid ""
"No GTK+ client available - rebuild the binary passing the\n"
"--enable-gtk-client option to configure, or use the curses\n"
"client (if available) instead!\n"
msgstr ""
-#: src/serverside.c:71
+#: src/serverside.c:72
#, c-format
msgid ""
"dopewars server version %s commands and settings\n"
t@@ -1906,103 +1939,103 @@ msgid ""
"\n"
msgstr ""
-#: src/serverside.c:103
+#: src/serverside.c:104
msgid "cannot send data to metaserver\n"
msgstr ""
-#: src/serverside.c:125
+#: src/serverside.c:126
#, c-format
msgid "Sending data to metaserver at %s\n"
msgstr ""
-#: src/serverside.c:127
+#: src/serverside.c:128
#, c-format
msgid "Notifying metaserver at %s\n"
msgstr ""
-#: src/serverside.c:130
+#: src/serverside.c:131
msgid "cannot locate metaserver\n"
msgstr ""
-#: src/serverside.c:135
+#: src/serverside.c:136
msgid "cannot create socket for metaserver communication\n"
msgstr ""
-#: src/serverside.c:169
+#: src/serverside.c:170
msgid "cannot read high score file\n"
msgstr ""
-#: src/serverside.c:268
+#: src/serverside.c:269
#, c-format
msgid "MaxClients (%d) exceeded - dropping connection"
msgstr ""
-#: src/serverside.c:272
+#: src/serverside.c:273
msgid ""
"Sorry, but this server has a limit of 1 player, which has been "
"reached.^Please try connecting again later."
msgstr ""
-#: src/serverside.c:277
+#: src/serverside.c:278
#, c-format
msgid ""
"Sorry, but this server has a limit of %d players, which has been "
"reached.^Please try connecting again later."
msgstr ""
-#: src/serverside.c:290
+#: src/serverside.c:291
#, c-format
msgid "%s will now be known as %s"
msgstr ""
-#: src/serverside.c:305
+#: src/serverside.c:306
msgid "Your dealing time is up..."
msgstr ""
-#: src/serverside.c:316
+#: src/serverside.c:317
#, c-format
msgid "%s: DENIED jet to %s"
msgstr ""
-#: src/serverside.c:362
+#: src/serverside.c:363
#, c-format
msgid "%s now spying on %s"
msgstr ""
-#: src/serverside.c:370
+#: src/serverside.c:371
#, c-format
msgid "%s spy on %s: DENIED"
msgstr ""
-#: src/serverside.c:376
+#: src/serverside.c:377
#, c-format
msgid "%s tipped off the cops to %s"
msgstr ""
-#: src/serverside.c:384
+#: src/serverside.c:385
#, c-format
msgid "%s tipoff about %s: DENIED"
msgstr ""
-#: src/serverside.c:490
+#: src/serverside.c:491
msgid "--More--"
msgstr ""
-#: src/serverside.c:501
+#: src/serverside.c:502
msgid "Pager exited abnormally - using stdout instead..."
msgstr ""
-#: src/serverside.c:516
+#: src/serverside.c:517
#, c-format
msgid "Maintaining pid file %s"
msgstr ""
-#: src/serverside.c:520
+#: src/serverside.c:521
#, c-format
msgid "Cannot create pid file %s"
msgstr ""
-#: src/serverside.c:569
+#: src/serverside.c:570
#, c-format
msgid ""
"Cannot open high score file %s.\n"
t@@ -2010,252 +2043,241 @@ msgid ""
"specify an alternate high score file with the -f command line option."
msgstr ""
-#: src/serverside.c:606
+#: src/serverside.c:607
#, c-format
msgid ""
"dopewars server version %s ready and waiting for connections\n"
"on port %d. For assistance with server commands, enter the command \"help\"\n"
msgstr ""
-#: src/serverside.c:623
+#: src/serverside.c:624
msgid "Cannot install SIGUSR1 interrupt handler!"
msgstr ""
-#: src/serverside.c:629
+#: src/serverside.c:630
msgid "Cannot install SIGINT interrupt handler!"
msgstr ""
-#: src/serverside.c:632
+#: src/serverside.c:633
msgid "Cannot install SIGTERM interrupt handler!"
msgstr ""
-#: src/serverside.c:635
+#: src/serverside.c:636
msgid "Cannot install SIGHUP interrupt handler!"
msgstr ""
-#: src/serverside.c:640
+#: src/serverside.c:641
msgid "Cannot install pipe handler!"
msgstr ""
-#: src/serverside.c:663
+#: src/serverside.c:664
msgid "Users currently logged on:-\n"
msgstr ""
-#: src/serverside.c:668
+#: src/serverside.c:669
msgid "No users currently logged on!"
msgstr ""
-#: src/serverside.c:672
+#: src/serverside.c:673
#, c-format
msgid "Pushing %s"
msgstr ""
-#: src/serverside.c:674 src/serverside.c:682
+#: src/serverside.c:675 src/serverside.c:683
msgid "No such user!"
msgstr ""
-#: src/serverside.c:678
+#: src/serverside.c:679
#, c-format
msgid "%s killed"
msgstr ""
-#: src/serverside.c:684
+#: src/serverside.c:685
msgid "Unknown command - try \"help\" for help..."
msgstr ""
-#: src/serverside.c:701
+#: src/serverside.c:702
#, c-format
msgid "got connection from %s"
msgstr ""
-#: src/serverside.c:717
+#: src/serverside.c:718
#, c-format
msgid "%s leaves the server!"
msgstr ""
-#: src/serverside.c:785
+#: src/serverside.c:786
msgid "Standard input closed."
msgstr ""
-#: src/serverside.c:928
+#: src/serverside.c:929
#, c-format
msgid "Unable to read high score file %s"
msgstr ""
-#: src/serverside.c:948
+#: src/serverside.c:949
msgid "Congratulations! You made the high scores!"
msgstr ""
-#: src/serverside.c:961
+#: src/serverside.c:962
msgid "You didn't even make the high score table..."
msgstr ""
-#: src/serverside.c:975
+#: src/serverside.c:976
#, c-format
msgid "Unable to write high score file %s"
msgstr ""
-#: src/serverside.c:994
+#: src/serverside.c:995
msgid "(R.I.P.)"
msgstr ""
-#: src/serverside.c:1029
+#: src/serverside.c:1032
#, c-format
msgid "%s: Tipoff from %s"
msgstr ""
-#: src/serverside.c:1046
-#, c-format
-msgid "One of your %s was spying for %s.^The spy %s!"
+#: src/serverside.c:1050
+msgid "One of your %tde was spying for %s.^The spy %s!"
msgstr ""
-#: src/serverside.c:1054
+#: src/serverside.c:1060
#, c-format
msgid "Your spy working with %s has been discovered!^The spy %s!"
msgstr ""
-#: src/serverside.c:1077
+#: src/serverside.c:1083
#, c-format
msgid " The lady next to you on the subway said,^ \"%s\"%s"
msgstr ""
-#: src/serverside.c:1080
+#: src/serverside.c:1086
msgid "^ (at least, you -think- that's what she said)"
msgstr ""
-#: src/serverside.c:1082
+#: src/serverside.c:1088
#, c-format
msgid " You hear someone playing %s"
msgstr ""
-#: src/serverside.c:1091 src/serverside.c:1100 src/serverside.c:1109
-#: src/serverside.c:1118
-#, c-format
-msgid "YN^Would you like to visit %s?"
-msgstr ""
-
-#: src/serverside.c:1129
-#, c-format
-msgid "YN^^Would you like to hire %s %s for %s?"
-msgstr ""
-
+#: src/serverside.c:1097 src/serverside.c:1108 src/serverside.c:1119
#: src/serverside.c:1130
-msgid "an"
+msgid "YN^Would you like to visit %tde?"
msgstr ""
-#: src/serverside.c:1130
-msgid "a"
+#: src/serverside.c:1143
+msgid "YN^^Would you like to hire a %tde for %s?"
msgstr ""
-#: src/serverside.c:1142
+#: src/serverside.c:1158
#, c-format
msgid "AE^%s is already here!^Do you Attack, or Evade?"
msgstr ""
-#: src/serverside.c:1465
+#: src/serverside.c:1480
msgid "You were mugged in the subway!"
msgstr ""
-#: src/serverside.c:1476
+#: src/serverside.c:1491
#, c-format
msgid "You meet a friend! He gives you %d %s."
msgstr ""
-#: src/serverside.c:1481
+#: src/serverside.c:1496
#, c-format
msgid "You meet a friend! You give him %d %s."
msgstr ""
-#: src/serverside.c:1490
+#: src/serverside.c:1505
msgid "Sanitized away a RandomOffer"
msgstr ""
-#: src/serverside.c:1495
+#: src/serverside.c:1510
#, c-format
msgid ""
"Police dogs chase you for %d blocks! You dropped some %s! That's a drag, man!"
msgstr ""
-#: src/serverside.c:1511
+#: src/serverside.c:1526
#, c-format
msgid "You find %d %s on a dead dude in the subway!"
msgstr ""
-#: src/serverside.c:1523
+#: src/serverside.c:1538
#, c-format
msgid "Your mama made brownies with some of your %s! They were great!"
msgstr ""
-#: src/serverside.c:1533
+#: src/serverside.c:1548
msgid ""
"YN^There is some weed that smells like paraquat here!^It looks good! Will "
"you smoke it? "
msgstr ""
-#: src/serverside.c:1540
+#: src/serverside.c:1555
#, c-format
msgid "You stopped to %s."
msgstr ""
-#: src/serverside.c:1561
+#: src/serverside.c:1576
#, c-format
msgid "Would you like to buy a bigger trenchcoat for %s?"
msgstr ""
-#: src/serverside.c:1566
+#: src/serverside.c:1581
#, c-format
msgid "YN^Hey dude! I'll help carry your %s for a mere %s. Yes or no?"
msgstr ""
-#: src/serverside.c:1578
+#: src/serverside.c:1593
#, c-format
msgid "YN^Would you like to buy a %s for %s?"
msgstr ""
-#: src/serverside.c:1684 src/serverside.c:1777
+#: src/serverside.c:1699 src/serverside.c:1792
#, c-format
msgid "%s: offer was on behalf of %s"
msgstr ""
-#: src/serverside.c:1687
+#: src/serverside.c:1702
#, c-format
msgid "%s has accepted your %s!^Use the G key to contact your spy."
msgstr ""
-#: src/serverside.c:1733
+#: src/serverside.c:1748
msgid ""
"You hallucinated for three days on the wildest trip you ever imagined!^Then "
"you died because your brain disintegrated!"
msgstr ""
-#: src/serverside.c:1757
+#: src/serverside.c:1772
#, c-format
msgid "Too late - %s has just left!"
msgstr ""
-#: src/serverside.c:1780
+#: src/serverside.c:1795
#, c-format
msgid "%s has rejected your %s!"
msgstr ""
-#: src/serverside.c:1823
+#: src/serverside.c:1838
msgid "YN^Officer %%s spots you dropping %s, and chases you!"
msgstr ""
-#: src/serverside.c:1825
+#: src/serverside.c:1840
msgid ""
"YN^Officer %%s and %%d of his deputies spot you dropping %s, and chase you!"
msgstr ""
-#: src/serverside.c:1984
+#: src/serverside.c:1999
msgid "Player removed due to idle timeout"
msgstr ""
-#: src/serverside.c:1994
+#: src/serverside.c:2009
msgid "Player removed due to connect timeout"
msgstr ""
-#: src/message.c:524
+#: src/message.c:525
#, c-format
msgid ""
"This server is version %s, while your client is version %s.\n"
t@@ -2264,150 +2286,146 @@ msgid ""
"for the latest version."
msgstr ""
-#: src/message.c:667
+#: src/message.c:668
msgid "Could not find host"
msgstr ""
-#: src/message.c:668
+#: src/message.c:669
msgid "Could not create network socket"
msgstr ""
-#: src/message.c:669 src/message.c:702
+#: src/message.c:670 src/message.c:703
msgid "Connection refused or no server present"
msgstr ""
-#: src/message.c:861
+#: src/message.c:862
msgid "Cannot locate metaserver"
msgstr ""
-#: src/message.c:862
+#: src/message.c:863
msgid "Cannot create socket"
msgstr ""
-#: src/message.c:864
+#: src/message.c:865
msgid "Metaserver not running HTTP or connection denied"
msgstr ""
-#: src/message.c:944
+#: src/message.c:945
msgid "Do you run?"
msgstr ""
-#: src/message.c:947
+#: src/message.c:948
msgid "Do you run, or fight?"
msgstr ""
-#: src/message.c:1048
+#: src/message.c:1051
msgid "pitifully armed"
msgstr ""
-#: src/message.c:1049
+#: src/message.c:1052
msgid "lightly armed"
msgstr ""
-#: src/message.c:1050
+#: src/message.c:1053
msgid "moderately well armed"
msgstr ""
-#: src/message.c:1051
+#: src/message.c:1054
msgid "heavily armed"
msgstr ""
-#: src/message.c:1052
+#: src/message.c:1055
msgid "armed to the teeth"
msgstr ""
-#: src/message.c:1054
-#, c-format
-msgid "%s arrives with %d %s, %s!"
+#: src/message.c:1057
+msgid "%s arrives with %d %tde, %s!"
msgstr ""
-#: src/message.c:1060
+#: src/message.c:1065
#, c-format
msgid "%s stands and takes it"
msgstr ""
-#: src/message.c:1062
+#: src/message.c:1067
msgid "You stand there like a dummy."
msgstr ""
-#: src/message.c:1067
+#: src/message.c:1072
#, c-format
msgid "%s has got away!"
msgstr ""
-#: src/message.c:1069
+#: src/message.c:1074
msgid "You got away!"
msgstr ""
-#: src/message.c:1074
+#: src/message.c:1079
msgid "Guns reloaded..."
msgstr ""
-#: src/message.c:1079
+#: src/message.c:1084
#, c-format
msgid "%s shoots at %s... and misses!"
msgstr ""
-#: src/message.c:1082
+#: src/message.c:1087
#, c-format
msgid "%s shoots at you... and misses!"
msgstr ""
-#: src/message.c:1085
+#: src/message.c:1090
#, c-format
msgid "You missed %s!"
msgstr ""
-#: src/message.c:1091
+#: src/message.c:1096
#, c-format
msgid "%s shoots %s dead."
msgstr ""
-#: src/message.c:1094
-#, c-format
-msgid "%s shoots at %s and kills a %s!"
+#: src/message.c:1099
+msgid "%s shoots at %s and kills a %tde!"
msgstr ""
-#: src/message.c:1097
+#: src/message.c:1104
#, c-format
msgid "%s shoots at %s."
msgstr ""
-#: src/message.c:1102
+#: src/message.c:1109
#, c-format
msgid "%s wasted you, man! What a drag!"
msgstr ""
-#: src/message.c:1105
-#, c-format
-msgid "%s shoots at you... and kills a %s!"
+#: src/message.c:1113
+msgid "%s shoots at you... and kills a %tde!"
msgstr ""
-#: src/message.c:1108
+#: src/message.c:1118
#, c-format
msgid "%s hits you, man!"
msgstr ""
-#: src/message.c:1112
+#: src/message.c:1122
#, c-format
msgid "You killed %s!"
msgstr ""
-#: src/message.c:1114
-#, c-format
-msgid "You hit %s, and killed a %s!"
+#: src/message.c:1124
+msgid "You hit %s, and killed a %tde!"
msgstr ""
-#: src/message.c:1117
+#: src/message.c:1129
#, c-format
msgid "You hit %s!"
msgstr ""
-#: src/message.c:1120
+#: src/message.c:1132
msgid " You loot the body!"
msgstr ""
-#: src/message.c:1123
+#: src/message.c:1135
#, c-format
msgid " (Health: %d)"
msgstr ""
(DIR) diff --git a/src/Makefile.am b/src/Makefile.am
t@@ -1,7 +1,7 @@
bin_PROGRAMS = dopewars
dopewars_SOURCES = AIPlayer.c serverside.c dopewars.c message.c \
curses_client.c gtk_client.c win32_client.c \
- dopeos.c @WIN_RC@
+ dopeos.c tstring.c @WIN_RC@
dopewars_DEPENDENCIES = @WIN_RES@
SUFFIXES = .rc .res
INCLUDES = @GTK_CFLAGS@ -I.. -I.
(DIR) diff --git a/src/Makefile.in b/src/Makefile.in
t@@ -90,7 +90,7 @@ l = @l@
localedir = @localedir@
bin_PROGRAMS = dopewars
-dopewars_SOURCES = AIPlayer.c serverside.c dopewars.c message.c curses_client.c gtk_client.c win32_client.c dopeos.c @WIN_RC@
+dopewars_SOURCES = AIPlayer.c serverside.c dopewars.c message.c curses_client.c gtk_client.c win32_client.c dopeos.c tstring.c @WIN_RC@
dopewars_DEPENDENCIES = @WIN_RES@
SUFFIXES = .rc .res
t@@ -110,7 +110,7 @@ CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
dopewars_OBJECTS = AIPlayer.o serverside.o dopewars.o message.o \
-curses_client.o gtk_client.o win32_client.o dopeos.o
+curses_client.o gtk_client.o win32_client.o dopeos.o tstring.o
dopewars_LDADD = $(LDADD)
dopewars_LDFLAGS =
CFLAGS = @CFLAGS@
t@@ -126,7 +126,7 @@ TAR = gtar
GZIP_ENV = --best
DEP_FILES = .deps/AIPlayer.P .deps/curses_client.P .deps/dopeos.P \
.deps/dopewars.P .deps/gtk_client.P .deps/message.P .deps/serverside.P \
-.deps/win32_client.P
+.deps/tstring.P .deps/win32_client.P
SOURCES = $(dopewars_SOURCES)
OBJECTS = $(dopewars_OBJECTS)
(DIR) diff --git a/src/gtk_client.c b/src/gtk_client.c
t@@ -34,6 +34,7 @@
#include "gtk_client.h"
#include "message.h"
#include "serverside.h"
+#include "tstring.h"
#define BT_BUY (GINT_TO_POINTER(1))
#define BT_SELL (GINT_TO_POINTER(2))
t@@ -202,7 +203,6 @@ void ListScores(GtkWidget *widget,gpointer data) {
void ListInventory(GtkWidget *widget,gpointer data) {
GtkWidget *window,*button,*hsep,*vbox,*hbox;
GtkAccelGroup *accel_group;
- gchar *caps;
if (IsShowingInventory) return;
window=gtk_window_new(GTK_WINDOW_DIALOG);
t@@ -225,12 +225,10 @@ void ListInventory(GtkWidget *widget,gpointer data) {
vbox=gtk_vbox_new(FALSE,7);
hbox=gtk_hbox_new(FALSE,7);
- caps=InitialCaps(Names.Drugs);
- CreateInventory(hbox,caps,accel_group,FALSE,FALSE,
- &ClientData.InvenDrug,NULL); g_free(caps);
- caps=InitialCaps(Names.Guns);
- CreateInventory(hbox,caps,accel_group,FALSE,FALSE,
- &ClientData.InvenGun,NULL); g_free(caps);
+ CreateInventory(hbox,Names.Drugs,accel_group,FALSE,FALSE,
+ &ClientData.InvenDrug,NULL);
+ CreateInventory(hbox,Names.Guns,accel_group,FALSE,FALSE,
+ &ClientData.InvenGun,NULL);
gtk_box_pack_start(GTK_BOX(vbox),hbox,TRUE,TRUE,0);
t@@ -290,6 +288,7 @@ void HandleClientMessage(char *pt,Player *Play) {
gboolean Handled;
GtkWidget *MenuItem;
GSList *list;
+ gchar *tfmt,**tstr;
if (ProcessMessage(pt,Play,&From,&AICode,&Code,&Data,FirstClient)==-1) {
return;
t@@ -358,9 +357,11 @@ void HandleClientMessage(char *pt,Player *Play) {
tmp=(Player *)list->data;
tmp->Flags &= ~FIGHTING;
}
- text=g_strdup_printf(_("Jetting to %s"),
- Location[(int)Play->IsAt].Name);
+ tstring_fmt(&tfmt,&tstr,_("Jetting to %tde"),
+ Location[(int)Play->IsAt].Name);
+ text=g_strdup_printf(tfmt,tstr[0]);
PrintMessage(text); g_free(text);
+ tstring_free(tfmt,tstr);
break;
case C_ENDLIST:
MenuItem=gtk_item_factory_get_widget(ClientData.Menu,
t@@ -513,6 +514,7 @@ static void CreateFightDialog() {
GtkAdjustment *adj;
GtkAccelGroup *accel_group;
gchar *buf;
+ gchar *tfmt,**tstr;
FightDialog=dialog=gtk_window_new(GTK_WINDOW_DIALOG);
gtk_signal_connect(GTK_OBJECT(dialog),"delete_event",
t@@ -547,7 +549,9 @@ static void CreateFightDialog() {
gtk_widget_show(hsep);
hbbox=gtk_hbutton_box_new();
- buf=g_strdup_printf(_("_Deal %s"),Names.Drugs);
+ tstring_fmt(&tfmt,&tstr,_("_Deal %Tde"),Names.Drugs);
+ buf=g_strdup_printf(tfmt,tstr[0]);
+ tstring_free(tfmt,tstr);
button=AddFightButton(buf,accel_group,GTK_BOX(hbbox),'D');
gtk_widget_show(button);
t@@ -610,8 +614,9 @@ void DisplayFightMessage(char *Data) {
}
void DisplayStats(Player *Play,struct StatusWidgets *Status) {
- gchar *prstr,*caps;
+ gchar *prstr;
GString *text;
+ gchar *tfmt,**tstr;
text=g_string_new(NULL);
t@@ -636,16 +641,16 @@ void DisplayStats(Player *Play,struct StatusWidgets *Status) {
gtk_label_set_text(GTK_LABEL(Status->DebtValue),prstr);
g_free(prstr);
- caps=InitialCaps(Names.Guns);
- gtk_label_set_text(GTK_LABEL(Status->GunsName),caps);
- g_free(caps);
+ tstring_fmt(&tfmt,&tstr,_("**Stats: Guns** %Tde"),Names.Guns);
+ gtk_label_set_text(GTK_LABEL(Status->GunsName),tstr[0]);
+ tstring_free(tfmt,tstr);
g_string_sprintf(text,"%d",TotalGunsCarried(Play));
gtk_label_set_text(GTK_LABEL(Status->GunsValue),text->str);
if (!WantAntique) {
- caps=InitialCaps(Names.Bitches);
- gtk_label_set_text(GTK_LABEL(Status->BitchesName),caps);
- g_free(caps);
+ tstring_fmt(&tfmt,&tstr,_("**Stats: Bitches** %Tde"),Names.Bitches);
+ gtk_label_set_text(GTK_LABEL(Status->BitchesName),tstr[0]);
+ tstring_free(tfmt,tstr);
g_string_sprintf(text,"%d",Play->Bitches.Carried);
gtk_label_set_text(GTK_LABEL(Status->BitchesValue),text->str);
} else {
t@@ -868,6 +873,7 @@ static void UpdateDealDialog() {
GtkAdjustment *spin_adj;
gint DrugInd,CanDrop,CanCarry,CanAfford,MaxDrug;
Player *Play;
+ gchar *tfmt,**tstr;
text=g_string_new(NULL);
DrugInd=DealDialog.DrugInd;
t@@ -879,8 +885,10 @@ static void UpdateDealDialog() {
gtk_label_set_text(GTK_LABEL(DealDialog.cost),text->str);
CanDrop=Play->Drugs[DrugInd].Carried;
- g_string_sprintf(text,_("You are currently carrying %d %s"),
- CanDrop,Drug[DrugInd].Name);
+ tstring_fmt(&tfmt,&tstr,_("You are currently carrying %d %tde"),
+ Drug[DrugInd].Name);
+ g_string_sprintf(text,tfmt,CanDrop,tstr[0]);
+ tstring_free(tfmt,tstr);
gtk_label_set_text(GTK_LABEL(DealDialog.carrying),text->str);
CanCarry=Play->CoatSize;
t@@ -1028,7 +1036,13 @@ void DealDrugs(GtkWidget *widget,gpointer data) {
gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,0);
}
hbox=gtk_hbox_new(FALSE,7);
- g_string_sprintf(text,_("%s how many?"),Action);
+ if (data==BT_BUY) {
+ g_string_sprintf(text,_("Buy how many?"));
+ } else if (data==BT_SELL) {
+ g_string_sprintf(text,_("Sell how many?"));
+ } else {
+ g_string_sprintf(text,_("Drop how many?"));
+ }
label=gtk_label_new(text->str);
gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);
spin_adj=(GtkAdjustment *)gtk_adjustment_new(1.0,1.0,2.0,1.0,10.0,10.0);
t@@ -1067,6 +1081,7 @@ void DealGuns(GtkWidget *widget,gpointer data) {
gint row,GunInd;
gchar *Action,*Title;
GString *text;
+ gchar *tfmt,**tstr;
dialog=gtk_widget_get_ancestor(widget,GTK_TYPE_WINDOW);
if (data==BT_BUY) Action=_("Buy");
t@@ -1081,24 +1096,39 @@ void DealGuns(GtkWidget *widget,gpointer data) {
GunInd=GPOINTER_TO_INT(gtk_clist_get_row_data(GTK_CLIST(clist),row));
} else return;
- Title=g_strdup_printf("%s %s",Action,Names.Guns);
+
+ if (data==BT_BUY) tstring_fmt(&tfmt,&tstr,_("Buy %tde"),Names.Guns);
+ else if (data==BT_SELL) tstring_fmt(&tfmt,&tstr,_("Sell %tde"),Names.Guns);
+ else tstring_fmt(&tfmt,&tstr,_("Drop %tde"),Names.Guns);
+ Title=g_strdup_printf(tfmt,tstr[0]);
+ tstring_free(tfmt,tstr);
text=g_string_new("");
if (data!=BT_BUY && TotalGunsCarried(ClientData.Play)==0) {
- g_string_sprintf(text,_("You don't have any %s!"),Names.Guns);
+ tstring_fmt(&tfmt,&tstr,_("You don't have any %tde!"),Names.Guns);
+ g_string_sprintf(text,tfmt,tstr[0]);
+ tstring_free(tfmt,tstr);
MessageBox(dialog,Title,text->str,MB_OK);
} else if (data==BT_BUY && TotalGunsCarried(ClientData.Play) >=
ClientData.Play->Bitches.Carried+2) {
- g_string_sprintf(text,_("You'll need more %s to carry any more %s!"),
- Names.Bitches,Names.Guns);
+ tstring_fmt(&tfmt,&tstr,
+ _("You'll need more %tde to carry any more %tde!"),
+ Names.Bitches,Names.Guns);
+ g_string_sprintf(text,tfmt,tstr[0],tstr[1]);
+ tstring_free(tfmt,tstr);
MessageBox(dialog,Title,text->str,MB_OK);
} else if (data==BT_BUY && Gun[GunInd].Space > ClientData.Play->CoatSize) {
- g_string_sprintf(text,_("You don't have enough space to carry that %s!"),
- Names.Gun);
+ tstring_fmt(&tfmt,&tstr,
+ _("You don't have enough space to carry that %tde!"),
+ Names.Gun);
+ g_string_sprintf(text,tfmt,tstr[0]);
+ tstring_free(tfmt,tstr);
MessageBox(dialog,Title,text->str,MB_OK);
} else if (data==BT_BUY && Gun[GunInd].Price > ClientData.Play->Cash) {
- g_string_sprintf(text,_("You don't have enough cash to buy that %s!"),
- Names.Gun);
+ tstring_fmt(&tfmt,&tstr,
+ _("You don't have enough cash to buy that %tde!"),Names.Gun);
+ g_string_sprintf(text,tfmt,tstr[0]);
+ tstring_free(tfmt,tstr);
MessageBox(dialog,Title,text->str,MB_OK);
} else if (data==BT_SELL && ClientData.Play->Guns[GunInd].Carried == 0) {
MessageBox(dialog,Title,_("You don't have any to sell!"),MB_OK);
t@@ -1341,7 +1371,6 @@ char GtkLoop(int *argc,char **argv[],char ReturnOnFail) {
GtkAccelGroup *accel_group;
GtkItemFactory *item_factory;
GtkAdjustment *adj;
- gchar *buf;
gint nmenu_items = sizeof(menu_items) / sizeof(menu_items[0]);
gtk_set_locale();
t@@ -1406,9 +1435,8 @@ char GtkLoop(int *argc,char **argv[],char ReturnOnFail) {
gtk_paned_pack1(GTK_PANED(vpaned),hbox,TRUE,TRUE);
hbox=gtk_hbox_new(FALSE,7);
- buf=InitialCaps(Names.Drugs);
- CreateInventory(hbox,buf,accel_group,TRUE,TRUE,&ClientData.Drug,
- DealDrugs); g_free(buf);
+ CreateInventory(hbox,Names.Drugs,accel_group,TRUE,TRUE,&ClientData.Drug,
+ DealDrugs);
clist=ClientData.Drug.HereList;
gtk_clist_column_titles_active(GTK_CLIST(clist));
gtk_clist_set_compare_func(GTK_CLIST(clist),DrugSortFunc);
t@@ -2240,6 +2268,7 @@ void TipOff(GtkWidget *widget,gpointer data) {
void ErrandDialog(gint ErrandType) {
GtkWidget *dialog,*clist,*button,*vbox,*hbbox,*hsep,*label;
gchar *text;
+ gchar *tfmt,**tstr;
dialog=gtk_window_new(GTK_WINDOW_DIALOG);
gtk_container_set_border_width(GTK_CONTAINER(dialog),7);
t@@ -2252,22 +2281,26 @@ void ErrandDialog(gint ErrandType) {
if (ErrandType==ET_SPY) {
gtk_window_set_title(GTK_WINDOW(dialog),_("Spy On Player"));
- text=g_strdup_printf(
-_("Please choose the player to spy on. Your %s will\n"
+ tstring_fmt(&tfmt,&tstr,
+_("Please choose the player to spy on. Your %tde will\n"
"then offer his services to the player, and if successful,\n"
"you will be able to view the player's stats with the\n"
-"\"Get spy reports\" menu. Remember that the %s will leave\n"
-"you, so any %s or %s that he's carrying may be lost!"),
+"\"Get spy reports\" menu. Remember that the %tde will leave\n"
+"you, so any %tde or %tde that he's carrying may be lost!"),
Names.Bitch,Names.Bitch,Names.Guns,Names.Drugs);
+ text=g_strdup_printf(tfmt,tstr[0],tstr[1],tstr[2],tstr[3]);
+ tstring_free(tfmt,tstr);
label=gtk_label_new(text); g_free(text);
} else {
gtk_window_set_title(GTK_WINDOW(dialog),_("Tip Off The Cops"));
- text=g_strdup_printf(
-_("Please choose the player to tip off the cops to. Your %s will\n"
+ tstring_fmt(&tfmt,&tstr,
+_("Please choose the player to tip off the cops to. Your %tde will\n"
"help the cops to attack that player, and then report back to you\n"
-"on the encounter. Remember that the %s will leave you temporarily,\n"
-"so any %s or %s that he's carrying may be lost!"),
+"on the encounter. Remember that the %tde will leave you temporarily,\n"
+"so any %tde or %tde that he's carrying may be lost!"),
Names.Bitch,Names.Bitch,Names.Guns,Names.Drugs);
+ text=g_strdup_printf(tfmt,tstr[0],tstr[1],tstr[2],tstr[3]);
+ tstring_free(tfmt,tstr);
label=gtk_label_new(text); g_free(text);
}
t@@ -2301,16 +2334,21 @@ Names.Bitch,Names.Bitch,Names.Guns,Names.Drugs);
}
void SackBitch(GtkWidget *widget,gpointer data) {
- char *caps,*title,*text;
- caps=InitialCaps(Names.Bitch);
- title=g_strdup_printf(_("Sack %s"),caps);
- text=g_strdup_printf(_("Are you sure? (Any %s or %s carried\n"
- "by this %s may be lost!)"),Names.Guns,
- Names.Drugs,Names.Bitch);
+ char *title,*text;
+ gchar *tfmt,**tstr;
+ tstring_fmt(&tfmt,&tstr,_("Sack %Tde"),Names.Bitch);
+ title=g_strdup_printf(tfmt,tstr[0]);
+ tstring_free(tfmt,tstr);
+ tstring_fmt(&tfmt,&tstr,
+ _("Are you sure? (Any %tde or %tde carried\n"
+ "by this %tde may be lost!)"),Names.Guns,
+ Names.Drugs,Names.Bitch);
+ text=g_strdup_printf(tfmt,tstr[0],tstr[1],tstr[2]);
+ tstring_free(tfmt,tstr);
if (MessageBox(ClientData.window,title,text,MB_YES|MB_NO)==MB_YES) {
SendClientMessage(ClientData.Play,C_NONE,C_SACKBITCH,NULL,NULL);
}
- g_free(caps); g_free(text); g_free(title);
+ g_free(text); g_free(title);
}
void CreateInventory(GtkWidget *hbox,gchar *Objects,GtkAccelGroup *accel_group,
t@@ -2323,6 +2361,7 @@ void CreateInventory(GtkWidget *hbox,gchar *Objects,GtkAccelGroup *accel_group,
gchar *titles[2][2];
gchar *button_text[3];
gpointer button_type[3] = { BT_BUY, BT_SELL, BT_DROP };
+ gchar *tfmt,**tstr;
titles[0][0]=titles[1][0]=_("Name");
titles[0][1]=_("Price");
t@@ -2335,10 +2374,14 @@ void CreateInventory(GtkWidget *hbox,gchar *Objects,GtkAccelGroup *accel_group,
text=g_string_new("");
if (CreateHere) {
- g_string_sprintf(text,_("%s here"),Objects);
+ tstring_fmt(&tfmt,&tstr,_("%Tde here"),Objects);
+ g_string_sprintf(text,tfmt,tstr[0]);
+ tstring_free(tfmt,tstr);
widgets->HereFrame=frame[0]=gtk_frame_new(text->str);
}
- g_string_sprintf(text,_("%s carried"),Objects);
+ tstring_fmt(&tfmt,&tstr,_("%Tde carried"),Objects);
+ g_string_sprintf(text,tfmt,tstr[0]);
+ tstring_free(tfmt,tstr);
widgets->CarriedFrame=frame[1]=gtk_frame_new(text->str);
widgets->HereList=widgets->CarriedList=NULL;
t@@ -2452,7 +2495,7 @@ void NewNameDialog() {
void GunShopDialog() {
GtkWidget *window,*button,*hsep,*vbox,*hbox;
GtkAccelGroup *accel_group;
- gchar *text;
+ gchar *tfmt,**tstr;
window=gtk_window_new(GTK_WINDOW_DIALOG);
gtk_window_set_default_size(GTK_WINDOW(window),600,190);
t@@ -2460,7 +2503,10 @@ void GunShopDialog() {
GTK_SIGNAL_FUNC(SendDoneMessage),NULL);
accel_group=gtk_accel_group_new();
gtk_window_add_accel_group(GTK_WINDOW(window),accel_group);
- gtk_window_set_title(GTK_WINDOW(window),Names.GunShopName);
+ tstring_fmt(&tfmt,&tstr,
+ _("**GunShop window title** %Tde"),Names.GunShopName);
+ gtk_window_set_title(GTK_WINDOW(window),tstr[0]);
+ tstring_free(tfmt,tstr);
gtk_window_set_modal(GTK_WINDOW(window),TRUE);
gtk_window_set_transient_for(GTK_WINDOW(window),
GTK_WINDOW(ClientData.window));
t@@ -2474,9 +2520,8 @@ void GunShopDialog() {
vbox=gtk_vbox_new(FALSE,7);
hbox=gtk_hbox_new(FALSE,7);
- text=InitialCaps(Names.Guns);
- CreateInventory(hbox,text,accel_group,TRUE,TRUE,&ClientData.Gun,
- DealGuns); g_free(text);
+ CreateInventory(hbox,Names.Guns,accel_group,TRUE,TRUE,&ClientData.Gun,
+ DealGuns);
gtk_box_pack_start(GTK_BOX(vbox),hbox,TRUE,TRUE,0);
t@@ -2544,7 +2589,6 @@ static void CreateSpyReports() {
void DisplaySpyReports(Player *Play) {
GtkWidget *dialog,*notebook,*vbox,*hbox,*frame,*label,*table;
GtkAccelGroup *accel_group;
- gchar *caps;
struct StatusWidgets Status;
struct InventoryWidgets SpyDrugs,SpyGuns;
t@@ -2561,12 +2605,8 @@ void DisplaySpyReports(Player *Play) {
gtk_box_pack_start(GTK_BOX(vbox),frame,FALSE,FALSE,0);
hbox=gtk_hbox_new(FALSE,5);
- caps=InitialCaps(Names.Drugs);
- CreateInventory(hbox,caps,accel_group,FALSE,FALSE,&SpyDrugs,NULL);
- g_free(caps);
- caps=InitialCaps(Names.Guns);
- CreateInventory(hbox,caps,accel_group,FALSE,FALSE,&SpyGuns,NULL);
- g_free(caps);
+ CreateInventory(hbox,Names.Drugs,accel_group,FALSE,FALSE,&SpyDrugs,NULL);
+ CreateInventory(hbox,Names.Guns,accel_group,FALSE,FALSE,&SpyGuns,NULL);
gtk_box_pack_start(GTK_BOX(vbox),hbox,TRUE,TRUE,0);
label=gtk_label_new(GetPlayerName(Play));
(DIR) diff --git a/src/message.c b/src/message.c
t@@ -38,6 +38,7 @@
#include "dopeos.h"
#include "dopewars.h"
#include "serverside.h"
+#include "tstring.h"
#include "message.h"
/* Maximum sizes (in bytes) of read and write buffers - connections should
t@@ -1044,6 +1045,7 @@ void FormatFightMessage(Player *To,GString *text,
int Bitches,int BitchesKilled,int ArmPercent,
gchar FightPoint,gboolean Loot) {
gchar *Armament;
+ gchar *tfmt,**tstr;
switch(FightPoint) {
case F_ARRIVED:
Armament= ArmPercent<10 ? _("pitifully armed") :
t@@ -1052,8 +1054,10 @@ void FormatFightMessage(Player *To,GString *text,
ArmPercent<80 ? _("heavily armed") :
_("armed to the teeth");
if (DefendName[0]) {
- g_string_sprintfa(text,_("%s arrives with %d %s, %s!"),
- DefendName,Bitches,Names.Bitches,Armament);
+ tstring_fmt(&tfmt,&tstr,_("%s arrives with %d %tde, %s!"),
+ Names.Bitches);
+ g_string_sprintfa(text,tfmt,DefendName,Bitches,tstr[0],Armament);
+ tstring_free(tfmt,tstr);
}
break;
case F_STAND:
t@@ -1092,8 +1096,10 @@ void FormatFightMessage(Player *To,GString *text,
g_string_sprintfa(text,_("%s shoots %s dead."),
AttackName,DefendName);
} else if (BitchesKilled) {
- g_string_sprintfa(text,_("%s shoots at %s and kills a %s!"),
- AttackName,DefendName,Names.Bitch);
+ tstring_fmt(&tfmt,&tstr,_("%s shoots at %s and kills a %tde!"),
+ Names.Bitch);
+ g_string_sprintfa(text,tfmt,AttackName,DefendName,tstr[0]);
+ tstring_free(tfmt,tstr);
} else {
g_string_sprintfa(text,_("%s shoots at %s."),
AttackName,DefendName);
t@@ -1103,8 +1109,11 @@ void FormatFightMessage(Player *To,GString *text,
g_string_sprintfa(text,_("%s wasted you, man! What a drag!"),
AttackName);
} else if (BitchesKilled) {
- g_string_sprintfa(text,_("%s shoots at you... and kills a %s!"),
- AttackName,Names.Bitch);
+ tstring_fmt(&tfmt,&tstr,
+ _("%s shoots at you... and kills a %tde!"),
+ Names.Bitch);
+ g_string_sprintfa(text,tfmt,AttackName,tstr[0]);
+ tstring_free(tfmt,tstr);
} else {
g_string_sprintfa(text,_("%s hits you, man!"),AttackName);
}
t@@ -1112,8 +1121,10 @@ void FormatFightMessage(Player *To,GString *text,
if (Health==0 && Bitches==0) {
g_string_sprintfa(text,_("You killed %s!"),DefendName);
} else if (BitchesKilled) {
- g_string_sprintfa(text,_("You hit %s, and killed a %s!"),
- DefendName,Names.Bitch);
+ tstring_fmt(&tfmt,&tstr,_("You hit %s, and killed a %tde!"),
+ Names.Bitch);
+ g_string_sprintfa(text,tfmt,DefendName,tstr[0]);
+ tstring_free(tfmt,tstr);
} else {
g_string_sprintfa(text,_("You hit %s!"),DefendName);
}
(DIR) diff --git a/src/message.h b/src/message.h
t@@ -72,10 +72,6 @@
#define C_CHANGEDISP 'p'
#define C_NETMESSAGE 'q'
#define C_ABILITIES 'r'
-#define C_FIGHTARRIVE 's'
-#define C_FIGHTSHOOT 't'
-#define C_FIGHTLEAVE 'u'
-#define C_FIGHTRELOAD 'v'
#define C_NONE 'A'
#define C_ASKLOAN 'B'
(DIR) diff --git a/src/serverside.c b/src/serverside.c
t@@ -35,9 +35,10 @@
#include <stdlib.h>
#include <glib.h>
#include "dopeos.h"
-#include "serverside.h"
#include "dopewars.h"
#include "message.h"
+#include "serverside.h"
+#include "tstring.h"
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
t@@ -1012,6 +1013,8 @@ void SendEvent(Player *To) {
Player *Play;
GSList *list;
gchar *prstr;
+ gchar *tfmt,**tstr;
+
if (!To) return;
if (To->EventNum==E_MAX) To->EventNum=E_NONE;
if (To->EventNum==E_NONE || To->EventNum>=E_OUTOFSYNC) return;
t@@ -1043,10 +1046,13 @@ void SendEvent(Player *To) {
brandom(0,100)<10+To->SpyList.Data[i].Turns) {
if (TotalGunsCarried(To) > 0) j=brandom(0,NUMDISCOVER);
else j=brandom(0,NUMDISCOVER-1);
- text=g_strdup_printf(_("One of your %s was spying for %s."
- "^The spy %s!"),Names.Bitches,
+ tstring_fmt(&tfmt,&tstr,
+ _("One of your %tde was spying for %s."
+ "^The spy %s!"),Names.Bitches);
+ text=g_strdup_printf(tfmt,tstr[0],
GetPlayerName(To->SpyList.Data[i].Play),
_(Discover[j]));
+ tstring_free(tfmt,tstr);
if (j!=DEFECT) LoseBitch(To,NULL,NULL);
SendPlayerData(To);
SendPrintMessage(NULL,C_NONE,To,text);
t@@ -1088,8 +1094,10 @@ void SendEvent(Player *To) {
break;
case E_LOANSHARK:
if (To->IsAt+1==LoanSharkLoc && To->Debt>0) {
- text=g_strdup_printf(_("YN^Would you like to visit %s?"),
- Names.LoanSharkName);
+ tstring_fmt(&tfmt,&tstr,_("YN^Would you like to visit %tde?"),
+ Names.LoanSharkName);
+ text=g_strdup_printf(tfmt,tstr[0]);
+ tstring_free(tfmt,tstr);
SendQuestion(NULL,C_ASKLOAN,To,text);
g_free(text);
return;
t@@ -1097,8 +1105,10 @@ void SendEvent(Player *To) {
break;
case E_BANK:
if (To->IsAt+1==BankLoc) {
- text=g_strdup_printf(_("YN^Would you like to visit %s?"),
- Names.BankName);
+ tstring_fmt(&tfmt,&tstr,_("YN^Would you like to visit %tde?"),
+ Names.BankName);
+ text=g_strdup_printf(tfmt,tstr[0]);
+ tstring_free(tfmt,tstr);
SendQuestion(NULL,C_ASKBANK,To,text);
g_free(text);
return;
t@@ -1106,8 +1116,10 @@ void SendEvent(Player *To) {
break;
case E_GUNSHOP:
if (To->IsAt+1==GunShopLoc && !Sanitized && !WantAntique) {
- text=g_strdup_printf(_("YN^Would you like to visit %s?"),
- Names.GunShopName);
+ tstring_fmt(&tfmt,&tstr,_("YN^Would you like to visit %tde?"),
+ Names.GunShopName);
+ text=g_strdup_printf(tfmt,tstr[0]);
+ tstring_free(tfmt,tstr);
SendQuestion(NULL,C_ASKGUNSHOP,To,text);
g_free(text);
return;
t@@ -1115,8 +1127,10 @@ void SendEvent(Player *To) {
break;
case E_ROUGHPUB:
if (To->IsAt+1==RoughPubLoc && !WantAntique) {
- text=g_strdup_printf(_("YN^Would you like to visit %s?"),
- Names.RoughPubName);
+ tstring_fmt(&tfmt,&tstr,_("YN^Would you like to visit %tde?"),
+ Names.RoughPubName);
+ text=g_strdup_printf(tfmt,tstr[0]);
+ tstring_free(tfmt,tstr);
SendQuestion(NULL,C_ASKPUB,To,text);
g_free(text);
return;
t@@ -1125,10 +1139,12 @@ void SendEvent(Player *To) {
case E_HIREBITCH:
if (To->IsAt+1==RoughPubLoc && !WantAntique) {
To->Bitches.Price=brandom(Bitch.MinPrice,Bitch.MaxPrice);
- text=g_strdup_printf(
- _("YN^^Would you like to hire %s %s for %s?"),
- StartsWithVowel(Names.Bitch) ? _("an") : _("a"),
- Names.Bitch,prstr=FormatPrice(To->Bitches.Price));
+ tstring_fmt(&tfmt,&tstr,
+ _("YN^^Would you like to hire a %tde for %s?"),
+ Names.Bitch);
+ text=g_strdup_printf(tfmt,tstr[0],
+ prstr=FormatPrice(To->Bitches.Price));
+ tstring_free(tfmt,tstr);
SendQuestion(NULL,C_ASKBITCH,To,text);
g_free(text); g_free(prstr);
return;
(DIR) diff --git a/src/tstring.c b/src/tstring.c
t@@ -0,0 +1,110 @@
+/* tstring.c "Translated string" wrappers for dopewars */
+/* Copyright (C) 1998-2000 Ben Webb */
+/* Email: ben@bellatrix.pcl.ox.ac.uk */
+/* WWW: http://bellatrix.pcl.ox.ac.uk/~ben/dopewars/ */
+
+/* This program is free software; you can redistribute it and/or */
+/* modify it under the terms of the GNU General Public License */
+/* as published by the Free Software Foundation; either version 2 */
+/* of the License, or (at your option) any later version. */
+
+/* This program is distributed in the hope that it will be useful, */
+/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
+/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
+/* GNU General Public License for more details. */
+
+/* You should have received a copy of the GNU General Public License */
+/* along with this program; if not, write to the Free Software */
+/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, */
+/* MA 02111-1307, USA. */
+
+
+#include <stdio.h>
+#include <stdarg.h>
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib.h>
+#include "dopewars.h"
+#include "message.h"
+#include "tstring.h"
+
+gchar *GetTranslatedString(gchar *str,gchar *code,gboolean Caps) {
+ gchar *dstr,*pt,*tstr,*Default,*tcode;
+
+ dstr=g_strdup(str);
+ g_strdelimit(dstr,"_",'^');
+ pt=dstr;
+ Default=GetNextWord(&pt,"");
+ tstr=NULL;
+
+ while(1) {
+ tcode=GetNextWord(&pt,NULL);
+ tstr=GetNextWord(&pt,"");
+ if (!tcode) { tstr=NULL; break; }
+ if (strcmp(tcode,code)==0) {
+ break;
+ } else tstr=NULL;
+ }
+
+ if (tstr) {
+ if (Caps) tstr=InitialCaps(tstr); else tstr=g_strdup(tstr);
+ } else {
+ if (Caps) tstr=InitialCaps(Default); else tstr=g_strdup(Default);
+ }
+
+ g_free(dstr);
+ return tstr;
+}
+
+void tstring_fmt(gchar **tformat,gchar ***tstrings,char *OrigFormat, ...) {
+ va_list ap;
+ GString *text;
+ int i;
+ gchar *str,*tstr,code[3],**strings;
+ GPtrArray *ptrarr;
+ gboolean Caps;
+
+ text=g_string_new("");
+ va_start(ap,OrigFormat);
+ ptrarr=g_ptr_array_new();
+
+ i=0;
+ while (i<strlen(OrigFormat)) {
+ g_string_append_c(text,OrigFormat[i]);
+ if (OrigFormat[i]=='%') {
+ i++;
+ if ((OrigFormat[i]=='T' || OrigFormat[i]=='t')
+ && i+2<strlen(OrigFormat)) {
+ Caps = (OrigFormat[i]=='T');
+ code[0]=OrigFormat[i+1];
+ code[1]=OrigFormat[i+2];
+ code[2]='\0';
+ i+=3;
+ g_string_append_c(text,'s');
+ str=va_arg(ap,char *);
+ tstr=GetTranslatedString(str,code,Caps);
+ g_ptr_array_add(ptrarr,(gpointer)tstr);
+ }
+ } else i++;
+ }
+ va_end(ap);
+ *tformat=text->str;
+ strings=g_new(char *,ptrarr->len+10);
+ for (i=0;i<ptrarr->len;i++) {
+ strings[i]=(gchar *)g_ptr_array_index(ptrarr,i);
+ }
+ strings[ptrarr->len]=NULL;
+ g_ptr_array_free(ptrarr,FALSE);
+ *tstrings=strings;
+ g_string_free(text,FALSE);
+}
+
+void tstring_free(gchar *tformat,gchar **tstrings) {
+ gchar **pt;
+ g_free(tformat);
+ for (pt=tstrings;*pt;pt++) g_free(*pt);
+ g_free(tstrings);
+}
(DIR) diff --git a/src/tstring.h b/src/tstring.h
t@@ -0,0 +1,33 @@
+/* tstring.h "Translated string" wrappers for dopewars */
+/* Copyright (C) 1998-2000 Ben Webb */
+/* Email: ben@bellatrix.pcl.ox.ac.uk */
+/* WWW: http://bellatrix.pcl.ox.ac.uk/~ben/dopewars/ */
+
+/* This program is free software; you can redistribute it and/or */
+/* modify it under the terms of the GNU General Public License */
+/* as published by the Free Software Foundation; either version 2 */
+/* of the License, or (at your option) any later version. */
+
+/* This program is distributed in the hope that it will be useful, */
+/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
+/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
+/* GNU General Public License for more details. */
+
+/* You should have received a copy of the GNU General Public License */
+/* along with this program; if not, write to the Free Software */
+/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, */
+/* MA 02111-1307, USA. */
+
+#ifndef __TSTRING_H__
+#define __TSTRING_H__
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib.h>
+
+void tstring_fmt(gchar **tformat,gchar ***tstrings,char *OrigFormat, ...);
+void tstring_free(gchar *tformat,gchar **tstrings);
+
+#endif /* __TSTRING_H__ */