def line(self, x0, y0, x1, y1, c='*'):
        r"""Draws a line

        Who would have thought this would be so complicated?  Thanks
        again Wikipedia_ <3

        .. _Wikipedia: http://en.wikipedia.org/wiki/Bresenham's_line_algorithm
        """
        steep = abs(y1 - y0) > abs(x1 - x0)
        if steep:
            (x0, y0) = (y0, x0)
            (x1, y1) = (y1, x1)
        if x0 > x1:
            (x0, x1) = (x1, x0)
            (y0, y1) = (y1, y0)
        deltax = x1 - x0
        deltay = abs(y1 - y0)
        error = deltax / 2
        y = y0
        if y0 < y1:
            ystep = 1
        else:
            ystep = -1
        for x in range(x0, x1 - 1):
            if steep:
                self[y, x] = c
            else:
                self[x, y] = c
            error = error - deltay
            if error < 0:
                y = y + ystep
                error = error + deltax
r"""Draws a line

        Who would have thought this would be so complicated?  Thanks
        again Wikipedia_ <3

        .. _Wikipedia: http://en.wikipedia.org/wiki/Bresenham's_line_algorithm