Installation
============

0. Installation fuer die Ungeduldigen
-------------------------------------
- das tar file entpacken in z.B. /usr/lib/X11
- cd patience-1.7
- Makfile editieren und die Zeilen 15, 16 und 24 ueberpruefen
- make install

1. Installation des ausfuehrbaren Tcl-Programms
-----------------------------------------------

Die Entscheidung, unter welchem Pfad das ausfuehrbare Pragramm und die
Library-Directory fuer die Patience angelegt werden, ist vom
persoenlichen Geschmack abhaengig. Mir fallen da als moegliche
Kandidatenkombinationen die im folgenden dargestellten ein.

 Ausfuehrbares Programm     	 Library-Directory
 ----------------------		 -----------------
 /usr/games/patience        	 /usr/games/lib/patience-1.7
 /usr/bin/X11/patience      	 /usr/lib/X11/patience-1.7
 /usr/local/bin/patience    	 /usr/local/lib/patience-1.7
 /home/krischan/bin/patience	 /home/krischan/patience-1.7

Wer immer jetzt die Patience einspielt, muss schreibberechtigt fuer
die beiden ausgewaehlten Directories sein. Dann kann die Patience durch
die folgenden Schritte installiert werden, wobei <binDir> und <libDir>
die beiden obigen Directories bezeichnen.

- In die der Library-Directory uebergeordneten Directory wechseln mit z.B.
    cd /usr/local/lib
- Die Installationsdiskette entpacken mit 'tar xvzf /dev/fd0'.
  Also zumindests funktioniert das so auf meinem Rechner. Evtl. muss
  auch ein anderer Name wie /dev/floppy oder /dev/rfd0H1440ds angegeben
  werden. Falls sich die Installation bereits auf der Platte oder einer CD
  befindet, kann sie mit 'tar xvzf /tmp/patience-1.7.tgz' (z.B.) entpackt
  werden.
  Wer ein tar besitzt, das die z-Option zum Entkomprimieren nicht versteht,
  muss den folgenden Fingerbrecher benutzen, um die Patience zu entpacken:
  'gzip -cd /cdrom/langerPfad/patience-1.7.tgz | tar xvf -'
- In die soeben erzeugte Directory wechseln: 'cd patience-1.7'.
- Mit dem Editor der Wahl das 'Makefile' editieren und im
  zweiten Teil (also so ungefaehr ab Zeile 15) die folgenden Variablen
  den Gegebenheiten auf der aktuellen Maschine und/oder den persoenlichen
  Vorlieben anpassen.
  = WISH: Dieser Variable wird der vollstaendige Pfadname des
          Tcl/Tk-Interpreters zugeordnet. Er kann (im Bourne-, Korn- oder
          aehnlichen Shell) erfragt werden durch einen Aufruf von
          'type wish'. Bei mir lautet die Zeile deshalb zur Zeit
          'WISH = /usr/bin/wish'.
  = LIB_DIR: Hier wird die vorhin ausgesuchte <libDir> eingetragen, bei mir
             lautet die Zeile z.Z. 'PAT_PATH = /usr/lib/X11/patience-1.7'.
  = BIN_DIR: Hier wird die vorhin ausgesuchte <binDir> eingetragen, bei mir
             lautet die Zeile z.Z. 'PAT_PATH = /usr/bin/X11/patience-1.7'.
  = CFLAGS: Fuer die Uebersetzung des erweiterten Patience-Interpreters
            'patsh' kann es wichtig sein, diese Variable korrekt zu setzen,
            falls sich die Tcl-Includedateien an einem ungewoenlichen Ort
            befinden.
- Dann 'make patience' aufrufen; nach spaetestens fuenf bis zehn Sekunden
  sollte alles fertig zum Losspielen sein. Im Programm ist deutsch als
  Defaultsprache eingestellt; wer diese Beschreibung bis hierher durchgelesen
  hat, sollte ruhig den Defaultwert belassen. Die Sprache kann durch eine
  Resource gesetzt werden (siehe Abschnitt 4. X-Resourcen).
- Ein Probespiel kann jetzt bereits mit './patience' aufgerufen werden.
  Damit es spaeter von ueberall her nur durch Nennung des Namens aufgerufen
  werden kann, muss noch der Befehl 'make install' ausgefuehrt werden.

2. Der erweiterte Interpreter
-----------------------------

Wer Lust hat, kann noch ein C-Programm 'patsh.c' uebersetzen; das
geschieht mit Hilfe des Makefiles und einem Aufruf von 'make patc'.
Anschliessend wird das erzeugte ausfuehrbare Programm installiert durch
'make installc'.

