/* * 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; }