"m2apse" 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 6. Funktionen im Detail 6.1 Projekt-Menüs 6.2 Editor-Menüs 6.3 Kompiler-Menüs 6.4 Linker-Menüs 6.5 Spezial-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 des Entwicklungssystems 1. Überblick Die Modula-Werkzeuge für die Programmierung des Amiga sind von der Workbench und vom CLI aus gut einsetzbar. Unsere Kunden regten die Zusammenfassung der Softwarewerkzeuge (Editor, Kompiler usw) zu einem System mit einer weitergehenden Unterstützung der Programmierung an. Die Vorstellungen führten zum "Modula-2 Programming Support Environment ("m2apse"), dem "Amiga Modula-2 Entwicklungssystem". Es ist von der Workbench und vom CLI aus einsetzbar, um die Arbeit mit M2AMIGA 4.xx zu unterstützen und arbeitet mit den Versionen 1.3 und 2.0 des Betriebssystems. Mit "m2apse" steht eine Programmierumgebung zur Verfügung, die Softwarewerkzeuge zu einem Entwicklungssystem zusammen- faßt, um ihr jeweiliges Leistungsvermögen auf möglichst ein- fache Art voll auszuschöpfen. Dazu wird eine Vielfalt an Funktionen geboten, die menugesteuert oder über die Tastatur (rechte "Amiga-Taste" und eine weitere) aufrufbar sind. Die Entwicklungsumgebung unterstützt im wesentlichen die Funktionen: - Anlegen und Wechsel von Projekten, - Editieren, Kompilieren, Binden und Aufstarten von Modulen, - einfache Aktivierung "stapelbarer" Optionen zur Steuerung der Arbeitsweise von Softwarewerkzeugen (Editor, Kompiler 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 Sta- tuszeile und die Kopfzeile des "m2apse"-Window. Gehen wir nun kurz einige wesentliche Funktionen durch, um einen ersten Eindruck von den Zusammenhängen zu gewinnen. Wir beginnen mit dem Projekt-Menü: Beim Aufstart von "m2apse" kann der Name eines Projektes als Parameter übergeben werden. Alternativ ist das zu bearbei- tende Projekt durch eine Konfigurationsdatei bestimmbar. Die Datei ist mit Hilfe eines beigefügten Programmes, das sich einer Maske bedient, 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 Do- kumentation zu einem Programm) oder andere Dateien aus- druckt. 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 Programmierwerkzeu- ge, 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 Kreuzrefe- renzlisten erzeugbar sind. Das Menü "Compiler" bietet u.a. die Funktion "Mo/Hp", mit der der Kompiler aufgerufen wird (wie mit der Konfigurations- datei bestimmt), um eines der beiden Module (wie in der Statuszeile ausgewählt) zu bearbeiten. Die dabei zu verwendenden Kompileroptionen 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). Ein Requester und ein Tonsignal machen darauf aufmerksam, wenn eine (erneute) Übersetzung erforderlich erscheint. Stellt der Kompiler 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 Ar- beitsweise 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 wird der Kompiler mit den entsprechenden Quelltexten gefüttert. Mit dem Untermenü "Starte Hp" kann ein Hauptmodul aufgestar- tet werden. Dazu können bei Bedarf mit Hilfe eines Reque- sters Parameter übergeben werden. Die Frage nach den aktuel- len Parametern ist abschaltbar. Vor dem Aufstart des Pro- grammes 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 Pro- jekt", 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 Projektverzeichnis- se zur Verfügung und gestattet einen Blick auf die resident- geladenen Tools. Durch die Funktionen des Menüs "User" wird "m2apse" eine be- sondere Flexibilität verliehen. Das Menü und dessen Auswer- tung 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" zusammenge- faßt dargestellt: - m2apse - m2apseconfig - m2copyproj - m2list - m2xref "m2apse" unterstützt den Einsatz sämtlicher M2Amiga- Pro- grammierwerkzeuge: - Editor - Compiler - Linker - Debugger - Make - Project - Decoder - LibLinker - Symboldat.-Verwaltung - Profiler (m2pool) Mit "m2apse" steht engagierten und professionellen Program- mierern 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 halben Megabyte an Arbeitsspei- cher stößt bereits an Grenzen, sodaß angeraten wird, "m2ap- se" 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 Da- teimanagement 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 können beliebige Verzeichnisnamen für die wesentlichen Werkzeuge bestimmt werden. Dazu später mehr. 4. Die Benutzung der Workbench 1.3 oder 2.0 wird vorausgesetzt. (bei 1.3: "New-Con" muß installiert und "SetPatch" aktiviert sein.) Mehr ist bei der Vorbereitung des Einsatzes von "m2apse" ei- gentlich 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 resident zu halten: - newshell - endcli - cd - resident - run. Es ist 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 Work- bench durch Anklicken des Icon der "m2apse" (Notenständer) und (bei gedrückter SHIFT-Taste") des Verzeichnisses "Test- Projekt". Beim Aufstart erö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 fal- len durch eine verwaschene Beschriftung (ghosting) auf. Sie gehören zu Funktionen, die noch nicht erreichbar sind. In der Statuszeile werden Sie den Modulnamen "ApseDemo" ent- decken weil der Status der Programierumgebung automatisch geladen wurde. Der Status bestimmt auch die Optionen für die M2-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ü befin- det 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 aufge- startet. Führen Sie bitte unbedingt eine Änderung im Quell- text 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 Kompiler aufgestartet 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 we- sentliche Funktionen sind Ihnen nun bekannt. Obwohl die Menüs selbserklärend sind, sollten Sie ruhig weiterlesen, um die Möglichkeiten von "m2apse" vollständig zu erfassen. 4. Flexibilität durch Konfiguration Mit einem Konfigurationsprogramm 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 aus- führlich besprochen. Bei Aufstart von "m2apse" wird die Kon- figurationsdatei zunächst im Verzeichnis "M2:" gesucht. Wird die Datei nicht gefunden, so arbeitet "m2apse" mit einer Standardkonfiguration, die davon ausgeht, daß sämtliche M2- Tools sich im Verzeichnis "M2:" befinden und auch die ori- ginären Namen tragen. Mit Hilfe der Konfigurationsdatei läßt sich z.B. auch ein beliebiger Editor oder ein anderer Kompiler als "m2c" in einem beliebigen Pfad einfach einbinden. 5. Übergreifende Funktionalität "m2apse" steuert bei Bedarf Abläufe (z.B. selbständiger Auf- ruf des Editors nach einem fehlerhaften Kompilerlauf). Wei- terhin 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 Entwicklungssystem" annimmt, wenn "m2apse" aktiviert ist. "m2apse" arbeitet stets in einem eigenen Window mit einem Titel entsprechend "m2apse 4.00 d, 01.03.1991" und einer Statuszeile (siehe dazu 5.2). Der Titel wird nach Aufruf von M2-Werkzeugen und sonstigen Hilfsprogrammen modi- fiziert, um über die gerade ablaufende Funktion zu informie- ren. Vor der Ausführung der entwickelten Programme (mit "Starte Hp") wird das "m2apse"-Window vorübergehend geschlossen. Stattdessen wird ein spezielles Fenster geöffnet. Nach Programmende schließt ein beliebiger Tastendruck das Fenster und sorgt für die erneute Darstellung des "m2apse"-Window. 5.2 Statuszeile Das "m2apse"-Window ist am unteren Rand mit einer Statuszei- le 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 Mo- dul jeweils gemeint ist. Der Suffix des externen Moduls kann gleichfalls umgeschaltet werden, um das Datei-Handling zu vereinfachen. Gehen wir nun ins Detail: In der Statuszeile sind fünf Ab- kü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" oder "def" Hp: Name des zu bearbeitenden Hauptmoduls (ohne Suffix, da stets "mod") Bei Aufstart von "m2apse" sind hinter "Pf:" und "Su:" der Pfad und der Suffix "mod" 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 wie üblich ä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 auch mit den horizontal wirkenden Cursortasten erfolgen. Mit den Gadgets wird festgelegt, welche der beiden "m2apse" be- kannten Dateien bearbeitet werden soll. "m2apse" unterstützt so die parallele Arbeit an zwei Modu- len. 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 Implemen- tationsmodule gedacht und als "Hp:" (kurz für Hauptprogramm) ein Hauptmodul. Mit Hilfe der beschriebenen Gadgets bzw. Cursortasten ist die zu bearbeitende Datei zu bestimmen. Der Suffix für das Modul ("Mo:") ist über eine Menufunktion wählbar (def oder mod). Der Suffix für das Hauptmodul (stets mod) wird nicht dargestellt. Aus den Modulnamen in der Sta- tuszeile leitet "m2apse" die Namen für alle erzeugten Da- teien ab. "m2apse" unterstützt für die Bearbeitung eines Moduls (links) die Funktionen: - Modul benennen oder drucken, - Editieren, - Kreuzrefernz erstellen, - Kompilieren, - Dekodieren, - 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 von links nach rechts übertragen werden, vorausgesetzt es besteht dazu kein Definitionsmodul. 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 be- reits 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, 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 jeweils gültige Versionsnummer trägt (intern vergeben). Anderenfalls wird mit einer Standardeinstellung gearbeitet. Die Konfiguration von "m2apse" wird somit durch die eigentliche Konfigurationsdatei und den projektbezogenen Status festgelegt. Im Projekt-Menü sind die Funktionen für das Laden und Si- chern des Status untergebracht. Sie sind jederzeit aufruf- bar, vorausgesetzt es läuft keine andere Funktion im "m2ap- se-Window" ab. Bei Projektwechseln und vor der Beendigung von "m2apse" er- fragt ein Requester, ob der Status abgespeichert werden soll, falls sich ein Dateiname in der Statuszeile seit der letzten Sicherung geändert hat. Der jeweilige Status wird im entsprechenden Projektverzeich- nis 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. Die Möglichkeiten zum Pfad- wechsel sind bewußt eingeschränkt, um Fehlbedienungen zu vermeiden. 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 so- wie Unterverzeichnisse in einer Liste erfaßt und alphabe- tisch geordnet dargestellt. Die verschiedenen Arten der Ein- trä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" kannn der Umfang der anzuzeigenden Dateien begrenzt werden. Die Schalter tragen als Bezeichnung den einschaltbaren und nicht den effektiven Zustand. Ein Beispiel: Die Aufschrift "Suffix def" bedeutet, daß nur Dateien mit dem Suffix "mod" dargestellt werden. Das "Schalter-Gadget" ist anzuklicken, um die Darstellung auf "def-Dateien" zu beschränken. Der Schalter mit der Aufschrift "Suffix xxx" wird parallel zu entsprechenden Änderungen der Statuszeile (Su:) gesetzt. Die Auswahl von Dateien und Verzeichnissen erfolgt wie üb- lich 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öglich- keit, 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 Schreibvor- gang.) Um die Arbeitsweise des Requesters zu beschleunigen, bietet es sich an, die Liste der Dateinamen zu bewahren, vo- rausgesetzt sie enthält die benötigten Einträge. Ein Klick über dem "Fix-Gadget" friert die Liste quasi ein, das Gadget er- hält die Anschrift "Dyn". Nun kann man auch mit einem Dis- kettenlaufwerk 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 Wech- sel von einem Unterverzeichnis zu einem übergeordneten Da- teiverzeichnis. 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 einem Entwicklungssystem lassen sich viele Abläufe auto- matisieren, 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ür- fen. Mit "m2apse" wurde ein praxisbezogener Weg angesteuert. in selbständiger Werkzeugaufruf ist Ihnen bereits in der Beschreibung des Filerequesters begegnet: Ein Doppelklick über einem Dateinamen startet den Editor mit der entspre- chenden Datei. Weitere einfache Fälle für den automatischen Aufruf des Editors: - nach erfolgreichem Erstellen einer Kreuzreferenzliste (Xref Mo/Hp), - nach einem fehlerhaften Kompiler-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 Compilie- ren von externen Modulen (Name in der Statuszeile hinter Mo:) bietet. Vor der Kompilation wird geprüft, ob die ent- sprechende Symboldatei aktuell ist (Kriterium: xx.def zeit- lich vor xx.sym erstellt). Falls nicht, so wird über einen Requester erfragt, ob beide Module zu kompilieren sind und der Kompiler entsprechend gefüttert. Bei der Arbeit mit dem Linker oder gar bei Aufstart von Pro- grammen erfolgt eine noch weitergehende Unterstützung. Vor dem Linken wird die Aktualität der nachfolgenden Module geprüft, bei Bedarf wird entsprechend kompiliert: - Symboldatei des externen Moduls (links in der Statuszeile) - Objektdatei des externen Moduls - Objektdatei des Hauptmoduls Ein praxisnahes Tool, daß mit einem resident gehaltenen Com- piler sehr effizient arbeitet. Sollte beim Compilieren ein Fehler auftreten, dann meldet sich der Editor. Es wurde deutlich, daß das Verhalten von "m2apse" beim Bin- den auf das vorher beschriebene Verfahren für das Compilie- ren aufsetzt. Entsprechend verhält sich "m2apse" auch beim Aufstart von Modulen. Es wird zunächst geprüft, ob die auf- zustartende Binärdatei aktuell ist. Falls nicht, so werden rückwärts schreitend der Linker und der Kompiler im bespro- chenen Sinne aktiviert. Es ist somit durchaus möglich, ein nur im Quelltext vorhandenes Hauptmodul aufzustarten. "m2apse" besorgt das Kompilieren und Binden selbständig. Damit sind die wesentlichen übergreifenden Funktionen darge- stellt. Sie können nur einwandfrei arbeiten, wenn die Sy- stemzeit richtig geführt wird. 5.6 Optionen zur Steuerung von Werkzeugen Mit "m2apse" ist es besonders einfach, die Optionen zur Steuerung der Arbeitsweise von M2-Werkzeugen einzusetzen. Die Wirkungen der Optionen sind der Dokumentation zu den je- weiligen Werkzeugen zu entnehmen. Die Menüs "Editor", "Compiler", "Linker" und "Spezial" bie- ten die Möglichkeit, Optionen durch Auswahl von Untermenüs zu aktivieren und zu deaktivieren. Ein "Häckchen" (check mark) informiert über den Status (aktiv oder nicht aktiv). Im Untermenü "Optionen" zum "Kompiler-Menü" bedeutet ein Häckchen z.B. vor "Ref-Datei", daß beim Compilieren eine Re- ferenzdatei zu erstellen ist. Befindet sich dort kein Häck- chen, dann tritt die Option "keine Referenzdatei erstellen" in Kraft. Bei Aufruf des Kompilers wird in diesem Fall als Parameter "-d" vor dem Namen des Quelltextes übergeben. Die Kennbuchstaben für die einzelnen Optionen sind in den Unter- menüs in Klammern angegeben. Aktivierte Optionen werden bei Werkzeugaufruf im "m2apse-Window" angezeigt. Im Menü "Spezial" kann die Ziel-CPU bestimmt werden. Der Kompiler, der Linker und das Make-Tool übernehmen die Einstellung. Zusätzlich ist es no 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 vor- eingestellt. Durch Laden des Projektstatus können die Op- tionen projektbezogen gesetzt werden. Mit "Status sichern" ist es möglich, die Optionen für den späteren Gebrauch abzu- speichern. 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. Compilation eines Batch). 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) zusam- mengefaßt, die im wesentlichen dazu dienen Namen einzugeben, Verzeichnisse (Projekte) anzulegen bzw. zu wechseln, Druck- ausgaben zu steuern, die Konfiguration von "m2apse" zu än- dern 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ü wird es später möglich sein, die Arbeits- weise von m2apse so umzuschalten, daß ein Precompiler ein- bezogen wird (ein zusätzliches Produkt), um OOP-Dateien zu bearbeiten. "Mo/Hp benennen" Mit Hilfe des Requesters wird der Name des zu bearbeit- enden Moduls erfragt. Die Zusätze "mod" und "def" 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 ungültigen Eingaben erfolgt die Aufforderung, ein Projekt zu benennen. Bei Benennung eines neuen Projektes gehen die bisher der Programmierumgebung bekannten Modulnamen (Statuszeile) ver- loren, sofern vorher nicht von der Funktion "Status sichern" Gebrauch gemacht wird. Ein Requester macht darauf aufmerk- sam. "Suffix ändern" Suffix und Modulnamen gehören zusammen, obwohl sie mit un- terschiedlichen Funktionen einzugeben sind. Eine Änderung des Suffix wirkt sich auf die Menügruppen genauso aus, wie die Änderung eines Dateinamens. Im wesentlichen sind davon die Funktionen "Drucken, Mo/Hp", "Compiler, Mo/Hp", "Binde Hp" und "Starte Hp" betroffen. Aus einem Modul mit dem Suf- fix "def" im Namen kann z.B. kein ausführbares Programm ge- neriert 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änzungspro- grammes "m2list" (siehe 7.2) initiert werden. "Mo/Hp" bezieht sich auf das jeweils für die Bearbeitung be- stimmte Modul, dessen Name der Statuszeile (siehe dazu 5.2) zu entnehmen ist. Sind mehrere Dateien auszudrucken, dann kann es sich empfeh- len 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 "Dru- ken, XRF" bzw. Drucken, DEC" zu Papier gebracht werden. Beide Funktionen beziehen sich auf das jeweils zur Bearbei- tung bestimmte Modul, wie für "Drucken, Mo/Hp" bereits be- schrieben. 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 ei- ne 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. Diese Eigenschaft ist besonders nützlich, wenn bei Aufruf von "m2apse" als Parameter ein Projektverzeichnis übergeben wird, in dem gearbeitet werden soll. "Konfig ändern" "m2apse" ist konfigurierbar. Die Arbeitsweise des Konfigura- tionstools wird unter 8.1 beschrieben. Die Konfiguration ist jederzeit änderbar. Sie wird nach Aufruf von "m2apse" auto- matisch eingenommen, sofern eine Konfigurationsdatei mit gültiger Versionsnummer gefunden wurde. "Resident" Für Editor, Kompiler und Linker kann angegeben werden, ob die Werkzeuge resident geladen werden sollen. Bei gesetztem "Häckchen" erfolgt das Laden bereits bei Start von "m2apse". Resident geladene Werkzeuge werden bei Verlassen von "m2apse" selbständig entladen. 6.2 Editor-Menüs Die Menügruppe "Editor" stellt Funktionen für die Bearbei- tung 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 gekennzeich- net ist (siehe 5.2). Es wird "m2emacs" aktiviert, sofern die Konfiguration keinen anderen Editor vorsieht (siehe 4). Wenn die ausgewählte Datei noch nicht besteht, dann wird der Modulname aus dem Dateinamen abgeleitet und im Editor vorge- geben. 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 beschrie- ben. Die Optionen 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. "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 Be- zeichnung "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 Kompiler 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 je- weils in der Statuszeile zur Bearbeitung bestimmten Textda- tei. Nach Erstellung der Kreuzreferenzliste wird diese in den Editor geladen und dargestellt. Die Liste trägt den Na- men des analysierten Moduls, dem "XREF" vorangestellt wurde. "Datei" Es ist möglich, beliebige Dateien für die Bearbeitung im Editor (mit Hilfe des Filerequesters) auszuwählen. 6.3 Compiler-Menüs In der Gruppe Kompiler-Menüs sind Funktionen zusammengefaßt, die der Aktivierung des Übersetzers, der Analyse des erzeug- ten 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 in der Statuszeile vermerkte Modultexte zu verarbeiten (siehe dazu 5.5). Die Funktion ist nur aktivierbar, wenn wenn die zu übersetzende Quelldatei auch wirklich vorhanden ist. Tre- ten bei der Übersetzung Fehler auf, dann wird der Editor ge- startet und der fehlerhafte Text zur Korrektur geladen. "Optionen" Die Arbeitsweise des Übersetzers ist mit der Funktion "Op- tionen" 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 Kompilers (siehe dazu 5.6). Mit "Status si- chern" (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 aus den bisherigen Ausführungen hinreichend bekannt sind. Die gesetzten Kompiler-Optionen gelten auch für die Überset- zung 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 darge- stellten Namen zur Korrektur anwählbar. "Dekod Obj" Mit dem Menü "Dekod Obj" kann das an anderer Stelle be- schriebene Programm "m2decobj" aufgerufen werden, sofern zu dem aufgeführten Modulnamen (Statuszeile hinter Mo: bzw. Hp:) eine Objektdatei im Unterverzeichnis "obj" vorhanden ist. Nach Abschluß der Dekodierung wird der Editor mit der erzeugten Datei geladen, die den Namen des dekodierten Mo- duls trägt, dem "DEC" vorangestellt wurde. "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äckchen). Durch Löschen des Häckchens wird das Tool entladen. Es ist möglich, projekt- bezogene 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.4 Linker-Menüs Die Gruppe Linker-Menüs bietet verschiedene Möglichkeiten, Module zu lauffähigen Programmen zu binden und aufzustarten. "Binde Hp" Mit dem Menü "Binde Hp" wird der Linker "m2l" aufgefordert ein Hauptprogramm zu binden (Name des Moduls in der Status- zeile 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 Kompiler gestartet um eine Objektda- tei zu erstellen. Treten bei der Übersetzung Fehler auf, dann wird der eingeleitete Funktionsablauf abgebrochen und der Editor mit dem fehlerhaften Programmtext geladen, um ei- ne Fehlerbehandlung zu ermöglichen. Die übergreifende Funk- tionalität erstreckt sich auch auf externe Module (Name hin- ter Mo:; siehe dazu ausführlich 5.5). "Optionen" Im Prinzip gelten für den Linker die Ausführungen wie für die Kompiler-Optionen, einschließlich der Wirkung des Untermenüs "Ziel-CPU". "Erfrage Para" Um bei Programmaufstart Parameter zu übergeben, wurde die Funktion "Erfrage Para" bzw. "Keine Para" in "m2apse" einge- baut. 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:) ge- startet werden. Bei Bedarf wird vor dem Aufstart kompiliert und gebunden (siehe dazu ausführlich 5.5). Für das zu star- tende Programm wird ein gesondertes Window geöffnet (siehe 5.1). Vorher wird noch der Debugger resident 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 Kompiler-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äch- lich 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" trägt, und auch keine Symboldatei ("sym") 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 Stuszeile erscheint. Wenn der Library-Linker seine Arbeit erfolgreich abgeschlossen hat, helfen Requester weiter, die erzeugte Datei abzulegen oder gar in den Speicher resident zu laden. 6.4 Spezial-Menüs Der Gruppe der Spezial-Menüs sind elf Funktionen zugeord- net, von denen vier mausgesteuert aufrufbar sind. "Starte Make" Die Funktion "Starte Make" ruft das M2-Tool "m2make" auf und übergibt als Parameter den Namen des Hauptprogrammes (in der Stauszeile hinter Hp: aufgeführt). Das Menü ist nur anwähl- bar, wenn "m2apse" auch wirklich Zugriff auf "m2make" hat. Zu "m2make" gibt es eine gesonderte Dokumentation. Optionen" Die Arbeitsweise von "m2make" ist über Optionen steuerbar. "m2apse" unterstützt diese Möglichkeit. Die Ausführungen zu den Kompileroptionen (6.3) und in Abschnitt 5.6 gelten sinn- gemäß. "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 un- terschiedlichem Suffix) tragen. Zur Sicherheit ist eine Rückfrage (Requester) eingebaut. Der Modulname wird der Sta- tuszeile 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, deren Namen "DEC" vorangestellt ist. Es wird angenommen, daß es sich dabei ausschließlich um Arbeitsergebnisse des Objektdecoders handelt. "Lösche XREF Dat #?" Für diese Funktion gelten die Ausführungen wie für die vor- her beschriebene. Dateien mit Kreuzreferenzen tragen den Na- men des analysierten Moduls, dem "XREF" vorangestellt ist. "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 von "m2apse" angelegt.) Vorher werden jedoch die Zeit- punkte des letzten schreibenden Zugriffs auf das Projektver- zeichnis und auf das Zielverzeichnis verglichen, um festzu- stellen, ob es überhaupt etwas zu kopieren gibt. "Kopiere Projekt" gibt in einem Requester den Namen eines Zielver- zeichnisses vor. Der Name geht auch in den Status ein. "Ziel-CPU" Das Untermenü legt für den Kompiler und den Linker die Ziel-CPU fest, die in die jeweiligen Optionen und somit in den Projektstatus eingeht. 6.5 Dir-Menüs Die Funktionen der Gruppe "Dir" bzw. "List" sind sowohl mausgesteuert als auch über die Tastatur ansprechbar. Sie erklären sich von selbst. Die Funktion "-->List" ( Umschal- ten auf List) bewirkt, daß Verzeichnisse mit "C:List" auszu- geben sind. Der Name des Menüs wird entsprechend geändert. Mit "-->Dir" kann auf Ausgaben mit Hilfe von "C:Dir" zurück- geschaltet werden. Unabhängig von "List" bzw "Dir" arbeitet die Funktion "RESIDENT", die die Namen resident geladener Programme an- zeigt. 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 Ob- jekt- und Symboldateien, um "m2apse" neu zu binden. Um eine eigene Version von "m2apse" zu erstellen, ist es le- diglich erforderlich, das Modul "ApseUserStuff.mod" wunsch- gemäß 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 kei- nen 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 ei- genen 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 unötig viel Arbeitsspeicher in Anspruch zu nehmen. 8.1 m2apseconfig Das Projekt-Menü stellt die Funktion "Konfig ändern" zur Verfügung, die das Konfigurationsprogramm "m2apseconfig" aufruft. Das Programm ermöglicht es in einer Maske jeweils den Pfad und den Namen für die M2-Tools vorzugeben. Die Kon- figuration ist so voreingestellt, daß sämtliche Tools im Verzeichnis "M2:" liegen. In der Maske kann hinter "Work" ein Projektverzeichnis ange- geben werden, auf das "m2apse" aufschaltet (aktuelles Ver- zeichnis), falls die Programmieroberfläche ohne Parameter aufgerufen wurde. Es ist eine Grundkonfiguration vorgesehen, die durch Betäti- gung des Schalters "Vorg" (Vorgabe, d.h. voreingestellt) in die Maske eingetragen wird. In die Konfiguration ist auch aufzunehem, 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 Betriebs- art "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 bestimmt werden, ob die spezifischen Optionen des "m2emacs" bei Aufruf des Editors zu übergeben sind. 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 Re- quester darauf hin. 8.2 "m2list" "m2list" ist ein einfaches Druckprogramm, daß seitenweise ausgibt. Jede Seite wird mit einem Kopf, dem Erstellungs- zeitpunkt der Datei und einer laufenden Seitennummer verse- hen. Das Programm schaltet den Drucker auf den Schrifttyp "Elite" um, sofern möglich und von "Preferences" zugelassen. 8.3 m2xref Das Programm "m2xref" wird durch ein Menü der Gruppe "Editor" aufgerufen. Es erzeugt Kreuzreferenzlisten, die aus dem zeilenweise nummerierten Quelltext betehen, dem eine Ta- belle mit allen Bezeichnern und der Zeilennummer, in der sie vorkommen, folgt. Das Programm arbeitet mit einer Ausschluß- datei (S:Modula.words), die bei Auslieferung nicht nur alle reservierten Wörter der Sprache Modula-2 sondern auch die Ergänzungen durch M2Amiga (Beispiel: BPTR und BPOINTER). Die Datei kann von Ihnen geändert werden. Es ist nicht erforderlich, eine alphabetische Reihenfolge einzuhalten. 8.4 m2copyproject Mit dem Programm ist es möglich Dateien eines Projektes ver- zeichnisweise zu kopieren. Das Programm wird durch das Spe- zial-Menü "Kopiere Projekt" aufgerufen. Ein Requester er- fragt 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 Kopie- rens 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 be- troffene 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. Vor dem eigentlichen Kopieren werden ggf. vorhandene Dateien der Typen "XREF..." bzw. "DEC..." gelöscht. 9. Fehlermeldungen und Ausbau des Entwicklungssystems "m2apse" wurde praxisnah entwickelt. Das Programm hat sich im professionellen Einsatz bewährt. Dennoch könnten noch Fehler auftreten. Wir werden bemüht sein, auf Ihre Fehler- meldungen schnell zu reagieren. Vorstellungen für den weite- ren Ausbau des Programmes nehmen wir gerne entgegen. Viel Freude mit "m2apse"! egm märz 1991