← TOS 09 / 1991

Tips und Tricks fĂŒr Programmierer

Programmieren

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

Vertikales Scrolling

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)

Steuerzeichen

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