
/*****************************************************************************/
/****  File sorgente display.c                                	          ****/
/****  di Alberto Geneletti	version 1.0	giugno 1993               ****/
/****                                                                     ****/
/****  Routines di visualizzazione di un oggetto della classe             ****/
/****  PseudoColorImageConstructor su hardware Amiga.                     ****/
/*****************************************************************************/

#include <exec/types.h>
#include <intuition/intuition.h>
#include <exec/libraries.h>
#include <stdio.h>
#include <proto/all.h>

#include "gif.h"

struct NewScreen NewScr =
{ 0, 0, 0, 0, 0, 1, 0, 0, CUSTOMSCREEN | SCREENQUIET, NULL, NULL, NULL, NULL};

struct Screen *AmigaScr;
struct RastPort *Rp;
struct ViewPort *Vp;
struct Library *GfxBase, *IntuitionBase;
int AmigaShow(GIFImage *GIFIm);

int AmigaShow(GIFImage *GIFIm)
{
	SHORT C, Row, Col;
	UBYTE *Ptr;
	int c;

	if(!(GfxBase = OpenLibrary("graphics.library",0L)))
		return(LIBRARY_ERROR);

	if(!(IntuitionBase = OpenLibrary("intuition.library",0L))) {
		CloseLibrary(GfxBase);
		return(LIBRARY_ERROR);
	}

	NewScr.Width 	= GIFIm->Width;
	NewScr.Height 	= GIFIm->Height;
	NewScr.Depth 	= GIFIm->Depth;
	
	if(GIFIm->Width > 320)
		NewScr.ViewModes |= 0x8000;

	if(GIFIm->Height > 256)
		NewScr.ViewModes |= 0x0004;	

	if(!(AmigaScr = OpenScreen(&NewScr))) {
		CloseLibrary(GfxBase);
		CloseLibrary(IntuitionBase);
		return(UNSUPPORTED_DEPTH);	
	}
	
	Rp = &AmigaScr->RastPort;
	Vp = &AmigaScr->ViewPort; 

	Ptr = (UBYTE *)GIFIm->ColorMap;
	for(C = 0; C < GIFIm->NColors; C++) 
		SetRGB4(Vp,C,((*Ptr++) >> 4),
			      ((*Ptr++) >> 4),
			      ((*Ptr++) >> 4)); 
	
	Ptr = (UBYTE *)GIFIm->BitMap;
	for(Row = 0; Row < GIFIm->Height; Row++)
		for(Col = 0; Col <GIFIm->Width; Col ++){
			SetAPen(Rp,*Ptr++);
			WritePixel(Rp,Col,Row);
	}

	c = fgetc(stdin);

	CloseScreen(AmigaScr);
	CloseLibrary(GfxBase);
	CloseLibrary(IntuitionBase);
	return(OK);
}



