{ File: invinp3.pas }

program InversioneInput3;

{ Come InversioneInput2.

  In questa soluzione la stringa da stampare al contrario si legge da un file
  testo.  Il nome del file e' una costante stringa.
  La procedura InvertiInput3 riceve anche un parametro file, dal quale
  leggere la stringa.

  Si metta un breakpoint in corrispondenza della istruzione lung := numCar.
  In questo modo se si lancia il programma , questo si fermera`
  dopo aver letto tutti i caratteri (e aver lanciato tutte le chiamate
  ricorsive per invertiInput3 - vedi in CALL STACK) }

const
  NomeFile = 'filedati.dat';

var
  filein    : text;
  lunghezza : integer;

  procedure InvertiInput3 (var f: text; numCar: integer; var lung : integer);
  var
    ch : char;
  begin
    if not eof(f) then
    begin
      read(f, ch);
      if ch <> '.' then
        InvertiInput3(f, numCar + 1, lung)
      else
        lung := numCar;
    write(ch)
    end
  end; { InvertiInput3 }


begin { InversioneInput3 }
  { apertura del file in lettura }
  assign(filein, NomeFile);
  reset(filein);

  { inversione della prima stringa nel file }
  writeln('stampo al contrario la stringa nel file');
  InvertiInput3(filein, 0, lunghezza);
  writeln;
  writeln('la lunghezza della stringa, escluso il ''.'', e'' ', lunghezza:2);
  close(filein);
end. { InversioneInput3 }