'Move the pen to the point end, thereby drawing a line
if pen is down. All other methods for turtle movement depend
on this one.'

def _goto(self, end):

    go_modes = (self._drawing, self._pencolor, self._pensize, isinstance(self._fillpath, list))
    screen = self.screen
    undo_entry = ('go', self._position, end, go_modes, (self.currentLineItem, self.currentLine[:], screen._pointlist(self.currentLineItem), self.items[:]))
    if self.undobuffer:
        self.undobuffer.push(undo_entry)
    start = self._position
    if (self._speed and (screen._tracing == 1)):
        diff = (end - start)
        diffsq = (((diff[0] * screen.xscale) ** 2) + ((diff[1] * screen.yscale) ** 2))
        nhops = (1 + int(((diffsq ** 0.5) / ((3 * (1.1 ** self._speed)) * self._speed))))
        delta = (diff * (1.0 / nhops))
        for n in range(1, nhops):
            if (n == 1):
                top = True
            else:
                top = False
            self._position = (start + (delta * n))
            if self._drawing:
                screen._drawline(self.drawingLineItem, (start, self._position), self._pencolor, self._pensize, top)
            self._update()
        if self._drawing:
            screen._drawline(self.drawingLineItem, ((0, 0), (0, 0)), fill='', width=self._pensize)
    if self._drawing:
        self.currentLine.append(end)
    if isinstance(self._fillpath, list):
        self._fillpath.append(end)
    self._position = end
    if self._creatingPoly:
        self._poly.append(end)
    if (len(self.currentLine) > 42):
        self._newLine()
    self._update()
