C++ Colines Vretrace demo

Colines Vretrace demo

#include <conio.h>
#include <string.h>

struct RGB
 {
  char r,g,b;
 }__rgb;

char far *fntptr;

void initmode()
{
 asm{
  mov	ax,0x13
  int	0x10
 }
}

void pixel(int x,int y,char c)
{
 if(x < 0 || y < 0 || x > 319 || y > 200)
  return;
 asm{
  push es
  mov  ax,0xa000
  mov  es,ax
  mov  ax,y
  mov  bx,320
  mul  bx
  add  ax,x
  mov  di,ax
  mov  al,c
  stosb
  pop  es
 }
}

void closemode()
{
 asm{
  mov	ax,0x03
  int	0x10
 }
}

void loadpal(void far *pal)
{
 asm {
  push	es
  mov	ax,0x1012
  mov	bx,0
  mov	cx,256
  les	dx,pal
  int	0x10
  pop	es
  }
}

void getfntptr()
{
 asm{
  push	es
  xor	ax,ax
  mov	es,ax
  mov	si,0x43*4
  mov	ax,es:[si]
  mov	word ptr [fntptr],ax
  mov	ax,es:[si+2]
  mov	word ptr [fntptr+2],ax
  pop	es
 }
}

void drawletter(int x,int y,char color,char c)
{
 char h,l,j,i;

 if(x+8 < 0 || x-8 > 320)
  return;
 for(i=0;i<8;i++)
  {
   h = *(fntptr+c*8+i);
   for(j=0;j<8;j++)
    {
     l = y+i;
     asm{
      mov  al,h
      shl  al,1
      mov  h,al
      jnc   l
     }
     l = 210+((x+j)*4)/32;
    l:;
     pixel(x+j,y+i,l);
    }
  }
}

struct RGB pal[256],p;
int    i;
int    x,y,len,col;
char  *str=" CoLines Intro by Dasaev Corp. *|* E-Mail : Root@Tmg.Dp.Ua *|*  Programs of Dasaev Corp : DAC & DAP - freeware cracker and trainer, and some others programs  ... ";

main()
{
 initmode();
 getfntptr();
 for(i=0;i<200;i++)
  {
   pal[i].r = 0;
   pal[i].g = 0;
   pal[i].b = 0;
  }
 for(i=200;i<256;i++)
  {
   pal[i].r = i-200+3;
   pal[i].g = i-200+3;
   pal[i].b = i-200+3;
  }
 for(i=1;i<20;i++)
  {
   pal[i].r = i*2+10;
   pal[39-i].r = i*2+10;
  }
 for(i=1;i<20;i++)
  {
   pal[i+70].g = i*2+10;
   pal[39-i+70].g = i*2+10;
  }
 for(i=1;i<20;i++)
  {
   pal[i+140].b = i*2+10;
   pal[39-i+140].b = i*2+10;
  }
 loadpal((void *)&pal);

 for(i=0;i<200;i++)
  {
   asm{
    push  es
    mov   ax,0xa000
    mov	  es,ax
    mov	  ax,i
    mov   bx,320
    mul   bx
    mov   di,ax
    mov   ax,i
    cld
    mov   cx,320
    rep   stosb
    pop   es
   }
  }
 x = 0;
 len = strlen(str);
 while(!kbhit())
  {
   loadpal((void *)&pal);
   p = pal[1];
   for(i=1;i<200;i++)
    pal[i] = pal[i+1];
   pal[199] = p;
   for(i=0;*(str+i) != 0;i++)
    {
     y = 320-x+(i << 3);
     drawletter(y,170,col,*(str+i));
    }
   x++;
   if(x > (len+2)*9+320)
    x = 0;
  }
 while(kbhit()) getch();
 closemode();
}