
                      /* Listato 2 */

            /* Scrolling fine con Grafica.h */


#include <grafica.h>
#define PORT finestra->UserPort

main()
 {
struct Screen *schermo;/* Prepara struttura per lo screen */
struct Window *finestra;/* Prepara struttura per la finestra */
struct Window *memoria; /* Prepara struttura per finestra di memoria */
struct IntuiMessage *messaggio;/* Prepara struttura per i messaggi */

ULONG class;


  AttivaG(); /* Apre le librerie */

schermo=(struct Screen *)Schermo(0,640,256,2,0,1,HIRES,
                                 NULL,"Schermo di prova");
if (schermo==NULL) {
                    EndG();
                    exit(); /* Problemi !*/
                   };

Palette(schermo,0,0,0,0); /* Schermo nero */
Palette(schermo,1,15,15,15); /* Bianco */
Palette(schermo,2,3,5,8);
Palette(schermo,3,7,8,3);

finestra=(struct Window *)Finestra(50,50,160,150,-1,-1,CLOSEWINDOW,
                                   GIMMEZEROZERO+WINDOWCLOSE+ACTIVATE,
                                   NULL,NULL,
                                   "Scroll e Copy",schermo,0,0,0,0);
if (finestra==NULL) {
                     printf("FINESTRA non aperta.");
                     exit();
                    }


memoria=(struct Window *)Finestra(300,50,50,200,-1,-1,NULL,NULL,NULL,NULL,
                                  "Memoria",schermo,0,0,0,0);
if (memoria==NULL) {
                    printf("finestra di MEMORIA non aperta.");
                    exit();
                   }


  Clw(finestra); /* Pulizia finestre */
  Clw(memoria); /* Questa finestra SPARISCE completamente perche' non
                   e' stato selezionato il flag GIMMEZEROZERO */

  BoxF(finestra,10,20,100,80,2);  /* Box pieno */
  Box(finestra,30,100,130,140,3); /* Box vuoto */




           /* Aspetta che la finestra sia chiusa */

 for(;;)  /* Ciclo infinito */
     {
              /* Attende un messaggio valido */
       while ((messaggio=(struct IntuiMessage *)GetMsg(PORT))!=NULL)
               {
                    /* Salvo i campi che mi interessano */
                 class=messaggio->Class;
                 ReplyMsg(messaggio); /* Messaggio ricevuto ! */

                 if (class==CLOSEWINDOW) { /* Chiude la finestra */
                                           CloseWindow(finestra);
                                           CloseWindow(memoria);
                                           CloseScreen(schermo);
                                           EndG();
                                           exit();
                                          };

                }; /* Fine while */


      /* Scroll e Copy */

    Copy(finestra,0,0,memoria,10,10,1,150); /* Copia una riga in MEMORIA */
    Scroll(finestra,0,0,149,149,1,0); /* Esegue lo scrolling */
    Copy(memoria,10,10,finestra,149,0,1,150); /* Ricopia la riga dalla parte
                                                 opposta della finestra */
 
     };  /* Ciclo infinto */


} /* FINE */

 
