home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
dtx9202
/
3dgraf
/
lbm
/
lbm.def
next >
Wrap
Text File
|
1992-01-10
|
13KB
|
261 lines
(* ------------------------------------------------------ *)
(* LBM.DEF *)
(* Definitionsmodul für LBM *)
(* Das Modul lbm stellt Routinen zum Einlesen von *)
(* IFF-Bildern und Farbpaletten in den VGA-Modi 18 *)
(* und 19 zur Verfügung. *)
(* *)
(* (C) 1992 Dietmar Ring & DMV-Verlag *)
(* Compiler: TopSpeed Modula *)
(* ------------------------------------------------------ *)
DEFINITION MODULE lbm;
FROM FIO IMPORT File;
CONST
MAX18X = 80; (* Bildschirmbreite Mode 18 *)
MAX18Y = 480; (* Bildschirmhöhe Mode 18 *)
MAX19X = 320; (* Bildschirmbreite Mode 19 *)
MAX19Y = 200; (* Bildschirmhöhe Mode 19 *)
(* Header der IFF Datei *)
TYPE
header_typ = RECORD
lang : LONGCARD; (* Länge des Blocks *)
breit : CARDINAL; (* Breite des Bildes *)
hoch : CARDINAL; (* Höhe des Bildes *)
xpos : INTEGER; (* Position der linken *)
ypos : INTEGER; (* oberen Ecke *)
tiefe : SHORTCARD; (* Anzahl Bitplanes *)
maske : SHORTCARD; (* Art der Maske *)
pack : SHORTCARD; (* 01 = Bild gepackt *)
leer : SHORTCARD; (* Nicht verwendet *)
transp : CARDINAL; (* Transparente Farbe *)
xasp : SHORTCARD; (* Verhältnis x zu y *)
yasp : SHORTCARD; (* eines Pixels *)
scbreit : INTEGER; (* Größe des realen *)
schoch : INTEGER; (* Bildschirms *)
(* Die nächsten Daten stehen eigentlich nicht im *)
(* Header *)
size : LONGCARD; (* Dateigröße *)
graphik : LONGCARD; (* Größe des Graphikblocks*)
typ : ARRAY[1..4] OF CHAR; (* Dateiart *)
END;
(* Aufbau des Grafikbildschirms im Mode 18 *)
screen16_typ = ARRAY [1..MAX18Y], [1..MAX18X] OF BYTE;
(* Aufbau des Grafikbildschirms im Mode 19 *)
screen256_typ = ARRAY [1..MAX19Y],[1..MAX19X] OF BYTE;
(* Farbwerte des Bildes *)
pal256_typ = ARRAY [1..256] OF RECORD
rt,gr,bl :BYTE;
END;
(* Zeiger auf eine Farbpalette *)
pal_pointer_typ = POINTER TO pal256_typ;
(* Zeiger auf einen Zwischenspeicher *)
puf_pointer_typ = POINTER TO BYTE;
(* Virtueller Bildschirm Mode 18 *)
virt16_typ = ARRAY[1..4] OF POINTER TO screen16_typ;
(* Zeiger auf einen virtuellen Bildschirm Mode 19 *)
virt16_pointer_typ = POINTER TO virt16_typ;
(* Zeiger auf einen virtuellen Bildschirm Mode 19 *)
virt256_pointer_typ = POINTER TO screen256_typ;
VAR
screen1[0A000H:0000] : screen16_typ;
(* Array auf der Startadresse des *)
(* Bildschirmspeichers Mode 18 *)
screen2[0A000H:0000] : screen256_typ;
(* Array auf der Startadresse des *)
(* Bildschirmspeichers Mode 19 *)
speedh : CARDINAL; (* Default 10 *)
speedv : CARDINAL; (* Default 0 *)
(* Geschwindigkeitsanpassung für einen Teil *)
(* Teil der Überblendroutinen (ToScreen). *)
PROCEDURE Off(); (* Off und On schalten die *)
PROCEDURE On(); (* Bildschirmausgabe ein bzw aus *)
PROCEDURE Wait(); (* wartet auf den vertikalen *)
(* Strahlrücklauf *)
PROCEDURE IstLbm(datei : File): BOOLEAN;
(* IstLbm gibt TRUE zurück, wenn am Anfang der Datei die *)
(* Zeichenfolge FORM steht. datei = File-Handle der IFF- *)
(* Datei (z.B. von FIO.Open) *)
PROCEDURE ReadHeader(datei: File): header_typ;
(* ReadHeader liest den Header (BMHD) Block, die Größe *)
(* der gesammten Datei, die Größe des BODY Blocks und *)
(* gibt einen Record vom Typ header_typ zurück. datei = *)
(* File-Handle der IFF-Datei (z.B. von FIO.Open). *)
(* Benutzt: SearchBody, swap-Utilities *)
PROCEDURE ReadPalette(datei: File; pal: pal_pointer_typ;
anzahl: CARDINAL): BOOLEAN;
(* ReadPalette liest die Farbdaten (Palette) einer IFF- *)
(* Datei in einen Puffer. *)
(* datei = File-Handle der IFF-Datei (z.B. von FIO.Open)*)
(* pal = Zeiger auf eine Puffer oder Variable vom *)
(* Typ pal_pointer_typ *)
(* anzahl = Anzahl der zu lesenden Farben, 16 oder 256 *)
(* Return = True : Palette konnte gelesen werden *)
PROCEDURE ReadPuffer (datei : File;lang : LONGCARD)
:puf_pointer_typ;
(* ReadPuffer liest die Grafikdaten (BODY) einer IFF- *)
(* Datei in einen Puffer und gibt einen Zeiger auf den *)
(* Puffer vom Typ puf_pointer_typ zurück. *)
(* datei = File-Handle der IFF-Datei (z.B. von FIO.Open)*)
(* lang = Länge des BODY, zB aus Header.graphik *)
(* Bei einem Fehler wird NIL zurückgegeben. *)
PROCEDURE ReadLbm256(datei : File; header: header_typ;
puffer: BOOLEAN;
ziel : virt256_pointer_typ): CARDINAL;
(* Liest die Grafikdaten einer IFF-Datei in das Video- *)
(* RAM (VGA Mode 19, 256 Farben, 320X200 Punkte) *)
(* datei = File-Handle der IFF-Datei (z.B. von FIO.Open)*)
(* header = Header der IFF-Datei (Return von ReadHeader) *)
(* puffer = TRUE : BODY wird gepuffert (Schneller !!) *)
(* ziel <> NIL : Zeiger, der mit MakeVirt256 erzeugt *)
(* wird. Das Bild wird in einem virtuel- *)
(* len Bildschirm abgelegt. *)
(* ziel = NIL : Bild direkt in das VideoRAM schreiben *)
(* Return = 0 : Das Bild wurde gelesen *)
(* 1 : BODY nicht gefunden *)
(* 2 : Bild enthält eine Maske *)
(* Benutzt : SearchBody, ReadPuffer *)
PROCEDURE ReadLbmAlt256(datei : File; header: header_typ;
puffer: BOOLEAN;
ziel : virt256_pointer_typ):
CARDINAL;
(* ReadLbmAlt256 liest Grafikdaten einer IFF Datei, die *)
(* im älteren ILBM-Datei vorliegen - z.B. von ICONVERT - *)
(* in den Bildspeicher (VGA MODE 19) *)
(* datei = File-Handle der IFF-Datei (z.B. von FIO.Open)*)
(* header = Header der IFF Datei (Return von ReadHeader) *)
(* puffer = TRUE : BODY wird gepuffert ( Schneller !! ) *)
(* ziel <> NIL : Zeiger der mit MakeVirt256 erzeugt *)
(* wird. Das Bild wird in einem *)
(* virtuellen Bildschirm abgelegt. *)
(* ziel = NIL : Bild direkt in den Grafiksp. schreiben*)
(* Return = 0 : Das Bild wurde gelesen *)
(* 1 : BODY nicht gefunden *)
(* 2 : Bild enthält eine Maske *)
(* Benutzt : SearchBody, ReadPuffer *)
PROCEDURE ReadLbm16(datei : File;
header: header_typ;
puffer: BOOLEAN;
ziel : virt16_pointer_typ): CARDINAL;
(* ReadLbm16 liest die Grafikdaten einer IFF-Datei in den*)
(* Bildspeicher (VGA Mode 18, 16 Farben, 640X480 Punkte)*)
(* datei = File-Handle der IFF-Datei (z.B. von FIO.Open)*)
(* header = Header der IFF-Datei (Return von ReadHeader) *)
(* puffer = TRUE : BODY wird gepuffert ( Schneller !! ) *)
(* ziel <> NIL : Zeiger der mit MakeVirt16 erzeugt wird*)
(* Das Bild wird in einem virtuellen *)
(* Bildschirm abgelegt. *)
(* ziel = NIL : Bild direkt ins VideoRAM schreiben *)
(* Return = 0 : Das Bild wurde gelesen *)
(* 1 : BODY nicht gefunden *)
(* 2 : Bild enthält eine Maske *)
(* Benutzt : SearchBody, ReadPuffer *)
PROCEDURE MakeVirt16():virt16_typ;
(* MakeVirt erzeugt einen virtuellen Bildschirm für *)
(* Modus 18. Gibt einen Record zurück, der den Zeiger *)
(* auf die einzelnen Planes des virtuellen Bildschirms *)
(* enthält. Zuwenig Speicher: Die Zeiger enthalten NIL. *)
PROCEDURE MakeVirt256():virt256_pointer_typ;
(* MakeVirt256 erzeugt einen virtuellen Bildschirm für *)
(* Modus 19. Gibt einen Zeiger auf den virtuellen *)
(* Bildschirm zurück. *)
(* Zuwenig Speicher: Zeiger enthält NIL *)
PROCEDURE RemoveVirt16(virt16: virt16_typ);
PROCEDURE RemoveVirt256(virt256: virt256_pointer_typ);
(* RemoveVirt16 und RemoveVirt256 entfernen die *)
(* virtuellen Bildschirme wieder aus dem Speicher. *)
PROCEDURE ToScreen16(quelle: virt16_typ; mode: CARDINAL);
PROCEDURE ToScreen256(quelle: virt256_pointer_typ;
mode: CARDINAL);
(* ToScreen16 kopiert einen virtuellen Mode18-Bild- *)
(* schirmspeicher in den Grafikspeicher der VGA-Karte. *)
(* ToScreen256 kopiert einen Mode19 Bildspeicher *)
(* quelle : Ein Array von Zeigern das von MakeVirt16 *)
(* erzeugt wird. *)
(* mode : (1..4) bestimmt auf welche Art das Bild in *)
(* den Grafikspeicher kopiert wird. *)
(* 1 : direkte Kopie *)
(* 2 : Horizontal Mitte nach Außen *)
(* 3 : Horizontal Außen zur Mitte *)
(* 4 : Vertikal Mitte nach Außen *)
(* 5 : Vertikal Außen zur Mitte *)
(* 6 : Anregung für weitere Möglichkeiten *)
PROCEDURE SetColors (datei : File; anzahl : CARDINAL)
: BOOLEAN;
(* SetColor setzt die DAC-Register der VGA-Karte *)
(* datei = File-Handle der IFF-Datei (z.B. von FIO.Open)*)
(* anzahl = Anzahl der zu setzenden Farben *)
(* Benutzt: ReadPalette *)
PROCEDURE SetColorsPap(pal: pal_pointer_typ; anz: CARDINAL);
(* SetColorPap setzt die DAC-Register mit einer bereits *)
(* geladenen Farbpalette *)
(* anzahl = Anzahl der zu setzenden Farben *)
(* pal = Zeiger auf eine Farbpalette *)
PROCEDURE LeseBild(name : ARRAY OF CHAR;
puffer: BOOLEAN;
auto : BOOLEAN;
farb : BOOLEAN;
bild : BOOLEAN;
ziel : BOOLEAN;
mode : CARDINAL) : CARDINAL;
(* LeseBild liest die Grafikdaten einer IFF-Datei ein. *)
(* Das Bild wird direkt in den Grafikspeicher geschrieben*)
(* Der richtige Grafikmodus (18 oder 19) wird gesetzt *)
(* name : Name der IFF-Datei *)
(* puffer : FALSE = BODY-Block wird direkt gelesen *)
(* TRUE = Der BODY-Block wird zuerst in einen*)
(* Puffer gelesen (ist schneller!!) *)
(* auto : TRUE = Grafikmodus automatisch setzten *)
(* FALSE = Grafikmodus nicht ändern *)
(* farb : TRUE = Die Palette wird gesetzt *)
(* FALSE = Die Palette wird nicht gesetzt *)
(* bild : TRUE = Das Bild wird gelesen *)
(* FALSE = Das Bild wird nicht gelesen, *)
(* z.B. um nur die Palette eines *)
(* Bildes zu lesen. *)
(* ziel : TRUE = Virtuellen Bildspeicher benutzen *)
(* FALSE = Direkt in das VideoRAM schreiben *)
(* mode : (1..4) Bestimmt bei der Benutzung eines *)
(* virtuellen Bildschirms die *)
(* Übertragungsart (siehe ToScreen16) *)
(* Return : 0 = Bild wurde gelesen. *)
(* 1 = Keine IFF Datei. *)
(* 2 = Header nicht gefunden *)
(* 3 = Graphik Modus nicht gesetzt *)
(* 4 = Graphikdaten wurden nicht gelesen *)
(* Benutzt : ReadHeader,ReadLbm16,ReadLbm256,SetColors *)
END lbm.
(* ------------------------------------------------------ *)
(* Ende von LBM.DEF *)
(* ------------------------------------------------------ *)