///////////////////////////////////////////////////////////////////////////
/////  Nombre:   Cgraph.cpp                                             ///
/////  Modulo:   Perteneciente a Catalogo.C                             ///
////   Descripci¢n:   Confecciona la pantalla de inicio                 ///
////                                                                    ///
////   Autor:    Jos‚ David Guill‚n Dominguez                           ///
////   Fecha:    (Unknow)                                               ///
////                                                                    ///
////   Compilador Borland C++ 3.0 ( Creaci¢n original en Turbo C 2.0 )  ///
///////////////////////////////////////////////////////////////////////////

#include <graphics.h>   // Libreria de Funciones Graficas
#include <dos.h>

extern struct boton {

  int left;
  int up;
  int right;
  int down;

};

   void fundido_al_negro(void);
   void pon_paleta(char *punt, int bandera);

   void DibujaPantalla(void);
   void DibujaOjo(void);
   void DibujaInfo(void);
   void DibujaSalir(void);
   void ImprimeBoton (int left, int  up, int right, int down,
			int cdf, int cs1, int cs2);
   void ImprimeBoton2 (int fill, int cdf, int cs1, int cs2, struct boton parm);
   //void ImprimeBoton2 (struct boton parm);




/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */
/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */
/* Esta Funci¢n imprimira los botones, pasandole como argumentos la estructura
   boton, que define:
		      Izquierda                  ( left  )  "int"
		      Arriba                     ( up    )
		      Derecha                    ( right )  "int"
		      Abajo                      ( down  )
		      Color de Fondo             ( cdf   )  "int"
		      Color Sombra 1             ( cs1 )    "int"
		      Color Sombra 2             ( cs2 )    "int"
   Constante de Lugar:                           ( cdl )    "int"
		      1  Sombra en ESI
		      2  Sombra en EII
		      3  Sombra en ESD
		      4  Sombra en EID

   GENERADOR DE BOTONES INVENCION DEL FUENTE EXCLUSIVA DE Jos‚ David Guill‚n    */

void ImprimeBoton (int left, int up, int right, int down,
			int cdf, int cs1, int cs2)
{

  int puntos[14];
  puntos[0] = left+1;           puntos[1] = up-1;
  puntos[2] = right+1;         puntos[3] = up-1;
  puntos[4] = right+1;         puntos[5] = down+1;
  puntos[6] = (right-2);       puntos[7] = (down-2);
  puntos[8] = (right-2);       puntos[9] = (up+2);
  puntos[10] = (left+2);       puntos[11] = (up+2);
  puntos[12] = left+1;           puntos[13] = up-1;

  setcolor(cs2);
  setfillstyle(SOLID_FILL, cs2);
  setlinestyle(0, 1, NORM_WIDTH);
  fillpoly(7, puntos);

  setcolor(cs1);
  setfillstyle(SOLID_FILL, cs1);
  setlinestyle(0, 1, NORM_WIDTH);
  puntos[0]  =  left;           puntos[1]  =  up;
  puntos[2]  =  left;           puntos[3]  =  down+1;
  puntos[4]  =  right+1;        puntos[5]  =  down+1;
  puntos[6]  =  (right-2);      puntos[7]  =  (down-2);
  puntos[8]  =  (left+3);       puntos[9]  =  (down-2);
  puntos[10] =  (left+3);       puntos[11] =  (up+3);
  puntos[12] =  left;           puntos[13] =  up;
  fillpoly(7, puntos);

  setcolor(cdf);
  setfillstyle(SOLID_FILL, cdf);
  bar(left+3, up+3, right-3, down-3);

}


void ImprimeBoton2 (int fill, int cdf, int cs1, int cs2, struct boton parm)
{
  int puntos[14];
  puntos[0]  =  parm.left+1;           puntos[1]  =  parm.up-1;
  puntos[2]  =  parm.right+1;          puntos[3]  =  parm.up-1;
  puntos[4]  =  parm.right+1;          puntos[5]  =  parm.down+1;
  puntos[6]  =  (parm.right-2);        puntos[7]  =  (parm.down-2);
  puntos[8]  =  (parm.right-2);        puntos[9]  =  (parm.up+2);
  puntos[10] =  (parm.left+2);         puntos[11] =  (parm.up+2);
  puntos[12] =  parm.left+1;           puntos[13] =  parm.up-1;

  setcolor(cs2);
  setfillstyle(SOLID_FILL, cs2);
  setlinestyle(0, 1, NORM_WIDTH);
  fillpoly(7, puntos);

  setcolor(cs1);
  setfillstyle(SOLID_FILL, cs1);
  setlinestyle(0, 1, NORM_WIDTH);
  puntos[0]  =  parm.left;           puntos[1]  =  parm.up;
  puntos[2]  =  parm.left;           puntos[3]  =  parm.down+1;
  puntos[4]  =  parm.right+1;        puntos[5]  =  parm.down+1;
  puntos[6]  =  (parm.right-2);      puntos[7]  =  (parm.down-2);
  puntos[8]  =  (parm.left+3);       puntos[9]  =  (parm.down-2);
  puntos[10] =  (parm.left+3);       puntos[11] =  (parm.up+3);
  puntos[12] =  parm.left;           puntos[13] =  parm.up;
  fillpoly(7, puntos);

if(fill) {
  setcolor(cdf);
  setfillstyle(SOLID_FILL, cdf);
  bar(parm.left+3, parm.up+3, parm.right-3, parm.down-3);
}

}




/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */
/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */
/* DibujaPantalla confecciona la pantalla de inicio                       */

