If SLOWDRAW is enabled and FD is run in NOYIELD mode, the turtle movement is slow, but you don't see the turtle move along with the slow drawing--it only appears after the the drawing is finished.
This affects:
1) Code that is run after NOYIELD
2) SETTIMER events with an ID from 1-16
3) KEYBOARDON events
4) MOUSEON events
This came up as a question on the Logo forums. Someone used SLOWDRAW within a KEYBOARDON callback thought that his KEYBOARDON wasn't getting called because he didn't see the turtle move.
The core of the problems is that, in NOYIELD mode, FMSLogo doesn't read messages from the Windows message queue, including the WM_PAINT messages that tell it to redraw parts of the screen. For performance, FMSLogo does the line drawing when FORWARD is executed, but the turtle isn't drawn until FMSLogo receives a WM_PAINT event. Since FMSLogo isn't reading windows messages, it won't be told to draw the turtle until after the NOYIELD code stops running. Adding calls to EVENTCHECK to SLOWDRAW, should get FMSLogo to process WM_PAINT messages, and therefore draw the turtle, but it would also process the other messages, such as WM_TIMER, WM_KEYDOWN, or WM_MOUSE that could change the behavior of existing logo programs.
It might also be possible to change the semantics of NOYIELD to include processing "important" messages, such as WM_PAINT, WM_CLOSE, and button pushes on the Halt button.
Until the bug is fixed, Logo progammers can work around this by switching back to YIELD mode.
How Reproducible:
Every Time
Steps to Reproduce:
SLOWDRAW 10 SETTIMER 1 1000 [FD 50 RT 90]
What Happens:
The turtle draws a square over the course of four seconds, but the turtle jumps from corner to corner.
Expected Result:
The turtle draws a square over the course of four seconds and you see the turtle slowly walk along the perimeter.