;/*
sc RESOPT IGNORE=73 DATA=NEAR NMINC UCHAR CONSTLIB STREQ STRMERGE NOSTKCHK NOSTDIO OPTIMIZE OPTSIZE Curves.c
slink from LIB:c.o Curves.o to //Clients/Curves LIB LIB:sc.lib LIB:amiga.lib /lib/client.lib SC SD NOICONS STRIPDEBUG
delete Curves.o
quit

 Curves 1.0  (Client for BServer)

 Copyright © 1995 by Stefano Reksten of 3AM - The Three Amigos!!!
 All rights reserved.
*/

#include <exec/types.h>
#include <intuition/intuition.h>

#include <proto/exec.h>
#include <proto/intuition.h>
#include <proto/graphics.h>
#include <clib/alib_protos.h>

#include "/include/client.h"

UWORD __chip sq1_imgdata[512] = {
 0x0, 0xFF, 0xFE00, 0x0,
 0x0, 0xFF, 0xFE00, 0x0,
 0x0, 0xFF, 0xFE00, 0x0,
 0x0, 0xFF, 0xFE00, 0x0,
 0x0, 0x1FF, 0xFE00, 0x0,
 0x0, 0x1FF, 0xFE00, 0x0,
 0x0, 0x1FF, 0xFC00, 0x0,
 0x0, 0x1FF, 0xFC00, 0x0,
 0x0, 0x3FF, 0xFC00, 0x0,
 0x0, 0x3FF, 0xFC00, 0x0,
 0x0, 0x7FF, 0xF800, 0x0,
 0x0, 0x7FF, 0xF800, 0x0,
 0x0, 0xFFF, 0xF800, 0x0,
 0x0, 0xFFF, 0xF000, 0x0,
 0x0, 0x1FFF, 0xF000, 0x0,
 0x0, 0x3FFF, 0xF000, 0x0,
 0x0, 0x7FFF, 0xE000, 0x0,
 0x0, 0xFFFF, 0xE000, 0x0,
 0x1, 0xFFFF, 0xC000, 0x0,
 0x3, 0xFFFF, 0x8000, 0x0,
 0xF, 0xFFFF, 0x8000, 0x0,
 0x3F, 0xFFFF, 0x0, 0x0,
 0xFF, 0xFFFE, 0x0, 0x0,
 0xFFF, 0xFFFE, 0x0, 0x0,
 0xFFFF, 0xFFFC, 0x0, 0x0,
 0xFFFF, 0xFFF8, 0x0, 0x3F,
 0xFFFF, 0xFFF0, 0x0, 0x3FF,
 0xFFFF, 0xFFE0, 0x0, 0x1FFF,
 0xFFFF, 0xFFC0, 0x0, 0xFFFF,
 0xFFFF, 0xFF80, 0x3, 0xFFFF,
 0xFFFF, 0xFF00, 0x7, 0xFFFF,
 0xFFFF, 0xFC00, 0x1F, 0xFFFF,
 0xFFFF, 0xF800, 0x3F, 0xFFFF,
 0xFFFF, 0xE000, 0xFF, 0xFFFF,
 0xFFFF, 0xC000, 0x1FF, 0xFFFF,
 0xFFFF, 0x0, 0x3FF, 0xFFFF,
 0xFFF8, 0x0, 0x7FF, 0xFFFF,
 0xFFC0, 0x0, 0xFFF, 0xFFFF,
 0xFC00, 0x0, 0x1FFF, 0xFFFF,
 0x0, 0x0, 0x3FFF, 0xFFFF,
 0x0, 0x0, 0x7FFF, 0xFFF0,
 0x0, 0x0, 0x7FFF, 0xFF00,
 0x0, 0x0, 0xFFFF, 0xFC00,
 0x0, 0x1, 0xFFFF, 0xF000,
 0x0, 0x1, 0xFFFF, 0xC000,
 0x0, 0x3, 0xFFFF, 0x8000,
 0x0, 0x7, 0xFFFF, 0x0,
 0x0, 0x7, 0xFFFE, 0x0,
 0x0, 0xF, 0xFFFC, 0x0,
 0x0, 0xF, 0xFFF8, 0x0,
 0x0, 0xF, 0xFFF0, 0x0,
 0x0, 0x1F, 0xFFF0, 0x0,
 0x0, 0x1F, 0xFFE0, 0x0,
 0x0, 0x1F, 0xFFE0, 0x0,
 0x0, 0x3F, 0xFFC0, 0x0,
 0x0, 0x3F, 0xFFC0, 0x0,
 0x0, 0x3F, 0xFF80, 0x0,
 0x0, 0x3F, 0xFF80, 0x0,
 0x0, 0x7F, 0xFF80, 0x0,
 0x0, 0x7F, 0xFF80, 0x0,
 0x0, 0x7F, 0xFF00, 0x0,
 0x0, 0x7F, 0xFF00, 0x0,
 0x0, 0x7F, 0xFF00, 0x0,
 0x0, 0x7F, 0xFF00, 0x0,
 0x0, 0x80, 0x200, 0x0,
 0x0, 0x80, 0x200, 0x0,
 0x0, 0x80, 0x200, 0x0,
 0x0, 0x80, 0x200, 0x0,
 0x0, 0x100, 0x200, 0x0,
 0x0, 0x100, 0x200, 0x0,
 0x0, 0x100, 0x400, 0x0,
 0x0, 0x100, 0x400, 0x0,
 0x0, 0x200, 0x400, 0x0,
 0x0, 0x200, 0x400, 0x0,
 0x0, 0x400, 0x800, 0x0,
 0x0, 0x400, 0x800, 0x0,
 0x0, 0x800, 0x800, 0x0,
 0x0, 0x800, 0x1000, 0x0,
 0x0, 0x1000, 0x1000, 0x0,
 0x0, 0x2000, 0x1000, 0x0,
 0x0, 0x4000, 0x2000, 0x0,
 0x0, 0x8000, 0x2000, 0x0,
 0x1, 0x0, 0x4000, 0x0,
 0x2, 0x0, 0x8000, 0x0,
 0xC, 0x0, 0x8000, 0x0,
 0x30, 0x1, 0x0, 0x0,
 0xC0, 0x2, 0x0, 0x0,
 0xF00, 0x2, 0x0, 0x0,
 0xF000, 0x4, 0x0, 0x0,
 0x0, 0x8, 0x0, 0x3F,
 0x0, 0x10, 0x0, 0x3C0,
 0x0, 0x20, 0x0, 0x1C00,
 0x0, 0x40, 0x0, 0xE000,
 0x0, 0x80, 0x3, 0x0,
 0x0, 0x300, 0x4, 0x0,
 0x0, 0x400, 0x18, 0x0,
 0x0, 0x1800, 0x20, 0x0,
 0x0, 0x2000, 0xC0, 0x0,
 0x0, 0xC000, 0x100, 0x0,
 0x7, 0x0, 0x200, 0x0,
 0x38, 0x0, 0x400, 0x0,
 0x3C0, 0x0, 0x800, 0x0,
 0xFC00, 0x0, 0x1000, 0x0,
 0x0, 0x0, 0x2000, 0xF,
 0x0, 0x0, 0x4000, 0xF0,
 0x0, 0x0, 0x4000, 0x300,
 0x0, 0x0, 0x8000, 0xC00,
 0x0, 0x1, 0x0, 0x3000,
 0x0, 0x1, 0x0, 0x4000,
 0x0, 0x2, 0x0, 0x8000,
 0x0, 0x4, 0x1, 0x0,
 0x0, 0x4, 0x2, 0x0,
 0x0, 0x8, 0x4, 0x0,
 0x0, 0x8, 0x8, 0x0,
 0x0, 0x8, 0x10, 0x0,
 0x0, 0x10, 0x10, 0x0,
 0x0, 0x10, 0x20, 0x0,
 0x0, 0x10, 0x20, 0x0,
 0x0, 0x20, 0x40, 0x0,
 0x0, 0x20, 0x40, 0x0,
 0x0, 0x20, 0x80, 0x0,
 0x0, 0x20, 0x80, 0x0,
 0x0, 0x40, 0x80, 0x0,
 0x0, 0x40, 0x80, 0x0,
 0x0, 0x40, 0x100, 0x0,
 0x0, 0x40, 0x100, 0x0,
 0x0, 0x40, 0x100, 0x0,
 0x0, 0x40, 0x100, 0x0
 };

