xref: /original-bsd/old/dbx/tests/pc/fproc.p (revision 08eb28af)
1program fproc(output);
2    var
3    i :integer;
4
5    procedure print(function frtn :integer);
6	begin
7	    write(frtn:3,'   formal routine =');
8	end;
9
10    procedure lvl1(function form: integer);
11	label	1;
12	var
13	loc :integer;
14
15	function eval :integer;
16	    begin
17		if loc = 8 then begin
18			writeln(' non-local jump');
19			goto 1;
20		end;
21		eval := loc;
22	    end;
23
24    begin
25	loc := i;
26	i := i - 1;
27	if (loc = 4) or (loc = 8) then
28		lvl1(eval)
29	else if loc > 0 then
30		lvl1(form);
311:	write('Stack frame:',loc:3,'   formal print =');
32	print(form);
33	writeln(form:3);
34    end;
35
36    function geval :integer;
37	begin
38	    geval := i;
39	end;
40
41    begin
42	writeln('This should print levels 0-3, with formal values of 4.');
43	writeln('Level 4 should jump to level 8.');
44	writeln('Finally levels 8-10 should print with formal values of -1.');
45	i := 10;
46	lvl1(geval);
47    end.
48