AMC-GDOS Version 3.10 Release Notes und Dokumentation Copyright 1987/88 Arnd Beissner Lizenz fr Atari Computer GmbH =================================================================== *** Rechtliche Hinweise *** Sie drfen AMC-GDOS kostenlos auf Ihrem Atari-Computer fr pers”nliche Zwecke nutzen, ebenso drfen Sie Kopien an jeden beliebigen Atari-Besitzer weitergeben. Das Recht zur Weitergabe ist allerdings daran gebunden, daž Sie die Dateien: AMCGDOS.PRG und AMCGDOS.TXT weder umbenennen, noch in irgendeiner Art und Weise ver„ndern oder unvollst„ndig weiter- geben. In jedem Fall sind Sie dazu verpflichtet, die beiden Dateien nur zusammen weiterzugeben. Jede Art von Weitergabe im beschriebenen Rahmen ist nicht nur erlaubt, sondern ausdrcklich erwnscht. Die kostenlose Nutzung gilt ausschliežlich fr Atari-Computer. Wenn Sie AMC-GDOS in irgendeiner Form auf irgendeinem Medium verkaufen oder anderweitig kommerziell vermarkten, sei es als eigenst„ndiges Produkt oder als Beilage zu einem anderen Produkt, so sind Sie LIZENZPFLICHTIG. Die eher symbolischen Lizenzbedingungen k”nnen Sie bei Atari-Deutschland erfragen. =================================================================== TEIL 1 RELEASE NOTES Version 3.10 o AMC-GDOS gibt es wieder in einer deutschen *und* einer englischen Version. o Probleme der Vorg„ngerversionen mit Programmen, die auf beliebige physikalische Ger„te, aber nicht auf den Bildschirm zugriffen, wurden beseitigt. RELEASE NOTES Version 3.04 o AMC-GDOS kann Zeichens„tze jetzt wieder resident laden. RELEASE NOTES Version 3.03 o AMC-GDOS hat jetzt eine Stackprfung, die ein šberlaufen des GDOS-Stacks berwacht und ggf. Warnungen ausgibt. o AMC-GDOS l„uft auch dann zuverl„ssig mit TOS 1.4, wenn der Bildschirmtreiber nicht resident ist, sondern geladen wird. RELEASE NOTES Version 3.02a So, da ist sie nun, die vorl„ufig endgltige 3er Version von AMC-GDOS. Vorab, fr alle, die schon mit einer der 2er Versionen gearbeitet haben, die Žnderungen: o AMC-GDOS liest ab Version 3.00 die 'alten' ASSIGN.SYS-Dateien. Die frheren CONFIG.SYS-Dateien werden nicht mehr unterstzt. Zweifellos ist die jetzige L”sung die bessere, denn es gibt ja nun schon mindestens ein Programm, das die ASSIGN.SYS-Datei bei der Installation automatisch anpažt, bzw. neuschreibt. Durch diese Žnderung entf„llt zum einen das CONFGDOS-Programm, zum anderen ist AMC-GDOS auch deutlich l„nger geworden. o Auch wenn es an keiner Stelle in der DR-Dokumentation deutlich herausgestellt wird, scheint es g„ngige Konvention zu sein, daž weder GDOS noch die Ger„tetreiber den Inhalt der Eingabe-Arrays ver„ndern drfen. Dadurch ergaben sich einige Žnderungen im NDC-Modus von AMC-GDOS. Die Eingabe-Arrays werden jetzt nicht mehr direkt von einem Koordinatensystem ins andere transformiert. AMC-GDOS legt eigene PTSIN und PTSOUT-Arrays an, in die die transformatierten Koordinaten geschrieben werden. o AMC-GDOS zeigt beim Booten die Pfaddefinition an, die es beim Parsen der ASSIGN.SYS-Datei gefunden hat. Dies ist als kleine Hilfe fr den Fall gedacht, daž ein Programm eine Meldung wie z.B. 'Kann SCREENFONTS nicht finden' ausgibt. TEIL 2 DOKUMENTATION Um die Dokumentation zum GDOS m”glichst effizient zu gestalten, w„hlte ich die in amerikanischen Computerfachbchern h„ufig verwendete Frage/Antwort-Form. ******* Was ist das VDI? VDI ist die Abkrzung fr Virtual Device Interface, was soviel heižt wie 'Virtuelle Ger„teschnittstelle'. Dahinter versteckt sich die Idee, daž alle graphischen Ein- und Ausgabeger„te gleichartig angesteuert werden sollen. Die Programme erfragen beim VDI einige wichtige Kenndaten fr das Ger„t, wie z.B. die Aufl”sung und die Anzahl der verfgbaren Farben, und k”nnen dann jedes beliebige Ausgabeger„t mit genau den gleichen Befehlen ansteuern. Eine Prozedur, die per VDI ein Bild auf den Nadeldrucker FX-85 ausgibt, kann dieses Bild ohne Žnderung im Programmtext auch auf einen Laserdrucker, eine Polaroid-Kamera oder einen Bildschirm ausgeben. Das VDI besteht aus den drei Komponenten: GDOS, Ger„tetreiber und Zeichens„tze. ******* Was ist das GDOS? GDOS (Graphic Device Operation System) ist sozusagen die Steuerungszentrale des VDI. Es empf„ngt die Mitteilungen (VDI-Aufrufe) der verschiedenen Programme und leitet sie an die betreffenden Ger„te weiter. Die zweite Aufgabe von GDOS ist, bei Bedarf Koordinaten- systemtransformationen durchzufhren. Die einzelnen Ger„tetreiber (Bildschirm, Drucker, usw.) kennen nur das Rasterkoordinatensystem. Die Umwandlungen vom normalisierten ins Rasterkoordinatensystem werden vom GDOS durchgefhrt. Leider ist das aber nur die halbe Wahrheit, denn an einigen Stellen mssen die Ger„tetreiber doch etwas vom verwendeten Koordinatensystem wissen: Immer wenn ein Treiber einen vertikalen Abstand als Parameter erwartet oder als Funktionsresultat zurckgibt (wie z.B. vertikaler Ellipsen- Radius), muž er nachsehen, ob das normalisierte Koordinaten- system verwendet wurde. Die Umrechung der Einheiten wird zwar vom GDOS durchgefhrt, aber leider wird eben auch die Position des Ursprungs bercksichtigt, und die ist im NDC-System eben in der unteren linken Bildschirmecke. Wenn also ein Treiber einen ABSTAND in einem der POINTS-Arrays benutzt, muž er gegebenfalls umrechnen. Im Grunde genommen handelt es sich dabei um einen Designfehler im VDI. Zus„tzlich zu den INTEGER- und POINTS-Arrays h„tte man ein weiteres DISTANCES-Array einfhren mssen. Die dritte Aufgabe von GDOS ist es, Zeichens„tze in den Speicher zu laden und wieder daraus zu entfernen. Was sich zun„chst so einfach anh”rt, entpuppt sich bei genauerem Hinsehen als ein Haufen Verwaltungsarbeit. Schliežlich soll ein Zeichensatz ja immer nur einmal im Speicher sein, auch wenn er von verschiedenen Workstations angefordert wurde. Aužerdem muž GDOS selbst„ndig feststellen, wann ein Zeichensatz von keiner Workstation mehr ben”tigt wird, denn sp„testens dann muž er aus dem Speicher entfernt werden. Nicht zuletzt wandelt AMC-GDOS alle Zeichens„tze vom Intel- ins Motorola-Format um, falls das n”tig ist. ******* Was ist eine PHYSIKALISCHE WORKSTATION? Eine physikalische Workstation ist die VDI-Bezeichnung fr ein tats„chlich (physikalisch) vorhandenes Ger„t - als ein Bildschirm, ein Drucker, oder auch ein Metafile. Virtuelle Workstations k”nnen nur auf dem Bildschirm ge”ffnet werden - Drucker und Dateien k”nnen nunmal schlecht von mehreren Programmen gleichzeitig benutzt werden. Die physikalische Bildschirm-Workstation wird beim Systemstart vom AES ge”ffnet. ******* Was ist eine VIRTUELLE WORKSTATION? Ein virtuelle Workstation ist die VDI-Bezeichnung fr ein nicht wirklich vorhandenes Ger„t. Eine virtuelle Workstation wird immer auf ein physikalisches Ger„t abgebildet. Da man virtuelle Workstations nur auf dem Bildschirm ”ffnen kann, handelt es sich bei dem Ger„t immer um den Bildschirm. Die Benutzung des Bildschirms von mehreren Programmen gleichzeitig ist auch nur deshalb sinnvoll, weil das AES mit seinen Fenster-Verwaltungs-Mechanismen Hilfsmittel zur Verfgung stellt, die verhindern, daž auf dem Bildschirm Chaos entsteht. Wenn man eine virtuelle Workstation ”ffnen m”chte, muž man dem VDI *immer* mitteilen, auf welchem Ger„t das geschehen soll. Dazu muž man das Handle der physikalischen Workstation kennen. Da das AES diese ge”ffnet hat, muž man das Handle auch beim AES erfragen. Dazu verwendet man den AES-Aufruf graf_handle. ******* Was ist ein GERŽTETREIBER? Ein Ger„tetreiber ist das Programm, das vom GDOS die VDI-Aufrufe des Anwenderprogramms empf„ngt und diese in eine grafische Ausgabe umsetzt. Oft h”rt man Sprche wie: 'Ich schreibe jetzt einen VDI-Ger„tetreiber'. Meistens waren sich die Urheber dieser Sprche wohl nicht so ganz ber die Konsequenzen im Klaren. Ein richtiger Ger„tetreiber ist n„mlich nicht mehr und nicht weniger als ein fast vollst„ndiges VDI - nur das GDOS fehlt. Eine zeitsparende M”glichkeit, einen Ger„tetreiber zu schreiben, ist es, sich von Atari das Object-File INDEP.LIB mit diversen Zutaten zu besorgen. Dieses Object-File enth„lt im Wesentlichen s„mtliche Ausgaberoutinen - wenn auch nur fr Drucker. Alle ger„teabh„ngigen Teile werden im Sourcecode mitgeliefert. Bitte beachten Sie aber, daž man mit dem 'Treiber-Baukasten' nur Ger„tetreiber fr matrixorientierte Drucker zusammenstellen kann. ******* Was ist ein GEM-Zeichensatz? Ein GEM-Zeichensatz ist zun„chst einmal eine Ansammlung von den Bitmustern der einzelnen Zeichen. Es handelt sich also um *keine* Vektorzeichens„tze. Am Anfang einer Zeichensatzdatei befindet sich der sogenannte Fontheader, der wichtige Zusatzinformationen ber den Zeichensatz enth„lt. Zun„chst die C-Definition des Fontheaders. Der Typ word ist als ein vorzeichenloser 16-Bit Integerwert definiert. typedef struct FNT_HDR{ word id; Nummer des Zeichensatzes word size; H”he der Zeichen in Point *1 char facename[32]; Name des Zeichensatzes *2 word ADE_lo; Ascii-Wert des ersten Zeichens word ADE_hi; Ascii-Wert des letztes Zeichens word top_dist; Abstand Topline-Baseline word asc_dist; Abstand Ascentline-Baseline word hlf_dist; Abstand Halfline-Baseline word des_dist; Abstand Descentline-Baseline word bot_dist; Abstand Bottomline-Baseline word wchr_wdt; Breite des breitesten Zeichens word wcel_wdt; Breite der Zelle des breitesten Zeiches word lft_ofst; linker Offset fr Kursivschrift word rgt_ofst; rechter Offset fr Kursivschrift word thckning; Grad der Fettschrift word undrline; Dicke der Unterstreichung word lghtng_m; Maske fr Hellschrift word skewng_m; Maske fr Kursivschrift word flags; Fontflags *3 char *hz_ofst; Zeiger auf die HZ-Offset-Tabelle *4 word *ch_ofst; Zeiger auf die Char-Offset-Tabelle *5 long fnt_dta; Zeiger auf die Bitmuster der Zeichen *6 word frm_wdt; Breite des Zeichensatzimages *7 word frm_hgt; H”he des Zeichensatzimages *8 struct FNT_HDR *nxt_fnt; Zeiger auf den n„chsen Zeichensatz } FNT_HDR; *1 Die Einheit Point ist ein Satzmaž. *2 Der eigentliche Name des Zeichensatzes wird in den ersten 16 Zeichen von 'facename' abgelegt. Sp„testens das 16.Zeichen muž ein Nullbyte sein. In den zweiten 16 Zeichen befindet sich die Klassifizierung des Zeichensatzes, die ebenfalls mit einem Nullbyte abschliežen muž. Beispiel: Hauptname: Helvetica Klassifizierung: Italic *3 Bit 0 Systemfont Bit 1 Horizontal-Offset-Tabelle existiert Bit 2 Zeichensatz ist im Motorola-Format Bit 3 Zeichensatz ist nicht proportional *4 Die Horizontal-Offset-Tabelle enth„lt fr jedes Zeichen des Zeichensatzes einen vorzeichenlosen 8-Bit-Wert, der bei der Zeichenausgabe mittels v_gtext oder v_justified *nach* der Ausgabe des Zeichens zur X-Koordinate des n„chsten Zeichens hinzuaddiert werden soll. Der Zeiger ist relativ zum Fontheader-Beginn zu verstehen. *5 Die Character-Offset-Tabelle enth„lt fr jedes Zeichen die X-Position innerhalb des Font-Images. Die Breite eines Zeichens kann man dadurch berechnen, daž man den Character-Offset des aktuellen Zeichens vom Character- Offset des im ASCII-Code nachfolgenden Zeichens subtrahiert. Beispiel:ch_width = *ch_ofst[ch+1] - *ch_ofst[ch]; Aus diesem Grund muž auch die Character-Offset-Tabelle immer einen Eintrag mehr enthalten, als der Zeichensatz Zeichen hat. Wie auch bei der Horizontal-Offset-Tabelle ist der Zeiger relativ zum Anfang des Fontheaders zu verstehen. *6 Um den Aufbau des Zeichensatz-Images zu verstehen, stellt man sich am besten vor, man wrde alle Zeichen des Zeichensatzes in Proportionalschrift nebeneinander ausgeben. Genau diese Aneinanderreihung von Bitmustern ist das Zeichensatzimage. Der Zeiger ist relativ zum Anfang des Fontheaders zu verstehen. *7 Die Breite (in Words!!!) des Zeichensatzimages. *8 Die H”he (in Pixel) des Zeichensatzimages. ******* Was ist das ASSIGN.SYS-File? Das ASSIGN.SYS-File ist eine ASCII-Datei, die bei jedem Systemstart vom GDOS gelesen wird. In ihr ist vermerkt, auf welchem Laufwerk und Pfad sich die Treiber und die Zeichens„tze befinden. Aužerdem enth„lt sie Informationen ber die vorhandenen Treiber und Zeichens„tze. Der Aufbau der ASSIGN.SYS-Datei: In der ersten Zeile befindet sich die (optionale) Pfaddefinition: PATH=C:\GEMSYS\ Der hier im Beispiel angegebene Pfad ist natrlich rein willkrlich gew„hlt. Danach folgen die Dateinamen der Ger„tetreiber: 01P SCREEN.SYS ; default 02P SCREEN.SYS ; low-res 03P SCREEN.SYS ; med-res 04P SCREEN.SYS ; high-res 21 FX80.SYS 31 META.SYS Bei der zweistelligen Nummer handelt es sich um die Identifikation des Ger„tetreibers. Diese Identifikation wird bei ™ffnen der *pkysikalischen* Workstation im ersten Element des work_in-Arrays bergeben. Nun ist aber nicht so, daž jedes Programm wissen mžte, welche ID's eingetragen sind, denn es gibt eine Definition der Zuordnung der Id's zu den Ger„tetypen: 01-10 Bildschirm 11-20 Plotter 21-30 Drucker 31-40 Metafile 41-50 Kamera (Polaroid System) 51-60 Grafiktablett Ein Programm, das einen Drucker ansteuert, sollte also versuchen, die Workstations mit den ID's 21-30 zu ”ffnen. Je nachdem, ob das zurckgegebene Handle gltig (>0) oder ungltig (<=0) ist, kann die so ge”ffnete Workstation zur Druckerausgabe verwendet werden. *ACHTUNG* Die Ger„te-ID ist *NICHT* identisch mit dem Handle. Es handelt sich dabei um zwei v”llig verschiedene Dinge. In diesem Zusammenhang bitte ich auch, die zweite Seite des Dokuments 'HOW TO USE GDOS' von Atari zu ignorieren. Alle Informationen auf der betreffenden Seite sagen leidiglich aus, wie das AES seine physikalische Workstation ”ffnet. Man darf die dort beschriebene Methode *NIEMALS* in eigenen Programmen benutzen. Doch zurck zum ASSIGN.SYS-File: Der Buchstabe 'P' hinter der Ger„te-ID besagt, daž der zugeh”rige Ger„tereiber nicht geladen werden muž, sondern schon im ROM befindet. Bei Ger„tetreibern, die geladen werden mssen, kann man anstelle des 'P' optional den Buchstaben 'R' eintragen. Der betreffende Treiber wird dann einmal geladen und bleibt resident im Speicher. Diese Option ist sehr wichtig fr Disketten-Benutzer, denn auf diese Weise kann man von einer speziellen Diskette booten, die alle Treiber und Zeichens„tze enth„lt. In den Zeilen zwischen den einzelnen Ger„tetreiber-Eintr„gen tr„gt man die Dateinamen der Zeichens„tze ein, die fr den jeweiligen Treiber bereitstehen. Dabei darf niemals mehr ein Zeichensatz pro Zeile eingetragen werden. Beachten Sie auch, daž Sie fr die verschiedenen Bildschirmaufl”sungen verschiedene Treiber eintragen mssen. Zeichens„tze, deren Dateinamen Sie ein 'R' mit nachfolgendem Leerzeichen voranstellen, werden beim Systemstart geladen und bleiben dann resident im Speicher. ****** Was ist ein Handle? Ein Handle ist ein 16-Bit Integerwert, der als Kennung fr die zu benutzende Workstation ben”tigt wird. Das GDOS leitet aus dem Handle ab, an welche Workstation der jeweilige VDI-Aufruf weitergeleitet werden soll. Das Workstation-Handle erhalten Sie als Rckgabewert, wenn Sie eine Workstation ”ffnen. Gltige Handles sind 16-Bit-Integerwerte > 0. ================================================================== Falls Sie Probleme mit AMC-GDOS haben oder Anregungen, so wenden Sie sich bitte an Atari Deutschland