begin

if (Page<-MaxPage) and (PagaoActivePage) then begin

SwapPage(Page,ActivePage);

Move(Pages[Page],Pages[ActivePage],SiaeOf(PageType));

GetCursor(Page,X,Y,U,D) ;

PutCursor(ActivePage,X,Y);

SetCursorLine(ActivePage,U,D);

SetActivePage(ActivePage) end end {GetSfindow};

^-.___—————————————;

Procedure PutHindow(Xl,Yl,X2,Y2,Text,Back,Bord,Page: Byte;

Header: String; Clip,Build,Play: Boolean);

{Сохраняет текущий экран в текстовой странице PAGE и организует окно с заданными атрибутами и рамкой} var

X,Y,U,D: Byte;

begin

if not ((Page>MaxPage) or (XK1) or (X2<-X1) or (Y1<1) or (Y2<=Y1) or (X2>MaxChar) or (Y2>MaxI»ine) or (Bord>2)> then begin

SwapPage(ActivePage,Page);

Move(Pages[ActivePage],Pages[Page),SizeOf(PageType));

GetCursor(ActivePage,X,Y,U,D);

PutCursor(Page,X,Y) ;

SetCursorLine(Page,U,D);

Colors(Text,Back);

SetWindow(XI,XI,X2,Y2,Bord,Header,Clip,Build,Play) end;

end {PutWindo»);

_-.——————————————;

Procedure SaveWind(Page: Byte; var Buf; var LX,LY: Byte);

{Сохраняет копию окна в буфере BUF} var

X1,Y1,X2,Y2: Byte;

В: array [O-.MaxInt] of pyte absolute Buf;

k: Byte;

begin

if Page<=-MaxPage then with Pages [Page] do begin

XI » Lo(WBondUp) ;

Yl = Hi(WBondUp) ;

X2 = Lo(WBondDown)+2;

Y2 ° Hi(WBondDown)+2;

LX = X2-X1+1;

LY = Y2-Y1+1;

for k :== Yl to Y2 do

MoveFromScreen (Mein[VMemory:Page*VSi2e+

(pred(k)*MaxChar+Xl-l)*2],B[(k-Yl)*LX*2],LX*2) end end; {SaveWind) ^_———————————————;

Procedure SetPageWindow (Page,XI,Y1,X2,Y2,Bord: Byte;

Header: String;Clip: Boolean);

(Создает окно в странице PAGE и обводит его рамкой} var

buf: array [1..80,1..2] of Byte;

X,Y,Size,k: Byte;