/**
 * call-seq:
 *  MusicBrainz::DiscID.new(device=nil) -> obj
 *
 * Construct a new DiscID object.
 * 
 * As an optional argument the name of the device to read the ID from
 * may be given. If you don't specify a device here you can later read
 * the ID with the read method.
 *
 * Raises:: ArgumentError, TypeError, Exception
 */
VALUE mb_discid_new(int argc, VALUE *argv, VALUE class)
{
        DiscId *disc = discid_new();
        VALUE tdata = Data_Wrap_Struct(class, 0, discid_free, disc);
        VALUE device = Qnil;
        rb_obj_call_init(tdata, 0, 0);
        rb_iv_set(tdata, "@read", Qfalse);
        
        /* Check the number of arguments */
        rb_scan_args(argc, argv, "01", &device);
        
        if (device != Qnil)
                rb_funcall(tdata, rb_intern("read"), 1, device);
        
        return tdata;
}