     Program grafik_4;
     USES crt,graph,grafini;

     Procedure tastendruck;
     VAR
        ch:CHAR;
     BEGIN
     WHILE KEYPRESSED DO
           ch:=READKEY;
     SETVIEWPORT(0,189,maxx,maxy,TRUE);
     CLEARVIEWPORT;
     SETVIEWPORT(0,0,maxx,maxy,false);
     OUTTEXTXY(0,maxy-8,'Weiter mit beliebigerTaste');
     ch:=READKEY;
     END;

     Procedure Kreise;
     VAR
         Kreis_bogen:Arccoordstype;
         i:INTEGER;
     BEGIN
     SETCOLOR(GETMAXCOLOR);
     FOR i:=1 TO 8 DO
     CIRCLE(100,100,10*i);            { Aufruf der Procedur Circle }
     Tastendruck;
     CLEARDEVICE;                     { Grafikbildschirm lschen }
     ARC(140,140,345,60,80);          { Einen Kreisbogen zeichnen }
     GETARCCOORDS(Kreis_bogen);       { Daten ermitteln }
     Tastendruck;
                                      { Endpunkte des Kreisbogen verbinden }
     LINE(Kreis_bogen.xstart,Kreis_bogen.ystart,
          Kreis_bogen.xend,Kreis_bogen.yend);
     Tastendruck;
     CLEARDEVICE;
     Pieslice(100,100,120,180,40);      { Ein "Kuchenstck" }
     Tastendruck;
     CLEARDEVICE;
     Ellipse(100,100,0,360,50,25);      { Eine Ellipse }
     Tastendruck;
     Fillellipse(100,100,50,25);  { Die gleiche Ellipse gefllt }
     Tastendruck;
     Cleardevice;
     END;

     PROCEDURE Bilduebertragen;          { Speichern von Bildausschnitten }
                                         { und zurckbertragen }
     VAR
        puffer:POINTER;                   { puffer als zeiger deklarieren }
        groesse,viertel,halb:WORD;
        x,y:INTEGER;
     BEGIN
        viertel:= maxx DIV 4;
        halb:=maxy div 2;
        MOVETO(1,1);                      { Grafikcursor setzen }
        FOR x:=1 to 50 DO                 { Einige Linien zeichnen }
          begin
           SETCOLOR(maxcol-1);
           LINETO(RANDOM(viertel),RANDOM(halb)); { x und y per Zufall }
          end;
         Tastendruck;
         groesse:=IMAGESIZE(0,0,viertel,halb); { Grsse Bestimmen }
         GETMEM(puffer,groesse);           { Platz im Speicher belegen }
         GETIMAGE(0,0,viertel,halb,puffer^); { Bild in puffer speichern }
         CLEARDEVICE;
         y:=0;
         FOR x:= 0 to 3 DO
           begin
           PUTIMAGE(x*viertel,y,puffer^,normalput);   { Bild zurckkopieren }
           Tastendruck;
           end;
         y:=halb-2;
         FOR x:= 0 to 3 DO
           begin
           PUTIMAGE(x*viertel,y,puffer^,notput);      { Bild invers }
           Tastendruck;
           end;
     END;
     BEGIN
     RANDOMIZE;
       Grafikein(CGA,CGAC1);
       Kreise;                           { Procedur aufrufen }
       OUTTEXTXY(80,maxy div 2 - 6,'Bildspeicherung');
       Tastendruck;
       Bilduebertragen;
       CLOSEGRAPH;
     END.

