#include "/xsb.h"

struct GfxBase *GfxBase;
struct IntuitionBase *IntuitionBase;

#define rnd(x) (rand()%(x))

void srand(int);
int rand(void);

struct XSBPref defpref;
extern struct Custom __far custom;

void __saveds XSBBlankScreen(long signum,struct XSBInfo *xsbi)
{
	struct RastPort *rp;
	struct ViewPort *vp;
	struct Screen *scr;
	struct timerequest *tr=xsbi->tr;
	struct XSBPref *pref=xsbi->prefs;

	defpref.xsb_arg=10;
	if(pref) defpref=*pref;

	srand(scr);
	GfxBase=OldOpenLibrary("graphics.library");
	IntuitionBase=OldOpenLibrary("intuition.library");

	if(scr=OpenScreenTags(0,SA_Width,320,SA_Height,256,
		SA_DisplayID,LORES_KEY,
		SA_Type,CUSTOMSCREEN|SCREENQUIET,
		SA_Quiet,TRUE,
		SA_Depth,4,
		TAG_DONE))
	 {
	 custom.dmacon=(1<<5);
	 rp=&scr->RastPort;
	 vp=&scr->ViewPort;
	 while(!(SetSignal(0,signum)&signum)) {
		SetRGB4(vp,rnd(15),rnd(15),rnd(15),rnd(15));
		SetAPen(rp,rnd(15));
		switch(rnd(7)) {
			case 0:
			case 1:
			case 2: WritePixel(rp,rnd(320),rnd(256)); break;
			case 3:
			case 4: Move(rp,rnd(320),rnd(256)); Draw(rp,rnd(320),rnd(256)); break;
			case 5: DrawEllipse(rp,90+rnd(140),60+rnd(80),3+rnd(83),3+rnd(52)); break;
			case 6: RectFill(rp,rnd(160),rnd(128),160+rnd(320),128+rnd(128)); break;
		} 
		tr->tr_node.io_Command=TR_ADDREQUEST;
		tr->tr_time.tv_secs=0;
		tr->tr_time.tv_micro=defpref.xsb_arg*10;
		DoIO(tr);
	 }
	 CloseScreen(scr);
	}
	CloseLibrary(GfxBase);
	CloseLibrary(IntuitionBase);
}

char * __saveds XSBGetID(void)
{
	return("XSB Psychedelic Blanker\n\nGives some more or less\nnice psychedelic effects.");
}
char *cyl[]={"Sel1","Sel2","Sel3","Sel4",0};

struct XSBPref defpref4;
struct XSBPref defpref3;
struct XSBPref defpref2;
struct XSBPref defpref1;

struct XSBParams parm4={0,XSBP_STRING,"String:",0,0,0,&defpref4};
struct XSBParams parm3={&parm4,XSBP_BOOL,"Checkbox:",0,0,0,&defpref3};
struct XSBParams parm2={&parm3,XSBP_INTEGER,"Int:",0,0,0,&defpref2};
struct XSBParams parm1={&parm2,XSBP_CYCLE,"Cycle:",cyl,0,0,&defpref1};
struct XSBParams parm={&parm1,XSBP_SLIDER,"Speed:",0,1,99,&defpref};


struct  XSBParams * __saveds XSBGetParams(void)
{
	defpref1.xsb_arg=2;
	defpref2.xsb_arg=4242;
	defpref3.xsb_arg=5;
	strcpy(defpref4.xsb_string,"Teststring");
	return(&parm);
}
