Freeware on Music

This page contains the source code for the Play menu

Return to freeware page

Carnatic Music Hme Page

--------------------------

loadfun()
{
	int area,esc_flag;
	float c=0;
	long int test;
	char lname[10],not[10];
	if(notedisp==0)
	{
		load=1;
		notedisp=1;
		size(32,0);
		while(1)
		{
			messgline(10);
			esc_flag=ask_name("Enter Record name",lname," Load Record ");
			if(esc_flag==ESC)
			{
				load=0;
				notedisp=0;
				status_line();
				return(0);
			}
			if(mouseinit!=0)
				hidemsptr();
			filpoint=fopen(lname,"rb");
			if(filpoint==NULL)
			{
				errormesg(0,1);
				load=0;
				notedisp=0;
				status_line();
			}
			else
			{
				load=1;
				break;
			}
		}
		area=(17-6+1)*(60-19+1)*2;
		disparea=malloc(area);
		if(disparea==NULL)
		{
			errormesg(0,10);
		}
		if(mouseinit!=0)
			hidemsptr();
		savevideo(6,19,17,60,disparea);
		menubox(6,19,17,60,112,7);
		drawbox(6,19,16,58,112);
		write_fname(lname);
		writestring("Notes:",9,32,112);
		writestring("Persistence:",11,26,112);
		writestring("Volume:",13,31,112);
		writestring("Pause:",12,32,112);
		fseek(filpoint,0,SEEK_END);
		test=ftell(filpoint);
		c=test/6;
		writestring("Total Notes:",10,26,112);
		sprintf(not,"%10.0f",c);
		writestring(not,10,38,112);
	}
	status_line();
	if(mouseinit!=0)
		showms_ptr();
	return(0);
}


void playforwfun()
{
	float c=0;
	char noteptr[10],persistptr[10],pauseptr[10],volptr[10];
	if(load==1)
	{
		size(32,0);
		if(mouseinit!=0)
			hidemsptr();
		/* status line indicating ESC*/
		menubox(24,0,24,79,112,NO_SHADOW);
		writestring("Play Record Forwards     Press ^<^E^S^C^> to Quit ",24,1,112);
		fseek(filpoint,0,SEEK_SET);
		while(fread(¬e,sizeof(note),1,filpoint)==1)
		{
			++c;
			sprintf(noteptr,"%10.0f",c);
			writestring(noteptr,9,38,112);
			sprintf(persistptr,"%10u",note.persist);
			writestring(persistptr,11,38,112);
			sprintf(pauseptr,"%10u",note.pause);
			writestring(pauseptr,12,38,112);
			sprintf(volptr,"%10.1f",volume);
			writestring(volptr,13,38,112);
			sound(note.valnote*volume);
			delay(note.persist);
			if(kbhit())
			{
				int sca=0;
				{
					union REGS i,o;
					i.h.ah=0;
					int86(22,&i,&o);
					sca=o.h.ah;
				}
				if(sca==1)
				{
					nosound();
					if(mouseinit!=0)
						showms_ptr();
					status_line();
					return;
				}
				else if(sca==72 || sca==80)
				{
					nosound();
					volumefun();
					if(mouseinit!=0)
						hidemsptr();
				}
			}
			if(note.pause>1)
			{
				nosound();
				delay(note.pause);
			}
		}
	}
	nosound();
	if(mouseinit!=0)
		showms_ptr();
	status_line();
}

