#include "vga.h"

/* float, scanlines 
 * is enkel nuttig als |dx|>|dy| 
 */
void putpixel(int x, int y)
{
   graph_mem[x+y*320]=15;
   printf("%d,%d  ",x,y);
}

void drawscanline(int x1, int y, int x2)
{
   int i;
   for(i=x1;i<x2;i++)
     {
	putpixel(i,y);
     }
}

void drawline(int x1, int y1, int x2, int y2)
{
   int detail=256;
   int x,y,dx,dy,m;
   dx=x2-x1;
   dy=y2-y1;
   if (abs(dx)>abs(dy))
     {
	if (x1>x2)
	  {
	     drawline(x2,y2,x1,y1);
	     return;
	  }
	if (y1>y2)
	  {
	     m=-detail*dx/dy;
	     x=x1*detail;
	     for(y=y2;y<y1;y--)
	       {
		  int lx=x;
		  x+=m;
		  drawscanline(lx/detail,y,x/detail);
	       }
	  }
	else
	  {
	     m=detail*dx/dy;
	     x=detail*x1;
	     for(y=y1;y<y2;y++)
	       {
		  int lx=x;
		  x+=m;
		  drawscanline(lx/detail,y,x/detail);
	       }
	  }
     }
   else
     {
	if(y1>y2)
	  {
	     drawline(x2,y2,x1,y1);
	     return;
	  }
	m=detail*dx/dy;
	for(y=y1;y<y2;y++)
	  {
	     x=m*(y-y1)+x1*detail;
	     putpixel(x/detail,y);
	  }
     }
}

void main(void)
{
   vga_setmode(G320x240x256);
   vga_setwritepage(1);
   graph_mem[0]=15;
   graph_mem[40]=14;
   graph_mem[160]=13;
   graph_mem[200]=12;
   sleep(10);
/*   drawline(10,10,40,100);
   sleep(3);
   drawline(10,10,100,40);
   sleep(3);
   drawline(310,190,270,100);
   sleep(3);
   drawline(310,190,210,160);
   sleep(3);
*/}

