program wedge_w; {by Jan Hollan: showing a wedge -
                and storing/repainting a part of screen}

uses Graph,DOS,g_scree;

const cl=#13#10;
var  i,j,m,k:byte; ch:char; GD,GM:integer; Palette:PaletteType;
     buf:array [1..256] of byte;
begin
 GD:=VGA; GM:=VGAHi;
 initgraph(gd,gm,getenv('BGI'));
 for i := 0 to 15 do
  begin
    j:=i*4;
    SetRGBPalette(i,j,j,j);
  end;
 for i:=0 to 15{Palette.Size} do SetPalette(i,i);
 GetPalette(Palette);
 setcolor(15);
 line(0,0,15,0);
 for i:=0 to 15 do putpixel(i,2,i);
 for i:=0 to 15 do putpixel(i,4,15-i);
 for i:=0 to 15 do putpixel(i,6,15*(i mod 2));
 for i:=0 to 15 do putpixel(i,8,15*(1-(i mod 2)));
 putpixel(0,10,15);
 putpixel(1,12,15);
 putpixel(8,14,15);
 putpixel(0,16, 7);
 writegenscr(0,0,15,16,'ulc.sc1');
 move(mem[$A000:0],buf[1],10);
 move(mem[$A000:80],buf[11],10);
 move(mem[$A000:160],buf[21],10);
 move(mem[$A000:240],buf[31],10);

 write(cl);
 for j:=0 to 3 do
  begin
   for i:=1 to 10 do write(buf[j*10+i]:3);
   write(cl);
  end;

 for i:=0 to 15 do
  for m:=0 to 30 do
   for k:=0 to 100 do putpixel(31+31*i+m,86+k,i);

 writegenscr(31+31*7,86,31+31*7+15,86+30,'ulc.sc2');

  fillchar(buf,256,0);
  buf[1]:=15; buf[3]:=30;
  for i:=0 to 30 do
   fillchar(buf[7+8*i],6,255);
  PutImage(31+31*7,187,buf[1],NormalPut);
 writegenscr(31+31*7,187,31+31*7+15,187+30,'ulc.sc3');
 {640*480 div 2 +6 = 153 606 - the whole screen may be saved in three parts.}
 writegenscr(0,0,639,479,'ulc.sc4');
 {readgenscr(0,100,'ulc.sc4');}
 closegraph;
end.
