home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ARM Club 1
/
ARM_CLUB_CD.iso
/
contents
/
sillies
/
silly1
/
!Rippler
/
c
/
rippler
< prev
next >
Wrap
Text File
|
1990-03-18
|
3KB
|
154 lines
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "wimp.h" /* access to WIMP SWIs */
#include "wimpt.h" /* wimp task facilities */
#include "win.h" /* registering window handlers */
#include "event.h" /* poll loops, etc */
#include "baricon.h" /* putting icon on icon bar */
#include "template.h" /* reading in template file */
#include "os.h" /* low-level RISCOS access */
#include "dbox.h" /* dialogue box handling */
#include "res.h"
#include "resspr.h"
#include "swis.h"
#include "flex.h"
#define NUM_WAVES 20
#define MAX_HEIGHT 15
#define WAVE_WIDTH 60
#define SIZE (NUM_WAVES * WAVE_WIDTH)
#define PI 3.1415926
#define junk(x) (x=x)
int rippling = FALSE;
int quit = FALSE;
wimp_w handle;
static void toggle_ripple(void)
{
if (rippling)
os_cli("ripple 0");
else
os_cli("ripple 1");
rippling = !rippling;
}
static void leftclickproc(wimp_i i)
{
junk(i);
toggle_ripple();
}
static void info_aboutprog(void)
{
dbox d = dbox_new("ProgInfo");
dbox_showstatic(d);
dbox_fillin(d);
dbox_dispose(&d);
}
static menu menumaker(void *handle)
{
menu temp;
junk(handle);
temp = menu_new("Rippler", ">Info,Ripple,Quit");
if (rippling)
menu_setflags(temp, 2, TRUE, FALSE);
return(temp);
}
static void menuproc(void *handle, char *hit)
{
junk(handle);
switch(hit[0])
{
case 1:
info_aboutprog();
break;
case 2:
toggle_ripple();
break;
case 3:
quit = TRUE;
break;
}
}
static BOOL init_waves(void)
{
int *waves;
double astep, sstep, angle, size;
int i;
os_regset r;
r.r[0] = 6;
r.r[2] = (int)NULL;
r.r[3] = SIZE * 4;
os_swix(OS_Module, &r);
if ((int*)r.r[2] == NULL)
return(FALSE);
waves = (int*)r.r[2];
angle = 0.0;
size = 0.0;
astep = 2 * PI / WAVE_WIDTH;
sstep = (double)MAX_HEIGHT / (SIZE / 2);
for (i = 0; i < SIZE / 2; i++)
{
waves[i] = (int)(sin(angle) * size);
angle += astep;
size += sstep;
}
for (; i < SIZE; i++)
{
waves[i] = (int)(sin(angle) * size);
angle += astep;
size -= sstep;
}
r.r[0] = (int)waves;
r.r[1] = 0xbb;
r.r[2] = SIZE;
os_swix(OS_ServiceCall, &r);
return(TRUE);
}
void closedown(void)
{
os_cli("ripple 0");
}
static BOOL initialise(void)
{
wimp_wind *window;
atexit(closedown);
flex_init();
wimpt_init("Rippler");
res_init("Rippler");
resspr_init();
template_init();
dbox_init();
wimpt_checkmode();
window = template_syshandle("dummywind");
wimp_create_wind(window, &handle);
baricon("!rippler", (int)resspr_area(), leftclickproc);
event_attachmenumaker(win_ICONBAR, menumaker, menuproc, NULL);
event_setmask(wimp_EMPTRENTER|wimp_EMPTRLEAVE);
return(init_waves());
}
int main(void)
{
if (initialise())
{
while(!quit)
event_process();
}
}