Ataquarium - HighWire

Endlich Weihnachten! Zwar gab es dieses Jahr nicht den erhofften Atari-Clone, aber dennoch gibt es einiges für Entwickler.

Dies soll nicht der allseits beliebte und seitenfüllende Jahresrückblick (gähn) werden. Ein neuer Trend konnte pünktlich zum Atari-Park ausgemacht werden: Mut zur 68040-Emulation. Eigentlich wurde es höchste Zeit, schließlich ahmt der Amiga-Emulator UAE [1] schon länger diesen Prozessor nach.
Der STemulator [2] hat jetzt eine 68040 Emulation. Wer also unter dem Emulator entwickelt, kann dies endlich unter einer zeitgemäßen CPU-Emulation tun. Ebenfalls interessant ist das Projekt ARAnyM [3]. Hinter diesem Wortungetüm steckt "Atari Running on Any Machine", ein Falcon-Afterburner-Emulator. Das Wort "Emulator" möchten die Entwickler allerdings gar nicht so gerne hören, denn sie sehen das ganze eher als eine Art "Java", um Atari-Anwendungen (Bild 1) auf allen Plattformen laufen zu lassen. Letztlich ist es aber nur ein weiterer Atari-Emulator, anzusiedeln irgendwo zwischen TOS2Win und STemulator. Die CPU-Emulation stammt - natürlich - vom UAE. Wie auch bei der Version 2.0 des STemulator findet das TOS 4.x-Verwendung, allerdings ist das Fernziel der Entwickler ein kompletter Ersatz des TOS durch XaAES, freeMiNT und fVDI.
Da bleibt eigentlich nur noch eine Frage an die Emulatoren-Entwickler: Wenn Ihr Euch schon beim UAE einiges abschaut, warum portiert Ihr dann nicht den UAE als kleines "Weihnachtsgeschenk" auf den Atari?

Messe-Nachlese

An Entwicklungstools gab es auf der Messe keine großen Neuerungen, sieht man einmal von einer neuen SDK-CD [7] (Software Development Kit) ab. Diese CD wird weiter gepflegt, um auf den aktuellen Stand zu bleiben.
Sehr wertvoll waren die Gespräche auf dem Atari-Park. Neben einem geheimen Treffen des xtos-Team mit einigen Entwicklern, erfuhr man so einiges über Programmierprojekte, die auf Eis gelegt wurden. faceVALUE gehört glücklicherweise nicht dazu, aber Holger Herzog hat ein paar sehr schwere Universitätsprüfungen vor sich, deren Ausmaß ich mir im dritten Semester lieber nicht ausmalen möchte...
In der Warteschleife befindet sich der bereits erwähnte GFA-Editor. Dessen Programmierer hat noch ein paar Schwierigkeiten zu bewältigen.
Richtig in die Gänge kommt die TOS-Group [9]. Ab Januar 2002 kommt nicht nur der Euro, sondern es werden auch hoffentlich einige alte Zöpfe in der Atari-Welt abgeschnitten. Inzwischen gibt es auch einige Teilnehmer, die nicht aus dem deutschsprachigen Raum stammen. Im Bereich "Diskussionsfreudigkeit" liegt die Gruppe derzeit weit vor allen anderen Diskussionsforen. Damit die alten STs neue Standards nicht unnötig behindern, aber trotzdem nicht ohne Beschäftigung bleiben, hat Axel Scherer eine kleine Homepage [10] aufgemacht. Die Seite soll existierende Lösungen sammeln, um z.B. einen 1040ST einfach ins Internet zu bringen. Ähnliche Seiten gibt es bereits für andere Systeme, z.B. für alte Macs.

SDL

Nicht auf der Messe, sondern im Web gibt es eine andere interessante Entwicklung. Fließbandportierer Patrice Mandin [8] patcht fröhlich an der SDL-Library herum, damit diese unter MiNT kompiliert werden kann. SDL ist eine bei Spielen und Emulatoren sehr beliebte Library. Um die Funktionsfähigkeit von SDL auf dem Atari unter Beweis zu stellen, wurde noch einmal der erste Teil einer id Software Ego-Shooter-Trilogie, dessen Name hier nicht erwähnt werden darf, portiert. Das Produkt ist allerdings noch sehr langsam, eignet sich aber gut als Geschwindigkeitstest.
Interessant ist an SDL, das ein paar BeOS-Programmierer einige Emulatoren angepasst haben. Den Lynx-Emulator "Handy" gibt es z.B. auch in einer SDL-Version.

