							-*- text -*-
			      Natch 2.4
			      ---------


Voici Natch 2.4, un programme pour rsoudre des parties justificatives
aux checs.

L'entre de Natch est un fichier texte contenant une position d'checs
au format Forsythe et un nombre de demi-coups.  Natch cherche toutes
les parties justificatives menant  la position en exactement le
nombre de coups spcifi.

Natch comprend les langues suivantes : allemand, anglais et franais.

Il n'y a pas d'interface graphique (mais voir le logiciel iNatch),
mais l'avancement de la rsolution peut tre montre dans une fentre
texte.


Installation
------------
Le logiciel s'installe en suivant les instructions gnriques du
fichier INSTALL.  Si Natch ne doit pas tre install dans le
rpertoire bin, il ne faut pas utiliser la commande `make install'.
L'excutable peut tre copi  la main dans le rpertoire de votre
choix.

Si vous ajoutez l'option `--enable-chloe'  l'excution de la commande
`configure', Natch sera compil avec la possibilit de lire des
fichiers au format Chloe (avec l'extension `.chl') en plus du format
texte forsythe.  Ce n'est utile que sur une machine DOS/Windows, seul
systme o fonctionne Chloe.

Vous aurez peut-tre  diter les Makefiles pour supprimer les
caractres `^M'  la fin de chaque ligne.


Options de compilation
----------------------
Les options de compilation par dfaut sont pour une version release :
`-DNDEBUG -O3'.  Si vous tes intress par une version debug,
remplacer la variable CFLAGS du fichier Makefile se trouvant dans le
rpertoire src par `-g'.


Warning  la compilation
------------------------
Si votre systme n'a pas la librarie ncurses mais curses (ce qui est
automatiquement dtect par configure), vous pouvez avoir des
warnings.

Si votre systme n'a pas getopt_long et le remplace par les fichiers
getopt.c et getopt1.c (ce qui est aussi fait automatiquement par
configure), vous pouvez aussi avoir 2 warnings  la compilation du
fichier ( propos de strncmp et indfound).


Tests
-----
Tous les tests devraient passer correctement en quelques minutes (le
temps dpends de la vitesse de votre machine).


Fichiers source
---------------
Une grande partie du logiciel a t dvelopp dans un environnement
DOS/Windows.  Certains fichiers peuvent donc avoir des fin de lignes 
la DOS (CR+LF) se qui se traduit par la prsence du caractre `^M'  la
fin des lignes.  Mais cela ne doit gner en aucune manire.


