Vielleicht haben Sie schon einmal eine Demoversion gesehen, in der sich der Mauszeiger wie von Geisterhand bewegt. Der Mauszeiger bewegt sich von alleine.
Texte werden unsichtbar geschrieben, die Features der Reihe nach mysteriös angezeigt, ohne daß man einen Finger krümmt (z.B das Sound Sampler-Demo von GDATA). Sicherlich handelt es sich bei solchen Demos um die besten überhaupt (nur Fernsehen ist schöner), doch interessiert einen Programmierer natürlich viel mehr, wie so etwas überhaupt funktioniert. Man möchte es kaum glauben: Es gibt Funktionen des GEM, die dahinterstecken, genauer gesagt, sind es zwei.
Die AES-Funktion Appl_trecord() erlaubt es, Anwenderaktionen jeglicher Art (Mausbewegungen, Tastendrücke usw.) wie ein Tonbandgerät aufzunehmen und diese über die Funktion Appl_tplay() wieder abzuspielen. So einfach ist das! Aber, wie das Leben eines Atarianers so spielt, ein Atari ist halt doch nicht immer ein Atari. Die Funktion Appl_trecord() läuft erst seit dem Blitter-TOS richtig, d.h., Besitzer einer älteren TOS-Version haben nicht die Möglichkeit, Daten aufzunehmen. Wie man dann doch noch in den Genuß des Recorder ST kommt, erklären wir Ihnen gleich.
Gut, wir wissen jetzt, wie man eventuell auftretende Ereignisse aufnimmt bzw. abspielt, aber sehr viel bringt das alles noch nicht, da beim Starten des Recorders (wie bei jedem Programm) der Desktop gelöscht wird und ein paar Mausbewegungen vor einem leeren Bildschirm dem Zuschauer höchstens ein gelangweiltes Gähnen entlocken. Der Recorder müßte also im Hintergrund arbeiten und beim Desktop beginnend wirklich jede Aktion - vom einfachen Öffnen eines Fensters bis hin zur Formatierung einer Festplatte - aufzeichnen und später naturgetreu abspielen (Festplatte wird erneut gelöscht).
Wer bereits einen Blick auf das Listing riskiert hat, kennt des Rätsels Lösung: Recorder ST ist ein Accessory. So schlagen wir zwei Fliegen mit einer Klappe: Es ist von jedem GEM-Programm, das Accessories unterstützt, abrufbar, und es läuft im Hintergrund ab. Nun zur Erläuterung des Programmablaufs, wobei Sie eine ausführliche Beschreibung zum Thema »Accessoryprogrammierung in Assembler« ebenfalls in dieser Ausgabe finden. Aus diesem Grunde werde ich im folgenden nur auf die wichtigsten Routinen bzw. Unterschiede zu herkömmlichen Accessories eingehen.
Normalerweise aktiviert man ein Accessory, indem der entsprechende Eintrag im Menü »Desk« angeklickt wird. Nicht so bei Recorder ST. Der Aufruf erfolgt über die Tastenkombination ALT+ SHIFT. Dadurch wird verhindert, daß beim Aufnahmevorgang der Recorder ein zweites Mal gestartet wird (also ein Recorder im Recorder entsteht). Die Abfrage der Sondertasten geschieht über Evnt_button(). Eigentlich dient diese Funktion zur Überwachung der Mausknöpfe, liefert aber auch den Sondertastenstatus zurück. Wird das Accessory wie oben beschrieben aktiviert, so erscheint eine Dialogbox, die drei Möglichkeiten bietet:
[RECORD], [PLAY] und [ABBRUCH]. Wird »RECORD« ausgewählt, verschwindet der Dialog wieder und die Aufnahme beginnt. Da jedes Ereignis acht Byte im Speicher belegt - die Bewegung der Maus um einen Pixel ist auch ein Ereignis -, geschieht die Aufnahme immer in einem Block von 1000 Ereignissen. Ist der dafür vorgesehene Puffer voll, erscheint eine neue Box, in der wiederum drei Möglichkeiten zur Auswahl stehen. »WEITER« speichert den aktuellen Puffer in eine Datei und setzt die Aufnahme fort, »ENDE« speichert ebenfalls den Block, beendet aber jetzt die Aufnahme. »ABBRUCH« verwirft den letzten Block (Ende ohne Speichern).
Im Play-Modus werden einzelne Blöcke bis zum Dateiende eingelesen, d.h., es erscheint keine Dialogbox. Der Zugriffspfad für das Datenfile kann im Listing auf jedes System passend zugeschnitten werden. Weitere Vorschläge zur Anpassung entnehmen Sie bitte dem Listing. Doch nun ein Wart an die Besitzer von TOS-Version ´86. Da, wie gesagt, die Funktion Appl_trecord() fehlerhaft arbeitet, ist es nicht möglich, direkt aufzunehmen. Gesetzt den Fall aber, man kennt das Aufzeichnungsformat, besteht immer noch die Möglichkeit, solche Datenfiles selbst zu kreieren.
Hier also das Format: Grundsätzlich besteht jedes abgelegte Ereignis aus zwei Langwörtern = acht Byte. Das erste Langwort gibt den Ereignistyp an, das zweite enthält Informationen zu diesem. Dabei gelten die Werte 0-3 für Timer-, Button,- Maus- und Tastaturereignisse. Entsprechend sind die Informationen wie folgt abgelegt: Timer-Ereignis - Anzahl der Millisekunden; Button-Ereignis - Status der Maustasten im unteren (0 oder 1) sowie die Anzahl der Mausklicks im oberen Wort; Maus-Ereignis - X-Koordinate im oberen, Y-Koordinate im unteren Wort; Tastatur-Ereignis - ASCII- und Scancode (unteres Wort) sowie den Sondertastenstatus (ALT, SHIFT etc.) im oberen Wort. Es ist sehr wichtig, daß die Voraussetzungen beim Aufnehmen und Abspielen identisch sind (Lage der Fenster und Icons etc.). Während der Aufnahme immer erst dann neue Aktionen ausführen, wenn sich wirklich nichts mehr am Bildschirm bewegt, z.B. nach dem Schließen oder Öffnen eines Fensters so lange warten, bis diese Aktion abgeschlossen ist. Wer Spaß daran findet, kann den Recorder noch beliebig erweitern oder verbessern, wie zum Beispiel eine einfache Verarbeitung der Daten bis hin zum kompletten Demo-Maker.