home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
369b.lha
/
MED_v2.0
/
Source
/
medsrc
/
med-newmsgh.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-05-03
|
23KB
|
746 lines
/* MED-newmsgh.c --- viestien käsittely (V2.00:sta alkaen) */
/* Uuden msghandlerin kirjoittamisen urakka aloitettu 12.10.1989 */
#include <hardware/custom.h>
#include "med.h"
#define SHIFT (IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT)
#define ALT (ALTLEFT|ALTRIGHT)
extern struct CIA far ciaa;
extern struct Custom far custom;
extern struct Image pylvasimage;
extern struct RastPort *wrp;
extern struct Kappale far tamakappale;
extern struct Window *window,*pw;
extern struct NewWindow far pnw;
extern struct Screen *screen;
extern struct StringInfo strinfo[];
extern struct PropInfo far propinfo[];
extern struct Image far kuviot,far loadgadgimg,far savegadgimg;
extern struct Gadget far gadget1[],far gadget2[],far gadget3[],far gadget4[];
extern struct Gadget far gadget5[],far gadget6[],far gadget9[],far *glists[];
extern struct Gadget far gadget7[],far gadgetA[];
extern UWORD *imgdataptr[],far nappokt,chip mouse0[],chip mouse1[];
extern BOOL naytonpaivitys,aanipaalla[];
extern LONG pylvasalku0;
extern void __asm PaivitaNaytto(register __d0 BOOL);
extern void __asm Korosta(register __a0 struct Gadget *,register __d0 BOOL);
extern char kappaleennimi[];
extern UBYTE firstdisptrk,thiscol;
UWORD nykyinenosio;
UBYTE far klevx[] = { 0,0,0,0,24,0,0,0,8,8,8,8,0,24,0,0,0,8,8,8,8,0,24,0,0,0,
8,8,8,8,0,24,0,0,0,8,8,8,8,0 };
UBYTE far midiactive = 0;
UWORD lohkoja,soittimennum = 1,kursorix = 4,currtrk = 0,currpos = 0;
BOOL ilmoitusnakyy = FALSE;
UWORD volatile tempo = 60,soittorivi,soittolohko,soittolohkonnum,soittotila;
struct Lohko far *lohko[100];
BOOL KasitteleGadget();
static BOOL KasitteleOsio7();
void OsionValinta(),KasitteleNappain();
static void KasitteleOsio2(),KasitteleOsio3(),KasitteleOsio4();
static void KasitteleOsio5(),KasitteleOsio6(),HandlePlainKey();
static void KasitteleOsio9(),KasitteleOsioA();
static UBYTE f5_10line[5] = { 0,16,32,48,63 },waitsomething;
static char *abouttxt[] = { "MED2.00 by Teijo Kinnunen, 1990",
"Address: Oksantie 19...","SF-86300 OULAINEN, FINLAND",
"IFF 8SVX loader by S. Hayes","Then some greetings:",
"Greetings to Topi & Osku","and of course, to Erkki Hannila",
"MED is in Public Domain","Copy me!!!",
"The End." };
BOOL __asm KasitteleViesti(register __d0 ULONG luokka,
register __d1 UWORD koodi,register __d2 UWORD qual,
register __a0 APTR osoite)
{
if(waitsomething) {
if(waitsomething == 1 && pw) {
if(luokka == MOUSEBUTTONS && koodi == SELECTUP) return(0);
pylvasalku0 = 0L; CloseWindow(pw); pw = NULL;
Korosta(&gadget3[6],(BOOL)pylvasalku0); }
waitsomething = 0;
}
if(ilmoitusnakyy && (!(luokka == MOUSEBUTTONS && koodi ==
SELECTUP) && (luokka != RAWKEY || (luokka == RAWKEY &&
!(koodi & 0x80))))) Ilmoita(NULL);
switch(luokka) {
case RAWKEY:
KasitteleNappain(koodi,qual);
break;
case GADGETDOWN:
case GADGETUP:
return(KasitteleGadget(osoite));
case MOUSEBUTTONS:
if(koodi == MENUDOWN) {
ShowTitle(screen,naytonpaivitys);
if(!(naytonpaivitys = !naytonpaivitys)) {
RemEqualizer();
RemCopperList();
} else if(gadget3[21].GadgetID & 0x1000)
InitEqualizer();
}
}
return(0); /* ei lopu */
}
BOOL KasitteleGadget(APTR addr)
{
UWORD gid = (((struct Gadget *)addr)->GadgetID) & 0xfff;
switch(gid & 0xf00) {
case 0x100: OsionValinta((struct Gadget *)addr); break;
case 0x200: KasitteleOsio2(gid); break;
case 0x300: KasitteleOsio3(gid); break;
case 0x400: KasitteleOsio4(gid); break;
case 0x500: KasitteleOsio5(gid); break;
case 0x600: KasitteleOsio6(gid); break;
case 0x700: return(KasitteleOsio7(gid)); break;
case 0x900: KasitteleOsio9(gid); break;
case 0xA00: KasitteleOsioA(gid); break;
case 0xF00:
if(gid == 0xF00) KasitteleOsio6(0x600);
else if(gid == 0xF01) KasitteleOsio6(0x601);
else if(gid == 0xF02) {
if(nappokt < 3) KasitteleOsio6(nappokt + 0x613);
else KasitteleOsio6(0x612);
}
}
return(0);
}
void KasitteleNappain(UWORD koodi,UWORD qual)
{
if(qual & IEQUALIFIER_CONTROL) {
switch(koodi) {
case 0x50: case 0x51: case 0x52: case 0x53: case 0x54: case 0x55:
OsionValinta(&gadget1[koodi - 0x50]);
return;
case 0x57: OsionValinta(&gadget1[6]); return;
case 0x58: OsionValinta(&gadget1[7]); return;
case 0x05: case 0x06:
if(qual & SHIFT) EditHandler(koodi+0x100);
else KasitteleOsio3(0x302 + koodi);
break;
case CURSORLEFT:
if(firstdisptrk) firstdisptrk -= 4;
else firstdisptrk = lohko[soittolohko]->numtracks - 4;
currtrk = firstdisptrk + currpos;
PaivitaNaytto(TRUE); DispInfoGadgets();
break;
case CURSORRIGHT:
firstdisptrk += 4;
if(firstdisptrk >= lohko[soittolohko]->numtracks)
firstdisptrk = 0;
currtrk = firstdisptrk + currpos;
PaivitaNaytto(TRUE); DispInfoGadgets();
break;
case 0x3E: KasitteleOsio3(0x30C); break;
case 0x1E: KasitteleOsio3(0x30D); break;
case 0x3D: KasitteleOsio3(0x30E); break;
case 0x1D: KasitteleOsio3(0x30F); break;
case 0x2D: KasitteleOsio3(0x311); break;
case 0x2F: KasitteleOsio3(0x310); break;
case 0x0F: KasitteleOsio3(0x312); break;
case 0x3C: KasitteleOsio3(0x313); break;
case 0x2E: KasitteleOsio3(0x314); break;
case 0x20: KasitteleOsio6(0x619); break;
case 0x13: RetFileName(); break;
case 0x37: SetMark(); break;
case 0x32: case 0x33: case 0x34:
HandleMark(koodi); break;
default: if((qual & SHIFT) && koodi >= 0x01 &&
koodi <= 0x0A) EditHandler(koodi+0x100);
else HandlePlainKey(koodi,qual);
}
}
else if(qual & AMIGAKEYS) {
if(koodi == 0x28) KasitteleOsio2(0x214);
else if(koodi == 0x17) {
OsionValinta(&gadget1[2]);
if(qual & SHIFT) {
tamakappale.soitin[soittimennum][0] = 0;
RefreshGList(&gadget4[0],window,NULL,1);
}
ActivateGadget(&gadget4[0],window,NULL);
}
else if(koodi == 0x23) KasitteleOsio3(0x305);
else if(koodi == 0x26) KasitteleOsio4(0x406);
else if(koodi == 0x33) KasitteleOsio5(qual&SHIFT?0x50D:0x50A);
else if(koodi == 0x32) KasitteleOsio5(qual&SHIFT?0x50E:0x50B);
else if(koodi == 0x34) KasitteleOsio5(qual&SHIFT?0x50F:0x50C);
else if(koodi == 0x19) KasitteleOsio3(0x300);
else if(koodi == 0x13 && nykyinenosio == 4)
ActivateGadget(&gadget4[8],window,NULL);
else HandlePlainKey(koodi,qual);
}
else if((qual & SHIFT) && (qual & ALT)) {
if(koodi >= 0x50 && koodi <= 0x59) Ilmoita(abouttxt[koodi-0x50]);
else if(koodi == 0x40) KasitteleOsio3(0x300);
else HandlePlainKey(koodi,qual);
}
else if(qual & SHIFT) {
switch(koodi) {
case 0x40: KasitteleOsio3(0x303); break;
case 0x1D: case 0x1E: case 0x1F:
KasitteleOsio6(0x5ED+koodi); break;
case 0x2D: case 0x2E: case 0x2F:
KasitteleOsio6(0x5E0+koodi); break;
case 0x3D: case 0x3E: case 0x3F:
KasitteleOsio6(0x5D3+koodi); break;
default:
if((koodi >= 0x01 && koodi <= 0x0A) ||
koodi == 0x46)
EditHandler(koodi);
else HandlePlainKey(koodi,qual);
}
}
else if(qual & ALT) {
if(koodi == 0x40) KasitteleOsio3(0x304);
else HandlePlainKey(koodi,qual);
}
else if(koodi == 0x40) KasitteleOsio3(0x302); /* Stop playing */
else HandlePlainKey(koodi,qual);
}
static void HandlePlainKey(UWORD koodi,UWORD qual)
{
switch(koodi) {
case CURSORUP:
if(qual & SHIFT) KasitteleOsio5(0x509);
else if(qual & ALT) KasitteleOsio5(0x506);
else {
if((gadget6[1].GadgetID & 0x1000) &&
!(soittorivi & 0x01) && soittorivi-- == 0)
soittorivi = 63;
if(soittorivi-- == 0) { soittorivi = 63; PaivitaNaytto(FALSE); }
else PaivitaNaytto(FALSE);
}
break;
case CURSORDOWN:
if(qual & SHIFT) KasitteleOsio5(0x508);
else if(qual & ALT) KasitteleOsio5(0x507);
else {
if((gadget6[1].GadgetID & 0x1000) &&
!(soittorivi & 0x01)) soittorivi++;
if(++soittorivi > 63) { soittorivi -= 64; PaivitaNaytto(FALSE); }
else PaivitaNaytto(FALSE);
}
break;
case CURSORLEFT:
if(qual & SHIFT) {
if(qual & ALT) {
soittimennum = (soittimennum > 16 ?
16 : 1);
PaivitaSoittimennimi();
} else EdSoitin();
} else {
NaytaKursori();
if(qual & ALT) {
if(kursorix == currpos * 9 + 4)
if(!currpos--) currpos = 3;
kursorix = currpos * 9 + 4;
}
else if(kursorix == 4) kursorix = 38;
else {
kursorix--;
if(!klevx[kursorix])
while(!klevx[--kursorix]);
}
currpos = (kursorix<12?0:(kursorix<21?1:(kursorix<30?2:3)));
currtrk = firstdisptrk + currpos;
NaytaKursori();
}
break;
case CURSORRIGHT:
if(qual & SHIFT) {
if(qual & ALT) {
soittimennum = (soittimennum < 15 ?
15 : 31);
PaivitaSoittimennimi();
} else SeurSoitin();
} else {
NaytaKursori();
if(qual & ALT) {
if(++currpos > 3) currpos = 0;
kursorix = currpos * 9 + 4;
}
else if(kursorix == 38) kursorix = 4;
else {
kursorix++;
if(!klevx[kursorix])
while(!klevx[++kursorix]);
}
currpos = (kursorix<12?0:(kursorix<21?1:(kursorix<30?2:3)));
currtrk = firstdisptrk + currpos;
NaytaKursori();
}
break;
case 0x50: case 0x51: case 0x52: case 0x53: case 0x54:
KasitteleOsio6(0x5C2+koodi); break;
case 0x55: case 0x56: case 0x57: case 0x58: case 0x59:
soittorivi = (UWORD)(f5_10line[koodi - 0x55]);
PaivitaNaytto(FALSE); break;
case 0x45: /* Esc */ KasitteleOsio6(0x600); break;
case 0x1D: case 0x1E: case 0x1F:
KasitteleOsio6(0x5E5+koodi); break;
case 0x2D: case 0x2E: case 0x2F:
KasitteleOsio6(0x5D8+koodi); break;
case 0x3D: case 0x3E: case 0x3F:
KasitteleOsio6(0x5CB+koodi); break;
case 0x5F: Ilmoita("Try Shift+Alt+F1-10!!!"); break;
case 0: KasitteleOsio6(0x601); break; /* 2×space */
default:
SoitaNappain(koodi,TRUE,qual);
}
}
void OsionValinta(struct Gadget *gd)
{
UWORD edno = nykyinenosio;
struct Gadget *scangptr;
if((gd->GadgetID & 0xff) == nykyinenosio) return; /* ei nykyistä */
RemoveGList(window,gadget1[10].NextGadget,-1);
nykyinenosio = 1; /* Korosta() tarkistaa nykyisen osion */
if(edno) Korosta(&gadget1[edno >= 0x09 ? edno-3 : edno - 2],FALSE);
edno = gd->GadgetID & 0xff;
Korosta(&gadget1[edno >= 0x09 ? edno-3 : edno-2],TRUE);
nykyinenosio = edno;
kuviot.ImageData = imgdataptr[nykyinenosio];
DrawImage(&(screen->RastPort),&kuviot,5,18);
if(nykyinenosio == 2) {
if(gadget2[10].GadgetID & 0x1000)
DrawImage(&(screen->RastPort),&loadgadgimg,162,19);
else DrawImage(&(screen->RastPort),&savegadgimg,162,19);
}
for(scangptr = glists[nykyinenosio];scangptr;scangptr = scangptr->NextGadget)
if(scangptr->GadgetID & 0x1000) { /* on korostettu */
scangptr->GadgetID &= ~0x1000; /* korostus pois */
Korosta(scangptr,TRUE); /* ja korostetaan taas */
}
AddGList(window,glists[nykyinenosio],-1,-1,NULL);
RefreshGList(glists[nykyinenosio],window,NULL,-1);
switch(nykyinenosio) { /* osiokohtainen näytönpäivitys */
case 0x2:
UpdateFReqDsp(); break;
case 0x4: case 0x5: case 0x9: /* soitin, lohko, midi */
PaivitaSoittimennimi(); break;
case 0x3: /* soitto */
TulostaSoittoLohkot(); ShowTempo(); break;
case 0x6: DispFNnum(); break;
case 0x7: /* muut - lootien värit kohdalleen */
SetAPen(wrp,4); RectFill(wrp,55,52,62,59);
SetAPen(wrp,5); RectFill(wrp,65,52,72,59);
SetAPen(wrp,6); RectFill(wrp,75,52,82,59);
SetAPen(wrp,7); RectFill(wrp,85,52,92,59);
SetAPen(wrp,0); DrawColorGadgets(-1);
GetUndoColors(); break;
case 0xA: PlayTransp(tamakappale.playtransp);
}
}
static void KasitteleOsio2(UWORD gid) /* tiedostot */
{
switch(gid) {
case 0x20A:
Korosta(&gadget2[10],TRUE);
Korosta(&gadget2[11],FALSE);
DrawImage(&(screen->RastPort),&loadgadgimg,162,19);
RemoveGList(window,gadget2[16].NextGadget,-1);
AddGList(window,&gadget2[17],-1,-1,NULL);
break;
case 0x20B:
Korosta(&gadget2[10],FALSE);
Korosta(&gadget2[11],TRUE);
DrawImage(&(screen->RastPort),&savegadgimg,162,19);
RemoveGList(window,gadget2[16].NextGadget,-1);
AddGList(window,&gadget2[20],-1,-1,NULL);
if(gadget2[25].GadgetID & 0x1000) {
gadget2[25].GadgetID &= ~0x1000;
Korosta(&gadget2[25],TRUE);
}
break;
case 0x214: case 0x215: case 0x216: case 0x217: case 0x218:
case 0x219: case 0x21A: case 0x21B:
KasitteleOsio3(0x302); /* Stop playing!!! */
SetPointer(window,&mouse0[0],23,16,-1,0);
switch(gid) {
case 0x214: LoadSong(kappaleennimi);
break;
case 0x215: LoadInstrument(kappaleennimi,FALSE);
break;
case 0x216: STModLoader(kappaleennimi);
break;
case 0x217: SaveSong(kappaleennimi,FALSE);
break;
case 0x218: SaveRawSample(kappaleennimi);
break;
case 0x219: STSongSaver(kappaleennimi);
break;
case 0x21A: SaveSong(kappaleennimi,TRUE);
break;
case 0x21B: WriteObj(kappaleennimi);
break;
}
SetPointer(window,&mouse1[0],23,16,-1,0);
if(gid != 0x218) ClrFileName();
break;
case 0x209:
break;
case 0x21C:
Korosta(&gadget2[25],(BOOL)(gadget2[25].GadgetID &
0x1000 ? FALSE : TRUE));
break;
default:
FReqHandler(gid);
}
}
static void KasitteleOsio3(UWORD gid) /* soitto */
{
UWORD edsoittotila = soittotila;
switch(gid) {
case 0x300: /* Soita kappale */
soittorivi = soittolohkonnum = 0;
case 0x303: /* Jatka kappaletta */
soittotila = SOITAKAPPALE;
soittolohko = tamakappale.soittojarjestys[soittolohkonnum];
Korosta(&gadget3[0],TRUE);
Korosta(&gadget3[1],FALSE);
if(edsoittotila == ALASOITA) ciaa.ciacra |= CIACRAF_START;
break;
case 0x301: /* Soita lohkoa */
soittorivi = 0;
case 0x304: /* Jatka lohkoa */
soittotila = SOITALOHKO;
Korosta(&gadget3[0],FALSE);
Korosta(&gadget3[1],TRUE);
if(edsoittotila == ALASOITA) ciaa.ciacra |= CIACRAF_START;
break;
case 0x302: /* Soitto seis!! */
soittotila = ALASOITA;
Korosta(&gadget3[0],FALSE);
Korosta(&gadget3[1],FALSE);
SammutaAanet(999);
SetPointer(window,&mouse1[0],23,16,-1,0);
break;
case 0x305: /* Suodatin */
tamakappale.liput ^= LIPPU_SUODATINPAALLA;
AsetaSuodatin();
break;
case 0x306:
if(!pylvasalku0) {
if(screen->Height >= 256) pylvasalku0 =
(LONG)(screen->BitMap.Planes[0]+8484);
else if(pw = OpenWindow(&pnw)) {
DrawImage(pw->RPort,&pylvasimage,0,0);
pylvasalku0=(LONG)(screen->BitMap.Planes[0]+1124);
waitsomething = 1; }
}
else if(screen->Height >= 256) pylvasalku0 = 0L;
Korosta(&gadget3[6],(BOOL)pylvasalku0);
break;
case 0x307: case 0x308: /* Liu'utus: 5 / 6 */
tamakappale.vaihtoja = gid - 0x302;
Korosta(&gadget3[7],(BOOL)(tamakappale.vaihtoja ==
6 ? FALSE : TRUE));
Korosta(&gadget3[8],(BOOL)(tamakappale.vaihtoja ==
6 ? TRUE : FALSE));
break;
case 0x309: ChgTempo((propinfo[1].HorizPot + 137) / 274 + 1);
break;
case 0x30A: if(tempo > 1) ChgTempo(tempo - 1); break;
case 0x30B: if(tempo < 240) ChgTempo(tempo + 1); break;
case 0x30C: if(soittolohkonnum) soittolohkonnum--; break;
case 0x30D: if(soittolohkonnum <
tamakappale.kappaleen_pituus) soittolohkonnum++; break;
case 0x30E: soittolohkonnum = 0; break;
case 0x30F: soittolohkonnum =
tamakappale.kappaleen_pituus - 1; break;
case 0x310: if(soittolohkonnum == /* + */
tamakappale.kappaleen_pituus) {
if(tamakappale.kappaleen_pituus < 100) {
tamakappale.soittojarjestys[
(++tamakappale.kappaleen_pituus)-1] =0;
}
else DisplayBeep(screen);
}
else if(tamakappale.soittojarjestys[
soittolohkonnum] < lohkoja-1)
tamakappale.soittojarjestys[soittolohkonnum]++;
break;
case 0x311: if(soittolohkonnum == /* - */
tamakappale.kappaleen_pituus) {
if(tamakappale.kappaleen_pituus > 1) {
tamakappale.kappaleen_pituus--;
soittolohkonnum--;
}
}
else if(tamakappale.soittojarjestys[soittolohkonnum] > 0)
tamakappale.soittojarjestys[soittolohkonnum]--;
break;
case 0x312: InsertSeq(0); break;
case 0x313: DelSeq(); break;
case 0x314: InsertSeq(soittolohko); break;
case 0x315: Korosta(&gadget3[21],(BOOL)(!(gadget3[21].
GadgetID & 0x1000)));
if(naytonpaivitys) {
if(gadget3[21].GadgetID & 0x1000)
InitEqualizer();
else { RemEqualizer(); RemCopperList(); }
}
break;
}
if(gid >= 0x30C && gid <= 0x311) {
TulostaLohkoJaSoitin();
TulostaSoittoLohkot();
}
}
static void KasitteleOsio5(UWORD gid) /* lohko 1 */
{
UWORD chgblock;
switch(gid) {
case 0x508: /* seur.lohko */
if(soittolohko < lohkoja-1) soittolohko++;
break;
case 0x506: /* ens. */
soittolohko = 1; /* ovelasti tehty, eikö vain */
case 0x509: /* ed.lohko */
if(soittolohko) soittolohko--;
break;
case 0x507: /* viim. */
soittolohko = lohkoja - 1;
break;
case 0x504: /* Uusi */
if(lohkoja < 100 && !AllocBlock(lohkoja,4)) lohkoja++;
TulostaLohkoJaSoitin();
break;
case 0x505: /* Tuhoa viim. */
if(lohkoja > 1 && soittolohko < lohkoja - 1)
FreeBlock(--lohkoja);
TulostaLohkoJaSoitin();
break;
case 0x500: /* Uusi tähän */
NewBlockHere(soittolohko,4);
break;
case 0x501: /* Tuhoa tämä */
DelBlockHere(soittolohko);
break;
case 0x50A: case 0x50B: case 0x50C: case 0x50D:
CutCopyPaste(soittolohko,0,64,currtrk,1,gid-0x50A);
PaivitaNaytto(TRUE);
break;
case 0x50E: case 0x50F: case 0x510: case 0x511:
CutCopyPaste(soittolohko,0,64,0,lohko[soittolohko]->
numtracks,gid - 0x50E);
PaivitaNaytto(TRUE);
break;
case 0x512: case 0x513: case 0x514: case 0x515:
chgblock = soittolohko;
if(ChangeBlockSize(chgblock,gid - 0x511))
Ilmoita("Probably out of memory!!");
TulostaLohkoJaSoitin();
break;
}
if(gid >= 0x506 && gid <= 0x509) { /* vaihdettiin lohkoa */
soittorivi = 0;
PaivitaNaytto(FALSE);
}
}
static void KasitteleOsio4(UWORD gid) /* soitin */
{
switch(gid) {
case 0x401:
soittimennum = 1;
PaivitaSoittimennimi();
break;
case 0x402:
soittimennum = 31;
PaivitaSoittimennimi();
break;
case 0x403:
EdSoitin();
break;
case 0x404:
SeurSoitin();
break;
case 0x405: case 0x400:
SetPointer(window,&mouse0[0],23,16,-1,0);
tamakappale.stoisto[soittimennum] =
tamakappale.stoistonpit[soittimennum] = 0;
if(!LoadInstrument(tamakappale.soitin[soittimennum],
TRUE)) Ilmoita("Sample is now loaded.");
PaivitaSoittimennimi();
SetPointer(window,&mouse1[0],23,16,-1,0);
break;
case 0x406: /* hyppääkö ukko?????????? */
tamakappale.hyppysoitin ^= 1<<soittimennum;
if(tamakappale.hyppysoitin & (1<<soittimennum))
Korosta(&gadget4[6],TRUE);
else Korosta(&gadget4[6],FALSE);
break;
case 0x407: RemoveInstrument(); break;
case 0x408: GetRepeat(); break;
case 0x409: GetRepLen(); break;
case 0x40A:
if(tamakappale.soittimenvoimakkuus[soittimennum])
tamakappale.soittimenvoimakkuus[soittimennum]--;
DispVolGadget();
break;
case 0x40C:
if(tamakappale.soittimenvoimakkuus[soittimennum] < 64)
tamakappale.soittimenvoimakkuus[soittimennum]++;
DispVolGadget();
break;
case 0x40B:
tamakappale.soittimenvoimakkuus[soittimennum] =
(propinfo[2].HorizPot + 512) / 1024;
DispVolGadget();
break;
}
}
static void KasitteleOsio6(UWORD gid) /* eli editointi */
{
if(gid >= 0x612 && gid <= 0x615) {
Korosta(&gadget6[nappokt + 18],FALSE);
nappokt = gid - 0x612;
Korosta(&gadget6[nappokt + 18],TRUE);
} else if(gid >= 0x602 && gid <= 0x611) {
Korosta(&gadget6[gid - 0x600],(BOOL)(aanipaalla[gid -
0x602] = !aanipaalla[gid - 0x602]));
if(!aanipaalla[gid - 0x602]) SammutaAanet(gid - 0x602);
} else if(gid == 0x600)
Korosta(&gadget6[0],(BOOL)(!(gadget6[0].GadgetID & 0x1000)));
else if(gid == 0x601) Korosta(&gadget6[1],(BOOL)(!(gadget6[1].GadgetID & 0x1000)));
else if(gid == 0x619) Korosta(&gadget6[25],(BOOL)(!(gadget6[25].GadgetID & 0x1000)));
else if(gid >= 0x617 && gid <= 0x61C) EditHandler(gid);
DispInfoGadgets(); /* ^^ jump to local handler routine ^^ */
}
static void KasitteleOsio9(UWORD gid)
{
switch(gid) {
case 0x900:
if(gadget9[0].GadgetID & 0x1000) {
Korosta(&gadget9[0],FALSE);
Korosta(&gadget9[23],FALSE);
FreeSerial();
midiactive = 0;
} else if(!GetSerial()) {
Korosta(&gadget9[0],TRUE);
midiactive = 1;
}
break;
case 0x901:
if(!tamakappale.midikanava[soittimennum])
tamakappale.midikanava[soittimennum] = 1;
PaivitaSoittimennimi();
break;
case 0x902:
tamakappale.midikanava[soittimennum] = 0;
PaivitaSoittimennimi();
break;
case 0x914:
if(tamakappale.midipreset[soittimennum])
tamakappale.midipreset[soittimennum]--;
DispPresetGadget();
break;
case 0x915:
tamakappale.midipreset[soittimennum] =
(propinfo[3].HorizPot + 254) / 508;
DispPresetGadget();
break;
case 0x916:
if(tamakappale.midipreset[soittimennum] < 128)
tamakappale.midipreset[soittimennum]++;
DispPresetGadget();
break;
case 0x913:
if(strinfo[5].LongInt < 0 || strinfo[5].LongInt
> 128) {
DisplayBeep(screen);
} else tamakappale.midipreset[soittimennum] =
(UBYTE)(strinfo[5].LongInt);
DispPresetGadget();
break;
case 0x917:
if(midiactive) { Korosta(&gadget9[23],
(BOOL)(!(gadget9[23].GadgetID & 0x1000)));
if(gadget9[23].GadgetID & 0x1000)
custom.intena = 0x8800; /*RBF on*/
else custom.intena = 0x0800; /*RBF off*/
}
break;
default:
if(gid >= 0x903 && gid <= 0x912) {
tamakappale.midikanava[soittimennum] =
gid - 0x902;
PaivitaSoittimennimi();
}
}
}
static BOOL KasitteleOsio7(UWORD gid)
{
switch(gid) {
case 0x70D: case 0x70E: case 0x70F:
if(gid == 0x70D) tamakappale.liput &= ~LIPPU_HYPPELYPAALLA;
else if(gid == 0x70E) tamakappale.liput |=
(LIPPU_HYPPELYPAALLA|LIPPU_HYPPELYTAHTIIN);
else { tamakappale.liput |= LIPPU_HYPPELYPAALLA;
tamakappale.liput &= ~LIPPU_HYPPELYTAHTIIN;
}
UpdateJumpGadgets();
break;
case 0x711: case 0x712: case 0x713:
if(gadget7[gid - 0x701].GadgetID & 0x1000)
Korosta(&gadget7[gid - 0x701],FALSE);
else {
Korosta(&gadget7[16],(BOOL)(gid == 0x711));
Korosta(&gadget7[17],(BOOL)(gid == 0x712));
Korosta(&gadget7[18],(BOOL)(gid == 0x713));
}
break;
case 0x714:
KasitteleOsio3(0x302);
if(gadget7[16].GadgetID & 0x1000) {
Korosta(&gadget7[16],FALSE);
AlustaKappale(TRUE); PaivitaNaytto(TRUE);
} else if(gadget7[17].GadgetID & 0x1000) {
Korosta(&gadget7[17],FALSE);
AlustaKappale(FALSE); PaivitaNaytto(FALSE);
} else if(gadget7[18].GadgetID & 0x1000) {
Korosta(&gadget7[18],FALSE);
return(1); /* QUIT !!!!!! */
}
break;
default:
if(gid >= 0x700 && gid <=0x70C) ColorHandler(gid);
}
return(0);
}
void KasitteleOsioA(UWORD gid)
{
static BYTE trtb[4] = { 12,1,-1,-12 };
switch(gid) {
case 0xA0C: PlayTransp(tamakappale.playtransp - 1); break;
case 0xA0D: PlayTransp((propinfo[4].HorizPot + 1311) / 2622 - 13); break;
case 0xA0E: PlayTransp(tamakappale.playtransp + 1); break;
case 0xA11: case 0xA12:
Korosta(&gadgetA[17],(BOOL)(gid == 0xA11));
Korosta(&gadgetA[18],(BOOL)(gid == 0xA12));
break;
case 0xA0F: ExpandBlock(soittolohko); break;
case 0xA10: ShrinkBlock(soittolohko); break;
default:
if(gid >= 0xA00 && gid <= 0xA0B)
Transpose(trtb[gid & 0x0003],(gid -
0xA00) / 4);
break;
}
}
void MIDIon() /* called by Load120Song if there are any MIDI instruments */
{
if(!midiactive) KasitteleOsio9(0x900);
}