{ File: invinp.pas }

program InversioneInput;

{ Programma che lancia la procedura InvertiInput

  la procedura esegue la stampa invertita dell'input dato da tastiera
  (una stringa terminata da '.'; anche '.' viene stampato).
  L'unico modo per distinguere tra le varie attivazioni ricorsive di
  InvertiInput, e' di vedere il contenuto del carattere ch, che cambia
  nelle diverse attivazioni di InvertiInput:con input TOPI.

  Si vedra' che ch vale
    T (durante la prima attivazione),
    O (durante la seconda),
    P (durante la terza),
    I (durante la quarta),
    . (durante la quinta);

  La quinta attivazione non esegue ulteriori chiamate ricorsive quindi stampa
  '.' e termina.
  La quarta attivazione torna in esecuzione, stampa 'I' (cioe' il valore di ch
  nel suo ambiente locale) e termina.
  La terza attivazione stampa 'P' e termina ...

  Come cambia il carattere locale ch nelle varie attivazioni si vede
  con un'opportuna WATCH sull'espressione "ch". }

  procedure InvertiInput;
  var
    ch : char;
  begin
    read(ch);
    if ch <> '.' then
      InvertiInput;
    write(ch)
  end; { InvertiInput }


begin { InversioneInput }
  writeln('stringa terminata da ''.'', prego:');
  InvertiInput
end. { InversioneInput }