von Harald Schönfeld Eine Umfrage unter 8-Bit-Usern hat er- geben, daß sich viele unter "QUICK" noch immer nichts vorstellen können. Deshalb möchte ich hier zunächst noch einmal darauf eingehen, was QUICK eigentlich ist. Die Programmiersprache QUICK, die vor ca. einem Jahr beim Verlag Werner Rätz erschien und von Andreas Binner und mir entwickelt wurde, ist eine Compiler- sprache, die Programme liefert, die ca. 10 bis 60 mal schneller als BASIC- Programme sind. Man schreibt zunächst mit Hilfe eines Editors einen Quell- text, der dann vom Compiler in ein lauffähiges Maschinenprogramm umgewan- delt wird. Mit QUICK ist ein komfortab- les Programmieren möglich und trotzdem ist man, wenn man will, ganz nahe an allen Hardwarefähigkeiten (VBI, DLI, ...) der XLs dran. Spezielle Befehle wie Mausabfrage, Grafikteile kopieren, digitalisierten Sound spielen u.v.m. eröffnen auch dem weniger geübten Pro- grammierer Möglichkeiten wie sonst nur Assembler. Es ist schon ein Kreuz mit diesen Editoren. Da freut man sich, daß man endlich den CSM-Editor hat und schon klappt's wieder nicht: Letztes Mal gingen die ECKIGEN KLAMMERN zwar nicht verloren, dafür wurden sie durch RUNDE ersetzt. Deshalb ganz pauschal: -ECKIGE KLAMMERN muß man verwenden wenn Klammern alleine in einer Zeile stehen -RUNDE KLAMMERN stehen bei Funktions- aufrufen und immer mit anderen Zeichen in einer Zeile zusammen. Und auch der Unterstrich (Shift-Minus) erschien als Minus: Eine Variable darf natürlich nicht "SEK-50" heißen, richtig ist "SEK"UNTERSTRICH"50". (Sorry ! Ein Fehler des Konvertierungs- programmes. Anm. d. Red.) Nachdem der letzte Teil für viele sich- er ein Sprung ins kalte Wasser war, der gleich mal zeigen sollte was in QUICK u.a. möglich ist, beginnt mit dem heu- tigen Teil eine systematische Einführ- ung in QUICK. Ein Blick ins Handbuch (das hat ja wohl jeder der mit QUICK arbeitet ?!) ist zwar auch recht hilf- reich, aber dort konnten wir uns (noch) nicht mit allen Dingen beschäftigen (denn auch die Entwickler einer Sprache werden manchmal vom eigenen Compiler verblüfft), so daß hier einige Punkte ausführlicher behandelt werden. I Der Aufbau eines QUICK-Programms Jedes lauffähige QUICK-Programm muß den folgenden Aufbau besitzen: A) Include-Block B) Variablen-Deklaration-Block C) Hauptprogramm-Block D) Unterprogramm-Blöcke A,B und D dürfen dabei weggelassen werden. A) Include-Block Dieser Block dient dazu, dem Compiler mitzuteilen, welche zusätzlichen Quell- textfiles zum Hauptprogrammtext dazu geladen und compiliert werden sollen. Diese Files enthalten Unterprogramme (in ihrer Gesamtheit Bibliotheken (engl. Libraries) genannt), die aus lauter D) Blöcken aufgebaut sind, keine globalen Variablen benutzen dürfen und auch keine weiteren INCLUDE-Blöcke enthalten. Solche Textfiles haben vereinbarungs- gemäß den Extender ".LIB". Auf der Systemdisk befinden sich die folgenden 3 Standard-Libraries: -GRAPH.LIB mit Grafikroutinen -MATH.LIB zur Fließkommaeinbindung -NUMERIC.LIB mit math. Funktionen Im QUICKmagazin V und VI (erschienen bei PPP/Verlag W.Rätz) sind inzwischen 2 weitere Standardlibraries erschienen: -STR.LIB zur Stringverwaltung -TABLET.LIB für Maltafelabfrage Außerdem gibt es weitere Libraries von Usern auf den QUICKmagazinen. Der Include-Befehl ermöglicht es aber auch, fertige Programmteile nachzula- den, die nur aus dem Programm ausgela- gert wurden, um den Programmtext, der vom Editor geladen und verarbeitet werden muß, zu kürzen und somit Zeit zu sparen. Solche Include-Files, die also nicht allgemein, sondern nur im Zusam- menhang mit einem anderen Programmtext zu gebrauchen sind (z.B. weil globale Variablen angesprochen werden, die im anderen Text deklariert werden) sollen den Extender ".INC" tragen, um sie eindeutig von allgemein verwendbaren Libraries zu unterscheiden. Nach so viel grundlegender Theorie, folgen nun 2 Beispiele, die den Einsatz von Libraries zeigen: Das erste Programm zeigt, wie man eine bereits vorhandene Library einsetzt. Wir benutzen die GRAPH.LIB um einen Grafikbildschirm zu öffnen und einen Kreis zu zeichnen. Dazu verwenden wir die Routinen GRAPHICS(NR) und CIRCLE(X,Y,RADIUS), die beide aus der Library stammen. Der Aufruf dieser Rou- tinen wird wie immer mit "." gekenn- zeichnet: QUICK Sourcetext D1:GR.QIK INCLUDE ( >E.K. D1:GRAPH.LIB ) >E.K. MAIN COLOR(1) .GRAPHICS(15) .CIRCLE(80,96,40) ENDMAIN Es ist nicht nötig zu wissen wie die Library diese Befehle ausführt, sondern man muß nur deren Parameter kennen. Die weiteren Funktionen dieser Library sind im Handbuch beschrieben. Nun noch ein kurzes Beispiel, das zeigt, wie man selbst eine Library herstellt. Wir möchten in einem Programm den Text "Hello world" 5 mal auf den Bildschirm schreiben. In so einem Fall kann man, wenn man unbedingt will, eine Library dazu verwenden (ein einfaches Unterprogramm tut's aber auch). Zuerst zum Hauptprogramm: (Anm. d. Red.: Wenn hinter Klammern in der Zeile ">E.K." steht, so muß diese Klammer aus den eckigen und nicht den runden Klammern gebildet werden) QUICK Sourcetext D1:HW.QIK INCLUDE ( >E.K. D1:HW.LIB ) >E.K. MAIN .HWP .HWP .HWP .HWP .HWP ENDPROC Unsere Library mit dem Namen "HW.LIB" muß also eine Routine mit dem Namen HWP enthalten, die ein mal den Text printet: QUICK Sourcetext D1:HW.LIB PROC HWP BEGIN ?("Hello World") ENDPROC Dieser Quelltext muß also vor dem Com- pilieren ebenfalls geschrieben werden, damit er beim Compilieren nachgeladen werden kann. Die Programme befinden sich auf der Disk, jedoch ohne die GRAPH.LIB. Es ist klar, daß dieses Beispiel eher sinnlos ist (mit einer Schleife ginge es einfacher, aber so weit sind wir noch nicht), jedoch verdeutlicht es doch das Prinzip. Grundsätzlich geht es darum, sich mit Hilfe dieser Libraries sinnvolle "Werk- zeuge" zu schaffen, auf die man immer wieder zurückgreifen kann. Denn es ist sehr praktisch, wenn man in seinem Pro- gramm Aufgaben an andere, bereits ausgetestete und sicher funktionieren- de, Programmteile abgeben kann. Dadurch muß man sich nicht jedes mal mit den gleichen "Kleinigkeiten" beschäftigen. Mit den Worten eines Informatik-Profis: Je mehr man vergessen kann, um so weiter kommt man voran... Im nächsten Teil beschäftigen wir uns dann mit den Variablen in QUICK.