{Terreno Antonio}
uses
   listeric,crt;

procedure menu;

begin
   clrscr;
   writeln('MENU'' OPERAZIONI:');
   writeln ('[ a ] --> crea lista');
   writeln ('[ b ] --> leggi lista da tastiera');
   writeln ('[ c ] --> inserisci x in testa');
   writeln ('[ d ] --> inserisci in ordine ');
   writeln ('[ e ] --> inserisci elemento prima di x ');
   writeln ('[ f ] --> inserisci elemento dopo di x ');
   writeln ('[ g ] --> inserisci in coda ');
   writeln ('[ h ] --> cancella tutte le occorenze di x ');
   writeln ('[ i ] --> cancella l''elemento prima di x ');
   writeln ('[ l ] --> cancella l''elemento dopo di x ');
   writeln ('[ m ] --> estrai l''elemento in posizione i');
   writeln ('[ n ] --> esiste l''elemento x? ');
   writeln ('[ o ] --> primo elemento ');
   writeln ('[ p ] --> ultimo elemento');
   writeln ('[ q ] --> ricerca la posizione dell''elemento x');
   writeln ('[ r ] --> lunghezza lista');
   writeln ('[ s ] --> vuota?');
   writeln ('[ t ] --> visualizza stato');
   writeln ('[ u ] --> concatena due liste ');
   writeln ('[ v ] --> fondi due liste ');
   writeln ('[ x ] --> Uscita');
end;

var
   opzione: char;
   lista_1,lista_2,lista_3:tipo_lista;
   elemento,x: tipo_elemento;
   posizione: integer;
begin
   writeln;
   menu;
   writeln;
   write ('Scegliere l''operazione da compiere: ');
   readln (opzione);
   while not (opzione = 'x') do
      begin
         case opzione of
       'a':  crea_lista(lista_1);
       'b': begin
               writeln('inserisci elementi termina con eoln');
          leggi_da_tastiera(lista_1);
            end;
       'c': begin
               write('elemento? ');
          read(elemento);
          inserisci_in_testa(elemento,lista_1);
            end;
       'd': begin
               write('elemento? ');
          read(elemento);
          inserisci_ord(elemento,lista_1);
            end;
       'e': begin
               write('x? ');
          readln(x);
          write('elemento? ');
          readln(elemento);
          inserisci_prima(x,elemento,lista_1);
            end;
       'f': begin
               write('x? ');
          readln(x);
          write('elemento? ');
          readln(elemento);
          inserisci_dopo(x,elemento,lista_1);
            end;
       'g': begin
               write('elemento? ');
          read(elemento);
          inserisci_in_coda(elemento,lista_1);
            end;
       'h': begin
               write('elemento? ');
          read(elemento);
          cancella_tutti(elemento,lista_1);
            end;
       'i': begin
               write('x? ');
          readln(x);
          cancella_prima(x,lista_1);
            end;
       'l': begin
               write('x? ');
          readln(x);
          cancella_dopo(x,lista_1);
            end;

       'm': begin
               write('posizione? ');
          read(posizione);
          estrai_el(elemento,posizione,lista_1);
          writeln('elemento eliminato -> ', elemento);
          readln;
            end;
       'n': begin
               write('elemento? ');
          read(elemento);
          write('trovato -> ');
          writeln(cerca_elemento(elemento,lista_1));
          readln;
            end;
       'o': begin
               write('primo elemento -> ');
          writeln(primo_elemento(lista_1));
          readln;
            end;
       'p': begin
               write('ultimo elemento -> ');
          writeln(ultimo_elemento(lista_1));
          readln;
            end;
       'q': begin
               write('elemento? ');
          read(elemento);
          write('posizione -> ');
          writeln(posizione_elemento(elemento,lista_1));
          readln;
            end;
       'r': begin
               write('lunghezza lista -> ');
          writeln(lunghezza_lista(lista_1));
            end;
       's': begin
               write('lista vuota -> ');
          writeln(lista_vuota(lista_1));
            end;
       't': begin
               write('lista -> ');
          stampa_lista(lista_1);
            end;
       'u':  begin   { non funziona }
                write('inserisci elementi della prima lista');
           writeln(' termina con ^Z');
           leggi_da_tastiera(lista_1);
           readln;
           write('inserisci elementi della seconda lista');
           writeln(' termina con ^Z');
           leggi_da_tastiera(lista_2);
           readln;
           stampa_lista(concatena(lista_1,lista_2));
             end;
       'v':  begin
                write('inserisci elementi della prima lista');
           writeln(' termina con ^Z');
           leggi_da_tastiera(lista_1);
           readln;
           write('inserisci elementi della seconda lista');
           writeln(' termina con ^Z');
           leggi_da_tastiera(lista_2);
           readln;
           stampa_lista(fondi(lista_1,lista_2));
             end;
       end;
       readln;
       menu;
       writeln;
       write ('Scegliere l''operazione da compiere: ');
       readln (opzione);
      end;
end.