def rectAreaByOutline(area, bit_diameter, debug=False):
    """ Required arguments: area (as (x=length, y=width), bit_diameter.
    Assumes that the bit is already in the origin corner at required depth of cut.
    This version just cuts progressively smaller rectangles.
    For fastest progress, orient the largest area dimension with the fastest machine axis.
    """
    length, width = area
    if bit_diameter > length or bit_diameter > width:
        raise ValueError("Bit is too large to cut specified area")
    # magic number 0.5 is the pass-to-pass overlap... not sure that I'll enforce it
    min_overlap = 0.5
    min_passes = min(math.ceil(length / bit_diameter),
                     math.ceil(width / bit_diameter))
    min_passes += min_passes % 2

    x_overlap = max(min_overlap, (((min_passes * bit_diameter) - length) /
                                  (min_passes - 1)))
    y_overlap = max(min_overlap,
                    (((min_passes * bit_diameter) - width) / (min_passes - 1)))

    x_step = bit_diameter - x_overlap
    y_step = bit_diameter - y_overlap

    file_text = G.set_INCR_mode()
    current_x = 0
    current_y = 0

    if debug:
        file_text += "; length: " + str(length) + "\n"
        file_text += "; width: " + str(width) + "\n"
        file_text += "; bit_diameter: " + str(bit_diameter) + "\n"
        file_text += "; min_passes: " + str(min_passes) + "\n"
        file_text += "; x_overlap: " + str(x_overlap) + "\n"
        file_text += "; y_overlap: " + str(y_overlap) + "\n"
        file_text += "; x_step: " + str(x_step) + "\n"
        file_text += "; y_step: " + str(y_step) + "\n"

    file_text += _rectOutline(length, width, bit_diameter)
    min_passes -= 2
    while min_passes > 0:
        file_text += G.G1_XY((x_step, y_step))
        current_x += x_step
        current_y += y_step
        length -= (2 * x_step)
        width -= (2 * y_step)
        file_text += _rectOutline(length, width, bit_diameter)
        min_passes -= 2
    file_text += G.G0_XY((-current_x, -current_y))
    file_text += G.set_ABS_mode()
    return file_text