{ File: stack.pas }

{ Scopo: esemplificazione dei concetti di
           - pila dei record di attivazione e
           - tempo di vita di una variabile
}

program Main;
var
  s : integer;


  procedure A (p: integer);
  var
    l : integer;

    procedure B(q: integer);
    begin { B }
      { 1b }  writeln('Sono la procedura B. Il mio parametro q vale ', q);
    end;  { B }

  begin { A }
    { 1a }  writeln('Sono la procedura A. Il mio parametro p vale ', p);
    { 2a }  writeln('Inserisci un intero');
    { 3a }  readln(l);
    { 4a }  writeln('Ora chiamo la procedura B, con parametro attuale pari a ',
                    l);
    { 5a }  B(l);
    { 6a }  writeln('Sono di nuovo la procedura A');
  end;  { A }


begin { Main }
  { 1m }  writeln('Sono il programma principale');
  { 2m }  writeln('Inserisci un intero');
  { 3m }  readln(s);
  { 4m }  writeln('Ora chiamo la procedura A, con parametro attuale pari a ',
                  s);
  { 5m }  A(s);
  { 6m }  writeln('Sono di nuovo il programma principale');
end.  { Main }


{ ESEMPIO DI ESECUZIONE

Sono il programma principale
Inserisci un intero
4
Ora chiamo la procedura A, con parametro attuale pari a 4
Sono la procedura A. Il mio parametro p vale 4
Inserisci un intero
9
Ora chiamo la procedura B, con parametro attuale pari a 9
Sono la procedura B. Il mio parametro q vale 9
Sono di nuovo la procedura A
Sono di nuovo il programma principale

}