21-Apr-90 OBERON V1.0 (eingeschränkte Version) Vorwort: Vor Ihnen liegt eine frei kopierbare Demo-Version eines leistungsfähigen Compilers für eine der modernsten objektorientierten Sprachen. Oberon ist die neuste Entwicklung von Prof. Dr. Niklaus Wirth an der ETH Zürich. Diese Sprache entstand dort innerhalb eines Projekts, das sich das Ziel setzte, die Leistungsfähigkeit der Sprache Modula-II zu vergrößern und gleichzeitig ihre Komplexität zu verringern. Dazu wurde Oberon um das Konzept der Typerweiterung ergänzt, wodurch objektorientiertes Programmieren ähnlich wie in Smalltalk oder C++ möglich wird, während jedoch die gewohnte Notation aus Modula-II und Pascal größtenteils beibehalten wird. Dieser Compiler hat einige herausragende Fähigkeiten, die von anderen Compilern kaum erreicht werden: - Der Compiler ist durch das Single-Pass Konzept sehr schnell. Dennoch erzeugt er durch eine sorgfältige Auswahl an Optimierungen kurzen und schnellen Code. - Die Objektdateien sind ALink- bzw. BLink- kompatibel. Dadurch sind sie sehr flexibel einsetzbar und die Einbindung von Routinen aus anderen Sprachen, wie Assembler und C, wird leicht möglich. - Oberonprogramme werden optimierend gelinkt. Es kommen also keine Prozeduren, die niemals aufgerufen werden, in das ausführbare Programm, so daß dieses meist recht kurz wird. Ein 'leeres' Oberonprogramm ist zum Beispiel weniger als ein halbes Kilobyte lang. - Programme, die mit diesem Compiler entwickelt wurden, sind sehr sicher im Laufzeitverhalten, da der Compiler massiv Überprüfungscode einsetzt, um möglichst alle Fehler abzufangen. Fehler führen in den meisten Fällen nicht zur Guru-Meditation, sondern werden durch das Laufzeitsystem abgefangen. - Um problemlos auf das Amiga-Betriebssystem und alle Resourcen zugreifen zu können, wurde die Sprache um Amiga-spezifische Typen ergänzt. - Es stehen viele Bibliotheksmodulen zur Verfügung und es werden ständig neue Module geschrieben, die dann als Zusatzpakete erhältlich sein werden, oder auf Public Domain Disktten erscheinen. - Alle Oberonprogramme können resident geladen werden, sind jedoch nicht reentrant, d.h. sie dürfen, wenn sie resident sind, nicht 2 mal gleichzeitig gestartet werden. Dieser Compiler ist also ein ideales Werkzeug, um effektiv kleine und große Programme zu entwickeln. Durch die objektorientierten Eigenschaften kann eine einmal aufgebaute Modulbibliothek leicht für neue Projekte verwendet und die früher definierten Objekte können leicht an die neuen Aufgaben angepasst werden. Einschränkungen der Demo-Version: Diese Version des Compilers soll Sie in die Lage versetzen, ein paar kleine Programme in Oberon zu schreiben und etwas in den Compiler und seine Fähigkeiten hineinuzuschnuppern. Ich muß jedoch auch von irgend etwas Leben und kann den Compiler daher nicht voll der Öffentlichkeit zur Verfügung stellen. Daher wurden in dieser Version ein paar Einschränkungen eingebaut, die ein sinnvolles Arbeiten über längere Zeit unmöglich machen sollen und Sie damit zwingen, sich die vollständige Version zu kaufen. Die Einschränkungen im einzelnen: - Es wird nur ein kleiner Teil der Modulbibliothek und der Amiga Interface-Module mitgeliefert - Die Anleitung ist knapp und wenigsagend gehalten und zudem nicht gedruckt. - Der Compiler läuft Montags nicht - Der Quelltext je Modul darf höchstens 10K lang sein - Der erzeugte Programmcode je Modul darf höchstens 5K lang werden - Der Bereich der globalen Variablen je Modul ist auf 3K beschränkt - Der Bereich der Stringkonstanten je Modul ist auf 1K beschränkt - Ein Modul kann maximal 7 andere Module importieren - Beim 10., 12., 14. etc. Start läuft der Compilers nicht - Der Editor kann höchsten 200 Zeilen Text bearbeiten Es ist sicher für Hacker kein Problem, diese Einschränkungen herauszupatchen. Jede Änderung an den Programmen, Texten und sonstigen mitgelieferten Datein ist jedoch untersagt, sowie der Besitz, die Verwendung oder Verbreitung von veränderten Versionen der Programme und Dateien. Es ist sicher einfacher, sich eine Raubkopie des Compilers zu besorgen, als die Einschränkungen herauszupatchen. Strafbar macht man sich dabei gleichermaßen. Die Diskette enthält folgende Dateien: LiesMich: Diese Datei Oberon-Report: Der Revised-Oberon-Report, direkt von der ETH Zürich ModulaToOberon: Der Text "From Modula To Oberon", auch von der ETH. Install: Script-File zur einfachen Installation des Compilers Oberon: Der Compiler OLink: Utility zum Linken von Oberon-Programen, ohne alle Modulnamen in BLink eintippen zu müssen. OEd: Der Editor zum Compiler OErr: Sind während der Compilation eines Programms Fehler aufgetreten, können sie mit diesem Programm angesehen werden. ExeIcon: IconX-Ähnliches Programm BLink: Der Linker BLink.doc: Englische Dokumentation zum Linker Path: Pfaddatei für Compiler und OLink Fehler-Meldungen: Die Fehlermeldungen. Wird von OEd und OErr beim Anzeigen von Fehlern gebraucht. Demos (dir): Demoprogramme: Tetriz: Kleines Workbench-Spiel, dürfte vielen bekannt vorkommen Pute: CLI-Taschenrechner, berechnet INTEGER-Ausdrücke wie 3 + 103 MOD 27 * (98 DIV 3) / 2. Demo: 3D-Demo: Würfel Amok: 3D-Demo: AMOK-Schriftzug Bio: Demoprogramm für das AVL-Standardmodul und die Benutzung von Recorderweiterungen Sparks: Liniendemo Sundown: Copperlist-Demo Hello: Einfaches Hello-World Demo Sterne: Sternenflug-Demo von M. Peuckert Interrupt:Erzeugt einen VertB-Interrupt Icons (dir): Dieses Directory enthält die Icons der Oberondateien. Diese werden vom Compiler, Linker etc. bei bedarf kopiert. c (dir): Commando-Directory, enthält nur MuchMore libs (dir): Zusätzlich benötigte Library: arp.library sym (dir): Symboldateien der mitgelieferten Module obj (dir): Objektdateien der mitgelieferten Module Alle Programm dieser Diskette, mit der Ausnahme von BLink, wurden in Oberon geschrieben und mit diesem Compiler entwickelt. Verwendete Dateinamen: Die OBERON-Dateien haben folgende Endungen: Module / Programme: '.mod' Symboldatei: '.sym' Objektdatei: '.obj' Linkdatei (ruft BLink auf): '.lnk' Withdatei für BLink: '.wth' Executeable: '' Installation des Compilers: Der Compiler kann einfach durch Doppelklicken des 'Install'-Icons installiert werden. Dabei wird die arp.library (von OEd benötigt) in das LIBS:-Verzeichnis kopiert und das logische Device OBERON: auf die Oberon-Diskette gesetzt. Wer vom CLI arbeitet, sollte zudem noch "PATH OBERON: ADD" eingeben. Der Editor OEd: Dieser Editor unterstützt besonders die Entwicklung von Oberonprogrammen. Er kann leicht mit der Maus bedient werden, erlaubt das gleichzeitige Bearbeiten mehrere Texte, enthält einen Oberon-Syntaxchecker, erlaubt das Starten von Compiler, Linker und compiliertem Programm und kann die Fehlermeldungen des Compilers anzeigen. Starten von OEd: Aufruf: OEd { [-t#i] | } Gestartet wird OEd einfach durch Doppelklick auf sein Icon oder durch Eingabe von "OEd" im CLI. Werden Argumente übergeben, oder wurden von der Workbench zuvor Texte angeklickt und OEd mit gedrückter Shift-Taste doppelgeklickt, dann werden die angewählten Texte automatisch in jeweils ein Fenster geladen. Beim Start vom CLI kann die Tabulatorweite gesetzt werden. Der voreingestellte Wert beträgt 2. Wer z.B. einen Tabulator von 8 bevorzugt, kann OEd mit "OEd -t8 Progr.mod" starten. Tabulatoren größer 9 sind nicht möglich. Die Option 'i' erzwingt auch beim CLI-Start, daß Icons erzeugt werden. Die Titelzeile des Textfenster dient als Statuszeile. Sie zeigt wichtige Informationen, wie Fehlermeldungen, Cursorposition, Textlänge und den Dateinamen an. Die Tastenbelegung: Cursortasten (die Tasten mit den Pfeilen): Wie Sie sich vielliecht schon gedacht haben, kann man mit diesen Tasten den Cursor im Text bewegen. mit Alt: wort / seitenweises Springen mit Shift: An Text- bzw. Zeilen-Anfang bzw. -Ende. Backspace (die Taste rechts oben mit dem Pfeil nach links): löscht Zeichen links vom Cursor. Del: löscht Zeichen unter Cursor. Mit Shift: löscht Zeile. Mit Control: löscht alles rechts vom Cursor. Return: Neue Zeile unterhalb Cursor einfügen. TAB: Springt zur nächsten, mit Shift zur vorigen, Tabulatormarke. Control+'S': Zerteilt (splittet) Zeile an Cursorposition in 2 Zeilen. Control+'J': Vereinigt (joint) 2 Zeilen. Die Maus: Linke Taste Kurz drücken: Cursor setzten. Linke Taste länger drücken und Maus bewegen: Block markieren. Die Menüs: Das Projekt Menu: Load (Amiga + 'L'): Text Laden New Window (Amiga + 'W'): Neues Textfenster öffnen Save (Amiga + 'S'): Text unter altem Namen speichern Save As (Amiga + 'V'): Text unter neuem Namen speichern Save block (Amiga + 'O'): Block speichern Insert File (Amiga + 'I'): Textdatei einfügen Quit (Amiga + 'Q'): Editor verlassen About (Amiga + 'J'): Infos zum Editor ausgeben Das Search Menu: Find (Amiga + 'F'): String einlesen und danach suchen Next (Amiga + 'N'): Zum nächsten Vorkommen des Suchstrings Previous (Amiga + 'P'): Zum vorigen Vorkommen des Suchstrings FindRep (Amiga + 'G'): 2 Strings einlesen: Danach 1. durch 2. String ersetzen NextRep (Amiga + 'R'): Nächstes Vorkommen von String 1 durch String 2 ersetzen PrevRep (Amiga + 'H'): Voriges Vorkommen von String 1 druch String 2 ersetzen Das Block Menu: Begin (Amiga + 'B'): Block-Anfang-Marke setzen End (Amiga + 'E'): Block-Ende-Marke setzen Copy (Amiag + 'Y'): Block kopieren Move (Amiga + 'M'): Block verschieben Delete (Amiga + 'D'): Block löschen Unmark (Amiga + 'U'): Blockmarkierung löschen Das Oberon Menu: Parse (Amiga + 'A'): Oberonsyntax überprüfen. Evt. zur fehlerhaften Stelle springen. Mit Parse können Syntaxfehler schnell gefunden werden, bevor ein Text compiliert wird. Compile (Amiga + 'C'): Compiliert den Text. Dieser muß zuvor abgespeichert werden. Link (Amiga + 'K'): Linkt den compilierten Text mit OLink Execute (Amiga + 'X'): Führt das gelinkte Programm aus. Next Error (Amiga + 'T'): Traten bei Compilation Fehler auf, springt 'Next Error' zum nächsten Fehler hinter der Cursorposition. Fehler wird in Statuszeile angezeigt. First Error (Amiga + 'Z'): Springt zum ersten Fehler Der Compiler Oberon: Start des Compilers: Aufruf aus dem Editor: Im Editor kann der Compiler einfach durch Anwahl des Menüpunktes 'Compile' gestartet werden. Aufruf vom CLI: Wer mit dem CLI arbeitet, sollte das aktive Verzeichnis mit dem CLI-Befehl 'CD' zunächst auf das Verzeichnis setzen, das die Quelltexte oder das 'txt'-Unterverzeichnis enthält. Der Compiler benötigt normalerweise mehr als 4 KByte Stapelspeicher. Der Stapel sollte daher mit dem CLI-Commando 'stack' auf 10000 bis 20000 Bytes gesetzt werden. Nun kann der Compiler mit folgender Syntax gestartet werden: Oberon { [-svbcrnti] } ist der Text, der compiliert werden soll. Dabei kann die Endung '.mod' weggelassen werden. Befindet sich der Quelltext in dem Unterverzeichnis mit dem Namen 'txt', wird er automatisch von dort geholt. Die Optionen ('[-svbcrnti]') beziehen sich auf alle Quelltexte, die rechts von ihnen stehen. Sie haben folgende Wirkung: Option Wirkung '-s' Stackkontrolle ausschalten '-v' Überlaufskontrolle ausschalten '-b' Bereichskontrolle ausschalten '-c' Caseindex-kontrolle ausschalten '-r' Returnkontrolle ausschalten '-n' Nil-Zeiger-Kontrolle ausschalten '-t' Typkontrolle ausschalten '-i' Icons erzeugen Wurde der Compiler ohne Parameter gestartet, gibt er den Prompt 'in>' aus und wartet auf die Eingabe des Quelltextnamens. Verlassen wird der Compiler dann einfach durch Drücken von . Aufruf von der Workbench: Wird der Compiler von der Workbench gestartet, müssen die Quelltext bei gedrückter Shift-Taste angeklickt und danach der Compiler doppelgeklickt werden. Von der Workbench sollte der Compiler nicht ohne Parameter aufgerufen werden, da er dann die Objekt- und Symboldatein nicht in das Verzeichnis schreibt, in dem sich die Quelltexte befinden, sondern in das Verzeichnis, in dem sich der Compiler selbst befindet. Dies ist meist nicht erwünscht. OLink: OLink vereinfacht den Aufruf von BLink. Wer mit der Workbench arbeitet kann OLink starten, indem er einfach das Icon der vom Compiler erzeugten Objektdatei doppelklickt. Vom CLI ist der Aufruf folgendermaßen: OLink [-bsi] Objektdatei ist die vom Compiler erzeugte Objektdatei des Hauptmoduls. Die Optionen haben folgende Funktion: -b BLink nicht starten -s BLINK mit Optionen SMALLCODE und SMALLDATA aufrufen. -i Icons erzeugen OErr: OErr zeigt die Fehler an, beim Compilieren aufgetreten sind. Aufruf: OErr {Quelltext}. Abweichungen vom OBERON-Report: - Speicher wird wie in Pascal mit NEW() und DISPOSE() verwaltet und nicht mit Garbagecollections. Ich denke das eine Implementierung des Garbage-Collection System auf dem Amiga kaum möglich und wenig sinnvoll ist. - Die Typeguards werden während der Compilationszeit und nicht, wie auf der CERES Maschine, während des Ladens eines Programms festgelegt. Copyright: Diese Diskette darf frei kopiert werden. Sie darf unverändert weitergegeben werden, solange dafür keine Gebühren verlangt werden. Es dürfen keine Änderungen an den Programmen und den Dateien dieser Diskette vorgenommen werden. Veränderte Versionen dieser Programme dürfen weder verwendet noch weiter verbreitet werden. Die Programme dürfen nur zusammen mit der gesamten Diskette weitergegeben werden. So ist es z.B. untersagt, den Editor herunterzunehmen und allein weiterzugeben, obwohl der Editor auch ohne den Compiler funktionsfähig ist. Die Texte von Niklaus Wirth dürfen auch allein verbreitet und z.B. in Mailboxen hochgeladen werden. Dabei dürfen sie jedoch nicht verändert werden und es sollte sichergestellt werden, daß sie nicht verändert werden (durch eine entsprechende Notiz). BLink und BLink.doc stammen von der Software Distillery. Sie dürfen auch ohne diese Diskette, jedoch nur zusammen und unverändert, vertrieben werden. Alle anderen Dateien sind © 1989/1990 by Fridtjof Siebert Nobileweg 67 D-7000 Stuttgart 40. Unrechtmäßige Verwendungen der Dateien werde ich strafrechtlich verfolgen lassen. Für Hinweise auf Fehler in meinen Programmen bin ich jederzeit Dankbar. Ich kann nicht garantieren, daß ich genügend Zeit finde, mich mit allen Zuschriften zu befassen. Daher bitte ich darum, Anfragen an die A+L AG zu richten, und mich nicht unnötig vom Programmieren abzuhalten. Ich nehme keine telofonischen Anfragen entgegen. Der Autor übernimmt keinerlei juristische Verantwortung oder Haftung jeglicher Art für die Korrektheit und Tauglichkeit der Programme und Dateien. Für Schäden, die auf die Verwendung der Programme oder Dateien zurückzuführen sind, kann der Autor nicht haftbar gemacht werden. Voll funktionsfähige Compilerversion: Der voll funktionsfähige Compiler wird vorraussichtlich im September 1990 erscheinen. Er kann dann bei der A+L AG Im Däderiz 61 CH-2540 Grenchen bestellt werden. Diese Version wird mit einer ausführlichen gedruckten Dokumentation, weiteren Hilfsprogrammen, vielen Bibliotheksmodulen und einem kompletten Interface zu den Amiga Betriebssystemroutinen (inklusive ARP) ausgeliefert. --- Fridtjof