/* 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 #include #include #include 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); }