UWORD __chip sq2_imgdata[512] = {
 0x0, 0x7F, 0xFF00, 0x0,
 0x0, 0x7F, 0xFF00, 0x0,
 0x0, 0x7F, 0xFF00, 0x0,
 0x0, 0x7F, 0xFF00, 0x0,
 0x0, 0x7F, 0xFF80, 0x0,
 0x0, 0x7F, 0xFF80, 0x0,
 0x0, 0x3F, 0xFF80, 0x0,
 0x0, 0x3F, 0xFF80, 0x0,
 0x0, 0x3F, 0xFFC0, 0x0,
 0x0, 0x3F, 0xFFC0, 0x0,
 0x0, 0x1F, 0xFFE0, 0x0,
 0x0, 0x1F, 0xFFE0, 0x0,
 0x0, 0x1F, 0xFFF0, 0x0,
 0x0, 0xF, 0xFFF0, 0x0,
 0x0, 0xF, 0xFFF8, 0x0,
 0x0, 0xF, 0xFFFC, 0x0,
 0x0, 0x7, 0xFFFE, 0x0,
 0x0, 0x7, 0xFFFF, 0x0,
 0x0, 0x3, 0xFFFF, 0x8000,
 0x0, 0x1, 0xFFFF, 0xC000,
 0x0, 0x1, 0xFFFF, 0xF000,
 0x0, 0x0, 0xFFFF, 0xFC00,
 0x0, 0x0, 0x7FFF, 0xFF00,
 0x0, 0x0, 0x7FFF, 0xFFF0,
 0x0, 0x0, 0x3FFF, 0xFFFF,
 0xFC00, 0x0, 0x1FFF, 0xFFFF,
 0xFFC0, 0x0, 0xFFF, 0xFFFF,
 0xFFF8, 0x0, 0x7FF, 0xFFFF,
 0xFFFF, 0x0, 0x3FF, 0xFFFF,
 0xFFFF, 0xC000, 0x1FF, 0xFFFF,
 0xFFFF, 0xE000, 0xFF, 0xFFFF,
 0xFFFF, 0xF800, 0x3F, 0xFFFF,
 0xFFFF, 0xFC00, 0x1F, 0xFFFF,
 0xFFFF, 0xFF00, 0x7, 0xFFFF,
 0xFFFF, 0xFF80, 0x3, 0xFFFF,
 0xFFFF, 0xFFC0, 0x0, 0xFFFF,
 0xFFFF, 0xFFE0, 0x0, 0x1FFF,
 0xFFFF, 0xFFF0, 0x0, 0x3FF,
 0xFFFF, 0xFFF8, 0x0, 0x3F,
 0xFFFF, 0xFFFC, 0x0, 0x0,
 0xFFF, 0xFFFE, 0x0, 0x0,
 0xFF, 0xFFFE, 0x0, 0x0,
 0x3F, 0xFFFF, 0x0, 0x0,
 0xF, 0xFFFF, 0x8000, 0x0,
 0x3, 0xFFFF, 0x8000, 0x0,
 0x1, 0xFFFF, 0xC000, 0x0,
 0x0, 0xFFFF, 0xE000, 0x0,
 0x0, 0x7FFF, 0xE000, 0x0,
 0x0, 0x3FFF, 0xF000, 0x0,
 0x0, 0x1FFF, 0xF000, 0x0,
 0x0, 0xFFF, 0xF000, 0x0,
 0x0, 0xFFF, 0xF800, 0x0,
 0x0, 0x7FF, 0xF800, 0x0,
 0x0, 0x7FF, 0xF800, 0x0,
 0x0, 0x3FF, 0xFC00, 0x0,
 0x0, 0x3FF, 0xFC00, 0x0,
 0x0, 0x1FF, 0xFC00, 0x0,
 0x0, 0x1FF, 0xFC00, 0x0,
 0x0, 0x1FF, 0xFE00, 0x0,
 0x0, 0x1FF, 0xFE00, 0x0,
 0x0, 0xFF, 0xFE00, 0x0,
 0x0, 0xFF, 0xFE00, 0x0,
 0x0, 0xFF, 0xFE00, 0x0,
 0x0, 0xFF, 0xFE00, 0x0,
 0x0, 0x40, 0x100, 0x0,
 0x0, 0x40, 0x100, 0x0,
 0x0, 0x40, 0x100, 0x0,
 0x0, 0x40, 0x100, 0x0,
 0x0, 0x40, 0x80, 0x0,
 0x0, 0x40, 0x80, 0x0,
 0x0, 0x20, 0x80, 0x0,
 0x0, 0x20, 0x80, 0x0,
 0x0, 0x20, 0x40, 0x0,
 0x0, 0x20, 0x40, 0x0,
 0x0, 0x10, 0x20, 0x0,
 0x0, 0x10, 0x20, 0x0,
 0x0, 0x10, 0x10, 0x0,
 0x0, 0x8, 0x10, 0x0,
 0x0, 0x8, 0x8, 0x0,
 0x0, 0x8, 0x4, 0x0,
 0x0, 0x4, 0x2, 0x0,
 0x0, 0x4, 0x1, 0x0,
 0x0, 0x2, 0x0, 0x8000,
 0x0, 0x1, 0x0, 0x4000,
 0x0, 0x1, 0x0, 0x3000,
 0x0, 0x0, 0x8000, 0xC00,
 0x0, 0x0, 0x4000, 0x300,
 0x0, 0x0, 0x4000, 0xF0,
 0x0, 0x0, 0x2000, 0xF,
 0xFC00, 0x0, 0x1000, 0x0,
 0x3C0, 0x0, 0x800, 0x0,
 0x38, 0x0, 0x400, 0x0,
 0x7, 0x0, 0x200, 0x0,
 0x0, 0xC000, 0x100, 0x0,
 0x0, 0x2000, 0xC0, 0x0,
 0x0, 0x1800, 0x20, 0x0,
 0x0, 0x400, 0x18, 0x0,
 0x0, 0x300, 0x4, 0x0,
 0x0, 0x80, 0x3, 0x0,
 0x0, 0x40, 0x0, 0xE000,
 0x0, 0x20, 0x0, 0x1C00,
 0x0, 0x10, 0x0, 0x3C0,
 0x0, 0x8, 0x0, 0x3F,
 0xF000, 0x4, 0x0, 0x0,
 0xF00, 0x2, 0x0, 0x0,
 0xC0, 0x2, 0x0, 0x0,
 0x30, 0x1, 0x0, 0x0,
 0xC, 0x0, 0x8000, 0x0,
 0x2, 0x0, 0x8000, 0x0,
 0x1, 0x0, 0x4000, 0x0,
 0x0, 0x8000, 0x2000, 0x0,
 0x0, 0x4000, 0x2000, 0x0,
 0x0, 0x2000, 0x1000, 0x0,
 0x0, 0x1000, 0x1000, 0x0,
 0x0, 0x800, 0x1000, 0x0,
 0x0, 0x800, 0x800, 0x0,
 0x0, 0x400, 0x800, 0x0,
 0x0, 0x400, 0x800, 0x0,
 0x0, 0x200, 0x400, 0x0,
 0x0, 0x200, 0x400, 0x0,
 0x0, 0x100, 0x400, 0x0,
 0x0, 0x100, 0x400, 0x0,
 0x0, 0x100, 0x200, 0x0,
 0x0, 0x100, 0x200, 0x0,
 0x0, 0x80, 0x200, 0x0,
 0x0, 0x80, 0x200, 0x0,
 0x0, 0x80, 0x200, 0x0,
 0x0, 0x80, 0x200, 0x0
 };