void playbacwfun()
{
	long int test,ctest;
	float c=0;
	char noteptr[10],persistptr[10],pauseptr[10],volptr[10],sizptr[30];
	if(load==1)
	{
		size(32,0);
		if(mouseinit!=0)
			hidemsptr();
		fseek(filpoint,0,SEEK_END);
		ctest=ftell(filpoint);
		c=ctest/6;
		writestring(noteptr,9,38,112);
		/* status line indicating ESC*/
		menubox(24,0,24,79,112,NO_SHADOW);
		writestring("Play Record Backwards     Press ^<^E^S^C^> to Quit ",24,1,112);
		fseek(filpoint,0,SEEK_END);
		test=ftell(filpoint);
		fseek(filpoint,-6,SEEK_CUR);
		while(fread(¬e,sizeof(note),1,filpoint)==1)
		{
			sprintf(noteptr,"%10.0f",c);
			writestring(noteptr,9,38,112);
			sprintf(persistptr,"%10u",note.persist);
			writestring(persistptr,11,38,112);
			sprintf(pauseptr,"%10u",note.pause);
			writestring(pauseptr,12,38,112);
			sprintf(volptr,"%10.1f",volume);
			writestring(volptr,13,38,112);
			sound(note.valnote*volume);
			delay(note.persist);
			if(kbhit())
			{
				int sca=0;
				{
					union REGS i,o;
					i.h.ah=0;
					int86(22,&i,&o);
					sca=o.h.ah;
				}
				if(sca==1)
				{
					nosound();
					if(mouseinit!=0)
						showms_ptr();
					status_line();
					return;
				}
				else if(sca==72 || sca==80)
				{
					nosound();
					volumefun();
					if(mouseinit!=0)
						hidemsptr();
				}
			}
			if(note.pause>0)
				delay(note.pause);
			test=ftell(filpoint);
			if(test<7)
				break;
			fseek(filpoint,-12,SEEK_CUR);
			--c;
		}
	}
	nosound();
	if(mouseinit!=0)
		showms_ptr();
	status_line();
}

pgetname(row,col,p)
int row,col;
char *p;
{
	int i=0,k,tab=1,resc=7;
	char str[11]="NONAME1";
	char *s;
	int flags,escflag=0;
	char *str1="Enter Record Name";
	int len;
	len=strlen(str1);
	size(6,7);
	if(mouseinit!=0)
		hidemsptr();
	writestring(str,row,col+i,47);
	if(mouseinit!=0)
		showms_ptr();
	while(1)
	{
		if(mouseinit!=0)
			showms_ptr();
		gotoxy(col+i+1,row+1);
		getkey();
		if(ascii==27 || tab==4 ||((button==1) && (xgrid>=360 && xgrid<=432) && ygrid==112 ))
		{
			size(32,0);
			if(ascii==13)
				return(ESC);
			else if(button==1)
			{
				if(mouseinit!=0)
					hidemsptr();

				size(32,0);
				writestring("Add",14,35,32);
				writestring("Done",14,23,32);
				menubox(14,45,15,56,112,NO_SHADOW);
				menubox(14,46,14,55,32,NO_SHADOW);
				writestring("Cancel",14,48,47);
				delay(150);
				menubox(14,45,15,56,32,HALF_SHADOW);
				writestring("Cancel",14,47,32);
				delay(75);
				return(ESC);
			}
			else if(ascii==ESC)
				return(ESC);
		}
		else if(((ascii==13 || i>8) && (tab==3 || tab==1) && button==0) || (button==1 && (xgrid>=264 && xgrid<=312) && ygrid==112))
		{
			if(button==1)
			{
				if(mouseinit!=0)
					hidemsptr();

				size(32,0);
				writestring("Done",14,23,32);
				writestring("Cancel",14,47,32);
				menubox(14,33,15,41,112,NO_SHADOW);
				menubox(14,34,14,40,32,NO_SHADOW);
				writestring("Add",14,36,47);
				delay(150);
				menubox(14,33,15,41,32,HALF_SHADOW);
				writestring("Add",14,35,32);
				delay(75);
			}
			if(i>9)
			{
				if(mouseinit!=0)
					hidemsptr();
				errormesg(4,5);
			}
			else
				break;
		}
		else if((tab==2 && ascii==13 && button==0) || (button==1 && (xgrid>=168 && xgrid<=224) && ygrid==112))
		{
			if(button==1)
			{
				if(mouseinit!=0)
					hidemsptr();

				writestring("Add",14,35,32);
				writestring("Cancel",14,47,32);
				menubox(14,21,15,30,112,NO_SHADOW);
				menubox(14,22,14,29,32,NO_SHADOW);
				writestring("Done",14,24,47);
				delay(150);
				menubox(14,21,15,30,32,HALF_SHADOW);
				writestring("Done",14,23,32);
				delay(75);
				tab=2;
			}
			if(strcmp(str,"NONAME1")==0)
			{
				resc=8;
				break;
			}
			else if(i>0)
			{
				resc=9;
				break;
			}
			else if(i==0)
			{
				resc=7;
				break;
			}
		}
		if(i==0 && button==0)
			menubox(11,21,12,56,47,HALF_SHADOW);
		if(ascii=='\b' &&  button==0 && tab==1)
		{
			if(i!=0)
			{
				i--;
				writechar(row,col+i,' ',47);
			}
		}
		if(isascii(ascii) && !iscntrl(ascii) && tab==1 && button==0 && (isdigit(ascii) || isalpha(ascii)) )
		{
			str[i]=toupper(ascii);
			writechar(row,col+i,ascii,47);
			i++;
			if(isdigit(str[0]))
			{
				if(mouseinit!=0)
					hidemsptr();
				errormesg(2,3);
				i=0;
				menubox(11,21,12,56,47,HALF_SHADOW);
				size(6,7);
			}
		}
		if(ascii==9)
		{
			++tab;
			if(tab>4)
				tab=1;
			if(tab==1)
			{
				if(mouseinit!=0)
					hidemsptr();

				menubox(14,45,15,56,32,HALF_SHADOW);
				writestring("Cancel",14,47,32);
				menubox(14,33,15,41,32,HALF_SHADOW);
				writestring("Add",14,35,47);
				size(6,7);
				writestring(str1,9,39-len/2,127);
				messgline(1);
				resc=6;
			}
			else if(tab==2)
			{
				if(mouseinit!=0)
					hidemsptr();

				size(30,0);
				writestring(str1,9,39-len/2,112);
				menubox(14,33,15,41,32,HALF_SHADOW);
				writestring("Add",14,35,32);
				menubox(14,21,15,30,32,HALF_SHADOW);
				writestring("Done",14,23,47);
				messgline(13);
				resc=9;
			}
			else if(tab==3)
			{
				if(mouseinit!=0)
					hidemsptr();

				size(30,0);
				menubox(14,21,15,30,32,HALF_SHADOW);
				writestring("Done",14,23,32);
				menubox(14,33,15,41,32,HALF_SHADOW);
				writestring("Add",14,35,47);
				messgline(14);
				resc=6;
			}
			else if(tab==4)
			{
				if(mouseinit!=0)
					hidemsptr();

				size(30,0);
				menubox(14,33,15,41,32,HALF_SHADOW);
				writestring("Add",14,35,32);
				menubox(14,45,15,56,32,HALF_SHADOW);
				writestring("Cancel",14,47,47);
				messgline(12);
				resc=ESC;
			}
		}
	}
	escflag=resc;
	if(i>0 || tab==1 || tab==3)
	{
		if(i>0)
			str[i]='\0';
		strcat(str,".SNG");
		strcpy(p,str);
	}
	size(32,0);
	if(tab==1 || tab==3)
		escflag=6;
	return(escflag);
}


