Dieses Handbuch wurde gescannt, bearbeitet und ins PDF-Format konvertiert von
Rüdiger Schuldes
schuldes@itsm.uni-stuttgart.de
(c) 2003
I. Hinweise zur Typographie
Dieses Handbuch wurde vollständig mit Text-Bearbeitungs-Programmen erstellt, die
auf dem Markt für den CBM 8032 erhältlich sind und auf einem Typenraddrucker
der gehobenen Klasse ausgedruckt, der über den IEC-Bus ganz regulär an den CBM
8032 angeschlossen ist. Daran können Sie die mögliche Leistungsfähigkeit Ihres
Computers erkennen.
Leider brachte es der deutsche Zeichensatz mit sich, daß einige Zeichen, die auf
dem Bildschirm und der Tastatur Ihres Computers dargestellt werden können, nicht
auf dem verwendeten Typenrad enthalten waren.
Es sind dies folgende Zeichen:
Doppelkreuz ist das SHIFT-Zeichen der Ziffer 3 und wird bei PRINT, INPUT und
GET verwendet. Dieses Zeichen wird als § (Paragraphenzeichen) dargestellt. Da
andererseits das Paragraphenzeichen auf dem Computer nicht zu finden ist, kann
es durch diese 'falsche' Darstellung zu keinen Verwechslungen kommen.
Pfeil nach oben ist das Symbol für die Rechenoperation 'Potenzierung'. Dieses
Symbol konnte überhaupt nicht dargestellt werden. Da die Potenzierung auch mit
'hoch' bezeichnet wird, haben wir 'Pfeil nach oben' durch 'h' ersetzt.
Spitze Klammer auf bzw. zu wird in BASIC als Symbol für 'größer als' bzw.
'kleiner als' verwendet. Diese Symbole sind aus der Mathematik abgeleitet. Auch
diese beiden Zeichen konnten wir nicht verwenden und haben sie deshalb durch
'k' für 'kleiner als' und 'g' für 'größer als' ersetzt.
Eckige Klammem sind durch die Umlaute belegt. Da sie aber auch in der
BASIC-Syntax nicht Vorkommen, fällt ihr Verlust nicht ins Gewicht.
Wir bitten Sie um Verständnis für diese kleinen Unannehmlichkeiten.
II. Hinweise zum Inhalt
Der Teil A (Anwender-Handbuch) ist nur für Laien gedacht, die noch nicht mit
Computern gearbeitet haben.
Teil B ist für den Programmierer geschrieben. Er setzt Programmier- und
BASIC-Kenntnisse voraus und vermittelt nur detaillierte Fakten über das
spezielle Commodore-BASIC.
Die Teile ab VII sind nur für speziell interessierte Personen gedacht, sie sind
keinesfalls 'Pflichtlektüre' oder gehören zur Allgemeinbildung.
Im Übrigen dürfen wir noch auf das Vorwort zum Programmierer-Teil verweisen.
Einsatz und Eigenschaften
Die Hardware
Die Software
Aufbau Ihres Commodore-Systems
Der Computer
Der Bildschirm
Die Tastatur
Die Peripheriegeräte
Datasette C2N
Geräte am IEC-Bus
Kabeltypen für den IEC-Bus-Anschluß
Floppy-Disk
Drucker
Bedienung der Tastatur
Tastenfunktionen der linken Seite
Tastenfunktionen der rechten Seite
Arbeiten mit der Tastatur
5.
6.
6.1
6.2
6.3
6.4
6.5
6.6
6.7
6.8
6.9
6.10
Rechenfunktionen
Systembefehle
Einführung
Erstes Programm laden und starten
Beliebiges Programm laden
Programm starten
Inhaltsverzeichnis der Diskette lesen
Diskette duplizieren
Neue Diskette anlegen
Programm abspeichern
Datei kopieren
Datei löschen
Einführung
LIST (Programm auslisten)
CLR (Variable löschen)
NEW (BASIC-Programm löschen)
FRE (freier Speicherplatz)
Wertzuweisungen
Einführung
Allgemeine Zuweisung (LET)
Zuweisung von Konstanten in DATA durch READ
Einführung
READ (Lesen aus DATA)
DATA (Datenfeld)
RESTORE (DATA-Zeiger zurücksetzen)
Eigenschaften einer DATA-Datei
F ehlermeldungen
5.
5.1
5.2
5.2.1
5.2.2
5.2.3
5.2.4
5.2.5
5.3
5.4
5.5
5.6
5.7
5.7.1
5.7.2
5.7.3
Ein- / Ausgabe - Anweisungen
Einführung
OPEN (Datei öffnen)
Logische Adresse
Gerätenummer / Primäradresse
Sekundäradresse
Dateiname / Kommandostring
OPEN-Tabelle (Für Fortgeschrittene)
CLOSE (Datei schließen)
CMD (Bildschirm-Ausgabe umlenken)
PRINT (drucken)
Strichpunkt
Zahlenformat
Stringformat
Komma
TAB( )
SPC( )
Hochschieben des Bildschirminhaltes
Anmerkungen für Fortgeschrittene
POS
INPUT (Eingabe mehrerer Zeichen)
Gemeinsame Eigenschaften
Besonderheiten des Bildschirm-INPUT
Besonderheiten des Datei-INPUT§
7
5.8
5.8.1
5.8.2
5.8.3
5.8.4
5.9
5.9.1
5.9.2
5.9.3
5.9.4
5.9.5
GET (Hole ein Zeichen)
GET aus dem Tastaturpuffer
GET§ aus Dateien
GET§ aus dem Bildschirm
GET§ von der Tastatur
Status (Zustand von Peripheriegeräten / Dateien)
Dateiende
Zeitüberschreitung
Gerät nicht angeschlossen
Floppy-Datei geschlossen
Abfrage des Status-Wertes
6.
6.1
6.2
6.3
6.4
6.5
6.6
6.7
7.
7.1
7.2
7.2.1
7.2.2
7.2.3
7.2.4
7.3
7.4
7.5
7.6
7.7
7.8
8.
8.1
8.2
Sprunganwe isungen
Einführung
GOTO (Sprung zu Zeile)
GOSUB / RETURN (Aufruf eines Unterprogrammes)
END / STOP (Programm-Ende / -Unterbrechung)
REM (Anmerkung)
IF ... THEN ... (Wenn ... dann ...)
ON ... GOTO / GOSUB ... (Sprungverteiler)
Schleifenbefehle (FOR .. TO .. STEP .. NEXT)
Einführung
Die Parameter
Laufvariable
Anfangswert
Endwert
Schrittweite
NEXT
Aussprung aus Schleifen
Schleife und Stack
Schachtelung
Ausführungszeit
NEXT WITHOUT FOR ERROR
Dimensionierung von indizierten Variablen
Einführung in indizierte Variablen
DIM
9.
9.1
9.2
9.3
9.3.1
9.3.2
9.3.3
9.4
9.4.1
9.4.2
9.4.3
9.5
9.5.1
9.5.2
9.6
8
Stringfunktionen
Einführung
LEN (Länge des Strings)
Gleitkommaumwandlungen
Einführung
VAL (Zahlenwert eines Strings)
STR$ (Stringdarstellung einer Zahl)
Byteumwandlungen
Einführung
ASC (Code des ersten Stringzeichens)
CHR$ (Code in Stringzeichen umwandeln)
Teilstrings bilden: LEFT$ / MID$ / RIGHT$
Einführung und Zweck
Format
Strings als eindimensionale Bytefelder
10.
10.1Einführung
10.2
10.2.1
10.2.2
10.2.3SGN (Vorzeichen)
10.3Logarithmische Funktionen
10.3.1SQR (Quadratwurzel)
10.3.2EXP (Exponentialfunktion)
10.3.3
10.4.Trigonometrische Funktionen
10.4.1
10.4.2
10.4.3Die Zahl PI
10.4.4Umrechnungen
Mathematische Funktionen
Zahlen zerlegen
ABS (Absolutbetrag)
INT (Ganzzahliger Wert)
LOG (Natürlicher Logarithmus)
TAN / SIN / COS (Tangens, Sinus, Cosinus)
ATN (Arcus-Tangens)
11.
11.1Einführung
11.2
12.Sonstige Funktionen
12.1
12.1.1RND
12.1.2Argumente
12.1.3Verbesserung der statistischen Verteilung
12.1.4
12.2Vom Programmierer definierbare Funktionen
12.2.1Einführung
12.2.2DEF FN (Funktion definieren)
12.2.3
12.3
12.3.1
12.3.2
12.4
12.4.1
12.4.2ST (Peripherie-Status)
12.4.3
13.
13.1
13.2POKE, PEEK
13.3
13.4USR( )
13.5
BIT - Funktionen
Verknüpfungstabellen
Zufallzahl erzeugen
Bereich der Zufallszahl einschränken
FN( ) (Funktion auf ruf en)
Zeitvariablen
TI$ (Zeit in Stunden, Minuten, Sekunden)
TI (Zeit als Zahlenwert)
ST / DS / DS$ (Status-Variablen)
Einführung
DS, DS$ (Disk-Status)
Maschinenprogramm Kopplung
Einführung
SYS
WAIT
14.
14.1
14.2
14.3
F ehlermeldungen
Einführung
Übersicht
Beschreibung der Fehlermeldungen
ra.
BILDSCHIRMVERWALTUNG UND TASTATURBEHANDLUNG
ï.
2.
2.1
2.2
2.3
2.4
2.5
2.6
3.
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
3.10
3.11
3.12
3.13
3.14
3.15
3.16
Einführung
Tasten, die nur als Tasten wirken
SHIFT
RETURN
REPEAT
RUN / STOP
Stoppen des Bildschirmrollens
Verlangsamen des Bildschirmrollens
Steuertasten / Steuercodes
CURSOR NACH RECHTS
CURSOR NACH LINKS
DELETE
INSERT
TAB (ausführen)
TAB (setzen/löschen)
Anführungszeichen (")
ESC
RVS ON
RVS OFF
SPACE
CURSOR NACH UNTEN
CURSOR NACH OBEN
HOME
CLR
SHIFT-RETURN
4.
4.1
4.1.1
4.1.2
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
4.10
5.
6.
6.1
6.2
6.3
6.4
7.
Zusätzliche Funktionscodes
Bildschirm-F enster
Zweck und Eigenschaften
Fenster definieren
Definition durch CONTROL-Codes
Einführung
Wirkung von LOAD
Kaltstart
Warmstart
Programmspeicher reservieren
Overlay und Strings
Stringverwaltung
Konsequenzen der Stringverwaltung für Overlay
Overlay und DEF FN( )
Overlay und Floppy-Dateien
Overlay und Stack
REKORDERVERWALTUNG
Einführung
Der Rekorder
Dateinamen
EOT
PRESS PLAY AND RECORD
SAVE
LOAD/VERIFY
Dateibehandlung
OPEN
Aus Datei lesen
In Datei schreiben
Datenübertragungsrate und Datenkapazität
Rekorderpuffer
Zugelassene Daten
Unterbrechen des Rekorders
VL
1.
2.
3.
3.1
3.2
3.3
3.4
3.5
3.6
3.7
4.
TIM-MONITOR
Die TIM-Befehle
TIM-Zahlensystem
Beschreibung der Befehle
M Anzeige des Speicherinhalts
R Anzeige der Registerinhalte
G Programmausführung
X Rückkehr zu BASIC
L Laden eines Programms
S Speichern eines Programms
BREAK und Interrupts
Aufruf von TIM
11
VII. USER PORT
1. Was ist der USER-PORT?
2. Kontaktbelegung des Steckverbinders J2
3. Der Interface-Baustein VIA 6522
4. Die Adressen des 6522 im CBM-Computer
5. Programmierung des VIA 6522
VIII. IEC-BUS
1. Einführung
2. Kontaktbelegung der Steckverbindung J1
3. Eigenschaften des IEC-Bus
4. Die Funktion der einzelnen Leitungen
4.1 Der Datenbus
4.2 Der Kontrollbus
4.3 Der Management-Bus
5. Definition der Logiksignale
6. Registeradressen
7. Beschreibung der Bus-Signale
IX. INTERNER BUS (J4,J9)
X. INTERPRETERCODE (mit Abkürzungen)
XI. Technische Daten
12
A
1. Inbetriebname
Ihr CBM 8001 ist ein hochwertiges elektronisches Gerät, konstruiert und gefer
tigt nach dem neuesten Stand der Microcomputer-Technologie. Wie bei allen
technischen Anlagen, hängt auch bei diesem Computer ein großer Teil der Funk
tionsfähigkeit von der richtigen Bedienung durch den Anwender ab. Deshalb soll
ten Sie bei der Inbetriebnahme des Gerätes die folgenden Anweisungen genau
beachten.
1.1 Verpackung
Der CBM wird anschlußfertig mit Bedienungshandbuch ausgeliefert. Die Spezial
verpackung garantiert einen sicheren Transport und sollte deshalb aufbewahrt
werden. Können Sie trotzdem an der Verpackung oder am Gerät Transportschäden
feststellen, so melden Sie diese bitte umgehend Ihrem CBM-Fachhändler!
Fassen Sie das Gerät beim Auspacken nicht am Bildschirmaufbau!
1.2 Installation
ANWENDER
HANDBUCH
Stecken Sie den Netzstecker in eine geerdete Steckdose (220 Volt). Achten Sie
bitte darauf, daß am selben Stromkreis möglichst keine Geräte mit hoher Strom
aufnahme angeschlossen sind, da sich starke Netzschwankungen störend auf den
Rechnerbetrieb auswirken können.
1.3 Ein-/Aus-Schalter
Den Netzschalter finden Sie an der Rückseite des Gerätes. Nach dem Einschalten
erscheint auf dem Bildschirm die Art des Betriebs-Systemes und die Anzahl der
freien Speicherplätze. Der Rechner ist betriebsbereit:
§§§ COMMODORE BASIC 4.0 §§§
31743 BYTES FREE
READY.
Sollte der Bildschirm dunkel bleiben, so überprüfen Sie bitte nochmals den
Netzanschluß und eventuell die Helligkeitseinstellung. Führt dies nicht zum
Erfolg, so benachrichtigen Sie bitte Ihren Fachhändler.
1.4 Helligkeitsregler
Mit dem Helligkeitsregler an der Rückseite des Bildschirmaufbaues können Sie die
Leuchtintensität der Bildröhre individuell nach Ihren Bedürfnissen einstellen.
Beachten Sie dabei, daß ein zu hell eingestellter Bildschirm die Augen stark
belastet und die Lebensdauer der Bildröhre reduziert!
13
2.Eigenschaften und Aufbau eines Computersystems
2.1
Ein Computer kann Aufgaben, die sich auf immer wiederkehrende Teilaufgaben
zurückführen lassen, sehr schnell und fehlerfrei lösen. Seine Vorteile
gegenüber der menschlichen Arbeitsweise sind seine hohe Geschwindigkeit und
Zuverlässigkeit.
Er eignet sich deshalb hervorragend für langwierige Sortier- und Vergleichs
arbeiten oder umfangreiche Berechnungen, kann also den Menschen von nervtötenden
Routinearbeiten befreien, oder ihn wenigstens dabei unterstützen. Damit kann der
Computer gleichzeitig Arbeitsvorgänge rationalisieren und humanisieren.
Trotzdem kann er das menschliche Gehirn nicht ersetzen, da ihm die Fähigkeit des
kreativen Denkens fehlt. Er kann also nicht denken, sondern nur rechnen und die
Ergebnisse mit vorgegebenen Mustern vergleichen und aufgrund von vorprogrammier
ten Entscheidungen bestimmte Reaktionen auswählen. Er ist deshalb immer auf die
Funktionen beschränkt, auf die er von Menschen programmiert wurde.
Diese Funktionen sind dem Computer aber nicht fest eingebaut, sondern können
fast beliebig ausgewechselt werden. Das Computersystem ist dabei nur eine
Maschine (Hardware), die zusammen mit den Programmen (Software) die vom Anwender
gewünschte Leistung erbringt.
Als Vergleich könnte man eine Stereoanlage nehmen, die aus mehreren Geräten
zusammengestellt ist. Diese Geräte entsprechen dem Computersystem (Hardware).
Damit diese Maschinen aber Ihren Zweck erfüllen können, müssen Sie zusätzlich
Schallplatten oder Tonbänder kaufen und in die Anlage 'einlegen'. Auf diesen
Tonträgern, die den Datenträgern beim Computer entsprechen, befindet sich die
austauschbare geistige Leistung (Software), die Sie eigentlich haben wollen.
Einsatz und Eigenschaften
Zuerst wollen wir nun allgemein die Bestandteile der Hardware vorstellen und
hinterher etwas auf Software aus Anwendersicht eingehen.
14
2.2
In der konventionellen EDV (Elektronische Daten Verarbeitung) unterscheidet man
beim Computer folgende Hauptbestandteile:
ZENTRALEINHEIT Hier werden die Informationen verarbeitet und
ARBEITSSPEICHER Hier werden die Informationen abgelegt, die der
EINGABEGERÄTE Sie dienen der Informationseingabe in den Rechner.
AUSGABEGERÄTE Ausgabe von Daten, Meldungen und Ergebnissen an
Die Hardware
die Steuerung des Informationsflusses zwischen
Rechner, Speicher und Peripherie geregelt.
Zentraleinheit unmittelbar zur Verfügung stehen
müssen (Programm und Daten).
(Tastatur, Meßgeräte)
den Benutzer (Bildschirm, Drucker).
MASSENSPEICHER Langzeitspeicher für Programme und Daten.
(Magnetband, Floppy-Disk, Magnet-Platte)
Während bei der Groß-EDV die einzelnen Einheiten meist in eigenen Gehäusen von
beachtlicher Größe untergebracht sind, sind beim CBM Zentraleinheit, Arbeits
speicher, Bildschirm und Eingabetastatur in einem Gerät mit der Stellfläche
einer elektrischen Schreibmaschine vereint. Ermöglicht wurde dies durch konse
quenten Einsatz der modernen Microprozessor-Technik, zu deren Entwicklung Firmen
der COMMODORE-Unternehmensgruppe einen wesentlichen Beitrag geleistet haben.
2.2 Die Software
Wir unterscheiden zwischen Betriebs- und Anwender-Software.
Betriebs-Software sind jene Programme, die die technische Struktur des Computers
ergänzen und seine Möglichkeiten erschließen. Die Betriebssoftware ist beim CBM
fest in ROMs (Read Only Memory) im Gerät installiert. Dies hat den Vorteil, daß
sie sofort nach dem Einschalten des Gerätes zur Verfügung steht und außerdem vor
versehentlichem Löschen oder Überschreiben geschützt ist. Die Betriebssoftware
wird auch Betriebssystem genannt. Für den Anwender ist allerdings weder ersicht
lich noch wichtig, wo die Hardware aufhört und das Betriebssystem beginnt.
Anwender-Software sind die Programme, die als Bindeglied zwischen dem Computer
und dem Anwender fungieren. In ihnen sind anwenderspezifische Arbeitsabläufe so
festgelegt, daß sie vom Computer in der richtigen Reihenfolge abgearbeitet
werden können. Diese Programme erst bringen den Computer dazu, die Funktionen zu
übernehmen, die Sie von ihm erwarten (z.B. Buchhaltung, Lagerverwaltung).
15
Anwenderprogramme können Sie entweder selbst erstellen, oder erstellen lassen.
Ausserdem bietet sich die Möglicheit, fertige Standardprogramme zu kaufen. Da
Ihr Computer aber nur so gut ist wie das Programm, mit dem er gefüttert wird,
sollten Sie beim Softwarekauf besonders auf Qualität achten. Der Preis ist dabei
nicht unbedingt ein aussagekräftiges Kriterium, denn auch gute Software kann bei
entsprechend hoher Auflage günstig angeboten werden. Deshalb hier einige
Bedingungen, die ein gutes Programm erfüllen sollte:
* Übersichtliche Bedienungsanleitung
* Übersichtlicher Bildschirmaufbau
* Gute Bedienerführung im Dialog
* Absicherung gegen Fehlbedienung (Plausibilitätskontrollen)
* Einfache Fehlerberichtigung
Ihr Commodore-Fachhändler ist gerne bereit, Sie in Softwarefragen zu beraten.
3. Aufbau Ihres Commodore-Systems
3.1 Der Computer
Wie erwähnt, enthält Ihr Computer bereits die Zentraleinheit und den Arbeits
speicher, sowie die beiden wichtigsten Ein- / Ausgabe - 'Geräte', nämlich die
Tastatur und den Bildschirm. Lediglich Massenspeicher und Drucker müssen zu
sätzlich durch Kabel angeschlossen werden.
3.2 Der Bildschirm
Ihr CBM ist ein dialogorientiertes Gerät. Die Kommunikation mit dem Rechner
erfolgt über Tastatur und Bildschirm. Dem Bildschirm fallen dabei zwei wesent
liche Aufgaben zu.
Zum Ersten dient er als Kontrollmedium für Eingaben. Das heißt, jedes über die
Tastatur eingegebene Zeichen erscheint sofort auf dem Bildschirm. Dabei werden
die einzelnen Zeichen folgerichtig in einer Zeile ausgegeben, ähnlich, wie es
bei einer Schreibmaschine der Fall wäre. Dies ermöglicht eine einfache Fehler
korrektur.
Aber auch dem Rechner dient der Bildschirm als Instrument, um Meldungen an den
Benutzer auszugeben. So werden zum Beispiel Fehlermeldungen unmittelbar auf den
Bildschirm geschrieben.
Bildschirmaufbau
Eine Bildschirmseite umfaßt 25 Zeilen mit je 80 Zeichen. Es lassen sich also
maximal 2000 Zeichen gleichzeitig auf dem Bildschirm darstellen.
Am Zeilenende erfolgt ein automatischer Überlauf zum Anfang der nächsten Zeile.
Am Ende der unteren Bildschirmzeile wird der gesamte Text auf dem Bildschirm um
eine Zeile hochgerückt. Dadurch verschwindet die erste Zeile. Dieses Durchrollen
des Bildes nennt man SCROLLING.
Die jeweilige Schreibposition für das nächste Zeichen wird durch ein blinkendes
Feld angezeigt, dem CURSOR.
HELLIGKEITSREGLER
IEC-BUS
USER-PORT
ANSCHLUßBUCHSE FÜR RECORDER
ADRESS-BUS
3.3
Die Tastatur bietet dem Benutzer die Möglichkeit, dem Computer Befehle, Daten
oder ganze Programme zu übermitteln. Deshalb ist es von Vorteil, sich mit diesem
wichtigen Bestandteil des Gerätes vertraut zu machen. Die Tastenfunktionen
können ohne Bedenken ausprobiert werden.
Die Tastatur des CBM 8032 besteht aus zwei getrennten Tastenfeldern, der alpha
numerischen Tastatur, sie entspricht im wesentlichen dem Tastenfeld einer
Schreibmaschine, und dem numerischen Zehnerblock zur schnellen Dateneingabe.
Neben den schon von der Schreibmaschine her bekannten Tasten findet man beim
CBM noch zusätzliche Funktionstasten. Diese Tasten sind in das Haupttastenfeld
integriert und haben Steuer- und Kontrollfunktionen. Eine Übersicht dieser
Funktionen finden Sie einige Seiten weiter bei der Bedienung der Tastatur.
3.4 Die Peripheriegeräte
Beachten Sie bitte, daß der Anschluß externer Geräte nur im ausgeschalteten
Zustand erfolgen darf.
3.4.1 Datasette C2N
Die Tastatur
Der Rekorder ist ein preiswerter Langzeitspeicher für Programme und kleine
Datensätze. Er arbeitet mit normalen, handelsüblichen Bandkassetten. Die
Anschlußbuchse finden Sie an der Rückseite des CBM. Der codierte Stecker kann
nicht falsch angeschlossen werden.
3.4.2 Geräte am IEC-BUS
Der IEC-BUS, konzipiert nach der Norm IEEE 488, ist der wichtigste Anschluß am
CBM. An ihm lassen sich bis zu 12 Geräte anschließen. Die Steckerleiste ist
ebenfalls an der Geräterückseite des CBM zu finden.
17
3.4.3 Kabeltypen für den IEC-Bus-Anschluß
Das erste IEC-Gerät wird durch das Interfacekabel Computer-Peripherie mit dem
CBM verbunden. Dieses Kabel hat an der einen Seite einen Flachstecker, der mit
der Beschriftung nach oben in die Steckerleiste des CBM paßt. Der IEEE 488
Normstecker am anderen Ende des Kabels wird mit dem anzuschließenden Peripherie
gerät verbunden. Sollen weitere IEC-Geräte angeschlossen werden, so kann das
mittels des Verbindungskabels Peripherie-Peripherie geschehen. Dieses Kabel hat
an beiden Enden Normstecker und wird einfach "huckepack" auf den Stecker am
ersten Peripheriegerät aufgesteckt. Auf diese Weise lassen sich alle Geräte am
Bus anschließen.
Kabel Computer-Peripherie
3.4.4 Floppy-Disk
Floppy-Laufwerke bieten im Gegensatz zum Recorder einen wesentlich schnelleren
Zugriff auf Daten und Programme. Als Speichermedium dienen hier dünne, flexible
Magnetplatten. Die Diskettenorganisation erfolgt über Spuren und Sektoren und
wird über das fest eingebaute DOS (Disk Operating System) verwaltet. Der CBM
Computer kann mit den folgenden Floppystationen gekoppelt werden:
TYP
CBM 3040
CBM 4040
CBM 8050
CBM 8060
CBM 8061
Bei der Arbeit mit Disketten sollten Sie folgendes beachten:
* Nur Qualitätsdisketten verwenden!
* Gerät nie mit geschlossenen Laufwerksklappen aus- oder einschalten!
* Disketten vor dem Einlegen von Hand vorzentrieren!
* Disketten nur an der Schutzhülle anfassen!
* Disketten nie in die Nähe von Magnetfeldern bringen.
Anz. Laufwerke
2170
2
2
2
2
KB/Diskette
170
512
750
1500
Kabel Peripherie-Peripherie
Diskettengröße
5.25"
5.25"
5.25"
8"
8"
18
3.5.5Drucker
Als Ausgabeeinheiten werden von COMMODORE verschiedene Drucker angeboten. Auch
diese werden am IEC-BUS betrieben:
CBM 3022
CBM 8024Matrixdrucker mit Traktorführung
CBM 8026Typenraddrucker, auch als Schreibmaschine verwendbar
Ihr Commodore-Händler ist Ihnen gerne bei der Auswahl des für Sie optimalen
Druckers behilflich.
Matrixdrucker mit Traktorführung
80 Zeichen pro Zeile
max. 150 Zeichen pro Sekunde
132 Zeichen pro Zeile
170 Zeichen pro Sekunde mit Druckwegoptimierung
140 Zeichen pro Zeile
ca. 25 Zeichen pro Sekunde
19
4. Bedienung der Tastatur
4.1 Tastenfunktionen der linken Seite
Taste ohne SHIFTmit SHIFT
OFF
RVS
TAB
ESC Schaltet CONTROL-Modus ab wie ohne SHIFT
SHIFT Feststeller für SHIFT-Taste wie ohne SHIFT
LOCK
Umschaltung auf negative Zeichen
darstellung.
(Dunkle Schrift auf hellem Grund)
Setzt den Cursor innerhalb der
Zeile auf die nächste gesetzte
T abulator-Marke.
Unterbricht Hochrollen auf dem
Bildschirm. (z.B. für Listing) wie ohne SHIFT
Fortsetzung der durch : oder *
unterbrochenen Bildschirmausgabe
bzw. wie ohne SHIFT
Reduzierte Geschwindigkeit bei
Bildschirmausgabe (z.B. Listing)
Umschaltung auf normale Zeichen
darstellung.
(Helle Schrift auf dunklem Grund)
Setzt oder löscht Tabulatormarke
an der derzeitigen Cursorposition.
20
4.2
Tastenfunktionen der rechten Seite
Taste ohne SHIFT
Die eingegebene Information
RETURN wird an den Rechner übergeben.
Der Cursor wird an den Anfang
der nächsten Zeile gesetzt.
RUN Laden und starten des ersten
STOP Unterbricht den Programmablauf Programmes vom Laufwerk 0.
Bewegt den Cursor um eine Zeile
CNO
CNU
CNR
CNL
CLR Cursor wird in die linke obere Bildschirm wird zusätzlich
HOME Ecke des Bildschirmes gebracht. gelöscht.
nach unten. Ab der letzten Zeile
wird der Bildschirminhalt um eine
Zeile hochgeschoben.
Bewegt den Cursor um ein Zeichen
nach rechts. Am Zeilenende wird
der Cursor an den Anfang der
nächsten Zeile gesetzt.
Die Information wird nicht
vom Rechner übernommen.
Der Cursor wird an den Anfang
der nächsten Zeile gesetzt
(nicht bei 3040)
Bewegt der Cursor um eine Zeile
nach oben.
Bewegt den Cursor um ein Zeichen
nach links. Am Zeilenanfang wird
der Cursor an das Ende der darü
berliegenden Zeile gesetzt.
mit SHIFT
Löschen des Zeichens links neben
INST dem Cursor. Die restliche Zeile
DEL rechts neben dem Cursor wird um
ein Zeichen nach links gezogen.
In Verbindung mit der Repeat-
REPEAT Taste arbeitet jede Taste mit wie ohne SHIFT
Dauerfunktion.
Einfügen eines Leerzeichens an der
Stelle des Cursors. Der rechte
Teil der Zeile wird um ein Zeichen
nach rechts geschoben.
21
4.3
Um etwas mehr mit der Wirkungsweise der einzelnen Tasten vertraut zu werden,
sollten Sie folgende Beispiele nachvollziehen.
Schreiben
Versuchen Sie Ihren Namen genau so zu schreiben, wie Sie es von der Schreib
maschine gewohnt sind. Beachten Sie dabei die Möglichkeit, groß und klein zu
schreiben. Alle Buchstaben, die Sie mit gleichzeitig gedrückter SHIFT-Taste
schreiben, werden als Großbuchstaben dargestellt.
Drücken Sie jetzt die Taste SHIFT LOCK. Die SHIFT-Taste ist jetzt festgestellt,
alle Buchstaben kommen jetzt als Großbuchstaben auf den Bildschirm. Das Lösen
des SHIFT LOCK geschieht durch nochmaliges Drücken der Taste.
Achtung:
SHIFT kann beim Programmablauf zu Fehlern führen, wenn z.B. Eingaben mit einem
SHIFT-RETURN abgeschlossen werden.
Tippen Sie einen Buchstaben, und drücken Sie dabei gleichzeitig die REPEAT-
-Taste. Wie Sie feststellen werden, wird der Buchstabe automatisch immer wieder
geschrieben. Die REPEAT-Taste bewirkt Dauerfunktion für alle Tasten.
Arbeiten mit der Tastatur
Drücken Sie nun die Taste OFF RVS und schreiben Sie einen neuen Text. Dieser
Text erscheint nun in Negativdarstellung (REVERSE) auf dem Bildschirm (Dunkle
Schrift auf hellem Grund). Durch erneutes Betätigen der Taste gemeinsam mit
SHIFT wird der Reverse-Modus wieder abgeschaltet.
Cursor horizontal bewegen (rechts / links)
Drücken Sie kurz die Taste CRSR (Cursor rechts). Der Cursor wandert im selben
Moment eine Spalte nach rechts. Wenn Sie jetzt die Taste gedrückt halten, so
schaltet diese auf Dauerfunktion. Der Cursor bewegt sich jetzt schnell auf das
Ende der Zeile zu. 5 Zeichen vor dem Zeilenende verschwindet der Cursor kurz
und es ertönt ein akustisches Vorwarnsignal. Bleibt jetzt die Taste weiter
gedrückt, so setzt der Cursor nach dem Erreichen der 80. Stelle automatisch am
Anfang der nächsten Zeile auf. Betätigen Sie jetzt gleichzeitig die SHIFT-
-Taste, so bewegt sich der Cursor genau in die entgegengesetzte Richtung. Bewegt
man den Cursor über beschriebene Stellen des Bildschirmes, so wird der beste
hende Text vom Cursor nicht gelöscht.
Tabulator
Versuchen Sie jetzt den Tabulator zu setzen. Fahren Sie den Cursor an eine
beliebige Stelle des Bildschirmes und drücken Sie die SHIFT und gleichzeitig die
TAB-Taste. Fahren Sie dann den Cursor einige Zeichen weiter nach rechts und
setzen Sie eine zweite Tabulatormarke, indem Sie wieder TAB gemeinsam mit SHIFT
drücken. Stellen Sie nun den Cursor an den linken Bildschirmrand. Wenn Sie jetzt
auf die TAB-Taste tippen, setzt der Cursor auf der ersten gesetzten Tabulator
marke auf. Ein weiteres Anschlägen der Taste läßt ihn auf die nächste Marke
springen. Wenn Sie an dieser Stelle nochmals SHIFT und TAB drücken, so wird
diese Tabulatormarke wieder gelöscht.
22
Cursor vertikal bewegen (unten / oben)
Betätigen Sie die Taste CRSR (Cursor nach unten). Sie werden feststellen, daß
sich der Cursor in der Spalte, in der er sich gerade befindet, senkrecht nach
unten über den Bildschirm bewegt. In Verbindung mit SHIFT kann er auch hier in
die entgegengesetzte Richtung dirigiert werden. Um zu verdeutlichen, was
geschieht, wenn der Cursor den unteren Bildschirmrand erreicht, tippen Sie
einige Zahlen oder Buchstaben und fahren den Cursor anschließend in die untere
Bildschirmzeile. Wenn Sie die Taste noch weiter gedrückt halten, werden Sie
sehen, daß der geschriebene Text Zeile für Zeile nach oben wandert, bis er am
oberen Bildschirmrand verschwindet. Dieses zeilenweise Durchrollen des Textes
nennt man SCROLLEN. Der Scroll-Modus wirkt nur in einer Richtung. Der Bild
schirminhalt wandert also nicht nach unten, wenn der Cursor oben anstößt.
CLR / HOME
Drücken Sie jetzt die Taste CLR HOME. Der Cursor geht in die linke obere Ecke
des Bildschirms (Home-Position).
Dieselbe Taste in Verbindung mit SHIFT löscht den Bildschirm und stellt den
Cursor ebenfalls in Home-Position.
INST / DEL
Tippen Sie einen beliebigen Text, und stellen Sie dann den Cursor in die Mitte
eines Wortes. Wenn Sie jetzt die Taste Delete drücken, so wird der Buchstabe,
der sich vor dem Cursor befindet, gelöscht. Der Rest der Zeile wird um ein
Zeichen nach links gezogen.
Wenn Sie dieselbe Taste gleichzeitig mit SHIFT drücken, so wird der Text ab dem
Zeichen, über dem der Cursor steht, um eine Spalte nach rechts gesetzt. Der
Cursor steht über einem leeren Platz, der wieder durch Zeichen belegt werden
muß. Versucht man diese leere Stelle mit Funktionstasten zu verlassen z.B. mit
Cursor hoch, so wird der Platz durch das entsprechende Kontrollzeichen aufge
füllt. Der Rechner ist im "Control-" oder Einfügemodus. Dieser Modus besteht so
lange, bis der mit INST geschaffene Platz wieder aufgefüllt ist.
Dieser Effekt läßt sich auch erzielen, wenn Sie Anführungszeichen eingeben.
Tippen Sie ein " und anschließend die verschiedenen Cursortasten. Sie werden
feststellen, daß statt der entsprechenden Cursorbewegungen reverse Zeichen auf
den Bildschirm geschrieben werden. Erst wenn Sie erneut " eingeben, arbeiten die
Funktionstasten wieder normal.
Vorsicht!
Da Tastenfunktionen durch Programme modifiziert oder zusätzlich generiert werden
können, sollten Sie die Bedienungsanleitung des jeweiligen Programmes genau
lesen. Vor allem sollten Sie die Tasten CRSR vertikal, CLR und HOME nicht ver
wenden, sofern diese von der Bedienungsanleitung des Programmes nicht ausdrück
lich zugelassen sind.
23
5.Rechenfunktionen
Ihr CBM läßt sich auch als Tischrechner verwenden. Die Rechenfunktionen sind
vom Betriebssystem auch ohne Programm abrufbar.
Dabei gilt es zu beachten, daß in BASIC eine besondere Schreibweise für Rechen
operationen vorgeschrieben ist. So werden hier an Stelle eines Kommas die Dezi
malstellen durch einen Punkt getrennt.
Für die Darstellung arithmetischer Operationen gilt:
+
-
*
/
Um eine Ausgabe des Ergebnisses auf dem Bildschirm zu erreichen, ist es nötig,
an den Anfang der Rechenoperation ein ? einzugeben.
Beispiel:
? 4*5 (RETURN drücken)
Addition
Subtraktion
Multiplikation
Division
Potenzierung (Pfeil nach oben)
20
ready
Der Rechner schreibt sofort das Ergebnis (20) unter die Eingabe. Die Meldung
READY besagt, daß der Computer für neue Anweisungen bereit ist.
Weitere mathematische Funktionen müssen in BASIC- Schreibweise eingegeben wer
den. Die Funktion wird in diesem Fall als BASIC-Wort, der zu behandelnde Wert
(Argument) in Klammern dahinter eingetippt.
Beispiel:
'Berechne Quadratwurzel aus 16' wird eingegeben mit
? sqr(16) (RETURN drücken)
4
ready
Folgende Funktionen stehen zur Verfügung:
sqr(x) Quadratwurzel von x
sin(x) Sinus von x (Bogenmaß)
cos(x) Cosinus von x
tan(x) Tangens von x
atn(x) Arcustangens von x (Umkehrfunktion des Tangens)
log(x) Natürlicher Logarithmus zur Basis e=2,7182818
exp(x) Exponent zur Basis e
int(x) Integer (Schneidet Nachkommastellen der Zahl x ab)
abs(x) Absolutwert der Zahl x (Vorzeichenunterdrückung)
sgn(x) Signum (Ermittelt das Vorzeichen der Zahl x)
24
6.
6.1 Einführung
Systembefehle sind Kommandos, die der Rechner direkt annimmt und ausführt. Diese
Befehle sind notwendig, um Programme laden, speichern, oder verändern zu können.
Befehle werden grundsätzlich ohne SHIFT geschrieben (nur klein im Textmodus oder
nur groß im Graphikmodus) und mit der Taste RETURN zur Ausführung an den Rechner
übergeben.
Als Anwender müssen Sie natürlich nicht alle Systembefehle beherrschen. Wir
haben hier nur die allerwichtigsten zusammengestellt. Sie werden sehen, daß alle
hier aufgeführten Befehle voraussetzen, daß Sie ein Floppy-Laufwerk angeschlos
sen haben. Bitte beachten Sie, daß beim CBM 3040 geringfügige Abweichungen von
den beschriebenen Methoden nötig sind, sie gelten also nur für 4040 und 8030.
Sollten Sie nur über einen Rekorder verfügen, so schlagen Sie bitte bei
Rekorderverwaltung nach, dort sind alle benötigten Befehle speziell für den
Rekorder zusammengestellt.
Eine kurze Übersicht soll Ihnen zeigen, welche Befehle im folgenden erklärt
werden:
Systembefehle
SHIFT/RUN
DLOAD
RUN
DIRECTORY
BACKUP
HEADER
DSAVE
COPY
SCRATCH
Die Befehle sind in der Reihenfolge erklärt, wie Sie von Ihnen am wahrschein
lichsten benötigt werden. D.h. die weiter hinten beschriebenen Befehle benötigen
Sie eventuell am Anfang gar nicht.
6.2 Erstes Programm laden und starten
Wenn Sie die Tasten SHIFT und RUN drücken, nachdem Sie die Anlage eingeschaltet
haben, wird das erste Programm der Diskette im rechten Laufwerk geladen und
automatisch gestartet.
Bei qualitativ hochwertiger Software ist dieses erste Programm ein sogenannter
Systemstart, der erstens alle benötigten Programme automatisch lädt und zweitens
ab sofort mit Ihnen in deutschem Dialog in Verbindung tritt. In der Regel können
Sie dann durch Drücken einer Taste ein bestimmtes Programm aus einer ganzen
Anzahl von angebotenen Programmen laden und starten.
erstes Programm laden und starten
beliebiges Programm laden
Programm starten
Inhaltsverzeichnis der Diskette lesen
Diskette duplizieren (Sicherungsduplikat)
Neue Diskette anlegen
Programm abspeichern
Datei kopieren
Datei löschen
25
6.3
Falls Sie unabhängig von einem 'Systemstart-Programm' ein bestimmtes Programm
einer Diskette laden wollen, können Sie dies durch
tun. Dieser Befehl lädt das Programm 'NAME' vom rechten Laufwerk in den Arbeits
speicher. Er teilt den Ladevorgang durch 'LOADING' mit und meldet sich mit
'READY.' zurück.
Falls das gewünschte Programm auf der eingelegten Diskette nicht vorhanden ist
oder irgendein Diskettenfehler auftritt, wird
gemeldet. Überprüfen Sie in diesem Fall die richtige Schreibweise des Namens und
ob die richtige Diskette eingelegt ist.
Wollen Sie ein Programm vom linken Laufwerk laden, so fügen Sie an den oben
beschriebenen Befehl noch durch Komma getrennt 'D1' an:
Beliebiges Programm laden
DLOAD "NAME"
FILE NOT FOUND ERROR
DLOAD "NAME" , Dl
6.4 Programm starten
Ein Programm, das Sie durch DLOAD in den Speicher geladen haben, müssen Sie
noch durch
RUN
starten, damit es für Sie tätig werden kann.
6.5 Inhaltsverzeichnis der Diskette lesen
Wenn Sie wissen wollen, welche Programme oder Dateien auf einer Diskette sind,
können Sie durch
DIRECTORY
die Inhaltsverzeichnisse beider Disketten nacheinander auf den Bildschirm
bringen. Denken Sie dabei an die Funktion der beiden Tasten ':/*' bzw. 'Pfeil
nach links'.
Durch Anfügen von 'D0' oder 'D1', wieder durch Komma getrennt, können Sie
gezielt das Inhaltsverzeichnis der rechten oder linken Diskette lesen:
Dir DO
Dir Dl
Wenn Sie den dritten Buchstaben von DIRECTORY mit SHIFT eingeben, versteht dies
der Rechner als Abkürzung und Sie müssen das furchtbar lange Wort nicht immer
ausschreiben.
26
6.6 Diskette duplizieren
Von Datendisketten kann nie zu oft ein Sicherungsduplikat erstellt werden, um
bösen Überraschungen durch Verlust wertvoller Daten vorzubeugen. Sie können
Disketten vollständig duplizieren mit
BACKUP DO TO Dl rechte Diskette auf linke übertragen
( BACKUP Dl TO DO linke Diskette auf rechte übertragen )
Die Form des BACKUP ist:
BACKUP (dupliziere von) D (Laufwerk) 0 TO (nach) D (Laufwerk) 1
Links von 'TO' steht also das Quellaufwerk, rechts das Ziellaufwerk.
Wenn Sie immer die gleiche Richtung (DO TO Dl) verwenden, laufen Sie weniger
Gefahr, irgendwann die Richtung zu verwechseln.
Die Diskette in dem Laufwerk, das rechts von TO aufgeführt ist, wird völlig
gelöscht!
Da eine falsche Anwendung dieses Befehls die Vernichtung der Daten zur Folge
haben kann, die Sie eigentlich sichern wollten, beachten Sie bitte die folgenden
Hinweise genau:
Schützen Sie die 'Quelldiskette' immer mit einem 'Schreibschutzaufkleber'!
Vergewissern Sie sich, daß die 'Zieldiskette' wirklich leer ist bzw. gelöscht
werden darf!
6.7 Neue Diskette anlegen
Fabrikneue Disketten müssen erst durch einen speziellen Befehl 'sektoriert'
werden, ehe sie Programme bzw. Daten aufnehmen können.
Durch die Anweisung
HEADER "NAME" , IXX
wird die Frage
ARE YOU SHURE?
ausgelöst, die sicherstellen soll, daß Sie nicht aus Versehen eine Diskette
löschen, die bereits Daten enthält. Diese Frage ist mit 'Y' oder 'YES' zu
beantworten, sonst wird die HEADER-Anweisung ignoriert.
'NAME' ist der Diskettenname, er darf maximal 16 Zeichen lang sein.
Die beiden XX hinter I stehen stellvertretend für die 'Identität' der Diskette.
Diese Kennzeichnung ist zwei Zeichen lang.
Lassen Sie den Zusatz 'IXX' weg, so wird die Diskette nur gelöscht, aber nicht
sektoriert. Dies geht nur bei Disketten, die bereits in Gebrauch waren.
Durch die oben angeführte Anweisung wird die Diskette im rechten Laufwerk
sektoriert. Wie schon bei den vorhergehenden Befehlen, kann durch Zusatz von
'D1' erreicht werden, daß die Diskette im linken Laufwerk sektoriert wird.
Die Reihenfolge der einzelnen Angaben NAME, I oder D ist unwichtig, wichtig ist
nur, daß sie jeweils durch Komma getrennt werden.
27
6.8
Ein im Arbeitsspeicher stehendes BASIC-Programm können Sie mit
auf die Diskette im rechten Laufwerk abspeichern. Auch hier kann durch Anfügen
von Dl auf das linke Laufwerk abgespeichert werden.
6.9 Datei kopieren
Einzelne Dateien können von einem Laufwerk auf das andere durch
kopiert werden. Wie schon bei BACKUP steht links von TO das Quellaufwerk und
rechts das Ziellaufwerk. Neu sind die beiden Namen. Auch hier steht links der
Name der Datei, die kopiert werden soll und rechts der Name der neuen Datei.
Sie können - müssen aber nicht - gleich sein.
Wenn kein Name angegeben wird, werden alle Dateien der Quelldiskette auf die
Zieldiskette kopiert. Der Unterschied zu BACKUP besteht darin, daß bei COPY die
Zieldiskette nicht gelöscht wird, sie kann also bereits Dateien enthalten, zu
denen noch die Dateien der Quelldiskette hinzukopiert werden.
Programm abspeichern
DSAVE "NAME"
COPY "NAME" , DO TO "NAME" , Dl
6.10 Datei löschen
Einzelne Dateien können Sie durch die Anweisung
SCRATCH "NAME"
löschen. Wenn der Zusatz 'D1' fehlt, wird auf dem linken Laufwerk gelöscht.
Wie bei HEADER wird mit
ARE YOU SHURE?
nachgefragt, ob Sie dies ernst meinen. Antworten Sie auch hier durch 'Y'. Nach
erfolgreichem Löschen wird gemeldet:
01 FILES SCRATCHED 01 00
Die zweite Zahl von rechts sagt Ihnen, daß 1 Datei gelöscht wurde.
Eine gelöschte Datei kann nicht wieder zurückgeholt werden, wenden Sie diese
Anweisung also ähnlich sorgfältig an wie BACKUP und HEADER.
28
B. PROGRAMMIERER
HANDBUCH
Vorwort
Dieser Abschnitt soll kein Leitfaden zum Erlernen von allgemeinen Programmier
techniken sein und auch nicht zum Erlernen von BASIC, sondern ein Nachschlage
werk, in dem alle wissenswerten Fakten über die Programmierung Ihres
COMMODORE - Computers zusammengestellt sind.
Lassen Sie sich von der Informationsfülle nicht abschrecken, Sie haben ja ein
Nachschlagewerk vor sich. Die Informationen wurden sehr sorgfältig ausgewählt.
Grundlage war die große Erfahrung des SOFTWAREVERBUND-MICROCOMPUTER
in der Programmierung von Commodore-Rechnern und die Erfahrung aus vielen
Anwenderseminaren, die vom Autor durchgeführt wurden.
Der Abschnitt B. gliedert sich in einen Teil über Datenarten und Interpreter
eigenschaften und einen Teil, der alle BASIC-Anweisungen behandelt. Zuerst
sollten Sie unbedingt die ersten Kapitel über Datenarten usw. gelesen haben, da
in den Befehlsbeschreibungen auf diese Definitionen zurückgegriffen wird.
Wenn Sie schon irgendeine Programmiersprache beherrschen, werden Sie sich sicher
in diesem Handbuch schnell zurechtfinden.
Kurze Einführungen sollen aber auch dem Anfänger ermöglichen, sich in die Mate
rie einzuarbeiten.
Für Anfänger wollen wir noch zwei Hinweise geben:
(1) Haben Sie Mut zur Lücke. Das soll heißen, daß Sie sich nicht beim ersten
Durchlesen an irgendwelchen Einzelheiten verbeißen sollen, die Ihnen unver
ständlich erscheinen.
Viele Details werden erst im Zusammenhang mit anderen Fakten verständlich, so
daß Sie also mindestens einmal alles gelesen haben müssen, um beim nächsten Mal
mehr verstehen zu können.
Einige Details und auch ganze Anweisungen werden Sie am Anfang nicht benötigen,
vielleicht auch nie. Merken Sie sich bei solchen vernachlässigten Stellen aber
an, daß Sie sie nicht gelesen oder nicht verstanden haben. Vielleicht schmökern
Sie später nochmal alle Stellen durch, die Sie so gekennzeichnet haben und fin
den doch noch den einen oder anderen wertvollen Hinweis.
(2) Erkundigen Sie sich bei Ihrem Commodore-Händler nach Schulungskursen. In der
Regel ist es leichter, sich nach oder während einer Einführung in Seminarform
mit dem Computer anzufreunden, als sofort ins kalte Wasser zu springen.
Wir hoffen, daß dieses Handbuch Sie möglichst effektiv mit den außerordentlich
vielfältigen Möglichkeiten Ihres Computers vertraut macht und daß Sie an seiner
Programmierung genausoviel Spaß und Befriedigung haben werden wie der Autor und
seine Mitarbeiter.
München, im Oktober 1980
SM SOFTWAREVERBUND MICROCOMPUTER GmbH
Hannes Schießl
29
I.DATEN
1. Datenarten
1.1 Einführung
Da Ihr Computer nicht nur rechnen, was 'to compute' eigentlich bedeutet, son
dern auch nichtnumerische Zeichenfolgen behandeln kann, unterscheidet er zwi
schen zwei grundverschiedenen Datenarten, nämlich zwischen numerischen und
nichtnumerischen Daten.
- numerische Daten:
Numerische Daten sind ganz einfach Zahlen. Ihr Computer kann mit Zahlen rech
nen, also alle arithmetischen und mathematischen Funktionen und Verknüpfungen
damit durchführen.
- nichtnumerische Daten:
Dies sind Zeichenfolgen, die für den Computer keinerlei Bedeutung haben, die er
aber aufgrund Ihrer Anweisungen zerteilen oder zusammensetzen kann. Diese Zei
chenfolgen ('Strings') werden oft nicht ganz exakt als 'Text' bezeichnet, ob
wohl sie wesentlich mehr enthalten können, als Text.
INTERPRETERCODES
Zusätzlich zur Datenart ist eine Unterscheidung nötig, wie die Daten dargestellt
werden, bzw. wo sie stehen. Hier sind Konstante und Variablen zu trennen.
Die einfachste Form sind Konstante. Sowohl Zahlen als auch Strings können als
Konstante direkt im Programmtext auftreten.
Was dem Computer aber erst seine Leistungsfähigkeit gibt, sind Variable.
Variable sind Namen von Speicherplätzen, in denen Zahlen oder Strings stehen
können.
Nach dieser kurzen Einführung werden im folgenden alle verwendeten Datenarten
und Darstellungsformen definiert und erläutert.
1.2 Numerische Daten
Ihr CBM unterscheidet sechs verschiedene numerische Datenarten, von denen fünf
in jeder Form im Programm verwendet werden können.
1.2.1 Gleitkomma-Zahlen
Die Gleitkommadarstellung ist die mächtigste Zahlenart, da sie alle anderen
drei Formen numerischer Daten als Sonderfälle enthält. In der allgemeinsten
Form besteht eine Gleitkommazahl aus der Mantisse mit ihrem Vorzeichen und
aus dem Exponenten zur Basis
10 mit seinem Vorzeichen.
30
Beispiel -1.2345 E -3 =
1.2345 E
.057
125.03
-3
3 =
=
=
=
-0.0012345
1234.5
0.057
125.03
-3
Der darstellbare Zahlenbereich liegt für den absoluten Betrag der Zahl zwischen
1.7 E 38 und 2.94 E -39
Die exakten Werte liegen
bei 2 h +127 = 1.70141183 E +38
und 2 h -128 = 2.93873594 E -39
('h' steht für 'Pfeil nach oben', lies 'hoch')
Wird der absolute Betrag überschritten, wird OVERFLOW ERROR gemeldet, wird
er unterschritten, erfolgt keine Fehlermeldung, aber das Ergebnis ist Null.
WERT größer als 1.7 E +38 oder WERT kleiner als -1.7 E +38
ergibt OVERFLOW ERROR
WERT kleiner als 2.9 E -39 oder WERT größer als -2.9 E -39
ergibt 0
Die Mantisse wird mit einer Genauigkeit von 9 Dezimalstellen verarbeitet und ge
speichert.
(Exakt kann die Mantisse +/- 2 exp 32 = 4294967296 Möglichkeiten darstellen, das
sind fast 9.5 Dezimalstellen.)
Positive Vorzeichen müssen nicht geschrieben werden und werden nicht ausgegeben.
Der Exponent kann entfallen, wenn man Zahlen hat, die sich durch 9 Stellen
darstellen lassen. Wann bei der Ausgabe von der Darstellung ohne Exponent in die
normalisierte Exponentialdarstellung (scientific notation) übergegangen wird,
ist bei PRINT beschrieben. Mögliche Eingabeformate sind bei INPUT bzw. STR$
beschrieben.
Das 'E' für Exponent muß immer ohne SHIFT getippt werden, unabhängig davon,
ob dann ein großes oder kleines E auf dem Bildschirm steht.
Beachten Sie bitte, daß der Punkt in 1.234 nicht versehentlich zu einem Komma
wird, ein SYNTAX ERROR bzw. EXTRA IGNORED wäre die Folge.
Alle Zwischenergebnisse in arithmetischen und mathematischen Ausdrücken werden
intern im Gleitkommaformat ausgedrückt, unabhängig davon, ob das Ergebnis
vielleicht einen Integer- oder Bytewert darstellen muß!
Intern wird eine Gleitkommazahl in 5 Bytes dargestellt, wobei 1 Byte den Expo
nenten und 4 Bytes die Mantisse enthalten.
1.2.2 Integer (ganze Zahl)
Der Integerbereich ist definiert von
-32767 bis +32767
In einer Integerzahl kann kein Punkt Vorkommen, weil nur ganze Zahlen zuge
lassen sind.
Wird der Integerbereich über- oder unterschritten, so wird ILLEGAL QUANTITY
ERROR gemeldet. Dagegen wird kein Fehler gemeldet, falls das Ergebnis eines
Ausdrucks Nachkommastellen enthält:
31
Zahlen mit Nachkommastellen werden in die nächstkleinere Zahl umgewandelt. Bei
positiven Zahlen ist dies gleichbedeutend mit dem Abschneiden des Nachkomma
teils, bei negativen bedeutet es betragsmäßig aufrunden!
123.456 ergibt 123
-123.456 ergibt -124
Intern wird eine Integerzahi in 2 Bytes dargestellt, die in der Reihenfolge
HIGH, LOW abgespeichert sind: WERT = 256*HIGH + LOW
1.2.3 Bytezahl
In vielen BASIC-Befehlen kommen Parameter vor, die nur die ganzzahligen Werte
von
0 bis 255
annehmen dürfen. Wir bezeichnen sie als Byte-Werte, weil durch ein Byte genau
dieser Wertebereich dargestellt werden kann.
Auch hier ist ILLEGAL QUANTITY ERROR die Folge, wenn negative Zahlen oder
Zahlen größer als 255 verwendet werden. Etwaige Nachkommastellen werden abge
schnitten.
1.2.4 Logische Daten
Das Ergebnis von logischen Ausdrücken wird als wahr oder falsch bezeichnet,
kann also nur zwei verschiedene Werte annehmen. Im Gegensatz zu anderen Sprachen
wird in BASIC falsch als 0 und wahr als -1 dargestellt. Die Darstellung
logischer Werte erfolgt also durch Zahlenwerte!
Während das Ergebnis von logischen Ausdrücken nur die beiden Werte 0 und -1 an
nehmen kann, bedeutet für IF THEN nur der Wert 0 falsch und jeder andere
Wert wahr.
1.2.5 Adressdaten
Bei den Befehlen PEEK, POKE, SYS, USR und WAIT müssen absolute Maschinen
adressen angegeben werden. Diese 16-Bit-Adressen können Werte annehmen zwischen
0 und 65535 (2 h 16 - 1)
Verläßt man diesen Bereich, so wird ILLEGAL QUANTITY ERROR gemeldet.
32
1.2.6
BASIC Zeilennummern können ganze Zahlen sein zwischen
Versucht man eine größere Zeilennummer als 63999 oder eine negative einzugeben,
wird SYNTAX ERROR gemeldet!
Ein wesentlicher Unterschied zwischen BASIC Zeilennummern und den fünf vorher
besprochenen Zahlenarten ist zu beachten:
BASIC-Zeilennummern können nicht durch arithmetische Ausdrücke berechnet werden
und auch nicht in Variablen stehen. Sie müssen in den entsprechenden BASICBefehlen also immer als Konstante angegeben werden.
1.3 Strings
Ein String ist wörtlich übersetzt eine (Zeichen-) Kette. Ein String kann be
liebige alphanumerische Zeichen enthalten. Meistens handelt es sich dabei um
Text. Allgemeiner formuliert handelt es sich um druckbare Zeichen (-Codes).
Allerdings kann der Inhalt einer Stringvariablen auch wesentlich allgemeiner
definiert werden, nämlich als Bytefeld, in dem jedes Byte z.B. einen Dezimal
wert von 0 bis 255 repräsentieren kann.
BASIC-Zeilennummern
0 und 63999
Ein sehr wichtiger Unterschied zwischen String- und Zahlendaten ist, daß der
Computer den 'Sinn' eines Strings nicht verstehen kann, während er ja den Zah
lenwert von Zahlen 'versteht', also damit rechnen kann.
Strings und Zahlen sind also grundverschiedene Datentypen, die nicht verwech
selt werden dürfen. Passiert es doch, wird TYPE MISMATCH ERROR gemeldet.
33
2 . Dars t e 11 ungsweisen von Daten
2.1 Variable
Variable sind Namen für Speicherplätze, in denen sich der Computer Zwischen
ergebnisse merken kann. Es gibt zwei Unterscheidungskriterien bei Variablen.
Einerseits gibt es Variablen für Gleitkomma- und Integerzahlen, sowie für
Strings.
Andererseits gibt es einfache Variable, die nur 1 Zahlenwert oder 1 String
enthalten können und im Gegensatz dazu indizierte Variable oder Variablen
felder, die mehrere Werte unter dem gleichen Namen enthalten. Die Werte sind
dann einfach 'durchnummeriert'.
2.1.1 Variablennamen
Die Regeln für die Variablennamen sind unabhängig vom Variablentyp folgende:
Ein Name besteht aus maximal zwei Zeichen. Das erste Zeichen ist immer ein
Buchstabe, das zweite kann entfallen oder ist ein Buchstabe oder eine Ziffer.
Beispiel: AB
XI
C
Um Mißverständnissen vorzubeugen, sei auch hier erwähnt, daß Variablennamen
immer ohne SUFT eingegeben werden müssen, auch wenn sie dann im Text
modus als kleine Buchstaben auf dem Bildschirm erscheinen!
Grundsätzlich können Namen auch länger als zwei Zeichen sein, aber erstens wer
den nur die ersten zwei zur Unterscheidung herangezogen, so daß VAR1 und VAR2
denselben Speicherplatz bezeichnen. Zweitens gibt es Konflikte mit BASIC-Befehlen, wenn Befehlsworte im Namen enthalten sind, z.B. erzeugt 'UNSINN = 7' einen
'SYNTAX ERROR', weil SIN (Sinus) enthalten ist.
Da man bei längeren Namen oft nicht merkt, daß ein Befehl enthalten ist, und es
nur Platz und Zeit kostet, aber keinen Gewinn bringt, wird empfohlen, nur Namen
mit maximal zwei Zeichen zu verwenden.
Folgende Variablen sind für die angegebenen Zwecke reserviert und dürfen mit
der Ausnahme TI$ nicht neue Werte zugewiesen bekommen:
DS Disk Status (Nummer)
DS$ Disk Status (Text)
ST Peripherie-Status
TI TIME (Zeit in 1/60 Sekunden)
TI$ TIME (Zeit in Stunden, Minuten,
Die folgenden Namen sind für Variable nicht
Sekunden)
zugelassen (ergibt SYNTAX ERROR)!
FN Funktion
IF IF THEN
ON ON GOTO / GOSUB
OR ODER
TO FOR ... TO
34
2.1.2Variablentypen
Wie erwähnt, gibt es die drei Variablentypen Gleitkomma, Integer und String.
Wenn nach dem Namen ein % (Prozentzeichen) steht, handelt es sich um eine
Integervariable, wenn ein $ (Dollarzeichen) steht, um eine Stringvariable.
Wenn keines dieser beiden Zeichen folgt, ist immer eine Gleitkommavariable
gemeint.
Beispiel: AC Gleitkomma
AC% Integer
AC$ String
Diese drei Variablen verweisen auf drei verschiedene Speicherplätze, obwohl sie
denselben Namen haben!
Eine Gleitkommavariable kann als Inhalt jede Zahl haben, die der Definition der
Gleitkommazahl genügt.
Entsprechend kann eine Integervariable nur eine Integerzahl aufnehmen.
Eine Stringvariable kann Strings bis zu einer maximalen Länge von 255 Zeichen
(Bytes) aufnehmen. Dabei paßt sich die Variable der jeweils aktuellen String
länge automatisch an. Man muß nicht wie in anderen BASIC-Dialekten den benötig
ten Platz vorher belegen.
Wird die Länge von 255 überschritten, so wird STRING TOO LONG ERROR gemeldet und
der entsprechende Befehl nicht ausgeführt.
Eine Stringvariable kann auch gar kein Zeichen enthalten, wir bezeichnen ihren
Inhalt dann als den leeren String.
2.1.3 Indizierte Variable
Jede der drei Variablenarten kann nicht nur als einfache Variable auftreten,
sondern auch als indizierte Variable. Andere Bezeichnungen dafür sind: Matrix,
Vektor, Feld.
Gekennzeichnet sind indizierte Variable durch die Indizes, die in Klammern
hinter dem Namen folgen.
Einzelheiten darüber sind bei DIM zu finden. Die Anzahl der Dimensionen ist nur
durch den Platz in der BASIC Zeile begrenzt, die Anzahl der Elemente pro Dimen
sion und insgesamt nur durch den Platz im Arbeitsspeicher.
35
2.1.4Platzbedarf von Variablen
Jede einfache Variable belegt unabhängig vom Typ 7 Bytes im Arbeitsspeicher.
Bei den Zahlenvariablen (Gleitkomma und Integer) ist darin schon der Zahlenwert
enthalten. Bei Strings hingegen kommen noch die Anzahl der Zeichen hinzu, die
die Variable gerade enthält, sowie 2 Bytes zusätzlicher Verwaltungsbedarf für
jeden nicht leeren String.
Bei Feldern hängt der Platzbedarf vom Typ ab:
Typ
Integer
Gleitkomma
String
Für die Verwaltung der Felder sind zwar auch einige Bytes nötig, aber nur ein
mal pro Feld, so daß man diesen Bedarf gegenüber dem Bedarf für jedes Element
vernachlässigen kann.
Variable können jederzeit eingeführt, aber nicht mehr einzeln gelöscht werden.
Vor allem bei Feldern muß diese Eigenschaft schon während der Planung der
Datenstruktur berücksichtigt werden.
2.1.5 Zugriffszeiten auf Variable
Einfache Variable werden in einer Variablentabelle abgelegt. Jede angesprochene
Variable, die noch nicht in der Tabelle steht, wird am Tabellenende angehängt.
Da Variablen bei jedem Aufruf vom Tabellenanfang her gesucht werden, erfolgt
der Zugriff umso schneller, je früher (zeitlich) die Variable im Programm an
gesprochen wurde.
Die Tabelle der Feldvariablen kommt unmittelbar anschließend an die einfachen
Variablen. Sind bereits Felder definiert wenn noch zusätzliche einfache Varia
ble im Programm auf tauchen, so müssen alle Felder mit ihrem Inhalt nach hinten
verschoben werden. Der Zeitbedarf dafür kann bei großen Feldern beträchtlich
sein. Bei Zeitproblemen sollten also große Felder erst dimensioniert werden,
nachdem alle einfachen Variablen im Programm angesprochen wurden.
Bytes pro Element
2
5
3 + 2 + Stringinhalt
2.2 Konstante
Sowohl Zahlen als auch Strings können als Konstante direkt im Programmtext
auftauchen.
Beispiel: A = 3
B%= 15
A$= "TEXT"
D$= ""
Stringkonstante sind in der Regel durch Anführungszeichen einzurahmen. Eine
spezielle Stringkonstante sind zwei unmittelbar aufeinanderfolgende Anführungs
zeichen. Sie definieren den leeren String.
Bitte beachten Sie folgenden Unterschied zwischen Zahlen- und Stringkonstanten:
Während jeder mögliche Zahlenwert als Konstante ausgedrückt werden kann, sind
bei Stringkonstanten einige Einschränkungen zu beachten:
36
Länge
In einer String-Variablen können maximal 255 Zeichen stehen, aufgrund der
Beschränkungen der Bildschirmverwaltung können aber in einer String-Konstanten
nur maximal ca. 70 Zeichen stehen.
Codes
Nur die 128 ASC-Codes, die die nicht-reversen druckbaren Zeichen darstellen
(32-95 und 160-223) und einige Steuerzeichen (0-31 und 128-159) können in
Stringkonstanten dargestellt werden.
3. Umwandlungen zwischen Datenarten
Durch verschiedene Operationen sind Umwandlungen von einem Datentyp in einen
anderen möglich.
Die Umwandlungsbefehle zwischen Strings und Zahlen sind
ASC / CHR$
VAL / STR$
Sie sind unter diesen Namen beschrieben.
Hier soll nur auf die Umwandlung zwischen Gleitkomma- und Integerzahlen einge
gangen werden:
3.1 Integer in Gleitkomma
Die Umwandlung von Integer in Gleitkomma ist immer möglich und hat auf den
Wert keine Auswirkungen.
Beispiel: A = A%
3.2 Gleitkomma in Integer
Die Umwandlung von Gleitkomma in Integer ist nur möglich, wenn die Gleitkomma
zahl im Integer-Bereich liegt:
Beispiel: 10 A = 20156
20 A%= A
Ist dies nicht der Fall, wird ILLEGAL QUANTITY ERROR gemeldet.
Beispiel: 10 A = 50000
20 A%= A
RUN ergibt ILLEGAL QUANTITY ERROR IN 20
Wenn der (positive) Gleitkommawert Nachkommastellen enthält, werden diese
abgeschnitten, es wird also nicht gerundet:
Beispiel: 10 A = 123.256
20 A%= A
30 PRINT A%
RUN ergibt 123
37
Exakter ausgedrückt, wird die nächstkleinere ganze Zahl gebildet. Dies ist bei
negativen gebrochenen Zahlen zu beachten:
Beispiel: 10 A = -123.256
20 A%= A
30 PRINT A%
RUN ergibt -124
3.3 Rundungsfehler und Integerzahlen
(s. dazu auch den Abschnitt über numerische Ausdrücke)
Jede arithmetische und mathematische Operation wird auf Gleitkommabasis aus
geführt, es existiert also kein gesondertes Integer-Arithmetik-Paket!
Viele BASIC-Anweisungen haben Parameter, die keine gebrochenen Zahlen sein
dürfen. Diese ganzzahligen Parameter können Integer- oder Byteparameter sein.
Da aber in BASIC jeder Parameter als beliebig komplexer Ausdruck auftreten
kann, und Zahlenausdrücke auf Gleitkommobasis ausgewertet werden, wird das
Ergebnis solcher Ausdrücke automatisch in Ganzzahl-Format umgewandelt. Da
nun grundsätzlich nicht auszuschließen ist, daß in umfangreichen Gleitkomma
operationen sich die zwangsläufigen Rundungsfehler aufgrund der endlichen Man
tisse bis in die neunte Stelle schleppen, können intern Ergebnisse wie
123.999999 anstatt 124
auftreten. Beim Abschneiden auf Integerformat wird aus einem Fehler von 1E-6,
der zu vernachlässigen wäre, ein Fehler von 1, der einen Algorithmus 'zu Fall
bringen kann'.
Am Beispiel des Indexes von Feldvariablen können Sie dies leicht einsehen.
Sobald also ein Algorithmus bei Zwischenergebnissen die ganze Genauigkeit der
Mantisse von 9 Stellen benötigt, muß an geeigneten Stellen durch Rundung (s.
INT) dafür gesorgt werden, daß sich Fehler nicht fortpflanzen können!
In den meisten Fällen wird dies allerdings nicht nötig sein, weil Algorithmen,
die ein maximal fünfstelliges Ergebnis liefern, selten mit neunstelligen
Zwischenergebnissen arbeiten.
38
4.
Bis jetzt sind die verschiedenen Datenarten (Zahlen, Strings) vorgestellt wor
den, sowie ihre Erscheinungsformen (Konstante, Variable). Um bei den BASIC
Befehlen möglichst einfach die einzelnen Parameter beschreiben zu können, wollen
wir den Begriff des Ausdrucks einführen.
Ein Ausdruck kann bestehen aus Konstanten, Variablen, Verknüpfungsoperatoren und
Funktionen.
Beispiel: SIN(7*Z/5) numerischer Ausdruck
Wir unterscheiden folgende Ausdrücke nach ihren Ergebnissen:
Im einfachsten Fall kann ein Ausdruck also aus nur einer Konstanten bestehen, im
komplexesten aus mehreren geschachtelten Ausdrücken. Die Schachtelungstiefe
hängt auch von der Anzahl der GOSUBs und FOR NEXT Schleifen ab (s. Stack).
Bei der Behandlung der einzelnen BASIC Befehle werden die Parameter nur durch
die Art des Ausdrucks definiert. Es wird nicht jedesmal erwähnt, daß ein Aus
druck beliebig einfach (Konstante) oder sehr komplex sein kann. Anders ausge
drückt dürfen nur BASIC Zeilennummern nur als Konstante auftreten (z.B.
LIST 10 - 20), während alle anderen Parameter von Befehlen allgemeine Ausdrücke
des jeweiligen Typs sind!
39
4.1
Numerische Ausdrücke und Operatoren
Numerische Operatoren
OperationOperator
Potenz
h (Pfeil n. oben)
Negation
Beispiel
X h Y
<
X
1
(unäres Minus)
Multiplikation
Division
Addition
Subtraktion
*
/
+
-
X*Y
X/Y
X+Y
X-Y
Entsprechend der mathematischen Definition bindet die Potenzierung stärker als
die Multiplikation/Division und diese stärker als Addition/Subtraktion. Inner
halb der gleichen Hirarchiestufe werden Ausdrücke von links nach rechts ausge
wertet. Durch Klammern können die Standard-Hierarchien durchbrochen werden.
Beispiel:
AusdruckZwischen-Ergebn.
2+3 *5= 2+13= 17
(2+3)*5= 3*3
= 25
2 h 3*2= 8*2= 16
2 h (3*2)= 2h6= 64
Erläuterung
'Punkt vor Strich'
Klammern binden am stärksten
Exponentiation bindet stärker als Multiplikation
Klammern binden stärker als Exponentiation
2 h -3
2 h (-3)= .125
-2 h 3
-2 h -3
-2*3= -6
-2*-3= 6
-2*3= 6
= .1252h-3 = l/(2h3)
überflüssige Klammern schaden nicht
= -8
= -.125
-2h3 = (-2)*(-2)*(-2)
-2h-3= (-0.5)*(-0.5)*(-0.5)
minus mal plus ergibt minus
minus mal minus ergibt plus
-2 = (-l)*(-2)
Maximal kann ein Ausdruck 9 Klammerebenen enthalten. Wird diese Anzahl über
schritten, wird OUT OF MEMORY ERROR gemeldet.
Näheres ist unter Stack beschrieben. Abhilfe kann leicht geschaffen werden,
indem der Ausdruck in mehrere Teilausdrücke zerlegt wird, deren Ergebnisse in
mehreren Variablen zwischengespeichert werden. Im nächsten Schritt werden dann
diese Variablen in der gewünschten Weise verknüpft. Natürlich kann diese Unter
teilung in beliebig viele Teilschritte erfolgen. Dieser Methode sind keine Gren
zen gesetzt:
Beispiel A = (B+C) * (D+E)
kann ersetzt werden durch:
Zl= B+C
Z2= D+E
A = ZI * Z2
Die Fehlermeldungen OVERFLOW ERROR und ILLEGAL QUANTITY ERROR sind bei
den Datenarten beschrieben. Wird versucht, durch 0 zu dividieren, so wird
DIVISION BY ZERO ERROR gemeldet.
40
4.2 Logische Ausdrücke und Operatoren
Der Computer kann zwei numerische oder String-Ausdrücke vergleichen, um festzu
stellen, ob sie gleich bzw. ungleich sind, oder ob einer größer oder kleiner
als der andere ist.
Mehrere solcher Entscheidungsergebnisse kann er durch die logischen Operatoren
NOT, AND und OR verknüpfen. Auf diese Weise können sehr komplexe Entscheidungen
getroffen werden, die mit Hilfe von
IF (logischer Ausdruck) THEN
den Programmablauf beeinflussen können. Dies ist bei IF THEN beschrieben.
Darüber hinaus kann aber das Ergebnis einer logischen Entscheidung auch in
Variablen zur späteren Verwendung aufbewahrt werden.
Ehe aber diese Feinheiten betrachtet werden, sollen die 3 Vergleichs-Operatoren
mit ihren 6 Kombinationsmöglichkeiten vorgestellt werden:
Das Symbol für kleiner als ist spitze Klammer auf,
und für größer als ist spitze Klammer zu.
Aus technischen Gründen können diese Symbole hier im Text nicht dargestellt
werden,und
werden deshalb
durch k (kleiner als) bzw. g (größer als) ersetzt.
4.2.1
Operator
_
g
k
=k oderk=
=g oder
gk oder
Bei Zahlen ist die Bedeutung
Vergleichsoperatoren
Bedeutung
gleich
größer als
kleiner als
kleiner/gleichA=k 3
größer/gleichA
g=
ungleich
kg
dieser
auf Strings bedarf aber einer Erklärung:
Beispiel
Bedeutung:
ist der Inhalt der Variablen A
A = 3
A
g 3
A k 3
identisch mit dem Wert 3
größer als 3
kleiner als 3
kleiner oder gleich 3
g= 3
A gk 3
größer oder gleich 3
ungleich 3
(größer oder kleiner als 3)
Entscheidung offensichtlich. Die Anwendung
41
4.2.2Vergleich von Strings
'=' stellt fest, ob die Ergebnisse beider Stringausdrücke identisch sind, ob die
Strings also in allen Zeichen übereinstimmen.
'gk' stellt fest, ob die Strings nicht in allen Zeichen übereinstimmen. Anders
ausgedrückt, wird hier mit 'wahr' geantwortet, wenn mindestens ein Zeichen
verschieden ist.
'g' bzw. 'k' prüft die alphabetische Reihenfolge. Ist ein String 'kleiner' als
der andere, so steht er im Alphabet weiter vorne.
Einige Beispiele sollen diesen leistungsfähigen Vergleich verdeutlichen. Die
angegebenen Vergleiche erzeugen eine wahre Aussage:
1) "ABC" = "ABC"
2) "ABC" gk "ABX"
3) "ABC" k "BCD"
4) "ABC" k "BC"
3) "ABC" g "AB"
Allgemein wird der ASC Code der 1., 2., 3. usw. Zeichen beider Strings ver
glichen:
Solange die Codes identisch sind, werden die Strings als gleich bezeichnet (1).
Wird an einer Stelle ein Unterschied festgestellt, wird abgebrochen und das
Ergebnis lautet 'ungleich' (2).
Falls kleiner oder größer gefragt war, wird ebenfalls anhand der ersten Un
gleichheit entschieden, was zutrifft (3).
Grundsätzlich wird also nur bis zur ersten Ungleichheit verglichen! Ein Sonder
fall wird durch diese Definition ebenfalls erklärt: Wenn ein String zu Ende
ist, aber beide so weit identisch waren, so ist der kürzere der kleinere, weil
das leere Stringelement (für das es keinen ASC Code gibt!) als kleiner defi
niert ist, als jeder andere ASC Code! (3)
Wie Beispiel (4) zeigt, ist nicht die Länge der Strings ausschlaggebend. Ein
längerer String kann im Alphabet durchaus weiter vorne stehen, also 'kleiner'
sein als ein kürzerer!
4.2.3 Wahr und falsch
Wenn nur innerhalb von IF ... THEN Entscheidungen getroffen werden, genügt es
zu wissen, daß 'wahr' den Programmlauf hinter THEN fortsetzt, 'falsch' dagegen
in der nächsten BASIC Zeile (s. IF THEN).
Für kompliziertere Entscheidungen ist es hilfreich zu wissen, wie der Computer
die Werte 'wahr' und 'falsch' darstellt. Im Gegensatz zu anderen Computerspra
chen kennt BASIC keine speziellen logischen (boolean) Werte und Variable, son
dern stellt diese beiden Werte durch Integer-Zahlen dar:
42
Das Ergebnis eines logischen Ausdrucks ist
und
Beispiel:
0für'falsch'
-1für
? 5 g 3
'wahr'
Fünf ist größer als 3 ist eine wahre Aussage.
(false / nein)
( true / ja )
-1
? 3 g 5
0
A = 3 g 3
? A
Drei ist größer als 5 ist eine falsche Aussage.
Das Ergebnis des logischen Ausdrucks kann in eine
Zahlenvariable übernommen werden.
-1
Intern wird ein logischer Wert wie jede Integer Zahl als 16-Bit-Zahl darge
stellt. Bei '-1' sind alle Bits gesetzt, bei '0' entsprechend alle gelöscht.
4.2.4 Verknüpfung von logischen Ausdrücken durch NOT, AND und OR
NOT, AND und OR führen im Grunde bitweise logische Verknüpfungen mit zwei
16-Bit-Zahlen durch. Dies ist aber nicht wichtig zu wissen, wenn man nur logi
sche Ausdrücke verknüpfen will. Für diesen Fall kann man diese drei Operatoren
leicht verständlich definieren:
Werden zwei logische Ausdrücke durch AND verknüpft, so ist das Ergebnis genau
dann 'wahr' (-1), wenn beide Ausdrücke 'wahr' sind.
Bei OR ist das Ergebnis schon dann 'wahr', wenn wenigstens einer der beiden
Ausdrücke 'wahr' ist.
NOT verknüpft nicht zwei Ausdrücke, sondern ist ähnlich wie das arithmetische
Vorzeichen (unäres Minus) einem logischen Ausdruck vorangestellt und kehrt
seinen Wert ins Gegenteil um.
In der folgenden Tabelle sind alle Kombinationsmöglichkeiten nochmal zusammen
gestellt.
Verknüpfung
falsch
falschAND wahr
wahrAND
wahrAND wahrwahr
falschORfalschfalsch
falsch
wahrOR
wahr
AND
ORwahrwahr
ORwahr
falschfalsch
falschfalsch
falschwahr
Ergebnis
falsch
wahr
NOT wahr
NOT falsch
Ergänzende Informationen zu den logischen Ausdrücken sind bei IF THEN, NOT,
AND, OR und WAIT zu finden.
falsch
wahr
43
4.2.5Hierarchie
Bei der Auswertung von logischen Ausdrücken bzw. von Zahlenausdrücken gelten
gewisse Hierarchiestufen oder Bindungsregeln. In der folgenden Tabelle sind
nochmal alle Operatoren geordnet von der stärksten zur schwächsten Bindung
aufgeführt:
Mathematische Operatoren
Funktionen (SIN, FN, EXP usw)
(Vorzeichen, unäres Minus)
h (Exponentiation)
* /
Vergleichsoperatoren
= g k (alle Vergleichsoperatoren sind gleichberechtigt)
Logische Operatoren
NOT
AND
OR
Diese Hierarchien werden vom Computer sehr konsequent eingehalten. Da solche
Strukturen erfahrungsgemäß Vorstellungsschwierigkeiten bereiten, und deshalb zu
Programmierfehlern führen, sollten Sie folgenden Tip beherzigen: Solange Ihnen
diese Regeln nicht wirklich geläufig sind, spendieren Sie lieber einige (über
flüssige) Klammern, können aber dann sicher sein, daß der Rechner das tut, was
Sie eigentlich wollen. Einige Beispiele sollen die Problematik verdeutlichen:
4.2.6 Beispiele zu logischen Operationen
Automatische Durch Klammem
Hierarchie verdeutlicht/erzwungen
A=B AND C=D (A=B) AND (C=D) (1)
A=B OR C=D AND E=F (A=B) OR((C=D) AND(E=F)) (2)
((A=B) OR (C=D))AND(E=F)
A = B AND C (A= B)AND C (3)
A=(B AND C)
Fall (1) ist problemlos. In dieser Entscheidung wird lediglich gefragt, ob
gleichzeitig A=B und C=D ist. Wenn man die jeweils zwei denkbaren Fälle (gleich
oder nicht gleich) gegenüber stellt, ergeben sich insgesamt 4 Kombinationsmög
lichkeiten. In der folgenden Art kann man diese Möglichkeiten sehr übersichtlich
darstellen.
1100 A=B
1010 C=D
1000 AND
Die beiden Fälle wahr und falsch sind hier durch die Werte 1 und 0 repräsen
tiert. Wenn man sich zu der 1 noch das Minus denkt (-1) stellen die Tabellen
gleich die internen Werte im Computer dar.
44
Etwas komplizierter werden die Überlegungen zum Fall 2. Je nach Klammersetzung
werden die Operationen in verschiedener Reihenfolge durchgeführt. Wie die Tabel
len zeigen, führt dies zu verschiedenen Ergebnissen:
A=B OR (C=D AND E=F) (A=B OR C=D) AND E=F
11001100 C=D
10101010 E=F
10001000 AND
11110000 A=B
11111000 OR
An diesem Beispiel sehen Sie schon sehr deutlich, daß eine unüberlegt gesetzte
(oder weggelassene) Klammer das Ergebnis grundlegend verändern kann.
Das Beispiel 3 zeigt Ihnen, daß der Computer sogar mit Ausdrücken etwas anfangen
kann, die mit der 'Alltagslogik' nicht mehr zu verstehen sind. Im Sinne der
Boolschen Algebra sind diese Ausdrücke aber exakt definiert und deshalb hat der
Computer damit keine Schwierigkeiten:
(A=B) AND CA = (B AND C)
11110000 A
11001100 B
11000011 =
10101010 C
11110000 A=B
11001100 C=D
11111100 OR
10101010 E=F
10101000 AND
11001100 B
10101010 C
10001000 AND
11110000 A
10000111 =10000010 AND
45
4.3 String-Ausdrücke und -Operatoren
Stringausdrücke sind wesentlich einfacher aufgebaut, als numerische und logi
sche Ausdrücke, da sie nur einen Operator kennen, also ohne Hierarchieregeln
einfach von links nach rechts abgearbeitet werden.
Der Operator für Stringausdrücke ist + und bewirkt die Aneinanderreihung von
Teilstrings von links nach rechts. Diese Reihenfolge kann auch durch Klammern
nicht geändert werden.
Eine häufige Fehlermeldung bei Stringausdrücken ist STRING TOO LONG ERROR, wenn
der Ergebnis-String oder ein Zwischenergebnis-String länger als 235 Zeichen
werden sollte.
Weiterhin kann es zum TYPE MISMATCH ERROR kommen, wenn anstatt eines Teilstrings
ein Zahlenausdruck im Stringausdruck steht.
10 FOR I = 0 TO 255
20 A$ = A$ +
30 NEXT
STRING TOO LONG ERROR IN 20
Weitere Beispiele sind bei den Befehlen LEFT$, RIGHTS und MID$ zu finden.
Beachten Sie die Reihenfolge der
Aneinanderreihung!
Weil 123 nicht in Anführungszeichen
eingeschlossen ist, wird es als
Zahlen-Konstante und nicht als
String-Konstante interpretiert.
A$ soll mit aufgefüllt werden.
Die Schleife durchläuft aber 256
Werte und will deshalb 256 Zeichen
in den String schreiben. Anfangswert
1 statt 0 würde z.B. funktionieren.
46
5.
Das BASIC Programm im Arbeitsspeicher wird Zeichen für Zeichen vom Interpreter
abgetastet und ausgeführt. Dabei muß der Interpreter im ersten Schritt jeden
Befehl erst einmal analysieren. Erst nachdem dies geschehen ist, kann der Be
fehl ausgeführt werden.
Der Interpreter ist selbst ein Programm, allerdings in Maschinensprache ge
schrieben. Dieses Programm ist in ROMs (nichtlöschbare Speicherbausteine) einge
speichert und deshalb sofort beim Einschalten verfügbar.
Der Vorteil der Interpretersprache liegt darin, daß man relativ einfach im
'Dialog' mit dem Rechner Programme erstellen kann. Allerdings wird dies durch
den Nachteil erkauft, daß Interpreterprogramme relativ langsam ablaufen.
5.1 Geschwindigkeit
Bei manchen Programmteilen wäre es wünschenswert, daß sie schneller laufen. Es
ist nicht sinnvoll, exakte Laufzeiten von einzelnen Statements anzugeben, da
sie oft von vielen Parametern abhängen. Trotzdem ist es oft hilfreich, wenig
stens die Größenordnung von Befehlsausführungszeiten zu kennen: Zwischen
Interpreter und Organisation
1 ms und 100 ms
können einfache BASIC Statements zur Ausführung brauchen. Sehr umfangreiche
Ausdrücke können auch länger als 100 ms dauern.
Es können also sicher nicht mehr als 1000 BASIC Befehle pro Sekunde ablaufen.
Als grobe Näherung ist der Wert 100 Befehle pro Sekunde ganz nützlich.
Soweit es sinnvoll ist, werden bei einzelnen Befehlen qualitative Hinweise zur
Ausführungszeit gegeben.
Hier sollen einige generelle Hinweise gegeben werden, die sich nicht auf spe
zielle Befehle beziehen:
Mehrere Befehle pro Zeile
Commodore-BASIC bietet im Gegensatz zu vielen anderen BASIC-Dialekten die Mög
lichkeit, mehrere Anweisungen durch Doppelpunkt getrennt in eine Zeile zu
schreiben. Diese Möglichkeit sollte aus zwei Gründen ausgenützt werden: Erstens
dauert der Übergang zu einer neuen Zeile länger, als der Übergang zu einem neuen
Statement und zweitens steigt die Zeit für Sprünge mit der Anzahl der Zeilen.
Außerdem braucht eine neue Zeile 5 Bytes an Verwaltung, während der Trenn-Doppelpunkt zwischen zwei Befehlen nur 1 Byte benötigt. Pro weiterem Statement in
einer Zeile spart man also vier Bytes ein.
Keine überflüssigen SPACEs
Wenn Zeit und Platz knapp sind, sollte nicht die Lesbarkeit des Listings durch
Spaces erhöht werden, weil jedes Space 1 Byte benötigt und vom Interpreter
gelesen werden muß.
47
Kurze Variablennamen
In zeitkritischen Schleifen sollten möglichst nur einbuchstabige Variablen
verwendet werden. Das bedeutet, daß auch keine Integervariablen verwendet werden
sollten, da das '%' auch gelesen werden muß. Außerdem muß erst das Integerformat
in Gleitkomma umgewandelt werden, was zusätzlich Zeit kostet.
5.2 Spaces im BASIC Text
Prinzipiell brauchen im BASIC Text keine Spaces als Trennzeichen stehen. Es
gibt allerdings einige Ausnahmefälle, wo durch Spaces eindeutige Verhältnisse
geschaffen werden müssen:
Beispiel:
10 IFSTAND64THEN... (IF ST AND 64 THEN)
20 IF64ANDSTTHEN... (IF 64 AND ST THEN)
30 IFSTOR64THEN
Zeile 10 meldet SYNTAX ERROR, Zeile 20 nicht. Eigentlich müßten beide Zeilen
völlig identische Wirkung haben, da die beiden Operanden um AND vertauschbar
sein müssen.
Des Rätsels Lösung: Der Interpreter findet nach dem S den Befehl TAN (Tangens),
aber dahinter keine Klammer. Und schon kennt er sich nicht mehr aus und bringt
die Fehlermeldung. In Zeile 20 hat er keine Möglichkeit zu Fehlinterpretationen
In Zeile 30 findet er nach S den Befehl TO (FOR..TO..NEXT). Ein Space nach ST
in 10 und 30 behebt den Fehler.
________
(IF ST OR 64 THEN)
Sollte man sich also mit einem hartnäckigen SYNTAX ERROR herumschlagen, kann
eine derartige Mißdeutung die Ursache sein!
5.3 BASIC-Zeilenformat und Platzbedarf
Jede BASIC-Zeile beginnt mit einer Zeilennummer und kann, durch Doppelpunkt ge
trennt, mehrere Befehle aufnehmen.
Jedes BASIC-Befehlswort wird durch einen 1-Byte-Code komprimiert im Speicher
gehalten. Jede andere Information innerhalb der Zeile braucht soviele Bytes,
wie sie Zeichen umfaßt.
Jede BASIC-Zeile benötigt 5 Bytes für ihre Verwaltung. Im einzelnen sind das
2 Bytes für die Zeilennummer, 2 Bytes für einen Vorwärtszeiger auf die nächste
BASIC-Zeile und der Code 0 als Abschluß der Zeile.
Durch die Beschränkung der Bildschirmeingabe kann eine BASIC-Zeile maximal ca.
80 Zeichen lang sein. Allerdings könnte der Interpreter BASIC-Zeilen bis zu
einer internen (Interpretercode) Länge von 250 Bytes verarbeiten.
Es ist möglich, durch Verwendung der Befehlsabkürzungen mehr Information in die
Zeile zu bringen, als die 80 Zeichen-Zeile normalerweise gestattet, aber dies
sollte man nur in Ausnahmefällen nutzen, da LIST die betreffende Zeile ja nicht
mit den Abkürzungen druckt, sondern durch Verwendung der vollen Befehlsworte
die Zeile über mehr als 80 Zeilen auslistet. Zum Editieren müssen dann von Hand
wieder alle Abkürzungen eingegeben werden, um die Zeile geändert wieder in der
vollen Länge abspeichern zu können.
48
5.4
Der freiprogrammierbare BASIC-Arbeitsbereich des Rechners (34 K) gliedert sich
in folgende Teile:
Die Zero Page ist ein 256 Bytes langer Bereich, auf den der Prozessor extrem
schnell zugreifen kann. Alle besonders häufig benötigten Daten legt das Be
triebssystem und der Interpreter dort ab.
Speichereinteilung
Zero Page
Stack
Page 2,3
BASIC-Text (Programm)
Einfache Variable
Indizierte Variable (Felder)
Strings
Bildschirm
Der Stack (Stapel) wird im nächsten Abschnitt mit seinen Konsequenzen für BASIC
beschrieben.
Die folgenden 512 Bytes (Page 2,3) enthalten unter anderem die beiden Kassetten
puffer mit zweimal 191 Bytes Länge, den BASIC-Eingabepuffer mit 80 Zeichen
Länge, sowie den Tastaturpuffer mit 10 Zeichen Länge.
Ab dem Byte 1024 steht der Text des BASIC-Programms im komprimierten Inter
preter-Code.
Sobald ein Programm (mit RUN) gestartet wird, wird automatisch der Anfang der
Variablentabelle auf das Ende des BASIC Programms gesetzt. Das ist der Grund,
warum andererseits nach einer Änderung im Programm die Variablen 'weg' sind.
Das Ende der Variablentabelle ist gleichzeitig der Anfang der Felder-Tabelle.
Dies hat zur Folge, daß der gesamte Feldbereich nach hinten verschoben werden
muß, wenn eine neue einfache Variable eingeführt wird.
Wichtig zu wissen ist, daß zwar jederzeit neue einfache und indizierte Variable
eingeführt werden können, daß aber nicht einzelne Variable oder Felder gelöscht
werden können!
Die Stringinhalte 'wachsen' von der oberen Speichergrenze (32K) her nach
'unten'.
Der Speicher wird also optimal den jeweiligen Gegebenheiten angepaßt. Trotzdem
kann er natürlich irgendwann zu klein sein. Dies wird dann durch OUT OF MEMORY
ERROR gemeldet. Bei folgenden Gelegenheiten kann diese Meldung auftreten:
Tritt sie bei der Programmeingabe auf, so ist das Programm alleine schon zu
groß, könnte also nie laufen, da zu diesem Zeitpunkt noch keine Variable im
Speicher steht. In diesem Fall kann nur 'Overlay' (LOAD) helfen.
49
Tritt sie nach dem Start des Programms auf, ist die häufigste Ursache eine
Dimensionierung von Feldern (DIM), da hiermit auf einmal sehr viel Speicherplatz
belegt werden kann. Man kann leicht nachprüfen, ob dies der Fall ist: Erstens
muß in der gemeldeten Zeile ein DIM stehen und zweitens muß der Platzbedarf des
Feldes (s. indizierte Variable) größer sein, als der noch freie Speicherplatz
(FRE).
Scheidet DIM aus, kann es ein String sein, da Strings immerhin auch auf einmal
255 Bytes belegen können. In diesem Fall muß in der gemeldeten Zeile eine
Stringzuweisung stehen.
Ist auch das nicht der Fall, könnte theoretisch eine neu eingeführte einfache
Variable den Speicher gerade um 7 Bytes zu klein gefunden haben.
Wahrscheinlicher ist aber, daß der Stack 'übergelaufen' ist:
5.5 Stack (Stapel)
Der Stack ist ähnlich wie die Zero Page ein bevorzugter Speicherbereich des
Prozessors. Der Stack eignet sich sehr gut zur Aufnahme von hierarchischen
Strukturen, wie sie die Daten für Unterprogramme (GOSUB/RETURN), Schleifen
(FOR NEXT) und Klammerebenen in Ausdrücken darstellen.
Deshalb legt der Interpreter die nötigen Verwaltungsinformationen für Unter
programme, Schleifen und Ausdrücke im Stack ab. Dies hat den Vorteil, daß der
Rücksprung aus Unterprogrammen (RETURN), der Rücksprung in Schleifen, sowie die
Überprüfung des Endwertes und die Berechnung von Ausdrücken in sehr kurzer Zeit
durchgeführt werden kann. Andererseits ist der Stack ein endlicher Speicher
bereich, der relativ schnell 'überläuft'.
Wie schon erwähnt, kann auch dies der Grund für OUT OF MEMORY ERROR sein. Die
folgenden Werte sollen Ihnen einen Anhaltspunkt geben, wieviel Ebenen jeweils
möglich sind.
GOSUB
FOR NEXT
Klammerebenen
Diese Werte sind exklusiv, d.h. wenn Sie z.B. 26 GOSUB Ebenen haben, kann keine
Schleife und kein Ausdruck mehr existieren, ohne daß OUT OF MEMORY gemeldet
wird.
Sollten Sie OUT OF MEMORY erhalten, helfen Ihnen vielleicht folgende Überlegun
gen weiter:
Eine Ausdrucksebene benötigt im Stack genausoviel Platz, wie eine FOR NEXT
Schleife (18 Bytes), eine GOSUB Ebene dagegen nur 5 Bytes. Sie können also
durch Verzicht auf eine Ausdrucksebene eine Schleife gewinnen oder 3 GOSUB
Ebenen gegen eine Schleife eintauschen.
409 FOR I = 0 TO 1
410 FOR J = 0 TO 1
420 PRINT A;B;C;D;E;F;G;H;I ;J
430 NEXT J,I,H,G,F,E,D,C,B,A
Die Beispiele in 200, 300 und 400 ... zeigen die jeweils maximal mögliche
Schachtelungstiefe, nämlich 10, 26 und 10. Es sei nochmal betont, daß die drei
Beispiele nicht kombiniert werden können, weil jedes für sich den Stack voll
kommen in Anspruch nimmt.
Wenn Sie jeweils eine Ebene mehr anfügen, wird OUT OF MEMORY IN ... gemeldet.
Lösungsvorschläge
Am leichtesten kann die Schachtelungstiefe von Ausdrücken vermindert werden, da
man sie nur in Teilausdrücke zu zerlegen braucht, deren Ergebnisse schrittweise
zusammengefaßt werden (s. numerische Ausdrücke).
GOSUB-Ebenen kann man simulieren, indem das Unterprogramm statt mit GOSUB mit
GOTO angesprungen wird. Anstatt des RETURN muß dann am Ende des Unterprogramms
ein ON .. GOTO Verteiler dafür sorgen, daß das Unterprogramm wieder zum auf
rufenden Programm zurückspringt. Das aufrufende Programm muß dem Unterprogramm
dann lediglich in einer zusätzlichen Variable mitteilen, wer es gerufen hat (s.
ON GOTO).
FOR NEXT Schleifen sind sehr leicht durch IF THEN usw. zu ersetzen.
Natürlich sollte man zu solchen 'Krücken' erst greifen, wenn es wirklich nötig
ist, weil sie die Programmstruktur verschlechtern und langsamer sind.
51
6.Codes
Ihr Computer kann 256 verschiedene Zeichen auf dem Bildschirm darstellen und
kennt 256 verschiedene String-Codes. Der Code der Zeichen im Bildschirm ist
allerdings nicht identisch mit dem Code im String. Wir unterscheiden deshalb den
Bildschirmcode BSC und CBM-ASCII Code ASC. Zusätzlich soll noch der ASCII
Code ASCII besprochen werden, da dieser von fast allen Peripheriegeräten
verstanden wird, auch wenn sie von anderen Anbietern stammen.
6.1 ASCII
Der American Standard Code for Information Interchange (Amerikanischer
Standard Code für Informations Austausch) ist ein 7-Bit Code, durch ihn können
also 128 verschiedene Zeichen dargestellt werden. Der ASCII-Code ist in 4 Grup
pen zu je 32 Zeichen eingeteilt:
Dezimal Bereich
0-31
32 - 63
64 - 95
96 - 127
Wie bei ASC erklärt wird, verwendet Ihr Computer den Bereich von 0 bis 95 fast
ohne Änderung. Auf einige Unregelmäßigkeiten, vor allem auch in Verbindung mit
Druckern, die deutschen Zeichensatz haben, soll jedoch hingewiesen werden.
Folgende Codes des ASCII-Zeichensatzes sind u.U. mit verschiedenen Zeichen
belegt:
Code
35
60
62spitze Klammer zu
64
91
92Schrägstrich
93eckige Klammer zu
94Pfeil nach oben
95
Standardzeichen
Doppelkreuz
spitze Klammer auf
Klammeraffeß
eckige Klammer auf
Unterstrich
Steuerzeichen (nichtdruckbar)
Satz- und Sonderzeichen und Ziffern
Große Buchstaben
Kleine Buchstaben
Altemativzeichen (Beispiel)
Paragraphenzeichen
kein Zeichen (SPACE)
kein Zeichen (SPACE)
Ü oder Ä
ö
Ä oder Ü
Abwandlungen davon oder SPACE
Pfeil nach links
123geschweifte Klammer auf
124senkrechter Strichö
125
126
Einige Auswirkungen dieser Zeichenalternativen sehen Sie in diesem Handbuch. Das
Doppelkreuz' (Dateinummer) wird vom Drucker als Paragraphenzeichen dargestellt
und 'Pfeil nach oben' (Exponentiation) wird überhaupt nicht gedruckt. Deshalb
wurde es im Text durch h ersetzt. Auch die beiden spitzen Klammern werden nicht
gedruckt und deshalb durch g (größer als) und k (kleiner als) ersetzt.
52
geschweifte Klammer zuä oder ü
Schlange
ü oder ä
ASCII
■ 0
32BLK
33 !
34
•—*35 #
Q
36 $
.—( ■ ,i
1* • ■
38 &
4
5
b
i
40 (
41 >
10
11
12
13
42 *
43 +
44
45
1446
15
1 <r
17 S
« O o
à ‘-
1(5
J. «.*
£0 g
£1 £
4
C-3
ah tA
a
CP
47
48 0
49 1
58 £
51 3
52 4
53 5
54 6
55 7
£456 3
-er
£5
*7*7
57 3
58
53 ;
68 <r
22
36
31
61
fc-Z
k_
4
64 @
65 fl
66 E
67 C
68 2
63 E
78 F
71 G
72 H
“7;“; T
74 J
75 K
76 L
77 M
78 N
73 0
30 P
31 Q
82 R114 r
■- £•
C*C* •-*
34 T
35 U
86
118
87 W
o O V
t’t
S3 V
:
30 Z122 z
31 C
92
33 3
94 t
95 *•
36 e
37 a
33 b
33 c
100 d
101 e
162 4
103 3
184 h
105 i
106 j
107 k
108 1
183 m
110 n
111 o
112 K>
113 i
115 s
116 t
117 u
113 ui
128 x
121 y
123 4
124 3
125 I
126 S
127 ^
53
6.2ASC
Da im Commodore-BASIC 256 verschiedene Stringcodes existieren, kann der ASCII-
Code intern nur mit einer Änderung verwendet werden:
Die kleinen Buchstaben werden von den großen unterschieden, indem zum ASCII-
Code der großen Buchstaben 128 addiert wird, was gleichbedeutend damit ist, daß
Bit 7 gesetzt wird. Bit 7 enthält also die Information, ob die SHIFT-Taste
gedrückt wurde oder nicht. Dies gilt nicht nur für die Buchstaben, sondern auch
für alle Steuertasten.
Damit kann der ASC-Code folgendermaßen eingeteilt werden, was seine Darstellung
auf dem Bildschirm betrifft, wenn mit PRINT gedruckt wird:
Zwischen 32 und 95 liegen die Sonderzeichen und großen Buchstaben und zwischen
160 und 223 Graphikzeichen und die kleinen Buchstaben.
Zwischen 0 und 31 liegen Steuerzeichen und zwischen 128 und 159 die entsprechen
den SHIFT-Steuerzeichen.
Bleiben noch die beiden Bereiche 96-127 und 224-255. Sie enthalten, was die
Darstellung auf dem Bildschirm anbelangt, keine neue Information, weil sie
genauso dargestellt werden, wie die Bereiche 32-63 und 160-191. Ein Beispiel
soll dies verdeutlichen: Sowohl CHR$(33) als auch CHR$(97) wird auf dem Bild
schirm als M' dargestellt.
Im ASC Code sind also 2*64=128 druckbare Codes enthalten, sowie 2*32=64 nichtdruckbare Steuerzeichen. Die restlichen 2*32=64 Codes finden beim Drucken keine
Verwendung. Sie werden erst interessant, wenn ein String als Bytefeld (Binär
feld) verwendet wird.
Mit der kommerziellen Tastatur können nicht alle druckbaren Codes eingegeben
werden, sondern nur 32-95 und 192-223. Die Graphikzeichen zwischen 160 und 191
können also mit dieser Tastatur nicht eingegeben werden. Durch die Steuertasten
können noch einige Codes aus dem Bereich der Steuercodes eingegeben werden.
Durch Revers-Darstellung innerhalb von Anführungszeichen können alle Steuer
codes (0-31) und (128-159) eingegeben werden.
Einige Codes kommen sehr häufig im weiteren Text vor, oder werden allgemein oft
verwendet und sollen deshalb kurz vorgestellt werden:
Wagenrücklauf
Kommandos folgen
Leerzeichen
amerikanisches 'and'-Symbol
CR gleichzeitig mit SHIFT gedrückt
SP gleichzeitig mit SHIFT gedrückt
NUL hat in der ASCII-Norm die Funktion eines Füllzeichens, das keinerlei
Funktion hat. In Verbindung mit GET und INPUT bzw. mit Binärdateien hat es eine
Sonderstellung (s. GET/INPUT).
54
CR/LF hat (historisch) die Funktion der Wagenrücklaufes bzw. Zeilenvorschubes
bei Druckern / Fernschreibern. Innerhalb von Computer-Dateien hat es davon
abgeleitet die Funktion eines Trennzeichens zwischen einzelnen Datensätzen oder
Datenfeldern. Allerdings wird als Trennzeichen in der Regel nur CR und nicht LF
verwendet. Andererseits gibt es Drucker, die entweder bei Empfang von CR auto
matisch auch einen Zeilenvorschub machen (Auto-Linefeed) oder tatsächlich beide
Steuerzeichen benötigen, um die beiden Funktionen ausführen zu können. CR/LF hat
also zu tun mit Druckern einerseits und CR alleine hat zu tun mit Dateien und
Ein- / Ausgabebefehlen andererseits (s. GET/INPUT/PRINT). Beachten Sie bei INPUT
auch die spezielle Funktion von SH-CR.
ESC hat bei intelligenten Peripheriegeräten, die ASCII sprechen die Funktion
einer Kommando-Einleitung. D.h. nach Empfang von ESC erwartet das Gerät eine
bestimmte Anzahl von Kommando-Codes, die normalerweise gedruckt werden müssten,
aber nach ESC eben nur als Befehl interpretiert werden. Vor allem bei Druckern
ist diese Art der Kommandoübermittlung weit verbreitet.
SP / SH-SP wird deshalb erwähnt, weil beide Codes auf dem Bildschirm das
gleiche Zeichen produzieren, nämlich einen leeren Fleck, aber für die Eingabe
vom Bildschirm mit INPUT trotzdem verschiedene Wirkung haben.
Klammeraffe ist ein Ausdruck aus dem Datenverarbeiter-Jargon für das kleine a
mit dem Haken, der es fast ganz umschließt. Dieses Zeichen ist im deutschen
Sprachraum meistens nicht bekannt, auch nicht seine diversen Namen, wird aber
in Zusammenhang mit der Floppy-Verwaltung evt. gebraucht.
CONTROL
s 12s
ZEICHEN
32 160
: 12333 161 1 1
2 130
•34 1 " mà- à- i y *4
3 131 STOP.. PUH35 163 # 4 132
36 164 $ _
i 13337 165 i
3 134•-‘3 133 3 M
7 133 BELL BELL
16 7
1 c-640 1 63
3 137 TflB TfiSECL
IO 138
41 163 V Z
42 170 $ 1
11 13343 171 + '
12 14044 172 .. ,
13 141 CE SHCE
14 142 TEMT GRfiPH
15 143 SETTOP SETBOT
45 173 - -
46 174 . 1
47 175 7 -
18 1444 b 1 re* H r
17 145 CBOWN CUP
18 146 SVSÖN pysnpF
13 147 HOME OLE
20 148 DEL INST
21 143 BELLIN IN8LIN
22 150 ERSEHB ERSBEG
23 151
ci r* 135 E-I-ü53 187 : a
23 158
23 157 CEIGHT CLEFT
60 188 < 61 183 =
3G 15362 130 > *
31 153
63 131 ? “a
BUCHSTABEN
TEXT
54 132
55 133
s —
-3. H
fc B
57 135
63 136
G 0
d D
63 137
76 133
71 1 yy
72 200
T
•>
h H
73 201
74 202
r
75 293
/S 204
”?7tcr
i « -L‘ w
73 206
•i J
» . î
y.
1 L
;ïi M
n N
73 287
38 288
31 203
32 210
S3 211
34 212
35 213
86 214
37 215
fo F
-t 3
r- E
£
___
t T
u U
.... y
•'.m W
S3 216
8 3 L1 i’’
3G 218
31 213
y VV !
T “y
4 [
32 228
J
33 221
34 222
i ]
S T
35 2233 4-
•—
2
y
s
.
GRAPHIK
—
n î
;
B
B “
rr “
c
H ;
I •.
T
L L
M \
N .
n r
F
Q #
E _
S *
r ;
1 !
W C
X 4
Z *
[ 4
J 1
T TT
t- ^
55
6.3
BSC (Bildschirmcode)
Der Vollständigkeit halber wird hier auch der BSC aufgeführt.
Der Bildschirmcode ist im Allgemeinen nur von Interesse, wenn im Assembler
gearbeitet wird. Mit PEEK und POKE kann zwar auch von BASIC aus direkt auf den
Bild-Wiederhol-Speicher zugegriffen werden, dann wird man aber ausschließlich im
BSC arbeiten, so daß die angegebene Tabelle genügt.
Zur Tabelle muß nur noch hinzugefügt werden, daß die angegebenen Werte + 128 das
entsprechende Revers-Zeichen auf den Bildschirm bringen.
Der algorithmische Zusammenhang zwischen ASC- und BSC - Code, der nur aus ein
fachen Bitmanipulationen besteht, ist im Rahmen eines BASIC-Handbuches nicht
interessant.
Die Umschaltung zwischen Graphik und Kleinschreibung kann auf zwei verschiedene
Arten erfolgen:
Graphik PRINT CHR$(142) oder POKE 59468,12
Text PRINT CHR$( 14) oder POKE 59468,14
Die beiden POKEs ändern nur den Zeichensatz, während die PRINTs gleichzeitig
bei Text zwei Dunkelzeilen zwischen zwei Textzeilen einfügt bzw. bei Graphik
diese entfernt, so daß die Graphik vertikal nicht unterbrochen wird.
TEXT GRAPHIK
: d —
1 3. B
2 h B
• *' C L-
4 d n
^ f=- E
6 f F
7 -1 3
S h H
T
1 p t
< -, 1 J
il k K
J. _ L L_
12 ru M
14 n N
‘ ’“i J • J
16 r-- P
17 -t U
18 r R
i:- s ‘-Z’
20 t T
'1 N i!
22 y V
23 ui W
“• .4
23 y V
— *-• ■ *-
-- C* ’ 1 * »
r r
28 j ]
•-f, ■+• -+•
-L i >
31
TEXT GRAPHIK
32 BLK
33 !
.4 II
. ■*« -+
35 #
36 $
• ,»
■Z‘ i im
;C ÿ
;jQ
40 (72 H !
.4 4 \
-n x
64 — —
65 P *
66 E !
6 7 r* —•
68 E ~
63 E “
79 F -
71 G 1
i •-* X t
42 *74 J
43 +
-?«=: i/
1 !*•.
t •-* L. tn
43
.*» ilT
*■ +6 ■78 N
47
77 M \
73 n r
48 O80 F 1
43 1
50 2
p 1
er ■- .4
•-•u: ,-t
er--, er
54 -6
er er “7
er £
57 3
5 'ë*
SO <”717 & %
üT 1 —
w X ““33 i 1
6 7 7
63 T'
SI G! •
82 R 83 S *
84 T !
85 U
86 V X
87 W 0
88 X *
83 V 1
31 + +
34 1T 1T
35 ^ ’l
36 SHBL
37 1
180 _
181 1
1 fV-< —
r
X
_.‘
T
104
185 %
186 1
187 k
188 .
L
183
110 -,
111 .
112 r
113 -L
114 T
115 -i
116 1
il* 1
118 1
113 -
120 “
121 «
122
123 ■
124
125 J
126
127 ■,
56
II.
Dieser Abschnitt beschreibt ausführlich die Eigenschaften aller BASIC-Anweisun
gen. Vorausgesetzt ist, daß Sie die Abschnitte über Datenarten, Darstellungs
weisen und Ausdrücke und Operatoren in den wesentlichen Zügen verstanden haben,
bzw. daß Sie bei Bedarf in diesen Kapiteln nachschlagen.
Form
Zur Form in den Abschnitten 'Format' sollten Sie einige Hinweise beachten:
'GROSSBUCHSTABEN' kennzeichnen Worte der BASIC-Sprache, die exakt so und in
dieser Reihenfolge vom Computer erwartet werden.
'kleinbuchstaben' kennzeichnen als Platzhalter Stellen, in die irgendwelche
Parameter gehören. Die Art der Parameter ergibt sich entweder aus der Bezeich
nung oder aus nachstehenden Erklärungen.
Das Format für die dargestellten Befehlsausdrücke ist folgendes:
Alle Befehle bzw. Zeichen in Fettdruck müssen so eingegeben werden, wie sie in
der Beschreibung stehen.
Alle Zeichen in Normaldruck sind Teile, die unter Umständen wegfallen können.
Beachten Sie aber bitte, daß dann die Ersatzwerte gelten, die jeweils angeführt
sind.
BASIC-Anweisungen
Blanks (Leerstellen) sind überall nur der Übersichtlichkeit halber eingestreut.
Sie brauchen nicht mit eingegeben zu werden.
Abgesehen von Abkürzungen werden alle Buchstaben in BASIC-Zeilen ohne SHIFT
eingegeben, unabhängig davon, ob sie dann auf dem Bildschirm groß oder klein
erscheinen. Lediglich innerhalb von Anführungszeichen dürfen auch Buchstaben
erscheinen, die mit SHIFT getippt wurden (Stringkonstante).
Eine Tabelle der Befehlsabkürzungen finden Sie im Anhang.
Reihenfolge
Innerhalb der Befehlsbeschreibungen gehen die Erklärungen von vorne nach hinten
vom Prinzipiellen zu den Details. Viele dieser Details brauchen Sie sich nicht
zu merken, Sie sollten aber eine Ahnung haben, wo sie stehen, um bei Bedarf
schnell nachschlagen zu können.
Die Einführungen zu Anweisungsgruppen sollen auf Zusammenhänge und gemeinsame
Eigenschaften hinweisen. Solange Sie nicht mit diesen Zusammenhängen vertraut
sind, sollten Sie auch beim Nachschlagen diese Einführung jeweils mitlesen.
Die einzelnen Befehlsgruppen und auch die einzelnen Befehlsbeschreibungen inner
halb der Gruppen sind weitgehend unabhängig voneinander gehalten, so daß Sie
nicht unbedingt die Gruppen in der Reihenfolge des Inhaltsverzeichnisses lesen
müssen und auch innerhalb der Gruppen einzelne Teile auslassen können.
57
1. Programme laden und speichern
1.1 Einführung
Mit den Befehlen LOAD (DLOAD), SAVE (DSAVE) können Programme von Band oder
Diskette geladen, bzw. dorthin abgespeichert werden. Durch VERIFY kann über
prüft werden, ob die Aufzeichnung richtig erfolgt ist.
SAVE bezieht sich immer auf BASIC-Programme. LOAD und VERIFY dagegen kann
auch beliebige Speicherinhalte behandeln.
Diese Befehle sind prinzipiell Systembefehle, werden also im Direktmodus ange
wandt. Sie sind allerdings auch im Programm zugelassen, was bei SAVE und VERIFY
nur in Ausnahmefällen sinnvoll sein wird, bei LOAD aber das Nachladen von
Programmteilen durch 'Overlay' ermöglicht.
Die beiden Disk-Befehle DSAVE und DLOAD unterscheiden sich in der Wirkung kaum
von den 'normalen' BASIC-Befehlen. Deshalb wird hier nur das Format vorgestellt.
Bitte lesen Sie die Feinheiten im Floppy-Handbuch nach.
Folgende Parameter sind erforderlich:
dn Dateiname
gn Gerätenummer
ln Laufwerknummer (nur bei Floppy)
dn ist ein String-Ausdruck
gn ist ein Byte-Ausdruck
ln ist bei LOAD/SAVE/VERIFY ein Teilstring, der vor dn stehen muß,
bei DLOAD und DSAVE ein Zahlenausdruck, der nur 0 oder 1 ergeben darf.
Der Dateiname darf nicht länger als 16 Zeichen sein.
Die Gerätenummer ist 1 oder 2 für die Rekorder bzw. 8 (Standard) für die
Floppy.
Die Laufwerknummer kann nur 0 oder 1 sein.
Bei DLOAD und DSAVE ist zu beachten, daß Parametervariablen in Klammem stehen
müssen.
1.2 LOAD, DLOAD (Laden)
Zweck
Mit LOAD bzw. DLOAD können Programme von Band oder Diskette in den Arbeits
speicher geladen werden.
Format
LOAD ln: dn , gn
DLOAD dn , D ln , U gn
gn = 1 (Rekorder 1) ist Ersatzwert für nicht angegebene Gerätenummer bei LOAD
gn = 8 (Floppy 8) ist Ersatzwert für nicht angegebene Gerätennummer bei DLOAD
ln = 0 (Laufwerk 0) ist Ersatzwert für nicht angegebenes Laufwerk bei DLOAD
58
Beispiele
LOAD "l:PROGRAMMl",8 PROGRAMM1 von Gerät 8, Laufwerk 1 laden
DLOAD "PROGRAMM]",Dl,U8 identisch
LOAD DN$,GN Name (und Laufwerk) steht in DN$, Gerät in GN
DLOAD (DN$),U(GN),D(LN) Variable in Klammern!
DN$ enthält den Programmnamen,
GN die Gerätenummer und
LN die Laufwerknummer
LOAD DN$ vom Rekorder 1
LOAD vom Floppy
Nach LOAD "NAME",8 oder DLOAD "NAME" meldet der Rechner SEARCHING FOR NAME
und LOADING, falls das Programm vorhanden ist, oder FILE NOT FOUND ERROR,
falls nicht. FILE NOT FOUND ERROR wird auch gemeldet, wenn wegen eines
beliebigen Floppy-Fehlers der Zugriff nicht möglich war.
Wird bei LOAD das Laufwerk nicht angegeben, so sucht das Floppy automatisch auf
beiden Laufwerken, falls es das gewünschte Programm nicht auf dem ersten Lauf
werk findet. Dagegen sucht es bei DLOAD nur auf Laufwerk 0, falls kein Laufwerk
angegeben wurde und meldet dann schon FILE NOT FOUND, falls das Programm nicht
existiert.
Die Taste SHIFT/RUN lädt das erste Programm der Diskette im Laufwerk 0 und
startet es sofort. (Dies gilt nicht, wenn ein Floppy 3040 angeschlossen ist.)
Der leere Name wird durch SYNTAX ERROR abgelehnt.
Die Behandlung des Rekorders erfolgt in einem gesonderten Kapitel.
LOAD im Direktmodus
Im Direktmodus bewirkt LOAD außer dem eigentlichen Laden des BASIC-Programms
auch, daß die Zeiger der Speicherverwaltung auf das Ende des Programms einge
stellt werden. Das bedeutet, daß vorher vorhandene Programme und Variablen
vollständig gelöscht werden!
Hinter LOAD kann kein weiterer Befehl angegeben werden, er würde nicht ausge
führt werden!
LOAD"NAME",8:RUN hat also nicht die Wirkung, daß das Programm geladen und
sofort gestartet wird!
Die Wirkung von LOAD innerhalb eines Programms ist bei Overlay beschrieben.
Parametergrenzen / Fehlermöglichkeiten
Bei Gerätenummer 0 (Tastatur) oder 3 (Bildschirm) wird SYNTAX ERROR gemeldet,
bei Werten außerhalb der Bytedefinition (gn kleiner als 0 oder größer als 253)
ILLEGAL QUANTITY ERROR. Bei Gerätenummern von nicht vorhandenen Geräten wird
FILE NOT FOUND ERROR oder DEVICE NOT PRESENT ERROR gemeldet.
59
1.3
SAVE, DSAVE (Abspeichern)
Zweck
Mit SAVE (DSAVE) können BASIC-Programme auf Band oder Floppy abgespeichert
werden.
Format
SAVE ln: dn , gn
DSAVE dn , D ln , U gn
Beispiele
SAVE "l:PROGRAMMl",8
DSAVE "PROGRAMM1",Dl,U8
SAVE DN$,GN
DSAVE (DN$),U(GN),D(LN)
SAVE "NAME"
Besonderheiten von SAVE beim Floppy
Im Gegensatz zu LOAD muß bei SAVE das Laufwerk unbedingt angegeben werden! Bei
DSAVE wird automatisch auf 0 abgespeichert, wenn kein Laufwerk angegeben wird.
Falls irgendwelche Floppy-Fehler auftreten, wird dies nicht automatisch auf dem
Bildschirm gemeldet, sondern lediglich die Fehlerlampe zeigt an, daß ein Fehler
aufgetreten ist. Achten Sie deshalb auf die Fehlerlampe des Floppy. Leuchtet
sie, können Sie durch
?DS$
fragen, welcher Fehler aufgetreten ist. Zwei Fehlermeldungen, die bei SAVE
Vorkommen können, wollen wir kurz vorstellen. Wegen anderen Fehlermeldungen
schlagen Sie bitte im Floppy-Handbuch nach.
PROGRAMM1 auf Gerät 8, Laufwerk 1 absp.
identische Wirkung
Name und Laufwerk steht in DN$, Gerät in GN
Variable in Klammern, LN enthält Laufwerk
auf Rekorder 1
63, FILE EXISTS bedeutet, daß schon ein Programm mit diesem Namen existiert.
Ändern Sie deshalb entweder den Namen des neuen Programms oder löschen Sie das
alte Programm (SCRATCH).
26, WRITE PROTECT ON weist Sie darauf hin, daß der Schreibschutz geklebt ist.
Der Dateiname muß mindestens ein Zeichen enthalten, sonst wird SYNTAX ERROR
gemeldet.
Bei SAVE auf ein nicht vorhandenes Gerät wird keine Fehlermeldung gebracht,
sondern sofort READY gemeldet. Achten Sie also darauf, ob das Floppy wirklich
gelaufen ist!
Fehlermöglichkeiten
Die Gerätenummern 0 und 3 werden durch DEVICE NOT PRESENT ERROR abgelehnt.
Soll auf nicht vorhandene Geräte abgespeichert werden, wird entweder DEVICE
NOT PRESENT ERROR oder nichts gemeldet. Wenn die Gerätenummer kein Bytewert
ist, wird ILLEGAL QUANTITY gemeldet.
60
1.4
VERIFY (Überprüfen)
Zweck
Durch VERIFY kann die Aufzeichnung eines Programms auf Band oder Floppy über
prüft werden. Dazu wird das gerade im Speicher stehende Programm mit dem ange
gebenen Programm auf Floppy (Band) verglichen.
Format
Die Syntax von VERIFY und die Parameter sind identisch mit der von LOAD. Be
achten Sie bitte, daß es für VERIFY keine spezielle Disk-Version gibt.
VERIFY ln: dn , gn
Beispiele
VERIFY "l:PROGRAMMl",8 PROGRAMM1 auf Laufwerk 1 im Gerät 8
VERIFY das erste Programm auf Rekorder 1
Anwendung
Die häufigste Anwendung sieht so aus, daß Sie ein Programm mit SAVE abspeichern
und unmittelbar danach mit VERIFY überprüfen. Um sich die Arbeit zu erleich
tern, merken Sie sich vielleicht folgendes Verfahren:
'Sa"0:NAME",8' oben links auf den Bildschirm schreiben und ausführen. Mit 'HOME'
zurückgehen und mit 'Ve' 'Sa' überschreiben und wieder RETURN drücken. Dies
können Sie schon tippen, während das Floppy abspeichert. Damit erledigen Sie
SAVE und VERIFY in einem Arbeitsgang. Beim Rekorder müssen Sie allerdings war
ten, bis er fertig ist, weil die Tastatur durch Rekorderoperationen lahmgelegt
wird.
VERIFY meldet in jedem Fall VERIFYING und darunter entweder OK oder VERIFY
ERROR, falls keine Übereinstimmung festgestellt wurde.
Beim Band sollte bei VERIFY ERROR das Band bzw. die Einstellung des Schreib-/
Lesekopfes überprüft werden, falls sicher ist, daß nicht der falsche Programm
name angegeben wurde.
Beim Floppy ist normalerweise VERIFY ERROR nur möglich, wenn eine Fehlermeldung
des Floppy übersehen wurde.
VERIFY funktioniert aber nicht nur unmittelbar nach SAVE, sondern vergleicht
immer das aktuelle BASIC-Programm im Speicher mit dem Inhalt der Programm-Datei
auf Floppy oder Band. Wenn Sie also wissen wollen, ob das Programm im Speicher
identisch ist mit einem beliebigen auf Floppy oder Band, beantwortet VERIFY
diese Frage.
Für Neugierige
VERIFY macht fast das gleiche wie LOAD: Es holt die Bytes eines Programms in
den Rechner. Der Unterschied ist nur, daß LOAD diese Bytes dann im Speicher
ablegt, während VERIFY die geholten Bytes mit denen im Speicher vergleicht. Die
Wirkung auf Floppy oder Rekorder ist daher identisch mit der Wirkung von LOAD.
61
2. Programme starten und stoppen
2.1 Einführung
Nachdem ein Programm in den Speicher geladen (oder eingetippt) wurde, kann es
durch RUN oder GOTO gestartet werden.
Durch den STOP-Befehl kann es an definierter Stelle unterbrochen werden, bzw.
durch die STOP-Taste irgendwo, wo es sich zu diesem Zeitpunkt gerade befindet.
Nach einem Abbruch durch STOP bzw. durch END kann das Programm durch CONT an
der dem Abbruch folgenden Stelle fortgesetzt werden.
2.2 RUN / GOTO (Programm starten)
Zweck
RUN dient dazu, ein Programm am Anfang oder einer bestimmten Zeile 'kalt' zu
starten.
GOTO läßt das Programm an einer bestimmten Stelle 'warm' starten.
Format
RUN zeilennummer
GOTO zeilennummer
Beispiele:
RUN startet Programm im Speicher bei der ersten Zeile
RUN 100 bei Zeile 100
GOTO 10 startet bei 10, löscht Variable nicht
Anmerkungen
RUN bewirkt immer einen sogenannten 'Kaltstart'. D.h. die gesamten VariabienListen werden gelöscht, so daß unmittelbar nach dem Start keine Variable exi
stiert.
GOTO bewirkt prinzipiell einen 'Warmstart', d.h. alle Variablenwerte bleiben
erhalten.
Der exakte Unterschied zwischen RUN und GOTO besteht darin, daß RUN die Funk
tion von CLR beinhaltet, GOTO dagegen nicht.
Wenn hinter RUN keine Zeilennummer angegeben ist, wird das Programm in der
ersten Zeile gestartet.
GOTO darf nicht ohne Zeilennummer verwendet werden.
62
2.3STOP / CONT (Programm stoppen / fortsetzen)
STOP ist ausführlich bei END/STOP (s. Sprunganweisungen) beschrieben. Danach
bewirken sowohl die Anweisung STOP im Programm als auch die Taste STOP während
des Programmlaufes einen Abbruch des Programms.
Mit CONT kann der Programmlauf nach der Abbruchstelle fortgesetzt werden.
CONT setzt bei der nächsten Anweisung auf, also nicht erst am Anfang der näch
sten Zeile.
Auch nachdem das Programm verlassen wurde, weil während INPUT eine leere Ein
gabe gemacht wurde, kann mit CONT dieses INPUT wiederholt werden. Man beachte
den Unterschied zum Abbruch durch STOP: Nach STOP wird bei der nächsten An
weisung weitergemacht, nach der leeren Eingabe wird die aktuelle Anweisung,
nämlich das INPUT wiederholt!
Achten Sie darauf, daß Sie bei CONT keinen Fehler machen, sich also nicht ver
schreiben und auch der Rest der Zeile leer ist, da sonst ein SYNTAX ERROR die
Folge sein könnte und dann keine Möglichkeit mehr gegeben ist, mit CONT fortzu
fahren:
Nach Fehlermeldungen kann das Programm nicht mit CONT fortgesetzt werden. Der
Computer meldet diesen Umstand durch CAN'T CONTINUE ERROR (keine Fortsetzung
möglich). Der Grund liegt darin, daß nach Fehlermeldungen der Stack leer ist,
also Unterprogramm-, Schleifen- und Ausdrucks-Hierarchien zerstört sind.
Dies ist nicht zu verwechseln damit, daß Variableninhalte gelöscht sind, was
nämlich nicht der Fall ist. Das bedeutet, daß man nach dem Ausstieg durch eine
Fehlermeldung mit GOTO an geeigneter Stelle das Programm warm starten kann.
Während der Testphase tut man gut daran, solche Einstiegspunkte (Warmstart
punkte) zu schaffen, falls sie nicht ohnehin vorhanden sind.
63
3.
3.1 Einführung
Etwas willkürlich wurden die folgenden vier Anweisungen unter dieser Überschrift
zusammengefaßt:
Mit LIST können Sie das gerade im Arbeitsspeicher stehende BASIC-Programm ganz
oder teilweise auf den Bildschirm oder den Drucker (s. CMD) ausgeben.
Mit NEW löschen Sie ein BASIC-Programm aus dem Arbeitsspeicher, mit CLR nur alle
Variablen.
FRE gibt Auskunft, wieviel Arbeitsspeicher noch frei ist.
Alle vier Anweisungen sind in erster Linie zum Gebrauch im Direktmodus bestimmt,
können aber prinzipiell auch in Programmen Vorkommen.
3.2 LIST (Programm auslisten)
Zweck
LIST gibt ein Listing des aktuellen BASIC-Programmes auf den Bildschirm, bzw.
nach CMD auf einen Drucker aus.
Programm- und Speicherverwaltunq
Format
LIST von - bis
An Beispielen sollen die vier Möglichkeiten von LIST gezeigt werden:
LIST
LIST 20 - 50
LIST 20 -
LIST - 50
Bitte beachten Sie, daß LIST 0 ebenfalls das ganze Programm auslistet.
Alle Zeilen, die nach LIST auf dem Bildschirm stehen, können ohne weiteres be
liebig verändert werden. Die geänderte Zeile wird aber nur durch Drücken der
RETURN-Taste übernommen, nicht aber durch SHIFT/RETURN!
Listing verlangsamen / stoppen
Nachdem die unterste Bildschirmzeiie beschrieben wurde, rollt der Bildschirm
hoch. Wenn Sie zu diesem Zeitpunkt die Taste 'Pfeil nach links' (links oben)
gedrückt halten, wird nach jedem Hochschieben eine kleine Pause gemacht.
Durch Drücken der Taste mit Doppelpunkt/Stern während des Hochrollens, wird
jede Aktivität des Rechners unterbrochen, bis entweder 'Pfeil nach links' oder
STOP gedrückt wird. Bei 'Pfeil nach links' wird das Listing fortgesetzt, bei
STOP mit BREAK abgebrochen.
listet das ganze Programm
listet von Zeile 20 bis 50 einschließlich, sofern vorhanden
listet ab 20 bis zum Programmende
listet von der ersten Zeile bis 50
LIST im Programm
LIST kam zwar innerhalb eines Programms verwendet werden, das Programm wird
aber nach dem Listing beendet, der Rechner meldet sich mit READY.
64
3.3
CLR (Variable löschen)
Zweck
CLR löscht alle Variablen.
Format
CLR (nicht mit der HOME/CLR - Taste verwechseln)
Anmerkungen für Fortgeschrittene
CLR löscht eigentlich die Variableninhalte nicht, sondern 'zerstört' nur die
4 Zeiger, die die Variablenlisten verwalten.
Im Einzelnen wird (44,45) (Ende einfache Variablen) und (46,47) (Ende indi
zierte Variable) auf den Wert von (42,43) (Ende BASIC-Text) gesetzt. Entspre
chend wird (48,49) und (50,51) (Anfang und Ende des letzten Strings) auf den
Wert von (52,53) (Speicherobergrenze) gebracht.
Dadurch finden alle Zugriffsroutinen leere Listen vor.
CLR kann ohne weiteres im Programm verwendet werden. Bedenken Sie aber, daß Sie
nicht selektiv löschen können, sondern nur alle Variablen.
Eine spezielle Anwendung von CLR ist bei Overlay beschrieben.
3.4 NEW (BASIC-Programm löschen)
Zweck
NEW löscht das BASIC-Programm im Speicher.
Format
NEW
NEW beinhaltet die Funktion von CLR.
Anmerkungen für Fortgeschrittene
Ähnlich wie CLR löscht auch NEW nicht wirklich, sondern setzt nur (42,43) auf
0,4 (= 1024 = Beginn des BASIC-Speichers)
NEW im Programm bewirkt, daß sich das Programm selbst löscht. Die Meldung danach
ist READY wie nach END.
65
3.5 FRE (freier Speicherplatz)
Zweck
FRE übergibt die Anzahl der noch freien Bytes des BASIC-Arbeitsspeichers.
Format
FRE (0)
Der Parameter in Klammern muß angegeben werden, weil FRE sonst nicht durch die
SYNTAX-Prüfung kommt. Er hat aber weiter keinerlei Bedeutung.
Beispiel:
? FRE(O)
FRE(O) im Direktmodus
FRE wird im Direktmodus oft dann gebraucht, wenn das Programm mit OUT OF
MEMORY ERROR abgebrochen wurde. Wie bei Stack beschrieben, kann dann durch
FRE festgestellt werden, ob wirklich der Arbeitsspeicher oder aber der Stapel
'übergelaufen' ist.
FRE(O) im Programm
Falls Sie platzkritische Dimensionierungen haben, deren Platzbedarf sich im
Dialog mit dem Anwender ergibt, können Sie mit FRE prüfen, ob der Platz noch
reicht und dies gegebenenfalls dem Anwender schonender mitteilen als durch OUT
OF MEMORY ERROR.
Anmerkungen für Fortgeschrittene
FRE muß erst die Garbage Collect Routine rufen (s. Stringverwaltung). Wenn sehr
viele Strings im Speicher stehen, kann diese Routine bis zu einer Sekunde
brauchen. Damit kann also auch FRE solange brauchen. Dies ist zu beachten,
wenn FRE im Programm verwendet wird.
FRE berechnet die Differenz zwischen (48,49) (Anfang des letzten Strings) und
(46,47) (Ende der indizierten Variablen).
66
4. Wertzuweisunqen
4.1 Einführung
Der wohl am häufigsten benötigte Befehl ist die Wertzuweisung an eine Variable.
Wir unterscheiden drei Arten der Zuweisung. Die am häufigsten benutzte Art ist
die Zuweisung des Ergebnisses eines Ausdrucks an eine Variable (=). Für die
Zuweisung von Konstanten kann auch der Befehl READ benutzt werden, der in Zu
sammenhang mit DATA steht. Schließlich gibt es noch die sehr wichtige Möglich
keit, einer Variable einen Wert zuzuweisen, der von außen kommt, also von einem
Peripheriegerät. Dies wird durch INPUT bzw. GET ermöglicht. Diese beiden Be
fehle haben wir allerdings dem Komplex der Ein- / Ausgabebefehle zugeordnet.
4.2 Allgemeine Zuweisung (LET)
Zweck
An die Variable auf der linken Seite des 'Gleichheitszeichens' wird das Ergebnis
des Ausdrucks auf der rechten Seite übergeben.
Format
LET variable = ausdruck
LET kann entfallen. Da LET nur sinnvoll wäre, wenn Ihr BASIC Programm auch auf
einem anderen Rechner laufen muß, der LET verlangt, werden wir LET nicht ver
wenden.
Trotzdem soll der Sinn kurz erklärt werden, weil dadurch gleichzeitig eine
Fehlinterpretation des '=' vermieden wird: Die Zuweisung mit LET könnte über
setzt werden mit: Lasse den Inhalt von 'variable' gleich werden mit dem Ergebnis
von 'ausdruck'. Die Zuweisung ist also nicht zu verwechseln mit einer mathemati
schen Gleichung. In LET steckt der Hinweis darauf, daß die beiden Seiten nicht
gleichzeitig gleich sind, sondern erst gleich werden.
Beispiel: A = A + 1
Als mathematische Gleichung wäre dies ein Widerspruch. Die Zuweisung aber be
rechnet zuerst das Ergebnis des Ausdrucks auf der rechten Seite und speichert
dann das Ergebnis in die Variable auf der linken Seite!
Um Mißverständnisse auszuschließen, ist es üblich, die Zuweisung im Beispiel
folgendermaßen zu lesen:
Der Wert von A ergibt sich aus A+l.
Alle Probleme, die sich bei der Zuweisung ergeben können, sind in den Abschnit
ten 'Daten', 'Variable', 'Umwandlungen', 'Ausdrücke' und 'Stack' ausführlich
beschrieben. Wir wollen hier nur nochmal auf die wesentlichen Fehlermöglich
keiten aufmerksam machen.
67
Die Zuweisung muß im Typ übereinstimmen:
A = A$ bzw. A$ = ATYPE MISMATCH ERROR (bei der Zuweisung)
A = B + A$TYPE MISMATCH ERROR (im Ausdruck)
Umwandlung von Integer in Gleitkomma ist immer möglich, umgekehrt nur im Werte
bereich von Integer und mit Änderung des Wertes durch Abrunden.
Beispiele:
A = B%Integer in Gleitkomma ist immer möglich
A = -3.5
B% = A
? B%
-4Wertänderung durch Abschneiden
A = 32768
B% = A
ILLEGAL QUANTITY ERROR kein Integer-Wert
Der Ausdruck darf nicht umfangreicher werden, als der Stack zuläßt, sonst wird
OUT OF MEMORY ERROR gemeldet (s. Stack).
68
4.3
4.3.1 Einführung
In DATA-Anweisungen können Zahlen- oder Stringkonstante abgelegt sein, die durch
READ an Variable zugewiesen werden können.
Normalerweise verwendet man DATA und READ in erster Linie, um Variablenfelder
mit Werten zu versorgen. Diese Werte können dann entweder der endgültige Inhalt
dieses Feldes sein, oder nur sogenannte Anfangswerte.
Eine weitere Anwendung von DATA ist der Ersatz einer Band- oder Floppydatei
durch eine DATA-Datei während der Entwicklung eines Programmes bzw. zu Test
zwecken.
In der Regel ist es nicht sinnvoll, einfache Variable aus DATAs mit Anfangs
werten zu versorgen, da dies mit einer normalen Zuweisung durch '=' genauso
effektiv und übersichtlicher erreicht werden kann.
Die Anweisungen werden jetzt in der Reihenfolge READ, DATA, RESTORE vorgestellt.
Anschließend wird ihre Zusammenarbeit beschrieben.
Zuweisung von Konstanten in DATA durch READ
4.3.2 READ (Lesen aus DATA)
Zweck
READ übergibt Konstante aus DATA in Variable.
Format
READ variablel , variable2 , variable3 .... : weitere Anweisungen
Beispiel
READ A1,B%,C$,D(I),C$(J)
Hinter READ kann eine oder mehrere Variable stehen. Jeder Variablentyp ist
zugelassen, die Anzahl ist nur durch die Zeilenlänge begrenzt. Die Variablen
werden durch Komma getrennt. Durch Doppelpunkt getrennt können hinter READ
weitere Anweisungen stehen.
Die Anordnung der Variablen ist identisch mit der bei INPUT. Dadurch kann zu
Testzwecken INPUT sehr leicht durch READ ersetzt werden!
69
4.3.3
Zweck
In DATA Anweisungen werden Konstante innerhalb des BASIC-Programmes gespeichert,
die mit READ in Variable übertragen werden.
Format
DATA konstante]. , konstante2 , .. : weitere Anweisungen
'konstante' kann eine Zahlen- oder Stringkonstante sein.
Hinter DATA können mehrere Konstanten stehen. Sie müssen durch Komma getrennt
werden.
Hinter einer DATA Anweisung können durch Doppelpunkt getrennt weitere Anweisun
gen in der gleichen Zeile folgen. Wenn keine weitere Anweisung in der gleichen
Zeile folgt, muß kein Doppelpunkt stehen.
Stringkonstante
Grundsätzlich müssen Stringkonstante in Anführungszeichen stehen. Bei DATA gibt
es jedoch eine Ausnahme: Wenn keine SHIFT-Buchstaben oder Steuerzeichen oder
Komma oder Doppelpunkt enthalten sind, können die Anführungsstriche entfallen.
DATA (Datenfeld)
Wenn zwei Kommas unmittelbar aufeinander folgen, wird dies als leerer String
bzw. die Zahl 0 interpretiert!
Wichtig ist, daß eine DATA Anweisung nicht versehentlich durch ein Komma abge
schlossen wird. Dies würde nämlich ein zusätzliches leeres Element bedeuten!
Blanks
Innerhalb von Anführungszeichen werden Blanks berücksichtigt, sie werden also
durch READ in die Stringvariable mit übernommen.
Dagegen werden führende Blanks auch bei Strings ignoriert, wenn keine Anfüh
rungszeichen verwendet werden. Nachfolgende Blanks werden aber mitgelesen.
Bei Zahlen haben Blanks keinerlei Bedeutung.
Sonderzeichen
Sonderzeichen, wie z.B. die Cursorbewegungen oder RVS ON/OFF müssen innerhalb
von Anführungszeichen stehen.
Wird versucht, z.B. RVS ON ('R' revers) ohne Anführungszeichen einzugeben, so
zeigt 'LIST' ein normales 'R', das dann natürlich nicht mehr die Bedeutung von
RVS ON hat!
SHIFT-Zeichen
Wenn SHIFT-Buchstaben (allgemein Zeichen mit ASC-Code größer als 128) ohne
Anführungszeichen eingegeben werden, zeigt 'LIST', daß sie nicht übernommen
wurden!
70
4.3.4
Zweck
Der 'DATA-Zeiger' merkt sich, welche Konstante als letzte durch READ gelesen
wurde. Er sorgt dadurch dafür, daß die Inhalte der einzelnen DATAs in ihrer
Reihenfolge gelesen werden können.
RESTORE setzt den DATA-Zeiger auf die erste Konstante im ersten DATA des Pro
gramms. (RUN bewirkt automatisch RESTORE.)
Dadurch kann eine DATA-Datei öfter gelesen werden.
Format
RESTORE
Anmerkung
Es ist nicht möglich, auf das DATA in einer bestimmten Programmzeile zurückzu
setzen.
RESTORE (DATA-Zeiger zurücksetzen)
4.3.5 Eigenschaften einer DATA-Datei
Die Daten hinter allen DATAs bilden eine serielle Datei. Die Eigenschaft dieser
Datei ist vergleichbar mit Band- oder Floppydateien. Allerdings mit zwei Unter
schieden.
Erstens kann man nur eine einzige serielle Datei in DATAs anlegen. Das kommt
daher, daß das erste READ das erste Datenelement im ersten DATA liest und die
weiteren READs das jeweils nächste Element. Wenn ein DATA erschöpft ist, wird
beim nächsten DATA weitergelesen, sofern es vorhanden ist.
Man kann durch READ also nur alle Datenelemente vom ersten bis zum letzten
einiesen, nicht aber z.B. bestimmte DATA-Zeilen anwählen. Durch den Befehl
RESTORE hat man lediglich die Möglichkeit, wieder beim allerersten DATA mit dem
Lesen zu beginnen.
Zweitens handelt es sich um eine 'Nur-Lese-Datei', weil es vom Programm aus
keine Möglichkeit gibt, Daten z.B. vom Bildschirm aus in DATAs zu übernehmen.
Reihenfolge der DATAs
Die Reihenfolge der Daten wird nur durch die Reihenfolge der Zeilennummern der
einzelnen DATAs bestimmt. Dagegen ist es unwichtig, ob das erste DATA vor dem
ersten READ steht oder umgekehrt. Der Zeiger auf das nächste DATA-Element ist
nämlich völlig unabhängig vom normalen Programmzeiger.
71
Beispiel
10 DATA 3 : REM ANZAHL DER STAEDTE
20 DATA 8000,"Muenchen"
2 2 DATA 1000,"Ber 1 in"
24 DATA 6000,"Frankfurt"
30 READ AZ: DIM PZ%(AZ),SN$(AZ)
40 FOR I = 1 TO AZ: READ PZ%(I),SN$(I): NEXT
Die erste Konstante der DATA-Datei gibt die Zahl der einzulesenden Elemente an
(Beispiel!). Aufgrund dieser Information werden die beiden Felder für die Post
leitzahlen und die Städtenamen dimensioniert (30). Die Schleife in 40 liest
dann alle DATA-Elemente in die beiden Felder ein.
4.3.6 Fehlermeldungen
Wenn mehr READs vorhanden sind, als DATA-Elemente, wird abgebrochen mit OUT
OF DATA ERROR IN ................
Diese Meldung würde auftauchen, wenn im Beispiel in Zeile 10 die Zahl 4 anstatt
3 stehen würde.
Diese Fehlermeldung kann nur durch READ verursacht werden, im folgenden häufigen
Fall allerdings sehr versteckt:
Auf dem Bildschirm steht READY., der Computer befindet sich im sogenannten
Direktmodus. Sie gehen mit dem Cursor in die Zeile mit dem READY, und drücken
die RETURN-Taste. Der Computer bringt dann die OUT OF DATA Meldung. Er hat
READY, als READ Y interpretiert, aber kein DATA gefunden!
Dies zeigt nebenbei, daß READ auch im Direktmodus zugelassen ist, wofür es aber
kaum Anwendungen geben dürfte.
SYNTAX ERROR IN
Diese Meldung ist sehr bemerkenswert, weil sie erstens falsch ist und zweitens
eine Zeilennummer meldet, die man nicht ohne weiters als Quelle des Fehlers
erkennen kann: (Aber auch ein Computer ist manchmal nur ein Mensch.)
Wenn versucht wird, mit READ in eine Zahlenvariable ein Stringelement aus DATA
zu lesen, meldet der Rechner SYNTAX ERROR. Die Zeilennummer, die dahinter ange
geben wird, ist die der DATA-Anweisung, nicht die der READ-Anweisung!
Die richtige Fehlermeldung müßte lauten: TYPE MISMATCH ERROR!
Beispiel
10 DATA "123"
20 DATA ABCD
30 READ A
40 RESTORE: READ A$
30 READ A
_________
Nach RUN wird SYNTAX ERROR IN 10 gemeldet, nach RUN 40 dagegen SYNTAX ERROR
IN 20!
72
5. Ein- / Ausgabe - Anweisungen
5.1 Einführung
Ihr Computer ist in einer sehr leistungsfähigen und übersichtlichen Weise mit
seiner Peripherie verbunden. Hardwaremäßig wurde dies durch Verwendung des
IEC-Bus erreicht, durch den maximal 12 Peripheriegeräte an den Rechner ange
schlossen werden können. Auf der Seite der Betriebssoftware wurde das Konzept
des IEC-Bus konsequent zur Verwendung von logischen Dateien ausgebaut. Da die
logische Datei zentrale Bedeutung im E/A-Konzept hat, soll zuerst dieser Be
griff erläutert werden.
Die logische Datei
Zum Verkehr mit der Aussenwelt werden eigentlich nur zwei verschiedene Befehle
benötigt: Einer, der Daten vom Rechner zur Peripherie überträgt und ein ande
rer, der Daten von der Peripherie zum Rechner bringt. Dem Rechner ist es dabei
gleichgültig, an wen er Daten schickt, bzw. wer ihm Daten übergibt, da die Norm
des IEC-Bus dafür sorgt, daß die Datenübertragung für alle angeschlossenen
Geräte einheitlich erfolgt.
U.a. sieht diese Norm vor, daß Byte für Byte nacheinander übertragen werden
muß. Vom Rechnerbetriebssystem aus gesehen haben also alle 'Dateien' die Eigen
schaft, daß sie Bytes nacheinander aufnehmen, bzw. abgeben können. Man kann
also nicht ohne weiteres ein ganz bestimmtes Byte verlangen, sondern muß alle
Bytes vom Anfang der Datei bis zu diesem Byte lesen, ganz gleich welches Gerät
dahinter steht.
Konsequenterweise sprechen die E/A-Befehle (INPUT, GET, PRINT) nicht unmittel
bar bestimmte Geräte an, sondern über die sogenannte logische Dateinummer eine
symbolische Datei, die wir als logische Datei bezeichnen.
Natürlich muß jeder logischen Datei ein Gerät zugeordnet werden. Dies wird von
OPEN erledigt. OPEN verknüpft eine logische Dateinummer mit einer Gerätenummer
(Primäradresse) und einer Sekundäradresse. Was es mit diesen beiden Ausdrücken
auf sich hat, soll im folgenden kurz erklärt werden:
Gerätenummer und Sekundäradresse
Jedes Gerät am IEC-Bus wird durch eine Gerätenummer angesprochen, die zwischen
0 und 15 liegen kann. Nun gibt es aber Geräte, die selbst gewissermaßen mehrere
Geräte verkörpern, etwa verschiedene Betriebszustände (z.B. Drucker) oder ver
schiedene Datenkanäle (z.B. Floppy). Solche Geräte benötigen deshalb eine soge
nannte Sekundäradresse, durch die die Betriebsart bzw. der Datenkanal festge
legt wird. Der Begriff Sekundäradresse kommt daher, daß die Gerätenummer auch
Primäradresse heißt. Die Sekundäradresse kann zwischen 0 und 31 liegen.
Weil Ihr Computer selbst vier Geräte ist, sind die ersten vier Gerätenummern
für ihn selbst reserviert. Im einzelnen sind dies:
Nummer
Gerät
0
1,2
3
Diese Geräte hängen nicht wirklich am IEC-Bus, werden aber vom Betriebssystem
für BASIC so dargestellt, als ob.
T astatur
Rekorder 1,2
Bildschirm
73
Da der Computer es Ihnen mit sich selbst besonders einfach machen will, gibt es
für Tastatur, Rekorder 1 und Bildschirm abgekürzte E/A-Befehle, nämlich INPUT
und PRINT für den Bildschirm, GET für die Tastatur und SAVE/LOAD/VERIFY für
Rekorder 1.
Nun wollen wir noch kurz auf die weiteren Anweisungen eingehen, die Sie in
diesem Abschnitt erwarten.
Da ist einmal das sehr wichtige CLOSE, mit dem Dateien geschlossen, also abge
meldet werden. CLOSE ist das Gegenstück zu OPEN.
Beim Verkehr mit Peripheriegeräten muß oft der Zustand des Gerätes durch den
Status ST abgefragt werden. Insbesondere meldet der Status beim Lesen, wann eine
Datei zuende ist.
Die Funktionen DS und DS$ stehen zur Verfügung, um den Zustand des Floppy zu
melden.
Das Kommando CMD sorgt u.a. dafür, daß Sie Ihr BASIC-Listing auch auf den
Drucker ausgeben können.
Schließlich sind noch drei Funktionen vorhanden, um Ihnen die Formatierung von
Bildschirmausgaben zu erleichtern (TAB, SPC, POS).
5.2 OPEN (Datei öffnen)
Zweck
Durch OPEN wird die Verbindung zwischen den Ein- / Ausgabebefehlen PRINT§ ,
INPUT§ und GET§ und einem Gerät am IEC - Bus hergestellt (s. logische Datei).
Das gleiche gilt für DOPEN (Disk-OPEN). Die Syntax von DOPEN unterscheidet sich
aber stark von der OPEN-Syntax. DOPEN ist im Floppy-Handbuch beschrieben, des
halb wird hier darauf verzichtet.
Format
OPEN la , gn , sa , dn
la:
gn:
sa:
dn:
--
j - j —• — 7 — •
Logische-Adresse
Geräte-Nummer
Sekundär-Adresse
(1 - 127 / 128 - 255)
(0 - 15)
(0 - 31)
Datei-Name(Stringausdruck)
la, gn, sa sind jeweils Byteausdrücke, dn ist ein Stringausdruck.
la muß angegeben werden, die restlichen Parameter können entfallen. Wird aber
irgendein Parameter angegeben, müssen alle vor ihm auch angegeben werden.
Nicht angegebene Parameter erhalten automatisch folgende Werte zugewiesen:
gn 1 (Rekorder 1)
sa 0
dn leerer String
Die Bedeutungen der Parameter werden in den folgenden Punkten ausführlich er
klärt.
74
5.2.1
Die logische Adresse oder logische Dateinummer muß entspechend bei PRINT§la,
INPUT§la und GET§la angegeben werden. Durch die logische Adresse la wird bei
jedem dieser Befehle das Gerät mit der Gerätenummer gn und der Sekundäradresse
sa angesprochen.
Gleichzeitig kann nur eine Datei mit einer bestimmten la geöffnet sein.
Wird versucht, zum zweiten Mal ein OPEN mit der gleichen la durchzuführen, ist
die Folge ein FILE OPEN ERROR (IN ...) (Datei ist bereits geöffnet).
Vom CBM Betriebssystem sind maximal 10 Dateien gleichzeitig zugelassen. Wird
diese Anzahl überschritten, erfolgt die Fehlermeldung TOO MANY FILES ERROR
(IN...) (zu viele Dateien).
Bei beiden Fehlermeldungen werden gleichzeitig vom Betriebssystem alle anderen
Dateien geschlossen!
Im Wertebereich für la sind zwei Bereiche zu unterscheiden:
Bei la von 1 - 127 wird hinter einem PRINT§ , das nicht mit abgeschlossen
ist, nur CR, bei la von 128 - 255 wird CR + LF gesendet (s. PRINT§).
5.2.2 Gerätenummer / Primäradresse (gn)
Logische Adresse (la)
Die Gerätenummer wird auch physikalische Adresse, Primäradresse oder Geräte
adresse genannt. Folgende Adressen sind vom Betriebssystem fest belegt:
gnGerät
0
1Rekorder 1
2Rekorder 2
3
Für das Floppy ist standardmäßig 8 und für den Drucker 4 vorgesehen.
Ist kein Gerät angeschlossen, so wird bei OPEN - sofern dn angegeben wurde bzw. bei PRINT§, INPUT§ oder GET§ gemeldet: DEVICE NOT PRESENT ERROR (Gerät
ist nicht vorhanden / nicht eingeschaltet)
Werte größer als 31 sollten Sie unbedingt vermeiden, da das Betriebssystem
dadurch 'abstürzen' kann oder sonst irgendwelche sonderbaren Reaktionen bringt.
5.2.3 Sekundäradresse (sa)
Die Sekundäradresse stellt bestimmte Betriebsarten ein (Drucker) oder wählt
Datenkanäle aus (Floppy). Die entsprechenden sa mit ihren Wirkungen sind in den
jeweiligen Gerätehandbüchern beschrieben. Wegen der Bedeutung bei Banddateien
schlagen Sie bitte bei 'Rekorder' nach. Bei der Tastatur (gn=0) und dem Bild
schirm (gn=3) sind alle sa-Werte erlaubt, es ist aber sinnlos, eine sa anzuge
ben, da sie keinerlei Wirkung hat.
Tastatur(für Sonderanwendungen)
Bildschirm
(für Sonderanwendungen)
75
5.2.4 Dateiname / Kommandostring (dn)
Der vierte Parameter des OPEN ist ein String. Die Bedeutung für das Floppy ist
im Floppy-Handbuch beschrieben. Für die Rekorder enthält er den Dateinamen (s.
Rekorder).
Bitte beachten Sie folgenden Hinweis zum Format: Falls Sie den Dateinamen bei
Band oder Floppy nicht als 1 Konstante bzw. Variable angeben, müssen die ein
zelnen Teile durch '+' verbunden werden, und nicht etwa durch wie bei
PRINT, es handelt sich nämlich um einen Stringausdruck!
5.2.5 OPEN-Tabelle (Für Fortgeschrittene)
Die Zuordnung zwischen den einzelnen ln, gn und sa wird vom Betriebssystem in
einer Tabelle verwaltet. Die Anzahl der offenen Dateien steht in 174. Falls nun
eine der beiden Fehlermeldungen FILE (NOT) OPEN ERROR auf tritt, durch die ja
alle Dateien geschlossen werden, kann man den Zeiger in 174 auf die Anzahl der
offenen Dateien setzen und dadurch diese Dateien wieder öffnen. Dies ist deshalb
möglich, weil der Inhalt der eigentlichen Tabelle durch diese Fehlermeldungen
nicht verändert wird, sondern nur durch CLOSE.
Beispiel:
Sie hatten zwei Dateien offen, ehe die Fehlermeldungen kamen, dann können Sie
durch
POKE 174 , 2
die Dateien wieder öffnen. Dieser Tip ist natürlich nur für das Arbeiten im
Direktmodus sinnvoll oder für das Austesten von Programmen.
76
5.3
Zweck
CLOSE schließt die logische Datei la.
Format
CLOSE la
la ist die logische Adresse, also ein Byteausdruck. Pro CLOSE muß genau eine la
angegeben werden.
Anwendung
'CLOSE' meldet die Datei ab, die durch 'OPEN' der logischen Adresse la zugeord
net wurde. Man sagt auch, die Datei wird geschlossen. Jedem 'OPEN' muß im
Programm ein 'CLOSE' zugeordnet werden, sobald die betreffende Datei nicht mehr
gebraucht wird.
'CLOSE' wirkt auf das Rechner-Betriebssystem, kann aber auch auf das Peripherie
gerät wirken. Im Rechner wird dadurch die betreffende logische Dateinummer
wieder freigegeben. Im Floppy wird z.B. der entsprechende Kanal freigegeben.
Beim Band wird eine Schreibdatei durch EOF (End Of File) abgeschlossen, bzw.
bei sa=2 zusätzlich mit EOT.
CLOSE (Datei schließen)
Wichtiger Hinweis
Durch CLR, LOAD, RUN wird die Zuordnungstabelle von logischen Adressen zu
Geräten und Sekundäradressen gelöscht. Für den Rechner sind dadurch alle Da
teien geschlossen. Dies trifft aber nicht für das Peripheriegerät zu. Sollte
dadurch versehentlich eine Floppy- oder Band-Schreibdatei nicht mehr geschlossen
werden können, kann POKE 174 , anzahl offene Dateien (s. OPEN) weiterhelfen.
Wenn LOAD im BASIC Programm ausgeführt wird (Overlay), bleiben alle Dateien
geöffnet.
F ehlermöglichkeiten
CLOSE ohne la dahinter erzeugt SYNTAX ERROR. Dagegen kann man hinter CLOSE
mehrere la durch Komma getrennt angeben, von denen aber nur die erste berück
sichtigt wird. Trotzdem wird kein Fehler gemeldet. Deshalb sei es nochmal aus
drücklich gesagt:
Hinter CLOSE muß genau eine la stehen, nicht weniger und nicht mehr!
Durch CLOSE einer la, auf die keine Datei geöffnet wurde, wird kein Schaden
angerichtet, dieser Befehl wird ignoriert.
DCLOSE
Disk-CLOSE hat die gleiche Wirkung und den gleichen Zweck wie CLOSE, kann sich
aber nur auf Floppy-Dateien beziehen. Der Vorteil von DCLOSE ist, daß damit alle
Floppy-Dateien mit einem Befehl geschlossen werden können. Näheres entnehmen Sie
bitte dem Floppy-Handbuch.
77
5.4
Zweck
CMD adressiert das la zugeordnete Gerät als Listener (Datenempfänger) und meldet
dieses Gerät erst dann wieder ab, wenn PRINT§ auf eine beliebige offene Datei
ausgeführt wird, jedoch nicht bei PRINT (Bildschirm).
Format
CMD la , string
Erklärungen
Alle Daten, die auf den Bildschirm geschrieben werden, werden durch CMD auf ein
beliebiges Peripheriegerät umgelenkt.
Dies gilt für alle Ausgaben, ganz gleich ob sie vom BASIC-Programm durch PRINT
oder durch Meldungen des Betriebssystems oder z.B. durch LIST erzeugt werden.
Dagegen werden Eingaben von der Tastatur während INPUT oder im Direktmodus wei
terhin nur auf den Bildschirm geschrieben und können dort auch geändert werden.
CMD (Bildschirm-Ausgabe umlenken)
la Logische Adresse (s. OPEN)
string auszugebender String (Format wie bei PRINT, kann auch
entfallen
Folgende Befehlssequenz gibt das Listing an den Drucker aus:
Ausführliche Form:
OPEN 4 , 4
CMD 4
LIST
PRINT § 4
Kurzform:
Op4,4:Cm4:Li
Pr4
Wir haben die Kurzform mit Abkürzungen zusätzlich mit aufgeführt, weil diese
Sequenz oft im Direktmodus gebraucht wird.
Statt der Datei auf den Drucker könnte auch eine auf das Floppy geöffnet wer
den. Dadurch könnte der Bildschirmtext statt auf den Drucker auf Floppy ausge
geben werden.
Statt des Listings kann auch sonstiger Text ausgegeben werden. Ersetzen Sie z.B.
Li durch DlrDl, so wird das Inhaltsverzeichnis des Laufwerks 1 an den Drucker
ausgegeben.
78
Beendung des CMD-Zustandes
Solange nur Ausgaben auf den Bildschirm erfolgen, bleibt der CMD-Zustand
eingeschaltet. Sie erkennen ihn im Direktmodus daran, daß nach Ausführung eines
Befehls nicht wie gewöhnlich READY auf dem Bildschirm steht, sondern nur der
Cursor. (Die Meldung READY wurde an das Peripheriegerät ausgegeben.)
Durch ein PRINT§la auf eine beliebige offene Datei wird CMD abgeschaltet!
Deshalb steht in dem obigen Beispiel in der nächsten Zeile PRINT§4.
Eine etwas unfeinere Art ist, einen SYNTAX ERROR zu erzeugen, indem man Unsinn
auf den Bildschirm schreibt und RETURN drückt. Diese Merthode ist natürlich nur
im Direktmodus sinnvoll.
Feinheiten
Falls Sie CMD innerhalb eines Programms anwenden wollen (zu Testzwecken), be
achten Sie bitte, daß jedes PRINT§ den CMD-Zustand beendet. Der Inhalt dieses
PRINT§ wird allerdings zusätzlich auf das CMD-Gerät ausgegeben, d.h. für diese
eine Datenübertragung sind zwei Geräte gleichzeitig Empfänger.
Sie können also nicht eine Ausgabe auf Floppy mit CMD auf den Drucker umlenken,
jedenfalls nicht mehr als ein einziges PRINT§. Sollten Sie eine solche Umlenkung
wollen, brauchen Sie nur im OPEN anstatt des Floppy (z.B. 8) den Drucker (z.B.
4) angeben.
F ehlermöglichkeiten
Da CMD eine logische Adresse als Parameter hat, ist natürlich Voraussetzung für
CMD, daß vorher durch OPEN die entsprechende Datei geöffnet wurde, anderenfalls
wird FILE NOT OPEN ERROR gemeldet.
Versuchen Sie nicht, zwei CMD-Kanäle zur gleichen Zeit zu öffnen. Das Betriebs
system reagiert darauf mit verkehrten Fehlermeldungen und der Cursor kann nach
RETURN nicht in die nächste Zeile, sondern in die dritte Spalte der gleichen
Zeile gehen. Dieses Zustand können Sie durch einen SYNTAX ERROR beenden (s.o.).
79
5.5PRINT (drucken)
Zweck
PRINT § la, gibt beliebige Daten an Peripheriegeräte oder speziell den
Bildschirm aus.
Format
PRINT § la ,
ausgabedaten
oder
PRINT
ausgabedaten
bzw.
?
ausgabedaten
Die erste Form bewirkt die Ausgabe von Daten auf eine logische Datei. Dabei ist
vorausgesetzt, daß eine Datei la mit OPEN geöffnet wurde.
Die zweite Form (ohne la) bewirkt die Ausgabe auf den Bildschirm. Die dritte
Form zeigt lediglich die Abkürzung von PRINT (auf den Bildschirm).
Bitte verwechseln Sie nicht '?' und 'Pr', bzw. schreiben Sie nicht '?§', ein
SYNTAX ERROR wäre die Folge.
'la' ist die logische Adresse (s. OPEN)
'ausgabedaten' sind nach spezieller PRINT-Syntax aneinandergereihte numerische
Ausdrücke oder Stringausdrücke. Diese Syntax ist für beide PRINT-Formen iden
tisch und tritt sonst nur noch bei CMD auf. Das Besondere an der PRINT Syntax
sind die Trennzeichen und Trennfunktionen zwischen den Ausdrücken.
Die Trennzeichen zwischen den Ausdrücken haben sehr unterschiedliche Wirkung
auf das Druckformat. Zusätzlich muß für die Wirkung des gleichen Trennzeichens
unterschieden werden zwischen PRINT§la und PRINT. Um das ganze nicht zu kompli
ziert werden zu lassen, wollen wir zuerst das Trennzeichen beschreiben, das für
beide PRINTs gleiche Wirkung hat.
Strichpunkt
Der Strichpunkt trennt die einzelnen Ausdrücke hinter PRINT voneinander.
Beispiel: PRINT A+3 ; B ; C$ ; "abcd"
Dieser Befehl gibt das Ergebnis von A+3, den Inhalt von B und C$, sowie die
Zeichen 'abcd' unmittelbar hintereinander auf den Bildschirm aus.
Der Strichpunkt dient also nur für den Interpreter dem Zweck, die einzelnen
Ausdrücke auseinanderhalten zu können, fügt aber keine zusätzlichen Leerräume
oder dergleichen beim Drucken ein.
80
Eine besondere Bedeutung kommt dem Strichpunkt am Ende des PRINT-Befehls zu:
Beispiel PRINT A$
PRINT A$;
Im ersten Fall wird nach dem Drucken des Inhalts von A$ sofort eine neue Zeile
begonnen (auf dem Bildschirm), während im zweiten Fall der (gedachte) Cursor
hinter dem letzten Zeichen von A$ stehen bleibt. Ein nächstes PRINT beginnt
also im ersten Fall am Anfang der nächsten Zeile zu drucken, im zweiten Fall
unmittelbar hinter der letzten Druckposition.
Bei PRINT§ muß diese Wirkung allgemeiner formuliert werden:
Wird PRINT§ nicht mit Strichpunkt (oder Komma) abgeschlossen, so wird automa
tisch nach dem letzten Zeichen ein CR (Carriage Return = CHR$(13)) gesendet,
sofern die logische Adresse kleiner als 128 ist. Bei la größer als 127 wird
nach dem CR auch noch LF (Line Feed = CHR$(10)) gesendet. Bitte beachten Sie,
daß bei Floppy und Rekorder deshalb nur la kleiner als 128 verwendet werden
sollten (s. INPUT).
Zahlenformat
Allen Zahlen gemeinsam ist, daß sie an der ersten Stelle ein Blank (anstatt +)
oder ein Minuszeichen haben. Nach der Zahl steht entweder 'Cursor nach rechts'
(PRINT) oder Blank (PRINT§).
Gleitkommazahlen werden je nach Zahlenwert als normale Gleitkommazahl (ohne
Exponent) oder als Mantisse mit Exponent (Exponentialdarstellung) ausgegeben.
Die Regeln sind folgende:
Ist der Betrag der Zahl größer als 1, so wird in Exponentialdarstellung umge
schaltet sobald die Anzahl der Stellen 9 überschreitet:
100 000 000 ergibt 100000000
1000 000 000 ergibt 1E+09
Ist der Betrag kleiner als 1, so wird ab 1E-03 in Exponentialdarstellung umgegeschaltet:
.0111 ergibt .0111
.00111 ergibt 1.111E-03
Der Exponent wird in jedem Fall zweistellig und mit explizitem Vorzeichen
ausgegeben, d.h. '+' wird nicht als Blank, sondern als '+' dargestellt.
Die Anzahl der Nachkommastellen bei Exponentialdarstellung kann zwischen 0
und 8 liegen. Im Fall von 0 Nachkommastellen entfällt auch der Punkt. Bei der
Exponentialdarstellung steht immer genau eine Ziffer vor dem Punkt.
Bei Gleitkommadarstellung werden maximal 9 Stellen ausgegeben. Die Verteilung
dieser 9 Stellen auf Vor- und Nachkommastellen kann von 1 Vorkomma- und 9 Nach
kommastellen bis zu 9 Vorkomma- und 0 Nachkommastellen alle Stufen annehmen: Bei
0 Nachkommastellen entfällt auch der Punkt.
81
Der folgende Ausdruck zeigt alle möglichen Darstellungsformen:
1.23123123E-03
.0123123123
.123123123
1.23123123
12.3123123
123.123123
1231.23123
12312.3123
123123.123
1231231.23
12312312.3
123123123
1.23123123E+09
Es gibt keinen BASIC-Befehl, der Zahlen in ein bestimmtes Format bringt.
Stringformat
Strings werden ohne irgendwelche zusätzlichen Zeichen aneinandergereiht, solange
nicht die speziellen Formatierungsbefehle z.B. Blanks dazwischenschreiben.
Komma
Trennt man Ausdrücke anstatt durch Strichpunkt durch Komma, so wird dadurch auf
dem Bildschirm (PRINT) jeweils ab der nächsten erreichbaren 10-er-Spalte ge
druckt, also ab Spalte 10, 20, 30 usw.
Die Spalten sind innerhalb einer Zeile von 0 bis 79 durchnummeriert.
Der Zwischenraum bis zur nächsten Druckposition wird nicht verändert, alle
Zeichen, die vorher im Zwischenraum standen, stehen nach der Tabulierung durch
Komma immer noch dort. Die Tabulierung auf dem Bildschirm wird also nicht durch
Blanks, sondern durch 'Cursor nach rechts' erreicht. Dies gilt auch für TAB und
SPC!
Bei PRINT§la (nicht auf den Bildschirm) sollte Komma als Trennzeichen zwischen
Ausdrücken nicht verwendet werden, da die Tabulierung dort nicht funktioniert,
sondern bei jedem Komma 10 Blanks (CHR$(32)) gesendet werden, was ja keine
Tabulierung bewirkt.
TAB( )
Mit TAB kann jede Spalte einer Bildschirmzeile direkt erreicht werden.
In den Klammern hinter TAB kann ein Byte-Ausdruck stehen, dessen Ergebnis zwi
schen 0 und 79 liegen sollte, aber theoretisch bis zu 255 groß sein darf.
TAB arbeitet nur von links nach rechts. Wenn der Cursor z.B. schon in Spalte 30
steht und im PRINT TAB(17) steht, so wird die TAB-Anweisung ignoriert. Der
Cursor kann durch TAB also nicht nach links bewegt werden.
Innerhalb einer Bildschirmzeile können (in aufsteigender Reihenfolge) mehrere
TABs verwendet werden.
82
Der Tabulator ist nur für die Verwendung innerhalb einer Bildschirmzeile (80
Spalten) gemacht. Wollen Sie mehrere Zeilen durch einen TAB-Sprung überbrücken,
so müssen Sie folgendes Verhalten berücksichtigen: Bei TAB-Werten größer als 79
wird der Sprung nur beim ersten Mal richtig ausgeführt, folgende TABs werden
aber immer ab Beginn der Zeile berechnet, in der der Cursor gerade steht!
Bei PRINT§la (nicht auf den Bildschirm) hat TAB identische Wirkung wie SPC ,
fabuliert also nicht (s. Komma), sondern sendet soviele Blanks, wie der Ausdruck
in den Klammern angibt!
SPC( )
SPC( ) überspringt bei PRINT (Bildschirm) soviele Spalten, wie der Byte-Ausdruck
in Klammern angibt. Wie bei TAB werden dabei Zeichen im übersprungenen Bereich
nicht gelöscht (Cursor nach rechts).
Bei PRINT§ werden soviele Blanks gesendet, wie in Klammern angegeben ist.
SPC( ) darf ebenso wie TAB( ) nur hinter PRINT auf treten. Man kann also z.B.
nicht durch SPC( ) einer Stringvariablen Blanks zuweisen!
Hochschieben des Bildschirminhaltes
Wenn durch PRINT die letzte Bildschirmzeile überschritten werden soll, wird der
gesamte Bildschirminhalt um eine Zeile nach oben geschoben, wobei die oberste
Zeile verlorengeht.
Dieses Hochschieben kann der Anwender verhindern, wenn er gleichzeitig die
Taste mit dem Doppelpunkt drückt. Genauer ausgedrückt, prüft die Betriebssystem
routine, die den Bildschirminhalt hochschiebt, nachdem sie den Inhalt hochge
schoben hat, ob zu diesem Zeitpunkt die Taste mit dem Doppelpunkt gedrückt ist.
Wenn ja, wartet sie, bis entweder 'Pfeil nach links' gedrückt wird oder STOP.
Bei 'Pfeil nach links' wird einfach das Programm normal fortgesetzt, bei STOP
unterbrochen.
Falls der Anwender aus Versehen die Taste mit dem Doppelpunkt drückt, hält er
dadurch das Programm an und Sie haben vom Programm aus keine Möglichkeit, dies
zu erkennen!
Der Vollständigkeit halber sei erwähnt, daß 'Pfeil nach links' nach jedem Hoch
schieben eine Pause bewirkt, wenn diese Taste während des Hochschiebens gedrückt
ist.
Anmerkungen für Fortgeschrittene
1) Strichpunkt kann entfallen:
Hinter folgenden Zeichen kann der Strichpunkt als Trennzeichen entfallen:
)
fl
%
$
Klammer zu
Anführungszeichen
Integervariable
Stringvariable
83
2) Zahlen werden als String ausgegeben:
Zahlen werden durch PRINT grundsätzlich als String ausgegeben. Dies gilt auch
für die Ausgabe auf andere Geräte als den Bildschirm. Anders ausgedrückt, werden
Zahlen nicht komprimiert als 5 Bytes (Gleitkomma) oder 2 Bytes (Integer) ausge
geben, sondern immer als String mit maximal 15 Zeichen.
3) PRINT £la auf Bildschirm:
Falls Sie über OPEN 3,3 und PRINT§3 mit einem PRINT§ auf den Bildschirm aus
geben, druckt Komma, TAB und SPC SPACE'S auf den Bildschirm, d.h. Zeichen in
den Zwischenräumen werden gelöscht! Komma und Tabulator tabulieren aber richtig.
Sie können diese Wirkung ausnützen, falls Sie die Zwischenräume wirklich löschen
wollen.
4) PRINT (auf Bildschirm):
Das 'Überspringen' auf dem Bildschirm bei Komma, TAB und SPC wird durch 'Druk
ken' von 'Cursor nach rechts' bewirkt (s. Bildschirmverwaltung). Sie können
dies sichtbar machen, indem Sie am Anfang des PRINT CHR$(34) drucken las
sen. Dadurch wird die Bildschirmverwaltung in den Controlmodus geschaltet.
In diesem Zusammenhang sei auf eine Konsequenz des Zahlenformats auf dem Bild
schirm hingewiesen. Jede Zahl wird von 'Cursor nach rechts' gefolgt. Dies macht
sich manchmal negativ bemerkbar, wenn Zahlen revers gedruckt werden sollen, da
zwar das führende Blank weiß gedruckt wird, aber nicht die Stelle nach der Zahl,
da sie ja nicht als Blank gedruckt wird.
Durch folgendes Anhängsel können Sie diesen 'negativen (Ein)Druck' verhindern:
Hinter der Zahl bzw. dem numerischen Ausdruck öffnen Sie Anführungszeichen,
drücken die Taste 'Cursor nach links' und SPACE und schließen die Anführungs
zeichen. Dadurch wird rechts neben der Zahl ein Blank gedruckt. Sofern Sie
vorher auf Revers-Druck geschaltet hatten, wird die Zahl mit nachfolgendem
hellem Blank gedruckt.
5.6 POS( )
Zweck
POS meldet die Position (Spalte) des Cursors in der Bildschirmzeile, ist also
nur in Zusammenhang mit PRINT sinnvoll. Das Ergebnis von POS ist ein ganz
zahliger Wert zwischen 0 und 79.
Format
A = POS(O)
POS (0) ist eine Funktion mit Byte-Ergebnis. Der Parameter in Klammern hat
keine Bedeutung, muß aber angegeben werden, um die Syntax-Prüfung zufriedenzu
stellen.
Das Ergebnis kann jeder Gleitkomma- oder Integervariablen zugewiesen werden.
84
5.7
Zweck
INPUT bringt Zahlenwerte oder Strings von einem Peripheriegerät oder vom Bild
schirm in eine oder mehrere Variablen.
Format
INPUT "hinweis"; vl , v2 , ....
INPUT§ la , vl , v2 , ...
hinweis Stringkonstante
la logische Adresse (s. OPEN)
vl, v2 beliebige Variablen
Vor INPUT§la muß mit OPEN eine Datei auf la geöffnet worden sein.
INPUT darf nur im Programm verwendet werden, nicht aber im Direktmodus.
5.7.1 Gemeinsame Eigenschaften
INPUT (Eingabe mehrerer Zeichen)
INPUT vom Bildschirm (INPUT) und von Peripheriegeräten (INPUT§,la) unterschei
den sich in einigen Details. Beachten Sie aber folgende Gemeinsamkeiten, um den
Überblick nicht zu verlieren.
INPUT kann maximal 80 Zeichen (81 einschließlich Carriage Return) verarbeiten.
Der Grund liegt darin, daß alle Daten (gleichgültig ob vom Bildschirm, vom
Rekorder oder vom IEC-Bus) in den BEP (BASIC-Eingabe-Puffer) gelegt wer
den. Erst von dort werden sie in die einzelnen Variablen übertragen. Dieser
Puffer ist genau 81 Bytes lang. Die Übertragung in diesen Puffer wird durch CR
(CHR$(13)) unterbrochen.
Zusätzlich kennt INPUT noch die Trennzeichen Komma (CHR$(44)) und Doppelpunkt
(CHR$(58)), sofern nicht seit dem letzten CR ein Anführungszeichen (CHR$(34))
gesendet wurde. Komma und Doppelpunkt wirken aber nur innerhalb des BEP, sind
also nicht mit CR vergleichbar, weil die Übertragung in den BEP durch sie nicht
unterbrochen wird. Komma und Doppelpunkt trennen lediglich einzelne Variablen
inhalte voneinander ab.
INPUT kann in gemischter Reihenfolge Zahlendaten und Stringdaten lesen. In
Stringvariable kann jeder String gelesen werden, insbesondere auch ein String,
der eine Zahl darstellt. Umgekehrt können aber in Zahlenvariable nur Zeichen
folgen gelesen werden, die eine Zahl darstellen.
Falls Sie Zahlen und Strings mischen, müssen Sie also darauf achten, daß hinter
INPUT Zahlen- und Stringvariable in der richtigen Reihenfolge kommen.
85
Zahlenformat:
Folgende Zeichen sind zugelassen: Ziffern, Blank, '+', 'E' (Exponent)
(E muß ohne SHIFT eingegeben werden!)
Blanks können überall (auch zwischen Ziffern) auftreten, sie werden ignoriert.
Die Mantisse kann mehr als 9 Stellen haben, sie wird automatisch gerundet.
Führende Nullen vor dem Komma werden ignoriert, nachfolgende Nullen nach dem
Komma ebenfalls.
5.7.2 Besonderheiten des Bildschirm-INPUT
(1) Der Hinweisstring:
Um dem Benutzer mitzuteilen, welche Eingabe von ihm gefordert wird, kann un
mittelbar hinter INPUT ein Hinweisstring angegeben werden:
Beispiel: INPUT "Vorname";VN$
Der Hinweisstring kann nur eine Stringkonstante sein. Die erste Variable muß
durch Strichpunkt vom Hinweisstring abgetrennt werden.
Die Befehlsfolge: PRINT H$;:INPUT E$ ist in der Wirkung identisch mit der An
gabe des Hinweisstrings in INPUT, hat aber den Vorteil, daß hinter PRINT auch
Variable zugelassen sind.
Wird Bildschirm-INPUT im Programm angetroffen, so erscheint auf dem Bildschirm
in der nächsten Druckposition ein Fragezeichen und zwei Spalten dahinter blinkt
der Cursor. Falls ein Hinweisstring angegeben wurde, wird dieser vor dem Frage
zeichen ausgegeben. Der Anwender kann nun die von ihm verlangte Eingabe tippen
und beliebig verbessern. Sobald er die RETURN-Taste drückt, wird seine Eingabe
an die Variable(n) übergeben, die hinter INPUT aufgeführt sind.
Weil der Anwender völlige Freiheit auf dem Bildschirm hat, können Sie vom BASIC-
Programm aus nicht kontrollieren, was er tut. Falls Sie einen übersichtlichen
und abgesicherten Dialogaufbau auf dem Bildschirm anstreben, sollten Sie sich
mit folgenden Reaktionen des INPUT auseinandersetzen:
(2) Leere Eingabe:
Drückt der Anwender RETURN, ohne in der Zeile etwas geschrieben zu haben, so
wird der Programmlauf beendet. Das Betriebssystem meldet sich dann mit READY.
Diese Reaktion auf die leere Eingabe soll die STOP-Taste ersetzen, da diese
während INPUT ignoriert wird.
Mit CONT könnte der Anwender das Programm bei dem INPUT wieder starten, wo er
es verlassen hat. Da für einen unbedarften Anwender derlei Krücken aber nicht
akzeptabel sind, sollte man diesen Zustand verhindern.
86
Abhilfe: Sie können entweder INPUT§ verwenden (s.u.) oder mit Hilfe des Hin
weisstrings hinter das Fragezeichen Zeichen schreiben, die keine Blanks sind:
INPUT"EINGABE:rr*lll";E$
r = 'Cursor nach rechts' oder SPACE
* = beliebiges Zeichen, auch SHIFT/SPACE
1 = 'Cursor nach links'
Wenn Sie für * SHIFT/SPACE einsetzen, sieht die Eingabe auf dem Bildschirm
genauso aus, wie das normale INPUT.
Wenn der Anwender keine Eingabe macht, wird das Zeichen für * in E$ übergeben.
* können auch mehrere Zeichen sein, allerdings müssen dann entsprechend viele 1
angegeben werden.
Die 'leere Eingabe' müssen Sie dann durch eine Abfrage auf * gesondert behan
deln, da sie ja kein vom Benutzer eingegebenes Zeichen ist.
(3) Zahlenvariable:
Haben Sie hinter INPUT eine Zahlenvariable angegeben, aber der Benutzer gibt
eine nichtnumerische Zeichenfolge ein, so wird REDO FROM START gemeldet und
das INPUT-Fragezeichen erscheint in der nächsten Zeile nochmal. Dies soll dem
Anwender signalisieren, daß er die ganze Eingabe wiederholen soll.
Abhilfe: Generell nur Stringvariable verwenden und hinterher Strings in Zahlen
umwandeln, falls Zahlen benötigt werden (VAL). Dadurch fällt aber ihrem Pro
gramm die Aufgabe zu, die Eingabe zu überprüfen und entsprechend zu reagieren.
(4) Mehr Eingaben als Variablen:
Tippt der Anwender Komma oder Doppelpunkt und steht hinter INPUT nicht eine
Variable mehr, als der Anwender Kommas und Doppelpunkt geschrieben hat, so wird
EXTRA IGNORED gemeldet. Das soll dem Anwender andeuten, daß alles nach einem
bestimmten Komma oder Doppelpunkt ignoriert wurde. Dem Anwender nützt diese
Meldung aber nichts, da er es nicht ändern kann und das BASIC-Programm merkt
nichts davon, so daß das Programm nicht auf derlei Eingabefehler reagieren
kann.
Abhilfe: Entweder den Anwender ausdrücklich darauf hinweisen, daß er ',' und
':' nicht verwenden darf, oder (nur bei Stringvariablen) von ihm verlangen, daß
er als erstes Zeichen ein Anführungszeichen schreibt.
(5) Weniger Eingaben als Variablen:
Stehen hinter INPUT mehrere Variable und gibt der Anwender nicht soviele Kommas
oder Doppelpunkte ein, um entsprechend viele Datenfelder zu trennen, so werden
in die nächste Zeile zwei Fragezeichen geschrieben und dahinter blinkt der
Cursor. Dies soll dem Anwender signalisieren, daß mindestens noch eine Eingabe
fehlt.
Abhilfe: Nicht mehr als eine Variable hinter INPUT verwenden. Das hat auch den
Vorteil, daß Sie auf einzelne Falscheingaben gezielter reagieren können.
87
(6) Falsche Zeile:
Der Anwender kann aus Versehen mit Hilfe der vertikalen Cursorbewegungstasten
die Eingabezeile verlassen. Ganz gleich, ob er dann wieder in die Eingabezeile
zurückkehrt oder nicht, gilt die folgende Eigenschaft des INPUT:
Ist (oder war!) der Cursor in einer anderen Zeile als das INPUT-Eragezeichen,
so wird die ganze Zeile eingelesen, in der der Cursor steht, sobald RETURN
gedrückt wird.
Ist diese Zeile leer, wird allerdings das Programm nicht abgebrochen, sondern
eine Stringvariable hinter INPUT erhält den leeren String zugewiesen, bzw. eine
Zahlenvariable den Wert 0.
Abhilfe: Da in diesem Fall in der Stringvariablen mindestens das Fragezeichen
enthalten ist, kann man durch eine Abfrage dies feststellen und z.B. durch eine
nochmalige Eingabeaufforderung darauf reagieren. Angenommen, das INPUT-
-Eragezeichen steht ganz am Anfang der Zeile, dann können Sie durch folgende
Abfrage den Eingabefehler korrigieren:
10 INPUT A$
20 IF LEFT$(A$,1)="?" THEN A$ = MID$(A$,3)
30 ...
5.7.3 Besonderheiten des Datei-INPUT§
Im Betrieb mit Commodore-Peripheriegeräten kommt INPUT nur in Verbindung mit
Floppy oder Rekorder vor. Da von diesen Geräten in der Regel nur solche Daten
gelesen werden können, die vorher mit PRINT§ in eine Datei geschrieben wurden,
werden die Eigenschaften des INPUT§ mit PRINT§ verglichen, um die Zusammenhänge
zu verdeutlichen. Mit diesem Verständnis können Fehler leichter vermieden wer
den.
Die übliche Anwendung von PRINT§ und INPUT§ bei Floppy oder Rekorder sieht
vor, daß Variableninhalte mit PRINT§ in eine Datei geschrieben werden und mit
INPUT§ zu einem späteren Zeitpunkt die Daten aus der Datei wieder in Variable
gebracht werden müssen.
Folgende Hinweise sind zu beachten, um einen fehlerlosen Datenverkehr zu er
halten:
(1) Reihenfolge der Daten:
Sie können die Inhalte von Zahlen- und Stringvariablen in beliebiger Reihen
folge mit PRINT§ in eine Datei schreiben. Beim Lesen mit INPUT§ müssen Sie dann
aber beachten, daß die Daten wieder in der gleichen Reihenfolge kommen, also in
einander entsprechende Variablen gelesen werden müssen. (Meistens werden die
Variablen hinter PRINT§ und INPUT§ sogar identisch sein, sie müssen es aber
nicht.)
Versuchen Sie, einen nichtnumerischen String in eine Zahlenvariable zu lesen,
erhalten Sie die Fehlermeldung FILE DATA ERROR. Meistens ist die Ursache ein
überflüssiges Trennzeichen in der Datei oder eben eine falsche Reihenfolge der
Variablen.
88
(2) Länge der Daten
Wie oben erwähnt, kann INPUT nur 80 Zeichen verarbeiten. Da CR die Übertragung
in den Puffer beendet, müssen Sie darauf achten, bei PRINT§ nie mehr als 80
Zeichen ohne CR zu senden, da sonst STRING TOO LONG ERROR gemeldet wird.
Diese Einschränkung ist speziell bei Strings zu beachten, da der Inhalt von
Stringvariablen ja 255 Zeichen lang sein kann.
Wie bei PRINT§ erklärt, werden Zahlen genauso wie Strings ausgegeben. Exakter
ausgedrückt, sind Zahlen nur spezielle Strings. Wenn Sie sich nun noch daran
erinnern, daß PRINT§ die Möglichkeit bietet, beliebig viele Zeichen ohne CR zu
senden, indem einzelne Ausdrücke durch getrennt werden, bzw. die PRINT-Anweisung durch abgeschlossen wird, sehen Sie, daß auch ohne Stringvariable
die 80 Zeichen-Grenze Beachtung verdient.
Für den Normalfall empfehlen wir, pro PRINT nur eine Variable (einen Ausdruck)
zu verwenden, bzw. die Ausdrücke durch CR zu trennen. Zwei Beispiele sollen
Ihnen dies verdeutlichen:
(10 OPEN 1,1,1,"NAME")
20 PRINT§1,A$:PRINT§1,B*3
Durch den fehlenden Strichpunkt am Ende jedes PRINTs sendet das Betriebssystem
automatisch CR nach dem Variableninhalt zur Datei. Beachten Sie hierbei, daß
die logische Adresse kleiner als 128 sein muß! (s. OPEN)
Völlig gleiche Wirkung erzielen Sie durch folgende Anordnung:
15 CR$=CHR$(13)
20 PRINT§1,A$CR$B*3
Der Variablen CR$ wird in Zeile 15 der Code für CR (Carriage Return) zuge
wiesen. In Zeile 20 wird dann nach A$ CR gesendet, dann das Ergebnis von B*3
und dann wieder CR (wegen des fehlenden Strichpunkts am Ende).
Bei beiden Beispielen muß sichergestellt sein, daß A$ nicht mehr als 80 Zeichen
enthält. Dagegen kann B*3 (Gleitkommaausdruck) nie länger als knappe 20 Zeichen
werden.
(3) Andere Trennzeichen:
Wie oben erwähnt, könnte auch Komma und Doppelpunkt verschiedene Variablenin
halte voneinander trennen. Da dies aber das Pufferproblem nicht löst, empfehlen
wir, nur CR als Trennzeichen zu verwenden!
Wollen Sie trotzdem Komma und Doppelpunkt verwenden, müssen Sie darauf achten,
daß sich Ihre Daten nicht über mehr als 80 Zeichen erstrecken. Beachten Sie
dabei, daß 6 Gleitkommazahlen schon länger als 80 Zeichen sein können.
89
(4) Sonder - Codes
PRINT§ kann in Zusammenhang mit Stringvariablen bzw. der Funktion CHR$() jeden
Code zwischen 0 und 255 als ein Byte (Zeichen) in eine Datei schreiben. INPUT§
kann aber nicht jeden dieser Codes lesen. Folgende Codes können nicht gelesen
werden oder nur bedingt:
Code Darstellung Bedeutung
0CHR$(0)
13CHR$(13)
32"SPACE"
34
44
58
CHR$(34)
tt tf
9
tt« Vt
'Null'
CR = Carriage Return
Blank
Anführungszeichen
Komma
Doppelpunkt
Die ersten drei Codes können von INPUT überhaupt nicht gelesen werden, d.h. ihr
Wert wird nicht in eine Stringvariable übergeben.
Die letzten beiden werden nur dann übernommen, wenn seit dem letzten CR eine
ungerade Anzahl von Anführungszeichen gelesen wurde, da sie sonst als Trenn
zeichen wirken, selbst aber nicht übernommen werden.
Blank wird im folgenden behandelt:
(5) Blanks (SPACE, Leerraum)
Bei Zahlen werden Blanks völlig ignoriert (s.o.). Bei Strings sind folgende
Fälle zu unterscheiden:
Führende Blanks werden nur an die Stringvariable übergeben, wenn vorher
CHR$(34) gelesen wurde. Ist dies nicht der Fall, werden sie ignoriert, d.h. der
String wird ab dem ersten Code, der von 32 verschieden ist, übernommen.
Blanks zwischen anderen Zeichen werden immer übernommen, ebenso folgende
Blanks.
Beachten Sie den Unterschied zwischen INPUT§ aus Dateien und INPUT vom Bild
schirm bezüglich nachfolgender Blanks: Beim Bildschirm werden nachfolgende
Blanks genauso wie führende ignoriert, falls nicht Anführungszeichen oder ein
Trennzeichen die Blanks abschließt.
(6) Status:
Die Behandlung der Statusvariable ST ist bei Status beschrieben. Kurz zusammen
gefaßt ergeben sich für INPUT§ folgende Hinweise:
Solange ST = 0 ist, enthält die Datei weitere Daten.
Sobald ST 64 enthält ist der letzte Variableninhalt übertragen worden. Danach
ist es sinnlos, weiterzulesen.
Versucht man es dennoch, enthält ST den Wert 2. In diesem Fall wird kein Wert
an die INPUT-Variable übergeben, sie enthält also nach INPUT den Wert bzw. den
String, den sie vorher enthielt und nicht etwa unbedingt 0 oder den leeren
String!
90
(7) INPUT§ von der Tastatur
Das Problem der leeren Eingabe bei INPUT kann man umgehen, indem auf die Tasta
tur eine Datei geöffnet wird (OPEN 1,0) und dann durch INPUT§1 das normale
INPUT ersetzt wird.
INPUT§ druckt kein Fragezeichen auf den Bildschirm, sondern setzt einfach den
Cursor bei der nächsten Druckposition auf.
Die leere Eingabe wird folgendermaßen verarbeitet:
(1) Wenn der Cursor nicht am Anfang einer Zeile aufgesetzt wird und auch vom
Anwender nicht aus dieser Zeile gefahren wird, so ignoriert INPUT§ die leere
Eingabe. D.h., der Cursor blinkt einfach weiter, INPUT§ gibt die Kontrolle in
diesem Fall also nicht an BASIC zurück.
(2) Wenn der Cursor am Zeilenanfang aufgesetzt wird, oder der Anwender die
Zeile mit dem Cursor verläßt, so übergibt INPUT§ den leeren String an die
INPUT§-Variable, das Programm läuft aber weiter. Dadurch haben Sie im
Programm die Möglichkeit, auf die leere Eingabe gezielt zu reagieren.
(8) INPUT § vom Bildschirm
OPEN 3,3 .... INPUT§3 liest den Rest einer Bildschirm-Zeile ab der aktuellen
Cursorposition bis maximal zur Spalte 78, also maximal 79 Zeichen. Die letzte
Spalte wird in keinem Fall gelesen.
Falls in der Zeile Doppelpunkt oder Komma enthalten sind, wird wie beim nor
malen INPUT ab einschließlich des Trennzeichens nicht weitergelesen. Im Unter
schied zum normalen INPUT werden folgende Blanks mit übernommen, führende dage
gen auch nicht. Durch Anführungszeichen können auch führende Blanks mit über
nommen werden.
Der Hauptunterschied dieses INPUT§ zu allen anderen INPUT-Versionen liegt darin,
daß eine Bildschirmzeile ohne Zutun des Anwenders gelesen werden kann.
5.8 GET (Hole ein Zeichen)
Zweck
GET holt genau ein Zeichen (Byte) aus einer Datei (GET§) oder aus dem Tastatur
puffer (GET) in eine Variable.
Format
GET §la, vl , v2 ,...
Im Gegensatz zu PRINT und INPUT hat GET§ kein eigenes Kurzzeichen, die Abkür
zung Ge kann also mit oder ohne § verwendet werden.
GET§la setzt OPEN voraus.
vl ist eine beliebige Variable.
v2 ... sind weitere Variable, die jeweils durch Komma getrennt werden.
GET darf nur im Programm verwendet werden, nicht aber im Direktmodus.
91
5.8.1
GET bietet wie INPUT die Möglichkeit, mit dem Anwender in Dialog zu treten,
allerdings auf ganz andere Art. Bei Tastaturpuffer ist beschrieben, daß jede
Taste, die während eines Programmlaufes gedrückt wird, automatisch in den Tasta
turpuffer übernommen wird. Maximal 10 Tasten können dort gespeichert werden. GET
holt nun das zuerst im Speicher abgelegte Zeichen bzw. den ASC-Code der zuerst
gedrückten Taste in die Stringvariable. Dabei bleibt aber weder das Programm
stehen, noch wird dieses Zeichen automatisch auf den Bildschirm geschrieben, wie
bei INPUT.
Die Hauptanwendung von GET liegt darin, einen sehr sicheren Dialog aufzubauen,
da GET im Gegensatz zu INPUT keine Fehlermeldungen bringen kann. Die einzige
Möglichkeit für den Anwender trotz GET das Programm zu stoppen ist die STOP-
Taste bzw. die Taste mit dem Doppelpunkt.
(Die Taste mit dem Doppelpunkt stoppt die Bildschirmausgabe, falls sie gedrückt
wird, wenn gerade der Bildschirminhalt nach oben geschoben wird, weil der Cursor
unten angestoßen ist. Durch Drücken von 'Pfeil nach links' wird weitergedruckt.)
GET kann jeden Code holen, der durch die Tastatur erzeugt werden kann, also
auch die Codes der Funktionstasten. Ist der Puffer leer, wird an die String-
variable der leere String übergeben.
Falls man auf eine Eingabe des Anwenders warten will, kann dies demnach durch
folgende Abfrage geschehen:
GET aus dem Tastaturpuffer
10 GET G$ : IF G$ = "" GOTO 10
20 REM VERARBEITUNG VON G$
Das Programm läuft dann solange in 10, bis eine Taste gedrückt wurde.
Auch der umgekehrte Fall kann eintreten, daß man nämlich wissen will, ob irgend
wann seit dem letzten GET eine Taste gedrückt wurde, um z.B. das Programm anzu
halten:
10 REM BELIEBIGE OPERATION
90 GET G$ : IF G$ = "" GOTO 10 : REM OPERATION WEITERMACHEN
95 REM ABBRUCHTASTE(N) BEHANDELN
In jedem Fall können Sie durch Abfragen jeden beliebigen Code herausfiltern, um
ihn dann z.B. auf den Bildschirm zu drucken oder aber, um gerade diesen Code
nicht zu drucken.
Zahlenvariable
Grundsätzlich kann hinter GET auch eine Zahlenvariable angegeben werden. Da
aber dann bei den meisten Tasten eigenartige Fehlermeldungen erscheinen, emp
fehlen wir, GET nur mit Stringvariablen zu verwenden. Die Reaktionen bei GET
(aus Tastaturpuffer) und Zahlenvariable sind im einzelnen:
Erlaubt sind alle Ziffern, '+', '-' und '.', Blank und 'E' (ohne SHIFT).
Bei der leeren Eingabe (kein Zeichen im Puffer), sowie bei '.', '+', '-', Blank
und 'E' wird 0 an die Variable übergeben, bei den anderen 9 Ziffern der ent
sprechende Zahlenwert.
92
Bei Komma und Doppelpunkt wird EXTRA IGNORED gemeldet und bei allen anderen
nichterlaubten Tasten SYNTAX ERROR. Diese Meldungen erfolgen ohne Angabe der
Zeilennummer!
Durch dieses Verhalten ist der große Vorteil des GET, nämlich seine Kontrollierbarkeit durch das BASIC-Programm weg.
5.8.2 GET§ aus Dateien
GET§ holt Byte für Byte aus einer Datei. Gegenüber INPUT§ bietet GET§ den Vor
teil, keinerlei Trennzeichen zu benötigen. Deshalb kann GET jeden der 256 Codes
lesen, den PRINT§ erzeugen kann. Der Code 0 kann allerdings nur über einen
Umweg gelesen werden:
CHR$(0)
Anstatt des Codes 0 übergibt GET§ an die Stringvariable den leeren String. Da
aber in einer Datei das leere Zeichen nicht Vorkommen kann, kann durch folgende
Abfrage der Code 0 eindeutig rekonstruiert werden:
10 GET§1,G$ : IF G$ = "" THEN G$ = CHR$(0)
Status
Wie bei Status beschrieben ist ST 0 solange noch weitere Zeichen in der Datei
stehen, geht mit dem letzten Zeichen auf 64 und dann auf 2, falls noch weiter
gelesen wird.
Sobald ST 2 enthält, wird an die Stringvariable bei jedem GET§ CHR$(13), also
CR übergeben!
5.8.3 GET§ aus dem Bildschirm
Durch OPEN 3,3 und GET §3,G$ kann ab einer bestimmten Stelle Zeichen für
Zeichen aus dem Bildschirm gelesen werden.
Revers-Zeichen, die nicht durch Anführungszeichen eingeschlossen sind, werden
dabei in die entsprechenden Normal-Zeichen gewandelt. Ansonsten wird der Bild
schirminhalt völlig identisch in die Stringvariable abgebildet.
Gelesen wird ab der nächsten Druckposition. Durch Cursorbewegungen kann also
bestimmt werden, ab wo gelesen werden soll.
Da GET Spalte für Spalte überträgt, ohne sich um den Inhalt zu kümmern, wird
auch SPACE übertragen.
5.8.4 GET§ von der Tastatur
Der Vollständigkeit halber sei erwähnt, daß GET§ auf das Gerät Nr. 0 (Tastatur)
identische Wirkung zeigt mit GET.
93
5.9 Status (Zustand von Peripheriegeräten / Dateien)
Die Variable ST (Status) enthält Information über den Zustand der Datei. Er wird
bei jedem E/A-Befehl neu in ST übertragen. ST stellt daher eigentlich eine
Funktion in Gestalt einer Variable dar.
Die Bedeutung der 8 Bits des Status, sowie ihr Dezimalwert sind in der folgenden
Tabelle zusammengefaßt:
Bit
0
12Zeitüberschr. b.Lesen
24
38
4
Dezimal
1Zeitüberschr. b.Schreiben
IEC-Bus
Rekorder
-
-
-
zu kurzer Block
-zu langer Block
16-nicht korrigierbarer
Lesefehler
532
664
7-128
-
Dateiende (EOI)
Prüfsummenfehler
Dateiende (EOF)
DEVICE NOT PRESENTBandende (EOT)
Die wichtigste Statusmeldung ist 'Dateiende' (EOI/EOF). Ehe sie aber ausführ
lich erklärt wird, sollen noch kurz die anderen Meldungen vorgestellt werden.
Beim Band bedeuten die Bits 2,3,4,5 einfach Lesefehler, die durch schlechtes
Band oder schlechte Kopfjustierung zustande kommen.
Wenn Bit 7 gesetzt ist, wird entweder FILE NOT FOUND (Band) oder DEVICE NOT
PRESENT ERROR (IEC-Bus) gemeldet.
FILE NOT FOUND = Datei wurde nicht gefunden
DEVICE NOT PRESENT = Gerät ist nicht vorhanden
5.9.1 Dateiende
In manchen Fällen wissen Sie nicht, wieviele Daten eine Datei enthält, wie oft
Sie also mit INPUT oder GET lesen müssen, um alle Daten zu holen. Sie müssen
dann mit Hilfe des Status feststellen, wann die Datei zu Ende ist.
Merken Sie sich dazu die Regel, daß der Status dann den Wert 64 enthält, wenn
das letzte Byte der Datei gelesen wurde. Versuchen Sie dann noch weiterzulesen,
wird Bit 1 (Wert 2) des Status gesetzt und vom Betriebssystem CR (Carriage
Return) geschickt.
94
Sehen Sie sich dazu folgendes Beispiel an:
10 OPEN 2,8,2,"0 :BSP1,W"
20 PRINT§2,1
25 PRINT§2,2
30 CLOSE 2
110 OPEN2,8,2,"0:BSP1,R"
120 GET§2,G$:EN=ST
130 PRINT ST,ASC(G$),G$
140 IF EN= 0 GOTO 120
150 CLOSE 2
210 OPEN2,8,2,"0:BSP1,R"
220 INPUT § 2,G$:EN= S T
230 PRINT ST,G$
240 IF EN= 0 GOTO 220
250 CLOSE 2
In Zeile 10 wird eine Floppy-Datei zum Schreiben geöffnet. Die Zeilen 20 und 25
schreiben die Zahlen 1 und 2 in die Datei, die dann in 30 geschlossen wird.
In den Zeilen 110-150 wird die Datei mit GET gelesen und für jedes Zeichen der
Status, der ASC-Code des Zeichens und das Zeichen selbst auf den Bildschirm
gedruckt.
In den Zeilen 210-250 wird die Datei mit INPUT gelesen und für jede Zahl der
Status und die Zahl auf den Bildschirm gedruckt.
Der Ausdruck sieht folgendermaßen aus (wir haben zusätzlich die Zeilen num
meriert):
Zeile
10
2049
3
4
5
60
7
8
9
10
In Zeile
Datei auf 64 gesetzt wird. Zeile 10 zeigt, daß bei INPUT der Status mit der
letzten Zahl auf 64 geht.
StatusASC
32
0
013CR
0
0
6413CR
0
64
8 sehenSie, daß
32
32
50
32Blank
Zeichen
Blank
1
Blank
Blank
2
1
2
der Status
95
Daraus läßt sich folgendes 'Kochrezept' ableiten:
(1) Unmittelbar nach dem Lesen eines Datums weisen Sie den Wert von ST an eine
andere Variable zu. Dies ist immer dann erforderlich, wenn vor der Abfrage
dieses Wertes eine E/A-Operation kommt, also z.B. ein PRINT auf den Bildschirm,
da der Status durch jede E/A-Operation neu gesetzt wird!
(2) Danach verarbeiten Sie das eben geholte Zeichen (GET), bzw. die Zahl oder
den String (INPUT).
(3) Ehe Sie das nächstemal GET oder INPUT rufen, fragen Sie den gemerkten Sta
tus-Wert ab. Wenn er 0 ist, können Sie weitermachen, ansonsten ist die Datei zu
Ende.
5.9.2 Zeitüberschreitung
Um zu verhindern, daß der Rechner sich an einem langsamen IEC-Bus-Teilnehmer
'aufhängt', bricht das Betriebssystem nach 65 ms den E/A-Versuch ab. Der Ab
bruch wird dann im Status vermerkt, indem Bit 0 (PRINT) oder 1 (INPUT, GET)
gesetzt wird.
Wünschen Sie nicht, daß das Betriebssystem abbricht, können Sie durch
POKE 1020, 128
erreichen, daß solange gewartet wird, bis sich das Peripheriegerät meldet.
Meldet sich das Gerät allerdings nicht, kann nur von Hand durch die STOP-Taste
unterbrochen werden, vom Programm aus besteht keine Möglichkeit dazu!
Bei Commodore-Geräten kann die Zeitüberschreitung nur im Fehlerfall auf treten.
Wir wollen zwei typische Fehlersituationen schildern:
5.9.3 Gerät nicht angeschlossen
Das angesprochene Gerät ist nicht eingeschaltet oder gar nicht angeschlossen.
Falls ein anderes Gerät angeschlossen und eingeschaltet ist, wird nicht
DEVICE NOT PRESENT ERROR gemeldet.
Vielmehr treten bei INPUT und PRINT zwei verschiedene Zustände im Status auf:
INPUT bzw. GET bewirkt die Meldung 'Zeitüberschreitung beim Lesen' (Status
enthält den Wert 2) und das Betriebssystem schickt bei jedem INPUT bzw. GET ein
CR (s. o.)
Bei PRINT wird dagegen Bit 7 im Status (Wert -128) gesetzt, was tatsächlich
DEVICE NOT PRESENT bedeutet.
5.9.4 Floppy-Datei geschlossen
Durch Programmier- oder Bedienungsfehler, die im Floppy-Handbuch beschrieben
sind, kann es Vorkommen, daß eine Floppy-Datei geschlossen ist, obwohl die zu
geordnete logische Datei des Rechners offen ist.
In diesem Fall meldet der Status bei INPUT und GET wie oben den Wert 2. Bei
PRINT dagegen wird der Wert -127 gemeldet, was bedeutet, daß Bit 0 und Bit 7
gesetzt sind. Der Status meldet also 'Zeitüberschreitung beim Schreiben', was
richtig ist und gleichzeitig DEVICE NOT PRESENT, was falsch ist.
96
5.9.5 Abfrage des Status-Wertes
Sie haben gesehen, daß der Status-Wert nicht als eine Zahl, sondern als 8 Bits
zu interpretieren ist. Wollen Sie prüfen, ob der Status den Wert 64 enthält, ob
also Bit 6 gesetzt ist, ist das nicht gleichbedeutend damit, daß Sie fragen, ob
der Status gleich 64 ist:
IF 64 AND ST THEN richtig
IF ST = 64 THEN falsch
Am Beispiel -127 können Sie sehen, daß die Abfrage mit '=' schief geht:
IF -128 AND ST OR 1 AND ST THEN ...
Diese Abfrage prüft, ob Bit 0 oder Bit 7 gesetzt ist!
Wenn es Ihnen jetzt zu kompliziert geworden ist, lesen Sie vielleicht noch
folgendes Rezept:
Von Spezialfällen und Spezialgeräten abgesehen, kann man die Statusabfrage
folgendermaßen aufbauen:
Unmittelbar nach INPUT oder GET fragen Sie ab, ob der Status ungleich 0 ist und
wenn ja, springen Sie zur Statusbehandlung. Ist er nicht 0, kommen Sie in die
normale Datenbehandlung.
In der Statusbehandlung stellen Sie fest, ob 'Dateiende' aufgetreten ist und
setzen in diesem Fall den Endeschalter EN auf ungleich 0.
Wenn nicht, laufen Sie in die Fehlerbehandlung, die hier nur angedeutet ist.
10 INPUT§LA,IN$ : IF ST GOTO 100
20 REM DATENBEHANDLUNG
50 IF EN = 0 GOTO 10
60 CLOSE LA : REM ENDE DER DATEIBEHANDLUNG
100 IF ST AND 64 THEN EN = 64 : GOTO 20
110 ?"FEHLER" : STOP
97
6. Sprunganweisungen
6.1 Einführung
Das BASIC-Programm wird normalerweise Zeile für Zeile abgearbeitet. Sehr oft
braucht man aber Anweisungen, die den Programmablauf ändern, indem zu anderen
Zeilen als zur nächsten 'gesprungen' wird. Wir unterscheiden solche Sprünge,
die in jedem Fall ausgeführt werden (unbedingte Sprünge) und solche, die ab
hängig von Bedingungen ausgeführt werden (bedingte Sprünge). Eine andere Unter
scheidung kann danach gemacht werden, ob nach einem Sprung das Programm ein
'Unterprogramm' ausführt und danach an der Stelle weitermacht, von wo aus in
das Unterprogramm gesprungen wurde, oder ob einfach an eine andere Stelle ge
sprungen wird, ohne daß das Programm wieder an die alte Stelle zurückkehrt.
Der einfache unbedingte Sprung wird von GOTO ausgeführt, der Aufruf eines Unter
programms von GOSUB.
Beide Befehle gibt es auch in bedingter Form als 'Sprungverteiler' (ON ..).
Schließlich existiert natürlich die wichtigste Form der Entscheidung, nämlich
die 'Wenn, dann .... ,sonst ...' (IF ... THEN ...).
Zwei Befehle, die ein Programm beenden bzw. unterbrechen werden auch unter
dieser Überschrift behandelt, da sie einen Sprung aus dem BASIC-Programm zurück
zum Direktmodus (Kommandomodus) darstellen (END, STOP).
Weil sie sonst ganz alleine dastehen würde, wurde die REM-Anweisung auch als
Sprunganweisung angesehen, da sie eine Bemerkung überspringt.
Ehe Sie die folgenden Befehlsbeschreibungen lesen, erinnern Sie sich bitte
daran, daß BASIC-Zeilennummern nur als Konstante existieren können und daß
in einer BASIC-Zeile mehrere Anweisungen durch Doppelpunkt getrennt stehen
können.
Hinweis für Fortgeschrittene
Wir wollen kurz erklären, wie intern ein Sprungbefehl behandelt wird, weil sich
daraus Regeln für die Anordnung von Sprüngen ableiten lassen, um möglichst
kurze Ausführungszeiten zu erhalten.
Die einzelnen BASIC-Zeilen sind durch sogenannte Vorwärtszeiger miteinander
verknüpft. D.h. am Anfang jeder Zeile steht für den Interpreter in zwei Bytes
die Information, wo die nächste BASIC-Zeile beginnt. Dadurch muß bei Sprüngen
nicht die ganze Information aller übersprungenen Zeilen gelesen werden, sondern
der Interpreter 'hangelt' sich bei Sprüngen über die Vorwärtszeiger von Zeilen
anfang zu Zeilenanfang, bis er die richtige Zeile gefunden hat.
Nun 'weiß' der Interpreter aber, ob die Zielzeile eine kleinere oder größere
Zeilennummer hat, als die Zeile, in der er gerade die Sprunganweisung gefunden
hat. Wenn er zu einer Zeile springen muß, die weiter hinten steht (größere
Zeilennummer), so sucht er diese Zeile ab seiner jetzigen Position. Muß er
dagegen nach vorne springen, so sucht er sofort ab dem Programmanfang.
Zeilen werden also am schnellsten gefunden, wenn sie möglichst weit vorne stehen
und zwar unabhängig von der Zeile, von der aus gesprungen wird - oder wenn sie
möglichst knapp hinter der aufrufenden Zeile stehen.
98
Loading...
+ hidden pages
You need points to download manuals.
1 point = 1 manual.
You can buy points or you can get point for every manual you upload.