Historique de Papp
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 qui
remettait 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.