AMC-GDOS Version 3.10

               Release Notes und Dokumentation
            
            
               Copyright 1987/88 Arnd Beissner
                     
               Lizenz fr Atari Computer GmbH
               
                  


===================================================================

  *** Rechtliche Hinweise ***

  Sie drfen AMC-GDOS kostenlos auf Ihrem Atari-Computer fr 
  pers”nliche Zwecke nutzen, ebenso drfen 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 ausdrcklich 
  erwnscht. Die kostenlose Nutzung gilt ausschliežlich fr 
  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 Stackprfung, 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 endgltige 3er Version von 
AMC-GDOS. Vorab, fr 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 frheren CONFIG.SYS-Dateien werden nicht mehr unterstzt.
   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 drfen. 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 fr 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 Computerfachbchern h„ufig
verwendete Frage/Antwort-Form.

******* Was ist das VDI?

VDI ist die Abkrzung fr 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 fr das Ger„t, wie z.B.
die Aufl”sung und die Anzahl der verfgbaren 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 durchzufhren. Die einzelnen
Ger„tetreiber (Bildschirm, Drucker, usw.) kennen nur das
Rasterkoordinatensystem. Die Umwandlungen vom normalisierten
ins Rasterkoordinatensystem werden vom GDOS durchgefhrt. 
Leider ist das aber nur die halbe Wahrheit, denn an einigen
Stellen mssen die Ger„tetreiber doch etwas vom verwendeten
Koordinatensystem wissen: Immer wenn ein Treiber einen
vertikalen Abstand als Parameter erwartet oder als 
Funktionsresultat zurckgibt (wie z.B. vertikaler Ellipsen-
Radius), muž er nachsehen, ob das normalisierte Koordinaten-
system verwendet wurde. Die Umrechung der Einheiten wird
zwar vom GDOS durchgefhrt, aber leider wird eben auch die
Position des Ursprungs bercksichtigt, 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 einfhren mssen.

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 fr
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 fr 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 Verfgung
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 Sprche
wie: 'Ich schreibe jetzt einen VDI-Ger„tetreiber'. 
Meistens waren sich die Urheber dieser Sprche 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 fr Drucker. 
Alle ger„teabh„ngigen Teile werden im Sourcecode mitgeliefert.
Bitte beachten Sie aber, daž man mit dem 'Treiber-Baukasten'
nur Ger„tetreiber fr 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 fr Kursivschrift
    word    rgt_ofst;           rechter Offset fr Kursivschrift
    word    thckning;           Grad der Fettschrift
    word    undrline;           Dicke der Unterstreichung
    word    lghtng_m;           Maske fr Hellschrift
    word    skewng_m;           Maske fr 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 fr 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 fr 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 wrde 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 natrlich rein willkrlich
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 zurckgegebene Handle gltig (>0) oder
ungltig (<=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 zurck 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 mssen, 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 fr 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 fr den
jeweiligen Treiber bereitstehen. Dabei darf niemals mehr 
ein Zeichensatz pro Zeile eingetragen werden. Beachten Sie
auch, daž Sie fr die verschiedenen Bildschirmaufl”sungen
verschiedene Treiber eintragen mssen. 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 fr
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 Rckgabewert, wenn Sie eine Workstation
”ffnen. Gltige Handles sind 16-Bit-Integerwerte > 0.



==================================================================

Falls Sie Probleme mit AMC-GDOS haben oder Anregungen, so wenden
Sie sich bitte an Atari Deutschland