True BASIC


**TRUE BASIC ist ein schneller Basic-Interpreter/Compiler mit umfangreichem Wortschatz und komfortablem Editor. Entwickelt wurde es von John G. Kemeny und Thomas E. Kurtz, die schon vor etwa 20 Jahren die Urversion von BASIC erstellt haben.**

TRUE BASIC ist ein Basic-Dialekt, der auf verschiedenen Betriebssystemen und Computern lauffähig ist, z. B. auf IBM-Computern und Kompatiblen, Apple Macintosh, AMIGA und auch auf dem ATARI ST. Dadurch können Programme, die auf verschiedenen Rechnern mit TRUE BASIC erstellt wurden, direkt auf einen anderen übertragen werden. Die Anpassung bezieht sich dabei, sofern der jeweilige Computer grafikfähig ist, auf die Grafik und die Fenstertechnik.

Nicht übertragbar sind dagegen die speziellen Systembefehle der einzelnen Rechner, auf die mit speziellen Libraries zugegriffen werden kann.

Der Editor

Eines der wichigsten Bestandteile des Basic-Systems ist der Editor, denn mit diesem Teil verbringt man die meiste Zeit bei der Programmentwicklung. Er besteht aus drei Fenstern (Edit, Command, Output) und einer Menüzeile. Zusätzlich lassen sich die wichtigsten Editorbefehle über Tastencodes aufru-fen, so daß man die Maus unbenutzt lassen kann. Sehr wichtig sind die Befehle zum Suchen und Ersetzen von Textpassagen, oder zum Anspringen eines bestimmten Unterprogramms. Außerdem gibt es Möglichkeiten, schnell ans Ende oder den Anfang des Listings zu gelangen. Da TRUE BASIC sowohl mit, als auch ohne Zeilennummern arbeitet, gibt es eine Funktion, die Zeilennummern löscht bzw. einfügt. Nun gibt es Programmierer, die weniger gern ihre Programme so strukturieren, daß Schleifen und Abfragen eingerückt sind. Ihnen wird mit dem Befehl DO FORMAT geholfen, denn dieser nimmt das Einrücken der betreffenden Zeilen nachträglich vor, damit das Li-sting übersichtlicher ist.

Sehr hilfreich sind auch die Befehle ECHO, DO TRACE und DO XREF. Nach Eingabe von ECHO werden alle Bildschirmausgaben auf den Drucker oder ein File umgelenkt. DO TRACE startet die Fehlerbehandlungsroutinen. Dabei werden Optionen wie STEP, SLOW, FAST, BREAK und unter Umständen noch Bedienungen und Variabein überprüft. Damit können aus dem Gesamtprogramm leicht bestimmte Bereiche herausgelöst werden, so daß die Fehlersuche einfach zu optimieren ist. Der letzte, aber nicht unwichtigste Befehl ist DO XREF. Er gibt ein mit Zeilennummern versehenes Listing aus und danach eine Crossreferenz-Liste der verwendeten Variablen und Befehle. Dies bedeutet, daß hinter jeder Variablen alle Zeilennummern angegeben werden, in denen sie vorkommt. Dies ist eine große Hilfe bei der Fehlersuche und auch schon bei der Programmentwicklung, weil man alle verwendeten Variablen geordnet vor sich hat.

Strukturbefehle

TRUE BASIC bietet viele Befehle an, die es ermöglichen, klar gegliederte und übersichtliche Programme zu schreiben, wie dies auch in Sprachen wie PASCAL, C und MODULA vorgesehen ist. Daher stehen neben der gewöhnlichen FOR..NEXT-Schleife noch Strukturen wie z.B.: DO WHILE/LOOP oder DO UNTIL/LOOP und verschiedene Variationen zur Auswahl. Damit sind sowohl abweisende als auch nichtabweisende Schleifen programmierbar. Alle Schleifen können mit einem EXIT-Befehl verlassen werden, was jedoch nicht immer der beste

Weg ist. Die IF/THEN-Struktur wurde um ELSE und weitere ELSEIF-Zweige erweitert und ist nicht auf eine Zeile beschränkt. Somit kann bei jeder Bedingung eine beliebige Anzahl von Befehlen ausgeführt werden. In Anlehnung an Sprachen wie PASCAL u. a. wurde auch der Entscheidungsbefehl CASE aufgenommen:

SELECT CASE Ausdruck

	CASE Konstante1 Anweisung(en)
	CASE Konstante2 Anweisung(en)
	CASE ELSE Anweisung(en)
END SELECT

Sehr gut gelungen sind die Funktions- und Prozeduraufrufe, die auch Rekursionen zulassen und an PASCAL angelehnt sind. Damit können Programme sehr einfach modernisiert werden, wobei dann im Hauptprogramm fast nur noch die Prozeduraufrufe stehen.

  1. DEF Func(x,y,...) = Ausdruck Func(x,y,...)
  2. SUB Sub(x,y,...) CALL Sub(x,y,...)

DEF FUNC und SUB sind Funktions- bzw. Prozeduraufrufe mit Parameterübergabe. Das heißt, daß der aufrufende Befehl (z.B. CALL Sub(5,3)) Werte (hier: 5,3) an das Unterprogramm übergibt, die dann von diesem weiterverarbeitet werden, ohne daß die Variablen des aufrufenden Programmes verändert werden. Es ist auch möglich, diese Aufrufe mit Rückgabeparametern zu versehen.

Funktionen und Prozeduren können auch extern definiert werden. Dies bedeutet, daß man oft benutzte Prozeduren in ein separates File schreibt und sie dann vom Hauptprogramm aus mit dem Befehl LIBRARY einbindet. Diese Prozedurfiles können auch von mehreren Programmen verwendet werden. Auf die gleiche Weise werden die systemspezifischen Befehle der jeweiligen Rechner und die Erweiterungen nutzbar gemacht. Möglich ist es auch, externe Prozeduren in der Sprache ’C’ oder in Assembler zu schreiben und von TRUE BASIC aus aufzurufen.


1. Bildschirm von True Basic

Mathematische und trigonometrische Funktionen

Die mathematischen Funktionen enthalten neben ABS, EXP, INT, LOG, LOG2, LOGIO, MAX, MIN, RND, SGN, SQR noch Befehle zum Runden (ROUND) und Abschneiden (TRUNCATE) von Nachkommastellen. Hinzu kommen noch MODULO, DIVIDE und REMAINDER, die beim Teilen von Zahlen den ganzzahligen Anteil oder/und den Rest angeben. Die trigonometrischen Funktionen bestehen neben SIN, COS, TAN noch aus ATN, PI, DEG, RAD und ANGLE. Weitere Funktionen (z.B. die Areafunktionen usw.) sind in den Libraries definiert, die bei Bedarf eingebunden werden können.

Sehr praktisch ist es, daß Winkelangaben im gebräuchlichen Bogenmaß und auch im Grad eingegeben werden können. Dies erspart bei manchen Anwendungen die Umrechnung.

Sehr leistungsfähig sind die eingebauten Matrix-Operationen. Mit einem einzigen Befehl kann eine ganze, mehrspaltige Matrix eingelesen werden. Matrixaddition, -Subtraktion, -Multiplikation und -Inversion stellen ebenfalls kein Problem mehr dar.

Stringfunktionen

Einige spezielle Stringoperationen erweitern das ’Standard-BASIC’: LCASE und UCASE wandeln Buchstaben in Klein- bzw. Großbuchstaben; TRIM, RTRIM und LTRIM entfernen Leerzeichen, die an verschieden Stellen des Strings stehen; REPEAT kopiert einen String beliebig oft in einen anderen; USING erlaubt die formatierte Ausgabe von Zeichen, Strings und Zahlen; POS gibt den Ort an, an dem ein Teilstring in einem anderen String steht. Auffallend für Basic-Programmierer ist, daß die Befehle LEFT$, RIGHTS und MIDS fehlen. Bei TRUE BASIC gibt es dafür nur die Möglichkeit, hinter dem Stringnamen den Anfangs- und Endwert anzugeben, um einen Teilstring zu erhalten. Dies erfordert ein gewisses Umdenken beim Schreiben der Programme.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~ library "d:\libs\system.trc" declare public control, int_in, intin

call pokew(control,72) call pokew(control+2,6) call pokew(control+4,1) call pokew(control+6,0) call pokew(int_in,40) call pokew(int_in+2,40) call pokew(int_in+4,0) call pokew(int_in+8,150) call pokew(int_in+10,150)