Utiliser Natch
--------------
Voici le rsultat de `Natch --help', montrant les options possibles :

Natch 2.4

Purpose:
  This program solves chess proof games.

Usage: Natch [OPTIONS]... [FILES]...

  -h, --help            Print help and exit
  -V, --version         Print version and exit
  -b, --beep            Beep at the end of the resolution  (default=on)
  -c, --continue=N      Continue resolution at position N
  -e, --explore         Explore moves  (default=on)
  -f, --verbose         Show progress on standard output  (default=off)
  -k, --watch=STRING    Watch occupied squares. See documentation
  -l, --language=CHAR   Language of output.  CHAR is `d' or `g' for Deutsch, 
                          `e' for English or `f' for Franais
  -m, --moves=N         Find all solutions in N single moves
  -o, --output=FILE     Output informations to FILE
  -p, --position[=LEVEL]Show positions.  LEVEL is 1 for positions, 2 for 
                          positions and moves order.  Without LEVEL, 1 is 
                          assumed.
  -s, --stop=N          Stop resolution after N solutions
  -t, --hash-size=N     Use N Mb for hash-table size  (default=`6')
  -v, --visual          Visual mode  (default=off)

Maintained by Pascal Wassong <pascal.wassong@free.fr>
Report bugs to <Natch@free.fr>


L'option la plus importante est `--hash-size'.  Utilisez la valeur la
plus grande possible, en fonction de la mmoire de votre ordinateur,
de telle manire qu'il n'utilise pas le disque dur.  Une valeur de
`32', par exemple, signifie d'utiliser 32 mga-octets de mmoire pour
les tables de hashage.  Il faut bien sr laisser un peu de mmoire au
systme et au programme.

Une utilisation courante est :

Natch --hash-size 32 --language f --visual --output solution.txt problem.txt

ou bien avec les noms d'options courts :

Natch -t 32 -l f -v -o solution.txt problem.txt

Le fichier d'entre doit contenir une position au format forsythe,
voir le fichier example.txt.  Avec DOS, il est aussi possible
d'utiliser un fichier au format de Chloe.

Utiliser l'option `--moves' est prioritaire par rapport au nombre de
coups donn dans le fichier d'entre.

L'option `--verbose' est annule par l'option `--visual'.  Mais elle
fonctionne avec `--output'.  En fait, elle peut remplacer l'option
`--visual' sur les systmes o celle-ci n'existe pas.

L'option `--position' fonctionne mme avec l'option `--output', o
elle est en fait trs utile.

Les options `--beep', `--explore', `--verbose', `--position' et
`--visual' bascule du mode activ  dsactiv et vice versa  chaque
utilisation de l'option sur la mme ligne de commande.


La variable NATCH
-----------------

La variable d'environnement NATCH peut contenir des paramtres par
dfaut qui sont utiliss de manire constante pour la rsolution de
chaque problme.  Typiquement cette variable dimensionne les `hash
tables' et positionne la langue  utiliser.

Vous pouvez par exemple l'initialiser dans le fichier d'initialisation
ainsi :

`AUTOEXEC.BAT' pour DOS

     set NATCH=--hash-size 32 --language f --visual

`.profile' e.g. pour Linux

     NATCH="--hash-size 32 --language f --visual"

Ces paramtres sont traits avant les paramtres de la ligne de
commande.  Les paramtres de la ligne de commande ont donc la priorit
(pour les options `--hash-size' et `--language' par exemple).

Attention, certaines options basculent entre les tats activs et
dsactivs  chaque fois que l'option est spcifie.  Par exemple, si
la variable NATCH contient dj l'option `--visual' et qu'elle est
rpte sur la ligne de commande, cette option est dsactive.


L'option `--watch'
------------------

La manire normale pour utiliser cette option est par exemple :
`--watch 4,e5,d6'.  Cela signifie que pendant les 4 premiers
demi-coups de la rsolution, si les cases e5 et d6 sont occupes par
la pice qui y est au diagramme, alors cette case est considre comme
un obstacle pour les autres pices s'il reste moins de 2 coups libres.
Le caractre sparant les sous-options (`,' dans l'exemple ci-dessus)
peut tre n'importe lequel parmi les caractres suivants : `.,;:/+-'.

Cette option est consommatrice en temps de calcul.  C'est pourquoi il
ne faut pas trop augmenter la valeur numrique.  Il faut utiliser
cette option lorsque l'un des camps a beaucoup de coups de libres.  Si
les 2 camps n'ont aucun coup de libre, cette option fait perdre plus
de temps qu'elle n'en fait gagner.  Mais dterminer la meilleure
valeur numrique possible est trs dpendant du problme et il est
impossible de donner une valeur par dfaut ici.

Les cases  surveiller sont en gnral facile  dterminer.  Ce sont
les cases sur lesquelles la pice du diagramme ne doit pas jouer trop
tt alors qu'elle en a la possibilit.

Voici un exemple :

Michel Caillaud et Markus Ott
feenschach, 1982
ddi  K. Widlert, 2me prix
t2dc1c1/2p5/3p1p2/tp2pp2/rf6/1P6/P2PPPPP/1fF1Rc1T
49 demi-coups.

Ce problme est reproduit dans le livre de Wilts et Frolkin "Shortest
Proof Games" sous le numro 58.

Nous ne nous intressons ici qu'au 37 premiers demi-coups simples :

t1fdc1c1/1pp2ppC/3p4/tr2p3/1f2R3/8/PP1PPPPP/1TF2c1T
37 demi-coups (sur les 49 demi-coups du problme complet)

Sans aucune option `--watch', le problme est rsolu en environ 1 h 50
sur une machine Pentium 166 Mhz avec 32 Mo de RAM. Avec les options
`--watch 4,e5,d6', la rsolution prend environ 3 mn (toujours sur la
mme machine).

