/* Bitmap Graphics Program with Line */

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

#define VGA256 0x13
#define TEXT 0x03

void setMode (int mode)
{
asm { mov ax, mode
int 0x10 }
}

unsigned char far *videoBuffer = (unsigned char far *) 0xA0000000L;

void putPixel (int x, int y, int color)
{
videoBuffer [((y<<8) + (y<<6)) + x] = (unsigned char) color;
}

void Draw_Line (int x0, int y0, int x1, int y1, unsigned char color)
{
int dx, dy, x_inc, y_inc, error=0, index;

unsigned char far *vb_start = videoBuffer;

vb_start = vb_start + ((unsigned int) y0<<6) +
((unsigned int) y0<<8) +
(unsigned int) x0;

dx = x1 - x0;
dy = y1 - y0;

if (dx>=0)
{
x_inc = 1;
}
else
{
x_inc = -1;
dx = -dx;
}

if (dy>=0)
{
y_inc = 320;
}
else
{
y_inc = -320;
dy = -dy;
}

if (dx>dy)
{
for (index=0; index<=dx; index++)
{
*vb_start = color;
error += dy;
if (error>dx)
{
error -= dx;
vb_start += y_inc;
}
vb_start += x_inc;
}
}
else
{
for (index=0; index<=dy; index++)
{
*vb_start = color;
error += dx;
if (error>0)
{
error -= dy;
vb_start += x_inc;
}
vb_start += y_inc;
}
}
}

int main ()
{
clrscr ();
int gdriver = DETECT, gmode, errorcode;
initgraph (&gdriver, &gmode, "g:\\bgi");
errorcode = graphresult ();

if (errorcode != grOk)
{
printf ("Graphics error: %s \n", grapherrormsg (errorcode));
printf ("Press Anykey to halt: ");
getch ();
exit (1);
}

/* "graphics main prorgam lines" go here */

int color, j;
setMode (VGA256);

for (color=0; color<256; color++)
{
for (j=0; j<200; j++)
{
putPixel (color, j, color);
}
}

Draw_Line (0, 0, 320, 200, 16);

getch ();
setMode (TEXT);
closegraph ();

return 0;
}

Download Btmpline.cpp