CLUSTER-PD Hi Amigianer, In der Annahme, daß Ihr, wenn ihr diese Demoverion gekauft/kopiert habt,auch programmiert, und weiter angenommen, daß viele mit ihrer Programmiersprache nicht zufrieden sind, möchte ich euch eine ´fast´ neue Programmierprache vorstellen und vielleicht schmackhaft machen, nämlich `Cluster`. Zunächst kurz zur Entstehungsgeschichte: Vor ca. zwei Jahren, standen ich und mein Freund Ulrich Sigmund vor der Frage, in welcher Sprache wir programmieren sollten, da unsere Begeisterung über Amiga-Basic nicht gerade überwältigend war. 68K-Assembler erwies sich zwar als schnell und mächtig, doch dem Amiga-Betriebssystem nicht gewachsen. `C` kam für uns aufgrund der kryptischen Schreibweise und der schwachen Typüberprüfung nicht in Frage (nicht umsonst bezeichnet Prof. Wirth `C` als verzuckerten Assembler). Schließlich entschieden wir uns für Modula, da diese Sprache unseren Wünschen zu entsprechen schien. Doch schon bald waren wir mit dem Editor nicht mehr zufrieden (mit der Folge,daß wir den StonEd schrieben) und außerdem wünschten wir uns eine integriertere Entwicklungsumgebung. Hinzu kam, daß C-Compiler wesentlich schnelleren Code produzieren und wir die Möglichkeit zur maschinennäheren Programmierung vermissten. Mit dieser Voraussetzung gingen wir daran unsere eigene Programmiersprache zu entwickeln, das Ergebnis ist Cluster. Cluster ist eine eng an Modula angelehnte strukturierte Programmiersprache, übersetzen gegenüber Modula folgende Abweichungen aufweist (ModulaII-Programme können dennoch übersetzt werden): - Funktionen können komplexe Typen als Rückgabewerte haben. -Funktionen können sogar offene Typen wie z.B. Strings zurückgeben, auch als Parameter an VAR-Parameter. z.B. Str3:=Concat(Seg(str1,4,5),Seg(str2,6,7)); -Strings sind nicht als ARRAY OF CHAR mit einem Null-Byte am Ende definiert, sondern als RECORDs mit der Länge als Word an erster Position: STRING = RECORD len : INTEGER; data : ARRAY OF [0..MAX] CHAR END Diese Definition bietet viele Vorteile, da man nicht immer nach dem NullByte suchen muß, damit sind besonders schnelle Stringoperationen möglich (wortweiser Stringvergleich). -CASE wurde eliminiert und zu einem Unterfall von IF (IF KEY) gemacht. Damit wurde auch der OF-Operator für alle Bedingungen zugänglich (z.B. IN IF,WHILE,REPEAT). -Die IF THEN END wurde um ein AND_IF erweitert, das einen eigenen ELSE-Fall haben kann. -Ebenfalls wurde die WHILE Struktur um ein OR_WHILE sowie ein ELSE erweitert, womit die Verwendung von LOOP so gut wie überflüssig wird. Außerdem kann man eine WHILE-Bedingung durch das Schlüsselwort KEY wie ein CASE aufbauen, wobei der ELSE-Fall den Aussprung aus der Schleife bewirkt. -Module können nicht nur einen BEGIN-Teil sondern auch einen CLOSE-Teil besitzen, welcher am Programmende, sowie bei einem Absturz aufgerufen wird, somit entfallen die lästigen TermProceduren um z.B. ein File oder ein Fenster am Ende zu schließen. -Ein Punkt, der vor allem C-Programmierer bisher von Modula abgehalten hat, nämlich die ewig Langen Importlisten am Programmanfang, wurde von uns entschärft, indem sich mehrere Bezeichner in einem Definitions-Modul zu einer Importgruppe zusammenfassen lassen, dabei kann eine Gruppe auch Bezeichner aus fremden Modulen sowie andere Gruppen enthalten. Importiert man von einem anderen Modul eine Gruppe, importiert man damit auch alle darin enthaltenen Bezeichner. Außerdem kann man auch innerhalb Prozeduren Module importieren. Bei unqualifiziertem Import kann der Name des Moduls geändert werden, so daß das stereotype wiederholen eines langen Modulnamens entfällt. -Es besteht die Möglichkeit erweiterbare Records zu definieren. Wobei Erweiterungen zu ihren Vätern zuweisungskompatibel bleiben. Im Gegensatz zu Oberon funktioniert dies auch bei System-Strukturen, so ist Node ein Nachfolger von MinNode, Message von Node, IORequest von Message,... -Konstanten von komplexen Typen sind möglich, so kann man beim öffnen einer Screen, direkt eine Konstante vom Typ NewScreen an OpenScreen übergeben. -Es können offene Arrays als Typen deklariert werden. Von diesen Typen, können Konstanten gebildet, Zeiger darauf definiert, Parameter von Prozeduren deklariert, oder ein anderer Typ mit fester Elementanzahl definiert werden, wobei dieser Typ zu dem offenen Typen kompatibel ist. -WITH kann nicht nur auf Records angewendet werden, sondern auch für Pointer und Arrays. "With`t" man eine Variable einfachen Typs, wird diese im Bereich der WITH-Anweisung in ein Prozessorregister gelegt, was natürlich einen enormen Geschwindigkeitsgewinn zur Folge hat. -Variablen und Prozedur-Parameter können als Registervariablen definiert werden. -Die Conditioncodes des Prozessors können direkt abgefragt werden z.B: REPEAT DEC(i) UNTIL = ; Diese Schleife wird solange durchlaufen bis das ZeroFlag gesetzt wird. -Liegt eine Pointer-Variable in einem Register, kann man direkt den Postincrement- bzw. den Predecrement-Mode des MC-68000 verwenden: p1+^:=p2+^. -Laufzeitfehler werden mit Quelltextangabe gemeldet und verursachen keine Abstürze. Nach dieser Aufzählung von Abweichungen, die Sie gewiß auch als Vorteile Anerkennen werden noch ein paar Worte zu Cluster allgemein: -Durch Ausnutzung der obengenannten maschinennahen Elementen, sowie durch verwendung spezieller 68000-Befehle (z.B. MOVEM,CMPM), durch Peephole-Optimizing und durch optimierung auf Short-Branches, erreicht der Compiler auf einem normalen Amiga ,ohne Turbokarte, mit FastMem, über 1600 Dhrystones/s. -Cluster kann reentrante Programme im kleinen Datenmodell sowie Libraries und Devices (ab V1.1) erzeugen. -Der Compiler ist ein schneller Single-Pass-Compiler (ca 6000 Zeilen pro Minute. -Der Linker linkt selektiv, d.h. nur Objekte, die benutzt werden, werden eingelinkt. Somit erhält man trotz großer Module sehr kompakte Programme. -Cluster besteht aus einer Integrierten Entwicklungsumgebung, diese besteht aus einem schnellen komfortablen und schönen Editor (Macros, mehrere Textfenster, Blockfunktionen, Iconify, eigene Tastaturbelegung, Tabindent), dem Compiler, einem Make, sowie einem Loader. Alle Funktionen können direkt aus dem Editor aufgerufen werden, man kann also aus dem Editor Programme compilieren, maken, linken, oder starten. -Cluster bietet die Möglichkeit der bedingten Compilierung, d.h. Sie können durch Flags festelegen, welche Programmteile übersetzt werden sollen. Zum Beispiel wenn Sie ein Programm in einer Englischen und einer Deutschen Verion herstellen wollen, müssen Sie nur ein Flag umsetzen und neu Compilieren. -Cluster ist vollständig Kickstart 2.0 kompatibel und unterstützt die neuen Auflösungen. -Mit Cluster wird ausgeliefert : ein ca 600 Seiten starkes deutsches Handbuch, drei Disketten mit allen Schnittstellen zu den Systemlibraries und Devices, eine umfangreiche Sammlung von Standardmodulen (letztere mit Quelltexten), der Entwicklungsumgebung, zahlreiche Demos, sowie einer PD- DemoDiskette. -Wir bieten einen HotLine-Service einmal die Woche, mit einem unserer Programmierer am Telephon. Anbei liegt eine Demo-Version, die Ihr beliebig weiterkopieren könnt. Ihr könnt Cluster beziehen bei Aparisi SoftWare SchusterStraße 34 7800 Freiburg zum Preis von 398 DM (Schülerpreis 298 DM). Bei Sammelbestellungen sind auch Sonderpreise oder Sonderregelungen möglich. Übrigens damit ihr seht, wie Leistungsfähig Cluster ist, hier noch der Hinweis, daß das Betriebssystem der Visiona- Graphikkarte, die von X-Pert vertrieben wird, komplett in Cluster geschrieben wurde, und mit jeder Visiona ein Clusterpacket mitausgeliefert wird. Solltet ihr Fragen bezüglich der Sprache haben, dann ruft doch Montag Abends zur HotLinezeit bei mir an Tel.: 0761/53675. Habt ihr Fragen zur Bestellung oder wegen Sonderpreisen dann ruft bei Aparisi-Software an Tel.: 0761/283127 Solltet Ihr euch wundern, daß Cluster in der Amiga nicht auffallend gut gegenüber Oberon abschnitt, dann liegt das daran, daß das Amiga-Magazin uns aus irgendeinem Grund zu sabotieren scheint. So wurde z.B. unser Artikel gegen den Willen des Autors willkürlich zusammengestrichen. Viel Spaß mit den Demos, und vielleicht helft Ihr uns diese Sprache auf dem Amiga zu etablieren. Thomas Pfrengle (StoneWare) P.S.:Ein Hinweis für alle Spielernaturen unter euch, im Editor integriert, klickt einfach auf ein nicht belegtes Feld, gesteuert wird es über den Nummernblock. Cluster ist ein Optimierender Singlepasscompiler in einer total integrierten Entwicklungsumgebung. Auf dieser Diskette finden Sie die PD-Version des Compilers. Sie ist nicht in der Lage Programme zu linken, oder Texte mit mehr als 20Kbytes zu verarbeiten. Die Vollständige Version inklusive eines 660 Seiten starken Handbuchs, den Quelltexten aller Module sowie CLI-Versionen von Compiler, Linker und Make erhalten Sie für 398.- bei Aparisi-Software Zähringer Str. 349 DW-7800 Freiburg Tel. 0761/551920 Auf dieser PD-Diskette befinden sich folgende Dateien bzw. Verzeichnisse: PD-Text Eine gepackte Kurzanleitung zur Programmiersprche Cluster Editor.zoo Die gezoote Version der Entwicklungsumgebung, sie hätte sonst nicht mehr auf die Diskette gepaßt. Entpacken mit "zoo -extract Editor" zoo Das Programm zum entpacken. KeyMap Die Tatstaturtabelle des Editors, sie muß im Verzeichnis "Cluster:" liegen. Modules Eine geringe Zahl Schnittstellenmodule, über die mit dem System komunziert werden kann. Einige dieser Module sind auch als Definitionsmodule beigegeben. Sowohl Texte als auch die Objekt-Files liegen in gepackter (zoo) Form bei. Work Einige Demoprogramme, zum Teil bereits gelinkt. Die Quelltexte liegen im Verzeichnis "TXT" Space Eine Demonstration der Geschwindigkeit unsers Compilers. Der Anfang eines Vollflächengrafikspiels, vollstänig in Clustergeschrieben. fals Sie es auf eine andere Diskette kopieren wollen, müssen Sie das gesammte Verzeichnis in einem Verzeichnis Space auf einer Diskette Cluster:, oder in einem Verzeichnis, das als Cluster assigned ist, kopieren , da das Programm Space Soundfiles im Verzeichnis "Cluster:Space" sucht. Um die Demo-Version zu installieren, benötigen Sie mindestens zwei Disketten. Auf der einen richten Sie sich am besten eine möglichst kleine Bootdisk ein und kopieren den entpackten Editor auf diese, wenn Sie den Editor von der Workbench starten wollen, sollten Sie auch das Originalicon mitkopieren. Die zweite Disk muß dann den Namen `Cluster` erhalten. Auf ihr richten Sie ein Verzeichnis Modules ein, und in diesem zwei Verzeichnisse `TXT` und `OBJ`. In jedes kopieren Sie die entsprechenden entpackten Files, die sich in Modules befinden: txt.zoo/obj.zoo. In Cluster: kopieren Sie nun das File `Keymap` sowie das Directory Work inklusive Inhalt. Nachdem Sie von der BootDiskette gebootet haben können Sie den Editor aufrufen. Wollen Sie Cluster auf einer Festplatte instalieren, müssen Sie dort ein Verzeichnis einrichten, das Sie als Cluster: assignen. In diesem müssen Sie dann auch das Modules-Verzeichnis wie auf der Diskette entpacken. Um ein File zu entpacken, begibt man sich in das Verzeichnis, in dem das abgellegt werden soll. dann geben Sie ein : zoo -extract Filename Sämtliche Teile des Entwicklungssystems (Editor, Compiler und Loader) sind in den Editor integriert. Ein Programm kann aus dem Editor heraus compiliert, gelinkt (nicht mit PD-Version) oder auch sofort gestartet werden. Dies ermöglicht geringe Turn-Around Zeiten. Der Editor kann von einem beliebigen Verzeichnis aus gestartet werden. Er erwartet folgende Dateien im Verzeichniss Cluster: "Prefs", "Deutsch" und "Paths". Die Datei "Deutsch" muß immer vorhanden sein, die anderen werden bei Bedarf erzeugt. Beim Start des Editors können mehrere Texte als Parameter mitgegeben werden. Diese werden sofort in getrennte Fenster geladen. Wird kein Text angegeben, öffnet der Editor ein leeres Textfenster. Die Textfenster können in ihrer Größe verändert werden, indem ihre Titelzeile mit der Maus (oder Ctrl+Shift+CsrUp/Down) verschoben wird. Wird die oberste Titelzeile heruntergezogen, wird ein leerer Textpuffer geöffnet. Der Name eines Textes kann geändert werden, indem mit dem rechten Mausknopf in das Namensfeld geklickt wird. Weiter Änderungen können über die Gadgets in den Titelzeilen durchgeführt werden. Am Bildschirmboden befindet sich ein Menue, es kann über die Lasche mit der Aufschrift "CLUSTER" bewegt werden. Die Felder des Menues entsprechen den Funktionstasten, von links nach rechts "F1", "F2"... und von oben nach unten: "ohne Qualifizerung", "mit Shift", "mit Alt", "mit Control" und "mit Amiga". Das Drücken eines Menueknopfs entspricht dem Tastendruck der zugehörigen Funktionstaste. Ein Block kann entweder über Menue oder mit der rechten Maustaste aufgezogen werden. Weiter Editiertasten: - CsrLeft, CsrRight, CsrUp und CsrDown : wie gewohnt. - Zusammen mit Alt, Wort oder Seitenweise - Mit Shift an Seiten-, Zeilen- oder Textanfang/ende - Mit Control+CsrUp/Down kann der Textpuffer gewechselt werden. - Control+CsrLeft/Right bewegt einen Block zeichenweise rechts oder links. - Delete und Backspace wie gewohnt. - Shift+Delete löscht die Zeile in einem Stringgadget - Alt+Delete zwischen Insert und Overwrite unmschalten - Tab, Shift+Tab Tabulatoren rechst, links anspringen - Alt+Tab Tabmodus wechseln (TabIndent) - Ctrl+Tab Tabbreite umschalten - Ctrl+Normale Taste, aufnehmen eines Makros, bis wieder Ctrl+.. - Amiga+Normale Taste, abspielen des Makros Die Requester können wahlweise mit der Maus oder den Cursortasten und Return benutzt werden. Beispiel: Ausführen eines Programms, falls nicht gelinkt. - Editor laden - F6 drücken, oder "LOAD" anklicken - Im Filerequester im Feld "PATH" "Cluster:Work/TXT" eingeben - Mit den Cursortasten in das freie Feld oben links - Gewünschte Datei auswählen, der sichtbare Bereich kann über das Proportionalgadget verschoben werden (auch mit Tasten) - Auf dem Gewünschten File doppelklicken (oder zweimal RETURN) Ist die Datei erfolgreich geladen: - Alt+F8 drücken Das Programm wird compiliert, und ausgeführt. Sollte folgende Fehlermeldung auftreten "????.obj konnte nicht geöffnet werden": - F8 Drücken. - Nochmal Alt+F8 drücken. Erscheint wieder eine Fehlermeldung, müssen Sie sich selbst helfen. Diese PD-Version darf und soll beliebig weiterkopiert werden. Demos im Direktory Work: ADump Dump eines Files, in dem nur die darstellbaren ASCII-Zeichen dargestellt werden. Aufruf "ADump Namen[,Namen...]". WC Zählt Zeilen, Wörter und Buchstaben eines Textfiles. Bildet außerdem eine Prüfsumme, anhand der festgestellt werden kann, ob ein Text geändert worden ist. Aufruf "WC Namen[,Namen...]". IFF GraberSpeichert den Bildschirm im Vordergrund als IFF-Datei ab. Aufruf "IFFGraber Namen". IFFLoader Lädt und zeigt IFF-Dateien. Aufruf: "IFFLoader [Namen[,Namen]]". Werden keine Parameter angegeben, können diese nach Eingabeaufforderung eingegeben werden. Puzzle Ein kleines Spielchen, gespielt mit der Maus, beendet durch eine beliebige Taste Farn, Fraktalus, Feigenbaum Einige Fraktale, die ohne Parameter ablaufen. Fraktalus erzeugt bei jedem Aufruf eine andere zufällige Landschaft. MandelMountain Berechnet und zeichnet ein dreidimensionales Bild einer Mandelbrotmenge. Dazu muß eine Reihe Parameter eingegeben werden, die meist selbsterklärt sind. Am besten Sie probieren einige aus. TurtleTest Zeichnet eine Kochsche Schneeflocke AreaDemo Läßt vier Würfel auf dem Bildschirm rotieren. Dazu wurden die Area-Prozeduren aus Graphics verwendet. Folgende Personen haben an diesem Projekt mitgearbeitet bzw. unterstützend oder hindernt mitgearbeitet. Ulrich Sigmund Autor von Compiler Editor etc, sowie einiger Module, sowie einige Handbuchkapitel Thomas Pfrengle Koautor beim Compiler, Autor der meisten Module und Kapitel. Jean-Claude Aparisi Manager, und Vertrieb. Setzte das Handbuch und lieferte Spagetthi und Pizza. Träger unserer Krawatte. Norbert Scherer Autor zweier Handbuchkapitel und einiger Demos Tom Richter Korrigierte das Handbuch auf Rechtschreibung und Verständlichkeit Michael Schwarz Stellte das DTP-System für das Handbuch, und beriet in geschäftlichen Dingen. Liegt uns dauernd in den Ohren mit "Warum schreibt ihr den Compiler nicht für Mamas /36 um, dann könnt ihr 50000.- pro Stück nehmen." Steffen Herr Schrieb bzw. schreibt gerade ein Modul für Sounds. Andreas Schmidt Sagte wie immer "Alles Scheiße", wollte dann aber doch einen Compiler. (Dank des integrierten Tetris (Shift+F10). Dieter Lenau und Paul Rottler Für ihre Nachsicht Roland Schauffler "Schreib selle´ Kompailer doch für de´ Arschi um, damit kansch irre Kohle scheffle !!!" Commodore Amiga Durch Produktion dieses fantastischen Rechners Guru Half uns beim Meditieren über mannigfaltige Fehlleistungen von uns und des Kickstarts. Meinem Prof Hat bis heute keine Anhnung von Compilern. Die Autoren von "C" Gaben ein schlechtes Beispiel !!! Modula2, Ada und "C" Wichtige Anregungen