Revision: $Id: Changes,v 1.20 1995/04/09 18:18:11 bousch Exp $

v 0.75
	La syntaxe a ete legerement modifiee pour etre davantage
	independante de la mise en oeuvre de PAPP. La syntaxe des zones
	d'insertion a egalement ete legerement amelioree. Enfin, le bug
	qui empechait de liberer certaines chaines renvoyees par
	l'analyseur lexical est repare.
	Ces modifications sont signalees dans "papp.man".

v 0.76
	Il est maintenant possible de faire entrer ou sortir tous les
	joueurs inscrits (c'est surtout utile pour les finales).
	Le programme a ete renomme en "papp.tos" puisqu'il sera
	habituellement lance sans ligne de commande.
	On peut maintenant afficher les fiches individuelles des joueurs.
	Le programme attend que l'utilisateur tape une touche si PAPP a
	ete lance a partir du bureau et s'il y a eu une erreur (ceci ne
	concerne pas les assertions).

v 0.77
	PAPP localise les erreurs dans le fichier intermediaire, au lieu
	de faire echouer une assertion; le controle est egalement
	meilleur.
	Le programme peut sauvegarder les fichiers Elo.
	Dans le fichier intermediaire, PAPP signale les joueurs inconnus
	(typiquement, quand le fichier des nouveaux joueurs est absent).

v 0.78
	La penalite de flottement quand on joue contre Bip a ete modifiee.
	Maintenant, Bip est suppose avoir le score le plus faible de tous
	les joueurs a apparier. Ceci garantit qu'on ne "sature" pas tout
	de suite la penalite de flottement, et empeche que le joueur le
	mieux classe joue contre Bip.
	La fonction numero_inscription() a ete reecrite avec des pointeurs
	pour etre plus rapide.

v 0.79
	Le departage de Brightwell a ete enfin implante.
	La lecture du fichier des joueurs utilise maintenant un
	alloc-ring; ca ne va pas beaucoup plus vite, mais la memoire est
	beaucoup moins fragmentee maintenant. La pile fait maintenant 64K
	par defaut, ce qui devrait autoriser jusqu'a 70 joueurs.

v 0.80
	La table des symboles a ete enlevee de l'executable, economisant
	10K. Le laius sur la pile a ete modifie en consequence.
	Les strdup() ont ete reecrits; maintenant, l'allocation de memoire
	est "sure", cad que la valeur de retour est toujours testee.
	La taille du buffer de FLEX a ete reduite a 2K pour que la lecture
	soit plus rapide avec les disquettes.
	Remise a jour de la documentation.
	L'optimisation se fait maintenant en deux passes: la premiere
	determine une estimation de la tolerance, et cette valeur est
	utilisee pour la deuxieme passe. Je serais curieux de savoir si
	cela ameliore notablement les performances.

v 0.81
	En soi, non; mais si de plus "on rend les parois infiniment
	hautes" alors le programme selectionne correctement le sommet a
	choisir comme pivot. J'ai ainsi gagne un facteur trois pour les
	appariements de la cinquieme ronde entre 29 joueurs!
	Desormais, quand l'utilisateur interrompt la recherche, PAPP ne
	s'arrete pas tout de suite, mais explore toutes les branches a la
	profondeur zero, sinon on risquerait de passer a cote de quelque
	chose. PAPP semble donc repondre un peu plus "mollement".

v 0.82
	Suite a une suggestion de Marc Tastet, le score de Bip est
	inferieur d'un demi-point a celui du dernier "vrai" joueur, afin
	d'etre plus volontiers apparie avec les derniers joueurs.
	Sur l'insistance de Stephane Nicolet, une penalite de "flottement
	cumule" est introduite pour empecher un joueur de flotter deux
	fois de suite dans le meme sens.

v 0.83
	La commande `L' ne fait plus preceder les joueurs presents d'une
	etoile; au contraire, elle fait preceder les joueurs absents d'un
	`-'. Ceci pour mieux les faire ressortir.
	Un nouveau type d'appariement, `fort-faible', est introduit pour
	la premiere ronde: les n/2 joueurs forts jouent contre les n/2
	joueurs faibles. Les mots-cles `desequilibree' et `forts-faibles'
	sont egalement acceptes.
	Le calcul des penalites a ete dramatiquement accelere (par un
	facteur entre 10 et 100) et ne prend plus qu'une seconde ou deux!
	J'en ai profite pour augmenter les plafonds du flottement et de la
	couleur.

