home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
T.C. 1,001 Programme der Spitzenklasse
/
T._C._1001_Programme_der_Spitzenklasse.iso
/
richter
/
8607
/
8607.mhs
/
RICHTER.DTP
/
FBASIC
/
BASIC.ASC
< prev
next >
Wrap
Text File
|
1992-03-31
|
122KB
|
9,699 lines
FranzBasic
Inhaltsverzeichnis
1 Vorbemerkungen
2 Handhabung
3 Einführung
4 Referenzteil
Anhang A Installation
Anhang B Runtime-Errors
Dokumentation FranzBasic
1 Vorbemerkungen
Was hier vor Ihnen liegt ist FranzBasic in
der Version 1.0. FranzBasic wurde geplant
und entwickelt als Tool für die
Programmierung von administrativen und
kommerziellen Datensystemen.
Diesem Ziel gemäß enthält FranzBasic wenig
für den technisch-wissenschaftlichen
Bereich über das in 'Standard'-Basic
verfügbare hinaus. Grafische Komponenten
wurden mit Bedacht ausgelassen, sie hätten
den Übersetzer weiter aufgebläht, ohne
einem großen Benutzerkreis zu nützen.
Grafik auf Bildschirm und Drucker ist
FranzBasic windows vorbehalten, der Version
für Microsoft-Windows (Erscheinungstermin:
Mai 1990)
Neben der in dieser Version vorhandenen
Datenbank-Schnittstelle wird Version 1.1
eine Spreadsheet-Schnittstelle enthalten,
die das Lesen und Schreiben von
verschiedenen Spreadsheet-Programmen
ermöglicht.
Weitere Versionen von FranzBasic werden für
verschiedene Unix-Rechner erscheinen.
Ich würde mich freuen, aus dem
Anwenderkreis Anregungen für die
Weiterentwicklung zu erhalten.
Ihr
Franz
1-1
Dokumentation FranzBasic
FranzBasic
Copyright Zimmer Informatik, Postfach
140369, Düsseldorf
Verwendete Warenzeichen:
Dbase III Ashton-Tate
Microsoft Windows Microsoft
1-2
Dokumentation FranzBasic
2 Handhabung
2.1 Compiler
Der FranzBasic-Übersetzer wird aufgerufen
mit
Basic [Name [-b]] (a)
Wird nur 'Basic' eingegeben, wird der
Übersetzer in der interaktiven Form
gestartet. Der Editor 'Fed.exe' wird
nachgeladen und dem Programmierer für die
Programm-Entwicklung zur Verfügung
gestellt. Wird außerdem <Name> angegeben,
wird die Datei "<Name>.bas" in den Editor
geladen und ab der ersten Zeile auf dem
Bilschirm dargestellt.
Durch Angabe der Option '-b' wird der
Übersetzer im Batch-Mode betrieben. Der
Programmtext wird aus Datei "<Name>.bas"
gelesen und Programmcode in der Datei
"<Name>.cod" erzeugt. Dieser Code kann dann
durch den Runtime-Modul von FranzBasic zur
Ausführung gebracht werden durch
Runfb Name (b)
Dabei ist <Name> identisch mit <Name> aus
(a). Im Gegensatz zum Übersetzer
'basic.exe' kann das Runtime-Modul
'runfb.exe' an andere Personen
weitergegeben werden, um mit FranzBasic
erzeugte Programme auch durch Dritte
nutzbar zu machen.
2-1
Dokumentation FranzBasic
2.2 Der Editor
Der Editor 'Fed.exe' wird vom Übersetzer im
interaktiven Mode nachgeladen, um Programm-
Texte zu bearbeiten. Der Editor wird in
zwei Modi betrieben: Eingabe-Mode und Menu-
Mode.
Im Eingabe-Mode, der beim Start eingestellt
ist, werden über Tastatur eingegebene
Zeichen gespeichert und auf dem Bildschirm
dargestellt. Bestimmte Sonderzeichen dienen
zur Steuerung:
ESC Abbrechen
Cursortasten Cursor bewegen
Tab,Shift-Tab Tabulator (4 Zeichen)
PgUp (Bild auf)aufwärts blättern
PgDn (Bild ab) abwärts blättern
Home (Pos1) Zeilenanfang
End (Ende) Zeilenende
Ctrl-Home Anfang Programmtext
Ctrl-End Ende Programmtext
Eingabe/Enter/CR Zeilensprung
BS linkes Zeichen löschen
Del (Entf) Zeichen entfernen
Ins (Einfg) Einfügen aus/ein
Shift-Ins Zeile einfügen
Ctrl-N Leerzeile einfügen
Ctrl-Y Zeile Löschen
Während 'Ctrl-N' eine Leerzeile einfügt,
fügt 'Shift-Ins' die zuletzt mit 'Ctrl-Y'
gelöschte Zeile wieder ein.
2-2
Dokumentation FranzBasic
Über Tastatur eingegebene Zeichen werden
entweder zwischen vorhandene Zeichen
eingefügt (Einfüge-Mode) oder überschreiben
sie. Mit 'Ins' kann zwischen beiden Arten
gewechselt werden. Beim Überschreiben nimmt
der Cursor Blockform an.
Im Einfüge-Mode wird mit dem Drücken der
Eingabe/Enter/CR-Taste eine neue Zeile
unterhalb der aktuellen eingefügt und auf
diese gesprungen. Steht der Cursor dabei
nicht hinter dem letzten Zeichen der alten
Zeile wird diese geteilt.
Zwei Zeilen können vereinigt werden, indem
man die 'Del'-Taste drückt, während der
Cursor genau hinter dem letzen Zeichen der
oberen Zeile steht
Durch Drücken der linken Maustaste wird der
Cursor an die Textstelle auf dem Bildschirm
gesetzt, an der sich der Mauszeiger
befindet.
In den Menu-Mode gelangt man durch Drücken
und Loslassen der Taste 'Alt' oder durch
Anklicken einer der Menupunkte mit der
Maus. Nachfolgende Tastendrücke bewirken
keine Eingaben in den Programmtext sondern
dienen der Auswahl eines Kommandos aus dem
Menu.
Bei Beginn des Menu-Modus wird für einen
der Menupunkt ein Abrollmenu gezeigt. Wurde
das Menu über 'Alt' aktiviert, wird das
zuletzt gezeigte Abrollmenu gezeigt mit
einem weissen Leuchtbalken auf dem zuletzt
2-3
Dokumentation FranzBasic
gewählten Kommando. Durch die Cursortasten
kann der Leuchtbalken auf und ab geführt
werden bzw. kann in die nächsten
Abrollmenus rechts und links gewechselt
werden. Wird Eingabe/Enter/CR gedrückt,
wird das Kommando unter dem Leuchtbalken
aktiviert. ESC oder ein weiteres 'Alt'
bricht den Menu-Modus ab. In allen Fällen
wird der Menu-Modus beendet.
Wird das Menu mit der Maus aktiviert, steht
der Leuchtbalken nur auf dem zuletzt
aktivierten Kommando, falls auch das
zuletzt gezeigte Abrollmenu angewählt
wurde, sonst auf dem ersten. Durch
Anklicken mit der Maus wird ein Kommando
aktiviert. Maus- und Tastatur-Bedienung
können beliebig vermischt werden.
Viele Kommandos können auch durch Tastatur-
Kürzel in Verbindung mit der 'Alt' oder der
'Shift'-Taste eingegeben werden. Hier
entfällt der Aufruf des Menus. Da in den
Menus die Kürzel neben den Kommandos
aufgeführt sind und am besten dort gelernt
werden, sind sie hier nicht aufgezählt.
Im ersten Abrollmenu - Datei - finden sich
Kommandos zur Dateibehandlung und
ähnliches. Die aktuell bearbeitete Datei
wird in der Statuszeile am unteren
Bildschirm-Rand zwischen zwei eckigen
Klammern [ ] angezeigt. Zu einigen
Kommandos wird eine Dateiauswahl angezeigt.
In ihr werden die Dateien im aktuellen
Verzeichnis mit der Namenserweiterung
'.bas' zur Auswahl angeboten (sie werden
2-4
Dokumentation FranzBasic
angezeigt ohne diese Erweiterung). Analog
zum Menu kann hier mit Leuchtbalken oder
Maus gearbeitet werden. Es kann aber auch
über Tastatur ein neuer Name eingegeben
werden (auch dieser ohne '.bas').
Mit 'Bsystem' mit der Kommandoprozessor des
Betriebssystems geladen. Es können dann
Kommandos auf MS-DOS-Ebene eingegeben
werden. Durch das Kommando 'exit' wird der
Kommandoprozessor beendet und FranzBasic
kehrt zurück.
Im zweiten Abrollmenu - Edit - finden sich
Kommandos zur Editierung des Texts. Bevor
Operationen wie Verschieben, Kopieren oder
Löschen von Textblöcken stattfinden können,
muß mit 'Blockanfang', 'Blockende' ein
Block markiert werden.
Unter Option können der Einfüge- oder
Überschreibemodus bei der Texteingabe
eingestellt werden und die automatische
Datensicherung ein- und ausgeschaltet
werden. Beide Kommandos wirken sowohl als
Ein- als auch als Ausschalter, je nach
Zustand bei der Anwahl. Auf der Statuszeile
werden die Merker 'INS' bzw. 'BAK' gezeigt,
wenn der Einfügemodus bzw Auto-Sicherung
eingestellt ist.
Die automatische Datensicherung sichert den
Programmtext in regelmäßigen Abständen auf
die Platte in das aktuelle Verzeichnis
unter dem Namen 'Basic000.bak'. Bei Bedarf
kann auf diese Sicherung zurückgegriffen
werden. Da die Datei die Namenserweiterung
2-5
Dokumentation FranzBasic
'.bak' hat kann sie jedoch nicht direkt in
den Editor geladen werden, sondern muß
umbenannt werden.
Die Auto-Sicherung sollte niemanden davon
abhalten, seine Programmtexte regelmäßig
auf Diskette zu sichern! Sie sollte auch
nur bei Begründung abgeschaltet werden, z.
B. bei Arbeiten auf Diskettenlaufwerken.
Im Abrollmenu Run finden sich die Kommandos
zum Übersetzen und Starten von Programmen.
Wird ein Programm durch 'Compile'
fehlerfrei oder nur mit Warnungen
übersetzt, kann es mit 'Start' gestartet
werden.
Treten bei der Übersetzungen Warnungen oder
Fehler auf, werden bis zu neunzehn davon
gespeichert. Der erste wird über der
Statuszeile am unteren Bildschirmrand
angezeigt und der Cursor auf die
Fehlerstelle gesetzt. Durch das Kommando
'Fehler' werden weitere Fehler angezeigt.
Nach dem letzten Fehler wird durch
nochmaliges Kommando 'Fehler' von vorn
begonnen. Zwischendurch können Fehler durch
Änderung des Programmtexts behoben werden.
Beim Start eines Programms macht der Editor
den Bildschirm frei für den 'Output'-
Schirm, der anfänglich der Bildschirminhalt
bei Start von FranzBasic ist. Nach
Programmende kehrt der Editor zurück. Damit
für die Korrektur von Programmen der
'Output'-Schirm eingesehen werden kann,
steht das Kommando 'Output' zur Verfügung,
2-6
Dokumentation FranzBasic
das den 'Output'-Schirm bei Programmende
zeigt. Ein beliebiger Tastendruck führt
wieder in den Editor zurück.
2.3 Erstellen großer Programme
Der FranzBasic-Editor 'fed.exe' hat nur
eine begrenzte Kapazität von 600 Zeilen
(dafür aber eine hohe Geschwindigkeit).
Wenn größere Programme geschrieben werden
sollen, geht man z. B. mit der nachfolgend
beschriebenen Methode vor.
Man entwickelt interaktiv Programmteile in
Unterprogrammform bis zur möglichen Größe
mit einem kleinen Hauptprogramm zu
Testzwecken. Letzteres wird zum Schluß
wieder entfernt. Sind alle Programmteile
fertig, compiliert man sie im Batch-Modus
durch Angabe aller Dateien wie in:
Basic Name1 Name2 Name3 -b (c)
der Übersetzer liest alle durch
aufgeführten Dateien hintereinander ein und
übersetzt diese als wären sie eine Datei.
Das Hauptprogramm muß also in der letzten
eingegebenen Datei stehen.
Die Ausführung des Programms erfolgt dann
über das Runtime-Modul.
2-7
Dokumentation FranzBasic
3 Einführung in FranzBasic
Inhalt
3.1 Programmaufbau in FranzBasic
3.2 Variablen in FranzBasic
3.3 Konstanten
3.4 Arithmetische Ausdrücke
3.5 String-Ausdrücke
3.6 Logische Ausdrücke
3.7 Datei-Bearbeitung
3.8 Datenbank-Bearbeitung
3.1 Programmaufbau in FranzBasic
Programme bestehen aus einer Ansammlung von
Programmanweisungen, auch einfach
'Anweisungen' oder 'Statements' genannt.
Mehrere Statements oder Programmanweisungen
können auf einer Zeile stehen. Sie werden
dann durch das Zeichen ':' getrennt. Es
gibt einige Ausnahmen:
- nach einzeiligen If-Anweisungen wie
If a% < 0 Then a% = -a%
können keine weitere Anweisungen gegeben
werden. Es muß dann die mehrzeilige Form
gewählt werden (siehe 'IF').
- nach Sprungmarken können keine
Anweisungen folgen
3-1
Dokumentation FranzBasic
- nach den 'strukturierten' Anweisungen
sind keine weiteren möglich
Programmanweisungen sind unterschieden in
zwei Klassen: ausführbare und nicht
ausführbare Anweisungen. Ausführbare
Anweisungen werden beim Ablauf des
Programms ausgeführt und führen irgendeine
Änderung in Daten oder im Programmzustand
herbei. Nichtausführbare Anweisung dienen
zur Definition und Deklaration und werden
bei der Übersetzung ausgewertet, z. B. DIM,
RECTYPE, STATIC und andere.
Programme können strukturiert werden durch
Anweisungen, die innerhalb eines Programmes
Blöcke von Programmanweisungen bilden:
- Subroutine ... Endsub
- For ... Endfor
- If ... Endif
- While ... Wend
- Repeat ... Until
sind solche Anweisungspaare, die alle
Statments '...' zwischen der einleitenden
(Subroutine, For, If, While, Repeat) und
der abschliessenden Anweisung (Endsub,
Endfor, Endif, Wend, Until) zu einem
Programmblock schliessen. Diese Anweisungen
3-2
Dokumentation FranzBasic
werden oft auch strukturierte Anweisungen
genannt.
Nach diesen strukturierten Anweisungen darf
ebenfalls keine durch ':' abgetrenntes
weiteres Statement stehen, wohl aber dürfen
die Zeilen innerhalb des Blocks mehrere
Anweisungen haben.
Die in einem Programmtext vorkommenden
Wörter gehören in zwei Klassen, die
reservierten Wörter und die vom
Programmierer definierten Wörter.
Reservierte Wörter sind diejenigen, die den
Sprachumfang ausmachen, also 'IF',
'SUBROUTINE', 'GOTO', einschließlich der
eingebauten Funktionen wie SIN(), TRIM$().
Vom Programmierer werden dazu Variablen und
Konstanten definiert. Variablen sollten
nicht die Namen reservierter Wörter
benutzen.
Zwischen Klein- und Großbuchstaben wird
weder bei reservierten Wörtern noch bei
Variablen unterschieden, wohl aber
innerhalb von Zeichenketten. Die Variable
ABC$ kann Abc$, abc$, aBc$ geschrieben
werden. Für die in ABC$ gespeicherte
Zeichenkette gilt jedoch nicht, daß
"Zeichenkette" gleich "zeichenKette" ist.
Ein Programmtext besteht aus Zeilen mit
Programmanweisungen, die sich wiederum aus
reservierten Wörtern und vom Programmierer
definierten Wörtern zusammensetzen. Der
Übersetzer macht aus diesem Programmtext
3-3
Dokumentation FranzBasic
einen Programmcode, der vom Rechner durch
ein runtime-Modul ausgeführt wird.
Ein wichtiges Element moderner
Programmiersprachen sind Unterprogramme, in
FranzBasic realisiert durch das
Anweisungspaar 'SUBROUTINE' ... 'ENDSUB'.
Unterprogramme sind in sich abgeschlossene
Programmteile, die wiederholt innerhalb
eines Programmes verwendet werden können
aber nur einmal programmiert werden müssen
und auch nur einmal Platz für Programmtext
und Programmcode beanspruchen.
Unterprogramme stehen in FranzBasic
grundsätzlich am Anfang eines
Programmtexts, da sie definiert sein
müssen, bevor sie aufgerufen werden können.
Nach dem ENDSUB des letzten Unterprogramms
beginnt automatisch das Hauptprogramm
3.2 Variablen in FranzBasic
Daten werden in Variablen gespeichert.
FranzBasic unterstützt die Datentypen
Integer (16-Bit Ganzzahl), Real (32-Bit
Fließkommazahl), Long (32-Bit Ganzzahl),
Double (64-Bit Fließkommazahl), String
(Zeichenkette)
Die Variablen dürfen beliebige Namen mit
max. 16 Stellen haben. Der Typ der
Variablen wird durch das letzte Zeichen
festgelegt, nach folgender Konvention:
% Integer, z.B. i%
& Long, z.B. long&
3-4
Dokumentation FranzBasic
# Double, z.B. d1#
$ String, z.B. str$
Reals haben kein solches Kennzeichen. Eine
Variable ist vom Typ Real, wenn sie keines
der obigen Sonderzeichen als letztes
Zeichen hat.
Für den Darstellungsbereich und die
Genauigkeit der einzelnen Datentypen gilt
das gleiche wie im Paragraphen 'Konstanten'
beschrieben.
Das letzte Zeichen darf kein Punkt sein, da
diese bei Records als Trennzeichen
verwendet werden.
Wird innerhalb eines Programms eine
Variable verwendet, die nicht (in
Subroutines) ausdrücklich als LOCAL oder
STATIC deklariert wurde, so handelt es sich
um eine 'Global'-Variable, der Regelfall.
'Global'-Variablen sind im Hauptprogramm
und in allen Subroutines bekannt, egal ob
sie im Hauptprogramm oder in einer
Subroutine erzeugt wurden. LOCAL- und
STATIC-Variablen sind nur in der Subroutine
bekannt, in der sie erzeugt wurden. Sie
sind werden unterschieden von 'Gobal'-
variablen gleichen Namens.
Bei erstmaliger Verwendung eines
Variablennamens der nicht unter LOCAL oder
STATIC vordefiniert wurde legt der Compiler
die Variable nach obenstehender Typen-
Konvention als 'Global' an, bei weiterer
3-5
Dokumentation FranzBasic
Nennung des gleichen Variablen-Namens wird
diese Variable verwendet.
Als zusammengesetzte Datentypen werden
Felder und Records unterstützt. Felder
bestehen aus gleichartigen Variablen auf
die über einen gemeinsamen Namen und einen
Index, der die einzelnen Variablen
voneinander unterscheidet, zugegriffen.
Felder werden durch die Anweisung DIM
erzeugt.
Records bestehen aus verschiedenen
Variablen auf die über den gemeinsamen
Record-Namen und einen individuellen
Recordvariablen-Namen zugegriffen wird.
Zwischen beide Namensteile wird ein Punkt
gesetzt. Records werden zweistufig erzeugt:
durch die Anweisung RECTYPE wird zunächst
ein Record-Typ deklariert, auf den sich
nachfolgende RECORD-Deklarationen beziehen.
Die Namen sowohl für den Record-Type als
auch für den Record müssen den Konventionen
für Reals gehorchen, d. h. kein angehängtes
Sonderzeichen wie %, &, #.
3.3 Konstanten
Entsprechend den verschiedenen einfachen
Datentypen gibt es verschiedene Konstanten.
Integer-Konstanten besteht als ganze Zahlen
einfach aus einer Anzahl von Ziffern. Die
Zahlen müssen zwischen -32768 und +32767
liegen, da dieser Bereich durch 16 Bit
dargestellt werden kann. Werden Integer-
3-6
Dokumentation FranzBasic
Konstanten ausserhalb dieses Bereichs
gebildet, sind die von Übersetzer erzeugten
internen Darstellungen unbestimmt. Bei
positiven Zahlen kann das Plus-Zeichen
entfallen.
Long-Konstanten bestehen entsprechend aus
Zahlen im Bereich von -2147483648 und
+2147483647 und haben zur Kennzeichnung ein
'L' angehängt, also z.B. -123L.
Real-Konstanten bestehen aus Vor- und
Nachkommastellen getrennt durch einen
Dezimalpunkt oder in der wissenschaftlichen
Exponentialnotation aus Mantisse und
Exponent, getrennt durch ein 'E'. Der
gültige Bereich liegt zwischen 3.4E-38 und
3.4E38 für positive Zahlen und genauso für
negative Zahlen. Die erreichbare
Genauigkeit liegt bei 7 Stellen.
Für Double-Konstanten ist das 'E' der Real-
Konstanten ersetzt durch 'D' und der
Bereich beträgt 1.7D-308 bis 1.7D308, die
Genauigkeit ca. 14 Stellen.
Da Reals und Doubles eine Fließkommazahl
wegen der beschränkten Stellenzahl nicht
exakt darstellen, können in der Praxis
Probleme z. B. beim Vergleich von Daten
auftreten. Ein offensichtliches Beispiel
ist:
If a = 1.0/3.0 Then Break
Da 1/3 oder 1.0/3.0 nicht mit einer
endlichen Stellenzahl als Fließkommazahl
3-7
Dokumentation FranzBasic
darzustellen ist, ist der Ausgang des
Vergleichs unbestimmt, er kann je nach dem
Weg auf dem der Wert der Variablen 'a'
erzeugt wurde WAHR oder FALSCH sein.
Aus diesem Grund sollten Reals und Doubles
auch nicht in FOR-Schleifen als
Zählvariablen eingesetzt werden (siehe
FOR).
String-Konstanten bestehen aus beliebig
aneinandergereihten Zeichen, eingeschlossen
durch ein Paar Anführungszeichen "". Die
maximale Länge beträgt 255 Zeichen.
3.4 Arithmetische Ausdrücke
Variablen und Konstanten werden durch
arithmetische Operatoren zu arithmetischen
Ausdrücken verbunden, deren Wert
gegebenenfalls an Variable zugewiesen wird.
Arithmetische Operatoren sind +, -, *, /
entsprechend den vier Grundrechenarten und
deren Regeln für Vorrang (Punktrechnung vor
Strichrechnung) und Klammerung. Sind in
einem arithmetischen Ausdruck mehrere
Datentypen vorhanden, nimmt der Übersetzer
automatisch eine Typwandlung vor, sofern es
sich um numerische Datentypen handelt.
Strings und Records sind mit anderen Typen
nicht kompatibel, d. h. eine Wandlung ist
nicht möglich. Felder können in
arithmetischen Ausdrücken elementweise
verwendet werden.
3-8
Dokumentation FranzBasic
Bei der automatischen Wandlung wird immer
in den Datentyp gewandelt der die größere
Darstellungs-Möglichkeiten hat, d.h. in dem
Ausdruck
a% * b1
bestehend aus dem Integer a% und dem Real
b1 wird a% in eine Real-Zahl gewandelt und
dann die Multiplikation durchgeführt.
Wird der Wert eines arithmetischen
Ausdrucks durch den Zuweisungsoperator =
einer Variablen zugewiesen, wie in
erg% = a% * b1
so wird auf jeden Fall der arithmetische
Ausdruck in den Typ der Ergebnis-Variablen
gewandelt. Hat dieser geringere
Darstellungsmöglichkeiten, können
Informationsverluste (im obigen Beispiel
Verlust der Nachkommastellen) und komplette
Fehlinformation durch Übersteigen der
Darstellungsbreite des Ergebnistyps die
Folge sein (Wenn der Ausdruck a% * B1 z.B.
40000.0 ist, ist der Wert von erg%
unvorhersagbar.
Werden Konstanten direkt an Variablen
zugewiesen, ist es günstig wenn die
Typkonventionen eingehalten werden, wie in
a = 1.0 a# = 1.0D0
Würde man dagegen schreiben
3-9
Dokumentation FranzBasic
a = 1 a# = 1.0
würden die Ergebnis-Variablen die gleichen
Werte erhalten, es müßte jedoch eine
Wandlung durchgeführt werden, die Platz für
entsprechenden Programmcode und Rechenzeit
verbraucht.
Records können in arithmetischen Ausdrücken
nicht als Ganzes verwendet werden, nur
ihrer Elemente können verwendet werden.
Ausnahme hiervon ist die Zuweisung
Rectype Atype A1, A2
A1 = A2
A1 und A2 müssen vom gleichen Record-Type
sein!
Wo immer in arithmetischen Ausdrücken
Variablen stehen können, dürfen auch
Funktionen vom gleichen Datentyp stehen,
sowohl die in FranzBasic definierten
Standardfunktionen wie VAL oder VAL% als
auch vom Benutzer erstellte SUBROUTINES die
durch RETURN einen Wert zurückgeben. Auf
diese Weise können auch String-Werte in
arithmetische Ausdrücke eingebracht werden.
3.5 String-Ausdrücke
String-Konstanten und -Variablen können
Stringausdrücke bilden. Diese sind mit
anderen Datentypen nicht kompatibel, d. h.
Variablen anderer Datentypen können nicht
gewandelt werden und dürfen daher in
3-10
Dokumentation FranzBasic
String-Ausdrücken nicht verwendet werden.
Zugelassen sind Record-Elemente vom
Datentyp String und Elemente aus String-
Feldern.
Einziger Operator in String-Ausdrücken ist
die Verkettung oder Concatanation,
dargestellt durch '+' wie in
Erg$ = "abc" + a$ + STR$(1.23)
Hier ist STR$ ein Standard-Funktion vom Typ
String, die natürlich in String-Ausdrücken
vorkommen dürfen. Da es Funktionen wie STR$
gibt, welche Zahlen in Zeichenketten
verwandeln, können auf diesem Weg Zahlen in
Stringausdrücke eingebracht werden.
3.6 Logische Ausdrücke
Elementare logische Ausdrücke enthalten
neben Variablen und Konstanten die
Vergleichsoperatoren
= gleich
< kleiner
<= kleiner gleich
> größer
>= größer gleich
<> ungleich
wie z.B. in
If a% > 0 Then...
While summe% = 0
3-11
Dokumentation FranzBasic
Der Vergleichsoperator = ist nicht zu
verwechseln mit dem Zuweisungsoperator =,
beide werden durch das gleiche Zeichen
dargestellt, haben aber verschiedene
Wirkung. In obigem Beispiel wird der
Variable 'summe%' kein Wert zugewiesen,
sondern es wird ein Vergleich auf
Gleichheit mit der Konstanten 0
durchgeführt.
Der Wert der logischen Ausdrücke ist
entweder -1, wenn der Vergleich WAHR ist
oder 0, wenn er FALSCH ist.
Da logische Ausdrücke einen Wert ergeben,
können sie durchaus in arithmetischen
Ausdrücken verwendet werden , z.B.
a% = b% > 1
a% ist -1, wenn b% > 1, sonst 0.
Andererseits können beliebige arithmetische
Ausdrücke als logische Ausdrücke verwendet
werden, da bei der Auswertung jeder Wert
ungleich 0 als WAHR interpretiert wird. Die
Schleife
i% = 10
While i%
...
i% = i% - 1
Wend
wird solange durchlaufen bis i% auf 0
heruntergezählt ist und durch 'WHILE' daher
als FALSCH interpretiert wird.
3-12
Dokumentation FranzBasic
Logische Ausdrücke liefern jedoch den Wert
-1 als Ergebnis für WAHR und zwar als
Integer. -1 wurde gewählt weil in der
binären Darstellung dieser Zahl alle 16 Bit
auf '1' gesetzt sind.
Elementare logische Ausdrücke können durch
die logischen Verknüpfungs-Operatoren
'AND', 'OR' und 'NOT' zu zusammengesetzten
logischen Ausdrücken verbunden werden wie
in
If i% > 0 AND summe > 100.0 Then ...
If NOT s$ = "123" Then ...
Sind mehrere Verknüpfungs-Operatoren in
einem Ausdruck vorhanden, so gelten
Vorrangregeln wie bei arithmetischen
Ausdrücken. Eine AND-Verknüpfung wird vor
einer OR-Verknüpfung durchgeführt, durch
Klammerung kann die Reihenfolge geändert
werden.
3.7 Datei-Bearbeitung
FranzBasic verfügt über die klassischen IO-
Befehle von Basic, wenn auch die Behandlung
von Random-Dateien durch die Verwendung von
Records etwas modernisiert wurde.
Zwei Arten von Dateien werden unterstützt:
- Text-Dateien Open "I", "O", "U"
- Random-Dateien Open "R"
3-13
Dokumentation FranzBasic
Random-Dateien haben eine feste Satzlänge.
Es können nur ganze Datensätze in einen
Record gelesen und aus einem Record in die
Datei geschrieben werden. Als
Identifikation, welcher Satz zu lesen oder
zu schreiben ist, dient eine Satznummer,
welche mit der Position des Satzes in der
Datei identisch ist. Sätze können nur
geschrieben werden, wenn sie einen bereits
vorhandenen Satz überschreiben oder
unmittelbar an den letzten bereits
vorhanden Satz anschliessen. Das heißt,
Random-Dateien können nur lückenlos erzeugt
werden, ein Schreiben in beliebiger Folge
ist nicht möglich. Random-Dateien werden
mit den Anweisungen GET und PUT bearbeitet.
Text-Dateien können Daten beliebiger
Struktur enthalten. Sie werden sequentiell
gelesen oder geschrieben, d.h. vom ersten
Zeichen in der Datei zeichenweise
fortschreitend. Text-Dateien werden mit den
Befehlen INPUT, LINE INPUT, PRINT und WRITE
bearbeitet. INPUT und LINE INPUT auf der
einen sowie PRINT und WRITE auf der anderen
Seite bearbeiten die Dateien in etwas
unterschiedlicher Art, siehe Referenzteil
Beide Dateiarten werden mit OPEN zur
Bearbeitung geöffnet und gegebenenfalls
kreiert. Nach der Bearbeitung werden die
Dateien mit CLOSE geschlossen.
3-14
Dokumentation FranzBasic
3.8 Datenbank-Bearbeitung
FranzBasic verfügt über eine Anzahl Befehle
zur Bearbeitung dBase - III - kompatibler
Datenbanken. Jede Datenbank besteht aus
zwei Dateien:
- einer Datei mit Extension .dbf, welche
die eigentlichen Daten enthält
- und einer Datei mit Extension .ndx, die
zu Verwaltung der Datensatzschlüssel dient.
Der Datensatzschlüssel oder einfach
Schlüssel ist der Ordnungsbegriff nach
denen die Datensätze sortiert und gesucht
werden. Der Schlüssel ist das
Identifikationsmerkmal des Datensatzes. In
FranzBasic ist der Schlüssel immer das
erste Element des Records, mit dem die
Datenbank kreiert wurde (siehe DBCREATE).
Schlüssel müssen eindeutig sein, d.h. es
können nicht zwei Datensätze unter dem
gleichen Schlüssel gespeichert sein.
Wie gewöhnliche Dateien müssen Datenbanken
vor der Benutzung geöffnet und hinterher
geschlossen werden (DBOPEN, DBCLOSE). Im
Unterschied zu gewöhnlichen Dateien müssen
Datenbanken aber explizit kreiert werden
(DBCREATE) und werden nicht automatisch
beim Öffnen kreiert, falls sie noch nicht
existieren.
Die beim Öffnen einer Datenbank verwendete
Kennung kann gleichlauten mit einer Kennung
3-15
Dokumentation FranzBasic
für eine gewöhnliche Datei, sie werden von
FranzBasic unterschieden.
Mit DBGET und DBPUT werden Datensätze
gelesen bzw. geschrieben. Zum Lesen muß der
Schlüssel des gewünschten Satzes angegeben
werden. ist kein Satz mit dem gewünschten
Schlüssel vorhanden, wird der in
lexikalischer Anordnung nächst Satz
gelesen, gleichzeitig aber in Runtime-Error
gesetzt, der mit ERROR%() erkannt werden
kann.
Man kann dies ganz bewußt ausnutzen, indem
man mit Teilschlüsseln arbeitet, um den
internen Satzzeiger zu positionieren für
nachfolgende sequentielle Zugriffe. Hat man
z. Bsp. für eine Artikelstammdatei einen 8-
stelligen Schlüssel 'Artnr$' gewählt, so
wird ein Lesen der Datenbank mit dem
einstelligen Schlüssel "4" den ersten
Datensatz liefern, der mit einer "4"
beginnt (vielleicht 47-11299).
Sequentielles Verarbeiten der Datenbank -
d.h. arbeiten in Reihenfolge der Schlüssel
- wird ermöglicht durch Angabe von "+" oder
"-" anstelle eines normalen Schlüssels.
DBGET ließt dann den nächsten bzw.
vorhergehenden Datensatz in lexikalischer
Folge. Durch Angabe von "^" und "*" als
Schlüssel lassen sich der erste bzw. letzte
Satz einer Datenbank lesen.
Das schließt aus, daß echte Schlüssel mit
'^', '*', '+' oder '-' beginnen.
3-16
Dokumentation FranzBasic
Mit DBDELETE kann der zuletzt mit DBGET
oder DBPUT angesprochene Datensatz gelöscht
werden. Der Satz wird nicht physisch
gelöscht, sondern nur mit einem
Löschvermerk versehen.
Überblick über den Inhalt der Datenbank
verschafft DBBROWSE.
3-17
1
Dokumentation FranzBasic
4 Referenzteil
Inhalt
4.1Anweisungen zur Daten - Definition
DIM Feld definieren 5
LOCAL Lokale Variable definieren 7
STATIC statische Variable definieren 9
RECTYPERecordtyp definieren 10
RECVAR Record-Element definieren 11
ENDREC Recordtyp-Definition beenden 13
RECORD Record definieren 14
4.2Anweisungen zur Programmablauf
-steuerung
IF If-Abfrage 15
FOR For-Schleife 18
WHILE While-Schleife 20
REPEAT Repeat-Schleife 22
BREAK Schleife abbrechen 24
STOP Programm beenden 25
PAUSE Programm anhalten 26
GOTO Label abspringen 27
SUBROUTINE Unterprogramm definieren 28
RETURN Unterprogramm verlassen 32
GOSUB Unterprogramm aufrufen 34
4.3Befehle zur Dateibearbeitung
OPEN Datei öffnen 36
CLOSE Datei schließen 39
INPUT Daten lesen 40
4-1
2
Dokumentation FranzBasic
LINE INPUT " 42
PRINT Daten ausgeben 44
LPRINT Daten ausgeben (Drucker) 46
WRITE Daten ausgeben 47
GET Random-Datei lesen 49
PUT Random-Datei schreiben 50
ERASE Datei löschen 51
RENAME Datei umbenennen 52
INKEY$ Tastatur prüfen 53
LASTKEY% letzte Eingabe prüfen 54
4.4Anweisungen zur Datenbank -
Bearbeitung
DBCREATE Datenbank kreieren (erzeugen)
55
DBOPEN Datenbank öffnen 57
DBCLOSEDatenbank schließen 58
DBGET Datensatz lesen 59
DBPUT Datensatz schreiben 61
DBDELETE Datensatz löschen 62
DBBROWSE Datenbank durchblättern 63
4.5Mathematische Funktionen
SIN Sinus 67
COS Cosinus 68
TAN Tangens 69
ATN Arcustangens 70
EXP Exponentialfunktion 71
LOG natürlicher Logarithmus 72
SQR quadratische Wurzel 73
4.6String-Statements und -Funktionen
SET$ Zeichen setzen 74
DELETE$Zeichen löschen 75
4-2
3
Dokumentation FranzBasic
INSERT$Zeichen einfügen 76
INSTR% Teilstring suchen 77
LEFT$ linken Teilstring bilden 78
RIGHT$ rechten Teilstring bilden 79
MID$ Teilstring bilden 80
TRIM$ nachfolgende
Leerstellen abschneiden 81
LTRIM$ führende
Leerstellen abschneiden 82
LCASE$ Lowercase bilden 83
UCASE$ Uppercase bilden 84
LEN% Stringlänge feststellen 85
ASC% ASCII-Wert bilden 86
CHR$ Zeichen aus ASCII-Wert bilden
87
STR$ String aus Zahl bilden 88
VAL Real aus String bilden 89
VAL% Integer aus String bilden 90
4.7Bildschirm-Steuerung
CLS Bildschirm löschen 91
COLOUR Farben einstellen 92
LOCATE Cursor setzen 93
4.8Verschiedenes
REM Kommentar 94
' Kommentar 95
ERROR% Runtime-Error feststellen 96
EXEC externes Programm starten 97
INTERRUPT Interrupt generieren 99
TIMEDATE$ Zeit und Datum feststellen 100
4.9FranzBasic Spezial
FILES Dateien zur Auswahl anbieten 101
4-3
4
Dokumentation FranzBasic
DIALOG Datenerfassung für Variable 103
FORM Datenerfassung für Record 104
MENU Menu erzeugen 106
MESSAGEMeldung erzeugen 108
MOUSE Maus-Steuerung 110
Erläuterungen:
Angaben in rechteckigen Klammern [ ] sind
optional.
--> bedeutet Bildschirmausgabe durch das
Programm
<-- bedeutet Tastatureingabe durch den
Benutzer
Mit Benutzer ist innerhalb des
Referenzteils derjenige gemeint, welcher
die mit FranzBasic erstellten Programme
benutzt, er ist prinzipiell zu
unterscheiden von dem Programmierer,
welcher diese Programme mit FranzBasic
erstellt.
4-4
5
Dokumentation FranzBasic
4.1 Anweisungen zur Daten - Definition
Alle in diesem Kapitel genannten
Programmanweisungen (Statements) sind nicht
ausführbar und dienen der Definition von
Daten und Datentypen.
DIM
Art: Statement
Form:
Dim Name(Länge[,Länge..) [,Name(..)..]
Name: Feldname
Länge: Integer-Konstante
Beschreibung:
'DIM' legt die Größe von Feldern fest.
<Name> ist ein gültiger Variablenname,
<Länge> die Länge des Felds. Bei
nachfolgender Verwendung des Feldes kann
auf die einzelnen Elemente des Feldes durch
Angabe eines Index zwischen 1 und <Länge>
zugegriffen werden. Mehrdimensionale Felder
sind möglich. Der Typ des Feldes wird
bestimmt durch den Typ von <Name>.
Zugelassen als Grundtyp sind alle einfachen
Datentypen. Innerhalb einer 'DIM'-Anweisung
können mehrere Felder definiert werden. Die
einzelnen Definitionen werden durch Komma
getrennt.
4-5
6
Dokumentation FranzBasic
Beispiel:
Dim Int%(10), Str$(20)
Str$(20) = "Zuweisung an Element 20"
If Int%(1) = 0 Then Break
4-6
7
Dokumentation FranzBasic
LOCAL
Art: Statement
Form:
Local Name [,Name...]
Name: Variablenname
Beschreibung:
Die Variable <Name> wird als lokale
Variable innerhalb einer Subroutine
deklariert. Die Variable ist dann
ausserhalb der Subroutine nicht bekannt. Im
Gegensatz dazu sind Variablen die im
Verlauf einer Subroutine ohne vorhergehende
'LOCAL'-Deklaration eingeführt werden
'Global', d.h. auf diese Variable können
auch das Hauptprogramm und andere
Subroutines zugreifen. Als lokal
deklarierte Variablen koexistieren mit
globalen Variablen gleichen Namens, die im
Hauptprogramm oder in anderen Subroutines
erzeugt werden.
'LOCAL'-Anweisungen müssen am Anfang der
Subroutine stehen. Sie dürfen nicht die
Namen der Formalparameter haben. Mehrere
Variablen können durch Kommas getrennt
deklariert werden
4-7
8
Dokumentation FranzBasic
'LOCAL'-Variablen sind flüchtig, d. h.
zwischen zwei Aufrufen der Subroutine
bleibt ihr Wert nicht erhalten. Beim
Eintreten in eine Subroutine ist ihr Wert
unbestimmt.
Beispiel:
Subroutine Sub1(x%)
Local r, a1%
Local s$
...
Endsub
Siehe auch:
STATIC
4-8
9
Dokumentation FranzBasic
STATIC
Art: Statement
Form:
Static Name [,Name...]
Name: Variablenname
Beschreibung:
'STATIC' deklariert wie 'LOCAL' lokale
Variablen. Im Gegensatz zu 'LOCAL'-
Variablen sind 'STATIC'-Variablen
nichtflüchtig, d.h. ihr Wert bleibt
zwischen zwei Subroutine-Aufrufen erhalten.
Bei Programmstart ist ihr Wert 0 bei
numerischen Variablen bzw. "" bei
Stringvariablen, genau wie bei globalen
Variablen
Beispiel:
Static a22%, w#
Siehe auch:
LOCAL
4-9
10
Dokumentation FranzBasic
RECTYPE
Art: Statement
Form:
Rectype Name
Name: Variablen-Name (Real-Konvention)
Beschreibung:
'RECTYPE' definiert einen zusammengesetzten
Datentyp unter dem Typnamen <Name>. Record-
Definitionen durch den Befehl 'RECORD'
beziehen sich auf den hier definierten
Namen <Name>. Die Zusammensetzung des
Records aus einfachen Datentypen wird durch
nachfolgende 'RECVAR'-Anweisungen
definiert. Die Rectype-Definition wird
durch 'ENDREC' abgeschlossen.
<Name> ist ein Variablen-Name nach der
Namens-Konvention für Real-Zahlen, d. h.
ohne Erweiterungszeichen %, &, #, $.
Beispiel:
RECTYPE Artikeltype
RECVAR....
ENDREC
Siehe auch:
RECVAR, ENDREC, RECORD
4-10
11
Dokumentation FranzBasic
RECVAR
Art: Statement
Form:
Recvar Name Länge[:Nkomma] [,Name..]
Name: Variablenname (s. u.)
Länge: Integer-Konstante
Nkomma: Integer-Konstante
Beschreibung:
'RECVAR'-Anweisungen legen die
Zusammensetzung eines Record-Typs aus
einfachen Datentypen fest. Diese bilden die
Elemente des Records bzw des Record-Typs.
Die einzelnen Elemente eines Recordtyps
können einzeln zeilenweise oder mehrere pro
Zeile durch Kommas getrennt definiert
werden. Den Abschluß der Definitionssequenz
bildet eine 'ENDREC'-Anweisung.
<Name> ist ein Variablenname des Typs Real,
Integer oder String. Long und Double sind
nicht erlaubt.
Reals und Integer werden innerhalb von
Records in ASCII-Darstellung erzeugt. Die
Länge der Zahlen ist variabel, deshalb muß
sie bei der Definition mit <Länge>
festgelegt werden. Bei Reals muß zusätzlich
durch einen Doppelpunkt getrennt die Anzahl
der Nachkommastellen mit <Nkomma>
festgelegt werden. Die Zahl der
Vorkommastellen ist dann <Länge>-<Nkomma>.
4-11
12
Dokumentation FranzBasic
Auch Strings haben innerhalb von Records
eine feste Länge, deshalb muß auch hier mit
<Länge> eine maximale Stringlänge
festgelegt werden. Wird einem Recordelement
vom Typ String ein gewöhnlicher String
zugewiesen wird dieser auf die festgelegte
Länge gebracht, entweder durch Abschneiden
überschüssiger Zeichen oder durch Auffüllen
mit Leerzeichen. Beim Zuweisen von String-
Recordelementen an gewöhnliche Strings ist
die Existenz von nachfolgenden Blanks zu
beachten, diese können gegebenenfalls mit
'TRIM$' entfernt werden.
Beispiel
Rectype Atype
...Recvar a% 6
...Recvar summe 8:2
...Recvar str$ 12
Endrec
Record Atype Arec, Arec1
Arec.str$ = "abc"
a$ = Arec.str$
Print "a$=";a$;"!"
-->a$=abc !
(9 Leerzeichen in a$)
Siehe auch:
RECORD
4-12
13
Dokumentation FranzBasic
ENDREC
Art: Statement
Form:
Endrec
Beschreibung:
Die Sequenz der 'RECVAR'-Anweisungen und
damit die Definition eines Record-Typs
durch 'RECTYPE' wird beendet.
Siehe auch:
RECTYPE, RECVAR
4-13
14
Dokumentation FranzBasic
RECORD
Art: Statement
Form:
Record Rtype Name [,Name...]
Rtype: Name eines Recordtyps
Name Name des definierten
Records
Beschreibung:
Durch 'RECORD' wird ein Record mit Namen
<Name> definiert der die Struktur des
Record-Typs <Rtype> hat. Auf die Elemente
des Records <Name> wird zugegriffen durch
Angabe von 'Name.Element', wobei Element
der Name eines Record-Elements laut
'RECVAR'-Anweisungen bei der Definition des
Record-Typs <Rtype> ist.
<Name> ist ein Variablen-Name nach der
Namens-Konvention für Fließkomma-Zahlen, d.
h. ohne Erweiterungszeichen %, &, #, $.
Mit einer 'RECORD' Anweisung können mehrere
Records definiert werden, ihre Namen werden
durch Komma getrennt.
Beispiel:
siehe RECTYPE.
4-14
15
Dokumentation FranzBasic
4.2 Anweisungen zur Programmablaufsteuerung
IF
Art: Statement
Form:
1. If Ausdruck Then Statement
2. If Ausdruck Then
...
[ Elseif Ausdruck Then
...]
[ Else
...]
Endif
Ausdruck: logischer Ausdruck
Statement: einfache
Programmanweisung
... eine oder mehrere
Anweisungen
Beschreibung:
Die 'IF'-Anweisung ist in zwei Formen
möglich. In der ersten Form besteht die
ganze Anweisung aus einer Zeile. Falls der
logische Ausdruck <Ausdruck> WAHR ist wird
die Programm-Anweisung <Statement>
ausgeführt, bei FALSCH wird keine Anweisung
ausgeführt. <Statement> ist eine einfache
Anweisung, d.h. es dürfen nicht mehrere
Anweisungen durch ':' getrennt nach 'THEN'
folgen.
4-15
16
Dokumentation FranzBasic
In der zweiten Form steht hinter 'THEN'
keine Anweisung. Es folgen eine oder
mehrere Zeilen mit Programmanweisungen, bis
die 'IF'-Anweisung mit 'ENDIF'
abgeschlossen wird.
Wahlweise können innerhalb der
'IF'...'ENDIF'-Sequenz eine oder mehrere
'ELSEIF' und eine 'ELSE'-Anweisung stehen.
Nach einer 'ELSE'-Anweisung können keine
'ELSEIF'-Anweisungen mehr folgen. Die
Anweisungen zwischen 'ELSE' und 'ENDIF'
werden ausgeführt wenn sowohl <Ausdruck>
aus der 'IF'-Anweisung als auch <Ausdruck>
aus allen vorhergehenden 'ELSEIF'-
Anweisungen FALSCH sind
Anweisungen die auf eine 'ELSEIF'-Anweisung
folgen werden ausgeführt, wenn <Ausdruck>
der 'ELSEIF'-Anweisung WAHR ist und
<Ausdruck> der 'IF'-Anweisung und
<Ausdruck> aller eventuell vorhergehenden
'ELSEIF'-Anweisungen FALSCH sind. Weiter
folgende 'ELSEIF'-Anweisungen (wenn
vorhanden) werden dann nicht mehr geprüft.
4-16
17
Dokumentation FranzBasic
Beispiel
Input a%
If a% = 1 Then
Gosub Sub1()
Elseif a% = 2 Then
Gosub Sub2()
Elseif a% = 3 Then
Gosub Sub3()
Else
Print "Fehlanzeige"
Endif
4-17
18
Dokumentation FranzBasic
FOR ... ENDFOR
Art: Statement
Form:
For Zähl = Anf To Ende [Step Schritt]
...
Endfor
Zähl: Integer, Real, Long,
Double - Variable
Anf, Ende, Schritt:
Integer, Real, Long, Double
Beschreibung:
Die FOR-Anweisung stellt eine Programm-
Schleife dar. Die Programmanweisungen
zwischen 'FOR' und 'ENDFOR' werden unter
Kontrolle der Variablen <Zähl> wiederholt
durchlaufen. <Zähl> wird zunächst auf den
Wert <Anf> gesetzt. Bei jedem Durchlauf
wird ihr Wert um <Schritt> erhöht. Ist der
Anweisungsteil 'STEP Schritt' nicht
vorhanden, wird 1 als Schrittweite
angenommen. Wenn <Zähl> = <Ende> ist, wird
die Schleife nach dem Durchlauf bei
'ENDFOR' verlassen.
<Anf>, <Ende>, <Schritt> können Konstanten
oder Variablen sein. Sie sollten alle vom
gleichen Typ sein, um Wandlungsoperationen
zwischen den einzelnen Typen zu vermeiden.
4-18
19
Dokumentation FranzBasic
Als <Zähl> und damit entsprechend letztem
Abschnitt auch <Anf>, <Ende>, <Schritt>
sollten nur Integer- oder Long-Variablen
eingesetzt werden, da Real- und Double-
Variablen nur eine beschränkte Genauigkeit
haben. Damit ist der Vergleich ob <Zähl> =
<Ende> ist im allgemeinen nicht korrekt
durchzuführen! Die Schleife wird nicht
beendet und läuft endlos.
Da der Zahlenbereich von Integers im
allgemeinen ausreichend ist, werden sie
bevorzugt als <Zähl> in 'FOR'-Schleifen
eingesetzt.
'FOR'-Schleifen können vorzeitig durch die
'BREAK'-Anweisung verlassen werden. Wird
eine 'BREAK'-Anweisung beim Durchlaufen
einer 'FOR'-Schleife erkannt, wird sofort
zur nächsten Anweisung nach 'ENDFOR'
verzweigt.
Beispiel
For i% = 1 To 20
s% = s% + i%
If s% > 100 Then Break
'Vorzeitiger Abbruch
Print "i%=";i%*10
Endfor
Siehe auch:
BREAK
4-19
20
Dokumentation FranzBasic
WHILE ... WEND
Art: Statement
Form:
While Ausdruck
...
Wend
Ausdruck: Logischer Ausdruck
Beschreibung:
'WHILE' leitet eine Programm-Schleife ein,
die solange durchlaufen wird wie der
logische Ausdruck <Ausdruck> WAHR ist. Ist
<Ausdruck> bei Eintritt in die Schleife
FALSCH, wird diese nicht durchlaufen,
sondern direkt hinter das Ende der
Programmschleife verzweigt. Das Ende der
Programmschleife wird durch 'WEND'
markiert.
Unabhängig vom Ergebnis von <Ausdruck> kann
die Schleife mit 'BREAK' verlassen werden.
Wird eine 'BREAK'-Anweisung beim
Durchlaufen einer 'WHILE'-Schleife erkannt,
wird sofort zur nächsten Anweisung nach
'WEND' verzweigt.
4-20
21
Dokumentation FranzBasic
Beispiel
i% = 0
While i% <= 20
s% = s% + i%
If s% > 100 Then Break
'Vorzeitiger Abbruch
Print "i%=";i%*10
Wend
Siehe auch:
BREAK
4-21
22
Dokumentation FranzBasic
REPEAT ... UNTIL
Art: Statement
Form:
Repeat
...
Until Ausdruck
Ausdruck: Logischer Ausdruck
'REPEAT' leitet eine Programmschleife ein,
die durch 'UNTIL' abgeschlossen wird. Ist
<Ausdruck> bei Überprüfung durch 'UNTIL'
FALSCH wird die Schleife wiederholt, ist
sie WAHR wird die Schleife verlassen und
zur nächsten Anweisung fortgeschritten.
Im Gegensatz zur 'WHILE'-Schleife wird die
'REPEAT'-Schleife immer mindestens einmal
durchlaufen, da über die Wiederholung der
Schleife erst am Schleifenende durch
'UNTIL' entschieden wird.
Wird eine 'BREAK'-Anweisung beim
Durchlaufen einer 'REPEAT'-Schleife
erkannt, wird sofort zur nächsten Anweisung
nach 'UNTIL' verzweigt.
4-22
23
Dokumentation FranzBasic
Beispiel:
i% = 0
Repeat
s% = s% + i%
If s% > 100 Then Break
'Vorzeitiger Abbruch
Print "i%=";i%*10
Until i% > 20
Siehe auch:
BREAK
4-23
24
Dokumentation FranzBasic
BREAK
Art: Statement
Form:
Break
Beschreibung:
Durch 'BREAK' wird die momentan
abgearbeitete Schleife bedingungslos
verlassen. Die Programmausführung wird mit
der nächsten Anweisung nach dem
Schleifenende fortgesetzt.
Ausserhalb von Schleifen ist die Verwendung
von 'BREAK' nicht zugelassen.
Siehe auch:
FOR, WHILE, REPEAT
4-24
25
Dokumentation FranzBasic
STOP
Art: Statement
Form:
Stop
Beschreibung:
'STOP' beendet den Programmablauf. Am Ende
eines Programmtexts braucht 'STOP' nicht zu
stehen, es wird vom Übersetzer automatisch
eingefügt.
Beispiel:
Open "I",#1,"File1"
If error%() <> 0 Then Stop
'Abbruch bei Open-Error
4-25
26
Dokumentation FranzBasic
PAUSE
Art: Statement
Form:
Pause [Str$]
Str$: String
Beschreibung:
'PAUSE' gibt den String <Str$> auf den
Bildschirm aus und hält das Programm an.
Erst wenn der Benutzer eine beliebige Taste
auf der Tastatur gedrückt hat, wird der
Programmablauf fortgesetzt.
Fehlt <Str$> wird stattdessen ein
Doppelpunkt ausgegeben
Beispiel:
Pause "Bitte Diskette in A: einlegen"
4-26
27
Dokumentation FranzBasic
GOTO
Art: Statement
Form:
Goto Label
Beschreibung:
'GOTO' bewirkt eine unbedingte Verzweigung
des Programmablaufs zu der Anweisung,
welche auf die Sprungmarke <Label> folgt.
<Label> ist ein beliebiger alphanumerischer
Name mit einem angehängtem ':'. Auf der
gleichen Zeile darf keine Programmanweisung
stehen.
Beispiel:
If a% = 0 Then Goto Ende
Ende:
Stop
4-27
28
Dokumentation FranzBasic
SUBROUTINE
Art: Statement
Form:
Subroutine Name[([VAR]Par[,...)]]
...
Endsub
Name: Variablenname
VAR: reserviertes Wort
Par: Variablenname
Beschreibung:
'SUBROUTINE' leitet ein Unterprogramm ein.
Alle nachfolgenden Programmanweisungen sind
Bestandteil des Unterprogramms, bis dieses
durch die Anweisung 'ENDSUB' abgeschlossen
wird.
<Name> ist der Name des Unterprogramms, auf
den sich Aufrufe des Unterprogramms
beziehen. Ein Unterprogramm kann sowohl als
Prozedur durch die Anweisung 'GOSUB' als
auch als Funktion in einem arithmetischen
Ausdruck durch Nennung von <Name>
aufgerufen werden. Soll ein Unterprogramm
als Funktion aufgerufen werden (siehe
Beispiel) muss der Unterprogramm-Name
<Name> durch ein Paar runder Klammern
gefolgt werden, auch wenn durch
'SUBROUTINE' ein Unterprogramm ohne
Parameter definiert wird.
4-28
29
Dokumentation FranzBasic
Der Name des Unterprogramms legt auch
seinen Datentyp fest, analog zu den
Namenskonventionen für den Datentype von
Variablen. Dies ist wichtig für
Unterprogramme, die als Funktion in
arithmetischen Ausdrücken aufgerufen werden
sollen und mit 'RETURN' einen Wert
zurückgeben.
Wenn ein Unterprogramm keine Parameter
übernimmt kann <Name> durch ein Paar leerer
runder Klammern '()' gefolgt werden, diese
können jedoch auch fehlen.
Ansonsten werden zwischen runden Klammern
die Formal-Parameter <Par> des
Unterprogramms definiert. Dieses sind
beliebige Variablen (einfache Datentypen,
Felder, Records) die als Platzhalter für
die Aktual-Parameter stehen, die beim
Unterprogrammaufruf übergeben werden. Beim
Aufruf eines Unterprogramms müssen Formal-
und Aktual-Parameter nach Zahl und Art
übereinstimmen. Bei Feldern muss in
Klammern die Anzahl der Dimension des
Feldes angedeutet werden. Soll zum Beispiel
ein zweidimensionales Feld beim
Unterprogrammaufruf übergeben werden, muß
der Formalparameter z. B. 'Feld(,)' heißen.
Bei Records muß das reservierte Word
'RECORD', dann der Record-Type, dann der
Formalparametername angegeben werden (siehe
Beispiel).
Hat das Unterprogramm als Formalparameter
einen einfachen Datentyp, kann dieser beim
Aufruf auch durch ein Feld-Element eines
4-29
30
Dokumentation FranzBasic
Feldes vom gleichen Typ abgedeckt werden
als Aktual-Parameter
Formal-Parameter werden vom Übersetzer wie
lokale Variablen behandelt (siehe 'LOCAL')
und können wie diese innerhalb des
Unterprogramms verarbeitet werden. Einfache
Datentypen werden 'by value' übergeben,
Felder und Records 'by reference'. 'by
value' bedeutet, daß bei
Unterprogrammaufruf eine lokale Kopie des
übergebenen Aktualparameters erzeugt und
der Wert hierin abgelegt wird. Bei Änderung
der Variablen wird die Kopie verändert, das
Original im rufenden Programm bleibt
erhalten. 'by reference' bedeutet, daß die
Adresse des Aktualparameter übergebenen
wird und Änderungen das Original ändern.
Felder und Records lassen sich wegen ihrer
Größe nur 'by reference' übergeben. Bei
einfachen Datentypen läßt sich eine
Übergabe 'by reference' anstelle der
standardmäßigen Übergabe 'by value' durch
Angabe des reservierten Wortes 'VAR' vor
dem Namen des Formal-Parameter by der
'SUBROUTINE'-Deklaration erzwingen. Diesen
Formal-Parametern dürfen dann beim
Unterprogramm-Aufruf keine Konstanten
übergeben werden!
Ein Unterprogramm muß definiert sein, bevor
sein Name im Programmtext als Aufruf
erscheint. Unterprogramme können von
anderen Unterprogrammen gerufen werden.
4-30
31
Dokumentation FranzBasic
Beispiel:
Dim areal(10,10)
Subroutine Sub1%(a$, a(,), b%, Record
Rtype R)
Local i%, d%
d% = 0
For i% = 1 To b%
d% = d% + a(i%,i%)
Endfor
Print a$
Return d%
Endsub
Gosub Sub1(meldung$(23), areal, 5, R1)
Dgnl% = Sub1("Funktion", areal, 3, R1)
Dieses Beispiel zeigt ein Unterprogramm von
Typ Integer. Es zeigt sowohl Eigenschaft
einer Funktion, indem es eine Wert
zurückgibt, der in arithmetischen
Ausdrücken verarbeitet wird, als auch
Eigenschaften einer Prozedur, indem es eine
Meldung ausgibt, ohne das das rufende
Programm dieses unmittelbar gewahr wird.
Siehe auch:
GOSUB, RETURN
4-31
32
Dokumentation FranzBasic
RETURN
Art: Statement
Form:
Return Wert
Wert: Variable, Konstante
Beschreibung:
'RETURN' beendet ein Unterprogramm und gibt
dem aufrufenden Programmteil den Wert
<Wert> zurück. 'RETURN' kann am Ende eines
Unterprogramms stehen, aber auch an
beliebiger Stelle für einen vorzeitigen
Abbruch. Ein Unterprogramm braucht keine
'RETURN'-Anweisung zu enthalten, es wird
dann an der 'ENDSUB'-Anweisung beendet.
Der Datentyp von <Wert> muß mit dem
Datentyp des Unterprogramms übereinstimmen.
Außerhalb von Unterprogrammen ist 'RETURN'
nicht zugelassen.
4-32
33
Dokumentation FranzBasic
Beispiel:
Subroutine Sub2%()
...
If ... Then Return 0.0
...
Return a
Endsub
Siehe auch:
SUBROUTINE
4-33
34
Dokumentation FranzBasic
GOSUB
Art: Statement
Form:
Gosub Name[([Par][,...])]
Beschreibung:
'GOSUB' ruft das Unterprogramm <Name> auf.
Die Programmabarbeitung verzweigt zum
ersten ausführbaren Befehl des
Unterprogramms. Nach Beenden des
Unterprogramms durch 'ENDSUB' oder 'RETURN'
wird die Programausführung mit der nächsten
auf 'GOSUB' folgenden Programmanweisung
fortgeführt.
Hat das gerufene Unterprogramm <Name> keine
Parameter, so kann an den Namen ein Paar
leerer runder Klammern angehängt werden,
diese können entfallen. Hat das
Unterprogramm Parameter, dann werden die
als Aktualparameter zu übergebenden
Variablen zwischen runden Klammern durch
Komma getrennt aufgezählt. Ihre Anzahl und
die Datentypen müssen mit der Anzahl und
den Datentypen der Formalparameter des
Unterprogramms übereinstimmen.
4-34
35
Dokumentation FranzBasic
Beispiel:
siehe 'SUBROUTINE'
Siehe auch:
SUBROUTINE, RETURN
4-35
36
Dokumentation FranzBasic
4.3 Befehle zur Dateibearbeitung
inklusive Dateneingabe über Tastatur und
Datenausgabe auf Bildschirm und Drucker.
OPEN
Art: Statement
Form:
Open IO, Kennung, Name[, Rec]
IO: String
Kennung: s. u.
Name$: String
Rec: Record-Type
Beschreibung:
Die Datei <Name$> wird zur Bearbeitung
geöffnet. <Name$> kann ein
vollqualifizierter Dateiname sein mit
Angabe von Laufwerk und Verzeichnis. <IO>
ist ein String aus einem einzelnen Zeichen,
das die gewünschte Dateibearbeitung
festlegt:
- "I" INPUT Datei wird gelesen
- "O" OUTPUT Datei wird geschrieben
- "U" UPDATE Datei wird gelesen und
geschrieben
- "R" RANDOM Random-Datei
Kennung ist ein '#' gefolgt von einer
Ganzzahl zwischen 1 und 250. Nachfolgende
4-36
37
Dokumentation FranzBasic
Lese- oder Schreibzugriffe erfolgen nicht
über den Dateinamen <Name$>, sondern über
diese Kennung. Solange die Datei geöffnet
ist darf mit der gleichen Kennung keine
weitere Datei geöffnet werden.
Für Input geöffnete Dateien werden mit den
Befehlen 'INPUT' und 'LINE INPUT' gelesen,
für Output geöffnete Dateien werden mit
'PRINT' oder 'WRITE' beschrieben. Die
Anzahl der mit einem Zugriff gelesenen bzw.
geschriebenen Zeichen ist beliebig und kann
schwanken. Für Update geöffnete Dateien
können gelesen und geschrieben werden. Die
Lese- und Schreib-Aktionen findet immer an
der Stelle der Datei statt, die bei der
vorhergehenden Aktion erreicht wurde.
Wird das Ende einer für Input oder Update
geöffneten Datei erreicht, werden keine
Zeichen gelesen und ein Runtime-Error
generiert, der mit der Funktion 'ERROR%'
festgestellt werden kann.
Eine für Input oder Update zu öffnende
Datei muß vorhanden sein, ansonsten wird
ein Runtime-Error generiert. Eine für
Output zu öffnende Datei wird neu kreiert,
eine eventuell vorhandene wird dabei
inhaltlich gelöscht.
Die Angabe von <Rec> erfolgt nur für
Random-Dateien. Aus dem Record-Type
übernimmt der Übersetzer die Satzlänge.
Random-Dateien können nach dem Öffnen
sowohl gelesen ('GET') als auch geschrieben
4-37
38
Dokumentation FranzBasic
('PUT') werden, jedoch nur mit Sätzen
fester Länge.
Runtime-Errors: 1, 4
Beispiel:
Open "I", #1, "c:\Mverz\Fakt.txt"
Rectype Arttype
...
Endrec
Open "R", #9, "artikel.dat", Arttype
Siehe auch:
CLOSE, INPUT, LINE INPUT, PRINT, WRITE,
GET, PUT
4-38
39
Dokumentation FranzBasic
CLOSE
Art: Statement
Form:
Close Kennung
Kennung: siehe 'OPEN'
Beschreibung:
Die mit 'OPEN' unter <Kennung> geöffnete
Datei wird geschlossen. Es können keine
weiteren Lese- oder Schreib-Operationen
stattfinden. <Kennung> darf wieder zur
Öffnung anderer Dateien verwendet werden.
Beispiel:
Close #3
Siehe auch:
OPEN
4-39
40
Dokumentation FranzBasic
INPUT
Art: Statement
Form:
1. Input [Prompt$;]Var [,Var...]
2. Input Kennung, Var [,Var...]
Prompt$: String
Var: Variable
Kennung: siehe 'OPEN'
Beschreibung:
'INPUT' liest Daten über Tastatur (1. Form)
oder aus Dateien ein (2. Form). Zum
Einlesen aus einer Datei wird die Kennung
einer zuvor geöffneten Datei angegeben,
ansonsten wird die Eingabe über Tastatur
erwartet.
Bei Tastatureingabe kann der String
<Prompt$> als Aufforderung zur Eingabe
eingesetzt werden, fehlt er so wird mit
einem ':' zur Eingabe aufgefordert.
Es werden Daten im ASCII-Format erwartet.
Als Trennzeichen zwischen den Variablen
werden ',' und 'CR' (Zeilenende) erkannt.
Man kann die Variablen auch durch ein Paar
Anführungszeichen "..." einrahmen. Bei
String-Daten können die Strings dann auch
Kommas enthalten, die ansonsten als
Trennzeichen behandelt würden.
4-40
41
Dokumentation FranzBasic
Runtime-Errors: 2
Beispiel:
Input "Bitte drei Zahlen";a%,b%,c%
-->Bitte drei Zahlen:
<--1,2,3
Print a%,b%,c%
1 2 3
Input #1, a%, b%, c%
Siehe auch:
OPEN, LINE INPUT
4-41
42
Dokumentation FranzBasic
LINE INPUT
Art: Statement
Form:
1. Line Input [Prompt$;]Var [,Var...]
2. Line Input Kennung, Var [,Var...]
Prompt$: String-Konstante
Var: Variable
Kennung: siehe 'OPEN'
Beschreibung:
'LINE INPUT' arbeitet wie 'INPUT', mit dem
Unterschied, das als Trennzeichen nur 'CR'
(Zeilenende) gewertet wird.
Runtime-Errors: 2
4-42
43
Dokumentation FranzBasic
Beispiel:
Line Input "Bitte 3 Wörter";a$,b$,c$
-->Bitte 3 Wörter:
<--abc
-->:
<--2,2
-->:
<--123
Print a$,b$,c$
abc 2,2 123
Input #1, a%, b%, c%
Siehe auch:
OPEN, INPUT
4-43
44
Dokumentation FranzBasic
PRINT
Art: Statement
Form:
1. Print Data [,Data...]
2. Print Kennung, Data [,Data...]
Data: Variable, Konstante
Kennung: siehe OPEN.
Beschreibung:
'PRINT' gibt Daten auf den Bildschirm (1.
Form) oder in eine Datei aus (2. Form). Die
Daten werden in ASCII-Form ausgegeben.
Werden die einzelnen Ausgabedaten <Data>
durch Kommas getrennt, werden die Daten auf
Spalten positioniert mit einer
Spaltenbreite von 12 Zeichen. Werden statt
Kommas Semikolons gesetzt, werden die Daten
ohne Zwischenraum hintereinandergesetzt.
Folgt hinter dem letzten <Data> ein Komma
oder Semikolon, wird beim nächsten 'PRINT'
an der aktuellen Stelle weiter ausgegeben,
ansonsten wird ein 'CR' (Zeilenende)
erzeugt. Der nächste 'PRINT' beginnt dann
auf einer neuen Zeile.
Die Ausgabedaten <Data> können durch die
Klausel 'USING' gefolgt von einer
Ausgabemaske vor der Ausgabe aufbereitet
werden. Die Ausgabemaske kann die Zeichen
'#',',' und '.' enthalten. '.' markiert den
4-44
45
Dokumentation FranzBasic
Dezimalpunkt, '#' ist ein Platzhalter für
ein beliebiges Zeichen aus dem
auszugebenden <Data>, ',' sind Tausender-
Trennzeichen, welche gegebenenfalls in die
Zeichenfolge für <Data> eingefügt werden.
Die Ausgabemaske gilt solange für jedes
<Data> bis eine neue definiert wird oder
mit 'USING ""' die Ausgabemaske intern
gelöscht wird.
Runtime-Errors: 2
Beispiel:
Print "123";"456","789"
-->123456 789
A = 1000.0
Print A,Using"##,###.##";A
-->1000.000000 1,000.00
Siehe auch:
OPEN, WRITE, LPRINT
4-45
46
Dokumentation FranzBasic
LPRINT
Art: Statement
Form:
Lprint Data [,Data...]
Data: Variable, Konstante
Beschreibung:
'LPRINT' arbeitet wie 'PRINT' in der 1.
Form, gibt jedoch die Daten nicht auf dem
Bildschirm sondern auf dem Drucker aus.
4-46
47
Dokumentation FranzBasic
WRITE
Art: Statement
Form:
Write Kennung, Data [,Data...]
Beschreibung:
Wie 'PRINT' in der zweiten Form gibt
'WRITE' Daten in Dateien aus. Kommas
zwischen den einzelnen <Data> bewirken
jedoch keine Spalteneinteilung, sondern
eine Ausgabe von Kommas in die Datei. Beim
Wiedereinlesen der Datei mit Input können
diese dann als Trennzeichen interpretiert
werden.
Semikolons werden wie Kommas behandelt.
Steht am Zeilenende kein Komma (Semikolon),
wird eine neue Ausgabezeile erzeugt (CR),
sonst ein Komma ausgegeben und bei der
nächsten Ausgabe-Anweisung an dieser Stelle
fortgesetzt.
Strings werden mit einem Paar
Anführungszeichen "..." ausgegeben, um
eventuell im String enthaltene Kommas beim
Wiedereinlesen nicht als Trennzeichen
wirken zu lassen (siehe 'INPUT').
Runtime-Errors: 2
4-47
48
Dokumentation FranzBasic
Beispiel:
A = 100.0 : A$ = "ABC,DEF"
Write #2,A,A$,12
-->100.0,"ABC,DEF",12 (in Datei)
siehe auch:
INPUT, PRINT
4-48
49
Dokumentation FranzBasic
GET
Art: Statement
Form:
Get Kennung, Satznr%, Satz
Kennung: siehe 'INPUT'
Satznr%: Integer
Satz: Record
Beschreibung:
'GET' liest Daten aus einer Random-Datei.
Die Datei muß mit 'OPEN' als Random-Datei
geöffnet werden. Random-Dateien bestehen
aus Sätzen fester Länge. Die Sätze werden
als Ganzes gelesen und geschrieben. Sätze
werden durch eine Satznummer identifiziert.
Der mit 'GET' aus der Datei gelesene Satz
mit Satznummer <Satznr%> wird im Record
<Satz> abgelegt.
Runtime-Errors: 2, 3
Beispiel:
Get #3,101,Asatz
Siehe auch:
PUT, OPEN
4-49
50
Dokumentation FranzBasic
PUT
Art: Statement
Form:
Put Kennung, Satznr%, Satz
Kennung: siehe 'INPUT'
Satznr%: Integer
Satz: Record
Beschreibung:
'PUT' schreibt Sätze fester Länge in eine
Random-Datei. Die Datei muß als Random-
Datei geöffnet werden (siehe OPEN). Die
Daten aus dem Record <Satz> werden unter
der Satznummer <Satznr%> gespeichert.
Runtime-Errors: 2, 3
Beispiel:
Put #2,999,Asatz
Siehe auch:
INPUT, GET
4-50
51
Dokumentation FranzBasic
ERASE
Art: Statement
Form:
Erase Name$
Name$: String
Beschreibung:
'ERASE' löscht von der Platte die Datei
<Name$>. <Name$> kann ein
vollqualifizierter Pfadname mit Angabe von
Laufwerk und Verzeichnis sein.
Beispiel:
Erase "c:\mverz\abc.txt"
4-51
52
Dokumentation FranzBasic
RENAME
Art: Statement
Form:
Rename Alt$, Neu$
Alt$: String
Neu$: String
'RENAME' benennt eine Datei um. <Alt$> ist
der bestehende Name einer Datei. Dieser
Name kann Laufwerk und Verzeichnis
enthalten. <Neu$> ist der neue Dateiname,
er darf weder Laufwerk noch Verzeichnis
enthalten, da diese Angaben von <Alt$>
übernommen werden.
Beispiel:
Rename "c:\mverz\abc", "123"
4-52
53
Dokumentation FranzBasic
INKEY$
Art: Statement
Form:
Inkey$ Str$
Str$: Stringvariable
Beschreibung:
'INKEY$' stellt fest, ob seit der letzen
'INPUT'- oder 'INKEY$'-Anweisung ein
Zeichen über Tastatur eingeben wurde. Wenn
ja, wird dieses Zeichen in <Str$>
zurückgegeben, wenn nein wird eine leere
Zeichenkette "" zurückgegeben. 'INKEY$'
wartet also nicht auf eine Eingabe wie
'INPUT', sondern kehrt sofort zurück.
Beispiel:
Inkey$ a$
If a$ <> "" Then Break
4-53
54
Dokumentation FranzBasic
LASTKEY%
Art: Funktion
Form:
Lastkey%()
Beschreibung:
'LASTKEY%' stellt fest, welches Zeichen
zuletzt von einer Programmanweisung über
Tastatur eingelesen wurde. 'LASTKEY%'
stellt also ein Zeichen zur Verfügung, das
bereits von einer anderen Anweisung
bearbeitet wurde. Dies ist nützlich in
Zusammenarbeit mit Befehlen wie 'MENU' oder
'MESSAGE', die auf bestimmte
Benutzereingaben hin beendet werden. Mit
'LASTKEY%' lässt sich die letzte Eingabe
zur Bearbeitung holen.
Beispiel:
Menu MString$
If lastkey%() = 27 Then Return
' 27 = ESC
siehe auch:
MENU, MESSAGE
4-54
55
Dokumentation FranzBasic
4.4 Anweisungen zur Datenbank - Bearbeitung
Runtime-Fehler für Datenbank-Befehle: 20-31
DBCREATE
Art: Statement
Form:
Dbcreate Name$, Rec
Name$: String
Rec: Record-Type
Beschreibung:
'DBCREATE' erzeugt eine dBase-III-
kompatible Datenbank. <Name> ist der Name
der Datenbank. Sie besteht aus den Dateien
<Name>.dbf und <Name>.ndx. Die Struktur der
Datenbank hat die Struktur des Record-
Type's <Rec>.
Mit 'DBCREATE' wird die Datenbank nicht
gleichzeitig geöffnet.
Mit 'ERASE' kann die Datenbank durch
Löschen Ihrer beiden Dateien wieder
gelöscht werden.
4-55
56
Dokumentation FranzBasic
Beispiel:
Rectype Arttype
...
Endrec
Dbcreate "Artikel",Arttype
4-56
57
Dokumentation FranzBasic
DBOPEN
Art: Statement
Form:
Dbopen Kennung, Name$
Kennung: s. u.
Name$: String
Beschreibung:
Die Datenbank <Name$> wird durch 'DBOPEN'
zur Bearbeitung geöffnet.
Kennung ist ein '#' gefolgt von einer
Ganzzahl zwischen 1 und 4. Maximal vier
Datenbanken können gleichzeitig geöffnet
werden. Nachfolgende Lese- oder
Schreibzugriffe erfolgen nicht über den
Datenbanknamen <Name$>, sondern über diese
Kennung. Solange die Datenbank geöffnet ist
darf mit der gleichen Kennung keine weitere
Datenbank geöffnet werden. Es dürfen jedoch
einfache Dateien mit einer gleichlautenden
Kennung geöffnet werden, da zwischen
Dateien-Kennung und Datenbank-Kennung
unterschieden wird.
Beispiel:
Dbopen #2,"Artikel"
Siehe auch:
DBCREATE, DBCLOSE
4-57
58
Dokumentation FranzBasic
DBCLOSE
Art: Statement
Form:
Dbclose Kennung
Kennung: siehe 'DBOPEN'
Beschreibung
Die Datenbank <Kennung> wird durch
'DBCLOSE' geschlossen. Eine weitere
Bearbeitung innerhalb des Programms ist
nicht möglich. Unter <Kennung> können jetzt
andere Datenbanken geöffnet werden.
Beispiel:
Dbclose #2
Siehe auch:
DBOPEN
4-58
59
Dokumentation FranzBasic
DBGET
Art: Statement
Form:
Dbget Kennung, Schlüssel$, Satz
Kennung: s. 'DBOPEN'
Schlüssel$:String
Satz: Record
Beschreibung:
Mit 'DBGET' wird ein Datensatz aus der
Datenbank gelesen, die unter <Kennung>
geöffnet wurde. Es wird derjenige Satz in
den Record <Satz> gelesen, dessen
Schlüsselfeld mit dem Inhalt des Strings
<Schlüssel$> übereinstimmt. In FranzBasic
ist das Schlüsselfeld immer das erste
Element des Record-Types, mit dem bei
'DBCREATE' die Datenbank kreiert wurde. Der
Record <Satz> sollte sinnvollerweise von
diesem Record-Type sein, ansonsten ist das
Verhalten von 'DBGET' unbestimmt.
Ist in der Datenbank kein Satz mit dem
Schlüssel <Schlüssel$> vorhanden, so wird
der Satz mit dem nächst größeren Schlüssel
(im lexikalischen Sinn) nach <Satz> geladen
und ein Runtime-Error gesetzt.
Sonderfälle:
Einige Werte von <Schlüssel$> werden nicht
als Satzschlüssel interpretiert, sondern
4-59
60
Dokumentation FranzBasic
als Steuerungsinformation. Sie dienen der
absoluten und relativen Positionierung in
der Datenbank.
"^" Lesen ersten Satz
"*" Lesen letzten Satz
"+" Lesen nächsten Satz
"-" Lesen voherigen Satz
"+" und "-" lesen Datensätze, die in
lexikalischer Reihenfolge Nachfolger bzw.
Vorgänger des zuletzt gelesenen Satzes sind
und erlauben somit ein sequentielles
Bearbeiten der Datenbank. "^" und "*"
erlauben die Positionierung auf Anfang und
Ende der Datenbank. Beim Öffnen einer
Datenbank ist diese automatisch auf den
Anfang positioniert.
Beispiel:
Dbget #2,"4711", Artikelsatz
Siehe auch:
DBOPEN, DBPUT
4-60
61
Dokumentation FranzBasic
DBPUT
Art: Statement
Form:
Dbput Kennung, Satz
Kennung: s. 'DBOPEN'
Satz: Record
Beschreibung:
'DBPUT' schreibt den Inhalt des Records
<Satz> in die Datenbank <Kennung>. Als
Schlüssel dient das erste Element des
Records <Satz>. Der Schlüssel kann beliebig
sein, beim Schreiben braucht keine
Reihenfolge eingehalten werden.
Beispiel:
Dbput #2, Artikelsatz
Siehe auch:
DBOPEN, DBPGET
4-61
62
Dokumentation FranzBasic
DBDELETE
Art: Statement
Form:
Dbdelete Kennung
Kennung: s. 'DBOPEN'
Beschreibung:
'DBPUT' löscht den zuletzt mit 'DBGET'
gelesenen Datensatz der Datenbank
<Kennung>. Achtung: ist der Satz, der von
'DBGET' gelesen werden soll nicht
vorhanden, wird der nächste Satz geladen.
Dieser würde dann auch mit 'DBDELETE'
gelöscht! Sicherheitshalber sollte mit
'ERROR%()' die korrekte Ausführung des
Lesebefehls 'DBGET' überprüft werden.
Beispiel:
Dbget #1,"4711", Artikelsatz
If Error%() = 0 Then
Dbdelete #1
Else
Print "Satz 4711 nicht vorhanden"
Endif
4-62
63
Dokumentation FranzBasic
DBBROWSE
Art: Statement
Form:
Dbbrowse Ken[, St$, Form$, x%, y%, z%]
Ken: Dateikennung
St$: String
Form$: String
x%: Integer
y%: Integer
z%: Integer
Beschreibung:
'DBBROWSE' ermöglichst das Durchblättern
(Browsing) einer Datenbank in
tabellarischer Darstellung am Bildschirm.
<Ken> ist die Dateikennung der zu
bearbeitenden Datenbank, welche zuvor mit
'DBOPEN' geöffnet werden muß. Die weiteren
Angaben sind optional.
Soll das Durchblättern nicht vom ersten
Satz der Datenbank an erfolgen, kann durch
<St$> der Schlüssel des Startsatzes
angegeben werden. Existiert der Satz nicht
(oder ist <St$> ein Teilschlüssel) beginnt
die Ausgabe beim nächsten Satz.
Standardmäßig wird der komplette Datensatz
angezeigt, begrenzt auf die Breite des
Bildschirms, überzählige Zeichen werden
abgeschnitten. Mit <Form$> können die
4-63
64
Dokumentation FranzBasic
einzelnen Elemente des Datensatzes in der
Breite eingestellt oder ganz ausgelassen
werden, um grosse Datensätze in sinnvoller
Darstellung zeigen zu können. Dazu gibt man
die erwünschten Spaltenbreiten für die
Elemente des Datensatzes nacheinander durch
Komma getrennt als String an:
<Form$>: "n[,n...]"
mit n: Integer
<x%> und <y%> geben den linken oberen
Eckpunkt des Fensters auf dem Bildschirm
an, in dem die Datenbank gelistet wird.
<z%> gibt die Anzahl der gleichzeitig
dargestellten Datensätze an. Bei Fehlen von
<x%>, <y%>, <z%> werden Standardwerte
verwendet.
Bedienung:
PgUp/BildAuf: Zurückblättern
ESC: Beenden
beliebige Taste: Weiterblättern
Beispiel:
Dbopen #2,"Personal"
Dbbrowse #2,"Müller","12,,8",4,6,10
Dbclose #2
Datenbank #2 wird geblättert ab Satz mit
Schlüssel "Müller". Die Spaltenbreiten
werden zur Darstellung mit 12 Zeichen für
das erste Element (=Satzschlüssel), 0
Zeichen für das zweite Element - d.h.
dieses Element wird nicht dargestellt - und
8 Zeichen für das dritte Element. Alle
4-64
65
Dokumentation FranzBasic
weiteren Elemente des Datensatzes werden
mit ihrer Standardbreite angezeigt, sofern
sie innerhalb des Bildschirms bleiben.
4-65
66
Dokumentation FranzBasic
4.5 Mathematische Funktionen
Alle mathematische Funktionen nehmen eine
numerische Konstante oder Variable
(vorzugsweise vom Datentyp Real) als
Argument und liefern ein Funktionsergebnis
vom Datentyp Real. Wird ein anderer
Datentyp als Real als Argument gegeben,
wird intern eine Typwandlung durchgeführt
unter Verbrauch von Speicherplatz und
Rechenzeit durchgeführt.
Einige Funktionen verlangen den Wert des
Arguments in Radian. Es gilt:
PI Radian = 360 Grad
4-66
67
Dokumentation FranzBasic
SIN
Art: Funktion
Form:
Sin(y)
y: numerische Variable
Beschreibung:
'SIN' ermittelt den Sinus-Wert des
Funktionsarguments <y>. Der Wert von <y>
muß in Radians gegeben sein.
4-67
68
Dokumentation FranzBasic
COS
Art: Funktion
Form:
Cos(y)
y: numerische Wert
Beschreibung:
'COS' ermittelt den Cosinus-Wert des
Funktionsarguments <y>. Der Wert von <y>
muß in Radians gegeben sein.
4-68
69
Dokumentation FranzBasic
TAN
Art: Funktion
Form:
Tan(y)
y: numerischer Wert
Beschreibung:
'TAN' ermittelt den Tangens-Wert des
Funktionsarguments <y>. Der Wert von <y>
muß in Radians gegeben sein.
4-69
70
Dokumentation FranzBasic
ATN
Art: Funktion
Form:
Atn(y)
y: numerischer Wert
Beschreibung:
'ATN' ermittelt den Arcustangens-Wert des
Funktionsarguments <y>. Das Ergebnis liegt
im Bereich -PI/2 bis + PI/2.
4-70
71
Dokumentation FranzBasic
EXP
Art: Funktion
Form:
Exp(y)
y: numerischer Wert
Beschreibung:
'EXP' ermittelt den Exponential-Wert des
Funktionsarguments <y>.
4-71
72
Dokumentation FranzBasic
LOG
Art: Funktion
Form:
Log(y)
y: numerischer Wert
Beschreibung:
'LOG' ermittelt den natürlichen Logarithmus
des Funktionsarguments <y>. Der Wert von
<y> muß größer als Null sein.
4-72
73
Dokumentation FranzBasic
SQR
Art: Funktion
Form:
Sqr(y)
y: numerischer Wert
Beschreibung:
'SQR' ermittelt die quadratische Wurzel
des Funktionsarguments <y>. Der Wert von
<y> darf nicht negativ sein.
4-73
74
Dokumentation FranzBasic
4.6 String-Statements und -Funktionen
SET$
Art: Statement
Form:
Set$ String$, Index%, Teilstring$
String$: Stringvariable
Index%: Integer
Teilstring$: String
Beschreibung:
'SET$' überschreibt die Zeichen der
Stringvariablen <String$> mit Zeichen aus
dem String <Teilstring$>. <Index%> ist die
Stelle innerhalb von <String$>, wo das
erste Zeichen von <Teilstring$> plaziert
wird. Das Überschreiben vergrößert die
ursprüngliche Länge von <String$>, wenn die
Länge von <Teilstring$> das erfordert.
Beispiel:
A$ = "ABcd" : Teil$ = "xx"
Set$ A$,2,Teil$
Print A$
-->Axxd
Siehe auch:
INSERT$
4-74
75
Dokumentation FranzBasic
DELETE$
Art: Statement
Form:
Delete$ String$, Index%, Anzahl%
String$: Stringvariable
Index%: Integer
Anzahl%: Integer
Beschreibung:
'DELETE$' löscht in der Stringvariablen
<String$> ab der Stelle <Index%> <Anzahl%>
Zeichen. <String$> wird entsprechend
kürzer.
Beispiel:
A$ = "ABcd"
Delete A$,2,2
Print A$
-->Ad
4-75
76
Dokumentation FranzBasic
INSERT$
Art: Statement
Form:
Insert$ String$, Index%, Teilstring$
String$: Stringvariable
Index%: Integer
Teilstring$: String
Beschreibung:
'INSERT$' fügt <Teilstring$> an der Stelle
<Index%> in <String$> ein.
Beispiel:
A$ = "Ad" : Teil$ = "Bc"
Insert$ A$,2,Teil$
Print A$
-->ABcd
Siehe auch:
SET$
4-76
77
Dokumentation FranzBasic
INSTR%
Art: Funktion
Form:
Instr%(String$, Teilstring$)
String$: String
Teilstring$: String
Beschreibung:
'INSTR%' prüft ob <Teilstring$> in
<String$> enthalten ist. Wenn ja, gibt
'INSTR%' die Stelle innerhalb von <String$>
zurück, an der <Teilstring$> beginnt.
Andernfalls wird 0 zurückgegeben.
Beispiel:
A$ = "ABcd"
index% = Instr% (A$,"Bc")
Print index%
-->2
4-77
78
Dokumentation FranzBasic
LEFT$
Art: Funktion
Form:
Left$(String$, Anzahl%)
String$: String
Anzahl%: Integer
Beschreibung:
'LEFT$' bildet aus dem 'linken' Teil von
<String$> einen Teilstring der Länge
<Anzahl%>, d.h. die ersten <Anzahl%>
Zeichen bilden den zurückgegebenen neuen
String. <String$> bleibt unverändert.
Beispiel:
A$ = Left$("ABcd",2)
Print A$
-->AB
Siehe auch:
RIGHT$, MID$
4-78
79
Dokumentation FranzBasic
RIGHT$
Art: Funktion
Form:
Right$(String$, Anzahl%)
String$: String
Anzahl%: Integer
Beschreibung:
'RIGHT$' bildet aus dem 'rechten' Teil von
<String$> einen Teilstring der Länge
<Anzahl%>, d.h. die letzten <Anzahl%>
Zeichen bilden den zurückgegebenen neuen
String. <String$> bleibt unverändert.
Beispiel:
Print Right$("ABcd",2)
-->cd
Siehe auch:
LEFT$, MID$
4-79
80
Dokumentation FranzBasic
MID$
Art: Funktion
Form:
Mid$(String$, Index%, Anzahl%)
String$: String
Index%: Integer
Anzahl%: Integer
Beschreibung:
'MID$' bildet aus <String$> einen
Teilstring der Länge <Anzahl%> beginnend ab
Zeichen <Index%>.
Beispiel:
A$ = "ABcd"
A$ = Mid$(A$,2,2)
Print A$
-->Bc
Siehe auch:
LEFT$, RIGHT$
4-80
81
Dokumentation FranzBasic
TRIM$
Art: Funktion
Form:
Trim$(String$)
String$: String
Beschreibung:
'TRIM$' schneidet von <String$> eventuell
vorhandene nachfolgende Leerstellen ab.
Beispiel:
Rectype Rtype
Recvar A$ 12
Endrec
Record Rtype R
R.a$ = "123"
B$ = R.a$+"!"
Print B$
-->123 !
B$ = Trim$(R.a$)+"!"
Print B$
-->123!
Siehe auch:
LTRIM$
4-81
82
Dokumentation FranzBasic
LTRIM$
Art: Funktion
Form:
Ltrim$(String$)
String$: String
Beschreibung:
'LTRIM$' schneidet von <String$> eventuell
vorhandene führende Leerstellen ab.
Beispiel:
B$ = " 123"
Print B$
--> 123
B$ = Trim$(B$)
Print B$
-->123
Siehe auch:
TRIM$
4-82
83
Dokumentation FranzBasic
LCASE$
Art: Funktion
Form:
Lcase$(String$)
String$: String
Beschreibung:
'LCASE$' wandelt alle Großbuchstaben in
<String$> in Kleinbuchstaben im
zurückgegebenen String. <String$> bleibt
unverändert.
Beispiel:
B$ = "ABcd"
Print B$
-->ABcd
B$ = Lcase(B$)
Print B$
-->abcd
Siehe auch:
UCASE$
4-83
84
Dokumentation FranzBasic
UCASE$
Art: Funktion
Form:
Ucase$(String$)
String$: String
Beschreibung:
'UCASE$' wandelt alle Kleinbuchstaben in
<String$> in Großbuchstaben im
zurückgegebenen String. <String$> bleibt
unverändert.
Beispiel:
Print Ucase$("ABcd")
-->ABCD
Siehe auch:
LCASE$
4-84
85
Dokumentation FranzBasic
LEN%
Art: Funktion
Form:
Len%(String$)
String$: String
Beschreibung:
'LEN%' ermittelt die Länge von <String$>,
d.h. die Anzahl der enthaltenen Zeichen.
Beispiel:
Print Len%("ABcd")
-->4
4-85
86
Dokumentation FranzBasic
ASC%
Art: Funktion
Form:
Asc%(String$)
String$: String
Beschreibung:
'ASC%' liefert den ASCII-Zahlenwert des
ersten Zeichens von <String$>.
Beispiel:
Print Asc%("ABcd")
-->65
Siehe auch:
CHR$
4-86
87
Dokumentation FranzBasic
CHR$
Art: Funktion
Form:
Chr$(n%)
n%: Integer
Beschreibung:
'CHR$' wandelt den Wert von <n%> in ein
Zeichen laut ACSII-Tabelle. Umkehrfunktion
zu 'ASC%'
Beispiel:
Print Chr$(65)
-->A
Siehe auch:
ASC%
4-87
88
Dokumentation FranzBasic
STR$
Art: Funktion
Form:
Str$(n%)
n%: numerische Konstante / Variable
Beschreibung:
'STR$' macht aus der Zahl <n%> eine
Zeichenkette.
Beispiel:
A$ = "**"+Str$(100.0)+"KG"
Print A$
-->**100.000000KG
Siehe auch:
VAL%, VAL
4-88
89
Dokumentation FranzBasic
VAL
Art: Funktion
Form:
Val(String$)
String$: String
Beschreibung:
'VAL' wandelt <String$> in eine Realzahl.
Zusammen mit 'VAL%' Umkehrfunktion zu
'STR$'.
Beispiel:
R = 100.0 + VAL("10.0")
Print R
-->110.000000
Siehe auch:
VAL%, STR$
4-89
90
Dokumentation FranzBasic
VAL%
Art: Funktion
Form:
Val%(String$)
String$: String
Beschreibung:
'VAL%' wandelt <String$> in eine
Integerzahl. Zusammen mit 'VAL'
Umkehrfunktion zu 'STR$'.
Beispiel:
N% = 100 + VAL("10")
Print N%
-->110
Siehe auch:
VAL, STR$
4-90
91
Dokumentation FranzBasic
4.7 Bildschirm-Steuerung
CLS
Art: Statement
Form:
Cls [n]
n: Integer
Beschreibung:
'CLS' löscht den Bildschirm. Ist ein
Integer <n> zwischen 1 und 255 angegeben,
wird der Bildschirm mit dem entsprechenden
Zeichen laut ASCII-Zeichensatz gefüllt.
Beispiel:
Cls 176
4-91
92
Dokumentation FranzBasic
COLOUR
Art: Statement
Form:
Colour v%[,h%]
v%: Integer
h%: Integer
Beschreibung:
'COLOUR' stellt die Farben für Bildschirm-
Ausgaben mit 'PRINT' ein. <v%> ist die
Vordergrundfarbe, <h%> die
Hintergrundfarbe, ist letztere nicht
angegeben, bleibt die Hintergrundfarbe
unverändert. Die möglichen Farben sind:
0 Schwarz
1 Blau
2 Grün
3 Hellblau
4 Rot
5 Violett
6 Gelb/Braun
7 Weiß
Beispiel:
Colour 7,1
4-92
93
Dokumentation FranzBasic
LOCATE
Art: Statement
Form:
Locate x%, y%
x%: Integer
y%: Integer
Beschreibung:
'LOCATE' setzt den Cursor auf dem
Bildschirm auf Spalte <x%> und Zeile <y%>,
mit 1 <= <x%> <= 80 und 1 <= <y%> <= 25.
Beispiel:
Locate 80, 25 ' Cursor links unten
4-93
94
Dokumentation FranzBasic
4.8 Verschiedenes
REM
Art: Statement
Form:
Rem Str
Str: Kommentar
Beschreibung:
'REM' leitet eine Kommentarzeile ein. <Str>
ist ein Kommentar, der vom Übersetzer nicht
ausgewertet wird. 'REM' ist eine
nichtausführbare Anweisung.
Beispiel:
Rem Dies ist ein Kommentar
Siehe auch:
'
4-94
95
Dokumentation FranzBasic
'
Art: Statement
Form:
'Str
Str: Kommentar
Beschreibung:
' leitet einen Kommentar ein. <Str> ist ein
Kommentar, der vom Übersetzer nicht
ausgewertet wird. ' ist eine
nichtausführbare Anweisung. ' kann auch auf
eine andere Anweisung in der Zeile folgen.
Beispiel:
x% = 0 'Dies ist ein Kommentar
Siehe auch:
REM
4-95
96
Dokumentation FranzBasic
ERROR%()
Art: Funktion
Form:
Error%()
Beschreibung:
'ERROR%()' liefert den zuletzt entstandenen
Runtime-Error zurück.
Beispiel:
If Error%() <> 0 Then
Print "Laufzeit-Fehler"
Endif
4-96
97
Dokumentation FranzBasic
EXEC
Art: Statement
Form:
1. Exec Programm$
2. Exec Shell
Programm$: Stringausdruck
Beschreibung:
Mit 'EXEC' können während der Abarbeitung
eines Programms weitere Programme geladen
und gestartet werden.
Mit der ersten Form kann ein beliebiges
Programm oder ein Kommando des
Betriebssystems gestartet werden. Der
String <Programm$> enthält den
Programmnamen und etwaige Parameter genauso
wie man sie auf Betriebssystem-Ebene
eingeben würde.
Mit der zweiten Form wird der
Kommandoprozessor 'command.com' des
Betriebssystems gestartet, dem dann auf
Betriebssystem-Ebene Kommandos gegeben
werden können. Durch Eingabe des MS-DOS-
Kommandos 'EXIT' wird der Kommandoprozessor
beendet.
Das Programm, das durch 'EXEC' andere
Programme startet, wird während der
Laufzeit des gestarteten Programms
4-97
98
Dokumentation FranzBasic
angehalten. Nach Ende des gestarteten
Programms bzw. nach Abarbeitung des
Kommandos läuft das ursprüngliche Programm
weiter
Beispiel:
Exec "dir *.bas"
Exec "abc.exe"
4-98
99
Dokumentation FranzBasic
INTERRUPT
Art: Statement
Form:
Interrupt Nr%, Regs
Nr%: Integer
Regs: Record
Beschreibung:
'INTERRUPT' erzeugt den Interrupt <Nr>.
Voher werden die Register des Prozessors
auf die Werte des Records <Regs> gesetzt.
<Regs> ist ein Record aus sieben Integers,
welche die Werte für die Prozessor-Register
ax, bx, cx, dx, si, di, cflags (in dieser
Reihenfolge) beinhalten.
Nach Rückkehr vom Interrupt enthalten die
Integers in <Regs> die Werte der Prozessor-
Register aus der Interrupt-Routine.
Beispiel:
Rectype Register
Recvar ax%, bx%, cx%, dx%
Recvar si%, di%, flags%
Endrec
Record Register Reg
Reg.ax% = 256 'ah = 1
Reg.cx% = 256 + 7 'ch = 1, cl = 7
Interrupt 16, Reg 'Block-Cursor setzen
4-99
100
Dokumentation FranzBasic
TIMEDATE$
Art: Funktion
Form:
Timedate$(n)
Beschreibung:
'TIMEDATE$' ermittelt Datum bzw. Uhrzeit.
<n> ist ein Parameter, der das gewünschte
Ergebnis selektiert:
n=1 Zeit
n=2 Datum amerikanische Form
n=3 Datum deutsche Form
Beispiel:
Print Timedate$(1)
-->17:24:12
Print Timedate$(2)
-->10/28/89
Print Timedate$(3)
-->28.10.89
4-100
101
Dokumentation FranzBasic
4.9 FranzBasic Spezial
FILES
Art: Statement
Form:
Files Dir$, Ext$, File$
Beschreibung:
'FILES' listet alle Dateien in einem
Verzeichnis mit einer bestimmten Namens-
Erweiterung (Extension) auf und bietet
diese auf dem Bildschirm zur Auswahl an.
<Dir$> enthält den Namen des
Verzeichnisses, <Ext$> die
Namenserweiterung ohne Punkt.
<File$> enthält nach der Auswahl den Namen
der vom Benutzer ausgewählten Datei ohne
Namens-Erweiterung.
Der Benutzer wählt aus den angebotenen
Dateien eine durch Bewegen des weissen
Leuchtbalkens und Drücken der Eingabetaste
'CR', durch Anklicken mit der Maus. Durch
Eingabe eines Namens über Tastatur kann ein
neuer Name erzeugt werden.
4-101
102
Dokumentation FranzBasic
Bedienung:
Alphanumerische Tasten: Dateiname eingeben
Cursor-Tasten: Bewegen des Leuchtbalkens
Eingabe/Enter/CR: Auswahl des Namens unter
Leuchtbalken
Linke Maustaste: Auswahl des Namens unter
Maus-Cursor
Beispiel:
Files "\basic", "bas", file$
listet alle Dateien *.bas in Verzeichnis
/basic zur Auswahl auf.
4-102
103
Dokumentation FranzBasic
DIALOG
Art: Statement
Form:
Dialog Str$, Var [, x%, y%]
Str$: String
Var: Variable
x%, y%: Integers
Beschreibung:
Ähnlich wie 'INPUT' erfaßt 'DIALOG' einen
Wert für die Variable <Var> mit <Str$> als
Eingabeaufforderung (Prompt). 'DIALOG' ist
jedoch mit einem Linienrahmen umgeben und
bildet ein Fenster auf dem Bildschirm. Der
unter dem Fenster liegende Bildschirmteil
wird gerettet und nach Ende der Funktion
Dialog wieder restauriert.
Die Variable <Var> kann jedem einfachen
Datentyp angehören oder ein Feldelement
sein.
<x%> und <y%> sind Bildschirmkoordinaten
für die linke obere Ecke des Fensters für
'DIALOG'. Fehlen sie, wird x% = 2, y% = 2
angenommen.
Beispiel:
Dialog "Kundennr.:", Kunr$
4-103
104
Dokumentation FranzBasic
FORM
Art: Statement
Form:
Form Satz, Str$ [,x%, y%]
Satz: Record
Str$: String
x%, y%: Integers
Beschreibung:
'FORM' erfasst Daten für die Elemente des
Records <Satz>. Der String <Str$> enthält
die konstanten Teile der Erfassungsmaske
(durch Semikolons getrennt), nämlich eine
Überschrift und die einzelnen Eingabe-
Aufforderungen für die Felder.
'FORM' erzeugt ein Fenster auf dem
Bildschirm. Der unterliegende
Bildschirmteil wird gerettet und nach Ende
der Eingabe-Prozedur wieder auf den
Bildschirm gebracht. <x%> und <y%> sind die
linke obere Ecke des Fenster, bei Fehlen
werden Standardwerte angenommen.
Soll ein Element des Records nicht erfasst
werden, wird die zugehörige Eingabe-
Aufforderung in ein Paar runder Klammern
gesetzt. Das Element wird dann nur
angezeigt, kann aber nicht geändert werden.
4-104
105
Dokumentation FranzBasic
Bedienung:
Cursor-Tasten: Cursor bewegen
Eingabe/Enter/CR: Ein Feld weiter
ESC: Ende
Beispiel:
Rectype Asatz
Recvar Nr$ 16
Recvar Bestand% 6
Recvar Bezeichnung$ 30
Endrec
Record Asatz Artikelsatz
Dbopen #1, "Artikel"
Dbget #1, "4711", Artikelsatz
S$ = "Artikelstamm;(Artikelnr.:);
S$ = S$ + "Bestand:;Bezeichnung:"
Form Artikelsatz, S$
Daten für Artikel 4711 können erfasst
werden, die Artikelnummer kann jedoch nicht
verändert werden.
4-105
106
Dokumentation FranzBasic
MENU
Art: Statement
Form:
Menu Str$ [,x%, y%]
Str$: String
x%, y%: Integers
Beschreibung:
'MENU' erzeugt ein Bildschirm-Menu zur
Auswahl unter Alternativen durch den
Benutzer. Das String-Feld <Str$> enthält im
ersten Element die n Menupunkte (durch
Leerstellen getrennt) und in den nächsten n
Elementen Hilfstexte, welche dem Benutzer
die Bedeutung der einzelnen Menupunkte
erläutert. Das Feld-Element n+2 ist ein
Leerstring "" als Abschluß. Die Hilfstexte
können auch fehlen, dann wird dem zweite
Element von <Str$> ein Leerstring ""
zugewiesen.
Der Benutzer wählt eine der Menupunkte
durch Bewegen des Leuchtbalkens und Drücken
der Eingabetaste 'CR' oder durch Anklicken
mit der Maus. Mit ESC kann er ohne Auswahl
abbrechen.
Die vom Benutzer getroffene Auswahl kann
festgestellt werden durch Aufruf der
Funktion 'LASTKEY%' unmittelbar nach
'MENU'. Ein Funktionswert n steht für den
n-ten Menupunkt, 0 für ESC.
4-106
107
Dokumentation FranzBasic
Bedienung:
Cursor-Tasten: Leuchtbalken bewegen
Eingabe/Enter/CR: Menupunkt unter
Leuchtbalken auswählen
Linke Maustaste: Menupunkt unter Mauscursor
auswählen
ESC: Abbruch ohne Auswahl
Beispiel:
Dim MStr$(5)
MStr$(1)=" Artikel Kunden Faktura "
MStr$(2)=" Artikelstamm erfassen "
MStr$(3)=" Kundenstamm erfassen "
MStr$(4)=" Faktura erstellen "
MSTR$(5)=""
Menu MStr$
Auswahl% = lastkey%()
4-107
108
Dokumentation FranzBasic
MESSAGE
Art: Statement
Form:
Message Str$
Str$: String
Beschreibung:
'MESSAGE' bringt eine Message-Box mit einer
Meldung auf den Bildschirm und erwartet vom
Benutzer eine Reaktion durch Auswahl einer
Antwort aus einem kleinen Menu.
<Str$> besteht aus zwei Teilen, getrennt
durch das Zeichen '|'. der erste Teil ist
die Meldung, der zweite Teil das
Antwortmenu. Die Antwort des Benutzers läßt
sich durch die Funktion 'LASTKEY%'
unmittelbar im Anschluss an 'MESSAGE'
feststellen. Ist der Funktionswert n, so
wurde der n-te Auswahlpunkt als Antwort
gewählt.
'MESSAGE' erscheint in einem Fenster. Der
unterliegende Bildschirmbereich wird
gerettet und nach Befehlsende wieder
restauriert.
4-108
109
Dokumentation FranzBasic
Bedienung:
Cursor-Tasten: Leuchtbalken bewegen
Eingabe/Enter/CR: Menupunkt unter
Leuchtbalken auswählen
Linke Maustaste: Menupunkt unter Mauscursor
auswählen
Beispiel:
S$="Datei nicht da | OK Abbruch "
Message S$
4-109
Dokumentation FranzBasic
MOUSE
Art: Statement
Form
1. Mouse On
2. Mouse Off
3. Mouse Knopf%, x%, y%
Knopf%, x%, y%:Integers
Beschreibung:
'MOUSE ON' schaltet den Mauscursor ein,
'MOUSE OFF' schaltet ihn wieder aus. Mit
'MOUSE' können die aktuellen Maus-Daten
festgestellt werden. <Knopf%> gibt den
Zustand der Mausknöpfe an:
0: kein Knopf gedrückt
1: linker Knopf gedrückt
2: rechter Knopf gedrückt
3: mittlerer Knopf gedrückt
<x%> und <y%> geben die aktuelle
Bildschirm-Position des Mauscursors an.
Beispiel:
Mouse On
Repeat
Mouse Button%, x%, y%
Until Button%
Mouse Off
4-110
Anhang A
Installation
Stecken sie die Auslieferungsdiskette in
das Diskettenlaufwerk A:. Geben Sie über
die Tastatur ein:
a:install
'Install.bat' erzeugt auf Laufwerk 'C:' ein
Verzeichnis '\Fbasic' und kopiert alle
Dateien der Diskette in dieses Verzeichnis.
Auf der Diskette befindet sich eventuell
eine Datei 'Liesmich'. Sie enthält dann
aktuelle Information, die nicht in diesem
Handbuch enthalten ist.
Anhang B
Runtime-Errors
Datei-Meldungen
1 Unter dieser Kennung ist bereits eine
Datei geöffnet
2 Datei nicht geöffnet
3 Schreiben oder Lesen hinter Dateiende
4 Zuviele Dateien
Datenbank-Meldungen
20 Zuviele Datenbanken
21 Systemfehler
22 Datei ist keine .dbf-Datei
23 Satznummer zu groß
24 Datei konnte nicht geschrieben werden
25 Datei ist keine .ndx-Datei
26 Schlüssel zu groß oder null
27 Schlüssel nicht gefunden
28 Schlüssel nicht gefunden,
Nachfolger gelesen
29 Hinter letztem Schlüssel
30 Differenz zwischen .ndx und .dbf-Datei
31 Vor erstem Schlüssel