{ File: scope2.pas }

{ Scopo: esemplificare le regole di visibilita' in PASCAL }

program A;

var
  x : integer;

  procedure B;
  var
    x : char;

    procedure C; { procedura locale a B }
    var
      x : real;
    begin { C }
      { SONO VISIBILI:
        - x : real    - variabile locale
        - B, C        - procedure non-locali
        - NIENT'ALTRO
        NOTA: la procedura D non e` visibile perche` non ancora dichiarata
      }
    end; { C }

  begin { B }
    { SONO VISIBILI:
      - x : char      - variabile locale
      - C             - procedura locale
      - B             - procedura non-locale
      - NIENT'ALTRO
      NOTA: la procedura D non e` visibile perche` non ancora dichiarata
    }
  end; { B }

  procedure D;
  const
    x = 'a';

    function C : integer; { funzione locale a D }
    const
      x = 10;
    begin { C }
      { SONO VISIBILI:
        - x : integer - costante locale
        - C :integer  - funzione non locale
        - B, D        - procedure non-locali
        - NIENT'ALTRO
        NOTA: la procedura B e` visibile perche` gia` dichiarata
      }
    end; { C }

  begin { D }
    { SONO VISIBILI:
      - x : char      - costante locale
      - C : integer   - funzione locale
      - B, D          - procedure non-locali
      - NIENT'ALTRO
      NOTA: la procedura B e` visibile perche` gia` dichiarata
    }
  end; { D }

begin { A }
  { SONO VISIBILI:
    - x : integer     - variabile locale (globale)
    - B, D            - procedure locali
    - NIENT'ALTRO
  }
end. { A }