home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_disks
/
400-499
/
ff481.lha
/
wavemaker
/
wavemaker.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-08-08
|
67KB
|
1,628 lines
/**********************************************************************/
/* */
/* WaveMaker - a program to allow a user to construct waveforms */
/* by superposition of harmonic sine waves. */
/* */
/* */
/* This program is intended for beginning music and physics students */
/* to help them get a better intuitive feel for constructing a */
/* complex wave form from a sum of harmonics. */
/* */
/* For program operation see WaveMaker.doc. */
/* */
/* This program was written in SAS C, version 5.10. It is */
/* compiled with the enclosed lmkfile. */
/* */
/* WaveMaker is freely distributable as long as it is not sold for */
/* profit. It is permitted (encouraged) to include it on software */
/* collections sold for a nominal sum, such as club disks and */
/* Fish disks. Copyright is retained by the author. */
/* */
/* Thanks are due to those people who posted example programs in */
/* the BIX listings area. One good example is worth several chapters*/
/* of explanation. Of particular use were gad.c and menu.c. both by */
/* John Draper, and scales.c by Steven A. Bennett. */
/* */
/* Comments, bugs, complaints, and praise may be sent to me at */
/* Thomas Meyer */
/* 12 Physics, Iowa State University */
/* Ames, IA 50010 */
/* BIX: TMEYER */
/* BITNET:MEYER@ALISUVAX */
/* Internet: meyer@iastate.edu */
/* */
/**********************************************************************/
/* */
/* Update history: */
/* 4/10/91 Version 1.2 */
/* Wave calculation speeded up */
/* Bad pointers fixed (guru causers) */
/* Display of partial sums added */
/* Bug fixed in display when waveform rescales */
/* 1/24/90 Version 1.1 */
/* Easy game added */
/* Fixed crashes from rawkey>64 */
/* Closed down in correct order */
/* Game doesn't interfere with amps[] */
/* Random seed from timer */
/* 1/21/90 Version 1.0 released on AAAUG club disk */
/**********************************************************************/
#include <math.h>
#include <stdio.h>
#include <exec/types.h>
#include <exec/nodes.h>
#include <exec/lists.h>
#include <exec/ports.h>
#include <exec/devices.h>
#include <exec/memory.h>
#include <hardware/custom.h>
#include <hardware/dmabits.h>
#include <proto/dos.h>
#include <devices/audio.h>
#include <devices/inputevent.h>
#include <proto/intuition.h>
#include <graphics/gfxbase.h>
#include <graphics/gfx.h>
#include <graphics/clip.h>
#include <graphics/view.h>
#include <graphics/rastport.h>
#include <proto/layers.h>
extern struct MsgPort *CreatePort();
extern VOID ModifyProp();
extern VOID PrintIText();
struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
struct Window *Window;
struct Screen *Screen;
struct ViewPort *ViewPort;
struct RastPort *rport;
struct IntuiMessage *mesg;
struct IOAudio *ioa,*audchan[4],*finish[4];
/****************************************/
/* Build the Intuition Gadgets */
/****************************************/
/* Define Logicals for GadgetIDs */
#define HARMON0 0
#define HARMON1 1
#define HARMON2 2
#define HARMON3 3
#define HARMON4 4
#define HARMON5 5
#define HARMON6 6
#define HARMON7 7
#define INTEG 0
#define UPARROW 8
#define DNARROW 16
#define PROPOR 24
#define PLUSMINUS 32
#define SELECT 64
#define YES 1
#define NO 0
#define NBR_IOA_STRUCTS 6
/* define logicals for ErrExit */
#define SUCCESS 0
#define INTUITION_FAIL 1
#define GRAPHICS_FAIL 2
#define PORTPN_FAIL 3
#define PORTP0_FAIL 4
#define AUDIOALLOC_FAIL 5
#define AUDIO_FAIL 6
#define USERSOUND_FAIL 7
#define REFSOUND_FAIL 8
#define SCREEN_FAIL 9
#define WINDOW_FAIL 10
/* Miscellaneous logicals */
#define INTUITION_REV 0
#define GRAPHICS_REV 0
#define TWOPI 6.283185
/*************************************/
/* Global variables and structures */
/*************************************/
SHORT sinewave[8][513];
LONG amps[8],refamps[8];
LONG maxuser=1,maxref=1;
LONG maxamp=16066;
BYTE waveform[514],refform[514],selform[514];
BYTE *usersound,*refsound;
BYTE sunit=0x0F;
SHORT audiochan[128] ={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
SHORT waiting[5]={NO, NO, NO, NO, NO};
SHORT gameon=NO;
UBYTE selflag,bitval[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
VOID ErrExit();
/* Structures for drawing waveforms */
USHORT userwave[513][2],refwave[513][2],selwave[513][2];
struct Border UWave_brd1 =
{
64,13, /* LeftEdge, TopEdge */
4,0,JAM1, /* FrontPen, BackPen, DrawMode */
127,&userwave[0][0], /* Count, *XY */
NULL /* *NextBorder */
};
struct Border UWave_brd2 =
{
64,13, /* LeftEdge, TopEdge */
4,0,JAM1, /* FrontPen, BackPen, DrawMode */
127,&userwave[126][0], /* Count, *XY */
&UWave_brd1 /* *NextBorder */
};
struct Border UWave_brd3 =
{
64,13, /* LeftEdge, TopEdge */
4,0,JAM1, /* FrontPen, BackPen, DrawMode */
127,&userwave[252][0], /* Count, *XY */
&UWave_brd2 /* *NextBorder */
};
struct Border UWave_brd4 =
{
64,13, /* LeftEdge, TopEdge */
4,0,JAM1, /* FrontPen, BackPen, DrawMode */
127,&userwave[378][0], /* Count, *XY */
&UWave_brd3 /* *NextBorder */
};
struct Border UWave_brd5 =
{
64,13, /* LeftEdge, TopEdge */
4,0,JAM1, /* FrontPen, BackPen, DrawMode */
9,&userwave[504][0], /* Count, *XY */
&UWave_brd4 /* *NextBorder */
};
struct Border RWave_brd1 =
{
64,13, /* LeftEdge, TopEdge */
6,0,JAM1, /* FrontPen, BackPen, DrawMode */
127,&refwave[0][0], /* Count, *XY */
NULL /* *NextBorder */
};
struct Border RWave_brd2 =
{
64,13, /* LeftEdge, TopEdge */
6,0,JAM1, /* FrontPen, BackPen, DrawMode */
127,&refwave[126][0], /* Count, *XY */
&RWave_brd1 /* *NextBorder */
};
struct Border RWave_brd3 =
{
64,13, /* LeftEdge, TopEdge */
6,0,JAM1, /* FrontPen, BackPen, DrawMode */
127,&refwave[252][0], /* Count, *XY */
&RWave_brd2 /* *NextBorder */
};
struct Border RWave_brd4 =
{
64,13, /* LeftEdge, TopEdge */
6,0,JAM1, /* FrontPen, BackPen, DrawMode */
127,&refwave[378][0], /* Count, *XY */
&RWave_brd3 /* *NextBorder */
};
struct Border RWave_brd5 =
{
64,13, /* LeftEdge, TopEdge */
6,0,JAM1, /* FrontPen, BackPen, DrawMode */
9,&refwave[504][0], /* Count, *XY */
&RWave_brd4 /* *NextBorder */
};
struct Border SWave_brd1 =
{
64,13, /* LeftEdge, TopEdge */
5,0,JAM1, /* FrontPen, BackPen, DrawMode */
127,&selwave[0][0], /* Count, *XY */
NULL /* *NextBorder */
};
struct Border SWave_brd2 =
{
64,13, /* LeftEdge, TopEdge */
5,0,JAM1, /* FrontPen, BackPen, DrawMode */
127,&selwave[126][0], /* Count, *XY */
&SWave_brd1 /* *NextBorder */
};
struct Border SWave_brd3 =
{
64,13, /* LeftEdge, TopEdge */
5,0,JAM1, /* FrontPen, BackPen, DrawMode */
127,&selwave[252][0], /* Count, *XY */
&SWave_brd2 /* *NextBorder */
};
struct Border SWave_brd4 =
{
64,13, /* LeftEdge, TopEdge */
5,0,JAM1, /* FrontPen, BackPen, DrawMode */
127,&selwave[378][0], /* Count, *XY */
&SWave_brd3 /* *NextBorder */
};
struct Border SWave_brd5 =
{
64,13, /* LeftEdge, TopEdge */
5,0,JAM1, /* FrontPen, BackPen, DrawMode */
9,&selwave[504][0], /* Count, *XY */
&SWave_brd4 /* *NextBorder */
};
/* Declare the character buffer for IntuitText structures
(to be filled later). */
char textbuf[6]=" 0";
struct IntuiText textamp =
{
1,0,JAM2, /* FrontPen, BackPen, DrawMode */
0,0, /* LeftEdge, TopEdge (use offsets to set) */
NULL, /* *ITextFont (use default) */
(char *)&textbuf, /* *IText (fill later) */
NULL /* *NextText */
};
/* Border structures for the amplitude display box */
USHORT BoxPairsb[9][2]=
{
2,11, 53,11, 53,2, 54,2, 54,11,
55,11, 55,2, 56,2, 56,11 /* Brown shadow around int */
};
struct Border brdi1b =
{
-2,-2,2,0, /* LeftEdge, TopEdge, FrontPen, BackPen */
JAM1, 9, /* DrawMode, Count */
(USHORT *)&BoxPairsb,/* *XY */
NULL /* *NextBorder */
};
USHORT BoxPairs[5][2]=
{
0, 0, 52,0, 52,10, 0,10, 0,0 /* Coords of box */
};
struct Border brdi1 =
{
-2,-2,1,0, /* LeftEdge, TopEdge, FrontPen, BackPen */
JAM1, 5, /* DrawMode, Count */
(USHORT *)&BoxPairs, /* *XY */
&brdi1b /* *NextBorder */
};
/*************************************/
/* First amplitude gadgets */
/*************************************/
/* Proportional gadget */
struct PropInfo prop_info1 =
{
AUTOKNOB|FREEVERT, /* Flags */
0xFFFF,0xFFFF, /* HorizPot, VertPot */
0x0800,0x0800, /* HorizBody, VertBody */
16,64, /* CWidth,CHeight */
0x0800,0x0800, /* HPotRes, VPotRes */
0,0 /* LeftBorder, TopBorder */
};
struct IntuiText protext1 =
{
1, 2, JAM2, /* FrontPen, BackPen, DrawMode */
-20, 3, /* LeftEdge, TopEdge */
NULL,"1:", /* *ITextFont, *Itext */
NULL /* *NextText */
};
struct Image empty1,empty2,empty3,empty4,empty5,empty6,empty7,empty8;
struct Gadget propor1 =
{
NULL,65,113, /* *NextGadget, LeftEdge, TopEdge */
14,69,GADGHCOMP|AUTOKNOB, /* Width, Height, Flags */
RELVERIFY|GADGIMMEDIATE, /* Activation */
PROPGADGET,(APTR)&empty1, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
&protext1,0, /* *GadgetText, MutualExclude */
(APTR)&prop_info1, /* SpecialInfo */
HARMON0|PROPOR, /* GadgetID */
NULL /* UserData */
};
/* Up arrow gadget */
USHORT updn_shadata[] = {2,7, 17,7, 17,1, 18,1, 18,7, 19,7, 19,1};
struct Border updn_shadow =
{
-2,-1,2,0, /* LeftEdge, TopEdge, FrontPen, BackPen */
JAM1,7, /* DrawMode, Count */
(USHORT *)&updn_shadata, /* *XY */
NULL /* *NextBorder */
};
USHORT updn_data[] = {0,0, 0,6, 16,6, 16,0, 0,0};
struct Border updn_border =
{
-2,-1,1,0, /* LeftEdge, TopEdge, FrontPen, BackPen */
JAM1,5, /* DrawMode, Count */
(USHORT *)&updn_data, /* *XY */
&updn_shadow /* *NextBorder */
};
USHORT uparr_data[] = {8,2, 3,4, 13,4, 8,2};
struct Border up_arr =
{
-2,-1,1,0, /* LeftEdge, TopEdge, FrontPen, BackPen */
JAM1,4, /* DrawMode, Count */
(USHORT *)&uparr_data, /* *XY */
&updn_border /* *NextBorder */
};
struct Gadget up1 =
{
&propor1,44,143, /* *NextGadget, LeftEdge, TopEdge */
16,6,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&up_arr, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON0|UPARROW, /* GadgetID */
NULL /* UserData */
};
/* down arrow gadget */
USHORT dnarr_data[] = {3,2, 13,2, 8,4, 3,2};
struct Border dn_arr =
{
-2,-1,1,0, /* LeftEdge, TopEdge, FrontPen, BackPen */
JAM1,4, /* DrawMode, Count */
(USHORT *)&dnarr_data, /* *XY */
&updn_border /* *NextBorder */
};
struct Gadget dn1 =
{
&up1,44,152, /* *NextGadget, LeftEdge, TopEdge */
16,6,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&dn_arr, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON0|DNARROW, /* GadgetID */
NULL /* UserData */
};
/* Change sign gadget */
/* tie shadow for proportional gadget here since
I can't get border structures working for prop gadgets */
USHORT pshad_data[] = {24,23, 38,23, 38,-45, 39,-45, 39,23, 40,23, 40,-45};
struct Border propshad =
{
-2,-2,2,0, /* LeftEdge, TopEdge, FrontPen, BackPen */
JAM1, 7, /* DrawMode, Count */
(USHORT *)&pshad_data, /* *XY */
NULL /* *NextBorder */
};
USHORT plus1[] = {5,3, 9,3};
USHORT plus2[] = {7,2, 7,4};
USHORT minus[] = {5,6, 9,6};
USHORT plmi_data[] = {0,0, 0,8, 15,8, 15,0, 0,0};
USHORT plmi_datas[]= {2,9, 16,9, 16,1, 17,1, 17,9, 18,9, 18,1};
struct Border plmi1 =
{
-2,-1,1,0, /* LeftEdge, TopEdge, Frontpen, BackPen */
JAM1,2, /* DrawMode, Count */
(USHORT *)&plus1, /* *XY */
&propshad /* *NextBorder */
};
struct Border plmi2 =
{
-2,-1,1,0, /* LeftEdge, TopEdge, Frontpen, BackPen */
JAM1,2, /* DrawMode, Count */
(USHORT *)&plus2,&plmi1 /* *XY, *NextBorder */
};
struct Border plmi3 =
{
-2,-1,1,0, /* LeftEdge, TopEdge, Frontpen, BackPen */
JAM1,2, /* DrawMode, Count */
(USHORT *)&minus,&plmi2 /* *XY, *NextBorder */
};
struct Border plmi4 =
{
-2,-1,1,0, /* LeftEdge, TopEdge, Frontpen, BackPen*/
JAM1,5, /* DrawMode, Count */
(USHORT *)&plmi_data,&plmi3 /* *XY, *NextBorder */
};
struct Border plmi5 =
{
-2,-1,2,0, /* LeftEdge,TopEdge, Frontpen,BackPen */
JAM1,7, /* DrawMode, Count */
(USHORT *)&plmi_datas,&plmi4 /* *XY, *NextBorder */
};
struct Gadget plusminus1 =
{
&dn1,44,161, /* *NextGadget, LeftEdge, TopEdge */
15,8,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&plmi5, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON0|PLUSMINUS, /* GadgetID */
NULL /* UserData */
};
struct Border sel_off_shad =
{
-2,-1,2,0, /* LeftEdge,TopEdge, Frontpen,BackPen */
JAM1,7, /* DrawMode, Count */
(USHORT *)&updn_shadata, /* *XY */
NULL /* *NextBorder */
};
struct Border sel_on_shad =
{
-2,-1,2,0, /* LeftEdge,TopEdge, Frontpen,BackPen */
JAM1,7, /* DrawMode, Count */
(USHORT *)&updn_shadata, /* *XY */
NULL /* *NextBorder */
};
USHORT selon_data[] = {0,0, 0,6, 16,6, 16,0, 1,0, 1,1, 15,1, 15,2,
1,2, 1,3, 15,3, 15,4, 1,4, 1,5, 15,5};
USHORT seloff_data[] = {1,1, 15,1, 15,2,
1,2, 1,3, 15,3, 15,4, 1,4, 1,5, 15,5};
struct Border sel_off2 =
{
-2,-1,0,0, /* LeftEdge,TopEdge, Frontpen,BackPen */
JAM1,10, /* DrawMode, Count */
(USHORT *)&seloff_data, /* *XY */
&sel_off_shad /* *NextBorder */
};
struct Border sel_off =
{
-2,-1,5,0, /* LeftEdge,TopEdge, Frontpen,BackPen */
JAM1,5, /* DrawMode, Count */
(USHORT *)&updn_data, /* *XY */
&sel_off2 /* *NextBorder */
};
struct Border sel_on =
{
-2,-1,5,0, /* LeftEdge,TopEdge, Frontpen,BackPen */
JAM1,15, /* DrawMode, Count */
(USHORT *)&selon_data, /* *XY */
&sel_on_shad /* *NextBorder */
};
struct Gadget select1 =
{
&plusminus1,44,172, /* NextGadget, LeftEdge, TopEdge */
16,6,GADGHIMAGE, /* Width, Height, Flags */
TOGGLESELECT|GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&sel_off, /* GadgetType, GadgetRender */
(APTR)&sel_on, /* SelectRender */
NULL, 0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON0|SELECT, /* GadgetID */
NULL /* UserData */
};
/*************************************/
/* Second amplitude gadgets */
/*************************************/
/* Proportional gadget */
struct PropInfo prop_info2 =
{
AUTOKNOB|FREEVERT, /* Flags */
0xFFFF,0xFFFF, /* HorizPot, VertPot */
0x0800,0x0800, /* HorizBody, VertBody */
16,64, /* CWidth,CHeight */
0x0800,0x0800, /* HPotRes, VPotRes */
0,0 /* LeftBorder, TopBorder */
};
struct IntuiText protext2 =
{
1, 2, JAM2, /* FrontPen, BackPen, DrawMode */
-20, 3, /* LeftEdge, TopEdge */
NULL,"2:", /* *ITextFont, *Itext */
NULL /* *NextText */
};
struct Gadget propor2 =
{
&select1,139,113, /* *NextGadget, LeftEdge, TopEdge */
14,69,GADGHCOMP|AUTOKNOB, /* Width, Height, Flags */
RELVERIFY|GADGIMMEDIATE, /* Activation */
PROPGADGET,(APTR)&empty2, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
&protext2,0, /* *GadgetText, MutualExclude */
(APTR)&prop_info2, /* SpecialInfo */
HARMON1|PROPOR, /* GadgetID */
NULL /* UserData */
};
/* Up arrow gadget */
struct Gadget up2 =
{
&propor2,118,143, /* *NextGadget, LeftEdge, TopEdge */
16,6,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&up_arr, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON1|UPARROW, /* GadgetID */
NULL /* UserData */
};
/* down arrow gadget */
struct Gadget dn2 =
{
&up2,118,152, /* *NextGadget, LeftEdge, TopEdge */
16,6,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&dn_arr, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON1|DNARROW, /* GadgetID */
NULL /* UserData */
};
/* Change sign gadget */
struct Gadget plusminus2 =
{
&dn2,118,161, /* *NextGadget, LeftEdge, TopEdge */
15,8,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&plmi5, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON1|PLUSMINUS, /* GadgetID */
NULL /* UserData */
};
struct Gadget select2 =
{
&plusminus2,118,172, /* NextGadget, LeftEdge, TopEdge */
16,6,GADGHIMAGE, /* Width, Height, Flags */
TOGGLESELECT|GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&sel_off, /* GadgetType, GadgetRender */
(APTR)&sel_on, /* SelectRender */
NULL, 0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON1|SELECT, /* GadgetID */
NULL /* UserData */
};
/*************************************/
/* Third amplitude gadgets */
/*************************************/
/* Proportional gadget */
struct PropInfo prop_info3 =
{
AUTOKNOB|FREEVERT, /* Flags */
0xFFFF,0xFFFF, /* HorizPot, VertPot */
0x0800,0x0800, /* HorizBody, VertBody */
16,64, /* CWidth,CHeight */
0x0800,0x0800, /* HPotRes, VPotRes */
0,0 /* LeftBorder, TopBorder */
};
struct IntuiText protext3 =
{
1, 2, JAM2, /* FrontPen, BackPen, DrawMode */
-20, 3, /* LeftEdge, TopEdge */
NULL,"3:", /* *ITextFont, *Itext */
NULL /* *NextText */
};
struct Gadget propor3 =
{
&select2,213,113, /* *NextGadget, LeftEdge, TopEdge */
14,69,GADGHCOMP|AUTOKNOB, /* Width, Height, Flags */
RELVERIFY|GADGIMMEDIATE, /* Activation */
PROPGADGET,(APTR)&empty3, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
&protext3,0, /* *GadgetText, MutualExclude */
(APTR)&prop_info3, /* SpecialInfo */
HARMON2|PROPOR, /* GadgetID */
NULL /* UserData */
};
/* Up arrow gadget */
struct Gadget up3 =
{
&propor3,192,143, /* *NextGadget, LeftEdge, TopEdge */
16,6,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&up_arr, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON2|UPARROW, /* GadgetID */
NULL /* UserData */
};
/* down arrow gadget */
struct Gadget dn3 =
{
&up3,192,152, /* *NextGadget, LeftEdge, TopEdge */
16,6,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&dn_arr, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON2|DNARROW, /* GadgetID */
NULL /* UserData */
};
/* Change sign gadget */
struct Gadget plusminus3 =
{
&dn3,192,161, /* *NextGadget, LeftEdge, TopEdge */
15,8,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&plmi5, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON2|PLUSMINUS, /* GadgetID */
NULL /* UserData */
};
struct Gadget select3 =
{
&plusminus3,192,172, /* NextGadget, LeftEdge, TopEdge */
16,6,GADGHIMAGE, /* Width, Height, Flags */
TOGGLESELECT|GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&sel_off, /* GadgetType, GadgetRender */
(APTR)&sel_on, /* SelectRender */
NULL, 0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON2|SELECT, /* GadgetID */
NULL /* UserData */
};
/*************************************/
/* Fourth amplitude gadgets */
/*************************************/
/* Proportional gadget */
struct PropInfo prop_info4 =
{
AUTOKNOB|FREEVERT, /* Flags */
0xFFFF,0xFFFF, /* HorizPot, VertPot */
0x0800,0x0800, /* HorizBody, VertBody */
16,64, /* CWidth,CHeight */
0x0800,0x0800, /* HPotRes, VPotRes */
0,0 /* LeftBorder, TopBorder */
};
struct IntuiText protext4 =
{
1, 2, JAM2, /* FrontPen, BackPen, DrawMode */
-20, 3, /* LeftEdge, TopEdge */
NULL,"4:", /* *ITextFont, *Itext */
NULL /* *NextText */
};
struct Gadget propor4 =
{
&select3,287,113, /* *NextGadget, LeftEdge, TopEdge */
14,69,GADGHCOMP|AUTOKNOB, /* Width, Height, Flags */
RELVERIFY|GADGIMMEDIATE, /* Activation */
PROPGADGET,(APTR)&empty4, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
&protext4,0, /* *GadgetText, MutualExclude */
(APTR)&prop_info4, /* SpecialInfo */
HARMON3|PROPOR, /* GadgetID */
NULL /* UserData */
};
/* Up arrow gadget */
struct Gadget up4 =
{
&propor4,266,143, /* *NextGadget, LeftEdge, TopEdge */
16,6,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&up_arr, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON3|UPARROW, /* GadgetID */
NULL /* UserData */
};
/* down arrow gadget */
struct Gadget dn4 =
{
&up4,266,152, /* *NextGadget, LeftEdge, TopEdge */
16,6,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&dn_arr, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON3|DNARROW, /* GadgetID */
NULL /* UserData */
};
/* Change sign gadget */
struct Gadget plusminus4 =
{
&dn4,266,161, /* *NextGadget, LeftEdge, TopEdge */
15,8,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&plmi5, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON3|PLUSMINUS, /* GadgetID */
NULL /* UserData */
};
struct Gadget select4 =
{
&plusminus4,266,172, /* NextGadget, LeftEdge, TopEdge */
16,6,GADGHIMAGE, /* Width, Height, Flags */
TOGGLESELECT|GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&sel_off, /* GadgetType, GadgetRender */
(APTR)&sel_on, /* SelectRender */
NULL, 0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON3|SELECT, /* GadgetID */
NULL /* UserData */
};
/*************************************/
/* Fifth amplitude gadgets */
/*************************************/
/* Proportional gadget */
struct PropInfo prop_info5 =
{
AUTOKNOB|FREEVERT, /* Flags */
0xFFFF,0xFFFF, /* HorizPot, VertPot */
0x0800,0x0800, /* HorizBody, VertBody */
16,64, /* CWidth,CHeight */
0x0800,0x0800, /* HPotRes, VPotRes */
0,0 /* LeftBorder, TopBorder */
};
struct IntuiText protext5 =
{
1, 2, JAM2, /* FrontPen, BackPen, DrawMode */
-20, 3, /* LeftEdge, TopEdge */
NULL,"5:", /* *ITextFont, *Itext */
NULL /* *NextText */
};
struct Gadget propor5 =
{
&select4,361,113, /* *NextGadget, LeftEdge, TopEdge */
14,69,GADGHCOMP|AUTOKNOB, /* Width, Height, Flags */
RELVERIFY|GADGIMMEDIATE, /* Activation */
PROPGADGET,(APTR)&empty5, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
&protext5,0, /* *GadgetText, MutualExclude */
(APTR)&prop_info5, /* SpecialInfo */
HARMON4|PROPOR, /* GadgetID */
NULL /* UserData */
};
/* Up arrow gadget */
struct Gadget up5 =
{
&propor5,341,143, /* *NextGadget, LeftEdge, TopEdge */
16,6,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&up_arr, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON4|UPARROW, /* GadgetID */
NULL /* UserData */
};
/* down arrow gadget */
struct Gadget dn5 =
{
&up5,340,152, /* *NextGadget, LeftEdge, TopEdge */
16,6,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&dn_arr, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON4|DNARROW, /* GadgetID */
NULL /* UserData */
};
/* Change sign gadget */
struct Gadget plusminus5 =
{
&dn5,340,161, /* *NextGadget, LeftEdge, TopEdge */
15,8,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&plmi5, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON4|PLUSMINUS, /* GadgetID */
NULL /* UserData */
};
struct Gadget select5 =
{
&plusminus5,340,172, /* NextGadget, LeftEdge, TopEdge */
16,6,GADGHIMAGE, /* Width, Height, Flags */
TOGGLESELECT|GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&sel_off, /* GadgetType, GadgetRender */
(APTR)&sel_on, /* SelectRender */
NULL, 0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON4|SELECT, /* GadgetID */
NULL /* UserData */
};
/*************************************/
/* Sixth amplitude gadgets */
/*************************************/
/* Proportional gadget */
struct PropInfo prop_info6 =
{
AUTOKNOB|FREEVERT, /* Flags */
0xFFFF,0xFFFF, /* HorizPot, VertPot */
0x0800,0x0800, /* HorizBody, VertBody */
16,64, /* CWidth,CHeight */
0x0800,0x0800, /* HPotRes, VPotRes */
0,0 /* LeftBorder, TopBorder */
};
struct IntuiText protext6 =
{
1, 2, JAM2, /* FrontPen, BackPen, DrawMode */
-20, 3, /* LeftEdge, TopEdge */
NULL,"6:", /* *ITextFont, *Itext */
NULL /* *NextText */
};
struct Gadget propor6 =
{
&select5,435,113, /* *NextGadget, LeftEdge, TopEdge */
14,69,GADGHCOMP|AUTOKNOB, /* Width, Height, Flags */
RELVERIFY|GADGIMMEDIATE, /* Activation */
PROPGADGET,(APTR)&empty6, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
&protext6,0, /* *GadgetText, MutualExclude */
(APTR)&prop_info6, /* SpecialInfo */
HARMON5|PROPOR, /* GadgetID */
NULL /* UserData */
};
/* Up arrow gadget */
struct Gadget up6 =
{
&propor6,414,143, /* *NextGadget, LeftEdge, TopEdge */
16,6,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&up_arr, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON5|UPARROW, /* GadgetID */
NULL /* UserData */
};
/* down arrow gadget */
struct Gadget dn6 =
{
&up6,414,152, /* *NextGadget, LeftEdge, TopEdge */
16,6,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&dn_arr, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON5|DNARROW, /* GadgetID */
NULL /* UserData */
};
/* Change sign gadget */
struct Gadget plusminus6 =
{
&dn6,414,161, /* *NextGadget, LeftEdge, TopEdge */
15,8,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&plmi5, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON5|PLUSMINUS, /* GadgetID */
NULL /* UserData */
};
struct Gadget select6 =
{
&plusminus6,414,172, /* NextGadget, LeftEdge, TopEdge */
16,6,GADGHIMAGE, /* Width, Height, Flags */
TOGGLESELECT|GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&sel_off, /* GadgetType, GadgetRender */
(APTR)&sel_on, /* SelectRender */
NULL, 0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON5|SELECT, /* GadgetID */
NULL /* UserData */
};
/*************************************/
/* Seventh amplitude gadgets */
/*************************************/
/* Proportional gadget */
struct PropInfo prop_info7 =
{
AUTOKNOB|FREEVERT, /* Flags */
0xFFFF,0xFFFF, /* HorizPot, VertPot */
0x0800,0x0800, /* HorizBody, VertBody */
16,64, /* CWidth,CHeight */
0x0800,0x0800, /* HPotRes, VPotRes */
0,0 /* LeftBorder, TopBorder */
};
struct IntuiText protext7 =
{
1, 2, JAM2, /* FrontPen, BackPen, DrawMode */
-20, 3, /* LeftEdge, TopEdge */
NULL,"7:", /* *ITextFont, *Itext */
NULL /* *NextText */
};
struct Gadget propor7 =
{
&select6,509,113, /* *NextGadget, LeftEdge, TopEdge */
14,69,GADGHCOMP|AUTOKNOB, /* Width, Height, Flags */
RELVERIFY|GADGIMMEDIATE, /* Activation */
PROPGADGET,(APTR)&empty7, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
&protext7,0, /* *GadgetText, MutualExclude */
(APTR)&prop_info7, /* SpecialInfo */
HARMON6|PROPOR, /* GadgetID */
NULL /* UserData */
};
/* Up arrow gadget */
struct Gadget up7 =
{
&propor7,488,143, /* *NextGadget, LeftEdge, TopEdge */
16,6,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&up_arr, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON6|UPARROW, /* GadgetID */
NULL /* UserData */
};
/* down arrow gadget */
struct Gadget dn7 =
{
&up7,488,152, /* *NextGadget, LeftEdge, TopEdge */
16,6,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&dn_arr, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON6|DNARROW, /* GadgetID */
NULL /* UserData */
};
/* Change sign gadget */
struct Gadget plusminus7 =
{
&dn7,488,161, /* *NextGadget, LeftEdge, TopEdge */
15,8,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&plmi5, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON6|PLUSMINUS, /* GadgetID */
NULL /* UserData */
};
struct Gadget select7 =
{
&plusminus7,488,172, /* NextGadget, LeftEdge, TopEdge */
16,6,GADGHIMAGE, /* Width, Height, Flags */
TOGGLESELECT|GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&sel_off, /* GadgetType, GadgetRender */
(APTR)&sel_on, /* SelectRender */
NULL, 0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON6|SELECT, /* GadgetID */
NULL /* UserData */
};
/*************************************/
/* Eighth amplitude gadgets */
/*************************************/
/* Proportional gadget */
struct PropInfo prop_info8 =
{
AUTOKNOB|FREEVERT, /* Flags */
0xFFFF,0xFFFF, /* HorizPot, VertPot */
0x0800,0x0800, /* HorizBody, VertBody */
16,64, /* CWidth,CHeight */
0x0800,0x0800, /* HPotRes, VPotRes */
0,0 /* LeftBorder, TopBorder */
};
struct IntuiText protext8 =
{
1, 2, JAM2, /* FrontPen, BackPen, DrawMode */
-20, 3, /* LeftEdge, TopEdge */
NULL,"8:", /* *ITextFont, *Itext */
NULL /* *NextText */
};
struct Gadget propor8 =
{
&select7,583,113, /* *NextGadget, LeftEdge, TopEdge */
14,69,GADGHCOMP|AUTOKNOB, /* Width, Height, Flags */
RELVERIFY|GADGIMMEDIATE, /* Activation */
PROPGADGET,(APTR)&empty8, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
&protext8,0, /* *GadgetText, MutualExclude */
(APTR)&prop_info8, /* SpecialInfo */
HARMON7|PROPOR, /* GadgetID */
NULL /* UserData */
};
/* Up arrow gadget */
struct Gadget up8 =
{
&propor8,562,143, /* *NextGadget, LeftEdge, TopEdge */
16,6,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&up_arr, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON7|UPARROW, /* GadgetID */
NULL /* UserData */
};
/* down arrow gadget */
struct Gadget dn8 =
{
&up8,562,152, /* *NextGadget, LeftEdge, TopEdge */
16,6,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&dn_arr, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON7|DNARROW, /* GadgetID */
NULL /* UserData */
};
/* Change sign gadget */
struct Gadget plusminus8 =
{
&dn8,562,161, /* *NextGadget, LeftEdge, TopEdge */
15,8,GADGHCOMP, /* Width, Height, Flags */
GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&plmi5, /* GadgetType, GadgetRender */
NULL, /* SelectRender */
NULL,0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON7|PLUSMINUS, /* GadgetID */
NULL /* UserData */
};
struct Gadget select8 =
{
&plusminus8,562,172, /* NextGadget, LeftEdge, TopEdge */
16,6,GADGHIMAGE, /* Width, Height, Flags */
TOGGLESELECT|GADGIMMEDIATE, /* Activation */
BOOLGADGET,(APTR)&sel_off, /* GadgetType, GadgetRender */
(APTR)&sel_on, /* SelectRender */
NULL, 0, /* *GadgetText, MutualExclude */
NULL, /* SpecialInfo */
HARMON7|SELECT, /* GadgetID */
NULL /* UserData */
};
struct Gadget *propadd[8]={&propor1,&propor2,&propor3,&propor4,
&propor5,&propor6,&propor7,&propor8};
/********************/
/* Menu Structures */
/********************/
struct IntuiText stoptext = {
0,1,JAM1, /* FrontPen, BackPen, DrawMode */
0,0, /* LeftEdge, TopEdge */
NULL,"Stop", /* ITextFont, *IText */
NULL /* *NextText */
};
struct MenuItem stopgame = {
NULL, /* *NextItem */
0,20,80,10, /* LeftEdge, TopEdge, Width, Height */
ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags */
NULL, (APTR)&stoptext, /* MutualExclude, ItemFill */
NULL,NULL, /* Command, *SubItem */
NULL /* NextSelect */
};
struct IntuiText hardtext = {
0,1,JAM1, /* FrontPen, BackPen, DrawMode */
0,0, /* LeftEdge, TopEdge */
NULL,"Start-Hard", /* ITextFont, *IText */
NULL /* *NextText */
};
struct MenuItem starthard = {
&stopgame, /* *NextItem */
0,10,80,10, /* LeftEdge, TopEdge, Width, Height */
ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags */
NULL, (APTR)&hardtext, /* MutualExclude, ItemFill */
NULL,NULL, /* Command, *SubItem */
NULL /* NextSelect */
};
struct IntuiText easytext = {
0,1,JAM1, /* FrontPen, BackPen, DrawMode */
0,0, /* LeftEdge, TopEdge */
NULL,"Start-Easy", /* ITextFont, *IText */
NULL /* *NextText */
};
struct MenuItem starteasy = {
&starthard, /* *NextItem */
0,0,80,10, /* LeftEdge, TopEdge, Width, Height */
ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags */
NULL, (APTR)&easytext, /* MutualExclude, ItemFill */
NULL,NULL, /* Command, *SubItem */
NULL /* NextSelect */
};
struct Menu game = {
NULL, /* *NextMenu */
161,0,80,10, /* LeftEdge, TopEdge, Width, Height */
MENUENABLED, /* Flags */
"Game", /* *MenuName */
&starteasy /* First Item */
};
struct IntuiText squaretext = {
0,1,JAM1, /* FrontPen, BackPen, DrawMode */
0,0, /* LeftEdge, TopEdge */
NULL,"Square", /* ITextFont, *IText */
NULL /* *NextText */
};
struct MenuItem square = {
NULL, /* *NextItem */
0,30,80,10, /* LeftEdge, TopEdge, Width, Height */
ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags */
NULL, (APTR)&squaretext, /* MutualExclude, ItemFill */
NULL,NULL, /* Command, *SubItem */
NULL /* NextSelect */
};
struct IntuiText sawtext = {
0,1,JAM1, /* FrontPen, BackPen, DrawMode */
0,0, /* LeftEdge, TopEdge */
NULL,"Sawtooth", /* ITextFont, *IText */
NULL /* *NextText */
};
struct MenuItem sawtooth = {
&square, /* *NextItem */
0,20,80,10, /* LeftEdge, TopEdge, Width, Height */
ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags */
NULL, (APTR)&sawtext, /* MutualExclude, ItemFill */
NULL,NULL, /* Command, *SubItem */
NULL /* NextSelect */
};
struct IntuiText triangletext = {
0,1,JAM1, /* FrontPen, BackPen, DrawMode */
0,0, /* LeftEdge, TopEdge */
NULL,"Triangle", /* ITextFont, *IText */
NULL /* *NextText */
};
struct MenuItem triangle = {
&sawtooth, /* *NextItem */
0,10,80,10, /* LeftEdge, TopEdge, Width, Height */
ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags */
NULL, (APTR)&triangletext, /* MutualExclude, ItemFill */
NULL,NULL, /* Command, *SubItem */
NULL /* NextSelect */
};
struct IntuiText resettext = {
0,1,JAM1, /* FrontPen, BackPen, DrawMode */
0,0, /* LeftEdge, TopEdge */
NULL,"Reset", /* ITextFont, *IText */
NULL /* *NextText */
};
struct MenuItem resetwave = {
&triangle, /* *NextItem */
0,0,80,10, /* LeftEdge, TopEdge, Width, Height */
ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags */
NULL, (APTR)&resettext, /* MutualExclude, ItemFill */
NULL,NULL, /* Command, *SubItem */
NULL /* NextSelect */
};
struct Menu waves = {
&game, /* *NextMenu */
81,0,80,10, /* LeftEdge, TopEdge, Width, Height */
MENUENABLED, /* Flags */
"Waveforms", /* *MenuName */
&resetwave /* First Item */
};
struct IntuiText quittext = {
0,1,JAM1, /* FrontPen, BackPen, DrawMode */
0,0, /* LeftEdge, TopEdge */
NULL,"Quit", /* ITextFont, *IText */
NULL /* *NextText */
};
struct MenuItem quit = {
NULL, /* *NextItem */
0,40,120,10, /* LeftEdge, TopEdge, Width, Height */
ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags */
NULL, (APTR)&quittext, /* MutualExclude, ItemFill */
NULL,NULL, /* Command, *SubItem */
NULL /* NextSelect */
};
struct IntuiText fronttext = {
0,1,JAM1, /* FrontPen, BackPen, DrawMode */
0,0, /* LeftEdge, TopEdge */
NULL,"Screen to Front", /* ITextFont, *IText */
NULL /* *NextText */
};
struct MenuItem scfront = {
&quit, /* *NextItem */
0,30,120,10, /* LeftEdge, TopEdge, Width, Height */
ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags */
NULL, (APTR)&fronttext, /* MutualExclude, ItemFill */
NULL,NULL, /* Command, *SubItem */
NULL /* NextSelect */
};
struct IntuiText backtext = {
0,1,JAM1, /* FrontPen, BackPen, DrawMode */
0,0, /* LeftEdge, TopEdge */
NULL,"Screen to Back", /* ITextFont, *IText */
NULL /* *NextText */
};
struct MenuItem scback = {
&scfront, /* *NextItem */
0,20,120,10, /* LeftEdge, TopEdge, Width, Height */
ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags */
NULL, (APTR)&backtext, /* MutualExclude, ItemFill */
NULL,NULL, /* Command, *SubItem */
NULL /* NextSelect */
};
struct IntuiText expandtext = {
0,1,JAM1, /* FrontPen, BackPen, DrawMode */
0,0, /* LeftEdge, TopEdge */
NULL,"Full Scale", /* ITextFont, *IText */
NULL /* *NextText */
};
struct MenuItem expand = {
&scback, /* *NextItem */
0,10,120,10, /* LeftEdge, TopEdge, Width, Height */
ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags */
NULL, (APTR)&expandtext, /* MutualExclude, ItemFill */
NULL,NULL, /* Command, *SubItem */
NULL /* NextSelect */
};
struct IntuiText abouttext = {
0,1,JAM1, /* FrontPen, BackPen, DrawMode */
0,0, /* LeftEdge, TopEdge */
NULL,"About", /* ITextFont, *IText */
NULL /* *NextText */
};
struct MenuItem about = {
&expand, /* *NextItem */
0,0,120,10, /* LeftEdge, TopEdge, Width, Height */
ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags */
NULL, (APTR)&abouttext, /* MutualExclude, ItemFill */
NULL,NULL, /* Command, *SubItem */
NULL /* NextSelect */
};
struct Menu project = {
&waves, /* *NextMenu */
0,0,80,10, /* LeftEdge, TopEdge, Width, Height */
MENUENABLED, /* Flags */
"Project", /* *MenuName */
&about /* First Item */
};
/****************************************/
/* "about" requester structures */
/****************************************/
struct IntuiText OK = {0,1,JAM2,5,4,NULL,"OK",NULL};
struct IntuiText About7 = {0,1,JAM2,8,85,NULL,
"Click on either <OK> box to proceed",
NULL};
struct IntuiText About6 = {0,1,JAM2,8,70,NULL,
" internet: meyer@iastate.edu",
&About7};
struct IntuiText About5 = {0,1,JAM2,8,60,NULL,
"Ames, IA, 50011, USA. BITNET: MEYER@ALISUVAX",
&About6};
struct IntuiText About4 = {0,1,JAM2,8,50,NULL,
"W. T. Meyer, 12 Physics, Iowa State University,",
&About5};
struct IntuiText About3 = {0,1,JAM2,8,30,NULL,
"Comments and suggestions may be sent to:",
&About4};
struct IntuiText About2 = {0,1,JAM2,8,20,NULL,
"Copyright (c) 1990, 1991 by W. T. Meyer.",
&About3};
struct IntuiText About1 = {0,1,JAM2,8,10,NULL,
"WaveMaker is freely distributable for noncommercial use.",
&About2};
/*************************************/
/* "Answers" requester structures */
/*************************************/
char Answers[80];
struct IntuiText Answer3 = {0,1,JAM2,8,30,NULL,
"Click on either <OK> box to proceed",
NULL};
struct IntuiText Answer2 = {0,1,JAM2,8,20,NULL,
(char *)&Answers,&Answer3};
struct IntuiText Answer1 = {0,1,JAM2,8,10,NULL,
"The answers are:",&Answer2};
/************************************************************/
main()
/************************************************************/
{
ULONG mclass;
USHORT mcode,mqual,gadID,gadno,gadtyp,i;
USHORT amptopot();
unsigned seed;
LONG pottoamp(),MakeWave();
SHORT potsign,keyraw,keyup,keyrepeat;
struct Gadget *mgadget;
struct PropInfo *propinfo;
VOID OpenLibs(),WaveCleanup(),MakeDisplay(),MakeSin(),MakePalette();
VOID AmpsUpDate(),PropUpdate(),DrawBoxes(),DrawUser();
VOID SoundOn(),SoundOff(),MenuSetup(),DoMenu(),OpenAudio();
VOID Update(),InitArrays();
/* Initialization */
OpenLibs();
OpenAudio();
seed = (unsigned)time(NULL);
srand(seed);
MakeSin();
for (i=0;i<8;++i) amps[i]=0;
InitArrays();
MakeDisplay();
SetMenuStrip(Window,&project);
/* Set up an IDCMP Read Loop */
for(;;) {
Wait(1<<Window->UserPort->mp_SigBit);
while((mesg=(struct IntuiMessage *)
GetMsg(Window->UserPort))!=NULL) /* Wait for IntuiMessage */
{
mclass = mesg->Class; /* Run through all of them */
mcode = mesg->Code; /* Local copies of variables*/
mqual = mesg->Qualifier;
mgadget =(struct Gadget *)mesg->IAddress;
switch(mclass)
{
case CLOSEWINDOW:
{
WaveCleanup();
Exit(TRUE);
break;
}
case REFRESHWINDOW:
{
DrawBoxes();
Update(0);
break;
}
case MENUPICK:
{
DoMenu(mcode);
break;
}
case GADGETDOWN:
{
gadID = mgadget->GadgetID;
gadno = gadID&0x7;
gadtyp = gadID&0x78;
switch(gadtyp)
{
case UPARROW:
if (amps[gadno]>=0) ++amps[gadno];
else --amps[gadno];
Update(gadno);
ModifyProp(propadd[gadno],Window,NULL,
FREEVERT|AUTOKNOB,0xFFFF,
amptopot(amps[gadno]),0x0800,0x0800);
break;
case DNARROW:
if (amps[gadno]>=0) --amps[gadno];
else ++amps[gadno];
Update(gadno);
ModifyProp(propadd[gadno],Window,NULL,
FREEVERT|AUTOKNOB,0xFFFF,
amptopot(amps[gadno]),0x0800,0x0800);
break;
case PLUSMINUS:
amps[gadno]=-amps[gadno];
Update(gadno);
break;
case PROPOR:
break;
case SELECT:
if (selflag & bitval[gadno])
selflag=selflag&bitval[gadno+8];
else
selflag = selflag | bitval[gadno];
DrawUser();
break;
}
break;
}
case GADGETUP:
{
gadID = mgadget->GadgetID;
gadno = gadID&0x7;
gadtyp = gadID&0x38;
switch(gadtyp)
{
case UPARROW:
break;
case DNARROW:
break;
case PLUSMINUS:
break;
case PROPOR:
potsign=1;
if (amps[gadno]<0) potsign=-1;
propinfo=(struct PropInfo *)mgadget->SpecialInfo;
amps[gadno]=pottoamp(propinfo->VertPot,
potsign);
Update(gadno);
break;
case SELECT:
break;
}
break;
}
case RAWKEY:
keyrepeat=mqual&IEQUALIFIER_REPEAT;
keyraw = mcode&0x7F;
keyup = mcode&0x80;
if (keyup==0&&!keyrepeat)
SoundOn(keyraw,usersound);
if (keyup!=0) SoundOff(keyraw);
break;
}
ReplyMsg(mesg); /* Give message back */
}
}
}