/**********************************************************************/ /* */ /* 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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include 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 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 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<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 */ } } }