© HAAGE & PARTNER Computer GmbH  Mainzer Straße 10A D-61191 Rosbach. Germany Tel: ++49 60 07 / 93 00 50 Fax: ++49 60 07 / 75 43 Compuserve: 100654,3133 Internet: 100654.3133@compuserve.com Homepage: http://ourworld.compuserve.com/homepages/haage_partner First of all we want to thank you for purchasing StormC. So you told us that we did the right thing by developing StormC. These are the changes of Version 1.1: ====================================================================== StormShell  - new smaller GUI - new options - code dependent object-file storage - prevent of INLINE functions - ignoring of exceptions - replacement of non-existing functions by own Stub-functions (rapid prototyping) - code-folding (optimisation at linking) - binding of binaries - linker support for StormWIZARD - new debug controls - GoldED can be used as and alternative editor Project Manager  - sorting of sections - sorting within sections - new section for StormWIZARD - extended keyboard functionality StormEd  - bracket-check - block indent - new colour controls - new project template StormRun  - history and breakpoint window StormC  - new optimisation levels - new keyword "__saveds" StormLibrarian  - simple creation of linker libraries StormShell  New GUI and much more compact! The GUI of StormC 1.1 is completely done with StormWIZARD, our new GUI editor. The layout of the GUI is completely reworked. It is now much smaller and faster. An example: the old StormShell was 500 KByte of size. Now it is only 300 KByte and it is even more comfortable. Sorting in the Project Manager Single entries of sections or whole sections can be rearranged very quickly. Your preferred sorting method will be stored and used auto- matically at your next project. New Project Sections The integration of StormWIZARD into the StormC environment is as good as the other parts of the development system. By adding files, created by StormWIZARD (.wizard) a new section will be don, called "StormWIZARD Interface". A double click on an entry will start StormWIZARD and load the selected file. The integration of all components grants an optimal structure and organisation of your project. Extended Keyboard Functionality Now there are more qualifiers in the Project Manager. A double click on the program name in the project while pressing key will start the program in debug mode automatically. New Datatypes support. A double click on an entry in the project manager while pressing key will start Multiview. If there is a corresponding Dataype in your system it will be used for displaying the file. An example will show you this: You are working on a project and you want to add an AmigaGuide documentation. So you make a new entry in the AmigaGuide section. A double click will open the editor. But when you want to view it with AmigaGuide you must look for this program, start it manually and load the file. Now you must only use the key while double clicking the entry and Multiview will show your AmigaGuide file. It is so easy and many of our customers wanted us to implement it. New Requesters And More Options The new option requester is much more tided up and easier to use. We used the StormWIZARD paging possibilities to make it that good. Code-Dependant Object-File Storage Many of the customers of version 1.0 are fascinated of our Project Management and the possibilities to structure and manage a project and all its parts. But this could even be improved. Now you can manage different version of your project, e.g. for different processors. Until now you had to compile the complete project. Now only the affected parts will be compiled which will speed up this process. Every project can have its own drawer for the object files. So there can be drawers like "68K-Code", "020-Code", "060-Code" and so on. Since there are the object files with the according options only modules with changed source will be compiled again. Pretend of Inline Functions Inline functions are placed directly at the place of their call in the source, just like macros. The compiler must not call the function and so it can optimise extremely good. Inline functions will make the program faster and even smaller in some cases (when using small inline functions, e.g. reading the value of an attribute of a class). During program development inline functions might be very disturbing, cause it is impossible for the debugger to show the source of it. With this switch the compiler is told, to use inline functions like normal functions. So the debugger can show the source of these inline functions and trace them in single step mode. (There it does not matter that the inline function are often in the header files of the modules. Ignoring of Exception Specifiers During testing or for security fanatics C++ offer the possibility to do functions (also member functions of a class) with exception specifies: To use it there is the keyword after a function prototype and a list of exceptions that can be output at the most. All other exceptions, not mentioned in that list will be threaded as unexpected exceptions. The compiler must set a "try block" around every function with exception specifiers, that catches and outputs every allowed exception, but intercepts all other exceptions and calls the function unexpected(). This additional "try block" makes the program longer and slower. After the program has been tested for a while you should instruct the compiler to ignore these exception specifiers. This might shorten the program drastic and makes it faster. Code Folding (Fold Common Code) StormLINK is able to do some optimisations, normally done by a compiler, on the compiled program. So it can remove multiple existing code segments. When StormLINK detects two routines that are identical it will replace the second one by a call of the first one. Normally this will be done by the programmer as well, but while using templates the compiler generates a lot of identical code and the program gets longer and longer. This linker option costs a lot of time so it is recommended to use it on high compiler optimisation levels only. Replacing Non-Existing Functions This option was implemented to support the so called rapid prototyping. The function "_stub" is called when the linker can not find a specified function. For that reason one can define a function "_stub" which includes a debug output or a dialogue like "Function not jet implemented". Linking of Binaries Normally only assembler systems offer the possibility to link binaries. We implemented this feature to support the co-operation with our GUI editor StormWIZARD, but it can be used for other purposes as well. When the option "Link WIZARD File" is activated the WIZARD file will be linked to the program if there is such and entry the project manager. To initialise the data correctly a symbol name must be given for the data hunk. The initialisation routing for WIZARD data can then initialise the data attached to the program. New Debug Controls The option to use Resource Tracking or not can now be stored with the project. On some projects it is not advisable to use Resource Tracking, because it interferes with patches doing the same thing. Or maybe the reservation and freeing of resources is don by some independent tasks. Now the behaviour of the debugger at start can be selected by a cycle gadget in the option area. With the option "Start Debugger in Single- Step-Mode" the Startup-Code can be examined. GoldED as Editor for StormC! One of the most popular editor in these times is GoldED from Dietmar Eilert. It offers all imaginable features, so we decided to use it as an alternative to our wonderful StormED. As we know from our customers the editor is one of the most important parts of a programming system and every one has its own habit to do his programming job. So the editor is one big point at the decision for a compiler system. Now this is no question any more :) Colour Adjustment in StormEd The colours for the syntax highlightning can be easily changed with the mouse. Bracket Check and Indent The automatic checking of the structure of the used brackets is a very useful option, especially if there are many nested ones. In this case one bracket will be forgotten very often and a warning is given that does not help very much at that time. When programming an installer script this option is also very useful. New - Project Template As on adding a new text to a project the storage place will be asked when doing a new one. With the given file ending the corresponding template for the new text can be loaded and used. StormRun History and Breakpoint Window StormRUN, the source-level debugger will record every debug step in the history window. The new breakpoint window will display all set breakpoints. A double click leads to the corresponding position in the source. Of course it is possible to remove single or all breakpoints. StormC New Keyword "__saveds" Before this had to be done manually converted with the function "geta4". Now it is integrated to get a better compatibility to SAS/C. StormLibrarian Easy Creation of Linker Libraries Not only the creation of shared libraries is an important condition for a real development system, but also the possibility to summarise groups of functions in a linker library. At creation of libraries like Amiga.Lib or Storm.Lib one must pay attention to place every function in an own hunk at compilation of a module. The compiler offers the option "Own Hung For Every Function" for this. After compilation these modules must be joint to a library. What means a lot of typing work. Our new StormLibrarian support this procedure and offers the possibility to join object modules to a library project. If there is a project, only a simple click on "Create" is needed to create the library with the given name. If there are changes on the object modules the project must just be loaded into StormLibrarian and the library will be recreated - that is all! Editor Key Map: ************************ Shift-Cursor Up/Down Moves the cursor to the first/last line displayed in the window. Shift-Cursor Left/Right Moves the cursor to the first/last column of the current line. Alt-Cursor Up/Down Jumps to the start/end of the text. Alt-Cursor Left/Right Moves the cursor to the next word in front of or behind the cursor. Shift-Delete oder Shift-Backspace Deletes the line the cursor stands. It is stored in the clipboard. Alt-Delete Deletes the line starting form the position of the cursor to the end. Alt-Backspace Deletes the text from the start to the cursor position. Help Opens the Online Help and displays an explanation to the word under the cursor. The word must be an ANSI-C or C++ standard function. Advices to PhxAssembler ************************ As a bonus the freeware assembler FreePhxAss is delivered with StormC. It is mainly for useful for developers of PD compilers which use it for translation of their compiler output. The function size is *very* limited: There are no macros, no includes, no conditioned assembling. Many directives are also not available. FreePhxAss can be used freely, but the name of the Author should be mentioned in the project. If you are interested in PhxAss, there is a registered version that is available at a low price. Please contact SMail: Frank Wille Auf dem Dreische 45 32049 Herford Germany EMail: frank@phoenix.owl.de Some Frequently asked Questions and Answers ! ***************************************** Q 1: ******** Why has StormC no Global Optimiser" ?[ Answer: The compiler of StormC offers already a good optimisations. Some of the used techniques are also part of a global optimiser. Especially the optimised organisation of the global CPU and FPU registers is such a one. StormC is already prepared to do more of the global optimisations in further versions. They can be implemented step by step. But as said before the optimisation of StormC and StormLINK. Q 2: ******** Why does a small "Hello World" gets so long (some Kbytes) ? Answer: "Storm.lib" is a highly compatible ANSI C library that offers buffered I/O. The program "Hello World" uses "printf" of the "Storm.lib", but it does not differ between the output of integer or floating point, so there are unused parts of the library in your code that makes small programs relatively large. If only ANSI C is used the library "StormAmiga.lib" can be used. This is a highly optimised assembler library that generates very small and fast programs. It only supports "far code" and "far data" model. Q 3: ******** How can I get a short "Hello World" using Storm.Lib ? Answer: If floating point is needed and buffered I/O of AmigaDOS is enough AmigaDOS functions can be used for this. "Vprintf" and "VFPrintf" will directly output to AmigaDOS files, just like "printf". But these functions are not 100% ANSI compatible. Another possibility is to resign on automatically open and close of libraries and its comfortable error handling which differs between Workbench and CLI start while paying attention to OS 1.3 and older. This comfort is not necessary for all programs. So a minimal startup code, written in assembler can be used, that only does the essential jobs, e.g. only supporting the small data model, not supporting resident programs ... Q 4: ******** Why is the library "storm.lib" such a big one and why is there only a single one (in contrast to SAS/C) ? Answer: StormC support a further developed object format that is used for linker libraries as well. It is 100% compatible to the old one. Its advantage is that the Linker and the Compiler of StormC can accommodate more data models in one object file. So the programmer must not decide which is the right library that fits the used data model (far data, near data(a4), near data(a6)). This caused many errors. Now the linker takes the needed parts out of "Storm.lib". For these reasons "Storm.lib" is nearly as big as these three libraries of SAS/C. In the future StormC will support even more code modells and CPU and FPU models, so "Storm.lib" will allow the optimised program generation automatically. Q 5: ******** Why does the linker displays the error message "Symbol _exit not defined", when linking as Shared Library ? Answer: The Shared Library calls the ANSI function exit(). This can be done directly by the programmer or indirectly by the linker library which uses this function. "Storm.lib" uses this function to automatically open the used Shared Library, e.g. the "utility.library". Basically a Shared Library is not allowed to use exit(), cause it can not be finished simply. How to avoid this call ? You should not use the automatic opening of used Shared Libraries. Instead you must open and close the library as it is described in the manual. To get a list of all used libraries you should include void exit() {} into the Shared Library. Now you can link it. You should use the linker option "Write Map File". The linker will generate a file with the extension ".map". Now watch all INIT functions which contain the basis name of the Shared Library, e.g. INIT_1_UtilityBase. Now open all these libraries with your own routines. Pay attention to declare the corresponding basis variable (e.g. UtilityBase). Do not forget to remove your own exit() function from the source. (c) HAAGE & PARTNER Computer GmbH - We develop to PowerUp the AMIGA