v 0.90
	Le programme repasse sur le billot: il est important que chaque
	joueur joue environ autant de fois Noir que Blanc, et les
	penalites de couleur doivent refleter ceci. Du systeme precedent
	ne subsiste que la penalite `de-suite' si un joueur joue deux fois
	avec la meme couleur. Merci a Marc Tastet pour m'avoir rappele les
	regles.
	Finalement, l'idee de rendre les parois infiniment hautes etait
	mauvaise, ou alors il faut que je trouve autre chose!

v 0.91
	Si les penalites _p[i][j] et _p[j][i] sont egales, alors on
	attribue les couleurs selon les regles habituelles (i.e., on
	regarde la ronde la plus recente ou les 2 joueurs avaient des
	couleurs differentes, et on inverse). Merci Marc!
	Quelques modifications d'ordre cosmetique: le departage est entre
	crochets (partout ailleurs, un nombre entre parentheses signifiait
	le numero Elo d'un joueur), et les numeros Elo a l'interieur du
	fichier intermediaire sont au moins sur quatre chiffre, non 
	seulement pour avoir de beaux alignements, mais aussi pour faciliter
	les substitutions de numeros.
	Un nouveau joueur pouvait etre sauvegarde plusieurs fois; ce bug est
	repare.
	L'ordre d'exploration de l'arbre a ete modifie, ce qui accelere
	encore un peu la recherche, et la gestion de l'interruption a ete
	modifiee pour renvoyer des resultats plus "fiables".
	Grand nettoyage du code: (presque) toutes les fonctions et variables
	sont prototypees; la fonction toucher_appariements() a disparu.
	Plutot, elle est appelee implicitement par valeur_couple().
	La fonction inscrire_joueur() initialise maintenant tous les champs
	(score, departage, etc.); auparavant, ca "marchait" parce que tous
	les tableaux sont initialises a zero!

v 0.92
	L'allocation de memoire pour l'optimisation est maintenant 
	entierement dynamique, et on n'est plus limite que par le nombre
	maximum d'inscriptions, a savoir 128 joueurs.
	Et par la memoire de l'Atari, bien entendu.
	Aargh! Quand on est bete, c'est pour longtemps. Il manquait des
	parentheses dans les macros d'allocation memoire, si bien que les
	zones allouees etaient parfois trop petites, et donc se chevauchaient,
	provoquant des erreurs inexplicables. Repare.
	Le debug des penalites et de l'optimisation est controle par les
	macros DEBUG_PEN et DEBUG_OPT.	
	La ligne 'spi=0' n'etait pas au bon endroit, ce qui faisait que
	l'arbre n'etait pratiquement pas elague. Repare.
	L'optimisation est controlee par les macros PAROIS_HAUTES et MEDIANE.

v 0.93
	Quand un joueur quittait le tournoi "dans le fichier intermediaire",
	son appariement n'etait pas automatiquement detruit. Repare.
	Le "bug du 13 janvier", qui se produisait quand il etait "evidemment"
	impossible d'apparier les joueurs avec une tolerance donnee, est
	repare.
	Les scores sont desormais toujours ecrits sur deux chiffres dans le
	fichier intermediaire.
	L'option `F' du menu principal a ete dupliquee dans le sous-menu des
	appariements manuels. Petit toilettage de la documentation.
	Correction du "job control" dans global.c; PAPP marche beaucoup mieux
	avec MiNT 0.99 maintenant.
	Dans pap.y, changement de %d en %ld, pour -mshort (quicksort semble
	mieux marcher qu'avant).

v 0.94
	Il n'etait pas possible d'inscrire de nouveaux programmes. Repare.
	Comment ne m'en suis-je pas rendu compte plus tot ?
	PAPP verifie qu'un coupon n'a pas deja ete entre (peut-etre avec
	un autre score).
	Ajout d'un fichier "bugs" a la distribution.
	Le bug qui faisait que PAPP "oubliait" le resultat de la premiere
	passe (et echouait a la seconde) est enfin repare.
	Le signal SIGABRT est maintenant gere, si bien que l'on peut attendre
	la pression d'une touche si une assertion a echoue. Dans elo.c, les
	signaux sont bloques durant la sauvegarde.
	La taille de la fenetre (ou de l'ecran) est obtenue par un ioctl, de
	toute facon les librairies appelleront la ligne A si necessaire. De
	plus, le signal SIGWINCH est maintenant gere.

v 0.95
	Une anti-penalite est introduite au cas ou un joueur flotterait
	deux fois de suite en sens oppose. C'est assez inelegant, et
	complique encore la documentation, mais certaines personnes semblaient
	y tenir, donc voila. (Soupir)
	Desormais PAPP refuse de valider les resultats d'une ronde s'il y a
	deux joueurs ou plus non apparies. 
	Pendant l'optimisation, PAPP affiche un "i" des qu'il detecte que
	l'utilisateur a presse les deux touches Shift. Ceci pour eviter que
	des brutes n'exterminent le clavier en pensant que l'interruption 
	n'a pas ete prise en compte.
	Amelioration de la detection des erreurs dans l'analyse lexicale et
	syntaxique; les messages d'erreurs devraient etre plus informatifs.
	Mise a jour de la documentation.
	Modifications radicales du code: toutes les fonctions dependant de
	la machine ont ete placees dans more.c.
	Tout ce qui concerne les signaux n'est compile que
	si le symbole "atarist" est defini. Le port sur d'autres machines
	devrait etre beaucoup plus simple maintenant.
	Le numero de version (et le nom de l'auteur!) s'affichent maintenant
	des le demarrage du programme.
	Dans main.c, le code de retour est -999 si jamais nous revenons de la
	fonction main_menu. Cela ne devrait jamais se produire!
	Dans global.h, les prototypes de stricmp et strnicmp sont ajoutes,
	si necessaire, certains compilateurs ne les definissent pas dans
	string.h. La macro INLINE remplace le mot-cle inline (toujours pour
	des considerations de portabilite).
	Papp n'affiche que les 15 premieres erreurs de syntaxe dans les
	fichiers de configuration ou de joueurs, puis avorte.
	Ces fichiers textes peuvent maintenant contenir des caracteres >= 128
	sans faire planter Papp. Il serait donc possible de mettre des
	caracteres accentues dans les noms de joueurs, mais cela poserait des
	problemes de portabilite.
	La macro SWAP de appari.c a ete reecrite, et les tableaux de taille
	variable ne sont declares que si __GNUC__ existe.

v 0.96
	Le pseudo-commentaire %! dans un fichier de configuration (ou de
	joueurs) permet d'afficher un message a l'ecran. Les messages de
	debug de lire_fichier() ont ete reactives.
	Si PAPP ne trouve pas de fichier de configuration, il en cree un
	contenant ses reglages par defaut. Il est possible de supprimer
	papp.cfg de la distribution maintenant. (Ceci a permis de corriger
	un gros bug, la variable nom_fichier_config apparaissait en double).
	Le fichier intermediaire s'appelle desormais "__papp__" au lieu de
	"#papp#" par defaut.
	Les penalites infinies sont ecrites sous la forme "INFINI" dans le
	fichier de configuration au lieu de 2147483647, moins parlant.
	Nouveau fichier, ttrondes.c, pour la gestion des tournois 
	toutes-rondes (ou plusieurs fois toutes-rondes). Mise a jour du
	makefile et des dependances.	
	Mise a jour de la documentation pour la version 0.96.
	Les doublons dans les fichiers de joueurs provoquent toujours des
	erreurs fatales, mais le message d'erreur devrait etre beaucoup
	plus informatif maintenant.

v 0.97
	Possibilite de sauver le classement vers un fichier (voire un
	fichier special) ou un pipe.
	Suppression de la table des tolerances: l'optimisation se fait
	desormais en une seule passe.
	La penalite maximum descend de deux milliards a dix millions! Ceci
	est rendu necessaire pour des raisons de compatibilite avec les
	versions ulterieures.

v 0.98
	Essai d'implementation d'un algorithme d'optimisation en temps
	polynomial.

v 0.98.1
	Echec total, donc nous revenons a l'ancien algorithme, exponentiel.
	Modification du prototype de la fonction "apparie", et diverses
	modifs un peu partout dans le code pour supporter des jeux ou il
	y a plus de 64 pions. Ainsi nous sommes prets pour l'Othello 10x10.
	Les scores ne sont plus supposes "tenir" sur deux chiffres. Sont
	egalement prevues les situations ou le "total de pions" est un nombre
	impair (l'exemple typique est le Go), et celles ou Bip gagne
	ses parties ou fait nulle.
	Support ajoute pour les jeux "sans score" tels que les echecs, ie
	le departage se fait au Buchholz.
	Le nombre maximum d'inscrits passe de 128 a 192, mieux vaut
	prevoir large.
	L'analyseur syntaxique est desormais Bison. Les modifications
	correspondantes ont ete faites dans le Makefile. Les fonctions
	popen/pclose ont ete enlevees du code; elles ne marchent pas sur
	l'Atari. Nous gagnons ainsi 5ko environ.
	Controle un peu plus strict de la syntaxe dans pap.y.

v 0.98.2
	Si le symbole TERMCAP est defini, les sequences d'affichage a l'ecran
	sont obtenues par les fonctions termcap. (Nous reprenons ainsi
	quelques kilos...) Les terminaux non-auto-wrap sont egalement
	supportes. Les signaux sont compiles quand le symbole `SIGNAUX' est
	present, non plus `atarist', pour faciliter le portage sous Unix.
	Lors de l'optimisation, le signal ^C (SIGINT) permet d'interrompre
	les calculs, et donc ne tue pas le programme. L'avancement des
	calculs est signale par des `_' ou des `.' selon qu'une interruption
	a ete detectee ou non.
	Le terminal est parametre par gtty/stty, et les caracteres sont lus
	avec read(), pour compatibilite avec BSD.
	Quelques modifs mineures pour eviter les warnings du Gcc 2.3.3.
	J'ai remis les fonctions popen/pclose, maintenant qu'elles sont
	correctement implementees dans les librairies MiNT (patchlevel 34).

v 0.98.3
	Nous revenons aux librairies MiNT PL28 parce que les PL34 sont
	incompatibles avec la Portable Math Library. Par consequent, nous
	enlevons popen/pclose.
	L'optimisation utilise desormais l'algorithme d'Edmonds-Johnson
	pour la recherche d'un couplage de poids maximum dans un graphe.

v 0.98.4
	Possibilite de modifier la nationalite d'un joueur (ces modifs sont
	sauvegardees dans le fichier des nouveaux joueurs).
	Ajout d'une penalite de chauvinisme (quand deux joueurs d'un meme
	pays jouent ensemble) pouvant dependre du numero de ronde.
	Suppression de la directive `premiere-ronde', que personne
	n'utilisait de toute facon. La premiere ronde est maintenant traitee
	comme les autres, par optimisation (avec un doigt de hasard).
	Correction d'un bug dans la completion des noms, quand deux joueurs
	ont les memes noms et prenoms (mais pas le meme numero).
	Suppression de toutes les references au type d'appariement de la
	premiere ronde. La fonction appariement_optimal() ne doit plus etre
	appelee directement, et est donc redefinie comme statique dans son
	module (penalite.c).
	Nettoyage de pap.y: les tokens n'ayant aucune valeur semantique
	sont declares comme tels.
	Dans edmonds.c, nous nous appretons a utiliser les "long long",
	le jour ou ceux-ci fonctionneront correctement.

v 0.98.5
	Diverses optimisations dans edmonds.c (en particulier dans la
	fonction recalcule_e_star), la recherche va maintenant deux a trois
	fois plus vite.

v 0.98.6
	Correction d'un henaurme bug dans edmonds.c (delta_2 ne contenait que
	la moitie de ce qu'il aurait du contenir); merci a Emmanuel Lazard
	pour m'avoir signale le probleme.
	Ajout, un peu partout (pap.y, penalite.c, edmonds.c) d'avertissements
	quand une penalite depasse le maximum autorise. Auparavant ces
	penalites etaient silencieusement tronquees.
	Dans more.c, les dimensions de l'ecran sont determinees a partir de
	l'entree termcap si ioctl(TIOCGWINSZ...) revoie zero.

v 0.98.7
	Recompilation des sources avec les librairies MiNT @ patchlevel 39,
	et le symbole P_OPEN. Suppression de la fonction Getshift() dans
	more.c, puisqu'elle n'est plus utilisee nulle part.
	Le nom de la machine n'est plus code en dur dans version.h, mais
	doit etre defini dans le Makefile.
	Quand papp.cfg n'existe pas, nous le creons avec permission
	d'execution, et #!/usr/local/bin/papp comme premiere ligne (ceci
	concerne surtout les systemes Unix).
	Mise a jour de la documentation.

v 0.99
	Possibilite d'ajouter des commentaires a la fiche d'un joueur; ceci
	peut etre utile pour savoir qui est a jour de cotisation.
	Declaration de erreur_fatale() corrigee dans global.c.
	Dans le menu principal, l'option S (suspendre) a ete enlevee;
	il n'y a que sous Unix qu'on peut suspendre un job, et sous Unix
	c'est ^Z la touche consacree. Toujours pour garder le "look
	and feel" Unix, on a ajoute ^R (redessiner), bien que ca fasse
	quadruple emploi avec ^M, ^J et ^L.
	Recompilation avec GCC 2.5.8. Reecriture du manuel en LaTeX.

v 1.00
	Remplacement, un peu partout, d'allocations de chaines de taille
	fixe par des appels a new_string(). Dans joueurs.c, HASHSIZE est
	maintenant une puissance de deux.
	Dans more.c, une definition plausible de `int hasard(int)'.
	Integration (conditionnelle) des diffs de B.de la Boisserie
	pour la compilation sous __MSDOS__.
	Suppression de tous les fichiers, symboles, references aux
	echantillons: personne ne les voulait, nous gagnons ainsi 10Ko
	dans l'executable, et enormement dans les sources. Cela
	simplifie aussi le Makefile.
	Ajout du fichier `a_faire' dans la distribution.
	Suppression des references a KW_FEDERATION dans pap.l et pap.y.

v 1.01
	Integration des modifs pour __THINKC__; correction d'un gros bug
	dans pap.l -- le "commentaire" suivant un joueur ne s'arretait pas a
	la fin de la ligne.
	Modification de fiche_individuelle() afin de pouvoir afficher les
	renseignements sur un joueur meme avant la premiere ronde.
	Plusieurs options du menu principal changent de nom, les moins
	utilisees disparaissent de la liste et ne sont plus accessibles
	que par Ctrl+Lettre.
	Ajout dans le Makefile des symboles NO_STRICMP et NO_RAISE indiquant
	si les fonctions correspondantes sont reconnues ou non.
	Modification des penalites par defaut, et (surtout) du texte les
	accompagnant.
	Modifications dans more.c, afin de pouvoir ecrire dans un fichier
	tout ce qui est, normalement, ecrit a l'ecran. Modifs correspondantes
	dans plein d'autres fichiers! Ajout des options ^V et ^F dans le menu
	principal (pour sauvegarder les appariements et les fiches,
	respectivement).
	Modification de __THINKC__ en __THINK_C__ pour le Macintosh.

v 1.02
	Les tableaux de penalites de couleur et de flottement ont ete rendus
	dynamiques. Ce n'est pas le cas du tableau de penalites de
	chauvinisme, dont la taille est suffisamment grande (NMAX_RONDES),
	cette derniere constante etant affichee en meme temps que le
	nombre maximum de joueurs.
	Modification (simplification) de pap.y pour le rendre conforme a
	la syntaxe decrite dans la documentation.
	Si un bloc `penalites{...}' apparait, toutes les penalites sont
	remises a zero; auparavant, c'etait la declaration d'une section
	quiremettait a zero les penalites de cette section.
	Modifications des paths de certains fichiers a inclure (types.h,
	signal.h, ioctl.h) pour compatibilite avec Sun.
	Modification de `pts' en `dpt' (dans le classement des joueurs) et
	de `points' en `demi-points' dans les fiches individuelles,
	puisque c'est de demi-points dont il s'agit veritablement. (Cela
	ne suffira pas a satisfaire Stephane, je sais...)

v 1.03
	Grosse erreur dans les specifications: il est tout a fait significatif
	de comparer les penalites correspondant a des ecarts chromatiques
	de parites differentes. En particulier, on ne peut pas supposer
	que p_coul[1]==0, et ceci signifie egalement qu'il y a un terme de
	penalite de couleur meme quand on joue contre Bip.
	Ajout de l'option de compilation MELANGE pour rendre les appariements
	un peu plus aleatoires (ie non deterministes).
	Implementation du systeme Tastet pour les toutes-rondes; le precedent
	algorithme etait sous-optimal pour l'attribution des couleurs.
	Dans penalite.c, le score minimum (necessaire pour estimer le
	flottement contre Bip) est calcule sur tous les joueurs presents,
	pas uniquement sur les joueurs presents et non encore apparies.
	Correction du systeme Tastet.
	Relecture de la documentation. Augmentation des penalites de
	flottement et de repetition dans global.c.

v 1.04
	Correction du departage de Brightwell dans le cas ou le nombre de
	pions est impair; le departage est alors donne en demi-points.
	Prise en compte (enfin!) de NO_TERMCAP_H dans more.c.
	Grosses modifications dans le Makefile, afin de faciliter la
	compilation sur les machines autres que l'Atari.
	Les completions sont (enfin) affichees par ordre alphabetique.
	Les deux fonctions de lecture d'une chaine au clavier (celle pour
	les inscriptions, et l'autre) ont ete unifiees. Ajout de ^T pour
	transposer les deux dernieres lettres.
	Modification des noms de fichiers joueurs.[cho] en joueur.[cho],
	sinon make est induit en erreur par la presence du fichier
	"joueurs", qu'il considere comme un executable dependant de
	joueurs.c.
	La macro d'allocation memoire dans edmonds.c n'etait pas sure: si
	le code etait compile avec NDEBUG (donc sans les assertions), les
	erreurs d'allocation memoire auraient pu passer inapercues; ce
	n'est plus le cas maintenant, elles provoquent un abort().

v 1.05
	Ajout de l'option de compilation CURSEUR pour les machines sur
	lesquelles le curseur est invisible (elles se reconnaitront
	elles-memes...)
	Les chaines de caracteres sont maintenant allouees avec un
	"allocateur trivial" tres economique (tant qu'on ne cherche pas a
	les desallouer, car c'est impossible). Nous gagnons environ
	60ko de memoire sur l'Atari, soit 50 octets par joueur (sur d'autres
	machines, le gain dependra de la mise en oeuvre de malloc).
	Dans joueur.c, HASHSIZE passe de 128 a 512, vu qu'il y a plus d'un
	millier de joueurs.
	Dans more.c, modification de la macro CTRL en CCTL (pour eviter un
	conflit de nom sous SunOS).

v 1.06
	Deux modifications dans more.c pour le portage sous Linux (lecture
	d'une touche, et gestion de SIGWINCH). Grosses modifications dans
	le makefile, notamment afin de pouvoir utiliser l'option -j de
	GNU make, et suppression de tout ce qui etait specifique Atari.
	Dans pap.l, on definit yywrap() de maniere a ne pas etre oblige de
	linker avec libfl.a (que tout le monde n'a pas forcement).
	Quelques modifications dans papp_doc.tex afin que latex2e puisse
	le lire (il y a avait des problemes avec \verb).
	Modification du nom du programme `test' en `testp' pour eviter un
	conflit avec le programme Unix du meme nom :-)
	Documentation de quelques autres options de compilation dans le
	makefile, ajout de STR_CASECMP, suppression de raise.c (raise()
	est desormais une macro) et ajout d'un prototype manquant.

v 1.07
	Implementation du verrouillage, du moins pour Linux.
	Lors de l'entree des resultats, la touche Tab affiche la liste des
	coupons (d'abord ceux qui sont remplis, puis les vides).
	Deplacement de la routine de calcul du departage dans un module
	plus approprie (penalite.c -> resultat.c).
	Support pour les jeux de caracteres 8 bits (oubliez cela si vous
	avez autre chose qu'Iso-Latin-1), et ajout d'un nouveau symbole
	(SYSV) pour tout ce qui est specifique a SVR4, i.e. il n'y a plus
	de #ifdef linux ... #endif. Modification des declarations des
	fonctions qui ne reviennent jamais, GCC 2.x n'utilisant plus
	`volatile'.
	Modifications importantes du Makefile afin de pouvoir cross-compiler
	vers ms-dos en utilisant go32crs. Capitalisation de certains noms de
	fichiers (notamment Makefile). Plusieurs modifications dans more.c
	pour compatibilite avec go32.
	Ajout d'un programme supplementaire (edtest) pour tester 
	automatiquement un ensemble de matrices de penalites. Actuellement,
	ce test prend environ vingt minutes sur un 486 DX2-66.
	Utilisation de RCS (enfin!) pour le controle de version.
	Acceleration de edtest: il prend quatre fois moins de temps.

v 1.08
	Dans le sous-menu d'entree des resultats, la demande de validation
	n'est plus automatique. Tout au plus PAPP indique-t-il que les
	resultats sont complets et que l'utilisateur peut les confirmer
	en tapant `!'. Dans le meme sous-menu, on peut taper `?' si on
	veut que PAPP complete les coupons de maniere aleatoire.
	Affichage "en clair" des coupons immediatement apres leur entree.

v 1.09
	Dans ce meme sous-menu, il suffit maintenant d'entrer le numero et
	le score de l'un des joueurs (a moins que le symbole 
	COUPONS_COMPLETS n'ait ete defini a la compilation). De plus, le
	tampon d'entree n'est plus entierement efface en cas d'erreur,
	PAPP essayant de sauver ce qui peut l'etre...
	Le mini-editeur de ligne reconnait ^W pour l'effacement du dernier
	mot.
	Possibilite d'effacer un coupon incorrect, par exemple "-145"
	efface le score du joueur 145 et celui de son adversaire. Ce n'est
	pas indispensable, mais reduit les risques d'erreurs.
	Verification de la monotonie des penalites.
	Davantage de tests (maintenant trente) dans edtest.

v 1.10
	Correction d'un bug dans edmonds.c qui se manifestait par des
	boucles infinies (detecte grace a edtest).
	Ajout d'un programme supplementaire, "contest", analogue a edtest
	mais qui peut tourner aussi longtemps qu'on veut -- il ne verifie
	pas les resultats, mais s'assure simplement que Edmonds ne
	plante pas.

v 1.11
	L'heure sauvegardee dans les fichiers Elo est maintenant l'heure
	locale (au lieu de l'heure GMT), au format AAAA/MM/JJ.
	Les appariements sont desormais tries dans l'ordre decroissant
	du score des joueurs.
	Correction d'un bug dans le pager: maintenant, une ligne exactement
	aussi longue que le terminal s'affichera sur une seule ligne (au
	lieu de deux). Reorganisation du code dans more.c afin de
	n'initialiser/reinitialiser le terminal qu'au debut et a la fin
	du programme (et quand PAPP est suspendu); ceci devrait eviter que
	les caracteres tapes a l'avance ne soient perdus, comme sur le Sun.
	PAPP reconnait maintenant la `fin de fichier' sur l'entree standard,
	ce qui provoque sa terminaison normale, avec sauvegarde.
	Implementation du verrouillage pour les systemes non-Unix mais
	neanmoins vaguement multitaches (MacOS, Ouinedose).

v 1.12
	Reorganisation du code de traitement des signaux; tout est maintenant
	dans global.c. Les erreurs fatales ne provoquent plus de core-dump.
	Sur le Mac, au lieu de quitter immediatement le programme en cas
	d'erreur fatale, nous attendons une pression de touche.
	Correction d'un bug dans resultat.c qui empechait de modifier un
	coupon deja rempli.

v 1.13
	Les corrections de flottement cumule etaient calculees en fonction
	d'une grandeur qui aurait du etre le flottement de la derniere ronde,
	mais qui etait le plus souvent la somme des flottements des rondes
	precedentes. Corrige.
	Modification de diverses interfaces internes au programme.
	Mise a jour du fichier Bugs.

v 1.14
	Il est possible d'associer d'autres couleurs que "Noir" et "Blanc"
	au premier et au second joueur. Cette facilite n'est utilisee que
	dans l'affichage des fiches individuelles.

v 1.15
	Les tournois plusieurs fois toutes-rondes ne marchaient pas du tout.
	Repare, ainsi qu'un bug introduit a la version immediatement
	precedente dans l'affichage des fiches individuelles.

v 1.16
	Nous n'affichons le departage d'un joueur que s'il differe de celui
	du joueur precedent (ou si les scores sont differents), afin de
	reperer plus facilement les ex-aequo.
	Nettoyage du code en differents endroits.
	Les zones d'insertion sont desormais allouees dynamiquement et
	il peut y en avoir plusieurs par pays; de plus, les zones nationales
	seront toujours examinees avant les zones internationales.
	Correction d'un bug dans l'analyseur lexical (une ligne de
	commentaire vide pouvait "avaler" la ligne suivante).
	PAPP supporte maintenant deux types d'affichage des pions: absolu
	comme a Othello, ou relatif a l'adversaire comme au Go.
	Les resultats peuvent etre entres sous forme relative egalement.
	Quand plusieurs joueurs ont meme score et meme departage, nous
	les classons par ordre alphabetique (c'est surtout utile lors
	de l'inscription des joueurs).

v 1.17
	Traduction en anglais des messages et des menus -- les mots-cles du
	fichier de configuration restent en francais.
	Le module elo.c supposait qu'il y avait 64 pions; repare.
	PAPP ne fait plus de distinction entre programmes et joueurs
	ordinaires; en particulier, un programme peut avoir n'importe quelle
	nationalite; pour PAPP, c'est simplement un joueur dont le nom
	contient des parentheses.
	Modification des conditions de distribution; le programme est
	maintenant sous la GPL (licence publique GNU). Ajout des fichiers
	COPYING et papp.lsm a l'archive.

v 1.18    {Stephane Nicolet et Jakub Tesinsky, avril 2000}
  * Introduction de la saisie des joueurs par leur nom : chaque fois
    que PAPP attendait un numero de joueur, on peut desormais
    egalement taper (le debut d) un nom de joueur; la liste des
    completions possibles depend du contexte (toute la base ou
    seulement les joueurs inscrits, etc).
  * Affichage des scores des joueurs en points entiers, et non plus en 
    demi-points (sans doute faudrait-il en faire une option modifiable 
    du fichier de configuration, en fait).
  * Affichage des appariements avec les numros de tables des parties.
  * Gros changements dans pap.l pour pouvoir parser des fichiers de
    joueurs ou de configuration provenant de n'importe quel systeme
    d'exploitation (Unix, PC, Mac) dans n'importe quelle version de
    PAPP.
  * Compilation pour Windows32 avec le compilateur BORLAND C++.

v 1.19a1
  * Nouveau fichier Changes.h  pour pouvoir definir les options de 
    compilations pour les environement sans MakeFile. Reorganisation
    du code pour les nouveautes de la version 1.18.
  * Sil y a plus de 200 joueurs dans la base, PAPP refuse den
    afficher la liste quand lutilisateur tape une tabulation alors
    que le tampon dentree est vide.
  * Dans le dialogue dappariements manuels, les noms des joueurs 
    apparaissent, et non seulement leur numeros. On peut egalement
    rentrer les appariements manuels avec les noms des joueurs.
  * Mise a jour de la documentation.

v 1.19a2
  * Lors de la saisie de nouveaux joueurs, on fait quelques tests pour 
    verifier la legalite du nom tape : on verifie que le nom n'est pas
    demesurement long, on saute les espaces du debut, puis 
    on s'assure que le premier caractere du nom est bien une lettre
    (a-z ou A-Z) ou un underscore ('_'). Cela evite les cas les plus
    grossiers ou PAPP ecrivait un fichier "nouveaux" qu'il etait
    incapable de relire ! Une consequence est que l'on ne peut pas
    rentrer des noms de joueurs composes uniquement de chiffres : mais
    de toute facon le parser de PAPP 1.17 plantait sur 007 :-)
  * Introduction des commandes dans papp.cfg pour sauvegarder 
    automatiquement a la fin de chaque ronde les resultats des parties
    et le nouveau classement.
  * Introduction de la commande pour imprimer depuis PAPP ces memes
    fichiers. Il faudrait generaliser cette possibilite d'impression a
    tous les ecrans : appariements, liste, fiche individuelle, etc.
    
v 1.19a3
  * Ajout d'une penalite delitisme (pour favoriser les appariements
    du haut du classement) qui peut changer avec le numero de la
    ronde. Changements dans la doc pour mieux separer les explications
    des diverses penalites (flottement, couleur, repetition,
    chauvinisme, elitisme).
  * PAPP verifie desormais que le pays d'un nouveau joueur n'est pas
    vide (cela pouvait arriver si le pays par defaut specifie dans
    papp.cfg etait la chaine vide) : cela evite d'ecrire un fichier
    'nouveaux" que PAPP est incapable de relire !
    
v 1.19a4
  * La formule calculant la penalite d'elitisme pouvait donner une
    penalite negative car, pour PAPP, le score de Bip est un demi-point 
    de moins que le score du dernier du tournoi, donc Bip a parfois un
    score negatif ! Repare.
  * On verifie desormais que l'utilisateur ne rentre pas de caractere
    debile dans un nom de joueur : a partir du second caractere, les
    caracteres  autorises sont 'a'..'z', 'A'..'Z', '0'..'9', '_', ' ',
    ''', '(' , ')', '.' , '-' et '.'
  * Mise a jour du site de PAPP : http://cassio.free.fr/papp
    
v 1.19a5
  * Introduction de la commande dans le fichier "papp.cfg" pour que
    PAPP creer un fichier avec les appariements de la ronde a venir
    quand il calcule ou complete des nouveaux appariements.
  * Implementation de limpression pour un nouveau compilateur : 
    CodeWarrior pour Macintosh. Je cherche toujours quelquun capable
    de programmer limpression dun fichier texte sur PC et sur UNIX.

v 1.20
  * Les appariements sont desormais tries selon un ordre lexicographique
    qui garantit que le joueur de tete joue toujours a la table 1.
    
v 1.21
  * On peut maintenant corriger sans quitter PAPP les erreurs de couleur
    ou les erreurs de score dans les coupons deja rentres, meme pour les
    rondes precedentes.
  * PAPP met un message plus explicite quand il n'arrive pas a creer un
    fichier verrou : il suggere a l'utilisateur de verifier ses droits
    d'ecriture sur le repertoire courant.
  * Le nombre de joueurs dans la base est affiche avec les messages de
    copyleft (commande &) : cela permet de verifier que PAPP a bien lu
    tout le fichier 'joueurs'.
  * L'impression automatique marche sur UNIX et sur le Macintosh. Il ne 
    manque plus que le MS/DOS...
  
v 1.22
  * PAPP gere desormais les scores en demi-pions : c'est utile pour les
    echecs (pour gerer les parties nulles), pour le go (pour eviter les
    parties nulles, le komi est de la forme n+1/2), voire a Othello chez 
    nos amis japonais qui partagent les cases vides a la fin des parties!
    Le type des pions est abstrait dans les fichiers "pions.h" et "pions.c"
  * Implementation de la video inverse et d'un curseur correct sous Mac OS 9.
    
v 1.23
  * Dans l'affichage de l'aide (touche Tab) lors de la rentree des 
    resultats, les coupons remplis sont toujours affiches avant
    les coupons vides, mais ils sont tries par table dans chaque
    categorie.
  * Possibilite de supprimer completement un joueur du tournoi s'il n'a
    encore joue aucune partie.
    
v 1.24
  * Nouvelle fonction ('T' dans le menu principal) pour afficher le
    classement par pays.
  * Nouvelle commande (Fichier equipes = "team###.txt") dans le 
    fichier papp.cfg pour le sauvegarder automatiquement ronde par ronde.
  * Le nombre de lignes dans la fenetre est maintenant calcule correctement
    dans la version Macintosh, meme quand l'ecran est trop petit pour 
    contenir la fenetre normale.

v 1.25
  * Renommage des fonctions "Min" et "Max" des sources pour permettre la 
    compilation sous Windows.
  * Resolution d'un petit probleme de clavier non reactif pour la version 
    Mac OS 9.
  * Mise a jour de la documentation.
  
v 1.26
  * Papp s'arrete et affiche un message explicatif pour inciter l'uti-
    lisateur a lire la documentation quand il ne trouve pas de fichier 
    "papp.cfg" dans le repertoire courant.
  * Changement de la fonction d'ordre pour l'affichage des appariements :
    il s'agit desormais d'un ordre total pour eviter les problemes avec
    les clefs egales dans les implementations aleatoires de Quicksort.
  * Reparation d'un bug de perte du fichier intermediaire sur Windows NT
    lors de la correction d'un resultat de partie.

v 1.27
  * Nouvelle fonction ('W' dans le menu principal) pour afficher le tableau
    complet de tous les resultats. On peut le sauvegarder aux formats HTML
    et texte (dans ce dernier cas, apres n'importe quelle ronde).
  * Les penalites par defaut correspondent desormais a un systeme suisse 
    simple de 11 rondes.
  * Changement dans le mode de calcul du departage de Brightwell dans le
    cas d'un joueur abandonnant le tournoi.
  * Le numero Elo (FFO) d'un joueur ne peut pas etre egal a zero.
  * On utilise desormais putp() plutot que printf() pour envoyer les
    commandes TERMCAP de gestion du terminal sous Mac OS X.
  * Nouveaux fichiers crosstable.c, crosstable.h, departage.h et departage.c
  * Mise a jour de la documentation, du makefile et du fichier Bugs.

v 1.28
  * Nous stockons desormais en memoire les numeros de table a la fin de chaque
    ronde.
  * Nous proposons une petite application double-cliquable, appelee 'Papp MacOS X'
    (en fait un AppleScript compile) pour lancer Papp sur Mac OS X sans avoir 
    a taper une ligne de commande dans le Terminal. Le vrai executable Unix 
    (celui qui contient le code) est toujours appele 'papp', il faut donc avoir
    les deux fichiers.
  * Nouvelles variables utilisables dans le fichier "cell" pour creer le tableau
    croise au format HTML. 
    Les mots clefs utilisables sont : 
       PAPP_COLOR         = couleur du joueur dans la partie
       PAPP_OPP           = numero de l'adversaire dans le tableau 
       PAPP_OPP_NAME[n]   = n premiers caracteres du nom de l'adversaire
       PAPP_MY_NAME[n]    = n premiers caracteres de mon nom
       PAPP_COUPON        = coupon de la partie (eg SEELEY Ben 12/52 SHAMAN David)
       PAPP_SCORE         = score de la partie, vue de joueur (eg 52/12)
       PAPP_SCORE_RELATIF = score de la partie en relatif (eg +40)
       PAPP_MY_SCORE      = mon nombre de pions (eg 52)
       PAPP_OPP_SCORE     = pions de l'adversaire (eg 12)
       PAPP_PTS           = points gagnes dans la partie (0, 0.5 ou 1) 
       PAPP_TOTAL         = total de points jusqu'a cette ronde
       PAPP_RONDE         = ronde de la partie
       PAPP_TABLE         = table de la partie
       PAPP_RANG          = classement du joueur apres cette partie.
  * Nouvelle commande (Fichier tableau-croise = "crosstable###.htm") dans le 
    fichier papp.cfg pour sauvegarder automatiquement, apres chaque ronde, ce
    meme tableau croise au format HTML.
  * Nous ajoutons maintenant, apres la sortie ASCII du tableau croise, la
    matrice des victoires. Cela permet en particulier de savoir en un clin
    d'oeil si les N premiers d'un tournoi au systeme suisse ont fait un toutes-
    rondes. Marc va etre content.
  * Nettoyage du code en divers endroits pour eviter quelques warnings de GCC.  
    

v 1.29
  * Nouvelles variables utilisables dans le fichier "cell"
      PAPP_BLACK_NAME[n]   = n premiers caracteres du nom des Noirs
      PAPP_WHITE_NAME[n]   = n premiers caracteres du nom des Blancs

v 1.30
  * Le coefficient de Brightwell et le nombre de joueurs pour le toutes-rondes
    ne sont plus dans le fichier papp.cfg mais sont demandes lors du
    lancement de papp (s'il ne trouve pas de fichier intermediaire). Ils sont
    ensuite stockes dans le fichier intermediaire pour etre relus au prochain
    lancement. On en profite egalement pour demander le nom du tournoi.
    Il n'y a donc qu'un seul fichier papp.cfg necessaire, contenant les
    penaliltes classiques.
  * Le coefficient de Brightwell peut etre un nombre decimal.
  * Le fichier 'nouveaux' est recopie dans le fichier intermediaire et dans un
    eventuel fichier ELO genere.
  * Nettoyage du code en divers endroits pour eviter quelques warnings de GCC.
  * Introduction d'une nouvelle commande dans le fichier papp.cfg pour
    sauvegarder tous les fichiers de resultats/appariements/classement/crosstable...
    dans un dossier portant le nom du tournoi.
  * Mise a jour de la documentation et du makefile.
 
v 1.31
  * Introduction d'une regle dans le parser pour ne pas tenir compte des octets
    introduits en tete des fichiers par certains editeurs de texte indiquant
    le codage Unicode.

v 1.32
  * Le fichier HTML de sortie est maintenant compose a partir d'un fichier template
    'cell.tmpl' qui est recopie a l'identique a l'exception de la definition
    de la cellule et de l'emplacement du tableau.
  * Le format de sortie d'un fichier ELO a ete modifie pour correspondre au
    nouveau format propose par la federation mondiale.

v 1.33
  * Le format de sortie d'un fichier ELO a ete modifie pour correspondre au
    nouveau format propose par la federation mondiale. On peut egalement
    ajouter des resultats a la main dans le fichier ELO.
    
v 1.34
  * Introduction d'une nouvelle commande dans le fichier papp.cfg pour
    sauvegarder egalement des fichiers de resultats/classement au format xml.
  * Le fichier intermediaire est maintenant 'papp-internal-workfile.txt'
    par defaut. Un ancien fichier '__papp__' trouve au demarrage sera renomme.

v 1.35
  * Correction d'un bug lors de la correction du resultat d'une ronde.

v 1.36
  * Correction d'un bug lors de la generation d'un fichier xml.

v 1.37
  * Refactoring of code to translate all identifiers and comments into English.
  * Change makefile so that it automatically detects machine and OS to generate
    the executable file. Works for Windows, Macintosh and Linux.
