/*=============== do_compact ===================*/
/* implementa la system call compact
   ORGANIZZAZIONE DA RIVEDERE
*/

PUBLIC do_compact()
{ register struct hole * hp;
  phys_clicks tot_click, stop_addr, max_mem;
  int  num, go;

  num = (phys_clicks) mm_in.m1_i1;
  go=1;

/* a questo punto sono possibili alcuni casi:
   parametro a 0: compatta tutta la memoria
   parametro negativo: generare un errore
   parametro positivo: compattare altrettanti clicks (almeno)
*/

/* inserire opportunamente i casi con i codici successivamente 
   listati e il caso di errore (da farsi)
*/
 
  if (go) stop_addr=aux_do_comp (tot_clicks, 1);
 } 


=============codice da inserire opportunamente: ================
 
/* codice per compattare tutto:  da fare */
/* codice per caso errore: da fare */

/* codice per compattare "num" clicks */
  hp=hole_head;
  max_mem=0;
  tot_clicks = num;
  while ((hp!=NIL_HOLE)&&go)
  { if (tot_clicks <= hp->h_len ) /* esiste gia' un buco sufficiente */
    { go=0;
      printf ("compact not needed\n");
      break;
    }
    max_mem+=hp->h_len;
    hp=hp->h_next;
  }
  if ((max_mem < tot_clicks)&&go) /* memoria non disponibile */
  { printf ("memory available: %u clicks\n", max_mem);
    go=0;
  }
  break;