school turbo c++ project

6
By : Tushant Jha, Utkarsh Sharma, Palash Gupta, Aditya Tiwari Synopsis The DOS-Tones project is a project on the 'language of old times', that is Turbo C++. It uses BGI graphics and Mouse.h, calling mouse interrupts, to provide DOS Graphical Interface as the user-interface. Its basic function is that the user can fix musical notes, and hear the CPU Beep Music. Although this is of no practical use today as there are already softwares available, which are million- times useful than this, but the project atleast helps us go back into the ancestry of softwares like Fruity Loops and Audacity and understand their working. Source Code /*DOS-Tones 1.0.0 (C) Tushant Jha, Utkarsh Sharma, Palash Gupta, Aditya Tiwari*/ #include<graphics.h> #include<stdio.h> #include<conio.h> #include<dos.h> #include<iostream.h> DOS-Tones 1.0.0 C.Sc. Turbo C++ Project CLASS XI C.Sc. Proj. DOS-Tones 1.0.0 1

Upload: tj

Post on 18-Nov-2014

925 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: School Turbo C++ Project

By : Tushant Jha, Utkarsh Sharma, Palash Gupta, Aditya Tiwari

Synopsis

The DOS-Tones project is a project on the 'language of old times', that is TurboC++. It uses BGI graphics and Mouse.h, calling mouse interrupts, to provideDOS Graphical Interface as the user-interface. Its basic function is that the usercan fix musical notes, and hear the CPU Beep Music. Although this is of nopractical use today as there are already softwares available, which are million-times useful than this, but the project atleast helps us go back into the ancestry ofsoftwares like Fruity Loops and Audacity and understand their working.

Source Code

/*DOS-Tones 1.0.0(C) Tushant Jha, Utkarsh Sharma, Palash Gupta, Aditya Tiwari*/

#include<graphics.h>#include<stdio.h>#include<conio.h>#include<dos.h>#include<iostream.h>

DOS-Tones 1.0.0C.Sc. Turbo C++ Project

CLASS XI C.Sc. Proj.

DOS-Tones 1.0.01

Page 2: School Turbo C++ Project

#include<mouse.h>

int x=120,y=20,s=40,xmax,ymax;char notes[50],notesbkup[50];char key;void display();

void welcome() //the welcome screen in DOS Shell{

cout<<"We know this isn't going to be fun, but the culprits are not theprogrammers, the limitations of Turbo C++ are to be blamed";

delay(5000);clrscr();gotoxy(11,12);cout<<"DOS-Tones 1.0.0";delay(5000);

}

char up(char inp) //to increase a note{

char tj;switch(inp){

case 'O':tj= 'C';break;case 'C':tj= 'c';break;case 'c':tj= 'D';break;case 'D':tj= 'd';break;case 'd':tj= 'E';break;case 'E':tj= 'F';break;case 'F':tj= 'f';break;case 'f':tj= 'G';break;case 'G':tj= 'g';break;case 'g':tj= 'A';break;case 'A':tj= 'a';break;case 'a':tj= 'B';break;case 'B':tj= 'O';break;

}return tj;

}

void playnote(char nt){

switch(nt){

case 'C':sound(261);delay(500);nosound();break;case 'c':sound(277);delay(500);nosound();break;case 'D':sound(293);delay(500);nosound();break;case 'd':sound(311);delay(500);nosound();break;case 'E':sound(329);delay(500);nosound();break;case 'F':sound(349);delay(500);nosound();break;case 'f':sound(370);delay(500);nosound();break;case 'G':sound(392);delay(500);nosound();break;case 'g':sound(415);delay(500);nosound();break;case 'A':sound(440);delay(500);nosound();break;case 'a':sound(466);delay(500);nosound();break;case 'B':sound(494);delay(500);nosound();break;case 'O':delay(500);break;

}

DOS-Tones 1.0.02

Page 3: School Turbo C++ Project

}

void playfull(){

mousehide();for(int i=0;i<50;i++){

notesbkup[i]=notes[i];playnote(notes[i]);notes[i]=notesbkup[i];

}mouseshow();display();

}

void display(){

clearviewport();rectangle(10,10,630,470);settextstyle(0,0,3);outtextxy(140,360,"DOS-Tones 1.0.0");settextstyle(0,0,1);outtextxy(80, 450, "By Tushant Jha, Utkarsh Sharma, Palash Gupta, Aditya

Tiwari");settextstyle(0,0,0);rectangle(60,280,120,310);outtextxy(73,292,"PLAY");rectangle(520,280,580,310);outtextxy(533,292,"EXIT");char *g, h;for(int i=0;i<5;i++){

for (int j=0;j<10;j++){

int m=x+(j*s)+(s/2),n=y+(i*s)+(s/2);h=notes[(10*i)+j];sprintf(g,"%c",h);rectangle (x+(j*s),y+(i*s),x+s+(j*s),y+s+(i*s));outtextxy(m,n," ");outtextxy(m,n,g);

}}

}