void DibujaPantalla(void)
{
 int i;
 int x = 30;
 int y[4] = {30, 150, 270, 390};
 char *texto[] = { "Mirar      ",
		   "Utilidades ",
		   "Informaci¢n",
		   "Salir      "};

 setfillstyle(6, 57);
 floodfill(0, 0, 1);

 ImprimeBoton(20, 20, 170, 100,  7, 63, 56);
 ImprimeBoton(20, 140, 170, 220, 7, 63, 56);
 ImprimeBoton(20, 260, 170, 340, 7, 63, 56);
 ImprimeBoton(20, 380, 170, 460, 7, 63, 56);

 setcolor(0);
 for(i=0; i<4; i++) {
   outtextxy( x, y[i], texto[i]);
   outtextxy( x+1, y[i]+6, "-");
 }
 DibujaOjo();
 DibujaInfo();
 DibujaSalir();

 ImprimeBoton(205, 20, 605, 220, 7, 63, 56);

 ImprimeBoton(213, 29, 302, 209, 0, 56, 63);   /* 214  29 302 209 */
 ImprimeBoton(322, 29, 596, 209, 0, 56, 63);

 ImprimeBoton(205, 260, 605, 460, 7, 63, 56);
 ImprimeBoton(213, 269, 596, 451, 0, 56, 63);  /* 214 269 596 451 */

}

/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */
/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */
/* Realiza el Dibujo del Ojo                                              */
/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */
/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */

void DibujaOjo(void)
{
  setcolor(0);
  setlinestyle(0, 0, NORM_WIDTH);
  ellipse(98, 70, 0, 360, 10, 12);
  ellipse(120, 65,0, 360, 12, 10);

  setfillstyle(SOLID_FILL, 6);
  floodfill(98, 70, 0);
  floodfill(120, 65, 0);

  setcolor(0);
  circle(101, 76, 4);
  circle(126, 70, 4);

  setfillstyle(SOLID_FILL, 0);
  floodfill(101, 76, 0);
  floodfill(126, 70, 0);

  pieslice(114, 82, 0, 360, 5);

  ellipse(116, 88, 185, 360, 15, 5);
}



/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */
/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */
/* Dibuja la 'I' de Info                                                  */
/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */
/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */
void DibujaInfo(void)
{
 setcolor(0);
 setfillstyle(SOLID_FILL, 62);
 fillellipse(130, 310, 18, 25);
 settextstyle(DEFAULT_FONT, HORIZ_DIR, 3);
 outtextxy(119, 300, "i");
 settextstyle(DEFAULT_FONT, HORIZ_DIR, 1);
}


/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */
/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */
/* Dibuja Mi JD                                                           */
/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */
/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */

void DibujaSalir(void)
{
 setcolor(56);
 setlinestyle(0, 0, THICK_WIDTH);
 line(75, 403, 100, 403);               /* J */
 line(100, 403, 100, 443);              /* J */
 line(84, 436, 75, 436);                /* J */

 line(105, 403, 120, 403);              /* D */

 setcolor(63);
 line(75, 404, 75, 414);                /* J */
 line(75, 414, 90, 414);                /* J */
 line(90, 414, 90, 438);                /* J */
 line(75, 437, 75, 448);                /* J */

 line(105, 403, 105, 456);              /* D */
 line(105, 456, 120, 456);              /* D */


 arc(88, 443, 180, 353, 13);            /* J */
 setlinestyle(0, 0, THICK_WIDTH);


 setcolor(56);
 setlinestyle(0, 0, THICK_WIDTH);
 arc(87, 438, 180, 353, 4);             /* J */

 setlinestyle(0, 0, THICK_WIDTH);
 ellipse(115, 429, 280, 80, 23, 27);            /* D */


}




void fundido_al_negro(void)
{
					// int OK=0;
 typedef union {
	       struct {
			unsigned char rojo, verde, azul;
	       }color;
	       unsigned char RGB[3];
	       }DAC;

 typedef DAC DACARRAY[16];

 union REGS regs;
 struct SREGS sregs;
 int m,n;
 DACARRAY Buffer;  // Array de 16 estructuras de 3
 //obtencion de la paleta a trav‚s de la BIOS.
 regs.h.ah=0x10;
 regs.h.al=0x17;
 regs.x.bx=0;
 regs.x.cx=16;
 regs.x.dx=FP_OFF(Buffer);
 sregs.es=FP_SEG(Buffer);
 int86x(0x10,&regs,&regs,&sregs);


  for(m=0;m<64;m++)
				//  while(!OK)
     {
      for(n=0;n<16;n++)
	 {
	  if (Buffer[n].RGB[0]>0) { Buffer[n].RGB[0]--; }
	  if (Buffer[n].RGB[1]>0) { Buffer[n].RGB[1]--; }
	  if (Buffer[n].RGB[2]>0) { Buffer[n].RGB[2]--; }
				//  if (Buffer[n].RGB[1]<=0 && Buffer[n].RGB[1]<=0 && Buffer[n].RGB[2]<=0) OK = 1;
	 }
      pon_paleta((char*)Buffer, -1);
      delay(15);
     }				//;
}

void pon_paleta(char *punt, int bandera)
{
 struct   SREGS  seg;
 union     REGS  regs;
 unsigned  int  n;
 char far  *cPaleta, *dir_pal;
 cPaleta=punt;

 if(bandera==0){
    dir_pal=cPaleta;
    for(n=12; n>0; n--) {
       *cPaleta=*cPaleta >> 2;
       *dir_pal=*cPaleta;
	cPaleta++;dir_pal++;
	}
    }

 regs.x.ax = 0x1012;
 regs.x.bx = 0;
 regs.x.cx = 16;
 regs.x.dx = FP_OFF(cPaleta);
 seg.es    = FP_SEG(cPaleta);
 int86x(0x10, &regs, &regs, &seg);    // funci¢n para asignar los colores
}