home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-385-Vol-1of3.iso
/
d
/
dir_nm20.zip
/
Dir_NM_2.0
/
NM-Input.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-07-16
|
45KB
|
1,606 lines
/* === NM-Input.c ===
*
* void Copy_Chord(From_Num,To_Num,At_high)
* void Get_Nt_At(Num,At_high,Nt,At)
* void Get_The_Set(M_Id,Id)
* int MS_Input(button,Ms_x,Ms_y,Mdy_Id,nx,ny,At_high)
* void Adjust_Cursor(button,Val)
* int Get_Input_Info(Melody_Id)
* void Select_Sample(ch)
* void Move_Left()
* void Move_Right()
* void Move_Up()
* void Move_Down()
* void Insert_Note()
* void Lock()
* void Page_Up()
* void Page_Down()
* void Delete_Note()
* void End()
* void Return()
* void Get_Timbre(ch)
* void Play_Note()
* void Do_KeyPress(ch)
* void Input(Melody_Id)
*
*/
#include "NM.h"
int y,bk,twice,kp,kw,kx,fine[3],insert,finish,onto,c_nm,FORLIM;
int V_way,V_pg,V_i,V_p,V_nx,V_ny,V_x,V_y,V_z,V_Bar_Num;
int H_way,H_pg,H_i,H_p,H_nx,H_ny,H_x,H_y,H_z,H_Bar_Num;
int L_way,L_pg,L_i,L_p,L_nx,L_ny,L_x,L_y,L_z,L_Bar_Num;
char STR1[256];
void Copy_Chord(From_Num,To_Num,At_high)
int From_Num,To_Num,At_high;
{
St[M_Id][To_Num][At_high].nt[0]=St[M_Id][From_Num][At_high].nt[0];
St[M_Id][To_Num][At_high].nt[1]=St[M_Id][From_Num][At_high].nt[1];
St[M_Id][To_Num][At_high].nt[2]=St[M_Id][From_Num][At_high].nt[2];
St[M_Id][To_Num][At_high].nt[3]=St[M_Id][From_Num][At_high].nt[3];
St[M_Id][To_Num][At_high].act=St[M_Id][From_Num][At_high].act;
St[M_Id][To_Num][At_high].vol=St[M_Id][From_Num][At_high].vol;
}
void Get_Nt_At(Num,At_high,Nt,At)
int Num,At_high,Nt,At;
{
St[M_Id][Num][At_high].nt[0]=Nt;St[M_Id][Num][At_high].nt[1]=0;
St[M_Id][Num][At_high].nt[2]=0;St[M_Id][Num][At_high].nt[3]=0;
St[M_Id][Num][At_high].act=At;
}
void Get_The_Set(M_Id,Id)
int M_Id,Id;
{
int i;
for (i=1;i<7;i++)
{
if (i<4)
{
if (0<cont[Id].tempo[i-1] && cont[Id].tempo[i-1]<=content[0])
{ St[M_Id][0][1].nt[i]=cont[Id].tempo[i-1];Get_Tempo(M_Id,i); }
if (0<cont[Id].instru[i-1] && cont[Id].instru[i-1]<=Timbre_num)
St[M_Id][1][1].nt[i]=cont[Id].instru[i-1];
}
else
{
if (0<cont[Id].tempo[i-1] && cont[Id].tempo[i-1]<=content[0])
{ St[M_Id][0][2].nt[i-3]=cont[Id].tempo[i-1];Get_Tempo(M_Id,3-i); }
if (0<cont[Id].instru[i-1] && cont[Id].instru[i-1]<=Timbre_num)
St[M_Id][1][2].nt[i-3]=cont[Id].instru[i-1];
}
}
Tableout(M_Id);
}
int MS_Input(button,Ms_x,Ms_y,Mdy_Id,nx,ny,At_high)
int button,Ms_x,Ms_y,Mdy_Id,nx,ny,At_high;
{
int story,z,x,y,P,New_Note,Add,bk,way,Num,Low_Y,High_Y;
Num=0;way=story=(Ms_y-35)/Dist;z=story*Dist;x=Ms_x/36;
y=((Ms_y-35)%Dist)/4;New_Note=Y_Nt(y,At_high);
P=Count(Mdy_Id,(page*2+story)*30+x,&story,At_high);
if (At_high==2) { Low_Y=-1;High_Y=27; }
else if (At_high==1) { Low_Y=V_Ht/4-1;High_Y=V_Ht/4+30; }
else if (At_high==0) { Low_Y=V_Ht/4+22;High_Y=V_Ht/4+54; }
for (bk=0;bk<4;bk++)
if (0<St[Mdy_Id][P][At_high].nt[bk] && St[Mdy_Id][P][At_high].nt[bk]<600)
Num++;
M_i=St[Mdy_Id][0][At_high].nt[0]+1;
if (St_Start-1<P && P<St[Mdy_Id][0][At_high].nt[0]+1 && Low_Y<y && y<High_Y)
{
if (button==Button1) Add=1;
else if (button==Button2) Add=0;
else if (button==Button3)
{
Add=-1;
if (insert)
{
for (bk=M_i;bk>=P;bk--) Copy_Chord(bk-1,bk,At_high);
Get_Nt_At(P,At_high,600,0);
St[Mdy_Id][P][At_high].act=Volumn;
M_i++;St[Mdy_Id][0][At_high].nt[0]=M_i-1;
}
}
if (Re_Order_Notes(Mdy_Id,P,New_Note,Add,nx,ny,At_high)==1)
{
Semi_Blank(x,z,At_high);if (At_high!=2) Semi_Blank(x,z,1-At_high);
if (Add==-1 || (Add==1 && Num==0))
{
if (At_high==2) Showpage(Mdy_Id,page,way*30+x,0,2,1);
else Showpage(Mdy_Id,page,way*30+x,0,1,-1);
if (P<M_p) return 3000; /* Show Cursor */
}
else
{
Display_Note(Mdy_Id,P,z,x,0,At_high);
if (At_high!=2 && P<St[Mdy_Id][0][1-At_high].nt[0]+1)
Display_Note(Mdy_Id,P,z,x,0,1-At_high);
}
return P;
}
}
else if (P<St_Start && button==Button3)
{
switch (x)
{
case 1:St[Mdy_Id][St_Start-3][At_high].nt[1]=200;break;
case 2:St[Mdy_Id][St_Start-2][At_high].nt[1]=200;break;
case 3:St[Mdy_Id][St_Start-2][At_high].nt[2]=200;break;
case 4:St[Mdy_Id][St_Start-2][At_high].nt[3]=200;break;
case 5:St[Mdy_Id][St_Start-1][At_high].nt[1]=200;break;
case 6:St[Mdy_Id][St_Start-1][At_high].nt[2]=200;break;
case 7:St[Mdy_Id][St_Start-1][At_high].nt[3]=200;break;
}
Semi_Blank(x,z,At_high);
}
return -100;
}
void Adjust_Cursor(button,Val)
int button,Val;
{
if (-1<Val && (Val==M_p || Val==3000 || (Val<M_p && (button==Button3))))
{
Dot(x*36+14,z+y*4+32);Addline(x*36,y,z,On_High);
highlight(x*36+5,z+y*4-ny*20+28,26,37);
}
else switch (Val)
{
case -1:Dot(x*36+14,z+y*4+32);highlight(x*36+5,z+y*4-ny*20+28,26,37);
highlight(nx*40+173,ny*42+740,26,37);
if (On_High==2)
{
if (page!=V_pg) Showpage(M_Id,V_pg,1,0,2,-1);
L_pg=page;L_way=way;L_x=x;L_y=y;L_z=z;L_nx=nx;L_ny=ny;
L_i=M_i;L_p=M_p;L_Bar_Num=M_Bar_Num;
page=V_pg;way=V_way;x=V_x;y=V_y;z=V_z;
nx=V_nx;ny=V_ny;M_i=V_i;M_p=V_p;M_Bar_Num=V_Bar_Num;
Rub(820,3,40,25,"MediumBlue");Use_Font("12x24");
SetColor("gold");
Out_I_XY(820,26,St[M_Id][7][On_High].nt[0]);
}
else if (On_High==0)
{
if (page!=L_pg) Showpage(M_Id,L_pg,1,0,2,-1);
H_pg=page;H_way=way;H_x=x;H_y=y;H_z=z;H_nx=nx;H_ny=ny;
H_i=M_i;H_p=M_p;H_Bar_Num=M_Bar_Num;
page=L_pg;way=L_way;x=L_x;y=L_y;z=L_z;
nx=L_nx;ny=L_ny;M_i=L_i;M_p=L_p;M_Bar_Num=L_Bar_Num;
Rub(820,3,40,25,"MediumBlue");Use_Font("12x24");
SetColor("gold");
Out_I_XY(820,26,St[M_Id][7][On_High].nt[0]);
}
else if (On_High==1)
{
if (page!=H_pg) Showpage(M_Id,H_pg,1,0,2,-1);
V_pg=page;V_way=way;V_x=x;V_y=y;V_z=z;V_nx=nx;V_ny=ny;
V_i=M_i;V_p=M_p;V_Bar_Num=M_Bar_Num;
page=H_pg;way=H_way;x=H_x;y=H_y;z=H_z;
nx=H_nx;ny=H_ny;M_i=H_i;M_p=H_p;M_Bar_Num=H_Bar_Num;
Rub(820,3,40,25,"MediumBlue");Use_Font("12x24");
SetColor("gold");
Out_I_XY(820,26,St[M_Id][7][On_High].nt[0]);
}
Dot(x*36+14,z+y*4+32);Addline(x*36,y,z,On_High);
highlight(x*36+5,z+y*4-ny*20+28,26,37);
highlight(nx*40+173,ny*42+740,26,37);Renew_Bar_Num();
break;
case -2:highlight(nx*40+173,ny*42+740,26,37);
break;
}
}
int Get_Input_Info(Melody_Id)
int Melody_Id;
{
int i;
Rub(0,480,1139,400,"MediumBlue");Rub(0,480,1139,2,"yellow");SetColor("green");
Use_Font("12x24");OutTextXY(430,540,"--- Input a melody ---");
tail=content[next];
if (Melody_Id==-1)
{
OutTextXY(310,630,"Input new one (Y/N) ?");ch=GetKey();
if (ch != 'N') ch='Y';sprintf(STR1,"%c",ch);OutTextXY(590,630,STR1);
if (ch!='N') M_Id=content[next];
else
{ OutTextXY(400,680,"Melody number:");readat(620,680,3,&M_Id);M_Id--; }
if (M_Id>1000)
{
OutTextXY(400,700,"No more than 1000 melodys !");
do { } while ((ch=GetKey())!='!');
return -1;
}
}
else M_Id=Melody_Id;
if (now != next) { now=next;if (content[now]>0) Load(); }
marker=0;c_nm=0;
if (M_Id>content[now]-1) { tail=content[now]+1;M_Id=tail-1; } else marker=1;
S_bf=(char *)malloc(10);*S_bf='\0';i=now*1000+M_Id;sprintf(S_bf,"%5ld",i+1);
if (M_Id<content[now]) /* Edit old one */
{
SetColor("green");OutTextXY(436,730,"Change name ?");ch=GetKey();
if (ch=='Y') c_nm=1;else ch='N';
sprintf(STR1,"%c",ch);OutTextXY(678,730,STR1);
}
if (ch!='N')
{
OutTextXY(310,780,"Melody name:");strcpy(names[i],S_bf);ch='.';j=0;
OutTextXY(j*12+457,780,S_bf);
do {
sprintf(names[i]+strlen(names[i]),"%c",ch);
sprintf(STR1,"%c",ch);OutTextXY(j*12+522,780,STR1);j++;ch=getkey();
} while (ch != '!' && j != 34);
if (j==1) sprintf(names[i]+strlen(names[i]),"%s","New");
sprintf(names[i]+strlen(names[i]),"%c",'\n');
}
/*
OutTextXY(420,600,"Five-line ?");ch=GetKey();
if (ch=='N' || ch=='Y') { sprintf(STR1,"%c",ch);OutTextXY(584,600,STR1); }
if (ch!='N') five=1;else five=0;
*/
five=1;
if (now>0)
{
if (marker != 1)
{
Clear_Array(M_Id,now);St[M_Id][3][1].nt[0]=76;St[M_Id][4][1].nt[0]=80;
St[M_Id][7][2].nt[0]=St[M_Id][8][2].nt[0]=0; /* V_Timbre V_Page # */
St[M_Id][7][1].nt[0]=St[M_Id][8][1].nt[0]=0; /* H_Timbre H_Page # */
St[M_Id][7][0].nt[0]=St[M_Id][8][0].nt[0]=0; /* L_Timbre L_Page # */
}
speed=(double)St[M_Id][3][1].nt[0];pct=St[M_Id][4][1].nt[0];
SetColor("white");OutTextXY(382,830,"Timer=");readat(460,830,1,&Timer);
if (Timer==0)
{
if (marker==1) Timer=St[M_Id][1][1].nt[0];else Timer=4;
SetColor("magenta");Out_I_XY(460,830,Timer);
}
St[M_Id][1][1].nt[0]=Timer;SetColor("white");
OutTextXY(580,830,"Measure=");readat(690,830,1,&Measure);
if (Measure==0)
{
if (marker==1) Measure=St[M_Id][2][1].nt[0];else Measure=4;
SetColor("magenta");Out_I_XY(690,830,Measure);
}
St[M_Id][2][1].nt[0]=Measure;
}
else
{
if (marker != 1) Clear_Array(M_Id,now);
SetColor("white");OutTextXY(382,830,"Timer=");readat(460,830,1,&Timer);
if (Timer==0) { Timer=4;SetColor("magenta");Out_I_XY(460,830,Timer); }
tmp[M_Id][1].note=tmp_buf[M_Id][1].note=Timer;SetColor("white");
OutTextXY(580,830,"Measure=");
readat(690,830,1,&Measure);
if (Measure==0)
{ Measure=4;SetColor("magenta");Out_I_XY(690,830,Measure); }
tmp[M_Id][1].act=tmp_buf[M_Id][1].act=Measure;
}
if (Timer<2 || Measure<2) return -1;
XClearWindow(display,win);On_High=2;Staff(now,five,1);
Use_Font("12x24");SetColor("gold");OutTextXY(600,26,Race);
if (marker!=1)
{
if (now>0)
{
OutTextXY(67,26,names[i]);Out_I_XY(820,26,St[M_Id][7][1].nt[0]);
Out_I_XY(940,26,(int)speed);Out_I_XY(1084,26,pct);SetColor("green");
Line(12,V_Ht+34,35,V_Ht+34);Out_I_XY(17,V_Ht+29,Timer);
Out_I_XY(17,V_Ht+60,Measure);Line(12,Dist+162,35,Dist+162);
Out_I_XY(17,Dist+157,Timer);Out_I_XY(17,Dist+188,Measure);
}
else
{
OutTextXY(80,26,"Tempo--");Out_I_XY(180,26,M_Id+1);SetColor("green");
Line(115,100,138,100);Out_I_XY(120,95,Timer);
Out_I_XY(120,125,Measure);
}
}
SetColor("magenta");DrawRectangle(547,1,38,27);Rub(549,3,35,24,"DodgerBlue");
SetColor("white");V_pg=H_pg=L_pg=page=0;Out_I_XY(561,25,page);
SetColor("green");XSetLineAttributes(display,gc,2,0,0,0);
DrawRectangle(166,826,799,34);XSetLineAttributes(display,gc,1,0,0,0);
if (marker==1) Tableout(M_Id);Use_Font("7x14");SetColor("gold");
OutTextXY(179,850,"Ins : Off Bar-play L-listen V-save : Speed : Pct F1_F6 - tempo >< - timbre Home : Off");
Use_Font("12x24");L_Arrow(486,841);R_Arrow(498,850);U_Arrow(577,840);
D_Arrow(586,852);sum=Timer*64/Measure;lock=0;
if (now==0) x=6;else if (five) x=1;else x=4;
V_x=H_x=L_x=x;Word_Pos=Word_X=Text_Base;Word_Y=0;return 1;
}
void Select_Sample(ch)
char ch;
{
switch (ch)
{
case 'C':
case 'Z':highlight(nx*40+173,ny*42+740,26,37);
if (M_p<St_Start && now>0)
{
if (five)
{
M_p=St_Start;Dot(x*36+14,z+y*4+32);
highlight(x*36+5,z+y*4-ny*20+28,26,37);
x=8;if (ch=='C') nx=16;else nx=3;Dot(x*36+14,z+y*4+32);
highlight(x*36+5,z+y*4-ny*20+28,26,37);
}
else
{
highlight(x*36+5,z+34,26,37);
if (ch=='C') { if (nx<7) nx++;else nx=0; }
else if (nx>0) nx--;else nx=7;
highlight(x*36+5,z+34,26,37);
}
}
else if (five)
{
if (now==0)
{
if (ch=='C')
switch (nx)
{
case 14:nx=17;ny=1;break;
case 17:nx=0;break;
default:if (nx<=13) nx++;break;
}
else switch (nx)
{
case 0:nx=17;ny=1;break;
case 17:nx=14;break;
default:if (nx>=1 && nx<=14) nx--;break;
}
}
else
{
if (ch=='C') { if (nx<18) nx++;else nx=0; }
else if (nx>0) nx--;else nx=18;
}
}
else
{
if (now==0)
switch (ny)
{
case 0:if (nx==8) nx=9;else nx=8;break;
case 1:if (ch=='C') { if (nx<16) nx++;else nx=9; }
else if (nx>9) nx--;else nx=16;
break;
}
else
{
if (ch=='C') { if (nx<18) nx++;else nx=8; }
else if (ny==0 && nx>8 || ny==1 && nx>7) nx--;
else nx=18;
}
Figout();
}
highlight(nx*40+173,ny*42+740,26,37);
break;
case 'X':highlight(nx*40+173,ny*42+740,26,37);
if (five)
{
Dot(x*36+14,z+y*4+32);highlight(x*36+5,z+y*4-ny*20+28,26,37);
}
ny=1-ny;if (now==0) nx=9;
if (!five && M_p<St_Start+1)
{
/*
back=XGetImage(display,win,nx*40+173,ny*42+740,26,37,8,
ZPixmap);
XPutImage(display,win,gc,back,0,0,x*36+40,z+34,26,37);
*/
}
else if (!five && nx<18) Figout();
highlight(nx*40+173,ny*42+740,26,37);
if (five) Pointout(x,y,z,ny,On_High);
break;
}
}
void Move_Left()
{
if (lock)
{
if (speed>20.0) speed--;else speed=160.0;
St[M_Id][3][1].nt[0]=(int)floor(speed+0.5);Rub(940,3,40,25,"MediumBlue");
Use_Font("12x24");SetColor("gold");Out_I_XY(940,26,St[M_Id][3][1].nt[0]);
}
else
{
if (five)
{ Dot(x*36+14,z+y*4+32);highlight(x*36+5,z+y*4-ny*20+28,26,37); }
else highlight(x*36+5,z+y*4+28,26,37);
if (delt[On_High]==0 && rpter[On_High]==1 && (five || M_p!=St_Start))
{
if (x>1)
{
x--;M_p=Count(M_Id,way*30+x,&n,On_High);Renew_Bar_Num();
if (M_p<St_Start && now>0)
{
highlight(nx*40+173,ny*42+740,26,37);
if (five) nx=15;else { nx=7;ny=0;x=4;M_Bar_Num=0; }
highlight(nx*40+173,ny*42+740,26,37);
if (!five)
{
/*
XSetFunction(display,gc,GXcopy);
XPutImage(display,win,gc,pure,0,0,x*36+4,z+34,26,37);
*/
}
}
}
else if (way>0)
{
if ((way % 2)==0)
{
way--;page=way/2;Showpage(M_Id,page,1,0,2,-1);x=30;
M_p=Count(M_Id,way*30+x,&n,On_High);
}
else { way--;x=30;M_p=Count(M_Id,way*30+x,&n,On_High); }
z=(way-page*2)*Dist;M_p=52+30*way;Renew_Bar_Num();
}
}
Pointout(x,y,z,ny,On_High);
}
}
void Move_Right()
{
if (lock)
{
if (speed<160.0) speed++;else speed=20.0;
St[M_Id][3][1].nt[0]=(int)floor(speed+0.5);Rub(940,3,40,25,"MediumBlue");
Use_Font("12x24");SetColor("gold");Out_I_XY(940,26,St[M_Id][3][1].nt[0]);
}
else
{
if (five)
{ Dot(x*36+14,z+y*4+32);highlight(x*36+5,z+y*4-ny*20+28,26,37); }
else highlight(x*36+5,z+y*4+28,26,37);
if ((M_p<M_i && delt[On_High]==0 && rpter[On_High]==1) && (now>0 || (now==0 && x<29)))
{
if (x<30) x++;
else
{
if (((way+1)%2)==0)
{ way++;page=way/2;Showpage(M_Id,page,1,0,2,-1);x=1; }
else { way++;x=1; }
z=(way-page*2)*Dist;
}
M_p=Count(M_Id,way*30+x,&n,On_High);Renew_Bar_Num();
if (M_p==St_Start)
{
if (five)
{
highlight(nx*40+173,ny*42+740,26,37);nx=2;
highlight(nx*40+173,ny*42+740,26,37);
}
else { nx=9;ny=0; }
}
}
Pointout(x,y,z,ny,On_High);
}
}
void Move_Up()
{
int Y_A,Y_B;
if (lock)
{
if (pct<100) pct++;else pct=10;
St[M_Id][4][1].nt[0]=pct;Rub(1084,3,40,25,"MediumBlue");
SetColor("gold");Use_Font("12x24");Out_I_XY(1084,26,pct);
}
else
{
if (five)
{ Dot(x*36+14,z+y*4+32);highlight(x*36+5,z+y*4-ny*20+28,26,37); }
else highlight(x*36+5,z+y*4+28,26,37);
if (five && now>0)
{
switch (On_High)
{
case 0:Y_A=23+V_Ht/4;Y_B=53+V_Ht/4;break;
case 1:Y_A=V_Ht/4;Y_B=29+V_Ht/4;break;
case 2:Y_A=0;Y_B=26;break;
}
if (y==Y_A)
{
if (way>0 && delt[On_High]==0 && rpter[On_High]==1)
{
if ((way % 2)==0)
{
way--;page=way/2;Showpage(M_Id,page,1,0,2,-1);y=Y_B;
M_p=Count(M_Id,way*30+x,&n,On_High);
}
else
{
way--;y=Y_B;M_p=Count(M_Id,way*30+x,&n,On_High);
if (M_p<St_Start+1)
{
highlight(nx*40+173,ny*42+740,26,37);nx=15;
highlight(nx*40+173,ny*42+740,26,37);M_Bar_Num=0;
}
}
Renew_Bar_Num();
}
}
else y--;
}
else if (way>0 && delt[On_High]==0 && rpter[On_High]==1)
{
if ((way % 2)==0)
{
way--;page=way/2;Showpage(M_Id,page,1,0,2,-1);
M_p=Count(M_Id,way*30+x,&n,On_High);
}
else
{
way--;M_p=Count(M_Id,way*30+x,&n,On_High);
if (M_p<3 && now==0)
{
/*
XSetFunction(display,gc,GXcopy);
XPutImage(display,win,gc,pure,0,0,nx*40+173,
ny*42+740,26,37);
*/
nx=9;ny=0;M_p=3;x=1;
/*
pure=XGetImage(display,win,nx*40+173,ny*42+740,
26,37,8,ZPixmap);
*/
highlight(nx*40+173,ny*42+740,26,37);
if (!five)
{
/*
XSetFunction(display,gc,GXcopy);
XPutImage(display,win,gc,pure,0,0,x*36+40,
z+34,26,37);
*/
}
}
}
Renew_Bar_Num();
}
z=(way-page*2)*Dist;Pointout(x,y,z,ny,On_High);
}
}
void Move_Down()
{
int Y_A,Y_B;
if (lock)
{
if (pct>10) pct--;else pct=100;
St[M_Id][4][1].nt[0]=pct;Rub(1084,3,40,25,"MediumBlue");
SetColor("gold");Use_Font("12x24");Out_I_XY(1084,26,pct);
}
else
{
if (five)
{ Dot(x*36+14,z+y*4+32);highlight(x*36+5,z+y*4-ny*20+28,26,37); }
else highlight(x*36+5,z+y*4+28,26,37);
if (five && now>0)
{
switch (On_High)
{
case 0:Y_A=23+V_Ht/4;Y_B=53+V_Ht/4;break;
case 1:Y_A=V_Ht/4;Y_B=29+V_Ht/4;break;
case 2:Y_A=0;Y_B=26;break;
}
if (y==Y_B)
{
if (M_i-M_p>=30 && delt[On_High]==0 && rpter[On_High]==1)
{
if (((way+1) % 2)==0)
{
way++;page=way/2;Showpage(M_Id,page,1,0,2,-1);y=Y_A;
M_p=Count(M_Id,way*30+x,&n,On_High);
}
else { way++;y=Y_A;M_p=Count(M_Id,way*30+x,&n,On_High); }
Renew_Bar_Num();
}
}
else y++;
}
else if (M_i-M_p>=30 && delt[On_High]==0 && rpter[On_High]==1)
{
if (((way+1) % 2)==0)
{
way++;page=way/2;Showpage(M_Id,page,1,0,2,-1);
M_p=Count(M_Id,way*30+x,&n,On_High);
}
else { way++;M_p=Count(M_Id,way*30+x,&n,On_High); }
Renew_Bar_Num();
}
z=(way-page*2)*Dist;Pointout(x,y,z,ny,On_High);
}
}
void Insert_Note()
{
if (M_i<M_Len-1)
{
dis(&insert);Rub(221,835,30,17,"MediumBlue");
SetColor("gold");Use_Font("7x14");
if (insert) OutTextXY(221,850,"On ");else OutTextXY(221,850,"Off");
}
}
void Lock()
{
dis(&lock);Rub(915,835,30,17,"MediumBlue");
SetColor("gold");Use_Font("7x14");
if (lock) OutTextXY(915,850,"On ");else OutTextXY(915,850,"Off");
}
void Page_Up()
{
if (now>0 && page!=0)
{
if (five)
{ Dot(x*36+14,z+y*4+32);highlight(x*36+5,z+y*4-ny*20+28,26,37); }
page--;way-=2;Showpage(M_Id,page,1,0,2,-1);
z=(way-page*2)*Dist;Fix_p(&M_p,M_i,-1);Pointout(x,y,z,ny,On_High);
}
}
void Page_Down()
{
if (now>0 && page<St[M_Id][8][On_High].nt[0])
{
if (five)
{ Dot(x*36+14,z+y*4+32);highlight(x*36+5,z+y*4-ny*20+28,26,37); }
page++;Showpage(M_Id,page,1,0,2,-1);Fix_p(&M_p,M_i,1);
if (M_p<=M_i) way+=2;z=(way-page*2)*Dist;Pointout(x,y,z,ny,On_High);
}
}
void Delete_Note()
{
if (M_p<St_Start && now>0)
{
St[M_Id][y-5][On_High].act=0;Blank(x,z,On_High);
Pointout(x,y,z,ny,On_High);
}
else if (M_p<M_i)
{
if (now==0) n-=tmp[M_Id][M_p].act;else n-=St[M_Id][M_p][On_High].act;
for (bk=M_p;bk<M_i;bk++)
{
if (now==0)
{
tmp[M_Id][bk]=tmp[M_Id][bk+1];
tmp_buf[M_Id][bk]=tmp_buf[M_Id][bk+1];
}
else Copy_Chord(bk+1,bk,On_High);
}
if (now==0) { tmp[M_Id][M_i-1].note=tmp_buf[M_Id][M_i-1].note=200; }
else Get_Nt_At(M_i-1,On_High,200,0);
M_i--;
if (On_High==2) Showpage(M_Id,page,(way*30+x)%60,0,2,1);
else Showpage(M_Id,page,(way*30+x)%60,0,1,-1);
Pointout(x,y,z,ny,On_High);
if (now>0) St[M_Id][8][1].nt[On_High]=(M_i-8)/60; /* # of pages */
}
}
void End()
{
if (!five && ((ny==0 && (nx==16 || nx==17))||(ny==1 && (nx==7 || nx==9
|| nx==10 || nx==11 || nx==12 || nx==13 || nx==14 || nx==15 || nx==17))))
{
dis(&onto);XSetFunction(display,gc,GXcopy);
switch (nx)
{
case 7:readat(x*36,z+24,2,&bk);
if (insert) { nt=-bk;at=0; }
else { St[M_Id][M_p-1][1].nt[0]=-bk;St[M_Id][M_p-1][1].act=0; }
break;
case 9:
case 10:
case 11:if (onto)
{
if (insert) at/=(int)floor(exp((nx-8)*log(2.0))+0.5);
else
{
if (now>0)
St[M_Id][M_p][1].act/=(int)floor(exp((nx-8)*
log(2.0))+0.5);
else tmp[M_Id][M_p].act=tmp_buf[M_Id][M_p].act=
16/(int)floor(exp((nx-8)*log(2.0))+0.5);
}
Underline(x,z,nx-8);
}
else
{
if (insert) at=(int)floor(at*exp((nx-8)*log(2.0))+0.5);
else
{
if (now>0)
St[M_Id][M_p-1][1].act=(int)floor(St[M_Id][M_p-
1][1].act*exp((nx-8)*log(2.0))+0.5);
else tmp[M_Id][M_p-1].act=tmp_buf[M_Id][M_p].act
=(int)floor(tmp[M_Id][M_p-1].act*
exp((nx-8)*log(2.0))
+0.5);
}
Underline(x,z,8-nx);
}
break;
case 13:if (onto)
{
if (insert) at=(int)floor(1.5*at+0.5);
else
{
if (now>0)
St[M_Id][M_p-1][1].act=(int)floor(1.5*
St[M_Id][M_p-1][1].act+0.5);
else tmp[M_Id][M_p-1].act=tmp_buf[M_Id][M_p-1].act=
(int)floor(1.5*tmp[M_Id][M_p-1].act+0.5);
}
Dot(x*36+17,z+39);
}
else
{
if (insert) at=at*2/3;
else
{
if (now>0)
St[M_Id][M_p-1][1].act=St[M_Id][M_p-1][1].act*2/3;
else tmp[M_Id][M_p-1].act=tmp_buf[M_Id][M_p-1].act=
tmp[M_Id][M_p-1].act*2/3;
}
Dot(x*36+17,-z-39);
}
break;
case 12:
case 14:if (now>0)
{
if (nt>35 && nt<48) onto=1;else onto=0;
if (onto)
{
if (insert) nt+=(13-nx)*12;
else
{
St[M_Id][M_p-1][1].nt[0]+=(13-nx)*12;
nt=St[M_Id][M_p-1][1].nt[0];
}
Addot(x,z);
}
else
{
if (!insert) nt=St[M_Id][M_p-1][1].nt[0];Addot(-x,z);
if (nt>47) nt-=12;else nt+=12;
if (!insert) St[M_Id][M_p-1][1].nt[0]=nt;
}
}
break;
case 15:fine[On_High]=1;
if (now>0)
{
St[M_Id][5][On_High].nt[0]=M_p;
n=sum-St[M_Id][M_p-1][On_High].act;
}
else
{
tmp[M_Id][1].act=tmp_buf[M_Id][1].act=M_p;
n=sum-tmp[M_Id][M_p-1].act;
}
Blank(x,z,On_High);Line(x*36+8,z+109,x*36+8,z+140);
break;
case 16:if (onto && (insert && at<64 || (!insert && (now==0 &&
tmp[M_Id][M_p-1].act<64 || now>0 &&
St[M_Id][M_p-1][1].act<64))))
{
if (x<30) x++;
else
{
way++;x=1;
if ((way % 2)==0)
{ page=way/2;Showpage(M_Id,page,1,0,2,1); }
z=(way-page*2)*Dist;
}
Underline(x,z-6,1);
if (insert) at+=16;
else
{
if (now==0)
{
tmp[M_Id][M_p-1].act+=16;
tmp_buf[M_Id][M_p-1].act+=16;
}
else St[M_Id][M_p-1][1].act+=16;
}
}
else if (insert && at>16 || !insert && now==0 &&
tmp[M_Id][M_p-1].act>16 || now>0 &&
St[M_Id][M_p-1][1].act>16)
{
if (insert) at -= 16;
else
{
if (now== 0)
{
tmp[M_Id][M_p-1].act-=16;
tmp_buf[M_Id][M_p-1].act-=16;
at=tmp[M_Id][M_p-1].act;
}
else
{
St[M_Id][M_p-1][1].act-=16;
at=St[M_Id][M_p-1][1].act;
}
}
FORLIM=at/16;
for (bk=1;bk<=FORLIM;bk++)
{
if (x>1) x--;
else
{
if ((way % 2)==0)
{
way--;page=way/2;
Showpage(M_Id,page,1,0,2,1);
x=30;
}
else { way--;x=30; }
z=(way-page*2)*Dist;
}
}
Showpage(M_Id,page,way*30+x,0,2,1);
}
break;
case 17:if (now>0)
{
if (ny==0)
{
if (onto)
{
if (insert) nt++;else St[M_Id][M_p-1][1].nt[0]++;
Sharp(x*36-4,z+33);
}
else
{
if (insert) nt--;else St[M_Id][M_p-1][1].nt[0]--;
Sharp(x*36-4,-z-33);
}
}
else
{
if (onto)
{
if (insert) nt++;else St[M_Id][M_p-1][1].nt[0]--;
Flat(x*36-4,z+32);
}
else
{
if (insert) nt--;else St[M_Id][M_p-1][1].nt[0]++;
Flat(x*36-4,-z-32);
}
}
}
break;
}
highlight(x*36+5,z+34,26,37);
}
}
void Return()
{
int Ry;
if (M_p<St_Start && now>0) insert=0;onto=0;
if (now>0) M_p=Count(M_Id,way*30+x,&n,On_High);
if (five)
{
Dot(x*36+14,z+y*4+32);if (nx<11 || nx>14) Addline(x*36,y,z,On_High);
highlight(x*36+5,z+y*4-ny*20+28,26,37);
if (M_p<St_Start && nx==15)
{
switch (x)
{
case 1:St[M_Id][St_Start-3][On_High].nt[1]=y;break;
case 2:St[M_Id][St_Start-2][On_High].nt[1]=y;break;
case 3:St[M_Id][St_Start-2][On_High].nt[2]=y;break;
case 4:St[M_Id][St_Start-2][On_High].nt[3]=y;break;
case 5:St[M_Id][St_Start-1][On_High].nt[1]=y;break;
case 6:St[M_Id][St_Start-1][On_High].nt[2]=y;break;
case 7:St[M_Id][St_Start-1][On_High].nt[3]=y;break;
}
St[M_Id][6][On_High].nt[0]=1-2*ny;
}
else if (M_p>St_Start-1 || now==0)
{
switch (nx)
{
case 11:
case 12:
case 13:
case 14:nt=0;
if (On_High==2) y=16;else y=16+20*(1-On_High)+V_Ht/4;
switch (nx)
{
case 11:if (ny==0) at=96;else at=48;break;
case 12:if (ny==0) at=64;else at=32;break;
case 13:if (ny==0) at=16;else at=8;break;
case 14:if (ny==0) at=4;else at=2;break;
}
at*= rpter[On_High];rpter[On_High]=1;
break;
case 15:if (ny==0) delt[On_High]=1; else delt[On_High]=-1;break;
case 16:if (ny==1)
{
if (n==0) rpter[On_High]=-1;
else
{
Dot(x*36+14,z+y*4+32);
if (nx<11||nx>14) Addline(x*36,y,z,On_High);
highlight(x*36+5,z+y*4-ny*20+28,26,37);
return;
}
}
break;
case 17:if (ny==1) { finish=1;nt=200; }
else if (!fine[On_High])
{
fine[On_High]=-1;
if (now>0)
{
St[M_Id][5][On_High].nt[0]=M_p-1;x--;
n=sum-abs(St[M_Id][M_p-1][On_High].act);
}
else
{
tmp[M_Id][1].act=M_p-1;x--;
tmp_buf[M_Id][1].act=M_p-1;
n=sum-tmp[M_Id][M_p-1].act;
}
}
else
{
Dot(x*36+14,z+y*4+32);
Addline(x*36,y,z,On_High);
highlight(x*36+5,z+y*4-ny*20+28,26,37);
return;
}
break;
case 18:if (ny==0) { Blank(x,z,On_High);nt=600;at=0; }
else delt[On_High]=200;
break;
default:if (nx<=10)
{
highlight(nx*40+173,ny*42+740,26,37);
if (now==0) nt=71;else nt=Y_Nt(y,On_High);
switch (nx)
{
case 0:if (ny==0) at=64;else at=96;break;
case 1:
case 2:
case 3:
case 4:
case 5:at=32/(int)floor(exp((nx-1)*log(2.0))
+0.5);
if (y<17) ny=0;else ny=1;
break;
case 6:
case 7:
case 8:
case 9:
case 10:at=48/(int)floor(exp((nx-6)*log(2.0))
+0.5);
if (y<17) ny=0;else ny=1;
break;
}
if (delt[On_High]!=0) nt+=delt[On_High];delt[On_High]=0;at*=rpter[On_High];rpter[On_High]=1;
highlight(nx*40+173,ny*42+740,26,37);
}
break;
}
if (((0<=nx) && (nx<=14)) || (nx==17 && ny==1) ||
(nx==18 && ny==0))
{
if (insert)
{
if (now==0)
{
for (bk=M_i;bk>=M_p;bk--)
{
tmp[M_Id][bk]=tmp[M_Id][bk-1];
tmp_buf[M_Id][bk]=tmp_buf[M_Id][bk-1];
}
tmp[M_Id][M_p].note=nt;tmp[M_Id][M_p].act=at;
tmp_buf[M_Id][M_p].note=nt;tmp_buf[M_Id][M_p].act=at;
}
else
{
for (bk=M_i;bk>=M_p;bk--)
Copy_Chord(bk-1,bk,On_High);
Get_Nt_At(M_p,On_High,nt,at);
}
}
else
{
if (now==0)
{
tmp[M_Id][M_p].note=nt;tmp[M_Id][M_p].act=at;
tmp_buf[M_Id][M_p].note=nt;tmp_buf[M_Id][M_p].act=at;
}
else Get_Nt_At(M_p,On_High,nt,at);
}
}
}
if (nx==16)
{
if (ny==0)
{
Blank(x,z,On_High);SetColor("yellow");Use_Font("7x14");
switch (On_High)
{
case 0:Ry=z+V_Ht+185;break;
case 1:Ry=z+V_Ht+105;break;
case 2:Ry=z+105;break;
}
OutTextXY(x*36+12,Ry,"/");Rub(x*36+6,Ry-42,30,15,"NavyBlue");
readat(x*36+6,Ry-30,2,&bk);
if (bk<1) { bk=1;SetColor("cyan");Out_I_XY(x*36+6,Ry-30,1); }
St[M_Id][M_p][On_High].nt[0]=-bk;St[M_Id][M_p][On_High].act=0;
}
}
else if (nx<=15 || (nx==18 && ny==1))
{
if (now==0 || M_p<St_Start+1 ||
White_Key(St[M_Id][M_p][On_High].nt[0],On_High)==1)
{ Blank(x,z,On_High);Addline(x*36,y,z,On_High); }
if (now==0) y=16;
if (M_p>St_Start-1 && (nx==15 || (nx==18 && ny==1)))
Draw_Note(nx,ny,z,x,y-3,1,1,1,On_High);
else if (M_p<St_Start || now==0)
Draw_Note(nx,ny,z,x,y,1,1,1,On_High);
else if (Re_Order_Notes(M_Id,M_p,nt,1,nx,ny,On_High)==1)
{
Blank(x,z,On_High);
if (On_High!=2) Semi_Blank(x,z,1-On_High);
Display_Note(M_Id,M_p,z,x,0,On_High);
if (On_High!=2 &&
M_p<St[M_Id][0][1-On_High].nt[0]+1)
Display_Note(M_Id,M_p,z,x,0,1-On_High);
}
}
}
else
{
/* XSetFunction(display,gc,GXcopy);
XPutImage(display,win,gc,back,0,0,x*36+40,z+84,26,37);
*/
if (M_p<St_Start+1 && now>0)
{
for (bk=0;bk<=8;bk++) St[M_Id][bk][1].act=0;
if (nx==7) step=0;
else
{
for (bk=0;bk<=nx;bk++) St[M_Id][place[ny][bk]-1][1].act=1-ny*2;
if (ny==0) step=nx+1;else step=-nx-1;
}
x=7;St[M_Id][St_Start][1].nt[0]=Nx_nt(step)+36;
St[M_Id][St_Start][1].act=St_Start+1;nt=St[M_Id][St_Start][1].nt[0];
}
else
{
if (insert)
{
if (now==0)
{
for (bk=M_i;bk>=M_p;bk--)
{
tmp[M_Id][bk]=tmp[M_Id][bk-1];
tmp_buf[M_Id][bk]=tmp_buf[M_Id][bk-1];
}
tmp[M_Id][M_p].note=nt;tmp[M_Id][M_p].act=at;
tmp_buf[M_Id][M_p].note=nt;tmp_buf[M_Id][M_p].act=at;
}
else
{
for (bk=M_i;bk>=M_p;bk--)
St[M_Id][bk][On_High]=St[M_Id][bk-1][On_High];
St[M_Id][M_p][1].nt[0]=nt;St[M_Id][M_p][1].act=at;
}
}
else
{
switch (nx)
{
case 8:if (ny==1 && n==0) rpter[On_High]=-1;break;
case 15:if (ny==1 && !fine[On_High])
{
fine[On_High]=1;x--;
if (now>0)
{
M_p--;St[M_Id][5][1].nt[0]=M_p;
n=sum-abs(St[M_Id][M_p][1].act);
}
else
{
M_p--;
tmp[M_Id][1].act=tmp_buf[M_Id][1].act=M_p;
n=sum-tmp[M_Id][M_p].act;
}
}
break;
case 16:if (ny==1)
{
finish=1;
if (now>0)
{
St[M_Id][M_p][1].nt[0]=200;
St[M_Id][M_p][1].act=0;
}
else
{
tmp[M_Id][M_p].note=tmp_buf[M_Id][M_p].note
=200;
tmp[M_Id][M_p].act=tmp_buf[M_Id][M_p].act=200;
}
}
break;
case 17:x--;break;
}
}
}
}
if (five && (nx==15 || (nx==18 && ny==1)) && M_p>St_Start-1) x--;
if ((M_p>St_Start-1 || now==0) && ((five && (((0<=nx) && (nx<=14)) ||
(nx==17 && ny==0))) ||(!five && rpter[On_High]==1 && ((8<=nx) && (nx>=17)))))
{
if (fine[On_High]==-1 || St[M_Id][5][On_High].nt[0]==M_p)
{ fine[On_High]=1;n=sum; }
else if (now>0) n+=abs(St[M_Id][M_p][On_High].act);
else n+=tmp[M_Id][M_p].act;
if (n>=sum && !finish)
{
if (n>sum) {/* sound(888);delay(500);nosound(); */ }
M_Bar_Num++;kp=page;kw=way;kx=x;n=0;fine[On_High]=1;
Line_Sector(x,0,z,On_High);
}
}
if (rpter[On_High]==-1)
{
bk=St_Start;twice=0;
do {
if (St[M_Id][bk-1][On_High].act<0) twice=1-twice;bk++;
} while (bk!=M_p);
if (twice != 0)
{
rpter[On_High]=1;
St[M_Id][M_p-1][On_High].act=-abs(St[M_Id][M_p-1][On_High].act);
}
M_p--;Repeat_Sector(x,z,twice,On_High);
highlight(nx*40+173,ny*42+740,26,37);
nx=3;highlight(nx*40+173,ny*42+740,26,37);
}
else
{
if (finish || (now>0 && M_p>=M_Len-10) || (now==0 && M_p>=26))
{
if (kp != page)
{
page=kp;way=kw;z=(way-page*2)*Dist;x=30;
Showpage(M_Id,page,1,0,2,-1);
}
else
{
if (finish) { Blank(x,z,On_High);x--; }
Line_Sector(x,0,z,On_High);Line_Sector(x,4,z,On_High);
}
Dot(x*36+14,z+y*4+32);highlight(x*36+5,z+y*4-ny*20+28,26,37);
if ((now>0 && M_p==M_Len-10) || (now==0 && M_p==26))
{
/* sound(3200);delay(170);nosound(); */
insert=0;Rub(213,835,30,17,"MediumBlue");SetColor("green");
Use_Font("10x20");OutTextXY(213,850,"Off");finish=1;
}
}
else if (((now>0 && M_i!=M_Len-9) || (now==0 && M_i!=27)) || M_p!= M_i)
{
if (x<30) x++;
else
{
way++;x=1;
if ((way % 2)==0)
{
page=way/2;St[M_Id][8][On_High].nt[0]=page;
Showpage(M_Id,page,1,0,2,-1);
}
z=(way-page*2)*Dist;
}
if (M_p<M_i-1 && (now==0 || M_p>St_Start-1))
{
if (On_High==2) Showpage(M_Id,page,(way*30+x) % 60,0,2,1);
else Showpage(M_Id,page,(way*30+x) % 60,0,1,-1);
}
}
}
if (Debug==20)
{
if (now==0)
printf("tmp[%i][%i].note=%i tmp[%i][%i].act=%i M_p=%i M_i=%i\n",
M_Id,M_p,tmp[M_Id][M_p].note,M_Id,M_p,tmp[M_Id][M_p].act,M_p,M_i);
else
printf("M_p=%i M_i=%i St[%i][%i][%i].nt[0]=%i St[%i][%i][%i].act=%i\n",
M_p,M_i,M_Id,M_p,On_High,St[M_Id][M_p][On_High].nt[0],M_Id,M_p,
On_High,St[M_Id][M_p][On_High].act);
}
if (now>0)
{
if (M_i<M_Len-10 && delt[On_High]==0 && (insert || M_p==M_i)) M_i++;
St[M_Id][0][On_High].nt[0]=M_i-1;St[M_Id][M_i][On_High].nt[0]=200;
St[M_Id][M_i][On_High].act=200;
St[M_Id][M_i+1][On_High].nt[0]=200;St[M_Id][M_i+1][On_High].act=0;
if (M_p<M_i && delt[On_High]==0 && (M_p>St_Start-1 || (M_p==St_Start-1 && x==8)))
M_p++;
}
else
{
if (M_i<28 && delt[On_High]==0 && (insert || M_p==M_i)) M_i++;
tmp[M_Id][0].note=tmp_buf[M_Id][0].note=M_i-1;
tmp[M_Id][M_i].note=tmp_buf[M_Id][M_i].note=200;
if (M_p<M_i && delt[On_High]==0) M_p++;
}
if (five)
{
if (!finish)
{
Dot(x*36+14,z+y*4+32);if (nx<11 || nx>14) Addline(x*36,y,z,On_High);
highlight(x*36+5,z+y*4-ny*20+28,26,37);
}
}
else if (M_p>St_Start-1 || now==0)
{
/*
XSetFunction(display,gc,GXcopy);
XPutImage(display,win,gc,pure,0,0,nx*40+173,ny*42+740,26,37);
*/
nx=9;ny=0;
/*
pure=XGetImage(display,win,nx*40+173,ny*42+740,26,37,8,ZPixmap);
*/
highlight(nx*40+173,ny*42+740,26,37);
if (!finish)
{
/*
XSetFunction(display,gc,GXxor);
XPutImage(display,win,gc,pure,0,0,x*36+40,z+34,26,37);
back=XGetImage(display,win,x*36+40,z+34,26,37,8,ZPixmap);
*/
Dot(x*36+14,z+y*4+32);highlight(x*36+5,z+34,26,37);
}
if (M_p==M_i && !finish)
{
if (rpter[On_High]==1)
{
if (now>0)
{
St[M_Id][M_p][1].nt[0]=Nx_nt(step)+36;
St[M_Id][M_p][1].act=16;
}
else
{
tmp[M_Id][M_p].note=tmp_buf[M_Id][M_p].note=36;
tmp[M_Id][M_p].act=tmp_buf[M_Id][M_p].act=16;
}
if (now>0) nt=St[M_Id][M_p][1].nt[0];
else nt=tmp[M_Id][M_p].note;
}
else
{
if (now>0) St[M_Id][M_p][1].act=-St[M_Id][M_p][1].act;
else
{
tmp[M_Id][M_p].act=-tmp[M_Id][M_p].act;
tmp_buf[M_Id][M_p].act=-tmp_buf[M_Id][M_p].act;
}
rpter[On_High]=1;
}
}
}
Renew_Bar_Num();
}
void Get_Timbre(ch)
char ch;
{
if (now>0)
{
Rub(820,3,40,25,"MediumBlue");Use_Font("12x24");SetColor("gold");
bk=St[M_Id][7][On_High].nt[0];if (bk<0) bk=0;
if (ch==',') { if (bk==0) bk=100;else bk--; }
else if (bk==100) bk=0;else bk++;
St[M_Id][7][On_High].nt[0]=bk;Out_I_XY(820,26,St[M_Id][7][On_High].nt[0]);
}
}
void Play_Note()
{
twice=(int)floor(speed+0.5);speed=1/(2*speed);
if (now>0)
{
if (St[M_Id][M_p-2][1].nt[0]>=31 && St[M_Id][M_p-2][1].nt[0]<=62)
{
switch (St[M_Id][M_p-2][1].nt[0])
{
case 55:
case 43:
case 31:ptr_.nt[0]=St[M_Id][M_p-2][1].nt[0]+St[M_Id][(int)
((int)floor(3.5*St[M_Id][6][1].nt[0]+0.5))][1].act;
break;
case 53:
case 41:ptr_.nt[0]=St[M_Id][M_p-2][1].nt[0]+
St[M_Id][(int)floor(3.5*St[M_Id][6][1].nt[0]+0.5)+1][1].act;
break;
case 52:
case 40:ptr_.nt[0]=St[M_Id][M_p-2][1].nt[0]+St[M_Id][2][1].act;
break;
case 50:
case 62:
case 38:ptr_.nt[0]=St[M_Id][M_p-2][1].nt[0]+St[M_Id][3][1].act;
break;
case 48:
case 60:
case 36:ptr_.nt[0]=St[M_Id][M_p-2][1].nt[0]+St[M_Id][4][1].act;
break;
case 47:
case 59:
case 35:ptr_.nt[0]=St[M_Id][M_p-2][1].nt[0]+St[M_Id][5][1].act;
break;
case 45:
case 57:
case 33:ptr_.nt[0]=St[M_Id][M_p-2][1].nt[0]+St[M_Id][6][1].act;
break;
}
}
else ptr_.nt[0]=St[M_Id][M_p-2][1].nt[0];
if (ptr_.nt[0]>0)
{
d=freq;FORLIM=ptr_.nt[0];for (bk=31;bk<FORLIM;bk++) d*=1.0594631;
ptr_.nt[0]=(int)floor(d+0.5);
}
rlact=9.375*Measure*St[M_Id][M_p-2][1].act*speed;
ptr_.at=(int)floor(rlact*pct+0.5);ptr_.cm=(int)floor(rlact*(100-pct)+0.5);
}
else
{
ptr_.nt[0]=-1;rlact=9.375*Measure*tmp[M_Id][M_p-2].act*speed;
ptr_.at=(int)floor(rlact*pct+0.5);ptr_.cm=(int)floor(rlact*(100-pct)+0.5);
}
if (St[M_Id][7][1].nt[0] != 0) { tim_pt=*tim[St[M_Id][7][1].nt[0]-1];Mixup(); }
Play();speed=twice;
}
void Do_KeyPress(ch)
char ch;
{
switch (ch)
{
case 'C':
case 'Z':
case 'X':Select_Sample(ch);break;
case '<':Move_Left();break;
case '>':Move_Right();break;
case '?':Move_Up();break;
case '@':Move_Down();break;
case '{':Insert_Note();break;
case '#':Lock();break; /* Home */
case '$':Page_Up();break; /* PgUp */
case '^':Page_Down();break; /* PgDn */
case '}':Delete_Note();break;
case '*': /* F1 */
case '/': /* F2 */
case '+': /* F3 */
case '=': /* F4 */
case '[': /* F5 */
case ']':Use_Font("12x24");
if (!lock && (ch=='*' || ch=='/')) /* F1 F2 */
{
if (M_Id!=0)
{
_LA:Rub(67,3,477,25,"MediumBlue");SetColor("gold");page=0;
if (ch=='*')
{ if (M_Id>0) M_Id--;else M_Id=content[now]-1; }
else { if (M_Id<content[now]-1) M_Id++;else M_Id=0; }
if (now>0) OutTextXY(67,26,names[now*1000+M_Id]);
else
{
OutTextXY(80,26,"Tempo--");
Out_I_XY(170,26,M_Id+1);
}
do {
ch=GetKey();if (ch=='*' || ch=='/') goto _LA;
} while (ch != '!' && ch != '&');
marker=1;
if (ch=='&') return;
else { head=M_Id+1;Save(M_Id+1,tail); }
Showpage(M_Id,0,1,0,2,-1);M_p=St_Start;x=8;z=0;
if (On_High==2) y=21;else y=21+V_Ht/4;
Dot(x*36+14,z+y*4+32);
highlight(x*36+5,z+y*4-ny*20+28,26,37);
}
}
else if (now>0) /* Input Instrument & Melody # */
{
switch (ch)
{
case '*':lf=10;hf=779;rn=1;break; /* F1 */
case '/':lf=10;hf=809;rn=2;break; /* F2 */
case '+':lf=10;hf=839;rn=3;break; /* F3 */
case '=':lf=977;hf=779;rn=-1;break; /* F4 */
case '[':lf=977;hf=809;rn=-2;break; /* F5 */
case ']':lf=977;hf=839;rn=-3;break; /* F6 */
}
Use_Font("7x14");Rub(lf-3,hf-6,70,24,"MediumBlue");
Rub(lf+77,hf-6,70,24,"MediumBlue");
for (twice=1;twice<=2;twice++)
{
if (twice==1)
{
readat(lf+6,hf+16,4,&bk);
if (bk<0) { Get_The_Set(M_Id,-(bk+1));break; }
if (rn>0) St[M_Id][0][1].nt[rn]=bk;
else St[M_Id][0][2].nt[-rn]=bk;
}
else if (twice==2)
{
readat(lf+100,hf+16,2,&bk);
if (rn>0) St[M_Id][1][1].nt[rn]=bk;
else St[M_Id][1][2].nt[-rn]=bk;
if (0<bk && bk<=content[0])
Get_Tempo(M_Id,rn);
}
}
}
break;
case '%':End();break;
case '!':if (M_p<M_Len-10) Return();break;
case ',':
case '.':Get_Timbre(ch);break;
/*
case ' ':Play_Note();break;
case 'L':if (now==0) Signal=0;else Signal=1;Sing(M_Id+1);break;
*/
}
}
void Input(Melody_Id)
int Melody_Id;
{
XEvent report;
KeySym ks;
int button,Ms_x,Ms_y,old_Ms_x,old_Ms_y,dx,dy,Value;
old_Ms_x=200;old_Ms_y=200;Ms_x=old_Ms_x;Ms_y=old_Ms_y;kp=0;kw=0;n=0;
if (Get_Input_Info(Melody_Id)==-1) return;
if (now==0) { M_i=4;M_p=3; }
else
{
M_i=St_Start;M_p=St_Start-1;New_Word=Get_Word_Id();
if (strlen(Words[New_Word])>0) Show_Word(New_Word,0);
}
if (marker==1)
{
nx=-1;ny=-1;Showpage(M_Id,0,1,0,2,-1);
if (now>0)
{
M_i=St[M_Id][0][On_High].nt[0]+1;
speed=(double)St[M_Id][3][1].nt[0];pct=St[M_Id][4][1].nt[0];
}
else M_i=tmp[M_Id][0].note+1;
}
if (five) { if (now==0) nx=3;else nx=15; }
else { if (now==0) nx=9;else nx=7; }
V_i=H_i=L_i=M_i;V_p=H_p=L_p=M_p;V_way=H_way=L_way=way=0;V_z=H_z=L_z=z=0;
fine[0]=fine[1]=fine[2]=0;insert=0;delt[0]=delt[1]=delt[2]=0;
rpter[0]=rpter[1]=rpter[2]=1;V_Bar_Num=H_Bar_Num=L_Bar_Num=M_Bar_Num=0;
V_nx=H_nx=L_nx=nx;onto=0;finish=0;
V_ny=H_ny=L_ny=ny=0;V_y=y=16;H_y=16+V_Ht/4;L_y=36+V_Ht/4;
highlight(nx*40+173,ny*42+740,26,37);
if (five)
{
Dot(x*36+14,z+y*4+32);Addline(x*36,y,z,On_High);
highlight(x*36+5,z+y*4-ny*20+28,26,37);
}
else
{
/*
XSetFunction(display,gc,GXcopy);
XPutImage(display,win,gc,pure,0,0,x*36+40,z+34,26,37);
back=XGetImage(display,win,x*36+40,z+34,26,37,8,ZPixmap);
*/
highlight(x*36+40,z+34,26,37);
}
_LR:do {
if (now==0) tmp[M_Id][0].note=tmp_buf[M_Id][0].note=M_i-1;
else St[M_Id][0][On_High].nt[0]=M_i-1;
XNextEvent(display,&report);
switch(report.type)
{
case MotionNotify:Ms_x=report.xmotion.x;Ms_y=report.xmotion.y;
dx=Ms_x-old_Ms_x;dy=Ms_y-old_Ms_y;
if (On_Text==1)
DoMotionEvent(report,Ms_x,Ms_y,dx,dy);
break;
case ButtonPress:button=report.xbutton.button;
Ms_x=report.xbutton.x;Ms_y=report.xbutton.y;
Value=DoButtonEvent(report,button,Ms_x,Ms_y,
M_Id,nx,ny);
if (On_Text==0) Adjust_Cursor(button,Value);
break;
case KeyPress:ks=XLookupKeysym(report,0);
switch(ks)
{
case XK_F1:ch='*';break;
case XK_F2:ch='/';break;
case XK_F3:ch='+';break;
case XK_F4:ch='=';break;
case XK_F5:ch='[';break;
case XK_F6:ch=']';break;
case XK_Return:ch='!';break;
case XK_Escape:ch='&';break;
case XK_Left:ch='<';break;
case XK_Right:ch='>';break;
case XK_Up:ch='?';break;
case XK_Down:ch='@';break;
case 65496:ch='#';break; /* Home */
case 65502:ch='%';break; /* End */
case 65498:ch='$';break; /* PgUp */
case 65504:ch='^';break; /* PgDn */
case XK_Num_Lock:ch='|';break;
case XK_Insert:ch='{';break;
case XK_Delete:ch='}';break;
default:XLookupString(report,tmpstr,128,&ks,0);
if (isalpha(tmpstr[0]))
ch=toupper(tmpstr[0]);
else ch=tmpstr[0];
break;
}
if (On_Text==0) Do_KeyPress(ch);
break;
}
} while (!(ch=='V' || finish || ch=='&'));
if (ch=='&') return;
if (ch=='V')
{
if (now==0) { tmp[M_Id][0].note+=1;tmp_buf[M_Id][0].note+=1; }
else St[M_Id][0][On_High].nt[0]+=1;
}
head=M_Id+1;Save(M_Id+1,tail);finish=0;goto _LR;
}
/* Note ==31 in Play_Note should be changed */