begin comment testing of formal procedures and non local accesses; procedure main; begin integer a, b, c; procedure p (b, q, r, s); value b; boolean b; procedure q; procedure r; procedure s; begin if b then q (s) else r (s) end; procedure f1 (p1); procedure p1; p1 (a, b, c); procedure f2 (p1); procedure p1; p1 (a, b); procedure a1 (a, b, c); integer a, b, c; a ≔ b + c; procedure a2 (a, b); integer a, b; a ≔ b; procedure mainer; begin procedure go to (L); value L; label L; goto L; procedure dummy (p, L); procedure p; label L; p(L); procedure doit; begin switch L ≔ L1, if b then L2 else L1; dummy (go to, L [n]); end; integer n; boolean b; n ≔ 2; b ≔ true; doit; L1: outstring (1, “Incorrect\n”); goto L end; L end: end; b ≔ 1; c ≔ 2; comment now two calls; outstring (1, “Example 23: switches, formals a̲n̲d̲ non local access\n”); p (true, f1, f2, a1); outstring (1, “ after the call t̲o̲ a1 ”); outinteger (1, a); p (false, f1, f2, a2); outstring (1, “ after the call t̲o̲ a2 ”); outinteger (1, a); mainer; L2: outstring(1, “Correct\n”); end; main; end