Jan Starzynski (e-mail, auch MAUS u.a.: p67@hp1.uni-rostock.de) Stand: 26.8.93 Žnderungen im CPX-Basic gegenber dem Chipmunk-Basic * jede Menge Optimierungen Ergebnis: mehr Funktion bei gleicher L„nge * Bugfix: Es gab einen harten Fehler beim Anlegen von Feldern. (ein double-Werte wurde mit 8 Byte angesetzt, hat in PURE-C aber 10!) * Es gibt jetzt vier verschiedene CPX + BASIC000.CPX, die Variante, die berall laufen sollte + BASICA00.CPX, nutzt statt eines eigenen den Systemzeichensatz, muá dazu aber LINEA-INIT nutzen. K”nnte bei den Nicht-Standard-Aufl”sungen (z.B. mit Grafikkarten) Probleme geben (probieren). + BASIC030.CPX, l„uft nur auf Systemem mit (mind.) 68030-Prozessor und 68881-FPU. + BASICA30.CPX, wie 030, nutzt aber auch den Systemzeichensatz (wie A00) + wozu das ganze Kuddelmuddel? Nun ja. Wer einen TT oder Falcon hat, wird sich freuen, ber 10 KByte in der L„nge zu sparen und auáerdem ein schnelleres Programm zu haben. Den Systemzeichensatz habe ich implementiert, um a. Platz zu sparen b. im Basic die gleichen Ausgaben zu erhalten wie in anderen Programmen * Zeitverhalten verbessert (Umschalten von Basic zu GEM nach 50 msec statt 100 msec und 20 msec Zeit fr GEM statt 50 msec) Das macht die Ausgaben etwas flieáender und die Arbeit mit dem Hauptprogramm auch. Wenn n”tig, holt sich GEM die Zeit, die es braucht, von allein. * verschiedene Zahlenbasen erlaubt fr Eingabe + $Zahl, Hexadezimalzahl (Ziffern: 0-9,a-f,A-F) + &Zahl, Oktalzahl (Ziffern: 0-7) + %Zahl, Bin„rzahl (Ziffern: 0-1) + Zahl, Dezimalzahl (Ziffern: 0-9) * Break durch CTRL-C * Abbruch einer Eingabe durch CTRL-C * Anhalten/Fortsetzen der Bildschirmausgabe mit CTRL-S/CTRL-Q * alle Tastenkombinationen mit CTRL werden abgefangen und teilweise als Funktionstasten fr die wichtigsten BASIC-Befehle benutzt + B GOSUB + C BREAK, mit SHIFT: CONTINUE + D DATA + E RUN, mit SHIFT: RUN FSEL$ '*.BAS' + F FOR, mit SHIFT: FOPEN FSEL$ '*.TXT' + G GOTO + I IF + L LIST + M MERGE, mit SHIFT: MERGE FSEL$ '*.BAS' + N NEXT + O LOAD, mit SHIFT: LOAD FSEL$ '*.BAS' + Q BYE + R RETURN + S SAVE, mit SHIFT: SAVE FSEL$ '*.BAS' + T THEN * INPUT kann durch '#' abgekrzt werden (wie PRINT durch '?') * alle BASIC-Schlsselw”rter k”nnen durch einen '.' abgekrzt werden z.B. 'PRINT x' durch 'pr. x'. Es wird dabei aber nicht berprft, ob die Abkrzung mehrere Bedeutungen hat, sondern die erste gefundene genommen. Nach dem Punkt k”nnen noch weitere Buchstaben folgen, z.B.: 'u.' fr 'USING' und 'u.$' fr 'USING$'. * Wird ein Buchstabe mir der linken Maustaste angeklickt oder ein Bereich mit gedrckter linker Maustaste berfahren, werden die Buchstaben in die Eingabe bernommen. Doppelklick erzeugt zus„tzlich ein Return. * Bei INPUT k”nnen die Variablen wie bei PRINT durch ',' oder ';' oder auch nur durch Leerzeichen voneinander getrennt werden. Aužerdem k”nnen fr alle Variablen einzelne Promptstrings angegeben werden. * (kleine) Hilfe ber HELP-Taste * im VT-52 Emulator fehlt nur noch das Setzen von Farben (ESC b & c) * Sichern der Quelltexte bei SAVE mit Endung '.BAS' (statt '.TEXT') * Wenn das BOOTINIT-Flag des CPX gesetzt ist, werden das beim Booten aktuelle Laufwerk und der Pfad bei jeder Dateioperation als Standardwerte gesetzt. Dadurch gammeln die .BAS-Dateien nicht berall auf der Platte rum. Ist BOOTINIT nicht gesetzt, wird als Standard 'C:\' genutzt. Falls es dieses Laufwerk nicht gibt: 'A:\'. * CHR$ 0 erzeugt eine String, der ein Null-Zeichen enth„lt, auáerdem eine 4 Byte lange Kennung hierfr. (bedingt durch C, wo die Null als Ende-Symbol einer Zeichenkette steht). Der Ausdruck LEN CHR$ 0 liefert folglich 5. * erweiterte Funktionen: + SQU x == SQR x + RCP x fr 1/x + alle trigonometrischen Funktionen und ihre inversen - SIN x,COS x,TAN x - ASIN x,ACOS x,ATAN x == ARCTAN x + alle Hyperbelfunktionen und ihre inversen - SINH x,COSH x,TANH x - ASINH x,ACOSH x,ATANH x + erweiterte logarithmische Funktionen - LN x == LOG x fr den natrlichen Logarithmus log_{e} - LG x fr log_{10} - LD x fr log_{2} + erweiterte Exponentiationsfunktionen - EXP x, Standard e^x - TEN x, 10^x - TWO x, 2^x + Konvertierungen zwischen Zahlenbasen - HEX$ x, Zahlausgabe als hexadizmaler String - OCT$ x, Zahlausgabe als oktaler String - BIN$ x, Zahlausgabe als bin„rer String + FACT x, Fakult„tsfunktion + RAND, Zufallszahlen zwischen 0 und 1, werden mit Hilfe der XBIOS-Funktion Random() erzeugt. - RAND x, Zufallszahlen im Bereich 0 bis x-1 + Dateifunktionen - FOPEN name$[,opt$], schlieže bereits ge”ffnete Datei, ™ffne neue Datei, opt$ darf folgende Optionen beinhalten: b Bin„rmodus, alle ausgegebenen Zeichen werden unver„ndert bernommen (z.B. keine lf->cr/lf Wandlung) n schaffe neue Datei: eine bereits bestehende Datei wird zuerst gel”scht - FCLOSE, Datei schliežen - FINPUT "prompt";what... ,Lies aus ge”ffneter Datei bzw. wenn keine ge”ffnet von der Tastatur ( wenn aus Datei gelesen wird, wird der Prompt unterdrckt) - FPRINT what, schreibe ans Ende der ge”ffneten Datei bzw. Bildschirm - FSEL$ ext$, bringt eine Dateiselektbox auf den Schirm und gibt die eingegebene Datei als String zurck. Wenn Abbruch gedrckt wurde, ist das ein leerer String. ext$ wird als Dateimaske verwendet (z.B. *.BAS) - ERRNO, sollte nach FPRINT oder FINPUT gelesen werden. Enth„lt 0, wenn alles in Ordnung gegangen ist, sonst einen Wert<>0 Nach jedem lesen wird ERRNO wieder automatisch auf 0 gesetzt. - Die Dateifunktionen sind nicht besonders schnell, sondern besonders sicher gehalten. Sie sollen vor allem dem bequemen Austausch von Daten dienen und nicht umfangreichen Dateimanipulationen. + Winkelsysteme, Standard ist RAD - DEGREE, alle Winkel werden als Altgrad betrachtet (Vollkreis hat 360 Grad) - GRAD, Neugrad (Vollkreis hat 400 Grad) - RAD, Radiant (Vollkreis hat 2*Pi) + Umrechnen von Dezimalgrad in Grad,Min,Sec und umgekehrt - DMS$ x, umrechnen in einen String GG:MM:SS,rest - DEG x$, Umrechen eines Strings der obigen Form in Dezimalgrad + CLS, L”schen des Bildschirmes und Setzen des Cursor in die linke obere Ecke + CLEAR l”scht alle Variablen, Schleifen und setzt die Datas zurck (nicht in Unterprogrammen einsetzen!) + PEEK und POKE liefern laufen im Supervisor-Modus, die Interrupts werden ausgeschaltet - aužerdem gibt es jetzt auch PEEKW, PEEKL, POKEW, POKEL um words (2 Byte) und longs (4 Byte) auf einmal lesen und setzen zu k”nnen + INKEY$, liefert einen leeren String (""), wenn keine Taste gedrckt wurde, sonst die zuletzt gedrckte Taste Ausserdem bewirkt ein Aufruf dieser 'Funktion' mit Zwang ein Umschalten zu GEM, kann also genutzt werden, etwas mehr Rechenzeit freizugeben. + USING,USING$ pr„zisieren der Ausgabegenauigkeit, -breite und -ausrichtung - wird eine Breite<0 angegeben, erfolgt die Ausgabe linksbndig, sonst rechtsbndig - USING, setzt die Zahl der ausgegebenen Nachkommastelle auf 10 - USING x, setzt die Zahl der Nachkommastellen auf x - USING x,y, wie oben, es werden Leerzeichen ausgegeben, bis Breite y erreicht ist. - mit USING gesetzte Werte gelten fr alle folgenden Ausgaben - USING$ ist USING fr die Ausgabe von Strings: die Nachkommastellen sind hier die Anzahl der maximal auszugebenden Buchstaben - Die Angabe der Pr„zision kann unterbleiben. Es muž dann nach USING gleich das Komma folgen. - WARNUNG: wird die Breite ungleich 0 oder 1 gesetzt, werden Escape-Sequenzen oft nicht mehr gehen, da mit Leerzeichen aufgefllt wird. Bsp.: USING$ 0,4:PRINT chr$(27),'E' bewirkt die Ausgabe des Escape-Zeichens mit 3 Leerzeichen dahinter. Das 'E' wird dann als normaler Buchstabe interpretiert. Mit USING$:PRINT chr$(27),'E' funktioniert alles wie gedacht. Aber auch USING$ 0,4:PRINT chr$(27)+'E' funktioniert (+ statt , )! + LABEL line, kann zur Zuweisung einer Zeilennummer zu einer Variablen verwendet werden. Bei einem RENUM-Befehl wird die Zahl hinter LABEL richtig umgerechnet. Dadurch geht z.B.: LIST --> 1 h=LABEL 1:goto h RENUM LIST --> 10 h=LABEL 10:goto h + Grafikfunktionen, der Punkt (0,0) ist links unten, die x-Koordinaten laufen von 0 bis 255 und die y-Koordinaten von 0 bis 175 - PLOT x,y setzt einen Punkt an der Stelle (x,y) - LINE x1,y1,x2,y2, zieht eine Linie von (x1,y1) zu (x2,y2) - CIRCLE x1,y1,r, zieht eine Kreis um (x1,y) mit Radius r + CONTINUE, mit STOP oder Ctrl-C abgebrochen Programme k”nnen mit diesem Befehl weitergefhrt werden. Ohne STOP oder Ctrl-C bewirkt CONTINUE gar nichts, kann also als Dummy-Anweisung benutzt werden. + TRON, schaltet den Trace-Modus ein: nach jeder abgearbeiteten Zeile wird diese gelistet und auf ein Return gewartet. Mit Ctrl-C kann unterbrochen und mit CONTINUE fortgesetzt werden. Das gibt die M”glichkeit, Variablen zu betrachten e.t.c. Hier gibt es einen Fehler: die erste abgearbeitete Programm- zeile wird zweimal angezeigt. + TROFF, schaltet den Trace-Modus wieder aus. + Spezielle Befehle, um auf Schnittstellen zugreifen zu k”nnen Erlaubte Ger„te sind dabei - "PRN", Drucker - "AUX", serielle Standard-Schnittstelle - "CON", die Konsole - "MIDI", Midiport - "IKBD", Tastaturprozessor - "RCON", Konsole ohne Emulation - "MOD1", Modem 1 - "MOD2", Modem 2 - "SER1", Seriell 1 - "SER2", Seriell 2 - nicht alle Ger„te sind fr alle Rechner oder alle Zwecke sinvoll, da liegt die Verantwortung beim Programmierer * a=INBYTE dev$, liest ein Byte von einer Schnittstelle Der Wertebereich der Rckgabewerte liegt zwischen 0 und 255. Ist der Rckgabewerte <0, war kein Zeichen verfgbar * a=OUTBYTE dev$,byte, bergibt ein Byte. Ist der Rckgabewert>=0 konnte das Zeichen ausgegeben werden.