home *** CD-ROM | disk | FTP | other *** search
- #include <dos.h>
- #include <math.h>
-
- #define VIDEO 0x10
- #define MAX_Y 479
-
- void SetModo(int modo)
- {
- union REGS regs;
-
- if (modo >= 0 && modo < 0x14)
- {
- regs.h.ah = 0x00; /* Definir el modo de video */
- regs.h.al = modo; /* 640x480, 16 colores */
- int86(VIDEO, ®s, ®s);
- };
- }
-
- void Punto(unsigned int x, unsigned int y, char color)
- {
- union REGS regs;
-
- regs.h.ah = 0x0c;
- regs.h.al = color;
- regs.h.bh = 0;
- regs.x.cx = x;
- regs.x.dx = MAX_Y-y;
-
- int86(VIDEO, ®s, ®s);
- }
-
- void SwapInt(int *a, int *b)
- {
- int aux;
-
- aux=*a;
- *a=*b;
- *b=aux;
- }
-
- void Linea(int x0, int y0, int x1, int y1, char color)
- {
- int dx, dy, IncrS, IncrN, d, x, y, IncrX, IncrY;
- if (abs(y1-y0) < abs(x1-x0))
- {
- if (x0 > x1)
- {
- SwapInt(&x0,&x1);
- SwapInt(&y0,&y1);
- };
-
- IncrY = (y1 > y0) ? 1:-1;
-
- dx=x1-x0;
- dy=abs(y1-y0);
- d=2*dy-dx;
- IncrS=2*dy;
- IncrN=2*(dy-dx);
- x=x0;
- y=y0;
- Punto(x,y,color);
- while (x < x1)
- {
- if (d <= 0)
- {
- d+=IncrS;
- x+=1;
- }
- else
- {
- d+=IncrN;
- x+=1;
- y+=IncrY;
- };
- Punto(x,y,color);
- };
- } /* if (abs(y1-y0) < abs(x1-x0)) */
- else
- {
- if (y0 > y1)
- {
- SwapInt(&x1,&x0);
- SwapInt(&y1,&y0);
- }
-
- IncrX = (x1 > x0) ? 1:-1;
-
- dy=y1-y0;
- dx=abs(x1-x0);
- d=2*dx-dy;
- IncrS=2*dx;
- IncrN=2*(dx-dy);
- x=x0;
- y=y0;
-
- Punto(x,y,color);
- while (y < y1)
- {
- if (d <= 0)
- {
- d+=IncrS;
- y+=1;
- }
- else
- {
- d+=IncrN;
- y+=1;
- x+=IncrX;
- };
- Punto(x,y,color);
- };
- };
- }
-
-
-
-