/*
 * read data
 *
 * read(type1, type2, type3, basetime, member, validtime, plane, element)
 *  arguments:
 *   type1, type2, type3, member, plane, element: String
 *   basetime, validtime: Integer (minuits from 00:00 1 Jan 1980)
 *  return:
 *   NArray
 *
 * e.g.
 * NuSDaS.read('_GSMGSLY', 'AASV', 'STD1', 108834840, ' ', 108835200, 'SURF', 'TSC')
 */
VALUE
rb_read(VALUE self,
        VALUE type1, VALUE type2, VALUE type3,
        VALUE basetime, VALUE member, VALUE validtime,
        VALUE plane, VALUE element,
        VALUE fmt)
{
  GetFullParams;
  GetFmt;

  int shape[2];
  N_SI4 len;
  int code;

  get_shape(ctype1, ctype2, ctype3,
           cbasetime, cmember, cvalidtime,
           cplane, celement,
           shape);
  CreateNArray(cfmt, 2, shape);

  len = shape[0]*shape[1];
  code = nusdas_read(ctype1, ctype2, ctype3,
                     &cbasetime, cmember, &cvalidtime,
                     cplane, celement,
                     cary->ptr, cfmt, &len);

  if (code == len)
    return ary;
  else if (code > 0)
    rb_raise(rb_eRuntimeError, "only %d/%d data were read", code, len);
  else if (code == 0)
    rb_raise(rb_eRuntimeError, "data have not written");
  else if (code == -2)
    rb_raise(rb_eRuntimeError, "data are inhibited");
  else if (code == -4)
    rb_raise(rb_eRuntimeError, "bug");
  else if (code == -5)
    rb_raise(rb_eRuntimeError, "format is invalid");
  else
    rb_raise(rb_eRuntimeError, "failed: code=%d", code);

  return Qnil;
}