)Times10.Scn.Fntx ZParcElemsAlloc  4ҝSyntax16.Scn.FntBx Z  ҝTimes16m.Scn.FntSyntax10b.Scn.FntLinkElemsAlloc*7: *S:!*[: *n:*{:*:*(<*W:*:*Ǽ:*:&*:/*:Syntax12m.Scn.FntSyntax10.Scn.FntMarkElemsAlloc7:Syntax10i.Scn.Fnt3mCourier10.Scn.Fnt3vp ҝy Syntax10m.Scn.Fnt hx   ҝB:'x   ҝS: x   ҝ[:! ,1 .x  ҝ    vp ҝn: {:  g): g i E(<v Zp ҝW: x :2*:v Zp) ҝyvp ҝL 3 Gvp ҝǼ: tઔ ҝx Z ҝux  ҝ:2:%Y|  ҝ d:.rK90Arbeiten mit ETH-Oberon Einige Tips und Kurzbeschreibungen zur tglichen Arbeit mit Oberon Inhalt: Der AsciiCoder Der Compiler System.Free & System.ShowModules Debugging System.State Der Trap-Viewer Weitere ntzliche Tools Der Analyzer Das Modul Batch Das Clipboard Die Oberon - Konsole Arbeiten mit Kommandos und Parametern Zustzliche Dokumentation zu einzelnen Modulen Der Inhalt dieses Texts ist eine lose Sammlung von Beschreibungen wichtiger und ntzlicher Module und Tools, die das Arbeiten mit Oberon erleichtern. Der AsciiCoder: Oberon verwendet ein eigenes Dateiformat zur Speicherung seiner Dokumente. Um den Transport zwischen verschiedenen Oberon-Systemen (Mac, WinNT, Win3.1, ..) zu erleichtern, kann man mehrere Dateien zu einem Archiv zusammenfassen. Diese Aufgabe bernimmt der AsciiCoder. AsciiCoder-Texte sind normale ASCII-Dateien, die am Anfang bereits das Dekodierkommando enthalten. AsciiCoder-Texte drfen nicht hndisch verndert werden! Aufruf: AsciiCoder.CodeFiles [%] filename {filename} ~ Optionen: % Kompression ein/aus Parameter: filename Ein beliebiger Dateiname. Konvention: Ascii-kodierte Texte sollten die Endung .Cod erhalten. Beispiel: AsciiCoder.CodeFiles UE1.Mod UE1Test.Mod UE1.Text ~  ffnet einen neuen Viewer mit dem kodierten Text. Dieser Text kann nun unter einem beliebigen Namen gespeichert werden. Zum Speichern unbedingt EditTools.StoreAscii verwenden! Wenn EditTools.StoreAscii verwendet wird, werden alle Text-Elemente (insbesondere FoldElems) ignoriert!  Arbeiten mit Disketten: Oberon verwendet interne Dateipufferung um den Zugriff auf Dateien zu beschleunigen. Schreiboperationen auf Dateien werden verzgert bis das System genug Zeit hat um die Operation durchzufhren. Wenn man eine Datei auf Diskette speichert und anschlieend sofort die Diskette aus dem Laufwerk entfernt oder den Rechner ausschaltet ohne Oberon korrekt zu beenden, kann es in einzelnen Fllen vorkommen, da die Datei noch nicht phsikalisch auf der Diskette gespeichert wurde. Daher sollte man nach dem Speichern der Datei auf Diskette das Kommando Flush.Do aufrufen, um die internen Puffer zu leeren. Damit zwingt man Oberon, eventuelle verzgerte Schreiboperationen durchzufhren. Anschlieend sind alle Dateien korrekt gespeichert.  Der Compiler: Compilieren des Codes in einem Viewer: Folds.Compile im Men 'Compile' Zu eventuell aufgetretenen Fehlern springen: Folds.ShowError im Men 'Compile'  System.Free & System.ShowModules: Wenn Code zum ersten mal ausgefhrt wird, wird das Modul in dem er sich befindet in den Hauptspeicher geladen und bleibt dort so lange, bis es vom Benutzer entfernt (entladen) wird oder das System beendet wird. Wenn man nderungen an seinem Code durchgefhrt hat, mu man das alte Modul aus dem Speicher entladen bevor man den neuen Code ausfhren kann. Tut man dies nicht, wird weiterhin der alte Code ausgefhrt. Das Entladen eines Moduls wird durch den Aufruf von System.Free vorgenommen. Aufruf: System.Free [ '^' | modName {modNname} ~] Parameter: modName der Name des zu entladenden Moduls. Beispiel: System.Free MyMod UETest ~ Achtung: Die Namen sind Modulnamen, nicht Dateinamen!  Es gibt fr System.Free auch eine Abkrzung ber Maus-Interklicks: Click MM-MR auf ein Kommando entldt zuerst das Modul in dem sich das Kommando befindet, bevor es ausgefhrt wird. Mit dem Kommando System.ShowModules kann man sich in einem separaten Viewer eine Liste aller geladenen Module anzeigen lassen. In diesem Viewer kann man zeilenweise Module selektieren und mittels Menpunkt System.Free entladen.  Debugging: System.State Mit dem Kommando System.State kann man sich den Zustand eines Moduls zur Laufzeit anzeigen lassen. Aufruf: System.State [ '^' | modName ] Parameter: modName der Name des zu berprfenden Moduls. Der Trap-Viewer Wenn ein Laufzeitfehler (Trap) auftritt, wird der sog. Trap-Viewer geffnet, der ntzliche Informationen ber den Systemzustand zum Zeitpunkt des Fehlers enthlt: 1. Zeile: Trapnummer und in Klammer eine Kurzbeschreibung sowie den Program Counter (PC) der angibt wo sich der Fehler ereignet hat. Weiters wird der Stackzustand angezeigt, der die Aufrufreihenfolge der Prozeduren angibt: Die oberste Prozedur ist jene, in der sich der Fehler ereignet hat. Sie wird mit den Werten der lokalen Variablen angezeigt. Zusammen mit System.State hat man alle Informationen ber den Zustand seines Programms zum Fehlerzeitpunkt. Mit dem Kommando Trap.Step des Menpunkts Trap kann man sich die Fehlerposition im Sourcecode anzeigen lassen. Weitere Aufrufe von Trap.Step zeigen die Sourcepositionen der Aufrufkette des Prozedurstacks an. Weitere ntzliche Tools:  Der Analyzer Der Analyzer prft Sourcecode auf unntige Anweisungen bzw. Prozeduren, im besonderen: - importierte aber nicht benutzte Module - unbenutzte lokale Variablen - uninitialisierte Variablen - initialisierte aber nicht benutzte Variablen - ... Aufruf: Analyzer.Analyze (("*" | "@") ["\" opt] | {name ["\" opt]} "~" | "^") Parameter und weitere Erklrung im Text Analyzer.Tool. Das Modul Batch Mit dem Modul Batch kann man mehrere Kommandos im Batch-Betrieb nacheinander ablaufen lassen. Damit kann man sich kleine Makros schreiben die beim Arbeiten die Sicherheit erhhen. Aufruf: Batch.Start ('^' | filename) Parameter: filename Ein beliebiger Dateiname.  Beispiel: Nachdem man ein Modul gendert hat, mu man den alten Code entladen, damit der neue Code ausgefhrt wird.  Batch.Start System.Free MyMod ~ MyMod.Calc 10 20 ~ Ein Click auf Batch.Start stellt sicher, da vor dem Ausfhren des Kommandos MyMod.Calc immer eine evtl. im Speicher vorhandene alte Version entladen wird.  Das Clipboard Das Modul Clipboard enthlt nicht nur Cut, Copy und Paste sondern auch eine Funktion um Bildschirmhardcopies zu erzeugen:  Clipboard.Snapshot Erzeugt eine Hardcopy vom gesamten Oberon-Schirm. Clipboard.Snapshot drag Der Benutzer zieht mit der Maus ein Rechteck, welches den Rahmen fr den zu kopierenden Bereich angibt.  Die Hardcopy wird im Clipboard abgelegt und kann mit einem herkmmlichen Grafikprogramm weiterverarbeitet werden. Die Oberon - Konsole Wenn man unter Windows95/NT Oberon mit der Option -l (logging) startet (Eintragung z.B. im Shortcut), wird neben dem Oberon-Fenster noch eine DOS-Konsole geffnet. Diese Konsole dient als Low-Level Ausgabemedium fr Systemmeldungen. Weiters kann dieses Fenster verwendet werden um bei einem hngenden System (z.B. in einer Endlosschleife) einen Abbruch durchzufhren. Wenn das System festhngt (zu erkennen z.B. wenn die Uhr stehenbleibt), wechselt man in das Log-Fenster und drckt die Tastenkombination Strg-X. Meist kann man danach normal weiterarbeiten. Arbeiten mit Kommandos und Parametern Oberon ist nicht fr zustandsorientiertes Arbeiten ausgelegt. Es ist nicht mglich das Programm zu unterbrechen und auf eine bestimmte Benutzereingabe zu warten. Statt dessen gibt es in Oberon sog. Kommandos, das sind Prozeduren ohne Parameterschnittstelle, die die Zeichenkette die auf das Kommando folgt als Eingabeparameter interpretieren.  Beispiel: System.Free MyMod UETest ~ ^ ^ ^ Kommando Param1 Param2 Das Arbeiten mit Kommandos hat den Vorteil, da bereits beim Aufruf alle wichtigen Parameter bekannt sind. Man kann auerdem den Aufrufstring in einem Text speichern und kann auf diese Weise sehr einfach verschiedene Testflle sammeln ohne bei jedem Testlauf immer wieder ber die Tastatur Parameter eingeben zu mssen. Zustzliche Dokumentation zu einzelnen Modulen AsciiCoder.Tool Analyzer.Tool Browser.Tool Compiler.Tool Viele Beschreibungstexte befinden sich im Verzeichnis $Text. Das ETH-Oberon System ist komplett mit allen Source-Files im Verzeichnis $Source verfgbar. Besonders empfehlenswert fr Interessierte: Prog.Guide.Text und Edit.Programming.Text