#include <graphics.h>
#include <alloc.h>
#include <string.h>
#include <wnd_asm.h>
void Stat_On (int,int,char *,int);
void Stat_Off (int,int,int);
void Init_Buttons (WINDOW *); KEY Press_Buttons (void);
//char Swit_Space (char Swit);
void centerx (int cx, int cy, char *text);
void Button (int Status,int x1,int y1,int x2,int y2); void Angle (int x,int y,int c);
void Switch_Button_0 (void);

extern unsigned char Thank;
extern MODE DELAFTER1;
extern char Mouse,buttons,DOP_FILE;
extern int hor_position,ver_position;
int NowX,SUMX,maxpagey;
char far *IsButtons="         ";
char IS_EDIT,EDITOR,SHOWBUTTONS=YES;

void huge Window (WINDOW *w,FIELD *f) {
 char far *Bar="$ESC$ Выход  $ENTER$ Выбор  $LEFT$ Влево  $RIGHT$ Вправо  $UP$ Вверх  $DOWN$ Вниз";
 KEY  Bar_Keys[6]={ESC,ENTER,LEFT,RIGHT,UP,DOWN};
 int  Pos_Keys[7]={15,103,207,303,407,487,568};
 char Num_Keys=6;
 TEXT_FUN2 Paint_,Item_;
 KEY sim; long i; int j,k,l,Locx,Locy,Y,dx,X1,X2;
 unsigned char New=0x83;
 // xxxx xxx1 - Листать влево/вправо
 // xxxx xx1x - Листать вверх/вниз
 // 1xxx xxxx - Обновить подсказку
 void far *bm;
 int pagesizey,pagesizex;
 MODE ENTER_PRESS=0x00,FIRST=0x00;
 EDITOR=0x00;
 SUMX=0;
 // Условия
 CURSOR_OFF();
 if (w->SAVE) {
  bm = farmalloc( imagesize( w->x1, w->y1, w->x2+8, w->y2+8 ) );
  if  ( bm == NULL ) w->SAVE=NO;
  else getimage( w->x1, w->y1, w->x2+8, w->y2+8, bm );
 }
 if (w->COLORS) {
  f->Col[0]=LIGHTGRAY; f->Col[1]=LIGHTCYAN;
  f->Col[2]=BLACK;     f->Col[3]=BLUE;
  f->Col[4]=DARKGRAY;  f->Col[5]=MAGENTA;
  f->Col[6]=LIGHTRED;  f->Col[7]=YELLOW;
 }

 // Поле
 f->sx = (w->x1+20+w->LeftStep);
 f->ex = (w->x2-20);
 f->sy = w->y1+24+11*w->titley+w->UpStep;
 f->ey = w->y2-16-w->DownStep;
 f->sizey=w->FieldY;

 if (!(w->UpStep)) w->Init_Func(); // Инициализирующая функция окна;
 // Число элементов на страницу
 f->onpagey = ( f->ey - f->sy ) / f->sizey;
 if (w->FILTER==NO || f->YN>w->itemsy) { f->Y0=0; f->YN=w->itemsy; }
 if (!(f->Y1 > f->Y0 && f->Y1<f->YN)) f->Y1=f->Y0;

 i= f->YN - f->Y0; // Число отображаемых эл-тов
 if (i < f->onpagey) f->onpagey = i;
 i=f->Y1-f->Y0;
 if ( i < f->onpagey) { f->mety=f->Y0; f->locy=i; }
 else { f->mety=f->Y1; f->locy=0; }
 for (NowX=0; NowX<w->itemsx; NowX++) if (w->EDIT[NowX]) break;
 f->metx= NowX; f->locx= 0;

DRAW:
 maxpagey = ( f->ey - f->sy ) / f->sizey;
 // Отрисовка окна и поля
 setfillstyle( SOLID_FILL, f->Col[0]);
 bar( w->x1, w->y1, w->x2, w->y2 );
 setfillstyle( SOLID_FILL, f->Col[1]);
 bar( w->x1+5, f->sy, f->ex, f->ey);
 // Рамка окна
 setcolor( f->Col[3] );
 rectangle ( w->x1+2, w->y1+2, w->x2-2, w->y2-2 );
 rectangle ( w->x1+4, w->y1+4, w->x2-4, w->y2-4 );
 // Метки направлений
 rectangle ( w->x1+6,w->y1+6,w->x1+16,w->y1+16 );
 rectangle ( w->x1+17,w->y1+6,w->x1+27,w->y1+16 );
 rectangle ( w->x2-27,w->y1+6,w->x2-17,w->y1+16 );
 rectangle ( w->x2-16,w->y1+6,w->x2-6,w->y1+16 );
 // Метки положения страницы
 rectangle (f->sx-1,w->y2-13,f->ex+1,w->y2-6);
 rectangle (w->x2-13,f->sy-1,w->x2-6,f->ey+1);
 outtextxy (w->x2-13,w->y2-13,"\012");
 // Заголовок окна
 l=strlen (w->Title);
 if ( (l<<3) < (w->x2-w->x1-44) ) {
  setfillstyle( SOLID_FILL,f->Col[6]);
  k = w->x1 - (l<<2) +((w->x2-w->x1)>>1);
  bar( k-5, w->y1+4, k+5+(l<<3),w->y1+15);
  setcolor( f->Col[2] );
  outtextxy( k , w->y1+6, w->Title );
 }
 // Защищенная зона и окружение окна
 setfillstyle( SOLID_FILL, f->Col[7] );
 bar( w->x1+8, w->y1+18+w->UpStep, w->x2-8, f->sy-6 );
 setcolor( f->Col[2] );
 rectangle( w->x1+8, w->y1+18+w->UpStep, w->x2-8, f->sy-6 );
 CURSOR_ON();
 Print( w->x1+10, w->y1+20, BLACK, LIGHTRED, w->Names_Tabl[0] );
 Chand( w->x1+8, w->y2+1, w->x2+8, w->y2+8, DARKGRAY, ANDI );
 Chand( w->x2+1, w->y1+5, w->x2+8, w->y2, DARKGRAY, ANDI );

 Paint_=w->Text_Func;
 Item_=w->Item_Func;
 if (w->UpStep) w->Init_Func(); //!!! Еще раз вызвать для отрисовки верха окна
 if (SHOWBUTTONS) Init_Buttons (w); // Мышиные кнопки
 else IS_EDIT=NO;
 do { // Обработка страницы
  if (New&0x80) { Fun_Bar(Bar); New&=0x7F; }
  // Вывод текущей страницы
  if (New&0x01) { // по горизонтали
AGAIN:
   f->onpagex = 0; SUMX=0; f->locx=-1; dx=0;
   f->endx=f->metx;
   l=0;
   for (k=f->metx; k<w->itemsx; k++) {
    if (w->EDIT[k]) {
     if (k < NowX) {
      SUMX+=w->Line[k]; dx++; // Положение курсора на странице
     }
     else if (f->locx==-1) f->locx=dx;
     l+=w->Line[k];
     if (l>f->ex - f->sx)
      break;
     (f->onpagex)++;
    }
    (f->endx)++;
   }
   if (f->onpagex==0) { (f->metx)--; goto AGAIN; }
   pagesizex=f->onpagex*(f->ex - f->sx)/w->itemsx;
   if (f->locx==-1) f->locx=0;
   else if (f->locx > f->endx-f->metx-1) {
    f->locx=f->endx-f->metx-1;
    Set_Insert_Key (3,RIGHT,END,HOME); New&=0xFC; goto KEYBOARD;
//    for (k=f->metx,SUMX=0; k<NowX; k++) SUMX+=w->Line[k];
   }
   setfillstyle( SOLID_FILL, f->Col[7] ); CURSOR_OFF();
   bar( f->sx+1, w->y1+19+w->UpStep, w->x2-9, f->sy-7 ); CURSOR_ON();
   for( k=0, j=f->metx; j<f->endx; j++ ) if (w->EDIT[j]) {
    Print( f->sx+4+k, w->y1+20+w->UpStep, BLACK, LIGHTRED, w->Names_Tabl[1+j] );
    k+=w->Line[j]; // Вывод заголовков страницы
   }
   // Метка по горизонтали
   CURSOR_OFF();
   bar (f->sx,w->y2-12,f->ex,w->y2-7);
   setfillstyle (SOLID_FILL,f->Col[6]);
   k=f->sx+f->metx*pagesizex/(f->endx-f->metx);
   bar (k,w->y2-12,k+pagesizex,w->y2-7);
   CURSOR_ON();
  }
  if (New&0x03) { // По вертикали
   CURSOR_OFF();
   setfillstyle( SOLID_FILL, f->Col[1] );  setcolor( f->Col[2] );
   bar( w->x1+5, f->sy, f->ex, f->ey); // Очистка поля
   CURSOR_ON();
   f->onpagey=min (maxpagey,f->YN-f->Y0);
   f->endy=min(f->mety+f->onpagey,f->YN);
   f->onpagey=f->endy-f->mety;
   for (i=f->mety; i<f->endy; i++) {
    Y=f->sy+(i-f->mety)*f->sizey+2;
    Paint_ (w->x1+8, Y,-1,i); //1-й столбец
    for (l=0,j=f->metx; j<f->endx; j++) { // Остальные столбцы
     Paint_ (f->sx+l+4,Y,j,i);
     if (w->EDIT[j]) l+=w->Line[j];
    }
   }
   // Метка по вертикали
   if (f->YN - f->Y0 >0) {
    CURSOR_OFF();
    pagesizey=f->onpagey*(f->ey - f->sy)/(f->YN-f->Y0); //размер страницы
    bar (w->x2-12,f->sy,w->x2-7,f->ey);
    setfillstyle (SOLID_FILL,f->Col[6]);
    k=f->sy+(f->mety-f->Y0)*pagesizey/f->onpagey;
    bar (w->x2-12,max(k,f->sy),w->x2-7,min(k+pagesizey,f->ey));
    CURSOR_ON();
   }
  }
  // Метки направлений:
  k=w->y1+7; CURSOR_OFF();
  if (f->metx>0) Stat_On (w->x1+7,k,"\033",f->Col[6]);
  else Stat_Off (w->x1+7,k,f->Col[0]);
  if (f->metx+f->onpagex < w->itemsx) Stat_On (w->x1+18,k,"\032",f->Col[6]);
  else Stat_Off (w->x1+18,k,f->Col[0]);
  if (f->mety>f->Y0) Stat_On (w->x2-26,k,"\030",f->Col[6]);
  else Stat_Off (w->x2-26,k,f->Col[0]);
  if (f->mety<f->YN-f->onpagey) Stat_On (w->x2-15,k,"\031",f->Col[6]);
  else Stat_Off (w->x2-15,k,f->Col[0]);
  // Проверка наличия записей
  //if (f->YN-f->Y0 <0) Set_Key (1,INS);
  // Верт.разделители
  setcolor (f->Col[4]);
  l=f->sy+f->sizey*f->onpagey;
  line ( f->sx,f->sy,f->sx,l);
  for(j=f->metx, k=0 ; j<f->endx; j++ )  if (w->EDIT[j]) {
   k+=w->Line[j];
   line ( f->sx+k,f->sy,f->sx+k,l);
  }
  New&=0xFC;  CURSOR_ON();
  do { // Обработка внутри страницы
STARTS:
   Y=f->sy+f->locy*f->sizey;
   if (EDITOR) {
    X1=f->sx+SUMX;
    X2=f->sx+SUMX+w->Line[NowX];
   }
   else {
    X1=f->sx; X2=f->ex;
   }
   Chand( X1, Y, X2, Y+f->sizey, f->Col[1], XORI);
/*   if (EDITOR) {
    if (w->EDIT[NowX]==EDITS) setcolor (f->Col[1]);
    else setcolor (f->Col[0]);
    outtextxy (w->x1+5,w->y2-13,"Ред"); //!!!
   } */
   //IsButtons[0]=Swit_Space (w->EDIT[NowX]);
   if (Mouse) while (!Hit_Key()) {
    ms_state ();
    if (buttons==0x01) { //Left
     if (Fun_Bar_Keys (Num_Keys,Bar_Keys,Pos_Keys)) goto KEYBOARD;
     if (ver_position>=f->sy && ver_position<=f->ey &&
	 hor_position>=f->sx && hor_position<=f->ex) { // По полю
      Chand( X1, Y, X2, Y+f->sizey, f->Col[1], XORI);
      buttons=0x00; while (ms_release()<1); // до отпускания кнопки мыши
      for (Locx=0,l=0, k=f->metx; k<f->endx-1; k++) if (w->EDIT[k]) {
       if (hor_position>=f->sx+l && hor_position<=f->sx+l+w->Line[k]) {
	 break; }
       else { l+=w->Line[k]; Locx++; }
      }
      for (Locy=f->endy, j=0, i=f->mety; i<f->endy; i++) {
       if (ver_position>=f->sy+j && ver_position<=f->sy+j+f->sizey) {
	Locy=i-f->mety; break; }
       else j+=f->sizey;
      }
      if (Locy<f->onpagey && Locx<f->onpagex) {
       if (Locx==f->locx && Locy==f->locy)
	Set_Key(1,ENTER);
       else { f->locx=Locx; f->locy=Locy;  NowX=k; SUMX=l;  }
      }
      goto STARTS;
     }
     else {
      sim=0;
     /*
      if (ver_position>w->y2-14 && ver_position<w->y2-5) { //Hor. bar
       j=(f->sx+f->ex)>>1;
       buttons=0x00; while (ms_release()<1); // до отпускания кнопки мыши
       if (hor_position>=f->sx && hor_position<=j) sim=LEFT;
       else if (hor_position>j && hor_position<=f->ex) sim=RIGHT;
      }
      else if (hor_position>w->x2-14 && hor_position<w->x2-5) { //Vert. bar
       j=(f->sy+f->ey)>>1;
       buttons=0x00; while (ms_release()<1); // до отпускания кнопки мыши
       if (ver_position>=f->sy && ver_position<=j) sim=UP;
       else if (ver_position>j && ver_position<=f->ey) sim=DOWN;
      }
      if (sim) goto KEYBOARD2;
     */
      if (SHOWBUTTONS) sim=Press_Buttons();
      if (sim) goto KEYBOARD2;
     }
    }
   }
KEYBOARD:
   sim = Get_Key();
KEYBOARD2:
   Chand( X1, Y, X2, Y+f->sizey, f->Col[1], XORI);
/*   if (EDITOR) {
    if (w->EDIT[NowX]==EDITS) setcolor (f->Col[0]);
    else setcolor (f->Col[1]);
    outtextxy (w->x1+5,w->y2-13,"Ред"); //!!!
   } */
   switch( sim ) {
    case ESC:
     CURSOR_OFF();
     setcolor( f->Col[0] );
     rectangle ( w->x1+4, w->y1+4, w->x2-4, w->y2-4 );
     rectangle ( w->x1+2, w->y1+2, w->x2-2, w->y2-2 );
     if (w->SAVE) {
      putimage( w->x1, w->y1, bm, COPY_PUT );
      farfree( bm );
     } CURSOR_ON();
     if (ENTER_PRESS) Thank|=0x08;
     else Thank&=0xf7;
    return;
    ////// !!! Добавочная часть для внешней функции Item_;
    case F1: Help(); Fun_Bar(Bar); break;
    case F9:
    case F10: if (w->PRINT) Set_Key (2,START,sim);  break;
    case F7:  if (w->SEARCH) Set_Key (2,START,F7);  break;
    case F3: if (DOP_FILE) Set_Key (2,START,F3);  break;
    case INS:
    case F6:
    case F8:
    case DEL: if (EDITOR && w->MODIFY) Set_Key (2,START,sim);  break;
    case F4:
     if (IS_EDIT) { // В принципе есть редактирование
      EDITOR^=0x01;
      if (SHOWBUTTONS) Switch_Button_0();
      if (EDITOR) Set_Key (2,START,START);
     }
    break;
    case S_BAR:
     if (EDITOR) { // В режиме редактора
      if (w->EDIT[NowX]==EDITS) Set_Key (2,START,PSEUDO);
     }
    break;
    case START:
     if (f->mety+f->locy<f->YN && NowX < w->itemsx) {
      Item_(f->sx+SUMX,f->sy+f->sizey*f->locy,NowX,f->mety+f->locy);
      New|=0x82;
      if (Thank&0x02) { Thank&=0xfd; New|=0x01; goto DRAW; }
     }
     else Clear_Buf();
    break;
    case ENTER:
     if (f->mety+f->locy<f->YN && NowX < w->itemsx) {
      Item_(f->sx+SUMX,f->sy+f->sizey*f->locy,NowX,f->mety+f->locy);
      Set_Key (1,ESC);
      ENTER_PRESS=0x01;
     }
     else Clear_Buf();
    break;
    case DOWN :
     if (f->locy < f->onpagey-1) f->locy ++;
     else if (f->mety < f->YN - f->onpagey) {
      f->mety ++; f->locy=f->onpagey-1; New|=0x02;
     }
    break;
    case UP:
     if (f->locy>0) f->locy --;
     else if (f->mety > f->Y0) { f->mety --; f->locy=0; New|=0x02; }
    break;
    case PAGE_UP :
     Locy= max(f->mety-(maxpagey-1),f->Y0);
     if (Locy!=f->mety) {   f->mety=Locy; New|=0x02; }
     f->locy=0;
    break;
    case PAGE_DO:
     Locy=max(min(f->mety+maxpagey-1, f->YN-f->onpagey),0);
     if (Locy!=f->mety) {   f->mety=Locy;  New|=0x02;   }
     f->locy=f->onpagey-1;
    break;
    case CTRL_UP :
     Locy = f->Y0;
     if (Locy!=f->mety) {  f->mety=Locy; New|=0x02; }
     f->locy=0;
    break;
    case CTRL_DO :
     Locy = max(f->YN-min(f->onpagey,maxpagey),0);
     if (Locy!=f->mety) {  f->mety=Locy; New|=0x02; }
     f->locy=f->onpagey-1;
    break;
    case RIGHT:
     if (FIRST) FIRST=NO;
     else if (!EDITOR) { // Просмотр
      Set_Key (2,END,RIGHT);
      FIRST=YES;
      break;
     }
     if (f->locx < f->onpagex-1) {
      SUMX+=w->Line[NowX];
      for (k=NowX+1,dx=1; k<w->itemsx; k++) if (w->EDIT[k]) {
	NowX=k; f->locx++; dx=0; break;
      }
      if (dx) SUMX-=w->Line[NowX]; // Нет видимых полей правее
     }
     else if (f->metx < w->itemsx-1) {
      for (k=NowX+1; k<w->itemsx; k++) if (w->EDIT[k]) {
       NowX=k; f->metx++;  New|=0x01; break;
      }
     }
    break;
    case LEFT:
     if (FIRST) FIRST=NO;
     else if (!EDITOR) { // Просмотр
      Set_Key (2,HOME,LEFT);
      FIRST=YES;
      break;
     }
     if (f->locx) {
      for (k=NowX-1; k>=0; k--) if (w->EDIT[k]) {
       SUMX-=w->Line[k]; NowX=k; f->locx--; break;
      }
     }
     else if (f->metx) {
      for (k=NowX-1; k>=0; k--) if (w->EDIT[k]) {
       NowX=k; f->metx --; New|=0x01; break;
      }
     }
    break;
    case HOME :
     if (f->locx>0) {
      f->locx = 0; SUMX=0; NowX=f->metx;
      for (k=f->metx; k<f->endx-1; k++) if (w->EDIT[k]) { NowX=k; break; }
     }
    break;
    case END:
     if (f->locx < f->onpagex-1) {
      f->locx = f->onpagex-1;
      for (k=f->endx-1, NowX=f->metx; k>=f->metx; k--) if (w->EDIT[k]) {
       NowX=k; break;
      }
      for (k=f->metx, SUMX=0; k<NowX; k++) if (w->EDIT[k]) {
       SUMX+=w->Line[k];
      }
     }
    break;
    default:
     if (EDITOR) { // В режиме редактора
      if (w->EDIT[NowX]==EDITS) Set_Key (3,START,PSEUDO,sim);
      DELAFTER1=NO;
     }
    break;
   } // switch
   if (New&0x03) break;
  } while (1);
 } while (1);
}

