-
Notifications
You must be signed in to change notification settings - Fork 0
/
Changes
811 lines (742 loc) · 39.5 KB
/
Changes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
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.
* SÕil y a plus de 200 joueurs dans la base, PAPP refuse dÕen
afficher la liste quand lÕutilisateur tape une tabulation alors
que le tampon dÕentree est vide.
* Dans le dialogue dÕappariements 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 dÕelitisme (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 lÕimpression pour un nouveau compilateur :
CodeWarrior pour Macintosh. Je cherche toujours quelquÕun capable
de programmer lÕimpression dÕun 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.