M2AMIGA PROGRAMMING SUPPORT ENVIRONMENT (M2AMIGA Programmierumgebung) M2APSE (Version 4.1) 1. Überblick 2. Vorbedingungen für den Einsatz 3. Einführendes Beispiel 4. Flexibilität durch Konfiguration 5. Übergreifende Funktionalität 5.1 Screen und Window 5.2 Statuszeile 5.3 Projektstatus 5.4 Filerequester 5.5 Selbständiger Aufruf von Werkzeugen 5.6 Optionen zur Steuerung von Werkzeugen 5.7 Akustische Unterstützung 5.8 Help-Funktion 6. Funktionen im Detail 6.1 Projekt-Menüs 6.2 Editor-Menüs 6.3 Pre-Compiler-Menüs 6.4 Compiler-Menüs 6.5 Linker-Menüs 6.6 Spezial-Menüs 6.7 Directory-Menüs 7. Integration nutzerspezifischer Funktionen (User-Menüs) 8. Ergänzungssoftware 8.1 m2apseconfig 8.2 m2list 8.3 m2xref 8.4 m2copyproject 9. Fehlermeldungen und Ausbau der Programmierumgebung 1. Überblick Die Modula-Werkzeuge für die Programmierung des Amiga sind von der Workbench und vom CLI aus einzeln gut einsetzbar. Unsere Kunden regten die Zusammenfassung der Softwarewerkzeuge (Editor, Compiler usw) zu einem System an. Die Vorstellungen führten zum "Modula-2 Programming Support Environment ("m2apse"), um die Arbeit mit M2AMIGA 4.xx zu unterstützen. Es arbeitet mit den Versionen 1.3 und 2.0 des Betriebssystems. Mit "m2apse" steht eine Programmierumgebung zur Verfügung, die Softwarewerkzeuge zu einem Entwicklungssystem zusammenfaßt, um ihr jeweiliges Leistungsvermögen auf möglichst einfache Art voll auszuschöpfen. Dazu wird eine Vielfalt an Funktionen geboten, die menügesteuert oder über die Tastatur (Funktionstasten bzw. rechte "Amiga-Taste" und eine weitere) aufrufbar sind. Die Entwicklungsumgebung unterstützt im wesentlichen die Funktionen: - Anlegen und Wechsel von Projekten, - Editieren, Vorübersetzen, Kompilieren, Binden und Starten von Modulen, - einfache Aktivierung "stapelbarer" Optionen zur Steuerung der Arbeitsweise von Softwarewerkzeugen (Editor, Compiler usw) - Resident-Laden bzw. Entladen von Werkzeugen, - Debug-Modus, - Erzeugen von Libraries, - Einsatz eines Make, - Ausdrucken von Modul-Texten im Hintergrund, - Führen eines Arbeitsberichtes (Report), - Batch-Verarbeitung (Editieren, Drucken und Kompilation), - Kopieren von Dateien, - Erstellen von Kreuzreferenzlisten, - Ausgeben von Verzeichnissen, - Löschen von Dateien sowie - Unterstützung nutzerspezifischer Programme. Über die jeweils aktivierte Funktion informieren eine Statuszeile und die Kopfzeile des "m2apse"-Window. Gehen wir nun einige wesentliche Funktionen durch, um einen ersten Eindruck zu gewinnen: Beim Start von "m2apse" kann der Name eines Projektes als Parameter übergeben werden. Alternativ kann das zu bearbeitende Projekt leicht durch eine Konfigurationsdatei bestimmt werden. Die Datei ist mit Hilfe eines beigefügten Konfigurations-Programms leicht zu erstellen. Die Auswahl von Modulen für die Bearbeitung bzw. der Wechsel von einem Projekt zu einem anderen erfolgt mit Unterstützung eines Filerequesters. Ein beigefügtes Druckprogramm wird so eingesetzt, daß es im Hintergrund wahlweise Quelltexte, Batchdateien (z.B. die Dokumentation zu einem Programm) oder andere Dateien ausdruckt. Der Status eines Projektes ist abspeicherbar und auch wieder zu laden. Bei Projektwechseln wird ein vorhandener Status stets geladen. In den Status gehen der Inhalt der Statuszeile, die gewählten Optionen für die einzelnen Programmierwerkzeuge, sowie die Lage und die Größe des Fensters ein, das für "m2apse" angelegt wird. Das Menü "Editor" ist selbst erklärlich. Anzusprechen ist die Funktion "XRF Mo/Hp", mit der für Quelltexte Kreuzreferenzlisten erzeugbar sind. Das Menü "Pre-Compiler" ist nur aktiviert, wenn "m2op" im Verzeichnis "M2:" vorhanden sowie die Betriebsart "Projekt.OOP" gewählt und auch eine Datei mit einem Quelltext in objektorientierter Notation (erkennbar am Namenszusatz "doo" bzw. "moo") in der Statuszeile angezeigt ist. Das Menü "Compiler" bietet u.a. die Funktion "Mo/Hp", mit der der Compiler aufgerufen wird, um eines der beiden Module (wie in der Statuszeile ausgewählt) zu bearbeiten. Die dabei zu verwendenden Compiler-Optionen sind gleichfalls mit Hilfe von Untermenüs bestimmbar. Die übergreifende Arbeitsweise von "m2apse" ist herauszustellen: Vor der Übersetzung wird für Implementationsmodule geprüft, ob die Objektdatei des jeweiligen Definitionsmoduls aktuell ist (Zeitvergleich). Wenn für "m2apse" der Modus "OOP" gewählt wurde, dann wird zusätzlich geprüft, ob eine Vorübersetzung der Quelltexte (OOP-Notation in Modula-Notation) erforderlich ist. Ein Requester und ein Tonsignal machen darauf aufmerksam, wenn eine (erneute) Übersetzung erforderlich erscheint. Stellt der Compiler Fehler fest, so wird der Editor automatisch aufgerufen. Das Linker-Menü geht davon aus, daß ein Hauptmodul benannt ist, welches gebunden oder mit Unterstützung des Debuggers getestet werden soll. Auch hier wird die übergreifende Arbeitsweise von "m2apse" deutlich. Vor dem Binden wird zunächst geprüft, ob das jeweilige externe Modul und das Hauptprogramm aktuell übersetzt sind. Falls nicht, so werden der Pre-Compiler und der Compiler mit den entsprechenden Quelltexten gefüttert. Mit dem Untermenü "Starte Hp" kann ein Hauptmodul gestartet werden. Dazu können bei Bedarf mit Hilfe eines Requesters Parameter übergeben werden. Die Frage nach den aktuellen Parametern ist abschaltbar. Vor dem Start des Programmes wird geprüft, ob es aktuell ist. Falls nicht, so werden die Übersetzung und das Binden gezielt gesteuert. Die Steuerung des "Make-Tools" ist den Spezial-Menüs zugeordnet. Die Funktion "Shell" öffnet ein CLI-Fenster, das besonders praktisch bei der Arbeit von der Workbench aus ist. Erwähnt werden soll noch die Funktion "Kopiere Projekt", die ein gesondertes Programm einsetzt, um die Dateien eines Projektes im Gesamtumfang oder in Teilen zu kopieren. Das Menü "Dir" stellt wahlweise die vom CLI her bekannten Funktionen "dir" und "list" für einzelne Projektverzeichnisse zur Verfügung und gestattet einen Blick auf die resident geladenen Tools. Durch die Funktionen des Menüs "User" wird "m2apse" eine besondere Flexibilität verliehen. Das Menü und dessen Auswertung ist soweit vorbereitet, daß nur noch die individuell benötigten Funktionen durch Ergänzung eines externen Moduls (UserStuff) einzubringen sind. Abschließend sei der Lieferumfang von "m2apse" zusammengefaßt dargestellt: - m2apse - m2apseconfig - m2copyproject - m2list - m2xref "m2apse" unterstützt den Einsatz sämtlicher M2Amiga- Programmierwerkzeuge: - Editor - Compiler - Linker - Debugger - Make - Project - Obj-Decoder - LibLinker - Symboldat.-Verwaltung - Profiler - Pre-Compiler (m2pool) Mit "m2apse" steht engagierten und professionellen Programmierern ein leistungsfähiges Entwicklungssystem zur Verfügung. 2. Vorbedingungen für den Einsatz Die Entwicklungsumgebung "m2apse" lebt, d.h. es erfolgt eine ständige Weiterentwicklung, über deren Stand eine "ReadMe-Datei" informiert. Vor dem Einsatz von "m2apse" sind sechs Aspekte zu beachten: 1. Das Programm (Länge von ca. 70 Kilobyte) benötigt einen Speicherplatz von über 100 Kilobyte. Die Programmentwicklung auf einem System mit einem Megabyte an Arbeitsspeicher stößt bereits an Grenzen, wenn die häufig benutzten Werkzeuge resident geladen werden sollen. Es wird daher angeraten, "m2apse" nur auf größeren Systemen (d.h. mit mehr Speicherplatz) einzusetzen. 2. Es ist erforderlich, die Systemzeit exakt zu stellen, falls Ihr Amiga dieses nicht selbständig tut. Das Dateimanagement von "m2apse" stützt sich auf Zeitangaben für Dateien und Verzeichnisse ab. 3. Weiterhin wird zunächst erwartet, daß sämtliche M2Amiga-Werkzeuge sich in einem einzigen Verzeichnis befinden, auf das "m2:" verweist. Daraus folgt, daß z.B. in der "startup-sequence" die Zuweisung "assign m2: " erfolgen muß. Mit Hilfe von "m2apseconfig", dem Konfigurationsprogramm, können beliebige Verzeichnisnamen für die wesentlichen Werkzeuge bestimmt werden. Dazu später mehr. 4. Die Benutzung des Betriebssystems in den Versionen 1.3 oder 2.0 wird vorausgesetzt. (bei 1.3: "New-Con" muß installiert und "SetPatch r-" aktiviert sein.) Mehr ist bei der Vorbereitung des Einsatzes von "m2apse" eigentlich nicht zu beachten. Bei der praktischen Arbeit hat es sich jedoch als vorteilhaft erwiesen, eine Datei für den "Shell-StartUp" mit folgendem Inhalt anzulegen, um die von "m2apse" genutzte Shell besonders einfach einzusetzen und Informationen über das aktuelle Verzeichnis zu erhalten: - alias del delete - alias . newshell - alias - endcli - alias cls echo "*ec" - prompt "*n*e[30;41mCLI %n *e[32;43m %s*e[31;40m*n*n*e[0m" - cd >NIL: "" Außerdem empfiehlt es sich unter 1.3 resident zu halten: - newshell - endcli - cd - resident - run. Es ist mitunter zweckmäßig, "m2apse" direkt aus der "startup-sequence" mit dem Aufruf " run m2:m2apse [projekt]" zu aktivieren. Als Parameter ist ein Dateiverzeichnis (ein Projekt) vorgesehen. 3. Einführendes Beispiel Mit einer Entwicklungsumgebung muß man sich erst anfreunden, um die gebotenen Möglichkeiten anzunehmen. Um die ersten Schritte zu erleichtern, wird ein nachvollziehbarer Ablauf geschildert. Am besten starten Sie "m2apse" von der Workbench durch Anklicken des Icon der "m2apse" (Notenständer) und (bei gedrückter SHIFT-Taste") des Verzeichnisses "Test-Projekt" auf Ihrer "APSE-Diskette". Beim Start öffnet "m2apse" ein eigenes Window, das an der Titelleiste und der Statuszeile erkennbar ist. Mit dem Window sind Pull-down Menüs verbunden. Einige von Ihnen fallen durch eine verwaschene Beschriftung (ghosting) auf. Sie gehören zu Funktionen, die noch nicht erreichbar sind. Ein Druck auf die Help-Taste zeigt Ihnen die Belegung der Funktionstasten. Ein zweiter Druck auf die Taste löscht die Anzeige. In der Statuszeile werden Sie den Modulnamen "ApseDemo" entdecken weil der Status der Programierumgebung automatisch geladen wurde. Der Status bestimmt auch die Optionen für die M2AMIGA-Tools. Schauen Sie sich doch einmal die Menüpunkte an, die mit "Optionen" bezeichnet sind. Sie könnten jetzt z.B. die Optionen ändern und abspeichern. Im Projekt-Menü befindet sich die Funktion (Menüpunkt) "Status sichern". Interessiert Sie das Testprogramm "ApseDemo"?- Rufen Sie im Editor-Menü den Punkt "Mo/Hp" auf. Der Editor wird gestartet. Führen Sie bitte unbedingt eine Änderung im Quelltext durch, damit sich der im nächsten Absatz dargestellte Effekt einstellen kann. Um das Testprogramm auszuführen, rufen Sie bitte im Linker-Menü den Punkt "Starte Hp" auf. Sie werden erleben, daß der Compiler gestartet wird und anschließend der Linker, weil der Quelltext geändert wurde. Anschließend öffnet sich ein Fenster, in dem das Programm ausgeführt wird. Das Fenster können Sie mit einem beliebigen Tastendruck schließen. Die kurze Einführung sollte Ihnen einen Einblick in die Art der Unterstützung bieten, die "m2apse" gewährt. Einige wesentliche Funktionen sind Ihnen nun bekannt. Obwohl die Menüs selbsterklärend sind, sollten Sie ruhig weiterlesen, um die Möglichkeiten von "m2apse" vollständig zu erfassen. 4. Flexibilität durch Konfiguration Mit einem Konfigurationsprogramm "m2apseconfig" ist es möglich eine Datei anzulegen, die im wesentlichen bestimmt, unter welchen Namen und in welchen Verzeichnissen sich die Tools befinden, die "m2apse" einsetzt. In Abschnitt 8.1 wird das Programm ausführlich besprochen. Bei Start von "m2apse" wird die Konfigurationsdatei zunächst im Verzeichnis "M2:" gesucht. Wird die Datei nicht gefunden, so arbeitet "m2apse" mit einer Standardkonfiguration, die davon ausgeht, daß sämtliche M2AMIGA-Tools sich im Verzeichnis "M2:" befinden und auch die originären Namen tragen. Mit Hilfe der Konfigurationsdatei läßt sich z.B. auch ein beliebiger Editor oder ein anderer Compiler als "m2c" in einem beliebigen Pfad einfach einbinden. 5. Übergreifende Funktionalität "m2apse" steuert bei Bedarf Abläufe (z.B. selbständiger Aufruf des Editors nach einem fehlerhaften Compilerlauf). Weiterhin werden allgemeine Funktionen (z.B. Filerequester) eingesetzt, um die Benutzeroberfläche möglichst einheitlich und leicht bedienbar zu gestalten. Der Abschnitt geht auf Aspekte der übergreifenden Funktionalität ein. 5.1 Screen und Window "m2apse" nutzt den Workbench-Screen, der den Titel "Amiga Modula-2 Programmierumgebung" annimmt, wenn "m2apse" aktiviert ist. "m2apse" arbeitet stets in einem eigenen Window mit einem Titel entsprechend "m2apse 4.10 d, 30.10.1991" und einer Statuszeile (siehe dazu 5.2). Die Titelzeile wird nach Aufruf von M2AMIGA-Werkzeugen und sonstigen Hilfsprogrammen vorübergehend dazu verwendet, über die gerade ablaufende Funktion zu informieren. Vor der Ausführung von Programmen (mit "Starte Hp") wird das "m2apse"-Window vorübergehend geschlossen und ein spezielles Fenster geöffnet. Nach Programmende schließt ein beliebiger Tastendruck das Ausgabefenster und stellt das "m2apse"-Window wieder dar. 5.2 Statuszeile Das "m2apse"-Window ist am unteren Rand mit einer Statuszeile versehen. In der Statuszeile wird der Pfad zum Projekt nebst der zur Bearbeitung anstehenden Module (typischerweise ein externes Modul und ein Hauptprogramm) dargestellt. Durch einfaches Umschalten (Gadget) erfährt "m2apse", welches Modul jeweils gemeint ist. Der Suffix des externen Moduls kann gleichfalls umgeschaltet werden, um das Datei-Handling zu vereinfachen. Er zeigt auch an, in welchem Modus "m2apse" arbeitet: Modus OOP/Modula-2 : Suffix "doo" bzw "moo" Modus Modula-2 : Suffix "def" bzw "mod" Gehen wir nun ins Detail: In der Statuszeile sind fünf Abkürzungen erkennbar; sie bedeuten: Pf: vollständiger Pfad zum Projekt Pr: Name des Projektes Mo: Name des zu bearbeitenden (externen) Moduls Su: Suffix zum Modulnamen (Mo:), "mod/moo" oder "def/doo" Hp: Name des zu bearbeitenden Hauptmoduls (ohne Suffix, da stets "mod" oder "moo") Bei Start von "m2apse" sind hinter "Pf:" und "Su:" der Pfad und der Suffix "mod" bzw "moo" dargestellt. Sollte bereits ein Projektverzeichnis bekannt sein (als Parameter übergeben oder der Konfigurationsdatei entnommen), so findet sich auch hinter "Pr:" der entsprechende Eintrag. Anderenfalls fordert "m2apse" auf, ein Projekt mit Hilfe eines Filerequesters zu benennen. Die Größe des "m2apse"-Window ist änderbar. Wird die Breite unterschritten, die für die vollständige Darstellung der Statuszeile erforderlich ist, dann erfolgt eine Verkürzung des Pfades auf 17 Zeichen, denen drei Punkte vorangestellt sind. Sollte der Platz für die Statuszeile dennoch nicht ausreichen, so unterbleibt die Darstellung des Pfades und des Projektnamens. Die Breite des Fensters wird auf jeden Fall der Länge der Statuszeile, ggf. der gekürzten, angepaßt. Auch die Lage des Fensters wird so beeinflußt, daß die Statuszeile dargestellt werden kann. Die statischen Einträge "Mo:" und "Hp:" sind mit Gadgets unterlegt, die wechselweise aktivierbar sind. Das jeweils aktive Gadget ist an der weißen Fläche im Gegensatz zu einem weißen Rahmen erkennbar. Die Aktivierung der Gadgets kann durch Anklicken bzw. mit den horizontal wirkenden Cursortasten erfolgen. Mit den Gadgets wird festgelegt, welche der beiden "m2apse" bekannten Dateien bearbeitet werden soll. "m2apse" unterstützt so die parallele Arbeit an zwei Modulen. Die Namen werden in der Statuszeile hinter "Mo:" (links) und hinter "Hp:" (rechts) dargestellt. Als "Mo:" (abgekürzt für Modul) sind primär Definitions- und Implementationsmodule gedacht und als "Hp:" (kurz für Hauptprogramm) ein Hauptmodul. Der Suffix für das Modul ("Mo:") ist über eine Menüfunktion wählbar ("def"/"doo" oder "mod"/"moo"). Der Suffix für das Hauptmodul (stets "mod"/"moo") wird nicht dargestellt. Aus den Modulnamen in der Statuszeile leitet "m2apse" die Namen für alle erzeugten Dateien ab. "m2apse" unterstützt für die Bearbeitung eines Moduls (links) die Funktionen: - Modul benennen oder drucken, - Editieren, - Kreuzreferenz erstellen, - Vorübersetzen ("#?.doo"/"#?.moo"), - Kompilieren, - Dekodieren einer Objektdatei, - Library erzeugen und - Dateien löschen. Ein neues Hauptmodul (d.h. Datei noch nicht vorhanden) kann nur auf dem Umweg über "Mo:" angelegt werden, um möglichst sicherzustellen, daß rechts weder ein Definitions- noch ein Implementationsmodul entstehen kann. Mit der Funktion "Mo --> Hp" kann ein Modulname für ein Hauptmodul von links nach rechts übertragen werden. Auf ein Hauptmodul sind mit Ausnahme "Library Erzeugen" dieselben Funktionen anwendbar, wie auf ein Modul (links). Zusätzliche Funktionen sind im Linker-Menü und im Spezial-Menü in derselben Farbe dargestellt, wie der Name des Hauptprogramms. Sie umfassen: - Binde Hp, - Programmparameter festlegen, - Starte Hp und - Starte Make. Sonderfälle: Zwei Hauptmodule sind in der Statuszeile aufgeführt. Das linke Modul ist nur in dem Umfang bearbeitbar, wie oben bereits dargestellt. Das rechte Modul wird so behandelt, als wenn das linke einzubeziehen sei. Ist nur ein Hauptmodul links geladen, so erscheint der Name auch hinter "Hp:". 5.3 Projektstatus Der Status eines Projektes ist abspeicherbar und auch wieder zu laden. In den Status gehen der Inhalt der Statuszeile, der Betriebsmodus (OOP oder Modula pur), die gewählten Optionen für die Programmierwerkzeuge, sowie die Lage und die Größe des "m2apse-Window" ein. Der Status wird bei Programmstart automatisch geladen, sofern die Statusdatei die gültige Versionsnummer trägt. Anderenfalls wird mit einer Standardeinstellung gearbeitet. Die Konfiguration von "m2apse" wird somit durch die Konfigurationsdatei (im Verzeichnis "m2:") und den projektbezogenen Status festgelegt. Im Projekt-Menü sind die Funktionen für das Laden und Sichern des Status untergebracht. Sie sind jederzeit aufrufbar. Bei Projektwechseln und vor der Beendigung von "m2apse" erfragt ein Requester, ob der Status abgespeichert werden soll, falls sich ein Dateiname in der Statuszeile seit der letzten Sicherung, eine Werkzeugoption oder der Betriebsmodus geändert hat. Der jeweilige Status wird im entsprechenden Projektverzeichnis unter dem Namen "projstatus" abgelegt. 5.4 Filerequester "m2apse" ist mit einem Filerequester ausgestattet, der der Auswahl und Eingabe von Datei- sowie Verzeichnisnamen dient. Der Requester erscheint in einem eigenen Fenster, daß sich über dem "m2apse-Window" öffnet. In der Kopfzeile weist ein Text auf die jeweilige Funktion des Requesters (d.h. auf die erwartete Eingabe) hin. Bei Aufruf des Requesters werden zunächst die ansprechbaren Laufwerke (volumes, z.B. df0:, dh0:, RAM:) ermittelt und dargestellt. Es ist Platz für acht Laufwerke vorgesehen. Die Darstellungen sind mit Gadgets unterlegt, um mit einem Klick schnell den Pfad zu wechseln. Bei Start von "m2apse" werden alle Devices ermittelt und in einer Liste zusammengestellt. Die Liste kann durch einen Klick über dem Feld "Devices" zur Anzeige gebracht werden, um z.B. den Pfad zu wechseln. Die Benutzerführung beschränkt diese Möglichkeit auf sinnvolle Fälle. Bei Aufruf des Requesters werden weiterhin alle Dateien sowie Unterverzeichnisse in einer Liste erfaßt und alphabetisch geordnet dargestellt. Die verschiedenen Arten der Einträge unterscheiden sich farblich: - weiß : Dateien - rot/blau : Verzeichnisse (WB 1.3 bzw. 2.0) - schwarz : ".info"-Dateien Mit den "Gadget-Schaltern", "kein Muster" bzw. "Muster" sowie "Suffix mod" bzw. "Suffix def" kann der Umfang der anzuzeigenden Dateien begrenzt werden. Die Schalter tragen als Bezeichnung den einschaltbaren und nicht den effektiven Zustand. Der Schalter mit der Aufschrift "Suffix xxx" wird parallel zu entsprechenden Änderungen der Statuszeile (Su:) gesetzt. Die Auswahl von Dateien und Verzeichnissen erfolgt wie üblich durch Scrollen der Darstellung und einem Klick über dem gewünschten Namen. Der ausgewählte Name wird hinter "File:" bzw. hinter "Path:" ausgegeben. Hinter "Path:" und "File:" können auch Einträge mit der Tastatur erfolgen, z.B. um neue Dateien oder Projekte anzulegen. Der Auswahlvorgang kann mit "abbrechen" oder mit "weiter" beendet werden. Die Statuszeile wird entsprechend aktualisiert. Bei der Arbeit in einem Projekt besteht auch die Möglichkeit, den Editor direkt aus dem Filerequester aufzurufen und als Parameter einen Dateinamen zu übergeben. Dieses erfolgt durch einen Doppelklick über dem Dateinamen. "m2apse" speichert intern die Liste der Dateinamen eines Verzeichnisses und verwendet diese bei Aufruf des Requesters wieder, sofern zwischenzeitlich in das Verzeichnis nicht geschrieben wurde (Auch Löschen beruht auf einem Schreibvorgang.) Um die Arbeitsweise des Requesters zu beschleunigen, bietet es sich an, die Liste der Dateinamen zu bewahren, vorausgesetzt sie enthält die benötigten Einträge. Ein Klick über dem "Fix-Gadget" friert die Liste quasi ein, das Gadget erhält die Anschrift "Dyn". Nun kann man auch mit einem Diskettenlaufwerk schnell arbeiten. Ein Klick über "Dyn" hebt die statische Bindung der Liste wieder auf (dynamisiert sie also). Zu einem Filerequester gehört noch eine Funktion, der Wechsel von einem Unterverzeichnis zu einem übergeordneten Dateiverzeichnis. Ein Klick über dem "Parent-Gadget" besorgt dieses. Wichtiger Hinweis: Der Filerequester arbeitet nur unter der Voraussetzung erwartungsgemäß, daß die Systemzeit korrekt gestellt ist. 5.5 Selbständiger Aufruf von Werkzeugen In einer Programmierumgebung lassen sich viele Abläufe automatisieren, um die Benutzerfreundlichkeit zu erhöhen. Dabei ist jedoch zu bedenken, daß die Abläufe überschaubar bleiben müssen und keinesfalls in endlose Schleifen einmünden dürfen. Mit "m2apse" wurde ein praxisbezogener Weg angesteuert. Ein selbständiger Werkzeugaufruf ist Ihnen bereits in der Beschreibung des Filerequesters begegnet: Ein Doppelklick über einem Dateinamen startet den Editor mit der entsprechenden Datei. Weitere einfache Fälle für den automatischen Aufruf des Editors: - nach erfolgreichem Erstellen einer Kreuzreferenzliste (XRF Mo/Hp), - nach einem fehlerhaften Compiler-Lauf, - nach erfolgreichem Dekodieren einer Objektdatei (mit Dekod Mo/Hp) und - nach erfolgreichem Programmlauf, um ggf. die vom Profiler geschriebene Datei anzuzeigen. Weiter reicht die Unterstützung, die "m2apse" beim Kompilieren von externen Modulen (Name in der Statuszeile hinter Mo:) bietet. Vor der Kompilation wird geprüft, ob die entsprechende Symboldatei aktuell ist (Kriterium: xx.def zeitlich vor xx.sym erstellt). Falls nicht, so wird über einen Requester erfragt, ob beide Module zu kompilieren sind und der Compiler entsprechend gefüttert. In der Betriebsart "OOP" wird sogar geprüft, ob vorher noch der Pre-Compiler einzusetzen ist. Bei der Arbeit mit dem Linker oder gar bei Start von Programmen erfolgt eine noch weitergehende Unterstützung. Vor dem Linken wird die Aktualität der nachfolgenden Module geprüft, bei Bedarf wird entsprechend vorübersetzt und kompiliert: - Def-Datei des externen Moduls im Modus "OOP" - Mod-Datei des externen Moduls im Modus "OOP" - Symboldatei des externen Moduls (links in der Statuszeile) - Objektdatei des externen Moduls - Objektdatei des Hauptmoduls Ein praxisnahes Tool, daß mit einem resident gehaltenen Compiler sehr effizient arbeitet. Sollte beim Vorübersetzen bzw. beim Kompilieren ein Fehler auftreten, dann meldet sich der Editor. Es wurde deutlich, daß das Verhalten von "m2apse" beim Binden auf das vorher beschriebene Verfahren für das Kompilieren aufsetzt. Entsprechend verhält sich "m2apse" auch beim Start von Modulen. Es wird zunächst geprüft, ob die zu startende Binärdatei aktuell ist. Falls nicht, so werden rückwärts schreitend der Linker, der Compiler und ggf. auch der Pre-Compiler im besprochenen Sinne aktiviert. Es ist somit durchaus möglich, ein nur im Quelltext vorhandenes Hauptmodul zu starten. "m2apse" besorgt das Vorübersetzen, Kompilieren und Binden selbständig. Damit sind die wesentlichen übergreifenden Funktionen dargestellt. Sie können nur einwandfrei arbeiten, wenn die Systemzeit richtig geführt wird. 5.6 Optionen zur Steuerung von Werkzeugen Mit "m2apse" ist es besonders einfach, die Optionen zur Steuerung der Arbeitsweise von M2AMIGA-Werkzeugen einzusetzen. Die Wirkungen der Optionen sind der Dokumentation zu den jeweiligen Werkzeugen zu entnehmen. Die Menüs "Editor", "Pre-Compiler", "Compiler", "Linker" und "Spezial" bieten die Möglichkeit, Optionen durch Auswahl von Untermenüs zu aktivieren und zu deaktivieren. Ein "Häkchen" (check mark) informiert über den Status (aktiv oder nicht aktiv). Im Untermenü "Optionen" zum "Compiler-Menü" bedeutet ein Häkchen z.B. vor "Ref-Datei", daß beim Kompilieren eine Referenzdatei zu erstellen ist. Befindet sich dort kein Häkchen, dann tritt die Option "keine Referenzdatei erstellen" in Kraft. Bei Aufruf des Compilers wird in diesem Fall als Parameter "-d" vor dem Namen des Quelltextes übergeben. Die Kennbuchstaben für die einzelnen Optionen sind in den Untermenüs in Klammern angegeben. Aktivierte Optionen werden bei Werkzeugaufruf im "m2apse-Window" angezeigt. Im Menü "Spezial" kann die Ziel-CPU bestimmt werden. Der Compiler, der Linker und das Make-Tool übernehmen die Einstellung. "m2apse" unterscheidet streng zwischen Objektdateien mit gleichem Namen aber unterschiedlichem Suffix (obj, ob2, ob8 usw). Zusätzlich ist es noch möglich, Textoptionen (z.B. Pfad für den Editor oder Stackbedarf des zu bindenden Programms) sowie eigene Optionen (z.B. zur Steuerung der bedingten Kompilierung von außen) zu setzen und im Status abzuspeichern. Bei Start von "m2apse" sind eine Reihe von Optionen voreingestellt. Durch Laden des Projektstatus können die Optionen projektbezogen gesetzt werden. Mit "Status sichern" ist es möglich, die Optionen für den späteren Gebrauch abzuspeichern. 5.7 Akustische Unterstützung "m2apse" unterstützt die Arbeit durch Tonsignale: hoher Ton : Es ging etwas schief! tiefer Ton : Aufgabe erfolgreich abgeschlossen Die akustische Unterstützung wird sparsam eingesetzt. Sie soll vor allem auf Fehler aufmerksam machen, insbesondere wenn die Abarbeitung einer Aufgabe längere Zeit benötigt (z.B. Kompilierung eines Batch). 5.8 Help-Funktion Die Arbeitsweise von "m2apse" kann über das Menüsystem einfach gesteuert werden. Am den Tastaturbetrieb zu vereinfachen, wurden die Funktionstasten belegt. Ein Druck auf die Help-Taste zeigt die Belegung an. Ein zweiter Druck schaltet die Anzeige aus. 6. Funktionen im Detail Es folgt nun eine detaillierte Erläuterung der einzelnen Funktionen und ihres Zusammenwirkens. 6.1 Projekt-Menüs In der Menügruppe "Projekt" sind Menüs (Funktionen) zusammengefaßt, die im wesentlichen dazu dienen Namen einzugeben, Verzeichnisse (Projekte) anzulegen bzw. zu wechseln, Druckausgaben zu steuern, die Konfiguration von "m2apse" zu ändern und von "m2apse" angelegte Statusvariablen zu handhaben. Die besonders häufig benötigten Funktionen können unmittelbar über die Tastatur angesprochen werden. Nun zu den einzelnen Funktionen: "OOP" Mit diesem Untermenü ist es möglich, die Arbeitsweise von m2apse zwischen den Betriebsarten "Modula-OOP" und "Modula pur" umzuschalten. Der Modus "OOP" bezieht denn Pre-Compiler "m2op" mit ein, um OOP-Dateien zu bearbeiten und entsperrt das Menü "Pre-Compiler". Weiterhin werden als Suffix "doo" und "moo" verwendet. Mit dem selben Untermenü kann auf die normale Betriebsart zurückgeschaltet werden. "Mo/Hp benennen" Mit Hilfe des Requesters wird der Name des zu bearbeitenden Moduls erfragt. Die Zusätze "mod"/"moo" und "def"/"doo" müssen auch für neu anzulegende Dateien nicht angegeben werden. Die Suffixe werden abgeschnitten, um den Modulnamen universell für den Aufruf von Programmierwerkzeugen und die Verwaltung von Dateien einzusetzen. Der eingegebene Modulname wird in der Statuszeile dargestellt. Der benötigte Suffix ist über die Statuszeile zu bestimmen (Funktion: "Suffix ändern"). Die Funktion prüft nicht die Aktualität des intern abgelegten Verzeichnisses, wenn im Requester "Fix" gewählt wurde, d.h. wenn "Dyn" dargestellt wird. Ist das Verzeichnis nicht eingefroren, dann wird es u.U. frisch eingelesen (siehe dazu 5.4). "Projekt benennen" Ein Filerequester (siehe 5.4) gibt Verzeichnisse vor, die sich in der Dateihierarchie auf derselben Ebene befinden, zu der das aktuelle Projekt gehört. Der Pfad kann jedoch beliebig geändert werden. Bei Benennung eines neuen Projektes gehen die bisher der Programmierumgebung bekannten Modulnamen (Statuszeile) verloren, sofern vorher nicht von der Funktion "Status sichern" Gebrauch gemacht wird. Ein Requester macht darauf aufmerksam. "Suffix ändern" Suffix und Modulnamen gehören zusammen, obwohl sie mit unterschiedlichen Funktionen einzugeben sind. Eine Änderung des Suffix wirkt sich auf die Menügruppen genauso aus, wie die Änderung eines Dateinamens oder der Wechsel der Betriebsart (OOP-Modula). Im wesentlichen sind davon die Funktionen "Drucken, Mo/Hp", "Compiler, Mo/Hp", "Binde Hp" und "Starte Hp" betroffen. Aus einem Modul mit dem Suffix "def"/"doo" im Namen kann z.B. kein ausführbares Programm generiert werden. "m2apse" schränkt deshalb die Wählbarkeit der Menüs entsprechend des aktuellen Suffix ein. "Projekt anlegen" Die Funktion setzt das Programm "m2project" ein. Optionen erlauben es, die Arbeitsweise des Tools zu steuern. "Drucken" Mit dem Menü "Drucken" kann die Ausgabe von Textdateien durch einen Hintergrundprozeß mit Hilfe des Ergänzungsprogrammes "m2list" (siehe 8.1) initiiert werden. "Mo/Hp" bezieht sich auf das jeweils für die Bearbeitung bestimmte Modul, dessen Name der Statuszeile zu entnehmen ist. Sind mehrere Dateien auszudrucken, dann kann es sich empfehlen eine Batch-Datei (Stapeldatei) anzulegen, die die Namen vollständig (einschließlich des Pfades) enthält. "m2apse" unterstützt die Erstellung von zwei Batch-Dateien, die die Namen "Batch.1" und "Batch.2" tragen (Menügruppe "Editor"). Die Funktionen des Batch-Druckes sind nur aufrufbar, wenn die entsprechenden Stapeldateien auch wirklich existieren. Kreuzreferenzen und disassemblierte Moduldateien können gleichfalls leicht durch Aktivierung der Funktionen "Drucken.XRF" bzw. Drucken.DEC" zu Papier gebracht werden. Beide Funktionen beziehen sich auf das jeweils zur Bearbeitung bestimmte Modul, wie für "Drucken.Mo/Hp" bereits beschrieben. Die Funktion "Drucken.Datei" erlaubt es, beliebige Dateien auszudrucken. Der Filerequester unterstützt bei der Auswahl. "Status sichern" und "Status laden" Die Funktion "Status sichern" legt im Projektverzeichnis eine Datei mit dem Namen "projstatus" an, die Informationen aufnimmt, wie in 5.3 beschrieben. Dem Benutzer wird das "Datei-Handling" erleichtert, da der Status wieder geladen werden kann. Dabei werden die gespeicherten Namen "m2apse" bekannt gemacht und die gespeicherten Optionen gesetzt. Die Programmierumgebung wird praktisch wieder in den Zustand wie zum Zeitpunkt der Sicherung versetzt. "Konfig ändern" "m2apse" ist konfigurierbar. Die Arbeitsweise des Konfigurationstools wird unter 8.1 beschrieben. Die Konfiguration ist jederzeit änderbar. Sie wird nach Aufruf von "m2apse" automatisch eingenommen, sofern eine Konfigurationsdatei mit gültiger Versionsnummer gefunden wurde. "Resident" Für Editor, Compiler und Linker kann angegeben werden, ob die Werkzeuge resident geladen werden sollen. Bei gesetztem "Häkchen" erfolgt das Laden bereits bei Start von "m2apse". Vor Beendigung des Programms werden resident geladene Werkzeuge selbständig entladen. Der Debugger wird gleichfalls aus dem System entfernt, sofern von "m2apse" gestartet. 6.2 Editor-Menüs Die Menügruppe "Editor" stellt Funktionen für die Bearbeitung bzw. Analyse von Texten zur Verfügung. "Mo/Hp" Die Funktion "Mo/Hp" lädt den Editor mit dem Quelltext des Moduls, das in der Statuszeile als bearbeitbar gekennzeichnet ist (siehe 5.2). Es wird "m2emacs" aktiviert, sofern die Konfiguration keinen anderen Editor vorsieht. Wenn die ausgewählte Datei noch nicht besteht, dann wird der Modulname aus dem Dateinamen abgeleitet und im Editor als "leerer Modul-Baustein" vorgegeben. Für neue Implementationsmodule werden aus den zugehörigen Definitionsmodulen die Prozedurköpfe übernommen und zu leeren Prozeduren ergänzt. "Optionen" Die Arbeitsweise von "m2emacs" ist über Optionen steuerbar. Die Optionen sind in der Dokumentation zum Editor beschrieben. Sie sind abschaltbar (siehe 8.1) um auch andere Editoren einbinden zu können. Optionen, die aus Text bestehen, d.h. nicht nur aus einem Zeichen, sind editierbar. Dabei wird zwischen "Pre-Opts" und "Post-Opts" unterschieden. Die "Pre-Opts" werden bei Aufruf des Editors dem Namen der zu bearbeitenden Datei vorangestellt und die "Post-Opts" hinten angehängt. Mit Hilfe der Konfigurationsdatei ist festzulegen, welche der beiden Optionen zu verwenden ist (siehe 8.1). Im Zusammenspiel von "Pre-" und "Post-Opts" ist es möglich, jeden Editor optimal einzubinden. "Report" Um den Stand der Programmierarbeit einfach zu dokumentieren, wurde die Funktion "Report" eingerichtet. Sie legt, falls noch nicht vorhanden, standardmäßig eine Datei mit der Bezeichnung "xx.report" im aktuellen Projektverzeichnis an. "xx" steht für den Namen des Projektes. "Batch.1" und "Batch.2" Innerhalb eines jeden Projektverzeichnisses sind zwei Batch-Dateien editierbar, die die Bezeichnungen "Batch.1" und "Batch.2" tragen. Beide Dateien können über Menüs dem Compiler und dem Druckprogramm als Steuerdateien zugewiesen werden. "XRF Mo/Hp" Die Funktion "XRF Mo/Hp" dient dem Aufruf eines Programmes (siehe 8.3) für textuelle Analysen (Kreuzreferenzen) der jeweils in der Statuszeile zur Bearbeitung bestimmten Textdatei. Nach Erstellung der Kreuzreferenzliste wird diese in den Editor geladen und dargestellt. Die Liste trägt den Namen des analysierten Moduls mit dem Suffix "xrf". "Datei" Es ist möglich, beliebige Dateien für die Bearbeitung im Editor (mit Hilfe des Filerequesters) auszuwählen. 6.3 Pre-Compiler-Menüs Die Gruppe "Pre-Compiler-Menüs" bietet Funktionen für den Aufruf und die Steuerung des Pre-Compilers "m2op". Die Menüs sind nur anwählbar, wenn "m2op" im Verzeichnis "m2:" vorhanden und die Betriebsart "OOP" ("Projekt-Menüs") gewählt ist. "Mo/Hp" Das Untermenü "Mo/Hp" aktiviert den Pre-Compiler, um aus den in der Statuszeile aufgeführten OOP-Quelltexten die entsprechenden Modula-Dateien mit den Suffixen "def" bzw. "mod" zu erzeugen. Die Funktion ist nur anwählbar, wenn die Dateien wirklich vorhanden sind. "Optionen" Die Arbeitsweise des Pre-Compilers kann über Optionen gesteuert werden. Die wesentlichen Optionen sind über Untermenüs wählbar. Sie werden bei Aufruf des Pre-Compilers übergeben. Es wurde auch die Compiler-Option "Zeiger vergessen" aufgenommen, da es bei objektorientierter Programmierung mitunter notwendig ist, die Adressregister stets neu zu laden. Die Wahl dieser Compiler-Option wirkt sich auch auf das entsprechende Untermenü aus der Gruppe "Compiler" aus und umgekehrt. "Klassen" Für den Pre-Compiler besteht eine Klassen-Bibliothek. Die Funktion "Klassen-einsehen" unterstützt den Zugriff darauf mit einem Filerequester. 6.4 Compiler-Menüs In der Gruppe Compiler-Menüs sind Funktionen zusammengefaßt, die der Aktivierung des Übersetzers, der Analyse des erzeugten Codes und der Steuerung der Arbeitsweise des Pools für Symboldateien dienen. "Mo/Hp" Mit dem Menü "Mo/Hp" wird der Übersetzer "m2c" veranlaßt, die in der Statuszeile vermerkten Modultexte zu verarbeiten. Die Funktion ist nur aktivierbar, wenn die zu übersetzende Quelldatei auch wirklich vorhanden ist. Treten bei der Übersetzung Fehler auf, dann wird der Editor gestartet und der fehlerhafte Text zur Korrektur geladen. "Optionen" Die Arbeitsweise des Übersetzers ist mit der Funktion "Optionen" steuerbar. Die Optionen (Schalter) sind in dem Teil der Dokumentation erläutert, der dem Übersetzer gewidmet ist. Über das Menü "Spezial" kann das Untermenü "Ziel-CPU" aufgerufen werden, um den Prozessor zu bestimmen, für den Code zu generieren ist. Der einfache Weg, Optionen zu setzen, erleichtert die Handhabung des Compilers. Mit "Status sichern" (Projekt) können gewählte Optionen gespeichert und mit "Status laden" wieder gesetzt werden. "Batch.1" und "Batch.2" Der Übersetzer verarbeitet auch Stapel (engl. batches). Die gesetzten Compiler-Optionen gelten auch für die Übersetzung von Modulen einer Stapeldatei. Beide Funktionen sind nur aktivierbar, wenn die Dateien "Batch.1" bzw. "Batch.2" auch wirklich existieren. Die Namen der Fehlerdateien zu den Modulen, die nicht fehlerfrei übersetzt wurden, erscheinen im Filerequester. Die Module sind direkt über die dargestellten Namen zur Korrektur anwählbar. "Dekod Mo/Hp" Mit dem Menü "Dekod Mo/Hp" kann "m2decobj" aufgerufen werden, sofern zu dem aufgeführten Modulnamen (Statuszeile hinter Mo: bzw. Hp:) eine Objektdatei vorhanden ist. Nach Abschluß der Dekodierung wird der Editor mit der erzeugten Datei geladen, die den Namen des dekodierten Moduls mit dem Suffix "dec" trägt. "Pool" Die Funktion "Pool" bietet Möglichkeiten, die Arbeitsweise von "m2pool" zu steuern. Das Tool ist im Handbuch beschrieben. Mit dem Untermenü "verwenden" wird bestimmt, ob "m2pool" resident zu laden und zu starten ist (Häkchen). Durch Löschen des Häkchens wird das Tool entladen. Es ist möglich, projektbezogene Symboldateien zu bestimmen (Untermenü "definieren"). Die spezifizierten Dateien werden nachgeladen. Die Verwendung von "m2pool" geht in den Projektstatus ein. Es wird empfohlen, "m2pool" nur über das entsprechende Untermenü zu entladen. 6.5 Linker-Menüs Die Gruppe Linker-Menüs bietet verschiedene Möglichkeiten, Module zu lauffähigen Programmen zu binden und zu starten. "Binde Hp" Mit dem Menü "Binde Hp" wird der Linker "m2l" aufgefordert ein Hauptprogramm zu binden (Name des Moduls in der Statuszeile hinter Hp:). Wird der Linker aufgerufen, ohne daß die entsprechende Objektdatei besteht, oder stellt "m2apse" fest, daß der Programmtext zwischenzeitlich geändert wurde und noch keine aktuelle Übersetzung vorliegt, dann wird vor dem Binden zunächst der Compiler oder gar der Pre-Compiler gestartet, um eine Objektdatei zu erstellen. Treten bei der Übersetzung Fehler auf, dann wird der eingeleitete Funktionsablauf abgebrochen und der Editor mit dem fehlerhaften Programmtext geladen, um eine Fehlerbehandlung zu ermöglichen. Die übergreifende Funktionalität erstreckt sich auch auf externe Module. "Optionen" Im Prinzip gelten für den Linker die Ausführungen wie für die Compiler-Optionen, einschließlich der Wirkung des Untermenüs "Ziel-CPU". "Erfrage Para" Um bei Programmstart Parameter zu übergeben, wurde die Funktion "Erfrage Para" bzw. "Keine Para" vorgesehen. Erscheint die erste Beschriftung im Menü, so werden keine Parameter erfragt, die Funktion ist jedoch aktivierbar. Die Parameter sind in einen Requester einzugeben. "m2apse" merkt sich die Parameter, sodaß sie nicht bei jedem Start erneut einzugeben sind. "Starte Hp" Mit der Funktion "Starte Hp" kann ein Programm mit dem in der Statuszeile aufgeführten Programmnamen (hinter Hp:) gestartet werden. Bei Bedarf wird vor dem Start vorübersetzt, kompiliert und gebunden. Für das zu startende Programm wird ein gesondertes Window geöffnet. Vorher wird noch der Debugger geladen, sofern er sich noch nicht im Arbeitsspeicher befindet und die Linker-Option "+x" gesetzt ist, die den Untermenüs "Debug" bzw. "Debug res" entspricht. Bei gesetzter Compiler-Option "+p" wird nach erfolgreichem Programmlauf der Editor mit dem Arbeitsergebnis des Profilers geladen, sofern eine entsprechende Datei vorhanden ist. "Mo --> Hp" Hinter "Hp:" (in der Statuszeile) werden nur Namen tatsächlich vorhandener Module akzeptiert. Mit der Funktion "Mo --> Hp" können Module als Hauptprogramm bestimmt werden, sofern der hinter "Mo:" angegebene Modulname nicht den Zusatz "def"/"doo" trägt, und auch keine Symboldatei ("sym") bzw Referenzdatei ("dob") mit diesem Namen besteht. Die erfolgreiche Benennung eines Hauptmoduls ist in der Statuszeile daran zu erkennen, daß hinter "Hp:" (für Hauptprogramm) der Name des Hauptmoduls erscheint. "Erzeuge Lib" Das vollständige M2AMIGA-System umfaßt einen Library-Linker. Er ist über das Menü "Erzeuge Lib" für ein Modul aufrufbar, dessen Namen hinter "Mo:" in der Statuszeile erscheint. Wenn der Library-Linker seine Arbeit erfolgreich abgeschlossen hat, helfen Requester weiter, die erzeugte Datei abzulegen oder gar resident zu laden. 6.6 Spezial-Menüs Der Gruppe der Spezial-Menüs sind elf Funktionen zugeordnet: "Starte Make" Die Funktion "Starte Make" ruft das M2AMIGA-Tool "m2make" auf und übergibt als Parameter den Namen des Hauptprogramms (in der Statuszeile hinter Hp: aufgeführt). Zu "m2make" gibt es eine gesonderte Dokumentation. Die von "m2make" erzeugten Tabellen werden in Dateien mit dem Suffix "tab" umgeleitet und anschließend zur Anzeige gebracht. Optionen" Die Arbeitsweise von "m2make" ist über Optionen steuerbar. "m2apse" unterstützt diese Möglichkeit. Die Ausführungen zu den Compiler-Optionen (6.4) und in Abschnitt 5.6 gelten sinngemäß. "Shell" Die Funktion "Shell" ruft "newshell" auf. Die Möglichkeit erweist sich als besonders praktisch beim Arbeiten von der Workbench. "Lösche Mo/Hp" Mit der Funktion "Lösche Mo/Hp" wird ein einfacher (aber gefährlicher) Weg geboten, im gesamten Projekt sämtliche Dateien zu löschen, die denselben Modulnamen (jedoch mit unterschiedlichem Suffix) tragen. Zur Sicherheit ist eine Rückfrage (Requester) eingebaut. Der Modulname wird der Statuszeile entnommen (hinter Mo: oder hinter Hp:), je nach Aktivierung. "Lösche Ref Dat #?" Die Funktion löscht sämtliche Referenzdateien eines Projektes. "Lösche Old #?" Die Funktion löscht im aktuellen Projekt sämtliche Dateien mit dem Zusatz "O". "m2emacs" bezeichnet so automatisch angelegte Kopien der vorhergehenden Fassung einer Textdatei. "Lösche DEC Dat #? Die Funktion löscht im aktuellen Projekt sämtliche Dateien mit dem Suffix "dec". "Lösche XRF Dat #?" Für diese Funktion gelten die Ausführungen wie für die vorher beschriebene. Dateien mit Kreuzreferenzen tragen den Namen des analysierten Moduls mit dem Suffix "xrf". "Lösche Datei" Die Funktion ruft den Filerequester auf, um eine beliebige Datei auszuwählen und anschließend zu löschen. "Kopiere Projekt" Um die Ergebnisse der Programmierarbeit einfach zu sichern, wurde die Funktion "Kopiere Projekt" eingerichtet. Sie ruft das Programm "m2copyproject" auf (siehe dazu ausführlich 8.4), das Dateien überträgt, die im Zielverzeichnis noch nicht vorhanden sind oder die zwischenzeitlich überarbeitet wurden. (Falls das Zielverzeichnis nicht existiert, so wird es angelegt.) Vorher werden jedoch die Zeitpunkte des letzten schreibenden Zugriffs auf das Projektverzeichnis und auf das Zielverzeichnis verglichen, um festzustellen, ob es überhaupt etwas zu kopieren gibt. "Kopiere Projekt" gibt in einem Requester den Namen eines Zielverzeichnisses vor. Der Name geht auch in den Status ein. "Ziel-CPU" Das Untermenü legt für den Compiler und den Linker die Ziel-CPU fest, die in die jeweiligen Optionen und somit in den Projektstatus eingeht. 6.7 Dir-Menüs Die Funktionen der Gruppe "Dir" bzw. "List" erklären sich von selbst. Die Funktion "-->List" ( Umschalten auf List) bewirkt, daß Verzeichnisse mit "C:List" auszugeben sind. Der Name des Menüs wird entsprechend geändert. Mit "-->Dir" kann auf Ausgaben mit Hilfe von "C:Dir" zurückgeschaltet werden. Unabhängig von "List" bzw "Dir" arbeitet die Funktion "RESIDENT", die die Namen resident geladener Programme anzeigt. 7. Integration nutzerspezifischer Funktionen "m2apse" läßt sich Ihrer persönlichen Arbeitsweise anpassen. Das Menü "User" bietet eine Programmschnittstelle, um sechs nutzerspezifische Funktionen zu unterstützen. (Genaugenommen ist "m2apse" über diese Schnittstelle beliebig erweiterbar.) Dazu sind im Projektverzeichnis "UserApse" die Quelltexte für die Module "ApseUserStuff" und "ApseUserMenus" abgelegt. Weiterhin enthält das Verzeichnis sämtliche benötigten Objekt- und Symboldateien, um "m2apse" neu zu binden. Um eine eigene Version von "m2apse" zu erstellen, ist es lediglich erforderlich, das Modul "ApseUserStuff.mod" wunschgemäß zu ändern, zu übersetzen und "m2apse" neu zu binden. Der Definitionsteil von "ApseUserMenus" und "ApseUserStuff.mod" enthalten mehrere praktische Hinweise und Beispiele, wie vorzugehen ist. "ApseUserStuff.def" und "ApseUserMenus.def" dürfen auf keinen Fall übersetzt werden. Die Versionskontrolle wacht über die Integrität der Module und würde ein Linken nicht mehr zulassen. Das System "m2apse" kann nicht dazu benutzt werden, die eigenen Objektdateien zu binden, weil das Hauptmodul Ihnen nicht als Quelltext zur Verfügung steht. Rufen Sie deshalb im "Spezial"-Menü die Shell, um ausnahmsweise im CLI-Stil zu arbeiten (m2:m2l m2apse). Nun haben Sie Ihre eigene "m2apse". 8. Ergänzungssoftware Einige Programme, die "m2apse" seltener benötigt, wurden als eigenständige Hauptmodule ausgelagert, um nicht unnötig Arbeitsspeicher zu belegen. 8.1 m2apseconfig Das Projekt-Menü bietet die Funktion "Konfig ändern", um Konfigurationsprogramm "m2apseconfig" aufzurufen. Das Programm ermöglicht es in einer Maske jeweils den Pfad und den Namen für die M2AMIGA-Tools vorzugeben. Die Konfiguration ist so voreingestellt, daß sämtliche Tools im Verzeichnis "M2:" liegen. Blau bzw. rot markierte Gadgets sind aktiviert. In der Maske kann hinter "Work" ein Projektverzeichnis angegeben werden, auf das "m2apse" aufschaltet (aktuelles Verzeichnis), falls die Programmieroberfläche ohne Parameter aufgerufen wurde. Es ist eine Grundkonfiguration vorgesehen, die durch Betätigung des Schalters "Vorg" (Vorgabe, d.h. voreingestellt) in die Maske eingetragen wird. In die Konfiguration ist auch aufzunehmen, ob nach jeder Betätigung des rechten Mausknopfes zu prüfen ist. ob die gerade bearbeiteten Dateien (Mo/Hp) noch vorhanden sind. Zwei Schalter mit den Aufschriften "auto" bzw. "man" ( manuell) sind für diesen Zweck vorgesehen. In der Betriebsart "man" erfolgt die Überprüfung nur jedes zehnte mal, um den Diskettenbetrieb zu erleichtern. Fetplattennutzer sollten "auto" wählen. Weiterhin kann mit Hilfe eines Gadget ("PreOpt") bestimmt werden, ob die spezifischen Optionen des "m2emacs" bei Aufruf des Editors zu übergeben sind. Das Gadget ("PostOpt") legt fest, ob Editor-Optionen dem Namen der zu bearbeitenden Datei anzufügen sind. Ein weiteres Gadget ("BGcomp") bestimmt, ob der Compiler bei Start des Editors automatisch zu laden ist. Das Konfigurationsprogramm muß sich im Verzeichnis "M2:" befinden. Dort wird auch die Konfigurationsdatei unter dem Namen "Apse.Config" abgespeichert. Das Programm kann durch einen Klick über der Schließmarke des Fensters verlassen werden. Sollte die Konfiguration geändert und noch nicht abgespeichert sein, dann weist ein Requester darauf hin. 8.2 "m2list" "m2list" ist ein einfaches Druckprogramm, daß seitenweise ausgibt. Jede Seite wird mit einem Kopf, dem Erstellungszeitpunkt der Datei und einer laufenden Seitennummer versehen. Das Programm schaltet den Drucker auf den Schrifttyp "Elite" um, sofern möglich und von "Preferences" zugelassen. Prozedurnamen werden fett gedruckt, um die Lesbarkeit von Quelltexten zu erhöhen. Das Programm kann mit CTRL-C abgebrochen werden. 8.3 m2xref Das Programm "m2xref" wird durch ein Menü der Gruppe "Editor" aufgerufen. Es erzeugt Kreuzreferenzlisten, die aus dem zeilenweise numerierten Quelltext bestehen, dem eine Tabelle mit allen Bezeichnern und der Zeilennummer, in der sie vorkommen, folgt. Das Programm arbeitet mit einer Ausschlußdatei (M2:Modula.words), die bei Auslieferung nicht nur alle reservierten Wörter der Sprache Modula-2 sondern auch die Ergänzungen durch M2Amiga (Beispiel: BPTR, BPOINTER und OOP-Schlüsselwörter). Die Datei kann von Ihnen geändert werden. Es ist nicht erforderlich, die alphabetische Reihenfolge einzuhalten. 8.4 m2copyproject Mit dem Programm ist es möglich, Dateien eines Projektes verzeichnisweise zu kopieren. Das Programm wird durch das Spezial-Menü "Kopiere Projekt" aufgerufen. Ein Requester erfragt das Ziel und die zu übertragenen Verzeichnisse. Es werden nur die Dateien kopiert, die im Zielverzeichnis nicht vorhanden sind oder die zwischenzeitlich geändert wurden. Im Hinblick auf den Diskettenbetrieb wird vor Beginn des Kopierens geprüft, ob es überhaupt etwas zu übertragen gibt (Zeitvergleich für die betroffenen Verzeichnisse). Im Ziel nicht vorhandene Verzeichnisse werden automatisch angelegt. Bei Aufruf des Programmes ist als erster Parameter das betroffene Projekt anzugeben. Es können bis zu fünf weitere Parameter folgen, die die zu kopierenden Unterverzeichnisse bestimmen. Dazu sind die Namen der Unterverzeichnisse (txt, obj, bin, sym, ref) anzugeben. Der Programmablauf kann mit CTRL-C abgebrochen werden. Das Programm terminiert sich, wenn die Zieldiskette voll ist oder andere Störungen auftreten. 9. Fehlermeldungen und Ausbau der Programmierumgebung "m2apse" wurde praxisnah entwickelt. Das Programm hat sich im professionellen Einsatz bewährt. Dennoch könnten Fehler auftreten. Wir werden bemüht sein, auf Ihre Fehlermeldungen schnell zu reagieren. Vorstellungen für den weiteren Ausbau des Programmes nehmen wir gerne entgegen. egm oktober 1991