pask_name(name)
char *name;
{
	int area,esc_flag,len;
	char *p;
	char *str="Enter Record Name";
	char *str1=" Play Continous ";
	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,39-len/2,127);
	len=strlen(str);
	writestring(str,9,39-len/2,127);
	menubox(11,21,12,56,47,HALF_SHADOW);
	messgline(1);
	while(1)
	{
		menubox(14,21,15,30,32,HALF_SHADOW);
		writestring("Done",14,23,32);
		menubox(14,33,15,41,32,HALF_SHADOW);
		writestring("Add",14,35,47);
		menubox(14,45,15,56,32,HALF_SHADOW);
		writestring("Cancel",14,47,32);
		esc_flag=pgetname(11,22,name);
		if(mouseinit!=0)
			hidemsptr();
		if(esc_flag==6 || esc_flag==9)
		{
			filpoint=fopen(name,"rb");
			if(filpoint==NULL)
			{
				if(mouseinit!=0)
					hidemsptr();
				errormesg(0,1);
				menubox(11,21,12,56,47,HALF_SHADOW);
			}
			else
			{
				fclose(filpoint);
				break;
			}
		}
		else if(esc_flag==ESC || esc_flag==8 || esc_flag==7)
			break;
	}
	restorevideo(7,17,17,62,p);
	free(p);
	if(mouseinit!=0)
		showms_ptr();
	return(esc_flag);
}