void refresh() //to refresh my array containing notes{

for(int i=0;i<50;i++){

notes[i]='O';}

}

void main(){

clrscr();refresh();welcome();int gd=DETECT,gm,exit=0,mx,my,click,nx,ny,p;

DOS-Tones 1.0.03

Page 4: School Turbo C++ Project

initgraph(&gd, &gm, "c:/tc/bgi ");xmax=getmaxx();ymax=getmaxy();setcolor(1);setbkcolor(11);setfillstyle(0,1);mouseshow();display();do //the most important loop of program{

mouseposi(mx,my,click);if(click==1){

delay(500);if(((mx>x)&&(mx<(x+(30*s))))&&((my>y)&&(my<(y+(10*s))))){

nx=(mx-x)/s;ny=(my-y)/s;p=(10*ny)+nx;notes[p]=up(notes[p]);display();

}if(((mx>520)&&(mx<580))&&((my>280)&&(my<310))){

exit=1;}if(((mx>60)&&(mx<120))&&((my>280)&&(my<310))){

playfull();}

}}while(exit==0); //loops indefinitely until exit is 1, as to be done by exit buttonclosegraph();clrscr();cout<<"Thanks for bearing such a rubbish project";getch();

}

1. welcome() & refresh()

The welcome() function simply uses gotoxy & cout functions to get a simple welcome screen.

The refresh() function just initiates all the values in notes[50] array to 'O'.

The values in notes[50] array represent the musical notes to be played.

2. up(inp) , playnote(nt) & playfull()

These functions are all related to music. The up(inp) function returns the next piano note ofthe note passed into the function.

The playnote(nt) function uses the functions sound(frequency), delay(time), & nosound() tomake beeps corresponding to different piano notes from the CPU. The playfull() function uses

DOS-Tones 1.0.04

Page 5: School Turbo C++ Project

playnote to play the whole array notes. A backup array is kept as the array pointers showanomalous behaviour after playnote treats them as integers (as single chars are ints).

3. display()

This function sets the screen as required. It uses a for loop to precisely place a table of noteswith the corresponding values in array printed with it. It is used very frequently, as it doesn'teven slow down the program, whenever the array is altered.It uses functions such as rectangle, settextstyle, outtextxy, & clearviewport, all graphicsfunctions defined in graphics.h, a native library in Turbo C++.Also sprintf had to be used as outtextxy can take only string values, while array always pointsto single-character, which are stored as integers (ASCII).

4. mouse.h

union REGS in,out; //for accessing the AX register (mouse

register)

void mouseshow() //displays mouse pointer{

in.x.ax=1;int86(51,&in,&out); //used to read in/out of the register

}

void mousehide() //hides mouse pointer{

in.x.ax=2;int86(51,&in,&out);

}

void mouseposi(int &xpos, int &ypos, int &click){ //for getting current coordinates and click status of mouse

in.x.ax=3;int86(51,&in,&out);click=out.x.bx;xpos=out.x.cx;ypos=out.x.dx;

}

void setposi(int &xpos, int &ypos) //sets mouse pointer to given coordinates{

in.x.ax=4;in.x.cx=xpos;in.x.dx=ypos;int86(51,&in,&out);

}

This header file calls interrupts from mouse driver to allow use of mouse in dos shell.

DOS-Tones 1.0.05

Page 6: School Turbo C++ Project

5. main()

The initial part of main() function does the basic work by calling clrscr(), refresh(),welcome(), initializing the graph, setbkcolor(), and mouseshow(). The it calls display() forfirst time during execution.

The do-while loop that follow initialization is the most important part of program. As wedeclare a variable 'exit', we initialize it as 0, and the loop runs indefinitely as long as exithas value 0. Inside the loop, we call mouseposi() to get the status of mouse, and if it hasbeen clicked we check if it has been clicked at a point where it 'should' be clicked.Depending on where it is clicked, respective functions are performed. If the click wasinside the table, then a Modular-Row-Column Algorithm is used to 'up' the value inarray which corresponds to the clicked cell. If the 'play' button is clicked, playfull() iscalled, and if 'exit' is clicked, the value of int variable 'exit' becomes 1. As 'exit' becomes1, the loop stops 'looping', thus coming out to 'The End' message.

DOS-Tones 1.0.06