1 
2 /*
3     xskat - a card game for 1 to 3 players.
4     Copyright (C) 2004  Gunter Gerhardt
5 
6     This program is free software; you can redistribute it freely.
7     Use it at your own risk; there is NO WARRANTY.
8 
9     Redistribution of modified versions is permitted
10     provided that the following conditions are met:
11     1. All copyright & permission notices are preserved.
12     2.a) Only changes required for packaging or porting are made.
13       or
14     2.b) It is clearly stated who last changed the program.
15          The program is renamed or
16          the version number is of the form x.y.z,
17          where x.y is the version of the original program
18          and z is an arbitrary suffix.
19 */
20 
21 #define TEXT_C
22 
23 #include <stdlib.h>
24 #include <stdio.h>
25 #include <string.h>
26 #include <ctype.h>
27 #include "defs.h"
28 #include "text.h"
29 
30 #define VERSION   " X S K A T   4.0 "
31 #define COPYRIGHT "Copyright 2004 � Gunter Gerhardt"
32 #define URL       "http://www.xskat.de"
33 
34 static char *ger_text[]={
35   "Null","Karo","Herz","Pik","Kreuz","Grand","Ramsch",
36   "As","10","K�nig","Dame","Bube","9","8","7",
37   " A"," 10"," K"," D"," B"," 9"," 8"," 7",
38   "Schellen","Rot","Gr�n","Eicheln",
39   "As","10","K�nig","Ober","Unter","9","8","7",
40   " A"," 10"," K"," O"," U"," 9"," 8"," 7",
41   "Hand gespielt","Schneider angesagt","Schwarz angesagt",
42   "Ouvert gespielt","Ouvert Hand gespielt",
43   "Passe","Ja","Nein","Spieler%d","Computer","links","rechts",
44   "Dr�cken","spielt ","ouvert Hand","ouvert","Hand","Ouvert",
45   "�berlegt","Gereizt bis: %d","L�schen"," spielte ",
46   "Gewonnen"," gewann ","Verloren"," verlor ","%d Augen",
47   "�berreizt !","Gegner nicht Schneider !","Gegner nicht schwarz !",
48   "Eine Jungfrau !","Durchmarsch !",
49   "Niemand","gewinnt","verliert","den Ramsch",
50   "das Nullspiel.","das Spiel schwarz !","mit %d zu %d Augen.",
51   " Hand ? "," Spiel beenden ? "," Spielende ","beendet das Spiel","Aha",
52   " L�schen ? "," Spiel ","Schneider","Schwarz","Spielen"," Hinweis ",
53   "Nur bei Handspielen kann Schneider",
54   "oder schwarz angesagt werden.",
55   "Ouvert schlie�t schwarz angesagt",
56   "ein (au�er bei Null nat�rlich).",
57   "Du hast h�her gereizt als der",
58   "Wert des angesagten Spiels !",
59   "Null:23  Null ouvert:46",
60   "Null Hand:35  Null ouvert Hand:59",
61   "Revolution:92",
62   " Angesagt ist "," Resultat ","Der Spielwert ist","Ende",
63   "Spiele gewonnen/verloren",
64   "Protokoll","Weiter"," Protokoll ",
65   "Im Skat ist:",
66   "Im Skat war:",
67   "Urspr�nglicher Skat",
68   "Gereizt bis:",
69   "Gewonnen mit:",
70   "Verloren mit:",
71   "Spielliste"," Spielliste ",VERSION,
72   COPYRIGHT,URL,
73   "Andere Kartenbilder zum Download",
74   "sind unter obiger URL zu finden.",
75   "Verwendung der Kartenbilder",
76   "mit Genehmigung der",
77   "Spielkartenfabrik Altenburg GmbH,",
78   "Marke ASS Altenburger",
79   "Sortieren","Aufw�rts","Abw�rts","Alternierend","Sequentiell",
80   "Normal",
81   "Gereizt bis:","Gespielt wird:","Letzter Stich:",
82   "Du bist dran !","Vordefiniertes Spiel","Speichern",
83   "Dieses Programm ist freie Software;",
84   "es kann frei verbreitet werden.",
85   "Benutzung auf eigenes Risiko;",
86   "es gibt KEINE GARANTIE.",
87   "Optionen"," Computer ","Spielst�rke","--","-","0","+","++",
88   "Name",
89   "Vorschl�ge"," Varianten ",
90   "Ramsch spielen","Immer",
91   " Ramsch-Varianten ",
92   "Skat geht an","letzten Stich","Verlierer",
93   "Schieberamsch"," Skat aufnehmen ? ","Fertig",
94   "Buben d�rfen nicht geschoben werden.",
95   "Unter d�rfen nicht geschoben werden.",
96   " Spielwert verdoppelt ","nimmt den Skat nicht auf.","klopft !",
97   "VH schob:","MH schob:","HH schob:",
98   "Kontra sagen","mit Kontra","ab 18","Kontra"," Kontra ! ","Re","von ",
99   "Wiederholen"," Spiel wiederholen ","mit den Karten von","mir",
100   "Vorhand wechselt:","Start","Zur�ck",
101   " Geschwindigkeit ","Nimm Stich nach:","Sekunden","Maus-Klick",
102   "Abk�rzung","Fragen","Nie",
103   "Bock-Runden","+Ramsch","Bock-Runden fortsetzen",
104   " Bock-Ereignisse ","Bock-Ereignis","%d Bock-Ereignisse",
105   "Bock-Spiele:"," Grand Hand ? ","   Bock-Spiel   ",
106   "Verloren mit 60 Augen","Grand Hand gewonnen",
107   "Erfolgreicher Kontra","Kontra & Re angesagt",
108   "NNN Punkte in Spielliste","N00 Punkte in Spielliste",
109   "Spielwert ist >= +72","Spielwert ist >= +96",
110   " Benutzeroberfl�che ","Tastatur",
111   "Men�-Taste","Jede",
112   "Wenig Hinweise",
113   "Stich-Karten von links nach rechts",
114   "Spitze","z�hlt 2","Spitze verloren !","Spitze !",
115   "Spitze nicht erlaubt !",
116   "Niedrigster Trumpf nicht auf der Hand.",
117   "Grand mit 4.",
118   " Null ist dicht ! "," Rest bei mir ! ","Karten aufdecken ?",
119   "Revolution","Revolution: Karten austauschen !",
120   "Vorhand","Mittelhand","Hinterhand",
121   "Klopfen"," Klopfen ","Spielwert verdoppeln ?",
122   "Schenken"," Schenken ","Spiel verloren geben ?","Geschenk annehmen ?",
123   "Mitspieler lehnt ab.","Gegner geben auf.","Annehmen",
124   "Geben","Schnell","Langsam",
125   " Grafik & Text ",
126   "Blatt","Franz�sisch","Franz�sisch (4 Farben)",
127   "Deutsch","Deutsch (4 Farben)",
128   "Sprache","Deutsch","English",
129   "Alte Regeln",
130   "Ein Maus-Klick oder ESC / F1","bringt dieses Men� zur Anzeige",
131   " Mehrspieler-Modus ",
132   " Lokales Spiel �ber LAN ",
133   "Eigenen Spieltisch er�ffnen",
134   "An anderem Tisch Platz nehmen",
135   "Spieler2 einladen:",
136   "Spieler3 einladen:",
137   "Rechnername oder IP-Adresse",
138   "Spieltisch er�ffnen",
139   "Spieltisch:",
140   "Zugriff auf X-Server wird erlaubt!",
141   "Ggf. nach dem Spiel zur�cknehmen.",
142   "Siehe: man xhost",
143   "Am Tisch Platz nehmen",
144   "(Schlie�t dieses Fenster)",
145   " Internet-Spiel �ber IRC ",
146   "IRC-Verbindung herstellen mit:",
147   "Erweiterte IRC-Konfiguration siehe:",
148   "man xskat",
149   "Verschiedene Versionen",
150   "(Probleme? README.IRC-de oder 'man xskat' ANMERKUNGEN lesen!)",
151   "Nicht auf diesem Kanal !",
152   "Nur ein Spieler sollte /go sagen !  Nochmal.",
153   "Sollte das /go%s sein ?",
154   "Verbunden mit Spieler%d.",
155   "Warten auf Spieler%d.",
156   "\n Zum Spielen mit /join #xskatXYZ auf einen freien Kanal wechseln.",
157   " Wenn alle Mitspieler auf diesem Kanal sind, mu� einer /go eingeben,",
158   " bzw. /go2, wenn nur 2 Spieler teilnehmen.",
159   " Zeilen, die nicht mit / beginnen, werden als Nachricht verschickt.\n",
160   " ### XSkat-Zeiten: jeden Fr 13:30 und So 18:00 MEZ/MESZ ###\n",
161   "Offizielle Regeln",
162   "Position","Alternativ","Turnier","Geber",
163   "Unbekanntes Kommando (versuche /help)",
164   "/join kanal - wechsle auf einen anderen Kanal",
165   "/go, /go2 - starte Spiel mit 3 bzw. 2 Spielern",
166   "/quit - beende XSkat",
167   "/nick name, /nick - �ndere Namen oder zeige ihn an",
168   "/who - wer ist auf dem aktuellen Kanal ?",
169   "/list, /list text - zeige Kan�le (die xskat/text enthalten)",
170   "/pos n - setze Position auf 1, 2 oder 3",
171   "/bell - schalte Alarmton ein/aus",
172   "/sync - synchronisiere sofort",
173   "/quote command args - f�r Spezialisten",
174   "/default - aktiviere offizielle Regeln",
175   "/ramsch n, /sramsch b, /skattoloser b, /kontra n, /bock n, /resumebock n,",
176   " /spitze n, /revolution b, /klopfen b, /schenken b, /oldrules b,",
177   " /bockevents n, /alist b, /tlist b, /start n, /s1 n",
178   " - �ndere Regeln (n ist eine Zahl, b ist true/false)",
179   "/rules - zeige allen Mitspielern aktuelle Regeln an"
180 };
181 
182 static char *eng_text[]={
183   "Null","Diamond","Heart","Spade","Club","Grand","Ramsch",
184   "Ace","10","King","Queen","Jack","9","8","7",
185   " A"," 10"," K"," Q"," J"," 9"," 8"," 7",
186   "Bells","Hearts","Leaves","Acorns",
187   "Ace","10","King","Ober","Unter","9","8","7",
188   " A"," 10"," K"," O"," U"," 9"," 8"," 7",
189   "Played Hand","Schneider announced","Schwarz announced",
190   "Played ouvert","Played ouvert Hand",
191   "Pass","Yes","No","Player%d","Computer","left","right",
192   "Done","plays ","ouvert Hand","ouvert","Hand","Ouvert",
193   "thinks","You have bid: %d","Clear"," played ",
194   "Won"," won ","Lost"," lost ","%d points",
195   "Overbid !","Opponents not Schneider !","Opponents not schwarz !",
196   "One virgin !","Forced march !",
197   "Nobody","wins","loses","the Ramsch",
198   "the Null game.","the game schwarz !","with %d vs %d points.",
199   " Hand ? "," Quit game ? "," Game over ","quits the game","OK",
200   " Clear ? "," Game ","Schneider","Schwarz","Play"," Reminder ",
201   "Only when playing Hand you may",
202   "say Schneider or schwarz.",
203   "Ouvert includes schwarz",
204   "(except when playing Null).",
205   "The value of your game",
206   "is not high enough !",
207   "Null:23  Null ouvert:46",
208   "Null Hand:35  Null ouvert Hand:59",
209   "Revolution:92",
210   " Playing "," Result ","The value of the game is","Quit",
211   "Games won/lost",
212   "Log","Continue"," Log ",
213   "Skat is:",
214   "Skat was:",
215   "Original Skat",
216   "Last bid:",
217   "Won with:",
218   "Lost with:",
219   "Game list"," Game list ",VERSION,
220   COPYRIGHT,URL,
221   "Download other card images",
222   "from the URL given above.",
223   "Card images used",
224   "with permission by",
225   "Spielkartenfabrik Altenburg GmbH,",
226   "Marke ASS Altenburger",
227   "Sort","Up","Down","Alternating","Sequential",
228   "Normal",
229   "Bidding:","Playing:","Last trick:",
230   "It's your turn !","      predefined game      ","Save",
231   "This program is free software;",
232   "you can redistribute it freely.",
233   "Use xskat at your own risk;",
234   "there is NO WARRANTY.",
235   "Options"," Computer ","Playing strength","--","-","0","+","++",
236   "Name",
237   "Hints"," Variations ",
238   "Play Ramsch","Always",
239   " Ramsch variations ",
240   "Skat goes to","last trick","loser",
241   "Schieberamsch"," Pick up Skat ? ","Done",
242   "It's not allowed to pass on jacks.",
243   "It's not allowed to pass on unters.",
244   " Game score doubled ","doesn't pick up the Skat.","knocks !",
245   "FH passed:","MH passed:","RH passed:",
246   "Say Kontra","with Kontra","if 18","Kontra"," Kontra ! ","Re","by ",
247   "Replay"," Replay game ","with the cards from","me",
248   "Forehand changes:","Start","Back",
249   " Speed ","Take trick after:","seconds","mouse click",
250   "Shortcut","Ask","Never",
251   "Bockrounds","+Ramsch","Resume Bockrounds",
252   " Bock events ","Bock event","%d Bock events",
253   "Bock games:"," Grand Hand ? ","   Bock game   ",
254   "Lost with 60 points","Successful Grand Hand",
255   "Successful Kontra","Kontra & Re game",
256   "NNN points in game list","N00 points in game list",
257   "Game value is >= +72","Game value is >= +96",
258   " User interface ","Keyboard",
259   "Menu button","Any",
260   "Few messages",
261   "Trick cards from left to right",
262   "Spitze","counts 2","Lost Spitze !","Spitze !",
263   "Spitze not allowed !",
264   "Lowest trump not in your hand.",
265   "Grand with 4.",
266   " Null is safe ! "," Rest is mine ! ","Show cards ?",
267   "Revolution","Revolution: exchange cards !",
268   "Forehand","Middlehand","Rearhand",
269   "Klopfen"," Klopfen ","Double game value ?",
270   "Schenken"," Schenken ","Give up the game ?","Accept the gift ?",
271   "Partner disagrees.","Opponents give up.","Accept",
272   "Deal","Fast","Slow",
273   " Graphic & Text ",
274   "Cards","French","French (4 colors)",
275   "German","German (4 colors)",
276   "Language","Deutsch","English",
277   "Old rules",
278   "A mouse click or ESC / F1","will bring up this menu",
279   " Multiplayer mode ",
280   " Local game via LAN ",
281   "Open own game table",
282   "Join other table",
283   "Invite Player2:",
284   "Invite Player3:",
285   "Computer name or IP address",
286   "Open game table",
287   "Game table:",
288   "Access to X server will be granted!",
289   "Remove after the game, if need be.",
290   "See: man xhost",
291   "Join game table",
292   "(Will close this window)",
293   " Internet game via IRC ",
294   "Establish IRC connection with:",
295   "Extended IRC configuration see:",
296   "man xskat",
297   "Version mismatch",
298   "(Problems? See README.IRC or 'man xskat' NOTES!)",
299   "Not on this channel !",
300   "Only one player should say /go !  Try again.",
301   "Did you mean /go%s ?",
302   "Connected to Player%d.",
303   "Waiting for Player%d.",
304   "\n Start playing by typing /join #xskatXYZ to switch to a free channel.",
305   " When all players are on this channel, one player has to enter /go,",
306   " or /go2, if there are only 2 players.",
307   " Lines that don't begin with / are sent as messages.\n",
308   " ### XSkat times: every Fri 13:30 and Sun 18:00 MET/MEST ###\n",
309   "Official rules",
310   "Position","Alternative","Tournament","Dealer",
311   "Unknown command (try /help)",
312   "/join channel - switch to another channel",
313   "/go, /go2 - start a game with 3 or 2 players",
314   "/quit - terminate XSkat",
315   "/nick name, /nick - change or display your nickname",
316   "/who - is on the current channel ?",
317   "/list, /list string - show channels (matching xskat/string)",
318   "/pos n - set position to 1, 2 or 3",
319   "/bell - toggle the alarm bell",
320   "/sync - synchronize now",
321   "/quote command args - for specialists",
322   "/default - set the official rules",
323   "/ramsch n, /sramsch b, /skattoloser b, /kontra n, /bock n, /resumebock n,",
324   " /spitze n, /revolution b, /klopfen b, /schenken b, /oldrules b,",
325   " /bockevents n, /alist b, /tlist b, /start n, /s1 n",
326   " - change the rules of the game (n is a number, b is true/false)",
327   "/rules - show the current rules to everyone on your channel"
328 };
329 
330 static struct {
331   char **arr;
332   char *name[NUM_LANG];
333   char *langpref[5];
334 } textdesc[NUM_LANG] = {
335   {ger_text,{"deutsch","german"},{"de","german",0}},
336   {eng_text,{"englisch","english"},{"en",0}}
337 };
338 
init_text()339 VOID init_text()
340 {
341   int i,j;
342 
343   for (i=0;i<NUM_LANG;i++) {
344     for (j=0;j<TX_NUM_TX;j++) {
345       textarr[j].t[i]=textdesc[i].arr[j];
346     }
347   }
348 }
349 
idxlang(i)350 char *idxlang(i)
351 int i;
352 {
353   return textdesc[i].name[0];
354 }
355 
langidx(s)356 int langidx(s)
357 char *s;
358 {
359   char h[80];
360   int i,j;
361 
362   for (i=0;i<79 && s && *s;i++,s++) {
363     h[i]=tolower(*s);
364   }
365   h[i]=0;
366   for (i=0;i<NUM_LANG;i++) {
367     for (j=0;j<NUM_LANG;j++) {
368       if (!strcmp(textdesc[i].name[j],h)) return i;
369     }
370   }
371   if (s) {
372     fprintf(stderr,"Unknown language '%s'.  Try one of:",h);
373     for (i=0;i<NUM_LANG;i++) {
374       if (i) fputc(',',stderr);
375       fprintf(stderr," %s",textdesc[i].name[1]);
376     }
377     fputs(".\n",stderr);
378   }
379   s=getenv("LANG");
380   if (!s) s=getenv("LANGUAGE");
381   if (s) {
382     for (i=0;i<79 && s && *s;i++,s++) {
383       h[i]=tolower(*s);
384     }
385     h[i]=0;
386     for (i=0;i<NUM_LANG;i++) {
387       for (j=0;j<5 && textdesc[i].langpref[j];j++) {
388 	if (!strncmp(h,textdesc[i].langpref[j],
389 		     strlen(textdesc[i].langpref[j]))) return i;
390       }
391     }
392   }
393   for (i=0;i<NUM_LANG;i++) {
394     for (j=0;j<NUM_LANG;j++) {
395       if (!strcmp(textdesc[i].name[j],DEFAULT_LANGUAGE)) return i;
396     }
397   }
398   return 0;
399 }
400