/* Huellas X    Fractales y Caos en un punto    18  Septiembre del 2000*/
/* Se autoriza la distribucion y uso libre de este programa (freeware) */
/* Fernando Galindo Soria    Cd. de Mexico */
/* www.fgalindosoria.com */

#include <graphics.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void escrcolordac16(char ,char ,char ,char );

void main()
{
  int gd=DETECT,gm,x,y,z,color,r,g,b;
  initgraph(&gd,&gm,"");
  randomize();

// mensaje de inicio
 cleardevice();
 printf("Huellas X  Fractales y Caos en un punto \n");
 printf("programa que genera fractales graficando un punto\n");
 printf("Se autoriza la distribucion y uso libre de este programa (freeware)\n");
 printf("Fernando Galindo Soria   www.fgalindosoria.com\n");
 printf("18 de Septiembre del 2000  Cd. de Mexico\n");
 printf("\n el programa termina con cualquier tecla\n");
 printf("\n oprime una tecla para continuar");
 getch();
 cleardevice();

  for(color=1;color<16;color++)
   escrcolordac16(color,64-color*4,0,0);

  z=0;
  while(!kbhit()){
    z+=1; if(z==0)z=1;
    for (x=0; x<getmaxx(); x+=5)
      for (y=1; y<getmaxy(); y+=5)
	 putpixel(getmaxx()-x,getmaxy()-y,x*z/y);

   if(random(50)==3){r=random(64);g=random(64);b=random(64);
     for(color=1;color<16;color++)
       escrcolordac16(color,r*color, g+3*color, b+color*7);}
  }
  getch();
  closegraph();
}


/*cambia de color paleta llamando directamente a los puertos
  del convertidor analogico digital  de la tarjeta de video 31/iii/96

  utiliza initgraph y maneja paleta rgb de 16 colores b(lue) g(reen) r(ed)
    14/iv/96 */
void escrcolordac16(char color,char r,char g,char b)
{
 char indcol[]={0,1,2,3,4,5,20,7,56,57,58,59,60,61,62,63};
  outportb(0x3C8,indcol[color]);/*inicializa el color*/
  outportb(0x3C9,r);
  outportb(0x3C9,g);
  outportb(0x3C9,b);
}