home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_disks
/
300-399
/
ff301.lzh
/
IffLib
/
ShowIFF.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-01-10
|
3KB
|
112 lines
/*
ShowIFF.c - an easy IFF file view program by Christian A. Weber
Requires the iff.library (in the LIBS: dircetory or in a ROM)
This program may be freely used and modified!
I compiled it with Aztec C V3.6, it should also work with Lattice.
*/
#include <exec/types.h>
#include <graphics/gfxbase.h>
#include <intuition/intuition.h>
#include <libraries/iff.h>
struct Library *IntuitionBase,*IFFBase=NULL, *OpenLibrary();
struct GfxBase *GfxBase;
struct NewScreen ns =
{
0,0,0,0,0,0,0, NULL, CUSTOMSCREEN|SCREENQUIET, NULL,
(STRPTR)"ShowIFF by Christian A. Weber", NULL, NULL
};
struct Screen *myscreen = NULL, *OpenScreen();
APTR ifffile = NULL;
void SetOverscan(screen,x,y,modes)
register struct Screen *screen;
register WORD x,y,modes;
{
register WORD rows;
rows = GfxBase->NormalDisplayRows; if(rows>300) rows>>=1;
if(modes & HIRES) x -= 320; x -= 320;
if(modes & LACE) y -= rows; y -= rows;
x >>=1; if(x>32) x=32; if(x<0) x=0;
y >>=1; if(y>36) y=36; if(y<0) y=0;
screen->ViewPort.DxOffset -= x;
screen->ViewPort.DyOffset -= y;
RemakeDisplay();
}
main(argc,argv)
int argc;
char **argv;
{
long count,i;
UWORD colortable[128];
struct BitMapHeader *bmhd;
if((argc != 2) || !strcmp(argv[1],"?")) {
printf("Format: %s filename\n",argv[0]);
exit(20);
}
GfxBase = (struct GfxBase *)OpenLibrary("graphics.library",0L);
IntuitionBase = OpenLibrary("intuition.library",0L);
if(!(IFFBase = OpenLibrary(IFFNAME,IFFVERSION))) {
printf("Copy the iff.library to your LIBS: directory!\n");
exit(10);
}
printf("Loading file %s ... ",argv[1]);
if(!(ifffile=OpenIFF(argv[1]))) Fail("Error opening file");
if(!(bmhd=GetBMHD(ifffile))) Fail("BitMapHeader not found");
ns.Width = bmhd->w;
ns.Height = bmhd->h;
ns.Depth = bmhd->nPlanes;
ns.ViewModes = GetViewModes(ifffile);
if(!(myscreen = OpenScreen(&ns))) Fail("Can't open screen!");
SetOverscan(myscreen,ns.Width,ns.Height,ns.ViewModes);
count = GetColorTab(ifffile,colortable);
if(count>32L) count = 32L; /* Some HAM pictures have 64 colors ?! */
LoadRGB4(&(myscreen->ViewPort),colortable,count);
if(!DecodePic(ifffile,&myscreen->BitMap)) Fail("Can't decode picture");
for(i=0; i<100; ++i)
{
if(!((*((UBYTE*)0xbfe001))&64)) break; /* I know it's a hack */
Delay(5L);
}
Fail("done"); /* Close the whole stuff */
}
Fail(text)
char *text;
{
if(ifffile) CloseIFF(ifffile);
if(myscreen) CloseScreen(myscreen);
printf("%s\n",text);
printf("IffError = %ld\n",IffError());
if(IFFBase) CloseLibrary(IFFBase); /* MUST ALWAYS BE CLOSED !! */
CloseLibrary(IntuitionBase);
CloseLibrary(GfxBase);
exit(0);
}