logical function GDMemVarAttrTrue(var, name, default) result(result)
  use gtdata_memory_types, only: GD_MEM_VARIABLE, GD_MEM_VARIABLE_ENTRY, GD_MEM_ATTR_CHAIN
  use gtdata_memory_internal, only: memtab_lookup
  use dc_string, only: str_to_logical
  use netcdf_f77, only: nf_noerr
  type(GD_MEM_VARIABLE), intent(in):: var
  character(len = *), intent(in):: name
  logical, intent(in), optional:: default
  type(GD_MEM_VARIABLE_ENTRY), pointer:: ent
  type(GD_MEM_ATTR_CHAIN), pointer:: p
  character(10):: s
  integer:: stat, i

  stat = memtab_lookup(var, ent)
  if (stat /= nf_noerr) goto 999
  p => ent%attr
  do
    if (.not. associated(p)) exit
    if (p%name == name) then
      if (associated(p%cbuf)) then
        s = ""
        do, i = 1, min(len(s), size(p%cbuf))
          s(i:i) = p%cbuf(i)
        enddo
        result = str_to_logical(s)
      else
        exit
      endif
      return
    endif
    p => p%next
  enddo
999 continue
  result = .false.
  if (present(default)) result = default
  return
end function GDMemVarAttrTrue