for i=1 to 10 call s_aes next i

call pokew(contrl,15) call pokew(contrl+2,0) call pokew(contrl+6,1) call pokew(intin,3)

call s_vdi plot 0,0;1,1

end

</div>
**VDI-Aufruf in True Basic**



# Dateien

Es werden drei Typen von Dateien unterstützt: TEXT, RECORD und BYTE. TEXT-Dateien sind die 'normalen’ Dateien, die mit INPUT und PRINT beschrieben und gelesen werden. RECORD und BYTE sind platzsparende Dateien, die mit READ und WRITE behandelt werden. Dateien können mit einer Schleife eingelesen werden, welche die Endbedingung enthält: DO WHILE MORE 4h 1 ... bzw. DO WHILE MORE DATA ... Einige weitere Befehle erleichtern die Behandlung von Dateien. TRUE BASIC kommt somit den Programmierern entgegen, die sich bisher gegen die schlechten Möglichkeiten und die dadurch notwendigen Mühen und Einschränkungen ausgesprochen haben. TRUE BASIC hat auch hier einiges von anderen Sprachen übernommen. Zusätzlich sind noch Befehle dazugenommen worden, damit das Arbeiten möglichst einfach ist. Sehr hilfreich ist dabei der Befehl ASK, der viele Informationen über eine Datei geben kann (Status, Organisation, Größe, Zeigerstand, Recordgröße). Mit diesen Befehlen kann dieses immer wiederkehrende Problem der Dateiverwaltung ohne größeren Aufwand gelöst werden.

# Grafik & Sound

Die Standard-Grafikbefehle wie POINT, LINE, ELLIPSE, AREA und TEXT sind erwartungsgemäß vorhanden. Dazu kommen leistungsfähige Befehle, die helfen, Problemstellungen eleganter zu lösen. Auch die Verwaltung mehrerer Bildschirmfenster (WINDOWS) ist einfach gelöst. Der wichtigste Befehl ist SET WINDOW, denn damit kann der Wertebereich für die Grafikausgabe bestimmt werden. Dann ist bei Grafikausgaben kein Umrechnen der Werte auf die Grafikpunkte des Bildschirms mehr notwendig, denn diese Arbeit übernimmt das Basic.

Auch an anderer Stelle zeigt sich TRUE BASIC von seiner besten Seite. Grafiken werden auf alle Auflösungen des ST automatisch angepaßt. Dies betrifft auch die Farben, die beim monochrom Monitor in Graustufen umgewandelt werden. Eine interessante Möglichkeit ist, daß man die Größe des Ausgabefensters frei bestimmen kann und die Grafikausgabe dann auf die Größe diese Fensters beschränkt wird.

Recht interessant ist der BOX-Befehl, der einen bestimmten Bildschirmabschnitt als BOX definiert und in einem String abspeichert. Diese BOX kann beliebig oft an jede Stelle des Bildschirms kopiert werden. Benutzt man dazu noch einen speziellen Befehl zum Löschen der Box, kann hiermit ein Objekt bewegt werden.

Wer sich gerne mit Musik beschäftigt, für den sind die Befehle PLAY und SOUND von besonderem Interesse. Mit PLAY werden die Melodien in der Standart Western Notation eingegeben. SOUND bietet dagegen eine bessere Kontrolle über die Töne und dient zur Erzeugung spezieller Geräusche. Eine Besonderheit des SOUND-Befehls ist, daß eine spezielle Option erlaubt, die Melodie im Hintergrund abzuspielen, während das Programm weiterläuft. Damit ist es leicht möglich, z. B. Spiele mit einer Unterlegmusik zu versehen.

# COMPILER UND GESCHWINDIGKEIT

