unit Text256; interface procedure SetTextParm(color,bkcolor,typetext:byte); { установка параметров вывода текста } { color - цвет текста } { bkcolor - цвет фона } { typetext = 0 - прозрачный фон } { typetext = 1 - непрозрачный фон } procedure GetTextParm(var color,bkcolor,typetext:byte); { запрос текущих параметров } procedure PutText(x,y:longint; txt:string); {вывод текста по координатам x,y (верхний левый угол)} procedure PutChar(x,y:longint; chr:char); {вывод символа по координатам x,y (верхний левый угол)} implementation uses dos,graph; 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 : array[0..255,0..7]of byte; {таблица шрифта} Color1,bkColor1 : byte; {номера ?стандартных? цветов текста и фона} Color2,bkColor2 : byte; {номера цветов текста и фона в выбранной палитре} TextType : byte; {способ вывода (прозрачно или нет)} i,j,l : longint; {вспомогательные переменные} 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:longint; txt:string); begin if(byte(txt[0])>0)then for i := 1 to byte(txt[0]) do putchar(x+8*(i-1),y,txt[i]); end; procedure putchar(x,y:longint; chr:char); var l,j : longint; begin case TextType of 0: for l := 0 to 7 do { прозрачный фон } for j := 0 to 7 do if (FontTable[byte(chr),l] and (1 shl (7-j)) <> 0) then putpixel(x+j,y+l,Color2); 1: for l := 0 to 7 do { непрозрачный фон } for j := 0 to 7 do if (FontTable[byte(chr),l] and (1 shl (7-j)) <> 0) then putpixel(x+j,y+l,Color2) else putpixel(x+j,y+l,bkColor2); end; end; var r : registers; begin {инициализация — получаем адрес таблицы шрифтов} r.ax := $1130; r.bh := 3; intr($10,r); for j := 0 to 255 do for i := 0 to 7 do FontTable[j,i] := mem[r.es:r.bp + i + j*8]; SetTextParm(15,0,1); end.