program Carlotta;
{ -------------------------------------- }
{ ARCS.p                                 }
{                                        }
{ demo per l'utlizzo della procedure     }
{ Arc,Rectangle,GetMaxColor,SetWriteMode }
{ Circle.                                }
{ -------------------------------------- }
{ by Filippo Bosi                        }
{ Settembre 91 - VERSIONE KICKPASCAL     }
{ -------------------------------------- }

  uses TPGrafica;

  var
    ErrCode,i,x    : Integer;

  begin
    { * apri le librerie grafiche * }
    Gr_OpenLibs;

    { * schermo a bassa risoluzione * }
    { * con 6 piani di bit, cioe'   * }
    { * 2^6=64 colori --> Extra     * }
    { *                   HalfBrite * }
    InitGraph(GR_LORES,6);
    ErrCode := GraphResult;

    { * esempio di utilizzo di * }
    { * GraphErrorMsg          * }
    Writeln(GraphErrorMsg(ErrCode));

    { * se e' tutto Ok, allora disegna * }
    { * altrimenti esci dal programma  * }
    if ErrCode <> grOk then
       begin
       Gr_CloseLibs;
       halt(10); {* esci con codice 10 * }
       end;

     { * esempio di utilizzo di * }
     { * GetMaxColor            * }
     Writeln("N.colore massimo:",
             GetMaxColor);

     { * disegna archi e rettangoli * }
     for i:=1 to GetMaxColor do
      begin
      SetColor(i);
      SetWriteMode(NormalPut);
      Arc(100,100,10+i*3,
          300-i*3,130-i*2);
      Rectangle(30+i*3,10,100+i*3,100);
      end;

      { * ...un po' di cerchi * }
      for i:=1 to 100 do
       begin
       SetColor(i mod GetMaxColor);
       Circle(GetMaxX,GetMaxY,80+i);
       end;

{ * esempio di "animazione" usando il * }
{ * modo XORPut: se riscriviamo lo    * }
{ * stesso oggetto su video e' come   * }
{ * se non avessimo eseguito alcuna   * }
{ * operazione sullo schermo grafico  * }
{ * che fa cosi' da "sfondo" al       * }
{ * nostro rettangolino che viaggia   * }
{ * per lo schermo                    * }

      SetWriteMode(XORPut);
      for x:=1 to GetMaxY do
          begin
          Rectangle(x,x,x+20,x+20);
          Delay(1);
          { * un po' di ritardo per  * }
          { * limitare il flickering * }
          Rectangle(x,x,x+20,x+20);
          end;
       SetWriteMode(NormalPut);

      { * attendi che venga premuto un * }
      { * tasto oppure un bottone del  * }
      { * mouse sullo schermo grafico  * }
      Gr_AttendiUnTasto;

      { * chiudi lo schermo grafico * }
      CloseGraph;

    { * chiudi le librerie * }
    Gr_CloseLibs;
end.



