* More changes due to stricter argument passing rules

* Fixed calendar.py, mimetools.py, whrandom.py to cope with time.time()
  returning a floating point number.  (And fix old bug in calendar)
* Add recursion level to mainloop.mainloop(), to make it reentrant.
This commit is contained in:
Guido van Rossum 1993-01-04 09:16:51 +00:00
parent a2b7f40513
commit fea2af1e9b
18 changed files with 113 additions and 78 deletions

View file

@ -4,6 +4,9 @@
# - have a 'dispatch' function as a window member
# XXX This is UNIX specific! For the Mac we need to use a simpler version!
import stdwin, stdwinq
from stdwinevents import *
@ -123,23 +126,38 @@ def do_select():
# Python's stdwin.getevent() turns WE_COMMAND/WC_CANCEL events
# into KeyboardInterrupt exceptions; these are turned back in events.
#
recursion_level = 0 # Hack to make it reentrant
def mainloop():
stdwin_select_handler() # Process events already in stdwin queue
fd = stdwin.fileno()
while 1:
if windows:
registerfd(fd, 'r', stdwin_select_handler)
try:
while windows:
global recursion_level
recursion_level = recursion_level + 1
try:
stdwin_select_handler() # Process events already in queue
fd = stdwin.fileno()
while 1:
if windows:
if recursion_level == 1:
registerfd(fd, 'r', stdwin_select_handler)
try:
while windows:
do_select()
stdwin_select_handler()
finally:
if recursion_level == 1:
unregisterfd(fd)
elif fdlist:
while fdlist and not windows:
do_select()
stdwin_select_handler()
finally:
unregisterfd(fd)
elif fdlist:
while fdlist and not windows:
do_select()
else:
break
else:
break
finally:
recursion_level = recursion_level - 1
# Check for events without ever blocking
#
def check():
stdwin_select_handler()
# XXX Should check for socket stuff as well
# Handle stdwin events until none are left