procedure say(x,y:integer;st:string);
var i:integer;begin for i:=1 to length(st) do putd(x,y+i-1,st[i]);end;
procedure clear(x1,y1,x2,y2:integer);
var i,j:integer;begin for i:=x1 to x2 do for j:=y1 to y2 do putd(i,j,' ');end;
procedure savescreen(x1,y1,x2,y2:integer;VAR pp:screentype);
var i,j:integer;begin for i:=1 to 25 do for j:=1 to 80 do pp[(i-1)*80+j]:=getd(i,j);end;
procedure restorescreen(x1,y1,x2,y2:integer;pp:screentype);
var i,j:integer;begin for i:=1 to 25 do for j:=1 to 80 do putword(i,j,pp[(i-1)*80+j]);end;
procedure fill(x1,y1,x2,y2:integer;ch:integer);
var i,j:integer;begin for i:=x1 to x2 do for j:=y1 to y2 do begin putword(i,j,(getd(i,j) mod 256)+ch*256);end;end;
procedure box(x1,y1,x2,y2:integer);
var st1,st2,st3:string;i:integer;begin st1:=chr(218);st2:=chr(179);st3:=chr(192);
for i:=1 to y2-y1-1 do begin st1:=st1+chr(196);st2:=st2+' ';st3:=st3+chr(196);
end;st1:=st1+chr(191);st2:=st2+chr(179);st3:=st3+chr(217);say(x1,y1,st1);for i:=x1+1 to x2-1 do
say(i,y1,st2);say(x2,y1,st3);end;
procedure double(x1,y1,x2,y2:integer);
var st1,st2,st3:string;i:integer;begin st1:=chr(201);st2:=chr(186);st3:=chr(200);
for i:=1 to y2-y1-1 do begin st1:=st1+chr(205);st2:=st2+' ';st3:=st3+chr(205);
end;st1:=st1+chr(187);st2:=st2+chr(186);st3:=st3+chr(188);say(x1,y1,st1);for i:=x1+1 to x2-1 do
say(i,y1,st2);say(x2,y1,st3);end;
procedure clearkey;var ch:char;begin while keypressed do ch:=readkey;end;