home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_progs
/
anims
/
shm.lzh
/
SHM
/
SHM_PARAMETERS.C
< prev
next >
Wrap
C/C++ Source or Header
|
1991-08-16
|
17KB
|
479 lines
/************************************************************************
Parameter Requester 2 August 87
************************************************************************/
#include <exec/types.h>
#include <intuition/intuition.h>
#include "shm_defines"
extern int hc,hcd,vc,vcd,hs,hsd,vs,vsd;
extern double hpp,hppd,vpp,vppd,hsp,hspd,vsp,vspd,di,did,sf,sfd,cp,cpd;
extern struct TextAttr Fnt;
/************************************************************************
Parameter Definitions
************************************************************************/
char horiz_centre_str[6], vert_centre_str[6],
horiz_size_str[6], vert_size_str[6],
horiz_pri_phase_str[6], vert_pri_phase_str[6],
horiz_sec_phase_str[6], vert_sec_phase_str[6],
decay_str[6], freq_str[6], coup_str[6];
struct IntuiText parms_txt = {1, 0, JAM1, 132, 3, &Fnt,
(UBYTE *)"PARAMETER SETTINGS", NL};
struct IntuiText horiz_txt = {1, 0, JAM1, 65, 14, &Fnt,
(UBYTE *)"Horizontal", &parms_txt};
struct IntuiText vert_txt = {1, 0, JAM1, 263, 14, &Fnt,
(UBYTE *)"Vertical", &horiz_txt};
struct IntuiText centre_txt = {1, 0, JAM1, 177, 27, &Fnt,
(UBYTE *)"CENTRE", &vert_txt};
struct IntuiText size_txt = {1, 0, JAM1, 183, 41, &Fnt,
(UBYTE *)"SIZE", ¢re_txt};
struct IntuiText pri_txt = {1, 0, JAM1, 171, 53, &Fnt,
(UBYTE *)"Primary", &size_txt};
struct IntuiText phase_txt = {1, 0, JAM1, 180, 63, &Fnt,
(UBYTE *)"PHASE", &pri_txt};
struct IntuiText sec_txt = {1, 0, JAM1, 164, 71, &Fnt,
(UBYTE *)"Secondary", &phase_txt};
struct IntuiText decay_txt = {1, 0, JAM1, 164, 84, &Fnt,
(UBYTE *)"DECAY", &sec_txt};
struct IntuiText freq_txt = {1, 0, JAM1, 164, 98, &Fnt,
(UBYTE *)"FREQUENCY", &decay_txt};
struct IntuiText coup_txt = {1, 0, JAM1, 164, 112, &Fnt,
(UBYTE *)"COUPLING", &freq_txt};
struct IntuiText horiz_centre_val_txt = {1, 3, JAM2, -44, 2, &Fnt,
(UBYTE *)horiz_centre_str, NL};
struct IntuiText vert_centre_val_txt = {1, 3, JAM2, 114, 2, &Fnt,
(UBYTE *)vert_centre_str, NL};
struct IntuiText horiz_size_val_txt = {1, 3, JAM2, -44, 2, &Fnt,
(UBYTE *)horiz_size_str, NL};
struct IntuiText vert_size_val_txt = {1, 3, JAM2, 114, 2, &Fnt,
(UBYTE *)vert_size_str, NL};
struct IntuiText horiz_pri_phase_val_txt = {1, 3, JAM2, -44, 2, &Fnt,
(UBYTE *)horiz_pri_phase_str, NL};
struct IntuiText vert_pri_phase_val_txt = {1, 3, JAM2, 114, 2, &Fnt,
(UBYTE *)vert_pri_phase_str, NL};
struct IntuiText horiz_sec_phase_val_txt = {1, 3, JAM2, -44, 2, &Fnt,
(UBYTE *)horiz_sec_phase_str, NL};
struct IntuiText vert_sec_phase_val_txt = {1, 3, JAM2, 114, 2, &Fnt,
(UBYTE *)vert_sec_phase_str, NL};
struct IntuiText decay_val_txt = {1, 3, JAM2, -44, 2, &Fnt,
(UBYTE *)decay_str, NL};
struct IntuiText freq_val_txt = {1, 3, JAM2, -44, 2, &Fnt,
(UBYTE *)freq_str, NL};
struct IntuiText coup_val_txt = {1, 3, JAM2, -44, 2, &Fnt,
(UBYTE *)coup_str, NL};
/************************* Parameter Switches *************************/
struct Image parm_gad_img = {0,0, 154,11, 1, NL, 0, 2, NL};
struct IntuiText parm_cancel_txt = {3, 0, JAM1, 55, 2, &Fnt,
(UBYTE *)"Cancel", NL};
struct Gadget parm_cancel_gad =
{
NL,
240, 84, 154, 11,
GADGHBOX | GADGIMAGE,
RELVERIFY,
BOOLGADGET | REQGADGET,
(APTR)&parm_gad_img, NL,
&parm_cancel_txt,
NL, NL, 1, NL
};
struct IntuiText parm_def_txt = {3, 0, JAM1, 47, 2, &Fnt,
(UBYTE *)"Default ", NL};
struct Gadget parm_def_gad =
{
&parm_cancel_gad,
240, 97, 154, 11,
GADGHBOX | GADGIMAGE,
RELVERIFY,
BOOLGADGET | REQGADGET,
(APTR)&parm_gad_img, NL,
&parm_def_txt,
NL, NL, 2, NL
};
struct IntuiText parm_ok_txt = {3, 0, JAM1, 67, 2, &Fnt,
(UBYTE *)"OK", NL};
struct Gadget parm_ok_gad =
{
&parm_def_gad,
240, 110, 154, 11,
GADGHBOX | GADGIMAGE,
RELVERIFY | ENDGADGET,
BOOLGADGET | REQGADGET,
(APTR)&parm_gad_img, NL,
&parm_ok_txt,
NL, NL, 3, NL
};
/************************* Parameter Sliders **************************/
struct Image horiz_centre_image, vert_centre_image,
horiz_size_image, vert_size_image,
horiz_pri_phase_image, vert_pri_phase_image,
horiz_sec_phase_image, vert_sec_phase_image,
decay_image, freq_image, coup_image;
struct PropInfo horiz_centre_prop, vert_centre_prop,
horiz_size_prop, vert_size_prop,
horiz_pri_phase_prop, vert_pri_phase_prop,
horiz_sec_phase_prop, vert_sec_phase_prop,
decay_prop, freq_prop, coup_prop;
struct Gadget horiz_centre_gad =
{
&parm_ok_gad,
50, 25, 110, 11,
GADGHCOMP, GADGIMMEDIATE | RELVERIFY, PROPGADGET | REQGADGET,
(APTR)&horiz_centre_image, NL,
&horiz_centre_val_txt, NL,
(APTR)&horiz_centre_prop,
4, NL
};
struct Gadget vert_centre_gad =
{
&horiz_centre_gad,
240, 25, 110, 11,
GADGHCOMP, GADGIMMEDIATE | RELVERIFY, PROPGADGET | REQGADGET,
(APTR)&vert_centre_image, NL,
&vert_centre_val_txt, NL,
(APTR)&vert_centre_prop,
5, NL
};
struct Gadget horiz_size_gad =
{
&vert_centre_gad,
50, 39, 110, 11,
GADGHCOMP, GADGIMMEDIATE | RELVERIFY, PROPGADGET | REQGADGET,
(APTR)&horiz_size_image, NL,
&horiz_size_val_txt, NL,
(APTR)&horiz_size_prop,
6, NL
};
struct Gadget vert_size_gad =
{
&horiz_size_gad,
240, 39, 110, 11,
GADGHCOMP, GADGIMMEDIATE | RELVERIFY, PROPGADGET | REQGADGET,
(APTR)&vert_size_image, NL,
&vert_size_val_txt, NL,
(APTR)&vert_size_prop,
7, NL
};
struct Gadget horiz_pri_phase_gad =
{
&vert_size_gad,
50, 53, 110, 11,
GADGHCOMP, GADGIMMEDIATE | RELVERIFY, PROPGADGET | REQGADGET,
(APTR)&horiz_pri_phase_image, NL,
&horiz_pri_phase_val_txt, NL,
(APTR)&horiz_pri_phase_prop,
8, NL
};
struct Gadget vert_pri_phase_gad =
{
&horiz_pri_phase_gad,
240, 53, 110, 11,
GADGHCOMP, GADGIMMEDIATE | RELVERIFY, PROPGADGET | REQGADGET,
(APTR)&vert_pri_phase_image, NL,
&vert_pri_phase_val_txt, NL,
(APTR)&vert_pri_phase_prop,
9, NL
};
struct Gadget horiz_sec_phase_gad =
{
&vert_pri_phase_gad,
50, 67, 110, 11,
GADGHCOMP, GADGIMMEDIATE | RELVERIFY, PROPGADGET | REQGADGET,
(APTR)&horiz_sec_phase_image, NL,
&horiz_sec_phase_val_txt, NL,
(APTR)&horiz_sec_phase_prop,
10, NL
};
struct Gadget vert_sec_phase_gad =
{
&horiz_sec_phase_gad,
240, 67, 110, 11,
GADGHCOMP, GADGIMMEDIATE | RELVERIFY, PROPGADGET | REQGADGET,
(APTR)&vert_sec_phase_image, NL,
&vert_sec_phase_val_txt, NL,
(APTR)&vert_sec_phase_prop,
11, NL
};
struct Gadget decay_gad =
{
&vert_sec_phase_gad,
50, 82, 110, 11,
GADGHCOMP, GADGIMMEDIATE | RELVERIFY, PROPGADGET | REQGADGET,
(APTR)&decay_image, NL,
&decay_val_txt, NL,
(APTR)&decay_prop,
12, NL
};
struct Gadget freq_gad =
{
&decay_gad,
50, 96, 110, 11,
GADGHCOMP, GADGIMMEDIATE | RELVERIFY, PROPGADGET | REQGADGET,
(APTR)&freq_image, NL,
&freq_val_txt, NL,
(APTR)&freq_prop,
13, NL
};
struct Gadget coup_gad =
{
&freq_gad,
50, 110, 110, 11,
GADGHCOMP, GADGIMMEDIATE | RELVERIFY, PROPGADGET | REQGADGET,
(APTR)&coup_image, NL,
&coup_val_txt, NL,
(APTR)&coup_prop,
14, NL
};
#define PMX 400 /* Parameter requester size */
#define PMY 124
struct Requester parms_req;
SHORT parms_border_coords[] = {0,0, PMX-1,0, PMX-1,PMY-1, 0,PMY-1, 0,0};
struct Border parms_border =
{
0,0,
1,0,JAM1,
5,&parms_border_coords[0],
NL
};
/************************************************************************
Initialise Parameter Sliders
************************************************************************/
void init_parm_sliders(cW)
struct Window *cW;
{
horiz_centre_prop.HorizPot = (int) (65535*hc)/XMAX;
vert_centre_prop.HorizPot = (int) (65535*vc)/YMAX;
horiz_size_prop.HorizPot = (int) (65535*hs)/XMAX;
vert_size_prop.HorizPot = (int) (65535*vs)/YMAX;
horiz_pri_phase_prop.HorizPot = (int) (65535*hpp)/TWOPI;
vert_pri_phase_prop.HorizPot = (int) (65535*vpp)/TWOPI;
horiz_sec_phase_prop.HorizPot = (int) (65535*hsp)/TWOPI;
vert_sec_phase_prop.HorizPot = (int) (65535*vsp)/TWOPI;
decay_prop.HorizPot = (int) (65535*di)/DMAX;
freq_prop.HorizPot = (int) (65535*sf)/FMAX;
coup_prop.HorizPot = (int) (65535*cp)/CMAX;
sprintf(horiz_centre_str,"%5d\0",hc);
sprintf(vert_centre_str,"%-5d\0",vc);
sprintf(horiz_size_str,"%5d\0",hs);
sprintf(vert_size_str,"%-5d\0",vs);
sprintf(horiz_pri_phase_str,"%5.3f\0",hpp);
sprintf(vert_pri_phase_str,"%5.3f\0",vpp);
sprintf(horiz_sec_phase_str,"%5.3f\0",hsp);
sprintf(vert_sec_phase_str,"%5.3f\0",vsp);
sprintf(decay_str,"%5.3f\0",di*TWOPI/DT);
sprintf(freq_str,"%5.3f\0",sf);
sprintf(coup_str,"%5.3f\0",cp);
RefreshGadgets(&coup_gad,cW,NL);
}
/************************************************************************
Parameter Function
************************************************************************/
parms(cW)
struct Window *cW;
{
FAST struct IntuiMessage *message;
FAST int class,item;
int hcb,vcb,hsb,vsb; /* backup parameters */
int hct,vct,hst,vst; /* temporary values */
double hppb,vppb,hspb,vspb,dib,sfb,cpb; /* backup parameters */
double hppt,vppt,hspt,vspt,dit,sft,cpt; /* temporary values */
BOOL loop;
hct = hcb = hc; vct = vcb = vc; hst = hsb = hs; vst = vsb = vs;
hppt = hppb = hpp; vppt = vppb = vpp;
hspt = hspb = hsp; vspt = vspb = vsp;
dit = dib = di; sft = sfb = sf; cpt = cpb = cp;
horiz_centre_prop.Flags = vert_centre_prop.Flags =
horiz_size_prop.Flags = vert_size_prop.Flags =
horiz_pri_phase_prop.Flags = vert_pri_phase_prop.Flags =
horiz_sec_phase_prop.Flags = vert_sec_phase_prop.Flags =
decay_prop.Flags = freq_prop.Flags =
coup_prop.Flags = FREEHORIZ | AUTOKNOB;
horiz_centre_prop.HorizBody = vert_centre_prop.HorizBody =
horiz_size_prop.HorizBody = vert_size_prop.HorizBody =
horiz_pri_phase_prop.HorizBody = vert_pri_phase_prop.HorizBody =
horiz_sec_phase_prop.HorizBody = vert_sec_phase_prop.HorizBody =
decay_prop.HorizBody = freq_prop.HorizBody =
coup_prop.HorizBody = 0x1000;
ModifyIDCMP(cW,GADGETUP | GADGETDOWN | REQCLEAR | MOUSEMOVE);
/* Remember to set REPORTMOUSE flag in window structure
for MOUSEMOVE to work */
InitRequester(&parms_req);
parms_req.LeftEdge = 120;
parms_req.TopEdge = 25;
parms_req.Width = PMX;
parms_req.Height = PMY;
parms_req.ReqGadget = &coup_gad;
parms_req.ReqText = &coup_txt;
parms_req.BackFill = 3;
parms_req.ReqBorder = &parms_border;
Request(&parms_req,cW);
init_parm_sliders(cW);
loop=TRUE;
while (loop)
{
Wait(1 << cW->UserPort->mp_SigBit); /* Be good and go to sleep till
Intuition sends a message */
while (message=(struct IntuiMessage *) GetMsg(cW->UserPort))
{
class = message->Class; /* Process all outstanding Messages */
ReplyMsg(message);
if (class == REQCLEAR) loop = FALSE; /* OK Selected */
if ((class == GADGETDOWN) || (class == GADGETUP))
item = ((struct Gadget *) message->IAddress)->GadgetID;
/* Get GadgetID for sliders on GADGETDOWN
and Booleans on GADGETDUP */
/* MOUSEMOVE events are not acknowledged specifically, but by
generating a message cause the following code for cases >3
to update the sliders */
}
switch (item)
{
case 1 : hc = hcb; vc = vcb; hs = hsb; vs = vsb;
hpp = hppb; vpp = vppb; hsp = hspb; vsp = vspb;
di = dib; sf = sfb; cp = cpb;
init_parm_sliders(cW); /* Cancel */
item = 0;
break;
case 2 : hc = hcd; vc = vcd; hs = hsd; vs = vsd;
hpp = hppd; vpp = vppd; hsp = hspd; vsp = vspd;
di = did; sf = sfd; cp = cpd;
init_parm_sliders(cW); /* Default */
item = 0;
break;
case 4 : /* Update slider only if the value has changed */
hct = (int) (XMAX*horiz_centre_prop.HorizPot)/65535;
if (hct != hc)
{
hc = hct;
sprintf(horiz_centre_str,"%5d\0",hc);
RefreshGList(&horiz_centre_gad,cW,&parms_req,1);
}
break;
case 5 : vct = (int) (YMAX*vert_centre_prop.HorizPot)/65535;
if (vct != vc)
{
vc = vct;
sprintf(vert_centre_str,"%-5d\0",vc);
RefreshGList(&vert_centre_gad,cW,&parms_req,1);
}
break;
case 6 : hst = (int) (XMAX*horiz_size_prop.HorizPot)/65535;
if (hst != hs)
{
hs = hst;
sprintf(horiz_size_str,"%5d\0",hs);
RefreshGList(&horiz_size_gad,cW,&parms_req,1);
}
break;
case 7 : vst = (int) (YMAX*vert_size_prop.HorizPot)/65535;
if (vst != vs)
{
vs = vst;
sprintf(vert_size_str,"%-5d\0",vs);
RefreshGList(&vert_size_gad,cW,&parms_req,1);
}
break;
case 8 : hppt = (double)
(TWOPI*horiz_pri_phase_prop.HorizPot)/65535;
if (hppt != hpp)
{
hpp = hppt;
sprintf(horiz_pri_phase_str,"%5.3f\0",hpp);
RefreshGList(&horiz_pri_phase_gad,cW,&parms_req,1);
}
break;
case 9 : vppt = (double)
(TWOPI*vert_pri_phase_prop.HorizPot)/65535;
if (vppt != vpp)
{
vpp = vppt;
sprintf(vert_pri_phase_str,"%5.3f\0",vpp);
RefreshGList(&vert_pri_phase_gad,cW,&parms_req,1);
}
break;
case 10 : hspt = (double)
(TWOPI*horiz_sec_phase_prop.HorizPot)/65535;
if (hspt != hsp)
{
hsp = hspt;
sprintf(horiz_sec_phase_str,"%5.3f\0",hsp);
RefreshGList(&horiz_sec_phase_gad,cW,&parms_req,1);
}
break;
case 11 : vspt = (double)
(TWOPI*vert_sec_phase_prop.HorizPot)/65535;
if (vspt != vsp)
{
vsp = vspt;
sprintf(vert_sec_phase_str,"%5.3f\0",vsp);
RefreshGList(&vert_sec_phase_gad,cW,&parms_req,1);
}
break;
case 12 : dit = (double) (DMAX*decay_prop.HorizPot)/65535;
if (dit != di)
{
di = dit;
sprintf(decay_str,"%5.3f\0",di*TWOPI/DT);
RefreshGList(&decay_gad,cW,&parms_req,1);
}
break;
case 13 : sft = (double) (FMAX*freq_prop.HorizPot)/65535;
if (sft != sf)
{
sf = sft;
sprintf(freq_str,"%5.3f\0",sf);
RefreshGList(&freq_gad,cW,&parms_req,1);
}
break;
case 14 : cpt = (double) (CMAX*coup_prop.HorizPot)/65535;
if (cpt != cp)
{
cp = cpt;
sprintf(coup_str,"%5.3f\0",cp);
RefreshGList(&coup_gad,cW,&parms_req,1);
}
}
}
ModifyIDCMP(cW,MENUPICK | ACTIVEWINDOW | REQCLEAR | INTUITICKS);
return(TRUE);
}