home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
148.lha
/
benchquake.c
< prev
next >
Wrap
C/C++ Source or Header
|
1980-11-15
|
4KB
|
216 lines
/* BenchQuake, by Oren Peli. Copyright (c) 1988 BazboSoft! */
/* Should be called automatically from the 'Startup-Sequence' of all California
residents! */
#include <exec/ports.h>
#include <devices/inputevent.h>
#include <devices/input.h>
extern long OpenDevice();
extern struct MsgPort *CreatePort();
extern struct IOStdReq *CreateStdIO();
struct MsgPort *port = NULL;
struct IOStdReq *req;
long errdev = 0;
struct InputEvent ie;
void *OpenLibrary() , *IntuitionBase , *GfxBase;
struct Screen *OpenWorkBench();
main()
{
REGISTER WORD q , i , x , y;
REGISTER struct RastPort *rp;
REGISTER struct ViewPort *vp;
REGISTER struct Screen *scr;
IntuitionBase = OpenLibrary("intuition.library" , 33L);
GfxBase = OpenLibrary("graphics.library" , 33L);
if (NOT IntuitionBase || NOT GfxBase)
bye();
if (NOT (port = CreatePort(0L , 0L) ) )
bye();
if (NOT (req = CreateStdIO(port) ) )
bye();
if (errdev = OpenDevice("input.device" , 0L , req , 0L) )
bye();
puts("BenchQuake, by Oren Peli. Copyright (c) 1988 BazboSoft!");
scr = OpenWorkBench();
vp = &scr->ViewPort;
rp = &scr->RastPort;
x = vp->DxOffset;
y = vp->DyOffset;
for (i = 0 ; i <= random(200) + 50 ; i++)
RangeRand( (LONG) random(27441) );
req->io_Command = IND_WRITEEVENT;
req->io_Flags = 0;
req->io_Length = (long) sizeof(struct InputEvent);
req->io_Data = (void *) &ie;
ie.ie_NextEvent = NULL;
ie.ie_Class = IECLASS_RAWMOUSE;
ie.ie_TimeStamp.tv_secs = 0;
ie.ie_TimeStamp.tv_micro = 0;
ie.ie_Code = NULL;
ie.ie_Qualifier = IEQUALIFIER_RELATIVEMOUSE;
for (q = 1 ; q != 45 ; q++)
{
for (i = 0 ; i != 25 ; i++)
{
vp->DxOffset = RangeRand( (LONG) q * 2L) - q;
vp->DyOffset = RangeRand( (LONG) q) - (q / 2);
MakeScreen(scr);
RethinkDisplay();
ShiverPointer(q);
}
ScrambleRP(rp , scr , q);
ScrambleRP(rp , scr , q);
ScrambleRP(rp , scr , q);
ScrambleRP(rp , scr , q);
ScrambleRP(rp , scr , q);
}
for ( ; q != 0 ; q--)
{
for (i = 0 ; i != 20 ; i++)
{
vp->DxOffset = RangeRand( (LONG) q * 2L) - q;
vp->DyOffset = RangeRand( (LONG) q) - (q / 2);
MakeScreen(scr);
RethinkDisplay();
ShiverPointer(q);
}
ScrambleRP(rp , scr , q);
}
vp->DxOffset = x;
vp->DyOffset = y;
MakeScreen(scr);
RethinkDisplay();
bye();
}
ShiverPointer(q)
REGISTER WORD q;
{
if (q < 1)
q = 1;
ie.ie_X = 2 * (RangeRand( (LONG) q) - (q / 2) );
ie.ie_Y = 2 * (RangeRand( (LONG) q) - (q / 2) );
DoIO(req);
}
ScrambleRP(rp , scr , q)
REGISTER WORD q;
REGISTER struct Screen *scr;
REGISTER struct RastPort *rp;
{
REGISTER WORD srcx , srcy , width , height , destx , desty;
if (q < 5)
return;
width = RangeRand( (LONG) q * 2L);
height = RangeRand( (LONG) q);
if (width < 1)
width = 1;
if (height < 1)
height = 1;
srcx = RangeRand( (LONG) scr->Width - width);
srcy = RangeRand( (LONG) scr->Height - height);
destx = srcx + RangeRand( (LONG) q * 2L) - q;
desty = srcy + RangeRand( (LONG) q) - (q / 2);
if (srcx < 0)
srcx = 0;
if (srcy < 0)
srcy = 0;
if (destx < 0)
destx = 0;
if (desty < 0)
desty = 0;
if (destx + width >= scr->Width)
destx = scr->Width - width - 1;
if (desty + height >= scr->Height)
desty = scr->Height - height - 1;
ClipBlit(rp , (LONG) srcx , (LONG) srcy , rp , (LONG) destx , (LONG) desty ,
(LONG) width , (LONG) height , 0xC0L);
}
random(max)
REGISTER WORD max;
{
static ULONG num;
ULONG sec , mic;
CurrentTime(&sec , &mic);
num *= sec;
num += mic;
while (num > 32000)
num = num >> 1;
return( (WORD) (num % (ULONG) max) );
}
bye()
{
if (NOT errdev)
CloseDevice(req);
if (req)
DeleteStdIO(req);
if (port)
DeletePort(port);
if (GfxBase)
CloseLibrary(GfxBase);
if (IntuitionBase)
CloseLibrary(IntuitionBase);
}