    /*
     *  call-seq:
     *     RangeFilter.new(field, options = {}) -> range_query
     *
     *  Create a new RangeFilter on field +field+. There are two ways to build a
     *  range filter. With the old-style options; +:lower+, +:upper+,
     *  +:include_lower+ and +:include_upper+ or the new style options; +:<+,
     *  +:<=+, +:>+ and +:>=+. The options' names should speak for themselves.
     *  In the old-style options, limits are inclusive by default.
     *
     *  == Examples
     *
     *    f = RangeFilter.new(:date, :lower => "200501", :include_lower => false)
     *    # is equivalent to
     *    f = RangeFilter.new(:date, :< => "200501")
     *    # is equivalent to
     *    f = RangeFilter.new(:date, :lower_exclusive => "200501")
     *
     *    f = RangeFilter.new(:date, :lower => "200501", :upper => 200502)
     *    # is equivalent to
     *    f = RangeFilter.new(:date, :>= => "200501", :<= => 200502)
     */
    static VALUE
    frb_rf_init(VALUE self, VALUE rfield, VALUE roptions)
    {
        Filter *f;
        char *lterm = NULL;
        char *uterm = NULL;
        bool include_lower = false;
        bool include_upper = false;

        get_range_params(roptions, &lterm, &uterm, &include_lower, &include_upper);
        f = rfilt_new(frb_field(rfield), lterm, uterm,
                      include_lower, include_upper);
        Frt_Wrap_Struct(self, NULL, &frb_f_free, f);
        object_add(f, self);
        return self;
    }