module DemoModule interface;  { interface part }

export DemoModule = (FooType, SetFoo, GetFoo);

type
  FooType = Integer;

procedure SetFoo (f: FooType);
function  GetFoo: FooType;

end.

module DemoModule implementation;  { implementation part }

import
  StandardInput;
  StandardOutput;

var
  Foo: FooType;

{ Note: the effect is the same as a `forward' directive would have:
  parameter lists and return types are not allowed in the
  declaration of exported routines, according to EP. In GPC, they
  are allowed, but not required. }
procedure SetFoo;
begin
  Foo := f
end;

function GetFoo;
begin
  GetFoo := Foo
end;

to begin do
  begin
    foo := 59;
    WriteLn ('Just an example of a module initializer. See comment below')
  end;

to end do
  begin
    Foo := 0;
    WriteLn ('Goodbye')
  end;

end.
