/**************************************************
 * This is a part of DosWare 3D engine and it     *
 * should be distributed freely.                  *
 *                                                *
 * Copyright (C)1997 by George Yohng/DosWare,corp.*
 **************************************************/

unsigned char scrbuf[200][320]; //это - double buffer;
                                //можете не беспокоиться за этот
                                //двумерный массив, т.к. при обращении
                                //к нему компилятор не будет генерировать
                                //команду умножения, а заменит их сдвигами
                                //или ещё того-лучше.
void showbuffer() // ну это просто процедура вывода
{
 memcpy((void *)0xA0000,(void *)scrbuf,64000);
}

void softbuffer_high() // а это - процедура вывода с сильным сглаживанием
{int x,y;
 unsigned char *vid=(unsigned char *)0xA0000, //для защищённого режима
                                        *scr;

 for(x=0;x<=319;x++) *(vid++)=0; // для простоты чистим 0 линию
                                 // экрана. если мы её не очистим,
                                 // или же будем брать из буфера,
                                 // будет нежелательный эффект,
                                 // когда первая линия не сглаживается.
                                 // ну если вам нужно всё как-следует,
                                 // попробуйте для этой линии использовать
                                 // значение 0, т.е. делать её в 2 раза
                                 // темнее, чем в буфере.
 scr=(unsigned char *)scrbuf;
 for(y=1;y<=199;y++)
 {
  *(vid++)=0; //аналогично чистим первую колонку.
  scr+=320; //следующая строка
  for(x=1;x<319;x++)
  {
   *vid=c_midc[c_midc[scr[x-321]][scr[x-320]]]
            [c_midc[scr[x-1]][scr[x]]];
   vid++;
  }
  vid++;
 }
}
void softbuffer_low() // процедура вывода с небольшим сглаживанием
{int x,y;
 unsigned char *vid=(unsigned char *)0xA0000,*scr;

 for(x=0;x<=319;x++) *(vid++)=0;
 scr=(unsigned char *)scrbuf;
 for(y=1;y<=199;y++)
 {
  *(vid++)=0;
  scr+=320; //следующая строка
  for(x=1;x<319;x++)
  {

   *vid=c_midc[scr[x]][
            c_midc[c_midc[scr[x-321]][scr[x-320]]]
                  [c_midc[scr[x-1]][scr[x]]]];
   vid++;
  }
  vid++;
 }
}
