code: def _ctypes_variables(parameter):
      
      if parameter.dimension is not None and ":" in parameter.dimension:
          #For arrays that provide input (including 'inout'), we pass the output separately
          #through a c-pointer. They will always be input arrays. For pure (out) parameters
          #we use *only* a c-ptr, but it needs intent (inout) since it is created by ctypes.
          if "in" in parameter.direction or parameter.direction == "":
              #We have to get the ctypes-compatible data type for the parameters.
              #stype = _ctypes_dtype(parameter)
              splice = _ctypes_splice(parameter)
              name = parameter.ctypes_parameter()[0]
              if parameter.direction == "(inout)" and not ("allocatable" in parameter.modifiers or
                                                           "pointer" in parameter.modifiers):
                  return (parameter.definition(optionals=False, customdim=splice), False)
              else:
                  return ("{}, intent(in) :: {}({})".format(parameter.strtype, name, splice), False)
      else:
          if parameter.dtype == "logical":
              stype = _ctypes_dtype(parameter)
              suffix = "_c"
              modifiers = None
          elif hasattr(parameter, "parameters"):
              stype = None
              suffix = "_f"
              modifiers = ["intent(out)"]
          else:
              stype = None
              suffix = ""
              modifiers = None
              
          return (parameter.definition(ctype=stype, optionals=False, suffix=suffix,
                                       modifiers=modifiers), False)
docs: Returns the local parameter definition for implementing a Fortran wrapper subroutine
      for this parameter's parent executable.