home *** CD-ROM | disk | FTP | other *** search
- /* MED - by Teijo Kinnunen 1989, 1990 V2.00 */
- /* med-scr.c: screen handling routines */
- #include <graphics/gfxmacros.h>
- #include <graphics/sprite.h>
- #include <hardware/custom.h>
- #include <math.h> /* abs() */
- #include "med.h"
- #define SUURINSOITIN 31
- extern void __asm Korosta(register __a0 struct Gadget *,register __d0 BOOL);
- extern void __asm PaivitaNaytto(register __d0 BOOL);
- extern void __asm SetTempo(register __d0 UWORD);
- extern struct Kappale far tamakappale;
- extern struct Gadget far gadget3[],far gadget4[],far gadget1[],far gadgetA[];
- extern struct Gadget far gadget6[],far gadget9[],far gadget5[],far gadget7[];
- extern struct Gadget far gadget2[];
- extern struct Soitin *soitin[];
- extern char toistostr[],tpitstr[];
- extern struct CIA far ciaa;
- extern struct StringInfo strinfo[];
- extern UWORD volatile soittimennum,lohkoja,kursorix,soittorivi;
- extern UWORD volatile soittolohko,soittolohkonnum,tempo;
- extern UWORD chip eq1[],chip eq2[],chip eq3[],chip eq4[];
- extern BOOL ilmoitusnakyy,aanipaalla[];
- extern struct Custom far custom;
- extern struct RastPort *wrp;
- extern struct Window *window;
- extern struct Screen *screen;
- extern struct ViewPort *vp;
- extern struct BitMap nayttobm;
- extern struct Image far oktimg[];
- extern struct PropInfo propinfo[];
- extern UWORD nykyinenosio,far nappokt,currtrk;
- extern struct Lohko far *lohko[];
- extern UBYTE firstdisptrk;
- BOOL AlustaKappale();
- void TulostaSoittoLohkot(),Ilmoita(),DrawColorGadgets(),UpdateJumpGadgets();
- void TulostaLohkoJaSoitin(),AsetaSuodatin(),PaivitaSoittimennimi();
- void NollaaVarit(),DispVolGadget(),DelBlockHere(),DispPresetGadget();
- UBYTE near heksaluku[] = { '0','1','2','3','4','5','6','7','8','9','A','B','C',
- 'D','E','F','G','H','I','J','K','L','M','N','O',
- 'P','Q','R','S','T','U','V' },specialupd,thiscol;
- UBYTE equalizerok = 0;
- UWORD chip tmpA[20];
- static UWORD undocolors[8] = {
- 0x0000,0x0ccc,0x0556,0x099a,0x0f00,0x0f66,0x0f99,0x0fcc };
- static UBYTE allocsprmsk = 0,coplist = 0,sname[50];
-
- BOOL AlustaKappale(BOOL nollaasoittimet)
- {
- UCOUNT lsk;
- FreeAllBlocks();
- tamakappale.id = ((long)('M')<<24L|(long)('E')<<16L|('D')<<8|3);
- if(nollaasoittimet) {
- VapautaSoittimet();
- for(lsk = 0; lsk <= SUURINSOITIN; lsk++) {
- tamakappale.soitin[lsk][0] = '\0';
- tamakappale.soittimenvoimakkuus[lsk] = 64;
- tamakappale.stoisto[lsk] = tamakappale.stoistonpit[lsk] = 0;
- tamakappale.midikanava[lsk] = tamakappale.midipreset[lsk] = 0;
- }
- }
- tamakappale.soittojarjestys[0]=soittorivi=soittolohko=soittolohkonnum = 0;
- tamakappale.kappaleen_pituus = lohkoja = soittimennum = 1;
- tamakappale.vaihtoja = 6;
- tamakappale.playtransp = 0;
- tamakappale.liput = LIPPU_HYPPELYPAALLA;
- tamakappale.hyppysoitin = NULL;
- AsetaSuodatin();
- if(AllocBlock(0,4)) return(TRUE);
- tamakappale.tempo = 33;
- SetTempo(34);
- PaivitaSoittimennimi();
- NollaaVarit();
- UpdateJumpGadgets();
- return(0);
- }
-
- void PaivitaSoittimennimi()
- {
- static UWORD prevmch = 0;
- UWORD remnum;
- if(nykyinenosio == 4) remnum = RemoveGadget(window,&gadget4[0]);
- strinfo[2].Buffer = tamakappale.soitin[soittimennum];
- strinfo[2].DispPos = 0;
- if(nykyinenosio == 4) {
- char num[12],npit;
- AddGadget(window,&gadget4[0],remnum);
- RefreshGList(&gadget4[0],window,NULL,1);
- SetAPen(wrp,0); SetBPen(wrp,3);
- Move(wrp,136,26);
- num[0] = heksaluku[soittimennum]; /* Tulosta numero */
- Text(wrp,num,1);
- if(soitin[soittimennum])
- npit = stcul_d(num,soitin[soittimennum]->length);
- else { num[0] = '-'; npit = 1; }
- Move(wrp,179,26);
- Text(wrp," ",6 - npit); /* pyyhitΣΣn vas. reuna */
- Text(wrp,num,npit); /* Tulostetaan soittimen pituus */
- remnum = RemoveGList(window,&gadget4[8],2);
- strinfo[3].LongInt = tamakappale.stoisto[soittimennum];
- strinfo[4].LongInt = tamakappale.stoistonpit[soittimennum];
- strinfo[3].DispPos = strinfo[4].DispPos = 0;
- (void)stcu_d(toistostr,tamakappale.stoisto[soittimennum]);
- (void)stcu_d(tpitstr,tamakappale.stoistonpit[soittimennum]);
- AddGList(window,&gadget4[8],remnum,2,NULL);
- RefreshGList(&gadget4[8],window,NULL,2); /* stringit */
- DispVolGadget();
- } else if(nykyinenosio == 9) {
- if(tamakappale.midikanava[soittimennum]) {
- Korosta(&gadget9[1],TRUE);
- Korosta(&gadget9[2],FALSE);
- if(prevmch && prevmch != tamakappale.midikanava[
- soittimennum]) Korosta(&gadget9[prevmch+2],FALSE);
- prevmch = tamakappale.midikanava[soittimennum];
- Korosta(&gadget9[prevmch+2],TRUE);
- } else {
- Korosta(&gadget9[1],FALSE);
- Korosta(&gadget9[2],TRUE);
- if(prevmch) Korosta(&gadget9[prevmch+2],FALSE);
- prevmch = 0;
- }
- DispPresetGadget();
- }
- if(tamakappale.hyppysoitin & (1 << soittimennum))
- Korosta(&gadget4[6],TRUE);
- else Korosta(&gadget4[6],FALSE);
- TulostaLohkoJaSoitin();
- }
-
- void TulostaSoittoLohkot()
- {
- register UBYTE sjarj,sjarjkymm = 0;
- UCOUNT rivilaskin;
- char lohkoteksti[2];
- if(nykyinenosio != 3) return;
- SetAPen(wrp,1);
- for(rivilaskin = 0; rivilaskin < 3; rivilaskin++) {
- sjarj = tamakappale.soittojarjestys[soittolohkonnum - 1 + rivilaskin];
- lohkoteksti[0] = 0;
- while(sjarj >= 10) { sjarj -= 10; sjarjkymm++; lohkoteksti[0]++; }
- if(lohkoteksti[0]) lohkoteksti[0] += '0';
- else lohkoteksti[0] = ' ';
- lohkoteksti[1] = '0' + sjarj;
- Move(wrp,175,26 + 8 * rivilaskin);
- if(soittolohkonnum + rivilaskin == 0 ||
- soittolohkonnum + rivilaskin > tamakappale.kappaleen_pituus) {
- lohkoteksti[0] = lohkoteksti[1] = ' '; }
- if(rivilaskin == 1) SetBPen(wrp,2); else SetBPen(wrp,3);
- Text(wrp,lohkoteksti,2);
- }
- SetAPen(wrp,0);
- }
-
- void Ilmoita(teksti)
- char *teksti;
- {
- static char edellinenteksti[40] = "";
- extern char title[];
- if(!teksti) {
- BltBitMapRastPort(&nayttobm,0,0,wrp,0,0,275,13,0xc0);
- ilmoitusnakyy = FALSE;
- }
- else {
- if(ilmoitusnakyy && !strcmp(edellinenteksti,teksti)) return;
- strcpy(edellinenteksti,teksti);
- SetAPen(wrp,0);
- RectFill(wrp,1,1,274,12);
- Move(wrp,5,10);
- SetAPen(wrp,1);
- SetDrMd(wrp,JAM1);
- Text(wrp,teksti,strlen(teksti));
- SetDrMd(wrp,JAM2);
- SetAPen(wrp,0);
- ilmoitusnakyy = TRUE;
- }
- }
-
- static void kymmenjarj(ptr,luku)
- UBYTE *ptr;
- UBYTE luku;
- {
- *ptr = '0';
- while(luku >= 10) { luku -= 10; (*ptr)++; }
- *(ptr+1) = '0'+luku;
- }
-
- void TulostaLohkoJaSoitin()
- {
- static UWORD prevtrknum = 4;
- static char tulteksti[] = " / ";
- char snimitxt[11],cnt,mrkjalj = strlen(tamakappale.soitin[soittimennum]);
- kymmenjarj(&tulteksti[0],(UBYTE)(soittolohkonnum + 1));
- kymmenjarj(&tulteksti[3],tamakappale.kappaleen_pituus);
- Move(wrp,13,72);
- SetAPen(wrp,0); SetBPen(wrp,3);
- Text(wrp,tulteksti,5);
- kymmenjarj(&tulteksti[0],soittolohko);
- kymmenjarj(&tulteksti[3],(lohkoja - 1));
- Move(wrp,64,72);
- Text(wrp,tulteksti,5);
- tulteksti[0] = heksaluku[soittimennum];
- Move(wrp,116,72);
- Text(wrp,tulteksti,1);
- tulteksti[1] = firstdisptrk / 4 + '1';
- tulteksti[3] = lohko[soittolohko]->numtracks / 4 + '0';
- Move(wrp,136,72);
- Text(wrp,tulteksti+1,3);
- for(cnt = 0; cnt < 10; cnt++) {
- if(mrkjalj-- > 0) snimitxt[cnt] = tamakappale.soitin[soittimennum][cnt];
- else snimitxt[cnt] = ' ';
- }
- Move(wrp,234,72);
- Text(wrp,snimitxt,10);
- if(nykyinenosio == 9) {
- Move(wrp,32,25);
- Text(wrp,snimitxt,10);
- }
- else if(nykyinenosio == 5) {
- UWORD plblock = soittolohko;
- if(lohko[plblock]->numtracks != prevtrknum) {
- Korosta(&gadget5[15 + prevtrknum / 4],FALSE);
- prevtrknum = lohko[plblock]->numtracks;
- Korosta(&gadget5[15 + prevtrknum / 4],TRUE);
- }
- }
- }
-
- void AsetaSuodatin()
- {
- if(tamakappale.liput & LIPPU_SUODATINPAALLA) {
- ciaa.ciapra &= ~CIAF_LED;
- Korosta(&gadget3[5],TRUE);
- } else {
- ciaa.ciapra |= CIAF_LED;
- Korosta(&gadget3[5],FALSE);
- }
- }
-
- void NollaaVarit()
- {
- SetRGB4(vp,0,0x0,0x0,0x0);
- SetRGB4(vp,1,0xc,0xc,0xc);
- SetRGB4(vp,2,0x5,0x5,0x6);
- SetRGB4(vp,3,0x9,0x9,0xa);
- SetRGB4(vp,4,0xf,0x0,0x0);
- SetRGB4(vp,5,0xf,0x6,0x6);
- SetRGB4(vp,6,0xf,0x9,0x9);
- SetRGB4(vp,7,0xf,0xc,0xc);
- DrawColorGadgets(thiscol);
- }
-
- void DispVolGadget()
- {
- char num[2];
- if(nykyinenosio == 4) {
- if(tamakappale.soittimenvoimakkuus[soittimennum])
- ModifyProp(&gadget4[11],window,NULL,AUTOKNOB|FREEHORIZ|PROPBORDERLESS,
- tamakappale.soittimenvoimakkuus[soittimennum] * 1024 - 1,0,0x400,0);
- else ModifyProp(&gadget4[11],window,NULL,AUTOKNOB|FREEHORIZ|PROPBORDERLESS,
- 0,0,0x400,0);
- kymmenjarj(num,tamakappale.soittimenvoimakkuus[soittimennum]);
- Move(wrp,56,58);
- Text(wrp,num,2); /* Lopuksi soittimen voimakkuus */
- }
- }
-
- void DispPresetGadget()
- {
- extern char presetstr[];
- UWORD rempos;
- if(nykyinenosio != 9) return;
- if(tamakappale.midipreset[soittimennum])
- ModifyProp(&gadget9[21],window,NULL,AUTOKNOB|FREEHORIZ|PROPBORDERLESS,
- tamakappale.midipreset[soittimennum] * 512 - 1,0,508,0);
- else ModifyProp(&gadget9[21],window,NULL,AUTOKNOB|FREEHORIZ|PROPBORDERLESS,
- 0,0,508,0);
- rempos = RemoveGadget(window,&gadget9[19]);
- stci_d(presetstr,tamakappale.midipreset[soittimennum]);
- strinfo[5].LongInt = tamakappale.midipreset[soittimennum];
- AddGadget(window,&gadget9[19],rempos);
- RefreshGList(&gadget9[19],window,NULL,1);
- }
-
- void NewBlockHere(UWORD hblock,UWORD tracks)
- {
- UWORD blockcnt;
- if(lohkoja < 100) {
- blockcnt = lohkoja++;
- for(; blockcnt > hblock; blockcnt--)
- lohko[blockcnt] = lohko[blockcnt-1];
- lohko[hblock] = 0L;
- if(AllocBlock(hblock,tracks)) DelBlockHere(hblock);
- else for(blockcnt = 0; blockcnt <
- tamakappale.kappaleen_pituus; blockcnt++)
- if(tamakappale.soittojarjestys[blockcnt] >= hblock)
- tamakappale.soittojarjestys[blockcnt]++;
- } else Ilmoita("No more than 100 blocks!!");
- TulostaLohkoJaSoitin();
- PaivitaNaytto(TRUE);
- }
-
- void DelBlockHere(UWORD hblock)
- {
- UWORD blockcnt = hblock;
- if(lohkoja > 1) {
- if(soittolohko >= lohkoja-1) soittolohko--;
- FreeBlock(blockcnt);
- for(;blockcnt < lohkoja; blockcnt++)
- lohko[blockcnt] = lohko[blockcnt+1];
- lohko[lohkoja--] = 0L;
- for(blockcnt = 0; blockcnt < tamakappale.kappaleen_pituus; blockcnt++)
- if(tamakappale.soittojarjestys[blockcnt] >= hblock
- && tamakappale.soittojarjestys[blockcnt])
- tamakappale.soittojarjestys[blockcnt]--;
- }
- TulostaLohkoJaSoitin();
- PaivitaNaytto(TRUE);
- }
-
- void DispInfoGadgets()
- {
- UWORD choncnt;
- for(choncnt = 0; choncnt < 16; choncnt++) {
- register UWORD starty = choncnt > 7 ? 71 : 67;
- register UWORD startx = 3 * (choncnt & 0x7) + 205;
- if(aanipaalla[choncnt]) {
- SetAPen(wrp,4);
- WritePixel(wrp,startx,starty);
- WritePixel(wrp,startx,starty + 1);
- WritePixel(wrp,startx + 1,starty + 1);
- SetAPen(wrp,6);
- WritePixel(wrp,startx + 1,starty);
- }
- else {
- SetAPen(wrp,1);
- WritePixel(wrp,startx,starty);
- WritePixel(wrp,startx,starty + 1);
- WritePixel(wrp,startx + 1,starty);
- WritePixel(wrp,startx + 1,starty + 1);
- }
- }
- SetAPen(wrp,0);
- choncnt = nykyinenosio;
- nykyinenosio = 0xF;
- Korosta(&gadget1[8],(BOOL)(gadget6[0].GadgetID & 0x1000));
- Korosta(&gadget1[9],(BOOL)(gadget6[1].GadgetID & 0x1000));
- nykyinenosio = choncnt;
- DrawImage(wrp,&oktimg[nappokt],164,66);
- }
-
- void ShowTempo()
- {
- UWORD remnum,new = tempo; /* <- because tempo is volatile */
- UBYTE tempostr[4] = "000";
- if(nykyinenosio == 3) remnum = RemoveGadget(window,&gadget3[9]);
- propinfo[1].HorizPot = 274 * tempo - 225;
- if(nykyinenosio == 3) {
- AddGadget(window,&gadget3[9],remnum);
- RefreshGList(&gadget3[9],window,NULL,1);
- Move(wrp,104,45);
- while(new >= 100) { new -= 100; tempostr[0]++; }
- while(new >= 10) { new -= 10; tempostr[1]++; }
- while(new) { new--; tempostr[2]++; }
- Text(wrp,tempostr,3);
- }
- }
-
- void SpecialUpdate()
- {
- extern UWORD chip mouse1[];
- if(specialupd & 0x1) { /* bit #0 = filter */
- if(ciaa.ciapra & CIAF_LED) Korosta(&gadget3[5],FALSE);
- else Korosta(&gadget3[5],TRUE);
- specialupd &= ~0x1;
- }
- if(specialupd & 0x2) { /* bit #1 = stop playing */
- Korosta(&gadget3[0],FALSE);
- Korosta(&gadget3[1],FALSE);
- SetPointer(window,&mouse1[0],23,16,-1,0);
- specialupd &= ~0x2;
- }
- if(specialupd & 0x4) { /* change tempo */
- ShowTempo();
- specialupd &= ~0x4;
- }
- }
-
- void ChgTempo(UWORD new)
- {
- tamakappale.tempo = new;
- SetTempo(new);
- SpecialUpdate(); /* SetTempo() will set specialupd flag */
- }
-
- static void DispColVals(UWORD r,UWORD g,UWORD b)
- {
- Move(wrp,107,27);
- Text(wrp,&heksaluku[r],1);
- Move(wrp,107,37);
- Text(wrp,&heksaluku[g],1);
- Move(wrp,107,47);
- Text(wrp,&heksaluku[b],1);
- }
-
- void DrawColorGadgets(UBYTE newcolor)
- {
- static BYTE currcol = 0;
- UWORD newrgb,r,g,b;
- static WORD far boxdata[] = { -1,-1,8,-1,8,8,-1,8,-1,0 };
- static struct Border far box = { 0,0,7,0,COMPLEMENT,5,boxdata,NULL };
- if(nykyinenosio != 7) return;
- if(newcolor != -1) {
- DrawBorder(wrp,&box,10 * currcol + 15,52);
- currcol = newcolor;
- }
- DrawBorder(wrp,&box,10 * currcol + 15,52);
- newrgb = GetRGB4(vp->ColorMap,currcol);
- r = (newrgb & 0x0f00) >> 8;
- g = (newrgb & 0x00f0) >> 4;
- b = newrgb & 0x000f;
- ModifyProp(&gadget7[0],window,NULL,AUTOKNOB|FREEHORIZ|PROPBORDERLESS,
- r * (MAXPOT / 15),0,MAXBODY / 16,0);
- ModifyProp(&gadget7[1],window,NULL,AUTOKNOB|FREEHORIZ|PROPBORDERLESS,
- g * (MAXPOT / 15),0,MAXBODY / 16,0);
- ModifyProp(&gadget7[2],window,NULL,AUTOKNOB|FREEHORIZ|PROPBORDERLESS,
- b * (MAXPOT / 15),0,MAXBODY / 16,0);
- DispColVals(r,g,b);
- }
-
- void GetUndoColors()
- {
- UCOUNT counter = 0;
- for(;counter < 8; counter++) undocolors[counter] =
- GetRGB4(vp->ColorMap,counter);
- }
-
- static void UndoColors()
- {
- UCOUNT counter = 0;
- for(;counter < 8; counter++) SetRGB4(vp,counter,
- (undocolors[counter] & 0x0f00) >> 8,(undocolors[counter] &
- 0x00f0) >> 4,undocolors[counter] & 0x000f);
- DrawColorGadgets(thiscol);
- }
-
- void ColorHandler(UWORD gid)
- {
- if(gid >= 0x703 && gid <= 0x70A)
- DrawColorGadgets(thiscol = (UBYTE)(gid - 0x703));
- else if(gid >= 0x700 && gid <= 0x702) {
- UWORD rgb[3];
- rgb[0] = propinfo[5].HorizPot / 4096;
- rgb[1] = propinfo[6].HorizPot / 4096;
- rgb[2] = propinfo[7].HorizPot / 4096;
- SetRGB4(vp,thiscol,rgb[0],rgb[1],rgb[2]);
- DispColVals(rgb[0],rgb[1],rgb[2]);
- ModifyProp(&gadget7[gid - 0x700],window,NULL,
- AUTOKNOB|FREEHORIZ|PROPBORDERLESS,
- rgb[gid - 0x700] * (MAXPOT / 15),0,MAXBODY/16,0);
- }
- else if(gid == 0x70B) NollaaVarit();
- else if(gid == 0x70C) UndoColors();
- }
-
- void RemoveInstrument()
- {
- if(soitin[soittimennum]) {
- FreeMem((void *)soitin[soittimennum],soitin[soittimennum]->
- length + sizeof(struct Soitin));
- soitin[soittimennum] = NULL;
- tamakappale.soitin[soittimennum][0] = '\0';
- tamakappale.soittimenvoimakkuus[soittimennum] = 64;
- tamakappale.stoisto[soittimennum] = tamakappale.
- stoistonpit[soittimennum] = 0;
- tamakappale.midikanava[soittimennum] =
- tamakappale.midipreset[soittimennum] = 0;
- tamakappale.hyppysoitin &= ~(1<<soittimennum);
- PaivitaSoittimennimi();
- }
- }
-
- void GetRepeat()
- {
- LONG newrep = strinfo[3].LongInt;
- if(newrep < 0) tamakappale.stoisto[soittimennum] = 0;
- else tamakappale.stoisto[soittimennum] = (UWORD)newrep;
- PaivitaSoittimennimi();
- if(nykyinenosio == 4) ActivateGadget(&gadget4[9],window,NULL);
- }
-
- void GetRepLen()
- {
- LONG newrl = strinfo[4].LongInt;
- if(newrl < 0) tamakappale.stoistonpit[soittimennum] = 0;
- else tamakappale.stoistonpit[soittimennum] = (UWORD)newrl;
- PaivitaSoittimennimi();
- }
-
- void InsertSeq(UBYTE num)
- {
- UWORD pbnum = soittolohkonnum,cnt;
- if(tamakappale.kappaleen_pituus >= 99) {
- Ilmoita("Max = 99 sequences!!");
- return;
- }
- for(cnt = tamakappale.kappaleen_pituus; cnt > pbnum; cnt--)
- tamakappale.soittojarjestys[cnt] = tamakappale.soittojarjestys[cnt-1];
- tamakappale.kappaleen_pituus++;
- tamakappale.soittojarjestys[pbnum] = num;
- TulostaSoittoLohkot();
- TulostaLohkoJaSoitin();
- }
-
- void DelSeq()
- {
- UWORD pbnum = soittolohkonnum,cnt;
- if(tamakappale.kappaleen_pituus <= 1 || pbnum >= tamakappale.
- kappaleen_pituus) return;
- tamakappale.kappaleen_pituus--;
- for(cnt = pbnum; cnt < tamakappale.kappaleen_pituus; cnt++)
- tamakappale.soittojarjestys[cnt] = tamakappale.soittojarjestys[cnt+1];
- TulostaSoittoLohkot();
- TulostaLohkoJaSoitin();
- }
-
- void PlayTransp(BYTE transp)
- {
- char num[3];
- UWORD pos;
- if(transp < -12) transp = -12;
- else if(transp > 12) transp = 12;
- tamakappale.playtransp = transp;
- if(nykyinenosio == 0xA) pos = RemoveGadget(window,&gadgetA[13]);
- propinfo[4].HorizPot = 2622 * (transp + 13) - 15;
- if(nykyinenosio == 0xA) {
- AddGadget(window,&gadgetA[13],pos);
- RefreshGList(&gadgetA[13],window,NULL,1);
- }
- kymmenjarj(&num[1],abs(transp));
- if(transp < 0) num[0] = '-'; else num[0] = ' ';
- SetAPen(wrp,2);
- Move(wrp,203,40);
- Text(wrp,num,3);
- }
-
- static void TransposeTrack(UWORD block,UBYTE track,BYTE steps)
- {
- UBYTE *endptr,*noteptr = &lohko[block]->music[0];
- BYTE newnote;
- endptr = noteptr + 3 * lohko[block]->numtracks * 64;
- if(track != 0xff) noteptr += 3*track;
- while(noteptr < endptr) {
- if(newnote = *noteptr & 0x7f) {
- if(gadgetA[17].GadgetID & 0x1000 ||
- (((*(noteptr+1) >> 4) + (*noteptr & 0x80 ?
- 16 : 0)) == soittimennum)) {
- newnote += steps;
- if(newnote <= 0) newnote += 12;
- else if(newnote > 63) newnote -= 12;
- *noteptr &= 0x80;
- *noteptr |= newnote;
- }
- }
- if(track != 0xff) noteptr += 3 * lohko[block]->numtracks;
- else noteptr += 3;
- }
- }
-
- void Transpose(BYTE steps,UBYTE obj)
- {
- if(obj == 0) { /* whole song */
- UWORD blockcnt;
- for(blockcnt = 0; blockcnt < lohkoja; blockcnt++)
- TransposeTrack(blockcnt,0xff,steps);
- } else if(obj==1) TransposeTrack(soittolohko,0xff,steps); /*block*/
- else if(obj == 2) TransposeTrack(soittolohko,(UBYTE)currtrk,steps);
- PaivitaNaytto(TRUE);
- }
-
- void ClrFileName() /* Clears the file name, so the user can't */
- { /* accidentaly load a new song. */
- register UWORD pos;
- extern char kappaleennimi[];
- if(kappaleennimi[0] == '\0') return;
- if(nykyinenosio == 2) pos = RemoveGadget(window,&gadget2[9]);
- strcpy(sname,kappaleennimi);
- kappaleennimi[0] = '\0';
- if(nykyinenosio == 2) {
- AddGadget(window,&gadget2[9],pos);
- RefreshGList(&gadget2[9],window,NULL,1);
- }
- }
-
- void RetFileName()
- {
- register UWORD pos;
- if(nykyinenosio == 2) pos = RemoveGadget(window,&gadget2[9]);
- strcpy(kappaleennimi,sname);
- if(nykyinenosio == 2) {
- AddGadget(window,&gadget2[9],pos);
- RefreshGList(&gadget2[9],window,NULL,1);
- }
- }
-
- static void CreateCopperList()
- {
- static UWORD cols[] = { 0xf21,0xf31,0xf41,0xf51,0xf62,0xf72,0xf82,
- 0xf92,0xfa2,0xfb2,0xfc2,0xfd3,0xfe3,0xff3,0xef3,0xcf2,
- 0xbf2,0x9f2,0x8f1,0x6f1,0x4f1,0x2f0,0x0f0,0x0e0,0x0d0,
- 0x0c0,0x0b0,0x0a0,0x090,0x080 };
- UWORD colcnt,ycount = 137;
- struct UCopList *cl;
- if(coplist) return;
- cl = (struct UCopList *)AllocMem(sizeof(struct UCopList),
- MEMF_PUBLIC|MEMF_CHIP|MEMF_CLEAR);
- if(!cl) return;
- SetRGB4(vp,21,0xa,0xa,0xa); SetRGB4(vp,22,0xa,0xa,0xa);
- SetRGB4(vp,23,0xb,0xb,0xb); SetRGB4(vp,25,0xa,0xa,0xa);
- SetRGB4(vp,26,0xa,0xa,0xa); SetRGB4(vp,27,0xb,0xb,0xb);
- for(colcnt = 0; colcnt < 30; colcnt++) {
- CWAIT(cl,ycount,0);
- CMove(cl,(long)(&custom.color[22]),(long)cols[colcnt]);
- CBump(cl);
- CMove(cl,(long)(&custom.color[26]),(long)cols[colcnt]);
- CBump(cl);
- ycount += 2;
- }
- CEND(cl);
- vp->UCopIns = cl;
- RethinkDisplay();
- coplist = 1;
- }
-
- void RemCopperList() /* Remove our beautiful copper colors */
- {
- struct UCopList *uins = vp->UCopIns,*this;
- if(!coplist) return;
- Forbid();
- vp->UCopIns = 0;
- RethinkDisplay();
- while(uins) {
- this = uins;
- FreeCopList(uins->FirstCopList);
- uins = uins->Next;
- FreeMem((void *)this,sizeof(struct UCopList));
- }
- Permit();
- coplist = 0;
- }
-
- void RemEqualizer()
- {
- if(!equalizerok) return;
- equalizerok = 0;
- if(allocsprmsk & 1) { FreeSprite(2); allocsprmsk &= ~1; }
- if(allocsprmsk & 2) { FreeSprite(3); allocsprmsk &= ~2; }
- if(allocsprmsk & 4) { FreeSprite(4); allocsprmsk &= ~4; }
- if(allocsprmsk & 8) { FreeSprite(5); allocsprmsk &= ~8; }
- }
-
- void InitEqualizer()
- {
- static struct SimpleSprite ss1 = { eq1,64,75,134,0 },
- ss2 = {áeq2,64,147,134,0 },ss3 = {áeq3,64,219,134,0 },
- ss4 = {áeq4,64,291,134,0 };
- if(equalizerok) return;
- if(GetSprite(&ss1,2) == -1) { RemEqualizer(); return; }
- allocsprmsk |= 1;
- if(GetSprite(&ss2,3) == -1) { RemEqualizer(); return; }
- allocsprmsk |= 2;
- if(GetSprite(&ss3,4) == -1) { RemEqualizer(); return; }
- allocsprmsk |= 4;
- if(GetSprite(&ss4,5) == -1) { RemEqualizer(); return; }
- allocsprmsk |= 8;
- ChangeSprite(vp,&ss1,eq1);
- ChangeSprite(vp,&ss2,eq2);
- ChangeSprite(vp,&ss3,eq3);
- ChangeSprite(vp,&ss4,eq4);
- if(!coplist) CreateCopperList();
- equalizerok = 1;
- }
-
- void UpdateJumpGadgets()
- {
- Korosta(&gadget7[13],(BOOL)(!(tamakappale.liput & LIPPU_HYPPELYPAALLA)));
- if(tamakappale.liput & LIPPU_HYPPELYPAALLA) {
- Korosta(&gadget7[14],(BOOL)(tamakappale.liput &
- LIPPU_HYPPELYTAHTIIN));
- Korosta(&gadget7[15],(BOOL)(!(tamakappale.liput &
- LIPPU_HYPPELYTAHTIIN)));
- } else {
- Korosta(&gadget7[14],FALSE);
- Korosta(&gadget7[15],FALSE);
- }
- }
-