Tips und Tricks für Programmierer

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



Aus: TOS 09 / 1991, Seite 97

Links

Copyright-Bestimmungen: siehe Über diese Seite