d7-d6 ne peut tre jou qu'aprs Ff8-b4.  Or ce coup libre beaucoup
de coups noirs (Re8-d7-c6... et Cb8-d7-f6-e8).  En vrifiant qu'il
n'est pas jou trop tt, le nombre de coups noirs jouables est donc
normment rduit.

e7-e5 ne peut tre jou qu'aprs Th8-h5-a5.  Ce coup n'en libre
directement qu'un seul : Ff8-b4.  Mais comme il faut de nombreux coups
blancs avant de permettre  la TNh8 de jouer, cela oblige les blancs 
avoir jou tous ces coups avant de permettre e7-e5 et rduit donc
aussi le nombre de coups jouables.

Par contre il n'y a pas de bonne explication pour la valeur `--watch
4'.  C'est l'exprience qui a montr que `--watch 2' n'est pas
suffisant et que `--watch 6' est superflu.  Il faut utiliser le mode
visuel et abuser de la touche <ESPACE> pour voir quels sont les coups
qui gnent et jusqu' quel nombre de demi-coups ils ralentissent la
rsolution.

La solution complte du problme est :

1.Cg1-f3 Pa7-a5 2.Cf3-d4 Pa5-a4 3.Cd4-b3 Pa4xb3 4.Cb1-c3 Pb3xc2
5.Cc3-e4 Pc2xd1=C 6.Ce4-g5 Cd1-e3 7.Cg5xh7 Ce3xf1 8.Ch7-g5 Th8-h5
9.Cg5-h7 Th5-a5 10.Re1-d1 Pe7-e5 11.Rd1-c2 Ff8-b4 12.Rc2-d3 Pd7-d6
13.Rd3-e4 Cb8-d7 14.Re4-f5 Cd7-f6 15.Rf5-g5 Re8-d7 16.Ta1-b1 Cf6-e8
17.Rg5-g4 Rd7-c6 18.Rg4-f3 Rc6-b5 19.Rf3-e4 Rb5-a4 20.Re4-d3 Pb7-b5
21.Rd3-c2 Fc8-f5 22.Rc2-d1 Ff5xb1 23.Rd1-e1 f7-f5 24.Ch7-f6 Pg7xf6
25.Pb2-b3


Le mode visuel
--------------

Affichage
---------
L'option `--visual' ou `-v' dclenche le mode visuel.  Le programme
prend le contrle de l'cran et affiche en l'volution de la
rsolution.  A l'cran sont affichs la position  rsoudre et l'tape
en cours d'analyse.  L'cran se dcompose de la manire suivante :

   * le diagramme de la position en haut  gauche,
   * une colonne de texte  la droite du diagramme indiquant :
        o la version du programme,
        o le numro de la position en cours d'analyse,
        o le nombre de coups `libres' restants  chaque camp,
        o le numro du premier coup blanc en cours d'exploration suivi du
          nombre total de premiers coups blancs possibles,
        o le premier coup blanc actuellement envisag,
        o le nombre de pices blanches et noires du diagrammes,
   * sous le diagramme figure l'nonc du problme,
   * la zone (souvent vide) en haut  droite sert  l'affichage des
     solutions trouves,
   * en dessous figure 16 lignes indiquant pour chaque pice sa destination
     finale ainsi que les tapes obligatoires (le symbole `-??-' signifie
     une case quelconque) :
        o case de dpart,
        o tape intermdiaire (promotion, capture),
        o case d'arrive,
        o nombre minimum de coups entre parenthses,
        o pice capturante aprs le symbole `*'.

Lorsqu'une solution s'affiche, le numro de la position est indique
entre parenthse.  Il est possible que la solution renvoie  une
solution prcdente.  Les lignes qui ont disparues de l'cran sont
perdues.  Il faut utiliser l'option -o fichier pour garder ces traces
de faon plus permanente.

Lorsqu'aucun coup n'est affich  la droite du diagramme, cela
signifie que le programme cherche la position suivante.  Cela peut
notamment arriver au tout dbut du programme.  Dans ce cas, la liste
des destinations finales de chaque pice ne contient que celles qui ne
peuvent pas avoir joues.


Interruption au clavier
-----------------------
Le caractre `Ctrl + C' interrompt dfinitivement le programme.  Son
utilisation est dangereuse et dconseille (si vous utilisez l'option
`--output fichier', celui-ci peut ne pas tre complet).

Le caractre s (majuscule ou minuscule), interrompt la rsolution et
demande  l'utilisateur s'il veut passer  la position suivante
(`Suite').  Le message s'affiche en rouge  la droite du diagramme.
Si la rponse est affirmative, le programme passe aussitt  la
recherche de la position suivante.  Lorsque le programme cherche dj
la position suivante, ce caractre n'a aucun effet.

Le caractre <ESPACE> affiche la suite des coups actuellement tudis.
En vrifiant rgulirement comment cette suite de coups volue, il est
possible de se faire une ide du temps qu'il faudra  Natch pour
rsoudre la position courante.

Tous les autres caractres permettent l'interruption du programme mais
demande une confirmation  l'utilisateur (en rouge  ct du
diagramme).  C'est un arrt moins brutal que `Ctrl + C' et cela permet
aussi de faire une pause dans la rsolution.

