{ File: listerwe.pas }

{ Scopo: operazioni su liste collegate semplici:
         - lettura da file e stampa su file, assumendo che un elemento possa
           essere letto e scritto usando direttamente readln e writeln
}

{ Richiede le seguenti definizioni preliminari e assume che elementi di
  tipo TipoElemLista possano essere letti e stampati con read e write.

  type
    TipoElemLista   = ...;
    TipoLista       = ^TipoRecordLista;
    TipoRecordLista = record
                        info : TipoElemLista;
                        next : TipoLista
                      end;
}

procedure LeggiLista (nomefile: string; var lis: TipoLista);
{ Restituisce in lis una lista i cui elementi vengono letti dal file di nome
  nomefile, uno per riga.
  L'ordine degli elementi nella lista e` lo stesso che nel file. }
var
  paux     : TipoLista;
  datafile : Text;
begin
  assign(datafile, nomefile);
  reset(datafile);
  new(lis);
  paux := lis;
  while (not eof(datafile)) do
  begin
    new(paux^.next);
    paux := paux^.next;
    readln(datafile, paux^.info)
  end;
  paux^.next := NIL;
  paux := lis;
  lis := lis^.next;
  dispose(paux);
  close(datafile)
end; { LeggiLista }


procedure ScriviLista (nomefile: string; lis: TipoLista);
{ Scrive gli elementi della lista lis sul file di nome nomefile, uno per riga.
  Il precedente contenuto del file va perduto. }
var
  datafile : Text;
begin
  assign(datafile, nomefile);  { associazione tra file logico e file fisico }
  rewrite(datafile);           { apertura del file in scrittura e
                                 posizionamento all'inizio }
  while lis <> NIL do
  begin
    writeln(datafile, lis^.info);
    lis := lis^.next
  end;
  close(datafile)              { chiusura del file }
end; { ScriviLista }