struct Image sq_image = { 0, 0, 0x40, 0x40, 0x2, sq1_imgdata, 0x3, 0, NULL };

char *ver = "$VER: Curves 1.0 "__AMIGADATE__;

struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
struct DisplayIDInformation *dinfo;

extern ULONG RangeSeed;


void ChangeColor( UBYTE *color )
{
*color += RangeRand( 3 ) - 1; if ( *color < 0 ) *color = 0; if ( *color > 15 ) *color = 15;
}


void Blank( void )
{
struct Screen *scr;
UWORD  swidth, sheight, ticks = 0;
struct Rectangle *rect;
UBYTE r1, r2, g1, g2, b1, b2, brightness;
register int n, m;

rect = GETTXTOSCANRECT(dinfo);

swidth = (RECTANGLEWIDTH(rect)>>6)<<6;
sheight = (RECTANGLEHEIGHT(rect)>>6)<<6;
brightness = GETBRIGHTNESS(dinfo);

if ( scr = OpenScreenTags( NULL,
	SA_DisplayID, DISPLAYID( dinfo ),
	SA_Width, swidth,
	SA_Height, sheight,
	SA_Depth, 2,
	SA_Quiet, TRUE,
	TAG_END ) )
	{
	register struct ViewPort *vp = &(scr->ViewPort);
	register struct RastPort *rp = &(scr->RastPort);

	SpritesOff();

	r1 = g1 = b1 = 15;
	r2 = 2; g2 = b2 = 9;

	SetRGB4( vp, 0, 0, 0, 0 );
	SetRGB4( vp, 1, r1*brightness/100, g1*brightness/100, b1*brightness/100 );
	SetRGB4( vp, 3, r2*brightness/100, g2*brightness/100, b2*brightness/100 );
/*	SetRGB4( vp, 3, 12*brightness/100, 5*brightness/100, 10*brightness/100 );*/

	swidth >>= 6;
	sheight >>= 6;

	for ( n = 0; n < swidth; n++ )
		for ( m = 0; m < sheight; m++ )
			{
			if ( RangeRand( 2 ) )
				sq_image.ImageData = sq1_imgdata;
			else
				sq_image.ImageData = sq2_imgdata;
			DrawImage( rp, &sq_image, n << 6, m << 6 );
			}

	while( STILL_BLANKING )
		{
		WaitTOF();
		n = RangeRand( swidth );
		m = RangeRand( sheight );
		if ( RangeRand( 3 ) )
			sq_image.ImageData = ( sq_image.ImageData == sq1_imgdata ? sq2_imgdata : sq1_imgdata );
		DrawImage( rp, &sq_image, n << 6, m << 6 );

		if ( ++ticks == 10 )
			{
			ChangeColor( &r1 );
			ChangeColor( &g1 );
			ChangeColor( &b1 );
			ChangeColor( &r2 );
			ChangeColor( &g2 );
			ChangeColor( &b2 );
			SetRGB4( vp, 1, r1*brightness/100, g1*brightness/100, b1*brightness/100 );
			SetRGB4( vp, 3, r2*brightness/100, g2*brightness/100, b2*brightness/100 );
			ticks = 0;
			}
		}

	CloseScreen( scr );
	SpritesOn();
	}
else
	SendClientMsg( ACTION_FAILED );
}


void __main( void )
{
if ( IntuitionBase = (struct IntuitionBase *)OpenLibrary( "intuition.library", 37L ) )
	{
	if ( GfxBase = (struct GfxBase *)OpenLibrary( "graphics.library", 37L ) )
		{
		if ( dinfo = OpenCommunication() )
			{
			CurrentTime( &RangeSeed, &RangeSeed );
			Blank();
			CloseCommunication( dinfo );
			}
		CloseLibrary( (struct Library *)GfxBase );
		}
	CloseLibrary( (struct Library *)IntuitionBase );
	}
}