plybckcontin()
{
	int area,esc_flag,i=0,m=0,j=0,cont=0,k=0,count=0,y=0;
	char *darea;
	struct lpname
	{
		char lname[13];
	}lpl[20];
	if(notedisp==0 && load==0)
	{
		area=(16-4+1)*(60-19+1)*2;
		darea=malloc(area);
		if(darea==NULL)
		{
			errormesg(0,1);
		}
		if(mouseinit!=0)
			hidemsptr();
		savevideo(4,19,16,60,darea);
		while(1)
		{
			size(32,0);
			esc_flag=pask_name(lpl[i].lname);
			if(esc_flag==ESC || (esc_flag==8 && i==0))
			{
				load=0;
				notedisp=0;
				if(mouseinit!=0)
					hidemsptr();
				restorevideo(4,19,16,60,darea);
				status_line();
				free(darea);
				return(0);
			}
			else if(esc_flag==7 || esc_flag==8)
			{
			      if(esc_flag==8)
					i--;
			      break;
			}
			else if(esc_flag==6 || esc_flag==9 )
			{
				if(i==0)
				{
					char str[2];
					int k;
					cont=1;
					notedisp=1;
					menubox(4,20,16,54,112,NO_SHADOW);
					drawbox(4,20,16,54,112);
					writestring("Records",5,34,112);
					sprintf(str,"%c",179);
					for(k=0; k<10; k++)
						writestring(str,6+k,37,112);
					if(esc_flag==9)
						break;
					delay(150);
				}
				if(i<10)
				{
					writestring(lpl[i].lname,6+i,23,112);
					delay(150);
				}
				else if(i>9)
				{
					writestring(lpl[i].lname,6+j,40,112);
					j++;
					delay(150);
				}
				if(esc_flag==9)
					break;
				++i;
				if(i>19)
				{
					i--;
					break;
				}
			}
		}
	}
	messgline(2);
	if(mouseinit!=0)
		hidemsptr();
	if(cont==1)
	{
		j=0;
		while(1)
		{
			if(m<10)
			{
				if(k==0)
				{
					if(count>0 && i<10)
					{
						menubox(6+y-1,23,6+y-1,32,112,NO_SHADOW);
						writestring(lpl[y-1].lname,6+y-1,23,112);
					}
					if(i>9 && count>0)
					{
						menubox(6+j-1,40,6+j-1,51,112,NO_SHADOW);
						writestring(lpl[10+j-1].lname,6+j-1,40,112);
					}
					j=0;
				}
				if(m>0)
				{
					menubox(6+m-1,23,6+m-1,32,112,NO_SHADOW);
					writestring(lpl[m-1].lname,6+m-1,23,112);
				}
				menubox(6+m,23,6+m,32,31,NO_SHADOW);
				writestring(lpl[m].lname,6+m,23,31);
				k++;
				count=1;
			}
			if(m>9)
			{
				if(j==0)
				{
					k=0;
					menubox(6+m-1,23,6+m-1,32,112,NO_SHADOW);
					writestring(lpl[m-1].lname,6+m-1,23,112);
				}
				else
				{
					menubox(6+j-1,40,6+j-1,51,112,NO_SHADOW);
					writestring(lpl[m-1].lname,6+j-1,40,112);
				}
				menubox(6+j,40,6+j,51,31,NO_SHADOW);
				writestring(lpl[m].lname,6+j,40,31);
				j++;
			}
			filpoint=fopen(lpl[m].lname,"rb");
			if(filpoint==NULL)
			{
				errormesg(0,8);
			}
			while(fread(¬e,sizeof(note),1,filpoint)==1)
			{
				sound(note.valnote*volume);
				delay(note.persist);
				if(kbhit())
				{
					int sca=0;
					{
						union REGS i,o;
						i.h.ah=0;
						int86(22,&i,&o);
						sca=o.h.ah;
					}
					if(sca==1)
					{
							nosound();
							restorevideo(4,19,16,60,darea);
							free(darea);
							status_line();
							load=0;
							notedisp=0;
							fclose(filpoint);
							if(mouseinit!=0)
								showms_ptr();
							return(0);
					}
					else if(sca==72 || sca==80)
					{
						nosound();
						volumefun();
					}
				}
				if(note.pause>0)
					delay(note.pause);
			}
			nosound();
			fclose(filpoint);
			m++;
			if(m>i)
			{
				if(m<10)
				{
					y=k;
					k=0;
				}
				m=0;
			}
		}
	}
	status_line();
	return(0);
}