annotate Demo/threads/wpi.py @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents a3eb25259329
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
937
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 # Display digits of pi in a window, calculating in a separate thread.
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 # Compare ../scripts/pi.py.
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
1635
a3eb25259329 Don't use thread.exit_prog(); set a global variable to stop other
Guido van Rossum <guido@python.org>
parents: 937
diff changeset
4 import sys
937
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 import time
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 import thread
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 import stdwin
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 from stdwinevents import *
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9
1635
a3eb25259329 Don't use thread.exit_prog(); set a global variable to stop other
Guido van Rossum <guido@python.org>
parents: 937
diff changeset
10 ok = 1
a3eb25259329 Don't use thread.exit_prog(); set a global variable to stop other
Guido van Rossum <guido@python.org>
parents: 937
diff changeset
11
937
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 digits = []
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
13
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 def worker():
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 k, a, b, a1, b1 = 2l, 4l, 1l, 12l, 4l
1635
a3eb25259329 Don't use thread.exit_prog(); set a global variable to stop other
Guido van Rossum <guido@python.org>
parents: 937
diff changeset
16 while ok:
937
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 # Next approximation
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 p, q, k = k*k, 2l*k+1l, k+1l
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 a, b, a1, b1 = a1, b1, p*a+q*a1, p*b+q*b1
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 # Print common digits
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 d, d1 = a/b, a1/b1
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 #print a, b, a1, b1
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 while d == d1:
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 digits.append(`int(d)`)
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 a, a1 = 10l*(a%b), 10l*(a1%b1)
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 d, d1 = a/b, a1/b1
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 def main():
1635
a3eb25259329 Don't use thread.exit_prog(); set a global variable to stop other
Guido van Rossum <guido@python.org>
parents: 937
diff changeset
29 global ok
937
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 digits_seen = 0
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 thread.start_new_thread(worker, ())
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 tw = stdwin.textwidth('0 ')
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 lh = stdwin.lineheight()
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 stdwin.setdefwinsize(20 * tw, 20 * lh)
1635
a3eb25259329 Don't use thread.exit_prog(); set a global variable to stop other
Guido van Rossum <guido@python.org>
parents: 937
diff changeset
35 stdwin.setdefscrollbars(0, 1)
937
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 win = stdwin.open('digits of pi')
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 options = win.menucreate('Options')
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 options.additem('Auto scroll')
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 autoscroll = 1
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 options.check(0, autoscroll)
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 while 1:
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 win.settimer(1)
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 type, w, detail = stdwin.getevent()
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 if type == WE_CLOSE:
1635
a3eb25259329 Don't use thread.exit_prog(); set a global variable to stop other
Guido van Rossum <guido@python.org>
parents: 937
diff changeset
45 ok = 0
a3eb25259329 Don't use thread.exit_prog(); set a global variable to stop other
Guido van Rossum <guido@python.org>
parents: 937
diff changeset
46 sys.exit(0)
937
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 elif type == WE_DRAW:
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 (left, top), (right, bottom) = detail
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 digits_seen = len(digits)
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 d = win.begindrawing()
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 for i in range(digits_seen):
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 h = (i % 20) * tw
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 v = (i / 20) * lh
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 if top-lh < v < bottom:
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 d.text((h, v), digits[i])
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 d.close()
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 elif type == WE_TIMER:
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 n = len(digits)
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 if n > digits_seen:
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 win.settitle(`n` + ' digits of pi')
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 d = win.begindrawing()
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 for i in range(digits_seen, n):
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 h = (i % 20) * tw
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 v = (i / 20) * lh
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 d.text((h, v), digits[i])
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 d.close()
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 digits_seen = n
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 height = (v + 20*lh) / (20*lh) * (20*lh)
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 win.setdocsize(0, height)
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 if autoscroll:
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 win.show((0, v), (h+tw, v+lh))
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 elif type == WE_MENU:
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 menu, item = detail
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 if menu == options:
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 if item == 0:
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 autoscroll = (not autoscroll)
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 options.check(0, autoscroll)
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
78
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
79
58a4cb18f025 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
80 main()