von Markus Rösner Hallo liebe Turbo-Basic Freaks, dies ist nun der fünfte Teil dieser Serie, der von mir stammt. Diesesmal geht es um einige Besonder- heiten, die teilweise auch den Compiler betreffen. Darüberhinaus werden noch einige neuen Funktionen besprochen, die ich noch nicht erwähnt habe. Hier gleich zwei kleine Beispielpro- gramme zu Beginn: 1. 10 GET A 20 IF A=32 THEN 40 30 GOTO 10 2. 10 IF INKEY$=" " THEN 30 20 GOTO 10 Was fällt auf, außer damit beide Pro- gramme nur unter Turbo-Basic laufen ? Richtig, in der zweiten Fassung ist eine neue Funktion eingebaut: INKEY$. Diese neue Funktion holt sich aus dem Tastaturbuffer die zuletzt gedrückte Taste. Doch Vorsicht ! Im Gegensatz zu GET, das auf einen Tastendruck wartet, fährt das Programm bei Nichterfüllung fort. INKEY$ ist also für Spiele ge- dacht oder für Editoren, in denen das Programm jeweils fortfahren soll, wenn die Taste nicht gedrückt wurde. Mit INSTR(X$,Y$) kann man innerhalb eines Strings einen Teilstring suchen lassen. Bei A=INSTR(X$,Y$) hat A die Position des Beginns des Teilstrings im ganzen String. Natürlich wäre auch INSTR(X$,"Yeah !") möglich. Es wird zwischen Groß- und Kleinschreibung so- wie invers unterschieden. UINSTR (X$,Y$) hat die gleiche Syntax wie INSTR(X$,Y$), nur daß nicht mehr zwischen Groß- und Kleinschreibung oder invers unterschieden wird. Mit diesen beiden Befehlen kann man nun Problemlos einen Adventureparser pro- grammieren, je nach Wunsch, ob Groß- und Kleinschreibung zugelassen werden soll oder nicht. Soll die Suche der Teilstrings aber erst ab einer bestimmten Position im Hauptstring erfolgen, so ist das auch kein Problem: INSTR(X$,Y$,z) UINSTR(X$,Y$,z) Die Suche beginnt jetzt erst ab Positi- on z im Hauptstring. Oder wer kennt nicht folgendes Problem: Da hat man ein komplexes Programm ge- schrieben, es können häufig Fehler auf- treten, doch auf den Schirm kann man nur "Es ist leider ein Fehler aufge- treten" ausgeben. Klar, man kann mit PEEK(195) den Fehlercode abfragen, aber es mal wieder bloß eine nichtsaus- sagende Zahl, ähnlich den GOSUBs. Da wär doch ein gesonderter Befehl etwas: A=ERR. Das war's schon - A enthält den Fehlercode. Will man noch die Zeile feststellen, in der der Fehler aufge- treten ist so ist folgende Syntax nötig: B=ERL und B beinhaltet die Zeilennummer, in der der Fehler auf- trat. Was sagen einem ATARIaner die Speicher- stellen 18-20 ? Richtig, das ist eine interne Uhr versteckt, die leider ein bißchen umständlich zu programmieren ist. Mit TIMES="aabbcc" stellt man die Uhr ein, wobei aa die Stunden sind, bb die Minuten und cc die Sekunden. Mit TIME läßt sich diese Uhrzeit dann jed- erzeit abfragen. Doch Vorsicht ! Die Uhr geht nicht 100%ig richtig, dies ist Frequenzbedingt. Aber was soll's, klein aber fein ist sie trotzdem. Mit FRAC(x) läßt sich der Nachkomma- teil einer Zahl ermitteln, mit TRUNC(x) der ganzzahlige Anteil einer Zahl. RND(0)*10 würde es in Basic heißen, in Turbo-Basic reicht ein schlichtes RND*10. RAND(x) ermittelt eine ganz- zahlige Zufallszahl zwischen 0 und x-1. Auch kann in Turbo-Basic ganz einfach zwischen Hex- und Dezimalsystem hin und her gerechnet werden. X$=HEX(y). In X$ steht dann die Hexzahl von der Dezimal- zahl y. X=DEC(Y$) rechnet die Hexzahl Y$ in eine Dezimalzahl um und legt diese in X ab. &: Binäres and !: Binäres or EXOR: Binäres exclusiv-or DIV: Division ohne Rest MOD: Divisionsrest Mit TRANCE läßt sich ein Programm während des Ablaufs ganz leicht ver- folgen, denn dann wird immer die augen- blickliche Zeilennummer, in der sich der Computer befindet, auf dem Schirm ausgegeben. Nun aber zu den Besonderheiten: 10 ? CHR$(34)"Hi"CHR$(34) schreibt "Hi" auf den Schirm. Ein biß- chen lang, oder ? In Turbo-Basic geht's wesentlich kürzer: 10 ? ""Hi"" Und in die Listings können in Turbo- Basic sogar Hexzahlen einfließen, allerdings müßen diese wie bei einem Assembler mit einem $ gekennzeichnet werden. Bsp: POKE $0600,$4F. Steht aber von vorneherein klar, daß das fertige Programm compiliert wird, so sollte man von den Hexzahlen Abstand nehmen, denn u.U. können später Fehler auftreten (können, nicht muß). Will man alle Soundkanäle abstellen, so unbedingt DSOUND meiden, einfach nur SOUND schreiben. Ist erstens kürzer und zweitens auch wirksam. Auch muß beim compilieren beachtet werden, daß ein Programm nicht nur schneller, sondern auch länger wird. Ein Programm von mir paßte in der TB- Version zwar noch in den Speicher, aber nach dem Compilieren belegte das gute Stück 304 Sektoren, entschieden zu lang, es trat ein Fehler auf, aber erst im Programmlauf, denn der Compiler meldete, daß alles glatt über die Bühne lief. So, jetzt noch etwas zum Thema Auto- start, damit man bootfähige Disks er- stellen kann: Turbo-Basic: DOS.SYS 037 AUTORUN.SYS 145 AUTORUN.BAS 023 Das File AUTORUN.BAS wird geladen und gestartet, so- bald das Turbo-Basic im Speicher steht. Compiliertes TB: DOS.SYS 037 AUTORUN.SYS 088 AUTORUN.CTB 029 siehe oben, nur ander- er Filename. Hier noch ein kleiner Zeitersparungs- tip für die Oft-Compilierer: Der Com- piler läßt sich vom Turbo-Basic aus mit BRUN laden und starten. Zugegeben, dieser Teil wurde ein bißchen lang, der längste der Serie, aber was soll's ! Ich hoffe, daß ich euch jetzt diese hervorragende Basicerweiterung näher bringen konnte. Gut, das war's ! Bis nächsten Monat dann.