tFully completed "translated-string" support; %P now supported for prices, too. - 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 4e3602017eea8f0f61368aa22b54d767b22a3f35
 (DIR) parent 1cf917eb25286179db182405ef1ce84a53486e28
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Sun,  8 Oct 2000 15:57:50 +0000
       
       Fully completed "translated-string" support; %P now supported for prices, too.
       
       
       Diffstat:
         M ChangeLog                           |       4 +++-
         M po/dopewars.pot                     |     964 +++++++++++++++----------------
         M src/AIPlayer.c                      |      32 ++++++++++++-------------------
         M src/curses_client.c                 |      47 +++++++++++++------------------
         M src/dopewars.c                      |       9 ++++-----
         M src/gtk_client.c                    |      53 +++++++++++++++----------------
         M src/message.c                       |      12 ++++--------
         M src/serverside.c                    |      34 +++++++++++++------------------
         M src/tstring.c                       |     227 ++++++++++++++++++-------------
         M src/tstring.h                       |       1 +
         M src/win32_client.c                  |      50 ++++++++++---------------------
       
       11 files changed, 706 insertions(+), 727 deletions(-)
       ---
 (DIR) diff --git a/ChangeLog b/ChangeLog
       t@@ -1,7 +1,9 @@
        1.4.9
            - Completely rewritten fighting code
       -    - Tense and case-sensitive translated strings
            - Internationalization (i18n) support
       +    - Tense and case-sensitive translated strings handled via. dpg_ analogues
       +      to glib's g_ string handling functions %P = price,
       +      %Txx or %txx = tense-sensitive string
            - Networking revamped - now uses nonblocking sockets to improve server
              responsiveness and to remove deadlocks (previously, any client could
              halt server by sending an unterminated message); "abilities" added to
 (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 22:34+0100\n"
       +"POT-Creation-Date: 2000-10-08 16:52+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@@ -14,781 +14,780 @@ msgstr ""
        "Content-Type: text/plain; charset=CHARSET\n"
        "Content-Transfer-Encoding: ENCODING\n"
        
       -#: src/dopewars.c:108
       +#: src/dopewars.c:109
        msgid "bitch"
        msgstr ""
        
       -#: src/dopewars.c:108
       +#: src/dopewars.c:109
        msgid "bitches"
        msgstr ""
        
       -#: src/dopewars.c:108
       +#: src/dopewars.c:109
        msgid "gun"
        msgstr ""
        
       -#: src/dopewars.c:108
       +#: src/dopewars.c:109
        msgid "guns"
        msgstr ""
        
       -#: src/dopewars.c:108
       +#: src/dopewars.c:109
        msgid "drug"
        msgstr ""
        
       -#: src/dopewars.c:108
       +#: src/dopewars.c:109
        msgid "drugs"
        msgstr ""
        
       -#: src/dopewars.c:109
       +#: src/dopewars.c:110
        msgid "12-"
        msgstr ""
        
       -#: src/dopewars.c:109
       +#: src/dopewars.c:110
        msgid "-1984"
        msgstr ""
        
       -#: src/dopewars.c:110
       +#: src/dopewars.c:111
        msgid "Hardass"
        msgstr ""
        
       -#: src/dopewars.c:110
       +#: src/dopewars.c:111
        msgid "Bob"
        msgstr ""
        
       -#: src/dopewars.c:110
       +#: src/dopewars.c:111
        msgid "the Loan Shark"
        msgstr ""
        
       -#: src/dopewars.c:110
       +#: src/dopewars.c:111
        msgid "the Bank"
        msgstr ""
        
       -#: src/dopewars.c:111
       +#: src/dopewars.c:112
        msgid "Dan's House of Guns"
        msgstr ""
        
       -#: src/dopewars.c:111
       +#: src/dopewars.c:112
        msgid "the pub"
        msgstr ""
        
       -#: src/dopewars.c:127
       +#: src/dopewars.c:128
        msgid "Network port to connect to"
        msgstr ""
        
       -#: src/dopewars.c:130
       +#: src/dopewars.c:131
        msgid "Name of the high score file"
        msgstr ""
        
       -#: src/dopewars.c:131
       +#: src/dopewars.c:132
        msgid "Name of the server to connect to"
        msgstr ""
        
       -#: src/dopewars.c:134
       +#: src/dopewars.c:135
        msgid "Non-zero if server should report to a metaserver"
        msgstr ""
        
       -#: src/dopewars.c:137
       +#: src/dopewars.c:138
        msgid "Port for metaserver communication (client)"
        msgstr ""
        
       -#: src/dopewars.c:140
       +#: src/dopewars.c:141
        msgid "Port for metaserver communication (server)"
        msgstr ""
        
       -#: src/dopewars.c:143
       +#: src/dopewars.c:144
        msgid "Metaserver name to report server details to"
        msgstr ""
        
       -#: src/dopewars.c:146
       +#: src/dopewars.c:147
        msgid "Path of the CGI script on the metaserver (client)"
        msgstr ""
        
       -#: src/dopewars.c:149
       +#: src/dopewars.c:150
        msgid "Preferred hostname of your server machine"
        msgstr ""
        
       -#: src/dopewars.c:151
       +#: src/dopewars.c:152
        msgid "Authentication for LocalName with the metaserver"
        msgstr ""
        
       -#: src/dopewars.c:154
       +#: src/dopewars.c:155
        msgid "Server description, reported to the metaserver"
        msgstr ""
        
       -#: src/dopewars.c:157
       +#: src/dopewars.c:158
        msgid "Program used to display multi-page output"
        msgstr ""
        
       -#: src/dopewars.c:159
       +#: src/dopewars.c:160
        msgid "No. of game turns (if 0, game never ends)"
        msgstr ""
        
       -#: src/dopewars.c:161
       +#: src/dopewars.c:162
        msgid "Random events are sanitized"
        msgstr ""
        
       -#: src/dopewars.c:164
       +#: src/dopewars.c:165
        msgid "Non-zero if the total value of bought drugs should be stored"
        msgstr ""
        
       -#: src/dopewars.c:167
       +#: src/dopewars.c:168
        msgid "Be verbose in processing config file"
        msgstr ""
        
       -#: src/dopewars.c:169
       +#: src/dopewars.c:170
        msgid "Number of locations in the game"
        msgstr ""
        
       -#: src/dopewars.c:172
       +#: src/dopewars.c:173
        msgid "Number of guns in the game"
        msgstr ""
        
       -#: src/dopewars.c:174
       +#: src/dopewars.c:175
        msgid "Number of drugs in the game"
        msgstr ""
        
       -#: src/dopewars.c:176
       +#: src/dopewars.c:177
        msgid "Location of the Loan Shark"
        msgstr ""
        
       -#: src/dopewars.c:178
       +#: src/dopewars.c:179
        msgid "Location of the bank"
        msgstr ""
        
       -#: src/dopewars.c:180
       +#: src/dopewars.c:181
        msgid "Location of the gun shop"
        msgstr ""
        
       -#: src/dopewars.c:182
       +#: src/dopewars.c:183
        msgid "Location of the pub"
        msgstr ""
        
       -#: src/dopewars.c:185
       +#: src/dopewars.c:186
        msgid "Name of the loan shark"
        msgstr ""
        
       -#: src/dopewars.c:187
       +#: src/dopewars.c:188
        msgid "Name of the bank"
        msgstr ""
        
       -#: src/dopewars.c:189
       +#: src/dopewars.c:190
        msgid "Name of the gun shop"
        msgstr ""
        
       -#: src/dopewars.c:191
       +#: src/dopewars.c:192
        msgid "Name of the pub"
        msgstr ""
        
       -#: src/dopewars.c:193
       +#: src/dopewars.c:194
        msgid "Sort key for listing available drugs"
        msgstr ""
        
       -#: src/dopewars.c:196
       +#: src/dopewars.c:197
        msgid "No. of seconds in which to return fire"
        msgstr ""
        
       -#: src/dopewars.c:199
       +#: src/dopewars.c:200
        msgid "Players are disconnected after this many seconds"
        msgstr ""
        
       -#: src/dopewars.c:202
       +#: src/dopewars.c:203
        msgid "Time in seconds for connections to be made or broken"
        msgstr ""
        
       -#: src/dopewars.c:205
       +#: src/dopewars.c:206
        msgid "Maximum number of TCP/IP connections"
        msgstr ""
        
       -#: src/dopewars.c:208
       +#: src/dopewars.c:209
        msgid "Seconds between turns of AI players"
        msgstr ""
        
       -#: src/dopewars.c:211
       +#: src/dopewars.c:212
        msgid "Amount of cash that each player starts with"
        msgstr ""
        
       -#: src/dopewars.c:214
       +#: src/dopewars.c:215
        msgid "Amount of debt that each player starts with"
        msgstr ""
        
       -#: src/dopewars.c:216
       +#: src/dopewars.c:217
        msgid "Name of each location"
        msgstr ""
        
       -#: src/dopewars.c:220
       +#: src/dopewars.c:221
        msgid "Police presence at each location (%)"
        msgstr ""
        
       -#: src/dopewars.c:224
       +#: src/dopewars.c:225
        msgid "Minimum number of drugs at each location"
        msgstr ""
        
       -#: src/dopewars.c:228
       +#: src/dopewars.c:229
        msgid "Maximum number of drugs at each location"
        msgstr ""
        
       -#: src/dopewars.c:232
       +#: src/dopewars.c:233
        msgid "Name of each drug"
        msgstr ""
        
       -#: src/dopewars.c:236
       +#: src/dopewars.c:237
        msgid "Minimum normal price of each drug"
        msgstr ""
        
       -#: src/dopewars.c:240
       +#: src/dopewars.c:241
        msgid "Maximum normal price of each drug"
        msgstr ""
        
       -#: src/dopewars.c:244
       +#: src/dopewars.c:245
        msgid "Non-zero if this drug can be specially cheap"
        msgstr ""
        
       -#: src/dopewars.c:248
       +#: src/dopewars.c:249
        msgid "Non-zero if this drug can be specially expensive"
        msgstr ""
        
       -#: src/dopewars.c:252
       +#: src/dopewars.c:253
        msgid "Message displayed when this drug is specially cheap"
        msgstr ""
        
       -#: src/dopewars.c:256 src/dopewars.c:259
       +#: src/dopewars.c:257 src/dopewars.c:260
        #, c-format
        msgid "Format string used for expensive drugs 50% of time"
        msgstr ""
        
       -#: src/dopewars.c:262
       +#: src/dopewars.c:263
        msgid "Divider for drug price when it's specially cheap"
        msgstr ""
        
       -#: src/dopewars.c:265
       +#: src/dopewars.c:266
        msgid "Multiplier for specially expensive drug prices"
        msgstr ""
        
       -#: src/dopewars.c:268
       +#: src/dopewars.c:269
        msgid "Name of each gun"
        msgstr ""
        
       -#: src/dopewars.c:272
       +#: src/dopewars.c:273
        msgid "Price of each gun"
        msgstr ""
        
       -#: src/dopewars.c:276
       +#: src/dopewars.c:277
        msgid "Space taken by each gun"
        msgstr ""
        
       -#: src/dopewars.c:280
       +#: src/dopewars.c:281
        msgid "Damage done by each gun"
        msgstr ""
        
       -#: src/dopewars.c:284
       +#: src/dopewars.c:285
        #, c-format
        msgid "% probability of escaping from Officer Hardass"
        msgstr ""
        
       -#: src/dopewars.c:287
       +#: src/dopewars.c:288
        msgid "Modifier to EscapeProb for each extra deputy"
        msgstr ""
        
       -#: src/dopewars.c:290
       +#: src/dopewars.c:291
        #, c-format
        msgid "% probability that Officer Hardass hits you"
        msgstr ""
        
       -#: src/dopewars.c:293
       +#: src/dopewars.c:294
        msgid "Modifier to HitProb for each extra deputy"
        msgstr ""
        
       -#: src/dopewars.c:296
       +#: src/dopewars.c:297
        msgid "Maximum damage done to you by each cop"
        msgstr ""
        
       -#: src/dopewars.c:299
       +#: src/dopewars.c:300
        msgid "Toughness of (difficulty of hitting) each cop"
        msgstr ""
        
       -#: src/dopewars.c:302
       +#: src/dopewars.c:303
        #, c-format
        msgid "% probability that the cops catch you dropping drugs"
        msgstr ""
        
       -#: src/dopewars.c:305
       +#: src/dopewars.c:306
        msgid "Word used to denote a single \"bitch\""
        msgstr ""
        
       -#: src/dopewars.c:307
       +#: src/dopewars.c:308
        msgid "Word used to denote two or more \"bitches\""
        msgstr ""
        
       -#: src/dopewars.c:310
       +#: src/dopewars.c:311
        msgid "Word used to denote a single gun or equivalent"
        msgstr ""
        
       -#: src/dopewars.c:313
       +#: src/dopewars.c:314
        msgid "Word used to denote two or more guns"
        msgstr ""
        
       -#: src/dopewars.c:315
       +#: src/dopewars.c:316
        msgid "Word used to denote a single drug or equivalent"
        msgstr ""
        
       -#: src/dopewars.c:318
       +#: src/dopewars.c:319
        msgid "Word used to denote two or more drugs"
        msgstr ""
        
       -#: src/dopewars.c:320
       +#: src/dopewars.c:321
        msgid "Text prefixed to the turn number (i.e. the month)"
        msgstr ""
        
       -#: src/dopewars.c:323
       +#: src/dopewars.c:324
        msgid "Text appended to the turn number (i.e. the year)"
        msgstr ""
        
       -#: src/dopewars.c:326
       +#: src/dopewars.c:327
        msgid "Name of the police officer"
        msgstr ""
        
       -#: src/dopewars.c:328
       +#: src/dopewars.c:329
        msgid "Name of the reserve police officer"
        msgstr ""
        
       -#: src/dopewars.c:330
       +#: src/dopewars.c:331
        msgid "Cost for a bitch to spy on the enemy"
        msgstr ""
        
       -#: src/dopewars.c:333
       +#: src/dopewars.c:334
        msgid "Cost for a bitch to tipoff the cops to an enemy"
        msgstr ""
        
       -#: src/dopewars.c:336
       +#: src/dopewars.c:337
        msgid "Minimum price to hire a bitch"
        msgstr ""
        
       -#: src/dopewars.c:339
       +#: src/dopewars.c:340
        msgid "Maximum price to hire a bitch"
        msgstr ""
        
       -#: src/dopewars.c:342
       +#: src/dopewars.c:343
        msgid "List of things which you overhear on the subway"
        msgstr ""
        
       -#: src/dopewars.c:345
       +#: src/dopewars.c:346
        msgid "Number of subway sayings"
        msgstr ""
        
       -#: src/dopewars.c:348
       +#: src/dopewars.c:349
        msgid "List of songs which you can hear playing"
        msgstr ""
        
       -#: src/dopewars.c:351
       +#: src/dopewars.c:352
        msgid "Number of playing songs"
        msgstr ""
        
       -#: src/dopewars.c:354
       +#: src/dopewars.c:355
        msgid "List of things which you can stop to do"
        msgstr ""
        
       -#: src/dopewars.c:357
       +#: src/dopewars.c:358
        msgid "Number of things which you can stop to do"
        msgstr ""
        
       -#: src/dopewars.c:362
       +#: src/dopewars.c:363
        msgid "escaped"
        msgstr ""
        
       -#: src/dopewars.c:362
       +#: src/dopewars.c:363
        msgid "defected"
        msgstr ""
        
       -#: src/dopewars.c:362
       +#: src/dopewars.c:363
        msgid "was shot"
        msgstr ""
        
       -#: src/dopewars.c:366
       +#: src/dopewars.c:367
        msgid "`Are you Experienced` by Jimi Hendrix"
        msgstr ""
        
       -#: src/dopewars.c:367
       +#: src/dopewars.c:368
        msgid "`Cheeba Cheeba` by Tone Loc"
        msgstr ""
        
       -#: src/dopewars.c:368
       +#: src/dopewars.c:369
        msgid "`Comin` in to Los Angeles` by Arlo Guthrie"
        msgstr ""
        
       -#: src/dopewars.c:369
       +#: src/dopewars.c:370
        msgid "`Commercial` by Spanky and Our Gang"
        msgstr ""
        
       -#: src/dopewars.c:370
       +#: src/dopewars.c:371
        msgid "`Late in the Evening` by Paul Simon"
        msgstr ""
        
       -#: src/dopewars.c:371
       +#: src/dopewars.c:372
        msgid "`Light Up` by Styx"
        msgstr ""
        
       -#: src/dopewars.c:372
       +#: src/dopewars.c:373
        msgid "`Mexico` by Jefferson Airplane"
        msgstr ""
        
       -#: src/dopewars.c:373
       +#: src/dopewars.c:374
        msgid "`One toke over the line` by Brewer & Shipley"
        msgstr ""
        
       -#: src/dopewars.c:374
       +#: src/dopewars.c:375
        msgid "`The Smokeout` by Shel Silverstein"
        msgstr ""
        
       -#: src/dopewars.c:375
       +#: src/dopewars.c:376
        msgid "`White Rabbit` by Jefferson Airplane"
        msgstr ""
        
       -#: src/dopewars.c:376
       +#: src/dopewars.c:377
        msgid "`Itchycoo Park` by Small Faces"
        msgstr ""
        
       -#: src/dopewars.c:377
       +#: src/dopewars.c:378
        msgid "`White Punks on Dope` by the Tubes"
        msgstr ""
        
       -#: src/dopewars.c:378
       +#: src/dopewars.c:379
        msgid "`Legend of a Mind` by the Moody Blues"
        msgstr ""
        
       -#: src/dopewars.c:379
       +#: src/dopewars.c:380
        msgid "`Eight Miles High` by the Byrds"
        msgstr ""
        
       -#: src/dopewars.c:380
       +#: src/dopewars.c:381
        msgid "`Acapulco Gold` by Riders of the Purple Sage"
        msgstr ""
        
       -#: src/dopewars.c:381
       +#: src/dopewars.c:382
        msgid "`Kicks` by Paul Revere & the Raiders"
        msgstr ""
        
       -#: src/dopewars.c:382
       +#: src/dopewars.c:383
        msgid "the Nixon tapes"
        msgstr ""
        
       -#: src/dopewars.c:383
       +#: src/dopewars.c:384
        msgid "`Legalize It` by Mojo Nixon & Skid Roper"
        msgstr ""
        
       -#: src/dopewars.c:388
       +#: src/dopewars.c:389
        msgid "have a beer"
        msgstr ""
        
       -#: src/dopewars.c:389
       +#: src/dopewars.c:390
        msgid "smoke a joint"
        msgstr ""
        
       -#: src/dopewars.c:390
       +#: src/dopewars.c:391
        msgid "smoke a cigar"
        msgstr ""
        
       -#: src/dopewars.c:391
       +#: src/dopewars.c:392
        msgid "smoke a Djarum"
        msgstr ""
        
       -#: src/dopewars.c:392
       +#: src/dopewars.c:393
        msgid "smoke a cigarette"
        msgstr ""
        
       -#: src/dopewars.c:396
       +#: src/dopewars.c:397
        msgid "Baretta"
        msgstr ""
        
       -#: src/dopewars.c:397
       +#: src/dopewars.c:398
        msgid ".38 Special"
        msgstr ""
        
       -#: src/dopewars.c:398
       +#: src/dopewars.c:399
        msgid "Ruger"
        msgstr ""
        
       -#: src/dopewars.c:399
       +#: src/dopewars.c:400
        msgid "Saturday Night Special"
        msgstr ""
        
       -#: src/dopewars.c:403
       +#: src/dopewars.c:404
        msgid "Bronx"
        msgstr ""
        
       -#: src/dopewars.c:404
       +#: src/dopewars.c:405
        msgid "Ghetto"
        msgstr ""
        
       -#: src/dopewars.c:405
       +#: src/dopewars.c:406
        msgid "Central Park"
        msgstr ""
        
       -#: src/dopewars.c:406
       +#: src/dopewars.c:407
        msgid "Manhattan"
        msgstr ""
        
       -#: src/dopewars.c:407
       +#: src/dopewars.c:408
        msgid "Coney Island"
        msgstr ""
        
       -#: src/dopewars.c:408
       +#: src/dopewars.c:409
        msgid "Brooklyn"
        msgstr ""
        
       -#: src/dopewars.c:409
       +#: src/dopewars.c:410
        msgid "Queens"
        msgstr ""
        
       -#: src/dopewars.c:410
       +#: src/dopewars.c:411
        msgid "Staten Island"
        msgstr ""
        
       -#: src/dopewars.c:414
       +#: src/dopewars.c:415
        msgid "Acid"
        msgstr ""
        
       -#: src/dopewars.c:415
       +#: src/dopewars.c:416
        msgid "The market is flooded with cheap home-made acid!"
        msgstr ""
        
       -#: src/dopewars.c:416
       +#: src/dopewars.c:417
        msgid "Cocaine"
        msgstr ""
        
       -#: src/dopewars.c:417
       +#: src/dopewars.c:418
        msgid "Hashish"
        msgstr ""
        
       -#: src/dopewars.c:417
       +#: src/dopewars.c:418
        msgid "The Marrakesh Express has arrived!"
        msgstr ""
        
       -#: src/dopewars.c:418
       +#: src/dopewars.c:419
        msgid "Heroin"
        msgstr ""
        
       -#: src/dopewars.c:419
       +#: src/dopewars.c:420
        msgid "Ludes"
        msgstr ""
        
       -#: src/dopewars.c:420
       +#: src/dopewars.c:421
        msgid "Rival drug dealers raided a pharmacy and are selling cheap ludes!"
        msgstr ""
        
       -#: src/dopewars.c:421
       +#: src/dopewars.c:422
        msgid "MDA"
        msgstr ""
        
       -#: src/dopewars.c:422
       +#: src/dopewars.c:423
        msgid "Opium"
        msgstr ""
        
       -#: src/dopewars.c:423
       +#: src/dopewars.c:424
        msgid "PCP"
        msgstr ""
        
       -#: src/dopewars.c:424
       +#: src/dopewars.c:425
        msgid "Peyote"
        msgstr ""
        
       -#: src/dopewars.c:425
       +#: src/dopewars.c:426
        msgid "Shrooms"
        msgstr ""
        
       -#: src/dopewars.c:426
       +#: src/dopewars.c:427
        msgid "Speed"
        msgstr ""
        
       -#: src/dopewars.c:427
       +#: src/dopewars.c:428
        msgid "Weed"
        msgstr ""
        
       -#: src/dopewars.c:427
       +#: src/dopewars.c:428
        msgid ""
        "Columbian freighter dusted the Coast Guard! Weed prices have bottomed out!"
        msgstr ""
        
       -#: src/dopewars.c:433
       +#: src/dopewars.c:434
        #, c-format
        msgid "Cops made a big %s bust! Prices are outrageous!"
        msgstr ""
        
       -#: src/dopewars.c:434
       +#: src/dopewars.c:435
        #, c-format
        msgid "Addicts are buying %s at ridiculous prices!"
        msgstr ""
        
       -#: src/dopewars.c:439
       +#: src/dopewars.c:440
        msgid "Wouldn't it be funny if everyone suddenly quacked at once?"
        msgstr ""
        
       -#: src/dopewars.c:440
       +#: src/dopewars.c:441
        msgid "The Pope was once Jewish, you know"
        msgstr ""
        
       -#: src/dopewars.c:441
       +#: src/dopewars.c:442
        msgid "I'll bet you have some really interesting dreams"
        msgstr ""
        
       -#: src/dopewars.c:442
       +#: src/dopewars.c:443
        msgid "So I think I'm going to Amsterdam this year"
        msgstr ""
        
       -#: src/dopewars.c:443
       +#: src/dopewars.c:444
        msgid "Son, you need a yellow haircut"
        msgstr ""
        
       -#: src/dopewars.c:444
       +#: src/dopewars.c:445
        msgid "I think it's wonderful what they're doing with incense these days"
        msgstr ""
        
       -#: src/dopewars.c:445
       +#: src/dopewars.c:446
        msgid "I wasn't always a woman, you know"
        msgstr ""
        
       -#: src/dopewars.c:446
       +#: src/dopewars.c:447
        msgid "Does your mother know you're a dope dealer?"
        msgstr ""
        
       -#: src/dopewars.c:447
       +#: src/dopewars.c:448
        msgid "Are you high on something?"
        msgstr ""
        
       -#: src/dopewars.c:448
       +#: src/dopewars.c:449
        msgid "Oh, you must be from California"
        msgstr ""
        
       -#: src/dopewars.c:449
       +#: src/dopewars.c:450
        msgid "I used to be a hippie, myself"
        msgstr ""
        
       -#: src/dopewars.c:450
       +#: src/dopewars.c:451
        msgid "There's nothing like having lots of money"
        msgstr ""
        
       -#: src/dopewars.c:451
       +#: src/dopewars.c:452
        msgid "You look like an aardvark!"
        msgstr ""
        
       -#: src/dopewars.c:452
       +#: src/dopewars.c:453
        msgid "I don't believe in Ronald Reagan"
        msgstr ""
        
       -#: src/dopewars.c:453
       +#: src/dopewars.c:454
        msgid "Courage!  Bush is a noodle!"
        msgstr ""
        
       -#: src/dopewars.c:454
       +#: src/dopewars.c:455
        msgid "Haven't I seen you on TV?"
        msgstr ""
        
       -#: src/dopewars.c:455
       +#: src/dopewars.c:456
        msgid "I think hemorrhoid commercials are really neat!"
        msgstr ""
        
       -#: src/dopewars.c:456
       +#: src/dopewars.c:457
        msgid "We're winning the war for drugs!"
        msgstr ""
        
       -#: src/dopewars.c:457
       +#: src/dopewars.c:458
        msgid "A day without dope is like night"
        msgstr ""
        
       -#: src/dopewars.c:458
       +#: src/dopewars.c:459
        #, c-format
        msgid "We only use 20% of our brains, so why not burn out the other 80%"
        msgstr ""
        
       -#: src/dopewars.c:459
       +#: src/dopewars.c:460
        msgid "I'm soliciting contributions for Zombies for Christ"
        msgstr ""
        
       -#: src/dopewars.c:460
       +#: src/dopewars.c:461
        msgid "I'd like to sell you an edible poodle"
        msgstr ""
        
       -#: src/dopewars.c:461
       +#: src/dopewars.c:462
        msgid "Winners don't do drugs... unless they do"
        msgstr ""
        
       -#: src/dopewars.c:462
       +#: src/dopewars.c:463
        msgid "Kill a cop for Christ!"
        msgstr ""
        
       -#: src/dopewars.c:463
       +#: src/dopewars.c:464
        msgid "I am the walrus!"
        msgstr ""
        
       -#: src/dopewars.c:464
       +#: src/dopewars.c:465
        msgid "Jesus loves you more than you will know"
        msgstr ""
        
       -#: src/dopewars.c:465
       +#: src/dopewars.c:466
        msgid "I feel an unaccountable urge to dye my hair blue"
        msgstr ""
        
       -#: src/dopewars.c:466
       +#: src/dopewars.c:467
        msgid "Wasn't Jane Fonda wonderful in Barbarella"
        msgstr ""
        
       -#: src/dopewars.c:467
       +#: src/dopewars.c:468
        msgid "Just say No... well, maybe... ok, what the hell!"
        msgstr ""
        
       -#: src/dopewars.c:468
       +#: src/dopewars.c:469
        msgid "Would you like a jelly baby?"
        msgstr ""
        
       -#: src/dopewars.c:469
       +#: src/dopewars.c:470
        msgid "Drugs can be your friend!"
        msgstr ""
        
       -#: src/dopewars.c:1126
       +#: src/dopewars.c:1127
        msgid "Unable to process configuration file line"
        msgstr ""
        
       -#: src/dopewars.c:1187
       +#: src/dopewars.c:1188
        msgid ""
        "Configuration can only be changed interactively when no\n"
        "players are logged on. Wait for all players to log off, or remove\n"
        "them with the push or kill commands, and try again."
        msgstr ""
        
       -#: src/dopewars.c:1248
       +#: src/dopewars.c:1249
        #, c-format
        msgid "Index into %s array should be between 1 and %d"
        msgstr ""
        
       -#: src/dopewars.c:1267
       +#: src/dopewars.c:1268
        #, c-format
        msgid "%s is %d\n"
        msgstr ""
        
       -#: src/dopewars.c:1272
       -#, c-format
       -msgid "%s is %s\n"
       +#: src/dopewars.c:1271
       +msgid "%s is %P\n"
        msgstr ""
        
       -#: src/dopewars.c:1275
       +#: src/dopewars.c:1274
        #, c-format
        msgid "%s is \"%s\"\n"
        msgstr ""
        
       -#: src/dopewars.c:1279
       +#: src/dopewars.c:1278
        #, c-format
        msgid "%s[%d] is %s\n"
        msgstr ""
        
       -#: src/dopewars.c:1282
       +#: src/dopewars.c:1281
        #, c-format
        msgid "%s is { "
        msgstr ""
        
       -#: src/dopewars.c:1313
       +#: src/dopewars.c:1312
        #, c-format
        msgid "Resized structure list to %d elements\n"
        msgstr ""
        
       -#: src/dopewars.c:1457
       +#: src/dopewars.c:1456
        #, c-format
        msgid ""
        "Usage: dopewars [OPTION]...\n"
       t@@ -1002,7 +1001,7 @@ msgstr ""
        msgid "CLQP"
        msgstr ""
        
       -#: src/curses_client.c:372 src/gtk_client.c:816
       +#: src/curses_client.c:372 src/gtk_client.c:813
        msgid "Where to, dude ? "
        msgstr ""
        
       t@@ -1018,11 +1017,11 @@ msgstr ""
        msgid "How many do you drop? "
        msgstr ""
        
       -#: src/curses_client.c:456 src/curses_client.c:834
       +#: src/curses_client.c:456 src/curses_client.c:832
        msgid "What do you wish to buy? "
        msgstr ""
        
       -#: src/curses_client.c:458 src/curses_client.c:836
       +#: src/curses_client.c:458 src/curses_client.c:834
        msgid "What do you wish to sell? "
        msgstr ""
        
       t@@ -1044,336 +1043,331 @@ msgstr ""
        msgid "How many do you sell? "
        msgstr ""
        
       -#: src/curses_client.c:512
       +#: src/curses_client.c:511
        msgid "Choose an errand to give one of your %tde..."
        msgstr ""
        
       -#: src/curses_client.c:518
       -#, c-format
       -msgid "   S>py on another dealer                  (cost: %s)"
       +#: src/curses_client.c:517
       +msgid "   S>py on another dealer                  (cost: %P)"
        msgstr ""
        
       -#: src/curses_client.c:522
       -#, c-format
       -msgid "   T>ip off the cops to another dealer     (cost: %s)"
       +#: src/curses_client.c:521
       +msgid "   T>ip off the cops to another dealer     (cost: %P)"
        msgstr ""
        
       -#: src/curses_client.c:525
       +#: src/curses_client.c:524
        msgid "   G>et stuffed"
        msgstr ""
        
       -#: src/curses_client.c:528
       +#: src/curses_client.c:527
        msgid "or C>ontact your spies and receive reports"
        msgstr ""
        
       -#: src/curses_client.c:530
       +#: src/curses_client.c:529
        msgid "or N>o errand ? "
        msgstr ""
        
       -#: src/curses_client.c:533
       +#: src/curses_client.c:532
        msgid "STGCN"
        msgstr ""
        
       -#: src/curses_client.c:536
       +#: src/curses_client.c:535
        msgid "Whom do you want to spy on? "
        msgstr ""
        
       -#: src/curses_client.c:541
       +#: src/curses_client.c:540
        msgid "Whom do you want to tip the cops off to? "
        msgstr ""
        
       -#: src/curses_client.c:546
       +#: src/curses_client.c:545
        msgid " Are you sure? "
        msgstr ""
        
       -#: src/curses_client.c:547 src/curses_client.c:565 src/curses_client.c:1713
       +#: src/curses_client.c:546 src/curses_client.c:564 src/curses_client.c:1704
        msgid "YN"
        msgstr ""
        
       -#: src/curses_client.c:563
       +#: src/curses_client.c:562
        msgid "Are you sure you want to quit? "
        msgstr ""
        
       -#: src/curses_client.c:571
       +#: src/curses_client.c:570
        msgid "New name: "
        msgstr ""
        
       -#: src/curses_client.c:627
       +#: src/curses_client.c:626
        msgid "You have been pushed from the server. Reverting to single player mode."
        msgstr ""
        
       -#: src/curses_client.c:637
       +#: src/curses_client.c:636
        msgid "The server has terminated. Reverting to single player mode."
        msgstr ""
        
       -#: src/curses_client.c:652 src/gtk_client.c:339 src/serverside.c:259
       +#: src/curses_client.c:651 src/gtk_client.c:339 src/serverside.c:259
        #, c-format
        msgid "%s joins the game!"
        msgstr ""
        
       -#: src/curses_client.c:657 src/gtk_client.c:345
       +#: src/curses_client.c:656 src/gtk_client.c:345
        #, c-format
        msgid "%s has left the game."
        msgstr ""
        
       -#: src/curses_client.c:662
       +#: src/curses_client.c:661
        #, c-format
        msgid "%s will now be known as %s."
        msgstr ""
        
       -#: src/curses_client.c:686
       +#: src/curses_client.c:685
        msgid "S U B W A Y"
        msgstr ""
        
       -#: src/curses_client.c:729
       +#: src/curses_client.c:728
        msgid ""
        "Unfortunately, somebody else is already using \"your\" name. Please change "
        "it."
        msgstr ""
        
       -#: src/curses_client.c:750
       +#: src/curses_client.c:749
        msgid "H I G H   S C O R E S"
        msgstr ""
        
       -#: src/curses_client.c:807
       +#: src/curses_client.c:805
        msgid "Will you B>uy, S>ell, or L>eave? "
        msgstr ""
        
       -#: src/curses_client.c:812
       +#: src/curses_client.c:810
        msgid "BSL"
        msgstr ""
        
       -#: src/curses_client.c:817
       +#: src/curses_client.c:815
        msgid "You don't have any %tde to sell!"
        msgstr ""
        
       -#: src/curses_client.c:825 src/gtk_client.c:1102
       +#: src/curses_client.c:823 src/gtk_client.c:1096
        msgid "You'll need more %tde to carry any more %tde!"
        msgstr ""
        
       -#: src/curses_client.c:847 src/gtk_client.c:1107
       +#: src/curses_client.c:845 src/gtk_client.c:1101
        msgid "You don't have enough space to carry that %tde!"
        msgstr ""
        
       -#: src/curses_client.c:855 src/gtk_client.c:1111
       +#: src/curses_client.c:853 src/gtk_client.c:1105
        msgid "You don't have enough cash to buy that %tde!"
        msgstr ""
        
       -#: src/curses_client.c:868 src/gtk_client.c:1115
       +#: src/curses_client.c:866 src/gtk_client.c:1109
        msgid "You don't have any to sell!"
        msgstr ""
        
       -#: src/curses_client.c:892
       +#: src/curses_client.c:890
        msgid "How much money do you pay back? "
        msgstr ""
        
       -#: src/curses_client.c:898 src/curses_client.c:928 src/gtk_client.c:1943
       +#: src/curses_client.c:896 src/curses_client.c:926 src/gtk_client.c:1937
        msgid "You don't have that much money!"
        msgstr ""
        
       -#: src/curses_client.c:918
       +#: src/curses_client.c:916
        msgid "Do you want to D>eposit money, W>ithdraw money, or L>eave ? "
        msgstr ""
        
       -#: src/curses_client.c:921
       +#: src/curses_client.c:919
        msgid "DWL"
        msgstr ""
        
       -#: src/curses_client.c:923
       +#: src/curses_client.c:921
        msgid "How much money? "
        msgstr ""
        
       -#: src/curses_client.c:931 src/gtk_client.c:1936
       +#: src/curses_client.c:929 src/gtk_client.c:1930
        msgid "There isn't that much money in the bank..."
        msgstr ""
        
       -#: src/curses_client.c:958
       +#: src/curses_client.c:956
        msgid "Yes"
        msgstr ""
        
       -#: src/curses_client.c:958
       +#: src/curses_client.c:956
        msgid "No"
        msgstr ""
        
       -#: src/curses_client.c:958
       +#: src/curses_client.c:956
        msgid "Run"
        msgstr ""
        
       -#: src/curses_client.c:959 src/gtk_client.c:521
       +#: src/curses_client.c:957 src/gtk_client.c:519
        msgid "Fight"
        msgstr ""
        
       -#: src/curses_client.c:959
       +#: src/curses_client.c:957
        msgid "Attack"
        msgstr ""
        
       -#: src/curses_client.c:959
       +#: src/curses_client.c:957
        msgid "Evade"
        msgstr ""
        
       -#: src/curses_client.c:1028
       +#: src/curses_client.c:1026
        msgid "Press any key..."
        msgstr ""
        
       -#: src/curses_client.c:1160
       +#: src/curses_client.c:1157
        msgid "Messages"
        msgstr ""
        
       -#: src/curses_client.c:1167 src/gtk_client.c:1396
       +#: src/curses_client.c:1164 src/gtk_client.c:1390
        msgid "Stats"
        msgstr ""
        
       -#: src/curses_client.c:1170
       -#, c-format
       -msgid "Cash %17s"
       +#: src/curses_client.c:1167
       +msgid "Cash %17P"
        msgstr ""
        
       -#: src/curses_client.c:1177
       +#: src/curses_client.c:1171
        #, c-format
        msgid "Health             %3d"
        msgstr ""
        
       -#: src/curses_client.c:1179
       -#, c-format
       -msgid "Bank %17s"
       +#: src/curses_client.c:1173
       +msgid "Bank %17P"
        msgstr ""
        
       -#: src/curses_client.c:1183
       -#, c-format
       -msgid "Debt %17s"
       +#: src/curses_client.c:1176
       +msgid "Debt %17P"
        msgstr ""
        
       -#: src/curses_client.c:1187
       +#: src/curses_client.c:1179
        #, c-format
        msgid "Space %6d"
        msgstr ""
        
       -#: src/curses_client.c:1189
       +#: src/curses_client.c:1181
        msgid "%Tde %3d  Space %6d"
        msgstr ""
        
       -#: src/curses_client.c:1198
       +#: src/curses_client.c:1190
        msgid "Trenchcoat"
        msgstr ""
        
       -#: src/curses_client.c:1200
       +#: src/curses_client.c:1192
        msgid "**Stats: Drugs** %Tde"
        msgstr ""
        
       -#: src/curses_client.c:1213 src/gtk_client.c:638
       +#: src/curses_client.c:1205 src/gtk_client.c:636
        msgid "**Stats: Guns** %Tde"
        msgstr ""
        
       -#: src/curses_client.c:1239
       +#: src/curses_client.c:1231
        #, c-format
        msgid "Spy reports for %s"
        msgstr ""
        
       -#: src/curses_client.c:1242 src/curses_client.c:1246
       +#: src/curses_client.c:1234 src/curses_client.c:1238
        msgid "%Tde..."
        msgstr ""
        
       -#: src/curses_client.c:1267
       +#: src/curses_client.c:1259
        msgid "No other players are currently logged on!"
        msgstr ""
        
       -#: src/curses_client.c:1272
       +#: src/curses_client.c:1264
        msgid "Players currently logged on:-"
        msgstr ""
        
       -#: src/curses_client.c:1420
       +#: src/curses_client.c:1412
        msgid "Hey dude, what's your name? "
        msgstr ""
        
       -#: src/curses_client.c:1455
       +#: src/curses_client.c:1447
        msgid "Hey dude, the prices of %tde here are:"
        msgstr ""
        
       -#: src/curses_client.c:1467
       +#: src/curses_client.c:1458
        msgid "Will you B>uy"
        msgstr ""
        
       -#: src/curses_client.c:1468
       +#: src/curses_client.c:1459
        msgid ", S>ell"
        msgstr ""
        
       -#: src/curses_client.c:1469
       +#: src/curses_client.c:1460
        msgid ", D>rop"
        msgstr ""
        
       -#: src/curses_client.c:1470
       +#: src/curses_client.c:1461
        msgid ", T>alk, P>age, L>ist"
        msgstr ""
        
       -#: src/curses_client.c:1473
       +#: src/curses_client.c:1464
        msgid ", G>ive"
        msgstr ""
        
       -#: src/curses_client.c:1476
       +#: src/curses_client.c:1467
        msgid ", F>ight"
        msgstr ""
        
       -#: src/curses_client.c:1480
       +#: src/curses_client.c:1471
        msgid ", J>et"
        msgstr ""
        
       -#: src/curses_client.c:1482 src/curses_client.c:1497
       +#: src/curses_client.c:1473 src/curses_client.c:1488
        msgid ", or Q>uit? "
        msgstr ""
        
       -#: src/curses_client.c:1490
       +#: src/curses_client.c:1481
        msgid "Do you "
        msgstr ""
        
       -#: src/curses_client.c:1492
       +#: src/curses_client.c:1483
        msgid "F>ight, "
        msgstr ""
        
       -#: src/curses_client.c:1493
       +#: src/curses_client.c:1484
        msgid "S>tand, "
        msgstr ""
        
       -#: src/curses_client.c:1495
       +#: src/curses_client.c:1486
        msgid "R>un, "
        msgstr ""
        
       -#: src/curses_client.c:1496
       +#: src/curses_client.c:1487
        msgid "D>eal "
        msgstr ""
        
       -#: src/curses_client.c:1539
       +#: src/curses_client.c:1530
        msgid "Connection to server lost! Reverting to single player mode"
        msgstr ""
        
       -#: src/curses_client.c:1568
       +#: src/curses_client.c:1559
        msgid "BSDTPLGFJQ"
        msgstr ""
        
       -#: src/curses_client.c:1570
       +#: src/curses_client.c:1561
        msgid "DRFSQ"
        msgstr ""
        
       -#: src/curses_client.c:1598
       +#: src/curses_client.c:1589
        msgid "List what? P>layers or S>cores? "
        msgstr ""
        
       -#: src/curses_client.c:1599
       +#: src/curses_client.c:1590
        msgid "PS"
        msgstr ""
        
       -#: src/curses_client.c:1608
       +#: src/curses_client.c:1599
        msgid "Whom do you want to page (talk privately to) ? "
        msgstr ""
        
       -#: src/curses_client.c:1623
       +#: src/curses_client.c:1614
        msgid "Talk: "
        msgstr ""
        
       -#: src/curses_client.c:1712
       +#: src/curses_client.c:1703
        msgid "Play again? "
        msgstr ""
        
       -#: src/curses_client.c:1724
       +#: src/curses_client.c:1715
        msgid ""
        "No curses client available - rebuild the binary passing the\n"
        "--enable-curses-client option to configure, or use a windowed\n"
       t@@ -1472,7 +1466,7 @@ msgstr ""
        msgid "Inventory"
        msgstr ""
        
       -#: src/gtk_client.c:238 src/gtk_client.c:2178 src/gtk_client.c:2543
       +#: src/gtk_client.c:238 src/gtk_client.c:2177 src/gtk_client.c:2542
        msgid "Close"
        msgstr ""
        
       t@@ -1492,187 +1486,184 @@ msgstr ""
        msgid "Jetting to %tde"
        msgstr ""
        
       -#: src/gtk_client.c:367
       -#, c-format
       -msgid "_Spy\t(%s)"
       +#: src/gtk_client.c:366
       +msgid "_Spy\t(%P)"
        msgstr ""
        
       -#: src/gtk_client.c:371
       -#, c-format
       -msgid "_Tipoff\t(%s)"
       +#: src/gtk_client.c:369
       +msgid "_Tipoff\t(%P)"
        msgstr ""
        
       -#: src/gtk_client.c:405
       +#: src/gtk_client.c:403
        msgid "High Scores"
        msgstr ""
        
       -#: src/gtk_client.c:439 src/gtk_client.c:1048 src/gtk_client.c:1508
       -#: src/gtk_client.c:1853 src/gtk_client.c:2017 src/gtk_client.c:2293
       -#: src/gtk_client.c:2449
       +#: src/gtk_client.c:437 src/gtk_client.c:1042 src/gtk_client.c:1502
       +#: src/gtk_client.c:1847 src/gtk_client.c:2016 src/gtk_client.c:2292
       +#: src/gtk_client.c:2448
        msgid "OK"
        msgstr ""
        
       -#: src/gtk_client.c:548
       +#: src/gtk_client.c:546
        msgid "_Deal %Tde"
        msgstr ""
        
       -#: src/gtk_client.c:552 src/gtk_client.c:1146 src/gtk_client.c:1343
       +#: src/gtk_client.c:550 src/gtk_client.c:1140 src/gtk_client.c:1337
        msgid "_Fight"
        msgstr ""
        
       -#: src/gtk_client.c:555
       +#: src/gtk_client.c:553
        msgid "_Stand"
        msgstr ""
        
       -#: src/gtk_client.c:558 src/gtk_client.c:1145
       +#: src/gtk_client.c:556 src/gtk_client.c:1139
        msgid "_Run"
        msgstr ""
        
       -#: src/gtk_client.c:645
       +#: src/gtk_client.c:643
        msgid "**Stats: Bitches** %Tde"
        msgstr ""
        
       -#: src/gtk_client.c:807
       +#: src/gtk_client.c:804
        msgid "Jet to location"
        msgstr ""
        
       -#: src/gtk_client.c:876
       -#, c-format
       -msgid "at %s"
       +#: src/gtk_client.c:871
       +msgid "at %P"
        msgstr ""
        
       -#: src/gtk_client.c:881
       +#: src/gtk_client.c:875
        msgid "You are currently carrying %d %tde"
        msgstr ""
        
       -#: src/gtk_client.c:886
       +#: src/gtk_client.c:880
        #, c-format
        msgid "Available space: %d"
        msgstr ""
        
       -#: src/gtk_client.c:891
       +#: src/gtk_client.c:885
        #, c-format
        msgid "You can afford %d"
        msgstr ""
        
       -#: src/gtk_client.c:940 src/gtk_client.c:1077
       +#: src/gtk_client.c:934 src/gtk_client.c:1071
        msgid "Buy"
        msgstr ""
        
       -#: src/gtk_client.c:941 src/gtk_client.c:1078
       +#: src/gtk_client.c:935 src/gtk_client.c:1072
        msgid "Sell"
        msgstr ""
        
       -#: src/gtk_client.c:942 src/gtk_client.c:1079
       +#: src/gtk_client.c:936 src/gtk_client.c:1073
        msgid "Drop"
        msgstr ""
        
       -#: src/gtk_client.c:1031
       +#: src/gtk_client.c:1025
        msgid "Buy how many?"
        msgstr ""
        
       -#: src/gtk_client.c:1033
       +#: src/gtk_client.c:1027
        msgid "Sell how many?"
        msgstr ""
        
       -#: src/gtk_client.c:1035
       +#: src/gtk_client.c:1029
        msgid "Drop how many?"
        msgstr ""
        
       -#: src/gtk_client.c:1054 src/gtk_client.c:1853 src/gtk_client.c:2028
       -#: src/gtk_client.c:2301
       +#: src/gtk_client.c:1048 src/gtk_client.c:1847 src/gtk_client.c:2027
       +#: src/gtk_client.c:2300
        msgid "Cancel"
        msgstr ""
        
       -#: src/gtk_client.c:1090
       +#: src/gtk_client.c:1084
        msgid "Buy %tde"
        msgstr ""
        
       -#: src/gtk_client.c:1091
       +#: src/gtk_client.c:1085
        msgid "Sell %tde"
        msgstr ""
        
       -#: src/gtk_client.c:1092
       +#: src/gtk_client.c:1086
        msgid "Drop %tde"
        msgstr ""
        
       -#: src/gtk_client.c:1097
       +#: src/gtk_client.c:1091
        msgid "You don't have any %tde!"
        msgstr ""
        
       -#: src/gtk_client.c:1145 src/gtk_client.c:1854
       +#: src/gtk_client.c:1139 src/gtk_client.c:1848
        msgid "_Yes"
        msgstr ""
        
       -#: src/gtk_client.c:1145 src/gtk_client.c:1854
       +#: src/gtk_client.c:1139 src/gtk_client.c:1848
        msgid "_No"
        msgstr ""
        
       -#: src/gtk_client.c:1146
       +#: src/gtk_client.c:1140
        msgid "_Attack"
        msgstr ""
        
       -#: src/gtk_client.c:1146
       +#: src/gtk_client.c:1140
        msgid "_Evade"
        msgstr ""
        
       -#: src/gtk_client.c:1164
       +#: src/gtk_client.c:1158
        msgid "Question"
        msgstr ""
        
       -#: src/gtk_client.c:1293
       +#: src/gtk_client.c:1287
        msgid "Space"
        msgstr ""
        
       -#: src/gtk_client.c:1298
       +#: src/gtk_client.c:1292
        msgid "Cash"
        msgstr ""
        
       -#: src/gtk_client.c:1303
       +#: src/gtk_client.c:1297
        msgid "Debt"
        msgstr ""
        
       -#: src/gtk_client.c:1308
       +#: src/gtk_client.c:1302
        msgid "Bank"
        msgstr ""
        
       -#: src/gtk_client.c:1323
       +#: src/gtk_client.c:1317
        msgid "Health"
        msgstr ""
        
       -#: src/gtk_client.c:1343
       +#: src/gtk_client.c:1337
        msgid "_Jet!"
        msgstr ""
        
       -#: src/gtk_client.c:1373
       +#: src/gtk_client.c:1367
        msgid "dopewars"
        msgstr ""
        
       -#: src/gtk_client.c:1455
       +#: src/gtk_client.c:1449
        msgid "Drug Dealing and Research"
        msgstr ""
        
       -#: src/gtk_client.c:1456
       +#: src/gtk_client.c:1450
        msgid "Play Testing"
        msgstr ""
        
       -#: src/gtk_client.c:1457
       +#: src/gtk_client.c:1451
        msgid "Extensive Play Testing"
        msgstr ""
        
       -#: src/gtk_client.c:1459
       +#: src/gtk_client.c:1453
        msgid "Constructive Criticism"
        msgstr ""
        
       -#: src/gtk_client.c:1461
       +#: src/gtk_client.c:1455
        msgid "Unconstructive Criticism"
        msgstr ""
        
       -#: src/gtk_client.c:1465
       +#: src/gtk_client.c:1459
        msgid "About dopewars"
        msgstr ""
        
       -#: src/gtk_client.c:1474
       +#: src/gtk_client.c:1468
        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@@ -1684,151 +1675,156 @@ msgid ""
        "have one month of game time to make your fortune.\n"
        msgstr ""
        
       -#: src/gtk_client.c:1482
       +#: src/gtk_client.c:1476
        #, 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:1500
       +#: src/gtk_client.c:1494
        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:1538 src/gtk_client.c:1561
       +#: src/gtk_client.c:1532 src/gtk_client.c:1555
        #, c-format
        msgid "Status: Could not connect (%s)"
        msgstr ""
        
       -#: src/gtk_client.c:1549
       +#: src/gtk_client.c:1543
        #, c-format
        msgid "Status: Attempting to contact %s..."
        msgstr ""
        
       -#: src/gtk_client.c:1609
       +#: src/gtk_client.c:1603
        #, c-format
        msgid "%d of %d"
        msgstr ""
        
       -#: src/gtk_client.c:1673 src/gtk_client.c:1714 src/gtk_client.c:1755
       +#: src/gtk_client.c:1667 src/gtk_client.c:1708 src/gtk_client.c:1749
        msgid "Server"
        msgstr ""
        
       -#: src/gtk_client.c:1674 src/gtk_client.c:1729
       +#: src/gtk_client.c:1668 src/gtk_client.c:1723
        msgid "Port"
        msgstr ""
        
       -#: src/gtk_client.c:1675
       +#: src/gtk_client.c:1669
        msgid "Version"
        msgstr ""
        
       -#: src/gtk_client.c:1676
       +#: src/gtk_client.c:1670
        msgid "Players"
        msgstr ""
        
       -#: src/gtk_client.c:1677
       +#: src/gtk_client.c:1671
        msgid "Comment"
        msgstr ""
        
       -#: src/gtk_client.c:1690
       +#: src/gtk_client.c:1684
        msgid "New Game"
        msgstr ""
        
       -#: src/gtk_client.c:1699
       +#: src/gtk_client.c:1693
        msgid "Hey dude, what's your _name?"
        msgstr ""
        
       -#: src/gtk_client.c:1721
       +#: src/gtk_client.c:1715
        msgid "Host name"
        msgstr ""
        
       -#: src/gtk_client.c:1744 src/gtk_client.c:1807
       +#: src/gtk_client.c:1738 src/gtk_client.c:1801
        msgid "_Connect"
        msgstr ""
        
       -#: src/gtk_client.c:1757 src/gtk_client.c:1778
       +#: src/gtk_client.c:1751 src/gtk_client.c:1772
        msgid "Single player"
        msgstr ""
        
       -#: src/gtk_client.c:1763
       +#: src/gtk_client.c:1757
        msgid "_Antique mode"
        msgstr ""
        
       -#: src/gtk_client.c:1770
       +#: src/gtk_client.c:1764
        msgid "_Start single-player game"
        msgstr ""
        
       -#: src/gtk_client.c:1780 src/gtk_client.c:1818
       +#: src/gtk_client.c:1774 src/gtk_client.c:1812
        msgid "Metaserver"
        msgstr ""
        
       -#: src/gtk_client.c:1797
       +#: src/gtk_client.c:1791
        msgid "_Update"
        msgstr ""
        
       -#: src/gtk_client.c:1822
       +#: src/gtk_client.c:1816
        msgid "Status: Waiting for user input"
        msgstr ""
        
       -#: src/gtk_client.c:1974
       -#, c-format
       -msgid "Cash: %s"
       +#: src/gtk_client.c:1958
       +msgid "**LoanShark window title** %Tde"
       +msgstr ""
       +
       +#: src/gtk_client.c:1961
       +msgid "**BankName window title** %Tde"
       +msgstr ""
       +
       +#: src/gtk_client.c:1975
       +msgid "Cash: %P"
        msgstr ""
        
        #: src/gtk_client.c:1981
       -#, c-format
       -msgid "Debt: %s"
       +msgid "Debt: %P"
        msgstr ""
        
       -#: src/gtk_client.c:1984
       -#, c-format
       -msgid "Bank: %s"
       +#: src/gtk_client.c:1983
       +msgid "Bank: %P"
        msgstr ""
        
       -#: src/gtk_client.c:1992
       +#: src/gtk_client.c:1991
        msgid "Pay back:"
        msgstr ""
        
       -#: src/gtk_client.c:1995
       +#: src/gtk_client.c:1994
        msgid "Deposit"
        msgstr ""
        
       -#: src/gtk_client.c:1999
       +#: src/gtk_client.c:1998
        msgid "Withdraw"
        msgstr ""
        
       -#: src/gtk_client.c:2023
       +#: src/gtk_client.c:2022
        msgid "Pay all"
        msgstr ""
        
       -#: src/gtk_client.c:2045
       +#: src/gtk_client.c:2044
        msgid "Player List"
        msgstr ""
        
       -#: src/gtk_client.c:2133
       +#: src/gtk_client.c:2132
        msgid "Talk to player(s)"
        msgstr ""
        
       -#: src/gtk_client.c:2155
       +#: src/gtk_client.c:2154
        msgid "Talk to all players"
        msgstr ""
        
       -#: src/gtk_client.c:2159
       +#: src/gtk_client.c:2158
        msgid "Message:-"
        msgstr ""
        
       -#: src/gtk_client.c:2172
       +#: src/gtk_client.c:2171
        msgid "Send"
        msgstr ""
        
       -#: src/gtk_client.c:2263
       +#: src/gtk_client.c:2262
        msgid "Spy On Player"
        msgstr ""
        
       -#: src/gtk_client.c:2265
       +#: src/gtk_client.c:2264
        msgid ""
        "Please choose the player to spy on. Your %tde will\n"
        "then offer his services to the player, and if successful,\n"
       t@@ -1837,11 +1833,11 @@ msgid ""
        "you, so any %tde or %tde that he's carrying may be lost!"
        msgstr ""
        
       -#: src/gtk_client.c:2273
       +#: src/gtk_client.c:2272
        msgid "Tip Off The Cops"
        msgstr ""
        
       -#: src/gtk_client.c:2275
       +#: src/gtk_client.c:2274
        msgid ""
        "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"
       t@@ -1849,71 +1845,71 @@ msgid ""
        "so any %tde or %tde that he's carrying may be lost!"
        msgstr ""
        
       -#: src/gtk_client.c:2314
       +#: src/gtk_client.c:2313
        msgid "Sack %Tde"
        msgstr ""
        
       -#: src/gtk_client.c:2315
       +#: src/gtk_client.c:2314
        msgid ""
        "Are you sure? (Any %tde or %tde carried\n"
        "by this %tde may be lost!)"
        msgstr ""
        
       -#: src/gtk_client.c:2335
       +#: src/gtk_client.c:2334
        msgid "Name"
        msgstr ""
        
       -#: src/gtk_client.c:2336
       +#: src/gtk_client.c:2335
        msgid "Price"
        msgstr ""
        
       -#: src/gtk_client.c:2337
       +#: src/gtk_client.c:2336
        msgid "Number"
        msgstr ""
        
       -#: src/gtk_client.c:2339
       +#: src/gtk_client.c:2338
        msgid "_Buy ->"
        msgstr ""
        
       -#: src/gtk_client.c:2340
       +#: src/gtk_client.c:2339
        msgid "<- _Sell"
        msgstr ""
        
       -#: src/gtk_client.c:2341
       +#: src/gtk_client.c:2340
        msgid "_Drop <-"
        msgstr ""
        
       -#: src/gtk_client.c:2346
       +#: src/gtk_client.c:2345
        msgid "%Tde here"
        msgstr ""
        
       -#: src/gtk_client.c:2349
       +#: src/gtk_client.c:2348
        msgid "%Tde carried"
        msgstr ""
        
       -#: src/gtk_client.c:2425
       +#: src/gtk_client.c:2424
        msgid "Change Name"
        msgstr ""
        
       -#: src/gtk_client.c:2435
       +#: src/gtk_client.c:2434
        msgid ""
        "Unfortunately, somebody else is already using \"your\" name. Please change "
        "it:-"
        msgstr ""
        
       -#: src/gtk_client.c:2472
       +#: src/gtk_client.c:2471
        msgid "**GunShop window title** %Tde"
        msgstr ""
        
       -#: src/gtk_client.c:2496
       +#: src/gtk_client.c:2495
        msgid "Done"
        msgstr ""
        
       -#: src/gtk_client.c:2529
       +#: src/gtk_client.c:2528
        msgid "Spy reports"
        msgstr ""
        
       -#: src/gtk_client.c:2595
       +#: src/gtk_client.c:2594
        msgid ""
        "No GTK+ client available - rebuild the binary passing the\n"
        "--enable-gtk-client option to configure, or use the curses\n"
       t@@ -2135,148 +2131,145 @@ msgstr ""
        msgid "(R.I.P.)"
        msgstr ""
        
       -#: src/serverside.c:1031
       +#: src/serverside.c:1030
        #, c-format
        msgid "%s: Tipoff from %s"
        msgstr ""
        
       -#: src/serverside.c:1049
       +#: src/serverside.c:1048
        msgid "One of your %tde was spying for %s.^The spy %s!"
        msgstr ""
        
       -#: src/serverside.c:1056
       +#: src/serverside.c:1055
        #, c-format
        msgid "Your spy working with %s has been discovered!^The spy %s!"
        msgstr ""
        
       -#: src/serverside.c:1079
       +#: src/serverside.c:1078
        #, c-format
        msgid " The lady next to you on the subway said,^ \"%s\"%s"
        msgstr ""
        
       -#: src/serverside.c:1082
       +#: src/serverside.c:1081
        msgid "^    (at least, you -think- that's what she said)"
        msgstr ""
        
       -#: src/serverside.c:1084
       +#: src/serverside.c:1083
        #, c-format
        msgid " You hear someone playing %s"
        msgstr ""
        
       -#: src/serverside.c:1093 src/serverside.c:1102 src/serverside.c:1111
       -#: src/serverside.c:1120
       +#: src/serverside.c:1092 src/serverside.c:1101 src/serverside.c:1110
       +#: src/serverside.c:1119
        msgid "YN^Would you like to visit %tde?"
        msgstr ""
        
       -#: src/serverside.c:1131
       -msgid "YN^^Would you like to hire a %tde for %s?"
       +#: src/serverside.c:1130
       +msgid "YN^^Would you like to hire a %tde for %P?"
        msgstr ""
        
       -#: src/serverside.c:1144
       +#: src/serverside.c:1142
        #, c-format
        msgid "AE^%s is already here!^Do you Attack, or Evade?"
        msgstr ""
        
       -#: src/serverside.c:1466
       +#: src/serverside.c:1464
        msgid "You were mugged in the subway!"
        msgstr ""
        
       -#: src/serverside.c:1477
       +#: src/serverside.c:1475
        #, c-format
        msgid "You meet a friend! He gives you %d %s."
        msgstr ""
        
       -#: src/serverside.c:1482
       +#: src/serverside.c:1480
        #, c-format
        msgid "You meet a friend! You give him %d %s."
        msgstr ""
        
       -#: src/serverside.c:1491
       +#: src/serverside.c:1489
        msgid "Sanitized away a RandomOffer"
        msgstr ""
        
       -#: src/serverside.c:1496
       +#: src/serverside.c:1494
        #, c-format
        msgid ""
        "Police dogs chase you for %d blocks! You dropped some %s! That's a drag, man!"
        msgstr ""
        
       -#: src/serverside.c:1512
       +#: src/serverside.c:1510
        #, c-format
        msgid "You find %d %s on a dead dude in the subway!"
        msgstr ""
        
       -#: src/serverside.c:1524
       +#: src/serverside.c:1522
        #, c-format
        msgid "Your mama made brownies with some of your %s! They were great!"
        msgstr ""
        
       -#: src/serverside.c:1534
       +#: src/serverside.c:1532
        msgid ""
        "YN^There is some weed that smells like paraquat here!^It looks good! Will "
        "you smoke it? "
        msgstr ""
        
       -#: src/serverside.c:1541
       +#: src/serverside.c:1539
        #, c-format
        msgid "You stopped to %s."
        msgstr ""
        
       -#: src/serverside.c:1562
       -#, c-format
       -msgid "Would you like to buy a bigger trenchcoat for %s?"
       +#: src/serverside.c:1560
       +msgid "Would you like to buy a bigger trenchcoat for %P?"
        msgstr ""
        
       -#: src/serverside.c:1567
       -#, c-format
       -msgid "YN^Hey dude! I'll help carry your %s for a mere %s. Yes or no?"
       +#: src/serverside.c:1565
       +msgid "YN^Hey dude! I'll help carry your %tde for a mere %P. Yes or no?"
        msgstr ""
        
       -#: src/serverside.c:1579
       -#, c-format
       -msgid "YN^Would you like to buy a %s for %s?"
       +#: src/serverside.c:1575
       +msgid "YN^Would you like to buy a %tde for %P?"
        msgstr ""
        
       -#: src/serverside.c:1685 src/serverside.c:1778
       +#: src/serverside.c:1679 src/serverside.c:1772
        #, c-format
        msgid "%s: offer was on behalf of %s"
        msgstr ""
        
       -#: src/serverside.c:1688
       +#: src/serverside.c:1682
        #, c-format
        msgid "%s has accepted your %s!^Use the G key to contact your spy."
        msgstr ""
        
       -#: src/serverside.c:1734
       +#: src/serverside.c:1728
        msgid ""
        "You hallucinated for three days on the wildest trip you ever imagined!^Then "
        "you died because your brain disintegrated!"
        msgstr ""
        
       -#: src/serverside.c:1758
       +#: src/serverside.c:1752
        #, c-format
        msgid "Too late - %s has just left!"
        msgstr ""
        
       -#: src/serverside.c:1781
       +#: src/serverside.c:1775
        #, c-format
        msgid "%s has rejected your %s!"
        msgstr ""
        
       -#: src/serverside.c:1824
       +#: src/serverside.c:1818
        msgid "YN^Officer %%s spots you dropping %s, and chases you!"
        msgstr ""
        
       -#: src/serverside.c:1826
       +#: src/serverside.c:1820
        msgid ""
        "YN^Officer %%s and %%d of his deputies spot you dropping %s, and chase you!"
        msgstr ""
        
       -#: src/serverside.c:1985
       +#: src/serverside.c:1979
        msgid "Player removed due to idle timeout"
        msgstr ""
        
       -#: src/serverside.c:1995
       +#: src/serverside.c:1989
        msgid "Player removed due to connect timeout"
        msgstr ""
        
       t@@ -2345,100 +2338,100 @@ msgstr ""
        msgid "%s arrives with %d %tde, %s!"
        msgstr ""
        
       -#: src/message.c:1063
       +#: src/message.c:1062
        #, c-format
        msgid "%s stands and takes it"
        msgstr ""
        
       -#: src/message.c:1065
       +#: src/message.c:1064
        msgid "You stand there like a dummy."
        msgstr ""
        
       -#: src/message.c:1070
       +#: src/message.c:1069
        #, c-format
        msgid "%s has got away!"
        msgstr ""
        
       -#: src/message.c:1072
       +#: src/message.c:1071
        msgid "You got away!"
        msgstr ""
        
       -#: src/message.c:1077
       +#: src/message.c:1076
        msgid "Guns reloaded..."
        msgstr ""
        
       -#: src/message.c:1082
       +#: src/message.c:1081
        #, c-format
        msgid "%s shoots at %s... and misses!"
        msgstr ""
        
       -#: src/message.c:1085
       +#: src/message.c:1084
        #, c-format
        msgid "%s shoots at you... and misses!"
        msgstr ""
        
       -#: src/message.c:1088
       +#: src/message.c:1087
        #, c-format
        msgid "You missed %s!"
        msgstr ""
        
       -#: src/message.c:1094
       +#: src/message.c:1093
        #, c-format
        msgid "%s shoots %s dead."
        msgstr ""
        
       -#: src/message.c:1097
       +#: src/message.c:1096
        msgid "%s shoots at %s and kills a %tde!"
        msgstr ""
        
       -#: src/message.c:1101
       +#: src/message.c:1099
        #, c-format
        msgid "%s shoots at %s."
        msgstr ""
        
       -#: src/message.c:1106
       +#: src/message.c:1104
        #, c-format
        msgid "%s wasted you, man! What a drag!"
        msgstr ""
        
       -#: src/message.c:1110
       +#: src/message.c:1108
        msgid "%s shoots at you... and kills a %tde!"
        msgstr ""
        
       -#: src/message.c:1114
       +#: src/message.c:1111
        #, c-format
        msgid "%s hits you, man!"
        msgstr ""
        
       -#: src/message.c:1118
       +#: src/message.c:1115
        #, c-format
        msgid "You killed %s!"
        msgstr ""
        
       -#: src/message.c:1120
       +#: src/message.c:1117
        msgid "You hit %s, and killed a %tde!"
        msgstr ""
        
       -#: src/message.c:1124
       +#: src/message.c:1120
        #, c-format
        msgid "You hit %s!"
        msgstr ""
        
       -#: src/message.c:1127
       +#: src/message.c:1123
        msgid " You loot the body!"
        msgstr ""
        
       -#: src/message.c:1130
       +#: src/message.c:1126
        #, c-format
        msgid " (Health: %d)"
        msgstr ""
        
       -#: src/AIPlayer.c:58
       +#: src/AIPlayer.c:59
        #, c-format
        msgid "AI Player started; attempting to contact server at %s:%d..."
        msgstr ""
        
       -#: src/AIPlayer.c:61
       +#: src/AIPlayer.c:62
        #, c-format
        msgid ""
        "Could not connect to dopewars server\n"
       t@@ -2446,19 +2439,19 @@ msgid ""
        "AI Player terminating abnormally."
        msgstr ""
        
       -#: src/AIPlayer.c:65
       +#: src/AIPlayer.c:66
        msgid "Connection established\n"
        msgstr ""
        
       -#: src/AIPlayer.c:85
       +#: src/AIPlayer.c:86
        msgid "Connection to server lost!\n"
        msgstr ""
        
       -#: src/AIPlayer.c:98
       +#: src/AIPlayer.c:99
        msgid "AI Player terminated OK.\n"
        msgstr ""
        
       -#: src/AIPlayer.c:111
       +#: src/AIPlayer.c:112
        #, c-format
        msgid "Using name %s\n"
        msgstr ""
       t@@ -2478,87 +2471,82 @@ msgid "%s has left the game.\n"
        msgstr ""
        
        #: src/AIPlayer.c:172
       -#, c-format
       -msgid "Jetting to %s with %s cash and %s debt"
       +msgid "Jetting to %tde with %P cash and %P debt"
        msgstr ""
        
       -#: src/AIPlayer.c:192
       +#: src/AIPlayer.c:189
        msgid "AI Player killed. Terminating normally.\n"
        msgstr ""
        
       -#: src/AIPlayer.c:212
       +#: src/AIPlayer.c:209
        msgid "Game time is up. Leaving game.\n"
        msgstr ""
        
       -#: src/AIPlayer.c:215
       +#: src/AIPlayer.c:212
        msgid "AI Player pushed from the server.\n"
        msgstr ""
        
       -#: src/AIPlayer.c:218
       +#: src/AIPlayer.c:215
        msgid "The server has terminated.\n"
        msgstr ""
        
       -#: src/AIPlayer.c:272
       -#, c-format
       -msgid "Selling %d %s at %s\n"
       +#: src/AIPlayer.c:269
       +msgid "Selling %d %tde at %P\n"
        msgstr ""
        
       -#: src/AIPlayer.c:288
       -#, c-format
       -msgid "Buying %d %s at %s\n"
       +#: src/AIPlayer.c:284
       +msgid "Buying %d %tde at %P\n"
        msgstr ""
        
       -#: src/AIPlayer.c:317
       -#, c-format
       -msgid "Buying a %s for %s at the gun shop\n"
       +#: src/AIPlayer.c:312
       +msgid "Buying a %tde for %P at the gun shop\n"
        msgstr ""
        
       -#: src/AIPlayer.c:357
       -#, c-format
       -msgid "Debt of %s paid off to loan shark\n"
       +#: src/AIPlayer.c:351
       +msgid "Debt of %P paid off to loan shark\n"
        msgstr ""
        
       -#: src/AIPlayer.c:382
       +#: src/AIPlayer.c:374
        #, c-format
        msgid "Loan shark located at %s\n"
        msgstr ""
        
       -#: src/AIPlayer.c:390
       +#: src/AIPlayer.c:382
        #, c-format
        msgid "Gun shop located at %s\n"
        msgstr ""
        
       -#: src/AIPlayer.c:398
       +#: src/AIPlayer.c:390
        #, c-format
        msgid "Pub located at %s\n"
        msgstr ""
        
       -#: src/AIPlayer.c:411
       +#: src/AIPlayer.c:403
        #, c-format
        msgid "Bank located at %s\n"
        msgstr ""
        
       -#: src/AIPlayer.c:435
       +#: src/AIPlayer.c:427
        msgid "Call yourselves drug dealers?"
        msgstr ""
        
       -#: src/AIPlayer.c:436
       +#: src/AIPlayer.c:428
        msgid "A trained monkey could do better..."
        msgstr ""
        
       -#: src/AIPlayer.c:437
       +#: src/AIPlayer.c:429
        msgid "Think you're hard enough to deal with the likes of me?"
        msgstr ""
        
       -#: src/AIPlayer.c:438
       +#: src/AIPlayer.c:430
        msgid "Zzzzz... are you dealing in candy or what?"
        msgstr ""
        
       -#: src/AIPlayer.c:439
       +#: src/AIPlayer.c:431
        msgid "Reckon I'll just have to shoot you for your own good."
        msgstr ""
        
       -#: src/AIPlayer.c:447
       +#: src/AIPlayer.c:439
        msgid ""
        "This binary has been compiled without networking support, and thus cannot "
        "act as an AI player.\n"
 (DIR) diff --git a/src/AIPlayer.c b/src/AIPlayer.c
       t@@ -29,6 +29,7 @@
        #include "dopeos.h"
        #include "dopewars.h"
        #include "message.h"
       +#include "tstring.h"
        #include "AIPlayer.h"
        
        #if NETWORKING
       t@@ -118,7 +119,6 @@ int HandleAIMessage(char *Message,Player *AIPlay) {
           char *Data,Code,AICode,WasFighting;
           Player *From,*tmp;
           GSList *list;
       -   gchar *prstr,*prstr2;
           struct timeval tv;
           gboolean Handled;
           if (ProcessMessage(Message,AIPlay,&From,&AICode,&Code,
       t@@ -169,11 +169,8 @@ int HandleAIMessage(char *Message,Player *AIPlay) {
                 tv.tv_sec=AITurnPause;
                 tv.tv_usec=0;
                 bselect(0,NULL,NULL,NULL,&tv);
       -         g_print(_("Jetting to %s with %s cash and %s debt"),
       -                Location[(int)AIPlay->IsAt].Name,
       -                (prstr=FormatPrice(AIPlay->Cash)),
       -                (prstr2=FormatPrice(AIPlay->Debt)));
       -         g_free(prstr); g_free(prstr2);
       +         dpg_print(_("Jetting to %tde with %P cash and %P debt"),
       +                Location[(int)AIPlay->IsAt].Name,AIPlay->Cash,AIPlay->Debt);
                 if (brandom(0,100)<10) AISendRandomMessage(AIPlay);
                 break;
              case C_UPDATE:
       t@@ -244,7 +241,7 @@ void PrintAIMessage(char *Text) {
        void AIDealDrugs(Player *AIPlay) {
        /* Buy and sell drugs for AI player "AIPlay" */
           price_t *Profit,MaxProfit;
       -   gchar *prstr,*text;
       +   gchar *text;
           int i,LastHighest,Highest,Num,MinProfit;
           Profit = g_new(price_t,NumDrug);
           for (i=0;i<NumDrug;i++) {
       t@@ -269,9 +266,8 @@ void AIDealDrugs(Player *AIPlay) {
              if (Highest==-1) break;
              Num=AIPlay->Drugs[Highest].Carried;
              if (MaxProfit>0 && Num>0) {
       -         g_print(_("Selling %d %s at %s\n"),Num,Drug[Highest].Name,
       -                (prstr=FormatPrice(AIPlay->Drugs[Highest].Price)));
       -         g_free(prstr);
       +         dpg_print(_("Selling %d %tde at %P\n"),Num,Drug[Highest].Name,
       +                   AIPlay->Drugs[Highest].Price);
                 AIPlay->CoatSize+=Num;
                 AIPlay->Cash+=Num*AIPlay->Drugs[Highest].Price;
                 text=g_strdup_printf("drug^%d^%d",Highest,-Num);
       t@@ -285,9 +281,8 @@ void AIDealDrugs(Player *AIPlay) {
                    Num=AIPlay->CoatSize-SPACERESERVE;
                 }
                 if (MaxProfit<0 && Num>0) {
       -            g_print(_("Buying %d %s at %s\n"),Num,Drug[Highest].Name,
       -                   (prstr=FormatPrice(AIPlay->Drugs[Highest].Price)));
       -            g_free(prstr);
       +            dpg_print(_("Buying %d %tde at %P\n"),Num,Drug[Highest].Name,
       +                      AIPlay->Drugs[Highest].Price);
                    text=g_strdup_printf("drug^%d^%d",Highest,Num);
                    AIPlay->CoatSize-=Num;
                    AIPlay->Cash-=Num*AIPlay->Drugs[Highest].Price;
       t@@ -303,7 +298,7 @@ void AIGunShop(Player *AIPlay) {
        /* Handles a visit to the gun shop by AI player "AIPlay" */
           int i;
           int Bought;
       -   gchar *text,*prstr;
       +   gchar *text;
           do {
              Bought=0;
              for (i=0;i<NumGun;i++) {
       t@@ -314,9 +309,8 @@ void AIGunShop(Player *AIPlay) {
                    AIPlay->CoatSize-=Gun[i].Space;
                    AIPlay->Guns[i].Carried++;
                    Bought++;
       -            g_print(_("Buying a %s for %s at the gun shop\n"),Gun[i].Name,
       -                   (prstr=FormatPrice(Gun[i].Price)));
       -            g_free(prstr);
       +            dpg_print(_("Buying a %tde for %P at the gun shop\n"),
       +                      Gun[i].Name,Gun[i].Price);
                    text=g_strdup_printf("gun^%d^1",i);
                    SendClientMessage(AIPlay,C_NONE,C_BUYOBJECT,NULL,text);
                    g_free(text);
       t@@ -354,9 +348,7 @@ void AIPayLoan(Player *AIPlay) {
              prstr=pricetostr(AIPlay->Debt);
              SendClientMessage(AIPlay,C_NONE,C_PAYLOAN,NULL,prstr);
              g_free(prstr);
       -      g_print(_("Debt of %s paid off to loan shark\n"),
       -             (prstr=FormatPrice(AIPlay->Debt)));
       -      g_free(prstr);
       +      dpg_print(_("Debt of %P paid off to loan shark\n"),AIPlay->Debt);
           }
           SendClientMessage(AIPlay,C_NONE,C_DONE,NULL,NULL);
        }
 (DIR) diff --git a/src/curses_client.c b/src/curses_client.c
       t@@ -501,7 +501,6 @@ static void GiveErrand(Player *Play) {
        /* Prompts the user (player "Play") to give an errand to one of his/her */
        /* bitches. The decision is relayed to the server for implementation.   */
           int c,y;
       -   gchar *prstr;
           GString *text;
           Player *To;
        
       t@@ -514,14 +513,14 @@ static void GiveErrand(Player *Play) {
           mvaddstr(y++,1,text->str);
           attrset(PromptAttr);
           if (Play->Bitches.Carried>0) {
       -      g_string_sprintf(text,
       -                    _("   S>py on another dealer                  (cost: %s)"),
       -                      prstr=FormatPrice(Prices.Spy));
       -      mvaddstr(y++,2,text->str); g_free(prstr);
       -      g_string_sprintf(text,
       -                    _("   T>ip off the cops to another dealer     (cost: %s)"),
       -                      prstr=FormatPrice(Prices.Tipoff));
       -      mvaddstr(y++,2,text->str); g_free(prstr);
       +      dpg_string_sprintf(text,
       +                    _("   S>py on another dealer                  (cost: %P)"),
       +                      Prices.Spy);
       +      mvaddstr(y++,2,text->str);
       +      dpg_string_sprintf(text,
       +                    _("   T>ip off the cops to another dealer     (cost: %P)"),
       +                      Prices.Tipoff);
       +      mvaddstr(y++,2,text->str);
              mvaddstr(y++,2,_("   G>et stuffed"));
           }
           if (Play->Flags&SPYINGON) {
       t@@ -792,16 +791,15 @@ void GunShop(Player *Play) {
        /* Allows player "Play" to buy and sell guns interactively. Passes the */
        /* decisions on to the server for sanity checking and implementation.  */
           int i,c,c2;
       -   gchar *text,*prstr;
       +   gchar *text;
        
           print_status(Play,0);
           attrset(TextAttr);
           clear_bottom();
           for (i=0;i<NumGun;i++) {
       -      text=g_strdup_printf("%c. %-22s %12s",'A'+i,Gun[i].Name,
       -                           prstr=FormatPrice(Gun[i].Price));
       -      mvaddstr(17+i/2,(i%2)*40+1,text);
       -      g_free(prstr); g_free(text);
       +      text=dpg_strdup_printf("%c. %-22tde %12P",'A'+i,Gun[i].Name,
       +                             Gun[i].Price);
       +      mvaddstr(17+i/2,(i%2)*40+1,text); g_free(text);
           }
           while (1) {
              text=_("Will you B>uy, S>ell, or L>eave? ");
       t@@ -1123,7 +1121,6 @@ void print_status(Player *Play,char DispDrug) {
        /* details. If "DispDrugs" is TRUE, displays the carried drugs on the  */
        /* right hand side of the screen; if FALSE, displays the carried guns. */
           int i,c;
       -   gchar *prstr,*caps;
           GString *text;
           gchar *tfmt,**tstr;
        
       t@@ -1167,21 +1164,16 @@ void print_status(Player *Play,char DispDrug) {
           mvaddstr(1,Width/4-2,_("Stats"));
        
           attrset(StatsAttr);
       -   g_string_sprintf(text,_("Cash %17s"),prstr=FormatPrice(Play->Cash));
       -   g_free(prstr);
       +   g_string_sprintf(text,_("Cash %17P"),Play->Cash);
           mvaddstr(3,9,text->str);
       -   g_string_sprintf(text,"%-19s%3d",caps=InitialCaps(Names.Guns),
       -                    TotalGunsCarried(Play));
       -   g_free(caps);
       +   dpg_string_sprintf(text,"%-19Tde%3d",Names.Guns,TotalGunsCarried(Play));
           mvaddstr(Network ? 4 : 5,9,text->str);
           g_string_sprintf(text,_("Health             %3d"),Play->Health);
           mvaddstr(Network ? 5 : 7,9,text->str);
       -   g_string_sprintf(text,_("Bank %17s"),prstr=FormatPrice(Play->Bank));
       -   g_free(prstr);
       +   dpg_string_sprintf(text,_("Bank %17P"),Play->Bank);
           mvaddstr(Network ? 6 : 9,9,text->str);
           if (Play->Debt>0) attrset(DebtAttr);
       -   g_string_sprintf(text,_("Debt %17s"),prstr=FormatPrice(Play->Debt));
       -   g_free(prstr);
       +   dpg_string_sprintf(text,_("Debt %17P"),Play->Debt);
           mvaddstr(Network ? 7 : 11,9,text->str);
           attrset(TitleAttr);
           if (WantAntique) g_string_sprintf(text,_("Space %6d"),Play->CoatSize);
       t@@ -1383,7 +1375,7 @@ static void Curses_DoGame(Player *Play) {
        /* dopewars is essentially server-driven, so this loop simply has to    */
        /* make the screen look pretty, respond to user keypresses, and react   */
        /* to messages from the server.                                         */
       -   gchar *buf,*OldName,*TalkMsg,*pt,*prstr;
       +   gchar *buf,*OldName,*TalkMsg,*pt;
           GString *text;
           int i,c;
           char IsCarrying;
       t@@ -1458,9 +1450,8 @@ static void Curses_DoGame(Player *Play) {
                    i=-1;
                    for (c=0;c<NumDrugsHere;c++) {
                       if ((i=GetNextDrugIndex(i,Play))==-1) break;
       -               g_string_sprintf(text,"%c. %-10s %8s",'A'+c,Drug[i].Name,
       -                                prstr=FormatPrice(Play->Drugs[i].Price));
       -               g_free(prstr);
       +               dpg_string_sprintf(text,"%c. %-10tde %8P",'A'+c,Drug[i].Name,
       +                                  Play->Drugs[i].Price);
                       mvaddstr(17+c/3,(c%3)*25+4,text->str);
                    }
                    attrset(PromptAttr);
 (DIR) diff --git a/src/dopewars.c b/src/dopewars.c
       t@@ -40,6 +40,7 @@
        #include "dopeos.h"
        #include "message.h"
        #include "serverside.h"
       +#include "tstring.h"
        #include "AIPlayer.h"
        
        int ClientSock,ListenSock;     
       t@@ -1256,7 +1257,7 @@ gboolean CheckMaxIndex(GScanner *scanner,int GlobalIndex,int StructIndex,
        
        void PrintConfigValue(int GlobalIndex,int StructIndex,gboolean IndexGiven,
                              GScanner *scanner) {
       -   gchar *prstr,*GlobalName;
       +   gchar *GlobalName;
           int i;
           if (!CheckMaxIndex(scanner,GlobalIndex,StructIndex,IndexGiven)) return;
           if (Globals[GlobalIndex].NameStruct[0]) {
       t@@ -1267,10 +1268,8 @@ void PrintConfigValue(int GlobalIndex,int StructIndex,gboolean IndexGiven,
              g_print(_("%s is %d\n"),GlobalName,
                      *((int *)GetGlobalPointer(GlobalIndex,StructIndex)));
           } else if (Globals[GlobalIndex].PriceVal) {
       -      prstr=FormatPrice(*((price_t *)GetGlobalPointer(GlobalIndex,
       -                                                      StructIndex)));
       -      g_print(_("%s is %s\n"),GlobalName,prstr);
       -      g_free(prstr);
       +      dpg_print(_("%s is %P\n"),GlobalName,
       +                *((price_t *)GetGlobalPointer(GlobalIndex,StructIndex)));
           } else if (Globals[GlobalIndex].StringVal) {
              g_print(_("%s is \"%s\"\n"),GlobalName,
                      *((gchar **)GetGlobalPointer(GlobalIndex,StructIndex)));
 (DIR) diff --git a/src/gtk_client.c b/src/gtk_client.c
       t@@ -284,7 +284,7 @@ void SetSocketWriteTest(Player *Play,gboolean WriteTest) {
        void HandleClientMessage(char *pt,Player *Play) {
           char *Data,Code,AICode,DisplayMode;
           Player *From,*tmp;
       -   gchar *text,*prstr;
       +   gchar *text;
           gboolean Handled;
           GtkWidget *MenuItem;
           GSList *list;
       t@@ -363,16 +363,14 @@ void HandleClientMessage(char *pt,Player *Play) {
              case C_ENDLIST:
                 MenuItem=gtk_item_factory_get_widget(ClientData.Menu,
                                                      "<main>/Errands/Spy");
       -         prstr=FormatPrice(Prices.Spy);
       -         text=g_strdup_printf(_("_Spy\t(%s)"),prstr);
       +         text=dpg_strdup_printf(_("_Spy\t(%P)"),Prices.Spy);
                 gtk_label_parse_uline(GTK_LABEL(GTK_BIN(MenuItem)->child),text);
       -         g_free(text); g_free(prstr);
       -         prstr=FormatPrice(Prices.Tipoff);
       -         text=g_strdup_printf(_("_Tipoff\t(%s)"),prstr);
       +         g_free(text);
       +         text=dpg_strdup_printf(_("_Tipoff\t(%P)"),Prices.Tipoff);
                 MenuItem=gtk_item_factory_get_widget(ClientData.Menu,
                                                      "<main>/Errands/Tipoff");
                 gtk_label_parse_uline(GTK_LABEL(GTK_BIN(MenuItem)->child),text);
       -         g_free(text); g_free(prstr);
       +         g_free(text);
                 break;
              case C_UPDATE:
                 if (From==&Noone) {
       t@@ -684,7 +682,7 @@ void UpdateInventory(struct InventoryWidgets *Inven,
           gint i,row,selectrow[2];
           gpointer rowdata;
           price_t price;
       -   gchar *titles[2],*prstr;
       +   gchar *titles[2];
           gboolean CanBuy=FALSE,CanSell=FALSE,CanDrop=FALSE;
           GList *glist[2],*selection;
           GtkCList *clist[2];
       t@@ -740,9 +738,8 @@ void UpdateInventory(struct InventoryWidgets *Inven,
              if (Objects[i].Carried > 0) {
                 if (price>0) CanSell=TRUE; else CanDrop=TRUE;
                 if (HaveAbility(ClientData.Play,A_DRUGVALUE)) {
       -            prstr=FormatPrice(Objects[i].TotalValue/Objects[i].Carried);
       -            titles[1] = g_strdup_printf("%d @ %s",Objects[i].Carried,prstr);
       -            g_free(prstr);
       +            titles[1] = dpg_strdup_printf("%d @ %P",Objects[i].Carried,
       +                              Objects[i].TotalValue/Objects[i].Carried);
                 } else {
                    titles[1] = g_strdup_printf("%d",Objects[i].Carried);
                 }
       t@@ -863,7 +860,6 @@ static struct DealDiaStruct DealDialog;
        
        static void UpdateDealDialog() {
           GString *text;
       -   gchar *prstr;
           GtkAdjustment *spin_adj;
           gint DrugInd,CanDrop,CanCarry,CanAfford,MaxDrug;
           Player *Play;
       t@@ -872,14 +868,12 @@ static void UpdateDealDialog() {
           DrugInd=DealDialog.DrugInd;
           Play=ClientData.Play;
        
       -   prstr=FormatPrice(Play->Drugs[DrugInd].Price);
       -   g_string_sprintf(text,_("at %s"),prstr);
       -   g_free(prstr);
       +   dpg_string_sprintf(text,_("at %P"),Play->Drugs[DrugInd].Price);
           gtk_label_set_text(GTK_LABEL(DealDialog.cost),text->str);
        
           CanDrop=Play->Drugs[DrugInd].Carried;
           dpg_string_sprintf(text,_("You are currently carrying %d %tde"),
       -                      Drug[DrugInd].Name,CanDrop);
       +                      CanDrop,Drug[DrugInd].Name);
           gtk_label_set_text(GTK_LABEL(DealDialog.carrying),text->str);
        
           CanCarry=Play->CoatSize;
       t@@ -1952,14 +1946,22 @@ static void TransferOK(GtkWidget *widget,GtkWidget *dialog) {
        
        void TransferDialog(gboolean Debt) {
           GtkWidget *dialog,*button,*label,*radio,*table,*vbox,*hbbox,*hsep,*entry;
       -   gchar *text,*prstr;
       +   gchar *text;
           GSList *group;
       +   gchar *tfmt,**tstr;
        
           dialog=gtk_window_new(GTK_WINDOW_DIALOG);
           gtk_signal_connect(GTK_OBJECT(dialog),"destroy",
                              GTK_SIGNAL_FUNC(SendDoneMessage),NULL);
       -   gtk_window_set_title(GTK_WINDOW(dialog),Debt ? Names.LoanSharkName :
       -                                                  Names.BankName);
       +   if (Debt) {
       +      tstring_fmt(&tfmt,&tstr,
       +                  _("**LoanShark window title** %Tde"),Names.LoanSharkName);
       +   } else {
       +      tstring_fmt(&tfmt,&tstr,
       +                  _("**BankName window title** %Tde"),Names.BankName);
       +   }
       +   gtk_window_set_title(GTK_WINDOW(dialog),tstr[0]);
       +   tstring_free(tfmt,tstr);
           gtk_container_set_border_width(GTK_CONTAINER(dialog),7);
           gtk_window_set_modal(GTK_WINDOW(dialog),TRUE);
           gtk_window_set_transient_for(GTK_WINDOW(dialog),
       t@@ -1970,21 +1972,18 @@ void TransferDialog(gboolean Debt) {
           gtk_table_set_row_spacings(GTK_TABLE(table),4);
           gtk_table_set_col_spacings(GTK_TABLE(table),4);
        
       -   prstr=FormatPrice(ClientData.Play->Cash);
       -   text=g_strdup_printf(_("Cash: %s"),prstr);
       +   text=dpg_strdup_printf(_("Cash: %P"),ClientData.Play->Cash);
           label=gtk_label_new(text);
       -   g_free(text); g_free(prstr);
       +   g_free(text);
           gtk_table_attach_defaults(GTK_TABLE(table),label,0,3,0,1);
        
           if (Debt) {
       -      prstr=FormatPrice(ClientData.Play->Debt);
       -      text=g_strdup_printf(_("Debt: %s"),prstr);
       +      text=dpg_strdup_printf(_("Debt: %P"),ClientData.Play->Debt);
           } else {
       -      prstr=FormatPrice(ClientData.Play->Bank);
       -      text=g_strdup_printf(_("Bank: %s"),prstr);
       +      text=dpg_strdup_printf(_("Bank: %P"),ClientData.Play->Bank);
           }
           label=gtk_label_new(text);
       -   g_free(text); g_free(prstr);
       +   g_free(text);
           gtk_table_attach_defaults(GTK_TABLE(table),label,0,3,1,2);
        
           gtk_object_set_data(GTK_OBJECT(dialog),"debt",GINT_TO_POINTER(Debt));
 (DIR) diff --git a/src/message.c b/src/message.c
       t@@ -1054,8 +1054,7 @@ void FormatFightMessage(Player *To,GString *text,
                                           _("armed to the teeth");
                 if (DefendName[0]) {
                    dpg_string_sprintfa(text,_("%s arrives with %d %tde, %s!"),
       -                                Names.Bitches,
       -                                DefendName,Bitches,Armament);
       +                                DefendName,Bitches,Names.Bitches,Armament);
                 }
                 break;
              case F_STAND:
       t@@ -1095,8 +1094,7 @@ void FormatFightMessage(Player *To,GString *text,
                                         AttackName,DefendName);
                    } else if (BitchesKilled) {
                       dpg_string_sprintfa(text,_("%s shoots at %s and kills a %tde!"),
       -                                   Names.Bitch,
       -                                   AttackName,DefendName);
       +                                   AttackName,DefendName,Names.Bitch);
                     } else {
                       g_string_sprintfa(text,_("%s shoots at %s."),
                                         AttackName,DefendName);
       t@@ -1108,8 +1106,7 @@ void FormatFightMessage(Player *To,GString *text,
                    } else if (BitchesKilled) {
                       dpg_string_sprintfa(text,
                                           _("%s shoots at you... and kills a %tde!"),
       -                                   Names.Bitch,
       -                                   AttackName);
       +                                   AttackName,Names.Bitch);
                    } else {
                       g_string_sprintfa(text,_("%s hits you, man!"),AttackName);
                    }
       t@@ -1118,8 +1115,7 @@ void FormatFightMessage(Player *To,GString *text,
                       g_string_sprintfa(text,_("You killed %s!"),DefendName);
                    } else if (BitchesKilled) {
                       dpg_string_sprintfa(text,_("You hit %s, and killed a %tde!"),
       -                                   Names.Bitch,
       -                                   DefendName);
       +                                   DefendName,Names.Bitch);
                    } else {
                       g_string_sprintfa(text,_("You hit %s!"),DefendName);
                    }
 (DIR) diff --git a/src/serverside.c b/src/serverside.c
       t@@ -1012,7 +1012,6 @@ void SendEvent(Player *To) {
           gchar *text;
           Player *Play;
           GSList *list;
       -   gchar *prstr;
        
           if (!To) return;
           if (To->EventNum==E_MAX) To->EventNum=E_NONE;
       t@@ -1047,8 +1046,8 @@ void SendEvent(Player *To) {
                           else j=brandom(0,NUMDISCOVER-1);
                           text=dpg_strdup_printf(
                                _("One of your %tde was spying for %s.^The spy %s!"),
       -                        Names.Bitches,
       -                        GetPlayerName(To->SpyList.Data[i].Play),_(Discover[j]));
       +                        Names.Bitches,GetPlayerName(To->SpyList.Data[i].Play),
       +                        _(Discover[j]));
                           if (j!=DEFECT) LoseBitch(To,NULL,NULL);
                           SendPlayerData(To);
                           SendPrintMessage(NULL,C_NONE,To,text);
       t@@ -1127,12 +1126,11 @@ 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 a %tde for %s?"),
       -                           Names.Bitch,
       -                           prstr=FormatPrice(To->Bitches.Price));
       +               text=dpg_strdup_printf(
       +                           _("YN^^Would you like to hire a %tde for %P?"),
       +                           Names.Bitch,To->Bitches.Price);
                       SendQuestion(NULL,C_ASKBITCH,To,text);
       -               g_free(text); g_free(prstr);
       +               g_free(text);
                       return;
                    }
                    break;
       t@@ -1554,20 +1552,18 @@ int OfferObject(Player *To,char ForceBitch) {
        /* TRUE, then a bitch is definitely offered. Returns 0 if the client */
        /* can advance immediately to the next state, 1 otherwise.           */
           int ObjNum;
       -   gchar *prstr,*text=NULL;
       +   gchar *text=NULL;
        
           if (brandom(0,100)<50 || ForceBitch) {
              if (WantAntique) {
                 To->Bitches.Price=brandom(MINTRENCHPRICE,MAXTRENCHPRICE);
       -         text=g_strdup_printf(_("Would you like to buy a bigger trenchcoat "
       -                              "for %s?"),prstr=FormatPrice(To->Bitches.Price));
       -         g_free(prstr);
       +         text=dpg_strdup_printf(_("Would you like to buy a bigger trenchcoat "
       +                                "for %P?"),To->Bitches.Price);
              } else {
                 To->Bitches.Price=brandom(Bitch.MinPrice,Bitch.MaxPrice)/10l;
       -         text=g_strdup_printf(_("YN^Hey dude! I'll help carry your %s for a "
       -                              "mere %s. Yes or no?"),Names.Drugs,
       -                              prstr=FormatPrice(To->Bitches.Price));
       -         g_free(prstr);
       +         text=dpg_strdup_printf(
       +                       _("YN^Hey dude! I'll help carry your %tde for a "
       +                         "mere %P. Yes or no?"),Names.Drugs,To->Bitches.Price);
              }
              SendQuestion(NULL,C_ASKBITCH,To,text);
              g_free(text);
       t@@ -1576,10 +1572,8 @@ int OfferObject(Player *To,char ForceBitch) {
              ObjNum=brandom(0,NumGun);
              To->Guns[ObjNum].Price=Gun[ObjNum].Price/10;
              if (Gun[ObjNum].Space>To->CoatSize) return 0;
       -      text=g_strdup_printf(_("YN^Would you like to buy a %s for %s?"),
       -                           Gun[ObjNum].Name,
       -                           prstr=FormatPrice(To->Guns[ObjNum].Price));
       -      g_free(prstr);
       +      text=dpg_strdup_printf(_("YN^Would you like to buy a %tde for %P?"),
       +                             Gun[ObjNum].Name,To->Guns[ObjNum].Price);
              SendQuestion(NULL,C_ASKGUN,To,text);
              g_free(text);
              return 1;
 (DIR) diff --git a/src/tstring.c b/src/tstring.c
       t@@ -20,6 +20,7 @@
        
        
        #include <stdio.h>
       +#include <string.h>
        #include <stdarg.h>
        
        #ifdef HAVE_CONFIG_H
       t@@ -31,6 +32,16 @@
        #include "message.h"
        #include "tstring.h"
        
       +typedef struct _FmtData {
       +   union {
       +      int IntVal;
       +      price_t PriceVal;
       +      char CharVal;
       +      char *StrVal;
       +   } data;
       +   char Type;
       +} FmtData;
       +
        gchar *GetTranslatedString(gchar *str,gchar *code,gboolean Caps) {
           gchar *dstr,*pt,*tstr,*Default,*tcode;
        
       t@@ -109,137 +120,161 @@ void tstring_free(gchar *tformat,gchar **tstrings) {
           g_free(tstrings);
        }
        
       -void GetNextFormat(int Index,gchar *str,int *StartPos,
       -                   int *EndPos,int *ArgNum,char *Code,gboolean *Caps) {
       -   int anum;
       -   *StartPos=*EndPos=*ArgNum=0;
       +void GetNextFormat(int *Index,gchar *str,int *StartPos,
       +                   int *EndPos,int *FmtPos,gchar *Type,int *ArgNum,int *Wid,
       +                   int *Prec,char *Code) {
       +   int anum,wid,prec,i;
       +   gchar type;
       +   *StartPos=-1;
       +   *EndPos=*FmtPos=*ArgNum=*Wid=*Prec=0;
       +   *Type=0;
           Code[0]=0;
       -   anum=0;
       -   while (str[Index]) {
       -      if (str[Index]=='%') {
       -         *StartPos=*EndPos=Index++;
       -         while (str[Index]>='0' && str[Index]<='9') {
       -            anum=anum*10+str[Index]-'0';
       -            Index++;
       -         }
       -         if (str[Index]=='$') {
       -            *EndPos=Index++; *ArgNum=anum;
       -         }
       -         if ((str[Index]=='T' || str[Index]=='t') && Index+2<strlen(str)) {
       -            *Caps=(str[Index]=='T');
       -            Code[0]=str[Index+1];
       -            Code[1]=str[Index+2];
       -            Code[2]=0;
       -            *EndPos=Index+2;
       -         }
       -         return;
       -      } else Index++;
       -   }
       -}
       -
       -void GetNextTString(gchar *str,int index,gchar *Code,gboolean *Caps,
       -                    int *NumArg,int *StartPos,int *EndPos) {
       -   int i;
       -   *StartPos=*EndPos=0;
       -   i=index;
       +   anum=wid=prec=0;
       +   i=*Index;
           while (str[i]) {
              if (str[i]=='%') {
       -         i++;
       -         if ((str[i]=='T' || str[i]=='t')
       -             && i+2<strlen(str)) {
       -            (*NumArg)++;
       -            *StartPos=i-1;
       -            *Caps = (str[i]=='T');
       +         *StartPos=*EndPos=i++;
       +         while (strchr("#0- +'",str[i])) i++;  /* Skip flag characters */
       +         while (str[i]>='0' && str[i]<='9') wid=wid*10+str[i++]-'0';
       +         if (str[i]=='$') {
       +            *EndPos=i;
       +            i++; anum=wid; wid=0;
       +            while (strchr("#0- +'",str[i])) i++;  /* Skip flag characters */
       +            while (str[i]>='0' && str[i]<='9') wid=wid*10+str[i++]-'0';
       +         }
       +         if (str[i]=='.') {
       +            i++;
       +            while (str[i]>='0' && str[i]<='9') prec=prec*10+str[i++]-'0';
       +         }
       +         *FmtPos=i;
       +         type=str[i];
       +         if ((type=='T' || type=='t') && i+2<strlen(str)) {
                    Code[0]=str[i+1];
                    Code[1]=str[i+2];
       -            Code[2]='\0';
       +            Code[2]=0;
                    i+=3;
       -            *EndPos=i;
       -            return;
       -         }
       +         } else i++;
       +         *ArgNum=anum; *Wid=wid; *Prec=prec; *Index=i; *Type=type;
       +         return;
              } else i++;
           }
       +   *Index=i;
        }
        
       -int SkipNextTString(gchar *str,int index) {
       -   gchar Code[3];
       -   gboolean Caps;
       -   int NumArg,StartPos,EndPos;
       -   GetNextTString(str,index,Code,&Caps,&NumArg,&StartPos,&EndPos);
       -   return EndPos;
       -}
       +gchar *HandleTFmt(gchar *format, va_list va) {
       +   int i,StrInd,StartPos,EndPos,FmtPos,ArgNum,DefaultArgNum,Wid,Prec;
       +   char Code[3],Type;
       +   gchar *retstr,*fstr;
       +   GString *string,*tmpfmt;
       +   GArray *arr;
       +   FmtData *fdat;
        
       -void SubstNextTString(GString *string,int *NumArg,GPtrArray *strs) {
       -   gchar Code[3];
       -   gboolean Caps;
       -   int StartPos,EndPos;
       -   gchar *str,*tstr;
       -
       -   GetNextTString(string->str,0,Code,&Caps,NumArg,&StartPos,&EndPos);
       -   if (EndPos!=0 && *NumArg>=1 && *NumArg<=strs->len) {
       -      str=(gchar *)g_ptr_array_index(strs,*NumArg-1);
       -      tstr=GetTranslatedString(str,Code,Caps);
       -      g_string_erase(string,StartPos,EndPos-StartPos);
       -      g_string_insert(string,StartPos,tstr);
       -      g_free(tstr);
       -   }
       -}
       +   string=g_string_new("");
       +   tmpfmt=g_string_new("");
        
       -gchar *HandleTFmt(gchar *format, va_list args) {
       -   GString *string;
       -   gchar *retstr;
       -   GPtrArray *tstrs;
       -   int i,numtstr,NumArg;
       -
       -   string=g_string_new(format);
       -   tstrs=g_ptr_array_new();
       -   i=numtstr=0;
       -   while (1) {
       -      i=SkipNextTString(string->str,i);
       -      if (i!=0) numtstr++; else break;
       +   arr=g_array_new(FALSE,TRUE,sizeof(FmtData));
       +   i=DefaultArgNum=0;
       +   while (i<strlen(format)) {
       +      GetNextFormat(&i,format,&StartPos,&EndPos,&FmtPos,&Type,&ArgNum,
       +                    &Wid,&Prec,Code);
       +      if (StartPos==-1) break;
       +      if (ArgNum==0) ArgNum=++DefaultArgNum;
       +      if (ArgNum>arr->len) {
       +         g_array_set_size(arr,ArgNum);
       +      }
       +      g_array_index(arr,FmtData,ArgNum-1).Type=Type;
           }
       -   for (i=0;i<numtstr;i++) {
       -      g_ptr_array_add(tstrs,(gpointer)va_arg(args,char *));
       +   for (i=0;i<arr->len;i++) {
       +      fdat=&g_array_index(arr,FmtData,i);
       +      switch(fdat->Type) {
       +         case '\0':
       +            g_error("Incomplete format string!"); break;
       +         case 'd':
       +            fdat->data.IntVal=va_arg(va,int); break;
       +         case 'P':
       +            fdat->data.PriceVal=va_arg(va,price_t); break;
       +         case 'c':
       +            fdat->data.CharVal=(char)va_arg(va,int); break;
       +         case 's': case 't': case 'T':
       +            fdat->data.StrVal=va_arg(va,char *); break;
       +         default:
       +            g_error("Unknown format type %c!",fdat->Type);
       +      }
           }
       -   NumArg=0;
       -   for (i=0;i<numtstr;i++) {
       -      SubstNextTString(string,&NumArg,tstrs);
       +   i=DefaultArgNum=0;
       +   while (i<strlen(format)) {
       +      StrInd=i;
       +      GetNextFormat(&i,format,&StartPos,&EndPos,&FmtPos,&Type,&ArgNum,
       +                    &Wid,&Prec,Code);
       +      if (StartPos==-1) {
       +         g_string_append(string,&format[StrInd]); break;
       +      }
       +      while (StrInd<StartPos) g_string_append_c(string,format[StrInd++]);
       +      if (ArgNum==0) ArgNum=++DefaultArgNum;
       +      g_string_assign(tmpfmt,"%");
       +      EndPos++;
       +      while (EndPos<FmtPos) g_string_append_c(tmpfmt,format[EndPos++]);
       +      if (Type=='T' || Type=='t' || Type=='P') g_string_append_c(tmpfmt,'s');
       +      else g_string_append_c(tmpfmt,Type);
       +      fdat=&g_array_index(arr,FmtData,ArgNum-1);
       +      if (Type!=fdat->Type) g_error("Unmatched types!");
       +      switch(Type) {
       +         case 'd':
       +            g_string_sprintfa(string,tmpfmt->str,fdat->data.IntVal); break;
       +         case 'c':
       +            g_string_sprintfa(string,tmpfmt->str,fdat->data.CharVal); break;
       +         case 'P':
       +            fstr=FormatPrice(fdat->data.PriceVal);
       +            g_string_sprintfa(string,tmpfmt->str,fstr); g_free(fstr); break;
       +         case 't': case 'T':
       +            fstr=GetTranslatedString(fdat->data.StrVal,Code,Type=='T');
       +            g_string_sprintfa(string,tmpfmt->str,fstr); g_free(fstr); break;
       +         case 's':
       +            g_string_sprintfa(string,tmpfmt->str,fdat->data.StrVal); break;
       +      }
           }
           retstr=string->str;
       -   g_ptr_array_free(tstrs,FALSE);
       +   g_array_free(arr,TRUE);
           g_string_free(string,FALSE);
       +   g_string_free(tmpfmt,TRUE);
           return retstr;
        }
        
       +void dpg_print(gchar *format, ...) {
       +   va_list ap;
       +   gchar *retstr;
       +   va_start(ap,format);
       +   retstr=HandleTFmt(format,ap);
       +   va_end(ap);
       +   g_print(retstr);
       +   g_free(retstr);
       +}
       +
        gchar *dpg_strdup_printf(gchar *format, ...) {
           va_list ap;
       -   gchar *newfmt,*retstr;
       +   gchar *retstr;
           va_start(ap,format);
       -   newfmt=HandleTFmt(format,ap);
       -   retstr=g_strdup_vprintf(newfmt,ap);
       -   g_free(newfmt);
       +   retstr=HandleTFmt(format,ap);
           va_end(ap);
           return retstr;
        }
        
        void dpg_string_sprintf(GString *string, gchar *format, ...) {
           va_list ap;
       -   gchar *newfmt,*retstr;
       +   gchar *newstr;
           va_start(ap,format);
       -   newfmt=HandleTFmt(format,ap);
       -   retstr=g_strdup_vprintf(newfmt,ap);
       -   g_string_assign(string,retstr);
       -   g_free(newfmt); g_free(retstr);
       +   newstr=HandleTFmt(format,ap);
       +   g_string_assign(string,newstr);
       +   g_free(newstr);
           va_end(ap);
        }
        
        void dpg_string_sprintfa(GString *string, gchar *format, ...) {
           va_list ap;
       -   gchar *newfmt,*retstr;
       +   gchar *newstr;
           va_start(ap,format);
       -   newfmt=HandleTFmt(format,ap);
       -   retstr=g_strdup_vprintf(newfmt,ap);
       -   g_string_append(string,retstr);
       -   g_free(newfmt); g_free(retstr);
       +   newstr=HandleTFmt(format,ap);
       +   g_string_append(string,newstr);
       +   g_free(newstr);
           va_end(ap);
        }
 (DIR) diff --git a/src/tstring.h b/src/tstring.h
       t@@ -30,6 +30,7 @@
        void tstring_fmt(gchar **tformat,gchar ***tstrings,char *OrigFormat, ...);
        void tstring_free(gchar *tformat,gchar **tstrings);
        
       +void dpg_print(gchar *format, ...);
        gchar *dpg_strdup_printf(gchar *format, ...);
        void dpg_string_sprintf(GString *string, gchar *format, ...);
        void dpg_string_sprintfa(GString *string, gchar *format, ...);
 (DIR) diff --git a/src/win32_client.c b/src/win32_client.c
       t@@ -116,31 +116,21 @@ static void DisplayStats(Player *Play,struct STATS *Stats) {
           g_string_sprintf(text,"Space available: %d",Play->CoatSize);
           SetWindowText(Stats->Space,text->str);
        
       -   prstr=FormatPrice(Play->Cash);
       -   g_string_sprintf(text,"Cash: %s",prstr);
       +   dpg_string_sprintf(text,"Cash: %P",Play->Cash);
           SetWindowText(Stats->Cash,text->str);
       -   g_free(prstr);
        
       -   prstr=FormatPrice(Play->Debt);
       -   g_string_sprintf(text,"Debt: %s",prstr);
       +   dpg_string_sprintf(text,"Debt: %P",Play->Debt);
           SetWindowText(Stats->Debt,text->str);
       -   g_free(prstr);
        
       -   prstr=FormatPrice(Play->Bank);
       -   g_string_sprintf(text,"Bank: %s",prstr);
       +   dpg_string_sprintf(text,"Bank: %P",Play->Bank);
           SetWindowText(Stats->Bank,text->str);
       -   g_free(prstr);
        
       -   caps=InitialCaps(Names.Guns);
       -   g_string_sprintf(text,"%s: %d",caps,TotalGunsCarried(Play));
       +   dpg_string_sprintf(text,"%Tde: %d",Names.Guns,TotalGunsCarried(Play));
           SetWindowText(Stats->Guns,text->str);
       -   g_free(caps);
        
           if (!WantAntique) {
       -      caps=InitialCaps(Names.Bitches);
       -      g_string_sprintf(text,"%s: %d",caps,Play->Bitches.Carried);
       +      dpg_string_sprintf(text,"%Tde: %d",Names.Bitches,Play->Bitches.Carried);
              SetWindowText(Stats->Bitches,text->str);
       -      g_free(caps);
           } else SetWindowText(Stats->Bitches,"");
        
           g_string_sprintf(text,"Health: %d",Play->Health);
       t@@ -192,13 +182,12 @@ void UpdateInventory(HWND HereList,HWND CarriedList,
              }
              if (HereList && price>0) {
                 CanBuy=TRUE;
       -         prstr=FormatPrice(price);
       -         text=g_strdup_printf("%s\t%s",name,prstr);
       +         text=dpg_strdup_printf("%s\t%P",name,price);
                 addresult=SendMessage(HereList,LB_ADDSTRING,0,(LPARAM)text);
                 if (addresult>=0 && addresult<NumObjects) {
                    SendMessage(HereList,LB_SETITEMDATA,(WPARAM)addresult,(LPARAM)i);
                 }
       -         g_free(text); g_free(prstr);
       +         g_free(text);
              }
              if (Objects[i].Carried>0) {
                 if (price>0) CanSell=TRUE; else CanDrop=TRUE;
       t@@ -221,15 +210,13 @@ static void SetErrandMenus(HWND hwnd) {
           menu=GetMenu(hwnd);
           if (!menu) return;
        
       -   prstr=FormatPrice(Prices.Spy);
       -   text=g_strdup_printf("&Spy\t(%s)",prstr);
       +   text=dpg_strdup_printf("&Spy\t(%P)",Prices.Spy);
           ModifyMenu(menu,ID_SPY,MF_BYCOMMAND | MF_STRING,ID_SPY,text);
       -   g_free(text); g_free(prstr);
       +   g_free(text);
        
       -   prstr=FormatPrice(Prices.Tipoff);
       -   text=g_strdup_printf("&Tipoff\t(%s)",prstr);
       +   text=dpg_strdup_printf("&Tipoff\t(%P)",Prices.Tipoff);
           ModifyMenu(menu,ID_TIPOFF,MF_BYCOMMAND | MF_STRING,ID_TIPOFF,text);
       -   g_free(text); g_free(prstr);
       +   g_free(text);
        
           DrawMenuBar(hwnd);
        }
       t@@ -447,9 +434,7 @@ static void UpdateDealDialog(HWND hwnd,LONG DealType,int DrugInd) {
        
           CanDrop=Play->Drugs[DrugInd].Carried;
           CanCarry=Play->CoatSize;
       -   prstr=FormatPrice(Play->Drugs[DrugInd].Price);
       -   g_string_sprintf(text,"at %s",prstr);
       -   g_free(prstr);
       +   dpg_string_sprintf(text,"at %P",Play->Drugs[DrugInd].Price);
           SetDlgItemText(hwnd,ST_DEALPRICE,text->str);
        
           g_string_sprintf(text,"You are currently carrying %d %s",
       t@@ -773,20 +758,17 @@ BOOL CALLBACK TransferWndProc(HWND hwnd,UINT msg,UINT wParam,
           switch(msg) {
              case WM_INITDIALOG:
                 Type=(char)lParam;
       -         prstr=FormatPrice(ClientData.Play->Cash);
       -         text=g_strdup_printf("Cash: %s",prstr);
       +         text=dpg_strdup_printf("Cash: %P",ClientData.Play->Cash);
                 SetDlgItemText(hwnd,ST_MONEY,text);
                 g_free(text); g_free(prstr);
                 if (Type==C_BANK) {
                    CheckDlgButton(hwnd,RB_WITHDRAW,BST_CHECKED);
       -            prstr=FormatPrice(ClientData.Play->Bank);
       -            text=g_strdup_printf("Bank: %s",prstr);
       +            text=dpg_strdup_printf("Bank: %P",ClientData.Play->Bank);
                 } else {
       -            prstr=FormatPrice(ClientData.Play->Debt);
       -            text=g_strdup_printf("Debt: %s",prstr);
       +            text=dpg_strdup_printf("Debt: %P",ClientData.Play->Debt);
                 }
                 SetDlgItemText(hwnd,ST_BANK,text);
       -         g_free(text); g_free(prstr);
       +         g_free(text);
                 return TRUE;
              case WM_COMMAND:
                 if (HIWORD(wParam)==BN_CLICKED) switch(LOWORD(wParam)) {