void Stat_On (int x,int y,char *s,int c) {
 setcolor (c); outtextxy (x,y,s); return;
}

void Stat_Off (int x,int y,int c) {
 setfillstyle (SOLID_FILL,c);
 bar(x,y,x+8,y+8); return;
}

///////////////////////////////////////////////////
int BUTTONS;
#define BUTTONS_Y1 300
#define BUTTONS_Y2 330
#define BUTTONS_XSIZE 66
#define BUTTONS_COLOR LIGHTGRAY
#define BUTTONS_XSPACE 5
#define BUTTONS_X 3
KEY ButKeys[9]={F4,F7,INS,F6,DEL,F8,F9,F10,F3};
 char *But_Hdr[9]={ "F4","F7","INS","F6","DEL","F8","F9","F10","F3"};
 char *But_Text[9]={ "Редактор","Найти","Добавить","Вставить",
  "Отметить","Сжать","Печать","Принтер","Файл" };

void Draw_Button (int k) {
 int l;
 l=BUTTONS_X+k*(BUTTONS_XSPACE+BUTTONS_XSIZE);
 CURSOR_OFF();
 bar (l,BUTTONS_Y1,l+BUTTONS_XSIZE,BUTTONS_Y2);
 CURSOR_ON();
 Button (IsButtons[k]^0x01,l,BUTTONS_Y1,l+BUTTONS_XSIZE,BUTTONS_Y2);
 CURSOR_OFF();
 if (IsButtons[k]) setcolor (YELLOW);
 else setcolor (DARKGRAY);
 centerx (l+BUTTONS_XSIZE/2,BUTTONS_Y1+5,But_Hdr[k]);
 if (IsButtons[k]) setcolor (LIGHTBLUE);
 else setcolor (DARKGRAY);
 centerx (l+BUTTONS_XSIZE/2,BUTTONS_Y2-13,But_Text[k]);
 CURSOR_ON();
}

