]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Initial revision
authorGuido van Rossum <guido@python.org>
Mon, 10 Aug 1992 10:48:14 +0000 (10:48 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 10 Aug 1992 10:48:14 +0000 (10:48 +0000)
Demo/sockets/ChangeLog [new file with mode: 0755]
Demo/threads/README [new file with mode: 0644]
Demo/threads/telnet.py [new file with mode: 0644]
Demo/threads/wpi.py [new file with mode: 0644]

diff --git a/Demo/sockets/ChangeLog b/Demo/sockets/ChangeLog
new file mode 100755 (executable)
index 0000000..6b86266
--- /dev/null
@@ -0,0 +1,9 @@
+Mon Aug 10 12:45:43 1992  Guido van Rossum  (guido@voorn.cwi.nl)
+
+* README: added broadcast.py, ftp.py, radio.py
+
+-------------------------------------------------------------------------------
+^^^ Log entries after release of 0.9.6 ^^^
+-------------------------------------------------------------------------------
+
+
diff --git a/Demo/threads/README b/Demo/threads/README
new file mode 100644 (file)
index 0000000..9c6d30a
--- /dev/null
@@ -0,0 +1,5 @@
+This directory contains some demonstrations of the thread module.
+They are mostly "proof of concept" type applications:
+
+telnet.py      Version of ../sockets/telnet.py using threads.
+wpi.py         Version of ../scripts/pi.py using threads and stdwin.
diff --git a/Demo/threads/telnet.py b/Demo/threads/telnet.py
new file mode 100644 (file)
index 0000000..e5101eb
--- /dev/null
@@ -0,0 +1,110 @@
+# Minimal interface to the Internet telnet protocol.
+#
+# *** modified to use threads ***
+#
+# It refuses all telnet options and does not recognize any of the other
+# telnet commands, but can still be used to connect in line-by-line mode.
+# It's also useful to play with a number of other services,
+# like time, finger, smtp and even ftp.
+#
+# Usage: telnet host [port]
+#
+# The port may be a service name or a decimal port number;
+# it defaults to 'telnet'.
+
+
+import sys, os, time
+from socket import *
+import thread
+
+BUFSIZE = 8*1024
+
+# Telnet protocol characters
+
+IAC  = chr(255)        # Interpret as command
+DONT = chr(254)
+DO   = chr(253)
+WONT = chr(252)
+WILL = chr(251)
+
+def main():
+       host = sys.argv[1]
+       try:
+               hostaddr = gethostbyname(host)
+       except error:
+               sys.stderr.write(sys.argv[1] + ': bad host name\n')
+               sys.exit(2)
+       #
+       if len(sys.argv) > 2:
+               servname = sys.argv[2]
+       else:
+               servname = 'telnet'
+       #
+       if '0' <= servname[:1] <= '9':
+               port = eval(servname)
+       else:
+               try:
+                       port = getservbyname(servname, 'tcp')
+               except error:
+                       sys.stderr.write(servname + ': bad tcp service name\n')
+                       sys.exit(2)
+       #
+       s = socket(AF_INET, SOCK_STREAM)
+       #
+       try:
+               s.connect(host, port)
+       except error, msg:
+               sys.stderr.write('connect failed: ' + `msg` + '\n')
+               sys.exit(1)
+       #
+       thread.start_new(child, (s,))
+       parent(s)
+
+def parent(s):
+       # read socket, write stdout
+       iac = 0         # Interpret next char as command
+       opt = ''        # Interpret next char as option
+       while 1:
+               data, dummy = s.recvfrom(BUFSIZE)
+               if not data:
+                       # EOF -- exit
+                       sys.stderr.write( '(Closed by remote host)\n')
+                       thread.exit_prog(1)
+               cleandata = ''
+               for c in data:
+                       if opt:
+                               print ord(c)
+                               print '(replying: ' + `opt+c` + ')'
+                               s.send(opt + c)
+                               opt = ''
+                       elif iac:
+                               iac = 0
+                               if c == IAC:
+                                       cleandata = cleandata + c
+                               elif c in (DO, DONT):
+                                       if c == DO: print '(DO)',
+                                       else: print '(DONT)',
+                                       opt = IAC + WONT
+                               elif c in (WILL, WONT):
+                                       if c == WILL: print '(WILL)',
+                                       else: print '(WONT)',
+                                       opt = IAC + DONT
+                               else:
+                                       print '(command)', ord(c)
+                       elif c == IAC:
+                               iac = 1
+                               print '(IAC)',
+                       else:
+                               cleandata = cleandata + c
+               sys.stdout.write(cleandata)
+               sys.stdout.flush()
+##             print 'Out:', `cleandata`
+
+def child(s):
+       # read stdin, write socket
+       while 1:
+               line = sys.stdin.readline()
+##             print 'Got:', `line`
+               s.send(line)
+
+main()
diff --git a/Demo/threads/wpi.py b/Demo/threads/wpi.py
new file mode 100644 (file)
index 0000000..e408d21
--- /dev/null
@@ -0,0 +1,74 @@
+# Display digits of pi in a window, calculating in a separate thread.
+# Compare ../scripts/pi.py.
+
+import time
+import thread
+import stdwin
+from stdwinevents import *
+
+digits = []
+
+def worker():
+       k, a, b, a1, b1 = 2l, 4l, 1l, 12l, 4l
+       while 1:
+               # Next approximation
+               p, q, k = k*k, 2l*k+1l, k+1l
+               a, b, a1, b1 = a1, b1, p*a+q*a1, p*b+q*b1
+               # Print common digits
+               d, d1 = a/b, a1/b1
+               #print a, b, a1, b1
+               while d == d1:
+                       digits.append(`int(d)`)
+                       a, a1 = 10l*(a%b), 10l*(a1%b1)
+                       d, d1 = a/b, a1/b1
+
+def main():
+       digits_seen = 0
+       thread.start_new_thread(worker, ())
+       tw = stdwin.textwidth('0 ')
+       lh = stdwin.lineheight()
+       stdwin.setdefwinsize(20 * tw, 20 * lh)
+       win = stdwin.open('digits of pi')
+       options = win.menucreate('Options')
+       options.additem('Auto scroll')
+       autoscroll = 1
+       options.check(0, autoscroll)
+       while 1:
+               win.settimer(1)
+               type, w, detail = stdwin.getevent()
+               if type == WE_CLOSE:
+                       thread.exit_prog(0)
+               elif type == WE_DRAW:
+                       (left, top), (right, bottom) = detail
+                       digits_seen = len(digits)
+                       d = win.begindrawing()
+                       for i in range(digits_seen):
+                               h = (i % 20) * tw
+                               v = (i / 20) * lh
+                               if top-lh < v < bottom:
+                                       d.text((h, v), digits[i])
+                       d.close()
+               elif type == WE_TIMER:
+                       n = len(digits)
+                       if n > digits_seen:
+                               win.settitle(`n` + ' digits of pi')
+                               d = win.begindrawing()
+                               for i in range(digits_seen, n):
+                                       h = (i % 20) * tw
+                                       v = (i / 20) * lh
+                                       d.text((h, v), digits[i])
+                               d.close()
+                               digits_seen = n
+                               height = (v + 20*lh) / (20*lh) * (20*lh)
+                               win.setdocsize(0, height)
+                               if autoscroll:
+                                       win.show((0, v), (h+tw, v+lh))
+               elif type == WE_MENU:
+                       menu, item = detail
+                       if menu == options:
+                               if item == 0:
+                                       autoscroll = (not autoscroll)
+                                       options.check(0, autoscroll)
+                                       
+
+main()