
#include"menu7.c"
#include"settings.c"
#include"playback.c"
#include"record.c"
#include"edit.c"
#include"help.c"
getname(row,col,p,str1)
int row,col;
char *p,*str1;
{
int i=0,k,tab=1,len;
char str[30];
char *s;
size(6,7);
len=strlen(str1);
while(1)
{
if(mouseinit!=0)
showms_ptr();
gotoxy(col+i+1,row+1);
getkey();
if(ascii==27 || ((ascii==13) && i==0) || ((button==1) && (xgrid>=320 && xgrid<=392) && ygrid==112 ))
{
size(32,0);
if(button==1)
{
if(mouseinit!=0)
hidemsptr();
menubox(14,40,15,52,112,NO_SHADOW);
menubox(14,41,14,50,32,NO_SHADOW);
writestring("Cancel",14,43,47);
delay(150);
menubox(14,40,15,52,112,NO_SHADOW);
menubox(14,40,15,51,32,HALF_SHADOW);
writestring("Cancel",14,42,32);
delay(50);
}
return(ESC);
}
if(i==0 && button==0)
menubox(11,21,12,56,47,HALF_SHADOW);
if(((ascii==13 || i>8) && button==0) || (button==1 && (xgrid>=208 && xgrid<=264) && ygrid==112))
{
if(button==1)
{
if(mouseinit!=0)
hidemsptr();
menubox(14,26,15,35,112,NO_SHADOW);
menubox(14,27,14,34,32,NO_SHADOW);
writestring("Ok",14,30,47);
delay(150);
menubox(14,26,15,35,112,NO_SHADOW);
menubox(14,26,15,35,32,HALF_SHADOW);
writestring("Ok",14,29,32);
delay(75);
}
if(tab==3)
{
return(ESC);
}
if(i>8)
{
errormesg(4,5);
button=0;
i=0;
ascii=0;
menubox(11,21,12,56,47,HALF_SHADOW);
size(6,7);
}
else if(button==0)
break;
if(button==1 && i==0)
return(ESC);
else if(button==1 && i>0)
break;
}
else if(ascii=='\b' && button==0)
{
if(i!=0)
{
i--;
writechar(row,col+i,' ',47);
}
}
else if(isascii(ascii) && !iscntrl(ascii) && button==0 && (isdigit(ascii) || isalpha(ascii)) && tab==1)
{
str[i]=toupper(ascii);
writechar(row,col+i,ascii,47);
i++;
if(isdigit(str[0]))
{
errormesg(2,3);
i=0;
menubox(11,21,12,56,47,HALF_SHADOW);
size(6,7);
}
}
else if(ascii==9)
{
tab++;
if(tab>3)
tab=1;
if(tab==1)
{
if(mouseinit!=0)
hidemsptr();
size(6,7);
writestring(str1,9,38-len/2,127);
menubox(11,21,12,56,47,HALF_SHADOW);
menubox(14,26,15,35,32,HALF_SHADOW);
writestring("O",14,29,46);
writestring("k",14,30,43);
menubox(14,40,15,51,32,HALF_SHADOW);
writestring("Cancel",14,42,32);
}
else if(tab==2)
{
if(mouseinit!=0)
hidemsptr();
size(32,0);
writestring(str1,9,38-len/2,112);
menubox(14,26,15,35,32,HALF_SHADOW);
writestring("Ok",14,29,47);
menubox(14,40,15,51,32,HALF_SHADOW);
writestring("Cancel",14,42,32);
}
else if(tab==3)
{
if(mouseinit!=0)
hidemsptr();
menubox(14,26,15,35,32,HALF_SHADOW);
writestring("Ok",14,29,32);
menubox(14,40,15,51,32,HALF_SHADOW);
writestring("Cancel",14,42,47);
}
}
}
if(i>0)
{
str[i]='\0';
strcat(str,".SNG");
strcpy(p,str);
}
size(32,0);
if(mouseinit!=0)
hidemsptr();
return(0);
}
ask_name(str,aname,str1)
char *str,*aname,*str1;
{
int area,esc_flag,len;
char *p,currentdir[31];
area=(17-7+1)*(62-17+1)*2;
p=malloc(area);
if(p==NULL)
{
errormesg(0,10);
}
if(mouseinit!=0)
hidemsptr();
savevideo(7,17,17,62,p);
menubox(7,17,17,62,112,7);
drawbox(7,17,16,60,112);
len=strlen(str1);
writestring(str1,7,38-len/2,127);
len=strlen(str);
writestring(str,9,38-len/2,127);
menubox(11,21,12,56,47,HALF_SHADOW);
menubox(14,26,15,35,32,HALF_SHADOW);
writestring("O",14,29,46);
writestring("k",14,30,43);
menubox(14,40,15,51,32,HALF_SHADOW);
writestring("Cancel",14,42,32);
if(mouseinit!=0)
showms_ptr();
esc_flag=getname(11,22,aname,str);
size(32,0);
if(mouseinit!=0)
hidemsptr();
restorevideo(7,17,17,62,p);
free(p);
if(mouseinit!=0)
showms_ptr();
return(esc_flag);
}
/* displays Record menu,receives choice and branches control to appropriate function*/
recordfun()
{
int rchoice, flag,esc_flag=0,dulln=0;
char fname[30];
if(mouseinit!=0)
hidemsptr();
writestring(mainmenu[0],0,2,32);
if(mouseinit!=0)
showms_ptr();
if(load==1)
dulln=1;
rchoice=popupmenuv(recordmenu,6,1,0,"NOSACX",1,24,144,16,56,dulln);
status_line();
if(mouseinit!=0)
hidemsptr();
switch(rchoice)
{
case 0:
writestring(mainmenu[0],0,2,112);
break;
case 1:
writestring(mainmenu[0],0,2,112);
if(notedisp==0 && load==0)
new();
else
{
closefun();
new();
}
break;
case 2:
writestring(mainmenu[0],0,2,112);
if(notedisp==0 && load==0)
{
openfun();
}
else
{
closefun();
openfun();
}
break;
case 3:
writestring(mainmenu[0],0,2,112);
if(load==0 && saved==NO && notedisp==1)
save();
break;
case 4:
writestring(mainmenu[0],0,2,112);
if(load==0 && notedisp==1)
saveasfun();
break;
case 5:
writestring(mainmenu[0],0,2,112);
if(load==1 || notedisp==1)
closefun();
break;
case 6:
writestring(mainmenu[0],0,2,112);
if(load==1 || notedisp==1)
closefun();
fclose(filpoint);
size(6,7);
if(mouseinit!=0)
hidemsptr();
clrscr();
exit(0);
break;
case 75:/*left arrow key */
writestring(mainmenu[0],0,2,112);
writestring(mainmenu[4],0,52,32);
esc_flag=helpfun();
writestring(mainmenu[4],0,52,112);
break;
case 77:/* right arrow key */
writestring(mainmenu[0],0,2,112);
writestring(mainmenu[1],0,15,32);
esc_flag=editfun();
writestring(mainmenu[1],0,15,112);
break;
case 128:
writestring(mainmenu[0],0,2,112);
esc_flag=editfun();
writestring(mainmenu[1],0,15,112);
break;
case 216:
writestring(mainmenu[0],0,2,112);
esc_flag=settingfun();
writestring(mainmenu[2],0,26,112);
break;
case 336:
writestring(mainmenu[0],0,2,112);
esc_flag=playfun();
writestring(mainmenu[3],0,41,112);
break;
case 424:
writestring(mainmenu[0],0,2,112);
esc_flag=helpfun();
writestring(mainmenu[4],0,52,112);
break;
}
if(mouseinit!=0)
showms_ptr();
return(esc_flag);
}
editfun()
{
int echoice,esc_flag,dulln=0;
if(mouseinit!=0)
hidemsptr();
writestring(mainmenu[1],0,15,32);
if(mouseinit!=0)
showms_ptr();
if(select!=1 || notedisp==0 || load==1)
dulln=1;
echoice=popupmenuv(editmenu,6,1,13,"SCPLTM",2,128,256,16,56,dulln);
status_line();
if(mouseinit!=0)
hidemsptr();
switch(echoice)
{
case 0:
writestring(mainmenu[1],0,15,112);
break;
case 1:
writestring(mainmenu[1],0,15,112);
if(notedisp==1 && load==0)
selectfun();
break;
case 2:
writestring(mainmenu[1],0,15,112);
if(select==1 && notedisp==1 && load==0 && cut==0 && copy==0)
copyfun();
break;
case 3:
writestring(mainmenu[1],0,15,112);
if((copy==1 || cut==1) && notedisp==1 && load==0)
pastefun();
break;
case 4:
writestring(mainmenu[1],0,15,112);
if(select==1 && notedisp==1 && load==0)
clearfun();
break;
case 5:
writestring(mainmenu[1],0,15,112);
if(select==1 && notedisp==1 && load==0 && cut==0 && copy==0)
cutfun();
break;
case 6:
writestring(mainmenu[1],0,15,112);
if(notedisp==0 && load==0)
{
mergefun();
}
else
{
closefun();
mergefun();
}
break;
case 75:
writestring(mainmenu[1],0,15,112);
writestring(mainmenu[0],0,2,32);
esc_flag=recordfun();
writestring(mainmenu[0],0,2,112);
break;
case 77:
writestring(mainmenu[1],0,15,112);
writestring(mainmenu[2],0,26,32);
esc_flag=settingfun();
writestring(mainmenu[2],0,26,112);
break;
case 24:
writestring(mainmenu[1],0,15,112);
writestring(mainmenu[0],0,2,32);
esc_flag=recordfun();
writestring(mainmenu[0],0,2,112);
break;
case 216:
writestring(mainmenu[1],0,15,112);
writestring(mainmenu[2],0,26,32);
esc_flag=settingfun();
writestring(mainmenu[2],0,26,112);
break;
case 336:
writestring(mainmenu[1],0,15,112);
esc_flag=playfun();
writestring(mainmenu[3],0,41,112);
break;
case 424:
writestring(mainmenu[1],0,15,112);
esc_flag=helpfun();
writestring(mainmenu[4],0,52,112);
break;
}
if(mouseinit!=0)
showms_ptr();
return(esc_flag);
}
settingfun()
{
int schoice,esc_flag=0,dulln=0;
if(mouseinit!=0)
hidemsptr();
writestring(mainmenu[2],0,26,32);
if(mouseinit!=0)
showms_ptr();
if(load==1 || notedisp==0)
dulln=1;
schoice=popupmenuv(settmenu,5,1,24,"VRAHW",3,216,376,16,48,dulln);
status_line();
if(mouseinit!=0)
hidemsptr();
switch(schoice)
{
case 0:
writestring(mainmenu[2],0,26,112);
break;
case 1:
writestring(mainmenu[2],0,26,112);
volumefun();
break;
case 2:
writestring(mainmenu[2],0,26,112);
if(notedisp==1 && load==0)
persistfun();
break;
case 3:
writestring(mainmenu[2],0,26,112);
if(notedisp==1 && load==0)
pausefun();
break;
case 4:
writestring(mainmenu[2],0,26,112);
if(notedisp==1 && load==0)
{
pnoteval+=pnoteval;
if(pnoteval>=64)
pnoteval=64;
}
break;
case 5:
writestring(mainmenu[2],0,26,112);
if(notedisp==1 && load==0)
{
pnoteval-=(pnoteval/2);
if(pnoteval<=0)
pnoteval=1;
}
break;
case 75:
writestring(mainmenu[2],0,26,112);
writestring(mainmenu[1],0,15,32);
esc_flag=editfun();
writestring(mainmenu[1],0,15,112);
break;
case 77:
writestring(mainmenu[2],0,26,112);
writestring(mainmenu[3],0,41,32);
esc_flag=playfun();
writestring(mainmenu[3],0,41,112);
break;
case 24:
writestring(mainmenu[2],0,26,112);
esc_flag=recordfun();
writestring(mainmenu[0],0,2,112);
break;
case 128:
writestring(mainmenu[2],0,26,112);
esc_flag=editfun();
writestring(mainmenu[1],0,15,112);
break;
case 336:
writestring(mainmenu[2],0,26,112);
esc_flag=playfun();
writestring(mainmenu[3],0,41,112);
break;
case 424:
writestring(mainmenu[2],0,26,112);
esc_flag=helpfun();
writestring(mainmenu[4],0,52,112);
break;
}
if(mouseinit!=0)
showms_ptr();
return(esc_flag);
}
playfun()
{
int pchoice,esc_flag=0,dulln=0;
if(mouseinit!=0)
hidemsptr();
writestring(mainmenu[3],0,41,32);
if(mouseinit!=0)
showms_ptr();
if(notedisp==1 && load==0)
dulln=1;
else if(load!=1)
dulln=1;
pchoice=popupmenuv(playmenu,4,1,39,"LFBC",4,336,456,16,40,dulln);
status_line();
if(mouseinit!=0)
hidemsptr();
switch(pchoice)
{
case 0:
writestring(mainmenu[3],0,41,112);
break;
case 1:
writestring(mainmenu[3],0,41,112);
if(notedisp==0 && load==0)
loadfun();
else if(notedisp==1 && load==0)
{
closefun();
loadfun();
}
break;
case 2:
writestring(mainmenu[3],0,41,112);
if(load==1)
{
playforwfun();
}
break;
case 3:
writestring(mainmenu[3],0,41,112);
if(load==1)
playbacwfun();
break;
case 4:
writestring(mainmenu[3],0,41,112);
if(load==0 && notedisp==0)
plybckcontin();
else
{
closefun();
plybckcontin();
}
break;
case 75:
writestring(mainmenu[3],0,41,112);
writestring(mainmenu[2],0,26,32);
esc_flag=settingfun();
writestring(mainmenu[2],0,26,112);
break;
case 77:
writestring(mainmenu[3],0,41,112);
writestring(mainmenu[4],0,52,32);
esc_flag=helpfun();
writestring(mainmenu[4],0,52,112);
break;
case 24:
writestring(mainmenu[3],0,41,112);
esc_flag=recordfun();
writestring(mainmenu[0],0,2,112);
break;
case 128:
writestring(mainmenu[3],0,41,112);
esc_flag=editfun();
writestring(mainmenu[1],0,15,112);
break;
case 216:
writestring(mainmenu[3],0,41,112);
esc_flag=settingfun();
writestring(mainmenu[2],0,26,112);
break;
case 424:
writestring(mainmenu[3],0,41,112);
esc_flag=helpfun();
writestring(mainmenu[4],0,52,112);
break;
}
if(mouseinit!=0)
showms_ptr();
return(esc_flag);
}
helpfun()
{
int hchoice,esc_flag=0;
if(mouseinit!=0)
hidemsptr();
writestring(mainmenu[4],0,52,32);
if(mouseinit!=0)
showms_ptr();
hchoice=popupmenuv(helpmenu,1,1,47,"A",5,400,592,16,16);
status_line();
if(mouseinit!=0)
hidemsptr();
switch(hchoice)
{
case 0:
writestring(mainmenu[4],0,52,112);
break;
case 1:
scan=0;
writestring(mainmenu[4],0,52,112);
about();
if(mouseinit!=0)
showms_ptr();
break;
case 75:
writestring(mainmenu[4],0,52,112);
writestring(mainmenu[3],0,41,32);
esc_flag=playfun();
writestring(mainmenu[3],0,41,112);
break;
case 77:
writestring(mainmenu[4],0,52,112);
writestring(mainmenu[0],0,2,32);
esc_flag=recordfun();
writestring(mainmenu[0],0,2,112);
break;
case 24:
writestring(mainmenu[4],0,52,112);
esc_flag=recordfun();
writestring(mainmenu[0],0,2,112);
break;
case 128:
writestring(mainmenu[4],0,52,112);
esc_flag=editfun();
writestring(mainmenu[1],0,15,112);
break;
case 216:
writestring(mainmenu[4],0,52,112);
esc_flag=settingfun();
writestring(mainmenu[2],0,26,112);
break;
case 336:
writestring(mainmenu[4],0,52,112);
esc_flag=playfun();
writestring(mainmenu[3],0,41,112);
break;
}
if(mouseinit!=0)
showms_ptr();
return(esc_flag);
}
mainmenufun()
{
int mchoice,esc_flag=0;
displaymenuh(mainmenu,5);
if(mouseinit!=0)
hidemsptr();
mchoice=getresponseh(mainmenu,"RESPH",5);
status_line();
if(mouseinit!=0)
hidemsptr();
if(button==0)
{
switch(mchoice)
{
case 1:
esc_flag=recordfun();
break;
case 2:
esc_flag=editfun();
break;
case 3:
esc_flag=settingfun();
break;
case 4:
esc_flag=playfun();
break;
case 5:
esc_flag=helpfun();
break;
case ESC:
esc_flag=ESC;
}
}
else if(button==1 && (ygrid==0))
{
if(mouseinit!=0)
hidemsptr();
if(xgrid>=24 && xgrid<=64)
{
esc_flag=recordfun();
}
else if(xgrid>=128 && xgrid<=152)
{
esc_flag=editfun();
}
else if(xgrid>=216 && xgrid<=272)
{
esc_flag=settingfun();
}
else if(xgrid>=336 && xgrid<=360)
{
esc_flag=playfun();
}
else if(xgrid>=424 && xgrid<=448)
{
esc_flag=helpfun();
}
}
if(mouseinit!=0)
hidemsptr();
if(esc_flag==ESC)
return(esc_flag);
return(esc_flag);
}
void main()
{
char noteptr[10],pitchptr[10],persistptr[10],pauseptr[10];
#ifdef MA
{
vid_mem=(char far *)0xb0000000L;
textmode(7);
}
#else
{
vid_mem=(char far *)0xb8000000L;
textmode(3);
}
#endif
clrscr();
initmouse();
if(mouseinit!=0)
hidemsptr();
workscreen();
displaymenuh(mainmenu,5);
note.persist=50;
note.pause=1;
note.valnote=1;
new();
if(mouseinit!=0)
showms_ptr();
while(1)
{
ascii=0;
scan=0;
if(mouseinit!=0)
showms_ptr();
getkey();
if(mouseinit!=0)
{
xgridpres=xgrid;
ygridpres=ygrid;
}
if(ascii==0 && button==0)
{
switch(scan)
{
case 59: /* F1 key */
if(mouseinit!=0)
hidemsptr();
if(notedisp!=0 && load==0)
displayhelp(60);
else
{
writestring(mainmenu[4],0,52,32);
helpfun();
writestring(mainmenu[4],0,52,112);
}
break;
case 35:// Alt-H
if(mouseinit!=0)
hidemsptr();
helpfun();
break;
case 60: /* F2 key */
if(saved==NO && load==0 && notedisp==1)
save();
break;
case 25: /* Alt-P */
if(mouseinit!=0)
hidemsptr();
writestring(mainmenu[3],0,41,32);
playfun();
writestring(mainmenu[3],0,41,112);
break;
case 31: /* Alt-S */
if(mouseinit!=0)
hidemsptr();
writestring(mainmenu[2],0,26,32);
settingfun();
writestring(mainmenu[2],0,26,112);
break;
case 18: /* Alt-E */
if(mouseinit!=0)
hidemsptr();
writestring(mainmenu[1],0,15,32);
editfun();
writestring(mainmenu[1],0,15,112);
break;
case 19: /* Alt-R */
if(mouseinit!=0)
hidemsptr();
/* highlight the menu item */
writestring(mainmenu[0],0,2,32);
/* call file services */
recordfun();
/* make highlighted item normal */
writestring(mainmenu[0],0,2,112);
break;
case 68: // F10 key
mainmenufun();
if(mouseinit!=0)
showms_ptr();
break;
case 50:// Alt-M
if(mouseinit!=0)
hidemsptr();
if(notedisp!=1 && load==0)
mergefun();
else
{
closefun();
mergefun();
}
break;
case 46:// Alt-C
closefun();
break;
case 45:// Alt-X
if(notedisp==1 && saved==NO && load==0)
check_saved();
fclose(filpoint);
remove(filespec);
free(disparea);
size(6,7);
if(mouseinit!=0)
hidemsptr();
clrscr();
exit(0);
case 93:/* Shift F10 */
scan=0;
about();
break;
case 22:
pnoteval+=pnoteval;
if(pnoteval>=64)
pnoteval=64;
break;
case 17:
pnoteval-=(pnoteval/2);
if(pnoteval<=0)
pnoteval=1;
break;
case 72:
case 80:
volumefun();
break;
}
}
else if(ascii==0 && button==1 && ygrid==0)
{
if(xgrid>=24 && xgrid<=64)
{
recordfun();
writestring(mainmenu[0],0,2,112);
}
else if(xgrid>=128 && xgrid<=152)
{
editfun();
writestring(mainmenu[1],0,15,112);
}
else if(xgrid>=216 && xgrid<=272)
{
settingfun();
writestring(mainmenu[2],0,26,112);
}
else if(xgrid>=336 && xgrid<=360)
{
playfun();
writestring(mainmenu[3],0,41,112);
}
else if(xgrid>=424 && xgrid<=448)
{
helpfun();
writestring(mainmenu[4],0,52,112);
}
}
else if(ascii!=0 && notedisp==1 && load==0 && button==0)
{
switch(ascii)
{
case 90:
case 122:
noteval=0;
break;
case 83:
case 115:
noteval=1;
break;
case 88:
case 120:
noteval=2;
break;
case 68:
case 100:
noteval=3;
break;
case 67:
case 99:
noteval=4;
break;
case 86:
case 118:
noteval=5;
break;
case 71:
case 103:
noteval=6;
break;
case 66:
case 98:
noteval=7;
break;
case 72:
case 104:
noteval=8;
break;
case 78:
case 110:
noteval=9;
break;
case 74:
case 106:
noteval=10;
break;
case 77:
case 109:
noteval=11;
break;
case 44:
noteval=12;
break;
default:
nosound();
}
if(ascii==90 || ascii==122 || ascii==83 || ascii==115 || ascii==88 || ascii==120 || ascii==68 || ascii==100 || ascii==67 || ascii==99 || ascii==86 || ascii==118 || ascii==71 || ascii==103 || ascii==66 || ascii==98 || ascii==72 || ascii==104 || ascii==78 || ascii==110 || ascii==74 || ascii==106 || ascii==77 || ascii==109 || ascii==44)
{
sound(octave[noteval]*pnoteval+volume);
delay(note.persist);
nosound();
if(note.pause>0)
delay(note.pause);
++notes;
note.valnote=octave[noteval]*pnoteval;
sprintf(noteptr,"%10.0f",notes);
writestring(noteptr,9,38,112);
writestring(swara[noteval],10,46,112);
sprintf(pitchptr,"%10.1f",volume);
writestring(pitchptr,11,38,112);
sprintf(persistptr,"%10u",note.persist);
writestring(persistptr,12,38,112);
sprintf(pauseptr,"%10u",note.pause);
writestring(pauseptr,13,38,112);
fwrite(¬e, sizeof(note),1,filpoint);
saved=NO;
}
}
}
}