void Switch_Button_0 (void) {
 char j,Text0[2][8]={"Редактор","Просмотр"};
 for (j=0; j<8; j++) But_Text[0][j]=Text0[EDITOR][j];
 Draw_Button (0);
}

void Init_Buttons (WINDOW *w) {
 int k;
 BUTTONS=8;
 _fmemset (IsButtons,'\0',BUTTONS);
 if (DOP_FILE) {
  IsButtons[8]=YES;
  BUTTONS=9;
 }
 if (w->MODIFY) for (k=2; k<6; k++) IsButtons[k]=YES;
 IS_EDIT=0x00;
 for (k=0; k<w->itemsx; k++) if (w->EDIT[k]) { IS_EDIT=0x01; break; }
 IsButtons[0]=(IS_EDIT?YES:NO);
 if (w->PRINT) IsButtons[6]=IsButtons[7]=YES;
 if (w->SEARCH) IsButtons[1]=YES;
 setfillstyle (SOLID_FILL,BUTTONS_COLOR);
 for (k=0; k<BUTTONS; k++) {
  Draw_Button (k);
 } return;
}

KEY Press_Buttons (void) {
 KEY c=0; int i,l;
 if (ver_position>BUTTONS_Y1 && ver_position<BUTTONS_Y2) { // Кнопки
  for (i=0; i<BUTTONS; i++) {
   l=BUTTONS_X+i*(BUTTONS_XSPACE+BUTTONS_XSIZE);
   if (hor_position>l && hor_position<l+BUTTONS_XSIZE) {
    if (IsButtons[i]) {
     Button (1,l,BUTTONS_Y1,l+BUTTONS_XSIZE,BUTTONS_Y2);
     c=ButKeys[i];
     buttons=0x00; while (ms_release()<1); // до отпускания кнопки мыши
     Button (0,l,BUTTONS_Y1,l+BUTTONS_XSIZE,BUTTONS_Y2);
    }
   }
  }
 } return (c);
}

