/*
* write data
*
* write(type1, type2, type3, basetime, member, validtime, plane, element, data)
* arguments:
* type1, type2, type3, member, plane, element: String
* basetime, validtime: Integer (minuits from 00:00 1 Jan 1801)
* data: NArray
* return:
* nil
*/
VALUE
rb_write(VALUE self,
VALUE type1, VALUE type2, VALUE type3,
VALUE basetime, VALUE member, VALUE validtime,
VALUE plane, VALUE element,
VALUE data)
{
GetFullParams;
struct NARRAY *cary;
N_SI4 len;
int code;
char *fmt;
if (!IsNArray(data))
rb_raise(rb_eArgError, "data must be NArray");
if (NA_RANK(data) != 2)
rb_raise(rb_eArgError, "rank of data must be 2");
GetNArray(data, cary);
len = NA_TOTAL(data);
fmt = natype_to_nusfmt(NA_TYPE(data));
code = nusdas_write(ctype1, ctype2, ctype3,
&cbasetime, cmember, &cvalidtime,
cplane, celement,
cary->ptr, fmt, &len);
if (code == len)
return Qtrue;
else if (code > 0)
rb_raise(rb_eRuntimeError, "only %d/%d data were written", code, len);
else if (code == -1)
rb_raise(rb_eRuntimeError, "either member, plane, or element is invalid");
else if (code == -2)
rb_raise(rb_eRuntimeError, "writing is inhibited");
else if (code == -3)
rb_raise(rb_eRuntimeError, "data is too short");
else if (code == -4)
rb_raise(rb_eRuntimeError, "narray type is not adapted");
else if (code == -5)
rb_raise(rb_eRuntimeError, "data record length exceeded the fixd record length");
else if (code == -6)
rb_raise(rb_eRuntimeError, "the missing method and RLEN comprssion cannot be used togeter");
else if (code == -7)
rb_raise(rb_eRuntimeError, "encode error");
return Qnil;
}