Von Beginn an habe ich auf dem Amiga mit dem SAS/C-Entwicklungssystem in den Versionen 6.3 und 6.51 gearbeitet. Dieser großartige Compilers ist völlig kompatibel mit dem ANSI-Standard und hat eine ganze Reihe von Auslassungen bezüglich Stil und Sprache bei dem Versuch festgestellt, den Quelltext neu zu übersetzen. Eine große Aufräumaktion für die Zusatzquellen in C, insbesondere die Einführung der vollständigen Prototypen und die Korrektur einiger fehlender Casts, war deshalb notwendig.
Sobald die selbsterzeugte Version 2.7 sauber lief, wurde sie mit der
bekannten Amiga-Umsetzung von Stefan Becker von Fish-Diskette 486
verglichen und erwies sich als derart langsamer, daß Verbesserungen
notwendig waren, um mit diesem System zu wetteifern. Der kritische Kern der
„inneren Schleife`` von wurde in Assembler für den Motorola 68020
umgeschrieben, wofür ich an dieser Stelle meinem Bruder danken möchte. Dies
ergab eine Beschleunigung des Laufzeitverhaltens um etwa zwanzig bis dreißig
Prozent verglichen mit der nichtoptimierten Version und um etwa fünf bis acht
Prozent gegenüber der optimierten Version von Stefan Becker.
Der glänzend bestandene TRAP-Test bewies die Korrektheit der gemachten
Änderungen dieser Implementierung, wobei die Testroutine von Don Knuth
tatsächlich den letzten bösen Fehler meiner eigenen Umsetzung fand (der
ausgerechnet etwas mit der Variablen ,be_careful
` zu tun hatte).
Jedoch zeigte der Augenschein, daß sowohl mein eigenes als auch
das von Stefan Becker Probleme mit der Bildschirmanzeige hatten. Weder die
Implementierung von Stefan Becker noch die von Edmund Mergl arbeiteten so,
wie im ,
book` [4] beschrieben. Besonders die
Testroutine 6test.mf für die Computer Modern Zeichensätze machte
dies deutlich. (Ein Beispiel für diesen Test findet man auf Seite 192
von [4].) Mit einer geänderten Version von amiga.c,
die gleichzeitig einige fortgeschrittene Funktionen für die Ausgabe
verwendet und deshalb auch die Version 2 des Amiga Betriebssystems
benötigt, lief es besser.
Unter Anwendung einiger Ideen von David Crooke aus seiner Amiga-Umsetzung
von TEX 3.141, baute ich eine geänderte Pfadsuche sowie die Möglichkeit
der Speicherkonfiguration in ein.
(Siehe Abschnitt
zu Einzelheiten darüber.)
Im September 1993 erfolgte dann der erste Schritt in Richtung Version 2.71 mit den Fehlerbeschreibungen des Addison-Wesley-Verlages. Alle Änderungen, die die neue Version betrafen, wurden in die Change-Datei eingebaut.
Schließlich erhielt ich im Oktober 1993 die offizielle
Version 2.71, die das alte System
vollständig ersetzt. Sie enthält ein neues plain.mf
base-Programm und einen völlig neuen TRAP-Test. Die letzte
wichtige Änderung dieser Implementation war die Bereitstellung einer wirklich
GROSSEN Version von
(und von TEX 3.1415), indem
max_quarterword auf 32.767 (32 Kilo Viertelworte) und
max_halfword auf 1.073.741.823 (1 Giga Halbworte) erweitert wurde,
so daß nun wirklich niemand mehr an die maximal mögliche Einstellung stoßen
wird (Sie bräuchten schon mehr als 8 Giga Byte freien Speicher!). Dabei
scheint jeder zu glauben, daß ,262.142` als maximaler Wert von
memmax festgelegt sei, nur weil es so in [3]
und [5] angegeben ist. Dieser Wert gilt jedoch nur für
36 Bit Worte. Die vorliegende C-Implementation arbeitet aber
auf der Basis von „64 Bit Worten``, das heißt ein Halbwort ist als
long int definiert, so daß die viel größeren Werte verwendet
werden können.