{ File: grafedrv.pas }

{ Scopo: driver per verificare il funzionamento delle operazioni su grafi
         etichettati }

program DriverGrafiEtichettati;

const
  NumNodi = 10;

type
  TipoEtichettaArco = real;
  TipoEtichettaNodo = integer;

  TipoNomeFile = string[128];

const
  ArcoNonEsiste = 0.0;

{ File da includere e tipi da definire per Grafi Etichettati
	GRAFEMAT.PAS : matrici di adiacenza oppure
	EVETGRAF.PAS : vettore delle liste dei successori
	GRAFEIO.PAS  : stampa, lettura e scrittura da file
        GRAFEVIS.PAS : visita di file }

{$I GRAFEMAT.PAS}
{$I GRAFEIO.PAS}
{ GRAFEVIS.PAS}

var
  nome_file : TipoNomeFile;
  grafo     : TipoGrafoEtic;
  etichetta : TipoEtichettaArco;
  i, j      : TipoNodo;
  scelta    : char;

begin
  { inizializza il grafo }
  InitGrafoEtic(grafo);

  repeat
    writeln('Opzioni:');
    writeln('Inizializza Grafo       : 0');
    writeln('Test esistenza arco     : 1');
    writeln('Inserisci arco          : 2');
    writeln('Elimina arco            : 3');
    writeln('Etichetta arco          : 4');
    writeln('---------------------------');
    writeln('Stampa grafo su schermo : 5');
    writeln('Leggi grafo da file     : 6');
    writeln('Scrivi grafo su file    : 7');
    writeln('---------------------------');
{   writeln('Visita in profondita    : 8');
    writeln('Visita in ampiezza      : 9');
    writeln('---------------------------'); }
    writeln('FINE                    : F');
    write('Scelta: ');
    readln(scelta);

    case scelta of
      '0' : InitGrafoEtic(grafo);
      '1' : begin
              write('Esistenza. Scrivere Arco i j da testare: ');
              readln(i,j);
              if TestEsisteArcoEtic(grafo,i,j) then
                writeln('Arco (', i, ',', j, ') esiste')
              else
                writeln('Arco (', i, ',', j, ') NON esiste')
            end;
      '2' : begin
              write('Inserimento. Scrivere Arco i j etichetta da inserire: ');
              readln(i,j,etichetta);
              InserArcoEtic(grafo,i,j,etichetta)
            end;
      '3' : begin
              write('Eliminazione. Scrivere Arco i j da eliminare: ');
              readln(i,j);
              ElimArcoEtic(grafo,i,j)
            end;
      '4' : begin
              write('Etichetta. Scrivere Arco i j di cui si vuole etichetta: ');
              readln(i,j);
              EtichettaArco(grafo,i,j,etichetta);
              write('Etichetta di ', i, '->', j, ' ', etichetta:5:2)
            end;
      '5' : StampaGrafoEtic(grafo);
      '6' : begin
              write('Scrivi il nome del file di ingresso: ');
              readln(nome_file);
              LeggiGrafoEticDaFile(grafo,nome_file)
            end;
      '7' : begin
              write('Scrivi il nome del file di uscita: ');
              readln(nome_file);
              ScriviGrafoEticSuFile(grafo,nome_file)
            end;
{     '8' : begin
              write('Visita in profondita. Scrivere Nodo i di partenza: ');
              readln(i);
              VisitaInProfondita(grafo,i);
            end;
      '9' : begin
              write('Visita in ampiezza. Scrivere Nodo i di partenza: ');
              readln(i);
              VisitaInAmpiezza(grafo,i);
            end;
}
    end;  
    writeln;
    writeln('[invio]');
    readln;
  until (scelta = 'F') or (scelta = 'f')
end. { DriverGrafiEtichettati }