© HAAGE & PARTNER Computer GmbH  Mainzer Straße 10A 61191 Rosbach v.d.H. Tel: 0 60 07 / 93 00 50 Fax: 0 60 07 / 75 43 Compuserve: 100654,3133 Internet: 100654.3133@compuserve.com Homepage: http://ourworld.compuserve.com/homepages/haage_partner Zunächst möchten wir uns bei Ihnen für den Kauf von StormC bedanken. Sie beweisen uns damit, daß wir mit der Entwicklung des StormC- Entwicklungssystems eine richtige Entscheidung getroffen haben. Hier finden Sie die wichtigsten Änderungen gegenüber der Version 1.05: ====================================================================== StormShell  - Kompakter und mit neuer Oberfläche - Neuer Optioneneinsteller mit erweiterten Optionen - Codebedingte Objektdateien-Ablage - Verhindern von Inline-Funktionen - Ignorieren von Exceptionspezifizieren - Ersetzung von nichtvorhandenen Funktionen durch eigene Stub-Funktion (rapid prototyping) - Codefolding (Optimierung beim Linken) - Anbinden von Binärdateien - Linkerunterstützung für StormWIZARD - Neue Debugger-Kontrollmöglichkeit - GoldED alternativ nutzbar! Projektverwaltung  - Sortieren von Sektionen - Sortieren innerhalb von Sektionen - Neue Sektion für StormWIZARD - Neue Tastaturfunktionalität StormEd  - Klammern-Check - Blockeinrückung - Farbeinsteller - New - Projekttemplate StormRun  - History- und Breakpointfenster StormC  - Neue Optimierungsstufe - Neues Schlüsselwort __saveds StormLibrarian  - Einfache Erzeugung von Linker-Bibliotheken StormShell  Mit neuer Oberfläche wesentlich kompakter! StormC 1.1 ist komplett mit StormWIZARD überarbeitet. Die gesamte Oberfläche ist neu erstellt, was sich in der Geschwindig- keit und in der Grösse der einzelnen Programmteile stark bemerkbar macht. War beispielsweise die StormShell in der alten Version noch über 500 KByte groß, so ist die aktuelle Version mit handlichen 300 KByte enorm abgespeckt. Die Funktionalität muß darunter selbst- verständlich nicht leiden. Ganz im Gegenteil. Sortieren in der Projektverwaltung Einzelne Einträge in Projektsektionen oder auch ganze Sektionen können in der Reihenfolge schnell geändert (verschoben) werden. Ihre bevorzugte Sortierung in der Projektverwaltung wird gespeichert und bei jedem Anlegen neuer Projekte automatisch berücksichtigt. Neue Projektsektionen Die Integration von StormWIZARD ist genau so perfekt, wie die Ein- bindung aller anderen Porgramme. Beim Hinzufuegen von durch StormWIZARD erzeugten Dateien (.wizard) wird die neue Sektion "StormWIZARD Schnittstelle" angelegt. Bei Doppelklick auf den Eintrag wird StormWIZARD gestartet und die gewählte Datei geladen. Die Integration aller Entwicklungskomponenten garantiert eine optimale Strukturierung und Organisation Ihrer Projekte. Erweiterte Tastaturfunktionalität Die Unterstützung durch zusätzliche Tastaturqualifier in der Projektverwaltung war bisher nur sehr stiefmütterlich behandelt. Bei Doppelklick auf den Programmnamen im Projekt und gleichzeitigem Gedrückthalten der -Taste wird das Programm automatisch im Debug-Modus gestartet.< Hinzu kam nun die Unterstützung von Datatypes. Bei Doppelklick auf einen Eintrag in der Projektverwaltung und Gedrückthalten der -Taste wird Multiview gestartet und die Datei geladen. Ist nun ein entsprechender Datatyp in Ihrem System installiert, wird die Datei angezeigt. Ein kleines Beispiel verdeutlicht, wie sinnvoll diese Erweiterung ist: Sie arbeiten an Ihrem Projekt und möchten auch eine AmigaGuide- Dokumentation erstellen. Am einfachsten fügen Sie hierfür einen neuen Eintrag in die Guide-Sektion ein. Bislang konnten Sie den Eintrag zwar doppelklicken, um den Text dann mit dem Editor zu bearbeiten, wollten Sie aber das Endergebnis sehen, mußte die Originaldatei gesucht und doppeltgeklickt oder sogar Multiview manuell gestartet werden. Mit der neuen Projektverwaltung genügt es, die -Taste gedrückt- zuhalten, und den Eintrag in der AmigaGuide-Sektion doppelt zu klicken. Daraufhin wird Multiview gestartet und Ihr AmigaGuide- Dokument in der Anwenderfassung angezeigt. Eine Arbeitserleichterung, um die wir von vielen Anwendern gebeten urden! Neuer Optioneneinsteller mit erweiterten Optionen Der neue Optioneneinsteller wurde aufgeräumt und in seiner Bedienung wesentlich handlicher gestaltet. Die mit StormWIZARD verfügbaren Karteikartenreiter verschaffen einen Ueberblick über alle Einstell- möglichkeiten. Codebedingte Objektdateien-Ablage Viele Anwender der Version 1.0 sind begeistert von unserer Projekt- verwaltung und der Möglichkeit, alles zum Projekt gehörige strukturiert und überschaubar verwalten zu können. Selbstverständlich gibt es auch hierfür viele Erweiterungsmöglichkeiten, die uns genannt wurden. Eine wichtige Erweiterung ist die Verwaltung verschiedener Versionen Ihres Projektes. Gemeint sind z.B. Versionen Ihres Programmes für verschiedene Prozessortypen. Bislang mußte das komplette Projekt neu kompiliert werden, was bei umfangreichen Projekten unter Umständen sehr lange dauern kann. Die Version 1.1 bietet Ihnen die Möglichkeit, in jedem Projekt eine Schublade anzugeben, in die die Objektdateien gespeichert werden sollen. Für verschiedene Versionen genügt es nun, den einzelnen Projekten unterschiedliche Schubladen für die Objektdateien anzugeben. Beispielsweise "68K-Code", "020-Code", "060-Code", usw...
Da in den Schubladen immer die Objektdateien mit den entsprechenden Optionen enthalten sind, werden immer nur die Module neu kompiliert, deren Quellcode tatsächlich geändert wurde! Verhindern von Inline-Funktionen Inline-Funktionen werden wie Makros direkt an der Stelle des Aufrufs im Quelltext eingefügt. Der Compiler spart damit den Aufruf der Funktionen und kann daher extrem gut optimieren. Durch die Benutzung der Inline-Funktionen wird das Programm schneller und wenn man sich auf kurze Inline-Funktionen beschränkt (z.B. das Auslesen des Wertes eines Attributs einer Klasse) auch kürzer. In der Testphase können Inline-Funktion jedoch sehr störend sein, da es für den Debugger unmöglich ist, den Quelltext zu Inline-Funktionen anzuzeigen. Mit dem Schalter kann der Compiler angewiesen werden, die Inline- Funktionen wie normale Funktionen aufzurufen. Der Debugger kann dann auch den Quelltext dieser Inline-Funktionen anzeigen und im Einzel- schrittmodus abarbeiten. Dabei stört es nicht, dass Inline-Funktionen meistens in den Header- Dateien der Module zu finden sind. Ignorieren von Exceptionspezifizierern Für die Testphase oder Sicherheitsfanatiker bietet C++ die Möglich- keit eine Funktion (auch Memberfunktionen einer Klasse) mit sogenannten Exceptionspecifier auszustatten: Mit Hilfe des Schlüssel- worts hinter dem Funktionsprototyp wird eine Liste von Exceptions angegeben, die durch diese Funktion höchstens ausgeworfen werden. Alle anderen Expcetions werden als unerwartete Exception behandelt. Dafür muss der Compiler um jede Funktion mit Excpetionspecifier einen "try-Block" setzen, der alle erlaubten Exception auffängt und wieder auswirft, aber alle anderen Exceptions abfängt und die Funktion unexpected() aufruft. Dieser zustäzliche "try- Block" macht das Programm länger und etwas langsamer. Es empfiehlt sich deshalb nach ausreichender Testphase den Compiler anzuweisen diese Exceptionspecifier zu ignorieren. Das Programm wird dadurch unter Umständen drastisch kürzer. Codefolding (Fold Common Code) Der StormLink ist in der Lage, einige Optimierungen, die ein Compiler macht, auch im fertigen Programm durchzuführen. Dazu gehört auch das Entfernen von mehrfach vorhandenem Code. Wenn der StormLink zwei Routinen entdeckt, die identisch sind, so daß es keinen Unterschied macht, ob das Programm die erste oder die zweite aufruft, ersetzt der StormLink die zweite Routine durch den Code der ersten. Wer behauptet, daß er ja selber programmiert und sowas nicht macht, bitteschön. Aber nicht wundern, wenn bei der Benutzung von Templates das Programm immer länger und länger wird. Da diese Option einiges an Laufzeit kostet, ist ihre Benutzung auch nur dann zu empfehlen, wenn der Optimizer des Compilers auf der höchsten Stufe steht. Ersetzung von nichtvorhandenen Funktionen Diese Option wurde zur Unterstützung des sogenannten Rapid Prototyping implementiert. Generieren Sie einfach eine Funktion mit dem Namen 2_stub", schalten die genannte Option ein und programmieren drauflos. In der Stub-Funktion sollte vielleicht eine Debugausgabe gemacht oder ein Dialog mit entsprechendem Hinweis: "Funktion noch nicht implemen- tiert" ausgegeben werden. Anbinden von Binärdateien Die neuen Linkereigenschaft, Binärdateien anbinden zu können, fand man bisher eigentlich nur bei Assembler-Entwicklungssystemen. In StormC 1.1 wurde sie zur StormWIZARD-Unterstützung integriert, kann aber auch für andere Zwecke genutzt werden. Bei Aktivierung der Option "Binde WIZARD-Datei" wird die in der Projektverwaltung enthaltene Wizard-Datei an das Programm gelinkt. Damit die Daten korrekt initialisiert werden können, muss selbst- verständlich ein Symbolname für den Datenhunk angegeben werden. Die Initalisierungs-Routine für die Wizard-Daten kann dann die an das Programm angehängte Datei initialisieren. Neue Debugger-Kontrollmöglichkeit Mit der neuen Version kann zum Projekt gespeichert werden, ob das Ressource-Tracking prinzipiell aktiv sein soll oder nicht. Bei einigen Projekten ist es nicht ratsam, das Ressource-Tracking zu aktivieren, da vielleicht selbst derartige Patches vorgenommen werden oder eventuell das Anfordern und Freigeben von Ressourcen auf mehrere unabhänige Tasks verteilt ist. Mit dem Cycle-Gadget im Optionen-Feld kann eingestellt werden, wie sich der Debugger beim Starten verhalten soll. Mit der Einstellung "Debugger im Single-Step-Modus starten", kann ab sofort auch der Startup-Code untersucht werden. GoldED alternativ nutzbar! Der wohl zur Zeit einzige Editor mit allen nur erdenklichen Features ist der GoldED. Daher entschieden wir uns, diesen als alternativen Editor an unser Entwicklungssystem anzupassen. Es genügt das Merkmal GOLDED=TRUE einzutragen und anstelle von StormED wird GoldED gestartet. Für viele von ihnen ist die Editorfunktionalität mitver- antwortlich bei der Kaufentscheidung. Durch die Einbindung von GoldED dürfte für viele die Entscheidung getroffen sein. StormEd Farbeinsteller Vielfach gewünscht, ist es nun in der aktuellen Version einfach möglich, die farbliche Textdarstellung mit der Maus zu verändern. Die einfache Einstellmöglichkeit löst damit die bislang komplizierte Angabe der Vorder- und Hintergrundfarbe in der jeweiligen Settings- Datei ab. Klammern-Check und Blockeinrückung Die automatische Ueberprüfung der Klammernstruktur ist sehr hilfreich bei tief geschachtelten Konstruktionen. All zu leicht wird eine Klammer vergessen und man erhält eine Fehlermeldung, die nicht unbedingt auf eine fehlende Klammer schließen lässt. Auch bei der Programmierung von Installer-Skripten ist diese Funktion sehr hilfreich. New - Projekttemplate Genau wie beim Hinzufügen neuer Texte zu einem Projekt wird beim Neuanlegen eines Textes bereits der Speicherort erfragt. Mit der dabei angegebenen Dateiendung kann dann das entsprechende Template für den neuen Text geladen und verwendet werden. StormRun History- und Breakpointfenster Im Debugger StormRUN werden alle Debuggschritte protokolliert und können im History-Fenster zurückverfolgt werden. Das neue Breakpoint- Fenster zeigt alle gesetzten Unterbrechungspunkte. Per Doppelklick kann gezielt an die jeweilige Programmstelle gesprungen werden. Selbstverständlich ist es möglich, einzelne oder alle Unterbrechungs- punkte zu löschen. StormC Neues Schlüsselwort "__saveds" Was bisher mit der Funktion "geta4" manuell konvertiert werden mußte, ist in der neuen Version zur besseren Kompatibilität integriert. StormLibrarian Einfache Erzeugung von Linker-Bibliotheken Nicht nur die Erzeugung von Shared-Libraries ist eine wichtige Bedingung für ein echtes Entwicklungssystem, sondern auch die Möglichkeit, Funktionsgruppen in einer Linkerbibliothek zusammen- fassen zu können. Bei der Erzeugung von Bibliotheken wie beispiels- weise der Amiga.Lib oder der Storm.Lib muß bereits beim Kompilieren der Module darauf geachtet werden, dass jede Funktion am Besten in einem eigenen Hunk abgelegt wird. Der Compiler bietet dazu die Option "Eigener Hunk für jede Funktion". Nach dem Kompilieren müssen die einzelnen Module zu einer Library "gejoint" werden, was lästige Tipparbeit bedeutet. Unser neuer StormLibrarian hilft Ihnen dabei und bietet die Möglich- keit Objektmodule zu Library-Projekten zusammenzufassen. Haben Sie Ihr Projekt erstellt, genügt ein einfacher Klick auf "Erzeugen" und die Bibliothek wird unter dem angegebenen Namen erzeugt. Bei Veränderung der Objektmodule muß nun lediglich das Projekt in den StormLibrarian geladen und die Bibliothek neu erzeugt werden - fertig! Die Häufigsten Fragen und ihre Antworten! ***************************************** Frage 1: ******** Warum hat StormC keinen "Global Optimizer"?[ Antwort: Ein "Global Optimizer" optimiert ein Programm unter Beachtung der ganzen Funktion und nicht nur einzelner Anweisungen oder Ausdrücke. Dadurch kann ein Global Optimizer z.B. Ausdrücke, die in einer Schleife ausgewertet werden, aber in jedem Scheifendurchlauf immer das gleiche Ergebnis liefern müssen, aus der Schleife herausziehen und schon vor der Schleife bearbeiten. StormC kann diese globale Optimierung bislang nicht, ist allerdings schon in Version 1 dazu vorbereitet, in einer der nächsten Versionen auch diese Optimierung zu beherrschen. Allerdings kann StormC schon jetzt einige Optimierungen, die auch Aufgaben des Global Optimizers sind. Dazu gehört insbesondere die globale CPU und FPU Registerverteilung in den höheren Optimierungs- stufen. Die Register werden in der ganzen Funktion unter Beachtung aller Variablenzuweisungen und Funktionsaufrufe in der Funktion optimal verteilt. Frage 2: ******** Warum ist selbst ein kleines Programm wie "Hello World" gleich mehrere KBytes lang? Antwort: Die mitgelieferte StormC Bibliothek "storm.lib" ist eine ANSI C Bibliothek. Für ein "Hello World" Programm muß aus dieser Bibliothek die "printf" Funktion gelinkt werden. Dadurch kommen aber auch unbenutzte Funktionen z.B. für die Ausgabe von Integer und Fließkommazahlen ins Programm, da aus dem "printf" Befehl nicht ersichtlich ist, welche der Umwandlungen nötig sind. Außerdem werden alle Ausgaben in Dateien gepuffert durchgeführt. Dadurch werden auch kurze Programm relativ groß. Benutzen Sie bitte für ANSI-C-Programm unsere mitgelieferte "stormamiga.lib" Frage 3: ******** Wie kann ich denn ein "Hello World" Programm unter Nutzung der Storm.Lib wirklich kurz kompilieren? Antwort: Kann man auf Fließkommaausgabe verzichten und reicht einem die Pufferung des AmigaDOS aus, kann man jederzeit zur Ausgabe das AmigaDOS direkt verwenden. Die Funktionen "VPrintf" und "VFPrintf" ermöglichen nämlich direkt die Ausgabe ähnlich wie "printf" auf AmigaDOS Dateien. Allerdings sind diese Funktionen nicht 100% ANSI kompatibel. Weitere Möglichkeiten bietet natürlich der Verzicht auf das auto- matische Öffnen und Schließen der Bibliotheken, denn die dazu benutzten Funktionen bieten eine komfortable Fehlermeldungsausgabe mit Unterscheidung zwischen Workbench und CLI Start eines Programms und Beachtung alter Betriebssystemversionen 1.3 und älter. Dieser Komfort ist nicht für jedes Programm notwendig. Man kann einen Minimalstartupcode, den man in Assembler schreibt als eigenen Startupcode benutzen und darin nur die notwendigsten Arbeiten erledigen, z.B. das kleine Datenmodell unterstützen ohne gleichzeitig residente Programme zu erlauben. Frage 4: ******** Warum kompiliert der MaxonC++ Compiler schneller als StormC? Antwort: StormC erzeugt sauberen optimierten Code mit optimaler Registerbe- nutzung und vielfältigen Optimierungen. Außerdem ist StormC konsequent auf den PowerPC vorbereitet und verzichtet deshalb auf den Einsatz schneller aber fehleranfälliger Assemblerroutinen. Leider ist darum die derzeitige Version des Compilers nicht so schnell wie MaxonC++, allerdings arbeiten wir an einer speziellen Optimierzerstufe für die Entwicklungsphase eines Programms mit noch kürzeren Übersetzungszeiten. Frage 5: ******** Warum ist die Bibliothek "storm.lib" so groß und warum gibt es im Gegensatz zu SAS/C nur eine Bibliothek? Antwort: StormC unterstützt ein weiterentwickeltes Objektformat, das auch bei Linkerbibliotheken zum Einsatz kommt. Dieses Format ist 100% kompatibel zum alten (sowohl aufwärts, wie auch abwärts), allerdings können der StormC Linker und der StormC Compiler mit diesem Format mehrere Datenmodelle in einer Objektdatei aufnehmen. Damit bleibt für Sie nicht mehr die fehleranfällige Auswahl der richtigen Bibliothek zu ihren gewählten Compileroptionen, sondern der Linker wählt aus der großen Bibliothek "storm.lib" die Teile aus, die für das gewählte Datenmodell (großes Datenmodell oder eines der beiden kleinen Datenmodelle) gerade paßt. Deshalb ist die "storm.lib" etwa so groß, wie drei einzelne Bibliotheken für jedes Datenmodell zusammen. In Zukunft wird StormC auch noch verschiedene Codemodelle und CPU bzw. FPU Modelle in der Bibliothek unterstützen, sodaß die "storm.lib" und alle weiteren Bibliotheken jeweils optimale Programmeerzeugung automatisch erlauben. Frage 6: ******** Warum kommt es zu der Linker-Fehlermeldung "Symbol _exit nicht definiert", wenn man als Shared-Library linkt? Antwort: Die Shared-Library ruft die ANSI-Funktion exit() auf. Das kann sie zum einen explizit, weil Sie diese Funktion verwenden, oder zum anderen implitzit durch Linker-Bibliotheken, die diese Funktion verwenden. Die "Storm.Lib" nutzt diese Funktion beim automatischen Öffnen der benutzten Shared-Libraries, z.B. der "utility.library". Grundsätzlich darf aber eine Shared-Library die Funktion exit() nicht verwenden, da sie nicht einfach so beendet werden kann. Wie vermeidet man den Aufruf? Man darf das automatische Öffnen von benutzten Shared-Libraries nicht verwenden, sondern muß die Bibliotheken wie im Handbuch beschrieben, öffnen und schließen. Um herauszufinden, welche Bibliotheken alle benutzt werden, sollte man zuerst eine Funktion: void exit() {} in die Shared-Library aufnehmen. Jetzt läßt sich die Library linken. Verwenden Sie die Linker-Option "Map-Datei schreiben". Der Linker erzeugt eine Datei mit der Endung ".map". Suchen Sie alle INIT- Funktionen, die den Basisnamen einer Shared-Library enthalten, z.B. INIT_1_UtilityBase. Öffnen Sie diese Bibliotheken nun alle mit Ihren eigenen Routinen. Denken Sie auch daran, die entsprechende Basisvariable (z.B. UtilityBase) selbst zu deklarieren. Vergessen Sie nicht, die eigene exit()-Funktion wieder aus Ihrem Source zu entfernen. Editor-Tastaturbelegung: ************************ Shift-Cursor Up/Down Bewegt den Cursor auf die erste/letzte Zeile, die im Fenster angezeigt ist. Shift-Cursor Left/Right Bewegt den Cursor auf die erste/letzte Spalte in der aktuellen Zeile. Alt-Cursor Up/Down Springt an den Anfang/ans Ende des Textes. Alt-Cursor Left/Right Bewegt den Cursor auf das nächste Wort vor oder auf das letzte hinter dem Cursor. Shift-Delete oder Shift-Backspace Löscht die Zeile auf der der Cursor steht. Die Zeile wird in die Zwischen- ablage gespeichert. Alt-Delete Löscht die Zeile ab der Cursor-Position bis zu Ende der Zeile. Alt-Backspace Löscht den Text zwischen der esten Spalte der Zeile bis zur Cursorposition. Help Öffnet die Online-Hilfe und zeigt einen erklärenden Text zu dem Wort unter dem Textcursor. Bei dem Wort muß es sich jedoch um eine ANSI-C oder C++ Starndard-Funktion handeln. Hinweis zum PhxAssembler ************************ Zu StormC liefern wir Ihnen den FREEWARE-Assembler FreePhxAss mit. Er ist hauptsächlich für Entwickler von PD-Compilern gedacht, die PhxAss zum Übersetzen ihrer Compiler-Ausgaben verwenden möchten. Der Funktionsumfang ist *sehr* begrenzt: So gibt es z.B. keine Macros, Includes oder bedingte Assemblierung. Viele andere Direktiven wurden ebenfalls ausgebaut. Trotzdem ist der Funktionsumfang zum Übersetzen von Compiler Quelltexten vollkommen ausreichend. Mit FreePhxAss können Sie machen was Sie möchten, es wäre allerdings nett, wenn Sie dann den Namen des Autors in Ihrem Projekt erwähnen. Selbstverständlich gibt es auch eine Shareware-Version von PhxAss, die den vollen Funktionsumfang bietet. Wenn Sie Gefallen an PhxAss gefunden haben, schicken Sie mir doch bitte 25 DM um ein registrierter Benutzer zu werden. Als Gegen- leistung gibt es sofort das neueste Update, sowie das Recht jederzeit ein neues Update vom Autor zu verlangen (vorausgesetzt Sie schicken Ihm eine Diskette). Wenn Ihre Domain große UU-codierte Files zuläßt, versende er Updates auch gerne als E-Mail. Hier die Adresse des Autors: SMail: Frank Wille Auf dem Dreische 45 32049 Herford DEUTSCHLAND EMail: frank@phoenix.owl.de © HAAGE & PARTNER Computer GmbH - We develop to PowerUp the AMIGA