def _call_multi_fortran_z_attr(self, names, data_types, num_elems,<EOL>entry_nums, attr_nums, var_names,<EOL>input_type_code, func, data_offset=None):
<EOL>idx, = np.where(data_types == input_type_code)<EOL>if len(idx) > <NUM_LIT:0>:<EOL><INDENT>max_num = num_elems[idx].max()<EOL>sub_num_elems = num_elems[idx]<EOL>sub_names = np.array(names)[idx]<EOL>sub_var_names = np.array(var_names)[idx]<EOL>sub_entry_nums = entry_nums[idx]<EOL>sub_attr_nums = attr_nums[idx]<EOL>status, data = func(self.fname, sub_attr_nums, sub_entry_nums,<EOL>len(sub_attr_nums), max_num, len(self.fname))<EOL>if (status == <NUM_LIT:0>).all():<EOL><INDENT>if data_offset is not None:<EOL><INDENT>data = data.astype(int)<EOL>idx, idy, = np.where(data < <NUM_LIT:0>)<EOL>data[idx, idy] += data_offset<EOL><DEDENT>self._process_return_multi_z_attr(data, sub_names,<EOL>sub_var_names, sub_num_elems)<EOL><DEDENT>else:<EOL><INDENT>idx, = np.where(status != <NUM_LIT:0>)<EOL>raise IOError(fortran_cdf.statusreporter(status[idx][<NUM_LIT:0>]))<EOL><DEDENT><DEDENT>
Calls Fortran function that reads attribute data.

        data_offset translates unsigned into signed.
        If number read in is negative, offset added.