Buchbesprechung (von Stefan Salewski) Stade, den 1.8.89 Autor: Holger Gzella Titel: Amiga Modula-2 (Programmieren für Fortgeschrittene) Verlag: Markt&Technik Preis: DM 69 ISBN 3-89090-744-X Das im Markt&Technik Verlag erschienene Buch ist das erste (mir bekannte), daß die systemnahe Programmierung des Amiga mit Modula-2 beschreibt. Auf den ersten Blick macht das Buch einen sehr ansprechenden Eindruck: Es hat einen festen Einband, ein recht umfangreiches Stichwortverzeichnis, und die 380 Seiten sind sauber und übersichtlich bedruckt. Es scheint also den Preis von DM 69 wert zu sein, zumal man dazu noch eine Diskette mit Beispielprogrammen erhält, die immerhin zu 85 % gefüllt ist. Die Beispielprogramme sind für den Compiler M2Amiga von Meier-Vogt geschrieben, der Autor geht aber im Anhang kurz auf die Unterschiede zum TDI- und zum Benchmark-Compiler ein. Das Buch ist in folgende 8 Kapitel unterteilt: Einführung, DOS, Intuition, Graphics, Copper, Blitter, Diskfonts und Exec, wobei Intuition, Graphics und Exec mit je ca. 100 Seiten den größten Teil des Buches füllen. Der Autor, zu dessen Person man nichts näheres erfährt, hat sich bemüht, einen möglichst großen Teil der in den Libraries enthaltenen Funktionen und deren Benutzung mit Modula dem Leser nahezubringen. Dadurch sind die Erklärungen der einzelnen Funktionen recht knapp ausgefallen, auf Besonderheiten wird nicht eingegangen. Viele der zuvor erklärten Funktionen werden durch kurze und einfache Beispielprogramme erläutert. Obwohl diese Programme alle auf der Diskette enthalten sind, wurden sie auch im Buch abgedruckt. (Den dadurch verbrauchten Platz hätte man besser für andere Dinge benutzen sollen.) Diese Beispiele sind extrem kurz gehalten. So wird oft nicht getestet, ob eine aufgerufene Funktion ein gültiges Resultat geliefert hat, oder belegter Speicherplatz wird nicht wieder freigegeben. Dieses ist durchaus verständlich, da es sich ja nur um Beispiele handelt, aber der Autor hätte doch wenigstens auf diese Unzulänglichkeiten seiner Programme hinweisen sollen. Das Buch beginnt, wenn man von dem Einführungskapitel (daß nur wenig länger als eine Seite ist) absieht, mit dem Amiga-Dos. Das ist der erste große Fehler des Autors, denn scheinbar hat er hiervon nur wenig Ahnung. Neben einigen Druck- und Blackoutfehlern, die man leicht erkennt, sind auch viele inhaltliche Fehler vorhanden, welche für den Leser recht unangenehme Folgen haben können. Gleich beim ersten Befehl, DOS.Write ist der Rückgabewert falsch erklärt. Die Funktion DOS.Seek ist völlig falsch beschrieben, beim Befehl DOS.Open wird der Modus readOnly nicht erwähnt, bei der Funktion DOS.WaitForChar wird beim Rückgabewert 1 mit -1 verwechselt und statt 1/1000 secs von 1/50 secs gesprochen. Beim Befehl DOS.Lock sind die Zugriffsmodi vertauscht, bei DOS.Read wird der Rückgabewert -1 unsinnigerweise mit NIL identifiziert. Diese Fehler sind in den ersten 7 Seiten des DOS-Kapitels enthalten. Dann sind einige Parameter der DOS-Funktionen falsch bezeichnet, so wird behauptet, daß die Rückgabewerte der Funktionen DOS.SetComment und DOS.Rename von Typ LONGINT sind. Zumindest seit der Compilerversion 3.2d haben Sie aber den Wert BOOLEAN. Das sind nur einige der Fehler, die mir beim Lesen sofort auffielen. Vielleicht ist der eine oder andere Fehler in Wirklichkeit auch gar kein Fehler, aber es sind einfach zu viele. Allgemein sind die DOS-Funktionen zu knapp erklärt, in vielen Fällen kann man eigentlich gar nicht von einer Erklärung sprechen, da nur die Bedeutung der Parameter erläutert wird. Eine so knappe Erklärung mag zum Nachschlagen brauchbar sein, zum Programmieren ist sie aber nicht zu gebrauchen. Da bietet das Amiga Intern von BataBecker doch etwas mehr nützliche Information. Für mich persönlich ist das DOS-Kapitel durch die zu klappen Erklärungen unbrauchbar, und ich habe wegen der vielen Fehler (vorerst) das Vertrauen in dieses Buch verloren. In der Hoffnung, daß vielleicht sämtliche Fehler im DOS-Kapitel konzentriert sind, habe ich mir dann als nächstes das Intuition-Kapitel angesehen. Das Intuitionkapitel hat eine Länge von genau 100 Seiten und beschreibt fast alles, was mit der grafischen Benutzeroberfläche zu tun hat. Wenn nam aber weiß, daß das original Intuition Reference Manual (Addison Wesley) ohne Anhang über 200 Seiten einnimmt, so ist klar, das auch dieses Kapitel keine genaue Information liefern kann. Tatsächlich scheinen hier aber weniger Fehler vorhanden zu sein, aber auch hier findet man welche. Da wird z.B. behauptet, daß man mit dem dritten Parameter der Funktion Intuition.SetPrefs veranlassen könnte, daß die Preferencewerte auf Diskette abgespeichert werden, was meiner Meinung nach aber nicht richtig ist. Die Bedeutung des Feldes PointerTicks in der Preferences-Struktur beschreibt Herr Gzella so: "Dieses Feld gibt an, wieviele IntuiTicks (1/50stel Sekunden) nötig sind,um eine Koordinate des Mauszeigers zu erhöhen. ..." Dieser Satz steht auch so im "Intuition Reference-Manual", allerdings wird in dem englischen Text von Ticks gesprochen. Herr Gzella assoziert damit die IntuiTicks und kommt so zu der mir unsinnig erscheinenden 1/50stel Sekunde. Korrekt sollte man wohl den Satz etwa so übersetzen: "Dieses Feld gibt an, wieviele Inpulse von der Maus an Intuition geschickt werden müssen, um den Mauspfeil um eine Einheit zu bewegen." Um Ihnen ein Beispiel zu geben, wie der Autor die Betriebssystemfunktionen erklärt, zitiere ich jetzt einmal, was er zu Intuition.BeginRefresh schreibt. Zitat: "Sollte man über IDCMP die Nachricht bekommen, daß ein Window erneuert werden muß(s.o.), so kann er es mit BEGINREFRESH erneuern. --------------------------- BeginRefresh ( MeinWindow); --------------------------- Mein Window: WindowPtr auf das Window, welches erneuert werden soll. Während ein Fenster erneuert wird, setzt Intuition das Flag WINDOWREFRESH und ignoriert sämtliche Befehle, die sich nicht auf Bereiche innerhalb des Windows beziehen. BEGINREFRESH ist sicher nur für SIMPELREFRESH-Fenster sinnvoll, da sonst (also bei keinem gesetzten Refresh-Flag) Intuition die Erneuerung selbst übernimmt." Zitat ende. Das ist alles, was zu dieser Funktion gesagt wird. In anderen Büchern wird diese Funktion anders und wesentlich ausführlicher erklährt, aber urteilen Sie selbst. (Der Gramatikfehler des ersten Satzes steht übrigens so im Buch.) Die übrigen Kapitel habe ich bis jetzt nur überflogen, daher kann ich zu diesen keine genaueren Aussagen machen, aber sie unterscheiden sich wohl nicht wesentlich von den zuvor besprochenen Kapiteln. Zum Stil des Autors kann man folgendes sagen: Er benutzt eine sachliche und leicht verständliche Sprache. Durch seine Bemühungen, abwechslungsreiche Formulierungen zu finden, entstehen aber oft Unsauberkeiten, die wohl nicht nur Puristen stören werden. So schreibt er z.B. "ich empfehle, das so zu machen" statt " das muß man so machen", oder ", so geben Sie hier am besten NIL an", statt " muß auf NIL gesetzt werden. Oft gelingt es dem Autor nicht, sich knapp und präzise auszudrücken. Da wird z.B. bei der Erklärung von Funktionen, die einiges gemeinsam haben, dieses Gemeinsame mehrfach wiederholt, anstatt diese Gemeinsamkeiten einmal aufzuführen und dann nur noch die Unterschiede zu besprechen. Fazit: Nach meiner Meinung hat sich der Autor mit diesem Buch etwas übernommen. Es hätte besser auf zwei Bände und (mindestens) zwei Autoren aufgeteilt werden sollen. Auch wäre es sinnvoll gewesen, wenn sich vor dem Druck jemand das Buch einmal durchgelesen hätte, um zumindest einige Fehler herauszufiltern. Wären die vielen Fehler nicht vorhanden, so könnte man das Buch durchaus jedem, der schon Modula beherrscht und sich nun mit dem Betriebssystem des Amigas beschäftigen will, empfehlen. Durch die zahlreichen Beispielprogramme, die auf Diskette als Quellcode und ablauffähige Programme vorliegen, wird dem Programmierer die Angst vor dem Amiga-Betriebsystem genommen. Die Beispiele sind zwar sehr einfach, und teilweise auch fehlerhaft, aber sie zeigen doch, daß es geht. Bisher mußte man sich als Modula-Programmierer mit Büchern, die andere Sprachen (hauptsächlich C ) für ihre Beispiele werwenden, herumschlagen. Man mußte also neben Modula auch noch Grundkenntnisse in C haben, um die Beispiele zu übertragen. Diese Zeiten sind jetzt vorbei: Mit diesem Buch und Grundkenntnissen von Modula kann man in die systemnahe Programmierung einsteigen. Allerdings darf man nicht erwarten, das auf diesen 380 Seiten alle Geheimnisse des Betriebssystems gelüftet werden. Dazu ist man weiterhin auf die original Amiga-Manuals von Addison-Wesley, die es jetzt endlich in einer neuen Auflage geben soll, angewiesen. Stefan Salewski Stolper Weg 3 2160 Stade