Durch obigen Aufruf wird neben dem Programm noch ein
Patience-Interpreter  'patsh' erzeugt; er entspricht dem normalen
Tk-Interpreter 'wish', ist allerdings um zwei Funktionen erweitert:
- Das Mischen sowie einige zentrale Prueffunktionen sind in C
  realisiert und damit schneller.
- Das Hupen, falls kein Vorschlag mehr gemacht werden kann,
  gelingt auch, wenn das Programm ohne eine Standardausgabe gestartet
  wurde (das ist z.B. der Fall, wenn die Patience aus dem
  Rootmenue, also direkt vom Windowmanager gestartet wurde).

3. Starten unter anderem Namen
------------------------------

Wenn das Programm den Namen einer bekannten Patienceregel besitzt,
wird bei Programmstart sofort ein Spiel mit den entsprechenden Regeln
gestartet. Wer also mag, kann nach Ausfuehrung der folgenden zwei
Befehle das Programm gleich mit der Kleinen Harfe oder Canfield
aufrufen:
  ln -s patience canfield
  ln -s patience klHarfe
Das gelingt natuerlich auch mit den internen Namen von anderen,
selbstkonstruierten Regelsaetzen.

Der gewuenschte Name kann auch als Parameter mit uebergeben
werden. Die Streitpatience ist daher auch direkt spielbar durch
  patience -name streit

Es ist also z.B. moeglich, im Rootmenue des Windowmanagers ein Untermenue
Patience zu erzeugen, dass die Patience mit der jeweiligen Spielregel
startet. In der Initialisierungsdatei ~.fvwmrc des
fvwm-Windowmananger sieht das wie folgt aus:

Popup "Patience 1.7"
  Exec "Standard"  exec patience &
  Exec "Kl. Harfe" exec patience -name klHarfe  &
  Exec "Canfield"  exec patience -name canfield &
  Exec "Spinne"    exec patience -name spider   &
  Exec "Streit"    exec patience -name streit   &
EndPopup

4. X-Resourcen
--------------

Das Programm greift auf ein paar Resourcevariablen zurueck, die das
aeussere Erscheinungsbild aendern koennen. In der folgenden Tabelle
sind die Namen, die Defaultwerte und ihre Bedeutung im einzelnen
aufgelistet.

Resource      Defaultwert Bedeutung
background    bisque	  Hintergrundfarbe der Spielflaeche
rot           IndianRed4  Rote Farbe der Karo- und Herzkarten
weiss         gary95	  Weisse Hintergrundfarbe der Karten
grau          gray80	  Graue Hintergrundfarbe der Stoecke
warteZeit     10	  Vorgabe der Wartezeit bei der Pfeildarstellung
mitMischComic True	  Vorgabe von Mit Comics/Verteilen
mitBewegComic True	  Vorgabe von Mit Comics/Kartenbewegen
kartenFont    normal	  Vorgabe des Kartenfonts
sprache       deutsch	  die Sprache (deutsch oder english)

Die Resourcen werden nacheinander an den folgenden Orten mit
aufsteigender Prioritaet gesucht:

- die vom Programm vorgegebenen Defaultwerte, wie in obiger Tabelle
  beschrieben;
- in der systemweit installierten Resourcedatei <libDir>/app-default;
- in der von der Spielerin konfigurierten Resourcedatei ~/.Xdefaults;
- in den durch 'xrdb -merge' definierten Resourcen.

In den Resourcedateien hat die Zuordnung eines Wertes zu einer
Resource den folgenden Aufbau:
  *patience.<Resourcename>: <Wert>
Beispielsweise wird der Schwarz/Weiss-Font als Vorgabe fuer die
Kartendarstellung gesetzt durch:
  *patience.kartenFont: sw

5. Bekannte Fehler
------------------

- Wird mit der mittleren Maustaste ein Menue festgeklemmt
  und eine Funktion daraus aufgerufen, sind alle Mausevents in der
  Spielflaeche und in anderen Dialogen deaktiviert. (Fehler in Tk?)
- Der Pfeil hat bei komprimierten Stapeln eine falsche Y-Koordinate.
- Streitpatience: Der Computer mogelt! Unter gewissen Umstaenden nimmt
  er Karten vom Talon, obwohl sie dort schon seit der letzten Runde liegen.

6. Ausstehende Verbesserungen
-----------------------------
- Der Pfeil beim Vorschlag laesst keine Button-Events durch.
- Karten sollten ueber der Anzeige der Kartenanzahl dargestellt
  werden, nicht dahinter.
- Alle nicht sichtbaren Karten (auf Stock, Talon und Strafstapel)
  sollten von der Bildflaeche geloescht werden, damit das Geben und der
  Verteilcomic schneller gehen.

