Auch der neue Computer von Schneider hat einen BASIC-Interpreter von Locomotive. Wieder handelt es sich um Software, die Zeichen setzt.
Der BASIC-Interpreter des PCW 8256 ist, wie bei reinen CP/M-Systemen üblich, nicht fest in einem ROM eingebaut, sondern muß bei Bedarf erst von Diskette geladen werden. Dazu gibt man (unter CP/M Plus) einfach »BASIC« ein. Nach wenigen Sekunden ist das sogenannte »Mallard-80-Basic« geladen und meldet sich mit: Mallard-80 BASIC with Jetsam Version 1.29
(c) Copyright 1984 Locomotive Software Ltd. All rights reserved 31597 Bytes free
Obwohl vom Grundbefehlssatz her offenbar an den allen CP/M-Programmierern bekannten MBasic-Interpreter von Microsoft angelehnt, ist das Mallard-80-Basic doch eine völlige Neuentwicklung der englischen Software-Firma »Locomotive«, die auch die BASIC-Interpreter für die anderen Schneider-Computer entwickelte. Wer sich über die Bezeichnung »Mallard-Basic« wundert, der findet im Anhang des rund 400 DIN-A4-Seiten langen BASIC-Handbuchs die Erklärung. Dort findet sich ein dezenter Hinweis auf die Spitzenstellung, die dieser BASIC-Interpreter im Hause Locomotive Software einnimmt: »Mallard« ist nämlich der Name der Dampflok, die seit dem 3. Juli 1938 den Geschwindigkeits-Weltrekord für Dampflokomotiven über eine Viertelmeile hält (mit einer Durchschnittsgeschwindigkeit von 202 km/h bei einem Gesamtgewicht des Zuges von 240 Tonnen).
Ganz schief lagen die traditionsbewußten Engländer bei der Namensgebung für das Mallard-80-Basic sicher nicht, denn es handelt sich hierbei um einen der leistungsfähigsten BASIC-Interpreter, die unter CP/M verfügbar sind.
Wer allerdings, wie von den anderen Schneider-Computern gewohnt, jede Menge Befehle für Grafik, Farbe, Sound oder Interrupt-Verarbeitung erwartet, der muß enttäuscht werden: Joyce ist eine reine CP/M-Maschine für professionelle Anwendungen, und so sind die Schwerpunkte auch beim BASIC etwas verteilt. Das Mallard-80-Basic wartet mit einem in anderer Richtung ungewöhnlich gut ausgebauten Befehlssatz auf.
Zunächst einmal sind alle Befehle und Funktionen des MBasic-Interpreters enthalten. Dazu gehören insbesondere leistungsstarke Befehle zur formatierten Ausgabe von Zahlen und Strings (besonders wichtig für kaufmännische Anwendungen). Neben den drei bekannten Variablentypen String, Integer und Real (Single Precision, einfache Genauigkeit) gibt es speziell für naturwissenschaftliche und mathematische Anwendungen den Datentyp »Double Precision«, also Variablen doppelter Genauigkeit. Bei Verwendung von »Double Precision«-Variablen wird eine Rechengenauigkeit von 16 Stellen erreicht (gegenüber sieben Stellen bei »Single Precision«).
Ebenfalls mit MBasic kompatibel sind die Funktionen zur Umwandlung von Zahlenwerten in Strings (MKI$, MKS$, MKD$) und zurück (CVI, CVS, CVD) sowie die Befehle zur Verwaltung sequentieller und Direktzugriffs-Dateien. Wer also bereits mit CP/M-Computern zu tun hatte, wird sich leicht an das Mallard-Basic gewöhnen.
Ein weiterer Vorteil: Die ganze Vielzahl von MBasic-Programmen kann ohne Probleme auch auf dem neuen Schneider-Computer gefahren werden. Im ASCII-Format auf Diskette gespeicherte MBasic-Programme lassen sich mit Mallard-Basic ganz normal laden und problemlos ausführen. Die Erweiterungen gegenüber MBasic betreffen in erster Linie einen für den professionellen Einsatz des neuen Schneider-Computers sehr wesentlichen Punkt: die Dateiverwaltung. Hierfür gibt es unterschiedliche Kategorien von BASIC-Befehlen:
Alle CP/M-Datei-Funktionen stehen auch im Mallard-Basic zur Verfügung, wobei teilweise zwei Befehlsworte für die gleiche Funktion vorhanden sind. In diesem Falle entspricht das eine Befehlswort dem BASIC-Standard, das andere dem unter CP/M üblichen Befehl. ERA oder KILL beispielsweise löschen Dateien, REN oder NAME dienen zum Umbenennen beliebiger Files, DIR oder FILES ergibt eine Auflistung des Disketten-Inhaltsverzeichnisses.
Diese Form der Dateiverwaltung ist die einfachste: Eine sequentielle Datei kann nur in aufeinanderfolgenden Datensätzen geschrieben und gelesen werden. Das bedeutet, daß ein direkter Zugriff auf einen bestimmten Datensatz unmöglich ist. Im Zweifelsfall muß die gesamte Datei von Anfang bis Ende gelesen werden, um einen gesuchten Datensatz zu erhalten. Dafür ist die Handhabung sequentieller Dateien sehr einfach: Mit dem OPEN-Befehl wird die gewünschte Datei entweder zum Lesen oder zum Schreiben geöffnet. Anschließend können mit PRINT# und INPUT# Daten geschrieben beziehungsweise gelesen werden.
Um bestimmte Datensätze direkt anzusprechen, muß eine Datei vom Typ »Random Access« (wahlfreier Zugriff) geöffnet werden. Jeder Datensatz einer solchen Datei hat eine bestimmte Nummer, über die er angesprochen wird. Der BASIC-Befehl PUT schreibt einen solchen Datensatz auf Diskette, GET liest den gewünschten Datensatz in den Speicher ein. Voraussetzung für die Verwaltung von Random-Access-Dateien ist allerdings eine feste, für alle Datensätze gleiche Länge. Zur Festlegung dieser sogenannten Feldbreite dient das FIELD-Kommando.
Handelt es sich bei den eben genannten Befehlskategorien um übliche Dateiverwaltungsbefehle, wie sie in dieser oder ähnlicher Form auch in anderen BASIC-Dialekten vorkommen, so sprengt das im Mallard-Basic integrierte Jetsam-System jeden Vergleichsrahmen: Es handelt sich dabei um nicht mehr und nicht weniger als um ein Multi-User-fähiges, index-sequentielles Datenbanksystem. Der Besitzer des neuen Schneider-Computers darf
Verschiedene Tasten lassen sich auch für BASIC-Programme mit Sonderfunktionen belegen also getrost das Geld für ein spezielles Datenbanksystem sparen, denn das Mallard-80-Basic mit Jetsam-System ist sehr leistungsfähig. Mit dem CREATE-Kommando wird ein sogenanntes »Keyed File« angelegt, das in Wirklichkeit aus zwei verschiedenen Dateien besteht: einer Random Access-Datei (der eigentlichen Datei) und einer sequentiellen Index-Datei. Jeder Datensatz der Index-Datei besteht aus drei Teilen. Da ist zunächst der eigentliche Schlüsselbegriff, dargestellt durch einen String von bis zu 31 Zeichen Länge. Zu jedem Schlüsselbegriff gehört eine Nummer, die auf einen Datensatz der zur Schlüsseldatei gehörigen Random Access-Datei hinweist. Drittens hat jeder Schlüsselbegriff einen sogenannten »Rang« (die möglichen Rangwerte gehen von eins bis acht). Je nach Programmierung kann der Rang als separater, zusätzlicher Schlüsselbegriff oder als tatsächliche Rangfolge bei der Suche nach Schlüsseldaten angesehen werden.
Der große Vorteil von Jetsam-Dateien gegenüber einfachen Random Access-Dateien ist die hohe Benutzerfreundlichkeit: Bei Jetsam-Dateien wird nicht direkt nach Datensatznummern gesucht, sondern nur indirekt über den Schlüsselbegriff. Der Aufbau und die Handhabung einer solchen Datei sind sehr flexibel. Die einfache Steuerung dieser doch schon etwas komplexeren Dateistruktur durch einfache BASIC-Befehle kommt dem Programmierer sehr entgegen. Endlich kann ein leistungsfähiges Datenbanksystem in einer benutzerfreundlichen BASIC-Umgebung laufen und programmiert werden.
Das Mallard-80-Basic bietet zur eigentlichen BASIC-Programmierung die von den Schneider-Computern gewohnten guten Hilfsmittel: AUTO unterstützt das Eingeben von BASIC-Programmen durch Vorgabe der Zeilennummer, RENUM numeriert das ganze Programm oder auch nur Teile davon neu. DELETE löscht ganze Zeilenbereiche.
Die Unzulänglichkeiten des normalen INPUT-Befehls wurden mit den zusätzlichen Befehlen LINE INPUT und INPUT$ behoben. LINE INPUT liest eine ganze Zeile einschließlich aller Kommas und sonstiger Trennzeichen von der Tastatur oder aus einer Datei. INPUT$ ermöglicht eine formatierte Eingabe, indem die Anzahl der einzulesenden Zeichen vorgegeben werden kann. Dieser Befehl eignet sich besonders zum Ausfüllen von Bildschirmmasken. Zur Fehlerbehandlung während des laufenden Programms steht der Befehl ON ERROR GOTO in Verbindung mit RESUME zur Verfügung. Um Fehler während der Programmentwicklung gezielt aufspüren zu können, kann eine Trace-Funktion mit TRON eingeschaltet werden. Beim Programmlauf wird dadurch ständig die gerade bearbeitete Zeile angezeigt. TROFF schaltet diese Funktion wieder ab.
Neuartig sind eine Reihe von OPTION-Befehlen: OPTION BASE erlaubt es, den ersten Index eines Feldes wahlweise als 0 oder 1 anzusetzen. OPTION PRINT, OPTION LPRINT und OPTION INPUT leiten die Datenein- und -ausgäbe auf selbstgeschriebene Maschinensprache-Treiberprogramme um. Weitere OPTION-Befehle ermöglichen die Voreinstellung von Laufwerk- und USER-Nummer, schützen ein Programm vor Abbruch oder entscheiden über weitere, systemspezifische Eigenschaften. Wer Maschinensprache-Routinen in seine BASIC-Programme einbinden will oder muß, dem stehen mit CALL und USR zwei leistungsfähige Aufrufmöglichkeiten zur Verfügung, wobei die Übergabe von Parametern direkt an die Z80-Register vorgesehen ist.
Mallard-80-Basic ist kompromißlos für den professionellen Einsatz konzipiert. Dank der weitgehenden Kompatibilität zu MBasic sind viele BASIC-Programme ohne Umschreiben sofort verfügbar, wobei allerdings das CP/M-unübliche 3-Zoll-Diskettenformat ein gewisses Hindernis darstellt. Hohe Rechengenauigkeit, formatierte Ausgabemöglichkeiten und komfortable Fehlerbehandlung ohne Programmabbruch sind sowohl für kommerzielle wie auch für technisch-mathematische Anwendungen die besten Voraussetzungen. Das integrierte Jetsam-Datenbanksystem ermöglicht den bequemen und schnellen Zugriff auch auf große Datenmengen und ist eine völlige Neuheit bei einem BASIC-Interpreter. Damit wird ein spezielles Dateiverwaltungs-Programm unnötig. Da das Mallard-80-Basic auch in einer vollständig kompatiblen MS-DOS-Version existiert, laufen damit geschriebene Programme nicht nur unter CP/M Plus, sondern auch auf allen MS-DOS-Computern. Bei einem eventuellen späteren Umsteigen auf einen solchen Computer kann man dann seine BASIC-Programme weiterverwenden. Insgesamt gesehen also ein BASIC, das im professionellen Bereich Maßstäbe setzt und dem Namen »Mallard« damit alle Ehre macht.
Befehlssatz des Mallard-80-Basic:
ABS ELSE LOG REM STR$ ADDKEY END LOCK REN STRING$ ADDREC EOF LOF RENUM STRIP$ ALL EQV LOG RESET SWAP AND ERA LOG10 RESTORE SYSTEM AS ERASE LOWER$ RESUME TAB ASC ERL LPOS RESUME 0 TAN ATN ERR LPRINT RETURN THEN AUTO ERROR LSET RIGHT$ TO BASE EXP MAX RND TROFF BUFFERS FETCHKEY$ MEMORY ROUND TRON CALL FETCHRANK MERGE RSET TYPE CDBL FETCHREC MID$ RUN UNT CHAIN FIELD MIN SAVE UPPER$ CHR$ FILES MKD$ SEEKKEY USING CINT FIND$ MKI$ SEEKNEXT USR CLEAR FIX MKIK$ SEEKPREV VAL CLOSE FN MKS$ SEE- VARPTR COMMON FOR MKUK$ KRANK VERSION CONSOLIDATE FRE MOD SEEKREC WAIT CONT GET NAME SEEKSET WAITW COS GOSUB NEXT SGN WEND CREATE GOTO NEW SIN WHILE CSNG HEX$ NOT SPACE$ WIDTH CVD HIMEM OCT$ SPC WRITE CVI IF ON SQR WRITE # CVIK IMP ON ERROR STEP XOR CVS INKEY$ GOTO 0 STOP ZONE DATA INPUT OPTION DEC$ INPUT # OR DEF INPUT$ OSERR DEFDBL INPW OUT DEFINT INSTR OUTW B0BBH DEF SEG INT tTTT T PEEK DEFSTR DELKEY LET PRINT # DIM LINE PUT DIR LIST RANDOMIZE DISPLAY LLIST RANSPEC EDIT LOAD READ