Sourcewatch

Uhrenvergleich: dies ist die Ausgabe Januar 2002. In der letzten Ausgabe ging es um das Open-Source-Programm ByWater Basic [4]. Daran soll nahtlos angeschlossen werden mit einem weiteren Atari-Programm: Highwire [5].

Highwire

Highwire... das war doch? Richtig, die "Browser-Hoffnung" und der erhoffte "CAB-Killer". Aber genauso wie CAB im Internet oft über den sprichwörtlichen grünen Klee gelobt wird, ist Highwire sicherlich kein fertiges Produkt, das irgendetwas ersetzen kann. Auch die von seinem ursprünglichen Entwickler Robert Goldsmith entwickelte Parsing-Engine eignet sich nicht sonderlich, Sprachen zu interpretieren, die nicht auf HTML basieren. Legenden und Hoffnungen beiseite gelassen, bleibt dennoch ein sehr interessantes Programm, von dem man lernen kann und das relativ leicht erweiterbar ist. Der Umfang des Highwire-Sourcecodes beträgt etwa 320 KB, wobei sich der Hauptteil in Parse.c (80 KB) befindet, dem eigentlichen HTML-Parser.
Der Parser beherrscht derzeit folgendes:

Übersicht C-Routinen

aei.c: Empfang von AES-Nachrichten (Redraw, Terminate etc.)
color.c: Konvertierung von Farben (#rrggbb) in Farbnummer, Speichern der Farbregister, Hexadezimal nach Dezimal
config.c: Universell einsetzbare Routine, um eine Konfigurationsdatei zu lesen
f_calc.c: Routinen für die Frame-Verwaltung (Berechnungen)
f_struct.c: Routinen für Frame-Strukturen
highwire.c: Hauptdatei, Programmgerüst, das auf die anderen Funktionen verweist
keyinput.c: Verwaltet Tastatureingaben und lädt Dateien über die Dateiauswahl
loader.c: Laderoutinen und Hilfsprozeduren zum Auseinandernehmen von Pfaden
mouse_r.c: Wird verwendet, sobald eine Maustaste gedrückt wurde
netlayer.c: Online-Routinen, wird z.Zt nicht verwendet
nice_vdi.c: Öffnen der (virtuellen) Workstation
o_struct.c: Anlegen und Entfernen von Strukturen (Links, Listen, benannte Ziele)
p_struct.c: dito., jedoch für Absätze
parse.c: erledigt den Großteil des Parsings: HTML-Sonderzeichen, Farbnamen, Tags etc.
redraws.c: Alle Zeichenroutinen (für Grafiken, Trennlinien etc.) sind hier abgelegt
stptok.c: liefert "Token" aus einem zu übergebenden Puffer zurück
table.c: Die - bisher noch rudimentären - Tabellen-Funktionen
variable.c: Einige allgemeine Definitionen
vdicol.c: VDI-Routinen, modifiziert für Highwire
w_struct.c: Strukturroutinen für Wörter

Die parse.c

Neue HTML-Befehle werden in der parse.c eingefügt. Diese C-Datei ist zwischen der Version 21/09 und 12/10 trotz erhöhtem Leistungsumfang immerhin um 14 KB geschrumpft. Der Grund dafür war der etwas rustikale Programmierstil, bei dem statt einer C-Struktur lieber seitenlange switch-case-Blöcke verwendet wurden.

Zwei dieser neuen Strukturen bedienen die Farbnamen und Sonderzeichen, die gleich zu Beginn der parse.c auftauchen.
In der Version vom 12.10. kennt Highwire 85 Farbnamen, deren Hex-Gegenstücke der SelfHTML von Stefan Münz entnommen wurden. Bei "linen" hört die Liste auf, danach können weitere Farbnamen hinzugefügt werden:
"linen", "#FAF0E6", "mediumblue", "#0000CD"
fügt die kommende Modefarbe "Mediumblue" hinzu. Damit die Farbe auch erkannt wird, muß MAX_COLOUR um eins erhöht werden.
Ähnlich aufgebaut sind die Sonderzeichen. Pro Sonderzeichen werden immer zwei Zahlen angegeben: eine für den ISO Latin 1- und die andere für den Atari-Zeichensatz. Der gewünschte Zeichensatz wird in highwire.c über vst_charmap festgelegt. Wie gehabt muß auch hier nach dem Hinzufügen eine Konstante erhöht werden (MAX_CHAR).

Ein Großteil der HTML-Tags wird in der calculate_frame-Funktion ausgewertet. Die Befehle sind hübsch alphabetisch geordnet und da C kein case 'blockquote' kennt, wird bei Bedarf ein weiterer switch-case-Block eröffnet, um von

zu unterscheiden.
Genauso war übrigens auch die HTML-Sonderzeichenauswertung in älteren Highwire-Versionen aufgebaut.

Relativ zu Beginn ist das <A>-Tag zu finden. Highwire kennt die Tags ,

und nicht, daher erfolgt keine weitere Unterscheidung. Am Anfang überprüft Highwire, ob das Tag ein href-Attribut hat:

variable(symbol, "href", output);

In symbol ist das komplette Tag enthalten, output speichert den Wert von "href" - wenn das Attribut definiert ist. Ansonsten nimmt Highwire an, das es sich um ein benanntes Ziel halten muß.
Ist "href" definiert, wird dem betroffenen Bereich die Farbe für Verweise zugewiesen:

current_word->colour = p_frame->link_colour; 
current_word->changed.colour = true;

Als nächstes wird überprüft, ob das Tag auch ein "target"-Attribut hat:

variable(symbol, "target", out2);

Ist "target" vorhanden, wird ein neuer Link mit diesem Ziel angelegt, ansonsten erhält der Link als Ziel den aktuellen Framenamen.

Analog werden benannte Ziele angelegt. Einzige Unterschiede: statt "href" wird "name" ausgewertet und das Ziel ist immer das aktuelle Frame.

Probleme

Als WIP (Work-in-Progress) hat Highwire noch diverse Probleme, die das Testen erschweren. Eines davon macht sich dadurch bemerkbar, das bei jeder HTML-Datei wirre Zeichen erscheinen. Der Grund dafür ist, das Highwire auf einen Font (Dutch 801) und bestimmte Font-IDs optimiert wurde. Die Lösung für dieses Problem liegt in der highwire.cfg. Diese Konfigurationsdatei im ASCII-Format ist so aufgebaut:

NORMAL = 9908
ITALIC_NORMAL = 20222
BOLD_NORMAL = 10090
BOLD_ITALIC_NORMAL = 25151

Mit einem geeigneten Utility müssen die eigenen Font-IDs ermittelt und eingetragen werden. Notfalls kann dies auch mit GEMagnetic [6] geschehen, das über eine Fontauswahl verfügt.

Ein weiteres Problem ist das Darstellen von anderen Seiten. Wird keine Datei per Kommandozeile übergeben, zeigt Highwire die excerpt.htm an. Eine Menüleiste hat das Programm nicht, aber per Control+O wird die Dateiauswahl aufgerufen. HW verarbeitet aber keine Datei/Pfadnamen, die Leerzeichen enthalten.

PureC-Besitzer sollten als Projektdatei die "purewire.prj" benutzen, da die "highwire.prj"-Datei für LatticeC gedacht ist.

Was soll's?

Der Highwire-Sourcecode eignet sich gut zum Schreiben von Viewern, die HTML-ähnliche Sprachen darstellen sollen. Beeindruckend ist das Resizen von Fenstern, bei dem die HTML-Anzeige der Fenstergröße flüssig angepaßt wird. Compiliert ist Highwire mit 45 KB sehr kompakt.

Quellen:
[1] UAE: http://www.freiburg.linux.de/~uae/
[2] STemulator: http://www.stemulator.net/
[3] ARAnyM: http://aranym.sophics.cz/
[4] ByWater Basic: http://www.jaapan.de/software/programmiersprachen/
[5] Highwire: http://highwire.atari-users.net/
[6] GEMagnetic: http://www.netset.com/~baldrick/gemagnetic.html
[7] NewSDK: http://www.mypenguin.de/shop/
[8] SDL/MiNT: http://www.multimania.com/pmandin/
[9] TOS-Group: http://www.tosgroup.org/
[10] http://www.agentur-scherer.de/atari


Mia Jaap
Aus: ST-Computer 01 / 2002, Seite 38

Links

Copyright-Bestimmungen: siehe Über diese Seite