Bei jedem Starten des Programms mit RUN wird der Source-Code auf Syntax-Fehler untersucht, erst wenn ein Programm in dieser Beziehung fehlerfrei ist, wird es gestartet. Dabei wird ein sogenannter Zwischencode erzeugt, der kompakt u.nd schnell ist. TRUE BASIC ist somit kein richtiger Compiler, obwohl dieser Eindruck durch die Option ’COMPILE’ aufkommen könnte. Es ist vielmehr, wie auch OMIKRON- oder GFA-Basic, ein optimierender Interpreter. Mit ’COMPILE’ wird lediglich ein File erzeugt, das nicht mehr geändert werden kann und bei dem dadurch die Syntaxkontrolle und Zwischencodeerzeugung entfällt. Es gibt auch keinen RUN-TLME-Inter-preter, der es erlaubt, Programme so aufzubereiten, daß sie auch Personen verwenden können, die diesen Interpreter nicht besitzen. Ein solches RUN-TIME-PACKAGE muß extra gekauft werden, der Preis liegt bei 248 DM. Damit erhält man dann aber auch die Lizenz um selbsterstellte Programme verkaufen zu dürfen. Im Klartext bedeutet das, daß man selbsterstellte Programme, ohne dieses Programmpaket, nicht weitergeben kann. Dies ist eine erhebliche Einschränkung für den Benutzer, die man nicht unterschätzen sollte. Die Durchführung der Benchmark Tests ergab einige Schwierigkeiten. Obwohl laut Handbuch immer Variablen im Fließkommaformat verwendet werden, ergab sich bei den Schleifen ein Unterschied, wenn sie anstelle von 1 bis 1000 lief, als von 1.1 bis 1000.1. Bei der Integerschleife waren die Zeiten deutlich besser, was darauf schließen läßt, das TRUE BASIC intern auf Integeroperationen umschaltet, wenn dies möglich ist. Nicht zuletzt wegen dieser Tatsache wurde auf eine direkte Gegenüberstellung der Werte verzichtet. Bewertend kann aber gesagt werden, daß TRUE BASIC-Programme etwas langsamer ablaufen, als mit OMIKRON- oder GFA-Basic. Die Zeiten liegen allerdings dicht beieinander.


<div class="textkasten bgblue" markdown=1>

do while a=0 call clock loop end

MODULE timer

SHARE start_time, #1, #2
OPEN #1: screen 0,-8,0,1
OPEN #2: screen .85,1,.9,1
LET start_time = time
CALL clock

SUB clock
	LET t=time
	WINDOW #2
	CLEAR
	PRINT round(t-start_time,1)
	WINDOW #1
END SUB

END MODULE

</div>
**MODULE-Aufruf in True Basic**


# Was ST-Anwender vermissen werden

Der Grundwortschatz von TRUE BASIC nutzt viele ST-spezifischen Befehle nicht ausreichend oder gar nicht. Dies liegt daran, daß man sich an den Möglichkeiten des schwächsten Glieds, in diesem Fall dem IBM PC, orientieren mußte, um eine übertragbare Sprache gewährleisten zu können. Deshalb fehlen Befehle für 'echte’ Windows, Drop-down-Menüs und vor allem die komfortablen Interruptbefehle (ON TIMER/MOUSE/MENU GOSUB). Wer diese Befehle verwenden will, der muß sich die Prozeduren entweder selbst schreiben, oder er kauft sich das 'ST Developer’s Toolkit’ (128 DM), in dem alle diese Funktionen als Bibliotheken abgelegt sind.

# Übertragbar?

TRUE BASIC ist nicht kompatibel zum ’Standard-Basic’ von Microsoft. Dies betrifft sowohl die Syntax, als auch einige Befehle, die entweder einen anderen Namen haben, oder in dieser Form gar nicht mehr existieren (z.B. LEFT$, RIGHTS, MIDS). Dies bringt einige Probleme mit sich. Im Falle des IBM-PC und dessen BASICA hat man deshalb einen Converter entwickelt, der diese Programme weitgehend an TRUE BASIC anpaßt. Doch auch treten Schwierigkeiten auf, so daß einige Befehle von Hand angepaßt werden müssen. Auch beim ATARI ST gibt es Probleme beim Übertragen von OMIKRON-, GFA- und anderen Basicprogrammen. Dies betrifft an erster Stelle alle Systembefehle, die in einigen dieser Interpreter schon vordefiniert sind, aber auch eine Vielzahl von anderen Befehlen muß speziell abgeändert werden. Dabei ist auch interessant, daß TRUE BASIC nur einen numerischen Variablentyp unterstützt. Dieser arbeitet mit einer 14-stelligen Genauigkeit und entspricht dem doppeltgenauen Gleitkommaformat anderer Systeme. Diese Vereinfachung hat Vor- und Nachteile. Auf der einen Seite muß man sich keine Gedanken um den geeigneten Variablentyp machen, auf der anderen Seite kann die Genauigkeit und die Geschwindigkeit darunter leiden.

