docs: def make_compound_ctype(self, varname):
          """
          Create a ctypes type that corresponds to a compound type in memory.
          """
  
          # look up the type name
          compoundname = self.get_var_type(varname)
          nfields = self.inq_compound(compoundname)
          # for all the fields look up the type, rank and shape
          fields = []
          for i in range(nfields):
              (fieldname, fieldtype,
               fieldrank, fieldshape) = self.inq_compound_field(compoundname, i)
              assert fieldrank <= 1
              fieldctype = CTYPESMAP[fieldtype]
              if fieldrank == 1:
                  fieldctype = fieldctype * fieldshape[0]
              fields.append((fieldname, fieldctype))
          # create a new structure
  
          class COMPOUND(Structure):
              _fields_ = fields
  
          # if we have a rank 1 array, create an array
          rank = self.get_var_rank(varname)
          assert rank <= 1, "we can't handle >=2 dimensional compounds yet"
          if rank == 1:
              shape = self.get_var_shape(varname)
              valtype = POINTER(ARRAY(COMPOUND, shape[0]))
          else:
              valtype = POINTER(COMPOUND)
          # return the custom type
          return valtype