|
|
|
|
|
Programme mit grafischer Benutzeroberfläche
Programme ohne grafische BenutzeroberflächeBasic-Befehle
Syntaxerklärung
Zu den Beispielen
Weitere ErklärungenMathematische Operatoren
Priorität der Operatoren
Vergleichsoperatoren
Pointer und Adressoperatoren
In Omikron Basic haben Sie grundsätzlich zwei Möglichkeiten, Programme zu schreiben:
Programme mit grafischer Benutzeroberfläche
Unter einer grafischen Benutzeroberfläche versteht man die Verwendung von
grafischen Objekten wie Menüs, Dialogboxen und Fenstern, über die das Programm
mit dem Anwender kommuniziert. Praktisch alle kommerziellen Programme, die eine Benutzerschnittstelle
benötigen, verfügen heutzutage über eine solche grafische Benutzeroberfläche.
In Omikron Basic programmieren Sie grafische Benutzeroberflächen für Ihre
eigenen Programme am besten mit der EasyGem Library, die zusammen mit Omikron Basic
ausgeliefert wird. Theoretisch ist es auch möglich, die entsprechenden MacOS
Toolboxfunktionen mit dem MAC_OS Befehl direkt aufzurufen. Dies ist jedoch wesentlich
aufwendiger als die Verwendung der EasyGem Library und nur in speziellen Ausnahmefällen
sinnvoll.
Bei größeren Projekten oder wenn Ihre Programme auch von anderen Personen
benutzt werden sollen, empfiehlt es sich, eine grafische Benutzeroberfläche
zu installieren, da die Bedienung des Programms dadurch wesentlich vereinfacht wird.
Programme ohne grafische
Benutzeroberfläche
Im Unterschied zu vielen anderen modernen BASIC Implementationen ist es in Omikron
Basic auch möglich, kleine, kompakte Programme ohne grafische Benutzeroberfläche
zu schreiben. Für die Eingaben und Ausgaben werden dabei Befehle wie INPUT und
PRINT verwendet. Solche Programme sind besonders geeignet, um beim Erlernen von Omikron
Basic die im nächsten Kapitel besprochenen Befehl mal schnell auszuprobieren
oder wenn man eben einfach nur ein kleines Programm schreiben möchte, das eine
spezielle Aufgabe erledigt, für die gerade keine Standardsoftware zur Verfügung
steht.
Damit Ihre Programme ohne grafische Benutzeroberfläche trotzdem noch sauber
in der Multitasking-Umgebung des MacOS laufen, sollten Sie dafür unbedingt die
Omikron Basic Ausgabefenster verwenden, die wir jetzt besprechen wollen.
Die
Omikron Basic Ausgabefenster
Omikron Basic stellt auf Wunsch sogenannte Ausgabefenster zur Verfügung, in welche alle Ausgaben umgeleitet werden, die sonst direkt auf dem Bildschirm landen würden. Die Verwaltung dieser Fenster wird automatisch vom Omikron Basic übernommen. Dadurch laufen auch Programme, die keine Fensterverwaltung haben und zur Ein- und Ausgabe PRINT und INPUT benutzen, sauber in einer Multitasking-Umgebung. Die Omikron Basic Ausgabefenster können Sie mit dem Befehl COMPILER "OUTPUT_WINDOW X*Y" einschalten, wobei für X (Breite) und Y (Höhe) die Werte in Pixel eingesetzt werden müssen, die das erste Fenster maximal annehmen soll. Der Inhalt der Ausgabefenster wird im Application-Heap des Programms gepuffert, es muß also je nach Größe und Farbtiefe genügend Speicher vorhanden sein. Gegebenenfalls müssen Sie im Finder oder mit COMPILER "PRE_SIZE X" mehr Speicher für Ihr Programm reservieren.
Wenn die Ausgabefenster aktiv sind, wird ausserdem eine Menüzeile eingerichtet,
die Ihnen den Zugriff auf das Apfel-Menü an der linken Seite sowie das Help-
und Programm-Menü an der rechten Seite ermöglicht. Damit das Omikron Basic
auch die Eventmeldungen erhält, die die Ausgabefenster oder die Menüleiste
betreffen, müssen Sie mit COMPILER "EVENT"
an geeigneter Stelle dafür sorgen, dass ein WaitNextEvent-Aufruf in Ihr Programm
hineincompiliert wird. Siehe auch das Demoprogramm 'Mandelbrot.BAS'.
Wenn sich Ihr Programm in einer INPUT- oder INPUT$-Anweisung befindet, so werden
automatisch immer WaitNextEvent-Aufrufe an das MacOS abgesetzt, da ja ständig
auf Tastendrücke geachtet werden muß. Das Gleiche gilt für den FORM_ALERT Befehl.
Die Ausgabefenster verfügen auch über Scrollbalken, so dass sie auch
größer als der physikalische Bildschirm angelegt werden können.
Bedenken Sie aber bitte, daß der Fensterinhalt im Application-Heap gepuffert
werden muß. Ein Fenster mit 1280 x 960 Bildpunkten benötigt z.B. bei 256
Farben 1.2 MB Speicher.
Die Schrittweite, mit der der Fensterinhalt weiterscrollt, wenn Sie die Pfeile
an den Schiebebalken anklicken, kann mit der Prozedur Set_Scroll_Parameter
aus der ExtensionLibrary eingestellt werden.
Hinweis: Mit dem Befehl SCREEN können Sie weitere Omikron Basic Ausgabefenster öffnen.
Das
Menü zu den Omikron Basic Ausgabefenstern
Wenn die Omikron Basic Ausgabefenster eingeschaltet sind, so wird zusätzlich eine Menüleiste eingerichtet. Über das Menü 'Datei' können Sie nun einige Grundfunktionen aufrufen
Öffnen ...
Das oberste Omikron Basic Ausgabefenster wird mit einer Datei geladen, die zuvor
mit 'Speichern als ...' eingerichtet wurde. Wenn das zu ladende Bild andere Abmessungen
oder eine andere Farbtiefe hat, wird es automatisch an das Omikron Basic Ausgabefenster
angepasst. Die Datei muß im 'PICT'-Format vorliegen. Sie kann daher auch mit
anderen Programmen erstellt worden sein.
Speichern als ...
Der Inhalt des Puffers für das oberste Omikron Basic Ausgabefenster wird im
'PICT'-Format gespeichert. Dadurch ist es möglich, das gespeicherte Bild in
andere Programme zu laden und dort weiterzubearbeiten.
Drucker einstellen ...
Es wird die Layout-Dialogbox aufgerufen, in der Sie Einstellungen für den
Drucker vornehmen können.
Drucken ...
Es wird die eigentliche Drucken-Dialogbox aufgerufen. Hier können Sie zunächst
weitere Einstellungen vornehmen. Wenn Sie dann 'OK' anklicken, wird der Puffer für
das Omikron Basic Ausgabefenster gedruckt.
Beenden
Das Programm wird beendet. Die gleiche Wirkung hat ein Anklicken des Schließfelds
im Omikron Basic Ausgabefenster, wenn es sich um das letzte Fenster handelt. Vorher
erfolgt allerdings noch eine Sicherheitsabfrage.
Der Omikron Basic Editor akzeptiert eine ganze Reihe von BASIC-Befehlen, die Überbleibsel
älterer Versionen sind und dort unter anderem zur Steuerung des alten Editors
und des alten Interpreters dienten. Diese Funktionen werden jetzt entweder vom Editor
selbst ausgeführt (z.B. LIBRARY, DEFINT, RENUM usw.) oder sie haben wegen der
neuen Benutzeroberfläche überhaupt keine sinnvolle Bedeutung. Bei einigen
handelt es sich auch um typische Interpreterbefehle, die darum vom Compiler schon
immer ignoriert wurden. Andere wiederum benutzten spezielle Eigenschaften der ATARI-Hardware
oder des ATARI-Betriebssystems und spielen deswegen auf dem MAC keine Rolle.
Um die Kompatibilitätsprobleme mit alten Programm gering zu halten (meist reicht
es schon, wenn die besagten Befehle einfach ignoriet werden), wurde Omikron Basic
so programmiert, daß der Editor auch die ungültigen Befehle versteht,
diese vom Compiler aber übersprungen werden.
In dem Kapitel 'Der Befehlssatz' sind die bedeutungslosen Befehle in grauer Schrift
dargestellt. Diese Schlüsselwörter dürfen Sie für eigene Zwecke
nicht verwenden.
Angaben in spitzen Klammern <...> sind durch entsprechende Ausdrücke
zu ersetzen.
Angaben in eckigen Klammern [...] sind, je nach gewünschter Anwendung, wegzulassende
Ergänzungen.
Sind um einen Ausdruck zwei eckige Klammern [[...]] gesetzt, so kann, je nach Anwendung,
dieser Ausdruck weggelassen werden, einmal oder mehrmals erscheinen.
Angaben in geschweiften Klammern {...|...} stellen eine Auswahl dar, aus der eine
der durch "|" getrennten Alternativen auszuwählen ist.
Zu vielen Befehlen sind kurze Beispielprogramme in einem hellgelb hinterlegtem
Feld angegeben. Die meisten dieser Programme können direkt abgetippt oder einfacher
aus dem Online-Handbuch ausgeschnitten und in ein Programm-Fenster wieder eingesetzt
werden. Um ein compilierbares Programm zu erhalten, müssen allerdings in vielen
Fällen noch einige Compiler Steuerwörter gesetzt werden. (Siehe das Programm
Mandelbrot.BAS im Ordner DEMO). Bei einigen Programmen werden auch Funktionen aus
der Extension Library verwendet. In diesen Fällen muß die Library vom
Editor aus mit 'Library zuladen ...' vorher in das Programm integriert werden.
Bildschirmergebnisse stehen darunter in einem etwas dunklerem Gelb, sofern es sich
nicht um Grafiken etc. handelt. In diesen Fällen wird das Verhalten des Programms
verbal beschrieben.
<num.Ausdruck>
Ein numerischer Ausdruck ist ein beliebiger Term, der ein numerisches Ergebnis liefert.
Dabei spielt der Typ (ganzzahlig, einfach- oder doppeltgenau) keine Rolle. Der Compiler
führt bei der Übersetzung eine automatische Typconvertierung durch. Wenn
jedoch z.B. von einem Befehl immer nur ein Integertyp erwartet wird, sollten Sie
darauf achten, dass auch immer nur Integer übergeben werden. Dadurch wird das
compilierte Programm kürzer und schneller.
<String-Ausdruck>
Ein Ausdruck vom Typ String.
<Dateiname>
Ein Dateiname ist ein String, der einen FileSpezificationRecord
enthält und folgenden Aufbau hat:
| 2 Byte VolumeReferenceNumber oder 0, wenn
diese nicht bekannt ist. 4 Byte DirectoryIdentificationNumber oder 0, wenn diese nicht bekannt ist. 1 Byte Länge des nachfolgenden Dateinamens,Dateipfades oder Teilpfades. 1-63 Byte Dateiname, Dateipfad oder Teilpfad. |
<num.Variable>
Numerische Variable gleich welchen Typs. In Einzelfällen sind möglicherweise
nur einfache Variablen zugelassen und keine Felder.
<Rückgabe-Variable>
Liefert den Ergebniswert eines Befehls oder einer Funktion zurück. Z.B. bei
INPUT USING Art der Abbruchbedingung.
<Parameter>
Die an eine Funktion oder Prozedur übergebenen Werte. Bei Aufrufen mit CALL
kann durch ein vorangestelltes "L" eine Übergabe als Long-Integer
bewirkt werden.
<Bitnummer>
Vorzeichenlose Zahl zwischen 0 und 31. Die Wertigkeit des entsprechenden Bits ist
2^<Bitnummer>
<Integer-Variable>
Ganzzahlige Variable (Word=16Bit oder Long=32Bit), auch Feldvariablen sind zulässig.
<Speicheradresse>
32 Bit breite Long-Integer-Zahl, die eine bestimmte Speicherzelle benennt.
<Marke>
Eine Marke bezeichnet eine bestimmte Stelle eines Programms und kann alle für
Variablennamen zugelassenen Zeichen enthalten. Eine Marke kann sein:
1. Eine bestimmte Zeile:
Wenn mit Zeilennummern gearbeitet wird, kann man durch Nennung der Nummer eine bestimmte
Zeile erreichen. Die Zeilennummer kann auch berechnet werden, d.h. als Marke ist
auch ein beliebiger numerischer Ausdruck zugelassen. Wenn der Ausdruck jedoch aus
einer einzigen numerischen Variablen besteht, so ist diese in Klammern zu setzen,
um nicht mit einem Label verwechselt zu werden.
2. Ein bestimmtes Programm-Label:
An jeder Stelle des Programms kann mit "-<Bezeichner>" ein Label
vereinbart werden. Der Bezeichner darf alle für Variablennamen zugelassenen
Zeichen enthalten (alle Buchstaben, Ziffern, "_" und die Zeichen von 128
bis 255). Will man sich auf ein solches Label beziehen, wird einfach der Bezeichner
genannt, das vorangestellte Minuszeichen unterbleibt. Man kann stattdessen das Label
auch über einen String-Ausdruck benennen. Er muß den Bezeichner des Labels
enthalten und sollte nicht länger als acht Zeichen sein, da der Compiler nur
die ersten 8 Zeichen zur Identifikation auswertet. (Gilt nur, wenn über einen
String-Ausdruck auf das Label zugegriffen wird).
Insgesamt empfiehlt es sich, auf numerische oder String-Ausdrücke für Zeilennummern bzw. Label zu verzichten, da diese zur Laufzeit erst ausgewertet werden müssen und der Programmablauf dadurch verlangsamt wird.
<Laufwerk>
Laufwerk steht für ein Volume (z.B. Festplatte, CD-ROM oder Diskette) und kann
beliebige Namen haben gefolgt von einem Doppelpunkt.
<Winkel>
Winkelangaben bei Grafikbefehlen sind stets in 1/10 Grad vorzunehmen,
d.h. z.B. 900 entspricht 90 Grad.
<Dateinummer>
Eine vorzeichenlose Zahl zwischen 1 und 16. Die Zahl steht in fester Verbindung mit
der zugehörigen Datei (siehe OPEN). Alle Befehle und Funktionen wirken auf die
Datei, die der Dateinummer durch OPEN zugeordnet wurde.
![]()
Omikron Basic stellt eine ganze Reihe verschiedener Variablentypen zur Verfügung, die für die unterschiedlichen Zwecke nützlich sind. Im Interesse der Schnelligkeit des Programms sollte nach Möglichkeit immer mit Integer-Variablen gearbeitet werden, wenn als Variablenwert nur ganze Zahlen in Betracht kommen. Da Strings ganz besonders kompliziert sind, sollten sie vermieden werden, wenn es irgendwie geht.
Die Variablennamen können fast beliebig gebildet werden. Ein Variablenname kann auch mehrmals im gleichen Programm mit verschiedenen Postfixen (also verschiedenen Wertebereichen) vorkommen. Sie werden vollständig unabhängig voneinander verwaltet. Dafür sorgt das Postfix. Für Variablennamen sind die ASCII-Zeichen von 48-57, 65-90, 95, 97-122 und 128-255 erlaubt. Die Namen dürfen allerdings nicht mit einer Zahl beginnen, damit das BASIC sie von Konstanten unterscheiden kann.
Die Zeichen ab 128 können auf verschiedene Weise erreicht werden:
1. Mit einer Vortaste. Sie drücken zunächst F1 und geben dann ein normales Zeichen ein. Durch F1 wird zu dem ASCII-Code dieses Zeichens 64 addiert. Das gleiche bewirkt F2, nur daß 128 addiert wird.
2. Bei gedrückter [Alt] Taste kann der ASCII-Code des Zeichens direkt über die Tasten des Zehnerblocks eingegeben werden. Sobald man die [Alt] Taste loslässt oder 3 Ziffern eingegeben wurden, erscheint das Zeichen auf dem Bildschirm.
3. Durch eine Kombination der Modifier-Keys mit normalen Tasten können die länderspezifischen Sonderzeichen erreicht werden.
Damit läßt sich jetzt z.B. schreiben:
Länge = Höhe * SIN(ß)
Ein geeigneter Zeichensatz vorausgesetzt.
siehe auch ASCII-Codes
Die Variable A soll nur ein Beispiel sein. Omikron
Basic unterscheidet jede einzelne Variable voneinander, obwohl
sie alle A heißen. Durch die Postfixe für die einzelnen Variablentypen
unterscheiden sie sich bereits. Wenn Sie die Variable A%L bereits verwendet
haben, können Sie sogar noch ein davon unabhängiges Feld A%L(1)
und eines A%L(1,2) verwenden. Hier besteht nämlich der Unterschied in
der Dimension der Felder. Es ist jedoch besser, solche Namensgleichheiten zu vermeiden,
sonst kann ein Progarmm schnell unübersichtlich werden.
Sie können übrigens für jedes als erstes Zeichen erlaubte Variablenzeichen
einen Standard-Variablentyp vergeben. Jede Variable, die mit eben diesem Buchstaben
beginnt, hat dann automatisch den Standard-Variablentyp, es sei denn, Sie geben das
Postfix eines anderen Variablentyps explizit an (s.a. Modus/Einstellungen>Programm).
Im Einzelnen sind folgende Variablentypen möglich:
Integerzahlen sind ganze Zahlen, also Zahlen ohne Nachkommastellen. Ihr Zahlenbereich
ist auf die unten angegebenen Werte beschränkt. Der Vorteil von Integer-Zahlen
ist die schnelle Abarbeitung und dass es keine Rundungsfehler gibt.
| Long-Integer: | Rechenbereich: | -2147483648 bis +2147483647 |
| Speicherplatzbedarf: | 4 Bytes (= 4 Zeichen) | |
| Postfix: | %L z.B. A%L, A%L(1) | |
| Short-Integer: | Rechenbereich: | -32768 bis +32767 |
| Speicherplatzbedarf: | 2 Bytes (= 2 Zeichen) | |
| Postfix: | % z.B. A%, A%(1) | |
| Byte-Integer: | Rechenbereich: | 0 bis 255 |
| Speicherplatzbedarf: | 1 Byte (= 1 Zeichen) | |
| Postfix: | %B z.B. A%B(1) | |
| Flag/Boolean: | Rechenbereich: | "falsch" (0) und "wahr" (-1) |
| Speicherplatzbedarf: | 1 Bit (= ein achtel Zeichen) | |
| Postfix: | %F z.B. A%F(1) |
Fließkommazahlen sind Zahlen mit Nachkommastellen. Ihr Zahlenbereich ist (fast) gar nicht begrenzt, da sie einen Zehnerexponenten besitzen. Reicht der Zahlenbereich der Mantisse nicht aus, so wird der Exponent jeweils um eins erhöht und die Mantisse wird um eine Stelle nach rechts geschoben. Je größer die Zahl ist, desto ungenauer ist sie deshalb auch. Die Stellenanzahl bleibt aber immer gleich. Eine Fließkommazahl sieht z.B. so aus:
| 123.45678 mal | 10 hoch 2 |
| Mantisse | Exponent |
| Single-Float: | Rechenbereich: | +/-1.4x10^-45 bis 3.4x10^+38 |
| Genauigkeit: | 7-8 Stellen | |
| Speicherplatzbedarf: | 4 Byte (= 4 Zeichen) | |
| Postfix: | ! z.B. A!, A!(1) | |
| Double-Float: | Rechenbereich: | +/-4.9x10^-324 bis 1.8x10^+308 |
| Genauigkeit: | 15-16 Stellen | |
| Speicherplatzbedarf: | 8 Byte (= 8 Zeichen) | |
| Postfix: | # z.B. A#, A#(1) |
Ein String ist eine Zeichenkette, d.h. ein Text von bis zu 2147483648 Zeichen
Länge. Der Text kann alle beliebigen Zeichen von 0 bis 255 enthalten. Strings
werden vom Omikron Basic sehr effektiv verwalt, woraus eine gegenüber anderen
BASIC-Varianten sehr hohe Verarbeitungsgeschwindigkeit resultiert.Die Länge
eines Strings kann sich während des Programmablaufs beliebig ändern (Dynamische
Stringverwaltung). Strings brauchen deshalb in Omikron Basic nicht, wie in vielen
anderen BASIC-Dialekten und Programmiersprachen, dimensioniert zu werden.
Da trotz der hochoptimierten Verwaltung die Verwendung von Strings niemals so schnell
sein kann, wie die Arbeit mit Integern, sollten Sie Strings nur benutzen, wenn das
Problem nicht genau so gut mit Integern zu bewältigen wäre.
Wenn Sie z.B. nur einen einzelnen Buchstaben benötigen, ist es - besonders in
Schleifen, die häufig durchlaufen werden - sinnvoll, statt des Buchstabens den
entsprechenden ASCII-Wert einer Integervariablen zuzuweisen (siehe ASC) und dann
damit zu arbeiten.
| String: | Speicherplatzbedarf: | 16 Bytes (= 16 Zeichen) plus die Länge des Strings. |
| Postfix: | $ z.B. A$, A$(1) |
Konstanten sind Zahlen, die sich nicht verändern, also keine Variablen. Aber
auch sie haben einen Typ, der den Variablentypen entspricht und von der Schreibweise
und dem Wert der Konstanten abhängt:
| 123 | Short-Integer |
| 35000 | Long-Integer |
| 123. | Double-Float |
| 1.3 | Double-Float |
| 1E20 | Single-Float |
| 123! | Single-Float |
| 123# | Double-Float |
| 1D20 | Double-Float |
| 1.23456789 | Double-Float |
| "hallo" | String. |
Omikron Basic stellt eine große Anzahl von Operatoren zur Verfügung, die nach Funktionsgruppen gegliedert nachfolgend besprochen werden.
| Zeichen: | Bedeutung: |
|
+ |
Addition |
|
- |
Subtraktion |
|
* |
Multiplikation |
|
/ |
Division |
|
^ |
Potenzieren |
|
+= |
Addition mit Zuweisung |
|
-= |
Subtraktion mit Zuweisung |
|
*= |
Multiplikation mit Zuweisung |
|
/= |
Division mit Zuweisung |
| \ | Integer-Division: Liefert das auf eine ganze Zahl abgerundete Ergebnis einer Division zurück |
|
MOD |
Modulo-Operator: Liefert den Rest einer ganzzahligen Division |
Omikron Basic stellt die folgenden Vergleichs-Operatoren
zur Verfügung:
| Zeichen: | Bedeutung: |
| > | größer als |
| < | kleiner als |
| = | gleich |
| >= | größer oder gleich |
| <= | kleiner oder gleich |
| <> | ungleich |
"*" greift auf ein Objekt zu (dereferenziert es). Direkt hinter dem Operator muß die Zeigervariable folgen. Welcher Typ gemeint ist, muß auch hier, wie bei einer normalen Variablen, noch mit einem Postfix angegeben werden. Speziell wenn es sich um einen Zeiger auf Funktionen handelt, ruft "*" die Funktion auf, auf die die Zeigervariable zeigt.
Alle hier aufgeführten Operatoren sind in Kapitel 5 im Einzelnen erklärt und nach Ihrer Priorität (Rangfolge) aufgelistet. Die weiter oben stehenden Operatoren haben eine höhere Priorität, als die darunter stehenden. Alle Operatoren in einer Zeile haben die gleiche Priorität.
( , ) (Klammern) (höchste Priorität)
& (Adressoperator), *(Pointeroperator), FN (Funktion)
NOT, +, - (als Vorzeichen)
^ (Potenzieren)
SHL, SHR
*, /
\, MOD
+, -
<, <=, >, >=, <>
AND
OR
EQV, IMP, NAND, NOR, XOR (niedrigste Priorität)
| Beispiel: | PRINT -3^2, (-3)^2, 3*1 SHL 2, (3*1) SHL 2 |
| Ergebnis: | -9 9 12 12 |
| Beispiel: | PRINT -1>=2 OR 1<2, -1>=((2 OR 1)<2) |
| Ergebnis: | -1 0 |
|
|
|
Support | Bestellen | Start | Home: http://www.berkhan.de |
|
© 1997-2001 |