/*
* inquire list of validtime
*
* inq_nrdvtime(type1, type2, type3, basetime=-1, pflag=false)
* arguments:
* type1, type2, type3: String
* basetime: Integer (minuits from 00:00 1 Jan 1801) if basetime=-1, returns validtimes for all basetime
* pflag: true or false, (if true, informations are printed out)
* return:
* vtlist: Array
*/
VALUE
rb_inq_nrdvtime(int argc, VALUE *argv, VALUE self)
{
VALUE type1, type2, type3;
VALUE basetime;
VALUE pflag;
VALUE vtlist;
N_SI4 *cvtlist, cvtlistsize;
N_SI4 cbasetime;
N_SI4 cpflag;
N_SI4 code;
int i;
rb_scan_args(argc, argv, "32", &type1, &type2, &type3, &basetime, &pflag);
GetTypes;
if (basetime==Qnil)
cbasetime = -1;
else
cbasetime = get_ctime(basetime);
cpflag = (pflag==Qtrue ? 1 : 0) ;
cvtlistsize = 1;
cvtlist = xmalloc(4);
code = nusdas_inq_nrdvtime(ctype1, ctype2, ctype3,
cvtlist, &cvtlistsize,
&cbasetime, cpflag);
if ( code == 1 )
return INT2NUM( (int)(cvtlist[0]) );
else if ( code < 0 )
rb_raise(rb_eRuntimeError, "failed");
free(cvtlist);
cvtlistsize = code;
cvtlist = xmalloc(4*cvtlistsize);
code = nusdas_inq_nrdvtime(ctype1, ctype2, ctype3,
cvtlist, &cvtlistsize,
&cbasetime, cpflag);
if (code != cvtlistsize)
rb_raise(rb_eRuntimeError, "bug");
vtlist = rb_ary_new();
for (i=0;i<cvtlistsize;i++)
rb_ary_push(vtlist, INT2NUM((int)(cvtlist[i])));
return vtlist;
}