PROGRAM ShowIFF;

USES intuition,graphics,iff;
FROM Windows USES arpfilerequester;

{ $INCL 'graphics/gfxbase.h' }


VAR    ns           : NewScreen;
       MyScreen     : p_Screen;
       ifffile      : PTR;
       count,i      : LONG;
       colortable   : ARRAY [0..127] OF WORD;
       bmhd         : p_bitmapheader;
       Dateiname    : STRING;



PROCEDURE Ende;
BEGIN
 If MyScreen <> NIL THEN CloseScreen(MyScreen);
 If ifffile  <> NIL THEN closeiff(ifffile);
END;


PROCEDURE Fail(text:STRING);
VAR  Fehler : LONG;
BEGIN
Fehler:=IffError;
WRITELN("Ein Fehler ist aufgetreten: ",text);
IF Fehler < 0 THEN
 WRITELN("IffERROR vom falschen Task aufgerufen !")
ELSE
 CASE Fehler OF
  16..20:
        BEGIN
         WRITE("IFFERROR: ",Fehler,"   ");
         WRITELN("(",ifferrortext[Fehler],")");
        END;
  24..28:
        BEGIN
         WRITE("IFFERROR: ",Fehler,"   ");
         WRITELN("(",ifferrortext[Fehler],")");
        END;
  OTHERWISE
   WRITELN("Unbekannter IffError: ",Fehler);
 END; { Case }
 IF FROMWB THEN DELAY(100);
 HALT(10);
END; { Fail }


BEGIN { Hauptprogramm }

IF FROMWB THEN
 BEGIN
  ASSIGN(INPUT,"CON:0/0/450/60/ShowIFF : ");
  RESET(INPUT);
  OUTPUT:=INPUT;
  Dateiname:=FileReq(NIL,'IFF Datei wählen');
 END;

IF PARAMETERLEN > 0 THEN
BEGIN
 Dateiname:=PARAMETERSTR;
  IF Dateiname[PARAMETERLEN]=CHR(10) THEN Dateiname[PARAMETERLEN]:=CHR(0)
  ELSE
   Dateiname[PARAMETERLEN+1]:=CHR(0);
  END
  ELSE
BEGIN
 WRITELN(CHR($9b),"31;42m","ShowIFF",CHR($9b),"31;40m");
END;


ns:=NewScreen(0,0,0,0,0,0,0,0,
              CustomScreen+ScreenQuiet,
              NIL,"ShowIFF",NIL,NIL);

MyScreen:=NIL;
ifffile:=NIL;
AddexitServer(Ende);
ifffile:=OpenIff(Dateiname);
IF ifffile = NIL THEN Fail("");
bmhd:=GetBmhd(ifffile);
If bmhd = NIL THEN fail("");

ns.Width     :=bmhd^.w;
ns.height    :=bmhd^.h;
ns.depth     :=bmhd^.nPlanes;
ns.ViewModes :=GetviewModes(ifffile);

MyScreen:=OpenScreen(^ns);
count:=GetColorTab(ifffile,^colortable);
IF count > 32 THEN count:=32;
LoadRGB4(^MyScreen^.ViewPort,^colortable,count);

{IF DecodePic(ifffile,^MyScreen^.BitMap)=FALSE THEN
   Fail("Kann BildDatei nicht Decodieren !");
}
REPEAT
 DELAY(5);
UNTIL((mem[$bfe001] and 64 ) = 0);

HALT(0);

END.










