home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
dtx9202
/
3dgraf
/
lbm
/
showlbm.mod
< prev
next >
Wrap
Text File
|
1992-01-10
|
7KB
|
253 lines
(* ------------------------------------------------------ *)
(* SHOWLBM.MOD *)
(* Anzeigen von *.LBM-Bildern *)
(* *)
(* (C) 1992 Dietmar Ring & DMV-Verlag *)
(* Compiler: TopSpeed Modula *)
(* ------------------------------------------------------ *)
MODULE showlbm;
(* Kommandozeilen-Parameter: *)
(* Erster Parameter ist der vollständige Name des Bildes *)
(* Die folgenden Parameter: *)
(*╔═════════════════════════════════╤════════════════════╗*)
(*║Bedeutung │ Parameter ║*)
(*╠═════════════════════════════════╪════════════════════╣*)
(*║ Nicht puffern ? │ /P ║*)
(*║ Palette nicht setzen ? │ /C ║*)
(*║ Header zeigen ? │ /H ║*)
(*║ Virtueller Bildschirm ? │ /V ║*)
(*║ Weitere Möglichkeiten bei virtuellem Bildschirm: ║*)
(*║ Horizontale Blende1 │ /2 ║*)
(*║ Horizontale Blende2 │ /3 ║*)
(*║ Vertikale Blende1 │ /4 ║*)
(*║ Vertikale Blende2 │ /5 ║*)
(*║ │ und /6 ║*)
(*╚═════════════════════════════════╧════════════════════╝*)
FROM Lib IMPORT ParamCount,ParamStr;
FROM IO IMPORT WrLn,WrStr,WrCard,WrInt,WrShtCard,
WrLngCard,RdKey,KeyPressed;
FROM FIO IMPORT Open,Close,
File;
FROM lbm IMPORT LeseBild,ReadHeader,
header_typ,speedh,speedv;
FROM Graph IMPORT TextMode;
TYPE string12 = ARRAY[1..12] OF CHAR;
mode_typ = RECORD
(* Name des Bildes *)
name : ARRAY[1..12] OF CHAR;
(* puffern ? *)
tp : BOOLEAN;
(* Farben setzen ? *)
co : BOOLEAN;
(* header anzeigen ? *)
hd : BOOLEAN;
(* Virtueller Bildschirm *)
vb : BOOLEAN;
(* Überblendart bei *)
(* Virtuellem Bildschirm *)
md : CARDINAL;
END;
(********************************************)
(* Wartet auf die Betätigung der *)
(* Leertaste, und bricht bei *)
(* einer Eingabe von X oder x *)
(* das Programm ab *)
PROCEDURE Key();
BEGIN
LOOP
CASE RdKey() OF
' ' : EXIT;|
'X','x' : HALT;
END;
END;
REPEAT
UNTIL NOT KeyPressed();
END Key;
(********************************************)
(* Printheader gibt die Daten des Bildes im *)
(* Textmodus auf dem Bildschirm aus *)
PROCEDURE PrintHeader(name : ARRAY OF CHAR);
VAR datei : File;
header: header_typ;
BEGIN
TextMode();
datei := Open(name);
header := ReadHeader(datei);
Close(datei);
WITH header DO
WrStr('Typ der Datei : ');
WrStr(typ);
WrLn;
WrStr('Länge des Blocks : ');
WrLngCard(lang,-4);
WrLn;
WrStr('Breite des Bildes : ');
WrCard (breit,-2);
WrLn;
WrStr('Höhe des Bildes : ');
WrCard (hoch,-2);
WrLn;
WrStr('Referenzpunkt x : ');
WrInt (xpos,-2);
WrLn;
WrStr('Referenzpunkt y : ');
WrInt (ypos,-2);
WrLn;
WrStr('Anzahl der Bitplanes : ');
WrShtCard (tiefe,-1);
CASE tiefe OF
4 : WrStr(' : ');
WrStr('16 Farben');|
8 : WrStr(' : ');
WrStr('256 Farben');
END;
WrLn;
CASE maske OF
0:WrStr('Keine Maske');
|1:WrStr('Maske vorhanden');
|2:WrStr('Durchsichtige Farbe steht in Transparent Color');
|3:WrStr('Lasso ?');
END;
WrLn;
CASE pack OF
0:WrStr('Nicht gepackt');
|1:WrStr('Gepackt');
END;
WrLn;
WrStr('Durchsichtige Farbe : ');
WrCard (transp,-2);
WrLn;
WrStr('Seitenverhältnis : ');
WrShtCard (xasp,-1);
WrLn;
WrStr('Seitenverhältnis : ');
WrShtCard (yasp,-1);
WrLn;
WrStr('Bildschirmbreite : ');
WrInt (scbreit,-1);
WrLn;
WrStr('Bildschirmhöhe : ');
WrInt (schoch,-1);
WrLn;
WrStr('Dateilänge : ');
WrLngCard(size,4);
WrLn;
WrStr('Länge der Graphikdaten : ');
WrLngCard(graphik,-4);
WrLn;
WrStr('Bitte Leertaste drücken ');
WrLn;
WrStr(' X bricht das Programm ab');
END;
Key();
END PrintHeader;
(********************************************)
(* Wertet die Kommandozeile aus *)
PROCEDURE GetComLine():mode_typ;
CONST MAX = 6;
TYPE string2 = ARRAY[1..2] OF CHAR;
VAR cline : string2;
mode : mode_typ;
anzahl : CARDINAL;
count : CARDINAL;
BEGIN
mode.tp := TRUE;
mode.co := TRUE;
mode.hd := FALSE;
mode.vb := FALSE;
mode.md := 1;
anzahl := ParamCount();
IF anzahl = 0 THEN
WrLn;
WrStr('1. Parameter : Name des Bildes + Extension');
WrLn;
WrStr('Weitere optionale Parameter :');
WrLn;
WrStr('/P : Daten beim lesen NICHT Puffern (langsam!) ');
WrLn;
WrStr('/C : Palette NICHT setzen ');
WrLn;
WrStr('/H : Header der Datei vor dem Laden anzeigen ');
WrLn;
WrStr('/V : Virtuellen Bildschirm benutzen ');
WrLn;
WrStr('Weiterer Parameter wenn /V gesetzt ist: /n ');
WrLn;
WrStr('n=1 : Bild direkt kopieren (Defaultwert) ');
WrLn;
WrStr('n=2 : Horizontale Blende : Mitte nach Außen ');
WrLn;
WrStr('n=3 : Horizontale Blende : Außen nach Mitte ');
WrLn;
WrStr('n=4 : Vertikale Blende Mitte nach Außen ');
WrLn;
WrStr('n=5 : Vertikale Blende Außen nach Mitte ');
WrLn;
WrStr('n=6 : Effekte die als Anregung zur');
WrLn;
WrStr('Weiterentwicklung gedacht sind');
HALT;
END;
IF anzahl > MAX THEN
anzahl := MAX;
END;
ParamStr(mode.name,1);
FOR count := 2 TO anzahl DO
ParamStr(cline,count);
CASE cline[2] OF
'P','p' : mode.tp := FALSE;|
'C','c' : mode.co := FALSE;|
'V','v' : mode.vb := TRUE;|
'H','h' : mode.hd := TRUE;|
'2' : mode.md := 2;|
'3' : mode.md := 3;|
'4' : mode.md := 4;|
'5' : mode.md := 5;|
'6' : mode.md := 6;
END;
END;
RETURN(mode);
END GetComLine;
(********************************************)
(* Zeigt das Bild *)
PROCEDURE Show();
VAR mode : mode_typ;
BEGIN
mode := GetComLine();
IF mode.hd THEN;
PrintHeader(mode.name);
END;
IF LeseBild(mode.name,mode.tp,TRUE,mode.co,TRUE,
mode.vb,mode.md) <> 0 THEN
TextMode();
WrStr('Bild konnte nicht gelesen werden');
HALT();
END;
Key();
END Show;
(********************************************)
BEGIN
speedh := 12;
speedv := 2;
Show();
TextMode();
END showlbm.