home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Vectronix 2
/
VECTRONIX2.iso
/
FILES_07
/
CHAGALL.ZIP
/
CHAGALL
/
AMCGDOS.TXT
< prev
next >
Wrap
Text File
|
1989-05-10
|
17KB
|
401 lines
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