Oh, sorry, I misunderstood your question.
The Fortran 77 way is this:
subroutine callit (func, arg)
external func
integer func, arg
print *, func(arg)
end subroutine callit
When you call callit and pass your own function as the func argument, callit will call your function.
The Fortran 90 way is this:
subroutine callit (func, arg)
interface
integer function func (arg)
integer, intent(in) : arg
end function func
end interface
integer, intent(in) :: arg
print *, func(arg)
end subroutine callit
This is wordier, true, but it provides more information to the compiler. In particular, if callit is in a module, the compiler can check to make sure that the function you pass has the correct interface.
There's a Fortran 2003 way as well, with the new PROCEDURE declaration, but that's for another day.