interface

procedure SetTextParm(color,bkcolor,typetext:byte);
         { установка параметров вывода текста }
{       color    - цвет текста                        }
{       bkcolor  - цвет фона                          }
{       typetext = 0 - прозрачный фон                 }
{       typetext = 1 - непрозрачный фон               }
procedure GetTextParm(var color,bkcolor,typetext:byte);
            { запрос текущих параметров }
procedure PutText(x,y:word;text:string);
 {вывод текста по координатам x,y (верхний левый угол)}
procedure PutChar(x,y:word;chr:char);
{вывод символа по координатам x,y (верхний левый угол)}

implementation
uses dos;
type
   FTType = array[0..255,0..7]of byte;     {для шрифта}
const
   Colors : array[0..15]of byte =
           (  0,  2, 20, 22,160,162,172,182,
            109,111,125,127,237,239,253,255);
                   {цвета, соответствующие номерам 0—15}
var
   FontTable : ^FTType;                {таблица шрифта}
   Color1,bkColor1 : byte;
            {номера «стандартных» цветов текста и фона}
   Color2,bkColor2 : byte;
      {номера цветов текста и фона в выбранной палитре}
   TextType : byte; {способ вывода (прозрачно или нет)}

procedure SetTextParm(color,bkcolor,typetext:byte);
begin
   Color1   := color;
   bkColor1 := bkcolor;
   TextType := typetext;
   Color2   := Colors[Color1];
   bkColor2 := Colors[bkColor1];
end;

procedure GetTextParm(var color,bkcolor,typetext:byte);
begin
   color    := Color1;
   bkcolor  := bkColor1;
   typetext := TextType;
end;

procedure PutText(x,y:word;text:string);
var
   i:word;
begin
   if(byte(text[0])>0)then
      for i := 1 to byte(text[0]) do
         putchar(x+8*(i-1),y,text[i])
end;

procedure PutPixel(x,y:word;c:byte);     {вывод точки}
begin
   mem[SegA000:x+y*320] := c;
end;

function getpixel(x,y:word):byte; {запрос цвета точки}
begin
   getpixel := mem[SegA000:x+y*320];
end;

procedure putchar(x,y:word;chr:char);
var
   i,j,k,l : word;
   cc,bb : byte;
begin
   l := byte(chr);
   case TextType of
      0: for i := 0 to 7 do          { прозрачный фон }
            for j := 0 to 7 do
               if (FontTable^[l,i] and
                     (1 shl (7-j)) <> 0) then
                  putpixel(x+j,y+i,Color2);
      1: for i := 0 to 7 do        { непрозрачный фон }
            for j := 0 to 7 do
               if (FontTable^[l,i] and
                     (1 shl (7-j)) <> 0) then
                  putpixel(x+j,y+i,Color2)
               else putpixel(x+j,y+i,bkColor2);
   end;
end;

var r : registers;

begin  {инициализация — получаем адрес таблицы шрифтов}
   r.ax := $1130;
   r.bh := 3;
   intr($10,r);
   FontTable := ptr(r.es,r.bp);
   Color1   := 15;      {заносим величины по умолчанию}
   bkColor1 :=  0;
   TextType :=  1;
   Color2   := Colors[Color1];
   bkColor2 := Colors[bkColor1];
end.