felcdnbi программ_________. , . ________________________289
k := ParOffset+DataOffset;
Name.Addrs.sa :=. segtRB-^k]); {Адрес} Name.Addrs.oa := ofs (PB" [Ic]); [шрифта} FirstChr := FirstChar;
LastChar :=' FirstChar+CharsCount-1;
Height := UpperMargin;
Bottom := LowerMargin;
{Переносим таблицу смещений) k := ParOffset+DataOf?set-3*CharsCount;
Move(PB"W,0ffs[FirstChar],2*CharsCount) ;
{Формируем таблицу длин} for k := FirstChar to LastChar^l do Leng[k] := Offs{k+ll-0ffstk};
Leng[LastChar] := FileSize-Offs[LastChar-1] end;
{Формируем список описателей} if FontNumb^O then
FontList := PD {Список был пустым} else
begin {Ищем конец списка} Р := FontList; {Начало списка} while P^.NextFontONIb do
Р := P^NextFont; {Sext=llIL - конец} P^-NextFont := PD end;
inc(FontNumb) ;
RegisterChrFont := FontNurob end; {RegisterCtirFont} /————————————;
Procedure OutString(S: String; Font: Integer; Angle: Integer; MX,MY: Real);
{Выводит с помощью векторного шрифта Font строку S с поворотом на угол Angle и с масштабными коэффициентами MX,UY) vac
х0,у0: Integer; (Начало очередного символа}
Ang: Real;
Procedure OutChar(var V);
{Выполняет векторные .команды V} var
Vec: array [1. .Maxlnt.1 of Word absolute V;
k,op: Word;
Procedure Coo(X,Y: Integer; var xx,yy: Integer);
{Осуществляет поворот координат X,Y на угол Angle и возвращает новые координаты хх,уу} var
г,a: Single;
begin
{Переводим в полярные координаты}
г :» sqrt(1.0*x*x+1.0*y*y);
if x=0 then if y<0 then 'а :=. -pi/2
else
a := pi/2
else
a := arctan(y/x);
a := a+Ang; {поворот координат}
{Вычисляем новые координаты)
уу := Round(r*sin(a));
хх := Round(r*cos(a)) end; {Coo} <-—"-——;