import shutil

def print_table(*, cursor=None, table=None, title=None, rows=10):
    """Print contents of a table or cursor.
    This is for quick printing of small data sets for diagnostic purposes, may
    not work well with large numbers of columns. Takes a sqlite3 cursor and
    table name as input. Output format and column widths is adjusted to fit
    the current console line length as needed.
    """
    if not cursor or not table:
        raise ValueError("print_table requires cursor and table arguments.")

    if not title:
        title = f"{table} table"

    cursor.execute(f"PRAGMA table_info({table})")
    columns = [row[1] for row in cursor.fetchall()]

    # default column width is the length of each column name
    widths = [len(column) for column in columns]

    # adjust column widths based on the data found in each column
    cursor.execute(f"SELECT * FROM {table}")
    cursor_rows = cursor.fetchall()
    if cursor_rows:
        for ncol, col_width in enumerate(widths):
            max_data_width = max([len(str(row[ncol])) for row in cursor_rows[:rows]])
            widths[ncol] = max(col_width, max_data_width)

    # all output lines will be truncated to console_width characters
    console_width = shutil.get_terminal_size((80, 20))[0] - 1

    # print header rows
    tot_width = min(sum(widths) + len(columns) - 1, console_width)
    title_plus_rowcount = f"{title} ({len(cursor_rows)} rows)"
    print("\n" + f" {title_plus_rowcount} ".center(tot_width, "-"))
    column_headers = " ".join(
        [column.ljust(width) for column, width in zip(columns, widths)]
    )
    print(column_headers[:console_width])
    underlines = " ".join([width * "-" for width in widths])
    print(underlines[:console_width])

    # print data rows
    for row_number, row in enumerate(cursor_rows):
        printed_row = " ".join(
            [str(value).ljust(width) for value, width in zip(row, widths)]
        )
        print(printed_row[:console_width])
        if row_number >= rows - 1:
            break