/*
* inquire list of basetimes
*
* inq_nrdbtime(type1, type2, type3, pflag=false)
* arguments:
* type1, type2, type3: String
* pflag: true or false, (if true, informations are printed out)
* return:
* btlist: Array
*/
VALUE
rb_inq_nrdbtime(int argc, VALUE *argv, VALUE self)
{
VALUE type1, type2, type3;
VALUE pflag;
VALUE btlist;
N_SI4 *cbtlist, cbtlistsize;
N_SI4 cpflag;
N_SI4 code;
int i;
rb_scan_args(argc, argv, "31", &type1, &type2, &type3, &pflag);
GetTypes;
cpflag = (pflag==Qtrue ? 1 : 0) ;
cbtlistsize = 1;
cbtlist = xmalloc(4);
code = nusdas_inq_nrdbtime(ctype1, ctype2, ctype3,
cbtlist, &cbtlistsize, cpflag);
if ( code == 1 )
return rb_ary_new3(1, INT2NUM( (int)(cbtlist[0]) ) );
else if ( code == -1 )
rb_raise(rb_eRuntimeError, "file IO error");
else if ( code == -2 )
rb_raise(rb_eRuntimeError, "control part does not exit");
else if ( code == -3 )
rb_raise(rb_eRuntimeError, "record length is invalid");
else if ( code == -4 )
rb_raise(rb_eRuntimeError, "failed to open file or directory");
else if ( code < 0 )
rb_raise(rb_eRuntimeError, "failed");
free(cbtlist);
cbtlistsize = code;
cbtlist = xmalloc(4*cbtlistsize);
code = nusdas_inq_nrdbtime(ctype1, ctype2, ctype3,
cbtlist, &cbtlistsize, cpflag);
if (code != cbtlistsize)
rb_raise(rb_eRuntimeError, "bug");
btlist = rb_ary_new();
for (i=0;i<cbtlistsize;i++)
rb_ary_push(btlist, INT2NUM((int)(cbtlist[i])));
return btlist;
}