Alle Programme, die mit anderen Basic-Versionen erstellt wurden, lassen sich auf TRUE BASIC anpassen . Die systemnahen Befehle des BIOS, XBIOS und GEMDOS sind komplett über Bibliotheken ansprechbar. Die Anpassungsarbeiten sind also in erster Linie eine Frage des Aufwands oder des Preises.

# Für wen eignet sich TRUE BASIC

Vergleicht man TRUE BASIC mit dem Standard, dann ist die Befehlsvielfalt überwältigend. Viele Bereiche, vor allem jedoch die Grafik, wurden um viele Befehle erweitert. Besonders interessant sind jedoch die Strukturbefehle (WHILE,UNTIL,CASE) und die Unterprogrammtechnik (DEF FUNC, SUB, LIBRARY), die eine sehr gute Strukturierung der Programme und ein Aufteilen in 'handliche’ Module erlauben. Ein kleiner Nachteil ist, daß manche Basicbefehle nicht mehr kompatibel zum Sprachstandard ’MS-Basic’ sind. Dadurch ergeben sich für Basic-Umsteiger einige Probleme. Auch ist ein Übertragen von Programmen problematisch, wenn auch nicht unmöglich. Ein weiterer Nachteil ist, daß man sich bei manchen Bereichen an den Möglichkeiten des IBM-PC orientieren mußte, denn dadurch werden die Fähigkeiten der anderen Systeme mit ihren grafischen Benutzeroberflächen (GEM, Intuition usw.) nicht vom Sprachkern unterstützt. Eine akzeptable Lösung sind die systemspezifischen Libraries, und die Entwickler-Toolkits, die eine komfortabel Programmierung der Benutzeroberflächen erlauben. Ist man von der Qualtität des TRUE BASIC Systems überzeugt, dann stellt sich die Frage nach den Preis. Mit 248 DM gehört es zu den teuersten Systemen, zumal dabei noch nicht die Möglichkeit zum Erstellen von unabhängigen Programmen und dem Verkauf der selbsterstellten Programmen gegeben ist. Außerdem ist es so, daß dieses RUNTIME-Pagage keinen echten Compiler beinhaltet, der eine weitere Geschwindigkeitssteigerung ermöglicht. Die Dokumentation ist sehr umfangreich: Ein Referenz-Handbuch, das alle Befehle erklärt und ein Benutzer-Handbuch, das die Besonderheiten des ST erläutert. Leider sind diese Bücher momentan nur in englischer Sprache erhältlich, was jedoch einen Computeranwender nicht erschrecken dürfte.

Als Fazit bleibt zu sagen, daß TRUE BASIC sicherlich den zur Zeit besten und ausgereiftesten Sprachschatz bietet. Außerdem gewährleisten vorhandene und geplante LIBRARIES einen ständigen Ausbau des Systems. Es ist daher auch für professionelle Anwendung gut geeignet. Diese Anwendergruppe erklärt dann den, für den privaten Anwender, recht hohen Preis des Basic-Systems. (mn)

	+ Strukturbefehle (DO WHILE, DO UNTIL, IF THEN ELSE)
	+ Modultechnik (Libraries)
	+ komfortabler Editor + viele Erweiterungen (Libraries)
	+ portabler Code (PC, AMIGA, MAC u. a.)
	+ Zugriff auf Systembefehle des ST

	- relativ hoher Preis
	- Run-Only-Modul nur optional
	— Handbuch nur in Englisch

Hardwarevoraussetzung: ROM-TOS oder 1 MB

Als Erweiterungen sind erhältlich:

ST Developer’s Toolkit Advanced String Library 3-D Graphics Mathematician’s Toolkit Sorting & Searching

je DM 128.-

Bezugsquelle: Pfotenhauer Microcomputer-Anwendungen Postfach 1267 7590 Achern


Aus: ST-Computer 10 / 1987, Seite 100

Links

Copyright-Bestimmungen: siehe Über diese Seite