3. Die Menüs des Editors Inhalt | 5. Der Befehlssatz: & bis @

Kapitel 4
Grundlagen

Allgemeines

Basic-Befehle
Syntaxerklärung
Zu den Beispielen
Weitere Erklärungen

Variablentypen

Integer
Float
String
Konstanten

Operatoren

Mathematische Operatoren
Priorität der Operatoren
Vergleichsoperatoren
Pointer und Adressoperatoren

 


Allgemeines

BASIC-Befehle
Der Omikron Basic 6 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 in Omikron Basic 6 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 6 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.

Syntaxerklärung
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 den Beispielen
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 ExtensionLibrary 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.

Weitere Erklärungen

<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, daß 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. 
 
Eine Datei kann auf dem Macintosh auf verschiedne Weise spezifiziert werden. Wenn die VolumeReferenceNumber und die DirectoryIdentificationNumber bekannt sind, so sollten sie auch unbedingt angegeben werden, da nur dadurch eine absolute Eindeutigkeit gesichert ist. Man kann eine Datei aber auch über einen Pfadnamen identifizieren. Dabei müssen die einzelnen Ordner durch Doppelpunkte getrennt werden. Am Schluß steht der eigentliche Dateiname.
(z.B. "MacintoshHD:Omikron Basic:DEMO:Mandelbrot.BAS")
Um einen FilespecificationRecord aufzubauen, benutzen Sie am besten die Funktion Get_Fsspec$ aus der ExtensionsLibrary.
Wenn Angaben über das Volume oder die Directory fehlen, muß der Pfadname vollständig sein, wenn sich die gesuchte Datei nicht im aktuellen Ordner befindet. Sonst reicht auch die Angabe eines Teilpfads, wobei darauf zu achten ist, daß der erste Buchstabe eines Teilpfades ein Doppelpunkt sein muß. In diesem Fall setzen Sie die VolumeReferenceNumber und die DirectoryIdentificationNumber einfach auf null und geben nur einen Teilpfad mit einem vorangestellten Doppelpunkt oder einen Dateinamen ohne Doppelpunkt an. Dann wird ausgehend vom aktuellen Pfad nach der Datei in dem Teilpfad gesucht.
Um die aktuelle VolumeReferenceNumber und DirectoryIdentificationNumber zu erfahren, können Sie die Prozedur
Get_Cur_Dir aus der ExtensionLibrary benutzen.

<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 Grafik-Befehlen 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.
 
 

Variablentypen

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 Variablen-Namen können fast beliebig gebildet werden. Ein Variablen-Name 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 Variablen-Namen 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äßt 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. Dialogbox Editoreinstellungen)

Im Einzelnen sind folgende Variablentypen möglich:

Integer (ganze Zahl)
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  daß 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)
 
Hinweis:
Die Variablentypen Byte-Integer und Flag/Boolean können nur in Feldern und nicht als eigenständige Variablen benutzt werden.

Float (Fließkomma)
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
Vorteile dieser Zahlen sind die Nachkommastellen und daß sich die Genauigkeit der Größenordnung anpaßt.
Nachteilig sind die bei Float-Zahlen möglichen Rundungsfehler. 1/3 ist eben doch etwas anderes als 0.33333333333333. Denn nicht alle reellen Zahlen lassen sich durch eine Float-Zahl exakt darstellen. Die Rechengeschwindigkeit kann bei Fließkommazahlen noch größer sein als bei Integerzahlen, da der PowerPC Prozessor über eine sehr leistungsfähige Fließkommarecheneinheit verfügt.
 
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)
 

String (Zeichenkette)
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
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. 
 
Eine Zahl, die eines der folgenden Zeichen enthält, ist automatisch eine Fließkommazahl:
. ! # E D
Die Postfixe ! und #  können also auch hinter Zahlen stehen.
Der Buchstabe E steht für "Zehnerexponent" einer Single-Float-Zahl und D für "Zehnerexponent einer Double-Float-Zahl.

 

Operatoren
Omikron Basic stellt eine große Anzahl von Operatoren zur Verfügung, die nach Funktionsgruppen gegliedert nachfolgend besprochen werden.

Mathematische Operatoren
 
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
   
 

Vergleichsoperatoren

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 
 
 
 
Pointer und Adressoperatoren
 
"&" ermittelt die Adresse einer Variablen, eines Feldes oder einer Funktion.

"*" 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.

Priorität der Operatoren

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

 

3. Die Menüs des Editors Inhalt | 5. Der Befehlssatz: & bis @

Support | Bestellen | Start | Home: http://www.berkhan.de


© 1997-2001 Berkhan-Software