Скачиваний:
2
Добавлен:
25.05.2014
Размер:
14.24 Кб
Скачать
#include "graphics.h"
#include "conio.h"
#include "string.h"


#ifndef _STRUCT_TA_CPP_10981234928734
#define _STRUCT_TA_CPP_10981234928734

#define FILL 2
#define UP   1

#define BGI ""

#define CW  8
#define CH  10

typedef char char80[80];

struct TBorder
{
   int x1,y1,x2,y2,s,c;
};

struct TPalette
{
   int simple,edit,error,chosen,menu;
};

int     ShowMenu    (TBorder * item, char80*caption, int number,int cycl=0);
void    DrawBorder  (TBorder q);
int     GetInt      (TBorder b,  int can=1);
float   GetFl       (TBorder br, char can=1);
void    Cursor      (TBorder br, void *curs, int width, int height, int &x1, int &y1, int op=0);
int     YesNo       (char *s);
TBorder EditWindow  (char *s);
void    clrkbd      ();

TPalette Palette={0,10,3,2,0};




//НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН\\
void   DrawBorder(TBorder q)
{
  if (q.s & UP)
    {
       setcolor(7);
       setfillstyle(1,q.c);
      if (q.s & FILL) {bar(q.x1,q.y1,q.x2,q.y2);}
       setcolor(8);
       line(q.x1-1,q.y1,q.x1-1,q.y2);
       line(q.x1,q.y2+1,q.x2,q.y2+1);
       setcolor(15);
       line(q.x2+1,q.y1,q.x2+1,q.y2);
       line(q.x1,q.y1-1,q.x2,q.y1-1);
     }
   else
     {
       setcolor(7);
       setfillstyle(1,q.c);
      if (q.s & FILL) {bar(q.x1,q.y1,q.x2,q.y2);}
       setcolor(15);
       line(q.x1-1,q.y1,q.x1-1,q.y2);
       line(q.x1,q.y2+1,q.x2,q.y2+1);
       setcolor(8);
       line(q.x2+1,q.y1,q.x2+1,q.y2);
       line(q.x1,q.y1-1,q.x2,q.y1-1);
     }

};

//НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН\\
char isint(int a[5],int len)        //if a can be translated into int isint() returns 100;
{
  if (  (len<5)||(
      (len==5)&&((a[0]<3)||(
     (a[0]==3)&&((a[1]<2)||(
     (a[1]==2)&&((a[2]<7)||(
     (a[2]==7)&&((a[3]<6)||(
     (a[3]==6)&& (a[4]<=7))))))))))) return 100;
   else return 0;
}

int GetInt(TBorder b, int can)
{
  setfillstyle(1,b.c);
  setcolor(b.c);
  b.s=b.s|FILL;
  DrawBorder(b);


  int a[5]={0,0,0,0,0};
  setcolor(Palette.edit);
     char len=0,min=0,ch=0,zero=0;
     do
       {
    ch=getch();
    setcolor(Palette.edit);
    if (zero)
      {if (ch=='\b') {zero=0;  DrawBorder(b);} }
    else
    { switch(ch)
      { case '\b':
       if ((len>0)||(min)) bar((len+1)*CW+b.x1,b.y1,(len+2)*CW+b.x1,CH*3/2+b.y1);
	   if ((min)&&(!len)) min=0;
	   else if (len>0) len--;
	   break;
	case  '-': if ((can)&&(len==0)&&(!min)) {min=1; outtextxy(b.x1+CW*(len+1),b.y1+CH/2,"-");}
	   break;
    case  '0': if (len==0) {zero=1;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"0");}
               else if (len<5) {a[++len-1]=0;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"0");}
       break;
    case  '1': if (len<5) {a[++len-1]=1;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"1");}
       break;
    case  '2': if (len<5) {a[++len-1]=2;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"2");}
       break;
    case  '3': if (len<5) {a[++len-1]=3;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"3");}
       break;
    case  '4': if (len<5) {a[++len-1]=4;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"4");}
       break;
    case  '5': if (len<5) {a[++len-1]=5;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"5");}
       break;
    case  '6': if (len<5) {a[++len-1]=6;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"6");}
       break;
    case  '7': if (len<5) {a[++len-1]=7;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"7");}
       break;
    case  '8': if (len<5) {a[++len-1]=8;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"8");}
       break;
    case  '9': if (len<5) {a[++len-1]=9;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"9");}
       break;
    case '\n','\r'://  getch();
	case ' ':
	  if (len==0) ch='q';
	  break;
	}
      if (!isint(a,len)) {len--; bar((len+1)*CW+b.x1,b.y1,(len+2)*CW+b.x1,CH*3/2+b.y1);}


    } //end of switch
    }
     while (!((ch=='\n')||(ch=='\r')||(ch==' ')));
     int res=0;
     for (int i=0;i<len;i++)
       {res=10*res+a[i];}
     setcolor(Palette.simple);
     if (min) return -res;
     return res;
}

//НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН\\
char isfloatrange(int a[2],int len)
{if ((len<2)||((len==2)&&((a[0]<3)||((a[0]==3)&&(a[1]<=8))))) return 1;
 else return 0;
}

float GetFl(TBorder br,char can)
  {
    setfillstyle(1,br.c);
    setcolor(br.c);
    br.s=br.s|FILL;
    DrawBorder(br);

    int res1=0;
    int a[20],b[2];

     for (int i=0;i<20;i++){a[i]=0;}
     for (i=0;i<2;i++){b[i]=0;}
     char len=0,lene=0,min=0,mine=0,point=0,ch=0,e=0,zero=0;
     do
       {
     setcolor(Palette.edit);
    ch=getch();
    if (zero==1)
      {if (ch=='\b') {zero=0; len=0;bar((len+2)*CW+br.x1,br.y1,(len+3)*CW+br.x1,CH*3/2+br.y1);}
       else if (ch=='.' || ch ==',')
         { len=1;
           point=1;
           zero=2;
           outtextxy(br.x1+CW*(len+2),br.y1+CH/2,".");
         }
      }
    else
{
    if (!e) {
    switch(ch)
      { case '\b':
    if ((len>point)&&(point))  {bar((len+2)*CW+br.x1,br.y1,(len+3)*CW+br.x1,CH*3/2+br.y1);len--;}
    else  if ((len>0)&&(!point))
       { bar((len+1)*CW+br.x1,br.y1,(len+2)*CW+br.x1,CH*3/2+br.y1);
    len--;}
    else if ((len==point)&&(point))
       {
        if (zero==2) {zero=1;}
        bar((len+2)*CW+br.x1,br.y1,(len+3)*CW+br.x1,CH*3/2+br.y1);
        point=0;
       }
    else if (len==0)
       { if (min) {min=0;bar((len+1)*CW+br.x1,br.y1,(len+2)*CW+br.x1,CH*3/2+br.y1);}}
    break;
    case 'e':case 'E': if(len) {e=1; outtextxy(br.x1+CW*(len+2+(point>0)),br.y1+CH/2,"E");} break;
    case  '-': if ((can)&&(len==0)&&(!min)) {min=1;  outtextxy(br.x1+CW*(len+1),br.y1+CH/2,"-");}
       break;
    case '.':case ',': if ((len>0)&&(!point)) {point=len; outtextxy(br.x1+CW*(len+2),br.y1+CH/2,".");} break;
    case  '0': if (len==0) {zero=1;outtextxy(br.x1+CW*(len+2+(point>0)),br.y1+CH/2,"0");} else if (len<20) {a[++len-1]=0; outtextxy(br.x1+CW*(len+1+(point>0)),br.y1+CH/2,"0");}
       break;
    case  '1': if (len<20) {a[++len-1]=1; outtextxy(br.x1+CW*(len+1+(point>0)),br.y1+CH/2,"1");}
       break;
    case  '2': if (len<20) {a[++len-1]=2;outtextxy(br.x1+CW*(len+1+(point>0)),br.y1+CH/2,"2");}
       break;
    case  '3': if (len<20) {a[++len-1]=3;outtextxy(br.x1+CW*(len+1+(point>0)),br.y1+CH/2,"3");}
       break;
    case  '4': if (len<20) {a[++len-1]=4;outtextxy(br.x1+CW*(len+1+(point>0)),br.y1+CH/2,"4");}
       break;
    case  '5': if (len<20) {a[++len-1]=5;outtextxy(br.x1+CW*(len+1+(point>0)),br.y1+CH/2,"5");}
       break;
    case  '6': if (len<20) {a[++len-1]=6;outtextxy(br.x1+CW*(len+1+(point>0)),br.y1+CH/2,"6");}
       break;
    case  '7': if (len<20) {a[++len-1]=7;outtextxy(br.x1+CW*(len+1+(point>0)),br.y1+CH/2,"7");}
       break;
    case  '8': if (len<20) {a[++len-1]=8;outtextxy(br.x1+CW*(len+1+(point>0)),br.y1+CH/2,"8");}
       break;
    case  '9': if (len<20) {a[++len-1]=9;outtextxy(br.x1+CW*(len+1+(point>0)),br.y1+CH/2,"9");}
       break;
    case '\n':
    case '\r':
    case ' ':
      if (len==0) ch='q';
      break;
    }     }
      else {
    switch(ch)
      { case '\b':
       bar(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,br.x1+(len+4+lene+(point>0)+mine)*CW+min,br.y1+3*CH/2);
       if ((!mine)&&(!lene)) e=0; else
       if ((mine)&&(!lene)) mine=0; else
       if (lene>0) lene--;
       break;
    case  '-': if ((!lene)&&(!mine)) {mine=1; outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"-");}
       break;
    case  '0': if (lene<2) {b[++lene-1]=0;outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"0");}
       break;
    case  '1': if (lene<2) {b[++lene-1]=1;outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"1");}
       break;
    case  '2': if (lene<2) {b[++lene-1]=2;outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"2");}
       break;
    case  '3': if (lene<2) {b[++lene-1]=3;outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"3");}
       break;
    case  '4': if (lene<2) {b[++lene-1]=4;outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"4");}
       break;
    case  '5': if (lene<2) {b[++lene-1]=5;outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"5");}
       break;
    case  '6': if (lene<2) {b[++lene-1]=6;outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"6");}
       break;
    case  '7': if (lene<2) {b[++lene-1]=7;outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"7");}
       break;
    case  '8': if (lene<2) {b[++lene-1]=8;outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"8");}
       break;
    case  '9': if (lene<2) {b[++lene-1]=9;outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"9");}
       break;     }
      res1=0;
      if (lene==2) {res1=b[0]*10+b[1];}
      else {if (lene==2) res1=b[0];}
      if (((res1+len-point>38)&&(!mine))||
	 ((((res1-point>37)&&(point))||((res1-len>37)&&(!point)))&&(mine)))
	     {lene--;bar(br.x1+(len+3+lene+(point>0)+mine)*CW+min,br.y1+CH/2,br.x1+(len+4+lene+(point>0)+mine)*CW+min,br.y1+3*CH/2);}
      }
	 //end switch

    }    //end if (e)
    }//end if (!zero)
     while (!((ch=='\n')||(ch=='\r')||(ch==' ')));
   long double res=0.0;
   long double aft=0.0;
     if (point)
      { for (i=0;i<point;i++)
     {res=10*res+a[i];}
    for (i=len-1;i>=point;i--)
     {aft=aft/10.0+a[i];}}
      else {for (i=0;i<len;i++)
     {res=10*res+a[i];}}
     res1=0;
     for (i=0;i<lene;i++)
       {res1=res1*10+b[i];}
     res=res+aft/10.0;

     if (!mine) { for (i=0;i<res1;i++) {res*=10;}}
     else {for (i=0;i<res1;i++) {res/=10.0;}};
     setcolor(Palette.simple);
     if (!min) {return res;}
     else     {return  -res;}
}

//НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН\\
int ShowMenu (TBorder * item, char80*caption, int number,int cycl)
{
  int i=0,pos=0;
  char key;
  item[0].s=0;
  DrawBorder(item[0]);
  setcolor(Palette.menu);
  outtextxy(item[0].x1+CW,item[0].y1+CH/2,caption[0]);
  for (i=1; i<number; i++)
  {
     item[i].s=UP;
     DrawBorder(item[i]);
     setcolor(Palette.menu);
     outtextxy(item[i].x1+CW,item[i].y1+CH/2,caption[i]);
  }

     while ((key!='\r')&&(key!=' ')&&(key!='\n')&&(key!=27))
    {
      key=getch();
      if (key==80)
      {
        if (pos<number-1)
        {
          item[pos].s=UP;
          DrawBorder(item[pos]);
          pos++;
          item[pos].s=0;
          DrawBorder(item[pos]);
        }
        else if (cycl)
        {
          item[pos].s=UP;
          DrawBorder(item[pos]);
          pos=0;
          item[pos].s=0;
          DrawBorder(item[pos]);
        }
      }
      if (key==72)
      {
        if (pos>0)
        {
          item[pos].s=UP;
          DrawBorder(item[pos]);
          pos--;
          item[pos].s=0;
          DrawBorder(item[pos]);
        }
        else if (cycl)
        {
          item[pos].s=UP;
          DrawBorder(item[pos]);
          pos=number-1;
          item[pos].s=0;
          DrawBorder(item[pos]);
        }
      }
    }
  if (key==27) return -1;
  return pos;
}

//НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН\\
void Cursor (TBorder br, void *curs, int width, int height, int &x1, int &y1, int op)
{
  void *buffer;
  char key=0;
  buffer=(void*)new char[imagesize(1,1,width+1,height+1)];
  getimage(x1,y1,x1+width,y1+height,buffer);
  putimage(x1,y1,curs,op);
  while (key!=27 && key!='\n' && key!='\r' && key!=' ')
  {
     key=getch();
     if (key==80)
     {
       if (y1<br.y2-5-height)
       {
         putimage(x1,y1,buffer,0);
         y1+=5;
         getimage(x1,y1,x1+width,y1+height,buffer);
         putimage(x1,y1,curs,op);
       }
     }
     if (key==72)
     {
       if (y1>br.y1+5)
       {
         putimage(x1,y1,buffer,0);
         y1-=5;
         getimage(x1,y1,x1+width,y1+height,buffer);
         putimage(x1,y1,curs,op);
       }
     }
     if (key==77)
     {
       if (x1<br.x2-5-width)
       {
         putimage(x1,y1,buffer,0);
         x1+=5;
         getimage(x1,y1,x1+width,y1+height,buffer);
         putimage(x1,y1,curs,op);
       }
     }
     if (key==75)
     {
       if (x1>br.x1+5)
       {
         putimage(x1,y1,buffer,0);
         x1-=5;
         getimage(x1,y1,x1+width,y1+height,buffer);
         putimage(x1,y1,curs,op);
       }
     }
  }

  delete(buffer);
}

void Begin()
{
  int gdriver =9 , gmode=2, errorcode;
  initgraph(&gdriver, &gmode, BGI);
  while (kbhit()) {getch();}
}

void End()
{
   closegraph();
   cputs("\n\n\n     This program is created by Tishka17.\n\r     Press any key to exit.");
   getch();
   while (kbhit()) {getch();}
}

TBorder EditWindow(char *s)
{
  TBorder Wnd    ={190,110,410,150,UP|FILL,7};
  TBorder Edit   ={195,130,405,145,FILL,0};
  DrawBorder(Wnd);
  setcolor(Palette.simple);
  outtextxy(Wnd.x1+5,Wnd.y1+5,s);
  DrawBorder(Edit);
  return Edit;
}

int YesNo(char *s)
{

   TBorder     MainMenuWindow={175,195,495,235,UP|FILL,7};
   TBorder     MainMenu[]=
               {
                      {180,215,315,230},
                      {345,215,490,230},
               };
   char80      MainMenuItems[]=
               {
                      "      Yes",
                      "       No",

               };
   const         MainMenuNumber=2;

//   MainMenuWindow.x2=strlen(s)*CW+MainMenuWindow.x1;
//   MainMenuWindow.x1=100;
//   MainMenu[2].x1=MainMenuWindow.x2-115;
//   MainMenu[2].x2=MainMenuWindow.x2;

   DrawBorder(MainMenuWindow);
   setcolor(Palette.simple);
   outtextxy(180,200,s);
   return (!ShowMenu(MainMenu,MainMenuItems,MainMenuNumber,1));
}

void clrkbd()
{
 while (kbhit()) {getch();}
}

#pragma startup Begin
#pragma exit End



#endif _STRUCT_TA_CPP_10981234928734
Соседние файлы в папке Zad1