/* char Swit_Space (char Swit) {
 char ch=(Swit==EDITS?YES:NO);
 if (EDITOR) {
  if (ch!=IsButtons[0])
   Button (IsButtons[0],BUTTONS_X,BUTTONS_Y1,BUTTONS_X+BUTTONS_XSIZE,BUTTONS_Y2);
 }
 return (ch);
} */

void centerx (int cx, int cy, char *text) {
 outtextxy (cx-textwidth(text)/2, cy, text);
 return;
}

void Button (int Status,int x1,int y1,int x2,int y2) {
 int Col1,Col2;
 CURSOR_OFF();
 setlinestyle (SOLID_LINE,0xffff,3);
 //colors:
 Col1=(Status==0)?BLACK:WHITE;
 Col2=(Status==0)?WHITE:BLACK;
 //lines:
 setcolor (Col1);
 line ( x1, y2, x2, y2);
 line ( x2, y1, x2, y2);
 setcolor (Col2);
 line ( x1, y1, x2, y1);
 line ( x1, y1, x1, y2);
 // corners:
 Angle ( x1, y2,Col1);
 Angle ( x2-1, y1+1,Col1);
 setlinestyle (SOLID_LINE,0xffff,1);
 CURSOR_ON();
}

void Angle (int x,int y,int c) {
 moveto (x,y);
 putpixel (x,y,c); putpixel (x+1,y,c); putpixel (x+2,y,c);
 putpixel (x+1,y-1,c); putpixel (x+2,y-1,c);
}