Les interruptions au clavier peuvent prendre quelques secondes avant
de ragir (sauf pour `Ctrl + C' qui est immdiat).


L'option `--position'
---------------------

Lorsque le niveau 2 est utilise pour l'option `--position', vous
obtenez en plus des informations sur l'ordre des coups.  Voici une
courte explication qui permet d'interprter les donnes.

Supposons que nous avons Ta1-h1-h7(2) dans les informations sur la
position et Th1-h7(14,1,L) parmi l'ordonnancement des coups.

Le premier (ici : 14) est juste un nombre qui permet d'identifier la
pice de manire unique.  Les deux tours peuvent jouer le coup Th1-h7,
et ce numro permet de les distinguer.

Le deuxime numro (ici : 1) est l'indice de la destination.
Ta1-h1-h7 a deux destinations.  0 est pour la premire (ici : Ta1-h1),
1 est pour la deuxime (ici : Th1-h7), etc...

La lettre est l'une des 3 suivantes :
        - L pour `dernire' (Last en anglais)
	- F pour `premire' (First en anglais)
	- B pour `les deux' (Both en anglais)

`L' indique la dernire partie du coup, c'est  dire lorsque la pice
arrive  destination.
`F' indique la premire partie du coup, c'est  dire lorsque la pice
quitte sa case.
`B' indique le coup complet, c'est  dire la combinaison de la
premire et de la dernire partie.

Par exemple Ph7xg6(39,0,B) -> Th1-h7(14,1,L) signifie que le PBh7 doit
avoir quitt h7 et atteint g6 avant que la tour atteigne h7.

Une capture par un pion est toujours de type `B', parce que le coup ne
peut pas tre dcompos.  Si un camp n'a pas de coup `libre' restant,
certaines pices peuvent aussi avoir des `B' pour certains de leur
coup.

Mais si les Blancs ont des coups `libres', il est possible que la TB
joue par exemple Th1-h3-h7, et il n'est alors pas possible d'imposer :
Ph7xg6(39,0,B) -> Th1-h7(14,1,F) (avec un `F' ici).


Limitations
-----------

Voici quelques limitations du programme :

   * Le programme ne trouve que les solutions dans le nombre de demi-coups
     spcifis.  Il ne trouve pas les solutions plus courtes.  Ceci est mme
     une obligation pour certains types de problmes qui ne sont pas
     des plus courtes parties justificatives.  En fait ce point n'est
     pas un problme mais une fonctionnalit du programme.
   * Les temps de rsolution affichs peuvent tre errons lorsqu'ils
     dpassent une certaine limite.  C'est du  l'explosion d'un compteur
     interne.
   * Lorsqu'une tour doit roquer et tant qu'elle ne l'a pas fait, elle
     ne donne jamais chec horizontalement.  Cela permet par exemple
     au Roi noir d'accder  la case g1 tant que les Blancs n'ont pas
     fait le petit roque.  C'est un cas rare o le seul risque est de
     trouver des solutions illgales.


Web
---

Natch a une page sur l'Internet, d'o les sources et les excutables
de la dernire version peuvent tre tlchargs.  Voir :

	http://Natch.free.fr/index_fr.html

Envoyez les suggestions et anomalies  Natch@free.fr.
