///////////////////////////////////////////////////////
//                                                   //
//       Московский Государственный Технический      //
//           Университет Гражданской Авиации         //
//                                                   //
//      Курсовая работа студента группы: ЭВМ-2-2     //
//           Новичкова Виталия Дмитриевича           //
//                                                   //
// (с) 2005-2012 Система Компьютнрных Сетей  WohlNET //
//                                                   //
///////////////////////////////////////////////////////

//Главная функция

void main()
{
nvd_logo();
char c;
char *s, *tmp, sid[6], *sback, sidback[6];
int menuitem=0;
int gd=DETECT,gm,err;

mainmenu:
clrscr();
printf("\n\n\n\n\n\n");
for(i=0;i<80;i++) printf("=");



printf("                        ==Система рисования графиков==\n");
printf("                               ====Главное меню====\n");
printf("\n");
printf("                        1. Нарисовать график по формуле\n");
printf("                        2. Задать масштаб для графика\n");
printf("                        3. Выбрать цветовую палитру\n");
printf("                        4. Краткая помощь по вводу формул\n");
printf("                        5. Об авторе (с)\n");
printf("                        6. Выход\n");
for(i=0;i<80;i++) printf("=");
printf("                        Введите команду:  ");


do
{
gotoxy(wherex()-1, wherey());printf(" ");gotoxy(wherex()-1, wherey());
menuitem=getche();
if (menuitem==0) menuitem=getche();
}
while((menuitem>'6')||(menuitem<'1'));

switch(menuitem)
{
case '1':
goto EnterFormula;
case '2':
goto ChSize;
case '3':
goto ChColor;
case '4':
goto info;
case '5':
goto aboutme;
case '6':
clrscr();
goto exit;
}

ChColor:
//sqr();
clrscr();
ColorMenu:
gotoxy(1,1);
printf("Выберите параметр:\n");
i=0;jjj=color1;if(jjj==0){jjj=0;i=7;}
prc("1. Фон\n",i,jjj);
gotoxy(1,wherey());
i=0;jjj=color2;if(jjj==0){jjj=0;i=7;}
prc("2. Сетка\n",i,jjj);
gotoxy(1,wherey());
i=0;jjj=color3;if(jjj==0){jjj=0;i=7;}
prc("3. Оси координат\n",i,jjj);
gotoxy(1,wherey());
i=0;jjj=color4;if(jjj==0){jjj=0;i=7;}
prc("4. График функции\n", i, jjj);
gotoxy(1,wherey());
i=0;jjj=color5;if(jjj==0){jjj=0;i=7;}
prc("5. Подписи\n", i, jjj);
gotoxy(1,wherey());

cprintf("\nВведите параметр (Esc - Возврат): ");
ChnMenu:
key=getch();
if(!((key>='1')&&(key<='5')||(key==27)))goto ChnMenu;
switch(key)
{
case '1':
color1 = stcolor(color1);
goto ColorMenu;

case '2':
color2 = stcolor(color2);
goto ColorMenu;

case '3':
color3 = stcolor(color3);
goto ColorMenu;

case '4':
color4 = stcolor(color4);
goto ColorMenu;

case '5':
color5 = stcolor(color5);
goto ColorMenu;

case 27:
;
}


goto mainmenu;


ChSize:
gotoxy(20, wherey()+2);
printf("Задайте масштабы для графика:\n");
gotoxy(20, wherey());
printf("Введите минимум (Текущий %i):", sizea);
cin >> sizea;
gotoxy(20, wherey());
printf("Введите Максимум (Текущий %i):", sizeb);
cin >> sizeb;
gotoxy(20, wherey());
printf("Масштаб назначен!");
getch();
goto mainmenu;

aboutme:
clrscr();
for(i=0;i<80;i++) printf("=");
printf("                               Об Авторе\n");
for(i=0;i<80;i++) printf("=");
printf("\n\
\n\
			   Виталий Дмитриевич Новичков\n\
			     Студент группы ЭВМ-2-2\n\
\n\
			 (C) 2005-2011 Система WohlNET\n \
\n\
\n\
\n\
			  Проект выполнен по заказу:\n \
			     Заказчик: МГТУ ГА\n\n\
\
			  Представитель организации:\n\
		    Заместитель Декана ФПМиВТ Надейкина Л.А.\n\
\n \
		      Нажмите любую клавишу для возврата...\n\
\
");
if(!getch())getch();
goto mainmenu;


info:
clrscr();
for(i=0;i<80;i++) printf("=");
gotoxy(wherex()+40-strlen("Краткая помощь")/2, wherey());printf("Краткая помощь\n");
for(i=0;i<80;i++) printf("=");
printf("Условные обозначения:\n\
x	-  Переменная\n\
Z       -  Любое допустимое выражение\n\n\
\nИспользуемые Функции\n\
sin(Z)  -  Синус выражения Z\n\
cos(Z)	-  Косинус выражения Z\n\
tg(Z)	-  Тангенс выражения Z\n\
ctg(Z)	-  Котангенс выражения Z\n\
exp(Z)  -  e^Z\n\
sqrt(Z) -  Квадратный корень выражения Z\n\
log(Z)  -  Логорифм Z от основания 10\n\
\n\
Используемые операторы\n\
+  - Сложение\n\
-  - Вычитание\n\
*  - Умножение\n\
/  - Деление\n\
^  - Возведение в степень\n\
() - Объединение выражения в одно значение\n\
\n\
Нажмите любую клавишу для возврата в главное меню...");
if(!getch())getch();
goto mainmenu;


EnterFormula:
formula:

    clrscr();
    i=0;

    strcpy(s,"");
    strcpy(jjk, "");

    if (strcmp(s, "")!=0) printf("!ОПАСНО! Срочно выйдите из этой программы!!");
    printf("\nВведите формулу или введите \"0\" для возврата в меню\nf(x)=");
    fflush(stdin);
    cin >> s;
    if (strcmp(s, "0")==0) goto mainmenu;
    if(mod(s)==1) goto EnterFormula;
    if (test()==1) goto mainmenu;

//--------------------------------------------------------------
//------------------- Подключение графики
    clrscr();
    detectgraph(&gd,&gm);
    err=graphresult();
    if(err)
    {
	printf("\n%s",grapherrormsg(err));
	exit(1);
    }
    ///registerbgidriver(EGAVGA_driver);
    initgraph(&gd,&gm,"graph");
    err=graphresult();
    if(err)
    {
	printf("n%s",grapherrormsg(err));
	exit(2);
    }
//------------------- Подключение графики
    cleardevice();
    clrscr();

    graph(s,sid);	//Черчение графика

    if(!getch()) getch(); //Ожидание нажания клавишы

//------------------- Очистка памяти
    clrscr();
    closegraph();
    strcpy(sid, sidback);
    strcpy(s, "");
    goto formula;
//----------------------------
    exit:
    clrscr();
    printf("Программа завершена\n\n");
    exit(0);
}
