Wie speichere ich einen String, der auch Dateiende-Zeichen ($A) enthält?
Öffnen Sie zunächst eine Random-Access-Datei ohne feste Satzlänge (OPEN "U"). Auf diese Datei greifen Sie mit GET (extended) und PUT (extended) zu. Den Dateizeiger positionieren Sie mit SEEK. Mit folgenden Prozeduren schreiben Sie einen String beliebigen Inhalts in diese Datei oder lesen ihn aus ihr.
(Günther Heidel/ah)
DEF PROC SCHREIBEN (A$)
OPEN "U", 1,"BEISPIEL.XXX"
PUT 1, MKI$(LEN (A$) ) ! erst Länge schreiben
PUT 1, A$
CLOSE 1
RETURN
DEF PROC LESEN (R Lese$)
LOCAL Laenge
OPEN "U", 1, "BEISPIEL.XXX"
SEEK 1, 0
GET 1, Lese$, 2
Laenge = CVI (Lese$)
GET 1, Lese$, Laenge
CLOSE 1
RETURN
Wie kann ich ein Degas-Bild von Diskette laden?
Eine Degas-Bild-Datei besteht aus 2 Byte Vorspann (Kennzahl für die Bildschirmauflösung), 32 Byte Farbpalette und genau 32000 Byte für das eigentliche Bild. Die eventuell vorhandenen Informationen über Farbanimation wollen wir nicht berücksichtigen. Sie laden Bild und Farbpalette am einfachsten direkt mit dem Befehl OPEN "U".
OPEN "U", 1, "PICTURE.PI3"
SEEK 1, 2 ! überspringen des Vorspanns
GET 1, $FF8240, $ 20 ! schreibt die Farbpalette
! direkt in die Register des Videoshifters
SEEK 1, 34 ! ab hier stehen die Bilddaten
XBIOS (Screen_Adr, 2?) ! holt die physikalische Bildschirmadresse
GET 1, Screen_Adr, 32000 ! und schreibt die Daten hinein
CLOSE 1
Selbstverständlich muß man das Bild nicht gleich in den Bildschirm schreiben, sondern kann es zum Beispiel in einen MEMORY-Block laden. (Günther Heidel/ah)
Wie kann ich eine Musikdatei, die im XBIOS32-Code gespeichert ist, in selbstgeschriebene Basic-Programme einbinden?
Dazu laden Sie die Musik-Datei in einen MEMORY-Block und übergeben dessen Adresse sowie die Länge-1 der Musik-Datei an die XBios-Funktion »Dosound«.
OPEN "U", 1, "A:\BEISPIEL.MUS"
L = LOF(1) ! Länge der Datei ermitteln
M = MEMORY(L) ! Speicherblock reservieren
GET 1, M, L ! Musikdaten laden
CLOSE 1
XBIOS 32, L, M ! Musik abspielen
REPEAT
XBIOS R, 32, L, -1
UNTIL R = 0 ! Warten
FRE M ! Speicherblock wieder freigeben
Der Quelltext auf der TOS-Diskette sucht zunächst das aktuelle Verzeichnis nach allen Bildern (Dateien mit der Endung *.PIC) ab und läßt diese dann nacheinander von unten in den Bildschirm scrollen. Der kleine »Ruck«, der nach je zwei Bildern auftritt, läßt sich mit etwas Aufwand beheben: Sie laden zunächst alle Bilder in ein Stringfeld und geben sie nacheinander auf dem Bildschirm aus. Dies erfordert allerdings viel Speicher. Apropos umschreiben: Das Programm arbeitet nur mit dem Screenformat (32000 Byte) und bedarf einer Anpassung für eventuell vorhandene Grafikkarten.
(Günther Heidel/ah)
Jeder Computer verwendet bestimmte Steuerzeichen, um etwa Ausgaben auf dem Bildschirm zu koordinieren. Wenn Sie in einem Editor einen Text schreiben, bewegen Sie zum Beispiel mit der Hochpfeiltaste den Cursor (Schreibmarke) eine Zeile nach oben. Wenn der Editor feststellt, daß die Hochpfeiltaste gedrückt wurde, setzt er sich nicht selbst den Cursor eine Zeile höher, sondern läßt diese Arbeit vom Betriebssystem erledigen, genauer vom VT52-Emulator. Dieser Teil des Betriebssystems emuliert die Funktion des VT52-Terminals der Firma Digital Equipment. Der Emulator erledigt aber noch weitere Aufgaben: Eine Aufschlüsselung aller Funktionen finden Sie in Tabelle 2.
Neben den Steuerzeichen des VT52-Emulators gibt es noch Control-Sequenzen. Bei diesen handelt es sich um Steuerzeichen, die sich durch Kombination der Control-Taste und einer Buchstaben-Taste aufrufen lassen (Tabelle 1). Einige dieser Funktionen entsprechen einer speziellen Taste. So entspricht Control l der Taste TAB und Control M der Taste Return. Ein Anwendungsbeispiel für die Funktionen des VT52-Emulators finden Sie als Omikron-Quelltext auf der TOS-Diskette. (Günther Heidel/ah)
Kombination | ASCII-Code | Wirkung |
---|---|---|
Control G | 7 | Gibt einen Ton aus |
Control h | 8 | Cursor eine Spalte nach links |
Control l | 9 | Bewegt den Cursor zur nächsten Tabulatorstelle |
Control J | 10 | Cursor eine Zeile nach unten |
Control M | 13 | Bewegt den Cursor an den linken Rand |
Tabelle 1. Die Control-Steuercodes
Escape-Code | Wirkung |
---|---|
ESC A | Bewegt den Cursor eine Zeile nach oben |
ESC B | Bewegt den Cursor eine Zeile nach unten |
ESC C | Bewegt den Cursor eine Spalte nach rechts |
ESC D | Bewegt den Cursor eine Spalte nach links |
ESC E | Löscht den Bildschirm und setzt Cursor in die linke obere Ecke |
ESC H | Setzt den Cursor in die linke obere Ecke |
ESC I | Bewegt den Cursor um eine Zeile nach oben und schiebt den Bildschirm eine Zeile nach unten, wenn der Cursor bereits in der obersten Zeile stand |
ESC J | Löscht den gesamten Schirm ab der aktuellen Cursorposition |
ESC K | Löscht ab der aktuellen Cursorposition bis zum Zeilenende |
ESC L | Fügt an der Cursorposition eine Zeile ein und schiebt Rest des Bildschirms eine Zeile nach unten |
ESC M | Löscht an der Cursorposition eine Zeile heraus und schiebt den Rest des Bildschirms eine Zeile nach oben |
ESC Y, y, x | Setzt den Cursor an Spalte y und Zeile x. x und y enthalten die Spalten- und Zeilennummer + 32. |
ESC b, n | Setzt die Schriftfarbe. n ist die Farbnummer, |
ESC c, n | Setzt die Hintergrundfarbe. n ist die Farbnummer. |
ESC d | Löscht den Bildschirm bis zur Cursorposition |
ESC e | Schaltet den Cursor ein |
ESC f | Schaltet den Cursor aus |
ESC j | Speichert die aktuelle Cursorposition in einer internen Variablen |
ESC k | Setzt den Cursor an die mit ESC j gespeicherte Position und löscht die interne Variable |
ESC l | Löscht die aktuelle Zeile und setzt den Cursor in die erste Spalte |
ESC o | Löscht die aktuelle Zeile bis zum Cursor |
ESC p | Inversdarstellung ein |
ESC q | Inversdarstellung aus |
ESC v | Automatischer Überlauf ein. Der Cursor springt automatisch in die nächste Zeile, wenn er am rechten Rand angekommen ist. |
ESC w | Automatischer Überlauf aus. Der Cursor bleibt am rechten Rand stehen. |
Tabelle 2: Die Funktionen des VT-52-Emulators