Markt&fTechnik mierer Datenstrukturen: odula-2-Format. $ auch für Basic- er-Programmierer. Amiga Datenstrukturen-Lexikon Paul Lukowicz Olaf Pfeiffer Das Nachschlagewerk für alle Programmierer Auflistung aller System-Datenstrukturen: Offsets, C-Format, Modula-Format. Wichtige Tips auch für Basic- und Assembler- Programmierer. CIP-Titelaufnahme der Deutschen Bibliothek Lukowicz, Paul: Amiga-Datenstrukturen-Lexikon : das Nachschlagewerk für alle Programmierer ; Auflistung aller System-Datenstrukturen: Offsets, C-Format, Modula-Format ; wichtige Tips auch für Basic- und Assembler-Programmierer / Paul Lukowicz ; Olaf Pfeiffer. — Haar bei München : Markt-u.-Technik-Verl., 1990 ISBN 3-89090-250-2 NE: Pfeiffer, Olaf Die Informationen in diesem Produkt werden ohne Rücksicht auf einen eventuellen Patentschutz veröffentlicht. Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt. Bei der Zusammenstellung von Texten und Abbildungen wurde mit größter Sorgfalt vorgegangen. Trotzdem können Fehler nicht vollständig ausgeschlossen werden. Verlag, Herausgeber und Autoren können für fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine Haftung übernehmen. Für Verbesserungsvorschläge und Hinweise auf Fehler sind Verlag und Herausgeber dankbar. Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien. Die gewerbliche Nutzung der in diesem Produkt gezeigten Modelle und Arbeiten ist nicht zulässig. »Commodore-Amiga« ist eine Produktbezeichnung der Commodore Büromaschinen GmbH, Frankfurt, die ebenso wie der Name »Commodore« Schutzrechte genießt. Der Gebrauch bzw. die Verwendung bedarf der Erlaubnis der Schutzrechtsinhaberin Amiga ist eine Produktbezeichnung der Commodore-Amiga Inc., USA Microsoft-C ist ein eingetragenes Warenzeichen der Microsoft Corporation, USA Lattice-C ist ein eingetragenes Warenzeichen der Lattice Corporation, USA Amiga-BASIC ist ein eingetragenes Warenzeichen der Microsoft Inc., USA M2.Amiga ist ein eingetragenes Warenzeichen der Firma Meier-Vogt, CH Modula-2/Amiga ist ein eingetragenes Warenzeichen der TDI Software Inc., Dallas, USA 15 14 3 222171098 765 4 3 2 |] 3 2 9 90 ISBN 3-89090-250-2 © 1990 by Markt& Technik Verlag Aktiengesellschaft, Hans-Pinsel-Straße 2, D-8013 Haar bei München/West-Germany Alle Rechte vorbehalten Einbandgestaltung: Grafikdesign Heinz Rauner Dieses Produkt wurde mit Desktop-Publishing-Programmen erstellt und auf der Linotronic 300 belichtet. Druck: Pustet, Regensburg Printed in Germany Kapitel 1 Kapitel 2 2.1 2.2 2.3 2.4 Kapitel 3 3.1 3.2 Kapitel 4 4.1 4.2 Kapitel 5 5.1 5.2 Kapitel 6 6.1 6.2 6.3 6.4 Kapitel 7 Fl 1-2 1.3 1.4 75 INHALTSVERZEICHNIS Vorwort Einleitung Hinweise zur Benutzung der Datenstrukturen Hinweise für C-Programmierer Hinweise für Modula-2-Programmierer Hinweise für Assembler-Programmierer Hinweise für Basic-Programmierer Die Exec-Library Wichtige Flags der Exec-Library Die Datenstrukturen der Exec-Library Die Intuition-Library Wichtige Flags der Intuition-Library Die Datenstrukturen der Intuition-Library Die Graphics-Library Wichtige Flags der Graphics-Library Die Datenstrukturen der Graphics-Library Die DOS-Library Spezielle Datentypen der DOS-Library Fehlermeldungen der DOS-Library Die DOS-Packets Die Datenstrukturen der DOS-Library Sonstige Libraries Die Diskfont-Library Die Expansion-Library Die Hardware-Library Die Resources-Library Die Workbench-Library 11 13 17 21 25 25 26 61 61 69 131 131 134 191 191 191 193 197 223 223 227 235 268 271 Kapitel 8 8.1 8.2 8.3 ANHANG Die Devices Das Audio-Device Das Clipboard-Device Das Console-Device Das Gameport-Device Das Input-Device Das Keyboard-Device Das Narrator-Device Das Parallel-Device Das Printer-Device Das Serial-Device Das Timer-Device Das TrackDisk-Device Andere Datenstrukturen der Devices Glossar Literaturverzeichnis A B C Abbildungsverzeichnis D Quick-Reference E Alphabetisches Verzeichnis der Datenstrukturen Stichwortverzeichnis 279 279 283 286 289 292 294 295 299 303 310 315 317 323 353 361 363 365 389 391 VORWORT Mit diesem Buch halten Sie kein »Lesebuch« im eigentlichen Sinn in den Händen. Vielmehr möchten wir es als ein Nachschlagewerk verstanden wissen, das immer in greifbarer Nähe zum Amiga stehen muß. Wer viel auf dem Amiga programmiert und dabei seine Möglichkeiten einigermaßen effizient ausnutzen will, Kommt um eine häufige Benutzung der Systemdatenstrukturen nicht herum. Bisher galt es hier Berge von Büchern zu wälzen, um im Endeffekt dann doch auf altbewährte Hackermethoden zurückzugreifen. Insbesondere dabei unterzog das sensitive Multitasking-System des Amiga die drei Reset-Tasten einem Dauerhärtetest! Da der Zuliefermarkt für Reset-Tasten schon seit langem überlastet ist, schrieben wir in weiser Vorraussicht dieses Buch. Uns schwebte von Anfang an ein Werk vor, das geballte und umfassende Informationen zur Anwendung der Systemdatenstrukturen in allen gängigen Programmiersprachen (»C«, Modula-2, Assembler und Basic) enthält. Natürlich gehört dazu mehr als eine reine Auflistung der Datenstrukturen und ihrer Komponenten. Denn die wahre Funktion und Bedeutung einer Datenstruktur wird meist nur anhand ihrer Stellung im Gesamtsystem verständlich. Darüber hinaus existieren noch eine Fülle von Konstanten, Flaggen und Befehlen, die man beim Umgang mit Datenstrukturen kennen muß. Unser Buch läßt hier kaum Fragen offen! Das größte Problem bei der Beschreibung der einzelnen Datenstrukturen bestand darin, Nützliches von Überflüssigem zu trennen. Wir hoffen nun, daß die unserer eigenen Programmiererfahrung entspringen- de Auswahl auch Sie überzeugt und den Guru von Ihnen fernhält. Abschließend danken wir dem »ungenannten Dritten«, der bei der Erstellung dieses Buches »ernsthaft« mitgemischt hat! Paul Lukowicz und Olaf Pfeiffer, im Januar 1990 EINLEITUNG Voraussetzung für das Einsetzen des »Stoffes« auf den folgenden Seiten ist, daß Sie ein Amiga- Programmierer sind, der nicht nur an der »Programmier-Oberfläche« kratzt und sich mit dem Durch- schnittlichen zufrieden gibt. Gehören Sie also zu denjenigen, die bestrebt sind, ihren Amiga auszureizen, dann dürften Ihnen ja auch die verwendeten drei großen »A« (Anglo-Amerikanischen Amigazismen) keine Probleme bereiten. Je weiter man in die Tiefen des Amiga vordringt, desto schwieriger wird es, diese zu umgehen, da sämtliche Definitionen und Kürzel (wie sollte es anders sein?) aus englischen Begriffen abgeleitet sind. Würde man versuchen, alles zu übersetzen, so käme man sehr schnell an den Punkt, wo nur noch Übersetzungen wie »Ursprungsebenen-Insektenvernichtungsmittel« (Source Level Debugger) möglich sind. Auf solche verzichten wir daher lieber gleich und halten uns da, wo wir es für verständlicher halten, an die entsprechenden »AA A«s. Stoßen Sie dennoch auf einen Begriff, der Ihnen nichts sagt, so schlagen Sie im Glossar nach. Rein theoretisch sollten dort alle »AA A«s (abgesehen von Begriffen wie Screen und Window) kurz erläutert sein. Bei der Fülle der Datenstrukturen des Betriebssystems ist es nicht möglich, die Funktion aller Felder einer jeden Datenstruktur durch Ausprobieren »herauszuhacken«. Daher konnten wir uns bei der Beschreibung nicht nur auf unsere Amiga-Programmiererfahrung verlassen, sondern mußten auch anderen Quellen (siehe Literaturverzeichnis) blind vertrauen. Obwohl wir vorwiegend die Original-Commodore-Referen- ce-Manuals sowie dokumentierte Listings verwendet haben, ist nicht auszuschließen, daß wir dabei eventuell vorhandene Fehler übernommen haben. An manchen Stellen, wo weder eine Beschreibung noch ein Kommentar in den Source-Codes aufzutreiben war, waren wir auf Vermutungen angewiesen, die dem Komponentennamen und/oder unserem Systemverständnis entsprangen. Dabei handelt es sich in erster Linie um »extrem« systeminterne Parameter, die für den Programmierer so gut wie bedeutungs- los sind. Stoßen Sie also in diesem Buch auf Begriffe wie »vermutlich«, »könnte« oder »hat wahrschein- lich mit ... zu tun«, dann ist dies nur als ein Hinweis und nicht als Tatsache zu betrachten. Wo nicht einmal Vermutungen möglich waren, haben wir als Zeichen unserer Ratlosigkeit drei Fragezeichen gesetzt. Für lehrreiche Hin- und Beweise sind wir jederzeit dankbar. Nun noch ein paar Worte zum Aufbau dieses Buches: Die Datenstrukturen sind nach Libraries und Devices in Kapitel zusammengefaßt und innerhalb dieser alphabetisch geordnet. Die Beschreibung einer Datenstruktur hat immer den gleichen Aufbau. Zunächst erfolgt jeweils eine komplette Auflistung der Datenstruktur. Von links nach rechts finden Sie dabei hintereinander den hexadezimalen und dezimalen Offset, das C-Format und abschließend das Modula-2-Format einer jeden Komponente der Datenstruk- tur. In der Kopfleiste steht zusätzlich hinter dem »C« das Include-File, in dem diese Datenstruktur definiert ist, und hinter Modula-2 der Name des Moduls, aus dem Modula-2-Programmierer diese Datenstruktur importieren können. Weicht das Assembler-Format der Datenstruktur in irgendeiner Form von der C-Version ab, so stehen diese Abweichungen direkt unter der Datenstruktur näher beschrieben. Vor der Beschreibung folgen noch die Referenzlisten. Aus der Datenstrukturenreferenz können Sie ersehen, welche Datenstrukturen diese Datenstruktur entweder selbst oder zumindest einen Adreßzeiger auf diese enthalten. Aus der Routinenreferenz können Sie erkennen, welche Systemroutinen auf diese zugreifen, wobei diese Listen natürlich keinen Anspruch auf Vollständigkeit erheben. Nach der Beschrei- bung der Datenstruktur als Gesamtes folgt eine nochmalige Auflistung aller Parameter im C-Format mit Angabe der Offsets und einer ausführlichen Beschreibung. Dabei versuchen wir, alle vordefinierten Konstanten und deren Bedeutung anzugeben. Falls die Bedeutung einer Komponente von dem Werteiner anderen abhängt (z.B. bei den Device-Befehlen), haben wir grundsätzlich alle Möglichkeiten angegeben. Nehmen wir in der Beschreibung Bezug auf andere Komponenten, so geschieht dies ebenfalls im »C«- Format. Modula-2-Programmierer können »Ihre« Syntax der Komponente aus der Auflistung der Datenstruktur entnehmen. Maßeinheiten gibt es eigentlich nur zwei, nämlich Pixel (oder Punkte) für Grö- ßenbeschreibungen am Bildschirm und Bytes für Speicherbereichangaben. Da die Datenstrukturen der Hardware-Library sich weitgehend auf Hardwareregister beziehen, haben wir auch diese ausführlich beschrieben. Somit beinhaltet dieses Buch zusätzlich eine recht genaue Hard- warebeschreibung. HINWEISE ZUR BENUTZUNG DER DATENSTRUKTUREN Um auf sprachspezifische Probleme genügend einzugehen, folgen nun vier Abschnitte, in denen auf Besonderheiten der Sprachen C, Modula-2, Assembler und Basic gesondert hingewiesen wird. Um Ihnen einen direkten Vergleich zu ermöglichen, haben wir ein kurzes Beispielprogramm geschrieben und es an alle vier Programmiersprachen angepaßt. Das Programm »HalbHellDemo« soll folgendes tun: 1. Öffnen eines Bildschirms im Extra-Halfbright-Modus (64 Farben). 2. Öffnen eines Fensters auf diesem Bildschirm. Dieses Fenster soll die untere Bildschirmhälfte einnehmen und nur über ein Close-Gadget verfügen (es kann also nicht verkleinert, vergrößert oder verschoben werden). 3. Zeichnen von 62 Rechtecken, wobei 31 Rechtecke im Fenster mit den Farben 1 bis 31 und 31 Rechtecke auf dem Bildschirm mit den Farben 33 bis 63 gezeichnet werden sollen (die Farbregister werden dabei nicht mit Werten belegt, es werden die Default-Farben verwendet). 4. Warten auf das Anklicken des Close-Gadgets. 5. Schließen des Fensters und des Bildschirms. Wie Sie wissen, wird zum Zeichnen die RastPort-Datenstruktur des Displayelementes benötigt, in dem gezeichnet werden soll. Das Programm »HalbHellDemo« ist insofern interessant, als der zum Bildschirm gehörige Rastport in der Screen-Datenstruktur eingebunden, also selbst enthalten ist. Die zum Fenster gehörende Rastport-Datenstruktur ist dagegen nicht in der Window-Datenstruktur eingebunden. In ihr steht nur ein Adreßzeiger auf die beim Zeichnen verwendete RastPort-Datenstruktur. Die verschiedenen Versionen von »HalbHellDemo« finden Sie in den folgenden vier Abschnitten. 2.1 Hinweise für C-Programmierer Da fast das gesamte Amiga-Betriebssystem in C geschrieben ist, bereitet die Anwendung der Systemda- tenstrukturen in dieser Sprache keine Schwierigkeiten. Die hier aufgelisteten Datenstrukturen entstam- men den Include-Files des Aztec-C-Compilers, sie unterscheiden sich aber nicht von den Original- Include-Files von Commodore. Falls Sie einen anderen Compiler benutzen (z.B. Lattice-C oder einen der PD-Compiler), kann es also höchstens vereinzelt Probleme mit dem Aufbau der Include-Directory geben. Sie müssen sich dann der Anleitung Ihrers Compilers bedienen, um die gesuchte Datenstruktur zu finden. Bei den meisten Flags können neben der von uns aufgelisteten Wertkonstanten auch noch die Bitnummer- konstanten verwendet werden. Der Name dieser Bitnummerkonstanten folgt aus dem Namen der entsprechenden Wertkonstanten durch Einsetzen eines »B« am Ende des Präfix (vor dem ersten Underbar »_«). Falls dort schon ein »F« (für Flag) steht, muß dieses gelöscht werden. /* Programm HalbHellDemo */ #include”intuition/intuition.h” #include”graphics/gfxbase.h” #include”graphics/view.h” struct IntuitionBase *IntuitionBase; struct GfxBase *GfxBase; struct Screen *OurScreen; struct Window *OurWindow; struct RastPort ?SerRPort, WinkPort: struct NewScreen OurNewScreen = { Da, 0% 320,256; 6; I EXTRA_HALFBRITE, CUSTOMSCREEN, NULL, “Extra-Halfbrite: Die Farben 32 - 63”, NULL, NULL 1b struct NewWindow OurNewWindow = { 0, 120; 3205230; Os. Al: CLOSEWINDONW, WINDOWCLOSE|SIMPLE_REFRESH, NULL, NULL, “Die Farben 0 - 31 im Fenster”, NULL, NULL, 050, 32052806; CUSTOMSCREEN main () { NE RL. RK VL, 92, farbe; /* Graphies-Library. öffnen */ GfxBase = if (GfxBase == NULL) exit(FALSE); /* Intvition-Library Sfrfnen *%/ IntuitionBase = if (GfxBase == NULL) exit(FALSE); J|* /* /* |* /* /* J*# /* IF /* /* /* IF /* /* /* /I* /* /* [* /* /* Benötigte Include-Files */ Verwendete Datenstrukturen */ NewScreen-Struktur anlegen */ LeftEdge, TopEdge */ Width, Height */ Depth */ DetailPen, BlockPen */ ViewModes */ ScreenFlags */ Font */ Title */ Gadgets, CustomBitmap */ NewWindow-Struktur anlegen */ LeftEdge, TopEdge */ Width, Height */ DetailPen, BlockPen */ IDCMPFlags */ WindowFlags */ FirstGadget, Checkmark*/ Title */ Screen, BitMap */ Min-, MinHeigth, Max-, MaxHeight */ Type */ (struct GfxBase *) OpenLibrary(“graphics.library”,0); (struct IntuitionBase *) OpenLibrary(“intuition.library”,0); /* Screen Öffnen */ QurScreen =. (struct Screen *) OpenScreen(&0urNewScreen); if (OurScreen == NULL) EXTITLFAÄLSEIS OurNewWindow.Screen = QurScreen; /* Adreßzeiger auf Screen holen */ /* Window Öffnen */ OurWindow = (struct Window *) OpenWindow(&0urNewWindow); if (OurWindow == NULL) EXIECFALSE): SerRPort = Aldurscreen->RastPrort); 7* RastPport ist. in Screen-Struktur ein- gebunden, also Adresse berechnen. */ WinRPort = OurWindow->RPort; /* Window-Struktur enthält Zeiger auf RastPort, also Adresse kopieren. */ farbe = 0; xıl= 5; yl= 15; /* Startwerte für Rechtecke festlegen */ x2 = 55; y2 = 55 do /* Zeichenschleife (alle Farben) */ Xbr=7 5 2y14F2,X227 8 252, SetAPen(WinRPort,++tfarbe); /* Zeichenfarbe für Fenster setzen */ RectFill(WinRPort,x1,yl,x2,y2); /* Rechteck im Fenster zeichnen */ SetAPen(ScrRPort,farbet32); /* Zeichenfarbe für Screen setzen */ RectFilllSerRPört,.x1,;41,X2,Y2); /* Rechteck im Screen zeichnen */ } while (farbe < 31); /* alle Farben durch ? */ WaitPort(OurWindow->UserPort); /* Auf Close-Gadget warten */ CloseWindow(OurWindow); /* Fenster schließen */ CloseScreen(OurScreen); /* Screen schließen */ CloseLibrary(GfxBase); /* Libraries schließen */ CloseLibrary(IntuitionBase); 2.2 Hinweise für Modula-2-Programmierer Die in diesem Buch vorhandenen Auflistungen der Datenstrukturen im Modula-2-Format entsprechen dem, das der M2Amiga-Compiler Version 3.3d der AtL AG verwendet. Eine Besonderheit dieses Compilers besteht in der Handhabung der Libraries. Normalerweise ist ein Zugriff auf eine Library, abgesehen von der Exec-Library, nur möglich, wenn diese zuvor durch die Routine OpenLibrary der Exec-Library geöffnet wurde. Nach Beendigung aller Zugriffe erfolgt dann eine Schließung der Library durch die CloseLibrary-Routine. Der M2 Amiga-Compiler nimmt uns diese Arbeit ab, da er durch die IMPORT-Listen nicht nur erkennt, welche Libraries geöffnet werden müssen, sondern das Öffnen und Schließen auch selbst übernimmt. An dieser Stelle sei auch gesagt, daß wir bei dem Adreßzeiger NULL nicht jedesmal das Modula-2-Format (NIL) dazuschreiben. Falls Sie es also noch nicht wissen sollten, merken Sie sich bitte: »C«-NULL = »Modula-2«-NIL. Betreffend der Datenstrukturen gilt grundsätzlich, daß neben dem eigentlichen Datenverbund auch ein Adreßzeiger auf ihn definiert ist. Der Name des Adreßzeigers ist fast der gleiche wie der der zugehörigen Datenstruktur, es wird lediglich die Endung Prr angehängt (z.B.: Window, WindowPtr). Die Definition der Flags ist ebenfalls immer einheitlich: In einer Datenstruktur finden Sie den BITSET- Typ, den Sie daran erkennen, daß er die Endung »Ser« hat. Um einzelne Flags setzen zu können, muß der zugehörige Aufzählungstyp ebenfalls importiert werden. Hat eine bestimmte Kombination von mehreren Bits eine gesonderte Bedeutung, so sind diese als Konstanten definiert. Beachten Sie also bitte besonders beim Setzen von Flags, ob es sich um einzelne Bits (Importieren des zugehörigen Aufzählungstyps genügt) oder Kombinationen von mehreren handelt (entsprechende Konstante muß extra importiert werden). Betrachten Sie als Beispiel dazu die NewWindow-Datenstruktur, in der der Datentyp Window- FlagSet verwendet wird. Wollen Sie einzelne Bits setzen, so reicht es, neben diesem Datentyp den zugehörigen Aufzählungstyp WindowFlags zu importieren. Nun hat aber darüber hinaus das gleichzei- tige Setzen der beiden Flags simpleRefresh und superBitMap eine eigene Bedeutung. Die Kombination dieser beiden Flags wird daher getrennt als die Konstante otherRefresh definiert. Wollen Sie diese verwenden, so muß sie ebenfalls importiert werden. Nun zu der Modula-2-Version des bereits in der Einleitung erwähnten Beispielprogrammes: MODULE HalbHel1Demo; FROM SYSTEM IMPORT ADR; (* Funktion: Berechnet einen Adreßzeiger auf ein Datenelement *) FROM Exec IMPORT WaitPort; (* Routine: Warten auf Ereignis *) FROM Intuition IMPORT OpenScreen, (* Funktion: Öffnet einen Bildschirm *) CloseScreen, (* Routine: Schließt einen Bildschirm *) NewScreen, (* NewScreen-Struktur *) ScreenPtr, (* Zeiger auf Screen-Struktur *) OpenWindow, (* Funktion: Öffnet ein Fenster *) CloseWindow, (* Routine: Schließt ein Fenster *) NewWindow, (* NewWindow-Struktur *) WindowPtr, (* Zeiger auf Window-Struktur *) IDCMPFlags, (* Aufzählungstyp der IDCMP-Flags *) IDCMPFlagSet, (* BITSET-Typ der IDCMP-Flags *) WindowFlags, (* Aufzählungstyp der Window-Flags *) WindowFlagSet, (* BITSET-Typ der Window-Flags *) ScreenFlagSet, (* BITSET-Typ der Screen-Flags *) customScreen; (* Kombination der ersten vier Bits aus ScreenfFlagSet, wird anstelle des Auf- zählungstypen ScreenFlags verwendet.*) FROM Graphics IMPORT ViewModes, (* Aufzählungstyp der View-Modi *) ViewModeSet, (* BITSET-Typ der View-Modi *) RastPortPtr, (* Zeiger auf RastPort-Struktur *) SetAPen, (* Routine: Zeichenfarbe setzen *) RectFill; (* Routine: Rechteck zeichnen *) CONST ScrTitle “Extra-Halfbrite: Die Farben 32 - 63”; WinTitle = “Die Farben 0 - 31 im Fenster”; VAR QurNewScreen : NewScreen; (* NewScreen-Struktur *) OurScreen » ScreenPtr; (* Zeiger auf Screen-Struktur *) OurNewWindow : NewWindow; (* Newwindow-Struktur *) OurWindow : WindowPtr; (* Zeiger auf Window-Struktur *) ScrRPort : RastPortPtr; (* Zeiger auf RastPort des Screens ”) WinRPort : RastPortPtr; (* Zeiger auf RastPort des Windows *) x1,x2 [0,4320]: (* Die obere linke und untere Rechte *) yl,y2 >-605,4.250.]% (* Ecke der zu zeichnenden Rechtecke. *) farbe +0,63 ]% (* Nummer eines Farbregisters *) BEGIN WITH OurNewScreen DO (* NewScreen-Struktur anlegen *) leftEdge := 0; topEdge =D) width = 320; height = 256; depth = 6; detailPen = 0; blockPen =]; viewModes := ViewModeSet{extraHalfbrite}; type = customScreen; font := NIL; defaultTitle := ADR(ScrTitle); gadgets := NIL; customBitMap := NIL; END; (* WITH OurNewScreen DO *) OurScreen := OpenScreen(OurNewScreen); (* Screen Öffnen *) IF OurScreen <> NIL THEN (* War Öffnen erfolgreich? *) (**** Da die RastPort-Struktur in der Screen-Struktur eingebunden ist, AR) (**** muß seine Adresse durch ADR() berechnet werden. EEEN) ScrRPort := ADR(OurScreen‘*.rastPort); (KFAKR “rRrK) WITH OurNewWindow DO (* NewWindow-Struktur anlegen *) leftEdge = 0; topEdge = 126; width ‘= 320% height := 130; detailPen = 0; blockPen := ]; idcempFlags := IDCMPFlagSet{closeWindow}; flags := WindowFlagSet{windowClose,simpleRefresh}; firstGadget := NIL; checkMark := NIL; title := ADR(WinTitle); screen := QurScreen; bitMap := NIL; minWidth is minHeight = 0; maxWidth := 320; maxHeight = 256; type := customScreen; END; (* WITH OQurNewWindow DO *) OurWindow := OpenWindow(OurNewWindow); (* Fenster Öffnen *) IF OurWindow <> NIL THEN (* War das Öffnen erfolgreich? *) (**%* Da die Window-Struktur nur einen Zeiger auf die RastPort-Struktur ER) (**** enthält, muß dieser nur kopiert werden. PN SE) WinRPort := OurWindow*.rPort; (KRAR “RrRrK) farbe := 0; (* Initialisieren der Variablen *) XL se 54. yL ve 1135 2 weiber V2 ve 555 REPEAT (* Schleife für Rechtecke *) INC(farbe); (* Farbregisternummer erhöhen *) LNEEX13733 (* Neue obere linke Ecke und *) LNEXYVEYS (* neue untere rechte Ecke des *) ENGLK2,83; (* aktuellen Rechtecks berechnen. *) ENETY22233 SetAPen(WinRPort,farbe); (* Window-Zeichenfarbe setzen *) RectFill(WinRPort,x1,yl,x2,y2); (* Rechteck im Window zeichnen *) SetAPen(ScrRPort,farbe+t32); (* Screen-Zeichenfarbe setzen *) RestFtiLitsckkPfort XL, y1232 235 (* Rechteck im Screen zeichnen *) UNTIL farbe = 31; (* Alle Farben von 1 - 31 durch? *) WaitPort(OurWindow*.userPort); (* Warten auf Systemnachricht des Fensters *) CloseWindow(OurWindow); (* Fenster schließen *) END; (* IF QurWindow <> NIL *) CloseScreen(OurScreen); (* Bildschirm schließen *) END; (* IF QurScreen <> NIL *) END HalbHellIDemo. Den Modula-2-Programmierern empfehlen wir an dieser Stelle dringend, das mächtige Modul-Konzept von Modula-2 auch auszunutzen und nicht immer wieder erneut Räder zu erfinden. So gibt es bereits einige Amiga-spezifische Modul-Bibliotheken wie die Amiga-Treasures oder File-Treasures, mit denen das aufwendige Hantieren mit den Datenstrukturen (fast) entfällt. Das Erstellen solcher Implementations- Module sollte das Ziel eines jeden Modula-2-Programmierers sein, um später beinochmaligem Gebrauch auf bereits Erarbeitetes sofort zurückgreifen zu Können. 2.3 Hinweise für Assembler-Programmierer In diesem Abschnitt wollen wir nur auf einige typische Beispiele (sowie Tücken und Gefahren) aus dem Leben eines Assembler-Programmierers hinweisen. Er soll einen allgemeinen Überblick über Besonder- heiten liefern, die es im Zusammenhang mit der Assembler-Programmierung auf dem Amiga zu beachten gilt. Wir beziehen uns bei den folgenden Angaben immer auf den Devpac-Assembler von HiSoft. Zunächst einmal zu so allgemeinen Dingen wie dem Öffnen und Schließen der Libraries und Devices. In Assembler sieht die Vorgehensweise wie folgt aus: OpenLib lea LibName,al ;‚ Adreßzeiger auf den Namen der Library. move,] #0,d0 : Versionsnummer der Library (0: No. egal). CALLEXEC OpenLibrary : Öffnen der Library. tst.] dO ; Vergleichen des Adreßzeigers mit 0. beq Exit : d0O = 0 : Das Öffnen war nicht erfolgreich. move.] d0O,_IntuitionBase ; Adreßzeiger auf die geöffnete Library. ;‚ Hier kann das eigentliche Programm stehen. CloseLib move.] IntuizZg,al ; Adreßzeiger auf die zu schließende Library. CALLEXEC CloseLibrary ; Library schließen. Exit rts : Programm verlassen. LibName dc.b *“intuition.library”,O ; Name der Library. “IntuitionBase dc.]! 0 ;‚ Adreßzeiger auf die Library. Um zum eigentlichen Thema dieses Buches zu kommen, nun etwas über den Gebrauch der Datenstruk- turen. In Assembler stimmt die Definition der Datenstrukturen in weiten Teilen mit dem Format der C- Definition überein. Wir haben uns daher entschlossen, das Assembler-Format nicht extra mit abzudruk- ken. Sie finden dafür am Ende einer jeden Datenstruktur Informationen, die Ihnen sagen, ob und, wenn ja, wie sich das Assembler-Format vom C-Format unterscheidet. Normalerweise beschränkt sich dies auf die Angabe eines Präfix. Setzen Sie dieses Präfix vor die Namen der einzelnen Komponenten im C-Format, so erhalten Sie den Namen im Assembler-Format. Nun zu der Vorgehensweise, wie Speicherplatz für eine Datenstruktur bereits im Listing freizuhalten ist: Die Länge einer jeden Datenstruktur (in Bytes) ist jeweils zusätzlich definiert. Um anzugeben, von welcher Datenstruktur Sie die Länge haben möchten, müssen Sie das Präfix der jeweiligen Datenstruktur mit der Endung SIZE versehen. Um Speicherplatz für eine BitMap-Datenstruktur (Präfix: bm_) bereits im Listing zu reservieren, kann man also folgendes einsetzen: OurBitMap ds.b bm_SIZE ; Speicherbereich der Größe einer BitMap-Daten- ; struktur freihalten. Abschließend das bereits in der Einleitung erwähnte Beispielprogramm, das den Umgang mit den einzelnen Komponenten der Datenstrukturen verdeutlichen soll. Das Beispiel ist so gewählt, daß einerseits auf eine in die Screen-Datenstruktur eingebundene RastPort-Datenstruktur zugegriffen wird, andererseits aber auch auf eine RastPort-Datenstruktur, von der in der Window-Datenstruktur lediglich ein Adreßzeiger steht. ; Programm: include exec/exec_lib.i Einbinden der benötigten include intuition/intuition.i Include-Files. include intuition/intuition_]ib.i include graphics/graphics_lib.i OpenIntLib Öffnen der Intuition-Library. ei; ] do Versionsnummer ist egal. lea IntName,al Zeiger auf den Library-Namen. CALLEXEC OpenLibrary ; Aufruf der Systemroutine. tt, dO Öffnen erfolgreich? beq ExitFinalis Nein: Abbrechen. move.] d0O,_IntuitionBase Ja: Zeiger merken. OpenGrafLlib Öffnen der Graphics-Library. ei; do Versionsnummer ist egal. lea GrafName,al Zeiger auf den Library-Namen. CALLEXEC OpenLibrary ; Aufruf der Systemroutine. ste] d0 Öffnen erfolgreich? beq ExitCloselnt Nein: Abbrechen. move.] d0O,_GfxBase Ja: Zeiger merken. OpenScr Öffnen eines Screens. move.] OurNewScreen,a0 Zeiger auf NewScreen-Struktur. CALLINT OpenScreen Aufruf der Systemroutine. Est do Öffnen erfolgreich? beq ExitCloseGraf Nein: Abbrechen. move,] d0,0urScreen Ja: Screen-Zeiger merken. ; *##*%*#* Adreßzeiger auf den RastPort des Screens berechnen: Die RastPort- REN ; *#%% Struktur ist in der Screen-Struktur eingebunden, daher muß zu der SURT ; *%%* Adresse der Screen-Struktur der Offset sc_RastPort (#84) hinzuge- RERE ; *#*%*% gezählt werden. ERRE addi.] #sc_RastPort,dO 4 Aıkrx “KKAX move.] 40, SEerRPort Zeiger auf RastPort merken. OpenWin | Öffnen eines Windows. move.] OurNewWindow,aO Zeiger auf NewWindow-Struktur. move.] OurScreen,nw_Screen(a0) Screen-Zeiger in NewWindow- Struktur auf eigenen Screen CALLINT OpenWindow setzen. tst.] d0 Öffnen erfolgreich? beq ExitCloseScr Nein: Abbrechen. move.] d0,0urWindow Ja: Window-Zeiger merken. move.] d0,a0 Zeiger wird in einem Adreß- HalbHel]Demo incdir”Ass:include/” Pfad zu den Include-Files. register benötigt. “rArr “AKRX KAAAXK AAAXK KAAKK KAARr Rects Den Adreßzeiger auf den RastPort des Window berechnen: Die Window- **%** Struktur enthält selbst nur einen Adreßzeiger auf die RastPort- FAR Struktur, der “nur” kopiert werden muß. Addiert man zu der Adresse **%*%* der Window-Struktur den Offset wd_RPort (#50), so erhält man die RER Adresse, an der der gewünschte Zeiger steht. RER move.] wd_RPort(a0),WinRPort “rıix%K Rechtecke ausgeben. addgq.b #l,farbe Nächste Farbe auswählen. addi.w #7 ,x1 Koordinaten der linken addi.w #1l,yl oberen Ecke setzen. addi.w #8,x2 Koordinaten der rechten addi.w #2,y2 unteren Ecke setzen. move.] WinRPort,al Zeiger auf Window-RastPort. move.b farbe,dO Die nächste Zeichenfarbe CALLGRAF SetAPen setzen. move.w x1,d0 Koordinaten der linken move.w yl,di oberen Ecke holen. move.w x2,d2 Koordinaten der rechten move.w y2,d3 unteren Ecke holen. CALLGRAF RectFill Rechteck auf Window ausgeben. move.] ScrRPort,al Zeiger auf Screen-RastPort. move.b farbe,dO Farbwert erneut holen und addi.b #$20,d0 32 addieren. CALLGRAF SetAPen Farbe setzen. move.w x1,d0 Koordinaten der linken move.w yl,di oberen Ecke holen. move.w x2,.d2 Koordinaten der rechten move.w y2,d3 unteren Ecke holen. CALLGRAF RectFill Rechteck auf Screen ausgeben. cmp.b #31,farbe . Alle’Farben (1-31) durch? bne Rects Nein: Also nochmal. WaitForAction move.] move.] CALLEXEC ExitLegalis move.] CALLINT ExitCloseScr move.] CALLINT ExitCloseGraf move.] CALLEXEC ExitCloselnt move.,] OurWindow,a0 wd_UserPort(a0),a0 WaitPort OurWindow,a0 CloseWindow OQurScreen,a0 CloseScreen _GfxBase,al CloselLibrary _IntuitionßBase,al Wait-State setzen (Warten : mit minimaler Rechenzeit). Zeiger auf Window holen. Zeiger auf UserPort (MsgPort) holen. Warten auf Systemnachricht. Vor Programmbeendigung Fenster, Bildschirm, Graphics-Library und Intuition-Library wieder CALLEXEC CloseLibrary ExitFinalts rts cnop 0,2 OurNewScreen OurNewWindow x1 yl x2 y2 farbe cnopb;2 _IntuitionßBase _GfxBase dc, dc; dc, dc. 0% dc. IC. de, dc IC, de. 00% de:, dc. dc. CH de die:. de, de, CH dc. dc, IC IC; de, a0, de dc. de, dc. GC 90% IC; dc. ae IC ae - — -—— z ıı UT zz z x zmıı zz —- - - --.-.-- To zz zz oxzııı = 320 256 6) 0 1 128 CUSTOMSCREEN 0 Scrlitle 0 0 126 320 130 0 1 CLOSEWINDOW WINDOWCLOSE!SIMPLE_REFRESH 0 0 WinTitle 0 0 0 0 320 256 CUSTOMSCREEN 15 55 33 ordnungsgemäß schließen. Programmende. Nachfolgende Adresse gerade? NewScreen-Datenstruktur: LeftEdge TopEdge Width Height Depth DetailPen BlockPen ViewModes: Type Font EXTRAHALFBRIGHT : Title Gadgets CustomBitMap NewWindow-Datenstruktur: LeftEdge ; TopEdge Width Height DetailPen BlockPen IDCMPFlags ; WindowFlags FirstGadget CheckMark ; Title Screen BitMap MinWidth MinHeight ; MaxWidth MaxHeight -Iype Startwerte für die linke obere und die rechte untere Ecke der zu Zeichnenden Rechtecke,. Startwert für Farbregister. Die nachfolgende Adresse muß gerade sein. Zeiger für Intuition-Library. Zeiger für Graphics-Library. OurScreen de: 7.0 ; Zeiger für Screen-Struktur. OurWindow dcs. 0 ; Zeiger für Window-Struktur. ScrRPort des... 0 ; Zeiger für RastPort-Struktur ; des Screens. WinRPort 0cz1.0 ‚ Zeiger für RastPort-Struktur : des Windows. ScrTitle de.b. *"Extra-Halfbrite: Die Farben 32 -163”,0 cnop 0,2 WinTitle dc.b “Die Farben 0 - 31 im Fenster”,O enoB.052 IntName dc.b *intuition.library”,0 E00. 052 GrafName dc.b “graphics.library”,O Abschließend noch ein paar warnende Worte zur Benutzung der Include-Files. In Assembler bestehen diese fast ausschließlich aus Offset-Tabellen, bei denen einer bestimmten Buchstabenfolge eine Adreß- distanz zugeordnet wird. Leider ist es beim Devpac-Assembler möglich, Systemroutinen aufzurufen, die es gar nicht gibt. Syntaktisch wird beispielsweise der Aufruf »CALLINT WritePixel« ohne Probleme (also ohne Fehlermeldung) geschluckt. Da es sich aber bei »WritePixel« nicht um eine Routine der Intuition-Library (CALLINT), sondern um eine der Graphics-Libraries (CALLGRAF) handelt, hatsoein Aufruf mehr oder weniger schwerwiegende Folgen. Je mehr Libraries geöffnet sind, desto »gefährlicher« wird die Programmierung. 2.4 Hinweise für Amiga-Basic-Programmierer Da in Amiga-Basic heterogene Datenstrukturen (RECORD-Verbunde in Modula-2, struct-Strukturen in C) grundsätzlich unbekannt sind, erweist sich der Datenstrukturzugriff hier als äußerst umständlich: Ausgehend von der Anfangs- bzw. Basisadresse eines Datensatzes, kann auf die einzelnen Komponenten über deren Offset mittels entsprechender PEEKx- und POKEx-Anweisungen zugegriffen werden. In dieser Hinsicht ähnelt die Vorgehensweise der Assemblerprogrammierung. Allerdings gibtees für Amiga- Basic keine Include-Dateien, in denen die Offsets und Flagswerte symbolisch aufbereitet sind. Dem Amiga-Basic-Programmierer bleibt deshalb nichts anderes übrig, als diese jedesmal in numerischer Form anzugeben. Dabei wird das vorliegende Buch sicher schnell zum unentbehrlichen Hilfsmittel werden! Zur Bereitstellung des Speicherplatzes für die von einem Amiga-Basic-Programm selbst benötigten Systemdatenstrukturen bieten sich zwei unterschiedliche Verfahren an: l. Statische Deklaration eines entsprechend großen Zahlenfelds mittels der DIM-Anweisung. 2. Dynamische Speicherbeschaffung durch Aufruf einer Systemroutine wie AllocMem aus »Exec« oder AllocRemember aus »Intuition«. Im weiter unten abgedruckten Amiga-Basic-Programm »HalbHellDemo« findet Methode 1 bei der Benutzung von NewScreen- und NewWindow-Datenstrukturen Verwendung. Natürlich ist in beiden Fällen umständliches POKEn zur Initialisierung der Datenstrukturen nötig. Zu beachten ist darüber hinaus die Tatsache, daß die in Systemdatenstrukturen verwendeten Zeichenketten durchweg mit einem Nullzeichen = CHR$(0) abgeschlossen werden müssen. Wie man die Amiga-Libraries in Amiga-Basic mittels der LIBRARY-Anweisung Öffnet und die einzelnen Systemroutinen danach durch CALL-Aufrufe anspringt, sollte bekannt sein. Weitere Tips und Hinweise zur Systemprogrammierung entnehmen Sie am besten Kapitel 6 des Amiga-Basic-Hand- buchs von Commodore. Viel Spaß also mit dem nachfolgenden Beispielprogramm und dem gesamten Buch! Benoetigte Systembibliotheken oeffnen und alle daraus verwendeten Funktionen mit Ergebnistyp und Parametern deklarieren. LIBRARY “exec.library” DECLARE FUNCTION WaitPort& (Port&) LIBRARY LIBRARY “graphics.library” EIBRARF "rntaition.lıbrary” DECLARE FUNCTION OpenScreend (NewScreend) LIBRARY DECLARE FUNCTION OpenWindow& (NewWindow&) LIBRARY “ “HalbHellDemo” : Amiga-BASIC-Version ScrTitle$ = “Extra-Halfbrite: Die Farben 32 - 63” + CHR$(O) EXTRAHALFBRITE% = 128 “ Flagswert fuer Extra-Halfbrite Modus CUSTOMSCREENA =: 15 ‘“ Typwert fuer Benutzer-definierten Bildschirm DIM OurNewScreen%(15) “ Laenge “NewScreen”-Datenstruktur = 32 Bytes BaaHsserr een "NEnScreen: -Datenstrüktur InItialisleren Fer ö OurNewScreenAdr& = VARPTR(OurNewScreen%(0)) * Basisadresse “NewScreen”-Struktur POKEW OurNewScreenAdr& + 0,0 ‘“ “LeftEdge” POKEW OurNewScreenAdr& + 2,0 “ *TopEdge” POKEW OurNewScreenAdr& + 4A, 320 ‘“ *Width” POKEW OurNewScreenAdr& + 6, 256 “ “Height” POKEW OurNewScreenAdr& + 8,6 “ “Depth” POKE OQurNewScreenAdr& + 10, 0 ‘ *DetailPen” POKE OurNewScreenAdr& + 11, 1 “ *BlockPen” POKEW OurNewScreenAdr& + 12, EXTRAHALFBRITE% “ “ViewModes” POKEW OurNewScreenAdr& + 14, CUSTOMSCREEN% * Type” POKEL OurNewScreenAdr& + 16, O " #FRont” POKEL OurNewScreenAdr& + 20, SADD(ScrTitle$) ‘“ *DefaultTlitle” POKEL OurNewScreenAdr& + 24, 0 “ Gadgets” POKEW OurNewScreenAdr& + 28, 0 “ *“CustomBitMap” OQurScreen& = OpenScreen&(VARPTR(OurNewScreen%(0))) “ Screen oeffnen |! IF OurScreen&=0 THEN END * Fehler beim Deffnen des Bildschirms ? ScrRPort& = QurScreen& + 84 “ Adresse des Screen-Rastports bestimmen WinTitle$ = “Die Farben 0 - 31 im Fenster” + CHR$(O) CLOSEWINDOW& = 512 “ IDEMP-Flagge fuer Meldungen des Close-Gadget Klickens WINDOWCLOSE& = 8 “ Fenster mit Close-Gadget ausstatten SIMPLEREFRESH& = 64 “ Simple-Refresh Methode fuer das Fenster DIM OurNewWindow&(12) ° Laenge “NewWindow”-Datenstruktur = 48 Bytes IS EDER EREeTE "NewScreen” -Datenstruktüur initiealisIeren »+-+- > + ne ; OurNewwWwindowAdr& = VARPTR(OurNewWindow&(0)) “ Basisadresse “NewWindow” POKEW OurNewWindowAdr& + 0,0 “LeftEdge” POKEW OurNewWindowAdr& + 2, 126 “ “TopEdge” POKEW OurNewWindowAdr& + 4, 320 “"AuNTdcn” POKEW OurNewWindowAdr& + 6, 130 “Height” POKE OurNewWindowAdr& + 8,0 “DetailPen” POKE OurNewWindowAdr& + 9, 1 “BlockPen” POKEL OurNewWindowAdr& + 10, CLOSEWINDOW& “ "IDCMPFlags” POKEL OurNewWindowAdr& + 14, WINDOWCLOSE&+SIMPLEREFRESHA APleds” POKEL OurNewWindowAdr& + 18, 0 “ *FirstGadget” POKEL OurNewWindowAdr& + 22, 0 “CheckMark” POKEL OurNewWindowAdr& + 26, SADD(WinTitle$) "Title POKEL OurNewWindowAdr& + 30, OurScreenä “ “Screen” POKEL OurNewWindowAdr& + 34, 0 “BitMap” POKEW OurNewWindowAdr& + 38, 0 “ *MinWidth” POKEW OurNewWindowAdr& + 40, 0 “ “MinHeight” POKEW OurNewWindowAdr& + 42, 320 “ “MaxWidth” POKEW OurNewWindowAdr& + 44, 256 “MaxHeight”POKEW OurNewWindowAdr& + 46, CUSTOMSCREEN% ‘“ “Type” OurWindow& = OpenWindow&(VARPTR(OurNewWindow&(0))) “ Fenster oeffnen |! IF OurWindow&=0 THEN “ Fehler beim Oeffnen des Fensters ? CALL CloseScreen(QOurScreend) : END “ ja -> Bildschirm wieder schliessen END IF WinRPort& = PEEKL(OurWindow&+50) “ Adresse des Window-Rastports bestimmen farbe% = 0 “ Initialisierung der Variablen xıl% = 5 yl% = 15 x2% = 55 : 2% = 55 WHILE farbe%<32 “ Schleife für Rechtecke farbe% = farbe% + 1 “ Farbregisternummer erhoehen x1l% = x1% + 7 “neue obere ]Jinke Ecke und yl% = yl% + 1 “neue untere rechte Ecke des x2% = x2% + 8 “ aktuellen Rechtecks berechnen y2%A = y2% +2 CALL SetAPen(WinRPort&,farbe%) “ Window-Zeichenfarbe setzen CALL RectFill(WinRPort&,x1%,y1%,x2%,y2%) “ Rechteck im Window zeichnen CALL SetAPen(ScrRPort&,farbe%+32) “ Screen-Zeichenfarbe setzen CALL RectFill(ScrRPort&,x1%,y1%,x2%,y2%) “ Rechteck im Screen zeichnen WEND QurWinPort& = PEEKL(OurWindow&+86) “ Zeiger auf Userport bestimmen Msg& = WaitPort&(OurWinPort&) “ auf Klicken des Close-Gadgets warten CALL CloseWindow(OurWindowä) “ Fenster schliessen CALL CloseScreen(OurScreenä) “ Bildschirm schliessen END DIE ExEcC-LiBRARY Die Exec-Library ist die »Basis-Library« des Amiga-Betriebssystems. Sie ist für das Multitasking und die Verwaltung anderer Libraries, Devices und Ressourcen zuständig. Eine Besonderheit dieser Library ist, daß sie immer geöffnet ist (man kann also Exec-Funktionen benutzen, ohne vorher die Library explizit öffnen zu müssen). 3.1 Wichtige Flags der Exec-Library Die Memory-Flags Diese Flags bestimmen die Eigenschaften eines Speicherbereiches. Sie werden an alle Routinen zur Speicherallokierung übergeben und werden in allen Datenstrukturen benutzt, die Speicherbereiche beschreiben (in Modula-2 sind sie in dem Aufzählungstyp MemRegs definiert, benutzt werden sie dann als MemRegset). C Modula-2 Dez Beschreibung MEMF_ PUBLIC public | l _ Der Speicher kann von anderen Tasks benutzt werden. In der aktuellen Version jedoch bedeu- tungslos. MEMF_CHIP chip 2 _ Der Speicherbereich soll im Chip-RAM liegen. MEMF_FAST fast 4 Der Speicherbereich soll im Fast-RAM liegen. MEMF_CLEAR memClear 65536 Der Speicherbereich soll beim Allokieren gelöscht (mit Nullen gefüllt) werden. MEMF _LARGEST _ largest 131072 Es soll der größtmögliche zusammenhängende Speicherblock der angegebenen Art alloziert werden. 3.2 Die Datenstrukturen der Exec-Library Modula-2 (Exec) oe C (exec/devices.h) struct Device Device = { RECORD struct Library dd_Library; library:Library; ; END; Assembler Verwenden Sie die identische Library-Datenstruktur. Datenstrukturenreferenz »Clipboard« : IOClipboard. »Exec« : IORequest, IOStdRegq. »Printer« : lIOPrinter, IODRPRea. Routinenreferenz »Exec« : AddaDevice, RemDevice. 1___> Beschreibung Diese Prozedur beschreibt ein Device. Wie der Definition zu entnehmen ist, ist sie mit einer Library- Datenstruktur identisch. dd Library 0x0000 (0) Eine normale Library-Datenstruktur, die das Device beschreibt. ExecBase om C (exec/exechbase.h) Modula-2 (Exec) Hex Den struct ExecBase ExecBase = RECORD { 0 struct Library LibNode; libNode:Library; 34 UWORD SoftVer; softVer:CARDINAL; 36 - WORD LowMemChkSum; lowMemChkSum:INTEGER,; 38 ULONG ChkBase; chkBase:LONGCARD; 42 APTR ColdCapture; coldCapture: ADDRESS; 46 APTR CoolCapture; coolCapture: ADDRESS; 50 APTR WarmCapture; warmCapture: ADDRESS; 54 APTR SysStkUpper; sysStkUpper: ADDRESS; APTR SysStkLower; sysStkLower: ADDRESS; Offset C (exec/execbase.h) Dez Hex 003E 0042 0046 004A O04E 0052 0054 0114 0118 O1IC 0120 0122 0124 0126 0127 0128 012A 012C 0130 0134 0138 013C 0140 0142 0150 O15E O16C 017A 0188 0196 01A4 01B2 0202 0212 0213 0214 62 276 280 284 288 290 292 294 295 296 298 300 304 308 312 316 320 322 336 350 364 378 392 406 420 434 514 530 531 532 ULONG MaxLocMem; APTR DebugEntry; APTR DebugData; APTR AlertData; APTR MaxExtMem; UWORD ChkSum; struct IntVector IntVects[16]; struct Task *ThisTask; ULONG IdleCount; ULONG DispCount; UWORD Quantum; UWORD Elapsed; UWORD SysFlags; BYTE IDNestCht; BYTE TDNestCnt; UWORD AttnFlags; UWORD AttnResched; APTR ResModules; APTR Task TrapCode; APTR TaskExceptCode; APTR TaskExitCode; ULONG TaskSigAlloc; UWORD TaskKTrapAlloc; struct List MemLbist; struct List ResourceL ist; struct List DeviceList; struct List IntrList; struct List LibList; struct List PortLäist; struct List TaskReady; struct List TaskWait; struct SoftIntList SoftInts[5]; LONG LastAlert[4]; UBYTE VBlankFrequency; UBYTE PowerSupplyFrequency; struct List SemaphorelLbist; Modula-2 (Exec) maxLocMem:LONGCARDB; debugEntry: ADDRESS; debugData: ADDRESS; alertData: ADDRESS; maxExtMem: ADDRESS; chkSum:CARDINAL; intVects:IntFlags IntVector; thisTask:TaskPtr; idleCount: LONGCARD; dispCount:LONGCARD; quantum:CARDINAL; elapsed:CARDINAL; sysFlags:CARDINAL; idNestCnt:Byte; tdNestCnt:Byte; attnFlags:AttnFlagSet; attnResched:CARDINAL; resModules: ADDRESS; task TrapCode:PROC; taskExceptCode:PROC; taskExitCode:PROC; taskSigAlloc:LONGSET, taskTrapAlloc:BITSET,; memlist:List; resourceList:List; deviceList:List; intrList:List; lıbList:List; portList:List; taskReady:List; taskWait:List; softInts: ARRAY [0..4] OF SoftIntList; lastAlert: ARRAY [0..3] OF LONGINT; vBlankFrequency:UByte; powerSupplyFrequency:UByte; semaphoreList:List; Offset C (exec/execbase.h) Modula-2 (Exec) 0222 546 APTR KickMemfPtr; kickMemPtr: ADDRESS; 0226 550 APTR KickTagPir; kick TagPtr: ADDRESS; 022A | 554 APTR KickCheckSum; kickCheckSum:LONGCARD; 022C | 558 UBYTE ExecBaseReserved[10]; execBaseReserved: ARRAY [0..9] OF BYTE; 0238 568 UBYTE ExecBaseNewReserved[20]; | execBaseNewReserved: ARRAY [0..19] OF BYTE; }; END; Assembler Syntax: Der erste Parameter (LibNode) ist nicht definiert. Datenstrukturenreferenz »PrtBase«: PrinterData. Routinenreferenz »Exec«: FindTask. »ExecSupport«: CreateTask, DeleteTask. F7> Beschreibung Die globale Basis-Datenstruktur von »Exec«, die die wichtigsten Sprungvektoren und Zustandsvariablen beinhaltet. Unüberlegte Veränderungen in dieser Datenstruktur haben immer nur ein Ziel: die Zerstörung aller im RAM befindlichen Daten. I LibNode 0x0000 (0) Eine eingebundene Library-Datenstruktur, die die Exec- Library beschreibt. J SoftVer 0x0022 (34) Die Versionsnummer des Kickstarts. 3 LowMemChkSum 0x0024 (36) Zur Zeit noch unbenutzt. I ChkBase 0x0026 (38) Das Komplement der Adresse der ExecBase-Datenstruktur. Es wird zur Prüfung der Position der ExecBase beim Reset benutzt und zur Position addiert. „J ColdCapture 0x002A (42) Hier kann die Adresse einer Routine, die am Anfang eines Resets ausgeführt wird, eingetragen werden. Beim Ein- sprung beinhaltet das Adreßregister A5 die Rücksprung- adresse. Dieser Vektor wird von der Reset-Routine automa- tisch auf NULL gesetzt. I CoolCapture 0x002E (46) Wie ColdCapture, wird allerdings später aufgerufen. Dieser Adreßzeiger wird nicht von der Reset-Routine gelöscht. I WarmCapture 0x0032 (50) Noch nicht benutzt. I SysStkUpper 0x0036 (54) Die untere Adresse des Systemstacks. Ü Nummer SysStkLower 0x003A (58) MaxLocMem 0x003E (62) DebugEntry 0x0042 (66) DebugData 0x0046 (70) AlertData 0x004A (74) MaxExtMem 0x004E (78) ChkSum 0x0052 (82) IntVects 0x0054 (84) ThisTask 0x0114 (276) IdleCount 0x0118 (280) DispCount 0x011C (284) Interrupt Serieller Interrupt Die obere Adresse des Systemstacks. Die obere Grenze des Chip-RAM. Die Einsprungsadresse des Debuggers. Sie können hier die Adresse Ihrer eigenen Debug-Prozedur oder des Debuggers eintragen. Interne Daten für den Debugger. Interne Daten die für Alerts benutzt werden. Die Adresse der oberen Grenze der Speichererweiterung oder NULL falls keine vorhanden ist. Eine Prüfsumme über die Felder SoftVer bis MaxExtMem der ExecBase-Datenstruktur. Bei Veränderung eines dieser Felder muß diese Summe neu berechnet werden. Ein Array von IntVector-Datenstrukturen, die die Handler für die 15 möglichen Prozessorinterrupts beschreiben. Die einzelnen Felder stehen für folgende Interrupts: Ein Adreßzeiger auf die Task-Datenstruktur des momentan aktiven Tasks. Ein interner Zähler. Ein Zähler der nach jeder Taskumschaltung inkrementiert wird. Ende der Übertragung eines Diskblocks Soft-Interrupt Interrupt am CIA A Copper-Interrupt Vertikal Blank Interrupt. Wird ausgelöst, wenn der Rasterstrahl die Zeile O passiert. Über diesen Interrupt wird auch das Task-Switching gesteuert. Wird vom Blitter nach Beendigung eines Jobs ausgelöst. Wird vom Audiokanal 0 ausgelöst. Wird vom Audiokanal 1 ausgelöst. Wird vom Audiokanal 2 ausgelöst. Wird vom Audiokanal 3 ausgelöst. Wird durch serielle Eingabe ausgelöst. Zur Synchronisation der Diskette. Interrupt am CIAB. Kann softwaremäßig ausgelöst werden. NMI Quantum 0x0120 (288) Elapsed 0x0122 (290) SysFlags 0x0124 (292) IDNestCnt 0x0126 (294) TDNestCnt 0x0127 (295) [1 AttnFlags 0x0128 (296) Modula-2 AFF_68010 AFF_68020 AFF_68881 m68010 m68020 m68881 AttnResched 0x012A (298) ResModules 0x012C (300) TaskTrapCode 0x0130 (304) TaskExceptCode 0x0134 (308) TaskExitCode 0x0138 (312) TaskSigAlloc 0x013C (316) TaskTrapAlloc 0x0140 (320) Die Anzahl von »Zeitquanten«, die dem aktiven Task zur Verfügung stehen. Die Anzahl der seit dem Einschalten des Task bereits abge- laufenen Zeitquanten. Diverse Systemflags. Jedesmal, wenn Disable aufgerufen wird, wird dieser Zähler inkrementiert, wenn Enable aufgerufen wird, wird er dekre- mentiert. Ein Interrupt wird nur dann zugelassen, wenn dieser Zähler -1 ist. Jedesmal, wenn Forbid aufgerufen wird, wird dieser Zähler inkrementiert, wenn Permit aufgerufen wird, wird er dekre- mentiert. »Taskswitching« findet nur dann statt, wenn dieser Zähler —1 ist. Gibt an, welche (Co-)Prozessoren verfügbar sind. Beschreibung Der Motorola MC68010. Der Motorola MC68020. Der Coprozessor MC68881. Wörtliche Übersetzung: »Aufmerksamkeit verschoben«. Ein Adreßzeiger auf eine Liste der residenten Module. Sie werden beim Reset aufgerufen. Ein Adreßzeiger auf den Code, der aufgerufen wird, wenn ein Prozessortrap auftritt. Diese Adresse wird von dem gerade aktiven Task dann übernommen, wenn das Task keinen eigenen Trapcode hat. Ein Adreßzeiger auf den Code, der aufgerufen wird, wenn in einem Task eine Exception auftritt. Diese Routine wird von dem gerade aktiven Task nur dann übernommen, falls sie keinen Exceptioncode hat. Ein Adreßzeiger auf den Code, der aufgerufen wird, wenn der Task den Prozessor verliert (durch das Multitasking ausgeschaltet wird). Diese Adresse wird von dem gerade aktiven Task dann übernommen, wenn der Task keinen eige- nen Exitcode hat. Die allokierten Signale des aktuellen Tasks Die allokierten Traps des aktuellen Tasks [ MemList 0x0142 (322) ResourceList 0x0150 (336) DeviceList 0x015E (350) IntrList 0x016C (364) LibList 0x017A (378) PortList 0x0188 (392) LibList 0x0196 (406)TaskReady TaskWait 0x01A4 (420) SoftInts 0x01B2 (434) LastAlert 0x0202 (514) VBlankFrequency 0x0212 (530) VBlankFrequency 0x0213 (531) PowerSuppiyFrequency SemaphoreList 0x0214 (532) KickMemPtr 0x0222 (546) KickTagPtr 0x0226 (550) KickCheckSum 0x022A (554) ExecBaseReserved 0x022C (558) Eine Liste (erzeugt durch eine eingebundene List-Daten- struktur), in der die freien Speicherbereiche verzeichnet sind. Eine Liste (erzeugt durch eine eingebundene List-Daten- struktur) aller Resource-Datenstrukturen, durch List-Daten- strukturen verkettet. Eine Liste (erzeugt durch eine eingebundene List-Daten- struktur) der DeviceList-Datenstrukturen aller offenen Devices. Durch eine eingebundene List-Datenstruktur erzeugte Liste aller Interrupts. Durch eine eingebundene Zist-Datenstruktur erzeugte Liste der Library-Datenstrukturen aller geöffneten Libraries. Durch eine eingebundene List-Datenstruktur erzeugte Liste aller Messageports. Eine Liste (erzeugt durch eine eingebundene List-Daten- struktur) aller Tasks, die im »Ready«-Zustand sind, also auf ihren Anteil der Prozessorzeit warten. Eine Liste (erzeugt durch eine eingebundene List-Daten- struktur) aller Tasks, die im »Wait«-Zustand sind, also kei- nen Anteil der Prozessorzeit beanspruchen, weil sie auf ein Signal warten. In diesem Feld (erzeugt durch eine eingebundene List-Da- tenstruktur) stehen Listen von /nterrupt-Datenstrukturen der Soft-Interrupts nach Priorität geordnet (-32 im Feld 0, —16 im Feld 1, 0 im Feld 2, 16 im Feld 3, 32 im Feld 3). Ein Adreßzeiger auf einen Zwischenspeicher für Alert-Da- ten, die von der Reset-Routine geholt werden. Die Bildwiederholfrequenz (in der PAL-Version 50Hz). Die Frequenz der Netzspannung (in der PAL- Version 50 Hz). Durch eine eingebundene List-Datenstruktur erzeugte Liste aller Semaphore-Datenstrukturen. Ein Adreßzeiger auf eine MemList-Datenstruktur, die den Speicher beschreibt, der beim Reset für Systemzwecke allo- kiert wird. Ein Adreßzeiger auf eine Resident-Tabelle. Die Prüfsumme des Kickstarts. Ein privater Speicherplatz für »Exec«. [J ExecBaseNewReserved 0x0238 (568) Interrupt Assembler Datenstrukturenreferenz Routinenreferenz L___> Beschreibung Noch ein privater Speicherplatz für »Exec«. om C (exec/interrupts.h) Modula-2 (Exec) Hex Dez struct Interrupt Interrupt = [ RECORD 0000 0 struct Node is_Node; node:Node; 000E 14 APTR is_Data; data: ADDRESS; 0012 18 VOID (*is_Code)(); code:PROC, 0016 22 }; END; Syntax: Strukturname = IS. Definition der Parameter in Versalien. »Exec«: ExecBase. »Intuition«: IntuitionBase. »Resources«: DiskResource, DiskResourceUnit. »Exec«: AddIntServer, Cause, RemIntServer, SetIntVector. »Resources«: AddlICRVector, RemICRVector. Diese Datenstruktur wird zur Definition eines Interrupt-Handlers bzw. -Servers benutzt. Für jeden der 16 Hardware-Interrupts kann es nur einen Handler geben. Die Interrupt-Datenstrukturen der Default- Handler finden Sie in der ExecBase-Datenstruktur. „1 is_Node 0x0000 (0) I is Data 0x000E (14) I is Code 0x0012 (18) IntVector Assembler Datenstrukturenreferenz Routinenreferenz Eine Node-Datenstruktur, die zur Einbindung des Servers in eine Liste dient. Pri enthält die Priorität des Servers. Ein Adreßzeiger auf privaten Datenbereich der Interrupt- Routine. Wird beim Interruptaufrufin dem Adreßregister Al an die Routine übergeben. Ein Adreßzeiger auf den auszuführenden Code. Beim Hand- ler muß dieser mit RTE, beim Server mit RTS enden. Syntax: Strukturname = IV. Definition der Parameter in Versalien. Keine. Keine. C (exec/interrupts.h) struct IntVector { Modula-2 (Exec) IntVector = RECORD APTR iv_Data; VOID (*iv_Code)Ü; struct Node *iv_Node; IF data: ADDRESS; code:PROCG; node:NodePtr; END; Beschreibung Diese Datenstruktur wird Exec-intern benutzt, um einen Interrupt-Handler zu definieren. Dieser wird beim Auftreten eines Interrupts zuerst aufgerufen. Er sichert die Register und ruft nacheinander die Server auf. I iv_Data 0x0000 (0) Ein Adreßzeiger auf einen privaten Datenbereich der Be- handlungsroutine. Dieser Adreßzeiger wird beim Auftreten eines Interrupts im Adreßregister Al übergeben. I iv_Code 0x0004 (4) UI iv_Node 0x0008 (8) Ein Adreßzeiger auf die Behandlungsroutine. Ein Adreßzeiger auf die Node-Datenstruktur des ersten Ele- mentes der Liste der Server. |ORequest struct IORequest { struct Message io_Message; struct Device *io_Device; Modula-2 (Exec) IORequest = RECORD message:Message; device:DevicePtr; struct Unit *io_Unit; unit:UnitPtr; UWORD io_Command; command:CARDINAL; UBYTE io_Flags; flags:IOFlagSet; BYTE io_Eıror; error:Byte; }; END; Assembler Strukturname = /O Syntax: Definition der Parameter in Versalien. Datenstrukturenreferenz »Audio«: IOAudio. »Exec«: lIOStdReg (indirekt). »Timer«: lOTimer. Routinenreferenz »Exec«: AbortIO, ChecklO, CloseDevice, DoIO, OpenDevice, SendlO. > Beschreibung Diese Datenstruktur dient zur Befehls- und Informationsübergabe an und von Devices. Die meisten Devices verwenden zur Kommunikation eine erweiterte Version, die /[OStdReg-Datenstruktur, die ihrererseits noch zusätzlich um weitere Device-spezifische Felder erweitert ist. Eine solche Datenstruk- tur wird beim Öffnen eines Device initialisiert. 1 io_Message 0x0000 (0) „1 io_Device 0x0014 (20) „J io_Unit 0x0018 (24) I io_Command 0x001C (28) C CMD_INVALID CMD_RESET CMD_READ CMD_WRITE CMD_UPDATE CMD_CLEAR CMD_STOP CMD_START CMD_FLUSH CMD_NONSTD Modula-2 invalid reset read write update clear stop start flush nonstd Eine eingebundene Message-Datenstruktur, die von den Devices benötigt wird, um nach der Beendigung der Befehls- ausführung eine Antwort zu schicken. Ein Adreßzeiger auf eine Device-Datenstruktur, die das Device beschreibt. Das Feld wird beim Öffnen der Device von »Exec« initialisiert. Dies istein Device-spezifisches Feld, das einen Adreßzeiger auf ein Unit enthält. Das wird normalerweise eine allgemei- ne »Exec«-Unit-Datenstruktur sein. Bei der Console-Device steht hier aber beispielsweise die Adresse einer ConUnit- Datenstruktur. Hier steht der Befehl, der an das Device geschickt wird. Neben den Device-spezifischen Befehlen, die in den ent- sprechenden Kapiteln behandelt werden, gibt es folgende Standardbefehle, die als Konstanten definiert sind. Beschreibung Ein Befehl, der von dem Device nicht beantwortet werden muß. Einen Reset am Device durchführen, es also mit den Defaultwerten initialisieren. Veranlaßt das Device, eine Anzahl von Bytes in den Datenpuffer zu lesen. Veranlaßt das Device, eine Anzahl von Bytes aus dem Datenpuffer zu schreiben. Veranlaßt das Device, den Inhalt aller internen Puffer auf das physikalische Gerät zu schreiben. Löscht alle internen Puffer des Device. Unterbricht alle Aktionen des Device. Setzt die durch CMD_STOP unterbrochene Aktion fort. Veranlaßt das Device, alle IO/Requests zu unterbrechen und Fehlermeldungen zurückzugeben. Alle Device-spezifischen Befehle sind als CMD_NONSTD + x (mit x >= 0) definiert. „1 io_Flags 0x001E (30) 5 - Einige Flags, die den Status des Device bzw. befehlsspezifi- sche Optionen bestimmt. Die unteren vier Bit sind für »Exec« reserviert, während die oberen Device-spezifisch sind. Der einzige vordefinierte Wert ist: C Modula-2 Dez Beschreibung IO_QUICK quick 0 Den Request asynchron ausführen, also nicht auf die Erfolgs- oder Fehlermeldung warten. U io_Error 0x001F (31) Hier steht nach der Befehlsausführung die Fehlermeldung als Long-Zahl. Die Bedeutung der Meldung ist von Device zu Device verschieden. Sie finden die Device-spezifischen Fehlerwerte in den entsprechenden Abschnitten. IOStdReq Hex Dez | struct IOStdReq IOStdReq = { RECORD 0000 0 struct Message io_Message; message:Message; 0014 20 struct Device *io_Device; device:DevicePtr; 0018 24 struct Unit *io_Unit; unit:UnitPtr; 001C 28 UWORD io_Command; command:CARDINAL; O01E 30 UBYTE io_Flags; flags:IOFlagset; O0O1F 31 BYTE io_Error; error:Byte; 0020 32 ULONG i10_Actual; actual: LONGCARD; 0024 36 ULONG io_Length; length/LONGCARD; 0028 40 APTR io_Data; data: ADDRESS; 002€ 44 ULONG ı1o_Offset; offset: LONGCARD; 0030 48 I END; Assembler Syntax: Strukturname = /O Definition der Parameter in Versalien, die Größe der Datenstruktur steht in /[OSTD_SIZE. Datenstrukturenreferenz »Audio«: IOAudio. »Intuition«: IntuitionBase. »Narrator«: lONarrator. »Parallel«: lOParallel. »Serial«: IOSerial. »Trackdisk«: lIOTrackDisk. Routinenreferenz »ExecSupport«: CreateStdlIO, DeleteStalO. Beschreibung Dies ist eine Erweiterung der oben beschriebenen /ORequest-Datenstruktur. Die ersten sechs Felder von IOStdRegq bilden eine /ORequest-Datenstruktur. Eine um weitere Device-spezifische Felder erweiterte IOStdReg-Datenstruktur wird zum Öffnen und Betreiben der meisten Devices benötigt. I io_Message 0x0000 (0) 1 io_Device 0x0014 (20) I io_Unit 0x0018 (24) I io_Command 0x001C (28) U io_Flags 0x001E (30) I io_Error 0x001F (31) „J io_Actual 0x0020 (32) 3 io_Length 0x0024 (36) I io_Data 0x0028 (40) I io_Offset 0x002C (44) Eine eingebundene Message-Datenstruktur, die von den Devices benötigt wird, um nach der Beendigung der Befehls- ausführung eine Antwort zu schicken. Ein Adreßzeiger auf eine Device-Datenstruktur, die das Device beschreibt. Das Feld wird beim Offnen der Devices von Exec ınitialisiert. Dies ist ein Device-spezifisches Feld, das einen Adreßzeiger auf ein Unit enthält. Das wird normalerweise eine allgemei- ne »Exec«-Unit-Datenstruktur sein. Bei dem Console-Devi- ce steht hier aber z.B. die Adresse einer ConUnit-Daten- struktur. Über dieses Feld stehen die aus der JORequest-Datenstruk- tur bekannten Kommandos zur Verfügung. Diese Flags sind mit denen aus der /ORequest-Datenstruktur identisch. Hier steht nach der Befehlsausführung die Fehlermeldung als Long-Zahl. Die Bedeutung der Meldung ist von Device zu Device verschieden. Sie finden die Device-spezifischen Fehlerwerte in den entsprechenden Abschnitten. Nach der Ausführung eines Befehls finden Sie hier die Anzahl der betroffenen (z.B. geschriebenen) Bytes. Hier wird an das Device die Anzahl der Bytes, die von dem Befehl betroffen werden sollen, übergeben. Der Wert —1 bedeutet oft »alles« (was immer das auch im Einzelfall heißen mag). Ein Adreßzeiger auf den Datenpuffer. Dies muß ein vom Benutzer allokierter Speicherbereich der richtigen Größe sein. Gibt einen Device- und befehlsspezifischen Offset (z.B. Anfangsblock bei dem Trackdisk-Device) an. Library om C (exec/libraries.h) Modula-2 (Exec) extern struct Library Library = { RECORD 0000 0 struct Node lib_Node; node:Node; 000E 14 UBYTE lib_Flags; flags:LibFlagsSet; 000F 15 UBYTE lib_pad; pad:BYTE; 0010 16 UWORD lib_NegsSize; negSize:CARDINAL; 0012 18 UWORD lib_PosSize; posSize:CARDINAL; 0014 20 UWORD lib_ Version; version:CARDINAL; 0016 22 UWORD lib_Revision; revision: CARDINAL; 0018 24 APTR lib_IdString; idString: ADDRESS; 001€ 28 ULONG lib_Sum; sum:LONGCARD; 0020 32 UWORD lib_OpenCht; openCnt:CARDINAL; 0022 34 }; END; Assembler Syntax: Strukturname = LIB Definition der Parameter in Versalien, wobei lib_Node nicht definiert ist. Datenstrukturenreferenz »Dos«: DosLibrary. »Exec«: Device, ExecBase. »Graphics« : GfxBase. »Intuition«: IntuitionBase. »PrtBase« : DeviceData. »Resources«: DiskResource, MiscResource. Routinenreferenz »Exec«: AddLibrary, CloseLibrary, MakeLibrary, OldOpenLibrary, OpenLibrary, RemLibrary, SetFunction, SumLibrary. ____> Beschreibung Diese Datenstruktur enthält alle Informationen, die »Exec« zur Verwaltung einer Library braucht. Sie wird beim Erstellen einer neuen Library mit der Routine MakeLibrary automatisch von »Exec« mit den richtigen Werten initialisiert. U lib_Node 0x0000 (0) Eine eingebundene Node-Datenstruktur, die zur Integrie- rung der Library in die Liste der Systemlibraries dient. U lib_Flags 0x000E (14) Diese Flags definieren den Zustand einer Library. Hier ist eine Kombination der folgenden Werte (Bits) möglich: C Modula-2 Beschreibung LIBF_SUMMING summing Es gibt einen Task, der gerade die Checksumme berechnet. LIBF_CHANGED changed Es wurden eine oder mehrere Funk- tionen der Library verändert. LIBF_SUMUSED sumUsed Veranlaßt einen Reset, falls ein Prüfsummenfehler auftritt. LIBF_DELEXP delExp Die Library soll geschlossen werden, I Iib_Pad 0x000F (15) I lib_NegSize 0x0010 (16) 4 lib_PosSize 0x0012 (18) „1 lib_Version 0x0014 (20) „1 lib_Revision 0x0016 (22) „4 Iib_IdString 0x0018 (24) 4 Iib_Sum 0x001C (28) I lib_OpenCnt 0x0020 (32) List struct List sie wird aber von einem anderen Task benutzt. Das Schließen wird ver- schoben. Ein schnuckeliges Füllbyte. Dieses Wort gibt die Größe der Sprungtabelle für die Routi- nen der Library in Bytes an. Dieses Wort gibt die Größe der Daten in Bytes an. Hier steht die Versionsnummer der Library. Sie wird beim Öffnen überprüft. Hier steht die Überarbeitungsnummer der Library. Ein Adreßzeiger auf den Namen (als nullterminierte Zei- chenkette) der Library. Dieser Name wird zum Öffnen benutzt (z.B. »dos.library«). Hier steht die Checksumme der Library, die mit der SumLi- brary-Routine berechnet wird. Dieses Feld gibt an, wie viele Tasks diese Library für sich geöffnet hat. List = C (exec/lists.h) Modula-2 (Exec) | RECORD struct Node *lh_Head; head:NodePtr; 0 4 struct Node *lh_Tail; tail:NodePtr; 8 struct Node *lh_TailPred; tailPred:NodePtr; 12 UBYTE Ih_Type; UBYTE Ih_pad; 14 k type:NodeType; pad:BYTE; END; Assembler Datenstrukturenreferenz Routinenreferenz ____ > Beschreibung Syntax: Strukturname = LH Definition der einzelnen Parameter in Versalien. »Exec«: »Graphics« : »Intuition«: »KeyMap«: »Resources«: »Workbench«: »Exec«: »ExecSupport«: ExecBase, MsgPort, SoftIntList, Task. GfxBase, LayerInfo. IntuitionBase. KeyMapResource. . DiskResource. FreelList. AddHead, AddTail, Enqueue, Insert, ObtainSemaphore, ReleaseSemaphoreList, RemHead. NewList. Diese Datenstruktur dient als Header für Listen, die aus Node-Datenstrukturen aufgebaut sind. Die »Nodes« sind oft in andere Datenstrukturen eingebunden, die die eigentlichen Elemente der Liste sind. Sie dienen lediglich zur Verknüpfung der Elemente (siehe Node-Datenstruktur). Ein Adreßzeiger auf die List-Datenstruktur ist die Kennung einer Liste, die an diverse Listenroutinen übergeben wird. QJ Ih_Head 0x0000 (0) I Ih_Tail 0x0004 (4) I Ih_TailPred 0x0008 (8) 4 Ih_Type 0x000C (12) C NT_UNKNOWN NT_TASK NT_INTERRUPT NT_DEVICE NT_MSGPORT NT_MESSAGE NT_FREEMSG NT_REPLYMSG NT_RESOURCE NT_LIBRARY Ein Adreßzeiger auf die erste Node-Datenstruktur der Liste. Dieses Feld ist immer NULL. Ein Adreßzeiger auf die letzte Node-Datenstruktur der Liste. Dieser Wert enthält Informationen über die Elemente der Liste. Er sollte identisch mit den entsprechenden Werten der Type-Felder aus den Node-Datenstrukturen der Liste sein. Modula-2 Dez unknown task interrupt device msgPort message freeMsg replyMsg resource library Beschreibung Die Liste enthält unbekannte Elemente. Die Liste enthält Task-Datenstrukturen. Die Liste enthält Interrupt-bezogene Datenstrukturen. Die Liste enthält DeviceList- Datenstrukturen. Die Liste enthält MsgPort- Datenstrukturen. Die Liste enthält Messages. Die Liste enthält nur eine Message. Enthält eine Message, die gerade beantwortet wurde und an den Absender zurückgeht. Die Liste enthält Resources. Die Liste enthält Library- Datenstrukturen. C Modula-2 Dez Beschreibung NT_MEMORY memory 10 Dies ist eine Speicherliste. NT_SOFTINT softInt 11 Die Liste enthält die /ntVector- Datenstrukturen der Soft-Interrupts. NT_FONT font 12 Die Liste enthält Font-Daten. NT_PROCESS process 13 Die Liste enthält Process- Datenstrukturen. NT_SEMAPHORE semaphore 14 Die Liste enthält Semaphore- Datenstrukturen. NT_SIGNALSEM | signalSem 15 Liste enthält SignalSemaphore- Datenstrukturen. Wenn Sie die Listen bzw. die Nodes für Ihre eigenen Zwecke benutzen, dann können Sie auf die Initialisierung dieses Feldes verzichten. Falls Sie Exec-Listen bearbeiten, kann eine fehlende Initalisie- rung manchmal zu Problemen führen. 4 Ih_pad 0x000D (13) Ein einsames Füllbyte. MemChunk Offset C (exec/memory.h) Modula-2 (Exec) struct MemChunk MemChunk = { RECORD struct MemChunk *mc_Next; next:MemChunkPtr; ULONG mc_Bytes; bytes: LONGCARD; b END; /* Freier Speicherblock */ Assembler Syntax: Strukturname = MC. Definition der Parameter ın Versalien. Datenstrukturenreferenz »Exec«: MemHeader. Routinenreferenz Keine. L_.__> Beschreibung Eine Reihe solcher Datenstrukturen bilden zusammen mit einer MemHeader-Datenstruktur, die als Kopf dient, eine Liste freier Speicherbereiche. Eine MemChunk-Datenstruktur steht am Anfang eines freien Speicherbereiches und beinhaltet einen Verkettungszeiger auf den nächsten Bereich sowie die Größe des Speicherbereichs. I mc_Next 0x0000 (0) Hier steht ein Adreßzeiger auf die nächste MemChunk- Datenstruktur in der Liste oder NULL. UI mc _Bytes 0x0004 (4) Dieses Feld gibt die Länge des Speicherbereiches an, der direkt hinter diesem Langwort beginnt. MemeEntry Modula-2 (Exec) C (exec/memory.h) struct MemEntry MemEntry = { RECORD union CASE :INTEGER OF { ULONG meu_Reags; APTR meu_Addr; } me_Un; ULONG me_Length; }; | 1:regs:MemRegSet | 2:addr: ADDRESS END; length:;LONGCARD; END; Assembler Syntax: Struktumame = ME meu_Reqs —> ME _REOS meu_Addr —> ME_ADDR me_Length—> ME LENGTH Datenstrukturenreferenz »Exec«: Memliist. Routinenreferenz Keine. > Beschreibung Als Elementeines Arrays beschreibt diese Datenstruktur am Ende einer MemList-Datenstruktur einen der Speicherbereiche, die alloziert werden sollen (siehe MemList-Datenstruktur). Vor dem Aufruf von AllocEntry muß diese Datenstruktur die Anforderungen an den zu allozierenden Speicherbereich ent- halten, nach einer erfolgreichen Allozierung finden Sie dort die Adresse des allozierten Speicher- bereiches. I meu_Reqs 0x0000 (0) Vor dem Aufruf von AllocEntry stehen hier die Flags, die die Anforderungen an den Speicher angeben (siehe »Die Memo- ry-Flags«). I meu_Addr 0x0000 (0) Hier steht nach einer erfolgreichen Allozierung die Adresse des allozierten Speicherbereiches. I me_Length 0x0004 (4) In diesem Feld wird die Länge des zu allokierenden Spei- cherbereiches in Byte angegeben. MemHeader one C (exec/memory.h) Modula-2 (Exec) struct MemHeader MemHeader = { RECORD 0000 0 struct Node mh_Node; node:Node; 000C 14 UWORD mh_Attributes; attributes:MemTypeSet; 0010 16 struct MemChunk *mh_First; first:MemChunkPitr; 0014 | 20 APTR mh_Lower; lower: ADDRESS; 0018 24 APTR mh_Upper; upper: ADDRESS; 001C 28 ULONG mh _Free; free: LONGCARD; 0020 32 I END; Assembler Syntax: Strukturname = MH Definition der Parameter in Versalien, wobei mh_Node nicht definiert ist. Datenstrukturenreferenz Keine. Routinenreferenz »EXec« : Allocate, Deallocate. _____ > Beschreibung Mit Hilfe dieser Datenstruktur und den Allocate- und Deallocate-Routinen können Sie Ihren eigenen Speicherbereich, den Sie einmal mit AllocMem alloziert haben, auch selbst verwalten. Sie ist der Kopf einer Liste von zusammenhängenden, freien Speicherbereichen, von denen jeder von einer MemChunk- Datenstruktur eingeleitet wird. Mit Allocate und Deallocate können Sie Speicherbereiche aus Ihrer Liste allozieren und wieder freigeben. UI mh_Node 0x0000 (0) Eine eingebundene Node-Datenstruktur, mit deren Hilfe Sie mehrere Speicherlisten verketten können. I mh_Attributes 0x000C (14) Einige Flags, die die Eigenschaften des Speicherbereiches beschreiben (siehe »Die MemoryFlags«). 1 mh_MemChunk 0x0010 (16) Hier steht ein Adreßzeiger auf den ersten freien Speicher- bereich (oder genauer auf die MemC'hunk-Datenstruktur, die ihn einleitet). U mh_Lower 0x0014 (20) Dieses Feld beinhaltet die unterste Adresse des gesamten, in der Liste enthaltenen Speicherbereiches. 3 mh_Upper 0x0018 (24) Die oberste Adresse des gesamten, in der Liste enthaltenen Speicherbereiches. U mh_Free 0x001C (28) Die Größe des in der gesamten Liste enthaltenen freien Speicherbereiches (also die Summe über alle MemC'hunks) der Liste. MemtList om C (exec/memory.h) Modula-2 (Exec) Hex Dez struct MemlList Memlist = { RECORD 0000 0 struct Node ml_Node; node:Node; 000E 14 UWORD ml_NumeEntries; numEntries:CARDINAL; 0010 16 struct MemEntry mI_MEI[1]; (*me:ARRAY [O..munEntries-1] OF MemEntry;*) 0018 24 1: END; Assembler Syntax: Strukturname = ML Datenstrukturreferenz Routinenreferenz L__..> Beschreibung Definition der einzelnen Parameter in Versalien, wobei mi_Node nicht definiert ist. Keine. »Exec«: AllocEntry, FreeEntry. Mit Hilfe des dieser Datenstruktur nachfolgenden Arrays von MemEntry-Datenstrukturen, kann man mit einem Aufruf von AllocEntry mehrere verschiedene Speicherbereiche allozieren und später wieder mit FreeEntry freigeben. Die Beschreibung der einzelnen Speicherbereiche steht in den MemEntry-Daten- strukturen (siehe MemEntry-Datenstruktur). Dort stehen nach einer erfolgreichen Allozierung auch die Adressen der allozierten Speicherblöcke. 4 mi_Node 0x0000 (0) u „J mli_NumeEntries 0x000E (14) I mi_ME{[1] 0x0010 (16) Dies ist eine eingebundene Node-Datenstruktur, mit deren Hilfe man mehrere MemList-Datenstrukturen verketten kann. Dieses Feld wird sowohl von AllocEntry als auch von FreeEntry ignoriert. Hier steht die Anzahl der nachfolgenden MemEntry-Daten- strukturen. Das erste Element des Arrays von MemEntry-Datenstruktu- ren (die anderen folgen direkt danach). Message KT C (exec/ports.h) Modula-2 (Exec) Hex Dez struct Message Message = { RECORD struct Node mn_Node; node:Node; struct MsgPort *mn_ReplyPort; replyPort:MsgPortPtr; UWORD mn_Length; length:CARDINAL; }; END; Assembler Syntax: Strukturname = MN Definition der einzelnen Parameter in Versalien, wobei mn_Node nicht extra definiert ist. Datenstrukturenreferenz »Audio«: IOAudio. »Clipboard«: IOClipboard, SatisfyMsg. »Dos«: DosPacket, FileHandle, StandardPacket. »Exec«: IORequest, IOStdReg. »Graphics«: TextFont. »Intuition«: IntuiMessage. »Printer« : IODRPRegq, IOPrinter. »Resources«: DiskResourceUnit. »Workbench«: WBStartup. Routinenreferenz »Exec«: PutMsg, ReplyMsg. _ > Beschreibung Diese Datenstruktur dient zur Übermittlung von Nachrichten zwischen Tasks und Prozessen. Eine Message-Datenstruktur steht normalerweise am Anfang einer anderen Datenstruktur, die die eigentliche Nachricht darstellt. Manchmal wird auch die Adresse der eigentlichen Nachricht in das Name-Feld der Node-Datenstruktur eingetragen. U mn_Node 0x0000 (0) Eine eingebundene Node-Datenstruktur, die das Verketten von mehreren Message-Datenstrukturen (z.B. in der Warte- schleife eines Messageports) ermöglicht. 3 mn_ReplyPort 0x000E (14) Die Adresse des Messageports, an den die Antwort von der Routine ReplyMsg geschickt wird. 4 mn_Length 0x0012 (18) Hier wird die Länge der eigentlichen Nachricht in Bytes eingetragen. MinList Dez struct MinList { b Assembler Datenstrukturenreferenz Routinenreferenz > Beschreibung C (execllists.h) Modula-2 (Exec) struct MinNode *milh_Head; struct MinNode *mlh_Tail; struct MinNode *mlh_TailPred; Minlist = RECORD head:MinNodePtr; tail:MinNodePtr; tailPred:MinNodePtr; END; Syntax: Strukturname = MLH Definition der einzelnen Parameter in Versalien. »Exec«: SignalSemaphore. »Graphics«: LayerlInfo. Keine. Die MinList-Datenstruktur ist eine gekürzte Version der List-Datenstruktur. Sie wird immer dann an Stelle der List-Datenstruktur als Listenheader benutzt, wenn keine Angabe über den Typ der Elemente notwendig ist. Die Elemente der Liste werden dann über MinNode-Datenstrukturen statt über Node- Datenstrukturen verkettet. I mih_Head 0x0000 (0) 3 mih_Tail 0x0004 (4) I mih_TailPred 0x0008 (8) MinNode Ein Adreßzeiger auf die erste MinNode-Datenstruktur der Liste. Dieses Feld ist immer NULL. Ein Adreßzeiger auf die letzte MinNode-Datenstruktur der Liste. C (exec/nodes.h) Modula-2 (Exec) struct MinNode | MinNode = RECORD struct MinNode *mIn_Succ; succ:MinNodePtr; b struct MinNode *mIn_Pred; pred:MinNodePtr; END; Assembler Syntax: Strukturname = MLN Definition der einzelnen Parameter in Versalien. Datenstrukturenreferenz »Exec«: MinList, SemaphoreRequest. Routinenreferenz »Exec«: AddTail, Enque, Insert, Remove. ° Beschreibung Dies ist eine vereinfachte Node-Datenstruktur. Sie kann zusammen mit der MinList-Datenstruktur zur Bildung von Listen benutzt werden. MinList und MinNode können immer dann anstelle von List und Node benutzt werden, wenn die Typen-, Prioritäts- und Namensangaben nicht benötigt werden. 4 miIn_Succ 0x0000 (0) Hier steht ein Adreßzeiger auf die Node-Datenstruktur des nächsten Elements der Liste. 4 min_Pred 0x0004 (4) Hier steht ein Adreßzeiger auf die Node-Datenstruktur des Vorgängerelements. MsgPort Offset Modula-2 (Exec) Hex Dez struct MsgPort MsgPort = { RECORD 0000 0 struct Node mp_Node; node:Node; 000E 14 UBYTE mp_Flags; CASE flags:MsgPortAction OF | signal: 000F 15 UBYTE mp_SigBit; sigBit:UByte; 0010 16 struct Task *mp_SigTask; sıgTask:TaskPtr; | softint: pad0:BYTE,; softInt:InterruptPtr; | ignore: pad1:BYTE; pad2:ADDRESS END; 0014 20 struct Lis mp_Msglbist; msgLbist:List; 0022 34 I; END; Assembler Syntax: Strukturname = MP Definition der einzelnen Parameter in Versalien, wobei mp Node nicht extra definiert ist. Datenstrukturenreferenz »ConUnit«: ConUnit. »Dos«: DosPacket, FileHandle, Process. »Exec«: ExecBase, Message, Semaphore, Unit. »Intuition«: Preferences, Window. »PrtBase«: PrinterData. »Workbench«: WBStartup. Routinenreferenz »Exec«: FindPort, GetMsg, Procure, PutMsg, RemPort, Vacate, WaitPort. »ExecSupport«: CreatePort, DeletePort, CreateExtIO, CreateStdlO. Diese Datenstruktur bildet die Grundlage für die Kommunikation zwischen verschiedenen Elementen des Multitasking. Sie definiert einen »Empfänger« (Messageport), an den Nachrichten in Form von Message-Datenstrukturen geschickt werden können. Ankommende Messages werden in einer Liste an den Port gehängt. Die erste Nachricht in der Liste kann mit der Routine GetMsg geholt und aus der Liste entfernt werden. Bei Ankunft einer Nachricht wird an den inmp_SigTask eingetragenen Task (falls er zu einem Task gehört) ein Signal gesendet. Dieser kann den Task zu verschiedenen Handlungen veranlas- sen. Eine Nachricht an einem Port kann auch einen Softwareinterrupt auslösen. I mp_Node 0x0000 (0) Eine eingebundene Node-Datenstruktur, die zur Verkettung mehrerer MsgPorts in einer Liste benutzt werden kann. Das In_Name-Feld kann dazu benutzt werden, mit der Routine FindPort einen bestimmten Port zu finden. „1 mp_Flags 0x000E (14) Dieses Feld gibt an, zu welcher Handlung der inmp_SigTask eingetragene Task durch die Ankunft einer Nachricht an diesem MsgPort veranlaßt werden soll. Hier können folgen- de Werte stehen: Modula-2 Beschreibung PA_SIGNAL signal Bei Ankunft einer Nachricht soll ein Signal geschickt werden. PA_SOFTINT softint Es soll bei Ankunft einer Nachricht ein Softwareinterrupt ausgelöst werden. PA_IGNORE ignore Bei Ankunft einer Nachricht soll nichts geschehen. I mp_SigBit 0x000F (15) Gibt die Nummer des Signalbits an, das bei Ankunft einer Nachricht am Port an den Task geschickt wird, der durch mp _SigTask bestimmt ist. Dieser kann dann z.B. eine Excep- tion auslösen, also den Wait-Zustand beenden. I mp_SigTask 0x0010 (16) | Falls mp _ Flags den Wert PA_SIGNAL hat, ist dies ein Adreßzeiger auf die Task-Datenstruktur des Tasks, für den die Nachrichten dieses Ports bestimmt sind. Sollte in mp_Flags aber PA_SOFTINT stehen, so befindet sich hier die Adresse einer entsprechenden /nterrupt-Datenstruktur. Hier kann auch NULL stehen, dann muß aber mp_Flags den I mp_MsgList 0x0014 (20) Node Wert PA_IGNORE haben, damit nicht versucht wird, an einen nicht existierenden Task ein Signal zu senden. Hier werden alle angekommenen Nachrichten in einer Liste von Message-Datenstrukturen gespeichert, bis sie durch GetMsg abgeholt werden. C (exec/nodes.h) Modula-2 (Exec) struct Node { UBYTE In_Type; BYTE In_Pri; char *In_Name; b Assembler Datenstrukturenreferenz Node = RECORD struct Node *In_Succ; succ:NodePitr; struct Node *In_Pred; pred:NodePitr; type:NodeT'ype; pri:Byte; name:ADDRESS; END; Syntax: Strukturname = LN Definition der einzelnen Parameter in Versalien. »Clipboard«: ClipboardUnitPartial. »DiskFont«: DiskFontHeader. »Exec«: IntVector, Interrupt, Library, List, Routinenreferenz ___ > Beschreibung MemHeader, MemList, Message, MsgPort, Task. »Expansion«: ConfigDev. »Graphics«: Isrvstr. »KeyMap«: KeyMapNode, KeyMapResource. »Exec«: AddTail, Enque, Insert, Remove. Diese Datenstruktur dient zur Verknüpfung der Elemente einer Liste. Die eigentlichen Elemente stehen normalerweise direkt hinter dem letzten Feld der Node-Datenstruktur. In die meisten Datenstrukturen, die zu Listen verknüpft werden, wird daher meistens als erstes Element ein Node eingebunden. Gelegentlich dient auch das /n_Name-Feld dazu, den Node mit dem Inhalt zu verbinden. Den Header einer Liste bildet immer eine List-Datenstruktur. 4 In_Succ 0x0000 (0) II In_Pred 0x0004 (4) Hier steht ein Adreßzeiger auf die Node-Datenstruktur des nächsten Elements der Liste. Hier steht ein Adreßzeiger auf die Node-Datenstruktur des Vorgängerelements. UI In_Type 0x0008 (8) In dieses Feld schreibt Exec den Typ des Elements. Die "Werte sind mit den bei List beschriebenen identisch. Es ist nur bei Exec-internen Listen von Bedeutung. 4 In_Pri 0x0009 (9) Dieses Feld gibt die Priorität an, die zwischen —-128 und 127 liegen darf. Dieser Wert ist für einige Systemdatenstruktu- ren, die als erstes Feld eine Node-Datenstruktur besitzen, von Bedeutung. So wird z.B. die Priorität eines Tasks durch das In _Pri-Feld der in die Task-Datenstruktur einge- bundenen Node-Datenstruktur bestimmt. UI In_Name 0x000A (10) Hier kann ein Adreßzeiger auf eine Zeichenkette stehen, die den Namen des Elements (z.B. Taskname), enthält. Resident Ku C (exec/resident.h) Modula-2 (Exec) He De struct Resident Resident = { RECORD 0000 0 UWORD rt_MatchWord; matchWord:CARDINAL; 0002 2 struct Resident *rt_MatchTag; matchTag:ResidentPtr; 0006 6 APTR rt_EndSkip; endSkip: ADDRESS; 000A 10 UBYTE rt_Flags; flags:ResidentFlagsSet; 000B 11 UBYTE rt_Version; version:UByte; 000C 12 UBYTE rt_Type; type:NodeType; 000D 13 BYTE rt_Pri; pri:Byte; 000E 14 char *rt_Name; name:ADDRESS; 0012 18 char *rt_IdString; idString: ADDRESS; 0016 22 APTR rt_Init; init: ADDRESS; 001A 26 }; END; Assembler Syntax: Strukturname = RT Definition der einzelnen Parameter in Versalien. Datenstrukturenreferenz »Exec«: ExecBase, Resident. Routinenreferenz »Exec«: FindResident, InitResident. D___> Beschreibung Diese Datenstruktur beschreibt ein Reset-festes Modul. Nach einem Reset wird der Speicher nach solchen Datenstrukturen abgesucht. Sie werden in eine Liste in der ExecBase eingetragen und abgearbei- tet. Dabei wird, je nach Inhalt der Datenstruktur, entweder ein Programm ausgeführt oder eine Library, Device oder Ressource erzeugt und in das System eingefügt. Mit Hilfe der Resident-Datenstruktur ist es möglich, Reset-feste Programme zu schreiben. UI rt_MatchWord 0x0000 (0) Hier muß der Wert 0x4AFC (19196) stehen, damit eine Resident-Datenstruktur als solche erkannt wird. Nach einem Reset wird nach diesem Wert gesucht, um die Resident- Datenstrukturen zu erkennen. I rt_MatchTag 0x0002 (2) Ein Adreßzeiger zurück auf den Anfang der Datenstruktur. Dieser Adreßzeiger wird bei der Suche nach Resident- Datenstrukturen überprüft, wenn das richtige MatchWord gefunden wurde. Erst wenn der MatchTag stimmt, glaubt das System, daß es auch tatsächlich eine Resident-Datenstruktur | gefunden hat. 4 rt_EndSkip 0x0006 (6) Hier steht ein Adreßzeiger auf das Ende der Datenstruktur, inklusiv der eventuell dahinter stehenden Daten. 4 rt_Flags 0x000A (10) Die hier stehenden Flags bestimmen, was bei der Abarbei- tung der Resident-Datenstruktur passieren soll. Modula-2 Dez Bedeutung RTF_COLDSTART coldstart Es soll der in rt_/nit angegebene Befehl ausgeführt werden. RTF_AUTOINIT autoinit Es soll der in rt_Type angegebene Befehl ausgeführt werden. I rt_Version 0x000B (11) Die Version der Datenstruktur. „1 rt_Type 0x000C (12) Dieses Feld enthält, falls das RTF_AUTOINIT-Flag in rt Flags gesetzt ist, den auszuführenden Befehl. Es kann sich dabei um einen der drei folgenden Werte handeln: Bedeutung Eine Device mit AddDevice hinzufügen Eine Resource mit AddResource hinzufügen Eine Library mit AddLibrary hinzufügen J rt_Pri 0x000D (13) Gibt die Priorität der Resident-Datenstruktur an. „1 rt_Name 0x000E (14) Hier kann ein Adreßzeiger auf den Namen der Resident- Datenstruktur stehen. I rt_IdString 0x0012 (18) Hier kann die Adresse eines Strings, der weitere Informatio- nen zu dieser Datenstruktur beinhaltet, stehen. I rt _Init 0x0016 (22) Entweder ein Adreßzeiger auf das auszuführende Programm oder, falls MakeLib aufgerufen wird, die Sprungtabelle der Library. | Semaphore om C (exec/semaphores.h) Modula-2 (Exec) struct Semaphore Semaphore = { RECORD struct MsgPort sm_MsgPort; msgPort:MsgPort; WORD sm_Bids; bids:INTEGER; }; END; Assembler Syntax: Strukturname = SM. Es ist nur SM_BIDS definiert. Datenstrukturenreferenz Keine. Routinenreferenz »Exec«: Procure, Vacate. I____> Beschreibung Diese Datenstruktur dient zur Koordinierung des Zugriffs mehrerer Tasks auf ein beliebiges Objekt (ähnlich wie die SignalSemaphore-Datenstruktur). Vor dem Zugriff muß jedes Task durch einen Procure-Aufruf auf einen entsprechenden Semaphore prüfen, ob schon jemand anderes auf das Objekt zugreift. Ist dies der Fall, so gibt Procure FALSE zurück. Jede Anfrage wird in Form der an Procure übergebenen Message am Ende der Messageliste in sm_MsgPort gespeichert. Wenn der Task, der gerade an der Reihe ist, seinen Zugriff beendet, und dies durch Vacate signalisiert, wird die erste in der Liste stehende Message mit Reply beantwortet. Dadurch wird dem Urheber dieser Message die Zugriffsberech- tigung mitgeteilt. Der Urheber wird durch den in der Message-Datenstruktur eingetragenen MsgPort (in mn_ReplyPort) identifiziert. 4 sm_MsgPort 0x0000 (0) Eine eingebundene MsgPort-Datenstruktur, die zur sequen- tiellen Speicherung der Message-Datenstrukturen Zugriffs- anfragen dient. J sm_Bids 0x0022 (34) Jedesmal, wenn der Benutzer, der gerade das Zugriffsrecht hat Procure aufruft, wird dieser Zähler inkrementiert. Wird dagegen Vacate aufgerufen, so wird er dekrementiert. Das Objekt wird erst dann für andere freigegeben, wenn sm_Bids 0 ist. SemaphoreRequest C (exec/semaphores.h) Modula-2 (Exec) struct SemaphoreRequest SemaphoreRequest = { RECORD struct MinNode sr_Link; link:MinNode; struct Task *sr_Waiter; waiter:TaskPtr; }; END; Assembler Datenstrukturenreferenz Routinenreferenz Beschreibung Syntax: Strukturname = SSR Es ist nur SSR_WAITER definiert. »Exec«: SignalSemaphore. Keine. Die SemaphoreRegquest-Datenstruktur wird von Exec benutzt, um eine Zugriffsanforderung an einen SignalSemaphore zu speichern. Alle Anfragen, die an einen SignalSemaphore gerichtet werden und noch nicht erledigt wurden, werden in einer verketteten Liste solcher Datenstrukturen gespeichert. Sie werden über das sr_Link-Feld zu einer MinList-Liste verbunden. 4 sr_Link 0x0000 (0) 4 sr_Waiter 0x0008 (8) SignalSemaphore Dient zur Verkettung der einzelnen Datenstrukturen. Ein Adreßzeiger auf die Task-Datenstruktur des Task, der die Anforderung geschickt hat. C (exec/semaphores.h) Modula-2 (Exec) struct SignalSemaphore SignalSemaphore = { RECORD struct Node ss_Link; link:Node; SHORT ss_NestCount; nestCount:INTEGER; struct MinList ss_WaitQueue; waitQueue:MinlList; struct SemaphoreRequest multipleLink: ss_MultipleLink; SemaphoreRequest; struct Task *ss_Owner; owner:TaskPtr; b Assembler Datenstrukturenreferenz Routinenreferenz ___ > Beschreibung SHORT ss_QueueCount; queueCount:INTEGER; END; Syntax: Strukturname = SS Definition der Parameter in Versalien, wobei ss_Link nicht definiert ist. »Graphics«: Layer, LayerlInfo. »Intuition«: IntuitionBase. »Exec«: AddSemaphore, AttemptSemaphore, FindSemaphore, InitSemaphore, ObtainSemaphore, ReleaseSemaphore, RemSemaphore. Diese Datenstruktur dient zur Koordinierung des Zugriffs mehrerer Tasks auf ein beliebiges Objekt (ähnlich wie die Semaphore-Datenstruktur). Ein solcher SignalSemaphore kann mit der Routine /nit$e- maphore eingerichtet werden. Ein Task, der auf das von der SignalSemaphore-Datenstruktur beschützte Objekt zugreifen will, siganlisiert dies mit ObtainSemaphore bzw. AttemptSemaphore. Nach beendetem Zugriff wird dann ReleaseSemaphore aufgerufen, damit das Objekt für andere Benutzer zugänglich wird. Dieser Mechanismus wird von Intuition genutzt, um die Layers (Bestandteile der Videoanzeige) zu verwalten. 1 ss Link 0x0000 (0) Mit Hilfe dieser eingebundenen Node-Datenstruktur kön- nen mehrere SignalSemaphore-Datenstrukturen zu einer Liste verkettet werden. „4 ss_NestCount 0x000E (14) Falls ein Benutzer, der bereits das Zugriffsrecht hat, weitere Anforderungen schickt, wird dieser Zähler inkrementiert. I ss _WaitQueue 0x0010 (16) In dieser Liste werden die SemaphoreRequest-Datenstruk- turen abgelegt, in denen sich die vorliegenden Anfragen befinden. 4 ss _MultipleLink 0x001C (28) Wörtlich übersetzt: »Mehrfache Verbindung« ??? UI ss _Owner 0x0028 (40) Ein Adreßzeiger auf die Task-Datenstruktur, des Tasks, der diesen SignalSemaphore eingerichtet hat. I ss _ QueueCount 0x002C (44) Die Anzahl der in WaitQueue vorliegenden Anfragen. SoftintList struct SoftIntList SoftIntList = { RECORD C (exec/interrupts.h) Modula-2 (Exec) struct List sh_List; list:List; UWORD sh_Pad; pad: WORD; H END; Assembler Syntax: Strukturname = SH Der Parameter sh_List ist nicht extra definiert. Datenstrukturenreferenz »Exec«: ExecBase. Routinenreferenz Keine. ___> Beschreibung Eine Exec-interne Datenstruktur, die als Listenheader einer Liste der Software-Interrupts benutzt wird. Eine solche Datenstruktur befindet sich in der ExecBase. 4 sh_List 0x0000 (0) Eine eingebundene List-Datenstruktur, die als Listenheader benutzt wird. „1 sh_Pad 0x000E (14) Ein Füllbytechen. Task Offset C (exec/tasks.h) Modula-2 (Exec) extern struct Task Task = { RECORD 0000 0 struct Node tc_Node; node:Node; 000E 14 UBYTE tc_Flags; flags:TaskFlagSet; 000F 15 UBYTE tc_State; state:TaskState; 0010 16 BYTE tc_IDNestCnt; idNestCnt:Byte; 0011 17 BYTE tc_TDNestCnt; tdNestCnt:Byte; 0012 18 ULONG tc_SigAlloc; sigAlloc:LONGSET; 0016 22 ULONG tc_SigWait; sigWait:LONGSET,; 001A 26 ULONG tc_SigRecvd; sigRecvd:LONGSET; 001E 30 ULONG tc_SigExcept; sigExcept:LONGSET; 0022 34 UWORD tc_TrapAlloc; trapAlloc:BITSET,; 0024 36 UWORD tc_TrapAble; trapAble:BITSET; 0026 38 APTR tc_ExceptData; exceptData: ADDRESS; 002A 42 APTR tc_ExceptCode; exceptCode:PROC; 002E 46 APTR tc_TrapData; trapData: ADDRESS; 0032 50 APTR tc_TrapCode; trapCode:PROC; 0036 54 APTR tc_SPReg; spReg: ADDRESS; 003A 58 APTR tc_SPLower; spLower: ADDRESS; 003E 62 APTR tc_SPUpper; spUpper: ADDRESS; 0042 66 VOID (*tce_Switch)(); switch:PROC; 0046 70 VOID (*tc_Launch)(); launch:PROC; 004A 74 struct List tc_MemEntry; memEntry:List; 0058 88 APTR tc_UserData; userData: ADDRESS; 005C 92 }; END; Strukturname = TC Assembler Syntax: Definition der einzelnen Parameter in Versalien (bis auf TC_UserData), wobei tc_Node nicht extra definiert ist. Datenstrukturenreferenz »Dos«: Process. »Exec«: ExecBase, MsgPort, SignalSemaphore. »Graphics«: GfxBase. »PrtBase«: PrinterData. Routinenreferenz »Exec«: AddTask, FindTask, RemTask, SetTaskPri, Signal. »ExecSupoort«: CreateTask, DeleteTask. ___> Beschreibung Diese Datenstruktur beschreibt einen Task. Sie enthält alle Informationen, die das Multitasking für das Ein- und Ausschalten sowie die Behandlung der Traps und Exceptions braucht. U tc_Node 0x0000 (0) 1 tc_Flags 0x000E (14) TF_PROCTIME TF_STACKCHK TF_EXCEPT TF_SWITCH TF_LAUNCH tc_State 0x000F (15) C TS_INVALID TS_ADDED TS_RUN TS_READY TS_WAIT TS_EXCEPT TS_REMOVED I te_IDNestCnt 0x0010 (16) I te_TDNestCnt 0x0011 (17) Eine gewöhnliche Node-Datenstruktur, die zur Verkettung mehrerer Tasks zu einer Liste (z.B. in der ExecBase-Daten- struktur) dient. Dies sind Flags, die den momentanen Zustand des Task beschreiben. Es ist jede Kombination der folgenden Bits zugelassen: Modula-2 Hex Dez Beschreibung procTime ?7? stackChk Der Taskstack wird überprüft. exception Es ist eine Exception aufgetreten. switch Der Task verliert den Prozessor. launch Der Task wird gerade einge- schaltet. Diese Flags beschreiben den Task näher. Es sind Kombina- tionen folgender Werte zugelassen: Modula-2 Dez Beschreibung invalid 0 Der Task ist ungültig. added 1 Der Task wurde dem System gerade hinzugefügt. run 2 Der Task läuft gerade. ready 3 Der Task ist bereit, wartet auf den Prozessor. wait 4 Der Task wartet auf ein Signal. Er braucht also bei der Vergabe der Prozessorzeit nicht berücksichtigt zu werden. except 5 Der Task behandelt gerade eine Exception. removed 6 Der Task wurde vom System entfernt. Ein Zähler für die Anzahl der Disable-(wird inkrementiert) und Znable-(wird dekrementiert)Aufrufe. Erst wenn ID_NestCnt O ist, wird ein Interrupt zugelassen. Ein Zähler für die Anzahl der Forbid-(wird inkrementiert) und Permit-(wird dekrementiert)Aufrufe. Erst wenn TD_NestCnt ist, wird das Multitasking wieder eingeschal- tet, der Task kann also den Prozessor verlieren. tc_SigAlloc 0x0012 (18) tc_SigWait 0x0016 (22) tc_SigRecvd 0x001A (26) tc_SigExcept 0x001E (30) tc_TrapAlloc 0x0022 (34) tc_TrapAble 0x0024 (36) tc_ExceptData 0x0026 (38) tc_ExceptCode 0x002A (42) tc_TrapData 0x002E (46) tc_TrapCode 0x0032 (50) tc_SPReg 0x0036 (54) tc_SPLower 0x003A (58) tc_SPUpper 0x003E (62) tc_Switch 0x0042 (66) tc_Launch 0x0046 (70) tc_MemEntry 0x004A (74) tc_UserData 0x0058 (88) Jedes gesetzte Bit dieses Feldes bedeutet, daß das Signal mit der gleichen Nummer allokiert wurde. Jedes gesetzte Bit in diesem Feld entspricht einem Signal, auf dessen Ankunft der Task wartet. Sobald nur eines dieser Signale emfangen wird, wird der Wait-Zustand beendet. Die Nummern der hier gesetzten Bits entsprechen den Nummern der Signale, die empfangen wurden. Die Nummern der hier gesetzten Bits entsprechen den Nummern der Signale, die eine Exception auslösen. Die Nummern der hier gesetzten Bits entsprechen den Nummern der Traps, die allokiert wurden. Dies heißt, daß beim Auftreten des entsprechenden Prozessortraps die in Trapcode angegebene Funktion aufgerufen wird. Die Nummern der hier gesetzten Bits entsprechen den Nummern aktiver Traps. Ein Adreßzeiger auf den Datenbereich der Exceptionroutine. Diese Adresse wird an den Exceptionhandler in Al überge- ben. Ein Adreßzeiger auf die Routine, die beim Auftreten einer Exception aufgerufen wird. Sie bekommt in DO die Nummer des für die Exception verantwortlichen Signals. Dieser Wert muß vor dem Verlassen des Handlers mit RTS wieder in DO geladen werden. Ein Adreßzeiger auf den Datenbereich der Trap-Routine. Ein Adreßzeiger auf den Code des Trap-Handlers. Er muß in dem Supervisormodus laufen können. Dies ist der Stackpointer des Task. Dies ist die Adresse der unteren Grenze des Task-eigenen Stacks. Dies ist die Adresse der oberen Grenze des Task-eigenen Stacks. Ein Adreßzeiger auf die Routine, die aufgerufen wird, wenn ein Task ausgeschaltet wird. Ein Adreßzeiger auf eine Routine, die beim Einschalten des Tasks aufgerufen wird. Die Liste der für den Task allokierten Speicherbereiche. Beim Entfernen des Task werden alle diese Bereiche freige- geben. Dieser Adreßzeiger steht dem Programmierer für eigene Zwecke zur Verfügung. Unit Ki C (exec/devices.h) Modula-2 (Exec) struct Unit Unit = [ RECORD struct MsgPort *unit_MsgPort; msgPort:MsgPortPtr; UBYTE unit_flags; flags:UnitFlagSet; UBYTE unit_pad; pad:BYTE,; UWORD unit_OpenCht; openCnt:CARDINAL; }; END; Assembler Syntax: Strukturname = UNIT. Definition der einzelnen Parameter in Versalien, wobei unit_MsgPort nicht definiert ist. Datenstrukturenreferenz »Clipboard«: IOClipboard. »Exec«: IORequest, IOStdReg. »Trackdisk«: TDU_PublicUnit. Routinenreferenz Keine. Beschreibung Diese Datenstruktur wird bei der Verwaltung der Devices und Resources benutzt, um ein bestimmtes Gerät zu identifizieren. Dies kann ein echtes Hardwaregerät wie z.B. ein konkretes Laufwerk, oder einfach eine abstrakte Einheit sein (z.B. bei dem Clipboard-Device). 1 unit_MsgPort 0x0000 (0) Ein MsgPort, an dem Anfragen (Messages) an dieses Gerät gerichtet und in der Messageliste bis zur Bearbeitung gespei- chert werden. J unit_Flags 0x0004 (4) Dies sind geräteinterne Flags. Zwei Flags sind für dieses Feld vordefiniert: Modula-2 Dez Beschreibung UNITTF_ACTIVE active Das Gerät ist aktiv. UNITTF_INTASK inTask Das Gerät ist gerade beschäftigt ? J unit_pad 0x0005 (5) Noch ein letztes Füllbyte. 4 unit_ÖpenCnt 0x0006 (6) Dieses Feld gibt an, wie oft dieses Unit schon göffnet wurde (z.B. wie oft schon eine Trackdisk-Device auf ein konkretes Laufwerk geöffnet wurde). wen AN N eat . tet, ee ee = £ LALLL. Abb. 3.1: Die ExecBase-Datenstruktur Eine eingebundene Library-Datenstruktur Eine eingebundene Node-Datenstruktur zur Verkettung der geöffneten Libraries Ein Adreßzeiger auf die nächste geöffnete Library Ein Adreßzeiger auf die vorher geöffnete Library Ein Adreßzeiger auf die Task- Datenstruktur des momentan aktiven Tasks Eine eingebundene List-Datenstruktur zur Verwaltung des Speichers Eine eingebundene List-Datenstruktur zur Verwaltung der Resources Eine eingebundene List-Datenstruktur zur Verwaltung der geöffneten Devices Eine eingebundene List-Datenstruktur zur Verknüpfung der Interrupts Eine eingebundene List-Datenstruktur zur Verwaltung der geöffneten Libraries Eine eingebundene List-Datenstruktur zur Verwaltung der aktiven Ports Eine eingebundene List-Datenstruktur zur Verkettung der Tasks, die sich im Ready-Zustand befinden Eine eingebundene List-Datenstruktur zur Verkettung der Tasks, die sich im Wait-Zustand befinden Die ExecBase-Datenstruktur [/ a U U U / Der typische Aufbau einer Liste, bestehend aus einer N List Y List- und mehreren Node-Datenstrukturen VLILLLLLLE j 11h_Head VEIZEEIZEIR Un AB Tail ee PIISFFFFFFZ Node Node Node Node > DE > > An succ_ Succ Y A Succ Y rn Succ = ‚en _Succ y din_Pred| ia) dIn_Pred | u m— zn m I we ea] me rt en) rt Abb. 3.2: Der Aufbau einer Liste Wurde die Intuition- und Graphics-Library geöffnet, so können die zugehörigen xxxBase-Datenstrukturen wie abgebildet verknüpft sein N ExecBase VRR N er ee ehe Den ernennen We Tossene } mu) X > 7 EL nn Kr EEE Node SSNNN = SETTETTTTETERN :N Node I NSS In_Succ TITLE, B T: u SIT ; NR ERISSSSSSTTTSTEESEUNS N N N lib_Node EIIIDININSN IIIIIIIN In_succ WAL & Fi LE, 2 17:3 ESECHEETETTTETTTTETTE ee 2 7 D FIT TIEF? CL G 2A m 110 rg Y ® n. VA N Zen aa E77 ehe Oel A PIE? een, rennen nepreteen erregt Abb. 3.3: Die Verknüpfung der Libraries Eine Beliebige Struktur, die die Nachricht beinhaltet r ELLE EL LL Nachricht Empfängertask f LLLLLLLLLN c ( rask Y VAN i LG Zielport en nn ne nn en 7 77 I ann 7 7 A mp MsgList RER Ä Message 77 ZIZELTEIL,) DALE LET % ee 7% HERE: G ._ VEEEIDEREELEIEEEIEEE I — > WEEZE 0, Sendertask EEE Eingebundene nt 7 7 Message VEIILEZ. / fe sigreva Y Message wird mit PutNsd// ZU, Name oder weitere Port für Antwort Daten VELLLLLLLLT 4 als Antwort an den sender Imp sigrask F zurückgeschickt VZRRZZerIIN, , VTLFZLLFTLL =” PGRRRRERGG, A EEE WE 7 = age 78 VILLELELTELLT N III SIT ISDN Abb. 3.4: Die Nachrichtenübermittlung zwischen Tasks DIE INTUITION-LIBRARY In dieser Library sind alle die Systemroutinen und Datenstrukturen zusammengefaßt, die mit der Benutzeroberfläche zu tun haben. In ihr sind nicht nur die Screens (von manchen auch Bildschirme genannt), Windows (Fenster kann man auch mal dazu sagen), Requester und Gadgets definiert (Commo- dores »Sales Support Information« betreffend der Übersetzungsrichtlinien von Amiga-Begriffen sagt dazu übrigens Kommunikationsfenster und Symbolfeld), sondern auch einige einfache Routinen zur Ausgabe von Texten und Grafiken. 4.1 Wichtige Flags der Intuition-Library In diesem Abschnitt werden alle die Flags der Intuition-Library genauer beschrieben, die in mehreren Datenstrukturen verwendet werden. Die IDCMP-Flags (intuition/intuition.h) (Intuition) C Modula-2 Hex SIZEVERIFY sizeVerify 00000001 Eine Meldung über das Verändern der Größe des Fensters, jedoch wartet »Intuition« mit der Ausführung, bis auf die Message durch die Routine ReplyMsg geantwortet wurde. NEWSIZE newSize 00000002 Eine Meldung darüber, daß die Größe des Fensters bereits verändert wurde. REFRESHWINDOW refreshWindow 00000004 Eine Meldung über die Notwendigkeit, einen Refresh durchzuführen. MOUSEBUTTONS mouseButtons 00000008 Eine Meldung über das Betätigen der Maustasten. MOUSEMOVE mouseMove 00000010 Eine Meldung über das Bewegen der Maus. Modula-2 GADGETDOWN gadgetDown 00000020 Eine Meldung über ein momentan angeklicktes Gadget. GADGETUP gadgetUp 00000040 Eine Meldung über ein wieder losgelassenes Gadget. REOSET regSet 00000080 Eine Meldung über die Öffnung eines Requesters. MENUPICK menuPick 00000100 Eine Meldung über das Drücken der rechten Maustaste. CLOSEWINDOW closeWindow 00000200 Eine Meldung über das Anklicken des Close-Gadgets. RAWKEY rawKey 00000400 Eine Tastaturmeldung im Raw-Code. In der /ntuiMessage-Datenstruktur steht bei einer Systemnachricht der Raw-Code der gedrückten Taste in dem Feld Code. REOVERIFY req Verify 00000800 Eine Meldung über das Öffnen eines Requesters, jedoch wartet »Intuition« mit der Ausführung, bis auf die Message durch die Routine ReplyMsg geantwortet wurde. REOCLEAR reqClear 00001000 Eine Meldung über das Schließen des letzten Requesters. MENUVERIFY menuVerify 00002000 Eine Meldung über das Zeichnen eines Pull-down-Menüs, jedoch wartet »Intuition« mit der Darstellung des Menüs, bis auf die Message durch die Routine ReplyMsg geantwortet wurde. Modula-2 NEWPREFS newPrefs 00004000 Eine Meldung über den Versuch des Benutzers, die Preferences-Einstellungen zu verändern. DISKINSERTED diskInserted 00008000 Eine Meldung über das Einlegen einer Diskette in ein Laufwerk. DISKREMOVED diskRemoved 00010000 Eine Meldung über das Entfernen einer Diskette aus einem Laufwerk. WBENCHMESSAGE wbenchMessage 00020000 Eine Meldung der Workbench. ACTIVEWINDOW activeWindow 00040000 Eine Meldung über das Aktivieren dieses Fensters. INACTIVEWINDOW inactiveWindow 00080000 Eine Meldung über das Inaktivieren dieses Fensters. DELTAMOVE deltaMove 00100000 Die Mausbewegungen werden relativ zu der letzten Mausposition angegeben. Dies geschieht auch, wenn sich der Zeiger nicht mehr über dem Fenster befindet. VANILLAKEY vanillaKey 00200000 Eine Tastaturmeldung im ASCH-Code. In der /ntuiMessage-Datenstruktur steht bei einer Systemnach- richt der ASCII-Code der gedrückten Taste gemäß der momentanen Keymap in dem Feld Code. INTUITICKS intuiTicks 00400000 Eine ständige aktuelle Systemnachricht. »Intuition« hält dabei bis zu zehnmal pro Sekunde eine IntuiMessage-Datenstruktur bereit, die jedoch nicht gepuffert wird. Eine neue Nachricht gibt es nur, wenn auf die vorherige durch die Routine ReplyMsg geantwortet wurde. Modula-2 LONELYMESSAGE lonelyMessage 80000000 Ein einsames Systeminternes Bit. Datenstrukturenreferenz »Intuition«: IntuiMessage, NewWindon. ° Beschreibung Die IDCMP-Flags gehören zu dem »Intuition Direct Comunication Message Port«, einem besonderen Messageport, über den Informationen über die Windows gesendet werden. In der NewWindow-Daten- struktur definieren diese Flags, bei welchen Ereignissen eine Message losgeschickt wird. In der /ntui- Message-Datenstruktur dagegen definieren diese Flags, welches Ereignis eingetreten ist. Wird zum Beispiel beim Öffnen eines Windows SIZEVERIFY gesetzt, so wird jedesmal, wenn der Benutzer die Größe dieses Fensters verändert, eine /ntuiMessage-Datenstruktur bereitgestellt, bei der in Class SIZEVERIFY gesetzt ist. Die Screen-Flags (intuition/intuition.h) (Intuition) Definierte Konstanten: Modula-2 SCREENTYPE Das untere Nibbel enthält die Informationen über die Art des Screens. CUSTOMSCREEN customScreen 000F Der zugehörige Bildschirm ist kein Workbench-Screen. STDSCREENHEIGHT stdScreenHeight FFFF Der zugehörige Bildschirm hat die Standardhöhe von 256 Zeilen. Definierte Bits Modula-2 WBENCHSCREEN wbenchScreen Der zugehörige Bildschirm ist ein Workbench-Screen. SHOWTITLE showTitle 0010 Die Titelleiste des zugehörigen Bildschirms wird mitausgegeben. BEEPING beeping 0020 Der zugehörige Bildschirm kann blinken bzw. blinkt gerade. CUSTOMBITMAP customitMap 0040 Der zugehörige Bildschirm hat eine eigene Bitmap. SCREENBEHIND screenBehind 0080 Beim Öffnen ist der Bildschirm im Hintergrund. SCREENQUIET screenQuiet 0100 Zu diesem Bildschirm gehören keine Gadgets. Datenstrukturenreferenz »Intuition«: NewScreen, NewWindow, Screen. ___> Beschreibung Die Screen-Flags enthalten Informationen über die Eigenschaften eines Bildschirms. Die Window-Flags (intuition/intuition.h) (Intuition) Definierte Konstanten Modula-2 SMART REFRESH 00000000 Ein Refresh wird nur notwendig, wenn das Fenster vom Benutzer verkleinert und anschließend wieder vergrößert wurde. REFRESHBITS 000000C0 Die Bits, die den Refresh-Modus für dieses Fenster festlegen. OTHER_REFRESH otherRefresh 000000C0 Refresh für SUPER_BITMAP-Windows, also Fenster mit eigenen Bitmaps. SUPER UNUSED superUnused FCFCO0000 Eine Kombination aller unbenutzten Bits der Window-Flags ergibt die »Super-Unbenutzten-Flags«. Definierte Bits Modula-2 WINDOWSIZING windowSizing 00000001 Das Sizing-Gadget erscheint in der unteren rechten Ecke (die Fenstergröße kann verändert werden). WINDOWDRAG windowDrag 00000002 Die Titelleiste wird zu einem Drag-Gadget (das Fenster ist verschiebbar). WINDOWDEPTH windowDepth 00000004 Die Depth-Gadgets erscheinen in der rechten, oberen Ecke (das Fenster kann in den Vorder- oder Hintergrund geschaltet werden). WINDOWCLOSE windowClose 00000008 Das Close-Gadget erscheint in der linken oberen Ecke. Wird es durch den Mauspfeil aktiviert, schließt sich das Fenster jedoch nicht automatisch. Es wird lediglich eine entsprechende Systemnachricht bereitgestellt. Modula-2 SIZEBRIGHT sizeBRight 00000010 Das Sizing-Gadget gehört zum rechten Fensterrand (voreingestellt). SIZEBBOTTOM sıizeBBottom 00000020 Das Sizing-Gadget gehört zum unteren Fensterrand. SIMPLE REFRESH simpleRefresh 00000040 Es wird kein zusätzlicher Speicher für den Refresh bereitgehalten. Dadurch muß der Inhalt des Fensters nach Überlappungen mit anderen Fenstern oder nach einer Vergrößerung jedesmal neu aufgebaut werden. SUPER _BITMAP superBitMap 00000080 Es existiert eine eigene Bitmap, die groß genug ist, den gesamten Fenster-Inhalt aufzunehmen. Bei UÜberlappungen mit anderen Fenstern oder bei Veränderungen der Größe ist somit kein Refresh notwen- dig. BACKDROP backDrop 00000100 Das Fenster bleibt immer ım Hintergrund. REPORTMOUSE reportMouse 00000200 Es werden Systemnachrichten über die Mausbewegungen innerhalb dieses Fensters bereitgestellt. GIMMEZEROZERO gimmeZeroZero 00000400 Dieses Fenster ist ein GimmeZeroZero-Window (Koordinatenursprung liegt in der inneren linken, oberen Ecke, von den Höhen- und Breitenwerten des Fensters werden also die Rahmen abgezogen). BORDERLESS borderless 00000800 Das Fenster erhält keinen Rahmen. ACHTUNG: Sind System-Gadgets aktiviert, so werden zugehörige Ränder trotzdem ausgegeben. Modula-2 ACTIVATE activate 00001000 Das Fenster wird sofort nach dem Öffnen aktiviert. ACHTUNG: Macht der Benutzer gerade eine Eingabe, so wird diese auf das neue Fenster umgeleitet. WINDOWACTIVE window Active 00002000 Das Fenster ist momentan aktiv. INREQUEST inRequest 00004000 Das Fenster ist durch mindestens einen Requester gesperrt. MENUSTATE menusState 00008000 Ein Menüpunkt wird gerade ausgewählt. RMBTRAP rmbTrap 00010000 Über das Drücken der rechten Maustaste wird eine Message erstellt, eine Menüauswahl ist daher nicht möglich. NOCAREREFRESH noCareRefresh 00020000 Es werden keine Systemnachrichten über die Notwendigkeit eines Refreshs bereitgestellt. WINDOWREFRESH windowRefresh 01000000 An dem Fenster wird momentan ein Refresh durchgeführt. WBENCHWINDOW wbenchWindow 02000000 Das Fenster ist auf der Workbench geöffnet. WINDOWTICKED windowTicked 04000000 Systeminternes Bit. Datenstrukturenreferenz »Intuition«: NewWindow, NewScreen. Die Window-Flags enthalten Informationen über die Eigenschaften eines Fensters. 4.2 Die Datenstrukturen der Intuition-Library Boolinfo Offset C (intuition/intuition.h) Modula-2 (Intuition) Hex Dez struct Boollnfo BoollInfo = { RECORD USHORT Flags; flags:BITSET,; UWORD *Mask; mask: ADDRESS; ULONG Reserved; reserved:LONGCARD; }; END; Assembler Präfix: bi Datenstrukturenreferenz »Intuition«: Gadget. Routinenreferenz Keine. Beschreibung Dies ist eine zusätzliche Datenstruktur für Boolean-Gadgets (für ja/nein Entscheidungen wie »OK« oder »Cancel«) und sogenannten Boolean-Toggle-Gadgets (Ein- und Ausschalten von bestimmten Funktio- nen). I Flags 0x0000 (0) Es ist nur folgende Konstante vereinbart: C Modula-2 Hex Beschreibung BOOLMASK boolMask 0001 Ist immer gesetzt, da bis jetzt dies die einzige Definition ist. I] Mask 0x0002 (2) Ein Adreßzeiger auf eine /mage-Datenstruktur, die das Gra- fiksymbol beschreibt, das bei der Auswahl dieses Gadgets auf dem Display erscheint. 1 Reserved 0x0006 (6) Reservierter Adreßzeiger für zukünftige Erweiterungen. In den vorliegenden Versionen immer auf NULL setzen. C (intuition/intuition.h) Modula-2 (Intuition) struct Border Border = { RECORD 0 SHORT LeftEdge; leftEdge:INTEGER; 2 SHORT TopEdge; topEdge:INTEGER; 4 UBYTE FrontPen; frontPen:UByte; 5 UBYTE BackPen; backPen:UByte; 6 UBYTE DrawMode; drawMode:DrawModeSet; 7 BYTE Count; count:UByte; 8 SHORT *XY; xy:ADDRESS; 12 struct Border *NextBorder; nextBorder:BorderPtr; 16 I: END; Assembler Präfix: bad Datenstrukturenreferenz »Intuition«: Border, Requester. Routinenreferenz »Intuition«: DrawBorder. L___> Beschreibung In dieser Datenstruktur werden die Informationen über einen zu zeichnenden Rahmen für die DrawBor- der-Routine bereitgehalten. Dabei handeltes sich eigentlich um einen beliebigen Linienzug, mitdem man natürlich auch einen rechteckigen Rahmen zeichnen kann. I LeftEdge 0x0000 (0) Die zu der x-Koordinate, die beim Aufruf in der DrawBor- der-Routine angegeben wird, relative x-Koordinate des Basispunktes, der für das Zeichnen dieses Linienzuges als Ursprung dient. I TopEdge 0x0002 (2) Die zu der y-Koordinate, die beim Aufruf in der DrawBor- der-Routine angegeben wird, relative y-Koordinate des Basispunktes, der für das Zeichnen dieses Linienzuges als Ursprung dient. 1 FrontPen 0x0004 (4) Die Nummer des Farbregisters, dessen Inhalt als Vorder- grundfarbe verwendet wird. I BackPen 0x0005 (5) Die Nummer des Farbregisters, dessen Inhalt als Hinter- grundfarbe verwendet wird. 1 DrawMode 0x0006 (6) Der Zeichenmodus, mit dem der Rahmen gezeichnet werden soll. Zur Verfügung stehen JAMI (Zeichnen mit der Vorder- grundfarbe) und XOR (Zeichnen durch D invertieren). SJ Count 0x0007 (7) Anzahl der Koordinatenpaare, die in XY gespeichert sind. I XY 0x0008 (8) Dies ist ein Adreßzeiger auf eine Liste mit x- und y-Koordi- | natenpaaren. Jedes Koordinatenpaar definiert einen Eck- punkt des Linienzuges, und zwar relativ zu dem durch LeftEdge und TopEdge definierten Basispunkt. 1 NextBorder 0x000C (12) Sollen mit dem gleichen Aufruf noch mehr Linienzüge gezeichnet werden, so können über diesen Adreßzeiger mehrere Border-Datenstrukturen miteinander verknüpft werden. Steht hier NULL, so ist das Ende der Liste erreicht. FatiIntuiMessage om C (intuition/intuitionbase.h) Modula-2 (Intuition) struct FatIntuiMessage FatIntuiMessage = m RECORD struct IntuiMessage; intuiMessage:IntuiMessage; ULONG PrevKeys; prevKeys:LONGCARD; } END; Assembler Diese systeminterne Datenstruktur ist in Assembler nicht definiert. Datenstrukturenreferenz Keine. Routinenreferenz Keine. ...> Beschreibung Bei dieser systeminternen Datenstruktur handelt es sich um eine /ntuiMessage-Datenstruktur, die um einen Parameter erweitert wurde. I IntuiMessage 0x0000 (0) Einbindung einer vollständigen /ntuiMessage-Datenstruk- tur. I PrevKeys 0x0034 (52) Interner Systemparameter um den die /ntuiMessage-Daten- struktur erweitert wurde — aber was für einer? Gadget Offset C (intuition/intuition.h) Modula-2 (Intuition) Hex Den | struct Gadget Gadget = { RECORD struct Gadget *NextGadget; nextGadget:GadgetPtr; SHORT LeftEdge; leftEdge:INTEGER; C (intuition/intuition.h) Modula-2 (Intuition) SHORT TopEdge; topEdge:INTEGER; SHORT Width; width:INTEGER; SHORT Height; height:INTEGER; USHORT Flags; flags:GadgetFlagSet; USHORT Activation; activation:ActivationFlagSet; USHORT GadgetType; gadgetType:CARDINAL; APTR GadgetRender; gadgetRender: ADDRESS; APTR SelectRender; selectRender: ADDRESS; struct IntuiText *GadgetText; gadgetText:IntuiTextPtr; LONG MutualExclude; mutualExclude:LONGSET; APTR Speciallnfo; speciallnfo: ADDRESS; USHORT GadgetlD; gadgetID:INTEGER; APTR UserData; userData: ADDRESS; }; END; Assembler Präfix: 88_ Datenstrukturenreferenz »Intuition«: DiskObjekt, Gadget, GadgetInfo, IntuitionBase, NewScreen, NewWindow, Requester, Screen, Window. RoutinenReferenz »Intuition«: ActivateGadget, AddGadget, AddGList, ModifyProp, NewModifyProp, OffGadget, OnGadget, RefreshGadgets, RefreshGList, RemoveGadget, RemoveGList. 2? Beschreibung Die Gadgets sind einem Window zugeordnete Felder, die durch Anklicken mit der Maus eine Aktion auslösen können. Neben den bekannten System-Gadgets, wie Close-, Depth- und Sizing-Gadget, können zu jedem Displayelement beliebige Gadgets über diese Datenstruktur definiert werden. Dabei gibtes drei verschiedene Arten: Boolean-, Proportional- und String-Gadgets (siehe auch: BoolInfo-, PropInfo- und StringInfo-Datenstruktur. I NextGadget 0x0000 (0) Gehören mehrere Gadget-Datenstrukturen zu diesem Dis- playelement, so werden sie über diesen Adreßzeiger mitein- ander zu einer linearen Liste verknüpft. Das letzte Glied dieser Kette muß an dieser Stelle den Wert NULL haben. I LeftEdge 0x0004 (4) Der Abstand des Gadgets vom linken Rand des zugehörigen Displayelements. Die Bedeutung dieses Wertes hängt von dem Bit GRELRIGHT aus Flags ab. II TopEdge 0x0006 (6) Der Abstand des Gadgets vom oberen Rand des zugehörigen Displayelements. Die Bedeutung dieses Wertes hängt von dem Bit GRELBOTTOM aus Flags ab. | II Width 0x0008 (8) Die Breite des Gadgets. Die Bedeutung dieses Wertes hängt von dem Bit GRELWIDTH aus Flags ab. I] Height 0x000A (10) Die Höhe des Gadgets. Die Bedeutung dieses Wertes hängt Ä von dem Bit GRELHEIGHT aus Flags ab. U Flags 0x000C (12) Gesetzte Flags haben folgende Bedeutung: C Modula-2 Hex Beschreibung GADGHIGHBITS gadgHighbits 0003 Für diese zwei Bits sind folgende 4 | Möglichkeiten des Highlightnings definiert: GADGHCOMP gadgetHComp 0000 00: Invertieren aller Bits in diesem Gadget. GADGHBOX gadgHBox 0001 01: Gadget mit einem Auswahlkasten umranden. GADGHIMAGE gadgHlmage 0002 10: Ausgabe einer anderen Image- oder Border-Datenstruktur. GADGHNONE gadgHNone 0003 11: Wird dieses Gadget ausgewählt, so wird sein Erscheinungsbild nicht verändert. GADGIMAGE gadglmage l: Gadget wird als »Image« ausgegeben. 0: Gadget wird als »Border« ausgegeben. Beachte auch: GadgetRender und SelectRender. GRELBOTTOM gRelBottom TopEdge ist relativ zum unteren Rand dieses Displayelements und nicht zum oberen. GRELRIGHT gRelRight LeftEdge ist relativ zum rechten Rand dieses Displayelements und nicht zum linken. GRELWIDTH gRelWidth Width ist kein absoluter Wert, sondern wird von Width des Display- elements abgezogen. GRELHEIGHT gRelHeight Height ist kein absoluter Wert, sondern wird von Height des Display- elements abgezogen. SELECTED selected Handelt es sich um ein »Boolean- Gadget«, so ist es zur Zeit ein- geschaltet. C GADGDISABLED Modula-2 Hex gadgDisabled 0100 Beschreibung Dieses Gadget ist inaktiviert und kann vom Benutzer nicht wieder akti- viert werden. ACHTUNG: In Modula-2 sind gadgHighbits, gadgHNone und gadgHComp als Konstanten definiert. } Activation 0x000E (14) RELVERIFY GADGIMMEDIATE ENDGADGET FOLLOWMOUSE RIGHTBORDER LEFTBORDER TOPBORDER BOTTOMBORDER TOGGLESELECT STRINGCENTER STRINGRIGHT LONGINT Gesetzte Flags haben folgende Bedeutung: Modula-2 Hex relVerify gadgImmediate 0002 endGadget 0004 followMouse 0008 rightBorder 0010 leftBorder 0020 topBorder 0040 bottomBorder 0080 toggleSelect 0100 stringCenter 0200 stringRight 0400 longint Beschreibung Gadget wird nur aktiv, wenn sich der Mauszeiger beim Drücken und Loslassen der linken Maustaste über dem Gadget befindet. Gadget wird bereits beim ersten »Anklicken« aktiv. Ist das Displayelement ein Requester, so kann es nur geschlossen werden, wenn dieses Bit gesetzt ist. Auch nach dem »Anklicken« eines Gadgets wird das Programm laufend über die Position des Mauszeigers informiert. Ist das Displayelement ein Window, so kann das Gadget durch Setzen eines dieser Bits in den rechten, linken, oberen oder unteren Rand eingebun- den werden, wobei die Breite des Fensterrands der Größe des Gadgets angeglichen wird. Es handelt sich um ein Boolean-Toggle-Gadget, das ein- und ausgeschaltet werden kann. Ist dies ein String-Gadget, so wird der Text zentriert ein- und ausgegeben. Ist dies ein String-Gadget, so wird der Text rechtsbündig ein- und ausgegeben. Die Eingabe wird als Zahl vom Typ Long interpretiert. Modula-2 Hex Beschreibung ALTKEYMAP altKeyMap 1000 Zur Eingabe eines Textes wird eine eigene Keymap verwendet. BOOLEXTEND boolExtend 2000 Zu diesem Boolean-Gadget gehört eine BoolInfo-Datenstruktur. I GadgetType 0x0010 (16) Folgende Konstanten definieren in dieser 2-Byte-Marke, um welche Art von Gadget es sich handelt: C Modula-2 Hex Beschreibung Definition der Anwender-Gadgets: BOOLGADGET boolGadget 0001 Ein Boolean-Gadget. GADGET0002 gadget0002 0002 Lückenfüllendes Bit. PROPGADGET propGadget 0003 Ein Proportional-Gadget. STRGADGET strGadget 0004 Ein String-Gadget. Definition der System-Gadgets: SIZING sizing 0010 Ein Sizing-Gadget; zum Verändern der Größe eines Fensters. WDRAGGING wDragging 0020 Ein Drag-Gadget; zum Verschieben von Fenstern. SDRAGGING sDragging 0030 Ein Drag-Gadget; zum Verschieben von Bildschirmen. WUPFRONT wUÜpFront 0040 Ein Depth-Gadget; um ein Fenster in den Vordergrund zu holen. SUPFRONT sUpFront 0050 Ein Depth-Gadget; um einen Bild- schirm in den Vordergrund zu holen. WDOWNBACK wDownBack 0060 Ein Depth-Gadget; um ein Fenster in den Hintergrund zu bringen. SDOWNBACK sDownBack 0070 Ein Depth-Gadget; um einen Bildschirm in den Hintergrund zu bringen. CLOSE close 0080 Ein Close-Gadget; zum Schließen von Fenstern. Definition der Zuge- hörigkeit des Gadgets: REQGADGET regqGadget 1000 Das Gadget gehört zu einem Requester. GZZGADGET gzzGadget 2000 Das Gadget ist in einem GZZ-Border integriert. SCRGADGET scrGadget 4000 Das Gadget gehört zu einem Bild- schirm. SYSGADGET sysGadget 8000 Das Gadget ist ein System-Gadget. GADGETTYPE gadgetType FCO0O0 Kombination aller Flaggs, die in GadgetType gesetzt werden können. I GadgetRender 0x0012 (18) II SelectRender 0x0016 (22) I GadgetText 0x001A (26) I] MutualExclude 0x001E (30) I] Speciallnfo 0x0022 (34) I GadgetID 0x0026 (38) I] UserData 0x0028 (40) Gadgetinfo Ein Adreßzeiger aufeine /mage- oder Border-Datenstruktur, die zur grafischen Darstellung dieses Gadgets benutzt wird. Um welche Datenstruktur es sich hierbei letztlich handelt, wird durch das GADGIMAGE-Bit in Flags angegeben. Steht hier NULL, so erfolgt keine sichtbare Markierung des Gad- gets. Ein Adreßzeiger auf eine /mage- oder Border-Datenstruktur, die zur grafischen Darstellung bei Auswahl dieses Gadgets benutzt wird. Diese Datenstruktur muß vom gleichen Typ sein, wie die durch GadgetRender definierte. Um bei der Auswahl des Gadgets aktiv zu werden, muß das GADGHI- MAGE-Bit in Flags gesetzt sein. Soll ein Text in diesem Gadget ausgegeben werden, so muß hier ein Adreßzeiger auf eine /ntuiText-Datenstruktur ste- hen. Die relativen Koordinaten der linken oberen Ecke des Textes beziehen sich dann auf die LeftEdge- und TopEdge- Werte dieses Gadgets. Steht hier NULL, so wird kein Text ausgegeben. Dieser Parameter wird in den vorliegenden Versionen von »Intuition« noch nicht unterstüzt. Ein Adreßzeiger auf die zugehörige Boollnfo-, PropInfo- oder StringInfo-Datenstruktur. Von welcher Art das Gadget nun wirklich ist, wird durch die Flags in GadgerType fest- gelegt. Fortlaufende Nummer dieses Gadgets in der linearen Liste aller zu diesem Window miteinander verknüpften Gadgets. Möchten Sie einem Gadget eigene Zusatzdaten zuordnen, so können Sie hier einen Adreßzeiger auf diese Daten eintra- gen. Offset C (intuition/intuitionbase.h) Modula-2 (Intuition) struct GadgetInfo GadgetlInfo = RECORD struct GListEnv *gi_Environ; environ:GListEnvPitr; struct Gadget *gi_Gadget; gadget:GadgetPtr; struct IBox gi_Box; box:IBox; struct IBox gi_Container; container:IBox; struct Layer *gi_Layer; layer:LayerPtr; struct IBox gi_NewKnob; newKnob:IBox; b END; Assembler Datenstrukturenreferenz Routinenreferenz > Beschreibung Diese systeminterne Datenstruktur ist in Assembler nicht definiert. »Intuition«: IntuitionBase. »Workbench«: DiskObject. Keine. In dieser Datenstruktur werden zu einem Gadget Informationen über seine Umgebung abgelegt. 4 4 gi_Environ 0x0000 (0) gi Gadget 0x0004 (4) gi Box 0x0008 (8) gi Container 0x0010 (16) gi Layer 0x0018 (24) gi NewKnob 0x001C (28) GListEnv Offset C (intuition/intuitionbase.h) Modula-2 (Intuition) L Ein Adreßzeiger auf eine GListEnv-Datenstruktur, die die Umgebung des Gadgets noch näher beschreibt. Ein Adreßzeiger auf die Gadget-Datenstruktur, auf die sich diese Informationen beziehen. Einbindung einer /Box-Datenstruktur, in der die Dimensio- nen des Gadgets gespeichert sind. Einbindung einer /Box-Datenstruktur, in der die Dimensio- nen des Containers gespeichert sind. Ein Adreßzeiger auf die zu diesem Gadget gehörige Layer- Datenstruktur. Einbindung einer /Box-Datenstruktur, in der bei einem Pro- portional-Gadget die Dimensionen des Knopfes gespeichert sind. Hex Dez struct GListEnv GListEnv = { RECORD 0000 0 struct Screen *ge_Screen; screen:ScreenPtr; 0004 4 struct Window *ge_Window; window:WindowPir; 0008 8 struct Requester *ge_Requester; requester:RequesterPtr; 000C 12 struct RastPort *ge_RastPort; rastPort:RastPortPir; 0010 16 struct Layer *ge_Layer; layer:LayerPtr; 0014 20 struct Layer *ge_GZZLayer; gzzLayer:LayerPir; 0018 24 struct PenPair ge_Pens; pens:PenPair; 001A 26 struct IBox ge_Domain; domain:IBox; 0022 34 struct IBox ge_GZZdims; gzzDims:IBox; 002A 42 r END; Assembler Datenstrukturenreferenz Routinenreferenz Beschreibung Diese systeminterne Datenstruktur ist in Assembler nicht . definiert. »Intuition«: GadgetInfo, IntuitionBase. Keine. In dieser Datenstruktur werden zu einer Liste von mehreren Gadgets weitere Informationen über ihre Umgebung abgelegt. J 4 ge_Screen 0x0000 (0) se Window 0x0004 (4) ge Requester 0x0008 (8) ge RastPort 0x000C (12) ge Layer 0x0010 (16) ge GZZLayer 0x0014 (20) ge_Pens 0x0018 (24) ge Domain 0x001A (26) ge_GZZdims 0x0022 (34) Ein Adreßzeiger auf die Screen-Datenstruktur, zu dem die Gadgets gehören. Gehören die Gadgets zu einem Window, so steht hier ein Adreßzeiger auf die entsprechende Window-Datenstruktur. Gehören die Gadgets zu einem Requester, so steht hier ein Adreßzeiger auf die entsprechende Requester-Datenstruk- tur. Ein Adreßzeiger auf die RastPort-Datenstruktur, deren Para- meter bei der Darstellung der Gadgets verwendet werden. Ein Adreßzeiger auf die zu den Gadgets gehörende Layer- Datenstruktur. Gehören die Gadgets zu einem GimmeZeroZero-Window, so steht hier der zweite Adreßzeiger auf die entsprechende Layer-Datenstruktur. Einbindung einer PenPair-Datenstruktur, in der die Num- mern der Farbregister stehen, deren Farbwerte bei der Dar- stellung der Gadgets verwendet werden. Einbindung einer /Box-Datenstruktur, in der die Position und Dimension des Bereiches angegeben sind, in dem sich alle diese Gadgets befinden. Die Positionsangaben dieses Rechtecks sind relativ zum zugehörigen Displayelement. Ist das zugehörige Displayelement ein GimmeZeroZero- Window, so stehen in dieser eingebundenen /Box-Daten- struktur die entsprechend veränderten Werte aus ge _ Domain. IBox ee C (intuition/intuitionbase.h) Modula-2 (Intuition) struct IBox IBox = { RECORD SHORT Left; left:INTEGER; SHORT Top; top:INTEGER; SHORT Width; width:INTEGER; SHORT Height; height:INTEGER; I: END; Assembler Diese systeminterne Datenstruktur ist in Assembler nicht definiert. Datenstrukturenreferenz »Intuition«: GadgetInfo, GListEnv, IntuitionBase. Routinenreferenz Keine. ____> Beschreibung Diese systeminterne Datenstruktur wird benutzt, um die Dimensionen eines Rechtecks in andere Datenstrukturen einzubinden. I Left 0x0000 (0) Der Abstand des Rechtecks vom linken Rand des zugehöri- gen Displayelements. I Top 0x0000 (0) Der Abstand des Rechtecks vom oberen Rand des zugehöri- gen Displayelements. „1 Width 0x0004 (4) Die Breite des Rechtecks. 4 Height 0x0004 (4) Die Höhe des Rechtecks. Image Offset C (intuition/intuition.h) Modula-2 (Intuition) Hex Dez struct Image Image = { RECORD 0000 0 SHORT LeftEdge; leftEdge:INTEGER; 0002 2 SHORT TopEdge; topEdge:INTEGER; 0004 4 SHORT Width; width:INTEGER; 0006 6 SHORT Height; height:INTEGER; 0008 8 SHORT Depth; depth:INTEGER; 000A 10 USHORT *ImageData; imageData: ADDRESS; OOOE 14 UBYTE PlanePick; planePick:UByte; C (intuition/intuition.h) Modula-2 (Intuition) UBYTE PlaneOnOff; planeOnOff:UByte; b Assembler Datenstrukturenreferenz Routinenreferenz ___> Beschreibung struct Image *NextlImage; nextImage:ImagePtr; Präfix: ig_ »Intuition«: Image, IntuitionBase, NewWindow, Window »Intuition«: Drawlmage. In dieser Datenstruktur werden die Daten gespeichert, die für die Ausgabe eines beliebigen Grafiksym- bols mit der Routine Drawlmage nötig sind. I LeftEdge 0x0000 (0) I TopEdge 0x0000 (2) I Width 0x0004 (4) Height 0x0006 (6) I Depth 0x0008 (8) Ü I ImageData 0x000A (10) „I PlanePick 0x000E (14) 1 PlaneOnOff 0x000F (15) Die zu der x-Koordinate, die beim Aufruf in der Draw/mage- Routine angegeben wird, relative x-Koordinate der oberen linken Ecke des Grafiksymbols. Die zu der y-Koordinate, die beim Aufruf in der Draw/mage- Routine angegeben wird, relative y-Koordinate der oberen linken Ecke des Grafiksymbols. Die Breite des Grafiksymbols. Die Höhe des Grafiksymbols. Die Tiefe des Grafiksymbols (also die Anzahl der Bitplanes), von der die Anzahl der Farben abhängt. Dies ist ein Adreßzeiger auf die Grafikdaten, die sich im Chip-RAM befinden müssen. Die einzelnen Bitplanes werden dabei hintereinander abgespeichert. Die Bits dieser 1-Byte-Maske geben an, in welche Bitplanes des Ziel-Rastports die Grafikdaten geschrieben werden. Ist ein Bit gesetzt, so bedeutet dies, daß die korrespondierende Bitplane beschrieben wird. Die einzelnen Bits dieser 1-Byte-Maske sind nur von Inter- esse, wenn das korrespondierende Bit in PlanePick gelöscht ist. In diesem Fall wird die zugehörige Bitplane in dem Bereich des Grafiksymbols mit 0 oder 1 gefüllt (ist also z.B. das dritte Bit in PlanePick gelöscht und in PlaneOnOff gesetzt, so wird die dritte Bitplane des Ziel-Rastports in dem Bereich des Grafiksymbols mit 1 gefüllt). 3 NextImage 0x0010 (16) IntuiMessage Über diesen Adreßzeiger können mehrere /mage-Daten- strukturen miteinander verknüpft werden, um so durch einen einzigen Aufruf der DrawImage-Routine mehrere Grafik- symbole in dem entsprechenden RastPort zu zeichnen. Das letzte Element der Liste muß an dieser Stelle wie immer den Wert NULL haben. Offset C (intuition/intuition.h) Modula-2 (Intuition) struct IntuiMessage { IntuiMessage = RECORD struct Message ExecMessage; ULONG Class; USHORT Code; USHORT Qualifier; APTR IAddress; SHORT MouseX; SHORT MouseY; ULONG Seconds; ULONG Micros; struct Window *IDCMPWindow; struct IntuiMessage } execMessage:Message; class: IDCMPFlagsSet; code:CARDINAL; qualifier:QualifierSet; Address: ADDRESS; mouseX:INTEGER; mouseY:INTEGER; seconds: LONGCARD; micros:LONGCARD; idempWindow:WindowPir; specialLink:IntuiMessagePtr; *SpecialLink Assembler Präfix: in Datenstrukturenreferenz »Intuition«: FatIntuiMessage, IntuitionBase, IntuiMessage, Window. Routinenreferenz »Exec«: GetMsg, ReplyMsg. > Beschreibung Die I/ntuiMessage-Datenstruktur ist eine Erweiterung einer ExecMessege-Datenstruktur. Sie ist eine vollständige Systemnachricht zur Meldung von Ereignissen, die im Zusammenhang mit der »intuition.library« passieren, wie beispielsweise die Aktivierung eines Gadgets. I ExecMessage 0x0000 (0) I Class 0x0014 (20) Hier ist eine ExecMessage-Datenstruktur eingebunden. Hier stehen die /DCMP-Flags des nächsten eingetragenen Ereignisses zur Abfrage bereit. Eine genaue Beschreibung der/DCMP-Flags finden Sie im Abschnitt »Wichtige Flaggs der Intuition-Library«. Code 0x0018 (24) Qualifier 0x001A (26) IAddress 0x001C (28) MouseX 0x0020 (32) MouseY 0x0022 (34) Seconds 0x0024 (36) Micros 0x0028 (40) IDCMPWindow 0x002C (44) SpecialLink 0x0030 (48) IntuiText Offset C (intuition/intuition.h) Hex Dez struct IntuiText Hier können Zusatzdaten, wie beispielsweise ASCII- oder Raw-Code einer gedrückten Taste stehen. Um welchen Para- meter es sich dabei handelt, wird durch die IDCMP-Flags in Class bestimmt. Handelt es sich um eine Tastatureingabe, so kann diesem Wert entnommen werden, welche zusätzlichen Kontrollta- sten (, , , etc.) zur gleichen Zeit gedrückt waren. Die genauen Werte der einzelnen Kontrolltasten finden Sie in der Beschreibung der /nputEvent-Datenstruk- tur. Ein Adreßzeiger auf die Datenstruktur des zugehörigen Dis- playelements. Wurde beispielsweise ein Gadget aktiviert, so steht hier der Adreßzeiger auf die entsprechende Gadget- Datenstruktur. Die x-Koordinate des Mauszeigers, relativ zur linken oberen Ecke des zugehörigen Windows, zum Zeitpunkt des Ereig- nisses. Die y-Koordinate des Mauszeigers, relativ zur linken oberen Ecke des zugehörigen Windows, zum Zeitpunkt des Ereig- nisses. Sekundenanteil der Systemzeit zum Zeitpunkt des Ereignis- ses. Mikrosekundenanteil (zwischen 0 und 999) der Systemzeit zum Zeitpunkt des Ereignisses. Ein Adreßzeiger auf die Window-Datenstruktur des Win- dows, zu dem diese Nachricht gehört. Systeminterner Adreßzeiger auf weitere vorliegende /ntui- Message-Datenstrukturen in der Message-Liste. Modula-2 (Intuition) IntuiText = { RECORD 0000 0 UBYTE FrontPen; frontPen:UByte; 0001 1 UBYTE BackPen; backPen:UByte; 0002 2 UBYTE DrawMode; drawMode:DrawModeSet; 0004 4 SHORT LeftEdge; leftEdge:INTEGER; 0006 6 SHORT TopEdge; topEdge:INTEGER; 0008 8 struct TextAttr *ITextFont; iTextFont:TextAttrPtr; 000C 12 UBYTE *IText; iText: ADDRESS; Offset C (intuition/intuition.h) Modula-2 (Intuition) }; Assembler Datenstrukturenreferenz struct IntuiText *NextText; nextText:IntuiTextPtr; END; Präfix: it_ »Intuition«: Gadget, IntuiText, Requester. »Intuition«: AutoRequest, BuildSysRequest, Routinenreferenz ___ > Beschreibung PrintIText. Die /ntuiText-Datenstruktur definiert einen Text (samt seiner Eigenschaften wie Schriftart und -stil), der durch die PrintIText-Routine ausgegeben werden kann. 4 m FrontPen 0x0000 (0) BackPen 0x0001 (1) DrawMode 0x0002 (2) LeftEdge 0x0004 (4) TopEdge 0x0006 (6) ITextFont 0x0008 (8) IText 0x000C (12) NextText 0x0010 (16) Die Nummer des Farbregisters, dessen Inhalt beim Schrei- ben des Textes als Vordergrundfarbe verwendet wird. Die Nummer des Farbregisters, dessen Inhalt beim Schrei- ben des Textes als Hintergrundfarbe verwendet wird. Der Zeichenmodus, mit dem der Text geschrieben wird. Zur Verfügung stehen JAMI/ (Schreiben des Textes mit der Vor- dergrundfarbe FrontPen), JAM2 (zusätzliches Beschreiben der Umgebung der Buchstaben mit der Hintergrundfarbe BackPen) und XOR (Invertieren des Textes). Die zu der x-Koordinate, die beim Aufruf in der Print/Text- Routine angegeben wird, relative x-Koordinate der oberen linken Ecke der Zeichenkette. Die zu der y-Koordinate, die beim Aufruf in der PrintIText- Routine angegeben wird, relative y-Koordinate der oberen linken Ecke der Zeichenkette. Ein Adreßzeiger auf eine TextAttr-Datenstruktur, die die Informationen über den zu verwendenden Zeichensatz ent- hält. Ist dieser Wert NULL, so wird der Default-Zeichensatz verwendet. Ein Adreßzeiger auf die auszugebende, Null-terminierte Zeichenkette. Ein Adreßzeiger auf weitere /ntuiText-Datenstrukturen, die mit dem gleichen Aufruf auch noch ausgegeben werden sollen. Steht hier NULL, so war dies die letzte /IntuiText- Datenstruktur. IntuitionBase C (intuition/intuitionbase.h) Modula-2 (Intuition) struct IntuitionBase Offset Hex Dez 0000 0 0022 34 0034 52 0038 56 003C 60 0040 64 0044 68 0046 70 0048 72 004C 16 0050 80 0052 82 0054 84 0056 86 0058 88 005C 92 0060 96 0064 100 0068 104 006C 108 0070 112 0074 116 0075 117 0076 118 0077 119 0078 120 007A 122 007C 124 007E 126 00E2 226 00EA | 234 0112 274 013A | 314 0162 354 018A | 394 01BA | 442 01C0 | 464 01C4 | 468 01C8 | 472 struct Library LibNode; struct View ViewLord; struct Window *ActiveWindow; struct Screen *ActiveScreen; struct Screen *FirstScreen; ULONG Flags; WORD MouseY; WORD MouseX; ULONG Seconds; ULONG Micros; WORD MinXMouse; WORD MaxXMouse; WORD MinYMouse; WORD MaxYMouse; ULONG StartSecs; ULONG StartMicros; APTR SysBase; struct GfxBase *GfxBase; APTR LayersBase; APTR ConsoleDevice; USHORT *APointer; BYTE APtrHeight; BYTE APtrWidth; BYTE AXOffset; BYTE AYOftset; USHORT MenuDrawn; USHORT MenusSelected; USHORT OptionLbist; struct RastPort MenuRPort; struct TmpRas MenuTmpRas; struct ClipRect ItemCRect; struct ClipRect SubCRect; struct BitMap IBitMap; struct BitMap SBitMap; struct IOStdReq InputRequest; struct Interrupt InputInterrupt; struct Remember *EventKey; struct InputEvent *IEvents; SHORT EventCount; IntuitionBase = RECORD libNode:Library; viewLord: View; activeWindow:WindowPitr; activeScreen:ScreenPtr; firstScreen:ScreenPitr; flags:LONGSET, mouseY:INTEGER; mouseX:INTEGER; seconds:LONGCARD; micros: LONGCARD; minXMouse:INTEGER; maxXMouse:INTEGER; minYMouse:INTEGER; maxYMouse:INTEGER; startSecs: LONGCARD; startMicros:- LONGCARD; sysBase: ADDRESS; gfxBase:GfxBasePtr; layersBase: ADDRESS; consoleDevice: ADDRESS; aPointer- ADDRESS; aPtrHeight:UByte; aPtrWidth:[0..16]; aXOffset:UByte; aYOffset:UByte; menuDrawn:CARDINAL; menuSelected:CARDINAL; optionList:CARDINAL; menuRPort:RastPort; menuTmpRas:TmpRas; itemCRect:ClipRect; subCRect:ClipRect; iBitMap:BitMap; sBitMap:BitMap; inputRequest:IOStdReg; inputlInterrupt:Interrupt; eventKey:RememberPir; iEvents: ADDRESS; eventCount:INTEGER; struct InputEvent IEBuffer[4]; struct Gadget *ActiveGadget; struct PropInfo *ActivePInfo; struct Image *Activelmage; struct GListEnv GadgetEnv; struct GadgetInfo GadgetInfo; struct Point KnobOffset; struct Window *getOK Window; struct IntuiMessage *getOK Message; USHORT setWExcept; USHORT GadgetReturn; USHORT StateReturn; struct RastPort *RP; struct TmpRas ITmpRas; struct Region *OldClipRegion; struct Point OldScroll; struct IBox IFrame; SHORT hthick; SHORT vthick; VOID (*frameChange)(); VOID (*sizeDrag)(); struct Point FirstPt; struct Point OldPt; struct Gadget *SysGadgets[16]; struct Image *ChecklImagel[2]; struct Image *Amigalcon/2]; USHORT apattern[38]; USHORT bpattern[4]; USHORT *IPointer; BYTE IPtrHeight; BYTE IPtrWidth; BYTE IXOffset; BYTE IYOffset; LONG DoubleSeconds; LONG DoubleMicros; on C (intuition/intuitionbase.h) Modula-2 (Intuition) ieBuffer: ARRAY [0..3] OF InputEvent; activeGadget:GadgetPtr; activePInfo:PropInfoPtr; activelmage:ImagePtr; gadgetEnv:GListEnv; gadgetInfo:GadgetInfo; knobOffset:Point; getOKWindow:WindowPtr; getOKMessage: IntuiMessagePtr; setWExcept:CARDINAL; gadgetReturm:CARDINAL; stateReturn:CARDINAL; ıp:RastPortPtr; iTmpRas:TmpRas; oldClipRegion:RegionPtr; oldScroll:Point; iFrame:IBox; hthick:INTEGER; vthick:INTEGER; frameChange:PROC; sızeDrag:PROC; firstPt:Point; oldPt:Point; sysGadgets: ARRAY [0..15] OF GadgetPtr; checkImage: ARRAY [0..1] OF ImagePtr; amigalcon: ARRAY [0..1] OF ImagePtr; aPattern: ARRAY [0..7] OF CARDINAL; bPattern: ARRAY [0..3] OF CARDINAL; iPointer- ADDRESS; iPtrHeight:UByte; iPtrWidth:[0..16]; iXOffset:UByte; iY Offset:UByte; doubleSeconds:LONGINT,; doubleMicros:LONGINT,; Offset C (intuition/intuitionbase.h) 0346 0348 034A 034C 034E 0350 0352 0354 0356 0358 035A 035C 035E 0360 0362 0364 036C 0370 0374 0376 0378 037A 037C 0380 0382 0384 0386 O3AE 03B0 03B4 03B8 O3EC 03F0 03F4 03F8 03FA 0408 BYTE WBorLeft[2]; BYTE WBorTop[2]; BYTE WBorkightf2]; BYTE WBorBottom[2]; BYTE BarVBorder[2]; BYTE BarHBorder/2]; BYTE MenuVBorder/2]; BYTE MenuHbBorderl2]; USHORT colord; USHORT color]; USHORT color2; USHORT color3; USHORT color17; USHORT color18; USHORT color19; struct TextAttr SysFont; struct Preferences *Preferences; struct DistantEcho *Echoes; WORD ViewlnitX; WORD ViewlnitY; SHORT CursorDX; SHORT CursorDY,; struct KeyMap *KeyMap; SHORT MouseY Minimum; SHORT ErrorX; SHORT ErrorY; struct timerequest IOExcess; SHORT HoldMinYMouse; struct MsgPort *WBPort; struct MsgPort *jqd_FNKUHDPOort; struct IntuiMessage WBMessage; struct Screen *HitScreen; struct SimpleSprite *SimpleSprite; struct SimpleSprite * AttachedSSprite; BOOL GotSpritel; struct List SemaphorelLb6ist; struct SignalSemaphore Modula-2 (Intuition) wBorlLeft, wBorTop, wBorRight, wBorBottom, barV Border, barHBorder, menuVBorder, menuHBorder: ARRAY [0..1] OF Byte; color0:CARDINAL; colorl:CARDINAL; color2:CARDINAL; color3:CARDINAL; color17:CARDINAL; color18:CARDINAL; color19:CARDINAL; sysFont:TextAttr; preferences:PreferencesPtr; echoes: ADDRESS; viewlnitX:INTEGER; viewlnitY:INTEGER; cursotDX:INTEGER; cursorDY:INTEGER; keyMap:KeyMapfPtr; mouseY Minimum:INTEGER; errorX:INTEGER; errorY:INTEGER; 1oExcess:IOTimer; holdMinYMouse:INTEGER; wbPort:MsgPortPtr; fnkuhdPort:MsgPortPtr; wbMessage:IntuiMessage; hitScreen:ScreenPir; simpleSprite: SimpleSpritePtr; attachedSSprite: SimpleSpritePtr; gotSpritel:BOOLEAN; semaphorelList:List; iSemaphore: ARRAY [0..6] OF Offset C (intuition/intuitionbase.h) Modula-2 (Intuition) ISemaphore[7]; SignalSemaphore; WORD MaxDisplayHeight; maxDisplayHeight:INTEGER; WORD MaxDisplayRow; maxDisplayRow:INTEGER; WORD MaxDisplayWidth; reserved: ARRAY [0..7] OF ULONG Reserved[7]; LONGCARDB; b Assembler Präfix: ib_ In Assembler sind nur die ersten fünf Komponenten dieser systeminternen Datenstruktur definiert. Datenstrukturenreferenz Keine. Routinenreferenz »Intuition«: LocklBase, OpenIntuition, UnLocklBase. "= T> Beschreibung Diese systeminterne Datenstruktur enthält einige Daten, die bei der Fehlersuche helfen können. Um zu verhindern, daß Werte verändert werden, während Sie sich diese ansehen, rufen Sie bitte vorher die LocklIBase-Routine auf. (Den Adreßzeiger auf diese Datenstruktur erhalten Modula-2-Programmierer durch die Routine OpenIntuition.) Haben Sie genug gesehen, können Sie durch UnLocklBase die IntuitionBase-Datenstruktur wieder freigeben. Da es nicht gewährleistet ist, daß sich diese Parameter in zukünftigen Versionen nicht verändern, sollten sie von Programmen nicht benutzt, auf gar keinen Fall aber verändert werden. I LibNode 0x0000 (0) Ein Adreßzeiger auf die Library-Datenstruktur, die für die Einbindung der »intuition.library« in das System zuständig ist. Eine genaue Beschreibung dieser Datenstruktur finden Sıe im Kapitel über »Exec«. 1 ViewLord 0x0022 (34) Einbindung einer View-Datenstruktur, die die Definition des Gesamtdisplays übernimmt. I ActiveWindow 0x0034 (52) Ein Adreßzeiger auf die Window-Datenstruktur des momen- tan aktiven Fensters. 4 ActiveScreen 0x0038 (56) Ein Adreßzeiger auf die Screen-Datenstruktur des momen- tan aktiven Bildschirms. 1 FirstScreen 0x003C (60) Ein Adreßzeiger auf die Screen-Datenstruktur des in Vorder- grund stehenden Bildschirms. I Flags 0x0040 (64) Eine systeminterne Kombination von verschiedenen Flags der »intuition.library«. 1 MouseY 0x0044 (68) Die absolute y-Koordinate der augenblicklichen Position des Mauszeigers. 4 u 4 MouseX 0x0046 (70) Seconds 0x0048 (72) Micros 0x004C (76) Die absolute y-Koordinate der augenblicklichen Position des Mauszeigers. Der Sekundenanteil der Systemzeit zum Zeitpunkt des aktu- ellsten Ereignisses (Inputevent). Der Mikrosekundenanteil der Systemzeit zum Zeitpunkt des aktuellsten Ereignisses (Inputevent). ACHTUNG: Alle folgenden Parameter dienen nur zur Fehlersuche! Ein Verändern der folgenden Werte kann nach einer ungewissen Anzahl von Taktzyklen einen nicht wünschenswerten Systemzustand her- aufbeschwören. 4 u 2 Die WE 0 oo MinXMouse 0x0050 (80) MaxXMouse 0x0052 (82) MinYMouse 0x0054 (84) MaxYMouse 0x0056 (86) StartSecs 0x0058 (88) StartMicros 0x005C (92) SysBase 0x0060 (96) GfxBase 0x0064 (100) LayersBase 0x0068 (104) ConsoleDevice 0x006C (108) APointer 0x0070 (112) APtrHeight 0x0074 (116) APtrWidth 0x0075 (117) AXOffset 0x0076 (118) AYOffset 0x0077 (119) Linker Begrenzungswert für den Bereich, in dem der Benut- zer den Mauszeiger bewegen kann. Rechter Begrenzungswert für den Bereich, in dem der Be- nutzer den Mauszeiger bewegen kann. Oberer Begrenzungswert für den Bereich, in dem der Benut- zer den Mauszeiger bewegen kann. Unterer Begrenzungswert für den Bereich, in dem der Benut- zer den Mauszeiger bewegen kann. Der Sekundenanteil der Zeitdauer, die zwischen zwei »Maus-Klicks« liegen darf, damit dieser Vorgang als »Doppel-Klick« erkannt wird. Der Mikrosekundenanteil der Zeitdauer, die zwischen zwei »Maus-Klicks« liegen darf, damit dieser Vorgang als »Doppel-Klick« erkannt wird. Ein Adreßzeiger auf die Basisadresse des Systems, also auf die entsprechende Exec-Datenstruktur. Ein Adreßzeiger auf die aktuelle GfxBase-Datenstruktur. Ein Adreßzeiger auf die aktuelle LayersBase-Datenstruktur. Ein Adreßzeiger auf das aktuelle Console-Device. Ein Adreßzeiger auf die Grafikdaten des momentan aktiven Mauszeigers. Die Höhe des momentan aktiven Mauszeigers. Die Breite des momentan aktiven Mauszeigers. Der Abstand des Hot-Spot vom linken Rand des momentan aktiven Mauszeigers. Der Abstand des Hot-Spot vom oberen Rand des momentan aktiven Mauszeigers. 4 I 4 MenuDrawn 0x0078 (120) Menuselected 0x007A (122) OptionList 0x007C (124) Die Menünummer des momentan gezeichneten Pull-down- Menüs. Wird zur Zeit kein Pull-down-Menü ausgegeben, so steht hier OxFFFF. Die Menünummer des momentan ausgewählten Menüpunk- tes. Ist zur Zeit kein Menüpunkt ausgewählt, so steht hier OxFFFF. Zusatzwert für die Options-Liste der Pull-down-Menüs. BEACHTE: Die folgenden sechs Parameter beinhalten Informationen über den Rastport, der zur Darstellung der momentanen Menüs benutzt wird. Dabei handelt es sich im Normalfall um Kopien der entsprechenden Werte des augenblicklich aktiven Screens. 4 4 MenuRPort 0x007E (126) MenuTmpRas 0x00E2 (226) ItemCRect 0x00EA (234) SubCRect 0x0112 (274) IBitMap 0x013A (314) SBitMap 0x0162 (354) InputRequest 0x018A (394) InputInterrupt 0x01BA (442) EventKey 0x01C0 (464) IEvents 0x01C4 (468) EventCount 0x01C8 (472) IEBuffer 0x01CA (474) ActiveGadget 0x0232 (562) ActivePInfo 0x0236 (566) Eine eingebundene RastPort-Datenstruktur, die beim Zeich- nen der Menüs benutzt wird. Eine eingebundene TmpRas-Datenstruktur, die zu MenuR- Port gehört. Eine eingebundene ClipRect-Datenstruktur, die bei der Ausgabe von Pull-down-Menüs (Menuitems) verwendet wird. Eine eingebundene ClipRect-Datenstruktur, die bei der Ausgabe von Untermenüs (Menusubitems) verwendet wird. Eine eingebundene BitMap-Datenstruktur, die bei der Aus- gabe von Pull-down-Menüs (Menuitems) verwendet wird. Eine eingebundene BitMap-Datenstruktur, die bei der Aus- gabe von Untermenüs (Menusubitems) verwendet wird. Eine eingebundene /OStdReg-Datenstruktur, die für das aktuelle Input-Device gültig ist. Eine eingebundene /nterrupt-Datenstruktur, die für das aktuelle Input-Device gültig ist. Ein Adreßzeiger auf eine Remember-Datenstruktur, die für dynamisch angelegte Input-Events verwendet wird. Ein Adreßzeiger auf die zu EventKey gehörende /InputEvent- Datenstruktur. Ein Zähler für fest angelegte Input-Events. Eine Einbindung von vier InputEvent-Datenstrukturen, die für fest angelegte Input-Events verwendet werden. Ein Adreßzeiger auf die Gadget-Datenstruktur des momen- tan aktivierten Gadgets. Handelt es sich bei dem momentan aktivierten Gadget um ein Proportional-Gadget, so steht hier ein Adreßzeiger auf die zugehörige PropInfo-Datenstruktur. Ü Activelmage 0x023A (570) GadgetEnv 0x023E (574) GadgetInfo 0x0268 (616) KnobOffset 0x028C (652) GetOKWindow 0x0290 (656) GetOKMessage 0x0294 (660) SetWExcept 0x0298 (664) GadgetReturn 0x029A (666) StateReturn 0x029C (668) RP 0x029E (670) ITmpRas 0x02A2 (674) OldClipRegion 0x02AA (682) OldScroll 0x02AE (686) IFrame 0x02B2 (690) HtHick 0x02BA (698) VtHick 0x02BC (700) Wird zu dem momentan aktivierten Gadget gerade ein Image ausgegeben, so steht hier ein Adreßzeiger auf die zugehörige Image-Datenstruktur. Eine eingebundene GListEnv-Datenstruktur, in der nähere Informationen über die Umgebung des momentan aktiven Gadgets abgelegt werden. Eine eingebundene GadgetInfo-Datenstruktur, in der wei- tere Informationen über momentan aktive Gadgets abgelegt werden. Wurde ein Proportional-Gadget aktiviert, so steht in dieser eingebundenen Point-Datenstruktur die Position des Maus- zeigers (zum Zeitpunkt der Aktivierung) innerhalb des Knopfes. Laut [KRA] gehören die GerOkxxx-Komponenten zu den »verify functions«. Eine durchaus zulässige Interpretation ist, daß damit die Intuition-Funktionen gemeint sind, die zu den IDCMP-Flags SIZEVERIFY und REOVERIFY oder zu dem Gadget-Flag RELVERIFY gehören. Ein Adreßzeiger auf eine /ntuiMessage-Datenstruktur (siehe auch GetOkWindow). Die einzige auftreibbare Dokumentation [KRA] zu den nächsten drei Komponenten besagt, daß sie sich auf »State Machine« beziehen. Was damit gemeint sein Könnte, über- lassen wir Ihrer persönlichen Intuition. (siehe SerWExept) (siehe SerWExept) Ein Adreßzeiger auf die RastPort-Datenstruktur, die bei der Ausgabe von Gadgets, Titelleisten, etc. verwendet wird. Einbindung einer zu RP gehörenden TmpRas-Datenstruktur. Ein Adreßzeiger auf eine zu RP gehörenden Region-Daten- struktur. Eine eingebundene Point-Datenstruktur, in der bei Verschie- bungen die alte Position zwischengespeichert wird. Eine eingebundene /Box-Datenstruktur, in der beim Ver- schieben, Verkleinern oder Vergrößern von Fenstern die vorherige Position und Größe des Fensters zwischengespei- chert wird. Die Höhe der horizontalen Fensterränder. Die Breite der vertikalen Fensterränder. FrameChange 0x02BE (702) SizeDrag 0x02C2 (706) FirstPt 0x02C6 (710) OldPt 0x02CA (714) SysGadgets 0x02CE (718) CheckImage 0x030E (782) Amigalcon 0x0316 (790) APattern 0x031E (798) BPattern 0x032E (814) IPointer 0x0336 (822) IPtrHeight 0x033A (826) IPtrWidth 0x033B (827) IXOffset 0x033C (828) IYOffset 0x033D (829) Ein Adreßzeiger auf eine systeminterne Routine, die /Frame verändern kann. Ein Adreßzeiger auf eine von zwei ssysteminternen Routinen, je nachdem, ob die Größe des Fensters verändert oder es verschoben wird. Eine eingebundene Point-Datenstruktur, in der bei Größen- veränderungen von Fenstern die ursprüngliche Position der unteren rechten Ecke, bei Verschiebungen die der oberen linken Ecke zwischengespeichert wird. Eine eingebundene Point-Datenstruktur, in der bei Größen- veränderungen von Fenstern die zuletzt angezeigte Position der unteren rechten Ecke, bei Verschiebungen die der oberen linken Ecke zwischengespeichert wird. An dieser Stelle stehen 16 Adreßzeiger auf verschiedene Gadget-Datenstrukturen, die die acht verschiedenen Systemgadgets für den HiRes- und LoRes- Modus definie- ren. Die Reihenfolge der Systemgadgets ist dabei: WUPFRONT, WDOWNBACK, SIZING, CLOSE, WDRAGGING, SUPFRONT, SDOWNBACK und SDRAG- GING. Eine genauere Beschreibung finden Sie bei der Be- schreibung von GadgerT'ype der Gadget-Datenstruktur. Zwei Adreßzeiger auf die Image-Datenstrukturen, die für die Modi HiRes und LoRes die Checkmark-Grafiksymbole defi- nieren. Zwei Adreßzeiger auf die /mage-Datenstrukturen, die für die Modi HiRes und LoRes die Grafiksymbole für die Amiga- taste (zur Darstellung in den Menüs) definieren. Hier stehen acht Muster (die etwas mit dem Verschieben von Fenstern zu tun haben könnten ???). Hier stehen vier Muster (die auch etwas mit dem Verschie- ben von Fenstern zu tun haben könnten ??). Ein Adreßzeiger auf die Grafikdaten des Default-Mauszei- gers. Die Höhe des Default-Mauszeigers. Die Breite des Default-Mauszeigers (muß kleiner oder gleich 16 sein). Der Abstand des Hot-Spot vom linken Rand des Default- Mauszeigers. Der Abstand des Hot-Spot vom oberen Rand des Default- Mauszeigers. 1] DoubleSeconds 0x033E (830) m DoubleMicros 0x0342 (834) Der Sekundenanteil der Zeitdauer, die beim Default-Maus- zeiger zwischen zwei »Maus-Klicks« liegen darf, damit dieser Vorgang als »Doppel-Klick« erkannt wird. Der Mikrosekundenanteil der Zeitdauer, die beim Default- Mauszeiger zwischen zwei »Maus-Klicks« liegen darf, damit dieser Vorgang als »Doppel-Klick« erkannt wird. ACHTUNG: Die folgenden acht Werte sind jeweils doppelt vorhanden. Der erste gilt für den HiRes-, der zweite für den LoRes-Modus. u u ce co co co 0 Ü WBorLeft 0x0346 (838) WBorTop 0x0348 (840) WBorRight 0x034A (842) WBorBottom 0x034C (844) BarVBorder 0x034E (846) BarHBorder 0x0350 (848) MenuVBorder 0x0352 (850) MenuHBorder 0x0354 (852) Color0 0x0356 (854) Color1 0x0358 (856) Color2 0x035A (858) Color3 0x035C (860) Color17 0x035E (862) Color18 0x0360 (864) Color19 0x0362 (866) SysFont 0x0364 (868) Preferences 0x036C (876) Die Breite der linken Fensterränder. Dieser Wert gilt für alle Fenster, die auf dem Workbench-Screen geöffnet werden. Die Höhe der oberen Fensterränder. Dieser Wert gilt für alle Fenster, die auf dem Workbench-Screen geöffnet werden. Die Breite der rechten Fensterränder. Dieser Wert gilt für alle Fenster, die auf dem Workbench-Screen geöffnet wer- den. Die Höhe der unteren Fensterränder. Dieser Wert gilt für alle Fenster, die auf dem Workbench-Screen geöffnet werden. Die Höhe der vertikalen Bildschirmränder. Die Breite der horizontalen Bildschirmränder. Die Höhe der vertikalen Ränder der Pull-down-Menüs. Die Breite der horizontalen Ränder der Pull-down-Menüs. Der Farbwert, der als Hintergrundfarbe verwendet wird. Der Farbwert, der als Vordergrundfarbe (z.B. Text und Windows) verwendet wird. Der Farbwert, der als dritte Farbe (z.B. in den Depth-Gad- gets) verwendet wird. Der Farbwert, der als vierte Farbe (z.B. für den Textcursor) verwendet wird. Der Farbwert, der als erste Farbe für die Darstellung des Mauszeigers verwendet wird. Der Farbwert, der als zweite Farbe für die Darstellung des Mauszeigers verwendet wird. Der Farbwert, der als dritte Farbe für die Darstellung des Mauszeigers verwendet wird. Einbindung einer TextAttr-Datenstruktur, die den System- zeichensatz definiert. Ein Adreßzeiger auf die momentan gültige Preferences- Datenstruktur. [ Echoes 0x0370 (880) ViewInitX 0x0374 (884) ViewInitY 0x0376 (886) CursorDX 0x0378 (888) CursorDY 0x037A (890) KeyMap 0x037C =) MouseY Minimum 0x0380 (896) ErrorX 0x0382 (898) ErrorY 0x0384 (900) IOExcess 0x0386 (902) HoldMinYMouse 0x0386 (902) WBPort 0x03B0 (944) iqd_ FNKUHDPort 0x03B4 (948) WBMessage 0x03B8 (952) HitScreen 0x03EC (1004) SimpleSprite 0x03F0 (1008) AttachedSSprite 0x03F4 (1012) GotSpritel 0x03F8 (1016) SemaphoreList 0x03FA (1018) Ein Adreßzeiger auf eine sehr systeminterne Datenstruktur (wir haben sie noch nicht gefunden). Der x-Initialisierungswert für alle Views. Der y-Initialisierungswert für alle Views. Dieser Wert gibt den Übersetzungsfaktor der Mausbewe- gungen in x-Richtung an. Siehe auch unter PointerTicks der Preferences-Datenstruktur. | Dieser Wert gibt den Übersetzungsfaktor der Mausbewe- gungen in y-Richtung an. Siehe auch unter PointerTicks der Preferences-Datenstruktur. Ein Adreßzeiger auf die KeyMap-Datenstruktur, die bei Tastatureingaben in String-Gadgets verwendet wird. Die einzige auftreibbare Dokumentation [KRA] zu diesem Wert lautet »magic«. Also lieber die Finger davon lassen ... Wird zur Verfolgung der Mausbewegung in x-Richtung benutzt — aber wie? Wird zur Verfolgung der Mausbewegung in y-Richtung benutzt — aber wie? Eine eingebundene TimeRequest-Datenstruktur, mit deren Hilfe »Intuition« auf den Timer-Device zugreifen kann. Im Moment spricht nichts dagegen, daß dieser Wert zu MouseYMinimum gehören könnte. Ein Adreßzeiger auf den Messageport der Workbench. Ein Adreßzeiger auf den Messageport des »Final Nuclear Knockout Unit Handling Device« (zumindest so lange, bis uns jemand etwas anderes beweist) ??? Eine eingebundene /ntuiMessage-Datenstruktur, für die Nachrichten von und zum Workbench-Fenster. Ein Adreßzeiger auf eine Screen-Datenstruktur. Dieser wird verwendet, wenn ein Screen in den Vordergrund geholt wird. Ein Adreßzeiger auf eine SimpleSprite-Datenstruktur, deren Bedeutung hier nicht ganz klar ist. (Siehe SimpleSprite) Ein Boolescher Ausdruck, der wahrscheinlich in einem be- stimmten Zusammenhang mit SimpleSprite und Attached- Sprite steht. Eine eingebundene List-Datenstruktur, die zu /Semaphore einen Header bildet. ISemaphore 0x0408 (1032) MaxDisplayHeight 0x054A (1354) MaxDisplayRow 0x054C (1356) MaxDisplayWidth 0x054E (1358) Reserved 0x0550 (1360) Ein Vorrat von sieben SignalSemaphore-Datenstrukturen, die für interne Zwecke bereitgehalten werden. Hier steht im Interlace-Modus die Anzahl der Bildzeilen, die dem System zur Verfügung stehen (400 oder 512). Hier steht der Wert aus MaxDisplayHeight, um eins dekre- mentiert. Hier steht eine Kopie des Wertes NormalDisplayCol aus der GFXBase-Datenstruktur. Reservierter Bereich für zukünftige Erweiterungen. Menu Offset C (intuition/intuition.h) Modula-2 (Intuition) Hex Dez struct Menu Menu = { RECORD 0000 0 struct Menu *NextMenu; nextMenu:MenuPtr; 0004 4 SHORT LeftEdge; leftEdge:INTEGER; 0006 6 SHORT TopEdge; topEdge:INTEGER; 0008 8 SHORT Width; width:INTEGER; 000A 10 SHORT Height; height:INTEGER; 000C 12 USHORT Flags; flags:BITSET, 000E 14 BYTE *MenuName; menuName: ADDRESS; 0012 18 struct Menultem *Firstltem; firstItem:MenultemPtr; 0016 22 SHORT JazzX; jazzX:INTEGER; 0018 24 SHORT JazzY; jazzY:INTEGER; 001A 26 SHORT BeatX; beatX:INTEGER; VO1C 28 SHORT BeatY; beatY:INTEGER; 001E 30 | }; END; Assembler Präfix: mu_ Datenstrukturenreferenz »Intuition«: Menu, Window. Routinenreferenz »Intuition«: ClearMenustrip, ItemAdress, OffMenu, L_._> Beschreibung OnMenu, SetMenustrip. In einer linearen Liste, bestehend aus miteinander verketteten Menu-Datenstrukturen, werden die einzelnen Menüpunkte der Menütitelleiste zu einem Window definiert (wie zum Beispiel die Menüpunk- te »Workbench«, »Disk« und »Special« der Workbench). Die dazugehörigen Pull-down-Menüs werden jedoch durch Menultem-Datenstrukturen definiert. 1 NextMenu 0x0000 (0) Ein Adreßzeiger auf die nächste Menu-Datenstruktur in der linearen Liste von angelegten Menüpunkten. Ist der Wert NULL, so ist dies das Ende der Liste. I LeftEdge 0x0004 (4) Die zum linken Bildschirmrand relative x-Koordinate der linken, oberen Ecke des zu diesem Menütitel gehörigen Auswahlkastens in der Menütitelleiste. I TopEdge 0x0006 (6) Die zum oberen Bildschirmrand relative y-Koordinate der linken, oberen Ecke des zu diesem Menütitel gehörigen Auswahlkastens in der Menüititelleiste. In den vorliegenden Versionen wird dieser Parameter von der »intuition.library« noch nicht beachtet. Es wird statt dessen die y-Koordinate des oberen Bildschirmrandes als aktueller Wert benutzt. I Width 0x0008 (8) Die Breite des zu diesem Menütitel gehörigen Auswahl- kastens in der Menüititelleiste. I Height 0x000A (10) Die Breite und die Höhe des zu diesem Menüititel gehörigen Auswahlkastens in der Menütitelleiste. In den vorliegenden Versionen wird der Parameter Height von »Intuition« noch nicht beachtet. Es wird statt dessen die Höhe der Bildschirm- titelleiste als aktueller Wert benutzt. I Flags 0x000C (12) Eine 2-Byte-Marke, bei der folgende gesetzte Bits eine Bedeutung haben: C Modula-2 Hex Beschreibung MENUENABLED menuEnabled 0001 Dieses Pull-down-Menü ist aktiviert. MIDRAWN miDrawn 0100 Dieses Pull-down-Menü wird mo- mentan auf der Titelleiste dargestellt. _] MenuName 0x000E (14) Ein Adreßzeiger auf eine Null-terminierte Zeichenkette, die den Titel dieses Menüpunktes enthält. 1 FirstItem 0x0012 (18) Ein Adreßzeiger auf die erste von mehreren miteinander linear verketteten Menultem-Datenstrukturen, die zu diesem Menüpunkt gehören. „1 JazzX 0x0016 (22) Von »Intuition« intern verwendeter Systemparameter. I JazzY 0x0018 (24) Von »Intuition« intern verwendeter Systemparameter. II BeatX 0x001A (26) Von »Intuition« intern verwendeter Systemparameter. 4 BeatY 0x001C (28) Von »Intuition« intern verwendeter Systemparameter. Menultem struct Menultem Menultem = Offset C (intuition/intuition.h) Modula-2 (Intuition) { RECORD struct Menultem *Nextltem; nextltem:MenultemPitr; 0 4 SHORT LeftEdge; 6 SHORT TopEdge; 8 SHORT Width; 10 SHORT Height; 12 USHORT Flags; 14 LONG MutualExclude; mutualExclude:LONGSET; APTR ItemFill; 22 APTR SelectFill; 26 BYTE Command; leftEdge:INTEGER; topEdge:INTEGER; width:INTEGER; height: INTEGER; flags:MenultemFlagsSet; itemFill: ADDRESS; selectFill: ADDRESS; command:CHAR; 28 struct Menultem *Subltem; subltem:MenultemPtr; USHORT NextsSelect; nextSelect:CARDINAL; 34 }; Assembler Datenstrukturenreferenz Routinenreferenz > Beschreibung END; Präfix: mi_ »Intuition«: Menu, Menultem. »Intuition«: ItemAddress, OffMenu, OnMenu. In einer linearen Liste, bestehend aus verketteten Menultem-Datenstrukturen, werden alle Menüpunkte eines einzelnen Pull-down-Menüs definiert (wie zum Beispiel die Menüpunkte »Empty Trash« und »Initialize« im Pull-down-Menü »Disk« der Workbench). Dabei gibt es Action-Menüpunkte, bei denen einmalig etwas ausgeführt wird (z.B. Laden einer Datei) und Artribute-Menüpunkte, bei denen Zustände ein- und ausgeschaltet werden können (z.B. eine besondere Schriftart). Die zu dieser Datenstruktur gehörigen Basismenüpunkte der Menütitelleiste werden durch Menu-Datenstrukturen definiert. 1 Nextltem 0x0000 (0) I LeftEdge 0x0004 (4) I TopEdge 0x0006 (6) U Width 0x0008 (8) Ein Adreßzeiger auf die nächste Menultem-Datenstruktur in der linearen Liste von angelegten Menüpunkten. Ist der Wert NULL, so ist dies das Ende der Liste. Die y-Koordinate der linken, oberen Ecke des Auswahl- kastens zu diesem Menüpunkt, relativ zu dem LeftEdge- Wert in der zugehörigen Menu-Datenstruktur. Die x-Koordinate der linken, oberen Ecke des Auswahl- kastens zu diesem Menüpunkt, relativ zu dem TopEdge- Wert in der zugehörigen Menu-Datenstruktur. Die Breite des zu diesem Menütitel gehörigen Auswahl- kastens in der Menüititelleiste. I Height 0x000A (10) I Flags 0x000C (12) C CHECKIT ITEMTEXT COMMSEQ MENUTOGGLE ITEMENABLED HIGHCOMP HIGHBOX CHECKED ISDRAWN HIGHITEM MENUTOGGLED II MutualExclude 0x000E (14) J ItemFill 0x0012 (18) Die Höhe des zu diesem Menütitel gehörigen Auswahl- kastens in der Menütitelleiste. Eine 2-Byte-Marke mit Informationen über die Art und den Auswahlzustand dieses Menüpunktes. Ein gesetztes Bit hat jeweils die folgende Bedeutung: Modula-2 Hex Beschreibung checklt 0001 Bei gesetztem Bit ist dies ein Attri- bute-, sonst ein Action-Menüpunkt. itemText 0002 Bei gesetztem Bit wird dieser Menü- punkt mit einem Text, sonst mit einem grafischen Symbol dargestellt. commsSeq Dieser Menüpunkt kann auch abge- kürzt über die Tastatur aktiviert werden. menuToggle 0008 Dies ist ein Attribute-Menüpunkt. itemEnabled 0010 Dieser Menüpunkt kann ausgewählt werden. highComp 0040 Bei Auswahl wird dieser Menüpunkt invertiert. highBox 0080 Bei Auswahl wird dieser Menüpunkt umrandet. checked 0100 Ist dies ein Attribute-Menüpunkt, so kann er bei gelöschtem Bit noch ausgewählt werden. isDrawn 1000 Es wird gerade ein Untermenü angezeigt. highltem 2000 Dieser Menüpunkt ist gerade ausgewählt. menuToggled 4000 Dieser Attribute-Menüpunkt ist eingeschaltet. Bei Artribute-Menüpunkten gibt das Bitmuster dieser 4-Byte-Maske an, ob andere Artribute-Menüpunkte dieses Untermenüs noch zugänglich sind, wenn dieser Menüpunkt bereits aktiviert ist. In einem Pull-down-Menü zur Wahl einer Schriftart ist es damit möglich, eine Kombination von bestimmten Schriftarten (wie hoch- und tiefgestellt) zu ver- bieten. Ein gelöschtes Bit bedeutet, daß der korrespondieren- de Menüpunkt dieses Pull-down-Menüs nicht mehr einge- schaltet werden kann. Entsprechend wird bei diesen Menü- punkten das CHECKED-Bit beeinflußt. Dies ist ein Adreßzeiger auf eine /mage- oder IntuiText- Datenstruktur, je nachdem, ob in dem Auswahlkasten eine Grafik oder ein Text ausgegeben wird. Bestimmt wird dies durch das /TEMTEXT-Bit. I SelectFill 0x0016 (22) Dieser Adreßzeiger wird nur benötigt, wenn das AIGH- ITEM-Bit in Flags gesetzt ist. In diesem Fall zeigt dieser Adreßzeiger auf die alternative /mage- oder IntuiText-Da- tenstruktur, die angeben, welche Grafik oder welcher Text bei der Auswahl dieses Menüpunktes ausgegeben wird. I} Command 0x001A (26) Hier steht das alphanumerisches Zeichen, mit dem dieser | Menüpunkt auch über die Tastatur (in Kombination mit der rechten Amiga-Taste) ausgewählt werden kann. Dieses Abkürzen funktioniert jedoch nur, wenn das COMMSEO- Bit in Flags gesetzt ist. ] Subltem 0x001C (28) Dies ist ein Adreßzeiger auf eine weitere Kette von Menu- Item-Datenstruktur, durch die ein weiteres Untermenü defi- niert werden kann. Ist kein solches Untermenü vorhanden, so steht hier Null. 1 NextSelect 0x0020 (32) In dieses Feld wird durch »Intuition« automatisch die Menü- nummer des nächsten, ausgewählten Menüpunktes eingetra- gen. Ist dieser Wert OxFFFF (—-1), so bedeutet dies, daß kein weiterer Menüpunkt ausgewählt ist. NewScreen C (intuition/intuition.h) Modula-2 (Intuition) Hex Dez struct NewScreen NewScreen = { RECORD 0000 0 SHORT LeftEdge; leftEdge:INTEGER; 0002 2 SHORT TopEdge; topEdge:INTEGER; 0004 4 SHORT Width; width:INTEGER; 0006 6 SHORT Height; height:INTEGER; 0008 8 SHORT Depth; depth:INTEGER; 000A 10 UBYTE DetailPen; detailPen:Byte; 000B 11 UBYTE BlockPen; blockPen:Byte; 000€ 12 USHORT ViewModes; viewModes:ViewModeSet; 000E 14 USHORT Type; type:ScreenFlagsSet; 0010 16 struct TextAttr *Font; font: TextAttrPtr; 0014 20 UBYTE *DefaultTitle; defaultTitle- ADDRESS; 0018 24 struct Gadget *Gadgets; gadgets:GadgetPtr; 001C 28 struct BitMap *CustomBitMap; customBitMap:BitMapPtr; 0020 32 }; END; | Assembler Datenstrukturenreferenz Routinenreferenz > Beschreibung Präfix: nS_ Keine. »Intuition«: OpensScreen. Die NewScreen-Datenstruktur wird verwendet, um die Eigenschaften des Screens zu bestimmen, der durch die Routine OpenScreen geöffnet wird. Nach dem Öffnen gehört zu jedem Bildschirm eine Screen- Datenstruktur, die die jeweils aktuellen Parameter beinhaltet. I LeftEdge 0x0000 (0) I TopEdge 0x0002 I Width 0x0004 (4) I Height 0x0006 (6) I Depth 0x0008 (8) I DetailPen 0x000A (10) J BlockPen 0x000B (11) I ViewModes 0x000C (12) 1 Type 0x000E (14) J Font 0x0010 (16) Die x-Koordinate der linken obere Ecke des Bildschirms. Stellen Sie bitte sicher, daß dieser Wert immer Null ist, daein horizontales Verschieben in den vorliegenden Versionen noch nicht implementiert ist. Die y-Koordinate der linken oberen Ecke des Bildschirms. Die Breite des Bildschirms, wobei dieser Wert nur 320 oder 640 sein darf, je nachdem, ob der Darstellungsmodus LoRes oder HiRes ist. Die Höhe des Bildschirms, wobei die Summe aus diesem Wert und TopEdge im Interlace-Modus 512, sonst 256 erge- ben muß. Die Anzahl der BitPlanes, die zu diesem Bildschirm gehö- ren. Also je nach Darstellungsmodus zwischen 1 und 6. Die Nummer des Farbregisters, dessen Inhalt als Farbe für die »Details« verwendet wird, also z.B. für die Einzelheiten in den »Gadgets« und der Schrift in der Titelleiste. Die Nummer des Farbregisters, dessen Inhalt als Farbe für »gröbere« Elemente verwendet wird, also z.B. für das Füllen der Titelleiste. Diese 2-Byte-Marke enthält die ViewMode-Flags, die unter anderem die Auflösung bestimmen. Eine genaue Beschrei- bung dieser Flags finden Sie im Kapitel über »Graphics«. Diese 2-Byte-Marke enthält die Screen-Flags. Eine genaue Beschreibung dieser Flags finden Sie in dem Abschnitt »Wichtige Flags der Intuition-Library«. Ein Adreßzeiger auf eine TextAttr-Datenstruktur. Die in ihr eingestellten Parameter definieren für diesen Bildschirm einen Default-Font (wird in allen Displayelementen, wie z.B. Fenster, als voreingestellte Schriftart verwendet). Steht hier NULL, so wird der in der /IntuitionBase-Datenstruktur voreingestellte Zeichensatz benutzt. I DefaultTitle 0x0014 (20) Adreßzeiger auf eine Null-terminierte Zeichenkette, die als Überschrift in der Titelleiste des Bildschirms erscheint. Steht hier der Wert NULL, so wird kein Text ausgegeben. I Gadgets 0x0018 (24) Dieses Feld muß NULL sein, da es in den vorliegenden Versionen noch keine Verwendung hat. I] CustomBitMap 0x001C (28) Wollen Sie den Displayspeicher zu diesem Bildschirm selbst bestimmen, so setzen Sie an diese Stelle einen Adreßzeiger auf eine von Ihnen vorbereitete BitMap-Datenstruktur. Zusätzlich muß dann das CUSTOMBITMAP-Bit in Types gesetzt werden. NewWindow Offset C (intuition/intuition.h) Modula-2 (Intuition) Hex Dez struct NewWindow NewWindow = { RECORD 0000 0 SHORT LeftEdge; leftEdge:INTEGER; 0002 2 SHORT TopEdge; topEdge:INTEGER; 0004 4 SHORT Width; width:INTEGER; 0006 6 SHORT Height; height:INTEGER; 0008 8 UBYTE DetailPen; detailPen:Byte; 0009 9 UBYTE BlockPen; blockPen:Byte; 000A 10 ULONG IDCMPHlags; idempFlags:IDCMPFlagsSet; 000E 14 ULONG Flags; flags:WindowFlagsSet; 0012 18 struct Gadget *FirstGadget; firstGadget:GadgetPtr; 0016 22 struct Image *CheckMark; checkMark:ImagePitr; 001A 26 UBYTE *Title; title ADDRESS; O01E 30 struct Screen *Screen; screen:ScreenPtr; 0022 34 struct BitMap *BitMap; bitMap:BitMapPtr; 0026 38 SHORT MinW idth; minWidth:INTEGER; 0028 40 SHORT MinHeight; minHeight:INTEGER; 002A 42 USHORT MaxWidth; maxWidth:INTEGER; 002C 44 USHORT MaxHeisht; maxHeight:INTEGER; 002E 46 USHORT Type; type:ScreenFlagset; 0030 48 }; END; Assembler Präfix: nw_ Datenstrukturenreferenz »Workbench«: DrawerData. Routinenreferenz »Intuition«: OpenWindow. Die NewWindow-Datenstruktur wird verwendet, um die Eigenschaften des Fensters festzulegen, das durch die Routine OpenWindow geöffnet wird. Nach dem Öffnen gehört zu jedem Fenster eine Window- Datenstruktur, die die jeweils aktuellen Parameter enthält. I J [ LeftEdge 0x0000 (0) TopEdge 0x0002 (2) Width 0x0004 (4) Height 0x0006 (6) DetailPen 0x0008 (8) BlockPen 0x0009 (9) IDCMPFlags 0x000A (10) Flags 0x000E (14) FirstGadget 0x0012 (18) CheckMark 0x0016 (22) Title 0x001A (26) Screen 0x001E (30) Der Abstand des Fensters vom linken Rand des zugehörigen Bildschirms. Der Abstand des Fensters vom oberen Rand des zugehörigen Bildschirms. Die Breite des Fensters. Die Höhe des Fensters. Die Nummer des Farbregisters, dessen Inhalt als Farbe für die »Details« verwendet wird, also z.B. für die Einzelheiten in den »Gadgets« und der Schrift in der Titelleiste. Die Nummer des Farbregisters, dessen Inhalt als Farbe für »gröbere« Elemente verwendet wird, also z.B. für das Füllen der Titelleiste. Diese 2-Byte-Marke enthält die /IDCMP-Flags, mit denen das zugehörige Window initialisiert wird. Eine genaue Be- schreibung dieser Flags finden Sie indem Abschnitt »Wich- tige Flags der Intuition-Library«. Diese 2-Byte-Marke enthält die Window-Flags, mit denen das zugehörige Window initialisiert wird. Eine genaue Be- schreibung der Window-Flags finden Sie in dem Abschnitt »Wichtige Flags der Intuition-Library«. Ein Adreßzeiger auf eine lineare Liste von verketteten Gad- get-Datenstrukturen, die die Gadgets zu diesem Window de- finieren. Sind keine Gadgets definiert, so steht hier NULL. BEACHTE: Systemgadgets werden über die Window- Flags definiert. Ein Adreßzeiger auf eine /mage-Datenstruktur, die das Checkmark zu dem Menü dieses Windows definiert. Steht hierNULL, so wird das Default-Checkmark (ein Häkchen) in den Pull-down-Menüs verwendet. Ein Adreßzeiger auf eine Null-terminierte Zeichenkette, die in der Titelleiste des Windows ausgegeben wird. Als Zei- chensatz wird der Font des zugehörigen Bildschirms ver- wendet. Ist in Types das Bit CUSTOMSCREEN gesetzt, so steht hier ein Adreßzeiger auf die zugehörige Screen-Datenstruktur. I BitMap 0x0022 (34) 1 MinWidth 0x0026 (38) I MinHeight 0x0028 (40) 1 MaxWidth 0x002A (42) 1 MaxHeight 0x002C (44) O Type 0x002E (46) PenPair Ist in Flags das Refresh-Bit SUPERBITMAP gesetzt, so muß hier ein Adreßzeiger auf eine BitMap-Datenstruktur stehen, die die Grafikdaten des Windows aufnehmen kann. Hat das Fenster ein Sizing-Gadget, so kann es der Benutzer mit dem Sizing-Gadget bis auf diese minimale Breite ver- kleinern. Hat das Fenster ein Sizing-Gadget, so kann es der Benutzer mit dem Sizing-Gadget bis auf diese minimale Höhe verklei- nern. Hat das Fenster ein Sizing-Gadget, so kann es der Benutzer mit dem Sizing-Gadget bis auf diese maximale Breite ver- breitern. Hat das Fenster ein Sizing-Gadget, so kann es der Benutzer mit dem Sizing-Gadget bis auf diese maximale Höhe vergrö- Bern. In dieser 2-Byte-Marke stehen die Screen-Flags zu diesem Window. Eine genaue Beschreibung dieser Flags finden Sie in dem Abschnitt »Wichtige Flags der Intuition-Library«. C (intuition/intuitionbase.h) Modula-2 (Intuition) struct PenPair { PenPair = RECORD UBYTE DetailPen; detailPen:UByte; b Assembler Datenstrukturenreferenz Routinenreferenz ___> Beschreibung UBYTE BlockPen; blockPen:UByte; END; Diese systeminterne Datenstruktur ist in Assembler nicht definiert. »Intuition«: GListEnv. Keine. Diese systeminterne Datenstruktur wird in die GListEnv-Datenstruktur eingebunden und beinhaltet zwei Nummern von Farbregistern. I DetailPen 0x0000 (0) Die Nummer des Farbregisters, dessen Inhalt als Farbe für die »Details« verwendet wird, also z.B. für die Einzelheiten in den Gadgets und die Schrift in der Titelleiste. I BlockPen 0x0001 (1) Die Nummer des Farbregisters, dessen Inhalt als Farbe für »gröbere« Elemente verwendet wird, also z.B. für das Füllen der Titelleiste. Point Offset C (intuition/intuitionbase.h) Modula-2 (Intuition) Hex Dez struct Point Point = { RECORD 0000 0 SHORT X; x:INTEGER; 0002 2 SHORT Y; y:INTEGER; 0004 4 }; END; Assembler Diese systeminterne Datenstruktur ist in Assembler nicht definiert. Datenstrukturenreferenz »Intuition«: IntuitionBase. Routinenreferenz Keine. 0. Beschreibung Diese Datenstruktur wird in die /IntuitionBase-Datenstruktur eingebunden und dient zur Speicherung der Koordinaten eines Punktes. I X 0x0000 (0) Die x-Koordinate des Punktes. I 0x0002 (2) Die y-Koordinate des Punktes. Preferences om C (intuition/intuition.h) Modula-2 (Intuition) Hex Dez struct Preferences Preferences = ( RECORD 0000 0 BYTE FontHeight; fontHeight:UByte; 0001 1 UBYTE PrinterPort; printerPort:PrinterPort; 0002 2 USHORT BaudRate; baudRate:CARDINAL; 0004 4 struct timeval KeyRptSpeed; keyRptSpeed:TimeVal; 0V0O0OC 12 struct timeval KeyRptDelay; keyRptDelay:TimeVal; 0014 20 struct timeval DoubleClick; doubleClick:TimeVal; 001C 28 USHORT PointerMatrix[36]; pointerMatrix:ARRAY[0..35] OF CARDINAL; 0064 100 BYTE XOffset; xOffset:Byte; 0065 101 BYTE YOffset; yOffset:Byte; Offset C (intuition/intuition.h) Modula-2 (Intuition) Hex 0066 0068 006A 006C 0O06E 0070 0072 0074 0076 0077 0078 007A 007C 0O07E 0080 009E 00AO 00A2 00A4 00A6 00A8 00AA VOAC VODAE 00BO 00B2 00B4 00B6 00B7 00B8 00B9 00BA 00D8 00D9 00DA 00DC 00DE 00EO O0E1 00E2 00E4 Dez 102 104 106 108 110 112 114 116 118 119 120 122 124 126 128 158 160 162 164 166 168 170 172 174 176 178 180 182 183 184 185 186 216 214 218 220 222 224 223 226 228 USHORT color17; USHORT color18; USHORT color19; USHORT PointerTicks; USHORT color0; USHORT color]; USHORT color2; USHORT color; BYTE ViewXOffset; BYTE ViewYOffset; WORD ViewlnitX; WORD ViewlnitY; BOOL EnableCLI; USHORT PrinterType; UBYTE PrinterFilename[30]; USHORT PrintPitch; USHORT PrintQuality; USHORT PrintSpacing; UWORD PrintLeftMargin; UWORD PrintRightMargin; USHORT Printlmage; USHORT PrintAspect; USHORT PrintShade; WORD PrintThreshold; USHORT PapersSize; UWORD PaperLength; USHORT PaperType; UBYTE SerRWBits; UBYTE SerStopBuf; UBYTE SerParShk; UBYTE LaceWB; UBYTE WorkName[30]; BYTE RowSizeChange; BYTE ColumnSizeChange; UWORD PrintFlags; UWORD PrintMaxWidth; UWORD PrintMaxHeigth; UBYTE PrintDensity; UBYTE PrintXOffset; UWORD wb _Width; UWORD wb_Heigth; color17:CARDINAL; color18:CARDINAL; color19:CARDINAL; pointerTicks:CARDINAL; colorO:CARDINAL; colorl:CARDINAL; color2:CARDINAL; color3:CARDINAL; viewXOffset:Byte; view YOffset:Byte; viewlnitX:INTEGER; viewlnitY:INTEGER; enableCLI:CARDINALIT;, printerType:CARDINALI; printerFilename: ARRAY [0..29] OF CHAR; printPitch:;CARDINAL; printQuality:CARDINAL; printSpacing:CARDINAL; printLeftMargin:CARDINAL; printRightMargin:CARDINAL; printlmage:CARDINAL; printAspect:CARDINAL; printShade:CARDINAL; printThreshold:INTEGER; paperSize:CARDINAL; paperLength:CARDINAL; paperType:CARDINAL; serRWBits:UByte; serStopBuf:UByte; serParShk:SerParShkSet; laceWB:BOOLEAN; workName:ARRAY[0..29] OF CHAR; padding: ARRAY [0..15] OF BYTE; oe C (intuition/intuition.h) UBYTE wb_Depth; UBYTE ext_Size; }: Assembler | Präfix: Datenstrukturenreferenz »Intuition«: »PrtBase«: Routinenreferenz »Intuition«: L__> Beschreibung Modula-2 (Intuition) pf_ IntuitionBase. PrinterData. GetDefPrefs, GetPrefs, SetPrefs. In der Preferences-Datenstruktur werden die von dem Programm »Preferences« bekannten Voreinstel- lungen abgelegt. I FontHeight 0x0000 (0) Folgende zwei Konstanten geben die Schriftbreite des Systemzeichensatzes an: Modula-2 Hex TOPAZ_EIGHTY topazEighty 0008 TOPAZ_SIXTY topazSixty 0009 Beschreibung Einstellen des Systemzeichensatzes auf 80 Zeichen pro Zeile. Einstellen des Systemzeichensatzes auf 60 Zeichen pro Zeile. 1 PrinterPort 0x0001 (1) Folgende Bits sind für dieses Feld definiert: Modula-2 Hex PARALLEL_PRINTER parallelPrinter 0000 SERIAL_PRINTER serialPrinter 0001 Beschreibung Drucker befindet sich am Parallel-Port. Drucker befindet sich am Serial-Port. II BaudRate 0x0002 (2) Folgende Konstanten definieren die verschiedenen Baud- raten (Baud = übertragende Bits pro Sekunde) der seriellen Schnittstelle: Modula-2 Beschreibung BAUD_110 baud110 0000 Setzt die Baudrate auf 110 Bits/s. BAUD_300 baud300 0001 Setzt die Baudrate auf 300 Bits/s. BAUD_1200 baud1200 0002 Setzt die Baudrate auf 1200 Bits/s. BAUD_2400 baud2400 0003 Setzt die Baudrate auf 2400 Bits/s. BAUD_4800 baud4800 0004 Setzt die Baudrate auf 4800 Bits/s. BAUD_9600 baud9600 0005 Setzt die Baudrate auf 9600 Bits/s. BAUD_19200 baud19200 0006 Setzt die Baudrate auf 19200 Bits/s. BAUD_MIDI baudMidi 0007 Setzt die Baudrate auf die Midi-Norm. I KeyRptSpeed 0x0004 (4) I KeyRptDelay 0x000C (12) 1 DoubleClick 0x0014 (20) J PointerMatrix 0x001C (28) 41 XOffset 0x0064 (100) U YOffset 0x0065 (101) I color17 0x0066 (102) 4 color18 0x0068 (104) I color19 0x006A (106) II PointerTicks 0x006C (108) I color0 0x006E (110) „I colori 0x0070 (112) Diese eingebundene TimeVal-Datenstruktur definiert die Zeitspanne, die bei der Tastenwiederholung (Gedrückthal- ten einer Taste) zwischen der Ausgabe der einzelnen Zei- chen liegt. Diese eingebundene TimeVal-Datenstruktur definiert die Zeitspanne, die das System beim Drücken einer Taste wartet, bevor sie ständig wiederholt wird. Diese eingebundene TimeVal-Datenstruktur definiert die Zeitspanne, die zwischen zwei »Maus-Klicks« liegen darf, damit dies als »Doppel-Klick« erkannt wird. Hier sind die Grafikdaten eingebunden, die den Standard- Mauszeiger als Sprite definieren. Der x-Offset des Hot-Spots in dem Mauszeiger. Der y-Offset des Hot-Spots in dem Mauszeiger. Der Farbwert, der als erste Farbe für die Darstellung des Mauszeigers verwendet wird. Der Farbwert, der als zweite Farbe für die Darstellung des Mauszeigers verwendet wird. Der Farbwert, der als dritte Farbe für die Darstellung des Mauszeigers verwendet wird. Dieser Wert beschreibt den Übersetzungsfaktor der Mausbe- wegungen. Die sinnvollen Werte sind die Zweierpotenzen 1, 2, oder 4. Für größere Werte fordert die Maus viel Bewe- gungsfreiheit, für 64 bereits eine Fläche von der Größe einer Tischtennisplatte. Der Farbwert, der als Default-Hintergrundfarbe verwendet wird. Der Farbwert, der als Default-Vordergrundfarbe (Farbe der Windows und des Textes) verwendet wird. U io DD .ı.oo0 I] PrinterFilename 0x0080 (128) color2 0x0072 (114) color3 0x0074 (116) ViewXOffset 0x0076 (118) ViewYOffset 0x0077 (119) ViewInitX 0x0078 (120) ViewlnitY 0x007A (122) EnableCLI 0x007C (124) PrinterType 0x007E (126) C CUSTOM_NAME ALPHA_P_101 BROTHER_15XL CBM_MPS1000 DIAB_630 DIAB_ADV_D25 DIAB_C_150 EPSON EPSON_JX_80 OKIMATE_20 QUME_LP_20 HP_LASERJET HP_LASERJET _PLUS Der Farbwert, der als dritte Default-Farbe (z.B. in den Close- und Depth-Gadgets) verwendet wird. Der Farbwert, der als vierte Default-Farbe (z.B. für den Standard-Textcursor) verwendet wird. Der x-Offset des Gesamtdisplays. Der y-Offset des Gesamtdisplays. Der x-Initialisierungswert für alle Views. Der y-Initialisierungswert für alle Views. Ein Boolescher Ausdruck, der angibt, ob das »CLI-Icon« auf dem Display erscheinen soll (TRUE) oder nicht (FALSE). In den neueren Versionen wird dieser Wert jedoch nicht mehr beachtet, das Icon erscheint immer. Folgende Konstanten definieren die verschiedenen Drucker- typen, die von den Preferences unterstützt werden: Modula-2 Hex Beschreibung customName 0000 Ein Drucker, der nicht mit einem der unten aufgeführten kompatibel ist. alphaP 101 0001 Ein Alphacom oder Alphaprp-101- Typenraddrucker. brotherlSXL 0002 Ein Brother-HR-15XL- Typenraddrucker. cbmMps1000 0003 Ein Commodore-MPS-1000- Matrixdrucker. diab630 0004 Ein Diablo-630-Typenraddrucker. diabAdvD25 0005 Ein Diablo Advantage-D251- Typenraddrucker. diabC150 0006 Ein Diablo-C-150-Farbdrucker. epson 0007 Ein Epson-Drucker der RX/FX-Reihe. epsonJX80 0008 Ein Epson-JX-80-Farbdrucker okimate20 0009 Ein Okimate-20-Farbdrucker. QumeLP20 000A Ein Qume-LetterPro-20- Typenraddrucker. hpLaserjet 000B Ein Hewlett-Packard-LaserJet- Laserdrucker. hpLaserjet 000C Ein Hewlett-Packard-LaserJet-Plus- Plus Laserdrucker. Der Name des Druckertreibers, falls in PrinterType CU- STOM eingestellt ist. Der Druckertreiber muß sich in dem Unterverzeichnis »devs/printers« befinden. I PrintPitch 0x009E (158) I PrintQuality 0x00A0 (160) Modula-2 DRAFT draft LETTER U PrintSpacing 0x00A2 (162) letter Die momentan eingestellte Zeichendichte. Dieses Feld kann die Werte 10, 12 oder 15 annehmen. Das entspricht den Schriftarten Pica, Elite oder Fine und auf DIN A4 80, 96 oder 120 Zeichen pro Zeile. Die folgenden Konstanten definieren die Druckbildqualität. Beschreibung Draft-Schrift (Ausdruck mit der Stan- dard-Schriftart) NLQ-Schrift (Ausdruck mit der »Near Letter Quality«-Schriftart) Die folgenden Konstanten definieren den Zeilenabstand. C Modula-2 Hex Beschreibung SIX_LPI sıxLPI 0000 Setzt den Zeilenabstand auf 6 LPI (Lines per Inch). EIGHT_LPI eightLPI 0200 Setzt den Zeilenabstand auf 8 LPI (Lines per Inch). U PrintLeftMargin 0x00A4 (164) 4 PrintRightMarging 0x00A6 (166) I PrintImage 0x00A8 (168) Modula-2 IMAGE_POSITIVE IMAGE_NEGATIVE imagePositive 0000 imageNegative 0001 Der momentan eingestellte linke Rand, also ab der wieviel- ten Spalte bei der Ausgabe auf den Drucker der Text ge- druckt wird. Der momentan eingestellte rechte Rand, also bis zur wieviel- ten Spalte bei der Ausgabe auf den Drucker der Text ge- druckt wird. Die folgenden Werte definieren bei einem Grafikausdruck das Druckbild. Hex Beschreibung Nur die gelöschten Bits werden ausgedruckt. Nur die gesetzten Bits werden ausgedruckt. I PrintAspect 0x00AA (170) Die folgenden Werte definieren bei einem Grafikausdruck die Lage des Druckbildes. Modula-2 Hex Beschreibung ASPECT_HORIZ aspectHoriz 0000 Die Grafik wird horizontal (normal) | ausgedruckt. ASPECT_VERT aspectVert 0001 Die Grafik wird vertikal (um 90 Grad gedreht) ausgedruckt. J PrintShade 0x00AC (172) Die folgenden Werte definieren bei einem Grafikausdruck die Schattierung. C Modula-2 Hex Beschreibung SHADE_BW shadeBW 0000 In Abhängigkeit von PrintImage werden gelöschte, bzw. gesetzte Bits, schwarz auf weiß ausgedruckt. SHADE_GREYSCALE shade Greyscale 0001 Erstreckt sich die Grafik über mehrere Bitplanes, so werden die Farben in verschiedene Grautöne umgerechnet. SHADE_COLOR shadeColor 0002 Istein Farbdrucker angeschlossen, so wird die Grafik in Farbe ausgedruckt. 1 PrintThreshold 0x00AE (174) Dieser Wer bestimmt im _PrintShade-Modus SHADE_GREYSCALE die allgemeine Graustufe. Sinnvol- le Werte liegen zwischen 1 und 15. I PaperSize 0x00B0 (176) Die folgenden Werte definieren das Format des verwendeten Druckerpapiers. C Modula-2 Hex Beschreibung US_LETTER usLetter 0000 Amerikanische Brief-Norm. US_LEGAL usLegal 0010 Amerikanische Amts-Norm. N_TRACTOR nTractor 0020 Papierbreite maximal ca. 25 cm. W_TRACTOR wTractor 0030 Papierbreite maximal ca. 35 cm. CUSTOM custom 0040 Keine der oben genannten. 4 PaperLength 0x00B2 (178) Ist in PaperSize das Flag CUSTOM gesetzt, so muß hier die Seitenlänge des Druckerpapiers in Zeilen stehen. II PaperType 0x00B4 (180) Die folgenden Werte definieren die Art des Druckerpapiers. FANFOLD SINGLE _J SerRWBits 0x00B6 (182) SWRITE_BITS SREAD_BITS Modula-2 Hex Beschreibung fanfold 0000 Es wird Endlospapier verwendet. single 0080 Es wird Einzelblattpapier verwendet. Die folgenden Werte definieren in dieser 1-Byte-Marke für die serielle Schnittstelle die Anzahl der Read- und Write- Bits. Modula-2 Hex Beschreibung writeBits 000F Das untere Nibbel enthält die Anzahl der zu schreibenden Bits. readBits 00FO Das obere Nibbel enthält die Anzahl der zu lesenden Bits. I SerStopBuf 0x00B7 (183) SBUFSIZE_BITS SSTOP_BITS I SerParShk 0x00B8 (184) Die folgenden Werte definieren in dieser 1-Byte-Marke für die serielle Schnittstelle die Anzahl der Stop-Bits. Modula-2 Hex Beschreibung bufSizeBits O000F Das untere Nibbel enthält die Größe des Datenpuffers. stopBits 00FO Das obere Nibbel enthält die Anzahl der Stop-Bits. Das untere Nibbel dieses Werts enthält den Handshake- Modus, das obere die Parität. Folgende Flags können gesetzt werden: Modula-2 Beschreibung SHSHAKE_XON SHSHAKE_RTS SHSHAKE_NONE SPARITY_BITS SPARITY_NONE SPARITY_EVEN SPARITY_ODD shakeXon 0000 Handshake-Modus xOn/xOff. shakeRts 0001 Handshake-Modus RTS/CTS. shakeNone 0002 Kein Handshake Modus. 00F0 Das obere Nibbel für die Parität. parityNone 0000 Keine Parität. parityEven 0001 Gerade Parität. parityOdd 0002 Ungerade Parität. I. 4 4 4 J J LaceWB 0x00B9 (185) WorkName 0x00BA (186) RowSizeChange 0x00D8 (216) ColumnSizeChange 0x00D9 (217) PrintFlags 0x00DA (218) PrintMaxWidth 0x00DC (220) PrintMaxHeigth 0x00DE (222) PrintDensity 0x00E0 (224) PrintXOffset 0x00E1 (225) wb_Width 0x00E2 (226) wb_Heigth 0x00E4 (228) wb_Depth 0x00E6 (230) Size 0x00E7 (231) Wird die Workbench im Interlace-Modus dargestellt, so steht hier 1, sonst 0. Ein 30-Byte langer Zwischenspeicher für den Drucker- namen. ' Größenveränderungsfaktor für die Zeilen. Größenveränderungsfaktor für die Spalten. In dieser 2-Byte-Marke können durch den Benutzer eigene Druckerflags eingeführt werden. Die maximale Breite eines Grafikausdrucks in zehntel Inch. Die maximale Höhe eines Grafikausdrucks in zehntel Inch. Die Zeichendichte, mit der die Grafik ausgedruckt werden soll. Der linke Rand bei einem Grafikausdruck in zehntel Inch. Die Breite des Workbench-Screens (nicht veränderbar). Die Höhe des Workbench-Screens. Die Tiefe (Anzahl der Bitplanes) des Workbench-Screens. Interner Systemparameter, der nicht verändert werden darf. Propinfo Offset C (intuition/intuition.h) Modula-2 (Intuition) Hex Dez struct PropInfo PropInfo = RECORD 0000 0 USHORT Flags; flags:PropInfoFlagSet; 0002 2 USHORT HorizPot; horizPot:CARDINAL; 0004 4 USHORT VertPot; vertPot:CARDINAL; 0006 6 USHORT HorizBody; horizBody:CARDINAL; 0008 8 USHORT VertBody; vertBody:CARDINAL; 000A 10 USHORT CWidth; cWidth:CARDINAL; 000C 12 USHORT CHeight; cHeight:CARDINAL; O00E 14 USHORT HPotRes; hPotRes:CARDINAL; 0010 16 USHORT VPotRes; vPotRes:CARDINAL; USHORT LeftBorder; leftBorder:CARDINAL; topBorder:CARDINAL; h USHORT TopBorder; END; Assembler Datenstrukturenreferenz Routinenreferenz nn Beschreibung Präfix: pi_ »Intuition«: Gadget, IntuitionBase. Keine. Dies ist eine zusätzliche Datenstruktur für Proportional-Gadgets. Bei dieser Art von Gadgets kann ein zugehöriger Wert über einen verstellbaren »Knopf«, ähnlich wie bei einem Schieberegler (oder -Potentiometer), eingestellt werden. Der Bereich, in dem der Knopf bewegt werden kann, ist die innere Fläche des Gadgets und heißt »Container«. Typische Anwendungen der Proportional-Gadgets sind Farbauswahl oder Positionseinstellungen in langen Texten. I Flags 0x0000 (0) C AUTOKNOB FREEHORIZ FREEVERT PROPBORDERLESS KNOBHIT J HorizPot 0x0002 (2) 1 VertPot 0x0004 (4) I HorizBody 0x0006 (6) Folgende Bits dieser 2-Byte-Marke sind definiert: Modula-2 Beschreibung autoKnob Der Knopf ist ein Rechteck, dessen Größe ebenfalls einen Para- meter proportional darstellt. freeHoriz 0002 Der Knopf kann horiz. bewegt werden. freeVert 0004 Der Knopf kann vertikal bewegt werden. propBorderless 0008 Es wird kein Rahmen um den Bereich gezeichnet, in dem der Knopf bewegt werden kann. knobHit 0100 Der Knopf wird gerade bewegt. Momentan eingestellter Wert in horizontaler Richtung. Dabei ist der kleinste Wert Null und der größte OxFFFF (65535), es müssen also gegebenenfalls Anpassungen vor- genommen werden, um Werte in den gewünschten Berei- chen (z.B. zwischen O0 und 15 bei Farbeinstellungen) zu erhalten. Inwiefern dieser Wert veränderbar ist, wird durch FREEHORIZ in Flags definiert. Momentan eingestellter Wert in vertikaler Richtung. Dabei ist der kleinste Wert Null und der größte OxFFFF (65535), es müssen also gegebenenfalls Anpassungen vorgenommen werden, um Werte in den gewünschten Bereichen zu erhal- ten. Inwiefern dieser Wert veränderbar ist, wird durch FREEVERT in Flags definiert. Der hier eingestellte Wert bestimmt die Schrittweite von HorizPot. Ist das Flag AUTOKNOB in Flags gesetzt, so bestimmt dieser Wert auch die Breite des Knopfes. 1 VertBody 0x0008 (8) Der hier eingestellte Wert bestimmt die Schrittweite von VertPot. Ist das Flag AUTOKNOB in Flags gesetzt, so bestimmt dieser Wert auch die Höhe des Knopfes. II CWidth 0x000A (10) Hier trägt »Intuition« die aktuelle Breite des Containers ein. U CHeight 0x000C (12) Hier trägt »Intuition« die aktuelle Höhe des Containers ein. „1 HPotRes 0x000E (14) Hier trägt »Intuition« die Anzahl der in horizontaler Rich- tung zu erhaltenden Werte ein. I VPotRes 0x0010 (16) Hier trägt »Intuition« die Anzahl der in vertikaler Richtung zu erhaltenden Werte ein. U LeftBorder 0x0012 (18) Abstand des Containers vom linken Rand des zugehörigen Proportional-Gadgets. 3 TopBorder 0x0014 (20) Abstand des Containers vom oberen Rand des zugehörigen Proportional-Gadgets. Remember Modula-2 (Intuition) Remember = ( RECORD struct Remember *NextRemember; nextRemember:RememberfPtr; ULONG RememberSize; rememberSize:LONGCARD; UBYTE *Memory; memory: ADDRESS; }; END; Assembler Präfix: rm_. Datenstrukturenreferenz »Intuition«: IntuitionBase, Remember. Routinenreferenz »Intuition«: AllocRemember, FreeRemember. 1... Beschreibung Mit Hilfe der Remember-Datenstruktur werden Speicherbereiche für die verschiedensten Anwendungen reserviert. Dabei wird eine Liste von mehreren miteinander verketteten Remember-Datenstrukturen gebildet, die mit einem einzigen Aufruf der Routine FreeRemember wieder freigegeben werden kann. I NextRemember 0x0000 (0) Über diesen Adreßzeiger können mehrere Remember-Da- | tenstrukturen zu einer linearen Liste verknüpft werden. Folgt keine weitere Remember-Datenstruktur, so steht hier NULL. DJ RememberSize 0x0004 (4) Die Größe des Speicherbereichs. 3 Memory 0x0008 (8) Der Adreßzeiger auf den Speicherbereich. Requester Of C (intuition/intuition.h) Modula-2 (Intuition) struct Requester Requester = RECORD struct Requester olderRequest:RequesterPtr; *OlderRequest; SHORT LeftEdge; leftEdge:INTEGER; SHORT TopEdge; topEdge:INTEGER; SHORT Width; width:INTEGER; SHORT Height; height:INTEGER; SHORT Relleft; relLeft:INTEGER; SHORT RelTop; relTop:INTEGER; struct Gadget *RegGadget; reqGadget:GadgetPtr; struct Border *RegBorder; regBorder:BorderPtr; struct IntuiText *RegqText; reqText:IntuiTextPtr; USHORT Flags; flags:RequesterFlagSet; UBYTE BackfFill; backFill:UByte; struct Layer *ReqLayer; reqLayer:LayerPtr; UBYTE RegqPad1[32]; regqPad1:ARRAY [0..31] OF BYTE; struct BitMap *ImageBMap; imageBMap:BitMapPir; struct Window *RWindow; rWindow:WindowPtr; UBYTE RegqPad2[36]; reqPad2: ARRAY [0..35] OF BYTE; }; END; Assembler Präfix: rq_ Datenstrukturenreferenz »Intuition«: GListEnv, Requester, Window. Routinenreferenz »Intuition«: ActivateGadget, AddGList, EndRequest, InitRequester, ModifyProp, NewModifyProp, OffGadget, OnGadget, RefreshGadgets, RefreshGList, Request, SetDMRequest. > Beschreibung Wird ein Requester geöffnet, so stehen in der zugehörigen Requester-Datenstruktur die entsprechenden Informationen über die Darstellung des Requesters. UI OlderRequest 0x0000 (0) Ist bereits ein Requester geöffnet, so trägt »Intuition« hier einen Adreßzeiger auf den zuletzt geöffneten ein. I LeftEdge 0x0004 (4) Ist das POINTREL-Bit in Flags gelöscht, so definiert dieser Wert den Abstand des Requesters vom linken Rand des zugehörigen Windows. TopEdge 0x0006 (6) Width 0x0008 (8) Height 0x000A (10) RelLeft 0x000C (12) RelTop 0x000E (14) RegGadget 0x0010 (16) RegBorder 0x0014 (20) ReqText 0x0018 (24) Flags 0x001C (28) C POINTREL PREDRAWN NOISYREQ REQOFFWINDOW REQACTIVE SYSREQUEST DEFERREFRESH Ist das POINTREL-Bit in Flags gelöscht, so definiert dieser Wert den Abstand des Requesters vom oberen Rand des zugehörigen Windows. Die Breite des gesamten Requesters, also einschließlich der dazugehörigen Texte und Gadgets. Die Höhe des gesamten Requesters, also einschließlich der dazugehörigen Texte und Gadgets. Ist das POINTREL-Bit in Flags gesetzt, so ist dies der horizontale Abstand des Requesters, relativ zur Position des Mauszeigers zum Zeitpunkt der Auslösung. Ist das POINTREL-Bit in Flags gesetzt, so ist dies der vertikale Abstand des Requesters, relativ zur Position des Mauszeigers zum Zeitpunkt der Auslösung. Ein Adreßzeiger auf die lineare Liste von Gadget-Daten- strukturen, die zu diesem Requester definiert sind. ACHTUNG: Hier darf nicht NULL stehen. In der letzten Gadget-Datenstruktur muß in Flags das ENDGADGET-Bit gesetzt sein, damit sich das Requester wieder schließen kann. Ein optionaler Adreßzeiger auf eine Border-Datenstruktur, die dieses Requester umrandet. Ein optionaler Adreßzeiger aufeine /ntuiText-Datenstruktur, die den in diesem Requester auszugebenden Text definiert. Folgende Flags sind für diese 2-Byte-Marke definiert: Modula-2 Hex Beschreibung pointRel 0001 Die Position des Requesters ist relativ zur Position des Mauszeigers. preDrawn 0002 Zu diesem Requester existiert eine eigene Bitmap. noisyReq 0004 Durch Setzen dieses Bits wird ermöglicht, daß weiterhin Tastatur- und Maus-Events auftreten können. reqOffWindow 1000 Dieses Bit wird von »Intuition« gesetzt, wenn sich mindestens ein Requester außerhalb des zugehörigen Fensters befindet. regActive 2000 Das Requester ist aktiv. sysRequest 4000 Ein System-Requester ist aktiv. deferRefresh 8000 Ein Refresh wurde unterbrochen. I BackFill 0x001E (30) II ReqLayer 0x0020 (32) I ReqPadi 0x0024 (36) U ImageBMap 0x0044 (68) I RWindow 0x0048 (72) U ReqPad2 0x004C (76) Screen Hex Dez | 0000 0 0004 4 0008 8 000A 10 000C 12 000E 14 0010 16 0012 18 0014 20 0016 22 001A 26 O0O1E 30 O01F 31 0020 32 0021 33 0022 34 0023 35 0024 36 0025 31 0026 38 0028 40 002C 44 0054 84 00B8 184 00EO 224 Mit der hier stehenden Pen-Nummer können Sie die Hinter- grundfarbe des Requesters wählen. Ein Adreßzeiger auf die Layer-Datenstruktur, die bei der Ausgabe dieses Requesters verwendet wird. Von »Intuition« intern verwendeter Zwischenspeicher. Ist das Bit PREDRAWN in Flags gesetzt, so muß hier ein Adreßzeiger auf eine eigene BitMap-Datenstruktur stehen. C (intuition/intuition.h) struct Screen struct Screen *NextScreen; struct Window *FirstWindow; SHORT LeftEdge; SHORT TopEdge; SHORT Width; SHORT Height; SHORT MouseY,; SHORT MouseX; USHORT Flags; UBYTE *Title; UBYTE *DefaultTitle; BYTE BarHeight; BYTE BarVBorder; BYTE BarHBorder; BYTE MenuVBorder; BYTE MenuHBorder; BYTE WBorTop; BYTE WBorleft; BYTE WBorRight; BYTE WBorBottom; struct TextÄttr *Font; struct ViewPort ViewPort; struct RastPort RastPort; struct BitMap BitMap; struct Layer_Info LayerlInfo; Modula-2 (Intuition) Von »Intuition« intern verwendeter Systemparameter. Von »Intuition« intern verwendeter Zwischenspeicher. Screen = RECORD nextScreen:ScreenPtr; firstWindow:WindowPitr; leftEdge:INTEGER; topEdge:INTEGER; width:INTEGER; height:INTEGER; mouseY:INTEGER; mouseX:INTEGER; flags:ScreenFlagsSet; title ADDRESS; defaultTitle ADDRESS; barHeight:Byte; barV Border:Byte; barHBorder:Byte; menuV Border:Byte; menuHBorder:Byte; wBorTop:Byite; wBorLeft:Byte; wBorRight:Byte; wBorBottom:Byte; font:TextAttrPtr; viewPort: ViewPort; rastPort:RastPort; bitMap:BitMap; layerInfo:Layerlnfo; Offset C (intuition/intuition.h) Modula-2 (Intuition) b Assembler struct Gadget *FirstGadget; firstGadget:GadgetPtr; UBYTE DetailPen; detailPen:UByte; UBYTE BlockPen; blockPen:UByte; USHORT SaveColord; saveColor0:CARDINAL; struct Layer *BarLayer; barLayer:LayerPtr; UBYTE *ExtData; extData: ADDRESS; UBYTE *UserData; userData: ADDRESS; j END; Präfix: sc_ »Intuition«: GListEnv, IntuitionBase, NewWindow, Datenstrukturenreferenz Routinenreferenz | > Beschreibung Screen, Window. »Intuition«: CloseScreen, DisplayBeep, GetScreenData, MakeScreen, ModifyProp, MoveScreen, OpenScreen, ScreenToBack, ScreenToFront, Show Title. Wird durch die OpenScreen-Routine ein Screen geöffnet, so gibt sie einen Zeiger auf die zugehörige Screen-Datenstruktur zurück. In dieser finden sie die wichtigsten Informationen über den Screen. 1 NextScreen 0x0000 (0) 1 FirstWindow 0x0004 (4) I LeftEdge 0x0008 (8) I TopEdge 0x000A (10) I Width 0x000C (12) I Height 0x000E (14) Sind mehrere Screens geöffnet, so werden die dazu- gehörigen Screen-Datenstrukturen über diesen Adreßzeiger linear miteinander verknüpft. Dabei gibt die Position des Screens in dieser Liste seine Tiefe an. Der Screen, der momentan hinter allen anderen liegt, steht also am Ende der Liste und hat an dieser Stelle den Wert NULL. Einen Adreß- zeiger auf den vorderen, ersten Screen der Liste steht in der IntuitionBase-Datenstruktur. Ist dieser Wert ungleich NULL, so ist dies ein Adreßzeiger auf die Window-Datenstruktur auf das erste Fenster, das auf diesem Screen geöffnet ist. Die x-Position der linken oberen Ecke des Screens muß in den vorliegenden Versionen immer auf Null gesetzt werden. Die y-Position der linken oberen Ecke des Screens. Die Breite des Screens muß, jenach Auflösung, 320 oder 640 sein. Die Höhe des Screens. [ E EcE U) MouseY 0x0010 (16) MouseX 0x0012 (18) Flags 0x0014 (20) Title 0x0016 (22) DefaultTitle 0x001A (26) BarHeight 0x001E (30) BarVBorder 0x001F (31) BarHBorder 0x0020 (32) MenuVBorder 0x0021 (33) MenuHBorder 0x0022 (34) WBorTop 0x0023 (35) WBorLeft 0x0024 (36) WBorRight 0x0025 (36) WBorBottom 0x0026 (37) Font 0x0028 (40) ViewPort 0x002C (44) RastPort 0x0054 (84) Die augenblickliche y-Koordinate der Position des Mauszei- gers auf diesem Screen, relativ zu seiner linken oberen Ecke. Die augenblickliche x-K.oordinate der Position des Mauszei- gers auf diesem Screen, relativ zu seiner linken oberen Ecke. In dieser 2-Byte-Marke stehen die Screen-Flags. Eine genaue Beschreibung dieser Flags finden Sie in dem Ab- schnitt »Wichtige Flags der Intuition-Library«. Ein Adreßzeiger auf eine Null-terminierte Zeichenkette, deren Inhalt auf der Titelleiste ausgegeben wird. Ein Adreßzeiger auf eine Null-terminierte Zeichenkette, deren Inhalt als Default-Titel erhalten bleibt. Die Höhe der Titelleiste. Die Breite des vertikalen Bildschirmrandes. Die Höhe des horizontalen Bildschirmrandes. Die Breite der vertikalen Ränder der zu diesem Screen definierten Pull-down-Menüs. Dieser Wert gilt auch für die Pull-down-Menüs, die zu den Windows auf diesem Screen gehören. Die Höhe der horizontalen Ränder der zu diesem Screen definierten Pull-down-Menüs. Dieser Wert gilt auch für die Pull-down-Menüs, die zu den Windows auf diesem Screen gehören. Dieser Wert definiert für alle Fenster, die auf diesem Screen geöffnet werden, die Höhe des oberen Fensterrandes. Dieser Wert definiert für alle Fenster, die auf diesem Screen geöffnet werden, die Breite des linken Fensterrandes. Dieser Wert definiert für alle Fenster, die auf diesem Screen geöffnet werden, die Breite des rechten Fensterrandes. Dieser Wert definiert für alle Fenster, die auf diesem Screen geöffnet werden, die Höhe des unteren Fensterrandes. Ein Adreßzeiger auf die TextAttr-Datenstruktur des Default- Fonts, den für diesen Screen voreingestellten Zeichensatz. Dieser steht dann auch den Displayelementen (z.B. Win- dow) als solcher zur Verfügung. Einbindung einer ViewPort-Datenstruktur, die bei der Dar- stellung dieses Screens benutzt wird. Einbindung einer RastPort-Datenstruktur, die den »Zei- chenstift« definiert, der für diesen Screen bereitgehalten wird. BitMap 0x00B8 (184) LayerInfo 0x00E0 (224) FirstGadget 0x0146 (326) DetailPen 0x014A (330) BlockPen 0x014B (331) SaveColor0 0x014C (332) BarLayer 0x014E (334) ExtData 0x0152 (338) UserData 0x0156 (342) StringInfo Einbindung einer BitMap-Datenstruktur zur Bestimmung des Displayspeichers für diesen Screen. Einbindung einer LayerInfo-Datenstruktur. Dieser Parameter wird von den vorliegenden Versionen noch nicht unterstützt. Die Nummer des Farbregisters, dessen Inhalt als Farbe für die »Details« verwendet wird, also z.B. für die Einzelheiten in den Gadgets und die Schrift in der Titelleiste. Die Nummer des Farbregisters, dessen Inhalt als Farbe für »gröbere« Elemente verwendet wird, also z.B. die Titel- leiste. Ein Zwischenspeicher für die Nummer eines Farbregisters. Dieser wird beim Blinken des Screens verwendet. Ein Adreßzeiger auf eine Layer-Datenstruktur, die zur Darstellung der Menüleisten gebraucht wird. Ein unbenutzter Adreßzeiger für spätere Erweiterungen. Dieser Adreßzeiger steht dem Benutzer zur Verfügung. Über ihn können jedem Screen beliebige Zusatzdaten zugeordnet werden. Modula-2 (Intuition) StringInfo = RECORD b UBYTE *Buffer; UBYTE *UndoBuffer; SHORT BufferPos; SHORT MaxChars; SHORT DispPos; SHORT UndoPos; SHORT NumChars; SHORT DispCount; SHORT CLett; SHORT CTop; struct Layer *LayerPtr; LONG Longlnt; struct KeyMap *AltKeyMap; buffer: ADDRESS; undoBuffer: ADDRESS; bufferPos:INTEGER; maxChars:INTEGER; dispPos:INTEGER; undoPos:INTEGER; numChars:INTEGER; dispCount:INTEGER; cLeft:INTEGER; cTop:INTEGER; layerPtr:LayerPtr; longInt: LONGINT,; altKeyMap:KeyMapfPtr; END; Assembler - Datenstrukturenreferenz Routinenreferenz >> Beschreibung Präfix: si_ »Intuition«: Gadget, IntuitionBase. Keine. Dies ist eine zusätzliche Datenstruktur für »String-Gadgets«. Bei dieser Art von Gadgets kann dem Benutzer eine Zeichenkette angegeben werden, die er beliebig verändern kann. Eine Sonderform ist das Integer-String-Gadget, bei dem Zahlenwerte vom Typ LONG abgefragt werden können. Der Bereich, in dem die Eingabe innerhalb des Gadgets vorgenommen wird, heißt »Container«. II Buffer 0x0000 (0) I} UndoBuffer 0x0004 (4) I BufferPos 0x0008 (8) II MaxChars 0x000A (10) I DispPos 0x000C (12) „1 UndoPos 0x000E (14) II NumcChars 0x0010 (16) UI DispCount 0x0012 (18) I CLeft 0x0014 (20) GO CTop 0x0016 (22) „3 LayerPtr 0x0018 (24) J Longlnt 0x001C (28) Ein Adreßzeiger auf einen Puffer mit einer Null-terminierten Zeichenkette, die dem Benutzer zur Veränderung angeboten wird. Nachdem der Benutzer die -Taste gedückt hat, steht hier seine modifizierte Eingabe, der Puffer muß daher groß genug gewählt werden. Ein optionaler Adreßzeiger auf einen zweiten Puffer, der eine Kopie der Initialisierungszeichenkette enthält. Die Position innerhalb des Puffers, an der der Cursor beim Aktivieren dieses Gadgets erscheint. Die Größe der Puffer in Bytes. ACHTUNG: Da die Zeichen- kette Null-terminiert ist, muß der Puffer ein Zeichen mehr beinhalten können als maximal eingegeben werden. Die Position innerhalb des Puffers, an der das erste Zeichen der Zeichenkette ausgegeben wird. Hier trägt »Intuition« die aktuelle Position des Cursors in UndoBuffer ein. Die augenblickliche Anzahl der Zeichen, die sich in der Zeichenkette befinden. Die momentane Anzahl der im Container sichtbaren Zeichen der Zeichenkette. Hier trägt »Intuition« den Abstand des Containers vom linken Rand des zugehörigen String-Gadgets ein. Hier trägt »Intuition« den Abstand des Containers vom oberen Rand des zugehörigen String-Gadgets ein. Hier trägt »Intuition« einen Adreßzeiger auf die zugehörige Layer-Datenstruktur ein. Handelt es sich um ein Integer-String-Gadget, so wird nach dem Drücken der -Taste durch den Benutzer hier der eingegebene Wert eingetragen. Q AltKeyMap 0x0020 (32) Window Offset C (intuition/intuition.h) Modula-2 (Intuition) 0000 0004 0006 0008 000A D00C 000E 0010 0012 0014 0016 0018 00IC 0020 0024 0028 002C 002E 0032 0036 0037 0038 0039 003A 003E 0042 0046 004A 004E 004F 0050 0051 0052 0056 005A a» Oo 10 14 16 18 20 22 24 28 32 36 40 44 46 50 54 55 56 57 58 62 66 70 74 78 79 80 81 82 86 90 Ist in ActivationFlags die Flagge ALTKEYMAP gesetzt, so steht hier ein Adreßzeiger auf die eigene Keymap, die bei der Eingabe verwendet werden soll. struct Window struct Window *NextWindow; SHORT LeftEdge; SHORT TopEdge; SHORT Width; SHORT Height; SHORT MouseY; SHORT MouseX; SHORT MinWidth; SHORT MinHeight; USHORT MaxW idth; USHORT MaxHeight; ULONG Flags; struct Menu *Menustrip; UBYTE *Title; struct Requester *FirstRequest; struct Requester *DMRequest; SHORT RegCount; struct Screen *W Screen; struct RastPort *RPort; BYTE BorderLeft; BYTE BorderTop; BYTE BorderRight; BYTE BorderBottom; struct RastPort *BorderRPort; struct Gadget *FirstGadget; struct Window *Parent; struct Window *Descendant; USHORT *Pointer; BYTE PitrHeight; BYTE PtrWidth; BYTE XOffset; BYTE YOffset; ULONG IDCMPFlags; struct MsgPort *UserPort; struct MsgPort *WindowPort; Window = RECORD nextWindow:WindowPitr; leftEdge:INTEGER; topEdge:INTEGER; width:INTEGER; height:INTEGER; mouseY:INTEGER; mouseX:INTEGER; minWidth:INTEGER; minHeight:INTEGER; maxWidth:INTEGER; maxHeight:INTEGER; flags:WindowFlagset; menusStrip:MenuPtr; title ADDRESS; firstRequest:RequesterPtr; dmRequest:RequesterPtr; regqCount:INTEGER; wScreen:ScreenPtr; rPort:RastPortPtr; borderLeft:Byte; borderTop:Byte; borderRight:Byte; borderBottom:Byte; borderRPort:RastPortPtr; firstGadget:GadgetPir; parent:WindowPtr; descendant:WindowPitr; pointer ADDRESS; ptrHeight:Byte; ptrWidth:[0..16]; xOffset:Byte; yOffset:Byte; idempFlags:IDCMPFlagsSet; userPort:MsgPortPtr; windowPort:MsgPortPtr; Offset Assembler Datenstrukturenreferenz Routinenreferenz [___> Beschreibung C (intuition/intuition.h) struct IntuiMessage *MessageKey; UBYTE DetailPen; UBYTE BlockPen; struct Image *CheckMark; UBYTE *ScreenTitle; SHORT GZZMouseX; SHORT GZZMouseY; SHORT GZZW idth; SHORT GZZHeight; UBYTE *ExtData; BYTE *UserData; struct Layer *WLayer; struct TextFont *IFont; E Präfix: »Intuition«: »ConUnit«: »Intuition«: Modula-2 (Intuition) messageKey:IntuiMessagePtr; detailPen:UByte; blockPen:UByte; checkMark:ImagePitr; screenTitle ADDRESS; gzzMouseX:INTEGER; gzzMouseY:INTEGER; gzzWidth:INTEGER; gzzHeight:INTEGER; extData: ADDRESS; userData: ADDRESS; wLayer:LayerPtr; iFont:TextFontPtr; END; wd ConUnit. GListEnv, IntuiMessage, IntuitionBase, Requester, Screen, Window. ActivateGadget, ActivateWindow, AddGadget, AddGList, AutoRequest, BeginRefresh, BuildSysRequest, ClearDMReguest, ClearMenustrip, ClearPointer, CloseWindow, EndRefresh, EndRequest, FreeSysRequest, ModifyIDCMP, ModifyProp, MoveWindow, NewModifyProp, OffGadget, OffMenu, OnGadget, OnMenu, RefreshGadgets, RefreshGList, RefreshWindowFrame, RemoveGadget, RemoveGList, ReportMouse, Request, SetDMRequest, SetMenustrip, SetPointer, SetWindowTitles, SizeWindow, ViewPortAddress, WindowLimits, WindowToBack, WindowToFront. Zu jedem geöffneten Fenster gehört eine Window-Datenstruktur. In ihr stehen sämtliche Informationen über die Eigenschaften des Fensters. [ NextWindow 0x0000 (0) LeftEdge 0x0004 (4) TopEdge 0x0006 (6) Width 0x0008 (8) Height 0x000A (10) MouseY 0x000C (12) MouseX 0x000E (14) MinWidth 0x0010 (16) MinHeight 0x0012 (18) MaxWidth 0x0014 (20) MaxHeight 0x0016 (22) Flags 0x0018 (24) MenusStrip 0x001C (28) Title 0x0020 (32) FirstRequest 0x0024 (36) Sind mehrere Fenster geöffnet, so werden die dazugehörigen Window-Datenstrukturen über diesen Adreßzeiger linear verknüpft. Das letzte Element der Liste hat an dieser Stelle den Wert NULL. Der Abstand des Fensters vom linken Rand des zugehörigen Screens. Der Abstand des Fensters vom oberen Rand des zugehörigen Screens. Die Breite des Fensters. Die Höhe des Fensters. Ist der Mauszeiger innerhalb dieses Fensters positioniert, so steht hier seine zur linken oberen Ecke relative y-Koor- dinate. Ist der Mauszeiger innerhalb dieses Fensters positioniert, so steht hier seine zur linken oberen Ecke relative x-Koor- dinate. Dieser Wert definiert die minimale Breite dieses Fensters. Der Benutzer kann es mit dem Sizing-Gadget minimal bis auf diesen Wert verkleinern. Dieser Wert definiert die minimale Höhe dieses Fensters. Der Benutzer kann es mit dem Sizing-Gadget minimal bis auf diesen Wert verkleinern. Dieser Wert definiert die maximale Breite dieses Fensters. Der Benutzer kann es mit dem Sizing-Gadget maximal bis auf diesen Wert verbreitern. Dieser Wert definiert die maximale Höhe dieses Fensters. Der Benutzer kann es mit dem Sizing-Gadget maximal bis auf diesen Wert vergrößern. In dieser 4-Byte-Marke stehen die aktuellen WindowFlags. Eine genaue Beschreibung dieser Flags finden Sie in dem Abschnitt »Wichtige Flags der Intuition-Library«. Ist zu diesem Window eine Menüleiste definiert, so ist dies ein Adreßzeiger auf die erste Menu-Datenstruktur. Ein Adreßzeiger auf eine Null-terminierte Zeichenkette, deren Inhalt auf der Titelleiste dieses Fensters ausgegeben wird. Sind in diesem Fenster Requester aktiv, so ist dies ein Adreßzeiger auf die Requester-Datenstruktur des zuletzt geöffneten. Ü CC co LE DUO) Ü DMRequest 0x0028 (40) RegCount 0x002C (44) WScreen 0x002E (46) RPort 0x0032 (50) BorderLeft 0x0036 (54) BorderTop 0x0037 (55) BorderRight 0x0038 (56) BorderBottom 0x0039 (57) BorderRPort 0x003A (58) FirstGadget 0x003E (62) Parent 0x0042 (66) Descendant 0x0046 (70) Pointer 0x004A (74) PtrHeight 0x004E (78) PtrWidth 0x004E (78) XOffset 0x0050 (80) YOffset 0x0051 (81) IDCMPFlags 0x0052 (82) Sind in diesem Fenster »Doppel-Klick-Requester« aktiv, so ist dies ein Adreßzeiger auf die Requester-Datenstruktur des zuletzt geöffneten. Hier steht die Anzahl der Requester, die im Moment dieses Window sperren. Ein Adreßzeiger auf die zu dem Screen, auf dem dieses Window geöffnet wurde, gehörende Screen-Datenstruktur. Ein Adreßzeiger auf die zu diesem Window gehörende RastPort-Datenstruktur. Die Breite des linken Fensterrandes. Die Höhe des oberen Fensterrandes. Die Breite des rechten Fensterrandes. Die Höhe des unteren Fensterrandes. Ein Adreßzeiger auf eine RastPort-Datenstruktur, deren Parameter für das Zeichnen des Fensterrahmens verwendet werden. Ein Adreßzeiger auf die zu dem ersten Gadget in diesem Fenster gehörende Gadget-Datenstruktur. Sind mehrere Fenster geöffnet (egal, auf welchem Screen), so sind alle zugehörigen Window-Datenstrukturen über den Adreßzeiger Parent rückwärts miteinander verknüpft. Sind mehrere Fenster geöffnet (egal, auf welchem Screen), so sind die zugehörigen Window-Datenstrukturen über den Adreßzeiger Descendant vorwärts miteinander verknüpft. Ein Adreßzeiger auf die Grafikdaten des zu diesem Window gehörenden Mauszeigers. Die Höhe des Mauszeigers, also die Anzahl der Zeilen, aus der sich die zugehörige Grafik zusammensetzt. Die Breite des Mauszeigers, also die Anzahl der Spalten, aus der sich die zugehörige Grafik zusammensetzt. Diese muß kleiner oder gleich 16 sein. Der x-Offset des Hot-Spots in diesem Mauszeiger. Der y-Offset des Hot-Spots in diesem Mauszeiger. In dieser 4-Byte-Marke stehen die IDCMP-Flags, die fest- legen, über welche Events Systemnachrichten geschickt werden. Eine genaue Beschreibung dieser Flags finden Sie in dem Abschnitt »Wichtige Flags der Intuition-Library«. 1 UserPort 0x0056 (86) WindowPort 0x005A (90) MessageKey 0x005E (94) DetailPen 0x0062 (98) BlockPen 0x0063 (99) CheckMark 0x0064 (100) ScreenTitle 0x0068 (104) GZZMouseX 0x006C (108) GZZMouseY 0x006E (110) GZZWidth 0x0070 (112) GZZHeight 0x0072 (114) ExtData 0x0074 (116) UserData 0x0078 (120) WLayer 0x007C (124) IFont 0x0080 (128) Beim Öffnen des Fenters setzt »Intuition« an diese Stelle einen Adreßzeiger auf eine MsgPort-Datenstruktur eines Message-Ports, mit dem Nachrichten empfangen werden können. Beim Öffnen des Fensters setzt »Intuition« an diese Stelle einen Adreßzeiger auf eine MsgPort-Datenstruktur eines Message-Ports, mit dem Nachrichten gesendet werden kön- nen. Ein Adreßzeiger auf die zu diesem Window gehörende /ntui- Message-Datenstruktur. Die Nummer des Farbregisters, dessen Inhalt als Farbe für die »Details« verwendet wird, also für die Einzelheiten in den Gadgets und die Schrift in der Titelleiste. Die Nummer des Farbregisters, dessen Inhalt als Farbe für »gröbere« Elemente verwendet wird, also für das Füllen der Titelleiste. Ein Adreßzeiger auf die /mage-Datenstruktur, die den »CheckMark« zu diesem Window definiert. Ein Adreßzeiger auf eine Null-terminierte Zeichenkette, deren Inhalt auf der Titelleiste des Screens erscheint. Ist dies ein GimmeZeroZero-Window und befindet sich der Mauszeiger innerhalb dieses Fensters, so steht hier die momentane x-Koordinate des Mauszeigers relativ zur inne- ren linken oberen Ecke. Ist dies ein GimmeZeroZero-Window und befindet sich der Mauszeiger innerhalb dieses Fensters, so steht hier die momentane y-Koordinate des Mauszeigers relativ zur inne- ren linken oberen Ecke. Ist dies ein GimmeZeroZero-Window, so steht hier die innere Breite des Fensters, also die Breite ohne den rechten und linken Rand. Ist dieses Window ein GimmeZeroZero-Window, so steht hier die innere Höhe des Fensters, also die Höhe ohne den oberen und unteren Rand. Ein Adreßzeiger für zukünftige Erweiterungen. Ein frei verwendbarer Adreßzeiger für Zusatzdaten. Damit können Sie jedes Window mit eigenen Daten verknüpfen. Ein Adreßzeiger auf die Layer-Datenstruktur, die bei der Darstellung dieses Fensters benutzt wird. Ein Adreßzeiger auf eine TextF'ont-Datenstruktur, die den in diesem Window verwendeten Zeichensatz spezifiziert. „ - 5 ’ K A: g J g 3 / / N NEE N NE N 5 N: N 2 N iE N, 2 Nr ActiveWindow LITT TTS N N N ActiveScreen EEE! Neirstsoreen \/ TETK / Die /IntuitionBase-Datenstruktur Eine eingebundene Library-Datenstruktur Eine eingebundene Node-Datenstruktur zur Verkettung der geöffneten Libraries Ein Adreßzeiger auf die nächste geöffnete Library Ein Adreßzeiger auf die vorher geöffnete Library Eine eingebundene View-Datenstruktur zur Beschreibung des Displays Ein Adreßzeiger auf die Window- Datenstruktur des aktivierten Fensters Ein Adreßzeiger auf die Screen- Datenstruktur des aktiven Bildschirms Ein Adreßzeiger auf die Screen- Datenstruktur des vordersten Bildschirms Abb. 4.1: der Aufbau der Intuition-Base-Datenstruktur. K Seren Y K soreen \ D senpart G vi , SIZLILIER X A [ mer e 5 Meise = TE CT I ee | RPort { RastPort), Z zz Layer / y VRR / A j [, ke a A j # p z 7 in Layer in‘ EL Abb. 4.2: Die Einbindung der Intuition in das Grafiksystem. EEE, Eine typische Verkettung von mehreren A IntuitionBase / Screen- und Window-Datenstrukturen VELLLLLLLLLLEZ / activeWindow SEREZLIFRTZERZE, „ activeScreen H 7 KL LE L//L/L/ A firstScreen VZILLLL Le. eo Momentan aktivesFenster ea 2 zz Y r U Next = MU Next next | 2 ae / |Descen. | Bu |Descen. | Ab, Hat —— Im Hintergrund stehender Screen IT Anmerkung: Die hier dargestellten Adreßzeiger zeigen jeweils auf den Anfang einer Screen- oder Window-Datenstruktur. Adreßzeiger ohne Pfeile sind NULL. Abb. 4.3: Die Verknüpfung der Screens und Windows. m er I Veen ER RIO Ein Adre ßzeiger RSS SEEN en ee, ST NTESEN: N N Ein Adreßzeiger N RI zurück zum Screen. OS Nee \ N W EEE TEEL | => a zn IR = N a&Ü SEEN N Je nach Typ des Gadgets zeigt Speciallnfo auf eine Bool-, Prop- Sasse ae oder StringInfo- Datenstruktur = N Ns Abb. 4.4.B: ... wie die der Gadgets ... N Jeuieelsunbunhemehuem Hindow N} = Re QIIUN NSS N D ET N b SS D an KERLE Item IN N, 5 5 N N N 5 N = ee), xtMen r FirstItem KT ET. re eensiten. (MenuItem ) em wa) SIUSN | en \u AETLTTL—T Te rg 0% > m NlIten i= Kg SS, N RN RN tes: Ion R EN sen ED (Menuitem } es SSIISS | Pextrtem er N SublItem P ————— N I MenuL z SS N Ns ee r N Abb. 4.4.C: ... und des Menü-Strips. (olRCuenurzen) Be Km N Meonuttem \ RN = a („SS TR u FERN Menul ( MenuItem ) em NIIITTTITT gen SubItem mn nennen — > ı SSSTSTCCEN N N IS N AN IS Ss le OP Es NextlItem IN BEE Np Item N ERTL N \ EN N a N sn — >- .ıuo DIN N N ENG Ta TS Di Sr RN N 1 \ DIE GRAPHICS-LIBRARY In dieser Library sind alle die Datenstrukturen und Routinen definiert, die zur »grafischen Gestaltung« notwendig sind. Dazu gehören nicht nur diverse Zeichenbefehle, sondern auch Routinen und Datenstruk- turen, die die grafische Animation ermöglichen. 5.1 Wichtige Flags der Graphics-Library DrawModes (graphics/rastport.h) (Graphics) C Modula-2 Hex Dez Bedeutung JAMI jaml 0000 0 Nur mit der Vordergrund- farbe zeichnen. JAM2 jam2 0001 1 Mit beiden Farben gleich- zeitig zeichnen. COMPLEMENT complement 0002 2 Zeichnen durch XOR- Operation der Pixel. INVERSVIF inversvid 0004 4 Zeichnen mit Farbinvertie- rung der Pixel. Assembler Präfix: RP_. Datenstrukturenreferenz »Graphics«: RastPort. »Intuition«: Border, IntuiText. Routinenreferenz »Graphics«: SetDrMa. ...- Beschreibung Die einzelnen DrawModes-Werte sind für die Festlegung des aktuellen Zeichenmodus innerhalb eines Rastports zuständig. Wichtig: Unter Modula-2 sind die Zeichenmodi als Aufzählungstyp »DrawModes = (dmO, complement, inversvid)« und die eigentliche Bitmaske als Mengentyp DrawModeset definiert. Hier gilt weiterhin: »jaml=DrawModesSet{}« und »jam2=DrawModeSet{dmO}«! FontFlags (graphics/text.h) (Graphics) C Modula-2 Hex Dez Bedeutung FPF_LROMFONT romFont 0001 1 Ist der Font im (Pseudo-) ROM? FPF_DISKFONT diskFont 0002 2 Ist der Font von Diskette geladen? FPF_REVPATH revPath 0004 4 Gilt umgekehrte Schreibrichtung? FPF_TALLDOT tallDot 0008 8 Für HIRES & NON- INTERLACE gedacht? FPF_WIDEDOT wideDot 0010 16 ° FürLORES& INTERLACE gedacht? FPF_PRPORTIONAL proportional 0020 32 Ist dies ein proportionaler Font? FPF_DESIGNED designed 0040 64 Wurde Fontgröße echt geschaffen? FPF_REMOVED removed 0080 128 Wurde der Font bereits entfernt? Datenstrukturenreferenz »Graphics«: RastPort, TextAttr, TextFont. Routinenreferenz Keine. [___> Beschreibung Die einzelnen FontFlags-Werte dienen zur Angabe wichtiger Design- und Laufzeit-Charakteristika eines Textfonts. Wichtig: Unter Modula-2 sind die FontFlags als Aufzählungstyp »FontFlags = (romFont, diskFont, revPath, tallDot, wideDot, proportional, designed, removed)« und die eigentliche Bitmaske als Mengentyp FontFlagSet definiert. FontStyles (graphics/text.h) (Graphics) Modula-2 Hex Bedeutung FS_NORMAL normalFont 0000 © Normaler Text, d.h. nichts gesetzt? FSF_UNDERLINED underlined 0001 1 Unterstrichene Zeichenausgabe? Modula-2 Bedeutung FSF_BOLD bold Fette Zeichenausgabe? FSF_ITALIC italic Kursive Zeichenausgabe? FSF_EXTENDED extended Breitere Zeichen als normal? Datenstrukturenreferenz »Graphics«: RastPort, TextAttr, TextFont. Routinenreferenz »Graphics«: AskSoftStyle, SetSoftStyle. > Beschreibung Die einzelnen FontStyles-Werte dienen zur Auswahl und Angabe des (eventuell algorithmisch zu erzeugenden) Schrifttyps der Zeichen eines Textfonts. Wichtig: Unter Modula-2 sind die Schrifttypen als Aufzählungstyp »FoniStyles = (underlined, bold, italic, extended)« und die eigentliche Bitmaske als Mengentyp FontStyleSet definiert. Hier gilt weiterhin: »normalFont=FontStyleset{}«! ViewModes (graphics/view.h) (Graphics) C Modula-2 Hex Dez Bedeutung GENLOCK_VIDEO genloc Video 0002 2 Video-Genlock vorhanden? LACE lace 0004 4 Interlace-Modus ausgewählt? PFBA pfba 0040 64 Playfield 2 vor Playfield 1? EXTRA_HALFBRITE extraHalfbrite 0080 128 Extra-Halfbrite- Modus gewählt? GENLOCK_AUDIO genlocAudio 0100 256 Audio-Genlock vorhanden? DUALPF dualpf 0400 1024 Dwual-Playfield-Modus gewählt? HAM ham 0800 2048 Hold-And-Modify-Modus gewählt? VP_HIDE vpHide 2000 8192 Viewport vollkommen verdeckt? SPRITES sprites 4000 16384 Werden hier Sprites benutzt? HIRES hires 8000 32768 High-Resolution-Modus gewählt? Datenstrukturenreferenz »Graphics«: View, ViewPort. »Intuition«: NewScreen, (Screen). Routinenreferenz Keine. => Beschreibung Die einzelnen ViewModes-Werte dienen der Beschreibung des tatsächlichen Darstellungsmodus und anderer Charakteristika des Gesamtdisplays oder eines Viewports. Wichtig: Unter Modula-2 sind die ViewModes als Aufzählungstyp »ViewModes = (vmO, genlocVideo, lace, vm3, vm5, pfba, extraHalfbrite, genlcAudio, vm9, dualpf, ham, vm12, vpHide, sprites, hires)« und die eigentliche Bitmaske als Mengentyp ViewModeset definiert. 5.2 Die Datenstrukturen der Graphics-Library AnimComp Offset C (graphics/gels.h) Modula-2 (Graphics) Hex Dez struct AnimComp AnimComp = { RECORD 0000 0 WORD Flags; flags: INTEGER; 0002 2 WORD Timer; timer:INTEGER; 0004 4 WORD TimesSet; timeSet:INTEGER; 0006 6 struct AnimComp *NextComp; nextComp:AnimCompPitr; 000A 10 struct AnimComp *PrevComp; prevComp: AnimCompPitr; O0O0E 14 struct AnimComp *NextSeg; nextSegq:AnimCompPitr; 0012 18 struct AnimComp *PrevSeg; prevSeq:AnimCompPtr; 0016 22 WORD (*AnimCRoutine)(); animCRoutine: ADDRESS; 001A 26 WORD YTrans; yTrans:INTEGER; 001C 28 WORD XTrans; xTrans:INTEGER; O01E 30 struct AnimOb *HeadOb; headOb:AnimObPitr; 0022 34 struct Bob *AnıimBob; animBob:BobPitr; 0026 38 1: END; Assembler Präfix: ac_ Syntax: Strukturname = AC Datenstrukturenreferenz »Graphics«: AnimComp, AnimOb, Bob. Routinenreferenz Keine. __..> Beschreibung Die AnimComp-Datenstruktur wird vom Animationssystem zur Verwaltung der unterschiedlichen Einzelkomponenten eines ganzen Animationsobjekts verwendet (siehe AnimOb-Datenstruktur). Jeder AnimComp-Datenstruktur ist dabei genau ein Bob zugeordnet, das sowohl eine Einzelkomponente insgesamt als auch nur eine Momentaufnahme der Bewegungssequenz einer Einzelkomponente dar- stellen kann. U Flags 0x0000 (0) RINGTRIGGER ANIMHALF 1 Timer 0x0002 (2) I] TimeSet 0x0004 (4) I NextComp 0x0006 (6) 1 PrevComp 0x000A (10) U NextSeq 0x000E (14) J PrevSeq 0x0012 (18) Eine 2-Byte-Marke, deren niederwertigstes Bit gesetzt ist, falls diese Einzelkomponente nur eine Momentaufnahme einer Bewegungssequenz ist. Zur Benutzung sind hier folgende Konstanten vordefiniert: Modula-2 Hex Dez Bedeutung ringTrigger 0001 Handelt es sich um Momentaufnahme? anımHalf 0020 32 Reserviert für internen Systemgebrauch. Eine positive Ganzzahl, deren Wert angibt, wie lange diese Einzelkomponente (z.B. als Teil einer Bewegungssequenz) noch aktiv bleiben soll. Gemessen wird hierbei in Aufrufen der »Graphics«-Systemroutine Animate. Ist dieser Wert permanent gleich null, so bleibt diese Einzelkomponente dauernd aktiv! Eine positive Ganzzahl, deren Wert bei jeder Aktivierung der Einzelkomponente in die Timer-Variable ihrer Anim- Comp-Datenstruktur eingetragen wird. Ein Adreßzeiger auf die AnimComp-Datenstruktur, die der nächsten Einzelkomponente des betreffenden Animations- objekts zugeordnet ist. Über die NextComp-Zeiger werden sämtliche Einzelkomponenten eines Animationsobjekts vorwärts verkettet. Ein Adreßzeiger auf die AnimComp-Datenstruktur, die der vorangehenden Einzelkomponente des betreffenden Anima- tionsobjekts zugeordnet ist. Über die NextComp-Zeiger werden sämtliche Einzelkomponenten eines Animations- objekts rückwärts verkettet. Ein Adreßzeiger auf die AnimComp-Datenstruktur der näch- sten Momentaufnahme innerhalb der Bewegungssequenz, zu der diese Einzelkomponente gehört. Über die NextSeq- Zeiger werden sämtliche Momentaufnahmen einer Bewe- gungssequenz vorwärts verkettet. Ein Adreßzeiger auf die AnimComp-Datenstruktur der näch- sten Momentaufnahme innerhalb der Bewegungssequenz, zu der diese Einzelkomponente gehört. Über die PrevSeg- Zeiger werden sämtliche Momentaufnahmen einer Bewe- gungssequenz vorwärts verkettet. I AnimCRoutine 0x0016 (22) 1 YTrans 0x001A (26) 4 XTrans 0x001C (28) I HeadOb 0x001E (30) 4 AnimBob 0x0022 (34) Die Adresse des Codebereichs einer Routine, die nach jedem Animationsschritt zur weiteren Bearbeitung dieser Einzel- komponente aufgerufen wird. Eine Ganzzahl, deren Wert die y-Koordinate der linken oberen Ecke dieser Einzelkomponente relativ zum Registra- tionspunkt des übergeordneten Animationsobjekts angibt. Eine Ganzzahl, deren Wert die x-Koordinate der linken oberen Ecke dieser Einzelkomponente relativ zum Registra- tionspunkt des übergeordneten Animationsobjekts angibt. Ein Adreßzeiger auf die AnimOb-Datenstruktur des Anima- tionsobjekts, dem diese Einzelkomponente zugeordnet ist. Ein Adreßzeiger auf die Bob-Datenstruktur des Bobs, das speziell dieser Einzelkomponente zugeordnet ist. AnimOb Offset C (graphics/gels.h) Modula-2 (Graphics) Hex Dez struct AnimOb AnimOb = Pe RECORD 0000 0 struct AnimOb *NextOb; nextOb:AnimObPtr; 0004 4 struct AnimOb *PrevOb; prevOb:AnimObPrtr; 0008 8 LONG Clock; clock:LONGINT; 000C 12 WORD AnOldY,; anOldY:INTEGER; O00E 14 WORD AnOldX; anOldX:INTEGER; 0010 16 WORD AnY; anY:INTEGER; 0012 18 WORD AnX; anX:INTEGER; 0014 20 WORD YVel; yVel:INTEGER; 0016 22 WORD XVel; xVel:INTEGER; 0018 24 WORD Y Aceel; yAccel:INTEGER; 001A 26 WORD X Acceel; xAccel:INTEGER; 001C 28 WORD RingYTrans; ringY Trans: INTEGER; 001E 30 WORD RingXTrans; ringXTrans:INTEGER; 0020 32 WORD (*AnimORoutine)(); animORoutine: ADDRESS; 0024 36 struct AnimComp *HeadComp; headComp: AnimCompPtr; 0028 40 AUserStuff AUserExt; \ 002A 42 }; END; Assembler Präfix: ao Syntax: Strukturname = AO Datenstrukturenreferenz »Graphics«: AnimComp, AnimOb. Routinenreferenz »Graphics«: AddAnimOb, FreeGBuffers, GetGBuffers, InitGMasks. Beschreibung Die AnimOb-Datenstruktur dient der Systemsoftware zur Verwaltung ganzer Animationsobjekte. Insge- samt kennt das Animationssystem des Amigas folgende Animationselemente: Hardwaresprites, virtuelle Sprites, Bobs, AnimComp-Einzelkomponenten und AnimOb-Animationsobjekte. Dabei erweisen sich die Hardwaresprites in dieser Aufstellung als Ausnahme, da sie im Gegensatz zu den übrigen Animations- elementen direkt von der Hardware gesteuert werden. Die von der Systemsoftware gesteuerten Anima- tionselemente bauen in der angegebenen Reihenfolge aufeinander auf: Ein Bob etwa besteht zur Hälfte aus einem virtuellen Sprite, eine AnimComp-Einzelkomponente enthält ein oder mehrere Bobs und ein Animationsobjekt setzt sich aus mehreren Einzelkomponenten zusammen! Alles in allem sieht der hierarchische Aufbau eines Animationsobjekts also folgendermaßen aus: VSprite I NextOb 0x0000 (0) I PrevOb 0x0004 (4) I Clock 0x0008 (8) 1 AnOldY 0x000C (12) AnimOb AnimComp Bob VSprite Ein Adreßzeiger auf die AnimOb-Datenstruktur des näch- sten Animationsobjekts, das in der betreffenden Anima- tionsliste zu bewegen ist. Über die NextOb-Zeiger werden sämtliche Animationsobjekte einer Animationsliste vor- wärts verkettet. Ein Adreßzeiger auf die AnimOb-Datenstruktur des vor- angehenden Animationsobjekts, das in der betreffenden Animationsliste zu bewegen ist. Über die PrevOb-Zeiger werden sämtliche Animationsobjekte einer Animationsliste rückwärts verkettet. Eine lange Ganzzahl, deren Wert angibt, wie oft das Anima- tionsobjekt schon mittels Aufrufen der »Graphics«- Systemroutine Animate bewegt wurde. Eine Ganzzahl, deren Wert die y-Koordinate der letzten Position des Registrationspunkts dieses Animationsobjekts angibt. AnOldX 0x000E (14) AnY 0x0010 (16) AnX 0x0012 (18) YVel 0x0014 (20) XVel 0x0016 (22) YAccel 0x0018 (24) XAccel 0x001A (26) RingYTrans 0x001C (28) RingXTrans 0x001E (30) AnimORoutine 0x0020 (32) HeadComp 0x0024 (36) Eine Ganzzahl, deren Wert die x-Koordinate der letzten Position des Registrationspunkts dieses Animationsobjekts angibt. Eine Ganzzahl, deren Wert die y-Koordinate der aktuellen Position des Registrationspunkts dieses Animationsobjekts festlegt. Eine Ganzzahl, deren Wert die x-Koordinate der aktuellen Position des Registrationspunkts dieses Animationsobjekts festlegt. Eine Ganzzahl, deren Wert die vertikale Geschwindigkeit des gesamten Animationsobjekts in 1/64 Pixeln pro Bewe- gungsschritt angibt. Eine Ganzzahl, deren Wert die horizontale Geschwindigkeit des gesamten Animationsobjekts in 1/64 Pixeln pro Be- wegungsschritt angibt. Eine Ganzzahl, deren Wert die vertikale Beschleunigung des gesamten Animationsobjekts in 1/64 Pixeln pro Bewegungs- schritt angibt. Eine Ganzzahl, deren Wert die horizontale Beschleunigung des gesamten Animationsobjekts in 1/64 Pixeln pro Bewe- gungsschritt angibt. Eine Ganzzahl, deren Wert den vertikalen Versatz des Regi- strationspunkts dieses Animationsobjekts angibt, der zu seiner aktuellen Position hinzuaddiert wird, falls ein ganzer Ablauf der Bewegungssequenz einer Teilkomponente durchgeführt wurde. Die Addition findet selbstverständlich nur bei gesetztem RINGTRIGGER-Bit der entsprechenden Einzelkomponente statt. Eine Ganzzahl, deren Wert den vertikalen Versatz des Regi- strationspunkts dieses Animationsobjekts angibt, der zu seiner aktuellen Position hinzuaddiert wird, falls ein ganzer Ablauf der Bewegungssequenz einer Teilkomponente durchgeführt wurde. Die Addition findet selbstverständlich nur bei gesetztem RINGTRIGGER-Bit der entsprechenden Einzelkomponente statt. Die Adresse des Codebereichs einer Routine, die nach jedem Animationsschritt zur weiteren Bearbeitung dieses Anima- tionsobjekts aufgerufen wird. Ein Adreßzeiger auf die AnimComp-Datenstruktur der Ein- zelkomponente, die den Anfang der Liste von Einzelkom- ponenten des Animationsobjekts darstellt. I AUserExt 0x0028 (40) Eine vom Benutzer völlig frei definierbare Erweiterung der AnimOb-Datenstruktur zur Aufnahme weiterer Statusinfor- mationen. Zu diesem Zweck ist der Typ AUserStuff im Benutzerprogramm entsprechend zu deklarieren. (Wichtig: Diese Erweiterung ist nur unter C, nicht jedoch unter Modu- la-2 verfügbar!) Arealnfo Offset C (graphics/rastport.h) Modula-2 (Graphics) Hex Dez struct Arealnfo Arealnfo = { RECORD SHORT *VctrTbl; vctrTbl:ADDRESS; SHORT *VctrPtr; vctrPtr- ADDRESS; BYTE *FlagTbl; flagTbl: ADDRESS; BYTE *FlagPrir; flagPtr- ADDRESS; SHORT Count; count:INTEGER; SHORT MaxCount; maxCount:INTEGER; SHORT FirstX; firstX:INTEGER; SHORT First\Y; firstY:INTEGER; & END; Assembler Präfix: ai Datenstrukturenreferenz »Graphics«: RastPort. Routinenreferenz »Graphics«: InitArea. I... > Beschreibung Die Arealnfo-Datenstruktur wird zur Speicherung und Verwaltung eines (zu füllenden) Polygons benutzt und von den verschiedenen Areaxxx-Routinen benötigt. 4 VetrTbl 0x0000 (0) Ein Adreßzeiger auf den Anfang der Tabelle der Poly- goneckpunkte, die punktweise organisiert ist. Für jeden Eckpunkt werden dort seine x- und y-Koordinaten direkt aufeinanderfolgend abgelegt. Insgesamt werden pro Punkt 5 Byte Speicherplatz in der Tabelle benötigt, da neben den eigentlichen Koordinaten am Ende der Tabelle noch diverse Flaggen gespeichert sind. I VetrPtr 0x0004 (4) Ein Adreßzeiger auf das Koordinatenpaar des aktuellen Eckpunkts in der VertrTbl-Tabelle. I FiagTbl 0x0008 (8) Ein Adreßzeiger auf den Anfang der punktweise organisier- ten Tabelle von Vektorflags für das Polygon. U FlagPtr 0x000C (12) Ein Adreßzeiger auf den Anfang der punktweise organisier- ten Tabelle von Füllflags für das Polygon. Diese Füllflags dienen der Speicherung von Clipping-Informationen. JJ Count 0x0010 (16) Eine positive Ganzzahl, deren Wert die momentan in der VetrTbl-Tabelle gespeicherte Anzahl von Eckpunkten des Polygons angibt. I MaxCount 0x0012 (18) Eine positive Ganzzahl, deren Wert die maximal mögliche Anzahl von Eckpunkten festlegt, die in der VctrTbl-Tabelle Platz finden. J FirstX 0x0014 (20) Eine Ganzzahl, deren Wert der x-Koordinate des ersten Eckpunkts des Polygons entspricht. 1 FirstY 0x0016 (22) Eine Ganzzahl, deren Wert der y-Koordinate des ersten Eckpunkts des Polygons entspricht. BitMap Offset C (graphics/gfx.h) Modula-2 (Graphics) struct BitMap BitMap = { RECORD UWORD BytesPerRow; bytesPerRow:CARDINAL; UWORD Rows; rows:CARDINAL; UBYTE Flags; flags:UByfte; UBYTE Depth; depth:UByte; UWORD pad; pad:CARDINAL, PLANEPTR Planes[8]; planes: ARRAY [0..7] OF ADDRESS; }; END; Assembler Präfix: bm_ Syntax: pad —> bm_Pad Datenstrukturenreferenz »Graphics«: ClipRect, Layer, RasInfo, RastPort. »Intuition«: IntuitionBase, NewScreen, NewWin- dow, Requester, Screen. Routinenreferenz »Graphics«: BltBitMap, BltBitMapRastPort, BltMaskBitMapRastPort, InitBitMap. »Layers«!< CreateBehindLayer, CreateUpfront Layer. [> Beschreibung Die BitMap-Datenstruktur dient zur Speicherung der grundlegenden Statusinformationen für den bzw. die Displayspeicherbereiche eines beliebigen Displayelements. Neben der Höhe, Breite und Tiefe sind hier ebenfalls die Zeiger auf die einzelnen Bitplanes vorhanden. I BytesPerRow 0x0000 (0) Eine positive Ganzzahl, deren Wert die Anzahl von Spei- cherbytes je Rasterzeile für die einzelnen Bitplanes angibt. I Rows 0x0002 (2) Eine positive Ganzzahl, deren Wert die Anzahl von Raster- zeilen und damit die Höhe der einzelnen Bitplanes angibt. 3 Flags 0x0004 (4) Eine nur für den Systemgebrauch bestimmte Marke. I Depth 0x0005 (5) Eine positive Ganzzahl, deren Wert die Tiefe der Bitmap angibt. Diese Tiefe entspricht der Anzahl vorhandener Bit- planes. I pad 0x0006 (6) Eine nur für den Systemgebrauch bzw. spätere Erweiterun- gen bestimmte Füllkomponente. II Planes 0x0008 (8) Ein Feld von acht Adreßzeigern auf die Anfänge der einzel- nen Bitplanes. Bob Offset C (graphics/gels.h) Modula-2 (Graphics) Hex Dez struct Bob Bob = { RECORD 0000 0 WORD Flags; flags:BobFlagSet; 0002 2 WORD *SaveBuffer; saveBuffer:- ADDRESS; 0006 6 WORD *ImageShadow; imageShadow: ADDRESS; 000A 10 struct Bob *Before; before:BobPtr; 000C 14 struct Bob * After; after:BobPtr; 0012 18 struct VSprite *BobVSprite; bobV Sprite: VSpritePtr; 0016 22 struct AnimComp *BobComp; bobComp: AnimCompfPtr; 001A 26 struct DBufPacket *DBuffer; dBuffer:DBufPacketPtr; OO1E 30 BUserStuff BUserExt; 0020 32 b END; Assembler Präfix: bob _ Syntax: Strukturname = BOB Flags —> bob_BobFlags Datenstrukturenreferenz »Graphics«: AnimComp, Bob, VSprite. Routinenreferenz »GfxMacros«: RemBob. »Graphics«: AddBob, RemIBob. I___> Beschreibung Die Bob-Datenstruktur wird von den Animationsroutinen zur Speicherung der Daten verwendet, die neben der ohnehin benutzten VSprite-Datenstruktur zur Verwaltung eines Bobs = »blitter object« noch zusätzlich benötigt werden. Die Notwendigkeiteiner eigenen (Zusatz-)Datenstruktur für Bobs ergibt sich daraus, daß sich Bobs und Sprites im Hinblick auf die Erzeugung ihres Ausgabebilds auf dem Monitor grundlegend unterscheiden: Sprites sind echte Hardwareobjekte, die völlig unabhängig von den Bitpla- nes der aktuellen Playfields sichtbar gemacht werden. Für das Ausgabebild eines Sprites ist somit die spezielle Spritehardware zuständig. Bobs dagegen sind Playfield-Objekte. Zur Erzeugung des Ausgabe- bilds eines Bobs muß dessen Image in die Bitplanes des entsprechenden Playfields gezeichnet werden. Bei der Bewegung eines Bobs ist deshalb der Playfield-Hintergrund ständigen Speicher- und Restaurie- rungsaktionen zu unterziehen. Im Falle eines Sprites sind solche Maßnahmen nicht vonnöten, weil das Sprite den Zustand der Playfields überhaupt nicht verändert. I Flags 0x0000 (0) Eine 2-Byte-Marke, deren einzelne Bits Statusinformatio- nen über den aktuellen Zustand und Darstellungsmodus des Bobs enthalten. Zur Benutzung sind hier folgende Konstan- ten vordefiniert, von denen allerdings nur die beiden ersten und das fünfte solche Bits beschreiben, die vom Benutzer verändert werden können. Die restlichen Bits dürfen einzig und allein gelesen werden. C Modula-2 Hex Dez Bedeutung SAVEBOB saveBob 0001 1 Altes Bobimage nicht löschen? BOBISCOMP boblsComp 0002 2 Ist das Bob Teil eines AnimComp? BWAITING bWaiting 0100 256 Wartet das Bob auf seine Darstellung? BDRAWN bDrawn 0200 512 Istdas Bob bereits gezeichnet? BOBSAWAY bobsAway 0400 1024 Soll das Bob entfernt werden? BOBNIX bobNix 0800 2048 Ist das Bob schon ganz entfernt? SAVEPRESERVE savePreserve 1000 4096 Ist der Hintergrund zu speichern? OUTSTEP outStep 2000 8192 Ist der Hintergrund zu löschen? Die letzten beiden Bits SAVEPRESERVE und OUTSTEP werden von den Animationsroutinen im doppelt gepufferten Darstellungsmodus benötigt. Das SAVEBOB-Bit gibt an, ob das an der alten Position gezeichnete Bobimage bei der Bewegung gelöscht werden soll oder nicht: Ist das SAVEBOB-Bit gesetzt, so wird das alte Bobimage nicht gelöscht. Auf diese Art und Weise kann man ein Bob sehr einfach und elegant als Zeichenpinsel benutzen. U SaveBuffer 0x0002 (2) Ein Adreßzeiger auf einen Speicherbereich im Chip-RAM, in dem die bei der Darstellung des Bobs überschriebenen Hintergrunddaten des Playfields gespeichert werden. Die Größe dieses Speicherbereichs muß mindestens Height*Width*Depth/8 Byte betragen, wobei Dimensions- werte aus der VSprite-Datenstruktur des Bobs stammen. U) ImageShadow 0x0006 (6) Ein Adreßzeiger auf einen Speicherbereich im Chip-RAM, der die Größe einer Bitplane des Bobs haben muß und somit mindestens Height*Width/8 Byte umfassen muß. Die Di- mensionswerte entstammen dabei der VSprite-Datenstruk- tur des Bobs. Der Imageshadow wird beim Zeichnen des Bobs im Rahmen der Bitplane-Maskierung des Playfields benötigt (siehe PlanePick- und PlaneOnOff-Masken der VSprite-Datenstruktur). I Before 0x000A (10) Ein Adreßzeiger auf die Bob-Datenstruktur des Bobs in der GEL-Liste, das direkt vor diesem Bob gezeichnet werden soll. I After 0x000C (14) Ein Adreßzeiger auf die Bob-Datenstruktur des Bobs in der GEL-Liste, nach dem dieses Bob gezeichnet werden soll. I BobVSprite 0x0012 (18) Ein Adreßzeiger auf die zu diesem Bob gehörige VSprite- Datenstruktur, in der die restlichen Statusdaten des Bobs gespeichert sind. I BobComp 0x0016 (22) Ein Adreßzeiger auf die AnimComp-Datenstruktur des Ver- bunds von Animationsobjekten, zu dem dieses Bob gehört. Der Wert dieses Adreßzeigers wird von den Animationsrou- tinen nur dann beachtet, wenn das BOBISCOMP-Bit der Flags-Marke in der Bob-Datenstruktur des Bobs gesetzt ist. I DBuffer 0x001A (26) Ein Adreßzeiger auf eine DBufPacket-Datenstruktur, die im doppelt gepufferten Darstellungsmodus benötigt wird. Der doppelt gepufferte Darstellungsmodus wird durch einen Wert dieses Adreßzeigers ungleich NULL bzw. NIL ausge- wählt. Falls normaler Darstellungsmodus erwünscht ist, muß der DBuffer-Zeiger somit mit dem Wert NULL bzw. NIL initialisiert werden. Wichtig: Falls ein Bob einer GEL-Liste doppelt gepuffert werden soll, dann sind auch alle übrigen Bobs der GEL-Liste doppelt zu puffern! UI BUserkExt 0x001E (30) Eine vom Benutzer völlig frei definierbare Erweiterung der Bob-Datenstruktur zur Aufnahme weiterer Statusinforma- tionen. Zu diesem Zweck ist der Typ BUserS$tuff im Benut- zerprogramm entsprechend zu deklarieren. (Wichtig: Diese Erweiterung ist nur unter C, nicht jedoch unter Modula-2 verfügbar!) ClipRect C (graphics/clip.h) struct ClipRect { LONG reserved; Assembler Datenstrukturenreferenz LONG Flags; b ClipRect = RECORD struct ClipRect *Next; next:ClipRectPtr; struct ClipRect *prev; prev:ClipRectPtr; struct Layer *lobs; lobs:LayerPitr; struct BitMap *BitMap; bitMap:BitMapPir; struct Rectangle bounds; bounds:Rectangle; struct ClipRect *_pl; p1:ClipRectPtr; struct ClipRect *_p2; p2:ClipRectPtr; reserved: LONGINT; flags:LONGINT,; END; Präfix: cr Syntax: struct Rectangle bounds —> WORD cr MinX, cr _MinY,cr_MaxX,cr MaxY »Graphics«: ClipRect, Layer. »Intuition«: IntuitionBase. »Layers«: SwapBitsRastPortClipRect. Routinenreferenz > Beschreibung Die ClipRect-Datenstruktur dient der internen Repräsentation eines rechteckigen Clipping-Bereichs, der den Grafikroutinen beim Zugriff auf einen Layer angibt, in welche Bitmap gezeichnet werden soll. Mehrere Listen von ClipRect-Datenstrukturen werden vom System zur Kennzeichnung und Verwaltung sämtlicher Clipping-und Damage-Bereiche eines Layers verwendet. I Next 0x0000 (0) I prev 0x0004 (4) U lobs 0x0008 (8) 4 BitMap 0x000C (12) Ein Adreßzeiger auf die ClipRect-Datenstruktur des nach- folgenden Clipping-Bereichs in der Clipping-Bereichsliste. Über die NextZeiger werden sämtliche Clipping-Bereiche einer Clipping-Bereichsliste vorwärts verkettet. Ein Adreßzeiger auf die ClipRect-Datenstruktur des voran- gehenden Clipping-Bereichs in der Clipping-Bereichsliste. Über die prevZeiger werden sämtliche Clipping-Bereiche einer Clipping-Bereichsliste rückwärts verkettet. Ein Adreßzeiger auf die Layer-Datenstruktur des Layers, dem dieser Clipping-Bereich zugeordnet ist. Ein Adreßzeiger auf die BitMap-Datenstruktur der Bitmap, in die die Grafikroutinen beim Zugriff auf diesen Clipping- Bereich zeichnen sollen. I bounds 0x0010 (16) Eine Rectangle-Datenstruktur, deren einzelne Komponen- ten die Lage und Ausmaße des Clipping-Bereichs innerhalb des übergeordneten Layers angeben. 43 _pl 0x0018 (24) Ein von den Systemroutinen intern für Verwaltungszwecke benötigter Adreßzeiger auf eine ClipRect-Datenstruktur. 43 _p2 0x001C (28) Siehe _pI]. I reserved 0x0020 (32) Ein für den Systemgebrauch reserviertes Langwort. I Flags 0x0024 (36) Eine 4-Byte-Marke, deren Bit 0 einen für interne System- zwecke benötigten Status des Clipping-Bereichs anzeigt. Zur Benutzung ist folgende Konstante vordefiniert: C Modula-2 Hex Dez CR_NEEDS_NO_CONCEALED_RASTERS NeedsNoConcealedRasters 0001 1 CollTable Omen C (graphics/gels.h) Modula-2 (Graphics) Hex Dez struct CollTable CollTable = { RECORD 0000 0 int (*collPtrs[16])O; collPtrs: ARRAY[0..15] OF AD DRESS 0040 64 ie END; Assembler Die Datenstruktur ist hier in »graphics/view.i« definiert. Präfix: cp_ Datenstrukturenreferenz »Graphics«: GelsInfo. Routinenreferenz Keine. U... Beschreibung Diese Tabelle dient der Aufnahme der Adressen von sechzehn benutzerdefinierten Routinen zur Kollisionsbehandlung. Diese Routinen finden beim Umgang mit dem Animationssystem mannigfaltige Verwendung. I collPtrs 0x0000 (0) Ein Feld von sechzehn Adreßzeigern auf die Codebereiche der Kollisionsroutinen. ColorMap Offset C (graphics/view.h) Modula-2 (Graphics) Hex Dez struct ColorMap ColorMap = { RECORD 0000 0 UBYTE Flags; flags:UByte; 0001 1 UBYTE Type; type:UByte; 0002 2 UWORD Count; count:CARDINAL; 0004 4 APTR ColorTable; colorTable: ADDRESS; 0008 8 8 END; Assembler Präfix: cm_ Datenstrukturenreferenz »Graphics«: IODRPRegq, ViewPort. Routinenreferenz »Graphics«: FreeColorMap, GetColorMap, GetRGB4, SetRGB4CM. ___.> Beschreibung Jeder Viewport besitzt seine eigene Farbpalette, in der die RGB-Zusammensetzung der einzelnen Farben gespeichert ist. Die ColorMap-Datenstruktur dient der Verwaltung einer solchen Farbpalette. I Flags 0x0000 (0) Eine 1-Byte-Marke, die momentan noch nicht bzw. (intern) nur zwischenzeitlich benutzt wird. I Type 0x0001 (1) Eine 1-Byte-Marke, deren Wert den Typ der Farbeinträge dieser Farbpalette festlegt. Bisher ist hierfür lediglich der Wert Null zulässig, wodurch Farbeinträge der Art »xRGB« gekennzeichnet werden. Für die einzelnen Nibble »R«, »G«, »B« (mit Definitionsbereich O bis 15) gilt dabei, daß »R« den Rotanteil, »G« den Grünanteil und »B« den Blauanteil der Farbe angibt. Der endgültige Farbwert berechnet sich dann aus B+/6*G+256*R. I Count 0x0002 (2) Eine positive Ganzzahl, deren Wert die Anzahl der gültigen Farbeinträge der Farbpalette angibt. I ColorTable 0x0004 (4) Ein Adreßzeiger auf den Anfang einer Tabelle von Farb- werten, die gerade soviel Einträge aufweist, wie der Wert von Count angibt. copinit Offset C (graphics/copper.h) Modula-2 (Graphics) Hex struct copinit Copinit = { RECORD UWORD diagstrt[4]; diagstrt: ARRAY [0..3] OF CARDINAL; UWORD sprstrtup[40]; sprstrtup ARRAY [0..39] OF CARDINAL; UWORD sprstop[ 2]; sprstop: ARRAY [0..1] OF CARDINAL; 5 END; Assembler Präfix: copinit_ Datenstrukturenreferenz »Graphics«: GfxBase. Routinenreferenz Keine. ....> Beschreibung Die copinit-Datenstruktur enthält die bereits fertig codierten Datenworte von Copper-Befehlssequenzen, die zur Initialisierung des Displays in Hardware-Copperlisten benötigt werden. I diagstrt 0x0000 (0) Eine codierte Copper-Befehlssequenz für die erste Bitplane. I sprstrtup 0x0008 (8) Eine codierte Copper-Befehlssequenz zur Initialisierung der Sprite-Animation. J sprstop 0x0058 (88) Eine codierte Copper-Befehlssequenz zum Stoppen der Sprite-Animation. Copins Offset C (graphics/copper.h) Modula-2 (Graphics) struct CopIns CoplIns = ( RECORD short OpCode; CASEopCode:CARDINAL OF union { I next: struct CopList *nxtlist; nxtlist:CopListPtr; struct | union | | wait: om C (graphics/copper.h) Modula-2 (Graphics) Hex Dez 0002 9 SHORT VWaitPos; vWaitPos:INTEGER; 0002 2 SHORT DestAddr; hWaitPos:INTEGER; } ul; union { | move: 0004 4 SHORT HWaitPos; destAddr:INTEGER; 0004 4 SHORT DestData; destData:INTEGER; } u2; } ud; }u3; END; 0006 6 }; END; Assembler Präfix: ci Datenstrukturenreferenz »Graphics«: CopList. Routinenreferenz Keine. [___> Beschreibung Die CopIns-Datenstruktur dient sowohl der Aufnahme eines codierten Copper-Befehls als auch dem Verweis auf das nächste Teilstück einer Zwischen-Copperliste. ZI OpCode 0x0000 (0) Die Tag-Marke der Varianten der Cop/ns-Datenstruktur, für die folgende Werte gültig sind: Modula-2 Hex Bedeutung COPPER_MOVE move 0000 Copperbefehl MOVE COPPER_WAIT wait 0001 Copperbefehl WAIT CPRNXTBUF next 0002 Verkettungszeiger I nxtlist 0x0002 (2) Falls die Tag-Marke OpCoae gleich CPRNXTBUF ist, steht hier ein Adreßzeiger auf den nächsten Abschnitt der Zwi- schen-Copperliste. I VWaitPos 0x0000 (2) Falls die Tag-Marke OpCode gleich COPPER_WAIT ist, steht hier die vertikale Position des zugehörigen Copper- Befehls WAIT. 1 DestAddr 0x0002 (2) Falls die Tag-Marke OpCode gleich COPPER_MOVE ist, steht hier die Zieladresse des zugehörigen Copper-Befehls MOVE. 3 HWaitPos 0x0004 (4) Falls die Tag-Marke OpCode gleich COPPER_WAIT ist, steht hier die horizontale Position des zugehörigen Copper- Befehls WAIT. [] DestData 0x0004 (4) Falls die Tag-Marke OpCode gleich COPPER_MOVE ist, steht hier das Datenwort des zugehörigen Copper-Befehls MOVE. CopList C (graphics/copper.h) Modula-2 (Graphics) struct CopList CopList = ( RECORD struct CopList *Next; next:CopListPtr; struct CopList *_CopList; copList:CopListPtr; struct ViewPort *_ViewPort; viewPort:ViewPortPtr; struct CoplIns *Coplns; copIns:CoplInsPtr; struct CopIns *CopPitr; copPtr:CoplInsPtr; UWORD *CopL Start; copLStart:ADDRESS; UWORD *CopSStart; copSStart: ADDRESS; SHORT Count; count:INTEGER; SHORT MaxCount; maxCount:INTEGER; SHORT DyOffset; dyOffset:INTEGER; b END; Assembler Präfix: cl_ Datenstrukturenreferenz »Graphics«: CoplIns, CopList, UCopList, ViewPort. Routinenreferenz »Graphics«: FreeCopList. ._ > Beschreibung Die CopList-Datenstruktur dient zur Verwaltung der Zwischen-Copperlisten, aus denen die »Graphics«- Systemroutine MrgCop die Hardware-Copperlisten berechnet, die zur Erzeugung des Monitorausgabe- bildes benötigt werden. Ein Viewport besitzt mehrere Zwischen-Copperlisten und auch noch eine Benutzer-Copperliste. Alle diese Copperlisten enthalten natürlich eigene Copper-Befehlssequenzen, deren Reihenfolge noch nicht aufeinander abgestimmt ist. Innerhalb der Hardware-Copperlisten eines Views muß dagegen die Reihenfolge stimmen, weil sonst das Ausgabebild nicht korrekt erzeugt werden kann. Daher werden die diversen Copperlisten eines Viewports in Form von Zwischen-Copperlisten verwaltet, weil aus diesen die endgültige Hardware-Copperliste des Views schnell und einfach in der richtigen Reihenfolge zusammengebaut werden kann. DJ Next 0x0000 (0) Ein Adreßzeiger auf die nächste CopList-Datenstruktur der Zwischen-Copperliste, die einen neuen Abschnitt repräsen- tiert. Über die Next-Zeiger werden sämtliche Abschnitte einer Zwischen-Copperliste vorwärts verkettet. U _CopList 0x0004 (4) 1 _ViewPort 0x0008 (8) I CopIns 0x000C (12) 4 CopPtr 0x0010 (16) I CopLStart 0x0014 (20) I CopsSStart 0x0018 (24) I Count 0x001C (28) J MaxCount 0x001E (30) I DyOffset 0x0020 (32) Ein vom System während des Zusammenbaus der Hard- ware-Copperliste aus den diversen Zwischen-Copperlisten intern benötigter Adreßzeiger auf eine CopList-Datenstruk- tur. Ein vom System während des Zusammenbaus der Hard- ware-Copperliste aus den diversen Zwischen-Copperlisten intern benötigter Adreßzeiger auf eine ViewPort-Daten- struktur. Ein Adreßzeiger auf den ersten Cop/ns-Eintrag in der Cop- per-Befehlsliste dieser Zwischen-Copperliste. Ein Adreßzeiger auf den gerade bearbeiteten Cop/ns-Eintrag der Copper-Befehlsliste dieser Zwischen-Copperliste. Ein von der »Graphics«-Systemroutine MrgCop einzutra- gender Adreßzeiger auf die codierte Copper-Befehlssequenz für den »long frame« (siehe ViewPort). Ein von der »Graphics«-Systemroutine MrgCop einzutra- gender Adreßzeiger auf die codierte Copper-Befehlssequenz für den »short frame« (siehe ViewPort). Eine positive Ganzzahl, deren Wert die Anzahl der bisher in diese Zwischen-Copperliste eingetragenen Copper-Befehle angibt. Eine positive Ganzzahl, deren Wert die maximale Anzahl von Copper-Befehlen festlegt, die in dieser Zwischen-Cop- perliste Platz finden. Eine Ganzzahl, deren Wert den vertikalen Offset der in dieser Zwischen-Copperliste enthaltenen WAI/T-Befehle angibt. cprlist —- = 5 Lemsasgan ne enlurnn, I Offset C (graphics/copper.h) Modula-2 (Graphics) Hex Dez struct cprlist Cprlist = { RECORD struct cprlist *Next; next:CprlistPtr; UWORD *start; start: ADDRESS; SHORT MaxCount; maxCount:INTEGER; b END; Assembler Präfix: crl_ Datenstrukturenreferenz »Graphics«: CprList, View. Routinenreferenz »Graphics«: FreeCprlist. > Beschreibung Mit Hilfe der cprlist-Datenstruktur werden von der Systemsoftware die Hardware-Copperlisten ver- waltet. I Next 0x0000 (0) Ein Adreßzeiger auf die nächste cprlist-Datenstruktur in dieser Liste von Hardware-Copperlisten. Über die Next- Zeiger werden sämtliche (Einzel-)Hardware-Copperlisten einer cprlist-Datenstruktur vorwärts verkettet. I start 0x0004 (4) Ein Adreßzeiger auf den Anfang einer tatsächlichen Hard- ware-Copperliste, in der die codierte Copper-Befehls- sequenz zu finden ist. I MaxCount 0x0008 (8) Eine positive Ganzzahl, deren Wert der Anzahl von Copper- Befehlen (das sind jeweils Langworte) in der zugehörigen Hardware-Copperliste entspricht. DBufPacket Offset C (graphics/gels.h) Modula-2 (Graphics) Hex Dez struct DBufPacket DBufPacket = I { RECORD WORD BufY; bufY:INTEGER; 0002 WORD BufX; bufX:INTEGER; 0004 struct VSprite *BufPath; bufPath:VSpritePtr; 0008 WORD *BufBuffer; bufBuffer: ADDRESS; | 000C 5 END; Assembler Präfix: dbp_ Syntax: Strukturname = DBP Datenstrukturenreferenz »Graphics«: Bob. Routinenreferenz Keine. > Beschreibung Bei der Animation von Bobs besteht die Möglichkeit, diese von den Animationsroutinen mit doppelter Pufferung bewegen zu lassen. Dabei nimmt die DBufPacket-Datenstruktur dann die für das Bob neben der Bob-Datenstruktur noch zusätzlich nötigen Informationen auf. Die spezielle DBufPacket-Daten- struktur eines Bobs wird mit diesem über den Adreßzeiger DBuffer seiner Bob-Datenstruktur verknüpft. „1 BufY 0x0000 (0) J BufX 0x0002 (2) 4 BufPath 0x0004 (4) „1 BufBuffer 0x0008 (8) Gelsinfo 38 E Offset C (graphics/rastport.h) Modula-2 (Graphics) struct GelsInfo GelsInfo = [ RECORD 0 BYTE sprRsrvd; sprRsrvd:Byte; 1 UBYTE Flags; flags:Byte; 2 struct VSprite *gelHead; gelHead:VSpritePtr; 6 struct VSprite *gelTail; gelTail:V SpritePtr; 10 WORD *nextLine; nextLine: ADDRESS; 14 WORD **JlastColor; lastColor- ADDRESS; 18 struct collTable *collHandler; collHandler:CollTablePtr; 22 short leftmost; leftmost:INTEGER; 24 short rightmost; rightmost:INTEGER; 26 short topmost; topmost:INTEGER; 28 short bottommost; bottommost:INTEGER,; 30 APTR firstBlissObj; firstBlissObj: ADDRESS; lastBlissObj: ADDRESS; 34 APTR lastBlissObj; Eine Ganzzahl, deren Wert die y-Koordinate der letzten Position des Bobs angibt, an der der Hintergrund im normalen Savebuffer des Bobs (siehe Bob-Datenstruktur) gespeichert wurde. Eine Ganzzahl, deren Wert die x-Koordinate der letzten Position des Bobs angibt, an der der Hintergrund im normalen Savebuffer des Bobs gespeichert wurde. Ein Adreßzeiger auf eine VSprite-Datenstruktur, der vonden Animationsroutinen zur korrekten Einhaltung der Darstel- lungsreihenfolge aller Bobs der GEL-Liste benötigt wird. Der Wert dieses Zeigers hängt eng mit den Adreßzeigern ClearPath und DrawPath aus der VSprite-Datenstruktur des Bobs zusammen. Ein Adreßzeiger auf einen Speicherbereich im Chip-RAM, der mindestens so groß sein muß wie der normale Savebuffer des Bobs (siehe Bob-Datenstruktur). Dieser Speicherbereich dient wie der SaveBuffer zur Aufnahme der Playfield-Hin- tergrunddaten, die bei der Darstellung eines Bobs über- schrieben werden. Im doppelt gepufferten Darstellungsmo- dus werden also zwei verschiedene Pufferspeicher zur Auf- nahme der Hintergrunddaten verwendet. END; Assembler Datenstrukturenreferenz Routinenreferenz Beschreibung Präfix: gi_ »Graphics«: RastPort. »Graphics«: InitGels, SetCollision. Mit Hilfe der Gels/nfo-Datenstruktur verwaltet das Animationssystem eine Liste von GELs = raphic ements, die zusammen im gleichen Displaybereich dargestellt werden sollen. Der gemeinsame Displaybereich für GELs muß auf jeden Fall ein Rastport sein! Die spezielle Gels/Info-Datenstruktureines Rastports wird mit diesem über den Adreßzeiger GelsI/nfo seiner RastPort-Datenstruktur verknüpft. Aus den in der GelsInfo-Datenstruktur enthaltenen Informationen berechnet insbesondere die Spritemaschi- ne die tatsächlichen Zuordnungen der aktivierten virtuellen Sprites. I sprRsrvd 0x0000 (0) Q Flags 0x0001 (1) I gelHead 0x0002 (2) I gelTail 0x0006 (6) 1 nextLine 0x000A (10) I lastColor 0x000E (14) 1 collHandler 0x0012 (18) Eine 1-Byte-Marke, deren einzelne Bits festlegen, welche der Hardwaresprites O bis 7 von der Spritemaschine für die Zuweisung an virtuelle Sprites nicht benutzt werden dürfen. Eine intern für den Systemgebrauch der Animationsroutinen bestimmte 1-Byte-Marke. Ein Adreßzeiger auf die VSprite-Datenstruktur des ersten Elements der GEL-Liste dieses Gelsinfos. Beachten Sie bitte, daß dieses Anfangselement lediglich als Dummy-GEL fungiert und nicht gezeichnet wird. Ein Adreßzeiger auf die VSprite-Datenstruktur des letzten Elements der GEL-Liste dieses Gelsinfos. Beachten Sie bitte, daß dieses Endelement lediglich als Dummy-GEL fungiert und nicht gezeichnet wird. Ein Adreßzeiger auf ein Feld von acht Ganzzahlen, deren Werte die Zeilennummern angeben, bei denen das entspre- chende Hardwaresprite wieder für eine Neuzuordnung ver- fügbar ist. Dabei beschreibt das Feldelement O die nächste freie Zeile für Hardwaresprite O usw. bis hin zu Feldelement 7, das für Hardwaresprite 7 zuständig ist. Diese Angaben bzgl. der nächsten freien Zeilen benötigt die Spritemaschine zur flexiblen und gleichzeitig korrekten Zuordnung aller virtuellen Sprites dieser GEL-Liste. Ein Adreßzeiger auf ein Feld von weiteren acht Adreßzei- gern, die auf die für die entsprechenden Hardwaresprites zuletzt benutzten (Mini-)Farbtabellen verweisen. Für die Zuordnung der Feldelemente zu den einzelnen Hardware- sprites siehe Erläuterungen zum Adreßzeiger nextLine. Ein Adreßzeiger auf eine collTable-Datenstruktur, in der die Adressen der sechzehn benutzerdefinierten Kollisionsrouti- nen gespeichert sind, die für Kollisionsbehandlung sämt- licher GELs dieser GEL-Liste zuständig sind. I leftmost 0x0016 (22) Eine Ganzzahl, deren Wert die x-Koordinate des linken Rands des Clipping-Bereichs dieser GEL-Liste festlegt. Dieser Wert wird von den Animationsroutinen benötigt, um die Kollision eines GELs mit den Randbegrenzungen des Clipping-Bereichs feststellen zu können. I rightmost 0x0018 (24) Eine Ganzzahl, deren Wert die x-Koordinate des rechten Rands des Clipping-Bereichs dieser GEL-Liste festlegt. Dieser Wert wird von den Animationsroutinen benötigt, um die Kollision eines GELs mit den Randbegrenzungen des Clipping-Bereichs feststellen zu können. I topmost 0x001A (26) Eine Ganzzahl, deren Wert die y-Koordinate des oberen Rands des Clipping-Bereichs dieser GEL-Liste festlegt. Dieser Wert wird von den Animationsroutinen benötigt, um die Kollision eines GELs mit den Randbegrenzungen des Clipping-Bereichs feststellen zu können. I bottommost 0x001C (28) Eine Ganzzahl, deren Wert die y-Koordinate des unteren Rands des Clipping-Bereichs dieser GEL-Liste festlegt. Dieser Wert wird von den Animationsroutinen benötigt, um die Kollision eines GELs mit den Randbegrenzungen des Clipping-Bereichs feststellen zu können. I firstBlissObj 0x001E (30) Ein für den Gebrauch durch die Animationsroutinen be- stimmter Adreßzeiger, der normalerweise auf das erste Bob dieser GEL-Liste verweist. I lastBlissObj 0x0022 (34) Ein für den Gebrauch durch die Animationsroutinen be- stimmter Adreßzeiger, der normalerweise auf das letzte Bob dieser GEL-Liste verweist. GfxBase 7 eb Offset | C (graphics/gfxbase.h) Modula-2 (Graphics) Hex Dez struct GfxBase GfxBase = ee RECORD 0000 0 struct Library LibNode; libNode:Library; 0022 34 struct View *ActiView; actiView:ViewPtr; 0026 38 struct copinit *copinit; copinit:CopinitPtr; 002A 42 long *cia; ciıa: ADDRESS; 002E 46 long *blitter; blitter- ADDRESS; 0032 50 UWORD *LOFlist:; loFlist: ADDRESS; 0036 54 UWORD *SHRhlist; shFlist: ADDRESS; 003A 58 struct bltnode *blthd; blthd:BltnodePtr; 003E 62 struct bltnode *blitt]; blttl:BltnodePtr; Offset ns C (graphics/gfxbase.h) — Assembler 118 140 154 158 160 161 162 164 166 167 168 170 172 174 188 192 206 208 212 struct bltnode *bsbithd; struct bltnode *bsbilttl; struct Interrupt vbsrv; struct Interrupt timsrv; struct Interrupt bltsrv; struct List TextFonts; struct TextFont *DefaultFont; UWORD Modes; BYTE VBlank; BYTE Debug; SHORT BeamsSync; SHORT system_bplconO; UBYTE SpriteReserved; UBYTE bytereserved; USHORT Flags; SHORT BlitLock; short BlitNest; struct List BlitWaitQ; struct Task *BlitOwner; struct List TOF_WaitQ; UWORD DisplayFlags; struct SimpleSprite **SimpleSprites; UWORD MaxDisplayRow; UWORD MaxDisplayColumn; UWORD NormalDisplayRows; UWORD NormalDisplayColumns UWORD NormalDPMX; UWORD NormalDPMY,; struct SignalSemaphore *LastChanceMemory; UWORD *LCMptr; UWORD MiicrosPerLine; UWORD MinDisplayColumn; ULONG reserved[23]; Präfix: Syntax: Datenstrukturenreferenz Routinenreferenz »Intuition«: »Exec«: ’ Modula-2 (Graphics) bsblthd:BltnodePtr; bsblttl:BltnodePtr; vbsrv:Interrupt; timsrv:Interrupt; bltsrv:Interrupt; textFonts:List; defaultFont: TextFontPtr; modes:BITSET; vBlank:UByte; debug:BYTE,; beamSync:INTEGER; bplconO0:BITSET; spriteReserved:UByte; bytereserved:UByte; flags:BITSET,; blitLock:INTEGER; blitNest:INTEGER; blitWaitQ:List; blitOwner:TaskPtr; waitQ:List; displayFlags:DisplayFlagSet; simpleSprites: ADDRESS; maxDisplayRow:CARDINAL; maxDisplayColumn:CARDINAL; normalDisplayRows:CARDINAL, normalDisplayColumns:CARDINAL; normalDPMX:CARDINAL; normalDPMY:CARDINAL; lastChanceMemory: SignalSemaphorePtr; IcMptr- ADDRESS; microsPerLine:CARDINAL; reserved: ARRAY [0..1] OF LONGCARD; END; 8b_ Komponente LibNode ist nicht definiert! IntuitionBase. OldOpenLibrary, OpenLibrary. Beschreibung Die GfxBase-Datenstruktur stellt die Basisdatenstruktur der »graphics.library« dar, die beim ersten Öffnen dieser Bibliothek erzeugt wird. In der GfxBase-Datenstruktur sind der momentan aktive View, die Display-Copperlisten, die Systemfontliste, die diversen Job-Listen des Blitters, die drei (Standard-) Interrupt-Server, die den Hardwaresprites zugeordneten SimpleSprite-Datenstrukturen, eine Liste auf den Blitter wartender Tasks sowie eine Liste auf das »vertical blanking« Intervall wartender Tasks verankert. Darüber hinaus finden sich hier eine Vielzahl weiterer Statusinformationen bezüglich der verfügbaren Displayhardware und des aktuellen Displays. I LibNode 0x0000 (0) I ActiView 0x0022 (34) I copinit 0x0026 (38) I cia 0x002A (42) I blitter 0x002E (46) U LOFlist 0x0032 (50) J SHFlist 0x0036 (54) 4 bithd 0x003A (58) U bittl 0x003E (62) J bsblthd 0x0042 (66) I bsbittl 0x0046 (70) Eine Library-Datenstruktur (siehe »Exec«), die den Eintrag der »graphics.library« in der globalen (Library-)Liste der Systembibliotheken darstellt. Ein Adreßzeiger auf die View-Datenstruktur des gerade geladenen und damit sichtbaren Views. Ein Adreßzeiger auf die copinit-Datenstruktur, deren Hard- ware-Copperlisten momentan für den Copper-Startup verwendet werden. Ein Adreßzeiger auf einen Speicherbereich im Chip-RAM, der als Resource für den CIA-Baustein 8520 dient. Ein bisher nicht benutzter Adreßzeiger auf einen Speicher- bereich im Chip-RAM, der dem Blitter zukünftig als Re- source dienen soll. Ein Adreßzeiger auf die codierten Daten der Hardware- Copperliste zur Darstellung des »long frame« (siehe View- port). Ein Adreßzeiger auf die codierten Daten der Hardware- Copperliste zur Darstellung des »short frame« (siehe View- port). Ein Adreßzeiger auf die bltnode-Datenstruktur des Anfangs- elements der FIFO-Schlange von unerledigten Blitterjobs, die durch Aufrufe der »Graphics«-Routine OBlir in Auftrag gegeben wurden. Ein Adreßzeiger auf die bltnode-Datenstruktur des letzten Elements der FIFO-Schlange von unerledigten Blitterjobs, die durch Aufrufe der »Graphics«-Routine OBlit in Auftrag gegeben wurden. Ein Adreßzeiger auf die bltnode-Datenstruktur des Anfangs- elements der FIFO-Schlange von unerledigten BS-Blitter- jobs, die durch Aufrufe der »Graphics«-Routine OBSBlit in Auftrag gegeben wurden. Die Abkürzung »QBS« steht dabei für »queue beam synchronized«. Ein Adreßzeiger auf die bltnode-Datenstruktur des letzten Elements der FIFO-Schlange von unerledigten BS-Blitter- vbsrv 0x004A (74) timsrv 0x0060 (96) bltsrv 0x0076 (118) TextFonts 0x008C (140) DefaultFont 0x009A (154) Modes 0x009E (158) VBlank 0x00A0 (160) Debug 0x00A1 (161) BeamSync 0x00A2 (162) system_bplconO 0x00A4 (164) SpriteReserved 0x00A6 (166) bytereserved 0x00A7 (167) Flags 0x00A8 (168) BlitLock 0x00AA (170) BlitNest 0x00AC (172) jobs, die durch Aufrufe der »Graphics«-Routine OBSBlit in Auftrag gegeben wurden. Die Abkürzung »QBS« steht dabei für »queue beam synchronized«. Eine /Interrupt-Datenstruktur (siehe »Exec«), die den für »vertical blanking«-Unterbrechungen zuständigen Inter- rupt-Server identifiziert. Eine Interrupt-Datenstruktur (siehe »Exec«), die den für Timer-Unterbrechungen zuständigen Interrupt-Server iden- tifiziert. Eine /Interrupt-Datenstruktur (siehe »Exec«), die den für Blitter-Unterbrechungen zuständigen Interrupt-Server identifiziert. Eine List-Datenstruktur (siehe »Exec«), die der Verwaltung der Systemfontliste dient. In diese Liste werden alle momen- tan verfügbaren Textfonts über die Komponente mn_Node der tf Message ihrer TextFont-Datenstruktur eingereiht. Ein Adreßzeiger auf die TextFont-Datenstruktur des Text- fonts, der von den »Graphics«-Routinen standardmäßig verwendet wird. Laut [RKA] findet sich hier eine Kopie des aktuellen Werts des BPLCONO-Registers (siehe Datenstruktur Custom in »Hardware«). 277? (Hat offensichtlich etwas mit dem »vertical blanking« Intervall zu tun!) 27? (Habe meinen Wellensittich befragt... Er meint das geht in Richtung »Debugger Wack«.) ??? (Vermutung: Entsprechender beamsync-Wert des nächsten blitnode-Blitterjobs.) Laut [RKA] wird dieser Wert für jedes Display ins BPLCONDO-Register geODERt. Eine 1-Byte Marke, deren einzelne Bits angeben, welche der Hardwaresprites O0 bis 7 momentan für den exklusiven Ge- brauch durch irgendwelche Tasks reserviert sind. Eine für den Systemgebrauch reservierte 1-Byte-Marke. ??7? (Unser Vorschlag an Commodore: Ein wenig Glasnost könnte hier nicht schaden!) Eine Ganzzahl, deren Wert als Sperrmarkierung bei der exklusiven Benutzung des Blitters durch einen Task fun- giert. Eine Ganzzahl, die als Zähler für verschachtelte Anforde- rungen exklusiver Blitter-Benutzung benötigt wird. win Q BlitWaitQ 0x00AE (174) I BlitOwner 0x00BC (188) 1 TOF_WaitQ 0x00C0 (192) „I DisplayFlags 0x00CE (206) Eine List-Datenstruktur (siehe »Exec»), die der Verwaltung der Liste von Tasks dient, die momentan auf die Benutzung des Blitters warten. Ein Adreßzeiger auf die Task-Datenstruktur (siehe »Exec«) der Task, die den Blitter gerade exklusiv für sich bean- sprucht. Angemeldet werden entsprechende Blitter-Anfor- derungen durch einen Aufruf der »Graphics«-Routine Own- Blit. Eine List-Datenstruktur (siehe »Exec«), die der Verwaltung der Liste von Tasks dient, die im Moment auf das nächste »vertical blanking«-Intervall warten. In diese Liste werden die Tasks bei einem Aufruf der »Graphics«-Routine Wait- TOF eingereiht. Dabei steht die Abkürzung »TOF« für »top of frame«. Eine 2-Byte-Marke, deren einzelne Bits Informationen über die angeschlossene Display-Hardware enthalten. Diese Bits werden beim Einschalten des Amigas bestimmt. Für die Benutzung sind dabei folgende Konstanten vordefiniert: _ C Modula-2 Hex Dez Bedeutung NTSC ntsc 0001 1 Ist ein NTSC-Monitor angeschlossen? GENLOC genloc 0002 2 Ist ein GENLOC-Interface verfügbar? PAL pal 0004 4 Ist ein PAL-Monitor ange- schlossen? Wichtig: In Modula-2 ist hier der Mengentyp DisplayFlagSet zu benutzen. I SimpleSprites 0x00D0 (208) I MaxDisplayRow 0x00D4 (212) WI MaxDisplayColumn 0x00D6 (214) I NormalDisplayRows 0x00D8 (216) I NormalDisplayColumns 0x00DA (216) Ein Adreßzeiger auf ein Feld von acht Adreßzeigern, die auf die SimpleSprite-Datenstrukturen verweisen, die den Hard- waresprites 0 bis 7 momentan zugeordnet sind. Eine positive Ganzzahl, deren Wert die Höhe des größtmög- lichen Low-Resolution-Non-Interlace-Displays inkl. Over- scan-Zeilen angibt. Eine positive Ganzzahl, deren Wert die Breite des größtmög- lichen Low-Resolution-Non-Interlace-Displays inkl. Over- scan-Zeilen angibt. Eine positive Ganzzahl, deren Wert die Höhe des aktuellen Standarddisplays in Pixeln festlegt. Eine positive Ganzzahl, deren Wert die Breite des aktuellen Standarddisplays in Pixeln festlegt. DiE GrRAaPHIcs-LBRARY OO I NormalDPMX 0x00DC (220) 4 NormalDPMY 0x00DE (222) I LastChanceMemory 0x00E0 (224) I LCMptr 0x00E4 (228) „1 MicrosPerLine 0x00E8 (232) 3 MinDisplayColumn 0x00EA (234) 1 reserved 0x00EC (236) Eine positive Ganzzahl, deren Wert die Breite eines Pixels für ein Low-Resolution-Non-Interlace-Display definiert, indem er angibt, wie viele Pixel pro Meter benötigt werden. Die Abkürzung »DPM« bedeutet »dots per meter«. Eine positive Ganzzahl, deren Wert die Höhe eines Pixels für ein Low-Resolution-Non-Interlace-Display definiert, indem er angibt, wie viele Pixel pro Meter benötigt werden. Die Abkürzung »DPM« bedeutet »dots per meter«. Eine SignalSemaphore-Datenstruktur (siehe »Exec«), die den Zugriff mehrerer Tasks auf das »last chance memory« synchronisiert. ?7? (Bedeutet die Abkürzung »LCM« etwa »last chance memory«, dann könnte dies ein Adreßzeiger auf einen Spei- cherbereich für den äußersten Notfall sein.) Eine positive Ganzzahl, deren Wert die Anzahl von Mikro- sekunden angibt, die zum Aufbau eines Videobilds benötigt werden. 7??? (Wen interessieren solche Displaydetails?) Laut [RKA] sind diese Datenbytes für zukünftige Erweite- rungen reserviert. Isrvstr Offset C (graphics/graphint.h) Modula-2 (Graphics) struct Isrvstr Isrvstr = { RECORD struct Node is_Node; node:Node; struct Isrvstr *Iptr; iptr:IsrvstrPtr; int (*code)(); code: ADDRESS; int (*ccode)(); ccode: ADDRESS; int Carg; carg:INTEGER; 1: Assembler Datenstrukturenreferenz Routinenreferenz END; Diese systeminterne Datenstruktur ist in Assembler nicht definiert. »Graphics«: Isrvstr. Keine. — Beschreibung Wird von privater »Graphics«-Systemroutine AddTOFTask dazu benutzt, um Tasks nach Aufruf von WaitTOF an den Vertical-Blank-Interrupt-Server anzuhängen! 1 is_Node 0x0000 (0) I Iptr 0x000E (14) code 0x0012 (18) I ccode 0x0016 (22) U Carg 0x001A (26) Layer a Offset | Hex Dez 0000 0 0004 4 0008 8 000C 12 0010 16 0018 24 001C 28 001E 30 0020 32 0022 34 0026 38 002A 42 002C 44 0030 48 0034 52 0038 56 003C 60 0040 64 0044 68 0048 12 0076 118 007E 126 0082 130 0086 134 009C 156 00AO 160 Eine eingebundene Node-Datenstruktur zur Verknüpfung mehrerer solcher Datenstrukturen. Ein Adreßzeiger auf weitere /srvstr-Datenstrukturen. Ein Adreßzeiger auf eine systeminterne Routine. Ein Adreßzeiger auf eine weitere systeminterne Routine. BER C (graphics/clip.h) struct Layer { struct Layer *front; struct Layer *back; struct ClipRect *ClipRect; struct RastPort *rp; struct Rectangle bounds; UBYTE reserved[4]; UWORD priority; UWORD Flags; struct BitMap *SuperBitMap; struct ClipRect *SuperClipRect; APTR Window; SHORT Scroll_X; SHORT Scroll_Y; struct ClipRect *cr; struct ClipRect *cr2; struct ClipRect *crnew; struct ClipRect *SuperSaveClipRects; struct ClipRect *_cliprects; struct Layer_Info *Layerlnfo; struct SignalSemaphore Lock; UBYTE reserved3[8]; struct Region *ClipRegion; struct Region *saveClipRects; UBYTE reserved2[22]; struct Region *Damagelbist; b Modula-2 (Graphics) Layer = RECORD front:LayerPtr; back:LayerPitr; clipRect:ClipRectPtr; rp:RastPortPtr; bounds:Rectangle; reserved: ARRAY [0..3] OF BYTE; priority:CARDINAL; flags:CARDINAL; superBitMap:BitMapPtr; superClipRect:ClipRectPir; window:ADDRESS; scrollX:INTEGER; scrollY:INTEGER; cr:ClipRectPtr; cr2:ClipRectPtr; crnew:ClipRectPtr; superSaveClipRects:ClipRectPtr; cliprects:ClipRectPtr; layerInfo:LayerlInfoPtr; lock:SignalSemaphore; reserved3: ARRAY [0..7J) OFBYTE; clipRegion:RegionPtr; saveClipRects:RegionPtr; reserved2: ARRAY [0..21] OFBYTE; damageList:RegionPtr; END; ERENSNREREN. Assembler Präfix: Ir_ Syntax: struct Rectangle bounds —> UWORD Ir MinX, Ir_MinY, Ir MaxX, Ir MaxY Datenstrukturenreferenz »Graphics«: Layer, LayerInfo, RastPort. »Intuition«: GadgetInfo, GListEnv, Requester, Screen, StringInfo, Window. Routinenreferenz »Graphics«: AttemptLockLayerRom, CopySBitMap, LockLayerRom, SyncSBitMap, Unlock- LayerRom. »Layers«: BeginUpdate, BehindLayer, Create- BehindLayer, CreateUpfrontLayer, DeleteLayer, EndUpdate, InstallClip- Region, Locklayer, MoveLayer, Move- LayerInFrontOf, ScrollLayer, Size- Layer, UnlockLayer, UpfrontLayer, WhichLayer. [> Beschreibung Die Layer-Datenstruktur dient dazu, innerhalb eines Viewports bzw. einer Bitmap einen rechteckigen Arbeitsbereich festzulegen. Diese Arbeitsbereiche sind insofern stapelbar, als daß sie sich mit anderen überlappen dürfen. Dabei sind insbesondere beliebige Überlappungen sowohl in horizontaler als auch in vertikaler Richtung erlaubt. Der Zweck der Layerbildung liegt darin, daß die Grafikroutinen mit ihnen in dem Sinn zusammenarbeiten, daß sie auch in verdeckte Teile des Layers zeichnen. Daher stellen die Layer zusammen mit der »layers.library« die eigentliche Basis des Fenstersystems von Intuition dar. Um eine korrekte Behandlung der Überlappungsbereiche zu gewährleisten, besteht ein Layer vornehm- lich aus einer Menge (Liste!) von Clipping-Bereichen. Diese enthalten in Form von ClipRect-Datenstruk- turen die Informationen darüber, in welche Speicherbereiche die Grafikroutinen zeichnen sollen. Weiterhin werden innerhalb eines Layers noch Damagelisten verwaltet. Dort sind sämtliche Bereiche des Layers eingetragen, die zwischenzeitlich einmal verdeckt waren und daher eventuell einer Auffrischung bedürfen. „I front 0x0000 (0) Ein Adreßzeiger auf die Layer-Datenstruktur des Layers, der momentan unmittelbar über diesem Layer liegt. Über die front-Zeiger werden sämtliche Layer eines Layerinfos in der Reihenfolge ihrer augenblicklichen Lage vorwärts verkettet. I back 0x0004 (4) Ein Adreßzeiger auf die Layer-Datenstruktur des Layers, der momentan unmittelbar unter diesem Layer liegt. Über die back-Zeiger werden sämtliche Layer eines Layerinfos in der Reihenfolge ihrer augenblicklichen Lage rückwärts ver- kettet. I ClipRect 0x0008 (8) Ein Adreßzeiger auf die ClipRect-Datenstruktur des ersten Clipping-Bereichs in der Clipping-Bereichsliste dieses Layers. I rp 0x000C (12) Ein Adreßzeiger auf die RastPort-Datenstruktur des zu diesem Layer gehörigen Rastports. I bounds 0x0010 (16) „J reserved 0x0018 (24) J priority 0x001C (28) 1 Flags 0x001E (30) 6 LAYERSIMPLE LAYERSMART LAYERSUPER Eine Rectangle-Datenstruktur, deren Komponenten die Ausmaße und Lage dieses Layers innerhalb des Viewports bzw. der Bitmap angeben. Ein für den Systemgebrauch reserviertes Feld von vier Bytes. Eine positive Ganzzahl, deren Werteine von den Systemrou- tinen intern benötigte Prioritätskennung des Layers festlegt. Eine 2-Byte-Marke, deren einzelne Bits gemäß der folgen- den Aufstellung Auskunft über den Zustand und die Art des Layers geben. Modula-2 Bedeutung layerSimple Simple-Refresh Layer layerSmart Smart-Refresh Layer layerSuper Superbitmap-Layer LAYERUPDATING layerUpdating Ist gerade ein Update LAYERREFRESH in Gang? LAYERBACKDROP layerBackdrop Backdrop-Layer layerRefresh Läuft gerade ein Refresh? LAYER_CLIPRECTS_LOST Verlust von Clipping-Bereichen durch layerClipRectsLost Speicherprobleme bei vormaliger Layer-Operation Wichtig: In Modula-2 ist hier der Mengentyp LayerFlagSet zu benutzen. I SuperBitMap 0x0020 (32) J SuperClipRect 0x0022 (34) 1 Window 0x0026 (38) I Scroll_X 0x002A (42) Im Falle eines Superbitmap-Layers steht hier ein Adreß- zeiger auf die BitMap-Datenstruktur der benötigten Zusatz- bitmap. Ein Adreßzeiger auf eine ClipRect-Datenstruktur, der im Falle eines Superbitmap-Layers auf den ersten Clipping- Bereich in der Clipping-Bereichsliste der Superbitmap ver- weist. Anderenfalls ist er als Zeiger auf das Anfangselement der Damage-Clippingliste zu deuten, die beim automa- tischen Refresh vom System benötigt wird. Ein Adreßzeiger auf die Datenstruktur, die dem zu diesem Layer gehörigen Fenster zugeordnet ist. Bei der Arbeit mit der Intuition-Oberfläche finden Sie hier demnach einen Adreßzeiger auf die Window-Datenstruktur des Intuition- Fensters. Eine Ganzzahl, deren Wert dem horizontalen Verschiebe- satz in Pixeln entspricht, der diesem Layer mittels des letzten Aufrufs von ScrollLayer zugeordnet wurde. „] Scroll_Y 0x002C (44) I cr 0x0030 (48) 1 cr2 0x0034 (52) I ernew 0x0038 (56) I SuperSaveClipRects 0x003C (60) J _cliprects 0x0040 (64) II LayerInfo 0x0044 (68) I Lock 0x0048 (72) „1 reserved3 0x0076 (118) QO ClipRegion 0x007E (126) „3 saveClipRects 0x0082 (130) I reserved2 0x0086 (134) I DamageList 0x009C (156) Eine Ganzzahl, deren Wert dem vertikalen Verschiebesatz in Pixeln entspricht, der diesem Layer mittels des letzten Auf- rufs von ScrollLayer zugeordnet wurde. Ein Adreßzeiger auf eine ClipRect-Datenstruktur, der von der privaten Systemroutine dedice zur Verwaltung und Analyse der diversen Überlappungsbereiche verwendet wird. Wie Komponente cr. Wie Komponente cr, allerdings dient dieser Zeiger vor- nehmlich der Aufnahme neu erzeugter Clipping-Bereiche. Ein Adreßzeiger auf die erste ClipRect-Datenstruktur einer Liste von Clipping-Bereichen, die im voraus für später als Vorrat allokiert wurden. Ein Adreßzeiger auf eine ClipRect-Datenstruktur, der intern von den Systemroutinen während des Refreshs benötigt wird. Ein Adreßzeiger auf die LayerInfo-Datenstruktur des Layer- infos, das diesen Layer enthält. Eine SignalSemaphore-Datenstruktur (siehe »Exec«), die zum Sperren des Layers benötigt wird und dabei als Syn- chronisationselement für die betroffenen Tasks dient. Ein für den Systemgebrauch reserviertes Feld von acht Bytes. Ein Adreßzeiger auf eine Region-Datenstruktur, die die Ausmaße und Lager der einzelnen rechteckigen Clipping- Bereiche beschreibt. Ein Adreßzeiger auf eine Region-Datenstruktur, die im Falle von schwerwiegenden (Speicher-)Problemen beim Ausstieg durch die Hintertür von den Systemroutinen verwendet wird, um zu retten, was zu retten ist. Ein nicht mehr benutztes Feld von 22 Byte, das aus system- internen Gründen nicht wegfallen darf. Ein Adreßzeiger aufeine Region-Datenstruktur, über die die eigentliche Damageliste des Layers verwaltet wird. Diese enthält genaue Auskünfte darüber, welche Teile des Layers beim Refresh überhaupt einer Auffrischung bedürfen. Insbe- sondere im SimpleRefresh-Modus kann man diesen Zeiger zur Erzeugung interessanter grafischer Effekte einsetzen. Layerlnfo Offset C (graphics/layers.h) Modula-2 (Graphics) Assembler Datenstrukturenreferenz Routinenreferenz D___> Beschreibung struct Layer_Info struct Layer *top_layer; struct Layer *check_Ip; struct Layer *obs; struct MinList FreeClipRects; struct SignalSemaphore Lock; struct List gs_Head; LONG longreserved; UWORD Flags; BYTE fatten_count; BYTE LockLayersCount; UWORD Layerlnfo_extra_size; WORD *blitbuff; struct LayerInfo_extra *LayerInfo_extra; ; Präfix: Syntax: »Graphics«: »Intuition«: »Layers«: Layerlnfo = RECORD layer:LayerPtr; Ip:LayerPtr; obs:LayerPtr; freeClipRects:Minlbist; lock:SignalSemaphore; head:List; longreserved:LONGINT, flags:LayerFlagsSet; count:UByte; lockLayersCount:ÜByte; layerInfoExtraSize:CARDINAL; blitbuff: ADDRESS; layerInfoExtra: ADDRESS; END; li Strukturname = Layer_Info longreserved —> li_long_reserved Layer. Screen. CreateBehindLayer, CreateUpfront- Layer, DisposeLayerInfo, FattenLayer- Info, InitLayers, LockLayerInfo, LockLayers, NewLayerlInfo, ThinLayer- Info, UnlockLayerInfo, UnlockLayers, WhichLayer. Die LayerInfo-Datenstruktur wird von den Systemroutinen der »layers.library« benötigt, um ein rei- bungsloses Zusammenspiel der verschiedenen Layer eines Viewports bzw. einer Bitmap garantieren zu können. „1 top_layer 0x0000 (0) 4 check_Ip 0x0004 (4) I obs 0x0008 (8) I FreeClipRects 0x000C (12) Ein Adreßzeiger auf die Layer-Datenstruktur des obersten Layers der zu diesem Layerinfo gehörigen Layerliste. Ein von den Systemroutinen zu Identifikationzwecken in- tern verwendeter Adreßzeiger auf eine Layer-Datenstruktur. Ein von den Systemroutinen zu Markierungszwecken intern verwendeter Adreßzeiger auf eine Layer-Datenstruktur. Eine MinList-Datenstruktur (siehe »Exec«), über die Adreß- zeiger auf freie Clipping-Rechtecke verwaltet werden. 1 Lock 0x0018 (24) Eine SignalSemaphore-Datenstruktur (siehe »Exec«), die zum Sperren des Layerinfos benötigt wird und dabei als Synchronisationselement für die betroffenen Tasks dient. 3 gs Head 0x0046 (70) Eine für den Systemgebrauch reservierte List-Datenstruktur (siehe »Exec«). [I longreserved 0x0054 (84) Ein für den Systemgebrauch reserviertes Langwort. I Flags 0x0058 (88) C Eine 2-Byte-Marke, deren Bit 0 anzeigt, ob diesem Layer- info bereits ein LayerInfo_extra-Datenbereich zugeordnet wurde. In diesem Fall ist der Wert von Flags dann ungerade. Zur Benutzung sind folgende Konstanten vordefiniert (die Modula-2-Definition als LayerFlagset ist falsch!): Modula-2 Hex Dez NEWLAYERINFO_CALLED newLayerlnfoCalled 0001 1 I fatten_count 0x005A (90) Ein 1-Byte-Zähler, dessen Wert die Anzahl der Anforderun- gen wiedergibt, die bisher für die Zuordnung eines LayerInfo_extra-Datenbereichs zu diesem Layerinfo ge- stellt wurden. UI LockLayersCount 0x005B (91) Ein 1-Byte-Zähler, dessen Wert gleich der Anzahl der momentan gesperrten Layer ist, die zur Layerliste dieses Layerinfos gehören. DO LayerInfo_extra_size 0x005C (92) Eine positive Ganzzahl, deren Wert die Größe des LayerInfo_extra-Datenbereichs dieses Layerinfos in Bytes angibt. I blitbuff 0x005E (94) Ein Adreßzeiger aufeinen Pufferspeicherbereich, der bei der Durchführung von Blitteroperationen innerhalb der Layer des Layerinfos benötigt wird. 4 LayerInfo_extra 0x0062 (98) Ein Adreßzeiger auf den LayerInfo_extra-Datenbereich Rasinfo Hex 0000 - 0004 Dez 0 4 dieses Layerinfos, der aus Geschwindigkeitsgründen vom System für diverse Verwaltungszwecke benutzt wird. C (graphics/view.h) Modula-2 (Graphics) struct RasInfo RasInfo = ( RECORD struct RasInfo *Next; next:RasInfoPtr; struct BitMap *BitMap; bitMap:BitMapPir; om C (graphics/view.h) Modula-2 (Graphics) SHORT RxOffset; rxOÖffset:INTEGER; SHORT RyOffset; ryOffset:INTEGER; EB END; Assembler | Präfix: ri_ Datenstrukturenreferenz »Graphics«: RasInfo, ViewPort. Routinenreferenz Keine. DH Beschreibung In der RasInfo-Datenstruktur werden die Statusinformationen für den Displayspeicher eines Viewport- Playfields untergebracht. 1 Next 0x0000 (0) Ein Adreßzeiger auf eine weitere RasInfo-Datenstruktur, die dem zweiten Playfield eines Viewports im Dual-Playfield- Modus zugeordnet ist. Ansonsten enthält diese Komponente immer den Wert NULL. I BitMap 0x0004 (4) Ein Adreßzeiger auf die der Bitmap des Playfields zugeordnete BitMap-Datenstruktur. I RxOffset 0x0008 (8) Eine Ganzzahl, deren Wert den horizontalen Versatz des Playfields relativ zu den Grenzen seiner Bitmap in Pixeln angibt. I RyOffset 0x000A (10) Eine Ganzzahl, deren Wert den vertikalen Versatz des Play- fields relativ zu den Grenzen seiner Bitmap in Pixeln angibt. RastPort Offset Modula-2 (Graphics) C (graphics/rastport.h) struct RastPort RastPort = { RECORD struct Layer *Layer; layer:LayerPtr; struct BitMap *BitMap; bitMap:BitMapPir; 8 USHORT *AreaPtrn; areaPtrn: ADDRESS; 12 struct TmpRas *TmpRas; tmpRas:TmpRasPtr; 16 struct Arealnfo * Arealnfo; arealnfo:ArealnfoPtr; 20 struct GelsInfo *GelsInfo; gelsInfo:GelsInfoPtr; UBYTE Mask; mask:UByte; Offset C (graphics/rastport.h) Modula-2 (Graphics) Hex Dez 0019 25 001A 26 001B 27 001C 28 001D 29 O01E 30 O01F 31 0020 32 0022 34 0024 36 0026 38 0028 40 0030 48 0032 50 0034 52 0038 56 0039 57 003A 58 003C 60 0O3E 62 0040 64 0042 66 0046 70 O04E 78 005C 92 0064 100 Assembler Datenstrukturenreferenz Routinenreferenz h BYTE FgPen; BYTE BgPen; BYTE AOlPen; BYTE DrawMode; BYTE AreaPtSz; BYTE linpatcnt; BYTEdummy; USHORT Flags; USHORT LinePtrn; SHORT cpx; SHORT cp_y; UBYTE minterms[8]; SHORT PenWidth; SHORT PenHeight; struct TextFont *Font; UBYTE Algostyle; UBYTE TxFlags; UWORD TkHeight; UWORD TxWidth; UWORD TxBaseline; WORD TkxSpacing; APTR *RP_User; ULONG longreserved[2]; UWORD wordreserved[7]; UBYTE reserved[8]; Präfix: Syntax: »Graphics«: »Intuition«: »GfxMacros«: »Graphics«: fgPen:UByte; bgPen:UByte; aQOlPen:UByte; drawMode:DrawModeSet; areaPtSz:UByte; linPatCnt:UByte; dummy:BYTE; flags:RastPortFlagSet; linePtrn:CARDINAL; x:INTEGER; y:INTEGER; minterms: ARRAY [0..7] OF Byte; penWidth:INTEGER; penHeight:INTEGER; font:TextFontPtr; algoStyle:FontStyleSet; txFlags:FontFlagsSet; txHeight:CARDINAL; txWidth:CARDINAL; txBaseline:CARDINAL, txSpacing:INTEGER; user: ADDRESS; longreserved: ARRAY [0..1] OFLONGINT,; wordreserved: ARRAY [0..6] OF WORD; reserved: ARRAY [0..7] OF BYTE; END; rp_ dummy —> rp_Dummy IODRPRegq, Layer. GListEnv, IntuitionBase, Screen, Win- dow. AreaCircle, BNDRYOFF, DrawCircle, SetAfPen, SetDrPt, SetOPen, SetWrMsk. AddAnimOb, AddBob, AddVSprite, Animate, AreaDraw, Areakllipse, AreaEnd, AreaMove, AskFont, AskSoft- Style, BltBitMapRastPort, BltMask- > Beschreibung BitMapRastPort, BltPattern, BltTem- plate, ClearEOL,ClearScreen, ClipBlit, DoCollision, Draw, DrawEllipse, DrawGList, Flood, FreeGBuffers, GetGBuffers, InitRastPort, Move, PolyDraw, ReadPixel, RectFill, RemIBob, ScrollRaster, SetAPen, SetBPen, SetDrMd, SetFont, SetRast, SetSoftStyle, SortGList,SwapBitsRast- PortClipRect, Text, TextLength, Write- Pixel. »Intuition«: DrawBorder, Drawlmage, PrintIText. »Layers«: SwapBitsRastPortClipRect. Die RastPort-Datenstruktur dient der Steuerung der grafischen Zeichen- und Animationsroutinen sowie deren Koordination mit dem eigentlichen Displayspeicher der Bitplanes. Deshalb ist jeder Rastport immer einer ganz bestimmten Bitmap zugeordnet, in deren Bitplanes die rufenden Grafikroutinen zeichnen. Alle höheren Displayelemente besitzen auf dem Amiga ihren eigenen RastPort-Datensatz. Die überragende Bedeutung dieser Datenstruktur für den reibungslosen Ablauf des Augabegeschehens er- kennen Sie nicht zuletzt daran, wie viele Systemroutinen auf einen Rastport direkt zugreifen. Der Umfang der RastPort-Datenstruktur spiegelt die Tatsache wider, daß hier sämtliche Statuswerte des Ausgabezustands eines Displayelements wie z.B. Zeichenmodus oder Füllmuster gespeichert werden. Jo oJ Layer 0x0000 (0) BitMap 0x0004 (4) AreaPtrn 0x0008 (8) TmpRas 0x000C (12) Arealnfo 0x0010 (16) GelsInfo 0x0014 (20) Mask 0x0018 (24) Ein Adreßzeiger auf die diesem Rastport zugeordnete Layer- Datenstruktur. Ein Adreßzeiger auf die BitMap-Datenstruktur, der dieser Rastport zugeordnet ist. Ein Adreßzeiger auf eine Tabelle von Datenworten, die das aktuelle Füllmuster des Rastports darstellen. Die Länge der Tabelle entspricht dem Wert der AreaPt$z-Komponente des Rastports. Ein Adreßzeiger auf die dem Rastport momentan zugeordnete TmpRas-Datenstruktur, die von den grafischen Füllroutinen benötigt wird. Ein Adreßzeiger auf die aktuelle Area/nfo-Datenstruktur des Rastports, die von den Areaxxx-Routinen zum Füllen von Polygonen verwendet wird. Ein Adreßzeiger auf die GelsInfo-Datenstruktur, die dem Rastport gerade zugeordnet ist. Über diese Datenstruktur werden sämtliche Animationsobjekte des Rastports ver- waltet. Eine 1-Byte-Maske, deren einzelne Bits festlegen, welche Bitplanes des Rastports durch die Grafikroutinen tatsächlich verändert werden. Ein Wert von %00000101 = $05 = 5 für diese Schreibmaske wählt die Bitplanes 0 und 2 aus, wobei alle übrigen desaktiviert werden. I FgPen 0x0019 (25) Eine positive Ganzzahl, deren Wert die Nummer der beim Zeichnen in diesem Rastport verwendeten Vordergrund- farbe angibt. I BgPen 0x001A (26) Eine positive Ganzzahl, deren Wert die Nummer der beim Zeichnen in diesem Rastport verwendeten Hintergrundfarbe angibt. I AOlPen 0x001B (27) Eine Ganzzahl, deren Wert die Farbnummer des »area outline pen« angibt. Diese Farbe wird zum Zeichnen der Umrandung einer gefüllten Fläche benutzt, falls das AREA- OUTLINE-Bit in der Flags-Komponente des Rastports ge- setzt ist. „1 DrawMode 0x001C (28) Eine 1-Byte-Marke, deren einzelne Bits den aktuellen Zei- chenmodus des Rastports festlegen (siehe DrawModes). II AreaPtSz 0x001D (29) Eine Ganzzahl, deren Wert die Höhe des aktuellen Füllmu- sters des Rastports angibt. Dieser Wert sollte einer echten Zweierpotenz entsprechen. I linPatCnt 0x001E (30) Eine von den Zeichenroutinen verwendete positive Ganz- zahl, die den aktuellen »Preshift« für das Linienmuster des Rastports festlegt. I dummy 0x001F (31) Ein bisher unbenutztes Füllbyte. I Flags 0x0020 (32) Eine 2-Byte-Marke, deren einzelne Bits das Verhalten der Zeichenroutinen in diesem Rastport steuern. Zur Benutzung sind dabei die folgenden Werte vordefiniert: Modula-2 Hex Dez Bedeutung firstDot 0001 l Ersten Punkt der Linie zeichnen? ONE_DOT oneDot 0002 2 Linien im Ein-Punkt-Modus zeichnen? DBUFFER dBuffer 0004 4 Ist der Rastport doppelt gepuffert? AREAOUTLINE areaQutline 0008 8 Umrandung beim Füllen ‚hervorheben? NOCROSSFILL noCrossFill 0020 32 Keine Überschneidungen beim Füllen? FRST_DOT Wichtig: In Modula ist hier der Mengentyp RastPortFlagSet zu benutzen. LinePtrn 0x0022 (34) cp_x 0x0024 (36) cp_y 0x0026 (38) minTerms 0x0028 (40) PenWidth 0x0030 (48) PenHeight 0x0032 (50) Font 0x0034 (52) AlgoStyle 0x0038 (56) TxFlags 0x0039 (57) TxHeight 0x003A (58) TxWidth 0x003C (60) TxBaseline 0x003E (62) TxSpacing 0x0040 (64) Ein Datenwort, das von den Zeichenroutinen als aktuelles Linienmuster des Rastports verwendet wird. Eine postive Ganzzahl, deren Wert die x-Koordinate der aktuellen Position des Grafikcursors innerhalb des Rastports festlegt. Eine positive Ganzzahl, deren Wert die y-Koordinate der aktuellen Position des Grafikcursors innerhalb des Rastports festlegt. Ein Feld von acht 1-Byte-Marken, die den mit Rastports arbeitenden Blitterroutinen als Minterme der einzelnen Bitplanes des Rastports dienen. Eine positive Ganzzahl, deren Wert die Breite des von den Grafikroutinen verwendeten Zeichenstifts in Pixeln angibt. (Wichtig: Wird bisher nicht verwendet!) Eine positive Ganzzahl, deren Wert die Höhe des von den Grafikroutinen verwendeten Zeichenstifts in Pixeln angibt. (Wichtig: Wird bisher nicht verwendet!) Ein Adreßzeiger auf die dem Rastport momentan zugeordnete TextFont-Datenstruktur, die den für Textaus- gaben innerhalb des Rastports verwendeten Textfont auswählt. Eine 1-Byte-Marke, deren einzelne Bits den algorithmisch zu generierenden Stiltyp für Textausgaben innerhalb des Rastports angeben (siehe FontStyles). Eine 1-Byte-Marke, deren Wert Statusinformationen bezüg- lich des innerhalb des Rastports momentan verwendeten Textfonts enthält. Eine positive Ganzzahl, deren Wert die Höhe der Zeichen des momentan innerhalb des Rastports verwendeten Text- fonts in Pixeln angibt. Eine positive Ganzzahl, deren Wert die nominelle Durch- schnittsbreite der Zeichen des momentan innerhalb des Rastports verwendeten Textfonts in Pixeln angibt. Eine Ganzzahl, deren Wert den Abstand (in Pixeln) der Basislinie der Zeichen des momentan innerhalb des Rast- ports verwendeten Textfonts festlegt. Dieser Abstand wird relativ zum obersten Pixel der Punktmatrix eines jeden Zeichens gemessen. Eine positive Ganzzahl, deren Wert die Breite der im Rast- port auszugebenden Zeichen in Pixeln festlegt. Dieser Wert muß keineswegs dem Wert der TxWidth-Komponente ent- sprechen! I RP _User 0x0042 (66) I longReserved 0x0046 (70) 1 wordReserved 0x004E (78) I reserved 0x005C (92) Rectangle C (graphics/gfx.h) Ein Adreßzeiger auf einen beliebigen Datenbereich, der diesem Rastport vom Benutzer zur freien Verfügung zuge- ordnet wurde. Ein für den internen Systemgebrauch reserviertes Feld von zwei Langworten. Ein nicht mehr benötigtes Feld von sieben Datenworten, das unter früheren Systemversionen eine Node-Datenstruktur von »Exec« beinhaltete. Unter früheren Systemversionen für zukünftige Erweite- rungen reserviertes Feld von acht Bytes. Modula-2 (Graphics) Hex Dez struct Rectangle Rectangle = { RECORD 0000 0 SHORT MinX; minX:INTEGER; 0002 2 SHORT MinY,; minY:INTEGER; 0004 4 SHORT MaxX; maxX:INTEGER; 0006 6 SHORT MaxY; maxY:INTEGER; 0008 8 K END; Assembler Präfix: ra_ Datenstrukturenreferenz »Graphics«: ClipRect, Layer, Region, RegionRec- tangle. Routinenreferenz »Graphics«: AndRectRegion, ClearRectRegion, Or- [__> Beschreibung RectRegion, XorRectRegion. Die Rectangle-Datenstruktur dient der Beschreibung beliebiger rechteckiger Displayausschnitte. 4 MinX 0x0000 (0) U MinY 0x0002 (2) „1 MaxX 0x0004 (4) 1 MaxY 0x0006 (6) Eine Ganzzahl, deren Wert die x-Koordinate des linken oberen Eckpunkts des Rechtecks angibt. Eine Ganzzahl, deren Wert die y-Koordinate des linken oberen Eckpunkts des Rechtecks angibt. Eine Ganzzahl, deren Wert die x-Koordinate des rechten unteren Eckpunkts des Rechtecks angibt. Eine Ganzzahl, deren Wert die y-Koordinate des rechten unteren Eckpunkts des Rechtecks angibt. Region DEE C (graphics/regions.h) struct Region { struct Rectangle bounds; struct RegionRectangle *RegionRectangle; }: Assembler Datenstrukturenreferenz Routinenreferenz [__ > Beschreibung Präfix: »Graphics«: »Intuition«: »Graphics«: »Layers«: Modula-2 (Graphics) Region = RECORD bounds:Rectangle; regionRectangle: RegionRectanglePtr; END; rg_ Layer. IntuitionBase. AndRectRegion, AndRegionRegion, ClearRectRegion, ClearRegion, DisposeRegion, NewRegion, OrRectRegion, OrRegionRegion, XorRectRegion, XorRegionRegion. InstallClipRegion. Die Region-Datenstruktur dient in erster Linie dem Aufbau der Damageliste eines Layers. Zu diesem Zweck ist jeder Region-Datenstruktur als Hauptkomponente eine Liste von RegionRectangle-Recht- ecken zugeordnet. Die Vereinigungsmenge dieser Rechtecke stellt nun genau den von der Region beschriebenen (heterogenen!) Displaybereich dar. Im Falle der Damageliste eines Layers entspricht dieser Bereich gerade den aufzufrischenden Rechteckteilen des Layers. I} bounds 0x0000 (0) U RegionRectangle 0x0004 (4) Eine Rectangle-Datenstruktur, die den kleinsten rechtecki- gen Displayausschnitt beschreibt, in dem sämtliche Recht- ecke der Rechteckliste dieser Region vorhanden sind. Ein Adreßzeiger auf eine RegionRectangle-Datenstruktur, die das Anfangselement der Rechteckliste dieser Region darstellt. RegionRectangle Offset C (graphics/regions.h) Modula-2 (Graphics) Assembler Datenstrukturenreferenz Routinenreferenz 7_-> Beschreibung struct RegionRectangle { struct RegionRectangle *Next; struct RegionRectangle *Prev; struct Rectangle bounds; b RegionRectangle = RECORD next:RegionRectanglePtr; prev:RegionRectanglePtr; bounds:Rectangle; END; Präfix: rr »Graphics«: Region, Rectangle. Keine. Die RegionRectangle-Datenstruktur dient dem Aufbau der Rechteckliste einer Region-Datenstruktur. „1 Next 0x0000 (0) „I Prev 0x0004 (4) 1 bounds 0x0008 (8) SimpleSprite Offset Hex Dez Ein Adreßzeiger auf die RegionRectangle-Datenstruktur des nachfolgenden Elements in der Rechteckliste. Über die Next-Zeiger werden sämtliche Rechtecke einer Region vor- wärts verkettet. Ein Adreßzeiger auf die RegionRectangle-Datenstruktur des vorangehenden Elements in der Rechteckliste. Über die Prev-Zeiger werden sämtliche Rechtecke einer Region rück- wärts verkettet. Eine Rectangle-Datenstruktur, deren einzelne Komponen- ten die Lage und Ausmaße des durch diese RegionRec- tangle-Datenstruktur beschriebenen Rechtecks angeben. C (graphics/sprite.h) Modula-2 (Graphics) struct SimpleSprite SimpleSprite = { RECORD UWORD *posctldata; posctldata: ADDRESS; UWORD height; height:CARDINAL; UWORD x; x:CARDINAL; . UWORD y; y:CARDINAL; num:INTEGER; UWORD num; ; END; Assembler Präfix: ss_ Datenstrukturenreferenz »Intuition«: IntuitionBase. Routinenreferenz »Graphics«: ChangesSprite, GetSprite, MoveSprite. Beschreibung Die SimpleSprite-Datenstruktur wird von den Animationsroutinen zur Darstellung und Verwaltung eines einfachen Hardwaresprites verwendet. Ein einfaches Hardwaresprite ist genau 16 Pixel breit, wohinge- gen seine Höhe frei wählbar ist. Sämtliche Sprites werden immer im normalen Low-Resolution-Modus dargestellt. Gegenüber virtuellen Sprites und Bobs sind die Möglichkeiten der Animation mit einfachen Hardwaresprites stark eingeschränkt. I posctidata 0x0000 (0) Ein Adreßzeiger auf die eigentlichen Displaydaten des ein- fachen Sprites, die man auch SpriteData nennt. Insgesamt umfassen die Spritedaten genau 2*height+4 Datenworte, die im Speicher folgendermaßen anzuordnen sind: BOSCL data. 2 Kontro]lworte ea } Displaydaten Wort Z2*height+l Wort 2*height+t2 Wort 2*height+3 Die ersten beiden werden von der Spritehardware für die Positions- und Statuskontrolle des Sprites benötigt. Deshalb sollten Sie diese am Anfang stets mit Nullen initialisieren. Die nachfolgenden 2*height-Datenworte enthalten dagegen die eigentlichen Displaydaten. Für jede Zeile des Sprites sind hier zwei aufeinanderfolgende Datenworte nötig, deren korrespondierende Bits die Farbe des entspre- chenden Pixels festlegen. Neben der Farbe »Transparent« mit Farbcode $0 = %00 = 0 sind drei weitere Farben auswählbar. Die letzten beiden Datenworte müssen mit Nullen initialisiert werden, da sie der Hardware als Endemarkierung der Spritedaten dienen. Endemarkierungen I height 0x0004 (4) Eine positive Ganzzahl, deren Wert die Höhe des einfachen Sprites, gemessen in normalen Low-Resolution-Pixeln fest- legt. „I x 0x0006 (6) Eine positive Ganzzahl, deren Wert die x-Koordinate der aktuellen Position des einfachen Sprites, gemessen in nor- malen Low-Resolution-Pixel angibt. Dieser Wert ist relativ zum Viewport oder View zu interpretieren, dem das einfache Sprite bei seiner Erzeugung zugeordnet wurde. 4 y 0x0008 (8) Eine positive Ganzzahl, deren Wert die y-Koordinate der aktuellen Position des einfachen Sprites, gemessen in nor- malen Low-Resolution-Pixeln, angibt. Dieser Wert ist rela- tiv zum Viewport oder View zu interpretieren, dem das einfache Sprite bei seiner Erzeugung zugeordnet wurde. U num 0x000A (10) Eine positive Ganzzahl, deren Wert gleich der Nummer des Hardwaresprites ist, dem das einfache Sprite bei seiner Erzeugung zugeordnet wurde. TextAttr C (graphics/text.h) Modula-2 (Graphics) struct TextAttr TextAttr = { RECORD STRPTR ta_Name; name:ADDRESS; UWORD ta_YSize; ySize:CARDINAL; UBYTE ta_Style; style:FontStyleSet; UBYTE ta_Flags; flags:FontFlagSet; IE END; Datenstrukturenreferenz | »DiskFont«: AvailFont. »Intuition«: IntuiText, IntuitionBase, NewScreen, Window. Routinenreferenz »DiskFonte«: OpenDiskFont. »Graphics«: AskFont, OpenFont. [__ > Beschreibung Die TextAttr-Datenstruktur dient zur Aufnahme der Attribute Name, Höhe und Schrifttyp, die einen Textfont eindeutig charakterisieren. J ta_Name 0x0000 (0) Ein Adreßzeiger auf eine Null-terminierte Zeichenkette, die den Namen des Textfonts (ohne Höhenangabe!) angibt. J ta_YSize 0x0004 (4) Eine positive Ganzzahl, deren Wert die Höhe des Textfonts in Pixeln festlegt. _J ta_Style 0x0006 (6) Eine 2-Byte-Marke, deren einzelne FontStyles-Bits dem voreingestellten Darstellungsmodus der Zeichen des Text- fonts entsprechen (siehe FontStyles). 1 ta_Flags 0x0007 (7) Eine 2-Byte-Marke, deren einzelne FontFlags-Bits Aus- kunft über voreingestellte Charakteristika und Statuswerte des Textfonts geben (siehe FontFlags). TextFont Offset C (graphics/text.h) Modula-2 (Graphics) Hex Dez struct TextFont TextFont = ! RECORD 0000 0 struct Message tf_Message; message:Message; 0014 20 UWORD tf_YSıze; ySize:CARDINAL; 0016 22 UBYTE tf_Style; style:FontStyleSet; 0017 23 UBYTE tf_Flags; flags:FontFlagsSet; 0018 24 UWORD tf_ XSize; xSize:CARDINAL; 001A 26 UWORD tf_Baseline; baseline:CARDINAL; v001C 28 UWORD tf_BoldSmear; boldSmear:CARDINAL; 001E 30 UWORD tf_Accessors; accessors:CARDINAL; 0020 32 UBYTE tf_LoChar; loChar:CHAR; 0021 33 UBYTE tf_HiChar; hiChar:CHAR; 0022 34 APTR tf_CharData; charData: ADDRESS; 0026 38 UWORD tf_Modulo; modulo:CARDINAL; 0028 40 APTR tf_CharLoc; charLoc: ADDRESS; 002C 44 APTR tf_CharSpace; charSpace: ADDRESS; 0030 48 APTR tf_CharKem; charKern: ADDRESS; 0034 52 }: END; Datenstrukturenreferenz »Console«: ConUnit. | »DiskFont«: DiskFontHeader. »Graphics«: GfxBase, RastPort. »Intuition«: Window. Routinenreferenz »DiskFont«: OpenDiskFont. »Graphics«: AddFont, CloseFont, OpenFont, RemFont, SetFont. __> Beschreibung In der TextFont-Datenstruktur werden alle Informationen und Statusdaten eines Textfonts (Zeichensat- zes) gespeichert und verwaltet. Neben den eigentlichen Pixelmatrizen, die in einer speziell gepackten Form vorliegen, finden sich hier diverse Größen-, Positionier- und Offsetangaben für die Textfonts. Die TextFont-Datenstruktur ist dabei so konzipiert, daß sämtliche verfügbaren Textfonts bequem in die Systemfontliste integriert und in dieser schnell selektiert werden können. I tf_ Message 0x0000 (0) Eine Message-Datenstruktur (siehe »Exec«), die beim Ent- fernen des Zeichensatzes aus der Systemfontliste als »reply tf_YSize 0x0014 (20) tf_Style 0x0016 (22) tf_ Flags 0x0017 (23) tf_XSize 0x0018 (24) tf_Baseline 0x001A (26) tf_BoldSmear 0x001C (28) tf_Accessors 0x001E (30) tf_LoChar 0x0020 (32) tf HiChar 0x0021 (33) tf CharData 0x0022 (34) tf_Modulo 0x0026 (38) message« dient. Über die mn _node-Komponente dieser Message-Datenstruktur ist der Textfont in die Systemfont- liste eingereiht (siehe GfxBase). Der In_name-Zeiger der mn_node-Komponente verweist auf den Namen des Text- fonts in Form einer normalen C-Zeichenkette. Eine positive Ganzzahl, deren Wert die Höhe der Zeichen des Textfonts in Pixeln angibt. Eine 1-Byte-Marke, deren einzelne FontStyles-Bits den Dar- stellungstyp des Textfonts beschreiben. Eine 1-Byte Marke, deren einzelne FontFlags-Bits Status- informationen bezüglich des Design-Typs des Textfonts beinhalten. Eine positive Ganzzahl, deren Wert die nominale (Durch- schnitts-)Breite der Zeichen des Textfonts in Pixeln angibt. Eine positive Ganzzahl, deren Wert die Entfernung (in Pixeln) der Basiszeile vom oberen Zeichenrand für jedes Zeichen des Textfonts festlegt. Eine positive Ganzzahl, deren Wert die für die (algorithmi- sche) Erzeugung von fetten Zeichen zu verwendende »Verschmierbreite« in Pixeln angibt. Eine positive Ganzzahl, die als Zähler für die diesen Textfont momentan benutzenden Tasks dient. Erst wenn dieser Zähler gleich Null ist, kann der Textfont nach einem entsprechen- den Aufruf der »Graphics«-Routine RemFont endgültig aus der Systemfontliste entfernt werden. Eine positive Ganzzahl, deren Wert den ASCII-Code des kleinsten Zeichens angibt, das in diesem Textfont verfügbar ist (für das der Textfont also eine Punktmatrix enthält). Eine positive Ganzzahl, deren Wert den ASCII-Code des größten Zeichens angibt, das in diesem Textfont verfügbar ist (für das der Textfont also eine Punktmatrix enthält). Ein Adreßzeiger auf einen Speicherbereich im Chip-RAM, der die Daten der Pixelmatrizen aller Zeichen des Textfonts enthält. Die Pixelmatrizen liegen dabei zeilenweise in Bit- form gepackt vor. Allerdings liegen hier nicht etwa die vollständigen Pixelmatrizen nacheinander in Form einer Tabelle vor. Vielmehr werden die korrespondierenden Zei- len sämtlicher Zeichen hintereinander gepackt, angefangen mit der obersten bis hin zu untersten! Eine positive Ganzzahl, deren Wert den Abstand (in Bytes) der Pixeldaten zweier aufeinanderfolgender Zeilen eines Zeichens im tf CharData-Bereich angibt. I tf_CharLoc 0x0028 (40) „I tf_CharSpace 0x002C (44) I tf_CharKern 0x0030 (48) struct TmpRas { BYTE *RasPtr; LONG Size; }; Assembler Datenstrukturenreferenz Routinenreferenz Ein Adreßzeiger auf ein Feld von Ganzzahlpaaren, die den genauen Bitoffset und die Bitbreite sämtlicher Zeichen des Textfonts im ff CharData-Bereich beschreiben. Ein Adreßzeiger auf ein Feld von Ganzzahlen, deren Werte die tatsächliche Breite der korrespondierenden Zeichen des Textfonts in Pixeln festlegen. Diese Informationen werden nur für einen proportionalen Zeichensatz benötigt. Bei nicht- proportionalen Zeichensätzen ist der Wert dieses Adreßzei- gers gleich NULL, und für alle Zeichen gilt die nominale Breite aus ff XSize. Ein Adreßzeiger auf ein Feld von Ganzzahlen, deren Werte für jedes Zeichen des Textfonts den Abstand zwischen erster Spalte des ausgegebenen Zeichenrasters und dem Beginn der eigentlichen Pixelinformationen festlegen. Ist der Wert die- ses Adreßzeigers gleich NULZ, so gilt für sämtliche Zeichen des Textfonts ein einheitlicher Abstand von null. TmpRas = RECORD rasPtr- ADDRESS; size: LONGINT; END; Präfix: ir »Graphics«: RastPort. »Intuition«: IntuitionBase. »Graphics«: InitTmpRas. Die TmpRas-Datenstruktur dient zur Aufnahme einer einzigen, von den »Graphics«-Füllroutinen (wie z.B. AreaCircle) temporär benötigten Bitplane. 1 RasPtr 0x0000 (0) I Size 0x0004 (4) Ein Adreßzeiger auf das erste Datenbyte der temporären Bitplane, die aus einem zusammenhängenden Speicher- bereich im Chip-RAM bestehen muß. Eine positive lange Ganzzahl, deren Wert die Größe der temporären Bitplane in Bytes angibt. UCopList C (graphics/copper.h) Modula-2 (Graphics) struct UCopList UCoplist = { RECORD struct UCopList *Next; next:UCopListPtr; struct CopList *FirstCopList; firstCopList:CopListPtr; struct CopList *CopLbist; copList:CopListPtr; b END; Assembler Präfix: uch Datenstrukturenreferenz »Graphics«: UCopList, ViewPort. Routinenreferenz »GfxMacros«: CEND, CINIT, CMOVE, CWAIT. »Graphics«: CBump, CMove, CWait, UCopper- ListlInit. __> Beschreibung Die UCopList-Datenstruktur wird zur Verwaltung von Benutzer-Copperlisten verwendet, die intern aus mehreren Zwischen-Copperlisten bestehen. „1 Next 0x0000 (0) Ein Adreßzeiger auf die nächste UCopList-Datenstruktur der Benutzer-Copperliste. Über die Next-Zeiger werden sämtliche (Unter-)Abschnitte einer Benutzer-Copperliste vorwärts verkettet. 4 FirstCopList 0x0004 (4) Ein Adreßzeiger auf den ersten Eintrag in der zu dieser Benutzer-Copperliste gehörigen Zwischen-Copgperliste. I CopList 0x0008 (8) Ein Adreßzeiger auf den gerade bearbeiteten Eintrag in der zu dieser Benutzer-Copperliste gehörigen Zwischen- Copperliste. View Offset C (graphics/view.h) struct View { RECORD struct ViewPort *ViewPort; viewPort: ViewPortPtr; struct cprlist *LOFCprLbäist; lofCprList:CprlistPtr; struct cprlist *SHFCprLsist; shfCprList:CprlistPtr; short DyOffset; dyOffset:INTEGER; om C (graphics/view.h) Modula-2 (Graphics) short DxOffset; dxOffset:INTEGER; UWORD Modes; modes:ViewModeSet; b Assembler Präfix: v_ Datenstrukturenreferenz »Graphics«: RastPort. »Intuition«: IntuitionBase. Routinenreferenz »Graphics«: InitView, LoadView, MakeVPort, MrgCop. »Intuition«: ViewAddress. D—T> Beschreibung In der View-Datenstruktur sind sämtliche Informationen gespeichert, die zur Erzeugung des Monitoraus- gabebilds eines Gesamtdisplays (View) und dessen sonstiger Verwaltung notwendig sind. Ein Umschal- ten zwischen zwei völlig unterschiedlichen Gesamtdisplays ist auf dem Amiga deshalb so leicht realisierbar, indem man für jedes Display eine eigene View-Datenstruktur mitsamt den zugehörigen Viewports und Copperlisten entsprechend initialisieren kann. „1 ViewPort 0x0000 (0) Ein Adreßzeiger auf die zum ersten Viewport des Gesamt- displays gehörige ViewPort-Datenstruktur. Dieser Zeiger ist der Startzeiger einer einfach verketteten Liste von ViewPort- Datensätzen aller zum Gesamtdisplay gehörigen Viewports. J LOFCprList 0x0004 (4) Ein Adreßzeiger auf eine Copperliste für die Erzeugung des Monitorausgabebildes des Gesamtdisplays. Diese Copper- liste wird sowohl im Non-Interlace als auch im Interlace- Modus benutzt. Im Interlace-Modus erzeugt sie das Aus- gabebild der ungeraden Zeilen. die Abkürzung »LOF« am Anfang des Bezeichners steht für »long frame«. J SHFCprList 0x0008 (8) Ein Adreßzeiger auf eine Copperliste, die der Erzeugung des Monitorausgabebildes der geraden Zeilen des Gesamtdis- plays im Interlace-Modus dient. Im Non-Interlace-Modus wird diese Copperliste nicht benutzt! Die Abkürzung »SHF« am Anfang des Bezeichners steht für »short frame«. I DyOffset 0x000C (12) Eine Ganzzahl, deren Wert den vertikalen Versatz des Ge- samtdisplays relativ zum Standardnullpunkt angibt. II DxOffset 0x000E (14) Eine Ganzzahl, deren Wert den horizontalen Versatz des Gesamtdisplays relativ zum Standardnullpunkt angibt. [3 Modes 0x0010 (16) Eine 2-Byte-Marke, deren einzelne ViewModes-Bits den aktuellen Darstellungsmodus des Views festlegen. ViewPort one C (graphics/view.h) Modula-2 (Graphics) Hex Dez 0000 0 0004 4 0008 8 000C 12 0010 16 0014 20 0018 24 001A 26 001C 28 001E 30 0020 32 0022 34 0023 35 0024 36 0028 40 Assembler Datenstrukturenreferenz Routinenreferenz struct ViewPort { struct ViewPort *Next; struct ColorMap *ColorMap; struct CopList *DsplIns; struct CopList *SpriIns; struct CopList *CIrIns; struct UCopList *UCoplns; SHORT DWidth; SHORT DHeight; SHORT DxOffset; SHORT DyOffset; UWORD Modes; UBYTE SpritePriorities; UBYTE reserved; struct RasInfo *Raslnfo; Ri Präfix: vp_ »Graphics«: »Intuition«: »Graphics«: »Intuition«: ViewPort = RECORD next:ViewPortPtr; colorMap:ColorMapPtr; dspIns:CopListPtr; sprIns:CopListPtr; clrIns:CopListPtr; uCopIns:UCopListPtr; dWidth:INTEGER; dHeight:INTEGER; dxOffset:INTEGER; dyOffset:INTEGER; modes:ViewModesSet; spritePriorities: UByte; reserved: UByte; rasInfo:RasInfoPtr; END; CopList, View, ViewPort. Screen. ChangesSprite, DrawGList, FreeVPort- CopLists, InitVPort, LoadRGB4, MakeVPort, MoveSprite, RemiBob, ScrollVPort, SetRGB4d, WaitBOVP. ViewPortAddress. Innerhalb eines Gesamtdisplays, das mittels einer View-Datenstruktur verwaltet wird, können beliebige rechteckige Unterdisplayeinheiten eingerichtet werden. Diese ViewPorts werden von der Systemsoft- ware wie eigenständige Minidisplays verwaltet. Die ViewPort-Datenstruktur dient dabei zur Aufnahme der nötigen Statusinformationen wie z.B. Abmessung, Offsets, Farbauswahl, Displaymodus usw.! Wichtig ist in diesem Zusammenhang noch, daß sich zwei Viewports niemals überlappen dürfen. Weiterhin können Viewports nicht horizontal, sondern immer nur vertikal nebeneinander angeordnet werden, wobei mindestens eine Zeile zwischen ihnen liegen muß. 4 Next 0x0000 (0) Ein Adreßzeiger auf die ViewPort-Datenstruktur, die dem nächsten Viewport in der Viewport-Liste des Gesamtdis- plays zugeordnet ist. Der Startzeiger dieser Viewport-Liste steht in der ViewPort-Komponente der entsprechenden View-Datenstruktur. Über die Next-Zeiger werden sämtliche Viewports eines Gesamtdisplays vorwärts verkettet. ColorMap 0x0004 (4) DspIns 0x0008 (8) SprIns 0x000C (12) CirIns 0x0010 (16) UCopIns 0x0014 (20) DWidth 0x0018 (24) DHeight 0x001A (26) DxOffset 0x001C (28) DyOffset 0x001E (30) Modes 0x0020 (32) SpritePriorities 0x0022 (34) reserved 0x0023 (35) RasInfo 0x0024 (36) Ein Adreßzeiger auf den ColorMap-Datensatz der diesem Viewport zugeordneten Farbtabelle. Ein Adreßzeiger auf die Copperliste mit den Anweisungen zur Erstellung des Monitorausgabebildes dieses Viewports. Ein Adreßzeiger auf die Copperliste mit den Anweisungen zur Erstellung des Monitorausgabebildes der diesem View- port zugeordneten Sprites. Ein Adreßzeiger auf eine Copperliste, die vom System ver- waltet und zur Steuerung der Farbregister dieses Viewports benötigt wird. Ein Adreßzeiger auf eine Benutzer-Copperliste, die Sie nach Belieben zur Erledigung Ihrer ganz persönlichen Aufgaben verwenden können. Eine positive Ganzzahl, deren Wert die Höhe des Viewports in Pixeln angibt. Eine positive Ganzzahl, deren Wert die Breite des Viewports in Pixeln angibt. Der vertikale Versatz der linken, oberen Ecke des Viewports relativ zur linken, oberen Ecke des übergeordneten Gesamt- displays, wobei in Pixeln gemessen wird. Der horizontale Versatz der linken, oberen Ecke des View- ports relativ zur linken, oberen Ecke des übergeordneten Gesamtdisplays, wobei in Pixeln gemessen wird. Eine 2-Byte-Marke, deren einzelne ViewModes-Bits den aktuellen Darstellungsmodus des Viewports festlegen. Eine 1-Byte-Marke, deren einzelne Bits die Prioritätszu- stände der diesem Viewport zugeordneten Sprites wider- spiegeln. Ein für den Systemgebrauch bzw. spätere Erweiterungen reserviertes Datenbyte. Ein Adreßzeiger auf die zu diesem Viewport gehörige RasInfo-Datenstruktur. VSprite Offset C (graphics/gels.h) 0000 0 struct VSprite *NextV Sprite; 0004 4 struct VSprite *PrevVSprite; 0008 8 struct VSprite *DrawPath; 000C 12 struct VSprite *ClearPath; 0010 16 WORD OldY; 0012 18 WORD OldX; 0014 20 WORD Flags; 0016 22 WORD Y; 0018 24 WORDX; 001A 26 WORD Height; 001C 28 WORD Width; 001E 30 WORD Depth; 0020 32 WORD MeMask; 0022 34 WORD HitMask; 0024 36 WORD *lImageData; 0028 40 WORD *BorderLine; 002C 44 WORD *CollMask; 0030 48 WORD *SprColors; 0034 52 struct Bob *VSBob; 0038 56 BYTE PlanePick; 0039 57 BYTE PlaneOnOff; 003A 58 VUÜserStuff VUserExt; 003C 60 }; Assembler Präfix: Syntax: Datenstrukturenreferenz »Graphics«: Routinenreferenz »Graphics«: { Modula-2 (Graphics) VSprite = RECORD nextV Sprite:VSpritePtr; prevVSprite:V SpritePtr; drawPath:V SpritePtr; clearPath:V SpritePtr; oldY:INTEGER; oldX:INTEGER; flags: VSpriteFlagSet; y:INTEGER; x:INTEGER; height:INTEGER; width:INTEGER; depth:INTEGER; meMask:BITSET; hitMask:BITSET,; imageData: ADDRESS; borderLine: ADDRESS; collMask: ADDRESS; sprColors: ADDRESS; vsBob:BobPtr; planePick:UByte; planeOnOff:UByte; END; vS_ Strukturname = VS VUserExt —> vs_SUserExt Bob, DBufPacket, GelsInfo, VSprite. AddVSprite, InitGels, InitMasks, RemV Sprite. Die VSprite-Datenstruktur stellt die Basis des gesamten Animationssystems der Amiga-Systemsoftware dar. Die VSprite-Datenstruktur ist der Grundbaustein aller verfügbaren Datenstrukturen zur Beschrei- bung von Animationselementen. Dies geht besonders deutlich aus der Beschreibung zur AnimOb- Datenstruktur hervor! Wie das gesamte Animationssystem hat auch die VSprite-Datenstruktur ein geteiltes Wesen, das sich sowohl aus speziellen Sprite- und Bob-Anteilen als auch aus diesen beiden Arten von GELs gemein- samen Anteilen zusammensetzt. Isoliert betrachtet dient die VSprite-Datenstruktur zunächst nur der Repräsentation virtueller Sprites. Diese sind eine Erweiterung der Hardwaresprites auf Software-Basis. Die virtuelle Spritemaschine kann beliebig viele virtuelle Sprites gleichzeitig verwalten und auf dem Bildschirm bewegen. Darüber hinaus bestehen die zusätzlichen Eigenschaften virtueller Sprites in eigenen Farbpaletten sowie diversen Möglichkeiten der (Software-)Kollisionserkennung und -behand- lung. Zusammen mit einer Bob-Datenstruktur dient die VSprite-Datenstruktur der Repräsentation eines Bobs. Ein Bob kann ohne VSprite-Datenstruktur nicht existieren! I NextVSprite 0x0000 (0) Ein Adreßzeiger auf die VSprite-Datenstruktur des nächsten GELs in der GEL-Liste des Rastports. Über die NextVSprite- Zeiger werden sämtliche GELs der GEL-Liste eines Rast- ports vorwärts verkettet. 3 PrevVSprite 0x0004 (4) Ein Adreßzeiger auf die VSprite-Datenstruktur des voran- gehenden GELs in der GEL-Liste des Rastports. Über die PrevVSprite-Zeiger werden sämtliche GELs der GEL-Liste eines Rastports rückwärts verkettet. II DrawPath 0x0008 (8) Ein Adreßzeiger auf die VSprite-Datenstruktur des Bobs, das vom Animationssystem nach diesem gezeichnet wird. Über die DrawPath-Zeiger werden die VSprite-Datenstrukturen sämtlicher Bobs einer GEL-Liste in Form einer linearen Liste vorwärts verkettet. Diese Liste dient dem System als Pfad beim tatsächlichen Zeichnen der Bobs. Die Anordnung der Bobs in der DrawPath-Liste wird vom Animationssy- stem beim Aufruf der »Graphics«-Routine DrawGList an- hand der After- und Before-Zeichenprioritäten der einzelnen Bobs bestimmt. I ClearPath 0x000C (12) Ähnlich wie DrawPath, allerdings beschreibt diese Liste den Löschpfad zum Löschen von Bob-Überlagerungen. II OldY 0x0010 (16) Eine Ganzzahl, deren Wert die y-Koordinate der letzten Position des GELs relativ zum umgebenden Rastport angibt. I OldX 0x0012 (18) Eine Ganzzahl, deren Wert die x-Koordinate der letzten Position des GELs relativ zum umgebenden Rastport angibt. I Flags 0x0014 (20) Eine 2-Byte-Marke, deren einzelne Bits Statusinformatio- nen bezüglich der aktuellen Darstellungsform des GEL ss ent- halten. Zur Benutzung sind dabei die folgenden Konstanten vordefiniert: C Modula-2 Hex Dez Bedeutung VSPRITE vsprite 0001 gesetzt=virt. Sprite, gelöscht=Bob SAVEBACK saveBack 0002 2 Soll Hintergrund gespeichert werden? C OVERLAY MUSTDRAW BACKSAVED BOBUPDATE GELGONE VSOVERFLOW Modula-2 Hex Dez Bedeutung overlay 0004 4 Soll Bob-Image Hintergrund überdecken? mustDraw 0008 8 Virtuelles Sprite unbedingt zeichnen? backSaved 0100 256 Ist Hintergrund des Bobs gespeichert? bobUpdate 0200 512 Ist der Bob-Update gerade in Gang? gelGone 0400 1024 Ist GEL außerhalb des Clip- Bereichs? vsOverflow 0800 2048 Istein VSprite-Überlauf aufgetreten? Wichtig: In Modula-2 ist hier der Mengentyp VSpriteFlagSet zu verwenden. Die Maske SUSERFLAGS = (x00FF = 255 aller benutzermanipulierbaren Bits der Flags-Maske ist unter C bereits verfügbar. Für Modula-2 ist sie folgendermaßen zu definieren: »SUserFlags = VSpriteFlagSet{vsprite, saveBack, overlay, mustDraw, vf4, vP, vf6, vf7)«! I Y 0x0016 (22) 4 X 0x0018 (24) Ü Height 0x001A (26) I Width 0x001C (28) I Depth 0x001E (30) J MeMask 0x0020 (32) Eine Ganzzahl, deren Wert die y-Koordinate der augenblick- lichen Position des GEL s relativ zum umgebenden Rastport angibt. Eine Ganzzahl, deren Wert die x-Koordinate der augenblick- lichen Position des GELs relativ zum umgebenden Rastport angibt. Eine Ganzzahl, deren Wert der Höhe des GEL-Images in Pixeln entspricht. Eine Ganzzahl, deren Wert der Breite des GEL-Images entspricht. Für echte virtuelle Sprites sollte hier immer der Wert 16 eingetragen sein. Im Falle der VSprite-Datenstruk- tur eines Bobs, gibt dieser Wert die Breite seiner Image- Bitplanes in Datenworten an (siehe /mageData-Kompo- nente). Eine Ganzzahl, deren Wert die Tiefe des GEL-Images in Bitebenen angibt. Diese Komponente ist lediglich für die VSprite-Datenstruktur eines Bobs nicht jedoch für echte virtuelle Sprites von Bedeutung. Eine 2-Byte-Maske, deren einzelne Bits angeben, mit wel- chen GELs dieses GEL eine Kollision erzeugt, falls es von diesen gerammt wird. In diesem Fall wird bei einem Aufruf der »Graphics«-Routine DoCollision die HitMask des ram- menden und am weitesten links oben liegenden GELs mit der MeMask des gerammten und sich rechts unten befindlichen J HitMask 0x0022 (34) I ImageData 0x0024 (36) [I BorderLine 0x0028 (40) I CollMask 0x002C (44) GELs durch eine logische UND-Operation verknüpft. Die so erhaltene Bitmaske gibt anhand der gesetzten Bits Auskunft darüber, welche Art von Kollision (wenn überhaupt) stattge- funden hat. Zur Kollisionsbehandlung ruft das Animations- system danach automatisch die entsprechende Kollisions- routine aus der GelsInfo-Datenstruktur der GEL-Liste auf. Sind gleich mehrere Kollisionen auf einmal aufgetreten, so wird lediglich die niederwertigste Kollisionsroutine akti- viert. Wichtig bei der Benutzung dieser beiden Stoßmasken ist, daß außer dem für Randkollisionen reservierten Bit O alle anderen Bits für den Benutzer frei verfügbar sind. Eine 2-Byte-Maske, deren einzelne Bits angeben, mit wel- chen GELs dieses GEL eine Kollision erzeugt, falls es sie rammt (siehe auch MeMask-Komponente). Ein Adreßzeiger auf einen Speicherbereich im Chip-RAM, der die eigentlichen Displaydaten des GEL-Images enthält. a) Im Falle eines echten virtuellen Sprites umfaßt dieser Bereich genau 2*Height Datenworte. Der /mage-Daten- bereich eines virtuellen Sprites entspricht im Aufbau den Displaydaten eines Hardwaresprites (siehe Simple- Sprite). Allerdings entfallen hier die beiden einleitenden und abschließenden Kontrollworte. b) Das Image eines Bobs wird im ganz normalen Playfield- Format gespeichert: Der /mage-Datenbereich umfaßt hier genau Height*Width*Depth/16 Datenworte und setzt sich aus Depth aufeinanderfolgenden Bitplanes der Größe Height*Width/16 (in Datenworten!) zusammen. Ein Adreßzeiger auf einen Speicherbereich im Chip-RAM, der für ein echtes virtuelles Sprite nur ein Datenwort, im Fall einer VSprite-Datenstruktur eines Bobs dagegen genau Width Datenworte enthält. Diese Datenworte benutzt das Animationssystem zur schnellen Erkennung von GEL-Kol- lisionen mit der rechten oder linken Randbegrenzung des Clipping-Bereichs. Der Wert der Datenworte ergibt sich aus einer kumulierten logischen ODER-Verknüpfung sämt- licher Zeilen der Kollisionsmaske des GELs. Dadurch wird erreicht, daß in der BorderLine-Maske das der äußersten rechten und der äußersten linken, kollisionssensitiven Stelle des GELs entsprechende Bit gesetzt ist. Ein Adreßzeiger auf einen Speicherbereich im Chip-RAM, der genauso groß wie das ganze Image des virtuellen Sprites bzw. wieeine Bitplane des Bob-Images sein muß (im Fall der VSprite-Datenstruktur eines Bobs). Die gesetzten Bits dieser Kollisionsmaske geben die Pixel bzw. Stellen des GEL s an, I SprColors 0x0030 (48) I VSBob 0x0034 (52) 1 PlanePick 0x0038 (56) 4 PlaneOnOff 0x0039 (57) „1 VUserExt 0x003A (58) die sensitiv für Kollisionen mit anderen GELs oder den Randbegrenzungen des Clipping-Bereichs sind. Ein Adreßzeiger auf einen mindestens 6 Byte großen Spei- cherbereich im Chip-RAM, dessen erste drei Datenworte die Farbtabelle dieses virtuellen Sprites darstellen. Ist der Wert des Zeigers gleich NULL, so werden zur Darstellung des Sprites keine neuen Farben verwendet. Für die VSprite- Datenstruktur eines Bobs ist dieser Zeiger bedeutungslos. Ein Adreßzeiger auf die Bob-Datenstruktur des dieser VSpri- te-Datenstruktur übergeordneten Bobs (falls es sich um ein solches handelt). Handelt es sich dagegen um ein echtes virtuelles Sprite, so ist dieser Zeiger bedeutungslos, weswe- gen man ihn am besten mit dem Wert NULL initialisiert. Eine 1-Byte-Maske, deren einzelne Bits festlegen, in welche Bitplanes des Rastports das Bob-Image des zu dieser VSpri- te-Datenstruktur gehörigen Bobs gezeichnet werden soll. Die Nummern der gesetzten Bits entsprechen dabei den Bitplanes, in die gezeichnet werden soll. Ein PlanePick- Wert von %00011001 = 0x0019 = 25 wählt beispielsweise die Bitplanes 0, 3 und 4 zum Zeichnen aus. Für echte virtuelle Sprites ıst diese Maske ohne Bedeutung. Eine 1-Byte-Maske, deren einzelne Bits festlegen, was in die Bitplanes des Rastports gezeichnet werden soll, die nicht durch die PlanePick-Maske zum Zeichnen des Bob-Images ausgewählt werden. Die Bit-nach-Bitplane Zuordnung ent- spricht bei der PlaneOnOff-Maske derjenigen der Plane- Pick-Maske. Überall dort, wo im /mageshadow (siehe Bob- Datenstruktur) des Bobs ein Bit gesetzt ist, wird in die nicht durch PlanePick ausgewählten Bitplanes der Wert des entsprechenden PlaneOnOff-Bits geschrieben. Wie die Pla- nePick-Maske ist auch diese Maske für echte virtuelle Spri- tes ohne Bedeutung. Eine vom Benutzer völlig frei definierbare Erweiterung der VSprite-Datenstruktur zur Aufnahme weiterer Statusinfor- mationen. Zu diesem Zweck ist der Typ VUsersStuff im Benutzerprogramm entsprechend zu deklarieren. (Wichtig: Diese Erweiterung ist nur unter C, nicht jedoch unter Modu- la-2 verfügbar!) KSSSSEESSS Hd: RD en N N III N ColorMap N Ncoiorrabie orTable S AIIITIIIIIIIN N HT Lt, IK// iA 777 | N N 272 ra EEE NEN N Farbtabelle N NER Register RG B III N N EEE, Ai ZERE | en RGB II N NN NN Na, ın N N RasInfo N ei BitMap Se el Nur bei Dual-Pla DR ION tete, "rl ee Lehe te « . ° tt tet at, . ee s . rl le lee “te. ee er rt, . Abb. 5.1: Der Aufbau eines View L/ CA LASLLLHLLLHLT 7 T EEG 0 ClipRect 9 DE EEREERLLLLT? ‘ ——— m z G G Kai ipRect AZELZEE 1 EN [7 N II NSS NR IS EN N aN IR N RN N 4 f Pi fi % f NN gi N N NS N Sn N N NN NY Q) Sy Sy aNdR NN d} SS INN BER mNiN OH FAHLLLLLLLLLG N N Region L ILLLLLLLLLLL 7, Regionrectangte U | | r I f|DemageList Fi r 7 „7 ARM SEA HU ARMS A REBEL GL VIII _ VregionreetangıS fr OLELLLLLLLLLLLEELLELGTT, gionRectanglef EL | a ÄRegionRectangle VILRRRLELE, zu . Ü SSSS Q, N ANNN! a f} 7 I 4 . S ns U Nir N N N fi Ne Ni Abb. 5.2: Rastport und Layers GelsInfo-Adreßzeiger aus der RastPort-Datenstruktur Dummy am Ende Zu jedem Bob gehört ein Sprite, aber nicht der Liste unbedingt zu jedem Sprite auch ein Bob (onrsinzo)] OK verzise af Wraesiee , pP DL 2 VIIITEIZ, 7 VEZZITEZELL, Aa 02 / AK vsprite Y es Nextvsprite AN p Y) h 1 [1 zz) fr Meet N / ws Van < t ei GIEE Dummy am Anfang der Liste. [} - = Loy EL ZZZZZER et nn nn FL 1 ] Js 7 Bern HB av | FIT Y =. v Przzezech f] BobVSprite r \ SSH L a? „ Ze Y_=, / zz IHnexscom 5 ‚ en un ne ec ee ee [4 Pr Arzevcomp | [| HeadComp [| ey > (ey AV Ä f / HPrevon 1 Ipninorout ind} k Nncnasm VOITEEZEEL: PRZZZZIZL, ] NextComp = r Ss revComp Sn SIFATRISSSSNND N NN rd ® N IN en Abb. 5.3: Das Animations-System DiE DOS-LiBRARY Die DOS-Library ist für die gesamte Ein- und Ausgabe (insbesondere betreffend der Laufwerke) verantwortlich. 6.1 Spezielle Datentypen der DOS-Library BPTR Dies ist eine spezielle Art von Adreßzeigern, die nur von DOS verwendet wird. Ein BPTR, der auf ein Objekt zeigt, hat den Wert Adresse durch 4. Falls also das referenzierte Objekt bei 4000 im Speicher liegt, dann hatein BPTR auf dieses Objekt den Wert 1000. Daraus folgt, daß ein Objekt, auf das ein BPTR zeigt, immer an einer durch 4 teilbaren Adresse liegen muß. Die Adressen fast aller DOS-Datenstrukturen werden als solche BPTR-Adreßzeiger verwaltet. BSTR Diese besondere Art der Speicherung von Zeichenketten wird von Amiga-DOS verwendet. Ein BSTR ist ein BPTR auf einen Speicherbereich, in dem im ersten Byte die Länge der Zeichenkette und nachfolgend die Zeichenkette selbst steht. In Modula-2 ist BSTR als BPOINTER TO ARRAY[0..255] OF CHAR vereinbart. Die Segment-Liste Die im Speicher verstreuten Codestücke eines Programms werden mit Hilfe einer Segment-Liste verknüpft. Die Liste hat die folgende Datenstruktur: LONG SegLength; BPTR NextsSeg; CODE Wie Sie sehen, wird der eigentliche Code von der Längenangabe in SegLength und dem BPTR auf das nächste Segment (oder NULL) in NextSeg eingeleitet. 6.2 Fehlermeldungen der DOS-Library Fehlermeldungen können nach allen Zugriffen auf Dateien oder auf Teile des »Filesystems« mit Hilfe der loErr-Routine geholt werden. Dabei ist zu beachten, daß das Ergebnis eines /oErr-Aufrufes normaler- weise nur dann eine gültige Fehlermeldung ist, wenn tatsächlich ein Fehler aufgetreten ist. Folgende Fehlermeldungen können auftreten (zu den Definitionen in C und Assembler gehört jeweils noch das Präfix ERROR _): C NO_FREE_STORE TASK_TABLE_FULL LINE_TOO_LONG FILE_NOT_OBJECT INVALID_RESIDENT _LIBRARY NO_DEFAULT_DIR OBJECT_IN_USE OBJECT_EXISTS DIR_NOT_FOUND OBJECT_NOT_FOUND BAD_STREAM_NAME OBJECT_TOO_LARGE ACTION_NOT_KNOWN INVALID_COMPONENT NAME INVALID_LOCK OBJECT_WRONG_TYPE DISK_NOT_VALIDATED DISK_WRITE_PROTECTED RENAME_ACROSS_ DEVICES DIRECTORY_NOT_EMPTY TOO_MANY_LEVELS DEVICE_NOT_MOUNTED SEEK_ERROR COMMENT_TOO_BIG Modula-2 noFreeStore taskTableFull lineTooLong fileNotObject invalidResident Library noDefaultDir objectInUse objectExists dirNotFound objectNotFound badStreamName objectTooLarge actionNotKnown invalidComponent Name invalidLock objectWrongType diskNotValidated diskWriteProtected renameÄcross Devices directoryNotEmpty tooManyLevels deviceNotMounted seekError commentToBig Dez 103 105 120 121 122 201 202 203 204 205 206 207 209 210 211 213 214 215 217 218 219 220 Beschreibung Nicht genug Speicherplatz frei. Kein Platz mehr in der Task- Tasktabelle von RootNode. Die Eingabezeile ist zu lang. Das File ist kein Objektmodul. Ungültige Resident- Bibliothek beim Laden. Es ist kein Verzeichnis voreingestellt. Ein anderer Task greift bereits auf den Eintrag zu. Der Eintrag existiert bereits. Verzeichnis nicht gefunden. Eintrag nicht gefunden. Ein/Ausgabestromname ungültig. Der Eintrag ist zu groß. Der Befehl ist ungültig. Im Namen befindet sich ein ungültiges Zeichen. Die Lock-Angabe ist ungültig. Falscher Objekttyp (z.B. Directory statt File). Diskette ist ungültig. Diskette ist schreibgeschützt. Bei RENAME wurde ein falscher Gerätename angegeben. Verzeichnis ist nicht leer. ?7? Gerät ist nicht angemeldet. Fehler beim Suchzugriff auf eine Datei. Der Kommentar ist zu lang. Modula-2 Dez Beschreibung DISK_FULL diskFull Die Diskette ist voll. DELETE_PROTECTED deleteProtected Löschen der Datei verboten. WRITE_PROTECTED writeProtected Datei ist schreibgechützt. READ_PROTECTED readProtected Datei ist lesegeschützt. NOT_A_DOS_DISK notADosDisk Dies ist keine DOS-Diskette. NO_DISK noDisk Es ist keine Diskette eingelegt. NO_MORE ENTRIES noMoreEntries Es sind keine weiteren Einträge vorhanden. 6.3 Die DOS-Packets Der nachfolgenden Auflistung können Sie die Bedeutung einiger dp_Type-Werte der DosPacket- Datenstruktur und der dazugehörigen Argumente für die DOS-Handler entnehmen. Die DOS-Packets werden zusammen mit einer Nachricht (Message-Datenstruktur, siehe »Exec«) an den Port des Handler- prozesses geschickt. Da einige Packets nirgends richtig dokumentiert sind, war bei manchen Parametern auch mit gezielten »Herumhacken« nicht viel herauszufinden... C Modula-2 Dez Beschreibung ACTION_NIL nil 0 Tue gar nichts. ACTION_GET_BLOCK getBlock 2 Einen Block einlesen. ACTION_SET_MAP setMap 4 Setzt eine neue Keymap. ACTION_DIE die 5 Für verzweifelte Benutzer oder um Prozeß zu killen ?'?? ACTION_EVENT event 6 Irgendwas wird wohl passieren ??? ACTION_CURRENT_ currentVolume 1 VOLUME ACTION_LOCATE_OBJEKT locateObject 8 Implementiert die Lock-Funktion dp Argl: Ein BPTR auf die FileLock-Datenstruktur des Verzeichnisses, zu dem der Eintrag gehört. dp Arg2: Ein BSTR auf den Eintragsnamen. dp_Arg3: Der Zugriffmodus (siehe FileLock-Datenstruktur). Modula-2 Dez Beschreibung ACTION_RENAME DISK renameDisk Das aktuelle Volume umbenennen. dp Argl: Ein BSTR-Adreßzeiger auf den neuen Namen. ACTION_FREE_LOCK freeLock Implementiert die Unlock-Funktion. dp Argl: Ein BPTR-Adreßzeiger auf die FileLock-Datenstruktur. ACTION_DELETE_OBJEKT deleteObject 16 _Implementiert die Delete-Funktion. dp_Argl: Ein BPTR-Adreßzeiger auf die FileLock-Datenstruktur des Verzeichnisses, zu dem der Eintrag gehört. dp Arg2: Der Eintragname als BSTR. ACTION_RENAME_OBJEKT renameObject 17 Implementiert die Rename-Funktion. dp_Argl: Ein BPTR-Adreßzeiger auf die FileLock-Datenstruktur des Verzeichnisses, zu dem der Eintrag gehört. dp_Arg2: Der Eintragname als BSTR-Adreßzeiger. dp_Arg3: Ein BPTR auf die FileLock-Datenstruktur des Verzeichnisses, zu dem der umbenannte Eintrag gehören soll. dp_Arg4: Der neue Eintragname als BSTR. ACTION_COPY_DIR copyDir 19 Implementiert die DupLock-Funktion. dp Argl: Ein BPTR-Adreßzeiger auf die zu duplizierende FileLock-Datenstruktur. dp _Resl: Hier steht hinterher ein BPTR-Adreßzeiger auf die neuen FileLock-Datenstruktur. ACTION_WAIT_CHAR waitChar 20 Implementiert die WaitForChar-Funktion dp _Argl: Die Zeitspanne, die abgewartet werden soll. Modula-2 Beschreibung ACTION_SET_PROTECT setProtect Implementiert die SetProtection-Funktion. dp Argl: Nicht benutzt. dp Arg2: Ein BPTR-Adreßzeiger auf die FileLock-Datenstruktur des Verzeichnisses, zu dem der Eintrag gehört. dp _Arg3: Name des Eintrags als BSTR. dp_Arg3: Die »Protectionbits«. ACTION_CREATE createDir 22 Implementiert die CreateDir-Funktion. dp Argl: Ein BPTR-Adreßzeiger auf die FileLock-Datenstruktur des Verzeichnisses, zu dem der Eintrag gehört. dp _Arg2: Der Eintragname als BSTR. dp Resl: Ein BPTR auf die FileLock-Datenstruktur des neuen Verzeichnisses. ACTION_EXAMINE_OBJEKT examineOÖbject 23 _ Implementiert die Examine-Funktion. dp Argl: Ein BPTR-Adreßzeiger auf die FileLock-Datenstruktur des Eintrags. dp_Arg2: Ein BPTR-Adreßzeiger auf eine allokierte File/nfoBlock-Datenstruktur. ACTION_EXAMINE_NEXT examineNext 24 Implementiert die ExamineNext-Funktion dp Argl: Ein BPTR-Adreßzeiger auf die FileLock-Datenstruktur des Eintrags. dp _Arg2: Ein BPTR-Adreßzeiger auf eine File/nfoBlock-Datenstruktur. ACTION_DISK_INFO diskInfo 25 _ Implementiert die DOS-Info-Funktion. dp _Argl: Ein BPTR auf eine allokierte /nfoData-Datenstruktur. C ACTION_INFO ACTION_FLUSH ACTION_SET_COMMENT dp Argl: Nicht benutzt. dp_Arg2: dp_Arg3: dp_Arg3: ACTION_PARENT Modula-2 info flush setComment parent Dez 26 21 28 29 Beschreibung Implementiert den CLI-Befehl INFO. Flush-Befehl der Device ausführen. Implementiert die SetComment-Funktion. Ein BPTR auf die FileLock-Datenstruktur des Verzeichnisses, zu dem der Eintrag gehört. Der Name des Eintrags als BSTR. Zu setzender Kommentar als BSTR. Implementiert die ParentDir-Funktion. dp Argl: Ein BPTR-Adreßzeiger auf die FileLock-Datenstruktur des Eintrages. dp _Res]: Hinterher ein BPTR auf die FileLock-Datenstruktur des »Parent-Directory«. ACTION_TIMER ACTION_INHIBIT timer inhibit 2 Die in das Laufwerk des Handlers eingelegte Diskette wird (nicht) geprüft. dp Argl: 1 = Diskette wieder prüfen; 0 = Diskette nicht prüfen. ACTION_DISK_TYPE ACTION_DISK_CHANGE ACTION_SET_DATE dp_Argl: dp_Arg2: dp_Arg3: dp_Arg3: Nicht benutzt. disk Type diskChange setDate 32 33 34 Trackdisk-Device- Befehl DISKTYPE ??? CLI-Befehl DISKCHANGE ??? Das Datum eines Eintrags setzen. Ein BPTR auf die FileLock-Datenstruktur des Verzeichnisses, zu dem der Eintrag gehört. Der Name des Eintrags als BSTR-Adreßzeiger. Ein BPTR auf eine DateStamp-Datenstruktur, die das neue Datum enthält. C Modula-2 Dez Beschreibung ACTION_WRITE write 52 _ Implementiert die Write-Funktion. dp_Argl: Argl-Feld der zugehörigen FileHandle-Datenstruktur. dp_Arg2: Ein Adreßzeiger auf den Schreibpuffer. dp_Arg3: Die Anzahl der zu schreibenden Zeichen. dp Resl: Enthält hinterher die Anzahl der geschriebenen Zeichen oder bei einem Fehler -1. ACTION_READ read 57 Implementiert die Read-Funktion. dp Argl: Argl-Feld der zugehörigen FileHandle-Datenstruktur. dp_Arg2: Ein Adreßzeiger auf den Lesepuffer. dp _Arg3: Die Länge des Lesepuffers. dp Resl: Enthält hinterher die Anzahl der gelesenen Zeichen oder -1 für einen aufgetretenen Lesefehler. 6.4 Die Datenstrukturen der DOS-Library Commandlinelnterface C (libraries/dosextens.h) Modula-2 (Dos) Hex Dez struct CommandLinelnterface CommandlLinelnterface { RECORD 0000 0 LONG cli_Result2; result2:LONGINT, 0004 4 BSTR cli_SetName; setName:BSTR; 0008 8 BPTR cli_CommandDir; commandDir:PathInfoPtr; O00C 12 LONG cli_ReturnCode; returnCode:LONGINT; 0010 16 BSTR cli_CommandName; commandName:BSTR; 0014 20 LONG cli_FailLevel; failLevel:LONGINT,; 0018 24 BSTR cli_Prompt; prompt:BSTR; 001B 28 BPTR cli_StandardInput; standardInput:FileHandlePtr; 0020 32 BPTR cli_CurrentInput; currentInput:FileHandlePtr; 0024 36 BSTR cli_CommandRile; commandFile:BSTR; 0028 40 LONG cli_Interactive; interactive: LONGINT; 002B 44 LONG clı_Background; background: LONGINT; 0030 48 BPTR cli_CurrentOutput; currentOutput:FileHandlePtr; 0034 32 LONG cli_DefaultStack; defaultStack:LONGINT,; 0038 56 BPTR cli_StandardOutput; standardOutput:FileHandlePir; 002B 60 BPTR clı_Module; module:BPTR; 0030 64 }; END; Datenstrukturenreferenz Routinenreferenz Beschreibung »Dos«: Process. Keine. Wenn ein Prozeß ein CLI-Prozeß ist, dann steht die Adresse dieser Datenstruktur in dem CLIStruct-Feld der Process-Datenstruktur. Sie enhält einige für das CLI wichtige Informationen wie beispielsweise das aktuelle Verzeichnis oder den letzte Fehlercode. „I cli_Result2 0x0000 (0) I cli SetName 0x0004 (4) 4 cli CommandDir 0x0008 (8) I cli_ReturnCode 0x000C (12) Hier steht die DOS-Fehlernummer des letzten Befehls. Sie wird von der /oErr-Routine geliefert. Ein BSTR auf den Namen der aktuellen Directories. Ein BPTR auf eine Liste der FileLock-Datenstrukturen,aus denen die CLI-Befehle gelesen werden. Jedes Element der Liste besteht aus einem BPTR auf das nächste Element und einem BPTR auf die FileLock-Datenstruktur eines Direc- torys (die mit dem CLI-Befehl PATH angegeben wurde). Das vom letzten Befehl zurückgegebene Ergebnis. Je nach Schwere des Fehlers kann hier einer der folgenden Werte stehen. C Modula-2 Hex Beschreibung RETURN_OK ok 00 Es ist kein Fehler aufgetreten. RETURN_WARN warn 05 Der augenblickliche Status ist unsicher. RETURN_ERROR error 0A Ein »normaler« Fehler ist aufgetreten. RETURN_FAIL fail 14 Ein schwerwiegender Fehler ist aufgetreten. 4 cli_ CommandName 0x0010 (16) UI cli_FailLevel 0x0014 (20) 4 cli Prompt 0x0018 (24) U cli_ StandardInput 0x001B (28) I cli_CurrentInput 0x0020 (32) Ein BSTR auf den Namen des aktuellen Befehls. Hier steht der mit dem CLI-Befehl FA/LAT gesetzte Fehler- level. Er bestimmt, ab welchen cli_ReturnCode die Kom- mandofolge unterbrochen wird. Ein BSTR auf die Zeichenkette, mit der sich das CLI zur Befehlseingabe meldet (der »Prompt«). Er wird mit dem CLI-Befehl PROMPT gesetzt. Ein BPTR-Adreßzeiger auf die FileHandle-Datenstruktur des voreingestellten Eingabegeräts (In Modula-2 ein File- HandlePtr). Ein BPTR auf die Adresse der FileHandle-Datenstruktur des aktuellen Eingabegeräts. I cli CommandFile 0x0024 (36) I cli Interactive 0x0028 (40) I cli_Background 0x002B (44) I cli_CurrentOutput 0x0030 (48) 1 cli_DefaultStack 0x0034 (52) I cli_StandardOutput 0x0038 (56) 1 cli_ Module 0x002B (60) DateStamp Offset C (libraries/dos.h) struct DateStamp | LONG ds_Days; Ein BSTR auf den Namen der aktuellen EXECUTE-Datei. Ein Boolescher Ausdruck, der wahr ist, wenn das CLI inter- aktiv ist (Eingaben über das CLI-Fenster möglich sind). Ein Boolescher Ausdruck, der wahr ist, wenn das CLI mit dem Amiga-DOS-Befehl RUN gestartet wurde. Ein BPTR auf die FileHandle-Datenstruktur des vorein- gestellten Eingabegeräts (In Modula-2 ein FileHandlePtr). Die Größe des beim Starten des CLI-Prozesses vorein- gestellten Stacks in Worten. Ein BPTR auf die FileHandle-Datenstruktur des vorein- gestellten Ausgabegeräts (In Modula-2 ein FileHandlePtr). Ein BPTR auf die Segmentliste des aktuellen CLI-Befehls. Dort befindet sich im Speicher der ausführbare Code des Befehls. Modula-2 (Dos) Date RECORD days:LONGINT,; LONG ds_Minute; minute:LONGINT; LONG ds_Tick; F Datenstrukturenreferenz Routinenreferenz U... Beschreibung tick:LONGINT; END; »DOS«: DeviceList, FilelnfoBlock, RootNode. »DOS«: DateStamp. In dieser Datenstruktur wird ein Datum gespeichert. Es liegt vor als die Anzahl von Tagen, Minuten und 1/50 Sekunden, die seit dem 01.01.1978 um 00:00:00 (Uhr) vergangen sind. DateStamp ist in der FilelnfoBlock-Datenstruktur enthalten und einer Datei. 1 ds _Days0x0000 (0) 1 ds Minute 0x0004 (4) „1 ds Tick 0x0008 (8) beinhaltet das Erstellungsdatum und die Erstellungsuhrzeit Die Anzahl der Tage seit dem 1. Januar 1978. Die Tagesuhrzeit in Minuten. Die 50stel Sekunden. DeviceList Offset C (libraries/dos.h) Modula-2 (Dos) Hex Dez struct DeviceList DeviceList = { RECORD 0000 0 BPTR dlI_Next; next:DeviceListPtr; padl,pad2,pad3:BYTE; 0004 4 LONG di_Type; type:DeviceListType; 0008 8 struct MsgPort * dl_Task; task:Processld; 000C 12 BPTR dl_Lock; lock:FileLockPtr; CASE :DeviceListType OF | device,directory: handler:BSTR; stackSize:LONGINT; priority:LONGINT,; startup: LONGINT, segList:BPTR; globVec:BPTR; | volume: 0010 16 struct DateStamp dl_VolumeDate; volumeDate:Date; VO1C 28 BPTR dl_LockList; lockList:FileLockPitr; 0020 32 LONG dlI_DiskType; diskType:LONGINT, 0024 36 LONG dl_unused; unused:LONGINT END; 0028 40 BSTR * dl_Name; name:BSTR; 002C 44 B END; Assembler Syntax: Strukturname = DevList Datenstrukturenreferenz »DOS«: DeviceList, DosInfo, InfoData. Routinenreferenz Keine. > Beschreibung Diese Datenstruktur beschreibt ein Volume (z.B. Diskette oder Festplatte). Je nach Wert von dl_Type werden die Felder dl _VolumeDate bis dl_unsused verschieden interpretiert. In »C« wird dann, wenn dl Type den Wert DLT DEVICE bzw. DLT DIRECTORY hat, die Datenstruktur zu der unten beschriebenen DeviceNode-Datenstruktur. Sie beschreibt dann ein Device bzw. ein Directory. Da beide Datenstrukturen baugleich sind, ist die Modula-2-Version als varianter RECORD definiert. Alle Devices, Verzeichnisse und Volumes werden in einer über d/I_Next-verketteten Liste gespeichert. „1 di_Next 0x0000 (0) Ein BPTR auf die nächste DeviceList-Datenstruktur (bzw. DeviceNode-Datenstruktur) in der Liste. A di_Type 0x0004 (4) C DLT_DEVICE DLT_DIRECTORY DLT_VOLUME „1 di_Task 0x0008 (8) 41 di Lock 0x000C (12) „1 di_VolumeDate 0x0010 (16) „J di_LockList 0x001C (28) 4 di_DiskType 0x0020 (32) 1 di_unsused 0x0024 (36) „1 di_Name 0x0028 (40) Gibt an, ob die Datenstruktur ein Device oder ein Directory beschreibt. Mögliche Werte sind (in Modula-2 sind diese Werte als Aufzählungstyp DeviceListType definiert): Modula-2 Beschreibung device Die Datenstruktur beschreibt ein Device. In C und Assembler ist es also eine DeviceNode-Datenstruktur. directory Die Datenstruktur bechreibt ein Directory. In C und Assembler ist es also eine DeviceNode-Datenstruktur. volume Die Datenstruktur beschreibt ein Volume. Falls das Volume im Laufwerk ist, steht hier die Prozeßken- nung des Handlerprozesses (ein BPTR auf das MsgPort-Feld der Process-Datenstruktur), sonst NULL. Bei residenten Devices steht hier NULL, sonst ein BPTR- Adreßzeiger auf die FileLock-Datenstruktur des Root-Ver- zeichnisses des Filesystems. Eine eingebundene DateStamp-Datenstruktur, die das Er- stellungsdatum des Volumes beinhaltet und zur Unterschei- dung von Volumes mit gleichen Namen dient. Hier wird die Liste der aktiven »FileLocks« des Volumes gespeichert, falls das Volume entfernt wird (Diskette aus dem Laufwerk genommen wird). Dieser Parameter gibt an, um welchen Diskettentyp es sich handelt. Da es sich immer um eine Amiga-DOS-Diskette handeln muß, steht hier auch immer »DOS\n«. Ein nur quasi unbenutzter Parameter, denn dieses Feld wird benötigt, wenn dies eine DeviceNode-Datenstruktur ist. Ein BSTR auf den Namen des Volumes. DeviceNode oe C (libraries/dos.h) Modula-2 (Dos) Hex Dez struct DeviceNode DeviceList { RECORD 0000 0 BPTR dn_Next; next:DeviceL6istPtr; padl,pad2,pad3:BYTE,; 0004 4 LONG dn_Type; type:DeviceListType; 0008 8 struct MsgPort * dl_Task; task:Processld; 000C 12 BPTR dn_Lock; lock:FileLockPtr; CASE :DeviceListType OF | device,directory: 0010 16 BSTR *dn_Handler; handler:BSTR; 0014 20 LONG dn_StackSize; stackSize: LONGINT, 0018 24 LONG dn_Priority; priority:LONGINT,; 001C 28 BPTR dn_Startup; startup:FileSysStartupMsgPrir; 0020 32 BPTR dn_SegList ; segList:BPTR; 0024 36 BPTR dn_ GlobVec globVec:BPTR; | volume: volumeDate:Date; lockList:FileLockPtr; disk Type:LONGINT,; unused:LONGINT END; 0028 40 BSTR * dn_Name name:BSTR; 002C 44 }; END; Datenstrukturenreferenz »Dos«: DeviceList, DosInfo, InfoData. Routinenreferenz Keine. ___> Beschreibung Diese Datenstruktur beschreibt ein Device, ein Volume oder ein Directory. Je nach Wert von dl_Type werden die Felder dl_ VolumeDate bis dl_unsused verschieden interpretiert. In C und Assembler wird dann, wenn dl Type den Wert DLT_ VOLUME hat, die Datenstruktur zu der oben beschriebenen DeviceNode-Datenstruktur. Da beide Datenstrukturen baugleich sind, ist die Modula-2-Version als varianter RECORD definiert. Alle Devices, Verzeichnisse und Volumes werden in einer über dl_Next- verketteten Liste gespeichert. „1 dn_Next 0x0000 (0) Ein BPTR auf die nächste DeviceNode-Datenstruktur (bzw. DeviceList) in der Liste. DLT_DEVICE DLT_DIRECTORY DLT_VOLUME dn_Type 0x0004 (4) dn_Task 0x0008 (8) dn Lock 0x000C (12) dn_Handler 0x0010 (16) dn_StackSize 0x0014 (20) dn_Priority 0x0018 (24) dn_ Startup 0x001C (28) dn_SegList 0x0020 (32) dn_GlobVec 0x0024 (36) dn_Name 0x0028 (40) Modula-2 Dez Beschreibung device 0 Die Datenstruktur beschreibt ein Device. directory 1 Die Datenstruktur beschreibt ein Directory. volume 2 Die Datenstruktur beschreibt ein Volume. In C und Assembler ist es also eine DeviceNode-Datenstruktur. Die Bits dieser 2-Byte-Marke geben an, ob die Datenstruktur ein Device oder ein Directory beschreibt (in Modula-2 sind diese Werte als Aufzählungstyp DeviceListType definiert): Bei einem residenten Device steht hier die Prozeßkennung des Handlerprozesses (BPTR auf das MsgPort-Feld der Process-Datenstruktur), ansonsten NULL. Bei residenten Devices steht hier NULL, sonst ein BPTR auf die FileLock-Datenstruktur des Root-Verzeichnisses des Filesystems. Falls der »Handler« nicht im Speicher ist, muß in diesem Feld ein BSTR-Adreßzeiger stehen. Dieser zeigt auf den Namen (incl. Pfadangabe) des »Handlers« auf der Diskette. Dieser kann dann mittels der LoadSeg-Routine geladen werden. Ist der »Handler« geladen, so steht hier die Größe des zugehörigen Stacks. Die Priorität des »Handlers«. Ein Adreßzeiger auf eine »FileSystemStartupMessage«, die dem Handlerprozeß beim Start übergeben wird. Ein BPTR-Adreßzeiger auf die Segmentliste des »Hand- lers«. Er ist NULL, falls der »Handler« nicht im Speicher ist. Ein BPTR auf eine private Sprungtabelle des Handlerpro- zesses. Ein BSTR auf den Namen des Device bzw. des Verzeichnis- ses. 6 DosEnvec KT C (libraries/filehandler.h) Modula-2 (Dos) Hex Dez struct InfoData DosEnvec = { RECORD 0000 0 ULONG de_TableSize; tableSize:LONGCARD; 0004 4 ULONG de_SizeBlock; sizeBlock:LONGCARD; 0008 8 ULONG de_SecOrg; secOrg:LONGCARD; 000C 12 ULONG de_Surfaces; surfaces: LONGCARD; 0010 16 ULONG de_SectorPerBlock; sectorPerBlock:LONGCARD; 0014 20 ULONG de_BlocksPerTrack; blocksPerTrack:LONGCARD; 0018 24 ULONG de_Reserved; reserved:LONGCARD; 001C 28 ULONG de_PreAlloc; preAlloc:LONGCARD; 0020 32 ULONG de_Interleave; interleave: LONGCARD; 0024 36 ULONG de_LowCyl; lowCyl:LONGCARD; 0028 40 ULONG de_HighCyl; higshCyl:LONGCARD; 002C 44 ULONG de_NumBuffers; numBuffers: LONGCARD:; 0030 48 ULONG de_BuffMemType: buffMemType:LONGCARD; 0034 52 ULONG de_MaxTransfer; maxTransfers: LONGCARD; 0038 56 ULONG de_Mask; mask:LONGSET; LONGCARD; 003C 60 LONG de_BootPri; bootPri:LONGINT; LONGCARD; 0040 64 ULONG de_DosType; dosType: ARRAY [0..3] OF CHAR; 0044 68 } END; Datenstrukturenreferenz »Dos«: FileSystemStartupMsg. Routinenreferenz Keine. > Beschreibung Diese Datenstruktur gibt dem Devicehandler Auskunft über ein beliebiges Device. Ihre Adresse muß in dem fssm_Environ-Feld der FileSystemStartupMsg-Datenstruktur eingetragen werden. Wie Sie sehen, entsprechen die Felder dieser Datenstruktur den Einträgen der Mountlist. Der CLI-Befehl MOUNT erzeugt auch aus dem Mountlisteintrag eine solche Datenstruktur. Da die Mountlist je nach Device verschiedene Formen annehmen kann, ist die DosEnvec-Datenstruktur eigentlich ein Array von ULONG- Werten, die erst vom Handler ausgewertet werden. Die hier abgedruckte Version wird für alle Devices benötigt, die das Trackdisk-Device emulieren und als Handler das Filesystem (bzw. FastFileSystem) benutzen (wie beispielsweise ein Harddisktreiber). I de _TableSize 0x0000 (0) 1 de_SizeBlock 0x0004 (4) Hier steht die Größe der gesamten Datenstruktur. Dieses Feld ist immer dann wichtig, wenn diese Datenstruktur als Array behandelt wird, weil sie dann von der hier beschriebe- nen Form abweicht. Die Größe eines Datenblocks in Langwörtern (normaler- weise 128). de_SecOrg 0x0008 (8) de. Surfaces 0x000C (12) de_SectorPerBlock 0x0010 (16) de_BlocksPerTrack 0x0014 (20) de Reserved 0x0018 (24) de _PreAlloc 0x001C (28) desikiäsiese 0x0020 (32) de_LowCyl 0x0024 (36) de _HighCyl 0x0028 (40) de_NumBuffers 0x002C (44) de_BuffMemType 0x0030 (48) de_MaxTransfer 0x0034 (52) de_Mask 0x0038 (56) de _BootPri 0x003C (60) de_DosType 0x0040 (64) In der aktuellen Version unbenutzt. Sollte trotzdem immer auf O gesetzt werden. Die Anzahl der Schreib-Lese-Köpfe des Gerätes (beim Dis- kettenlaufwerk 2). In der aktuellen Version unbenutzt. Sollte immer auf 0 gesetzt werden. Die Anzahl der Blöcke pro Track. Beim normalen Disketten- laufwerk sind es 11, bei Festplatten 17 (MFM) oder 26 (RLL). Die Anzahl der für DOS reservierten Blöcke am Anfang der Partition (normalerweise 2). Die Anzahl der für DOS reservierten Blöcke am Ende der Partition. Der Sektorversatz (Interleave). Für Diskettenlaufwerke 0, für Festplatten zwischen O und 26. Die Nummer des ersten Tracks der Partition (bei Disketten- laufwerken, immer 0). Die Nummer des letzten Tracks der Partition (bei Disketten- laufwerken 39 oder 79). Die Anzahl von 512-Byte langen Puffern, die für das Device angelegt werden sollen. Mehr Puffer bedeuten normalerwei- se einen schnelleren Zugriff. Spezielle Anforderungen an den Pufferspeicher. Wie in der Mountlist gilt hier 3 = Chip-RAM, 1 = Fast-RAM Die maximale Anzahl der Bytes, die auf einmal übergeben werden können (normalerweise 13). Laut [KRA] eine Maske, um bestimmte Speicherbereiche auszublenden (Klingt gut, oder?). Die Priorität für »bootende« Devices (15 für Autoboot). Eine Zeichenkette, die die Version des Filesystems angibt. Dabei bedeuten als Langwort codiert 0x444F5300 das alte Filesystem, 0x444f5301 das neue Fast-Filesystem. DosiInfo Offset C (libraries/dosextens.h) Modula-2 (Dos) Hex Dez struct DosInfo DosInfo = { RECORD 0000 0 BPTR di_McName; mcName:BSTR; 0004 4 BPTR di_DevInfo; devInfo:DeviceListPtr; 0008 8 BPTR di_Devices; devices:BPTR; 000C 12 BPTR di_Handlers; handlers:BPTR; 0010 16 APTR di_NetHand; netHand:ResidentSegmentPtr; 0014 20 }; END; Datenstrukturenreferenz »Dos«: RootNode. Routinenreferenz Keine. L____> Beschreibung Diese Datenstruktur ist für Erweiterungen vorgesehen, die den Amiga netzwerkfähig machen. „1 di_McName 0x0000 (0) Ein BPTR-Adreßzeiger aufden Namen dieses Computers im Netzwerk. 1 di_DevInfo 0x0004 (4) Ein BPTR-Adreßzeiger auf die Liste der Devices. I di_Devices 0x0008 (8) Dieser BPTR-Adreßzeiger ist immer NULL. 4 di _Handlers 0x000C (12) Dieser BPTR-Adreßzeiger ist immer NULL. „1 di _NetHand 0x0010 (16) Dieser Adreßzeiger ist vorgesehen für die Prozeßkennung des Netzwerkhandlers. DosLibrary C (libraries/dosextens.h) Modula-2 (Dos) Hex Dez . struct DosLibrary DosLibrary = { RECORD 0000 0 struct Library di_lib; lib:Library; 0022 34 APTR dlI_Root; root:RootNodePtr; 0026 38 APTR dI_GV; gv:ADDRESS; 002A 42 LONG di_A2; a2:LONGINT, 002E 46 LONG dI_AS; a5:LONGINT; 0032 50 LONG dl_A6; a6:LONGINT,; 0036 54 F; END; Datenstrukturenreferenz Routinenreferenz > Beschreibung Keine. Keine. Dies ist eine globale Datenstruktur, deren Adresse von der Routine OpenLibrary zurückgegeben wird, wenn Sie die Dos-Library öffnen. J di_Library 0x0000 (0) I di_Root 0x0022 (34) I di_GV 0x0026 (38) 4 di_A2 0x002A (42) I di_A5 0x002E (46) 4 di_A6 0x0032 (50) DosPacket om C (libraries/dosextens.h) Modula-2 (Dos) 0000 0004 0008 D0O0OC 0010 0014 0018 0OIC 0020 0024 0028 002C 0030 LONG dp_Type; LONG dp_Resl; LONG dp_Res2; LONG dp_Argl; LONG dp_Arg2; LONG dp_Arg3; LONG dp_Arg4; LONG dp_Arg5; LONG dp_Ars6; LONG dp_Arg7; F Eine eingebundene Library-Datenstruktur wie im Kapitel über »Exec« behandelt. Sie beschreibt die Dos-Library und bindet sie in das System ein. Ein Adreßzeiger auf die RootNode-Datenstruktur, die wei- tere wichtige globale Informationen enthält. Ein Adreßzeiger auf eine globale Sprungtabelle von Amiga- DOS. Ein systeminternes Register zur Zwischenspeicherung des gleichnamigen Prozessorregisters. Ein systeminternes Register zur Zwischenspeicherung des gleichnamigen Prozessorregisters. Ein systeminternes Register zur Zwischenspeicherung des gleichnamigen Prozessorregisters. struct DosPacket DosPacket = { RECORD struct Message *dp_Link; link:MessagePtr; struct MsgPort *dp_Port; port:MsgPortPtr; type: LONGINT,; res1:LONGINT; res2:LONGINT,; argl:LONGINT,; arg2:LONGINT,; arg3:LONGINT; arg4:LONGINT, argS:LONGINT,; arg6:LONGINT,; arg7:LONGINT,; END; Datenstrukturenreferenz Routinenreferenz N Beschreibung »Dos«: StandardPacket. Keine. Diese Datenstruktur dient zur Kommunikation zwischen verschiedenen Prozessen. Die Adresse einer solchen Datenstruktur wird im Name-Feld einer Message-Datenstruktur gespeichert. Solche »Packets« werden von DOS zur Übermittlung von Befehlen an Device-Handler (z.B. Laufwerkshandler) verwen- det. Die Datenstruktur muß an einer durch 4 teilbaren Adresse liegen. 4 u dp Link 0x0000 (0) dp_Port 0x0004 (4) dp_Type 0x0008 (8) dp_Resl 0x000C (12) dp_Res2 0x0010 (16) dp_Argl 0x0014 (20) dp_Arg2 0x0018 (24) dp_Arg3 0x001C (28) dp_Arg4 0x0020 (32) dp_Arg5 0x0024 (36) Ein Adreßzeiger zurück auf die Message-Datenstruktur, die benutzt wird, um dieses »Packet« zu senden. Ein Adreßzeiger auf eine MsgPort-Datenstruktur, zu der die Antwort von dem Empfänger geschickt werden soll. Dies soll normalerweise nicht die MsgPort-Datenstruktur sein, die als ID des Prozesses dient (also in der Process-Daten- struktur enthalten ist). In diesem Feld steht der Typ dieses »Packets«. Bei Nachrich- ten, die an den DOS-Handler geschickt werden, also der Befehl, der ausgeführt werden soll. Der Inhalt dieses Feldes bestimmt die Bedeutung der nachfolgenden. Die verfügba- ren Befehle und die zugehörige Bedeutung der restlichen Felder können Sie der Auflistung im Abschnitt (»Die DOS- Packets«) entnehmen. In diesem Feld gibt der Empfänger der Nachricht bei der Antwort Daten zurück. Bei dem »File-System« Aufruf Write wird beispielsweise die Länge der geschriebenen Daten zurückgegeben. In diesem Feld gibt der Empfänger der Nachricht bei der Antwort Daten zurück. Bei »File-System« Aufrufen bei- spielsweise die Antwort der /oErr-Routine. Das erste Argument, das dem Empfänger als Information übergeben wird (werden kann). Das zweite Argument, das dem Empfänger als Information übergeben wird (werden kann). Das dritte Argument, das dem Empfänger als Information übergeben wird (werden kann). Das vierte Argument, das dem Empfänger als Information übergeben wird (werden kann). Das fünfte Argument, das dem Empfänger als Information übergeben wird (werden kann). I dp_Arg6 0x0028 (40) Das sechste Argument, das dem Empfänger als Information übergeben wird (werden kann). 1 dp_Arg7 0x002C (44) Das siebte Argument, das dem Empfänger als Information übergeben wird (werden kann). FileHandle Her Der struct FileHandle FileHandle = RECORD struct Message *fh_Link; link:MessagePtr; struct MsgPort *fh_Port; port:MsgPortPtr; struct MsgPort *fh_Type; type:Processld; LONG fh_Buf; buf:LONGINT,; LONG fh_Pos; pos:LONGINT,; LONG fh_End; end:LONGINT,; LONG fh_Funcs; func1:LONGINT,; LONG fh_Func?; func2:LONGINT,; LONG fh_Func3; func3:LONGINT,; LONG fh_Arss; argl:LONGINT, LONG fh_Arg?; arg2:LONGINT, h END; Datenstrukturenreferenz »Dos«: CommandlLinelnterface, Process. Routinenreferenz »Dos«: Close, Execute, Input, IsInteractive, Open, Output, Read, Seek, WaitForChar, Write. ___> Beschreibung Die Datenstruktur identifiziert eine Datei. Wenn Sie eine Datei mit Hilfe der Open-Routine öffnen, bekommen Sie einen Adreßzeiger auf die zugehörige FileHandle-Datenstruktur zurück. Sie brauchen diesen, um diese Datei bearbeiten zu können. 4 fh_Link 0x0000 (0) Nicht benutzt. „1 fh_Port 0x0004 (4) Dieser Wert ist null, falls die Datei interaktiv ist. „1 fh_Type 0x0008 (8) Prozeßkennung des Handlerprozesses (ein Adreßzeiger auf das MsgPort-Feld der entsprechenden Process-Datenstruk- tur). Dort werden die DOS-Packets abgeschickt. 4 fh_Buf 0x000C (12) Ein Adreßzeiger auf einen internen Puffer, der bei der Arbeit mit der Datei verwendet wird. „1 fh_Pos 0x0010 (16) Die aktuelle Zeichenposition innerhalb des Puffers. I fh_End 0x0014 (20) Die Endposition innerhalb des Puffers. „1 fh_Funcs 0x0018 (24) Die Adresse der Funktion, die zum Auslesen des Puffers benutzt wird. 4 fh_Func2 0x001c (28) Die Adresse der Funktion, die zum Beschreiben des Puffers verwendet wird. „1 fh_Func3 0x0020 (32) Die Adresse der Funktion, die zum Schließen der Datei verwendet wird. „1 fh_Args 0x0024 (36) Ein Argument zur internen Verwendung. Seine genaue Funktion hängt von der Art des »FileHandlers« ab. „1 fh_Arg2 0x0028 (40) Ein Argument zur internen Verwendung. Seine genaue Funktion hängt von der Art des »FileHandlers« ab. FilelnfoBlock Offset C (libraries/dos.h) Modula-2 (Dos) er Dez struct FileInfoBlock FileInfoBlock = { RECORD 0000 0 LONG fib_DiskKey; diskKey:LONGINT,; 0004 4 LONG fib_DirEntryType; dirEntryType:LONGINT; 0008 8 char fib_FileName[ 108]; fileName:ARRAY[0..107] OF CHAR; 0074 116 LONG fib_Protection; protection:ProtectionFlagSet; 0078 120 LONG fib_EntryType; entryType:LONGINT,; 007C 124 LONG fib_Size; size: LONGINT,; 0080 128 LONG fib_NumBlocks; numBlocks:LONGINT; 0084 132 struct DateStamp fib_Date; date:Date; 0090 144 char fib_Comment[80]; comment:ARRAY [0..79] OF CHAR; O0OEO 224 char fib_Reserved[36]; reserved: ARRAY [0..35] OF CHAR; 0104 260 }; END; Datenstrukturenreferenz Keine. Routinenreferenz »DOS«: Examine, ExNext, Info. ——? Beschreibung In dieser Datenstruktur speichert »Dos« die wichtigsten Informationen über eine Datei. Falls Sie eine Datei untersuchen wollen, können Sie sich die zugehörige FilelnfoBlock-Datenstruktur mit Hilfe des Examine- bzw. ExNext-Befehls besorgen. Dieser Datensatz enthält im wesentlichen die gleichen Daten wie der FileHeader-Block eines Files auf Diskette. Wird eine FilelnfoBlock-Datenstruktur an DOS- Routinen übergeben, dann muß diese an einer durch 4 teilbaren Adresse liegen. Dazu allokieren Sie sie am besten mit der AllocMem-Routine aus »Exec«. I fib_DiskKey 0x0000 (0) Die Nummer des ersten Blocks des Eintrags auf Diskette. I fib_DirEntryType 0x0004 (4) Ist dieses Feld größer als null, dann handelt es sich bei dem Eintrag um ein Verzeichnis, sonst um eine Datei. „4 fib_FileName 0x0008 (8) Eine eingebundene Zeichenkette, die den Namen des Ein- trags beinhaltet. I fib_Protection 0x0074 (116) Die »Protection-Bits« des Eintrags. J fib_EntryType 0x0078 (120) Eine Systeminterne Kennung. „I fib_Size 0x007C (124) Die Länge des Eintrags in Bytes. I fib_NumBlocks 0x0080 (128) Die Anzahl der Blocks, die der Eintrag belegt. „1 fib_Date 0x0084 (132) Eine DateStamp-Datenstruktur, die das Erstellungsdatum des Eintrags beinhaltet. I fib_Comment 0x0090 (144) Der zu dem Eintrag gehörende Kommentar als Zeichenkette. „4 fib_Padding 0x00E0 (224) Ein Zwischenspeicher für diverse Systemzwecke. FileLock Offset C (libraries/dosextens.h) Modula-2 (Dos) struct FileLock FileLock = [ RECORD BPTR fl_Link; link:FileLockPtr; LONG fl_Key; key:LONGINT; LONG fl_Access; access: LONGINT,; struct MsgPort * fl_Task; task:Processld; BPTR fl_Volume; volume:DeviceListPtr; h END; Datenstrukturenreferenz »DOS«: DeviceList. Routinenreferenz »DOS«: CreateDir, CurrentDir, DupLock, Examine, ExNext, Info, Lock, ParentDir, Unlock. > Beschreibung Diese Datenstruktur dient zur Identifizierung eines Eintrags innerhalb des »Filesystems«. Sie wird benötigt, um die Zugriffe auf ein File zu koordinieren. Anders als die FileHandle-Datenstruktur dient diese Datenstruktur zur Koordination der Zugriffe verschiedener Tasks auf eine Datei und nicht deren Verwaltung. Daher kann eine FileLock-Datenstruktur auch für ein Verzeichnis geholt werden. Ein Adreßzeiger auf eine FileLock-Datenstruktur muß an fast alle DOS-Routinen übergeben werden, die auf Einträge im »Filesystem« zugreifen. Es können gleichzeitig mehrere »Locks« auf die gleiche Datei von verschiedenen Prozessen angefordert werden. Dabei muß es sich allerdings um »FileLocks« des Typs SHARED LOCK (ACCESS _READ) handeln. „1 fl_Link 0x0000 (0) Mit Hilfe dieses Feldes verkettet Amiga-DOS die »Locks«. „1 fl_Key 0x0004 (4) Hier steht die Nummer des ersten Blocks (FileHeader) oder des Verzeichnisses auf Diskette. UI fl_Access 0x0008 (8) Gibt die Art des Zugriffs an, der über dieses »Lock« zugelas- sen ist. Modula-2 Dez Beschreibung SHARED_LOCK sharedLock Nur Lesezugriff ist möglich. ACCESS_READ accessRead Nur Lesezugriff ist möglich. EXCLUSIVE_LOCK exclusiveLock Nur Schreibzugriff ist möglich. ACCESS_WRITE accessWrite Nur Schreibzugriff ist möglich. U fl_ Task 0x000C (12) Ein Adreßzeiger auf die MsgPort-Datenstruktur des Hand- lerprozesses des Device, zu dem dieses File gehört. „4 fi_Volume 0x0010 (16) Ein BPTR-Adreßzeiger auf eine DeviceList-Datenstruktur, die nähere Informationen über das Device enthält, zu dem das File gehört. FileSystemStartupMsg oe C (libraries/filehandler.h) Modula-2 (DOS) Hex Dez struct InfoData FileSysStartupMsg = { RECORD 0000 0 ULONG fssm_Unit; unit: LONGCARD; 0004 4 BSTR fssm_Device; device:BSTR; 0008 8 BPTR fssm_Environ; environ: DosEnvecPitr; DOOC 12 ULONG fssm_Flags flags:LONGSET,; 0010 16 L: END; Datenstrukturenreferenz »Dos«: DeviceNode. Routinenreferenz Keine. > Beschreibung Bei Devices, die neu geöffnet werden, steht indem dn_ Startup-Feld, der DeviceNode-Datenstruktur, ein BPTR auf eine FileSystemStartupMsg-Datenstruktur. Sie sagt dem System, was bei der Initialisierung des Devices (mit der OpenDevice-Routine) zu tun ist und wie das Device physikalisch aufgebaut ist. „4 fssm_Unit 0x0000 (0) Hier steht die Exec-Unitnummer (z.B. die Laufwerksnum- mer). „1 fssm_Device 0x0004 (4) 1 fssm_Environ 0x0008 (8) Den fssm_Flags 0x000C (12) Ein BSTR-Adreßzeiger auf eine nullterminierte Zeichenket- te, die den Namen des Devices enthält. Sie wird mit dem bei OpenDevice angegebenen Namen verglichen. Ein Adreßzeiger auf eine DosEnvec-Datenstruktur oder ein beliebiges ULONG-Array, in dem weitere Informationen zum Device enthalten sind. Einige Flags, die für die Routine OpenDevice benötigt werden. InfoData Offset C (libraries/dos.h) Modula-2 (Dos) Hex Dez struct InfoData InfoData = { RECORD 0000 0 LONG id_NumsSoftErrors; numsSoftErrors:LONGINT,; 0004 4 LONG id_UnitNumber; unitNumber:LONGINT; 0008 8 LONG id_DiskState; diskState: LONGINT,; 000C 12 LONG id_NumßBlocks; numBlocks:LONGINT; 0010 16 LONG id_NumBlocksUsed; numBlocksUsed:LONGINT,; 0014 20 LONG id_BytesPerBlock; bytesPerBlock:LONGINT,; 0018 24 LONG id_DiskType; diskType:LONGINT,; 001C 28 BPTR id_VolumeNode; volumeNode:DeviceListPtr; 0020 32 LONG id_InUse; inUse:LONGINT,; 0024 36 }; END; Datenstrukturenreferenz Keine. Routinenreferenz »DOS«: Info. \_.... Beschreibung In dieser Datenstruktur werden diverse Informationen über ein Volume (also z.B. eine Diskette oder eine »RAM DISK«) gespeichert. Mit Hilfe der /nfo-Routine können Sie eine solche Datenstruktur mit den Daten eines Volumes initialisieren lassen. Zu beachten ist, daß die /nfoData-Datenstruktur an einer durch vier teilbaren Adresse liegen muß. 4 id_NumsoftErrors 0x0000 (0) Falls es sich bei dem Volume um eine Diskette/Festplatte handelt, finden Sie hier die Anzahl der fehlerhaften Blocks/ Tracks. 4 id_UnitNumber 0x0004 (4) Die Nummer des Laufwerks (-1 für die »RAM DISK«). I id_DiskState 0x0008 (8) Momentaner Zustand der Diskette. Hier können folgende Werte stehen: C Modula-2 Dez ID_WRITE_PROTECTED ID_VALIDATING ID_VALIDATED writeProtected 80 validating 81 validated 82 I id_NumBlocks 0x000C (12) I id_NumbBlocksUsed 0x0010 (16) J id_BytesPerBlock 0x0014 (20) I id_DiskType 0x0018 (24) Beschreibung Die Diskette ist schreibgeschützt. Die Diskette wird überprüft. Die Diskette ist OK. Die Anzahl der Blocks, die das Volume hat. Anzahl der bereits belegten Blocks des Volumes. Die Größe eines einzelnen Blocks in Bytes. Hier steht Näheres über eine eingelegte Diskette. Folgende Werte sind möglich (in Modula-2 werden die Zeichenketten mit Hilfe von CAST in LONGINT-Werte umgewandelt). C Modula-2 Wert Beschreibung ID_NO_DISK_PRESENT noDiskPresent 71IL Es ist keine Diskette im Laufwerk. ID_UNREADABLE_DISK unreadableDisk ‘BADW’ Die Diskette ist nicht lesbar. ID_DOS_DISK dosDisk ‘DOSW’ Die Diskette ist OK (Amiga-DOS). ID_NOT_REALLY_DOS notReallyDos ‘NDOS’ Es ist keine Amiga-DOS- Diskette. ID_KICKSTART_DISK kickstartDisk KICK’ Es ist eine Kickstart-Diskette. „4 id_VolumeNode 0x001C (28) I id_InUse 0x0020 (32) Ein BPTR auf die zugehörige DeviceList-Datenstruktur. Falls auf die Datei gerade zugegriffen wird, steht hier ein Wert ungleich null. Process Offset C (libraries/dosextens.h) Modula-2 (Dos) MM Hex Dez struct Process Process = H T ! RECORD 0000 0 struct Task pr_Task; task:Task; 005C 92 struct MsgPort pr_MsgPort; msgPort:MsgPort; 007E 126 WORD pr_Pad; pad:WORD;, 0080 128 BPTR pr_SeglLbist; segList:BPTR; 0084 132 LONG pr_StackSize; stackSize:LONGINT, 0088 136 APTR pr_GlobVec; globVec:ADDRESS; 008C 140 LONG pr_TaskNum; taskNum:LONGINT, Offset C (libraries/dosextens.h) Hex Dez 0090 144 BPTR pr_StackBase; 0094 148 LONG pr_Result2; 0098 152 BPTR pr_CurrentDir; 009C 156 BPTR pr_CIS; 00AO 160 BPTR pr_COS; 00A4 164 APTR pr_ConsoleTask; 00A8 168 APTR pr_FileSystemTask; 00AC | 172 BPTR pr_CLI,; 00B0 176 APTR pr_ReturnAddr; 00B4 180 APTR pr_PktWait; 00B8 184 APTR pr_WindowPtr; 00BC | 188 }; Datenstrukturenreferenz Keine. Routinenreferenz »Dos«: »Exec«: > Beschreibung Diese Datenstruktur identifiziert einen Prozeß. Sie wird bei der Erzeugung des Prozesses mit der CreateProcess-Routine initialisiert und enthält Informationen über die Art des Prozesses, die zugehöri- gen Handler, die zugehörigen Tasks etc. Sie ist eigentlich nur eine erweiterte Task-Datenstruktur. Der Unterschied zwischen einem einfachen und einem in einen Prozeß eingebundenen Task besteht darin, daß der zweite uneingeschränkt auf »Dos«-Routinen, Datenstrukturen und Handler zugreifen kann. Jedem Programm, das vom CLI oder von der Workbench gestartet wird, wird eine solche Datenstruktur zugeordnet. Sie können die Anfangsadresse einer solchen Datenstruktur mit der FindTask-Routine aus »Exec« ermitteln (für den eigenen Prozeß dabei NULL als Namen angeben). Alle Routinen und Datenstrukturen benutzen allerdings zur Identifikation eines Prozesses nicht die Anfangsadresse, sondern einen BPTR auf das MsgPort-Feld. I pr_Task 0x0000 (0) 4 pr_MsgPort 0x005C (92) J pr_Pad 0x007E (126) Modula-2 (Dos) stackBase:BPTR; result2:LONGINT,; currentDir:FileLockPtr; cis:FileHandlePtr; cos:FileHandlePtr; consoleTask:Processld; fileSystemTask:Processld; cli:CommandLinelnterfacePtr; retumAddr: ADDRESS; pktWait:ADDRESS; windowPtr: ADDRESS; END; CreateProcess. FindTask. Eine vollständig eingebundene Task-Datenstruktur wie im Kapitel über die Exec-Library beschrieben. Sie sorgt dafür, daß »Dos« Prozesse in das Multitasking des Amiga ein- gebunden werden. Ihre Adresse wird von der FindTask- Routine geliefert. Eine eingebundene MsgPort-Datenstruktur wie im Kapitel über die Exec-Library beschrieben. Dieser Port dient als Kennung des Prozesses. An ihn werden auch alle an diesen Prozeß gerichteten Nachrichten geschickt. Ein Füllbyte ohne weitere Bedeutung. I pr_SegList 0x0080 (128) J pr_StackSize 0x0084 (132) I pr_GlobVec 0x0088 (136) J pr_TaskNum 0x008C (140) I pr_StackBase 0x0090 (144) I pr_Result2 0x0094 (148) J pr_CurrentDir 0x0098 (152) 4 pr_CIS 0x009C (156) I pr_COS 0x00A0 (160) I pr_ConsoleTask 0x00A4 (164) I pr_FileSystemTask 0x00A8 (168) I pr_CLI 0x00AC (172) I pr_ReturnAddr 0x00B0 (176) J pr_PktWait 0x00B4 (180) 4 pr_WindowPtr 0x00B8 (184) Ein BPTR auf die Segmentliste des Programms. Er zeigt auf ein Feld von Adreßzeigern, von denen der vierte auf das erste Segment zeigt. Die Segmente sind über BPTR-Adreßzeiger verkettet. Dabei gibt das erste Element die Größe des Feldes an. Die Größe des Stack-Prozesses in Bytes, die ihm beim Auf- ruf von der Routine CreateProcess zugewiesen wird. Die Größe des Prozeßstacks ist nicht mit der der CLI-Befehle identisch. Ein Adreßzeiger auf die globale Sprungtabelle von Amiga- DOS. Ist dies ein CLI-Prozeß, so steht hier die Nummer dieses Pro- zesses in TaskTable der RootNode-Datenstruktur, sonst null. Ein BPTR auf das Ende des Prozeßstacks. Hier steht die Nummer der Fehlermeldung, die von der Routine /oErr geliefert wird. Ein BPTR auf die FileLock-Stuktur des aktuellen Verzeich- nisses. Dieser wird von der Routine CurrentDir geliefert. Ein BPTR auf die FileHandle-Datenstruktur des CLI-Ein- gabestromes. Ein BPTR auf die FileHandle-Datenstruktur des CLI-Aus- gabestromes. Ein BPTR auf das MsgPort-Feld der Process-Datenstruktur des zugehörigen Console-Handlers des aktuellen Fensters. Ein BPTR auf das MsgPort-Feld der Process-Datenstruktur des zugehörigen Handlers des aktuellen Laufwerks. Falls dies kein CLI-Prozeß ist, so steht hier NULL, sonst ein BPTR auf eine CommandLinelnterface-Datenstruktur. Ein Adreßzeiger auf die auf dem Stack abgelegte Rück- sprungadresse, die beim Verlassen des Programms mit der EXIT-Funktion angesprungen wird. Ein Adreßzeiger auf eine Funktion, die aufgerufen wird, wenn der Prozeß anhält, um auf eine Nachricht zu warten. Normalerweise steht hier jedoch NULL. Ein Adreßzeiger auf das Fenster, in dem die »Dos«-Reque- ster mit Fehlermeldungen bzw. Anforderungen an den Be- nutzer erscheinen. Steht hierNULZ, dann wird der Requester im Fenster der Workbench erzeugt. Wenn Sie wollen, daß die Fehlermeldung mittels Write ausgegeben wird, geben Sie hier -1 an. RootNode Offset C (libraries/dosextens.h) Modula-2 (Dos) struct RootNode RootNode = { RECORD 0000 0 BPTR rn_TaskArray; taskArray:TaskArrayPir; 0004 4 BPTR rn_ConsoleSegment; consoleSegment:BPTR; 0008 8 struct DateStamp rn_Time; time:Date; 0032 20 LONG rn_RestartSeg; restartSeg:BPTR; 0036 24 BPTR rn_Info; info:DosInfoPtr; 003A 28 BPTR rn_FileHandlerSegment; filleHandlerSegment:BPTR; ; END; Datenstrukturenreferenz »Dos«: DosLibrary. Routinenreferenz Keine. ___> Beschreibung Eine globale Datenstruktur für »Dos«, die wichtige Daten über den momentanen Zustand des Systems speichert. 1 rn_TaskArray 0x0000 (0) Ein BPTR auf eine Tabelle, in der die BPTR auf die MsgPort-Datenstrukturen aller aktiven CLI-Prozesse ge- speichert sind. Das nullte Feld beinhaltet die Länge der Tabelle. J rn_ConsoleSegment 0x0004 (4) Ein BPTR auf die Segmentliste des CLI-Codes, der von | NEWCLI zur Erzeugung eines neuen CLIs benutzt wird. J rn_Time 0x0008 (8) Die aktuelle Zeit in Form einer eingebundenen DateStamp- Datenstruktur. I rn_RestartSeg 0x0032 (20) Ein BPTR auf die Segmentliste des Codes, der immer dann aufgerufen wird, wenn eine neue Diskette ins Laufwerk eingelegt wird. I rn_Info 0x0036 (24) Ein BPTR auf die globale /nfo-Datenstruktur. „1 rn_FileHandlerSegment 0x003A (28) Ein Adreßzeiger auf die Segmentliste des Filehandlers. StandardPacket Offset C (libraries/dosextens.h) Modula-2 (Dos) struct StandardPacket StandardPacket = [ RECORD struct Message sp_Msg; msg:Message; struct DosPacket sp_Pkt; pkt:DosPacket; Ir END; Datenstrukturenreferenz Keine. Routinenreferenz Keine. Beschreibung In dieser Datenstruktur sind eine Message- und eine DosPacket-Datenstruktur zusammengefaßt. Sie werden benötigt, um ein »Packet« zu senden. sp_Msg 0x0000 (0) Eine Message-Datenstruktur wie im Kapitel über die Exec- Library beschrieben. Ihre Adresse wird zum Senden des Packets an die Routine PutMsg übergeben. Das Name-Feld muß dabei auf sp_Pkt zeigen. sp_Pkt 0x0014 (20) Eine DosPacket-Datenstruktur, die den Befehl und die Argumente beinhaltet. Die DOS-LiBrARY . nn nn 219 ER (GmEem; EZZZFTT MmaxcLı (n) | ÜFFEREEEEEEZG Be q HL 4 es German ON ZEIT FFTFZ L/ GALLE) NextSe NDevicenode RootNode Di a f A IPEPLERZELEZTR 7 ee), N Lehen 7 EA ( Ri Segment RER = ILILELL 4 AResidentListY Mnextseg | ke ISEE, di DevInfo # F7 FEEREEEEZEEEGG ) extseg B An n FEREZEEZEEZTUR (a EZ, OREEREZEREZ Y VICE A segment (9 TERITZELZZLGS | | |rl_SegList p Seen AD nl Pi 7 u 0, VICE Abb. 6.1: Die DOS-Library VRREHEN eis zen | SÜSS Ndn_Tas sk N SS TS NN T 7 i NEIN rn im Handler-Filename N oevieenede } Be N N = Startup N N N NN a StartupMscq 2 ISS 77 RR N Non None ___R Bee DosEnvec X Dosenvee IS Devicename / Filerock | N ST NT N Sr Is SI3 II 33 3, I, T x N N rtisioer \ 8 WerÜbez ER Peer: N SEEN N N, DEE, 07 x el —_ N £1_Volume III Abb. 6.2: Die DOS-Device-Liste nn een enN N Process Ä NISSSS ee zB & Priorität des Tasks und En ae N somit des Prozesses _Nin Name 3“ Taskname IIIIIIIIQTS Zn ZZ ern ahnen hen een MsgPort Hier werden für den Prozess bestimmte Nachrichten geschickt ER, 7 L ee Die Messageliste X Dr a des Prozesses r WELZEZEEEE ZILLLLL Ans Node | CL n mp _SigTask Ss pr_SegList I ee UN AA {Lt N Dane Segmentlisten A Segment Y dieses Tengmane Prozesses SIER ZEIT, I VIILLEIL ZA er Nr SEN II" _ ’ pr_currentDir NÜRIIIICKSS TI IS Prozess der N Aktuelles i ee es .. N CL N Verzeichnis Vu nn 4 > PIEIZIIILT ET a _ pr_ConsoleTask TI Z ID, en VO TG Prozess der Filehandlers N pr_FileSystemTask FZZZ ) Emmen D IFEReIeeEEEIIIeIIIZ Npr_cli esmanaLinernterrase } LG: (AIIIN RR] Abb. 6.3: Der Aufbau eines Prozesses T- il 7.1 Die Diskfont-Library Die Aufgabe dieser Library ist es, das Laden, Speichern und Verwalten verschiedener Zeichensätze zu übernehmen. Beim Öffnen dieser Bibliothek wird die Adresse, die die Routine OpenLibrary zurückgibt, der Variablen DiskfontBase zugewiesen. AvailFonts Offset C (libraries/diskfont.h) struct AvailFonts | UWORD af_Type; struct TextAttr af_Attr; Ki Assembler Datenstrukturenreferenz Routinenreferenz - .. ” Beschreibung Syntax: SONSTIGE LIBRARIES »DiskFont«: »DiskFont«: Modula-2 (DiskFont) AvailFont = RECORD type: AvailFontTypeSet; attr: TextAttr; END; Strukturname = AF AvailFontsHeader. AvailFonts. Nach dem Aufruf der Routine AvailFonts wird in einer Reihe von AvailFonts-Datenstrukturen, die von einer AvailFontsHeader-Datenstruktur eingeleitet werden, die Informationen über die verfügbaren Zeichensätze gespeichert. A af_Type 0x0000 (0) Diese 2-Byte-Marke gibt an, ob sich dieser Font im Speicher oder auf Diskette befindet. C Modula-2 Hex AFF_MEMORY memory 0001 AFF_DISK disk 0002 Beschreibung Der Zeichensatz befindet sich im Speicher. Der Zeichensatz befindet sich auf Diskette. 4 af_Attr 0x0002 (2) Dies ist eine normale TextAttr-Datenstruktur aus »Gra- phics«. Sie beschreibt alle Eigenschaften der Zeichensätze. Offset C (libraries/diskfont.h) Modula-2 (DiskFont) struct AvailFontsHeader AvailFontHeader = [ RECORD UWORD afh_NumfEntries; numEntries: CARDINAL; /* struct AvailFonts (* af: ARRAY[O..numEntries-1] OF afh_AFT]; */ AvailFont; *) }; END; AvailFontsHeader Assembler Syntax: Strukturname = AFH Datenstrukturenreferenz Keine. Routinenreferenz »DiskFont«: AvailFonts. Beschreibung Diese Datenstruktur leitet nach Aufruf der AvailFonts-Routine die Liste der oben beschriebenen AvailFonts-Datenstrukturen ein. 1 afh_NumEntries 0x0000 (0) Gibt an, wie viele AvailFonts-Datenstrukturen in afh_AF zusammengefaßt sind. 4 afh_AF 0x0002 (2) Hier befinden sich so viele AvailFonts-Datenstrukturen, wie in afh_NumEntries angegeben. C (libraries/diskfont.h) Modula-2 (DiskFont) Hex Dez struct DiskFontHeader DiskFontHeader = { RECORD 0000 0 struct Node dfh_DF; df: Node; 000E 14 UWORD dfh_FilelD; filleld: CARDINAL; 0010 16 UWORD dfh_Revision; revision: CARDINAL; 0012 18 LONG dfh_Segment; segment: BPTR; 0016 22 char dfh_Name[32]; name: ARRAY [0..31] OF CHAR; 0036 54 struct TextFont dfh_TF; tf: TextFont 006A 106 }; END; DiskFontHeader Datenstrukturenreferenz Keine. Routinenreferenz Keine. Beschreibung Wird ein Diskfont mit Hilfe der Routine LoadSeg geladen, dann steht eine DiskFontHeader-Datenstruk- tur an der Adresse, die LoadSeg zurückgiibt. I dfh_DF 0x0000 (0) Einbindung einer vollständigen Node-Datenstruktur aus der Exec-Library. Über solche Nodes sind alle Diskfonts verket- tet. I dfh_FileID 0x000E (14) Hier steht immer der Wert: Ox0f80 (3968). 4 dfh_Revision 0x0010 (16) Gibt die Versionsnummer des Zeichensatzes an. I dfh_Segment 0x0012 (18) Ein Adreßzeiger auf das Segment nach dem Laden. I dfh_Name 0x0016 (22) Eine Zeichenkette bis 32 Zeichen Länge, die den Namen des Zeichensatzes enthält. Ü dfh_TF 0x0036 (54) Einbindung einer vollständigen TextFont-Datenstruktur aus der der Graphics-Library, die die genauen Daten des Zei- chensatzes enthält. C (libraries/diskfont.h) Modula-2 (DiskFont) FontContents = RECORD fileName: ARRAY [0..255] OF CHAR; ySize: CARDINAL; style: FontStyleSet; flags: FontFlagsSet; END; struct FontContents | char fc_FileName[256]; UWORD fc_ YSize; UBYTE fc_Style; UBYTE fc_Flags; H FontContens Assembler Syntax: Strukturname = FH Datenstrukturenreferenz »DiskFont« : FontContensHeader. Routinenreferenz Keine. ____> Beschreibung Diese Datenstruktur beschreibt einige Eigenschaften eines sich auf Diskette befindenden Zeichensatzes und gibt an, unter welchen Namen dieser auf Diskette zu finden ist. Es werden mehrere solcher Datenstrukturen an eine FontContentsHeader-Datenstruktur angehängt. 4 fc_FileName 0x0000 (0) „1 fc_YSize 0x0100 (256) „4 fc_Style 0x0102 (258) J fe_Flags 0x0103 (259) fch_FC]]; */ L. i FontContentsHeader Assembler Datenstrukturenreferenz Routinenreferenz Der Name (wenn nötig, mit Laufwerksnummer und Direc- tory), unter dem die eigentlichen Daten dieses Zeichensatzes auf Diskette zu finden sind. Wird nur der Filename angege- ben, so wird dieser in der FONTS: Directory gesucht. Dieses Feld entspricht dem ta_YSize-Parameter der Text- Attr-Datenstruktur. Dieses Feld entspricht dem ta_Style-Parameter der TextArttr- Datenstruktur. Dieses Feld entspricht dem ta_Flags-Parameter der Text- Attr-Datenstruktur. Offset C (libraries/diskfont.h) Modula-2 (DiskFont) Hex Dez struct FontContentsHeader FontContentsHeader = RECORD UWORD fch _FilelID; fileld: CARDINAL; UWORD fch_NumeEntries; numEntries: CARDINAL; /* struct FontContens (*fe: ARRAY[O..numEntries-1] OF FontContents*) END; Syntax: Strukturname = FCH Keine. »DiskFont« : DisposeFontContens, NewFontContents. Diese Datenstruktur leitet eine Liste von FontContents-Datenstrukturen ein, die eine Familie ähnlicher Zeichensätze (die sich z.B. nur in der Größe unterscheiden) beschreiben. Diese Datenstruktur ist in dem File .FONT jedes Zeichensatzes enthalten (z.B. in SAPHIRE.FONT). J fch_FileID 0x0000 (0) J fch_NumEntries 0x0002 (2) I fch_FC 0x0004 (4) Dieser Wert identifiziert die Art des Files und muß immer 0x0f00 (3840) sein. Anzahl der in FC folgenden FontContents-Datenstrukturen. Hier stehen so viele FontContents-Datenstrukturen, wie in fceh_NumEntries angegeben. Sosmaleranuıs oo 7.2 Die Expansion-Library Die Expansion-Library dient dazu, Erweiterungen in Form von Steckkarten in das Amiga-System einzubinden. Diese Library ist sehr Hardware-orientiert und daher besonders systemintern. Sie wirft auch für uns noch einige ungeklärte Fragen auf und ist in diesem Buch nur der Vollständigkeit halber mit eingeschlossen. ConfigDev Hex Dez struct ConfigDev ConfigDev = { RECORD 0000 0 struct Node cd_Node; node:Node; 000E 14 UBYTE cd_Flags; flags:UByte; 000F 15 UBYTE cd_Pad; pad:UByte; 0010 16 struct ExpansionRom cd_Rom; rom:ExpansionRom; 0020 32 APTR cd_BoardAddr; boardAddr: ADDRESS; 0024 36 APTR cd_BoardSize; boardSize: ADDRESS; 0028 40 UWORD cd_SlotAddr; slotAddr:CARDINAL; 002A 42 UWORD cd_SlotSize; slotSize:CARDINAL; 002C 44 APTR cd_Driver; driver ADDRESS; 0030 48 struct ConfigDev * cd_NextCD; nextCD:ConfigDevPtr; 0034 52 ULONG cd_Unused[4]; unused: ARRAY [0..3] OF LONGINT; 0044 68 h END; Datenstrukturenreferenz »Expansion«: ExpansionBase, CurrentBinding. Routinenreferenz »Expansion«: AllocConfigDev, ConfigBoard, FindConfigDev, FreeConfigDev, ReadExpansionRom, RemConfigDev. Diese Datenstruktur beschreibt eine externe Erweiterung und dient dazu, sie in das Amiga-System einzubinden. Zu diesem Zweck wird sie an die ConfigBoard-Routine übergeben, die sie in die entspre- chende Liste der ExpansionBase-Datenstruktur einträgt. I cd_Node 0x0000 (0) Über diese eingebundene Node-Datenstruktur werden mehrere ConfigDev-Datenstrukturen miteinander zu einer Liste verkettet. „1 cd _Flags 0x000E (14) Diese Flags geben nähere Auskunft über den Zustand der Erweiterung. Folgende zwei Werte sind zugelassen: C Modula-2 Beschreibung CDF_SHUTUP shutup Die Erweiterung ist ausgeschaltet. CDF_CONFIGME configMe Die Erweiterung benötigt einen eigenenTreiber. I cd Pad 0x000F (15) Ein Füllbyte. 1 cd_Rom 0x0010 (16) Eine eingebundene ExpansionRom-Datenstruktur zum Zu- griff auf die Hardware der Erweiterung. I cd_BoardAddr 0x0020 (32) Die Speicheradresse, an der sich die Erweiterung befindet. „4 cd _BoardSize 0x0024 (36) Die Größe der Erweiterung (natürlich nicht in Quadratzenti- metern, sondern in Bytes). 1 cd_SlotAddr 0x0028 (40) Die Nummer des Slots, in dem sich die Erweiterung befindet. I cd _SlotSize 0x002A (42) Die Anzahl der Slots, die durch diese Erweiterung belegt werden. U cd_Driver 0x002C (44) Ein Adreßzeiger auf die Node-Datenstruktur des zugehöri- gen Treibers. „I cd_NextCD 0x0030 (48) Ein Adreßzeiger auf die zu konfigurierenden Treiber dieser Erweiterung. „J cd _Unused 0x0034 (52) Speicherplatz für zukünftige Erweiterungen dieser Daten- struktur. Offset C (libraries/configvars.h) Modula-2 (Expansion) He De struct CurrentBinding CurrentBinding = [ RECORD 0000 0 struct ConfigDev * cb_ConfigDev; configDev:ConfigDevPtr; 0004 4 UBYTE * cb_FileName; fileName: ADDRESS; 0008 8 UBYTE * cb_ProductString; productString: ADDRESS; V00C 12 UBYTE ** cb_ToolTypes; toolTypes: ADDRESS; 0010 16 }; END; CurrentBinding Datenstrukturenreferenz Keine. Routinenreferenz »Expansion«: GetCurrentBinding, SetCurrentBinding. ___> Beschreibung Diese Datenstruktur beschreibt die aktuelle Konfiguration einer Erweiterung. M SonsTi ; IBR ARIES n _ A . | 2 I cb_ConfigDev 0x0000 (0) Ein Adreßzeiger auf die Liste der zugehörigen ConfigDev- Datenstrukturen. „1 cb_FileName 0x0004 (4) Ein Adreßzeiger auf den Namen des Treibers. I cb_ProductString 0x0008 (8) Ein Adreßzeiger auf den Namen (oder sonstige ID) der Erweiterung. UI cb_ToolTypes 0x000C (12) Ein Adreßzeiger auf die in einer DiskObjekt-Datenstruktur enthaltenen Startup-Informationen des Treibers (siehe »Workbench«). DiagArea Offset C (libraries/configregs.h) Modula-2 (Expansion) He De struct DiagArea DiagArea = ! RECORD 0000 0 UBYTE da_Config; config:UByte; 0001 1 UBYTE da_Flags; flags:UByfte; 0002 2 UWORD da_ Size; size: CARDINAL; 0004 4 UWORD da_DiagPoint; diagPoint:CARDINAL; 0006 6 UWORD da_BootPoint; bootPoint:CARDINAL; 0008 8 UWORD da_Name; name:CARDINAL; 000A 10 UWORD da_ReservedOl; reservedOl:CARDINAL; 000€ 12 UWORD da_ReservedO2; reserved02:CARDINAL 000E 14 }; END; Datenstrukturenreferenz »Expansion«: ExpansionRom. Routinenreferenz Keine. [___> Beschreibung Falls das ERTB_DIAGVALID-Bit des er_Type-Parameters der ExpansionRom-Datenstruktur gesetzt ist, zeigtdaser_InitDiagVec-Feld aufeine solche, im ROM der Erweiterung enthaltene Datenstruktur. Dabei handelt es sich um einen Offset von der Basis der Erweiterung. Sie gibt weiterhin an, was bei einem Bootvorgang oder einem Fehler mit der Erweiterung getan werden soll. I da_Config 0x0000 (0) Dieses Byte gibt an, mit welcher Wortbreite diese Daten- struktur im ROM der Erweiterung vorhanden ist: Modula-2 Hex Beschreibung DAC_NIBBLEWIDE nibbleWide Die Wortbreite beträgt 4 Bit. DAC_BYTEWIDE byteWide Die Wortbreite beträgt 8 Bit. DAC_WORDWIDE wordWide Die Wortbreite beträgt 16 Bit. DAC_BUSWIDTH busWidth Die Wortbreite beträgt 32 Bit. 1 da_Flags 0x0001 (1) 6 DAC_NEVER DAC_CONFIGTIME DAC_BINDTIME DAC_BOOTTIME „1 da_Size 0x0002 (2) [ da_DiagPoint 0x0004 (4) IM da_BootPoint 0x0006 (6) „1 da_Name 0x0008 (8) „1 da_Reserved01 0x000A (10) „1 da_Reserved02 0x000C (12) Folgende Flags geben die Funktion der Datenstruktur an (wann sie benutzt wird): Modula-2 Hex Beschreibung never 00 Sie wird nie benutzt. configTime 10 Sie wird beim Konfigurieren benutzt. bindTime 20 Sie wird beim »Binding« benutzt. bootTime 20 Sie wird beim Booten benutzt. Die Größe, die diese Datenstruktur im ROM der Erweiterung einnimmt. Ein Adreßzeiger auf eine eventuell vorhandene Fehler- behandlungsroutine der Erweiterung oder null. Ein Adreßzeiger auf eine eventuell vorhandene Boot-Rou- tine der Erweiterung oder null. Ein Adreßzeiger auf einen evtl. im ROM der Erweiterung vorhandenen Namen, aber was für einen? Reserviertes Wort für internen Gebrauch, auf null setzen. Reserviertes Wort für internen Gebrauch, auf null setzen. ExpansionBase Offset C (libraries/expansionbase.h) Hex Dez struct ExpansionBase "7 { 0000 0 struct Library LibNode; 0022 34 UBYTE Flags; 0023 35 UBYTE pad; 0024 36 APTR ExecBase; 0028 40 APTR Seglist; 002C 44 struct CurrentBinding CurrentBinding; 003C 60 struct List BoardList; 004A 74 struct List MountLäist; 0058 88 UBYTE AllocRTable[256]; 0158 344 struct SignalSemaphore BindSemaphore; 0186 390 struct Interrupt Int2Lbist; O19C 412 struct Interrupt Int6Lbist; 01B2 434 struct Interrupt Int7List; 01C8 | 456 }: Assembler Datenstrukturenreferenz Routinenreferenz DZ» Beschreibung Präfix: eb_ Syntax: Der Parameter LibNode ist nicht defi- niert. Keine. Keine. Dies ist eine erweiterte Library-Datenstruktur, die die Expansion-Library beschreibt. Diese system- interne Datenstruktur ist nur in neueren Versionen der verschiedenen Compiler implementiert. a Eee E Ü LibNode 0x0000 (0) Flags 0x0022 (34) pad 0x0023 (35) ExecBase 0x0024 (36) SegList 0x0028 (40) CurrentBinding 0x002C (44) BoardList 0x003C (60) MountList 0x004A (74) AllocRTable 0x0058 (88) BindSemaphore 0x0158 (344) Int2List 0x0186 (390) Int6List 0x019C (412) Int7List 0x01B2 (434) Eine eingebundene Library-Datenstruktur zur Einbindung der Expansion-Library in das System. Systeminterne Flags. Ein Füllbyte ohne weitere Bedeutung. Ein Adreßzeiger auf die ExecBase-Datenstruktur. Eine Segmentliste, wer weiß wovon? Ein Adreßzeiger aufeine CurrentBinding-Datenstruktur, die wohl die momentan aktiven Erweiterungen spezifiziert. Der Kopf der Liste aller Erweiterungen. Eine Vermutung: Der Kopf der Liste all der Erweiterungen, die »gemountet« werden müssen. Offensichtlich eine Tabelle... Anscheinend eine für alle Slots (256 benötigten allerdings einen neuartigen 2,50 m breiten Amiga’). Eine eingebundene Semaphore-Datenstruktur, die anschei- nend den Zugriff auf den CurrentBinding-Parameter koor- dinieren soll. 2 22: 204 ExpansionControl Offset C (libraries/configregs.h) Modula-2 (Expansion) Hex Dez struct ExpansionControl ExpansionControl = { RECORD 0 UBYTE ec_Interrupt; interrupt:UByte; l UBYTE ec_Reservedll; reserved11:UByte; 2 UBYTE ec_BaseAddress; baseAddress:UByte; 3 UBYTE ec_Shutup; shutup:UByfte; 4 UBYTE ec_Reserved14; reserved14:UByte; 5 UBYTE ec_Reserved15; reserved15:UByte; 6 UBYTE ec_Reserved16; reserved16:UByfte; 7 UBYTE ec_Reserved17; reserved17:UByte; 8 UBYTE ec_Reserved1B8; reserved18:UByte; 9 UBYTE ec_Reserved19; reserved19:UByte; 10 UBYTE ec_Reservedla; reservedla:UByte; 11 UBYTE ec_Reservedlb; reserved1b:UByte; 12 UBYTE ec_Reservedlc; reservedlc:UByte; 13 UBYTE ec_Reservedld; reserved1d:UByfte; 14 UBYTE ec_Reservedle; reservedle:UByte; 15 UBYTE ec_Reservedlf; reserved 1f:UByte; 16 I ; END; Datenstrukturenreferenz Keine. Routinenreferenz Keine. ___> Beschreibung Laut [KRA] dient diese Datenstruktur zur logischen Beschreibung des Kontrollregister-Bereiches einer Erweiterung. Sie kann den physikalischen Aufbau nur näherungsweise wiedergeben. Die genaue Bedeutung der einzelnen Felder wird wohl von Erweiterung zu Erweiterung variieren? J ec_Interrupt 0x0000 (0) Dieser Wert entspricht dem Interrupt-Register der Erweite- rung. 1 ec_Reservedi1 0x0001 (1) Ein für den internen Gebrauch reserviertes Byte. 3 ec_BaseAddress 0x0002 (2) Hängt mit der Veränderung der Basisadresse innerhalb der Erweiterung des Systems zusammen ??? I ec_Shutup 0x0003 (3) Soll vielleicht zum Ein- und Ausschalten der Erweiterung benutzt werden? „1 ec_Reserved14 0x0004 (4) Ein für den internen Gebrauch reserviertes Byte. 1 ec_Reserved15 0x0005 (5) Ein für den internen Gebrauch reserviertes Byte. I ec_Reserved16 0x0006 (6) Ein für den internen Gebrauch reserviertes Byte. 3 ec_Reserved17 0x0007 (7) Ein für den internen Gebrauch reserviertes Byte. I ec_Reserved18 0x0008 (8) Ein für den internen Gebrauch reserviertes Byte. II ec_Reserved19 0x0009 (9) Ein für den internen Gebrauch reserviertes Byte. I ec_Reservedla 0x000A (10) Ein für den internen Gebrauch reserviertes Byte. I ec_Reservedib 0x000B (11) Ein für den internen Gebrauch reserviertes Byte. I ec_Reservedic 0x000C (12) Ein für den internen Gebrauch reserviertes Byte. I ec_Reservedid 0x000D (13) Ein für den internen Gebrauch reserviertes Byte. 4 ec_Reservedle 0x000E (14) Ein für den internen Gebrauch reserviertes Byte. I ec_Reservedif 0x000F (15) Ein für den internen Gebrauch reserviertes Byte. ExpansionRom Offset C (libraries/configregs.h) Modula-2 (Expansion) Hex Dez struct ExpansionRom ExpansionRom = [ RECORD UBYTE er_Type; type:UByte; UBYTE er_Product; product:UByte; UBYTE er_Flags; flags:UByte; UBYTE er_Reserved03; reserved03:UByte; UWORD er_Manufacturer; manufacturer: CARDINAL; ULONG er_SerialNumber; serialNumber:LONGCARD; UWORD er_InitDiagVec; initDiagVec:CARDINAL; UBYTE er_ReservedOc; reservedOc:UByte; UBYTE er_ReservedOd; reservedOd:UByte; UBYTE er_ReservedOe; reserved0e:UByte; UBYTE er_ReservedOf; reservedOf:UByte b END; Datenstrukturenreferenz »Expansion«: ConfigDev. Routinenreferenz Keine. L___> Beschreibung Laut [KRA] dient diese Datenstruktur zur logischen Beschreibung des ROM-Bereiches einer Erweite- rung. Sie kann den physikalischen Aufbau nur näherungsweise wiedergeben. Die genaue Bedeutung der einzelnen Felder wird wohl von Erweiterung zu Erweiterung variieren. I er_Type 0x0000 (0) Folgende Bits sind für dieses Feld definiert: Modula-2 Dez Beschreibung ERT_DIAGVALID diagValid Wenn dieses Bit gesetzt ist, muß in er InitDiagVec ein Adreßzeiger auf eine korrekt initialisierte DiagArea-Datenstruktur stehen. J er Product 0x0001 (1) Nähere Angaben zu dem Produkt, also der Erweiterung selbst. C Modula-2 Bit Beschreibung ERFB_MEMSPACE memSpace 7 Die Erweiterung muß innerhalb der unteren acht Mbyte des Adreßbe- reichs angesiedelt sein. Ist in diesem Bereich jedoch beliebig verschiebbar. ERFB_NOSHUTUP noShutup 6 Die Erweiterung ist nicht abschaltbar. er_Flags 0x0002 (2) Folgende Bits sind für dieses Feld definiert: er_Reserved03 0x0003 (3) Ein für den internen Gebrauch reserviertes Byte. er_Manufacturer 0x0004 (4) Nähere Angaben über den Hersteller der Erweiterung. er_SerialNumber 0x0006 (6) Die Seriennummer der Erweiterung. er_InitDiagVec 0x000A (10) Falls iner_Types das ERT_DIAGVALID-Bit gesetzt ist, ist dies ein Offset, der die Lage einer DiagArea-Datenstruktur innerhalb des Erweiterungs-ROMs angibt. So können Rou- tinen der Erweiterung in das System eingebunden werden. 4 er_Reserved0c 0x000C (12) Ein für den internen Gebrauch reserviertes Byte. „} er_Reserved0d 0x000D (13) Ein für den internen Gebrauch reserviertes Byte. 4 er_Reserved0e 0x000E (14) Ein für den internen Gebrauch reserviertes Byte. „J er_ReservedOf 0x000F (15) Ein für den internen Gebrauch reserviertes Byte. 7.3 Die Hardware-Library Die Datenstrukturen dieser Library dienen dazu, den Zugriff auf die Hardware zu erleichtern. Die Komponenten der Datenstrukturen entsprechen den Registern der verschiedenen Chips des Amiga. Daher ist dieses Kapitel eigentlich eine Hardware-Beschreibung. bitnode 0000 0004 0008 000A 000C 000E 0012 Assembler 0 4 8 10 12 14 18 C (hardwarel/blit.h) Modula-2 (Hardware) struct bltnode { struct bltnode *n; int (*function)(); char stat; short blitsize; short beamsync; int (*cleanup)(); b Datenstrukturenreferenz Routinenreferenz l.... Beschreibung Bltnode = RECORD n:BltnodePtr; function: ADDRESS; stat: CHAR; blitsize:INTEGER; beamsync:INTEGER; cleanup: ADDRESS; END; Präfix: bn_ »Graphics« : bltnode. »Hardware« : GfxBase. »Graphics« : OBlit, OBSBlit. Die bltnode-Datenstruktur wird zur Beschreibung von eigenständigen Blitter-Jobs verwendet, die in die zuständigen Job-Listen der GraphicsBase-Datenstruktur (siehe »Graphics«) eingetragen werden. 1 n0x0000 (0) I function 0x0004 (4) Ein Adreßzeiger auf die bltnode-Datenstruktur des nächsten Blitter-Jobs in dieser Liste. Über die n-Zeiger werden sämt- liche Blitter-Jobs einer Job-Liste vorwärts verkettet. Ein Adreßzeiger auf den Codebereich eines Unterpro- gramms, das ausgeführt wird, sobald dieser Blitter-Job an der Reihe ist. Das Unterprogramm muß mit einer RTS- Instruktion verlassen werden, wobei in Register DO ein ganzzahliges Funktionsergebnis zurückgegeben wird. Ist der Ergebniswert ungleich null, so wird das Unterprogramm ein weiteres Mal aufgerufen (und zwar so lange, bis es eine Null als Ergebnis liefert!). In Assembler geschriebene Un- terroutinen können folgende Registerkonventionen ausnut- zen: Beim Aufruf befindet sich in Register AO ein Adreßzei- ger auf den Hardware-Registerbereich (Zugriff durch Offset via AO!) und in Register Al ein Adreßzeiger auf die bltnode- Datenstruktur des aktuellen Blitter-Jobs. 3 stat 0x0008 (8) Ein Zeichen, dessen Wert angibt, ob die cleanup-Routine dieses Blitter-Jobs am Ende ausgeführt werden soll oder nicht. Das ist der Fall, wenn der ASCII-Code des Zeichens 0x40 = 64 entspricht. Anderenfalls wird die cleanup-Routine nicht ausgeführt, so daß sie mit NULL initialisiert werden kann. I blitSize 0x000A (10) Eine positive Ganzzahl, deren Wert die Ausmaße des durch diesen Blitter-Job zu bearbeitenden Datenbereichs im For- mat des bitsize Registers (siehe Custom) angibt. I beamsSync 0x000C (12) Eine positive Ganzzahl, deren Wert angibt, bei welcher Position des Elektronenstrahls die function-Routine eines elektronenstrahlsynchronisierten Blitter-Jobs aufgerufen werden soll. I cleanup 0x000E (14) Die Adresse eines Unterprogramms, das wahlweise nach Erledigung des eigentlichen Blitter-Jobs aufgerufen wird, um spezielle Status- und Aufräumarbeiten zu erledigen. CIA Offset C (hardwarel/cia.h) Modula-2 (Hardware) RECORD RECORD 0000 UBYTE ciapra; pra:CiaaPraFlagset; pra:CiabPraFlagsSet; 0001 UBYTE padO[Oxff]; padO:Pad; padO:Pad; 0100 UBYTE ciaprb; prb:CiaaPrbFlagSet; prb:CiabPrbFlagsSet; 0101 UBYTE padl[Oxff]; pad1:Pad; pad1:Pad; 0200 UBYTE ciaddra; ddra:CiaaPraFlagSet; ddra:CiabPraFlagsSet; 0201 UBYTE pad2[0xff]; pad2:Pad; pad2:Pad; 0300 UBYTE ciaddrb; ddrb:CiaaPrbFlagset; ddrb:CiabPrbFlagset; 0301 UBYTE pad3[0xff]; pad3:Pad; pad3:Pad; 0400 UBYTE caatalo; talo:UByte; talo:UByte; 0401 UBYTE pad4[0Oxff]; pad4:Pad; pad4:Pad; 0500 UBYTE ciatahi; tahı:UByte; tahi:UByfte; 0501 UBYTE padS5[Oxff]; pad5:Pad; padS:Pad; 0600 UBYTE ciatblo; tblo:UByfte; tblo:UByfte; 0601 UBYTE pad6[Oxff]; pad6:Pad; pad6:Pad; 0700 UBYTE ciatbhi; tbhi:UByte; tbhi:UByte; 0701 UBYTE pad7[Oxff]; pad7:Pad; pad7:Pad; 0800 UBYTE ciatodlow; todlow:UByte; todlow:UByte; 0801 UBYTE padß8[Oxff]; pad8:Pad; pad8:Pad; 0900 UBYTE ciatodmid; todmid:UByte; todmid:UByte; 0901 UBYTE pad9[0Oxff]; pad9:Pad; pad9:Pad; 0A00 UBYTE ciatodhi; todhi:UByfte; todhı:UByte; Oo C (hardware/cia.h) Modula-2 (Hardware) Dez UBYTE pad10[0xff]; pad10:Pad; pad10:Pad; UBYTE unusedreg; unusedreg:ShortSet; unusedreg:ShortSet; UBYTE pad11[0xff]; pad11:Pad; pad11:Pad; UBYTE ciasdr; sdr:ShortSet; sdr:ShortSet; UBYTE pad12[0Oxff]; pad12:Pad; pad12:Pad; UBYTE ciajcr; icr:CialcrFlagSet; icr:CialcrFlagSet; UBYTE pad13[0xff]; pad13:Pad; pad13:Pad; UBYTE ciacra; cra:CiaCraFlagSet; cra:CiaCraFlagSet; UBYTE pad14[0xff]; pad14:Pad; pad14:Pad; UBYTE ciacrb; crb:CiaCrbFlagsSet; crb:CiaCrbFlagsSet; }; END; END; Assembler Es sind nur die ciaxxx-Offsets definiert. Datenstrukturenreferenz Keine. Routinenreferenz Keine. L___> Beschreibung Die CIA -Datenstruktur stellt nichts anderes als eine Beschreibung der Hardware-Register des im Amiga für die Kommunikation mit der Peripherie verwendeten CIA-Bausteins 8520 dar. Die Abkürzung »CIA« steht dabei für »complex interface adapter«, was man sinngemäß mit »vielseitiger Schnittstellenbau- stein« übersetzen kann. Der CIA 8520 ist dem im C64 verwendeten CIA 6526 zum Verwechseln ähnlich, lediglich die TODxx-Register wurden beim 8520 geringfügig verändert: Sie fungieren hier als reine 24- Bit-Zähler, wohingegen im 6526 an dieser Stelle eine Echtzeituhr »time of day« vorhanden war. Den CIA-Baustein 8520 und seine Register in ihrer allgemeinen Funktion präsentiert Ihnen die nachfolgende Auflistung: Register Bedeutung Datenregister für Port A Datenregister für Port B Datenrichtungsregister für Port A Datenrichtungsregister für Port B Niederwertiges Byte (Bits O bis 7) für Timer A Höherwertiges Byte (Bits 8 bis 15) für Timer A Niederwertiges Byte (Bits 0 bis 7) für Timer B Höherwertiges Byte (Bits 8 bis 15) für Timer B Niederwertiges Byte (Bits O bis 7) des Event-Zählers Mittleres Byte (Bits 8 bis 15) des Event-Zählers Höherwertiges Byte (Bits 16 bis 23) des Event-Zählers | Register Name Bedeutung 12 0x0C SDR Datenregister des seriellen Ports 13 0x0D ICR Interrupt-Kontrollregister 14 O0x0E CRA Kontrollregister für Timer A 15 0x0F CRB Kontrollregister für Timer B Im Amiga verrichten zwei 8520-CIA-Bausteine ihre Arbeit: der CIA-A mit Basisadresse Ox0O0BFEO0O1 = 12574721 und der CIA-B mit Basisadresse Ox00BFD000 = 12570624. Aus speichertechnischen Gründen liegen die Register eines CIA-Bausteins im Amiga jeweils 256 Byte voneinander entfernt. Deshalb erhält man die tatsächliche Adresse eines CIA-Registers durch Addition von 0x0100*R =256*R zur Basisadresse des CIA-Bausteins (dabei steht R für die Nummer des gewünschten Registers). In Modula-2 sind solche Umrechnungen allerdings überflüssig, weil hier im Modul Hardware bereits zwei Variablen ciaa und ciab der Typen CIAA bzw. CIAB ab den absoluten Adressen Ox00BFEO01 sowie 0x00BFD000 deklariert sind. In »C« umgeht man die Rechnerei durch eine kleine Zeigermanipulation: STrUCL GIA- 7CT1a%8;: *elab; OD ii on je] | = (CIA)* OxOOBFEOOL; E® Zeiger auf Registersatz richten ”7 = (CIA)* Ox0O0BFDO00; = 060, Q — Do oO | Aufgrund der unterschiedlichen Belegung und Benutzung der einzelnen Register der beiden CIA- Bausteine werden für diese unter Modula-2 im Modul Hardware zwei unterschiedliche Typen namens CIAA und CIAB vereinbart. In »C« existieren solche Strukturen leider nicht. Wie die zwei CIA- Bausteine im einzelnen in das Gesamtsystem des Amiga eingebunden sind, erfahren Sie im folgenden. CIA-A _ Adresse Name D7 D6 DS D4 D3 D2 D1 DO (Bedeutung) 0Ox00BFE001 PRA /FIRI /FIRO /RDY /TKO /WPRO /CHNG /LED /OVL 0Ox00BFE101 PRB 8-Bit YO-Register für den Parallelport (Centronics) 0x00BFE201 DDRA 0 0 0 0 0 0 1 1 0x00BFE301 DDRB Hiermit können die einzelnen Leitungen des Parallelports als Ein- oder Ausgänge betrieben werden. Ox00BFE401 TALO Timer A des CIA-A wird nur für den Datentransfer per Ox00BFE501 TAHI _serieller Schnittstelle benötigt. Ansonsten ist er frei. 0Ox00BFE601 TBLO Timer B des CIA-A dient der Synchronisation des Blitters 0x00BFE701 TBHI mit dem Elektronenstrahl. Daher wird Timer B nur für QBS Blitter-Jobs (siehe GfxBase-Datenstruktur aus »Graphics«) benötigt. Ansonsten ist er frei verfügbar. 0x00BFE801 TODLO Der Event-Zähler des CIA-A registriert die Frequenz-Impulse Ox00BFE901 TODMI (»Ticks«) des Netzteils. Die in Deutschland übliche 50 Hz 0x00BFEA01 TODHI Versorgungsspannung ergibt ein Inkrement von 50 je Sekunde. 0x00BFEBOI -/- i Adresse Name Bedeutung 0x00BFECO1 SDR Datenregister für den Empfang der Tastaturcodes 0x00BFEDO1 ICR Interrupt-Kontrollregister des CIA-A Ox00BFEEOl CRA Kontrollregister für Timer A des CIA-A 0x00BFEF0Ol CRB Kontrollregister für Timer B des CIA-A Wichtig für die Systemsteuerung ist, daß der CIA-A einen INT2*Interrupt erzeugen kann. Die einzelnen Bits im Portregister A des CIA-A haben folgende Bedeutung: Bedeutung Eingabebit: Wird der Feuerknopf des Mouse-Ports I gerade gedrückt? Eingabebit: Wird der Feuerknopf des Mouse-Ports 0 gerade gedrückt? Eingabebit: Ist das ausgewählte Laufwerk bereit? Eingabebit: Ist der Kopf des Laufwerks gerade über Spur 0? Eingabebit: Ist die Diskette im Laufwerk schreibgeschützt? Eingabebit: Hat ein Diskettenwechsel im Laufwerk stattgefunden? Ausgabebit: Steuerung der Power-LED (O=hell, 1=dunkel) Ausgabebit: Speicherüberlaufsbit „memory overlay« (nicht ändern!) CIA-B Adresse Name D7 D6s6 D35 D4 D3 D2 Di DO (Bedeutung) 0x00BFD000 PRA /DIR /RTS /CD /CTS /DSR /SEL J/POUT /BUSY 0x00BFD100 PRB /MTR /SEL3 /SEL2 /SEL1 /SELO /SIDE /DIR /STEP 0x00BFD200 DDRA 1 1 0 0 0 0 0 0 0x00BFD300 DDRB 1 l l l 1 l 1 1 0x00BFD400 TALO Timer A des CIA-B wird vom Betriebssystem zur Kommunikation 0x00BFD500 TAHI mit der Tastatur benutzt. 0x00BFD600 TBLO Timer B des CIA-B dient dem Betriebssystem als virtuelles 0x00BFD700 TBHI »timer device«, das für Interrupts und die Task-Umschaltung benötigt wird. 0x00BFD800 TODLO Der Event-Zähler des CIA-B registriert die horizontalen 0x00BFD900 TODMI Synchronisationsimpulse. Im PAL-Betrieb sind das normaler- 0x00BFDA00 TODHI weise genau 15625 pro Sekunde (PAL-Zeilenfrequenz!). 0x00BFDBO00 -/- 0x00BFDC00 SDR _ (bisher nicht benutzt) 0x00BFDD00 ICR Interrupt-Kontrollregister des CIA-B 0Ox00BFDE0O0O CRA Kontrollregister für Timer A des CIA-B 0x00BFDF00 CRB Kontrollregister für Timer B des CIA-B Wichtig für die Systemsteuerung ist, daß der CIA-B einen INT6*Interrupt erzeugen kann. Die einzelnen Bits im Portregister A des CIA-B haben folgende Bedeutung: Bit 07 06 05 04 03 02 01 00 Name DTR RTS CD CTS DSR SEL POUT BUSY Bedeutung Ausgabebit: DTR-Steuersignal der seriellen Schnittstelle Ausgabebit: RTS-Steuersignal der seriellen Schnittstelle Eingabebit: CD-Signal der seriellen Schnittstelle Eingabebit: CTS-Signal der seriellen Schnittstelle Eingabebit: DSR-Signal der seriellen Schnittstelle Eingabebit: SELECT-Signal der parallelen Schnittstelle Eingabebit: PAPER OUT-Signal der parallelen Schnittstelle Eingabebit: BUSY-Signal der parallelen Schnittstelle Die Bedeutung der einzelnen Bits im Portregister B des CIA-B entnehmen Sie bitte der nachfolgenden Aufstellung: Bedeutung Ausgabebit: MOTOR-Steuersignal für das Diskettenlaufwerk Ausgabebit: Auswahlsignal »drive select« für Laufwerk 3 Ausgabebit: Auswahlsignal »drive select« für Laufwerk 2 Ausgabebit: Auswahlsignal »drive select« für Laufwerk 1 Ausgabebit: Auswahlsignal »drive select« für Laufwerk O Ausgabebit: Auswahlsignal »side select« ans Diskettenlaufwerk Ausgabebit: DIRECTION-Steuersignal für das Diskettenlaufwerk Ausgabebit: STEP-Signal für das Diskettenlaufwerk U ciapra 0x0000 (0) Adresse: Funktion: 1 pad0 0x0001 (1) 0x00BFEO001 = 12574721 für CIA-A, 0x00BFD000 = 12570624 für CIA-B PRA-Register Dummy-Komponente zur Adreßfüllung zwischen den CIA-Registern. I ciaprb 0x0100 (256) Adresse: Funktion: 4 padi 0x0101 (257) Dummy-Komponente zur Adreßfüllung zwischen den CIA-Registern. 0x00BFE101 = 12574977 für CIA-A, 0x00BFD100 = 12570880 für CIA-B PRB-Register ciaddra 0x0200 (512) | Adresse: 0x00BFE201 = 12575233 für CIA-A, 0x00BFD200 = 12571136 für CIA-B Funktion: DDRA-Register pad2 0x0201 (513) Dummy-Komponente zur Adreßfüllung zwischen den CIA-Registern. ciaddrb 0x0300 (768) Adresse: 0x00BFE301 = 12575489 für CIA-A, 0x00BFD300 = 12571392 für CIA-B Funktion: DDRB-Register pad3 0x0301 (769) Dummy-Komponente zur Adreßfüllung zwischen den CIA-Registern. ciatalo 0x0400 (1024) Adresse: 0x00BFE401 = 12575745 für CIA-A, 0x00BFD400 = 12571648 für CIA-B Funktion: TALO-Register pad4 0x0401 (1025) Dummy-Komponente zur Adreßfüllung zwischen den CIA-Registern. ciatahi 0x0500 (1280) Adresse: 0x00BFES501 = 12576001 für CIA-A, 0x00BFD500 = 12571904 für CIA-B Funktion: TAHI-Register pad5 0x0501 (1281) Dummy-Komponente zur Adreßfüllung zwischen den CIA-Registern. ciatblo 0x0600 (1536) Adresse: 0x00BFE601 = 12576257 für CIA-A, 0x00BFD600 = 12572160 für CIA-B Funktion: TBLO-Register pad6 0x0601 (1537) Dummy-Komponente zur Adreßfüllung zwischen den CIA-Registern. ciatbhi 0x0700 (1792) Adresse: 0x00BFE701 = 12576513 für CIA-A, 0x00BFD700 = 12572416 für CIA-B Funktion: TBHI-Register pad7 0x0701 (1793) Dummy-Komponente zur Adreßfüllung zwischen den CIA-Registern. ciatodlow 0x0800 (2048) Adresse: 0x00BFE801 = 12576769 für CIA-A, 0x00BFD800 = 12572672 für CIA-B Funktion: TODLO-Register pad8 0x0801 (2049) Dummy-Komponente zur Adreßfüllung zwischen den CIA-Registern. ciatodmid 0x0900 (2304) Adresse: 0x00BFE901 = 12577025 für CIA-A, 0x00BFD900 = 12572928 für CIA-B Funktion: TODMI-Register pad9 0x0901 (2305) Dummy-Komponente zur Adreßfüllung zwischen den CIA-Registern. ciatodhi 0x0A00 (2560) Adresse: 0x00BFEA01 = 12577281 für CIA-A, 0x00BFDA00 = 12573184 für CIA-B Funktion: TODHI-Register pad10 0x0A01 (2561) Dummy-Komponente zur Adreßfüllung zwischen den CIA-Registern. unusedreg 0x0B00 (2816) (unbenutztes CIA-Register) padi1 0x0B01 (2817) Dummy-Komponente zur Adreßfüllung zwischen den CIA-Registern. ciasdr 0x0C00 (3072) Adresse: 0Ox00BFECO1 = 12577793 für CIA-A, 0x00BFDC00 = 12573696 für CIA-B Funktion: SDR-Register pad12 0x0C01 (3073) Dummy-Komponente zur Adreßfüllung zwischen den CIA-Registern. ciaicr 0x0D00 (3328) Adresse: Ox00BFEDO1 = 12578049 für CIA-A, 0x00BFDD00 = 12573952 für CIA-B Funktion: ICR-Register pad13 0x0D01 (3329) Dummy-Komponente zur Adreßfüllung zwischen den CIA-Registern. ciacra 0x0E00 (3584) Adresse: 0x00BFEEO1 = 12578305 für CIA-A, 0x00BFDE00 = 12574208 für CIA-B Funktion: CRA-Register pad14 0x0E01 (3585) Dummy-Komponente zur Adreßfüllung zwischen den CIA-Registern. ciacrb 0x0F00 (3840) Adresse: Ox00BFEFOIl = 12578561 für CIA-A, 0x00BFDF00 = 12574464 für CIA-B Funktion: CRB-Register Custom om C (hardware/custom.h) Modula-2 (Hardware) 0000 0002 0004 0006 0008 000A 000C 000E 0010 0012 0014 0016 0018 001A 001C OO1E 0020 0024 0026 0028 002A 002C 002E 0030 0032 0034 0036 0038 003A 003C 003E 0040 0042 0044 0046 0048 004B 0050 0054 0058 a\$nND © 12 14 16 18 20 22 24 26 28 30 32 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 76 80 84 88 struct Custom { UWORD bitddat; UWORD dmaconr; UWORD vposr; UWORD vhposr; UWORD dskdatr; UWORD joyOdat; UWORD joyldat; UWORD ckxdat; UWORD adkconr; UWORD potOdat; UWORD potldat; UWORD potinp; UWORD serdatr; UWORD dskbytr; UWORD intenar; UWORD intregr; APTR dskpt; UWORD dsklen; UWORD dskdat; UWORD refptr; UWORD vposw; UWORD vhposw; UWORD copcon; UWORD serdat; UWORD serper; UWORD potgo; UWORD joytest; UWORD strequ; UWORD strvbl; UWORD strhor; UWORD strlong; UWORD bltcon0; UWORD bltcon]; UWORD bltafwm; UWORD bltalwm; APTR bltcpt; APTR bltbpt; APTR bltapt; APTR bltdpt; UWORD bltsize; Custom = RECORD bitddat:CARDINAL; dmaconr:DmafFlagsSet; vposr:-LONGCARD; dskdatr:CARDINAL; joyOdat:Coord; joyldat:Coord; clxdat:Collison Flag Set; adkconr:Adk Flag Set; potOdat:Coord; potldat:Coord; potinp:Pot Flag Set; serdatr:Serial Info; _ dskbytr:Disk Info; intenar:IntFlagSet; intregr:IntFlagSet; dskpt: ADDRESS; dsklen:CARDINAL; dskdat:CARDINAL; refptr:CARDINAL; vposw:LONGCARD; copcon:BITSET,; serdat:Serial Info; serper:-CARDINAL; potgo:Pot Flag Set; joytest:Coord; strequ:CARDINAL; strvbl:CARDINAL; strhor:CARDINAL, strlong:CARDINAL; bltcon0:BC® Flag Set; bltcon1:BC1 Flag Set; bltafwm:BITSET; bltalwm:BITSET,; bltcpt: ADDRESS; bltbpt: ADDRESS; bltapt: ADDRESS; bltdpt: ADDRESS; bltsize:CARDINAL; Offset C (hardware/custom.h) Modula-2 (Hardware) Hex Dez 005A 90 UWORD pad2d[J3]; pad2d: ARRAY [0..2] OF CARDINAL; 0060 96 UWORD bltcmod; bltcemod:CARDINAL; 0062 98 UWORD bltbmod; bltbmod:CARDINAL; 0064 100 UWORD bltamod; bltamod:CARDINAL; 0066 102 UWORD bltdmod; bltdmod:CARDINAL; 0068 104 UWORD pad34[4]; pad34:ARRAY [0..3] OF CARDINAL; 0070 112 UWORD bltcdat; bltcdat:CARDINAL; 0072 114 UWORD bltbdat; bitbdat:CARDINAL; 0074 116 UWORD bltadat; bltadat:CARDINAL; 0076 118 UWORD pad3b[4]; pad3b:ARRAY [0..3] OF CARDINAL; 007E 126 UWORD dsksync; dsksync:CARDINAL; 0080 128 ULONG coplic; copllc: ADDRESS; 0084 132 ULONG cop2lc; cop2lc: ADDRESS; 0088 136 UWORD copjmpl; copjmp1:CARDINAL; 008A | 138 UWORD copjmp2; copjmp2:CARDINAL; 008C | 140 UWORD copins; copins:CARDINAL; 008E 142 UWORD diwstrt; diwstrt:Coord; 0090 144 UWORD diwstop; diwstop:Coord; 0092 146 UWORD ddfstrt; ddfstrt:Coord; 0094 148 UWORD ddfstop; ddfstop:Coord; 0096 150 UWORD dmacon; dmacon:DmafFlagsSet; 0098 152 UWORD ckxcon; clxcon:Collision Control Flag Set; 009A | 154 UWORD intena; intena:IntFlagSet; 009C 156 UWORD intreg; intreq:IntFlagSet; 009E 158 UWORD adkcon; adkcon: AdkFlagsSet; 00AO 160 struct AudChannel aud:Audio Channels { (* RECORD 0000 0 UWORD *ac_ptr; acptr- ADDRESS; 0004 4 UWORD ac_len; aclen:CARDINAL; 0006 6 UWORD ac_per; acper:CARDINAL; 0008 8 UWORD ac_vol; acvol:CARDINAL; 000A 10 UWORD ac_dat; acdat:CARDINAL; D0O0OC 12 UWORD ac_pad/2]; acpad: ARRAY [0..1] _ OFCARDINAL; 0010 16 } aud[4]; END; *) 00EO 224 APTR bplpt[6]; bplpt: ARRAY [0..5] OF ADDRESS; 00F8 248 UWORD pad7c[4]; pad7c:ARRAY [0..3] OF CARDINAL; 0100 256 UWORD bplconO; bplcon0:BPLC® Flag Set; | OMMe C (hardware/custom.h) Modula-2 (Hardware) UWORD bplcon]; bplcon1:CARDINAL; UWORD bplcon2; bplcon2:CARDINAL; UWORD padß83; pad83:CARDINAL; UWORD bplimod; bplimod:CARDINAL; UWORD bpl2mod; bpl2mod:CARDINAL; UWORD pad86[2]; pad86:ARRAY [0..1] OF CARDINAL; UWORD bpldat[6]; bpldat:ARRAY [0..5] OF CARDINAL; UWORD padßel2]; pad8e: ARRAY [0..1] OF CARDINAL; APTR sprpt[B8]; sprpt: ARRAY [0..7] OF ADDRESS; struct SpriteDef spr:Sprites { (* RECORD UWORD pos; pos:CARDINAL, UWORDB ct]; ctl:CARDINAL; UWORD dataa; data: LONGCARD; UWORD datab; datab:CARDINAL; } spr[8]; END; *) UWORD color[32]; color: ARRAY [0..31] OF CARDINAL; b END; Assembler Es sind nur die einzelnen Offsets definiert. Datenstrukturenreferenz Keine. Routinenreferenz Keine. Die Custom-Datenstruktur stellt nichts anderes als eine Aufzählung der Amiga-Hardware-Register auf den drei Spezialchips » Agnus«, »Denise« und »Paula« dar. Die Basisadresse des Registersatzes ist gleich 0x00DFF000 = 14675968. Die tatsächliche Registeradresse erhält man dementsprechend durch Addition des jeweiligen Offsets zur Basisadresse Ox0O0ODFFO00. In Modula-2 sind solche Umrechnungen aller- dings überflüssig, da hier im Modul Hardware bereits eine Variable custom vom Typ Custom ab der absoluten Adresse Ox00DFF00 deklariert ist. In »C« umgeht man die Rechnerei durch eine kleine Zeigermanipulation: struct Custom *custonm; custom = (Custom)* Ox0OODFFOOO; /* Zeiger auf Registersatz richten */ Die nachfolgenden Erläuterungen zu den einzelnen Hardware-Registern sind alle einheitlich aufgebaut. Zuerst wird der (englische) Originalname des Registers angegeben. Danach finden Sie Informationen bezüglich Lage und Zugriffsmodus des Registers, gefolgt von der eigentlichen Funktionserklärung. Die Bedeutungen der zur Lage- und Zugriffsmodus-Beschreibung verwendeten Abkürzungen sind leicht verständlich: A: »Agnus« D: »Denise« P: »Paula« ER: »early read« (DMA -Datentransfer ins RAM, der vor dem Lesezyklus des Prozessors stattfindet) R: »read access« (Lesezugriff) SW: _»strobe write« (Schreibzugriff auf eine Strobe-Adresse ohne echte Registerbits) W: »write access« (Schreibzugriff): Registerinhalt kann vom Copper nicht manipuliert werden. ” Registerinhalt kann vom Copper nur dann verändert werden, wenn das CDANG-Bit = Bit 1 von copcon gesetzt ist. Zwei allgemeine Hinweise bezüglich der Hardware-Register sind an dieser Stelle noch angebracht: (1) Der Amiga besitzt viele durch Namen der Form xxx bzw. xxxw und xxxr gekennzeichnete Registerpaare. Beide Register betreffen die gleiche Hardware-Funktion, wobei die xxxr-Register reine Statusregister mit ausschließlichem Lesezugriff und die xxxRegister die eigentlichen Setzregi- ster mit ausschließlichem Schreibzugriff sind. Im Rahmen der Funktionsbeschreibung solcher Registerpaare wird deshalb häufig auf das korrespondierende Schwesterregister verwiesen. (2) Die in Custom definierten DMA-Adreßzeiger haben momentan lediglich eine Adreßbreite von 19 Bit, was gerade den 512K = 2'°-Bit-Chip-RAM entspricht. Da von diesen 19 Bit das niederwertig- ste unveränderbar gleich null gesetzt ist, arbeiten die DMA-Operationen alle nur auf Wortgrenzen. Lediglich die Bits 1 bis 18 der DMA-Adreßzeiger sind somit überhaupt von Bedeutung und manipulierbar. 4 bitdDat 0x0000 (0) Name: »blitter destination data« Chip: A, Zugriff: ER - Funktion: Zwischenspeicherung der Zieldaten einer Blitter-Operation, bis sie tatsächlich ins RAM geschrieben werden. Auf die angegebene Dummy-Adresse kann der Prozessor nicht zugreifen. 1] dmaconr 0x0002 (2) Name: »DMA control (and blitter status) read« Chip: AP, Zugriff: R - Funktion: Statusregister zur Kontrolle sämtlicher DMA-Kanäle des Amiga und der DMA- Statusbits des Blitters. Für die einzelnen Bits des Registers gelten folgende Zuordnungen: Bedeutung SET/CLR _»set/clear control« (R/W) legt fest, ob das Schreiben einer 1 in ein Bit des Registers dieses löscht oder setzt. BBUSY »blitter busy« (R): Ist der Blitter gerade in Aktion? BZERO »blitter zero« (R): Ergab letzte Blitter-Operation eine Null? -/-11 =) BLTPRI »blitter DMA priority« (R/W): Hat Blitter Priorität vor CPU? DMAEN »DMA enable« (R/W): Ist überhaupt DMA eingeschaltet? BPLEN »bitplane enable« (R/W): Ist die Bitplane-DMA eingeschaltet? COPEN »copper enable« (R/W): Ist die Copper-DMA eingeschaltet? BLTEN »blitter enable« (R/W): Ist die Blitter--DMA eingeschaltet? SPREN »sprite enable« (R/W): Ist die Sprite-DMA eingeschaltet? DSKEN »disk enable« (R/W): Ist die Disk-DMA eingeschaltet? AUD3EN _»audio 3 enable« (R/W): Ist Audio-DMA Kanal 3 eingeschaltet? AUD2EN _»audio 2 enable« (R/W): Ist Audio-DMA Kanal ?2 eingeschaltet? AUDIEN »audio 1 enable« (R/W): Ist Audio-DMA Kanal 1 eingeschaltet? AUDOEN »audio O enable« (R/W): Ist Audio-DMA Kanal 0 eingeschaltet? vposr 0x0004 (4) Name: »vertical position (most significant bit & frame flop) read« Chip: A, Zugriff: R - Funktion: Statusregister für die vertikale Position des Elektronenstrahls oder eines Light- pens. Das Bit 0 dieses Registers stellt das Bit 8 (also V8) des Werts der vertikalen Position des Elektronenstrahls dar (siehe vhposr). Weiterhin ist dem Wert des Bits 15 LOF zu entnehmen, ob gerade ein »long frame« (LOF gesetzt) oder ein »short frame« (LOF gelöscht) dargestellt wird. vhposr 0x0006 (6) Name: »vertical and horizontal position read« Chip: A, Zugriff: R - Funktion: Statusregister für vertikale und horizontale Position des Beams oder eines Lightpens. Die Bits 0 bis 7 stellen die niederwertigen Bits HO-H7 der horizonta- len Position dar, die Bits 8 bis 15 entsprechend die niederwertigen Bits VO-V7 der vertikalen Position. Die Auflösung beträgt dabei 280 ns oder 1/160 der Monitor- breite. dskdatr 0x0008 (8) Name: »disk DMA data read« Chip: P, Zugriff: ER - Funktion: Dies ist der 2 Byte große Disk-DMA-Datenpuffer für gelesene oder noch zu schreibende Daten. joy0dat 0x000A (10) Name: »joystick/mouse O data« Chip: D, Zugriff: R - Funktion: Statusregister für die gesampelten Positionswerte des linken Maus- bzw. Joy- stick-Ports. I joyldat 0x000C (12) Name: »joystick/mouse 1 data« Chip: D, Zugriff: R - Funktion: Statusregister für die gesampelten Positionswerte des rechten Maus- bzw. Joy- stick-Ports. II clixdat 0x000E (14) Name: »collision data« Chip: D, Zugriff: R - Funktion: Statusregister der von der Hardware erkannten Kollisionen, dessen Inhalt bei jedem Lesezugriff automatisch auf null zurückgesetzt wird. Für die einzelnen Bits des Registers gelten folgende Zuordnungen (siehe auch cIxcon): Bedeutung n: Sprite 4 (oder 5) mit Sprite 6 (oder 7) kollidiert? Sprite 2 (oder 3) mit Sprite 6 (oder 7) kollidiert? Sprite 2 (oder 3) mit Sprite 4 (oder 5) kollidiert? Sprite 0 (oder 1) mit Sprite 6 (oder 7) kollidiert? Sprite 0 (oder 1) mit Sprite 4 (oder 5) kollidiert? Sprite 0 (oder 1) mit Sprite 2 (oder 3) kollidiert? Playfield 2 und Sprite 6 (oder 7) kollidiert? Playfield 2 und Sprite 4 (oder 5) kollidiert? Playfield 2 und Sprite 2 (oder 3) kollidiert? Playfield 2 und Sprite O (oder 1) kollidiert? Playfield 1 und Sprite 6 (oder 7) kollidiert? Playfield 1 und Sprite 4 (oder 5) kollidiert? Playfield 1 und Sprite 2 (oder 3) kollidiert? Playfield 1 und Sprite 1 (oder 0) kollidiert? Playfield 1 mit Playfield 2 kollidiert? I adkconr 0x0010 (16) Name: »audio and disk control read« Chip: P, Zugriff: R * Funktion: Statusregister zur Steuerung der Funktionsweise des Disk-Controllers und der vier Audio-Kanäle. Für die einzelnen Bits des Registers gelten folgende Zuord- nungen: Name Bedeutung SET/CLR _»set/clear control« (R/W) legt fest, ob das Schreiben einer 1 in ein Bit des Registers dieses löscht oder setzt. PRECOMPI Der binäre Wert der beiden PRECOMPx-Bits legt die Schreib- PRECOMPO vorkompensation für den Disk I/O fest: 00 = keine, Ol = 140 ns, 10 = 280 ns, 11=560 ns Bedeutung 12 MFMPREC _ gesetzt = MFM Schreibvorkompensation, gelöscht = GCR Schreibvorkom- pensation 1l UARTBRK Das Setzen dieses Bits löst einen UART-Interrupt aus. WORDSYNC Ist die Disketten-Lesesynchronisation mit dem disksync-Wert eingeschaltet? MSBSYNC _ Ist die Disketten-Lesesynchronisation für das Apple GCR- Format (höchst- wertiges Bit 7 immer gesetzt!) eingeschaltet? FAST gesetzt = 2 us Taktzeit für Bit-Zellen auf Diskette (MFM), gelöscht = 4 us Taktzeit für Bit-Zellen auf Diskette (GCR) USE3PN Audio-Kanal 3 zur Frequenzmodulation von nichts? USE2P3 Audio-Kanal 2 zur Frequenzmodulation von Audio-Kanal 3? USEIP2 Audio-Kanal 1 zur Frequenzmodulation von Audio-Kanal 2? USEOPI1 Audio-Kanal 0 zur Frequenzmodulation von Audio-Kanal 1? USE3VN Wie USE3PN, aber für Lautstärkenodulation. USE2V3 Wie USE?2P3, aber für Lautstärkenodulation. USE1V2 Wie USEI1P2, aber für Lautstärkenodulation. USEOVI1 Wie USEOPI, aber für Lautstärkenodulation. I pot0dat 0x0012 (18) Name: »potentiometer counter data left pair« Chip: P, Zugriff: R * Funktion: Dieses Zählregister enthält die aktuellen Potentiometerwerte des linken Maus- bzw. Joystick-Ports. Das niederwertige Byte stellt dabei die x-Koordinate, das höherwertige dagegen die y-Koordinate dar. Gestoppt wird der Horizontalzähler durch ein Signal an Pin 32 (POTOX) von Paula und der Vertikalzähler durch ein Signal an Pin 33 (POTOY). 1 potlidat 0x0014 (20) Name: »potentiometer counter data right pair« Chip: P, Zugriff: R* Funktion: Dieses Zählregister enthält die aktuellen Potentiometerwerte des rechten Maus- bzw. Joystick-Ports. Das niederwertige Byte stellt dabei die x-Koordinate, das höherwertige dagegen die y-Koordinate dar. Gestoppt wird der Horizontalzähler durch ein Signal an Pin 35 (POTI1X) von Paula und der Vertikalzähler durch ein Signal an Pin 36 (POTIY). U potinp 0x0016 (22) Name: »potentiometer port data read« (POTGOR) Chip: P, Zugriff: R * Funktion: Statusregister zur Kontrolle eines 4 Bit breiten bidirektionalen I/O-Ports, der die gleichen vier Pins von Paula benutzt wie die Potentiometerzähler potOdat und potldat. Für die einzelnen Bits des Registers gelten folgende Zuordnungen: Bedeutung gesetzt = Ausgabe an Pin 36, gelöscht = Eingabe an Pin 36 Das gelesene bzw. auszugebende Datenbit für Pin 36. gesetzt = Ausgabe an Pin 35, gelöscht = Eingabe an Pin 35 Das gelesene bzw. auszugebende Datenbit für Pin 35. gesetzt = Ausgabe an Pin 33, gelöscht = Eingabe an Pin 33 Das gelesene bzw. auszugebende Datenbit für Pin 33. gesetzt = Ausgabe an Pin 32, gelöscht = Eingabe an Pin 32 Das gelesene bzw. auszugebende Datenbit für Pin 32. Ein Identifikationscode des Chips, der momentan gleich 0 ist. Initialisiere und starte die Potentiometerzähler. I serdatr 0x0018 (24) Name: Chip: Funktion: »serial port data and status read« P, Zugriff: R * Aus diesem Register liest man die Datenbits vom Empfangspuffer der seriellen Schnittstelle sowie deren aktuellen Status ein. Für die einzelnen Bits des Regi- sters gelten folgende Zuordnungen: Bedeutung Ist serielle Schnittstelle beim Empfang nicht mehr mitgekommen? Ist der Empfangspuffer der seriellen Schnittstelle voll? Ist der Sendepuffer der seriellen Schnittstelle leer? Ist das Sende-Schieberegister der seriellen Schnittstelle leer? Empfängt der RXD-Pin serielle UART-Daten, die vom Prozessor direkt getestet werden müssen? Stopbit Datenbit oder Stopbit (falls lang) Insgesamt acht Datenbits DB7 bis DBO. I dskbytr 0x001A (26) Name: Chip: Funktion: »disk data byte and status read« P, Zugriff: R * Datenpuffer und Statusregister für den Datentransfer zwischen Diskette und RAM durch den Disketten-Controller. Der Datentransfer erfolgt dabei byte- orientiert, immer schön ein Byte nach dem anderen. Das »ready«-Statusbit 15 wird nach jedem Lesezugriff auf das Register automatisch zurückgesetzt. Für die einzelnen Bits des Registers gelten folgende Zuordnungen: Name DSKBYT DMAON DISKWRITE Bedeutung Kann das nächste übertragene Datenbyte gelesen werden? Logische UND-Verknüpfung des DMAEN-Bits = Bit 15 von dsklen mit dem DMAEN-Bit = Bit 9 von dmacon. Kopie des WRITE-Bits = Bit 14 von dsklen. WORDEQUAL Solange das von Diskette gelesene Datenbyte gleich dem Wert von dsksync ist, bleibt dieses Bit gesetzt. Insgesamt 8 Bits für das eigentliche Datenbyte. II intenar 0x001C (28) Name: Chip: Funktion: »interrupt enable bits read« P, Zugriff: R * Statusregister zur Verwaltung erlaubter und verbotener Interrupts. Erst das Setzen der entsprechenden Bits in dem zu diesem Statusregister gehörigen Setzregisters intena macht Interrupts der angegebenen Art möglich. Für die einzelnen Bits des Registers gelten folgende Zuordnungen: Bedeutung Bit Name SET/CLR INTEN 13 EXTER 12 DSKSYN 11 RBF 10 AUD3 09 AUD2 08 AUDI 07 AUDO 06 BLIT 05 VERTB 04 COPER 03 PORTS 02 SOFT 01 DSKBLK 00 TBE »set/clear control« (R/W) legt fest, ob das Schreiben einer 1 in ein Bit des Registers dieses löscht oder setzt. »master interrupt«: Sind Interrupts überhaupt erlaubt? Das Löschen dieses Bits desaktiviert sämtliche Interrupts. Externer Interrupt an Systempin INT6* liegt an. Wert in dsksyn ist gleich dskbytr-Datenbyte: DSKSYN-Interrupt. Empfangspuffer der seriellen Schnittstelle voll: RBF-Interrupt Audio-Kanal 3 ist fertig: Audio-Interrupt Nr.3 Audio-Kanal 2 ist fertig: Audio-Interrupt Nr.2 Audio-Kanal 1 ist fertig: Audio-Interrupt Nr. | Audio-Kanal 0 ist fertig: Audio-Interrupt Nr.O Der Blitter ist fertig: Blitter-Interrupt. Beginn des »vertical blanking«-Intervalls: VERTB-Interrupt. Ein vom Copper explizit ausgelöster Copper-Interrupt. Externer Interrupt von Ports oder Timer an Systempin INT2*. Ein von einem Programm ausgelöster Software-Interrupt. Die letzte Disk-DMA-Anfrage ist fertig: DSKBLK-Interrupt. Sendepuffer der seriellen Schnittstelle leer: TBE-Interrupt. intreqr 0x001E (30) Name: »interrupt request bits read« Chip: P, Zugriff: R* Funktion: Statusregister für Interrupt-Anforderungen, die von der CPU abgefragt werden (können). Nur wenn im intenar-Register die entsprechenden Interrupts aktiviert sind, ist die Auslösung des angeforderten Interrupts möglich. Für die einzelnen Bits des Registers gelten dieselben Zuordnungen wie beim »intenar«-Register. dskpt 0x0020 (32) Name: »disk pointer« Chip: A, Zugriff: W Funktion: DMA-Adreßzeiger für die Disk-DMA, der vom Copper oder der CPU vor der DMA-Aktivierung korrekt initialisiert werden muß. dskLen 0x0024 (36) Name: »disk length« Chip: P, Zugriff: W Funktion: Der Wert dieses Registers gibt die Länge des durch die Disk-DMA zu übertra- genden Datenblocks in Datenworten an und enthält darüber hinaus noch zwei DMA-Kontrollbits. Bei der tatsächlichen Durchführung des DMA-Auftrags wird der Längenwert so lange dekrementiert, bis er gleich null ist. Daraufhin erfolgt dann ein DSKBLK-Interrupt (siehe intenar). Für die einzelnen Bits des Registers gelten folgende Zuordnungen: Bedeutung 15 DMAEN »disk DMA enable«: Ist Disk-DMA überhaupt zu aktivieren? 14 WRITE gesetzt = Schreibmodus (Datentransfer vom RAM auf Diskette) gelöscht = Lesemodus (Datentransfer von Diskette ins RAM) 13 LENGTH Die Länge des durch Disk-DMA zu übertragenden Datenblocks 00 in Datenworten. dskdat 0x0026 (38) Name: »disk DMA data write« Chip: P, Zugriff: W Funktion: Siehe dskdatar. refptr 0x0028 (40) Name: »refresh pointer« Chip: A, Zugriff: (W) Funktion: Adreßgenerator (in Form eines Zählers) für die dynamische RAM-Auffrischung (engl. »refresh«). Das Register ist nur aus Testgründen beschreibbar, es sollte jedoch niemals von der CPU beschrieben werden! vposw 0x002A (42) Name: »vertical position (most significant bit&frame flop) write« Chip: A, Zugriff: W Funktion: Siehe vposr. I vhposw 0x002C (44) Name: . »vertical and horizontal position write« Chip: A, Zugriff: W Funktion: Siehe vhposr. II copcon 0x002E (46) Name: »copper control register« Chip: A, Zugriff: W Funktion: Der Wert dieses 1-Bit-Registers entscheidet darüber, ob der Copper auf die mit * gekennzeichneten Blitter-Register zugreifen kann oder nicht. Für das einzige Bit des Registers gilt folgende Zuordnung: Bedeutung »copper danger mode«: Nur wenn dieses Bit gesetzt ist, kann der Copper die Blitter-Hardware direkt manipulieren. serdat 0x0030 (48) Ä Name: »serial port data and stop bits write« Chip: P, Zugriff: W Funktion: Ausgaberegister für Datenbytes via serieller Schnittstelle (siehe auch serdatr). Die höherwertigen Bits 10 bis 15 des geschriebenen Werts sollten immer gleich null sein. Das explizit anzugebende Stopbit an Bitposition 9 oder 8 legt die tatsächliche Länge des (überlangen) Ausgabebytes fest. Die eigentlichen Daten- bits befinden sich in den Bits O bis 7 (oder 8). serper 0x0032 (50) Name: »serial port period and control« Chip: P, Zugriff: W Funktion: Kontrollregister für die Sende- und Empfangs-Baudrate sowie die Länge der empfangenen Datenbytes der seriellen Schnittstelle. Für die einzelnen Bits des Registers gelten folgende Zuordnungen: Bit Name Bedeutung 15 LONG gesetzt = Empfang überlanger 9-Bit-Datenbyte gelöscht = Empfang normaler 8-Bit-Datenbyte 14 e RATE Diese 15 Bit lange Ganzzahl gibt die Baudrate der Übertragung an: 00 Baudrate = (RATE+1)*0.0002794 [Baud] I potgo 0x0034 (52) Name: »potentiometer port data write and start« Chip: P, Zugriff: W Funktion: Kontrollregister für die 4 Bit breiten bidirektionalen /O-Ports von Paula. Die Bedeutung der einzelnen Bits des Registers sind unter potinp erklärt. joytest 0x0036 (54) Name: _ »mouse/joystick port counters test« Chip: D, Zugriff: W Funktion: Nach dem Schreibzugriff auf das Register werden alle vier Maus- bzw. Joystick- Positionszähler der Register potOdat und potldat gleichzeitig mit dem hier ein- getragenen Wert initialisiert. strequ 0x0038 (56) Name: »strobe for horizontal synchronization with VB and EQU« Chip: D, Zugriff: SW Funktion: Aktivierung der horizontalen Synchronisation der Zieladresse mit »vertical blanking« und EQU(???). strvbl 0x003A (58) Name: »strobe for horizontal synchronization with vertical blank« Chip: D, Zugriff: SW Funktion: Aktivierung der horizontalen Synchronisation der Zieladresse mit »vertical blanking«. strhor 0x003C (60) Name: »strobe for horizontal synchronization« Chip: DP, Zugriff: SW Funktion: Aktivierung der horizontalen Synchronisation Zieladresse. strlong 0x003E (62) Name: »strobe for identification of long horizontal line« Chip: D, Zugriff: SW Funktion: Identifikation langer Zeilen. bltconO 0x0040 (64) Name: »blitter control register O«Chip: A, Zugriff: W Funktion: Zusammenmitbltconl dient dieses Kontrollregister der vollständigen Steuerung des Blitters. Das LINE-Bit (Bit 0) von bltcon1 legt den grundsätzlichen Arbeits- modus fest (Flächen oder Linien). Für die einzelnen Bits des Registers gelten folgende Zuordnungen: Bedeutung im »Flächenmodus« (LINE-Bit = 0) Versatz für Quelle A (ASHO in Bit 12, ASH3 in Bit 15) Soll Quelle A überhaupt benutzt werden? Soll Quelle B überhaupt benutzt werden? Soll Quelle C überhaupt benutzt werden? Soll Zielbereich D überhaupt benutzt werden? Der Mintermwert zur Auswahl der während der Blitter-Operation vorzunehmenden logischen Verknüpfung der Quelldatenbits. Bedeutung im »Linienmodus« (LINE-Bit = 1) Horizontalversatz des Startpunkts der Linie (STARTI in Bit 12, START? in Bit 15) Der Mintermwert sollte mit Ox4A = 74 zur Auswahl der logischen Verknüpfung D := AC+ABC initialisiert werden. bltcon1 0x0042 (66) Name: Chip: Funktion: Bit Name 15 ” BSH 11 -/- ” -/- 05° -/- 04 EFE 03 IFE 02 FCI 01 DESC 00 0 »blitter control register 1« A, Zugriff: W Zusammen mit bltconO dient dieses Kontrollregister der vollständigen Steuerung des Blitters. Das LINE-Bit (Bit 0) von bltcon1 legt den grundsätzlichen Arbeits- modus fest (Flächen oder Linien). Für die einzelnen Bits des Registers gelten folgende Zuordnungen: Bedeutung im »Flächenmodus« (LINE-Bit = 0) Versatz für Quelle B (BSHO in Bit 12, BSH3 in Bit 15)12 Ist im exklusiven Füllmodus zu arbeiten? Ist im inklusiven (normalen!) Füllmodus zu arbeiten? Dieses Füllbit wird bei jeder 1 im Quellbereich getoggelt. gesetzt = absteigender Adreßmodus (bitxpt werden dekrementiert) gelöscht = zunehmender' Adreßmodus (bltxpt werden inkrementiert) Flächenmodus eingeschaltet TEXTURE Bedeutung im »Linienmodus« (LINE-Bit = 1) Versatz für Musterung der Linie, gemessen ab Startbit (TEXTUREO in Bit 12, TEXTURES in Bit 15) Bedeutung im »Linienmodus« (LINE-Bit = 1) TEXTURE Versatz für Musterung der Linie, gemessen ab Startbit (TEXTUREIO in Bit 12, TEXTURB3 in Bit 15) Vorzeichenflags »sometimes up or down« »sometimes up or left« »always up or left« »single bit line«: Ein besonderer Zeichenmodus für Linien, die für das automatische Flächenfüllen durch den Blitter benötigt werden. Diese Linien sind überall genau einen Pixel breit. Linienmodus eingeschaltet Zusatzbemerkung: Die 3 Bits AUL, SUL und SUD legen den Oktanten fürs Zeichnen im Linienmodus gemäß der folgenden Zuordnungstabelle fest: a ED ee ID SION PP wDnD oO oO ee DD oO OO km m m Der Linienmodus des Blitters: Im Linienmodus ändert sich die Bedeutung mehrerer Blitter-Register gemäß der folgenden Belegungstabelle: Register Bits Bitname Wert Bedeutung im Linienmodus (LINE-Bit = 1) bltconO 15-12 START Horizontalversatz für Linienstartpunkt 11-08 USE 1011 (fürs Zeichnen von Linien vorgegeben!) bltconl 15-12 BSH Versatz des Linienmusters 5 Reserviert für den Systemgebrauch! 04-02 Codewert zur Auswahl des Oktanten (s.o.) 1 Kontrollbit für den 1-Pixel-Linienmodus Register Bitname Wert Bedeutung im Linienmodus (LINE-Bit = 1) LINE 1 Aktivierungsbit für Linienmodus bltadat 0x8000 Fürs Linienzeichnen benötigter Indexwert bitbdat Linienmuster fürs Zeichnen bitsize Länge der Linie in Pixeln (max. 1024) (fürs Zeichnen von Linien vorgegeben!) bltamod (dto.) bltbmod (dto.) bltbmod Breite des Basis-Displayelements bltbmod Breite des Basis-Displayelements bltapt (fürs Zeichnen von Linien vorgegeben!) bltapt Adresse des Startpunkts der Linie bltapt Adresse des Startpunkts der Linie (Hierbei stellt X die Breite und Y die Höhe des kleinsten Rechtecks dar, das die Linie gerade noch umfaßt!) I bitafwm 0x0044 (68) Name: »blitter first word mask for source A« Chip: A, Zugriff: W Funktion: Der Wert dieser Maske wird mit dem ersten Datenwort aus Quelle A durch ein logisches UND verknüpft. Auf diese Weise können beliebige Bits des ersten Datenworts der Quelle A bewußt ausgeblendet werden. I] bltalwm 0x0046 (70) Name: »blitter last word mask for source A« Chip: A, Zugriff: W Funktion: Der Wert dieser Maske wird mit dem letzten Datenwort aus Quelle A durch ein logisches UND verknüpft. Auf diese Weise können beliebige Bits des letzten Datenworts der Quelle A bewußt ausgeblendet werden. I bitcpt 0x0048 (72) Name: »blitter pointer to source C« Chip: A, Zugriff: W Funktion: Das gleiche wie bltcpt, bezogen auf Quelle C (siehe auch bltcon1 zur Bedeutung des Registers im Linienmodus). I bitbpt 0x004B (76) Name: »blitter pointer to source B« Chip: A, Zugriff: W Funktion: DMA-Adreßzeiger für Quelle B bei Durchführung einer DMA-Operation des Blitters. Dieser Adreßzeiger muß vor dem Start der Blitter-Operation mit der Anfangsadresse des zu bearbeitenden Speicherbereichs initialisiert werden. bltapt 0x0050 (80) Name: »blitter pointer to source A« Chip: A, Zugriff: W Funktion: Das gleiche wie bltcpt, bezogen auf Quelle A (siehe auch bltcon! zur Bedeutung des Registers im Linienmodus). bitdpt 0x0054 (84) Name: »blitter pointer to destination D« Chip: A, Zugriff: W Funktion: Das gleiche wie bitcpt, bezogen auf Zielbereich D (siehe auch bltcon! zur Bedeutung des Registers im Linienmodus). bltsize 0x0058 (88) Name: »blitter start and size« Chip: A, Zugriff: W Funktion: Der Wert der Bits 15 bis 6 namens H9-HO des Registers legen die vertikale Ausdehnung = Höhe der Blitter-Operation fest, der Wert der Bits 5 bis 0, genannt W5-W0, dagegen die horizontale Ausdehnung = Breite (siehe auch bltcon1 zur Bedeutung des Registers im Linienmodus). Da ein Schreibzugriff auf dieses Register den Blitter automatisch startet, sollten hier die Dimensionswerte erst dann eingetragen werden, wenn alle übrigen Blitter-Register korrekt initialisiert sind. pad2d 0x005A (90) Nicht belegte Adressen im Registerbereich. bltcemod 0x0060 (96) Name: »blitter modulo for source C« Chip: A, Zugriff: W Funktion: Moduloregister für Quelle C, dessen Wert am Ende jeder bearbeiteten Datenzeile der Quelle C zu ihrem Adreßzeiger bltcpt hinzugezählt wird (siehe auch bltcon] zur Bedeutung des Registers im Linienmodus). bltbmod 0x0062 (98) Name: »blitter modulo for source B« Chip: A, Zugriff: W Funktion: Das gleiche wie bltcmod, bezogen auf Quelle B (siehe auch bltcon] zur Bedeu- tung des Registers im Linienmodus). biltamod 0x0064 (100) Name: »blitter modulo for source A« Chip: A, Zugriff: W Funktion: Das gleiche wie bltcmod, bezogen auf Quelle A (siehe auch bltcon! zur Bedeu- tung des Registers im Linienmodus). bltdmod 0x0066 (102) Name: »blitter modulo for destination D« Chip: A, Zugriff: W Funktion: Das gleiche wie bltcmod, bezogen auf den Zielbereich D (siehe auch bltcon! zur Bedeutung des Registers im Linienmodus). pad34 0x0068 (104) Nicht belegte Adressen im Registerbereich. bltcdat 0x0070 (112) Name: »blitter source C data« Chip: A, Zugriff: W Funktion: Das Dateneingangsregister des Blitters für Quelle C, das üblicherweise durch die Blitter-DMA mit Datenworten versorgt wird. Allerdings besteht ebenfalls die Möglichkeit, dieses Register mittels der CPU zu beschreiben, um es mit einem speziellen Wert zu belegen. bitbdat 0x0072 (114) Name: »blitter source B data« Chip: A, Zugriff: W Funktion: Das gleiche wie bltcdat, bezogen auf Quelle B (siehe auch bltcon] zur Bedeutung des Registers im Linienmodus). bltadat 0x0074 (116) Name: »blitter source A data« Chip: A, Zugriff: W Funktion: Das gleiche wie bltcdat, bezogen auf Quelle B (siehe auch bltcon] zur Bedeutung des Registers im Linienmodus). pad3b 0x0076 (118) Nicht belegte Adressen im Registerbereich. dsksync 0x007E (126) Name: »disk read synchronization« Chip: P, Zugriff: W Funktion: Der in diesem Register enthaltene Wert dient als Übereinstimmungscode zur Lesesynchronisation des Laufwerks (siehe auch Bit 10 von adkcon). coplic 0x0080 (128) Name: »copper first location register« Chip: A, Zugriff: W Funktion: In diesem Register steht die Adresse, die der Copper anspringt, falls der Strobe copjmpl beschrieben wird. cop2lc 0x0084 (124) Name: »copper second location register« Chip: A, Zugriff: W Funktion: In diesem Register steht die Adresse, die der Copper anspringt, falls der Strobe copjmp2 beschrieben wird. copjmpi1 0x0088 (136) Name: »copper restart at first location« Chip: A, Zugriff: SW Funktion: Ein Schreibzugriff auf diesen Strobe veranlaßt den Copper zu einem indirekten Sprung, wobei die Sprungadresse dem Register copllc entnommen wird. Da auch der Copper selbst den Strobe beschreiben kann, ermöglicht dies echte Sprünge durch den Copper. copjmp2 0x008A (138) Name: Chip: Funktion: »copper restart at second location« A, Zugriff: SW Das gleiche wie copjmp]1, bezogen auf einen indirekten Sprung per cop2lc. copins 0x008C (140) Name: Chip: Funktion: »copper instruction fetch identify« A, Zugriff: W Eine Dummy-Adresse, die immer dann vom Copper erzeugt wird, wenn er selbst einen neuen Befehl in sein Instruktionsregister lädt. diwstrt 0x008E (142) Name: Chip: Funktion: »display window start (upper left)« A, Zugriff: W Dieses Register enthält die Position der linken oberen Ecke des sichtbaren Displaybereichs (auch Displayfenster genannt), wobei das hochwertige Byte mit Namen VSTART die y-Koordinate und das niederwertige Byte HSTART die x-Koordinate darstellt. Normalerweise ist in diwstrt der Wert0x2C81 = 11393 zu finden. diwstop 0x0090 (144) Name: Chip: Funktion: »display window stop (lower right)« A, Zugriff: W Dieses Register enthält den Positionswert der rechten unteren Ecke des sichtba- ren Displaybereichs (auch Displayfenster genannt), wobei das hochwertige Byte mit Namen VSTOP die y-Koordinate und das niederwertige Byte HASTOP die x-Koordinate darstellt. Normalerweise ist in diwstop der Wert OxF4C1 = 62657 zu finden. ddfstrt 0x0092 (146) Name: Chip: Funktion: »display data fetch start (horizontal position)« A, Zugriff: W Dieses Register enthält den Positionswert des linken Startpunkts der nächsten Displayzeile. Die Auflösung beträgt dabei genau 4 Pixel, so daß ein Positions- wert von 4 dem Pixel 16 entspricht. Im Low-Resolution-Modus ist für ddfstrt der Wert 0x0038 = 56 üblich, im High-Resolution-Modus dagegen 0x003C = 60. ddfstop 0x0094 (148) Name: Chip: Funktion: »display data fetch stop (horizontal position)« A, Zugriff: W Dieses Register enthält den Positionswert des rechten Endpunkts der nächsten Displayzeile. Die Auflösung beträgt dabei genau 4 Pixel, so daß ein Positions- wert von 100 dem Pixel 400 entspricht. Im Low-Resolution-Modus ist für ddfstop der Wert 0x00D0 = 208 üblich, im High-Resolution-Modus dagegen 0x00D4 = 212. Zwischen den beiden Registern dafstrt und ddfstop besteht folgender allgemeiner Zusammenhang: ddfstrt = ddfstop — 8*( Wortanzahl - 1 ) (im Low-Resolution Modus) ddfstrt = ddfstop — 4*( Wortanzahl - 2 ) (im High-Resolution Modus) Mit Wortanzahl ist dabei die Anzahl von Displaydatenworten pro Zeile gemeint. 1 dmacon 0x0096 (150) Name: »DMA control write (clear or set)« Chip: ADP, Zugriff: W Funktion: Kontrollregister zu dmaconr. I cIxcon 0x0098 (152) Name: »collision control« Chip: D, Zugriff: W Funktion: Die Werte der einzelnen Bits dieses Kontrollregisters entscheiden darüber, welche Bitplanes in welchem Zustand in die Kollisionserkennung mit einbezo- gen werden. Darüber hinaus steuern die vier hochwertigen Bits die Kollisions- erkennung für ungerade Sprites. Für die einzelnen Bits des Registers gelten folgende Zuordnungen: Bedeutung Ist Kollisionserkennung für Sprite 7 durchzuführen? Ist Kollisionserkennung für Sprite 5 durchzuführen? Ist Kollisionserkennung für Sprite 3 durchzuführen? Ist Kollisionserkennung für Sprite 1 durchzuführen? Ist Kollisionserkennung für Bitplane 6 durchzuführen? Ist Kollisionserkennung für Bitplane 5 durchzuführen? Ist Kollisionserkennung für Bitplane 4 durchzuführen? Ist Kollisionserkennung für Bitplane 3 durchzuführen? Ist Kollisionserkennung für Bitplane 2 durchzuführen? Ist Kollisionserkennung für Bitplane 1 durchzuführen? Match-Bit der Kollisionserkennung für Bitplane 6 Match-Bit der Kollisionserkennung für Bitplane 5 Match-Bit der Kollisionserkennung für Bitplane 4 Match-Bit der Kollisionserkennung für Bitplane 3 Match-Bit der Kollisionserkennung für Bitplane 2 Match-Bit der Kollisionserkennung für Bitplane 1 Beim Gebrauch der ENSPx-Bits ist zu beachten, daß die Sprites 0, 2, 4, 6 (mit geraden Nummern!) immer in die Kollisionserkennung mit einbezogen werden. Deshalb ergibt sich der endgültige Kollisionswert jeder Sprite-Gruppe aus einer logischen ODER-Verknüpfung der erkannten Kollisionen der zugehörigen geraden und ungeraden Sprites. Der Wert der Match-Bits MVBPx legt die nötige »Polarität« der Bitkombination einer Kollision mit der entsprechenden Bitplane fest. Diese Polarität benötigt man, um Kollisionen nur mit Bereichen bestimm- ter Farben handhaben zu können. Wichtig ist außerdem, daß im Fall einer Desaktivierung aller ENBPx- Bits sämtliche Bitplane-Kollisionen registriert werden. DJ intena 0x009A (154) Name: »interrupt enable bits (clear or set)« Chip: P, Zugriff: W Funktion: Kontrollregister zu Siehe intenar. intreq 0x009C (156) Name: »interrupt request bits (clear or set)« Chip: P, Zugriff: W Funktion: Kontrollregister zu Siehe intregr. adkcon 0x009E (158) Name: »audio and disk control write« Chip: P, Zugriff: W Funktion: Kontrollregister zu Siehe adkconr. aud 0x00A0 (160) Diese Komponente stellt kein echtes Hardware-Register dar. Vielmehr bezeichnet sie lediglich die Basisadresse eines Feldes von vier AudChannel-Datenstrukturen (Länge: 16 Byte), die die eigent- lichen Register der einzelnen Audio-Kanäle 0 bis 3 enthalten. Die Offsets der nachfolgend aufgeli- steten AudChhannel-Komponenten gelten dabei immer relativ zur Basisadresse eines Audio-Kanals. Für Audio-Kanal k ergibt sich diese Basisadresse gemäß 0x00A0O+k*0x0010 = 160+16*K. >> ac_ptr ++ 0x0000 (0) Name: »audio channel x location« (AUDxLCH) Chip: A, Zugriff: W Funktion: DMA-Adreßzeiger auf den Speicherbereich im Chip-RAM, der die vom betref- fenden Audio-Kanal abzuspielenden Audio-Daten enthält. Da dieser Zeiger beim Abspielen der Audio-Daten nicht verändert wird, muß er nur ein einziges Mal korrekt initialisiert werden. >> ac_len ++ 0x0004 (4) Name: »audio channel x length« (AUDXxLEN) Chip: P, Zugriff: W Funktion: Der Wert dieses Registers entspricht der Länge der vom betreffenden Audio- Kanal abzuspielenden Audio-Daten in Speicherworten. >> ac_per ++ 0x0006 (6) | Name: »audio channel x period« (AUDxPER) Chip: P, Zugriff: W Funktion: Der Registerwert legt die Frequenz (Rate) des DMA-Datentransfers für den betreffenden Audio-Kanal fest. Die minimale Rate beträgt hier 124 Taktzyklen, was einer maximalen Sampling-Frequenz von 28.86 KHz entspricht. >> ac_vol ++ 0x0008 (8) Name: »audio channel x volume« (AUDxVOL) Chip: P, Zugriff: W Funktion: Der Lautstärkewert für den betreffenden Audio-Kanal, dessen Bits 0 bis 6 insgesamt 65 verschiedene, linear ansteigende Lautstärkestufen festlegen. Für die einzelnen Bits des Registers gelten folgende Zuordnungen: Bedeutung (nicht benutzt!) gesetzt = maximale Lautstärke (entspricht 64 Einsen ohne Nullen!) Dieser Wert legt eine von 64 Lautstärkestufen fest: 000000 = keine Ausgabe, 111111 = 63 Einsen und eine Null >>ac_dat ++ 0x000A (10) Name: Chip: Funktion: »audio channel x data« (AUDxDAT) P, Zugriff: W Der DMA-Datenpuffer des betreffenden Audio-Kanals, der die nächsten beiden, nacheinander auszugebenden Audio-Ausgabebytes im Zweierkomplement ent- hält. Normalerweise werden die Audio-Daten durch die Audio-DMA aus dem Chip-RAM in dieses Pufferregister geholt. Aber auch die CPU selbst kann hier Audio-Daten direkt ablegen. >> ac_pad ++ 0x000C (12) Nicht belegte Adressen im Registerbereich. bplpt 0x00E0 (224) Name: Chip: Funktion: »bitplane x pointer« (BPLxPTH) A, Zugriff: W Ein Feld von sechs DMA-Adreßzeigern für die Displaydaten der einzelnen Bitplanes. Da diese Zeiger beim Aufbau des Ausgabebildes durch die Display- hardware andauernd inkrementiert werden, müssen sie während jedes »vertical blanking« -Intervalls vom Copper oder der CPU neu initialisiert werden. pad7c 0x00F8 (248) Nicht belegte Adressen im Registerbereich. bpicon0 0x0100 (256) Name: Chip: Funktion: Bit Name 15 HIRES 14 & BPU 12 »bitplane control register 0 (misc. control bits)« AD, Zugriff: W Die drei bplconx-Register steuern die Benutzung und Funktionsweise der Bitpla- nes sowie anderer Aspekte der Display-Hardware. Dieses Register ist dabei für die Auflösung des Displays und eventuell angeschlossene Display-Peripherie zuständig. Für die einzelnen Bits des Registers gelten folgende Zuordnungen: Bedeutung Ist High-Resolution-Modus einzuschalten? »bitplane use code«: Dieser 3-Bit-Wert aus dem Bereich 000 bis 110 gibt die Anzahl der momentan zu benutzenden Bitplanes an. Bedeutung Ist Hold-And-Modify-Modus einzuschalten? Ist Dual-Playfield-Modus einzuschalten? Ist der Composite-Video Farbausgang zu aktivieren? »genlock audio enable«: Ist Audio-Genlock zu aktivieren? (Dann wird dieses während des »vertical blanking« -Intervalls auf dem BKGND-Pin gemultiplext.) Ist der angeschlossene Lightpen zu aktivieren? Ist Interlace-Modus einzuschalten? Ist Resynchronisation extern durchzuführen? (Dabei werden die 7SYNC- und VSYNC-Pads zu Eingabekanälen.) I bpliconl 0x0102 (258) Name: »bitplane control register 1 (horizontal scroll control)« Chip: D, Zugriff: W Funktion: Dieses Register ist für die horizontalen Scroll-Werte der Playfields zuständig (siehe auch bplconO). Für die einzelnen Bits des Registers gelten folgende Zuordnungen: Bedeutung Dieser 4 Bit umfassende Wert (Bit 7 = PF2H3, PF2HO = Bit 4) legt den horizontalen Scroll-Code für Playfield 2 fest. Dieser 4 Bit umfassende Wert (Bit 3= PFIAH3, PFIHO =BitO) legt den horizontalen Scroll-Code für Playfield 1 fest. U bplcon2 0x0104 (260) Name: »bitplane control register 2 (video priority control)« Chip: D, Zugriff: W Funktion: Das letzte der drei bplconx-Register dient der Kontrolle der Video-Prioritäten der einzelnen Displayelemente untereinander. Für die einzelnen Bits des Registers gelten folgende Zuordnungen: Bedeutung gesetzt = Playfield 2 erscheint vor Playfield 1, gelöscht = Playfield 1 erscheint vor Playfield 2 Dieser Wert aus dem Bereich 000 bis 100 legt die relativen Video-Prioritäten zwischen Playfield 2 und Sprite-Gruppen fest. Dieser Wert aus dem Bereich 000 bis 100 legt die relativen Video-Prioritäten zwischen Playfield 1 und Sprite-Gruppen fest. Die PFxP-Werte der obigen Aufstellung haben dabei folgende Wirkung auf die Video-Prioritäten zwischen Playfield x (genannt PFx) und den vier Spritegruppen 0-1, 2-3, 4-5 und 6-7 (genannt SPyz): PFxP Lage des Playfields x und der Sprite-Gruppen zueinander PFx >SPOl >SP23 >SP45 > SP67001 SPOlL>PFx > SP23 > SP45 > SP67 SPO1 >SP23 >PFx >SP45 > SP67 SPO1 >SP23 >SP45 >PFx >SP67 SPO1 >SP23 >SP45 >SP67 >PFx I pad83 0x0106 (262) Nicht belegte Adressen im Registerbereich. } bpllmod 0x0108 (264) Name: »bitplane modulo 1 (odd planes)« Chip: A, Zugriff: W Funktion: Dieses Register enthält den Modulo-Wert aller Bitplanes mit ungeraden Num- mern. Ein Modulo-Wert ist dabei nichts anderes als der Offset in Speicherworten zwischen dem Ende einer Zeile und dem Anfang der nächsten innerhalb des Displayspeichers. I bpl2mod 0x010A (266) Name: »bitplane modulo 2 (even planes)« Chip: A, Zugriff: W Funktion: Der in diesem Register enthaltene Modulo-Wert gilt nur für die Bitplanes mit geraden Nummern (siehe auch bplimod). Da die geraden und ungeraden Bitpla- nes eigene Modulo-Register besitzen, können ihre Größen durchaus unterschied- lich sein (und auch von der Größe des Displayausschnitts abweichen!). I pad86 0x010C (268) Nicht belegte Adressen im Registerbereich. bpldat 0x0110 (272) Name: »bitplane x data (parallel-to-serial convert)« (BPLxDAT) Chip: D, Zugriff: W Funktion: Ein Feld von sechs Pufferregistern, in die üblicherweise von der Bitplane-DMA die nächsten, aus dem Chip-RAM geholten Ausgabedaten hineingeschrieben werden. Aber auch die CPU selbst kann diese Register direkt beschreiben. pad8e 0x011C (284) Nicht belegte Adressen im Registerbereich. sprpt 0x0120 (288) Name: »sprite x pointer« (SPRxPTH) Chip: A, Zugriff: W Funktion: Ein Feld von acht DMA-Adreßzeigern für die Displaydaten der Sprite-DMA. Diese Adreßzeiger müssen während jedes »vertical blanking«-Intervalls vom Copper oder der CPU wieder korrekt initialisiert werden. spr 0x0142 (320) Diese Komponente stellt kein echtes Hardware-Register dar. Vielmehr bezeichnet sie lediglich die Basisadresse eines Feldes von acht Sprite-Def-Datenstrukturen (Länge: 8 Byte), die die eigentlichen Register der einzelnen Sprite-Kanäle O bis 7 enthalten. >> pos ++ 0x0000 (0) Name: »sprite x vert.-horiz. start position data« (SPRxPOS) Chip: AD, Zugriff: W Funktion: Dieses Positionsregister enthält Teile der Koordinaten der Position des betreffen- den Sprites. Für die einzelnen Bits des Registers gelten folgende Zuordnungen: Bedeutung VSTARTL Diese 8 Bit stellen das niederwertige Byte der y-Koordinate der Position der linken oberen Ecke des betreffenden Sprites dar. HSTARTH Diese 8 Bit stellen das höherwertige Byte der x-Koordinate der Position der linken oberen Ecke des betreffenden Sprites dar. [J >>ctli ++ 0x0002 (2) Name: »sprite x vert. stop position and control data« (SPRxCTL) Chip: AD, Zugriff: W Funktion: Das ist das eigentliche Kontrollregister des betreffenden Sprite-Kanals, das neben den fehlenden ASTART- und VSTART-Bits (siehe auch pos) noch den vertikalen Positionswert der rechten unteren Ecke des Sprites sowie das ATT-Bit zur Steuerung des Sprite-Attachements enthält. Für die einzelnen Bits des Registers gelten folgende Zuordnungen: Bedeutung VSTOPL fe VSTARTH VSTOPH HSTARTL Diese 8 Bit stellen das niederwertige Byte der y-Koordinate der Position der rechten unteren Ecke des betreffenden Sprites dar. Gilt für diesen Sprite-Kanal ein Sprite-Attachement mit dem vorangehenden (nur für ungerade Sprite-Kanäle relevant)? Das ist das hochwertige Bit 8 der VSTART-Koordinate (siehe pos). Das ist das hochwertige Bit 8 der VSTOP-Koordinate. Das ist das niederwertige Bit 0 der ASTART-Koordinate (siehe pos). Die tatsächliche Höhe des dem betreffenden Sprite-Kanal zugeordneten Sprites in Low-Resolution Pixeln ergibt sich gemäß VSTART-VSTOP+1. 1 >> dataa ++ 0x0004 (4) Name: Chip: Funktion: »sprite x image data register A« (SPRxDATA) D, Zugriff: W In diesem DMA-Pufferregister werden üblicherweise von der Sprite-DMA aus dem Chip-RAM gelesene Image-Daten abgelegt, bevor sie von der Display- Hardware auf den Monitor gebracht werden. Aber auch die CPU selbst kann dieses Register direkt beschreiben. Ein Schreibzugriff auf dataa (durch die CPU oder den Copper) führt dabei zur Aktivierung des manuellen Sprite-Modus, in dem die Image-Daten aus den datax-Registern in jeder Zeile an der HSTART- Position ausgegeben werden. Durch einen nachfolgenden Schreibzugriff auf ctl können Sie den manuellen Sprite-Modus wieder desaktivieren. 1 >> datab ++ 0x0006 (6) Name: Chip: Funktion: »sprite x image data register B« (SPRxDATB) D, Zugriff: W Wie dataa, allerdings hat ein Schreibzugriff auf dieses Register keinen Einfluß auf den Sprite-Modus. 1 color 0x0180 (384) Name: Chip: Funktion: »color table x« (COLOR«xx) D, Zugriff: W Dieses Feld von 32 (Farb-)Registern wird üblicherweise als Farbpalette bezeich- net, aus der jeweils ein Farbregister durch den bpldat-Wert zur Pixeldarstellung ausgewählt wird. Die durch den Inhalt eines Farbregisters beschriebene Farbe setzt sich aus einer Mischung der drei Grundfarben Rot, Grün und Blau zusam- men. Für jede Grundfarbe können 16 verschiedene Anteilswerte ausgewählt werden, so daß die in den Registern enthaltenen Farbwerte dem Format OxORGB entsprechen. (Hierbei stehen R, G, B als Platzhalter für Hexadezimalziffern!) 7.4 Die Resources-Library Die Resources dienen zur Koordinierung des Zugriffs verschiedener Multitasking-Komponenten auf die Hardware. DiscResource C (resources/disc.h) struct DiscResource Assembler Datenstrukturenreferenz Routinenreferenz > Beschreibung struct Library dr_Library; struct DiscResourceUnit *dr Current; UBYTE dı_Flags; UBYTE dr_pad; struct Library *dr_SysLib; struct Library *dr CiaResource; ULONG dr_UnitID[4]; struct List dr_Waiting; struct Interrupt dr_DiscBlock; struct Interrupt dr_DiscSync; struct Interrupt dr_Index; |: Präfix: Syntax: Keine. »Exec«: »Resources«: Modula-2 (Resources) DiscResource = RECORD library:Library; current:DiscResourceUnitPtr; flags:DiscResourceFlagSet; pad:UByte; sysLib:LibraryPtr; ciaResource:LibraryPtr; unitID: ARRAY [0..3] OF LONGCARD; waiting:List; discBlock:Interrupt; discSync:Interrupt; index :Interrupt; END; DR_ Definition der Parameter in Versalien. Der Parameter dr_Library ist nicht definiert. AddResource, OpenResource, Rem Resource. AllocUnit, FreeUnit, GetUnit, GetUnitld, GiveUnit. Diese Datenstruktur dient dazu, den Zugriff verschiedener Tasks auf die Laufwerke zu koordinieren. Sie wird in die Resource-Liste der ExecBase-Datenstruktur aufgenommen. I dr_Library 0x0000 (0) 4 dr_DiscResourceUnit 0x0022 (34) I dr_Flags 0x0026 (38) I dr_Pad 0x0027 (39) I dr_SysLib 0x0028 (40) U dr_CiaResource 0x002C (44) „1 dr_UnitID 0x0030 (48) 4 dr_Waiting 0x0040 (64) ÜJ dr_DiscBlock 0x004E (78) 1 dr_DiscSync 0x0064 (100) 4 dr_Index 0x007A (122) DiscResourceUhnit C (resources/disc.h) Modula-2 (Resources) C Modula-2 Hex Beschreibung DRB_ALLOCO allocO 01 Unit ist alloziert. DRB ALLOC] allocl 02 Unit 1 ist alloziert. DRB_ALLOC2 alloc2 04 Unit2 ist alloziert. DRB _ALLOC3 alloc3 08 Unit 3 ist alloziert. DRB_ACTIVE active 10 Die aktuelle Unit ist gerade im Betrieb. Eine eingebundene Library-Datenstruktur, die die Resour- ces-Library in das System einbindet. Ein Adreßzeiger auf die DiscResourceUnit-Datenstruktur des aktuellen Laufwerks. Folgende Flags geben an, welche Units als verfügbare Dis- kresources allokiert sind (in Modula-2 sind die Werte aus DiscResourceFlagset): Ein relativ unbedeutendes Füllbyte. Manchmal ist dies ein Adreßzeiger auf die ExecBase-Daten- struktur. 772 Ein Feld von vier LONG-Werten, in denen die ID‘s der Units 0 bis 3 stehen. 227 Eine eingebundene /nterrupt-Datenstruktur, die den Inter- rupt-Server des Diskblock-Interrupts beschreibt. Eine eingebundene /nterrupt-Datenstruktur, die den Inter- rupt-Server des Disksync (wird durch Finden der Sync- Markierung ausgelöst) beschreibt. Eine eingebundene /nterrupt-Datenstruktur, die den Inter- rupt-Server des Diskindex (wird durch Finden der Index- Markierung ausgelöst) beschreibt. struct DiscResourceUnit DiscResourceUnit = | RECORD struct Message dru_Message; message:Message; On C (resources/disc.h) Modula-2 (Resources) IF Assembler struct Interrupt dru_DiscBlock; discBlock:Interrupt; struct Interrupt dru_DiscSync; discSync:Interrupt; struct Interrupt dru_Index; index:Interrupt ; END; Syntax: DiscResourceUnit —> DISC- RESOUR CEUNIT Der Parameter dru_Message ist nicht definiert. »Resources«: DiscResource. Datenstrukturenreferenz Routinenreferenz ____> Beschreibung Keine. Diese Datenstruktur beschreibt ein einzelnes Laufwerk. Sie wird in die Liste der Units der DiscResource- Datenstruktur eingetragen. 1 dru_Message 0x0000 (0) I dru_DiscBlock 0x0014 (20) 1 dru_DiscSync 0x002A (42) 1 dru_Index 0x0040 (64) MiscResource Eine eingebundene Message-Datenstruktur. So kann eine DiscResourceUnit-Datenstruktur an einen anderen Task geschickt werden. Eine eingebundene /nterrupt-Datenstruktur, die den Inter- rupt-Server des Diskblock-Interrupts, beschreibt. Eine eingebundene /nterrupt-Datenstruktur, die den Inter- rupt-Server des Disksync (wird durch Finden der Sync- Markierung ausgelöst) beschreibt. Eine eingebundene /nterrupt-Datenstruktur, die den Inter- rupt-Server des Diskindex (wird durch Finden der Index- Markierung ausgelöst) beschreibt. struct MiscResource MiscResource = C (resources/misc.h) Modula-2 (Resources) | RECORD struct Library mr_Library; library: Library; ULONG mr_AllocArray[4]; allocArray: ARRAY [0..3] OF ADDRESS; END; h Assembler Der Parameter mr_Library ist nicht definiert. Datenstrukturenreferenz Keine. Routinenreferenz »Resources«: AllocMiscResource, FreeMiscResource. Beschreibung Diese Datenstruktur dient dazu, den Zugriff des Multitasking auf eine beliebige Hardware-Resource zu koordinieren. 4} mr_Library 0x0000 (0) Eine eingebundene Library-Datenstruktur, die die Resour- ces-Library in das System einbindet. U mr_AllocArray 0x0022 (34) Hier stehen Adreßzeiger auf die Resource-spezifischen Zusatzinformationen. 7.5 Die Workbench-Library In dieser Library werden einige Datenstrukturen definiert, die die Verwaltung der Workbench unter- stützen. DiskObject C (workbench/workbench.h) Modula-2 (Workbench) struct DiskObject DiskObject = RECORD Datenstrukturreferenz Routinenreferenz ; UWORD do_Magic; UWORD do_ Version; magic:CARDINAL; version: CARDINAL; struct Gadget do_Gadget; gadget:Gadget; UBYTE do_Type; type:WBObjectType; char *do_DefaultTool; defaultTool: ADDRESS; char ** do_ToolTypes; toolTypes: ADDRESS; LONG do_CurrentX; currentX:LONGINT; LONG do_Current\Y; currentY:LONGINT; struct DrawerData *do_DrawerData; char *do_ToolWindow; LONG do_StackSize; Keine. »Icon«: drawerData:DrawerDataP!tr; toolWindow:ADDRESS; stackSize:LONGINT END; FreeDiskObject, GetDiskObject, Getlcon, PutDiskObject, Putlcon. Die DiskObject-Datenstruktur wird von den »Icon«-Routinen zur Speicherung eines Icons auf externen Speichermedien in Form einer ».info«-Datei verwendet. Neben dem kompletten Icon-Gadget sind in der DiskObject-Datenstruktur noch das Tooltype-Feld, die Stackgröße, das »default tool« sowie die gewünschte Position des Icon-Gadgets auf dem Bildschirm und ggf. die Position und Ausmaße des zu öffnenden Verzeichnisfensters vorhanden. I do_Magic 0x0000 (0) „ do_Version 0x0002 (2) „J do_Gadget 0x0004 (4) „1 do_Type 0x0030 (48) Eine positive Ganzzahl, die der Identifikation einer extern gespeicherten Icon-Datei durch die »Icon«-Routinen Get- DiskObject und GertWBObject dient. Gültige Icon-Dateien enthalten an dieser Stelle den Wert WB_DISKMAGIC (C) = 0xE310 = 58128 = diskMagic (Modula-2). Eine positive Ganzzahl, deren Wert die (Workbench-)Ver- sionsnummer der Icon-Datei angibt. Um aufwärtskompati- bel zu bleiben, sollte hier der Wert WB_DISKVERSION (C) =0x0001 =1=diskVersion (Modula-2) eingetragen werden. Die »Icon«-Routinen setzen die richtige Versionsnummer automatisch! Eine vollständige Gadget-Datenstruktur (siehe »Intuition«), die das Icon-Gadget beschreibt, so wie es auf der Arbeitsflä- che der Workbench erscheint. Bisher sind für Icon-Gadgets nur Boolean-Gadgets des Typs GADGIMAGE erlaubt, deren PlanePick-Wert gleich 3 sein muß und die lediglich REL- VERIFY sowie GADGIMMEDIATE als Aktivierungsflags gesetzt haben sollten. Eine 2-Byte-Marke, deren einzelne Bits festlegen, um wel- chen Typ von Icon es sich tatsächlich handelt. Zur Benut- zung sind die folgenden Werte vordefiniert: C Modula-2 WBDISK disk WBDRAWER drawer WBTOOL tool WBPROJECT project WBGARBAGE garbage WBDEVICE device WBKICK kick Hex 0001 0002 0003 0004 0005 0006 0007 Dez Bedeutung Es ist das Root-Verzeichnis einer Disk. Es ist ein Verzeichnis auf Diskette. Es ist ein direkt ausführbares Programm. Es ist irgendeine Datendatei. Es ist das Trashcan-Verzeichnis. Es ist ein (logisches) Gerät. Es ist keine Amiga-DOS-Diskette. Sat PP wnD Wichtig: In Modula-2 ist hier der Aufzählungstyp WBObjectType zu benutzen. 5 do_DefaultTool 0x0032 (50) Ein Adreßzeiger auf eine C-Zeichenkette, die den Namen des Programms enthält, das beim Anklicken des Icons auto- matisch zur Bearbeitung der ausgewählten Datei gestartet werden soll. Dieser Adreßzeiger ist nur für Icons vom Typ WBPROJECT und WBDISK von Bedeutung! Bei WBDISK- I do _TooITypes 0x0036 (54) I do_CurrentX 0x003A (58) 4 do_CurrentY 0x003E (62) J do_DrawerData 0x0042 (66) I do_ToolWindow 0x0046 (70) J do _StackSize 0x004A (74) Icons steht hier der Name des Kopierprogramms, das benutzt wird, falls die Diskette als Quelldiskette einer Duplikations- operation auftritt. Ein Adreßzeiger auf ein Feld von Adreßzeigern auf C- Zeichenketten, deren Format frei gewählt werden kann. Dieses Tooltype-Feld dient der Übergabe von Status- und Umgebungsinformationen an ein Programm, das von der Workbench aus gestartet wurde. Eine lange Ganzzahl, deren Wert die x-Koordinate festlegt, an der das Icon-Gadget auf dem Bildschirm erscheinen soll. Diese wird relativ zur linken oberen Ecke des Fensters gemessen, das dem Verzeichnis zugeordnet ist, welches das Icon enthält. Durch Angabe des Werts NO ICON - POSITION (C) = 0x80000000 = MIN(LONGINT) = nolcon- Position (Modula-2) sowohl in do_CurrentX als auch in do_CurrentY überläßt man die Aufgabe der Positionierung des Icon-Gadgets der Workbench. Eine lange Ganzzahl, deren Wert die y-Koordinate festlegt, an der das Icon-Gadget auf dem Bildschirm erscheinen soll. Diese wird relativ zur linken oberen Ecke des Fensters gemessen, das dem Verzeichnis zugeordnet ist, welches das Icon enthält. Durch Angabe des Werts NO_ICON - POSITION (C) = 0x80000000 = MIN(LONGINT) = nolcon- Position (Modula-2) sowohl in do_CurrentX als auch in do_CurrentY überläßt man die Aufgabe der Positionierung des Icon-Gadgets der Workbench. Ein Adreßzeiger auf eine DrawerData-Datenstruktur, die das (Verzeichnis-)Fenster beschreibt, das beim Anklicken dieses Icons zur Anzeige seines Inhalts geöffnet werden soll. Dieser Adreßzeiger ist nur für Icons vom Typ WBDISK, WBDRAWER und WBGARBAGE von Bedeutung, weil alle anderen keine Verzeichnisse darstellen. Ein Adreßzeiger auf eine C-Zeichenkette, die ein CON:- oder RAW:-Fenster beschreibt, das beim Start des zu diesem Icon gehörigen Programms als Standardein-/Ausgabedatei geöffnet werden soll. Der Adreßzeiger auf die Window- Datenstruktur (siehe »Intuition«) des neuen Fensters wird dabei automatisch in die Komponente pr_WindowPtr der Process-Datenstruktur (siehe »Dos«) des Programms einge- tragen. Um kein Fenster automatisch Öffnen zu lassen, trägt man hier den Wert NULL ein. Dieser Adreßzeiger ist nur für Icons vom Typ WBTOOL von Bedeutung. Eine lange Ganzzahl, deren Wert die Größe des Stacks festlegt, der zur Ausführung des zu diesem Icon gehörigen Programms verwendet werden soll. Ist der Wert von do_- StackSize gleich Null, so wird dem Programm ein Stack von vor einstellungsgemäß 4Kbyte zugeordnet. Dieser Adreß- zeiger ist nur für Icons vom Typ WBTOOL von Bedeutung. DrawerData Offset C (workbench/workbench.h) Modula-2 (Workbench) struct DrawerData DrawerData = { RECORD struct NewWindow dd_NewWindow; newWindow:NewWindow; LONG dd_CurrentX%; currentX:LONGINT; LONG dd_CurrentY; currentY:LONGINT; 5 END; Datenstrukturenreferenz Keine. Routinenreferenz Keine. Beschreibung Die DrawerData-Datenstruktur wird vom Workbench-Programm dazu benutzt, die Charakteristika des für ein Verzeichnis zu öffnenden Fensters zu speichern. I dd_NewWindow 0x0000 (0) Eine NewWindow-Datenstruktur (siehe »Intuition«), deren Adresse an die »Intuition«-Routine OpenWindow zum Öff- nen des Verzeichnis-Fensters übergeben wird. 4 dd_CurrentX 0x0030 (48) Eine lange Ganzzahl, deren Wert die x-Koordinate der aktu- ellen Position der linken oberen Ecke des diesem Verzeich- nis übergeordneten Verzeichnis-Fensters angibt. 4 dd_CurrentY 0x0034 (52) Eine lange Ganzzahl, deren Wert die y-Koordinate der aktu- ellen Position der linken oberen Ecke des diesem Verzeich- nis übergeordneten Verzeichnis-Fensters angibt. FreeLlist C (workbench/workbench.h) Modula-2 (Workbench) struct FreeList FreeList = { RECORD WORD fl_Numfree; numFree:INTEGER; struct List fl_Memlbist; memlist:List }; END; Datenstrukturenreferenz Routinenreferenz > Beschreibung Keine. »Icon«: AddFreeList, FreeFreeList, Getlcon. Die FreeList-Datenstruktur stellt eine einfache Speicherbereichsliste dar, die den »Icon«-Routinen zur Aufnahme der von ihnen dynamisch allokierten Speicherbereiche dient. I fl_NumFree 0x0000 (0) O fl_MemList 0x0002 (2) WBArg Offset struct WBArg { BPTR wa_Lock; en) 8 E Datenstrukturenreferenz Routinenreferenz \....2. Beschreibung C (workbench/startup.h) BYTE *wa_Name; Eine Ganzzahl, deren Wert die Anzahl freier Bytes in der ganzen Speicherbereichsliste angibt. Eine List-Datenstruktur (siehe »Exec«), über die auf die einzelnen Elemente der Speicherbereichsliste zugegriffen werden kann. Die Speicherbereichsliste besteht dabei aus lauter MemList-Datenstrukturen (siehe »Exec«), in denen sämtliche allokierten Speicherbereiche eingetragen sind. Falls der von einer FreeList-Datenstruktur selbst belegte Speicherplatz in ihrer eigenen Speicherbereichsliste ver- merkt werden soll, so muß dies im ersten Element der Liste geschehen! Modula-2 (Workbench) WBArg = RECORD lock:FileLockPtr; name: ADDRESS END; Keine. Keine. Die WBArg-Datenstruktur wird vom Workbench-Programm in der WBStartup-Datenstruktur zur Über- gabe der Argumente an neu gestartete Programme verwendet. JJ wa_Lock 0x0000 (0) 4} wa_Name 0x0004 (4) Ein Adreßzeiger auf eine FileLock-Datenstruktur (siehe »Dos«), die das Verzeichnis repräsentiert, in dem dieses Argument zu finden ist. Ein Adreßzeiger auf eine C-Zeichenkette, die den tatsäch- lichen Namen des Arguments enthält. WBsStartup Offset C (workbench/startup.h) Modula-2 (Workbench) struct WBStartup { } Datenstrukturenreferenz WBStartup = RECORD struct Message sm_Message; message:Message; struct MsgPort *sm_Process; process:MsgPortPtr; BPTR sm_Segment; segment:BPTR; LONG sm_NumArss; numArgs:LONGINT,; char *sm_ToolWindow; toolWindow: ADDRESS; struct WBArg *sm_ArglList; argList:WBArgumentsPir; END; Keine. Keine. Routinenreferenz > Beschreibung Die WBStartup-Datenstruktur stellt eine erweiterte »Exec«-Botschaft dar, die das Workbench-Pro- gramm als einleitende Startup-Information an jedes (durch Anklicken seines Icons!) neu gestartete Programm sendet. „1 sm_Message 0x0000 (0) I sm_Process 0x0014 (20) 3 sm_Segment 0x0018 (24) 1 sm_NumArgs 0x001C (28) Eine normale Message-Datenstruktur (siehe »Exec«), deren mn_ReplyPort-Komponente auf den Port des Workbench- Programms verweist. Diese Botschaft darf nur am Ende der Programmausführung mittels der »Exec«-Routine Re- plyMsg beantwortet werden, weil das Workbench-Pro- gramm den von der Botschaft insgesamt belegten Speicher- platz dann wieder automatisch freigibt. Beantwortet ein Pro- gramm die Startup-Botschaft nicht, so hat es selbst für die korrekte Freigabe des belegten Speicherplatzes zu sorgen. Ein Adreßzeiger auf die Process-Datenstruktur (siehe »Dos«), die für das neu gestartete Programm vom Work- bench-Programm automatisch angelegt wird. Ein Adreßzeiger vom Typ BPTR auf die Segmentliste des geladenen Objektcodes des neu gestarteten Programms. Dieser Adreßzeiger ist das Ergebnis eines vom Workbench- Programm intern durchgeführten Aufrufs der »Exec«- Routine LoadSeg. Eine lange Ganzzahl, deren Wert die Anzahl der Argumente angibt, die an das neu gestartete Programm übergeben wur- den. Diese Zahl entspricht der Elementanzahl der Argumenttabelle sm_ArgList. Q sm_ToolWindow 0x0020 (32) I sm_ArgList 0x0024 (36) Ein Adreßzeiger auf eine C-Zeichenkette, die eine Kopie der Zeichenkette do_ToolWindow aus der DiskObject-Daten- struktur des zum neu gestarteten Programm gehörigen Icons darstellt. | Ein Adreßzeiger auf eine Tabelle von WBArg-Datenstruk- turen, die die an das neu gestartete Programm übergebenen Argumente repräsentieren. Insgesamt enthält die Tabelle genau sm_NumArgs Argumenteinträge. Y ALLES LLLELLLLLLLLGS ( renecontentenender Y VEITILZILIIIIIZIILG W EEE, , AvailFontHeader Y VTILLILLILELLLZELL LLLL afh_NumEntries N N afh NumEntries £ ns GzRZZZZZZEZEEEEEELL I SIPN 4 GESETED BE a rer / IN u ee Fontname I Be — Fontname KK reiironee ran AI des Fonts Hr LLL ZW N ' N TextAttr GG VCH a Name aa I IR SI GLORILLL Fontname LLLELLELLLLE IN FR dd SI GIS I III N SS N IN SS SS N N NS NS SS N G 7 G G g g G G G d G % III N LLLLEELLEOELEEHEEELEL TextAtt VOERIIEZLL Bechreibt die igenschaften des Fonts LG SS DELL > DE ZZ LLLLEL ELLE ISIS SS N N 5 ZELLE N S 2 x ® N NN ALL l N FontContents III Ss‘ SEIN 77 SS N NN U L 17 ß 7 v YA vg vg f ß ß y 4 f 7 y 7 ß y 7 7 1 ß ß 7 4 r ß 7 9 7 G yA D ÄR a LEE RZ III INN NN N N Ve DR Fontname FN fc _Nane F a VOPLLLLLLLLLLLLLLL DZ L2ÄL. Abb. 7.1: Wichtige Datenstrukturen der Diskfont-Library Die Devices Bei den Devices handelt es sich in erster Linie um gerätespezifische Treiber. Ähnlich wie bei den Libraries sind in ihnen alle nötigen Routinen und Datenstrukturen definiert, die zur Programmierung eines spezifischen Ein- oder Ausgabegerätes nötig sind. Wie die Libraries müssen auch die Devices vor einem Zugriff durch ein Programm geöffnet und vor Beendigung desselben wieder geschlossen werden. Dazu gibt es die beiden Exec-Routinen OpenDevice und CloseDevice. Im Unterschied zu den Libraries läuft die Kommunikation mit den Devices im wesentlichen nur über eine /OStdReg-Datenstruktur, wobei sich diese von Device zu Device leicht verändern kann. Auf die Besonderheiten der zu einem Device gehörenden / OStdReg-Datenstruktur gehen wir jeweils am Anfang eines Abschnittes ein. 8.1 Das Audio-Device Dieses Device dient, wie dem Namen schon zu entnehmen ist, zur Tonausgabe und gibt uns die vollständige Kontrolle über die Audio-Hardware des Amiga. Die Steuerung des Audio-Device erfolgt mit Hilfe der /OAudio-Datenstruktur. Geöffnet wird das Device mit Hilfe der OpenDevice-Routine, der als IORequest ein Adreßzeiger auf eine vorinitialisierte /[OAudio-Datenstruktur übergeben werden muß. In io AllocKey muß entweder null oder eine Kopie eines anderen gültigen AllocKeys stehen, in io AllocData ein Adreßzeiger auf eine Kanalmaske und in io_Length die Anzahl der Bytes in der Kanalmaske. Das io_Error-Feld dieser /[OAudio-Datenstruktur beinhaltet immer null, falls kein Fehler aufgetreten ist, und sonst den entsprechenden Fehlercode. /n io_Unit steht vor der Ausführung eines Befehls die Maske der Soundkanäle, die von ihm betroffen werden sollen, und hinterher die der tatsächlich betroffenen. Dabei entsprechen die Bits 0-3 den Kanälen 1-4. C Modula-2 Beschreibung CMD_RESET reset Alle Audioregister auf Defaultwerte rücksetzen. CMD_READ read Einen Zeiger auf den aktuellen WRI/- TE-Block (IO-Block der für den momentan stattfindenden Schreibzu- griff zuständig ist) zurückgeben. ioa_ Data: Nach dem Aufruf ein Adreßzeiger auf den aktuellen WRITE-Block. CMD_WRITE write 3 Die Tonausgabe einleiten. ioa_Data: Ein Adreßzeiger auf ein Feld (das im Chip-RAM liegen muß) von vorzeichenbehafteten Bytes, die die Wellenform festlegen. ioa Length: Die Länge des Feldes (aus ioa_Data) in Bytes (erlaubte Werte sind alle geraden Zahlen zwischen 2 und 131072). ioa_ Period: Die Länge des Tons als Vielfaches von 279,365 Nanosekunden (erlaubte Werte liegen zwischen 24 und 65536). ioa_ Volume: Die Lautstärke des Tones als ein Wert zwischen O und 64. ioa_Cycles: Die Anzahl der Wiederholungen dieses Tones. io_Flags: 0 = Ton ausgeben; ADIOF PERVOL gesetzt = Lautstärke und Länge des Tons initialisieren; ADIOF_WRITEMESSAGE gesetzt = eine Write-Message beantworten. C Modula-2 i Beschreibung CMD_STOP stop Die Tonausgabe unterbrechen. CMD_START start Die durch STOP unterbrochene Ton- | ausgabe wieder aufnehmen. CMD_FLUSH flush Alle WRITE-Befehle löschen. Ihnen stehen für das Audio-Device folgende Befehle zusätzlich zur Verfügung (zu den Definitionen in C und Assembler gehört jeweils noch das Präfix ADCMD ): FREE free Die Soundkanäle freigeben. SETPREC setPrec Die Priorität setzen. Große Priorität bedeutet, daß der Kanal nicht weg- genommen werden kann. io_Node.In_Pri: Die neue Priorität FINISH finish Die Soundausgabe für Kanal (Kanäle) anhalten. Es wird Abort/O aufgerufen. io Flags: IOF _QUICK gesetzt = IORequest beantworten; ADIOF_SYNCCYCLE gesetzt = sofort stoppen; gelöscht = Ende des Zyklus abwarten. PERVOL Die Länge und die Lautstärke einstellen. ioa Period: Die neue Länge (siehe CMD_WRITE). ioa_Volume: Die neue Lautstärke. Modula-2 i Beschreibung Benachrichtigen, falls ein Kanal von einem anderen Task »weggenommen« wurde. Modula-2 Beschreibung WAITCYCLE waitCycle Auf das Ende des Ausgabezyklus warten. ALLOCATE allocate Die Soundkanäle einrichten. ioa_Data: Ein Adreßzeiger auf die zu allozierende Kanalmaske. ioa Length: Die Länge der Kanalmaske. io_Flags: IOF OUICK gelöscht = /ORequest beantworten; gesetzt = nur asynchrone /ORequests beantworten; ADIOF NOWAIT gelöscht = warten, bis Allozierung erfolgreich abge- schlossen (und wenn es noch so lange dauert); gesetzt = sofort mit Fehlermeldung zurückkehren, falls Allokierung nicht erfolgreich; Folgende Bits sind für io_Flags definiert (zu den C- und Assemblerversionen gehört jeweils das Präfix ADIOF ;in Modula-2 entsprechen sie den jeweiligen Bits aus /OFlagSet): PERVOL SYNCCYCLE NOWAIT WRITEMESSGAE Modula-2 perVol syncCycle noWait writeMessage Beschreibung Die Dauer und die Lautstärke bei ACMD _ ALLOCATE setzen. Vor Beenden der Ausgabe mit CMD - FINSH soll der aktuelle Zyklus beendet werden. Auf Warten beim Bereitstellen mit ACMD_ALLOCATE verzichten. Es wird in ioa_WriteMessage mitge- teilt, wenn die Bearbeitung von CMD WRITE aufgenommen wird. Folgende Fehlermeldungen sind für das Audio-Device zusätzlich definiert (zu den Definitionen in C und Assembler gehört jeweils das Präfix ADIOERR_): C NOALLOCATION ALLOCFAILED CHANNELSTOLEN Modula-2 noAllocation allocFailed channelStolen Beschreibung Es wurde ein falscher AllocKey an- gegeben. Kanal konnte nicht bereitgestellt werden. Der Kanal wurde von einem anderen Task »weggenommen«. IOAudio C (devices/audio.h) Modula-2 (Audio) struct IOAudio IOAudio = { RECORD struct IORequest ioa_Request; request:IORequest; WORD ioa_AllocKey; allocKey:INTEGER; UBYTE *ioa_Data; data: ADDRESS; ULONG ioa_Length; length/LONGCARD; UWORD ioa_Period; period:CARDINAL; UWORD ioa_Volume; volume:CARDINAL; UWORD ioa_Cycles; cycles:CARDINAL; struct Message ioa_WriteMsg; writeMsg:Message; } END; Assembler Der Parameter ioa_Request ist nicht definiert. Datenstrukturenreferenz Keine. Routinenreferenz »Exec«: CloseDevice, OpenDevice. > Beschreibung Bei dieser Datenstruktur handelt es sich um eine für das Audio-Device erweiterte /ORequest-Daten- struktur. 1 ioa_Request 0x0000 (0) Dies ist eine gewöhnliche /ORequest-Struktur, wie sie im Kapitel über die Exec-Library beschrieben ist. Über die entsprechenden Felder dieser Struktur können Befehle an das Device geschickt und Fehlermeldungen gelesen werden. Das In_Pri-Felddes io_MessageFeldes von io_Request wird benutzt, um die »Dringlichkeit« Ihres Sounds anzugeben. Ihnen stehen für das Audio-Device folgende Befehle stan- dardmäßig zur Verfügung: 1 ioa_AllocKey 0x0020 (32) Beim Allokieren des ersten Kanals muß hier eine O überge- ben werden, wodurch der ACMD_ALLOCATE-BefeHhl hier einen Key hineinschreibt, der später nicht verändert werden darf. U) ioa_Data 0x0022 (34) Ein Zeiger auf die Daten, die dem Device übergeben werden, also beispielsweise die Kanalmaske beim ACMD_ALLO- CATE-Befehl oder die Wellenform beim CMD_WRITE- Befehl. Diese Daten müssen sich im Chip-RAM befinden! „J ioa_Length 0x0026 (38) Dieser Wert gibt die Länge des Datenfeldes an. Ist es beim Öffnen des Device nicht Null, so wird versucht, für die in ioa Data stehende Kanalmaske Speicherplatz bereitzu- stellen. 4 ioa_Period 0x002A (42) Hier steht die zu spielende Frequenz. Dieses Feld wird beim ACMD_ PERVOL-Befehl benutzt. „1 ioa_Volume 0x002C (44) Gibt beim ACMD_PERVOL-Befehl die Lautstärke des Tones an. I ioa_Cycles 0x002E (46) Gibt die Anzahl der zu spielenden Zyklen an. Wird bei der Tonausgabe mit CMD_WRITE benutzt. I ioa_WriteMessage 0x0030 (48) Eine normale Message-Datenstruktur wie sie im Kapitel über »Exec« beschrieben ist. Dieses Feld hat nur im Zusam- menhang mit dem ADIOF _WRITEMESSAGE-Flags eine Bedeutung und sagt Ihnen, wann die Bearbeitung des CMD WRITE-Befehls aufgenommen wurde. 8.2 Das Clipboard-Device Das Clipboard-Device dient zur einfachen Verwaltung und Zwischenspeicherung von Datenblöcken. Die Programmierung von Blockoperationen, wie sie aus der Textverarbeitung bekannt sind, sind damit ohne größere Umstände zu realisieren. ClipboardUnitPartial C (devices/clipboard.h) Modula-2 (Clipboard) struct ClipboardUnitPartial ClipboardUnitPartial = ( RECORD 0000 0 struct Node cu_Node; node:Node; ULONG cu_UnitNum; unitNum:LONGCARD; ; Datenstrukturenreferenz »ClipBoard«: IOClipReg. Routinenreferenz Keine. 1 > Beschreibung Diese Datenstruktur spezifiziert ein ClipBoard-Unit. J cu_Node 0x0000 (0) Eine Node-Datenstruktur, die zur Verkettung mehrerer Units zu einer Liste dient. J cu_UnitNum 0x000E (14) Die Nummer dieses Units. IOClipReq oe C (devices/clipboard.h) Modula-2 (Clipboard) Hex Dez struct IOClipReq IOClipboard = { RECORD 0000 0 struct Message io_Message; message:Message; 0014 20 struct Device *io_Device; device:DevicePtr; 0018 24 struct Unit *io_Unit; unit:UnitPtr; 001C 28 UWORD io_Command; command:CARDINAL; 001E 30 UBYTE io_Flags; | flags:IOFlagSet; 001F 31 BYTE io_Eırror; error:Byte; 0020 32 ULONG io_Actual; actual: LONGCARD; 0024 36 ULONG io_Length; length:;LONGCARD; 0028 40 STRPTR io_Data; data: ADDRESS; 002C 44 ULONG io_Offset; offset: LONGCARD; 0030 48 LONG io_ClipID; clipID:LONGINT; 0034 52 in END; Datenstrukturenreferenz Routinenreferenz Beschreibung Keine. Keine. Dies ist eine erweiterte /OStdReg-Datenstruktur, die zur Steuerung und Übermittlung von Daten von und zum Clipboard-Device benutzt wird. I io_Message 0x0000 (0) J io_Device 0x0014 (20) I io_Unit 0x0018 (24) J io_Command 0x001C (28) Modula-2 Eine Message-Datenstruktur, die von Do/O und SendlO benötigt wird. Ein Adreßzeiger auf eine DeviceNode-Datenstruktur, durch die das Clipboard-Device in die Liste der Devices eingebun- den wird. Ein Adreßzeiger auf die zu dieser Unit gehörenden Clip- boardUnitPartial-Datenstruktur. Folgende Standardbefehle haben in diesem Device eine Funktion (zu den Definitionen in C und Assembler gehört jeweils das Präfix CMD_): Beschreibung Neuinitialisierung des ClipBoard- Device. Einlesen eines Clips in den Daten- puffer. C Modula-2 Beschreibung WRITE UPDATE write update Schreiben eines Clips aus dem Daten- puffer. Wird nach Beendigung von Schreib- zugriffen gesendet, um die Vollstän- digkeit des Clips zu signalisieren. Weiterhin sind folgende Befehle zusätzlich definiert (zu den Definitionen in C und Assembler gehört jeweils das Präfix CBD_): C POST CLIPREADID CLIPWRITEID Modula-2 post currentReadID currentWritelD J io_Flags 0x001E (30) J io_Error 0x001F (31) I io_Actual 0x0020 (32) „1 io_Length 0x0024 (36) J io_Data 0x0028 (40) Dez 9 10 11 Beschreibung Einen Messageport, an den SatisfyMsg-Datenstrukturen ge- schickt werden können, anmelden. Dann können die Clipboard-Device Daten anfordern, falls sie gebraucht werden. Wenn ein Message an- kommt, muß sofort WRITE ausge- führt werden. Dabei muß io_ClipID auf den in SatisfyMsg stehenden Wert gesetzt werden. Das aktuelle ClipID für Lesen ins io_ClipID schreiben. Somit kann ge- prüft werden, ob die Clipdaten noch gültig sind. Das aktuelle ClipID für Schreiben ins io_ClipID. Ist diese größer als die in SatisfyMsg, dann braucht nicht mehr geschrieben zu werden, da die Daten veraltet sind. Die Flags für die Bearbeitung der IO-Befehle (siehe »Exec«). Tritt ein Fehler auf, so steht hier ein von null verschiedener Wert. Die Anzahl der Bytes, die tatsächlich zum oder vom Daten- puffer transferiert wurden. Die Anzahl der Bytes, die zum oder vom Datenpuffer trans- feriert werden sollen. Ein Adreßzeiger auf die zu transferierenden Daten. Bei dem POST-Befehl steht hier ein Adreßzeiger auf eine MsgPort- Datenstruktur, an die Anforderungen in Form von Satis- FyMsg-Datenstrukturen geschickt werden können. „1 io_Offset 0x002C (44) Die aktuelle Position innerhalb des Clips ??? 4 io_ClipID 0x0030 (48) Die Identifizierungsnummer des aktuellen WRITE- oder READ-Befehls. Findet der WRITE-Befehl als Antwort auf eine SatisfyMsg-Datenstruktur statt, so muß hier der gleiche Wert wie in dieser SatisfyMsg-Datenstruktur stehen. SatisfyMsg Offset C (devices/clipboard.h) Modula-2 (Clipboard) struct SatisfyMsg SatisfyMsg = { RECORD struct Message sm_Msg; msg:Message; 20 UWORD sm_Unit; unit:CARDINAL; 22 LONG sm_CliplID; clipID:LONGINT, 26 r END; Datenstrukturenreferenz Keine. Routinenreferenz Keine. U? Beschreibung Diese Datenstruktur dient zur Anforderung von Daten durch das Clipboard-Device. Wenn eine »Post« mit dem POST-Befehl eingerichtet wurde, schickt das Clipboard-Device an den dort angegebenen Messageport eine Nachricht, sobald jemand Daten anfordert. Der Empfänger muß dann mit dem WRITE- Befehl sofort die benötigten Daten zu dem Clipboard-Device senden. 4 sm_Msg 0x0000 (0) Eine normale Message-Datenstruktur, die zum Senden der SatisfyMsg-Datenstruktur mit Hilfe von PutMsg benötigt wird. I sm_Unit 0x0014 (20) Gibt die Unit des Clipboard-Devices an, das die Daten anfordert. „41 sm_ClipID 0x0016 (22) Die Identifizierung des Datenblocks, der zu der »Post« gehört. 8.3 Das Console-Device Dieses Device ist für die Ein- und Ausgabe in dem Terminal-Fenster zuständig. Mit Hilfe von Sonderzei- chensequenzen, die durch den Wert CSI (ASCIH-Wert: 155) eingeleitet werden, ist nicht nur einfaches Einlesen und Schreiben möglich, sondern auch komplexe Anzeigengestaltung (Cursor-Steuerung, Farben, Schriftart etc.). Beim Öffnen dieses Devices wird der Adreßzeiger auf die entsprechende Window-Datenstruktur im io_Data-Feld der an die Routine OpenDevice übergebenen IOStdReq- Datenstruktur eingetragen. Für dieses Device sind folgende Standard-Befehle zulässig: Modula-2 Dez Beschreibung CMD_READ 2 Eine Zeichenkette in den Puffer ein- lesen. io_Data: Ein Adreßzeiger auf den Puffer. io_Length: Die Größe des Puffers in Bytes. io_Actual Die Anzahl der tatsächlich gelesenen Zeichen. CMD_WRITE Eine Zeichenkette aus den Puffer ausgeben. Das Zeichen CSI (155) leitet eine Steuersequenz ein. io_Data: Ein Adreßzeiger auf den Puffer. io_Length: Die Größe des Puffers in Bytes. Folgende Befehle sind in diesem Device zusätzlich definiert: C Modula-2 Dez Beschreibung CD_ASKKEYMAP askKeyMap 9 Einen Adreßzeiger auf die aktuelle Keymap (des Fensters) in io_Data holen. CD_SETKEYMAP setKeyMap 10 Eine neue Keymap für diese Fenster | setzen. CD_ASKDEFAULTKEYMAP askDefaultKeyMapll Die Default- Keymap (aus den Pre- ferences) holen. CD_SETDEFAULTKEYMAP _ setDefaultKeyMapl2 Eine neue Default-Keymap setzen. Die CSI-Befehlssequenzen Eine CSI-Befehlssequenz hat das folgende Format: CSI-Parameter-Befehl Beispiel: CS/14;80H (ASCII-Folge: /55,”14,80H”) CSI ist das Zeichen mit dem ASCII-Code 155 (Auf der Tastatur erzeugt durch die Tastenfolge U). Die Parameter werden als zeichenweise ausgeschriebene Zahlen übergeben. Mehrere Parameter werden durch ein Semikolon getrennt. Abschließend folgt das ASCH-Zeichen eines der folgenden Befehle: Befehl Bedeutung n-Leerzeichen einfügen. Cursor n-Zeilen aufwärts positionieren. Cursor n-Zeilen abwärts positionieren. Cursor n-Zeilen rechts positionieren. Cursor n-Zeilen links positionieren. Einen Zeilenvorschub durchführen. Gegenteil vonEE. Cursor auf Position (x,y) setzen. Cursor n-Tabulatorschritte nach rechts. Löschen von Cursorposition bis Displayende. Löschen von Cursorposition bis Zeilenende. Eine Zeile einfügen. Eine Zeile löschen. n-Zeichen ab Cursorposition löschen. n-Zeilen nach oben scrollen. n-Zeilen nach unten scrollen. n-Tabulator-Stops setzen. Cursor n-Tabulatorschritte nach links. Tabulator-Einstellungen löschen. LineFeed als LineFeed + Return behandeln. LineFeed als solchen behandeln. Schriftstil, Vorder- und Hintergrundfarbe setzen (siehe Konstanten). Beim nächsten CMD_READ-Befehl IDCMP-Status lesen. bool = 0 Cursor aus-, bool = 1 Cursor einschalten. Die Seitenlänge auf n-Zeilen setzen. Die Zeilenlänge auf n-Zeichen setzen. Den linken Offset auf n-Zeichen setzen. Den oberen Offset auf n-Zeichen setzen. @ A B C D E F H I J K L M P S T W Z 8 h 1 m n P t u X ). In dem Include-File zur Console-Device sind jede Menge Konstanten definiert, die im Zusammenhang mit den CSI-Kommando »m« benutzt werden. Sie definieren Werte für die Schriftart, sowie Vorder- und Hintergrundfarbe. C Modula-2 Dez Bedeutung SGR_PRIMARY primary 0 Normales Schriftbild SGR_BOLD bold 1 Fettschrift SGR_ITALIC italic 3 Schrägschrift SGR_UNDERSCORE underscore 4 Unterstrichen SGR_NEGATIVE negative 7 Weiß auf schwarz schreiben SGR_BLACK black 30 Vordergrundfarbe schwarz SGR_RED red 31 _ Vordergrundfarbe rot SGR_GREEN green 32 _ _Vordergrundfarbe grün SGR_YELLOW yellow 33 _ Vordergrundfarbe gelb SGR_BLUE blue 34 Vordergrundfarbe blau SGR_MAGENTA SGR_CYAN SGR_WHITE SGR_DEFAULT SGR_BLACKBG SGR_REDBG SGR_GREENBG SGR_YELLOWBG SGR_BLUEBG SGR_MAGENTABG SGR_CYANBG SGR_WHITEBG SGR_DEFAULTBG Modula-2 magenta cyan white default blackBg redBg greenBg yellowBg blueBg magentaBg cyanBg whiteBg defaultBg Dez Bedeutung Vordergrundfarbe magentarot Vordergrundfarbe zyan Vordergrundfarbe weiß Default-Vordergrundfarbe Hintergrundfarbe schwarz Hintergrundfarbe rot Hintergrundfarbe grün Hintergrundfarbe gelb Hintergrundfarbe blau Hintergrundfarbe magentarot Hintergrundfarbe zyan Hintergrundfarbe weiß Default-Hintergrundfarbe Folgende Befehle sind durch ein Zeichen definiert und können direkt aufgerufen werden: BEL - Bell BS - BackSpace HT - HorizontalTab LF -LineFeed VT - VerticalTab FF - FormFeed CR - CarrigeReturn Einen Piepston erzeugen. Zeichen links vom Cursor löschen. Einen Tabulatorschritt nach rechts. Einen Zeilenvorschub. | Eine Zeile nach oben. y Das Fenster löschen. Zurück zum Zeilenanfang. 8.4 Das Gameport-Device Mit diesem Device ist es möglich, die Gameports abzufragen. An den Gameports können Eingabegeräte wie Maus, Joysticks, Trackballs etc. angeschlossen werden. Befehle und Fehlermeldungen werden wieder über eine /OStdReg-Datenstruktur verwaltet. Der Parameter Unit bestimmt dabei, um welchen der beiden Ports es sich handelt (0 oder 1). Es steht nur folgender Befehl in diesem Device standardmäßig zur Verfügung: C Modula-2 Dez Beschreibung CMD_CLEAR clear 5 Löscht den Eingabepuffer. Folgende zusätzliche Befehle stehen in diesem Device zur Verfügung: C Modula-2 Dez Beschreibung GPD_READEVENT readEvent 9 Status des Eingabegeräts lesen. io_Data: Der Aderßzeiger auf eine Kette von InputEvent-Datenstrukturen, aus deren Komponen- ten die Zustände des Eingabegeräts gelesen werden können. io_ Length: Die Anzahl der /nputEvent-Datenstrukturen mal 22. GPD_ASKCTYPE askC’I'ype 10 Typ des Eingabegeräts lesen. io_Data: Ein Adreßzeiger auf ein Byte, dessen Wert den Typ des Eingabegerätes festlegt. io_Length: Also wohl mindestens 1. GPD_SETCTYPE setCType 11 Typ .des Eingabegeräts setzen. io_Data: Ein Adreßzeiger auf eine Byte, dessen Wert den Typ des Eingabegerätes festlegt. io_Length: Also wohl mindestens 1. GPD_ASKTRIGGER askTrigger 12 _ Abfragen der Eingabebedingungen. io_Data: Ein Adreßzeiger auf eine GamePortTrigger-Datenstruktur. io Length: Die Größe der GamePortTrigger-Datenstruktur (8). GPD_SETTRIGGER setTrigger 13 _ Setzen der Eingabebedingungen. io_Data: Ein Adreßzeiger auf eine GamePortTrigger-Datenstruktur. io_Length: Die Größe der GamePortTrigger-Datenstruktur (8). Folgende Eingabegeräte können über io_Data gesetzt werden (zu den Definitionen in C und Assembler gehört jeweils das Präfix GPCT ; in Modula-2 gehören die Parameter zu dem Aufzählungstypen Controller): Modula-2 Dez Beschreibung NOCONTROLLER noController 0 Esistkein Eingabegerät ange- schlossen. Modula-2 Beschreibung MOUSE mouse Das Eingabegerät ist eine Maus. RELJOYSTICK relJoystick 2 Das Eingabegerät ist ein relativer Joystick. ABSJOYSTICK absJoystick Das Eingabegerät ist ein normaler Joystick. GamePortTrigger Offset C (devices/gameport.h) Modula-2 (GamePort) Hex Dez struct GamePortTrigger GamePortTrigger = [ RECORD 0 UWORD gpt_Keys; keys:KeysSet; 2 UWORD gpt_Timeout; timeout:CARDINAL; 4 UWORD gpt_XDelta; xDelta:CARDINAL; 6 UWORD gpt_YDelta; yDelta:CARDINAL; 8 }; END; Datenstrukturenreferenz Keine. Routinenreferenz Keine. .......”. Beschreibung Durch diese Datenstruktur werden einige Zusatzbedingungen des zugehörenden Gameports festgelegt. I gpt_Keys 0x0000 (0) Über diesen Parameter wird festgelegt, ob das Drücken oder das Loslassen der Tasten des Eingabegeräts gemeldet wird. Dabei können auch beide der folgenden Bits gesetzt werden: C Modula-2 Dez Beschreibung GPTF_DOWNKEYS downKeys l Das Drücken der Tasten wird gemel- det. GPTF_UPKEYS upKeys 2 Das Loslassen der Tasten wird gemeldet. I gpt Timeout 0x0002 (2) Dieser Wert gibt an, nach wie vielen Fünfzigstel Sekunden ein »ReadEvent« vom Gameport-Device abgeschickt wird. I gpt_XDelta 0x0004 (4) Dieser Wert gibt die Anzahl von Impulsen in x-Richtung an, die als ein einziger interpretiert werden. Isteine Maus an dem Gameport angeschlossen, so kann über diesen Wert die Genauigkeit der Abfrage angegeben werden. Je größer die- ser Wert ist, desto weiter muß die Maus bewegt werden, um einen tatsächlichen Impuls auszulösen. _J gpt_YDelta 0x0006 (6) Dieser Wert gibt die Anzahl von Impulsen in y-Richtung an, die als ein einziger interpretiert werden (siehe auch gpt XDelta). 8.5 Das Input-Device Das Input-Device verfügt zwar nicht über eigene Datenstrukturen, jedoch werden wie bei den anderen Devices mehrere Befehle über eine /OStdReg-Datenstruktur bereitgestellt. Folgende Standardbefehle stehen in diesem Device zur Verfügung: Modula-2 Beschreibung CMD_RESET Ein Reset durchführen. Dabei werden keine Handler deaktiviert. CMD_STOP Dieser Befehl stoppt das Input Device. CMD_START Input-Device nach CMD_STOP wieder »anschmeißen«. Die folgenden Befehle sind für das Input-Device zusätzlich definiert (zu den Definitionen in C und Assembler gehört jeweils das Präfix IND _): C Modula-2 Dez Beschreibung ADDHANDLER addHandler 9 _ Fügt einen neuen Input-Handler ein. So können Sie die Input-Events abfangen, bevor sie das restliche System erreichen. In welcher Reihe die Handler die Events bekommen, entscheidet die Priorität. Der Systemhandler hat die Priorität SO. io Data: Ein Adreßzeiger auf eine /nterrupt-Datenstruktur, deren Felder wie folgt initialisiert werden müssen: is_Code: Ein Adreßzeiger auf den Code des Handlers (der Anfang muß in Assembler geschrie- ben sein, da die Parameter nicht auf den Stack, sondern in den Registern übergeben werden). is_Data: Ein Adreßzeiger auf den privaten Datenbereich des Handlers. Diese Adresse wird beim Aufruf des Handlers im Adreßregiser A/ übergeben. is Node.In_Pri: Die Priorität des Handlers. Modula-2 Dez Beschreibung REMHANDLER remHandler Einen durch /ND_ADDHANDLER gesetzten Input-Handler aus der Liste entfernen. io Data: Ein Adreßzeiger auf den zu entfernenden Handler (siehe /ND_ADDHANDLER). WRITEEVENT writeEvent 11 Leitet alle Input-Events an alle Handler weiter. io Data: Ein Adreßzeiger auf die verketteten InputEvent-Datenstrukturen. io_Length: Die Länge der /nputEvent-Datenstruktur in Bytes, also 22. SETTHRESH setThresh 12 _ Setzt die Anlaufzeit der Tastenwie- derholung neu. io tv secs: Der Sekundenanteil der Zeitdauer, die eine Taste gedrückt sein muß, bevor sie periodisch wiederholt wird. Wollen Sie die Tastenwiederholung tatsächlich benutzen, so dürfte hier 0 der einzig richtige Eintrag sein. io tv Nicro: Der Mikrosekundenanteil der Zeitdauer, die eine Taste gedrückt sein muß, bevor sie periodisch wiederholt wird. SETPERIOD setPeriod 13 _ Setzt die Tastenwiederholgeschwin- digkeit neu. io tv secs: Die Anzahl der Sekunden, die zwischen der periodischen Wiederholung einer Taste verstreichen dürfen (sinnvollerweise 0). io tv Micro: Der Mikrosekundenanteil der Zeitdauer, die bei der periodischen Wiederholung einer Taste zwischen den einzelnen Wiederholungen verstreichen darf. Modula-2 Dez Beschreibung SETMPORT setMPort 14 Setzt den aktuellen Gameportt. io_ Data: Ein Adreßzeiger auf ein Byte, das 0 oder 1 sein muß. Dementsprechend wird der linke oder rechte Gamepeort als aktueller gesetzt. io_Length: Muß 1 sein. SETMTYPE 15 Legt den Typ des aktuellen Eingabe- gerätes fest. io_Data: Ein Adreßzeiger aufein Byte, dessen Inhalt den Typ des angeschlossenen Eingabegerätes festlegt. Dabei gelten die gleichen Definitionen wie im GamePort-Device. io_Length: Sollte wohl nichts anderes als 1 sein. SETMTRIG setMTrig 16 Setzt die Eingabebedingungen für den aktuellen Gamepott. io Data: Ein Adreßzeiger auf die GamePortTrigger-Datenstruktur, die die Eingabebedingungen beschreibt. io_Length: Die Länge der GamePortTrigger-Datenstruktur, also 8. 8.6 Das Keyboard-Device Das Keyboard-Device verfügt zwar nicht über eigene Datenstrukturen, jedoch werden wie bei den anderen Devices mehrere Befehle über eine /OStdRegq-Datenstruktur bereitgestellt. Diese werden wir hier kurz aufführen. Folgende Standardbefehle stehen in diesem Device zur Verfügung: ee C Modula-2 Dez Beschreibung CMD_RESET reset 1 Setzt das KeyBoard-Device in den Ursprungszustand. CMD_CLEAR clear 5 Löschen des Tastaturpuffers. Die folgenden Befehle sind zusätzlich definiert (zu den Definitionen in C und Assembler gehört jeweils das Präfix KBD ): C Modula-2 Dez Beschreibung READEVENT readEvent 9 Lesen eines Tastatur-Events. io Data: Der Adreßzeiger auf eine Liste von /nputEvent-Datenstrukturen. io_Length: Die Anzahl der /nputEvent-Datenstrukturen mal 22. READMATRIX readMatrix 10 Lesen der gesamten Tastaturmatrix. io_Data: Ein Adreßzeiger auf einen Puffer, dessen einzelne Bits angeben, ob die korrespondieren- de Taste gedrückt ist (1) oder nicht (0). io Length: Muß groß genug sein, um den Puffer zu enthalten. ADDRESETHANDLER addResetHandler 11 _Fügt eine Liste von Routinen vor die Systemreset-Routine ein. REMRESETHANDLER remResetHandler 12 Entfernt eine zuvor eingefügte Liste von Routinen. RESETHANDLERDONE resetHandlerDone 13 | _Signalisiert, daß die eigenen Reset- Routinen ausgeführt wurden. BEACHTE: Der Amiga 500 und 2000 unterstützt nicht die eigenen Reset-Routinen. Durch + + wird bei ihnen unmittelbar ein Hard-Reset durchgeführt. 8.7 Das Narrator-Device Das Narrator-Device steuert die Sprachausgabe, also die akustische Ausgabe von Zeichenketten, die die dafür vorgesehenen Phoneme enthalten muß. Folgende Standardbefehle stehen in diesem Device zur Verfügung (zu den Definitionen in C und Assembler gehört jeweils das Präfix CMD _): C Modula-2 Dez Beschreibung RESET reset l _ Unterbricht eine eventuell laufende Sprachausgabe und setzt alle Parameter auf die ursprünglichen Werte zurück. READ read 2 Liest die zu der augenblicklichen Aussprache gehörende Mundform. WRITE write 3 Eine Null-terminierte Phonem- Zeichenkette wird akustisch ausgegeben. STOP stop 6 _ Unterbricht die Sprachausgabe. Modula-2 start Dez 7 Beschreibung Fährt nach der Unterbrechung durch Für dieses Device sind darüber hinaus noch folgende Fehlermeldungen definiert (zu den Definitonen in C und Assembler gehört jeweils das Präfix ND _): C NOMEM NOAUDLIB MAKEBAD UNITERR CANTALLOC UNIMPI NOWRITE EXPUNGED PHONERR RATEERR PITCHERR SEXERR MODEERR FREQERR VOLERR Modula-2 moMem noAudLib makeBad unitErr cantAlloc unimpl noWrite expunged phonErr rateErr pitchEır sexErr modeErr fregErr VolEır Dez -2 -3 -4 -5 -6 -7 -8 Beschreibung Es konnte kein Speicherplatz allokiert werden. Das Audio-Device konnte nicht geöffnet werden. Ein Fehler beim Aufruf der Make Library-Routine. Eine andere Unitnummer als O ist unzulässig. Die Audio-Kanäle konnten nicht allokiert werden. Nicht implementierter Befehl. Aufruf von CMD_READ, ohne daß vorher CMD_WRITE aufgerufen wurde. Das Device existiert nicht mehr. Ein Fehler in der Phonem-Zeichen- kette. Der Parameter rate liegt außerhalb des Gültigkeitsbereichs (40-400). Der Parameter pitch liegt außerhalb des Gültigkeitsbereichs (65-320). Der Parameter sex liegt außerhalb des Gültigkeitsbereichs (0 oder 1). Der Parameter mode liegt außerhalb des Gültigkeitsbereichs (0 oder 1) Der Parameter sampfregq liegt außerhalb des Gültigkeitsbereichs (5000-28000). Der Parameter volume liegt außerhalb des Gültigkeitsbereichs (0-64). narrator_rb Offset C (devices/narrator.h) Modula-2 (Narrator) struct narrator_rb IONarrator = RECORD struct IOStdReq message; message:lOStdReg; UWORD rate; rate: CARDINAL; UWORD pitch; pitch:'CARDINAL; UWORD mode; mode:CARDINAL; UWORD sex; sex:CARDINAL; UBYTE *ch_masks; chMasks: ADDRESS; UWORD nm_masks; nmMasks:CARDINAL; UWORD volume; volume:CARDINAL; UWORD sampfreg; sampFreq:CARDINAL; UBYTE mouths; mouths:UByte; UBYTE chanmask; chanMask:UByte; UBYTE numchan; numChan:UByte; UBYTE pad; pad:BYTE; b END; Assembler Präfix: NDI_ Syntax: Strukturname = ND/ Datenstrukturenreferenz Keine. Routinenreferenz »Exec«: OpenDevice. > Beschreibung Wie bei den anderen Devices ist dies eine erweiterte /[OStdReg-Datenstruktur, die noch zusätzliche Informationen über die Art der Stimme beinhaltet. Zur Steuerung der Stimme stehen wieder einige Flags und Befehle zur Verfügung. Interessant ist die Möglichkeit über CMD_READ Informationen über die aktuelle Mundform abzufragen (siehe auch die hierauf folgende Datenstruktur mouth_rb). I message 0x0000 (0) J rate 0x0030 (48) „I pitch 0x0032 (50) WI mode 0x0043 (52) Eine eingebundene /OStdReg-Datenstruktur, über die die Verbindung zu dem Device hergestellt wird. Dieser Wert bestimmt die Sprechgeschwindigkeit. Er ent- spricht in etwa den gesprochenen Wörtern pro Minute, gültige Werte liegen zwischen 40 und 400. Die mittlere Tonlage der Sprachausgabe, gültige Werte lie- gen zwischen 65 und 320. Folgende zwei Konstanten definieren die Modi für die Art der Betonung: NATURALFO ROBOTICFO 4 sex 0x0036 (54) C MALE FEMALE „J ch_masks 0x0038 (56) U nm_masks 0x003C (60) U volume 0x003E (62) I sampfreq 0x0040 (64) J mouths 0x0042 (66) I] chanmask 0x0043 (67) JJ numchan 0x0044 (68) 3 pad 0x0045 (69) Modula-2 Beschreibung natural Ergibt eine menschliche Sprechweise mit entsprechenden Betonungen. robotic Ergibt eine monotone, gleichmäßige Betonung. Folgende zwei Konstanten definieren das Geschlecht des Sprechers: Modula-2 Dez Beschreibung male 0 Es wird eine männliche Stimme simuliert. female 1 Es wird eine weibliche Stimme simuliert. Ein Adreßzeiger auf eine Tabelle mit Kanalmasken, die definieren, welche Ausgabekanäle für die Sprachausgabe benutzt werden (siehe auch » Audio«). Die Anzahl der Kanalmasken, auf die ch_masks zeigt (siehe auch »Audio«). Über diesen Wert wird die durchschnittliche Lautstärke der Sprachausgabe festgelegt, gültige Werte liegen zwischen 0 und 64. Die Sampling-Frequenz, mit der die Sprachausgabe erfolgt, gültige Werte liegen zwischen 5000 und 28000. Steht an dieser Stelle 1, so wird eine Abfrage der zu einem Phonem gehörenden Mundform ermöglicht (siehe die hier- auf folgende mouth_rb-Datenstruktur). Ein systeminterner Adreßzeiger für Audio-Allocation- Masks. Ein systeminterner Wert für die Anzahl der in chanmask benutzten Masken. Ein Dummerchen... (unbedeutender Füllwert) mouth_rb oe C (devices/narrator.h) Modula-2 (Narrator) struct mouth_rb Mouth = { RECORD struct narrator_rb voice; voice:IONarrator; UBYTE width; width:UByte; UBYTE height; height:UByte; UBYTE shape; shape:BYTE; UBYTE pad; pad:BYTE; 5 END; Assembler Präfix: MRB_ Syntax: Strukturname = MRB Datenstrukturenreferenz Keine. Routinenreferenz Keine. > Beschreibu ng Durch diese Datenstruktur werden zu einer Stimme Daten über die augenblickliche Mundform bereit- gestellt. Damit ist es möglich, grafisch einen Mund zu simulieren, dessen Bewegungen mit der Stimme zusammenpassen. I voice 0x0000 (0) Eine eingebundene /ONarrator-Datenstruktur, die die Stim- me definiert, zu der Informationen über die Mundform erwünscht sind. 1 width 0x0046 (70) Dieser Wert entspricht der momentanen Breite des Mundes. J height 0x0047 (71) Dieser Wert entspricht der momentanen Höhe des Mundes. I shape 0x0048 (72) Ein Systembyte, von dem Sie die Finger lassen sollten... J pad 0x0049 (73) Ein Dummerchen... (unbedeutender Füllwert) 8.8 Das Parallel-Device Das Parallel-Device übernimmt die Steuerung der parallelen Schnittstelle am Amiga. Die Kommunika- tion mit diesem Device läuft wieder über eine /OStdReg-Datenstruktur. In io_Data muß der Adreßzeiger auf dem Speicherbereich stehen, aus dem bzw. in den gelesen werden soll, und in io_Length die Länge dieses Speicherbereiches in Bytes. Folgende Standardbefehle stehen zur Verfügung (zu den Definitionen in C und Assembler gehört das Präfix CMD _): Modula-2 reset read write stop start flush Beschreibung Führt einen Reset der parallelen Schnittstelle durch. Liest Daten von der parallelen Schnittstelle. Sendet Daten zur parallelen Schnitt- stelle. Unterbricht die Datenübertragung. Führt die durch STOP unterbrochene Datenübertragung wieder fort. Löscht alle zur Ein- und Ausgabe bereitstehenden »I/O-Requests«. Für das Parallel-Device sind folgende Befehle zusätzlich definiert (zu den Definitionen in C und Assembler gehört das Präfix PDCMD ): QUERRY SETPARAMS Modula-2 querry setParams Dez Beschreibung Ermittelt den aktuellen Port-Status (io_Status). Setzt neue Parameter für die Schnitt- stelle. Folgende Fehlermeldungen sind definiert (zu den Definitionen in C und Assembler gehört das Präfix ParErr_): C DEVBUSY BUFTOBIG INVPARAM LINEERR NOTOPEN PORTRESET INITERR Modula-2 devBusy buffToBig invParam lineErr notOpen portReset initErr Beschreibung Das Parallel-Device arbeitet gerade. Der Zwischenspeicher ist zu groß. Die gewählte Parameterveränderung ist nicht erlaubt. Ein Übertragungsfehler ist aufgetre- ten. Das Parallel-Device konnte nicht geöffnet werden. An der parallelen Schnittstelle wird ein Reset durchgeführt. Die Initialisierung des Parallel- Devices verlief nicht erfolgreich. IOExtPar Offset C (devices/parallel.h) Modula-2 (Parallel) struct IOExtPar IOExtPar = RECORD struct IOStdReq IOPar; ioPar:IOStdRegq; ULONG io_PExtFlags; pExtFlags: LONGCARD; UBYTE io_Status; status:StatusSet; UBYTE io_ParFlags; parFlags:ParFlagset; struct IOPArray io_PTermArray; pTermArray:IOPArray; } END; Assembler Syntax: Strukturname = IOEXTPAR Definition der einzelnen Parameter in Versalien. Datenstrukturenreferenz Keine. Routinenreferenz »Exec«: OpenDevice. Ss eschreihüne Bei der /OExtPar-Datenstruktur handelt es sich um eine für das Parallel-Device erweiterte /OStdReg- Datenstruktur. Für den Datenaustausch stehen insbesondere die Standard-Befehle der /OStdReg-Daten- struktur zur Verfügung. 1 IOPar 0x0000 (0) Eine eingebundene /OStdReg-Datenstruktur. Die zur Verfü- gung stehenden Befehle und Fehlermeldungen sind am Anfang dieses Abschnitts beschrieben. J io_PExtFlags 0x0030 (48) Eine in den vorliegenden Versionen unbenutzte 4-Byte- Marke. J io_Status 0x0034 (52) In diesem Feld steht nach der Anwendung des Befehls PDCMD _QUERY der aktuelle Status der parallelen Schnitt- stelle bzw. des angeschlossenen Geräts. In älteren Versionen sind JOPTB_PARBUSY und /IOPTB_PARSEL miteinander vertauscht. Zu den Definitionen in C gehört das Präfix: IOPTB_; ın Assembler werden die Bits direkt definiert: BITDEF IOPT,,; Beschreibung PARBUSY pBusy 0 Bit gesetzt: Das Gerät tut gerade nichts. Bit gelöscht: Das Gerät arbeitet gerade. PAPEROUT PaperOut l Bit gesetzt: Soweit alles OK. Bit gelöscht: Drucker hat kein Papier. Modula-2 i Beschreibung PARSEL Bit gesetzt: Das Gerät ist im OFF- LINE-Zustand. Bit gelöscht: Das Gerät ist im ONLINE-Zustand. Bit gesetzt: Die Schnittstelle dient zur Ausgabe. Bit gelöscht: Die Schnittstelle dient zur Eingabe. „4 io_ParFlags 0x0035 (53) Folgende Bits haben in dieser 1-Byte-Marke gesetzt eine Bedeutung (zu den Definitionen in C gehört das Präfix: PARB_; in Assembler werden die Bits direkt definiert: BIT- DEF PAR,,;): C Modula-2 Dez Beschreibung EOFMODE eofMode 2 Als Terminator gilt nicht das Standard-Nullbyte, sondern es gelten die in io_PTermrray definier- ten Terminatoren. SHARED shared 32 Es können mehrere Tasks gleichzei- tig auf die Schnittstelle zugreifen. Dieser Modus ist jedoch nicht zu empfehlen, da die Daten mehrerer Tasks bei der Ausgabe vermischt werden. I io_PTermArray 0x0036 (54) Eine eingebundene /OPArray-Datenstruktur, in der bis zu acht Terminatoren definiert werden können. IOPArray Ki C (devices/parallel.h) Modula-2 (Parallel) Hex Dez struct IOPArray IOPArray = { RECORD ULONG PTermArrayO; pTermArray0:LONGCARD; ULONG PTermArray]; pTermArray 1:LONGCARD; b END; Assembler Syntax: Strukturname = PTERMARRAY PtermArray0 —> PTERMARRAY 0 PtermArrayl —> PTERMARRAY 1 Datenstrukturenreferenz »Parallel«: IOExtPar. Routinenreferenz Keine. > Beschreibung In dieser Datenstruktur können bis zu acht Terminatoren definiert werden, bei deren Auftreten sofort der Schreib-Lese-Vorgang abgebrochen wird. Werden weniger als acht Terminatoren definiert, so müssen die freien Stellen mit dem Wert des letzten Terminators belegt werden. SI PTermArray0 0x0000 (0) In diesem 4 Byte langen Wert werden die ersten vier Termi- natoren definiert. J PTermArrayl 0x0004 (4) In diesem 4 Byte langen Wert werden die letzten vier Termi- natoren definiert. 8.9 Das Printer-Device Wie nicht anders zu erwarten, läuft über dieses Device die eigentliche Druckerausgabe. Dazu gehört insbesondere das Senden von Druckerkommandos sowie die Text- und Grafikausgabe auf dem Drucker. Für druckerspezifische Anpassungen ist dieses Device jedoch nicht zuständig, dazu gibt es das PrtBase- Device. Für die einfache Textausgabe reicht eine normale /OStdReg-Datenstruktur, in der die Kommandos CMD_WRITE (3) und PRD_RAWWRITE (9) verwendet werden können. Folgende Stan- dardbefehle sind in diesem Device zulässig: Modula-2 Dez Beschreibung CMD_INVALID invalid 0 Setzt das Device in den Error- Zustand. CMD_RESET reset 1 Führt am Drucker ein Reset durch. CMD_WRITE write 3 Text auf dem Drucker ausgeben. io_Data: Ein Adreßzeiger auf die Zeichenkette, die auf den Drucker ausgegeben wird. io Length : Die Länge der Zeichenkette oder -1, wenn es eine Null-terminierte ist. CMD_STOP stop 6 _ Unterbricht die Ausgabe auf den Drucker. CMD_START start 7 Führt die unterbrochene Ausgabe wieder fort. CMD_FLUSH flush 8 Löschen aller bereitstehenden »IORequests«. IOPrtCmdRegq oe C (devices/printer.h) Modula-2 (Printer) Hex De | struct IOPrtCmdReq IOPrtCmdReq = [ RECORD 0000 0 struct Message io_Message; message:Message; 0014 20 struct Device *io_Device; device:DevicePtr; 0018 24 struct Unit *io_Unit; unit:UnitPtr; 001C 28 UWORD io_Command; command:CARDINAL; 001E 30 UBYTE io_Flags; flags:IOFlagSet; 001F 31 BYTE io_Eırror; error:Er1ror; 0020 32 UWORD io_PrtCommand; prtCommand:CARDINAL; 0022 34 UBYTE io_ParmO; parmO:UByte; 0023 35 UBYTE io_Parm]; parm1l:UByte; 0024 36 UBYTE io_Parm?; parm2:UByte; 0025 37 UBYTE io_Parm3; parm3:UByte; 0026 38 1: END; Assembler Die ersten sechs Parameter (/ORequest) sind nicht definiert. Datenstrukturenreferenz Keine. Routinenreferenz »ExecSupport«: CreateExtIO, DeleteExtlO. D__.> Beschreibung Diese Datenstruktur ist eine für das Printer-Device abgewandelte IORequest-Datenstruktur. Mit ihr können dem Drucker Druckerkommandos zur Ausführung übergeben werden. „1 io_Message 0x0000 (0) Eine eingebundene Message-Datenstruktur. „1 io_Device 0x0014 (20) Ein Adreßzeiger auf eine Device-Datenstruktur, die dieses Device spezifiziert. 1 io_Unit 0x0018 (24) Ein Adreßzeiger auf eine Unit-Datenstruktur. U io_Command 0x001C (28) Es ist nur folgender Befehl definiert: Modula-2 Dez Beschreibung PRD_PRTCOMMAND prtCommand 10 Senden einer Kontrollsequenz. 3 io_Flags 0x001E (30) (wie in /[OStdReg-Datenstruktur) Q io_Error 0x001F (31) Folgende Fehlermeldungen sind extra definiert (zu den Definitionen in C und Assembler gehört jeweils das Präfix PDERR ): CANCEL INTERNALMEMORY BUFFERMEMORY I io_PrtCommand 0x0020 (32) Modula-2 cancel internalMemory bufferMemory Dez Beschreibung l Durch Benutzer abgebrochen. 6 Es ist nicht genug Speicherplatz für interne Variablen vorhanden. Es ist nicht genug Speicherplatz für den Druckerpuffer vorhanden. Folgende Kommandosequenzen (No.) sind definiert: oo So nn PP wDND-- 0 oO DW DDDDDDDDDDesm mm md m m m m oO Do Oo X SINN Gi PP UDDNDTO O0 X SION WG PR UODDND- DO aRlIS aRIND aIlND aNEL aRI aSGRO aSGR3 aSGR23 aSGR4 aSGR24 aSGRI aSGR22 aSFC aSBC aSHORPO aSHORP2 aSHORPI aSHORP4 aSHORP3 aSHORP6 aSHORPS5 aDEN6 aDENS aDEN4 aDEN3 aDEN?2 aDENI1 aSsUS2 aSUS]1 asUs4 asUS3 aSsUSO aPLU = ind nel ri sgrÜ sgr3 sgr23 sgr4 sgr24 sgrl sgr22 sfc sbc shorpO shorp2 shorpl shorp4 shorp3 shorp6 shorp5 den6 den5 den4 den3 den? den] sus2 sus1 sus4 sus3 susO plu ESCc ESC#H1 ESCD ESCE ESCM ESC[0Om ESC[3m ESC[23m ESC[4m ESC[24m ESC[im ESC[22m SGR30-39 SGR40-49 ESC[Ow ESC[2w ESC[1w ESC[4w ESC[3w ESC[6w ESCI5w ESCI[6"z ESCI5"z ESC[4"z ESC[3"z ESC[2"z ESCI1"z ESCI2v ESC[1v ESC[4v ESC[3v ESC[Ov ESCL Druckerreset Druckerinitialisierung If (linefeed); Zeilenvorschub Return und Zeilenvorschub Zeilenvorschub rückwärts Schriftstil: normal Schriftstil: kursiv (italic) ein Schriftstil: kursiv (italic) aus Schriftstil: unterstrichen ein Schriftstil: unterstrichen aus Schriftstil: fett ein Schriftstil: fett aus bei Farbdrucker: setzt Vordergrundfarbe bei Farbdrucker: setzt Hintergrundfarbe Schriftart: Pica (normal) Schriftart: Elite ein Schriftart: Elite aus Schriftart: Schmalschrift ein Schriftart: Schmalschrift aus Schriftart: Breitschrift ein Schriftart: Breitschrift aus Schattenschrift ein Schattenschrift aus doppelter Anschlag ein doppelter Anschlag aus NLQO (NearLetterQuality) ein NLQ (NearLetterQuality) aus Hochgestellt ein Hochgestellt aus Tiefgestellt ein Tiefgestellt aus Teststellung normal Teillinie aufwärts aPLD aFNTO aFNTl aFNT2 aFNT3 aFNT4 aFNTS5 aFNT6 aFNT7 aFNT8 aFNT9 aFNT10 aPROP2 aPROP1 aPROPO alss aJFY5 aJFY7 aJFY6 aJFYO aJFY3 aJFY1 aVERPO aVERP1 aSLPP aPERF aPERFO aLMS aRMS alMS aBMS aSIBM aSLRM aCAM aHTS aVTSs aTBCoO alBC3 alBCl aTBC4 aTBCALL alIBSALL pld fntO fntl fnt2 fnt3 fnt4 fnt5 fnt6 fnt7 fnt8 fnt9 fnt10 prop2 propl propO tss j£fy5 jfy7 jfy6 jfyO jfy3 jfyl verpO verpl slpp perf perfÜ Ims ms tms bms stbm sIrm cam hts vis tbcO tbc3 tbc1 tbc4 tbcall tbsall ESCK ESC(B ESC(R ESC(K ESC(A ESC(E ESC(H ESC(Y ESC(Z ESC(JI ESC(6 ESC(7 ESC[2p ESC[Ip ESC[Op ESC[nE ESCIS F ESC[7 F ESCI[6 F ESC[O F ESC[3 F ESCI1 F ESC[0z ESC[1z ESCInt ESCIng ESC[Oq ESC#9 ESC#O ESCHE ESC#2 ESCIPn]; ESC[Pn]; ESCH3 ESCH ESCJ ESC[0g ESC[3g ESC[ig ESC[4g ESC#4 ESC#5 Beschreibung Teillinie abwärts Zeichensatz: USA Zeichensatz: Frankreich Zeichensatz: Deutschland Zeichensatz: England Zeichensatz: Dänemark I Zeichensatz: Schweden Zeichensatz: Italien Zeichensatz: Spanien Zeichensatz: Japan Zeichensatz: Norwegen Zeichensatz: Dänemark I Proportionalschrift ein Proportionalschrift aus Proportionalschrift löschen Zeichenabstand n für Proportionalschrift Druckbild: linksbündig Druckbild: rechtsbündig Druckbild: Blocksatz ein Druckbild: Blocksatz aus Platzhalter für Proportionalschrift Zentrierung für Proportionalschrift Zeilenabstand 1/8" Zeilenabstand 1/6" Seitenlänge: n Zeilen Am Seitenende n Zeilen überspringen Am Seitenende keine Zeilen überspringen linken Rand setzen rechten Rand setzen oberen Rand setzen unteren Rand setzen oberen (nl) und unteren (n2) Rand setzen Pn?2r linken (nl) und rechten (n2) Rand setzen Pn?r Ränder löschen horizontalen Tabulator setzen vertikalen Tabulator setzen horizontalen Tabulator löschen alle horizontalen Tabulatoren löschen vertikalen Tabulator löschen alle vertikalen Tabulatoren löschen alle Tabulatoren löschen Standard-Tabulatoren setzen aEXTEND extend ESC[Pn”x aRAW ESC[Pn”r folgendes Zeichen ist ein Druckerkommando folgende Zeichen im RAW-Code io ParmO 0x0022 (34) io Parmi1 0x0023 (35) io_ Parm2 0x0024 (36) io Parm3 0x0025 (37) ED oo IODRPReq struct IODRPReq Erstes Zeichen der Steuersequenz. Zweites Zeichen der Steuersequenz. Drittes Zeichen der Steuersequenz. Viertes Zeichen der Steuersequenz. IODRPReq = C (devices/printer.h) Modula-2 (Printer) RECORD { 0000 0 struct Message io_Message; message:Message; 0014 20 struct Device *1o_Device; device:DevicePtr; 0018 24 struct Unit *io_Unit; unit:UnitPtr; 001C 28 UWORD io_Command; command:CARDINAL; 0O01E 30 UBYTE io_Flags; flags:IOFlagsSet; O01F 31 BYTE io_Error; error:Error; 0020 32 struct RastPort *io_RastPort; rastPort:RastPortPtr; 0024 36 struct ColorMap *io_ColorMap; colorMap:ColorMapPtr; 0028 40 ULONG io_Modes; modesHi:CARDINAL; *:=®*) modes:ViewModeSet; 002C 44 UWORD io_SrcX; srcX:CARDINAL; 002E 46 UWORD io_SrcY; sreY:CARDINAL; en 0030 48 UWORD io_SreWidth; srcWidth:CARDINAL; 0032 50 UWORD io_SrcHeight; srcHeight:CARDINAL; > 0034 52 LONG io_DestCols; destCols:LONGINT,; 0038 56 LONG io_DestRows; destRows:LONGINT, 003C 60 UWORD io_Special; special:SpecialSet; 003E 62 }; END; Assembler Die ersten sechs Parameter (/ORequest) sind nicht definiert. Datenstrukturenreferenz Routinenreferenz ..». Beschreibung Keine. »ExecSupport«: CreateExtlO, DeleteExtIO. Diese Datenstruktur ist eine für das Printer-Device abgewandelte /ORequest-Datenstruktur. Mit ihr können Hardcopies von frei wählbaren Bildschirmausschnitten erstellt werden. „1 io_Message 0x0000 (0) 1 io_Device 0x0014 (20) J io_Unit 0x0018 (24) Eine eingebundene Message-Datenstruktur. Ein Adreßzeiger auf eine Device-Datenstruktur, die dieses Device spezifiziert. Ein Adreßzeiger auf eine Unit-Datenstruktur. „1 io_Command 0x001C (28) PRD_DUMPRPORT Der einzige zusätzlich definierte Befehl ist: Modula-2 Dez Beschreibung dumpRPort 11 Senden einer Kontrollsequenz. „1 io_Flags 0x001E (30) J io_Error 0x001F (31) C CANCEL NOTGRAPHICS INVERTHAM BADDIMENSION DIMENSIONOVERFLOW INTERNALMEMORY BUFFERMEMORY 1 io_RastPort 0x0020 (32) „1 io_ColorMap 0x0024 (36) „J io_Modes 0x0028 (40) „4 io_SreX 0x002C (44) „4 io_SrcY 0x002E (46) „1 io_SrceWidth 0x0030 (48) (siehe /OStdReg-Datenstruktur). Folgende Fehlermeldungen sind extra definiert (zu den Definitionen in C und Assembler gehört jeweils das Präfix PDERR.): Modula-2 Dez Beschreibung cancel 1 Durch Benutzer abgebrochen. notGraphics 2 Der angesprochene Drucker ist nicht grafikfähig. invertHam 3 Im HAM-Modus ist kein Invertieren des Ausdrucks möglich. badDimension 4 Die angegebenen Dimensionen sind unzulässig. dimensionOverflow 5 Die angegebenen Dimensionen sind zu groß. internalMemory 6 Esistnicht genug Speicherplatz für interne Variablen vorhanden. bufferMemory 7 Esist nicht genug Speicherplatz für den Druckerpuffer vorhanden. Ein Adreßzeiger auf die zu dem auszudruckenden Bild- schirmausschnitt gehörende RastPort-Datenstruktur. Ein Adreßzeiger auf die zu dem auszudruckenden Bild- schirmausschnitt gehörende ColorMap-Datenstruktur. In diesem Feld steht, in welchem View-Mode sich der aus- gewählte Bildschirmausschnitt befindet. Die x-Koordinate der linken oberen Ecke des zu druckenden Bildschirmausschnitts. Die y-Koordinate der linken oberen Ecke des zu druckenden Bildschirmausschnitts. Die Breite des zu druckenden Bildschirmausschnitts. Q io_SrcHeight 0x0032 (50) Die Höhe des zu druckenden Bildschirmausschnitts. I] io_DestCols 0x0034 (52) Dieser Wert bestimmt die Breite des Ausdrucks. Die Maß- einheit (einzelne Punkte oder 1/1000stel Zoll) wird durch die Flags in io_special definiert. Istio_DestCols größer als 0, so bestimmt dieser Wert direkt die Breite des Ausdrucks, ist er gleich 0, so wird der Ausdruck die gesamte Papierbreite einnehmen. Interessant wird es für Werte kleiner als 0. In diesem Fall bestimmt der Betrag dieses Wertes im Zusam- menhang mit io _DestRows einen Vergrößerungs-, bzw. Verkleinerungsfaktor für den Ausdruck. Der Faktor errech- net sich folgendermaßen: lio_DestCols| Faktor := io_DestRows Dieser Wert bestimmt die Höhe des Ausdrucks. Die Maß- einheit (einzelne Punkte oder 1/1000stel Zoll) wird durch die Flags in io_special definiert. Istio_DestRows größer als 0, so bestimmt dieser Wert direkt die Höhe des Ausdrucks (solange io_DestCols größer oder gleich 0), ister gleich 0, so wird der Ausdruck die gesamte Papierhöhe einnehmen. U io_DestRows 0x0038 (56) I io_Special 0x003C (60) Gesetzte Bits haben jeweils die folgende Bedeutung: C Modula-2 Hex Beschreibung MILCOLS milCols 0001 Die Maßeinheit für io_DestCols ist 1/1000stel Zoll. MILROWS milRows 0002 Die Maßeinheit für io_DestRows ist 1/1000stel Zoll. FULLCOLS fullCols 0004 Der Ausdruck erhält die maximal mögliche Breite. FULLROWS fullRows 0008 Der Ausdruck erhält die maximal mögliche Höhe. FRACCOLS fracCols 0010 Breite des Ausdrucks = maximale Breite /io_DestCols. FRACROWS fracRows 0020 Höhe des Ausdrucks = maximale Höhe / io_DestRows. CENTER center 0040 Der Ausdruck wird zentriert. ASPECT aspect 0080 Der Ausdruck wird um 90 Grad gedreht. DENSITYI densityl 0100 DENSITYI bis DENSITY7 DENSITY2 density2 0200 definieren die Zeichendichte. des DENSITY4 density4 0400 Grafikausdrucks. Dabei entspricht die Endziffer. 1 der minimalen, die 7 der maximalen Zeichendichte. 310 Modula-2 Hex Beschreibung NOFORMFEED 0800 Am Ende des Ausdrucks wird kein Seitenvorschub (ff) ausgeführt. TRUSTME | 1000 Es wird kein Druckerreset aus- geführt. NOPRINT Ä 2000 Es werden zwar die Dimensions- Umrechnungen durchgeführt, jedoch wird kein Ausdruck ausgege- ben. Somit können berechnete Werte nochmals überprüft und gegebenen- falls verändert werden. Weiterhin sind noch folgende Konstanten zur Bestimmung der Zeichendichte definiert: Modula-2 Hex Beschreibung DENSITY3 density3 DENSITY1 bis DENSITY7 DENSITYS5 density5 definieren die Zeichendichte des DENSITY6 density6 Grafikausdrucks. Dabei entspricht DENSITY7 density 7 die Endziffer 1 der minimalen, die 7 der maximalen Zeichendichte. 8.10 Das Serial-Device Das Serial-Device übernimmt die Steuerung der seriellen Schnittstelle am Amiga. Die Kommunikation mit diesem Device läuft wieder über eine /[OStdReg-Datenstruktur. In io_Data muß der Adreßzeiger auf den Speicherbereich stehen aus/in den gelesen werden soll und in io_Length die Länge dieses Speicher- bereiches in Bytes. Folgende Standardbefehle stehen zur Verfügung (zu den Definitionen in C und Assembler gehört das Präfix CMD ): Modula-2 Beschreibung Führt an der Schnittstelle ein Reset durch. Liest Daten von der seriellen Schnittstelle. Modula-2 write clear stop Beschreibung Sendet Daten zu der seriellen Schnittstelle. Setzt die Adreßzeiger der Lesepuffer zurück. Unterbricht die Datenübertragung (sendet ein xOFF-Signal an das angeschlossene Gerät). Führt mit der durch STOP unterbro- chenen Datenübertragung fort. Löscht die zur Ein- oder Ausgabe bereitstehenden »I/O-Requests«. Für das Serial-Device sind folgende Befehle zusätzlich definiert (zu den Definitionen in C und Assembler gehört das Präfix: SDCMD ): QUERRY BREAK SETPARAMS Modula-2 Dez query 9 break 10 setParams 11 Beschreibung Ermittelt den Status der Schnittstelle. Unterbricht die Datenübertragung. Setzt für die Schnittstelle neue Parameter. Für das Serial-Device sind folgende Fehlermeldungen definiert (zu den Definitionen in C und Assembler gehört das Präfix: SerErr_): C DEVBUSY BAUDMISMATCH INVBAUD BUFFERR INVPARAM LINEERR NOTOPEN PORTRESET PARITYERR INITERR TIMEERR Modula-2 devBusy baudMismatch invBaud buffErr invParam lineErr notOpen portReset parityErr initErr 10 timeErr 11 Beschreibung Schnittstelle überträgt gerade Daten. Unbenutzt. Unbenutzt. Es ist nicht genug Speicherplatz für den Zwischenspeicher vorhanden. Die Parameter enthalten unzulässige Werte. Ein Übertragungsfehler ist aufgetre- ten. Unbenutzt. Unbenutzt. Ein Paritätsfehler ist aufgetreten (die Prüfsumme stimmt nicht). Unbenutzt. Ein Fehler in io_BrkTime. BUFOVERFLOW NODSR NOCTS Modula-2 Dez Beschreibung bufOverflow 12 nodsr 13 nocts 14 DETECTEDBREAK detectedBreak 15 IOExtSer Hex Dez C (devices/serial.h) struct IOExtSer { struct IOStdReq IOSer; ULONG io_CtlChar; ULONG io_RBufLen; ULONG io_ExtFlags; ULONG io_Baud; ULONG io_BrkTime; struct IOTArray io_TermArray; UBYTE io_ReadLen; UBYTE io_WriteLen; UBYTE io_StopBits; UBYTE io_SerFlags; UWORD io_Status; 5 Der Zwischenspeicher ist zu klein. Es gab kein DSR-Signal (Data Set Ready). Unbenutzt. Letztes Zeichen war ein Terminator. Modula-2 (Serial) IOExtSer = RECORD ioSer:IOStdReg; cetlChar-LONGCARD; rBufLen:LONGCARD; extFlags:ExtSerFlagsSet; baud:LONGCARD; brk Time: LONGCARD; termArray:IOT Array; readLen:UByte; writeLen:UByte; stopBits:UByte; serFlags:SerFlagsSet; status:StatusSet; END; Strukturname = JOEXTSER Definition der Parameter in Versalien. Assembler Syntax: Datenstrukturenreferenz Keine. Routinenreferenz »Exec«: L____> Beschreibung OpenDevice. Bei der /OExtSer-Datenstruktur handelt es sich um eine für das Serial-Device erweiterte /OStdReg- Datenstruktur. Für den Datenaustausch stehen insbesondere die Standard-Befehle der /OStdReg-Daten- struktur zur Verfügung. 1 IOSer 0x0000 (0) Eine eingebundene /OStdReg-Datenstruktur, über die die Kommunikation mit dem Device abläuft. Eine Beschreibung der einzelnen Befehle steht am Anfang dieses Abschnitts. io_CtiChar 0x0030 (48) io_RBufLen 0x0034 (52) io_ExtFlags 0x0038 (56) io Baud 0x003C (60) io BrkTime 0x0040 (64) io_TermArray 0x0044 (68) io ReadLen 0x004C (76) io_WriteLen 0x004D (77) io_StopBits 0x004E (78) io _SerFlags 0x004F (79) C PARTY_ON PARTY_ODD 7WIRE In diesem 4 Byte langen Feld sind bis zu vier Kontrollzei- chen festgelegt. Unterstützt werden zur Zeit nur die Proto- kollzeichen xON und xOFF. Die Bits 16-23 definieren das xOFF-, die Bits 24-31 dasxON-Zeichen. Voreingestellt sind für xON 0x11 (17) und für xOFF 0x13 (19). Die Länge des Lesepuffers in Bytes (normalerweise 512 Byte). Eine zur Zeit noch nicht unterstützte 4-Byte-Marke für Zusatzinformationen. Die Baudrate für die Übertragung. Die Zeitdauer, die ein Abbruchsignal haben muß, damit es als solches erkannt wird. Diese Angabe erfolgt in Mikro- sekunden. Eine eingebundene /OTArray-Datenstruktur, in der bis zu acht Terminatoren definiert sind. Die Anzahl der Bits, die beim Lesen ein Zeichen definieren. Normalerweise also 7 oder 8. Die Anzahl der Bits, die beim Schreiben ein Zeichen definie- ren. Normalerweise also 7 oder 8. Die Anzahl der Stopbits, normalerweise 0, 1 oder 2. Die Bits in dieser 1-Byte-Marke haben gesetzt folgende Bedeutung (zu den Definitionen in C gehört das Präfix: SERF_; in Assembler werden die Bits direkt definiert: BIT- DEF SER,,; ): Modula-2 Bit Beschreibung partyOn 0 Paritätsüberprüfung ist eingeschaltet. partyOdd l Bit gesetzt: Es wird auf ungerade Parität geprüft. Bit gelöscht: Es wird auf gerade Parität geprüft. sevenWire 2 Neben den drei Standard-Übertra- gungsleitungen TXD (Transmit Data), RXD (Receive Data) und GND (Ground) stehen noch folgende zur Verfügung: RTS (Request To Send), CTS (Clear To Send), DSR (Data Set Ready) und DCD (Data Carrier Detect). C QUEUEDBRK RAD_BOOGIE SHARED EOFMODE XDISABLED Modula-2 queuedBrk radBoogie shared eofMode xDisabled Beschreibung Das Break-Kommando wird nicht sofort, sondern erst nach Beendigung des laufenden Schreib-Lese-Vor- gangs gesendet. Steigerung der Lesegeschwindigkeit durch: 1. Weglassen der Paritätskon- trolle; 2. Umgehung des xON-/xOFF Protokolls und 3. 8 Bit pro Zeichen setzen. Die Schnittstelle ist auch von anderen Tasks aus zugängig. Anstelle des Standard-Abbruch- signals (0) sind bis zu acht Termina- toren in io_TermArray definiert. xON-/xOff — Protokoll ist abge- schaltet. 1 io_Status 0x0050 (80) In diesem Langwort steht nach der Anwendung des Befehls PDCMD_OUERY der aktuelle Status der seriellen Schnitt- stelle bzw. des angeschlossenen Geräts. In C und Assembler sind nur die Werte des höheren Wortes extra definiert. Dazu gehört in C das Präfix: /[O_STATF_; in Assembler werden OVERRUN WROTEBREAK READBREAK XOFFWRITE die Bits direkt definiert: BITDEF IOST,,; Modula-2 dataSetReady clearToSend carrierDetect readyToSend dataTerminalReady overrun wroteBreak readBreak xOffWrite Beschreibung Bit gelöscht: Schnittstelle im DSR- Zustand. Bit gelöscht: Schnittstelle im CTS- Zustand. Bit gelöscht: Das Trägersignal ist vorhanden. Bit gelöscht: Schnittstelle im RTS- Zustand. Bit gelöscht: Schnittstelle im DTR- Zustand. Bit gesetzt: Der Lesepuffer ist voll. Bit gesetzt: Ein BRK-Signal wurde gesendet. Bit gesetzt: Ein BRK-Signal wurde gelesen. Bit gesetzt: Ein «OFF-Signal wurde gesendet. Modula-2 Bit Beschreibung XOFFREAD xOffRead Bit gesetzt: Ein «OFF-Signal wurde gelesen. IOTArray oe C (devices/serial.h) Modula-2 (Serial) Hex Dez struct IOTArray IOTArray = { RECORD ULONG TermArray0; termArray0:LONGCARD; ULONG TermArray]; termArray1:LONGCARD; }; END; Assembler Syntax: Strukturname = TERMARRAY TermArray0 —> TERMARRAY 0 TermArrayl —> TERMARRAY ] Datenstrukturenreferenz »Serial«: IOExtSer. Routinenreferenz Keine. ____> Beschreibung In dieser Datenstruktur können bis zu acht Terminatoren definiert werden, bei deren Auftreten sofort der Schreib-Lese-Vorgang abgebrochen wird. Werden weniger als acht Terminatoren definiert, so müssen die freien Stellen mit dem Wert des letzten Terminators belegt werden. 1 TermArray0 0x0000 (0) In diesem 4 Byte langen Wert werden die ersten vier Termi- natoren definiert. 1 TermArrayl 0x0004 (4) In diesem 4 Byte langen Wert werden die letzten vier Termi- natoren definiert. 8.11 Das Timer-Device Dieses Device ermöglicht die Benutzung der beiden Timer des Amiga. Es stehen zwei Units, die sich in der Quelle ihres Taktes unterscheiden, zur Verfügung. Der eine benutzt das »vertikal blank interrupt«, während der andere den Timer des CIA-CHIPS gebraucht. Diese unterscheiden sich voneinander in der Auflösung (kleinste Zeiteinheit) und der Genauigkeit. Der CIA-Timer gibt Zeiträume in Mikrosekunden an, wird aber ab einer Sekunde bereits ungenau. Der Vertikal-Blank-Timer mißt auch über längere Zeiträume genau, hat aber nur eine Genauigkeit bis zu einer 5Ostel-Sekunde. Je nach Anwendung wird man sich also für den einen oder anderen Timer entscheiden. Ein Timer-Device wird durch den Aufruf von OpenDevice mit einer entsprechend initialisierten fimerequest-Datenstruktur geöffnet. Als Unit können Sie, je nach dem, welchen Timer Sie benutzen wollen, einen der folgenden Werte übergeben: Modula-2 Bedeutung UNIT_MICROHZ microHz CIA-Timer. UNIT_VBLANK vBlank Vertical Blank Timer. timerRequest C (devices/timer.h) Modula-2 (Timer) struct timerequest Timerequest = { RECORD 0000 0 struct TORequest tr_node; node:IORequest; 0020 32 struct timeval tr_time; time: TimeVal 0028 40 }; END; Assembler Syntax: Strukturname = TIMEREOQOUEST tr_ Node —> IOTV_ TIME tr time —> IOTV_SIZE Datenstrukturenreferenz Keine. Routinenreferenz Keine. Beschreibung Diese Datenstruktur ist eine erweiterte /ORequest-Datenstruktur. Sie dient zum Öffnen und zur Ansteue- rung des Timer-Devices. I tr_Node 0x0000 (0) Eine /ORequest-Datenstruktur, die zur Ansteuerung des Timer-Devices verwendet wird. Es können mittels Do/O und Sendl/O folgende Befehle an das Device übermittelt werden: Modula2 Bedeutung TR_ADDREQUEST addRequest Warten, bis die in tr_time angegebe- ne Zeit verstrichen ist. TR_GETSYSTIME getSysTime Die Systemzeit in fr_Time einlesen. TR_SETSYSTIME setSysTime Die Systemzeit auf die Zeit in tr_Time setzen. U tr_time 0x0020 (32) Dies ist eine timeval-Datenstruktur, in der Zeitwerte an das Timer-Device übergeben werden. Modula-2 (Timer) struct timeval TimeVal = { RECORD ULONG tv_secs; secs: LONGCARD; ULONG tv_micro; micro:LONGCARD; }; END; Assembler Synatax: Strukturname = TIMEVAL Definition der Parameter in Versalien. Datenstrukturenreferenz »Inpute«: InputEvent. »Intuition«: Preferences. »Timer«: IOTimer, timerRequest. Routinenreferenz Keine. .. —. > Beschreibung Diese Datenstruktur dient zur Speicherung einer Zeit in Form von Mikrosekunden und Sekunden. Bei der Angabe der Systemzeit wird die Anzahl der Sekunden seit dem 1.1.1978 gezählt. 1 tv_secs 0x0000 (0) Hier finden Sie die Anzahl der Sekunden. I tv_micro 0x0004 (4) Dieses Feld gibt die Anzahl der Mikrosekunden an. 8.12 Das TrackDisk-Device Dieses Device erlaubt den direkten Zugriff auf die Tracks und Blöcke der Diskette. Sie wird durch einen Aufruf der OpenDevice-Routine mit einer JOExtTD-Datenstruktur geöffnet. Als Unit wird an Open- Device die Nummer des Laufwerks, das durch dieses Device angesteuert wird (0 bis 4), übergeben. Folgende Standardbefehle stehen im TrackDisk-Device zur Verfügung: Modula-2 Dez Beschreibung CMD_READ 2 Einen oder mehrere Blocks von Dis- kette lesen. iotd Req.io Offset: Die Blocknummer (0..1759) * 512 (Bytes per Block). iotd_Req.io_Data: Ein Adreßzeiger auf einen Puffer im Chip-RAM der Größe 512 * Blockanzahl, in den die Daten eingelesen werden. iotd Req.io Length: 512 * Anzahl der zu lesenden Blocks. iotd_SecLabel: Ein Adreßzeiger auf einen Puffer der Länge 16, in den der Sektor-Label einge- lesen werden kann, oder NULL. Modula-2 Dez Beschreibung CMD_WRITE 3 Einen oder mehrere Blocks auf Dis- kette schreiben. iotd_ Req.io Offset: Die Blocknummer (0..1759) * 512 (Bytes per Block). iotd_Regq.io_Data: Ein Adreßzeiger auf einen Puffer der Größe 512 * Blockanzahl im Chip-RAM, aus dem die Daten gelesen werden. iotd Req.io Length: 512 * Anzahl der zu schreibenden Blocks. iotd_SecLabel: Ein Adreßzeiger auf einen Puffer der Länge 16, aus dem der Sektor-Label gelesen werden kann, oder NULL. CMD_UPDATE 4 Den internen Puffer der Trackdisk- Device auf Diskette schreiben. Zusätzlich sind zu diesem Device folgende Befehle definiert: TD_MOTOR motor 9 Den Laufwerksmotor an-/ausschalten. iotd Req.io Length: 0 = Motor ausschalten; 1 = Motor einschalten. iotd Req.io_Actual: Beinhaltet nach dem Aufruf den vorherigen Zustand. TD_SEEK 10 Der zum Track gehörende Lauf- werkskopf. iotd Req.io Offset: Die Nummer des Tracks, zu dem der Kopf bewegt werden soll. TD_FORMAT 11 Tracks formatieren. Dabei wird der Inhalt des Puffers direkt auf Diskette geschrieben. iotd Regq.io Data: Ein Adreßzeiger auf einen Puffer (im Chip-RAM), der die Länge 512 *11* Track-Anzahl hat. Der Inhalt dieses Puffers wird beim Formatieren auf die Diskette geschrieben. iotd Req.io Length: Die Anzahl der Tracks * 512 (Bytes per Block) * 11 (Sectors per Track) iotd Req.io Offset: Die Nummer des Anfangs-Tracks (0..160). TD_REMOVE remove 12 _ Installiere Diskettenwechselinterrupt iotd Regq.io Data: Ein Adreßzeiger auf eine /nterrupt-Datenstruktur. Modula-2 Dez Beschreibung TD_CHANGENUM changenum 13 Liest die aktuelle Anzahl der Disket- tenwechsel. iotd Req.io _Actual: Ein Adreßzeiger auf eine Interrupt-Datenstruktur. TD_CHANGESTATE changeNum 14 Prüfen, ob eine Diskette eingelegt ist. iotd Req.io Actual: 0 = Eine Diskette im Laufwerk eingelegt, sonst keine Diskette im Laufwerk. TD_PROTSTATUS protStatus 15 _ Prüfen, ob Diskette schreibgeschützt ist. iotd Req.io_Actual: 0 = Die Diskette ist nicht schreibgeschützt, sonst ist sie schreibgeschützt. TD_RAWREAD rawRead 16 Einen bzw. mehrere Tracks bytewei- se (ohne die DOS-Diskettenstruktur zu beachten) einlesen. iotd Req.io Offset: Die Nummer des ersten zu lesenden Tracks (0..160). iotd_Req.io_Data: Einen Adreßzeiger auf einen Puffer im Chip-RAM, in den die Daten eingelesen werden. Seine Größe muß 14716 (Bytes per Track) * Track-Anzahl sein. iotd Regq.io_Length: Hier steht 14716 * Track-Anzahl. iotd_Req.io Flags: Hier muß zur Synchronisation des Lesezugriffs dsa Flag [IOTD_INDEXSYNC gesetzt sein. iotd_Req.io_Actual: Nach dem Aufruf steht hier die Anzahl der tatsächlich gelesenen Tracks. TD_RAWWRITE rawWrite 17 Einen bzw. mehrere Tracks byte- weise (ohne die DOS-Diskettenstruk- tur zu beachten) schreiben. iotd_Req.io_Offset: Die Nummer des ersten zu schreibenden Tracks (0..160) iotd _Req.io_Data: Ein Adreßzeiger auf einen Puffer im Chip-RAM, aus dem die Daten gelesen werden. Seine Größe muß 14716 (Bytes per Track) * Track-Anzahl sein. iotd_Req.io Length: Hier steht 14716 * Track-Anzahl. iotd Req.io Flags: Hiermuß zur Synchronisation des Schreibzugriffs das Flag/JOTD_INDEXSYNC gesetzt sein. iotd_Req.io_Actual: Nach dem Aufruf steht hier die Anzahl der tatsächlich geschriebenen Tracks. Modula-2 Dez Beschreibung TD_GETDRIVETYPE getDriveType 18 _Laufwerkstyp holen. iotd Req.io Actual: 1 = 3,5-Zoll-Laufwerk; 2 = 5,25-Zoll-Laufwerk. TD_GETNUMTRACKS getNumTracks 19 Die maximale Track-Anzahl eines Laufwerks holen. iotd Req.io_Actual: Hier finden Sie nach dem Aufruf die Track-Anzahl (=Zylinderzahl * 2). TD_ADDCHANGEINT addChangelnt 20 Installiere Diskettenwechsel- interrupt.Ist robuster als TD_REMOVE. iotd_Req.io_Data: Ein Adreßzeiger auf eine Interrupt-Datenstruktur. TD_REMCHANGEINT remChangelnt 21 _ Entferne einen Diskettenwechsel- interrupt iotd_Regq.io_Data: Ein Adreßzeiger auf eine /nterrupt-Datenstruktur. TD_LASTCOMM lastComm 22 _ Gibt den zuletzt ausgeführten Befehl an. iotd_Req.io_Actual: Nach dem Aufruf finden Sie hier den gesuchten letzten Befehl. Die folgenden Befehle haben die gleiche Funktion wie die entsprechenden TD_- bzw. CMD -Befehle. Vor Ausführung des Befehls wird aber die Anzahl der Diskettenwechsel geprüft. Ist sie größer als die in iotd Count, so wird der Befehl nicht ausgeführt, da angenommen wird, daß die Diskette gewechselt wurde. Somit wird verhindert, daß versehentlich auf die falsche Diskette zugegriffen wird. Modula-2 Hex ETD_READ extRead ETD_WRITE extWrite ETD_UPDATE extUpdate ETD_CLEAR extClear ETD_MOTOR extMotor ETD_SEEK extSeek ETD_FORMAT extFormat Modula-2 Hex extRawRead 8010 32784 extRawWrite 8011 32785 ETD_RAWREAD ETD_RAWWRITE Folgende Fehlermeldungen sind für das TrackDisk-Device definiert (zu den Definitionen in C und Assembler gehört das Präfix TDERR_): C Modula-2 Dez Beschreibung NOTSPECIFIED notSpecified 20 Ein unidentifizierter Fehler. NOSECHDR noSecHdr 21 Es wurde kein Sektor-Header gefunden. BADSECPREAMBLE badSecPreamble 22 Ein Fehler im Sektor- Preamble. BADSECID badSecID 23 Die Sektor ID ist nicht in Ordnung. BADHDRSUM badHdrSum 24 Die Checksumme des Sektor- Headers ist falsch. BADSECSUM badSecSum 25 Die Checksumme des Sektors stimmt nicht. TOOFEWSECS tooFewSecs 26 Der Track hat zu wenig Sektoren. BADSECHDR badSecHdr 27 Der Sektor-Header ist nicht in Ordnung. WRITEPROT writeProt 28 Die Diskette ist schreibgeschützt. y DISKCHANGED diskChanged 29 Die Diskette wurde gewechselt. SEEKERROR seekError 30 Ein Fehler beim Positionieren des Schreib-Lese-Kopfes. NOMEM noMem 31 Nicht genug Speicherplatz vorhan- den. BADUNITNUM badUnitNum 32 Die Laufwerksnummer stimmt nicht. BADDRIVETYPE badDriveType 33 Der Laufwerkstyp stimmt nicht. DRIVEINUSE drivelnUse 34 Es wird bereits auf das Laufwerk zugegriffen. POSTRESET postReset 33. 22 IOExtTD Offset C (devices/trackdisk.h) Modula-2 (TrackDisk) Hex Dez struct IOExtTD IOExtTD = { RECORD 0000 0 struct IOStdRegq iotd_Regq; req:IOStdRegq; 0030 48 ULONG iotd_Count; count: LONGCARD; C (devices/trackdisk.h) Modula-2 (TrackDisk) ULONG iotd_SecLabel; secLabel:LONGCARD; b END; Assembler Syntax: Strukturname = JOEXTTD Definition der Parameter in Versalien. Datenstrukturenreferenz Keine. Routinenreferenz Keine. ____> Beschreibung Dies ist eine erweiterte /OStdReg-Datenstruktur, die zum Öffnen und zur Ansteuerung des Trackdisk- Devices dient. „1 iotd_Req 0x0000 (0) Eine /OStdReg-Datenstruktur, in der Befehle, Fehlermel- dungen und Daten an und von dem Trackdisk-Device über- mittelt werden. Die Befehle, die am Anfang des Kapitels be- schrieben wurden, stehen im Command-, die Fehlermeldun- gen im Error-Feld. Das Data-Feld beinhaltet einen Adreßzei- ger auf den Datenbuffer. Seine Größe hängt vom Befehl ab, er muß sich aber im Chip-RAM befinden. Das Unit-Feld zeigt auf eine TDU_PublicUnit-Datenstruktur. U iotd_Count 0x0030 (48) Hier steht die aktuelle Anzahl der Diskettenwechsel. Sie wird von den ETD_-Befehlen (siehe oben) benötigt. I iotd_SecLabel 0x0034 (52) Hier kann ein Adreßzeiger auf einen 16 Byte großen Puffer für den Sektor-Label stehen. TDUPublicUnit Hex Den | struct TDU_PublicUnit TDUPublicUnit = [ RECORD 0000 0 struct Unit tdu_Unit; unit:Unit; UWORD tdu_CompOl Track; compO01Track:CARDINAL; UWORD tdu_Comp10Track; comp10Track:CARDINAL; UWORD tdu_Comp11Track; comp11Track:CARDINAL, ULONG tdu_StepDelay; stepDelay:LONGCARD; KO C (devices/trackdisk.h) Modula-2 (TrackDisk) ULONG tdu_SettleDelay; settleDelay:LONGCARD; UBYTE tdu_RetryCnt; retryCnt:[0..255] b END; Assembler Syntax: Strukturname = TDUPUBLICUNIT Definition der Parameter in Versalien. Datenstrukturenreferenz »Trackdisk«: IOExtTD. Routinenreferenz Keine. > Beschreibung Diese Datenstruktur beschreibt ein Trackdisk-Device-Unit. 4 tdu_Unit 0x0000 (0) Eine eingebundene Unit-Datenstruktur, die unter anderem die MsgPort-Datenstruktur des Devices enthält. tdu_Comp01Track 0x0026 (38) 79 tdu_Comp10Track 0x0028 (40) BR tdu_Comp11Track 0x002A (42) 777? tdu_StepDelay 0x002C (44) Anscheinend die Zeit in Mikrosekunden, die nach jedem Schritt des Steppermotors gewartet werden muß. U. E DD J tdu_SettleDelay 0x0030 (48) Ist wohl die Zeit, die nach dem SEEK-Befehl gewartet wer- den muß. „4 tdu_RetryCnt 0x0034 (52) Hier steht die Anzahl von Versuchen, die unternommen werden, bevor ein Fehler gemeldet wird. 8.13 Andere Datenstrukturen der Devices Bei den folgenden Datenstrukturen handelt es sich um Erweiterungen zu verschiedenen Devices. BadBlockBlock C (devices/hardblocks.h) Modula-2 (Handbuch) struct BadBlockBlock BadBlockBlock = { RECORD ULONG bbb_ID; id: ARRAY [0..3] OF CHAR; Offset C (devices/hardblocks.h) Modula-2 (HardBlocks) ULONG bbb_SummedLongs; summedLongs: LONGCARD; ULONG bbb_ChkSum; chkSum: LONGINT,; ULONG bbb_HostID; hostID: LONGCARDB; ULONG bbb_Next; next: LONGCARD; ULONG bbb_Reserved; reserved: LONGCARD; struct BadBlockEntry blockPairs: ARRAY bbb_BadBlockPairs[61] [0..60] OF BadBlockEntry Datenstrukturenreferenz Routinenreferenz > Beschreibung END; »Hardblocks«: RigidDiskBlock Keine. Diese Datenstruktur gehört zu den neueren und ist noch nicht bei allen Compilern in den Include-Files enthalten. Sie definiert den Kopf einer Liste der kaputten Blocks einer Festplatte. Die Nummer der defekten Blocks sowie die der Ausweichblocks werden in einem Feld von BadBlockEntry-Datenstruk- turen gespeichert. Die BadBlockBlock-Datenstruktur samt Liste bildet auf Festplatte normalerweise einen Block. Falls mehr als 61 kaputte Blocks vorhanden sind, können mehrere solcher Blocks über das bbb_Next-Feld verkettet werden. „J 4 [ bbb_ID 0x0000 (0) bbb_SummedLongs 0x0004 (4) bbb_ChkSum 0x0008 (8) bbb_HostID 0x000C (12) bbb_Next 0x0010 (16) bbb_Reserved 0x0014 (20) bbb_BadBlockPairs 0x0018 (24) Eine vier Zeichen lange Kennung, die den Wert »BADB« haben muß. Die Anzahl der Bytes dieser Datenstruktur, über die die Checksumme gebildet wird. Die Checksumme des Blocks. Die SCSI-Zielkennung. Die Nummer des nächsten Blocks in der Liste der BadBlock- Block-Datenstrukturen. Für künftige Erweiterungen. Eine Liste von 61 BadBlockEntry-Datenstrukturen, von denen jede einen kaputten Block und den dazugehörenden Ersatzblock beschreibt. BadBlockEntry C (devices/hardblocks.h) Modula-2 (HardBlocks) struct BadBlockEntry BadBlockEntry = [ RECORD ULONG bbe_BadBlock; badBlock: LONGCARD; ULONG bbe_GoodBlock; goodBlock: LONGCARD; } END; Datenstrukturenreferenz »Hardblocks«: BadBlockBlock. Routinenreferenz Keine. ____> Beschreibung Diese Datenstruktur gehört zu den neueren und ist noch nicht bei allen Compilern in den Include-Files enthalten. Sie gibt die Nummereines kaputten Blocks und des dazugehörenden Ersatzblocks an. Mit Hilfe solcher Datenstrukturen wird eine Liste aller Defekte einer Festplatte erstellt (siehe BadBlocksBlock). I bbe_BadBlock 0x0000 (0) Die Nummer des kaputten Blocks. U bbe_GoodBlock 0x0004 (4) Die Nummer des zu bbe_BadBlock gehörenden intakten Ersatzblocks. BootBlock oe C (devices/bootblock.h) Modula-2 (BootBlock) struct BootBlock BootBlock = { RECORD UBYTE bb_id[4]; id: ARRAY [0..3] OF CHAR; LONG bb_chksum; chkSum:LONGINT; LONG bb_dosblock; dosBlock:LONGINT,; b END; Assembler Syntax: Strukturname = BB Definitionen der einzelnen Parameter in Versalien. Datenstrukturenreferenz Keine. Routinenreferenz Keine. (__> Beschreibung Diese Datenstruktur gibt den Aufbau eines Bootblocks wieder bzw. wird dazu verwendet, einen solchen aufzubauen. Hinter dem letzten Feld kann der Code des Bootprogramms stehen. I bb_id 0x0000 (0) BBNAME_DOS BBNAME_KICK Die hier stehende Zeichenkette gibt an, um was für eine Diskette es sich handelt. Es sind die folgenden zwei Werte zugelassen: Modula-2 Wert Bedeutung nameDos “DOS\W” nameKick “KICK” Dies ist eine Amiga-DOS-Diskette. Dies ist eine Kickstart-Diskette. bb_chksum 0x0004 (4) I bb_dosblock 0x0008 (8) ConUhnit In diesem Feld steht die Checksumme des gesamten (inklu- sive Bootcode) Bootblocks. Hier finden Sie die Nummer des Rootblocks der Diskette. Offset C (devices/conunit.h) Modula-2 (ConUnit) struct ConUnit ConUnit = { RECORD struct MsgPort cu_MP; mp:MsgPort; struct Window *cu_Window; window:WindowPtr; WORD cu_XCP; xCP:INTEGER; WORD cu_YCP; yCP:INTEGER; WORD cu_XMax: xMax:INTEGER; 002C 44 WORD cu_YMax; yMax:INTEGER; 002E 46 WORD cu_XRsSize; xRSize:INTEGER; 0030 48 WORD cu_YRSize; yRSize:INTEGER; 0032 50 WORD cu_XROrigin; xROrigin:INTEGER; 0034 2 WORD cu_YROrigin; yROrigin:INTEGER; 0036 54 WORD cu_XREktant; xRExtant:INTEGER; 0038 56 WORD cu_YREktant; yRExtant:INTEGER; 003 A 58 WORD cu_XMinshrink; xMinShrink:INTEGER; 003C 60 WORD cu_YMinShrink; yMinShrink:INTEGER; 003E 62 WORD cu_XCCP; xcCP:INTEGER; 0040 64 WORD cu_YCCP; ycCP:INTEGER; 0042 66 struct KeyMap keyMapsStruct:KeyMap; cu_KeyMapStruct; 0062 98 UWORD cu_TabStops[80]; tabStops: ARRAY [0..79] OF CARDINAL; 0102 258 BYTE cu_Mask; mask:UByte; 0103 259 BYTE cu_FgPen; fgPen:UByte; 0104 260 BYTE cu_BgPen; bgPen:UByte; 0105 261 BYTE cu_AOLPen; aolPen:UByte; 0106 262 BYTE cu_DrawMode; drawMode:DrawModesSet; om C (devices/conunit.h) BYTE cu_AreaPtSz; APTR cu_AreaPtrn; UBYTE cu_Minterms[B8]; struct TextFont *cu_Font; UBYTE cu_AlgoStyle; UBYTE cu_TxFlags; UWORD cu_TxHeight; UWORD cu_TxWidth; UWORD cu_TxBaseline; UWORD cu_TxSpacing; UBYTE cu_Modes[3]; Modula-2 (ConUnit) areaPtSz:UByte; areaPtrn: ADDRESS; minTerms: ARRAY [0..7] OF UByte; font: TextFontPtr; algoStyle:UByte; txFlags:UByte; txHeight:CARDINAL; txWidth:CARDINAL; txBaseLine:CARDINAL; txSpacing:CARDINAL; modes: ARRAY [0..2] OF UByte; rawEvents: ARRAY [0..2] OF UByte; ; Datenstrukturenreferenz Routinenreferenz [_-___> Beschreibung UBYTE cu_RawEvents[3]; END; »Exec«: IOStdReg. Keine. Diese Datenstruktur bildet die Schnittstelle zwischen dem Console-Device und dem Ein-/Ausgabe- Fenster. Es wird beim Öffnen eines Console-Devices automatisch initialisiert und ihre Adresse in das Unit-Feld der /OStdReg-Datenstruktur eingetragen. Da »Console« über einen eigenen, in der Window- Datenstruktur nicht eingetragenen Rastport in das Fenster schreibt, sind die Rastport-bezogenen Felder der Conunit sehr nützlich. I cu_MP 0x0000 (0) I cu_Window 0x0022 (34) I cu_XCP 0x0026 (38) I cu_YCP 0x0028 (40) I cu_XMax 0x002A (42) I cu_YMax 0x002C (44) 3 cu _XRSize 0x002E (46) I cu_YRSize 0x0030 (48) Eine eingebundene MsgPort-Datenstruktur, die zu dem Console-Device einen Messageport organisiert. Hier steht ein Adreßzeiger auf die Window-Datenstruktur des Fensters, zu dem das Console-Device gehört. Die x-Koordinate des zuletzt ausgegebenen Zeichens (in Zeichen). Die y-Koordinate des zuletzt ausgegebenen Zeichens (in Zeichen). Die größte x-Koordinate, an der ein Zeichen noch ausgege- ben werden kann (in Zeichen). Die größte y-Koordinate, an der ein Zeichen noch ausgege- ben werden kann (in Zeichen). Die Breite der Zeichenmatrix in Pixel. Die Höhe der Zeichenmatrix in Pixel. 4 cu_XROrigin 0x0032 (50) cu_YROrigin 0x0034 (52) cu_XRExtant 0x0036 (54) cu_YRExtant 0x0038 (56) cu_XMinShrink 0x003A (58) cu_YMinShrink 0x003C (60) cu_XCCP 0x003E (62) cu_YCCP 0x0040 (64) cu_KeyMapsStruct 0x0042 (66) cu_TabStops 0x0062 (98) Die minimale x-Koordinate in Pixel, an der ein Zeichen ausgegeben werden kann. Normalerweise O+ Rahmenbreite +1. Die minimale y-Koordinate in Pixel, an der ein Zeichen ausgegeben werden kann. Normalerweise 0 + Titelleisten- breite +1. Die x-Koordinate der rechten Grenze, des für die Zeichen- ausgabe zugelassenen Bereichs in Pixel. Die y-Koordinate der unteren Grenze, des für die Zeichen- ausgabe zugelassenen Bereichs in Pixel. Die minimale Breite des für die Zeichenausgabe bestimmten Bereichs. Diese Größe hängt von der minimalen Fenster- breite ab. Die minimale Höhe des für die Zeichenausgabe bestimmten Bereichs. Diese Größe hängt von der minimalen Fenster- höhe ab. Die x-Koordinate der aktuellen Cursorposition in Zeichen. Die y-Koordinate der aktuellen Cursorposition in Zeichen. Eine eingebundene KeyMap-Datenstruktur, die die von der Console verwendete Tastaturbelegung bestimmt. Eine Tabelle, in der die Positionen der Tabulatorstops ge- speichert sind. BEACHTE:Die nachfolgenden Felder sind Angaben zu den Eigenschaften des von dem Console-Device benutzten Rastports und sind in ihrer Bedeutung mit den entsprechenden Komponenten der RastPort- Datenstruktur identisch. Für die genaue Beschreibung der einzelnen Komponenten und der Bedeutung ihrer Werte siehe »Graphics«. 4 4 Ü EC EÜ.) cu_Mask 0x0102 (258) cu_FgPen 0x0103 (259) cu_BgPen 0x0104 (260) cu_AOLPen 0x0105 (261) cu_DrawMode 0x0106 (262) cu_AreaPtSz 0x0107 (263) cu_AreaPtrn 0x0108 (264) cu_Minterms 0x010C (268) Die Rastport-Mask für die Zeichenausgabe. Die aktuelle Vordergrundfarbe für die Textausgabe durch das Console-Device. Die aktuelle Hintergrundfarbe für die Textausgabe durch das Console-Device. Das Feld gibt die Area-Outline-Farbe des Console-Rastports an. Das Feld gibt den Zeichenmodus des Console-Rastports an. Die Größe des Füllmusters des Cursors. Das für den Cursor zu verwendende Füllmuster. Die Blitter-Minterms für den Console-Rastport. 3 cu_Font 0x0114 (276) UI cu_AlgoStyle 0x0118 (280) I cu _TxFlags 0x0119 (281) UI cu _TxHeight 0x011A (282) I cu_TxWidth 0x011C (284) J cu _TxBaseline 0x011E (286) Ü cu_TxSpacing 0x0120 (288) cu_Modes 0x0122 (290) Ü 1 cu_RawEvents 0x0125 (293) C (devices/hardblocks.h) struct FileSysHeaderBlock Ein Adreßzeiger auf eine TextF'ont-Datenstruktur, die den für die Textausgabe über das Console-Device benutzten Zeichensatz definiert. Gibt die Schriftart an, die für die Textausgabe über »Con- sole« benutzt wird. Die Flags für die Textausgabe. Die Handhabung ist wie in der RastPort-Datenstruktur. Gibt die Höhe der Zeichen in Pixel an, die für die Textaus- gabe über »Console« benutzt werden. Gibt die Breite der Zeichen in Pixel an, die für die Textaus- gabe über »Console« benutzt werden. Handhabung dieses Parameters wie in der RastPort-Daten- struktur. Der Abstand zwischen zwei nachfolgenden Zeichen in Pixel. Handhabung dieses Parameters wie in der RastPort-Daten- struktur. Systeminterne Komponente. Modula-2 (HardBlocks) FileSysHeaderBlock = RECORD fhb_ID; id: ARRAY [0..3] OF CHAR; fhb_SummedLongs; summedLongs: LONGCARD; fhb_ChkSum; chkSum: LONGINT; fhb_HostlID; hostID: LONGCARD; fhb_Next; next: LONGCARD; fhb_Flags; flags: LONGSET,; fhb_Reserved[2]; reservedl: ARRAY [0..1] OF LONGCARD; fhb_DosType; dosType: LONGCARD; fhb Version; version: LONGCARD; fhb_PatchFlags; patchFlags: LONGSET; fhb Type; type: LONGCARD; fhb_Task; task: LONGCARD; fhb_Lock; lock: LONGCARD; fhb_Handler; handler: LONGCARD; fhb_StackSize; LONG fhb_Priority; FileSysHeaderBlock u du 0000 0 ULONG 0004 4 ULONG 0008 8 ULONG 000C 12 ULONG 0010 16 ULONG 0014 20 ULONG 0018 24 ULONG 0020 32 ULONG 0024 36 ULONG 0028 40 ULONG 002C 44 ULONG 0030 48 ULONG 0034 52 ULONG 0038 56 ULONG 003C 60 ULONG 0040 64 0044 68 LONG fhb_Startup; stackSize: LONGCARD; priority: LONGINT,; startup: LONGINT; om C (devices/hardblocks.h) Modula-2 (HardBlocks) 0048 72 LONG fhb_SegListBlocks; segListBlocks: LONGINT, 004C 76 LONG fhb_GlobVec; globVec: LONGINT,; 0060 80 ULONG fhb_Reserved2[23]; reserved2: ARRAY [0..22] OF LONGCARD; 00AC | 172 ULONG fhb_Reserved3[21] reserved3: ARRAY [0..20] OF 0100 256 Datenstrukturenreferenz Routinenreferenz _____> Beschreibung LONGCARD; END; »Hardblocks«: RigidDiskBlock. Keine. Hier wird der Aufbau eines Blocks vereinbart, der die besonderen Anforderungen der Festplatte an das Betriebssystem beschreibt. J „J Ü fhb_ID 0x0000 (0) fhb_SummedLongs 0x0004 (4) fhb_ChkSum 0x0008 (8) fhb_HostID 0x000C (12) fhb_Next 0x0010 (16) fhb_Flags 0014 (20) fhb_Reserved 0x0018 (24) fhb_DosType 0x001C (28) fhb_Version 0x0024 (36) hb_PatchFlags 0x0028 (40) fhb_Type 0x002C (44) hb_Task 0x0030 (48) Eine vier Zeichen lange Kennung, die den Wert »FSHD« haben muß. Die Anzahl der Bytes dieser Datenstruktur, über die die Checksumme gebildet wird. Die Checksumme des Blocks. Die SCSI-Zielkennung. Die Nummer des nächsten Blocks, der eine FileSysHeader- Datenstruktur beinhaltet. Einige Filesystem-interne Flags. Wird wohl für einen oder mehrere Zwecke reserviert sein. Diese Komponente gibt an, unter welchem Filesystem die Partition läuf. Er muß mit dem Eintrag in DosEnvec.de_DosType übereinstimmen. Gibt die Versionsnummer an. Wenn hier ein Bit gesetzt ist, dann wird eines (das der Nummer dieses Bits entsprechende) der nachfolgenden Fel- der anstelle des Standardfeldes der DeviceNode-Datenstruk- tur für dieses Device benutzt. Der Typ der DeviceNode-Datenstruktur. Muß in der vorlie- genden Version 0 sein. Entspricht dem dn_Task-Feld der DeviceNode-Daten- struktur. „1 fhb_Lock 0x0034 (52) Dieser Parameter entspricht dem dn_Lock-Feld der Device- Node-Datenstruktur. J fhb_Handler 0x0038 (56) Dieser Parameter entspricht dem dn_Handler-Feld der DeviceNode-Datenstruktur. J fhb_StackSize 0x003C (60) Dieser Parameter entspricht dem dn_StackSize-Feld der DeviceNode-Datenstruktur. „I fhb_Priority 0x0040 (64) Dieser Parameter entspricht dem dn_Priority-Feld der DeviceNode-Datenstruktur. „1 hb_Startup 0x0044 (68) Dieser Parameter entspricht dem dn_Startup-Feld der DeviceNode-Datenstruktur. „1 fhb_SegListBlocks 0x0048 (72) Die Nummer des ersten Blocks der Segmentliste des Hand- lers. Dieser Parameter ist äquivalent zu dem dn_Segment- List-Feld der DeviceNode-Datenstruktur. „3 fhb_GlobVec 0x004C (76) Entspricht dem dn_GlobVec-Feld der DeviceNode-Daten- struktur. 4 fhb_Reserved2 0x0050 (80) Reservierter Speicherplatz. 3 fhb_Reserved3 0x00AC (172) Noch ein reservierter Speicherplatz. LoadSegBlock Offset C (devices/hardblocks.h) Modula-2 (HardBlocks) Hex Dez | struct LoadSegBlock LoadSegBlock = [ RECORD 0000 0 ULONG Isb_ID; id: ARRAY [0..3] OF CHAR; 0004 4 ULONG Isb_SummedLongs; summedLongs: LONGCARD; 0008 8 ULONG Isb_ChkSum; chkSum: LONGINT, 000C 12 ULONG Isb_HostID; hostID: LONGCARD; 0010 16 ULONG I1sb_Next; next: LONGCARD; 0014 20 ULONG Isb_LoadData[123] loadData: ARRAY [0..122] OF LONGCARD; 0200 512 } END; Datenstrukturenreferenz »Hardblocks«: FilesysHeaderBlock. Routinenreferenz Keine. ..>. Beschreibung Die LoadSegBlock-Datenstruktur gehört zu den neueren und ist noch nicht bei allen Compilern in den Include-Files enthalten. Sie legt den Aufbau eines Blocks der Segementliste fest, in der der Code des Handlers gespeichert ist (siehe auch FielSysHeaderBlock). Jeder derartige Block beinhaltet neben den »Verwaltungsdaten« (ID, Checksumme etc.), die Nummer des nächsten Blocks und 123 Langworte des Codes. I Isb_ID 0x0000 (0) U Isb_SummedLongs 0x0004 (4) UI Isb_ChkSum 0x0008 (8) Isb_HostID 0x000C (12) U Isb_Next 0x0010 (16) Ü U Isb_LoadData 0x0014 (20) Eine vier Zeichen lange Kennung, die den Wert »LSEG« hat. Die Anzahl der Bytes dieser Datenstruktur, über die die Checksumme gebildet wird. Die Checksumme des Blocks. Die SCSI-Zielkennung. Hier steht die Nummer des nächsten Blocks in der Liste oder Null, falls dies der letzte Block war. Hier folgen 123 Langworte, die einen Teil des zu ladenden Codes enthalten. InputEvent Datenstrukturenreferenz Routinenreferenz struct InputEvent { struct InputEvent UBYTE ie_Class; UBYTE ie_SubClass; UWORD ie_Code; UWORD ie_Qualifier; union { struct { WORD ie_x; WORD ie_y; } ie_xy; APTR ie_addr; } le_position; struct timeval ie_TimeStamp; }; »Input«: »Intuition«: Keine. Modula-2 (InputEvent) InputEvent = RECORD nextEvent:InputEventPtr; *je NextEvent; class:Class; subClass:Class; code:CARDINAL; qualifier:QualifierSet; CASE :INTEGER OF I0: x: INTEGER; y: INTEGER; Il: eventAddress: ADDRESS END; timeStamp:TimeVal END; InputEvent. IntuitionBase. Beschreibung In dieser Datenstruktur wird ein aufgetretenes Ereignis gespeichert. Die Adresse eines solchen Input- Events wird an die Input-Handler übergeben. Treten mehrere Events auf, so werden mehrere /nputEvent- Datenstrukturen zu einer Liste verknüpft. I ie_NextEvent 0x0000 (0) I ie Class 0x0004 (4) Ein Adreßzeiger zur Verkettung mehrerer InputEvent-Da- tenstrukturen. In der so erzeugten Liste muß in der letzten InputEvent-Datenstruktur an dieser Stelle der Wert NULL stehen. Dieser Parameter gibt die Art des aufgetretenen Ereignisses an. Folgende Werte sind für die einzelnen Meldungen mög- lich (zu den Definitionen in C und Assembler gehört das Präfix /JECLASS_; In Modula-2 sind dies Elemente des Aufzählungstyps Class): C Modula-2 NULL null RAWKEY rawkey RAWMOUSE rawmouse EVENT event POINTERPOS pointerpos TIMER timer GADGETDOWN gadgetdown GADGETUP gadgetup REQUESTER requester MENULIST menulist CLOSEWINDOW closewindow SIZEWINDOW sizewindow REFRESHWINDOW refreshwindow NEWPREFS newprefs DISKREMOVED diskremoved DISKINSERTED diskinserted 10 11 12 13 14 15 16 Beschreibung Eine »NIX«-Meldung. Meldung einer Tastatureingabe (Raw-Code). Bewegung der Maus (Raw-Daten vom GamePort-Device). Ein interner Event des Console- Devices. Informationen zur Position des O Mauspfeils. y Ein Timer-Event. Ein Gadget wurde gedrückt, also angeklickt. Ein Gadget wurde wieder »losgelassen«. Ein Requester wurde geöffnet. Ein Menü-Ereignis. Das Close-Gadget wurde angeklickt. Das Size-Gadget wurde angeklickt. An dem Fenster, auf dessen Window- Datenstruktur das Feld ie_EventAddress zeigt, muß ein Refresh durchgeführt werden. Die Preferences-Einstellungen wurden verändert. Eine Diskette wurde aus einem Laufwerk entnommen. Eine Diskette wurde in ein Laufwerk eingelegt. Modula-2 Dez Beschreibung Das zugehörige Fenster wurde aktiviert. Das zugehörige Fenster wurde inaktiviert. ACTIVEWINDOW activewindow 17 INACTIVEWINDOW inactivewindow 18 In diesem Feld können zusätzliche Informationen übertra- gen werden. 4 ie SubClass 0x0005 (5) I ie_Code 0x0006 (6) Folgende Konstanten sind für dieses Feld definiert (zu den Definitionen in C und Assembler gehört das Präfix IECODE ; Für JECLASS_RAWKEY: C KEY_CODE_FIRST KEY_CODE_LAST COMM_CODE_FIRST COMM_CODE_LAST UP_PREFIX Für JECLASS_ANST: C CO_FIRST C0O_LAST ASCH_FIRST ASCH_LAST ASCIH_DEL C1_FIRST C1_LAST LATINI_FIRST LATINI1_LAST Für JECLASS_RAWMOUSE: C LBUTTON Modula-2 Hex keyCodeFirst 00 keyCodeLast 77 commCodeFirst 78 commCodeLast 7F upPrefix 80 Modula-2 Hex cOFirst 00 clFirst IF asciiFirst 20 asciiLast 7E asciiDel IF clFirst 80 clLast 9F latinl First AO latinlLast FF Modula-2 Hex lButton 68 Dez 31 32 126 127 128 159 160 235 Dez Beschreibung 104 Event betrifft linke Maustaste. Modula-2 Beschreibung RBUTTON rButton Event betrifft rechte Maustaste. MBUTTON mButton Event betrifft beide Maus- tasten. NOBUTTON noButton Event betrifft keine Maustaste. Für JECLASS_EVENT: Modula-2 Beschreibung NEWACTIVE new Active Ein anderes Fenster wurde aktiv. Für /ECLASS_REQUESTER: Modula-2 Beschreibung REQCLEAR regClear Der letzte Requester eines Fensters wurde geschlossen. REOSET regSet Wird gesendet, wenn in einem Fenster der erste Requester geöffnet wird. nn | I ie _Qualifier 0x0008 (8) Der hier stehende Wert gibt bei der Tastatureingabe an, welche Qualifier (, etc.) gedrückt sind. Fol- gende Werte sind möglich (zu den Definitionen in C und Assembler gehört das Präfix /EQUALIFIER_; In Modula-2 sind dies Elemente des Mengentyps QualifierSet): C Modula-2 Hex Beschreibung LSHIFT Shift 0001 Linke -Taste gedrückt. RSHIFT rShift 0002 Rechte -Taste gedrückt. CAPSLOCK capsLock 0004 -Taste gedrückt. CONTROL control 0008 -Taste gedrückt. LALT Alt 0010 Linke -Taste gedrückt. RALT rAlt 0020 Rechte -Taste gedrückt. LCOMMAND ICommand 0040 Linke -Taste gedrückt. RCOMMAND rCommand 0080 Rechte -Taste gedrückt. NUMERICPAD numericPad 0100 Eine Taste des »Zehnerblocks« gedrückt. Modula-2 Hex Beschreibung REPEAT repeat 0200 Tastenwiederholung. INTERRUPT interrupt 0400 +?N MULTIBROADCAST multiBroadcast 0800 Etwa ein neuer Piratensender??? MIDBUTTOM midButton 1000 Beide Maustasten gedrückt? RBUTTON- rightButton 2000 Rechte Maustaste gedrückt. LEFTBUTTON leftButton 4000 Linke Maustaste gedrückt. RELATIVEMOUSE relativeMouse 8000 Mauskoordinaten sind relativ. I ie_x 0x000A (10) Bei einem Maus-Event steht hier die x-Koordinate des Mauszeigers zum Zeitpunkt des Events. I ie_y 0x000C (12) Bei einem Mausevent steht hier die y-Koordinate des Maus- zeigers zum Zeitpunkt des Events. „1 ie_addr 0x000A (10) Ein Adreßzeiger auf die zum Event gehörende Datenstruk- tur. Bei Tastatureingaben auf die betreffende Window-Da- tenstruktur, bei Gadget-Events auf die betreffende Gadget- Datenstruktur etc. I ie _TimeStamp 0x000E (14) Ein Adreßzeiger auf eine TimeVal-Datenstruktur. In ihr wird die Systemzeit festgehalten, zu der dieser Event aufgetreten ist. KeyMap Offset C (devices/keymap.h) Modula-2 (KeyMap) struct KeyMap KeyMap = RECORD UBYTE *km_LoKeyMapTypes; loKeyMapT'ypes:TypesPtr; ULONG *km_LoKeyMap; loKeyMap:InfoPtr; UBYTE *km_LoCapsable; loCapsable:BitTablePtr; UBYTE *km_LoRepeatable; loRepeatable:BitTablePtr; UBYTE *km_HiKeyMapTypes; hiKeyMapTypes:TypesPtr; ULONG *km_HiKeyMap; hiKeyMap:lInfoPtr; UBYTE *km_HiCapsable; hiCapsable:BitTablePtr; UBYTE *km_HiRepeatable; hiRepeatable:BitTablePir; b Datenstrukturenreferenz »ConUnit«: ConUnit. »Intuition«: IntuitionBase, StringInfo. »KeyMap«: KeyMapNode. Routinenreferenz Beschreibung Keine. Mit dieser Datenstruktur wird die Keymap-Tabelle beschrieben, in der die Umwandlungen der verschie- denen Tastenkombinationen definiert sind. Die Tabelle ist in zwei Teile geteilt, und zwar in eine Lo-Map (Tastencodes von Ox00 bis Ox3F) und eine Hi-Map (Tastencodes von 0x40 bis 0x67). I km_LoKeyMapTypes 0x0000 (0) Ein Adreßzeiger auf eine 64 Byte lange Tabelle (deren Anfangsadresse muß gerade sein!), deren Werte angeben, welche Tastenkombinationen (mit oder ohne Qualifier, wie (Shift), und (Ctr1)) für die Tasten der Lo-Map zulässig sind. Modula-2 Hex Beschreibung KC_NOQUAL noQual 0 Fürdie Taste ist kein Qualifier zugelassen. KCF_SHIFT shift l Die [Shi£t)-Tasten sind als Qualifier zugelassen. KCF_ALT alt 2 Die[Alt]-Tasten sind als Qualifier zugelassen. KCF_CONTROL control 4 Die(ctri)-Taste ist als Qualifier zugelassen. KC_VANILLA vanilla 7 Kombination von KCF_SHIFT, KCF ALT und CONTROL. KCF_STRING string 40 Es wird kein einzelner ASCII-Code, sondern eine Zeichenkette pro Tastendruck ausgegeben. BEACHTE: In Modula-2 ist für dieses Feld der Aufzählungstyp KeyMapTypes und der Mengentyp KeyMapT'ypeset definiert. noQual und vanilla sind natürlich nicht in diesem Aufzählungstyp, sondern als Konstanten definiert. TypesPrtr ist ein POINTER TO ARRAY [0..63] OF KeyMapTypeSet. J km_LoKeyMap 0x0004 (4) 4 km_LoCapsable 0x0008 (8) 4 km_LoRepeatable 0x000C (12) Ein Adreßzeiger auf eine Tabelle (deren Anfangsadresse muß gerade sein!) mit 64 KeyI/nfo-Datenstrukturen, in denen für die Tasten der Lo-Map die ASCII-Codes gespeichert sind, die bei Betätigung der jeweiligen Taste ausgegeben werden. Ein Adreßzeiger auf eine 64 Bit lange Tabelle, deren einzel- nen Bits zu jeder Taste der Lo-Map festlegen, ob bei betätig- ter -Taste die geete (TRUE) oder die normale (FALSE) Ausgabe erfolgen soll. Ein Adreßzeiger auf eine 64 Bit lange Tabelle, deren einzel- nen Bits zu jeder Taste der Lo-Map festlegen, ob bei ge- drückt gehaltener Taste eine automatische Wiederholung erfolgen soll (TRUE) oder nicht (FALSE). S 1 km_HiKeyMapTypes 0x0010 (16) Ein Adreßzeiger auf eine 64 Byte lange Tabelle (deren An- fangsadresse muß gerade sein!), deren Werte angeben, wel- che Tastenkombinationen (mit oder ohne Qualifier, wie , und ) für die Tasten der Hi-Map zulässig sind. Für die Tabelle gelten die gleichen Werte wie für km_LoKeyMapTypes. I km_HiKeyMap 0x0014 (20) Ein Adreßzeiger auf eine Tabelle (deren Anfangsadresse muß gerade sein!) mit 64 Key/nfo-Datenstrukturen, in denen für die Tasten der Hi-Map die ASCI-Codes gespeichert sind, die bei Betätigung der jeweiligen Taste ausgegeben werden. J km_HiCapsable 0x0018 (24) Ein Adreßzeiger auf eine 64 Bit lange Tabelle, deren einzel- nen Bits zu jeder Taste der Hi-Map festlegen, ob bei betätig- ter -Taste die »geshiftete« (TRUE) oder die normale (FALSE) Ausgabe erfolgen soll. 3 km _HiRepeatable 0x001C (28) Ein Adreßzeiger auf eine 64 Bit lange Tabelle, deren einzel- nen Bits zu jeder Taste der Hi-Map festlegen, ob bei gedrückt gehaltener Taste eine automatische Wiederholung erfolgen soll (TRUE) oder nicht (FALSE). KeyMapNode C (devices/keymap.h) Modula-2 (KeyMap) struct KeyMapNode KeyMapNode = { RECORD struct Node kn_Node; node:Node; struct KeyMap kn_KeyMap; keyMap:KeyMap; h END; Datenstrukturenreferenz Keine. Routinenreferenz Keine. > Beschreibung Diese Datenstruktur ordnet einer KeyMap- einer Node-Datenstruktur zu, damitüber die KeyMapResour- ce-Datenstruktur mehrere Keymaps miteinander verknüpft werden können. 4 kn_Node 0x0000 (0) Eine eingebundene Node-Datenstruktur, die vor allem einen Adreßzeiger auf den zu einer Keymap gehörenden Namen beinhaltet. 1 kn_KeyMap 0x000E (14) Eine eingebundene KeyMap-Datenstruktur, durch die eine Keymap definiert ist. KeyMapResource C (devices/keymap.h) Modula-2 (KeyMap) He De struct KeyMapResource KeyMapResource= { RECORD 0000 0 struct Node kr_Node; node:Node; struct List kr_List; list:List; IE END; Datenstrukturenreferenz Keine. Routinenreferenz Keine. Beschreibung Über diese Datenstruktur können mehrere Keymaps miteinander verknüpft werden. QJ kr_Node 0x0000 (0) Eine eingebundene Node-Datenstruktur zur Verknüpfung der Keymaps. 4 kr_List 0x000E (14) Durch diese eingebundene List-Datenstruktur werden die KeyMapNode-Datenstrukturen als eine lineare Liste bereit- gehalten. DeviceData Offset ' C (devices/prtbase.h) Modula-2 (PrtBase) Hex Dez struct DeviceData DeviceData = [ RECORD struct Library dd_Device; device:Device; APTR dd_Segment; segment:BPTR; APTR dd_ExecBase; execBase:ExecBasePitr; APTR dd_CmdVectors; cmdVectors: ADDRESS; APTR dd_CmdBytes; cmdBytes: ADDRESS; UWORD dd_NumCommands; numCommands:CARDINAL; hs END; Assembler Der Parameter dd_ Device ist nicht definiert. Datenstrukturenreferenz »PrtBase«: PrinterData. Routinenreferenz Keine. Beschreibung Diese Datenstruktur enthält systeminterne Informationen über das Printer-Device selbst. „1 dd_Device 0x0000 (0) Eine eingebundene Library-Datenstruktur, die das PrtBase- Device in das System einbindet. 1 dd_Segment 0x0022 (34) Ein Adreßzeiger auf die Segmentliste des Handlers des Printer-Devices. 1 dd_ExecBase 0x0026 (38) Ein Adreßzeiger auf die ExecBase-Datenstruktur. 1 dd_CmdVectors 0x002A (42) Ein Adreßzeiger auf die Sprungtabelle für die verschiedenen Kommandos, die zu diesem Device definiert sind. „1 dd_CmdBytes 0x002E (46) Ein Adreßzeiger auf den Speicherbereich, in dem die Kom- mandos hintereinander gespeichert sind. 4 dd_NumCommands 0x0032 (50) Hier steht die Anzahl der Kommandos, die indd_ CmaBytes gespeichert sind. PartitionBlock He De struct PartitionBlock PartitionBlock = { RECORD 0000 0 ULONG pb_ID; id: ARRAY [0..3] OF CHAR; 0004 4 ULONG pb_SummedLongs; summedLongs: LONGCARD; 0008 8 LONG pb_ChkSum; chkSum: LONGINT; 000C 12 ULONG pb_HostlID; hostID: LONGCARD; 0010 16 ULONG pb_Next; next: LONGCARD; 0014 20 ULONG pb_Flags; flags: Partition FlagSet; 0018 24 ULONG pb_Reservedi[2]; reservedl: ARRAY [0..1] OF LONGCARDB; 0020 32 ULONG pd_DevFlags; devFlags: LONGSET; 0024 36 UBYTE pb_DriveName[32]; driveName: ARRAY [0.. 31] OF CHAR; 0044 68 ULONG pb_Reserved2[2]; reserved2: ARRAY [0..14] OF LONGCARD; 004C 76 ULONG pb_Enviroment[17]; enviroment: ARRAY [0..16] OF LONGCARD; 0090 144 ULONG pb_Reserved[ 15]; reserved: ARRAY [0..14] OFLONGCARD DOCC | 204 } END; Datenstrukturenreferenz »Hardblocks«: RigidDiskBlock. Routinenreferenz Keine. (_...> Beschreibung Diese Datenstruktur gehört zu den neueren und ist nicht bei allen Compilern in den Include-Files enthalten. Sie beschreibt einen Block, der eine Partition eines Festplattenlaufwerks identifiziert. Falls die Festplatte mehrere Partitionen enthält, dann steht die Nummer des ersten solchen PartitionBlock-Blocks in der RigidDiskBlock-Datenstruktur. u JO pb_ID 0x0000 (0) pb_SummedLongs 0x0004 (4) I pb_ChkSum 0x0008 (8) u E co co oo. 0.00 pb_HostID 0x000C (12) pb_Next 0x0010 (16) pb_Reservedi 0018 (24) pd_DevFlags 0x0020 (32) pb_DriveName 0x0024 (36) pb_Reserved2 0x0044 (68) pb_Enviroment 0x004C (76) pb_EReserved 0x0050 (144) PrinterData | struct DeviceData pd_Device; struct MsgPort pd_Unit; BPTR pd_PrinterSegment; UWORD pd_PrinterType; struct PrinterSegment *nd_SegmentData; UBYTE *pd_PrintBuf; int (*pd_PWrite)(); int (*pd_PBothReady)(); union { struct IOExtPar pd_p0; struct IOExtSer pd_s0; } pd_iorO; union { struct IOExtPar pd_p1; struct IOExtSer pd_s1; } pd_iorl; C (devices/prtbase.h) struct PrinterData Eine vier Zeichen lange Kennung, die den Wert »PART« haben muß. Die Anzahl der Bytes dieser Datenstruktur, über die die Checksumme gebildet wird. Die Checksumme des Blocks. Die SCSI-Zielkennung. Die Nummer des nächsten Blocks in der Liste oder null falls dies der letzte Block ist. Reserviert für diverse Zwecke. Einige private Flags der Partition. Hier finden Sie den Namen der Partition als Zeichenkette. Reserviert für diverse Zwecke. Eine private Sprung- und Datentabelle der Partition. Reserviert für diverse Zwecke. PrinterData = RECORD device:DeviceData; unit:MsgPort; printerSegment:BPTR; printerType:CARDINAL; segmentData:PrinterSegmentPtr; printBuf:ADDRESS; pWritePROCEDURE(:INTEGER; pBothReady:PROCEDURE(:INTEGER CASE :INTEGER OF Il: p0:IOParallel; p1:1OParallel; 2: s0:IOSerial; s1:1OSerial; END; Offset C (devices/prtbase.h) Modula-2 (PrtBase) Hex Dez 0110 272 struct timerequest pd_TIOR; tior:IOTimer; 0138 312 struct MsgPort pd_IORPort; iorPort:MsgPort; O015A 346 struct Task pd_TC; tc:Task; 01B6 | 438 UBYTE pd_Stk[2048]; stk: ARRAY [0..2047]) OF BYTE; 09B6 | 2486 UBYTE pd_Flags; flags:UByfte; 09B7 | 2487 UBYTE pd_pad; pad:BYTE; 09B8 | 2488 struct Preferences preferences:Preferences; pd_Preferences; DAAO | 2720 UBYTE pd_PWaitEnabled; pWaitEnabled: UByte; 0AA2 | 2722 1: END; Assembler Der Parameter pd_Device ist nicht definiert. Datenstrukturenreferenz Routinenreferenz __> Beschreibung Keine. Keine. Diese Datenstruktur wird von der ped_Init-Routine (siehe PrinterExtendedData-Datenstruktur) initia- lisiert. 3 pd_Device 0x0000 (0) pd_Unit 0x0034 (52) pd_PrinterSegment 0x0056 (86) pd_PrinterType 0x005A (90) pd_SegmentData 0x005C (92) cc U UÜ0 4 pd_PrintBuf 0x0060 (96) I pd_PWrite 0x0064 (100) I pd_PBothReady 0x0068 (104) 4 pd_pior0 0x006C (108) Eine eingebundene DeviceData-Datenstruktur, die syste- minterne Informationen zu dem PrrBase-Device enthält. Eine eingebundene Unit-Datenstruktur. Ein BPTR auf eine Printer$egment-Datenstruktur. Angabe des Druckertyps. Ein Adreßzeiger auf die zugehörige PrinterSegment-Daten- struktur. Dieser Adreßzeiger steht hier, damit der Drucker- treiber mit der Routine UnLoadSeg aus dem Speicher ent- fernt werden kann. Ein Adreßzeiger auf einen Puffer, der als Zwischenspeicher für die Grafikausgabe benötigt wird. Ein Adreßzeiger auf die Ausgabe-Routine, die die Druck- daten über die entsprechende Schnittstelle an den Drucker schickt. Ein Adreßzeiger auf eine Funktion, die am Ende des Druck- vorgangs aufgerufen wird (und dann was macht?). Je nachdem, ob der Drucker an der parallelen oder seriellen Schnittstelle angeschlossen ist, ist an dieser Stelle die erste 4 pd_piorl 0x00BE (190) 4 pd_TIOR 0x0110 (272) 4 pd_IORPort 0x0138 (312) I pd_TC 0x015A (346) I pd_Stk 0x01B6 (438) I pd_Flags 0x09B6 (2486) I pd_pad 0x09B7 (2487) 4 pd_Preferences 0x09B8 (2488) 4 pd_PWaitEnabled 0x0AA0 (2720) PrinterExtendedData von zwei /OExtPar- oder /OExtSer-Datenstrukturen ein- gebunden. Je nachdem, ob der Drucker an der parallelen oder seriellen Schnittstelle angeschlossen ist, ist an dieser Stelle die zweite von zwei /OExtPar- oder /OExtSer-Datenstrukturen ein- gebunden. Eine eingebundene timerequest-Datenstruktur, die dem Printer-Device die für Synchronisationen notwendige Zu- griffe auf den Timer-Device erlaubt. Eine eingebundene MsgPort-Datenstruktur. Über diesen Messageport werden die für das Printer-Device bestimmten Nachrichten empfangen. Eine eingebundene Task-Datenstruktur, die den Druck vor- gang zu einemeigenen Task macht, so daß er im Hintergrund ausgeführt werden kann. An dieser Stelle wird für die Datenübertragung ein Stack eingerichtet, der einzelne Zeichen zwischenspeichern kann. Laut [RKA] sind dies die Device-Flags... welche damit auch immer gemeint sind. Zwei unbedeutende Füllbytes. Eine eingebundene Preferences-Datenstruktur, die eine Kopie der aktuellen Preferences-V oreinstellungen beinhal- tet. Eine systeminterne 1-Byte-Marke. Sie wird jedenfalls im Zusammenhang mit den verschiedenen Wartezuständen des Devices benutzt. char *ped_PrinterName; VOID (*ped_Init)(); VOID (*ped_Expunge)(); int (*ped_Open)(); VOID (*ped_Close)(); UBYTE ped_PrinterClass; UBYTE ped_ColorClass; UBYTE ped_MaxColumns; maxColumns:UByte; Modula-2 (PrtBase) PrinterExtendedData = RECORD printerName: ADDRESS; init:PROGCG; expunge:PROC; open: PROCEDURE(:INTEGER; close:PROC; printerClass:PrinterClassSet; colorClass:ColorClassSet; Offset C (devices/prtbase.h) Modula-2 (PrtBase) Hex Dez 0017 23 UBYTE ped_NumCharsSets; numCharSets:UByte; 0018 24 UWORD ped_NumRows; numRows:CARDINAL; 001A 26 ULONG ped_MaxXDots; maxXDots:LONGCARD; O01E 30 ULONG ped_MaxYDots; maxYDots:LONGCARD; 0022 34 UWORD ped_XDotsInch; xDotsInch:CARDINAL; 0024 36 UWORD ped_ YDotsInch; yDotsInch:CARDINAL; 0026 38 char ***ped_Commands; commands: ADDRESS; 002A 42 int (*ped_DoSpecial)(); doSpecial:PROCEDURE(O:INTEGER; 002E 46 int (*ped_Render)(); render: PROCEDUREO:INTEGER; 0032 50 LONG ped_TimeoutSecs; timeoutSecs:LONGINT; 0036 54 char **ped_8BitChars; eightBitChars: ADDRESS; 003A 58 LONG ped_PrintMode; printMode:LONGINT, 003E 62 int (*ped_ConvFunc)(); convFunc:PROCEDURE():LONGINT,; 0042 66 I END; Datenstrukturenreferenz »PrtBase«: PrinterSegment. Routinenreferenz Keine. L___> Beschreibung In dieser Datenstruktur werden druckerspezifische Informationen abgelegt. I ped_PrinterName 0x0000 (0) Ein Adreßzeiger auf eine Null-terminierte Zeichenkette, in der der Name dieses Druckers (und somit auch des Drucker- treibers) steht. I ped_Init 0x0004 (4) Ein Adreßzeiger auf eine Initialisierungs-Routine für Prin- terData-Datenstrukturen, die nach der LoadSeg-Routine (Laden des Druckertreibers) aufgerufen wird. Ein Adreßzei- ger auf eine PrinterData-Datenstruktur muß ihr übergeben werden. I ped_Expunge 0x0008 (8) Ein Adreßzeiger auf eine Lösch-Routine für die durch ped_Init eingerichtete PrinterData-Datenstruktur, die vor der UnLoadsSeg-Routine aufgerufen wird. 1 ped_Open 0x000C (12) Ein Adreßzeiger auf eine spezifische Open-Routine des Druckertreibers, die unmittelbar nach der OpenDevice- Routine aufgerufen wird. Ihr muß ein Adreßzeiger auf die zum PrtBase-Device gehörende /OStdReg-Datenstruktur übergeben werden. 1 ped_Close 0x0010 (16) Ein Adreßzeiger auf eine spezifische Close-Routine des Druckertreibers, die bei der CloseDevice-Routine mit auf- gerufen wird. Ihr wird ebenfalls ein Adreßzeiger auf die zum PrtBase-Device gehörende /OStdReg-Datenstruktur über- geben. 1 ped_PrinterClass 0x0014 (20) Folgende Konstanten definieren, um welche Art von Druk- ker es sich handelt (zu den Definitionen in C und Assembler gehört jeweils das Präfix PPC_): C Modula-2 Dez Beschreibung BWALPHA bwAlpha 0 Ein Schwarzweißdrucker der nur alphanumerische Zeichen ausdrucken kann. BWGFX bwGfx 1 Ein Schwarzweißdrucker, der auch grafikfähig ist. COLORALPHA 2 Ein Farbdrucker, der nur alphanume- rische Zeichen darstellen kann. COLORGFX colorGfx 3 Ein Farbdrucker, der auch grafikfähig ist. 1 ped_ColorClass 0x0015 (21) Folgende Konstanten definieren, welche Farben der Drucker zu Papier bringen kann (zu den Definitionen in C und Assembler gehört jeweils das Präfix PCC_): Modula-2 Dez Beschreibung BW bw l Nur Schwarzweißdruck möglich. YMC ymc 2 Nur Gelb/Magentarot/Zyan-Druck möglich. YMC_BW ymcBw 3 Gelb/Magentarot/Zyan- oder Schwarzweiß-Druck möglich. YMCB ymcb 4 Nur Gelb/Magentarot/Zyan/Schwarz- Druck möglich. ADDITIVE additive 8 Das Komplement zu YMCB, also Blau/Grün/Rot/Weiß-Druck möglich. WB wb 9 Das Komplement zu BW, also nur »Weiß/Schwarz-Druck« möglich. bgr 10 Nur Blau/Grün/Rot-Druck möglich. bgrWb Il _ Blau/Grün/Rot- oder »Weiß/ Schwarz-Druck« möglich. bgrw 12 Nur Blau/Grün/Rot/Weiß/-Druck möglich. I ped_MaxColumns 0x0016 (22) Hier steht die Anzahl der Zeichen, die in eine Druckerzeile passen. Normalerweise sind dies 80 Zeichen pro Zeile. ped_NumCharSets 0x0017 (23) ped_NumRows 0x0018 (24) ped_MaxXDots 0x001A (26) ped_MaxYDots 0x001E (30) ped_XDotsInch 0x0022 (34) ped_YDotsInch 0x0024 (36) ped_Commands 0x0026 (38) ped_DoSpecial 0x002A (42) ped_Render 0x002E (46) ped_TimeoutSecs 0x0032 (50) ped_8BitChars 0x0036 (54) Hier steht die Anzahl der verschiedenen Zeichensätze (Pica, Elite, Draft etc.), die der Drucker darstellen kann. Bei einem Matrixdrucker steht hier die Anzahl der Grafik- zeilen, die pro Druckzeile ausgegeben werden können. Bei einem 8-Nadel-Drucker sind dies acht Grafikzeilen pro Druckzeile, aber Achtung: ein 24-Nadel-Drucker quetscht nicht unbedingt auch 24 Grafikzeilen in eine Druckzeile! Dieser Wert legt fest, wie viele Punkte in einer Zeile neben- einander passen. Ein Matrixdrucker mit 80 Zeichen/Zeile unterstützt normalerweise Grafikausdrücke mit 640 (einfa- che Dichte), 1280 (doppelte Dichte) und häufig sogar 2560 (vierfache Dichte) Punkten pro Zeile. Dieser Wert legt fest, wie viele Punkte in einer Zeile überein- ander passen. Bei Matrixdruckern wird dieser Wert im allge- meinen durch die Anzahl der Nadeln beschränkt. Durch diesen Wert wird die tatsächlich verwendete Druck- dichte in x-Richtung festgelegt. Die Angabe erfolgt in (Druck-)Punkten pro Inch (2,54 cm). Durch diesen Wert wird die tatsächlich verwendete Druck- dichte in y-Richtung festgelegt. Die Angabe erfolgt in (Druck-)Punkten pro Inch (2,54 cm). Dies ist ein Adreßzeiger auf eine Umsetzungstabelle für die Amiga-Kommandosequenzen, die im Printer-Device defi- niert sind. Die jeweils 4 Byte langen Einträge enthalten der Reihe nach die Umsetzungen der Amiga-spezifischen Se- quenzen in eine Sequenz, die der zugehörige Drucker ver- steht. Unterstützt der Drucker ein bestimmtes Format nicht (z.B. Kommando 21: Schattendruck ein), so muß an der entsprechenden Stelle in der Tabelle der Wert OxFF (255) stehen. Ein Adreßzeiger auf die DoSpecial-Routine, mit der eigene Steuersequenzen ausgegeben werden können. Ein Adreßzeiger aufdie Render-Routine, die eine Hardcopy- Funktion realisiert. Ist der Drucker im OFF-LINE Zustand, so definiert dieser Wert die Anzahl der Sekunden, die verstreichen dürfen, bis er wieder inden ON-LINE Zustand versetzt wird. Wird diese Zeit überschritten, so kommt es zu einem »Printer-Trouble- Requester«. Bei übergroßen Fonts steht hier ein Adreßzeiger auf eine ins entsprechende Format konvertierte Zeichenkette. 4 ped_PrintMode 0x003A (58) In diesem Feld steht ein Wert ungleich null, wenn ein Text gedruckt wurde, sonst null. 4 ped_ConvFunc 0x003E (62) Ein Adreßzeiger auf die Routine, die die Zeichenkette in ped _8BitChars herstellt. PrinterSegment C (devices/prtbase.h) Modula-2 (PrtBase) struct PrinterSegment PrinterSegment = { RECORD ULONG ps_NextSegment; nextSegment:BPTR; ULONG ps_runAlert; runAlert: LONGCARD; UWORD ps_ Version; version: CARDINAL; UWORD ps_Revision; revision:CARDINAL; struct PrinterExtendedData ped:PrinterExtendedData; ps_PED; hi END; Datenstrukturenrefernz »PrtBase«: PrinterData. Routinenreferenz Keine. > Beschreibung Diese Datenstruktur entspricht bis auf den ps_NextSegment-Adreßzeiger dem Header des Druckertrei- bers. 4 ps_NextSegment 0x0000 (0) Ein BPTR auf das nächste Segment. Er wird beim Löschen des Druckertreibers aus dem Speicher durch die UnloadSeg- Routine benötigt. J ps_runAlert 0x0004 (4) Dieser 4 Byte lange Wert enthält die Assembler-Befehle: MOVEO #0, d0; RTS; Dadurch wird erreicht, daß bei dem Versuch, den Drucker- treiber als Programm zu starten, kein Systemabsturz, son- dern nur eine entsprechende Fehlermeldung entsteht. 4 ps_Version 0x0008 (8) An dieser Stelle steht die Versionsnummer des Druckertrei- bers. J ps_Revision 0x000A (10) An.dieser Stelle steht die Revisionsnummer des Druckertrei- bers. 4 ps_PED 0x000C (12) Eine eingebundene PrinterExtendedData-Datenstruktur, die die zu dem Treiber gehörenden Informationen über den angeschlossenen Drucker enthält. RigidDiskBlock Offset C (devices/bootblock.h) Modular-2 (HardBlocks) struct RigidDiskBlock RigidDiskBlock = { RECORD 0000 0 ULONG rdb_ID; id: ARRAY [0..3] OF CHAR; 0004 4 ULONG rdb_SummedLongs; summedLongs: LONGCARD; 0008 8 ULONG rdb_ChkSum; chkSum: LONGINT,; 000€ 12 ULONG rdb_HostlD; hostID: LONGCARD; HRt(J) blockBytes: LONGCARD; 0010 16 ULONG rdb_Flags; flags: RigidDiskFlagSet; 0014 20 ULONG rdb_BadBlockList; badBlockList: LONGCARD; 0018 24 ULONG rdb_PartitionList; partitionList: LONGCARD; 001C 28 ULONG rdb_FilesSysHeaderLbist; filesSysHeaderList: LONGCARD; 0020 32 ULONG rdb_Drivelnit; drivelnit: LONGCARD; 0024 36 struct rdb_Reservedl 6 * 4; reservedi: ARRAY [0..3] OF LONG- CARD; 003C 60 ULONG rdb_Cylinders; cylinders: LONGCARD; 0040 64 ULONG rdb_Sectors; sectors: LONGCARD; 0044 68 ULONG rdb_Heads; Heads: LONGCARD; 0048 12 ULONG rdb_Interleave; interleave: LONGCARD; 004€ 716 ULONG rdb_Park; park: LONGCARD; 0050 80 ULONG rdb_Reserved2[3]; reserved2: ARRAY [0..2] OF LONG- CARD; 005C 92 ULONG rdb_WritePreComp; writePreComp: LONGCARD; 0060 96 ULONG rdb_ReducedWrite; reducedWrite: LONGCARD; 0064 100 ULONG rdb_StepRate; stepRate: LONGCARD; 0068 104 ULONG rdb_Reserved3[5]; reserved3: ARRAY [0..4] OF LONG- CARD; 007C 124 ULONG rdb_RDBBlocksLo; blocksLo: LONGCARD; 0080 128 ULONG rdb_RDBBlockHi; blockHi: LONGCARD; 0084 132 ULONG rdb_LowCylinder; lowCylinder: LONGCARD; 0088 136 ULONG rdb_HiCylinder; hiCylinder: LONGCARD; 008C | 140 ULONG rdb_CylBlocks; cylBlocks: LONGCARD; 0090 144 ULONG rdb_AutoParkSeconds; ‚autoParkSeconds: LONGCARD; 0094 148 ULONG rdb_Reserved4[2]; reserved4: ARRAY [0..1] OF LONG- CARD; 009C | 156 char rdb_DiskVendor[8]; diskVendor: ARRAY [0..7] OF CHAR; 00A4 | 164 char rdb_DiskProduct[16]; diskProduct: ARRAY [0..15] OF CHAR; 00B4 | 180 char rdb_DiskRevision[4]; diskRevision: ARRAY [0..3] OF | CHAR; 00B8 184 char rdb_ControllerVendor[8]; controllerVendor: ARRAY [0..7] OF CHAR; Offset C (devices/bootblock.h) Modular-2 (HardBlocks) char rdb_ControllerProduct[16]; | controllerProduct: ARRAY [0..15] OF CHAR; char rdb_ControllerRevision[4]; | controllerRevision: ARRAY [0..3] OF CHAR; ULONG rdb_Reserved5[10]; Reserved5: ARRAY [0..9] OF LONGCARD; } END; Datenstrukturenreferenz Keine. Routinenreferenz Keine. > Beschreibung Diese Datenstruktur gehört zu den neueren und ist noch nicht in allen Include-Files der einzelnen Compiler enthalten. Sie definiert einen Block, in dem alle wichtigen Informationen über die Festplatte enthalten sind. Ein solcher Block muß sich auf Festplatte innerhalb der 16 ersten Blocks befinden. 4 rdb_ID 0x0000 (0) Eine vier Zeichen lange Kennung, die den Wert »RDSK« haben muß. 4 rdb_SummedLongs 0x0004 (4) Die Anzahl der Bytes dieser Datenstruktur, über die die Checksumme gebildet wird. I rdb_ChkSum 0x0008 (8) Die Checksumme des Blocks. J rdb_HostID 0x000C (12) Die SCSI-Zielkennung des Blocks. „I rdb_Flags 0x0010 (16) Einige Flags, die zusätzliche Informationen zur lnitialisie- rung der Festplatte beinhalten. Es sind folgende Werte defi- niert (dazu gehört jeweils das Präfix RDBFF _): Beschreibung LAST l Es gibt keine weitere Festplatte an diesem Controller. LASTLUN 2 Ist nur bei SCSI-Festplatten von Bedeutung, aber von welcher? LASTID 4 Ist nur bei SCSI-Festplatten von Bedeutung, aber von welcher? NORESELECT 38 Das Festplattenlaufwerk braucht bei wiederholtem Zugriff nicht noch einmal angewählt zu werden. DISKID 16 Die Plattenkennung (in den Feldern rdb_Diskxxx) ist gültig. CTRLRID 32 Die Controllerkennung (in den Feldern rdb_Controllerxxx) ist gültig. 4 rdb_BadBlockList 0x0014 (20) Die Nummer des ersten Blocks einer Liste von BadBlock- Block-Datestrukturen. m u rdb_PartitionList 0x0018 (24) rdb_FilesSysHeaderList 0x001C (28) rdb_Drivelnit 0x0020 (32) rdb_Reserved 0x0024 (36) Die Nummer des ersten Blocks einer Liste von Partition- Block-Datestrukturen. Diese beschreiben jeweils eine Plat- tenpartition. Die Nummer des ersten Blocks einer Liste von FileSysHea- derBlock-Datestrukturen. Hier können lnitialisierungsdaten für die Partition stehen. In der vorliegenden Version immer auf OxFFFFFFFF setzen. Beachte: Die Nachfolgenden Felder beschreiben die Hardware-Eigenschaften der Festplatte. u 4 m rdb_Cylinders 0x003C (60) rdb_Sectors 0x0040 (64) rdb_Heads 0x0044 (68) rdb_Interleave 0x0048 (72) J rdb_Park 0x004C (76) I iM u 4 4 rdb_Reserved2 0x0050 (80) rdb_WritePreComp 0x005C (92) rdb_ReducedWrite 0x0060 (96) rdb_StepRate 0x0064 (100) rdb_Reserved3 0x0068 (104) Die Anzahl der Zylinder, über die die Festplatte verfügt. Die Anzahl der Sektoren pro Zylinder. Die Anzahl der Schreib-Lese-Köpfe, über die das Festplat- tenlaufwerk verfügt. Der Interleave-Faktor für das Festplattenlaufwerk. Die Nummer des Zylinders, der für das »Parken« der Fest- platte benutzt wird. Bis jemand das Gegenteil beweist, befindet sich in diesem Feld die Telefonnummer meiner Oma! 2 77? Hier steht die Schrittrate für den Spurwechsel. Für zukünftige Erweiterungen, aber auch rdb_Reserved2. Die nachfolgenden Felder beschreiben die logische Unterteilung der Platte 4 I rdb_RDBBlocksLo 0x007C (124) rdb_RDBBlockHi 0x0080 (128) rdb_LowCylinder 0084 (132) rdb_HiCylinder 0088 (136) rdb_CylBlocks 0x008C (140) rdb_AutoParkSeconds 0x0090 (144) rdb_Reserved4 0x0094 (148) Die Nummer des ersten Zylinders, der für die Systeminfor- mation (z.B. BadBlockBlock-Datenstrukturen) reserviert ist. Die Nummer des letzten Zylinders, der für die Systeminfor- mation (z.B. BadBlockBlock-Datenstrukturen) reserviert ist. Die Nummer des ersten Zylinders, der für die Daten freisteht. Die Nummer des letzten Zylinders, der für die Daten frei- steht. Die Anzahl der nutzbaren Blocks pro Zylinder. Steht hier eine Null, so wird kein »Autopark« ausgeführt. Sonst gibt dieses Feld die Anzahl der Sekunden an, die vor dem »Autopark« abzuwarten sind. Noch ein bißchen Platz für die Zukunft. rdb_DiskVendor 0x009C (156) rdb_DiskProduct 0x00A4 (164) rdb_DiskRevision 0x00B4 (180) rdb_ControllerVendor 0x00B8 (184) rdb_ControllerProduct 0x00C0 (192) rdb_ControllerRevision 0x00D0 (208) rdb_Reserved5 0x00D4 (212) Hier kann eine Zeichenkette mit dem Herstellernamen der Platte stehen. Hier kann eine Zeichenkette mit dem Produktnamen der Platte stehen. Hier kann eine Versionskennung der Platte stehen. Hier kann eine Zeichenkette mit dem Herstellernamen des Controllers stehen. Hier kann eine Zeichenkette mit dem Produktnamen des Controllers stehen. Hier kann eine Versionskennung des Controllers stehen. Für zukünftige Erweiterungen reserviert. GLOSSAR Adreßregister: Der Prozessor MC68000 hat sieben Adreßregister, über die die Adressierung der Speicherstellen (Auslesen und Beschreiben) abläuft. Diese Adreßregister heißen AO bis A®. Adreßzeiger: Ein Adreßzeiger ist ein 4 Byte langer Wert, dessen Inhalt eine Speicheradresse angibt, er »zeigt« also auf diese Speicherstelle; NULL(N). Alert: Eine Meldung in der Form der bekannten Guru-Meditation ist ein System-Alert. allokieren: (von allocate, engl: Zuweisen) Um einen Speicherbereich für eigene Zwecke benutzen zu können, muß dieser reserviert, »diesem Zweck zugewiesen« werden - deallozieren(\). Anwender-Modus: Dies ist der Standardmodus des Prozessors MC68000. Im Gegensatz zum Supervi- sor-Modus(%) steht in diesem Modus nicht der gesamte Befehlssatz zur Verfügung (ausgeschlossen sind beispielsweise die Befehle, die das Statusregister direkt verändern). Array: Ein Variablen-Feld (in einer beliebigen Programmiersprache), sprich eine durchnumerierte Aufzählung. Audio-Device: Dieses Device(*) steuert die gesamte Tonausgabe des Amiga. Basispunkt: Positionen innerhalb eines Windows werden im allgemeinen relativ zu einem Basispunkt angegeben (typischerweise die obere linke Ecke). BPTR: Dies ist eine spezielle Art von Adreßzeigern, die nur von DOS verwendet wird. Ein BPTR, der auf ein Objekt zeigt, hat den Wert Adresse durch 4. Das Objekt muß also immer an einer durch 4 teilbaren Adresse liegen. Bitmap: Eine Bitmap besteht aus mehreren, sich überlappenden Bitplanes(*). So werden jedem Grafikpunkt mehr als ein Bit Information zugeordnet, wodurch ihm auch mehr Farben zugeordnet werden können. Bitplane: Ein Speicherbereich, dessen binärer Inhalt als Grafik interpretiert wird. Ein gesetztes Bit entspricht dabei einem gesetzten Punkt in einer Schwarzweißgrafik. Da die Grafikdaten in der Bitplane zeilenweise eingetragen sind, müssen zur korrekten Wiedergabe die Dimensionen (Breite und Höhe) der Grafik bekannt sein, damit das jeweilige Zeilenende erkannt wird. Blitter: Dies ist einer der Co-Prozessoren des Amiga. Seine Aufgabe besteht im wesentlichen aus dem schnellen Kopieren von Speicherbereichen, wie es z.B. beim Verschieben eines Grafikausschnitts nötig ist. Bob: (Abk.: Blitter Objekt) Ein Grafikobjekt, das der Blitter(*) durch direktes Kopieren (Verschieben) innerhalb der Bitplanes(*) animiert, also bewegt. Border: (engl.: Rand) Grundsätzlich können alle Displayelemente(*) mit einer Umrandung ausgestattet werden. Boolean-Gadget: Ein Gadget(‘), das auf einmaliges Anklicken reagiert (wie z.B. das Close-Gadget eines Fensters). Boolean-Toggle-Gadget: Ein Boolean-Gadget(*), mit dem Funktionen ein- und ausgeschaltet werden können. Viele Kopierprogramme verfügen über solche Gadgets zum Aktivieren eines jeweiligen Laufwerks. Boolescher Ausdruck: Ein Boolescher Ausdruck bestimmt einen Zustand, der nur einen von 'zwei Zuständen annehmen kann (0/1, TRUE/FALSE). Bootblock: Der Block der Diskette, der angibt, ob von ihr nach einem Reset gebootet werden kann. Er liegt auf Track 00 Spur 0. BSTR: Diese besondere Art der Speicherung von Zeichenketten wird von Amiga-DOS verwendet. Ein BSTR ist ein BPTR(%) auf einen Speicherbereich, in dem im ersten Byte die Länge der Zeichenkette, und erst nachfolgend die Zeichenkette selbst steht. Byte: Dies ist nicht nur eine 8 Bit lange Binärzahl, sondern in vielen Programmiersprachen auch der entsprechende Datentyp(*), dem Werte zwischen O und 255 oder manchmal auch zwischen -128 und 127 zugeordnet werden können. Char: (Kurzform von Charakter) Ein Byte, dessen Wert ein einzelnes (Schrift-)Zeichen repräsentiert. Chip-RAM: Der Speicherbereich, auf den die Co-Prozessoren zugreifen können. Bei älteren Amigas sind dies die unteren 512 Kbyte, bei neueren das untere Mbyte. Checkmark: Das Grafikzeichen, das in Pull-down-Menüs zum Sichtbarmachen von eingeschalteten Funktionen verwendet wird (Standardsymbol ist ein Haken). Clip: Ein Clip ist ein Speicherbereich, der einen Teil einer Grafik oder eines Textes enthält und mit dem etwas Besonderes passieren soll (Markieren, Verschieben, Verdoppeln etc.). Clipboard-Device: Das Clipboard-Device dient zur einfachen Verwaltung und Zwischenspeicherung von Datenblöcken. Colormap: Eine Farbtabelle, die die RGB-Anteile der Farben, die den einzelnen Farbregistern zugeord- net sind, bestimmt. Console-Device: Dieses Device(‘) steuert die Tastaturabfrage. Container: Der Bereich in einem Proportional-Gadget(*), in dem sich der Knopf(*) befindet. Copper: Dies ist einer der Co-Prozessoren des Amiga. Seine Hauptaufgabe besteht aus der Darstellung des Displayspeichers(*) auf dem Display(‘). Copperliste: Eine Befehlsliste für den Copper(). Normalerweise nach der Strahlenposition, an der die Befehle ausgeführt werden sollen, geordnet. Datenstruktur: Eine Datenstruktur ist ein Verbund von mehreren Parametern, wie Variablen und Flags(*), die für einen bestimmten Zweck (Windows, Gadgets(*), Diskettenoperationen etc.) die entsprechenden Einstellungen (Dimensionen, Farbwerte, Adreßzeiger(*) etc.) bereithalten. Datentyp: Von Compilern werden mehrere Datentypen unterstützt. Typische Standard-Datentypen in C sind BOOL, LONG, SHORT und WORD. Datenregister: Der Prozessor MC68000 hat acht Datenregister (DO bis D7), die zum Datenaustausch, vor allem aber auch für arithmetische Operationen, zur Verfügung stehen. Deallokieren: Ein Speicherbereich, der durch Allokieren(*) reserviert wurde, kann durch Deallokieren wieder freigegeben werden. Default: (engl.: Versäumnis; sinngemäß: Voreingestellt) Ein Default-Parameter wird dann benutzt, wenn in einem entsprechenden Feld kein aktueller Parameter angegeben ist. Wird beispielsweise für ein neues Window kein Titeltext angegeben, so wird der Default-Titel aus der zugehörigen Screen-Daten- struktur verwendet. Device: (engl.: Vorrichtung, aber auch Erfindung) Die Devices des Amiga sind in erster Linie Gerätetrei- ber, die die Ein- oder Ausgabe eines bestimmten Kanals (serielle und parallele Schnittstelle, Tonausgabe, Tastatureingabe etc.) steuern. Diskfont-Library: Diese Library(*) verwaltet die verschiedenen Zeichensätze, die von Diskette geladen werden können. Display: Eine Ausgabe auf dem Display ist nichts anderes als eine Ausgabe auf dem Bildschirm Ihres Monitors oder was auch immer Sie als Displaygerät verwenden. Displayelement: Die Displayelemente des Amiga sind im wesentlichen Screens, Windows, Gadgets(*) und Requester(*). Displayspeicher: (sinngemäß: Bildschirmspeicherbereich) Der Speicherbereich, dessen binärer Inhalt direkt als Grafik auf dem Display(*) ausgegeben wird. Doppelwort: Langwort(\). DOS-Library: Diese Library steuert die Ein- und Ausgabe über die Diskettenlaufwerke und Festplatten. Event: Eine Art von Ereignisse, die auftreten können: Anklicken eines Gadgets; Drücken einer Taste; Systemfehler; etc. Exception: Ein lokales, taskinternes Interrupt. Es kann durch ein Signal ausgelöst werden. Exclude, EXCL: (engl.: Ausschließen) Modula-2-Befehl zum Entfernen eines Elementes aus einer Menge. Wird in den Datenstrukturen(*) verwendet, um aus einem SET OF xxxFlags ein oder mehrere Bits zu entfernen. Exec-Library: Die Library(%), die für die interne Verwaltung, in erster Linie für die von Speicherberei- chen anderer Libraries und Devices, zuständig ist. Expansion-Library: Die Library(%), die für die Verwaltung der Erweiterungssteckkarten zuständig ist. Farbregister: Wenn es bei der Ausgabe auf dem Display(*) um Farbzuordnungen geht, so werden grundsätzlich die Nummern von einem der 32 Farbregister verwendet. In diesen Speicherstellen steht dann einer der 4096 Farbwerte. Farbwert: Beim Amiga eine 3 Byte lange Zahl, die eine der 4096 Farben definiert. Die Bytes definieren jeweils durch Zahlen zwischen O und 15 den Rot-, Grün- und Blauanteil der Farbe. Fast-RAM: Der Speicherbereich, auf den die Sonderchips des Amiga keinen Zugriff haben. FFP-Zahl: Eine 4 Byte lange Gleitkommazahl, die vom Amiga unterstützt wird und für die ein paar sehr schnelle Rechenroutinen zur Verfügung stehen. Der Nachteil liegt in der größeren Ungenauigkeit. FIFO-Schlange: Ein First-In-/First-Out-Speicherbereich; das zuerst hineingeschriebene Element wird auch als erstes wieder ausgelesen. Flag: (engl.: Flag) Eine 1-Byte-Marke enthält 8 Bit, diese werden als Flags angesehen, die einzeln gesetzt oder gelöscht werden können. Font: (engl.: Zeichensatz) Auf jeder System-Diskette befinden sich in dem »fonts« Unterverzeichnis meist mehrere Zeichensätze, die vom Amiga anstelle des System-Fonts verwendet werden können. Gadget: (engl.: Dingsbums; hier Symbolfeld) Gadgets sind Felder, die durch Anklicken mit der Maus eine bestimmte Aktion auslösen. Die meisten Fenster verfügen über Close- (oben links zum Schließen), Drag- (in der Titelleiste zum Verschieben), Depth- (oben rechts zum Schalten in den Vorder- oder Hintergrund) und Sizing-Gadgets (unten rechts zum Verändern der Größe). Gameport-Device: Dieses Device(*) verwaltet die Eingaben der Gameports (auch als Joystickports oder Mouseports bekannt). GEL: Graphics ELement. Eine Bezeichnung für einen beliebigen Bestandteil des Animationssystems. GimmeZeroZero-Window: Bei dieser Art von Fenstern brauchen Sie sich bei Positionsangaben nicht um den Rand zu kümmern, da sich Angaben auf das innere Fenster (ohne den Rand) beziehen. Der Koordinatenursprung liegt dabei in der inneren linken oberen Ecke. Graphics-Library: In dieser Library(X) sind die zur Ausgabe auf dem Display benötigten Routinen und Datenstrukturen definiert. GZZ-Window: GimmeZeroZero-Window(?). Handler: (eng].: Betreuer). Bezeichnung für ein Programm, das für die Handhabung eines Devices oder Resources zuständig ist. Highlightning: (engl.: hervorheben) Beispiel: Ein durch Anklicken aktiviertes Gadget oder ein ausge- wählter Menüpunkt wird oftmals durch Farbwechsel hervorgehoben. HiRes: Der Grafikmodus, bei dem 640 Punkte (entspricht 80 Standardzeichen pro Zeile) horizontal dargestellt werden können. Hot-Spot: Der Punkt im Mouse-Pointer, mit dem die Auswahl der Gadgets oder Menüpunkte stattfindet. Normalerweise liegt der Hot-Spot in der Spitze eines Pfeils oder in der Mitte eines Fadenkreuzes. Icon: (engl.: »Heiligenbild«; sinngemäß: Piktogramm) Die zu einzelnen Disketten, Schubladen oder Programmen gehörenden Piktogramme, die von der Workbench aus durch doppeltes Anklicken aktiviert werden. IDCMP: Abkürzung für »Intuition Direct Communications Message Port«. Dieser ermöglicht in erster Linie die Abfrage von Benutzertätigkeiten wie Mausbewegungen oder Tastatureingaben. IEEE-Zahl: Ein Amiga-internes Gleitpunktzahlformat, für das einige Rechenroutinen zur Verfügung stehen. Da dieses Format länger als das der FFP-Zahlen(%) ist, ist die Rechengenauigkeit höher, jedoch dauert das Rechnen auch länger. IFF: Abkürzung für »Interchange File Format«. Eine Norm zur einheitlichen Erstellung von Dateien mit Grafik, Text oder Sound. Image: (engl.: Bild) »Kleinere« Grafiken werden allgemein als Image bezeichnet. Sie können durch Image-Datenstrukturen definiert sein. Include, INCL: (engl.: einschließen) Modula-2-Befehl zum Hinzufügen eines Elementes in eine Menge. Wird in den Datenstrukturen(*) verwendet, um in einem SET OF xxxFlags ein oder mehrere Bits zu setzen. Include-File: Die C- und Assembler-Compiler können auf diese Files, in denen Teile der einzelnen Libraries und Devices nochmals definiert sind, zugreifen. Input-Device: Dieses Device() ist für die Eingabe zuständig. Integer-Zahl: Eine ganzzahlige Zahl. Interrupt: Eine Unterbrechung des Programms, die direkt am Prozessor ausgelöst wurde. Intuition: Der Teil des Betriebssystems des Amiga, der für die Handhabung der Benutzeroberfläche mit all seinen Screens und Windows zuständig ist. Intuition-Library: In dieser Library(\) sind die Routinen und Datenstrukturen der Intuition(*) definiert. KeyMap: Eine Konvertierungsliste, die den Tasten und Tastenkombinationen ein oder mehrere Zeichen (Chars(X)) zuordnet. Keyboard-Device: Dieses Device(%) ist für die Eingabe von Zeichen über die Tastatur zuständig. Knopf: Der Teil eines Proportional-Gadgets(*), der verschoben werden kann, um dadurch einen Wert einzustellen. Langwort: Ein 32 Bit (4 Byte) langer Wert. Layer: (engl.: Schicht) Ein Displayelement des grafischen Systems, das zu einem beliebigen Rechteck gehört. Library: (engl.: Bibliothek) Die Routinen, die uns das Betriebssystem zur Verfügung stellt, sind nach Funktionsgruppen geordnet und dementsprechend in Libraries unterteilt. Lock: Ein Lock ist eine Datenstruktur aus der DOS-Library, die den Zugriff mehrerer Multitasking- Komponenten auf eine Datei koordiniert. Sie dient auch als Identifikation dieser Datei. Longword alligned: Das zugehörige Objekt liegt an einer durch 4 teilbaren Adresse im Speicher. LoRes: Der Grafikmodus, bei dem 320 Punkte (60 Standardzeichen pro Zeile) horizontal dargestellt werden können. Marke: Maske (%). Maske: Eine Maske gibt die relevanten Bits eines Ausdrucks an. Message: Eine Nachricht in Form einer Message-Datenstruktur plus Daten, die ein Task(*) an einen anderen schickt. Messageport: Die »Empfangsstation« eines Tasks(*), an die Nachrichten in Form von Messages(\) geschickt werden. Mouse-Pointer: (engl.: Mauszeiger) Das Grafiksymbol, das Sie durch Bewegen der Maus auf dem Display(*) steuern. Multitasking: Der Amiga verfügt über die Fähigkeit des Multitaskings, also mehrere Tasks(*) (Aufga- ben, Programme) gleichzeitig bearbeiten zu können. Narrator-Device: Dieses Device(\) ist für die Steuerung der Sprachausgabe zuständig. NIL: (Abk.: Not in List) Modula-2-Format von NULL(N). Nibble: Ein halbes Byte, also 4 Bit, nennt man auch ein Nibble. Ein Byte läßt sich somit in ein oberes und unteres Nibble unterteilen. Node: (engl.: Knoten) Dient zur Verkettung einer Liste. Damit wird oft auch die Node-Datenstruktur (die dem gleichen Zweck dient) gemeint. NULL: Im C-Format ist dies ein Adreßzeiger(\), der auf keinen Speicherplatz zeigt, also dessen Inhalt Null ist. (NIL(X)) Packets: So werden Nachrichten bzw. Befehle genannt, die in Form von Packet-Datenstrukturen zwischen Prozessen(*) ausgetauscht werden. Parallel-Device: Dieses Device(*) ist für die Steuerung der parallelen Schnittstelle zuständig. Pointer: Adreßzeiger(*). Port: (engl.: Hafen) allgemein eine Schnittstelle. Printer-Device: Dieses Device(\) ist für die Ansteuerung des Druckers zuständig. Proportional-Gadget: Bei dieser Art von Gadgets(*) kann der Benutzer einen Wert durch Verschieben eines Knopfes, ähnlich wie bei einem Schiebepotentiometer, einstellen. Prozeß: Ein Prozeß ist ein selbständiges, innerhalb des Multitasking ablaufendes Programm. Rastport: Ein Rastport definiert zu einem Displayelement(*) den Zeichenstift, mit dem grafische Ausgaben getätigt werden. Raw-Code: Die intern verwendete Codierung aller Tasten der Tastatur. Refresh: (engl.: wiederauffrischen) Wird ein Teil eines Windows verdeckt (z.B. durch Verkleinern oder durch Überlappen eines anderen Windows) und anschließend wieder freigelegt, so ist ein Refresh notwending, um den alten Inhalt des Windows wiederherzustellen. Resources-Library: Diese Library ermöglicht die Handhabung neuer Geräte. Requester: (engl.: Aufforderer; sinngemäß: Kommunikationsfenster) Ein Requester ist ein besonderes Aufforderungsfenster, das den Benutzer auf wichtige Mißstände hinweist (z.B. »Volume dfx: is full«). Segment: Falls ein Programm (oder Daten) nicht in einen zusammenhängenden Speicherbereich paßt, wird es in mehrere verkettete Bereiche (Segmente) geladen. Serial-Device: Dieses Device(*) ist für die Steuerung der seriellen Schnittstelle zuständig. String: Zeichenkette(‘). String-Gadget: Ein Gadget(*), mit dem der Benutzer eine Zeichenkette eingeben oder eine bereits bestehende verändern kann. BEISPIEL: Das Gadget, das bei der Auswahl des Menüpunktes »Rename« auf der Workbench erscheint. Supervisor-Modus: Der Prozessor MC68000 hat mehrere Arbeitsmodi. In diesem Überwachungsmo- dus können Sie im Gegensatz zu dem Anwender-Modus(‘) über alle Befehle des Prozessors verfügen. System-Gadget: Die Gadgets, die bereits vom System definiert sind und nur noch über Flags(*) eingeschaltet werden müssen. BEISPIEL: Das Sizing-Gadget, das sich in der unteren rechten Ecke von Fenstern befindet. Tastaturpuffer: Der Speicherbereich, der alle Tastatureingaben zwischenspeichert, bis sie abgerufen werden. Task: (engl.: Aufgabe) Der Amiga ist bekanntermaßen Multitaskingfähig, das heißt, er kann mehrere Aufgaben gleichzeitig bearbeiten. Ein Task ist also nichts weiteres als eine Aufgabe (Programm), die parallel zu anderen ausgeführt werden kann (dabei wird in Wirklichkeit nicht parallel gearbeitet, sondern lediglich zwischen den einzelnen Tasks hin- und hergeschaltet). Terminator: Abbruchzeichen; Wird bei der Datenübertragung über die serielle oder parallele Schnitt- stelle ein Terminator gesendet, so wird dieser als das letzte Zeichen erkannt. Timer-Device: Mit diesem Device(X) können beliebige Zeiteinheiten mit Hilfe der Timer gemessen werden. Trackdisk-Device: Mit diesem Device(*) können die Diskettenlaufwerke angesteuert werden. Trap: Eine durch einen unzulässigen Prozessorbefehl ausgelöste Programmunterbrechung. Überwachungs-Modus: Supervisor-Modus(\). Underscore: Dieses Zeichen »_« ist ein Underscore. Unit: Ein Device kann mehrmals göffnet werden. Man sagt dann, daß mehrere Units existieren. View: Ein View übernimmt die Verwaltung des Gesamtdisplays. Auf ihm können mehrere Viewports(\) geöffnet werden. Viewport: Ein Viewport ist ein Displayelement(‘) des grafischen Systems und stellt die Verbindung zwischen dem Displayspeicher(*), den Bitmaps(*) und Colormaps(‘) dar. Volume: (engl: Lautstärke, tut aber nichts zur Sache! Hier ist wohl eher ein Band gemeint). So wird im Amiga-DOS jeder eigenständiger Datenträger z.B. Diskette, Festplatte, aber auch das Laufwerk selbst bezeichnet. Wort (Word): Ein 16 Bit (2-Byte) langer Wert. Wordalligned: Das zugehörige Objekt liegt an einer durch 2 teilbaren Adresse im Speicher. Workbench-Library: In dieser Library(X) sind alle die Funktionen und Datenstrukturen definiert, die zur Verwaltung der Workbench nötig sind. Zeichenkette, Null-terminierte: Eine Zeichenkette, bestehend aus mehreren Chars, deren letzter Eintrag null ist. (1) (2) 3) (4) (5) (6) (7) (8) 9) LITERATURVERZEICHNIS [IKRA] Rom Kernal Reference Manual includes & Autodocs (Verlag Addison Wesley) [IKRE] Rom Kernal Reference Manual Exec (Verlag Addison Wesley) IKRL] Rom Kernal Reference Manual Libraries & Devices (Verlag Addison Wesley) [HRM] Hardware Reference Manual (Verlag Addison Wesley) [IRM] Intuition Reference Manual (Verlag Addison Wesley) [ADH] Amiga-DOS-Handbuch (Verlag Markt & Technik) [APH] Amiga-Programmier-Handbuch (Verlag Markt & Technik) [APM] Amiga-Programmieren in Maschinensprache (Verlag Markt & Technik) [APH] Amiga-Programmierpraxis-Intuition (Verlag Markt & Technik) (10) (11) (12) [ABP] Amiga-Basic-Profibuch (Verlag Maxon) [AI1] Amiga Intern Band 1 (Verlag Data Becker) [AI2] Amiga Intern Band 2 (Verlag Data Becker) 3.1 3.2 3.3 3.4 4.1 4.2 4.3 4.4.2 4.4.b 4.4.c 5.1 3.2 3.3 6.1 6.2 6.3 el ÄBBILDUNGSVERZEICHNIS Die ExecBase-Datenstruktur Der Aufbau einer Liste Die Verknüpfung der Libraries Die Nachrichtenübermittlung zwischen Tasks Die IntuitionBase-Datenstruktur Die Einbindung der »Intuition« in das Grafiksystem Die Verknüpfung der Screens und Windows Die zu einem Fenster gehörenden Datenstrukturen... ...wie die der Gadgets... ..und des Menu-Strips. Der Aufbau eines Views Rastport und Layers Das Animationssystem Die DOS-Library Die DOS-Device-Liste Der Aufbau eines Prozesses Wichtige Datenstrukturen der DiskFont-Library MN Quick-REFERENCE Dieser Anhang dient der Schnellübersicht über die einzelnen Datenstrukturen, die in diesem Buch behandelt werden. In der ersten Zeile finden Sie den »C«-Namen der Datenstruktur und das Include-File, in dem diese Datenstruktur definiert ist. Darunter steht der Modula-2-Name und der Name des Definitions-Moduls, aus dem diese Datenstruktur importiert werden kann. Es folgt eine Auflistung der Namen der einzelnen Komponenten. Wie gewohnt, in der Reihenfolge hexadezimaler Offset, »C«- und Modula-2-Format. AnimComp (graphics/gels.h) AnimComp (Graphics) 134 0000 Flags flags 0002 Timer timer 0004 TimeSet timeSet 0006 NextComp nextComp 000A PrevComp prevComp 000E NextSeq nextSeq 0012 PrevSeq prevSeqg 0016 AnimCRoutine animCRoutine O001A YTrans yTrans 00lC XTrans xTrans O00Ol1E HeadOb headOb 0022 AnimBob animBob 0026 AnimOb (graphics/gels.h) AnimOb (Graphics) 136 0000 NextOb nextOüb 0004 PrevoOb prevüb 0008 Clock clock 000C AnOldY anOldY 000E AnOldX anOldX 0010 AnY anY 0012 AnX anX 0014 YVel yVel 0016 XVel xVel 0018 YAccel yAccel 001A XAccel xAccel 001C RingYTrans ringYTrans O00O1E RingXTrans ringXTrans 0020 AnimORoutine animORoutine 0024 HeadComp headComp 0028 AlUserExt userExt 002A Arealnfo (graphics/rastport.h) Arealnfo (Graphics) 139 0000 VcetrTbl vctrTb] 0004 VctrPtr vctrPtr 0008 FlagTbl flagTb] 000C FlagPtr flagPtr 0010 Count count 0012 MaxCount maxCount 0014 FirstX firstX 0016 FirstY FirstY 0018 AvailFonts (libraries/diskfont.h) AvailFont (DiskFont) 223 0000 af_Type type 0002 aTt_Abtr ater 000A AvailFontsHeader (libraries/diskfont.h) AvailFontHeader (DiskFont) 224 0000 afh_NumEntries numEntries 0002 BadBlockBlock (devices/hardblocks.h) BadBlockBlock (Hardblocks) 323 0000 bbb_ID id 0004 bbb_SummedLongs summedLongs 0008 bbb_ChkSum chkSum 000C bbb_HostID hostlID 0010 bbb_Next next 0014 bbb_Reserved reserved 0018 bbb_BadBlockPairs blockPairs 0200 BadBlockEntry (devices/hardblocks.h) BadBlockEntry (Hardblocks) 325 0000 bbe_BadBlock badBlock 0004 bbe_GoodBlock goodBlock 0008 BitMap (graphics/gfx.h) BitMap (Graphics) 140 0000 BytesPerRow bytesPerRow 0002 Rows rows 0004 Flags flags 0005 Depth depth 0006 pad pad 0008 Planes planes 0028 bltnode (hardware/blit.h) Bltnode (Hardware) 235 0000 nn 0004 funetion function 0008 stat stat 000A blitsize blitsize 000C beamsync beamsync 000E cleanup cleanup 0012 Bob (graphics/gels.h) Bob (Graphics) 141 0000 Flags Flags 0002 SaveBuffer saveBuffer 0006 ImageShadow imageShadow 000A Before before 000C After after 0012 BobVSprite bobVSprite 0016 BobComp bobComp 001A DBuffer dBuffer O0OlE BUserExt 0020 BoollInfo (intuition/intuition.h) Boollnfo (Intuition) 69 0000 Flags flags 0002 Mask mask 0006 Reserved reserved 000A BootBlock (devices/bootblock.h) BootBlock (BootBlock) 325 0000 bb_id id 0004 bb_chksum chkSum 0008 bb_dosblock dosBlock 000C Border (intuition/intuition.h) Border (Intuition) 70 0000 LeftEdge leftEdge 0002 TopEdge topEdge 0004 FrontPen frontPen 0005 BackPen backPen 0006 DrawMode drawMode 0007 Count count 0008 XY xy 000C NextBorder nextBorder 0010 CIA (hardware/cia.h) CIAB (Hardware) 236 0000 ciapra pra 0001 padO padO 0100 ciaprb prb 0101 padl padl 0200 ciaddra ddra 0201 pad2 pad2 0300 ciaddrb ddrb 0301 pad3 pad3 0400 ciatalo talo 0401 pad4 pad4 0500 ciatahi tahi 0501 pad5 pad5 0600 ciatblo tblo 0601 pad6e padb 0700 ciatbhi tbhi 0701 pad/ pad/ 0800 ciatodlow todlow 0801 pad8 pad8d 0900 ciatodmid todmid 0901 pad9 pad9 0A0OO ciatodhi todhi 0AO1l padl0 padlO 0BOO unusedreg unusedreg 0BO1l padl1l padll 0C00 ciasdr sdr 0C01 padl2 padl2 0D00 ciaicr icr 0D01 ua 0OEOIl OFOO OFO2 pad13 padl3 ciacra cra padl4 padl14 SIaerD :CrD ClipboardUnitPartial (devices/clipboard.h) ClipboardUnitPartial (Clipboard) 283 0000 O00E 0012 Node cu_Node node cu_UnitNum unitNum ClipRect (graphics/clip.h) ClipRect (Graphics) 144 0000 0004 0008 000C 0010 0018 001C 0020 0024 Next next prev prev lobs lobs BitMap bitMap bounds bounds =PL.>Pl 2.02 reserved reserved CollTable (graphics/gels.h) CollTable (Graphics) 145 0000 0040 Col TPtrSs Col 1Ptrs ColorMap (graphics/view.h) ColorMap (Graphics) 146 0000 0001 0002 0004 0008 Flags flags Type type COUNE: -COUNE ColorTable colorTable CommandLinelnterface (libraries/ dosextens.h) CommandLinelnterface (Dos) 197 0000 0004 0008 000C 0010 cli_Result2 result2 cli_SetName setName cli_CommandDir command Dir cli_ReturnCode returnCode cli_CommandName commandName 0014 cli_FailLevel failleve] 0018 cli_Prompt prompt 001B cli_StandardInput standardInput 0020 cli_CurrentInput current Input 0024 cli_CommandFile command File 0028 cli_Interactive inter- active 002B cli_Background back- ground 0030 cli_CurrentOutput currentOutput 0034 cli_DefaultStack defaultStack 0038 cli_StandardOutput standardOutput 003C cli_Module module 0040 ConfigDev (libraries/configvars.h) ConfigDev (Expansion) 227 0000 cd_Node node 000E cd_Flags flags 000F cd_Pad pad 0010 cd_Rom rom 0020 cd_BoardAddr boardAddr 0024 cd_BoardSize boardSize 0028 cd_SlotAddr slotAddr 002A cd_SlotSize slotSize 002C cd_Driver driver 0030 cd_NextCD nextCD 0034 cd_Unused unused ConUnit (devices/conunit.h) ConUnit (ConUnit) 326 0000 cu_MP mp 0022 cu_Window window 0026 cu_XCP xCP 0028 cu_YCP yCP 002A cu_XMax xMax 002C cu_YMax yMax 002E cu_XRSize xRSize 0030 cu_YRSize yRSize 0032 cu_XROrigin xROrigin 0034 cu_YROrigin yROrigin 0036 cu_XRExtant xRExtant 0038 cu_YRExtant yRExtant 003A cu_XMinShrink xMinShrink 003C 003E 0040 0042 0062 0102 0103 0104 0105 0106 0107 0108 010C 0114 0118 0119 011A oO1llC Ol1E 0120 0122 0125 0128 cu_YMinShrink yMinShrink EU..XCCP’XCcEP SUEYCEP. YCCP cu_KeyMapStruct keyMap Struct cu_TabStops tabStops cu_Mask mask cu_FgPen fgPen cu_BgPen bgPen cu_AOLPen aolPen cu_DrawMode drawMode cu_AreaPtSz areaPtSz cu_AreaPtrn areaPtrn cu_Minterms minTerms cu_Font font cu_AlgoStyle algoStyle cu_TxFlags txFlags cu_TxHeight txHeight cu_TxWidth txWidth cu_TxBaseline txBaseLine cu_ITxSpacing txSpacing cu_Modes modes cu_RawEvents rawEvents copinit (graphics/copper.h) Copinit (Graphics) 147 0000 0008 0058 005C diagstrt diagstrt sprstrtup sprstrtup sprstop sprstop CoplIns (graphics/copper.h) CopIns (Graphics) 147 0000 0002 0002 0002 0004 0004 0006 OpCode opCode AXEITSE NXEITSE VWaitPos vWaitPos DestAddr destAddr HWaitPos hWaitPos DestData destData CopList (graphics/copper.h) CopList (Graphics) 149 0000 0004 0008 000C Next next _CopList copList _ViewPort viewPort CopIns copIns 0010. CopPtr:. copPtr 0014 CopLStart copLStart 0018 CopSStart copSStart 001C Count count O0O1E MaxCount maxCount 0020 DyOffset dyOffset 0022 cprlist (graphics/copper.h) Cprlist (Graphics) 150 0000 Next next 0004 start start 0008 MaxCount maxCount 000A CurrentBinding (libraries/configvars.h) CurrentBinding (Expansion) 228 0000 cb_ConfigDev configDev 0004 cb_FileName fileName 0008 cb_ProductString Produetstring 000C cb_ToolTypes toolTypes 0010 Custom (hardware/custom.h) Custom (Hardware) 243 0000 bitddat bltddat 0002 dmaconr dmaconr 0004 vposr vposr 0006 vhposr 0008 dskdatr dskdatr 000A joyOdat joyOdat 000C joyldat joyldat O00E cIxdat cIxdat 0010 adkconr adkconr 0012 potOdat potOdat 0014 potldat potldat 0016 potinp potinp 0018 serdatr serdatr O001A dskbytr dskbytr O0OlC intenar intenar O0O1E intreqr intreqr 0020 dskpt dskpt 0024 dsklen dsklen 0026 dskdat dskdat 0028 refptr refptr 002A vposw VPOSw 002C vhposw vhposw copcon copcon serdat serdat serper serper potgo potgo joytest joytest strequ strequ strvb]l strvb] strhor strhor strlong strlong bItconO bltconO bItconl bltconl bDltafwm bltafwm bIltalwm bltalwm bltcpt bltcpt bltbpt bltbpt bltapt bltapt bitdpt bItdpt bIltsize bltsize pad2d pad2d bltcmod bltcmod bItbmod bitbmod bIltamod bltamod bIltdmod bltdmod pad34 pad34 bItcdat bltcdat bltbdat bltbdat bltadat bitadat pad3b pad3b dsksync dsksync copllc coplic cop2]lc cop2Ic copjmpl copjmpl copjmp2 copjmp2 copins copins diwstrt diwstrt diwstop diwstop ddfstrt ddfstrt ddfstop ddfstop dmacon dmacon EIXCon vEIXCON intena intena intreq intreq adkcon adkcon aud aud bplpt bplIpt pad/c pad/c bplconO bplconO bplconl bplconl bplcon2 bplcon2 pad83 pad83 bpllmod bpl1mod 010A bpl2mod bpl2mod 010C pad86 pad86 0110 bpldat bpldat Ol1C pad8e pad8e 0120 sprpt sprpt 0180 color color DateStamp (libraries/dos.h) Date (Dos) 199 0000 ds_Days days 0004 ds_Minute minute 0008 ds_Tick tick 000C DBufPacket (graphics/gels.h) DBufPacket (Graphics) 151 0000 BufY bufY 0002 BufX bufX 0004 BufPath bufPath 0008 BufBuffer bufBuffer 000C Device (exec/devices.h) Device (Exec) 26 0000 dd_Library library 0022 DeviceData (devices/prtbase.h) DeviceData (PrtBase) 339 0000 dd_Device device 0022 dd_Segment segment 0026 dd_ExecBase execBase 002A dd_CmdVectors cmdVectors 002E dd_CmdBytes cmdBytes 0032 dd_NumCommands numCommands DeviceL6ist (libraries/dos.h) DeviceList (Dos) 200 0000 dI_Next next 0004 dI_Type type 0008 dI_Task task 000C dI_Lock lock 0010 001C 0020 0024 0028 002C dI_VolumeDate volumeDate dlI_LockList lockList dI_DiskType diskType dl_unused unused dI_Name name DeviceNode (libraries/dos.h) DeviceList (Dos) 202 0000 0004 0008 000C 0010 0014 0018 001C 0020 0024 0028 002C dn_Next next dn_Type type dl_Task task dn_Lock lock dn_Handler handler dn_StackSize stackSize dn Priority ;DFIOrTTY dn_Startup startup dn_SegList segList dn_GlobVec globVec dn_Name name DiagArea (libraries/configregs.h) DiagArea (Expansion) 229 0000 0001 0002 0004 0006 0008 000A 000C 0OOE da_Config config da_Flags flags da_Size size da_DiagPoint diagPoint da_BootPoint bootPoint da_Name name da_Reserved0l reserved0l da_Reserved02 reserved02 DiscResource (resources/disc.h) DiscResource (Resources) 268 0000 0022 0026 0027 0028 002C 0030 0040 O0O4E 0064 007A 0090 dr.Eibrary library dr_Current current dr_Flags flags dr_pad pad dr_SysLib sysLib dr_CiaResource ciaResource dr_UnitID unitID dr_Waiting waiting dr_DiscBlock discBlock dr_DiscSync discSync dr_Index index DiscResourceUnit (resources/disc.h) DiscResourceUnit (Resources) 269 0000 dru_Message message 0014 dru_DiscBlock discBlock 002A dru_DiscSync discSync 0040 dru_Index index 0056 DiskFontHeader (libraries/diskfont.h) DiskFontHeader (DiskFont) 225 0000 dfh_DF df 000E dfh_FileID fileld 0010 dfh_Revision revision 0012 dfh_Segment segment 0016 dfh_Name name 0036. dfn._IFtr 006A DiskObject (workbench/workbench.h) DiskObject (Workbench) 271 0000 do_Magic magic 0002 do_Version version 0004 do_Gadget gadget 0030 do_Type type 0032 do_DefaultTool defaultToo] 0036 do_ToolTypes toolTypes 003A do_CurrentX currentX 00SE do. kurrentr current! 0042 do_DrawerData drawerData 0046 do_ToolWindow toolWindow 004A do_StackSize stackSize 004E DosEnvec (libraries/filehandler.h) DosEnvec (DOS) 204 0000 de_TableSize 0004 de_SizeBlock 0008 de_SecOrg 000C de_Surfaces 0010 de_SectorPerBlock 0014 de_BlocksPerTrack 0018 de_Reserved 001C de_PreAlloc 0020 de_Interleave 0024 de_LowCy] 0028 de_HighCy| 002C de_NumBuffers 0030 de_BuffMemType 0034 de_MaxTransfer 0038 de_Mask 003C de_BootPri 0040 de_DosType 0044 DosInfo (libraries/dosextens.h) DosInfo (Dos) 206 0000 di_McName mcName 0004 di_DevInfo devInfo 0008 di_Devices devices 000C di_Handlers handlers 0010 di_NetHand netHand 0014 DosLibrary (libraries/dosextens.h) DosLibrary (Dos) 206 0009: :01::1Tb: 1b 0022 d]I_Root root 0026 dI_GV gv 002A dI_A2 a2 002E d1_A5 a5 0032 d1_Ab a6 0036 DosPacket (libraries/dosextens.h) DosPacket (Dos) 207 0000 dp_Link link 0004 dp_Port port 0008 dp_Type type 000C dp_ResI resl 0010 dp_Res2 res2 0014 dp_Argl argl 0018 dp_Arg2 arg2 001C dp_Arg3 arg3 0020 dp_Arg4 arg4 0024 dp_Argb5b argb 0028 dp_Arg6 argb 002C dp_Arg/ arg/ 0030 DrawerData (workbench/workbench.h) DrawerData (Workbench) 274 0000 dd_NewWindow newWindow 0030 dd_CurrentX currentX 0034 dd_CurrentY currentY 0038 ExecBase (exec/execbase.h) ExecBase (Exec) 26 0000 0022 0024 0026 002A 002E 0032 0036 003A O03E 0042 0046 004AA O04E 0052 0054 0114 0118 ollc 0120 0122 0124 0126 0427 0128 O12A O12C 0130 0134 0138 O1l3C 0140 0142 0150 OLSE Ol6C O17A 0188 0196 O1A4A 01B2 0202 0212 0213 0214 LibNode libNode SoftVer softVer LowMemChkSum lowMemChkSum ChkBase chkBase ColdCapture coldCapture CoolCapture coolCapture WarmCapture warmCapture SysStkUpper sysStkUpper SysStkLower sysStkLower MaxLocMem maxLocMem DebugEntry debugEntry DebugData debugData AlertData alertData MaxExtMem maxExtMem ChkSum chkSum IntVects intVects ThisTask thisTask IdleCount idleCount DispCount dispCount Quantum quantum Elapsed elapsed SysFlags sysFlags IDNestCnt idNestCnt TDNestCnt tdNestCnt AttnFlags attnFlags AttnResched attnResched ResModules resModules TaskTrapCode taskTrapCode TaskExceptCode taskExceptCode TaskExitCode taskExitCode TaskSigAlloc taskSigAlloc TaskTrapAlloc taskTrapAlloc MemList memList ResourceList resourcelist Devicelist devicelist LATFLISTt TNErLISt .IBL1StT. ITDLIST PortList portList TaskReady taskReady TaskWait taskWait SoftInts softInts LastAlert lastAlert VBlankFrequency vBlankFrequency PowerSupplyFrequency powerSupplyFrequency SemaphoreList semaphorelist 0222 0226 022A 022C 0238 024C KickMemPtr kickMemPtr KickTagPtr kickTagPtr KickCheckSum kickCheckSum ExecBaseReserved execBaseReserved ExecBaseNewReserved execBaseNewReserved ExpansionBase (libraries/expansionbase.h) 230 0000 0022 0023 0024 0028 002C 003C 004A 0058 0158 0186 019C O1B2 01C8 ExpansionControl (libraries/configregs.h) ExpansionControl (Expansion) 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D O00E 0O00F 0010 LibNode Flags pad ExecBase SegList CurrentBinding BoardList 0002 er_Flags flags 0003 er_Reserved03 reservedO03 0004 er_Manufacturer manufacturer 0006 er_SerialNumber serialNumber 000A er_InitDiagVec initDiagVec 000C 000D O00E- 000F 0010 er_ReservedÜc er_ReservedOd er_Reserved0e er_ReservedOf reservedÜc reservedOd reservedO0e reservedOf FatIntuiMessage (intuition/intuition.h) FatIntuiMessage (Intuition) 71 0000 IntuiMessage intuiMessage MountList AllocRTable BindSemaphore Int2List Int6List Int7/ List ec_Interrupt interrupt ec_Reservedll ec_BaseAddress baseAddress reservedll ec_Shutup shutup ec_Reservedl4 ec_Reservedl5 ec_Reservedl6 ec_Reservedl7 ec_Reservedl8 ec_Reservedl9 ec_Reservedla ec_Reservedlb ec_Reservedlc ec_Reservedld ec_Reservedle ec_Reservedlf reservedl4 reservedl5 reservedl6 reservedl/ reservedl8 reservedl9 reservedla reservedlb reservedlc reservedld reservedle reservedlf ExpansionRom (libraries/configregs.h) ExpansionRom (Expansion) 233 0000 er_Type type 0001 er_Product product 232 0034 0038 PrevKeys prevkKeys FileHandle (libraries/dosextens.h) FileHandle (Dos) 209 0000 0004 0008 000C 0010 0014 0018 001C 0020 0024 0028 002C fh_Link link rhzPOrt. Dort fh_Type type fh_Buf buf fh_Pos pos fh_End end fh_Funcs funcl fh_Func2 func2 tn_Funcs: Tuncz fh_Args argl fh_Arg2 arg2 FileInfoBlock (libraries/dos.h) FileInfoBlock (Dos) 210 0000 0004 0008 0074 0078 007C 0080 0084 0090 O0EO 0104 fib_DiskKey diskKey fib_DirEntryType dirEntryType fib_FileName fileName fib_Protection protection fib_EntryType entryType fib_Size size fib_NumBlocks numßlocks fib_Date date fib_Comment comment fib_Reserved padding FileLock (libraries/dosextens.h) FileLock (Dos) 211 0000 fl_Link link 0004 fl_Key key 0008 fl_Access access 000C fl_Task task 0010 fl_Volume volume 0014 FileSysHeaderBlock (devices/hardblocks.h) FileSysHeaderBlock (Hardblocks) 329 0000 fhb_ID id 0004 fhb_SummedLongs summedLongs 0008 fhb_ChkSum chkSum 000C fhb_HostID hostID 0010 fhb_Next next 0014 fhb_Flags flags 0018 fhb_Reserved reserved 1 0020 fhb_DosType dosType 0024 fhb Version version 0028 fhb_PatchFlags patchFlags 002C fhb_Type type 0030 fhb_Task task 0034 fhb_Lock lock 0038 fhb_Handler handler 003C fhb_StackSize stackSize 0040 fhb_Priority priority 0044 fhb_Startup startup 0048 fhb_SegListBlocks seg- ListBlocks 004C fhb_GlobVec globVec 0060 fhb_Reserved2 reserved? O00AC fhb_Reserved3 reserved3 0100 FileSystemStartupMsg (libraries/filehandler.h) FileSystemStartupMsg (DOS) 212 0000 fssm_Unit unit 0004 fssm_Device device 0008 fssm_Environ environ 000C fssm_Flags flags 0010 FontContents (libraries/diskfont.h) FontContents (DiskFont) 225 0000 fc_FileName fileName 0100 fc_YSize ySize 0102 fc_Style style 0103 fc_Flags flags 0104 FontContentsHeader (librariesdiskfont.h) FontContentsHeader (DiskFont) 226 0000 fch_FileID fileld 0002 fch_NumEntries numEntries 0004 FreeList (workbench/workbench.h) FreeList (Workbench) 274 0000 fl_NumFree numFree 0002 fl_MemList memList 0010 Gadget (intuition/intuition.h) Gadget (Intuition) 71 0000 NextGadget nextGadget 0004 LeftEdge leftEdge 0006 TopEdge topEdge 0008 Width width 000A Height height 000C Flags flags 000E Activation activation 0010 GadgetType gadgetType 0012 GadgetRender gadgetRender 0016 SelectRender selectRender 001A GadgetText gadgetText 001E MutualExclude mutualExclude 0022 Speciallnfo speciallnfo 0026 GadgetID gadgetID 0028 UserData userData 002C GadgetInfo (intuition/intuitionbase.h) GadgetInfo (Intuition) 76 0000 gi_Environ environ 0004 gi_Gadget gadget 0008 gi_Box box 0010 gi_Container container 0018 gi_Layer layer O0I1C gi_NewKnob newKnob 0024 GamePortTrigger (devices/gameport.h) GamePortTrigger (GamePort) 291 0000 gpt_Keys keys 0002 gpt_Timeout timeout 0004 gpt_XDelta xDelta 0006 gpt_YDelta yDelta 0008 GelsInfo (graphics/rastport.h) GelsInfo (Graphics) 152 0000 sprRsrvd sprRsrvd 0001 Flags flags 0002 gelHead gelHead 0006 gelTail gelTail 000A nextLine nextLine O00E. TastColor lastColor 0012 col1Handler col1Handler 0016 leftmost leftmost 0018 rightmost rightmost O001A topmost topmost 001C bottommost bottommost DOLE: FfirstBliss0bj firstBlissObj 0022 lastBlissObj lastBliss0bj 0026 GfxBase (graphics/gfxbase.h) GfxBase (Graphics) 154 0000 LibNode 1ibNode 0022 ActiView actiView 0026 copinit copinit 002A cia cia 002E blitter blitter 0032 LOFlist JoFlist 0036 SHFlist shFlist 003A blthd bIthd DOSE: BLEI! "DIET! 0042 bsblithd bsblthd 0046 bsbltt| bsblttl] 004A vbsrv vbsrv 0060 timsrv timsrv 00/6 bltsrv. bltsrv 008C TextFonts textfFonts 009A DefaultFont defaultFont 0O09E Modes modes 00AD VBlank vBlank 00Al Debug debug 00A2 BeamSync beamSync 00A4 system_bplconO bpIconO 00A6 SpriteReserved spriteReserved 00A7 bytereserved bytereserved 00A8 D0AA OOAC OOAE O0OBC 00C0 0O0CE 00DO 00D4 00D6 00D8 00DA O0ODE OODE O0EO 00EA 00E8 00EA OOEC 0148 Flags flags BEIELOCK -BITELOCK BlitNest blitNest BlitWaitQ blitWaitQ BlitOwner blitOwner TOF_WaitQ waitQ DisplayFlags displayFlags SimpleSprites simpleSprites MaxDisplayRow maxDisplayRow MaxDisplayColumn maxDisplayColumn NormalDisplayRows normalDisplayRows NormalDisplayColumns normalDisplayColumns NormalDPMX normalDPMX NormalDPMY normalDPMY LastChanceMemory lastChanceMemory LCMptr 1cMptr MicrosPerLine microsPerLine MinDisplayColumn reserved reserved reserved GListEnv (intuition/intuitionbase.h) GListEnv (Intuition) 77 0000 0004 0008 D000C 0010 0014 0018 001A 0022 002A ge_Screen screen ge_Window window ge_Requester requester ge_RastPort rastPort ge_Layer layer ge_G/ZLayer gzzLayer ge_Pens pens ge_Domain domain ge_G/Zdims gzzDims IBox (intuition/intuitionbase.h) IBox (Intuition) 79 0000 Left left 0002 Top top 0004 Width width 0006 0008 Height height Image (intuition/intuition.h) Image (Intuition) 79 0000 LeftEdge leftEdge 0002 TopEdge topEdge 0004 Width width 0006 Height height 0008 Depth depth 000A ImageData imageData 000E PlanePick planePick 000F PlaneOnOff plane0OnOff 0010 NextlImage nextlImage 0014 InfoData (libraries/dos.h) InfoData (Dos) 213 0000 id_NumSoftErrors numSof- tErrors 0004 id_UnitNumber unitNumber 0008 id_DiskState diskState 000C id_NumBlocks numBlocks 0010 id_NumBlocksUsed num- BlocksUsed 0014 id_BytesPerBlock byte- sPerBlock 0018 id_DiskType diskType 001C id_VolumeNode volumeNode 0020 id_InUse inlUse 0024 InputEvent (devices/inputevent.h) InputEvent (InputEvent) 332 0000 ie_NextEvent nextEvent 0004 ie_Class class 0005 ie_SubClass subClass 0006 ie_Code code 0008 ie_Qualifier qualifier 000A ie_x X 000C ie_y y 000A ie_addr eventAddress 000E ie_TimeStamp timeStamp 0016 Interrupt (exec/interrupts.h) Interrupt (Exec) 32 0000 is_Node node 000E is_Data data 0012 is_Code code 0016 IntuiMessage (intuition/intuition.h) IntuiMessage (Intuition) 81 0000 ExecMessage execMessage 0014 Class class 0018 Code code 001A Qualifier qualifier 001C IAddress iAddress 0020 MouseX mouseX 0022 MouseY mouseY 0024 Seconds seconds 0028 Micros micros 002C IDCMPWindow idcempWindow 0030 specialLink Specilalink 0034 IntuiText (intuition/intuition.h) IntuiText (Intuition) 82 0000 FrontPen frontPen 0001 BackPen backPen 0002 DrawMode drawMode 0004 LeftEdge leftEdge 0006 TopEdge topEdge 0008 ITextFont iTextFfont 000C IText iText 0010 NextText nextText 0014 IntuitionBase (intuition/intuitionbase.h) IntuitionBase (Intuition) 84 0000 LibNode 1libNode 0022 ViewLord viewLord 0034 ActiveWindow activeWindow 0038 ActiveScreen activeScreen 003C FirstScreen firstScreen 0040 Flags flags 0044 MouseY mouseY 0046 MouseX mouseX 0048 Seconds seconds 004C Micros micros 0050 MinXMouse minXMouse 0052 MaxXMouse maxXMouse 0054 MinYMouse minYMouse 0056 MaxYMouse maxYMouse 0058 StartSecs startSecs 005C StartMicros startMicros 0060 SysBase sysBase 0064 GfxBase gfxBase 0068 LayersBase layersBase 006C ConsoleDevice consoleDevice 0070 0074 0075 0076 0077 0078 007A 007C 007E 00E2 00EA 0112 O13A 0162 018A O1BA 01C0 01C4 01C8 O1CA 0232 0236 023A 023E 0268 028C 0290 0294 0298 029A 029C 029E 02A2 O2AA O2ZAE 02B2 02BA 02BC O2BE 02C2 02C6 02CA DZCE O30E 0.316 OS1E O32E 0336 033A 033B 033C APointer aPointer APtrHeight aPtrHeight APtrWidth aPtrWidth AX0Offset aX0ffset AYOffset aYOffset MenuDrawn menuDrawn MenuSelected menuSelected OptionList optionList MenuRPort menuRPort MenuTmpRas menuTmpRas ItemCRect itemCRect SubCRect subCRect IBitMap iBitMap SBitMap sBitMap InputRequest inputRequest inputInterrupt InputInterrupt EventKey eventKey IEvents iEvents EventCount eventCount lEBuffer ieBuffer ActiveGadget activeGadget ActivePInfo activePInfo Activelmage activelmage GadgetEnv gadgetEnv GadgetInfo gadgetInfo KnobOffset knobOffset getOKWindow getOKWindow getOKMessage getOKMessage setWExcept setWExcept GadgetReturn gadgetReturn StateReturn stateReturn RP rp ITmpRas iTmpRas OldClipRegion oldClipRegion OldScroll oldScroll IFrame iFrame hthick hthick vthick vthick frameChange frameChange sizeDrag sizeDrag FirstPt firstPt OldPt oldPt SysGadgets sysGadgets CheckImage checklImage Amigalcon amigalcon apattern aPattern bpattern bPattern IPointer iPointer IPtrHeight iPtrHeight IPtrWidth iPtrWidth IXOffset iX0Offset 033D 033E 0342 0346 0348 034A 034C O34E 0350 0352 0354 0356 0358 035A 0356 O35E 0360 0362 0364 036C 0370 0374 0376 0378 037A 037%C 0380 0382 0384 0386 O3AE 03B0 0384 03B8 OSEC O3F0 0O3F4 03F8 O3FA 0408 054A 054C OS4E 0550 O56E IYOffset iYOffset DoubleSeconds doubleSeconds DoubleMicros doubleMicros WBorLeft wBorLeft WBorTop wBorTop WBorRight wBorRight WBorBottom wBorBottom BarVBorder barVBorder BarHBorder barHBorder MenuVBorder menuVBorder MenuHBorder menuHBorder colorO colorO0 colorl colorl color2 color? color3 color3 colorl17 color1l7 colorl18 color18 color19 color19 SysFont sysFont Preferences preferences Echoes echoes ViewInitX viewInitX ViewInitY viewInitY CursorDX cursorDX CursorDY cursorDY KeyMap keyMap MouseYMinimum mouseYMinimum ErrorX errorX ErrorY errorY l0Excess ioExcess HoldMinYMouse holdMinYMouse WBPort wbPort iqd_FNKUHDPort fnkuhdPort WBMessage wbMessage HitScreen hitScreen SimpleSprite simpleSprite AttachedSSprite attachedSSprite GotSpritel gotSprite] Semaphorelist semaphoreLlist ISemaphore iSemaphore MaxDisplayHeight maxDisplayHeight MaxDisplayRow maxDisplayRow MaxDisplayWidth maxDisplayWidth Reserved reserved IntVector (exec/interrupts.h) IntVector (Exec) 32 0000 iv_Data data 0004 iv_Code code 0008 iv_Node node 000C IOAudio (devices/audio.h) IOAudio (Audio) 282 0000 ioa_Request request 0020 ioa_AllocKey allocKey 0022 ioa_Data data 0026 ioa_Length length 002A ioa_Period period 002C ioa_Volume volume 002E ioa_Cycles cycles 0030 ioa_WriteMsg writeMsg 0044 IOClipReq (devices/clipboard.h) IOClipReq (Clipboard) 284 0000 io_Message message 0014 io_Device device 0018 io_Unit unit O00lC io_Command command 00O1E io_Flags flags DULF: IO.EFFOr error 0020 io_Actual actual 0024 io_Length length 0028 io_Data data 002C io_Offset offset 0030 io_ClipID clipID 0034 IODRPReq (devices/printer.h) IODRPRegq (Printer) 307 0000 io_Message message 0014 io_Device device 0018 io_Unit unit 00l1C io_Command command O0Ol1E io_Flags flags DOLF I0zErFoOr error 0020 io_RastPort rastPort 0024 io_ColorMap colorMap 0028 io_Modes modesHi modes 0026. TO2SreX. SEX OOZE. 10..SrCY SreY 0030 io_SrcWidth srcWidth 0032 io_SrcHeight srcHeight 0034 io_DestCols destCols 0038 io_DestRows destRows 003C io_Special special 003E IOExtPar (devices/parallel.h) IOExtPar (Parallel) 301 0000 IOPar ioPar 0030 io_PExtFlags pExtFlags 0034 io_Status status 0035 io_ParFlags parFlags 0036 io_PTermArray pTermArray 0O03E IOExtSer (devices/serial.h) IOExtSer (Serial) 312 0000 I0Ser ioSer 0030 io_CtlChar ctIChar 0034 io_RBufLen rBufLlen 0038 io_ExtFlags extFlags 003C io_Baud baud 0040 io_BrkTime brkTime 0044 io_TermArray termArray 004C io_ReadLen readLen 004D io_WriteLen writelen 004E io_StopBits stopBits O04F io_SerFlags serFlags 0050 io_Status status 0052 IOExtTD (devices/trackdiskK.h) IOExtTD (TrackDisk) 321 0000 iotd_Req req 0030 iotd_Count count 0034 iotd_SecLabel secLabe] 0038 IOPArray (devices/parallel.h) IOPArray (Parallel) 302 0000 PTermArray0 pTermArrayO 0004 PTermArrayl pTermArrayl 0008 IOPrtCmdReq (devices/printer.h) IOPrinter (Printer) 304 0000 io_Message message 0014 io_Device device 0018 io_Unit unit 001C io_Command command 001E io_Flags flags 001F io_Error error 0020 io_PrtCommand prtCommand 0022 io_ParmO parmO 0023 io_Parml parml 0024 io_Parm2 parm2 0025 io_Parm3 parm3 0026 IORequest (exec/io.h) IORequest (Exec) 33 0000 io_Message message 0014 io_Device device 0018 io_Unit unit 001C io_Command command 001E io_Flags flags DOLF To_Error error 0020 IOStdReq (exec/io.h) IOStdReq (Exec) 35 0000 io_Message message 0014 io_Device device 0018 io_Unit unit 001C io_Command command 001E io_Flags flags OOLFTO.EFFOF error 0020 io_Actual actual 0024 io_Length length 0028 io_Data data 002C io_Offset offset 0030 IOTArray (devices/serial.h) IOTArray (Serial) 315 0000 TermArrayO0 termArrayO 0004 TermArrayl termArrayl 0008 | Isrvstr (graphics/graphint.h) Isrvstr (Graphics) 159 0000 is_Node node 000E Iptr iptr 0012 code code 0016 ccode ccode O001A Carg carg 001E KeyMap (devices/keymap.h) KeyMap (KeyMap) 336 0000 km_LoKeyMapTypes loKeyMapTypes 0004 km_LoKeyMap loKeyMap 0008 km_LoCapsable 1loCapsable 000C km_LoRepeatable loRepeatable 0010 km_HiKeyMapTypes hiKeyMapTypes 0014 km_HikKeyMap hiKeyMap 0018 km_HiCapsable hiCapsable 001C km_HiRepeatable hiRepeatable 0020 KeyMapNode (devices/keymap.h) KeyMapNode (KeyMap) 338 0000 kn_Node node 000E kn_KeyMap keyMap 002E KeyMapResource (devices/keymap.h) KeyMapResource (KeyMap) 339 0000 kr_Node node 000E kr_List list DOLE Layer (graphics/clip.h) Layer (Graphics) 160 0000 front front 0004 back back 0008 ClipRect clipRect 000C rp rp 0010 bounds bounds 0018 reserved reserved 001C priority priority 001E Flags flags 0020 SuperBitMap superBitMap SuperClipRect superClipRect Window window Scroll_X scrolIX SCFOLI.Y -SEreLlY er 3cr er2.:Ccr2 crnew crnew SuperSaveClipRects superSaveClipRects _cliprects cliprects LayerInfo layerInfo Lock lock reserved3 reserved3 ClipRegion clipRegion saveClipRects saveClipRects reserved2 reserved? DamageList damagelist Layer_Info (graphics/layers.h) LayerlInfo (Graphics) 164 0000 0004 0008 000C 0018 0046 0054 0058 005A 005B 005C OO5E 0062 0066 top_layer layer check_Ip Ip obs obs FreeClipRects freeClipRects Lock lock gqs_Head head longreserved longreserved Flags flags fatten_count count LockLayersCount lockLayersCount LayerInfo_extra_size layerInfoExtraSize blitbuff blitbuff LayerInfo_extra layerInfoExtra Library (exec/libraries.h) Library (Exec) 37 0000 O00E 000F 0010 0012 lib_Node node lib_Flags flags lib_pad pad lib_NegSize negSize lib_PosSize posSize 0014 lib_Version version 0016 lib_Revision revision 0018 1lib_IdString idString 001C 1ib_Sum sum 0020 1ib_OpenCnt openCnt 0022 List (exec/lists.h) List (Exec) 38 0000 Ih_Head head 0004 Ih_Tail tail 0008 Ih_TailPred tailPred 000C Ih_Type type 000D Ih_pad pad 000E LoadSegBlock (devices/hardblocks.h) LoadSegBlock (Hardblocks) 331 0000 1sb_ID id 0004 1sb_SummedLongs summed- Longs 0008 1sb_ChkSum chkSum 000C Isb_HostID hostID 0010 1sb_Next next 0014 1Isb_LoadData loadData 0200 MemChunk (exec/memory.h) MemChunk (Exec) 40 0000 mc_Next next 0004 mc_Bytes bytes 0008 MemEntry (exec/memory.h) MemeEntry (Exec) 41 0000 meu_Reas reqs 0000 meu_Addr addr 0004 me_Length length 0008 MemHeader (exec/memory.h) MemHeader (Exec) 42 0000 mh_Node node 000C mh_Attributes attributes 0010 mh_First first 0014 mh_Lower lower 0018 mh_Upper upper 001C mh_Free free 0020 MemList (exec/memory.h) Memlbist (Exec) 43 0000 ml_Node node 000E mi_NumEntries numEntries 0010 mI_ME me 0018 Menu (intuition/intuition.h) Menu (Intuition) 94 0000 NextMenu nextMenu 0004 LeftEdge leftEdge 0006 Topkdge topEdge 0008 Width width 000A Height height 000C Flags flags 000E MenuName menuName 0012 FirstlItem firstltem 0016 JazzX jazzX 0018 JazzY jazzY 001A BeatX beatX DOl1C BeatY beatY OO1E Menultem (intuition/intuition.h) Menultem (Intuition) 96 0000 NextlItem nextltem 0004 LeftEdge leftEdge 0006 TopEdge topEdge 0008 Width width 000A Height height 000C Flags flags O00E MutualExclude mutualExclude 0012 ItemFill itemFill 0016 SelectFill selectFill 001A Command command 001C Subltem subltem 0020 NextSelect nextSelect 0022 Message (exec/ports.h) Message (Exec) 44 0000 mn_Node node 00O0E mn_RepIyPort replyPort 0012 mn_Length length 0014 Minlist (exec/lists.h) Minlist (Exec) 45 0000 mIh_Head head 0004 mIh_Tail tail 0008 mIh_TailPred tailPred 000C MinNode (exec/nodes.h) MinNode (Exec) 45 0000 mIn_Succ succ 0004 mIn_Pred pred 0008 MiscResource (resources/misc.h) MiscResource (Resources) 270 0000 mr_Library library 0022 mr_AllocArray allocArray 0032 mouth_rb (devices/narrator.h) Mouth (Narrator) 299 0000 voice voice 0046 width width 0047 height height 0048 shape shape 0049 pad pad 004A MsgPort (exec/ports.h) MsgPort (Exec) 46 0000 mp_Node node O00E mp_Flags flags 000F mp_SigBit sigBit 0010 mp_Siglask sigTask 0014 mp_MsgList msgList 0022 narrator_rb (devices/narrator.h) IONarrator (Narrator) 297 0000 message message 0030 rate rate 0032 pitch pitch 0034 mode mode 0036 sex sex 0038 ch_masks chMasks 003C nm_masks nmMasks 003E volume volume 0040 sampfreq sampfFreq 0042 mouths mouths 0043 chanmask chanMask 0044 numchan numChan 0045 pad pad 0046 NewScreen (intuition/intuition.h) NewScreen (Intuition) 98 0000 LeftEdge leftEdge 0002 TopEdge topEdge 0004 Width width 0006 Height height 0008 Depth depth 000A DetailPen detailPen 000B BlockPen blockPen 000C ViewModes viewModes 000E Type type 0010 Font font 0014 DefaultTitle defaultTitle 0018 Gadgets gadgets 00O1C CustomBitMap customBitMap 0020 NewWindow (intuition/intuition.h) NewWindow (Intuition) 100 0000 LeftEdge leftEdge 0002 TopEdge topEdge 0004 Width width 0006 Height height 0008 DetailPen detailPen 0009 BlockPen blockPen 000A IDCMPFlags idcmpFlags 000E Flags Flags 0012 FirstGadget firstGadget 0016 CheckMark checkMark 001A Title title OOlE Screen Screen 0022 BitMap bitMap 0026 MinWidth minWidth 0028 MinHeight minHeight 002A MaxWidth maxWidth 002C MaxHeight maxHeight 002E Type type 0030 Node (exec/nodes.h) Node (Exec) 48 0000 In_Succ succ 0004 In_Pred pred 0008 In_Type type DDP AINZRFT. DI 000A In_Name name 000E PartitionBlock (devices/hardblocks.h) PartitionBlock (Hardblocks) 340 0000 pb_ID id 0004 pb_SummedLongs summedLongs 0008 pb_ChkSum chkSum 000C pb_HostID hostlId 0010 pb_Next next 0014 pb_Flags flags 0018 pb_Reservedl reservedl 0020 pd_DevFlags devFlags 0024 pb_DriveName driveName 0044 pb_Reserved2 reserved2 004C pb_Enviroment enviroment 0090 pb_Reserved reserved DOGE PenPair (intuition/intuitionbase.h) PenPair (Intuition) 102 0000 DetailPen detailPen 0001 BlockPen blockPen 0002 Point (intuition/intuitionbase.h) Point (Intuition) 103 0000 X x 0002 Y y 0004 Preferences (intuition/intuition.h) Preferences (Intuition) 103 0000 FontHeight fontHeight 0001 PrinterPort printerPort 0002 BaudRate baudRate 0004 KeyRptSpeed keyRptSpeed 000C KeyRptDelay keyRptDelay 0014 DoubleClick doubleClick 001C 0064 0065 0066 0068 006A 006C 006E 0070 0072 0074 0076 0077 0078 007A 007C O07E 0080 009E O0AO 00A2 00A4 00A6 00A8 00AA DOAC OOAE 00BO 00B2 00B4 00B6 00B7 00B8 00B9 00BA 00D8 00D9 00DA O0DC OODE O0EO O0EIl 00EZ 00E4 00E6 00E7 00E8 PointerMatrix pointerMatrix X0Offset xOffset YOffset yOffset colorl7 C8JorlZ colorl18 color18 color19 color19 PointerTicks pointerTicks color: :Color) colorl colorl color2 color2 CO10r3- COLor3 ViewX0ffset viewX0ffset ViewYOffset viewYOffset ViewInitX viewInitX ViewInitY viewInitY EnableCLI enableCLI PrinterType printerType PrinterFilename printerFilename PrintPiteh BFIntPIiteh PrintQuality printQuality PrintSpacing printSpacing PrintLeftMargin printLeftMargin PrintRightMargin printRightMargin PrintImage printlImage PrintAspect printAspect PrintShade printShade PrintThreshold printThreshold PaperSize paperSize PaperLength paperlength PaperType paperType SerRWBits serRWBits SerStopBuf serStopBuf SerParShk serParShk LaceWB laceWB WorkName workName RowSizeChange padding ColumnSizeChange PrintFlags PrintMaxWidth PrintMaxHeigth PrintDensity PrintXOffset wb_Width wb_Heigth wb_Depth ext_size PrinterData (devices/prtbase.h) PrinterData (PrtBase) 341 0000 pd_Device device 0034 pd_Unit unit 0056 pd_PrinterSegment printerSegment 005A pd_PrinterType printerType 005C pd_SegmentData segmentData 0060 pd_PrintBuf printBuf 0064 pd_PWrite pWrite 0068 pd_PBothReady pBothReady 006C pd_pO pO 006C pd_s0 sO OOBE pd_pl pl O0OBE pd_s1 sl 0110 pd_TIOR tior 0138 pd_IORPort iorPort 015A pd_TC tc 01B6 pd_Stk stk 09B6 pd_Flags flags 09B7 pd_pad pad 09B8 pd_Preferences preferences OAAO pd_PWaitEnabled pWwaitkEnabled 0DAA2 PrinterExtendedData (devices/prtbase.h) PrinterExtendedData (PrtBase) 343 0000 ped_PrinterName printerName 0004 ped_Init init 0008 ped_Expunge expunge 000C ped_Open open 0010 ped_Close close 0014 ped_PrinterClass printerClass 0015 ped_ColorClass colorClass 0016 ped_MaxColumns maxColumns 0017 ped_NumCharSets numCharSets 0018 ped_NumRows numRows O001A ped_MaxXDots maxXDots 0O1E ped_MaxYDots maxYDots 0022 ped_XDotsInch xDotsInch 0024 ped_YDotsInch yDotsInch 0026 ped_Commands commands 002A ped_DoSpecial doSpecial 002E ped_Render render 0032 ped_TimeoutSecs timeoutSecs 0036 ped_8BitChars EightBitChars 003A ped_PrintMode 003E ped_ConvFunc 0042 PrinterSegment (devices/prtbase.h) PrinterSegment (PrtBase) 347 0000 ps_NextSegment nextSegment 0004 ps_runAlert runAlert 0008 ps_Version version 000A ps_Revision revision 000C ps_ped ped O0O4E Process (libraries/dosextens.h) Process (Dos) 214 0000 pr_Task task 005C pr_MsgPort msgPort 00/E pr_Pad pad 0080 pr_SegList segList 0084 pr_StackSize stackSize 0088 pr_GlobVec globVec 008C pr_TaskNum taskNum 0090 pr_StackBase stackBase 0094 pr_Result2 result2 0098 pr_CurrentDir currentDir 009C pr_CIS cis O0AO pr_COS cos 00A4 pr_ConsoleTask consoleTask 00A8 pr_FileSystemTlask fileSystemlask O0OAC pr_CLI cli 00B0O pr_ReturnAddr returnAddr 00B4 pr_PktWait pktWait 0088 pr_WindowPtr windowPtr DOBC ProplInfo (intuition/intuition.h) PropiInfo (Intuition) 111 0000 Flags flags 0002 HorizPot horizPot 0004 VertPot vertPot 0006 HorizBody horizBody 0008 VertBody vertBody 000A CWidth cWidth 000C CHeight cHeight 000E HPotRes hPotRes 0010 VPotRes vPotRes 0012 LeftBorder leftBorder 0014 TopBorder topBorder 0016 RaslInfo (graphics/view.h) RaslInfo (Graphics) 165 0000 Next next 0004 BitMap bitMap 0008 RxOffset rxOffset 000A RyOffset ryOffset 000C RastPort (graphics/rastport.h) RastPort (Graphics) 166 0000 Layer layer 0004 BitMap bitMap 0008 AreaPtrn areaPtrn 000C TmpRas tmpRas 0010 Arealnfo arealnfo 0014 GelsInfo gelsInfo 0018 Mask mask 0019 FgPen fgPen 001A BgPen bgPen 001B AOlPen a0lPen 001C DrawMode drawMode 001D AreaPtSz areaPtSz OO1E lJinpatcent linPatCnt 0O0O1F dummy dummy 0020 Flags flags 0022 LinePtrn linePtrn 0024 cp_x x 0026 cp_y y 0028 minterms minterms 0030 PenWidth penWidth 0032 PenHeight penHeight 0034 Font font 0038 AlgoStyle algoStyle 0039 TxFlags txFlags 003A TxHeight txHeight 003C TxWidth txWidth 003E TxBaseline txBaseline 0040 TxSpacing txSpacing 0042 RP_User user 0046 longreserved longreserved 004E wordreserved wordreserved 005C reserved reserved 0064 Rectangle (graphics/gfx.h) Rectangle (Graphics) 171 0000 MinX minX 0002 MinY minY 0004 MaxX maxX 0006 MaxY maxY 0008 Region (graphics/regions.h) Region (Graphics) 172 0000 bounds bounds 0008 RegionRectangle regionRectangle 000C RegionRectangle (graphics/regions.h) RegionRectangle (Graphics) 173 0000 Next next 0004 Prev prev 0008 bounds bounds 0010 Remember (intuition/intuition.h) Remember (Intuition) 113 0000 NextRemember nextRemember 0004 RememberSize rememberSize 0008 Memory memory 000C Requester (intuition/intuition.h) Requester (Intuition) 114 0000 OlderRequest olderRequest 0004 LeftEdge leftEdge 0006 TopEdge topEdge 0008 Width width 000A Height height 000C RelLeft relLeft 000E RelTop relTop 0010 ReqGadget reqGadget 0014 ReqBorder reqBorder 0018 ReqText reqlext 001C Flags flags O01E 0020 0024 0044 0048 004C 0070 BackFill backFill Reqlayer reqlayer ReqPadl reqPadl ImageBMap imageBMap RWindow rWindow RegqPad2 reqPad2 Resident (exec/resident.h) Resident (Exec) 49 0000 0002 0006 000A 000B 000C 000D 000E 0012 0016 001A rt_MatchWord matchWord rt_Matchlag matchlag rt_EndSkip endSkip rt_Flags flags rt_Version version rt_Type type rt_Pri pri rt_Name name rt_IdString idString ee RigidDiskBlock (devices/bootblock.h) RigidDiskBlock (HardBlock) 348 0000 0004 0008 000C 0010 0014 0018 DOIC 0020 0024 003C 0040 0044 0048 004C 0050 005C 0060 0064 rdb_ID id:ARRAY [0..31 OF CHAR; rdb_SummedLongs:LONGCARD; rdb_ChkSum chkSum: LONGCARD; rdb_HostID hostID:LONGCARD; rdb_Flags flags:RigidDiskFlagSet; rdb_BadBlockList: badBlockList:LONGCARD; rdb_Partitionlist partitionList:LONGCARD; rdb_FilesSysHeaderlist filesSysHeaderlList:LONGCARD; rdb_Drivelnit drivelnit:LONGCARD; rdb_Reservedl reservedl: ARRAY [0..5] OF LONGCARD; rdb_Cylinders cylinders:LONGCARD; rdb_Sectors sectors:LONGCARD; rdb_Heads heads:LONGCARD; rdb_Interleave interleave:LONGCARD; rdb_Park park:LONGCARD; rdb_Reserved2 reserved2: ARRAY [LO..2] OF LONGCARD; rdb_WritePreComp writePreComp:LONGCARD; rdb_ReducedWrite reducedWrite:LONGCARD; rdb_StepRate stepRate:LONGCARD; 0068 rdb_Reserved3 reserved3:ARRAY [0..4] OF LONGCARD; 007C rdb_RDBBlocksLo blocksLo:LONGCARD; 0080 rdb_RDBBIlockHi blockHi:LONGCARD; 0084 rdb_LowCylinder lowCylinder:LONGCARD; 0088 rdb_HiCylinder hiCcylinder:LONGCARD; 008C rdb_Cy1Blocks cylBlocks:LONGCARD; 0090 rdb_AutoParkSeconds autoParkSeconds:LONGCARD; 0094 rdb_Reserved4 reserved4:ARRAY [0..1] OF LONGCARD; 009C rdb_DiskVendor diskVendor: ARRAY [0..7] OF CHAR; 00A4 rdb_DiskProduct diskProduct:ARRAY [O0..15] OF CHAR; 00B4 rdb_DiskRevision diskRevision:ARRAY [0..3] OF CHAR; 00B8 rdb_ControllerVendor controllerVendor: ARRAY [0..7] OF CHAR; 00C0 rdb_ControllerProduct controllerProduct: ARRAY [0..15]J OF CHAR; 00D0 rdb_ControllerRevision controllerRevision: ARRAY [0..3] OF CHAR; 00D4 rdb_Reserved5 reserved5:ARRAY [0..9] OF LONGCARD; OOFC END; RootNode (libraries/dosextens.h) RootNode (Dos) 217 0000 rn_TaskArray taskArray 0004 rn_ConsoleSegment consoleSegment 0008 rn_Time time 0014 rn_RestartSeg restartseg 0018 rn_Info info 001C rn_FileHandlerSegment fileHandlerSegment 0020 SatisfyMsg (devices/clipboard.h) SatisfyMsg (Clipboard) 286 0000 sm_Msg msg 0014 sm_Unit unit 0016 sm_ClipID clipID 001A Screen (intuition/intuition.h) Screen (Intuition) 116 0000 NextScreen nextScreen 0004 FirstWindow firstWindow 0008 LeftEdge leftEdge 000A TopEdge topEdge 000C Width width 000E Height height 0010 MouseY mouseY 0012 MouseX mouseX 0014 Flags flags 0016 Title title 001A DefaultTitle defaultTitle 001E BarHeight barHeight 001F BarVBorder barVBorder 0020 BarHBorder barHBorder 0021 MenuVBorder menuVBorder 0022 MenuHBorder menuHBorder 0023 WBorTop wBorTop 0024 WBorLeft wBorLeft 0025 WBorRight wBorRight 0026 WBorBottom wBorBottom 0028 Font font 002C ViewPort viewPort 0054 RastPort rastPort 00B8 BitMap bitMap 00EO LayerInfo layerInfo 0146 FirstGadget firstGadget 014A DetailPen detailPen 014B BlockPen blockPen O14C SaveColorO saveColorO O14E BarLayer barlayer 0152 ExtData extData 0156 UserData userData 015A Semaphore (exec/semaphores.h) Semaphore (Exec) 0000 sm_MsgPort msgPort 0022 sm_Bids bids 0024 SemaphoreRequest (exec/semaphores.h) SemaphoreRequest (Exec) 51 0000 sr_Link link 0008 sr_Waiter waiter 000C SignalSemaphores (exec/semaphores.h) SignalSemaphore (Exec) 52 0000 ss_Link link 000E ss_NestCount nestCount 0010 ss_WaitQueue waitQueue 001C ss_Multiplelink multipleLink 0028 ss_Owner owner 002C ss_QueueCount queueCount 002E SimpleSprite (graphics/sprite.h) SimpleSprite (Graphics) 173 0000 posctldata posctldata 0004 height height 0006 x x 0008 y y 000A num num 000C SoftIntList (exec/interrupts.h) SoftIntList (Exec) 53 0000. SN2LT1SE Ist 000E sh_Pad pad 0010 StandardPacket (libraries/dosextens.h) StandardPacket (Dos) 218 0000 sp_Msg msg 0014 sp_Pkt pkt 0044 StringInfo (intuition/intuition.h) StringInfo (Intuition) 119 0000 Buffer buffer 0004 UndoBuffer undoBuffer 0008 BufferPos bufferPos 000A MaxChars maxChars 000C DispPos dispPos 000E UndoPos undoPos 0010 0012 0014 0016 0018 0o1lc 0020 0024 NumChars numChars DispCount dispCount CLeft cLeft CTop cTop LayerPtr layerPtr LongInt longInt AltKeyMap altKeyMap Task (exec/tasks.h) Task (Exec) 54 0000 O00E 000F 0010 0011 0012 0016 001A O01E 0022 0024 0026 002A O0ZE 0032 0036 003A 0O03E 0042 0046 004A 0058 005C TDU tc_Node node tc_Flags flags tc_State state tc_IDNestCnt idNestCnt tc_TDNestCnt tdNestCnt tc_SigAlloc sigAlloc tc_SigWait sigWait tc_SigRecvd sigRecvd tc_SigExcept sigkExcept tc_TrapAlloc trapAlloc tc_TrapAble trapAble tc_ExceptData exceptData tc_ExceptCode exceptCode tc_TrapData trapData tc_TrapCode trapCode tc_SPReg spReg tc_SPLower spLower tc_SPUpper spUpper tc_Switch switch tc_Launch launch tc_MemEntry memEntry tc_UserData userData PublicUnit (devices/trackdisK.h) TDUPublicUnit (Trackisk) 322 0000 0026 0028 002ZA 002C 0030 0034 0036 tdu_lUnit unit tdu_CompOlTrack compOlTrack tdu_Comp10Track comp1l0Track tdu_CompilTrack compl1Track tdu_StepDelay stepDelay tdu_SettleDelay settleDelay tdu_RetryCnt retryCnt TextAttr (graphics/text.h) TextAttr (Graphics) 175 0000 ta_Name name 0004 ta_YSize ySize 0006 ta_Style style 0007 ta_Flags flags 0008 TextFont (graphics/text.h) TextFont (Graphics) 176 0000 tf_Message message 0014 tf_YSize ySize 0016 tf_Style style 0017 tf_Flags flags 0018 tf_XSize xSize 001A tf_Baseline baseline 001C tf_BoldSmear boldSmear OOlE tf_Accessors accessors 0020. tf_LoChar 10Char 0021 tf_HiChar hichar 0022 tf_CharData charData 0026 tf_Modulo modulo 0028 tf_CharLoc charloc 002C tf_CharSpace charSpace 0030 tf_CharKern charkKern 0034 timerRequest (devices/timer.h) timerRequest (Timer) 316 0000 tr_node node 0020 tr_time time 0028 timeval (devices/timer.h) TimeVal (Timer) 317 0000 tv_secs secs 0004 TV.micro Micro 0008 TmpRas (graphics/rastport.h) TmpRas (Graphics) 178 0000 RasPtr rasPtr 0004 Size size 0008 UCopList (graphics/copper.h) UCopList (Graphics) 179 0000 Next next 0004 FirstCopList firstCopList 0008 CopList copList 000C Unit (exec/devices.h) Unit (Exec) 57 0000 unit_MsgPort msgPort 0022 unit_flags flags 0023 unit_pad pad 0024 unit_OpenCnt openCnt 0026 View (graphics/view.h) View (Graphics) 179 0000 ViewPort viewPort 0004 LOFCprList lofCprList 0008 SHFCprList shfCprList 000C DyOffset dyOffset 000E DxOffset dxOffset 0010 Modes modes 0012 ViewPort (graphics/view.h) ViewPort (Graphics) 181 0000 Next next 0004 ColorMap colorMap 0008 DspIns dspIns 000C SpriIns spriIns 0010 CIrIns cIrIns 0014 UCopIns uCopiIns 0018 DWidth dWidth 001A DHeight dHeight 001C DxOffset dxOffset O001E DyOffset dyOffset 0020 Modes modes 0022 SpritePriorities 0023 reserved reserved 0024 VSprite (graphics/gels.h) VSprite (Graphics) 183 0000 NextVSprite nextVSprite 0004 PrevVSprite prevVSprite 0008 DrawPath drawPath 000C ClearPath clearPath 0010 OldY oldY 0012 OldX oldX 0014 Flags flags 0016 Y y 0018 X x 001A Height height 001C Width width O001E Depth depth 0020 MeMask meMask 0022 HitMask hitMask 0024 ImageData imageData 0028 BorderLine borderLine 002C Col1Mask col1Mask 0030 SprColors sprColors 0034 VSBob vsBob 0038 PlanePick planePick 0039 PlaneOnOff planeOnOff 003A VUserExt vUserExt 003C WBArg (workbench/startup.h) WBArsg (Workbench) 275 0000 wa_Lock lock 0004 wa_Name name 0008 WBStartup (workbenchj/startup.h) WBStartup (Workbench) 276 0000 sm_Message message 0014 sm_Process process 0018 sm_Segment segment 001C sm_NumArgs numArgs 0020 sm_ToolWindow toolWindow 0024 sm_ArgList argList 0028 Window (intuition/intuition.h) Window (Intuition) 121 0000 NextWindow nextWindow 0004 LeftEdge leftEdge 0006 Topkdge topEdge 0008 000A 000C O00E 0010 0012 0014 0016 0018 001C 0020 0024 0028 002C 002E 0032 0036 0037 0038 0039 003A 003E 0042 0046 004A 0O04E O04F 0050 0051 0052 0056 005A O0O5E 0062 0063 0064 0068 006C OO6E 0070 0072 0074 0078 007C 0080 0084 Width width Height height MouseY mouseY MouseX mouseX MinWidth minWidth MinHeight minHeight MaxWidth maxWidth MaxHeight maxHeight Flags flags MenuStrip menuStrip Title title FirstRequest firstRequest DMRequest dmRequest ReqCount reqCount WScreen wScreen RPort rPort BorderLeft borderLeft BorderTop borderTop BorderRight borderRight BorderBottom borderBottom BorderRPort borderRPort FirstGadget firstGadget Parent parent Descendant descendant Pointer pointer PtrHeight ptrHeight PtrWwidth ptrWidth X0Offset xOffset YOffset yOffset IDCMPFlags idcmpFlags UserPort userPort WindowPort windowPort MessageKey messageKey DetailPen detailPen BlockPen blockPen CheckMark checkMark Screenlitle screenTitle GZZMouseX gzzMouseX GZ/2ZMouseY gzzMouseY GZZWidth gzzWidth GZZHeight gzzHeight ExtData extData UserData userData WLayer wLayer IFont iFont AnimComp 134 AnimOb 136 Arealnfo 139 AvailFont (=AvailFonts) 223 AvailFontHeader 224 (=AvailFontsHeader) BadBlockBlock 323 BadBlockEntry 325 BitMap 140 bItnode (=Bltnode) 235 Bob 141 BoolInfo 69 BootBlock 325 Border 70 CIA (=CIAB) 236 ClipboardUnitPartial 283 ClipRect 144 collTable 145 ColorMap 146 CommandLinelnterface 197 ConfigDev 227 Conlnit 326 copinit (=Copinit) 147 CopIns 147 CopList 149 eprlist. (-Cprlist)- 150 CurrentBinding 228 Custom 243 Date (=DateStamp) 199 DBufPacket 151 Device 26 DeviceData 339 DeviceList (=DeviceNode) 200 DeviceNode (=DevicelList) 202 DiagArea 229 DiskFontHeader 225 DiscResource 268 DiscResourcelnit 269 DiskObject 271 DosEnvec 204 DosInfo 206 DosLibrary 206 DosPacket 207 DrawerData 274 ExecBase 26 ExpansionBase 230 ExpansionControl 232 ExpansionRom 233 FatIntuiMessage 71 FileHandle 209 FilelnfoBlock 210 FileLlock 211 FileSysHeaderBlock 329 FileSystemStartupMsg 212 FontContents 225 FontContentsHeader 226 FreeList 274 Gadget 71 GadgetInfo 76 GamePortTrigger 291 GelsInfo 152 GfxBase 154 GListEnv 77 IBox 79 Image 79 InfoData 213 InputEvent 332 Interrupt 32 IntuiMessage 81 IntuiTlext 82 IntuitionBase 84 IntVector 32 I0OAudio 282 ALPHABETISCHES VERZEICHNIS DER DATENSTRUKTUREN IOClipReq (=I0Clij 0:rd) 284 IODRPReq 307 I0OExtPar (=I10Paral e : 301 I0OExtSer (=10Seriua:‘ 312 IOExtTD (=10TrackDisk) 321 I0ONarrator (=narrator_rb) IOParallel (=10ExtPar) 301 IOPArray 302 297 lIOTimer (=timerrequest) 316 IOTrackDisk (=I0OExtTD) 321 Isrvstr 159 KeyMap 336 KeyMapMode 338 KeyMapResource 339 Layer 160 Layer_Info (=LayerInfo) 164 Library 37 List 38 LoadSegBlock 331 MemChunk 40 MemEntry 41 MemHeader 42 MemlList 43 Menu 94 Menultem 96 Message 44 MinList 45 MinNode 45 MiscResource 270 mouth_rb (=Mouth) 299 MsgPort 46 narrator_rb (=I0ONarrator) 29 NewScreen 98 Newwindow 100 Node 48 PartitionBlock 340 PenPair 102 Point 103 Preferences 103 PrinterData 341 PrinterExtendedData 343 PrinterSegment 34/7 Process 214 PropInfo 111 RasInfo 165 RastPort 166 Rectangle 171 Region 172 RegionRectangle 173 Remember 113 Requester 114 Resident 49 RigidDiskBlock 348 RootNode 217 SatisfyMsqg 286 Screen 116 Semaphore 51 SemaphoreRequest 52 SignalSemaphores 52 SimpleSprite 173 Ssotrtlntkrst 53 StandardPacket 218 StringInfo 119 Task 54 TDU_PublicUnit 322 (=TDUPubliclnit) TextAttr 175 TextFont 176 timerRequest (=10Timer) 316 timeval (=TimeVal) 317 TmpRas 178 UCopList 179 Um: 37 View 179 ViewPort 181 VSprite 183 WBArg 275 wWBStartup 276 Window 121 Amiga Datenstrukturen-Lexikon »Amiga-Systemdatenstrukturen effektiv nutzen« - ein Begriff, der oft nur Geheimnisse beinhaltet. Grund dafür war bislang vor allem der Mangel an Fachlitera- tur, die das Thema »Datenstruk- turen« nur nebensächlich be- handelte. Die vorhandene Lücke ist durch das vorliegende Buch geschlos- sen, denn es ist für alle Amiga- Programmierer geeignet, die sy- stemspezifische Strukturen un- abhängig von der Programmier- sprache benutzen. In diesem Lexikon werden alle Systemdatenstrukturen des Amiga unter Angabe der Offsets aufgelistet und ausführlich beschrieben. Dabei wird jeder Parameter umfassend erklärt. Tabellarisch werden die For- mate »C« und »Modula-2« ver- glichen. Diese beiden Program- miersprachen wurden bewußt gewählt: »C« kann als Standard- Markt&fTechnik sprache des Amiga bezeichnet werden, »Modula-2«, stellt die strengsten Anforderungen an die Syntax. Aber auch die Basic- und As- sembler-Freaks kommen auf ihre Kosten, und sei es nur durch die angegebenen Offsets. Zu allen vier Programmierspra- chen sind detaillierte Benutzer- hinweise mit Anwendungsbei- spielen beschrieben. Zusätzli- che Referenzlisten der auf die jeweilige Datenstruktur zugrei- fenden Systemroutinen runden die einzelnen Beschreibungen ab. Bei den ausführlichen Beschrei- bungen aller System-Daten- strukturen werden insbesondere folgende Aspekte berücksichtigt: — das C-Format: — das INCLUDE-File das Modula-2-Format das Definitionsmodul der hexadezimale und dezimale Offset jeder Kom- ponente — die Größe der Datenstruktur in Byte, ebenfalls hexadezi- mal und dezimal — Abweichungen des Assem- bler-Formats vom C-Format — die Datenstrukturenreferenz, also eine Auflistung der Namenaller Datenstrukturen, die diese oder einen Adreß- zeiger auf diese Datenstruk- tur beinhalten — die Routinenreferenz, also eine Auflistung der Namen aller Systemroutinen, die auf diese Datenstruktur zugreifen — eine Aufgabenbeschreibung der Datenstruktur — eine Beschreibung jeder einzelnen Komponente der Datenstruktur Hardware-Anforderungen: Amiga 500, 1000, 2000 oder 2500 ISBN 3-859ULYD-230-2 001057790 2503 DM 69,— sFr 66,20 ÖS 538,—