Bildschirme Fotografiert Da startet man hoffnungsvoll seinen Compiler und erh„lt als Ergebnis die berhmten fnzig Fehler in vierzig Quellzeilen. Oder man erstellt die erste galerief„hige Computergrafik und hat keine M”glichkeit dieses Bild in einem g„ngigen Format abzuspeichern. Alle diese Situationen werden von den beiden nachfolgenden Pro- grammen abgedeckt. Schnappschuss Alles was sich auf dem Bildschirm des ST zeigt befindet sich auch als Folge von bin„ren Informationen in einem ca. 32 kByte grožen Speicherbereich. Dieser Speicherbereich kann sich auf jeder 256- Byte-Grenze innerhalb des mit Ram versehenen Adressraums des 68000 befinden. Einige XBIOS-Funktionen untersttzen das Festlegen von Bildschirmbereichen. Das vorliegende Programm nutzt diese F„hig- keiten aus und installiert einen eigenen Bildschirmbereich, in den per Tastendruck das jeweils "sichtbare" Bild kopiert wird. Derart konserviert ist es kein Problem, sich dieses Bild jederzeit per Knopfdruck anzuschauen und wieder in seinen Arbeitsbereich zurck- zukehren. An's Herz vom Ganzen So einfach wie es klingt ist die Sache dennoch nicht. Unsere geplante Foto-Routine muž ja dauernd im Hintergrund "lauern" und bei Anforderung seine T„tigkeit verrichten. Also muž FOTO resident im Speicher vorhanden sein, wie man das macht wurde ja schon im einzelnen behandelt (1,2). Weiterhin muž unsere Routine auch be- merken, wann die Taste, die einen Schnappschuž ausl”sen soll ge- drckt ist. Zu diesem Zweck klinkt man sich am besten direkt ins BIOS des ST ein. Dort kann man gewissermažen direkt an der Quelle die entsprechende Taste abfangen und seine Arbeit dementsprechend ausfhren. Wie funktionierts ? Anhand des weitgehend auskommentierten Listings kann man sich den Vorgang im einzelnen zu Gemte fhren, hier eine Zusammenfassung: Nachdem das Programm geladen wurde, stellt es ersteinmal fest, ob die Foto-Routine bereits resident ist. Wenn ja, wird alles abge- brochen, zweimal das gleiche Programm im Speicher w„re nicht sehr ”konomisch. Alsdann stellt das Programm fest, an welcher Adresse sich der Arbeitsbildschirm befindet und merkt sich die Adresse. Die Adresse des Fotoschirms ist bereits bekannt. Danach wird der Trap #13 Vektor, da ist der zentrale Einsprungpsunkt des ST-BIOS auf die Fotoroutine gerichtet und der ursprngliche Vektor an sicherer Stelle abgespeichert. Zu guter Letzt teilt das Programm dem Betriebssystem mit, vieviel Bytes es reservieren soll. Von diesem Zeitpunkt an geht JEDER Bios-Aufruf durch unser FOTO-Programm. Foto stellt fest, ob der Aufruf vom Typ CONIN mit der Tastatur als Eingabeeinheit ist. In diesem Fall wird die Taste analysiert, sollte eine der programmrelevanten Tasten im Tastaturpuffer stehen, wird die entsprechende Funktion ausgefhrt. Die Taste ist mit Hilfe der beiden Konstanten "DISKEY" und "FOTKEY" im Listing frei w„hlbar. Wurde die Anzeigefunktion gew„hlt, wartet FOTO darauf, daž eine weitere, beliebige Taste bet„tigt wird und kehrt dann zum Hauptbildschirm zurck. Ist der Tastendruck nicht fr das Fotoprogramm bestimmt, so gibt FOTO die Arbeit an das BIOS ab, womit der normale Programmverlauf wiederhergestellt wird. 68000-Freaks wird auffallen, daž im Bereich der BIOS-Routine sehr vorsichtig programmiert wurde. So wurde weitgehend darauf ver- zichtet, Werte auf den Stack zu schieben. TOS hat relativ wenig Speicher fr den Supervisorstack und erlaubt daher nur maximal drei rekursive Betriebssystemaufrufe. Da ein grožer Teil der An- forderungen vom Gemdos hinab ins BIOS gereicht werden, kann man sich ausrechnen, wann man sich auf der tiefsten Verschachtelungsebene befindet. Trotzdem ist TOS hier besser dran als sein „lterer Bruder MS-DOS. Dieses Betriebssystem strzt unweigerlich ab, wenn man innerhalb des DOS einen weiteren DOS-Aufruf absetzt. FIXIT ! Das C-Listing soll als Beigabe zur Fotoroutine dienen. Dieses Programm schaut nach, ob sich FOTO im Speicher befindet. Wenn das zutrifft, wird der gesamte fr FOTO reservierte Speicherbereich im DEGAS-Format auf Diskette geschrieben und ist somit bereit zur weiteren Verarbeitung. Die Funktionen "isfoto" und "stpchr" sind nicht auf den ersten Blick zu durchschauen. "isfoto" ruft die BIOS-Funktion "Set exception" auf, um den aktuellen Anfang des BIOS zu bekommen. Mittels dieser Adresse findet sie den Beginn der Conin() Routine. Am Anfang der Conin() Routine sollte sich, vorausgesetzt FOTO ist geladen eins der berhmten "magischen Langworte" befinden. Steht es dort, so kann "isfoto" die Bildschirmadresse zurckgeben. stpchr() ist eine der exzellenten Funktionen, die der Lattice C- Compiler seinen Besitzern zur Verfgung stellt. Sie durchsucht den bergebenen String nach dem angegebenen Zeichen und liefert die Adresse innerhalb des Strings. Mit Hilfe von stpchr() ist beispielsweise sehr schnell festzustellen, ob ein Dateiname samt Extension ".xxx" oder ohne sie angegeben wurde. (Was machen nur die armen Schweine, die diesen sch”nen C-Compiler nicht besitzen ?)