Current File : /home/mmdealscpanel/yummmdeals.com/phpxN4JXd.tar
tmp/phpxN4JXd000060000007365670150560204650007101 0ustar00PKb1�Z�.����cgi/cgi2.pycnu�[����
Afc@sKdZddlZej�ddlZd�ZedkrGe�ndS(s%CGI test 2 - basic use of cgi module.i����NcCsptj�}dGHH|s dGHnLdGHxD|j�D]6}||j}dGtj|�GdGtj|�GHq2WdS(NsContent-type: text/htmls<h1>No Form Keys</h1>s<h1>Form Keys</h1>s<p>t:(tcgitFieldStoragetkeystvaluetescape(tformtkeyR((s%/usr/lib64/python2.7/Demo/cgi/cgi2.pytmain	s
t__main__(t__doc__tcgitbtenableRRt__name__(((s%/usr/lib64/python2.7/Demo/cgi/cgi2.pyt<module>s
	PKb1�Z�.����cgi/cgi2.pyonu�[����
Afc@sKdZddlZej�ddlZd�ZedkrGe�ndS(s%CGI test 2 - basic use of cgi module.i����NcCsptj�}dGHH|s dGHnLdGHxD|j�D]6}||j}dGtj|�GdGtj|�GHq2WdS(NsContent-type: text/htmls<h1>No Form Keys</h1>s<h1>Form Keys</h1>s<p>t:(tcgitFieldStoragetkeystvaluetescape(tformtkeyR((s%/usr/lib64/python2.7/Demo/cgi/cgi2.pytmain	s
t__main__(t__doc__tcgitbtenableRRt__name__(((s%/usr/lib64/python2.7/Demo/cgi/cgi2.pyt<module>s
	PKb1�ZR�q���
cgi/READMEnu�[���CGI Examples
------------

Here are some example CGI programs.  For a larger example, see
../../Tools/faqwiz/.

cgi0.sh -- A shell script to test your server is configured for CGI
cgi1.py -- A Python script to test your server is configured for CGI
cgi2.py -- A Python script showing how to parse a form
cgi3.py -- A Python script for driving an arbitrary CGI application
wiki.py -- Sample CGI application: a minimal Wiki implementation
PKb1�Z�6�f��cgi/cgi3.pynuȯ��#! /usr/bin/python2.7

"""CGI test 3 (persistent data)."""

import cgitb; cgitb.enable()

from wiki import main

if __name__ == "__main__":
    main()
PKb1�Z��4��cgi/cgi2.pynuȯ��#! /usr/bin/python2.7

"""CGI test 2 - basic use of cgi module."""

import cgitb; cgitb.enable()

import cgi

def main():
    form = cgi.FieldStorage()
    print "Content-type: text/html"
    print
    if not form:
        print "<h1>No Form Keys</h1>"
    else:
        print "<h1>Form Keys</h1>"
        for key in form.keys():
            value = form[key].value
            print "<p>", cgi.escape(key), ":", cgi.escape(value)

if __name__ == "__main__":
    main()
PKb1�Z-�h�FFcgi/cgi3.pyonu�[����
Afc@sFdZddlZej�ddlmZedkrBe�ndS(sCGI test 3 (persistent data).i����N(tmaint__main__(t__doc__tcgitbtenabletwikiRt__name__(((s%/usr/lib64/python2.7/Demo/cgi/cgi3.pyt<module>s

PKb1�Z�_���cgi/cgi1.pynuȯ��#! /usr/bin/python2.7

"""CGI test 1 - check server setup."""

# Until you get this to work, your web server isn't set up right or
# your Python isn't set up right.

# If cgi0.sh works but cgi1.py doesn't, check the #! line and the file
# permissions.  The docs for the cgi.py module have debugging tips.

print "Content-type: text/html"
print
print "<h1>Hello world</h1>"
print "<p>This is cgi1.py"
PKb1�Z-�h�FFcgi/cgi3.pycnu�[����
Afc@sFdZddlZej�ddlmZedkrBe�ndS(sCGI test 3 (persistent data).i����N(tmaint__main__(t__doc__tcgitbtenabletwikiRt__name__(((s%/usr/lib64/python2.7/Demo/cgi/cgi3.pyt<module>s

PKb1�Z�-;�cgi/wiki.pyonu�[����
��^c@skdZddlZddlZddlZddlZddlZejZd�Zddd��YZdS(s0Wiki main program.  Imported and run by cgi3.py.i����NcCsotj�}dGHH|jdd�}|jdd�}t|�}t|d|d�p^|j}||�dS(NsContent-type: text/htmltcmdtviewtpaget	FrontPagetcmd_(tcgitFieldStoragetgetvaluetWikiPagetgetattrtNonetcmd_view(tformRRtwikitmethod((s%/usr/lib64/python2.7/Demo/cgi/wiki.pytmainsRcBs�eZej�Zejjej	d�Z
d�Zd�Zd�Z
dd�Zd�Zd�Zd�Zd	�Zdd
�Zd�Zd�Zd
�ZRS(icCs2|j|�std�n||_|j�dS(Nspage name is not a wiki word(t
iswikiwordt
ValueErrortnametload(tselfR((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyt__init__s	cCs�dGt|j|j��GdGHdGHx?|jj�D].}|j�}|sTdGHq4|j|�GHq4WdGHdG|jd|jd�dGH|jdd	d
�dGHdS(Ns<h1>s</h1>s<p>s<hr>teditsEdit this paget;RRsgo to front paget.(tescapet
splitwikiwordRtdatat
splitlinestrstript
formatlinetmklink(RRtline((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyRscCs�g}x�tjd|�D]}}|j|�r}tjj|j|��ra|jd||�}q�|jd||d�}nt|�}|j	|�qWdj
|�S(Ns(\W+)Rtnewt*t(tretsplitRtostpathtisfiletmkfileRRtappendtjoin(RR twordstword((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyR(stChangecCsZdG|G|jGdGHd|jGHd}||jGHdGHd|jGHdGHd|GHd	GHdS(
Ns<h1>s</h1>s <form method="POST" action="%s">s7<textarea cols="70" rows="20" name="text">%s</textarea>s/<input type="hidden" name="cmd" value="create">s,<input type="hidden" name="page" value="%s">s<br>s%<input type="submit" value="%s Page">s</form>(Rt	scripturlR(RRtlabelts((s%/usr/lib64/python2.7/Demo/cgi/wiki.pytcmd_edit5s	cCs�|jdd�j�|_|j�}|rIdGHdGHdGt|�GHnJdGHd}||jd|jGHdGHd	GHd
G|jd|j|j�GHdS(NttextR#s%<h1>I'm sorry.  That didn't work</h1>s8<p>An error occurred while attempting to write the file:s<p>s<head>s/<meta http-equiv="refresh" content="1; URL=%s">s?cmd=view&page=s<h1>OK</h1>s)<p>If nothing happens, please click here:R(RtstripRtstoreRR/RR(RRterrorR1((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyt
cmd_create@scCs|j|dd�dS(NR0tCreate(R2(RR((s%/usr/lib64/python2.7/Demo/cgi/wiki.pytcmd_newQscCstjd|�S(Ns[A-Z][a-z]+([A-Z][a-z]*)+(R$tmatch(RR-((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyRTscCsSg}x=|D]5}|r5|j�r5|jd�n|j|�q
Wdj|�S(Nt R#(tisupperR*R+(RR-tcharstc((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyRWs
cCs2|dkr|j}ntjj|j|d�S(Ns.txt(R
RR&R'R+thomedir(RR((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyR)_scCs'|jd|d|}d||fS(Ns?cmd=s&page=s<a href="%s">%s</a>(R/(RRRR3tlink((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyRdscCsYy2t|j��}|j�j�}|j�Wntk
rKd}nX||_dS(NR#(topenR)treadR4tclosetIOErrorR(RtfR((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyRhs

cCs�|j}yZt|j�d�}|j|�|rT|jd�rT|jd�n|j�dSWntk
r�}dt|�SXdS(Ntws
R#sIOError: %s(RRAR)twritetendswithRCRDtstr(RRREterr((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyR5qs	

N(t__name__t
__module__ttempfilet
gettempdirR?R&R'tbasenametsystargvR/RRRR2R7R9RRR
R)RRR5(((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyRs		
	
							((	t__doc__R&R$RRPRMRRR(((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyt<module>s<		
PKb1�Z���cgi/cgi1.pyonu�[����
Afc@sdZdGHHdGHdGHdS(s CGI test 1 - check server setup.sContent-type: text/htmls<h1>Hello world</h1>s<p>This is cgi1.pyN(t__doc__(((s%/usr/lib64/python2.7/Demo/cgi/cgi1.pyt<module>sPKb1�Z���cgi/cgi1.pycnu�[����
Afc@sdZdGHHdGHdGHdS(s CGI test 1 - check server setup.sContent-type: text/htmls<h1>Hello world</h1>s<p>This is cgi1.pyN(t__doc__(((s%/usr/lib64/python2.7/Demo/cgi/cgi1.pyt<module>sPKb1�Z�-;�cgi/wiki.pycnu�[����
��^c@skdZddlZddlZddlZddlZddlZejZd�Zddd��YZdS(s0Wiki main program.  Imported and run by cgi3.py.i����NcCsotj�}dGHH|jdd�}|jdd�}t|�}t|d|d�p^|j}||�dS(NsContent-type: text/htmltcmdtviewtpaget	FrontPagetcmd_(tcgitFieldStoragetgetvaluetWikiPagetgetattrtNonetcmd_view(tformRRtwikitmethod((s%/usr/lib64/python2.7/Demo/cgi/wiki.pytmainsRcBs�eZej�Zejjej	d�Z
d�Zd�Zd�Z
dd�Zd�Zd�Zd�Zd	�Zdd
�Zd�Zd�Zd
�ZRS(icCs2|j|�std�n||_|j�dS(Nspage name is not a wiki word(t
iswikiwordt
ValueErrortnametload(tselfR((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyt__init__s	cCs�dGt|j|j��GdGHdGHx?|jj�D].}|j�}|sTdGHq4|j|�GHq4WdGHdG|jd|jd�dGH|jdd	d
�dGHdS(Ns<h1>s</h1>s<p>s<hr>teditsEdit this paget;RRsgo to front paget.(tescapet
splitwikiwordRtdatat
splitlinestrstript
formatlinetmklink(RRtline((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyRscCs�g}x�tjd|�D]}}|j|�r}tjj|j|��ra|jd||�}q�|jd||d�}nt|�}|j	|�qWdj
|�S(Ns(\W+)Rtnewt*t(tretsplitRtostpathtisfiletmkfileRRtappendtjoin(RR twordstword((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyR(stChangecCsZdG|G|jGdGHd|jGHd}||jGHdGHd|jGHdGHd|GHd	GHdS(
Ns<h1>s</h1>s <form method="POST" action="%s">s7<textarea cols="70" rows="20" name="text">%s</textarea>s/<input type="hidden" name="cmd" value="create">s,<input type="hidden" name="page" value="%s">s<br>s%<input type="submit" value="%s Page">s</form>(Rt	scripturlR(RRtlabelts((s%/usr/lib64/python2.7/Demo/cgi/wiki.pytcmd_edit5s	cCs�|jdd�j�|_|j�}|rIdGHdGHdGt|�GHnJdGHd}||jd|jGHdGHd	GHd
G|jd|j|j�GHdS(NttextR#s%<h1>I'm sorry.  That didn't work</h1>s8<p>An error occurred while attempting to write the file:s<p>s<head>s/<meta http-equiv="refresh" content="1; URL=%s">s?cmd=view&page=s<h1>OK</h1>s)<p>If nothing happens, please click here:R(RtstripRtstoreRR/RR(RRterrorR1((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyt
cmd_create@scCs|j|dd�dS(NR0tCreate(R2(RR((s%/usr/lib64/python2.7/Demo/cgi/wiki.pytcmd_newQscCstjd|�S(Ns[A-Z][a-z]+([A-Z][a-z]*)+(R$tmatch(RR-((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyRTscCsSg}x=|D]5}|r5|j�r5|jd�n|j|�q
Wdj|�S(Nt R#(tisupperR*R+(RR-tcharstc((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyRWs
cCs2|dkr|j}ntjj|j|d�S(Ns.txt(R
RR&R'R+thomedir(RR((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyR)_scCs'|jd|d|}d||fS(Ns?cmd=s&page=s<a href="%s">%s</a>(R/(RRRR3tlink((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyRdscCsYy2t|j��}|j�j�}|j�Wntk
rKd}nX||_dS(NR#(topenR)treadR4tclosetIOErrorR(RtfR((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyRhs

cCs�|j}yZt|j�d�}|j|�|rT|jd�rT|jd�n|j�dSWntk
r�}dt|�SXdS(Ntws
R#sIOError: %s(RRAR)twritetendswithRCRDtstr(RRREterr((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyR5qs	

N(t__name__t
__module__ttempfilet
gettempdirR?R&R'tbasenametsystargvR/RRRR2R7R9RRR
R)RRR5(((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyRs		
	
							((	t__doc__R&R$RRPRMRRR(((s%/usr/lib64/python2.7/Demo/cgi/wiki.pyt<module>s<		
PKb1�Z�7����cgi/wiki.pynu�[���"""Wiki main program.  Imported and run by cgi3.py."""

import os, re, cgi, sys, tempfile
escape = cgi.escape

def main():
    form = cgi.FieldStorage()
    print "Content-type: text/html"
    print
    cmd = form.getvalue("cmd", "view")
    page = form.getvalue("page", "FrontPage")
    wiki = WikiPage(page)
    method = getattr(wiki, 'cmd_' + cmd, None) or wiki.cmd_view
    method(form)

class WikiPage:

    homedir = tempfile.gettempdir()
    scripturl = os.path.basename(sys.argv[0])

    def __init__(self, name):
        if not self.iswikiword(name):
            raise ValueError, "page name is not a wiki word"
        self.name = name
        self.load()

    def cmd_view(self, form):
        print "<h1>", escape(self.splitwikiword(self.name)), "</h1>"
        print "<p>"
        for line in self.data.splitlines():
            line = line.rstrip()
            if not line:
                print "<p>"
            else:
                print self.formatline(line)
        print "<hr>"
        print "<p>", self.mklink("edit", self.name, "Edit this page") + ";"
        print self.mklink("view", "FrontPage", "go to front page") + "."

    def formatline(self, line):
        words = []
        for word in re.split('(\W+)', line):
            if self.iswikiword(word):
                if os.path.isfile(self.mkfile(word)):
                    word = self.mklink("view", word, word)
                else:
                    word = self.mklink("new", word, word + "*")
            else:
                word = escape(word)
            words.append(word)
        return "".join(words)

    def cmd_edit(self, form, label="Change"):
        print "<h1>", label, self.name, "</h1>"
        print '<form method="POST" action="%s">' % self.scripturl
        s = '<textarea cols="70" rows="20" name="text">%s</textarea>'
        print s % self.data
        print '<input type="hidden" name="cmd" value="create">'
        print '<input type="hidden" name="page" value="%s">' % self.name
        print '<br>'
        print '<input type="submit" value="%s Page">' % label
        print "</form>"

    def cmd_create(self, form):
        self.data = form.getvalue("text", "").strip()
        error = self.store()
        if error:
            print "<h1>I'm sorry.  That didn't work</h1>"
            print "<p>An error occurred while attempting to write the file:"
            print "<p>", escape(error)
        else:
            # Use a redirect directive, to avoid "reload page" problems
            print "<head>"
            s = '<meta http-equiv="refresh" content="1; URL=%s">'
            print s % (self.scripturl + "?cmd=view&page=" + self.name)
            print "<head>"
            print "<h1>OK</h1>"
            print "<p>If nothing happens, please click here:",
            print self.mklink("view", self.name, self.name)

    def cmd_new(self, form):
        self.cmd_edit(form, label="Create")

    def iswikiword(self, word):
        return re.match("[A-Z][a-z]+([A-Z][a-z]*)+", word)

    def splitwikiword(self, word):
        chars = []
        for c in word:
            if chars and c.isupper():
                chars.append(' ')
            chars.append(c)
        return "".join(chars)

    def mkfile(self, name=None):
        if name is None:
            name = self.name
        return os.path.join(self.homedir, name + ".txt")

    def mklink(self, cmd, page, text):
        link = self.scripturl + "?cmd=" + cmd + "&page=" + page
        return '<a href="%s">%s</a>' % (link, text)

    def load(self):
        try:
            f = open(self.mkfile())
            data = f.read().strip()
            f.close()
        except IOError:
            data = ""
        self.data = data

    def store(self):
        data = self.data
        try:
            f = open(self.mkfile(), "w")
            f.write(data)
            if data and not data.endswith('\n'):
                f.write('\n')
            f.close()
            return ""
        except IOError, err:
            return "IOError: %s" % str(err)
PKb1�Z�``M��cgi/cgi0.shnuȯ��#! /bin/sh

# If you can't get this to work, your web server isn't set up right

echo Content-type: text/plain
echo
echo Hello world
echo This is cgi0.sh
PKb1�Z�&bcomparisons/sortingtest.pyonu�[����
Afc@s,ddlZddlZd�Ze�dS(i����Ncs{tjd�}|d��xYtjD]N}t�fd�|j�D��}x"|D]\}}d||fGqTWHq%WdS(Ns^(.*)=([-+]?[0-9]+)cSsE|j|�}|r7|j�\}}t|�|fSd|fSdS(Ni(tmatchtgroupstint(titemtprogRtvartnum((s4/usr/lib64/python2.7/Demo/comparisons/sortingtest.pytmakekeys
c3s|]}�|�VqdS(N((t.0R(R(s4/usr/lib64/python2.7/Demo/comparisons/sortingtest.pys	<genexpr>(ss%s=%s(tretcompiletsyststdintsortedtsplit(RtlinetitemsRR((Rs4/usr/lib64/python2.7/Demo/comparisons/sortingtest.pytmains"(R	RR(((s4/usr/lib64/python2.7/Demo/comparisons/sortingtest.pyt<module>s	PKb1�Z'2ӎ��comparisons/sortingtest.pynuȯ��#! /usr/bin/python2.7

# 2)  Sorting Test
#
#     Sort an input file that consists of lines like this
#
#         var1=23 other=14 ditto=23 fred=2
#
#     such that each output line is sorted WRT to the number.  Order
#     of output lines does not change.  Resolve collisions using the
#     variable name.   e.g.
#
#         fred=2 other=14 ditto=23 var1=23
#
#     Lines may be up to several kilobytes in length and contain
#     zillions of variables.

# This implementation:
# - Reads stdin, writes stdout
# - Uses any amount of whitespace to separate fields
# - Allows signed numbers
# - Treats illegally formatted fields as field=0
# - Outputs the sorted fields with exactly one space between them
# - Handles blank input lines correctly

import re
import sys

def main():
    prog = re.compile('^(.*)=([-+]?[0-9]+)')
    def makekey(item, prog=prog):
        match = prog.match(item)
        if match:
            var, num = match.groups()
            return int(num), var
        else:
            # Bad input -- pretend it's a var with value 0
            return 0, item
    for line in sys.stdin:
        items = sorted(makekey(item) for item in line.split())
        for num, var in items:
            print "%s=%s" % (var, num),
        print

main()
PKb1�Zk�4z��comparisons/regextest.pynuȯ��#! /usr/bin/python2.7

# 1)  Regular Expressions Test
#
#     Read a file of (extended per egrep) regular expressions (one per line),
#     and apply those to all files whose names are listed on the command line.
#     Basically, an 'egrep -f' simulator.  Test it with 20 "vt100" patterns
#     against a five /etc/termcap files.  Tests using more elaborate patters
#     would also be interesting.  Your code should not break if given hundreds
#     of regular expressions or binary files to scan.

# This implementation:
# - combines all patterns into a single one using ( ... | ... | ... )
# - reads patterns from stdin, scans files given as command line arguments
# - produces output in the format <file>:<lineno>:<line>
# - is only about 2.5 times as slow as egrep (though I couldn't run
#   Tom's test -- this system, a vanilla SGI, only has /etc/terminfo)

import string
import sys
import re

def main():
    pats = map(chomp, sys.stdin.readlines())
    bigpat = '(' + '|'.join(pats) + ')'
    prog = re.compile(bigpat)

    for file in sys.argv[1:]:
        try:
            fp = open(file, 'r')
        except IOError, msg:
            print "%s: %s" % (file, msg)
            continue
        lineno = 0
        while 1:
            line = fp.readline()
            if not line:
                break
            lineno = lineno + 1
            if prog.search(line):
                print "%s:%s:%s" % (file, lineno, line),

def chomp(s):
    return s.rstrip('\n')

if __name__ == '__main__':
    main()
PKb1�Z�&bcomparisons/sortingtest.pycnu�[����
Afc@s,ddlZddlZd�Ze�dS(i����Ncs{tjd�}|d��xYtjD]N}t�fd�|j�D��}x"|D]\}}d||fGqTWHq%WdS(Ns^(.*)=([-+]?[0-9]+)cSsE|j|�}|r7|j�\}}t|�|fSd|fSdS(Ni(tmatchtgroupstint(titemtprogRtvartnum((s4/usr/lib64/python2.7/Demo/comparisons/sortingtest.pytmakekeys
c3s|]}�|�VqdS(N((t.0R(R(s4/usr/lib64/python2.7/Demo/comparisons/sortingtest.pys	<genexpr>(ss%s=%s(tretcompiletsyststdintsortedtsplit(RtlinetitemsRR((Rs4/usr/lib64/python2.7/Demo/comparisons/sortingtest.pytmains"(R	RR(((s4/usr/lib64/python2.7/Demo/comparisons/sortingtest.pyt<module>s	PKb1�Z]�|I 	 	comparisons/READMEnu�[���Subject: Re: What language would you use?
From: Tom Christiansen <tchrist@mox.perl.com>
Date: 6 Nov 1994 15:14:51 GMT
Newsgroups: comp.lang.python,comp.lang.tcl,comp.lang.scheme,comp.lang.misc,comp.lang.perl
Message-Id: <39irtb$3t4@csnews.cs.Colorado.EDU>
References: <39b7ha$j9v@zeno.nscf.org> <39hhjp$lgn@csnews.cs.Colorado.EDU> <39hvsu$dus@mathserv.mps.ohio-state.edu>

[...]
If you're really into benchmarks, I'd love it if someone were to code up
the following problems in tcl, python, and scheme (and whatever else you'd
like).  Separate versions (one optimized for speed, one for beauty :-) are
ok.  Post your code so we can time it on our own systems.

0)  Factorial Test  (numerics and function calls)

        (we did this already)

1)  Regular Expressions Test

    Read a file of (extended per egrep) regular expressions (one per line), 
    and apply those to all files whose names are listed on the command line.
    Basically, an 'egrep -f' simulator.  Test it with 20 "vt100" patterns
    against a five /etc/termcap files.  Tests using more elaborate patters
    would also be interesting.  Your code should not break if given hundreds
    of regular expressions or binary files to scan.  

2)  Sorting Test

    Sort an input file that consists of lines like this

        var1=23 other=14 ditto=23 fred=2

    such that each output line is sorted WRT to the number.  Order
    of output lines does not change.  Resolve collisions using the
    variable name.   e.g.

        fred=2 other=14 ditto=23 var1=23 

    Lines may be up to several kilobytes in length and contain
    zillions of variables.

3)  System Test

    Given a list of directories, report any bogus symbolic links contained
    anywhere in those subtrees.  A bogus symbolic link is one that cannot
    be resolved because it points to a nonexistent or otherwise
    unresolvable file.  Do *not* use an external find executable.
    Directories may be very very deep.  Print a warning immediately if the
    system you're running on doesn't support symbolic links.


I'll post perl solutions if people post the others.


--tom
-- 
Tom Christiansen      Perl Consultant, Gamer, Hiker      tchrist@mox.perl.com

 "But Billy! A *small* allowance prepares you for a lifetime of small
 salaries and for your Social Security payments."    --Family Circus
PKb1�Z7\�AAcomparisons/regextest.pycnu�[����
Afc@sPddlZddlZddlZd�Zd�ZedkrLe�ndS(i����NcCs�tttjj��}ddj|�d}tj|�}x�tjdD]�}yt	|d�}Wn%t
k
r�}d||fGHqLnXd}xG|j�}|s�Pn|d}|j|�r�d|||fGq�q�WqLWdS(	Nt(t|t)itrs%s: %sis%s:%s:%s(
tmaptchomptsyststdint	readlinestjointretcompiletargvtopentIOErrortreadlinetsearch(tpatstbigpattprogtfiletfptmsgtlinenotline((s2/usr/lib64/python2.7/Demo/comparisons/regextest.pytmains"
cCs
|jd�S(Ns
(trstrip(ts((s2/usr/lib64/python2.7/Demo/comparisons/regextest.pyR+st__main__(tstringRR
RRt__name__(((s2/usr/lib64/python2.7/Demo/comparisons/regextest.pyt<module>s		PKb1�Z,��
>>comparisons/systemtest.pycnu�[����
Afc@s?ddlZddlZddlTd�Zd�Ze�dS(i����N(t*cCs�y
tj}Wn#tk
r2dGHtjd�nXtjdrPtjd}nd}|r�tj|�|ddkr�|d}nt|�n
td�dS(Ns'This system doesn't have symbolic linksiiti����t/(tostreadlinktAttributeErrortsystexittargvtchdirtreportboguslinks(tdummytprefix((s3/usr/lib64/python2.7/Demo/comparisons/systemtest.pytmains





cCs�ytjd�}Wn)tjk
r>}d|d|fGHdSX|j�x<|D]4}|tjksP|tjkrzqPnytj|�t}Wn)tjk
r�d|||fGHqPnXt|�rytj	|�Wq�tjk
rd||tj
|�fGHq�XqPt|�rPytj|�Wn+tjk
rY}d|||fGHqPnXzt
||d�Wdtjd�XqPqPWdS(Nt.s%s%s: can't list: %ss%s%s: can't stat: %ss
%s%s -> %ss%s%s: can't chdir: %sRs..(RtlistdirterrortsorttcurdirtpardirtlstattST_MODEtS_ISLNKtstatRtS_ISDIRR	R
(Rtnamestmsgtnametmode((s3/usr/lib64/python2.7/Demo/comparisons/systemtest.pyR
)s<

(RRRR
R
(((s3/usr/lib64/python2.7/Demo/comparisons/systemtest.pyt<module>s

		!PKb1�Z�%.comparisons/patternsnu�[���^def 
^class 
^import 
^from 
PKb1�Z7\�AAcomparisons/regextest.pyonu�[����
Afc@sPddlZddlZddlZd�Zd�ZedkrLe�ndS(i����NcCs�tttjj��}ddj|�d}tj|�}x�tjdD]�}yt	|d�}Wn%t
k
r�}d||fGHqLnXd}xG|j�}|s�Pn|d}|j|�r�d|||fGq�q�WqLWdS(	Nt(t|t)itrs%s: %sis%s:%s:%s(
tmaptchomptsyststdint	readlinestjointretcompiletargvtopentIOErrortreadlinetsearch(tpatstbigpattprogtfiletfptmsgtlinenotline((s2/usr/lib64/python2.7/Demo/comparisons/regextest.pytmains"
cCs
|jd�S(Ns
(trstrip(ts((s2/usr/lib64/python2.7/Demo/comparisons/regextest.pyR+st__main__(tstringRR
RRt__name__(((s2/usr/lib64/python2.7/Demo/comparisons/regextest.pyt<module>s		PKb1�Z,��
>>comparisons/systemtest.pyonu�[����
Afc@s?ddlZddlZddlTd�Zd�Ze�dS(i����N(t*cCs�y
tj}Wn#tk
r2dGHtjd�nXtjdrPtjd}nd}|r�tj|�|ddkr�|d}nt|�n
td�dS(Ns'This system doesn't have symbolic linksiiti����t/(tostreadlinktAttributeErrortsystexittargvtchdirtreportboguslinks(tdummytprefix((s3/usr/lib64/python2.7/Demo/comparisons/systemtest.pytmains





cCs�ytjd�}Wn)tjk
r>}d|d|fGHdSX|j�x<|D]4}|tjksP|tjkrzqPnytj|�t}Wn)tjk
r�d|||fGHqPnXt|�rytj	|�Wq�tjk
rd||tj
|�fGHq�XqPt|�rPytj|�Wn+tjk
rY}d|||fGHqPnXzt
||d�Wdtjd�XqPqPWdS(Nt.s%s%s: can't list: %ss%s%s: can't stat: %ss
%s%s -> %ss%s%s: can't chdir: %sRs..(RtlistdirterrortsorttcurdirtpardirtlstattST_MODEtS_ISLNKtstatRtS_ISDIRR	R
(Rtnamestmsgtnametmode((s3/usr/lib64/python2.7/Demo/comparisons/systemtest.pyR
)s<

(RRRR
R
(((s3/usr/lib64/python2.7/Demo/comparisons/systemtest.pyt<module>s

		!PKb1�ZD����comparisons/systemtest.pynuȯ��#! /usr/bin/python2.7

# 3)  System Test
#
#     Given a list of directories, report any bogus symbolic links contained
#     anywhere in those subtrees.  A bogus symbolic link is one that cannot
#     be resolved because it points to a nonexistent or otherwise
#     unresolvable file.  Do *not* use an external find executable.
#     Directories may be very very deep.  Print a warning immediately if the
#     system you're running on doesn't support symbolic links.

# This implementation:
# - takes one optional argument, using the current directory as default
# - uses chdir to increase performance
# - sorts the names per directory
# - prints output lines of the form "path1 -> path2" as it goes
# - prints error messages about directories it can't list or chdir into

import os
import sys
from stat import *

def main():
    try:
        # Note: can't test for presence of lstat -- it's always there
        dummy = os.readlink
    except AttributeError:
        print "This system doesn't have symbolic links"
        sys.exit(0)
    if sys.argv[1:]:
        prefix = sys.argv[1]
    else:
        prefix = ''
    if prefix:
        os.chdir(prefix)
        if prefix[-1:] != '/': prefix = prefix + '/'
        reportboguslinks(prefix)
    else:
        reportboguslinks('')

def reportboguslinks(prefix):
    try:
        names = os.listdir('.')
    except os.error, msg:
        print "%s%s: can't list: %s" % (prefix, '.', msg)
        return
    names.sort()
    for name in names:
        if name == os.curdir or name == os.pardir:
            continue
        try:
            mode = os.lstat(name)[ST_MODE]
        except os.error:
            print "%s%s: can't stat: %s" % (prefix, name, msg)
            continue
        if S_ISLNK(mode):
            try:
                os.stat(name)
            except os.error:
                print "%s%s -> %s" % \
                      (prefix, name, os.readlink(name))
        elif S_ISDIR(mode):
            try:
                os.chdir(name)
            except os.error, msg:
                print "%s%s: can't chdir: %s" % \
                      (prefix, name, msg)
                continue
            try:
                reportboguslinks(prefix + name + '/')
            finally:
                os.chdir('..')

main()
PKb1�Z�G��parser/docstring.pynu�[���"""Some documentation.
"""
PKb1�Z�9\n]n]parser/unparse.pyonu�[����
��^c@s�dZddlZddlZddlZddlZdeejjd�Zd�Z	dfd��YZ
ejd�Zd	�Z
d
�Zedkr�eejd�ndS(s'Usage: unparse.py <path to source file>i����Nt1eicCsZt|�}y|t|��Wntk
r3n#Xx|D]}|�||�q;WdS(s<Call f on each item in seq, calling inter() in between.
    N(titertnextt
StopIteration(tintertftseqtx((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt
interleaves

tUnparsercBseZdZejd�Zdd�Zd�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
d�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!d�Z"d �Z#d!�Z$d"�Z%d#�Z&d$�Z'd%�Z(d&�Z)d'�Z*d(�Z+d)�Z,d*�Z-d+�Z.d,�Z/d-�Z0d.�Z1d/�Z2id0d16d2d36d4d56d6d76Z3d8�Z4id4d96d6d:6d;d<6d=d>6d?d@6dAdB6dCdD6dEdF6dGdH6dIdJ6dKdL6dMdN6Z5dO�Z6i
dPdQ6dRdS6dTdU6dVdW6dXdY6dZd[6d\d]6d^d_6d`da6dbdc6Z7dd�Z8idee9j:6dfe9j;6Z<dg�Z=dh�Z>di�Z?dj�Z@dk�ZAdl�ZBdm�ZCdn�ZDdo�ZEdp�ZFdq�ZGdr�ZHRS(ss�Methods in this class recursively traverse an AST and
    output source code for the abstract syntax; original formatting
    is disregarded. cCsI||_g|_d|_|j|�|jjd�|jj�dS(sTUnparser(tree, file=sys.stdout) -> None.
         Print the source for tree to file.itN(Rtfuture_importst_indenttdispatchtwritetflush(tselfttreetfile((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt__init__s			
R
cCs#|jjdd|j|�dS(sBIndent a piece of text, according to the current indentation levels
s    N(RRR(Rttext((s+/usr/lib64/python2.7/Demo/parser/unparse.pytfill'scCs|jj|�dS(s+Append a piece of text to the current line.N(RR(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyR+scCs |jd�|jd7_dS(s(Print ':', and increase the indentation.t:iN(RR(R((s+/usr/lib64/python2.7/Demo/parser/unparse.pytenter/s
cCs|jd8_dS(sDecrease the indentation level.iN(R(R((s+/usr/lib64/python2.7/Demo/parser/unparse.pytleave4scCsXt|t�r1x|D]}|j|�qWdSt|d|jj�}||�dS(s:Dispatcher function, dispatching tree type T to method _T.Nt_(t
isinstancetlistR
tgetattrt	__class__t__name__(RRtttmeth((s+/usr/lib64/python2.7/Demo/parser/unparse.pyR
8s
cCs%x|jD]}|j|�q
WdS(N(tbodyR
(RRtstmt((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_ModuleIscCs|j�|j|j�dS(N(RR
tvalue(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_ExprNs
cs0�jd�t�fd��j|j�dS(Nsimport cs
�jd�S(Ns, (R((R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyt<lambda>TR
(RRR
tnames(RR((Rs+/usr/lib64/python2.7/Demo/parser/unparse.pyt_ImportRs
cs�|jr8|jdkr8�jjd�|jD��n�jd��jd|j�|jru�j|j�n�jd�t�fd��j|j�dS(Nt
__future__css|]}|jVqdS(N(tname(t.0tn((s+/usr/lib64/python2.7/Demo/parser/unparse.pys	<genexpr>Yssfrom t.s import cs
�jd�S(Ns, (R((R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyR&`R
(	tmoduleRtextendR'RRtlevelRR
(RR((Rs+/usr/lib64/python2.7/Demo/parser/unparse.pyt_ImportFromVs 
	
cCsL|j�x+|jD] }|j|�|jd�qW|j|j�dS(Ns = (RttargetsR
RR$(RRttarget((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Assignbs


cCsS|j�|j|j�|jd|j|jjjd�|j|j�dS(Nt s= (	RR
R3RtbinoptopRRR$(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt
_AugAssignis
%cCs:|jd�|jr6|jd�|j|j�ndS(NtreturnR5(RR$RR
(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Returnos
	
cCs|jd�dS(Ntpass(R(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_PassuscCs|jd�dS(Ntbreak(R(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_BreakxscCs|jd�dS(Ntcontinue(R(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt	_Continue{scs0�jd�t�fd��j|j�dS(Nsdel cs
�jd�S(Ns, (R((R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyR&�R
(RRR
R2(RR((Rs+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Delete~s
cCsJ|jd�|j|j�|jrF|jd�|j|j�ndS(Nsassert s, (RR
ttesttmsgR(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Assert�s

	
cCss|jd�|j|j�|jrF|jd�|j|j�n|jro|jd�|j|j�ndS(Nsexec s in s, (RR
R!tglobalsRtlocals(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Exec�s
	
	
cCs�|jd�t}|jrB|jd�|j|j�t}nx:|jD]/}|rh|jd�nt}|j|�qLW|js�|jd�ndS(Nsprint s>>s, t,(RtFalsetdestRR
tTruetvaluestnl(RRtdo_commate((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Print�s
	
		cs0�jd�t�fd��j|j�dS(Nsglobal cs
�jd�S(Ns, (R((R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyR&�R
(RRRR'(RR((Rs+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Global�s
cCsT|jd�|jd�|jrC|jd�|j|j�n|jd�dS(Nt(tyieldR5t)(RR$R
(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Yield�s

	
cCs|jd�|jr)|j|j�n|jrR|jd�|j|j�n|jr{|jd�|j|j�ndS(Nsraise s, (RttypeR
tinstRttback(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Raise�s
		
	
cCs�|jd�|j�|j|j�|j�x|jD]}|j|�q;W|jr�|jd�|j�|j|j�|j�ndS(Nttrytelse(RRR
R!Rthandlerstorelse(RRtex((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt
_TryExcept�s


	

cCs�t|j�dkrAt|jdtj�rA|j|j�n1|jd�|j�|j|j�|j�|jd�|j�|j|j	�|j�dS(NiiRZtfinally(
tlenR!Rtastt	TryExceptR
RRRt	finalbody(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_TryFinally�s.




cCs�|jd�|jr6|jd�|j|j�n|jr_|jd�|j|j�n|j�|j|j�|j�dS(NtexceptR5s as (RRVRR
R*RR!R(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_ExceptHandler�s
	
	

cCs�|jd�x+|jD] }|jd�|j|�qW|jd|j�|jr�|jd�x+|jD] }|j|�|jd�qoW|jd�n|j�|j|j�|j�dS(Ns
t@sclass RRs, RT(	Rtdecorator_listRR
R*tbasesRR!R(RRtdecota((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt	_ClassDef�s

	


cCs�|jd�x+|jD] }|jd�|j|�qW|jd|jd�|j|j�|jd�|j�|j|j�|j�dS(Ns
Rhsdef RRRT(	RRiRR
R*targsRR!R(RRRk((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_FunctionDef�s



cCs�|jd�|j|j�|jd�|j|j�|j�|j|j�|j�|jr�|jd�|j�|j|j�|j�ndS(Nsfor s in R[(	RR
R3RRRR!RR](RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_For�s



	

cCs|jd�|j|j�|j�|j|j�|j�x�|jr�t|j�dkr�t|jdt	j
�r�|jd}|jd�|j|j�|j�|j|j�|j�qDW|jr
|jd�|j�|j|j�|j�ndS(Nsif iiselif R[(RR
RBRR!RR]RaRRbtIf(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Ifs$


!


	

cCs�|jd�|j|j�|j�|j|j�|j�|jr~|jd�|j�|j|j�|j�ndS(Nswhile R[(RR
RBRR!RR](RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_While!s


	

cCsn|jd�|j|j�|jrF|jd�|j|j�n|j�|j|j�|j�dS(Nswith s as (RR
tcontext_exprt
optional_varsRRR!R(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_With-s
	

cCs�d|jkr(|jt|j��nct|jt�rW|jdt|j��n4t|jt�r�|jt|j�jd��ndS(Ntunicode_literalstbtu(RRtreprtsRtstrtunicodetlstrip(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Str8s"cCs|j|j�dS(N(Rtid(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_NameEscCs.|jd�|j|j�|jd�dS(Nt`(RR
R$(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_ReprHs
cCsjt|j�}|jd�r.|jd�n|j|jdt��|jd�rf|jd�ndS(Nt-RRtinfRT(RzR,t
startswithRtreplacetINFSTR(RRtrepr_n((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_NumMscs=�jd�t�fd��j|j��jd�dS(Nt[cs
�jd�S(Ns, (R((R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyR&YR
t](RRR
telts(RR((Rs+/usr/lib64/python2.7/Demo/parser/unparse.pyt_ListWs
cCsO|jd�|j|j�x|jD]}|j|�q'W|jd�dS(NR�R�(RR
teltt
generators(RRtgen((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt	_ListComp\s

cCsO|jd�|j|j�x|jD]}|j|�q'W|jd�dS(NRRRT(RR
R�R�(RRR�((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt
_GeneratorExpcs

cCsO|jd�|j|j�x|jD]}|j|�q'W|jd�dS(Nt{t}(RR
R�R�(RRR�((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_SetCompjs

cCsl|jd�|j|j�|jd�|j|j�x|jD]}|j|�qDW|jd�dS(NR�s: R�(RR
tkeyR$R�(RRR�((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt	_DictCompqs

cCsl|jd�|j|j�|jd�|j|j�x+|jD] }|jd�|j|�qDWdS(Ns for s in s if (RR
R3Rtifs(RRt	if_clause((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_comprehensionzs


cCsh|jd�|j|j�|jd�|j|j�|jd�|j|j�|jd�dS(NRRs if s else RT(RR
R!RBR](RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_IfExp�s


cs=�jd�t�fd��j|j��jd�dS(NR�cs
�jd�S(Ns, (R((R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyR&�R
R�(RRR
R�(RR((Rs+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Set�s
csU�jd��fd�}t�fd�|t|j|j���jd�dS(NR�cs7|\}}�j|��jd��j|�dS(Ns: (R
R(tpairtktv(R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyt
write_pair�s

cs
�jd�S(Ns, (R((R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyR&�R
R�(RRtziptkeysRL(RRR�((Rs+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Dict�s
(cs{�jd�t|j�dkrK|j\}�j|��jd�nt�fd��j|j��jd�dS(NRRiRHcs
�jd�S(Ns, (R((R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyR&�R
RT(RRaR�R
R(RRR�((Rs+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Tuple�s

t~tInverttnottNott+tUAddR�tUSubcCs�|jd�|j|j|jjj�|jd�t|jtj�r�t|jtj	�r�|jd�|j
|j�|jd�n|j
|j�|jd�dS(NRRR5RT(RtunopR7RRRRbR�toperandtNumR
(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_UnaryOp�s

*
tAddtSubt*tMultt/tDivt%tMods<<tLShifts>>tRShiftt|tBitOrt^tBitXort&tBitAnds//tFloorDivs**tPowcCsc|jd�|j|j�|jd|j|jjjd�|j|j�|jd�dS(NRRR5RT(RR
tleftR6R7RRtright(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_BinOp�s

%s==tEqs!=tNotEqt<tLts<=tLtEt>tGts>=tGtEtistIssis nottIsNottintInsnot intNotIncCs�|jd�|j|j�xRt|j|j�D];\}}|jd|j|jjd�|j|�q3W|jd�dS(NRRR5RT(	RR
R�R�topstcomparatorstcmpopsRR(RRtoRO((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Compare�s
""tandtorcsW�jd�d�j|jj�t��fd��j|j��jd�dS(NRRs %s cs
�j��S(N(R((R{R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyR&�R
RT(RtboolopsR7RRR
RL(RR((R{Rs+/usr/lib64/python2.7/Demo/parser/unparse.pyt_BoolOp�s
"cCsk|j|j�t|jtj�rJt|jjt�rJ|jd�n|jd�|j|j�dS(NR5R-(	R
R$RRbR�R,tintRtattr(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt
_Attribute�s
*
cCs8|j|j�|jd�t}x:|jD]/}|rI|jd�nt}|j|�q-Wx:|jD]/}|r�|jd�nt}|j|�qjW|jr�|r�|jd�nt}|jd�|j|j�n|jr'|r|jd�nt}|jd�|j|j�n|jd�dS(NRRs, R�s**RT(	R
tfuncRRIRnRKtkeywordststarargstkwargs(RRtcommaRO((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Call�s4
	
	
cCs>|j|j�|jd�|j|j�|jd�dS(NR�R�(R
R$Rtslice(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt
_Subscript�s
cCs|jd�dS(Ns...(R(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt	_Ellipsis�scCs|j|j�dS(N(R
R$(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Index�scCsr|jr|j|j�n|jd�|jrE|j|j�n|jrn|jd�|j|j�ndS(NR(tlowerR
Rtuppertstep(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Slices	
		
cs#t�fd��j|j�dS(Ncs
�jd�S(Ns, (R((R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyR&
R
(RR
tdims(RR((Rs+/usr/lib64/python2.7/Demo/parser/unparse.pyt	_ExtSlicescCs't}dgt|j�t|j�|j}xot|j|�D][\}}|r^t}n
|jd�|j|�f|rC|jd�|j|�qCqCW|j	r�|r�t}n
|jd�|jd�|j|j	�n|j
r#|r�t}n
|jd�|jd|j
�ndS(Ns, t=R�s**(RKtNoneRaRntdefaultsR�RIRR
tvarargtkwarg(RRtfirstR�Rltd((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt
_argumentss**	

		

		
cCs1|j|j�|jd�|j|j�dS(NR�(RtargR
R$(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_keyword)s
cCsX|jd�|jd�|j|j�|jd�|j|j�|jd�dS(NRRslambda s: RT(RR
RnR!(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Lambda.s


cCs4|j|j�|jr0|jd|j�ndS(Ns as (RR*tasname(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_alias6s	(IRt
__module__t__doc__tsyststdoutRRRRRR
R#R%R(R1R4R8R:R<R>R@RARDRGRPRQRURYR_ReRgRmRoRpRrRsRvRR�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R6R�R�R�RbtAndtOrR�R�R�R�R�R�R�R�R�R�R�R�R�(((s+/usr/lib64/python2.7/Demo/parser/unparse.pyR	s�
																	
														
			
												
	
"	&#	-			
					
				cCsMt|d��}|j�}WdQXt||dtj�}t||�dS(Ntrtexec(topentreadtcompileRbt
PyCF_ONLY_ASTR	(tfilenametoutputtpyfiletsourceR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt	roundtrip;scCsy5gtj|�D]}|jd�r|^q}Wn%tk
r\tjjd|�n�Xx�|D]�}tjj||�}tjj	|�r�t
j�}d|GHyt||�Wq�t
k
r�}dt|�GHq�Xqdtjj|�rdt|�qdqdWdS(Ns.pysDirectory not readable: %ss
Testing %ss$  Failed to compile, exception is %s(tostlistdirtendswithtOSErrorR�tstderrRtpathtjointisfilet	cStringIOtStringIOR
t	ExceptionRztisdirttestdir(RlR,R'tfullnameR
RO((s+/usr/lib64/python2.7/Demo/parser/unparse.pyRCs5

	cCsQ|ddkr2x:|dD]}t|�qWnx|D]}t|�q9WdS(Nis	--testdiri(RR
(RnRl((s+/usr/lib64/python2.7/Demo/parser/unparse.pytmainUs

t__main__(R�R�RbRRRzt
float_infot
max_10_expR�RR	RR
RRRtargv(((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt<module>s	
��%		PKb1�Zy�=ZZparser/example.pynu�[���"""Simple code to extract class & function docstrings from a module.

This code is used as an example in the library reference manual in the
section on using the parser module.  Refer to the manual for a thorough
discussion of the operation of this code.
"""

import os
import parser
import symbol
import token
import types

from types import ListType, TupleType


def get_docs(fileName):
    """Retrieve information from the parse tree of a source file.

    fileName
        Name of the file to read Python source code from.
    """
    source = open(fileName).read()
    basename = os.path.basename(os.path.splitext(fileName)[0])
    ast = parser.suite(source)
    return ModuleInfo(ast.totuple(), basename)


class SuiteInfoBase:
    _docstring = ''
    _name = ''

    def __init__(self, tree = None):
        self._class_info = {}
        self._function_info = {}
        if tree:
            self._extract_info(tree)

    def _extract_info(self, tree):
        # extract docstring
        if len(tree) == 2:
            found, vars = match(DOCSTRING_STMT_PATTERN[1], tree[1])
        else:
            found, vars = match(DOCSTRING_STMT_PATTERN, tree[3])
        if found:
            self._docstring = eval(vars['docstring'])
        # discover inner definitions
        for node in tree[1:]:
            found, vars = match(COMPOUND_STMT_PATTERN, node)
            if found:
                cstmt = vars['compound']
                if cstmt[0] == symbol.funcdef:
                    name = cstmt[2][1]
                    self._function_info[name] = FunctionInfo(cstmt)
                elif cstmt[0] == symbol.classdef:
                    name = cstmt[2][1]
                    self._class_info[name] = ClassInfo(cstmt)

    def get_docstring(self):
        return self._docstring

    def get_name(self):
        return self._name

    def get_class_names(self):
        return self._class_info.keys()

    def get_class_info(self, name):
        return self._class_info[name]

    def __getitem__(self, name):
        try:
            return self._class_info[name]
        except KeyError:
            return self._function_info[name]


class SuiteFuncInfo:
    #  Mixin class providing access to function names and info.

    def get_function_names(self):
        return self._function_info.keys()

    def get_function_info(self, name):
        return self._function_info[name]


class FunctionInfo(SuiteInfoBase, SuiteFuncInfo):
    def __init__(self, tree = None):
        self._name = tree[2][1]
        SuiteInfoBase.__init__(self, tree and tree[-1] or None)


class ClassInfo(SuiteInfoBase):
    def __init__(self, tree = None):
        self._name = tree[2][1]
        SuiteInfoBase.__init__(self, tree and tree[-1] or None)

    def get_method_names(self):
        return self._function_info.keys()

    def get_method_info(self, name):
        return self._function_info[name]


class ModuleInfo(SuiteInfoBase, SuiteFuncInfo):
    def __init__(self, tree = None, name = "<string>"):
        self._name = name
        SuiteInfoBase.__init__(self, tree)
        if tree:
            found, vars = match(DOCSTRING_STMT_PATTERN, tree[1])
            if found:
                self._docstring = vars["docstring"]


def match(pattern, data, vars=None):
    """Match `data' to `pattern', with variable extraction.

    pattern
        Pattern to match against, possibly containing variables.

    data
        Data to be checked and against which variables are extracted.

    vars
        Dictionary of variables which have already been found.  If not
        provided, an empty dictionary is created.

    The `pattern' value may contain variables of the form ['varname'] which
    are allowed to match anything.  The value that is matched is returned as
    part of a dictionary which maps 'varname' to the matched value.  'varname'
    is not required to be a string object, but using strings makes patterns
    and the code which uses them more readable.

    This function returns two values: a boolean indicating whether a match
    was found and a dictionary mapping variable names to their associated
    values.
    """
    if vars is None:
        vars = {}
    if type(pattern) is ListType:       # 'variables' are ['varname']
        vars[pattern[0]] = data
        return 1, vars
    if type(pattern) is not TupleType:
        return (pattern == data), vars
    if len(data) != len(pattern):
        return 0, vars
    for pattern, data in map(None, pattern, data):
        same, vars = match(pattern, data, vars)
        if not same:
            break
    return same, vars


#  This pattern identifies compound statements, allowing them to be readily
#  differentiated from simple statements.
#
COMPOUND_STMT_PATTERN = (
    symbol.stmt,
    (symbol.compound_stmt, ['compound'])
    )


#  This pattern will match a 'stmt' node which *might* represent a docstring;
#  docstrings require that the statement which provides the docstring be the
#  first statement in the class or function, which this pattern does not check.
#
DOCSTRING_STMT_PATTERN = (
    symbol.stmt,
    (symbol.simple_stmt,
     (symbol.small_stmt,
      (symbol.expr_stmt,
       (symbol.testlist,
        (symbol.test,
         (symbol.and_test,
          (symbol.not_test,
           (symbol.comparison,
            (symbol.expr,
             (symbol.xor_expr,
              (symbol.and_expr,
               (symbol.shift_expr,
                (symbol.arith_expr,
                 (symbol.term,
                  (symbol.factor,
                   (symbol.power,
                    (symbol.atom,
                     (token.STRING, ['docstring'])
                     )))))))))))))))),
     (token.NEWLINE, '')
     ))
PKb1�Z�0���parser/test_parser.pyonu�[����
Afc@sSddlZddlZdad�Zd�Zd�ZedkrOe�ndS(i����NicCs�dG|Gy7tj|�}tj|�}d}tj|�}Wn8tjk
ry}HdG|dGHtj�tdan2X|tj|�kr�HdG|GHtdandGHdS(Ns----s,parser module raised exception on input filet:is"parser module failed on input fileso.k.(	tparsertsuitetst2tupletNonettuple2sttParserErrort	tracebackt	print_exct
_numFailed(tttfileNametstttuptnewterr((s//usr/lib64/python2.7/Demo/parser/test_parser.pyt	testChunk
s 

	
cCs#t|�j�}t||�dS(N(topentreadR(RR
((s//usr/lib64/python2.7/Demo/parser/test_parser.pyttestFile!scCskddl}|jd}|sGddl}|jd�}|j�ntt|�|jtdk�dS(Ni����is*.pyi(tsystargvtglobtsorttmapRtexitR	(RtargsR((s//usr/lib64/python2.7/Demo/parser/test_parser.pyttest%s


t__main__(RRR	RRRt__name__(((s//usr/lib64/python2.7/Demo/parser/test_parser.pyt<module>s			
PKb1�Zc���parser/simple.pyonu�[����
��^c@s
d�ZdS(cCsdS(smaybe a docstringN((((s*/usr/lib64/python2.7/Demo/parser/simple.pytftN(R(((s*/usr/lib64/python2.7/Demo/parser/simple.pyt<module>RPKb1�Z�0���parser/test_parser.pycnu�[����
Afc@sSddlZddlZdad�Zd�Zd�ZedkrOe�ndS(i����NicCs�dG|Gy7tj|�}tj|�}d}tj|�}Wn8tjk
ry}HdG|dGHtj�tdan2X|tj|�kr�HdG|GHtdandGHdS(Ns----s,parser module raised exception on input filet:is"parser module failed on input fileso.k.(	tparsertsuitetst2tupletNonettuple2sttParserErrort	tracebackt	print_exct
_numFailed(tttfileNametstttuptnewterr((s//usr/lib64/python2.7/Demo/parser/test_parser.pyt	testChunk
s 

	
cCs#t|�j�}t||�dS(N(topentreadR(RR
((s//usr/lib64/python2.7/Demo/parser/test_parser.pyttestFile!scCskddl}|jd}|sGddl}|jd�}|j�ntt|�|jtdk�dS(Ni����is*.pyi(tsystargvtglobtsorttmapRtexitR	(RtargsR((s//usr/lib64/python2.7/Demo/parser/test_parser.pyttest%s


t__main__(RRR	RRRt__name__(((s//usr/lib64/python2.7/Demo/parser/test_parser.pyt<module>s			
PKb1�ZGj�D��parser/source.pynu�[���"""Exmaple file to be parsed for the parsermodule example.

The classes and functions in this module exist only to exhibit the ability
of the handling information extraction from nested definitions using parse
trees.  They shouldn't interest you otherwise!
"""

class Simple:
    "This class does very little."

    def method(self):
        "This method does almost nothing."
        return 1

    class Nested:
        "This is a nested class."

        def nested_method(self):
            "Method of Nested class."
            def nested_function():
                "Function in method of Nested class."
                pass
            return nested_function

def function():
    "This function lives at the module level."
    return 0
PKb1�Z�N�k[[parser/FILESnu�[���Demo/parser
Doc/libparser.tex
Lib/AST.py
Lib/symbol.py
Lib/token.py
Modules/parsermodule.c
PKb1�Z$�00parser/source.pyonu�[����
��^c@s&dZddd��YZd�ZdS(s�Exmaple file to be parsed for the parsermodule example.

The classes and functions in this module exist only to exhibit the ability
of the handling information extraction from nested definitions using parse
trees.  They shouldn't interest you otherwise!
tSimplecBs*eZdZd�Zddd��YZRS(sThis class does very little.cCsdS(s This method does almost nothing.i((tself((s*/usr/lib64/python2.7/Demo/parser/source.pytmethodstNestedcBseZdZd�ZRS(sThis is a nested class.cCs
d�}|S(sMethod of Nested class.cSsdS(s#Function in method of Nested class.N((((s*/usr/lib64/python2.7/Demo/parser/source.pytnested_functions((RR((s*/usr/lib64/python2.7/Demo/parser/source.pyt
nested_methods	(t__name__t
__module__t__doc__R(((s*/usr/lib64/python2.7/Demo/parser/source.pyRs((RRRRR(((s*/usr/lib64/python2.7/Demo/parser/source.pyRs	cCsdS(s(This function lives at the module level.i((((s*/usr/lib64/python2.7/Demo/parser/source.pytfunctionsN((RRR	(((s*/usr/lib64/python2.7/Demo/parser/source.pyt<module>sPKb1�Z�rX��parser/docstring.pycnu�[����
��^c@s
dZdS(sSome documentation.
N(t__doc__(((s-/usr/lib64/python2.7/Demo/parser/docstring.pyt<module>tPKb1�Z�g$$parser/example.pyonu�[����
��^c@s�dZddlZddlZddlZddlZddlZddlmZmZd�Zddd��YZ	ddd��YZ
d	e	e
fd
��YZde	fd��YZd
e	e
fd��YZ
dd�ZejejdgffZejejejejejejejejejejejejejejej ej!ej"ej#ej$dgfffffffffffffffffej%dfffZ&dS(s�Simple code to extract class & function docstrings from a module.

This code is used as an example in the library reference manual in the
section on using the parser module.  Refer to the manual for a thorough
discussion of the operation of this code.
i����N(tListTypet	TupleTypecCsVt|�j�}tjjtjj|�d�}tj|�}t|j	�|�S(s�Retrieve information from the parse tree of a source file.

    fileName
        Name of the file to read Python source code from.
    i(
topentreadtostpathtbasenametsplitexttparsertsuitet
ModuleInfottotuple(tfileNametsourceRtast((s+/usr/lib64/python2.7/Demo/parser/example.pytget_docss"t
SuiteInfoBasecBsVeZdZdZdd�Zd�Zd�Zd�Zd�Z	d�Z
d�ZRS(	tcCs,i|_i|_|r(|j|�ndS(N(t_class_infot_function_infot
_extract_info(tselfttree((s+/usr/lib64/python2.7/Demo/parser/example.pyt__init__!s		cCst|�dkr2ttd|d�\}}ntt|d�\}}|rgt|d�|_nx�|dD]�}tt|�\}}|rr|d}|dtjkr�|dd}t|�|j	|<q|dtj
kr|dd}t|�|j|<qqrqrWdS(Niiit	docstringtcompoundi(
tlentmatchtDOCSTRING_STMT_PATTERNtevalt
_docstringtCOMPOUND_STMT_PATTERNtsymboltfuncdeftFunctionInfoRtclassdeft	ClassInfoR(RRtfoundtvarstnodetcstmttname((s+/usr/lib64/python2.7/Demo/parser/example.pyR's 
cCs|jS(N(R(R((s+/usr/lib64/python2.7/Demo/parser/example.pyt
get_docstring;scCs|jS(N(t_name(R((s+/usr/lib64/python2.7/Demo/parser/example.pytget_name>scCs
|jj�S(N(Rtkeys(R((s+/usr/lib64/python2.7/Demo/parser/example.pytget_class_namesAscCs|j|S(N(R(RR)((s+/usr/lib64/python2.7/Demo/parser/example.pytget_class_infoDscCs/y|j|SWntk
r*|j|SXdS(N(RtKeyErrorR(RR)((s+/usr/lib64/python2.7/Demo/parser/example.pyt__getitem__Gs
N(t__name__t
__module__RR+tNoneRRR*R,R.R/R1(((s+/usr/lib64/python2.7/Demo/parser/example.pyRs					t
SuiteFuncInfocBseZd�Zd�ZRS(cCs
|jj�S(N(RR-(R((s+/usr/lib64/python2.7/Demo/parser/example.pytget_function_namesQscCs|j|S(N(R(RR)((s+/usr/lib64/python2.7/Demo/parser/example.pytget_function_infoTs(R2R3R6R7(((s+/usr/lib64/python2.7/Demo/parser/example.pyR5Ns	R"cBseZdd�ZRS(cCs5|dd|_tj||r*|dp-d�dS(Niii����(R+RRR4(RR((s+/usr/lib64/python2.7/Demo/parser/example.pyRYsN(R2R3R4R(((s+/usr/lib64/python2.7/Demo/parser/example.pyR"XsR$cBs&eZdd�Zd�Zd�ZRS(cCs5|dd|_tj||r*|dp-d�dS(Niii����(R+RRR4(RR((s+/usr/lib64/python2.7/Demo/parser/example.pyR_scCs
|jj�S(N(RR-(R((s+/usr/lib64/python2.7/Demo/parser/example.pytget_method_namescscCs|j|S(N(R(RR)((s+/usr/lib64/python2.7/Demo/parser/example.pytget_method_infofsN(R2R3R4RR8R9(((s+/usr/lib64/python2.7/Demo/parser/example.pyR$^s	R
cBseZddd�ZRS(s<string>cCsU||_tj||�|rQtt|d�\}}|rQ|d|_qQndS(NiR(R+RRRRR(RRR)R%R&((s+/usr/lib64/python2.7/Demo/parser/example.pyRks	N(R2R3R4R(((s+/usr/lib64/python2.7/Demo/parser/example.pyR
jscCs�|dkri}nt|�tkr?|||d<d|fSt|�tk	ra||k|fSt|�t|�kr�d|fSxBtd||�D].\}}t|||�\}}|s�Pq�q�W||fS(saMatch `data' to `pattern', with variable extraction.

    pattern
        Pattern to match against, possibly containing variables.

    data
        Data to be checked and against which variables are extracted.

    vars
        Dictionary of variables which have already been found.  If not
        provided, an empty dictionary is created.

    The `pattern' value may contain variables of the form ['varname'] which
    are allowed to match anything.  The value that is matched is returned as
    part of a dictionary which maps 'varname' to the matched value.  'varname'
    is not required to be a string object, but using strings makes patterns
    and the code which uses them more readable.

    This function returns two values: a boolean indicating whether a match
    was found and a dictionary mapping variable names to their associated
    values.
    iiN(R4ttypeRRRtmapR(tpatterntdataR&tsame((s+/usr/lib64/python2.7/Demo/parser/example.pyRts	

RRR((('t__doc__RRR ttokenttypesRRRRR5R"R$R
R4Rtstmtt
compound_stmtRtsimple_stmtt
small_stmtt	expr_stmtttestlistttesttand_testtnot_testt
comparisontexprtxor_exprtand_exprt
shift_exprt
arith_exprttermtfactortpowertatomtSTRINGtNEWLINER(((s+/usr/lib64/python2.7/Demo/parser/example.pyt<module>sF	1

+	?PKb1�Z��^�
parser/READMEnu�[���These files are from the large example of using the `parser' module.  Refer
to the Python Library Reference for more information.

It also contains examples for the AST parser.

Files:
------

    FILES        -- list of files associated with the parser module.

    README       -- this file.

    docstring.py -- sample source file containing only a module docstring.

    example.py   -- module that uses the `parser' module to extract
                    information from the parse tree of Python source
                    code.

    simple.py    -- sample source containing a "short form" definition.

    source.py    -- sample source code used to demonstrate ability to
                    handle nested constructs easily using the functions
                    and classes in example.py.

    test_parser.py  program to put the parser module through its paces.

    test_unparse.py tests for the unparse module

    unparse.py      AST (2.7) based example to recreate source code
                    from an AST.

Enjoy!
PKb1�Z�g$$parser/example.pycnu�[����
��^c@s�dZddlZddlZddlZddlZddlZddlmZmZd�Zddd��YZ	ddd��YZ
d	e	e
fd
��YZde	fd��YZd
e	e
fd��YZ
dd�ZejejdgffZejejejejejejejejejejejejejejej ej!ej"ej#ej$dgfffffffffffffffffej%dfffZ&dS(s�Simple code to extract class & function docstrings from a module.

This code is used as an example in the library reference manual in the
section on using the parser module.  Refer to the manual for a thorough
discussion of the operation of this code.
i����N(tListTypet	TupleTypecCsVt|�j�}tjjtjj|�d�}tj|�}t|j	�|�S(s�Retrieve information from the parse tree of a source file.

    fileName
        Name of the file to read Python source code from.
    i(
topentreadtostpathtbasenametsplitexttparsertsuitet
ModuleInfottotuple(tfileNametsourceRtast((s+/usr/lib64/python2.7/Demo/parser/example.pytget_docss"t
SuiteInfoBasecBsVeZdZdZdd�Zd�Zd�Zd�Zd�Z	d�Z
d�ZRS(	tcCs,i|_i|_|r(|j|�ndS(N(t_class_infot_function_infot
_extract_info(tselfttree((s+/usr/lib64/python2.7/Demo/parser/example.pyt__init__!s		cCst|�dkr2ttd|d�\}}ntt|d�\}}|rgt|d�|_nx�|dD]�}tt|�\}}|rr|d}|dtjkr�|dd}t|�|j	|<q|dtj
kr|dd}t|�|j|<qqrqrWdS(Niiit	docstringtcompoundi(
tlentmatchtDOCSTRING_STMT_PATTERNtevalt
_docstringtCOMPOUND_STMT_PATTERNtsymboltfuncdeftFunctionInfoRtclassdeft	ClassInfoR(RRtfoundtvarstnodetcstmttname((s+/usr/lib64/python2.7/Demo/parser/example.pyR's 
cCs|jS(N(R(R((s+/usr/lib64/python2.7/Demo/parser/example.pyt
get_docstring;scCs|jS(N(t_name(R((s+/usr/lib64/python2.7/Demo/parser/example.pytget_name>scCs
|jj�S(N(Rtkeys(R((s+/usr/lib64/python2.7/Demo/parser/example.pytget_class_namesAscCs|j|S(N(R(RR)((s+/usr/lib64/python2.7/Demo/parser/example.pytget_class_infoDscCs/y|j|SWntk
r*|j|SXdS(N(RtKeyErrorR(RR)((s+/usr/lib64/python2.7/Demo/parser/example.pyt__getitem__Gs
N(t__name__t
__module__RR+tNoneRRR*R,R.R/R1(((s+/usr/lib64/python2.7/Demo/parser/example.pyRs					t
SuiteFuncInfocBseZd�Zd�ZRS(cCs
|jj�S(N(RR-(R((s+/usr/lib64/python2.7/Demo/parser/example.pytget_function_namesQscCs|j|S(N(R(RR)((s+/usr/lib64/python2.7/Demo/parser/example.pytget_function_infoTs(R2R3R6R7(((s+/usr/lib64/python2.7/Demo/parser/example.pyR5Ns	R"cBseZdd�ZRS(cCs5|dd|_tj||r*|dp-d�dS(Niii����(R+RRR4(RR((s+/usr/lib64/python2.7/Demo/parser/example.pyRYsN(R2R3R4R(((s+/usr/lib64/python2.7/Demo/parser/example.pyR"XsR$cBs&eZdd�Zd�Zd�ZRS(cCs5|dd|_tj||r*|dp-d�dS(Niii����(R+RRR4(RR((s+/usr/lib64/python2.7/Demo/parser/example.pyR_scCs
|jj�S(N(RR-(R((s+/usr/lib64/python2.7/Demo/parser/example.pytget_method_namescscCs|j|S(N(R(RR)((s+/usr/lib64/python2.7/Demo/parser/example.pytget_method_infofsN(R2R3R4RR8R9(((s+/usr/lib64/python2.7/Demo/parser/example.pyR$^s	R
cBseZddd�ZRS(s<string>cCsU||_tj||�|rQtt|d�\}}|rQ|d|_qQndS(NiR(R+RRRRR(RRR)R%R&((s+/usr/lib64/python2.7/Demo/parser/example.pyRks	N(R2R3R4R(((s+/usr/lib64/python2.7/Demo/parser/example.pyR
jscCs�|dkri}nt|�tkr?|||d<d|fSt|�tk	ra||k|fSt|�t|�kr�d|fSxBtd||�D].\}}t|||�\}}|s�Pq�q�W||fS(saMatch `data' to `pattern', with variable extraction.

    pattern
        Pattern to match against, possibly containing variables.

    data
        Data to be checked and against which variables are extracted.

    vars
        Dictionary of variables which have already been found.  If not
        provided, an empty dictionary is created.

    The `pattern' value may contain variables of the form ['varname'] which
    are allowed to match anything.  The value that is matched is returned as
    part of a dictionary which maps 'varname' to the matched value.  'varname'
    is not required to be a string object, but using strings makes patterns
    and the code which uses them more readable.

    This function returns two values: a boolean indicating whether a match
    was found and a dictionary mapping variable names to their associated
    values.
    iiN(R4ttypeRRRtmapR(tpatterntdataR&tsame((s+/usr/lib64/python2.7/Demo/parser/example.pyRts	

RRR((('t__doc__RRR ttokenttypesRRRRR5R"R$R
R4Rtstmtt
compound_stmtRtsimple_stmtt
small_stmtt	expr_stmtttestlistttesttand_testtnot_testt
comparisontexprtxor_exprtand_exprt
shift_exprt
arith_exprttermtfactortpowertatomtSTRINGtNEWLINER(((s+/usr/lib64/python2.7/Demo/parser/example.pyt<module>sF	1

+	?PKb1�Zqϭparser/simple.pynu�[���def f(): "maybe a docstring"
PKb1�Z����parser/test_unparse.pynu�[���import unittest
from test import test_support
import cStringIO
import sys
import os
import tokenize
import ast
import unparse

def read_pyfile(filename):
    """Read and return the contents of a Python source file (as a
    string), taking into account the file encoding."""
    with open(filename, "r") as pyfile:
        source = pyfile.read()
    return source

for_else = """\
def f():
    for x in range(10):
        break
    else:
        y = 2
    z = 3
"""

while_else = """\
def g():
    while True:
        break
    else:
        y = 2
    z = 3
"""

relative_import = """\
from . import fred
from .. import barney
from .australia import shrimp as prawns
"""

class_decorator = """\
@f1(arg)
@f2
class Foo: pass
"""

elif1 = """\
if cond1:
    suite1
elif cond2:
    suite2
else:
    suite3
"""

elif2 = """\
if cond1:
    suite1
elif cond2:
    suite2
"""

try_except_finally = """\
try:
    suite1
except ex1:
    suite2
except ex2:
    suite3
else:
    suite4
finally:
    suite5
"""

class ASTTestCase(unittest.TestCase):
    def assertASTEqual(self, ast1, ast2):
        dump1 = ast.dump(ast1)
        dump2 = ast.dump(ast2)
        self.assertEqual(ast.dump(ast1), ast.dump(ast2))

    def check_roundtrip(self, code1, filename="internal"):
        ast1 = compile(code1, filename, "exec", ast.PyCF_ONLY_AST)
        unparse_buffer = cStringIO.StringIO()
        unparse.Unparser(ast1, unparse_buffer)
        code2 = unparse_buffer.getvalue()
        ast2 = compile(code2, filename, "exec", ast.PyCF_ONLY_AST)
        self.assertASTEqual(ast1, ast2)

class UnparseTestCase(ASTTestCase):
    # Tests for specific bugs found in earlier versions of unparse

    def test_del_statement(self):
        self.check_roundtrip("del x, y, z")

    def test_shifts(self):
        self.check_roundtrip("45 << 2")
        self.check_roundtrip("13 >> 7")

    def test_for_else(self):
        self.check_roundtrip(for_else)

    def test_while_else(self):
        self.check_roundtrip(while_else)

    def test_unary_parens(self):
        self.check_roundtrip("(-1)**7")
        self.check_roundtrip("(-1.)**8")
        self.check_roundtrip("(-1j)**6")
        self.check_roundtrip("not True or False")
        self.check_roundtrip("True or not False")

    def test_integer_parens(self):
        self.check_roundtrip("3 .__abs__()")

    def test_huge_float(self):
        self.check_roundtrip("1e1000")
        self.check_roundtrip("-1e1000")
        self.check_roundtrip("1e1000j")
        self.check_roundtrip("-1e1000j")

    def test_min_int(self):
        self.check_roundtrip(str(-sys.maxint-1))
        self.check_roundtrip("-(%s)" % (sys.maxint + 1))

    def test_imaginary_literals(self):
        self.check_roundtrip("7j")
        self.check_roundtrip("-7j")
        self.check_roundtrip("-(7j)")
        self.check_roundtrip("0j")
        self.check_roundtrip("-0j")
        self.check_roundtrip("-(0j)")

    def test_negative_zero(self):
        self.check_roundtrip("-0")
        self.check_roundtrip("-(0)")
        self.check_roundtrip("-0b0")
        self.check_roundtrip("-(0b0)")
        self.check_roundtrip("-0o0")
        self.check_roundtrip("-(0o0)")
        self.check_roundtrip("-0x0")
        self.check_roundtrip("-(0x0)")

    def test_lambda_parentheses(self):
        self.check_roundtrip("(lambda: int)()")

    def test_chained_comparisons(self):
        self.check_roundtrip("1 < 4 <= 5")
        self.check_roundtrip("a is b is c is not d")

    def test_function_arguments(self):
        self.check_roundtrip("def f(): pass")
        self.check_roundtrip("def f(a): pass")
        self.check_roundtrip("def f(b = 2): pass")
        self.check_roundtrip("def f(a, b): pass")
        self.check_roundtrip("def f(a, b = 2): pass")
        self.check_roundtrip("def f(a = 5, b = 2): pass")
        self.check_roundtrip("def f(*args, **kwargs): pass")

    def test_relative_import(self):
        self.check_roundtrip(relative_import)

    def test_bytes(self):
        self.check_roundtrip("b'123'")

    def test_set_literal(self):
        self.check_roundtrip("{'a', 'b', 'c'}")

    def test_set_comprehension(self):
        self.check_roundtrip("{x for x in range(5)}")

    def test_dict_comprehension(self):
        self.check_roundtrip("{x: x*x for x in range(10)}")

    def test_class_decorators(self):
        self.check_roundtrip(class_decorator)

    def test_elifs(self):
        self.check_roundtrip(elif1)
        self.check_roundtrip(elif2)

    def test_try_except_finally(self):
        self.check_roundtrip(try_except_finally)

class DirectoryTestCase(ASTTestCase):
    """Test roundtrip behaviour on all files in Lib and Lib/test."""

    # test directories, relative to the root of the distribution
    test_directories = 'Lib', os.path.join('Lib', 'test')

    def test_files(self):
        # get names of files to test
        dist_dir = os.path.join(os.path.dirname(__file__), os.pardir, os.pardir)

        names = []
        for d in self.test_directories:
            test_dir = os.path.join(dist_dir, d)
            for n in os.listdir(test_dir):
                if n.endswith('.py') and not n.startswith('bad'):
                    names.append(os.path.join(test_dir, n))

        for filename in names:
            if test_support.verbose:
                print('Testing %s' % filename)
            source = read_pyfile(filename)
            self.check_roundtrip(source)


def test_main():
    test_support.run_unittest(UnparseTestCase, DirectoryTestCase)

if __name__ == '__main__':
    test_main()
PKb1�Zc���parser/simple.pycnu�[����
��^c@s
d�ZdS(cCsdS(smaybe a docstringN((((s*/usr/lib64/python2.7/Demo/parser/simple.pytftN(R(((s*/usr/lib64/python2.7/Demo/parser/simple.pyt<module>RPKb1�Z�rX��parser/docstring.pyonu�[����
��^c@s
dZdS(sSome documentation.
N(t__doc__(((s-/usr/lib64/python2.7/Demo/parser/docstring.pyt<module>tPKb1�Z$�00parser/source.pycnu�[����
��^c@s&dZddd��YZd�ZdS(s�Exmaple file to be parsed for the parsermodule example.

The classes and functions in this module exist only to exhibit the ability
of the handling information extraction from nested definitions using parse
trees.  They shouldn't interest you otherwise!
tSimplecBs*eZdZd�Zddd��YZRS(sThis class does very little.cCsdS(s This method does almost nothing.i((tself((s*/usr/lib64/python2.7/Demo/parser/source.pytmethodstNestedcBseZdZd�ZRS(sThis is a nested class.cCs
d�}|S(sMethod of Nested class.cSsdS(s#Function in method of Nested class.N((((s*/usr/lib64/python2.7/Demo/parser/source.pytnested_functions((RR((s*/usr/lib64/python2.7/Demo/parser/source.pyt
nested_methods	(t__name__t
__module__t__doc__R(((s*/usr/lib64/python2.7/Demo/parser/source.pyRs((RRRRR(((s*/usr/lib64/python2.7/Demo/parser/source.pyRs	cCsdS(s(This function lives at the module level.i((((s*/usr/lib64/python2.7/Demo/parser/source.pytfunctionsN((RRR	(((s*/usr/lib64/python2.7/Demo/parser/source.pyt<module>sPKb1�Zn6���parser/test_parser.pynuȯ��#! /usr/bin/python2.7
#  (Force the script to use the latest build.)
#
#  test_parser.py

import parser, traceback

_numFailed = 0

def testChunk(t, fileName):
    global _numFailed
    print '----', fileName,
    try:
        st = parser.suite(t)
        tup = parser.st2tuple(st)
        # this discards the first ST; a huge memory savings when running
        # against a large source file like Tkinter.py.
        st = None
        new = parser.tuple2st(tup)
    except parser.ParserError, err:
        print
        print 'parser module raised exception on input file', fileName + ':'
        traceback.print_exc()
        _numFailed = _numFailed + 1
    else:
        if tup != parser.st2tuple(new):
            print
            print 'parser module failed on input file', fileName
            _numFailed = _numFailed + 1
        else:
            print 'o.k.'

def testFile(fileName):
    t = open(fileName).read()
    testChunk(t, fileName)

def test():
    import sys
    args = sys.argv[1:]
    if not args:
        import glob
        args = glob.glob("*.py")
        args.sort()
    map(testFile, args)
    sys.exit(_numFailed != 0)

if __name__ == '__main__':
    test()
PKb1�Zɣ�=�]�]parser/unparse.pycnu�[����
��^c@s�dZddlZddlZddlZddlZdeejjd�Zd�Z	dfd��YZ
ejd�Zd	�Z
d
�Zedkr�eejd�ndS(s'Usage: unparse.py <path to source file>i����Nt1eicCsZt|�}y|t|��Wntk
r3n#Xx|D]}|�||�q;WdS(s<Call f on each item in seq, calling inter() in between.
    N(titertnextt
StopIteration(tintertftseqtx((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt
interleaves

tUnparsercBseZdZejd�Zdd�Zd�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
d�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!d�Z"d �Z#d!�Z$d"�Z%d#�Z&d$�Z'd%�Z(d&�Z)d'�Z*d(�Z+d)�Z,d*�Z-d+�Z.d,�Z/d-�Z0d.�Z1d/�Z2id0d16d2d36d4d56d6d76Z3d8�Z4id4d96d6d:6d;d<6d=d>6d?d@6dAdB6dCdD6dEdF6dGdH6dIdJ6dKdL6dMdN6Z5dO�Z6i
dPdQ6dRdS6dTdU6dVdW6dXdY6dZd[6d\d]6d^d_6d`da6dbdc6Z7dd�Z8idee9j:6dfe9j;6Z<dg�Z=dh�Z>di�Z?dj�Z@dk�ZAdl�ZBdm�ZCdn�ZDdo�ZEdp�ZFdq�ZGdr�ZHRS(ss�Methods in this class recursively traverse an AST and
    output source code for the abstract syntax; original formatting
    is disregarded. cCsI||_g|_d|_|j|�|jjd�|jj�dS(sTUnparser(tree, file=sys.stdout) -> None.
         Print the source for tree to file.itN(Rtfuture_importst_indenttdispatchtwritetflush(tselfttreetfile((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt__init__s			
R
cCs#|jjdd|j|�dS(sBIndent a piece of text, according to the current indentation levels
s    N(RRR(Rttext((s+/usr/lib64/python2.7/Demo/parser/unparse.pytfill'scCs|jj|�dS(s+Append a piece of text to the current line.N(RR(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyR+scCs |jd�|jd7_dS(s(Print ':', and increase the indentation.t:iN(RR(R((s+/usr/lib64/python2.7/Demo/parser/unparse.pytenter/s
cCs|jd8_dS(sDecrease the indentation level.iN(R(R((s+/usr/lib64/python2.7/Demo/parser/unparse.pytleave4scCsXt|t�r1x|D]}|j|�qWdSt|d|jj�}||�dS(s:Dispatcher function, dispatching tree type T to method _T.Nt_(t
isinstancetlistR
tgetattrt	__class__t__name__(RRtttmeth((s+/usr/lib64/python2.7/Demo/parser/unparse.pyR
8s
cCs%x|jD]}|j|�q
WdS(N(tbodyR
(RRtstmt((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_ModuleIscCs|j�|j|j�dS(N(RR
tvalue(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_ExprNs
cs0�jd�t�fd��j|j�dS(Nsimport cs
�jd�S(Ns, (R((R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyt<lambda>TR
(RRR
tnames(RR((Rs+/usr/lib64/python2.7/Demo/parser/unparse.pyt_ImportRs
cs�|jr8|jdkr8�jjd�|jD��n�jd��jd|j�|jru�j|j�n�jd�t�fd��j|j�dS(Nt
__future__css|]}|jVqdS(N(tname(t.0tn((s+/usr/lib64/python2.7/Demo/parser/unparse.pys	<genexpr>Yssfrom t.s import cs
�jd�S(Ns, (R((R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyR&`R
(	tmoduleRtextendR'RRtlevelRR
(RR((Rs+/usr/lib64/python2.7/Demo/parser/unparse.pyt_ImportFromVs 
	
cCsL|j�x+|jD] }|j|�|jd�qW|j|j�dS(Ns = (RttargetsR
RR$(RRttarget((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Assignbs


cCsS|j�|j|j�|jd|j|jjjd�|j|j�dS(Nt s= (	RR
R3RtbinoptopRRR$(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt
_AugAssignis
%cCs:|jd�|jr6|jd�|j|j�ndS(NtreturnR5(RR$RR
(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Returnos
	
cCs|jd�dS(Ntpass(R(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_PassuscCs|jd�dS(Ntbreak(R(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_BreakxscCs|jd�dS(Ntcontinue(R(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt	_Continue{scs0�jd�t�fd��j|j�dS(Nsdel cs
�jd�S(Ns, (R((R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyR&�R
(RRR
R2(RR((Rs+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Delete~s
cCsJ|jd�|j|j�|jrF|jd�|j|j�ndS(Nsassert s, (RR
ttesttmsgR(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Assert�s

	
cCss|jd�|j|j�|jrF|jd�|j|j�n|jro|jd�|j|j�ndS(Nsexec s in s, (RR
R!tglobalsRtlocals(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Exec�s
	
	
cCs�|jd�t}|jrB|jd�|j|j�t}nx:|jD]/}|rh|jd�nt}|j|�qLW|js�|jd�ndS(Nsprint s>>s, t,(RtFalsetdestRR
tTruetvaluestnl(RRtdo_commate((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Print�s
	
		cs0�jd�t�fd��j|j�dS(Nsglobal cs
�jd�S(Ns, (R((R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyR&�R
(RRRR'(RR((Rs+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Global�s
cCsT|jd�|jd�|jrC|jd�|j|j�n|jd�dS(Nt(tyieldR5t)(RR$R
(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Yield�s

	
cCs|jd�|jr)|j|j�n|jrR|jd�|j|j�n|jr{|jd�|j|j�ndS(Nsraise s, (RttypeR
tinstRttback(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Raise�s
		
	
cCs�|jd�|j�|j|j�|j�x|jD]}|j|�q;W|jr�|jd�|j�|j|j�|j�ndS(Nttrytelse(RRR
R!Rthandlerstorelse(RRtex((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt
_TryExcept�s


	

cCs�t|j�dkrAt|jdtj�rA|j|j�n1|jd�|j�|j|j�|j�|jd�|j�|j|j	�|j�dS(NiiRZtfinally(
tlenR!Rtastt	TryExceptR
RRRt	finalbody(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_TryFinally�s.




cCs�|jd�|jr6|jd�|j|j�n|jr_|jd�|j|j�n|j�|j|j�|j�dS(NtexceptR5s as (RRVRR
R*RR!R(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_ExceptHandler�s
	
	

cCs�|jd�x+|jD] }|jd�|j|�qW|jd|j�|jr�|jd�x+|jD] }|j|�|jd�qoW|jd�n|j�|j|j�|j�dS(Ns
t@sclass RRs, RT(	Rtdecorator_listRR
R*tbasesRR!R(RRtdecota((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt	_ClassDef�s

	


cCs�|jd�x+|jD] }|jd�|j|�qW|jd|jd�|j|j�|jd�|j�|j|j�|j�dS(Ns
Rhsdef RRRT(	RRiRR
R*targsRR!R(RRRk((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_FunctionDef�s



cCs�|jd�|j|j�|jd�|j|j�|j�|j|j�|j�|jr�|jd�|j�|j|j�|j�ndS(Nsfor s in R[(	RR
R3RRRR!RR](RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_For�s



	

cCs|jd�|j|j�|j�|j|j�|j�x�|jr�t|j�dkr�t|jdt	j
�r�|jd}|jd�|j|j�|j�|j|j�|j�qDW|jr
|jd�|j�|j|j�|j�ndS(Nsif iiselif R[(RR
RBRR!RR]RaRRbtIf(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Ifs$


!


	

cCs�|jd�|j|j�|j�|j|j�|j�|jr~|jd�|j�|j|j�|j�ndS(Nswhile R[(RR
RBRR!RR](RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_While!s


	

cCsn|jd�|j|j�|jrF|jd�|j|j�n|j�|j|j�|j�dS(Nswith s as (RR
tcontext_exprt
optional_varsRRR!R(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_With-s
	

cCs�d|jkr(|jt|j��nut|jt�rW|jdt|j��nFt|jt�r�|jt|j�jd��nts�t	d��dS(Ntunicode_literalstbtusshouldn't get here(
RRtreprtsRtstrtunicodetlstripRItAssertionError(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Str8s"cCs|j|j�dS(N(Rtid(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_NameEscCs.|jd�|j|j�|jd�dS(Nt`(RR
R$(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_ReprHs
cCsjt|j�}|jd�r.|jd�n|j|jdt��|jd�rf|jd�ndS(Nt-RRtinfRT(RzR,t
startswithRtreplacetINFSTR(RRtrepr_n((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_NumMscs=�jd�t�fd��j|j��jd�dS(Nt[cs
�jd�S(Ns, (R((R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyR&YR
t](RRR
telts(RR((Rs+/usr/lib64/python2.7/Demo/parser/unparse.pyt_ListWs
cCsO|jd�|j|j�x|jD]}|j|�q'W|jd�dS(NR�R�(RR
teltt
generators(RRtgen((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt	_ListComp\s

cCsO|jd�|j|j�x|jD]}|j|�q'W|jd�dS(NRRRT(RR
R�R�(RRR�((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt
_GeneratorExpcs

cCsO|jd�|j|j�x|jD]}|j|�q'W|jd�dS(Nt{t}(RR
R�R�(RRR�((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_SetCompjs

cCsl|jd�|j|j�|jd�|j|j�x|jD]}|j|�qDW|jd�dS(NR�s: R�(RR
tkeyR$R�(RRR�((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt	_DictCompqs

cCsl|jd�|j|j�|jd�|j|j�x+|jD] }|jd�|j|�qDWdS(Ns for s in s if (RR
R3Rtifs(RRt	if_clause((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_comprehensionzs


cCsh|jd�|j|j�|jd�|j|j�|jd�|j|j�|jd�dS(NRRs if s else RT(RR
R!RBR](RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_IfExp�s


csL|jst��jd�t�fd��j|j��jd�dS(NR�cs
�jd�S(Ns, (R((R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyR&�R
R�(R�RRRR
(RR((Rs+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Set�s
csU�jd��fd�}t�fd�|t|j|j���jd�dS(NR�cs7|\}}�j|��jd��j|�dS(Ns: (R
R(tpairtktv(R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyt
write_pair�s

cs
�jd�S(Ns, (R((R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyR&�R
R�(RRtziptkeysRL(RRR�((Rs+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Dict�s
(cs{�jd�t|j�dkrK|j\}�j|��jd�nt�fd��j|j��jd�dS(NRRiRHcs
�jd�S(Ns, (R((R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyR&�R
RT(RRaR�R
R(RRR�((Rs+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Tuple�s

t~tInverttnottNott+tUAddR�tUSubcCs�|jd�|j|j|jjj�|jd�t|jtj�r�t|jtj	�r�|jd�|j
|j�|jd�n|j
|j�|jd�dS(NRRR5RT(RtunopR7RRRRbR�toperandtNumR
(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_UnaryOp�s

*
tAddtSubt*tMultt/tDivt%tMods<<tLShifts>>tRShiftt|tBitOrt^tBitXort&tBitAnds//tFloorDivs**tPowcCsc|jd�|j|j�|jd|j|jjjd�|j|j�|jd�dS(NRRR5RT(RR
tleftR6R7RRtright(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_BinOp�s

%s==tEqs!=tNotEqt<tLts<=tLtEt>tGts>=tGtEtistIssis nottIsNottintInsnot intNotIncCs�|jd�|j|j�xRt|j|j�D];\}}|jd|j|jjd�|j|�q3W|jd�dS(NRRR5RT(	RR
R�R�topstcomparatorstcmpopsRR(RRtoRO((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Compare�s
""tandtorcsW�jd�d�j|jj�t��fd��j|j��jd�dS(NRRs %s cs
�j��S(N(R((R{R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyR&�R
RT(RtboolopsR7RRR
RL(RR((R{Rs+/usr/lib64/python2.7/Demo/parser/unparse.pyt_BoolOp�s
"cCsk|j|j�t|jtj�rJt|jjt�rJ|jd�n|jd�|j|j�dS(NR5R-(	R
R$RRbR�R,tintRtattr(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt
_Attribute�s
*
cCs8|j|j�|jd�t}x:|jD]/}|rI|jd�nt}|j|�q-Wx:|jD]/}|r�|jd�nt}|j|�qjW|jr�|r�|jd�nt}|jd�|j|j�n|jr'|r|jd�nt}|jd�|j|j�n|jd�dS(NRRs, R�s**RT(	R
tfuncRRIRnRKtkeywordststarargstkwargs(RRtcommaRO((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Call�s4
	
	
cCs>|j|j�|jd�|j|j�|jd�dS(NR�R�(R
R$Rtslice(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt
_Subscript�s
cCs|jd�dS(Ns...(R(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt	_Ellipsis�scCs|j|j�dS(N(R
R$(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Index�scCsr|jr|j|j�n|jd�|jrE|j|j�n|jrn|jd�|j|j�ndS(NR(tlowerR
Rtuppertstep(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Slices	
		
cs#t�fd��j|j�dS(Ncs
�jd�S(Ns, (R((R(s+/usr/lib64/python2.7/Demo/parser/unparse.pyR&
R
(RR
tdims(RR((Rs+/usr/lib64/python2.7/Demo/parser/unparse.pyt	_ExtSlicescCs't}dgt|j�t|j�|j}xot|j|�D][\}}|r^t}n
|jd�|j|�f|rC|jd�|j|�qCqCW|j	r�|r�t}n
|jd�|jd�|j|j	�n|j
r#|r�t}n
|jd�|jd|j
�ndS(Ns, t=R�s**(RKtNoneRaRntdefaultsR�RIRR
tvarargtkwarg(RRtfirstR�Rltd((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt
_argumentss**	

		

		
cCs1|j|j�|jd�|j|j�dS(NR�(RtargR
R$(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_keyword)s
cCsX|jd�|jd�|j|j�|jd�|j|j�|jd�dS(NRRslambda s: RT(RR
RnR!(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_Lambda.s


cCs4|j|j�|jr0|jd|j�ndS(Ns as (RR*tasname(RR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt_alias6s	(IRt
__module__t__doc__tsyststdoutRRRRRR
R#R%R(R1R4R8R:R<R>R@RARDRGRPRQRURYR_ReRgRmRoRpRrRsRvR�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R6R�R�R�RbtAndtOrR�R�R�R�R�R�R�R�R�R�R�R�R�(((s+/usr/lib64/python2.7/Demo/parser/unparse.pyR	s�
																	
														
			
												
	
"	&#	-			
					
				cCsMt|d��}|j�}WdQXt||dtj�}t||�dS(Ntrtexec(topentreadtcompileRbt
PyCF_ONLY_ASTR	(tfilenametoutputtpyfiletsourceR((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt	roundtrip;scCsy5gtj|�D]}|jd�r|^q}Wn%tk
r\tjjd|�n�Xx�|D]�}tjj||�}tjj	|�r�t
j�}d|GHyt||�Wq�t
k
r�}dt|�GHq�Xqdtjj|�rdt|�qdqdWdS(Ns.pysDirectory not readable: %ss
Testing %ss$  Failed to compile, exception is %s(tostlistdirtendswithtOSErrorRtstderrRtpathtjointisfilet	cStringIOtStringIORt	ExceptionRztisdirttestdir(RlR,R'tfullnameRRO((s+/usr/lib64/python2.7/Demo/parser/unparse.pyRCs5

	cCsQ|ddkr2x:|dD]}t|�qWnx|D]}t|�q9WdS(Nis	--testdiri(RR(RnRl((s+/usr/lib64/python2.7/Demo/parser/unparse.pytmainUs

t__main__(R�RRbRRRzt
float_infot
max_10_expR�RR	RRRRRtargv(((s+/usr/lib64/python2.7/Demo/parser/unparse.pyt<module>s	
��%		PKb1�Z6�4?�!�!parser/test_unparse.pyonu�[����
��^c@s�ddlZddlmZddlZddlZddlZddlZddlZddlZd�Z	dZ
dZdZdZ
dZd	Zd
Zdejfd��YZd
efd��YZdefd��YZd�Zedkr�e�ndS(i����N(ttest_supportcCs(t|d��}|j�}WdQX|S(snRead and return the contents of a Python source file (as a
    string), taking into account the file encoding.trN(topentread(tfilenametpyfiletsource((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pytread_pyfile
ssQdef f():
    for x in range(10):
        break
    else:
        y = 2
    z = 3
sIdef g():
    while True:
        break
    else:
        y = 2
    z = 3
sQfrom . import fred
from .. import barney
from .australia import shrimp as prawns
s@f1(arg)
@f2
class Foo: pass
s=if cond1:
    suite1
elif cond2:
    suite2
else:
    suite3
s,if cond1:
    suite1
elif cond2:
    suite2
sctry:
    suite1
except ex1:
    suite2
except ex2:
    suite3
else:
    suite4
finally:
    suite5
tASTTestCasecBseZd�Zdd�ZRS(cCsDtj|�}tj|�}|jtj|�tj|��dS(N(tasttdumptassertEqual(tselftast1tast2tdump1tdump2((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pytassertASTEqualMstinternalcCslt||dtj�}tj�}tj||�|j�}t||dtj�}|j||�dS(Ntexec(	tcompileR	t
PyCF_ONLY_ASTt	cStringIOtStringIOtunparsetUnparsertgetvalueR(Rtcode1RR
tunparse_buffertcode2R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pytcheck_roundtripRs(t__name__t
__module__RR(((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyRLs	tUnparseTestCasecBs�eZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZRS(cCs|jd�dS(Nsdel x, y, z(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_del_statement]scCs|jd�|jd�dS(Ns45 << 2s13 >> 7(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_shifts`s
cCs|jt�dS(N(Rtfor_else(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyt
test_for_elsedscCs|jt�dS(N(Rt
while_else(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_while_elsegscCsE|jd�|jd�|jd�|jd�|jd�dS(Ns(-1)**7s(-1.)**8s(-1j)**6snot True or FalsesTrue or not False(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_unary_parensjs




cCs|jd�dS(Ns3 .__abs__()(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_integer_parensqscCs8|jd�|jd�|jd�|jd�dS(Nt1e1000s-1e1000t1e1000js-1e1000j(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_huge_floatts


cCs7|jttjd��|jdtjd�dS(Nis-(%s)(Rtstrtsystmaxint(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_min_intzscCsR|jd�|jd�|jd�|jd�|jd�|jd�dS(Nt7js-7js-(7j)t0js-0js-(0j)(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_imaginary_literals~s




cCsl|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�dS(	Ns-0s-(0)s-0b0s-(0b0)s-0o0s-(0o0)s-0x0s-(0x0)(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_negative_zero�s






cCs|jd�dS(Ns(lambda: int)()(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_lambda_parentheses�scCs|jd�|jd�dS(Ns
1 < 4 <= 5sa is b is c is not d(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_chained_comparisons�s
cCs_|jd�|jd�|jd�|jd�|jd�|jd�|jd�dS(Ns
def f(): passsdef f(a): passsdef f(b = 2): passsdef f(a, b): passsdef f(a, b = 2): passsdef f(a = 5, b = 2): passsdef f(*args, **kwargs): pass(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_function_arguments�s





cCs|jt�dS(N(Rtrelative_import(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_relative_import�scCs|jd�dS(Nsb'123'(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyt
test_bytes�scCs|jd�dS(Ns{'a', 'b', 'c'}(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_set_literal�scCs|jd�dS(Ns{x for x in range(5)}(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_set_comprehension�scCs|jd�dS(Ns{x: x*x for x in range(10)}(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_dict_comprehension�scCs|jt�dS(N(Rtclass_decorator(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_class_decorators�scCs|jt�|jt�dS(N(Rtelif1telif2(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyt
test_elifs�s
cCs|jt�dS(N(Rttry_except_finally(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_try_except_finally�s(RR R"R#R%R'R(R)R,R0R3R4R5R6R7R9R:R;R<R=R?RBRD(((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyR!Zs*										
											tDirectoryTestCasecBs2eZdZdejjdd�fZd�ZRS(s:Test roundtrip behaviour on all files in Lib and Lib/test.tLibttestcCs�tjjtjjt�tjtj�}g}x~|jD]s}tjj||�}xUtj|�D]D}|jd�re|j	d�re|j
tjj||��qeqeWq:Wx<|D]4}tjr�d|GHnt
|�}|j|�q�WdS(Ns.pytbads
Testing %s(tostpathtjointdirnamet__file__tpardirttest_directoriestlistdirtendswitht
startswithtappendRtverboseRR(Rtdist_dirtnamestdttest_dirtnRR((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyt
test_files�s*'
	(RR t__doc__RIRJRKRORZ(((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyRE�scCstjtt�dS(N(Rtrun_unittestR!RE(((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyt	test_main�st__main__(tunittestRGRRR.RIttokenizeR	RRR$R&R8R>R@RARCtTestCaseRR!RER]R(((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyt<module>s*			
_	PKb1�Z6�4?�!�!parser/test_unparse.pycnu�[����
��^c@s�ddlZddlmZddlZddlZddlZddlZddlZddlZd�Z	dZ
dZdZdZ
dZd	Zd
Zdejfd��YZd
efd��YZdefd��YZd�Zedkr�e�ndS(i����N(ttest_supportcCs(t|d��}|j�}WdQX|S(snRead and return the contents of a Python source file (as a
    string), taking into account the file encoding.trN(topentread(tfilenametpyfiletsource((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pytread_pyfile
ssQdef f():
    for x in range(10):
        break
    else:
        y = 2
    z = 3
sIdef g():
    while True:
        break
    else:
        y = 2
    z = 3
sQfrom . import fred
from .. import barney
from .australia import shrimp as prawns
s@f1(arg)
@f2
class Foo: pass
s=if cond1:
    suite1
elif cond2:
    suite2
else:
    suite3
s,if cond1:
    suite1
elif cond2:
    suite2
sctry:
    suite1
except ex1:
    suite2
except ex2:
    suite3
else:
    suite4
finally:
    suite5
tASTTestCasecBseZd�Zdd�ZRS(cCsDtj|�}tj|�}|jtj|�tj|��dS(N(tasttdumptassertEqual(tselftast1tast2tdump1tdump2((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pytassertASTEqualMstinternalcCslt||dtj�}tj�}tj||�|j�}t||dtj�}|j||�dS(Ntexec(	tcompileR	t
PyCF_ONLY_ASTt	cStringIOtStringIOtunparsetUnparsertgetvalueR(Rtcode1RR
tunparse_buffertcode2R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pytcheck_roundtripRs(t__name__t
__module__RR(((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyRLs	tUnparseTestCasecBs�eZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZRS(cCs|jd�dS(Nsdel x, y, z(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_del_statement]scCs|jd�|jd�dS(Ns45 << 2s13 >> 7(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_shifts`s
cCs|jt�dS(N(Rtfor_else(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyt
test_for_elsedscCs|jt�dS(N(Rt
while_else(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_while_elsegscCsE|jd�|jd�|jd�|jd�|jd�dS(Ns(-1)**7s(-1.)**8s(-1j)**6snot True or FalsesTrue or not False(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_unary_parensjs




cCs|jd�dS(Ns3 .__abs__()(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_integer_parensqscCs8|jd�|jd�|jd�|jd�dS(Nt1e1000s-1e1000t1e1000js-1e1000j(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_huge_floatts


cCs7|jttjd��|jdtjd�dS(Nis-(%s)(Rtstrtsystmaxint(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_min_intzscCsR|jd�|jd�|jd�|jd�|jd�|jd�dS(Nt7js-7js-(7j)t0js-0js-(0j)(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_imaginary_literals~s




cCsl|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�dS(	Ns-0s-(0)s-0b0s-(0b0)s-0o0s-(0o0)s-0x0s-(0x0)(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_negative_zero�s






cCs|jd�dS(Ns(lambda: int)()(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_lambda_parentheses�scCs|jd�|jd�dS(Ns
1 < 4 <= 5sa is b is c is not d(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_chained_comparisons�s
cCs_|jd�|jd�|jd�|jd�|jd�|jd�|jd�dS(Ns
def f(): passsdef f(a): passsdef f(b = 2): passsdef f(a, b): passsdef f(a, b = 2): passsdef f(a = 5, b = 2): passsdef f(*args, **kwargs): pass(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_function_arguments�s





cCs|jt�dS(N(Rtrelative_import(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_relative_import�scCs|jd�dS(Nsb'123'(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyt
test_bytes�scCs|jd�dS(Ns{'a', 'b', 'c'}(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_set_literal�scCs|jd�dS(Ns{x for x in range(5)}(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_set_comprehension�scCs|jd�dS(Ns{x: x*x for x in range(10)}(R(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_dict_comprehension�scCs|jt�dS(N(Rtclass_decorator(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_class_decorators�scCs|jt�|jt�dS(N(Rtelif1telif2(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyt
test_elifs�s
cCs|jt�dS(N(Rttry_except_finally(R((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyttest_try_except_finally�s(RR R"R#R%R'R(R)R,R0R3R4R5R6R7R9R:R;R<R=R?RBRD(((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyR!Zs*										
											tDirectoryTestCasecBs2eZdZdejjdd�fZd�ZRS(s:Test roundtrip behaviour on all files in Lib and Lib/test.tLibttestcCs�tjjtjjt�tjtj�}g}x~|jD]s}tjj||�}xUtj|�D]D}|jd�re|j	d�re|j
tjj||��qeqeWq:Wx<|D]4}tjr�d|GHnt
|�}|j|�q�WdS(Ns.pytbads
Testing %s(tostpathtjointdirnamet__file__tpardirttest_directoriestlistdirtendswitht
startswithtappendRtverboseRR(Rtdist_dirtnamestdttest_dirtnRR((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyt
test_files�s*'
	(RR t__doc__RIRJRKRORZ(((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyRE�scCstjtt�dS(N(Rtrun_unittestR!RE(((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyt	test_main�st__main__(tunittestRGRRR.RIttokenizeR	RRR$R&R8R>R@RARCtTestCaseRR!RER]R(((s0/usr/lib64/python2.7/Demo/parser/test_unparse.pyt<module>s*			
_	PKb1�Z'�njCjCparser/unparse.pynu�[���"Usage: unparse.py <path to source file>"
import sys
import ast
import cStringIO
import os

# Large float and imaginary literals get turned into infinities in the AST.
# We unparse those infinities to INFSTR.
INFSTR = "1e" + repr(sys.float_info.max_10_exp + 1)

def interleave(inter, f, seq):
    """Call f on each item in seq, calling inter() in between.
    """
    seq = iter(seq)
    try:
        f(next(seq))
    except StopIteration:
        pass
    else:
        for x in seq:
            inter()
            f(x)

class Unparser:
    """Methods in this class recursively traverse an AST and
    output source code for the abstract syntax; original formatting
    is disregarded. """

    def __init__(self, tree, file = sys.stdout):
        """Unparser(tree, file=sys.stdout) -> None.
         Print the source for tree to file."""
        self.f = file
        self.future_imports = []
        self._indent = 0
        self.dispatch(tree)
        self.f.write("")
        self.f.flush()

    def fill(self, text = ""):
        "Indent a piece of text, according to the current indentation level"
        self.f.write("\n"+"    "*self._indent + text)

    def write(self, text):
        "Append a piece of text to the current line."
        self.f.write(text)

    def enter(self):
        "Print ':', and increase the indentation."
        self.write(":")
        self._indent += 1

    def leave(self):
        "Decrease the indentation level."
        self._indent -= 1

    def dispatch(self, tree):
        "Dispatcher function, dispatching tree type T to method _T."
        if isinstance(tree, list):
            for t in tree:
                self.dispatch(t)
            return
        meth = getattr(self, "_"+tree.__class__.__name__)
        meth(tree)


    ############### Unparsing methods ######################
    # There should be one method per concrete grammar type #
    # Constructors should be grouped by sum type. Ideally, #
    # this would follow the order in the grammar, but      #
    # currently doesn't.                                   #
    ########################################################

    def _Module(self, tree):
        for stmt in tree.body:
            self.dispatch(stmt)

    # stmt
    def _Expr(self, tree):
        self.fill()
        self.dispatch(tree.value)

    def _Import(self, t):
        self.fill("import ")
        interleave(lambda: self.write(", "), self.dispatch, t.names)

    def _ImportFrom(self, t):
        # A from __future__ import may affect unparsing, so record it.
        if t.module and t.module == '__future__':
            self.future_imports.extend(n.name for n in t.names)

        self.fill("from ")
        self.write("." * t.level)
        if t.module:
            self.write(t.module)
        self.write(" import ")
        interleave(lambda: self.write(", "), self.dispatch, t.names)

    def _Assign(self, t):
        self.fill()
        for target in t.targets:
            self.dispatch(target)
            self.write(" = ")
        self.dispatch(t.value)

    def _AugAssign(self, t):
        self.fill()
        self.dispatch(t.target)
        self.write(" "+self.binop[t.op.__class__.__name__]+"= ")
        self.dispatch(t.value)

    def _Return(self, t):
        self.fill("return")
        if t.value:
            self.write(" ")
            self.dispatch(t.value)

    def _Pass(self, t):
        self.fill("pass")

    def _Break(self, t):
        self.fill("break")

    def _Continue(self, t):
        self.fill("continue")

    def _Delete(self, t):
        self.fill("del ")
        interleave(lambda: self.write(", "), self.dispatch, t.targets)

    def _Assert(self, t):
        self.fill("assert ")
        self.dispatch(t.test)
        if t.msg:
            self.write(", ")
            self.dispatch(t.msg)

    def _Exec(self, t):
        self.fill("exec ")
        self.dispatch(t.body)
        if t.globals:
            self.write(" in ")
            self.dispatch(t.globals)
        if t.locals:
            self.write(", ")
            self.dispatch(t.locals)

    def _Print(self, t):
        self.fill("print ")
        do_comma = False
        if t.dest:
            self.write(">>")
            self.dispatch(t.dest)
            do_comma = True
        for e in t.values:
            if do_comma:self.write(", ")
            else:do_comma=True
            self.dispatch(e)
        if not t.nl:
            self.write(",")

    def _Global(self, t):
        self.fill("global ")
        interleave(lambda: self.write(", "), self.write, t.names)

    def _Yield(self, t):
        self.write("(")
        self.write("yield")
        if t.value:
            self.write(" ")
            self.dispatch(t.value)
        self.write(")")

    def _Raise(self, t):
        self.fill('raise ')
        if t.type:
            self.dispatch(t.type)
        if t.inst:
            self.write(", ")
            self.dispatch(t.inst)
        if t.tback:
            self.write(", ")
            self.dispatch(t.tback)

    def _TryExcept(self, t):
        self.fill("try")
        self.enter()
        self.dispatch(t.body)
        self.leave()

        for ex in t.handlers:
            self.dispatch(ex)
        if t.orelse:
            self.fill("else")
            self.enter()
            self.dispatch(t.orelse)
            self.leave()

    def _TryFinally(self, t):
        if len(t.body) == 1 and isinstance(t.body[0], ast.TryExcept):
            # try-except-finally
            self.dispatch(t.body)
        else:
            self.fill("try")
            self.enter()
            self.dispatch(t.body)
            self.leave()

        self.fill("finally")
        self.enter()
        self.dispatch(t.finalbody)
        self.leave()

    def _ExceptHandler(self, t):
        self.fill("except")
        if t.type:
            self.write(" ")
            self.dispatch(t.type)
        if t.name:
            self.write(" as ")
            self.dispatch(t.name)
        self.enter()
        self.dispatch(t.body)
        self.leave()

    def _ClassDef(self, t):
        self.write("\n")
        for deco in t.decorator_list:
            self.fill("@")
            self.dispatch(deco)
        self.fill("class "+t.name)
        if t.bases:
            self.write("(")
            for a in t.bases:
                self.dispatch(a)
                self.write(", ")
            self.write(")")
        self.enter()
        self.dispatch(t.body)
        self.leave()

    def _FunctionDef(self, t):
        self.write("\n")
        for deco in t.decorator_list:
            self.fill("@")
            self.dispatch(deco)
        self.fill("def "+t.name + "(")
        self.dispatch(t.args)
        self.write(")")
        self.enter()
        self.dispatch(t.body)
        self.leave()

    def _For(self, t):
        self.fill("for ")
        self.dispatch(t.target)
        self.write(" in ")
        self.dispatch(t.iter)
        self.enter()
        self.dispatch(t.body)
        self.leave()
        if t.orelse:
            self.fill("else")
            self.enter()
            self.dispatch(t.orelse)
            self.leave()

    def _If(self, t):
        self.fill("if ")
        self.dispatch(t.test)
        self.enter()
        self.dispatch(t.body)
        self.leave()
        # collapse nested ifs into equivalent elifs.
        while (t.orelse and len(t.orelse) == 1 and
               isinstance(t.orelse[0], ast.If)):
            t = t.orelse[0]
            self.fill("elif ")
            self.dispatch(t.test)
            self.enter()
            self.dispatch(t.body)
            self.leave()
        # final else
        if t.orelse:
            self.fill("else")
            self.enter()
            self.dispatch(t.orelse)
            self.leave()

    def _While(self, t):
        self.fill("while ")
        self.dispatch(t.test)
        self.enter()
        self.dispatch(t.body)
        self.leave()
        if t.orelse:
            self.fill("else")
            self.enter()
            self.dispatch(t.orelse)
            self.leave()

    def _With(self, t):
        self.fill("with ")
        self.dispatch(t.context_expr)
        if t.optional_vars:
            self.write(" as ")
            self.dispatch(t.optional_vars)
        self.enter()
        self.dispatch(t.body)
        self.leave()

    # expr
    def _Str(self, tree):
        # if from __future__ import unicode_literals is in effect,
        # then we want to output string literals using a 'b' prefix
        # and unicode literals with no prefix.
        if "unicode_literals" not in self.future_imports:
            self.write(repr(tree.s))
        elif isinstance(tree.s, str):
            self.write("b" + repr(tree.s))
        elif isinstance(tree.s, unicode):
            self.write(repr(tree.s).lstrip("u"))
        else:
            assert False, "shouldn't get here"

    def _Name(self, t):
        self.write(t.id)

    def _Repr(self, t):
        self.write("`")
        self.dispatch(t.value)
        self.write("`")

    def _Num(self, t):
        repr_n = repr(t.n)
        # Parenthesize negative numbers, to avoid turning (-1)**2 into -1**2.
        if repr_n.startswith("-"):
            self.write("(")
        # Substitute overflowing decimal literal for AST infinities.
        self.write(repr_n.replace("inf", INFSTR))
        if repr_n.startswith("-"):
            self.write(")")

    def _List(self, t):
        self.write("[")
        interleave(lambda: self.write(", "), self.dispatch, t.elts)
        self.write("]")

    def _ListComp(self, t):
        self.write("[")
        self.dispatch(t.elt)
        for gen in t.generators:
            self.dispatch(gen)
        self.write("]")

    def _GeneratorExp(self, t):
        self.write("(")
        self.dispatch(t.elt)
        for gen in t.generators:
            self.dispatch(gen)
        self.write(")")

    def _SetComp(self, t):
        self.write("{")
        self.dispatch(t.elt)
        for gen in t.generators:
            self.dispatch(gen)
        self.write("}")

    def _DictComp(self, t):
        self.write("{")
        self.dispatch(t.key)
        self.write(": ")
        self.dispatch(t.value)
        for gen in t.generators:
            self.dispatch(gen)
        self.write("}")

    def _comprehension(self, t):
        self.write(" for ")
        self.dispatch(t.target)
        self.write(" in ")
        self.dispatch(t.iter)
        for if_clause in t.ifs:
            self.write(" if ")
            self.dispatch(if_clause)

    def _IfExp(self, t):
        self.write("(")
        self.dispatch(t.body)
        self.write(" if ")
        self.dispatch(t.test)
        self.write(" else ")
        self.dispatch(t.orelse)
        self.write(")")

    def _Set(self, t):
        assert(t.elts) # should be at least one element
        self.write("{")
        interleave(lambda: self.write(", "), self.dispatch, t.elts)
        self.write("}")

    def _Dict(self, t):
        self.write("{")
        def write_pair(pair):
            (k, v) = pair
            self.dispatch(k)
            self.write(": ")
            self.dispatch(v)
        interleave(lambda: self.write(", "), write_pair, zip(t.keys, t.values))
        self.write("}")

    def _Tuple(self, t):
        self.write("(")
        if len(t.elts) == 1:
            (elt,) = t.elts
            self.dispatch(elt)
            self.write(",")
        else:
            interleave(lambda: self.write(", "), self.dispatch, t.elts)
        self.write(")")

    unop = {"Invert":"~", "Not": "not", "UAdd":"+", "USub":"-"}
    def _UnaryOp(self, t):
        self.write("(")
        self.write(self.unop[t.op.__class__.__name__])
        self.write(" ")
        # If we're applying unary minus to a number, parenthesize the number.
        # This is necessary: -2147483648 is different from -(2147483648) on
        # a 32-bit machine (the first is an int, the second a long), and
        # -7j is different from -(7j).  (The first has real part 0.0, the second
        # has real part -0.0.)
        if isinstance(t.op, ast.USub) and isinstance(t.operand, ast.Num):
            self.write("(")
            self.dispatch(t.operand)
            self.write(")")
        else:
            self.dispatch(t.operand)
        self.write(")")

    binop = { "Add":"+", "Sub":"-", "Mult":"*", "Div":"/", "Mod":"%",
                    "LShift":"<<", "RShift":">>", "BitOr":"|", "BitXor":"^", "BitAnd":"&",
                    "FloorDiv":"//", "Pow": "**"}
    def _BinOp(self, t):
        self.write("(")
        self.dispatch(t.left)
        self.write(" " + self.binop[t.op.__class__.__name__] + " ")
        self.dispatch(t.right)
        self.write(")")

    cmpops = {"Eq":"==", "NotEq":"!=", "Lt":"<", "LtE":"<=", "Gt":">", "GtE":">=",
                        "Is":"is", "IsNot":"is not", "In":"in", "NotIn":"not in"}
    def _Compare(self, t):
        self.write("(")
        self.dispatch(t.left)
        for o, e in zip(t.ops, t.comparators):
            self.write(" " + self.cmpops[o.__class__.__name__] + " ")
            self.dispatch(e)
        self.write(")")

    boolops = {ast.And: 'and', ast.Or: 'or'}
    def _BoolOp(self, t):
        self.write("(")
        s = " %s " % self.boolops[t.op.__class__]
        interleave(lambda: self.write(s), self.dispatch, t.values)
        self.write(")")

    def _Attribute(self,t):
        self.dispatch(t.value)
        # Special case: 3.__abs__() is a syntax error, so if t.value
        # is an integer literal then we need to either parenthesize
        # it or add an extra space to get 3 .__abs__().
        if isinstance(t.value, ast.Num) and isinstance(t.value.n, int):
            self.write(" ")
        self.write(".")
        self.write(t.attr)

    def _Call(self, t):
        self.dispatch(t.func)
        self.write("(")
        comma = False
        for e in t.args:
            if comma: self.write(", ")
            else: comma = True
            self.dispatch(e)
        for e in t.keywords:
            if comma: self.write(", ")
            else: comma = True
            self.dispatch(e)
        if t.starargs:
            if comma: self.write(", ")
            else: comma = True
            self.write("*")
            self.dispatch(t.starargs)
        if t.kwargs:
            if comma: self.write(", ")
            else: comma = True
            self.write("**")
            self.dispatch(t.kwargs)
        self.write(")")

    def _Subscript(self, t):
        self.dispatch(t.value)
        self.write("[")
        self.dispatch(t.slice)
        self.write("]")

    # slice
    def _Ellipsis(self, t):
        self.write("...")

    def _Index(self, t):
        self.dispatch(t.value)

    def _Slice(self, t):
        if t.lower:
            self.dispatch(t.lower)
        self.write(":")
        if t.upper:
            self.dispatch(t.upper)
        if t.step:
            self.write(":")
            self.dispatch(t.step)

    def _ExtSlice(self, t):
        interleave(lambda: self.write(', '), self.dispatch, t.dims)

    # others
    def _arguments(self, t):
        first = True
        # normal arguments
        defaults = [None] * (len(t.args) - len(t.defaults)) + t.defaults
        for a,d in zip(t.args, defaults):
            if first:first = False
            else: self.write(", ")
            self.dispatch(a),
            if d:
                self.write("=")
                self.dispatch(d)

        # varargs
        if t.vararg:
            if first:first = False
            else: self.write(", ")
            self.write("*")
            self.write(t.vararg)

        # kwargs
        if t.kwarg:
            if first:first = False
            else: self.write(", ")
            self.write("**"+t.kwarg)

    def _keyword(self, t):
        self.write(t.arg)
        self.write("=")
        self.dispatch(t.value)

    def _Lambda(self, t):
        self.write("(")
        self.write("lambda ")
        self.dispatch(t.args)
        self.write(": ")
        self.dispatch(t.body)
        self.write(")")

    def _alias(self, t):
        self.write(t.name)
        if t.asname:
            self.write(" as "+t.asname)

def roundtrip(filename, output=sys.stdout):
    with open(filename, "r") as pyfile:
        source = pyfile.read()
    tree = compile(source, filename, "exec", ast.PyCF_ONLY_AST)
    Unparser(tree, output)



def testdir(a):
    try:
        names = [n for n in os.listdir(a) if n.endswith('.py')]
    except OSError:
        sys.stderr.write("Directory not readable: %s" % a)
    else:
        for n in names:
            fullname = os.path.join(a, n)
            if os.path.isfile(fullname):
                output = cStringIO.StringIO()
                print 'Testing %s' % fullname
                try:
                    roundtrip(fullname, output)
                except Exception as e:
                    print '  Failed to compile, exception is %s' % repr(e)
            elif os.path.isdir(fullname):
                testdir(fullname)

def main(args):
    if args[0] == '--testdir':
        for a in args[1:]:
            testdir(a)
    else:
        for a in args:
            roundtrip(a)

if __name__=='__main__':
    main(sys.argv[1:])
PKb1�Z�v�	11#turtle/tdemo_I_dontlike_tiltdemo.pynuȯ��#! /usr/bin/python2.7
"""       turtle-example-suite:

     tdemo-I_dont_like_tiltdemo.py

Demonstrates
  (a) use of a tilted ellipse as
      turtle shape
  (b) stamping that shape

We can remove it, if you don't like it.
      Without using reset() ;-)
 ---------------------------------------
"""
from turtle import *
import time

def main():
    reset()
    shape("circle")
    resizemode("user")

    pu(); bk(24*18/6.283); rt(90); pd()
    tilt(45)

    pu()

    turtlesize(16,10,5)
    color("red", "violet")
    for i in range(18):
        fd(24)
        lt(20)
        stamp()
    color("red", "")
    for i in range(18):
        fd(24)
        lt(20)
        stamp()

    tilt(-15)
    turtlesize(3, 1, 4)
    color("blue", "yellow")
    for i in range(17):
        fd(24)
        lt(20)
        if i%2 == 0:
            stamp()
    time.sleep(1)
    while undobufferentries():
        undo()
    ht()
    write("OK, OVER!", align="center", font=("Courier", 18, "bold"))
    return "Done!"

if __name__=="__main__":
    msg = main()
    print msg
    mainloop()
PKb1�Zp��zzturtle/tdemo_bytedesign.pynuȯ��#! /usr/bin/python2.7
"""      turtle-example-suite:

        tdemo_bytedesign.py

An example adapted from the example-suite
of PythonCard's turtle graphcis.

It's based on an article in BYTE magazine
Problem Solving with Logo: Using Turtle
Graphics to Redraw a Design
November 1982, p. 118 - 134

-------------------------------------------

Due to the statement

t.delay(0)

in line 152, which sets the animation delay
to 0, this animation runs in "line per line"
mode as fast as possible.
"""

import math
from turtle import Turtle, mainloop
from time import clock

# wrapper for any additional drawing routines
# that need to know about each other
class Designer(Turtle):

    def design(self, homePos, scale):
        self.up()
        for i in range(5):
            self.forward(64.65 * scale)
            self.down()
            self.wheel(self.position(), scale)
            self.up()
            self.backward(64.65 * scale)
            self.right(72)
        self.up()
        self.goto(homePos)
        self.right(36)
        self.forward(24.5 * scale)
        self.right(198)
        self.down()
        self.centerpiece(46 * scale, 143.4, scale)
        self.tracer(True)

    def wheel(self, initpos, scale):
        self.right(54)
        for i in range(4):
            self.pentpiece(initpos, scale)
        self.down()
        self.left(36)
        for i in range(5):
            self.tripiece(initpos, scale)
        self.left(36)
        for i in range(5):
            self.down()
            self.right(72)
            self.forward(28 * scale)
            self.up()
            self.backward(28 * scale)
        self.left(54)
        self.getscreen().update()

    def tripiece(self, initpos, scale):
        oldh = self.heading()
        self.down()
        self.backward(2.5 * scale)
        self.tripolyr(31.5 * scale, scale)
        self.up()
        self.goto(initpos)
        self.setheading(oldh)
        self.down()
        self.backward(2.5 * scale)
        self.tripolyl(31.5 * scale, scale)
        self.up()
        self.goto(initpos)
        self.setheading(oldh)
        self.left(72)
        self.getscreen().update()

    def pentpiece(self, initpos, scale):
        oldh = self.heading()
        self.up()
        self.forward(29 * scale)
        self.down()
        for i in range(5):
            self.forward(18 * scale)
            self.right(72)
        self.pentr(18 * scale, 75, scale)
        self.up()
        self.goto(initpos)
        self.setheading(oldh)
        self.forward(29 * scale)
        self.down()
        for i in range(5):
            self.forward(18 * scale)
            self.right(72)
        self.pentl(18 * scale, 75, scale)
        self.up()
        self.goto(initpos)
        self.setheading(oldh)
        self.left(72)
        self.getscreen().update()

    def pentl(self, side, ang, scale):
        if side < (2 * scale): return
        self.forward(side)
        self.left(ang)
        self.pentl(side - (.38 * scale), ang, scale)

    def pentr(self, side, ang, scale):
        if side < (2 * scale): return
        self.forward(side)
        self.right(ang)
        self.pentr(side - (.38 * scale), ang, scale)

    def tripolyr(self, side, scale):
        if side < (4 * scale): return
        self.forward(side)
        self.right(111)
        self.forward(side / 1.78)
        self.right(111)
        self.forward(side / 1.3)
        self.right(146)
        self.tripolyr(side * .75, scale)

    def tripolyl(self, side, scale):
        if side < (4 * scale): return
        self.forward(side)
        self.left(111)
        self.forward(side / 1.78)
        self.left(111)
        self.forward(side / 1.3)
        self.left(146)
        self.tripolyl(side * .75, scale)

    def centerpiece(self, s, a, scale):
        self.forward(s); self.left(a)
        if s < (7.5 * scale):
            return
        self.centerpiece(s - (1.2 * scale), a, scale)

def main():
    t = Designer()
    t.speed(0)
    t.hideturtle()
    t.getscreen().delay(0)
    t.tracer(0)
    at = clock()
    t.design(t.position(), 2)
    et = clock()
    return "runtime: %.2f sec." % (et-at)

if __name__ == '__main__':
    msg = main()
    print msg
    mainloop()
PKb1�Zp��xturtle/tdemo_planet_and_moon.pynuȯ��#! /usr/bin/python2.7
"""       turtle-example-suite:

        tdemo_planets_and_moon.py

Gravitational system simulation using the
approximation method from Feynman-lectures,
p.9-8, using turtlegraphics.

Example: heavy central body, light planet,
very light moon!
Planet has a circular orbit, moon a stable
orbit around the planet.

You can hold the movement temporarily by
pressing the left mouse button with the
mouse over the scrollbar of the canvas.

"""
from turtle import Shape, Turtle, mainloop, Vec2D as Vec
from time import sleep

G = 8

class GravSys(object):
    def __init__(self):
        self.planets = []
        self.t = 0
        self.dt = 0.01
    def init(self):
        for p in self.planets:
            p.init()
    def start(self):
        for i in range(10000):
            self.t += self.dt
            for p in self.planets:
                p.step()

class Star(Turtle):
    def __init__(self, m, x, v, gravSys, shape):
        Turtle.__init__(self, shape=shape)
        self.penup()
        self.m = m
        self.setpos(x)
        self.v = v
        gravSys.planets.append(self)
        self.gravSys = gravSys
        self.resizemode("user")
        self.pendown()
    def init(self):
        dt = self.gravSys.dt
        self.a = self.acc()
        self.v = self.v + 0.5*dt*self.a
    def acc(self):
        a = Vec(0,0)
        for planet in self.gravSys.planets:
            if planet != self:
                v = planet.pos()-self.pos()
                a += (G*planet.m/abs(v)**3)*v
        return a
    def step(self):
        dt = self.gravSys.dt
        self.setpos(self.pos() + dt*self.v)
        if self.gravSys.planets.index(self) != 0:
            self.setheading(self.towards(self.gravSys.planets[0]))
        self.a = self.acc()
        self.v = self.v + dt*self.a

## create compound yellow/blue turtleshape for planets

def main():
    s = Turtle()
    s.reset()
    s.tracer(0,0)
    s.ht()
    s.pu()
    s.fd(6)
    s.lt(90)
    s.begin_poly()
    s.circle(6, 180)
    s.end_poly()
    m1 = s.get_poly()
    s.begin_poly()
    s.circle(6,180)
    s.end_poly()
    m2 = s.get_poly()

    planetshape = Shape("compound")
    planetshape.addcomponent(m1,"orange")
    planetshape.addcomponent(m2,"blue")
    s.getscreen().register_shape("planet", planetshape)
    s.tracer(1,0)

    ## setup gravitational system
    gs = GravSys()
    sun = Star(1000000, Vec(0,0), Vec(0,-2.5), gs, "circle")
    sun.color("yellow")
    sun.shapesize(1.8)
    sun.pu()
    earth = Star(12500, Vec(210,0), Vec(0,195), gs, "planet")
    earth.pencolor("green")
    earth.shapesize(0.8)
    moon = Star(1, Vec(220,0), Vec(0,295), gs, "planet")
    moon.pencolor("blue")
    moon.shapesize(0.5)
    gs.init()
    gs.start()
    return "Done!"

if __name__ == '__main__':
    main()
    mainloop()
PKb1�Z�ʏ
�
�
turtle/tdemo_penrose.pynuȯ��#! /usr/bin/python2.7
"""       xturtle-example-suite:

          xtx_kites_and_darts.py

Constructs two aperiodic penrose-tilings,
consisting of kites and darts, by the method
of inflation in six steps.

Starting points are the patterns "sun"
consisting of five kites and "star"
consisting of five darts.

For more information see:
 http://en.wikipedia.org/wiki/Penrose_tiling
 -------------------------------------------
"""
from turtle import *
from math import cos, pi
from time import clock, sleep

f = (5**0.5-1)/2.0   # (sqrt(5)-1)/2 -- golden ratio
d = 2 * cos(3*pi/10)

def kite(l):
    fl = f * l
    lt(36)
    fd(l)
    rt(108)
    fd(fl)
    rt(36)
    fd(fl)
    rt(108)
    fd(l)
    rt(144)

def dart(l):
    fl = f * l
    lt(36)
    fd(l)
    rt(144)
    fd(fl)
    lt(36)
    fd(fl)
    rt(144)
    fd(l)
    rt(144)

def inflatekite(l, n):
    if n == 0:
        px, py = pos()
        h, x, y = int(heading()), round(px,3), round(py,3)
        tiledict[(h,x,y)] = True
        return
    fl = f * l
    lt(36)
    inflatedart(fl, n-1)
    fd(l)
    rt(144)
    inflatekite(fl, n-1)
    lt(18)
    fd(l*d)
    rt(162)
    inflatekite(fl, n-1)
    lt(36)
    fd(l)
    rt(180)
    inflatedart(fl, n-1)
    lt(36)

def inflatedart(l, n):
    if n == 0:
        px, py = pos()
        h, x, y = int(heading()), round(px,3), round(py,3)
        tiledict[(h,x,y)] = False
        return
    fl = f * l
    inflatekite(fl, n-1)
    lt(36)
    fd(l)
    rt(180)
    inflatedart(fl, n-1)
    lt(54)
    fd(l*d)
    rt(126)
    inflatedart(fl, n-1)
    fd(l)
    rt(144)

def draw(l, n, th=2):
    clear()
    l = l * f**n
    shapesize(l/100.0, l/100.0, th)
    for k in tiledict:
        h, x, y = k
        setpos(x, y)
        setheading(h)
        if tiledict[k]:
            shape("kite")
            color("black", (0, 0.75, 0))
        else:
            shape("dart")
            color("black", (0.75, 0, 0))
        stamp()

def sun(l, n):
    for i in range(5):
        inflatekite(l, n)
        lt(72)

def star(l,n):
    for i in range(5):
        inflatedart(l, n)
        lt(72)

def makeshapes():
    tracer(0)
    begin_poly()
    kite(100)
    end_poly()
    register_shape("kite", get_poly())
    begin_poly()
    dart(100)
    end_poly()
    register_shape("dart", get_poly())
    tracer(1)

def start():
    reset()
    ht()
    pu()
    makeshapes()
    resizemode("user")

def test(l=200, n=4, fun=sun, startpos=(0,0), th=2):
    global tiledict
    goto(startpos)
    setheading(0)
    tiledict = {}
    a = clock()
    tracer(0)
    fun(l, n)
    b = clock()
    draw(l, n, th)
    tracer(1)
    c = clock()
    print "Calculation:   %7.4f s" % (b - a)
    print "Drawing:  %7.4f s" % (c - b)
    print "Together: %7.4f s" % (c - a)
    nk = len([x for x in tiledict if tiledict[x]])
    nd = len([x for x in tiledict if not tiledict[x]])
    print "%d kites and %d darts = %d pieces." % (nk, nd, nk+nd)

def demo(fun=sun):
    start()
    for i in range(8):
        a = clock()
        test(300, i, fun)
        b = clock()
        t = b - a
        if t < 2:
            sleep(2 - t)

def main():
    #title("Penrose-tiling with kites and darts.")
    mode("logo")
    bgcolor(0.3, 0.3, 0)
    demo(sun)
    sleep(2)
    demo(star)
    pencolor("black")
    goto(0,-200)
    pencolor(0.7,0.7,1)
    write("Please wait...",
          align="center", font=('Arial Black', 36, 'bold'))
    test(600, 8, startpos=(70, 117))
    return "Done"

if __name__ == "__main__":
    msg = main()
    mainloop()
PKb1�Z�j�N=	=	turtle/tdemo_colormixer.pycnu�[����
��^c@slddlmZmZmZdefd��YZd�Zd�Zedkrhe�ZeGHe�ndS(i����(tScreentTurtletmainlooptColorTurtlecBseZd�Zd�ZRS(cCstj|�|jd�|jd�|jddd�|jd�dddg|_||_||j|<|j|j�|j	d�|j
d�|j�|j|d�|j
�|jd�|j�|j|�|jd	�|j|j�dS(
Ntturtletuseriii
iiZitgray25(Rt__init__tshapet
resizemodet	shapesizetpensizet_colortxtcolortspeedtlefttputgototpdtsetytpencolortondragtshift(tselfR
ty((s4/usr/lib64/python2.7/Demo/turtle/tdemo_colormixer.pyRs&



	








cCsP|jtdt|d���|j�|j|j<|j|j�t�dS(Nii(RtmaxtmintycorRR
t	fillcolort
setbgcolor(RR
R((s4/usr/lib64/python2.7/Demo/turtle/tdemo_colormixer.pyRs(t__name__t
__module__RR(((s4/usr/lib64/python2.7/Demo/turtle/tdemo_colormixer.pyRs	cCs)tjtj�tj�tj��dS(N(tscreentbgcolortredRtgreentblue(((s4/usr/lib64/python2.7/Demo/turtle/tdemo_colormixer.pyR"sc	Cs�t�atjd�tjdddd�tdd�atdd�atdd�at�t	�}|j
�|j�|jdd	�|j
d
ddd
dddf�dS(Nii����g333333ӿig�������?g�?iigffffff�?sDRAG!taligntcentertfonttArialitboldtitalict	EVENTLOOP(R*R+(RR!tdelaytsetworldcoordinatesRR#R$R%RRthtRRtwrite(twriter((s4/usr/lib64/python2.7/Demo/turtle/tdemo_colormixer.pytmain%s	
	

"t__main__N(	RRRRRRR2Rtmsg(((s4/usr/lib64/python2.7/Demo/turtle/tdemo_colormixer.pyt<module>s			PKb1�Z}��W�$�$turtle/tdemo_nim.pycnu�[����
��^c@s5dZddlZddlZddlZdZdZdZdZedZeedd	edd
Z	dZ
dZdZd�Z
d�Zd�Zdefd��YZdejfd��YZdefd��YZdefd��YZdefd��YZd�Zedkr1e�ej�ndS( s�      turtle-example-suite:

            tdemo_nim.py

Play nim against the computer. The player
who takes the last stick is the winner.

Implements the model-view-controller
design pattern.
i����Ni�i�iiiiiii?i�i�cCstjtt�S(N(trandomtrandintt	MINSTICKSt	MAXSTICKS(((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyt	randomrowscCsy|d|dA|dA}|dkr0t|�SxBtd�D]4}|||A}|||kr=||f}|Sq=WdS(Niiii(t
randommovetrange(tstatetxoredtztstmove((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pytcomputerzug!s
cCsot|�}x6trDtjdd�}|||dkkrPqqWtj|dk||d�}||fS(Niii(tmaxtTrueRR(RtmR	trand((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR+s	 tNimModelcBs5eZd�Zd�Zd�Zd�Zd�ZRS(cCs
||_dS(N(tgame(tselfR((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyt__init__6scCsr|jjtjtjgkr"dSt�t�t�g|_d|_d|_	|jj
j�tj|j_dS(Ni(
RRtNimtCREATEDtOVERRtstickstplayertNonetwinnertviewtsetuptRUNNING(R((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR9s		cCs�|j|}||j|<|jjj||||j�|j�rstj|j_|j|_	|jjj
�nI|jdkr�d|_t|j�\}}|j||�d|_ndS(Nii(
RRRtnotify_moveRt	game_overRRRRtnotify_overRR(Rtrowtcolt	maxspalte((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyRBs

	cCs|jdddgkS(Ni(R(R((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR PscCs+|j||krdS|j||�dS(N(RR(RR"R#((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyRSs(t__name__t
__module__RRRR R(((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR5s
					tStickcBs#eZd�Zd�Zd�ZRS(cCs�tjj|dt�||_||_||_|j||�\}}|jd�|j	t
dtd�|jd�|j
�|j||�|jd�|j�dS(Ntvisibletsquareg$@g4@itwhite(tturtletTurtleRtFalseR"R#Rtcoordstshapet	shapesizetHUNITtWUNITtspeedtputgototcolort
showturtle(RR"R#Rtxty((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyRZs			



cCskt|d�\}}dd|d|t}dd|t}|tdtdtd|tdfS(Niiii(tdivmodR2R1tSCREENWIDTHtSCREENHEIGHT(RR"R#tpackett	remainderR8R9((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR.hscCs9|jjtjkrdS|jjj|j|j�dS(N(RRRRt
controllerRR"R#(RR8R9((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pytmakemovens(R%R&RR.R@(((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR'Ys		tNimViewcBsAeZd�Zdd�Zd�Zd�Zd�Zd�ZRS(cCs�||_|j|_|j|_|jjd�|jjt�|jjd�tjdt�|_	|j	j
�|j	jd�i|_xJt
d�D]<}x3t
t�D]%}t|||�|j||f<q�Wq�W|jd�|jjt�dS(Ni�i�R(iis... a moment please ...(i�i�i�(Rtscreentmodelt	colormodettracerR-tbgcolorR+R,twriterR4R3RRRR'tdisplayR(RRR"R#((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyRus	
	'
cCs�|jjt�|jj�|dk	rt|jjdtdd�|jjd�|jj	|dddd�n|jjdtdd�|jjd�|jj	|dddd�|jjt
�dS(Niii0tredtaligntcentertfonttCourieritbolditblacki(RMiRN(RMiRN(RBRER-RGtclearRR5R<tpencolortwriteR(Rtmsg1tmsg2((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyRH�s
cCs�|jjt�xOtd�D]A}x8t|jj|�D] }|j||fjt�q:WqWxRtd�D]D}x;t|jj|t�D] }|j||fjd�q�WqoW|j	d�|jjt
�dS(NiR*s*Your turn! Click leftmost stick to remove.(RBRER-RRCRR6tSCOLORRRHR(RR"R#((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR�s" "
cCs�|dkrIt}x�t||�D] }|j||fj|�q"Wn�|jd�tjd�|jd�t}xIt|d|dd�D]-}tjd�|j||fj|�q�W|jd�dS(	Nis ... thinking ...         g�?s ... thinking ... aaah ...ii����g�������?s*Your turn! Click leftmost stick to remove.(tHCOLORRRR6RHttimetsleeptCOLOR(RR"R#R$RtfarbeR
((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR�s!


!
cCs8|jjjdkrd}nd}|jd|�dS(NisCongrats. You're the winner!!!s"Sorry, the computer is the winner.s2To play again press space bar. To leave press ESC.(RRCRRH(RRT((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR!�s	cCs)|jjtjkr%|jj�ndS(N(RRRRRBRP(R((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyRP�sN(	R%R&RRRHRRR!RP(((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyRAts	
			t
NimControllercBseZd�Zd�ZRS(cCs�||_|jj|_t|_x'|jj�D]}|j|j�q1W|jjj	|jj
jd�|jjj	|jjjd�|jjj
d�|jjj�dS(NtspacetEscapesPress space bar to start game(RRRR-tBUSYtvaluestonclickR@RBtonkeyRCRRPRHtlisten(RRtstick((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR�s		cCs9|jr
dSt|_|jjj||�t|_dS(N(R^RRRCRR-(RR"R#((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR�s
		(R%R&RR(((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR[�s	RcBs#eZdZdZdZd�ZRS(iiicCsFtj|_||_t|�|_t|�|_t|�|_	dS(N(
RRRRBRRCRARR[R?(RRB((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR�s
	(R%R&RRRR(((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR�scCs9tj�}|jd�|jtt�t|�}dS(Ntstandards
EVENTLOOP!(R+tScreentmodeRR;R<R(t
mainscreentnim((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pytmain�s

t__main__(i?i?i(i�i�i�(i�i�i�(t__doc__R+RRWR;R<RRR1R2RURVRYRRRtobjectRR,R'RAR[RRiR%tmainloop(((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyt<module>
s0
		
	
$E	PKb1�Z8Hw�*�*turtle/turtleDemo.pycnu�[����
Afc@s0ddlZddlZddlTddlmZddlmZddlmZddl	Z	ddl
Z
ej�Zdej
e�kr�dGHdGeGHej�nd	Zd
ZdZdZd
ZddefZdZd Zd�Zd!d"d#fZdefd��YZd�Zedkr,e�ndS($i����N(t*(t
Percolator(tColorDelegator(t	view_files
turtleDemo.pys:Directory of turtleDemo must be current working directory!sBut in your case this isiiiiitArialitboldsLucida ConsoleitnormalcCs�gtjt�D]+}|jd�r|jd�r|^q}g}x�|D]�}|jd�rs|j|�qNtjjt|�}tjj|�|g}gtj|�D]*}|jd�r�|jd�r�|^q�}|j||�qNW|S(Nttdemo_s.pycs.py(	tostlistdirtdemo_dirt
startswithtendswithtappendtpathtjointsys(tentrytentries1tentries2Rtsubdirtscripttscripts((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pytgetExampleEntriess
	sTurtledemo helpsdemohelp.txtsAbout turtledemosabout_turtledemo.txtsAbout turtle modulesabout_turtle.txtt
DemoWindowcBs�eZdd�Zd�Zd�Zd�Zddd�Zd�Zd�Z	d	�Z
d
�Zd�Zd�Z
d
�Zd�ZRS(cCst�|_}t_|jd�|jd|j�|jddd�|jddd�|jddddd�|jddddd�|jd	dddd�t	|d
t
dd�|_|j�|_
|j�|_|jjddd
ddd�tdtdddtdd�}|j|j|��|j|j|��|jddd
ddd�t|dddddddd,ddd
t�|_t|dddtd d!d"d#d$|j�|_t|dd%dtd d!d"d#d$|j�|_t|dd&dtd d!d"d#d$|j �|_!|jjddd'dddd(d-�|jjddd'ddd)�|jjddd'ddd)�|j!jddd'd	dd)�t"|j#�j$t%��t&|_'t&|_(|r�|j)|�n|j*t+t,t,t,d*d+�t-|_.dS(.NsPython turtle-graphics examplestWM_DELETE_WINDOWitweightitminsizeiZiitrelieftborderwidthtrowt
columnspanitstickytnewstorientt	sashwidthit
sashrelieftbgs#dddtheightttexts --- s#ddftfontRiRs START tfgtwhitetdisabledforegrounds#fedtcommands STOP s CLEAR tcolumntpadxtewsChoose example from menutblack(RiR(ii(/tTktroottturtlet_rootttitletwm_protocolt_destroytgrid_rowconfiguretgrid_columnconfiguretFrametRAISEDtmBartmakeLoadDemoMenutExamplesBtntmakeHelpMenut
OptionsBtntgridtPanedWindowt
HORIZONTALtSOLIDtaddt
makeTextFrametmakeGraphFrametLabeltRIDGEt
output_lbltButtontbtnfontt	startDemot	start_btntstopIttstop_btntclearCanvast	clear_btnRR'tinsertfilterRtFalsetdirtytexitflagtloadfilet	configGUItNORMALtDISABLEDtSTARTUPtstate(tselftfilenameR2tpane((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyt__init__7sR
%		
cCsf|jj�}|jj�}|jjd|j||j�|jjd|j||j�dS(Ng�?(t_canvastwinfo_widthtwinfo_heighttxview_movetot	canvwidthtyview_movetot
canvheight(R]teventtcwidthtcheight((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pytonResizehs"c
Cst|�|_}t|dddddddd�|_}t|dd	�|_}|j|d
<|jdtdt	�t|dd
dt
�|_}|j|d
<|jdt
dt�t|d<|j|d<|j|d<|jdtdtdd�|S(NtnameR'R.itwraptnonetwidthi-tvbarR,tsidetfillthbarR"R(tyscrollcommandtxscrollcommandtexpandi(R:t
text_frametTextR't	ScrollbarRptyviewtpacktLEFTtYRCRstxviewtBOTTOMtXttxtfonttsettBOTH(R]R2RwR'RpRs((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyRFns




cCs�|tj_d|_d|_tj|dd|j|j�tj_|_}|j�|jj	d|j
�d|jd<tj�|_}tj
j||j�|j|_|gtj_|S(Ni�i iXs<Configure>iR(R3t_ScreenR4ReRgtScrolledCanvasRat
adjustScrollst_rootwindowtbindRktScreentscreentTurtleScreenR`tscanvast	RawTurtletscreens(R]R2tcanvast_s_((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyRG�s		,

ttbluecCs�|jjd|�|jjd|d|tkr7dnd�|jjd|d|tkrbdnd�|jjd|d|tkr�dnd�|jjd|d|�dS(NR\R%s#d00s#fcaR'R)(R>tconfigRNRYRPRRRJ(R]tmenutstarttstoptclearttxttcolor((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyRX�scsft�jdddddt�}|jdtdd�t|�|_xt�D]}�fd	�}t|t	�r�|jj
d
|dd!dddtd
||��qP|d|d}}t|j�|j_xR|D]J}|jjj
d
|dd!dddtd
|tj
j||���q�W|jjd
|dd|jjdt�qPW|j|d<|S(NR'tExamplest	underlineiR(RqR.t2mcs��fd�}|S(Ncs�j��dS(N(RW((R]tx(s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pytemit�s((R�R�(R](R�s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pytloadexample�stlabelii����R,iR�(t
MenubuttonR<tmenufontR{R|tMenuR�Rt
isinstancetstrtadd_commandtchoicesRRRtadd_cascade(R]tCmdBtnRR�t_dirtentrieste((R]s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyR=�s(
 !
cs�t�jdddddt�}|jdtdd�t|�|_xHtD]@\}}||�fd	�}|jjd
|dtd|�qMW|j|d<|S(
NR'tHelpR�iR(RqR.R�cs&t�j|tjjt|��dS(N(RR2RRRR
(t
help_labelt	help_file(R](s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pytshow�sR�R,R�(	R�R<R�R{R|R�R�thelp_entriesR�(R]R�R�R�R�((R]s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyR?�s!#
cCs'|js
dS|jj�t|_dS(N(RUR�R�RT(R]((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyt
refreshCanvas�s	
cCs�|j�tjj|�r�tjj|�r�t|d�}|j�}|j�|jj	dd�|jj
d|�tjj|�\}}|jj
|dd!d�t|d �|_|jttttdd�t|_ndS(	Ntrs1.0tendii����s# - a Python turtle graphics examplesPress start buttontred(R�RRtexiststisdirtopentreadtcloseR'tdeletetinserttsplitR2R5t
__import__tmoduleRXRYRZtREADYR\(R]R^tftcharstdirectfname((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyRW�s
%

cCs4|j�t|_ttj_|jttttdd�|j	j
�|j	jd�t|_
y4|jj�}|dkr�t|_
n	t|_
Wn6tjk
r�|jdkr�dSt|_
d}nX|j
tkr�|jtttt|�n7|j
tkr0t|_|jttttdd�ndS(Nsdemo running...R0tstandardt	EVENTLOOPsstopped!suse mouse/keys or STOPR�(R�tTrueRUR3R�t_RUNNINGRXRZRYR�R�tmodetRUNNINGR\R�tmaintEVENTDRIVENtDONEt
TerminatorR2tNoneRV(R]tresult((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyRM�s2
	

	
	

	cCs7|j�|jjdd�|jtttt�dS(NtcursorR�(R�R�R�RXRYRZ(R]((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyRQ�s
cCsW|jrG|j�t|_|jttttdd�ttj_nttj_dS(NsSTOPPED!R�(	RVRQRTRXRYRZR3R�R�(R]((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyRO�s	
	
cCs&ttj_|jj�d|_dS(N(RTR3R�R�R2tdestroyR�(R]((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyR7s
N(t__name__t
__module__R�R`RkRFRGRXR=R?R�RWRMRQROR7(((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyR5s1					
					
cCst�}|jj�dS(N(RR2tmainloop(tdemo((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyR�s	t__main__(RiR(sLucida ConsoleiR(sTurtledemo helpsdemohelp.txt(sAbout turtledemosabout_turtledemo.txt(sAbout turtle modulesabout_turtle.txt(RRtTkintertidlelib.PercolatorRtidlelib.ColorDelegatorRtidlelib.textViewRR3ttimetgetcwdR
R	texitR[R�R�R�R�RYR�RLR�RR�tobjectRR�R�(((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyt<module>s8
	
		�	PKb1�Z���CCturtle/tdemo_wikipedia.pynu�[���"""      turtle-example-suite:

          tdemo_wikipedia3.py

This example is
inspired by the Wikipedia article on turtle
graphics. (See example wikipedia1 for URLs)

First we create (ne-1) (i.e. 35 in this
example) copies of our first turtle p.
Then we let them perform their steps in
parallel.

Followed by a complete undo().
"""
from turtle import Screen, Turtle, mainloop
from time import clock, sleep

def mn_eck(p, ne,sz):
    turtlelist = [p]
    #create ne-1 additional turtles
    for i in range(1,ne):
        q = p.clone()
        q.rt(360.0/ne)
        turtlelist.append(q)
        p = q
    for i in range(ne):
        c = abs(ne/2.0-i)/(ne*.7)
        # let those ne turtles make a step
        # in parallel:
        for t in turtlelist:
            t.rt(360./ne)
            t.pencolor(1-c,0,c)
            t.fd(sz)

def main():
    s = Screen()
    s.bgcolor("black")
    p=Turtle()
    p.speed(0)
    p.hideturtle()
    p.pencolor("red")
    p.pensize(3)

    s.tracer(36,0)

    at = clock()
    mn_eck(p, 36, 19)
    et = clock()
    z1 = et-at

    sleep(1)

    at = clock()
    while any([t.undobufferentries() for t in s.turtles()]):
        for t in s.turtles():
            t.undo()
    et = clock()
    return "Laufzeit: %.3f sec" % (z1+et-at)


if __name__ == '__main__':
    msg = main()
    print msg
    mainloop()
PKb1�Z��!KKturtle/tdemo_tree.pyonu�[����
Afc@sodZddlmZmZddlmZd�Zd�Zd�Ze	dkrke�Z
e
GHe�ndS(	s�      turtle-example-suite:

             tdemo_tree.py

Displays a 'breadth-first-tree' - in contrast
to the classical Logo tree drawing programs,
which use a depth-first-algorithm.

Uses:
(1) a tree-generator, where the drawing is
quasi the side-effect, whereas the generator
always yields None.
(2) Turtle-cloning: At each branching point
the current pen is cloned. So in the end
there are 1024 turtles.
i����(tTurtletmainloop(tclockccs�|dkr�g}x[|D]S}|j|�|j�}|j|�|j|�|j|�|j|�qWx)t|||||�D]}dVq�WndS(s� plist is list of pens
    l is length of branch
    a is half of the angle between 2 branches
    f is factor by which branch is shortened
    from level to level.iN(tforwardtclonetlefttrighttappendttreetNone(tplisttltatftlsttptqtx((s./usr/lib64/python2.7/Demo/turtle/tdemo_tree.pyRs




 cCs�t�}|jd�|j�|jd�|jdd�|jd�|j�|jd�|j	�t
|gddd�}x|D]}q�Wt|j�j
��GHdS(NiiiZi.���i�iAgffffff�?(Rt
setundobufferR	t
hideturtletspeedttracerRtpenupRtpendownRtlent	getscreentturtles(RttR((s./usr/lib64/python2.7/Demo/turtle/tdemo_tree.pytmaketree's	







cCs%t�}t�t�}d||S(Nsdone: %.2f sec.(RR(Rtb((s./usr/lib64/python2.7/Demo/turtle/tdemo_tree.pytmain6s		t__main__N(t__doc__tturtleRRttimeRRRRt__name__tmsg(((s./usr/lib64/python2.7/Demo/turtle/tdemo_tree.pyt<module>s				PKb1�Z�ʭ��
�
turtle/tdemo_fractalcurves.pyonu�[����
Afc@smdZddlTddlmZmZdefd��YZd�Zedkrie�Z	e	GHe
�ndS(	s&      turtle-example-suite:

        tdemo_fractalCurves.py

This program draws two fractal-curve-designs:
(1) A hilbert curve (in a box)
(2) A combination of Koch-curves.

The CurvesTurtle class and the fractal-curve-
methods are taken from the PythonCard example
scripts for turtle-graphics.
i����(t*(tsleeptclocktCurvesTurtlecBs#eZd�Zd�Zd�ZRS(cCs�|dkrdS|j|d�|j||d|�|j|�|j|d�|j||d|�|j|�|j||d|�|j|d�|j|�|j||d|�|j|d�dS(NiiZi(tleftthilberttforwardtright(tselftsizetleveltparity((s7/usr/lib64/python2.7/Demo/turtle/tdemo_fractalcurves.pyRs


cCs�ddl}d||j|j|�}|j�|j|�|j�|jdd|d|�x8t|�D]*}|j|||�|jd|�quW|j	dd|d|�|j�|j
|�|j�dS(Ni����ii�iZih(tmathtsintpitputfdtpdtrttrangetfractaltlttbk(RtntradtlevtdirRtedgeti((s7/usr/lib64/python2.7/Demo/turtle/tdemo_fractalcurves.pyt
fractalgon/s




cCs�|dkr|j|�dS|j|d|d|�|jd|�|j|d|d|�|jd|�|j|d|d|�|jd|�|j|d|d|�dS(Niii<ix(RRRR(RtdisttdepthR((s7/usr/lib64/python2.7/Demo/turtle/tdemo_fractalcurves.pyRBs
(t__name__t
__module__RRR(((s7/usr/lib64/python2.7/Demo/turtle/tdemo_fractalcurves.pyRs		cCsrt�}|j�|jd�|j�|jdd�|j�d}|jd|d|�|j�t�}|j	d�|j
t�|j|�|j
|dd�|j|�x:td�D],}|jd�|j|d	|d
�q�W|j�x.td
�D] }|j|�|jd�qW|j�x:td�D],}|j|d|d
�|jd�qKW|j
t�t�}d
||}td�|j�|jd�|j�|jdd�t�}|jdd�|j
t�|jdddd�|j
t�|jd�|jdddd�|j
t�t�}|d||7}|S(Niiii���i��trediiZi@iiiBsHilbert: %.2fsec. tblacktbluei�i�i����sKoch: %.2fsec.(RtresettspeedthtttracerRtsetposRRt	fillcolortfilltTrueRRRRRtFalseRtcolorR(tftR	ttaRttbtres((s7/usr/lib64/python2.7/Demo/turtle/tdemo_fractalcurves.pytmainNsZ	




	








	



	



	t__main__N(t__doc__tturtlettimeRRtPenRR3R tmsgtmainloop(((s7/usr/lib64/python2.7/Demo/turtle/tdemo_fractalcurves.pyt<module>
s
=	8	PKb1�Zؿy��
�
turtle/about_turtle.txtnu�[���
========================================================
                       A new turtle module for Python
========================================================

Turtle graphics is a popular way for introducing programming to
kids. It was part of the original Logo programming language developed
by Wally Feurzig and Seymour Papert in 1966.

Imagine a robotic turtle starting at (0, 0) in the x-y plane. After an ``import turtle``, give it
the command turtle.forward(15), and it moves (on-screen!) 15 pixels in
the direction it is facing, drawing a line as it moves. Give it the
command turtle.right(25), and it rotates in-place 25 degrees clockwise.

By combining together these and similar commands, intricate shapes and
pictures can easily be drawn.

----- turtle.py

This module is an extended reimplementation of turtle.py from the
Python standard distribution up to Python 2.5. (See: http:\\www.python.org)

It tries to keep the merits of turtle.py and to be (nearly) 100%
compatible with it. This means in the first place to enable the
learning programmer to use all the commands, classes and methods
interactively when using the module from within IDLE run with
the -n switch.

Roughly it has the following features added:

- Better animation of the turtle movements, especially of turning the
  turtle. So the turtles can more easily be used as a visual feedback
  instrument by the (beginning) programmer.

- Different turtle shapes, gif-images as turtle shapes, user defined
  and user controllable turtle shapes, among them compound
  (multicolored) shapes. Turtle shapes can be stgretched and tilted, which
  makes turtles zu very versatile geometrical objects.

- Fine control over turtle movement and screen updates via delay(),
  and enhanced tracer() and speed() methods.

- Aliases for the most commonly used commands, like fd for forward etc.,
  following the early Logo traditions. This reduces the boring work of
  typing long sequences of commands, which often occur in a natural way
  when kids try to program fancy pictures on their first encounter with
  turtle graphcis.

- Turtles now have an undo()-method with configurable undo-buffer.

- Some simple commands/methods for creating event driven programs
  (mouse-, key-, timer-events). Especially useful for programming games.
  
- A scrollable Canvas class. The default scrollable Canvas can be
  extended interactively as needed while playing around with the turtle(s).

- A TurtleScreen class with methods controlling background color or
  background image, window and canvas size and other properties of the
  TurtleScreen.

- There is a method, setworldcoordinates(), to install a user defined
  coordinate-system for the TurtleScreen. 

- The implementation uses a 2-vector class named Vec2D, derived from tuple.
  This class is public, so it can be imported by the application programmer,
  which makes certain types of computations very natural and compact.

- Appearance of the TurtleScreen and the Turtles at startup/import can be
  configured by means of a turtle.cfg configuration file.
  The default configuration mimics the appearance of the old turtle module.

- If configured appropriately the module reads in docstrings from a docstring
  dictionary in some different language, supplied separately  and replaces
  the english ones by those read in. There is a utility function
  write_docstringdict() to write a dictionary with the original (english)
  docstrings to disc, so it can serve as a template for translations.

PKb1�Z:�B�mmturtle/tdemo_paint.pycnu�[����
Afc@s_dZddlTddd�Zddd�Zd�Zedkr[e�ZeGHe�ndS(	sp       turtle-example-suite:

            tdemo_paint.py

A simple  event-driven paint program

- left mouse button moves turtle
- middle mouse button changes color
- right mouse button toogles betweem pen up
(no line drawn when the turtle moves) and
pen down (line is drawn). If pen up follows
at least two pen-down moves, the polygon that
includes the starting point is filled.
 -------------------------------------------
 Play around by clicking into the canvas
 using all three mouse buttons.
 -------------------------------------------
          To exit press STOP button
 -------------------------------------------
i����(t*icCs0t�drt�t�nt�t�dS(Ntpendown(tpentend_filltuptdownt
begin_fill(txty((s//usr/lib64/python2.7/Demo/turtle/tdemo_paint.pytswitchupdowns


cCs$tdtd attd�dS(Nii(tcolorstcolor(RR((s//usr/lib64/python2.7/Demo/turtle/tdemo_paint.pytchangecolor scCsztd�td�td�td�ddddgattd	�t�ttd
�tt	d�ttd�dS(
Ntcircletuserg�?itredtgreentbluetyellowiiit	EVENTLOOP(
tshapet
resizemodet	shapesizetwidthR
RR	t
onscreenclicktgotoR(((s//usr/lib64/python2.7/Demo/turtle/tdemo_paint.pytmain%s






t__main__N(t__doc__tturtleR	RRt__name__tmsgtmainloop(((s//usr/lib64/python2.7/Demo/turtle/tdemo_paint.pyt<module>s
		PKb1�Z�z���turtle/demohelp.txtnu�[���

  ----------------------------------------------

      turtleDemo - Help

  ----------------------------------------------

  This document has two sections:

  (1) How to use the demo viewer
  (2) How to add your own demos to the demo repository


  (1) How to use the demo viewer.

  Select a demoscript from the example menu.
  The (syntax colored) source code appears in the left
  source code window. IT CANNOT BE EDITED, but ONLY VIEWED!

  - Press START button to start the demo.
  - Stop execution by pressing the STOP button.
  - Clear screen by pressing the CLEAR button.
  - Restart by pressing the START button again.

  SPECIAL demos are those which run EVENTDRIVEN.
  (For example clock.py - or oldTurtleDemo.py which
  in the end expects a mouse click.):

      Press START button to start the demo.

      - Until the EVENTLOOP is entered everything works
      as in an ordinary demo script.

      - When the EVENTLOOP is entered, you control the
      application by using the mouse and/or keys (or it's
      controlled by some timer events)
      To stop it you can and must press the STOP button.

      While the EVENTLOOP is running, the examples menu is disabled.

      - Only after having pressed the STOP button, you may
      restart it or choose another example script.

   * * * * * * * *
   In some rare situations there may occur interferences/conflicts
   between events concerning the demo script and those concerning the
   demo-viewer. (They run in the same process.) Strange behaviour may be
   the consequence and in the worst case you must close and restart the
   viewer.
   * * * * * * * *


   (2) How to add your own demos to the demo repository
     IMPORTANT! When imported, the demo should not modify the system
     by calling functions in other modules, such as sys, tkinter, or
     turtle. Global variables should be initialized in main().

   - The script name must begin with tdemo_ ,
     so it must have the form tdemo_<your-script-name>.py

   - The code must contain a main() function which will
     be executed by the viewer (see provided example scripts).
     It may return a string which will be displayed in the Label below
     the source code window (when execution has finished.)
	   
   - In order to run mydemo.py by itself, such as during development,
     add the following at the end of the file:

    if __name__ == '__main__':
        main()
        mainloop()  # keep window 

    python -m turtledemo.mydemo  # will then run it

   - If the demo is EVENT DRIVEN, main must return the string
     "EVENTLOOP". This informs the demo viewer that the script is
     still running and must be stopped by the user!

     If an "EVENTLOOP" demo runs by itself, as with clock, which uses
     ontimer, or minimal_hanoi, which loops by recursion, then the
     code should catch the turtle.Terminator exception that will be
     raised when the user presses the STOP button.  (Paint is not such
     a demo; it only acts in response to mouse clicks and movements.)
PKb1�Z�g��#turtle/tdemo_lindenmayer_indian.pycnu�[����
Afc@sSdZddlTd�Zd�Zd�ZedkrOe�ZeGHe�ndS(s�       turtle-example-suite:

        xtx_lindenmayer_indian.py

Each morning women in Tamil Nadu, in southern
India, place designs, created by using rice
flour and known as kolam on the thresholds of
their homes.

These can be described by Lindenmayer systems,
which can easily be implemented with turtle
graphics and Python.

Two examples are shown here:
(1) the snake kolam
(2) anklets of Krishna

Taken from Marcia Ascher: Mathematics
Elsewhere, An Exploration of Ideas Across
Cultures

i����(t*cCsNxGt|�D]9}d}x$|D]}||j||�}q W|}q
W|S(Nt(trangetget(tseqtreplacementRulestntitnewseqtelement((s</usr/lib64/python2.7/Demo/turtle/tdemo_lindenmayer_indian.pytreplaces

cCsWxP|D]H}y||�Wqtk
rNyt|||�WqOqOXqXqWdS(N(t	TypeErrortdraw(tcommandstrulestb((s</usr/lib64/python2.7/Demo/turtle/tdemo_lindenmayer_indian.pyR&s

cCsrd�}d�}d�}i|d6|d6|d6dd6}id	d6}d
}t||d�}t�td�tdd
�t�t�td�t�t||�ddl	m
}|d�d�}d�}	d�}
i|d6|	d6|
d6}idd6dd6}d}
t�td
�tdd
�t�td�t|
|d�}t||�td�dS(NcSstd�dS(Ni-(tright(((s</usr/lib64/python2.7/Demo/turtle/tdemo_lindenmayer_indian.pytr7scSstd�dS(Ni-(tleft(((s</usr/lib64/python2.7/Demo/turtle/tdemo_lindenmayer_indian.pytl:scSstd�dS(Ng@(tforward(((s</usr/lib64/python2.7/Demo/turtle/tdemo_lindenmayer_indian.pytf=st-t+Rsf+f+f--f--f+f+fRsb+f+b--f--b+f+bs
b--f--b--fiiii�i����(tsleepcSstd�tdd�dS(Ntredi
iZ(tcolortcircle(((s</usr/lib64/python2.7/Demo/turtle/tdemo_lindenmayer_indian.pytAVs
cSsOddlm}td�d|d�}t|�t|d�t|�dS(Ni����(tsqrttblackiii(tmathRRRR(RR((s</usr/lib64/python2.7/Demo/turtle/tdemo_lindenmayer_indian.pytBZs


cSstd�td�dS(Ntgreeni
(RR(((s</usr/lib64/python2.7/Demo/turtle/tdemo_lindenmayer_indian.pytFbs
tatafbfat	afbfbfbfatfbfbfbfbi-sDone!(R
tresettspeedttracerthttuptbackwardtdownRttimeRR(RRRtsnake_rulestsnake_replacementRulestsnake_starttdrawingRRR R"t
krishna_rulestkrishna_replacementRulest
krishna_start((s</usr/lib64/python2.7/Demo/turtle/tdemo_lindenmayer_indian.pytmain1s@			"





			




t__main__N(t__doc__tturtleR
RR6t__name__tmsgtmainloop(((s</usr/lib64/python2.7/Demo/turtle/tdemo_lindenmayer_indian.pyt<module>s
			C	PKb1�Zu��Uccturtle/tdemo_two_canvases.pycnu�[����
��^c@sOdZddlmZmZmZd�ZedkrKe�ej�ndS(s�turtledemo.two_canvases

Use TurtleScreen and RawTurtle to draw on two
distinct canvases in a separate windows. The
new window must be separately closed in
addition to pressing the STOP button.
i����(tTurtleScreent	RawTurtletTKc	Cs�tj�}tj|dddddd�}tj|dddddd�}|j�|j�t|�}|jddd	�t|�}|jd	dd�t|�}t|�}|jd
d�|jd�|jdd�|jd�x.||fD] }|j	d
�|j
d�q�W|j
d�x||fD]}|j�q=WxEtd�D]7}x.||fD] }|j
d�|j
d�qqWq^WxB||fD]4}|j�|j
d�|j�|jd�q�WdS(Ntwidthi,theighti�tbgs#ddffffs#ffeeeeg333333�?itreditbluetturtlei$i�ii2iHi6t	EVENTLOOP(ig333333�?g333333�?(g333333�?g333333�?i(RtTktCanvastpackRtbgcolorRtcolorRtshapetltt
begin_filltrangetfdtend_filltputbk(	troottcv1tcv2ts1ts2tptqttti((s6/usr/lib64/python2.7/Demo/turtle/tdemo_two_canvases.pytmains>!!









t__main__N(t__doc__RRRRR t__name__tmainloop(((s6/usr/lib64/python2.7/Demo/turtle/tdemo_two_canvases.pyt<module>s
	)PKb1�ZH�B�		turtle/tdemo_paint.pynuȯ��#! /usr/bin/python2.7
"""       turtle-example-suite:

            tdemo_paint.py

A simple  event-driven paint program

- left mouse button moves turtle
- middle mouse button changes color
- right mouse button toogles betweem pen up
(no line drawn when the turtle moves) and
pen down (line is drawn). If pen up follows
at least two pen-down moves, the polygon that
includes the starting point is filled.
 -------------------------------------------
 Play around by clicking into the canvas
 using all three mouse buttons.
 -------------------------------------------
          To exit press STOP button
 -------------------------------------------
"""
from turtle import *

def switchupdown(x=0, y=0):
    if pen()["pendown"]:
        end_fill()
        up()
    else:
        down()
        begin_fill()

def changecolor(x=0, y=0):
    global colors
    colors = colors[1:]+colors[:1]
    color(colors[0])

def main():
    global colors
    shape("circle")
    resizemode("user")
    shapesize(.5)
    width(3)
    colors=["red", "green", "blue", "yellow"]
    color(colors[0])
    switchupdown()
    onscreenclick(goto,1)
    onscreenclick(changecolor,2)
    onscreenclick(switchupdown,3)
    return "EVENTLOOP"

if __name__ == "__main__":
    msg = main()
    print msg
    mainloop()
PKb1�Z�{P�turtle/tdemo_minimal_hanoi.pynuȯ��#! /usr/bin/python2.7
"""       turtle-example-suite:

         tdemo_minimal_hanoi.py

A minimal 'Towers of Hanoi' animation:
A tower of 6 discs is transferred from the
left to the right peg.

An imho quite elegant and concise
implementation using a tower class, which
is derived from the built-in type list.

Discs are turtles with shape "square", but
stretched to rectangles by shapesize()
 ---------------------------------------
       To exit press STOP button
 ---------------------------------------
"""
from turtle import *

class Disc(Turtle):
    def __init__(self, n):
        Turtle.__init__(self, shape="square", visible=False)
        self.pu()
        self.shapesize(1.5, n*1.5, 2) # square-->rectangle
        self.fillcolor(n/6., 0, 1-n/6.)
        self.st()

class Tower(list):
    "Hanoi tower, a subclass of built-in type list"
    def __init__(self, x):
        "create an empty tower. x is x-position of peg"
        self.x = x
    def push(self, d):
        d.setx(self.x)
        d.sety(-150+34*len(self))
        self.append(d)
    def pop(self):
        d = list.pop(self)
        d.sety(150)
        return d

def hanoi(n, from_, with_, to_):
    if n > 0:
        hanoi(n-1, from_, to_, with_)
        to_.push(from_.pop())
        hanoi(n-1, with_, from_, to_)

def play():
    onkey(None,"space")
    clear()
    try:
        hanoi(6, t1, t2, t3)
        write("press STOP button to exit",
              align="center", font=("Courier", 16, "bold"))
    except Terminator:
        pass  # turtledemo user pressed STOP

def main():
    global t1, t2, t3
    ht(); penup(); goto(0, -225)   # writer turtle
    t1 = Tower(-250)
    t2 = Tower(0)
    t3 = Tower(250)
    # make tower of 6 discs
    for i in range(6,0,-1):
        t1.push(Disc(i))
    # prepare spartanic user interface ;-)
    write("press spacebar to start game",
          align="center", font=("Courier", 16, "bold"))
    onkey(play, "space")
    listen()
    return "EVENTLOOP"

if __name__=="__main__":
    msg = main()
    print msg
    mainloop()
PKb1�Z�j�N=	=	turtle/tdemo_colormixer.pyonu�[����
��^c@slddlmZmZmZdefd��YZd�Zd�Zedkrhe�ZeGHe�ndS(i����(tScreentTurtletmainlooptColorTurtlecBseZd�Zd�ZRS(cCstj|�|jd�|jd�|jddd�|jd�dddg|_||_||j|<|j|j�|j	d�|j
d�|j�|j|d�|j
�|jd�|j�|j|�|jd	�|j|j�dS(
Ntturtletuseriii
iiZitgray25(Rt__init__tshapet
resizemodet	shapesizetpensizet_colortxtcolortspeedtlefttputgototpdtsetytpencolortondragtshift(tselfR
ty((s4/usr/lib64/python2.7/Demo/turtle/tdemo_colormixer.pyRs&



	








cCsP|jtdt|d���|j�|j|j<|j|j�t�dS(Nii(RtmaxtmintycorRR
t	fillcolort
setbgcolor(RR
R((s4/usr/lib64/python2.7/Demo/turtle/tdemo_colormixer.pyRs(t__name__t
__module__RR(((s4/usr/lib64/python2.7/Demo/turtle/tdemo_colormixer.pyRs	cCs)tjtj�tj�tj��dS(N(tscreentbgcolortredRtgreentblue(((s4/usr/lib64/python2.7/Demo/turtle/tdemo_colormixer.pyR"sc	Cs�t�atjd�tjdddd�tdd�atdd�atdd�at�t	�}|j
�|j�|jdd	�|j
d
ddd
dddf�dS(Nii����g333333ӿig�������?g�?iigffffff�?sDRAG!taligntcentertfonttArialitboldtitalict	EVENTLOOP(R*R+(RR!tdelaytsetworldcoordinatesRR#R$R%RRthtRRtwrite(twriter((s4/usr/lib64/python2.7/Demo/turtle/tdemo_colormixer.pytmain%s	
	

"t__main__N(	RRRRRRR2Rtmsg(((s4/usr/lib64/python2.7/Demo/turtle/tdemo_colormixer.pyt<module>s			PKb1�Z�:8�''turtle/tdemo_yinyang.pynuȯ��#! /usr/bin/python2.7
"""       turtle-example-suite:

            tdemo_yinyang.py

Another drawing suitable as a beginner's
programming example.

The small circles are drawn by the circle
command.

"""

from turtle import *

def yin(radius, color1, color2):
    width(3)
    color("black")
    fill(True)
    circle(radius/2., 180)
    circle(radius, 180)
    left(180)
    circle(-radius/2., 180)
    color(color1)
    fill(True)
    color(color2)
    left(90)
    up()
    forward(radius*0.375)
    right(90)
    down()
    circle(radius*0.125)
    left(90)
    fill(False)
    up()
    backward(radius*0.375)
    down()
    left(90)

def main():
    reset()
    yin(200, "white", "black")
    yin(200, "black", "white")
    ht()
    return "Done!"

if __name__ == '__main__':
    main()
    mainloop()
PKb1�Z�S�;Q
Q
turtle/tdemo_fractalcurves.pynuȯ��#! /usr/bin/python2.7
"""      turtle-example-suite:

        tdemo_fractalCurves.py

This program draws two fractal-curve-designs:
(1) A hilbert curve (in a box)
(2) A combination of Koch-curves.

The CurvesTurtle class and the fractal-curve-
methods are taken from the PythonCard example
scripts for turtle-graphics.
"""
from turtle import *
from time import sleep, clock

class CurvesTurtle(Pen):
    # example derived from
    # Turtle Geometry: The Computer as a Medium for Exploring Mathematics
    # by Harold Abelson and Andrea diSessa
    # p. 96-98
    def hilbert(self, size, level, parity):
        if level == 0:
            return
        # rotate and draw first subcurve with opposite parity to big curve
        self.left(parity * 90)
        self.hilbert(size, level - 1, -parity)
        # interface to and draw second subcurve with same parity as big curve
        self.forward(size)
        self.right(parity * 90)
        self.hilbert(size, level - 1, parity)
        # third subcurve
        self.forward(size)
        self.hilbert(size, level - 1, parity)
        # fourth subcurve
        self.right(parity * 90)
        self.forward(size)
        self.hilbert(size, level - 1, -parity)
        # a final turn is needed to make the turtle
        # end up facing outward from the large square
        self.left(parity * 90)

    # Visual Modeling with Logo: A Structural Approach to Seeing
    # by James Clayson
    # Koch curve, after Helge von Koch who introduced this geometric figure in 1904
    # p. 146
    def fractalgon(self, n, rad, lev, dir):
        import math

        # if dir = 1 turn outward
        # if dir = -1 turn inward
        edge = 2 * rad * math.sin(math.pi / n)
        self.pu()
        self.fd(rad)
        self.pd()
        self.rt(180 - (90 * (n - 2) / n))
        for i in range(n):
            self.fractal(edge, lev, dir)
            self.rt(360 / n)
        self.lt(180 - (90 * (n - 2) / n))
        self.pu()
        self.bk(rad)
        self.pd()

    # p. 146
    def fractal(self, dist, depth, dir):
        if depth < 1:
            self.fd(dist)
            return
        self.fractal(dist / 3, depth - 1, dir)
        self.lt(60 * dir)
        self.fractal(dist / 3, depth - 1, dir)
        self.rt(120 * dir)
        self.fractal(dist / 3, depth - 1, dir)
        self.lt(60 * dir)
        self.fractal(dist / 3, depth - 1, dir)

def main():
    ft = CurvesTurtle()

    ft.reset()
    ft.speed(0)
    ft.ht()
    ft.tracer(1,0)
    ft.pu()

    size = 6
    ft.setpos(-33*size, -32*size)
    ft.pd()

    ta=clock()
    ft.fillcolor("red")
    ft.fill(True)
    ft.fd(size)

    ft.hilbert(size, 6, 1)

    # frame
    ft.fd(size)
    for i in range(3):
        ft.lt(90)
        ft.fd(size*(64+i%2))
    ft.pu()
    for i in range(2):
        ft.fd(size)
        ft.rt(90)
    ft.pd()
    for i in range(4):
        ft.fd(size*(66+i%2))
        ft.rt(90)
    ft.fill(False)
    tb=clock()
    res =  "Hilbert: %.2fsec. " % (tb-ta)

    sleep(3)

    ft.reset()
    ft.speed(0)
    ft.ht()
    ft.tracer(1,0)

    ta=clock()
    ft.color("black", "blue")
    ft.fill(True)
    ft.fractalgon(3, 250, 4, 1)
    ft.fill(True)
    ft.color("red")
    ft.fractalgon(3, 200, 4, -1)
    ft.fill(False)
    tb=clock()
    res +=  "Koch: %.2fsec." % (tb-ta)
    return res

if __name__  == '__main__':
    msg = main()
    print msg
    mainloop()
PKb1�Z�3'vuuturtle/tdemo_penrose.pyonu�[����
Afc@sdZddlTddlmZmZddlmZmZddZd	ed
ed�Z	d�Z
d
�Zd�Zd�Z
d	d�Zd�Zd�Zd�Zd�Zddedd	d�Zed�Zd�Zedkr�e�Ze�ndS( s�       xturtle-example-suite:

          xtx_kites_and_darts.py

Constructs two aperiodic penrose-tilings,
consisting of kites and darts, by the method
of inflation in six steps.

Starting points are the patterns "sun"
consisting of five kites and "star"
consisting of five darts.

For more information see:
 http://en.wikipedia.org/wiki/Penrose_tiling
 -------------------------------------------
i����(t*(tcostpi(tclocktsleepig�?ig@iii
cCsht|}td�t|�td�t|�td�t|�td�t|�td�dS(Ni$ili�(tftlttfdtrt(tltfl((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pytkites








cCsht|}td�t|�td�t|�td�t|�td�t|�td�dS(Ni$i�(RRRR(R	R
((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pytdart%s








cCs|dkrat�\}}tt��t|d�t|d�}}}tt|||f<dSt|}td�t||d�t	|�t
d�t||d�td�t	|t�t
d�t||d�td�t	|�t
d�t||d�td�dS(	Niii$ii�ii�i�(
tpostinttheadingtroundtTruettiledictRRtinflatedartRRtinflatekitetd(R	tntpxtpythtxtyR
((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pyR1s(/








cCs�|dkrat�\}}tt��t|d�t|d�}}}tt|||f<dSt|}t||d�td�t	|�t
d�t||d�td�t	|t�t
d�t||d�t	|�t
d�dS(	Niiii$i�i6i~i�(
R
RRRtFalseRRRRRRRR(R	RRRRRRR
((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pyRGs"/






cCs�t�|t|}t|d|d|�xvtD]n}|\}}}t||�t|�t|r�td�tdd�ntd�tdd�t�q4WdS(	NgY@Rtblackig�?R(ig�?i(g�?ii(	tclearRt	shapesizeRtsetpost
setheadingtshapetcolortstamp(R	RtthtkRRR((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pytdrawZs






cCs2x+td�D]}t||�td�q
WdS(NiiH(trangeRR(R	Rti((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pytsunjs
cCs2x+td�D]}t||�td�q
WdS(NiiH(R(RR(R	RR)((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pytstaros
cCshtd�t�td�t�tdt��t�td�t�tdt��td�dS(NiidRRi(ttracert
begin_polyRtend_polytregister_shapetget_polyR(((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pyt
makeshapests


cCs*t�t�t�t�td�dS(Ntuser(tresetthttpuR1t
resizemode(((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pytstart�s
i�iicCs�t|�td�iat�}td�|||�t�}t|||�td�t�}d||GHd||GHd||GHtgtD]}t|r�|^q��}	tgtD]}t|s�|^q��}
d|	|
|	|
fGHdS(NiisCalculation:   %7.4f ssDrawing:  %7.4f ssTogether: %7.4f ss"%d kites and %d darts = %d pieces.(tgotoR!RRR,R'tlen(R	RtfuntstartposR%tatbtcRtnktnd((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pyttest�s 

	

	
	


))cCskt�x]td�D]O}t�}td||�t�}||}|dkrtd|�qqWdS(Nii,i(R7R(RRAR(R:R)R<R=tt((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pytdemo�s		
cCs�td�tddd�tt�td�tt�td�tdd�tddd�td	d
ddd�t	dddd�dS(Ntlogog333333�?iiRi8���gffffff�?isPlease wait...taligntcentertfontsArial Blacki$tboldiXiR;iFiutDone(sArial Blacki$RH(iFiu(
tmodetbgcolorRCR*RR+tpencolorR8twriteRA(((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pytmain�s





	
t__main__Ng��w�@gP�/7���?(ii(t__doc__tturtletmathRRttimeRRRRRRRRR'R*R+R1R7RARCRNt__name__tmsgtmainloop(((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pyt<module>s(

								
		PKb1�ZPX��''turtle/tdemo_minimal_hanoi.pycnu�[����
Afc@sdZddlTdefd��YZdefd��YZd�Zd�Zd	�Ze	d
kr{e�Z
e
GHe�ndS(s�       turtle-example-suite:

         tdemo_minimal_hanoi.py

A minimal 'Towers of Hanoi' animation:
A tower of 6 discs is transferred from the
left to the right peg.

An imho quite elegant and concise
implementation using a tower class, which
is derived from the built-in type list.

Discs are turtles with shape "square", but
stretched to rectangles by shapesize()
 ---------------------------------------
       To exit press STOP button
 ---------------------------------------
i����(t*tDisccBseZd�ZRS(cCsgtj|dddt�|j�|jd|dd�|j|ddd|d�|j�dS(	Ntshapetsquaretvisibleg�?ig@ii(tTurtlet__init__tFalsetput	shapesizet	fillcolortst(tselftn((s7/usr/lib64/python2.7/Demo/turtle/tdemo_minimal_hanoi.pyRs

(t__name__t
__module__R(((s7/usr/lib64/python2.7/Demo/turtle/tdemo_minimal_hanoi.pyRstTowercBs)eZdZd�Zd�Zd�ZRS(s-Hanoi tower, a subclass of built-in type listcCs
||_dS(s-create an empty tower. x is x-position of pegN(tx(RR((s7/usr/lib64/python2.7/Demo/turtle/tdemo_minimal_hanoi.pyR scCs<|j|j�|jddt|��|j|�dS(Nij���i"(tsetxRtsetytlentappend(Rtd((s7/usr/lib64/python2.7/Demo/turtle/tdemo_minimal_hanoi.pytpush#scCs tj|�}|jd�|S(Ni�(tlisttpopR(RR((s7/usr/lib64/python2.7/Demo/turtle/tdemo_minimal_hanoi.pyR's
(RRt__doc__RRR(((s7/usr/lib64/python2.7/Demo/turtle/tdemo_minimal_hanoi.pyRs		cCsT|dkrPt|d|||�|j|j��t|d|||�ndS(Nii(thanoiRR(R
tfrom_twith_tto_((s7/usr/lib64/python2.7/Demo/turtle/tdemo_minimal_hanoi.pyR,scCsYtdd�t�y-tdttt�tddddd
�Wntk
rTnXdS(Ntspaceispress STOP button to exittaligntcentertfonttCourieritbold(R#iR$(	tonkeytNonetclearRtt1tt2tt3twritet
Terminator(((s7/usr/lib64/python2.7/Demo/turtle/tdemo_minimal_hanoi.pytplay2s
	
cCs�t�t�tdd�td�atd�atd�ax-tddd�D]}tjt	|��qRWt
ddd	d
d�ttd�t
�dS(Nii���i���i�ii����spress spacebar to start gameR R!R"R#iR$Rt	EVENTLOOP(R#iR$(thttpenuptgotoRR(R)R*trangeRRR+R%R-tlisten(ti((s7/usr/lib64/python2.7/Demo/turtle/tdemo_minimal_hanoi.pytmain<s
	

t__main__N(RtturtleRRRRRR-R5Rtmsgtmainloop(((s7/usr/lib64/python2.7/Demo/turtle/tdemo_minimal_hanoi.pyt<module>s
		
		PKb1�ZJȤ��turtle/turtle.cfgnu�[���width = 800
height = 600
canvwidth = 1200
canvheight = 900
shape = arrow
mode = standard
resizemode = auto
fillcolor = ""
title = Python turtle graphics demo.

PKb1�ZPX��''turtle/tdemo_minimal_hanoi.pyonu�[����
Afc@sdZddlTdefd��YZdefd��YZd�Zd�Zd	�Ze	d
kr{e�Z
e
GHe�ndS(s�       turtle-example-suite:

         tdemo_minimal_hanoi.py

A minimal 'Towers of Hanoi' animation:
A tower of 6 discs is transferred from the
left to the right peg.

An imho quite elegant and concise
implementation using a tower class, which
is derived from the built-in type list.

Discs are turtles with shape "square", but
stretched to rectangles by shapesize()
 ---------------------------------------
       To exit press STOP button
 ---------------------------------------
i����(t*tDisccBseZd�ZRS(cCsgtj|dddt�|j�|jd|dd�|j|ddd|d�|j�dS(	Ntshapetsquaretvisibleg�?ig@ii(tTurtlet__init__tFalsetput	shapesizet	fillcolortst(tselftn((s7/usr/lib64/python2.7/Demo/turtle/tdemo_minimal_hanoi.pyRs

(t__name__t
__module__R(((s7/usr/lib64/python2.7/Demo/turtle/tdemo_minimal_hanoi.pyRstTowercBs)eZdZd�Zd�Zd�ZRS(s-Hanoi tower, a subclass of built-in type listcCs
||_dS(s-create an empty tower. x is x-position of pegN(tx(RR((s7/usr/lib64/python2.7/Demo/turtle/tdemo_minimal_hanoi.pyR scCs<|j|j�|jddt|��|j|�dS(Nij���i"(tsetxRtsetytlentappend(Rtd((s7/usr/lib64/python2.7/Demo/turtle/tdemo_minimal_hanoi.pytpush#scCs tj|�}|jd�|S(Ni�(tlisttpopR(RR((s7/usr/lib64/python2.7/Demo/turtle/tdemo_minimal_hanoi.pyR's
(RRt__doc__RRR(((s7/usr/lib64/python2.7/Demo/turtle/tdemo_minimal_hanoi.pyRs		cCsT|dkrPt|d|||�|j|j��t|d|||�ndS(Nii(thanoiRR(R
tfrom_twith_tto_((s7/usr/lib64/python2.7/Demo/turtle/tdemo_minimal_hanoi.pyR,scCsYtdd�t�y-tdttt�tddddd
�Wntk
rTnXdS(Ntspaceispress STOP button to exittaligntcentertfonttCourieritbold(R#iR$(	tonkeytNonetclearRtt1tt2tt3twritet
Terminator(((s7/usr/lib64/python2.7/Demo/turtle/tdemo_minimal_hanoi.pytplay2s
	
cCs�t�t�tdd�td�atd�atd�ax-tddd�D]}tjt	|��qRWt
ddd	d
d�ttd�t
�dS(Nii���i���i�ii����spress spacebar to start gameR R!R"R#iR$Rt	EVENTLOOP(R#iR$(thttpenuptgotoRR(R)R*trangeRRR+R%R-tlisten(ti((s7/usr/lib64/python2.7/Demo/turtle/tdemo_minimal_hanoi.pytmain<s
	

t__main__N(RtturtleRRRRRR-R5Rtmsgtmainloop(((s7/usr/lib64/python2.7/Demo/turtle/tdemo_minimal_hanoi.pyt<module>s
		
		PKb1�ZUW�p�� turtle/tdemo_planet_and_moon.pycnu�[����
Afc@s�dZddlmZmZmZmZddlmZdZ	de
fd��YZdefd��YZd	�Z
ed
kr�e
�e�ndS(s�       turtle-example-suite:

        tdemo_planets_and_moon.py

Gravitational system simulation using the
approximation method from Feynman-lectures,
p.9-8, using turtlegraphics.

Example: heavy central body, light planet,
very light moon!
Planet has a circular orbit, moon a stable
orbit around the planet.

You can hold the movement temporarily by
pressing the left mouse button with the
mouse over the scrollbar of the canvas.

i����(tShapetTurtletmainlooptVec2D(tsleepitGravSyscBs#eZd�Zd�Zd�ZRS(cCsg|_d|_d|_dS(Nig{�G�z�?(tplanetstttdt(tself((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pyt__init__s		cCs"x|jD]}|j�q
WdS(N(Rtinit(R	tp((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pyRscCsKxDtd�D]6}|j|j7_x|jD]}|j�q/Wq
WdS(Ni'(trangeRRRtstep(R	tiR((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pytstart!s(t__name__t
__module__R
RR(((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pyRs		tStarcBs,eZd�Zd�Zd�Zd�ZRS(cCsptj|d|�|j�||_|j|�||_|jj|�||_|j	d�|j
�dS(Ntshapetuser(RR
tpenuptmtsetpostvRtappendtgravSyst
resizemodetpendown(R	RtxRRR((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pyR
(s
	
		
cCs:|jj}|j�|_|jd||j|_dS(Ng�?(RRtacctaR(R	R((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pyR2scCsrtdd�}x\|jjD]N}||kr|j�|j�}|t|jt|�d|7}qqW|S(Nii(tVecRRtpostGRtabs(R	R tplanetR((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pyR6s*cCs�|jj}|j|j�||j�|jjj|�dkrh|j|j|jjd��n|j	�|_
|j||j
|_dS(Ni(RRRR"RRtindext
setheadingttowardsRR (R	R((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pyR=s#(RRR
RRR(((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pyR's	
		cCs�t�}|j�|jdd�|j�|j�|jd�|jd�|j�|jdd�|j	�|j
�}|j�|jdd�|j	�|j
�}td�}|j|d�|j|d�|j
�jd|�|jd	d�t�}td
tdd�tdd�|d�}|jd
�|jd�|j�tdtdd�tdd�|d�}|jd�|jd�td	tdd�tdd�|d�}|jd�|jd�|j�|j�dS(NiiiZi�tcompoundtorangetblueR%ii@Bg�tcircletyellowg������?i�0i�i�tgreeng�������?i�i'g�?sDone!(Rtresetttracerthttputfdtltt
begin_polyR,tend_polytget_polyRtaddcomponentt	getscreentregister_shapeRRR!tcolort	shapesizetpencolorRR(tstm1tm2tplanetshapetgstsuntearthtmoon((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pytmainGsD	








	*


*

*



t__main__N(t__doc__tturtleRRRRR!ttimeRR#tobjectRRRFR(((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pyt<module>s" 	'PKb1�Z�::turtle/tdemo_colormixer.pynu�[���# colormixer

from turtle import Screen, Turtle, mainloop

class ColorTurtle(Turtle):

    def __init__(self, x, y):
        Turtle.__init__(self)
        self.shape("turtle")
        self.resizemode("user")
        self.shapesize(3,3,5)
        self.pensize(10)
        self._color = [0,0,0]
        self.x = x
        self._color[x] = y
        self.color(self._color)
        self.speed(0)
        self.left(90)
        self.pu()
        self.goto(x,0)
        self.pd()
        self.sety(1)
        self.pu()
        self.sety(y)
        self.pencolor("gray25")
        self.ondrag(self.shift)

    def shift(self, x, y):
        self.sety(max(0,min(y,1)))
        self._color[self.x] = self.ycor()
        self.fillcolor(self._color)
        setbgcolor()

def setbgcolor():
    screen.bgcolor(red.ycor(), green.ycor(), blue.ycor())

def main():
    global screen, red, green, blue
    screen = Screen()
    screen.delay(0)
    screen.setworldcoordinates(-1, -0.3, 3, 1.3)

    red = ColorTurtle(0, .5)
    green = ColorTurtle(1, .5)
    blue = ColorTurtle(2, .5)
    setbgcolor()

    writer = Turtle()
    writer.ht()
    writer.pu()
    writer.goto(1,1.15)
    writer.write("DRAG!",align="center",font=("Arial",30,("bold","italic")))
    return "EVENTLOOP"

if __name__ == "__main__":
    msg = main()
    print msg
    mainloop()
PKb1�ZM�krrturtle/tdemo_nim.pynu�[���"""      turtle-example-suite:

            tdemo_nim.py

Play nim against the computer. The player
who takes the last stick is the winner.

Implements the model-view-controller
design pattern.
"""


import turtle
import random
import time

SCREENWIDTH = 640
SCREENHEIGHT = 480

MINSTICKS = 7
MAXSTICKS = 31

HUNIT = SCREENHEIGHT // 12
WUNIT = SCREENWIDTH // ((MAXSTICKS // 5) * 11 + (MAXSTICKS % 5) * 2)

SCOLOR = (63, 63, 31)
HCOLOR = (255, 204, 204)
COLOR = (204, 204, 255)

def randomrow():
    return random.randint(MINSTICKS, MAXSTICKS)

def computerzug(state):
    xored = state[0] ^ state[1] ^ state[2]
    if xored == 0:
        return randommove(state)
    for z in range(3):
        s = state[z] ^ xored
        if s <= state[z]:
            move = (z, s)
            return move

def randommove(state):
    m = max(state)
    while True:
        z = random.randint(0,2)
        if state[z] > (m > 1):
            break
    rand = random.randint(m > 1, state[z]-1)
    return z, rand


class NimModel(object):
    def __init__(self, game):
        self.game = game

    def setup(self):
        if self.game.state not in [Nim.CREATED, Nim.OVER]:
            return
        self.sticks = [randomrow(), randomrow(), randomrow()]
        self.player = 0
        self.winner = None
        self.game.view.setup()
        self.game.state = Nim.RUNNING

    def move(self, row, col):
        maxspalte = self.sticks[row]
        self.sticks[row] = col
        self.game.view.notify_move(row, col, maxspalte, self.player)
        if self.game_over():
            self.game.state = Nim.OVER
            self.winner = self.player
            self.game.view.notify_over()
        elif self.player == 0:
            self.player = 1
            row, col = computerzug(self.sticks)
            self.move(row, col)
            self.player = 0

    def game_over(self):
        return self.sticks == [0, 0, 0]

    def notify_move(self, row, col):
        if self.sticks[row] <= col:
            return
        self.move(row, col)


class Stick(turtle.Turtle):
    def __init__(self, row, col, game):
        turtle.Turtle.__init__(self, visible=False)
        self.row = row
        self.col = col
        self.game = game
        x, y = self.coords(row, col)
        self.shape("square")
        self.shapesize(HUNIT/10.0, WUNIT/20.0)
        self.speed(0)
        self.pu()
        self.goto(x,y)
        self.color("white")
        self.showturtle()

    def coords(self, row, col):
        packet, remainder = divmod(col, 5)
        x = (3 + 11 * packet + 2 * remainder) * WUNIT
        y = (2 + 3 * row) * HUNIT
        return x - SCREENWIDTH // 2 + WUNIT // 2, SCREENHEIGHT // 2 - y - HUNIT // 2

    def makemove(self, x, y):
        if self.game.state != Nim.RUNNING:
            return
        self.game.controller.notify_move(self.row, self.col)


class NimView(object):
    def __init__(self, game):
        self.game = game
        self.screen = game.screen
        self.model = game.model
        self.screen.colormode(255)
        self.screen.tracer(False)
        self.screen.bgcolor((240, 240, 255))
        self.writer = turtle.Turtle(visible=False)
        self.writer.pu()
        self.writer.speed(0)
        self.sticks = {}
        for row in range(3):
            for col in range(MAXSTICKS):
                self.sticks[(row, col)] = Stick(row, col, game)
        self.display("... a moment please ...")
        self.screen.tracer(True)

    def display(self, msg1, msg2=None):
        self.screen.tracer(False)
        self.writer.clear()
        if msg2 is not None:
            self.writer.goto(0, - SCREENHEIGHT // 2 + 48)
            self.writer.pencolor("red")
            self.writer.write(msg2, align="center", font=("Courier",18,"bold"))
        self.writer.goto(0, - SCREENHEIGHT // 2 + 20)
        self.writer.pencolor("black")
        self.writer.write(msg1, align="center", font=("Courier",14,"bold"))
        self.screen.tracer(True)


    def setup(self):
        self.screen.tracer(False)
        for row in range(3):
            for col in range(self.model.sticks[row]):
                self.sticks[(row, col)].color(SCOLOR)
        for row in range(3):
            for col in range(self.model.sticks[row], MAXSTICKS):
                self.sticks[(row, col)].color("white")
        self.display("Your turn! Click leftmost stick to remove.")
        self.screen.tracer(True)

    def notify_move(self, row, col, maxspalte, player):
        if player == 0:
            farbe = HCOLOR
            for s in range(col, maxspalte):
                self.sticks[(row, s)].color(farbe)
        else:
            self.display(" ... thinking ...         ")
            time.sleep(0.5)
            self.display(" ... thinking ... aaah ...")
            farbe = COLOR
            for s in range(maxspalte-1, col-1, -1):
                time.sleep(0.2)
                self.sticks[(row, s)].color(farbe)
            self.display("Your turn! Click leftmost stick to remove.")

    def notify_over(self):
        if self.game.model.winner == 0:
            msg2 = "Congrats. You're the winner!!!"
        else:
            msg2 = "Sorry, the computer is the winner."
        self.display("To play again press space bar. To leave press ESC.", msg2)

    def clear(self):
        if self.game.state == Nim.OVER:
            self.screen.clear()


class NimController(object):

    def __init__(self, game):
        self.game = game
        self.sticks = game.view.sticks
        self.BUSY = False
        for stick in self.sticks.values():
            stick.onclick(stick.makemove)
        self.game.screen.onkey(self.game.model.setup, "space")
        self.game.screen.onkey(self.game.view.clear, "Escape")
        self.game.view.display("Press space bar to start game")
        self.game.screen.listen()

    def notify_move(self, row, col):
        if self.BUSY:
            return
        self.BUSY = True
        self.game.model.notify_move(row, col)
        self.BUSY = False

class Nim(object):
    CREATED = 0
    RUNNING = 1
    OVER = 2
    def __init__(self, screen):
        self.state = Nim.CREATED
        self.screen = screen
        self.model = NimModel(self)
        self.view = NimView(self)
        self.controller = NimController(self)


def main():
    mainscreen = turtle.Screen()
    mainscreen.mode("standard")
    mainscreen.setup(SCREENWIDTH, SCREENHEIGHT)
    nim = Nim(mainscreen)
    return "EVENTLOOP!"

if __name__ == "__main__":
    main()
    turtle.mainloop()
PKb1�Z�H�llturtle/tdemo_peace.pyonu�[����
Afc@s:dZddlTd�Zedkr6e�e�ndS(s�       turtle-example-suite:

              tdemo_peace.py

A simple drawing suitable as a beginner's
programming example. Aside from the
peacecolors assignment and the for loop,
it only uses turtle commands.
i����(t*cCsMd}t�t�t�tdd	�td
�xX|D]P}t|�t�td�t�td�t	d�td
�t
d�q9Wtd�td�tdd�t�td�t	d�td�t�t	d�td�t
d�t�td�t�td�t	d�t�td�t�tdd�dS(Ntred3torangetyellowt	seagreen4torchid4t
royalblue1tdodgerblue4i����i=���iFi�iZiBitwhiteiiV���i�iTi�i-i,sDone!(RRRRRRR(tresettScreentuptgototwidthtcolortdowntforwardtbackwardtlefttrighttcircle(tpeacecolorstpcolor((s//usr/lib64/python2.7/Demo/turtle/tdemo_peace.pytmainsL





















t__main__N(t__doc__tturtleRt__name__tmainloop(((s//usr/lib64/python2.7/Demo/turtle/tdemo_peace.pyt<module>
s

	-PKb1�Z�w�[��turtle/tdemo_wikipedia.pycnu�[����
��^c@srdZddlmZmZmZddlmZmZd�Zd�Z	e
dkrne	�ZeGHe�ndS(sF      turtle-example-suite:

          tdemo_wikipedia3.py

This example is
inspired by the Wikipedia article on turtle
graphics. (See example wikipedia1 for URLs)

First we create (ne-1) (i.e. 35 in this
example) copies of our first turtle p.
Then we let them perform their steps in
parallel.

Followed by a complete undo().
i����(tScreentTurtletmainloop(tclocktsleepcCs�|g}xGtd|�D]6}|j�}|jd|�|j|�|}qWxvt|�D]h}t|d|�|d}xC|D];}|jd|�|jd|d|�|j|�q�Wq`WdS(Nig�v@g@gffffff�?i(trangetclonetrttappendtabstpencolortfd(tptnetszt
turtlelisttitqtctt((s3/usr/lib64/python2.7/Demo/turtle/tdemo_wikipedia.pytmn_ecks	


cCst�}|jd�t�}|jd�|j�|jd�|jd�|jdd�t�}t	|dd�t�}||}t
d�t�}xPtg|j�D]}|j
�^q��r�x|j�D]}|j�q�Wq�Wt�}d|||S(	Ntblackitredii$iisLaufzeit: %.3f sec(RtbgcolorRtspeedt
hideturtleR
tpensizettracerRRRtanytturtlestundobufferentriestundo(tsRtattettz1R((s3/usr/lib64/python2.7/Demo/turtle/tdemo_wikipedia.pytmain$s&	
	



		

	.	t__main__N(t__doc__tturtleRRRttimeRRRR$t__name__tmsg(((s3/usr/lib64/python2.7/Demo/turtle/tdemo_wikipedia.pyt<module>s			PKb1�Z�H�llturtle/tdemo_peace.pycnu�[����
Afc@s:dZddlTd�Zedkr6e�e�ndS(s�       turtle-example-suite:

              tdemo_peace.py

A simple drawing suitable as a beginner's
programming example. Aside from the
peacecolors assignment and the for loop,
it only uses turtle commands.
i����(t*cCsMd}t�t�t�tdd	�td
�xX|D]P}t|�t�td�t�td�t	d�td
�t
d�q9Wtd�td�tdd�t�td�t	d�td�t�t	d�td�t
d�t�td�t�td�t	d�t�td�t�tdd�dS(Ntred3torangetyellowt	seagreen4torchid4t
royalblue1tdodgerblue4i����i=���iFi�iZiBitwhiteiiV���i�iTi�i-i,sDone!(RRRRRRR(tresettScreentuptgototwidthtcolortdowntforwardtbackwardtlefttrighttcircle(tpeacecolorstpcolor((s//usr/lib64/python2.7/Demo/turtle/tdemo_peace.pytmainsL





















t__main__N(t__doc__tturtleRt__name__tmainloop(((s//usr/lib64/python2.7/Demo/turtle/tdemo_peace.pyt<module>
s

	-PKb1�Ztn*ܷ�turtle/tdemo_chaos.pynu�[���# File: tdemo_chaos.py
# Author: Gregor Lingl
# Date: 2009-06-24

# A demonstration of chaos

from turtle import *

N = 80

def f(x):
    return 3.9*x*(1-x)

def g(x):
    return 3.9*(x-x**2)

def h(x):
    return 3.9*x-3.9*x*x

def jumpto(x, y):
    penup(); goto(x,y)

def line(x1, y1, x2, y2):
    jumpto(x1, y1)
    pendown()
    goto(x2, y2)

def coosys():
    line(-1, 0, N+1, 0)
    line(0, -0.1, 0, 1.1)

def plot(fun, start, color):
    pencolor(color)
    x = start
    jumpto(0, x)
    pendown()
    dot(5)
    for i in range(N):
        x=fun(x)
        goto(i+1,x)
        dot(5)

def main():
    reset()
    setworldcoordinates(-1.0,-0.1, N+1, 1.1)
    speed(0)
    hideturtle()
    coosys()
    plot(f, 0.35, "blue")
    plot(g, 0.35, "green")
    plot(h, 0.35, "red")
    # Now zoom in:
    for s in range(100):
        setworldcoordinates(0.5*s,-0.1, N+1, 1.1)
    return "Done!"

if __name__ == "__main__":
    main()
    mainloop()
PKb1�Z:�B�mmturtle/tdemo_paint.pyonu�[����
Afc@s_dZddlTddd�Zddd�Zd�Zedkr[e�ZeGHe�ndS(	sp       turtle-example-suite:

            tdemo_paint.py

A simple  event-driven paint program

- left mouse button moves turtle
- middle mouse button changes color
- right mouse button toogles betweem pen up
(no line drawn when the turtle moves) and
pen down (line is drawn). If pen up follows
at least two pen-down moves, the polygon that
includes the starting point is filled.
 -------------------------------------------
 Play around by clicking into the canvas
 using all three mouse buttons.
 -------------------------------------------
          To exit press STOP button
 -------------------------------------------
i����(t*icCs0t�drt�t�nt�t�dS(Ntpendown(tpentend_filltuptdownt
begin_fill(txty((s//usr/lib64/python2.7/Demo/turtle/tdemo_paint.pytswitchupdowns


cCs$tdtd attd�dS(Nii(tcolorstcolor(RR((s//usr/lib64/python2.7/Demo/turtle/tdemo_paint.pytchangecolor scCsztd�td�td�td�ddddgattd	�t�ttd
�tt	d�ttd�dS(
Ntcircletuserg�?itredtgreentbluetyellowiiit	EVENTLOOP(
tshapet
resizemodet	shapesizetwidthR
RR	t
onscreenclicktgotoR(((s//usr/lib64/python2.7/Demo/turtle/tdemo_paint.pytmain%s






t__main__N(t__doc__tturtleR	RRt__name__tmsgtmainloop(((s//usr/lib64/python2.7/Demo/turtle/tdemo_paint.pyt<module>s
		PKb1�Z��j%))turtle/tdemo_peace.pynuȯ��#! /usr/bin/python2.7
"""       turtle-example-suite:

              tdemo_peace.py

A simple drawing suitable as a beginner's
programming example. Aside from the
peacecolors assignment and the for loop,
it only uses turtle commands.
"""

from turtle import *

def main():
    peacecolors = ("red3",  "orange", "yellow",
                   "seagreen4", "orchid4",
                   "royalblue1", "dodgerblue4")

    reset()
    Screen()
    up()
    goto(-320,-195)
    width(70)

    for pcolor in peacecolors:
        color(pcolor)
        down()
        forward(640)
        up()
        backward(640)
        left(90)
        forward(66)
        right(90)

    width(25)
    color("white")
    goto(0,-170)
    down()

    circle(170)
    left(90)
    forward(340)
    up()
    left(180)
    forward(170)
    right(45)
    down()
    forward(170)
    up()
    backward(170)
    left(90)
    down()
    forward(170)
    up()

    goto(0,300) # vanish if hideturtle() is not available ;-)
    return "Done!"

if __name__ == "__main__":
    main()
    mainloop()
PKb1�Z^��turtle/tdemo_chaos.pyonu�[����
��^c@syddlTdZd�Zd�Zd�Zd�Zd�Zd�Zd	�Zd
�Z	e
dkrue	�e�ndS(
i����(t*iPcCsd|d|S(Ng333333@i((tx((s//usr/lib64/python2.7/Demo/turtle/tdemo_chaos.pytfscCsd||dS(Ng333333@i((R((s//usr/lib64/python2.7/Demo/turtle/tdemo_chaos.pytgscCsd|d||S(Ng333333@((R((s//usr/lib64/python2.7/Demo/turtle/tdemo_chaos.pythscCst�t||�dS(N(tpenuptgoto(Rty((s//usr/lib64/python2.7/Demo/turtle/tdemo_chaos.pytjumptoscCs%t||�t�t||�dS(N(RtpendownR(tx1ty1tx2ty2((s//usr/lib64/python2.7/Demo/turtle/tdemo_chaos.pytlines
cCs.tddtdd�tdddd�dS(Ni����iig��������g�������?(RtN(((s//usr/lib64/python2.7/Demo/turtle/tdemo_chaos.pytcoosysscCspt|�|}td|�t�td�x;tt�D]-}||�}t|d|�td�q;WdS(Niii(tpencolorRR	tdottrangeRR(tfuntstarttcolorRti((s//usr/lib64/python2.7/Demo/turtle/tdemo_chaos.pytplot s


cCs�t�tddtdd�td�t�t�ttdd�ttdd�tt	dd	�x/t
d
�D]!}td|dtdd�qsWdS(
Ng�g��������ig�������?igffffff�?tbluetgreentredidg�?sDone!(tresettsetworldcoordinatesRtspeedt
hideturtleRRRRRR(ts((s//usr/lib64/python2.7/Demo/turtle/tdemo_chaos.pytmain+s
t__main__N(tturtleRRRRRRRRR!t__name__tmainloop(((s//usr/lib64/python2.7/Demo/turtle/tdemo_chaos.pyt<module>s
								PKb1�Z������turtle/tdemo_clock.pynuȯ��#! /usr/bin/python2.7
# -*- coding: cp1252 -*-
"""       turtle-example-suite:

             tdemo_clock.py

Enhanced clock-program, showing date
and time
  ------------------------------------
   Press STOP to exit the program!
  ------------------------------------
"""
from turtle import *
from datetime import datetime

def jump(distanz, winkel=0):
    penup()
    right(winkel)
    forward(distanz)
    left(winkel)
    pendown()

def hand(laenge, spitze):
    fd(laenge*1.15)
    rt(90)
    fd(spitze/2.0)
    lt(120)
    fd(spitze)
    lt(120)
    fd(spitze)
    lt(120)
    fd(spitze/2.0)

def make_hand_shape(name, laenge, spitze):
    reset()
    jump(-laenge*0.15)
    begin_poly()
    hand(laenge, spitze)
    end_poly()
    hand_form = get_poly()
    register_shape(name, hand_form)

def clockface(radius):
    reset()
    pensize(7)
    for i in range(60):
        jump(radius)
        if i % 5 == 0:
            fd(25)
            jump(-radius-25)
        else:
            dot(3)
            jump(-radius)
        rt(6)

def setup():
    global second_hand, minute_hand, hour_hand, writer
    mode("logo")
    make_hand_shape("second_hand", 125, 25)
    make_hand_shape("minute_hand",  130, 25)
    make_hand_shape("hour_hand", 90, 25)
    clockface(160)
    second_hand = Turtle()
    second_hand.shape("second_hand")
    second_hand.color("gray20", "gray80")
    minute_hand = Turtle()
    minute_hand.shape("minute_hand")
    minute_hand.color("blue1", "red1")
    hour_hand = Turtle()
    hour_hand.shape("hour_hand")
    hour_hand.color("blue3", "red3")
    for hand in second_hand, minute_hand, hour_hand:
        hand.resizemode("user")
        hand.shapesize(1, 1, 3)
        hand.speed(0)
    ht()
    writer = Turtle()
    #writer.mode("logo")
    writer.ht()
    writer.pu()
    writer.bk(85)

def wochentag(t):
    wochentag = ["Monday", "Tuesday", "Wednesday",
        "Thursday", "Friday", "Saturday", "Sunday"]
    return wochentag[t.weekday()]

def datum(z):
    monat = ["Jan.", "Feb.", "Mar.", "Apr.", "May", "June",
             "July", "Aug.", "Sep.", "Oct.", "Nov.", "Dec."]
    j = z.year
    m = monat[z.month - 1]
    t = z.day
    return "%s %d %d" % (m, t, j)

def tick():
    t = datetime.today()
    sekunde = t.second + t.microsecond*0.000001
    minute = t.minute + sekunde/60.0
    stunde = t.hour + minute/60.0
    try:
        tracer(False)  # Terminator can occur here
        writer.clear()
        writer.home()
        writer.forward(65)
        writer.write(wochentag(t),
                     align="center", font=("Courier", 14, "bold"))
        writer.back(150)
        writer.write(datum(t),
                     align="center", font=("Courier", 14, "bold"))
        writer.forward(85)
        tracer(True)
        second_hand.setheading(6*sekunde)  # or here
        minute_hand.setheading(6*minute)
        hour_hand.setheading(30*stunde)
        tracer(True)
        ontimer(tick, 100)
    except Terminator:
        pass  # turtledemo user pressed STOP

def main():
    tracer(False)
    setup()
    tracer(True)
    tick()
    return "EVENTLOOP"

if __name__ == "__main__":
    mode("logo")
    msg = main()
    print msg
    mainloop()  # keep window open
PKb1�Zp||$turtle/tdemo_I_dontlike_tiltdemo.pycnu�[����
Afc@sMdZddlTddlZd�ZedkrIe�ZeGHe�ndS(s       turtle-example-suite:

     tdemo-I_dont_like_tiltdemo.py

Demonstrates
  (a) use of a tilted ellipse as
      turtle shape
  (b) stamping that shape

We can remove it, if you don't like it.
      Without using reset() ;-)
 ---------------------------------------
i����(t*NcCs�t�td�td�t�tdd�td�t�td�t�tdd	d
�t	dd�x/t
d�D]!}td�td
�t
�q|Wt	dd�x/t
d�D]!}td�td
�t
�q�Wtd�tddd�t	dd�xBt
d�D]4}td�td
�|ddkrt
�qqWtjd�xt�rot�q\Wt�tddddd �dS(!Ntcircletuseriigo���!@iZi-ii
itredtvioletiti�iiitbluetyellowiiis	OK, OVER!taligntcentertfonttCouriertboldsDone!i�(RiR(tresettshapet
resizemodetputbktrttpdttiltt
turtlesizetcolortrangetfdtlttstampttimetsleeptundobufferentriestundothttwrite(ti((s=/usr/lib64/python2.7/Demo/turtle/tdemo_I_dontlike_tiltdemo.pytmainsD














t__main__(t__doc__tturtleRR"t__name__tmsgtmainloop(((s=/usr/lib64/python2.7/Demo/turtle/tdemo_I_dontlike_tiltdemo.pyt<module>s
	%	PKb1�ZUW�p�� turtle/tdemo_planet_and_moon.pyonu�[����
Afc@s�dZddlmZmZmZmZddlmZdZ	de
fd��YZdefd��YZd	�Z
ed
kr�e
�e�ndS(s�       turtle-example-suite:

        tdemo_planets_and_moon.py

Gravitational system simulation using the
approximation method from Feynman-lectures,
p.9-8, using turtlegraphics.

Example: heavy central body, light planet,
very light moon!
Planet has a circular orbit, moon a stable
orbit around the planet.

You can hold the movement temporarily by
pressing the left mouse button with the
mouse over the scrollbar of the canvas.

i����(tShapetTurtletmainlooptVec2D(tsleepitGravSyscBs#eZd�Zd�Zd�ZRS(cCsg|_d|_d|_dS(Nig{�G�z�?(tplanetstttdt(tself((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pyt__init__s		cCs"x|jD]}|j�q
WdS(N(Rtinit(R	tp((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pyRscCsKxDtd�D]6}|j|j7_x|jD]}|j�q/Wq
WdS(Ni'(trangeRRRtstep(R	tiR((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pytstart!s(t__name__t
__module__R
RR(((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pyRs		tStarcBs,eZd�Zd�Zd�Zd�ZRS(cCsptj|d|�|j�||_|j|�||_|jj|�||_|j	d�|j
�dS(Ntshapetuser(RR
tpenuptmtsetpostvRtappendtgravSyst
resizemodetpendown(R	RtxRRR((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pyR
(s
	
		
cCs:|jj}|j�|_|jd||j|_dS(Ng�?(RRtacctaR(R	R((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pyR2scCsrtdd�}x\|jjD]N}||kr|j�|j�}|t|jt|�d|7}qqW|S(Nii(tVecRRtpostGRtabs(R	R tplanetR((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pyR6s*cCs�|jj}|j|j�||j�|jjj|�dkrh|j|j|jjd��n|j	�|_
|j||j
|_dS(Ni(RRRR"RRtindext
setheadingttowardsRR (R	R((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pyR=s#(RRR
RRR(((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pyR's	
		cCs�t�}|j�|jdd�|j�|j�|jd�|jd�|j�|jdd�|j	�|j
�}|j�|jdd�|j	�|j
�}td�}|j|d�|j|d�|j
�jd|�|jd	d�t�}td
tdd�tdd�|d�}|jd
�|jd�|j�tdtdd�tdd�|d�}|jd�|jd�td	tdd�tdd�|d�}|jd�|jd�|j�|j�dS(NiiiZi�tcompoundtorangetblueR%ii@Bg�tcircletyellowg������?i�0i�i�tgreeng�������?i�i'g�?sDone!(Rtresetttracerthttputfdtltt
begin_polyR,tend_polytget_polyRtaddcomponentt	getscreentregister_shapeRRR!tcolort	shapesizetpencolorRR(tstm1tm2tplanetshapetgstsuntearthtmoon((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pytmainGsD	








	*


*

*



t__main__N(t__doc__tturtleRRRRR!ttimeRR#tobjectRRRFR(((s9/usr/lib64/python2.7/Demo/turtle/tdemo_planet_and_moon.pyt<module>s" 	'PKb1�Z8Hw�*�*turtle/turtleDemo.pyonu�[����
Afc@s0ddlZddlZddlTddlmZddlmZddlmZddl	Z	ddl
Z
ej�Zdej
e�kr�dGHdGeGHej�nd	Zd
ZdZdZd
ZddefZdZd Zd�Zd!d"d#fZdefd��YZd�Zedkr,e�ndS($i����N(t*(t
Percolator(tColorDelegator(t	view_files
turtleDemo.pys:Directory of turtleDemo must be current working directory!sBut in your case this isiiiiitArialitboldsLucida ConsoleitnormalcCs�gtjt�D]+}|jd�r|jd�r|^q}g}x�|D]�}|jd�rs|j|�qNtjjt|�}tjj|�|g}gtj|�D]*}|jd�r�|jd�r�|^q�}|j||�qNW|S(Nttdemo_s.pycs.py(	tostlistdirtdemo_dirt
startswithtendswithtappendtpathtjointsys(tentrytentries1tentries2Rtsubdirtscripttscripts((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pytgetExampleEntriess
	sTurtledemo helpsdemohelp.txtsAbout turtledemosabout_turtledemo.txtsAbout turtle modulesabout_turtle.txtt
DemoWindowcBs�eZdd�Zd�Zd�Zd�Zddd�Zd�Zd�Z	d	�Z
d
�Zd�Zd�Z
d
�Zd�ZRS(cCst�|_}t_|jd�|jd|j�|jddd�|jddd�|jddddd�|jddddd�|jd	dddd�t	|d
t
dd�|_|j�|_
|j�|_|jjddd
ddd�tdtdddtdd�}|j|j|��|j|j|��|jddd
ddd�t|dddddddd,ddd
t�|_t|dddtd d!d"d#d$|j�|_t|dd%dtd d!d"d#d$|j�|_t|dd&dtd d!d"d#d$|j �|_!|jjddd'dddd(d-�|jjddd'ddd)�|jjddd'ddd)�|j!jddd'd	dd)�t"|j#�j$t%��t&|_'t&|_(|r�|j)|�n|j*t+t,t,t,d*d+�t-|_.dS(.NsPython turtle-graphics examplestWM_DELETE_WINDOWitweightitminsizeiZiitrelieftborderwidthtrowt
columnspanitstickytnewstorientt	sashwidthit
sashrelieftbgs#dddtheightttexts --- s#ddftfontRiRs START tfgtwhitetdisabledforegrounds#fedtcommands STOP s CLEAR tcolumntpadxtewsChoose example from menutblack(RiR(ii(/tTktroottturtlet_rootttitletwm_protocolt_destroytgrid_rowconfiguretgrid_columnconfiguretFrametRAISEDtmBartmakeLoadDemoMenutExamplesBtntmakeHelpMenut
OptionsBtntgridtPanedWindowt
HORIZONTALtSOLIDtaddt
makeTextFrametmakeGraphFrametLabeltRIDGEt
output_lbltButtontbtnfontt	startDemot	start_btntstopIttstop_btntclearCanvast	clear_btnRR'tinsertfilterRtFalsetdirtytexitflagtloadfilet	configGUItNORMALtDISABLEDtSTARTUPtstate(tselftfilenameR2tpane((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyt__init__7sR
%		
cCsf|jj�}|jj�}|jjd|j||j�|jjd|j||j�dS(Ng�?(t_canvastwinfo_widthtwinfo_heighttxview_movetot	canvwidthtyview_movetot
canvheight(R]teventtcwidthtcheight((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pytonResizehs"c
Cst|�|_}t|dddddddd�|_}t|dd	�|_}|j|d
<|jdtdt	�t|dd
dt
�|_}|j|d
<|jdt
dt�t|d<|j|d<|j|d<|jdtdtdd�|S(NtnameR'R.itwraptnonetwidthi-tvbarR,tsidetfillthbarR"R(tyscrollcommandtxscrollcommandtexpandi(R:t
text_frametTextR't	ScrollbarRptyviewtpacktLEFTtYRCRstxviewtBOTTOMtXttxtfonttsettBOTH(R]R2RwR'RpRs((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyRFns




cCs�|tj_d|_d|_tj|dd|j|j�tj_|_}|j�|jj	d|j
�d|jd<tj�|_}tj
j||j�|j|_|gtj_|S(Ni�i iXs<Configure>iR(R3t_ScreenR4ReRgtScrolledCanvasRat
adjustScrollst_rootwindowtbindRktScreentscreentTurtleScreenR`tscanvast	RawTurtletscreens(R]R2tcanvast_s_((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyRG�s		,

ttbluecCs�|jjd|�|jjd|d|tkr7dnd�|jjd|d|tkrbdnd�|jjd|d|tkr�dnd�|jjd|d|�dS(NR\R%s#d00s#fcaR'R)(R>tconfigRNRYRPRRRJ(R]tmenutstarttstoptclearttxttcolor((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyRX�scsft�jdddddt�}|jdtdd�t|�|_xt�D]}�fd	�}t|t	�r�|jj
d
|dd!dddtd
||��qP|d|d}}t|j�|j_xR|D]J}|jjj
d
|dd!dddtd
|tj
j||���q�W|jjd
|dd|jjdt�qPW|j|d<|S(NR'tExamplest	underlineiR(RqR.t2mcs��fd�}|S(Ncs�j��dS(N(RW((R]tx(s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pytemit�s((R�R�(R](R�s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pytloadexample�stlabelii����R,iR�(t
MenubuttonR<tmenufontR{R|tMenuR�Rt
isinstancetstrtadd_commandtchoicesRRRtadd_cascade(R]tCmdBtnRR�t_dirtentrieste((R]s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyR=�s(
 !
cs�t�jdddddt�}|jdtdd�t|�|_xHtD]@\}}||�fd	�}|jjd
|dtd|�qMW|j|d<|S(
NR'tHelpR�iR(RqR.R�cs&t�j|tjjt|��dS(N(RR2RRRR
(t
help_labelt	help_file(R](s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pytshow�sR�R,R�(	R�R<R�R{R|R�R�thelp_entriesR�(R]R�R�R�R�((R]s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyR?�s!#
cCs'|js
dS|jj�t|_dS(N(RUR�R�RT(R]((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyt
refreshCanvas�s	
cCs�|j�tjj|�r�tjj|�r�t|d�}|j�}|j�|jj	dd�|jj
d|�tjj|�\}}|jj
|dd!d�t|d �|_|jttttdd�t|_ndS(	Ntrs1.0tendii����s# - a Python turtle graphics examplesPress start buttontred(R�RRtexiststisdirtopentreadtcloseR'tdeletetinserttsplitR2R5t
__import__tmoduleRXRYRZtREADYR\(R]R^tftcharstdirectfname((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyRW�s
%

cCs4|j�t|_ttj_|jttttdd�|j	j
�|j	jd�t|_
y4|jj�}|dkr�t|_
n	t|_
Wn6tjk
r�|jdkr�dSt|_
d}nX|j
tkr�|jtttt|�n7|j
tkr0t|_|jttttdd�ndS(Nsdemo running...R0tstandardt	EVENTLOOPsstopped!suse mouse/keys or STOPR�(R�tTrueRUR3R�t_RUNNINGRXRZRYR�R�tmodetRUNNINGR\R�tmaintEVENTDRIVENtDONEt
TerminatorR2tNoneRV(R]tresult((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyRM�s2
	

	
	

	cCs7|j�|jjdd�|jtttt�dS(NtcursorR�(R�R�R�RXRYRZ(R]((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyRQ�s
cCsW|jrG|j�t|_|jttttdd�ttj_nttj_dS(NsSTOPPED!R�(	RVRQRTRXRYRZR3R�R�(R]((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyRO�s	
	
cCs&ttj_|jj�d|_dS(N(RTR3R�R�R2tdestroyR�(R]((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyR7s
N(t__name__t
__module__R�R`RkRFRGRXR=R?R�RWRMRQROR7(((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyR5s1					
					
cCst�}|jj�dS(N(RR2tmainloop(tdemo((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyR�s	t__main__(RiR(sLucida ConsoleiR(sTurtledemo helpsdemohelp.txt(sAbout turtledemosabout_turtledemo.txt(sAbout turtle modulesabout_turtle.txt(RRtTkintertidlelib.PercolatorRtidlelib.ColorDelegatorRtidlelib.textViewRR3ttimetgetcwdR
R	texitR[R�R�R�R�RYR�RLR�RR�tobjectRR�R�(((s./usr/lib64/python2.7/Demo/turtle/turtleDemo.pyt<module>s8
	
		�	PKb1�Z�F\���turtle/tdemo_bytedesign.pyonu�[����
Afc@sdZddlZddlmZmZddlmZdefd��YZd�Ze	dkr{e�Z
e
GHe�ndS(	s�      turtle-example-suite:

        tdemo_bytedesign.py

An example adapted from the example-suite
of PythonCard's turtle graphcis.

It's based on an article in BYTE magazine
Problem Solving with Logo: Using Turtle
Graphics to Redraw a Design
November 1982, p. 118 - 134

-------------------------------------------

Due to the statement

t.delay(0)

in line 152, which sets the animation delay
to 0, this animation runs in "line per line"
mode as fast as possible.
i����N(tTurtletmainloop(tclocktDesignercBsYeZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
RS(	cCs�|j�xmtd�D]_}|jd|�|j�|j|j�|�|j�|jd|�|jd�qW|j�|j|�|jd�|jd|�|jd�|j�|j	d|d|�|j
t�dS(	Nig�����)P@iHi$g�8@i�i.g������a@(tuptrangetforwardtdowntwheeltpositiontbackwardtrighttgototcenterpiecettracertTrue(tselfthomePostscaleti((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pytdesign!s 







cCs�|jd�x$td�D]}|j||�qW|j�|jd�x$td�D]}|j||�qXW|jd�xWtd�D]I}|j�|jd�|jd|�|j�|jd|�q�W|jd�|j	�j
�dS(Ni6ii$iiHi(RRt	pentpieceRtleftttripieceRRR
t	getscreentupdate(RtinitposRR((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pyR3s 







cCs�|j�}|j�|jd|�|jd||�|j�|j|�|j|�|j�|jd|�|jd||�|j�|j|�|j|�|jd�|j	�j
�dS(Ng@g�?@iH(theadingRR
ttripolyrRRt
setheadingttripolylRRR(RRRtoldh((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pyREs








cCsM|j�}|j�|jd|�|j�x2td�D]$}|jd|�|jd�q>W|jd|d|�|j�|j|�|j|�|jd|�|j�x2td�D]$}|jd|�|jd�q�W|j	d|d|�|j�|j|�|j|�|j
d�|j�j�dS(NiiiiHiK(
RRRRRRtpentrRRtpentlRRR(RRRRR((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pyRVs,









cCsM|d|krdS|j|�|j|�|j|d|||�dS(NigR���Q�?(RRR!(RtsidetangR((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pyR!ns


cCsM|d|krdS|j|�|j|�|j|d|||�dS(NigR���Q�?(RRR (RR"R#R((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pyR ts


cCs�|d|krdS|j|�|jd�|j|d�|jd�|j|d�|jd�|j|d|�dS(Niiog{�G�z�?g�������?i�g�?(RRR(RR"R((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pyRzs



cCs�|d|krdS|j|�|jd�|j|d�|jd�|j|d�|jd�|j|d|�dS(Niiog{�G�z�?g�������?i�g�?(RRR(RR"R((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pyR�s



cCsM|j|�|j|�|d|kr.dS|j|d|||�dS(Ng@g333333�?(RRR
(RtstaR((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pyR
�s


(t__name__t
__module__RRRRR!R RRR
(((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pyRs							
	
cCstt�}|jd�|j�|j�jd�|jd�t�}|j|j�d�t�}d||S(Niisruntime: %.2f sec.(	Rtspeedt
hideturtleRtdelayRRRR	(tttattet((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pytmain�s	


		t__main__(t__doc__tmathtturtleRRttimeRRR.R&tmsg(((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pyt<module>su		PKb1�Z�3'vuuturtle/tdemo_penrose.pycnu�[����
Afc@sdZddlTddlmZmZddlmZmZddZd	ed
ed�Z	d�Z
d
�Zd�Zd�Z
d	d�Zd�Zd�Zd�Zd�Zddedd	d�Zed�Zd�Zedkr�e�Ze�ndS( s�       xturtle-example-suite:

          xtx_kites_and_darts.py

Constructs two aperiodic penrose-tilings,
consisting of kites and darts, by the method
of inflation in six steps.

Starting points are the patterns "sun"
consisting of five kites and "star"
consisting of five darts.

For more information see:
 http://en.wikipedia.org/wiki/Penrose_tiling
 -------------------------------------------
i����(t*(tcostpi(tclocktsleepig�?ig@iii
cCsht|}td�t|�td�t|�td�t|�td�t|�td�dS(Ni$ili�(tftlttfdtrt(tltfl((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pytkites








cCsht|}td�t|�td�t|�td�t|�td�t|�td�dS(Ni$i�(RRRR(R	R
((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pytdart%s








cCs|dkrat�\}}tt��t|d�t|d�}}}tt|||f<dSt|}td�t||d�t	|�t
d�t||d�td�t	|t�t
d�t||d�td�t	|�t
d�t||d�td�dS(	Niii$ii�ii�i�(
tpostinttheadingtroundtTruettiledictRRtinflatedartRRtinflatekitetd(R	tntpxtpythtxtyR
((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pyR1s(/








cCs�|dkrat�\}}tt��t|d�t|d�}}}tt|||f<dSt|}t||d�td�t	|�t
d�t||d�td�t	|t�t
d�t||d�t	|�t
d�dS(	Niiii$i�i6i~i�(
R
RRRtFalseRRRRRRRR(R	RRRRRRR
((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pyRGs"/






cCs�t�|t|}t|d|d|�xvtD]n}|\}}}t||�t|�t|r�td�tdd�ntd�tdd�t�q4WdS(	NgY@Rtblackig�?R(ig�?i(g�?ii(	tclearRt	shapesizeRtsetpost
setheadingtshapetcolortstamp(R	RtthtkRRR((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pytdrawZs






cCs2x+td�D]}t||�td�q
WdS(NiiH(trangeRR(R	Rti((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pytsunjs
cCs2x+td�D]}t||�td�q
WdS(NiiH(R(RR(R	RR)((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pytstaros
cCshtd�t�td�t�tdt��t�td�t�tdt��td�dS(NiidRRi(ttracert
begin_polyRtend_polytregister_shapetget_polyR(((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pyt
makeshapests


cCs*t�t�t�t�td�dS(Ntuser(tresetthttpuR1t
resizemode(((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pytstart�s
i�iicCs�t|�td�iat�}td�|||�t�}t|||�td�t�}d||GHd||GHd||GHtgtD]}t|r�|^q��}	tgtD]}t|s�|^q��}
d|	|
|	|
fGHdS(NiisCalculation:   %7.4f ssDrawing:  %7.4f ssTogether: %7.4f ss"%d kites and %d darts = %d pieces.(tgotoR!RRR,R'tlen(R	RtfuntstartposR%tatbtcRtnktnd((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pyttest�s 

	

	
	


))cCskt�x]td�D]O}t�}td||�t�}||}|dkrtd|�qqWdS(Nii,i(R7R(RRAR(R:R)R<R=tt((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pytdemo�s		
cCs�td�tddd�tt�td�tt�td�tdd�tddd�td	d
ddd�t	dddd�dS(Ntlogog333333�?iiRi8���gffffff�?isPlease wait...taligntcentertfontsArial Blacki$tboldiXiR;iFiutDone(sArial Blacki$RH(iFiu(
tmodetbgcolorRCR*RR+tpencolorR8twriteRA(((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pytmain�s





	
t__main__Ng��w�@gP�/7���?(ii(t__doc__tturtletmathRRttimeRRRRRRRRR'R*R+R1R7RARCRNt__name__tmsgtmainloop(((s1/usr/lib64/python2.7/Demo/turtle/tdemo_penrose.pyt<module>s(

								
		PKb1�Zu��Uccturtle/tdemo_two_canvases.pyonu�[����
��^c@sOdZddlmZmZmZd�ZedkrKe�ej�ndS(s�turtledemo.two_canvases

Use TurtleScreen and RawTurtle to draw on two
distinct canvases in a separate windows. The
new window must be separately closed in
addition to pressing the STOP button.
i����(tTurtleScreent	RawTurtletTKc	Cs�tj�}tj|dddddd�}tj|dddddd�}|j�|j�t|�}|jddd	�t|�}|jd	dd�t|�}t|�}|jd
d�|jd�|jdd�|jd�x.||fD] }|j	d
�|j
d�q�W|j
d�x||fD]}|j�q=WxEtd�D]7}x.||fD] }|j
d�|j
d�qqWq^WxB||fD]4}|j�|j
d�|j�|jd�q�WdS(Ntwidthi,theighti�tbgs#ddffffs#ffeeeeg333333�?itreditbluetturtlei$i�ii2iHi6t	EVENTLOOP(ig333333�?g333333�?(g333333�?g333333�?i(RtTktCanvastpackRtbgcolorRtcolorRtshapetltt
begin_filltrangetfdtend_filltputbk(	troottcv1tcv2ts1ts2tptqttti((s6/usr/lib64/python2.7/Demo/turtle/tdemo_two_canvases.pytmains>!!









t__main__N(t__doc__RRRRR t__name__tmainloop(((s6/usr/lib64/python2.7/Demo/turtle/tdemo_two_canvases.pyt<module>s
	)PKb1�ZH}�``turtle/tdemo_two_canvases.pynu�[���"""turtledemo.two_canvases

Use TurtleScreen and RawTurtle to draw on two
distinct canvases in a separate windows. The
new window must be separately closed in
addition to pressing the STOP button.
"""

from turtle import TurtleScreen, RawTurtle, TK

def main():
    root = TK.Tk()
    cv1 = TK.Canvas(root, width=300, height=200, bg="#ddffff")
    cv2 = TK.Canvas(root, width=300, height=200, bg="#ffeeee")
    cv1.pack()
    cv2.pack()

    s1 = TurtleScreen(cv1)
    s1.bgcolor(0.85, 0.85, 1)
    s2 = TurtleScreen(cv2)
    s2.bgcolor(1, 0.85, 0.85)

    p = RawTurtle(s1)
    q = RawTurtle(s2)

    p.color("red", (1, 0.85, 0.85))
    p.width(3)
    q.color("blue", (0.85, 0.85, 1))
    q.width(3)

    for t in p,q:
        t.shape("turtle")
        t.lt(36)

    q.lt(180)

    for t in p, q:
        t.begin_fill()
    for i in range(5):
        for t in p, q:
            t.fd(50)
            t.lt(72)
    for t in p,q:
        t.end_fill()
        t.lt(54)
        t.pu()
        t.bk(50)

    return "EVENTLOOP"


if __name__ == '__main__':
    main()
    TK.mainloop()  # keep window open until user closes it
PKb1�Z�F\���turtle/tdemo_bytedesign.pycnu�[����
Afc@sdZddlZddlmZmZddlmZdefd��YZd�Ze	dkr{e�Z
e
GHe�ndS(	s�      turtle-example-suite:

        tdemo_bytedesign.py

An example adapted from the example-suite
of PythonCard's turtle graphcis.

It's based on an article in BYTE magazine
Problem Solving with Logo: Using Turtle
Graphics to Redraw a Design
November 1982, p. 118 - 134

-------------------------------------------

Due to the statement

t.delay(0)

in line 152, which sets the animation delay
to 0, this animation runs in "line per line"
mode as fast as possible.
i����N(tTurtletmainloop(tclocktDesignercBsYeZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
RS(	cCs�|j�xmtd�D]_}|jd|�|j�|j|j�|�|j�|jd|�|jd�qW|j�|j|�|jd�|jd|�|jd�|j�|j	d|d|�|j
t�dS(	Nig�����)P@iHi$g�8@i�i.g������a@(tuptrangetforwardtdowntwheeltpositiontbackwardtrighttgototcenterpiecettracertTrue(tselfthomePostscaleti((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pytdesign!s 







cCs�|jd�x$td�D]}|j||�qW|j�|jd�x$td�D]}|j||�qXW|jd�xWtd�D]I}|j�|jd�|jd|�|j�|jd|�q�W|jd�|j	�j
�dS(Ni6ii$iiHi(RRt	pentpieceRtleftttripieceRRR
t	getscreentupdate(RtinitposRR((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pyR3s 







cCs�|j�}|j�|jd|�|jd||�|j�|j|�|j|�|j�|jd|�|jd||�|j�|j|�|j|�|jd�|j	�j
�dS(Ng@g�?@iH(theadingRR
ttripolyrRRt
setheadingttripolylRRR(RRRtoldh((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pyREs








cCsM|j�}|j�|jd|�|j�x2td�D]$}|jd|�|jd�q>W|jd|d|�|j�|j|�|j|�|jd|�|j�x2td�D]$}|jd|�|jd�q�W|j	d|d|�|j�|j|�|j|�|j
d�|j�j�dS(NiiiiHiK(
RRRRRRtpentrRRtpentlRRR(RRRRR((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pyRVs,









cCsM|d|krdS|j|�|j|�|j|d|||�dS(NigR���Q�?(RRR!(RtsidetangR((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pyR!ns


cCsM|d|krdS|j|�|j|�|j|d|||�dS(NigR���Q�?(RRR (RR"R#R((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pyR ts


cCs�|d|krdS|j|�|jd�|j|d�|jd�|j|d�|jd�|j|d|�dS(Niiog{�G�z�?g�������?i�g�?(RRR(RR"R((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pyRzs



cCs�|d|krdS|j|�|jd�|j|d�|jd�|j|d�|jd�|j|d|�dS(Niiog{�G�z�?g�������?i�g�?(RRR(RR"R((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pyR�s



cCsM|j|�|j|�|d|kr.dS|j|d|||�dS(Ng@g333333�?(RRR
(RtstaR((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pyR
�s


(t__name__t
__module__RRRRR!R RRR
(((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pyRs							
	
cCstt�}|jd�|j�|j�jd�|jd�t�}|j|j�d�t�}d||S(Niisruntime: %.2f sec.(	Rtspeedt
hideturtleRtdelayRRRR	(tttattet((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pytmain�s	


		t__main__(t__doc__tmathtturtleRRttimeRRR.R&tmsg(((s4/usr/lib64/python2.7/Demo/turtle/tdemo_bytedesign.pyt<module>su		PKb1�ZrTz��turtle/tdemo_clock.pycnu�[����
Afc@s�dZddlTddlmZdd�Zd�Zd�Zd�Zd	�Zd
�Zd�Z	d�Z
d
�Zedkr�e
d�e�ZeGHe�ndS(s�       turtle-example-suite:

             tdemo_clock.py

Enhanced clock-program, showing date
and time
  ------------------------------------
   Press STOP to exit the program!
  ------------------------------------
i����(t*(tdatetimeicCs0t�t|�t|�t|�t�dS(N(tpenuptrighttforwardtlefttpendown(tdistanztwinkel((s//usr/lib64/python2.7/Demo/turtle/tdemo_clock.pytjumps



cCsjt|d�td�t|d�td�t|�td�t|�td�t|d�dS(Ngffffff�?iZg@ix(tfdtrttlt(tlaengetspitze((s//usr/lib64/python2.7/Demo/turtle/tdemo_clock.pythands





cCsKt�t|d�t�t||�t�t�}t||�dS(Ng333333�?(tresetR	t
begin_polyRtend_polytget_polytregister_shape(tnameR
Rt	hand_form((s//usr/lib64/python2.7/Demo/turtle/tdemo_clock.pytmake_hand_shape"s
	cCs�t�td�xitd�D][}t|�|ddkrZtd�t|d�ntd�t|�td�qWdS(Nii<iiiii(RtpensizetrangeR	R
tdotR(tradiusti((s//usr/lib64/python2.7/Demo/turtle/tdemo_clock.pyt	clockface+s



cCs2td�tddd�tddd�tddd�td	�t�atjd�tjd
d�t�atjd�tjdd
�t�atjd�tjdd�xDtttfD]3}|j	d�|j
ddd�|jd�q�Wt�t�a
t
j�t
j�t
jd�dS(Ntlogotsecond_handi}itminute_handi�t	hour_handiZi�tgray20tgray80tblue1tred1tblue3tred3tuseriiiiU(tmodeRRtTurtleRtshapetcolorR R!t
resizemodet	shapesizetspeedthttwritertputbk(R((s//usr/lib64/python2.7/Demo/turtle/tdemo_clock.pytsetup8s.

	
	
	

	

cCs)dddddddg}||j�S(NtMondaytTuesdayt	WednesdaytThursdaytFridaytSaturdaytSunday(tweekday(ttt	wochentag((s//usr/lib64/python2.7/Demo/turtle/tdemo_clock.pyR>Ss	cCs^ddddddddd	d
ddg}|j}||jd
}|j}d|||fS(NsJan.sFeb.sMar.sApr.tMaytJunetJulysAug.sSep.sOct.sNov.sDec.is%s %d %d(tyeartmonthtday(tztmonattjtmR=((s//usr/lib64/python2.7/Demo/turtle/tdemo_clock.pytdatumXs		cCs5tj�}|j|jd}|j|d}|j|d}y�tt�tj	�tj
�tjd�tjt
|�dddd�tjd
�tjt|�dddd�tjd�tt�tjd|�tjd|�tjd
|�tt�ttd�Wntk
r0nXdS(Ng���ư>gN@iAtaligntcentertfonttCourieritboldi�iUiiid(RMiRN(RMiRN(RttodaytsecondtmicrosecondtminutethourttracertFalseR1tclearthomeRtwriteR>tbackRItTrueRt
setheadingR R!tontimerttickt
Terminator(R=tsekundeRRtstunde((s//usr/lib64/python2.7/Demo/turtle/tdemo_clock.pyR]`s.










cCs&tt�t�tt�t�dS(Nt	EVENTLOOP(RTRUR4RZR](((s//usr/lib64/python2.7/Demo/turtle/tdemo_clock.pytmainys


t__main__RN(t__doc__tturtleRR	RRRR4R>RIR]Rbt__name__R)tmsgtmainloop(((s//usr/lib64/python2.7/Demo/turtle/tdemo_clock.pyt<module>s 
				
					
	PKb1�Zp||$turtle/tdemo_I_dontlike_tiltdemo.pyonu�[����
Afc@sMdZddlTddlZd�ZedkrIe�ZeGHe�ndS(s       turtle-example-suite:

     tdemo-I_dont_like_tiltdemo.py

Demonstrates
  (a) use of a tilted ellipse as
      turtle shape
  (b) stamping that shape

We can remove it, if you don't like it.
      Without using reset() ;-)
 ---------------------------------------
i����(t*NcCs�t�td�td�t�tdd�td�t�td�t�tdd	d
�t	dd�x/t
d�D]!}td�td
�t
�q|Wt	dd�x/t
d�D]!}td�td
�t
�q�Wtd�tddd�t	dd�xBt
d�D]4}td�td
�|ddkrt
�qqWtjd�xt�rot�q\Wt�tddddd �dS(!Ntcircletuseriigo���!@iZi-ii
itredtvioletiti�iiitbluetyellowiiis	OK, OVER!taligntcentertfonttCouriertboldsDone!i�(RiR(tresettshapet
resizemodetputbktrttpdttiltt
turtlesizetcolortrangetfdtlttstampttimetsleeptundobufferentriestundothttwrite(ti((s=/usr/lib64/python2.7/Demo/turtle/tdemo_I_dontlike_tiltdemo.pytmainsD














t__main__(t__doc__tturtleRR"t__name__tmsgtmainloop(((s=/usr/lib64/python2.7/Demo/turtle/tdemo_I_dontlike_tiltdemo.pyt<module>s
	%	PKb1�Z�/�..turtle/about_turtledemo.txtnu�[���
  --------------------------------------
     About xturtleDemo.py  
  --------------------------------------

  Tiny demo Viewer to view turtle graphics example scripts.

  Quickly and dirtyly assembled by Gregor Lingl.
  June, 2006

  For more information see: xturtleDemo - Help 

  Have fun!
    
PKb1�Z�g��#turtle/tdemo_lindenmayer_indian.pyonu�[����
Afc@sSdZddlTd�Zd�Zd�ZedkrOe�ZeGHe�ndS(s�       turtle-example-suite:

        xtx_lindenmayer_indian.py

Each morning women in Tamil Nadu, in southern
India, place designs, created by using rice
flour and known as kolam on the thresholds of
their homes.

These can be described by Lindenmayer systems,
which can easily be implemented with turtle
graphics and Python.

Two examples are shown here:
(1) the snake kolam
(2) anklets of Krishna

Taken from Marcia Ascher: Mathematics
Elsewhere, An Exploration of Ideas Across
Cultures

i����(t*cCsNxGt|�D]9}d}x$|D]}||j||�}q W|}q
W|S(Nt(trangetget(tseqtreplacementRulestntitnewseqtelement((s</usr/lib64/python2.7/Demo/turtle/tdemo_lindenmayer_indian.pytreplaces

cCsWxP|D]H}y||�Wqtk
rNyt|||�WqOqOXqXqWdS(N(t	TypeErrortdraw(tcommandstrulestb((s</usr/lib64/python2.7/Demo/turtle/tdemo_lindenmayer_indian.pyR&s

cCsrd�}d�}d�}i|d6|d6|d6dd6}id	d6}d
}t||d�}t�td�tdd
�t�t�td�t�t||�ddl	m
}|d�d�}d�}	d�}
i|d6|	d6|
d6}idd6dd6}d}
t�td
�tdd
�t�td�t|
|d�}t||�td�dS(NcSstd�dS(Ni-(tright(((s</usr/lib64/python2.7/Demo/turtle/tdemo_lindenmayer_indian.pytr7scSstd�dS(Ni-(tleft(((s</usr/lib64/python2.7/Demo/turtle/tdemo_lindenmayer_indian.pytl:scSstd�dS(Ng@(tforward(((s</usr/lib64/python2.7/Demo/turtle/tdemo_lindenmayer_indian.pytf=st-t+Rsf+f+f--f--f+f+fRsb+f+b--f--b+f+bs
b--f--b--fiiii�i����(tsleepcSstd�tdd�dS(Ntredi
iZ(tcolortcircle(((s</usr/lib64/python2.7/Demo/turtle/tdemo_lindenmayer_indian.pytAVs
cSsOddlm}td�d|d�}t|�t|d�t|�dS(Ni����(tsqrttblackiii(tmathRRRR(RR((s</usr/lib64/python2.7/Demo/turtle/tdemo_lindenmayer_indian.pytBZs


cSstd�td�dS(Ntgreeni
(RR(((s</usr/lib64/python2.7/Demo/turtle/tdemo_lindenmayer_indian.pytFbs
tatafbfat	afbfbfbfatfbfbfbfbi-sDone!(R
tresettspeedttracerthttuptbackwardtdownRttimeRR(RRRtsnake_rulestsnake_replacementRulestsnake_starttdrawingRRR R"t
krishna_rulestkrishna_replacementRulest
krishna_start((s</usr/lib64/python2.7/Demo/turtle/tdemo_lindenmayer_indian.pytmain1s@			"





			




t__main__N(t__doc__tturtleR
RR6t__name__tmsgtmainloop(((s</usr/lib64/python2.7/Demo/turtle/tdemo_lindenmayer_indian.pyt<module>s
			C	PKb1�Z�%�i((turtle/tdemo_yinyang.pycnu�[����
Afc@sCdZddlTd�Zd�Zedkr?e�e�ndS(s�       turtle-example-suite:

            tdemo_yinyang.py

Another drawing suitable as a beginner's
programming example.

The small circles are drawn by the circle
command.

i����(t*cCs�td�td�tt�t|dd�t|d�td�t|dd�t|�tt�t|�td�t�t|d�td�t	�t|d�td�tt
�t�t|d�t	�td�dS(Nitblackg@i�iZg�?g�?(twidthtcolortfilltTruetcircletlefttuptforwardtrighttdowntFalsetbackward(tradiustcolor1tcolor2((s1/usr/lib64/python2.7/Demo/turtle/tdemo_yinyang.pytyins,











cCs2t�tddd�tddd�t�dS(Ni�twhiteRsDone!(tresetRtht(((s1/usr/lib64/python2.7/Demo/turtle/tdemo_yinyang.pytmain(s
t__main__N(t__doc__tturtleRRt__name__tmainloop(((s1/usr/lib64/python2.7/Demo/turtle/tdemo_yinyang.pyt<module>s
		PKb1�Z�%�i((turtle/tdemo_yinyang.pyonu�[����
Afc@sCdZddlTd�Zd�Zedkr?e�e�ndS(s�       turtle-example-suite:

            tdemo_yinyang.py

Another drawing suitable as a beginner's
programming example.

The small circles are drawn by the circle
command.

i����(t*cCs�td�td�tt�t|dd�t|d�td�t|dd�t|�tt�t|�td�t�t|d�td�t	�t|d�td�tt
�t�t|d�t	�td�dS(Nitblackg@i�iZg�?g�?(twidthtcolortfilltTruetcircletlefttuptforwardtrighttdowntFalsetbackward(tradiustcolor1tcolor2((s1/usr/lib64/python2.7/Demo/turtle/tdemo_yinyang.pytyins,











cCs2t�tddd�tddd�t�dS(Ni�twhiteRsDone!(tresetRtht(((s1/usr/lib64/python2.7/Demo/turtle/tdemo_yinyang.pytmain(s
t__main__N(t__doc__tturtleRRt__name__tmainloop(((s1/usr/lib64/python2.7/Demo/turtle/tdemo_yinyang.pyt<module>s
		PKb1�Z�ʭ��
�
turtle/tdemo_fractalcurves.pycnu�[����
Afc@smdZddlTddlmZmZdefd��YZd�Zedkrie�Z	e	GHe
�ndS(	s&      turtle-example-suite:

        tdemo_fractalCurves.py

This program draws two fractal-curve-designs:
(1) A hilbert curve (in a box)
(2) A combination of Koch-curves.

The CurvesTurtle class and the fractal-curve-
methods are taken from the PythonCard example
scripts for turtle-graphics.
i����(t*(tsleeptclocktCurvesTurtlecBs#eZd�Zd�Zd�ZRS(cCs�|dkrdS|j|d�|j||d|�|j|�|j|d�|j||d|�|j|�|j||d|�|j|d�|j|�|j||d|�|j|d�dS(NiiZi(tleftthilberttforwardtright(tselftsizetleveltparity((s7/usr/lib64/python2.7/Demo/turtle/tdemo_fractalcurves.pyRs


cCs�ddl}d||j|j|�}|j�|j|�|j�|jdd|d|�x8t|�D]*}|j|||�|jd|�quW|j	dd|d|�|j�|j
|�|j�dS(Ni����ii�iZih(tmathtsintpitputfdtpdtrttrangetfractaltlttbk(RtntradtlevtdirRtedgeti((s7/usr/lib64/python2.7/Demo/turtle/tdemo_fractalcurves.pyt
fractalgon/s




cCs�|dkr|j|�dS|j|d|d|�|jd|�|j|d|d|�|jd|�|j|d|d|�|jd|�|j|d|d|�dS(Niii<ix(RRRR(RtdisttdepthR((s7/usr/lib64/python2.7/Demo/turtle/tdemo_fractalcurves.pyRBs
(t__name__t
__module__RRR(((s7/usr/lib64/python2.7/Demo/turtle/tdemo_fractalcurves.pyRs		cCsrt�}|j�|jd�|j�|jdd�|j�d}|jd|d|�|j�t�}|j	d�|j
t�|j|�|j
|dd�|j|�x:td�D],}|jd�|j|d	|d
�q�W|j�x.td
�D] }|j|�|jd�qW|j�x:td�D],}|j|d|d
�|jd�qKW|j
t�t�}d
||}td�|j�|jd�|j�|jdd�t�}|jdd�|j
t�|jdddd�|j
t�|jd�|jdddd�|j
t�t�}|d||7}|S(Niiii���i��trediiZi@iiiBsHilbert: %.2fsec. tblacktbluei�i�i����sKoch: %.2fsec.(RtresettspeedthtttracerRtsetposRRt	fillcolortfilltTrueRRRRRtFalseRtcolorR(tftR	ttaRttbtres((s7/usr/lib64/python2.7/Demo/turtle/tdemo_fractalcurves.pytmainNsZ	




	








	



	



	t__main__N(t__doc__tturtlettimeRRtPenRR3R tmsgtmainloop(((s7/usr/lib64/python2.7/Demo/turtle/tdemo_fractalcurves.pyt<module>
s
=	8	PKb1�Z3�
��turtle/tdemo_tree.pynuȯ��#! /usr/bin/python2.7
"""      turtle-example-suite:

             tdemo_tree.py

Displays a 'breadth-first-tree' - in contrast
to the classical Logo tree drawing programs,
which use a depth-first-algorithm.

Uses:
(1) a tree-generator, where the drawing is
quasi the side-effect, whereas the generator
always yields None.
(2) Turtle-cloning: At each branching point
the current pen is cloned. So in the end
there are 1024 turtles.
"""
from turtle import Turtle, mainloop
from time import clock

def tree(plist, l, a, f):
    """ plist is list of pens
    l is length of branch
    a is half of the angle between 2 branches
    f is factor by which branch is shortened
    from level to level."""
    if l > 3:
        lst = []
        for p in plist:
            p.forward(l)
            q = p.clone()
            p.left(a)
            q.right(a)
            lst.append(p)
            lst.append(q)
        for x in tree(lst, l*f, a, f):
            yield None

def maketree():
    p = Turtle()
    p.setundobuffer(None)
    p.hideturtle()
    p.speed(0)
    p.tracer(30,0)
    p.left(90)
    p.penup()
    p.forward(-210)
    p.pendown()
    t = tree([p], 200, 65, 0.6375)
    for x in t:
        pass
    print len(p.getscreen().turtles())

def main():
    a=clock()
    maketree()
    b=clock()
    return "done: %.2f sec." % (b-a)

if __name__ == "__main__":
    msg = main()
    print msg
    mainloop()
PKb1�ZA�g:�	�	"turtle/tdemo_lindenmayer_indian.pynuȯ��#! /usr/bin/python2.7
"""       turtle-example-suite:

        xtx_lindenmayer_indian.py

Each morning women in Tamil Nadu, in southern
India, place designs, created by using rice
flour and known as kolam on the thresholds of
their homes.

These can be described by Lindenmayer systems,
which can easily be implemented with turtle
graphics and Python.

Two examples are shown here:
(1) the snake kolam
(2) anklets of Krishna

Taken from Marcia Ascher: Mathematics
Elsewhere, An Exploration of Ideas Across
Cultures

"""
################################
# Mini Lindenmayer tool
###############################

from turtle import *

def replace( seq, replacementRules, n ):
    for i in range(n):
        newseq = ""
        for element in seq:
            newseq = newseq + replacementRules.get(element,element)
        seq = newseq
    return seq

def draw( commands, rules ):
    for b in commands:
        try:
            rules[b]()
        except TypeError:
            try:
                draw(rules[b], rules)
            except:
                pass


def main():
    ################################
    # Example 1: Snake kolam
    ################################


    def r():
        right(45)

    def l():
        left(45)

    def f():
        forward(7.5)

    snake_rules = {"-":r, "+":l, "f":f, "b":"f+f+f--f--f+f+f"}
    snake_replacementRules = {"b": "b+f+b--f--b+f+b"}
    snake_start = "b--f--b--f"

    drawing = replace(snake_start, snake_replacementRules, 3)

    reset()
    speed(3)
    tracer(1,0)
    ht()
    up()
    backward(195)
    down()
    draw(drawing, snake_rules)

    from time import sleep
    sleep(3)

    ################################
    # Example 2: Anklets of Krishna
    ################################

    def A():
        color("red")
        circle(10,90)

    def B():
        from math import sqrt
        color("black")
        l = 5/sqrt(2)
        forward(l)
        circle(l, 270)
        forward(l)

    def F():
        color("green")
        forward(10)

    krishna_rules = {"a":A, "b":B, "f":F}
    krishna_replacementRules = {"a" : "afbfa", "b" : "afbfbfbfa" }
    krishna_start = "fbfbfbfb"

    reset()
    speed(0)
    tracer(3,0)
    ht()
    left(45)
    drawing = replace(krishna_start, krishna_replacementRules, 3)
    draw(drawing, krishna_rules)
    tracer(1)
    return "Done!"

if __name__=='__main__':
    msg = main()
    print msg
    mainloop()
PKb1�Z��!KKturtle/tdemo_tree.pycnu�[����
Afc@sodZddlmZmZddlmZd�Zd�Zd�Ze	dkrke�Z
e
GHe�ndS(	s�      turtle-example-suite:

             tdemo_tree.py

Displays a 'breadth-first-tree' - in contrast
to the classical Logo tree drawing programs,
which use a depth-first-algorithm.

Uses:
(1) a tree-generator, where the drawing is
quasi the side-effect, whereas the generator
always yields None.
(2) Turtle-cloning: At each branching point
the current pen is cloned. So in the end
there are 1024 turtles.
i����(tTurtletmainloop(tclockccs�|dkr�g}x[|D]S}|j|�|j�}|j|�|j|�|j|�|j|�qWx)t|||||�D]}dVq�WndS(s� plist is list of pens
    l is length of branch
    a is half of the angle between 2 branches
    f is factor by which branch is shortened
    from level to level.iN(tforwardtclonetlefttrighttappendttreetNone(tplisttltatftlsttptqtx((s./usr/lib64/python2.7/Demo/turtle/tdemo_tree.pyRs




 cCs�t�}|jd�|j�|jd�|jdd�|jd�|j�|jd�|j	�t
|gddd�}x|D]}q�Wt|j�j
��GHdS(NiiiZi.���i�iAgffffff�?(Rt
setundobufferR	t
hideturtletspeedttracerRtpenupRtpendownRtlent	getscreentturtles(RttR((s./usr/lib64/python2.7/Demo/turtle/tdemo_tree.pytmaketree's	







cCs%t�}t�t�}d||S(Nsdone: %.2f sec.(RR(Rtb((s./usr/lib64/python2.7/Demo/turtle/tdemo_tree.pytmain6s		t__main__N(t__doc__tturtleRRttimeRRRRt__name__tmsg(((s./usr/lib64/python2.7/Demo/turtle/tdemo_tree.pyt<module>s				PKb1�Z^��turtle/tdemo_chaos.pycnu�[����
��^c@syddlTdZd�Zd�Zd�Zd�Zd�Zd�Zd	�Zd
�Z	e
dkrue	�e�ndS(
i����(t*iPcCsd|d|S(Ng333333@i((tx((s//usr/lib64/python2.7/Demo/turtle/tdemo_chaos.pytfscCsd||dS(Ng333333@i((R((s//usr/lib64/python2.7/Demo/turtle/tdemo_chaos.pytgscCsd|d||S(Ng333333@((R((s//usr/lib64/python2.7/Demo/turtle/tdemo_chaos.pythscCst�t||�dS(N(tpenuptgoto(Rty((s//usr/lib64/python2.7/Demo/turtle/tdemo_chaos.pytjumptoscCs%t||�t�t||�dS(N(RtpendownR(tx1ty1tx2ty2((s//usr/lib64/python2.7/Demo/turtle/tdemo_chaos.pytlines
cCs.tddtdd�tdddd�dS(Ni����iig��������g�������?(RtN(((s//usr/lib64/python2.7/Demo/turtle/tdemo_chaos.pytcoosysscCspt|�|}td|�t�td�x;tt�D]-}||�}t|d|�td�q;WdS(Niii(tpencolorRR	tdottrangeRR(tfuntstarttcolorRti((s//usr/lib64/python2.7/Demo/turtle/tdemo_chaos.pytplot s


cCs�t�tddtdd�td�t�t�ttdd�ttdd�tt	dd	�x/t
d
�D]!}td|dtdd�qsWdS(
Ng�g��������ig�������?igffffff�?tbluetgreentredidg�?sDone!(tresettsetworldcoordinatesRtspeedt
hideturtleRRRRRR(ts((s//usr/lib64/python2.7/Demo/turtle/tdemo_chaos.pytmain+s
t__main__N(tturtleRRRRRRRRR!t__name__tmainloop(((s//usr/lib64/python2.7/Demo/turtle/tdemo_chaos.pyt<module>s
								PKb1�ZrTz��turtle/tdemo_clock.pyonu�[����
Afc@s�dZddlTddlmZdd�Zd�Zd�Zd�Zd	�Zd
�Zd�Z	d�Z
d
�Zedkr�e
d�e�ZeGHe�ndS(s�       turtle-example-suite:

             tdemo_clock.py

Enhanced clock-program, showing date
and time
  ------------------------------------
   Press STOP to exit the program!
  ------------------------------------
i����(t*(tdatetimeicCs0t�t|�t|�t|�t�dS(N(tpenuptrighttforwardtlefttpendown(tdistanztwinkel((s//usr/lib64/python2.7/Demo/turtle/tdemo_clock.pytjumps



cCsjt|d�td�t|d�td�t|�td�t|�td�t|d�dS(Ngffffff�?iZg@ix(tfdtrttlt(tlaengetspitze((s//usr/lib64/python2.7/Demo/turtle/tdemo_clock.pythands





cCsKt�t|d�t�t||�t�t�}t||�dS(Ng333333�?(tresetR	t
begin_polyRtend_polytget_polytregister_shape(tnameR
Rt	hand_form((s//usr/lib64/python2.7/Demo/turtle/tdemo_clock.pytmake_hand_shape"s
	cCs�t�td�xitd�D][}t|�|ddkrZtd�t|d�ntd�t|�td�qWdS(Nii<iiiii(RtpensizetrangeR	R
tdotR(tradiusti((s//usr/lib64/python2.7/Demo/turtle/tdemo_clock.pyt	clockface+s



cCs2td�tddd�tddd�tddd�td	�t�atjd�tjd
d�t�atjd�tjdd
�t�atjd�tjdd�xDtttfD]3}|j	d�|j
ddd�|jd�q�Wt�t�a
t
j�t
j�t
jd�dS(Ntlogotsecond_handi}itminute_handi�t	hour_handiZi�tgray20tgray80tblue1tred1tblue3tred3tuseriiiiU(tmodeRRtTurtleRtshapetcolorR R!t
resizemodet	shapesizetspeedthttwritertputbk(R((s//usr/lib64/python2.7/Demo/turtle/tdemo_clock.pytsetup8s.

	
	
	

	

cCs)dddddddg}||j�S(NtMondaytTuesdayt	WednesdaytThursdaytFridaytSaturdaytSunday(tweekday(ttt	wochentag((s//usr/lib64/python2.7/Demo/turtle/tdemo_clock.pyR>Ss	cCs^ddddddddd	d
ddg}|j}||jd
}|j}d|||fS(NsJan.sFeb.sMar.sApr.tMaytJunetJulysAug.sSep.sOct.sNov.sDec.is%s %d %d(tyeartmonthtday(tztmonattjtmR=((s//usr/lib64/python2.7/Demo/turtle/tdemo_clock.pytdatumXs		cCs5tj�}|j|jd}|j|d}|j|d}y�tt�tj	�tj
�tjd�tjt
|�dddd�tjd
�tjt|�dddd�tjd�tt�tjd|�tjd|�tjd
|�tt�ttd�Wntk
r0nXdS(Ng���ư>gN@iAtaligntcentertfonttCourieritboldi�iUiiid(RMiRN(RMiRN(RttodaytsecondtmicrosecondtminutethourttracertFalseR1tclearthomeRtwriteR>tbackRItTrueRt
setheadingR R!tontimerttickt
Terminator(R=tsekundeRRtstunde((s//usr/lib64/python2.7/Demo/turtle/tdemo_clock.pyR]`s.










cCs&tt�t�tt�t�dS(Nt	EVENTLOOP(RTRUR4RZR](((s//usr/lib64/python2.7/Demo/turtle/tdemo_clock.pytmainys


t__main__RN(t__doc__tturtleRR	RRRR4R>RIR]Rbt__name__R)tmsgtmainloop(((s//usr/lib64/python2.7/Demo/turtle/tdemo_clock.pyt<module>s 
				
					
	PKb1�Ziʈ�k'k'turtle/turtleDemo.pynuȯ��#! /usr/bin/python2.7
import sys
import os

from Tkinter import *
from idlelib.Percolator import Percolator
from idlelib.ColorDelegator import ColorDelegator
from idlelib.textView import view_file

import turtle
import time

demo_dir = os.getcwd()
if "turtleDemo.py" not in os.listdir(demo_dir):
    print "Directory of turtleDemo must be current working directory!"
    print "But in your case this is", demo_dir
    sys.exit()

STARTUP = 1
READY = 2
RUNNING = 3
DONE = 4
EVENTDRIVEN = 5

menufont = ("Arial", 12, NORMAL)
btnfont = ("Arial", 12, 'bold')
txtfont = ('Lucida Console', 8, 'normal')

def getExampleEntries():
    entries1 = [entry for entry in os.listdir(demo_dir) if
                     entry.startswith("tdemo_") and
                     not entry.endswith(".pyc")]
    entries2 = []
    for entry in entries1:
        if entry.endswith(".py"):
            entries2.append(entry)
        else:
            path = os.path.join(demo_dir, entry)
            sys.path.append(path)
            subdir = [entry]
            scripts = [script for script in os.listdir(path) if
                            script.startswith("tdemo_") and
                            script.endswith(".py")]
            entries2.append(subdir+scripts)
    return entries2

help_entries = (  # (help_label,  help_file)
    ('Turtledemo help', "demohelp.txt"),
    ('About turtledemo', "about_turtledemo.txt"),
    ('About turtle module', "about_turtle.txt"),
    )

class DemoWindow(object):

    def __init__(self, filename=None):
        self.root = root = turtle._root = Tk()
        root.title('Python turtle-graphics examples')
        root.wm_protocol("WM_DELETE_WINDOW", self._destroy)

        root.grid_rowconfigure(1, weight=1)
        root.grid_columnconfigure(0, weight=1)
        root.grid_columnconfigure(1, minsize=90, weight=1)
        root.grid_columnconfigure(2, minsize=90, weight=1)
        root.grid_columnconfigure(3, minsize=90, weight=1)

        self.mBar = Frame(root, relief=RAISED, borderwidth=2)
        self.ExamplesBtn = self.makeLoadDemoMenu()
        self.OptionsBtn = self.makeHelpMenu()
        self.mBar.grid(row=0, columnspan=4, sticky='news')

        pane = PanedWindow(orient=HORIZONTAL, sashwidth=5,
                           sashrelief=SOLID, bg='#ddd')
        pane.add(self.makeTextFrame(pane))
        pane.add(self.makeGraphFrame(pane))
        pane.grid(row=1, columnspan=4, sticky='news')

        self.output_lbl = Label(root, height= 1, text=" --- ", bg="#ddf",
                                font=("Arial", 16, 'normal'), borderwidth=2,
                                relief=RIDGE)
        self.start_btn = Button(root, text=" START ", font=btnfont,
                                fg="white", disabledforeground = "#fed",
                                command=self.startDemo)
        self.stop_btn = Button(root, text=" STOP ", font=btnfont,
                               fg="white", disabledforeground = "#fed",
                               command=self.stopIt)
        self.clear_btn = Button(root, text=" CLEAR ", font=btnfont,
                                fg="white", disabledforeground="#fed",
                                command = self.clearCanvas)
        self.output_lbl.grid(row=2, column=0, sticky='news', padx=(0,5))
        self.start_btn.grid(row=2, column=1, sticky='ew')
        self.stop_btn.grid(row=2, column=2, sticky='ew')
        self.clear_btn.grid(row=2, column=3, sticky='ew')

        Percolator(self.text).insertfilter(ColorDelegator())
        self.dirty = False
        self.exitflag = False
        if filename:
            self.loadfile(filename)
        self.configGUI(NORMAL, DISABLED, DISABLED, DISABLED,
                       "Choose example from menu", "black")
        self.state = STARTUP


    def onResize(self, event):
        cwidth = self._canvas.winfo_width()
        cheight = self._canvas.winfo_height()
        self._canvas.xview_moveto(0.5*(self.canvwidth-cwidth)/self.canvwidth)
        self._canvas.yview_moveto(0.5*(self.canvheight-cheight)/self.canvheight)

    def makeTextFrame(self, root):
        self.text_frame = text_frame = Frame(root)
        self.text = text = Text(text_frame, name='text', padx=5,
                                wrap='none', width=45)

        self.vbar = vbar = Scrollbar(text_frame, name='vbar')
        vbar['command'] = text.yview
        vbar.pack(side=LEFT, fill=Y)
        self.hbar = hbar = Scrollbar(text_frame, name='hbar', orient=HORIZONTAL)
        hbar['command'] = text.xview
        hbar.pack(side=BOTTOM, fill=X)

        text['font'] = txtfont
        text['yscrollcommand'] = vbar.set
        text['xscrollcommand'] = hbar.set
        text.pack(side=LEFT, fill=BOTH, expand=1)
        return text_frame

    def makeGraphFrame(self, root):
        turtle._Screen._root = root
        self.canvwidth = 1000
        self.canvheight = 800
        turtle._Screen._canvas = self._canvas = canvas = turtle.ScrolledCanvas(
                root, 800, 600, self.canvwidth, self.canvheight)
        canvas.adjustScrolls()
        canvas._rootwindow.bind('<Configure>', self.onResize)
        canvas._canvas['borderwidth'] = 0

        self.screen = _s_ = turtle.Screen()
        turtle.TurtleScreen.__init__(_s_, _s_._canvas)
        self.scanvas = _s_._canvas
        turtle.RawTurtle.screens = [_s_]
        return canvas

    def configGUI(self, menu, start, stop, clear, txt="", color="blue"):
        self.ExamplesBtn.config(state=menu)

        self.start_btn.config(state=start,
                              bg="#d00" if start == NORMAL else "#fca")
        self.stop_btn.config(state=stop,
                             bg="#d00" if stop == NORMAL else "#fca")
        self.clear_btn.config(state=clear,
                              bg="#d00" if clear == NORMAL else"#fca")
        self.output_lbl.config(text=txt, fg=color)

    def makeLoadDemoMenu(self):
        CmdBtn = Menubutton(self.mBar, text='Examples',
                            underline=0, font=menufont)
        CmdBtn.pack(side=LEFT, padx="2m")
        CmdBtn.menu = Menu(CmdBtn)

        for entry in getExampleEntries():
            def loadexample(x):
                def emit():
                    self.loadfile(x)
                return emit
            if isinstance(entry,str):
                CmdBtn.menu.add_command(label=entry[6:-3], underline=0,
                                        font=menufont,
                                        command=loadexample(entry))
            else:
                _dir, entries = entry[0], entry[1:]
                CmdBtn.menu.choices = Menu(CmdBtn.menu)
                for e in entries:
                    CmdBtn.menu.choices.add_command(
                            label=e[6:-3], underline=0, font=menufont,
                            command = loadexample(os.path.join(_dir,e)))
                CmdBtn.menu.add_cascade(
                    label=_dir[6:], menu = CmdBtn.menu.choices, font=menufont)

        CmdBtn['menu'] = CmdBtn.menu
        return CmdBtn

    def makeHelpMenu(self):
        CmdBtn = Menubutton(self.mBar, text='Help', underline=0, font = menufont)
        CmdBtn.pack(side=LEFT, padx='2m')
        CmdBtn.menu = Menu(CmdBtn)

        for help_label, help_file in help_entries:
            def show(help_label=help_label, help_file=help_file):
                view_file(self.root, help_label, os.path.join(demo_dir, help_file))
            CmdBtn.menu.add_command(label=help_label, font=menufont, command=show)

        CmdBtn['menu'] = CmdBtn.menu
        return CmdBtn

    def refreshCanvas(self):
        if not self.dirty: return
        self.screen.clear()
        self.dirty=False

    def loadfile(self,filename):
        self.refreshCanvas()
        if os.path.exists(filename) and not os.path.isdir(filename):
            # load and display file text
            f = open(filename,'r')
            chars = f.read()
            f.close()
            self.text.delete("1.0", "end")
            self.text.insert("1.0",chars)
            direc, fname = os.path.split(filename)
            self.root.title(fname[6:-3]+" - a Python turtle graphics example")
            self.module = __import__(fname[:-3])
            self.configGUI(NORMAL, NORMAL, DISABLED, DISABLED,
                           "Press start button", "red")
            self.state = READY

    def startDemo(self):
        self.refreshCanvas()
        self.dirty = True
        turtle.TurtleScreen._RUNNING = True
        self.configGUI(DISABLED, DISABLED, NORMAL, DISABLED,
                       "demo running...", "black")
        self.screen.clear()
        self.screen.mode("standard")
        self.state = RUNNING

        try:
            result = self.module.main()
            if result == "EVENTLOOP":
                self.state = EVENTDRIVEN
            else:
                self.state = DONE
        except turtle.Terminator:
            if self.root is None:
                return
            self.state = DONE
            result = "stopped!"
        if self.state == DONE:
            self.configGUI(NORMAL, NORMAL, DISABLED, NORMAL,
                           result)
        elif self.state == EVENTDRIVEN:
            self.exitflag = True
            self.configGUI(DISABLED, DISABLED, NORMAL, DISABLED,
                           "use mouse/keys or STOP", "red")

    def clearCanvas(self):
        self.refreshCanvas()
        self.scanvas.config(cursor="")
        self.configGUI(NORMAL, NORMAL, DISABLED, DISABLED)

    def stopIt(self):
        if self.exitflag:
            self.clearCanvas()
            self.exitflag = False
            self.configGUI(NORMAL, NORMAL, DISABLED, DISABLED,
                           "STOPPED!", "red")
            turtle.TurtleScreen._RUNNING = False
        else:
            turtle.TurtleScreen._RUNNING = False

    def _destroy(self):
        turtle.TurtleScreen._RUNNING = False
        self.root.destroy()
        self.root = None
        #sys.exit()

def main():
    demo = DemoWindow()
    demo.root.mainloop()

if __name__ == '__main__':
    main()
PKb1�Z�w�[��turtle/tdemo_wikipedia.pyonu�[����
��^c@srdZddlmZmZmZddlmZmZd�Zd�Z	e
dkrne	�ZeGHe�ndS(sF      turtle-example-suite:

          tdemo_wikipedia3.py

This example is
inspired by the Wikipedia article on turtle
graphics. (See example wikipedia1 for URLs)

First we create (ne-1) (i.e. 35 in this
example) copies of our first turtle p.
Then we let them perform their steps in
parallel.

Followed by a complete undo().
i����(tScreentTurtletmainloop(tclocktsleepcCs�|g}xGtd|�D]6}|j�}|jd|�|j|�|}qWxvt|�D]h}t|d|�|d}xC|D];}|jd|�|jd|d|�|j|�q�Wq`WdS(Nig�v@g@gffffff�?i(trangetclonetrttappendtabstpencolortfd(tptnetszt
turtlelisttitqtctt((s3/usr/lib64/python2.7/Demo/turtle/tdemo_wikipedia.pytmn_ecks	


cCst�}|jd�t�}|jd�|j�|jd�|jd�|jdd�t�}t	|dd�t�}||}t
d�t�}xPtg|j�D]}|j
�^q��r�x|j�D]}|j�q�Wq�Wt�}d|||S(	Ntblackitredii$iisLaufzeit: %.3f sec(RtbgcolorRtspeedt
hideturtleR
tpensizettracerRRRtanytturtlestundobufferentriestundo(tsRtattettz1R((s3/usr/lib64/python2.7/Demo/turtle/tdemo_wikipedia.pytmain$s&	
	



		

	.	t__main__N(t__doc__tturtleRRRttimeRRRR$t__name__tmsg(((s3/usr/lib64/python2.7/Demo/turtle/tdemo_wikipedia.pyt<module>s			PKb1�Z}��W�$�$turtle/tdemo_nim.pyonu�[����
��^c@s5dZddlZddlZddlZdZdZdZdZedZeedd	edd
Z	dZ
dZdZd�Z
d�Zd�Zdefd��YZdejfd��YZdefd��YZdefd��YZdefd��YZd�Zedkr1e�ej�ndS( s�      turtle-example-suite:

            tdemo_nim.py

Play nim against the computer. The player
who takes the last stick is the winner.

Implements the model-view-controller
design pattern.
i����Ni�i�iiiiiii?i�i�cCstjtt�S(N(trandomtrandintt	MINSTICKSt	MAXSTICKS(((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyt	randomrowscCsy|d|dA|dA}|dkr0t|�SxBtd�D]4}|||A}|||kr=||f}|Sq=WdS(Niiii(t
randommovetrange(tstatetxoredtztstmove((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pytcomputerzug!s
cCsot|�}x6trDtjdd�}|||dkkrPqqWtj|dk||d�}||fS(Niii(tmaxtTrueRR(RtmR	trand((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR+s	 tNimModelcBs5eZd�Zd�Zd�Zd�Zd�ZRS(cCs
||_dS(N(tgame(tselfR((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyt__init__6scCsr|jjtjtjgkr"dSt�t�t�g|_d|_d|_	|jj
j�tj|j_dS(Ni(
RRtNimtCREATEDtOVERRtstickstplayertNonetwinnertviewtsetuptRUNNING(R((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR9s		cCs�|j|}||j|<|jjj||||j�|j�rstj|j_|j|_	|jjj
�nI|jdkr�d|_t|j�\}}|j||�d|_ndS(Nii(
RRRtnotify_moveRt	game_overRRRRtnotify_overRR(Rtrowtcolt	maxspalte((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyRBs

	cCs|jdddgkS(Ni(R(R((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR PscCs+|j||krdS|j||�dS(N(RR(RR"R#((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyRSs(t__name__t
__module__RRRR R(((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR5s
					tStickcBs#eZd�Zd�Zd�ZRS(cCs�tjj|dt�||_||_||_|j||�\}}|jd�|j	t
dtd�|jd�|j
�|j||�|jd�|j�dS(Ntvisibletsquareg$@g4@itwhite(tturtletTurtleRtFalseR"R#Rtcoordstshapet	shapesizetHUNITtWUNITtspeedtputgototcolort
showturtle(RR"R#Rtxty((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyRZs			



cCskt|d�\}}dd|d|t}dd|t}|tdtdtd|tdfS(Niiii(tdivmodR2R1tSCREENWIDTHtSCREENHEIGHT(RR"R#tpackett	remainderR8R9((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR.hscCs9|jjtjkrdS|jjj|j|j�dS(N(RRRRt
controllerRR"R#(RR8R9((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pytmakemovens(R%R&RR.R@(((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR'Ys		tNimViewcBsAeZd�Zdd�Zd�Zd�Zd�Zd�ZRS(cCs�||_|j|_|j|_|jjd�|jjt�|jjd�tjdt�|_	|j	j
�|j	jd�i|_xJt
d�D]<}x3t
t�D]%}t|||�|j||f<q�Wq�W|jd�|jjt�dS(Ni�i�R(iis... a moment please ...(i�i�i�(Rtscreentmodelt	colormodettracerR-tbgcolorR+R,twriterR4R3RRRR'tdisplayR(RRR"R#((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyRus	
	'
cCs�|jjt�|jj�|dk	rt|jjdtdd�|jjd�|jj	|dddd�n|jjdtdd�|jjd�|jj	|dddd�|jjt
�dS(Niii0tredtaligntcentertfonttCourieritbolditblacki(RMiRN(RMiRN(RBRER-RGtclearRR5R<tpencolortwriteR(Rtmsg1tmsg2((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyRH�s
cCs�|jjt�xOtd�D]A}x8t|jj|�D] }|j||fjt�q:WqWxRtd�D]D}x;t|jj|t�D] }|j||fjd�q�WqoW|j	d�|jjt
�dS(NiR*s*Your turn! Click leftmost stick to remove.(RBRER-RRCRR6tSCOLORRRHR(RR"R#((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR�s" "
cCs�|dkrIt}x�t||�D] }|j||fj|�q"Wn�|jd�tjd�|jd�t}xIt|d|dd�D]-}tjd�|j||fj|�q�W|jd�dS(	Nis ... thinking ...         g�?s ... thinking ... aaah ...ii����g�������?s*Your turn! Click leftmost stick to remove.(tHCOLORRRR6RHttimetsleeptCOLOR(RR"R#R$RtfarbeR
((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR�s!


!
cCs8|jjjdkrd}nd}|jd|�dS(NisCongrats. You're the winner!!!s"Sorry, the computer is the winner.s2To play again press space bar. To leave press ESC.(RRCRRH(RRT((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR!�s	cCs)|jjtjkr%|jj�ndS(N(RRRRRBRP(R((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyRP�sN(	R%R&RRRHRRR!RP(((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyRAts	
			t
NimControllercBseZd�Zd�ZRS(cCs�||_|jj|_t|_x'|jj�D]}|j|j�q1W|jjj	|jj
jd�|jjj	|jjjd�|jjj
d�|jjj�dS(NtspacetEscapesPress space bar to start game(RRRR-tBUSYtvaluestonclickR@RBtonkeyRCRRPRHtlisten(RRtstick((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR�s		cCs9|jr
dSt|_|jjj||�t|_dS(N(R^RRRCRR-(RR"R#((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR�s
		(R%R&RR(((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR[�s	RcBs#eZdZdZdZd�ZRS(iiicCsFtj|_||_t|�|_t|�|_t|�|_	dS(N(
RRRRBRRCRARR[R?(RRB((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR�s
	(R%R&RRRR(((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyR�scCs9tj�}|jd�|jtt�t|�}dS(Ntstandards
EVENTLOOP!(R+tScreentmodeRR;R<R(t
mainscreentnim((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pytmain�s

t__main__(i?i?i(i�i�i�(i�i�i�(t__doc__R+RRWR;R<RRR1R2RURVRYRRRtobjectRR,R'RAR[RRiR%tmainloop(((s-/usr/lib64/python2.7/Demo/turtle/tdemo_nim.pyt<module>
s0
		
	
$E	PKb1�Zlҗ���curses/repeat.pynuȯ��#! /usr/bin/python2.7

"""repeat <shell-command>

This simple program repeatedly (at 1-second intervals) executes the
shell command given on the command line and displays the output (or as
much of it as fits on the screen).  It uses curses to paint each new
output on top of the old output, so that if nothing changes, the
screen doesn't change.  This is handy to watch for changes in e.g. a
directory or process listing.

To end, hit Control-C.
"""

# Author: Guido van Rossum

# Disclaimer: there's a Linux program named 'watch' that does the same
# thing.  Honestly, I didn't know of its existence when I wrote this!

# To do: add features until it has the same functionality as watch(1);
# then compare code size and development time.

import os
import sys
import time
import curses

def main():
    if not sys.argv[1:]:
        print __doc__
        sys.exit(0)
    cmd = " ".join(sys.argv[1:])
    p = os.popen(cmd, "r")
    text = p.read()
    sts = p.close()
    if sts:
        print >>sys.stderr, "Exit code:", sts
        sys.exit(sts)
    w = curses.initscr()
    try:
        while True:
            w.erase()
            try:
                w.addstr(text)
            except curses.error:
                pass
            w.refresh()
            time.sleep(1)
            p = os.popen(cmd, "r")
            text = p.read()
            sts = p.close()
            if sts:
                print >>sys.stderr, "Exit code:", sts
                sys.exit(sts)
    finally:
        curses.endwin()

main()
PKb1�Z�cQ��curses/ncurses.pycnu�[����
Afc@sxddlZddlmZdd�Zd�Zd�Zd�Zd�Zd�Zd	�Z	d
�Z
eje
�dS(i����N(tpanelcCs|dkrt}n|j�S(N(tNonetstdscrtgetch(twin((s+/usr/lib64/python2.7/Demo/curses/ncurses.pytwGetchars	cCst�dS(N(R(((s+/usr/lib64/python2.7/Demo/curses/ncurses.pytGetcharscCs'tdkrt�n
tjt�dS(Ni(tnap_msecRtcursestnapms(((s+/usr/lib64/python2.7/Demo/curses/ncurses.pytwait_a_whiles
cCs2tjtjdd�tj�tj|�dS(Nii(RtmoveRtLINEStclrtoeoltaddstr(ttext((s+/usr/lib64/python2.7/Demo/curses/ncurses.pytsaywhats
c	Cs�tj||||�}tj|�}tj�r�|tjkrNtj}n	tj}|}tj|||�|j	t
d�tj|��n|j	t
d�tj�|S(Nt (
RtnewwinRt	new_panelt
has_colorst
COLOR_BLUEtCOLOR_WHITEtCOLOR_BLACKt	init_pairtbkgdsettordt
color_pairtA_BOLD(	tcolortrowstcolsttlyttlxRtpantfgtbg((s+/usr/lib64/python2.7/Demo/curses/ncurses.pytmkpanel s	"cCstj�tj�dS(N(Rt
update_panelsRtdoupdate(((s+/usr/lib64/python2.7/Demo/curses/ncurses.pytpflush0s
cCs�|j�}|j�d}|jdd�|jd|�|j�|j�|j�\}}xVtd|d�D]A}x8td|d�D]#}|j||�|j|�q�WqwWdS(Nis-pan%c-i(	twindowtuserptrRRR
tboxtgetmaxyxtrangetaddch(R"Rtnumtmaxytmaxxtytx((s+/usr/lib64/python2.7/Demo/curses/ncurses.pyt
fill_panel4s

cCs6|adaddddddgatj�xTtdtjd�D]<}x3tdtj�D]}tjd	||d
�q^WqEWx�tdd�D]�}t	tj
tjddtjdddd�}|jd
�t	tjtjddtjdtjdtjd
�}|jd�t	tj
tjdtjd
tjdtjd�}|jd�t	tjtjddtjdtjddtjd�}|jd�t	tjtjddtjdtjdtjdd�}|jd�t|�t|�t|�t|�t|�|j�|j�t�td�t�td�|jdd�|j�|j�|j�|j�|j�t�t�td�|j�t�t�td�|j�t�t�td�|jtjddtjd�t�t�td�|j�t�t�td�|jtjddtjd�t�t�td�|j�t�t�td�|j�t�t�td �|j�t�t�td!�|j�t�t�td"�|j�t�t�td#�|j�t�t�td!�|j�t�t�td$�|j�t�t�xDtdd%�D]3}|j�}	|j�}
td&�|	jtjdd�|	jt|�|jtjd%|tjd�|
jtjd%d�|
jt|�t�t�td'�|	jtjd%d�|	jt|�|jtjdd|d
d%�|
jtjdd�|
jt|�t�t�q�Wtd&�|jtjd%|dtjd�t�t�td(�|j�t�t�td#�|j�t�t�td"�|j�t�t�td)�~t�t�td*�|j�t�t�td+�~t�t�td,�~t�t�td-�~t�t�tdkr(Pnd.aq�WdS(/NittesttTESTs(**)s*()*s<-->tLASTis%di
iitp1iitp2i	tp3itp4tp5spress any key to continues(h3 s1 s2 s4 s5;press any key to continuess1; press any key to continuess2; press any key to continuesm2; press any key to continuess3; press any key to continuesm3; press any key to continueisb3; press any key to continuess4; press any key to continuess5; press any key to continuest3; press any key to continuest1; press any key to continuest2; press any key to continuest4; press any key to continueism4; press any key to continuesm5; press any key to continuest5; press any key to continuesd2; press any key to continuesh3; press any key to continuesd1; press any key to continuesd4; press any key to continuesd5; press any key to continueid(RRtmodtrefreshR-RRtCOLSRR%t	COLOR_REDtset_userptrtCOLOR_GREENtCOLOR_YELLOWRt
COLOR_MAGENTAR4thideR(RR
RtshowtbottomttopR)(RR2R3R8R9R:R;R<titmptw4tw5((s+/usr/lib64/python2.7/Demo/curses/ncurses.pytdemo_panelsCsN
!		
	


	



	

	





















"


"
















"
#
&











(RRRRRR
RR%R(R4RLtwrapper(((s+/usr/lib64/python2.7/Demo/curses/ncurses.pyt<module>s							�PKb1�ZXA?��curses/ncurses.pynuȯ��#! /usr/bin/python2.7
#
# $Id$
#
# (n)curses exerciser in Python, an interactive test for the curses
# module. Currently, only the panel demos are ported.

import curses
from curses import panel

def wGetchar(win = None):
    if win is None: win = stdscr
    return win.getch()

def Getchar():
    wGetchar()

#
# Panels tester
#
def wait_a_while():
    if nap_msec == 1:
        Getchar()
    else:
        curses.napms(nap_msec)

def saywhat(text):
    stdscr.move(curses.LINES - 1, 0)
    stdscr.clrtoeol()
    stdscr.addstr(text)

def mkpanel(color, rows, cols, tly, tlx):
    win = curses.newwin(rows, cols, tly, tlx)
    pan = panel.new_panel(win)
    if curses.has_colors():
        if color == curses.COLOR_BLUE:
            fg = curses.COLOR_WHITE
        else:
            fg = curses.COLOR_BLACK
        bg = color
        curses.init_pair(color, fg, bg)
        win.bkgdset(ord(' '), curses.color_pair(color))
    else:
        win.bkgdset(ord(' '), curses.A_BOLD)

    return pan

def pflush():
    panel.update_panels()
    curses.doupdate()

def fill_panel(pan):
    win = pan.window()
    num = pan.userptr()[1]

    win.move(1, 1)
    win.addstr("-pan%c-" % num)
    win.clrtoeol()
    win.box()

    maxy, maxx = win.getmaxyx()
    for y in range(2, maxy - 1):
        for x in range(1, maxx - 1):
            win.move(y, x)
            win.addch(num)

def demo_panels(win):
    global stdscr, nap_msec, mod
    stdscr = win
    nap_msec = 1
    mod = ["test", "TEST", "(**)", "*()*", "<-->", "LAST"]

    stdscr.refresh()

    for y in range(0, curses.LINES - 1):
        for x in range(0, curses.COLS):
            stdscr.addstr("%d" % ((y + x) % 10))
    for y in range(0, 1):
        p1 = mkpanel(curses.COLOR_RED,
                     curses.LINES // 2 - 2,
                     curses.COLS // 8 + 1,
                     0,
                     0)
        p1.set_userptr("p1")

        p2 = mkpanel(curses.COLOR_GREEN,
                     curses.LINES // 2 + 1,
                     curses.COLS // 7,
                     curses.LINES // 4,
                     curses.COLS // 10)
        p2.set_userptr("p2")

        p3 = mkpanel(curses.COLOR_YELLOW,
                     curses.LINES // 4,
                     curses.COLS // 10,
                     curses.LINES // 2,
                     curses.COLS // 9)
        p3.set_userptr("p3")

        p4 = mkpanel(curses.COLOR_BLUE,
                     curses.LINES // 2 - 2,
                     curses.COLS // 8,
                     curses.LINES // 2 - 2,
                     curses.COLS // 3)
        p4.set_userptr("p4")

        p5 = mkpanel(curses.COLOR_MAGENTA,
                     curses.LINES // 2 - 2,
                     curses.COLS // 8,
                     curses.LINES // 2,
                     curses.COLS // 2 - 2)
        p5.set_userptr("p5")

        fill_panel(p1)
        fill_panel(p2)
        fill_panel(p3)
        fill_panel(p4)
        fill_panel(p5)
        p4.hide()
        p5.hide()
        pflush()
        saywhat("press any key to continue")
        wait_a_while()

        saywhat("h3 s1 s2 s4 s5;press any key to continue")
        p1.move(0, 0)
        p3.hide()
        p1.show()
        p2.show()
        p4.show()
        p5.show()
        pflush()
        wait_a_while()

        saywhat("s1; press any key to continue")
        p1.show()
        pflush()
        wait_a_while()

        saywhat("s2; press any key to continue")
        p2.show()
        pflush()
        wait_a_while()

        saywhat("m2; press any key to continue")
        p2.move(curses.LINES // 3 + 1, curses.COLS // 8)
        pflush()
        wait_a_while()

        saywhat("s3; press any key to continue")
        p3.show()
        pflush()
        wait_a_while()

        saywhat("m3; press any key to continue")
        p3.move(curses.LINES // 4 + 1, curses.COLS // 15)
        pflush()
        wait_a_while()

        saywhat("b3; press any key to continue")
        p3.bottom()
        pflush()
        wait_a_while()

        saywhat("s4; press any key to continue")
        p4.show()
        pflush()
        wait_a_while()

        saywhat("s5; press any key to continue")
        p5.show()
        pflush()
        wait_a_while()

        saywhat("t3; press any key to continue")
        p3.top()
        pflush()
        wait_a_while()

        saywhat("t1; press any key to continue")
        p1.show()
        pflush()
        wait_a_while()

        saywhat("t2; press any key to continue")
        p2.show()
        pflush()
        wait_a_while()

        saywhat("t3; press any key to continue")
        p3.show()
        pflush()
        wait_a_while()

        saywhat("t4; press any key to continue")
        p4.show()
        pflush()
        wait_a_while()

        for itmp in range(0, 6):
            w4 = p4.window()
            w5 = p5.window()

            saywhat("m4; press any key to continue")
            w4.move(curses.LINES // 8, 1)
            w4.addstr(mod[itmp])
            p4.move(curses.LINES // 6, itmp * curses.COLS // 8)
            w5.move(curses.LINES // 6, 1)
            w5.addstr(mod[itmp])
            pflush()
            wait_a_while()

            saywhat("m5; press any key to continue")
            w4.move(curses.LINES // 6, 1)
            w4.addstr(mod[itmp])
            p5.move(curses.LINES // 3 - 1, itmp * 10 + 6)
            w5.move(curses.LINES // 8, 1)
            w5.addstr(mod[itmp])
            pflush()
            wait_a_while()

        saywhat("m4; press any key to continue")
        p4.move(curses.LINES // 6, (itmp + 1) * curses.COLS // 8)
        pflush()
        wait_a_while()

        saywhat("t5; press any key to continue")
        p5.top()
        pflush()
        wait_a_while()

        saywhat("t2; press any key to continue")
        p2.top()
        pflush()
        wait_a_while()

        saywhat("t1; press any key to continue")
        p1.top()
        pflush()
        wait_a_while()

        saywhat("d2; press any key to continue")
        del p2
        pflush()
        wait_a_while()

        saywhat("h3; press any key to continue")
        p3.hide()
        pflush()
        wait_a_while()

        saywhat("d1; press any key to continue")
        del p1
        pflush()
        wait_a_while()

        saywhat("d4; press any key to continue")
        del p4
        pflush()
        wait_a_while()

        saywhat("d5; press any key to continue")
        del p5
        pflush()
        wait_a_while()
        if nap_msec == 1:
            break
        nap_msec = 100

#
# one fine day there'll be the menu at this place
#
curses.wrapper(demo_panels)
PKb1�Zϐ���curses/rain.pyonu�[����
Afc@s?ddlZddlmZd�Zd�Zeje�dS(i����N(t	randrangecCss|dkrd}n
|d8}tj�rotdd�}tj|�}|r_|tjB}ntj|�n|S(Niiii(tcursest
has_colorsRt
color_pairtA_BOLDtstdscrtattrset(tjtztcolor((s(/usr/lib64/python2.7/Demo/curses/rain.pytnext_j
s	
c
Cs|atj�rJtj}tjdtj|�tjdtj|�ntj�tj�tj	d�tj
d}tjd}dg|}dg|}xHtddd�D]4}t
d|�d||<t
d|�d||<q�Wd}xtr
t
d|�d}t
d|�d}tj||td��tj||||td��t|�}tj||||td��t|�}tj||d||td	��tj||||dd
�tj||d||td	��t|�}tj||d||td	��tj||d||dd�tj||||dd�tj||d||dd
�tj||d||td	��t|�}tj||d||td��tj||d||dd�tj||||dd�tj||d||dd�tj||d||td��|||<|||<tj�}	|	td�ks�|	td�kr�dS|	td�kr�tjd�n"|	td�kr�tjd�ntjd�q�WdS(Niiiii����t.totOt-s|.|s/ \s| O |s\ /t s   s     tqtQtsi2(RRRtCOLOR_BLACKt	init_pairt
COLOR_BLUEt
COLOR_CYANtnltnoechottimeouttCOLStLINEStrangeRtTruetaddchtordR
taddstrtgetchtnodelaytnapms(
twintbgtctrtxpostyposRtxtytch((s(/usr/lib64/python2.7/Demo/curses/rain.pytmainsb	






	!!%%%##%%##%

$(RtrandomRR
R-twrapper(((s(/usr/lib64/python2.7/Demo/curses/rain.pyt<module>s		EPKb1�Z�%����curses/repeat.pyonu�[����
Afc@sJdZddlZddlZddlZddlZd�Ze�dS(s�repeat <shell-command>

This simple program repeatedly (at 1-second intervals) executes the
shell command given on the command line and displays the output (or as
much of it as fits on the screen).  It uses curses to paint each new
output on top of the old output, so that if nothing changes, the
screen doesn't change.  This is handy to watch for changes in e.g. a
directory or process listing.

To end, hit Control-C.
i����NcCsVtjds"tGHtjd�ndjtjd�}tj|d�}|j�}|j�}|r�tj	dI|IJtj|�nt
j�}z�x�trB|j
�y|j|�Wnt
jk
r�nX|j�tjd�tj|d�}|j�}|j�}|r�tj	dI|IJtj|�q�q�WWdt
j�XdS(Niit trs
Exit code:(tsystargvt__doc__texittjointostpopentreadtclosetstderrtcursestinitscrtTrueterasetaddstrterrortrefreshttimetsleeptendwin(tcmdtpttexttststw((s*/usr/lib64/python2.7/Demo/curses/repeat.pytmains6
	


(RRRRRR(((s*/usr/lib64/python2.7/Demo/curses/repeat.pyt<module>
s
	PKb1�Z̥��TT
curses/READMEnu�[���This is a collection of demos and tests for the curses module. 

ncurses demos
=============

These demos are converted from the C versions in the ncurses
distribution, and were contributed by Thomas Gellekum <tg@FreeBSD.org>
I didn't strive for a `pythonic' style, but bluntly copied the
originals. I won't attempt to `beautify' the program anytime soon, but
I wouldn't mind someone else making an effort in that direction, of
course.

ncurses.py      -- currently only a panels demo
rain.py         -- raindrops keep falling on my desktop
tclock.py       -- ASCII clock, by Howard Jones
xmas.py         -- I'm dreaming of an ASCII christmas

Please submit bugfixes and new contributions to the Python bug tracker.


Other demos
===========

life.py         -- Simple game of Life
repeat.py       -- Repeatedly execute a shell command (like watch(1))
PKb1�Z�
�fcfccurses/xmas.pynu�[���# asciixmas
# December 1989             Larry Bartz           Indianapolis, IN
#
# $Id$
#
# I'm dreaming of an ascii character-based monochrome Christmas,
# Just like the ones I used to know!
# Via a full duplex communications channel,
# At 9600 bits per second,
# Even though it's kinda slow.
#
# I'm dreaming of an ascii character-based monochrome Christmas,
# With ev'ry C program I write!
# May your screen be merry and bright!
# And may all your Christmases be amber or green,
# (for reduced eyestrain and improved visibility)!
#
#
# Notes on the Python version:
# I used a couple of `try...except curses.error' to get around some functions
# returning ERR. The errors come from using wrapping functions to fill
# windows to the last character cell. The C version doesn't have this problem,
# it simply ignores any return values.
#

import curses
import sys

FROMWHO = "Thomas Gellekum <tg@FreeBSD.org>"

def set_color(win, color):
    if curses.has_colors():
        n = color + 1
        curses.init_pair(n, color, my_bg)
        win.attroff(curses.A_COLOR)
        win.attron(curses.color_pair(n))

def unset_color(win):
    if curses.has_colors():
        win.attrset(curses.color_pair(0))

def look_out(msecs):
    curses.napms(msecs)
    if stdscr.getch() != -1:
        curses.beep()
        sys.exit(0)

def boxit():
    for y in range(0, 20):
        stdscr.addch(y, 7, ord('|'))

    for x in range(8, 80):
        stdscr.addch(19, x, ord('_'))

    for x in range(0, 80):
        stdscr.addch(22, x, ord('_'))

    return

def seas():
    stdscr.addch(4, 1, ord('S'))
    stdscr.addch(6, 1, ord('E'))
    stdscr.addch(8, 1, ord('A'))
    stdscr.addch(10, 1, ord('S'))
    stdscr.addch(12, 1, ord('O'))
    stdscr.addch(14, 1, ord('N'))
    stdscr.addch(16, 1, ord("'"))
    stdscr.addch(18, 1, ord('S'))

    return

def greet():
    stdscr.addch(3, 5, ord('G'))
    stdscr.addch(5, 5, ord('R'))
    stdscr.addch(7, 5, ord('E'))
    stdscr.addch(9, 5, ord('E'))
    stdscr.addch(11, 5, ord('T'))
    stdscr.addch(13, 5, ord('I'))
    stdscr.addch(15, 5, ord('N'))
    stdscr.addch(17, 5, ord('G'))
    stdscr.addch(19, 5, ord('S'))

    return

def fromwho():
    stdscr.addstr(21, 13, FROMWHO)
    return

def tree():
    set_color(treescrn, curses.COLOR_GREEN)
    treescrn.addch(1, 11, ord('/'))
    treescrn.addch(2, 11, ord('/'))
    treescrn.addch(3, 10, ord('/'))
    treescrn.addch(4, 9, ord('/'))
    treescrn.addch(5, 9, ord('/'))
    treescrn.addch(6, 8, ord('/'))
    treescrn.addch(7, 7, ord('/'))
    treescrn.addch(8, 6, ord('/'))
    treescrn.addch(9, 6, ord('/'))
    treescrn.addch(10, 5, ord('/'))
    treescrn.addch(11, 3, ord('/'))
    treescrn.addch(12, 2, ord('/'))

    treescrn.addch(1, 13, ord('\\'))
    treescrn.addch(2, 13, ord('\\'))
    treescrn.addch(3, 14, ord('\\'))
    treescrn.addch(4, 15, ord('\\'))
    treescrn.addch(5, 15, ord('\\'))
    treescrn.addch(6, 16, ord('\\'))
    treescrn.addch(7, 17, ord('\\'))
    treescrn.addch(8, 18, ord('\\'))
    treescrn.addch(9, 18, ord('\\'))
    treescrn.addch(10, 19, ord('\\'))
    treescrn.addch(11, 21, ord('\\'))
    treescrn.addch(12, 22, ord('\\'))

    treescrn.addch(4, 10, ord('_'))
    treescrn.addch(4, 14, ord('_'))
    treescrn.addch(8, 7, ord('_'))
    treescrn.addch(8, 17, ord('_'))

    treescrn.addstr(13, 0, "//////////// \\\\\\\\\\\\\\\\\\\\\\\\")

    treescrn.addstr(14, 11, "| |")
    treescrn.addstr(15, 11, "|_|")

    unset_color(treescrn)
    treescrn.refresh()
    w_del_msg.refresh()

    return

def balls():
    treescrn.overlay(treescrn2)

    set_color(treescrn2, curses.COLOR_BLUE)
    treescrn2.addch(3, 9, ord('@'))
    treescrn2.addch(3, 15, ord('@'))
    treescrn2.addch(4, 8, ord('@'))
    treescrn2.addch(4, 16, ord('@'))
    treescrn2.addch(5, 7, ord('@'))
    treescrn2.addch(5, 17, ord('@'))
    treescrn2.addch(7, 6, ord('@'))
    treescrn2.addch(7, 18, ord('@'))
    treescrn2.addch(8, 5, ord('@'))
    treescrn2.addch(8, 19, ord('@'))
    treescrn2.addch(10, 4, ord('@'))
    treescrn2.addch(10, 20, ord('@'))
    treescrn2.addch(11, 2, ord('@'))
    treescrn2.addch(11, 22, ord('@'))
    treescrn2.addch(12, 1, ord('@'))
    treescrn2.addch(12, 23, ord('@'))

    unset_color(treescrn2)
    treescrn2.refresh()
    w_del_msg.refresh()
    return

def star():
    treescrn2.attrset(curses.A_BOLD | curses.A_BLINK)
    set_color(treescrn2, curses.COLOR_YELLOW)

    treescrn2.addch(0, 12, ord('*'))
    treescrn2.standend()

    unset_color(treescrn2)
    treescrn2.refresh()
    w_del_msg.refresh()
    return

def strng1():
    treescrn2.attrset(curses.A_BOLD | curses.A_BLINK)
    set_color(treescrn2, curses.COLOR_WHITE)

    treescrn2.addch(3, 13, ord('\''))
    treescrn2.addch(3, 12, ord(':'))
    treescrn2.addch(3, 11, ord('.'))

    treescrn2.attroff(curses.A_BOLD | curses.A_BLINK)
    unset_color(treescrn2)

    treescrn2.refresh()
    w_del_msg.refresh()
    return

def strng2():
    treescrn2.attrset(curses.A_BOLD | curses.A_BLINK)
    set_color(treescrn2, curses.COLOR_WHITE)

    treescrn2.addch(5, 14, ord('\''))
    treescrn2.addch(5, 13, ord(':'))
    treescrn2.addch(5, 12, ord('.'))
    treescrn2.addch(5, 11, ord(','))
    treescrn2.addch(6, 10, ord('\''))
    treescrn2.addch(6, 9, ord(':'))

    treescrn2.attroff(curses.A_BOLD | curses.A_BLINK)
    unset_color(treescrn2)

    treescrn2.refresh()
    w_del_msg.refresh()
    return

def strng3():
    treescrn2.attrset(curses.A_BOLD | curses.A_BLINK)
    set_color(treescrn2, curses.COLOR_WHITE)

    treescrn2.addch(7, 16, ord('\''))
    treescrn2.addch(7, 15, ord(':'))
    treescrn2.addch(7, 14, ord('.'))
    treescrn2.addch(7, 13, ord(','))
    treescrn2.addch(8, 12, ord('\''))
    treescrn2.addch(8, 11, ord(':'))
    treescrn2.addch(8, 10, ord('.'))
    treescrn2.addch(8, 9, ord(','))

    treescrn2.attroff(curses.A_BOLD | curses.A_BLINK)
    unset_color(treescrn2)

    treescrn2.refresh()
    w_del_msg.refresh()
    return

def strng4():
    treescrn2.attrset(curses.A_BOLD | curses.A_BLINK)
    set_color(treescrn2, curses.COLOR_WHITE)

    treescrn2.addch(9, 17, ord('\''))
    treescrn2.addch(9, 16, ord(':'))
    treescrn2.addch(9, 15, ord('.'))
    treescrn2.addch(9, 14, ord(','))
    treescrn2.addch(10, 13, ord('\''))
    treescrn2.addch(10, 12, ord(':'))
    treescrn2.addch(10, 11, ord('.'))
    treescrn2.addch(10, 10, ord(','))
    treescrn2.addch(11, 9, ord('\''))
    treescrn2.addch(11, 8, ord(':'))
    treescrn2.addch(11, 7, ord('.'))
    treescrn2.addch(11, 6, ord(','))
    treescrn2.addch(12, 5, ord('\''))

    treescrn2.attroff(curses.A_BOLD | curses.A_BLINK)
    unset_color(treescrn2)

    treescrn2.refresh()
    w_del_msg.refresh()
    return

def strng5():
    treescrn2.attrset(curses.A_BOLD | curses.A_BLINK)
    set_color(treescrn2, curses.COLOR_WHITE)

    treescrn2.addch(11, 19, ord('\''))
    treescrn2.addch(11, 18, ord(':'))
    treescrn2.addch(11, 17, ord('.'))
    treescrn2.addch(11, 16, ord(','))
    treescrn2.addch(12, 15, ord('\''))
    treescrn2.addch(12, 14, ord(':'))
    treescrn2.addch(12, 13, ord('.'))
    treescrn2.addch(12, 12, ord(','))

    treescrn2.attroff(curses.A_BOLD | curses.A_BLINK)
    unset_color(treescrn2)

    # save a fully lit tree
    treescrn2.overlay(treescrn)

    treescrn2.refresh()
    w_del_msg.refresh()
    return

def blinkit():
    treescrn8.touchwin()

    for cycle in range(5):
        if cycle == 0:
            treescrn3.overlay(treescrn8)
            treescrn8.refresh()
            w_del_msg.refresh()
            break
        elif cycle == 1:
            treescrn4.overlay(treescrn8)
            treescrn8.refresh()
            w_del_msg.refresh()
            break
        elif cycle == 2:
            treescrn5.overlay(treescrn8)
            treescrn8.refresh()
            w_del_msg.refresh()
            break
        elif cycle == 3:
            treescrn6.overlay(treescrn8)
            treescrn8.refresh()
            w_del_msg.refresh()
            break
        elif cycle == 4:
            treescrn7.overlay(treescrn8)
            treescrn8.refresh()
            w_del_msg.refresh()
            break

        treescrn8.touchwin()

    # ALL ON
    treescrn.overlay(treescrn8)
    treescrn8.refresh()
    w_del_msg.refresh()

    return

def deer_step(win, y, x):
    win.mvwin(y, x)
    win.refresh()
    w_del_msg.refresh()
    look_out(5)

def reindeer():
    y_pos = 0

    for x_pos in range(70, 62, -1):
        if x_pos < 66: y_pos = 1
        for looper in range(0, 4):
            dotdeer0.addch(y_pos, x_pos, ord('.'))
            dotdeer0.refresh()
            w_del_msg.refresh()
            dotdeer0.erase()
            dotdeer0.refresh()
            w_del_msg.refresh()
            look_out(50)

    y_pos = 2

    for x_pos in range(x_pos - 1, 50, -1):
        for looper in range(0, 4):
            if x_pos < 56:
                y_pos = 3

                try:
                    stardeer0.addch(y_pos, x_pos, ord('*'))
                except curses.error:
                    pass
                stardeer0.refresh()
                w_del_msg.refresh()
                stardeer0.erase()
                stardeer0.refresh()
                w_del_msg.refresh()
            else:
                dotdeer0.addch(y_pos, x_pos, ord('*'))
                dotdeer0.refresh()
                w_del_msg.refresh()
                dotdeer0.erase()
                dotdeer0.refresh()
                w_del_msg.refresh()

    x_pos = 58

    for y_pos in range(2, 5):
        lildeer0.touchwin()
        lildeer0.refresh()
        w_del_msg.refresh()

        for looper in range(0, 4):
            deer_step(lildeer3, y_pos, x_pos)
            deer_step(lildeer2, y_pos, x_pos)
            deer_step(lildeer1, y_pos, x_pos)
            deer_step(lildeer2, y_pos, x_pos)
            deer_step(lildeer3, y_pos, x_pos)

            lildeer0.touchwin()
            lildeer0.refresh()
            w_del_msg.refresh()

            x_pos -= 2

    x_pos = 35

    for y_pos in range(5, 10):

        middeer0.touchwin()
        middeer0.refresh()
        w_del_msg.refresh()

        for looper in range(2):
            deer_step(middeer3, y_pos, x_pos)
            deer_step(middeer2, y_pos, x_pos)
            deer_step(middeer1, y_pos, x_pos)
            deer_step(middeer2, y_pos, x_pos)
            deer_step(middeer3, y_pos, x_pos)

            middeer0.touchwin()
            middeer0.refresh()
            w_del_msg.refresh()

            x_pos -= 3

    look_out(300)

    y_pos = 1

    for x_pos in range(8, 16):
        deer_step(bigdeer4, y_pos, x_pos)
        deer_step(bigdeer3, y_pos, x_pos)
        deer_step(bigdeer2, y_pos, x_pos)
        deer_step(bigdeer1, y_pos, x_pos)
        deer_step(bigdeer2, y_pos, x_pos)
        deer_step(bigdeer3, y_pos, x_pos)
        deer_step(bigdeer4, y_pos, x_pos)
        deer_step(bigdeer0, y_pos, x_pos)

    x_pos -= 1

    for looper in range(0, 6):
        deer_step(lookdeer4, y_pos, x_pos)
        deer_step(lookdeer3, y_pos, x_pos)
        deer_step(lookdeer2, y_pos, x_pos)
        deer_step(lookdeer1, y_pos, x_pos)
        deer_step(lookdeer2, y_pos, x_pos)
        deer_step(lookdeer3, y_pos, x_pos)
        deer_step(lookdeer4, y_pos, x_pos)

    deer_step(lookdeer0, y_pos, x_pos)

    for y_pos in range(y_pos, 10):
        for looper in range(0, 2):
            deer_step(bigdeer4, y_pos, x_pos)
            deer_step(bigdeer3, y_pos, x_pos)
            deer_step(bigdeer2, y_pos, x_pos)
            deer_step(bigdeer1, y_pos, x_pos)
            deer_step(bigdeer2, y_pos, x_pos)
            deer_step(bigdeer3, y_pos, x_pos)
            deer_step(bigdeer4, y_pos, x_pos)
        deer_step(bigdeer0, y_pos, x_pos)

    y_pos -= 1

    deer_step(lookdeer3, y_pos, x_pos)
    return

def main(win):
    global stdscr
    stdscr = win

    global my_bg, y_pos, x_pos
    global treescrn, treescrn2, treescrn3, treescrn4
    global treescrn5, treescrn6, treescrn7, treescrn8
    global dotdeer0, stardeer0
    global lildeer0, lildeer1, lildeer2, lildeer3
    global middeer0, middeer1, middeer2, middeer3
    global bigdeer0, bigdeer1, bigdeer2, bigdeer3, bigdeer4
    global lookdeer0, lookdeer1, lookdeer2, lookdeer3, lookdeer4
    global w_holiday, w_del_msg

    my_bg = curses.COLOR_BLACK
    # curses.curs_set(0)

    treescrn = curses.newwin(16, 27, 3, 53)
    treescrn2 = curses.newwin(16, 27, 3, 53)
    treescrn3 = curses.newwin(16, 27, 3, 53)
    treescrn4 = curses.newwin(16, 27, 3, 53)
    treescrn5 = curses.newwin(16, 27, 3, 53)
    treescrn6 = curses.newwin(16, 27, 3, 53)
    treescrn7 = curses.newwin(16, 27, 3, 53)
    treescrn8 = curses.newwin(16, 27, 3, 53)

    dotdeer0 = curses.newwin(3, 71, 0, 8)

    stardeer0 = curses.newwin(4, 56, 0, 8)

    lildeer0 = curses.newwin(7, 53, 0, 8)
    lildeer1 = curses.newwin(2, 4, 0, 0)
    lildeer2 = curses.newwin(2, 4, 0, 0)
    lildeer3 = curses.newwin(2, 4, 0, 0)

    middeer0 = curses.newwin(15, 42, 0, 8)
    middeer1 = curses.newwin(3, 7, 0, 0)
    middeer2 = curses.newwin(3, 7, 0, 0)
    middeer3 = curses.newwin(3, 7, 0, 0)

    bigdeer0 = curses.newwin(10, 23, 0, 0)
    bigdeer1 = curses.newwin(10, 23, 0, 0)
    bigdeer2 = curses.newwin(10, 23, 0, 0)
    bigdeer3 = curses.newwin(10, 23, 0, 0)
    bigdeer4 = curses.newwin(10, 23, 0, 0)

    lookdeer0 = curses.newwin(10, 25, 0, 0)
    lookdeer1 = curses.newwin(10, 25, 0, 0)
    lookdeer2 = curses.newwin(10, 25, 0, 0)
    lookdeer3 = curses.newwin(10, 25, 0, 0)
    lookdeer4 = curses.newwin(10, 25, 0, 0)

    w_holiday = curses.newwin(1, 27, 3, 27)

    w_del_msg = curses.newwin(1, 20, 23, 60)

    try:
        w_del_msg.addstr(0, 0, "Hit any key to quit")
    except curses.error:
        pass

    try:
        w_holiday.addstr(0, 0, "H A P P Y  H O L I D A Y S")
    except curses.error:
        pass

    # set up the windows for our various reindeer
    lildeer1.addch(0, 0, ord('V'))
    lildeer1.addch(1, 0, ord('@'))
    lildeer1.addch(1, 1, ord('<'))
    lildeer1.addch(1, 2, ord('>'))
    try:
        lildeer1.addch(1, 3, ord('~'))
    except curses.error:
        pass

    lildeer2.addch(0, 0, ord('V'))
    lildeer2.addch(1, 0, ord('@'))
    lildeer2.addch(1, 1, ord('|'))
    lildeer2.addch(1, 2, ord('|'))
    try:
        lildeer2.addch(1, 3, ord('~'))
    except curses.error:
        pass

    lildeer3.addch(0, 0, ord('V'))
    lildeer3.addch(1, 0, ord('@'))
    lildeer3.addch(1, 1, ord('>'))
    lildeer3.addch(1, 2, ord('<'))
    try:
        lildeer2.addch(1, 3, ord('~'))  # XXX
    except curses.error:
        pass

    middeer1.addch(0, 2, ord('y'))
    middeer1.addch(0, 3, ord('y'))
    middeer1.addch(1, 2, ord('0'))
    middeer1.addch(1, 3, ord('('))
    middeer1.addch(1, 4, ord('='))
    middeer1.addch(1, 5, ord(')'))
    middeer1.addch(1, 6, ord('~'))
    middeer1.addch(2, 3, ord('\\'))
    middeer1.addch(2, 5, ord('/'))

    middeer2.addch(0, 2, ord('y'))
    middeer2.addch(0, 3, ord('y'))
    middeer2.addch(1, 2, ord('0'))
    middeer2.addch(1, 3, ord('('))
    middeer2.addch(1, 4, ord('='))
    middeer2.addch(1, 5, ord(')'))
    middeer2.addch(1, 6, ord('~'))
    middeer2.addch(2, 3, ord('|'))
    middeer2.addch(2, 5, ord('|'))

    middeer3.addch(0, 2, ord('y'))
    middeer3.addch(0, 3, ord('y'))
    middeer3.addch(1, 2, ord('0'))
    middeer3.addch(1, 3, ord('('))
    middeer3.addch(1, 4, ord('='))
    middeer3.addch(1, 5, ord(')'))
    middeer3.addch(1, 6, ord('~'))
    middeer3.addch(2, 3, ord('/'))
    middeer3.addch(2, 5, ord('\\'))

    bigdeer1.addch(0, 17, ord('\\'))
    bigdeer1.addch(0, 18, ord('/'))
    bigdeer1.addch(0, 19, ord('\\'))
    bigdeer1.addch(0, 20, ord('/'))
    bigdeer1.addch(1, 18, ord('\\'))
    bigdeer1.addch(1, 20, ord('/'))
    bigdeer1.addch(2, 19, ord('|'))
    bigdeer1.addch(2, 20, ord('_'))
    bigdeer1.addch(3, 18, ord('/'))
    bigdeer1.addch(3, 19, ord('^'))
    bigdeer1.addch(3, 20, ord('0'))
    bigdeer1.addch(3, 21, ord('\\'))
    bigdeer1.addch(4, 17, ord('/'))
    bigdeer1.addch(4, 18, ord('/'))
    bigdeer1.addch(4, 19, ord('\\'))
    bigdeer1.addch(4, 22, ord('\\'))
    bigdeer1.addstr(5, 7, "^~~~~~~~~//  ~~U")
    bigdeer1.addstr(6, 7, "( \\_____( /")       # ))
    bigdeer1.addstr(7, 8, "( )    /")
    bigdeer1.addstr(8, 9, "\\\\   /")
    bigdeer1.addstr(9, 11, "\\>/>")

    bigdeer2.addch(0, 17, ord('\\'))
    bigdeer2.addch(0, 18, ord('/'))
    bigdeer2.addch(0, 19, ord('\\'))
    bigdeer2.addch(0, 20, ord('/'))
    bigdeer2.addch(1, 18, ord('\\'))
    bigdeer2.addch(1, 20, ord('/'))
    bigdeer2.addch(2, 19, ord('|'))
    bigdeer2.addch(2, 20, ord('_'))
    bigdeer2.addch(3, 18, ord('/'))
    bigdeer2.addch(3, 19, ord('^'))
    bigdeer2.addch(3, 20, ord('0'))
    bigdeer2.addch(3, 21, ord('\\'))
    bigdeer2.addch(4, 17, ord('/'))
    bigdeer2.addch(4, 18, ord('/'))
    bigdeer2.addch(4, 19, ord('\\'))
    bigdeer2.addch(4, 22, ord('\\'))
    bigdeer2.addstr(5, 7, "^~~~~~~~~//  ~~U")
    bigdeer2.addstr(6, 7, "(( )____( /")        # ))
    bigdeer2.addstr(7, 7, "( /    |")
    bigdeer2.addstr(8, 8, "\\/    |")
    bigdeer2.addstr(9, 9, "|>   |>")

    bigdeer3.addch(0, 17, ord('\\'))
    bigdeer3.addch(0, 18, ord('/'))
    bigdeer3.addch(0, 19, ord('\\'))
    bigdeer3.addch(0, 20, ord('/'))
    bigdeer3.addch(1, 18, ord('\\'))
    bigdeer3.addch(1, 20, ord('/'))
    bigdeer3.addch(2, 19, ord('|'))
    bigdeer3.addch(2, 20, ord('_'))
    bigdeer3.addch(3, 18, ord('/'))
    bigdeer3.addch(3, 19, ord('^'))
    bigdeer3.addch(3, 20, ord('0'))
    bigdeer3.addch(3, 21, ord('\\'))
    bigdeer3.addch(4, 17, ord('/'))
    bigdeer3.addch(4, 18, ord('/'))
    bigdeer3.addch(4, 19, ord('\\'))
    bigdeer3.addch(4, 22, ord('\\'))
    bigdeer3.addstr(5, 7, "^~~~~~~~~//  ~~U")
    bigdeer3.addstr(6, 6, "( ()_____( /")       # ))
    bigdeer3.addstr(7, 6, "/ /       /")
    bigdeer3.addstr(8, 5, "|/          \\")
    bigdeer3.addstr(9, 5, "/>           \\>")

    bigdeer4.addch(0, 17, ord('\\'))
    bigdeer4.addch(0, 18, ord('/'))
    bigdeer4.addch(0, 19, ord('\\'))
    bigdeer4.addch(0, 20, ord('/'))
    bigdeer4.addch(1, 18, ord('\\'))
    bigdeer4.addch(1, 20, ord('/'))
    bigdeer4.addch(2, 19, ord('|'))
    bigdeer4.addch(2, 20, ord('_'))
    bigdeer4.addch(3, 18, ord('/'))
    bigdeer4.addch(3, 19, ord('^'))
    bigdeer4.addch(3, 20, ord('0'))
    bigdeer4.addch(3, 21, ord('\\'))
    bigdeer4.addch(4, 17, ord('/'))
    bigdeer4.addch(4, 18, ord('/'))
    bigdeer4.addch(4, 19, ord('\\'))
    bigdeer4.addch(4, 22, ord('\\'))
    bigdeer4.addstr(5, 7, "^~~~~~~~~//  ~~U")
    bigdeer4.addstr(6, 6, "( )______( /")       # )
    bigdeer4.addstr(7, 5, "(/          \\")     # )
    bigdeer4.addstr(8, 0, "v___=             ----^")

    lookdeer1.addstr(0, 16, "\\/     \\/")
    lookdeer1.addstr(1, 17, "\\Y/ \\Y/")
    lookdeer1.addstr(2, 19, "\\=/")
    lookdeer1.addstr(3, 17, "^\\o o/^")
    lookdeer1.addstr(4, 17, "//( )")
    lookdeer1.addstr(5, 7, "^~~~~~~~~// \\O/")
    lookdeer1.addstr(6, 7, "( \\_____( /")      # ))
    lookdeer1.addstr(7, 8, "( )    /")
    lookdeer1.addstr(8, 9, "\\\\   /")
    lookdeer1.addstr(9, 11, "\\>/>")

    lookdeer2.addstr(0, 16, "\\/     \\/")
    lookdeer2.addstr(1, 17, "\\Y/ \\Y/")
    lookdeer2.addstr(2, 19, "\\=/")
    lookdeer2.addstr(3, 17, "^\\o o/^")
    lookdeer2.addstr(4, 17, "//( )")
    lookdeer2.addstr(5, 7, "^~~~~~~~~// \\O/")
    lookdeer2.addstr(6, 7, "(( )____( /")       # ))
    lookdeer2.addstr(7, 7, "( /    |")
    lookdeer2.addstr(8, 8, "\\/    |")
    lookdeer2.addstr(9, 9, "|>   |>")

    lookdeer3.addstr(0, 16, "\\/     \\/")
    lookdeer3.addstr(1, 17, "\\Y/ \\Y/")
    lookdeer3.addstr(2, 19, "\\=/")
    lookdeer3.addstr(3, 17, "^\\o o/^")
    lookdeer3.addstr(4, 17, "//( )")
    lookdeer3.addstr(5, 7, "^~~~~~~~~// \\O/")
    lookdeer3.addstr(6, 6, "( ()_____( /")      # ))
    lookdeer3.addstr(7, 6, "/ /       /")
    lookdeer3.addstr(8, 5, "|/          \\")
    lookdeer3.addstr(9, 5, "/>           \\>")

    lookdeer4.addstr(0, 16, "\\/     \\/")
    lookdeer4.addstr(1, 17, "\\Y/ \\Y/")
    lookdeer4.addstr(2, 19, "\\=/")
    lookdeer4.addstr(3, 17, "^\\o o/^")
    lookdeer4.addstr(4, 17, "//( )")
    lookdeer4.addstr(5, 7, "^~~~~~~~~// \\O/")
    lookdeer4.addstr(6, 6, "( )______( /")      # )
    lookdeer4.addstr(7, 5, "(/          \\")    # )
    lookdeer4.addstr(8, 0, "v___=             ----^")

    ###############################################
    curses.cbreak()
    stdscr.nodelay(1)

    while 1:
        stdscr.clear()
        treescrn.erase()
        w_del_msg.touchwin()
        treescrn.touchwin()
        treescrn2.erase()
        treescrn2.touchwin()
        treescrn8.erase()
        treescrn8.touchwin()
        stdscr.refresh()
        look_out(150)
        boxit()
        stdscr.refresh()
        look_out(150)
        seas()
        stdscr.refresh()
        greet()
        stdscr.refresh()
        look_out(150)
        fromwho()
        stdscr.refresh()
        look_out(150)
        tree()
        look_out(150)
        balls()
        look_out(150)
        star()
        look_out(150)
        strng1()
        strng2()
        strng3()
        strng4()
        strng5()

        # set up the windows for our blinking trees
        #
        # treescrn3
        treescrn.overlay(treescrn3)

        # balls
        treescrn3.addch(4, 18, ord(' '))
        treescrn3.addch(7, 6, ord(' '))
        treescrn3.addch(8, 19, ord(' '))
        treescrn3.addch(11, 22, ord(' '))

        # star
        treescrn3.addch(0, 12, ord('*'))

        # strng1
        treescrn3.addch(3, 11, ord(' '))

        # strng2
        treescrn3.addch(5, 13, ord(' '))
        treescrn3.addch(6, 10, ord(' '))

        # strng3
        treescrn3.addch(7, 16, ord(' '))
        treescrn3.addch(7, 14, ord(' '))

        # strng4
        treescrn3.addch(10, 13, ord(' '))
        treescrn3.addch(10, 10, ord(' '))
        treescrn3.addch(11, 8, ord(' '))

        # strng5
        treescrn3.addch(11, 18, ord(' '))
        treescrn3.addch(12, 13, ord(' '))

        # treescrn4
        treescrn.overlay(treescrn4)

        # balls
        treescrn4.addch(3, 9, ord(' '))
        treescrn4.addch(4, 16, ord(' '))
        treescrn4.addch(7, 6, ord(' '))
        treescrn4.addch(8, 19, ord(' '))
        treescrn4.addch(11, 2, ord(' '))
        treescrn4.addch(12, 23, ord(' '))

        # star
        treescrn4.standout()
        treescrn4.addch(0, 12, ord('*'))
        treescrn4.standend()

        # strng1
        treescrn4.addch(3, 13, ord(' '))

        # strng2

        # strng3
        treescrn4.addch(7, 15, ord(' '))
        treescrn4.addch(8, 11, ord(' '))

        # strng4
        treescrn4.addch(9, 16, ord(' '))
        treescrn4.addch(10, 12, ord(' '))
        treescrn4.addch(11, 8, ord(' '))

        # strng5
        treescrn4.addch(11, 18, ord(' '))
        treescrn4.addch(12, 14, ord(' '))

        # treescrn5
        treescrn.overlay(treescrn5)

        # balls
        treescrn5.addch(3, 15, ord(' '))
        treescrn5.addch(10, 20, ord(' '))
        treescrn5.addch(12, 1, ord(' '))

        # star
        treescrn5.addch(0, 12, ord(' '))

        # strng1
        treescrn5.addch(3, 11, ord(' '))

        # strng2
        treescrn5.addch(5, 12, ord(' '))

        # strng3
        treescrn5.addch(7, 14, ord(' '))
        treescrn5.addch(8, 10, ord(' '))

        # strng4
        treescrn5.addch(9, 15, ord(' '))
        treescrn5.addch(10, 11, ord(' '))
        treescrn5.addch(11, 7, ord(' '))

        # strng5
        treescrn5.addch(11, 17, ord(' '))
        treescrn5.addch(12, 13, ord(' '))

        # treescrn6
        treescrn.overlay(treescrn6)

        # balls
        treescrn6.addch(6, 7, ord(' '))
        treescrn6.addch(7, 18, ord(' '))
        treescrn6.addch(10, 4, ord(' '))
        treescrn6.addch(11, 23, ord(' '))

        # star
        treescrn6.standout()
        treescrn6.addch(0, 12, ord('*'))
        treescrn6.standend()

        # strng1

        # strng2
        treescrn6.addch(5, 11, ord(' '))

        # strng3
        treescrn6.addch(7, 13, ord(' '))
        treescrn6.addch(8, 9, ord(' '))

        # strng4
        treescrn6.addch(9, 14, ord(' '))
        treescrn6.addch(10, 10, ord(' '))
        treescrn6.addch(11, 6, ord(' '))

        # strng5
        treescrn6.addch(11, 16, ord(' '))
        treescrn6.addch(12, 12, ord(' '))

        #  treescrn7

        treescrn.overlay(treescrn7)

        # balls
        treescrn7.addch(3, 15, ord(' '))
        treescrn7.addch(6, 7, ord(' '))
        treescrn7.addch(7, 18, ord(' '))
        treescrn7.addch(10, 4, ord(' '))
        treescrn7.addch(11, 22, ord(' '))

        # star
        treescrn7.addch(0, 12, ord('*'))

        # strng1
        treescrn7.addch(3, 12, ord(' '))

        # strng2
        treescrn7.addch(5, 13, ord(' '))
        treescrn7.addch(6, 9, ord(' '))

        # strng3
        treescrn7.addch(7, 15, ord(' '))
        treescrn7.addch(8, 11, ord(' '))

        # strng4
        treescrn7.addch(9, 16, ord(' '))
        treescrn7.addch(10, 12, ord(' '))
        treescrn7.addch(11, 8, ord(' '))

        # strng5
        treescrn7.addch(11, 18, ord(' '))
        treescrn7.addch(12, 14, ord(' '))

        look_out(150)
        reindeer()

        w_holiday.touchwin()
        w_holiday.refresh()
        w_del_msg.refresh()

        look_out(500)
        for i in range(0, 20):
            blinkit()

curses.wrapper(main)
PKb1�Z�`gj�M�Mcurses/xmas.pyonu�[����
��^c@s�ddlZddlZdZd�Zd�Zd�Zd�Zd�Zd�Zd	�Z	d
�Z
d�Zd�Zd
�Z
d�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zeje�dS(i����Ns Thomas Gellekum <tg@FreeBSD.org>cCsVtj�rR|d}tj||t�|jtj�|jtj|��ndS(Ni(tcursest
has_colorst	init_pairtmy_bgtattrofftA_COLORtattront
color_pair(twintcolortn((s(/usr/lib64/python2.7/Demo/curses/xmas.pyt	set_colors

cCs)tj�r%|jtjd��ndS(Ni(RRtattrsetR(R((s(/usr/lib64/python2.7/Demo/curses/xmas.pytunset_color&scCs=tj|�tj�dkr9tj�tjd�ndS(Ni����i(Rtnapmststdscrtgetchtbeeptsystexit(tmsecs((s(/usr/lib64/python2.7/Demo/curses/xmas.pytlook_out*s

cCs�x0tdd�D]}tj|dtd��qWx0tdd�D]}tjd|td��qCWx0tdd�D]}tjd	|td��qvWdS(
Niiit|iiPit_i(trangeRtaddchtord(tytx((s(/usr/lib64/python2.7/Demo/curses/xmas.pytboxit0scCs�tjddtd��tjddtd��tjddtd��tjddtd��tjd	dtd
��tjddtd��tjd
dtd��tjddtd��dS(NiitSitEitAi
itOitNit'i(RRR(((s(/usr/lib64/python2.7/Demo/curses/xmas.pytseas<scCs�tjddtd��tjddtd��tjddtd��tjddtd��tjddtd	��tjd
dtd��tjddtd
��tjddtd��tjddtd��dS(NiitGtRiRi	itTi
tIiR"iiR(RRR(((s(/usr/lib64/python2.7/Demo/curses/xmas.pytgreetHscCstjddt�dS(Nii
(RtaddstrtFROMWHO(((s(/usr/lib64/python2.7/Demo/curses/xmas.pytfromwhoUscCs'tttj�tjddtd��tjddtd��tjddtd��tjddtd��tjd	dtd��tjd
dtd��tjddtd��tjdd
td��tjdd
td��tjdd	td��tjddtd��tjd
dtd��tjddtd��tjddtd��tjddtd��tjddtd��tjd	dtd��tjd
dtd��tjddtd��tjddtd��tjddtd��tjddtd��tjddtd��tjd
dtd��tjddtd��tjddtd��tjddtd��tjddtd��tjddd�tjddd�tjddd�tt�tj�t	j�dS(Niit/iii
ii	iiiiii
s\iiiiiiiiRis//////////// \\\\\\\\\\\\s| |s|_|(
RttreescrnRtCOLOR_GREENRRR*R
trefresht	w_del_msg(((s(/usr/lib64/python2.7/Demo/curses/xmas.pyttreeYsH


cCs�tjt�tttj�tjddtd��tjddtd��tjddtd��tjddtd��tjdd	td��tjdd
td��tjd	dtd��tjd	dtd��tjddtd��tjdd
td��tjddtd��tjddtd��tjddtd��tjddtd��tjddtd��tjddtd��tt�tj	�t
j	�dS(Nii	t@iiiiiiiiiii
iiiiiii(R.toverlayt	treescrn2RRt
COLOR_BLUERRR
R0R1(((s(/usr/lib64/python2.7/Demo/curses/xmas.pytballs�s,



cCsltjtjtjB�tttj�tjddtd��tj	�t
t�tj�tj�dS(Niit*(
R5RRtA_BOLDtA_BLINKRtCOLOR_YELLOWRRtstandendR
R0R1(((s(/usr/lib64/python2.7/Demo/curses/xmas.pytstar�s



cCs�tjtjtjB�tttj�tjddtd��tjddtd��tjddtd��tj	tjtjB�t
t�tj�tj�dS(Nii
s'it:it.(
R5RRR9R:RtCOLOR_WHITERRRR
R0R1(((s(/usr/lib64/python2.7/Demo/curses/xmas.pytstrng1�s


cCs�tjtjtjB�tttj�tjddtd��tjddtd��tjddtd��tjddtd	��tjd
dtd��tjd
dtd��tj	tjtjB�t
t�tj�tj�dS(
Niis'i
R>iR?it,ii
i	(
R5RRR9R:RR@RRRR
R0R1(((s(/usr/lib64/python2.7/Demo/curses/xmas.pytstrng2�s


cCs(tjtjtjB�tttj�tjddtd��tjddtd��tjddtd��tjddtd	��tjd
dtd��tjd
dtd��tjd
d
td��tjd
dtd	��tj	tjtjB�t
t�tj�tj�dS(Niis'iR>iR?i
RBiiii
i	(
R5RRR9R:RR@RRRR
R0R1(((s(/usr/lib64/python2.7/Demo/curses/xmas.pytstrng3�s


cCs�tjtjtjB�tttj�tjddtd��tjddtd��tjddtd��tjddtd	��tjd
dtd��tjd
dtd��tjd
d
td��tjd
d
td	��tjd
dtd��tjd
dtd��tjd
dtd��tjd
dtd	��tjddtd��tj	tjtjB�t
t�tj�tj�dS(Ni	is'iR>iR?iRBi
i
iiiiii(
R5RRR9R:RR@RRRR
R0R1(((s(/usr/lib64/python2.7/Demo/curses/xmas.pytstrng4�s(


cCs5tjtjtjB�tttj�tjddtd��tjddtd��tjddtd��tjddtd	��tjd
dtd��tjd
dtd��tjd
d
td��tjd
d
td	��tj	tjtjB�t
t�tjt�tj
�tj
�dS(Niis'iR>iR?iRBiiii
(R5RRR9R:RR@RRRR
R4R.R0R1(((s(/usr/lib64/python2.7/Demo/curses/xmas.pytstrng5�s 



cCsEtj�xtd�D]}|dkrNtjt�tj�tj�Pn�|dkrtjt�tj�tj�Pn�|dkr�tjt�tj�tj�Pnb|dkr�t	jt�tj�tj�Pn1|dkrt
jt�tj�tj�Pntj�qWtjt�tj�tj�dS(Niiiiii(t	treescrn8ttouchwinRt	treescrn3R4R0R1t	treescrn4t	treescrn5t	treescrn6t	treescrn7R.(tcycle((s(/usr/lib64/python2.7/Demo/curses/xmas.pytblinkits@


















cCs2|j||�|j�tj�td�dS(Ni(tmvwinR0R1R(RRR((s(/usr/lib64/python2.7/Demo/curses/xmas.pyt	deer_step7s

cCskd}x�tddd�D]�}|dkr4d}nxltdd�D][}tj||td��tj�tj�tj�tj�tj�td	�qDWqWd
}x�t|dd	d�D]�}x�tdd�D]�}|dkr[d}ytj||td
��Wnt	j
k
r%nXtj�tj�tj�tj�tj�q�tj||td
��tj�tj�tj�tj�tj�q�Wq�Wd}x�td
d�D]�}tj�tj�tj�x�tdd�D]~}t
t||�t
t||�t
t||�t
t||�t
t||�tj�tj�tj�|d
8}q�Wq�Wd}x�tdd�D]�}tj�tj�tj�x�td
�D]~}t
t||�t
t||�t
t||�t
t||�t
t||�tj�tj�tj�|d8}q�Wq�Wtd�d}x�tdd�D]�}t
t||�t
t||�t
t||�t
t||�t
t||�t
t||�t
t||�t
t||�qkW|d8}x�tdd�D]v}t
t||�t
t||�t
t||�t
t||�t
t||�t
t||�t
t||�qWt
t||�x�t|d�D]�}x�tdd
�D]v}t
t||�t
t||�t
t||�t
t||�t
t||�t
t||�t
t||�q�Wt
t||�q�W|d8}t
t||�dS(NiiFi>i����iBiiR?i2ii8iR8i:ii#i
i,iii(Rtdotdeer0RRR0R1teraseRt	stardeer0Rterrortlildeer0RHRQtlildeer3tlildeer2tlildeer1tmiddeer0tmiddeer3tmiddeer2tmiddeer1tbigdeer4tbigdeer3tbigdeer2tbigdeer1tbigdeer0t	lookdeer4t	lookdeer3t	lookdeer2t	lookdeer1t	lookdeer0(ty_postx_postlooper((s(/usr/lib64/python2.7/Demo/curses/xmas.pytreindeer=s�	




























cCs=|atjatjdddd�atjdddd�atjdddd�atjdddd�atjdddd�a	tjdddd�a
tjdddd�atjdddd�atjdddd�a
tjdd	dd�atjd
ddd�atjdddd�atjdddd�atjdddd�atjdd
dd�atjdd
dd�atjdd
dd�atjdd
dd�atjdddd�atjdddd�atjdddd�atjdddd�atjdddd�atjdddd�atjdddd�atjdddd�atjdddd�atjdddd�a tjdddd�a!tjdddd�a"yt"j#ddd�Wntj$k
rnXyt!j#ddd�Wntj$k
r:nXtj%ddt&d��tj%ddt&d��tj%ddt&d��tj%ddt&d��ytj%ddt&d��Wntj$k
r�nXtj%ddt&d��tj%ddt&d��tj%ddt&d��tj%ddt&d��ytj%ddt&d��Wntj$k
rjnXtj%ddt&d��tj%ddt&d��tj%ddt&d��tj%ddt&d��ytj%ddt&d��Wntj$k
rnXtj%ddt&d��tj%ddt&d��tj%ddt&d��tj%ddt&d��tj%ddt&d��tj%dd t&d!��tj%dd"t&d��tj%ddt&d#��tj%dd t&d$��tj%ddt&d��tj%ddt&d��tj%ddt&d��tj%ddt&d��tj%ddt&d��tj%dd t&d!��tj%dd"t&d��tj%ddt&d��tj%dd t&d��tj%ddt&d��tj%ddt&d��tj%ddt&d��tj%ddt&d��tj%ddt&d��tj%dd t&d!��tj%dd"t&d��tj%ddt&d$��tj%dd t&d#��tj%dd%t&d#��tj%dd&t&d$��tj%dd't&d#��tj%ddt&d$��tj%dd&t&d#��tj%ddt&d$��tj%dd't&d��tj%ddt&d(��tj%dd&t&d$��tj%dd't&d)��tj%ddt&d��tj%dd*t&d#��tj%dd%t&d$��tj%dd&t&d$��tj%dd't&d#��tj%dd+t&d#��tj#d d
d,�tj#d"d
d-�tj#d
dd.�tj#dd/d0�tj#d/d1d2�tj%dd%t&d#��tj%dd&t&d$��tj%dd't&d#��tj%ddt&d$��tj%dd&t&d#��tj%ddt&d$��tj%dd't&d��tj%ddt&d(��tj%dd&t&d$��tj%dd't&d)��tj%ddt&d��tj%dd*t&d#��tj%dd%t&d$��tj%dd&t&d$��tj%dd't&d#��tj%dd+t&d#��tj#d d
d,�tj#d"d
d3�tj#d
d
d4�tj#ddd5�tj#d/d/d6�tj%dd%t&d#��tj%dd&t&d$��tj%dd't&d#��tj%ddt&d$��tj%dd&t&d#��tj%ddt&d$��tj%dd't&d��tj%ddt&d(��tj%dd&t&d$��tj%dd't&d)��tj%ddt&d��tj%dd*t&d#��tj%dd%t&d$��tj%dd&t&d$��tj%dd't&d#��tj%dd+t&d#��tj#d d
d,�tj#d"d"d7�tj#d
d"d8�tj#dd d9�tj#d/d d:�tj%dd%t&d#��tj%dd&t&d$��tj%dd't&d#��tj%ddt&d$��tj%dd&t&d#��tj%ddt&d$��tj%dd't&d��tj%ddt&d(��tj%dd&t&d$��tj%dd't&d)��tj%ddt&d��tj%dd*t&d#��tj%dd%t&d$��tj%dd&t&d$��tj%dd't&d#��tj%dd+t&d#��tj#d d
d,�tj#d"d"d;�tj#d
d d<�tj#ddd=�tj#ddd>�tj#dd%d?�tj#dd'd@�tj#dd%dA�tj#dd%dB�tj#d d
dC�tj#d"d
d-�tj#d
dd.�tj#dd/d0�tj#d/d1d2�tj#ddd>�tj#dd%d?�tj#dd'd@�tj#dd%dA�tj#dd%dB�tj#d d
dC�tj#d"d
d3�tj#d
d
d4�tj#ddd5�tj#d/d/d6�tj#ddd>�tj#dd%d?�tj#dd'd@�tj#dd%dA�tj#dd%dB�tj#d d
dC�tj#d"d"d7�tj#d
d"d8�tj#dd d9�tj#d/d d:�t j#ddd>�t j#dd%d?�t j#dd'd@�t j#dd%dA�t j#dd%dB�t j#d d
dC�t j#d"d"d;�t j#d
d d<�t j#ddd=�tj'�tj(d�x�tj)�tj*�t"j+�tj+�tj*�tj+�tj*�tj+�tj,�t-dD�t.�tj,�t-dD�t/�tj,�t0�tj,�t-dD�t1�tj,�t-dD�t2�t-dD�t3�t-dD�t4�t-dD�t5�t6�t7�t8�t9�tj:t�tj%dd&t&dE��tj%d
d"t&dE��tj%dd't&dE��tj%d1d+t&dE��tj%ddFt&dG��tj%dd1t&dE��tj%d dHt&dE��tj%d"dt&dE��tj%d
dt&dE��tj%d
dIt&dE��tj%ddHt&dE��tj%ddt&dE��tj%d1dt&dE��tj%d1d&t&dE��tj%dFdHt&dE��tj:t�tj%dd/t&dE��tj%ddt&dE��tj%d
d"t&dE��tj%dd't&dE��tj%d1dt&dE��tj%dFdt&dE��tj;�tj%ddFt&dG��tj<�tj%ddHt&dE��tj%d
dt&dE��tj%dd1t&dE��tj%d/dt&dE��tj%ddFt&dE��tj%d1dt&dE��tj%d1d&t&dE��tj%dFdIt&dE��tj:t	�t	j%ddt&dE��t	j%ddt&dE��t	j%dFdt&dE��t	j%ddFt&dE��t	j%dd1t&dE��t	j%d dFt&dE��t	j%d
dIt&dE��t	j%ddt&dE��t	j%d/dt&dE��t	j%dd1t&dE��t	j%d1d
t&dE��t	j%d1d%t&dE��t	j%dFdHt&dE��tj:t
�t
j%d"d
t&dE��t
j%d
d&t&dE��t
j%ddt&dE��t
j%d1dt&dE��t
j;�t
j%ddFt&dG��t
j<�t
j%d d1t&dE��t
j%d
dHt&dE��t
j%dd/t&dE��t
j%d/dIt&dE��t
j%ddt&dE��t
j%d1d"t&dE��t
j%d1dt&dE��t
j%dFdFt&dE��tj:t�tj%ddt&dE��tj%d"d
t&dE��tj%d
d&t&dE��tj%ddt&dE��tj%d1d+t&dE��tj%ddFt&dG��tj%ddFt&dE��tj%d dHt&dE��tj%d"d/t&dE��tj%d
dt&dE��tj%dd1t&dE��tj%d/dt&dE��tj%ddFt&dE��tj%d1dt&dE��tj%d1d&t&dE��tj%dFdIt&dE��t-dD�t=�t!j+�t!j,�t"j,�t-dJ�xt>dd�D]
}t?�q$WqNWdS(KNiiii5iGiiii8iiii*i
iiiii<sHit any key to quitsH A P P Y  H O L I D A Y StVR3t<t>t~RRt0t(t=it)is\R-iiiRt^iis^~~~~~~~~//  ~~Us( \_____( /s( )    /i	s\\   /is\>/>s(( )____( /s( /    |s\/    |s|>   |>s( ()_____( /s/ /       /s
|/          \s/>           \>s( )______( /s
(/          \sv___=             ----^s	\/     \/s\Y/ \Y/s\=/s^\o o/^s//( )s^~~~~~~~~// \O/i�t iR8i
ii�(@RRtCOLOR_BLACKRtnewwinR.R5RIRJRKRLRMRGRRRTRVRYRXRWRZR]R\R[RbRaR`R_R^RgRfReRdRct	w_holidayR1R*RURRtcbreaktnodelaytclearRSRHR0RRR$R)R,R2R7R=RARCRDRERFR4tstandoutR<RkRRO(Rti((s(/usr/lib64/python2.7/Demo/curses/xmas.pytmain�s�	



































(RRR+RR
RRR$R)R,R2R7R=RARCRDRERFRORQRkR~twrapper(((s(/usr/lib64/python2.7/Demo/curses/xmas.pyt<module>s.						
		,								'		z	��PKb1�Z2��O��curses/life.pyonu�[����
Afc@s�ddlZddlZddlZddlZdd	d��YZd�Zd�Zd�Zd�Ze	dkr�ej
e�ndS(
i����Nt	LifeBoardcBsPeZdZed�d�Zd�Zd�Zd�Zed�Z	d�Z
RS(s�Encapsulates a Life board

    Attributes:
    X,Y : horizontal and vertical size of the board
    state : dictionary mapping (x,y) to 0 or 1

    Methods:
    display(update_board) -- If update_board is true, compute the
                             next generation.  Then display the state
                             of the board and refresh the screen.
    erase() -- clear the entire board
    makeRandom() -- fill the board randomly
    set(y,x) -- set the given cell to Live; doesn't refresh the screen
    toggle(y,x) -- change the given cell from live to dead, or vice
                   versa, and refresh the screen display

    t*cCs
i|_||_|jj�\}}|d|dd|_|_||_|jj�d|jdd}|jjdd|�|jj|jdd|�xUtd|j�D]A}|jjd|dd�|jjd||jdd�q�W|jj	�dS(s�Create a new LifeBoard instance.

        scr -- curses screen object to use for display
        char -- character used to render live cells (default: '*')
        iit+t-it|N(
tstatetscrtgetmaxyxtXtYtchartcleartaddstrtrangetrefresh(tselfRR
R	Rtborder_linety((s(/usr/lib64/python2.7/Demo/curses/life.pyt__init__)s			
%cCsc|dks6|j|ks6|dks6|j|krLtd||f�nd|j||f<dS(sSet a cell to the live stateisCoordinates out of range %i,%iiN(RR	t
ValueErrorR(RRtx((s(/usr/lib64/python2.7/Demo/curses/life.pytset?s6cCs�|dks6|j|ks6|dks6|j|krLtd||f�n|jj||f�r�|j||f=|jj|d|dd�n4d|j||f<|jj|d|d|j�|jj�dS(s+Toggle a cell's state between live and deadisCoordinates out of range %i,%iit N(	RR	RRthas_keyRtaddchR
R(RRR((s(/usr/lib64/python2.7/Demo/curses/life.pyttoggleEs6!!cCsi|_|jdt�dS(s3Clear the entire board and update the board displaytupdate_boardN(RtdisplaytFalse(R((s(/usr/lib64/python2.7/Demo/curses/life.pyteraseQs	cCsw|j|j}}|s�x�td|�D]z}xqtd|�D]`}|jj||f�r�|jj|d|d|j�q?|jj|d|dd�q?Wq)W|jj�dSi}d|_	x�td|�D]�}tt
d|d�t||d��}xPtd|�D]?}d}|jj||f�}	xgtt
d|d�t||d��D]<}
x3|D]+}|jj||
f�rq|d7}qqqqWqdW||	8}|dkrd|||f<|jj|d|d|j�|	sUd|_	qUq|dkr%|	r%d|||f<q|	r|jj|d|dd�d|_	qqWq�W||_|jj�dS(s<Display the whole board, optionally computing one generationiiRNii(RR	R
RRRRR
Rtboringtmaxtmin(RRtMtNtitjtdtLtstlivetktl((s(/usr/lib64/python2.7/Demo/curses/life.pyRVsB$&
	)0

!	cCsli|_x\td|j�D]H}x?td|j�D]+}tj�dkr5|j||�q5q5WqWdS(s$Fill the board with a random patternig�?N(RR
RR	trandomR(RR#R$((s(/usr/lib64/python2.7/Demo/curses/life.pyt
makeRandom|s
	(t__name__t
__module__t__doc__tordRRRRtTrueRR,(((s(/usr/lib64/python2.7/Demo/curses/life.pyRs			&cCs<|j|d�|j�|j|dd�|j�dS(s&Clear the space where the menu residesiiN(tmovetclrtoeol(tstdscrtmenu_y((s(/usr/lib64/python2.7/Demo/curses/life.pyt
erase_menu�s
cCs;t||�|j|dd�|j|ddd�dS(s/Display the menu of possible keystroke commandsisAUse the cursor keys to move, and space or Enter to toggle a cell.isBE)rase the board, R)andom fill, S)tep once or C)ontinuously, Q)uitN(R6R(R4R5((s(/usr/lib64/python2.7/Demo/curses/life.pytdisplay_menu�s

c	Cs�|j�|j�\}}|dd}t||�|j|d|dd�}t|dtd��}|jdt�|jd|j	d}}xR|j
d|d|�|j�}d|ko�dknr9t|�}|d	kr|j
||�q�|d
kr�t||�|j|dd�|j�|jd�xd|j�}|d
krfPn|jddd�|j�|j�|jddd�|j�qJW|jd�t||�q�|dkr�|j�q�|dkr�Pq�|dkr|j�|jdt�q�|dkr�|j�q�q�|tjkra|dkra|d8}q�|tjkr�||j	dkr�|d7}q�|tjkr�|dkr�|d8}q�|tjkr�||jdkr�|d7}q�q�WdS(NiiiR
RRiis 
tCcis6 Hit any key to stop continuously updating the screen.i����t/RtEetQqtRrtSs(RRR7tsubwinRR0RRRR	R2tgetchtchrRR6RRtnodelayRR,tcursestKEY_UPtKEY_DOWNtKEY_LEFTt	KEY_RIGHT(	R4tstdscr_ytstdscr_xR5R>tboardtxpostypostc((s(/usr/lib64/python2.7/Demo/curses/life.pytkeyloop�sd











"

"
cCst|�dS(N(RM(R4((s(/usr/lib64/python2.7/Demo/curses/life.pytmain�st__main__((R+tstringt	tracebackRBRR6R7RMRNR-twrapper(((s(/usr/lib64/python2.7/Demo/curses/life.pyt<module>s$n			?	PKb1�Z�`gj�M�Mcurses/xmas.pycnu�[����
��^c@s�ddlZddlZdZd�Zd�Zd�Zd�Zd�Zd�Zd	�Z	d
�Z
d�Zd�Zd
�Z
d�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zeje�dS(i����Ns Thomas Gellekum <tg@FreeBSD.org>cCsVtj�rR|d}tj||t�|jtj�|jtj|��ndS(Ni(tcursest
has_colorst	init_pairtmy_bgtattrofftA_COLORtattront
color_pair(twintcolortn((s(/usr/lib64/python2.7/Demo/curses/xmas.pyt	set_colors

cCs)tj�r%|jtjd��ndS(Ni(RRtattrsetR(R((s(/usr/lib64/python2.7/Demo/curses/xmas.pytunset_color&scCs=tj|�tj�dkr9tj�tjd�ndS(Ni����i(Rtnapmststdscrtgetchtbeeptsystexit(tmsecs((s(/usr/lib64/python2.7/Demo/curses/xmas.pytlook_out*s

cCs�x0tdd�D]}tj|dtd��qWx0tdd�D]}tjd|td��qCWx0tdd�D]}tjd	|td��qvWdS(
Niiit|iiPit_i(trangeRtaddchtord(tytx((s(/usr/lib64/python2.7/Demo/curses/xmas.pytboxit0scCs�tjddtd��tjddtd��tjddtd��tjddtd��tjd	dtd
��tjddtd��tjd
dtd��tjddtd��dS(NiitSitEitAi
itOitNit'i(RRR(((s(/usr/lib64/python2.7/Demo/curses/xmas.pytseas<scCs�tjddtd��tjddtd��tjddtd��tjddtd��tjddtd	��tjd
dtd��tjddtd
��tjddtd��tjddtd��dS(NiitGtRiRi	itTi
tIiR"iiR(RRR(((s(/usr/lib64/python2.7/Demo/curses/xmas.pytgreetHscCstjddt�dS(Nii
(RtaddstrtFROMWHO(((s(/usr/lib64/python2.7/Demo/curses/xmas.pytfromwhoUscCs'tttj�tjddtd��tjddtd��tjddtd��tjddtd��tjd	dtd��tjd
dtd��tjddtd��tjdd
td��tjdd
td��tjdd	td��tjddtd��tjd
dtd��tjddtd��tjddtd��tjddtd��tjddtd��tjd	dtd��tjd
dtd��tjddtd��tjddtd��tjddtd��tjddtd��tjddtd��tjd
dtd��tjddtd��tjddtd��tjddtd��tjddtd��tjddd�tjddd�tjddd�tt�tj�t	j�dS(Niit/iii
ii	iiiiii
s\iiiiiiiiRis//////////// \\\\\\\\\\\\s| |s|_|(
RttreescrnRtCOLOR_GREENRRR*R
trefresht	w_del_msg(((s(/usr/lib64/python2.7/Demo/curses/xmas.pyttreeYsH


cCs�tjt�tttj�tjddtd��tjddtd��tjddtd��tjddtd��tjdd	td��tjdd
td��tjd	dtd��tjd	dtd��tjddtd��tjdd
td��tjddtd��tjddtd��tjddtd��tjddtd��tjddtd��tjddtd��tt�tj	�t
j	�dS(Nii	t@iiiiiiiiiii
iiiiiii(R.toverlayt	treescrn2RRt
COLOR_BLUERRR
R0R1(((s(/usr/lib64/python2.7/Demo/curses/xmas.pytballs�s,



cCsltjtjtjB�tttj�tjddtd��tj	�t
t�tj�tj�dS(Niit*(
R5RRtA_BOLDtA_BLINKRtCOLOR_YELLOWRRtstandendR
R0R1(((s(/usr/lib64/python2.7/Demo/curses/xmas.pytstar�s



cCs�tjtjtjB�tttj�tjddtd��tjddtd��tjddtd��tj	tjtjB�t
t�tj�tj�dS(Nii
s'it:it.(
R5RRR9R:RtCOLOR_WHITERRRR
R0R1(((s(/usr/lib64/python2.7/Demo/curses/xmas.pytstrng1�s


cCs�tjtjtjB�tttj�tjddtd��tjddtd��tjddtd��tjddtd	��tjd
dtd��tjd
dtd��tj	tjtjB�t
t�tj�tj�dS(
Niis'i
R>iR?it,ii
i	(
R5RRR9R:RR@RRRR
R0R1(((s(/usr/lib64/python2.7/Demo/curses/xmas.pytstrng2�s


cCs(tjtjtjB�tttj�tjddtd��tjddtd��tjddtd��tjddtd	��tjd
dtd��tjd
dtd��tjd
d
td��tjd
dtd	��tj	tjtjB�t
t�tj�tj�dS(Niis'iR>iR?i
RBiiii
i	(
R5RRR9R:RR@RRRR
R0R1(((s(/usr/lib64/python2.7/Demo/curses/xmas.pytstrng3�s


cCs�tjtjtjB�tttj�tjddtd��tjddtd��tjddtd��tjddtd	��tjd
dtd��tjd
dtd��tjd
d
td��tjd
d
td	��tjd
dtd��tjd
dtd��tjd
dtd��tjd
dtd	��tjddtd��tj	tjtjB�t
t�tj�tj�dS(Ni	is'iR>iR?iRBi
i
iiiiii(
R5RRR9R:RR@RRRR
R0R1(((s(/usr/lib64/python2.7/Demo/curses/xmas.pytstrng4�s(


cCs5tjtjtjB�tttj�tjddtd��tjddtd��tjddtd��tjddtd	��tjd
dtd��tjd
dtd��tjd
d
td��tjd
d
td	��tj	tjtjB�t
t�tjt�tj
�tj
�dS(Niis'iR>iR?iRBiiii
(R5RRR9R:RR@RRRR
R4R.R0R1(((s(/usr/lib64/python2.7/Demo/curses/xmas.pytstrng5�s 



cCsEtj�xtd�D]}|dkrNtjt�tj�tj�Pn�|dkrtjt�tj�tj�Pn�|dkr�tjt�tj�tj�Pnb|dkr�t	jt�tj�tj�Pn1|dkrt
jt�tj�tj�Pntj�qWtjt�tj�tj�dS(Niiiiii(t	treescrn8ttouchwinRt	treescrn3R4R0R1t	treescrn4t	treescrn5t	treescrn6t	treescrn7R.(tcycle((s(/usr/lib64/python2.7/Demo/curses/xmas.pytblinkits@


















cCs2|j||�|j�tj�td�dS(Ni(tmvwinR0R1R(RRR((s(/usr/lib64/python2.7/Demo/curses/xmas.pyt	deer_step7s

cCskd}x�tddd�D]�}|dkr4d}nxltdd�D][}tj||td��tj�tj�tj�tj�tj�td	�qDWqWd
}x�t|dd	d�D]�}x�tdd�D]�}|dkr[d}ytj||td
��Wnt	j
k
r%nXtj�tj�tj�tj�tj�q�tj||td
��tj�tj�tj�tj�tj�q�Wq�Wd}x�td
d�D]�}tj�tj�tj�x�tdd�D]~}t
t||�t
t||�t
t||�t
t||�t
t||�tj�tj�tj�|d
8}q�Wq�Wd}x�tdd�D]�}tj�tj�tj�x�td
�D]~}t
t||�t
t||�t
t||�t
t||�t
t||�tj�tj�tj�|d8}q�Wq�Wtd�d}x�tdd�D]�}t
t||�t
t||�t
t||�t
t||�t
t||�t
t||�t
t||�t
t||�qkW|d8}x�tdd�D]v}t
t||�t
t||�t
t||�t
t||�t
t||�t
t||�t
t||�qWt
t||�x�t|d�D]�}x�tdd
�D]v}t
t||�t
t||�t
t||�t
t||�t
t||�t
t||�t
t||�q�Wt
t||�q�W|d8}t
t||�dS(NiiFi>i����iBiiR?i2ii8iR8i:ii#i
i,iii(Rtdotdeer0RRR0R1teraseRt	stardeer0Rterrortlildeer0RHRQtlildeer3tlildeer2tlildeer1tmiddeer0tmiddeer3tmiddeer2tmiddeer1tbigdeer4tbigdeer3tbigdeer2tbigdeer1tbigdeer0t	lookdeer4t	lookdeer3t	lookdeer2t	lookdeer1t	lookdeer0(ty_postx_postlooper((s(/usr/lib64/python2.7/Demo/curses/xmas.pytreindeer=s�	




























cCs=|atjatjdddd�atjdddd�atjdddd�atjdddd�atjdddd�a	tjdddd�a
tjdddd�atjdddd�atjdddd�a
tjdd	dd�atjd
ddd�atjdddd�atjdddd�atjdddd�atjdd
dd�atjdd
dd�atjdd
dd�atjdd
dd�atjdddd�atjdddd�atjdddd�atjdddd�atjdddd�atjdddd�atjdddd�atjdddd�atjdddd�atjdddd�a tjdddd�a!tjdddd�a"yt"j#ddd�Wntj$k
rnXyt!j#ddd�Wntj$k
r:nXtj%ddt&d��tj%ddt&d��tj%ddt&d��tj%ddt&d��ytj%ddt&d��Wntj$k
r�nXtj%ddt&d��tj%ddt&d��tj%ddt&d��tj%ddt&d��ytj%ddt&d��Wntj$k
rjnXtj%ddt&d��tj%ddt&d��tj%ddt&d��tj%ddt&d��ytj%ddt&d��Wntj$k
rnXtj%ddt&d��tj%ddt&d��tj%ddt&d��tj%ddt&d��tj%ddt&d��tj%dd t&d!��tj%dd"t&d��tj%ddt&d#��tj%dd t&d$��tj%ddt&d��tj%ddt&d��tj%ddt&d��tj%ddt&d��tj%ddt&d��tj%dd t&d!��tj%dd"t&d��tj%ddt&d��tj%dd t&d��tj%ddt&d��tj%ddt&d��tj%ddt&d��tj%ddt&d��tj%ddt&d��tj%dd t&d!��tj%dd"t&d��tj%ddt&d$��tj%dd t&d#��tj%dd%t&d#��tj%dd&t&d$��tj%dd't&d#��tj%ddt&d$��tj%dd&t&d#��tj%ddt&d$��tj%dd't&d��tj%ddt&d(��tj%dd&t&d$��tj%dd't&d)��tj%ddt&d��tj%dd*t&d#��tj%dd%t&d$��tj%dd&t&d$��tj%dd't&d#��tj%dd+t&d#��tj#d d
d,�tj#d"d
d-�tj#d
dd.�tj#dd/d0�tj#d/d1d2�tj%dd%t&d#��tj%dd&t&d$��tj%dd't&d#��tj%ddt&d$��tj%dd&t&d#��tj%ddt&d$��tj%dd't&d��tj%ddt&d(��tj%dd&t&d$��tj%dd't&d)��tj%ddt&d��tj%dd*t&d#��tj%dd%t&d$��tj%dd&t&d$��tj%dd't&d#��tj%dd+t&d#��tj#d d
d,�tj#d"d
d3�tj#d
d
d4�tj#ddd5�tj#d/d/d6�tj%dd%t&d#��tj%dd&t&d$��tj%dd't&d#��tj%ddt&d$��tj%dd&t&d#��tj%ddt&d$��tj%dd't&d��tj%ddt&d(��tj%dd&t&d$��tj%dd't&d)��tj%ddt&d��tj%dd*t&d#��tj%dd%t&d$��tj%dd&t&d$��tj%dd't&d#��tj%dd+t&d#��tj#d d
d,�tj#d"d"d7�tj#d
d"d8�tj#dd d9�tj#d/d d:�tj%dd%t&d#��tj%dd&t&d$��tj%dd't&d#��tj%ddt&d$��tj%dd&t&d#��tj%ddt&d$��tj%dd't&d��tj%ddt&d(��tj%dd&t&d$��tj%dd't&d)��tj%ddt&d��tj%dd*t&d#��tj%dd%t&d$��tj%dd&t&d$��tj%dd't&d#��tj%dd+t&d#��tj#d d
d,�tj#d"d"d;�tj#d
d d<�tj#ddd=�tj#ddd>�tj#dd%d?�tj#dd'd@�tj#dd%dA�tj#dd%dB�tj#d d
dC�tj#d"d
d-�tj#d
dd.�tj#dd/d0�tj#d/d1d2�tj#ddd>�tj#dd%d?�tj#dd'd@�tj#dd%dA�tj#dd%dB�tj#d d
dC�tj#d"d
d3�tj#d
d
d4�tj#ddd5�tj#d/d/d6�tj#ddd>�tj#dd%d?�tj#dd'd@�tj#dd%dA�tj#dd%dB�tj#d d
dC�tj#d"d"d7�tj#d
d"d8�tj#dd d9�tj#d/d d:�t j#ddd>�t j#dd%d?�t j#dd'd@�t j#dd%dA�t j#dd%dB�t j#d d
dC�t j#d"d"d;�t j#d
d d<�t j#ddd=�tj'�tj(d�x�tj)�tj*�t"j+�tj+�tj*�tj+�tj*�tj+�tj,�t-dD�t.�tj,�t-dD�t/�tj,�t0�tj,�t-dD�t1�tj,�t-dD�t2�t-dD�t3�t-dD�t4�t-dD�t5�t6�t7�t8�t9�tj:t�tj%dd&t&dE��tj%d
d"t&dE��tj%dd't&dE��tj%d1d+t&dE��tj%ddFt&dG��tj%dd1t&dE��tj%d dHt&dE��tj%d"dt&dE��tj%d
dt&dE��tj%d
dIt&dE��tj%ddHt&dE��tj%ddt&dE��tj%d1dt&dE��tj%d1d&t&dE��tj%dFdHt&dE��tj:t�tj%dd/t&dE��tj%ddt&dE��tj%d
d"t&dE��tj%dd't&dE��tj%d1dt&dE��tj%dFdt&dE��tj;�tj%ddFt&dG��tj<�tj%ddHt&dE��tj%d
dt&dE��tj%dd1t&dE��tj%d/dt&dE��tj%ddFt&dE��tj%d1dt&dE��tj%d1d&t&dE��tj%dFdIt&dE��tj:t	�t	j%ddt&dE��t	j%ddt&dE��t	j%dFdt&dE��t	j%ddFt&dE��t	j%dd1t&dE��t	j%d dFt&dE��t	j%d
dIt&dE��t	j%ddt&dE��t	j%d/dt&dE��t	j%dd1t&dE��t	j%d1d
t&dE��t	j%d1d%t&dE��t	j%dFdHt&dE��tj:t
�t
j%d"d
t&dE��t
j%d
d&t&dE��t
j%ddt&dE��t
j%d1dt&dE��t
j;�t
j%ddFt&dG��t
j<�t
j%d d1t&dE��t
j%d
dHt&dE��t
j%dd/t&dE��t
j%d/dIt&dE��t
j%ddt&dE��t
j%d1d"t&dE��t
j%d1dt&dE��t
j%dFdFt&dE��tj:t�tj%ddt&dE��tj%d"d
t&dE��tj%d
d&t&dE��tj%ddt&dE��tj%d1d+t&dE��tj%ddFt&dG��tj%ddFt&dE��tj%d dHt&dE��tj%d"d/t&dE��tj%d
dt&dE��tj%dd1t&dE��tj%d/dt&dE��tj%ddFt&dE��tj%d1dt&dE��tj%d1d&t&dE��tj%dFdIt&dE��t-dD�t=�t!j+�t!j,�t"j,�t-dJ�xt>dd�D]
}t?�q$WqNWdS(KNiiii5iGiiii8iiii*i
iiiii<sHit any key to quitsH A P P Y  H O L I D A Y StVR3t<t>t~RRt0t(t=it)is\R-iiiRt^iis^~~~~~~~~//  ~~Us( \_____( /s( )    /i	s\\   /is\>/>s(( )____( /s( /    |s\/    |s|>   |>s( ()_____( /s/ /       /s
|/          \s/>           \>s( )______( /s
(/          \sv___=             ----^s	\/     \/s\Y/ \Y/s\=/s^\o o/^s//( )s^~~~~~~~~// \O/i�t iR8i
ii�(@RRtCOLOR_BLACKRtnewwinR.R5RIRJRKRLRMRGRRRTRVRYRXRWRZR]R\R[RbRaR`R_R^RgRfReRdRct	w_holidayR1R*RURRtcbreaktnodelaytclearRSRHR0RRR$R)R,R2R7R=RARCRDRERFR4tstandoutR<RkRRO(Rti((s(/usr/lib64/python2.7/Demo/curses/xmas.pytmain�s�	



































(RRR+RR
RRR$R)R,R2R7R=RARCRDRERFRORQRkR~twrapper(((s(/usr/lib64/python2.7/Demo/curses/xmas.pyt<module>s.						
		,								'		z	��PKb1�Z�cQ��curses/ncurses.pyonu�[����
Afc@sxddlZddlmZdd�Zd�Zd�Zd�Zd�Zd�Zd	�Z	d
�Z
eje
�dS(i����N(tpanelcCs|dkrt}n|j�S(N(tNonetstdscrtgetch(twin((s+/usr/lib64/python2.7/Demo/curses/ncurses.pytwGetchars	cCst�dS(N(R(((s+/usr/lib64/python2.7/Demo/curses/ncurses.pytGetcharscCs'tdkrt�n
tjt�dS(Ni(tnap_msecRtcursestnapms(((s+/usr/lib64/python2.7/Demo/curses/ncurses.pytwait_a_whiles
cCs2tjtjdd�tj�tj|�dS(Nii(RtmoveRtLINEStclrtoeoltaddstr(ttext((s+/usr/lib64/python2.7/Demo/curses/ncurses.pytsaywhats
c	Cs�tj||||�}tj|�}tj�r�|tjkrNtj}n	tj}|}tj|||�|j	t
d�tj|��n|j	t
d�tj�|S(Nt (
RtnewwinRt	new_panelt
has_colorst
COLOR_BLUEtCOLOR_WHITEtCOLOR_BLACKt	init_pairtbkgdsettordt
color_pairtA_BOLD(	tcolortrowstcolsttlyttlxRtpantfgtbg((s+/usr/lib64/python2.7/Demo/curses/ncurses.pytmkpanel s	"cCstj�tj�dS(N(Rt
update_panelsRtdoupdate(((s+/usr/lib64/python2.7/Demo/curses/ncurses.pytpflush0s
cCs�|j�}|j�d}|jdd�|jd|�|j�|j�|j�\}}xVtd|d�D]A}x8td|d�D]#}|j||�|j|�q�WqwWdS(Nis-pan%c-i(	twindowtuserptrRRR
tboxtgetmaxyxtrangetaddch(R"Rtnumtmaxytmaxxtytx((s+/usr/lib64/python2.7/Demo/curses/ncurses.pyt
fill_panel4s

cCs6|adaddddddgatj�xTtdtjd�D]<}x3tdtj�D]}tjd	||d
�q^WqEWx�tdd�D]�}t	tj
tjddtjdddd�}|jd
�t	tjtjddtjdtjdtjd
�}|jd�t	tj
tjdtjd
tjdtjd�}|jd�t	tjtjddtjdtjddtjd�}|jd�t	tjtjddtjdtjdtjdd�}|jd�t|�t|�t|�t|�t|�|j�|j�t�td�t�td�|jdd�|j�|j�|j�|j�|j�t�t�td�|j�t�t�td�|j�t�t�td�|jtjddtjd�t�t�td�|j�t�t�td�|jtjddtjd�t�t�td�|j�t�t�td�|j�t�t�td �|j�t�t�td!�|j�t�t�td"�|j�t�t�td#�|j�t�t�td!�|j�t�t�td$�|j�t�t�xDtdd%�D]3}|j�}	|j�}
td&�|	jtjdd�|	jt|�|jtjd%|tjd�|
jtjd%d�|
jt|�t�t�td'�|	jtjd%d�|	jt|�|jtjdd|d
d%�|
jtjdd�|
jt|�t�t�q�Wtd&�|jtjd%|dtjd�t�t�td(�|j�t�t�td#�|j�t�t�td"�|j�t�t�td)�~t�t�td*�|j�t�t�td+�~t�t�td,�~t�t�td-�~t�t�tdkr(Pnd.aq�WdS(/NittesttTESTs(**)s*()*s<-->tLASTis%di
iitp1iitp2i	tp3itp4tp5spress any key to continues(h3 s1 s2 s4 s5;press any key to continuess1; press any key to continuess2; press any key to continuesm2; press any key to continuess3; press any key to continuesm3; press any key to continueisb3; press any key to continuess4; press any key to continuess5; press any key to continuest3; press any key to continuest1; press any key to continuest2; press any key to continuest4; press any key to continueism4; press any key to continuesm5; press any key to continuest5; press any key to continuesd2; press any key to continuesh3; press any key to continuesd1; press any key to continuesd4; press any key to continuesd5; press any key to continueid(RRtmodtrefreshR-RRtCOLSRR%t	COLOR_REDtset_userptrtCOLOR_GREENtCOLOR_YELLOWRt
COLOR_MAGENTAR4thideR(RR
RtshowtbottomttopR)(RR2R3R8R9R:R;R<titmptw4tw5((s+/usr/lib64/python2.7/Demo/curses/ncurses.pytdemo_panelsCsN
!		
	


	



	

	





















"


"
















"
#
&











(RRRRRR
RR%R(R4RLtwrapper(((s+/usr/lib64/python2.7/Demo/curses/ncurses.pyt<module>s							�PKb1�Z��@@curses/tclock.pyonu�[����
Afc@sfddlTddlZddlZdZd�Zd�Zd�Zd�Zd�Zej	e�dS(	i����(t*Ng������@cCs|dkrdSdS(Nii����i((t_x((s*/usr/lib64/python2.7/Demo/curses/tclock.pytsignscCs:ttt|t|���tt|t|���fS(N(tinttroundtASPECTtsintcos(tangletradius((s*/usr/lib64/python2.7/Demo/curses/tclock.pytA2XYscCstj|||�dS(N(tstdscrtaddch(txtytcol((s*/usr/lib64/python2.7/Demo/curses/tclock.pytplotscCsttj�r%tjtj|��n||}||}t|d�}t|d�}	t|�}
t|�}|}|}
||	kr�|	|d}x�tr�t||
|�||kr�dS|dkr�|
|7}
||8}n||
7}||	7}q�Wnr||	d}xatrot||
|�|
|kr5dS|dkrX||
7}||	8}n|
|7}
||7}qWdS(Nii(	tcursest
has_colorsRtattrsett
color_pairtabsRtTrueR(tpairtfrom_xtfrom_ytx2ty2tchtdxtdytaxtaytsxtsyR
Rtd((s*/usr/lib64/python2.7/Demo/curses/tclock.pytdlines>

	


	


cCs$|ad}tj}tjd�tjd�tj�r�tjdtj|�tjdtj|�tjdtj	|�ntj
dd}tjd}t|dt
|t�d�}d|d}|d}d|d}xetdd	�D]T}	|	dd
td}
t|
|�\}}tj||||d|	d�q�Wtjddd
�t|dd�}x�trtjd�tj�}
tj|
�}|d|dd}|dkr�|d8}n|ddtd}t||�\}}|dtd}t||�\}}|ddtd}
t|
|�\}}td||||||td��tjtj�td||||||td��tjtj�tj�r�tjtjd��nt||||td��tj�r&tjtjd��ntjtjddtj|
��tj �|dddkr�|d|kr�|d}tj!�ntj"�}|td�kr�dSt||||td��td||||||td��td||||||td��qvWdS(Ni����iiiiiiiig@g(@s%ds5ASCII Clock by Howard Jones <ha.jones@ic.ac.uk>, 1994ii�gN@t#t.tOtqt (#RRtCOLOR_BLACKtnodelayttimeoutRt	init_pairt	COLOR_REDt
COLOR_MAGENTAtCOLOR_GREENtCOLStLINEStminRRtrangetpiR
taddstrtmaxRtnapmsttimet	localtimeR$tordRt	A_REVERSEtattroffRRtctimetrefreshtbeeptgetch(twintlastbeeptmy_bgtcxtcyRtmradiusthradiustsradiustitsangletsdxtsdyttimttthourstmangletmdxtmdythanglethdxthdy((s*/usr/lib64/python2.7/Demo/curses/tclock.pytmainCsn	


!
'	

''#
$

'(
tmathRR9RRR
RR$RWtwrapper(((s*/usr/lib64/python2.7/Demo/curses/tclock.pyt<module>s
				+	PPKb1�Z�%����curses/repeat.pycnu�[����
Afc@sJdZddlZddlZddlZddlZd�Ze�dS(s�repeat <shell-command>

This simple program repeatedly (at 1-second intervals) executes the
shell command given on the command line and displays the output (or as
much of it as fits on the screen).  It uses curses to paint each new
output on top of the old output, so that if nothing changes, the
screen doesn't change.  This is handy to watch for changes in e.g. a
directory or process listing.

To end, hit Control-C.
i����NcCsVtjds"tGHtjd�ndjtjd�}tj|d�}|j�}|j�}|r�tj	dI|IJtj|�nt
j�}z�x�trB|j
�y|j|�Wnt
jk
r�nX|j�tjd�tj|d�}|j�}|j�}|r�tj	dI|IJtj|�q�q�WWdt
j�XdS(Niit trs
Exit code:(tsystargvt__doc__texittjointostpopentreadtclosetstderrtcursestinitscrtTrueterasetaddstrterrortrefreshttimetsleeptendwin(tcmdtpttexttststw((s*/usr/lib64/python2.7/Demo/curses/repeat.pytmains6
	


(RRRRRR(((s*/usr/lib64/python2.7/Demo/curses/repeat.pyt<module>
s
	PKb1�Z�٪�

curses/tclock.pynuȯ��#! /usr/bin/python2.7
#
# $Id$
#
# From tclock.c, Copyright Howard Jones <ha.jones@ic.ac.uk>, September 1994.

from math import *
import curses, time

ASPECT = 2.2

def sign(_x):
    if _x < 0: return -1
    return 1

def A2XY(angle, radius):
    return (int(round(ASPECT * radius * sin(angle))),
            int(round(radius * cos(angle))))

def plot(x, y, col):
    stdscr.addch(y, x, col)

# draw a diagonal line using Bresenham's algorithm
def dline(pair, from_x, from_y, x2, y2, ch):
    if curses.has_colors():
        stdscr.attrset(curses.color_pair(pair))

    dx = x2 - from_x
    dy = y2 - from_y

    ax = abs(dx * 2)
    ay = abs(dy * 2)

    sx = sign(dx)
    sy = sign(dy)

    x = from_x
    y = from_y

    if ax > ay:
        d = ay - ax // 2

        while True:
            plot(x, y, ch)
            if x == x2:
                return

            if d >= 0:
                y += sy
                d -= ax
            x += sx
            d += ay
    else:
        d = ax - ay // 2

        while True:
            plot(x, y, ch)
            if y == y2:
                return

            if d >= 0:
                x += sx
                d -= ay
            y += sy
            d += ax

def main(win):
    global stdscr
    stdscr = win

    lastbeep = -1
    my_bg = curses.COLOR_BLACK

    stdscr.nodelay(1)
    stdscr.timeout(0)
#    curses.curs_set(0)
    if curses.has_colors():
        curses.init_pair(1, curses.COLOR_RED, my_bg)
        curses.init_pair(2, curses.COLOR_MAGENTA, my_bg)
        curses.init_pair(3, curses.COLOR_GREEN, my_bg)

    cx = (curses.COLS - 1) // 2
    cy = curses.LINES // 2
    ch = min( cy-1, int(cx // ASPECT) - 1)
    mradius = (3 * ch) // 4
    hradius = ch // 2
    sradius = 5 * ch // 6

    for i in range(0, 12):
        sangle = (i + 1) * 2.0 * pi / 12.0
        sdx, sdy = A2XY(sangle, sradius)

        stdscr.addstr(cy - sdy, cx + sdx, "%d" % (i + 1))

    stdscr.addstr(0, 0,
                  "ASCII Clock by Howard Jones <ha.jones@ic.ac.uk>, 1994")

    sradius = max(sradius-4, 8)

    while True:
        curses.napms(1000)

        tim = time.time()
        t = time.localtime(tim)

        hours = t[3] + t[4] / 60.0
        if hours > 12.0:
            hours -= 12.0

        mangle = t[4] * 2 * pi / 60.0
        mdx, mdy = A2XY(mangle, mradius)

        hangle = hours * 2 * pi / 12.0
        hdx, hdy = A2XY(hangle, hradius)

        sangle = t[5] * 2 * pi / 60.0
        sdx, sdy = A2XY(sangle, sradius)

        dline(3, cx, cy, cx + mdx, cy - mdy, ord('#'))

        stdscr.attrset(curses.A_REVERSE)
        dline(2, cx, cy, cx + hdx, cy - hdy, ord('.'))
        stdscr.attroff(curses.A_REVERSE)

        if curses.has_colors():
            stdscr.attrset(curses.color_pair(1))

        plot(cx + sdx, cy - sdy, ord('O'))

        if curses.has_colors():
            stdscr.attrset(curses.color_pair(0))

        stdscr.addstr(curses.LINES - 2, 0, time.ctime(tim))
        stdscr.refresh()
        if (t[5] % 5) == 0 and t[5] != lastbeep:
            lastbeep = t[5]
            curses.beep()

        ch = stdscr.getch()
        if ch == ord('q'):
            return 0

        plot(cx + sdx, cy - sdy, ord(' '))
        dline(0, cx, cy, cx + hdx, cy - hdy, ord(' '))
        dline(0, cx, cy, cx + mdx, cy - mdy, ord(' '))

curses.wrapper(main)
PKb1�Z��@@curses/tclock.pycnu�[����
Afc@sfddlTddlZddlZdZd�Zd�Zd�Zd�Zd�Zej	e�dS(	i����(t*Ng������@cCs|dkrdSdS(Nii����i((t_x((s*/usr/lib64/python2.7/Demo/curses/tclock.pytsignscCs:ttt|t|���tt|t|���fS(N(tinttroundtASPECTtsintcos(tangletradius((s*/usr/lib64/python2.7/Demo/curses/tclock.pytA2XYscCstj|||�dS(N(tstdscrtaddch(txtytcol((s*/usr/lib64/python2.7/Demo/curses/tclock.pytplotscCsttj�r%tjtj|��n||}||}t|d�}t|d�}	t|�}
t|�}|}|}
||	kr�|	|d}x�tr�t||
|�||kr�dS|dkr�|
|7}
||8}n||
7}||	7}q�Wnr||	d}xatrot||
|�|
|kr5dS|dkrX||
7}||	8}n|
|7}
||7}qWdS(Nii(	tcursest
has_colorsRtattrsett
color_pairtabsRtTrueR(tpairtfrom_xtfrom_ytx2ty2tchtdxtdytaxtaytsxtsyR
Rtd((s*/usr/lib64/python2.7/Demo/curses/tclock.pytdlines>

	


	


cCs$|ad}tj}tjd�tjd�tj�r�tjdtj|�tjdtj|�tjdtj	|�ntj
dd}tjd}t|dt
|t�d�}d|d}|d}d|d}xetdd	�D]T}	|	dd
td}
t|
|�\}}tj||||d|	d�q�Wtjddd
�t|dd�}x�trtjd�tj�}
tj|
�}|d|dd}|dkr�|d8}n|ddtd}t||�\}}|dtd}t||�\}}|ddtd}
t|
|�\}}td||||||td��tjtj�td||||||td��tjtj�tj�r�tjtjd��nt||||td��tj�r&tjtjd��ntjtjddtj|
��tj �|dddkr�|d|kr�|d}tj!�ntj"�}|td�kr�dSt||||td��td||||||td��td||||||td��qvWdS(Ni����iiiiiiiig@g(@s%ds5ASCII Clock by Howard Jones <ha.jones@ic.ac.uk>, 1994ii�gN@t#t.tOtqt (#RRtCOLOR_BLACKtnodelayttimeoutRt	init_pairt	COLOR_REDt
COLOR_MAGENTAtCOLOR_GREENtCOLStLINEStminRRtrangetpiR
taddstrtmaxRtnapmsttimet	localtimeR$tordRt	A_REVERSEtattroffRRtctimetrefreshtbeeptgetch(twintlastbeeptmy_bgtcxtcyRtmradiusthradiustsradiustitsangletsdxtsdyttimttthourstmangletmdxtmdythanglethdxthdy((s*/usr/lib64/python2.7/Demo/curses/tclock.pytmainCsn	


!
'	

''#
$

'(
tmathRR9RRR
RR$RWtwrapper(((s*/usr/lib64/python2.7/Demo/curses/tclock.pyt<module>s
				+	PPKb1�Z���c	c	curses/rain.pynuȯ��#! /usr/bin/python2.7
#
# $Id$
#
# somebody should probably check the randrange()s...

import curses
from random import randrange

def next_j(j):
    if j == 0:
        j = 4
    else:
        j -= 1

    if curses.has_colors():
        z = randrange(0, 3)
        color = curses.color_pair(z)
        if z:
            color = color | curses.A_BOLD
        stdscr.attrset(color)

    return j

def main(win):
    # we know that the first argument from curses.wrapper() is stdscr.
    # Initialize it globally for convenience.
    global stdscr
    stdscr = win

    if curses.has_colors():
        bg = curses.COLOR_BLACK
        curses.init_pair(1, curses.COLOR_BLUE, bg)
        curses.init_pair(2, curses.COLOR_CYAN, bg)

    curses.nl()
    curses.noecho()
    # XXX curs_set() always returns ERR
    # curses.curs_set(0)
    stdscr.timeout(0)

    c = curses.COLS - 4
    r = curses.LINES - 4
    xpos = [0] * c
    ypos = [0] * r
    for j in range(4, -1, -1):
        xpos[j] = randrange(0, c) + 2
        ypos[j] = randrange(0, r) + 2

    j = 0
    while True:
        x = randrange(0, c) + 2
        y = randrange(0, r) + 2

        stdscr.addch(y, x, ord('.'))

        stdscr.addch(ypos[j], xpos[j], ord('o'))

        j = next_j(j)
        stdscr.addch(ypos[j], xpos[j], ord('O'))

        j = next_j(j)
        stdscr.addch( ypos[j] - 1, xpos[j],     ord('-'))
        stdscr.addstr(ypos[j],     xpos[j] - 1, "|.|")
        stdscr.addch( ypos[j] + 1, xpos[j],     ord('-'))

        j = next_j(j)
        stdscr.addch( ypos[j] - 2, xpos[j],     ord('-'))
        stdscr.addstr(ypos[j] - 1, xpos[j] - 1, "/ \\")
        stdscr.addstr(ypos[j],     xpos[j] - 2, "| O |")
        stdscr.addstr(ypos[j] + 1, xpos[j] - 1, "\\ /")
        stdscr.addch( ypos[j] + 2, xpos[j],     ord('-'))

        j = next_j(j)
        stdscr.addch( ypos[j] - 2, xpos[j],     ord(' '))
        stdscr.addstr(ypos[j] - 1, xpos[j] - 1, "   ")
        stdscr.addstr(ypos[j],     xpos[j] - 2, "     ")
        stdscr.addstr(ypos[j] + 1, xpos[j] - 1, "   ")
        stdscr.addch( ypos[j] + 2, xpos[j],     ord(' '))

        xpos[j] = x
        ypos[j] = y

        ch = stdscr.getch()
        if ch == ord('q') or ch == ord('Q'):
            return
        elif ch == ord('s'):
            stdscr.nodelay(0)
        elif ch == ord(' '):
            stdscr.nodelay(1)

        curses.napms(50)

curses.wrapper(main)
PKb1�Z�r;5��curses/life.pynuȯ��#! /usr/bin/python2.7
# life.py -- A curses-based version of Conway's Game of Life.
# Contributed by AMK
#
# An empty board will be displayed, and the following commands are available:
#  E : Erase the board
#  R : Fill the board randomly
#  S : Step for a single generation
#  C : Update continuously until a key is struck
#  Q : Quit
#  Cursor keys :  Move the cursor around the board
#  Space or Enter : Toggle the contents of the cursor's position
#
# TODO :
#   Support the mouse
#   Use colour if available
#   Make board updates faster
#

import random, string, traceback
import curses

class LifeBoard:
    """Encapsulates a Life board

    Attributes:
    X,Y : horizontal and vertical size of the board
    state : dictionary mapping (x,y) to 0 or 1

    Methods:
    display(update_board) -- If update_board is true, compute the
                             next generation.  Then display the state
                             of the board and refresh the screen.
    erase() -- clear the entire board
    makeRandom() -- fill the board randomly
    set(y,x) -- set the given cell to Live; doesn't refresh the screen
    toggle(y,x) -- change the given cell from live to dead, or vice
                   versa, and refresh the screen display

    """
    def __init__(self, scr, char=ord('*')):
        """Create a new LifeBoard instance.

        scr -- curses screen object to use for display
        char -- character used to render live cells (default: '*')
        """
        self.state = {}
        self.scr = scr
        Y, X = self.scr.getmaxyx()
        self.X, self.Y = X-2, Y-2-1
        self.char = char
        self.scr.clear()

        # Draw a border around the board
        border_line = '+'+(self.X*'-')+'+'
        self.scr.addstr(0, 0, border_line)
        self.scr.addstr(self.Y+1,0, border_line)
        for y in range(0, self.Y):
            self.scr.addstr(1+y, 0, '|')
            self.scr.addstr(1+y, self.X+1, '|')
        self.scr.refresh()

    def set(self, y, x):
        """Set a cell to the live state"""
        if x<0 or self.X<=x or y<0 or self.Y<=y:
            raise ValueError, "Coordinates out of range %i,%i"% (y,x)
        self.state[x,y] = 1

    def toggle(self, y, x):
        """Toggle a cell's state between live and dead"""
        if x<0 or self.X<=x or y<0 or self.Y<=y:
            raise ValueError, "Coordinates out of range %i,%i"% (y,x)
        if self.state.has_key( (x,y) ):
            del self.state[x,y]
            self.scr.addch(y+1, x+1, ' ')
        else:
            self.state[x,y] = 1
            self.scr.addch(y+1, x+1, self.char)
        self.scr.refresh()

    def erase(self):
        """Clear the entire board and update the board display"""
        self.state = {}
        self.display(update_board=False)

    def display(self, update_board=True):
        """Display the whole board, optionally computing one generation"""
        M,N = self.X, self.Y
        if not update_board:
            for i in range(0, M):
                for j in range(0, N):
                    if self.state.has_key( (i,j) ):
                        self.scr.addch(j+1, i+1, self.char)
                    else:
                        self.scr.addch(j+1, i+1, ' ')
            self.scr.refresh()
            return

        d = {}
        self.boring = 1
        for i in range(0, M):
            L = range( max(0, i-1), min(M, i+2) )
            for j in range(0, N):
                s = 0
                live = self.state.has_key( (i,j) )
                for k in range( max(0, j-1), min(N, j+2) ):
                    for l in L:
                        if self.state.has_key( (l,k) ):
                            s += 1
                s -= live
                if s == 3:
                    # Birth
                    d[i,j] = 1
                    self.scr.addch(j+1, i+1, self.char)
                    if not live: self.boring = 0
                elif s == 2 and live: d[i,j] = 1       # Survival
                elif live:
                    # Death
                    self.scr.addch(j+1, i+1, ' ')
                    self.boring = 0
        self.state = d
        self.scr.refresh()

    def makeRandom(self):
        "Fill the board with a random pattern"
        self.state = {}
        for i in range(0, self.X):
            for j in range(0, self.Y):
                if random.random() > 0.5:
                    self.set(j,i)


def erase_menu(stdscr, menu_y):
    "Clear the space where the menu resides"
    stdscr.move(menu_y, 0)
    stdscr.clrtoeol()
    stdscr.move(menu_y+1, 0)
    stdscr.clrtoeol()

def display_menu(stdscr, menu_y):
    "Display the menu of possible keystroke commands"
    erase_menu(stdscr, menu_y)
    stdscr.addstr(menu_y, 4,
                  'Use the cursor keys to move, and space or Enter to toggle a cell.')
    stdscr.addstr(menu_y+1, 4,
                  'E)rase the board, R)andom fill, S)tep once or C)ontinuously, Q)uit')

def keyloop(stdscr):
    # Clear the screen and display the menu of keys
    stdscr.clear()
    stdscr_y, stdscr_x = stdscr.getmaxyx()
    menu_y = (stdscr_y-3)-1
    display_menu(stdscr, menu_y)

    # Allocate a subwindow for the Life board and create the board object
    subwin = stdscr.subwin(stdscr_y-3, stdscr_x, 0, 0)
    board = LifeBoard(subwin, char=ord('*'))
    board.display(update_board=False)

    # xpos, ypos are the cursor's position
    xpos, ypos = board.X//2, board.Y//2

    # Main loop:
    while (1):
        stdscr.move(1+ypos, 1+xpos)     # Move the cursor
        c = stdscr.getch()                # Get a keystroke
        if 0<c<256:
            c = chr(c)
            if c in ' \n':
                board.toggle(ypos, xpos)
            elif c in 'Cc':
                erase_menu(stdscr, menu_y)
                stdscr.addstr(menu_y, 6, ' Hit any key to stop continuously '
                              'updating the screen.')
                stdscr.refresh()
                # Activate nodelay mode; getch() will return -1
                # if no keystroke is available, instead of waiting.
                stdscr.nodelay(1)
                while (1):
                    c = stdscr.getch()
                    if c != -1:
                        break
                    stdscr.addstr(0,0, '/')
                    stdscr.refresh()
                    board.display()
                    stdscr.addstr(0,0, '+')
                    stdscr.refresh()

                stdscr.nodelay(0)       # Disable nodelay mode
                display_menu(stdscr, menu_y)

            elif c in 'Ee':
                board.erase()
            elif c in 'Qq':
                break
            elif c in 'Rr':
                board.makeRandom()
                board.display(update_board=False)
            elif c in 'Ss':
                board.display()
            else: pass                  # Ignore incorrect keys
        elif c == curses.KEY_UP and ypos>0:            ypos -= 1
        elif c == curses.KEY_DOWN and ypos<board.Y-1:  ypos += 1
        elif c == curses.KEY_LEFT and xpos>0:          xpos -= 1
        elif c == curses.KEY_RIGHT and xpos<board.X-1: xpos += 1
        else:
            # Ignore incorrect keys
            pass


def main(stdscr):
    keyloop(stdscr)                    # Enter the main loop


if __name__ == '__main__':
    curses.wrapper(main)
PKb1�Zϐ���curses/rain.pycnu�[����
Afc@s?ddlZddlmZd�Zd�Zeje�dS(i����N(t	randrangecCss|dkrd}n
|d8}tj�rotdd�}tj|�}|r_|tjB}ntj|�n|S(Niiii(tcursest
has_colorsRt
color_pairtA_BOLDtstdscrtattrset(tjtztcolor((s(/usr/lib64/python2.7/Demo/curses/rain.pytnext_j
s	
c
Cs|atj�rJtj}tjdtj|�tjdtj|�ntj�tj�tj	d�tj
d}tjd}dg|}dg|}xHtddd�D]4}t
d|�d||<t
d|�d||<q�Wd}xtr
t
d|�d}t
d|�d}tj||td��tj||||td��t|�}tj||||td��t|�}tj||d||td	��tj||||dd
�tj||d||td	��t|�}tj||d||td	��tj||d||dd�tj||||dd�tj||d||dd
�tj||d||td	��t|�}tj||d||td��tj||d||dd�tj||||dd�tj||d||dd�tj||d||td��|||<|||<tj�}	|	td�ks�|	td�kr�dS|	td�kr�tjd�n"|	td�kr�tjd�ntjd�q�WdS(Niiiii����t.totOt-s|.|s/ \s| O |s\ /t s   s     tqtQtsi2(RRRtCOLOR_BLACKt	init_pairt
COLOR_BLUEt
COLOR_CYANtnltnoechottimeouttCOLStLINEStrangeRtTruetaddchtordR
taddstrtgetchtnodelaytnapms(
twintbgtctrtxpostyposRtxtytch((s(/usr/lib64/python2.7/Demo/curses/rain.pytmainsb	






	!!%%%##%%##%

$(RtrandomRR
R-twrapper(((s(/usr/lib64/python2.7/Demo/curses/rain.pyt<module>s		EPKb1�Z2��O��curses/life.pycnu�[����
Afc@s�ddlZddlZddlZddlZdd	d��YZd�Zd�Zd�Zd�Ze	dkr�ej
e�ndS(
i����Nt	LifeBoardcBsPeZdZed�d�Zd�Zd�Zd�Zed�Z	d�Z
RS(s�Encapsulates a Life board

    Attributes:
    X,Y : horizontal and vertical size of the board
    state : dictionary mapping (x,y) to 0 or 1

    Methods:
    display(update_board) -- If update_board is true, compute the
                             next generation.  Then display the state
                             of the board and refresh the screen.
    erase() -- clear the entire board
    makeRandom() -- fill the board randomly
    set(y,x) -- set the given cell to Live; doesn't refresh the screen
    toggle(y,x) -- change the given cell from live to dead, or vice
                   versa, and refresh the screen display

    t*cCs
i|_||_|jj�\}}|d|dd|_|_||_|jj�d|jdd}|jjdd|�|jj|jdd|�xUtd|j�D]A}|jjd|dd�|jjd||jdd�q�W|jj	�dS(s�Create a new LifeBoard instance.

        scr -- curses screen object to use for display
        char -- character used to render live cells (default: '*')
        iit+t-it|N(
tstatetscrtgetmaxyxtXtYtchartcleartaddstrtrangetrefresh(tselfRR
R	Rtborder_linety((s(/usr/lib64/python2.7/Demo/curses/life.pyt__init__)s			
%cCsc|dks6|j|ks6|dks6|j|krLtd||f�nd|j||f<dS(sSet a cell to the live stateisCoordinates out of range %i,%iiN(RR	t
ValueErrorR(RRtx((s(/usr/lib64/python2.7/Demo/curses/life.pytset?s6cCs�|dks6|j|ks6|dks6|j|krLtd||f�n|jj||f�r�|j||f=|jj|d|dd�n4d|j||f<|jj|d|d|j�|jj�dS(s+Toggle a cell's state between live and deadisCoordinates out of range %i,%iit N(	RR	RRthas_keyRtaddchR
R(RRR((s(/usr/lib64/python2.7/Demo/curses/life.pyttoggleEs6!!cCsi|_|jdt�dS(s3Clear the entire board and update the board displaytupdate_boardN(RtdisplaytFalse(R((s(/usr/lib64/python2.7/Demo/curses/life.pyteraseQs	cCsw|j|j}}|s�x�td|�D]z}xqtd|�D]`}|jj||f�r�|jj|d|d|j�q?|jj|d|dd�q?Wq)W|jj�dSi}d|_	x�td|�D]�}tt
d|d�t||d��}xPtd|�D]?}d}|jj||f�}	xgtt
d|d�t||d��D]<}
x3|D]+}|jj||
f�rq|d7}qqqqWqdW||	8}|dkrd|||f<|jj|d|d|j�|	sUd|_	qUq|dkr%|	r%d|||f<q|	r|jj|d|dd�d|_	qqWq�W||_|jj�dS(s<Display the whole board, optionally computing one generationiiRNii(RR	R
RRRRR
Rtboringtmaxtmin(RRtMtNtitjtdtLtstlivetktl((s(/usr/lib64/python2.7/Demo/curses/life.pyRVsB$&
	)0

!	cCsli|_x\td|j�D]H}x?td|j�D]+}tj�dkr5|j||�q5q5WqWdS(s$Fill the board with a random patternig�?N(RR
RR	trandomR(RR#R$((s(/usr/lib64/python2.7/Demo/curses/life.pyt
makeRandom|s
	(t__name__t
__module__t__doc__tordRRRRtTrueRR,(((s(/usr/lib64/python2.7/Demo/curses/life.pyRs			&cCs<|j|d�|j�|j|dd�|j�dS(s&Clear the space where the menu residesiiN(tmovetclrtoeol(tstdscrtmenu_y((s(/usr/lib64/python2.7/Demo/curses/life.pyt
erase_menu�s
cCs;t||�|j|dd�|j|ddd�dS(s/Display the menu of possible keystroke commandsisAUse the cursor keys to move, and space or Enter to toggle a cell.isBE)rase the board, R)andom fill, S)tep once or C)ontinuously, Q)uitN(R6R(R4R5((s(/usr/lib64/python2.7/Demo/curses/life.pytdisplay_menu�s

c	Cs�|j�|j�\}}|dd}t||�|j|d|dd�}t|dtd��}|jdt�|jd|j	d}}xR|j
d|d|�|j�}d|ko�dknr9t|�}|d	kr|j
||�q�|d
kr�t||�|j|dd�|j�|jd�xd|j�}|d
krfPn|jddd�|j�|j�|jddd�|j�qJW|jd�t||�q�|dkr�|j�q�|dkr�Pq�|dkr|j�|jdt�q�|dkr�|j�q�q�|tjkra|dkra|d8}q�|tjkr�||j	dkr�|d7}q�|tjkr�|dkr�|d8}q�|tjkr�||jdkr�|d7}q�q�WdS(NiiiR
RRiis 
tCcis6 Hit any key to stop continuously updating the screen.i����t/RtEetQqtRrtSs(RRR7tsubwinRR0RRRR	R2tgetchtchrRR6RRtnodelayRR,tcursestKEY_UPtKEY_DOWNtKEY_LEFTt	KEY_RIGHT(	R4tstdscr_ytstdscr_xR5R>tboardtxpostypostc((s(/usr/lib64/python2.7/Demo/curses/life.pytkeyloop�sd











"

"
cCst|�dS(N(RM(R4((s(/usr/lib64/python2.7/Demo/curses/life.pytmain�st__main__((R+tstringt	tracebackRBRR6R7RMRNR-twrapper(((s(/usr/lib64/python2.7/Demo/curses/life.pyt<module>s$n			?	PKb1�Z�}N�

tkinter/matt/pong-demo-1.pynu�[���from Tkinter import *

import string


class Pong(Frame):
    def createWidgets(self):
        self.QUIT = Button(self, text='QUIT', foreground='red',
                           command=self.quit)
        self.QUIT.pack(side=LEFT, fill=BOTH)

        ## The playing field
        self.draw = Canvas(self, width="5i", height="5i")

        ## The speed control for the ball
        self.speed = Scale(self, orient=HORIZONTAL, label="ball speed",
                           from_=-100, to=100)

        self.speed.pack(side=BOTTOM, fill=X)

        # The ball
        self.ball = self.draw.create_oval("0i", "0i", "0.10i", "0.10i",
                                          fill="red")
        self.x = 0.05
        self.y = 0.05
        self.velocity_x = 0.3
        self.velocity_y = 0.5

        self.draw.pack(side=LEFT)

    def moveBall(self, *args):
        if (self.x > 5.0) or (self.x < 0.0):
            self.velocity_x = -1.0 * self.velocity_x
        if (self.y > 5.0) or (self.y < 0.0):
            self.velocity_y = -1.0 * self.velocity_y

        deltax = (self.velocity_x * self.speed.get() / 100.0)
        deltay = (self.velocity_y * self.speed.get() / 100.0)
        self.x = self.x + deltax
        self.y = self.y + deltay

        self.draw.move(self.ball,  "%ri" % deltax, "%ri" % deltay)
        self.after(10, self.moveBall)

    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()
        self.after(10, self.moveBall)


game = Pong()

game.mainloop()
PKb1�Z��>;��tkinter/matt/packer-simple.pycnu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs&eZd�Zd�Zdd�ZRS(cCs|jdGHdS(Ntcommand(thi_there(tself((s7/usr/lib64/python2.7/Demo/tkinter/matt/packer-simple.pytprintitscCs�t|ddddd|j�|_|jjdtdt�t|ddd|j�|_|jjdt�t|dd	�|_|jj�t|dd
�|_	|j	j�dS(NttexttQUITt
foregroundtredRtsidetfilltHellosbutton 2sbutton 3(
tButtontquitRtpacktLEFTtBOTHRRtguy2tguy3(R((s7/usr/lib64/python2.7/Demo/tkinter/matt/packer-simple.pyt
createWidgetss
cCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR(Rtmaster((s7/usr/lib64/python2.7/Demo/tkinter/matt/packer-simple.pyRs
N(t__name__t
__module__RRtNoneR(((s7/usr/lib64/python2.7/Demo/tkinter/matt/packer-simple.pyRs		N(tTkinterRRttesttmainloop(((s7/usr/lib64/python2.7/Demo/tkinter/matt/packer-simple.pyt<module>s
	PKb1�ZMh�Ω	�	&tkinter/matt/canvas-moving-w-mouse.pycnu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBsAeZd�Zd�Zd�Zd�Zd�Zdd�ZRS(cCs|j|_|j|_dS(N(txtlastxtytlasty(tselftevent((s?/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-w-mouse.pyt	mouseDown	scCsF|jjt|j|j|j|j�|j|_|j|_dS(N(tdrawtmovetCURRENTRRRR(RR((s?/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-w-mouse.pyt	mouseMoves*cCs|jjtdd�dS(Ntfilltred(R	t
itemconfigR(RR((s?/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-w-mouse.pyt
mouseEnterscCs|jjtdd�dS(NR
tblue(R	RR(RR((s?/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-w-mouse.pyt
mouseLeavesc	Cs�t|ddddd|j�|_|jjdtdt�t|dd	d
d	�|_|jjdt�|jjdddddd
dd�}|jj	|d|j
�|jj	|d|j�tj
|jd|j�tj
|jd|j�dS(NttexttQUITt
foregroundRtcommandtsideR
twidtht5itheightiitgreenttagstselecteds<Any-Enter>s<Any-Leave>s<1>s<B1-Motion>(tButtontquitRtpacktLEFTtBOTHtCanvasR	tcreate_ovalttag_bindRRtWidgettbindRR(Rtfred((s?/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-w-mouse.pyt
createWidgets!scCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR)(Rtmaster((s?/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-w-mouse.pyR+1s
N(	t__name__t
__module__RRRRR)tNoneR+(((s?/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-w-mouse.pyRs						N(tTkinterR*Rttesttmainloop(((s?/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-w-mouse.pyt<module>s
1	PKb1�Z~����tkinter/matt/00-HELLO-WORLD.pynu�[���from Tkinter import *

# note that there is no explicit call to start Tk.
# Tkinter is smart enough to start the system if it's not already going.

class Test(Frame):
    def printit(self):
        print "hi"

    def createWidgets(self):
        self.QUIT = Button(self, text='QUIT', foreground='red',
                           command=self.quit)

        self.QUIT.pack(side=LEFT, fill=BOTH)

        # a hello button
        self.hi_there = Button(self, text='Hello',
                               command=self.printit)
        self.hi_there.pack(side=LEFT)

    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()

test = Test()
test.mainloop()
PKb1�Z��)��'tkinter/matt/canvas-reading-tag-info.pynu�[���from Tkinter import *


class Test(Frame):
    def printit(self):
        print "hi"

    def createWidgets(self):
        self.QUIT = Button(self, text='QUIT', foreground='red',
                           command=self.quit)
        self.QUIT.pack(side=BOTTOM, fill=BOTH)

        self.drawing = Canvas(self, width="5i", height="5i")

        # make a shape
        pgon = self.drawing.create_polygon(
            10, 10, 110, 10, 110, 110, 10 , 110,
            fill="red", tags=("weee", "foo", "groo"))

        # this is how you query an object for its attributes
        # config options FOR CANVAS ITEMS always come back in tuples of length 5.
        # 0 attribute name
        # 1 BLANK
        # 2 BLANK
        # 3 default value
        # 4 current value
        # the blank spots are for consistency with the config command that
        # is used for widgets. (remember, this is for ITEMS drawn
        # on a canvas widget, not widgets)
        option_value = self.drawing.itemconfig(pgon, "stipple")
        print "pgon's current stipple value is -->", option_value[4], "<--"
        option_value = self.drawing.itemconfig(pgon,  "fill")
        print "pgon's current fill value is -->", option_value[4], "<--"
        print "  when he is usually colored -->", option_value[3], "<--"

        ## here we print out all the tags associated with this object
        option_value = self.drawing.itemconfig(pgon,  "tags")
        print "pgon's tags are", option_value[4]

        self.drawing.pack(side=LEFT)

    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()

test = Test()

test.mainloop()
PKb1�Z�f� 44+tkinter/matt/window-creation-w-location.pyonu�[����
��^c@sYddlTddlZdefd��YZdefd��YZe�Zej�dS(i����(t*Nt
QuitButtoncBseZd�ZRS(cOs\|jd�sd|d<n|jd�s;|j|d<nttj||f||�dS(NttexttQUITtcommand(thas_keytquittapplytButtont__init__(tselftmastertargstkwargs((sD/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-w-location.pyR	s

(t__name__t
__module__R	(((sD/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-w-location.pyR
stTestcBs&eZd�Zd�Zdd�ZRS(cGsgt�}t|dddd�|_|jjdddd�|jjdddd�|jj�dS(Ntwidtht2itheightt0(tTopleveltCanvastlabeltcreate_linetpack(R
Rtfred((sD/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-w-location.pyt
makeWindows
	c
Csit|�|_|jjdtdt�t|ddddddd	|j�|_|jjdt�dS(
NtsidetfillRsMake a New WindowRi2RiR(RRRtLEFTtBOTHRR(R
((sD/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-w-location.pyt
createWidgetsscCs+tj||�tj|�|j�dS(N(tFrameR	tPacktconfigR (R
R((sD/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-w-location.pyR	's
N(RRRR tNoneR	(((sD/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-w-location.pyRs			(tTkintertsysRRR!Rttesttmainloop(((sD/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-w-location.pyt<module>s

	PKb1�Z�		 tkinter/matt/canvas-gridding.pycnu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs8eZd�Zd�Zd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s9/usr/lib64/python2.7/Demo/tkinter/matt/canvas-gridding.pytprintit	scCs{t|ddddddddd	|j�|_|jjd
tdt�t|dd
dd
�|_|jjd
t�dS(NttexttQUITt
backgroundtredt
foregroundtwhitetheightitcommandtsidetfilltwidtht5i(	tButtontquitRtpacktBOTTOMtBOTHtCanvastcanvasObjecttLEFT(R((s9/usr/lib64/python2.7/Demo/tkinter/matt/canvas-gridding.pyt
createWidgetsscCs@|jj|j|j�|_|jj|j|j�|_dS(N(RtcanvasxtxtgriddingSizetstartxtcanvasytytstarty(Rtevent((s9/usr/lib64/python2.7/Demo/tkinter/matt/canvas-gridding.pyt	mouseDownscCs�|jj|j|j�}|jj|j|j�}|j|jkr�|j|jkr�|jj|j	�|jj
|j|j||�|_	|j�ndS(N(RRRRRRRR tdeletet
rubberbandBoxtcreate_rectangletupdate_idletasks(RR!RR((s9/usr/lib64/python2.7/Demo/tkinter/matt/canvas-gridding.pytmouseMotions$	cCsotj||�tj|�|j�d|_d|_tj	|j
d|j�tj	|j
d|j�dS(Ni2s
<Button-1>s<Button1-Motion>(
tFramet__init__tPacktconfigRtNoneR$RtWidgettbindRR"R'(Rtmaster((s9/usr/lib64/python2.7/Demo/tkinter/matt/canvas-gridding.pyR),s

		N(t__name__t
__module__RRR"R'R,R)(((s9/usr/lib64/python2.7/Demo/tkinter/matt/canvas-gridding.pyRs
				N(tTkinterR(Rttesttmainloop(((s9/usr/lib64/python2.7/Demo/tkinter/matt/canvas-gridding.pyt<module>s
3	PKb1�Zk�����tkinter/matt/dialog-box.pyonu�[����
��^c@sGddlTddlmZdefd��YZe�Zej�dS(i����(t*(tDialogtTestcBs/eZd�Zd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s4/usr/lib64/python2.7/Demo/tkinter/matt/dialog-box.pytprintitsc
Cs1t|ddddddddd	d�}|jS(
s�Create a top-level dialog with some buttons.

        This uses the Dialog class, which is a wrapper around the Tcl/Tk
        tk_dialog script.  The function returns 0 if the user clicks 'yes'
        or 1 if the user clicks 'no'.
        ttitlesfred the dialog boxttextsclick on a choicetbitmaptinfotdefaultitstringstyestno(RR
(Rtnum(Rtd((s4/usr/lib64/python2.7/Demo/tkinter/matt/dialog-box.pyt
makeWindows	cCsrt|ddddd|j�|_|jjdtdt�t|ddd|j�|_|jjdt�dS(	NRtQUITt
foregroundtredtcommandtsidetfillsMake a New Window(tButtontquitRtpacktLEFTtBOTHRthi_there(R((s4/usr/lib64/python2.7/Demo/tkinter/matt/dialog-box.pyt
createWidgets.scCs4tj||�tj|�d|_|j�dS(Ni(tFramet__init__tPacktconfigt	windownumR(Rtmaster((s4/usr/lib64/python2.7/Demo/tkinter/matt/dialog-box.pyR9s
	N(t__name__t
__module__RRRtNoneR(((s4/usr/lib64/python2.7/Demo/tkinter/matt/dialog-box.pyRs		#	N(tTkinterRRRttesttmainloop(((s4/usr/lib64/python2.7/Demo/tkinter/matt/dialog-box.pyt<module>s
8	PKb1�Za>oQ��*tkinter/matt/animation-w-velocity-ctrl.pyonu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs/eZd�Zd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((sC/usr/lib64/python2.7/Demo/tkinter/matt/animation-w-velocity-ctrl.pytprintit
sc	Cs�t|ddddd|j�|_|jjdtdt�t|dd	d
d	�|_t|dt	dd
dd�|_
|j
jdtdt�|jjdddddddd�|jjdt
�dS(NttexttQUITt
foregroundtredtcommandtsidetfilltwidtht5itheighttorienttfrom_i����ttoidii
ttagstthingtblue(tButtontquitRtpacktBOTTOMtBOTHtCanvastdrawtScalet
HORIZONTALtspeedtXtcreate_rectangletLEFT(R((sC/usr/lib64/python2.7/Demo/tkinter/matt/animation-w-velocity-ctrl.pyt
createWidgets
s!%cGsY|jj�}t|�d}d|f}|jjd||�|jd|j�dS(Ng@�@s%riRi
(RtgettfloatRtmovetaftert	moveThing(Rtargstvelocitytstr((sC/usr/lib64/python2.7/Demo/tkinter/matt/animation-w-velocity-ctrl.pyR's

cCs>tj||�tj|�|j�|jd|j�dS(Ni
(tFramet__init__tPacktconfigR"R&R'(Rtmaster((sC/usr/lib64/python2.7/Demo/tkinter/matt/animation-w-velocity-ctrl.pyR,#s

N(t__name__t
__module__RR"R'tNoneR,(((sC/usr/lib64/python2.7/Demo/tkinter/matt/animation-w-velocity-ctrl.pyR	s			N(tTkinterR+Rttesttmainloop(((sC/usr/lib64/python2.7/Demo/tkinter/matt/animation-w-velocity-ctrl.pyt<module>s
!	PKb1�Z�]���)tkinter/matt/animation-w-velocity-ctrl.pynu�[���from Tkinter import *

# this is the same as simple-demo-1.py, but uses
# subclassing.
# note that there is no explicit call to start Tk.
# Tkinter is smart enough to start the system if it's not already going.


class Test(Frame):
    def printit(self):
        print "hi"

    def createWidgets(self):
        self.QUIT = Button(self, text='QUIT', foreground='red',
                           command=self.quit)
        self.QUIT.pack(side=BOTTOM, fill=BOTH)

        self.draw = Canvas(self, width="5i", height="5i")

        self.speed = Scale(self, orient=HORIZONTAL, from_=-100, to=100)

        self.speed.pack(side=BOTTOM, fill=X)

        # all of these work..
        self.draw.create_rectangle(0, 0, 10, 10, tags="thing", fill="blue")
        self.draw.pack(side=LEFT)

    def moveThing(self, *args):
        velocity = self.speed.get()
        str = float(velocity) / 1000.0
        str = "%ri" % (str,)
        self.draw.move("thing",  str, str)
        self.after(10, self.moveThing)

    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()
        self.after(10, self.moveThing)


test = Test()

test.mainloop()
PKb1�Z��Vkk*tkinter/matt/menu-all-types-of-entries.pycnu�[����
��^c@sddlTd�Zd�Zd�Zdad�Zd�Zd�Zd	�Zd
�Z	d�Z
e�Ze
eded
d�Zejde�e�Ze�Ze�Ze	�Ze
�Zejeeeee�ejd�ejd�ej�dS(i����(t*cCs	dGHdS(Nsopening new file((((sC/usr/lib64/python2.7/Demo/tkinter/matt/menu-all-types-of-entries.pytnew_file%scCs	dGHdS(Nsopening OLD file((((sC/usr/lib64/python2.7/Demo/tkinter/matt/menu-all-types-of-entries.pyt	open_file(scCs	dGHdS(Nspicked a menu item((((sC/usr/lib64/python2.7/Demo/tkinter/matt/menu-all-types-of-entries.pytprint_something+sicCstadGtGHdS(Ns
anchovies?(t	anchovies(((sC/usr/lib64/python2.7/Demo/tkinter/matt/menu-all-types-of-entries.pytprint_anchovies2scCs+ttdddd�}|jdtdd�t|�|_|jjdd	�|jjdd
t�|jjdddddt	�|jjdd
dddt
�|jjdddddddt�|jjdd�|jjd�|jjddddddddd|j
�|j|d<|S(NttextsSimple Button Commandst	underlineitsidetpadxt2mtlabeltUndotstatesNew...tcommandsOpen...sDifferent Fonttfonts&-*-helvetica-*-r-*-*-*-180-*-*-*-*-*-*tbitmaptinfot	separatortQuitt
backgroundtredtactivebackgroundtgreentmenu(t
MenubuttontmBartpacktLEFTtMenuRtadd_commandtentryconfigtDISABLEDRRRtaddtquit(tCommand_button((sC/usr/lib64/python2.7/Demo/tkinter/matt/menu-all-types-of-entries.pytmakeCommandMenu7s,	

cCs�ttdddd�}|jdtdd�t|�|_t|j�|j_t|jj�|jj_|jjjjdd	�|jjjjdd
�|jjjjdd�|jjjdd�|jjjdd
�|jjjdd�|jjjdd�|jjjdd�|jjjdd�|jjj	ddd|jjj�|jj	ddd|jj�|j|d<|S(NRsCascading MenusRiRR	R
Rtavacadosbelgian endivet	beefaronit	ChocolatetVanillatTuttiFruititWopBopaLoopBapABopBamBooms
Rocky Roadt	BubbleGums
Weird FlavorsRsmore choices(
RRRRRRtchoicest	weirdonesRtadd_cascade(tCascade_button((sC/usr/lib64/python2.7/Demo/tkinter/matt/menu-all-types-of-entries.pytmakeCascadeMenues*

cCs�ttdddd�}|jdtdd�t|�|_|jjdd	�|jjdd
�|jjdd�|jjddd
t�|jj|jj	d��|j|d<|S(NRsCheckbutton MenusRiRR	R
Rt	PepperonitSausagesExtra CheesetAnchovyRR(
RRRRRRtadd_checkbuttonRtinvoketindex(tCheckbutton_button((sC/usr/lib64/python2.7/Demo/tkinter/matt/menu-all-types-of-entries.pytmakeCheckbuttonMenu�s	
cCsttdddd�}|jdtdd�t|�|_|jjdd	�|jjdd
�|jjdd�|jjdd�|jjdd
�|jjdd�|jjdd�|jjdd�|jjdd�|jjdd�|j|d<|S(NRsRadiobutton MenusRiRR	R
Rt
RepublicantDemocrattLibertariantCommietFacistsLabor PartytTorietIndependentt	Anarchists
No OpinionR(RRRRRRtadd_radiobutton(tRadiobutton_button((sC/usr/lib64/python2.7/Demo/tkinter/matt/menu-all-types-of-entries.pytmakeRadiobuttonMenu�s 	
cCs<ttdddd�}|jdtdd�t|d<|S(	NRs	Dead MenuRiRR	R
R
(RRRRR (tDummy_button((sC/usr/lib64/python2.7/Demo/tkinter/matt/menu-all-types-of-entries.pytmakeDisabledMenu�s
trelieftborderwidthitfills	menu demoN(tTkinterRRRRRR$R0R8RCREtTktroottFrametRAISEDRRtXR#R/R7RBtNoMenut
tk_menuBarttitleticonnametmainloop(((sC/usr/lib64/python2.7/Demo/tkinter/matt/menu-all-types-of-entries.pyt<module>s,
$					.	&	,								

PKb1�Zb*�//&tkinter/matt/window-creation-simple.pynu�[���from Tkinter import *

# this shows how to spawn off new windows at a button press

class Test(Frame):
    def printit(self):
        print "hi"

    def makeWindow(self):
        fred = Toplevel()
        fred.label = Label(fred, text="Here's a new window")
        fred.label.pack()

    def createWidgets(self):
        self.QUIT = Button(self, text='QUIT', foreground='red',
                           command=self.quit)

        self.QUIT.pack(side=LEFT, fill=BOTH)

        # a hello button
        self.hi_there = Button(self, text='Make a New Window',
                               command=self.makeWindow)
        self.hi_there.pack(side=LEFT)

    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()

test = Test()
test.mainloop()
PKb1�Z;U<��*tkinter/matt/subclass-existing-widgets.pyonu�[����
��^c@sJddlTdefd��YZd�Ze�Zee�ej�dS(i����(t*t
New_ButtoncBseZd�ZRS(cCs|jGH|jd|_dS(Ni(tcounter(tself((sC/usr/lib64/python2.7/Demo/tkinter/matt/subclass-existing-widgets.pytcallbacks(t__name__t
__module__R(((sC/usr/lib64/python2.7/Demo/tkinter/matt/subclass-existing-widgets.pyRscCs�t|�}|j�t|ddddd|j�|_|jjdtdt�t|dd�|_|jj	d|jj
�|jjdt�d	|j_dS(
NttexttQUITt
foregroundtredtcommandtsidetfilltHelloi+(tFrametpacktButtontquitRtLEFTtBOTHRthi_theretconfigRR(ttoptf((sC/usr/lib64/python2.7/Demo/tkinter/matt/subclass-existing-widgets.pyt
createWidgetss
$N(tTkinterRRRtTktroottmainloop(((sC/usr/lib64/python2.7/Demo/tkinter/matt/subclass-existing-widgets.pyt<module>s

		
PKb1�Zb�r;	;	'tkinter/matt/canvas-with-scrollbars.pycnu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs/eZd�Zd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s@/usr/lib64/python2.7/Demo/tkinter/matt/canvas-with-scrollbars.pytprintit	sc
Cs�t|dd�|_|jj�t|ddddddd|j�|_|jjd	td
t�t|dd�}|jd	t�t	|dd
dd
dddd�|_
t|dt�|j
_
t|dt�|j
_|j
j
j|j
d<|j
jj|j
d<|j
j|j
j
d<|j
j|j
jd<|j
jddddd
d�|j
jddddd
d�|j
j
jd	td
t�|j
jjd	td
t�|j
jd	t�dS(NttextsCan Find The BLUE Square??????tQUITt
backgroundtredtheightitcommandtsidetfills0.25itwidtht5itwhitetscrollregionit20itorienttxscrollcommandtyscrollcommands3.5itblackt10is13.5itblue(iiRR(tLabeltquestiontpacktButtontquitRtBOTTOMtBOTHtFrametCanvastdrawt	Scrollbart
HORIZONTALtscrollXtVERTICALtscrollYtsettxviewtyviewtcreate_rectangletXtRIGHTtYtLEFT(Rtspacer((s@/usr/lib64/python2.7/Demo/tkinter/matt/canvas-with-scrollbars.pyt
createWidgetss*
cGsdG|GH|jjj�GHdS(Nt	scrolling(R!R$tget(Rtargs((s@/usr/lib64/python2.7/Demo/tkinter/matt/canvas-with-scrollbars.pyt
scrollCanvasX0s	cCs+tj||�tj|�|j�dS(N(Rt__init__tPacktconfigR0(Rtmaster((s@/usr/lib64/python2.7/Demo/tkinter/matt/canvas-with-scrollbars.pyR55s
N(t__name__t
__module__RR0R4tNoneR5(((s@/usr/lib64/python2.7/Demo/tkinter/matt/canvas-with-scrollbars.pyRs		$	N(tTkinterRRttesttmainloop(((s@/usr/lib64/python2.7/Demo/tkinter/matt/canvas-with-scrollbars.pyt<module>s
2	PKb1�Z;mDD(tkinter/matt/canvas-reading-tag-info.pycnu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs&eZd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((sA/usr/lib64/python2.7/Demo/tkinter/matt/canvas-reading-tag-info.pytprintitscCs!t|ddddd|j�|_|jjdtdt�t|dd	d
d	�|_|jjddddddddddd
d�}|jj	|d�}dG|dGdGH|jj	|d�}dG|dGdGHdG|dGdGH|jj	|d
�}dG|dGH|jjdt
�dS(NttexttQUITt
foregroundtredtcommandtsidetfilltwidtht5itheighti
inttagstweeetfootgrootstipples#pgon's current stipple value is -->is<--s pgon's current fill value is -->s   when he is usually colored -->ispgon's tags are(RRR(tButtontquitRtpacktBOTTOMtBOTHtCanvastdrawingtcreate_polygont
itemconfigtLEFT(Rtpgontoption_value((sA/usr/lib64/python2.7/Demo/tkinter/matt/canvas-reading-tag-info.pyt
createWidgetss	
cCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR (Rtmaster((sA/usr/lib64/python2.7/Demo/tkinter/matt/canvas-reading-tag-info.pyR"*s
N(t__name__t
__module__RR tNoneR"(((sA/usr/lib64/python2.7/Demo/tkinter/matt/canvas-reading-tag-info.pyRs		"N(tTkinterR!Rttesttmainloop(((sA/usr/lib64/python2.7/Demo/tkinter/matt/canvas-reading-tag-info.pyt<module>s
+	PKb1�Z�j�HH#tkinter/matt/radiobutton-simple.pyonu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs&eZd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s</usr/lib64/python2.7/Demo/tkinter/matt/radiobutton-simple.pytprintitsc
Csvt�|_|jjd�t|�|_|jj�t|jddd|jdddt�|j_|jjjdt	�t|jddd|jdd	dt�|j_
|jj
jdt	�t|jdd
d|jdddt�|j_|jjjdt	�t|d|j�|_
|j
jdt	�t|dd
ddd|j�|_|jjdtdt�dS(Nt	chocolatettextsChocolate FlavortvariabletvaluetanchortfillsStrawberry Flavort
strawberrysLemon FlavortlemonttextvariabletQUITt
foregroundtredtcommandtside(t	StringVartflavortsettFramet
radioframetpacktRadiobuttontWtchoctXtstrawRtEntrytentrytButtontquitRtBOTTOMtBOTH(R((s</usr/lib64/python2.7/Demo/tkinter/matt/radiobutton-simple.pyt
createWidgetss0
cCs+tj||�tj|�|j�dS(N(Rt__init__tPacktconfigR$(Rtmaster((s</usr/lib64/python2.7/Demo/tkinter/matt/radiobutton-simple.pyR%7s
N(t__name__t
__module__RR$tNoneR%(((s</usr/lib64/python2.7/Demo/tkinter/matt/radiobutton-simple.pyR
s		&N(tTkinterRRttesttmainloop(((s</usr/lib64/python2.7/Demo/tkinter/matt/radiobutton-simple.pyt<module>s
/	PKb1�Z��gtkinter/matt/00-HELLO-WORLD.pycnu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs&eZd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s8/usr/lib64/python2.7/Demo/tkinter/matt/00-HELLO-WORLD.pytprintitscCsrt|ddddd|j�|_|jjdtdt�t|ddd|j�|_|jjdt�dS(	NttexttQUITt
foregroundtredtcommandtsidetfilltHello(tButtontquitRtpacktLEFTtBOTHRthi_there(R((s8/usr/lib64/python2.7/Demo/tkinter/matt/00-HELLO-WORLD.pyt
createWidgets
scCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR(Rtmaster((s8/usr/lib64/python2.7/Demo/tkinter/matt/00-HELLO-WORLD.pyRs
N(t__name__t
__module__RRtNoneR(((s8/usr/lib64/python2.7/Demo/tkinter/matt/00-HELLO-WORLD.pyRs		N(tTkinterRRttesttmainloop(((s8/usr/lib64/python2.7/Demo/tkinter/matt/00-HELLO-WORLD.pyt<module>s
	PKb1�Z���ll+tkinter/matt/packer-and-placer-together.pyonu�[����
��^c@seddlTd�Zd�Zd�Ze�Zee�Zejd�ejdd�ej	�dS(i����(t*cCs#tjjd|jd|j�dS(Ntxty(tapptbuttontplaceRR(tevent((sD/usr/lib64/python2.7/Demo/tkinter/matt/packer-and-placer-together.pyt	do_motionscCs	dGHdS(Nscalling me!((((sD/usr/lib64/python2.7/Demo/tkinter/matt/packer-and-placer-together.pytdothis
scCs�t|dddddd�}|jdtdd�t|d	d
ddd
t�|_|jjdddddt�|jdt	�|S(Ntwidthi�theightt
backgroundtgreentfilltexpandit
foregroundtredttexttamazingtcommandtrelxg�?trelygtanchors<Control-Shift-Motion>(
tFrametpacktBOTHtButtonRRRtNWtbindR(ttoptf((sD/usr/lib64/python2.7/Demo/tkinter/matt/packer-and-placer-together.pyt
createWidgets
s!t400x400i�N(
tTkinterRRRtTktrootRtgeometrytmaxsizetmainloop(((sD/usr/lib64/python2.7/Demo/tkinter/matt/packer-and-placer-together.pyt<module>s
				
PKb1�Z�D66tkinter/matt/placer-simple.pynu�[���from Tkinter import *

# This is a program that tests the placer geom manager

def do_motion(event):
    app.button.place(x=event.x, y=event.y)

def dothis():
    print 'calling me!'

def createWidgets(top):
    # make a frame. Note that the widget is 200 x 200
    # and the window containing is 400x400. We do this
    # simply to show that this is possible. The rest of the
    # area is inaccesssible.
    f = Frame(top, width=200, height=200, background='green')

    # place it so the upper left hand corner of
    # the frame is in the upper left corner of
    # the parent
    f.place(relx=0.0, rely=0.0)

    # now make a button
    f.button = Button(f, foreground='red', text='amazing', command=dothis)

    # and place it so that the nw corner is
    # 1/2 way along the top X edge of its' parent
    f.button.place(relx=0.5, rely=0.0, anchor=NW)

    # allow the user to move the button SUIT-style.
    f.bind('<Control-Shift-Motion>', do_motion)

    return f

root = Tk()
app = createWidgets(root)
root.geometry("400x400")
root.maxsize(1000, 1000)
root.mainloop()
PKb1�Z3��(jj'tkinter/matt/window-creation-simple.pycnu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs/eZd�Zd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s@/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-simple.pytprintitscCs/t�}t|dd�|_|jj�dS(NttextsHere's a new window(tTopleveltLabeltlabeltpack(Rtfred((s@/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-simple.pyt
makeWindow	s	cCsrt|ddddd|j�|_|jjdtdt�t|ddd|j�|_|jjdt�dS(	NRtQUITt
foregroundtredtcommandtsidetfillsMake a New Window(tButtontquitRR	tLEFTtBOTHRthi_there(R((s@/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-simple.pyt
createWidgetsscCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR(Rtmaster((s@/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-simple.pyRs
N(t__name__t
__module__RRRtNoneR(((s@/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-simple.pyRs			N(tTkinterRRttesttmainloop(((s@/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-simple.pyt<module>s
	PKb1�Z���*hh+tkinter/matt/entry-with-shared-variable.pycnu�[����
��^c@sSddlTddlZdefd��YZe�Zejjd�ej�dS(i����(t*NtAppcBs&eZdd�Zd�Zd�ZRS(cCs�tj||�|j�t|�|_|jj�t|ddd|j�|_|jj�t�|_	|j	j
d�|jjd|j	�|jjd|j
�dS(NttextsUppercase The Entrytcommandsthis is a variablettextvariables<Key-Return>(tFramet__init__tpacktEntrytentrythingytButtontuppertbuttont	StringVartcontentstsettconfigtbindtprint_contents(tselftmaster((sD/usr/lib64/python2.7/Demo/tkinter/matt/entry-with-shared-variable.pyRs


cCs,tj|jj��}|jj|�dS(N(tstringRRtgetR(Rtstr((sD/usr/lib64/python2.7/Demo/tkinter/matt/entry-with-shared-variable.pyR scCsdG|jj�GHdS(Ns"hi. contents of entry is now ---->(RR(Rtevent((sD/usr/lib64/python2.7/Demo/tkinter/matt/entry-with-shared-variable.pyR)sN(t__name__t
__module__tNoneRRR(((sD/usr/lib64/python2.7/Demo/tkinter/matt/entry-with-shared-variable.pyRs		tFoo(tTkinterRRRtrootRttitletmainloop(((sD/usr/lib64/python2.7/Demo/tkinter/matt/entry-with-shared-variable.pyt<module>s

&	PKb1�Z�X
���*tkinter/matt/packer-and-placer-together.pynu�[���from Tkinter import *

# This is a program that tests the placer geom manager in conjunction with
# the packer. The background (green) is packed, while the widget inside is placed


def do_motion(event):
    app.button.place(x=event.x, y=event.y)

def dothis():
    print 'calling me!'

def createWidgets(top):
    # make a frame. Note that the widget is 200 x 200
    # and the window containing is 400x400. We do this
    # simply to show that this is possible. The rest of the
    # area is inaccesssible.
    f = Frame(top, width=200, height=200, background='green')

    # note that we use a different manager here.
    # This way, the top level frame widget resizes when the
    # application window does.
    f.pack(fill=BOTH, expand=1)

    # now make a button
    f.button = Button(f, foreground='red', text='amazing', command=dothis)

    # and place it so that the nw corner is
    # 1/2 way along the top X edge of its' parent
    f.button.place(relx=0.5, rely=0.0, anchor=NW)

    # allow the user to move the button SUIT-style.
    f.bind('<Control-Shift-Motion>', do_motion)

    return f

root = Tk()
app = createWidgets(root)
root.geometry("400x400")
root.maxsize(1000, 1000)
root.mainloop()
PKb1�Z���*hh+tkinter/matt/entry-with-shared-variable.pyonu�[����
��^c@sSddlTddlZdefd��YZe�Zejjd�ej�dS(i����(t*NtAppcBs&eZdd�Zd�Zd�ZRS(cCs�tj||�|j�t|�|_|jj�t|ddd|j�|_|jj�t�|_	|j	j
d�|jjd|j	�|jjd|j
�dS(NttextsUppercase The Entrytcommandsthis is a variablettextvariables<Key-Return>(tFramet__init__tpacktEntrytentrythingytButtontuppertbuttont	StringVartcontentstsettconfigtbindtprint_contents(tselftmaster((sD/usr/lib64/python2.7/Demo/tkinter/matt/entry-with-shared-variable.pyRs


cCs,tj|jj��}|jj|�dS(N(tstringRRtgetR(Rtstr((sD/usr/lib64/python2.7/Demo/tkinter/matt/entry-with-shared-variable.pyR scCsdG|jj�GHdS(Ns"hi. contents of entry is now ---->(RR(Rtevent((sD/usr/lib64/python2.7/Demo/tkinter/matt/entry-with-shared-variable.pyR)sN(t__name__t
__module__tNoneRRR(((sD/usr/lib64/python2.7/Demo/tkinter/matt/entry-with-shared-variable.pyRs		tFoo(tTkinterRRRtrootRttitletmainloop(((sD/usr/lib64/python2.7/Demo/tkinter/matt/entry-with-shared-variable.pyt<module>s

&	PKb1�Z��t44tkinter/matt/entry-simple.pyonu�[����
��^c@sSddlTddlZdefd��YZe�Zejjd�ej�dS(i����(t*NtAppcBseZdd�Zd�ZRS(cCsMtj||�|j�t�|_|jj�|jjd|j�dS(Ns<Key-Return>(tFramet__init__tpacktEntrytentrythingytbindtprint_contents(tselftmaster((s6/usr/lib64/python2.7/Demo/tkinter/matt/entry-simple.pyRs


cCsdG|jj�GHdS(Ns"hi. contents of entry is now ---->(Rtget(R	tevent((s6/usr/lib64/python2.7/Demo/tkinter/matt/entry-simple.pyRsN(t__name__t
__module__tNoneRR(((s6/usr/lib64/python2.7/Demo/tkinter/matt/entry-simple.pyRstFoo(tTkintertstringRRtrootR
ttitletmainloop(((s6/usr/lib64/python2.7/Demo/tkinter/matt/entry-simple.pyt<module>s

	PKb1�Z��ZZ��%tkinter/matt/window-creation-more.pycnu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs/eZd�Zd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s>/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-more.pytprintitscCsOt�}t|dd|jd|j�|_|jj�|jd|_dS(NttextsThis is window number %d.tcommandi(tTopleveltButtont	windownumt
makeWindowtlabeltpack(Rtfred((s>/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-more.pyR

s		

cCsrt|ddddd|j�|_|jjdtdt�t|ddd|j�|_|jjdt�dS(	NRtQUITt
foregroundtredRtsidetfillsMake a New Window(RtquitRRtLEFTtBOTHR
thi_there(R((s>/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-more.pyt
createWidgetsscCs4tj||�tj|�d|_|j�dS(Ni(tFramet__init__tPacktconfigR	R(Rtmaster((s>/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-more.pyRs
	N(t__name__t
__module__RR
RtNoneR(((s>/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-more.pyRs			
N(tTkinterRRttesttmainloop(((s>/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-more.pyt<module>s
	PKb1�Z��gtkinter/matt/00-HELLO-WORLD.pyonu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs&eZd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s8/usr/lib64/python2.7/Demo/tkinter/matt/00-HELLO-WORLD.pytprintitscCsrt|ddddd|j�|_|jjdtdt�t|ddd|j�|_|jjdt�dS(	NttexttQUITt
foregroundtredtcommandtsidetfilltHello(tButtontquitRtpacktLEFTtBOTHRthi_there(R((s8/usr/lib64/python2.7/Demo/tkinter/matt/00-HELLO-WORLD.pyt
createWidgets
scCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR(Rtmaster((s8/usr/lib64/python2.7/Demo/tkinter/matt/00-HELLO-WORLD.pyRs
N(t__name__t
__module__RRtNoneR(((s8/usr/lib64/python2.7/Demo/tkinter/matt/00-HELLO-WORLD.pyRs		N(tTkinterRRttesttmainloop(((s8/usr/lib64/python2.7/Demo/tkinter/matt/00-HELLO-WORLD.pyt<module>s
	PKb1�Z�3�--*tkinter/matt/window-creation-w-location.pynu�[���from Tkinter import *

import sys
##sys.path.append("/users/mjc4y/projects/python/tkinter/utils")
##from TkinterUtils  import *

# this shows how to create a new window with a button in it that
# can create new windows

class QuitButton(Button):
    def __init__(self, master, *args, **kwargs):
        if not kwargs.has_key("text"):
            kwargs["text"] = "QUIT"
        if not kwargs.has_key("command"):
            kwargs["command"] = master.quit
        apply(Button.__init__, (self, master) + args, kwargs)

class Test(Frame):
    def makeWindow(self, *args):
        fred = Toplevel()

        fred.label = Canvas (fred, width="2i", height="2i")

        fred.label.create_line("0", "0", "2i", "2i")
        fred.label.create_line("0", "2i", "2i", "0")
        fred.label.pack()

        ##centerWindow(fred, self.master)

    def createWidgets(self):
        self.QUIT = QuitButton(self)
        self.QUIT.pack(side=LEFT, fill=BOTH)

        self.makeWindow = Button(self, text='Make a New Window',
                                 width=50, height=20,
                                 command=self.makeWindow)
        self.makeWindow.pack(side=LEFT)

    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()

test = Test()
test.mainloop()
PKb1�Z�P6��tkinter/matt/slider-demo-1.pynu�[���from Tkinter import *

# shows how to make a slider, set and get its value under program control


class Test(Frame):
    def print_value(self, val):
        print "slider now at", val

    def reset(self):
        self.slider.set(0)

    def createWidgets(self):
        self.slider = Scale(self, from_=0, to=100,
                            orient=HORIZONTAL,
                            length="3i",
                            label="happy slider",
                            command=self.print_value)

        self.reset = Button(self, text='reset slider',
                            command=self.reset)

        self.QUIT = Button(self, text='QUIT', foreground='red',
                           command=self.quit)

        self.slider.pack(side=LEFT)
        self.reset.pack(side=LEFT)
        self.QUIT.pack(side=LEFT, fill=BOTH)

    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()

test = Test()
test.mainloop()
PKb1�Z��Vkk*tkinter/matt/menu-all-types-of-entries.pyonu�[����
��^c@sddlTd�Zd�Zd�Zdad�Zd�Zd�Zd	�Zd
�Z	d�Z
e�Ze
eded
d�Zejde�e�Ze�Ze�Ze	�Ze
�Zejeeeee�ejd�ejd�ej�dS(i����(t*cCs	dGHdS(Nsopening new file((((sC/usr/lib64/python2.7/Demo/tkinter/matt/menu-all-types-of-entries.pytnew_file%scCs	dGHdS(Nsopening OLD file((((sC/usr/lib64/python2.7/Demo/tkinter/matt/menu-all-types-of-entries.pyt	open_file(scCs	dGHdS(Nspicked a menu item((((sC/usr/lib64/python2.7/Demo/tkinter/matt/menu-all-types-of-entries.pytprint_something+sicCstadGtGHdS(Ns
anchovies?(t	anchovies(((sC/usr/lib64/python2.7/Demo/tkinter/matt/menu-all-types-of-entries.pytprint_anchovies2scCs+ttdddd�}|jdtdd�t|�|_|jjdd	�|jjdd
t�|jjdddddt	�|jjdd
dddt
�|jjdddddddt�|jjdd�|jjd�|jjddddddddd|j
�|j|d<|S(NttextsSimple Button Commandst	underlineitsidetpadxt2mtlabeltUndotstatesNew...tcommandsOpen...sDifferent Fonttfonts&-*-helvetica-*-r-*-*-*-180-*-*-*-*-*-*tbitmaptinfot	separatortQuitt
backgroundtredtactivebackgroundtgreentmenu(t
MenubuttontmBartpacktLEFTtMenuRtadd_commandtentryconfigtDISABLEDRRRtaddtquit(tCommand_button((sC/usr/lib64/python2.7/Demo/tkinter/matt/menu-all-types-of-entries.pytmakeCommandMenu7s,	

cCs�ttdddd�}|jdtdd�t|�|_t|j�|j_t|jj�|jj_|jjjjdd	�|jjjjdd
�|jjjjdd�|jjjdd�|jjjdd
�|jjjdd�|jjjdd�|jjjdd�|jjjdd�|jjj	ddd|jjj�|jj	ddd|jj�|j|d<|S(NRsCascading MenusRiRR	R
Rtavacadosbelgian endivet	beefaronit	ChocolatetVanillatTuttiFruititWopBopaLoopBapABopBamBooms
Rocky Roadt	BubbleGums
Weird FlavorsRsmore choices(
RRRRRRtchoicest	weirdonesRtadd_cascade(tCascade_button((sC/usr/lib64/python2.7/Demo/tkinter/matt/menu-all-types-of-entries.pytmakeCascadeMenues*

cCs�ttdddd�}|jdtdd�t|�|_|jjdd	�|jjdd
�|jjdd�|jjddd
t�|jj|jj	d��|j|d<|S(NRsCheckbutton MenusRiRR	R
Rt	PepperonitSausagesExtra CheesetAnchovyRR(
RRRRRRtadd_checkbuttonRtinvoketindex(tCheckbutton_button((sC/usr/lib64/python2.7/Demo/tkinter/matt/menu-all-types-of-entries.pytmakeCheckbuttonMenu�s	
cCsttdddd�}|jdtdd�t|�|_|jjdd	�|jjdd
�|jjdd�|jjdd�|jjdd
�|jjdd�|jjdd�|jjdd�|jjdd�|jjdd�|j|d<|S(NRsRadiobutton MenusRiRR	R
Rt
RepublicantDemocrattLibertariantCommietFacistsLabor PartytTorietIndependentt	Anarchists
No OpinionR(RRRRRRtadd_radiobutton(tRadiobutton_button((sC/usr/lib64/python2.7/Demo/tkinter/matt/menu-all-types-of-entries.pytmakeRadiobuttonMenu�s 	
cCs<ttdddd�}|jdtdd�t|d<|S(	NRs	Dead MenuRiRR	R
R
(RRRRR (tDummy_button((sC/usr/lib64/python2.7/Demo/tkinter/matt/menu-all-types-of-entries.pytmakeDisabledMenu�s
trelieftborderwidthitfills	menu demoN(tTkinterRRRRRR$R0R8RCREtTktroottFrametRAISEDRRtXR#R/R7RBtNoMenut
tk_menuBarttitleticonnametmainloop(((sC/usr/lib64/python2.7/Demo/tkinter/matt/menu-all-types-of-entries.pyt<module>s,
$					.	&	,								

PKb1�Z�w��(tkinter/matt/bind-w-mult-calls-p-type.pynu�[���from Tkinter import *
import string

# This program  shows how to use a simple type-in box

class App(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()

        self.entrythingy = Entry()
        self.entrythingy.pack()

        # and here we get a callback when the user hits return. we could
        # make the key that triggers the callback anything we wanted to.
        # other typical options might be <Key-Tab> or <Key> (for anything)
        self.entrythingy.bind('<Key-Return>', self.print_contents)

        # Note that here is where we bind a completely different callback to
        # the same event. We pass "+" here to indicate that we wish to ADD
        # this callback to the list associated with this event type.
        # Not specifying "+" would simply override whatever callback was
        # defined on this event.
        self.entrythingy.bind('<Key-Return>', self.print_something_else, "+")

    def print_contents(self, event):
        print "hi. contents of entry is now ---->", self.entrythingy.get()


    def print_something_else(self, event):
        print "hi. Now doing something completely different"


root = App()
root.master.title("Foo")
root.mainloop()



# secret tip for experts: if you pass *any* non-false value as
# the third parameter to bind(), Tkinter.py will accumulate
# callbacks instead of overwriting. I use "+" here because that's
# the Tk notation for getting this sort of behavior. The perfect GUI
# interface would use a less obscure notation.
PKb1�Z�Fֳ�tkinter/matt/menu-simple.pynu�[���from Tkinter import *

# some vocabulary to keep from getting confused. This terminology
# is something I cooked up for this file, but follows the man pages
# pretty closely
#
#
#
#       This is a MENUBUTTON
#       V
# +-------------+
# |             |
#
# +------------++------------++------------+
# |            ||            ||            |
# |  File      ||  Edit      || Options    |   <-------- the MENUBAR
# |            ||            ||            |
# +------------++------------++------------+
# | New...         |
# | Open...        |
# | Print          |
# |                |  <------ This is a MENU. The lines of text in the menu are
# |                |                          MENU ENTRIES
# |                +---------------+
# | Open Files >   | file1         |
# |                | file2         |
# |                | another file  | <------ this cascading part is also a MENU
# +----------------|               |
#                  |               |
#                  |               |
#                  |               |
#                  +---------------+



def new_file():
    print "opening new file"


def open_file():
    print "opening OLD file"


def makeFileMenu():
    # make menu button : "File"
    File_button = Menubutton(mBar, text='File', underline=0)
    File_button.pack(side=LEFT, padx="1m")
    File_button.menu = Menu(File_button)

    # add an item. The first param is a menu entry type,
    # must be one of: "cascade", "checkbutton", "command", "radiobutton", "separator"
    # see menu-demo-2.py for examples of use
    File_button.menu.add_command(label='New...', underline=0,
                                 command=new_file)


    File_button.menu.add_command(label='Open...', underline=0,
                                 command=open_file)

    File_button.menu.add_command(label='Quit', underline=0,
                                 command='exit')

    # set up a pointer from the file menubutton back to the file menu
    File_button['menu'] = File_button.menu

    return File_button



def makeEditMenu():
    Edit_button = Menubutton(mBar, text='Edit', underline=0)
    Edit_button.pack(side=LEFT, padx="1m")
    Edit_button.menu = Menu(Edit_button)

    # just to be cute, let's disable the undo option:
    Edit_button.menu.add('command', label="Undo")
    # Since the tear-off bar is the 0th entry,
    # undo is the 1st entry...
    Edit_button.menu.entryconfig(1, state=DISABLED)

    # and these are just for show. No "command" callbacks attached.
    Edit_button.menu.add_command(label="Cut")
    Edit_button.menu.add_command(label="Copy")
    Edit_button.menu.add_command(label="Paste")

    # set up a pointer from the file menubutton back to the file menu
    Edit_button['menu'] = Edit_button.menu

    return Edit_button


#################################################

#### Main starts here ...
root = Tk()


# make a menu bar
mBar = Frame(root, relief=RAISED, borderwidth=2)
mBar.pack(fill=X)

File_button = makeFileMenu()
Edit_button = makeEditMenu()

# finally, install the buttons in the menu bar.
# This allows for scanning from one menubutton to the next.
mBar.tk_menuBar(File_button, Edit_button)

root.title('menu demo')
root.iconname('packer')

root.mainloop()
PKb1�Z�F�77+tkinter/matt/not-what-you-might-think-2.pycnu�[����
��^c@sWddlTdefd��YZe�Zejjd�ejjd�ej�dS(i����(t*tTestcBseZd�Zdd�ZRS(cCs�t|dddddd�|_|jjd�|jjdt�t|jdd	d
dd|j�|j_|jjjdt�dS(
Ntwidtht1itheightt
backgroundtgreenitsidettexttQUITt
foregroundtredtcommand(tFrametGpanelt	propagatetpacktLEFTtButtontquitR	(tself((sD/usr/lib64/python2.7/Demo/tkinter/matt/not-what-you-might-think-2.pyt
createWidgetsscCs+tj||�tj|�|j�dS(N(R
t__init__tPacktconfigR(Rtmaster((sD/usr/lib64/python2.7/Demo/tkinter/matt/not-what-you-might-think-2.pyRs
N(t__name__t
__module__RtNoneR(((sD/usr/lib64/python2.7/Demo/tkinter/matt/not-what-you-might-think-2.pyRs	spacker demotpackerN(tTkinterR
RttestRttitleticonnametmainloop(((sD/usr/lib64/python2.7/Demo/tkinter/matt/not-what-you-might-think-2.pyt<module>s

	PKb1�Z���ll+tkinter/matt/packer-and-placer-together.pycnu�[����
��^c@seddlTd�Zd�Zd�Ze�Zee�Zejd�ejdd�ej	�dS(i����(t*cCs#tjjd|jd|j�dS(Ntxty(tapptbuttontplaceRR(tevent((sD/usr/lib64/python2.7/Demo/tkinter/matt/packer-and-placer-together.pyt	do_motionscCs	dGHdS(Nscalling me!((((sD/usr/lib64/python2.7/Demo/tkinter/matt/packer-and-placer-together.pytdothis
scCs�t|dddddd�}|jdtdd�t|d	d
ddd
t�|_|jjdddddt�|jdt	�|S(Ntwidthi�theightt
backgroundtgreentfilltexpandit
foregroundtredttexttamazingtcommandtrelxg�?trelygtanchors<Control-Shift-Motion>(
tFrametpacktBOTHtButtonRRRtNWtbindR(ttoptf((sD/usr/lib64/python2.7/Demo/tkinter/matt/packer-and-placer-together.pyt
createWidgets
s!t400x400i�N(
tTkinterRRRtTktrootRtgeometrytmaxsizetmainloop(((sD/usr/lib64/python2.7/Demo/tkinter/matt/packer-and-placer-together.pyt<module>s
				
PKb1�Z��>;��tkinter/matt/packer-simple.pyonu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs&eZd�Zd�Zdd�ZRS(cCs|jdGHdS(Ntcommand(thi_there(tself((s7/usr/lib64/python2.7/Demo/tkinter/matt/packer-simple.pytprintitscCs�t|ddddd|j�|_|jjdtdt�t|ddd|j�|_|jjdt�t|dd	�|_|jj�t|dd
�|_	|j	j�dS(NttexttQUITt
foregroundtredRtsidetfilltHellosbutton 2sbutton 3(
tButtontquitRtpacktLEFTtBOTHRRtguy2tguy3(R((s7/usr/lib64/python2.7/Demo/tkinter/matt/packer-simple.pyt
createWidgetss
cCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR(Rtmaster((s7/usr/lib64/python2.7/Demo/tkinter/matt/packer-simple.pyRs
N(t__name__t
__module__RRtNoneR(((s7/usr/lib64/python2.7/Demo/tkinter/matt/packer-simple.pyRs		N(tTkinterRRttesttmainloop(((s7/usr/lib64/python2.7/Demo/tkinter/matt/packer-simple.pyt<module>s
	PKb1�Z�� �yy)tkinter/matt/bind-w-mult-calls-p-type.pyonu�[����
��^c@sSddlTddlZdefd��YZe�Zejjd�ej�dS(i����(t*NtAppcBs&eZdd�Zd�Zd�ZRS(cCsftj||�|j�t�|_|jj�|jjd|j�|jjd|jd�dS(Ns<Key-Return>t+(tFramet__init__tpacktEntrytentrythingytbindtprint_contentstprint_something_else(tselftmaster((sB/usr/lib64/python2.7/Demo/tkinter/matt/bind-w-mult-calls-p-type.pyRs

cCsdG|jj�GHdS(Ns"hi. contents of entry is now ---->(Rtget(Rtevent((sB/usr/lib64/python2.7/Demo/tkinter/matt/bind-w-mult-calls-p-type.pyR	scCs	dGHdS(Ns,hi. Now doing something completely different((RR((sB/usr/lib64/python2.7/Demo/tkinter/matt/bind-w-mult-calls-p-type.pyR
sN(t__name__t
__module__tNoneRR	R
(((sB/usr/lib64/python2.7/Demo/tkinter/matt/bind-w-mult-calls-p-type.pyRs	tFoo(tTkintertstringRRtrootRttitletmainloop(((sB/usr/lib64/python2.7/Demo/tkinter/matt/bind-w-mult-calls-p-type.pyt<module>s

	PKb1�Zʥ�E��*tkinter/matt/not-what-you-might-think-1.pynu�[���from Tkinter import *


class Test(Frame):
    def createWidgets(self):

        self.Gpanel = Frame(self, width='1i', height='1i',
                            background='green')
        self.Gpanel.pack(side=LEFT)

        # a QUIT button
        self.Gpanel.QUIT = Button(self.Gpanel, text='QUIT',
                                  foreground='red',
                                  command=self.quit)
        self.Gpanel.QUIT.pack(side=LEFT)


    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()

test = Test()

test.master.title('packer demo')
test.master.iconname('packer')

test.mainloop()
PKb1�Zv��	
	
'tkinter/matt/rubber-band-box-demo-1.pycnu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBsAeZd�Zd�Zd�Zd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s@/usr/lib64/python2.7/Demo/tkinter/matt/rubber-band-box-demo-1.pytprintitscCs{t|ddddddddd	|j�|_|jjd
tdt�t|dd
dd
�|_|jjd
t�dS(NttexttQUITt
backgroundtredt
foregroundtwhitetheightitcommandtsidetfilltwidtht5i(	tButtontquitRtpacktBOTTOMtBOTHtCanvastcanvasObjecttLEFT(R((s@/usr/lib64/python2.7/Demo/tkinter/matt/rubber-band-box-demo-1.pyt
createWidgetsscCs4|jj|j�|_|jj|j�|_dS(N(Rtcanvasxtxtstartxtcanvasytytstarty(Rtevent((s@/usr/lib64/python2.7/Demo/tkinter/matt/rubber-band-box-demo-1.pyt	mouseDownscCs�|jj|j�}|jj|j�}|j|jkr�|j|jkr�|jj|j�|jj	|j|j||�|_|j
�ndS(N(RRRRRRRtdeletet
rubberbandBoxtcreate_rectangletupdate_idletasks(RR RR((s@/usr/lib64/python2.7/Demo/tkinter/matt/rubber-band-box-demo-1.pytmouseMotions$	cCs|jj|j�dS(N(RR"R#(RR ((s@/usr/lib64/python2.7/Demo/tkinter/matt/rubber-band-box-demo-1.pytmouseUp'scCstj||�tj|�|j�d|_tj|j	d|j
�tj|j	d|j�tj|j	d|j�dS(Ns
<Button-1>s<Button1-Motion>s<Button1-ButtonRelease>(
tFramet__init__tPacktconfigRtNoneR#tWidgettbindRR!R&R'(Rtmaster((s@/usr/lib64/python2.7/Demo/tkinter/matt/rubber-band-box-demo-1.pyR)*s

	N(	t__name__t
__module__RRR!R&R'R,R)(((s@/usr/lib64/python2.7/Demo/tkinter/matt/rubber-band-box-demo-1.pyRs					N(tTkinterR(Rttesttmainloop(((s@/usr/lib64/python2.7/Demo/tkinter/matt/rubber-band-box-demo-1.pyt<module>s
5	PKb1�Z�!��tkinter/matt/READMEnu�[���This directory contains some ad-hoc examples of Tkinter widget
creation. The files named 

		*-simple.py

are the ones to start with if you're looking for a bare-bones usage of
a widget. The other files are meant to show common usage patters that
are a tad more involved. 

If you have a suggestion for an example program, please send mail to 
	
	conway@virginia.edu

and I'll include it.


matt

TODO
-------
The X selection
Dialog Boxes
More canvas examples
Message widgets
Text Editors
Scrollbars
Listboxes



PKb1�Ze��̍�#tkinter/matt/canvas-demo-simple.pyonu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs&eZd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s</usr/lib64/python2.7/Demo/tkinter/matt/canvas-demo-simple.pytprintitscCs�t|ddddd|j�|_|jjdtdt�t|dd	d
d	�|_|jjdddddd
�|jjdt	�dS(NttexttQUITt
foregroundtredtcommandtsidetfilltwidtht5itheightit3itblack(
tButtontquitRtpacktBOTTOMtBOTHtCanvastdrawtcreate_rectangletLEFT(R((s</usr/lib64/python2.7/Demo/tkinter/matt/canvas-demo-simple.pyt
createWidgets	scCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR(Rtmaster((s</usr/lib64/python2.7/Demo/tkinter/matt/canvas-demo-simple.pyRs
N(t__name__t
__module__RRtNoneR(((s</usr/lib64/python2.7/Demo/tkinter/matt/canvas-demo-simple.pyRs		N(tTkinterRRttesttmainloop(((s</usr/lib64/python2.7/Demo/tkinter/matt/canvas-demo-simple.pyt<module>s
	PKb1�Za>oQ��*tkinter/matt/animation-w-velocity-ctrl.pycnu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs/eZd�Zd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((sC/usr/lib64/python2.7/Demo/tkinter/matt/animation-w-velocity-ctrl.pytprintit
sc	Cs�t|ddddd|j�|_|jjdtdt�t|dd	d
d	�|_t|dt	dd
dd�|_
|j
jdtdt�|jjdddddddd�|jjdt
�dS(NttexttQUITt
foregroundtredtcommandtsidetfilltwidtht5itheighttorienttfrom_i����ttoidii
ttagstthingtblue(tButtontquitRtpacktBOTTOMtBOTHtCanvastdrawtScalet
HORIZONTALtspeedtXtcreate_rectangletLEFT(R((sC/usr/lib64/python2.7/Demo/tkinter/matt/animation-w-velocity-ctrl.pyt
createWidgets
s!%cGsY|jj�}t|�d}d|f}|jjd||�|jd|j�dS(Ng@�@s%riRi
(RtgettfloatRtmovetaftert	moveThing(Rtargstvelocitytstr((sC/usr/lib64/python2.7/Demo/tkinter/matt/animation-w-velocity-ctrl.pyR's

cCs>tj||�tj|�|j�|jd|j�dS(Ni
(tFramet__init__tPacktconfigR"R&R'(Rtmaster((sC/usr/lib64/python2.7/Demo/tkinter/matt/animation-w-velocity-ctrl.pyR,#s

N(t__name__t
__module__RR"R'tNoneR,(((sC/usr/lib64/python2.7/Demo/tkinter/matt/animation-w-velocity-ctrl.pyR	s			N(tTkinterR+Rttesttmainloop(((sC/usr/lib64/python2.7/Demo/tkinter/matt/animation-w-velocity-ctrl.pyt<module>s
!	PKb1�Z	����tkinter/matt/slider-demo-1.pyonu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs/eZd�Zd�Zd�Zdd�ZRS(cCs
dG|GHdS(Ns
slider now at((tselftval((s7/usr/lib64/python2.7/Demo/tkinter/matt/slider-demo-1.pytprint_valuescCs|jjd�dS(Ni(tslidertset(R((s7/usr/lib64/python2.7/Demo/tkinter/matt/slider-demo-1.pytreset
scCs�t|dddddtdddd	d
|j�|_t|ddd
|j�|_t|dd
ddd
|j�|_|jjdt	�|jjdt	�|jjdt	dt
�dS(Ntfrom_ittoidtorienttlengtht3itlabelshappy slidertcommandttextsreset slidertQUITt
foregroundtredtsidetfill(tScalet
HORIZONTALRRtButtonRtquitRtpacktLEFTtBOTH(R((s7/usr/lib64/python2.7/Demo/tkinter/matt/slider-demo-1.pyt
createWidgets
scCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR(Rtmaster((s7/usr/lib64/python2.7/Demo/tkinter/matt/slider-demo-1.pyRs
N(t__name__t
__module__RRRtNoneR(((s7/usr/lib64/python2.7/Demo/tkinter/matt/slider-demo-1.pyRs			N(tTkinterRRttesttmainloop(((s7/usr/lib64/python2.7/Demo/tkinter/matt/slider-demo-1.pyt<module>s
	PKb1�ZCa�33tkinter/matt/packer-simple.pynu�[���from Tkinter import *


class Test(Frame):
    def printit(self):
        print self.hi_there["command"]

    def createWidgets(self):
        # a hello button
        self.QUIT = Button(self, text='QUIT', foreground='red',
                           command=self.quit)
        self.QUIT.pack(side=LEFT, fill=BOTH)

        self.hi_there = Button(self, text='Hello',
                               command=self.printit)
        self.hi_there.pack(side=LEFT)

        # note how Packer defaults to side=TOP

        self.guy2 = Button(self, text='button 2')
        self.guy2.pack()

        self.guy3 = Button(self, text='button 3')
        self.guy3.pack()

    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()

test = Test()
test.mainloop()
PKb1�Z`MY��)tkinter/matt/subclass-existing-widgets.pynu�[���from Tkinter import *

# This is a program that makes a simple two button application


class New_Button(Button):
    def callback(self):
        print self.counter
        self.counter = self.counter + 1

def createWidgets(top):
    f = Frame(top)
    f.pack()
    f.QUIT = Button(f, text='QUIT', foreground='red', command=top.quit)

    f.QUIT.pack(side=LEFT, fill=BOTH)

    # a hello button
    f.hi_there = New_Button(f, text='Hello')
    # we do this on a different line because we need to reference f.hi_there
    f.hi_there.config(command=f.hi_there.callback)
    f.hi_there.pack(side=LEFT)
    f.hi_there.counter = 43


root = Tk()
createWidgets(root)
root.mainloop()
PKb1�Z|=4�>>&tkinter/matt/canvas-with-scrollbars.pynu�[���from Tkinter import *

# This example program creates a scrolling canvas, and demonstrates
# how to tie scrollbars and canvases together. The mechanism
# is analogus for listboxes and other widgets with
# "xscroll" and "yscroll" configuration options.

class Test(Frame):
    def printit(self):
        print "hi"

    def createWidgets(self):
        self.question = Label(self, text="Can Find The BLUE Square??????")
        self.question.pack()

        self.QUIT = Button(self, text='QUIT', background='red',
                           height=3, command=self.quit)
        self.QUIT.pack(side=BOTTOM, fill=BOTH)
        spacer = Frame(self, height="0.25i")
        spacer.pack(side=BOTTOM)

        # notice that the scroll region (20" x 20") is larger than
        # displayed size of the widget (5" x 5")
        self.draw = Canvas(self, width="5i", height="5i",
                           background="white",
                           scrollregion=(0, 0, "20i", "20i"))

        self.draw.scrollX = Scrollbar(self, orient=HORIZONTAL)
        self.draw.scrollY = Scrollbar(self, orient=VERTICAL)

        # now tie the three together. This is standard boilerplate text
        self.draw['xscrollcommand'] = self.draw.scrollX.set
        self.draw['yscrollcommand'] = self.draw.scrollY.set
        self.draw.scrollX['command'] = self.draw.xview
        self.draw.scrollY['command'] = self.draw.yview

        # draw something. Note that the first square
        # is visible, but you need to scroll to see the second one.
        self.draw.create_rectangle(0, 0, "3.5i", "3.5i", fill="black")
        self.draw.create_rectangle("10i", "10i", "13.5i", "13.5i", fill="blue")

        # pack 'em up
        self.draw.scrollX.pack(side=BOTTOM, fill=X)
        self.draw.scrollY.pack(side=RIGHT, fill=Y)
        self.draw.pack(side=LEFT)


    def scrollCanvasX(self, *args):
        print "scrolling", args
        print self.draw.scrollX.get()


    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()

test = Test()

test.mainloop()
PKb1�Z���'��tkinter/matt/canvas-gridding.pynu�[���from Tkinter import *

# this is the same as simple-demo-1.py, but uses
# subclassing.
# note that there is no explicit call to start Tk.
# Tkinter is smart enough to start the system if it's not already going.

class Test(Frame):
    def printit(self):
        print "hi"

    def createWidgets(self):
        self.QUIT = Button(self, text='QUIT',
                                  background='red',
                                  foreground='white',
                                  height=3,
                                  command=self.quit)
        self.QUIT.pack(side=BOTTOM, fill=BOTH)

        self.canvasObject = Canvas(self, width="5i", height="5i")
        self.canvasObject.pack(side=LEFT)

    def mouseDown(self, event):
        # canvas x and y take the screen coords from the event and translate
        # them into the coordinate system of the canvas object
        self.startx = self.canvasObject.canvasx(event.x, self.griddingSize)
        self.starty = self.canvasObject.canvasy(event.y, self.griddingSize)

    def mouseMotion(self, event):
        # canvas x and y take the screen coords from the event and translate
        # them into the coordinate system of the canvas object
        x = self.canvasObject.canvasx(event.x, self.griddingSize)
        y = self.canvasObject.canvasy(event.y, self.griddingSize)

        if (self.startx != event.x)  and (self.starty != event.y) :
            self.canvasObject.delete(self.rubberbandBox)
            self.rubberbandBox = self.canvasObject.create_rectangle(
                self.startx, self.starty, x, y)
            # this flushes the output, making sure that
            # the rectangle makes it to the screen
            # before the next event is handled
            self.update_idletasks()

    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()

        # this is a "tagOrId" for the rectangle we draw on the canvas
        self.rubberbandBox = None

        # this is the size of the gridding squares
        self.griddingSize = 50

        Widget.bind(self.canvasObject, "<Button-1>", self.mouseDown)
        Widget.bind(self.canvasObject, "<Button1-Motion>", self.mouseMotion)


test = Test()

test.mainloop()
PKb1�Zv��	
	
'tkinter/matt/rubber-band-box-demo-1.pyonu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBsAeZd�Zd�Zd�Zd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s@/usr/lib64/python2.7/Demo/tkinter/matt/rubber-band-box-demo-1.pytprintitscCs{t|ddddddddd	|j�|_|jjd
tdt�t|dd
dd
�|_|jjd
t�dS(NttexttQUITt
backgroundtredt
foregroundtwhitetheightitcommandtsidetfilltwidtht5i(	tButtontquitRtpacktBOTTOMtBOTHtCanvastcanvasObjecttLEFT(R((s@/usr/lib64/python2.7/Demo/tkinter/matt/rubber-band-box-demo-1.pyt
createWidgetsscCs4|jj|j�|_|jj|j�|_dS(N(Rtcanvasxtxtstartxtcanvasytytstarty(Rtevent((s@/usr/lib64/python2.7/Demo/tkinter/matt/rubber-band-box-demo-1.pyt	mouseDownscCs�|jj|j�}|jj|j�}|j|jkr�|j|jkr�|jj|j�|jj	|j|j||�|_|j
�ndS(N(RRRRRRRtdeletet
rubberbandBoxtcreate_rectangletupdate_idletasks(RR RR((s@/usr/lib64/python2.7/Demo/tkinter/matt/rubber-band-box-demo-1.pytmouseMotions$	cCs|jj|j�dS(N(RR"R#(RR ((s@/usr/lib64/python2.7/Demo/tkinter/matt/rubber-band-box-demo-1.pytmouseUp'scCstj||�tj|�|j�d|_tj|j	d|j
�tj|j	d|j�tj|j	d|j�dS(Ns
<Button-1>s<Button1-Motion>s<Button1-ButtonRelease>(
tFramet__init__tPacktconfigRtNoneR#tWidgettbindRR!R&R'(Rtmaster((s@/usr/lib64/python2.7/Demo/tkinter/matt/rubber-band-box-demo-1.pyR)*s

	N(	t__name__t
__module__RRR!R&R'R,R)(((s@/usr/lib64/python2.7/Demo/tkinter/matt/rubber-band-box-demo-1.pyRs					N(tTkinterR(Rttesttmainloop(((s@/usr/lib64/python2.7/Demo/tkinter/matt/rubber-band-box-demo-1.pyt<module>s
5	PKb1�Z�;���$tkinter/matt/window-creation-more.pynu�[���from Tkinter import *

# this shows how to create a new window with a button in it
# that can create new windows

class Test(Frame):
    def printit(self):
        print "hi"

    def makeWindow(self):
        fred = Toplevel()
        fred.label = Button(fred,
                            text="This is window number %d." % self.windownum,
                            command=self.makeWindow)
        fred.label.pack()
        self.windownum = self.windownum + 1

    def createWidgets(self):
        self.QUIT = Button(self, text='QUIT', foreground='red',
                           command=self.quit)
        self.QUIT.pack(side=LEFT, fill=BOTH)

        # a hello button
        self.hi_there = Button(self, text='Make a New Window',
                               command=self.makeWindow)
        self.hi_there.pack(side=LEFT)

    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.windownum = 0
        self.createWidgets()

test = Test()
test.mainloop()
PKb1�Z�Q.�#tkinter/matt/killing-window-w-wm.pynu�[���from Tkinter import *

# This file shows how to trap the killing of a window
# when the user uses window manager menus (typ. upper left hand corner
# menu in the decoration border).


### ******* this isn't really called -- read the comments
def my_delete_callback():
    print "whoops -- tried to delete me!"

class Test(Frame):
    def deathHandler(self, event):
        print self, "is now getting nuked. performing some save here...."

    def createWidgets(self):
        # a hello button
        self.hi_there = Button(self, text='Hello')
        self.hi_there.pack(side=LEFT)

    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()

        ###
        ###  PREVENT WM kills from happening
        ###

        # the docs would have you do this:

#       self.master.protocol("WM_DELETE_WINDOW", my_delete_callback)

        # unfortunately, some window managers will not send this request to a window.
        # the "protocol" function seems incapable of trapping these "aggressive" window kills.
        # this line of code catches everything, tho. The window is deleted, but you have a chance
        # of cleaning up first.
        self.bind_all("<Destroy>", self.deathHandler)


test = Test()
test.mainloop()
PKb1�Z������!tkinter/matt/animation-simple.pycnu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs/eZd�Zd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s:/usr/lib64/python2.7/Demo/tkinter/matt/animation-simple.pytprintitsc	Cs�t|ddddd|j�|_|jjdtdt�t|dd	d
d	�|_|jjddddd
ddd�|jjdt�dS(NttexttQUITt
foregroundtredtcommandtsidetfilltwidtht5itheightii
ttagstthingtblue(	tButtontquitRtpacktLEFTtBOTHtCanvastdrawtcreate_rectangle(R((s:/usr/lib64/python2.7/Demo/tkinter/matt/animation-simple.pyt
createWidgets	s%cGs-|jjddd�|jd|j�dS(NRs0.01ii
(Rtmovetaftert	moveThing(Rtargs((s:/usr/lib64/python2.7/Demo/tkinter/matt/animation-simple.pyRscCs>tj||�tj|�|j�|jd|j�dS(Ni
(tFramet__init__tPacktconfigRRR(Rtmaster((s:/usr/lib64/python2.7/Demo/tkinter/matt/animation-simple.pyR s

N(t__name__t
__module__RRRtNoneR (((s:/usr/lib64/python2.7/Demo/tkinter/matt/animation-simple.pyRs			N(tTkinterRRttesttmainloop(((s:/usr/lib64/python2.7/Demo/tkinter/matt/animation-simple.pyt<module>s
	PKb1�Z;mDD(tkinter/matt/canvas-reading-tag-info.pyonu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs&eZd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((sA/usr/lib64/python2.7/Demo/tkinter/matt/canvas-reading-tag-info.pytprintitscCs!t|ddddd|j�|_|jjdtdt�t|dd	d
d	�|_|jjddddddddddd
d�}|jj	|d�}dG|dGdGH|jj	|d�}dG|dGdGHdG|dGdGH|jj	|d
�}dG|dGH|jjdt
�dS(NttexttQUITt
foregroundtredtcommandtsidetfilltwidtht5itheighti
inttagstweeetfootgrootstipples#pgon's current stipple value is -->is<--s pgon's current fill value is -->s   when he is usually colored -->ispgon's tags are(RRR(tButtontquitRtpacktBOTTOMtBOTHtCanvastdrawingtcreate_polygont
itemconfigtLEFT(Rtpgontoption_value((sA/usr/lib64/python2.7/Demo/tkinter/matt/canvas-reading-tag-info.pyt
createWidgetss	
cCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR (Rtmaster((sA/usr/lib64/python2.7/Demo/tkinter/matt/canvas-reading-tag-info.pyR"*s
N(t__name__t
__module__RR tNoneR"(((sA/usr/lib64/python2.7/Demo/tkinter/matt/canvas-reading-tag-info.pyRs		"N(tTkinterR!Rttesttmainloop(((sA/usr/lib64/python2.7/Demo/tkinter/matt/canvas-reading-tag-info.pyt<module>s
+	PKb1�Z����#tkinter/matt/rubber-line-demo-1.pyonu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs8eZd�Zd�Zd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s</usr/lib64/python2.7/Demo/tkinter/matt/rubber-line-demo-1.pytprintitscCs{t|ddddddddd	|j�|_|jjd
tdt�t|dd
dd
�|_|jjd
t�dS(NttexttQUITt
backgroundtredt
foregroundtwhitetheightitcommandtsidetfilltwidtht5i(	tButtontquitRtpacktBOTTOMtBOTHtCanvastcanvasObjecttLEFT(R((s</usr/lib64/python2.7/Demo/tkinter/matt/rubber-line-demo-1.pyt
createWidgetsscCs4|jj|j�|_|jj|j�|_dS(N(Rtcanvasxtxtstartxtcanvasytytstarty(Rtevent((s</usr/lib64/python2.7/Demo/tkinter/matt/rubber-line-demo-1.pyt	mouseDownscCs�|jj|j�}|jj|j�}|j|jkr�|j|jkr�|jj|j�|jj	|j|j||�|_|j
�ndS(N(RRRRRRRtdeletetrubberbandLinetcreate_linetupdate_idletasks(RR RR((s</usr/lib64/python2.7/Demo/tkinter/matt/rubber-line-demo-1.pytmouseMotions$	cCsftj||�tj|�|j�d|_tj|j	d|j
�tj|j	d|j�dS(Ns
<Button-1>s<Button1-Motion>(tFramet__init__tPacktconfigRtNoneR#tWidgettbindRR!R&(Rtmaster((s</usr/lib64/python2.7/Demo/tkinter/matt/rubber-line-demo-1.pyR('s

	N(t__name__t
__module__RRR!R&R+R((((s</usr/lib64/python2.7/Demo/tkinter/matt/rubber-line-demo-1.pyRs
				N(tTkinterR'Rttesttmainloop(((s</usr/lib64/python2.7/Demo/tkinter/matt/rubber-line-demo-1.pyt<module>s
.	PKb1�ZS�"

tkinter/matt/placer-simple.pyonu�[����
��^c@seddlTd�Zd�Zd�Ze�Zee�Zejd�ejdd�ej	�dS(i����(t*cCs#tjjd|jd|j�dS(Ntxty(tapptbuttontplaceRR(tevent((s7/usr/lib64/python2.7/Demo/tkinter/matt/placer-simple.pyt	do_motionscCs	dGHdS(Nscalling me!((((s7/usr/lib64/python2.7/Demo/tkinter/matt/placer-simple.pytdothisscCs�t|dddddd�}|jdddd�t|d	d
ddd
t�|_|jjdddddt�|jdt�|S(Ntwidthi�theightt
backgroundtgreentrelxgtrelyt
foregroundtredttexttamazingtcommandg�?tanchors<Control-Shift-Motion>(tFrameRtButtonRRtNWtbindR(ttoptf((s7/usr/lib64/python2.7/Demo/tkinter/matt/placer-simple.pyt
createWidgetss!t400x400i�N(
tTkinterRRRtTktrootRtgeometrytmaxsizetmainloop(((s7/usr/lib64/python2.7/Demo/tkinter/matt/placer-simple.pyt<module>s
				
PKb1�Zk�����tkinter/matt/dialog-box.pycnu�[����
��^c@sGddlTddlmZdefd��YZe�Zej�dS(i����(t*(tDialogtTestcBs/eZd�Zd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s4/usr/lib64/python2.7/Demo/tkinter/matt/dialog-box.pytprintitsc
Cs1t|ddddddddd	d�}|jS(
s�Create a top-level dialog with some buttons.

        This uses the Dialog class, which is a wrapper around the Tcl/Tk
        tk_dialog script.  The function returns 0 if the user clicks 'yes'
        or 1 if the user clicks 'no'.
        ttitlesfred the dialog boxttextsclick on a choicetbitmaptinfotdefaultitstringstyestno(RR
(Rtnum(Rtd((s4/usr/lib64/python2.7/Demo/tkinter/matt/dialog-box.pyt
makeWindows	cCsrt|ddddd|j�|_|jjdtdt�t|ddd|j�|_|jjdt�dS(	NRtQUITt
foregroundtredtcommandtsidetfillsMake a New Window(tButtontquitRtpacktLEFTtBOTHRthi_there(R((s4/usr/lib64/python2.7/Demo/tkinter/matt/dialog-box.pyt
createWidgets.scCs4tj||�tj|�d|_|j�dS(Ni(tFramet__init__tPacktconfigt	windownumR(Rtmaster((s4/usr/lib64/python2.7/Demo/tkinter/matt/dialog-box.pyR9s
	N(t__name__t
__module__RRRtNoneR(((s4/usr/lib64/python2.7/Demo/tkinter/matt/dialog-box.pyRs		#	N(tTkinterRRRttesttmainloop(((s4/usr/lib64/python2.7/Demo/tkinter/matt/dialog-box.pyt<module>s
8	PKb1�Z�		 tkinter/matt/canvas-gridding.pyonu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs8eZd�Zd�Zd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s9/usr/lib64/python2.7/Demo/tkinter/matt/canvas-gridding.pytprintit	scCs{t|ddddddddd	|j�|_|jjd
tdt�t|dd
dd
�|_|jjd
t�dS(NttexttQUITt
backgroundtredt
foregroundtwhitetheightitcommandtsidetfilltwidtht5i(	tButtontquitRtpacktBOTTOMtBOTHtCanvastcanvasObjecttLEFT(R((s9/usr/lib64/python2.7/Demo/tkinter/matt/canvas-gridding.pyt
createWidgetsscCs@|jj|j|j�|_|jj|j|j�|_dS(N(RtcanvasxtxtgriddingSizetstartxtcanvasytytstarty(Rtevent((s9/usr/lib64/python2.7/Demo/tkinter/matt/canvas-gridding.pyt	mouseDownscCs�|jj|j|j�}|jj|j|j�}|j|jkr�|j|jkr�|jj|j	�|jj
|j|j||�|_	|j�ndS(N(RRRRRRRR tdeletet
rubberbandBoxtcreate_rectangletupdate_idletasks(RR!RR((s9/usr/lib64/python2.7/Demo/tkinter/matt/canvas-gridding.pytmouseMotions$	cCsotj||�tj|�|j�d|_d|_tj	|j
d|j�tj	|j
d|j�dS(Ni2s
<Button-1>s<Button1-Motion>(
tFramet__init__tPacktconfigRtNoneR$RtWidgettbindRR"R'(Rtmaster((s9/usr/lib64/python2.7/Demo/tkinter/matt/canvas-gridding.pyR),s

		N(t__name__t
__module__RRR"R'R,R)(((s9/usr/lib64/python2.7/Demo/tkinter/matt/canvas-gridding.pyRs
				N(tTkinterR(Rttesttmainloop(((s9/usr/lib64/python2.7/Demo/tkinter/matt/canvas-gridding.pyt<module>s
3	PKb1�Z��aI

*tkinter/matt/canvas-moving-or-creating.pyonu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBsAeZd�Zd�Zd�Zd�Zd�Zdd�ZRS(c	Cs�|jjt�s�|jj|jd|jd|jd|jddddt�}|jj|d|j�|jj|d|j	�n|j|_
|j|_dS(Ni
tfilltgreenttagss<Any-Enter>s<Any-Leave>(twidgettfind_withtagtCURRENTtdrawtcreate_ovaltxtyttag_bindt
mouseEntert
mouseLeavetlastxtlasty(tselfteventtfred((sC/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-or-creating.pyt	mouseDown
s	+cCsF|jjt|j|j|j|j�|j|_|j|_dS(N(RtmoveRR
RRR(RR((sC/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-or-creating.pyt	mouseMoves*cCs|jjtdd�dS(NRtred(Rt
itemconfigR(RR((sC/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-or-creating.pyR
$scCs|jjtdd�dS(NRtblue(RRR(RR((sC/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-or-creating.pyR)scCs�t|ddddd|j�|_|jjdtdt�t|dd	d
d	�|_|jjdt�tj	|jd|j
�tj	|jd|j�dS(
NttexttQUITt
foregroundRtcommandtsideRtwidtht5itheights<1>s<B1-Motion>(tButtontquitRtpacktLEFTtBOTHtCanvasRtWidgettbindRR(R((sC/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-or-creating.pyt
createWidgets.scCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR*(Rtmaster((sC/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-or-creating.pyR,8s
N(	t__name__t
__module__RRR
RR*tNoneR,(((sC/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-or-creating.pyRs					
N(tTkinterR+Rttesttmainloop(((sC/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-or-creating.pyt<module>s
7	PKb1�Z0L���$tkinter/matt/killing-window-w-wm.pycnu�[����
��^c@s@ddlTd�Zdefd��YZe�Zej�dS(i����(t*cCs	dGHdS(Nswhoops -- tried to delete me!((((s=/usr/lib64/python2.7/Demo/tkinter/matt/killing-window-w-wm.pytmy_delete_callback	stTestcBs&eZd�Zd�Zdd�ZRS(cCs
|GdGHdS(Ns3is now getting nuked. performing some save here....((tselftevent((s=/usr/lib64/python2.7/Demo/tkinter/matt/killing-window-w-wm.pytdeathHandler
scCs,t|dd�|_|jjdt�dS(NttexttHellotside(tButtonthi_theretpacktLEFT(R((s=/usr/lib64/python2.7/Demo/tkinter/matt/killing-window-w-wm.pyt
createWidgetsscCs>tj||�tj|�|j�|jd|j�dS(Ns	<Destroy>(tFramet__init__tPacktconfigR
tbind_allR(Rtmaster((s=/usr/lib64/python2.7/Demo/tkinter/matt/killing-window-w-wm.pyRs

N(t__name__t
__module__RR
tNoneR(((s=/usr/lib64/python2.7/Demo/tkinter/matt/killing-window-w-wm.pyRs		N(tTkinterRRRttesttmainloop(((s=/usr/lib64/python2.7/Demo/tkinter/matt/killing-window-w-wm.pyt<module>s
		PKb1�Z	����tkinter/matt/slider-demo-1.pycnu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs/eZd�Zd�Zd�Zdd�ZRS(cCs
dG|GHdS(Ns
slider now at((tselftval((s7/usr/lib64/python2.7/Demo/tkinter/matt/slider-demo-1.pytprint_valuescCs|jjd�dS(Ni(tslidertset(R((s7/usr/lib64/python2.7/Demo/tkinter/matt/slider-demo-1.pytreset
scCs�t|dddddtdddd	d
|j�|_t|ddd
|j�|_t|dd
ddd
|j�|_|jjdt	�|jjdt	�|jjdt	dt
�dS(Ntfrom_ittoidtorienttlengtht3itlabelshappy slidertcommandttextsreset slidertQUITt
foregroundtredtsidetfill(tScalet
HORIZONTALRRtButtonRtquitRtpacktLEFTtBOTH(R((s7/usr/lib64/python2.7/Demo/tkinter/matt/slider-demo-1.pyt
createWidgets
scCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR(Rtmaster((s7/usr/lib64/python2.7/Demo/tkinter/matt/slider-demo-1.pyRs
N(t__name__t
__module__RRRtNoneR(((s7/usr/lib64/python2.7/Demo/tkinter/matt/slider-demo-1.pyRs			N(tTkinterRRttesttmainloop(((s7/usr/lib64/python2.7/Demo/tkinter/matt/slider-demo-1.pyt<module>s
	PKb1�Z0L���$tkinter/matt/killing-window-w-wm.pyonu�[����
��^c@s@ddlTd�Zdefd��YZe�Zej�dS(i����(t*cCs	dGHdS(Nswhoops -- tried to delete me!((((s=/usr/lib64/python2.7/Demo/tkinter/matt/killing-window-w-wm.pytmy_delete_callback	stTestcBs&eZd�Zd�Zdd�ZRS(cCs
|GdGHdS(Ns3is now getting nuked. performing some save here....((tselftevent((s=/usr/lib64/python2.7/Demo/tkinter/matt/killing-window-w-wm.pytdeathHandler
scCs,t|dd�|_|jjdt�dS(NttexttHellotside(tButtonthi_theretpacktLEFT(R((s=/usr/lib64/python2.7/Demo/tkinter/matt/killing-window-w-wm.pyt
createWidgetsscCs>tj||�tj|�|j�|jd|j�dS(Ns	<Destroy>(tFramet__init__tPacktconfigR
tbind_allR(Rtmaster((s=/usr/lib64/python2.7/Demo/tkinter/matt/killing-window-w-wm.pyRs

N(t__name__t
__module__RR
tNoneR(((s=/usr/lib64/python2.7/Demo/tkinter/matt/killing-window-w-wm.pyRs		N(tTkinterRRRttesttmainloop(((s=/usr/lib64/python2.7/Demo/tkinter/matt/killing-window-w-wm.pyt<module>s
		PKb1�ZS�"

tkinter/matt/placer-simple.pycnu�[����
��^c@seddlTd�Zd�Zd�Ze�Zee�Zejd�ejdd�ej	�dS(i����(t*cCs#tjjd|jd|j�dS(Ntxty(tapptbuttontplaceRR(tevent((s7/usr/lib64/python2.7/Demo/tkinter/matt/placer-simple.pyt	do_motionscCs	dGHdS(Nscalling me!((((s7/usr/lib64/python2.7/Demo/tkinter/matt/placer-simple.pytdothisscCs�t|dddddd�}|jdddd�t|d	d
ddd
t�|_|jjdddddt�|jdt�|S(Ntwidthi�theightt
backgroundtgreentrelxgtrelyt
foregroundtredttexttamazingtcommandg�?tanchors<Control-Shift-Motion>(tFrameRtButtonRRtNWtbindR(ttoptf((s7/usr/lib64/python2.7/Demo/tkinter/matt/placer-simple.pyt
createWidgetss!t400x400i�N(
tTkinterRRRtTktrootRtgeometrytmaxsizetmainloop(((s7/usr/lib64/python2.7/Demo/tkinter/matt/placer-simple.pyt<module>s
				
PKb1�Z;U<��*tkinter/matt/subclass-existing-widgets.pycnu�[����
��^c@sJddlTdefd��YZd�Ze�Zee�ej�dS(i����(t*t
New_ButtoncBseZd�ZRS(cCs|jGH|jd|_dS(Ni(tcounter(tself((sC/usr/lib64/python2.7/Demo/tkinter/matt/subclass-existing-widgets.pytcallbacks(t__name__t
__module__R(((sC/usr/lib64/python2.7/Demo/tkinter/matt/subclass-existing-widgets.pyRscCs�t|�}|j�t|ddddd|j�|_|jjdtdt�t|dd�|_|jj	d|jj
�|jjdt�d	|j_dS(
NttexttQUITt
foregroundtredtcommandtsidetfilltHelloi+(tFrametpacktButtontquitRtLEFTtBOTHRthi_theretconfigRR(ttoptf((sC/usr/lib64/python2.7/Demo/tkinter/matt/subclass-existing-widgets.pyt
createWidgetss
$N(tTkinterRRRtTktroottmainloop(((sC/usr/lib64/python2.7/Demo/tkinter/matt/subclass-existing-widgets.pyt<module>s

		
PKb1�Z�̆^+tkinter/matt/not-what-you-might-think-1.pyonu�[����
��^c@sWddlTdefd��YZe�Zejjd�ejjd�ej�dS(i����(t*tTestcBseZd�Zdd�ZRS(cCsxt|dddddd�|_|jjdt�t|jddd	d
d|j�|j_|jjjdt�dS(Ntwidtht1itheightt
backgroundtgreentsidettexttQUITt
foregroundtredtcommand(tFrametGpaneltpacktLEFTtButtontquitR	(tself((sD/usr/lib64/python2.7/Demo/tkinter/matt/not-what-you-might-think-1.pyt
createWidgetsscCs+tj||�tj|�|j�dS(N(R
t__init__tPacktconfigR(Rtmaster((sD/usr/lib64/python2.7/Demo/tkinter/matt/not-what-you-might-think-1.pyRs
N(t__name__t
__module__RtNoneR(((sD/usr/lib64/python2.7/Demo/tkinter/matt/not-what-you-might-think-1.pyRs	
spacker demotpackerN(tTkinterR
RttestRttitleticonnametmainloop(((sD/usr/lib64/python2.7/Demo/tkinter/matt/not-what-you-might-think-1.pyt<module>s

	PKb1�Z3��(jj'tkinter/matt/window-creation-simple.pyonu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs/eZd�Zd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s@/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-simple.pytprintitscCs/t�}t|dd�|_|jj�dS(NttextsHere's a new window(tTopleveltLabeltlabeltpack(Rtfred((s@/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-simple.pyt
makeWindow	s	cCsrt|ddddd|j�|_|jjdtdt�t|ddd|j�|_|jjdt�dS(	NRtQUITt
foregroundtredtcommandtsidetfillsMake a New Window(tButtontquitRR	tLEFTtBOTHRthi_there(R((s@/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-simple.pyt
createWidgetsscCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR(Rtmaster((s@/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-simple.pyRs
N(t__name__t
__module__RRRtNoneR(((s@/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-simple.pyRs			N(tTkinterRRttesttmainloop(((s@/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-simple.pyt<module>s
	PKb1�Z������!tkinter/matt/animation-simple.pyonu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs/eZd�Zd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s:/usr/lib64/python2.7/Demo/tkinter/matt/animation-simple.pytprintitsc	Cs�t|ddddd|j�|_|jjdtdt�t|dd	d
d	�|_|jjddddd
ddd�|jjdt�dS(NttexttQUITt
foregroundtredtcommandtsidetfilltwidtht5itheightii
ttagstthingtblue(	tButtontquitRtpacktLEFTtBOTHtCanvastdrawtcreate_rectangle(R((s:/usr/lib64/python2.7/Demo/tkinter/matt/animation-simple.pyt
createWidgets	s%cGs-|jjddd�|jd|j�dS(NRs0.01ii
(Rtmovetaftert	moveThing(Rtargs((s:/usr/lib64/python2.7/Demo/tkinter/matt/animation-simple.pyRscCs>tj||�tj|�|j�|jd|j�dS(Ni
(tFramet__init__tPacktconfigRRR(Rtmaster((s:/usr/lib64/python2.7/Demo/tkinter/matt/animation-simple.pyR s

N(t__name__t
__module__RRRtNoneR (((s:/usr/lib64/python2.7/Demo/tkinter/matt/animation-simple.pyRs			N(tTkinterRRttesttmainloop(((s:/usr/lib64/python2.7/Demo/tkinter/matt/animation-simple.pyt<module>s
	PKb1�ZMh�Ω	�	&tkinter/matt/canvas-moving-w-mouse.pyonu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBsAeZd�Zd�Zd�Zd�Zd�Zdd�ZRS(cCs|j|_|j|_dS(N(txtlastxtytlasty(tselftevent((s?/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-w-mouse.pyt	mouseDown	scCsF|jjt|j|j|j|j�|j|_|j|_dS(N(tdrawtmovetCURRENTRRRR(RR((s?/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-w-mouse.pyt	mouseMoves*cCs|jjtdd�dS(Ntfilltred(R	t
itemconfigR(RR((s?/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-w-mouse.pyt
mouseEnterscCs|jjtdd�dS(NR
tblue(R	RR(RR((s?/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-w-mouse.pyt
mouseLeavesc	Cs�t|ddddd|j�|_|jjdtdt�t|dd	d
d	�|_|jjdt�|jjdddddd
dd�}|jj	|d|j
�|jj	|d|j�tj
|jd|j�tj
|jd|j�dS(NttexttQUITt
foregroundRtcommandtsideR
twidtht5itheightiitgreenttagstselecteds<Any-Enter>s<Any-Leave>s<1>s<B1-Motion>(tButtontquitRtpacktLEFTtBOTHtCanvasR	tcreate_ovalttag_bindRRtWidgettbindRR(Rtfred((s?/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-w-mouse.pyt
createWidgets!scCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR)(Rtmaster((s?/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-w-mouse.pyR+1s
N(	t__name__t
__module__RRRRR)tNoneR+(((s?/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-w-mouse.pyRs						N(tTkinterR*Rttesttmainloop(((s?/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-w-mouse.pyt<module>s
1	PKb1�Z�nЈ	�	tkinter/matt/dialog-box.pynu�[���from Tkinter import *
from Dialog import Dialog

# this shows how to create a new window with a button in it
# that can create new windows

class Test(Frame):
    def printit(self):
        print "hi"

    def makeWindow(self):
        """Create a top-level dialog with some buttons.

        This uses the Dialog class, which is a wrapper around the Tcl/Tk
        tk_dialog script.  The function returns 0 if the user clicks 'yes'
        or 1 if the user clicks 'no'.
        """
        # the parameters to this call are as follows:
        d = Dialog(
            self,                       ## name of a toplevel window
            title="fred the dialog box",## title on the window
            text="click on a choice",   ## message to appear in window
            bitmap="info",              ## bitmap (if any) to appear;
                                        ## if none, use ""
            #     legal values here are:
            #      string      what it looks like
            #      ----------------------------------------------
            #      error       a circle with a slash through it
            #      grey25      grey square
            #      grey50      darker grey square
            #      hourglass   use for "wait.."
            #      info        a large, lower case "i"
            #      questhead   a human head with a "?" in it
            #      question    a large "?"
            #      warning     a large "!"
            #        @fname    X bitmap where fname is the path to the file
            #
            default=0,    # the index of the default button choice.
                          # hitting return selects this
            strings=("yes", "no"))
                          # values of the 'strings' key are the labels for the
                          # buttons that appear left to right in the dialog box
        return d.num


    def createWidgets(self):
        self.QUIT = Button(self, text='QUIT', foreground='red',
                           command=self.quit)
        self.QUIT.pack(side=LEFT, fill=BOTH)

        # a hello button
        self.hi_there = Button(self, text='Make a New Window',
                               command=self.makeWindow)
        self.hi_there.pack(side=LEFT)


    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.windownum = 0
        self.createWidgets()

test = Test()
test.mainloop()
PKb1�Z�	��NN%tkinter/matt/canvas-moving-w-mouse.pynu�[���from Tkinter import *

# this file demonstrates the movement of a single canvas item under mouse control

class Test(Frame):
    ###################################################################
    ###### Event callbacks for THE CANVAS (not the stuff drawn on it)
    ###################################################################
    def mouseDown(self, event):
        # remember where the mouse went down
        self.lastx = event.x
        self.lasty = event.y

    def mouseMove(self, event):
        # whatever the mouse is over gets tagged as CURRENT for free by tk.
        self.draw.move(CURRENT, event.x - self.lastx, event.y - self.lasty)
        self.lastx = event.x
        self.lasty = event.y

    ###################################################################
    ###### Event callbacks for canvas ITEMS (stuff drawn on the canvas)
    ###################################################################
    def mouseEnter(self, event):
        # the CURRENT tag is applied to the object the cursor is over.
        # this happens automatically.
        self.draw.itemconfig(CURRENT, fill="red")

    def mouseLeave(self, event):
        # the CURRENT tag is applied to the object the cursor is over.
        # this happens automatically.
        self.draw.itemconfig(CURRENT, fill="blue")

    def createWidgets(self):
        self.QUIT = Button(self, text='QUIT', foreground='red',
                           command=self.quit)
        self.QUIT.pack(side=LEFT, fill=BOTH)
        self.draw = Canvas(self, width="5i", height="5i")
        self.draw.pack(side=LEFT)

        fred = self.draw.create_oval(0, 0, 20, 20,
                                     fill="green", tags="selected")

        self.draw.tag_bind(fred, "<Any-Enter>", self.mouseEnter)
        self.draw.tag_bind(fred, "<Any-Leave>", self.mouseLeave)

        Widget.bind(self.draw, "<1>", self.mouseDown)
        Widget.bind(self.draw, "<B1-Motion>", self.mouseMove)

    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()

test = Test()
test.mainloop()
PKb1�Z����#tkinter/matt/rubber-line-demo-1.pycnu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs8eZd�Zd�Zd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s</usr/lib64/python2.7/Demo/tkinter/matt/rubber-line-demo-1.pytprintitscCs{t|ddddddddd	|j�|_|jjd
tdt�t|dd
dd
�|_|jjd
t�dS(NttexttQUITt
backgroundtredt
foregroundtwhitetheightitcommandtsidetfilltwidtht5i(	tButtontquitRtpacktBOTTOMtBOTHtCanvastcanvasObjecttLEFT(R((s</usr/lib64/python2.7/Demo/tkinter/matt/rubber-line-demo-1.pyt
createWidgetsscCs4|jj|j�|_|jj|j�|_dS(N(Rtcanvasxtxtstartxtcanvasytytstarty(Rtevent((s</usr/lib64/python2.7/Demo/tkinter/matt/rubber-line-demo-1.pyt	mouseDownscCs�|jj|j�}|jj|j�}|j|jkr�|j|jkr�|jj|j�|jj	|j|j||�|_|j
�ndS(N(RRRRRRRtdeletetrubberbandLinetcreate_linetupdate_idletasks(RR RR((s</usr/lib64/python2.7/Demo/tkinter/matt/rubber-line-demo-1.pytmouseMotions$	cCsftj||�tj|�|j�d|_tj|j	d|j
�tj|j	d|j�dS(Ns
<Button-1>s<Button1-Motion>(tFramet__init__tPacktconfigRtNoneR#tWidgettbindRR!R&(Rtmaster((s</usr/lib64/python2.7/Demo/tkinter/matt/rubber-line-demo-1.pyR('s

	N(t__name__t
__module__RRR!R&R+R((((s</usr/lib64/python2.7/Demo/tkinter/matt/rubber-line-demo-1.pyRs
				N(tTkinterR'Rttesttmainloop(((s</usr/lib64/python2.7/Demo/tkinter/matt/rubber-line-demo-1.pyt<module>s
.	PKb1�Ze��̍�#tkinter/matt/canvas-demo-simple.pycnu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs&eZd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s</usr/lib64/python2.7/Demo/tkinter/matt/canvas-demo-simple.pytprintitscCs�t|ddddd|j�|_|jjdtdt�t|dd	d
d	�|_|jjdddddd
�|jjdt	�dS(NttexttQUITt
foregroundtredtcommandtsidetfilltwidtht5itheightit3itblack(
tButtontquitRtpacktBOTTOMtBOTHtCanvastdrawtcreate_rectangletLEFT(R((s</usr/lib64/python2.7/Demo/tkinter/matt/canvas-demo-simple.pyt
createWidgets	scCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR(Rtmaster((s</usr/lib64/python2.7/Demo/tkinter/matt/canvas-demo-simple.pyRs
N(t__name__t
__module__RRtNoneR(((s</usr/lib64/python2.7/Demo/tkinter/matt/canvas-demo-simple.pyRs		N(tTkinterRRttesttmainloop(((s</usr/lib64/python2.7/Demo/tkinter/matt/canvas-demo-simple.pyt<module>s
	PKb1�ZL�

)tkinter/matt/printing-coords-of-items.pyonu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBsAeZd�Zd�Zd�Zd�Zd�Zdd�ZRS(cCs�|jjt�s�|jj|jd|jd|jd|jddd�}|jj|d|j�|jj|d|j	�n|j|_
|j|_dS(Ni
tfilltgreens<Enter>s<Leave>(twidgettfind_withtagtCURRENTtdrawtcreate_ovaltxtyttag_bindt
mouseEntert
mouseLeavetlastxtlasty(tselfteventtfred((sB/usr/lib64/python2.7/Demo/tkinter/matt/printing-coords-of-items.pyt	mouseDown	s	+	cCsF|jjt|j|j|j|j�|j|_|j|_dS(N(RtmoveRR	RR
R(RR((sB/usr/lib64/python2.7/Demo/tkinter/matt/printing-coords-of-items.pyt	mouseMoves*cCs+|jjtdd�|jjt�GHdS(NRtred(Rt
itemconfigRtcoords(RR((sB/usr/lib64/python2.7/Demo/tkinter/matt/printing-coords-of-items.pyR"scCs|jjtdd�dS(NRtblue(RRR(RR((sB/usr/lib64/python2.7/Demo/tkinter/matt/printing-coords-of-items.pyR
(scCs�t|ddddd|j�|_|jjdtdt�t|dd	d
d	�|_|jjdt�tj	|jd|j
�tj	|jd|j�dS(
NttexttQUITt
foregroundRtcommandtsideRtwidtht5itheights<1>s<B1-Motion>(tButtontquitRtpacktLEFTtBOTHtCanvasRtWidgettbindRR(R((sB/usr/lib64/python2.7/Demo/tkinter/matt/printing-coords-of-items.pyt
createWidgets-scCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR*(Rtmaster((sB/usr/lib64/python2.7/Demo/tkinter/matt/printing-coords-of-items.pyR,7s
N(	t__name__t
__module__RRRR
R*tNoneR,(((sB/usr/lib64/python2.7/Demo/tkinter/matt/printing-coords-of-items.pyRs					
N(tTkinterR+Rttesttmainloop(((sB/usr/lib64/python2.7/Demo/tkinter/matt/printing-coords-of-items.pyt<module>s
7	PKb1�Zb�r;	;	'tkinter/matt/canvas-with-scrollbars.pyonu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs/eZd�Zd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s@/usr/lib64/python2.7/Demo/tkinter/matt/canvas-with-scrollbars.pytprintit	sc
Cs�t|dd�|_|jj�t|ddddddd|j�|_|jjd	td
t�t|dd�}|jd	t�t	|dd
dd
dddd�|_
t|dt�|j
_
t|dt�|j
_|j
j
j|j
d<|j
jj|j
d<|j
j|j
j
d<|j
j|j
jd<|j
jddddd
d�|j
jddddd
d�|j
j
jd	td
t�|j
jjd	td
t�|j
jd	t�dS(NttextsCan Find The BLUE Square??????tQUITt
backgroundtredtheightitcommandtsidetfills0.25itwidtht5itwhitetscrollregionit20itorienttxscrollcommandtyscrollcommands3.5itblackt10is13.5itblue(iiRR(tLabeltquestiontpacktButtontquitRtBOTTOMtBOTHtFrametCanvastdrawt	Scrollbart
HORIZONTALtscrollXtVERTICALtscrollYtsettxviewtyviewtcreate_rectangletXtRIGHTtYtLEFT(Rtspacer((s@/usr/lib64/python2.7/Demo/tkinter/matt/canvas-with-scrollbars.pyt
createWidgetss*
cGsdG|GH|jjj�GHdS(Nt	scrolling(R!R$tget(Rtargs((s@/usr/lib64/python2.7/Demo/tkinter/matt/canvas-with-scrollbars.pyt
scrollCanvasX0s	cCs+tj||�tj|�|j�dS(N(Rt__init__tPacktconfigR0(Rtmaster((s@/usr/lib64/python2.7/Demo/tkinter/matt/canvas-with-scrollbars.pyR55s
N(t__name__t
__module__RR0R4tNoneR5(((s@/usr/lib64/python2.7/Demo/tkinter/matt/canvas-with-scrollbars.pyRs		$	N(tTkinterRRttesttmainloop(((s@/usr/lib64/python2.7/Demo/tkinter/matt/canvas-with-scrollbars.pyt<module>s
2	PKb1�Z��>kv	v	)tkinter/matt/canvas-moving-or-creating.pynu�[���from Tkinter import *

# this file demonstrates a more sophisticated movement --
# move dots or create new ones if you click outside the dots

class Test(Frame):
    ###################################################################
    ###### Event callbacks for THE CANVAS (not the stuff drawn on it)
    ###################################################################
    def mouseDown(self, event):
        # see if we're inside a dot. If we are, it
        # gets tagged as CURRENT for free by tk.
        if not event.widget.find_withtag(CURRENT):
            # there is no dot here, so we can make one,
            # and bind some interesting behavior to it.
            # ------
            # create a dot, and mark it as CURRENT
            fred = self.draw.create_oval(
                event.x - 10, event.y -10, event.x +10, event.y + 10,
                fill="green", tags=CURRENT)

            self.draw.tag_bind(fred, "<Any-Enter>", self.mouseEnter)
            self.draw.tag_bind(fred, "<Any-Leave>", self.mouseLeave)

        self.lastx = event.x
        self.lasty = event.y

    def mouseMove(self, event):
        self.draw.move(CURRENT, event.x - self.lastx, event.y - self.lasty)
        self.lastx = event.x
        self.lasty = event.y

    ###################################################################
    ###### Event callbacks for canvas ITEMS (stuff drawn on the canvas)
    ###################################################################
    def mouseEnter(self, event):
        # the CURRENT tag is applied to the object the cursor is over.
        # this happens automatically.
        self.draw.itemconfig(CURRENT, fill="red")

    def mouseLeave(self, event):
        # the CURRENT tag is applied to the object the cursor is over.
        # this happens automatically.
        self.draw.itemconfig(CURRENT, fill="blue")

    def createWidgets(self):
        self.QUIT = Button(self, text='QUIT', foreground='red',
                           command=self.quit)
        self.QUIT.pack(side=LEFT, fill=BOTH)
        self.draw = Canvas(self, width="5i", height="5i")
        self.draw.pack(side=LEFT)

        Widget.bind(self.draw, "<1>", self.mouseDown)
        Widget.bind(self.draw, "<B1-Motion>", self.mouseMove)

    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()

test = Test()
test.mainloop()
PKb1�Z�x�#�#)tkinter/matt/menu-all-types-of-entries.pynu�[���from Tkinter import *

# some vocabulary to keep from getting confused. This terminology
# is something I cooked up for this file, but follows the man pages
# pretty closely
#
#
#
#       This is a MENUBUTTON
#       V
# +-------------+
# |             |
#
# +------------++------------++------------+
# |            ||            ||            |
# |  File      ||  Edit      || Options    |   <-------- the MENUBAR
# |            ||            ||            |
# +------------++------------++------------+
# | New...         |
# | Open...        |
# | Print          |
# |                |  <-------- This is a MENU. The lines of text in the menu are
# |                |                            MENU ENTRIES
# |                +---------------+
# | Open Files >   | file1         |
# |                | file2         |
# |                | another file  | <------ this cascading part is also a MENU
# +----------------|               |
#                  |               |
#                  |               |
#                  |               |
#                  +---------------+



# some miscellaneous callbacks
def new_file():
    print "opening new file"

def open_file():
    print "opening OLD file"

def print_something():
    print "picked a menu item"



anchovies = 0

def print_anchovies():
    global anchovies
    anchovies = not anchovies
    print "anchovies?", anchovies

def makeCommandMenu():
    # make menu button
    Command_button = Menubutton(mBar, text='Simple Button Commands',
                                underline=0)
    Command_button.pack(side=LEFT, padx="2m")

    # make the pulldown part of the File menu. The parameter passed is the master.
    # we attach it to the button as a python attribute called "menu" by convention.
    # hopefully this isn't too confusing...
    Command_button.menu = Menu(Command_button)

    # just to be cute, let's disable the undo option:
    Command_button.menu.add_command(label="Undo")
    # undo is the 0th entry...
    Command_button.menu.entryconfig(0, state=DISABLED)

    Command_button.menu.add_command(label='New...', underline=0,
                                    command=new_file)
    Command_button.menu.add_command(label='Open...', underline=0,
                                    command=open_file)
    Command_button.menu.add_command(label='Different Font', underline=0,
                                    font='-*-helvetica-*-r-*-*-*-180-*-*-*-*-*-*',
                                    command=print_something)

    # we can make bitmaps be menu entries too. File format is X11 bitmap.
    # if you use XV, save it under X11 bitmap format. duh-uh.,..
    Command_button.menu.add_command(
        bitmap="info")
        #bitmap='@/home/mjc4y/dilbert/project.status.is.doomed.last.panel.bm')

    # this is just a line
    Command_button.menu.add('separator')

    # change the color
    Command_button.menu.add_command(label='Quit', underline=0,
                                    background='red',
                                    activebackground='green',
                                    command=Command_button.quit)

    # set up a pointer from the file menubutton back to the file menu
    Command_button['menu'] = Command_button.menu

    return Command_button



def makeCascadeMenu():
    # make menu button
    Cascade_button = Menubutton(mBar, text='Cascading Menus', underline=0)
    Cascade_button.pack(side=LEFT, padx="2m")

    # the primary pulldown
    Cascade_button.menu = Menu(Cascade_button)

    # this is the menu that cascades from the primary pulldown....
    Cascade_button.menu.choices = Menu(Cascade_button.menu)

    # ...and this is a menu that cascades from that.
    Cascade_button.menu.choices.weirdones = Menu(Cascade_button.menu.choices)

    # then you define the menus from the deepest level on up.
    Cascade_button.menu.choices.weirdones.add_command(label='avacado')
    Cascade_button.menu.choices.weirdones.add_command(label='belgian endive')
    Cascade_button.menu.choices.weirdones.add_command(label='beefaroni')

    # definition of the menu one level up...
    Cascade_button.menu.choices.add_command(label='Chocolate')
    Cascade_button.menu.choices.add_command(label='Vanilla')
    Cascade_button.menu.choices.add_command(label='TuttiFruiti')
    Cascade_button.menu.choices.add_command(label='WopBopaLoopBapABopBamBoom')
    Cascade_button.menu.choices.add_command(label='Rocky Road')
    Cascade_button.menu.choices.add_command(label='BubbleGum')
    Cascade_button.menu.choices.add_cascade(
        label='Weird Flavors',
        menu=Cascade_button.menu.choices.weirdones)

    # and finally, the definition for the top level
    Cascade_button.menu.add_cascade(label='more choices',
                                    menu=Cascade_button.menu.choices)

    Cascade_button['menu'] = Cascade_button.menu

    return Cascade_button

def makeCheckbuttonMenu():
    global fred
    # make menu button
    Checkbutton_button = Menubutton(mBar, text='Checkbutton Menus',
                                    underline=0)
    Checkbutton_button.pack(side=LEFT, padx='2m')

    # the primary pulldown
    Checkbutton_button.menu = Menu(Checkbutton_button)

    # and all the check buttons. Note that the "variable" "onvalue" and "offvalue" options
    # are not supported correctly at present. You have to do all your application
    # work through the calback.
    Checkbutton_button.menu.add_checkbutton(label='Pepperoni')
    Checkbutton_button.menu.add_checkbutton(label='Sausage')
    Checkbutton_button.menu.add_checkbutton(label='Extra Cheese')

    # so here's a callback
    Checkbutton_button.menu.add_checkbutton(label='Anchovy',
                                            command=print_anchovies)

    # and start with anchovies selected to be on. Do this by
    # calling invoke on this menu option. To refer to the "anchovy" menu
    # entry we need to know it's index. To do this, we use the index method
    # which takes arguments of several forms:
    #
    # argument        what it does
    # -----------------------------------
    # a number        -- this is useless.
    # "last"          -- last option in the menu
    # "none"          -- used with the activate command. see the man page on menus
    # "active"        -- the currently active menu option. A menu option is made active
    #                         with the 'activate' method
    # "@number"       -- where 'number' is an integer and is treated like a y coordinate in pixels
    # string pattern  -- this is the option used below, and attempts to match "labels" using the
    #                    rules of Tcl_StringMatch
    Checkbutton_button.menu.invoke(Checkbutton_button.menu.index('Anchovy'))

    # set up a pointer from the file menubutton back to the file menu
    Checkbutton_button['menu'] = Checkbutton_button.menu

    return Checkbutton_button


def makeRadiobuttonMenu():
    # make menu button
    Radiobutton_button = Menubutton(mBar, text='Radiobutton Menus',
                                    underline=0)
    Radiobutton_button.pack(side=LEFT, padx='2m')

    # the primary pulldown
    Radiobutton_button.menu = Menu(Radiobutton_button)

    # and all the Radio buttons. Note that the "variable" "onvalue" and "offvalue" options
    # are not supported correctly at present. You have to do all your application
    # work through the calback.
    Radiobutton_button.menu.add_radiobutton(label='Republican')
    Radiobutton_button.menu.add_radiobutton(label='Democrat')
    Radiobutton_button.menu.add_radiobutton(label='Libertarian')
    Radiobutton_button.menu.add_radiobutton(label='Commie')
    Radiobutton_button.menu.add_radiobutton(label='Facist')
    Radiobutton_button.menu.add_radiobutton(label='Labor Party')
    Radiobutton_button.menu.add_radiobutton(label='Torie')
    Radiobutton_button.menu.add_radiobutton(label='Independent')
    Radiobutton_button.menu.add_radiobutton(label='Anarchist')
    Radiobutton_button.menu.add_radiobutton(label='No Opinion')

    # set up a pointer from the file menubutton back to the file menu
    Radiobutton_button['menu'] = Radiobutton_button.menu

    return Radiobutton_button


def makeDisabledMenu():
    Dummy_button = Menubutton(mBar, text='Dead Menu', underline=0)
    Dummy_button.pack(side=LEFT, padx='2m')

    # this is the standard way of turning off a whole menu
    Dummy_button["state"] = DISABLED
    return Dummy_button


#################################################
#### Main starts here ...
root = Tk()


# make a menu bar
mBar = Frame(root, relief=RAISED, borderwidth=2)
mBar.pack(fill=X)

Command_button     = makeCommandMenu()
Cascade_button     = makeCascadeMenu()
Checkbutton_button = makeCheckbuttonMenu()
Radiobutton_button = makeRadiobuttonMenu()
NoMenu             = makeDisabledMenu()

# finally, install the buttons in the menu bar.
# This allows for scanning from one menubutton to the next.
mBar.tk_menuBar(Command_button, Cascade_button, Checkbutton_button, Radiobutton_button, NoMenu)


root.title('menu demo')
root.iconname('menu demo')

root.mainloop()
PKb1�Z:���
�
%tkinter/matt/canvas-mult-item-sel.pyonu�[����
��^c@sCddlTdZdZdefd��YZe�Zej�dS(i����(t*tredtbluetTestcBs8eZd�Zd�Zd�Zd�Zdd�ZRS(cCs�|jjt�s;|jjddt�|jjd�n,|jjddt�|jjddt�|j	|_
|j|_dS(Ntselectedtfilltwithtag(
twidgettfind_withtagtCURRENTtdrawt
itemconfigtUNSELECTED_COLORtdtagtaddtagtSELECTED_COLORtxtlastxtytlasty(tselftevent((s>/usr/lib64/python2.7/Demo/tkinter/matt/canvas-mult-item-sel.pyt	mouseDownscCsF|jjd|j|j|j|j�|j|_|j|_dS(NR(R
tmoveRRRR(RR((s>/usr/lib64/python2.7/Demo/tkinter/matt/canvas-mult-item-sel.pyt	mouseMove!s*c	CsA|jjdddddtdt�}|jjddt�dS(NiiRttagsRR(R
tcreate_ovalRR	R(Rtfred((s>/usr/lib64/python2.7/Demo/tkinter/matt/canvas-mult-item-sel.pyt
makeNewDot&scCs(t|ddddd|j�|_t|dddd�|_tj|jd	|j�tj|jd
|j�t|ddddd|j	�|_
d
ttf}t
|ddd|�|_|jjdtdt�|jjdtdtdd�|j
jdtdt�|jjdt�dS(NttexttQUITt
foregroundRtcommandtwidtht5itheights<1>s<B1-Motion>smake a new dotRs�%s dots are selected and can be dragged.
%s are not selected.
Click in a dot to select it.
Click on empty space to deselect all dots.tsideRtexpandi(tButtontquitRtCanvasR
tWidgettbindRRRtbuttonRRtMessagetlabeltpacktBOTTOMtBOTHtXtLEFT(Rtmessage((s>/usr/lib64/python2.7/Demo/tkinter/matt/canvas-mult-item-sel.pyt
createWidgets-s
cCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR4(Rtmaster((s>/usr/lib64/python2.7/Demo/tkinter/matt/canvas-mult-item-sel.pyR6Hs
N(t__name__t
__module__RRRR4tNoneR6(((s>/usr/lib64/python2.7/Demo/tkinter/matt/canvas-mult-item-sel.pyRs
				N(tTkinterRRR5Rttesttmainloop(((s>/usr/lib64/python2.7/Demo/tkinter/matt/canvas-mult-item-sel.pyt<module>s

E	PKb1�Z�F�77+tkinter/matt/not-what-you-might-think-2.pyonu�[����
��^c@sWddlTdefd��YZe�Zejjd�ejjd�ej�dS(i����(t*tTestcBseZd�Zdd�ZRS(cCs�t|dddddd�|_|jjd�|jjdt�t|jdd	d
dd|j�|j_|jjjdt�dS(
Ntwidtht1itheightt
backgroundtgreenitsidettexttQUITt
foregroundtredtcommand(tFrametGpanelt	propagatetpacktLEFTtButtontquitR	(tself((sD/usr/lib64/python2.7/Demo/tkinter/matt/not-what-you-might-think-2.pyt
createWidgetsscCs+tj||�tj|�|j�dS(N(R
t__init__tPacktconfigR(Rtmaster((sD/usr/lib64/python2.7/Demo/tkinter/matt/not-what-you-might-think-2.pyRs
N(t__name__t
__module__RtNoneR(((sD/usr/lib64/python2.7/Demo/tkinter/matt/not-what-you-might-think-2.pyRs	spacker demotpackerN(tTkinterR
RttestRttitleticonnametmainloop(((sD/usr/lib64/python2.7/Demo/tkinter/matt/not-what-you-might-think-2.pyt<module>s

	PKb1�ZL�

)tkinter/matt/printing-coords-of-items.pycnu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBsAeZd�Zd�Zd�Zd�Zd�Zdd�ZRS(cCs�|jjt�s�|jj|jd|jd|jd|jddd�}|jj|d|j�|jj|d|j	�n|j|_
|j|_dS(Ni
tfilltgreens<Enter>s<Leave>(twidgettfind_withtagtCURRENTtdrawtcreate_ovaltxtyttag_bindt
mouseEntert
mouseLeavetlastxtlasty(tselfteventtfred((sB/usr/lib64/python2.7/Demo/tkinter/matt/printing-coords-of-items.pyt	mouseDown	s	+	cCsF|jjt|j|j|j|j�|j|_|j|_dS(N(RtmoveRR	RR
R(RR((sB/usr/lib64/python2.7/Demo/tkinter/matt/printing-coords-of-items.pyt	mouseMoves*cCs+|jjtdd�|jjt�GHdS(NRtred(Rt
itemconfigRtcoords(RR((sB/usr/lib64/python2.7/Demo/tkinter/matt/printing-coords-of-items.pyR"scCs|jjtdd�dS(NRtblue(RRR(RR((sB/usr/lib64/python2.7/Demo/tkinter/matt/printing-coords-of-items.pyR
(scCs�t|ddddd|j�|_|jjdtdt�t|dd	d
d	�|_|jjdt�tj	|jd|j
�tj	|jd|j�dS(
NttexttQUITt
foregroundRtcommandtsideRtwidtht5itheights<1>s<B1-Motion>(tButtontquitRtpacktLEFTtBOTHtCanvasRtWidgettbindRR(R((sB/usr/lib64/python2.7/Demo/tkinter/matt/printing-coords-of-items.pyt
createWidgets-scCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR*(Rtmaster((sB/usr/lib64/python2.7/Demo/tkinter/matt/printing-coords-of-items.pyR,7s
N(	t__name__t
__module__RRRR
R*tNoneR,(((sB/usr/lib64/python2.7/Demo/tkinter/matt/printing-coords-of-items.pyRs					
N(tTkinterR+Rttesttmainloop(((sB/usr/lib64/python2.7/Demo/tkinter/matt/printing-coords-of-items.pyt<module>s
7	PKb1�Z��aI

*tkinter/matt/canvas-moving-or-creating.pycnu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBsAeZd�Zd�Zd�Zd�Zd�Zdd�ZRS(c	Cs�|jjt�s�|jj|jd|jd|jd|jddddt�}|jj|d|j�|jj|d|j	�n|j|_
|j|_dS(Ni
tfilltgreenttagss<Any-Enter>s<Any-Leave>(twidgettfind_withtagtCURRENTtdrawtcreate_ovaltxtyttag_bindt
mouseEntert
mouseLeavetlastxtlasty(tselfteventtfred((sC/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-or-creating.pyt	mouseDown
s	+cCsF|jjt|j|j|j|j�|j|_|j|_dS(N(RtmoveRR
RRR(RR((sC/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-or-creating.pyt	mouseMoves*cCs|jjtdd�dS(NRtred(Rt
itemconfigR(RR((sC/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-or-creating.pyR
$scCs|jjtdd�dS(NRtblue(RRR(RR((sC/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-or-creating.pyR)scCs�t|ddddd|j�|_|jjdtdt�t|dd	d
d	�|_|jjdt�tj	|jd|j
�tj	|jd|j�dS(
NttexttQUITt
foregroundRtcommandtsideRtwidtht5itheights<1>s<B1-Motion>(tButtontquitRtpacktLEFTtBOTHtCanvasRtWidgettbindRR(R((sC/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-or-creating.pyt
createWidgets.scCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR*(Rtmaster((sC/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-or-creating.pyR,8s
N(	t__name__t
__module__RRR
RR*tNoneR,(((sC/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-or-creating.pyRs					
N(tTkinterR+Rttesttmainloop(((sC/usr/lib64/python2.7/Demo/tkinter/matt/canvas-moving-or-creating.pyt<module>s
7	PKb1�Z���d��(tkinter/matt/canvas-w-widget-draw-el.pyonu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs&eZd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((sA/usr/lib64/python2.7/Demo/tkinter/matt/canvas-w-widget-draw-el.pytprinthiscCs�t|ddddd|j�|_|jjdtdt�t|dd	d
d	�|_t|ddd|j�|_	|jj
ddd
|j	�|jjdt�dS(NttexttQUITt
foregroundtredtcommandtsidetfilltwidtht5itheightsthis is a buttoni,twindow(tButtontquitRtpacktBOTTOMtBOTHtCanvastdrawRtbuttont
create_windowtLEFT(R((sA/usr/lib64/python2.7/Demo/tkinter/matt/canvas-w-widget-draw-el.pyt
createWidgets	scCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR(Rtmaster((sA/usr/lib64/python2.7/Demo/tkinter/matt/canvas-w-widget-draw-el.pyRs
N(t__name__t
__module__RRtNoneR(((sA/usr/lib64/python2.7/Demo/tkinter/matt/canvas-w-widget-draw-el.pyRs		N(tTkinterRRttesttmainloop(((sA/usr/lib64/python2.7/Demo/tkinter/matt/canvas-w-widget-draw-el.pyt<module>s
	PKb1�Z�uk/�� tkinter/matt/animation-simple.pynu�[���from Tkinter import *

# This program shows how to use the "after" function to make animation.

class Test(Frame):
    def printit(self):
        print "hi"

    def createWidgets(self):
        self.QUIT = Button(self, text='QUIT', foreground='red',
                           command=self.quit)
        self.QUIT.pack(side=LEFT, fill=BOTH)

        self.draw = Canvas(self, width="5i", height="5i")

        # all of these work..
        self.draw.create_rectangle(0, 0, 10, 10, tags="thing", fill="blue")
        self.draw.pack(side=LEFT)

    def moveThing(self, *args):
        # move 1/10 of an inch every 1/10 sec (1" per second, smoothly)
        self.draw.move("thing", "0.01i", "0.01i")
        self.after(10, self.moveThing)


    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()
        self.after(10, self.moveThing)


test = Test()

test.mainloop()
PKb1�Z��t44tkinter/matt/entry-simple.pycnu�[����
��^c@sSddlTddlZdefd��YZe�Zejjd�ej�dS(i����(t*NtAppcBseZdd�Zd�ZRS(cCsMtj||�|j�t�|_|jj�|jjd|j�dS(Ns<Key-Return>(tFramet__init__tpacktEntrytentrythingytbindtprint_contents(tselftmaster((s6/usr/lib64/python2.7/Demo/tkinter/matt/entry-simple.pyRs


cCsdG|jj�GHdS(Ns"hi. contents of entry is now ---->(Rtget(R	tevent((s6/usr/lib64/python2.7/Demo/tkinter/matt/entry-simple.pyRsN(t__name__t
__module__tNoneRR(((s6/usr/lib64/python2.7/Demo/tkinter/matt/entry-simple.pyRstFoo(tTkintertstringRRtrootR
ttitletmainloop(((s6/usr/lib64/python2.7/Demo/tkinter/matt/entry-simple.pyt<module>s

	PKb1�Z�� �yy)tkinter/matt/bind-w-mult-calls-p-type.pycnu�[����
��^c@sSddlTddlZdefd��YZe�Zejjd�ej�dS(i����(t*NtAppcBs&eZdd�Zd�Zd�ZRS(cCsftj||�|j�t�|_|jj�|jjd|j�|jjd|jd�dS(Ns<Key-Return>t+(tFramet__init__tpacktEntrytentrythingytbindtprint_contentstprint_something_else(tselftmaster((sB/usr/lib64/python2.7/Demo/tkinter/matt/bind-w-mult-calls-p-type.pyRs

cCsdG|jj�GHdS(Ns"hi. contents of entry is now ---->(Rtget(Rtevent((sB/usr/lib64/python2.7/Demo/tkinter/matt/bind-w-mult-calls-p-type.pyR	scCs	dGHdS(Ns,hi. Now doing something completely different((RR((sB/usr/lib64/python2.7/Demo/tkinter/matt/bind-w-mult-calls-p-type.pyR
sN(t__name__t
__module__tNoneRR	R
(((sB/usr/lib64/python2.7/Demo/tkinter/matt/bind-w-mult-calls-p-type.pyRs	tFoo(tTkintertstringRRtrootRttitletmainloop(((sB/usr/lib64/python2.7/Demo/tkinter/matt/bind-w-mult-calls-p-type.pyt<module>s

	PKb1�Z~ǁ���*tkinter/matt/not-what-you-might-think-2.pynu�[���from Tkinter import *


class Test(Frame):
    def createWidgets(self):

        self.Gpanel = Frame(self, width='1i', height='1i',
                            background='green')

        # this line turns off the recalculation of geometry by masters.
        self.Gpanel.propagate(0)

        self.Gpanel.pack(side=LEFT)

        # a QUIT button
        self.Gpanel.QUIT = Button(self.Gpanel, text='QUIT', foreground='red',
                                  command=self.quit)
        self.Gpanel.QUIT.pack(side=LEFT)

    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()

test = Test()

test.master.title('packer demo')
test.master.iconname('packer')

test.mainloop()
PKb1�Z4+���!tkinter/matt/two-radio-groups.pycnu�[����
��^c@s�ddlTd�Zd�Zd�Ze�Zeededd�Zej	de
�e�Ze
�Zee�Zee�Zejee�eed	d
ddd
e�Zej	de�ejd�ejd�ej�dS(i����(t*cCs�ttdddd�}|jdtdd�t|�|_|jjdd	d
|dd�|jjd
idd6|d
6dd6�|jjd
idd6|d
6dd6�|jd�|j|d<|S(NttextsPolitical Partyt	underlineitsidetpadxt2mtlabelt
RepublicantvariabletvalueitradiobuttontDemocratitLibertarianitmenu(	t
MenubuttontmBartpacktLEFTtMenuR
tadd_radiobuttontaddtset(tvartRadiobutton_button((s:/usr/lib64/python2.7/Demo/tkinter/matt/two-radio-groups.pytmakePoliticalPartiess	


cCs�ttdddd�}|jdtdd�t|�|_|jjdd	d
|dd	�|jjddd
|dd�|jjdd
d
|dd
�|jd�|j|d<|S(NRtFlavorsRiRRRRt
StrawberryRR	t	Chocolates
Rocky RoadR
(RRRRRR
RR(RR((s:/usr/lib64/python2.7/Demo/tkinter/matt/two-radio-groups.pytmakeFlavors2s	




cCs#dGtj�GHdGtj�GHHdS(Nsparty iss	flavor is(tpartytgettflavor(((s:/usr/lib64/python2.7/Demo/tkinter/matt/two-radio-groups.pyt
printStuffMstrelieftborderwidthitfillRsprint party and flavort
foregroundtredtcommandRs	menu demoN(tTkinterRRR tTktroottFrametRAISEDRRtXtIntVarRt	StringVarRRtRadiobutton_button2t
tk_menuBartButtontbtTOPttitleticonnametmainloop(((s:/usr/lib64/python2.7/Demo/tkinter/matt/two-radio-groups.pyt<module>s"
							

PKb1�Z����PPtkinter/matt/pong-demo-1.pycnu�[����
��^c@sCddlTddlZdefd��YZe�Zej�dS(i����(t*NtPongcBs&eZd�Zd�Zdd�ZRS(c
Cs�t|ddddd|j�|_|jjdtdt�t|dd	d
d	�|_t|dt	dd
dddd�|_
|j
jdtdt�|jj
dddddd�|_d|_d|_d|_d|_|jjdt�dS(NttexttQUITt
foregroundtredtcommandtsidetfilltwidtht5itheighttorienttlabels
ball speedtfrom_i����ttoidt0is0.10ig�������?g333333�?g�?(tButtontquitRtpacktLEFTtBOTHtCanvastdrawtScalet
HORIZONTALtspeedtBOTTOMtXtcreate_ovaltballtxtyt
velocity_xt
velocity_y(tself((s5/usr/lib64/python2.7/Demo/tkinter/matt/pong-demo-1.pyt
createWidgetss				cGs�|jdks|jdkr1d|j|_n|jdksO|jdkrbd|j|_n|j|jj�d}|j|jj�d}|j||_|j||_|jj|jd|d|�|j	d|j
�dS(Ng@gg�gY@s%rii
(RR!R R"RtgetRtmoveRtaftertmoveBall(R#targstdeltaxtdeltay((s5/usr/lib64/python2.7/Demo/tkinter/matt/pong-demo-1.pyR(s!cCs>tj||�tj|�|j�|jd|j�dS(Ni
(tFramet__init__tPacktconfigR$R'R((R#tmaster((s5/usr/lib64/python2.7/Demo/tkinter/matt/pong-demo-1.pyR--s

N(t__name__t
__module__R$R(tNoneR-(((s5/usr/lib64/python2.7/Demo/tkinter/matt/pong-demo-1.pyRs		(tTkintertstringR,Rtgametmainloop(((s5/usr/lib64/python2.7/Demo/tkinter/matt/pong-demo-1.pyt<module>s
.	PKb1�Z:���
�
%tkinter/matt/canvas-mult-item-sel.pycnu�[����
��^c@sCddlTdZdZdefd��YZe�Zej�dS(i����(t*tredtbluetTestcBs8eZd�Zd�Zd�Zd�Zdd�ZRS(cCs�|jjt�s;|jjddt�|jjd�n,|jjddt�|jjddt�|j	|_
|j|_dS(Ntselectedtfilltwithtag(
twidgettfind_withtagtCURRENTtdrawt
itemconfigtUNSELECTED_COLORtdtagtaddtagtSELECTED_COLORtxtlastxtytlasty(tselftevent((s>/usr/lib64/python2.7/Demo/tkinter/matt/canvas-mult-item-sel.pyt	mouseDownscCsF|jjd|j|j|j|j�|j|_|j|_dS(NR(R
tmoveRRRR(RR((s>/usr/lib64/python2.7/Demo/tkinter/matt/canvas-mult-item-sel.pyt	mouseMove!s*c	CsA|jjdddddtdt�}|jjddt�dS(NiiRttagsRR(R
tcreate_ovalRR	R(Rtfred((s>/usr/lib64/python2.7/Demo/tkinter/matt/canvas-mult-item-sel.pyt
makeNewDot&scCs(t|ddddd|j�|_t|dddd�|_tj|jd	|j�tj|jd
|j�t|ddddd|j	�|_
d
ttf}t
|ddd|�|_|jjdtdt�|jjdtdtdd�|j
jdtdt�|jjdt�dS(NttexttQUITt
foregroundRtcommandtwidtht5itheights<1>s<B1-Motion>smake a new dotRs�%s dots are selected and can be dragged.
%s are not selected.
Click in a dot to select it.
Click on empty space to deselect all dots.tsideRtexpandi(tButtontquitRtCanvasR
tWidgettbindRRRtbuttonRRtMessagetlabeltpacktBOTTOMtBOTHtXtLEFT(Rtmessage((s>/usr/lib64/python2.7/Demo/tkinter/matt/canvas-mult-item-sel.pyt
createWidgets-s
cCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR4(Rtmaster((s>/usr/lib64/python2.7/Demo/tkinter/matt/canvas-mult-item-sel.pyR6Hs
N(t__name__t
__module__RRRR4tNoneR6(((s>/usr/lib64/python2.7/Demo/tkinter/matt/canvas-mult-item-sel.pyRs
				N(tTkinterRRR5Rttesttmainloop(((s>/usr/lib64/python2.7/Demo/tkinter/matt/canvas-mult-item-sel.pyt<module>s

E	PKb1�Z����PPtkinter/matt/pong-demo-1.pyonu�[����
��^c@sCddlTddlZdefd��YZe�Zej�dS(i����(t*NtPongcBs&eZd�Zd�Zdd�ZRS(c
Cs�t|ddddd|j�|_|jjdtdt�t|dd	d
d	�|_t|dt	dd
dddd�|_
|j
jdtdt�|jj
dddddd�|_d|_d|_d|_d|_|jjdt�dS(NttexttQUITt
foregroundtredtcommandtsidetfilltwidtht5itheighttorienttlabels
ball speedtfrom_i����ttoidt0is0.10ig�������?g333333�?g�?(tButtontquitRtpacktLEFTtBOTHtCanvastdrawtScalet
HORIZONTALtspeedtBOTTOMtXtcreate_ovaltballtxtyt
velocity_xt
velocity_y(tself((s5/usr/lib64/python2.7/Demo/tkinter/matt/pong-demo-1.pyt
createWidgetss				cGs�|jdks|jdkr1d|j|_n|jdksO|jdkrbd|j|_n|j|jj�d}|j|jj�d}|j||_|j||_|jj|jd|d|�|j	d|j
�dS(Ng@gg�gY@s%rii
(RR!R R"RtgetRtmoveRtaftertmoveBall(R#targstdeltaxtdeltay((s5/usr/lib64/python2.7/Demo/tkinter/matt/pong-demo-1.pyR(s!cCs>tj||�tj|�|j�|jd|j�dS(Ni
(tFramet__init__tPacktconfigR$R'R((R#tmaster((s5/usr/lib64/python2.7/Demo/tkinter/matt/pong-demo-1.pyR--s

N(t__name__t
__module__R$R(tNoneR-(((s5/usr/lib64/python2.7/Demo/tkinter/matt/pong-demo-1.pyRs		(tTkintertstringR,Rtgametmainloop(((s5/usr/lib64/python2.7/Demo/tkinter/matt/pong-demo-1.pyt<module>s
.	PKb1�ZR��۩�tkinter/matt/menu-simple.pycnu�[����
��^c@s�ddlTd�Zd�Zd�Zd�Ze�Zeededd�Z	e	j
d	e�e�Ze�Z
e	jee
�ejd
�ejd�ej�dS(
i����(t*cCs	dGHdS(Nsopening new file((((s5/usr/lib64/python2.7/Demo/tkinter/matt/menu-simple.pytnew_file$scCs	dGHdS(Nsopening OLD file((((s5/usr/lib64/python2.7/Demo/tkinter/matt/menu-simple.pyt	open_file(scCs�ttdddd�}|jdtdd�t|�|_|jjdd	ddd
t�|jjddddd
t�|jjddddd
d
�|j|d<|S(NttexttFilet	underlineitsidetpadxt1mtlabelsNew...tcommandsOpen...tQuittexittmenu(	t
MenubuttontmBartpacktLEFTtMenuR
tadd_commandRR(tFile_button((s5/usr/lib64/python2.7/Demo/tkinter/matt/menu-simple.pytmakeFileMenu,s
cCs�ttdddd�}|jdtdd�t|�|_|jjdd	d
�|jjddt�|jj	d	d
�|jj	d	d�|jj	d	d�|j|d<|S(NRtEditRiRRRR
R	tUndoitstatetCuttCopytPasteR
(
RRRRRR
taddtentryconfigtDISABLEDR(tEdit_button((s5/usr/lib64/python2.7/Demo/tkinter/matt/menu-simple.pytmakeEditMenuFs
trelieftborderwidthitfills	menu demotpackerN(tTkinterRRRR tTktroottFrametRAISEDRRtXRRt
tk_menuBarttitleticonnametmainloop(((s5/usr/lib64/python2.7/Demo/tkinter/matt/menu-simple.pyt<module>s
#							

PKb1�Z�}�`	`	(tkinter/matt/printing-coords-of-items.pynu�[���from Tkinter import *

# this file demonstrates the creation of widgets as part of a canvas object

class Test(Frame):
    ###################################################################
    ###### Event callbacks for THE CANVAS (not the stuff drawn on it)
    ###################################################################
    def mouseDown(self, event):
        # see if we're inside a dot. If we are, it
        # gets tagged as CURRENT for free by tk.

        if not event.widget.find_withtag(CURRENT):
            # there is no dot here, so we can make one,
            # and bind some interesting behavior to it.
            # ------
            # create a dot, and mark it as current
            fred = self.draw.create_oval(
                event.x - 10, event.y -10, event.x +10, event.y + 10,
                fill="green")
            self.draw.tag_bind(fred, "<Enter>", self.mouseEnter)
            self.draw.tag_bind(fred, "<Leave>", self.mouseLeave)
        self.lastx = event.x
        self.lasty = event.y

    def mouseMove(self, event):
        self.draw.move(CURRENT, event.x - self.lastx, event.y - self.lasty)
        self.lastx = event.x
        self.lasty = event.y

    ###################################################################
    ###### Event callbacks for canvas ITEMS (stuff drawn on the canvas)
    ###################################################################
    def mouseEnter(self, event):
        # the "current" tag is applied to the object the cursor is over.
        # this happens automatically.
        self.draw.itemconfig(CURRENT, fill="red")
        print self.draw.coords(CURRENT)

    def mouseLeave(self, event):
        # the "current" tag is applied to the object the cursor is over.
        # this happens automatically.
        self.draw.itemconfig(CURRENT, fill="blue")

    def createWidgets(self):
        self.QUIT = Button(self, text='QUIT', foreground='red',
                           command=self.quit)
        self.QUIT.pack(side=LEFT, fill=BOTH)
        self.draw = Canvas(self, width="5i", height="5i")
        self.draw.pack(side=LEFT)

        Widget.bind(self.draw, "<1>", self.mouseDown)
        Widget.bind(self.draw, "<B1-Motion>", self.mouseMove)

    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()

test = Test()
test.mainloop()
PKb1�Z�_ ��"tkinter/matt/canvas-demo-simple.pynu�[���from Tkinter import *

# this program creates a canvas and puts a single polygon on the canvas

class Test(Frame):
    def printit(self):
        print "hi"

    def createWidgets(self):
        self.QUIT = Button(self, text='QUIT', foreground='red',
                           command=self.quit)
        self.QUIT.pack(side=BOTTOM, fill=BOTH)

        self.draw = Canvas(self, width="5i", height="5i")

        # see the other demos for other ways of specifying coords for a polygon
        self.draw.create_rectangle(0, 0, "3i", "3i", fill="black")

        self.draw.pack(side=LEFT)

    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()

test = Test()

test.mainloop()
PKb1�Z�>��� tkinter/matt/two-radio-groups.pynu�[���from Tkinter import *

#       The way to think about this is that each radio button menu
#       controls a different variable -- clicking on one of the
#       mutually exclusive choices in a radiobutton assigns some value
#       to an application variable you provide. When you define a
#       radiobutton menu choice, you have the option of specifying the
#       name of a varaible and value to assign to that variable when
#       that choice is selected. This clever mechanism relieves you,
#       the programmer, from having to write a dumb callback that
#       probably wouldn't have done anything more than an assignment
#       anyway. The Tkinter options for this follow their Tk
#       counterparts:
#       {"variable" : my_flavor_variable, "value" : "strawberry"}
#       where my_flavor_variable is an instance of one of the
#       subclasses of Variable, provided in Tkinter.py (there is
#       StringVar(), IntVar(), DoubleVar() and BooleanVar() to choose
#       from)



def makePoliticalParties(var):
    # make menu button
    Radiobutton_button = Menubutton(mBar, text='Political Party',
                                    underline=0)
    Radiobutton_button.pack(side=LEFT, padx='2m')

    # the primary pulldown
    Radiobutton_button.menu = Menu(Radiobutton_button)

    Radiobutton_button.menu.add_radiobutton(label='Republican',
                                            variable=var, value=1)

    Radiobutton_button.menu.add('radiobutton', {'label': 'Democrat',
                                                'variable' : var,
                                                'value' : 2})

    Radiobutton_button.menu.add('radiobutton', {'label': 'Libertarian',
                                                'variable' : var,
                                                'value' : 3})

    var.set(2)

    # set up a pointer from the file menubutton back to the file menu
    Radiobutton_button['menu'] = Radiobutton_button.menu

    return Radiobutton_button


def makeFlavors(var):
    # make menu button
    Radiobutton_button = Menubutton(mBar, text='Flavors',
                                    underline=0)
    Radiobutton_button.pack(side=LEFT, padx='2m')

    # the primary pulldown
    Radiobutton_button.menu = Menu(Radiobutton_button)

    Radiobutton_button.menu.add_radiobutton(label='Strawberry',
                                            variable=var, value='Strawberry')

    Radiobutton_button.menu.add_radiobutton(label='Chocolate',
                                            variable=var, value='Chocolate')

    Radiobutton_button.menu.add_radiobutton(label='Rocky Road',
                                            variable=var, value='Rocky Road')

    # choose a default
    var.set("Chocolate")

    # set up a pointer from the file menubutton back to the file menu
    Radiobutton_button['menu'] = Radiobutton_button.menu

    return Radiobutton_button


def printStuff():
    print "party is", party.get()
    print "flavor is", flavor.get()
    print

#################################################
#### Main starts here ...
root = Tk()


# make a menu bar
mBar = Frame(root, relief=RAISED, borderwidth=2)
mBar.pack(fill=X)

# make two application variables,
# one to control each radio button set
party = IntVar()
flavor = StringVar()

Radiobutton_button = makePoliticalParties(party)
Radiobutton_button2 = makeFlavors(flavor)

# finally, install the buttons in the menu bar.
# This allows for scanning from one menubutton to the next.
mBar.tk_menuBar(Radiobutton_button, Radiobutton_button2)

b = Button(root, text="print party and flavor", foreground="red",
           command=printStuff)
b.pack(side=TOP)

root.title('menu demo')
root.iconname('menu demo')

root.mainloop()
PKb1�Z�̆^+tkinter/matt/not-what-you-might-think-1.pycnu�[����
��^c@sWddlTdefd��YZe�Zejjd�ejjd�ej�dS(i����(t*tTestcBseZd�Zdd�ZRS(cCsxt|dddddd�|_|jjdt�t|jddd	d
d|j�|j_|jjjdt�dS(Ntwidtht1itheightt
backgroundtgreentsidettexttQUITt
foregroundtredtcommand(tFrametGpaneltpacktLEFTtButtontquitR	(tself((sD/usr/lib64/python2.7/Demo/tkinter/matt/not-what-you-might-think-1.pyt
createWidgetsscCs+tj||�tj|�|j�dS(N(R
t__init__tPacktconfigR(Rtmaster((sD/usr/lib64/python2.7/Demo/tkinter/matt/not-what-you-might-think-1.pyRs
N(t__name__t
__module__RtNoneR(((sD/usr/lib64/python2.7/Demo/tkinter/matt/not-what-you-might-think-1.pyRs	
spacker demotpackerN(tTkinterR
RttestRttitleticonnametmainloop(((sD/usr/lib64/python2.7/Demo/tkinter/matt/not-what-you-might-think-1.pyt<module>s

	PKb1�Z���d��(tkinter/matt/canvas-w-widget-draw-el.pycnu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs&eZd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((sA/usr/lib64/python2.7/Demo/tkinter/matt/canvas-w-widget-draw-el.pytprinthiscCs�t|ddddd|j�|_|jjdtdt�t|dd	d
d	�|_t|ddd|j�|_	|jj
ddd
|j	�|jjdt�dS(NttexttQUITt
foregroundtredtcommandtsidetfilltwidtht5itheightsthis is a buttoni,twindow(tButtontquitRtpacktBOTTOMtBOTHtCanvastdrawRtbuttont
create_windowtLEFT(R((sA/usr/lib64/python2.7/Demo/tkinter/matt/canvas-w-widget-draw-el.pyt
createWidgets	scCs+tj||�tj|�|j�dS(N(tFramet__init__tPacktconfigR(Rtmaster((sA/usr/lib64/python2.7/Demo/tkinter/matt/canvas-w-widget-draw-el.pyRs
N(t__name__t
__module__RRtNoneR(((sA/usr/lib64/python2.7/Demo/tkinter/matt/canvas-w-widget-draw-el.pyRs		N(tTkinterRRttesttmainloop(((sA/usr/lib64/python2.7/Demo/tkinter/matt/canvas-w-widget-draw-el.pyt<module>s
	PKb1�Z#~���*tkinter/matt/entry-with-shared-variable.pynu�[���from Tkinter import *
import string

# This program  shows how to make a typein box shadow a program variable.

class App(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()

        self.entrythingy = Entry(self)
        self.entrythingy.pack()

        self.button = Button(self, text="Uppercase The Entry",
                             command=self.upper)
        self.button.pack()

        # here we have the text in the entry widget tied to a variable.
        # changes in the variable are echoed in the widget and vice versa.
        # Very handy.
        # there are other Variable types. See Tkinter.py for all
        # the other variable types that can be shadowed
        self.contents = StringVar()
        self.contents.set("this is a variable")
        self.entrythingy.config(textvariable=self.contents)

        # and here we get a callback when the user hits return. we could
        # make the key that triggers the callback anything we wanted to.
        # other typical options might be <Key-Tab> or <Key> (for anything)
        self.entrythingy.bind('<Key-Return>', self.print_contents)

    def upper(self):
        # notice here, we don't actually refer to the entry box.
        # we just operate on the string variable and we
        # because it's being looked at by the entry widget, changing
        # the variable changes the entry widget display automatically.
        # the strange get/set operators are clunky, true...
        str = string.upper(self.contents.get())
        self.contents.set(str)

    def print_contents(self, event):
        print "hi. contents of entry is now ---->", self.contents.get()

root = App()
root.master.title("Foo")
root.mainloop()
PKb1�Z�J����"tkinter/matt/radiobutton-simple.pynu�[���from Tkinter import *

# This is a demo program that shows how to
# create radio buttons and how to get other widgets to
# share the information in a radio button.
#
# There are other ways of doing this too, but
# the "variable" option of radiobuttons seems to be the easiest.
#
# note how each button has a value it sets the variable to as it gets hit.


class Test(Frame):
    def printit(self):
        print "hi"

    def createWidgets(self):

        self.flavor = StringVar()
        self.flavor.set("chocolate")

        self.radioframe = Frame(self)
        self.radioframe.pack()

        # 'text' is the label
        # 'variable' is the name of the variable that all these radio buttons share
        # 'value' is the value this variable takes on when the radio button is selected
        # 'anchor' makes the text appear left justified (default is centered. ick)
        self.radioframe.choc = Radiobutton(
            self.radioframe, text="Chocolate Flavor",
            variable=self.flavor, value="chocolate",
            anchor=W)
        self.radioframe.choc.pack(fill=X)

        self.radioframe.straw = Radiobutton(
            self.radioframe, text="Strawberry Flavor",
            variable=self.flavor, value="strawberry",
            anchor=W)
        self.radioframe.straw.pack(fill=X)

        self.radioframe.lemon = Radiobutton(
            self.radioframe, text="Lemon Flavor",
            variable=self.flavor, value="lemon",
            anchor=W)
        self.radioframe.lemon.pack(fill=X)

        # this is a text entry that lets you type in the name of a flavor too.
        self.entry = Entry(self, textvariable=self.flavor)
        self.entry.pack(fill=X)
        self.QUIT = Button(self, text='QUIT', foreground='red',
                           command=self.quit)
        self.QUIT.pack(side=BOTTOM, fill=BOTH)


    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()

test = Test()

test.mainloop()
PKb1�Z����'tkinter/matt/canvas-w-widget-draw-el.pynu�[���from Tkinter import *

# this file demonstrates the creation of widgets as part of a canvas object

class Test(Frame):
    def printhi(self):
        print "hi"

    def createWidgets(self):
        self.QUIT = Button(self, text='QUIT', foreground='red',
                           command=self.quit)
        self.QUIT.pack(side=BOTTOM, fill=BOTH)

        self.draw = Canvas(self, width="5i", height="5i")

        self.button = Button(self, text="this is a button",
                             command=self.printhi)

        # note here the coords are given in pixels (form the
        # upper right and corner of the window, as usual for X)
        # but might just have well been given in inches or points or
        # whatever...use the "anchor" option to control what point of the
        # widget (in this case the button) gets mapped to the given x, y.
        # you can specify corners, edges, center, etc...
        self.draw.create_window(300, 300, window=self.button)

        self.draw.pack(side=LEFT)

    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()

test = Test()

test.mainloop()
PKb1�Zo���VV&tkinter/matt/rubber-band-box-demo-1.pynu�[���from Tkinter import *

class Test(Frame):
    def printit(self):
        print "hi"

    def createWidgets(self):
        self.QUIT = Button(self, text='QUIT',
                                  background='red',
                                  foreground='white',
                                  height=3,
                                  command=self.quit)
        self.QUIT.pack(side=BOTTOM, fill=BOTH)

        self.canvasObject = Canvas(self, width="5i", height="5i")
        self.canvasObject.pack(side=LEFT)

    def mouseDown(self, event):
        # canvas x and y take the screen coords from the event and translate
        # them into the coordinate system of the canvas object
        self.startx = self.canvasObject.canvasx(event.x)
        self.starty = self.canvasObject.canvasy(event.y)

    def mouseMotion(self, event):
        # canvas x and y take the screen coords from the event and translate
        # them into the coordinate system of the canvas object
        x = self.canvasObject.canvasx(event.x)
        y = self.canvasObject.canvasy(event.y)

        if (self.startx != event.x)  and (self.starty != event.y) :
            self.canvasObject.delete(self.rubberbandBox)
            self.rubberbandBox = self.canvasObject.create_rectangle(
                self.startx, self.starty, x, y)
            # this flushes the output, making sure that
            # the rectangle makes it to the screen
            # before the next event is handled
            self.update_idletasks()

    def mouseUp(self, event):
        self.canvasObject.delete(self.rubberbandBox)

    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()

        # this is a "tagOrId" for the rectangle we draw on the canvas
        self.rubberbandBox = None

        # and the bindings that make it work..
        Widget.bind(self.canvasObject, "<Button-1>", self.mouseDown)
        Widget.bind(self.canvasObject, "<Button1-Motion>", self.mouseMotion)
        Widget.bind(self.canvasObject, "<Button1-ButtonRelease>", self.mouseUp)


test = Test()

test.mainloop()
PKb1�Z��ZZ��%tkinter/matt/window-creation-more.pyonu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs/eZd�Zd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s>/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-more.pytprintitscCsOt�}t|dd|jd|j�|_|jj�|jd|_dS(NttextsThis is window number %d.tcommandi(tTopleveltButtont	windownumt
makeWindowtlabeltpack(Rtfred((s>/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-more.pyR

s		

cCsrt|ddddd|j�|_|jjdtdt�t|ddd|j�|_|jjdt�dS(	NRtQUITt
foregroundtredRtsidetfillsMake a New Window(RtquitRRtLEFTtBOTHR
thi_there(R((s>/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-more.pyt
createWidgetsscCs4tj||�tj|�d|_|j�dS(Ni(tFramet__init__tPacktconfigR	R(Rtmaster((s>/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-more.pyRs
	N(t__name__t
__module__RR
RtNoneR(((s>/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-more.pyRs			
N(tTkinterRRttesttmainloop(((s>/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-more.pyt<module>s
	PKb1�Z�j�HH#tkinter/matt/radiobutton-simple.pycnu�[����
��^c@s7ddlTdefd��YZe�Zej�dS(i����(t*tTestcBs&eZd�Zd�Zdd�ZRS(cCs	dGHdS(Nthi((tself((s</usr/lib64/python2.7/Demo/tkinter/matt/radiobutton-simple.pytprintitsc
Csvt�|_|jjd�t|�|_|jj�t|jddd|jdddt�|j_|jjjdt	�t|jddd|jdd	dt�|j_
|jj
jdt	�t|jdd
d|jdddt�|j_|jjjdt	�t|d|j�|_
|j
jdt	�t|dd
ddd|j�|_|jjdtdt�dS(Nt	chocolatettextsChocolate FlavortvariabletvaluetanchortfillsStrawberry Flavort
strawberrysLemon FlavortlemonttextvariabletQUITt
foregroundtredtcommandtside(t	StringVartflavortsettFramet
radioframetpacktRadiobuttontWtchoctXtstrawRtEntrytentrytButtontquitRtBOTTOMtBOTH(R((s</usr/lib64/python2.7/Demo/tkinter/matt/radiobutton-simple.pyt
createWidgetss0
cCs+tj||�tj|�|j�dS(N(Rt__init__tPacktconfigR$(Rtmaster((s</usr/lib64/python2.7/Demo/tkinter/matt/radiobutton-simple.pyR%7s
N(t__name__t
__module__RR$tNoneR%(((s</usr/lib64/python2.7/Demo/tkinter/matt/radiobutton-simple.pyR
s		&N(tTkinterRRttesttmainloop(((s</usr/lib64/python2.7/Demo/tkinter/matt/radiobutton-simple.pyt<module>s
/	PKb1�Z�f� 44+tkinter/matt/window-creation-w-location.pycnu�[����
��^c@sYddlTddlZdefd��YZdefd��YZe�Zej�dS(i����(t*Nt
QuitButtoncBseZd�ZRS(cOs\|jd�sd|d<n|jd�s;|j|d<nttj||f||�dS(NttexttQUITtcommand(thas_keytquittapplytButtont__init__(tselftmastertargstkwargs((sD/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-w-location.pyR	s

(t__name__t
__module__R	(((sD/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-w-location.pyR
stTestcBs&eZd�Zd�Zdd�ZRS(cGsgt�}t|dddd�|_|jjdddd�|jjdddd�|jj�dS(Ntwidtht2itheightt0(tTopleveltCanvastlabeltcreate_linetpack(R
Rtfred((sD/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-w-location.pyt
makeWindows
	c
Csit|�|_|jjdtdt�t|ddddddd	|j�|_|jjdt�dS(
NtsidetfillRsMake a New WindowRi2RiR(RRRtLEFTtBOTHRR(R
((sD/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-w-location.pyt
createWidgetsscCs+tj||�tj|�|j�dS(N(tFrameR	tPacktconfigR (R
R((sD/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-w-location.pyR	's
N(RRRR tNoneR	(((sD/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-w-location.pyRs			(tTkintertsysRRR!Rttesttmainloop(((sD/usr/lib64/python2.7/Demo/tkinter/matt/window-creation-w-location.pyt<module>s

	PKb1�Z�(�$tkinter/matt/canvas-mult-item-sel.pynu�[���from Tkinter import *

# allows moving dots with multiple selection.

SELECTED_COLOR = "red"
UNSELECTED_COLOR = "blue"

class Test(Frame):
    ###################################################################
    ###### Event callbacks for THE CANVAS (not the stuff drawn on it)
    ###################################################################
    def mouseDown(self, event):
        # see if we're inside a dot. If we are, it
        # gets tagged as CURRENT for free by tk.

        if not event.widget.find_withtag(CURRENT):
            # we clicked outside of all dots on the canvas. unselect all.

            # re-color everything back to an unselected color
            self.draw.itemconfig("selected", fill=UNSELECTED_COLOR)
            # unselect everything
            self.draw.dtag("selected")
        else:
            # mark as "selected" the thing the cursor is under
            self.draw.addtag("selected", "withtag", CURRENT)
            # color it as selected
            self.draw.itemconfig("selected", fill=SELECTED_COLOR)

        self.lastx = event.x
        self.lasty = event.y


    def mouseMove(self, event):
        self.draw.move("selected", event.x - self.lastx, event.y - self.lasty)
        self.lastx = event.x
        self.lasty = event.y

    def makeNewDot(self):
        # create a dot, and mark it as current
        fred = self.draw.create_oval(0, 0, 20, 20,
                                     fill=SELECTED_COLOR, tags=CURRENT)
        # and make it selected
        self.draw.addtag("selected", "withtag", CURRENT)

    def createWidgets(self):
        self.QUIT = Button(self, text='QUIT', foreground='red',
                           command=self.quit)

        ################
        # make the canvas and bind some behavior to it
        ################
        self.draw = Canvas(self, width="5i", height="5i")
        Widget.bind(self.draw, "<1>", self.mouseDown)
        Widget.bind(self.draw, "<B1-Motion>", self.mouseMove)

        # and other things.....
        self.button = Button(self, text="make a new dot", foreground="blue",
                             command=self.makeNewDot)

        message = ("%s dots are selected and can be dragged.\n"
                   "%s are not selected.\n"
                   "Click in a dot to select it.\n"
                   "Click on empty space to deselect all dots."
                   ) % (SELECTED_COLOR, UNSELECTED_COLOR)
        self.label = Message(self, width="5i", text=message)

        self.QUIT.pack(side=BOTTOM, fill=BOTH)
        self.label.pack(side=BOTTOM, fill=X, expand=1)
        self.button.pack(side=BOTTOM, fill=X)
        self.draw.pack(side=LEFT)

    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()

test = Test()
test.mainloop()
PKb1�ZQ"tkinter/matt/rubber-line-demo-1.pynu�[���from Tkinter import *

class Test(Frame):
    def printit(self):
        print "hi"

    def createWidgets(self):
        self.QUIT = Button(self, text='QUIT',
                                  background='red',
                                  foreground='white',
                                  height=3,
                                  command=self.quit)
        self.QUIT.pack(side=BOTTOM, fill=BOTH)

        self.canvasObject = Canvas(self, width="5i", height="5i")
        self.canvasObject.pack(side=LEFT)

    def mouseDown(self, event):
        # canvas x and y take the screen coords from the event and translate
        # them into the coordinate system of the canvas object
        self.startx = self.canvasObject.canvasx(event.x)
        self.starty = self.canvasObject.canvasy(event.y)

    def mouseMotion(self, event):
        # canvas x and y take the screen coords from the event and translate
        # them into the coordinate system of the canvas object
        x = self.canvasObject.canvasx(event.x)
        y = self.canvasObject.canvasy(event.y)

        if (self.startx != event.x)  and (self.starty != event.y) :
            self.canvasObject.delete(self.rubberbandLine)
            self.rubberbandLine = self.canvasObject.create_line(
                self.startx, self.starty, x, y)
            # this flushes the output, making sure that
            # the rectangle makes it to the screen
            # before the next event is handled
            self.update_idletasks()

    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()
        # this is a "tagOrId" for the rectangle we draw on the canvas
        self.rubberbandLine = None
        Widget.bind(self.canvasObject, "<Button-1>", self.mouseDown)
        Widget.bind(self.canvasObject, "<Button1-Motion>", self.mouseMotion)


test = Test()

test.mainloop()
PKb1�ZR��۩�tkinter/matt/menu-simple.pyonu�[����
��^c@s�ddlTd�Zd�Zd�Zd�Ze�Zeededd�Z	e	j
d	e�e�Ze�Z
e	jee
�ejd
�ejd�ej�dS(
i����(t*cCs	dGHdS(Nsopening new file((((s5/usr/lib64/python2.7/Demo/tkinter/matt/menu-simple.pytnew_file$scCs	dGHdS(Nsopening OLD file((((s5/usr/lib64/python2.7/Demo/tkinter/matt/menu-simple.pyt	open_file(scCs�ttdddd�}|jdtdd�t|�|_|jjdd	ddd
t�|jjddddd
t�|jjddddd
d
�|j|d<|S(NttexttFilet	underlineitsidetpadxt1mtlabelsNew...tcommandsOpen...tQuittexittmenu(	t
MenubuttontmBartpacktLEFTtMenuR
tadd_commandRR(tFile_button((s5/usr/lib64/python2.7/Demo/tkinter/matt/menu-simple.pytmakeFileMenu,s
cCs�ttdddd�}|jdtdd�t|�|_|jjdd	d
�|jjddt�|jj	d	d
�|jj	d	d�|jj	d	d�|j|d<|S(NRtEditRiRRRR
R	tUndoitstatetCuttCopytPasteR
(
RRRRRR
taddtentryconfigtDISABLEDR(tEdit_button((s5/usr/lib64/python2.7/Demo/tkinter/matt/menu-simple.pytmakeEditMenuFs
trelieftborderwidthitfills	menu demotpackerN(tTkinterRRRR tTktroottFrametRAISEDRRtXRRt
tk_menuBarttitleticonnametmainloop(((s5/usr/lib64/python2.7/Demo/tkinter/matt/menu-simple.pyt<module>s
#							

PKb1�Z4+���!tkinter/matt/two-radio-groups.pyonu�[����
��^c@s�ddlTd�Zd�Zd�Ze�Zeededd�Zej	de
�e�Ze
�Zee�Zee�Zejee�eed	d
ddd
e�Zej	de�ejd�ejd�ej�dS(i����(t*cCs�ttdddd�}|jdtdd�t|�|_|jjdd	d
|dd�|jjd
idd6|d
6dd6�|jjd
idd6|d
6dd6�|jd�|j|d<|S(NttextsPolitical Partyt	underlineitsidetpadxt2mtlabelt
RepublicantvariabletvalueitradiobuttontDemocratitLibertarianitmenu(	t
MenubuttontmBartpacktLEFTtMenuR
tadd_radiobuttontaddtset(tvartRadiobutton_button((s:/usr/lib64/python2.7/Demo/tkinter/matt/two-radio-groups.pytmakePoliticalPartiess	


cCs�ttdddd�}|jdtdd�t|�|_|jjdd	d
|dd	�|jjddd
|dd�|jjdd
d
|dd
�|jd�|j|d<|S(NRtFlavorsRiRRRRt
StrawberryRR	t	Chocolates
Rocky RoadR
(RRRRRR
RR(RR((s:/usr/lib64/python2.7/Demo/tkinter/matt/two-radio-groups.pytmakeFlavors2s	




cCs#dGtj�GHdGtj�GHHdS(Nsparty iss	flavor is(tpartytgettflavor(((s:/usr/lib64/python2.7/Demo/tkinter/matt/two-radio-groups.pyt
printStuffMstrelieftborderwidthitfillRsprint party and flavort
foregroundtredtcommandRs	menu demoN(tTkinterRRR tTktroottFrametRAISEDRRtXtIntVarRt	StringVarRRtRadiobutton_button2t
tk_menuBartButtontbtTOPttitleticonnametmainloop(((s:/usr/lib64/python2.7/Demo/tkinter/matt/two-radio-groups.pyt<module>s"
							

PKb1�Z#U����tkinter/matt/entry-simple.pynu�[���from Tkinter import *
import string

# This program  shows how to use a simple type-in box

class App(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()

        self.entrythingy = Entry()
        self.entrythingy.pack()

        # and here we get a callback when the user hits return. we could
        # make the key that triggers the callback anything we wanted to.
        # other typical options might be <Key-Tab> or <Key> (for anything)
        self.entrythingy.bind('<Key-Return>', self.print_contents)

    def print_contents(self, event):
        print "hi. contents of entry is now ---->", self.entrythingy.get()

root = App()
root.master.title("Foo")
root.mainloop()
PKb1�Z��$&$&tkinter/ttk/ttkcalendar.pycnu�[����
��^c@s{dZddlZddlZddlZddlZd�Zdejfd��YZd�Ze	dkrwe�ndS(sQ
Simple calendar using ttk Treeview together with calendar and datetime
classes.
i����NcCs-|dkrtj|�Stj||�SdS(N(tNonetcalendartTextCalendartLocaleTextCalendar(tlocaletfwday((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pytget_calendar
s
tCalendarcBs�eZejjZejjZdd�Zd�Zd�Zd�Z	d�Z
d�Zd�Zd�Z
d�Zd	�Zd
�Zd�Zd�Zed
��ZRS(c
KsY|jdtj�}|jd|jj�j�}|jd|jj�j�}|jdd�}|jdd�}|jdd�}|j||d	�|_d|_	t
jj|||�t
||�|_|j�|j�|j�|j||�gtd
�D]!}	|jjddd
d�^q|_|j�|jjd|j�dS(s�
        WIDGET-SPECIFIC OPTIONS

            locale, firstweekday, year, month, selectbackground,
            selectforeground
        tfirstweekdaytyeartmonthRtselectbackgrounds#ecffc4tselectforegrounds#05640eiittendtvaluess<Map>N(tpopRtMONDAYtdatetimetnowR	R
Rt_datet
_selectiontttktFramet__init__Rt_calt_Calendar__setup_stylest_Calendar__place_widgetst_Calendar__config_calendart_Calendar__setup_selectiontranget	_calendartinsertt_itemst_build_calendartbindt_Calendar__minsize(
tselftmastertkwRR	R
Rtsel_bgtsel_fgt_((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyRs$	


4
cCs�|dkrtd|��n]|dkr;||jd<nA|dkrf|jj|jjd|�ntjj|||�dS(	NR	R
sattribute '%s' is not writeableRt
backgroundRtitem(R	R
(tAttributeErrort_canvast
itemconfigurettextRRt__setitem__(R%R,tvalue((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyR1<scCs�|dkrt|j|�S|dkr3|jdS|dkrX|jj|jjd�Stjitjj||�|6�}||SdS(NR	R
RR+Rtfill(R	R
(	tgetattrRR.titemcgetR0Rt
tclobjs_to_pyRt__getitem__(R%R,tr((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyR7Fs%cCsKtj|j�}d�}|jd|d��|jd|d��dS(NcSs!did|dfgd6fgS(NsButton.focussButton.%sarrowtchildren(R(tdir((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt<lambda>Tss	L.TButtontlefts	R.TButtontright(RtStyleR&tlayout(R%tstyletarrow_layout((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt__setup_stylesQs	c	Cs&tj|�}tj|ddd|j�}tj|ddd|j�}tj|dddd�|_tjd	d
ddd
d�|_|j	d|dddddd�|j
d|�|jj
d|dddddd�|j
d|dddd�|jj	d|dddddd�dS(NR@s	L.TButtontcommands	R.TButtontwidthitanchortcentertshowR
t
selectmodetnonetheightitin_tsidettoptpadyitcolumnitrowitpadxiitexpandR3tbothtbottom(RRtButtont_prev_montht_next_monthtLabelt_headertTreeviewRtpacktgrid(R%thframetlbtntrbtn((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt__place_widgetsZs!"%c	s�|jjd�j�}||jd<|jjddd�|jjddd|d	d�tj��t�fd
�|D��}x0|D](}|jj	|d|d|d
d�q�WdS(NitcolumnstheaderR+tgrey90R
RRttagc3s|]}�j|�VqdS(N(tmeasure(t.0tcol(tfont(s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pys	<genexpr>qsRDtminwidthREte(
RtformatweekheadertsplitRt
tag_configureR ttkFonttFonttmaxRO(R%tcolstmaxwidthRg((Rhs4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt__config_calendarjs

cs�tj�|_tj|jd|dddd�|_��jddd|dd��_�j	d�fd	��|jj	d
�fd��|jj	d|j
�dS(NR+tborderwidthithighlightthicknessR3REtws<ButtonPress-1>cs
�j�S(N(tplace_forget(tevt(tcanvas(s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyR;|R
s<Configure>cs
�j�S(N(Rw(Rx(Ry(s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyR;}R
(RnRot_fonttTkintertCanvasRR.tcreate_textR0R#t_pressed(R%R(R)((Rys4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt__setup_selectionvs!cCsN|jjj�jd�\}}||jd� }|jjj||�dS(Ntxt+(RR&tgeometryRltindextminsize(R%RxRDRJ((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt	__minsize�s!c
Cs�|jj|jj}}|jj||d�}|j�|jd<|jj||�}x~t|j	�D]m\}}|t
|�kr�||ng}g|D]}|r�d|nd^q�}	|jj|d|	�qiWdS(NiR0s%02dR
R(
RR	R
RtformatmonthnamettitleRYtmonthdayscalendart	enumerateR!tlenRR,(
R%R	R
RbtcaltindxR,tweektdaytfmt_week((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyR"�s")c	Cs�|\}}}}|jj|�}|j}|jd|d|�|j|j|||dd�|j|jd|�|jd|jd|d|�d	S(
s%Configure canvas for a new selection.RDRJiiR0RKR�tyN(	RzReR.t	configuretcoordsR0R/tplaceR(	R%R0tbboxR�R�RDRJttextwRy((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt_show_selection�s	"c
Cs�|j|j|j}}}|j|�}|j|�}|sQ||jkrUdS|j|�d}t|�sxdS|t|d�d}|s�dS|j	||�}	|	s�dSd|}|||f|_
|j||	�dS(s"Clicked somewhere in the calendar.NRis%02d(R�R�twidgettidentify_rowtidentify_columnR!R,R�tintR�RR�(
R%RxR�R�R�R,ROtitem_valuesR0R�((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyR~�s"
cCs[|jj�|j|jdd�|_|j|jj|jjd�|_|j�dS(s,Updated calendar to show the previous month.tdaysiN(R.RwRt	timedeltaRR	R
R"(R%((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyRV�s
$cCs�|jj�|jj|jj}}|j|jdtj||�dd�|_|j|jj|jjd�|_|j	�dS(s'Update calendar to show the next month.R�iN(
R.RwRR	R
R�Rt
monthrangeRR"(R%R	R
((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyRW�s
!$cCsF|js
dS|jj|jj}}|j||t|jd��S(s9Return a datetime representing the current selected date.iN(RRRR	R
RR�(R%R	R
((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt	selection�s	N(t__name__t
__module__RRR�RRR1R7RRRRR$R"R�R~RVRWtpropertyR�(((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyRs %	
						
						cCs�ddl}tj�}|jd�tdtj�}|jdddd�d|jkrxt	j
�}|jd	�n|j�dS(
Ni����sTtk CalendarRRRiR3RStwintclam(
tsysR{tTkR�RRtSUNDAYR[tplatformRR>t	theme_usetmainloop(R�troottttkcalR@((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyttest�s
t__main__(
t__doc__RR{RnRRRRR�R�(((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt<module>s	�	
PKb1�Z��[���tkinter/ttk/mac_searchentry.pynu�[���"""Mac style search widget

Translated from Tcl code by Schelte Bron, http://wiki.tcl.tk/18188
"""
import Tkinter
import ttk

root = Tkinter.Tk()

data = """
R0lGODlhKgAaAOfnAFdZVllbWFpcWVtdWlxeW11fXF9hXmBiX2ZnZWhpZ2lraGxua25wbXJ0
cXR2c3V3dHZ4dXh6d3x+e31/fH6AfYSGg4eJhoiKh4qMiYuNio2PjHmUqnqVq3yXrZGTkJKU
kX+asJSWk32cuJWXlIGcs5aYlX6euZeZloOetZial4SftpqbmIWgt4GhvYahuIKivpudmYei
uYOjv5yem4ijuoSkwIWlwYmlu56gnYamwp+hnoenw4unvaCin4ioxJCnuZykrImpxZmlsoaq
zI2pv6KkoZGouoqqxpqms4erzaOloo6qwYurx5Kqu5untIiszqSmo5CrwoysyJeqtpOrvJyo
tZGsw42typSsvaaopZKtxJWtvp6qt4+uy6epppOuxZCvzKiqp5quuZSvxoyx06mrqJWwx42y
1JKxzpmwwaqsqZaxyI6z1ZqxwqutqpOzz4+01qyuq56yvpizypS00Jm0y5W10Zq1zJa20rCy
rpu3zqizwbGzr6C3yZy4z7K0saG4yp250LO1sqK5y5660Z+70qO7zKy4xaC806S8zba4taG9
1KW9zq66x6+7yLi6t6S/1rC8yrm7uLO8xLG9y7q8ubS9xabB2anB07K+zLW+xrO/za7CzrTA
zrjAyLXBz77BvbbC0K/G2LjD0bnE0rLK28TGw8bIxcLL07vP28HN28rMycvOyr/T38DU4cnR
2s/RztHT0NLU0cTY5MrW5MvX5dHX2c3Z59bY1dPb5Nbb3dLe7Nvd2t3f3NXh797g3d3j5dnl
9OPl4eTm4+Ln6tzo9uXn5Obo5eDp8efp5uHq8uXq7ejq5+nr6OPs9Ovu6unu8O3v6+vw8+7w
7ezx9O/x7vDy7/Hz8O/19/P18vT38/L3+fb49Pf59vX6/fj69/b7/vn7+Pr8+ff9//v9+vz/
+/7//P//////////////////////////////////////////////////////////////////
/////////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJZAD/ACwC
AAIAKAAWAAAI/gD/CRz4bwUGCg8eQFjIsGHDBw4iTLAQgqBFgisuePCiyJOpUyBDihRpypMi
Lx8qaLhIMIyGFZ5sAUsmjZrNmzhzWpO2DJgtTysqfGDpxoMbW8ekeQsXzty4p1CjRjUXrps3
asJsuclQ4uKKSbamMR3n1JzZs2jRkh1HzuxVXX8y4CDYAwqua+DInVrRwMGJU2kDp31KThy1
XGWGDlxhi1rTPAUICBBAoEAesoIzn6Vm68MKgVAUHftmzhOCBCtQwQKSoABgzZnJdSMmyIPA
FbCotdUQAIhNa9B6DPCAGbZac+SowVIMRVe4pwkA4GpqDlwuAAmMZx4nTtfnf1mO5JEDNy46
MHJkxQEDgKC49rPjwC0bqGaZuOoZAKjBPE4NgAzUvYcWOc0QZF91imAnCDHJ5JFAAJN0I2Ba
4iRDUC/gOEVNDwIUcEABCAgAAATUTIgWOMBYRFp80ghiAQIIVAAEAwJIYI2JZnUji0XSYAYO
NcsQA8wy0hCTwAASXGOiONFcxAtpTokTHznfiLMNMAkcAMuE43jDC0vLeGOWe2R5o4sn1LgH
GzkWsvTPMgEOaA433Ag4TjjMuDkQMNi0tZ12sqWoJ0HATMPNffAZZ6U0wLAyqJ62RGoLLrhI
aqmlpzwaEAAh+QQJZAD/ACwAAAAAKgAaAAAI/gD/CRw40JEhQoEC+fGjcOHCMRAjRkxDsKLF
f5YcAcID582ZjyBDJhmZZIjJIUySEDHiBMhFghrtdNnRAgSHmzhz6sTZQcSLITx+CHn5bxSk
Nz5MCMGy55CjTVCjbuJEtSrVQ3uwqDBRQwrFi476SHHxow8qXcemVbPGtm21t3CnTaP27Jgu
VHtuiIjBsuImQkRiiEEFTNo2cOTMKV7MuLE5cN68QUOGSgwKG1EqJqJDY8+rZt8UjxtNunTj
cY3DgZOWS46KIFgGjiI0ZIsqaqNNjWjgYMUpx8Adc3v2aosNMAI1DbqyI9WycOb4IAggQEAB
A3lQBxet/TG4cMpI/tHwYeSfIzxM0uTKNs7UgAQrYL1akaDA7+3bueVqY4NJlUhIcQLNYx8E
AIQ01mwjTQ8DeNAdfouNA8440GBCQxJY3MEGD6p4Y844CQCAizcSgpMLAAlAuJ03qOyQRBR3
nEHEK+BMGKIui4kDDAAIPKiiYuSYSMQQRCDCxhiziPMYBgDkEaEaAGQA3Y+MjUPOLFoMoUUh
cKxRC4ngeILiH8Qkk0cCAUzSDZWpzbLEE1EwggcYqWCj2DNADFDAAQUgIAAAEFDDJmPYqNJF
F1s4cscTmCDjDTjdSPOHBQggUAEQDAgggTWDPoYMJkFoUdRmddyyjWLeULMMMcAsIw0x4wkM
IME1g25zyxpHxFYUHmyIggw4H4ojITnfiLMNMAkcAAub4BQjihRdDGTJHmvc4Qo1wD6Imje6
eILbj+BQ4wqu5Q3ECSJ0FOKKMtv4mBg33Pw4zjbKuBIIE1xYpIkhdQQiyi7OtAucj6dt48wu
otQhBRa6VvSJIRwhIkotvgRTzMUYZ6xxMcj4QkspeKDxxRhEmUfIHWjAgQcijEDissuXvCyz
zH7Q8YQURxDhUsn/bCInR3AELfTQZBRt9BBJkCGFFVhMwTNBlnBCSCGEIJQQIAklZMXWRBAR
RRRWENHwRQEBADs="""


s1 = Tkinter.PhotoImage("search1", data=data, format="gif -index 0")
s2 = Tkinter.PhotoImage("search2", data=data, format="gif -index 1")

style = ttk.Style()

style.element_create("Search.field", "image", "search1",
    ("focus", "search2"), border=[22, 7, 14], sticky="ew")

style.layout("Search.entry", [
    ("Search.field", {"sticky": "nswe", "border": 1, "children":
        [("Entry.padding", {"sticky": "nswe", "children":
            [("Entry.textarea", {"sticky": "nswe"})]
        })]
    })]
)

style.configure("Search.entry", background="#b2b2b2")

root.configure(background="#b2b2b2")

e1 = ttk.Entry(style="Search.entry", width=20)
e2 = ttk.Entry(style="Search.entry", width=20)

e1.grid(padx=10, pady=10)
e2.grid(padx=10, pady=10)

root.mainloop()
PKb1�Z|&C]��tkinter/ttk/combo_themes.pycnu�[����
��^c@sNdZddlZdejfd��YZd�ZedkrJe�ndS(s�Ttk Theme Selector.

Although it is a theme selector, you won't notice many changes since
there is only a combobox and a frame around.
i����NtAppcBs#eZd�Zd�Zd�ZRS(cCs-tjj|�tj�|_|j�dS(N(tttktFramet__init__tStyletstylet_setup_widgets(tself((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pyR	scCs5|jj�r1|jj�}|jj|�ndS(N(twidgettcurrenttgetRt	theme_use(Rteventtnewtheme((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pyt
_change_themescCs�t|jj��}|jdd�tj|d|dddd�}|j|d�|jd|j�|j	d	d
�|j	d	ddd
�dS(NisPick a themetvalueststatetreadonlytheightis<<ComboboxSelected>>tfilltxtbothtexpandi(
tlistRttheme_namestinsertRtComboboxtsettbindRtpack(Rtthemestthemes_combo((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pyRs	(t__name__t
__module__RRR(((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pyRs		cCs't�}|jjd�|j�dS(NsTtk Combobox(Rtmasterttitletmainloop(tapp((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pytmain(s	t__main__(t__doc__RRRR&R (((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pyt<module>s
 	PKb1�Z|&C]��tkinter/ttk/combo_themes.pyonu�[����
��^c@sNdZddlZdejfd��YZd�ZedkrJe�ndS(s�Ttk Theme Selector.

Although it is a theme selector, you won't notice many changes since
there is only a combobox and a frame around.
i����NtAppcBs#eZd�Zd�Zd�ZRS(cCs-tjj|�tj�|_|j�dS(N(tttktFramet__init__tStyletstylet_setup_widgets(tself((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pyR	scCs5|jj�r1|jj�}|jj|�ndS(N(twidgettcurrenttgetRt	theme_use(Rteventtnewtheme((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pyt
_change_themescCs�t|jj��}|jdd�tj|d|dddd�}|j|d�|jd|j�|j	d	d
�|j	d	ddd
�dS(NisPick a themetvalueststatetreadonlytheightis<<ComboboxSelected>>tfilltxtbothtexpandi(
tlistRttheme_namestinsertRtComboboxtsettbindRtpack(Rtthemestthemes_combo((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pyRs	(t__name__t
__module__RRR(((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pyRs		cCs't�}|jjd�|j�dS(NsTtk Combobox(Rtmasterttitletmainloop(tapp((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pytmain(s	t__main__(t__doc__RRRR&R (((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pyt<module>s
 	PKb1�ZRh�|@@!tkinter/ttk/listbox_scrollcmd.pyonu�[����
��^c@sWdZddlZddlZej�Zejdd�Zejdddddd	�ejd
ej	dd�Z
e
jed
<e
jdddddd�ejdddd�Z
e
jdddddd�ej�Zejdddddd�ejddd�ejddd�x(ed�D]Zejdde�q+Wej�dS(sWSample taken from: http://www.tkdocs.com/tutorial/morewidgets.html and
converted to Python, mainly to demonstrate xscrollcommand option.

grid [tk::listbox .l -yscrollcommand ".s set" -height 5] -column 0 -row 0 -sticky nwes
grid [ttk::scrollbar .s -command ".l yview" -orient vertical] -column 1 -row 0 -sticky ns
grid [ttk::label .stat -text "Status message here" -anchor w] -column 0 -row 1 -sticky we
grid [ttk::sizegrip .sz] -column 1 -row 1 -sticky se
grid columnconfigure . 0 -weight 1; grid rowconfigure . 0 -weight 1
for {set i 0} {$i<100} {incr i} {
   .l insert end "Line $i of 100"
   }
i����NtheightitcolumnitrowtstickytnwestcommandtorienttverticaltyscrollcommanditnsttextsStatus message heretanchortwtwetsetweightidtendsLine %d of 100(t__doc__tTkintertttktTktroottListboxtltgridt	ScrollbartyviewtstsettLabeltstattSizegriptsztgrid_columnconfiguretgrid_rowconfiguretrangetitinserttmainloop(((s:/usr/lib64/python2.7/Demo/tkinter/ttk/listbox_scrollcmd.pyt<module>s"
PKb1�Zxa��##tkinter/ttk/roundframe.pyonu�[����
��^c	@s�dZddlZddlZej�Zejddd�Zejddd�Zej�Z	e	j
dd	dd%ddd
d�e	jddidd
6fg�e	jddd�ej
dddd�Zejdd�ej
dddd�Zejdddd�ejedd�Zejdd�ejdd��ejdd��ejeddd d!d"d�Zejdddd�ejdd#��ejdd$��ej�dS(&shTtk Frame with rounded corners.

Based on an example by Bryan Oakley, found at: http://wiki.tcl.tk/20152i����NtframeFocusBordertdatas�
R0lGODlhQABAAPcAAHx+fMTCxKSipOTi5JSSlNTS1LSytPTy9IyKjMzKzKyq
rOzq7JyanNza3Ly6vPz6/ISChMTGxKSmpOTm5JSWlNTW1LS2tPT29IyOjMzO
zKyurOzu7JyenNze3Ly+vPz+/OkAKOUA5IEAEnwAAACuQACUAAFBAAB+AFYd
QAC0AABBAAB+AIjMAuEEABINAAAAAHMgAQAAAAAAAAAAAKjSxOIEJBIIpQAA
sRgBMO4AAJAAAHwCAHAAAAUAAJEAAHwAAP+eEP8CZ/8Aif8AAG0BDAUAAJEA
AHwAAIXYAOfxAIESAHwAAABAMQAbMBZGMAAAIEggJQMAIAAAAAAAfqgaXESI
5BdBEgB+AGgALGEAABYAAAAAAACsNwAEAAAMLwAAAH61MQBIAABCM8B+AAAU
AAAAAAAApQAAsf8Brv8AlP8AQf8Afv8AzP8A1P8AQf8AfgAArAAABAAADAAA
AACQDADjAAASAAAAAACAAADVABZBAAB+ALjMwOIEhxINUAAAANIgAOYAAIEA
AHwAAGjSAGEEABYIAAAAAEoBB+MAAIEAAHwCACABAJsAAFAAAAAAAGjJAGGL
AAFBFgB+AGmIAAAQAABHAAB+APQoAOE/ABIAAAAAAADQAADjAAASAAAAAPiF
APcrABKDAAB8ABgAGO4AAJAAqXwAAHAAAAUAAJEAAHwAAP8AAP8AAP8AAP8A
AG0pIwW3AJGSAHx8AEocI/QAAICpAHwAAAA0SABk6xaDEgB8AAD//wD//wD/
/wD//2gAAGEAABYAAAAAAAC0/AHj5AASEgAAAAA01gBkWACDTAB8AFf43PT3
5IASEnwAAOAYd+PuMBKQTwB8AGgAEGG35RaSEgB8AOj/NOL/ZBL/gwD/fMkc
q4sA5UGpEn4AAIg02xBk/0eD/358fx/4iADk5QASEgAAAALnHABkAACDqQB8
AMyINARkZA2DgwB8fBABHL0AAEUAqQAAAIAxKOMAPxIwAAAAAIScAOPxABIS
AAAAAIIAnQwA/0IAR3cAACwAAAAAQABAAAAI/wA/CBxIsKDBgwgTKlzIsKFD
gxceNnxAsaLFixgzUrzAsWPFCw8kDgy5EeQDkBxPolypsmXKlx1hXnS48UEH
CwooMCDAgIJOCjx99gz6k+jQnkWR9lRgYYDJkAk/DlAgIMICZlizat3KtatX
rAsiCNDgtCJClQkoFMgqsu3ArBkoZDgA8uDJAwk4bGDmtm9BZgcYzK078m4D
Cgf4+l0skNkGCg3oUhR4d4GCDIoZM2ZWQMECyZQvLMggIbPmzQIyfCZ5YcME
AwFMn/bLLIKBCRtMHljQQcDV2ZqZTRDQYfWFAwMqUJANvC8zBhUWbDi5YUAB
Bsybt2VGoUKH3AcmdP+Im127xOcJih+oXsEDdvOLuQfIMGBD9QwBlsOnzcBD
hfrsuVfefgzJR599A+CnH4Hb9fcfgu29x6BIBgKYYH4DTojQc/5ZGGGGGhpU
IYIKghgiQRw+GKCEJxZIwXwWlthiQyl6KOCMLsJIIoY4LlQjhDf2mNCI9/Eo
5IYO2sjikX+9eGCRCzL5V5JALillY07GaOSVb1G5ookzEnlhlFx+8OOXZb6V
5Y5kcnlmckGmKaaMaZrpJZxWXjnnlmW++WGdZq5ZXQEetKmnlxPgl6eUYhJq
KKOI0imnoNbF2ScFHQJJwW99TsBAAAVYWEAAHEQAZoi1cQDqAAeEV0EACpT/
JqcACgRQAW6uNWCbYKcyyEwGDBgQwa2tTlBBAhYIQMFejC5AgQAWJNDABK3y
loEDEjCgV6/aOcYBAwp4kIF6rVkXgAEc8IQZVifCBRQHGqya23HGIpsTBgSU
OsFX/PbrVVjpYsCABA4kQCxHu11ogAQUIOAwATpBLDFQFE9sccUYS0wAxD5h
4DACFEggbAHk3jVBA/gtTIHHEADg8sswxyzzzDQDAAEECGAQsgHiTisZResN
gLIHBijwLQEYePzx0kw37fTSSjuMr7ZMzfcgYZUZi58DGsTKwbdgayt22GSP
bXbYY3MggQIaONDzAJ8R9kFlQheQQAAOWGCAARrwdt23Bn8H7vfggBMueOEG
WOBBAAkU0EB9oBGUdXIFZJBABAEEsPjmmnfO+eeeh/55BBEk0Ph/E8Q9meQq
bbDABAN00EADFRRQ++2254777rr3jrvjFTTQwQCpz7u6QRut5/oEzA/g/PPQ
Ry/99NIz//oGrZpUUEAAOw==tframeBorders�
R0lGODlhQABAAPcAAHx+fMTCxKSipOTi5JSSlNTS1LSytPTy9IyKjMzKzKyq
rOzq7JyanNza3Ly6vPz6/ISChMTGxKSmpOTm5JSWlNTW1LS2tPT29IyOjMzO
zKyurOzu7JyenNze3Ly+vPz+/OkAKOUA5IEAEnwAAACuQACUAAFBAAB+AFYd
QAC0AABBAAB+AIjMAuEEABINAAAAAHMgAQAAAAAAAAAAAKjSxOIEJBIIpQAA
sRgBMO4AAJAAAHwCAHAAAAUAAJEAAHwAAP+eEP8CZ/8Aif8AAG0BDAUAAJEA
AHwAAIXYAOfxAIESAHwAAABAMQAbMBZGMAAAIEggJQMAIAAAAAAAfqgaXESI
5BdBEgB+AGgALGEAABYAAAAAAACsNwAEAAAMLwAAAH61MQBIAABCM8B+AAAU
AAAAAAAApQAAsf8Brv8AlP8AQf8Afv8AzP8A1P8AQf8AfgAArAAABAAADAAA
AACQDADjAAASAAAAAACAAADVABZBAAB+ALjMwOIEhxINUAAAANIgAOYAAIEA
AHwAAGjSAGEEABYIAAAAAEoBB+MAAIEAAHwCACABAJsAAFAAAAAAAGjJAGGL
AAFBFgB+AGmIAAAQAABHAAB+APQoAOE/ABIAAAAAAADQAADjAAASAAAAAPiF
APcrABKDAAB8ABgAGO4AAJAAqXwAAHAAAAUAAJEAAHwAAP8AAP8AAP8AAP8A
AG0pIwW3AJGSAHx8AEocI/QAAICpAHwAAAA0SABk6xaDEgB8AAD//wD//wD/
/wD//2gAAGEAABYAAAAAAAC0/AHj5AASEgAAAAA01gBkWACDTAB8AFf43PT3
5IASEnwAAOAYd+PuMBKQTwB8AGgAEGG35RaSEgB8AOj/NOL/ZBL/gwD/fMkc
q4sA5UGpEn4AAIg02xBk/0eD/358fx/4iADk5QASEgAAAALnHABkAACDqQB8
AMyINARkZA2DgwB8fBABHL0AAEUAqQAAAIAxKOMAPxIwAAAAAIScAOPxABIS
AAAAAIIAnQwA/0IAR3cAACwAAAAAQABAAAAI/wA/CBxIsKDBgwgTKlzIsKFD
gxceNnxAsaLFixgzUrzAsWPFCw8kDgy5EeQDkBxPolypsmXKlx1hXnS48UEH
CwooMCDAgIJOCjx99gz6k+jQnkWR9lRgYYDJkAk/DlAgIMICkVgHLoggQIPT
ighVJqBQIKvZghkoZDgA8uDJAwk4bDhLd+ABBmvbjnzbgMKBuoA/bKDQgC1F
gW8XKMgQOHABBQsMI76wIIOExo0FZIhM8sKGCQYCYA4cwcCEDSYPLOgg4Oro
uhMEdOB84cCAChReB2ZQYcGGkxsGFGCgGzCFCh1QH5jQIW3xugwSzD4QvIIH
4s/PUgiQYcCG4BkC5P/ObpaBhwreq18nb3Z79+8Dwo9nL9I8evjWsdOX6D59
fPH71Xeef/kFyB93/sln4EP2Ebjegg31B5+CEDLUIH4PVqiQhOABqKFCF6qn
34cHcfjffCQaFOJtGaZYkIkUuljQigXK+CKCE3po40A0trgjjDru+EGPI/6I
Y4co7kikkAMBmaSNSzL5gZNSDjkghkXaaGIBHjwpY4gThJeljFt2WSWYMQpZ
5pguUnClehS4tuMEDARQgH8FBMBBBExGwIGdAxywXAUBKHCZkAIoEEAFp33W
QGl47ZgBAwZEwKigE1SQgAUCUDCXiwtQIIAFCTQwgaCrZeCABAzIleIGHDD/
oIAHGUznmXABGMABT4xpmBYBHGgAKGq1ZbppThgAG8EEAW61KwYMSOBAApdy
pNp/BkhAAQLcEqCTt+ACJW645I5rLrgEeOsTBtwiQIEElRZg61sTNBBethSw
CwEA/Pbr778ABywwABBAgAAG7xpAq6mGUUTdAPZ6YIACsRKAAbvtZqzxxhxn
jDG3ybbKFHf36ZVYpuE5oIGhHMTqcqswvyxzzDS/HDMHEiiggQMLDxCZXh8k
BnEBCQTggAUGGKCB0ktr0PTTTEfttNRQT22ABR4EkEABDXgnGUEn31ZABglE
EEAAWaeN9tpqt832221HEEECW6M3wc+Hga3SBgtMODBABw00UEEBgxdO+OGG
J4744oZzXUEDHQxwN7F5G7QRdXxPoPkAnHfu+eeghw665n1vIKhJBQUEADs=tRoundedFrametimagetfocustborderitstickytnsewtTEntrytborderwidthitstyletpaddingi
tfilltxtbothtexpandittexttTests	<FocusIn>cCstjdg�S(NR(tframetstate(tevt((s3/usr/lib64/python2.7/Demo/tkinter/ttk/roundframe.pyt<lambda>gts
<FocusOut>cCstjdg�S(Ns!focus(RR(R((s3/usr/lib64/python2.7/Demo/tkinter/ttk/roundframe.pyRhRtbgtwhitethighlightthicknesscCstjdg�S(NR(tframe2R(R((s3/usr/lib64/python2.7/Demo/tkinter/ttk/roundframe.pyRlRcCstjdg�S(Ns!focus(RR(R((s3/usr/lib64/python2.7/Demo/tkinter/ttk/roundframe.pyRmR(RR(t__doc__tTkintertttktTktroott
PhotoImagetimg1timg2tStyleRtelement_createtlayoutt	configuretFrameRtpackRtEntrytentrytbindtTextRtmainloop(((s3/usr/lib64/python2.7/Demo/tkinter/ttk/roundframe.pyt<module>s2&	$	 !PKb1�Z�/
QQtkinter/ttk/combo_themes.pynu�[���"""Ttk Theme Selector.

Although it is a theme selector, you won't notice many changes since
there is only a combobox and a frame around.
"""
import ttk

class App(ttk.Frame):
    def __init__(self):
        ttk.Frame.__init__(self)

        self.style = ttk.Style()
        self._setup_widgets()

    def _change_theme(self, event):
        if event.widget.current(): # value #0 is not a theme
            newtheme = event.widget.get()
            # change to the new theme and refresh all the widgets
            self.style.theme_use(newtheme)

    def _setup_widgets(self):
        themes = list(self.style.theme_names())
        themes.insert(0, "Pick a theme")
        # Create a readonly Combobox which will display 4 values at max,
        # which will cause it to create a scrollbar if there are more
        # than 4 values in total.
        themes_combo = ttk.Combobox(self, values=themes, state="readonly",
                                    height=4)
        themes_combo.set(themes[0]) # sets the combobox value to "Pick a theme"
        # Combobox widget generates a <<ComboboxSelected>> virtual event
        # when the user selects an element. This event is generated after
        # the listbox is unposted (after you select an item, the combobox's
        # listbox disappears, then it is said that listbox is now unposted).
        themes_combo.bind("<<ComboboxSelected>>", self._change_theme)
        themes_combo.pack(fill='x')

        self.pack(fill='both', expand=1)


def main():
    app = App()
    app.master.title("Ttk Combobox")
    app.mainloop()

if __name__ == "__main__":
    main()
PKb1�ZRh�|@@!tkinter/ttk/listbox_scrollcmd.pycnu�[����
��^c@sWdZddlZddlZej�Zejdd�Zejdddddd	�ejd
ej	dd�Z
e
jed
<e
jdddddd�ejdddd�Z
e
jdddddd�ej�Zejdddddd�ejddd�ejddd�x(ed�D]Zejdde�q+Wej�dS(sWSample taken from: http://www.tkdocs.com/tutorial/morewidgets.html and
converted to Python, mainly to demonstrate xscrollcommand option.

grid [tk::listbox .l -yscrollcommand ".s set" -height 5] -column 0 -row 0 -sticky nwes
grid [ttk::scrollbar .s -command ".l yview" -orient vertical] -column 1 -row 0 -sticky ns
grid [ttk::label .stat -text "Status message here" -anchor w] -column 0 -row 1 -sticky we
grid [ttk::sizegrip .sz] -column 1 -row 1 -sticky se
grid columnconfigure . 0 -weight 1; grid rowconfigure . 0 -weight 1
for {set i 0} {$i<100} {incr i} {
   .l insert end "Line $i of 100"
   }
i����NtheightitcolumnitrowtstickytnwestcommandtorienttverticaltyscrollcommanditnsttextsStatus message heretanchortwtwetsetweightidtendsLine %d of 100(t__doc__tTkintertttktTktroottListboxtltgridt	ScrollbartyviewtstsettLabeltstattSizegriptsztgrid_columnconfiguretgrid_rowconfiguretrangetitinserttmainloop(((s:/usr/lib64/python2.7/Demo/tkinter/ttk/listbox_scrollcmd.pyt<module>s"
PKb1�Z�8�~ ~ tkinter/ttk/ttkcalendar.pynu�[���"""
Simple calendar using ttk Treeview together with calendar and datetime
classes.
"""
import calendar
import Tkinter
import tkFont
import ttk

def get_calendar(locale, fwday):
    # instantiate proper calendar class
    if locale is None:
        return calendar.TextCalendar(fwday)
    else:
        return calendar.LocaleTextCalendar(fwday, locale)

class Calendar(ttk.Frame):
    # XXX ToDo: cget and configure

    datetime = calendar.datetime.datetime
    timedelta = calendar.datetime.timedelta

    def __init__(self, master=None, **kw):
        """
        WIDGET-SPECIFIC OPTIONS

            locale, firstweekday, year, month, selectbackground,
            selectforeground
        """
        # remove custom options from kw before initializating ttk.Frame
        fwday = kw.pop('firstweekday', calendar.MONDAY)
        year = kw.pop('year', self.datetime.now().year)
        month = kw.pop('month', self.datetime.now().month)
        locale = kw.pop('locale', None)
        sel_bg = kw.pop('selectbackground', '#ecffc4')
        sel_fg = kw.pop('selectforeground', '#05640e')

        self._date = self.datetime(year, month, 1)
        self._selection = None # no date selected

        ttk.Frame.__init__(self, master, **kw)

        self._cal = get_calendar(locale, fwday)

        self.__setup_styles()       # creates custom styles
        self.__place_widgets()      # pack/grid used widgets
        self.__config_calendar()    # adjust calendar columns and setup tags
        # configure a canvas, and proper bindings, for selecting dates
        self.__setup_selection(sel_bg, sel_fg)

        # store items ids, used for insertion later
        self._items = [self._calendar.insert('', 'end', values='')
                            for _ in range(6)]
        # insert dates in the currently empty calendar
        self._build_calendar()

        # set the minimal size for the widget
        self._calendar.bind('<Map>', self.__minsize)

    def __setitem__(self, item, value):
        if item in ('year', 'month'):
            raise AttributeError("attribute '%s' is not writeable" % item)
        elif item == 'selectbackground':
            self._canvas['background'] = value
        elif item == 'selectforeground':
            self._canvas.itemconfigure(self._canvas.text, item=value)
        else:
            ttk.Frame.__setitem__(self, item, value)

    def __getitem__(self, item):
        if item in ('year', 'month'):
            return getattr(self._date, item)
        elif item == 'selectbackground':
            return self._canvas['background']
        elif item == 'selectforeground':
            return self._canvas.itemcget(self._canvas.text, 'fill')
        else:
            r = ttk.tclobjs_to_py({item: ttk.Frame.__getitem__(self, item)})
            return r[item]

    def __setup_styles(self):
        # custom ttk styles
        style = ttk.Style(self.master)
        arrow_layout = lambda dir: (
            [('Button.focus', {'children': [('Button.%sarrow' % dir, None)]})]
        )
        style.layout('L.TButton', arrow_layout('left'))
        style.layout('R.TButton', arrow_layout('right'))

    def __place_widgets(self):
        # header frame and its widgets
        hframe = ttk.Frame(self)
        lbtn = ttk.Button(hframe, style='L.TButton', command=self._prev_month)
        rbtn = ttk.Button(hframe, style='R.TButton', command=self._next_month)
        self._header = ttk.Label(hframe, width=15, anchor='center')
        # the calendar
        self._calendar = ttk.Treeview(show='', selectmode='none', height=7)

        # pack the widgets
        hframe.pack(in_=self, side='top', pady=4, anchor='center')
        lbtn.grid(in_=hframe)
        self._header.grid(in_=hframe, column=1, row=0, padx=12)
        rbtn.grid(in_=hframe, column=2, row=0)
        self._calendar.pack(in_=self, expand=1, fill='both', side='bottom')

    def __config_calendar(self):
        cols = self._cal.formatweekheader(3).split()
        self._calendar['columns'] = cols
        self._calendar.tag_configure('header', background='grey90')
        self._calendar.insert('', 'end', values=cols, tag='header')
        # adjust its columns width
        font = tkFont.Font()
        maxwidth = max(font.measure(col) for col in cols)
        for col in cols:
            self._calendar.column(col, width=maxwidth, minwidth=maxwidth,
                anchor='e')

    def __setup_selection(self, sel_bg, sel_fg):
        self._font = tkFont.Font()
        self._canvas = canvas = Tkinter.Canvas(self._calendar,
            background=sel_bg, borderwidth=0, highlightthickness=0)
        canvas.text = canvas.create_text(0, 0, fill=sel_fg, anchor='w')

        canvas.bind('<ButtonPress-1>', lambda evt: canvas.place_forget())
        self._calendar.bind('<Configure>', lambda evt: canvas.place_forget())
        self._calendar.bind('<ButtonPress-1>', self._pressed)

    def __minsize(self, evt):
        width, height = self._calendar.master.geometry().split('x')
        height = height[:height.index('+')]
        self._calendar.master.minsize(width, height)

    def _build_calendar(self):
        year, month = self._date.year, self._date.month

        # update header text (Month, YEAR)
        header = self._cal.formatmonthname(year, month, 0)
        self._header['text'] = header.title()

        # update calendar shown dates
        cal = self._cal.monthdayscalendar(year, month)
        for indx, item in enumerate(self._items):
            week = cal[indx] if indx < len(cal) else []
            fmt_week = [('%02d' % day) if day else '' for day in week]
            self._calendar.item(item, values=fmt_week)

    def _show_selection(self, text, bbox):
        """Configure canvas for a new selection."""
        x, y, width, height = bbox

        textw = self._font.measure(text)

        canvas = self._canvas
        canvas.configure(width=width, height=height)
        canvas.coords(canvas.text, width - textw, height / 2 - 1)
        canvas.itemconfigure(canvas.text, text=text)
        canvas.place(in_=self._calendar, x=x, y=y)

    # Callbacks

    def _pressed(self, evt):
        """Clicked somewhere in the calendar."""
        x, y, widget = evt.x, evt.y, evt.widget
        item = widget.identify_row(y)
        column = widget.identify_column(x)

        if not column or not item in self._items:
            # clicked in the weekdays row or just outside the columns
            return

        item_values = widget.item(item)['values']
        if not len(item_values): # row is empty for this month
            return

        text = item_values[int(column[1]) - 1]
        if not text: # date is empty
            return

        bbox = widget.bbox(item, column)
        if not bbox: # calendar not visible yet
            return

        # update and then show selection
        text = '%02d' % text
        self._selection = (text, item, column)
        self._show_selection(text, bbox)

    def _prev_month(self):
        """Updated calendar to show the previous month."""
        self._canvas.place_forget()

        self._date = self._date - self.timedelta(days=1)
        self._date = self.datetime(self._date.year, self._date.month, 1)
        self._build_calendar() # reconstruct calendar

    def _next_month(self):
        """Update calendar to show the next month."""
        self._canvas.place_forget()

        year, month = self._date.year, self._date.month
        self._date = self._date + self.timedelta(
            days=calendar.monthrange(year, month)[1] + 1)
        self._date = self.datetime(self._date.year, self._date.month, 1)
        self._build_calendar() # reconstruct calendar

    # Properties

    @property
    def selection(self):
        """Return a datetime representing the current selected date."""
        if not self._selection:
            return None

        year, month = self._date.year, self._date.month
        return self.datetime(year, month, int(self._selection[0]))

def test():
    import sys
    root = Tkinter.Tk()
    root.title('Ttk Calendar')
    ttkcal = Calendar(firstweekday=calendar.SUNDAY)
    ttkcal.pack(expand=1, fill='both')

    if 'win' not in sys.platform:
        style = ttk.Style()
        style.theme_use('clam')

    root.mainloop()

if __name__ == '__main__':
    test()
PKb1�Z�O���tkinter/ttk/dirbrowser.pyonu�[����
��^c	@s�dZddlZddlZddlZddlZd�Zd�Zd�Zd�Zd�Z	ej
�Zejdd	�Z
ejdd
�Zejdd)dddd�dd��Zeje
d<ejed<ejddddd�ejddddd�ejddddd�ee�ejde�ejd e�ejd!dd"dd#d$�e
jd!d%d"dd#d&�ejd!dd"d%d#d'�ejdd(d%�ejdd(d%�ej�dS(*s`A directory browser using Ttk Treeview.

Based on the demo found in Tk 8.5 library/demos/browse
i����Nc
	Cs�|j|d�dkrdS|j|d�}|j|j|��|j|�}|r_gntjd�tjd�}x1|tj|�D]}d}tjj	||�j
dd�}tjj|�r�d}ntjj|�r�d}ntjj
|�d	}|j|d
d|d||g�}|dkrs|dkr�|j|d
dd�|j|d|�q�q�|dkr�tj|�j}	|j|dd|	�q�q�WdS(Nttypet	directorytfullpatht.s..s\t/tfileitendttexttvaluesitdummytsizes%d bytes(Rs..(tsettdeletetget_childrentparenttglobtostlistdirtNonetpathtjointreplacetisdirtisfiletsplittinserttitemtstattst_size(
ttreetnodeRRtspecial_dirstptptypetfnametidR
((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pyt
populate_tree
s,(!		$cCsStjjd�jdd�}|jddd|d|dg�}t||�dS(	NRs\RtRRRR(RRtabspathRRR$(RtdirR((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pytpopulate_roots&s$cCs |j}t||j��dS(N(twidgetR$tfocus(teventR((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pytupdate_tree+s	cCs�|j}|j�}|j|�r�tjj|j|d��}tjj|�r�tj|�|j	|j
d��t|�q�ndS(NRR%(R)R*RRRR&RRtchdirRR
R((R+RRR((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pyt
change_dir/s	
cCs\t|�t|�}}|dkr>|dkr>|j�n
|j�|j||�dS(s"Hide and show scrollbar as needed.iiN(tfloattgrid_removetgridR(tsbartfirsttlast((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pyt
autoscroll9s


torienttverticalt
horizontaltcolumnsRRR
tdisplaycolumnstyscrollcommandcCstt||�S(N(R5tvsb(tftl((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pyt<lambda>HR%txscrollcommandcCstt||�S(N(R5thsb(R=R>((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pyR?IR%tcommands#0RsDirectory Structuretanchortws	File Sizetstretchitwidthids<<TreeviewOpen>>s<Double-Button-1>tcolumntrowtstickytnsweitnstewtweight(RRR
(t__doc__RRtTkintertttkR$R(R,R.R5tTktroott	ScrollbarR<RAtTreeviewRtyviewtxviewtheadingRGtbindR1tgrid_columnconfiguretgrid_rowconfiguretmainloop(((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pyt<module>s:				
		


PKb1�Z#��gg$tkinter/ttk/treeview_multicolumn.pyonu�[����
��^c@s�dZddlZddlZddlZd6Zd7d8d9d:d;d<d=d>d?d@dAdBdCdDdEgZd1�Zd2efd3��YZd4�Z	e
d5kr�e	�ndS(FsCDemo based on the demo mclist included with tk source distribution.i����Ntcountrytcapitaltcurrencyt	ArgentinasBuenos AirestARSt	AustraliatCanberratAUDtBraziltBraziliatBRLtCanadatOttawatCADtChinatBeijingtCNYtFrancetParistEURtGermanytBerlintIndias	New DelhitINRtItalytRometJapantTokyotJPYtMexicosMexico CitytMXNtRussiatMoscowtRUBsSouth AfricatPretoriatZARsUnited KingdomtLondontGBPs
United StatessWashington, D.C.tUSDcs�g�jd�D]}�j||�|f^q}|jd��x1t|�D]#\}}�j|dd|�qQW�j|d|��fd��dS(s/Sort tree contents when a column is clicked on.ttreverseitcommandcst�|t���S(N(tsortbytint(tcol(t
descendingttree(s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyt<lambda>%R'N(tget_childrentsettsortt	enumeratetmovetheading(R.R,R-tchildtdatatindxtitem((R-R.s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyR*s4tAppcBs#eZd�Zd�Zd�ZRS(cCs!d|_|j�|j�dS(N(tNoneR.t_setup_widgetst_build_tree(tself((s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyt__init__(s	
cCsetjdddddddd$dd�}|jd
d�tj�}|jd
ddt�tjdtdd�|_tjddd|jj	�}tjddd|jj
�}|jjd|jd|j�|jj
ddddddd|�|j
dd dddd!d|�|j
dddd dd"d|�|jdd#d �|jdd#d �dS(%Nt
wraplengtht4itjustifytlefttanchortntpaddingi
iittexts�Ttk is the new Tk themed widget set. One of the widgets it includes is a tree widget, which can be configured to display multiple columns of informational data without displaying the tree itself. This is a simple way to build a listbox that has multiple columns. Clicking on the heading for a column will sort the data by that column. You can also change the width of the columns by dragging the boundary between them.tfilltxtbothtexpandtcolumnstshowtheadingstorienttverticalR)t
horizontaltyscrollcommandtxscrollcommandtcolumnitrowtstickytnsewtin_itnstewtweight(i
ii
i(tttktLabeltpacktFrametTruetTreeviewttree_columnsR.t	Scrollbartyviewtxviewt	configureR1tgridtgrid_columnconfiguretgrid_rowconfigure(R>tmsgt	containertvsbthsb((s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyR<-s	%""c	s	xgtD]_}�jj|d|j�d|�fd���jj|dtj�j|j���qWx�tD]�}�jj	ddd|�xnt
|�D]`\}}tj�j|�}�jjt|dd�|kr��jjt|d|�q�q�WqqWdS(NRGR)cst�j|d�S(Ni(R*R.(tc(R>(s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyR/MR'twidthR'tendtvalues(RbR.R5ttitleRTttkFonttFonttmeasuret	tree_datatinsertR3R;(R>R,R9R8tvaltilen((R>s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyR=Js
/
"(t__name__t
__module__R?R<R=(((s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyR:'s		cCs�tj�}|jd�|jd�ddl}y|jd�Wn*tk
roddl}|jd�nXt	�}|j
�dS(NsMulti-Column Listtmclisti����s~/tile-themes/plastik/plastiks'plastik theme being used without images(tTkintertTktwm_titletwm_iconnamet
plastik_themetinstallt	ExceptiontwarningstwarnR:tmainloop(trootR�R�tapp((s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pytmain[s


	t__main__(RRR(RsBuenos AiresR(RRR(RR	R
(RRR
(RRR(RRR(RRR(Rs	New DelhiR(RRR(RRR(RsMexico CityR(RR R!(sSouth AfricaR"R#(sUnited KingdomR$R%(s
United StatessWashington, D.C.R&(t__doc__R}RsR\RbRvR*tobjectR:R�Rz(((s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyt<module>s0		4	PKb1�Z�-��� tkinter/ttk/listbox_scrollcmd.pynu�[���"""Sample taken from: http://www.tkdocs.com/tutorial/morewidgets.html and
converted to Python, mainly to demonstrate xscrollcommand option.

grid [tk::listbox .l -yscrollcommand ".s set" -height 5] -column 0 -row 0 -sticky nwes
grid [ttk::scrollbar .s -command ".l yview" -orient vertical] -column 1 -row 0 -sticky ns
grid [ttk::label .stat -text "Status message here" -anchor w] -column 0 -row 1 -sticky we
grid [ttk::sizegrip .sz] -column 1 -row 1 -sticky se
grid columnconfigure . 0 -weight 1; grid rowconfigure . 0 -weight 1
for {set i 0} {$i<100} {incr i} {
   .l insert end "Line $i of 100"
   }
"""
import Tkinter
import ttk

root = Tkinter.Tk()

l = Tkinter.Listbox(height=5)
l.grid(column=0, row=0, sticky='nwes')

s = ttk.Scrollbar(command=l.yview, orient='vertical')
l['yscrollcommand'] = s.set
s.grid(column=1, row=0, sticky="ns")

stat = ttk.Label(text="Status message here", anchor='w')
stat.grid(column=0, row=1, sticky='we')

sz = ttk.Sizegrip()
sz.grid(column=1, row=1, sticky='se')

root.grid_columnconfigure(0, weight=1)
root.grid_rowconfigure(0, weight=1)

for i in range(100):
    l.insert('end', "Line %d of 100" % i)

root.mainloop()
PKb1�Z>���tkinter/ttk/mac_searchentry.pyonu�[����
��^c
@sdZddlZddlZej�ZdZejddedd�Zejddedd	�Zej	�Z
e
jd
ddd!d
dddgdd�e
jdd
idd6dd
6didd6didd6fgd6fgd6fg�e
j
ddd�ej
dd�ejdddd�Zejdddd�Zejddd d�ejddd d�ej�dS("s\Mac style search widget

Translated from Tcl code by Schelte Bron, http://wiki.tcl.tk/18188
i����Ns�

R0lGODlhKgAaAOfnAFdZVllbWFpcWVtdWlxeW11fXF9hXmBiX2ZnZWhpZ2lraGxua25wbXJ0
cXR2c3V3dHZ4dXh6d3x+e31/fH6AfYSGg4eJhoiKh4qMiYuNio2PjHmUqnqVq3yXrZGTkJKU
kX+asJSWk32cuJWXlIGcs5aYlX6euZeZloOetZial4SftpqbmIWgt4GhvYahuIKivpudmYei
uYOjv5yem4ijuoSkwIWlwYmlu56gnYamwp+hnoenw4unvaCin4ioxJCnuZykrImpxZmlsoaq
zI2pv6KkoZGouoqqxpqms4erzaOloo6qwYurx5Kqu5untIiszqSmo5CrwoysyJeqtpOrvJyo
tZGsw42typSsvaaopZKtxJWtvp6qt4+uy6epppOuxZCvzKiqp5quuZSvxoyx06mrqJWwx42y
1JKxzpmwwaqsqZaxyI6z1ZqxwqutqpOzz4+01qyuq56yvpizypS00Jm0y5W10Zq1zJa20rCy
rpu3zqizwbGzr6C3yZy4z7K0saG4yp250LO1sqK5y5660Z+70qO7zKy4xaC806S8zba4taG9
1KW9zq66x6+7yLi6t6S/1rC8yrm7uLO8xLG9y7q8ubS9xabB2anB07K+zLW+xrO/za7CzrTA
zrjAyLXBz77BvbbC0K/G2LjD0bnE0rLK28TGw8bIxcLL07vP28HN28rMycvOyr/T38DU4cnR
2s/RztHT0NLU0cTY5MrW5MvX5dHX2c3Z59bY1dPb5Nbb3dLe7Nvd2t3f3NXh797g3d3j5dnl
9OPl4eTm4+Ln6tzo9uXn5Obo5eDp8efp5uHq8uXq7ejq5+nr6OPs9Ovu6unu8O3v6+vw8+7w
7ezx9O/x7vDy7/Hz8O/19/P18vT38/L3+fb49Pf59vX6/fj69/b7/vn7+Pr8+ff9//v9+vz/
+/7//P//////////////////////////////////////////////////////////////////
/////////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJZAD/ACwC
AAIAKAAWAAAI/gD/CRz4bwUGCg8eQFjIsGHDBw4iTLAQgqBFgisuePCiyJOpUyBDihRpypMi
Lx8qaLhIMIyGFZ5sAUsmjZrNmzhzWpO2DJgtTysqfGDpxoMbW8ekeQsXzty4p1CjRjUXrps3
asJsuclQ4uKKSbamMR3n1JzZs2jRkh1HzuxVXX8y4CDYAwqua+DInVrRwMGJU2kDp31KThy1
XGWGDlxhi1rTPAUICBBAoEAesoIzn6Vm68MKgVAUHftmzhOCBCtQwQKSoABgzZnJdSMmyIPA
FbCotdUQAIhNa9B6DPCAGbZac+SowVIMRVe4pwkA4GpqDlwuAAmMZx4nTtfnf1mO5JEDNy46
MHJkxQEDgKC49rPjwC0bqGaZuOoZAKjBPE4NgAzUvYcWOc0QZF91imAnCDHJ5JFAAJN0I2Ba
4iRDUC/gOEVNDwIUcEABCAgAAATUTIgWOMBYRFp80ghiAQIIVAAEAwJIYI2JZnUji0XSYAYO
NcsQA8wy0hCTwAASXGOiONFcxAtpTokTHznfiLMNMAkcAMuE43jDC0vLeGOWe2R5o4sn1LgH
GzkWsvTPMgEOaA433Ag4TjjMuDkQMNi0tZ12sqWoJ0HATMPNffAZZ6U0wLAyqJ62RGoLLrhI
aqmlpzwaEAAh+QQJZAD/ACwAAAAAKgAaAAAI/gD/CRw40JEhQoEC+fGjcOHCMRAjRkxDsKLF
f5YcAcID582ZjyBDJhmZZIjJIUySEDHiBMhFghrtdNnRAgSHmzhz6sTZQcSLITx+CHn5bxSk
Nz5MCMGy55CjTVCjbuJEtSrVQ3uwqDBRQwrFi476SHHxow8qXcemVbPGtm21t3CnTaP27Jgu
VHtuiIjBsuImQkRiiEEFTNo2cOTMKV7MuLE5cN68QUOGSgwKG1EqJqJDY8+rZt8UjxtNunTj
cY3DgZOWS46KIFgGjiI0ZIsqaqNNjWjgYMUpx8Adc3v2aosNMAI1DbqyI9WycOb4IAggQEAB
A3lQBxet/TG4cMpI/tHwYeSfIzxM0uTKNs7UgAQrYL1akaDA7+3bueVqY4NJlUhIcQLNYx8E
AIQ01mwjTQ8DeNAdfouNA8440GBCQxJY3MEGD6p4Y844CQCAizcSgpMLAAlAuJ03qOyQRBR3
nEHEK+BMGKIui4kDDAAIPKiiYuSYSMQQRCDCxhiziPMYBgDkEaEaAGQA3Y+MjUPOLFoMoUUh
cKxRC4ngeILiH8Qkk0cCAUzSDZWpzbLEE1EwggcYqWCj2DNADFDAAQUgIAAAEFDDJmPYqNJF
F1s4cscTmCDjDTjdSPOHBQggUAEQDAgggTWDPoYMJkFoUdRmddyyjWLeULMMMcAsIw0x4wkM
IME1g25zyxpHxFYUHmyIggw4H4ojITnfiLMNMAkcAAub4BQjihRdDGTJHmvc4Qo1wD6Imje6
eILbj+BQ4wqu5Q3ECSJ0FOKKMtv4mBg33Pw4zjbKuBIIE1xYpIkhdQQiyi7OtAucj6dt48wu
otQhBRa6VvSJIRwhIkotvgRTzMUYZ6xxMcj4QkspeKDxxRhEmUfIHWjAgQcijEDissuXvCyz
zH7Q8YQURxDhUsn/bCInR3AELfTQZBRt9BBJkCGFFVhMwTNBlnBCSCGEIJQQIAklZMXWRBAR
RRRWENHwRQEBADs=tsearch1tdatatformatsgif -index 0tsearch2sgif -index 1sSearch.fieldtimagetfocustborderiiitstickytewsSearch.entrytnsweis
Entry.paddingsEntry.textareatchildrent
backgrounds#b2b2b2tstyletwidthitpadxi
tpady(RR(t__doc__tTkintertttktTktrootRt
PhotoImagets1ts2tStyleRtelement_createtlayoutt	configuretEntryte1te2tgridtmainloop(((s8/usr/lib64/python2.7/Demo/tkinter/ttk/mac_searchentry.pyt<module>s()	
+PKb1�Zy5�L��tkinter/ttk/roundframe.pynu�[���"""Ttk Frame with rounded corners.

Based on an example by Bryan Oakley, found at: http://wiki.tcl.tk/20152"""
import Tkinter
import ttk

root = Tkinter.Tk()

img1 = Tkinter.PhotoImage("frameFocusBorder", data="""
R0lGODlhQABAAPcAAHx+fMTCxKSipOTi5JSSlNTS1LSytPTy9IyKjMzKzKyq
rOzq7JyanNza3Ly6vPz6/ISChMTGxKSmpOTm5JSWlNTW1LS2tPT29IyOjMzO
zKyurOzu7JyenNze3Ly+vPz+/OkAKOUA5IEAEnwAAACuQACUAAFBAAB+AFYd
QAC0AABBAAB+AIjMAuEEABINAAAAAHMgAQAAAAAAAAAAAKjSxOIEJBIIpQAA
sRgBMO4AAJAAAHwCAHAAAAUAAJEAAHwAAP+eEP8CZ/8Aif8AAG0BDAUAAJEA
AHwAAIXYAOfxAIESAHwAAABAMQAbMBZGMAAAIEggJQMAIAAAAAAAfqgaXESI
5BdBEgB+AGgALGEAABYAAAAAAACsNwAEAAAMLwAAAH61MQBIAABCM8B+AAAU
AAAAAAAApQAAsf8Brv8AlP8AQf8Afv8AzP8A1P8AQf8AfgAArAAABAAADAAA
AACQDADjAAASAAAAAACAAADVABZBAAB+ALjMwOIEhxINUAAAANIgAOYAAIEA
AHwAAGjSAGEEABYIAAAAAEoBB+MAAIEAAHwCACABAJsAAFAAAAAAAGjJAGGL
AAFBFgB+AGmIAAAQAABHAAB+APQoAOE/ABIAAAAAAADQAADjAAASAAAAAPiF
APcrABKDAAB8ABgAGO4AAJAAqXwAAHAAAAUAAJEAAHwAAP8AAP8AAP8AAP8A
AG0pIwW3AJGSAHx8AEocI/QAAICpAHwAAAA0SABk6xaDEgB8AAD//wD//wD/
/wD//2gAAGEAABYAAAAAAAC0/AHj5AASEgAAAAA01gBkWACDTAB8AFf43PT3
5IASEnwAAOAYd+PuMBKQTwB8AGgAEGG35RaSEgB8AOj/NOL/ZBL/gwD/fMkc
q4sA5UGpEn4AAIg02xBk/0eD/358fx/4iADk5QASEgAAAALnHABkAACDqQB8
AMyINARkZA2DgwB8fBABHL0AAEUAqQAAAIAxKOMAPxIwAAAAAIScAOPxABIS
AAAAAIIAnQwA/0IAR3cAACwAAAAAQABAAAAI/wA/CBxIsKDBgwgTKlzIsKFD
gxceNnxAsaLFixgzUrzAsWPFCw8kDgy5EeQDkBxPolypsmXKlx1hXnS48UEH
CwooMCDAgIJOCjx99gz6k+jQnkWR9lRgYYDJkAk/DlAgIMICZlizat3KtatX
rAsiCNDgtCJClQkoFMgqsu3ArBkoZDgA8uDJAwk4bGDmtm9BZgcYzK078m4D
Cgf4+l0skNkGCg3oUhR4d4GCDIoZM2ZWQMECyZQvLMggIbPmzQIyfCZ5YcME
AwFMn/bLLIKBCRtMHljQQcDV2ZqZTRDQYfWFAwMqUJANvC8zBhUWbDi5YUAB
Bsybt2VGoUKH3AcmdP+Im127xOcJih+oXsEDdvOLuQfIMGBD9QwBlsOnzcBD
hfrsuVfefgzJR599A+CnH4Hb9fcfgu29x6BIBgKYYH4DTojQc/5ZGGGGGhpU
IYIKghgiQRw+GKCEJxZIwXwWlthiQyl6KOCMLsJIIoY4LlQjhDf2mNCI9/Eo
5IYO2sjikX+9eGCRCzL5V5JALillY07GaOSVb1G5ookzEnlhlFx+8OOXZb6V
5Y5kcnlmckGmKaaMaZrpJZxWXjnnlmW++WGdZq5ZXQEetKmnlxPgl6eUYhJq
KKOI0imnoNbF2ScFHQJJwW99TsBAAAVYWEAAHEQAZoi1cQDqAAeEV0EACpT/
JqcACgRQAW6uNWCbYKcyyEwGDBgQwa2tTlBBAhYIQMFejC5AgQAWJNDABK3y
loEDEjCgV6/aOcYBAwp4kIF6rVkXgAEc8IQZVifCBRQHGqya23HGIpsTBgSU
OsFX/PbrVVjpYsCABA4kQCxHu11ogAQUIOAwATpBLDFQFE9sccUYS0wAxD5h
4DACFEggbAHk3jVBA/gtTIHHEADg8sswxyzzzDQDAAEECGAQsgHiTisZResN
gLIHBijwLQEYePzx0kw37fTSSjuMr7ZMzfcgYZUZi58DGsTKwbdgayt22GSP
bXbYY3MggQIaONDzAJ8R9kFlQheQQAAOWGCAARrwdt23Bn8H7vfggBMueOEG
WOBBAAkU0EB9oBGUdXIFZJBABAEEsPjmmnfO+eeeh/55BBEk0Ph/E8Q9meQq
bbDABAN00EADFRRQ++2254777rr3jrvjFTTQwQCpz7u6QRut5/oEzA/g/PPQ
Ry/99NIz//oGrZpUUEAAOw==""")

img2 = Tkinter.PhotoImage("frameBorder", data="""
R0lGODlhQABAAPcAAHx+fMTCxKSipOTi5JSSlNTS1LSytPTy9IyKjMzKzKyq
rOzq7JyanNza3Ly6vPz6/ISChMTGxKSmpOTm5JSWlNTW1LS2tPT29IyOjMzO
zKyurOzu7JyenNze3Ly+vPz+/OkAKOUA5IEAEnwAAACuQACUAAFBAAB+AFYd
QAC0AABBAAB+AIjMAuEEABINAAAAAHMgAQAAAAAAAAAAAKjSxOIEJBIIpQAA
sRgBMO4AAJAAAHwCAHAAAAUAAJEAAHwAAP+eEP8CZ/8Aif8AAG0BDAUAAJEA
AHwAAIXYAOfxAIESAHwAAABAMQAbMBZGMAAAIEggJQMAIAAAAAAAfqgaXESI
5BdBEgB+AGgALGEAABYAAAAAAACsNwAEAAAMLwAAAH61MQBIAABCM8B+AAAU
AAAAAAAApQAAsf8Brv8AlP8AQf8Afv8AzP8A1P8AQf8AfgAArAAABAAADAAA
AACQDADjAAASAAAAAACAAADVABZBAAB+ALjMwOIEhxINUAAAANIgAOYAAIEA
AHwAAGjSAGEEABYIAAAAAEoBB+MAAIEAAHwCACABAJsAAFAAAAAAAGjJAGGL
AAFBFgB+AGmIAAAQAABHAAB+APQoAOE/ABIAAAAAAADQAADjAAASAAAAAPiF
APcrABKDAAB8ABgAGO4AAJAAqXwAAHAAAAUAAJEAAHwAAP8AAP8AAP8AAP8A
AG0pIwW3AJGSAHx8AEocI/QAAICpAHwAAAA0SABk6xaDEgB8AAD//wD//wD/
/wD//2gAAGEAABYAAAAAAAC0/AHj5AASEgAAAAA01gBkWACDTAB8AFf43PT3
5IASEnwAAOAYd+PuMBKQTwB8AGgAEGG35RaSEgB8AOj/NOL/ZBL/gwD/fMkc
q4sA5UGpEn4AAIg02xBk/0eD/358fx/4iADk5QASEgAAAALnHABkAACDqQB8
AMyINARkZA2DgwB8fBABHL0AAEUAqQAAAIAxKOMAPxIwAAAAAIScAOPxABIS
AAAAAIIAnQwA/0IAR3cAACwAAAAAQABAAAAI/wA/CBxIsKDBgwgTKlzIsKFD
gxceNnxAsaLFixgzUrzAsWPFCw8kDgy5EeQDkBxPolypsmXKlx1hXnS48UEH
CwooMCDAgIJOCjx99gz6k+jQnkWR9lRgYYDJkAk/DlAgIMICkVgHLoggQIPT
ighVJqBQIKvZghkoZDgA8uDJAwk4bDhLd+ABBmvbjnzbgMKBuoA/bKDQgC1F
gW8XKMgQOHABBQsMI76wIIOExo0FZIhM8sKGCQYCYA4cwcCEDSYPLOgg4Oro
uhMEdOB84cCAChReB2ZQYcGGkxsGFGCgGzCFCh1QH5jQIW3xugwSzD4QvIIH
4s/PUgiQYcCG4BkC5P/ObpaBhwreq18nb3Z79+8Dwo9nL9I8evjWsdOX6D59
fPH71Xeef/kFyB93/sln4EP2Ebjegg31B5+CEDLUIH4PVqiQhOABqKFCF6qn
34cHcfjffCQaFOJtGaZYkIkUuljQigXK+CKCE3po40A0trgjjDru+EGPI/6I
Y4co7kikkAMBmaSNSzL5gZNSDjkghkXaaGIBHjwpY4gThJeljFt2WSWYMQpZ
5pguUnClehS4tuMEDARQgH8FBMBBBExGwIGdAxywXAUBKHCZkAIoEEAFp33W
QGl47ZgBAwZEwKigE1SQgAUCUDCXiwtQIIAFCTQwgaCrZeCABAzIleIGHDD/
oIAHGUznmXABGMABT4xpmBYBHGgAKGq1ZbppThgAG8EEAW61KwYMSOBAApdy
pNp/BkhAAQLcEqCTt+ACJW645I5rLrgEeOsTBtwiQIEElRZg61sTNBBethSw
CwEA/Pbr778ABywwABBAgAAG7xpAq6mGUUTdAPZ6YIACsRKAAbvtZqzxxhxn
jDG3ybbKFHf36ZVYpuE5oIGhHMTqcqswvyxzzDS/HDMHEiiggQMLDxCZXh8k
BnEBCQTggAUGGKCB0ktr0PTTTEfttNRQT22ABR4EkEABDXgnGUEn31ZABglE
EEAAWaeN9tpqt832221HEEECW6M3wc+Hga3SBgtMODBABw00UEEBgxdO+OGG
J4744oZzXUEDHQxwN7F5G7QRdXxPoPkAnHfu+eeghw665n1vIKhJBQUEADs=""")

style = ttk.Style()

style.element_create("RoundedFrame", "image", "frameBorder",
    ("focus", "frameFocusBorder"), border=16, sticky="nsew")

style.layout("RoundedFrame", [("RoundedFrame", {"sticky": "nsew"})])
style.configure("TEntry", borderwidth=0)

frame = ttk.Frame(style="RoundedFrame", padding=10)
frame.pack(fill='x')

frame2 = ttk.Frame(style="RoundedFrame", padding=10)
frame2.pack(fill='both', expand=1)

entry = ttk.Entry(frame, text='Test')
entry.pack(fill='x')
entry.bind("<FocusIn>", lambda evt: frame.state(["focus"]))
entry.bind("<FocusOut>", lambda evt: frame.state(["!focus"]))

text = Tkinter.Text(frame2, borderwidth=0, bg="white", highlightthickness=0)
text.pack(fill='both', expand=1)
text.bind("<FocusIn>", lambda evt: frame2.state(["focus"]))
text.bind("<FocusOut>", lambda evt: frame2.state(["!focus"]))

root.mainloop()
PKb1�Z#��gg$tkinter/ttk/treeview_multicolumn.pycnu�[����
��^c@s�dZddlZddlZddlZd6Zd7d8d9d:d;d<d=d>d?d@dAdBdCdDdEgZd1�Zd2efd3��YZd4�Z	e
d5kr�e	�ndS(FsCDemo based on the demo mclist included with tk source distribution.i����Ntcountrytcapitaltcurrencyt	ArgentinasBuenos AirestARSt	AustraliatCanberratAUDtBraziltBraziliatBRLtCanadatOttawatCADtChinatBeijingtCNYtFrancetParistEURtGermanytBerlintIndias	New DelhitINRtItalytRometJapantTokyotJPYtMexicosMexico CitytMXNtRussiatMoscowtRUBsSouth AfricatPretoriatZARsUnited KingdomtLondontGBPs
United StatessWashington, D.C.tUSDcs�g�jd�D]}�j||�|f^q}|jd��x1t|�D]#\}}�j|dd|�qQW�j|d|��fd��dS(s/Sort tree contents when a column is clicked on.ttreverseitcommandcst�|t���S(N(tsortbytint(tcol(t
descendingttree(s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyt<lambda>%R'N(tget_childrentsettsortt	enumeratetmovetheading(R.R,R-tchildtdatatindxtitem((R-R.s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyR*s4tAppcBs#eZd�Zd�Zd�ZRS(cCs!d|_|j�|j�dS(N(tNoneR.t_setup_widgetst_build_tree(tself((s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyt__init__(s	
cCsetjdddddddd$dd�}|jd
d�tj�}|jd
ddt�tjdtdd�|_tjddd|jj	�}tjddd|jj
�}|jjd|jd|j�|jj
ddddddd|�|j
dd dddd!d|�|j
dddd dd"d|�|jdd#d �|jdd#d �dS(%Nt
wraplengtht4itjustifytlefttanchortntpaddingi
iittexts�Ttk is the new Tk themed widget set. One of the widgets it includes is a tree widget, which can be configured to display multiple columns of informational data without displaying the tree itself. This is a simple way to build a listbox that has multiple columns. Clicking on the heading for a column will sort the data by that column. You can also change the width of the columns by dragging the boundary between them.tfilltxtbothtexpandtcolumnstshowtheadingstorienttverticalR)t
horizontaltyscrollcommandtxscrollcommandtcolumnitrowtstickytnsewtin_itnstewtweight(i
ii
i(tttktLabeltpacktFrametTruetTreeviewttree_columnsR.t	Scrollbartyviewtxviewt	configureR1tgridtgrid_columnconfiguretgrid_rowconfigure(R>tmsgt	containertvsbthsb((s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyR<-s	%""c	s	xgtD]_}�jj|d|j�d|�fd���jj|dtj�j|j���qWx�tD]�}�jj	ddd|�xnt
|�D]`\}}tj�j|�}�jjt|dd�|kr��jjt|d|�q�q�WqqWdS(NRGR)cst�j|d�S(Ni(R*R.(tc(R>(s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyR/MR'twidthR'tendtvalues(RbR.R5ttitleRTttkFonttFonttmeasuret	tree_datatinsertR3R;(R>R,R9R8tvaltilen((R>s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyR=Js
/
"(t__name__t
__module__R?R<R=(((s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyR:'s		cCs�tj�}|jd�|jd�ddl}y|jd�Wn*tk
roddl}|jd�nXt	�}|j
�dS(NsMulti-Column Listtmclisti����s~/tile-themes/plastik/plastiks'plastik theme being used without images(tTkintertTktwm_titletwm_iconnamet
plastik_themetinstallt	ExceptiontwarningstwarnR:tmainloop(trootR�R�tapp((s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pytmain[s


	t__main__(RRR(RsBuenos AiresR(RRR(RR	R
(RRR
(RRR(RRR(RRR(Rs	New DelhiR(RRR(RRR(RsMexico CityR(RR R!(sSouth AfricaR"R#(sUnited KingdomR$R%(s
United StatessWashington, D.C.R&(t__doc__R}RsR\RbRvR*tobjectR:R�Rz(((s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyt<module>s0		4	PKb1�Zn�nF�	�	 tkinter/ttk/notebook_closebtn.pynu�[���"""A Ttk Notebook with close buttons.

Based on an example by patthoyts, http://paste.tclers.tk/896
"""
import os
import Tkinter
import ttk

root = Tkinter.Tk()

imgdir = os.path.join(os.path.dirname(__file__), 'img')
i1 = Tkinter.PhotoImage("img_close", file=os.path.join(imgdir, 'close.gif'))
i2 = Tkinter.PhotoImage("img_closeactive",
    file=os.path.join(imgdir, 'close_active.gif'))
i3 = Tkinter.PhotoImage("img_closepressed",
    file=os.path.join(imgdir, 'close_pressed.gif'))

style = ttk.Style()

style.element_create("close", "image", "img_close",
    ("active", "pressed", "!disabled", "img_closepressed"),
    ("active", "!disabled", "img_closeactive"), border=8, sticky='')

style.layout("ButtonNotebook", [("ButtonNotebook.client", {"sticky": "nswe"})])
style.layout("ButtonNotebook.Tab", [
    ("ButtonNotebook.tab", {"sticky": "nswe", "children":
        [("ButtonNotebook.padding", {"side": "top", "sticky": "nswe",
                                     "children":
            [("ButtonNotebook.focus", {"side": "top", "sticky": "nswe",
                                       "children":
                [("ButtonNotebook.label", {"side": "left", "sticky": ''}),
                 ("ButtonNotebook.close", {"side": "left", "sticky": ''})]
            })]
        })]
    })]
)

def btn_press(event):
    x, y, widget = event.x, event.y, event.widget
    elem = widget.identify(x, y)
    index = widget.index("@%d,%d" % (x, y))

    if "close" in elem:
        widget.state(['pressed'])
        widget.pressed_index = index

def btn_release(event):
    x, y, widget = event.x, event.y, event.widget

    if not widget.instate(['pressed']):
        return

    elem =  widget.identify(x, y)
    index = widget.index("@%d,%d" % (x, y))

    if "close" in elem and widget.pressed_index == index:
        widget.forget(index)
        widget.event_generate("<<NotebookClosedTab>>")

    widget.state(["!pressed"])
    widget.pressed_index = None


root.bind_class("TNotebook", "<ButtonPress-1>", btn_press, True)
root.bind_class("TNotebook", "<ButtonRelease-1>", btn_release)

# create a ttk notebook with our custom style, and add some tabs to it
nb = ttk.Notebook(width=200, height=200, style="ButtonNotebook")
nb.pressed_index = None
f1 = Tkinter.Frame(nb, background="red")
f2 = Tkinter.Frame(nb, background="green")
f3 = Tkinter.Frame(nb, background="blue")
nb.add(f1, text='Red', padding=3)
nb.add(f2, text='Green', padding=3)
nb.add(f3, text='Blue', padding=3)
nb.pack(expand=1, fill='both')

root.mainloop()
PKb1�Z��yTt%t%tkinter/ttk/plastik_theme.pynu�[���"""This demonstrates good part of the syntax accepted by theme_create.

This is a translation of plastik.tcl to python.
You will need the images used by the plastik theme to test this. The
images (and other tile themes) can be retrived by doing:

$ cvs -z3 -d:pserver:anonymous@tktable.cvs.sourceforge.net:/cvsroot/tktable \
  co tile-themes

To test this module you should do, for example:

import Tkinter
import plastik_theme

root = Tkinter.Tk()
plastik_theme.install(plastik_image_dir)
...

Where plastik_image_dir contains the path to the images directory used by
the plastik theme, something like: tile-themes/plastik/plastik
"""
import os
import glob
import ttk
from Tkinter import PhotoImage

__all__ = ['install']

colors = {
    "frame": "#efefef",
    "disabledfg": "#aaaaaa",
    "selectbg": "#657a9e",
    "selectfg": "#ffffff"
    }

imgs = {}
def _load_imgs(imgdir):
    imgdir = os.path.expanduser(imgdir)
    if not os.path.isdir(imgdir):
        raise Exception("%r is not a directory, can't load images" % imgdir)
    for f in glob.glob("%s/*.gif" % imgdir):
        img = os.path.split(f)[1]
        name = img[:-4]
        imgs[name] = PhotoImage(name, file=f, format="gif89")

def install(imgdir):
    _load_imgs(imgdir)
    style = ttk.Style()
    style.theme_create("plastik", "default", settings={
        ".": {
            "configure":
                {"background": colors['frame'],
                 "troughcolor": colors['frame'],
                 "selectbackground": colors['selectbg'],
                 "selectforeground": colors['selectfg'],
                 "fieldbackground": colors['frame'],
                 "font": "TkDefaultFont",
                 "borderwidth": 1},
            "map": {"foreground": [("disabled", colors['disabledfg'])]}
        },

        "Vertical.TScrollbar": {"layout": [
            ("Vertical.Scrollbar.uparrow", {"side": "top", "sticky": ''}),
            ("Vertical.Scrollbar.downarrow", {"side": "bottom", "sticky": ''}),
            ("Vertical.Scrollbar.uparrow", {"side": "bottom", "sticky": ''}),
            ("Vertical.Scrollbar.trough", {"sticky": "ns", "children":
                [("Vertical.Scrollbar.thumb", {"expand": 1, "unit": 1,
                    "children": [("Vertical.Scrollbar.grip", {"sticky": ''})]
                })]
            })]
        },

        "Horizontal.TScrollbar": {"layout": [
            ("Horizontal.Scrollbar.leftarrow", {"side": "left", "sticky": ''}),
            ("Horizontal.Scrollbar.rightarrow",
                {"side": "right", "sticky": ''}),
            ("Horizontal.Scrollbar.leftarrow",
                {"side": "right", "sticky": ''}),
            ("Horizontal.Scrollbar.trough", {"sticky": "ew", "children":
                [("Horizontal.Scrollbar.thumb", {"expand": 1, "unit": 1,
                    "children": [("Horizontal.Scrollbar.grip", {"sticky": ''})]
                })]
            })]
        },

        "TButton": {
            "configure": {"width": 10, "anchor": "center"},
            "layout": [
                ("Button.button", {"children":
                    [("Button.focus", {"children":
                        [("Button.padding", {"children":
                            [("Button.label", {"side": "left", "expand": 1})]
                        })]
                    })]
                })
            ]
        },

        "Toolbutton": {
            "configure": {"anchor": "center"},
            "layout": [
                ("Toolbutton.border", {"children":
                    [("Toolbutton.button", {"children":
                        [("Toolbutton.padding", {"children":
                            [("Toolbutton.label", {"side":"left", "expand":1})]
                        })]
                    })]
                })
            ]
        },

        "TMenubutton": {"layout": [
            ("Menubutton.button", {"children":
                [("Menubutton.indicator", {"side": "right"}),
                 ("Menubutton.focus", {"children":
                    [("Menubutton.padding", {"children":
                        [("Menubutton.label", {"side": "left", "expand": 1})]
                    })]
                })]
            })]
        },

        "TNotebook": {"configure": {"tabmargins": [0, 2, 0, 0]}},
        "TNotebook.tab": {
            "configure": {"padding": [6, 2, 6, 2], "expand": [0, 0, 2]},
            "map": {"expand": [("selected", [1, 2, 4, 2])]}
        },
        "Treeview": {"configure": {"padding": 0}},

        # elements
        "Button.button": {"element create":
            ("image", 'button-n',
                ("pressed", 'button-p'), ("active", 'button-h'),
                {"border": [4, 10], "padding": 4, "sticky":"ewns"}
            )
        },

        "Toolbutton.button": {"element create":
            ("image", 'tbutton-n',
                ("selected", 'tbutton-p'), ("pressed", 'tbutton-p'),
                ("active", 'tbutton-h'),
                {"border": [4, 9], "padding": 3, "sticky": "news"}
            )
        },

        "Checkbutton.indicator": {"element create":
            ("image", 'check-nu',
                ('active', 'selected', 'check-hc'),
                ('pressed', 'selected', 'check-pc'),
                ('active', 'check-hu'),
                ("selected", 'check-nc'),
                {"sticky": ''}
            )
        },

        "Radiobutton.indicator": {"element create":
            ("image", 'radio-nu',
                ('active', 'selected', 'radio-hc'),
                ('pressed', 'selected', 'radio-pc'),
                ('active', 'radio-hu'), ('selected', 'radio-nc'),
                {"sticky": ''}
            )
        },

        "Horizontal.Scrollbar.thumb": {"element create":
            ("image", 'hsb-n', {"border": 3, "sticky": "ew"})
        },

        "Horizontal.Scrollbar.grip": {"element create": ("image", 'hsb-g')},
        "Horizontal.Scrollbar.trough": {"element create": ("image", 'hsb-t')},
        "Vertical.Scrollbar.thumb": {"element create":
            ("image", 'vsb-n', {"border": 3, "sticky": "ns"})
        },
        "Vertical.Scrollbar.grip": {"element create": ("image", 'vsb-g')},
        "Vertical.Scrollbar.trough": {"element create": ("image", 'vsb-t')},
        "Scrollbar.uparrow": {"element create":
            ("image", 'arrowup-n', ("pressed", 'arrowup-p'), {"sticky": ''})
        },
        "Scrollbar.downarrow": {"element create":
            ("image", 'arrowdown-n',
            ("pressed", 'arrowdown-p'), {'sticky': ''})
        },
        "Scrollbar.leftarrow": {"element create":
            ("image", 'arrowleft-n',
            ("pressed", 'arrowleft-p'), {'sticky': ''})
        },
        "Scrollbar.rightarrow": {"element create":
            ("image", 'arrowright-n', ("pressed", 'arrowright-p'),
            {'sticky': ''})
        },

        "Horizontal.Scale.slider": {"element create":
            ("image", 'hslider-n', {'sticky': ''})
        },
        "Horizontal.Scale.trough": {"element create":
            ("image", 'hslider-t', {'border': 1, 'padding': 0})
        },
        "Vertical.Scale.slider": {"element create":
            ("image", 'vslider-n', {'sticky': ''})
        },
        "Vertical.Scale.trough": {"element create":
            ("image", 'vslider-t', {'border': 1, 'padding': 0})
        },

        "Entry.field": {"element create":
            ("image", 'entry-n',
                ("focus", 'entry-f'),
                {'border': 2, 'padding': [3, 4], 'sticky': 'news'}
            )
        },

        "Labelframe.border": {"element create":
            ("image", 'border', {'border': 4, 'padding': 4, 'sticky': 'news'})
        },

        "Menubutton.button": {"element create":
            ("image", 'combo-r',
                ('active', 'combo-ra'),
                {'sticky': 'news', 'border': [4, 6, 24, 15],
                 'padding': [4, 4, 5]}
            )
        },
        "Menubutton.indicator": {"element create":
            ("image", 'arrow-d', {"sticky": "e", "border": [15, 0, 0, 0]})
        },

        "Combobox.field": {"element create":
            ("image", 'combo-n',
                ('readonly', 'active', 'combo-ra'),
                ('focus', 'active', 'combo-fa'),
                ('active', 'combo-a'), ('!readonly', 'focus', 'combo-f'),
                ('readonly', 'combo-r'),
                {'border': [4, 6, 24, 15], 'padding': [4, 4, 5],
                 'sticky': 'news'}
            )
        },
        "Combobox.downarrow": {"element create":
            ("image", 'arrow-d', {'sticky': 'e', 'border': [15, 0, 0, 0]})
         },

        "Notebook.client": {"element create":
            ("image", 'notebook-c', {'border': 4})
        },
        "Notebook.tab": {"element create":
            ("image", 'notebook-tn',
                ("selected", 'notebook-ts'), ("active", 'notebook-ta'),
                {'padding': [0, 2, 0, 0], 'border': [4, 10, 4, 10]}
            )
        },

        "Progressbar.trough": {"element create":
            ("image", 'hprogress-t', {'border': 2})
        },
        "Horizontal.Progressbar.pbar": {"element create":
            ("image", 'hprogress-b', {'border': [2, 9]})
        },
        "Vertical.Progressbar.pbar": {"element create":
            ("image", 'vprogress-b', {'border': [9, 2]})
        },

        "Treeheading.cell": {"element create":
            ("image", 'tree-n',
                ("pressed", 'tree-p'),
                {'border': [4, 10], 'padding': 4, 'sticky': 'news'}
            )
        }

    })
    style.theme_use("plastik")
PKb1�Z�|!ee!tkinter/ttk/img/close_pressed.gifnu�[���GIF89a��**�ff���;;;;;;;;;;;;!�Created with GIMP!�
,0DJ�'!��	��晅a�A	;PKb1�Z�xU�eetkinter/ttk/img/close.gifnu�[���GIF89a�;;;������;;;;;;;;;;;;!�Created with GIMP!�
,0DJ�'!��	��晅a�A	;PKb1�Z�.�PP tkinter/ttk/img/close_active.gifnu�[���GIF89a�����4���������������!�
,0DJ�'!��	��晅a�A	;PKb1�Z��$&$&tkinter/ttk/ttkcalendar.pyonu�[����
��^c@s{dZddlZddlZddlZddlZd�Zdejfd��YZd�Ze	dkrwe�ndS(sQ
Simple calendar using ttk Treeview together with calendar and datetime
classes.
i����NcCs-|dkrtj|�Stj||�SdS(N(tNonetcalendartTextCalendartLocaleTextCalendar(tlocaletfwday((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pytget_calendar
s
tCalendarcBs�eZejjZejjZdd�Zd�Zd�Zd�Z	d�Z
d�Zd�Zd�Z
d�Zd	�Zd
�Zd�Zd�Zed
��ZRS(c
KsY|jdtj�}|jd|jj�j�}|jd|jj�j�}|jdd�}|jdd�}|jdd�}|j||d	�|_d|_	t
jj|||�t
||�|_|j�|j�|j�|j||�gtd
�D]!}	|jjddd
d�^q|_|j�|jjd|j�dS(s�
        WIDGET-SPECIFIC OPTIONS

            locale, firstweekday, year, month, selectbackground,
            selectforeground
        tfirstweekdaytyeartmonthRtselectbackgrounds#ecffc4tselectforegrounds#05640eiittendtvaluess<Map>N(tpopRtMONDAYtdatetimetnowR	R
Rt_datet
_selectiontttktFramet__init__Rt_calt_Calendar__setup_stylest_Calendar__place_widgetst_Calendar__config_calendart_Calendar__setup_selectiontranget	_calendartinsertt_itemst_build_calendartbindt_Calendar__minsize(
tselftmastertkwRR	R
Rtsel_bgtsel_fgt_((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyRs$	


4
cCs�|dkrtd|��n]|dkr;||jd<nA|dkrf|jj|jjd|�ntjj|||�dS(	NR	R
sattribute '%s' is not writeableRt
backgroundRtitem(R	R
(tAttributeErrort_canvast
itemconfigurettextRRt__setitem__(R%R,tvalue((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyR1<scCs�|dkrt|j|�S|dkr3|jdS|dkrX|jj|jjd�Stjitjj||�|6�}||SdS(NR	R
RR+Rtfill(R	R
(	tgetattrRR.titemcgetR0Rt
tclobjs_to_pyRt__getitem__(R%R,tr((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyR7Fs%cCsKtj|j�}d�}|jd|d��|jd|d��dS(NcSs!did|dfgd6fgS(NsButton.focussButton.%sarrowtchildren(R(tdir((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt<lambda>Tss	L.TButtontlefts	R.TButtontright(RtStyleR&tlayout(R%tstyletarrow_layout((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt__setup_stylesQs	c	Cs&tj|�}tj|ddd|j�}tj|ddd|j�}tj|dddd�|_tjd	d
ddd
d�|_|j	d|dddddd�|j
d|�|jj
d|dddddd�|j
d|dddd�|jj	d|dddddd�dS(NR@s	L.TButtontcommands	R.TButtontwidthitanchortcentertshowR
t
selectmodetnonetheightitin_tsidettoptpadyitcolumnitrowitpadxiitexpandR3tbothtbottom(RRtButtont_prev_montht_next_monthtLabelt_headertTreeviewRtpacktgrid(R%thframetlbtntrbtn((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt__place_widgetsZs!"%c	s�|jjd�j�}||jd<|jjddd�|jjddd|d	d�tj��t�fd
�|D��}x0|D](}|jj	|d|d|d
d�q�WdS(NitcolumnstheaderR+tgrey90R
RRttagc3s|]}�j|�VqdS(N(tmeasure(t.0tcol(tfont(s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pys	<genexpr>qsRDtminwidthREte(
RtformatweekheadertsplitRt
tag_configureR ttkFonttFonttmaxRO(R%tcolstmaxwidthRg((Rhs4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt__config_calendarjs

cs�tj�|_tj|jd|dddd�|_��jddd|dd��_�j	d�fd	��|jj	d
�fd��|jj	d|j
�dS(NR+tborderwidthithighlightthicknessR3REtws<ButtonPress-1>cs
�j�S(N(tplace_forget(tevt(tcanvas(s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyR;|R
s<Configure>cs
�j�S(N(Rw(Rx(Ry(s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyR;}R
(RnRot_fonttTkintertCanvasRR.tcreate_textR0R#t_pressed(R%R(R)((Rys4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt__setup_selectionvs!cCsN|jjj�jd�\}}||jd� }|jjj||�dS(Ntxt+(RR&tgeometryRltindextminsize(R%RxRDRJ((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt	__minsize�s!c
Cs�|jj|jj}}|jj||d�}|j�|jd<|jj||�}x~t|j	�D]m\}}|t
|�kr�||ng}g|D]}|r�d|nd^q�}	|jj|d|	�qiWdS(NiR0s%02dR
R(
RR	R
RtformatmonthnamettitleRYtmonthdayscalendart	enumerateR!tlenRR,(
R%R	R
RbtcaltindxR,tweektdaytfmt_week((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyR"�s")c	Cs�|\}}}}|jj|�}|j}|jd|d|�|j|j|||dd�|j|jd|�|jd|jd|d|�d	S(
s%Configure canvas for a new selection.RDRJiiR0RKR�tyN(	RzReR.t	configuretcoordsR0R/tplaceR(	R%R0tbboxR�R�RDRJttextwRy((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt_show_selection�s	"c
Cs�|j|j|j}}}|j|�}|j|�}|sQ||jkrUdS|j|�d}t|�sxdS|t|d�d}|s�dS|j	||�}	|	s�dSd|}|||f|_
|j||	�dS(s"Clicked somewhere in the calendar.NRis%02d(R�R�twidgettidentify_rowtidentify_columnR!R,R�tintR�RR�(
R%RxR�R�R�R,ROtitem_valuesR0R�((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyR~�s"
cCs[|jj�|j|jdd�|_|j|jj|jjd�|_|j�dS(s,Updated calendar to show the previous month.tdaysiN(R.RwRt	timedeltaRR	R
R"(R%((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyRV�s
$cCs�|jj�|jj|jj}}|j|jdtj||�dd�|_|j|jj|jjd�|_|j	�dS(s'Update calendar to show the next month.R�iN(
R.RwRR	R
R�Rt
monthrangeRR"(R%R	R
((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyRW�s
!$cCsF|js
dS|jj|jj}}|j||t|jd��S(s9Return a datetime representing the current selected date.iN(RRRR	R
RR�(R%R	R
((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt	selection�s	N(t__name__t
__module__RRR�RRR1R7RRRRR$R"R�R~RVRWtpropertyR�(((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyRs %	
						
						cCs�ddl}tj�}|jd�tdtj�}|jdddd�d|jkrxt	j
�}|jd	�n|j�dS(
Ni����sTtk CalendarRRRiR3RStwintclam(
tsysR{tTkR�RRtSUNDAYR[tplatformRR>t	theme_usetmainloop(R�troottttkcalR@((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyttest�s
t__main__(
t__doc__RR{RnRRRRR�R�(((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt<module>s	�	
PKb1�Z��"�P
P
tkinter/ttk/widget_state.pyonu�[����
��^c	@s�dZddlZddddddd	d
dg	Zx eD]Zejde�q;Wd
�Zdejfd��YZd�Ze	dkr�e�ndS(s8Sample demo showing widget states and some font styling.i����Ntactivetdisabledtfocustpressedtselectedt
backgroundtreadonlyt	alternatetinvalidt!cCs%ttt�d}|j|�dS(Ni(tstatestlentstate(twidgettnostate((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pytreset_state
stAppcBs2eZdd�Zdd�Zd�Zd�ZRS(cCstjj|dd�|jj|�tj�|_|jjdd�}t|j	j
d|��}|j	j
d|�|_d|jkr�d|j|_n|d	d
kr�|d	nd|_t
||d	d
kr�dnd	�|_g|_|j�dS(
NtborderwidthitTButtontfontsfont configure %s -sizesfont configure %s -familyt s{%s}it-ti(tttktFramet__init__tmasterttitletStyletstyletlookuptstrttktevaltfont_familytfsize_prefixtintt
base_fsizetupdate_widgetst_setup_widgets(tselfRtbtn_fonttfsize((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyRs#)	icCs4|jjddd|j|j|j|f�dS(NRRs%s %s%d(Rt	configureR"R#R%(R(textra((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyt	_set_font#scCs�|j|�}|s'dg}d}nGt|j��}g|D]}|tkr@|^q@}dt|�}x(|jD]}t|�|j|�qxW|j|�dS(NRiii(	tnametowidgettsettsplitR
RR&RRR-(R(R
tnewtextt
goodstatest
font_extrat	newstatesR((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyt
_new_state's		%

c	Cs�tj|dd�}tj|dddd�}|j|j�ddf|d	<|j�|jj|�|j�|j	d
ddd
�|j	dddd
dd
dd�|j	d
ddd�dS(NttextsEnter states and watchtcursortxtermtvalidatetkeys%Ws%Ptvalidatecommandtfilltxtpadxitsidetlefttpadytanchortntbothtexpandi(
RtButtontEntrytregisterR5RR&tappendR9tpack(R(tbtntentry((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyR'?s

"N(t__name__t
__module__tNoneRR-R5R'(((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyRs	cCstd�}|j�dS(NsWidget State Tester(Rtmainloop(tapp((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pytmainNst__main__(
t__doc__RR
RRIRRRRRRM(((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyt<module>s	@	PKb1�Zw�%>>tkinter/ttk/theme_selector.pycnu�[����
��^c@sZdZddlZddlZdejfd��YZd�ZedkrVe�ndS(s�Ttk Theme Selector v2.

This is an improvement from the other theme selector (themes_combo.py)
since now you can notice theme changes in Ttk Combobox, Ttk Frame,
Ttk Label and Ttk Button.
i����NtAppcBs,eZd�Zd�Zd�Zd�ZRS(cCsHtjj|dd�tj�|_tj|d�|_|j�dS(Ntborderwidthii(	tttktFramet__init__tStyletstyletTkintertIntVarttheme_autochanget_setup_widgets(tself((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyRscCs|jj|jj��dS(N(Rt	theme_usetthemes_combotget(R((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyt
_change_themescCs |jj�r|j�ndS(N(R	RR(Rtwidget((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyt_theme_sel_changedscCs�tj|dd�}|jj�}tj|d|dd�|_|jj|d�|jjd|j�tj	|ddd	|j
�}tj|dd
d|j�}|j
dd
dd�|jj
dddddd
dd�|j
dddddd
dd�|j
dddddddd
�|j�}|jddd�|jddd�|jddd�|j
dddddddddd�dS(NttexttThemestvalueststatetreadonlyis<<ComboboxSelected>>sChange Themetcommands-Change themes when combobox item is activatedtvariabletipadxitstickytwtrowtcolumnitpadxtewitet
columnspanitpadytweighttnsewtrowspan(RtLabelRttheme_namestComboboxR
tsettbindRtButtonRtCheckbuttonR	tgridtwinfo_topleveltrowconfiguretcolumnconfigure(Rt
themes_lbltthemest
change_btnttheme_change_checkbtnttop((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyR
s&%""(t__name__t
__module__RRRR
(((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyR
s	
		cCs't�}|jjd�|j�dS(NsTheme Selector(Rtmasterttitletmainloop(tapp((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pytmain7s	t__main__(t__doc__RRRRR<R6(((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyt<module>s-	PKb1�Za�O���tkinter/ttk/theme_selector.pynu�[���"""Ttk Theme Selector v2.

This is an improvement from the other theme selector (themes_combo.py)
since now you can notice theme changes in Ttk Combobox, Ttk Frame,
Ttk Label and Ttk Button.
"""
import Tkinter
import ttk

class App(ttk.Frame):
    def __init__(self):
        ttk.Frame.__init__(self, borderwidth=3)

        self.style = ttk.Style()

        # XXX Ideally I wouldn't want to create a Tkinter.IntVar to make
        #     it works with Checkbutton variable option.
        self.theme_autochange = Tkinter.IntVar(self, 0)
        self._setup_widgets()

    def _change_theme(self):
        self.style.theme_use(self.themes_combo.get())

    def _theme_sel_changed(self, widget):
        if self.theme_autochange.get():
            self._change_theme()

    def _setup_widgets(self):
        themes_lbl = ttk.Label(self, text="Themes")

        themes = self.style.theme_names()
        self.themes_combo = ttk.Combobox(self, values=themes, state="readonly")
        self.themes_combo.set(themes[0])
        self.themes_combo.bind("<<ComboboxSelected>>", self._theme_sel_changed)

        change_btn = ttk.Button(self, text='Change Theme',
            command=self._change_theme)

        theme_change_checkbtn = ttk.Checkbutton(self,
            text="Change themes when combobox item is activated",
            variable=self.theme_autochange)

        themes_lbl.grid(ipadx=6, sticky="w")
        self.themes_combo.grid(row=0, column=1, padx=6, sticky="ew")
        change_btn.grid(row=0, column=2, padx=6, sticky="e")
        theme_change_checkbtn.grid(row=1, columnspan=3, sticky="w", pady=6)

        top = self.winfo_toplevel()
        top.rowconfigure(0, weight=1)
        top.columnconfigure(0, weight=1)
        self.columnconfigure(1, weight=1)
        self.grid(row=0, column=0, sticky="nsew", columnspan=3, rowspan=2)


def main():
    app = App()
    app.master.title("Theme Selector")
    app.mainloop()

if __name__ == "__main__":
    main()
PKb1�Zxa��##tkinter/ttk/roundframe.pycnu�[����
��^c	@s�dZddlZddlZej�Zejddd�Zejddd�Zej�Z	e	j
dd	dd%ddd
d�e	jddidd
6fg�e	jddd�ej
dddd�Zejdd�ej
dddd�Zejdddd�ejedd�Zejdd�ejdd��ejdd��ejeddd d!d"d�Zejdddd�ejdd#��ejdd$��ej�dS(&shTtk Frame with rounded corners.

Based on an example by Bryan Oakley, found at: http://wiki.tcl.tk/20152i����NtframeFocusBordertdatas�
R0lGODlhQABAAPcAAHx+fMTCxKSipOTi5JSSlNTS1LSytPTy9IyKjMzKzKyq
rOzq7JyanNza3Ly6vPz6/ISChMTGxKSmpOTm5JSWlNTW1LS2tPT29IyOjMzO
zKyurOzu7JyenNze3Ly+vPz+/OkAKOUA5IEAEnwAAACuQACUAAFBAAB+AFYd
QAC0AABBAAB+AIjMAuEEABINAAAAAHMgAQAAAAAAAAAAAKjSxOIEJBIIpQAA
sRgBMO4AAJAAAHwCAHAAAAUAAJEAAHwAAP+eEP8CZ/8Aif8AAG0BDAUAAJEA
AHwAAIXYAOfxAIESAHwAAABAMQAbMBZGMAAAIEggJQMAIAAAAAAAfqgaXESI
5BdBEgB+AGgALGEAABYAAAAAAACsNwAEAAAMLwAAAH61MQBIAABCM8B+AAAU
AAAAAAAApQAAsf8Brv8AlP8AQf8Afv8AzP8A1P8AQf8AfgAArAAABAAADAAA
AACQDADjAAASAAAAAACAAADVABZBAAB+ALjMwOIEhxINUAAAANIgAOYAAIEA
AHwAAGjSAGEEABYIAAAAAEoBB+MAAIEAAHwCACABAJsAAFAAAAAAAGjJAGGL
AAFBFgB+AGmIAAAQAABHAAB+APQoAOE/ABIAAAAAAADQAADjAAASAAAAAPiF
APcrABKDAAB8ABgAGO4AAJAAqXwAAHAAAAUAAJEAAHwAAP8AAP8AAP8AAP8A
AG0pIwW3AJGSAHx8AEocI/QAAICpAHwAAAA0SABk6xaDEgB8AAD//wD//wD/
/wD//2gAAGEAABYAAAAAAAC0/AHj5AASEgAAAAA01gBkWACDTAB8AFf43PT3
5IASEnwAAOAYd+PuMBKQTwB8AGgAEGG35RaSEgB8AOj/NOL/ZBL/gwD/fMkc
q4sA5UGpEn4AAIg02xBk/0eD/358fx/4iADk5QASEgAAAALnHABkAACDqQB8
AMyINARkZA2DgwB8fBABHL0AAEUAqQAAAIAxKOMAPxIwAAAAAIScAOPxABIS
AAAAAIIAnQwA/0IAR3cAACwAAAAAQABAAAAI/wA/CBxIsKDBgwgTKlzIsKFD
gxceNnxAsaLFixgzUrzAsWPFCw8kDgy5EeQDkBxPolypsmXKlx1hXnS48UEH
CwooMCDAgIJOCjx99gz6k+jQnkWR9lRgYYDJkAk/DlAgIMICZlizat3KtatX
rAsiCNDgtCJClQkoFMgqsu3ArBkoZDgA8uDJAwk4bGDmtm9BZgcYzK078m4D
Cgf4+l0skNkGCg3oUhR4d4GCDIoZM2ZWQMECyZQvLMggIbPmzQIyfCZ5YcME
AwFMn/bLLIKBCRtMHljQQcDV2ZqZTRDQYfWFAwMqUJANvC8zBhUWbDi5YUAB
Bsybt2VGoUKH3AcmdP+Im127xOcJih+oXsEDdvOLuQfIMGBD9QwBlsOnzcBD
hfrsuVfefgzJR599A+CnH4Hb9fcfgu29x6BIBgKYYH4DTojQc/5ZGGGGGhpU
IYIKghgiQRw+GKCEJxZIwXwWlthiQyl6KOCMLsJIIoY4LlQjhDf2mNCI9/Eo
5IYO2sjikX+9eGCRCzL5V5JALillY07GaOSVb1G5ookzEnlhlFx+8OOXZb6V
5Y5kcnlmckGmKaaMaZrpJZxWXjnnlmW++WGdZq5ZXQEetKmnlxPgl6eUYhJq
KKOI0imnoNbF2ScFHQJJwW99TsBAAAVYWEAAHEQAZoi1cQDqAAeEV0EACpT/
JqcACgRQAW6uNWCbYKcyyEwGDBgQwa2tTlBBAhYIQMFejC5AgQAWJNDABK3y
loEDEjCgV6/aOcYBAwp4kIF6rVkXgAEc8IQZVifCBRQHGqya23HGIpsTBgSU
OsFX/PbrVVjpYsCABA4kQCxHu11ogAQUIOAwATpBLDFQFE9sccUYS0wAxD5h
4DACFEggbAHk3jVBA/gtTIHHEADg8sswxyzzzDQDAAEECGAQsgHiTisZResN
gLIHBijwLQEYePzx0kw37fTSSjuMr7ZMzfcgYZUZi58DGsTKwbdgayt22GSP
bXbYY3MggQIaONDzAJ8R9kFlQheQQAAOWGCAARrwdt23Bn8H7vfggBMueOEG
WOBBAAkU0EB9oBGUdXIFZJBABAEEsPjmmnfO+eeeh/55BBEk0Ph/E8Q9meQq
bbDABAN00EADFRRQ++2254777rr3jrvjFTTQwQCpz7u6QRut5/oEzA/g/PPQ
Ry/99NIz//oGrZpUUEAAOw==tframeBorders�
R0lGODlhQABAAPcAAHx+fMTCxKSipOTi5JSSlNTS1LSytPTy9IyKjMzKzKyq
rOzq7JyanNza3Ly6vPz6/ISChMTGxKSmpOTm5JSWlNTW1LS2tPT29IyOjMzO
zKyurOzu7JyenNze3Ly+vPz+/OkAKOUA5IEAEnwAAACuQACUAAFBAAB+AFYd
QAC0AABBAAB+AIjMAuEEABINAAAAAHMgAQAAAAAAAAAAAKjSxOIEJBIIpQAA
sRgBMO4AAJAAAHwCAHAAAAUAAJEAAHwAAP+eEP8CZ/8Aif8AAG0BDAUAAJEA
AHwAAIXYAOfxAIESAHwAAABAMQAbMBZGMAAAIEggJQMAIAAAAAAAfqgaXESI
5BdBEgB+AGgALGEAABYAAAAAAACsNwAEAAAMLwAAAH61MQBIAABCM8B+AAAU
AAAAAAAApQAAsf8Brv8AlP8AQf8Afv8AzP8A1P8AQf8AfgAArAAABAAADAAA
AACQDADjAAASAAAAAACAAADVABZBAAB+ALjMwOIEhxINUAAAANIgAOYAAIEA
AHwAAGjSAGEEABYIAAAAAEoBB+MAAIEAAHwCACABAJsAAFAAAAAAAGjJAGGL
AAFBFgB+AGmIAAAQAABHAAB+APQoAOE/ABIAAAAAAADQAADjAAASAAAAAPiF
APcrABKDAAB8ABgAGO4AAJAAqXwAAHAAAAUAAJEAAHwAAP8AAP8AAP8AAP8A
AG0pIwW3AJGSAHx8AEocI/QAAICpAHwAAAA0SABk6xaDEgB8AAD//wD//wD/
/wD//2gAAGEAABYAAAAAAAC0/AHj5AASEgAAAAA01gBkWACDTAB8AFf43PT3
5IASEnwAAOAYd+PuMBKQTwB8AGgAEGG35RaSEgB8AOj/NOL/ZBL/gwD/fMkc
q4sA5UGpEn4AAIg02xBk/0eD/358fx/4iADk5QASEgAAAALnHABkAACDqQB8
AMyINARkZA2DgwB8fBABHL0AAEUAqQAAAIAxKOMAPxIwAAAAAIScAOPxABIS
AAAAAIIAnQwA/0IAR3cAACwAAAAAQABAAAAI/wA/CBxIsKDBgwgTKlzIsKFD
gxceNnxAsaLFixgzUrzAsWPFCw8kDgy5EeQDkBxPolypsmXKlx1hXnS48UEH
CwooMCDAgIJOCjx99gz6k+jQnkWR9lRgYYDJkAk/DlAgIMICkVgHLoggQIPT
ighVJqBQIKvZghkoZDgA8uDJAwk4bDhLd+ABBmvbjnzbgMKBuoA/bKDQgC1F
gW8XKMgQOHABBQsMI76wIIOExo0FZIhM8sKGCQYCYA4cwcCEDSYPLOgg4Oro
uhMEdOB84cCAChReB2ZQYcGGkxsGFGCgGzCFCh1QH5jQIW3xugwSzD4QvIIH
4s/PUgiQYcCG4BkC5P/ObpaBhwreq18nb3Z79+8Dwo9nL9I8evjWsdOX6D59
fPH71Xeef/kFyB93/sln4EP2Ebjegg31B5+CEDLUIH4PVqiQhOABqKFCF6qn
34cHcfjffCQaFOJtGaZYkIkUuljQigXK+CKCE3po40A0trgjjDru+EGPI/6I
Y4co7kikkAMBmaSNSzL5gZNSDjkghkXaaGIBHjwpY4gThJeljFt2WSWYMQpZ
5pguUnClehS4tuMEDARQgH8FBMBBBExGwIGdAxywXAUBKHCZkAIoEEAFp33W
QGl47ZgBAwZEwKigE1SQgAUCUDCXiwtQIIAFCTQwgaCrZeCABAzIleIGHDD/
oIAHGUznmXABGMABT4xpmBYBHGgAKGq1ZbppThgAG8EEAW61KwYMSOBAApdy
pNp/BkhAAQLcEqCTt+ACJW645I5rLrgEeOsTBtwiQIEElRZg61sTNBBethSw
CwEA/Pbr778ABywwABBAgAAG7xpAq6mGUUTdAPZ6YIACsRKAAbvtZqzxxhxn
jDG3ybbKFHf36ZVYpuE5oIGhHMTqcqswvyxzzDS/HDMHEiiggQMLDxCZXh8k
BnEBCQTggAUGGKCB0ktr0PTTTEfttNRQT22ABR4EkEABDXgnGUEn31ZABglE
EEAAWaeN9tpqt832221HEEECW6M3wc+Hga3SBgtMODBABw00UEEBgxdO+OGG
J4744oZzXUEDHQxwN7F5G7QRdXxPoPkAnHfu+eeghw665n1vIKhJBQUEADs=tRoundedFrametimagetfocustborderitstickytnsewtTEntrytborderwidthitstyletpaddingi
tfilltxtbothtexpandittexttTests	<FocusIn>cCstjdg�S(NR(tframetstate(tevt((s3/usr/lib64/python2.7/Demo/tkinter/ttk/roundframe.pyt<lambda>gts
<FocusOut>cCstjdg�S(Ns!focus(RR(R((s3/usr/lib64/python2.7/Demo/tkinter/ttk/roundframe.pyRhRtbgtwhitethighlightthicknesscCstjdg�S(NR(tframe2R(R((s3/usr/lib64/python2.7/Demo/tkinter/ttk/roundframe.pyRlRcCstjdg�S(Ns!focus(RR(R((s3/usr/lib64/python2.7/Demo/tkinter/ttk/roundframe.pyRmR(RR(t__doc__tTkintertttktTktroott
PhotoImagetimg1timg2tStyleRtelement_createtlayoutt	configuretFrameRtpackRtEntrytentrytbindtTextRtmainloop(((s3/usr/lib64/python2.7/Demo/tkinter/ttk/roundframe.pyt<module>s2&	$	 !PKb1�Z�^��#tkinter/ttk/treeview_multicolumn.pynu�[���"""Demo based on the demo mclist included with tk source distribution."""
import Tkinter
import tkFont
import ttk

tree_columns = ("country", "capital", "currency")
tree_data = [
    ("Argentina",      "Buenos Aires",     "ARS"),
    ("Australia",      "Canberra",         "AUD"),
    ("Brazil",         "Brazilia",         "BRL"),
    ("Canada",         "Ottawa",           "CAD"),
    ("China",          "Beijing",          "CNY"),
    ("France",         "Paris",            "EUR"),
    ("Germany",        "Berlin",           "EUR"),
    ("India",          "New Delhi",        "INR"),
    ("Italy",          "Rome",             "EUR"),
    ("Japan",          "Tokyo",            "JPY"),
    ("Mexico",         "Mexico City",      "MXN"),
    ("Russia",         "Moscow",           "RUB"),
    ("South Africa",   "Pretoria",         "ZAR"),
    ("United Kingdom", "London",           "GBP"),
    ("United States",  "Washington, D.C.", "USD")
    ]

def sortby(tree, col, descending):
    """Sort tree contents when a column is clicked on."""
    # grab values to sort
    data = [(tree.set(child, col), child) for child in tree.get_children('')]

    # reorder data
    data.sort(reverse=descending)
    for indx, item in enumerate(data):
        tree.move(item[1], '', indx)

    # switch the heading so that it will sort in the opposite direction
    tree.heading(col,
        command=lambda col=col: sortby(tree, col, int(not descending)))

class App(object):
    def __init__(self):
        self.tree = None
        self._setup_widgets()
        self._build_tree()

    def _setup_widgets(self):
        msg = ttk.Label(wraplength="4i", justify="left", anchor="n",
            padding=(10, 2, 10, 6),
            text=("Ttk is the new Tk themed widget set. One of the widgets it "
                  "includes is a tree widget, which can be configured to "
                  "display multiple columns of informational data without "
                  "displaying the tree itself. This is a simple way to build "
                  "a listbox that has multiple columns. Clicking on the "
                  "heading for a column will sort the data by that column. "
                  "You can also change the width of the columns by dragging "
                  "the boundary between them."))
        msg.pack(fill='x')

        container = ttk.Frame()
        container.pack(fill='both', expand=True)

        # XXX Sounds like a good support class would be one for constructing
        #     a treeview with scrollbars.
        self.tree = ttk.Treeview(columns=tree_columns, show="headings")
        vsb = ttk.Scrollbar(orient="vertical", command=self.tree.yview)
        hsb = ttk.Scrollbar(orient="horizontal", command=self.tree.xview)
        self.tree.configure(yscrollcommand=vsb.set, xscrollcommand=hsb.set)
        self.tree.grid(column=0, row=0, sticky='nsew', in_=container)
        vsb.grid(column=1, row=0, sticky='ns', in_=container)
        hsb.grid(column=0, row=1, sticky='ew', in_=container)

        container.grid_columnconfigure(0, weight=1)
        container.grid_rowconfigure(0, weight=1)

    def _build_tree(self):
        for col in tree_columns:
            self.tree.heading(col, text=col.title(),
                command=lambda c=col: sortby(self.tree, c, 0))
            # XXX tkFont.Font().measure expected args are incorrect according
            #     to the Tk docs
            self.tree.column(col, width=tkFont.Font().measure(col.title()))

        for item in tree_data:
            self.tree.insert('', 'end', values=item)

            # adjust columns lenghts if necessary
            for indx, val in enumerate(item):
                ilen = tkFont.Font().measure(val)
                if self.tree.column(tree_columns[indx], width=None) < ilen:
                    self.tree.column(tree_columns[indx], width=ilen)

def main():
    root = Tkinter.Tk()
    root.wm_title("Multi-Column List")
    root.wm_iconname("mclist")

    import plastik_theme
    try:
        plastik_theme.install('~/tile-themes/plastik/plastik')
    except Exception:
        import warnings
        warnings.warn("plastik theme being used without images")

    app = App()
    root.mainloop()

if __name__ == "__main__":
    main()
PKb1�Z�J"_��!tkinter/ttk/notebook_closebtn.pyonu�[����
��^c
@s�dZddlZddlZddlZej�Zejjejje	�d�Z
ejddejje
d��Zejddejje
d��Z
ejd	dejje
d
��Zej�Zejdddd8d9dddd�ejddidd6fg�ejddidd6didd6dd6didd6dd6didd6dd6fdidd6dd6fgd 6fgd 6fgd 6fg�d!�Zd"�Zejd#d$ee�ejd#d%e�ejd&d'd(d'd)d�Zde_ejed*d+�Zejed*d,�Zejed*d-�Zejed.d/d0d1�ejed.d2d0d1�ejed.d3d0d1�ej d4d5d6d7�ej!�dS(:saA Ttk Notebook with close buttons.

Based on an example by patthoyts, http://paste.tclers.tk/896
i����Ntimgt	img_closetfiles	close.giftimg_closeactivesclose_active.giftimg_closepressedsclose_pressed.giftclosetimagetactivetpresseds	!disabledtborderitstickyttButtonNotebooksButtonNotebook.clienttnswesButtonNotebook.TabsButtonNotebook.tabsButtonNotebook.paddingttoptsidesButtonNotebook.focussButtonNotebook.labeltleftsButtonNotebook.closetchildrencCst|j|j|j}}}|j||�}|jd||f�}d|krp|jdg�||_ndS(Ns@%d,%dRR(txtytwidgettidentifytindextstatet
pressed_index(teventRRRtelemR((s:/usr/lib64/python2.7/Demo/tkinter/ttk/notebook_closebtn.pyt	btn_press&scCs�|j|j|j}}}|jdg�s3dS|j||�}|jd||f�}d|kr�|j|kr�|j|�|jd�n|j	dg�d|_dS(NRs@%d,%dRs<<NotebookClosedTab>>s!pressed(RRRtinstateRRRtforgettevent_generateRtNone(RRRRRR((s:/usr/lib64/python2.7/Demo/tkinter/ttk/notebook_closebtn.pytbtn_release/s
t	TNotebooks<ButtonPress-1>s<ButtonRelease-1>twidthi�theighttstylet
backgroundtredtgreentbluettexttRedtpaddingitGreentBluetexpanditfilltboth(RRs	!disabledR(Rs	!disabledR("t__doc__tostTkintertttktTktroottpathtjointdirnamet__file__timgdirt
PhotoImageti1ti2ti3tStyleR$telement_createtlayoutRR t
bind_classtTruetNotebooktnbRRtFrametf1tf2tf3taddtpacktmainloop(((s:/usr/lib64/python2.7/Demo/tkinter/ttk/notebook_closebtn.pyt<module>sF!$ 	
<				PKb1�Z�J"_��!tkinter/ttk/notebook_closebtn.pycnu�[����
��^c
@s�dZddlZddlZddlZej�Zejjejje	�d�Z
ejddejje
d��Zejddejje
d��Z
ejd	dejje
d
��Zej�Zejdddd8d9dddd�ejddidd6fg�ejddidd6didd6dd6didd6dd6didd6dd6fdidd6dd6fgd 6fgd 6fgd 6fg�d!�Zd"�Zejd#d$ee�ejd#d%e�ejd&d'd(d'd)d�Zde_ejed*d+�Zejed*d,�Zejed*d-�Zejed.d/d0d1�ejed.d2d0d1�ejed.d3d0d1�ej d4d5d6d7�ej!�dS(:saA Ttk Notebook with close buttons.

Based on an example by patthoyts, http://paste.tclers.tk/896
i����Ntimgt	img_closetfiles	close.giftimg_closeactivesclose_active.giftimg_closepressedsclose_pressed.giftclosetimagetactivetpresseds	!disabledtborderitstickyttButtonNotebooksButtonNotebook.clienttnswesButtonNotebook.TabsButtonNotebook.tabsButtonNotebook.paddingttoptsidesButtonNotebook.focussButtonNotebook.labeltleftsButtonNotebook.closetchildrencCst|j|j|j}}}|j||�}|jd||f�}d|krp|jdg�||_ndS(Ns@%d,%dRR(txtytwidgettidentifytindextstatet
pressed_index(teventRRRtelemR((s:/usr/lib64/python2.7/Demo/tkinter/ttk/notebook_closebtn.pyt	btn_press&scCs�|j|j|j}}}|jdg�s3dS|j||�}|jd||f�}d|kr�|j|kr�|j|�|jd�n|j	dg�d|_dS(NRs@%d,%dRs<<NotebookClosedTab>>s!pressed(RRRtinstateRRRtforgettevent_generateRtNone(RRRRRR((s:/usr/lib64/python2.7/Demo/tkinter/ttk/notebook_closebtn.pytbtn_release/s
t	TNotebooks<ButtonPress-1>s<ButtonRelease-1>twidthi�theighttstylet
backgroundtredtgreentbluettexttRedtpaddingitGreentBluetexpanditfilltboth(RRs	!disabledR(Rs	!disabledR("t__doc__tostTkintertttktTktroottpathtjointdirnamet__file__timgdirt
PhotoImageti1ti2ti3tStyleR$telement_createtlayoutRR t
bind_classtTruetNotebooktnbRRtFrametf1tf2tf3taddtpacktmainloop(((s:/usr/lib64/python2.7/Demo/tkinter/ttk/notebook_closebtn.pyt<module>sF!$ 	
<				PKb1�Z��"�P
P
tkinter/ttk/widget_state.pycnu�[����
��^c	@s�dZddlZddddddd	d
dg	Zx eD]Zejde�q;Wd
�Zdejfd��YZd�Ze	dkr�e�ndS(s8Sample demo showing widget states and some font styling.i����Ntactivetdisabledtfocustpressedtselectedt
backgroundtreadonlyt	alternatetinvalidt!cCs%ttt�d}|j|�dS(Ni(tstatestlentstate(twidgettnostate((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pytreset_state
stAppcBs2eZdd�Zdd�Zd�Zd�ZRS(cCstjj|dd�|jj|�tj�|_|jjdd�}t|j	j
d|��}|j	j
d|�|_d|jkr�d|j|_n|d	d
kr�|d	nd|_t
||d	d
kr�dnd	�|_g|_|j�dS(
NtborderwidthitTButtontfontsfont configure %s -sizesfont configure %s -familyt s{%s}it-ti(tttktFramet__init__tmasterttitletStyletstyletlookuptstrttktevaltfont_familytfsize_prefixtintt
base_fsizetupdate_widgetst_setup_widgets(tselfRtbtn_fonttfsize((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyRs#)	icCs4|jjddd|j|j|j|f�dS(NRRs%s %s%d(Rt	configureR"R#R%(R(textra((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyt	_set_font#scCs�|j|�}|s'dg}d}nGt|j��}g|D]}|tkr@|^q@}dt|�}x(|jD]}t|�|j|�qxW|j|�dS(NRiii(	tnametowidgettsettsplitR
RR&RRR-(R(R
tnewtextt
goodstatest
font_extrat	newstatesR((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyt
_new_state's		%

c	Cs�tj|dd�}tj|dddd�}|j|j�ddf|d	<|j�|jj|�|j�|j	d
ddd
�|j	dddd
dd
dd�|j	d
ddd�dS(NttextsEnter states and watchtcursortxtermtvalidatetkeys%Ws%Ptvalidatecommandtfilltxtpadxitsidetlefttpadytanchortntbothtexpandi(
RtButtontEntrytregisterR5RR&tappendR9tpack(R(tbtntentry((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyR'?s

"N(t__name__t
__module__tNoneRR-R5R'(((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyRs	cCstd�}|j�dS(NsWidget State Tester(Rtmainloop(tapp((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pytmainNst__main__(
t__doc__RR
RRIRRRRRRM(((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyt<module>s	@	PKb1�Z�j:�^^tkinter/ttk/plastik_theme.pyonu�[����
��^c@s�dZddlZddlZddlZddlmZdgZidd6dd6d	d
6dd6ZiZd
�Z	d�Z
dS(ssThis demonstrates good part of the syntax accepted by theme_create.

This is a translation of plastik.tcl to python.
You will need the images used by the plastik theme to test this. The
images (and other tile themes) can be retrived by doing:

$ cvs -z3 -d:pserver:anonymous@tktable.cvs.sourceforge.net:/cvsroot/tktable   co tile-themes

To test this module you should do, for example:

import Tkinter
import plastik_theme

root = Tkinter.Tk()
plastik_theme.install(plastik_image_dir)
...

Where plastik_image_dir contains the path to the images directory used by
the plastik theme, something like: tile-themes/plastik/plastik
i����N(t
PhotoImagetinstalls#efefeftframes#aaaaaat
disabledfgs#657a9etselectbgs#fffffftselectfgcCs�tjj|�}tjj|�s7td|��nxWtjd|�D]B}tjj|�d}|d }t|d|dd�t|<qKWdS(Ns(%r is not a directory, can't load imagess%s/*.gifii����tfiletformattgif89(	tostpatht
expandusertisdirt	ExceptiontglobtsplitRtimgs(timgdirtftimgtname((s6/usr/lib64/python2.7/Demo/tkinter/ttk/plastik_theme.pyt
_load_imgs%s
cCs=t|�tj�}|jdddi'iitdd6tdd6tdd6td	d
6tdd6dd
6dd6d6idtdfgd6d6d6ididd6dd6fdidd6dd6fdidd6dd6fdidd6didd 6dd!6d"idd6fgd#6fgd#6fgd$6d%6id&id'd6dd6fd(id)d6dd6fd&id)d6dd6fd*id+d6d,idd 6dd!6d-idd6fgd#6fgd#6fgd$6d.6iid/d06d1d26d6d3id4id5id6id'd6dd 6fgd#6fgd#6fgd#6fgd$6d76iid1d26d6d8id9id:id;id'd6dd 6fgd#6fgd#6fgd#6fgd$6d<6id=id>id)d6fd?id@idAid'd6dd 6fgd#6fgd#6fgd#6fgd$6dB6iidCdDdCdCgdE6d6dF6iidGdDdGdDgdH6dCdCdDgd 6d6idIddDdJdDgfgd 6d6dK6iidCdH6d6dL6idMdNd�d�idJd/gdS6dJdH6dTd6fdU6d36idMdVd�d�d�idJdYgdS6dZdH6d[d6fdU6d96idMd\d�d�d�d�idd6fdU6da6idMdbd�d�d�d�idd6fdU6dg6idMdhidZdS6d+d6fdU6d,6id�dU6d-6id�dU6d*6idMdkidZdS6dd6fdU6d6id�dU6d"6id�dU6d6idMdnd�idd6fdU6dp6idMdqd�idd6fdU6ds6idMdtd�idd6fdU6dv6idMdwd�idd6fdU6dy6idMdzidd6fdU6d{6idMd|iddS6dCdH6fdU6d}6idMd~idd6fdU6d6idMd�iddS6dCdH6fdU6d�6idMd�d�idDdS6dZdJgdH6d[d6fdU6d�6idMdSidJdS6dJdH6d[d6fdU6d�6idMd�d�id[d6dJdGd�d�gdS6dJdJd�gdH6fdU6d=6idMd�id�d6d�dCdCdCgdS6fdU6d>6idMd�d�d�d�d�d�idJdGd�d�gdS6dJdJd�gdH6d[d6fdU6d�6idMd�id�d6d�dCdCdCgdS6fdU6d�6idMd�idJdS6fdU6d�6idMd�d�d�idCdDdCdCgdH6dJd/dJd/gdS6fdU6d�6idMd�idDdS6fdU6d�6idMd�idDdYgdS6fdU6d�6idMd�idYdDgdS6fdU6d�6idMd�d�idJd/gdS6dJdH6d[d6fdU6d�6�|jd�dS(�NtplastiktdefaulttsettingsRt
backgroundttroughcolorRtselectbackgroundRtselectforegroundtfieldbackgroundt
TkDefaultFonttfontitborderwidtht	configuretdisabledRt
foregroundtmapt.sVertical.Scrollbar.uparrowttoptsidettstickysVertical.Scrollbar.downarrowtbottomsVertical.Scrollbar.troughtnssVertical.Scrollbar.thumbtexpandtunitsVertical.Scrollbar.griptchildrentlayoutsVertical.TScrollbarsHorizontal.Scrollbar.leftarrowtleftsHorizontal.Scrollbar.rightarrowtrightsHorizontal.Scrollbar.troughtewsHorizontal.Scrollbar.thumbsHorizontal.Scrollbar.gripsHorizontal.TScrollbari
twidthtcentertanchors
Button.buttonsButton.focussButton.paddingsButton.labeltTButtonsToolbutton.bordersToolbutton.buttonsToolbutton.paddingsToolbutton.labelt
ToolbuttonsMenubutton.buttonsMenubutton.indicatorsMenubutton.focussMenubutton.paddingsMenubutton.labeltTMenubuttoniit
tabmarginst	TNotebookitpaddingtselectedis
TNotebook.tabtTreeviewtimagesbutton-ntpressedsbutton-ptactivesbutton-htbordertewnsselement creates	tbutton-ns	tbutton-ps	tbutton-hi	itnewsscheck-nuscheck-hcscheck-pcscheck-huscheck-ncsCheckbutton.indicatorsradio-nusradio-hcsradio-pcsradio-husradio-ncsRadiobutton.indicatorshsb-nshsb-gshsb-tsvsb-nsvsb-gsvsb-ts	arrowup-ns	arrowup-psScrollbar.uparrowsarrowdown-nsarrowdown-psScrollbar.downarrowsarrowleft-nsarrowleft-psScrollbar.leftarrowsarrowright-nsarrowright-psScrollbar.rightarrows	hslider-nsHorizontal.Scale.sliders	hslider-tsHorizontal.Scale.troughs	vslider-nsVertical.Scale.sliders	vslider-tsVertical.Scale.troughsentry-ntfocussentry-fsEntry.fieldsLabelframe.borderscombo-rscombo-raiiisarrow-dtescombo-ntreadonlyscombo-fascombo-as	!readonlyscombo-fsCombobox.fieldsCombobox.downarrows
notebook-csNotebook.clientsnotebook-tnsnotebook-tssnotebook-tasNotebook.tabshprogress-tsProgressbar.troughshprogress-bsHorizontal.Progressbar.pbarsvprogress-bsVertical.Progressbar.pbarstree-nstree-psTreeheading.cell(R?sbutton-p(R@sbutton-h(R<s	tbutton-p(R?s	tbutton-p(R@s	tbutton-h(R@R<scheck-hc(R?R<scheck-pc(R@scheck-hu(R<scheck-nc(R@R<sradio-hc(R?R<sradio-pc(R@sradio-hu(R<sradio-nc(R>shsb-g(R>shsb-t(R>svsb-g(R>svsb-t(R?s	arrowup-p(R?sarrowdown-p(R?sarrowleft-p(R?sarrowright-p(RDsentry-f(R@scombo-ra(RFR@scombo-ra(RDR@scombo-fa(R@scombo-a(s	!readonlyRDscombo-f(RFscombo-r(R<snotebook-ts(R@snotebook-ta(R?stree-p(RtttktStylettheme_createtcolorst	theme_use(Rtstyle((s6/usr/lib64/python2.7/Demo/tkinter/ttk/plastik_theme.pyR.s

/
/@@@!*'))""	"")).&.4!!-(t__doc__R	RRGtTkinterRt__all__RJRRR(((s6/usr/lib64/python2.7/Demo/tkinter/ttk/plastik_theme.pyt<module>s	
		PKb1�Zw�%>>tkinter/ttk/theme_selector.pyonu�[����
��^c@sZdZddlZddlZdejfd��YZd�ZedkrVe�ndS(s�Ttk Theme Selector v2.

This is an improvement from the other theme selector (themes_combo.py)
since now you can notice theme changes in Ttk Combobox, Ttk Frame,
Ttk Label and Ttk Button.
i����NtAppcBs,eZd�Zd�Zd�Zd�ZRS(cCsHtjj|dd�tj�|_tj|d�|_|j�dS(Ntborderwidthii(	tttktFramet__init__tStyletstyletTkintertIntVarttheme_autochanget_setup_widgets(tself((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyRscCs|jj|jj��dS(N(Rt	theme_usetthemes_combotget(R((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyt
_change_themescCs |jj�r|j�ndS(N(R	RR(Rtwidget((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyt_theme_sel_changedscCs�tj|dd�}|jj�}tj|d|dd�|_|jj|d�|jjd|j�tj	|ddd	|j
�}tj|dd
d|j�}|j
dd
dd�|jj
dddddd
dd�|j
dddddd
dd�|j
dddddddd
�|j�}|jddd�|jddd�|jddd�|j
dddddddddd�dS(NttexttThemestvalueststatetreadonlyis<<ComboboxSelected>>sChange Themetcommands-Change themes when combobox item is activatedtvariabletipadxitstickytwtrowtcolumnitpadxtewitet
columnspanitpadytweighttnsewtrowspan(RtLabelRttheme_namestComboboxR
tsettbindRtButtonRtCheckbuttonR	tgridtwinfo_topleveltrowconfiguretcolumnconfigure(Rt
themes_lbltthemest
change_btnttheme_change_checkbtnttop((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyR
s&%""(t__name__t
__module__RRRR
(((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyR
s	
		cCs't�}|jjd�|j�dS(NsTheme Selector(Rtmasterttitletmainloop(tapp((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pytmain7s	t__main__(t__doc__RRRRR<R6(((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyt<module>s-	PKb1�Z>���tkinter/ttk/mac_searchentry.pycnu�[����
��^c
@sdZddlZddlZej�ZdZejddedd�Zejddedd	�Zej	�Z
e
jd
ddd!d
dddgdd�e
jdd
idd6dd
6didd6didd6fgd6fgd6fg�e
j
ddd�ej
dd�ejdddd�Zejdddd�Zejddd d�ejddd d�ej�dS("s\Mac style search widget

Translated from Tcl code by Schelte Bron, http://wiki.tcl.tk/18188
i����Ns�

R0lGODlhKgAaAOfnAFdZVllbWFpcWVtdWlxeW11fXF9hXmBiX2ZnZWhpZ2lraGxua25wbXJ0
cXR2c3V3dHZ4dXh6d3x+e31/fH6AfYSGg4eJhoiKh4qMiYuNio2PjHmUqnqVq3yXrZGTkJKU
kX+asJSWk32cuJWXlIGcs5aYlX6euZeZloOetZial4SftpqbmIWgt4GhvYahuIKivpudmYei
uYOjv5yem4ijuoSkwIWlwYmlu56gnYamwp+hnoenw4unvaCin4ioxJCnuZykrImpxZmlsoaq
zI2pv6KkoZGouoqqxpqms4erzaOloo6qwYurx5Kqu5untIiszqSmo5CrwoysyJeqtpOrvJyo
tZGsw42typSsvaaopZKtxJWtvp6qt4+uy6epppOuxZCvzKiqp5quuZSvxoyx06mrqJWwx42y
1JKxzpmwwaqsqZaxyI6z1ZqxwqutqpOzz4+01qyuq56yvpizypS00Jm0y5W10Zq1zJa20rCy
rpu3zqizwbGzr6C3yZy4z7K0saG4yp250LO1sqK5y5660Z+70qO7zKy4xaC806S8zba4taG9
1KW9zq66x6+7yLi6t6S/1rC8yrm7uLO8xLG9y7q8ubS9xabB2anB07K+zLW+xrO/za7CzrTA
zrjAyLXBz77BvbbC0K/G2LjD0bnE0rLK28TGw8bIxcLL07vP28HN28rMycvOyr/T38DU4cnR
2s/RztHT0NLU0cTY5MrW5MvX5dHX2c3Z59bY1dPb5Nbb3dLe7Nvd2t3f3NXh797g3d3j5dnl
9OPl4eTm4+Ln6tzo9uXn5Obo5eDp8efp5uHq8uXq7ejq5+nr6OPs9Ovu6unu8O3v6+vw8+7w
7ezx9O/x7vDy7/Hz8O/19/P18vT38/L3+fb49Pf59vX6/fj69/b7/vn7+Pr8+ff9//v9+vz/
+/7//P//////////////////////////////////////////////////////////////////
/////////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJZAD/ACwC
AAIAKAAWAAAI/gD/CRz4bwUGCg8eQFjIsGHDBw4iTLAQgqBFgisuePCiyJOpUyBDihRpypMi
Lx8qaLhIMIyGFZ5sAUsmjZrNmzhzWpO2DJgtTysqfGDpxoMbW8ekeQsXzty4p1CjRjUXrps3
asJsuclQ4uKKSbamMR3n1JzZs2jRkh1HzuxVXX8y4CDYAwqua+DInVrRwMGJU2kDp31KThy1
XGWGDlxhi1rTPAUICBBAoEAesoIzn6Vm68MKgVAUHftmzhOCBCtQwQKSoABgzZnJdSMmyIPA
FbCotdUQAIhNa9B6DPCAGbZac+SowVIMRVe4pwkA4GpqDlwuAAmMZx4nTtfnf1mO5JEDNy46
MHJkxQEDgKC49rPjwC0bqGaZuOoZAKjBPE4NgAzUvYcWOc0QZF91imAnCDHJ5JFAAJN0I2Ba
4iRDUC/gOEVNDwIUcEABCAgAAATUTIgWOMBYRFp80ghiAQIIVAAEAwJIYI2JZnUji0XSYAYO
NcsQA8wy0hCTwAASXGOiONFcxAtpTokTHznfiLMNMAkcAMuE43jDC0vLeGOWe2R5o4sn1LgH
GzkWsvTPMgEOaA433Ag4TjjMuDkQMNi0tZ12sqWoJ0HATMPNffAZZ6U0wLAyqJ62RGoLLrhI
aqmlpzwaEAAh+QQJZAD/ACwAAAAAKgAaAAAI/gD/CRw40JEhQoEC+fGjcOHCMRAjRkxDsKLF
f5YcAcID582ZjyBDJhmZZIjJIUySEDHiBMhFghrtdNnRAgSHmzhz6sTZQcSLITx+CHn5bxSk
Nz5MCMGy55CjTVCjbuJEtSrVQ3uwqDBRQwrFi476SHHxow8qXcemVbPGtm21t3CnTaP27Jgu
VHtuiIjBsuImQkRiiEEFTNo2cOTMKV7MuLE5cN68QUOGSgwKG1EqJqJDY8+rZt8UjxtNunTj
cY3DgZOWS46KIFgGjiI0ZIsqaqNNjWjgYMUpx8Adc3v2aosNMAI1DbqyI9WycOb4IAggQEAB
A3lQBxet/TG4cMpI/tHwYeSfIzxM0uTKNs7UgAQrYL1akaDA7+3bueVqY4NJlUhIcQLNYx8E
AIQ01mwjTQ8DeNAdfouNA8440GBCQxJY3MEGD6p4Y844CQCAizcSgpMLAAlAuJ03qOyQRBR3
nEHEK+BMGKIui4kDDAAIPKiiYuSYSMQQRCDCxhiziPMYBgDkEaEaAGQA3Y+MjUPOLFoMoUUh
cKxRC4ngeILiH8Qkk0cCAUzSDZWpzbLEE1EwggcYqWCj2DNADFDAAQUgIAAAEFDDJmPYqNJF
F1s4cscTmCDjDTjdSPOHBQggUAEQDAgggTWDPoYMJkFoUdRmddyyjWLeULMMMcAsIw0x4wkM
IME1g25zyxpHxFYUHmyIggw4H4ojITnfiLMNMAkcAAub4BQjihRdDGTJHmvc4Qo1wD6Imje6
eILbj+BQ4wqu5Q3ECSJ0FOKKMtv4mBg33Pw4zjbKuBIIE1xYpIkhdQQiyi7OtAucj6dt48wu
otQhBRa6VvSJIRwhIkotvgRTzMUYZ6xxMcj4QkspeKDxxRhEmUfIHWjAgQcijEDissuXvCyz
zH7Q8YQURxDhUsn/bCInR3AELfTQZBRt9BBJkCGFFVhMwTNBlnBCSCGEIJQQIAklZMXWRBAR
RRRWENHwRQEBADs=tsearch1tdatatformatsgif -index 0tsearch2sgif -index 1sSearch.fieldtimagetfocustborderiiitstickytewsSearch.entrytnsweis
Entry.paddingsEntry.textareatchildrent
backgrounds#b2b2b2tstyletwidthitpadxi
tpady(RR(t__doc__tTkintertttktTktrootRt
PhotoImagets1ts2tStyleRtelement_createtlayoutt	configuretEntryte1te2tgridtmainloop(((s8/usr/lib64/python2.7/Demo/tkinter/ttk/mac_searchentry.pyt<module>s()	
+PKb1�Z�O���tkinter/ttk/dirbrowser.pycnu�[����
��^c	@s�dZddlZddlZddlZddlZd�Zd�Zd�Zd�Zd�Z	ej
�Zejdd	�Z
ejdd
�Zejdd)dddd�dd��Zeje
d<ejed<ejddddd�ejddddd�ejddddd�ee�ejde�ejd e�ejd!dd"dd#d$�e
jd!d%d"dd#d&�ejd!dd"d%d#d'�ejdd(d%�ejdd(d%�ej�dS(*s`A directory browser using Ttk Treeview.

Based on the demo found in Tk 8.5 library/demos/browse
i����Nc
	Cs�|j|d�dkrdS|j|d�}|j|j|��|j|�}|r_gntjd�tjd�}x1|tj|�D]}d}tjj	||�j
dd�}tjj|�r�d}ntjj|�r�d}ntjj
|�d	}|j|d
d|d||g�}|dkrs|dkr�|j|d
dd�|j|d|�q�q�|dkr�tj|�j}	|j|dd|	�q�q�WdS(Nttypet	directorytfullpatht.s..s\t/tfileitendttexttvaluesitdummytsizes%d bytes(Rs..(tsettdeletetget_childrentparenttglobtostlistdirtNonetpathtjointreplacetisdirtisfiletsplittinserttitemtstattst_size(
ttreetnodeRRtspecial_dirstptptypetfnametidR
((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pyt
populate_tree
s,(!		$cCsStjjd�jdd�}|jddd|d|dg�}t||�dS(	NRs\RtRRRR(RRtabspathRRR$(RtdirR((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pytpopulate_roots&s$cCs |j}t||j��dS(N(twidgetR$tfocus(teventR((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pytupdate_tree+s	cCs�|j}|j�}|j|�r�tjj|j|d��}tjj|�r�tj|�|j	|j
d��t|�q�ndS(NRR%(R)R*RRRR&RRtchdirRR
R((R+RRR((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pyt
change_dir/s	
cCs\t|�t|�}}|dkr>|dkr>|j�n
|j�|j||�dS(s"Hide and show scrollbar as needed.iiN(tfloattgrid_removetgridR(tsbartfirsttlast((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pyt
autoscroll9s


torienttverticalt
horizontaltcolumnsRRR
tdisplaycolumnstyscrollcommandcCstt||�S(N(R5tvsb(tftl((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pyt<lambda>HR%txscrollcommandcCstt||�S(N(R5thsb(R=R>((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pyR?IR%tcommands#0RsDirectory Structuretanchortws	File Sizetstretchitwidthids<<TreeviewOpen>>s<Double-Button-1>tcolumntrowtstickytnsweitnstewtweight(RRR
(t__doc__RRtTkintertttkR$R(R,R.R5tTktroott	ScrollbarR<RAtTreeviewRtyviewtxviewtheadingRGtbindR1tgrid_columnconfiguretgrid_rowconfiguretmainloop(((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pyt<module>s:				
		


PKb1�Za�kJ�
�
tkinter/ttk/widget_state.pynu�[���"""Sample demo showing widget states and some font styling."""
import ttk

states = ['active', 'disabled', 'focus', 'pressed', 'selected',
          'background', 'readonly', 'alternate', 'invalid']

for state in states[:]:
    states.append("!" + state)

def reset_state(widget):
    nostate = states[len(states) // 2:]
    widget.state(nostate)

class App(ttk.Frame):
    def __init__(self, title=None):
        ttk.Frame.__init__(self, borderwidth=6)
        self.master.title(title)

        self.style = ttk.Style()

        # get default font size and family
        btn_font = self.style.lookup("TButton", "font")
        fsize = str(self.tk.eval("font configure %s -size" % btn_font))
        self.font_family = self.tk.eval("font configure %s -family" % btn_font)
        if ' ' in self.font_family:
            self.font_family = '{%s}' % self.font_family
        self.fsize_prefix = fsize[0] if fsize[0] == '-' else ''
        self.base_fsize = int(fsize[1 if fsize[0] == '-' else 0:])

        # a list to hold all the widgets that will have their states changed
        self.update_widgets = []

        self._setup_widgets()

    def _set_font(self, extra=0):
        self.style.configure("TButton", font="%s %s%d" % (self.font_family,
            self.fsize_prefix, self.base_fsize + extra))

    def _new_state(self, widget, newtext):
        widget = self.nametowidget(widget)

        if not newtext:
            goodstates = ["disabled"]
            font_extra = 0
        else:
            # set widget state according to what has been entered in the entry
            newstates = set(newtext.split()) # eliminate duplicates

            # keep only the valid states
            goodstates = [state for state in newstates if state in states]
            # define a new font size based on amount of states
            font_extra = 2 * len(goodstates)

        # set new widget state
        for widget in self.update_widgets:
            reset_state(widget) # remove any previous state from the widget
            widget.state(goodstates)

        # update Ttk Button font size
        self._set_font(font_extra)
        return 1

    def _setup_widgets(self):
        btn = ttk.Button(self, text='Enter states and watch')

        entry = ttk.Entry(self, cursor='xterm', validate="key")
        entry['validatecommand'] = (self.register(self._new_state), '%W', '%P')
        entry.focus()

        self.update_widgets.append(btn)
        entry.validate()

        entry.pack(fill='x', padx=6)
        btn.pack(side='left', pady=6, padx=6, anchor='n')
        self.pack(fill='both', expand=1)


def main():
    app = App("Widget State Tester")
    app.mainloop()

if __name__ == "__main__":
    main()
PKb1�Z��qP�
�
tkinter/ttk/dirbrowser.pynu�[���"""A directory browser using Ttk Treeview.

Based on the demo found in Tk 8.5 library/demos/browse
"""
import os
import glob
import Tkinter
import ttk

def populate_tree(tree, node):
    if tree.set(node, "type") != 'directory':
        return

    path = tree.set(node, "fullpath")
    tree.delete(*tree.get_children(node))

    parent = tree.parent(node)
    special_dirs = [] if parent else glob.glob('.') + glob.glob('..')

    for p in special_dirs + os.listdir(path):
        ptype = None
        p = os.path.join(path, p).replace('\\', '/')
        if os.path.isdir(p): ptype = "directory"
        elif os.path.isfile(p): ptype = "file"

        fname = os.path.split(p)[1]
        id = tree.insert(node, "end", text=fname, values=[p, ptype])

        if ptype == 'directory':
            if fname not in ('.', '..'):
                tree.insert(id, 0, text="dummy")
                tree.item(id, text=fname)
        elif ptype == 'file':
            size = os.stat(p).st_size
            tree.set(id, "size", "%d bytes" % size)


def populate_roots(tree):
    dir = os.path.abspath('.').replace('\\', '/')
    node = tree.insert('', 'end', text=dir, values=[dir, "directory"])
    populate_tree(tree, node)

def update_tree(event):
    tree = event.widget
    populate_tree(tree, tree.focus())

def change_dir(event):
    tree = event.widget
    node = tree.focus()
    if tree.parent(node):
        path = os.path.abspath(tree.set(node, "fullpath"))
        if os.path.isdir(path):
            os.chdir(path)
            tree.delete(tree.get_children(''))
            populate_roots(tree)

def autoscroll(sbar, first, last):
    """Hide and show scrollbar as needed."""
    first, last = float(first), float(last)
    if first <= 0 and last >= 1:
        sbar.grid_remove()
    else:
        sbar.grid()
    sbar.set(first, last)

root = Tkinter.Tk()

vsb = ttk.Scrollbar(orient="vertical")
hsb = ttk.Scrollbar(orient="horizontal")

tree = ttk.Treeview(columns=("fullpath", "type", "size"),
    displaycolumns="size", yscrollcommand=lambda f, l: autoscroll(vsb, f, l),
    xscrollcommand=lambda f, l:autoscroll(hsb, f, l))

vsb['command'] = tree.yview
hsb['command'] = tree.xview

tree.heading("#0", text="Directory Structure", anchor='w')
tree.heading("size", text="File Size", anchor='w')
tree.column("size", stretch=0, width=100)

populate_roots(tree)
tree.bind('<<TreeviewOpen>>', update_tree)
tree.bind('<Double-Button-1>', change_dir)

# Arrange the tree and its scrollbars in the toplevel
tree.grid(column=0, row=0, sticky='nswe')
vsb.grid(column=1, row=0, sticky='ns')
hsb.grid(column=0, row=1, sticky='ew')
root.grid_columnconfigure(0, weight=1)
root.grid_rowconfigure(0, weight=1)

root.mainloop()
PKb1�Z�j:�^^tkinter/ttk/plastik_theme.pycnu�[����
��^c@s�dZddlZddlZddlZddlmZdgZidd6dd6d	d
6dd6ZiZd
�Z	d�Z
dS(ssThis demonstrates good part of the syntax accepted by theme_create.

This is a translation of plastik.tcl to python.
You will need the images used by the plastik theme to test this. The
images (and other tile themes) can be retrived by doing:

$ cvs -z3 -d:pserver:anonymous@tktable.cvs.sourceforge.net:/cvsroot/tktable   co tile-themes

To test this module you should do, for example:

import Tkinter
import plastik_theme

root = Tkinter.Tk()
plastik_theme.install(plastik_image_dir)
...

Where plastik_image_dir contains the path to the images directory used by
the plastik theme, something like: tile-themes/plastik/plastik
i����N(t
PhotoImagetinstalls#efefeftframes#aaaaaat
disabledfgs#657a9etselectbgs#fffffftselectfgcCs�tjj|�}tjj|�s7td|��nxWtjd|�D]B}tjj|�d}|d }t|d|dd�t|<qKWdS(Ns(%r is not a directory, can't load imagess%s/*.gifii����tfiletformattgif89(	tostpatht
expandusertisdirt	ExceptiontglobtsplitRtimgs(timgdirtftimgtname((s6/usr/lib64/python2.7/Demo/tkinter/ttk/plastik_theme.pyt
_load_imgs%s
cCs=t|�tj�}|jdddi'iitdd6tdd6tdd6td	d
6tdd6dd
6dd6d6idtdfgd6d6d6ididd6dd6fdidd6dd6fdidd6dd6fdidd6didd 6dd!6d"idd6fgd#6fgd#6fgd$6d%6id&id'd6dd6fd(id)d6dd6fd&id)d6dd6fd*id+d6d,idd 6dd!6d-idd6fgd#6fgd#6fgd$6d.6iid/d06d1d26d6d3id4id5id6id'd6dd 6fgd#6fgd#6fgd#6fgd$6d76iid1d26d6d8id9id:id;id'd6dd 6fgd#6fgd#6fgd#6fgd$6d<6id=id>id)d6fd?id@idAid'd6dd 6fgd#6fgd#6fgd#6fgd$6dB6iidCdDdCdCgdE6d6dF6iidGdDdGdDgdH6dCdCdDgd 6d6idIddDdJdDgfgd 6d6dK6iidCdH6d6dL6idMdNd�d�idJd/gdS6dJdH6dTd6fdU6d36idMdVd�d�d�idJdYgdS6dZdH6d[d6fdU6d96idMd\d�d�d�d�idd6fdU6da6idMdbd�d�d�d�idd6fdU6dg6idMdhidZdS6d+d6fdU6d,6id�dU6d-6id�dU6d*6idMdkidZdS6dd6fdU6d6id�dU6d"6id�dU6d6idMdnd�idd6fdU6dp6idMdqd�idd6fdU6ds6idMdtd�idd6fdU6dv6idMdwd�idd6fdU6dy6idMdzidd6fdU6d{6idMd|iddS6dCdH6fdU6d}6idMd~idd6fdU6d6idMd�iddS6dCdH6fdU6d�6idMd�d�idDdS6dZdJgdH6d[d6fdU6d�6idMdSidJdS6dJdH6d[d6fdU6d�6idMd�d�id[d6dJdGd�d�gdS6dJdJd�gdH6fdU6d=6idMd�id�d6d�dCdCdCgdS6fdU6d>6idMd�d�d�d�d�d�idJdGd�d�gdS6dJdJd�gdH6d[d6fdU6d�6idMd�id�d6d�dCdCdCgdS6fdU6d�6idMd�idJdS6fdU6d�6idMd�d�d�idCdDdCdCgdH6dJd/dJd/gdS6fdU6d�6idMd�idDdS6fdU6d�6idMd�idDdYgdS6fdU6d�6idMd�idYdDgdS6fdU6d�6idMd�d�idJd/gdS6dJdH6d[d6fdU6d�6�|jd�dS(�NtplastiktdefaulttsettingsRt
backgroundttroughcolorRtselectbackgroundRtselectforegroundtfieldbackgroundt
TkDefaultFonttfontitborderwidtht	configuretdisabledRt
foregroundtmapt.sVertical.Scrollbar.uparrowttoptsidettstickysVertical.Scrollbar.downarrowtbottomsVertical.Scrollbar.troughtnssVertical.Scrollbar.thumbtexpandtunitsVertical.Scrollbar.griptchildrentlayoutsVertical.TScrollbarsHorizontal.Scrollbar.leftarrowtleftsHorizontal.Scrollbar.rightarrowtrightsHorizontal.Scrollbar.troughtewsHorizontal.Scrollbar.thumbsHorizontal.Scrollbar.gripsHorizontal.TScrollbari
twidthtcentertanchors
Button.buttonsButton.focussButton.paddingsButton.labeltTButtonsToolbutton.bordersToolbutton.buttonsToolbutton.paddingsToolbutton.labelt
ToolbuttonsMenubutton.buttonsMenubutton.indicatorsMenubutton.focussMenubutton.paddingsMenubutton.labeltTMenubuttoniit
tabmarginst	TNotebookitpaddingtselectedis
TNotebook.tabtTreeviewtimagesbutton-ntpressedsbutton-ptactivesbutton-htbordertewnsselement creates	tbutton-ns	tbutton-ps	tbutton-hi	itnewsscheck-nuscheck-hcscheck-pcscheck-huscheck-ncsCheckbutton.indicatorsradio-nusradio-hcsradio-pcsradio-husradio-ncsRadiobutton.indicatorshsb-nshsb-gshsb-tsvsb-nsvsb-gsvsb-ts	arrowup-ns	arrowup-psScrollbar.uparrowsarrowdown-nsarrowdown-psScrollbar.downarrowsarrowleft-nsarrowleft-psScrollbar.leftarrowsarrowright-nsarrowright-psScrollbar.rightarrows	hslider-nsHorizontal.Scale.sliders	hslider-tsHorizontal.Scale.troughs	vslider-nsVertical.Scale.sliders	vslider-tsVertical.Scale.troughsentry-ntfocussentry-fsEntry.fieldsLabelframe.borderscombo-rscombo-raiiisarrow-dtescombo-ntreadonlyscombo-fascombo-as	!readonlyscombo-fsCombobox.fieldsCombobox.downarrows
notebook-csNotebook.clientsnotebook-tnsnotebook-tssnotebook-tasNotebook.tabshprogress-tsProgressbar.troughshprogress-bsHorizontal.Progressbar.pbarsvprogress-bsVertical.Progressbar.pbarstree-nstree-psTreeheading.cell(R?sbutton-p(R@sbutton-h(R<s	tbutton-p(R?s	tbutton-p(R@s	tbutton-h(R@R<scheck-hc(R?R<scheck-pc(R@scheck-hu(R<scheck-nc(R@R<sradio-hc(R?R<sradio-pc(R@sradio-hu(R<sradio-nc(R>shsb-g(R>shsb-t(R>svsb-g(R>svsb-t(R?s	arrowup-p(R?sarrowdown-p(R?sarrowleft-p(R?sarrowright-p(RDsentry-f(R@scombo-ra(RFR@scombo-ra(RDR@scombo-fa(R@scombo-a(s	!readonlyRDscombo-f(RFscombo-r(R<snotebook-ts(R@snotebook-ta(R?stree-p(RtttktStylettheme_createtcolorst	theme_use(Rtstyle((s6/usr/lib64/python2.7/Demo/tkinter/ttk/plastik_theme.pyR.s

/
/@@@!*'))""	"")).&.4!!-(t__doc__R	RRGtTkinterRt__all__RJRRR(((s6/usr/lib64/python2.7/Demo/tkinter/ttk/plastik_theme.pyt<module>s	
		PKb1�Z�Ծ��tkinter/READMEnu�[���Several collections of example code for Tkinter.

See the toplevel README for an explanation of the difference between
Tkinter and _tkinter, how to enable the Python Tk interface, and where
to get Matt Conway's lifesaver document.

Subdirectories:

guido		my original example set (fairly random collection)
matt		Matt Conway's examples, to go with his lifesaver document
ttk         Examples using the ttk module
PKb1�Z�#��tkinter/guido/imageview.pynu�[���from Tkinter import *
import sys

def main():
    filename = sys.argv[1]
    root = Tk()
    img = PhotoImage(file=filename)
    label = Label(root, image=img)
    label.pack()
    root.mainloop()

main()
PKb1�Z^�����tkinter/guido/wish.pycnu�[����
��^c@sddlZddlZejejdddd�Zejd�dZx�er\dZndZyee�Z	Wne
k
r�PnXee	d	Zejejd
de��rMeje	�yejde�Z
Wnejk
r�Zd
GeGHnXe
re
GHndZqMqMWdS(i����NtDISPLAYtwishtTkitupdatets% s
tinfotcompletetevals	TclError:(t_tkintertostcreatetenvironttktcalltcmdtpromptt	raw_inputtlinetEOFErrort
getbooleantrecordtresulttTclErrortmsg(((s//usr/lib64/python2.7/Demo/tkinter/guido/wish.pyt<module>s,
	


PKb1�ZM�dUUtkinter/guido/MimeViewer.pycnu�[����
Afc@soddlZddlTddlTddlmZdd	d��YZd�Zd�Zedkrke�ndS(
i����N(t*(tScrolledTextt
MimeViewercBsGeZd�Zd�Zd�Zd�Zd�Zd�Zd�ZRS(c	Cs�||_||_t|idd6dd6�|_idd6dd6|j_t|ji|d	6|jd
6�|_|jjidd6�|j	d
��}t
|d�}|r"t|ji|d6dd6dd6dd6dd6�|_idd6dd6|jd6|j_|jj
d|�nNt|jidd6dd6�|_idd6dd6dd6|jd6|j_|j�}t|�tkr)d|_t
|d�}|rt|ji|d6dd6dd6dd6dd6�|_idd6dd6|j_|jj
d|�n	d|_d|_n�t|jidd6dd6�|_idd6dd6dd6|jd6|j_g|_xQtt|��D]=}t|jd ||df||�}|jj|�q�Wd|_d|_dS(!NtraisedtreliefitbditexpandtbothtfillttexttcommandtwtanchorcSs|dko|d dkS(Ntreceivedisx400-((tx((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pyt<lambda>titheightiPtwidthtnonetwrapitaftertendttoptsidetipadyRi
tflattlefttipadxtys%s.%d(ttitletmsgtFrametframetpackingtCheckbuttonttoggletbuttontpackt
getheadertextt
countlinesRthtexttinserttgetbodyttypet
StringTypetNonetpadtbtexttpartstrangetlenRtappendt	collapsed(	tselftparentRRt
headertextRtbodytitp((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pyt__init__sn		 	
	
	
		

				
	cCs|jj|jj�dS(N(R!R&R"(R6((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pyR&GscCs|jj�dS(N(R!tdestroy(R6((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pyR=IscCs|jr|jj�ndS(N(R5R%tinvoke(R6((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pytshowKs	cCs$|jr|j�n
|j�dS(N(R5texplodetcollapse(R6((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pyR$Ns	
cCs�d|_x3|j|j|jfD]}|r"|j�q"q"W|jrlx!|jD]}|jj�qRWn|jjidd6�dS(NiiR(R5R)R0R/tforgetR1R!R&(R6tcomptpart((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pyRASs		cCs�d|_x9|j|j|jfD]}|r"|j|j�q"q"W|jrox|jD]}|j�qXWn|jjidd6�dS(NiiR(R5R)R0R/R&R"R1R!(R6RCRD((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pyR@\s		(	t__name__t
__module__R<R&R=R?R$RAR@(((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pyRs	;						cCs\d}d}xI||krWtj|d|�}|dkr@Pn|d}|d}qW|S(Nis
i(tstringtfind(tstrtlimitR:tn((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pyR(es
cCsBddl}ddl}ddl}|j|jdd�\}}x|D]\}}qJWd}d}x:|D]2}	|	d dkr�|	d}qmtj|	�}qmW|j�}
|
j|�}|s�|j	�}n|j
|�}t�}
|
j}t
|
d||f|�}|j�|j�|
jdd�|j�dS(Ni����iRtinboxt+s+%s/%d(tsystgetopttmhlibtargvR.RGtatoitMHt
openfoldert
getcurrenttopenmessagetTkttkRR&R?tminsizetmainloop(RNRORPtoptstargstotatmessagetfoldertargtmhtftmtrootRXR((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pytmainos0

		

t__main__((RGttypestTkinterRRR(RfRE(((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pyt<module>s

Z	
	 PKb1�Z�X�\tkinter/guido/ManPage.pycnu�[����
��^c@s�ddlZddlTddlmZddlmZdZdZejd�Zejd�Zejd	�Z	d
efd��YZ
de
fd
��YZeZd�Z
edkr�e
�ndS(i����N(t*(t_tkinter(tScrolledTexts*-Courier-Bold-R-Normal-*-120-*s!*-Courier-Medium-O-Normal-*-120-*s:^     Page [1-9][0-9]*[ 	]+\|^.*Last change:.*[1-9][0-9]*
s^[ 	]*
s^[ 	]*[Xv!_][Xv!_ 	]*
tEditableManPagecBsneZdd�Zd�Zd�Zd�ZeZd�Zd�Z	d�Z
d�Zd�Zd	d
�Z
RS(cKshttj||f|�|jddd�|jddt�|jddt�d|_d|_dS(NtXt	underlineit!tfontt_i(	tapplyRt__init__t
tag_configtBOLDFONTt
ITALICFONTtNonetfptlineno(tselftmastertcnf((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyR
s	cCs
|jdkS(N(RR(R((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pytbusy%scCs|j�r|j�ndS(N(Rt
_endparser(R((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pytkill)scCs-|j|�|jj|tj|j�dS(N(t_startparserttktcreatefilehandlerRtREADABLEt_filehandler(RR((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pytasyncparsefile.s
cCs4|jj�}|s#|j�dS|j|�dS(N(RtreadlineRt
_parseline(RRtmasktnextline((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyR6s

cCszddlm}|d|d�}|j|d�}|j|�x'|j�}|s[Pn|j|�qEW|j�dS(Ni����(tselectgcSs||ggg|�dS(Ni((RttoutR!((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pytavail@stheight(R!tgetintRRRR(RRR!R#R$R ((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyt
syncparsefile>s
cCs�|j�rtd�n|j�||_d|_d|_d|_d|_|d}t	|d<|j
dt�||d<dS(Nsstartparser: still busyitstates1.0(RtRuntimeErrortfilenoRRtoktemptyRtbuffertNORMALtdeletetEND(RRt	savestate((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyRLs
					

cCs�|j�std�n|jr1|jd�ny|jj|j�Wntk
r]}nX|jj�d|_|`
|`|`dS(Nsendparser: not busyt(RR(R,RRtdeletefilehandlerRtTclErrortcloseRR*R+(Rtmsg((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyR[s	
	cCs|js||_dStj|j�dkrDd|_||_dS|j}tj|�dkrt|}d|_nd}||_|js�d|_d|_dStj|�dkr�d|_d|_dS|d}t|d<t	dkr|j
dd�n|j
dt�|jrB|jd�|j
d|_
d|_n|sX|j|�n�d}d}xrttt|�t|���D]O}|||kr�||kr�|j|||!|�|}n||}q�q�W|j||�|j
d|_
||d<dS(	NiiR'g@tinsertsend-1cs
R1(R,t	emptyprogtmatchR+tulprogRR*t
footerprogR-t	TkVersiontmark_setR/t_insert_propRtrangetmintlen(RR ttextlinetproplineR0tptjti((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyRisV											

	
(	t cCs�|jt��}|jt�|�tdkrj|j|�}x'|D]}|j||t��qGWn|dkr�|j||t��ndS(Ng@RF(tindextAtInsertR6R;t	tag_namest
tag_removettag_add(Rtstrtproptherettagsttag((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyR=�s
N(t__name__t
__module__RR
RRRt	parsefileRR&RRRR=(((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyRs								<tReadonlyManPagecBseZdd�ZRS(cKs't|d<ttj||f|�dS(NR'(tDISABLEDR	RR
(RRR((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyR
�s
N(RQRRRR
(((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyRT�sc	CsNddl}ddl}d}d}d}|jdr]|jddkr]d}|jd=n|jdrz|jd}n|}|s�|dd!dkr�|d	}n|jj||�}nt�}|jdd�t|d
tdd�}|j	d
ddt
�|rt|d�}n|jd|d�}|j
|�|j�dS(Ni����s/usr/local/man/manntTcliis-fi����t.s.ntrelieftborderwidthitexpandtfilltrsnroff -man %s | ul -i(tostsystargvtpathtjointTktminsizetManPagetSUNKENtpacktBOTHtopentpopenRStmainloop(	R]R^tMANDIRtDEFAULTPAGEt	formattedtnametroottmanpageR((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyttest�s0 


	
t__main__(tretTkinterRRRR
tcompileR:R7R9RRTRdRqRQ(((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyt<module>s
	�	PKb1�Z��kK�\�\tkinter/guido/sortvisu.pyonu�[����
Afc@s�dZddlTddlmZmZddlZdZdZdZddd��YZ	d	dd
��YZ
d�Zd�Zd
�Z
d�Zd�Zd�Zd�Zd�Zd�Zd�Zddd��YZd�Zedkr�e�ndS(sjSorting algorithms visualizer using Tkinter.

This module is comprised of three ``components'':

- an array visualizer with methods that implement basic sorting
operations (compare, swap) as well as methods for ``annotating'' the
sorting algorithm (e.g. to show the pivot element);

- a number of sorting algorithms (currently quicksort, insertion sort,
selection sort and bubble sort, as well as a randomization function),
all using the array visualizer for its basic operations and with calls
to its annotation methods;

- and a ``driver'' class which can be used as a Grail applet or as a
stand-alone application.

i����(t*(tLinet	RectangleNi
itArraycBs�eZdd�Zd�ZdZd�Zd�ZdZdZ	d�Z
d�ZdZd	�Z
d
�Zd�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZRS(cCs||_t|j�|_|jjdt�t|j�|_|jj�t|j�|_|jj�t|j�|_	|j	j�t
|jdddd�|_t
|jdddd�|_t
|jdddd�|_
g|_d|_|_|r|j|�ndS(Ntfilli(tmastertFrametframetpacktXtLabeltlabeltCanvastcanvastreportRtlefttrighttpivottitemstsizetmaxvaluetsetdata(tselfRtdata((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyt__init__"s 	


	cCs�|j}g|_x|D]}|j�qWt|�|_t|�|_|jjd|jdtd|jdt	�x7t
|j�D]&}|jjt||||��q�W|j
d|j�dS(NtwidthitheightsSort demo, size %d(RtdeletetlenRtmaxRR
tconfigtXGRIDtYGRIDtrangetappendt	ArrayItemtreset(RRtolditemstitemti((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR4s		
$tnormalcCs
||_dS(N(tspeed(RR)((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytsetspeedCscCs|jj�dS(N(Rtdestroy(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR+FsicCs&d|_|jr"|jj�ndS(Ni(t
stop_mainlooptin_mainloopRtquit(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytcancelLs		cCs|jr|jj�ndS(N(R-RR.(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytstepQs	sArray.CancelledcCs�|jdkrd}n4|jdkr4|d}n|jdkrLd}n|js�|jj�|jj||jj�}d|_|jj�|jj|�d|_n|jr�d|_|j	d�t
j�ndS(	Ntfastestitfasti
ssingle-stepiʚ;it	Cancelled(R)R,RtupdatetafterR.R-tmainlooptafter_canceltmessageRR3(Rtmsecstid((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytwaitWs"	
		
	
		
cCs|jS(N(R(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytgetsizejscCszxit|j�D]X}|j|}||ko:|knrU|jjdd�q|jjdd�qW|j�dS(NRtredtorange(R!RRR&Rthide_left_right_pivot(RtfirsttlastR'R&((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytshow_partitionms
cCsHx7t|j�D]&}|j|}|jjdd�qW|j�dS(NRR=(R!RRR&RR?(RR'R&((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pythide_partitionvs
cCs�d|ko|jkns-|j�dS|j|j�\}}}}|jj|ddf|ddfg�|jj�dS(Niii'(Rt	hide_leftRtpositionRtcoordsRR4(RRtx1ty1tx2ty2((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyt	show_left|s
*cCs�d|ko|jkns-|j�dS|j|j�\}}}}|jj|ddf|ddff�|jj�dS(Niii'(Rt
hide_rightRRERRFRR4(RRRGRHRIRJ((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyt
show_right�s
*cCs"|j�|j�|j�dS(N(RDRLt
hide_pivot(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR?�s

cCs|jjddf�dS(Ni(ii(ii(RRF(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRD�scCs|jjddf�dS(Ni(ii(ii(RRF(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRL�scCsM|j|j�\}}}}|jjd|dfd|dff�dS(Niii'(RRERRF(RRRGRHRIRJ((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyt
show_pivot�scCs|jjddf�dS(Ni(ii(ii(RRF(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRN�scCs`||krdS|j�|j|}|j|}|||j|<|j|<|j|�dS(N(t	countswapRtswapwith(RR'tjR&tother((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytswap�s


cCs1|j�|j|}|j|}|j|�S(N(tcountcompareRt	compareto(RR'RRR&RS((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytcompare�s


cCs7d|_d|_|j|�|j�|j�dS(Ni(t	ncomparestnswapsR8tupdatereportRC(Rtmsg((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR$�s
		

cCs|jjd|�dS(Nttext(RR(RR[((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR8�scCs|jd|_|j�dS(Ni(RYRZ(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRP�scCs|jd|_|j�dS(Ni(RXRZ(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRU�scCs-d|j|jf}|jjd|�dS(Ns%d cmps, %d swapsR\(RXRYRR(RR\((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRZ�sN(t__name__t
__module__tNoneRRR)R*R+R-R,R/R0R3R;R<RBRCRKRMR?RDRLRORNRTRWR$R8RPRURZ(((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR s8	
																							R#cBsbeZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�ZRS(
cCs�||_||_||_|j�\}}}}t|j||||dddddd�|_|jjd|j�|jjd|j	�|jjd	|j
�dS(
NRR=toutlinetblackRis
<Button-1>s<Button1-Motion>s<ButtonRelease-1>(tarraytindextvalueRERR
R&tbindt
mouse_downt
mouse_movetmouse_up(RRbRcRdRGRHRIRJ((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�s			cCs)|j}d|_d|_|j�dS(N(R&R_RbR(RR&((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�s			cCsA|j|_|j|_|j|_|j|_|jj�dS(N(txtlastxtytlastytorigxtorigyR&ttkraise(Rtevent((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRf�s
cCsC|jj|j|j|j|j�|j|_|j|_dS(N(R&tmoveRiRjRkRl(RRp((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRg�s'c	Cs�|j|j�}||jj�kr=|jj�d}n|dkrRd}n|jj|}|j}|||jj|<|jj|<||_|j�\}}}}|jj||f||ff�|j	|�dS(Nii(
tnearestindexRiRbR<RRcRER&RFtsetindex(	RRpR'RSthereRGRHRIRJ((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRh�s		!	"cCs�t|j|�}|sdS|jjdkr7d}n|j�}||_|j�}t|||�}|jj�x<|D]4}|jj|d |df�|jj	d�q~WdS(NR1iii2(
tstepsRcRbR)REtinterpolateR&RoRFR;(RRctnstepstoldptstnewptst
trajectorytpts((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRs�s		

cCs�t|j|j�}|sdS|jjdkr:d}n|j�}|j�}|j|j|_|_|j�}|j�}|jd}|jd}|jjdd�|jjdd�|jjj�|jjdkrk|jj	|d |df�|jj	|d |df�|jjj�|jjd|�|jjd|�|jj
d�dSt|||�}	t|||�}
|j|jkr�|jj
�|jj
�n|jj
�|jj
�z�xztt|	��D]f}|	|}|
|}
|jj	|d |df�|jj	|
d |
df�|jj
d�q�WWd|	d	}|
d	}
|jj	|d |df�|jj	|
d |
df�|jjd|�|jjd|�XdS(
NR1iRtgreentyellowssingle-stepii2i����(RuRcRbR)RER&RRR4RFR;RvRdRoR!R(RRSRwtmyoldptstotheroldptstmynewptstothernewptstmyfillt	otherfilltmytrajectorytothertrajectoryR'tmyptstotherpts((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRQ�sV	








cCs�|jd}|jd}t|j|j�}|dkrJd}d}n%|dkred}d}n
d}}z:|jjd|�|jjd|�|jjd�Wd|jjd|�|jjd|�X|S(NRitwhiteRatgreyi�(R&tcmpRdRRbR;(RRSR�R�toutcometmyflasht
otherflash((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRV-s"

		
cCsX|jdttd}|t}|jjdt}||jt}||||fS(Nii(RcRtWIDTHRbRR Rd(RRGRIRJRH((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyREBs

cCsttt|�t��dS(Ni(tinttroundtfloatR(RRi((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRrIs(R]R^RRRfRgRhRsRQRVRERr(((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR#�s							.		cCs[t||�}|dkr)|d}n.|dkrB|d}n|dkrWd}n|S(Niiii
(tabs(RttthereRw((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRuOs

	cCs�t|�t|�kr$td�ndgt|�}t|�g}xmtd|�D]\}x@tt|��D],}||||||||||<qoW|jt|��qVW|jt|��|S(Ns,can't interpolate arrays of different lengthii(Rt
ValueErrorttupleR!R"(RxRytnR{tresR'tk((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRvYs*cCs=|j�}|j|ddg|�|jd|�dS(NiisUniform data, size %d(R<RR$(RbR((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytuniformhscCs;|j�}|jtd|d��|jd|�dS(NisDistinct data, size %d(R<RR!R$(RbR((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytdistinctmscCsg|jd�|j�}x:t|�D],}tjd|d�}|j||�q&W|jd�dS(NtRandomizingiit
Randomized(R$R<R!trandomtrandintRTR8(RbR�R'RR((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyt	randomizers
cCs�|j�}|jd�xrtd|�D]a}|d}xN|dkr�|j||d�dkrhPn|j||d�|d}q<Wq)W|jd�dS(NsInsertion sortiitSorted(R<R$R!RWRTR8(RbRR'RR((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyt
insertionsortzs

cCs�|j�}|jd�z�xmt|�D]_}|j||�xFt|d|�D]1}|j||�dkrS|j||�qSqSWq)W|jd�Wd|j�XdS(NsSelection sortiiR�(R<R$R!RBRWRTR8RC(RbRR'RR((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyt
selectionsort�s
cCs�|j�}|jd�xat|�D]S}xJtd|�D]9}|j|d|�dkr<|j|d|�q<q<Wq&W|jd�dS(NsBubble sortiiR�(R<R$R!RWRTR8(RbRR'RR((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyt
bubblesort�s
c
Cs�|j�}|jd�zYd|fg}x6|rc|d\}}|d=|j||�||dkr�|jd�xvt|d|�D]a}|d}xN||kr�|j||d�dkr�Pn|j||d�|d}q�Wq�Wq.n|jd�|||d|d}}}|j||�dkrO|j||�n|j||�dkrz|j||�n|j||�dkr�|j||�n|}|j|�|jd	�|jd
�|}	|}
x
|jd�|
d}
|j	|
�x?|
|krF|j|
|�dkrF|
d}
|j	|
�qW|jd�|	d}	|j
|	�x?|	|kr�|j|	|�dkr�|	d}	|j
|	�qnW|	|
kr�|jd
�Pn|jd�|j|	|
�q�W|jd�|j||
�|
|}||	}|dkr>|j||
f�n|dkr.|j|	|f�q.q.W|jd�Wd|j�XdS(Nt	Quicksortii����isInsertion sortisChoosing pivotisPivot at left of partitioni�sSweep right pointersSweep left pointersEnd of partitions
Swap itemssSwap pivot backR�(
R<R$RBR8R!RWRTROR;RMRKR"RC(
RbRtstackR@RAR'RRR�RRRtn1tn2((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyt	quicksort�sx
	


 





'



'





cCs<x5x.ttttgD]}t|�||�qWqWdS(N(R�R�R�R�R�(Rbtalg((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytdemosort�s
tSortDemocBs�eZdd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d	�Z
d
�Zd�Zd�Z
d
�Zd�ZRS(icCs||_||_d|_t|j�|_t|�|_|jjdt�t|j�|_	|j	jdt
dt�t|j�|_|jjdt
dt�t|j	ddd|j�|_|jjdt�t|j	ddd|j�|_|jjdt�t|j	ddd|j�|_|jjdt�t|j	dd	d|j�|_|jjdt�d
tfd��Y}||j|�|_|jj|�dd
ddgtddd�}|j|kr�|j|j�|j�ntt|j	|jft |��|_!|j!jdt�t"|j�|_#|j#jd�t|j	|j#dddd�|_$|j$jdt�t|j	ddd|j%�|_&|j&jdt�t|jddd|j'�|_(|j(jdt�t|jddd|j)�|_*|j*jdt�t|jddd|j+�|_,|j,jdt�t|jddd|j-�|_.|j.jdt�t|jddd|j/�|_0|j0jdt�|j0j1dt2�t|jddd|j3�|_4|j4jdt�dS(NitsideRR\R�tcommandsInsertion sortsSelection sortsBubble sorttMyIntVarcBseZd�Zd�ZRS(cSs||_tj||�dS(N(tdemotIntVarR(RRR�((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRs	cSs9tj||�t|�dkr5|jj|�ndS(Nt0(R�tsettstrR�tresize(RRd((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�s(R]R^RR�(((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR��s	iiiiii7R(ssingle-stepR2R1tStept	RandomizetUniformtDistincttDemotCanceltstatetQuit(5RRtbusyRRbRtbotframeRtBOTTOMtbotleftframetLEFTtYt
botrightframetRIGHTtButtontc_qsorttb_qsortR	tc_isorttb_isorttc_ssorttb_ssorttc_bsorttb_bsortR�tv_sizeR�R!R"tsorttapplyt
OptionMenuR�tm_sizet	StringVartv_speedtm_speedtc_steptb_steptc_randomizetb_randomizet	c_uniformt	b_uniformt
c_distinctt
b_distincttc_demotb_demotc_canceltb_cancelRtDISABLEDtc_quittb_quit(RRRR�tsizes((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�sv				"
"cCsG|jr|jj�dS||_|jjtd|jd��dS(Ni(R�RtbellRRbRR!(Rtnewsize((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�0s
	
	cCs|jt�dS(N(trunR�(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�7scCs|jt�dS(N(R�R�(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�:scCs|jt�dS(N(R�R�(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�=scCs|jt�dS(N(R�R�(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�@scCs|jt�dS(N(R�R�(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�CscCs|jt�dS(N(R�R�(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�FscCs|jt�dS(N(R�R�(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�IscCs|jt�dS(N(R�R�(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�LscCs�|jr|jj�dSd|_|jj|jj��|jjdt	�y||j�Wnt
jk
rvnX|jjdt�d|_dS(NiR�i(
R�RR�RbR*R�tgetR�RtNORMALRR3R�(Rtfunc((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�Os	
	cCs+|js|jj�dS|jj�dS(N(R�RR�RbR/(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�]s	
cCsK|js|jj�dS|jjd�|jjd�|jj�dS(Nssingle-step(R�RR�R�R�RbR*R0(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�cs	
cCs3|jr|jj�n|jj|jj�dS(N(R�RbR/Rt
after_idleR.(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�ks	(R]R^RR�R�R�R�R�R�R�R�R�R�R�R�R�(((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR��sL												cCs6t�}t|�}|jd|j�|j�dS(NtWM_DELETE_WINDOW(tTkR�tprotocolR�R6(trootR�((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytmainss	t__main__((((t__doc__tTkinterRRRR�RR R�RR#RuRvR�R�R�R�R�R�R�R�R�R�R](((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyt<module>s,
��	
						
			=		�	PKb1�Z%L��tkinter/guido/brownian2.pycnu�[����
��^c@s�ddlTddlZddlZdZdZdZdZdZdZdZ	da
dad	�Z
d
�Zd�Zedkr�e�ndS(
i����(t*Ni�i,i
itrediccs�t}tjtdt�}tjtdt�}|j||||||||dt�}x_ts�tjdt	�}tjdt	�}y|j
|||�Wntk
r�PqcXdVqcWdS(Ng@tfilli(
tRADIUStrandomtgausstWIDTHtSIGMAtHEIGHTtcreate_ovaltFILLtstoptBUZZtmovetTclErrortNone(tcanvastrtxtytptdxtdy((s4/usr/lib64/python2.7/Demo/tkinter/guido/brownian2.pytparticles.	
cCs:|j�tjt�}tjt|d�t|�dS(Ni�(tnextRtexpovariatetLAMBDAtroottaftertintR
(Rtdt((s4/usr/lib64/python2.7/Demo/tkinter/guido/brownian2.pyR
"s
cCs�t�attdtdt�}|jdddd�d}tjdr`ttjd�}nx$t	|�D]}t
t|��qmWztj�Wdda
XdS(NtwidththeightRtbothtexpandii(tTkRtCanvasRRtpacktsystargvRtrangeR
RtmainloopR(Rtnpti((s4/usr/lib64/python2.7/Demo/tkinter/guido/brownian2.pytmain's	
t__main__(tTkinterRR&RRRRRRR
RRRRR
R,t__name__(((s4/usr/lib64/python2.7/Demo/tkinter/guido/brownian2.pyt<module>s 
			PKb1�Z�+�$RRtkinter/guido/optionmenu.pycnu�[����
��^c@s�ddlTe�Ze�Zejd�eeeddd�Zej�dZ	e�Z
e
je	d
�eeee
fee	��Z
e
j�ej�dS(
i����(t*tOnetTwotThreetAahtBeetCeetDeetEffiN(RRRRR(tTkintertTktroott	StringVartvar1tsett
OptionMenutmenu1tpacktCHOICEStvar2tapplyttupletmenu2tmainloop(((s5/usr/lib64/python2.7/Demo/tkinter/guido/optionmenu.pyt<module>s
		

	
PKb1�Z�^u�iitkinter/guido/switch.pyonu�[����
��^c@sfddlTddd��YZddd��YZdd
d��YZd�Zed	krbe�nd
S(i����(t*tAppcBs)eZddd�Zd�Zd�ZRS(cCs�|dkr3|dkr$t�}q3t|�}n||_t|�|_|jj�t|dddt�|_|jjdddt	�i|_
d|_dS(Ntborderwidthitrelieftexpanditfill(tNonetTktToplevelttoptFrametbuttonframetpacktGROOVEt
panelframetBOTHtpanelstcurpanel(tselfR	tmaster((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pyt__init__s	
	cCs�t|jd|d||d��}|jdt�t|j�}||�}|||f|j|<|jdkr�|j	|�ndS(NttexttcommandcSs
|j|�S(N(tshow(Rtname((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pyt<lambda>ttside(
tButtonRRtLEFTR
RRRRR(RRtklasstbuttontframetinstance((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pytaddpanelscCsR|j|\}}}|jr/|jj�n||_|jdddd�dS(NRiRtboth(RRtpack_forgetR(RRRR R!((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pyRs
		N(t__name__t
__module__RRR"R(((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pyRs	
t
LabelPanelcBseZd�ZRS(cCs&t|dd�|_|jj�dS(NRsHello world(tLabeltlabelR(RR ((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pyR's(R%R&R(((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pyR'&stButtonPanelcBseZd�ZRS(cCs&t|dd�|_|jj�dS(NRsPress me(RRR(RR ((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pyR,s(R%R&R(((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pyR*+scCs:t�}|jdt�|jdt�|jj�dS(NR)R(RR"R'R*R	tmainloop(tapp((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pytmain0s	t__main__N((((tTkinterRR'R*R-R%(((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pyt<module>s
!	PKb1�Z-���88tkinter/guido/AttrDialog.pynu�[���
# The options of a widget are described by the following attributes
# of the Pack and Widget dialogs:
#
# Dialog.current: {name: value}
# -- changes during Widget's lifetime
#
# Dialog.options: {name: (default, klass)}
# -- depends on widget class only
#
# Dialog.classes: {klass: (v0, v1, v2, ...) | 'boolean' | 'other'}
# -- totally static, though different between PackDialog and WidgetDialog
#    (but even that could be unified)

from Tkinter import *

class Option:

    varclass = StringVar            # May be overridden

    def __init__(self, dialog, option):
        self.dialog = dialog
        self.option = option
        self.master = dialog.top
        self.default, self.klass = dialog.options[option]
        self.var = self.varclass(self.master)
        self.frame = Frame(self.master)
        self.frame.pack(fill=X)
        self.label = Label(self.frame, text=(option + ":"))
        self.label.pack(side=LEFT)
        self.update()
        self.addoption()

    def refresh(self):
        self.dialog.refresh()
        self.update()

    def update(self):
        try:
            self.current = self.dialog.current[self.option]
        except KeyError:
            self.current = self.default
        self.var.set(self.current)

    def set(self, e=None):          # Should be overridden
        pass

class BooleanOption(Option):

    varclass = BooleanVar

    def addoption(self):
        self.button = Checkbutton(self.frame,
                                 text='on/off',
                                 onvalue=1,
                                 offvalue=0,
                                 variable=self.var,
                                 relief=RAISED,
                                 borderwidth=2,
                                 command=self.set)
        self.button.pack(side=RIGHT)

class EnumOption(Option):

    def addoption(self):
        self.button = Menubutton(self.frame,
                                 textvariable=self.var,
                                 relief=RAISED, borderwidth=2)
        self.button.pack(side=RIGHT)
        self.menu = Menu(self.button)
        self.button['menu'] = self.menu
        for v in self.dialog.classes[self.klass]:
            self.menu.add_radiobutton(
                label=v,
                variable=self.var,
                value=v,
                command=self.set)

class StringOption(Option):

    def addoption(self):
        self.entry = Entry(self.frame,
                           textvariable=self.var,
                           width=10,
                           relief=SUNKEN,
                           borderwidth=2)
        self.entry.pack(side=RIGHT, fill=X, expand=1)
        self.entry.bind('<Return>', self.set)

class ReadonlyOption(Option):

    def addoption(self):
        self.label = Label(self.frame, textvariable=self.var,
                           anchor=E)
        self.label.pack(side=RIGHT)

class Dialog:

    def __init__(self, master):
        self.master = master
        self.fixclasses()
        self.refresh()
        self.top = Toplevel(self.master)
        self.top.title(self.__class__.__name__)
        self.top.minsize(1, 1)
        self.addchoices()

    def refresh(self): pass         # Must override

    def fixclasses(self): pass      # May override

    def addchoices(self):
        self.choices = {}
        list = []
        for k, dc in self.options.items():
            list.append((k, dc))
        list.sort()
        for k, (d, c) in list:
            try:
                cl = self.classes[c]
            except KeyError:
                cl = 'unknown'
            if type(cl) == TupleType:
                cl = self.enumoption
            elif cl == 'boolean':
                cl = self.booleanoption
            elif cl == 'readonly':
                cl = self.readonlyoption
            else:
                cl = self.stringoption
            self.choices[k] = cl(self, k)

    # Must override:
    options = {}
    classes = {}

    # May override:
    booleanoption = BooleanOption
    stringoption = StringOption
    enumoption = EnumOption
    readonlyoption = ReadonlyOption

class PackDialog(Dialog):

    def __init__(self, widget):
        self.widget = widget
        Dialog.__init__(self, widget)

    def refresh(self):
        self.current = self.widget.info()
        self.current['.class'] = self.widget.winfo_class()
        self.current['.name'] = self.widget._w

    class packoption: # Mix-in class
        def set(self, e=None):
            self.current = self.var.get()
            try:
                apply(self.dialog.widget.pack, (),
                      {self.option: self.current})
            except TclError, msg:
                print msg
                self.refresh()

    class booleanoption(packoption, BooleanOption): pass
    class enumoption(packoption, EnumOption): pass
    class stringoption(packoption, StringOption): pass
    class readonlyoption(packoption, ReadonlyOption): pass

    options = {
            '.class': (None, 'Class'),
            '.name': (None, 'Name'),
            'after': (None, 'Widget'),
            'anchor': ('center', 'Anchor'),
            'before': (None, 'Widget'),
            'expand': ('no', 'Boolean'),
            'fill': ('none', 'Fill'),
            'in': (None, 'Widget'),
            'ipadx': (0, 'Pad'),
            'ipady': (0, 'Pad'),
            'padx': (0, 'Pad'),
            'pady': (0, 'Pad'),
            'side': ('top', 'Side'),
            }

    classes = {
            'Anchor': (N, NE, E, SE, S, SW, W, NW, CENTER),
            'Boolean': 'boolean',
            'Class': 'readonly',
            'Expand': 'boolean',
            'Fill': (NONE, X, Y, BOTH),
            'Name': 'readonly',
            'Pad': 'pixel',
            'Side': (TOP, RIGHT, BOTTOM, LEFT),
            'Widget': 'readonly',
            }

class RemotePackDialog(PackDialog):

    def __init__(self, master, app, widget):
        self.master = master
        self.app = app
        self.widget = widget
        self.refresh()
        self.top = Toplevel(self.master)
        self.top.title(self.app + ' PackDialog')
        self.top.minsize(1, 1)
        self.addchoices()

    def refresh(self):
        try:
            words = self.master.tk.splitlist(
                    self.master.send(self.app,
                                     'pack',
                                     'info',
                                     self.widget))
        except TclError, msg:
            print msg
            return
        dict = {}
        for i in range(0, len(words), 2):
            key = words[i][1:]
            value = words[i+1]
            dict[key] = value
        dict['.class'] = self.master.send(self.app,
                                          'winfo',
                                          'class',
                                          self.widget)
        dict['.name'] = self.widget
        self.current = dict

    class remotepackoption: # Mix-in class
        def set(self, e=None):
            self.current = self.var.get()
            try:
                self.dialog.master.send(
                        self.dialog.app,
                        'pack',
                        'config',
                        self.dialog.widget,
                        '-'+self.option,
                        self.dialog.master.tk.merge(
                                self.current))
            except TclError, msg:
                print msg
                self.refresh()

    class booleanoption(remotepackoption, BooleanOption): pass
    class enumoption(remotepackoption, EnumOption): pass
    class stringoption(remotepackoption, StringOption): pass
    class readonlyoption(remotepackoption, ReadonlyOption): pass

class WidgetDialog(Dialog):

    def __init__(self, widget):
        self.widget = widget
        self.klass = widget.winfo_class()
        Dialog.__init__(self, widget)

    def fixclasses(self):
        if self.addclasses.has_key(self.klass):
            classes = {}
            for c in (self.classes,
                      self.addclasses[self.klass]):
                for k in c.keys():
                    classes[k] = c[k]
            self.classes = classes

    def refresh(self):
        self.configuration = self.widget.config()
        self.update()
        self.current['.class'] = self.widget.winfo_class()
        self.current['.name'] = self.widget._w

    def update(self):
        self.current = {}
        self.options = {}
        for k, v in self.configuration.items():
            if len(v) > 4:
                self.current[k] = v[4]
                self.options[k] = v[3], v[2] # default, klass
        self.options['.class'] = (None, 'Class')
        self.options['.name'] = (None, 'Name')

    class widgetoption: # Mix-in class
        def set(self, e=None):
            self.current = self.var.get()
            try:
                self.dialog.widget[self.option] = self.current
            except TclError, msg:
                print msg
                self.refresh()

    class booleanoption(widgetoption, BooleanOption): pass
    class enumoption(widgetoption, EnumOption): pass
    class stringoption(widgetoption, StringOption): pass
    class readonlyoption(widgetoption, ReadonlyOption): pass

    # Universal classes
    classes = {
            'Anchor': (N, NE, E, SE, S, SW, W, NW, CENTER),
            'Aspect': 'integer',
            'Background': 'color',
            'Bitmap': 'bitmap',
            'BorderWidth': 'pixel',
            'Class': 'readonly',
            'CloseEnough': 'double',
            'Command': 'command',
            'Confine': 'boolean',
            'Cursor': 'cursor',
            'CursorWidth': 'pixel',
            'DisabledForeground': 'color',
            'ExportSelection': 'boolean',
            'Font': 'font',
            'Foreground': 'color',
            'From': 'integer',
            'Geometry': 'geometry',
            'Height': 'pixel',
            'InsertWidth': 'time',
            'Justify': (LEFT, CENTER, RIGHT),
            'Label': 'string',
            'Length': 'pixel',
            'MenuName': 'widget',
            'Name': 'readonly',
            'OffTime': 'time',
            'OnTime': 'time',
            'Orient': (HORIZONTAL, VERTICAL),
            'Pad': 'pixel',
            'Relief': (RAISED, SUNKEN, FLAT, RIDGE, GROOVE),
            'RepeatDelay': 'time',
            'RepeatInterval': 'time',
            'ScrollCommand': 'command',
            'ScrollIncrement': 'pixel',
            'ScrollRegion': 'rectangle',
            'ShowValue': 'boolean',
            'SetGrid': 'boolean',
            'Sliderforeground': 'color',
            'SliderLength': 'pixel',
            'Text': 'string',
            'TickInterval': 'integer',
            'To': 'integer',
            'Underline': 'index',
            'Variable': 'variable',
            'Value': 'string',
            'Width': 'pixel',
            'Wrap': (NONE, CHAR, WORD),
            }

    # Classes that (may) differ per widget type
    _tristate = {'State': (NORMAL, ACTIVE, DISABLED)}
    _bistate = {'State': (NORMAL, DISABLED)}
    addclasses = {
            'Button': _tristate,
            'Radiobutton': _tristate,
            'Checkbutton': _tristate,
            'Entry': _bistate,
            'Text': _bistate,
            'Menubutton': _tristate,
            'Slider': _bistate,
            }

class RemoteWidgetDialog(WidgetDialog):

    def __init__(self, master, app, widget):
        self.app = app
        self.widget = widget
        self.klass = master.send(self.app,
                                 'winfo',
                                 'class',
                                 self.widget)
        Dialog.__init__(self, master)

    def refresh(self):
        try:
            items = self.master.tk.splitlist(
                    self.master.send(self.app,
                                     self.widget,
                                     'config'))
        except TclError, msg:
            print msg
            return
        dict = {}
        for item in items:
            words = self.master.tk.splitlist(item)
            key = words[0][1:]
            value = (key,) + words[1:]
            dict[key] = value
        self.configuration = dict
        self.update()
        self.current['.class'] = self.klass
        self.current['.name'] = self.widget

    class remotewidgetoption: # Mix-in class
        def set(self, e=None):
            self.current = self.var.get()
            try:
                self.dialog.master.send(
                        self.dialog.app,
                        self.dialog.widget,
                        'config',
                        '-'+self.option,
                        self.current)
            except TclError, msg:
                print msg
                self.refresh()

    class booleanoption(remotewidgetoption, BooleanOption): pass
    class enumoption(remotewidgetoption, EnumOption): pass
    class stringoption(remotewidgetoption, StringOption): pass
    class readonlyoption(remotewidgetoption, ReadonlyOption): pass

def test():
    import sys
    root = Tk()
    root.minsize(1, 1)
    if sys.argv[1:]:
        remotetest(root, sys.argv[1])
    else:
        frame = Frame(root, name='frame')
        frame.pack(expand=1, fill=BOTH)
        button = Button(frame, name='button', text='button')
        button.pack(expand=1)
        canvas = Canvas(frame, name='canvas')
        canvas.pack()
        fpd = PackDialog(frame)
        fwd = WidgetDialog(frame)
        bpd = PackDialog(button)
        bwd = WidgetDialog(button)
        cpd = PackDialog(canvas)
        cwd = WidgetDialog(canvas)
    root.mainloop()

def remotetest(root, app):
    from listtree import listtree
    list = listtree(root, app)
    list.bind('<Any-Double-1>', opendialogs)
    list.app = app                  # Pass it on to handler

def opendialogs(e):
    import string
    list = e.widget
    sel = list.curselection()
    for i in sel:
        item = list.get(i)
        widget = string.split(item)[0]
        RemoteWidgetDialog(list, list.app, widget)
        if widget == '.': continue
        try:
            RemotePackDialog(list, list.app, widget)
        except TclError, msg:
            print msg

test()
PKb1�Z��V���tkinter/guido/rmt.pyonu�[����
Afc
@s�ddlTddlZe�ZejZeededd�Zejde	�ee�Z
e
jddde�ee
de
�Zejd	ede�ee
deddd
ejdd�Zejd	ededd�ejdd
d�ejed<ejd�ejd�eedddd�Zejd	e�ee�Zeed<eedd�Zejddddde�ejdddddej �d�Z!ej"de!�d�Z#ej"de#�d�Z$ej"d e$�d!�Z%ej"d"e%�d#�Z&ej"d$e&�d%�Z'ej"d&e'�ej"d'e'�ej"d(e'�d)�Z(d*�Z)d+�Z*d,�Z+e+ed-<ej,e�ej-�a.e)�ej/�ej0�dS(.i����(t*Ntrelieftborderwidthitfilltexpanditsidetyscrollcommandtsetgridtboldtfonts$-Adobe-Courier-Bold-R-Normal-*-120-*tcommandsTk Remote Controllers	Tk RemotettexttFilet	underlineitmenuttearofftlabelsSelect ApplicationtQuitcCs?|j}|j}tjdd�tjdt||��dS(Nstk_priv(selectMode)tchartanchor(txtytttsetvartmark_settAt(teRR((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pytsingle15s		s<1>cCs<|j}|j}tjdd�tjt||��dS(Nstk_priv(selectMode)tword(RRRRttk_textSelectToR(RRR((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pytdouble1=s		s
<Double-1>cCs<|j}|j}tjdd�tjt||��dS(Nstk_priv(selectMode)tline(RRRRRR(RRR((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pyttriple1Ds		s
<Triple-1>cCstjt�d�t�dS(Ns
(RtinserttAtInserttinvoke(R((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pyt	returnkeyKss<Return>cCsStjt�tj��tjt��tjt��ddkrOt�ndS(Ni����s.0(RR!R"t
selection_gettyview_pickplacetindexR#(R((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pytcontrolvPss<Control-v>cCsHtjd�tjd�krDtjdt��tjt��ndS(Nt	promptEndsinsert - 1 char(RR'tdeleteR"R&(R((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pyt	backspaceZss<BackSpace>s<Control-h>s<Delete>cCs�tjdt��}tjtjdd|��r�ttj�krZtjd|�}ntj	t|�}|r�tj
t�|d�nt�ntjt��dS(NspromptEnd + 1 chartinfotcompletetevals
(
RtgetR"t
getbooleanttktcalltapptroott
winfo_nametsendR!tpromptR&(tcmdtmsg((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pyR#is
cCs>tjt�td�tjdd�tjddd�dS(Ns: R)sinsert - 1 charRsinsert linestart(RR!R"R3Rttag_add(((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pyR7uscCsA|atjdd�tjd|d�tjddd�dS(NspromptEnd linestartR)t:R(R3RR*R!R:(tappName((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pytnewApp~scCs�tjd�tjdd�tj�}t|�}|j�xR|D]J}ytj|d�Wntk
rsqFXtj	d|d|d��qFWdS(NR
itlastswinfo name .RcSs
t|�S(N(R=(tname((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pyt<lambda>�t(
tfile_m_appstaddR*R4t
winfo_interpstlisttsortR6tTclErrortadd_command(tnamesR?((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pytfillAppsMenu�s



	tpostcommand(1tTkintertsystTkR4R1tFrametRAISEDtmBartpacktXtftBOTHt	ScrollbartFLATtstRIGHTtYtTexttsetRtLEFTt
tag_configtyviewttitleticonnamet
MenubuttontfiletMenutfile_mRBtadd_cascadeRHtexitRtbindRR R$R(R+R#R7R=RJt
tk_menuBarR5R3tfocustmainloop(((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pyt<module>s^
		'



												


PKb1�Z���,�)�)tkinter/guido/canvasevents.pycnu�[����
Afc@s�ddlTddlmZmZmZdefd��YZddd��YZdefd��YZd	dd
��YZdefd��YZd
efd��YZ	de	fd��YZ
ddd��YZd�Ze
dkr�e�ndS(i����(t*(tOvaltGroupt
CanvasTextRcBseZddd�ZRS(cCs|jj|j||�S(N(tcanvasttag_bindtid(tselftsequencetcommand((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pytbindsN(t__name__t
__module__tNoneR
(((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR
stObjectcBsYeZdZddddd�Zd�Zd�Zd�Zd�Zd	�Zd
�Z	RS(s�Base class for composite graphical objects.

    Objects belong to a canvas, and can be moved around on the canvas.
    They also belong to at most one ``pile'' of objects, and can be
    transferred between piles (or removed from their pile).

    Objects have a canonical ``x, y'' position which is moved when the
    object is moved.  Where the object is relative to this position
    depends on the object; for simple objects, it may be their center.

    Objects have mouse sensitivity.  They can be clicked, dragged and
    double-clicked.  The behavior may actually be determined by the pile
    they are in.

    All instance attributes are public since the derived class may
    need them.

    itredtobjectcCsJ||_||_||_d|_t|j�|_|j||�dS(N(RtxtyR
tpileRtgrouptcreateitems(RRRRtfillttext((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyt__init__#s				cCs
t|j�S(N(tstrR(R((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyt__str__+sc
Cs�t|j|jd|jd|jd|jdd|dd�|_|jj|j�t|j|j|jd|�|_|jj|j�dS(Nii
RtwidthiR(	RRRRt
_Object__ovalRtaddtag_withtagRt
_Object__text(RRR((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR.s	+	cCsW||kodknr dS|jj||�|j||_|j||_dS(Ni(RtmoveRR(Rtdxtdy((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pytmoveby7s
cCs"|j||j||j�dS(N(R"RR(RRR((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pytmoveto>scCsN|jr%|jj|�d|_n||_|jrJ|jj|�ndS(N(RtdeleteR
tadd(RR((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyttransferAs			cCs|jj�dS(N(Rttkraise(R((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR'Is(
RRt__doc__RRRR"R#R&R'(((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyRs						tBottomcBseZdZd�ZRS(s+An object to serve as the bottom of a pile.c
Gs]t|j|jd|jd|jd|jddddd�|_|jj|j�dS(Nii
Rtgraytoutlinet(RRRRt
_Bottom__ovalRR(Rtargs((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyRQs	+(RRR(R(((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR)MstPilecBsPeZdZdd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
RS(	sA group of graphical objects.cCs~||_||_||_g|_t|j|j|j�|_t|jd|�|_|jj|jj�|j	�dS(Nttag(
RRRtobjectsR)tbottomRRRtbindhandlers(RRRRR0((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR\s				cCs0|jjd|j�|jjd|j�dS(Ns<1>s
<Double-1>(RR
tclickhandlertdoubleclickhandler(R((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR3fscCs4|jj|�|jj|j�|j|�dS(N(R1tappendRRtposition(RR((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR%jscCs'|jj|j�|jj|�dS(N(RtdtagR1tremove(RR((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR$oscCsF|j�|jj|�}|j|j|d|j|d�dS(Nii(R'R1tindexR#RR(RRti((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR7ss
cCsdS(N((Rtevent((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR4xscCsdS(N((RR<((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR5{sN(RRR(R
RR3R%R$R7R4R5(((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR/Xs
					t
MovingPilecBsAeZd�ZdZd�ZeZd�Zd�Zd�Z	RS(cCs=tj|�|jjd|j�|jjd|j�dS(Ns<B1-Motion>s<ButtonRelease-1>(R/R3RR
t
motionhandlertreleasehandler(R((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR3�s
cCs�|jjd�}xMtt|j��D])}|j|}|jj|kr(Pq(q(Wd|_dS|j||_x|jD]}|j	�q|W|j
|_|j|_
dS(Ntcurrent(RtgettagstrangetlenR1RR0R
tmovethisR'RtlastxRtlasty(RR<ttagsR;to((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR4�s
	cCsm|js
dS|j|j}|j|j}|j|_|j|_x!|jD]}|j||�qOWdS(N(RDRRERRFR"(RR<R R!RH((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR>�s	cCs-|j}|sdSd|_|j|�dS(N(RDR
t
finishmove(RR<R1((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR?�s
		cCs"x|D]}|j|�qWdS(N(R7(RR1RH((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyRI�s
N(
RRR3R
RDR4R5R>R?RI(((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR=s			
	tPile1cBs>eZdZdZdZd�Zd�Zd�Zd�ZRS(i2tp1cCs5||_tj||jj|j|j|j�dS(N(tdemoR=RRRRR0(RRL((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR�s	cCsMy|jd}Wntk
r%dSX|j|j��tj||�dS(Ni����(R1t
IndexErrorR&totherR=R5(RR<RH((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR5�s
cCs
|jjS(N(RLtp2(R((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyRN�scCs�|d}|j�}|j|j}}||jd||jd||jd||jdkr�x.|D]}|j|�qpWntj||�dS(Nii(RNRRR&R=RI(RR1RHtpRR((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyRI�s
@
(	RRRRR0RR5RNRI(((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyRJ�s			tPile2cBs#eZdZdZdZd�ZRS(i�i2ROcCs
|jjS(N(RLRK(R((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyRN�s(RRRRR0RN(((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyRQ�stDemocBseZd�ZRS(cCs�||_t|dddddddtdd�|_|jjd	d
dt�t|�|_t|�|_	t
|jddd
d�}t
|jddd
d�}t
|jddd
d�}|j|j�|j|j�|j|j	�dS(NRi�theightt
backgroundtyellowtrelieftborderwidthitexpandiRRRto1tgreento2s
light blueto3(tmastertCanvastSUNKENRtpacktBOTHRJRKRQRORR&(RR]RYR[R\((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR�s		(RRR(((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyRR�scCs6t�}t|�}|jd|j�|j�dS(NtWM_DELETE_WINDOW(tTkRRtprotocoltquittmainloop(trootRL((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pytmain�s	t__main__N((((tTkinterR^RRRRR)R/R=RJRQRRRhR(((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyt<module>s
?'0
	PKb1�Z)t�MIMItkinter/guido/AttrDialog.pycnu�[����
��^c@sddlTddd��YZdefd��YZdefd��YZdefd	��YZd
efd��YZddd
��YZdefd��YZdefd��YZdefd��YZ	de	fd��YZ
d�Zd�Zd�Z
e�dS(i����(t*tOptioncBs5eZeZd�Zd�Zd�Zdd�ZRS(cCs�||_||_|j|_|j|\|_|_|j|j�|_t	|j�|_
|j
jdt�t
|j
d|d�|_|jjdt�|j�|j�dS(Ntfillttextt:tside(tdialogtoptionttoptmastertoptionstdefaulttklasstvarclasstvartFrametframetpacktXtLabeltlabeltLEFTtupdatet	addoption(tselfRR((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyt__init__s		
cCs|jj�|j�dS(N(RtrefreshR(R((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR"s
cCsQy|jj|j|_Wntk
r9|j|_nX|jj|j�dS(N(RtcurrentRtKeyErrorRRtset(R((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR&s

cCsdS(N((Rte((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR-sN(	t__name__t
__module__t	StringVarR
RRRtNoneR(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRs
	
		t
BooleanOptioncBseZeZd�ZRS(cCsYt|jddddddd|jdtd	d
d|j�|_|jjdt�dS(
NRson/offtonvalueitoffvalueitvariabletrelieftborderwidthitcommandR(tCheckbuttonRRtRAISEDRtbuttonRtRIGHT(R((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR4s	(RR t
BooleanVarR
R(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR#0st
EnumOptioncBseZd�ZRS(c
Cs�t|jd|jdtdd�|_|jjdt�t|j�|_|j|jd<xF|j	j
|jD]1}|jjd|d|jd	|d
|j
�qpWdS(NttextvariableR'R(iRtmenuRR&tvalueR)(t
MenubuttonRRR+R,RR-tMenuR1RtclassesRtadd_radiobuttonR(Rtv((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRAs		(RR R(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR/?stStringOptioncBseZd�ZRS(c
Csft|jd|jdddtdd�|_|jjdtdtd	d
�|jjd|j	�dS(NR0twidthi
R'R(iRRtexpandis<Return>(
tEntryRRtSUNKENtentryRR-RtbindR(R((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRQs	(RR R(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR8OstReadonlyOptioncBseZd�ZRS(cCs8t|jd|jdt�|_|jjdt�dS(NR0tanchorR(RRRtERRR-(R((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR\s(RR R(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR?ZstDialogcBsPeZd�Zd�Zd�Zd�ZiZiZeZ	e
ZeZ
eZRS(cCsf||_|j�|j�t|j�|_|jj|jj�|jjdd�|j	�dS(Ni(
R	t
fixclassesRtToplevelRttitlet	__class__Rtminsizet
addchoices(RR	((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRcs	

cCsdS(N((R((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRltcCsdS(N((R((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRCnRIcCsi|_g}x0|jj�D]\}}|j||f�qW|j�x�|D]�\}\}}y|j|}Wntk
r�d}nXt|�tkr�|j	}n9|dkr�|j
}n!|dkr�|j}n	|j}|||�|j|<qSWdS(Ntunknowntbooleantreadonly(
tchoicesR
titemstappendtsortR5Rttypet	TupleTypet
enumoptiont
booleanoptiontreadonlyoptiontstringoption(Rtlisttktdctdtctcl((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRHps$	


	(RR RRRCRHR
R5R#RTR8RVR/RSR?RU(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRBas					t
PackDialogc
BsjeZd�Zd�Zdd*d��YZdeefd��YZdeefd��YZdee	fd	��YZ
d
eefd��YZi
d,d
6d-d6d.d6d/d6d0d6d1d6d2d6d3d6d4d6d5d 6d6d!6d7d"6d8d%6Zi	eeeeeeeeef	d6d&d6d'd6d&d(6eeeefd6d'd6d)d6eeeefd$6d'd6Z RS(9cCs||_tj||�dS(N(twidgetRBR(RR^((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR�s	cCs?|jj�|_|jj�|jd<|jj|jd<dS(Ns.classs.name(R^tinfoRtwinfo_classt_w(R((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR�st
packoptioncBseZdd�ZRS(cCse|jj�|_y*t|jjjdi|j|j6�Wn"tk
r`}|GH|j	�nXdS(N((
RtgetRtapplyRR^RRtTclErrorR(RRtmsg((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR�sN(RR R"R(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRb�sRTcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRT�sRScBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRS�sRVcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRV�sRUcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRU�stClasss.classtNames.nametWidgettaftertcentertAnchorR@tbeforetnotBooleanR:tnonetFillRtinitPadtipadxtipadytpadxtpadyRtSideRRKRLtExpandtpixel(N(NRg(NRh(NRi(RkRl(NRi(RnRo(RpRq(NRi(iRs(iRs(iRs(iRs(RRx(!RR RRRbR#RTR/RSR8RVR?RUR"R
tNtNERAtSEtStSWtWtNWtCENTERtNONERtYtBOTHtTOPR-tBOTTOMRR5(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR]�s>		

"tRemotePackDialogcBs�eZd�Zd�Zddd��YZdeefd��YZdeefd��YZdee	fd	��YZ
d
eefd��YZRS(
cCso||_||_||_|j�t|j�|_|jj|jd�|jjdd�|j�dS(Ns PackDialogi(	R	tappR^RRDRRERGRH(RR	R�R^((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR�s			
cCs�y4|jjj|jj|jdd|j��}Wntk
rO}|GHdSXi}xFtdt|�d�D],}||d}||d}|||<qoW|jj|jdd|j�|d<|j|d	<||_	dS(
NRR_iiitwinfotclasss.classs.name(
R	ttkt	splitlisttsendR�R^RetrangetlenR(RtwordsRftdicttitkeyR2((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR�s(
tremotepackoptioncBseZdd�ZRS(cCs�|jj�|_yN|jjj|jjdd|jjd|j|jjj	j
|j��Wn"tk
r�}|GH|j�nXdS(NRtconfigt-(
RRcRRR	R�R�R^RR�tmergeReR(RRRf((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR�s		
N(RR R"R(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR��sRTcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRT�sRScBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRS�sRVcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRV�sRUcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRU�s((
RR RRR�R#RTR/RSR8RVR?RU(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR��s	
	tWidgetDialogc
Bs�eZd�Zd�Zd�Zd�ZddTd��YZdeefd��YZdee	fd	��YZ
d
eefd��YZdee
fd
��YZi.eeeeeeeeef	d6dd6dd6dd6dd6dd6dd6dd6dd6dd 6dd!6dd"6dd#6d$d%6dd&6dd'6d(d)6dd*6d+d,6eeefd-6d.d/6dd06d1d26dd36d+d46d+d56eefd66dd76eeeee fd86d+d96d+d:6dd;6dd<6d=d>6dd?6dd@6ddA6ddB6d.dC6ddD6ddE6dFdG6dHdI6d.dJ6ddK6e!e"e#fdL6Z$ie%e&e'fdM6Z(ie%e'fdM6Z)ie(dN6e(dO6e(dP6e)dQ6e)dC6e(dR6e)dS6Z*RS(UcCs,||_|j�|_tj||�dS(N(R^R`RRBR(RR^((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR�s	cCst|jj|j�rpi}xF|j|j|jfD]+}x"|j�D]}||||<qHWq5W||_ndS(N(t
addclassesthas_keyRR5tkeys(RR5R[RX((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRCs	cCsI|jj�|_|j�|jj�|jd<|jj|jd<dS(Ns.classs.name(R^R�t
configurationRR`RRa(R((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRs
cCs�i|_i|_x^|jj�D]M\}}t|�dkr"|d|j|<|d|df|j|<q"q"Wd|jd<d	|jd<dS(
NiiiRgs.classRhs.name(NRg(NRh(RR
R�RNR�R"(RRXR7((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRs		"
twidgetoptioncBseZdd�ZRS(cCsU|jj�|_y|j|jj|j<Wn"tk
rP}|GH|j�nXdS(N(RRcRRR^RReR(RRRf((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRsN(RR R"R(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR�sRTcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRT%sRScBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRS&sRVcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRV'sRUcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRU(sRltintegertAspecttcolort
BackgroundtbitmaptBitmapRztBorderWidthRLRgtdoubletCloseEnoughR)tCommandRKtConfinetcursortCursortCursorWidthtDisabledForegroundtExportSelectiontfonttFontt
ForegroundtFromtgeometrytGeometrytHeightttimetInsertWidthtJustifytstringRtLengthR^tMenuNameRhtOffTimetOnTimetOrientRstRelieftRepeatDelaytRepeatIntervalt
ScrollCommandtScrollIncrementt	rectangletScrollRegiont	ShowValuetSetGridtSliderforegroundtSliderLengthtTexttTickIntervaltTotindext	UnderlineR&tVariabletValuetWidthtWraptStatetButtontRadiobuttonR*R;R3tSlider((+RR RRCRRR�R#RTR/RSR8RVR?RUR{R|RAR}R~RR�R�R�RR-t
HORIZONTALtVERTICALR+R<tFLATtRIDGEtGROOVER�tCHARtWORDR5tNORMALtACTIVEtDISABLEDt	_tristatet_bistateR�(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR��s�					
	"
tRemoteWidgetDialogcBs�eZd�Zd�Zddd��YZdeefd��YZdeefd��YZdee	fd	��YZ
d
eefd��YZRS(
cCsG||_||_|j|jdd|j�|_tj||�dS(NR�R�(R�R^R�RRBR(RR	R�R^((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRks		cCs�y1|jjj|jj|j|jd��}Wntk
rL}|GHdSXi}xL|D]D}|jjj|�}|dd}|f|d}|||<qZW||_|j�|j	|j
d<|j|j
d<dS(NR�iis.classs.name(R	R�R�R�R�R^ReR�RRR(RRNRfR�titemR�R�R2((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRts$
	
tremotewidgetoptioncBseZdd�ZRS(cCst|jj�|_y9|jjj|jj|jjdd|j|j�Wn"t	k
ro}|GH|j
�nXdS(NR�R�(RRcRRR	R�R�R^RReR(RRRf((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR�s		
N(RR R"R(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR��sRTcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRT�sRScBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRS�sRVcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRV�sRUcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRU�s((
RR RRR�R#RTR/RSR8RVR?RU(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR�is			cCsddl}t�}|jdd�|jdrIt||jd�n�t|dd�}|jdddt�t|dddd�}|jdd�t	|dd	�}|j�t
|�}t|�}t
|�}t|�}t
|�}	t|�}
|j�dS(
Ni����itnameRR:RR,Rtcanvas(
tsystTkRGtargvt
remotetestRRR�R�tCanvasR]R�tmainloop(R�trootRR,R�tfpdtfwdtbpdtbwdtcpdtcwd((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyttest�s$	

cCs<ddlm}|||�}|jdt�||_dS(Ni����(tlisttrees<Any-Double-1>(R�R>topendialogsR�(R�R�R�RW((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR��scCs�ddl}|j}|j�}x�|D]}|j|�}|j|�d}t||j|�|dkruq(nyt||j|�Wq(tk
r�}|GHq(Xq(WdS(Ni����it.(	R�R^tcurselectionRctsplitR�R�R�Re(RR�RWtselR�R�R^Rf((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR��s	
N(((tTkinterRR#R/R8R?RBR]R�R�R�R�R�R�(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyt<module>s
.67m2			PKb1�Z^�����tkinter/guido/wish.pyonu�[����
��^c@sddlZddlZejejdddd�Zejd�dZx�er\dZndZyee�Z	Wne
k
r�PnXee	d	Zejejd
de��rMeje	�yejde�Z
Wnejk
r�Zd
GeGHnXe
re
GHndZqMqMWdS(i����NtDISPLAYtwishtTkitupdatets% s
tinfotcompletetevals	TclError:(t_tkintertostcreatetenvironttktcalltcmdtpromptt	raw_inputtlinetEOFErrort
getbooleantrecordtresulttTclErrortmsg(((s//usr/lib64/python2.7/Demo/tkinter/guido/wish.pyt<module>s,
	


PKb1�Z
Cx�jjtkinter/guido/paint.pynu�[���""""Paint program by Dave Michell.

Subject: tkinter "paint" example
From: Dave Mitchell <davem@magnet.com>
To: python-list@cwi.nl
Date: Fri, 23 Jan 1998 12:18:05 -0500 (EST)

  Not too long ago (last week maybe?) someone posted a request
for an example of a paint program using Tkinter. Try as I might
I can't seem to find it in the archive, so i'll just post mine
here and hope that the person who requested it sees this!

  All this does is put up a canvas and draw a smooth black line
whenever you have the mouse button down, but hopefully it will
be enough to start with.. It would be easy enough to add some
options like other shapes or colors...

                                                yours,
                                                dave mitchell
                                                davem@magnet.com
"""

from Tkinter import *

"""paint.py: not exactly a paint program.. just a smooth line drawing demo."""

b1 = "up"
xold, yold = None, None

def main():
    root = Tk()
    drawing_area = Canvas(root)
    drawing_area.pack()
    drawing_area.bind("<Motion>", motion)
    drawing_area.bind("<ButtonPress-1>", b1down)
    drawing_area.bind("<ButtonRelease-1>", b1up)
    root.mainloop()

def b1down(event):
    global b1
    b1 = "down"           # you only want to draw when the button is down
                          # because "Motion" events happen -all the time-

def b1up(event):
    global b1, xold, yold
    b1 = "up"
    xold = None           # reset the line when you let go of the button
    yold = None

def motion(event):
    if b1 == "down":
        global xold, yold
        if xold is not None and yold is not None:
            event.widget.create_line(xold,yold,event.x,event.y,smooth=TRUE)
                          # here's where you draw it. smooth. neat.
        xold = event.x
        yold = event.y

if __name__ == "__main__":
    main()
PKb1�Z�X�\tkinter/guido/ManPage.pyonu�[����
��^c@s�ddlZddlTddlmZddlmZdZdZejd�Zejd�Zejd	�Z	d
efd��YZ
de
fd
��YZeZd�Z
edkr�e
�ndS(i����N(t*(t_tkinter(tScrolledTexts*-Courier-Bold-R-Normal-*-120-*s!*-Courier-Medium-O-Normal-*-120-*s:^     Page [1-9][0-9]*[ 	]+\|^.*Last change:.*[1-9][0-9]*
s^[ 	]*
s^[ 	]*[Xv!_][Xv!_ 	]*
tEditableManPagecBsneZdd�Zd�Zd�Zd�ZeZd�Zd�Z	d�Z
d�Zd�Zd	d
�Z
RS(cKshttj||f|�|jddd�|jddt�|jddt�d|_d|_dS(NtXt	underlineit!tfontt_i(	tapplyRt__init__t
tag_configtBOLDFONTt
ITALICFONTtNonetfptlineno(tselftmastertcnf((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyR
s	cCs
|jdkS(N(RR(R((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pytbusy%scCs|j�r|j�ndS(N(Rt
_endparser(R((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pytkill)scCs-|j|�|jj|tj|j�dS(N(t_startparserttktcreatefilehandlerRtREADABLEt_filehandler(RR((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pytasyncparsefile.s
cCs4|jj�}|s#|j�dS|j|�dS(N(RtreadlineRt
_parseline(RRtmasktnextline((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyR6s

cCszddlm}|d|d�}|j|d�}|j|�x'|j�}|s[Pn|j|�qEW|j�dS(Ni����(tselectgcSs||ggg|�dS(Ni((RttoutR!((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pytavail@stheight(R!tgetintRRRR(RRR!R#R$R ((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyt
syncparsefile>s
cCs�|j�rtd�n|j�||_d|_d|_d|_d|_|d}t	|d<|j
dt�||d<dS(Nsstartparser: still busyitstates1.0(RtRuntimeErrortfilenoRRtoktemptyRtbuffertNORMALtdeletetEND(RRt	savestate((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyRLs
					

cCs�|j�std�n|jr1|jd�ny|jj|j�Wntk
r]}nX|jj�d|_|`
|`|`dS(Nsendparser: not busyt(RR(R,RRtdeletefilehandlerRtTclErrortcloseRR*R+(Rtmsg((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyR[s	
	cCs|js||_dStj|j�dkrDd|_||_dS|j}tj|�dkrt|}d|_nd}||_|js�d|_d|_dStj|�dkr�d|_d|_dS|d}t|d<t	dkr|j
dd�n|j
dt�|jrB|jd�|j
d|_
d|_n|sX|j|�n�d}d}xrttt|�t|���D]O}|||kr�||kr�|j|||!|�|}n||}q�q�W|j||�|j
d|_
||d<dS(	NiiR'g@tinsertsend-1cs
R1(R,t	emptyprogtmatchR+tulprogRR*t
footerprogR-t	TkVersiontmark_setR/t_insert_propRtrangetmintlen(RR ttextlinetproplineR0tptjti((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyRisV											

	
(	t cCs�|jt��}|jt�|�tdkrj|j|�}x'|D]}|j||t��qGWn|dkr�|j||t��ndS(Ng@RF(tindextAtInsertR6R;t	tag_namest
tag_removettag_add(Rtstrtproptherettagsttag((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyR=�s
N(t__name__t
__module__RR
RRRt	parsefileRR&RRRR=(((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyRs								<tReadonlyManPagecBseZdd�ZRS(cKs't|d<ttj||f|�dS(NR'(tDISABLEDR	RR
(RRR((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyR
�s
N(RQRRRR
(((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyRT�sc	CsNddl}ddl}d}d}d}|jdr]|jddkr]d}|jd=n|jdrz|jd}n|}|s�|dd!dkr�|d	}n|jj||�}nt�}|jdd�t|d
tdd�}|j	d
ddt
�|rt|d�}n|jd|d�}|j
|�|j�dS(Ni����s/usr/local/man/manntTcliis-fi����t.s.ntrelieftborderwidthitexpandtfilltrsnroff -man %s | ul -i(tostsystargvtpathtjointTktminsizetManPagetSUNKENtpacktBOTHtopentpopenRStmainloop(	R]R^tMANDIRtDEFAULTPAGEt	formattedtnametroottmanpageR((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyttest�s0 


	
t__main__(tretTkinterRRRR
tcompileR:R7R9RRTRdRqRQ(((s2/usr/lib64/python2.7/Demo/tkinter/guido/ManPage.pyt<module>s
	�	PKb1�Z���X�#�#tkinter/guido/tkman.pyonu�[����
Afc@s�ddlZddlZddlZddlZddlTddlmZddgZddgZdZx/eD]'Z	ej
je	�roe	Zd	ZqoqoWdZ
x/eD]'Z	ej
je	�r�e	Zd	Z
q�q�Wes�e
r\ejjd
�esdejdZejjde�ne
sLd
ejdZejjde�nejd	�n[[
d�Zddd��YZd�Ze�dS(i����N(t*(tManPages/depot/sundry/man/manns/usr/local/man/manns/depot/sundry/man/man3s/usr/local/man/man3iis
sgFailed to find mann directory.
Please add the correct entry to the MANNDIRLIST
at the top of %s script.s%s

sgFailed to find man3 directory.
Please add the correct entry to the MAN3DIRLIST
at the top of %s script.cCsktj|�}g}xE|D]=}|dd!dkr|ddkr|j|d �qqW|j�|S(Ni����i����t.tln123456789(tostlistdirtappendtsort(tmandirtfilestnamestfile((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pytlistmanpages0s
#
tSelectionBoxcBs�eZdd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
d�Zd�Zd
�ZRS(cCs�g|_t|dd�|_|jjdddt�|jj|_t|jdd�|_|jjdddt�t|jdd�|_|jjd	tdddt�t|jdd
�|_	|j	jd	t
dddt�t|�|_t
|j	dddd
dtdd�|_|jjd	t�t|jdd�|_|jjdddtd|jd|j�|jjdddtd|jd|j�|j|jd<t|j	dddtdddddd�|_|jjdddt�t|jddddd|j�|_|jjd	t�t|jdd dtdddd�|_|jjdddt�t|jdd!�|_ |j jdddt!�t|j dd"dd#d|j"�|_#|j#jd	t�t$�|_%t&|j dd$dd%d|j%dt'�|_(|j(jd	t�t|jdd&dtdddd�|_)|j)jdddt�t*|jdd'dd(�|_+|j+jd	t,�t-|jdddtddd)t!dd*d+d,�|_.|j.jdddt�|jj/d-|j�|j)j/d-|j"�|jj/d.|j0�|jj/d/|j1�|j)j/d/|j2�|j.j/d/|j3�|jj4�|jj5t�|j�dS(0Ntnametframetexpanditfilltsubframeitleftsubframetsidet
rightsubframetchapterttextt	DirectorytrelieftborderwidthitchaptermenutlabelsC functionstvaluetvariabletcommandsTcl/Tk functionstmenutlistboxtwidthitheightitl1sDisplay manual page named:tentrytl2frametl2sSearch regexp:t	casesensesCase sensitivetsearchttitles(none)twrapiHtselectbackgroundtpinks<Return>s
<Double-1>s<Tab>(6tchoicestFrameRtpacktBOTHtmasterRRtLEFTRtRIGHTt	StringVart
chaptervart
MenubuttontRAISEDRtTOPtMenuRtadd_radiobuttontMAN3DIRt
newchaptertMANNDIRtListboxtSUNKENR!tButtontentry_cbR$tEntryR%tXR&tNONEt	search_cbR't
BooleanVartcasevartCheckbuttontFLATR(R)tLabelR*tBOTTOMRRtbindt
listbox_cbt	entry_tabt
search_tabttext_tabt	focus_settset(tselfR2((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyt__init__;s�		
	
	
cCs/|jj�}g|_|jt|��dS(N(R6tgetR.taddlistR(RTR((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyR=�s	cCs=||jkr/|jj|�|jj�n|j�dS(N(R.RRtupdate(RTtchoice((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyt	addchoice�scCs1||jt|j�)|jj�|j�dS(N(R.tlenRRX(RTtlist((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyRW�s
cGs|j�dS(N(RX(RTte((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyRB�scCsQ|jj�}|rMt|�dkrM|jj|d�}|j|�ndS(Nii(R!tcurselectionR[RVt	show_page(RTR]t	selectionR((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyRN�scGs|j|jj��dS(N(t
search_stringR)RV(RTR]((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyRF�scCs|jj�dS(N(R)RR(RTR]((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyRO�scCs|jj�dS(N(R%RR(RTR]((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyRP�scCs|jj�dS(N(R%RR(RTR]((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyRQ�scCs�|jj�}t|t|�d�|j�}|sF|jj�n|jjdt	��d}x9|D]1}||kr�d}n|jj
t	�|�qiW|r�|S|jj�}|dkr�|jjd�SdS(NcSs|| |kS(N((Rtkeytn((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyt<lambda>�tii(R%RVtfilterR[R.RtbellR!tdeletetAtEndtinserttsize(RTRbtokt
exactmatchtitemRc((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyt
updatelist�s 
	cCsF|j�}|rB|j|�|jjdt��|j�ndS(Ni(RoR_R%RhRi(RTR((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyRX�s

cCs]d|jj�|f}tjd|d�}|jj�||jd<|jj|�dS(Ns%s/%s.?snroff -man %s | ul -itrR(R6RVRtpopenRtkillR*t	parsefile(RTRRtfp((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyR_�s


cCs`|s|jj�dGHdS|jj�s7tj}nd}y.|r[tj||�}ntj|�}Wn-tjk
r�}|jj�dG|GHdSX|j	j
t��}tj
|tj|d� �}|j	j
t��}tj
|tj|d� �}|}	d}
x4|d}||krM|	dkr8Pn|	}d}d}	n|j	jd|d|�}|j|�}|dkrd}
tdt|jd���}
y |j	jdt�t��Wntk
r�nX|j	jdd	||fd	|||
f�|j	jt�d	||f�|j	jt��PqqW|
s\|jj�ndS(
NsEmpty search stringsRegex error:Riis%d.0 linestarts%d.0 lineendtsels%d.%d(RRgRHRVtret
IGNORECASEtNonetcompileterrorRtindextAtInserttstringtatoitfindRiR)tmaxR[tgroupt
tag_removet
AtSelFirstt	AtSelLasttTclErrorttag_addtmark_settyview_pickplace(RTR)tmaptprogtmsgtheretlinenotendt	endlinenot
wraplinenotfoundtlinetiRc((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyRa�sd

	
	


N(t__name__t
__module__RxRUR=RZRWRBRNRFRORPRQRoRXR_Ra(((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyR
9sM												cCsWt�}t|�}tjdr9|jtjd�n|jdd�|j�dS(Ni(tTkR
tsystargvR_tminsizetmainloop(troottsb((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pytmains	
((R�RR}RvtTkinterRtMANNDIRLISTtMAN3DIRLISTtfoundmanndirtdirtpathtexistsR>tfoundman3dirR<tstderrtwriteR�R�texitRR
R�(((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyt<module>sD




		�	PKb1�Z27O�::tkinter/guido/imageview.pycnu�[����
��^c@s*ddlTddlZd�Ze�dS(i����(t*NcCsOtjd}t�}td|�}t|d|�}|j�|j�dS(Nitfiletimage(tsystargvtTkt
PhotoImagetLabeltpacktmainloop(tfilenametroottimgtlabel((s4/usr/lib64/python2.7/Demo/tkinter/guido/imageview.pytmains
	
(tTkinterRR(((s4/usr/lib64/python2.7/Demo/tkinter/guido/imageview.pyt<module>s
	PKb1�Z����YYtkinter/guido/brownian.pyonu�[����
��^c@s�ddlTddlZddlZddlZddlZdZdZdZdZdZ	dZ
dZdad	�Z
d
�Ze�dS(i����(t*Ni�i,i
itredicCs�t}tjtdt�}tjtdt�}|j||||||||dt�}xvts�tjdt	�}tjdt	�}tj
t�}y|j|||�Wnt
k
r�PnXtj|�qcWdS(Ng@tfilli(tRADIUStrandomtgausstWIDTHtSIGMAtHEIGHTtcreate_ovaltFILLtstoptBUZZtexpovariatetLAMBDAtmovetTclErrorttimetsleep(tcanvastrtxtytptdxtdytdt((s3/usr/lib64/python2.7/Demo/tkinter/guido/brownian.pytparticles.	
cCs�t�}t|dtdt�}|jdddd�d}tjdr`ttjd�}nx9t|�D]+}t	j
dtd	|f�}|j�qmWz|j
�WddaXdS(
NtwidththeightRtbothtexpandiittargettargs(tTktCanvasRRtpacktsystargvtinttranget	threadingtThreadRtstarttmainloopR(trootRtnptitt((s3/usr/lib64/python2.7/Demo/tkinter/guido/brownian.pytmain"s	
(tTkinterRR)RR%RRRRRRR
RRR1(((s3/usr/lib64/python2.7/Demo/tkinter/guido/brownian.pyt<module>s
		PKb1�ZM�dUUtkinter/guido/MimeViewer.pyonu�[����
Afc@soddlZddlTddlTddlmZdd	d��YZd�Zd�Zedkrke�ndS(
i����N(t*(tScrolledTextt
MimeViewercBsGeZd�Zd�Zd�Zd�Zd�Zd�Zd�ZRS(c	Cs�||_||_t|idd6dd6�|_idd6dd6|j_t|ji|d	6|jd
6�|_|jjidd6�|j	d
��}t
|d�}|r"t|ji|d6dd6dd6dd6dd6�|_idd6dd6|jd6|j_|jj
d|�nNt|jidd6dd6�|_idd6dd6dd6|jd6|j_|j�}t|�tkr)d|_t
|d�}|rt|ji|d6dd6dd6dd6dd6�|_idd6dd6|j_|jj
d|�n	d|_d|_n�t|jidd6dd6�|_idd6dd6dd6|jd6|j_g|_xQtt|��D]=}t|jd ||df||�}|jj|�q�Wd|_d|_dS(!NtraisedtreliefitbditexpandtbothtfillttexttcommandtwtanchorcSs|dko|d dkS(Ntreceivedisx400-((tx((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pyt<lambda>titheightiPtwidthtnonetwrapitaftertendttoptsidetipadyRi
tflattlefttipadxtys%s.%d(ttitletmsgtFrametframetpackingtCheckbuttonttoggletbuttontpackt
getheadertextt
countlinesRthtexttinserttgetbodyttypet
StringTypetNonetpadtbtexttpartstrangetlenRtappendt	collapsed(	tselftparentRRt
headertextRtbodytitp((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pyt__init__sn		 	
	
	
		

				
	cCs|jj|jj�dS(N(R!R&R"(R6((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pyR&GscCs|jj�dS(N(R!tdestroy(R6((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pyR=IscCs|jr|jj�ndS(N(R5R%tinvoke(R6((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pytshowKs	cCs$|jr|j�n
|j�dS(N(R5texplodetcollapse(R6((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pyR$Ns	
cCs�d|_x3|j|j|jfD]}|r"|j�q"q"W|jrlx!|jD]}|jj�qRWn|jjidd6�dS(NiiR(R5R)R0R/tforgetR1R!R&(R6tcomptpart((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pyRASs		cCs�d|_x9|j|j|jfD]}|r"|j|j�q"q"W|jrox|jD]}|j�qXWn|jjidd6�dS(NiiR(R5R)R0R/R&R"R1R!(R6RCRD((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pyR@\s		(	t__name__t
__module__R<R&R=R?R$RAR@(((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pyRs	;						cCs\d}d}xI||krWtj|d|�}|dkr@Pn|d}|d}qW|S(Nis
i(tstringtfind(tstrtlimitR:tn((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pyR(es
cCsBddl}ddl}ddl}|j|jdd�\}}x|D]\}}qJWd}d}x:|D]2}	|	d dkr�|	d}qmtj|	�}qmW|j�}
|
j|�}|s�|j	�}n|j
|�}t�}
|
j}t
|
d||f|�}|j�|j�|
jdd�|j�dS(Ni����iRtinboxt+s+%s/%d(tsystgetopttmhlibtargvR.RGtatoitMHt
openfoldert
getcurrenttopenmessagetTkttkRR&R?tminsizetmainloop(RNRORPtoptstargstotatmessagetfoldertargtmhtftmtrootRXR((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pytmainos0

		

t__main__((RGttypestTkinterRRR(RfRE(((s5/usr/lib64/python2.7/Demo/tkinter/guido/MimeViewer.pyt<module>s

Z	
	 PKb1�Z.��55tkinter/guido/svkill.pycnu�[����
Afc@s�ddlTedkr"ed�nddlmZddlmZddlZddlZejdZ	de
fd	��YZd
efd��YZ
edkr�e
dd
d�Zej�jd�ej�jdd�ej�ndS(i����(t*g@s/This version of svkill requires Tk 4.0 or later(tsplitfields(tsplitNtLOGNAMEt	BarButtoncBseZdd�ZRS(cKsOttj||f|�|jdt�t|dd�|_|j|d<dS(Ntsidetnametmenu(tapplyt
Menubuttont__init__tpacktLEFTtMenuR(tselftmastertcnf((s1/usr/lib64/python2.7/Demo/tkinter/guido/svkill.pyR
sN(t__name__t
__module__tNoneR
(((s1/usr/lib64/python2.7/Demo/tkinter/guido/svkill.pyRstKillcBs|eZdddd ded	efgZd!d"d#d$d%d&gZd�Zd�Zd�Zd�Zd�Z	d'd�ZRS((tDefaultts
Every (-e)s-esNon process group leaders (-d)s-dsNon leaders with tty (-a)s-asFor this user (-u %s)s-u %sis	Long (-l)s-lis	Full (-f)s-fisFull Long (-f -l)s-l -fsSession and group ID (-j)s-jsScheduler properties (-c)s-ccCsI|j|jj�d}t|�|}tjd|�|j�dS(Niskill -9 (tformat_listtformattgetRtostsystemt	do_update(Rtselectedtctpid((s1/usr/lib64/python2.7/Demo/tkinter/guido/svkill.pytkill)scCs�|j|jj�d}|j|jj�d}tjd||f�}t|d�}|jj	|dd�|d=|j
jjdt
��x$|D]}|j
jjd|�q�WdS(Nisps %s %ss
is
          (RRRt	view_listtviewtcommandst	getoutputRtheadertsettframetlisttdeletetAtEndtinsert(RRR"tsR(tline((s1/usr/lib64/python2.7/Demo/tkinter/guido/svkill.pyR.s
cCs6|jjdd�|jj|jj|j��dS(Nt0tend(twidgettselect_cleart
select_settnearestty(Rte((s1/usr/lib64/python2.7/Demo/tkinter/guido/svkill.pyt	do_motion8scCs|jjdd�dS(NR.R/(R0R1(RR5((s1/usr/lib64/python2.7/Demo/tkinter/guido/svkill.pytdo_leave;scCs,|j|jj|jj|j���dS(N(R R0RR3R4(RR5((s1/usr/lib64/python2.7/Demo/tkinter/guido/svkill.pytdo_1=scKs�ttj||f|�|jdddt�t|dddtdd�|_|jjdt�t|jd	d
�|j_	|jj	j
jddd
|j�t|jd	d�|j_
t|jd	d�|j_t|�|_
|j
jd�t|�|_|jjd�xatt|j��D]J}|j|\}}|jj
j
jd|d
|jd|j
d|�q*Wxdtt|j��D]M}|j|\}}}|jjj
jd|d
|jd|jd|�q�W|jj|jj	|jj
|jj�t|dtdd�|_|jjdddt�t|�|_t|jdtdtddddd|j�|j_|jjjdtdt �t!|jdt"�|j_#t$|jdt%ddddddddddd t&d!|jj#j�|j_'|jj'j(|jj#d
<|jj#jd"t)dt�|jj'jdddt�t*|d	d#d
|j�|_+|j+jdt�|jj'j,d$|j-�|jj'j,d%|j.�|jj'j,d&|j/�|j�dS('NtexpanditfillRtbartrelieftborderwidthittexttFiletlabeltQuittcommandtViewtFormatitvariabletvaluetanchortfonts*-Courier-Bold-R-Normal-*-120-*ttextvariabletorients!*-Courier-Medium-R-Normal-*-120-*twidthi(theighti
tselectbackgrounds#eed5b7tselectborderwidtht
selectmodetyscrollRtUpdates<Motion>s<Leave>s<1>(0RtFrameR
RtBOTHtRAISEDR;tXRtfileRtadd_commandtquitR"RtIntVarR&trangetlenR!tadd_radiobuttonRRt
tk_menuBarR't	StringVarR%tLabeltFLATtNWR@tYtWt	ScrollbartVERTICALtvscrolltListboxtSUNKENtBROWSER(tyviewtRIGHTtButtontupdatetbindR6R7R8(RRRtnumR@toptiontcol((s1/usr/lib64/python2.7/Demo/tkinter/guido/svkill.pyR
?sv					
	(RR(s
Every (-e)s-e(sNon process group leaders (-d)s-d(sNon leaders with tty (-a)s-a(RRi(s	Long (-l)s-li(s	Full (-f)s-fi(sFull Long (-f -l)s-l -fi(sSession and group ID (-j)s-ji(sScheduler properties (-c)s-ciN(RRtuserR!RR RR6R7R8RR
(((s1/usr/lib64/python2.7/Demo/tkinter/guido/svkill.pyRs"			
			t__main__R=isTkinter Process Killer (SYSV)i(tTkintert	TkVersiontImportErrortstringRRR#RtenvironRrR	RRRRRRR twinfo_toplevelttitletminsizetmainloop(((s1/usr/lib64/python2.7/Demo/tkinter/guido/svkill.pyt<module>s

dPKb1�Zv����tkinter/guido/canvasevents.pynuȯ��#! /usr/bin/python2.7

from Tkinter import *
from Canvas import Oval, Group, CanvasText


# Fix a bug in Canvas.Group as distributed in Python 1.4.  The
# distributed bind() method is broken.  This is what should be used:

class Group(Group):
    def bind(self, sequence=None, command=None):
        return self.canvas.tag_bind(self.id, sequence, command)

class Object:

    """Base class for composite graphical objects.

    Objects belong to a canvas, and can be moved around on the canvas.
    They also belong to at most one ``pile'' of objects, and can be
    transferred between piles (or removed from their pile).

    Objects have a canonical ``x, y'' position which is moved when the
    object is moved.  Where the object is relative to this position
    depends on the object; for simple objects, it may be their center.

    Objects have mouse sensitivity.  They can be clicked, dragged and
    double-clicked.  The behavior may actually be determined by the pile
    they are in.

    All instance attributes are public since the derived class may
    need them.

    """

    def __init__(self, canvas, x=0, y=0, fill='red', text='object'):
        self.canvas = canvas
        self.x = x
        self.y = y
        self.pile = None
        self.group = Group(self.canvas)
        self.createitems(fill, text)

    def __str__(self):
        return str(self.group)

    def createitems(self, fill, text):
        self.__oval = Oval(self.canvas,
                           self.x-20, self.y-10, self.x+20, self.y+10,
                           fill=fill, width=3)
        self.group.addtag_withtag(self.__oval)
        self.__text = CanvasText(self.canvas,
                           self.x, self.y, text=text)
        self.group.addtag_withtag(self.__text)

    def moveby(self, dx, dy):
        if dx == dy == 0:
            return
        self.group.move(dx, dy)
        self.x = self.x + dx
        self.y = self.y + dy

    def moveto(self, x, y):
        self.moveby(x - self.x, y - self.y)

    def transfer(self, pile):
        if self.pile:
            self.pile.delete(self)
            self.pile = None
        self.pile = pile
        if self.pile:
            self.pile.add(self)

    def tkraise(self):
        self.group.tkraise()


class Bottom(Object):

    """An object to serve as the bottom of a pile."""

    def createitems(self, *args):
        self.__oval = Oval(self.canvas,
                           self.x-20, self.y-10, self.x+20, self.y+10,
                           fill='gray', outline='')
        self.group.addtag_withtag(self.__oval)


class Pile:

    """A group of graphical objects."""

    def __init__(self, canvas, x, y, tag=None):
        self.canvas = canvas
        self.x = x
        self.y = y
        self.objects = []
        self.bottom = Bottom(self.canvas, self.x, self.y)
        self.group = Group(self.canvas, tag=tag)
        self.group.addtag_withtag(self.bottom.group)
        self.bindhandlers()

    def bindhandlers(self):
        self.group.bind('<1>', self.clickhandler)
        self.group.bind('<Double-1>', self.doubleclickhandler)

    def add(self, object):
        self.objects.append(object)
        self.group.addtag_withtag(object.group)
        self.position(object)

    def delete(self, object):
        object.group.dtag(self.group)
        self.objects.remove(object)

    def position(self, object):
        object.tkraise()
        i = self.objects.index(object)
        object.moveto(self.x + i*4, self.y + i*8)

    def clickhandler(self, event):
        pass

    def doubleclickhandler(self, event):
        pass


class MovingPile(Pile):

    def bindhandlers(self):
        Pile.bindhandlers(self)
        self.group.bind('<B1-Motion>', self.motionhandler)
        self.group.bind('<ButtonRelease-1>', self.releasehandler)

    movethis = None

    def clickhandler(self, event):
        tags = self.canvas.gettags('current')
        for i in range(len(self.objects)):
            o = self.objects[i]
            if o.group.tag in tags:
                break
        else:
            self.movethis = None
            return
        self.movethis = self.objects[i:]
        for o in self.movethis:
            o.tkraise()
        self.lastx = event.x
        self.lasty = event.y

    doubleclickhandler = clickhandler

    def motionhandler(self, event):
        if not self.movethis:
            return
        dx = event.x - self.lastx
        dy = event.y - self.lasty
        self.lastx = event.x
        self.lasty = event.y
        for o in self.movethis:
            o.moveby(dx, dy)

    def releasehandler(self, event):
        objects = self.movethis
        if not objects:
            return
        self.movethis = None
        self.finishmove(objects)

    def finishmove(self, objects):
        for o in objects:
            self.position(o)


class Pile1(MovingPile):

    x = 50
    y = 50
    tag = 'p1'

    def __init__(self, demo):
        self.demo = demo
        MovingPile.__init__(self, self.demo.canvas, self.x, self.y, self.tag)

    def doubleclickhandler(self, event):
        try:
            o = self.objects[-1]
        except IndexError:
            return
        o.transfer(self.other())
        MovingPile.doubleclickhandler(self, event)

    def other(self):
        return self.demo.p2

    def finishmove(self, objects):
        o = objects[0]
        p = self.other()
        x, y = o.x, o.y
        if (x-p.x)**2 + (y-p.y)**2 < (x-self.x)**2 + (y-self.y)**2:
            for o in objects:
                o.transfer(p)
        else:
            MovingPile.finishmove(self, objects)

class Pile2(Pile1):

    x = 150
    y = 50
    tag = 'p2'

    def other(self):
        return self.demo.p1


class Demo:

    def __init__(self, master):
        self.master = master
        self.canvas = Canvas(master,
                             width=200, height=200,
                             background='yellow',
                             relief=SUNKEN, borderwidth=2)
        self.canvas.pack(expand=1, fill=BOTH)
        self.p1 = Pile1(self)
        self.p2 = Pile2(self)
        o1 = Object(self.canvas, fill='red', text='o1')
        o2 = Object(self.canvas, fill='green', text='o2')
        o3 = Object(self.canvas, fill='light blue', text='o3')
        o1.transfer(self.p1)
        o2.transfer(self.p1)
        o3.transfer(self.p2)


# Main function, run when invoked as a stand-alone Python program.

def main():
    root = Tk()
    demo = Demo(root)
    root.protocol('WM_DELETE_WINDOW', root.quit)
    root.mainloop()

if __name__ == '__main__':
    main()
PKb1�Z`�xIItkinter/guido/hanoi.pyonu�[����
��^c@sIddlTd�Zddd��YZd�ZedkrEe�ndS(	i����(t*cCsX|dkrdSt|d||||�||||�t|d||||�dS(Nii(thanoi(tntatbtctreport((s0/usr/lib64/python2.7/Demo/tkinter/guido/hanoi.pyRs
tTkhanoicBs&eZdd�Zd�Zd�ZRS(cCs�||_t�|_}t|�|_}|j�|j|d�|j|d�}}|r�|j|d|dd|dd�|_nd}|d}|d}	|	|d|d	d}
}|
|||}}
g|_	|j
|
|||
d
d�}|j	j|�|
|	||	}
}|j
|
|||
d
d�}|j	j|�|
|	||	}
}|j
|
|||
d
d�}|j	j|�|jj�|d}|	dd}d|}gggg|_
i|_|	|d|
|d}
}|
|||}}
||dtd	|d	�}x�t|d
d�D]�}|j
|
|||
d
d�}||j|<|j
d
j|�|
|||}
}||d|
|d}}
|jj�|jjd�qFWdS(Ntwidththeightitbitmapt
foregroundtbluei
iitfilltblackiii����tredi(RtTkttktCanvastcanvastpacktgetintt
create_bitmapR
tpegstcreate_rectangletappendtupdatetpegstatetpiecestmaxtrangetafter(tselfRR
RRRR	tpegwidtht	pegheighttpegdisttx1ty1tx2ty2tptpieceheightt
maxpiecewidtht
minpiecewidthtdxti((s0/usr/lib64/python2.7/Demo/tkinter/guido/hanoi.pyt__init__sP	
'

	


	

cCs�x�t|jddd|j�t|jddd|j�t|jddd|j�t|jddd|j�t|jddd|j�t|jddd|j�qWdS(Niii(RRR(R ((s0/usr/lib64/python2.7/Demo/tkinter/guido/hanoi.pytrunNscCs�|j|d|kr t�n|j|d=|j|}|j}|j|j|�\}}}}	xO|j|�\}
}}}
|
|kr�Pn|j|dd�|jj�qiW|j|j|�\}}}}||d}x|j|�\}
}}}
|
|d}||kr$Pn||krF|j|dd�n|j|dd�|jj�q�W|
|}||t	|j|�d}xO|j|�\}
}}}
|
|kr�Pn|j|dd�|jj�q�W|j|j
|�dS(Ni����iii(RtRuntimeErrorRRtbboxRtmoveRRtlenR(R R-RRR(Rtax1tay1tax2tay2R$R%R&R'tbx1tby1tbx2tby2t	newcentertcenterR)t	newbottom((s0/usr/lib64/python2.7/Demo/tkinter/guido/hanoi.pyRXs@	
	""
N(t__name__t
__module__tNoneR.R/R(((s0/usr/lib64/python2.7/Demo/tkinter/guido/hanoi.pyRs1	
cCs�ddl}ddl}|jdr>|j|jd�}nd}|jdr�|jd}|ddkr{|d}q�d|}nd}t||�}|j�dS(Ni����iiiit@(tsyststringtargvtatoiRARR/(RCRDRR
th((s0/usr/lib64/python2.7/Demo/tkinter/guido/hanoi.pytmains




t__main__N((tTkinterRRRHR?(((s0/usr/lib64/python2.7/Demo/tkinter/guido/hanoi.pyt<module>
s

	e	PKb1�Zn�`�		tkinter/guido/electrons.pynuȯ��#! /usr/bin/python2.7

# Simulate "electrons" migrating across the screen.
# An optional bitmap file in can be in the background.
#
# Usage: electrons [n [bitmapfile]]
#
# n is the number of electrons to animate; default is 30.
#
# The bitmap file can be any X11 bitmap file (look in
# /usr/include/X11/bitmaps for samples); it is displayed as the
# background of the animation.  Default is no bitmap.

from Tkinter import *
import random


# The graphical interface
class Electrons:

    # Create our objects
    def __init__(self, n, bitmap = None):
        self.n = n
        self.tk = tk = Tk()
        self.canvas = c = Canvas(tk)
        c.pack()
        width, height = tk.getint(c['width']), tk.getint(c['height'])

        # Add background bitmap
        if bitmap:
            self.bitmap = c.create_bitmap(width/2, height/2,
                                          bitmap=bitmap,
                                          foreground='blue')

        self.pieces = []
        x1, y1, x2, y2 = 10,70,14,74
        for i in range(n):
            p = c.create_oval(x1, y1, x2, y2, fill='red')
            self.pieces.append(p)
            y1, y2 = y1 +2, y2 + 2
        self.tk.update()

    def random_move(self, n):
        c = self.canvas
        for p in self.pieces:
            x = random.choice(range(-2,4))
            y = random.choice(range(-3,4))
            c.move(p, x, y)
        self.tk.update()

    # Run -- allow 500 movemens
    def run(self):
        try:
            for i in range(500):
                self.random_move(self.n)
        except TclError:
            try:
                self.tk.destroy()
            except TclError:
                pass


# Main program
def main():
    import sys, string

    # First argument is number of electrons, default 30
    if sys.argv[1:]:
        n = string.atoi(sys.argv[1])
    else:
        n = 30

    # Second argument is bitmap file, default none
    if sys.argv[2:]:
        bitmap = sys.argv[2]
        # Reverse meaning of leading '@' compared to Tk
        if bitmap[0] == '@': bitmap = bitmap[1:]
        else: bitmap = '@' + bitmap
    else:
        bitmap = None

    # Create the graphical objects...
    h = Electrons(n, bitmap)

    # ...and run!
    h.run()


# Call main when run as script
if __name__ == '__main__':
    main()
PKb1�Z-�ɖ55tkinter/guido/mbox.pynuȯ��#! /usr/bin/python2.7

# Scan MH folder, display results in window

import os
import sys
import re
import getopt
import string
import mhlib

from Tkinter import *

from dialog import dialog

mailbox = os.environ['HOME'] + '/Mail'

def main():
    global root, tk, top, mid, bot
    global folderbox, foldermenu, scanbox, scanmenu, viewer
    global folder, seq
    global mh, mhf

    # Parse command line options

    folder = 'inbox'
    seq = 'all'
    try:
        opts, args = getopt.getopt(sys.argv[1:], '')
    except getopt.error, msg:
        print msg
        sys.exit(2)
    for arg in args:
        if arg[:1] == '+':
            folder = arg[1:]
        else:
            seq = arg

    # Initialize MH

    mh = mhlib.MH()
    mhf = mh.openfolder(folder)

    # Build widget hierarchy

    root = Tk()
    tk = root.tk

    top = Frame(root)
    top.pack({'expand': 1, 'fill': 'both'})

    # Build right part: folder list

    right = Frame(top)
    right.pack({'fill': 'y', 'side': 'right'})

    folderbar = Scrollbar(right, {'relief': 'sunken', 'bd': 2})
    folderbar.pack({'fill': 'y', 'side': 'right'})

    folderbox = Listbox(right, {'exportselection': 0})
    folderbox.pack({'expand': 1, 'fill': 'both', 'side': 'left'})

    foldermenu = Menu(root)
    foldermenu.add('command',
                   {'label': 'Open Folder',
                    'command': open_folder})
    foldermenu.add('separator')
    foldermenu.add('command',
                   {'label': 'Quit',
                    'command': 'exit'})
    foldermenu.bind('<ButtonRelease-3>', folder_unpost)

    folderbox['yscrollcommand'] = (folderbar, 'set')
    folderbar['command'] = (folderbox, 'yview')
    folderbox.bind('<Double-1>', open_folder, 1)
    folderbox.bind('<3>', folder_post)

    # Build left part: scan list

    left = Frame(top)
    left.pack({'expand': 1, 'fill': 'both', 'side': 'left'})

    scanbar = Scrollbar(left, {'relief': 'sunken', 'bd': 2})
    scanbar.pack({'fill': 'y', 'side': 'right'})

    scanbox = Listbox(left, {'font': 'fixed'})
    scanbox.pack({'expand': 1, 'fill': 'both', 'side': 'left'})

    scanmenu = Menu(root)
    scanmenu.add('command',
                 {'label': 'Open Message',
                  'command': open_message})
    scanmenu.add('command',
                 {'label': 'Remove Message',
                  'command': remove_message})
    scanmenu.add('command',
                 {'label': 'Refile Message',
                  'command': refile_message})
    scanmenu.add('separator')
    scanmenu.add('command',
                 {'label': 'Quit',
                  'command': 'exit'})
    scanmenu.bind('<ButtonRelease-3>', scan_unpost)

    scanbox['yscrollcommand'] = (scanbar, 'set')
    scanbar['command'] = (scanbox, 'yview')
    scanbox.bind('<Double-1>', open_message)
    scanbox.bind('<3>', scan_post)

    # Separator between middle and bottom part

    rule2 = Frame(root, {'bg': 'black'})
    rule2.pack({'fill': 'x'})

    # Build bottom part: current message

    bot = Frame(root)
    bot.pack({'expand': 1, 'fill': 'both'})
    #
    viewer = None

    # Window manager commands

    root.minsize(800, 1) # Make window resizable

    # Fill folderbox with text

    setfolders()

    # Fill scanbox with text

    rescan()

    # Enter mainloop

    root.mainloop()

def folder_post(e):
    x, y = e.x_root, e.y_root
    foldermenu.post(x - 10, y - 10)
    foldermenu.grab_set()

def folder_unpost(e):
    tk.call('update', 'idletasks')
    foldermenu.grab_release()
    foldermenu.unpost()
    foldermenu.invoke('active')

def scan_post(e):
    x, y = e.x_root, e.y_root
    scanmenu.post(x - 10, y - 10)
    scanmenu.grab_set()

def scan_unpost(e):
    tk.call('update', 'idletasks')
    scanmenu.grab_release()
    scanmenu.unpost()
    scanmenu.invoke('active')

scanparser = re.compile('^ *([0-9]+)')

def open_folder(e=None):
    global folder, mhf
    sel = folderbox.curselection()
    if len(sel) != 1:
        if len(sel) > 1:
            msg = "Please open one folder at a time"
        else:
            msg = "Please select a folder to open"
        dialog(root, "Can't Open Folder", msg, "", 0, "OK")
        return
    i = sel[0]
    folder = folderbox.get(i)
    mhf = mh.openfolder(folder)
    rescan()

def open_message(e=None):
    global viewer
    sel = scanbox.curselection()
    if len(sel) != 1:
        if len(sel) > 1:
            msg = "Please open one message at a time"
        else:
            msg = "Please select a message to open"
        dialog(root, "Can't Open Message", msg, "", 0, "OK")
        return
    cursor = scanbox['cursor']
    scanbox['cursor'] = 'watch'
    tk.call('update', 'idletasks')
    i = sel[0]
    line = scanbox.get(i)
    if scanparser.match(line) >= 0:
        num = string.atoi(scanparser.group(1))
        m = mhf.openmessage(num)
        if viewer: viewer.destroy()
        from MimeViewer import MimeViewer
        viewer = MimeViewer(bot, '+%s/%d' % (folder, num), m)
        viewer.pack()
        viewer.show()
    scanbox['cursor'] = cursor

def interestingheader(header):
    return header != 'received'

def remove_message(e=None):
    itop = scanbox.nearest(0)
    sel = scanbox.curselection()
    if not sel:
        dialog(root, "No Message To Remove",
               "Please select a message to remove", "", 0, "OK")
        return
    todo = []
    for i in sel:
        line = scanbox.get(i)
        if scanparser.match(line) >= 0:
            todo.append(string.atoi(scanparser.group(1)))
    mhf.removemessages(todo)
    rescan()
    fixfocus(min(todo), itop)

lastrefile = ''
tofolder = None
def refile_message(e=None):
    global lastrefile, tofolder
    itop = scanbox.nearest(0)
    sel = scanbox.curselection()
    if not sel:
        dialog(root, "No Message To Refile",
               "Please select a message to refile", "", 0, "OK")
        return
    foldersel = folderbox.curselection()
    if len(foldersel) != 1:
        if not foldersel:
            msg = "Please select a folder to refile to"
        else:
            msg = "Please select exactly one folder to refile to"
        dialog(root, "No Folder To Refile", msg, "", 0, "OK")
        return
    refileto = folderbox.get(foldersel[0])
    todo = []
    for i in sel:
        line = scanbox.get(i)
        if scanparser.match(line) >= 0:
            todo.append(string.atoi(scanparser.group(1)))
    if lastrefile != refileto or not tofolder:
        lastrefile = refileto
        tofolder = None
        tofolder = mh.openfolder(lastrefile)
    mhf.refilemessages(todo, tofolder)
    rescan()
    fixfocus(min(todo), itop)

def fixfocus(near, itop):
    n = scanbox.size()
    for i in range(n):
        line = scanbox.get(repr(i))
        if scanparser.match(line) >= 0:
            num = string.atoi(scanparser.group(1))
            if num >= near:
                break
    else:
        i = 'end'
    scanbox.select_from(i)
    scanbox.yview(itop)

def setfolders():
    folderbox.delete(0, 'end')
    for fn in mh.listallfolders():
        folderbox.insert('end', fn)

def rescan():
    global viewer
    if viewer:
        viewer.destroy()
        viewer = None
    scanbox.delete(0, 'end')
    for line in scanfolder(folder, seq):
        scanbox.insert('end', line)

def scanfolder(folder = 'inbox', sequence = 'all'):
    return map(
            lambda line: line[:-1],
            os.popen('scan +%s %s' % (folder, sequence), 'r').readlines())

main()
PKb1�Z��LLtkinter/guido/ShellWindow.pynu�[���import os
import sys
import string
from Tkinter import *
from ScrolledText import ScrolledText
from Dialog import Dialog
import signal

BUFSIZE = 512

class ShellWindow(ScrolledText):

    def __init__(self, master=None, shell=None, **cnf):
        if not shell:
            try:
                shell = os.environ['SHELL']
            except KeyError:
                shell = '/bin/sh'
            shell = shell + ' -i'
        args = string.split(shell)
        shell = args[0]

        apply(ScrolledText.__init__, (self, master), cnf)
        self.pos = '1.0'
        self.bind('<Return>', self.inputhandler)
        self.bind('<Control-c>', self.sigint)
        self.bind('<Control-t>', self.sigterm)
        self.bind('<Control-k>', self.sigkill)
        self.bind('<Control-d>', self.sendeof)

        self.pid, self.fromchild, self.tochild = spawn(shell, args)
        self.tk.createfilehandler(self.fromchild, READABLE,
                                  self.outputhandler)

    def outputhandler(self, file, mask):
        data = os.read(file, BUFSIZE)
        if not data:
            self.tk.deletefilehandler(file)
            pid, sts = os.waitpid(self.pid, 0)
            print 'pid', pid, 'status', sts
            self.pid = None
            detail = sts>>8
            cause = sts & 0xff
            if cause == 0:
                msg = "exit status %d" % detail
            else:
                msg = "killed by signal %d" % (cause & 0x7f)
                if cause & 0x80:
                    msg = msg + " -- core dumped"
            Dialog(self.master,
                   text=msg,
                   title="Exit status",
                   bitmap='warning',
                   default=0,
                   strings=('OK',))
            return
        self.insert(END, data)
        self.pos = self.index("end - 1 char")
        self.yview_pickplace(END)

    def inputhandler(self, *args):
        if not self.pid:
            self.no_process()
            return "break"
        self.insert(END, "\n")
        line = self.get(self.pos, "end - 1 char")
        self.pos = self.index(END)
        os.write(self.tochild, line)
        return "break"

    def sendeof(self, *args):
        if not self.pid:
            self.no_process()
            return "break"
        os.close(self.tochild)
        return "break"

    def sendsig(self, sig):
        if not self.pid:
            self.no_process()
            return "break"
        os.kill(self.pid, sig)
        return "break"

    def sigint(self, *args):
        return self.sendsig(signal.SIGINT)

    def sigquit(self, *args):
        return self.sendsig(signal.SIGQUIT)

    def sigterm(self, *args):
        return self.sendsig(signal.SIGTERM)

    def sigkill(self, *args):
        return self.sendsig(signal.SIGKILL)

    def no_process(self):
        Dialog(self.master,
               text="No active process",
               title="No process",
               bitmap='error',
               default=0,
               strings=('OK',))

MAXFD = 100     # Max number of file descriptors (os.getdtablesize()???)

def spawn(prog, args):
    p2cread, p2cwrite = os.pipe()
    c2pread, c2pwrite = os.pipe()
    pid = os.fork()
    if pid == 0:
        # Child
        for i in 0, 1, 2:
            try:
                os.close(i)
            except os.error:
                pass
        if os.dup(p2cread) <> 0:
            sys.stderr.write('popen2: bad read dup\n')
        if os.dup(c2pwrite) <> 1:
            sys.stderr.write('popen2: bad write dup\n')
        if os.dup(c2pwrite) <> 2:
            sys.stderr.write('popen2: bad write dup\n')
        os.closerange(3, MAXFD)
        try:
            os.execvp(prog, args)
        finally:
            sys.stderr.write('execvp failed\n')
            os._exit(1)
    os.close(p2cread)
    os.close(c2pwrite)
    return pid, c2pread, p2cwrite

def test():
    shell = string.join(sys.argv[1:])
    root = Tk()
    root.minsize(1, 1)
    if shell:
        w = ShellWindow(root, shell=shell)
    else:
        w = ShellWindow(root)
    w.pack(expand=1, fill=BOTH)
    w.focus_set()
    w.tk.mainloop()

if __name__ == '__main__':
    test()
PKb1�Zj'��tkinter/guido/imagedraw.pynu�[���"""Draw on top of an image"""

from Tkinter import *
import sys

def main():
    filename = sys.argv[1]
    root = Tk()
    img = PhotoImage(file=filename)
    w, h = img.width(), img.height()
    canv = Canvas(root, width=w, height=h)
    canv.create_image(0, 0, anchor=NW, image=img)
    canv.pack()
    canv.bind('<Button-1>', blob)
    root.mainloop()

def blob(event):
    x, y = event.x, event.y
    canv = event.widget
    r = 5
    canv.create_oval(x-r, y-r, x+r, y+r, fill='red', outline="")

main()
PKb1�Z&�S�}E}Etkinter/guido/solitaire.pynuȯ��#! /usr/bin/python2.7

"""Solitaire game, much like the one that comes with MS Windows.

Limitations:

- No cute graphical images for the playing cards faces or backs.
- No scoring or timer.
- No undo.
- No option to turn 3 cards at a time.
- No keyboard shortcuts.
- Less fancy animation when you win.
- The determination of which stack you drag to is more relaxed.

Apology:

I'm not much of a card player, so my terminology in these comments may
at times be a little unusual.  If you have suggestions, please let me
know!

"""

# Imports

import math
import random

from Tkinter import *
from Canvas import Rectangle, CanvasText, Group, Window


# Fix a bug in Canvas.Group as distributed in Python 1.4.  The
# distributed bind() method is broken.  Rather than asking you to fix
# the source, we fix it here by deriving a subclass:

class Group(Group):
    def bind(self, sequence=None, command=None):
        return self.canvas.tag_bind(self.id, sequence, command)


# Constants determining the size and lay-out of cards and stacks.  We
# work in a "grid" where each card/stack is surrounded by MARGIN
# pixels of space on each side, so adjacent stacks are separated by
# 2*MARGIN pixels.  OFFSET is the offset used for displaying the
# face down cards in the row stacks.

CARDWIDTH = 100
CARDHEIGHT = 150
MARGIN = 10
XSPACING = CARDWIDTH + 2*MARGIN
YSPACING = CARDHEIGHT + 4*MARGIN
OFFSET = 5

# The background color, green to look like a playing table.  The
# standard green is way too bright, and dark green is way to dark, so
# we use something in between.  (There are a few more colors that
# could be customized, but they are less controversial.)

BACKGROUND = '#070'


# Suits and colors.  The values of the symbolic suit names are the
# strings used to display them (you change these and VALNAMES to
# internationalize the game).  The COLOR dictionary maps suit names to
# colors (red and black) which must be Tk color names.  The keys() of
# the COLOR dictionary conveniently provides us with a list of all
# suits (in arbitrary order).

HEARTS = 'Heart'
DIAMONDS = 'Diamond'
CLUBS = 'Club'
SPADES = 'Spade'

RED = 'red'
BLACK = 'black'

COLOR = {}
for s in (HEARTS, DIAMONDS):
    COLOR[s] = RED
for s in (CLUBS, SPADES):
    COLOR[s] = BLACK

ALLSUITS = COLOR.keys()
NSUITS = len(ALLSUITS)


# Card values are 1-13.  We also define symbolic names for the picture
# cards.  ALLVALUES is a list of all card values.

ACE = 1
JACK = 11
QUEEN = 12
KING = 13
ALLVALUES = range(1, 14) # (one more than the highest value)
NVALUES = len(ALLVALUES)


# VALNAMES is a list that maps a card value to string.  It contains a
# dummy element at index 0 so it can be indexed directly with the card
# value.

VALNAMES = ["", "A"] + map(str, range(2, 11)) + ["J", "Q", "K"]


# Solitaire constants.  The only one I can think of is the number of
# row stacks.

NROWS = 7


# The rest of the program consists of class definitions.  These are
# further described in their documentation strings.


class Card:

    """A playing card.

    A card doesn't record to which stack it belongs; only the stack
    records this (it turns out that we always know this from the
    context, and this saves a ``double update'' with potential for
    inconsistencies).

    Public methods:

    moveto(x, y) -- move the card to an absolute position
    moveby(dx, dy) -- move the card by a relative offset
    tkraise() -- raise the card to the top of its stack
    showface(), showback() -- turn the card face up or down & raise it

    Public read-only instance variables:

    suit, value, color -- the card's suit, value and color
    face_shown -- true when the card is shown face up, else false

    Semi-public read-only instance variables (XXX should be made
    private):

    group -- the Canvas.Group representing the card
    x, y -- the position of the card's top left corner

    Private instance variables:

    __back, __rect, __text -- the canvas items making up the card

    (To show the card face up, the text item is placed in front of
    rect and the back is placed behind it.  To show it face down, this
    is reversed.  The card is created face down.)

    """

    def __init__(self, suit, value, canvas):
        """Card constructor.

        Arguments are the card's suit and value, and the canvas widget.

        The card is created at position (0, 0), with its face down
        (adding it to a stack will position it according to that
        stack's rules).

        """
        self.suit = suit
        self.value = value
        self.color = COLOR[suit]
        self.face_shown = 0

        self.x = self.y = 0
        self.group = Group(canvas)

        text = "%s  %s" % (VALNAMES[value], suit)
        self.__text = CanvasText(canvas, CARDWIDTH//2, 0,
                               anchor=N, fill=self.color, text=text)
        self.group.addtag_withtag(self.__text)

        self.__rect = Rectangle(canvas, 0, 0, CARDWIDTH, CARDHEIGHT,
                              outline='black', fill='white')
        self.group.addtag_withtag(self.__rect)

        self.__back = Rectangle(canvas, MARGIN, MARGIN,
                              CARDWIDTH-MARGIN, CARDHEIGHT-MARGIN,
                              outline='black', fill='blue')
        self.group.addtag_withtag(self.__back)

    def __repr__(self):
        """Return a string for debug print statements."""
        return "Card(%r, %r)" % (self.suit, self.value)

    def moveto(self, x, y):
        """Move the card to absolute position (x, y)."""
        self.moveby(x - self.x, y - self.y)

    def moveby(self, dx, dy):
        """Move the card by (dx, dy)."""
        self.x = self.x + dx
        self.y = self.y + dy
        self.group.move(dx, dy)

    def tkraise(self):
        """Raise the card above all other objects in its canvas."""
        self.group.tkraise()

    def showface(self):
        """Turn the card's face up."""
        self.tkraise()
        self.__rect.tkraise()
        self.__text.tkraise()
        self.face_shown = 1

    def showback(self):
        """Turn the card's face down."""
        self.tkraise()
        self.__rect.tkraise()
        self.__back.tkraise()
        self.face_shown = 0


class Stack:

    """A generic stack of cards.

    This is used as a base class for all other stacks (e.g. the deck,
    the suit stacks, and the row stacks).

    Public methods:

    add(card) -- add a card to the stack
    delete(card) -- delete a card from the stack
    showtop() -- show the top card (if any) face up
    deal() -- delete and return the top card, or None if empty

    Method that subclasses may override:

    position(card) -- move the card to its proper (x, y) position

        The default position() method places all cards at the stack's
        own (x, y) position.

    userclickhandler(), userdoubleclickhandler() -- called to do
    subclass specific things on single and double clicks

        The default user (single) click handler shows the top card
        face up.  The default user double click handler calls the user
        single click handler.

    usermovehandler(cards) -- called to complete a subpile move

        The default user move handler moves all moved cards back to
        their original position (by calling the position() method).

    Private methods:

    clickhandler(event), doubleclickhandler(event),
    motionhandler(event), releasehandler(event) -- event handlers

        The default event handlers turn the top card of the stack with
        its face up on a (single or double) click, and also support
        moving a subpile around.

    startmoving(event) -- begin a move operation
    finishmoving() -- finish a move operation

    """

    def __init__(self, x, y, game=None):
        """Stack constructor.

        Arguments are the stack's nominal x and y position (the top
        left corner of the first card placed in the stack), and the
        game object (which is used to get the canvas; subclasses use
        the game object to find other stacks).

        """
        self.x = x
        self.y = y
        self.game = game
        self.cards = []
        self.group = Group(self.game.canvas)
        self.group.bind('<1>', self.clickhandler)
        self.group.bind('<Double-1>', self.doubleclickhandler)
        self.group.bind('<B1-Motion>', self.motionhandler)
        self.group.bind('<ButtonRelease-1>', self.releasehandler)
        self.makebottom()

    def makebottom(self):
        pass

    def __repr__(self):
        """Return a string for debug print statements."""
        return "%s(%d, %d)" % (self.__class__.__name__, self.x, self.y)

    # Public methods

    def add(self, card):
        self.cards.append(card)
        card.tkraise()
        self.position(card)
        self.group.addtag_withtag(card.group)

    def delete(self, card):
        self.cards.remove(card)
        card.group.dtag(self.group)

    def showtop(self):
        if self.cards:
            self.cards[-1].showface()

    def deal(self):
        if not self.cards:
            return None
        card = self.cards[-1]
        self.delete(card)
        return card

    # Subclass overridable methods

    def position(self, card):
        card.moveto(self.x, self.y)

    def userclickhandler(self):
        self.showtop()

    def userdoubleclickhandler(self):
        self.userclickhandler()

    def usermovehandler(self, cards):
        for card in cards:
            self.position(card)

    # Event handlers

    def clickhandler(self, event):
        self.finishmoving()             # In case we lost an event
        self.userclickhandler()
        self.startmoving(event)

    def motionhandler(self, event):
        self.keepmoving(event)

    def releasehandler(self, event):
        self.keepmoving(event)
        self.finishmoving()

    def doubleclickhandler(self, event):
        self.finishmoving()             # In case we lost an event
        self.userdoubleclickhandler()
        self.startmoving(event)

    # Move internals

    moving = None

    def startmoving(self, event):
        self.moving = None
        tags = self.game.canvas.gettags('current')
        for i in range(len(self.cards)):
            card = self.cards[i]
            if card.group.tag in tags:
                break
        else:
            return
        if not card.face_shown:
            return
        self.moving = self.cards[i:]
        self.lastx = event.x
        self.lasty = event.y
        for card in self.moving:
            card.tkraise()

    def keepmoving(self, event):
        if not self.moving:
            return
        dx = event.x - self.lastx
        dy = event.y - self.lasty
        self.lastx = event.x
        self.lasty = event.y
        if dx or dy:
            for card in self.moving:
                card.moveby(dx, dy)

    def finishmoving(self):
        cards = self.moving
        self.moving = None
        if cards:
            self.usermovehandler(cards)


class Deck(Stack):

    """The deck is a stack with support for shuffling.

    New methods:

    fill() -- create the playing cards
    shuffle() -- shuffle the playing cards

    A single click moves the top card to the game's open deck and
    moves it face up; if we're out of cards, it moves the open deck
    back to the deck.

    """

    def makebottom(self):
        bottom = Rectangle(self.game.canvas,
                           self.x, self.y,
                           self.x+CARDWIDTH, self.y+CARDHEIGHT,
                           outline='black', fill=BACKGROUND)
        self.group.addtag_withtag(bottom)

    def fill(self):
        for suit in ALLSUITS:
            for value in ALLVALUES:
                self.add(Card(suit, value, self.game.canvas))

    def shuffle(self):
        n = len(self.cards)
        newcards = []
        for i in randperm(n):
            newcards.append(self.cards[i])
        self.cards = newcards

    def userclickhandler(self):
        opendeck = self.game.opendeck
        card = self.deal()
        if not card:
            while 1:
                card = opendeck.deal()
                if not card:
                    break
                self.add(card)
                card.showback()
        else:
            self.game.opendeck.add(card)
            card.showface()


def randperm(n):
    """Function returning a random permutation of range(n)."""
    r = range(n)
    x = []
    while r:
        i = random.choice(r)
        x.append(i)
        r.remove(i)
    return x


class OpenStack(Stack):

    def acceptable(self, cards):
        return 0

    def usermovehandler(self, cards):
        card = cards[0]
        stack = self.game.closeststack(card)
        if not stack or stack is self or not stack.acceptable(cards):
            Stack.usermovehandler(self, cards)
        else:
            for card in cards:
                self.delete(card)
                stack.add(card)
            self.game.wincheck()

    def userdoubleclickhandler(self):
        if not self.cards:
            return
        card = self.cards[-1]
        if not card.face_shown:
            self.userclickhandler()
            return
        for s in self.game.suits:
            if s.acceptable([card]):
                self.delete(card)
                s.add(card)
                self.game.wincheck()
                break


class SuitStack(OpenStack):

    def makebottom(self):
        bottom = Rectangle(self.game.canvas,
                           self.x, self.y,
                           self.x+CARDWIDTH, self.y+CARDHEIGHT,
                           outline='black', fill='')

    def userclickhandler(self):
        pass

    def userdoubleclickhandler(self):
        pass

    def acceptable(self, cards):
        if len(cards) != 1:
            return 0
        card = cards[0]
        if not self.cards:
            return card.value == ACE
        topcard = self.cards[-1]
        return card.suit == topcard.suit and card.value == topcard.value + 1


class RowStack(OpenStack):

    def acceptable(self, cards):
        card = cards[0]
        if not self.cards:
            return card.value == KING
        topcard = self.cards[-1]
        if not topcard.face_shown:
            return 0
        return card.color != topcard.color and card.value == topcard.value - 1

    def position(self, card):
        y = self.y
        for c in self.cards:
            if c == card:
                break
            if c.face_shown:
                y = y + 2*MARGIN
            else:
                y = y + OFFSET
        card.moveto(self.x, y)


class Solitaire:

    def __init__(self, master):
        self.master = master

        self.canvas = Canvas(self.master,
                             background=BACKGROUND,
                             highlightthickness=0,
                             width=NROWS*XSPACING,
                             height=3*YSPACING + 20 + MARGIN)
        self.canvas.pack(fill=BOTH, expand=TRUE)

        self.dealbutton = Button(self.canvas,
                                 text="Deal",
                                 highlightthickness=0,
                                 background=BACKGROUND,
                                 activebackground="green",
                                 command=self.deal)
        Window(self.canvas, MARGIN, 3*YSPACING + 20,
               window=self.dealbutton, anchor=SW)

        x = MARGIN
        y = MARGIN

        self.deck = Deck(x, y, self)

        x = x + XSPACING
        self.opendeck = OpenStack(x, y, self)

        x = x + XSPACING
        self.suits = []
        for i in range(NSUITS):
            x = x + XSPACING
            self.suits.append(SuitStack(x, y, self))

        x = MARGIN
        y = y + YSPACING

        self.rows = []
        for i in range(NROWS):
            self.rows.append(RowStack(x, y, self))
            x = x + XSPACING

        self.openstacks = [self.opendeck] + self.suits + self.rows

        self.deck.fill()
        self.deal()

    def wincheck(self):
        for s in self.suits:
            if len(s.cards) != NVALUES:
                return
        self.win()
        self.deal()

    def win(self):
        """Stupid animation when you win."""
        cards = []
        for s in self.openstacks:
            cards = cards + s.cards
        while cards:
            card = random.choice(cards)
            cards.remove(card)
            self.animatedmoveto(card, self.deck)

    def animatedmoveto(self, card, dest):
        for i in range(10, 0, -1):
            dx, dy = (dest.x-card.x)//i, (dest.y-card.y)//i
            card.moveby(dx, dy)
            self.master.update_idletasks()

    def closeststack(self, card):
        closest = None
        cdist = 999999999
        # Since we only compare distances,
        # we don't bother to take the square root.
        for stack in self.openstacks:
            dist = (stack.x - card.x)**2 + (stack.y - card.y)**2
            if dist < cdist:
                closest = stack
                cdist = dist
        return closest

    def deal(self):
        self.reset()
        self.deck.shuffle()
        for i in range(NROWS):
            for r in self.rows[i:]:
                card = self.deck.deal()
                r.add(card)
        for r in self.rows:
            r.showtop()

    def reset(self):
        for stack in self.openstacks:
            while 1:
                card = stack.deal()
                if not card:
                    break
                self.deck.add(card)
                card.showback()


# Main function, run when invoked as a stand-alone Python program.

def main():
    root = Tk()
    game = Solitaire(root)
    root.protocol('WM_DELETE_WINDOW', root.quit)
    root.mainloop()

if __name__ == '__main__':
    main()
PKb1�Z"��@@tkinter/guido/kill.pycnu�[����
Afc@s�ddlTddlmZddlmZddlZddlZdefd��YZdefd��YZ	e
d	kr�e	dd
d�Zej
�jd�ej
�jd
d
�ej�ndS(i����(t*(tsplitfields(tsplitNt	BarButtoncBseZdd�ZRS(cKsOttj||f|�|jdt�t|dd�|_|j|d<dS(Ntsidetnametmenu(tapplyt
Menubuttont__init__tpacktLEFTtMenuR(tselftmastertcnf((s//usr/lib64/python2.7/Demo/tkinter/guido/kill.pyR	sN(t__name__t
__module__tNoneR	(((s//usr/lib64/python2.7/Demo/tkinter/guido/kill.pyR
stKillc
Bs_eZdddddddd gZd�Zd�Zd�Zd�Zd�Zd!d�Z	RS("tDefaulttitLongs-litUsers-uitJobss-jtSignals-stMemorys-mtVMs-vtHexs-XcCsI|j|jj�d}t|�|}tjd|�|j�dS(Niskill -9 (tformat_listtformattgetRtostsystemt	do_update(R
tselectedtctpid((s//usr/lib64/python2.7/Demo/tkinter/guido/kill.pytkillscCs�|j|jj�\}}}tjd|�}t|d�}|jj|d�|d=|jj	j�d}|jj
jdt��x$|D]}|jj
j
d|�q�W|jj
jt|��dS(Nsps -w s
i(RRRtcommandst	getoutputRtheadertsettframetvscrolltlisttdeletetAtEndtinserttyviewtint(R
RtoptiontcolumntsR-tytline((s//usr/lib64/python2.7/Demo/tkinter/guido/kill.pyR" s
cCs6|jjdt�|jj|jj|j��dS(Ni(twidgettselect_cleartENDt
select_settnearestR6(R
te((s//usr/lib64/python2.7/Demo/tkinter/guido/kill.pyt	do_motion+scCs|jjdt�dS(Ni(R8R9R:(R
R=((s//usr/lib64/python2.7/Demo/tkinter/guido/kill.pytdo_leave.scCs,|j|jj|jj|j���dS(N(R&R8RR<R6(R
R=((s//usr/lib64/python2.7/Demo/tkinter/guido/kill.pytdo_10sc
Ks
tj|||�|jdddt�t|dddtdd�|_|jjdt�t|jd	d
�|j_|jjj	j
ddd
|j�t|jd	d�|j_t
|�|_|jjd�xYtt|j��D]B}|jjj	jd|j|dd
|jd|jd|�q�W|jj|jj|jj�t|dtdd�|_|jjdddt�t|�|_t|jdtdtddd|j�|j_|jjjdt�t|jdt�|j_t |jdt!ddddd|jjj�|j_"|jj"j#|jjd
<|jjjdt$dt%�|jj"jdddt�t&|d	dd
|j�|_'|j'jdddt�|jj"j(d|j)�|jj"j(d|j*�|jj"j(d|j+�|j�dS(NtexpanditfillRtbartrelieftborderwidthittexttFiletlabeltQuittcommandtViewitvariabletvaluetanchorttextvariabletorienttselectbackgrounds#eed5b7tselectborderwidthtyscrollRtUpdates<Motion>s<Leave>s<1>(,tFrameR	R
tBOTHtRAISEDRCtXRtfileRtadd_commandtquittviewtIntVarRR*trangetlenRtadd_radiobuttonR"t
tk_menuBarR+t	StringVarR)tLabeltFLATtNWRHt	ScrollbartVERTICALR,tListboxtSUNKENR-R1tRIGHTtYtButtontupdatetbindR>R?R@(R
RRtnum((s//usr/lib64/python2.7/Demo/tkinter/guido/kill.pyR	2sP		(RRi(Rs-li(Rs-ui(Rs-ji(Rs-si(Rs-mi(Rs-vi(Rs-XiN(
RRRR&R"R>R?R@RR	(((s//usr/lib64/python2.7/Demo/tkinter/guido/kill.pyRs						t__main__REisTkinter Process Killeri(tTkintertstringRRR'R RRRURRRR&twinfo_toplevelttitletminsizetmainloop(((s//usr/lib64/python2.7/Demo/tkinter/guido/kill.pyt<module>s
MPKb1�Z�^u�iitkinter/guido/switch.pycnu�[����
��^c@sfddlTddd��YZddd��YZdd
d��YZd�Zed	krbe�nd
S(i����(t*tAppcBs)eZddd�Zd�Zd�ZRS(cCs�|dkr3|dkr$t�}q3t|�}n||_t|�|_|jj�t|dddt�|_|jjdddt	�i|_
d|_dS(Ntborderwidthitrelieftexpanditfill(tNonetTktToplevelttoptFrametbuttonframetpacktGROOVEt
panelframetBOTHtpanelstcurpanel(tselfR	tmaster((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pyt__init__s	
	cCs�t|jd|d||d��}|jdt�t|j�}||�}|||f|j|<|jdkr�|j	|�ndS(NttexttcommandcSs
|j|�S(N(tshow(Rtname((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pyt<lambda>ttside(
tButtonRRtLEFTR
RRRRR(RRtklasstbuttontframetinstance((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pytaddpanelscCsR|j|\}}}|jr/|jj�n||_|jdddd�dS(NRiRtboth(RRtpack_forgetR(RRRR R!((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pyRs
		N(t__name__t
__module__RRR"R(((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pyRs	
t
LabelPanelcBseZd�ZRS(cCs&t|dd�|_|jj�dS(NRsHello world(tLabeltlabelR(RR ((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pyR's(R%R&R(((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pyR'&stButtonPanelcBseZd�ZRS(cCs&t|dd�|_|jj�dS(NRsPress me(RRR(RR ((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pyR,s(R%R&R(((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pyR*+scCs:t�}|jdt�|jdt�|jj�dS(NR)R(RR"R'R*R	tmainloop(tapp((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pytmain0s	t__main__N((((tTkinterRR'R*R-R%(((s1/usr/lib64/python2.7/Demo/tkinter/guido/switch.pyt<module>s
!	PKb1�Z��1tkinter/guido/switch.pynu�[���# Show how to do switchable panels.

from Tkinter import *

class App:

    def __init__(self, top=None, master=None):
        if top is None:
            if master is None:
                top = Tk()
            else:
                top = Toplevel(master)
        self.top = top
        self.buttonframe = Frame(top)
        self.buttonframe.pack()
        self.panelframe = Frame(top,  borderwidth=2, relief=GROOVE)
        self.panelframe.pack(expand=1, fill=BOTH)
        self.panels = {}
        self.curpanel = None

    def addpanel(self, name, klass):
        button = Button(self.buttonframe, text=name,
                        command=lambda self=self, name=name: self.show(name))
        button.pack(side=LEFT)
        frame = Frame(self.panelframe)
        instance = klass(frame)
        self.panels[name] = (button, frame, instance)
        if self.curpanel is None:
            self.show(name)

    def show(self, name):
        (button, frame, instance) = self.panels[name]
        if self.curpanel:
            self.curpanel.pack_forget()
        self.curpanel = frame
        frame.pack(expand=1, fill="both")

class LabelPanel:
    def __init__(self, frame):
        self.label = Label(frame, text="Hello world")
        self.label.pack()

class ButtonPanel:
    def __init__(self, frame):
        self.button = Button(frame, text="Press me")
        self.button.pack()

def main():
    app = App()
    app.addpanel("label", LabelPanel)
    app.addpanel("button", ButtonPanel)
    app.top.mainloop()

if __name__ == '__main__':
    main()
PKb1�Z~H�+��tkinter/guido/ShellWindow.pyonu�[����
��^c@s�ddlZddlZddlZddlTddlmZddlmZddlZdZdefd��YZdZ	d	�Z
d
�Zedkr�e�ndS(i����N(t*(tScrolledText(tDialogitShellWindowcBsheZd
d
d�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d�Zd	�ZRS(cKs|s>ytjd}Wntk
r0d}nX|d}ntj|�}|d}ttj||f|�d|_|j	d|j
�|j	d|j�|j	d|j�|j	d	|j
�|j	d
|j�t||�\|_|_|_|jj|jt|j�dS(NtSHELLs/bin/shs -iis1.0s<Return>s<Control-c>s<Control-t>s<Control-k>s<Control-d>(tostenvirontKeyErrortstringtsplittapplyRt__init__tpostbindtinputhandlertsiginttsigtermtsigkilltsendeoftspawntpidt	fromchildttochildttktcreatefilehandlertREADABLEt
outputhandler(tselftmastertshelltcnftargs((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyR
s$



	!c	Cstj|t�}|s�|jj|�tj|jd�\}}dG|GdG|GHd|_|d?}|d@}|dkr�d|}n%d|d@}|d	@r�|d
}nt|j	d|dd
dddddd�dS|j
t|�|jd�|_
|jt�dS(NiRtstatusii�sexit status %dskilled by signal %dii�s -- core dumpedttextttitlesExit statustbitmaptwarningtdefaulttstringstOKsend - 1 char(R'(RtreadtBUFSIZERtdeletefilehandlertwaitpidRtNoneRRtinserttENDtindexRtyview_pickplace(	RtfiletmasktdataRtststdetailtcausetmsg((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyR#s.	




cGse|js|j�dS|jtd�|j|jd�}|jt�|_tj|j	|�dS(Ntbreaks
send - 1 char(
Rt
no_processR-R.tgetRR/RtwriteR(RRtline((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyR=s	
cGs+|js|j�dStj|j�dS(NR8(RR9RtcloseR(RR((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyRGs
	
cCs.|js|j�dStj|j|�dS(NR8(RR9Rtkill(Rtsig((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pytsendsigNs
	
cGs|jtj�S(N(R@tsignaltSIGINT(RR((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyRUscGs|jtj�S(N(R@RAtSIGQUIT(RR((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pytsigquitXscGs|jtj�S(N(R@RAtSIGTERM(RR((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyR[scGs|jtj�S(N(R@RAtSIGKILL(RR((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyR^scCs/t|jddddddddd	d�dS(NR!sNo active processR"s
No processR#terrorR%iR&R'(R'(RR(R((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyR9asN(
t__name__t
__module__R,RRRRR@RRDRRR9(((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyRs		
						idcCs\tj�\}}tj�\}}tj�}|dkr5x6dD].}ytj|�WqCtjk
rpqCXqCWtj|�dkr�tjjd�ntj|�dkr�tjjd�ntj|�dkr�tjjd�ntj	dt
�ztj||�Wdtjjd�tjd�Xntj|�tj|�|||fS(	Niiispopen2: bad read dup
spopen2: bad write dup
isexecvp failed
(iii(
RtpipetforkR=RGtduptsyststderrR;t
closerangetMAXFDtexecvpt_exit(tprogRtp2creadtp2cwritetc2preadtc2pwriteRti((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyRks.


cCs�tjtjd�}t�}|jdd�|rJt|d|�}nt|�}|jdddt�|j	�|j
j�dS(NiRtexpandtfill(RtjoinRMtargvtTktminsizeRtpacktBOTHt	focus_setRtmainloop(Rtroottw((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyttest�s	
t__main__(
RRMRtTkinterRRRAR)RRPRReRH(((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyt<module>s
^		PKb1�ZD����tkinter/guido/optionmenu.pynu�[���# option menu sample (Fredrik Lundh, September 1997)

from Tkinter import *

root = Tk()

#
# standard usage

var1  = StringVar()
var1.set("One") # default selection

menu1 = OptionMenu(root, var1, "One", "Two", "Three")
menu1.pack()

#
# initialize from a sequence

CHOICES = "Aah", "Bee", "Cee", "Dee", "Eff"

var2  = StringVar()
var2.set(CHOICES[0])

menu2 = apply(OptionMenu, (root, var2) + tuple(CHOICES))
menu2.pack()

root.mainloop()
PKb1�Z��kK�\�\tkinter/guido/sortvisu.pycnu�[����
Afc@s�dZddlTddlmZmZddlZdZdZdZddd��YZ	d	dd
��YZ
d�Zd�Zd
�Z
d�Zd�Zd�Zd�Zd�Zd�Zd�Zddd��YZd�Zedkr�e�ndS(sjSorting algorithms visualizer using Tkinter.

This module is comprised of three ``components'':

- an array visualizer with methods that implement basic sorting
operations (compare, swap) as well as methods for ``annotating'' the
sorting algorithm (e.g. to show the pivot element);

- a number of sorting algorithms (currently quicksort, insertion sort,
selection sort and bubble sort, as well as a randomization function),
all using the array visualizer for its basic operations and with calls
to its annotation methods;

- and a ``driver'' class which can be used as a Grail applet or as a
stand-alone application.

i����(t*(tLinet	RectangleNi
itArraycBs�eZdd�Zd�ZdZd�Zd�ZdZdZ	d�Z
d�ZdZd	�Z
d
�Zd�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZRS(cCs||_t|j�|_|jjdt�t|j�|_|jj�t|j�|_|jj�t|j�|_	|j	j�t
|jdddd�|_t
|jdddd�|_t
|jdddd�|_
g|_d|_|_|r|j|�ndS(Ntfilli(tmastertFrametframetpacktXtLabeltlabeltCanvastcanvastreportRtlefttrighttpivottitemstsizetmaxvaluetsetdata(tselfRtdata((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyt__init__"s 	


	cCs�|j}g|_x|D]}|j�qWt|�|_t|�|_|jjd|jdtd|jdt	�x7t
|j�D]&}|jjt||||��q�W|j
d|j�dS(NtwidthitheightsSort demo, size %d(RtdeletetlenRtmaxRR
tconfigtXGRIDtYGRIDtrangetappendt	ArrayItemtreset(RRtolditemstitemti((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR4s		
$tnormalcCs
||_dS(N(tspeed(RR)((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytsetspeedCscCs|jj�dS(N(Rtdestroy(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR+FsicCs&d|_|jr"|jj�ndS(Ni(t
stop_mainlooptin_mainloopRtquit(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytcancelLs		cCs|jr|jj�ndS(N(R-RR.(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytstepQs	sArray.CancelledcCs�|jdkrd}n4|jdkr4|d}n|jdkrLd}n|js�|jj�|jj||jj�}d|_|jj�|jj|�d|_n|jr�d|_|j	d�t
j�ndS(	Ntfastestitfasti
ssingle-stepiʚ;it	Cancelled(R)R,RtupdatetafterR.R-tmainlooptafter_canceltmessageRR3(Rtmsecstid((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytwaitWs"	
		
	
		
cCs|jS(N(R(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytgetsizejscCszxit|j�D]X}|j|}||ko:|knrU|jjdd�q|jjdd�qW|j�dS(NRtredtorange(R!RRR&Rthide_left_right_pivot(RtfirsttlastR'R&((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytshow_partitionms
cCsHx7t|j�D]&}|j|}|jjdd�qW|j�dS(NRR=(R!RRR&RR?(RR'R&((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pythide_partitionvs
cCs�d|ko|jkns-|j�dS|j|j�\}}}}|jj|ddf|ddfg�|jj�dS(Niii'(Rt	hide_leftRtpositionRtcoordsRR4(RRtx1ty1tx2ty2((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyt	show_left|s
*cCs�d|ko|jkns-|j�dS|j|j�\}}}}|jj|ddf|ddff�|jj�dS(Niii'(Rt
hide_rightRRERRFRR4(RRRGRHRIRJ((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyt
show_right�s
*cCs"|j�|j�|j�dS(N(RDRLt
hide_pivot(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR?�s

cCs|jjddf�dS(Ni(ii(ii(RRF(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRD�scCs|jjddf�dS(Ni(ii(ii(RRF(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRL�scCsM|j|j�\}}}}|jjd|dfd|dff�dS(Niii'(RRERRF(RRRGRHRIRJ((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyt
show_pivot�scCs|jjddf�dS(Ni(ii(ii(RRF(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRN�scCs`||krdS|j�|j|}|j|}|||j|<|j|<|j|�dS(N(t	countswapRtswapwith(RR'tjR&tother((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytswap�s


cCs1|j�|j|}|j|}|j|�S(N(tcountcompareRt	compareto(RR'RRR&RS((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytcompare�s


cCs7d|_d|_|j|�|j�|j�dS(Ni(t	ncomparestnswapsR8tupdatereportRC(Rtmsg((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR$�s
		

cCs|jjd|�dS(Nttext(RR(RR[((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR8�scCs|jd|_|j�dS(Ni(RYRZ(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRP�scCs|jd|_|j�dS(Ni(RXRZ(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRU�scCs-d|j|jf}|jjd|�dS(Ns%d cmps, %d swapsR\(RXRYRR(RR\((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRZ�sN(t__name__t
__module__tNoneRRR)R*R+R-R,R/R0R3R;R<RBRCRKRMR?RDRLRORNRTRWR$R8RPRURZ(((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR s8	
																							R#cBsbeZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�ZRS(
cCs�||_||_||_|j�\}}}}t|j||||dddddd�|_|jjd|j�|jjd|j	�|jjd	|j
�dS(
NRR=toutlinetblackRis
<Button-1>s<Button1-Motion>s<ButtonRelease-1>(tarraytindextvalueRERR
R&tbindt
mouse_downt
mouse_movetmouse_up(RRbRcRdRGRHRIRJ((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�s			cCs)|j}d|_d|_|j�dS(N(R&R_RbR(RR&((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�s			cCsA|j|_|j|_|j|_|j|_|jj�dS(N(txtlastxtytlastytorigxtorigyR&ttkraise(Rtevent((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRf�s
cCsC|jj|j|j|j|j�|j|_|j|_dS(N(R&tmoveRiRjRkRl(RRp((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRg�s'c	Cs�|j|j�}||jj�kr=|jj�d}n|dkrRd}n|jj|}|j}|||jj|<|jj|<||_|j�\}}}}|jj||f||ff�|j	|�dS(Nii(
tnearestindexRiRbR<RRcRER&RFtsetindex(	RRpR'RSthereRGRHRIRJ((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRh�s		!	"cCs�t|j|�}|sdS|jjdkr7d}n|j�}||_|j�}t|||�}|jj�x<|D]4}|jj|d |df�|jj	d�q~WdS(NR1iii2(
tstepsRcRbR)REtinterpolateR&RoRFR;(RRctnstepstoldptstnewptst
trajectorytpts((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRs�s		

cCs�t|j|j�}|sdS|jjdkr:d}n|j�}|j�}|j|j|_|_|j�}|j�}|jd}|jd}|jjdd�|jjdd�|jjj�|jjdkrk|jj	|d |df�|jj	|d |df�|jjj�|jjd|�|jjd|�|jj
d�dSt|||�}	t|||�}
|j|jkr�|jj
�|jj
�n|jj
�|jj
�z�xztt|	��D]f}|	|}|
|}
|jj	|d |df�|jj	|
d |
df�|jj
d�q�WWd|	d	}|
d	}
|jj	|d |df�|jj	|
d |
df�|jjd|�|jjd|�XdS(
NR1iRtgreentyellowssingle-stepii2i����(RuRcRbR)RER&RRR4RFR;RvRdRoR!R(RRSRwtmyoldptstotheroldptstmynewptstothernewptstmyfillt	otherfilltmytrajectorytothertrajectoryR'tmyptstotherpts((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRQ�sV	








cCs�|jd}|jd}t|j|j�}|dkrJd}d}n%|dkred}d}n
d}}z:|jjd|�|jjd|�|jjd�Wd|jjd|�|jjd|�X|S(NRitwhiteRatgreyi�(R&tcmpRdRRbR;(RRSR�R�toutcometmyflasht
otherflash((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRV-s"

		
cCsX|jdttd}|t}|jjdt}||jt}||||fS(Nii(RcRtWIDTHRbRR Rd(RRGRIRJRH((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyREBs

cCsttt|�t��dS(Ni(tinttroundtfloatR(RRi((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRrIs(R]R^RRRfRgRhRsRQRVRERr(((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR#�s							.		cCs[t||�}|dkr)|d}n.|dkrB|d}n|dkrWd}n|S(Niiii
(tabs(RttthereRw((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRuOs

	cCs�t|�t|�kr$td�ndgt|�}t|�g}xmtd|�D]\}x@tt|��D],}||||||||||<qoW|jt|��qVW|jt|��|S(Ns,can't interpolate arrays of different lengthii(Rt
ValueErrorttupleR!R"(RxRytnR{tresR'tk((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRvYs*cCs=|j�}|j|ddg|�|jd|�dS(NiisUniform data, size %d(R<RR$(RbR((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytuniformhscCs;|j�}|jtd|d��|jd|�dS(NisDistinct data, size %d(R<RR!R$(RbR((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytdistinctmscCsg|jd�|j�}x:t|�D],}tjd|d�}|j||�q&W|jd�dS(NtRandomizingiit
Randomized(R$R<R!trandomtrandintRTR8(RbR�R'RR((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyt	randomizers
cCs�|j�}|jd�xrtd|�D]a}|d}xN|dkr�|j||d�dkrhPn|j||d�|d}q<Wq)W|jd�dS(NsInsertion sortiitSorted(R<R$R!RWRTR8(RbRR'RR((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyt
insertionsortzs

cCs�|j�}|jd�z�xmt|�D]_}|j||�xFt|d|�D]1}|j||�dkrS|j||�qSqSWq)W|jd�Wd|j�XdS(NsSelection sortiiR�(R<R$R!RBRWRTR8RC(RbRR'RR((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyt
selectionsort�s
cCs�|j�}|jd�xat|�D]S}xJtd|�D]9}|j|d|�dkr<|j|d|�q<q<Wq&W|jd�dS(NsBubble sortiiR�(R<R$R!RWRTR8(RbRR'RR((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyt
bubblesort�s
c
Cs�|j�}|jd�zYd|fg}x6|rc|d\}}|d=|j||�||dkr�|jd�xvt|d|�D]a}|d}xN||kr�|j||d�dkr�Pn|j||d�|d}q�Wq�Wq.n|jd�|||d|d}}}|j||�dkrO|j||�n|j||�dkrz|j||�n|j||�dkr�|j||�n|}|j|�|jd	�|jd
�|}	|}
x
|jd�|
d}
|j	|
�x?|
|krF|j|
|�dkrF|
d}
|j	|
�qW|jd�|	d}	|j
|	�x?|	|kr�|j|	|�dkr�|	d}	|j
|	�qnW|	|
kr�|jd
�Pn|jd�|j|	|
�q�W|jd�|j||
�|
|}||	}|dkr>|j||
f�n|dkr.|j|	|f�q.q.W|jd�Wd|j�XdS(Nt	Quicksortii����isInsertion sortisChoosing pivotisPivot at left of partitioni�sSweep right pointersSweep left pointersEnd of partitions
Swap itemssSwap pivot backR�(
R<R$RBR8R!RWRTROR;RMRKR"RC(
RbRtstackR@RAR'RRR�RRRtn1tn2((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyt	quicksort�sx
	


 





'



'





cCs<x5x.ttttgD]}t|�||�qWqWdS(N(R�R�R�R�R�(Rbtalg((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytdemosort�s
tSortDemocBs�eZdd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d	�Z
d
�Zd�Zd�Z
d
�Zd�ZRS(icCs||_||_d|_t|j�|_t|�|_|jjdt�t|j�|_	|j	jdt
dt�t|j�|_|jjdt
dt�t|j	ddd|j�|_|jjdt�t|j	ddd|j�|_|jjdt�t|j	ddd|j�|_|jjdt�t|j	dd	d|j�|_|jjdt�d
tfd��Y}||j|�|_|jj|�dd
ddgtddd�}|j|kr�|j|j�|j�ntt|j	|jft |��|_!|j!jdt�t"|j�|_#|j#jd�t|j	|j#dddd�|_$|j$jdt�t|j	ddd|j%�|_&|j&jdt�t|jddd|j'�|_(|j(jdt�t|jddd|j)�|_*|j*jdt�t|jddd|j+�|_,|j,jdt�t|jddd|j-�|_.|j.jdt�t|jddd|j/�|_0|j0jdt�|j0j1dt2�t|jddd|j3�|_4|j4jdt�dS(NitsideRR\R�tcommandsInsertion sortsSelection sortsBubble sorttMyIntVarcBseZd�Zd�ZRS(cSs||_tj||�dS(N(tdemotIntVarR(RRR�((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyRs	cSs9tj||�t|�dkr5|jj|�ndS(Nt0(R�tsettstrR�tresize(RRd((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�s(R]R^RR�(((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR��s	iiiiii7R(ssingle-stepR2R1tStept	RandomizetUniformtDistincttDemotCanceltstatetQuit(5RRtbusyRRbRtbotframeRtBOTTOMtbotleftframetLEFTtYt
botrightframetRIGHTtButtontc_qsorttb_qsortR	tc_isorttb_isorttc_ssorttb_ssorttc_bsorttb_bsortR�tv_sizeR�R!R"tsorttapplyt
OptionMenuR�tm_sizet	StringVartv_speedtm_speedtc_steptb_steptc_randomizetb_randomizet	c_uniformt	b_uniformt
c_distinctt
b_distincttc_demotb_demotc_canceltb_cancelRtDISABLEDtc_quittb_quit(RRRR�tsizes((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�sv				"
"cCsG|jr|jj�dS||_|jjtd|jd��dS(Ni(R�RtbellRRbRR!(Rtnewsize((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�0s
	
	cCs|jt�dS(N(trunR�(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�7scCs|jt�dS(N(R�R�(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�:scCs|jt�dS(N(R�R�(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�=scCs|jt�dS(N(R�R�(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�@scCs|jt�dS(N(R�R�(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�CscCs|jt�dS(N(R�R�(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�FscCs|jt�dS(N(R�R�(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�IscCs|jt�dS(N(R�R�(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�LscCs�|jr|jj�dSd|_|jj|jj��|jjdt	�y||j�Wnt
jk
rvnX|jjdt�d|_dS(NiR�i(
R�RR�RbR*R�tgetR�RtNORMALRR3R�(Rtfunc((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�Os	
	cCs+|js|jj�dS|jj�dS(N(R�RR�RbR/(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�]s	
cCsK|js|jj�dS|jjd�|jjd�|jj�dS(Nssingle-step(R�RR�R�R�RbR*R0(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�cs	
cCs3|jr|jj�n|jj|jj�dS(N(R�RbR/Rt
after_idleR.(R((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR�ks	(R]R^RR�R�R�R�R�R�R�R�R�R�R�R�R�(((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyR��sL												cCs6t�}t|�}|jd|j�|j�dS(NtWM_DELETE_WINDOW(tTkR�tprotocolR�R6(trootR�((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pytmainss	t__main__((((t__doc__tTkinterRRRR�RR R�RR#RuRvR�R�R�R�R�R�R�R�R�R�R](((s3/usr/lib64/python2.7/Demo/tkinter/guido/sortvisu.pyt<module>s,
��	
						
			=		�	PKb1�Z�˗*KKtkinter/guido/hello.pynu�[���# Display hello, world in a button; clicking it quits the program

import sys
from Tkinter import *

def main():
    root = Tk()
    button = Button(root)
    button['text'] = 'Hello, world'
    button['command'] = quit_callback       # See below
    button.pack()
    root.mainloop()

def quit_callback():
    sys.exit(0)

main()
PKb1�Z)�Yz�K�Ktkinter/guido/sortvisu.pynuȯ��#! /usr/bin/python2.7

"""Sorting algorithms visualizer using Tkinter.

This module is comprised of three ``components'':

- an array visualizer with methods that implement basic sorting
operations (compare, swap) as well as methods for ``annotating'' the
sorting algorithm (e.g. to show the pivot element);

- a number of sorting algorithms (currently quicksort, insertion sort,
selection sort and bubble sort, as well as a randomization function),
all using the array visualizer for its basic operations and with calls
to its annotation methods;

- and a ``driver'' class which can be used as a Grail applet or as a
stand-alone application.

"""


from Tkinter import *
from Canvas import Line, Rectangle
import random


XGRID = 10
YGRID = 10
WIDTH = 6


class Array:

    def __init__(self, master, data=None):
        self.master = master
        self.frame = Frame(self.master)
        self.frame.pack(fill=X)
        self.label = Label(self.frame)
        self.label.pack()
        self.canvas = Canvas(self.frame)
        self.canvas.pack()
        self.report = Label(self.frame)
        self.report.pack()
        self.left = Line(self.canvas, 0, 0, 0, 0)
        self.right = Line(self.canvas, 0, 0, 0, 0)
        self.pivot = Line(self.canvas, 0, 0, 0, 0)
        self.items = []
        self.size = self.maxvalue = 0
        if data:
            self.setdata(data)

    def setdata(self, data):
        olditems = self.items
        self.items = []
        for item in olditems:
            item.delete()
        self.size = len(data)
        self.maxvalue = max(data)
        self.canvas.config(width=(self.size+1)*XGRID,
                           height=(self.maxvalue+1)*YGRID)
        for i in range(self.size):
            self.items.append(ArrayItem(self, i, data[i]))
        self.reset("Sort demo, size %d" % self.size)

    speed = "normal"

    def setspeed(self, speed):
        self.speed = speed

    def destroy(self):
        self.frame.destroy()

    in_mainloop = 0
    stop_mainloop = 0

    def cancel(self):
        self.stop_mainloop = 1
        if self.in_mainloop:
            self.master.quit()

    def step(self):
        if self.in_mainloop:
            self.master.quit()

    Cancelled = "Array.Cancelled"       # Exception

    def wait(self, msecs):
        if self.speed == "fastest":
            msecs = 0
        elif self.speed == "fast":
            msecs = msecs//10
        elif self.speed == "single-step":
            msecs = 1000000000
        if not self.stop_mainloop:
            self.master.update()
            id = self.master.after(msecs, self.master.quit)
            self.in_mainloop = 1
            self.master.mainloop()
            self.master.after_cancel(id)
            self.in_mainloop = 0
        if self.stop_mainloop:
            self.stop_mainloop = 0
            self.message("Cancelled")
            raise Array.Cancelled

    def getsize(self):
        return self.size

    def show_partition(self, first, last):
        for i in range(self.size):
            item = self.items[i]
            if first <= i < last:
                item.item.config(fill='red')
            else:
                item.item.config(fill='orange')
        self.hide_left_right_pivot()

    def hide_partition(self):
        for i in range(self.size):
            item = self.items[i]
            item.item.config(fill='red')
        self.hide_left_right_pivot()

    def show_left(self, left):
        if not 0 <= left < self.size:
            self.hide_left()
            return
        x1, y1, x2, y2 = self.items[left].position()
##      top, bot = HIRO
        self.left.coords([(x1-2, 0), (x1-2, 9999)])
        self.master.update()

    def show_right(self, right):
        if not 0 <= right < self.size:
            self.hide_right()
            return
        x1, y1, x2, y2 = self.items[right].position()
        self.right.coords(((x2+2, 0), (x2+2, 9999)))
        self.master.update()

    def hide_left_right_pivot(self):
        self.hide_left()
        self.hide_right()
        self.hide_pivot()

    def hide_left(self):
        self.left.coords(((0, 0), (0, 0)))

    def hide_right(self):
        self.right.coords(((0, 0), (0, 0)))

    def show_pivot(self, pivot):
        x1, y1, x2, y2 = self.items[pivot].position()
        self.pivot.coords(((0, y1-2), (9999, y1-2)))

    def hide_pivot(self):
        self.pivot.coords(((0, 0), (0, 0)))

    def swap(self, i, j):
        if i == j: return
        self.countswap()
        item = self.items[i]
        other = self.items[j]
        self.items[i], self.items[j] = other, item
        item.swapwith(other)

    def compare(self, i, j):
        self.countcompare()
        item = self.items[i]
        other = self.items[j]
        return item.compareto(other)

    def reset(self, msg):
        self.ncompares = 0
        self.nswaps = 0
        self.message(msg)
        self.updatereport()
        self.hide_partition()

    def message(self, msg):
        self.label.config(text=msg)

    def countswap(self):
        self.nswaps = self.nswaps + 1
        self.updatereport()

    def countcompare(self):
        self.ncompares = self.ncompares + 1
        self.updatereport()

    def updatereport(self):
        text = "%d cmps, %d swaps" % (self.ncompares, self.nswaps)
        self.report.config(text=text)


class ArrayItem:

    def __init__(self, array, index, value):
        self.array = array
        self.index = index
        self.value = value
        x1, y1, x2, y2 = self.position()
        self.item = Rectangle(array.canvas, x1, y1, x2, y2,
                              fill='red', outline='black', width=1)
        self.item.bind('<Button-1>', self.mouse_down)
        self.item.bind('<Button1-Motion>', self.mouse_move)
        self.item.bind('<ButtonRelease-1>', self.mouse_up)

    def delete(self):
        item = self.item
        self.array = None
        self.item = None
        item.delete()

    def mouse_down(self, event):
        self.lastx = event.x
        self.lasty = event.y
        self.origx = event.x
        self.origy = event.y
        self.item.tkraise()

    def mouse_move(self, event):
        self.item.move(event.x - self.lastx, event.y - self.lasty)
        self.lastx = event.x
        self.lasty = event.y

    def mouse_up(self, event):
        i = self.nearestindex(event.x)
        if i >= self.array.getsize():
            i = self.array.getsize() - 1
        if i < 0:
            i = 0
        other = self.array.items[i]
        here = self.index
        self.array.items[here], self.array.items[i] = other, self
        self.index = i
        x1, y1, x2, y2 = self.position()
        self.item.coords(((x1, y1), (x2, y2)))
        other.setindex(here)

    def setindex(self, index):
        nsteps = steps(self.index, index)
        if not nsteps: return
        if self.array.speed == "fastest":
            nsteps = 0
        oldpts = self.position()
        self.index = index
        newpts = self.position()
        trajectory = interpolate(oldpts, newpts, nsteps)
        self.item.tkraise()
        for pts in trajectory:
            self.item.coords((pts[:2], pts[2:]))
            self.array.wait(50)

    def swapwith(self, other):
        nsteps = steps(self.index, other.index)
        if not nsteps: return
        if self.array.speed == "fastest":
            nsteps = 0
        myoldpts = self.position()
        otheroldpts = other.position()
        self.index, other.index = other.index, self.index
        mynewpts = self.position()
        othernewpts = other.position()
        myfill = self.item['fill']
        otherfill = other.item['fill']
        self.item.config(fill='green')
        other.item.config(fill='yellow')
        self.array.master.update()
        if self.array.speed == "single-step":
            self.item.coords((mynewpts[:2], mynewpts[2:]))
            other.item.coords((othernewpts[:2], othernewpts[2:]))
            self.array.master.update()
            self.item.config(fill=myfill)
            other.item.config(fill=otherfill)
            self.array.wait(0)
            return
        mytrajectory = interpolate(myoldpts, mynewpts, nsteps)
        othertrajectory = interpolate(otheroldpts, othernewpts, nsteps)
        if self.value > other.value:
            self.item.tkraise()
            other.item.tkraise()
        else:
            other.item.tkraise()
            self.item.tkraise()
        try:
            for i in range(len(mytrajectory)):
                mypts = mytrajectory[i]
                otherpts = othertrajectory[i]
                self.item.coords((mypts[:2], mypts[2:]))
                other.item.coords((otherpts[:2], otherpts[2:]))
                self.array.wait(50)
        finally:
            mypts = mytrajectory[-1]
            otherpts = othertrajectory[-1]
            self.item.coords((mypts[:2], mypts[2:]))
            other.item.coords((otherpts[:2], otherpts[2:]))
            self.item.config(fill=myfill)
            other.item.config(fill=otherfill)

    def compareto(self, other):
        myfill = self.item['fill']
        otherfill = other.item['fill']
        outcome = cmp(self.value, other.value)
        if outcome < 0:
            myflash = 'white'
            otherflash = 'black'
        elif outcome > 0:
            myflash = 'black'
            otherflash = 'white'
        else:
            myflash = otherflash = 'grey'
        try:
            self.item.config(fill=myflash)
            other.item.config(fill=otherflash)
            self.array.wait(500)
        finally:
            self.item.config(fill=myfill)
            other.item.config(fill=otherfill)
        return outcome

    def position(self):
        x1 = (self.index+1)*XGRID - WIDTH//2
        x2 = x1+WIDTH
        y2 = (self.array.maxvalue+1)*YGRID
        y1 = y2 - (self.value)*YGRID
        return x1, y1, x2, y2

    def nearestindex(self, x):
        return int(round(float(x)/XGRID)) - 1


# Subroutines that don't need an object

def steps(here, there):
    nsteps = abs(here - there)
    if nsteps <= 3:
        nsteps = nsteps * 3
    elif nsteps <= 5:
        nsteps = nsteps * 2
    elif nsteps > 10:
        nsteps = 10
    return nsteps

def interpolate(oldpts, newpts, n):
    if len(oldpts) != len(newpts):
        raise ValueError, "can't interpolate arrays of different length"
    pts = [0]*len(oldpts)
    res = [tuple(oldpts)]
    for i in range(1, n):
        for k in range(len(pts)):
            pts[k] = oldpts[k] + (newpts[k] - oldpts[k])*i//n
        res.append(tuple(pts))
    res.append(tuple(newpts))
    return res


# Various (un)sorting algorithms

def uniform(array):
    size = array.getsize()
    array.setdata([(size+1)//2] * size)
    array.reset("Uniform data, size %d" % size)

def distinct(array):
    size = array.getsize()
    array.setdata(range(1, size+1))
    array.reset("Distinct data, size %d" % size)

def randomize(array):
    array.reset("Randomizing")
    n = array.getsize()
    for i in range(n):
        j = random.randint(0, n-1)
        array.swap(i, j)
    array.message("Randomized")

def insertionsort(array):
    size = array.getsize()
    array.reset("Insertion sort")
    for i in range(1, size):
        j = i-1
        while j >= 0:
            if array.compare(j, j+1) <= 0:
                break
            array.swap(j, j+1)
            j = j-1
    array.message("Sorted")

def selectionsort(array):
    size = array.getsize()
    array.reset("Selection sort")
    try:
        for i in range(size):
            array.show_partition(i, size)
            for j in range(i+1, size):
                if array.compare(i, j) > 0:
                    array.swap(i, j)
        array.message("Sorted")
    finally:
        array.hide_partition()

def bubblesort(array):
    size = array.getsize()
    array.reset("Bubble sort")
    for i in range(size):
        for j in range(1, size):
            if array.compare(j-1, j) > 0:
                array.swap(j-1, j)
    array.message("Sorted")

def quicksort(array):
    size = array.getsize()
    array.reset("Quicksort")
    try:
        stack = [(0, size)]
        while stack:
            first, last = stack[-1]
            del stack[-1]
            array.show_partition(first, last)
            if last-first < 5:
                array.message("Insertion sort")
                for i in range(first+1, last):
                    j = i-1
                    while j >= first:
                        if array.compare(j, j+1) <= 0:
                            break
                        array.swap(j, j+1)
                        j = j-1
                continue
            array.message("Choosing pivot")
            j, i, k = first, (first+last)//2, last-1
            if array.compare(k, i) < 0:
                array.swap(k, i)
            if array.compare(k, j) < 0:
                array.swap(k, j)
            if array.compare(j, i) < 0:
                array.swap(j, i)
            pivot = j
            array.show_pivot(pivot)
            array.message("Pivot at left of partition")
            array.wait(1000)
            left = first
            right = last
            while 1:
                array.message("Sweep right pointer")
                right = right-1
                array.show_right(right)
                while right > first and array.compare(right, pivot) >= 0:
                    right = right-1
                    array.show_right(right)
                array.message("Sweep left pointer")
                left = left+1
                array.show_left(left)
                while left < last and array.compare(left, pivot) <= 0:
                    left = left+1
                    array.show_left(left)
                if left > right:
                    array.message("End of partition")
                    break
                array.message("Swap items")
                array.swap(left, right)
            array.message("Swap pivot back")
            array.swap(pivot, right)
            n1 = right-first
            n2 = last-left
            if n1 > 1: stack.append((first, right))
            if n2 > 1: stack.append((left, last))
        array.message("Sorted")
    finally:
        array.hide_partition()

def demosort(array):
    while 1:
        for alg in [quicksort, insertionsort, selectionsort, bubblesort]:
            randomize(array)
            alg(array)


# Sort demo class -- usable as a Grail applet

class SortDemo:

    def __init__(self, master, size=15):
        self.master = master
        self.size = size
        self.busy = 0
        self.array = Array(self.master)

        self.botframe = Frame(master)
        self.botframe.pack(side=BOTTOM)
        self.botleftframe = Frame(self.botframe)
        self.botleftframe.pack(side=LEFT, fill=Y)
        self.botrightframe = Frame(self.botframe)
        self.botrightframe.pack(side=RIGHT, fill=Y)

        self.b_qsort = Button(self.botleftframe,
                              text="Quicksort", command=self.c_qsort)
        self.b_qsort.pack(fill=X)
        self.b_isort = Button(self.botleftframe,
                              text="Insertion sort", command=self.c_isort)
        self.b_isort.pack(fill=X)
        self.b_ssort = Button(self.botleftframe,
                              text="Selection sort", command=self.c_ssort)
        self.b_ssort.pack(fill=X)
        self.b_bsort = Button(self.botleftframe,
                              text="Bubble sort", command=self.c_bsort)
        self.b_bsort.pack(fill=X)

        # Terrible hack to overcome limitation of OptionMenu...
        class MyIntVar(IntVar):
            def __init__(self, master, demo):
                self.demo = demo
                IntVar.__init__(self, master)
            def set(self, value):
                IntVar.set(self, value)
                if str(value) != '0':
                    self.demo.resize(value)

        self.v_size = MyIntVar(self.master, self)
        self.v_size.set(size)
        sizes = [1, 2, 3, 4] + range(5, 55, 5)
        if self.size not in sizes:
            sizes.append(self.size)
            sizes.sort()
        self.m_size = apply(OptionMenu,
                            (self.botleftframe, self.v_size) + tuple(sizes))
        self.m_size.pack(fill=X)

        self.v_speed = StringVar(self.master)
        self.v_speed.set("normal")
        self.m_speed = OptionMenu(self.botleftframe, self.v_speed,
                                  "single-step", "normal", "fast", "fastest")
        self.m_speed.pack(fill=X)

        self.b_step = Button(self.botleftframe,
                             text="Step", command=self.c_step)
        self.b_step.pack(fill=X)

        self.b_randomize = Button(self.botrightframe,
                                  text="Randomize", command=self.c_randomize)
        self.b_randomize.pack(fill=X)
        self.b_uniform = Button(self.botrightframe,
                                  text="Uniform", command=self.c_uniform)
        self.b_uniform.pack(fill=X)
        self.b_distinct = Button(self.botrightframe,
                                  text="Distinct", command=self.c_distinct)
        self.b_distinct.pack(fill=X)
        self.b_demo = Button(self.botrightframe,
                             text="Demo", command=self.c_demo)
        self.b_demo.pack(fill=X)
        self.b_cancel = Button(self.botrightframe,
                               text="Cancel", command=self.c_cancel)
        self.b_cancel.pack(fill=X)
        self.b_cancel.config(state=DISABLED)
        self.b_quit = Button(self.botrightframe,
                             text="Quit", command=self.c_quit)
        self.b_quit.pack(fill=X)

    def resize(self, newsize):
        if self.busy:
            self.master.bell()
            return
        self.size = newsize
        self.array.setdata(range(1, self.size+1))

    def c_qsort(self):
        self.run(quicksort)

    def c_isort(self):
        self.run(insertionsort)

    def c_ssort(self):
        self.run(selectionsort)

    def c_bsort(self):
        self.run(bubblesort)

    def c_demo(self):
        self.run(demosort)

    def c_randomize(self):
        self.run(randomize)

    def c_uniform(self):
        self.run(uniform)

    def c_distinct(self):
        self.run(distinct)

    def run(self, func):
        if self.busy:
            self.master.bell()
            return
        self.busy = 1
        self.array.setspeed(self.v_speed.get())
        self.b_cancel.config(state=NORMAL)
        try:
            func(self.array)
        except Array.Cancelled:
            pass
        self.b_cancel.config(state=DISABLED)
        self.busy = 0

    def c_cancel(self):
        if not self.busy:
            self.master.bell()
            return
        self.array.cancel()

    def c_step(self):
        if not self.busy:
            self.master.bell()
            return
        self.v_speed.set("single-step")
        self.array.setspeed("single-step")
        self.array.step()

    def c_quit(self):
        if self.busy:
            self.array.cancel()
        self.master.after_idle(self.master.quit)


# Main program -- for stand-alone operation outside Grail

def main():
    root = Tk()
    demo = SortDemo(root)
    root.protocol('WM_DELETE_WINDOW', demo.c_quit)
    root.mainloop()

if __name__ == '__main__':
    main()
PKb1�Z�h��tkinter/guido/imagedraw.pycnu�[����
��^c@s9dZddlTddlZd�Zd�Ze�dS(sDraw on top of an imagei����(t*NcCs�tjd}t�}td|�}|j�|j�}}t|d|d|�}|jdddtd|�|j	�|j
dt�|j�dS(	Nitfiletwidththeightitanchortimages
<Button-1>(
tsystargvtTkt
PhotoImageRRtCanvastcreate_imagetNWtpacktbindtblobtmainloop(tfilenametroottimgtwthtcanv((s4/usr/lib64/python2.7/Demo/tkinter/guido/imagedraw.pytmains
	
c	CsX|j|j}}|j}d}|j||||||||dddd�dS(Nitfilltredtoutlinet(txtytwidgettcreate_oval(teventRRRtr((s4/usr/lib64/python2.7/Demo/tkinter/guido/imagedraw.pyRs	(t__doc__tTkinterRRR(((s4/usr/lib64/python2.7/Demo/tkinter/guido/imagedraw.pyt<module>s

		PKb1�ZXj|0J|J|tkinter/guido/ss1.pyonu�[����
��^c@s�dZddlZddlZddlZddlZddlZddlmZdddf\ZZ	Z
d�Zd�Zd	�Z
iee6ee	6e
e
6Zid
e6de	6de
6Zied
6e	d6e
d6Zid
e6de	6de
6Zd�Zdfd��YZdfd��YZdfd��YZdefd��YZdefd��YZdefd��YZd�Zd�Zd�Zd�ZddlZd fd!��YZd"�Z d#�Z!e"d$kr�e!�ndS(%sSS1 -- a spreadsheet.i����N(texpattLEFTtCENTERtRIGHTcCs
|j|�S(N(tljust(txtn((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRscCs
|j|�S(N(tcenter(RR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRscCs
|j|�S(N(trjust(RR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRstleftRtrighttwtecCs4d}x'|D]}|dk	r
||7}q
q
W|S(Ni(tNone(tseqttotalR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytsums

tSheetcBs�eZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZRS(cCsOi|_tj�|_|jjd�}|j|_|j|_t|_dS(Nt__main__(tcellstrexectRExect
add_modulet	cellvaluetcelltmulticellvalueR(tselftm((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt__init__"s	cCs9|j||�}t|d�r1|j|j�S|SdS(Ntrecalc(tgetcellthasattrRR(RRtyR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR*scCs�||kr||}}n||kr8||}}ng}xRt||d�D]=}x4t||d�D]}|j|j||��qlWqRW|S(Ni(trangetappendR(Rtx1ty1tx2ty2RR R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR1s!cCs|jj||f�S(N(Rtget(RRR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR<scCs||j||f<dS(N(R(RRR R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytsetcell?scCs,y|j||f=Wntk
r'nXdS(N(RtKeyError(RRR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt	clearcellDs
cCs1x*|j||||�D]}|j|=qWdS(N(tselectcellsR(RR#R$R%R&txy((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt
clearcellsJscCs|jd|tj|�dS(Ni(R-tsystmaxint(RR$R&((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt	clearrowsNscCs|j|d|tj�dS(Ni(R-R.R/(RR#R%((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytclearcolumnsQscCs�||kr||}}n||kr8||}}ng|jD]P\}}||koe|knrB||ko�|knrB||f^qBS(N(R(RR#R$R%R&RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR+TscCs#|dkr|dkrdS||kr8||}}n||krT||}}ni}x�|jD]�\}}	|j||	f}
t|
d�r�|
j||||||�}
n||ko�|knr||	ko�|knr||7}|	|7}	n|
|||	f<qdW||_dS(Nitrenumber(RRR2(RR#R$R%R&tdxtdytnewRR R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt	movecells\s !8

cCs&|jd|tjtjd|�dS(Ni(R6R.R/(RR R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt
insertrowsoscCs^||kr||}}n|j||�|jd|dtjtjd||d�dS(Nii(R0R6R.R/(RR$R&((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt
deleterowssscCs&|j|dtjtj|d�dS(Ni(R6R.R/(RRR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt
insertcolumnsyscCs^||kr||}}n|j||�|j|ddtjtj||dd�dS(Nii(R-R6R.R/(RR#R%((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt
deletecolumns}scCsLd}}x5|jD]*\}}t||�}t||�}qW||fS(Ni(Rtmax(RtmaxxtmaxyRR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytgetsize�s

cCs:x3|jj�D]"}t|d�r|j�qqWdS(Ntreset(Rt
itervaluesRR?(RR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR?�scCsJ|j�x9|jj�D](}t|d�r|j|j�qqWdS(NR(R?RR@RRR(RR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�s
cCs�|j�\}}|d|d}}dg|}i}xZtd|�D]I}t|�tf||df<\}}	t||t|��||<qJWxZtd|�D]I}
t|
�tf|d|
f<\}}	t|dt|��|d<q�Wx�|jj�D]�\\}}
}|dks|
dkr4qnt	|d�rV|j
|j�nt	|d�rz|j�\}}	n*t|�}t
|t�r�t}	nt}	||	f|||
f<t||t|��||<qWd}x9t|�D]+}|r|d7}n|d||7}q�Wx�t|�D]�}
d}
xot|�D]a}|j||
f�pgdtf\}}	t|	|||�}|
r�|
d7}
n|
|7}
qCW|
GH|
dkr*|GHq*q*WdS(	NiiRtformattt+t-t|(R>R!tcolnum2nameRR;tlentstrRt	iteritemsRRRRAt
isinstanceRR'talign2action(RR<R=twidththeighttcolwidthtfullRttextt	alignmentR Rtseptline((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytdisplay�sP
&!&!"	!
'
cCs�dg}xn|jj�D]]\\}}}t|d�rI|j�}ndtj|�}|jd|||f�qW|jd�dj|�S(Ns
<spreadsheet>txmls<value>%s</value>s%<cell row="%s" col="%s">
  %s
</cell>s</spreadsheet>s
(RRIRRUtcgitescapeR"tjoin(RtoutRR Rtcellxml((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRU�s	"	
cCs\|j�}t|d�}|j|�|rN|jd�rN|jd�n|j�dS(NRs
(RUtopentwritetendswithtclose(RtfilenameRPtf((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytsave�s
cCs0t|d�}t|�j|�|j�dS(Ntr(R[tSheetParsert	parsefileR^(RR_R`((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytload�s(t__name__t
__module__RRRRR(R*R-R0R1R+R6R7R8R9R:R>R?RRTRURaRe(((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR s,																			2		RccBs�eZd�Zd�Zd�Zd�Zd�Zd�Zd�ZeZ	d�Z
d�Zd	�Zd
�Z
d�Zd�Zd
�Zd�ZRS(cCs
||_dS(N(tsheet(RRh((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�scCsAtj�}|j|_|j|_|j|_|j|�dS(N(	RtParserCreatetstartelementtStartElementHandlert
endelementtEndElementHandlertdatatCharacterDataHandlert	ParseFile(RR`tparser((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRd�s
cCsct|d|d�}|rVx*|j�D]\}}t|�||<q)W||�ng|_dS(Ntstart_(tgetattrR
RIRHttexts(Rttagtattrstmethodtkeytvalue((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRj�s
cCs t|�}|jj|�dS(N(RHRtR"(RRP((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRn�scCs9t|d|d�}|r5|dj|j��ndS(Ntend_RB(RsR
RXRt(RRuRw((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRl�scCs4t|jd��|_t|jd��|_dS(Ntrowtcol(tintR'R R(RRv((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt
start_cell�scCs1|jd�|_tj|jd��|_dS(NRAtalign(R'tfmtt	xml2alignRQ(RRv((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytstart_valuescCs*yt|�|_Wnd|_nXdS(N(R}RyR
(RRP((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytend_intscCs*yt|�|_Wnd|_nXdS(N(tlongRyR
(RRP((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytend_long
scCs*yt|�|_Wnd|_nXdS(N(tfloatRyR
(RRP((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt
end_doublescCs*yt|�|_Wnd|_nXdS(N(tcomplexRyR
(RRP((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytend_complexscCs$y
||_Wnd|_nXdS(N(RyR
(RRP((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt
end_strings
cCs�t|jt�r!|j|_nit|jt�r`t|j|jpHd|jpTt�|_n*t	|j|jpud|jp�t
�|_dS(Ns%s(RJRytBaseCellRRHt
StringCellR�RQRtNumericCellR(RRP((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt	end_value%s		cCs+t||jpd|jpt�|_dS(Ns%s(tFormulaCellR�RQRR(RRP((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytend_formula1scCs#|jj|j|j|j�dS(N(RhR(RR R(RRP((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytend_cell6s(RfRgRRdRjRnRlR~R�t
start_formulaR�R�R�R�R�R�R�R�(((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRc�s 														R�cBseZdZRS(N(RfRgR
R(((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�9s	R�cBsVeZded�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
RS(	s%scCs||_||_||_dS(N(RyR�RQ(RRyR�RQ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRGs		cCs|jS(N(Ry(RR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRNscCs:y|j|j}Wnt|j�}nX||jfS(N(R�RyRHRQ(RRP((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRAQs
cCs=t|dt|j�j�}dt|j|j|�fS(Nt_xml_s(<value align="%s" format="%s">%s</value>(RsttypeRyRft	align2xmlRQR�(RRw((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRUXs

cCs8d|jkodknr*d|jS|j�SdS(Niis
<int>%s</int>I�i�I�(Ryt	_xml_long(R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt_xml_int_scCsd|jS(Ns<long>%s</long>(Ry(R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�escCsdt|j�S(Ns<double>%s</double>(treprRy(R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt
_xml_floathscCsdt|j�S(Ns<complex>%s</double>(R�Ry(R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt_xml_complexks(RfRgRRRRARUR�R�R�R�(((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�Es						R�cBs2eZded�Zd�Zd�Zd�ZRS(s%scCs||_||_||_dS(N(RPR�RQ(RRPR�RQ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRps		cCs|jS(N(RP(RR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRwscCs|j|jfS(N(RPRQ(R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRAzscCs-d}|t|j|jtj|j�fS(Ns9<value align="%s" format="%s"><string>%s</string></value>(R�RQR�RVRWRP(Rts((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRU}s

(RfRgRRRRARU(((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�ns		R�cBsDeZded�Zd�Zd�Zd�Zd�Zd�ZRS(s%scCs;||_t|j�|_||_||_|j�dS(N(tformulat	translatet
translatedR�RQR?(RR�R�RQ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�s
			cCs
d|_dS(N(R
Ry(R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR?�scCs�|jdkr�y4|jddt|j��|jd�|_Wq�tj�d}t|d�rw|j	|_q�t
|�|_q�Xn|jS(Ns from __future__ import division
s__value__ = eval(%s)t	__value__iRf(RyR
tr_execR�R�tr_evalR.texc_infoRRfRH(RRtexc((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�s	cCs:y|j|j}Wnt|j�}nX||jfS(N(R�RyRHRQ(RRP((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRA�s
cCsdt|j|j|jfS(Ns,<formula align="%s" format="%s">%s</formula>(R�RQR�R�(R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRU�s
cCs�g}x�tjd|j�D]�}tjd|�}	|	dk	r�|	j�\}
}t|
�}t|�}
||ko�|knr�||
ko�|knr�t|||
|�}q�n|j	|�qWt
dj|�|j|j
�S(Ns(\w+)s^([A-Z]+)([1-9][0-9]*)$RB(tretsplitR�tmatchR
tgroupstcolname2numR}tcellnameR"R�RXR�RQ(RR#R$R%R&R3R4RYtpartRtsxtsyRR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR2�s8(	RfRgRRR?RRARUR2(((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��s				c	Cs�g}x�tjd|�D]�}tjd|�}|dkrM|j|�q|j�\}}}}t|�}|dkr�d||f}n"t|�}d||||f}|j|�qWdj|�S(s�Translate a formula containing fancy cell names to valid Python code.

    Examples:
        B4 -> cell(2, 4)
        B4:Z100 -> cells(2, 4, 26, 100)
    s(\w+(?::\w+)?)s2^([A-Z]+)([1-9][0-9]*)(?::([A-Z]+)([1-9][0-9]*))?$scell(%s, %s)scells(%s, %s, %s, %s)RBN(R�R�R�R
R"R�R�RX(	R�RYR�RR#R$R%R&R�((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��scCst|�t|�S(sETranslate a cell coordinate to a fancy cell name (e.g. (1, 1)->'A1').(RFRH(RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��scCsI|j�}d}x0|D](}|dt|�td�d}qW|S(sCTranslate a column name to number (e.g. 'A'->1, 'Z'->26, 'AA'->27).iitAi(tuppertord(R�Rtc((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��s

&cCsJd}x=|rEt|dd�\}}t|td��|}q	W|S(s6Translate a column number to name (e.g. 1->'A', etc.).RBiiR�(tdivmodtchrR�(RR�R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRF�s
	tSheetGUIcBs�eZdZdddd�Zd�Zd�Zd�Zd�Zd	�Zd
�Z	d�Z
d�Zd
�Zd�Z
d�ZeZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZRS(s7Beginnings of a GUI for a spreadsheet.

    TO DO:
    - clear multiple cells
    - Insert, clear, remove rows or columns
    - Show new contents while typing
    - Scroll bars
    - Grow grid when window is grown
    - Proper menus
    - Undo, redo
    - Cut, copy and paste
    - Formatting and alignment
    s
sheet1.xmli
icCs*||_t�|_tjj|�r:|jj|�n|jj�\}}t||�}t||�}t	j	�|_
|j
jd|j�t	j|j
dddd�|_
t	j|j
�|_t	j|j
ddd	|j�|_t	j|j
�|_|jjd
ddd
dd�|j
jd
d�|jjd
d�|jjd
ddd
dd�|jjd|j�|jjd|j�|jjd|j�|jjd|j�|jjd|j�|jjd|j�|j||�d|_d|_ |j!d
d
�|j"�dS(slConstructor.

        Load the sheet from the filename argument.
        Set up the Tk widget tree.
        sSpreadsheet: %sRPtA1tfontt	helveticaitboldtSavetcommandtsidetbottomtexpanditfilltbothR	R
Rs<Return>s<Shift-Return>s<Tab>s<Shift-Tab>s<Delete>s<Escape>N(R�iR�(#R_RRhtostpathtisfileReR>R;tTktroottwm_titletLabeltbeacontEntrytentrytButtonRat
savebuttontFrametcellgridtpacktbindtreturn_eventtshift_return_eventt	tab_eventtshift_tab_eventtdelete_eventtescape_eventtmakegridR
t	currentxytcornerxyt
setcurrenttsync(RR_trowstcolumnsR<R=((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�s<			cCsr|j|jkr>|jdk	r>|jj|j|j�n|jj|j�|j�|jjdd�dS(Nitendtbreak(	R�R�R
RhR-R*R�R�tdelete(Rtevent((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�'s!
cCs#|j\}}|j||�dS(N(R�t
load_entry(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�0scCs�|jj||�}|dkr*d}n1t|t�rId|j}n|j�\}}|jjdd�|jj	d|�|jj
dd�dS(NRBt=iR�(RhRR
RJR�R�RAR�R�tinserttselection_range(RRR RRPRQ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�4s	c
Cs||_||_i|_tj|jdd�}|jdddddd�|jd|j�x�t	d	|d	�D]�}|jj
|d
d�tj|jdt|�dd�}|jd|dddd
�||j|df<||_d|_
|jd|j�|jd|j�|jd|j�|jd|j�qvWx�t	d	|d	�D]�}tj|jdt|�dd�}|jddd|dd
�||jd|f<d|_||_
|jd|j�|jd|j�|jd|j�|jd|j�q[Wx�t	d	|d	�D]�}x�t	d	|d	�D]�}tj|jdddddd�}|jd|d|dd�||j||f<||_||_
|jd|j�|jd|j�|jd|j�|jd|j�qDWq*WdS(s�Helper to create the grid of GUI cells.

        The edge (x==0 or y==0) is filled with labels; the rest is real cells.
        trelieftraisedtcolumniR{tstickytNSWEs<ButtonPress-1>itminsizei@RPtWEs<B1-Motion>s<ButtonRelease-1>s<Shift-Button-1>tsunkentbgtwhitetfgtblackN(R�R�t	gridcellsR�R�R�tgrid_configureR�t	selectallR!tgrid_columnconfigureRFt_SheetGUI__xt_SheetGUI__ytselectcolumntextendcolumnRHt	selectrowt	extendrowtpresstmotiontrelease(RR�R�RRR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�@sN			$		$				cCs*|jdd�|jtjtj�dS(Ni(R�t	setcornerR.R/(RR�((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�rscCs<|j|�\}}|j|d�|j|tj�dS(Ni(twhichxyR�R�R.R/(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�vscCsR|j|�\}}|dkrN|j|jdd�|j|tj�ndS(Nii(R�R�R�R�R.R/(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�{scCs<|j|�\}}|jd|�|jtj|�dS(Ni(R�R�R�R.R/(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��scCsR|j|�\}}|dkrN|jd|jd�|jtj|�ndS(Nii(R�R�R�R�R.R/(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��scCsD|j|�\}}|dkr@|dkr@|j||�ndS(Ni(R�R�(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��scCsD|j|�\}}|dkr@|dkr@|j||�ndS(Ni(R�R�(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��scCsh|jj|j|j�}|dk	rdt|tj�rdy|j|j	fSWqdt
k
r`qdXndS(Ni(ii(R�twinfo_containingtx_rootty_rootR
RJR�R�R�R�tAttributeError(RR�R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��s
cCs|jj|j�dS(N(RhRaR_(R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRa�scCs�|jdk	r|j�n|j�t||�|jd<|j||�|jj�||f|_d|_	|j
j|j�}|dk	r�d|d<ndS(sMake (x, y) the current cell.RPtyellowR�N(R�R
tchange_cellt
clearfocusR�R�R�R�t	focus_setR�R�R'(RRR tgridcell((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��s


	c	Csc|jdks$|j||fkr8|j||�dS|j�||f|_|j\}}|jpo|j\}}||kr�||}}n||kr�||}}nxh|jj�D]W\\}}}||ko�|knr�||ko|knr�d|d<q�q�W|jj|j�}|dk	rId|d<n|j||||�dS(Nt	lightBlueR�R(	R�R
R�RR�R�RIR't	setbeacon(	RRR R#R$R%R&RR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��s$$
"8
cCs#||kodknrD||ko6tjknrDd}n�||fdtjfkr�||krxd|}qd||f}n�||fdtjfkr�||kr�dt|�}qdt|�t|�f}n.t|j�}t|j�}d||f}||jd<dS(Nit:s%ds%d:%ds%ss%s:%sRP(R.R/RFR�R�R�R�(RR#R$R%R&tnametname1tname2((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR	�s;	
cCs�|jdk	r�|j\}}|jp-|j\}}||krR||}}n||krn||}}nxk|jj�D]W\\}}}||ko�|knr~||ko�|knr~d|d<q~q~WndS(NR�R�(R�R
R�R�RI(RR#R$R%R&RR R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�s"8cCs1|j�|j\}}|j||d�dS(sCallback for the Return key.iR�(RR�R�(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��s
cCs:|j�|j\}}|j|td|d��dS(s0Callback for the Return key with Shift modifier.iR�(RR�R�R;(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��s
cCs1|j�|j\}}|j|d|�dS(sCallback for the Tab key.iR�(RR�R�(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��s
cCs:|j�|j\}}|jtd|d�|�dS(s-Callback for the Tab key with Shift modifier.iR�(RR�R�R;(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��s
cCs�|j\}}|jj�}d}|jd�rFt|d�}nGxDtttt	fD]0}y||�}Wn
qYqYXt
|�}PqYW|dkr�|r�t|�}n|dkr�|jj
||�n|jj|||�|j�dS(s+Set the current cell from the entry widget.R�iN(R�R�R'R
t
startswithR�R}R�R�R�R�R�RhR*R(R�(RRR RPRtclsRy((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRs$cCs�|jj�x�|jj�D]�\\}}}|dks|dkrMqn|jj||�}|dkr{d|d<qt|d�r�|j�\}}nt|�t	}}||d<t
||d<qWdS(s(Fill the GUI cells from the sheet cells.iRBRPRAtanchorN(RhRR�RIRR
RRARHRtalign2anchor(RRR RRRPRQ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�s
"

(RfRgt__doc__RR�R�R�R�R�R�R�R�R�R�R�R�R�RaR�R�R	RR�R�R�R�RR�(((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��s4-					2																			cCs�ddl}t�}x�tdd�D]�}x�tdd�D]�}|dkr\t|�}nU|dkrwt|�}n:t|d�}td|�}d||f}t|�}|j|||�q;Wq%W|j�|jd�dS(sBasic non-gui self-test.i����Niis%s*%ss
sheet1.xml(	R�RR!R�R�R�R(RTRa(R�taRR Rtc1tc2R�((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt
test_basic,s	
cCs@tjdrtjd}nd}t|�}|jj�dS(s	GUI test.is
sheet1.xmlN(R.targvR�R�tmainloop(R_tg((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyttest_guiBs

R(#RR�R�R.RVRtxml.parsersRRRRRRRRKR�R�RRRRcR�R�R�R�R�R�R�RFtTkinterR�R�RRRf(((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt<module>s@				�Y)6						�C			PKb1�Z&Y���tkinter/guido/listtree.pycnu�[����
��^c@sWddlZddlZddlTd�Zd�Zd�ZedkrSe�ndS(i����N(t*cCs?t|dd�}|jdddt�t||dd�|S(Ntnametlisttexpanditfillt.i(tListboxtpacktBOTHt	listnodes(tmastertappR((s3/usr/lib64/python2.7/Demo/tkinter/guido/listtree.pytlisttreescCs�|j|dd|�}|jtd||f�|jj|j|dd|��}x%|D]}t||||d�q]WdS(Ntwinfotclasss%s (%s)tchildreni(tsendtinserttENDttkt	splitlistR	(RRtwidgettleveltklassRtc((s3/usr/lib64/python2.7/Demo/tkinter/guido/listtree.pyR	s	
cCs�tjds-tjjd�tjd�ntjd}t�}|jdd�t|dd�}|jdddt	�t
||�}|j�dS(NisUsage: listtree appname
iRtfRR(tsystargvtstderrtwritetexittTktminsizetFrameRRRtmainloop(RRRR((s3/usr/lib64/python2.7/Demo/tkinter/guido/listtree.pytmains

	t__main__(RtstringtTkinterRR	R#t__name__(((s3/usr/lib64/python2.7/Demo/tkinter/guido/listtree.pyt<module>s
		
	PKb1�ZKѴ�Q�Qtkinter/guido/solitaire.pycnu�[����
Afc@sCdZddlZddlZddlTddlmZmZmZmZdefd��YZdZ	dZ
d	Ze	d
eZe
deZ
dZd
ZdZdZdZdZdZdZiZxeefD]Zeee<q�WxeefD]Zeee<q�Wej�Zee�ZdZdZdZdZe dd�Z!ee!�Z"ddge#e$e d
d��dddgZ%dZ&dd0d ��YZ'd!d1d"��YZ(d#e(fd$��YZ)d%�Z*d&e(fd'��YZ+d(e+fd)��YZ,d*e+fd+��YZ-d,d2d-��YZ.d.�Z/e0d/kr?e/�ndS(3s�Solitaire game, much like the one that comes with MS Windows.

Limitations:

- No cute graphical images for the playing cards faces or backs.
- No scoring or timer.
- No undo.
- No option to turn 3 cards at a time.
- No keyboard shortcuts.
- Less fancy animation when you win.
- The determination of which stack you drag to is more relaxed.

Apology:

I'm not much of a card player, so my terminology in these comments may
at times be a little unusual.  If you have suggestions, please let me
know!

i����N(t*(t	Rectanglet
CanvasTexttGrouptWindowRcBseZddd�ZRS(cCs|jj|j||�S(N(tcanvasttag_bindtid(tselftsequencetcommand((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytbind%sN(t__name__t
__module__tNoneR(((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR$sidi�i
iiis#070tHearttDiamondtClubtSpadetredtblackiiii
ittAtJtQtKitCardcBsMeZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	RS(s�A playing card.

    A card doesn't record to which stack it belongs; only the stack
    records this (it turns out that we always know this from the
    context, and this saves a ``double update'' with potential for
    inconsistencies).

    Public methods:

    moveto(x, y) -- move the card to an absolute position
    moveby(dx, dy) -- move the card by a relative offset
    tkraise() -- raise the card to the top of its stack
    showface(), showback() -- turn the card face up or down & raise it

    Public read-only instance variables:

    suit, value, color -- the card's suit, value and color
    face_shown -- true when the card is shown face up, else false

    Semi-public read-only instance variables (XXX should be made
    private):

    group -- the Canvas.Group representing the card
    x, y -- the position of the card's top left corner

    Private instance variables:

    __back, __rect, __text -- the canvas items making up the card

    (To show the card face up, the text item is placed in front of
    rect and the back is placed behind it.  To show it face down, this
    is reversed.  The card is created face down.)

    c
Cs||_||_t||_d|_d|_|_t|�|_dt	||f}t
|tdddtd|jd|�|_
|jj|j
�t|ddttdddd	�|_|jj|j�t|ttttttdddd
�|_|jj|j�dS(sCard constructor.

        Arguments are the card's suit and value, and the canvas widget.

        The card is created at position (0, 0), with its face down
        (adding it to a stack will position it according to that
        stack's rules).

        is%s  %sitanchortfillttexttoutlineRtwhitetblueN(tsuittvaluetCOLORtcolort
face_showntxtyRtgrouptVALNAMESRt	CARDWIDTHtNt_Card__texttaddtag_withtagRt
CARDHEIGHTt_Card__recttMARGINt_Card__back(RR!R"RR((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyt__init__�s"
		
	cCsd|j|jfS(s+Return a string for debug print statements.sCard(%r, %r)(R!R"(R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyt__repr__�scCs"|j||j||j�dS(s*Move the card to absolute position (x, y).N(tmovebyR&R'(RR&R'((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytmoveto�scCs7|j||_|j||_|jj||�dS(sMove the card by (dx, dy).N(R&R'R(tmove(Rtdxtdy((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR4�scCs|jj�dS(s5Raise the card above all other objects in its canvas.N(R(ttkraise(R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR9�scCs1|j�|jj�|jj�d|_dS(sTurn the card's face up.iN(R9R/R,R%(R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytshowface�s


cCs1|j�|jj�|jj�d|_dS(sTurn the card's face down.iN(R9R/R1R%(R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytshowback�s


(
RR
t__doc__R2R3R5R4R9R:R;(((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRss#	 					tStackcBs�eZdZdd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
d�Zd�Zd
�Zd�Zd�ZdZd�Zd�Zd�ZRS(s�A generic stack of cards.

    This is used as a base class for all other stacks (e.g. the deck,
    the suit stacks, and the row stacks).

    Public methods:

    add(card) -- add a card to the stack
    delete(card) -- delete a card from the stack
    showtop() -- show the top card (if any) face up
    deal() -- delete and return the top card, or None if empty

    Method that subclasses may override:

    position(card) -- move the card to its proper (x, y) position

        The default position() method places all cards at the stack's
        own (x, y) position.

    userclickhandler(), userdoubleclickhandler() -- called to do
    subclass specific things on single and double clicks

        The default user (single) click handler shows the top card
        face up.  The default user double click handler calls the user
        single click handler.

    usermovehandler(cards) -- called to complete a subpile move

        The default user move handler moves all moved cards back to
        their original position (by calling the position() method).

    Private methods:

    clickhandler(event), doubleclickhandler(event),
    motionhandler(event), releasehandler(event) -- event handlers

        The default event handlers turn the top card of the stack with
        its face up on a (single or double) click, and also support
        moving a subpile around.

    startmoving(event) -- begin a move operation
    finishmoving() -- finish a move operation

    cCs�||_||_||_g|_t|jj�|_|jjd|j�|jjd|j	�|jjd|j
�|jjd|j�|j�dS(sStack constructor.

        Arguments are the stack's nominal x and y position (the top
        left corner of the first card placed in the stack), and the
        game object (which is used to get the canvas; subclasses use
        the game object to find other stacks).

        s<1>s
<Double-1>s<B1-Motion>s<ButtonRelease-1>N(
R&R'tgametcardsRRR(Rtclickhandlertdoubleclickhandlert
motionhandlertreleasehandlert
makebottom(RR&R'R>((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR2s					cCsdS(N((R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRDscCsd|jj|j|jfS(s+Return a string for debug print statements.s
%s(%d, %d)(t	__class__RR&R'(R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR3scCs>|jj|�|j�|j|�|jj|j�dS(N(R?tappendR9tpositionR(R-(Rtcard((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytadd%s

cCs'|jj|�|jj|j�dS(N(R?tremoveR(tdtag(RRH((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytdelete+scCs!|jr|jdj�ndS(Ni����(R?R:(R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytshowtop/s	cCs+|js
dS|jd}|j|�|S(Ni����(R?RRL(RRH((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytdeal3s
	

cCs|j|j|j�dS(N(R5R&R'(RRH((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRG<scCs|j�dS(N(RM(R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytuserclickhandler?scCs|j�dS(N(RO(R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytuserdoubleclickhandlerBscCs"x|D]}|j|�qWdS(N(RG(RR?RH((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytusermovehandlerEs
cCs%|j�|j�|j|�dS(N(tfinishmovingROtstartmoving(Rtevent((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR@Ks

cCs|j|�dS(N(t
keepmoving(RRT((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRBPscCs|j|�|j�dS(N(RURR(RRT((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRCSs
cCs%|j�|j�|j|�dS(N(RRRPRS(RRT((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRAWs

cCs�d|_|jjjd�}xDtt|j��D])}|j|}|jj	|kr4Pq4q4WdS|j
srdS|j||_|j|_|j
|_x|jD]}|j�q�WdS(Ntcurrent(RtmovingR>RtgettagstrangetlenR?R(ttagR%R&tlastxR'tlastyR9(RRTttagstiRH((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRS`s	
	cCs||js
dS|j|j}|j|j}|j|_|j|_|sQ|rxx$|jD]}|j||�q[WndS(N(RWR&R\R'R]R4(RRTR7R8RH((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRUqs	cCs,|j}d|_|r(|j|�ndS(N(RWRRQ(RR?((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRR|s		N(RR
R<RR2RDR3RIRLRMRNRGRORPRQR@RBRCRARWRSRURR(((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR=�s(-																	tDeckcBs2eZdZd�Zd�Zd�Zd�ZRS(s7The deck is a stack with support for shuffling.

    New methods:

    fill() -- create the playing cards
    shuffle() -- shuffle the playing cards

    A single click moves the top card to the game's open deck and
    moves it face up; if we're out of cards, it moves the open deck
    back to the deck.

    c
CsRt|jj|j|j|jt|jtdddt�}|jj	|�dS(NRRR(
RR>RR&R'R*R.t
BACKGROUNDR(R-(Rtbottom((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRD�s
cCsEx>tD]6}x-tD]%}|jt|||jj��qWqWdS(N(tALLSUITSt	ALLVALUESRIRR>R(RR!R"((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR�s

cCsMt|j�}g}x(t|�D]}|j|j|�q"W||_dS(N(RZR?trandpermRF(RtntnewcardsR_((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytshuffle�s
cCsv|jj}|j�}|sUxQ|j�}|s7Pn|j|�|j�q!Wn|jjj|�|j�dS(N(R>topendeckRNRIR;R:(RRiRH((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRO�s
(RR
R<RDRRhRO(((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR`�s

			cCsLt|�}g}x3|rGtj|�}|j|�|j|�qW|S(s4Function returning a random permutation of range(n).(RYtrandomtchoiceRFRJ(RftrR&R_((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRe�s	
t	OpenStackcBs#eZd�Zd�Zd�ZRS(cCsdS(Ni((RR?((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyt
acceptable�scCs�|d}|jj|�}|s?||ks?|j|�rRtj||�n8x(|D] }|j|�|j|�qYW|jj�dS(Ni(R>tcloseststackRnR=RQRLRItwincheck(RR?RHtstack((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRQ�s
#

cCs�|js
dS|jd}|js1|j�dSxQ|jjD]C}|j|g�r>|j|�|j|�|jj�Pq>q>WdS(Ni����(	R?R%ROR>tsuitsRnRLRIRp(RRHts((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRP�s	
	



(RR
RnRQRP(((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRm�s		t	SuitStackcBs,eZd�Zd�Zd�Zd�ZRS(c
CsBt|jj|j|j|jt|jtdddd�}dS(NRRRR(RR>RR&R'R*R.(RRb((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRD�scCsdS(N((R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRO�scCsdS(N((R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRP�scCsit|�dkrdS|d}|js6|jtkS|jd}|j|jkoh|j|jdkS(Niii����(RZR?R"tACER!(RR?RHttopcard((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRn�s
	

(RR
RDRORPRn(((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRt�s			tRowStackcBseZd�Zd�ZRS(cCs`|d}|js |jtkS|jd}|js:dS|j|jko_|j|jdkS(Nii����i(R?R"tKINGR%R$(RR?RHRv((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRn�s
	

	cCsh|j}xE|jD]:}||kr)Pn|jrC|dt}q|t}qW|j|j|�dS(Ni(R'R?R%R0tOFFSETR5R&(RRHR'tc((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRGs		(RR
RnRG(((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRw�s		t	SolitairecBsGeZd�Zd�Zd�Zd�Zd�Zd�Zd�ZRS(cCs�||_t|jdtdddttddtdt�|_|jjdt	d	t
�t|jd
ddddtdd
d|j�|_
t|jtdtdd|j
dt�t}t}t|||�|_|t}t|||�|_|t}g|_x:tt�D],}|t}|jjt|||��qWt}|t}g|_x:tt�D],}|jjt|||��|t}qoW|jg|j|j|_|jj�|j�dS(Nt
backgroundthighlightthicknessitwidththeightiiRtexpandRtDealtactivebackgroundtgreenR
twindowR(tmastertCanvasRatNROWStXSPACINGtYSPACINGR0RtpacktBOTHtTRUEtButtonRNt
dealbuttonRtSWR`tdeckRmRiRrRYtNSUITSRFRttrowsRwt
openstacksR(RR�R&R'R_((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR2sD	


	
 
	
cCsEx*|jD]}t|j�tkr
dSq
W|j�|j�dS(N(RrRZR?tNVALUEStwinRN(RRs((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRp=s

cCsgg}x|jD]}||j}qWx9|rbtj|�}|j|�|j||j�q*WdS(sStupid animation when you win.N(R�R?RjRkRJtanimatedmovetoR�(RR?RsRH((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR�Ds	
cCsgx`tddd�D]L}|j|j||j|j|}}|j||�|jj�qWdS(Ni
ii����(RYR&R'R4R�tupdate_idletasks(RRHtdestR_R7R8((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR�Ns)cCsed}d}xR|jD]G}|j|jd|j|jd}||kr|}|}qqW|S(Ni�ɚ;i(RR�R&R'(RRHtclosesttcdistRqtdist((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRoTs&
cCs�|j�|jj�xHtt�D]:}x1|j|D]"}|jj�}|j|�q8Wq$Wx|jD]}|j�qlWdS(N(	tresetR�RhRYR�R�RNRIRM(RR_RlRH((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRN`s

cCsOxH|jD]=}x4|j�}|s)Pn|jj|�|j�qWq
WdS(N(R�RNR�RIR;(RRqRH((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR�js(	RR
R2RpR�R�RoRNR�(((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR{
s	.		
			
cCs6t�}t|�}|jd|j�|j�dS(NtWM_DELETE_WINDOW(tTkR{tprotocoltquittmainloop(trootR>((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytmainvs	t__main__((((1R<tmathRjtTkinterR�RRRRR*R.R0R�R�RyRatHEARTStDIAMONDStCLUBStSPADEStREDtBLACKR#RstkeysRcRZR�RutJACKtQUEENRxRYRdR�tmaptstrR)R�RR=R`ReRmRtRwR{R�R(((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyt<module>sX
"
/f�1	i	PKb1�Z��sl�~�~tkinter/guido/ss1.pycnu�[����
��^c@s�dZddlZddlZddlZddlZddlZddlmZdddf\ZZ	Z
d�Zd�Zd	�Z
iee6ee	6e
e
6Zid
e6de	6de
6Zied
6e	d6e
d6Zid
e6de	6de
6Zd�Zdfd��YZdfd��YZdfd��YZdefd��YZdefd��YZdefd��YZd�Zd�Zd�Zd�ZddlZd fd!��YZd"�Z d#�Z!e"d$kr�e!�ndS(%sSS1 -- a spreadsheet.i����N(texpattLEFTtCENTERtRIGHTcCs
|j|�S(N(tljust(txtn((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRscCs
|j|�S(N(tcenter(RR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRscCs
|j|�S(N(trjust(RR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRstleftRtrighttwtecCs4d}x'|D]}|dk	r
||7}q
q
W|S(Ni(tNone(tseqttotalR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytsums

tSheetcBs�eZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZRS(cCsOi|_tj�|_|jjd�}|j|_|j|_t|_dS(Nt__main__(tcellstrexectRExect
add_modulet	cellvaluetcelltmulticellvalueR(tselftm((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt__init__"s	cCs9|j||�}t|d�r1|j|j�S|SdS(Ntrecalc(tgetcellthasattrRR(RRtyR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR*scCs�||kr||}}n||kr8||}}ng}xRt||d�D]=}x4t||d�D]}|j|j||��qlWqRW|S(Ni(trangetappendR(Rtx1ty1tx2ty2RR R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR1s!cCs|jj||f�S(N(Rtget(RRR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR<scCsJ|dkr|dkst�t|t�s3t�||j||f<dS(Ni(tAssertionErrort
isinstancetBaseCellR(RRR R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytsetcell?scCs,y|j||f=Wntk
r'nXdS(N(RtKeyError(RRR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt	clearcellDs
cCs1x*|j||||�D]}|j|=qWdS(N(tselectcellsR(RR#R$R%R&txy((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt
clearcellsJscCs|jd|tj|�dS(Ni(R0tsystmaxint(RR$R&((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt	clearrowsNscCs|j|d|tj�dS(Ni(R0R1R2(RR#R%((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytclearcolumnsQscCs�||kr||}}n||kr8||}}ng|jD]P\}}||koe|knrB||ko�|knrB||f^qBS(N(R(RR#R$R%R&RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR.TscCsI|dkr|dkrdS||kr8||}}n||krT||}}n||dkrt||dkszt�i}x�|jD]�\}}	|j||	f}
t|
d�r�|
j||||||�}
n||ko�|knr(||	ko|knr(||7}|	|7}	n|
|||	f<q�W||_dS(Nitrenumber(R(RRR5(RR#R$R%R&tdxtdytnewRR R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt	movecells\s"&!8

cCs8|dkst�|jd|tjtjd|�dS(Ni(R(R9R1R2(RR R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt
insertrowsoscCs^||kr||}}n|j||�|jd|dtjtjd||d�dS(Nii(R3R9R1R2(RR$R&((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt
deleterowssscCs8|dkst�|j|dtjtj|d�dS(Ni(R(R9R1R2(RRR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt
insertcolumnsyscCs^||kr||}}n|j||�|j|ddtjtj||dd�dS(Nii(R0R9R1R2(RR#R%((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt
deletecolumns}scCsLd}}x5|jD]*\}}t||�}t||�}qW||fS(Ni(Rtmax(RtmaxxtmaxyRR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytgetsize�s

cCs:x3|jj�D]"}t|d�r|j�qqWdS(Ntreset(Rt
itervaluesRRB(RR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRB�scCsJ|j�x9|jj�D](}t|d�r|j|j�qqWdS(NR(RBRRCRRR(RR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�s
cCs�|j�\}}|d|d}}dg|}i}xZtd|�D]I}t|�tf||df<\}}	t||t|��||<qJWxZtd|�D]I}
t|
�tf|d|
f<\}}	t|dt|��|d<q�Wx|jj�D]\\}}
}|dks|
dkr4qnt	|d�rV|j
|j�nt	|d�r�|j�\}}	t
|t�s�t�|	tttfks�t�n*t|�}t
|t�r�t}	nt}	||	f|||
f<t||t|��||<qWd}x9t|�D]+}|r7|d7}n|d||7}qWx�t|�D]�}
d}
xot|�D]a}|j||
f�p�dtf\}}	t|	|||�}|
r�|
d7}
n|
|7}
qsW|
GH|
dkrZ|GHqZqZWdS(	NiiRtformattt+t-t|(RAR!tcolnum2nameRR>tlentstrRt	iteritemsRRRRDR)R(RRR'talign2action(RR?R@twidththeighttcolwidthtfullRttextt	alignmentR Rtseptline((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytdisplay�sR
&!&!"	!
'
cCs�dg}xn|jj�D]]\\}}}t|d�rI|j�}ndtj|�}|jd|||f�qW|jd�dj|�S(Ns
<spreadsheet>txmls<value>%s</value>s%<cell row="%s" col="%s">
  %s
</cell>s</spreadsheet>s
(RRLRRWtcgitescapeR"tjoin(RtoutRR Rtcellxml((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRW�s	"	
cCs\|j�}t|d�}|j|�|rN|jd�rN|jd�n|j�dS(NRs
(RWtopentwritetendswithtclose(RtfilenameRRtf((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytsave�s
cCs0t|d�}t|�j|�|j�dS(Ntr(R]tSheetParsert	parsefileR`(RRaRb((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytload�s(t__name__t
__module__RRRRR+R-R0R3R4R.R9R:R;R<R=RARBRRVRWRcRg(((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR s,																			2		RecBs�eZd�Zd�Zd�Zd�Zd�Zd�Zd�ZeZ	d�Z
d�Zd	�Zd
�Z
d�Zd�Zd
�Zd�ZRS(cCs
||_dS(N(tsheet(RRj((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�scCsAtj�}|j|_|j|_|j|_|j|�dS(N(	RtParserCreatetstartelementtStartElementHandlert
endelementtEndElementHandlertdatatCharacterDataHandlert	ParseFile(RRbtparser((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRf�s
cCsct|d|d�}|rVx*|j�D]\}}t|�||<q)W||�ng|_dS(Ntstart_(tgetattrR
RLRKttexts(Rttagtattrstmethodtkeytvalue((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRl�s
cCs t|�}|jj|�dS(N(RKRvR"(RRR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRp�scCs9t|d|d�}|r5|dj|j��ndS(Ntend_RE(RuR
RZRv(RRwRy((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRn�scCs4t|jd��|_t|jd��|_dS(Ntrowtcol(tintR'R R(RRx((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt
start_cell�scCs1|jd�|_tj|jd��|_dS(NRDtalign(R'tfmtt	xml2alignRS(RRx((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytstart_valuescCs*yt|�|_Wnd|_nXdS(N(RR{R
(RRR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytend_intscCs*yt|�|_Wnd|_nXdS(N(tlongR{R
(RRR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytend_long
scCs*yt|�|_Wnd|_nXdS(N(tfloatR{R
(RRR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt
end_doublescCs*yt|�|_Wnd|_nXdS(N(tcomplexR{R
(RRR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytend_complexscCs$y
||_Wnd|_nXdS(N(R{R
(RRR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt
end_strings
cCs�t|jt�r!|j|_nit|jt�r`t|j|jpHd|jpTt�|_n*t	|j|jpud|jp�t
�|_dS(Ns%s(R)R{R*RRKt
StringCellR�RSRtNumericCellR(RRR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt	end_value%s		cCs+t||jpd|jpt�|_dS(Ns%s(tFormulaCellR�RSRR(RRR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytend_formula1scCs#|jj|j|j|j�dS(N(RjR+RR R(RRR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pytend_cell6s(RhRiRRfRlRpRnR�R�t
start_formulaR�R�R�R�R�R�R�R�(((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRe�s 														R*cBseZdZRS(N(RhRiR
R(((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR*9s	R�cBsVeZded�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
RS(	s%scCs[t|ttttf�s!t�|tttfks<t�||_	||_
||_dS(N(R)RR�R�R�R(RRRR{R�RS(RR{R�RS((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRGs
!		cCs|jS(N(R{(RR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRNscCs:y|j|j}Wnt|j�}nX||jfS(N(R�R{RKRS(RRR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRDQs
cCs=t|dt|j�j�}dt|j|j|�fS(Nt_xml_s(<value align="%s" format="%s">%s</value>(RuttypeR{Rht	align2xmlRSR�(RRy((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRWXs

cCs8d|jkodknr*d|jS|j�SdS(Niis
<int>%s</int>I�i�I�(R{t	_xml_long(R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt_xml_int_scCsd|jS(Ns<long>%s</long>(R{(R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�escCsdt|j�S(Ns<double>%s</double>(treprR{(R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt
_xml_floathscCsdt|j�S(Ns<complex>%s</double>(R�R{(R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt_xml_complexks(RhRiRRRRDRWR�R�R�R�(((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�Es						R�cBs2eZded�Zd�Zd�Zd�ZRS(s%scCsUt|ttf�st�|tttfks6t�||_||_||_	dS(N(
R)RKtunicodeR(RRRRRR�RS(RRRR�RS((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRps
		cCs|jS(N(RR(RR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRwscCs|j|jfS(N(RRRS(R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRDzscCs-d}|t|j|jtj|j�fS(Ns9<value align="%s" format="%s"><string>%s</string></value>(R�RSR�RXRYRR(Rts((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRW}s

(RhRiRRRRDRW(((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�ns		R�cBsDeZded�Zd�Zd�Zd�Zd�Zd�ZRS(s%scCsV|tttfkst�||_t|j�|_||_||_|j	�dS(N(
RRRR(tformulat	translatet
translatedR�RSRB(RR�R�RS((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�s			cCs
d|_dS(N(R
R{(R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRB�scCs�|jdkr�y4|jddt|j��|jd�|_Wq�tj�d}t|d�rw|j	|_q�t
|�|_q�Xn|jS(Ns from __future__ import division
s__value__ = eval(%s)t	__value__iRh(R{R
tr_execR�R�tr_evalR1texc_infoRRhRK(RRtexc((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�s	cCs:y|j|j}Wnt|j�}nX||jfS(N(R�R{RKRS(RRR((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRD�s
cCsdt|j|j|jfS(Ns,<formula align="%s" format="%s">%s</formula>(R�RSR�R�(R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRW�s
cCs�g}x�tjd|j�D]�}tjd|�}	|	dk	r�|	j�\}
}t|
�}t|�}
||ko�|knr�||
ko�|knr�t|||
|�}q�n|j	|�qWt
dj|�|j|j
�S(Ns(\w+)s^([A-Z]+)([1-9][0-9]*)$RE(tretsplitR�tmatchR
tgroupstcolname2numRtcellnameR"R�RZR�RS(RR#R$R%R&R6R7R[tpartRtsxtsyRR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR5�s8(	RhRiRRRBRRDRWR5(((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��s				c	Cs�g}x�tjd|�D]�}tjd|�}|dkrM|j|�q|j�\}}}}t|�}|dkr�d||f}n"t|�}d||||f}|j|�qWdj|�S(s�Translate a formula containing fancy cell names to valid Python code.

    Examples:
        B4 -> cell(2, 4)
        B4:Z100 -> cells(2, 4, 26, 100)
    s(\w+(?::\w+)?)s2^([A-Z]+)([1-9][0-9]*)(?::([A-Z]+)([1-9][0-9]*))?$scell(%s, %s)scells(%s, %s, %s, %s)REN(R�R�R�R
R"R�R�RZ(	R�R[R�RR#R$R%R&R�((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��scCs&|dkst�t|�t|�S(sETranslate a cell coordinate to a fancy cell name (e.g. (1, 1)->'A1').i(R(RIRK(RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��scCsk|j�}d}xR|D]J}d|ko6dknsAt�|dt|�td�d}qW|S(sCTranslate a column name to number (e.g. 'A'->1, 'Z'->26, 'AA'->27).itAtZii(tupperR(tord(R�Rtc((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��s
"&cCs\|dkst�d}x=|rWt|dd�\}}t|td��|}qW|S(s6Translate a column number to name (e.g. 1->'A', etc.).iREiiR�(R(tdivmodtchrR�(RR�R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRI�s	tSheetGUIcBs�eZdZdddd�Zd�Zd�Zd�Zd�Zd	�Zd
�Z	d�Z
d�Zd
�Zd�Z
d�ZeZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZRS(s7Beginnings of a GUI for a spreadsheet.

    TO DO:
    - clear multiple cells
    - Insert, clear, remove rows or columns
    - Show new contents while typing
    - Scroll bars
    - Grow grid when window is grown
    - Proper menus
    - Undo, redo
    - Cut, copy and paste
    - Formatting and alignment
    s
sheet1.xmli
icCs*||_t�|_tjj|�r:|jj|�n|jj�\}}t||�}t||�}t	j	�|_
|j
jd|j�t	j|j
dddd�|_
t	j|j
�|_t	j|j
ddd	|j�|_t	j|j
�|_|jjd
ddd
dd�|j
jd
d�|jjd
d�|jjd
ddd
dd�|jjd|j�|jjd|j�|jjd|j�|jjd|j�|jjd|j�|jjd|j�|j||�d|_d|_ |j!d
d
�|j"�dS(slConstructor.

        Load the sheet from the filename argument.
        Set up the Tk widget tree.
        sSpreadsheet: %sRRtA1tfontt	helveticaitboldtSavetcommandtsidetbottomtexpanditfilltbothR	R
Rs<Return>s<Shift-Return>s<Tab>s<Shift-Tab>s<Delete>s<Escape>N(R�iR�(#RaRRjtostpathtisfileRgRAR>tTktroottwm_titletLabeltbeacontEntrytentrytButtonRct
savebuttontFrametcellgridtpacktbindtreturn_eventtshift_return_eventt	tab_eventtshift_tab_eventtdelete_eventtescape_eventtmakegridR
t	currentxytcornerxyt
setcurrenttsync(RRatrowstcolumnsR?R@((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�s<			cCsr|j|jkr>|jdk	r>|jj|j|j�n|jj|j�|j�|jjdd�dS(Nitendtbreak(	R�R�R
RjR0R-R�R�tdelete(Rtevent((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�'s!
cCs#|j\}}|j||�dS(N(R�t
load_entry(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�0scCs�|jj||�}|dkr*d}n1t|t�rId|j}n|j�\}}|jjdd�|jj	d|�|jj
dd�dS(NREt=iR�(RjRR
R)R�R�RDR�R�tinserttselection_range(RRR RRRRS((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�4s	c
Cs||_||_i|_tj|jdd�}|jdddddd�|jd|j�x�t	d	|d	�D]�}|jj
|d
d�tj|jdt|�dd�}|jd|dddd
�||j|df<||_d|_
|jd|j�|jd|j�|jd|j�|jd|j�qvWx�t	d	|d	�D]�}tj|jdt|�dd�}|jddd|dd
�||jd|f<d|_||_
|jd|j�|jd|j�|jd|j�|jd|j�q[Wx�t	d	|d	�D]�}x�t	d	|d	�D]�}tj|jdddddd�}|jd|d|dd�||j||f<||_||_
|jd|j�|jd|j�|jd|j�|jd|j�qDWq*WdS(s�Helper to create the grid of GUI cells.

        The edge (x==0 or y==0) is filled with labels; the rest is real cells.
        trelieftraisedtcolumniR}tstickytNSWEs<ButtonPress-1>itminsizei@RRtWEs<B1-Motion>s<ButtonRelease-1>s<Shift-Button-1>tsunkentbgtwhitetfgtblackN(R�R�t	gridcellsR�R�R�tgrid_configureR�t	selectallR!tgrid_columnconfigureRIt_SheetGUI__xt_SheetGUI__ytselectcolumntextendcolumnRKt	selectrowt	extendrowtpresstmotiontrelease(RR�R�RRR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�@sN			$		$				cCs*|jdd�|jtjtj�dS(Ni(R�t	setcornerR1R2(RR�((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�rscCs<|j|�\}}|j|d�|j|tj�dS(Ni(twhichxyR�RR1R2(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�vscCsR|j|�\}}|dkrN|j|jdd�|j|tj�ndS(Nii(RR�R�RR1R2(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�{scCs<|j|�\}}|jd|�|jtj|�dS(Ni(RR�RR1R2(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��scCsR|j|�\}}|dkrN|jd|jd�|jtj|�ndS(Nii(RR�R�RR1R2(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��scCsD|j|�\}}|dkr@|dkr@|j||�ndS(Ni(RR�(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��scCsD|j|�\}}|dkr@|dkr@|j||�ndS(Ni(RR(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��scCsh|jj|j|j�}|dk	rdt|tj�rdy|j|j	fSWqdt
k
r`qdXndS(Ni(ii(R�twinfo_containingtx_rootty_rootR
R)R�R�R�R�tAttributeError(RR�R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�s
cCs|jj|j�dS(N(RjRcRa(R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRc�scCs�|jdk	r|j�n|j�t||�|jd<|j||�|jj�||f|_d|_	|j
j|j�}|dk	r�d|d<ndS(sMake (x, y) the current cell.RRtyellowR�N(R�R
tchange_cellt
clearfocusR�R�R�R�t	focus_setR�R�R'(RRR tgridcell((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��s


	c	Csc|jdks$|j||fkr8|j||�dS|j�||f|_|j\}}|jpo|j\}}||kr�||}}n||kr�||}}nxh|jj�D]W\\}}}||ko�|knr�||ko|knr�d|d<q�q�W|jj|j�}|dk	rId|d<n|j||||�dS(Nt	lightBlueR�R(	R�R
R�RR�R�RLR't	setbeacon(	RRR R#R$R%R&RR
((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�s$$
"8
cCs#||kodknrD||ko6tjknrDd}n�||fdtjfkr�||krxd|}qd||f}n�||fdtjfkr�||kr�dt|�}qdt|�t|�f}n.t|j�}t|j�}d||f}||jd<dS(Nit:s%ds%d:%ds%ss%s:%sRR(R1R2RIR�R�R�R�(RR#R$R%R&tnametname1tname2((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�s;	
cCs�|jdk	r�|j\}}|jp-|j\}}||krR||}}n||krn||}}nxk|jj�D]W\\}}}||ko�|knr~||ko�|knr~d|d<q~q~WndS(NR�R�(R�R
R�R�RL(RR#R$R%R&RR R((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�s"8cCs1|j�|j\}}|j||d�dS(sCallback for the Return key.iR�(RR�R�(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��s
cCs:|j�|j\}}|j|td|d��dS(s0Callback for the Return key with Shift modifier.iR�(RR�R�R>(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��s
cCs1|j�|j\}}|j|d|�dS(sCallback for the Tab key.iR�(RR�R�(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��s
cCs:|j�|j\}}|jtd|d�|�dS(s-Callback for the Tab key with Shift modifier.iR�(RR�R�R>(RR�RR ((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��s
cCs�|j\}}|jj�}d}|jd�rFt|d�}nGxDtttt	fD]0}y||�}Wn
qYqYXt
|�}PqYW|dkr�|r�t|�}n|dkr�|jj
||�n|jj|||�|j�dS(s+Set the current cell from the entry widget.R�iN(R�R�R'R
t
startswithR�RR�R�R�R�R�RjR-R+R�(RRR RRRtclsR{((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyRs$cCs�|jj�x�|jj�D]�\\}}}|dks|dkrMqn|jj||�}|dkr{d|d<qt|d�r�|j�\}}nt|�t	}}||d<t
||d<qWdS(s(Fill the GUI cells from the sheet cells.iRERRRDtanchorN(RjRR�RLRR
RRDRKRtalign2anchor(RRR R
RRRRS((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR�s
"

(RhRit__doc__RR�R�R�R�R�R�R�R�R�R�R�R�RRcR�RRRR�R�R�R�RR�(((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyR��s4-					2																			cCs�ddl}t�}x�tdd�D]�}x�tdd�D]�}|dkr\t|�}nU|dkrwt|�}n:t|d�}td|�}d||f}t|�}|j|||�q;Wq%W|j�|jd�dS(sBasic non-gui self-test.i����Niis%s*%ss
sheet1.xml(	R�RR!R�R�R�R+RVRc(R�taRR Rtc1tc2R�((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt
test_basic,s	
cCs@tjdrtjd}nd}t|�}|jj�dS(s	GUI test.is
sheet1.xmlN(R1targvR�R�tmainloop(Ratg((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyttest_guiBs

R(#RR�R�R1RXRtxml.parsersRRRRRRRRMR�R�RRRReR*R�R�R�R�R�R�RItTkinterR�R�RRRh(((s./usr/lib64/python2.7/Demo/tkinter/guido/ss1.pyt<module>s@				�Y)6						�C			PKb1�Z�m.,,tkinter/guido/kill.pynuȯ��#! /usr/bin/python2.7
# Tkinter interface to Linux `kill' command.

from Tkinter import *
from string import splitfields
from string import split
import commands
import os

class BarButton(Menubutton):
    def __init__(self, master=None, **cnf):
        apply(Menubutton.__init__, (self, master), cnf)
        self.pack(side=LEFT)
        self.menu = Menu(self, name='menu')
        self['menu'] = self.menu

class Kill(Frame):
    # List of (name, option, pid_column)
    format_list = [('Default', '', 0),
                   ('Long', '-l', 2),
                   ('User', '-u', 1),
                   ('Jobs', '-j', 1),
                   ('Signal', '-s', 1),
                   ('Memory', '-m', 0),
                   ('VM', '-v', 0),
                   ('Hex', '-X', 0)]
    def kill(self, selected):
        c = self.format_list[self.format.get()][2]
        pid = split(selected)[c]
        os.system('kill -9 ' + pid)
        self.do_update()
    def do_update(self):
        name, option, column = self.format_list[self.format.get()]
        s = commands.getoutput('ps -w ' + option)
        list = splitfields(s, '\n')
        self.header.set(list[0])
        del list[0]
        y = self.frame.vscroll.get()[0]
        self.frame.list.delete(0, AtEnd())
        for line in list:
            self.frame.list.insert(0, line)
        self.frame.list.yview(int(y))
    def do_motion(self, e):
        e.widget.select_clear(0, END)
        e.widget.select_set(e.widget.nearest(e.y))
    def do_leave(self, e):
        e.widget.select_clear(0, END)
    def do_1(self, e):
        self.kill(e.widget.get(e.widget.nearest(e.y)))
    def __init__(self, master=None, **cnf):
        Frame.__init__(self, master, cnf)
        self.pack(expand=1, fill=BOTH)
        self.bar = Frame(self, name='bar', relief=RAISED,
                         borderwidth=2)
        self.bar.pack(fill=X)
        self.bar.file = BarButton(self.bar, text='File')
        self.bar.file.menu.add_command(
                label='Quit', command=self.quit)
        self.bar.view = BarButton(self.bar, text='View')
        self.format = IntVar(self)
        self.format.set(2)
        for num in range(len(self.format_list)):
            self.bar.view.menu.add_radiobutton(
                    label=self.format_list[num][0],
                    command=self.do_update,
                    variable=self.format,
                    value=num)
        #self.bar.view.menu.add_separator()
        #XXX ...
        self.bar.tk_menuBar(self.bar.file, self.bar.view)
        self.frame = Frame(self, relief=RAISED, borderwidth=2)
        self.frame.pack(expand=1, fill=BOTH)
        self.header = StringVar(self)
        self.frame.label = Label(self.frame, relief=FLAT, anchor=NW,
                                 borderwidth=0,
                                 textvariable=self.header)
        self.frame.label.pack(fill=X)
        self.frame.vscroll = Scrollbar(self.frame, orient=VERTICAL)
        self.frame.list = Listbox(self.frame, relief=SUNKEN,
                                  selectbackground='#eed5b7',
                                  selectborderwidth=0,
                                  yscroll=self.frame.vscroll.set)
        self.frame.vscroll['command'] = self.frame.list.yview
        self.frame.vscroll.pack(side=RIGHT, fill=Y)
        self.frame.list.pack(expand=1, fill=BOTH)
        self.update = Button(self, text="Update",
                             command=self.do_update)
        self.update.pack(expand=1, fill=X)
        self.frame.list.bind('<Motion>', self.do_motion)
        self.frame.list.bind('<Leave>', self.do_leave)
        self.frame.list.bind('<1>', self.do_1)
        self.do_update()

if __name__ == '__main__':
    kill = Kill(None, borderwidth=5)
    kill.winfo_toplevel().title('Tkinter Process Killer')
    kill.winfo_toplevel().minsize(1, 1)
    kill.mainloop()
PKb1�Z�+�$RRtkinter/guido/optionmenu.pyonu�[����
��^c@s�ddlTe�Ze�Zejd�eeeddd�Zej�dZ	e�Z
e
je	d
�eeee
fee	��Z
e
j�ej�dS(
i����(t*tOnetTwotThreetAahtBeetCeetDeetEffiN(RRRRR(tTkintertTktroott	StringVartvar1tsett
OptionMenutmenu1tpacktCHOICEStvar2tapplyttupletmenu2tmainloop(((s5/usr/lib64/python2.7/Demo/tkinter/guido/optionmenu.pyt<module>s
		

	
PKb1�Z���X�#�#tkinter/guido/tkman.pycnu�[����
Afc@s�ddlZddlZddlZddlZddlTddlmZddgZddgZdZx/eD]'Z	ej
je	�roe	Zd	ZqoqoWdZ
x/eD]'Z	ej
je	�r�e	Zd	Z
q�q�Wes�e
r\ejjd
�esdejdZejjde�ne
sLd
ejdZejjde�nejd	�n[[
d�Zddd��YZd�Ze�dS(i����N(t*(tManPages/depot/sundry/man/manns/usr/local/man/manns/depot/sundry/man/man3s/usr/local/man/man3iis
sgFailed to find mann directory.
Please add the correct entry to the MANNDIRLIST
at the top of %s script.s%s

sgFailed to find man3 directory.
Please add the correct entry to the MAN3DIRLIST
at the top of %s script.cCsktj|�}g}xE|D]=}|dd!dkr|ddkr|j|d �qqW|j�|S(Ni����i����t.tln123456789(tostlistdirtappendtsort(tmandirtfilestnamestfile((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pytlistmanpages0s
#
tSelectionBoxcBs�eZdd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
d�Zd�Zd
�ZRS(cCs�g|_t|dd�|_|jjdddt�|jj|_t|jdd�|_|jjdddt�t|jdd�|_|jjd	tdddt�t|jdd
�|_	|j	jd	t
dddt�t|�|_t
|j	dddd
dtdd�|_|jjd	t�t|jdd�|_|jjdddtd|jd|j�|jjdddtd|jd|j�|j|jd<t|j	dddtdddddd�|_|jjdddt�t|jddddd|j�|_|jjd	t�t|jdd dtdddd�|_|jjdddt�t|jdd!�|_ |j jdddt!�t|j dd"dd#d|j"�|_#|j#jd	t�t$�|_%t&|j dd$dd%d|j%dt'�|_(|j(jd	t�t|jdd&dtdddd�|_)|j)jdddt�t*|jdd'dd(�|_+|j+jd	t,�t-|jdddtddd)t!dd*d+d,�|_.|j.jdddt�|jj/d-|j�|j)j/d-|j"�|jj/d.|j0�|jj/d/|j1�|j)j/d/|j2�|j.j/d/|j3�|jj4�|jj5t�|j�dS(0Ntnametframetexpanditfilltsubframeitleftsubframetsidet
rightsubframetchapterttextt	DirectorytrelieftborderwidthitchaptermenutlabelsC functionstvaluetvariabletcommandsTcl/Tk functionstmenutlistboxtwidthitheightitl1sDisplay manual page named:tentrytl2frametl2sSearch regexp:t	casesensesCase sensitivetsearchttitles(none)twrapiHtselectbackgroundtpinks<Return>s
<Double-1>s<Tab>(6tchoicestFrameRtpacktBOTHtmasterRRtLEFTRtRIGHTt	StringVart
chaptervart
MenubuttontRAISEDRtTOPtMenuRtadd_radiobuttontMAN3DIRt
newchaptertMANNDIRtListboxtSUNKENR!tButtontentry_cbR$tEntryR%tXR&tNONEt	search_cbR't
BooleanVartcasevartCheckbuttontFLATR(R)tLabelR*tBOTTOMRRtbindt
listbox_cbt	entry_tabt
search_tabttext_tabt	focus_settset(tselfR2((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyt__init__;s�		
	
	
cCs/|jj�}g|_|jt|��dS(N(R6tgetR.taddlistR(RTR((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyR=�s	cCs=||jkr/|jj|�|jj�n|j�dS(N(R.RRtupdate(RTtchoice((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyt	addchoice�scCs1||jt|j�)|jj�|j�dS(N(R.tlenRRX(RTtlist((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyRW�s
cGs|j�dS(N(RX(RTte((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyRB�scCsQ|jj�}|rMt|�dkrM|jj|d�}|j|�ndS(Nii(R!tcurselectionR[RVt	show_page(RTR]t	selectionR((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyRN�scGs|j|jj��dS(N(t
search_stringR)RV(RTR]((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyRF�scCs|jj�dS(N(R)RR(RTR]((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyRO�scCs|jj�dS(N(R%RR(RTR]((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyRP�scCs|jj�dS(N(R%RR(RTR]((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyRQ�scCs�|jj�}t|t|�d�|j�}|sF|jj�n|jjdt	��d}x9|D]1}||kr�d}n|jj
t	�|�qiW|r�|S|jj�}|dkr�|jjd�SdS(NcSs|| |kS(N((Rtkeytn((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyt<lambda>�tii(R%RVtfilterR[R.RtbellR!tdeletetAtEndtinserttsize(RTRbtokt
exactmatchtitemRc((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyt
updatelist�s 
	cCsF|j�}|rB|j|�|jjdt��|j�ndS(Ni(RoR_R%RhRi(RTR((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyRX�s

cCs]d|jj�|f}tjd|d�}|jj�||jd<|jj|�dS(Ns%s/%s.?snroff -man %s | ul -itrR(R6RVRtpopenRtkillR*t	parsefile(RTRRtfp((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyR_�s


cCs`|s|jj�dGHdS|jj�s7tj}nd}y.|r[tj||�}ntj|�}Wn-tjk
r�}|jj�dG|GHdSX|j	j
t��}tj
|tj|d� �}|j	j
t��}tj
|tj|d� �}|}	d}
x4|d}||krM|	dkr8Pn|	}d}d}	n|j	jd|d|�}|j|�}|dkrd}
tdt|jd���}
y |j	jdt�t��Wntk
r�nX|j	jdd	||fd	|||
f�|j	jt�d	||f�|j	jt��PqqW|
s\|jj�ndS(
NsEmpty search stringsRegex error:Riis%d.0 linestarts%d.0 lineendtsels%d.%d(RRgRHRVtret
IGNORECASEtNonetcompileterrorRtindextAtInserttstringtatoitfindRiR)tmaxR[tgroupt
tag_removet
AtSelFirstt	AtSelLasttTclErrorttag_addtmark_settyview_pickplace(RTR)tmaptprogtmsgtheretlinenotendt	endlinenot
wraplinenotfoundtlinetiRc((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyRa�sd

	
	


N(t__name__t
__module__RxRUR=RZRWRBRNRFRORPRQRoRXR_Ra(((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyR
9sM												cCsWt�}t|�}tjdr9|jtjd�n|jdd�|j�dS(Ni(tTkR
tsystargvR_tminsizetmainloop(troottsb((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pytmains	
((R�RR}RvtTkinterRtMANNDIRLISTtMAN3DIRLISTtfoundmanndirtdirtpathtexistsR>tfoundman3dirR<tstderrtwriteR�R�texitRR
R�(((s0/usr/lib64/python2.7/Demo/tkinter/guido/tkman.pyt<module>sD




		�	PKb1�Z	�7E� � tkinter/guido/mbox.pycnu�[����
Afc@s)ddlZddlZddlZddlZddlZddlZddlTddlmZejddZ	d�Z
d�Zd�Zd	�Z
d
�Zejd�Zdd�Zdd
�Zd�Zdd�Zdadadd�Zd�Zd�Zd�Zddd�Ze
�dS(i����N(t*(tdialogtHOMEs/Mailc	Cs#daday#tjtjdd�\}}Wn(tjk
rY}|GHtjd�nXx1|D])}|d dkr�|daqa|aqaWtj�a	t	j
t�at�a
t
jatt
�atjidd6dd	6�tt�}|jid
d	6dd6�t|id
d6dd6�}|jid
d	6dd6�t|idd6�atjidd6dd	6dd6�tt
�atjdidd6td6�tjd�tjdidd6dd6�tjdt�|dftd<tdf|d<tjdtd�tjdt�tt�}|jidd6dd	6dd6�t|id
d6dd6�}|jid
d	6dd6�t|idd 6�atjidd6dd	6dd6�tt
�atjdid!d6td6�tjdid"d6td6�tjdid#d6t d6�tjd�tjdidd6dd6�tjdt!�|dftd<tdf|d<tjdt�tjdt"�tt
id$d%6�}|jid&d	6�tt
�a#t#jidd6dd	6�da%t
j&d'd�t'�t(�t
j)�dS((Ntinboxtallitit+texpandtbothtfilltytrighttsidetsunkentrelieftbditexportselectiontlefttcommandsOpen Foldertlabelt	separatortQuittexits<ButtonRelease-3>tsettyscrollcommandtyviews
<Double-1>s<3>tfixedtfontsOpen MessagesRemove MessagesRefile Messagetblacktbgtxi (*tfoldertseqtgetopttsystargvterrorRtmhlibtMHtmht
openfoldertmhftTktrootttktFramettoptpackt	ScrollbartListboxt	folderboxtMenut
foldermenutaddtopen_foldertbindt
folder_unposttfolder_posttscanboxtscanmenutopen_messagetremove_messagetrefile_messagetscan_unpostt	scan_posttbottNonetviewertminsizet
setfolderstrescantmainloop(	toptstargstmsgtargRt	folderbarRtscanbartrule2((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pytmains�#


		"	

	
""	
	
	

	
cCs9|j|j}}tj|d|d�tj�dS(Ni
(tx_rootty_rootR4tposttgrab_set(teRR
((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyR9�scCs5tjdd�tj�tj�tjd�dS(Ntupdatet	idletaskstactive(R,tcallR4tgrab_releasetunposttinvoke(RT((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyR8�s

cCs9|j|j}}tj|d|d�tj�dS(Ni
(RPRQR;RRRS(RTRR
((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyR@�scCs5tjdd�tj�tj�tjd�dS(NRURVRW(R,RXR;RYRZR[(RT((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyR?�s

s^ *([0-9]+)cCs�tj�}t|�dkr\t|�dkr9d}nd}ttd|ddd�dS|d}tj|�atjt�a	t
�dS(Nis Please open one folder at a timesPlease select a folder to opensCan't Open FolderRitOK(R2tcurselectiontlenRR+tgetRR'R(R)RF(RTtselRJti((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyR6�s	
c	Cs9tj�}t|�dkr\t|�dkr9d}nd}ttd|ddd�dStd}d	td<tjd
d�|d}tj|�}tj	|�dkr+t
jtjd��}t
j|�}tr�tj�ndd
lm}|tdt|f|�atj�tj�n|td<dS(Nis!Please open one message at a timesPlease select a message to opensCan't Open MessageRiR\tcursortwatchRURVi����(t
MimeViewers+%s/%d(R:R]R^RR+R,RXR_t
scanparsertmatchtstringtatoitgroupR)topenmessageRCtdestroyRdRARR/tshow(	RTR`RJRbRatlinetnumtmRd((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyR<�s,	





cCs
|dkS(Ntreceived((theader((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pytinterestingheader�scCs�tjd�}tj�}|s>ttddddd�dSg}xT|D]L}tj|�}tj|�dkrK|jt	j
tjd���qKqKWtj
|�t�tt|�|�dS(NisNo Message To Removes!Please select a message to removeRR\i(R:tnearestR]RR+R_ReRftappendRgRhRiR)tremovemessagesRFtfixfocustmin(RTtitopR`ttodoRaRm((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyR=�s	
&
Rc	Cs]tjd�}tj�}|s>ttddddd�dStj�}t|�dkr�|skd}nd}ttd	|ddd�dStj|d�}g}xT|D]L}tj|�}tj	|�dkr�|j
tjtj
d���q�q�Wt|kstr/|adatjt�antj|t�t�tt|�|�dS(
NisNo Message To Refiles!Please select a message to refileRR\is#Please select a folder to refile tos-Please select exactly one folder to refile tosNo Folder To Refile(R:RsR]RR+R2R^R_ReRfRtRgRhRit
lastrefilettofolderRBR'R(R)trefilemessagesRFRvRw(	RTRxR`t	folderselRJtrefiletoRyRaRm((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyR>�s4		
&cCs�tj�}xot|�D][}tjt|��}tj|�dkrtjtj	d��}||krtPqtqqWd}tj
|�tj|�dS(Niitend(R:tsizetrangeR_treprReRfRgRhRitselect_fromR(tnearRxtnRaRmRn((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyRv�s
cCs;tjdd�x$tj�D]}tjd|�qWdS(NiR(R2tdeleteR'tlistallfolderstinsert(tfn((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyRE
scCsWtrtj�dantjdd�x'ttt�D]}tjd|�q9WdS(NiR(	RCRkRBR:R�t
scanfolderRR R�(Rm((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyRFs
	RRcCs,td�tjd||fd�j��S(NcSs|d S(Ni����((Rm((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyt<lambda>Rsscan +%s %str(tmaptostpopent	readlines(Rtsequence((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyR�s(R�R"treR!RgR%tTkinterRtenvirontmailboxROR9R8R@R?tcompileReRBR6R<RrR=RzR{R>RvRERFR�(((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyt<module>s4
	x						
			PKb1�ZE`}eR	R	tkinter/guido/electrons.pycnu�[����
Afc@sLddlTddlZddd��YZd�ZedkrHe�ndS(i����(t*Nt	ElectronscBs&eZdd�Zd�Zd�ZRS(c
Cs||_t�|_}t|�|_}|j�|j|d�|j|d�}}|r�|j|d|dd|dd�|_ng|_	d
\}}}	}
xWt
|�D]I}|j|||	|
dd�}|j	j|�|d|
d}}
q�W|jj
�dS(Ntwidththeightitbitmapt
foregroundtbluei
iFiiJtfilltred(i
iFiiJ(tntTkttktCanvastcanvastpacktgetintt
create_bitmapRtpiecestrangetcreate_ovaltappendtupdate(
tselfR	RRtcRRtx1ty1tx2ty2titp((s4/usr/lib64/python2.7/Demo/tkinter/guido/electrons.pyt__init__s 	
'	cCsq|j}xT|jD]I}tjtdd��}tjtdd��}|j|||�qW|jj�dS(Ni����ii����(R
RtrandomtchoiceRtmoveRR(RR	RRtxty((s4/usr/lib64/python2.7/Demo/tkinter/guido/electrons.pytrandom_move+s	cCshy+x$td�D]}|j|j�qWWn6tk
rcy|jj�Wqdtk
r_qdXnXdS(Ni�(RR$R	tTclErrorRtdestroy(RR((s4/usr/lib64/python2.7/Demo/tkinter/guido/electrons.pytrun4s

N(t__name__t
__module__tNoneRR$R'(((s4/usr/lib64/python2.7/Demo/tkinter/guido/electrons.pyRs		cCs�ddl}ddl}|jdr>|j|jd�}nd}|jdr�|jd}|ddkr{|d}q�d|}nd}t||�}|j�dS(Ni����iiiit@(tsyststringtargvtatoiR*RR'(R,R-R	Rth((s4/usr/lib64/python2.7/Demo/tkinter/guido/electrons.pytmain@s




t__main__((tTkinterRRR1R((((s4/usr/lib64/python2.7/Demo/tkinter/guido/electrons.pyt<module>s

-	PKb1�ZE�7��tkinter/guido/listtree.pynu�[���# List a remote app's widget tree (names and classes only)

import sys
import string

from Tkinter import *

def listtree(master, app):
    list = Listbox(master, name='list')
    list.pack(expand=1, fill=BOTH)
    listnodes(list, app, '.', 0)
    return list

def listnodes(list, app, widget, level):
    klass = list.send(app, 'winfo', 'class', widget)
##      i = string.rindex(widget, '.')
##      list.insert(END, '%s%s (%s)' % ((level-1)*'.   ', widget[i:], klass))
    list.insert(END, '%s (%s)' % (widget, klass))
    children = list.tk.splitlist(
            list.send(app, 'winfo', 'children', widget))
    for c in children:
        listnodes(list, app, c, level+1)

def main():
    if not sys.argv[1:]:
        sys.stderr.write('Usage: listtree appname\n')
        sys.exit(2)
    app = sys.argv[1]
    tk = Tk()
    tk.minsize(1, 1)
    f = Frame(tk, name='f')
    f.pack(expand=1, fill=BOTH)
    list = listtree(f, app)
    tk.mainloop()

if __name__ == '__main__':
    main()
PKb1�Z.��55tkinter/guido/svkill.pyonu�[����
Afc@s�ddlTedkr"ed�nddlmZddlmZddlZddlZejdZ	de
fd	��YZd
efd��YZ
edkr�e
dd
d�Zej�jd�ej�jdd�ej�ndS(i����(t*g@s/This version of svkill requires Tk 4.0 or later(tsplitfields(tsplitNtLOGNAMEt	BarButtoncBseZdd�ZRS(cKsOttj||f|�|jdt�t|dd�|_|j|d<dS(Ntsidetnametmenu(tapplyt
Menubuttont__init__tpacktLEFTtMenuR(tselftmastertcnf((s1/usr/lib64/python2.7/Demo/tkinter/guido/svkill.pyR
sN(t__name__t
__module__tNoneR
(((s1/usr/lib64/python2.7/Demo/tkinter/guido/svkill.pyRstKillcBs|eZdddd ded	efgZd!d"d#d$d%d&gZd�Zd�Zd�Zd�Zd�Z	d'd�ZRS((tDefaultts
Every (-e)s-esNon process group leaders (-d)s-dsNon leaders with tty (-a)s-asFor this user (-u %s)s-u %sis	Long (-l)s-lis	Full (-f)s-fisFull Long (-f -l)s-l -fsSession and group ID (-j)s-jsScheduler properties (-c)s-ccCsI|j|jj�d}t|�|}tjd|�|j�dS(Niskill -9 (tformat_listtformattgetRtostsystemt	do_update(Rtselectedtctpid((s1/usr/lib64/python2.7/Demo/tkinter/guido/svkill.pytkill)scCs�|j|jj�d}|j|jj�d}tjd||f�}t|d�}|jj	|dd�|d=|j
jjdt
��x$|D]}|j
jjd|�q�WdS(Nisps %s %ss
is
          (RRRt	view_listtviewtcommandst	getoutputRtheadertsettframetlisttdeletetAtEndtinsert(RRR"tsR(tline((s1/usr/lib64/python2.7/Demo/tkinter/guido/svkill.pyR.s
cCs6|jjdd�|jj|jj|j��dS(Nt0tend(twidgettselect_cleart
select_settnearestty(Rte((s1/usr/lib64/python2.7/Demo/tkinter/guido/svkill.pyt	do_motion8scCs|jjdd�dS(NR.R/(R0R1(RR5((s1/usr/lib64/python2.7/Demo/tkinter/guido/svkill.pytdo_leave;scCs,|j|jj|jj|j���dS(N(R R0RR3R4(RR5((s1/usr/lib64/python2.7/Demo/tkinter/guido/svkill.pytdo_1=scKs�ttj||f|�|jdddt�t|dddtdd�|_|jjdt�t|jd	d
�|j_	|jj	j
jddd
|j�t|jd	d�|j_
t|jd	d�|j_t|�|_
|j
jd�t|�|_|jjd�xatt|j��D]J}|j|\}}|jj
j
jd|d
|jd|j
d|�q*Wxdtt|j��D]M}|j|\}}}|jjj
jd|d
|jd|jd|�q�W|jj|jj	|jj
|jj�t|dtdd�|_|jjdddt�t|�|_t|jdtdtddddd|j�|j_|jjjdtdt �t!|jdt"�|j_#t$|jdt%ddddddddddd t&d!|jj#j�|j_'|jj'j(|jj#d
<|jj#jd"t)dt�|jj'jdddt�t*|d	d#d
|j�|_+|j+jdt�|jj'j,d$|j-�|jj'j,d%|j.�|jj'j,d&|j/�|j�dS('NtexpanditfillRtbartrelieftborderwidthittexttFiletlabeltQuittcommandtViewtFormatitvariabletvaluetanchortfonts*-Courier-Bold-R-Normal-*-120-*ttextvariabletorients!*-Courier-Medium-R-Normal-*-120-*twidthi(theighti
tselectbackgrounds#eed5b7tselectborderwidtht
selectmodetyscrollRtUpdates<Motion>s<Leave>s<1>(0RtFrameR
RtBOTHtRAISEDR;tXRtfileRtadd_commandtquitR"RtIntVarR&trangetlenR!tadd_radiobuttonRRt
tk_menuBarR't	StringVarR%tLabeltFLATtNWR@tYtWt	ScrollbartVERTICALtvscrolltListboxtSUNKENtBROWSER(tyviewtRIGHTtButtontupdatetbindR6R7R8(RRRtnumR@toptiontcol((s1/usr/lib64/python2.7/Demo/tkinter/guido/svkill.pyR
?sv					
	(RR(s
Every (-e)s-e(sNon process group leaders (-d)s-d(sNon leaders with tty (-a)s-a(RRi(s	Long (-l)s-li(s	Full (-f)s-fi(sFull Long (-f -l)s-l -fi(sSession and group ID (-j)s-ji(sScheduler properties (-c)s-ciN(RRtuserR!RR RR6R7R8RR
(((s1/usr/lib64/python2.7/Demo/tkinter/guido/svkill.pyRs"			
			t__main__R=isTkinter Process Killer (SYSV)i(tTkintert	TkVersiontImportErrortstringRRR#RtenvironRrR	RRRRRRR twinfo_toplevelttitletminsizetmainloop(((s1/usr/lib64/python2.7/Demo/tkinter/guido/svkill.pyt<module>s

dPKb1�Z��GfGftkinter/guido/ss1.pynu�[���"""SS1 -- a spreadsheet."""

import os
import re
import sys
import cgi
import rexec
from xml.parsers import expat

LEFT, CENTER, RIGHT = "LEFT", "CENTER", "RIGHT"

def ljust(x, n):
    return x.ljust(n)
def center(x, n):
    return x.center(n)
def rjust(x, n):
    return x.rjust(n)
align2action = {LEFT: ljust, CENTER: center, RIGHT: rjust}

align2xml = {LEFT: "left", CENTER: "center", RIGHT: "right"}
xml2align = {"left": LEFT, "center": CENTER, "right": RIGHT}

align2anchor = {LEFT: "w", CENTER: "center", RIGHT: "e"}

def sum(seq):
    total = 0
    for x in seq:
        if x is not None:
            total += x
    return total

class Sheet:

    def __init__(self):
        self.cells = {} # {(x, y): cell, ...}
        self.rexec = rexec.RExec()
        m = self.rexec.add_module('__main__')
        m.cell = self.cellvalue
        m.cells = self.multicellvalue
        m.sum = sum

    def cellvalue(self, x, y):
        cell = self.getcell(x, y)
        if hasattr(cell, 'recalc'):
            return cell.recalc(self.rexec)
        else:
            return cell

    def multicellvalue(self, x1, y1, x2, y2):
        if x1 > x2:
            x1, x2 = x2, x1
        if y1 > y2:
            y1, y2 = y2, y1
        seq = []
        for y in range(y1, y2+1):
            for x in range(x1, x2+1):
                seq.append(self.cellvalue(x, y))
        return seq

    def getcell(self, x, y):
        return self.cells.get((x, y))

    def setcell(self, x, y, cell):
        assert x > 0 and y > 0
        assert isinstance(cell, BaseCell)
        self.cells[x, y] = cell

    def clearcell(self, x, y):
        try:
            del self.cells[x, y]
        except KeyError:
            pass

    def clearcells(self, x1, y1, x2, y2):
        for xy in self.selectcells(x1, y1, x2, y2):
            del self.cells[xy]

    def clearrows(self, y1, y2):
        self.clearcells(0, y1, sys.maxint, y2)

    def clearcolumns(self, x1, x2):
        self.clearcells(x1, 0, x2, sys.maxint)

    def selectcells(self, x1, y1, x2, y2):
        if x1 > x2:
            x1, x2 = x2, x1
        if y1 > y2:
            y1, y2 = y2, y1
        return [(x, y) for x, y in self.cells
                if x1 <= x <= x2 and y1 <= y <= y2]

    def movecells(self, x1, y1, x2, y2, dx, dy):
        if dx == 0 and dy == 0:
            return
        if x1 > x2:
            x1, x2 = x2, x1
        if y1 > y2:
            y1, y2 = y2, y1
        assert x1+dx > 0 and y1+dy > 0
        new = {}
        for x, y in self.cells:
            cell = self.cells[x, y]
            if hasattr(cell, 'renumber'):
                cell = cell.renumber(x1, y1, x2, y2, dx, dy)
            if x1 <= x <= x2 and y1 <= y <= y2:
                x += dx
                y += dy
            new[x, y] = cell
        self.cells = new

    def insertrows(self, y, n):
        assert n > 0
        self.movecells(0, y, sys.maxint, sys.maxint, 0, n)

    def deleterows(self, y1, y2):
        if y1 > y2:
            y1, y2 = y2, y1
        self.clearrows(y1, y2)
        self.movecells(0, y2+1, sys.maxint, sys.maxint, 0, y1-y2-1)

    def insertcolumns(self, x, n):
        assert n > 0
        self.movecells(x, 0, sys.maxint, sys.maxint, n, 0)

    def deletecolumns(self, x1, x2):
        if x1 > x2:
            x1, x2 = x2, x1
        self.clearcells(x1, x2)
        self.movecells(x2+1, 0, sys.maxint, sys.maxint, x1-x2-1, 0)

    def getsize(self):
        maxx = maxy = 0
        for x, y in self.cells:
            maxx = max(maxx, x)
            maxy = max(maxy, y)
        return maxx, maxy

    def reset(self):
        for cell in self.cells.itervalues():
            if hasattr(cell, 'reset'):
                cell.reset()

    def recalc(self):
        self.reset()
        for cell in self.cells.itervalues():
            if hasattr(cell, 'recalc'):
                cell.recalc(self.rexec)

    def display(self):
        maxx, maxy = self.getsize()
        width, height = maxx+1, maxy+1
        colwidth = [1] * width
        full = {}
        # Add column heading labels in row 0
        for x in range(1, width):
            full[x, 0] = text, alignment = colnum2name(x), RIGHT
            colwidth[x] = max(colwidth[x], len(text))
        # Add row labels in column 0
        for y in range(1, height):
            full[0, y] = text, alignment = str(y), RIGHT
            colwidth[0] = max(colwidth[0], len(text))
        # Add sheet cells in columns with x>0 and y>0
        for (x, y), cell in self.cells.iteritems():
            if x <= 0 or y <= 0:
                continue
            if hasattr(cell, 'recalc'):
                cell.recalc(self.rexec)
            if hasattr(cell, 'format'):
                text, alignment = cell.format()
                assert isinstance(text, str)
                assert alignment in (LEFT, CENTER, RIGHT)
            else:
                text = str(cell)
                if isinstance(cell, str):
                    alignment = LEFT
                else:
                    alignment = RIGHT
            full[x, y] = (text, alignment)
            colwidth[x] = max(colwidth[x], len(text))
        # Calculate the horizontal separator line (dashes and dots)
        sep = ""
        for x in range(width):
            if sep:
                sep += "+"
            sep += "-"*colwidth[x]
        # Now print The full grid
        for y in range(height):
            line = ""
            for x in range(width):
                text, alignment = full.get((x, y)) or ("", LEFT)
                text = align2action[alignment](text, colwidth[x])
                if line:
                    line += '|'
                line += text
            print line
            if y == 0:
                print sep

    def xml(self):
        out = ['<spreadsheet>']
        for (x, y), cell in self.cells.iteritems():
            if hasattr(cell, 'xml'):
                cellxml = cell.xml()
            else:
                cellxml = '<value>%s</value>' % cgi.escape(cell)
            out.append('<cell row="%s" col="%s">\n  %s\n</cell>' %
                       (y, x, cellxml))
        out.append('</spreadsheet>')
        return '\n'.join(out)

    def save(self, filename):
        text = self.xml()
        f = open(filename, "w")
        f.write(text)
        if text and not text.endswith('\n'):
            f.write('\n')
        f.close()

    def load(self, filename):
        f = open(filename, 'r')
        SheetParser(self).parsefile(f)
        f.close()

class SheetParser:

    def __init__(self, sheet):
        self.sheet = sheet

    def parsefile(self, f):
        parser = expat.ParserCreate()
        parser.StartElementHandler = self.startelement
        parser.EndElementHandler = self.endelement
        parser.CharacterDataHandler = self.data
        parser.ParseFile(f)

    def startelement(self, tag, attrs):
        method = getattr(self, 'start_'+tag, None)
        if method:
            for key, value in attrs.iteritems():
                attrs[key] = str(value) # XXX Convert Unicode to 8-bit
            method(attrs)
        self.texts = []

    def data(self, text):
        text = str(text) # XXX Convert Unicode to 8-bit
        self.texts.append(text)

    def endelement(self, tag):
        method = getattr(self, 'end_'+tag, None)
        if method:
            method("".join(self.texts))

    def start_cell(self, attrs):
        self.y = int(attrs.get("row"))
        self.x = int(attrs.get("col"))

    def start_value(self, attrs):
        self.fmt = attrs.get('format')
        self.alignment = xml2align.get(attrs.get('align'))

    start_formula = start_value

    def end_int(self, text):
        try:
            self.value = int(text)
        except:
            self.value = None

    def end_long(self, text):
        try:
            self.value = long(text)
        except:
            self.value = None

    def end_double(self, text):
        try:
            self.value = float(text)
        except:
            self.value = None

    def end_complex(self, text):
        try:
            self.value = complex(text)
        except:
            self.value = None

    def end_string(self, text):
        try:
            self.value = text
        except:
            self.value = None

    def end_value(self, text):
        if isinstance(self.value, BaseCell):
            self.cell = self.value
        elif isinstance(self.value, str):
            self.cell = StringCell(self.value,
                                   self.fmt or "%s",
                                   self.alignment or LEFT)
        else:
            self.cell = NumericCell(self.value,
                                    self.fmt or "%s",
                                    self.alignment or RIGHT)

    def end_formula(self, text):
        self.cell = FormulaCell(text,
                                self.fmt or "%s",
                                self.alignment or RIGHT)

    def end_cell(self, text):
        self.sheet.setcell(self.x, self.y, self.cell)

class BaseCell:
    __init__ = None # Must provide
    """Abstract base class for sheet cells.

    Subclasses may but needn't provide the following APIs:

    cell.reset() -- prepare for recalculation
    cell.recalc(rexec) -> value -- recalculate formula
    cell.format() -> (value, alignment) -- return formatted value
    cell.xml() -> string -- return XML
    """

class NumericCell(BaseCell):

    def __init__(self, value, fmt="%s", alignment=RIGHT):
        assert isinstance(value, (int, long, float, complex))
        assert alignment in (LEFT, CENTER, RIGHT)
        self.value = value
        self.fmt = fmt
        self.alignment = alignment

    def recalc(self, rexec):
        return self.value

    def format(self):
        try:
            text = self.fmt % self.value
        except:
            text = str(self.value)
        return text, self.alignment

    def xml(self):
        method = getattr(self, '_xml_' + type(self.value).__name__)
        return '<value align="%s" format="%s">%s</value>' % (
                align2xml[self.alignment],
                self.fmt,
                method())

    def _xml_int(self):
        if -2**31 <= self.value < 2**31:
            return '<int>%s</int>' % self.value
        else:
            return self._xml_long()

    def _xml_long(self):
        return '<long>%s</long>' % self.value

    def _xml_float(self):
        return '<double>%s</double>' % repr(self.value)

    def _xml_complex(self):
        return '<complex>%s</double>' % repr(self.value)

class StringCell(BaseCell):

    def __init__(self, text, fmt="%s", alignment=LEFT):
        assert isinstance(text, (str, unicode))
        assert alignment in (LEFT, CENTER, RIGHT)
        self.text = text
        self.fmt = fmt
        self.alignment = alignment

    def recalc(self, rexec):
        return self.text

    def format(self):
        return self.text, self.alignment

    def xml(self):
        s = '<value align="%s" format="%s"><string>%s</string></value>'
        return s % (
            align2xml[self.alignment],
            self.fmt,
            cgi.escape(self.text))

class FormulaCell(BaseCell):

    def __init__(self, formula, fmt="%s", alignment=RIGHT):
        assert alignment in (LEFT, CENTER, RIGHT)
        self.formula = formula
        self.translated = translate(self.formula)
        self.fmt = fmt
        self.alignment = alignment
        self.reset()

    def reset(self):
        self.value = None

    def recalc(self, rexec):
        if self.value is None:
            try:
                # A hack to evaluate expressions using true division
                rexec.r_exec("from __future__ import division\n" +
                             "__value__ = eval(%s)" % repr(self.translated))
                self.value = rexec.r_eval("__value__")
            except:
                exc = sys.exc_info()[0]
                if hasattr(exc, "__name__"):
                    self.value = exc.__name__
                else:
                    self.value = str(exc)
        return self.value

    def format(self):
        try:
            text = self.fmt % self.value
        except:
            text = str(self.value)
        return text, self.alignment

    def xml(self):
        return '<formula align="%s" format="%s">%s</formula>' % (
            align2xml[self.alignment],
            self.fmt,
            self.formula)

    def renumber(self, x1, y1, x2, y2, dx, dy):
        out = []
        for part in re.split('(\w+)', self.formula):
            m = re.match('^([A-Z]+)([1-9][0-9]*)$', part)
            if m is not None:
                sx, sy = m.groups()
                x = colname2num(sx)
                y = int(sy)
                if x1 <= x <= x2 and y1 <= y <= y2:
                    part = cellname(x+dx, y+dy)
            out.append(part)
        return FormulaCell("".join(out), self.fmt, self.alignment)

def translate(formula):
    """Translate a formula containing fancy cell names to valid Python code.

    Examples:
        B4 -> cell(2, 4)
        B4:Z100 -> cells(2, 4, 26, 100)
    """
    out = []
    for part in re.split(r"(\w+(?::\w+)?)", formula):
        m = re.match(r"^([A-Z]+)([1-9][0-9]*)(?::([A-Z]+)([1-9][0-9]*))?$", part)
        if m is None:
            out.append(part)
        else:
            x1, y1, x2, y2 = m.groups()
            x1 = colname2num(x1)
            if x2 is None:
                s = "cell(%s, %s)" % (x1, y1)
            else:
                x2 = colname2num(x2)
                s = "cells(%s, %s, %s, %s)" % (x1, y1, x2, y2)
            out.append(s)
    return "".join(out)

def cellname(x, y):
    "Translate a cell coordinate to a fancy cell name (e.g. (1, 1)->'A1')."
    assert x > 0 # Column 0 has an empty name, so can't use that
    return colnum2name(x) + str(y)

def colname2num(s):
    "Translate a column name to number (e.g. 'A'->1, 'Z'->26, 'AA'->27)."
    s = s.upper()
    n = 0
    for c in s:
        assert 'A' <= c <= 'Z'
        n = n*26 + ord(c) - ord('A') + 1
    return n

def colnum2name(n):
    "Translate a column number to name (e.g. 1->'A', etc.)."
    assert n > 0
    s = ""
    while n:
        n, m = divmod(n-1, 26)
        s = chr(m+ord('A')) + s
    return s

import Tkinter as Tk

class SheetGUI:

    """Beginnings of a GUI for a spreadsheet.

    TO DO:
    - clear multiple cells
    - Insert, clear, remove rows or columns
    - Show new contents while typing
    - Scroll bars
    - Grow grid when window is grown
    - Proper menus
    - Undo, redo
    - Cut, copy and paste
    - Formatting and alignment
    """

    def __init__(self, filename="sheet1.xml", rows=10, columns=5):
        """Constructor.

        Load the sheet from the filename argument.
        Set up the Tk widget tree.
        """
        # Create and load the sheet
        self.filename = filename
        self.sheet = Sheet()
        if os.path.isfile(filename):
            self.sheet.load(filename)
        # Calculate the needed grid size
        maxx, maxy = self.sheet.getsize()
        rows = max(rows, maxy)
        columns = max(columns, maxx)
        # Create the widgets
        self.root = Tk.Tk()
        self.root.wm_title("Spreadsheet: %s" % self.filename)
        self.beacon = Tk.Label(self.root, text="A1",
                               font=('helvetica', 16, 'bold'))
        self.entry = Tk.Entry(self.root)
        self.savebutton = Tk.Button(self.root, text="Save",
                                    command=self.save)
        self.cellgrid = Tk.Frame(self.root)
        # Configure the widget lay-out
        self.cellgrid.pack(side="bottom", expand=1, fill="both")
        self.beacon.pack(side="left")
        self.savebutton.pack(side="right")
        self.entry.pack(side="left", expand=1, fill="x")
        # Bind some events
        self.entry.bind("<Return>", self.return_event)
        self.entry.bind("<Shift-Return>", self.shift_return_event)
        self.entry.bind("<Tab>", self.tab_event)
        self.entry.bind("<Shift-Tab>", self.shift_tab_event)
        self.entry.bind("<Delete>", self.delete_event)
        self.entry.bind("<Escape>", self.escape_event)
        # Now create the cell grid
        self.makegrid(rows, columns)
        # Select the top-left cell
        self.currentxy = None
        self.cornerxy = None
        self.setcurrent(1, 1)
        # Copy the sheet cells to the GUI cells
        self.sync()

    def delete_event(self, event):
        if self.cornerxy != self.currentxy and self.cornerxy is not None:
            self.sheet.clearcells(*(self.currentxy + self.cornerxy))
        else:
            self.sheet.clearcell(*self.currentxy)
        self.sync()
        self.entry.delete(0, 'end')
        return "break"

    def escape_event(self, event):
        x, y = self.currentxy
        self.load_entry(x, y)

    def load_entry(self, x, y):
        cell = self.sheet.getcell(x, y)
        if cell is None:
            text = ""
        elif isinstance(cell, FormulaCell):
            text = '=' + cell.formula
        else:
            text, alignment = cell.format()
        self.entry.delete(0, 'end')
        self.entry.insert(0, text)
        self.entry.selection_range(0, 'end')

    def makegrid(self, rows, columns):
        """Helper to create the grid of GUI cells.

        The edge (x==0 or y==0) is filled with labels; the rest is real cells.
        """
        self.rows = rows
        self.columns = columns
        self.gridcells = {}
        # Create the top left corner cell (which selects all)
        cell = Tk.Label(self.cellgrid, relief='raised')
        cell.grid_configure(column=0, row=0, sticky='NSWE')
        cell.bind("<ButtonPress-1>", self.selectall)
        # Create the top row of labels, and confiure the grid columns
        for x in range(1, columns+1):
            self.cellgrid.grid_columnconfigure(x, minsize=64)
            cell = Tk.Label(self.cellgrid, text=colnum2name(x), relief='raised')
            cell.grid_configure(column=x, row=0, sticky='WE')
            self.gridcells[x, 0] = cell
            cell.__x = x
            cell.__y = 0
            cell.bind("<ButtonPress-1>", self.selectcolumn)
            cell.bind("<B1-Motion>", self.extendcolumn)
            cell.bind("<ButtonRelease-1>", self.extendcolumn)
            cell.bind("<Shift-Button-1>", self.extendcolumn)
        # Create the leftmost column of labels
        for y in range(1, rows+1):
            cell = Tk.Label(self.cellgrid, text=str(y), relief='raised')
            cell.grid_configure(column=0, row=y, sticky='WE')
            self.gridcells[0, y] = cell
            cell.__x = 0
            cell.__y = y
            cell.bind("<ButtonPress-1>", self.selectrow)
            cell.bind("<B1-Motion>", self.extendrow)
            cell.bind("<ButtonRelease-1>", self.extendrow)
            cell.bind("<Shift-Button-1>", self.extendrow)
        # Create the real cells
        for x in range(1, columns+1):
            for y in range(1, rows+1):
                cell = Tk.Label(self.cellgrid, relief='sunken',
                                bg='white', fg='black')
                cell.grid_configure(column=x, row=y, sticky='NSWE')
                self.gridcells[x, y] = cell
                cell.__x = x
                cell.__y = y
                # Bind mouse events
                cell.bind("<ButtonPress-1>", self.press)
                cell.bind("<B1-Motion>", self.motion)
                cell.bind("<ButtonRelease-1>", self.release)
                cell.bind("<Shift-Button-1>", self.release)

    def selectall(self, event):
        self.setcurrent(1, 1)
        self.setcorner(sys.maxint, sys.maxint)

    def selectcolumn(self, event):
        x, y = self.whichxy(event)
        self.setcurrent(x, 1)
        self.setcorner(x, sys.maxint)

    def extendcolumn(self, event):
        x, y = self.whichxy(event)
        if x > 0:
            self.setcurrent(self.currentxy[0], 1)
            self.setcorner(x, sys.maxint)

    def selectrow(self, event):
        x, y = self.whichxy(event)
        self.setcurrent(1, y)
        self.setcorner(sys.maxint, y)

    def extendrow(self, event):
        x, y = self.whichxy(event)
        if y > 0:
            self.setcurrent(1, self.currentxy[1])
            self.setcorner(sys.maxint, y)

    def press(self, event):
        x, y = self.whichxy(event)
        if x > 0 and y > 0:
            self.setcurrent(x, y)

    def motion(self, event):
        x, y = self.whichxy(event)
        if x > 0 and y > 0:
            self.setcorner(x, y)

    release = motion

    def whichxy(self, event):
        w = self.cellgrid.winfo_containing(event.x_root, event.y_root)
        if w is not None and isinstance(w, Tk.Label):
            try:
                return w.__x, w.__y
            except AttributeError:
                pass
        return 0, 0

    def save(self):
        self.sheet.save(self.filename)

    def setcurrent(self, x, y):
        "Make (x, y) the current cell."
        if self.currentxy is not None:
            self.change_cell()
        self.clearfocus()
        self.beacon['text'] = cellname(x, y)
        self.load_entry(x, y)
        self.entry.focus_set()
        self.currentxy = x, y
        self.cornerxy = None
        gridcell = self.gridcells.get(self.currentxy)
        if gridcell is not None:
            gridcell['bg'] = 'yellow'

    def setcorner(self, x, y):
        if self.currentxy is None or self.currentxy == (x, y):
            self.setcurrent(x, y)
            return
        self.clearfocus()
        self.cornerxy = x, y
        x1, y1 = self.currentxy
        x2, y2 = self.cornerxy or self.currentxy
        if x1 > x2:
            x1, x2 = x2, x1
        if y1 > y2:
            y1, y2 = y2, y1
        for (x, y), cell in self.gridcells.iteritems():
            if x1 <= x <= x2 and y1 <= y <= y2:
                cell['bg'] = 'lightBlue'
        gridcell = self.gridcells.get(self.currentxy)
        if gridcell is not None:
            gridcell['bg'] = 'yellow'
        self.setbeacon(x1, y1, x2, y2)

    def setbeacon(self, x1, y1, x2, y2):
        if x1 == y1 == 1 and x2 == y2 == sys.maxint:
            name = ":"
        elif (x1, x2) == (1, sys.maxint):
            if y1 == y2:
                name = "%d" % y1
            else:
                name = "%d:%d" % (y1, y2)
        elif (y1, y2) == (1, sys.maxint):
            if x1 == x2:
                name = "%s" % colnum2name(x1)
            else:
                name = "%s:%s" % (colnum2name(x1), colnum2name(x2))
        else:
            name1 = cellname(*self.currentxy)
            name2 = cellname(*self.cornerxy)
            name = "%s:%s" % (name1, name2)
        self.beacon['text'] = name


    def clearfocus(self):
        if self.currentxy is not None:
            x1, y1 = self.currentxy
            x2, y2 = self.cornerxy or self.currentxy
            if x1 > x2:
                x1, x2 = x2, x1
            if y1 > y2:
                y1, y2 = y2, y1
            for (x, y), cell in self.gridcells.iteritems():
                if x1 <= x <= x2 and y1 <= y <= y2:
                    cell['bg'] = 'white'

    def return_event(self, event):
        "Callback for the Return key."
        self.change_cell()
        x, y = self.currentxy
        self.setcurrent(x, y+1)
        return "break"

    def shift_return_event(self, event):
        "Callback for the Return key with Shift modifier."
        self.change_cell()
        x, y = self.currentxy
        self.setcurrent(x, max(1, y-1))
        return "break"

    def tab_event(self, event):
        "Callback for the Tab key."
        self.change_cell()
        x, y = self.currentxy
        self.setcurrent(x+1, y)
        return "break"

    def shift_tab_event(self, event):
        "Callback for the Tab key with Shift modifier."
        self.change_cell()
        x, y = self.currentxy
        self.setcurrent(max(1, x-1), y)
        return "break"

    def change_cell(self):
        "Set the current cell from the entry widget."
        x, y = self.currentxy
        text = self.entry.get()
        cell = None
        if text.startswith('='):
            cell = FormulaCell(text[1:])
        else:
            for cls in int, long, float, complex:
                try:
                    value = cls(text)
                except:
                    continue
                else:
                    cell = NumericCell(value)
                    break
        if cell is None and text:
            cell = StringCell(text)
        if cell is None:
            self.sheet.clearcell(x, y)
        else:
            self.sheet.setcell(x, y, cell)
        self.sync()

    def sync(self):
        "Fill the GUI cells from the sheet cells."
        self.sheet.recalc()
        for (x, y), gridcell in self.gridcells.iteritems():
            if x == 0 or y == 0:
                continue
            cell = self.sheet.getcell(x, y)
            if cell is None:
                gridcell['text'] = ""
            else:
                if hasattr(cell, 'format'):
                    text, alignment = cell.format()
                else:
                    text, alignment = str(cell), LEFT
                gridcell['text'] = text
                gridcell['anchor'] = align2anchor[alignment]


def test_basic():
    "Basic non-gui self-test."
    import os
    a = Sheet()
    for x in range(1, 11):
        for y in range(1, 11):
            if x == 1:
                cell = NumericCell(y)
            elif y == 1:
                cell = NumericCell(x)
            else:
                c1 = cellname(x, 1)
                c2 = cellname(1, y)
                formula = "%s*%s" % (c1, c2)
                cell = FormulaCell(formula)
            a.setcell(x, y, cell)
##    if os.path.isfile("sheet1.xml"):
##        print "Loading from sheet1.xml"
##        a.load("sheet1.xml")
    a.display()
    a.save("sheet1.xml")

def test_gui():
    "GUI test."
    if sys.argv[1:]:
        filename = sys.argv[1]
    else:
        filename = "sheet1.xml"
    g = SheetGUI(filename)
    g.root.mainloop()

if __name__ == '__main__':
    #test_basic()
    test_gui()
PKb1�Zk>'��tkinter/guido/hello.pyonu�[����
��^c@s3ddlZddlTd�Zd�Ze�dS(i����N(t*cCsAt�}t|�}d|d<t|d<|j�|j�dS(NsHello, worldttexttcommand(tTktButtont
quit_callbacktpacktmainloop(troottbutton((s0/usr/lib64/python2.7/Demo/tkinter/guido/hello.pytmains	


cCstjd�dS(Ni(tsystexit(((s0/usr/lib64/python2.7/Demo/tkinter/guido/hello.pyRs(RtTkinterR
R(((s0/usr/lib64/python2.7/Demo/tkinter/guido/hello.pyt<module>s
		PKb1�Z���ootkinter/guido/dialog.pycnu�[����
Afc@sKddlTddlZd�Zd�Zd�ZedkrGe�ndS(i����(t*NcGs�t|dd�}|j|�|jd�t|dtdd�}|jdtdt�t|dtdd�}|jdtdt�t	|dd	d
|dd�}	|	jdt
d
ddtdddd�|rt|d|�}
|
jdtdddd�nt
�}g}d}
x�|D]�}t|d
|d||
d��}|j|�|
|kr�t|dtdd�}|jdtd
ddddd�|j�|jd|dtdddddddd�n.|jdtd
ddddddddd�|
d}
q!W|dkrA|jd||||d��n|j�}|j�|j�|j|�|j�|r�|j�n|j�S(Ntclass_tDialogtrelieftborderwidthitsidetfilltwidtht3ittexttfonts$-Adobe-Times-Medium-R-Normal-*-180-*texpandtpadxt3mtpadytbitmapitcommandcSs
|j|�S(N(tset(tvti((s1/usr/lib64/python2.7/Demo/tkinter/guido/dialog.pyt<lambda>(tt2mtin_tipadxtipadyt1ms<Return>cSs|j�|j|�fS(N(tflashR(tetbRR((s1/usr/lib64/python2.7/Demo/tkinter/guido/dialog.pyR:s	(tToplevelttitleticonnametFrametRAISEDtpacktTOPtBOTHtBOTTOMtMessagetRIGHTtLabeltLEFTtIntVartButtontappendtSUNKENtlifttbindt	focus_gettgrab_sett	focus_settwaitvartdestroytget(tmasterRR	RtdefaulttargstwttoptbottmsgtbmtvartbuttonsRtbutRtbdtoldFocus((s1/usr/lib64/python2.7/Demo/tkinter/guido/dialog.pytdialogsN

	(	
!
"
	




c	CsRttddddd�}dG|GHttddd	d
ddd
�}dG|GHdS(NsNot Respondings=The file server isn't responding right now; I'll keep trying.Ri����tOKspressed buttons
File ModifiedswFile "tcl.h" has been modified since the last time it was saved. Do you want to save it before exiting the application?twarningis	Save FilesDiscard ChangessReturn To Editor(RDt
mainWidget(R((s1/usr/lib64/python2.7/Demo/tkinter/guido/dialog.pytgoLs 			cCs}ddl}t�atjt�ttdddt�}|j�ttddd|j�}|jdt	�tj
�dS(Ni����R	sPress Here To StartRtExitR(tsysR!RGtPacktconfigR,RHR#texitR%tmainloop(RJtstarttendit((s1/usr/lib64/python2.7/Demo/tkinter/guido/dialog.pyttestas	

t__main__(tTkinterRJRDRHRQt__name__(((s1/usr/lib64/python2.7/Demo/tkinter/guido/dialog.pyt<module>s
	A		PKb1�Z���,�)�)tkinter/guido/canvasevents.pyonu�[����
Afc@s�ddlTddlmZmZmZdefd��YZddd��YZdefd��YZd	dd
��YZdefd��YZd
efd��YZ	de	fd��YZ
ddd��YZd�Ze
dkr�e�ndS(i����(t*(tOvaltGroupt
CanvasTextRcBseZddd�ZRS(cCs|jj|j||�S(N(tcanvasttag_bindtid(tselftsequencetcommand((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pytbindsN(t__name__t
__module__tNoneR
(((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR
stObjectcBsYeZdZddddd�Zd�Zd�Zd�Zd�Zd	�Zd
�Z	RS(s�Base class for composite graphical objects.

    Objects belong to a canvas, and can be moved around on the canvas.
    They also belong to at most one ``pile'' of objects, and can be
    transferred between piles (or removed from their pile).

    Objects have a canonical ``x, y'' position which is moved when the
    object is moved.  Where the object is relative to this position
    depends on the object; for simple objects, it may be their center.

    Objects have mouse sensitivity.  They can be clicked, dragged and
    double-clicked.  The behavior may actually be determined by the pile
    they are in.

    All instance attributes are public since the derived class may
    need them.

    itredtobjectcCsJ||_||_||_d|_t|j�|_|j||�dS(N(RtxtyR
tpileRtgrouptcreateitems(RRRRtfillttext((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyt__init__#s				cCs
t|j�S(N(tstrR(R((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyt__str__+sc
Cs�t|j|jd|jd|jd|jdd|dd�|_|jj|j�t|j|j|jd|�|_|jj|j�dS(Nii
RtwidthiR(	RRRRt
_Object__ovalRtaddtag_withtagRt
_Object__text(RRR((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR.s	+	cCsW||kodknr dS|jj||�|j||_|j||_dS(Ni(RtmoveRR(Rtdxtdy((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pytmoveby7s
cCs"|j||j||j�dS(N(R"RR(RRR((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pytmoveto>scCsN|jr%|jj|�d|_n||_|jrJ|jj|�ndS(N(RtdeleteR
tadd(RR((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyttransferAs			cCs|jj�dS(N(Rttkraise(R((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR'Is(
RRt__doc__RRRR"R#R&R'(((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyRs						tBottomcBseZdZd�ZRS(s+An object to serve as the bottom of a pile.c
Gs]t|j|jd|jd|jd|jddddd�|_|jj|j�dS(Nii
Rtgraytoutlinet(RRRRt
_Bottom__ovalRR(Rtargs((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyRQs	+(RRR(R(((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR)MstPilecBsPeZdZdd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
RS(	sA group of graphical objects.cCs~||_||_||_g|_t|j|j|j�|_t|jd|�|_|jj|jj�|j	�dS(Nttag(
RRRtobjectsR)tbottomRRRtbindhandlers(RRRRR0((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR\s				cCs0|jjd|j�|jjd|j�dS(Ns<1>s
<Double-1>(RR
tclickhandlertdoubleclickhandler(R((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR3fscCs4|jj|�|jj|j�|j|�dS(N(R1tappendRRtposition(RR((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR%jscCs'|jj|j�|jj|�dS(N(RtdtagR1tremove(RR((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR$oscCsF|j�|jj|�}|j|j|d|j|d�dS(Nii(R'R1tindexR#RR(RRti((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR7ss
cCsdS(N((Rtevent((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR4xscCsdS(N((RR<((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR5{sN(RRR(R
RR3R%R$R7R4R5(((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR/Xs
					t
MovingPilecBsAeZd�ZdZd�ZeZd�Zd�Zd�Z	RS(cCs=tj|�|jjd|j�|jjd|j�dS(Ns<B1-Motion>s<ButtonRelease-1>(R/R3RR
t
motionhandlertreleasehandler(R((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR3�s
cCs�|jjd�}xMtt|j��D])}|j|}|jj|kr(Pq(q(Wd|_dS|j||_x|jD]}|j	�q|W|j
|_|j|_
dS(Ntcurrent(RtgettagstrangetlenR1RR0R
tmovethisR'RtlastxRtlasty(RR<ttagsR;to((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR4�s
	cCsm|js
dS|j|j}|j|j}|j|_|j|_x!|jD]}|j||�qOWdS(N(RDRRERRFR"(RR<R R!RH((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR>�s	cCs-|j}|sdSd|_|j|�dS(N(RDR
t
finishmove(RR<R1((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR?�s
		cCs"x|D]}|j|�qWdS(N(R7(RR1RH((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyRI�s
N(
RRR3R
RDR4R5R>R?RI(((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR=s			
	tPile1cBs>eZdZdZdZd�Zd�Zd�Zd�ZRS(i2tp1cCs5||_tj||jj|j|j|j�dS(N(tdemoR=RRRRR0(RRL((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR�s	cCsMy|jd}Wntk
r%dSX|j|j��tj||�dS(Ni����(R1t
IndexErrorR&totherR=R5(RR<RH((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR5�s
cCs
|jjS(N(RLtp2(R((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyRN�scCs�|d}|j�}|j|j}}||jd||jd||jd||jdkr�x.|D]}|j|�qpWntj||�dS(Nii(RNRRR&R=RI(RR1RHtpRR((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyRI�s
@
(	RRRRR0RR5RNRI(((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyRJ�s			tPile2cBs#eZdZdZdZd�ZRS(i�i2ROcCs
|jjS(N(RLRK(R((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyRN�s(RRRRR0RN(((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyRQ�stDemocBseZd�ZRS(cCs�||_t|dddddddtdd�|_|jjd	d
dt�t|�|_t|�|_	t
|jddd
d�}t
|jddd
d�}t
|jddd
d�}|j|j�|j|j�|j|j	�dS(NRi�theightt
backgroundtyellowtrelieftborderwidthitexpandiRRRto1tgreento2s
light blueto3(tmastertCanvastSUNKENRtpacktBOTHRJRKRQRORR&(RR]RYR[R\((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyR�s		(RRR(((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyRR�scCs6t�}t|�}|jd|j�|j�dS(NtWM_DELETE_WINDOW(tTkRRtprotocoltquittmainloop(trootRL((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pytmain�s	t__main__N((((tTkinterR^RRRRR)R/R=RJRQRRRhR(((s7/usr/lib64/python2.7/Demo/tkinter/guido/canvasevents.pyt<module>s
?'0
	PKb1�Zqf�XX tkinter/guido/newmenubardemo.pycnu�[����
Afc@sFdZddlTddd��YZd�ZedkrBe�ndS(	s.Play with the new Tk 8.0 toplevel menu option.i����(t*tAppcBseZd�ZRS(cCsu||_t|j�|_t|j�|_|jjdd�|jjdd�|jjdd�|jj�|jjddd|jj�t|j�|_|jjdd�|jjdd�|jjdd	�t|jd
d�|_|jjdd�|jj	dd
d|j�|jj	ddd|j�|jj	ddd|j�t
d|j�|_dS(NtlabeltNewsOpen...tClosetQuittcommandtCuttCopytPastetnamethelpsAbout...tFiletmenutEdittHelp(tmastertMenutmenubartfilemenutadd_commandt
add_separatortquitteditmenuthelpmenutadd_cascadetToplevelttop(tselfR((s9/usr/lib64/python2.7/Demo/tkinter/guido/newmenubardemo.pyt__init__	s$	
(t__name__t
__module__R(((s9/usr/lib64/python2.7/Demo/tkinter/guido/newmenubardemo.pyRscCs-t�}|j�t|�}|j�dS(N(tTktwithdrawRtmainloop(troottapp((s9/usr/lib64/python2.7/Demo/tkinter/guido/newmenubardemo.pytmain(s	
t__main__N((t__doc__tTkinterRR%R(((s9/usr/lib64/python2.7/Demo/tkinter/guido/newmenubardemo.pyt<module>s

!	PKb1�Z	�7E� � tkinter/guido/mbox.pyonu�[����
Afc@s)ddlZddlZddlZddlZddlZddlZddlTddlmZejddZ	d�Z
d�Zd�Zd	�Z
d
�Zejd�Zdd�Zdd
�Zd�Zdd�Zdadadd�Zd�Zd�Zd�Zddd�Ze
�dS(i����N(t*(tdialogtHOMEs/Mailc	Cs#daday#tjtjdd�\}}Wn(tjk
rY}|GHtjd�nXx1|D])}|d dkr�|daqa|aqaWtj�a	t	j
t�at�a
t
jatt
�atjidd6dd	6�tt�}|jid
d	6dd6�t|id
d6dd6�}|jid
d	6dd6�t|idd6�atjidd6dd	6dd6�tt
�atjdidd6td6�tjd�tjdidd6dd6�tjdt�|dftd<tdf|d<tjdtd�tjdt�tt�}|jidd6dd	6dd6�t|id
d6dd6�}|jid
d	6dd6�t|idd 6�atjidd6dd	6dd6�tt
�atjdid!d6td6�tjdid"d6td6�tjdid#d6t d6�tjd�tjdidd6dd6�tjdt!�|dftd<tdf|d<tjdt�tjdt"�tt
id$d%6�}|jid&d	6�tt
�a#t#jidd6dd	6�da%t
j&d'd�t'�t(�t
j)�dS((Ntinboxtallitit+texpandtbothtfilltytrighttsidetsunkentrelieftbditexportselectiontlefttcommandsOpen Foldertlabelt	separatortQuittexits<ButtonRelease-3>tsettyscrollcommandtyviews
<Double-1>s<3>tfixedtfontsOpen MessagesRemove MessagesRefile Messagetblacktbgtxi (*tfoldertseqtgetopttsystargvterrorRtmhlibtMHtmht
openfoldertmhftTktrootttktFramettoptpackt	ScrollbartListboxt	folderboxtMenut
foldermenutaddtopen_foldertbindt
folder_unposttfolder_posttscanboxtscanmenutopen_messagetremove_messagetrefile_messagetscan_unpostt	scan_posttbottNonetviewertminsizet
setfolderstrescantmainloop(	toptstargstmsgtargRt	folderbarRtscanbartrule2((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pytmains�#


		"	

	
""	
	
	

	
cCs9|j|j}}tj|d|d�tj�dS(Ni
(tx_rootty_rootR4tposttgrab_set(teRR
((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyR9�scCs5tjdd�tj�tj�tjd�dS(Ntupdatet	idletaskstactive(R,tcallR4tgrab_releasetunposttinvoke(RT((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyR8�s

cCs9|j|j}}tj|d|d�tj�dS(Ni
(RPRQR;RRRS(RTRR
((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyR@�scCs5tjdd�tj�tj�tjd�dS(NRURVRW(R,RXR;RYRZR[(RT((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyR?�s

s^ *([0-9]+)cCs�tj�}t|�dkr\t|�dkr9d}nd}ttd|ddd�dS|d}tj|�atjt�a	t
�dS(Nis Please open one folder at a timesPlease select a folder to opensCan't Open FolderRitOK(R2tcurselectiontlenRR+tgetRR'R(R)RF(RTtselRJti((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyR6�s	
c	Cs9tj�}t|�dkr\t|�dkr9d}nd}ttd|ddd�dStd}d	td<tjd
d�|d}tj|�}tj	|�dkr+t
jtjd��}t
j|�}tr�tj�ndd
lm}|tdt|f|�atj�tj�n|td<dS(Nis!Please open one message at a timesPlease select a message to opensCan't Open MessageRiR\tcursortwatchRURVi����(t
MimeViewers+%s/%d(R:R]R^RR+R,RXR_t
scanparsertmatchtstringtatoitgroupR)topenmessageRCtdestroyRdRARR/tshow(	RTR`RJRbRatlinetnumtmRd((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyR<�s,	





cCs
|dkS(Ntreceived((theader((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pytinterestingheader�scCs�tjd�}tj�}|s>ttddddd�dSg}xT|D]L}tj|�}tj|�dkrK|jt	j
tjd���qKqKWtj
|�t�tt|�|�dS(NisNo Message To Removes!Please select a message to removeRR\i(R:tnearestR]RR+R_ReRftappendRgRhRiR)tremovemessagesRFtfixfocustmin(RTtitopR`ttodoRaRm((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyR=�s	
&
Rc	Cs]tjd�}tj�}|s>ttddddd�dStj�}t|�dkr�|skd}nd}ttd	|ddd�dStj|d�}g}xT|D]L}tj|�}tj	|�dkr�|j
tjtj
d���q�q�Wt|kstr/|adatjt�antj|t�t�tt|�|�dS(
NisNo Message To Refiles!Please select a message to refileRR\is#Please select a folder to refile tos-Please select exactly one folder to refile tosNo Folder To Refile(R:RsR]RR+R2R^R_ReRfRtRgRhRit
lastrefilettofolderRBR'R(R)trefilemessagesRFRvRw(	RTRxR`t	folderselRJtrefiletoRyRaRm((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyR>�s4		
&cCs�tj�}xot|�D][}tjt|��}tj|�dkrtjtj	d��}||krtPqtqqWd}tj
|�tj|�dS(Niitend(R:tsizetrangeR_treprReRfRgRhRitselect_fromR(tnearRxtnRaRmRn((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyRv�s
cCs;tjdd�x$tj�D]}tjd|�qWdS(NiR(R2tdeleteR'tlistallfolderstinsert(tfn((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyRE
scCsWtrtj�dantjdd�x'ttt�D]}tjd|�q9WdS(NiR(	RCRkRBR:R�t
scanfolderRR R�(Rm((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyRFs
	RRcCs,td�tjd||fd�j��S(NcSs|d S(Ni����((Rm((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyt<lambda>Rsscan +%s %str(tmaptostpopent	readlines(Rtsequence((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyR�s(R�R"treR!RgR%tTkinterRtenvirontmailboxROR9R8R@R?tcompileReRBR6R<RrR=RzR{R>RvRERFR�(((s//usr/lib64/python2.7/Demo/tkinter/guido/mbox.pyt<module>s4
	x						
			PKb1�Z�|�D��tkinter/guido/paint.pycnu�[����
��^c@s`dZddlTdad
\aad�Zd�Zd�Zd�Z	e
dkr\e�nd	S(sA"Paint program by Dave Michell.

Subject: tkinter "paint" example
From: Dave Mitchell <davem@magnet.com>
To: python-list@cwi.nl
Date: Fri, 23 Jan 1998 12:18:05 -0500 (EST)

  Not too long ago (last week maybe?) someone posted a request
for an example of a paint program using Tkinter. Try as I might
I can't seem to find it in the archive, so i'll just post mine
here and hope that the person who requested it sees this!

  All this does is put up a canvas and draw a smooth black line
whenever you have the mouse button down, but hopefully it will
be enough to start with.. It would be easy enough to add some
options like other shapes or colors...

                                                yours,
                                                dave mitchell
                                                davem@magnet.com
i����(t*tupcCs]t�}t|�}|j�|jdt�|jdt�|jdt�|j�dS(Ns<Motion>s<ButtonPress-1>s<ButtonRelease-1>(tTktCanvastpacktbindtmotiontb1downtb1uptmainloop(troottdrawing_area((s0/usr/lib64/python2.7/Demo/tkinter/guido/paint.pytmains	
cCs
dadS(Ntdown(tb1(tevent((s0/usr/lib64/python2.7/Demo/tkinter/guido/paint.pyR'scCsdadadadS(NR(RtNonetxoldtyold(R((s0/usr/lib64/python2.7/Demo/tkinter/guido/paint.pyR,scCsetdkratdk	rLtdk	rL|jjtt|j|jdt�n|ja|jandS(NR
tsmooth(	RRRRtwidgettcreate_linetxtytTRUE(R((s0/usr/lib64/python2.7/Demo/tkinter/guido/paint.pyR2s
(	t__main__N(NN(t__doc__tTkinterRRRRRRRRt__name__(((s0/usr/lib64/python2.7/Demo/tkinter/guido/paint.pyt<module>s
						PKb1�Z�<J=tkinter/guido/svkill.pynuȯ��#! /usr/bin/python2.7

# Tkinter interface to SYSV `ps' and `kill' commands.

from Tkinter import *

if TkVersion < 4.0:
    raise ImportError, "This version of svkill requires Tk 4.0 or later"

from string import splitfields
from string import split
import commands
import os

user = os.environ['LOGNAME']

class BarButton(Menubutton):
    def __init__(self, master=None, **cnf):
        apply(Menubutton.__init__, (self, master), cnf)
        self.pack(side=LEFT)
        self.menu = Menu(self, name='menu')
        self['menu'] = self.menu

class Kill(Frame):
    # List of (name, option, pid_column)
    view_list = [
            ('Default', ''),
            ('Every (-e)', '-e'),
            ('Non process group leaders (-d)', '-d'),
            ('Non leaders with tty (-a)', '-a'),
            ('For this user (-u %s)' % user, '-u %s' % user),
            ]
    format_list = [
            ('Default', '', 0),
            ('Long (-l)', '-l', 3),
            ('Full (-f)', '-f', 1),
            ('Full Long (-f -l)', '-l -f', 3),
            ('Session and group ID (-j)', '-j', 0),
            ('Scheduler properties (-c)', '-c', 0),
            ]
    def kill(self, selected):
        c = self.format_list[self.format.get()][2]
        pid = split(selected)[c]
        os.system('kill -9 ' + pid)
        self.do_update()
    def do_update(self):
        format = self.format_list[self.format.get()][1]
        view = self.view_list[self.view.get()][1]
        s = commands.getoutput('ps %s %s' % (view, format))
        list = splitfields(s, '\n')
        self.header.set(list[0] + '          ')
        del list[0]
        self.frame.list.delete(0, AtEnd())
        for line in list:
            self.frame.list.insert(0, line)
    def do_motion(self, e):
        e.widget.select_clear('0', 'end')
        e.widget.select_set(e.widget.nearest(e.y))
    def do_leave(self, e):
        e.widget.select_clear('0', 'end')
    def do_1(self, e):
        self.kill(e.widget.get(e.widget.nearest(e.y)))
    def __init__(self, master=None, **cnf):
        apply(Frame.__init__, (self, master), cnf)
        self.pack(expand=1, fill=BOTH)
        self.bar = Frame(self, name='bar', relief=RAISED,
                         borderwidth=2)
        self.bar.pack(fill=X)
        self.bar.file = BarButton(self.bar, text='File')
        self.bar.file.menu.add_command(
                label='Quit', command=self.quit)
        self.bar.view = BarButton(self.bar, text='View')
        self.bar.format = BarButton(self.bar, text='Format')
        self.view = IntVar(self)
        self.view.set(0)
        self.format = IntVar(self)
        self.format.set(0)
        for num in range(len(self.view_list)):
            label, option = self.view_list[num]
            self.bar.view.menu.add_radiobutton(
                    label=label,
                    command=self.do_update,
                    variable=self.view,
                    value=num)
        for num in range(len(self.format_list)):
            label, option, col = self.format_list[num]
            self.bar.format.menu.add_radiobutton(
                    label=label,
                    command=self.do_update,
                    variable=self.format,
                    value=num)
        self.bar.tk_menuBar(self.bar.file,
                            self.bar.view,
                            self.bar.format)
        self.frame = Frame(self, relief=RAISED, borderwidth=2)
        self.frame.pack(expand=1, fill=BOTH)
        self.header = StringVar(self)
        self.frame.label = Label(
                self.frame, relief=FLAT, anchor=NW, borderwidth=0,
                font='*-Courier-Bold-R-Normal-*-120-*',
                textvariable=self.header)
        self.frame.label.pack(fill=Y, anchor=W)
        self.frame.vscroll = Scrollbar(self.frame, orient=VERTICAL)
        self.frame.list = Listbox(
                self.frame,
                relief=SUNKEN,
                font='*-Courier-Medium-R-Normal-*-120-*',
                width=40, height=10,
                selectbackground='#eed5b7',
                selectborderwidth=0,
                selectmode=BROWSE,
                yscroll=self.frame.vscroll.set)
        self.frame.vscroll['command'] = self.frame.list.yview
        self.frame.vscroll.pack(side=RIGHT, fill=Y)
        self.frame.list.pack(expand=1, fill=BOTH)
        self.update = Button(self, text='Update',
                             command=self.do_update)
        self.update.pack(fill=X)
        self.frame.list.bind('<Motion>', self.do_motion)
        self.frame.list.bind('<Leave>', self.do_leave)
        self.frame.list.bind('<1>', self.do_1)
        self.do_update()

if __name__ == '__main__':
    kill = Kill(None, borderwidth=5)
    kill.winfo_toplevel().title('Tkinter Process Killer (SYSV)')
    kill.winfo_toplevel().minsize(1, 1)
    kill.mainloop()
PKb1�Z����YYtkinter/guido/brownian.pycnu�[����
��^c@s�ddlTddlZddlZddlZddlZdZdZdZdZdZ	dZ
dZdad	�Z
d
�Ze�dS(i����(t*Ni�i,i
itredicCs�t}tjtdt�}tjtdt�}|j||||||||dt�}xvts�tjdt	�}tjdt	�}tj
t�}y|j|||�Wnt
k
r�PnXtj|�qcWdS(Ng@tfilli(tRADIUStrandomtgausstWIDTHtSIGMAtHEIGHTtcreate_ovaltFILLtstoptBUZZtexpovariatetLAMBDAtmovetTclErrorttimetsleep(tcanvastrtxtytptdxtdytdt((s3/usr/lib64/python2.7/Demo/tkinter/guido/brownian.pytparticles.	
cCs�t�}t|dtdt�}|jdddd�d}tjdr`ttjd�}nx9t|�D]+}t	j
dtd	|f�}|j�qmWz|j
�WddaXdS(
NtwidththeightRtbothtexpandiittargettargs(tTktCanvasRRtpacktsystargvtinttranget	threadingtThreadRtstarttmainloopR(trootRtnptitt((s3/usr/lib64/python2.7/Demo/tkinter/guido/brownian.pytmain"s	
(tTkinterRR)RR%RRRRRRR
RRR1(((s3/usr/lib64/python2.7/Demo/tkinter/guido/brownian.pyt<module>s
		PKb1�Z&Y���tkinter/guido/listtree.pyonu�[����
��^c@sWddlZddlZddlTd�Zd�Zd�ZedkrSe�ndS(i����N(t*cCs?t|dd�}|jdddt�t||dd�|S(Ntnametlisttexpanditfillt.i(tListboxtpacktBOTHt	listnodes(tmastertappR((s3/usr/lib64/python2.7/Demo/tkinter/guido/listtree.pytlisttreescCs�|j|dd|�}|jtd||f�|jj|j|dd|��}x%|D]}t||||d�q]WdS(Ntwinfotclasss%s (%s)tchildreni(tsendtinserttENDttkt	splitlistR	(RRtwidgettleveltklassRtc((s3/usr/lib64/python2.7/Demo/tkinter/guido/listtree.pyR	s	
cCs�tjds-tjjd�tjd�ntjd}t�}|jdd�t|dd�}|jdddt	�t
||�}|j�dS(NisUsage: listtree appname
iRtfRR(tsystargvtstderrtwritetexittTktminsizetFrameRRRtmainloop(RRRR((s3/usr/lib64/python2.7/Demo/tkinter/guido/listtree.pytmains

	t__main__(RtstringtTkinterRR	R#t__name__(((s3/usr/lib64/python2.7/Demo/tkinter/guido/listtree.pyt<module>s
		
	PKb1�Z/	Ŕcctkinter/guido/brownian2.pynu�[���# Brownian motion -- an example of a NON multi-threaded Tkinter program ;)
# By Michele Simoniato, inspired by brownian.py

from Tkinter import *
import random
import sys

WIDTH = 400
HEIGHT = 300
SIGMA = 10
BUZZ = 2
RADIUS = 2
LAMBDA = 10
FILL = 'red'

stop = 0                                # Set when main loop exits
root = None                             # main window

def particle(canvas):                   # particle = iterator over the moves
    r = RADIUS
    x = random.gauss(WIDTH/2.0, SIGMA)
    y = random.gauss(HEIGHT/2.0, SIGMA)
    p = canvas.create_oval(x-r, y-r, x+r, y+r, fill=FILL)
    while not stop:
        dx = random.gauss(0, BUZZ)
        dy = random.gauss(0, BUZZ)
        try:
            canvas.move(p, dx, dy)
        except TclError:
            break
        else:
            yield None

def move(particle): # move the particle at random time
    particle.next()
    dt = random.expovariate(LAMBDA)
    root.after(int(dt*1000), move, particle)

def main():
    global root, stop
    root = Tk()
    canvas = Canvas(root, width=WIDTH, height=HEIGHT)
    canvas.pack(fill='both', expand=1)
    np = 30
    if sys.argv[1:]:
        np = int(sys.argv[1])
    for i in range(np):                  # start the dance
        move(particle(canvas))
    try:
        root.mainloop()
    finally:
        stop = 1

if __name__ == '__main__':
    main()
PKb1�Z%L��tkinter/guido/brownian2.pyonu�[����
��^c@s�ddlTddlZddlZdZdZdZdZdZdZdZ	da
dad	�Z
d
�Zd�Zedkr�e�ndS(
i����(t*Ni�i,i
itrediccs�t}tjtdt�}tjtdt�}|j||||||||dt�}x_ts�tjdt	�}tjdt	�}y|j
|||�Wntk
r�PqcXdVqcWdS(Ng@tfilli(
tRADIUStrandomtgausstWIDTHtSIGMAtHEIGHTtcreate_ovaltFILLtstoptBUZZtmovetTclErrortNone(tcanvastrtxtytptdxtdy((s4/usr/lib64/python2.7/Demo/tkinter/guido/brownian2.pytparticles.	
cCs:|j�tjt�}tjt|d�t|�dS(Ni�(tnextRtexpovariatetLAMBDAtroottaftertintR
(Rtdt((s4/usr/lib64/python2.7/Demo/tkinter/guido/brownian2.pyR
"s
cCs�t�attdtdt�}|jdddd�d}tjdr`ttjd�}nx$t	|�D]}t
t|��qmWztj�Wdda
XdS(NtwidththeightRtbothtexpandii(tTkRtCanvasRRtpacktsystargvRtrangeR
RtmainloopR(Rtnpti((s4/usr/lib64/python2.7/Demo/tkinter/guido/brownian2.pytmain's	
t__main__(tTkinterRR&RRRRRRR
RRRRR
R,t__name__(((s4/usr/lib64/python2.7/Demo/tkinter/guido/brownian2.pyt<module>s 
			PKb1�Zե�))tkinter/guido/hanoi.pynu�[���# Animated Towers of Hanoi using Tk with optional bitmap file in
# background.
#
# Usage: tkhanoi [n [bitmapfile]]
#
# n is the number of pieces to animate; default is 4, maximum 15.
#
# The bitmap file can be any X11 bitmap file (look in
# /usr/include/X11/bitmaps for samples); it is displayed as the
# background of the animation.  Default is no bitmap.

# This uses Steen Lumholt's Tk interface
from Tkinter import *


# Basic Towers-of-Hanoi algorithm: move n pieces from a to b, using c
# as temporary.  For each move, call report()
def hanoi(n, a, b, c, report):
    if n <= 0: return
    hanoi(n-1, a, c, b, report)
    report(n, a, b)
    hanoi(n-1, c, b, a, report)


# The graphical interface
class Tkhanoi:

    # Create our objects
    def __init__(self, n, bitmap = None):
        self.n = n
        self.tk = tk = Tk()
        self.canvas = c = Canvas(tk)
        c.pack()
        width, height = tk.getint(c['width']), tk.getint(c['height'])

        # Add background bitmap
        if bitmap:
            self.bitmap = c.create_bitmap(width//2, height//2,
                                          bitmap=bitmap,
                                          foreground='blue')

        # Generate pegs
        pegwidth = 10
        pegheight = height//2
        pegdist = width//3
        x1, y1 = (pegdist-pegwidth)//2, height*1//3
        x2, y2 = x1+pegwidth, y1+pegheight
        self.pegs = []
        p = c.create_rectangle(x1, y1, x2, y2, fill='black')
        self.pegs.append(p)
        x1, x2 = x1+pegdist, x2+pegdist
        p = c.create_rectangle(x1, y1, x2, y2, fill='black')
        self.pegs.append(p)
        x1, x2 = x1+pegdist, x2+pegdist
        p = c.create_rectangle(x1, y1, x2, y2, fill='black')
        self.pegs.append(p)
        self.tk.update()

        # Generate pieces
        pieceheight = pegheight//16
        maxpiecewidth = pegdist*2//3
        minpiecewidth = 2*pegwidth
        self.pegstate = [[], [], []]
        self.pieces = {}
        x1, y1 = (pegdist-maxpiecewidth)//2, y2-pieceheight-2
        x2, y2 = x1+maxpiecewidth, y1+pieceheight
        dx = (maxpiecewidth-minpiecewidth) // (2*max(1, n-1))
        for i in range(n, 0, -1):
            p = c.create_rectangle(x1, y1, x2, y2, fill='red')
            self.pieces[i] = p
            self.pegstate[0].append(i)
            x1, x2 = x1 + dx, x2-dx
            y1, y2 = y1 - pieceheight-2, y2-pieceheight-2
            self.tk.update()
            self.tk.after(25)

    # Run -- never returns
    def run(self):
        while 1:
            hanoi(self.n, 0, 1, 2, self.report)
            hanoi(self.n, 1, 2, 0, self.report)
            hanoi(self.n, 2, 0, 1, self.report)
            hanoi(self.n, 0, 2, 1, self.report)
            hanoi(self.n, 2, 1, 0, self.report)
            hanoi(self.n, 1, 0, 2, self.report)

    # Reporting callback for the actual hanoi function
    def report(self, i, a, b):
        if self.pegstate[a][-1] != i: raise RuntimeError # Assertion
        del self.pegstate[a][-1]
        p = self.pieces[i]
        c = self.canvas

        # Lift the piece above peg a
        ax1, ay1, ax2, ay2 = c.bbox(self.pegs[a])
        while 1:
            x1, y1, x2, y2 = c.bbox(p)
            if y2 < ay1: break
            c.move(p, 0, -1)
            self.tk.update()

        # Move it towards peg b
        bx1, by1, bx2, by2 = c.bbox(self.pegs[b])
        newcenter = (bx1+bx2)//2
        while 1:
            x1, y1, x2, y2 = c.bbox(p)
            center = (x1+x2)//2
            if center == newcenter: break
            if center > newcenter: c.move(p, -1, 0)
            else: c.move(p, 1, 0)
            self.tk.update()

        # Move it down on top of the previous piece
        pieceheight = y2-y1
        newbottom = by2 - pieceheight*len(self.pegstate[b]) - 2
        while 1:
            x1, y1, x2, y2 = c.bbox(p)
            if y2 >= newbottom: break
            c.move(p, 0, 1)
            self.tk.update()

        # Update peg state
        self.pegstate[b].append(i)


# Main program
def main():
    import sys, string

    # First argument is number of pegs, default 4
    if sys.argv[1:]:
        n = string.atoi(sys.argv[1])
    else:
        n = 4

    # Second argument is bitmap file, default none
    if sys.argv[2:]:
        bitmap = sys.argv[2]
        # Reverse meaning of leading '@' compared to Tk
        if bitmap[0] == '@': bitmap = bitmap[1:]
        else: bitmap = '@' + bitmap
    else:
        bitmap = None

    # Create the graphical objects...
    h = Tkhanoi(n, bitmap)

    # ...and run!
    h.run()


# Call main when run as script
if __name__ == '__main__':
    main()
PKb1�Z���ootkinter/guido/dialog.pyonu�[����
Afc@sKddlTddlZd�Zd�Zd�ZedkrGe�ndS(i����(t*NcGs�t|dd�}|j|�|jd�t|dtdd�}|jdtdt�t|dtdd�}|jdtdt�t	|dd	d
|dd�}	|	jdt
d
ddtdddd�|rt|d|�}
|
jdtdddd�nt
�}g}d}
x�|D]�}t|d
|d||
d��}|j|�|
|kr�t|dtdd�}|jdtd
ddddd�|j�|jd|dtdddddddd�n.|jdtd
ddddddddd�|
d}
q!W|dkrA|jd||||d��n|j�}|j�|j�|j|�|j�|r�|j�n|j�S(Ntclass_tDialogtrelieftborderwidthitsidetfilltwidtht3ittexttfonts$-Adobe-Times-Medium-R-Normal-*-180-*texpandtpadxt3mtpadytbitmapitcommandcSs
|j|�S(N(tset(tvti((s1/usr/lib64/python2.7/Demo/tkinter/guido/dialog.pyt<lambda>(tt2mtin_tipadxtipadyt1ms<Return>cSs|j�|j|�fS(N(tflashR(tetbRR((s1/usr/lib64/python2.7/Demo/tkinter/guido/dialog.pyR:s	(tToplevelttitleticonnametFrametRAISEDtpacktTOPtBOTHtBOTTOMtMessagetRIGHTtLabeltLEFTtIntVartButtontappendtSUNKENtlifttbindt	focus_gettgrab_sett	focus_settwaitvartdestroytget(tmasterRR	RtdefaulttargstwttoptbottmsgtbmtvartbuttonsRtbutRtbdtoldFocus((s1/usr/lib64/python2.7/Demo/tkinter/guido/dialog.pytdialogsN

	(	
!
"
	




c	CsRttddddd�}dG|GHttddd	d
ddd
�}dG|GHdS(NsNot Respondings=The file server isn't responding right now; I'll keep trying.Ri����tOKspressed buttons
File ModifiedswFile "tcl.h" has been modified since the last time it was saved. Do you want to save it before exiting the application?twarningis	Save FilesDiscard ChangessReturn To Editor(RDt
mainWidget(R((s1/usr/lib64/python2.7/Demo/tkinter/guido/dialog.pytgoLs 			cCs}ddl}t�atjt�ttdddt�}|j�ttddd|j�}|jdt	�tj
�dS(Ni����R	sPress Here To StartRtExitR(tsysR!RGtPacktconfigR,RHR#texitR%tmainloop(RJtstarttendit((s1/usr/lib64/python2.7/Demo/tkinter/guido/dialog.pyttestas	

t__main__(tTkinterRJRDRHRQt__name__(((s1/usr/lib64/python2.7/Demo/tkinter/guido/dialog.pyt<module>s
	A		PKb1�Z��|
��tkinter/guido/MimeViewer.pynuȯ��#! /usr/bin/python2.7

# View a single MIME multipart message.
# Display each part as a box.

import string
from types import *
from Tkinter import *
from ScrolledText import ScrolledText

class MimeViewer:
    def __init__(self, parent, title, msg):
        self.title = title
        self.msg = msg
        self.frame = Frame(parent, {'relief': 'raised', 'bd': 2})
        self.frame.packing = {'expand': 0, 'fill': 'both'}
        self.button = Checkbutton(self.frame,
                             {'text': title,
                              'command': self.toggle})
        self.button.pack({'anchor': 'w'})
        headertext = msg.getheadertext(
                lambda x: x != 'received' and x[:5] != 'x400-')
        height = countlines(headertext, 4)
        if height:
            self.htext = ScrolledText(self.frame,
                              {'height': height,
                               'width': 80,
                               'wrap': 'none',
                               'relief': 'raised',
                               'bd': 2})
            self.htext.packing = {'expand': 1, 'fill': 'both',
                                  'after': self.button}
            self.htext.insert('end', headertext)
        else:
            self.htext = Frame(self.frame,
                               {'relief': 'raised', 'bd': 2})
            self.htext.packing = {'side': 'top',
                                  'ipady': 2,
                                  'fill': 'x',
                                  'after': self.button}
        body = msg.getbody()
        if type(body) == StringType:
            self.pad = None
            height = countlines(body, 10)
            if height:
                self.btext = ScrolledText(self.frame,
                                  {'height': height,
                                   'width': 80,
                                   'wrap': 'none',
                                   'relief': 'raised',
                                   'bd': 2})
                self.btext.packing = {'expand': 1,
                                      'fill': 'both'}
                self.btext.insert('end', body)
            else:
                self.btext = None
            self.parts = None
        else:
            self.pad = Frame(self.frame,
                             {'relief': 'flat', 'bd': 2})
            self.pad.packing = {'side': 'left', 'ipadx': 10,
                                'fill': 'y', 'after': self.htext}
            self.parts = []
            for i in range(len(body)):
                p = MimeViewer(self.frame,
                               '%s.%d' % (title, i+1),
                               body[i])
                self.parts.append(p)
            self.btext = None
        self.collapsed = 1
    def pack(self):
        self.frame.pack(self.frame.packing)
    def destroy(self):
        self.frame.destroy()
    def show(self):
        if self.collapsed:
            self.button.invoke()
    def toggle(self):
        if self.collapsed:
            self.explode()
        else:
            self.collapse()
    def collapse(self):
        self.collapsed = 1
        for comp in self.htext, self.btext, self.pad:
            if comp:
                comp.forget()
        if self.parts:
            for part in self.parts:
                part.frame.forget()
        self.frame.pack({'expand': 0})
    def explode(self):
        self.collapsed = 0
        for comp in self.htext, self.btext, self.pad:
            if comp: comp.pack(comp.packing)
        if self.parts:
            for part in self.parts:
                part.pack()
        self.frame.pack({'expand': 1})

def countlines(str, limit):
    i = 0
    n = 0
    while  n < limit:
        i = string.find(str, '\n', i)
        if i < 0: break
        n = n+1
        i = i+1
    return n

def main():
    import sys
    import getopt
    import mhlib
    opts, args = getopt.getopt(sys.argv[1:], '')
    for o, a in opts:
        pass
    message = None
    folder = 'inbox'
    for arg in args:
        if arg[:1] == '+':
            folder = arg[1:]
        else:
            message = string.atoi(arg)

    mh = mhlib.MH()
    f = mh.openfolder(folder)
    if not message:
        message = f.getcurrent()
    m = f.openmessage(message)

    root = Tk()
    tk = root.tk

    top = MimeViewer(root, '+%s/%d' % (folder, message), m)
    top.pack()
    top.show()

    root.minsize(1, 1)

    tk.mainloop()

if __name__ == '__main__': main()
PKb1�Z�|�D��tkinter/guido/paint.pyonu�[����
��^c@s`dZddlTdad
\aad�Zd�Zd�Zd�Z	e
dkr\e�nd	S(sA"Paint program by Dave Michell.

Subject: tkinter "paint" example
From: Dave Mitchell <davem@magnet.com>
To: python-list@cwi.nl
Date: Fri, 23 Jan 1998 12:18:05 -0500 (EST)

  Not too long ago (last week maybe?) someone posted a request
for an example of a paint program using Tkinter. Try as I might
I can't seem to find it in the archive, so i'll just post mine
here and hope that the person who requested it sees this!

  All this does is put up a canvas and draw a smooth black line
whenever you have the mouse button down, but hopefully it will
be enough to start with.. It would be easy enough to add some
options like other shapes or colors...

                                                yours,
                                                dave mitchell
                                                davem@magnet.com
i����(t*tupcCs]t�}t|�}|j�|jdt�|jdt�|jdt�|j�dS(Ns<Motion>s<ButtonPress-1>s<ButtonRelease-1>(tTktCanvastpacktbindtmotiontb1downtb1uptmainloop(troottdrawing_area((s0/usr/lib64/python2.7/Demo/tkinter/guido/paint.pytmains	
cCs
dadS(Ntdown(tb1(tevent((s0/usr/lib64/python2.7/Demo/tkinter/guido/paint.pyR'scCsdadadadS(NR(RtNonetxoldtyold(R((s0/usr/lib64/python2.7/Demo/tkinter/guido/paint.pyR,scCsetdkratdk	rLtdk	rL|jjtt|j|jdt�n|ja|jandS(NR
tsmooth(	RRRRtwidgettcreate_linetxtytTRUE(R((s0/usr/lib64/python2.7/Demo/tkinter/guido/paint.pyR2s
(	t__main__N(NN(t__doc__tTkinterRRRRRRRRt__name__(((s0/usr/lib64/python2.7/Demo/tkinter/guido/paint.pyt<module>s
						PKb1�Z�(�V��tkinter/guido/ManPage.pynu�[���# Widget to display a man page

import re
from Tkinter import *
from Tkinter import _tkinter
from ScrolledText import ScrolledText

# XXX These fonts may have to be changed to match your system
BOLDFONT = '*-Courier-Bold-R-Normal-*-120-*'
ITALICFONT = '*-Courier-Medium-O-Normal-*-120-*'

# XXX Recognizing footers is system dependent
# (This one works for IRIX 5.2 and Solaris 2.2)
footerprog = re.compile(
        '^     Page [1-9][0-9]*[ \t]+\|^.*Last change:.*[1-9][0-9]*\n')
emptyprog = re.compile('^[ \t]*\n')
ulprog = re.compile('^[ \t]*[Xv!_][Xv!_ \t]*\n')

# Basic Man Page class -- does not disable editing
class EditableManPage(ScrolledText):

    # Initialize instance
    def __init__(self, master=None, **cnf):
        # Initialize base class
        apply(ScrolledText.__init__, (self, master), cnf)

        # Define tags for formatting styles
        self.tag_config('X', underline=1)
        self.tag_config('!', font=BOLDFONT)
        self.tag_config('_', font=ITALICFONT)

        # Set state to idle
        self.fp = None
        self.lineno = 0

    # Test whether we are busy parsing a file
    def busy(self):
        return self.fp != None

    # Ensure we're not busy
    def kill(self):
        if self.busy():
            self._endparser()

    # Parse a file, in the background
    def asyncparsefile(self, fp):
        self._startparser(fp)
        self.tk.createfilehandler(fp, _tkinter.READABLE,
                                  self._filehandler)

    parsefile = asyncparsefile      # Alias

    # I/O handler used by background parsing
    def _filehandler(self, fp, mask):
        nextline = self.fp.readline()
        if not nextline:
            self._endparser()
            return
        self._parseline(nextline)

    # Parse a file, now (cannot be aborted)
    def syncparsefile(self, fp):
        from select import select
        def avail(fp=fp, tout=0.0, select=select):
            return select([fp], [], [], tout)[0]
        height = self.getint(self['height'])
        self._startparser(fp)
        while 1:
            nextline = fp.readline()
            if not nextline:
                break
            self._parseline(nextline)
        self._endparser()

    # Initialize parsing from a particular file -- must not be busy
    def _startparser(self, fp):
        if self.busy():
            raise RuntimeError, 'startparser: still busy'
        fp.fileno()             # Test for file-ness
        self.fp = fp
        self.lineno = 0
        self.ok = 0
        self.empty = 0
        self.buffer = None
        savestate = self['state']
        self['state'] = NORMAL
        self.delete('1.0', END)
        self['state'] = savestate

    # End parsing -- must be busy, need not be at EOF
    def _endparser(self):
        if not self.busy():
            raise RuntimeError, 'endparser: not busy'
        if self.buffer:
            self._parseline('')
        try:
            self.tk.deletefilehandler(self.fp)
        except TclError, msg:
            pass
        self.fp.close()
        self.fp = None
        del self.ok, self.empty, self.buffer

    # Parse a single line
    def _parseline(self, nextline):
        if not self.buffer:
            # Save this line -- we need one line read-ahead
            self.buffer = nextline
            return
        if emptyprog.match(self.buffer) >= 0:
            # Buffered line was empty -- set a flag
            self.empty = 1
            self.buffer = nextline
            return
        textline = self.buffer
        if ulprog.match(nextline) >= 0:
            # Next line is properties for buffered line
            propline = nextline
            self.buffer = None
        else:
            # Next line is read-ahead
            propline = None
            self.buffer = nextline
        if not self.ok:
            # First non blank line after footer must be header
            # -- skip that too
            self.ok = 1
            self.empty = 0
            return
        if footerprog.match(textline) >= 0:
            # Footer -- start skipping until next non-blank line
            self.ok = 0
            self.empty = 0
            return
        savestate = self['state']
        self['state'] = NORMAL
        if TkVersion >= 4.0:
            self.mark_set('insert', 'end-1c')
        else:
            self.mark_set('insert', END)
        if self.empty:
            # One or more previous lines were empty
            # -- insert one blank line in the text
            self._insert_prop('\n')
            self.lineno = self.lineno + 1
            self.empty = 0
        if not propline:
            # No properties
            self._insert_prop(textline)
        else:
            # Search for properties
            p = ''
            j = 0
            for i in range(min(len(propline), len(textline))):
                if propline[i] != p:
                    if j < i:
                        self._insert_prop(textline[j:i], p)
                        j = i
                    p = propline[i]
            self._insert_prop(textline[j:])
        self.lineno = self.lineno + 1
        self['state'] = savestate

    # Insert a string at the end, with at most one property (tag)
    def _insert_prop(self, str, prop = ' '):
        here = self.index(AtInsert())
        self.insert(AtInsert(), str)
        if TkVersion <= 4.0:
            tags = self.tag_names(here)
            for tag in tags:
                self.tag_remove(tag, here, AtInsert())
        if prop != ' ':
            self.tag_add(prop, here, AtInsert())

# Readonly Man Page class -- disables editing, otherwise the same
class ReadonlyManPage(EditableManPage):

    # Initialize instance
    def __init__(self, master=None, **cnf):
        cnf['state'] = DISABLED
        apply(EditableManPage.__init__, (self, master), cnf)

# Alias
ManPage = ReadonlyManPage

# Test program.
# usage: ManPage [manpage]; or ManPage [-f] file
# -f means that the file is nroff -man output run through ul -i
def test():
    import os
    import sys
    # XXX This directory may be different on your system
    MANDIR = '/usr/local/man/mann'
    DEFAULTPAGE = 'Tcl'
    formatted = 0
    if sys.argv[1:] and sys.argv[1] == '-f':
        formatted = 1
        del sys.argv[1]
    if sys.argv[1:]:
        name = sys.argv[1]
    else:
        name = DEFAULTPAGE
    if not formatted:
        if name[-2:-1] != '.':
            name = name + '.n'
        name = os.path.join(MANDIR, name)
    root = Tk()
    root.minsize(1, 1)
    manpage = ManPage(root, relief=SUNKEN, borderwidth=2)
    manpage.pack(expand=1, fill=BOTH)
    if formatted:
        fp = open(name, 'r')
    else:
        fp = os.popen('nroff -man %s | ul -i' % name, 'r')
    manpage.parsefile(fp)
    root.mainloop()

# Run the test program when called as a script
if __name__ == '__main__':
    test()
PKb1�Z`�xIItkinter/guido/hanoi.pycnu�[����
��^c@sIddlTd�Zddd��YZd�ZedkrEe�ndS(	i����(t*cCsX|dkrdSt|d||||�||||�t|d||||�dS(Nii(thanoi(tntatbtctreport((s0/usr/lib64/python2.7/Demo/tkinter/guido/hanoi.pyRs
tTkhanoicBs&eZdd�Zd�Zd�ZRS(cCs�||_t�|_}t|�|_}|j�|j|d�|j|d�}}|r�|j|d|dd|dd�|_nd}|d}|d}	|	|d|d	d}
}|
|||}}
g|_	|j
|
|||
d
d�}|j	j|�|
|	||	}
}|j
|
|||
d
d�}|j	j|�|
|	||	}
}|j
|
|||
d
d�}|j	j|�|jj�|d}|	dd}d|}gggg|_
i|_|	|d|
|d}
}|
|||}}
||dtd	|d	�}x�t|d
d�D]�}|j
|
|||
d
d�}||j|<|j
d
j|�|
|||}
}||d|
|d}}
|jj�|jjd�qFWdS(Ntwidththeightitbitmapt
foregroundtbluei
iitfilltblackiii����tredi(RtTkttktCanvastcanvastpacktgetintt
create_bitmapR
tpegstcreate_rectangletappendtupdatetpegstatetpiecestmaxtrangetafter(tselfRR
RRRR	tpegwidtht	pegheighttpegdisttx1ty1tx2ty2tptpieceheightt
maxpiecewidtht
minpiecewidthtdxti((s0/usr/lib64/python2.7/Demo/tkinter/guido/hanoi.pyt__init__sP	
'

	


	

cCs�x�t|jddd|j�t|jddd|j�t|jddd|j�t|jddd|j�t|jddd|j�t|jddd|j�qWdS(Niii(RRR(R ((s0/usr/lib64/python2.7/Demo/tkinter/guido/hanoi.pytrunNscCs�|j|d|kr t�n|j|d=|j|}|j}|j|j|�\}}}}	xO|j|�\}
}}}
|
|kr�Pn|j|dd�|jj�qiW|j|j|�\}}}}||d}x|j|�\}
}}}
|
|d}||kr$Pn||krF|j|dd�n|j|dd�|jj�q�W|
|}||t	|j|�d}xO|j|�\}
}}}
|
|kr�Pn|j|dd�|jj�q�W|j|j
|�dS(Ni����iii(RtRuntimeErrorRRtbboxRtmoveRRtlenR(R R-RRR(Rtax1tay1tax2tay2R$R%R&R'tbx1tby1tbx2tby2t	newcentertcenterR)t	newbottom((s0/usr/lib64/python2.7/Demo/tkinter/guido/hanoi.pyRXs@	
	""
N(t__name__t
__module__tNoneR.R/R(((s0/usr/lib64/python2.7/Demo/tkinter/guido/hanoi.pyRs1	
cCs�ddl}ddl}|jdr>|j|jd�}nd}|jdr�|jd}|ddkr{|d}q�d|}nd}t||�}|j�dS(Ni����iiiit@(tsyststringtargvtatoiRARR/(RCRDRR
th((s0/usr/lib64/python2.7/Demo/tkinter/guido/hanoi.pytmains




t__main__N((tTkinterRRRHR?(((s0/usr/lib64/python2.7/Demo/tkinter/guido/hanoi.pyt<module>
s

	e	PKb1�Zk>'��tkinter/guido/hello.pycnu�[����
��^c@s3ddlZddlTd�Zd�Ze�dS(i����N(t*cCsAt�}t|�}d|d<t|d<|j�|j�dS(NsHello, worldttexttcommand(tTktButtont
quit_callbacktpacktmainloop(troottbutton((s0/usr/lib64/python2.7/Demo/tkinter/guido/hello.pytmains	


cCstjd�dS(Ni(tsystexit(((s0/usr/lib64/python2.7/Demo/tkinter/guido/hello.pyRs(RtTkinterR
R(((s0/usr/lib64/python2.7/Demo/tkinter/guido/hello.pyt<module>s
		PKb1�Z�`&�CCtkinter/guido/brownian.pynu�[���# Brownian motion -- an example of a multi-threaded Tkinter program.

from Tkinter import *
import random
import threading
import time
import sys

WIDTH = 400
HEIGHT = 300
SIGMA = 10
BUZZ = 2
RADIUS = 2
LAMBDA = 10
FILL = 'red'

stop = 0                                # Set when main loop exits

def particle(canvas):
    r = RADIUS
    x = random.gauss(WIDTH/2.0, SIGMA)
    y = random.gauss(HEIGHT/2.0, SIGMA)
    p = canvas.create_oval(x-r, y-r, x+r, y+r, fill=FILL)
    while not stop:
        dx = random.gauss(0, BUZZ)
        dy = random.gauss(0, BUZZ)
        dt = random.expovariate(LAMBDA)
        try:
            canvas.move(p, dx, dy)
        except TclError:
            break
        time.sleep(dt)

def main():
    global stop
    root = Tk()
    canvas = Canvas(root, width=WIDTH, height=HEIGHT)
    canvas.pack(fill='both', expand=1)
    np = 30
    if sys.argv[1:]:
        np = int(sys.argv[1])
    for i in range(np):
        t = threading.Thread(target=particle, args=(canvas,))
        t.start()
    try:
        root.mainloop()
    finally:
        stop = 1

main()
PKb1�Z�Ṁ��tkinter/guido/dialog.pynuȯ��#! /usr/bin/python2.7

# A Python function that generates dialog boxes with a text message,
# optional bitmap, and any number of buttons.
# Cf. Ousterhout, Tcl and the Tk Toolkit, Figs. 27.2-3, pp. 269-270.

from Tkinter import *
import sys


def dialog(master, title, text, bitmap, default, *args):

    # 1. Create the top-level window and divide it into top
    # and bottom parts.

    w = Toplevel(master, class_='Dialog')
    w.title(title)
    w.iconname('Dialog')

    top = Frame(w, relief=RAISED, borderwidth=1)
    top.pack(side=TOP, fill=BOTH)
    bot = Frame(w, relief=RAISED, borderwidth=1)
    bot.pack(side=BOTTOM, fill=BOTH)

    # 2. Fill the top part with the bitmap and message.

    msg = Message(top, width='3i', text=text,
                  font='-Adobe-Times-Medium-R-Normal-*-180-*')
    msg.pack(side=RIGHT, expand=1, fill=BOTH, padx='3m', pady='3m')
    if bitmap:
        bm = Label(top, bitmap=bitmap)
        bm.pack(side=LEFT, padx='3m', pady='3m')

    # 3. Create a row of buttons at the bottom of the dialog.

    var = IntVar()
    buttons = []
    i = 0
    for but in args:
        b = Button(bot, text=but, command=lambda v=var,i=i: v.set(i))
        buttons.append(b)
        if i == default:
            bd = Frame(bot, relief=SUNKEN, borderwidth=1)
            bd.pack(side=LEFT, expand=1, padx='3m', pady='2m')
            b.lift()
            b.pack (in_=bd, side=LEFT,
                    padx='2m', pady='2m', ipadx='2m', ipady='1m')
        else:
            b.pack (side=LEFT, expand=1,
                    padx='3m', pady='3m', ipadx='2m', ipady='1m')
        i = i+1

    # 4. Set up a binding for <Return>, if there's a default,
    # set a grab, and claim the focus too.

    if default >= 0:
        w.bind('<Return>',
               lambda e, b=buttons[default], v=var, i=default:
               (b.flash(),
                v.set(i)))

    oldFocus = w.focus_get()
    w.grab_set()
    w.focus_set()

    # 5. Wait for the user to respond, then restore the focus
    # and return the index of the selected button.

    w.waitvar(var)
    w.destroy()
    if oldFocus: oldFocus.focus_set()
    return var.get()

# The rest is the test program.

def go():
    i = dialog(mainWidget,
               'Not Responding',
               "The file server isn't responding right now; "
               "I'll keep trying.",
               '',
               -1,
               'OK')
    print 'pressed button', i
    i = dialog(mainWidget,
               'File Modified',
               'File "tcl.h" has been modified since '
               'the last time it was saved. '
               'Do you want to save it before exiting the application?',
               'warning',
               0,
               'Save File',
               'Discard Changes',
               'Return To Editor')
    print 'pressed button', i

def test():
    import sys
    global mainWidget
    mainWidget = Frame()
    Pack.config(mainWidget)
    start = Button(mainWidget, text='Press Here To Start', command=go)
    start.pack()
    endit = Button(mainWidget, text="Exit", command=sys.exit)
    endit.pack(fill=BOTH)
    mainWidget.mainloop()

if __name__ == '__main__':
    test()
PKb1�Z�h��tkinter/guido/imagedraw.pyonu�[����
��^c@s9dZddlTddlZd�Zd�Ze�dS(sDraw on top of an imagei����(t*NcCs�tjd}t�}td|�}|j�|j�}}t|d|d|�}|jdddtd|�|j	�|j
dt�|j�dS(	Nitfiletwidththeightitanchortimages
<Button-1>(
tsystargvtTkt
PhotoImageRRtCanvastcreate_imagetNWtpacktbindtblobtmainloop(tfilenametroottimgtwthtcanv((s4/usr/lib64/python2.7/Demo/tkinter/guido/imagedraw.pytmains
	
c	CsX|j|j}}|j}d}|j||||||||dddd�dS(Nitfilltredtoutlinet(txtytwidgettcreate_oval(teventRRRtr((s4/usr/lib64/python2.7/Demo/tkinter/guido/imagedraw.pyRs	(t__doc__tTkinterRRR(((s4/usr/lib64/python2.7/Demo/tkinter/guido/imagedraw.pyt<module>s

		PKb1�Z)t�MIMItkinter/guido/AttrDialog.pyonu�[����
��^c@sddlTddd��YZdefd��YZdefd��YZdefd	��YZd
efd��YZddd
��YZdefd��YZdefd��YZdefd��YZ	de	fd��YZ
d�Zd�Zd�Z
e�dS(i����(t*tOptioncBs5eZeZd�Zd�Zd�Zdd�ZRS(cCs�||_||_|j|_|j|\|_|_|j|j�|_t	|j�|_
|j
jdt�t
|j
d|d�|_|jjdt�|j�|j�dS(Ntfillttextt:tside(tdialogtoptionttoptmastertoptionstdefaulttklasstvarclasstvartFrametframetpacktXtLabeltlabeltLEFTtupdatet	addoption(tselfRR((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyt__init__s		
cCs|jj�|j�dS(N(RtrefreshR(R((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR"s
cCsQy|jj|j|_Wntk
r9|j|_nX|jj|j�dS(N(RtcurrentRtKeyErrorRRtset(R((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR&s

cCsdS(N((Rte((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR-sN(	t__name__t
__module__t	StringVarR
RRRtNoneR(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRs
	
		t
BooleanOptioncBseZeZd�ZRS(cCsYt|jddddddd|jdtd	d
d|j�|_|jjdt�dS(
NRson/offtonvalueitoffvalueitvariabletrelieftborderwidthitcommandR(tCheckbuttonRRtRAISEDRtbuttonRtRIGHT(R((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR4s	(RR t
BooleanVarR
R(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR#0st
EnumOptioncBseZd�ZRS(c
Cs�t|jd|jdtdd�|_|jjdt�t|j�|_|j|jd<xF|j	j
|jD]1}|jjd|d|jd	|d
|j
�qpWdS(NttextvariableR'R(iRtmenuRR&tvalueR)(t
MenubuttonRRR+R,RR-tMenuR1RtclassesRtadd_radiobuttonR(Rtv((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRAs		(RR R(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR/?stStringOptioncBseZd�ZRS(c
Csft|jd|jdddtdd�|_|jjdtdtd	d
�|jjd|j	�dS(NR0twidthi
R'R(iRRtexpandis<Return>(
tEntryRRtSUNKENtentryRR-RtbindR(R((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRQs	(RR R(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR8OstReadonlyOptioncBseZd�ZRS(cCs8t|jd|jdt�|_|jjdt�dS(NR0tanchorR(RRRtERRR-(R((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR\s(RR R(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR?ZstDialogcBsPeZd�Zd�Zd�Zd�ZiZiZeZ	e
ZeZ
eZRS(cCsf||_|j�|j�t|j�|_|jj|jj�|jjdd�|j	�dS(Ni(
R	t
fixclassesRtToplevelRttitlet	__class__Rtminsizet
addchoices(RR	((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRcs	

cCsdS(N((R((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRltcCsdS(N((R((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRCnRIcCsi|_g}x0|jj�D]\}}|j||f�qW|j�x�|D]�\}\}}y|j|}Wntk
r�d}nXt|�tkr�|j	}n9|dkr�|j
}n!|dkr�|j}n	|j}|||�|j|<qSWdS(Ntunknowntbooleantreadonly(
tchoicesR
titemstappendtsortR5Rttypet	TupleTypet
enumoptiont
booleanoptiontreadonlyoptiontstringoption(Rtlisttktdctdtctcl((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRHps$	


	(RR RRRCRHR
R5R#RTR8RVR/RSR?RU(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRBas					t
PackDialogc
BsjeZd�Zd�Zdd*d��YZdeefd��YZdeefd��YZdee	fd	��YZ
d
eefd��YZi
d,d
6d-d6d.d6d/d6d0d6d1d6d2d6d3d6d4d6d5d 6d6d!6d7d"6d8d%6Zi	eeeeeeeeef	d6d&d6d'd6d&d(6eeeefd6d'd6d)d6eeeefd$6d'd6Z RS(9cCs||_tj||�dS(N(twidgetRBR(RR^((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR�s	cCs?|jj�|_|jj�|jd<|jj|jd<dS(Ns.classs.name(R^tinfoRtwinfo_classt_w(R((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR�st
packoptioncBseZdd�ZRS(cCse|jj�|_y*t|jjjdi|j|j6�Wn"tk
r`}|GH|j	�nXdS(N((
RtgetRtapplyRR^RRtTclErrorR(RRtmsg((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR�sN(RR R"R(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRb�sRTcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRT�sRScBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRS�sRVcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRV�sRUcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRU�stClasss.classtNames.nametWidgettaftertcentertAnchorR@tbeforetnotBooleanR:tnonetFillRtinitPadtipadxtipadytpadxtpadyRtSideRRKRLtExpandtpixel(N(NRg(NRh(NRi(RkRl(NRi(RnRo(RpRq(NRi(iRs(iRs(iRs(iRs(RRx(!RR RRRbR#RTR/RSR8RVR?RUR"R
tNtNERAtSEtStSWtWtNWtCENTERtNONERtYtBOTHtTOPR-tBOTTOMRR5(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR]�s>		

"tRemotePackDialogcBs�eZd�Zd�Zddd��YZdeefd��YZdeefd��YZdee	fd	��YZ
d
eefd��YZRS(
cCso||_||_||_|j�t|j�|_|jj|jd�|jjdd�|j�dS(Ns PackDialogi(	R	tappR^RRDRRERGRH(RR	R�R^((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR�s			
cCs�y4|jjj|jj|jdd|j��}Wntk
rO}|GHdSXi}xFtdt|�d�D],}||d}||d}|||<qoW|jj|jdd|j�|d<|j|d	<||_	dS(
NRR_iiitwinfotclasss.classs.name(
R	ttkt	splitlisttsendR�R^RetrangetlenR(RtwordsRftdicttitkeyR2((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR�s(
tremotepackoptioncBseZdd�ZRS(cCs�|jj�|_yN|jjj|jjdd|jjd|j|jjj	j
|j��Wn"tk
r�}|GH|j�nXdS(NRtconfigt-(
RRcRRR	R�R�R^RR�tmergeReR(RRRf((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR�s		
N(RR R"R(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR��sRTcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRT�sRScBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRS�sRVcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRV�sRUcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRU�s((
RR RRR�R#RTR/RSR8RVR?RU(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR��s	
	tWidgetDialogc
Bs�eZd�Zd�Zd�Zd�ZddTd��YZdeefd��YZdee	fd	��YZ
d
eefd��YZdee
fd
��YZi.eeeeeeeeef	d6dd6dd6dd6dd6dd6dd6dd6dd6dd 6dd!6dd"6dd#6d$d%6dd&6dd'6d(d)6dd*6d+d,6eeefd-6d.d/6dd06d1d26dd36d+d46d+d56eefd66dd76eeeee fd86d+d96d+d:6dd;6dd<6d=d>6dd?6dd@6ddA6ddB6d.dC6ddD6ddE6dFdG6dHdI6d.dJ6ddK6e!e"e#fdL6Z$ie%e&e'fdM6Z(ie%e'fdM6Z)ie(dN6e(dO6e(dP6e)dQ6e)dC6e(dR6e)dS6Z*RS(UcCs,||_|j�|_tj||�dS(N(R^R`RRBR(RR^((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR�s	cCst|jj|j�rpi}xF|j|j|jfD]+}x"|j�D]}||||<qHWq5W||_ndS(N(t
addclassesthas_keyRR5tkeys(RR5R[RX((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRCs	cCsI|jj�|_|j�|jj�|jd<|jj|jd<dS(Ns.classs.name(R^R�t
configurationRR`RRa(R((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRs
cCs�i|_i|_x^|jj�D]M\}}t|�dkr"|d|j|<|d|df|j|<q"q"Wd|jd<d	|jd<dS(
NiiiRgs.classRhs.name(NRg(NRh(RR
R�RNR�R"(RRXR7((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRs		"
twidgetoptioncBseZdd�ZRS(cCsU|jj�|_y|j|jj|j<Wn"tk
rP}|GH|j�nXdS(N(RRcRRR^RReR(RRRf((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRsN(RR R"R(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR�sRTcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRT%sRScBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRS&sRVcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRV'sRUcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRU(sRltintegertAspecttcolort
BackgroundtbitmaptBitmapRztBorderWidthRLRgtdoubletCloseEnoughR)tCommandRKtConfinetcursortCursortCursorWidthtDisabledForegroundtExportSelectiontfonttFontt
ForegroundtFromtgeometrytGeometrytHeightttimetInsertWidthtJustifytstringRtLengthR^tMenuNameRhtOffTimetOnTimetOrientRstRelieftRepeatDelaytRepeatIntervalt
ScrollCommandtScrollIncrementt	rectangletScrollRegiont	ShowValuetSetGridtSliderforegroundtSliderLengthtTexttTickIntervaltTotindext	UnderlineR&tVariabletValuetWidthtWraptStatetButtontRadiobuttonR*R;R3tSlider((+RR RRCRRR�R#RTR/RSR8RVR?RUR{R|RAR}R~RR�R�R�RR-t
HORIZONTALtVERTICALR+R<tFLATtRIDGEtGROOVER�tCHARtWORDR5tNORMALtACTIVEtDISABLEDt	_tristatet_bistateR�(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR��s�					
	"
tRemoteWidgetDialogcBs�eZd�Zd�Zddd��YZdeefd��YZdeefd��YZdee	fd	��YZ
d
eefd��YZRS(
cCsG||_||_|j|jdd|j�|_tj||�dS(NR�R�(R�R^R�RRBR(RR	R�R^((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRks		cCs�y1|jjj|jj|j|jd��}Wntk
rL}|GHdSXi}xL|D]D}|jjj|�}|dd}|f|d}|||<qZW||_|j�|j	|j
d<|j|j
d<dS(NR�iis.classs.name(R	R�R�R�R�R^ReR�RRR(RRNRfR�titemR�R�R2((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRts$
	
tremotewidgetoptioncBseZdd�ZRS(cCst|jj�|_y9|jjj|jj|jjdd|j|j�Wn"t	k
ro}|GH|j
�nXdS(NR�R�(RRcRRR	R�R�R^RReR(RRRf((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR�s		
N(RR R"R(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR��sRTcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRT�sRScBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRS�sRVcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRV�sRUcBseZRS((RR (((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyRU�s((
RR RRR�R#RTR/RSR8RVR?RU(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR�is			cCsddl}t�}|jdd�|jdrIt||jd�n�t|dd�}|jdddt�t|dddd�}|jdd�t	|dd	�}|j�t
|�}t|�}t
|�}t|�}t
|�}	t|�}
|j�dS(
Ni����itnameRR:RR,Rtcanvas(
tsystTkRGtargvt
remotetestRRR�R�tCanvasR]R�tmainloop(R�trootRR,R�tfpdtfwdtbpdtbwdtcpdtcwd((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyttest�s$	

cCs<ddlm}|||�}|jdt�||_dS(Ni����(tlisttrees<Any-Double-1>(R�R>topendialogsR�(R�R�R�RW((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR��scCs�ddl}|j}|j�}x�|D]}|j|�}|j|�d}t||j|�|dkruq(nyt||j|�Wq(tk
r�}|GHq(Xq(WdS(Ni����it.(	R�R^tcurselectionRctsplitR�R�R�Re(RR�RWtselR�R�R^Rf((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyR��s	
N(((tTkinterRR#R/R8R?RBR]R�R�R�R�R�R�(((s5/usr/lib64/python2.7/Demo/tkinter/guido/AttrDialog.pyt<module>s
.67m2			PKb1�Z.�V�ootkinter/guido/wish.pynu�[���# This is about all it requires to write a wish shell in Python!

import _tkinter
import os

tk = _tkinter.create(os.environ['DISPLAY'], 'wish', 'Tk', 1)
tk.call('update')

cmd = ''

while 1:
    if cmd: prompt = ''
    else: prompt = '% '
    try:
        line = raw_input(prompt)
    except EOFError:
        break
    cmd = cmd + (line + '\n')
    if tk.getboolean(tk.call('info', 'complete', cmd)):
        tk.record(line)
        try:
            result = tk.call('eval', cmd)
        except _tkinter.TclError, msg:
            print 'TclError:', msg
        else:
            if result: print result
        cmd = ''
PKb1�ZE`}eR	R	tkinter/guido/electrons.pyonu�[����
Afc@sLddlTddlZddd��YZd�ZedkrHe�ndS(i����(t*Nt	ElectronscBs&eZdd�Zd�Zd�ZRS(c
Cs||_t�|_}t|�|_}|j�|j|d�|j|d�}}|r�|j|d|dd|dd�|_ng|_	d
\}}}	}
xWt
|�D]I}|j|||	|
dd�}|j	j|�|d|
d}}
q�W|jj
�dS(Ntwidththeightitbitmapt
foregroundtbluei
iFiiJtfilltred(i
iFiiJ(tntTkttktCanvastcanvastpacktgetintt
create_bitmapRtpiecestrangetcreate_ovaltappendtupdate(
tselfR	RRtcRRtx1ty1tx2ty2titp((s4/usr/lib64/python2.7/Demo/tkinter/guido/electrons.pyt__init__s 	
'	cCsq|j}xT|jD]I}tjtdd��}tjtdd��}|j|||�qW|jj�dS(Ni����ii����(R
RtrandomtchoiceRtmoveRR(RR	RRtxty((s4/usr/lib64/python2.7/Demo/tkinter/guido/electrons.pytrandom_move+s	cCshy+x$td�D]}|j|j�qWWn6tk
rcy|jj�Wqdtk
r_qdXnXdS(Ni�(RR$R	tTclErrorRtdestroy(RR((s4/usr/lib64/python2.7/Demo/tkinter/guido/electrons.pytrun4s

N(t__name__t
__module__tNoneRR$R'(((s4/usr/lib64/python2.7/Demo/tkinter/guido/electrons.pyRs		cCs�ddl}ddl}|jdr>|j|jd�}nd}|jdr�|jd}|ddkr{|d}q�d|}nd}t||�}|j�dS(Ni����iiiit@(tsyststringtargvtatoiR*RR'(R,R-R	Rth((s4/usr/lib64/python2.7/Demo/tkinter/guido/electrons.pytmain@s




t__main__((tTkinterRRR1R((((s4/usr/lib64/python2.7/Demo/tkinter/guido/electrons.pyt<module>s

-	PKb1�Zqf�XX tkinter/guido/newmenubardemo.pyonu�[����
Afc@sFdZddlTddd��YZd�ZedkrBe�ndS(	s.Play with the new Tk 8.0 toplevel menu option.i����(t*tAppcBseZd�ZRS(cCsu||_t|j�|_t|j�|_|jjdd�|jjdd�|jjdd�|jj�|jjddd|jj�t|j�|_|jjdd�|jjdd�|jjdd	�t|jd
d�|_|jjdd�|jj	dd
d|j�|jj	ddd|j�|jj	ddd|j�t
d|j�|_dS(NtlabeltNewsOpen...tClosetQuittcommandtCuttCopytPastetnamethelpsAbout...tFiletmenutEdittHelp(tmastertMenutmenubartfilemenutadd_commandt
add_separatortquitteditmenuthelpmenutadd_cascadetToplevelttop(tselfR((s9/usr/lib64/python2.7/Demo/tkinter/guido/newmenubardemo.pyt__init__	s$	
(t__name__t
__module__R(((s9/usr/lib64/python2.7/Demo/tkinter/guido/newmenubardemo.pyRscCs-t�}|j�t|�}|j�dS(N(tTktwithdrawRtmainloop(troottapp((s9/usr/lib64/python2.7/Demo/tkinter/guido/newmenubardemo.pytmain(s	
t__main__N((t__doc__tTkinterRR%R(((s9/usr/lib64/python2.7/Demo/tkinter/guido/newmenubardemo.pyt<module>s

!	PKb1�Z��V���tkinter/guido/rmt.pycnu�[����
Afc
@s�ddlTddlZe�ZejZeededd�Zejde	�ee�Z
e
jddde�ee
de
�Zejd	ede�ee
deddd
ejdd�Zejd	ededd�ejdd
d�ejed<ejd�ejd�eedddd�Zejd	e�ee�Zeed<eedd�Zejddddde�ejdddddej �d�Z!ej"de!�d�Z#ej"de#�d�Z$ej"d e$�d!�Z%ej"d"e%�d#�Z&ej"d$e&�d%�Z'ej"d&e'�ej"d'e'�ej"d(e'�d)�Z(d*�Z)d+�Z*d,�Z+e+ed-<ej,e�ej-�a.e)�ej/�ej0�dS(.i����(t*Ntrelieftborderwidthitfilltexpanditsidetyscrollcommandtsetgridtboldtfonts$-Adobe-Courier-Bold-R-Normal-*-120-*tcommandsTk Remote Controllers	Tk RemotettexttFilet	underlineitmenuttearofftlabelsSelect ApplicationtQuitcCs?|j}|j}tjdd�tjdt||��dS(Nstk_priv(selectMode)tchartanchor(txtytttsetvartmark_settAt(teRR((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pytsingle15s		s<1>cCs<|j}|j}tjdd�tjt||��dS(Nstk_priv(selectMode)tword(RRRRttk_textSelectToR(RRR((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pytdouble1=s		s
<Double-1>cCs<|j}|j}tjdd�tjt||��dS(Nstk_priv(selectMode)tline(RRRRRR(RRR((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pyttriple1Ds		s
<Triple-1>cCstjt�d�t�dS(Ns
(RtinserttAtInserttinvoke(R((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pyt	returnkeyKss<Return>cCsStjt�tj��tjt��tjt��ddkrOt�ndS(Ni����s.0(RR!R"t
selection_gettyview_pickplacetindexR#(R((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pytcontrolvPss<Control-v>cCsHtjd�tjd�krDtjdt��tjt��ndS(Nt	promptEndsinsert - 1 char(RR'tdeleteR"R&(R((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pyt	backspaceZss<BackSpace>s<Control-h>s<Delete>cCs�tjdt��}tjtjdd|��r�ttj�krZtjd|�}ntj	t|�}|r�tj
t�|d�nt�ntjt��dS(NspromptEnd + 1 chartinfotcompletetevals
(
RtgetR"t
getbooleanttktcalltapptroott
winfo_nametsendR!tpromptR&(tcmdtmsg((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pyR#is
cCs>tjt�td�tjdd�tjddd�dS(Ns: R)sinsert - 1 charRsinsert linestart(RR!R"R3Rttag_add(((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pyR7uscCsA|atjdd�tjd|d�tjddd�dS(NspromptEnd linestartR)t:R(R3RR*R!R:(tappName((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pytnewApp~scCs�tjd�tjdd�tj�}t|�}|j�xR|D]J}ytj|d�Wntk
rsqFXtj	d|d|d��qFWdS(NR
itlastswinfo name .RcSs
t|�S(N(R=(tname((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pyt<lambda>�t(
tfile_m_appstaddR*R4t
winfo_interpstlisttsortR6tTclErrortadd_command(tnamesR?((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pytfillAppsMenu�s



	tpostcommand(1tTkintertsystTkR4R1tFrametRAISEDtmBartpacktXtftBOTHt	ScrollbartFLATtstRIGHTtYtTexttsetRtLEFTt
tag_configtyviewttitleticonnamet
MenubuttontfiletMenutfile_mRBtadd_cascadeRHtexitRtbindRR R$R(R+R#R7R=RJt
tk_menuBarR5R3tfocustmainloop(((s./usr/lib64/python2.7/Demo/tkinter/guido/rmt.pyt<module>s^
		'



												


PKb1�ZKѴ�Q�Qtkinter/guido/solitaire.pyonu�[����
Afc@sCdZddlZddlZddlTddlmZmZmZmZdefd��YZdZ	dZ
d	Ze	d
eZe
deZ
dZd
ZdZdZdZdZdZdZiZxeefD]Zeee<q�WxeefD]Zeee<q�Wej�Zee�ZdZdZdZdZe dd�Z!ee!�Z"ddge#e$e d
d��dddgZ%dZ&dd0d ��YZ'd!d1d"��YZ(d#e(fd$��YZ)d%�Z*d&e(fd'��YZ+d(e+fd)��YZ,d*e+fd+��YZ-d,d2d-��YZ.d.�Z/e0d/kr?e/�ndS(3s�Solitaire game, much like the one that comes with MS Windows.

Limitations:

- No cute graphical images for the playing cards faces or backs.
- No scoring or timer.
- No undo.
- No option to turn 3 cards at a time.
- No keyboard shortcuts.
- Less fancy animation when you win.
- The determination of which stack you drag to is more relaxed.

Apology:

I'm not much of a card player, so my terminology in these comments may
at times be a little unusual.  If you have suggestions, please let me
know!

i����N(t*(t	Rectanglet
CanvasTexttGrouptWindowRcBseZddd�ZRS(cCs|jj|j||�S(N(tcanvasttag_bindtid(tselftsequencetcommand((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytbind%sN(t__name__t
__module__tNoneR(((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR$sidi�i
iiis#070tHearttDiamondtClubtSpadetredtblackiiii
ittAtJtQtKitCardcBsMeZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	RS(s�A playing card.

    A card doesn't record to which stack it belongs; only the stack
    records this (it turns out that we always know this from the
    context, and this saves a ``double update'' with potential for
    inconsistencies).

    Public methods:

    moveto(x, y) -- move the card to an absolute position
    moveby(dx, dy) -- move the card by a relative offset
    tkraise() -- raise the card to the top of its stack
    showface(), showback() -- turn the card face up or down & raise it

    Public read-only instance variables:

    suit, value, color -- the card's suit, value and color
    face_shown -- true when the card is shown face up, else false

    Semi-public read-only instance variables (XXX should be made
    private):

    group -- the Canvas.Group representing the card
    x, y -- the position of the card's top left corner

    Private instance variables:

    __back, __rect, __text -- the canvas items making up the card

    (To show the card face up, the text item is placed in front of
    rect and the back is placed behind it.  To show it face down, this
    is reversed.  The card is created face down.)

    c
Cs||_||_t||_d|_d|_|_t|�|_dt	||f}t
|tdddtd|jd|�|_
|jj|j
�t|ddttdddd	�|_|jj|j�t|ttttttdddd
�|_|jj|j�dS(sCard constructor.

        Arguments are the card's suit and value, and the canvas widget.

        The card is created at position (0, 0), with its face down
        (adding it to a stack will position it according to that
        stack's rules).

        is%s  %sitanchortfillttexttoutlineRtwhitetblueN(tsuittvaluetCOLORtcolort
face_showntxtyRtgrouptVALNAMESRt	CARDWIDTHtNt_Card__texttaddtag_withtagRt
CARDHEIGHTt_Card__recttMARGINt_Card__back(RR!R"RR((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyt__init__�s"
		
	cCsd|j|jfS(s+Return a string for debug print statements.sCard(%r, %r)(R!R"(R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyt__repr__�scCs"|j||j||j�dS(s*Move the card to absolute position (x, y).N(tmovebyR&R'(RR&R'((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytmoveto�scCs7|j||_|j||_|jj||�dS(sMove the card by (dx, dy).N(R&R'R(tmove(Rtdxtdy((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR4�scCs|jj�dS(s5Raise the card above all other objects in its canvas.N(R(ttkraise(R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR9�scCs1|j�|jj�|jj�d|_dS(sTurn the card's face up.iN(R9R/R,R%(R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytshowface�s


cCs1|j�|jj�|jj�d|_dS(sTurn the card's face down.iN(R9R/R1R%(R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytshowback�s


(
RR
t__doc__R2R3R5R4R9R:R;(((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRss#	 					tStackcBs�eZdZdd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
d�Zd�Zd
�Zd�Zd�ZdZd�Zd�Zd�ZRS(s�A generic stack of cards.

    This is used as a base class for all other stacks (e.g. the deck,
    the suit stacks, and the row stacks).

    Public methods:

    add(card) -- add a card to the stack
    delete(card) -- delete a card from the stack
    showtop() -- show the top card (if any) face up
    deal() -- delete and return the top card, or None if empty

    Method that subclasses may override:

    position(card) -- move the card to its proper (x, y) position

        The default position() method places all cards at the stack's
        own (x, y) position.

    userclickhandler(), userdoubleclickhandler() -- called to do
    subclass specific things on single and double clicks

        The default user (single) click handler shows the top card
        face up.  The default user double click handler calls the user
        single click handler.

    usermovehandler(cards) -- called to complete a subpile move

        The default user move handler moves all moved cards back to
        their original position (by calling the position() method).

    Private methods:

    clickhandler(event), doubleclickhandler(event),
    motionhandler(event), releasehandler(event) -- event handlers

        The default event handlers turn the top card of the stack with
        its face up on a (single or double) click, and also support
        moving a subpile around.

    startmoving(event) -- begin a move operation
    finishmoving() -- finish a move operation

    cCs�||_||_||_g|_t|jj�|_|jjd|j�|jjd|j	�|jjd|j
�|jjd|j�|j�dS(sStack constructor.

        Arguments are the stack's nominal x and y position (the top
        left corner of the first card placed in the stack), and the
        game object (which is used to get the canvas; subclasses use
        the game object to find other stacks).

        s<1>s
<Double-1>s<B1-Motion>s<ButtonRelease-1>N(
R&R'tgametcardsRRR(Rtclickhandlertdoubleclickhandlert
motionhandlertreleasehandlert
makebottom(RR&R'R>((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR2s					cCsdS(N((R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRDscCsd|jj|j|jfS(s+Return a string for debug print statements.s
%s(%d, %d)(t	__class__RR&R'(R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR3scCs>|jj|�|j�|j|�|jj|j�dS(N(R?tappendR9tpositionR(R-(Rtcard((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytadd%s

cCs'|jj|�|jj|j�dS(N(R?tremoveR(tdtag(RRH((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytdelete+scCs!|jr|jdj�ndS(Ni����(R?R:(R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytshowtop/s	cCs+|js
dS|jd}|j|�|S(Ni����(R?RRL(RRH((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytdeal3s
	

cCs|j|j|j�dS(N(R5R&R'(RRH((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRG<scCs|j�dS(N(RM(R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytuserclickhandler?scCs|j�dS(N(RO(R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytuserdoubleclickhandlerBscCs"x|D]}|j|�qWdS(N(RG(RR?RH((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytusermovehandlerEs
cCs%|j�|j�|j|�dS(N(tfinishmovingROtstartmoving(Rtevent((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR@Ks

cCs|j|�dS(N(t
keepmoving(RRT((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRBPscCs|j|�|j�dS(N(RURR(RRT((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRCSs
cCs%|j�|j�|j|�dS(N(RRRPRS(RRT((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRAWs

cCs�d|_|jjjd�}xDtt|j��D])}|j|}|jj	|kr4Pq4q4WdS|j
srdS|j||_|j|_|j
|_x|jD]}|j�q�WdS(Ntcurrent(RtmovingR>RtgettagstrangetlenR?R(ttagR%R&tlastxR'tlastyR9(RRTttagstiRH((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRS`s	
	cCs||js
dS|j|j}|j|j}|j|_|j|_|sQ|rxx$|jD]}|j||�q[WndS(N(RWR&R\R'R]R4(RRTR7R8RH((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRUqs	cCs,|j}d|_|r(|j|�ndS(N(RWRRQ(RR?((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRR|s		N(RR
R<RR2RDR3RIRLRMRNRGRORPRQR@RBRCRARWRSRURR(((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR=�s(-																	tDeckcBs2eZdZd�Zd�Zd�Zd�ZRS(s7The deck is a stack with support for shuffling.

    New methods:

    fill() -- create the playing cards
    shuffle() -- shuffle the playing cards

    A single click moves the top card to the game's open deck and
    moves it face up; if we're out of cards, it moves the open deck
    back to the deck.

    c
CsRt|jj|j|j|jt|jtdddt�}|jj	|�dS(NRRR(
RR>RR&R'R*R.t
BACKGROUNDR(R-(Rtbottom((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRD�s
cCsEx>tD]6}x-tD]%}|jt|||jj��qWqWdS(N(tALLSUITSt	ALLVALUESRIRR>R(RR!R"((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR�s

cCsMt|j�}g}x(t|�D]}|j|j|�q"W||_dS(N(RZR?trandpermRF(RtntnewcardsR_((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytshuffle�s
cCsv|jj}|j�}|sUxQ|j�}|s7Pn|j|�|j�q!Wn|jjj|�|j�dS(N(R>topendeckRNRIR;R:(RRiRH((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRO�s
(RR
R<RDRRhRO(((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR`�s

			cCsLt|�}g}x3|rGtj|�}|j|�|j|�qW|S(s4Function returning a random permutation of range(n).(RYtrandomtchoiceRFRJ(RftrR&R_((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRe�s	
t	OpenStackcBs#eZd�Zd�Zd�ZRS(cCsdS(Ni((RR?((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyt
acceptable�scCs�|d}|jj|�}|s?||ks?|j|�rRtj||�n8x(|D] }|j|�|j|�qYW|jj�dS(Ni(R>tcloseststackRnR=RQRLRItwincheck(RR?RHtstack((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRQ�s
#

cCs�|js
dS|jd}|js1|j�dSxQ|jjD]C}|j|g�r>|j|�|j|�|jj�Pq>q>WdS(Ni����(	R?R%ROR>tsuitsRnRLRIRp(RRHts((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRP�s	
	



(RR
RnRQRP(((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRm�s		t	SuitStackcBs,eZd�Zd�Zd�Zd�ZRS(c
CsBt|jj|j|j|jt|jtdddd�}dS(NRRRR(RR>RR&R'R*R.(RRb((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRD�scCsdS(N((R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRO�scCsdS(N((R((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRP�scCsit|�dkrdS|d}|js6|jtkS|jd}|j|jkoh|j|jdkS(Niii����(RZR?R"tACER!(RR?RHttopcard((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRn�s
	

(RR
RDRORPRn(((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRt�s			tRowStackcBseZd�Zd�ZRS(cCs`|d}|js |jtkS|jd}|js:dS|j|jko_|j|jdkS(Nii����i(R?R"tKINGR%R$(RR?RHRv((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRn�s
	

	cCsh|j}xE|jD]:}||kr)Pn|jrC|dt}q|t}qW|j|j|�dS(Ni(R'R?R%R0tOFFSETR5R&(RRHR'tc((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRGs		(RR
RnRG(((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRw�s		t	SolitairecBsGeZd�Zd�Zd�Zd�Zd�Zd�Zd�ZRS(cCs�||_t|jdtdddttddtdt�|_|jjdt	d	t
�t|jd
ddddtdd
d|j�|_
t|jtdtdd|j
dt�t}t}t|||�|_|t}t|||�|_|t}g|_x:tt�D],}|t}|jjt|||��qWt}|t}g|_x:tt�D],}|jjt|||��|t}qoW|jg|j|j|_|jj�|j�dS(Nt
backgroundthighlightthicknessitwidththeightiiRtexpandRtDealtactivebackgroundtgreenR
twindowR(tmastertCanvasRatNROWStXSPACINGtYSPACINGR0RtpacktBOTHtTRUEtButtonRNt
dealbuttonRtSWR`tdeckRmRiRrRYtNSUITSRFRttrowsRwt
openstacksR(RR�R&R'R_((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR2sD	


	
 
	
cCsEx*|jD]}t|j�tkr
dSq
W|j�|j�dS(N(RrRZR?tNVALUEStwinRN(RRs((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRp=s

cCsgg}x|jD]}||j}qWx9|rbtj|�}|j|�|j||j�q*WdS(sStupid animation when you win.N(R�R?RjRkRJtanimatedmovetoR�(RR?RsRH((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR�Ds	
cCsgx`tddd�D]L}|j|j||j|j|}}|j||�|jj�qWdS(Ni
ii����(RYR&R'R4R�tupdate_idletasks(RRHtdestR_R7R8((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR�Ns)cCsed}d}xR|jD]G}|j|jd|j|jd}||kr|}|}qqW|S(Ni�ɚ;i(RR�R&R'(RRHtclosesttcdistRqtdist((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRoTs&
cCs�|j�|jj�xHtt�D]:}x1|j|D]"}|jj�}|j|�q8Wq$Wx|jD]}|j�qlWdS(N(	tresetR�RhRYR�R�RNRIRM(RR_RlRH((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyRN`s

cCsOxH|jD]=}x4|j�}|s)Pn|jj|�|j�qWq
WdS(N(R�RNR�RIR;(RRqRH((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR�js(	RR
R2RpR�R�RoRNR�(((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyR{
s	.		
			
cCs6t�}t|�}|jd|j�|j�dS(NtWM_DELETE_WINDOW(tTkR{tprotocoltquittmainloop(trootR>((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pytmainvs	t__main__((((1R<tmathRjtTkinterR�RRRRR*R.R0R�R�RyRatHEARTStDIAMONDStCLUBStSPADEStREDtBLACKR#RstkeysRcRZR�RutJACKtQUEENRxRYRdR�tmaptstrR)R�RR=R`ReRmRtRwR{R�R(((s4/usr/lib64/python2.7/Demo/tkinter/guido/solitaire.pyt<module>sX
"
/f�1	i	PKb1�Za�A���tkinter/guido/newmenubardemo.pynuȯ��#! /usr/bin/python2.7

"""Play with the new Tk 8.0 toplevel menu option."""

from Tkinter import *

class App:

    def __init__(self, master):
        self.master = master

        self.menubar = Menu(self.master)

        self.filemenu = Menu(self.menubar)

        self.filemenu.add_command(label="New")
        self.filemenu.add_command(label="Open...")
        self.filemenu.add_command(label="Close")
        self.filemenu.add_separator()
        self.filemenu.add_command(label="Quit", command=self.master.quit)

        self.editmenu = Menu(self.menubar)

        self.editmenu.add_command(label="Cut")
        self.editmenu.add_command(label="Copy")
        self.editmenu.add_command(label="Paste")

        self.helpmenu = Menu(self.menubar, name='help')

        self.helpmenu.add_command(label="About...")

        self.menubar.add_cascade(label="File", menu=self.filemenu)
        self.menubar.add_cascade(label="Edit", menu=self.editmenu)
        self.menubar.add_cascade(label="Help", menu=self.helpmenu)

        self.top = Toplevel(menu=self.menubar)

        # Rest of app goes here...

def main():
    root = Tk()
    root.withdraw()
    app = App(root)
    root.mainloop()

if __name__ == '__main__':
    main()
PKb1�Z��I��tkinter/guido/rmt.pynuȯ��#! /usr/bin/python2.7

# A Python program implementing rmt, an application for remotely
# controlling other Tk applications.
# Cf. Ousterhout, Tcl and the Tk Toolkit, Figs. 27.5-8, pp. 273-276.

# Note that because of forward references in the original, we
# sometimes delay bindings until after the corresponding procedure is
# defined.  We also introduce names for some unnamed code blocks in
# the original because of restrictions on lambda forms in Python.

# XXX This should be written in a more Python-like style!!!

from Tkinter import *
import sys

# 1. Create basic application structure: menu bar on top of
# text widget, scrollbar on right.

root = Tk()
tk = root.tk
mBar = Frame(root, relief=RAISED, borderwidth=2)
mBar.pack(fill=X)

f = Frame(root)
f.pack(expand=1, fill=BOTH)
s = Scrollbar(f, relief=FLAT)
s.pack(side=RIGHT, fill=Y)
t = Text(f, relief=RAISED, borderwidth=2, yscrollcommand=s.set, setgrid=1)
t.pack(side=LEFT, fill=BOTH, expand=1)
t.tag_config('bold', font='-Adobe-Courier-Bold-R-Normal-*-120-*')
s['command'] = t.yview

root.title('Tk Remote Controller')
root.iconname('Tk Remote')

# 2. Create menu button and menus.

file = Menubutton(mBar, text='File', underline=0)
file.pack(side=LEFT)
file_m = Menu(file)
file['menu'] = file_m
file_m_apps = Menu(file_m, tearoff=0)
file_m.add_cascade(label='Select Application', underline=0,
                   menu=file_m_apps)
file_m.add_command(label='Quit', underline=0, command=sys.exit)

# 3. Create bindings for text widget to allow commands to be
# entered and information to be selected.  New characters
# can only be added at the end of the text (can't ever move
# insertion point).

def single1(e):
    x = e.x
    y = e.y
    t.setvar('tk_priv(selectMode)', 'char')
    t.mark_set('anchor', At(x, y))
    # Should focus W
t.bind('<1>', single1)

def double1(e):
    x = e.x
    y = e.y
    t.setvar('tk_priv(selectMode)', 'word')
    t.tk_textSelectTo(At(x, y))
t.bind('<Double-1>', double1)

def triple1(e):
    x = e.x
    y = e.y
    t.setvar('tk_priv(selectMode)', 'line')
    t.tk_textSelectTo(At(x, y))
t.bind('<Triple-1>', triple1)

def returnkey(e):
    t.insert(AtInsert(), '\n')
    invoke()
t.bind('<Return>', returnkey)

def controlv(e):
    t.insert(AtInsert(), t.selection_get())
    t.yview_pickplace(AtInsert())
    if t.index(AtInsert())[-2:] == '.0':
        invoke()
t.bind('<Control-v>', controlv)

# 4. Procedure to backspace over one character, as long as
# the character isn't part of the prompt.

def backspace(e):
    if t.index('promptEnd') != t.index('insert - 1 char'):
        t.delete('insert - 1 char', AtInsert())
        t.yview_pickplace(AtInsert())
t.bind('<BackSpace>', backspace)
t.bind('<Control-h>', backspace)
t.bind('<Delete>', backspace)


# 5. Procedure that's invoked when return is typed:  if
# there's not yet a complete command (e.g. braces are open)
# then do nothing.  Otherwise, execute command (locally or
# remotely), output the result or error message, and issue
# a new prompt.

def invoke():
    cmd = t.get('promptEnd + 1 char', AtInsert())
    if t.getboolean(tk.call('info', 'complete', cmd)): # XXX
        if app == root.winfo_name():
            msg = tk.call('eval', cmd) # XXX
        else:
            msg = t.send(app, cmd)
        if msg:
            t.insert(AtInsert(), msg + '\n')
        prompt()
    t.yview_pickplace(AtInsert())

def prompt():
    t.insert(AtInsert(), app + ': ')
    t.mark_set('promptEnd', 'insert - 1 char')
    t.tag_add('bold', 'insert linestart', 'promptEnd')

# 6. Procedure to select a new application.  Also changes
# the prompt on the current command line to reflect the new
# name.

def newApp(appName):
    global app
    app = appName
    t.delete('promptEnd linestart', 'promptEnd')
    t.insert('promptEnd', appName + ':')
    t.tag_add('bold', 'promptEnd linestart', 'promptEnd')

def fillAppsMenu():
    file_m_apps.add('command')
    file_m_apps.delete(0, 'last')
    names = root.winfo_interps()
    names = list(names)
    names.sort()
    for name in names:
        try:
            root.send(name, 'winfo name .')
        except TclError:
            # Inoperative window -- ignore it
            pass
        else:
            file_m_apps.add_command(
                label=name,
                command=lambda name=name: newApp(name))

file_m_apps['postcommand'] = fillAppsMenu
mBar.tk_menuBar(file)

# 7. Miscellaneous initialization.

app = root.winfo_name()
prompt()
t.focus()

root.mainloop()
PKb1�Z27O�::tkinter/guido/imageview.pyonu�[����
��^c@s*ddlTddlZd�Ze�dS(i����(t*NcCsOtjd}t�}td|�}t|d|�}|j�|j�dS(Nitfiletimage(tsystargvtTkt
PhotoImagetLabeltpacktmainloop(tfilenametroottimgtlabel((s4/usr/lib64/python2.7/Demo/tkinter/guido/imageview.pytmains
	
(tTkinterRR(((s4/usr/lib64/python2.7/Demo/tkinter/guido/imageview.pyt<module>s
	PKb1�Z"��@@tkinter/guido/kill.pyonu�[����
Afc@s�ddlTddlmZddlmZddlZddlZdefd��YZdefd��YZ	e
d	kr�e	dd
d�Zej
�jd�ej
�jd
d
�ej�ndS(i����(t*(tsplitfields(tsplitNt	BarButtoncBseZdd�ZRS(cKsOttj||f|�|jdt�t|dd�|_|j|d<dS(Ntsidetnametmenu(tapplyt
Menubuttont__init__tpacktLEFTtMenuR(tselftmastertcnf((s//usr/lib64/python2.7/Demo/tkinter/guido/kill.pyR	sN(t__name__t
__module__tNoneR	(((s//usr/lib64/python2.7/Demo/tkinter/guido/kill.pyR
stKillc
Bs_eZdddddddd gZd�Zd�Zd�Zd�Zd�Zd!d�Z	RS("tDefaulttitLongs-litUsers-uitJobss-jtSignals-stMemorys-mtVMs-vtHexs-XcCsI|j|jj�d}t|�|}tjd|�|j�dS(Niskill -9 (tformat_listtformattgetRtostsystemt	do_update(R
tselectedtctpid((s//usr/lib64/python2.7/Demo/tkinter/guido/kill.pytkillscCs�|j|jj�\}}}tjd|�}t|d�}|jj|d�|d=|jj	j�d}|jj
jdt��x$|D]}|jj
j
d|�q�W|jj
jt|��dS(Nsps -w s
i(RRRtcommandst	getoutputRtheadertsettframetvscrolltlisttdeletetAtEndtinserttyviewtint(R
RtoptiontcolumntsR-tytline((s//usr/lib64/python2.7/Demo/tkinter/guido/kill.pyR" s
cCs6|jjdt�|jj|jj|j��dS(Ni(twidgettselect_cleartENDt
select_settnearestR6(R
te((s//usr/lib64/python2.7/Demo/tkinter/guido/kill.pyt	do_motion+scCs|jjdt�dS(Ni(R8R9R:(R
R=((s//usr/lib64/python2.7/Demo/tkinter/guido/kill.pytdo_leave.scCs,|j|jj|jj|j���dS(N(R&R8RR<R6(R
R=((s//usr/lib64/python2.7/Demo/tkinter/guido/kill.pytdo_10sc
Ks
tj|||�|jdddt�t|dddtdd�|_|jjdt�t|jd	d
�|j_|jjj	j
ddd
|j�t|jd	d�|j_t
|�|_|jjd�xYtt|j��D]B}|jjj	jd|j|dd
|jd|jd|�q�W|jj|jj|jj�t|dtdd�|_|jjdddt�t|�|_t|jdtdtddd|j�|j_|jjjdt�t|jdt�|j_t |jdt!ddddd|jjj�|j_"|jj"j#|jjd
<|jjjdt$dt%�|jj"jdddt�t&|d	dd
|j�|_'|j'jdddt�|jj"j(d|j)�|jj"j(d|j*�|jj"j(d|j+�|j�dS(NtexpanditfillRtbartrelieftborderwidthittexttFiletlabeltQuittcommandtViewitvariabletvaluetanchorttextvariabletorienttselectbackgrounds#eed5b7tselectborderwidthtyscrollRtUpdates<Motion>s<Leave>s<1>(,tFrameR	R
tBOTHtRAISEDRCtXRtfileRtadd_commandtquittviewtIntVarRR*trangetlenRtadd_radiobuttonR"t
tk_menuBarR+t	StringVarR)tLabeltFLATtNWRHt	ScrollbartVERTICALR,tListboxtSUNKENR-R1tRIGHTtYtButtontupdatetbindR>R?R@(R
RRtnum((s//usr/lib64/python2.7/Demo/tkinter/guido/kill.pyR	2sP		(RRi(Rs-li(Rs-ui(Rs-ji(Rs-si(Rs-mi(Rs-vi(Rs-XiN(
RRRR&R"R>R?R@RR	(((s//usr/lib64/python2.7/Demo/tkinter/guido/kill.pyRs						t__main__REisTkinter Process Killeri(tTkintertstringRRR'R RRRURRRR&twinfo_toplevelttitletminsizetmainloop(((s//usr/lib64/python2.7/Demo/tkinter/guido/kill.pyt<module>s
MPKb1�Z.��,#,#tkinter/guido/tkman.pynuȯ��#! /usr/bin/python2.7

# Tk man page browser -- currently only shows the Tcl/Tk man pages

import sys
import os
import string
import re
from Tkinter import *
from ManPage import ManPage

MANNDIRLIST = ['/depot/sundry/man/mann','/usr/local/man/mann']
MAN3DIRLIST = ['/depot/sundry/man/man3','/usr/local/man/man3']

foundmanndir = 0
for dir in MANNDIRLIST:
    if os.path.exists(dir):
        MANNDIR = dir
        foundmanndir = 1

foundman3dir = 0
for dir in MAN3DIRLIST:
    if os.path.exists(dir):
        MAN3DIR = dir
        foundman3dir =  1

if not foundmanndir or not foundman3dir:
    sys.stderr.write('\n')
    if not foundmanndir:
        msg = """\
Failed to find mann directory.
Please add the correct entry to the MANNDIRLIST
at the top of %s script.""" % \
sys.argv[0]
        sys.stderr.write("%s\n\n" % msg)
    if not foundman3dir:
        msg = """\
Failed to find man3 directory.
Please add the correct entry to the MAN3DIRLIST
at the top of %s script.""" % \
sys.argv[0]
        sys.stderr.write("%s\n\n" % msg)
    sys.exit(1)

del foundmanndir
del foundman3dir

def listmanpages(mandir):
    files = os.listdir(mandir)
    names = []
    for file in files:
        if file[-2:-1] == '.' and  (file[-1] in 'ln123456789'):
            names.append(file[:-2])
    names.sort()
    return names

class SelectionBox:

    def __init__(self, master=None):
        self.choices = []

        self.frame = Frame(master, name="frame")
        self.frame.pack(expand=1, fill=BOTH)
        self.master = self.frame.master
        self.subframe = Frame(self.frame, name="subframe")
        self.subframe.pack(expand=0, fill=BOTH)
        self.leftsubframe = Frame(self.subframe, name='leftsubframe')
        self.leftsubframe.pack(side=LEFT, expand=1, fill=BOTH)
        self.rightsubframe = Frame(self.subframe, name='rightsubframe')
        self.rightsubframe.pack(side=RIGHT, expand=1, fill=BOTH)
        self.chaptervar = StringVar(master)
        self.chapter = Menubutton(self.rightsubframe, name='chapter',
                                  text='Directory', relief=RAISED,
                                  borderwidth=2)
        self.chapter.pack(side=TOP)
        self.chaptermenu = Menu(self.chapter, name='chaptermenu')
        self.chaptermenu.add_radiobutton(label='C functions',
                                         value=MAN3DIR,
                                         variable=self.chaptervar,
                                         command=self.newchapter)
        self.chaptermenu.add_radiobutton(label='Tcl/Tk functions',
                                         value=MANNDIR,
                                         variable=self.chaptervar,
                                         command=self.newchapter)
        self.chapter['menu'] = self.chaptermenu
        self.listbox = Listbox(self.rightsubframe, name='listbox',
                               relief=SUNKEN, borderwidth=2,
                               width=20, height=5)
        self.listbox.pack(expand=1, fill=BOTH)
        self.l1 = Button(self.leftsubframe, name='l1',
                         text='Display manual page named:',
                         command=self.entry_cb)
        self.l1.pack(side=TOP)
        self.entry = Entry(self.leftsubframe, name='entry',
                            relief=SUNKEN, borderwidth=2,
                            width=20)
        self.entry.pack(expand=0, fill=X)
        self.l2frame = Frame(self.leftsubframe, name='l2frame')
        self.l2frame.pack(expand=0, fill=NONE)
        self.l2 = Button(self.l2frame, name='l2',
                         text='Search regexp:',
                         command=self.search_cb)
        self.l2.pack(side=LEFT)
        self.casevar = BooleanVar()
        self.casesense = Checkbutton(self.l2frame, name='casesense',
                                     text='Case sensitive',
                                     variable=self.casevar,
                                     relief=FLAT)
        self.casesense.pack(side=LEFT)
        self.search = Entry(self.leftsubframe, name='search',
                            relief=SUNKEN, borderwidth=2,
                            width=20)
        self.search.pack(expand=0, fill=X)
        self.title = Label(self.leftsubframe, name='title',
                           text='(none)')
        self.title.pack(side=BOTTOM)
        self.text = ManPage(self.frame, name='text',
                            relief=SUNKEN, borderwidth=2,
                            wrap=NONE, width=72,
                            selectbackground='pink')
        self.text.pack(expand=1, fill=BOTH)

        self.entry.bind('<Return>', self.entry_cb)
        self.search.bind('<Return>', self.search_cb)
        self.listbox.bind('<Double-1>', self.listbox_cb)

        self.entry.bind('<Tab>', self.entry_tab)
        self.search.bind('<Tab>', self.search_tab)
        self.text.bind('<Tab>', self.text_tab)

        self.entry.focus_set()

        self.chaptervar.set(MANNDIR)
        self.newchapter()

    def newchapter(self):
        mandir = self.chaptervar.get()
        self.choices = []
        self.addlist(listmanpages(mandir))

    def addchoice(self, choice):
        if choice not in self.choices:
            self.choices.append(choice)
            self.choices.sort()
        self.update()

    def addlist(self, list):
        self.choices[len(self.choices):] = list
        self.choices.sort()
        self.update()

    def entry_cb(self, *e):
        self.update()

    def listbox_cb(self, e):
        selection = self.listbox.curselection()
        if selection and len(selection) == 1:
            name = self.listbox.get(selection[0])
            self.show_page(name)

    def search_cb(self, *e):
        self.search_string(self.search.get())

    def entry_tab(self, e):
        self.search.focus_set()

    def search_tab(self, e):
        self.entry.focus_set()

    def text_tab(self, e):
        self.entry.focus_set()

    def updatelist(self):
        key = self.entry.get()
        ok = filter(lambda name, key=key, n=len(key): name[:n]==key,
                 self.choices)
        if not ok:
            self.frame.bell()
        self.listbox.delete(0, AtEnd())
        exactmatch = 0
        for item in ok:
            if item == key: exactmatch = 1
            self.listbox.insert(AtEnd(), item)
        if exactmatch:
            return key
        n = self.listbox.size()
        if n == 1:
            return self.listbox.get(0)
        # Else return None, meaning not a unique selection

    def update(self):
        name = self.updatelist()
        if name:
            self.show_page(name)
            self.entry.delete(0, AtEnd())
            self.updatelist()

    def show_page(self, name):
        file = '%s/%s.?' % (self.chaptervar.get(), name)
        fp = os.popen('nroff -man %s | ul -i' % file, 'r')
        self.text.kill()
        self.title['text'] = name
        self.text.parsefile(fp)

    def search_string(self, search):
        if not search:
            self.frame.bell()
            print 'Empty search string'
            return
        if not self.casevar.get():
            map = re.IGNORECASE
        else:
            map = None
        try:
            if map:
                prog = re.compile(search, map)
            else:
                prog = re.compile(search)
        except re.error, msg:
            self.frame.bell()
            print 'Regex error:', msg
            return
        here = self.text.index(AtInsert())
        lineno = string.atoi(here[:string.find(here, '.')])
        end = self.text.index(AtEnd())
        endlineno = string.atoi(end[:string.find(end, '.')])
        wraplineno = lineno
        found = 0
        while 1:
            lineno = lineno + 1
            if lineno > endlineno:
                if wraplineno <= 0:
                    break
                endlineno = wraplineno
                lineno = 0
                wraplineno = 0
            line = self.text.get('%d.0 linestart' % lineno,
                                 '%d.0 lineend' % lineno)
            i = prog.search(line)
            if i >= 0:
                found = 1
                n = max(1, len(prog.group(0)))
                try:
                    self.text.tag_remove('sel',
                                         AtSelFirst(),
                                         AtSelLast())
                except TclError:
                    pass
                self.text.tag_add('sel',
                                  '%d.%d' % (lineno, i),
                                  '%d.%d' % (lineno, i+n))
                self.text.mark_set(AtInsert(),
                                   '%d.%d' % (lineno, i))
                self.text.yview_pickplace(AtInsert())
                break
        if not found:
            self.frame.bell()

def main():
    root = Tk()
    sb = SelectionBox(root)
    if sys.argv[1:]:
        sb.show_page(sys.argv[1])
    root.minsize(1, 1)
    root.mainloop()

main()
PKb1�Z~H�+��tkinter/guido/ShellWindow.pycnu�[����
��^c@s�ddlZddlZddlZddlTddlmZddlmZddlZdZdefd��YZdZ	d	�Z
d
�Zedkr�e�ndS(i����N(t*(tScrolledText(tDialogitShellWindowcBsheZd
d
d�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d�Zd	�ZRS(cKs|s>ytjd}Wntk
r0d}nX|d}ntj|�}|d}ttj||f|�d|_|j	d|j
�|j	d|j�|j	d|j�|j	d	|j
�|j	d
|j�t||�\|_|_|_|jj|jt|j�dS(NtSHELLs/bin/shs -iis1.0s<Return>s<Control-c>s<Control-t>s<Control-k>s<Control-d>(tostenvirontKeyErrortstringtsplittapplyRt__init__tpostbindtinputhandlertsiginttsigtermtsigkilltsendeoftspawntpidt	fromchildttochildttktcreatefilehandlertREADABLEt
outputhandler(tselftmastertshelltcnftargs((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyR
s$



	!c	Cstj|t�}|s�|jj|�tj|jd�\}}dG|GdG|GHd|_|d?}|d@}|dkr�d|}n%d|d@}|d	@r�|d
}nt|j	d|dd
dddddd�dS|j
t|�|jd�|_
|jt�dS(NiRtstatusii�sexit status %dskilled by signal %dii�s -- core dumpedttextttitlesExit statustbitmaptwarningtdefaulttstringstOKsend - 1 char(R'(RtreadtBUFSIZERtdeletefilehandlertwaitpidRtNoneRRtinserttENDtindexRtyview_pickplace(	RtfiletmasktdataRtststdetailtcausetmsg((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyR#s.	




cGse|js|j�dS|jtd�|j|jd�}|jt�|_tj|j	|�dS(Ntbreaks
send - 1 char(
Rt
no_processR-R.tgetRR/RtwriteR(RRtline((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyR=s	
cGs+|js|j�dStj|j�dS(NR8(RR9RtcloseR(RR((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyRGs
	
cCs.|js|j�dStj|j|�dS(NR8(RR9Rtkill(Rtsig((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pytsendsigNs
	
cGs|jtj�S(N(R@tsignaltSIGINT(RR((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyRUscGs|jtj�S(N(R@RAtSIGQUIT(RR((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pytsigquitXscGs|jtj�S(N(R@RAtSIGTERM(RR((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyR[scGs|jtj�S(N(R@RAtSIGKILL(RR((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyR^scCs/t|jddddddddd	d�dS(NR!sNo active processR"s
No processR#terrorR%iR&R'(R'(RR(R((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyR9asN(
t__name__t
__module__R,RRRRR@RRDRRR9(((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyRs		
						idcCs\tj�\}}tj�\}}tj�}|dkr5x6dD].}ytj|�WqCtjk
rpqCXqCWtj|�dkr�tjjd�ntj|�dkr�tjjd�ntj|�dkr�tjjd�ntj	dt
�ztj||�Wdtjjd�tjd�Xntj|�tj|�|||fS(	Niiispopen2: bad read dup
spopen2: bad write dup
isexecvp failed
(iii(
RtpipetforkR=RGtduptsyststderrR;t
closerangetMAXFDtexecvpt_exit(tprogRtp2creadtp2cwritetc2preadtc2pwriteRti((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyRks.


cCs�tjtjd�}t�}|jdd�|rJt|d|�}nt|�}|jdddt�|j	�|j
j�dS(NiRtexpandtfill(RtjoinRMtargvtTktminsizeRtpacktBOTHt	focus_setRtmainloop(Rtroottw((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyttest�s	
t__main__(
RRMRtTkinterRRRAR)RRPRReRH(((s6/usr/lib64/python2.7/Demo/tkinter/guido/ShellWindow.pyt<module>s
^		PKb1�Z�D���READMEnu�[���This directory contains various demonstrations of what you can do with
Python.  They were all written by me except where explicitly stated
otherwise -- in general, demos contributed by others ends up in the
../Contrib directory, unless I think they're of utmost general
importance (like Matt Conway's Tk demos).

A fair number of utilities that are useful when while developing
Python code can be found in the ../Tools directory -- some of these
can also be considered good examples of how to write Python code.

Finally, in order to save disk space and net bandwidth, not all
subdirectories listed here are distributed.  They are listed just
in case I change my mind about them.


cgi             CGI examples (see also ../Tools/faqwiz/.)

classes		Some examples of how to use classes.

comparisons	A set of responses to a really old language-comparison
		challenge.

curses		A set of curses demos.

embed		An example of embedding Python in another application
		(see also pysvr).

imputil		Demonstration subclasses of imputil.Importer.

md5test		Test program for the optional md5 module.

metaclasses	The code from the 1.5 metaclasses paper on the web.

parser		Example using the parser module.

pdist		Old, unfinished code messing with CVS, RCS and remote
		files.

pysvr		An example of embedding Python in a threaded
		application.

rpc		A set of classes for building clients and servers for
		Sun RPC.

scripts		Some useful Python scripts that I put in my bin
		directory.  No optional built-in modules needed.

sockets		Examples for the new built-in module 'socket'.

threads		Demos that use the 'thread' module.  (Currently these
		only run on SGIs, but this may change in the future.)

tix		Demos using the Tix widget set addition to Tkinter.

tkinter		Demos using the Tk interface (including Matt Conway's
		excellent set of demos).

xml		Some XML demos.

zlib		Some demos for the zlib module (see also the standard
		library module gzip.py).
PKb1�Z���<�	�	md5test/md5driver.pynu�[���import string
import md5
from sys import argv

def MDPrint(str):
    outstr = ''
    for i in str:
        o = ord(i)
        outstr = (outstr
                  + string.hexdigits[(o >> 4) & 0xF]
                  + string.hexdigits[o & 0xF])
    print outstr,


from time import time

def makestr(start, end):
    result = ''
    for i in range(start, end + 1):
        result = result + chr(i)

    return result


def MDTimeTrial():
    TEST_BLOCK_SIZE = 1000
    TEST_BLOCKS = 10000

    TEST_BYTES = TEST_BLOCK_SIZE * TEST_BLOCKS

    # initialize test data, need temporary string filler

    filsiz = 1 << 8
    filler = makestr(0, filsiz-1)
    data = filler * (TEST_BLOCK_SIZE // filsiz)
    data = data + filler[:(TEST_BLOCK_SIZE % filsiz)]

    del filsiz, filler


    # start timer
    print 'MD5 time trial. Processing', TEST_BYTES, 'characters...'
    t1 = time()

    mdContext = md5.new()

    for i in range(TEST_BLOCKS):
        mdContext.update(data)

    str = mdContext.digest()
    t2 = time()

    MDPrint(str)
    print 'is digest of test input.'
    print 'Seconds to process test input:', t2 - t1
    print 'Characters processed per second:', TEST_BYTES / (t2 - t1)


def MDString(str):
    MDPrint(md5.new(str).digest())
    print '"' + str + '"'


def MDFile(filename):
    f = open(filename, 'rb')
    mdContext = md5.new()

    while 1:
        data = f.read(1024)
        if not data:
            break
        mdContext.update(data)

    MDPrint(mdContext.digest())
    print filename


import sys

def MDFilter():
    mdContext = md5.new()

    while 1:
        data = sys.stdin.read(16)
        if not data:
            break
        mdContext.update(data)

    MDPrint(mdContext.digest())
    print


def MDTestSuite():
    print 'MD5 test suite results:'
    MDString('')
    MDString('a')
    MDString('abc')
    MDString('message digest')
    MDString(makestr(ord('a'), ord('z')))
    MDString(makestr(ord('A'), ord('Z'))
              + makestr(ord('a'), ord('z'))
              + makestr(ord('0'), ord('9')))
    MDString((makestr(ord('1'), ord('9')) + '0') * 8)

    # Contents of file foo are "abc"
    MDFile('foo')


# I don't wanna use getopt(), since I want to use the same i/f...
def main():
    if len(argv) == 1:
        MDFilter()
    for arg in argv[1:]:
        if arg[:2] == '-s':
            MDString(arg[2:])
        elif arg == '-t':
            MDTimeTrial()
        elif arg == '-x':
            MDTestSuite()
        else:
            MDFile(arg)

main()
PKb1�ZY���md5test/md5driver.pyonu�[����
��^c@s�ddlZddlZddlmZd�ZddlmZd�Zd�Zd�Zd�Z	ddlZd	�Z
d
�Zd�Ze�dS(i����N(targvcCsSd}xB|D]:}t|�}|tj|d?d@tj|d@}q
W|GdS(Ntii(tordtstringt	hexdigits(tstrtoutstrtito((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytMDPrints

,(ttimecCs8d}x+t||d�D]}|t|�}qW|S(NRi(trangetchr(tstarttendtresultR((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytmakestrscCs�d}d}||}d}td|d�}|||}|||| }~~dG|GdGHt�}tj�}x!t|�D]}|j|�q�W|j�}	t�}
t|	�dGHd	G|
|GHd
G||
|GHdS(Ni�i'iiisMD5 time trial. Processings
characters...sis digest of test input.sSeconds to process test input:s Characters processed per second:i(RR
tmd5tnewRtupdatetdigestR	(tTEST_BLOCK_SIZEtTEST_BLOCKSt
TEST_BYTEStfilsiztfillertdatatt1t	mdContextRRtt2((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytMDTimeTrials&

		

cCs*ttj|�j��d|dGHdS(Nt"(R	RRR(R((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytMDString;scCsat|d�}tj�}x*|jd�}|s7Pn|j|�qWt|j��|GHdS(Ntrbi(topenRRtreadRR	R(tfilenametfRR((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytMDFile@scCsQtj�}x-tjjd�}|s+Pn|j|�qWt|j��HdS(Ni(RRtsyststdinR#RR	R(RR((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytMDFilterPscCs�dGHtd�td�td�td�tttd�td���tttd�td��ttd�td��ttd	�td
���tttd�td
��d	d�td
�dS(NsMD5 test suite results:Rtatabcsmessage digesttztAtZt0t9t1itfoo(R RRR&(((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytMDTestSuite]s



N'cCs�tt�dkrt�nxitdD]]}|d dkrNt|d�q'|dkrdt�q'|dkrzt�q't|�q'WdS(Niis-ss-ts-x(tlenRR)R RR3R&(targ((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytmainns


(
RRR'RR	R
RRR R&R)R3R6(((s./usr/lib64/python2.7/Demo/md5test/md5driver.pyt<module>s	
		"			
		
PKb1�ZY���md5test/md5driver.pycnu�[����
��^c@s�ddlZddlZddlmZd�ZddlmZd�Zd�Zd�Zd�Z	ddlZd	�Z
d
�Zd�Ze�dS(i����N(targvcCsSd}xB|D]:}t|�}|tj|d?d@tj|d@}q
W|GdS(Ntii(tordtstringt	hexdigits(tstrtoutstrtito((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytMDPrints

,(ttimecCs8d}x+t||d�D]}|t|�}qW|S(NRi(trangetchr(tstarttendtresultR((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytmakestrscCs�d}d}||}d}td|d�}|||}|||| }~~dG|GdGHt�}tj�}x!t|�D]}|j|�q�W|j�}	t�}
t|	�dGHd	G|
|GHd
G||
|GHdS(Ni�i'iiisMD5 time trial. Processings
characters...sis digest of test input.sSeconds to process test input:s Characters processed per second:i(RR
tmd5tnewRtupdatetdigestR	(tTEST_BLOCK_SIZEtTEST_BLOCKSt
TEST_BYTEStfilsiztfillertdatatt1t	mdContextRRtt2((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytMDTimeTrials&

		

cCs*ttj|�j��d|dGHdS(Nt"(R	RRR(R((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytMDString;scCsat|d�}tj�}x*|jd�}|s7Pn|j|�qWt|j��|GHdS(Ntrbi(topenRRtreadRR	R(tfilenametfRR((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytMDFile@scCsQtj�}x-tjjd�}|s+Pn|j|�qWt|j��HdS(Ni(RRtsyststdinR#RR	R(RR((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytMDFilterPscCs�dGHtd�td�td�td�tttd�td���tttd�td��ttd�td��ttd	�td
���tttd�td
��d	d�td
�dS(NsMD5 test suite results:Rtatabcsmessage digesttztAtZt0t9t1itfoo(R RRR&(((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytMDTestSuite]s



N'cCs�tt�dkrt�nxitdD]]}|d dkrNt|d�q'|dkrdt�q'|dkrzt�q't|�q'WdS(Niis-ss-ts-x(tlenRR)R RR3R&(targ((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytmainns


(
RRR'RR	R
RRR R&R)R3R6(((s./usr/lib64/python2.7/Demo/md5test/md5driver.pyt<module>s	
		"			
		
PKb1�Z����md5test/READMEnu�[���This is the Python version of the MD5 test program from the MD5
Internet Draft (Rivest and Dusse, The MD5 Message-Digest Algorithm, 10
July 1991).  The file "foo" contains the string "abc" with no trailing
newline.

When called without arguments, it acts as a filter.  When called with
"-x", it executes a self-test, and the output should literally match
the output given in the RFC.

Code by Jan-Hein B\"uhrman after the original in C.
PKb1�Z�A$5md5test/foonu�[���abcPKb1�Z3�W�		xml/rss2html.pynu�[���"""
A demo that reads in an RSS XML document and emits an HTML file containing
a list of the individual items in the feed.
"""

import sys
import codecs

from xml.sax import make_parser, handler

# --- Templates

top = """\
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
  <title>%s</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>

<body>
<h1>%s</h1>
"""

bottom = """
</ul>

<hr>
<address>
Converted to HTML by rss2html.py.
</address>

</body>
</html>
"""

# --- The ContentHandler

class RSSHandler(handler.ContentHandler):

    def __init__(self, out=sys.stdout):
        handler.ContentHandler.__init__(self)
        self._out = codecs.getwriter('utf-8')(out)

        self._text = ""
        self._parent = None
        self._list_started = False
        self._title = None
        self._link = None
        self._descr = ""

    # ContentHandler methods

    def startElement(self, name, attrs):
        if name == "channel" or name == "image" or name == "item":
            self._parent = name

        self._text = ""

    def endElement(self, name):
        if self._parent == "channel":
            if name == "title":
                self._out.write(top % (self._text, self._text))
            elif name == "description":
                self._out.write("<p>%s</p>\n" % self._text)

        elif self._parent == "item":
            if name == "title":
                self._title = self._text
            elif name == "link":
                self._link = self._text
            elif name == "description":
                self._descr = self._text
            elif name == "item":
                if not self._list_started:
                    self._out.write("<ul>\n")
                    self._list_started = True

                self._out.write('  <li><a href="%s">%s</a> %s\n' %
                                (self._link, self._title, self._descr))

                self._title = None
                self._link = None
                self._descr = ""

        if name == "rss":
            self._out.write(bottom)

    def characters(self, content):
        self._text = self._text + content

# --- Main program

if __name__ == '__main__':
    parser = make_parser()
    parser.setContentHandler(RSSHandler())
    parser.parse(sys.argv[1])
PKb1�Z‘߀��xml/elem_count.pynu�[���"""
A simple demo that reads in an XML document and displays the number of
elements and attributes as well as a tally of elements and attributes by name.
"""

import sys
from collections import defaultdict

from xml.sax import make_parser, handler

class FancyCounter(handler.ContentHandler):

    def __init__(self):
        self._elems = 0
        self._attrs = 0
        self._elem_types = defaultdict(int)
        self._attr_types = defaultdict(int)

    def startElement(self, name, attrs):
        self._elems += 1
        self._attrs += len(attrs)
        self._elem_types[name] += 1

        for name in attrs.keys():
            self._attr_types[name] += 1

    def endDocument(self):
        print "There were", self._elems, "elements."
        print "There were", self._attrs, "attributes."

        print "---ELEMENT TYPES"
        for pair in  self._elem_types.items():
            print "%20s %d" % pair

        print "---ATTRIBUTE TYPES"
        for pair in  self._attr_types.items():
            print "%20s %d" % pair

if __name__ == '__main__':
    parser = make_parser()
    parser.setContentHandler(FancyCounter())
    parser.parse(sys.argv[1])
PKb1�Z�@=	=	xml/roundtrip.pyonu�[����
��^c@s�dZddlZddlmZmZmZdejfd��YZedkr�e�Z	e	j
e��e	jejd�ndS(ss
A simple demo that reads in an XML document and spits out an equivalent,
but not necessarily identical, document.
i����N(tsaxutilsthandlertmake_parsertContentGeneratorcBsMeZejd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
RS(cCstjj|�||_dS(N(RtContentHandlert__init__t_out(tselftout((s*/usr/lib64/python2.7/Demo/xml/roundtrip.pyRscCs|jjd�dS(Ns,<?xml version="1.0" encoding="iso-8859-1"?>
(Rtwrite(R((s*/usr/lib64/python2.7/Demo/xml/roundtrip.pyt
startDocumentscCsh|jjd|�x=|j�D]/\}}|jjd|tj|�f�q!W|jjd�dS(Nt<s %s="%s"t>(RR	titemsRtescape(Rtnametattrstvalue((s*/usr/lib64/python2.7/Demo/xml/roundtrip.pytstartElements'cCs|jjd|�dS(Ns</%s>(RR	(RR((s*/usr/lib64/python2.7/Demo/xml/roundtrip.pyt
endElementscCs|jjtj|��dS(N(RR	RR(Rtcontent((s*/usr/lib64/python2.7/Demo/xml/roundtrip.pyt
characters scCs|jj|�dS(N(RR	(RR((s*/usr/lib64/python2.7/Demo/xml/roundtrip.pytignorableWhitespace#scCs|jjd||f�dS(Ns	<?%s %s?>(RR	(Rttargettdata((s*/usr/lib64/python2.7/Demo/xml/roundtrip.pytprocessingInstruction&s(t__name__t
__module__tsyststdoutRR
RRRRR(((s*/usr/lib64/python2.7/Demo/xml/roundtrip.pyRs					t__main__i(
t__doc__Rtxml.saxRRRRRRtparsertsetContentHandlertparsetargv(((s*/usr/lib64/python2.7/Demo/xml/roundtrip.pyt<module>s	PKb1�ZI8��
�
xml/rss2html.pycnu�[����
��^c@s�dZddlZddlZddlmZmZdZdZdejfd��YZ	e
dkr�e�Zeje	��ej
ejd	�ndS(
sx
A demo that reads in an RSS XML document and emits an HTML file containing
a list of the individual items in the feed.
i����N(tmake_parserthandlers�<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
  <title>%s</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>

<body>
<h1>%s</h1>
sU
</ul>

<hr>
<address>
Converted to HTML by rss2html.py.
</address>

</body>
</html>
t
RSSHandlercBs2eZejd�Zd�Zd�Zd�ZRS(cCsbtjj|�tjd�|�|_d|_d|_t	|_
d|_d|_d|_
dS(Nsutf-8t(RtContentHandlert__init__tcodecst	getwritert_outt_texttNonet_parenttFalset
_list_startedt_titlet_linkt_descr(tselftout((s)/usr/lib64/python2.7/Demo/xml/rss2html.pyR)s					cCs=|dks$|dks$|dkr0||_nd|_dS(NtchanneltimagetitemR(RR	(Rtnametattrs((s)/usr/lib64/python2.7/Demo/xml/rss2html.pytstartElement6s$cCsb|jdkrg|dkr>|jjt|j|jf�q?|dkr?|jjd|j�q?n�|jdkr?|dkr�|j|_q?|dkr�|j|_q?|dkr�|j|_q?|dkr?|js�|jjd�t	|_n|jjd|j|j|jf�d|_d|_d	|_q?n|d
kr^|jjt�ndS(NRttitletdescriptions
<p>%s</p>
Rtlinks<ul>
s  <li><a href="%s">%s</a> %s
Rtrss(RRtwritettopR	RRRR
tTrueR
tbottom(RR((s)/usr/lib64/python2.7/Demo/xml/rss2html.pyt
endElement<s.#			cCs|j||_dS(N(R	(Rtcontent((s)/usr/lib64/python2.7/Demo/xml/rss2html.pyt
charactersYs(t__name__t
__module__tsyststdoutRRR!R#(((s)/usr/lib64/python2.7/Demo/xml/rss2html.pyR's
		t__main__i(t__doc__R&Rtxml.saxRRRR RRR$tparsertsetContentHandlertparsetargv(((s)/usr/lib64/python2.7/Demo/xml/rss2html.pyt<module>s7	PKb1�Z�I��&&xml/elem_count.pyonu�[����
��^c@s�dZddlZddlmZddlmZmZdejfd��YZe	dkr�e�Z
e
je��e
jej
d�ndS(	s�
A simple demo that reads in an XML document and displays the number of
elements and attributes as well as a tally of elements and attributes by name.
i����N(tdefaultdict(tmake_parserthandlertFancyCountercBs#eZd�Zd�Zd�ZRS(cCs4d|_d|_tt�|_tt�|_dS(Ni(t_elemst_attrsRtintt_elem_typest_attr_types(tself((s+/usr/lib64/python2.7/Demo/xml/elem_count.pyt__init__
s		cCse|jd7_|jt|�7_|j|cd7<x'|j�D]}|j|cd7<qDWdS(Ni(RRtlenRtkeysR(R	tnametattrs((s+/usr/lib64/python2.7/Demo/xml/elem_count.pytstartElements
cCstdG|jGdGHdG|jGdGHdGHx |jj�D]}d|GHq5WdGHx |jj�D]}d|GHq]WdS(Ns
There weres	elements.sattributes.s---ELEMENT TYPESs%20s %ds---ATTRIBUTE TYPES(RRRtitemsR(R	tpair((s+/usr/lib64/python2.7/Demo/xml/elem_count.pytendDocuments
(t__name__t
__module__R
RR(((s+/usr/lib64/python2.7/Demo/xml/elem_count.pyRs		t__main__i(t__doc__tsystcollectionsRtxml.saxRRtContentHandlerRRtparsertsetContentHandlertparsetargv(((s+/usr/lib64/python2.7/Demo/xml/elem_count.pyt<module>s	PKb1�Z�@=	=	xml/roundtrip.pycnu�[����
��^c@s�dZddlZddlmZmZmZdejfd��YZedkr�e�Z	e	j
e��e	jejd�ndS(ss
A simple demo that reads in an XML document and spits out an equivalent,
but not necessarily identical, document.
i����N(tsaxutilsthandlertmake_parsertContentGeneratorcBsMeZejd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
RS(cCstjj|�||_dS(N(RtContentHandlert__init__t_out(tselftout((s*/usr/lib64/python2.7/Demo/xml/roundtrip.pyRscCs|jjd�dS(Ns,<?xml version="1.0" encoding="iso-8859-1"?>
(Rtwrite(R((s*/usr/lib64/python2.7/Demo/xml/roundtrip.pyt
startDocumentscCsh|jjd|�x=|j�D]/\}}|jjd|tj|�f�q!W|jjd�dS(Nt<s %s="%s"t>(RR	titemsRtescape(Rtnametattrstvalue((s*/usr/lib64/python2.7/Demo/xml/roundtrip.pytstartElements'cCs|jjd|�dS(Ns</%s>(RR	(RR((s*/usr/lib64/python2.7/Demo/xml/roundtrip.pyt
endElementscCs|jjtj|��dS(N(RR	RR(Rtcontent((s*/usr/lib64/python2.7/Demo/xml/roundtrip.pyt
characters scCs|jj|�dS(N(RR	(RR((s*/usr/lib64/python2.7/Demo/xml/roundtrip.pytignorableWhitespace#scCs|jjd||f�dS(Ns	<?%s %s?>(RR	(Rttargettdata((s*/usr/lib64/python2.7/Demo/xml/roundtrip.pytprocessingInstruction&s(t__name__t
__module__tsyststdoutRR
RRRRR(((s*/usr/lib64/python2.7/Demo/xml/roundtrip.pyRs					t__main__i(
t__doc__Rtxml.saxRRRRRRtparsertsetContentHandlertparsetargv(((s*/usr/lib64/python2.7/Demo/xml/roundtrip.pyt<module>s	PKb1�Z�I��&&xml/elem_count.pycnu�[����
��^c@s�dZddlZddlmZddlmZmZdejfd��YZe	dkr�e�Z
e
je��e
jej
d�ndS(	s�
A simple demo that reads in an XML document and displays the number of
elements and attributes as well as a tally of elements and attributes by name.
i����N(tdefaultdict(tmake_parserthandlertFancyCountercBs#eZd�Zd�Zd�ZRS(cCs4d|_d|_tt�|_tt�|_dS(Ni(t_elemst_attrsRtintt_elem_typest_attr_types(tself((s+/usr/lib64/python2.7/Demo/xml/elem_count.pyt__init__
s		cCse|jd7_|jt|�7_|j|cd7<x'|j�D]}|j|cd7<qDWdS(Ni(RRtlenRtkeysR(R	tnametattrs((s+/usr/lib64/python2.7/Demo/xml/elem_count.pytstartElements
cCstdG|jGdGHdG|jGdGHdGHx |jj�D]}d|GHq5WdGHx |jj�D]}d|GHq]WdS(Ns
There weres	elements.sattributes.s---ELEMENT TYPESs%20s %ds---ATTRIBUTE TYPES(RRRtitemsR(R	tpair((s+/usr/lib64/python2.7/Demo/xml/elem_count.pytendDocuments
(t__name__t
__module__R
RR(((s+/usr/lib64/python2.7/Demo/xml/elem_count.pyRs		t__main__i(t__doc__tsystcollectionsRtxml.saxRRtContentHandlerRRtparsertsetContentHandlertparsetargv(((s+/usr/lib64/python2.7/Demo/xml/elem_count.pyt<module>s	PKb1�Z�d���xml/roundtrip.pynu�[���"""
A simple demo that reads in an XML document and spits out an equivalent,
but not necessarily identical, document.
"""

import sys

from xml.sax import saxutils, handler, make_parser

# --- The ContentHandler

class ContentGenerator(handler.ContentHandler):

    def __init__(self, out=sys.stdout):
        handler.ContentHandler.__init__(self)
        self._out = out

    # ContentHandler methods

    def startDocument(self):
        self._out.write('<?xml version="1.0" encoding="iso-8859-1"?>\n')

    def startElement(self, name, attrs):
        self._out.write('<' + name)
        for (name, value) in attrs.items():
            self._out.write(' %s="%s"' % (name, saxutils.escape(value)))
        self._out.write('>')

    def endElement(self, name):
        self._out.write('</%s>' % name)

    def characters(self, content):
        self._out.write(saxutils.escape(content))

    def ignorableWhitespace(self, content):
        self._out.write(content)

    def processingInstruction(self, target, data):
        self._out.write('<?%s %s?>' % (target, data))

# --- The main program

if __name__ == '__main__':
    parser = make_parser()
    parser.setContentHandler(ContentGenerator())
    parser.parse(sys.argv[1])
PKb1�ZI8��
�
xml/rss2html.pyonu�[����
��^c@s�dZddlZddlZddlmZmZdZdZdejfd��YZ	e
dkr�e�Zeje	��ej
ejd	�ndS(
sx
A demo that reads in an RSS XML document and emits an HTML file containing
a list of the individual items in the feed.
i����N(tmake_parserthandlers�<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
  <title>%s</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>

<body>
<h1>%s</h1>
sU
</ul>

<hr>
<address>
Converted to HTML by rss2html.py.
</address>

</body>
</html>
t
RSSHandlercBs2eZejd�Zd�Zd�Zd�ZRS(cCsbtjj|�tjd�|�|_d|_d|_t	|_
d|_d|_d|_
dS(Nsutf-8t(RtContentHandlert__init__tcodecst	getwritert_outt_texttNonet_parenttFalset
_list_startedt_titlet_linkt_descr(tselftout((s)/usr/lib64/python2.7/Demo/xml/rss2html.pyR)s					cCs=|dks$|dks$|dkr0||_nd|_dS(NtchanneltimagetitemR(RR	(Rtnametattrs((s)/usr/lib64/python2.7/Demo/xml/rss2html.pytstartElement6s$cCsb|jdkrg|dkr>|jjt|j|jf�q?|dkr?|jjd|j�q?n�|jdkr?|dkr�|j|_q?|dkr�|j|_q?|dkr�|j|_q?|dkr?|js�|jjd�t	|_n|jjd|j|j|jf�d|_d|_d	|_q?n|d
kr^|jjt�ndS(NRttitletdescriptions
<p>%s</p>
Rtlinks<ul>
s  <li><a href="%s">%s</a> %s
Rtrss(RRtwritettopR	RRRR
tTrueR
tbottom(RR((s)/usr/lib64/python2.7/Demo/xml/rss2html.pyt
endElement<s.#			cCs|j||_dS(N(R	(Rtcontent((s)/usr/lib64/python2.7/Demo/xml/rss2html.pyt
charactersYs(t__name__t
__module__tsyststdoutRRR!R#(((s)/usr/lib64/python2.7/Demo/xml/rss2html.pyR's
		t__main__i(t__doc__R&Rtxml.saxRRRR RRR$tparsertsetContentHandlertparsetargv(((s)/usr/lib64/python2.7/Demo/xml/rss2html.pyt<module>s7	PKb1�Z��J�==zlib/minigzip.pycnu�[����
Afc@s�ddlZddlZddlZd
\ZZZZZd�Zd�Z	d	�Z
d
�Zd�Ze
dkr|e�ndS(i����NiiiiicCs~|jt|d@��|d}|jt|d@��|d}|jt|d@��|d}|jt|d@��dS(Ni�i(twritetchr(toutputtvalue((s*/usr/lib64/python2.7/Demo/zlib/minigzip.pytwrite32s


cCspt|jd��}|t|jd��d>7}|t|jd��d>7}|t|jd��d>7}|S(Niiii(tordtread(tinputtv((s*/usr/lib64/python2.7/Demo/zlib/minigzip.pytread32s
cCs.|jd�|jtt��tj|�}|d}t||�|jd�|jd�|j|d�tjd�}tjdtj	tj
tjd�}xQtr�|j
d	�}|dkr�Pntj||�}|j|j|��q�W|j|j��t||�t||d
�dS(Ns�iss�sti	iii(RRtFNAMEtoststatRtzlibtcrc32tcompressobjtDEFLATEDt	MAX_WBITSt
DEF_MEM_LEVELtTrueRtcompresstflush(tfilenameRRtstatvaltmtimetcrcvaltcompobjtdata((s*/usr/lib64/python2.7/Demo/zlib/minigzip.pyRs(




	
c
Cs{|jd�}|dkr0dGHtjd�nt|jd��dkr`dGHtjd�nt|jd��}|jd�|t@r�t|jd��}|d	t|jd��7}|j|�n|t@rx,tr|jd�}|d
kr�Pq�q�Wn|t@r@x,tr<|jd�}|d
krPqqWn|t@rZ|jd�nt	j
t	j�}t	jd�}d}xgtr�|jd�}	|	dkr�Pn|j
|	�}
|j|
�|t|
�7}t	j|
|�}q�W|j�}
|j|
�|t|
�7}t	j|
|�}|jd
d�t|�}t|�}||krcdGHn||krwdGHndS(Nis�sNot a gzipped fileiiisUnknown compression methodiisR
ii����sCRC check failed.s!Incorrect length of data producedii(RtsystexitRtFEXTRARRtFCOMMENTtFHCRCRt
decompressobjRRt
decompressRtlenRtseekR	(
RRtmagictflagtxlentst	decompobjRtlengthRt
decompdataRtisize((s*/usr/lib64/python2.7/Demo/zlib/minigzip.pyR#1s^


	
	
	

cCs�ttj�dkr/dGHdGHtjd�ntjd}|jd�r^t}|d }nt}|d}t|d�}t|d	�}|r�t|||�n
t	||�|j
�|j
�dS(
NisUsage: minigzip.py <filename>s.  The file will be compressed or decompressed.iis.gzi����trbtwb(R$RtargvRtendswithtFalseRtopenRR#tclose(Rtcompressingt
outputnameRR((s*/usr/lib64/python2.7/Demo/zlib/minigzip.pytmainks"




t__main__(iiiii(RRRtFTEXTR!RRR RR	RR#R7t__name__(((s*/usr/lib64/python2.7/Demo/zlib/minigzip.pyt<module>s$				:	PKb1�ZtH���zlib/zlibdemo.pycnu�[����
Afc@s;ddlZddlZd�Zedkr7e�ndS(i����Nc	Cs�ttj�dkr%tjd}n
tjd}dG|GHt|d�}|j�}|j�tj|d�}tj|�}dGHdGt|�GdGt|�GdGt|�GHd	}tj	d
�}tj
�}d}}x>tdt|�|�D]$}||j||||!�}q�W||j�}x>tdt|�|�D]$}||j||||!�}qFW||j�}dGHdGt|�GdGt|�GdGt|�GHdS(
NiitReadingtrbs1-step compression: (level 1)s
    Original:sCompressed:s
Uncompressed:ii	ts"Progressive compression (level 9):(
tlentsystargvtopentreadtclosetzlibtcompresst
decompresstcompressobjt
decompressobjtrangetflush(	tfilenametftstcomptexttdecomptchunkt
compressortdecompressorti((s*/usr/lib64/python2.7/Demo/zlib/zlibdemo.pytmain	s2
	

""t__main__(R	RRt__name__(((s*/usr/lib64/python2.7/Demo/zlib/zlibdemo.pyt<module>s	&PKb1�ZtH���zlib/zlibdemo.pyonu�[����
Afc@s;ddlZddlZd�Zedkr7e�ndS(i����Nc	Cs�ttj�dkr%tjd}n
tjd}dG|GHt|d�}|j�}|j�tj|d�}tj|�}dGHdGt|�GdGt|�GdGt|�GHd	}tj	d
�}tj
�}d}}x>tdt|�|�D]$}||j||||!�}q�W||j�}x>tdt|�|�D]$}||j||||!�}qFW||j�}dGHdGt|�GdGt|�GdGt|�GHdS(
NiitReadingtrbs1-step compression: (level 1)s
    Original:sCompressed:s
Uncompressed:ii	ts"Progressive compression (level 9):(
tlentsystargvtopentreadtclosetzlibtcompresst
decompresstcompressobjt
decompressobjtrangetflush(	tfilenametftstcomptexttdecomptchunkt
compressortdecompressorti((s*/usr/lib64/python2.7/Demo/zlib/zlibdemo.pytmain	s2
	

""t__main__(R	RRt__name__(((s*/usr/lib64/python2.7/Demo/zlib/zlibdemo.pyt<module>s	&PKb1�Z��J�==zlib/minigzip.pyonu�[����
Afc@s�ddlZddlZddlZd
\ZZZZZd�Zd�Z	d	�Z
d
�Zd�Ze
dkr|e�ndS(i����NiiiiicCs~|jt|d@��|d}|jt|d@��|d}|jt|d@��|d}|jt|d@��dS(Ni�i(twritetchr(toutputtvalue((s*/usr/lib64/python2.7/Demo/zlib/minigzip.pytwrite32s


cCspt|jd��}|t|jd��d>7}|t|jd��d>7}|t|jd��d>7}|S(Niiii(tordtread(tinputtv((s*/usr/lib64/python2.7/Demo/zlib/minigzip.pytread32s
cCs.|jd�|jtt��tj|�}|d}t||�|jd�|jd�|j|d�tjd�}tjdtj	tj
tjd�}xQtr�|j
d	�}|dkr�Pntj||�}|j|j|��q�W|j|j��t||�t||d
�dS(Ns�iss�sti	iii(RRtFNAMEtoststatRtzlibtcrc32tcompressobjtDEFLATEDt	MAX_WBITSt
DEF_MEM_LEVELtTrueRtcompresstflush(tfilenameRRtstatvaltmtimetcrcvaltcompobjtdata((s*/usr/lib64/python2.7/Demo/zlib/minigzip.pyRs(




	
c
Cs{|jd�}|dkr0dGHtjd�nt|jd��dkr`dGHtjd�nt|jd��}|jd�|t@r�t|jd��}|d	t|jd��7}|j|�n|t@rx,tr|jd�}|d
kr�Pq�q�Wn|t@r@x,tr<|jd�}|d
krPqqWn|t@rZ|jd�nt	j
t	j�}t	jd�}d}xgtr�|jd�}	|	dkr�Pn|j
|	�}
|j|
�|t|
�7}t	j|
|�}q�W|j�}
|j|
�|t|
�7}t	j|
|�}|jd
d�t|�}t|�}||krcdGHn||krwdGHndS(Nis�sNot a gzipped fileiiisUnknown compression methodiisR
ii����sCRC check failed.s!Incorrect length of data producedii(RtsystexitRtFEXTRARRtFCOMMENTtFHCRCRt
decompressobjRRt
decompressRtlenRtseekR	(
RRtmagictflagtxlentst	decompobjRtlengthRt
decompdataRtisize((s*/usr/lib64/python2.7/Demo/zlib/minigzip.pyR#1s^


	
	
	

cCs�ttj�dkr/dGHdGHtjd�ntjd}|jd�r^t}|d }nt}|d}t|d�}t|d	�}|r�t|||�n
t	||�|j
�|j
�dS(
NisUsage: minigzip.py <filename>s.  The file will be compressed or decompressed.iis.gzi����trbtwb(R$RtargvRtendswithtFalseRtopenRR#tclose(Rtcompressingt
outputnameRR((s*/usr/lib64/python2.7/Demo/zlib/minigzip.pytmainks"




t__main__(iiiii(RRRtFTEXTR!RRR RR	RR#R7t__name__(((s*/usr/lib64/python2.7/Demo/zlib/minigzip.pyt<module>s$				:	PKb1�Zm��zlib/zlibdemo.pynuȯ��#! /usr/bin/python2.7

# Takes an optional filename, defaulting to this file itself.
# Reads the file and compresses the content using level 1 and level 9
# compression, printing a summary of the results.

import zlib, sys

def main():
    if len(sys.argv) > 1:
        filename = sys.argv[1]
    else:
        filename = sys.argv[0]
    print 'Reading', filename

    f = open(filename, 'rb')           # Get the data to compress
    s = f.read()
    f.close()

    # First, we'll compress the string in one step
    comptext = zlib.compress(s, 1)
    decomp = zlib.decompress(comptext)

    print '1-step compression: (level 1)'
    print '    Original:', len(s), 'Compressed:', len(comptext),
    print 'Uncompressed:', len(decomp)

    # Now, let's compress the string in stages; set chunk to work in smaller steps

    chunk = 256
    compressor = zlib.compressobj(9)
    decompressor = zlib.decompressobj()
    comptext = decomp = ''
    for i in range(0, len(s), chunk):
        comptext = comptext+compressor.compress(s[i:i+chunk])
    # Don't forget to call flush()!!
    comptext = comptext + compressor.flush()

    for i in range(0, len(comptext), chunk):
        decomp = decomp + decompressor.decompress(comptext[i:i+chunk])
    decomp=decomp+decompressor.flush()

    print 'Progressive compression (level 9):'
    print '    Original:', len(s), 'Compressed:', len(comptext),
    print 'Uncompressed:', len(decomp)

if __name__ == '__main__':
    main()
PKb1�Z�����zlib/minigzip.pynuȯ��#! /usr/bin/python2.7
# Demo program for zlib; it compresses or decompresses files, but *doesn't*
# delete the original.  This doesn't support all of gzip's options.
#
# The 'gzip' module in the standard library provides a more complete
# implementation of gzip-format files.

import zlib, sys, os

FTEXT, FHCRC, FEXTRA, FNAME, FCOMMENT = 1, 2, 4, 8, 16

def write32(output, value):
    output.write(chr(value & 255)) ; value=value // 256
    output.write(chr(value & 255)) ; value=value // 256
    output.write(chr(value & 255)) ; value=value // 256
    output.write(chr(value & 255))

def read32(input):
    v = ord(input.read(1))
    v += (ord(input.read(1)) << 8 )
    v += (ord(input.read(1)) << 16)
    v += (ord(input.read(1)) << 24)
    return v

def compress (filename, input, output):
    output.write('\037\213\010')        # Write the header, ...
    output.write(chr(FNAME))            # ... flag byte ...

    statval = os.stat(filename)           # ... modification time ...
    mtime = statval[8]
    write32(output, mtime)
    output.write('\002')                # ... slowest compression alg. ...
    output.write('\377')                # ... OS (=unknown) ...
    output.write(filename+'\000')       # ... original filename ...

    crcval = zlib.crc32("")
    compobj = zlib.compressobj(9, zlib.DEFLATED, -zlib.MAX_WBITS,
                             zlib.DEF_MEM_LEVEL, 0)
    while True:
        data = input.read(1024)
        if data == "":
            break
        crcval = zlib.crc32(data, crcval)
        output.write(compobj.compress(data))
    output.write(compobj.flush())
    write32(output, crcval)             # ... the CRC ...
    write32(output, statval[6])         # and the file size.

def decompress (input, output):
    magic = input.read(2)
    if magic != '\037\213':
        print 'Not a gzipped file'
        sys.exit(0)
    if ord(input.read(1)) != 8:
        print 'Unknown compression method'
        sys.exit(0)
    flag = ord(input.read(1))
    input.read(4+1+1)                   # Discard modification time,
                                        # extra flags, and OS byte.
    if flag & FEXTRA:
        # Read & discard the extra field, if present
        xlen = ord(input.read(1))
        xlen += 256*ord(input.read(1))
        input.read(xlen)
    if flag & FNAME:
        # Read and discard a null-terminated string containing the filename
        while True:
            s = input.read(1)
            if s == '\0': break
    if flag & FCOMMENT:
        # Read and discard a null-terminated string containing a comment
        while True:
            s=input.read(1)
            if s=='\0': break
    if flag & FHCRC:
        input.read(2)                   # Read & discard the 16-bit header CRC

    decompobj = zlib.decompressobj(-zlib.MAX_WBITS)
    crcval = zlib.crc32("")
    length = 0
    while True:
        data=input.read(1024)
        if data == "":
            break
        decompdata = decompobj.decompress(data)
        output.write(decompdata)
        length += len(decompdata)
        crcval = zlib.crc32(decompdata, crcval)

    decompdata = decompobj.flush()
    output.write(decompdata)
    length += len(decompdata)
    crcval = zlib.crc32(decompdata, crcval)

    # We've read to the end of the file, so we have to rewind in order
    # to reread the 8 bytes containing the CRC and the file size.  The
    # decompressor is smart and knows when to stop, so feeding it
    # extra data is harmless.
    input.seek(-8, 2)
    crc32 = read32(input)
    isize = read32(input)
    if crc32 != crcval:
        print 'CRC check failed.'
    if isize != length:
        print 'Incorrect length of data produced'

def main():
    if len(sys.argv)!=2:
        print 'Usage: minigzip.py <filename>'
        print '  The file will be compressed or decompressed.'
        sys.exit(0)

    filename = sys.argv[1]
    if filename.endswith('.gz'):
        compressing = False
        outputname = filename[:-3]
    else:
        compressing = True
        outputname = filename + '.gz'

    input = open(filename, 'rb')
    output = open(outputname, 'wb')

    if compressing:
        compress(filename, input, output)
    else:
        decompress(input, output)

    input.close()
    output.close()

if __name__ == '__main__':
    main()
PKb1�Z@GF��pdist/security.pyonu�[����
��^c@sddd��YZdS(tSecuritycBs,eZd�Zd�Zd�Zd�ZRS(cCsddl}|j}|jd�r1|d}n�d}|jd�rb|jj|d|�}n|jj|�s�ddl}xE|jD]7}|jj||�}|jj|�r�|}Pq�q�Wnytt|�j	��|_
Wntk
rtd|�nXdS(Ni����tPYTHON_KEYFILEs.python_keyfiletHOMEspython keyfile %s: cannot open(tostenvironthas_keytpathtjointexiststsystevaltopentreadlinet_keytIOError(tselfRtenvtkeyfileR	tdirtkf((s+/usr/lib64/python2.7/Demo/pdist/security.pyt__init__s$	

cCsddl}|jdd�S(Ni����idi��(trandomtrandint(RR((s+/usr/lib64/python2.7/Demo/pdist/security.pyt_generate_challengescCs|j|�|kS(N(t_encode_challenge(Rt	challengetresponse((s+/usr/lib64/python2.7/Demo/pdist/security.pyt_compare_challenge_responsescCs%|j\}}tt|�||�S(N(R
tpowtlong(RRtptm((s+/usr/lib64/python2.7/Demo/pdist/security.pyRs(t__name__t
__module__RRRR(((s+/usr/lib64/python2.7/Demo/pdist/security.pyRs			N((R(((s+/usr/lib64/python2.7/Demo/pdist/security.pyt<module>tPKb1�ZZ�>N(N(pdist/rcslib.pynu�[���"""RCS interface module.

Defines the class RCS, which represents a directory with rcs version
files and (possibly) corresponding work files.

"""


import fnmatch
import os
import re
import string
import tempfile


class RCS:

    """RCS interface class (local filesystem version).

    An instance of this class represents a directory with rcs version
    files and (possible) corresponding work files.

    Methods provide access to most rcs operations such as
    checkin/checkout, access to the rcs metadata (revisions, logs,
    branches etc.) as well as some filesystem operations such as
    listing all rcs version files.

    XXX BUGS / PROBLEMS

    - The instance always represents the current directory so it's not
    very useful to have more than one instance around simultaneously

    """

    # Characters allowed in work file names
    okchars = string.ascii_letters + string.digits + '-_=+'

    def __init__(self):
        """Constructor."""
        pass

    def __del__(self):
        """Destructor."""
        pass

    # --- Informational methods about a single file/revision ---

    def log(self, name_rev, otherflags = ''):
        """Return the full log text for NAME_REV as a string.

        Optional OTHERFLAGS are passed to rlog.

        """
        f = self._open(name_rev, 'rlog ' + otherflags)
        data = f.read()
        status = self._closepipe(f)
        if status:
            data = data + "%s: %s" % status
        elif data[-1] == '\n':
            data = data[:-1]
        return data

    def head(self, name_rev):
        """Return the head revision for NAME_REV"""
        dict = self.info(name_rev)
        return dict['head']

    def info(self, name_rev):
        """Return a dictionary of info (from rlog -h) for NAME_REV

        The dictionary's keys are the keywords that rlog prints
        (e.g. 'head' and its values are the corresponding data
        (e.g. '1.3').

        XXX symbolic names and locks are not returned

        """
        f = self._open(name_rev, 'rlog -h')
        dict = {}
        while 1:
            line = f.readline()
            if not line: break
            if line[0] == '\t':
                # XXX could be a lock or symbolic name
                # Anything else?
                continue
            i = string.find(line, ':')
            if i > 0:
                key, value = line[:i], string.strip(line[i+1:])
                dict[key] = value
        status = self._closepipe(f)
        if status:
            raise IOError, status
        return dict

    # --- Methods that change files ---

    def lock(self, name_rev):
        """Set an rcs lock on NAME_REV."""
        name, rev = self.checkfile(name_rev)
        cmd = "rcs -l%s %s" % (rev, name)
        return self._system(cmd)

    def unlock(self, name_rev):
        """Clear an rcs lock on NAME_REV."""
        name, rev = self.checkfile(name_rev)
        cmd = "rcs -u%s %s" % (rev, name)
        return self._system(cmd)

    def checkout(self, name_rev, withlock=0, otherflags=""):
        """Check out NAME_REV to its work file.

        If optional WITHLOCK is set, check out locked, else unlocked.

        The optional OTHERFLAGS is passed to co without
        interpretation.

        Any output from co goes to directly to stdout.

        """
        name, rev = self.checkfile(name_rev)
        if withlock: lockflag = "-l"
        else: lockflag = "-u"
        cmd = 'co %s%s %s %s' % (lockflag, rev, otherflags, name)
        return self._system(cmd)

    def checkin(self, name_rev, message=None, otherflags=""):
        """Check in NAME_REV from its work file.

        The optional MESSAGE argument becomes the checkin message
        (default "<none>" if None); or the file description if this is
        a new file.

        The optional OTHERFLAGS argument is passed to ci without
        interpretation.

        Any output from ci goes to directly to stdout.

        """
        name, rev = self._unmangle(name_rev)
        new = not self.isvalid(name)
        if not message: message = "<none>"
        if message and message[-1] != '\n':
            message = message + '\n'
        lockflag = "-u"
        if new:
            f = tempfile.NamedTemporaryFile()
            f.write(message)
            f.flush()
            cmd = 'ci %s%s -t%s %s %s' % \
                  (lockflag, rev, f.name, otherflags, name)
        else:
            message = re.sub(r'([\"$`])', r'\\\1', message)
            cmd = 'ci %s%s -m"%s" %s %s' % \
                  (lockflag, rev, message, otherflags, name)
        return self._system(cmd)

    # --- Exported support methods ---

    def listfiles(self, pat = None):
        """Return a list of all version files matching optional PATTERN."""
        files = os.listdir(os.curdir)
        files = filter(self._isrcs, files)
        if os.path.isdir('RCS'):
            files2 = os.listdir('RCS')
            files2 = filter(self._isrcs, files2)
            files = files + files2
        files = map(self.realname, files)
        return self._filter(files, pat)

    def isvalid(self, name):
        """Test whether NAME has a version file associated."""
        namev = self.rcsname(name)
        return (os.path.isfile(namev) or
                os.path.isfile(os.path.join('RCS', namev)))

    def rcsname(self, name):
        """Return the pathname of the version file for NAME.

        The argument can be a work file name or a version file name.
        If the version file does not exist, the name of the version
        file that would be created by "ci" is returned.

        """
        if self._isrcs(name): namev = name
        else: namev = name + ',v'
        if os.path.isfile(namev): return namev
        namev = os.path.join('RCS', os.path.basename(namev))
        if os.path.isfile(namev): return namev
        if os.path.isdir('RCS'):
            return os.path.join('RCS', namev)
        else:
            return namev

    def realname(self, namev):
        """Return the pathname of the work file for NAME.

        The argument can be a work file name or a version file name.
        If the work file does not exist, the name of the work file
        that would be created by "co" is returned.

        """
        if self._isrcs(namev): name = namev[:-2]
        else: name = namev
        if os.path.isfile(name): return name
        name = os.path.basename(name)
        return name

    def islocked(self, name_rev):
        """Test whether FILE (which must have a version file) is locked.

        XXX This does not tell you which revision number is locked and
        ignores any revision you may pass in (by virtue of using rlog
        -L -R).

        """
        f = self._open(name_rev, 'rlog -L -R')
        line = f.readline()
        status = self._closepipe(f)
        if status:
            raise IOError, status
        if not line: return None
        if line[-1] == '\n':
            line = line[:-1]
        return self.realname(name_rev) == self.realname(line)

    def checkfile(self, name_rev):
        """Normalize NAME_REV into a (NAME, REV) tuple.

        Raise an exception if there is no corresponding version file.

        """
        name, rev = self._unmangle(name_rev)
        if not self.isvalid(name):
            raise os.error, 'not an rcs file %r' % (name,)
        return name, rev

    # --- Internal methods ---

    def _open(self, name_rev, cmd = 'co -p', rflag = '-r'):
        """INTERNAL: open a read pipe to NAME_REV using optional COMMAND.

        Optional FLAG is used to indicate the revision (default -r).

        Default COMMAND is "co -p".

        Return a file object connected by a pipe to the command's
        output.

        """
        name, rev = self.checkfile(name_rev)
        namev = self.rcsname(name)
        if rev:
            cmd = cmd + ' ' + rflag + rev
        return os.popen("%s %r" % (cmd, namev))

    def _unmangle(self, name_rev):
        """INTERNAL: Normalize NAME_REV argument to (NAME, REV) tuple.

        Raise an exception if NAME contains invalid characters.

        A NAME_REV argument is either NAME string (implying REV='') or
        a tuple of the form (NAME, REV).

        """
        if type(name_rev) == type(''):
            name_rev = name, rev = name_rev, ''
        else:
            name, rev = name_rev
        for c in rev:
            if c not in self.okchars:
                raise ValueError, "bad char in rev"
        return name_rev

    def _closepipe(self, f):
        """INTERNAL: Close PIPE and print its exit status if nonzero."""
        sts = f.close()
        if not sts: return None
        detail, reason = divmod(sts, 256)
        if reason == 0: return 'exit', detail   # Exit status
        signal = reason&0x7F
        if signal == 0x7F:
            code = 'stopped'
            signal = detail
        else:
            code = 'killed'
        if reason&0x80:
            code = code + '(coredump)'
        return code, signal

    def _system(self, cmd):
        """INTERNAL: run COMMAND in a subshell.

        Standard input for the command is taken from /dev/null.

        Raise IOError when the exit status is not zero.

        Return whatever the calling method should return; normally
        None.

        A derived class may override this method and redefine it to
        capture stdout/stderr of the command and return it.

        """
        cmd = cmd + " </dev/null"
        sts = os.system(cmd)
        if sts: raise IOError, "command exit status %d" % sts

    def _filter(self, files, pat = None):
        """INTERNAL: Return a sorted copy of the given list of FILES.

        If a second PATTERN argument is given, only files matching it
        are kept.  No check for valid filenames is made.

        """
        if pat:
            def keep(name, pat = pat):
                return fnmatch.fnmatch(name, pat)
            files = filter(keep, files)
        else:
            files = files[:]
        files.sort()
        return files

    def _remove(self, fn):
        """INTERNAL: remove FILE without complaints."""
        try:
            os.unlink(fn)
        except os.error:
            pass

    def _isrcs(self, name):
        """INTERNAL: Test whether NAME ends in ',v'."""
        return name[-2:] == ',v'
PKb1�Z�#�44pdist/rcsclient.pyonu�[����
��^c@skdZddlZddlZdZdZdZdZddlZdejfd��YZ	gd	�Z
dS(
s�Customize this file to change the default client etc.

(In general, it is probably be better to make local operation the
default and to require something like an RCSSERVER environment
variable to enable remote operation.)

i����Nsvoorn.cwi.nliiitRCSProxyClientcBseZejd�ZRS(cCstjj|||�dS(N(tclienttSecureClientt__init__(tselftaddresstverbose((s,/usr/lib64/python2.7/Demo/pdist/rcsclient.pyRs(t__name__t
__module__RtVERBOSER(((s,/usr/lib64/python2.7/Demo/pdist/rcsclient.pyRsc
Cs�ddl}t}t}t}t}d}x�|D]�\}}|dkr�|}d|kr�tj|d�}	||	 ||	d}}
|
r�tj|
�}q�q�n|dkr�tj|�}n|dkr�|}n|dkr�|d}n|d	krd
}n|dkr1d}q1q1W|r?ddl}|j	�}n||f}t
||�}|s�y%ttj
jdd
��j�}Wntk
r�q�X|ddkr�|d }q�n|r�|j|�n|S(sEopen an RCSProxy client based on a list of options returned by getopti����Ns-ht:is-ps-ds-vs-qis-LtCVSt
Repositorys
(tRCSProxytHOSTtPORTR	tLOCALtNonetstringtfindtatoit
RCSProxyLocalRtopentostpathtjointreadlinetIOErrortcd(
toptsR
thosttportRtlocalt	directorytotatitptxR((s,/usr/lib64/python2.7/Demo/pdist/rcsclient.pyt
openrcsclientsN	
	
%
(t__doc__RRRRR	RRRRR'(((s,/usr/lib64/python2.7/Demo/pdist/rcsclient.pyt<module>sPKb1�Ze�'�wwpdist/cmdfw.pyonu�[����
��^c@s<dZddd��YZd�Zedkr8e�ndS(sHFramework for command line interfaces like CVS.  See class CmdFrameWork.tCommandFrameWorkcBs\eZdZdZd	ZdZd�Zd	d�Zd�Z	d�Z
d	d�Zd�ZRS(
s�Framework class for command line interfaces like CVS.

    The general command line structure is

            command [flags] subcommand [subflags] [argument] ...

    There's a class variable GlobalFlags which specifies the
    global flags options.  Subcommands are defined by defining
    methods named do_<subcommand>.  Flags for the subcommand are
    defined by defining class or instance variables named
    flags_<subcommand>.  If there's no command, method default()
    is called.  The __doc__ strings for the do_ methods are used
    for the usage message, printed after the general usage message
    which is the class variable UsageMessage.  The class variable
    PostUsageMessage is printed after all the do_ methods' __doc__
    strings.  The method's return value can be a suggested exit
    status.  [XXX Need to rewrite this to clarify it.]

    Common usage is to derive a class, instantiate it, and then call its
    run() method; by default this takes its arguments from sys.argv[1:].
    s;usage: (name)s [flags] subcommand [subflags] [argument] ...tcCsdS(s&Constructor, present for completeness.N((tself((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pyt__init__#scCs�ddl}ddl}|dkr4|jd}ny|j||j�\}}Wn |jk
ru}|j|�SX|j|�|s�|j�|j	�S|d}d|}d|}yt
||�}	Wn"tk
r�|jd|f�SXyt
||�}
Wntk
rd}
nXy |j|d|
�\}}Wn.|jk
rp}|jd	|t|��SX|j�|	||�SdS(
s3Process flags, subcommand and options, then run it.i����Niitdo_tflags_scommand %r unknownRssubcommand %s: (
tgetopttsystNonetargvtGlobalFlagsterrortusagetoptionstreadytdefaulttgetattrtAttributeErrortstr(RtargsRRtoptstmsgtcmdtmnametfnametmethodtflags((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pytrun's:








 
cCsR|rNddGHdGHx+|D]#\}}dG|GdGt|�GHqWddGHndS(sWProcess the options retrieved by getopt.
        Override this if you have any options.t-i(sOptions:toptiontvalueN(trepr(RRtota((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pyR
Gs	cCsdS(s*Called just before calling the subcommand.N((R((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pyRQscCs%|r|GHn|ji|jjd6GHi}|j}x�xut|�D]g}|d dkrF|j|�rqqFnyt||�j}Wn
d}nX|r�|||<q�qFqFW|js�Pn|jd}q9W|r
dGH|j	�}|j
�x|D]}||GHq�Wn|jr!|jGHndS(s4Print usage message.  Return suitable exit code (2).tnameiRiswhere subcommand can be:iN(tUsageMessaget	__class__t__name__tdirthas_keyRt__doc__Rt	__bases__tkeystsorttPostUsageMessage(RRt
docstringstcR"tdoctnames((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pyRUs8	
	

	cCs	dGHdS(s\Default method, called when no subcommand is given.
        You should always override this.s'Nobody expects the Spanish Inquisition!N((R((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pyRssN(
R%t
__module__R(R#RR,R
RRR
RRR(((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pyRs	 	
	cCs�ddl}dtfd��Y}|�}gdgdgdgddgdg}x9|D]1}dG|GdGH|j|�}d
Gt|�GHqYWdS(
s:Test script -- called when this module is run as a script.i����NtHellocBseZd�ZRS(cSs	dGHdS(s0hello -- print 'hello world', needs no argumentssHello, worldN((RRR((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pytdo_hello}s(R%R1R3(((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pyR2|sthellotspams-xRi
sExit status:s
----------s
----------(RRRRR(RR2txtteststttsts((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pyttestys			

t__main__N((R(RR:R%(((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pyt<module>su	PKb1�Z��U�ddpdist/client.pynu�[���"""RPC Client module."""

import sys
import socket
import pickle
import __builtin__
import os


# Default verbosity (0 = silent, 1 = print connections, 2 = print requests too)
VERBOSE = 1


class Client:

    """RPC Client class.  No need to derive a class -- it's fully generic."""

    def __init__(self, address, verbose = VERBOSE):
        self._pre_init(address, verbose)
        self._post_init()

    def _pre_init(self, address, verbose = VERBOSE):
        if type(address) == type(0):
            address = ('', address)
        self._address = address
        self._verbose = verbose
        if self._verbose: print "Connecting to %s ..." % repr(address)
        self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self._socket.connect(address)
        if self._verbose: print "Connected."
        self._lastid = 0 # Last id for which a reply has been received
        self._nextid = 1 # Id of next request
        self._replies = {} # Unprocessed replies
        self._rf = self._socket.makefile('r')
        self._wf = self._socket.makefile('w')

    def _post_init(self):
        self._methods = self._call('.methods')

    def __del__(self):
        self._close()

    def _close(self):
        if self._rf: self._rf.close()
        self._rf = None
        if self._wf: self._wf.close()
        self._wf = None
        if self._socket: self._socket.close()
        self._socket = None

    def __getattr__(self, name):
        if name in self._methods:
            method = _stub(self, name)
            setattr(self, name, method) # XXX circular reference
            return method
        raise AttributeError, name

    def _setverbose(self, verbose):
        self._verbose = verbose

    def _call(self, name, *args):
        return self._vcall(name, args)

    def _vcall(self, name, args):
        return self._recv(self._vsend(name, args))

    def _send(self, name, *args):
        return self._vsend(name, args)

    def _send_noreply(self, name, *args):
        return self._vsend(name, args, 0)

    def _vsend_noreply(self, name, args):
        return self._vsend(name, args, 0)

    def _vsend(self, name, args, wantreply = 1):
        id = self._nextid
        self._nextid = id+1
        if not wantreply: id = -id
        request = (name, args, id)
        if self._verbose > 1: print "sending request: %s" % repr(request)
        wp = pickle.Pickler(self._wf)
        wp.dump(request)
        return id

    def _recv(self, id):
        exception, value, rid = self._vrecv(id)
        if rid != id:
            raise RuntimeError, "request/reply id mismatch: %d/%d" % (id, rid)
        if exception is None:
            return value
        x = exception
        if hasattr(__builtin__, exception):
            x = getattr(__builtin__, exception)
        elif exception in ('posix.error', 'mac.error'):
            x = os.error
        if x == exception:
            exception = x
        raise exception, value

    def _vrecv(self, id):
        self._flush()
        if self._replies.has_key(id):
            if self._verbose > 1: print "retrieving previous reply, id = %d" % id
            reply = self._replies[id]
            del self._replies[id]
            return reply
        aid = abs(id)
        while 1:
            if self._verbose > 1: print "waiting for reply, id = %d" % id
            rp = pickle.Unpickler(self._rf)
            reply = rp.load()
            del rp
            if self._verbose > 1: print "got reply: %s" % repr(reply)
            rid = reply[2]
            arid = abs(rid)
            if arid == aid:
                if self._verbose > 1: print "got it"
                return reply
            self._replies[rid] = reply
            if arid > aid:
                if self._verbose > 1: print "got higher id, assume all ok"
                return (None, None, id)

    def _flush(self):
        self._wf.flush()


from security import Security


class SecureClient(Client, Security):

    def __init__(self, *args):
        import string
        apply(self._pre_init, args)
        Security.__init__(self)
        self._wf.flush()
        line = self._rf.readline()
        challenge = string.atoi(string.strip(line))
        response = self._encode_challenge(challenge)
        line = repr(long(response))
        if line[-1] in 'Ll': line = line[:-1]
        self._wf.write(line + '\n')
        self._wf.flush()
        self._post_init()

class _stub:

    """Helper class for Client -- each instance serves as a method of the client."""

    def __init__(self, client, name):
        self._client = client
        self._name = name

    def __call__(self, *args):
        return self._client._vcall(self._name, args)
PKb1�ZF N�22pdist/makechangelog.pycnu�[����
Afc@s�dZddlZddlZddlZddlZddlZd�Zejdd�Zidd6dd	6d
d6Z	d�Z
ejd
�Zd�Zd�Z
edkr�e�ndS(s<Turn a pile of RCS log output into ChangeLog file entries.

i����Nc
Cstjd}tj|d�\}}d}x)|D]!\}}tdkr2|}q2q2Wtj}g}xft|�}|sPng}x*t||�}	|	s�Pn|j|	�q�W|ri||t|�)qiqiW|j	�|j
�x|D]}	t|	|�q�WdS(Nisp:ts-p(tsystargvtgetopttptstdintgetnextfilet
getnextrevtappendtlentsorttreverset	formatrev(
targstoptstprefixtotatftallrevstfiletrevstrev((s0/usr/lib64/python2.7/Demo/pdist/makechangelog.pytmain
s0

	


s"^date: ([0-9]+)/([0-9]+)/([0-9]+) s-([0-9]+):([0-9]+):([0-9]+);  author: ([^ ;]+)s+Guido van Rossum  <guido@cnri.reston.va.us>tguidosJack Jansen  <jack@cwi.nl>tjacks!Sjoerd Mullender  <sjoerd@cwi.nl>tsjoerdcCsh|\}}}}tj|�dkrdtjdddddd�}tjd�}tj|�rpt|}nttj|�dddg}|dtj	|d<tj
t|��}	tj|	�Gd	G|GHtj
|�}
d
||dg|
d*d}|}xZ|
D]R}
|dkrC|t|
�|krCHd|
Gd}n|
G|dt|
�}q	WHHndS(NiiiiiiiiRt*t:iHis	i����i@(t
parsedateprogtmatchtgroupt	authormapthas_keytmaptstringtatoittimettimezonetmktimettupletctimetsplitR	(RRtdatelineRtrevlinetlogtfieldstauthorttfieldstttwordstmaxcoltcoltword((s0/usr/lib64/python2.7/Demo/pdist/makechangelog.pyR0s.

"	s^Working file: (.*)$cCs�x�|j�}|sdStj|�dkrtjd�}xB|j�}|sVdS|d dkrjdS|d dkr@Pq@q@W|SqWdS(Niii
t=t-s
==========s
----------(treadlinetNonet	startprogRR(RtlineR((s0/usr/lib64/python2.7/Demo/pdist/makechangelog.pyRKscCs}|j�}|j�}d}xL|j�}|s7Pn|d dkrKdS|d dkr_Pn||}q!W||||fS(NRi
R6R7s
==========s
----------(R8R9(RRR,R+R-R;((s0/usr/lib64/python2.7/Demo/pdist/makechangelog.pyR\st__main__(t__doc__RR#treRR%RtcompileRR RR:RRt__name__(((s0/usr/lib64/python2.7/Demo/pdist/makechangelog.pyt<module>s&	

			PKb1�ZH��xT3T3pdist/cvslib.pycnu�[����
��^c@s�dZddlZddlZddlZddlZddlZeed�s]de_nddd��YZddd��YZ	d	d
Z
d�Zd�ZiZ
d
�Zd�Zd�Zd�Zedkr�e�ndS(s!Utilities for CVS administration.i����NttimezoneitFilecBs\eZdZd	d�Zd�Zd�Zd�Zd	d�Zd�Z	d�Z
d�ZRS(
s�Represent a file's status.

    Instance variables:

    file -- the filename (no slashes), None if uninitialized
    lseen -- true if the data for the local file is up to date
    eseen -- true if the data from the CVS/Entries entry is up to date
             (this implies that the entry must be written back)
    rseen -- true if the data for the remote file is up to date
    proxy -- RCSProxy instance used to contact the server, or None

    Note that lseen and rseen don't necessary mean that a local
    or remote file *exists* -- they indicate that we've checked it.
    However, eseen means that this instance corresponds to an
    entry in the CVS/Entries file.

    If lseen is true:

    lsum -- checksum of the local file, None if no local file
    lctime -- ctime of the local file, None if no local file
    lmtime -- mtime of the local file, None if no local file

    If eseen is true:

    erev -- revision, None if this is a no revision (not '0')
    enew -- true if this is an uncommitted added file
    edeleted -- true if this is an uncommitted removed file
    ectime -- ctime of last local file corresponding to erev
    emtime -- mtime of last local file corresponding to erev
    extra -- 5th string from CVS/Entries file

    If rseen is true:

    rrev -- revision of head, None if non-existent
    rsum -- checksum of that revision, Non if non-existent

    If eseen and rseen are both true:

    esum -- checksum of revision erev, None if no revision

    Note
    cCsK|rd|krtd�n||_d|_|_|_d|_dS(Nt/sno slash allowed in filei(t
ValueErrortfiletlseenteseentrseentNonetproxy(tselfR((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyt__init__9s
	cCst|j|j�S(N(tcmpR(R
tother((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyt__cmp__@scCs�y&tj|j�d\|_|_Wn+tjk
rSd|_|_|_n(Xtj	t
|j�j��j�|_d|_
dS(Ni����i(toststatRtlmtimetlctimeterrorRtlsumtmd5tnewtopentreadtdigestR(R
((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pytgetlocalCs&'cCs)tj|d�}|jr:|d|jkr:td�n|d|_|d|_d|_d|_d|_|_	|jd dkr�d|_|jd|_n|jdkr�d|_d|_n0|d}t
|d	 �|_t
|d
�|_	|d|_|jr|j
�nd|_dS(NRisfile name mismatchiit-t0iiii(tstringtsplitfieldsRRterevtedeletedtenewRtectimetemtimetunctimetextraRtgetesumR(R
tlinetwordstdates((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pytgetentryLs*

				

	
cCs�|r||_ny|jj|j�|_Wn#tjtfk
rSd|_nX|jrx|jj|j�|_	n	d|_	|j
r�|j�nd|_dS(Ni(
R	theadRtrrevRRtIOErrorRtsumtrsumRR&R(R
R	((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyt	getremoteds
			
cCsa|j|jkr!|j|_n<|jrT|j|jf}|jj|�|_n	d|_dS(N(RR,R/tesumRR	R.R(R
tname((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyR&ss	cCs�|js
dS|jpd}|jr2d|}n|jrKd|j}n t|j�dt|j�}d|j|||jfS(s�Return a line suitable for inclusion in CVS/Entries.

        The returned line is terminated by a newline.
        If no entry should be written for this file,
        return "".
        tRRsInitial t s/%s/%s/%s/%s/
(	RRR R!RtgmctimeR"R#R%(R
trevR)((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pytputentry|s		
	cCs�ddGHt|d�}|d�|jrU|dt�|dt�|dt�n|jr�|d�|d	�|d
�|dt�|dt�n|jr�|d
�|dt�|jr�|dt�q�ndS(NRi2cSsDy|t||��}Wntk
r2d}nXd|G|GHdS(Nt?s%-15s:(tgetattrtAttributeError(tkeytreprR
tvalue((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pytr�s


RRRRRR!R R"R#R,R/R1(R<RthexifyR5RR(R
R>((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pytreport�s$	
	

	



	

	N(t__name__t
__module__t__doc__RRRRR*R0R&R7R@(((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyRs+							tCVScBs�eZdZeZddddddddgZd	�Zd
�Zd�Zd�Z	d
�Z
dd�Zd�Z
d�Zd�Zd�Zd�Zdd�Zd�Zd�ZRS(s�Represent the contents of a CVS admin file (and more).

    Class variables:

    FileClass -- the class to be instantiated for entries
                 (this should be derived from class File above)
    IgnoreList -- shell patterns for local files to be ignored

    Instance variables:

    entries -- a dictionary containing File instances keyed by
               their file name
    proxy -- an RCSProxy instance, or None
    s.*s@*s,*s*~s*.os*.as*.sos*.pyccCsi|_d|_dS(N(tentriesRR	(R
((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyR�s	cCsC||jkrdS||_x |jj�D]}d|_q,WdS(Ni(R	REtvaluesR(R
R	te((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pytsetproxy�s
	cCsli|_|jd�}xC|j�}|s1Pn|j�}|j|�||j|j<qW|j�dS(s Read the contents of CVS/EntriestEntriesN(REtcvsopentreadlinet	FileClassR*Rtclose(R
tfR'RG((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyt
getentries�s	
cCsJ|jdd�}x'|j�D]}|j|j��qW|j�dS(sWrite CVS/Entries backRItwN(RJRFtwriteR7RM(R
RNRG((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyt
putentries�scCs�|jj�}tjtj�}x?|D]7}||kr@q(n|j|�s(|j|�q(q(W|j�xW|D]O}y|j|}Wn+tk
r�|j	|�}|j|<nX|j
�qtWdS(N(REtkeysRtlistdirtcurdirtignoredtappendtsorttKeyErrorRLR(R
tlisttaddlistR2RRG((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyt
getlocalfiles�s



cCs�|r||_n|js'td�n|jj�}x]|D]U}y|j|}Wn+tk
r�|j|�}|j|<nX|j|j�q=WdS(Nsno RCS proxy(R	tRuntimeErrort	listfilesRERYRLR0(R
R	R[RRG((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pytgetremotefiles�s	

cCs.x|j�D]}|j�q
WddGHdS(NRi2(RFR@(R
RG((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyR@�scCs|jj�}|j�|S(N(RERSRX(R
RS((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyRSs
cCs|d�}t||j��S(NcSs|j|S(N(RE(R;R
((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyR=	s(tmapRS(R
R=((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyRFscCs|d�}t||j��S(NcSs||j|fS(N(RE(R;R
((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pytitems(R`RS(R
Ra((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pytitems
scCs%tjjd|�}tjj|�S(NRD(Rtpathtjointexists(R
R((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyt	cvsexistssR>cCs>tjjd|�}d|kr1|j|�nt||�S(NRDR>(RRcRdtbackupR(R
Rtmode((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyRJscCs[tjj|�rW|d}ytj|�Wntjk
rCnXtj||�ndS(Nt~(RRctisfiletunlinkRtrename(R
Rtbfile((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyRgs
cCsDtjj|�rtSx'|jD]}tj||�r tSq WtS(N(RRctisdirtTruet
IgnoreListtfnmatchtFalse(R
Rtpat((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyRV#sN(RARBRCRRLRpRRHRORRR\RR_R@RSRFRbRfRJRgRV(((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyRD�s"					
						s%02xicCs'|dkrdStttt|��S(sDReturn a hex representation of a 16-byte string (e.g. an MD5 digest)RN(Rt
hexify_formatttupleR`tord(R.((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyR?-scCsd|dkrdSd}xGtdt|�d�D]-}|ttj|||d!d��}q/W|S(s*Return the original from a hexified stringRR3iiiN(RtrangetlentchrRtatoi(thexsumR.ti((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pytunhexify3s+cCs|dkrdStsndddddddd	d
ddd
g}d}x%|D]}|d}|t|<qMWntj|�}tj|d�}t|d}tj|d�}ttjtj|dd��\}}	}
|
tj}
tj	|||||	|
dddf	�S(NRtJantFebtMartAprtMaytJuntJultAugtSeptOcttNovtDeciiiiit:(
Rtunctime_monthmapRtsplitRzR`RttimeRtmktime(tdatetmonthsR|tmR(tyeartmonthtdaythhtmmtss((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyR$>s 

+
cCs&|dkrdStjtj|��S(NR(RR�tasctimetgmtime(tt((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyR5OscCs�ttj��}tj|�}tj|�}dG|G|GHdGtjGHdGtj|�GHt|�}dG|GHtj|�}dG|GHtj|�GHdS(NtGMTRtlocals	unctime()s->(tintR�R�R�RtctimeR$(tnowR�tattutgu((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyttest_unctimeSs
		cCsPt�}|j�|j�ddl}|j�}|j|�|j�dS(Ni����(RDROR\t	rcsclientt
openrcsclientR_R@(txR�R	((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyttest`s	


t__main__(((RCRRR�RRqthasattrRRRDRtR?R}R�R$R5R�R�RA(((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyt<module>s&�~
		
			
	PKb1�Z�Z�r``pdist/mac.pynu�[���import sys
import string
import rcvs

def main():
    while 1:
        try:
            line = raw_input('$ ')
        except EOFError:
            break
        words = string.split(line)
        if not words:
            continue
        if words[0] != 'rcvs':
            words.insert(0, 'rcvs')
        sys.argv = words
        rcvs.main()

main()
PKb1�Z���osspdist/RCSProxy.pynuȯ��#! /usr/bin/python2.7

"""RCS Proxy.

Provide a simplified interface on RCS files, locally or remotely.
The functionality is geared towards implementing some sort of
remote CVS like utility.  It is modeled after the similar module
FSProxy.

The module defines two classes:

RCSProxyLocal  -- used for local access
RCSProxyServer -- used on the server side of remote access

The corresponding client class, RCSProxyClient, is defined in module
rcsclient.

The remote classes are instantiated with an IP address and an optional
verbosity flag.
"""

import server
import md5
import os
import fnmatch
import string
import tempfile
import rcslib


class DirSupport:

    def __init__(self):
        self._dirstack = []

    def __del__(self):
        self._close()

    def _close(self):
        while self._dirstack:
            self.back()

    def pwd(self):
        return os.getcwd()

    def cd(self, name):
        save = os.getcwd()
        os.chdir(name)
        self._dirstack.append(save)

    def back(self):
        if not self._dirstack:
            raise os.error, "empty directory stack"
        dir = self._dirstack[-1]
        os.chdir(dir)
        del self._dirstack[-1]

    def listsubdirs(self, pat = None):
        files = os.listdir(os.curdir)
        files = filter(os.path.isdir, files)
        return self._filter(files, pat)

    def isdir(self, name):
        return os.path.isdir(name)

    def mkdir(self, name):
        os.mkdir(name, 0777)

    def rmdir(self, name):
        os.rmdir(name)


class RCSProxyLocal(rcslib.RCS, DirSupport):

    def __init__(self):
        rcslib.RCS.__init__(self)
        DirSupport.__init__(self)

    def __del__(self):
        DirSupport.__del__(self)
        rcslib.RCS.__del__(self)

    def sumlist(self, list = None):
        return self._list(self.sum, list)

    def sumdict(self, list = None):
        return self._dict(self.sum, list)

    def sum(self, name_rev):
        f = self._open(name_rev)
        BUFFERSIZE = 1024*8
        sum = md5.new()
        while 1:
            buffer = f.read(BUFFERSIZE)
            if not buffer:
                break
            sum.update(buffer)
        self._closepipe(f)
        return sum.digest()

    def get(self, name_rev):
        f = self._open(name_rev)
        data = f.read()
        self._closepipe(f)
        return data

    def put(self, name_rev, data, message=None):
        name, rev = self._unmangle(name_rev)
        f = open(name, 'w')
        f.write(data)
        f.close()
        self.checkin(name_rev, message)
        self._remove(name)

    def _list(self, function, list = None):
        """INTERNAL: apply FUNCTION to all files in LIST.

        Return a list of the results.

        The list defaults to all files in the directory if None.

        """
        if list is None:
            list = self.listfiles()
        res = []
        for name in list:
            try:
                res.append((name, function(name)))
            except (os.error, IOError):
                res.append((name, None))
        return res

    def _dict(self, function, list = None):
        """INTERNAL: apply FUNCTION to all files in LIST.

        Return a dictionary mapping files to results.

        The list defaults to all files in the directory if None.

        """
        if list is None:
            list = self.listfiles()
        dict = {}
        for name in list:
            try:
                dict[name] = function(name)
            except (os.error, IOError):
                pass
        return dict


class RCSProxyServer(RCSProxyLocal, server.SecureServer):

    def __init__(self, address, verbose = server.VERBOSE):
        RCSProxyLocal.__init__(self)
        server.SecureServer.__init__(self, address, verbose)

    def _close(self):
        server.SecureServer._close(self)
        RCSProxyLocal._close(self)

    def _serve(self):
        server.SecureServer._serve(self)
        # Retreat into start directory
        while self._dirstack: self.back()


def test_server():
    import string
    import sys
    if sys.argv[1:]:
        port = string.atoi(sys.argv[1])
    else:
        port = 4127
    proxy = RCSProxyServer(('', port))
    proxy._serverloop()


def test():
    import sys
    if not sys.argv[1:] or sys.argv[1] and sys.argv[1][0] in '0123456789':
        test_server()
        sys.exit(0)
    proxy = RCSProxyLocal()
    what = sys.argv[1]
    if hasattr(proxy, what):
        attr = getattr(proxy, what)
        if callable(attr):
            print apply(attr, tuple(sys.argv[2:]))
        else:
            print repr(attr)
    else:
        print "%s: no such attribute" % what
        sys.exit(2)


if __name__ == '__main__':
    test()
PKb1�Z�roQ8Q8pdist/rcvs.pycnu�[����
Afc@s�dZddlmZmZddlZddlZddlZddlZddlm	Z	dZ
defd��YZdZd	Z
d
efd��YZde	fd
��YZd�Zd�Zedkr�e�ndS(s$Remote CVS -- command line interfacei����(tCVStFileN(tCommandFrameWorkitMyFilecBskeZd�Zd�Zdd�Zgd�Zd�Zdd�Zd�Zd�Z	d	�Z
d
�ZRS(cCsl|js|j�n|js,|j�n|js||jsR|jsKdSdSqh|js_dS|j|jkrudSdSn�|js�|jr�|jr�dSdSqh|jr�dG|jGd	GHd
SdSn�|js�|j	r�dSdSn�|j	r	|j|jkrd
SdSn|j|j
kr8|j
|jkr1dSd
Sn0|j
|jkrNdS|j|jkrdd
SdSdS(sReturn a code indicating the update status of this file.

        The possible return values are:

        '=' -- everything's fine
        '0' -- file doesn't exist anywhere
        '?' -- exists locally only
        'A' -- new locally
        'R' -- deleted locally
        'U' -- changed remotely, no changes locally
               (includes new remotely or deleted remotely)
        'M' -- changed locally, no changes remotely
        'C' -- conflict: changed locally as well as remotely
               (includes cases where the file has been added
               or removed locally and remotely)
        'D' -- deleted remotely
        'N' -- new remotely
        'r' -- get rid of entry
        'c' -- create entry
        'u' -- update entry

        (and probably others :-)
        t0tNt?tctCtRtrswarning:swas losttUtAtDtut=tMN(tlseentgetlocaltrseent	getremoteteseentlsumtrsumtedeletedtfiletenewtesum(tself((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytaction0sT	
	
											cCs
|j�}|dkrdS|G|jGH|dkrA|j�n�|dkr\d|jGHn�|dkr�t|j�d|_n�|dkr�d|_nm|dkrd|_|j|_d|_d|_|j	|_
tj|j�d\|_
|_d
|_ndS(NRRRRs+%s: conflict resolution not yet implementedR
iR
RRii����t(RR(RR(RRtgettremoveRtrrevterevRRRRtoststattemtimetectimetextra(Rtcode((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytupdateys,

			"RcCsc|j�}|dkr)|j|�dS|dkrDd|jGHn|dkr_d|jGHndS(	NRRiR	s*%s: committing removes not yet implementedRs+%s: conflict resolution not yet implemented(RR(RtputR(RtmessageR(((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytcommit�s
cCsE|j�d}|j}x;|D]3\}}|dkrA|}q |d||}q W||jkr||j|jkr|dS|d}|j}|jj||f�}tj|�j	�}|j|kr�dSddl
}	|	j�}
|
j|�|
j
�d|||fGHtjd||
j|f�}|rAdd	GHndS(
NRs-rt ii����sdiff %s -r%s %ss
diff %s %s %sRiF(RR!RRRtproxyRtmd5tnewtdigestttempfiletNamedTemporaryFiletwritetflushR#tsystemtname(RtoptstflagstrevtotatfntdatatsumR2ttftsts((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytdiff�s.
		!
	

cCs|j�dkS(NR(R(R((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytcommitcheck�scCs�dG|jGdGHt|j�j�}|jsD|jj|j�n|jj|j||�}|rm|GHn|j|jj|j�|j	�dS(NsChecking ins...(
RtopentreadRR.tlockR*tsetentrytheadR(RR+R>tmessages((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyR*�s	cCsX|jj|j�}t|jd�}|j|�|j�|j|j|j�dS(Ntw(	R.RRRDR4tcloseRGR!R(RR>tf((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyR�s


cCs|jj|j|�GHdS(N(R.tlogR(Rt
otherflags((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRM�scCsXd|_|j|_d\|_|_d|_d|_d|_d|_d|_dS(NiRi(ii(	RRRR%R&R"RRR'(R((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytadd�s					cCsed|_||_tj|j�d\|_|_||_d|_d|_	d|_d|_
dS(Nii����iR(RRR#R$RR%R&R"RRR'(RR"R((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRG�s		"				(t__name__t
__module__RR)R,RBRCR*RRMRORG(((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyR.s	I		
			
s/usr/lib/sendmail -tsoTo: %s
Subject: CVS changes: %s

...Message from rcvs...

Committed files:
        %s

Log message:
        %s
tRCVScBsqeZeZd�Zd�Zdd�Zdd�Zd�Zd�Z	d�Z
d�Zd	�Zd
d�Z
RS(cCstj|�dS(N(Rt__init__(R((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRS�scCs+x$|j|d�D]}|j�qWdS(Ni(twhichentriesR)(Rtfileste((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyR)�sRcCs�|j|�}|sdSd}x#|D]}|j�s&d}q&q&W|sTdGHdS|sitd�}ng}x0|D](}|j|�rv|j|j�qvqvW|j||�dS(Niiscorrect above errors firstsOne-liner: (RTRCt	raw_inputR,tappendRtmailinfo(RRUR+tlisttokRVt	committed((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyR,�s"


cCs�d}t|tj|�tj|�|f}ddGH|GHddGHtd|�}tjtj|��dkr�tjtd�}|j	|�|j
�}|r�d	t|�GHq�d
GHndGHdS(
Nssjoerd@cwi.nl, jack@cwi.nlt-iFsOK to mail to %s? tytyetyesRJsSendmail exit status %ss
Mail sent.s
No mail sent.(R^R_R`(tMAILFORMtstringtjoinRWtlowertstripR#tpopentSENDMAILR4RKtstr(RRUR+ttowhomtmailtextR[tpRA((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRYs		
cCs(x!|j|�D]}|j�qWdS(N(RTtreport(RRURV((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRl!scCs+x$|j|�D]}|j|�qWdS(N(RTRB(RRUR8RV((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRB%scCsC|std�ng}x$|j|d�D]}|j�q+WdS(Ns!'cvs add' needs at least one filei(tRuntimeErrorRTRO(RRURZRV((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRO)s
cCs|std�ntd�dS(Ns 'cvs rm' needs at least one files'cvs rm' not yet imlemented(Rm(RRU((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytrm0scCsZd}x&|D]\}}|d||}q
Wx$|j|�D]}|j|�q?WdS(NRR-(RTRM(RRUR8R9R;R<RV((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRM5s
icCs�|rkg}xE|D]Q}|jj|�r;|j|}n|j|�}||j|<|j|�qWn�|jj�}xX|jj�D]G}|jj|�r�q�n|j|�}||j|<|j|�q�W|rJxltjtj	�D]U}|jj|�r�|j
|�r�|j|�}||j|<|j|�q�q�Wn|j�|jr�x/|D]$}|jdkrd|j|_qdqdWn|S(N(
tentriesthas_keyt	FileClassRXtvaluesR.t	listfilesR#tlistdirtcurdirtignoredtsorttNone(RRUt
localfilestooRZRRV((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRT<s8




	
(RPRQRRqRSR)R,RYRlRBRORnRMRT(((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRR�s							trcvscBs�eZdZdZdZd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�ZdZ
eZe
Zd�Zd
ZeZeZd�ZdZeZeZd�Zd�ZeZd�ZdZRS(s	d:h:p:qvLsMusage: rcvs [-d directory] [-h host] [-p port] [-q] [-v] [subcommand arg ...]s<If no subcommand is given, the status of all files is listedcCs&tj|�d|_t�|_dS(sConstructor.N(RRSRxR.RRtcvs(R((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRSes
	cCs&|jr|jj�nd|_dS(N(R.t_closeRx(R((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRKks	cCs|j�tjtj�}x�|D]�}|tjks#|tjkrMq#n|dkr_q#ntjj|�swq#ntjj|�r�q#ndG|GdGHtj|�z3tjjd�r�|j	�j
�n
|j�Wdtjtj�dG|GdGHXq#WdS(NRs--- entering subdirectorys---s--- left subdirectory(RKR#RtRutpardirtpathtisdirtislinktchdirt	__class__truntrecurse(RtnamesR7((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyR�ps&



cCs
||_dS(N(R8(RR8((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytoptions�scCsEddl}|j|j�|_|jj|j�|jj�dS(Ni����(t	rcsclientt
openrcsclientR8R.R{tsetproxyt
getentries(RR�((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytready�scCs|jjg�dS(N(R{Rl(R((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytdefault�scCs|jj|�dS(N(R{Rl(RR8RU((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyt	do_report�scCs�t}x>|D]6\}}|dkr.d}n|dkr
d}q
q
W|jj|�|jj�|r|r|j�ndS(supdate [-l] [-R] [file] ...s-lis-RiN(t	DEF_LOCALR{R)t
putentriesR�(RR8RUtlocalR;R<((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyt	do_update�s	

s-lRcCsVd}x)|D]!\}}|dkr
|}q
q
W|jj||�|jj�dS(scommit [-m message] [file] ...Rs-mN(R{R,R�(RR8RUR+R;R<((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyt	do_commit�s
sm:cCs|jj||�dS(sdiff [difflags] [file] ...N(R{RB(RR8RU((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytdo_diff�sscbitwcefhnlr:sD:S:cCs0|sdGHdS|jj|�|jj�dS(sadd file ...s%'rcvs add' requires at least one fileN(R{ROR�(RR8RU((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytdo_add�s
cCs0|sdGHdS|jj|�|jj�dS(sremove file ...s('rcvs remove' requires at least one fileN(R{R R�(RR8RU((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyt	do_remove�s
cCs|jj||�dS(slog [rlog-options] [file] ...N(R{RM(RR8RU((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytdo_log�ssbhLNRtd:s:V:r:(RPRQtGlobalFlagstUsageMessagetPostUsageMessageRSRKR�R�R�R�R�R�tflags_updatetdo_uptflags_upR�tflags_committdo_comt	flags_comR�t
flags_difftdo_dift	flags_difR�R�tdo_rmR�t	flags_log(((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRz]s6								
					cCs,ytj|�Wntjk
r'nXdS(N(R#tunlinkterror(R=((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyR �scCs)t�}z|j�Wd|j�XdS(N(RzR�RK(R
((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytmain�s	t__main__(t__doc__tcvslibRRR/R#RbtsystcmdfwRR�RRgRaRRRzR R�RP(((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyt<module>s  �lp		PKb1�Z�F"���pdist/rrcs.pyonu�[����
Afc@s�dZddlZddlZddlZddlZddlZddlZddlmZd�Z	d�Z
d�Zd�Zd�Z
d	�Zd
�Zd�Zd�Zd
�Zdd�Zd�Zd�Zide
fd6de
fd6defd6defd6defd6defd6defd6defd6de
fd6defd6defd6Zedkr�e	�ndS( s$Remote RCS -- command line interfacei����N(t
openrcsclientc
Csntjt_y�tjtjdd�\}}|s=d}n|d|d}}tj|�sptjd�nt|\}}tj||�\}}WnZtjk
r�}|GHdGHdGHdGHd	GHd
GHdGHdGHd
GHdGHdGHtjd�nXt	|�}|s|j
�}nxP|D]H}	y||||	�Wqttjfk
re}d|	|fGHqXqWdS(Nis	h:p:d:qvLtheadisunknown commands2usage: rrcs [options] command [options] [file] ...swhere command can be:s+      ci|put      # checkin the given filess      co|get      # checkouts%      info        # print header infos1      head        # print revision of head branchs*      list        # list filename if valids"      log         # print full logs/      diff        # diff rcs file and work files7if no files are given, all remote rcs files are assumedis%s: %s(
tsyststderrtstdouttgetopttargvtcommandsthas_keyterrortexitRt	listfilestIOErrortos(
toptstresttcmdtcoptsettfunctcoptstfilestmsgtxtfn((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pytmain
s>	
cCs�t|�}|j�}|j�|j|�}|r[t||||�r[d|GHdSdG|GdGHt|�}|j|||�}|r�|GHndS(Ns %s: unchanged since last checkinsChecking ins...(topentreadtclosetisvalidtsamet
asklogmessagetput(RRRtftdatatnewtmessagetmessages((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pytcheckin/s
	
cCs9|j|�}t|d�}|j|�|j�dS(Ntw(tgetRtwriteR(RRRR!R ((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pytcheckout=s
cCs|j|�dS(N(tlock(RRR((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pyR*CscCs|j|�dS(N(tunlock(RRR((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pyR+FscCsT|j|�}|j�}|j�x|D]}|dG||GHq,WddGHdS(Nt:t=iF(tinfotkeystsort(RRRtdictR/tkey((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pyR.Is

cCs|j|�}|G|GHdS(N(R(RRRR((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pyRQscCs|j|�r|GHndS(N(R(RRR((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pytlistUscCsTd}x&|D]\}}|d||}q
W|d}|j||�}|GHdS(Ntt i(tlog(RRRtflagstotaR$((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pyR6Ys
c	Cs�t|||�rdSd}x&|D]\}}|d||}q#W|d}|j|�}tj�}|j|�|j�d||j|�|fGHtjd||j	|f�}|r�ddGHndS(NR4R5isdiff %s -r%s %ss
diff %s %s %sR-iF(
RR'ttempfiletNamedTemporaryFileR(tflushRR
tsystemtname(	RRRR7R8R9R!ttftsts((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pytdiffas


cCs_|dkr1t|�}|j�}|j�ntj|�j�}|j|�}||kS(N(tNoneRRRtmd5R"tdigesttsum(RRRR!R tlsumtrsum((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pyRqs
cCs�|r
dGndGdGH|r$dGHnd}xQtjjd�tjj�tjj�}|sl|dkrpPn||}q-W|S(Nsenter description,senter log message,s)terminate with single '.' or end of file:s"NOTE: This is NOT the log message!R4s>> s.
(RRR(R<tstdintreadline(R"R#tline((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pyRzs
cCs,ytj|�Wntjk
r'nXdS(N(R
tunlinkR	(R((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pytremove�sR4tciRtcoR'R.RR3R*R+sbhLRtd:l:r:s:w:V:R6tcRAt__main__(t__doc__RR
RtstringRCR:t	rcsclientRRR%R)R*R+R.RR3R6RARBRRRLRt__name__(((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pyt<module>sD	"												









PKb1�Z�;��DDpdist/client.pycnu�[����
��^c@s�dZddlZddlZddlZddlZddlZdZddd��YZddlm	Z	dee	fd��YZ
d	dd
��YZdS(
sRPC Client module.i����NitClientcBs�eZdZed�Zed�Zd�Zd�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
d�Zd�Zd
d�Zd�Zd�Zd�ZRS(sCRPC Client class.  No need to derive a class -- it's fully generic.cCs|j||�|j�dS(N(t	_pre_initt
_post_init(tselftaddresstverbose((s)/usr/lib64/python2.7/Demo/pdist/client.pyt__init__scCs�t|�td�kr'd|f}n||_||_|jrTdt|�GHntjtjtj�|_|jj|�|jr�dGHnd|_	d|_
i|_|jjd�|_
|jjd�|_dS(NitsConnecting to %s ...s
Connected.itrtw(ttypet_addresst_verbosetreprtsockettAF_INETtSOCK_STREAMt_sockettconnectt_lastidt_nextidt_repliestmakefilet_rft_wf(RRR((s)/usr/lib64/python2.7/Demo/pdist/client.pyRs							cCs|jd�|_dS(Ns.methods(t_callt_methods(R((s)/usr/lib64/python2.7/Demo/pdist/client.pyR%scCs|j�dS(N(t_close(R((s)/usr/lib64/python2.7/Demo/pdist/client.pyt__del__(scCsj|jr|jj�nd|_|jr;|jj�nd|_|jr]|jj�nd|_dS(N(RtclosetNoneRR(R((s)/usr/lib64/python2.7/Demo/pdist/client.pyR+s					cCs?||jkr2t||�}t|||�|St|�dS(N(Rt_stubtsetattrtAttributeError(Rtnametmethod((s)/usr/lib64/python2.7/Demo/pdist/client.pyt__getattr__3s
cCs
||_dS(N(R(RR((s)/usr/lib64/python2.7/Demo/pdist/client.pyt_setverbose:scGs|j||�S(N(t_vcall(RR"targs((s)/usr/lib64/python2.7/Demo/pdist/client.pyR=scCs|j|j||��S(N(t_recvt_vsend(RR"R'((s)/usr/lib64/python2.7/Demo/pdist/client.pyR&@scGs|j||�S(N(R)(RR"R'((s)/usr/lib64/python2.7/Demo/pdist/client.pyt_sendCscGs|j||d�S(Ni(R)(RR"R'((s)/usr/lib64/python2.7/Demo/pdist/client.pyt
_send_noreplyFscCs|j||d�S(Ni(R)(RR"R'((s)/usr/lib64/python2.7/Demo/pdist/client.pyt_vsend_noreplyIsicCsy|j}|d|_|s&|}n|||f}|jdkrVdt|�GHntj|j�}|j|�|S(Nissending request: %s(RRR
tpickletPicklerRtdump(RR"R't	wantreplytidtrequesttwp((s)/usr/lib64/python2.7/Demo/pdist/client.pyR)Ls	


cCs�|j|�\}}}||kr:td||f�n|dkrJ|S|}tt|�rqtt|�}n|dkr�tj}n||kr�|}n||�dS(Ns request/reply id mismatch: %d/%dsposix.errors	mac.error(sposix.errors	mac.error(t_vrecvtRuntimeErrorRthasattrt__builtin__tgetattrtosterror(RR1t	exceptiontvaluetridtx((s)/usr/lib64/python2.7/Demo/pdist/client.pyR(Vs	cCs@|j�|jj|�rR|jdkr7d|GHn|j|}|j|=|St|�}x�|jdkr|d|GHntj|j�}|j�}~|jdkr�dt	|�GHn|d}t|�}||kr�|jdkr�dGHn|S||j|<||kra|jdkr+dGHndd|fSqaWdS(Nis"retrieving previous reply, id = %dswaiting for reply, id = %ds
got reply: %sisgot itsgot higher id, assume all ok(t_flushRthas_keyRtabsR-t	UnpicklerRtloadR
R(RR1treplytaidtrpR=tarid((s)/usr/lib64/python2.7/Demo/pdist/client.pyR4es6




cCs|jj�dS(N(Rtflush(R((s)/usr/lib64/python2.7/Demo/pdist/client.pyR?}s(t__name__t
__module__t__doc__tVERBOSERRRRRR$R%RR&R*R+R,R)R(R4R?(((s)/usr/lib64/python2.7/Demo/pdist/client.pyRs"										
		(tSecuritytSecureClientcBseZd�ZRS(cGs�ddl}t|j|�tj|�|jj�|jj�}|j	|j
|��}|j|�}tt
|��}|ddkr�|d }n|jj|d�|jj�|j�dS(Ni����tLls
(tstringtapplyRRMRRRHRtreadlinetatoitstript_encode_challengeR
tlongtwriteR(RR'RPtlinet	challengetresponse((s)/usr/lib64/python2.7/Demo/pdist/client.pyR�s



(RIRJR(((s)/usr/lib64/python2.7/Demo/pdist/client.pyRN�sRcBs eZdZd�Zd�ZRS(sJHelper class for Client -- each instance serves as a method of the client.cCs||_||_dS(N(t_clientt_name(RtclientR"((s)/usr/lib64/python2.7/Demo/pdist/client.pyR�s	cGs|jj|j|�S(N(R[R&R\(RR'((s)/usr/lib64/python2.7/Demo/pdist/client.pyt__call__�s(RIRJRKRR^(((s)/usr/lib64/python2.7/Demo/pdist/client.pyR�s	(((RKtsysRR-R7R9RLRtsecurityRMRNR(((s)/usr/lib64/python2.7/Demo/pdist/client.pyt<module>ssPKb1�Zl��pdist/rcsclient.pynu�[���"""Customize this file to change the default client etc.

(In general, it is probably be better to make local operation the
default and to require something like an RCSSERVER environment
variable to enable remote operation.)

"""

import string
import os

# These defaults don't belong here -- they should be taken from the
# environment or from a hidden file in the current directory

HOST = 'voorn.cwi.nl'
PORT = 4127
VERBOSE = 1
LOCAL = 0

import client


class RCSProxyClient(client.SecureClient):

    def __init__(self, address, verbose = client.VERBOSE):
        client.SecureClient.__init__(self, address, verbose)


def openrcsclient(opts = []):
    "open an RCSProxy client based on a list of options returned by getopt"
    import RCSProxy
    host = HOST
    port = PORT
    verbose = VERBOSE
    local = LOCAL
    directory = None
    for o, a in opts:
        if o == '-h':
            host = a
            if ':' in host:
                i = string.find(host, ':')
                host, p = host[:i], host[i+1:]
                if p:
                    port = string.atoi(p)
        if o == '-p':
            port = string.atoi(a)
        if o == '-d':
            directory = a
        if o == '-v':
            verbose = verbose + 1
        if o == '-q':
            verbose = 0
        if o == '-L':
            local = 1
    if local:
        import RCSProxy
        x = RCSProxy.RCSProxyLocal()
    else:
        address = (host, port)
        x = RCSProxyClient(address, verbose)
    if not directory:
        try:
            directory = open(os.path.join("CVS", "Repository")).readline()
        except IOError:
            pass
        else:
            if directory[-1] == '\n':
                directory = directory[:-1]
    if directory:
        x.cd(directory)
    return x
PKb1�Z����GGpdist/RCSProxy.pycnu�[����
Afc@s�dZddlZddlZddlZddlZddlZddlZddlZddd��YZdej	efd��YZ
de
ejfd��YZd	�Z
d
�Zedkr�e�ndS(
sRCS Proxy.

Provide a simplified interface on RCS files, locally or remotely.
The functionality is geared towards implementing some sort of
remote CVS like utility.  It is modeled after the similar module
FSProxy.

The module defines two classes:

RCSProxyLocal  -- used for local access
RCSProxyServer -- used on the server side of remote access

The corresponding client class, RCSProxyClient, is defined in module
rcsclient.

The remote classes are instantiated with an IP address and an optional
verbosity flag.
i����Nt
DirSupportcBseeZd�Zd�Zd�Zd�Zd�Zd�Zd
d�Z	d�Z
d�Zd	�ZRS(cCs
g|_dS(N(t	_dirstack(tself((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyt__init__!scCs|j�dS(N(t_close(R((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyt__del__$scCsx|jr|j�qWdS(N(Rtback(R((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyR'scCs
tj�S(N(tostgetcwd(R((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pytpwd+scCs-tj�}tj|�|jj|�dS(N(RRtchdirRtappend(Rtnametsave((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pytcd.s
cCs@|jstjd�n|jd}tj|�|jd=dS(Nsempty directory stacki����(RRterrorR
(Rtdir((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyR3s
	

cCs7tjtj�}ttjj|�}|j||�S(N(Rtlistdirtcurdirtfiltertpathtisdirt_filter(Rtpattfiles((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pytlistsubdirs:scCstjj|�S(N(RRR(RR((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyR?scCstj|d�dS(Ni�(Rtmkdir(RR((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyRBscCstj|�dS(N(Rtrmdir(RR((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyREsN(
t__name__t
__module__RRRR	RRtNoneRRRR(((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyRs								t
RCSProxyLocalcBsheZd�Zd�Zd	d�Zd	d�Zd�Zd�Zd	d�Z	d	d�Z
d	d�ZRS(
cCs!tjj|�tj|�dS(N(trcslibtRCSRR(R((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyRKscCs!tj|�tjj|�dS(N(RRR R!(R((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyROs
cCs|j|j|�S(N(t_listtsum(Rtlist((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pytsumlistSscCs|j|j|�S(N(t_dictR#(RR$((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pytsumdictVscCse|j|�}d}tj�}x*|j|�}|s=Pn|j|�q$W|j|�|j�S(Niii (t_opentmd5tnewtreadtupdatet
_closepipetdigest(Rtname_revtft
BUFFERSIZER#tbuffer((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyR#Ys
cCs,|j|�}|j�}|j|�|S(N(R(R+R-(RR/R0tdata((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pytgetes
cCs\|j|�\}}t|d�}|j|�|j�|j||�|j|�dS(Ntw(t	_unmangletopentwritetclosetcheckint_remove(RR/R3tmessageRtrevR0((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pytputks

cCs�|dkr|j�}ng}x[|D]S}y|j|||�f�Wq(tjtfk
rz|j|df�q(Xq(W|S(s�INTERNAL: apply FUNCTION to all files in LIST.

        Return a list of the results.

        The list defaults to all files in the directory if None.

        N(Rt	listfilesRRRtIOError(RtfunctionR$tresR((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyR"ss
cCsg|dkr|j�}ni}x?|D]7}y||�||<Wq(tjtfk
r^q(Xq(W|S(s�INTERNAL: apply FUNCTION to all files in LIST.

        Return a dictionary mapping files to results.

        The list defaults to all files in the directory if None.

        N(RR?RRR@(RRAR$tdictR((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyR&�s
N(RRRRRR%R'R#R4R>R"R&(((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyRIs				tRCSProxyServercBs)eZejd�Zd�Zd�ZRS(cCs'tj|�tjj|||�dS(N(RRtservertSecureServer(Rtaddresstverbose((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyR�s
cCs!tjj|�tj|�dS(N(RERFRR(R((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyR�scCs.tjj|�x|jr)|j�qWdS(N(RERFt_serveRR(R((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyRI�s(RRREtVERBOSERRRI(((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyRD�s	cCsdddl}ddl}|jdr>|j|jd�}nd}td|f�}|j�dS(Ni����iit(tstringtsystargvtatoiRDt_serverloop(RLRMtporttproxy((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyttest_server�s
cCs�ddl}|jds>|jdrU|jdddkrUt�|jd�nt�}|jd}t||�r�t||�}t|�r�t|t	|jd��GHq�t
|�GHnd|GH|jd�dS(Ni����iit
0123456789is%s: no such attribute(RMRNRStexitRthasattrtgetattrtcallabletapplyttupletrepr(RMRRtwhattattr((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyttest�s2	
	t__main__((t__doc__RER)RtfnmatchRLttempfileR RR!RRFRDRSR^R(((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyt<module>s*O		PKb1�ZH��xT3T3pdist/cvslib.pyonu�[����
��^c@s�dZddlZddlZddlZddlZddlZeed�s]de_nddd��YZddd��YZ	d	d
Z
d�Zd�ZiZ
d
�Zd�Zd�Zd�Zedkr�e�ndS(s!Utilities for CVS administration.i����NttimezoneitFilecBs\eZdZd	d�Zd�Zd�Zd�Zd	d�Zd�Z	d�Z
d�ZRS(
s�Represent a file's status.

    Instance variables:

    file -- the filename (no slashes), None if uninitialized
    lseen -- true if the data for the local file is up to date
    eseen -- true if the data from the CVS/Entries entry is up to date
             (this implies that the entry must be written back)
    rseen -- true if the data for the remote file is up to date
    proxy -- RCSProxy instance used to contact the server, or None

    Note that lseen and rseen don't necessary mean that a local
    or remote file *exists* -- they indicate that we've checked it.
    However, eseen means that this instance corresponds to an
    entry in the CVS/Entries file.

    If lseen is true:

    lsum -- checksum of the local file, None if no local file
    lctime -- ctime of the local file, None if no local file
    lmtime -- mtime of the local file, None if no local file

    If eseen is true:

    erev -- revision, None if this is a no revision (not '0')
    enew -- true if this is an uncommitted added file
    edeleted -- true if this is an uncommitted removed file
    ectime -- ctime of last local file corresponding to erev
    emtime -- mtime of last local file corresponding to erev
    extra -- 5th string from CVS/Entries file

    If rseen is true:

    rrev -- revision of head, None if non-existent
    rsum -- checksum of that revision, Non if non-existent

    If eseen and rseen are both true:

    esum -- checksum of revision erev, None if no revision

    Note
    cCsK|rd|krtd�n||_d|_|_|_d|_dS(Nt/sno slash allowed in filei(t
ValueErrortfiletlseenteseentrseentNonetproxy(tselfR((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyt__init__9s
	cCst|j|j�S(N(tcmpR(R
tother((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyt__cmp__@scCs�y&tj|j�d\|_|_Wn+tjk
rSd|_|_|_n(Xtj	t
|j�j��j�|_d|_
dS(Ni����i(toststatRtlmtimetlctimeterrorRtlsumtmd5tnewtopentreadtdigestR(R
((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pytgetlocalCs&'cCs)tj|d�}|jr:|d|jkr:td�n|d|_|d|_d|_d|_d|_|_	|jd dkr�d|_|jd|_n|jdkr�d|_d|_n0|d}t
|d	 �|_t
|d
�|_	|d|_|jr|j
�nd|_dS(NRisfile name mismatchiit-t0iiii(tstringtsplitfieldsRRterevtedeletedtenewRtectimetemtimetunctimetextraRtgetesumR(R
tlinetwordstdates((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pytgetentryLs*

				

	
cCs�|r||_ny|jj|j�|_Wn#tjtfk
rSd|_nX|jrx|jj|j�|_	n	d|_	|j
r�|j�nd|_dS(Ni(
R	theadRtrrevRRtIOErrorRtsumtrsumRR&R(R
R	((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyt	getremoteds
			
cCsa|j|jkr!|j|_n<|jrT|j|jf}|jj|�|_n	d|_dS(N(RR,R/tesumRR	R.R(R
tname((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyR&ss	cCs�|js
dS|jpd}|jr2d|}n|jrKd|j}n t|j�dt|j�}d|j|||jfS(s�Return a line suitable for inclusion in CVS/Entries.

        The returned line is terminated by a newline.
        If no entry should be written for this file,
        return "".
        tRRsInitial t s/%s/%s/%s/%s/
(	RRR R!RtgmctimeR"R#R%(R
trevR)((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pytputentry|s		
	cCs�ddGHt|d�}|d�|jrU|dt�|dt�|dt�n|jr�|d�|d	�|d
�|dt�|dt�n|jr�|d
�|dt�|jr�|dt�q�ndS(NRi2cSsDy|t||��}Wntk
r2d}nXd|G|GHdS(Nt?s%-15s:(tgetattrtAttributeError(tkeytreprR
tvalue((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pytr�s


RRRRRR!R R"R#R,R/R1(R<RthexifyR5RR(R
R>((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pytreport�s$	
	

	



	

	N(t__name__t
__module__t__doc__RRRRR*R0R&R7R@(((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyRs+							tCVScBs�eZdZeZddddddddgZd	�Zd
�Zd�Zd�Z	d
�Z
dd�Zd�Z
d�Zd�Zd�Zd�Zdd�Zd�Zd�ZRS(s�Represent the contents of a CVS admin file (and more).

    Class variables:

    FileClass -- the class to be instantiated for entries
                 (this should be derived from class File above)
    IgnoreList -- shell patterns for local files to be ignored

    Instance variables:

    entries -- a dictionary containing File instances keyed by
               their file name
    proxy -- an RCSProxy instance, or None
    s.*s@*s,*s*~s*.os*.as*.sos*.pyccCsi|_d|_dS(N(tentriesRR	(R
((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyR�s	cCsC||jkrdS||_x |jj�D]}d|_q,WdS(Ni(R	REtvaluesR(R
R	te((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pytsetproxy�s
	cCsli|_|jd�}xC|j�}|s1Pn|j�}|j|�||j|j<qW|j�dS(s Read the contents of CVS/EntriestEntriesN(REtcvsopentreadlinet	FileClassR*Rtclose(R
tfR'RG((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyt
getentries�s	
cCsJ|jdd�}x'|j�D]}|j|j��qW|j�dS(sWrite CVS/Entries backRItwN(RJRFtwriteR7RM(R
RNRG((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyt
putentries�scCs�|jj�}tjtj�}x?|D]7}||kr@q(n|j|�s(|j|�q(q(W|j�xW|D]O}y|j|}Wn+tk
r�|j	|�}|j|<nX|j
�qtWdS(N(REtkeysRtlistdirtcurdirtignoredtappendtsorttKeyErrorRLR(R
tlisttaddlistR2RRG((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyt
getlocalfiles�s



cCs�|r||_n|js'td�n|jj�}x]|D]U}y|j|}Wn+tk
r�|j|�}|j|<nX|j|j�q=WdS(Nsno RCS proxy(R	tRuntimeErrort	listfilesRERYRLR0(R
R	R[RRG((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pytgetremotefiles�s	

cCs.x|j�D]}|j�q
WddGHdS(NRi2(RFR@(R
RG((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyR@�scCs|jj�}|j�|S(N(RERSRX(R
RS((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyRSs
cCs|d�}t||j��S(NcSs|j|S(N(RE(R;R
((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyR=	s(tmapRS(R
R=((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyRFscCs|d�}t||j��S(NcSs||j|fS(N(RE(R;R
((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pytitems(R`RS(R
Ra((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pytitems
scCs%tjjd|�}tjj|�S(NRD(Rtpathtjointexists(R
R((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyt	cvsexistssR>cCs>tjjd|�}d|kr1|j|�nt||�S(NRDR>(RRcRdtbackupR(R
Rtmode((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyRJscCs[tjj|�rW|d}ytj|�Wntjk
rCnXtj||�ndS(Nt~(RRctisfiletunlinkRtrename(R
Rtbfile((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyRgs
cCsDtjj|�rtSx'|jD]}tj||�r tSq WtS(N(RRctisdirtTruet
IgnoreListtfnmatchtFalse(R
Rtpat((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyRV#sN(RARBRCRRLRpRRHRORRR\RR_R@RSRFRbRfRJRgRV(((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyRD�s"					
						s%02xicCs'|dkrdStttt|��S(sDReturn a hex representation of a 16-byte string (e.g. an MD5 digest)RN(Rt
hexify_formatttupleR`tord(R.((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyR?-scCsd|dkrdSd}xGtdt|�d�D]-}|ttj|||d!d��}q/W|S(s*Return the original from a hexified stringRR3iiiN(RtrangetlentchrRtatoi(thexsumR.ti((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pytunhexify3s+cCs|dkrdStsndddddddd	d
ddd
g}d}x%|D]}|d}|t|<qMWntj|�}tj|d�}t|d}tj|d�}ttjtj|dd��\}}	}
|
tj}
tj	|||||	|
dddf	�S(NRtJantFebtMartAprtMaytJuntJultAugtSeptOcttNovtDeciiiiit:(
Rtunctime_monthmapRtsplitRzR`RttimeRtmktime(tdatetmonthsR|tmR(tyeartmonthtdaythhtmmtss((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyR$>s 

+
cCs&|dkrdStjtj|��S(NR(RR�tasctimetgmtime(tt((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyR5OscCs�ttj��}tj|�}tj|�}dG|G|GHdGtjGHdGtj|�GHt|�}dG|GHtj|�}dG|GHtj|�GHdS(NtGMTRtlocals	unctime()s->(tintR�R�R�RtctimeR$(tnowR�tattutgu((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyttest_unctimeSs
		cCsPt�}|j�|j�ddl}|j�}|j|�|j�dS(Ni����(RDROR\t	rcsclientt
openrcsclientR_R@(txR�R	((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyttest`s	


t__main__(((RCRRR�RRqthasattrRRRDRtR?R}R�R$R5R�R�RA(((s)/usr/lib64/python2.7/Demo/pdist/cvslib.pyt<module>s&�~
		
			
	PKb1�ZȘy��pdist/cmptree.pynu�[���"""Compare local and remote dictionaries and transfer differing files -- like rdist."""

import sys
from repr import repr
import FSProxy
import time
import os

def main():
    pwd = os.getcwd()
    s = raw_input("chdir [%s] " % pwd)
    if s:
        os.chdir(s)
        pwd = os.getcwd()
    host = ask("host", 'voorn.cwi.nl')
    port = 4127
    verbose = 1
    mode = ''
    print """\
Mode should be a string of characters, indicating what to do with differences.
r - read different files to local file system
w - write different files to remote file system
c - create new files, either remote or local
d - delete disappearing files, either remote or local
"""
    s = raw_input("mode [%s] " % mode)
    if s: mode = s
    address = (host, port)
    t1 = time.time()
    local = FSProxy.FSProxyLocal()
    remote = FSProxy.FSProxyClient(address, verbose)
    compare(local, remote, mode)
    remote._close()
    local._close()
    t2 = time.time()
    dt = t2-t1
    mins, secs = divmod(dt, 60)
    print mins, "minutes and", round(secs), "seconds"
    raw_input("[Return to exit] ")

def ask(prompt, default):
    s = raw_input("%s [%s] " % (prompt, default))
    return s or default

def askint(prompt, default):
    s = raw_input("%s [%s] " % (prompt, str(default)))
    if s: return string.atoi(s)
    return default

def compare(local, remote, mode):
    print
    print "PWD =", repr(os.getcwd())
    sums_id = remote._send('sumlist')
    subdirs_id = remote._send('listsubdirs')
    remote._flush()
    print "calculating local sums ..."
    lsumdict = {}
    for name, info in local.sumlist():
        lsumdict[name] = info
    print "getting remote sums ..."
    sums = remote._recv(sums_id)
    print "got", len(sums)
    rsumdict = {}
    for name, rsum in sums:
        rsumdict[name] = rsum
        if not lsumdict.has_key(name):
            print repr(name), "only remote"
            if 'r' in mode and 'c' in mode:
                recvfile(local, remote, name)
        else:
            lsum = lsumdict[name]
            if lsum != rsum:
                print repr(name),
                rmtime = remote.mtime(name)
                lmtime = local.mtime(name)
                if rmtime > lmtime:
                    print "remote newer",
                    if 'r' in mode:
                        recvfile(local, remote, name)
                elif lmtime > rmtime:
                    print "local newer",
                    if 'w' in mode:
                        sendfile(local, remote, name)
                else:
                    print "same mtime but different sum?!?!",
                print
    for name in lsumdict.keys():
        if not rsumdict.keys():
            print repr(name), "only locally",
            fl()
            if 'w' in mode and 'c' in mode:
                sendfile(local, remote, name)
            elif 'r' in mode and 'd' in mode:
                os.unlink(name)
                print "removed."
            print
    print "gettin subdirs ..."
    subdirs = remote._recv(subdirs_id)
    common = []
    for name in subdirs:
        if local.isdir(name):
            print "Common subdirectory", repr(name)
            common.append(name)
        else:
            print "Remote subdirectory", repr(name), "not found locally"
            if 'r' in mode and 'c' in mode:
                pr = "Create local subdirectory %s? [y] " % \
                     repr(name)
                if 'y' in mode:
                    ok = 'y'
                else:
                    ok = ask(pr, "y")
                if ok[:1] in ('y', 'Y'):
                    local.mkdir(name)
                    print "Subdirectory %s made" % \
                            repr(name)
                    common.append(name)
    lsubdirs = local.listsubdirs()
    for name in lsubdirs:
        if name not in subdirs:
            print "Local subdirectory", repr(name), "not found remotely"
    for name in common:
        print "Entering subdirectory", repr(name)
        local.cd(name)
        remote.cd(name)
        compare(local, remote, mode)
        remote.back()
        local.back()

def sendfile(local, remote, name):
    try:
        remote.create(name)
    except (IOError, os.error), msg:
        print "cannot create:", msg
        return

    print "sending ...",
    fl()

    data = open(name).read()

    t1 = time.time()

    remote._send_noreply('write', name, data)
    remote._flush()

    t2 = time.time()

    dt = t2-t1
    print len(data), "bytes in", round(dt), "seconds",
    if dt:
        print "i.e.", round(len(data)/dt), "bytes/sec",
    print

def recvfile(local, remote, name):
    ok = 0
    try:
        rv = recvfile_real(local, remote, name)
        ok = 1
        return rv
    finally:
        if not ok:
            print "*** recvfile of %r failed, deleting" % (name,)
            local.delete(name)

def recvfile_real(local, remote, name):
    try:
        local.create(name)
    except (IOError, os.error), msg:
        print "cannot create:", msg
        return

    print "receiving ...",
    fl()

    f = open(name, 'w')
    t1 = time.time()

    length = 4*1024
    offset = 0
    id = remote._send('read', name, offset, length)
    remote._flush()
    while 1:
        newoffset = offset + length
        newid = remote._send('read', name, newoffset, length)
        data = remote._recv(id)
        id = newid
        if not data: break
        f.seek(offset)
        f.write(data)
        offset = newoffset
    size = f.tell()

    t2 = time.time()
    f.close()

    dt = t2-t1
    print size, "bytes in", round(dt), "seconds",
    if dt:
        print "i.e.", size//dt, "bytes/sec",
    print
    remote._recv(id) # ignored

def fl():
    sys.stdout.flush()

if __name__ == '__main__':
    main()
PKb1�Z)���SSpdist/server.pycnu�[����
��^c@s�dZddlZddlZddlZddlmZddlmZdZddd��YZddlm	Z	d	ee	fd
��YZ
dS(sRPC Server module.i����N(tfnmatch(trepritServercBs�eZdZed�Zd�Zd�Zd�Zd�Zd�Z	ddd	d
gZ
d�Zd�Zd
�Z
dd�ZRS(sDRPC Server class.  Derive a class to implement a particular service.cCs�t|�td�kr'd|f}n||_||_d|_tjtjtj�|_|jj|�|jj	d�d|_
dS(Niti(ttypet_addresst_verbosetNonet_sockettsockettAF_INETtSOCK_STREAMtbindtlistent
_listening(tselftaddresstverbose((s)/usr/lib64/python2.7/Demo/pdist/server.pyt__init__s			cCs
||_dS(N(R(RR((s)/usr/lib64/python2.7/Demo/pdist/server.pyt_setverbosescCs|j�dS(N(t_close(R((s)/usr/lib64/python2.7/Demo/pdist/server.pyt__del__ scCs/d|_|jr"|jj�nd|_dS(Ni(RRtcloseR(R((s)/usr/lib64/python2.7/Demo/pdist/server.pyR#s		cCsx|jr|j�qWdS(N(Rt_serve(R((s)/usr/lib64/python2.7/Demo/pdist/server.pyt_serverloop)scCs�|jrdGHn|jj�\}}|jrAdt|�GHn|j||�spdt|�GH|j�dS|jd�}|jd�}d}x=|r�|j�|jdkr�dGHn|j||�}q�WdS(NsWait for connection ...sAccepted connection from %ss*** Connection from %s refusedtrtwisWait for next request ...(	RRtacceptRt_verifyRtmakefiletflusht
_dorequest(RtconnRtrftwftok((s)/usr/lib64/python2.7/Demo/pdist/server.pyR-s"		
	
s192.16.201.*s192.16.197.*s132.151.1.*s
129.6.64.*cCs7|\}}x$|jD]}t||�rdSqWdS(Nii(t_validR(RR Rthosttporttpat((s)/usr/lib64/python2.7/Demo/pdist/server.pyR?s
cCsvtj|�}y|j�}Wntk
r3dSX|jdkrUdt|�GHny�|\}}}d|kr�d|j||�|f}nM|ddkr�tdt|��n't	||�}	dt
|	|�|f}Wntjtj
|f}nX|dkr5|d d
kr5|jdkr1dGHndS|jdkrVd	t|�GHntj|�}
|
j|�dS(NiisGot request: %st.t_sillegal method name %sisSuppress replysSend reply: %s(NN(tpicklet	UnpicklertloadtEOFErrorRRRt_specialt	NameErrortgetattrtapplytsystexc_typet	exc_valuetPicklertdump(RR!R"trptrequestt
methodnametargstidtreplytmethodtwp((s)/usr/lib64/python2.7/Demo/pdist/server.pyREs4

cCsQ|dkr:t|d�s3t|j��|_n|jStdt|��dS(Ns.methodst_methodss#unrecognized special method name %s(thasattrttuplet_listmethodsR?R/R(RR9R:((s)/usr/lib64/python2.7/Demo/pdist/server.pyR._s
cCs�|s|j}n|jj�}td�|�}|j�xE|jD]:}|j|�}t|d�|�}||t|�)qGW|S(NcSs|ddkS(NiR)((tx((s)/usr/lib64/python2.7/Demo/pdist/server.pyt<lambda>iRcSs
||kS(N((RCtnames((s)/usr/lib64/python2.7/Demo/pdist/server.pyRDmR(t	__class__t__dict__tkeystfiltertsortt	__bases__RBtlen(RtclREtbaset	basenames((s)/usr/lib64/python2.7/Demo/pdist/server.pyRBfs
N(t__name__t
__module__t__doc__tVERBOSERRRRRRR$RRR.RRB(((s)/usr/lib64/python2.7/Demo/pdist/server.pyRs								(tSecuritytSecureServercBseZd�Zd�ZRS(cGs(ttj|f|�tj|�dS(N(R1RRRT(RR:((s)/usr/lib64/python2.7/Demo/pdist/server.pyRwscCsddl}|j�}|jd|�d}xEd|krvt|�dkrv|jd�}|siPn||}q2Wy|j|j|��}Wn6|jk
r�|jdkr�dGt	|�GHndSX|j
||�s|jdkr�dGt	|�GHndS|jd	krd
GHnd	S(Ni����s%d
Rs
idisInvalid response syntaxsInvalid response valueis&Response matches challenge.  Go ahead!(tstringt_generate_challengetsendRLtrecvtatoltstript
atol_errorRRt_compare_challenge_response(RR RRVt	challengetresponsetdata((s)/usr/lib64/python2.7/Demo/pdist/server.pyR{s,!(RPRQRR(((s)/usr/lib64/python2.7/Demo/pdist/server.pyRUus	((RRR2R	R*RRRSRtsecurityRTRU(((s)/usr/lib64/python2.7/Demo/pdist/server.pyt<module>sdPKb1�Z�,��pdist/READMEnu�[���Filesystem, RCS and CVS client and server classes
=================================================

*** See the security warning at the end of this file! ***

This directory contains various modules and classes that support
remote file system operations.

CVS stuff
---------

rcvs			Script to put in your bin directory
rcvs.py			Remote CVS client command line interface

cvslib.py		CVS admin files classes (used by rrcs)
cvslock.py		CVS locking algorithms

RCS stuff
---------

rrcs			Script to put in your bin directory
rrcs.py			Remote RCS client command line interface

rcsclient.py		Return an RCSProxyClient instance
			(has reasonable default server/port/directory)

RCSProxy.py		RCS proxy and server classes (on top of rcslib.py)

rcslib.py		Local-only RCS base class (affects stdout &
			local work files)

FSProxy stuff
-------------

sumtree.py		Old demo for FSProxy
cmptree.py		First FSProxy client (used to sync from the Mac)
FSProxy.py		Filesystem interface classes

Generic client/server stuff
---------------------------

client.py		Client class
server.py		Server class

security.py		Security mix-in class (not very secure I think)

Other generic stuff
-------------------

cmdfw.py		CommandFrameWork class
			(used by rcvs, should be used by rrcs as well)


Client/Server operation
-----------------------

The Client and Server classes implement a simple-minded RPC protocol,
using Python's pickle module to transfer arguments, return values and
exceptions with the most generality.  The Server class is instantiated
with a port number on which it should listen for requests; the Client
class is instantiated with a host name and a port number where it
should connect to.  Once a client is connected, a TCP connection is
maintained between client and server.

The Server class currently handles only one connection at a time;
however it could be rewritten to allow various modes of operations,
using multiple threads or processes or the select() system call as
desired to serve multiple clients simultaneously (when using select(),
still handling one request at a time).  This would not require
rewriting of the Client class.  It may also be possible to adapt the
code to use UDP instead of TCP, but then both classes will have to be
rewritten (and unless extensive acknowlegements and request serial
numbers are used, the server should handle duplicate requests, so its
semantics should be idempotent -- shrudder).

Even though the FSProxy and RCSProxy modules define client classes,
the client class is fully generic -- what methods it supports is
determined entirely by the server.  The server class, however, must be
derived from.  This is generally done as follows:

	from server import Server
	from client import Client

	# Define a class that performs the operations locally
	class MyClassLocal:
		def __init__(self): ...
		def _close(self): ...

	# Derive a server class using multiple inheritance
	class MyClassServer(MyClassLocal, Server):
		def __init__(self, address):
			# Must initialize MyClassLocal as well as Server
			MyClassLocal.__init__(self)
			Server.__init__(self, address)
		def _close(self):
			Server._close()
			MyClassLocal._close()

	# A dummy client class
	class MyClassClient(Client): pass

Note that because MyClassLocal isn't used in the definition of
MyClassClient, it would actually be better to place it in a separate
module so the definition of MyClassLocal isn't executed when we only
instantiate a client.

The modules client and server should probably be renamed to Client and
Server in order to match the class names.


*** Security warning: this version requires that you have a file
$HOME/.python_keyfile at the server and client side containing two
comma- separated numbers.  The security system at the moment makes no
guarantees of actuallng being secure -- however it requires that the
key file exists and contains the same numbers at both ends for this to
work.  (You can specify an alternative keyfile in $PYTHON_KEYFILE).
Have a look at the Security class in security.py for details;
basically, if the key file contains (x, y), then the security server
class chooses a random number z (the challenge) in the range
10..100000 and the client must be able to produce pow(z, x, y)
(i.e. z**x mod y).
PKb1�Z�W�sspdist/cvslock.pynu�[���"""CVS locking algorithm.

CVS locking strategy
====================

As reverse engineered from the CVS 1.3 sources (file lock.c):

- Locking is done on a per repository basis (but a process can hold
write locks for multiple directories); all lock files are placed in
the repository and have names beginning with "#cvs.".

- Before even attempting to lock, a file "#cvs.tfl.<pid>" is created
(and removed again), to test that we can write the repository.  [The
algorithm can still be fooled (1) if the repository's mode is changed
while attempting to lock; (2) if this file exists and is writable but
the directory is not.]

- While creating the actual read/write lock files (which may exist for
a long time), a "meta-lock" is held.  The meta-lock is a directory
named "#cvs.lock" in the repository.  The meta-lock is also held while
a write lock is held.

- To set a read lock:

        - acquire the meta-lock
        - create the file "#cvs.rfl.<pid>"
        - release the meta-lock

- To set a write lock:

        - acquire the meta-lock
        - check that there are no files called "#cvs.rfl.*"
                - if there are, release the meta-lock, sleep, try again
        - create the file "#cvs.wfl.<pid>"

- To release a write lock:

        - remove the file "#cvs.wfl.<pid>"
        - rmdir the meta-lock

- To release a read lock:

        - remove the file "#cvs.rfl.<pid>"


Additional notes
----------------

- A process should read-lock at most one repository at a time.

- A process may write-lock as many repositories as it wishes (to avoid
deadlocks, I presume it should always lock them top-down in the
directory hierarchy).

- A process should make sure it removes all its lock files and
directories when it crashes.

- Limitation: one user id should not be committing files into the same
repository at the same time.


Turn this into Python code
--------------------------

rl = ReadLock(repository, waittime)

wl = WriteLock(repository, waittime)

list = MultipleWriteLock([repository1, repository2, ...], waittime)

"""


import os
import time
import stat
import pwd


# Default wait time
DELAY = 10


# XXX This should be the same on all Unix versions
EEXIST = 17


# Files used for locking (must match cvs.h in the CVS sources)
CVSLCK = "#cvs.lck"
CVSRFL = "#cvs.rfl."
CVSWFL = "#cvs.wfl."


class Error:

    def __init__(self, msg):
        self.msg = msg

    def __repr__(self):
        return repr(self.msg)

    def __str__(self):
        return str(self.msg)


class Locked(Error):
    pass


class Lock:

    def __init__(self, repository = ".", delay = DELAY):
        self.repository = repository
        self.delay = delay
        self.lockdir = None
        self.lockfile = None
        pid = repr(os.getpid())
        self.cvslck = self.join(CVSLCK)
        self.cvsrfl = self.join(CVSRFL + pid)
        self.cvswfl = self.join(CVSWFL + pid)

    def __del__(self):
        print "__del__"
        self.unlock()

    def setlockdir(self):
        while 1:
            try:
                self.lockdir = self.cvslck
                os.mkdir(self.cvslck, 0777)
                return
            except os.error, msg:
                self.lockdir = None
                if msg[0] == EEXIST:
                    try:
                        st = os.stat(self.cvslck)
                    except os.error:
                        continue
                    self.sleep(st)
                    continue
                raise Error("failed to lock %s: %s" % (
                        self.repository, msg))

    def unlock(self):
        self.unlockfile()
        self.unlockdir()

    def unlockfile(self):
        if self.lockfile:
            print "unlink", self.lockfile
            try:
                os.unlink(self.lockfile)
            except os.error:
                pass
            self.lockfile = None

    def unlockdir(self):
        if self.lockdir:
            print "rmdir", self.lockdir
            try:
                os.rmdir(self.lockdir)
            except os.error:
                pass
            self.lockdir = None

    def sleep(self, st):
        sleep(st, self.repository, self.delay)

    def join(self, name):
        return os.path.join(self.repository, name)


def sleep(st, repository, delay):
    if delay <= 0:
        raise Locked(st)
    uid = st[stat.ST_UID]
    try:
        pwent = pwd.getpwuid(uid)
        user = pwent[0]
    except KeyError:
        user = "uid %d" % uid
    print "[%s]" % time.ctime(time.time())[11:19],
    print "Waiting for %s's lock in" % user, repository
    time.sleep(delay)


class ReadLock(Lock):

    def __init__(self, repository, delay = DELAY):
        Lock.__init__(self, repository, delay)
        ok = 0
        try:
            self.setlockdir()
            self.lockfile = self.cvsrfl
            fp = open(self.lockfile, 'w')
            fp.close()
            ok = 1
        finally:
            if not ok:
                self.unlockfile()
            self.unlockdir()


class WriteLock(Lock):

    def __init__(self, repository, delay = DELAY):
        Lock.__init__(self, repository, delay)
        self.setlockdir()
        while 1:
            uid = self.readers_exist()
            if not uid:
                break
            self.unlockdir()
            self.sleep(uid)
        self.lockfile = self.cvswfl
        fp = open(self.lockfile, 'w')
        fp.close()

    def readers_exist(self):
        n = len(CVSRFL)
        for name in os.listdir(self.repository):
            if name[:n] == CVSRFL:
                try:
                    st = os.stat(self.join(name))
                except os.error:
                    continue
                return st
        return None


def MultipleWriteLock(repositories, delay = DELAY):
    while 1:
        locks = []
        for r in repositories:
            try:
                locks.append(WriteLock(r, 0))
            except Locked, instance:
                del locks
                break
        else:
            break
        sleep(instance.msg, r, delay)
    return list


def test():
    import sys
    if sys.argv[1:]:
        repository = sys.argv[1]
    else:
        repository = "."
    rl = None
    wl = None
    try:
        print "attempting write lock ..."
        wl = WriteLock(repository)
        print "got it."
        wl.unlock()
        print "attempting read lock ..."
        rl = ReadLock(repository)
        print "got it."
        rl.unlock()
    finally:
        print [1]
        sys.exc_traceback = None
        print [2]
        if rl:
            rl.unlock()
        print [3]
        if wl:
            wl.unlock()
        print [4]
        rl = None
        print [5]
        wl = None
        print [6]


if __name__ == '__main__':
    test()
PKb1�ZO��p!p!pdist/cvslock.pycnu�[����
��^c@s�dZddlZddlZddlZddlZdZdZdZdZdZ	ddd	��YZ
d
e
fd��YZddd
��YZd�Z
defd��YZdefd��YZed�Zd�Zedkr�e�ndS(s�CVS locking algorithm.

CVS locking strategy
====================

As reverse engineered from the CVS 1.3 sources (file lock.c):

- Locking is done on a per repository basis (but a process can hold
write locks for multiple directories); all lock files are placed in
the repository and have names beginning with "#cvs.".

- Before even attempting to lock, a file "#cvs.tfl.<pid>" is created
(and removed again), to test that we can write the repository.  [The
algorithm can still be fooled (1) if the repository's mode is changed
while attempting to lock; (2) if this file exists and is writable but
the directory is not.]

- While creating the actual read/write lock files (which may exist for
a long time), a "meta-lock" is held.  The meta-lock is a directory
named "#cvs.lock" in the repository.  The meta-lock is also held while
a write lock is held.

- To set a read lock:

        - acquire the meta-lock
        - create the file "#cvs.rfl.<pid>"
        - release the meta-lock

- To set a write lock:

        - acquire the meta-lock
        - check that there are no files called "#cvs.rfl.*"
                - if there are, release the meta-lock, sleep, try again
        - create the file "#cvs.wfl.<pid>"

- To release a write lock:

        - remove the file "#cvs.wfl.<pid>"
        - rmdir the meta-lock

- To release a read lock:

        - remove the file "#cvs.rfl.<pid>"


Additional notes
----------------

- A process should read-lock at most one repository at a time.

- A process may write-lock as many repositories as it wishes (to avoid
deadlocks, I presume it should always lock them top-down in the
directory hierarchy).

- A process should make sure it removes all its lock files and
directories when it crashes.

- Limitation: one user id should not be committing files into the same
repository at the same time.


Turn this into Python code
--------------------------

rl = ReadLock(repository, waittime)

wl = WriteLock(repository, waittime)

list = MultipleWriteLock([repository1, repository2, ...], waittime)

i����Ni
is#cvs.lcks	#cvs.rfl.s	#cvs.wfl.tErrorcBs#eZd�Zd�Zd�ZRS(cCs
||_dS(N(tmsg(tselfR((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyt__init__`scCs
t|j�S(N(treprR(R((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyt__repr__cscCs
t|j�S(N(tstrR(R((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyt__str__fs(t__name__t
__module__RRR(((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR^s		tLockedcBseZRS((RR	(((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR
jstLockcBsVeZded�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
RS(	t.cCsx||_||_d|_d|_ttj��}|jt	�|_
|jt|�|_|jt
|�|_dS(N(t
repositorytdelaytNonetlockdirtlockfileRtostgetpidtjointCVSLCKtcvslcktCVSRFLtcvsrfltCVSWFLtcvswfl(RR
Rtpid((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyRps				cCsdGH|j�dS(Nt__del__(tunlock(R((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyRzscCs�x�y'|j|_tj|jd�dSWqtjk
r�}d|_|dtkr�ytj|j�}Wntjk
r�qnX|j|�qnt	d|j
|f��qXqWdS(Ni�isfailed to lock %s: %s(RRRtmkdirterrorRtEEXISTtstattsleepRR
(RRtst((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyt
setlockdir~s 	
cCs|j�|j�dS(N(t
unlockfilet	unlockdir(R((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR�s
cCsP|jrLdG|jGHytj|j�Wntjk
r?nXd|_ndS(Ntunlink(RRR'RR(R((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR%�s	cCsP|jrLdG|jGHytj|j�Wntjk
r?nXd|_ndS(Ntrmdir(RRR(RR(R((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR&�s	cCst||j|j�dS(N(R"R
R(RR#((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR"�scCstjj|j|�S(N(RtpathRR
(Rtname((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR�s(RR	tDELAYRRR$RR%R&R"R(((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyRns
								cCs�|dkrt|��n|tj}ytj|�}|d}Wntk
rbd|}nXdtjtj��dd!Gd|G|GHtj|�dS(Nisuid %ds[%s]iisWaiting for %s's lock in(	R
R!tST_UIDtpwdtgetpwuidtKeyErrorttimetctimeR"(R#R
Rtuidtpwenttuser((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR"�s


tReadLockcBseZed�ZRS(cCsztj|||�d}z<|j�|j|_t|jd�}|j�d}Wd|sk|j�n|j�XdS(Nitwi(	RRR$RRtopentcloseR%R&(RR
Rtoktfp((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR�s



(RR	R+R(((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR5�st	WriteLockcBseZed�Zd�ZRS(cCs}tj|||�|j�x1|j�}|s6Pn|j�|j|�q W|j|_t|jd�}|j	�dS(NR6(
RRR$t
readers_existR&R"RRR7R8(RR
RR2R:((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR�s

cCswtt�}xdtj|j�D]P}|| tkrytj|j|��}Wntjk
rjqnX|SqWdS(N(	tlenRRtlistdirR
R!RRR(RtnR*R#((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR<�s(RR	R+RR<(((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR;�s
cCsjxcg}xC|D]:}y|jt|d��Wqtk
rI}~PqXqWPt|j||�qWtS(Ni(tappendR;R
R"Rtlist(trepositoriesRtlockstrtinstance((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pytMultipleWriteLock�s
	cCs�ddl}|jdr)|jd}nd}d}d}zDdGHt|�}dGH|j�dGHt|�}dGH|j�WddgGHd|_dgGH|r�|j�ndgGH|r�|j�nd	gGHd}d
gGHd}dgGHXdS(Ni����iRsattempting write lock ...sgot it.sattempting read lock ...iiiii(tsystargvRR;RR5t
exc_traceback(RGR
trltwl((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyttest�s8

	

t__main__(((t__doc__RR0R!R-R+R RRRRR
RR"R5R;RFRLR(((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyt<module>Gs&?		!PKb1�Z)���SSpdist/server.pyonu�[����
��^c@s�dZddlZddlZddlZddlmZddlmZdZddd��YZddlm	Z	d	ee	fd
��YZ
dS(sRPC Server module.i����N(tfnmatch(trepritServercBs�eZdZed�Zd�Zd�Zd�Zd�Zd�Z	ddd	d
gZ
d�Zd�Zd
�Z
dd�ZRS(sDRPC Server class.  Derive a class to implement a particular service.cCs�t|�td�kr'd|f}n||_||_d|_tjtjtj�|_|jj|�|jj	d�d|_
dS(Niti(ttypet_addresst_verbosetNonet_sockettsockettAF_INETtSOCK_STREAMtbindtlistent
_listening(tselftaddresstverbose((s)/usr/lib64/python2.7/Demo/pdist/server.pyt__init__s			cCs
||_dS(N(R(RR((s)/usr/lib64/python2.7/Demo/pdist/server.pyt_setverbosescCs|j�dS(N(t_close(R((s)/usr/lib64/python2.7/Demo/pdist/server.pyt__del__ scCs/d|_|jr"|jj�nd|_dS(Ni(RRtcloseR(R((s)/usr/lib64/python2.7/Demo/pdist/server.pyR#s		cCsx|jr|j�qWdS(N(Rt_serve(R((s)/usr/lib64/python2.7/Demo/pdist/server.pyt_serverloop)scCs�|jrdGHn|jj�\}}|jrAdt|�GHn|j||�spdt|�GH|j�dS|jd�}|jd�}d}x=|r�|j�|jdkr�dGHn|j||�}q�WdS(NsWait for connection ...sAccepted connection from %ss*** Connection from %s refusedtrtwisWait for next request ...(	RRtacceptRt_verifyRtmakefiletflusht
_dorequest(RtconnRtrftwftok((s)/usr/lib64/python2.7/Demo/pdist/server.pyR-s"		
	
s192.16.201.*s192.16.197.*s132.151.1.*s
129.6.64.*cCs7|\}}x$|jD]}t||�rdSqWdS(Nii(t_validR(RR Rthosttporttpat((s)/usr/lib64/python2.7/Demo/pdist/server.pyR?s
cCsvtj|�}y|j�}Wntk
r3dSX|jdkrUdt|�GHny�|\}}}d|kr�d|j||�|f}nM|ddkr�tdt|��n't	||�}	dt
|	|�|f}Wntjtj
|f}nX|dkr5|d d
kr5|jdkr1dGHndS|jdkrVd	t|�GHntj|�}
|
j|�dS(NiisGot request: %st.t_sillegal method name %sisSuppress replysSend reply: %s(NN(tpicklet	UnpicklertloadtEOFErrorRRRt_specialt	NameErrortgetattrtapplytsystexc_typet	exc_valuetPicklertdump(RR!R"trptrequestt
methodnametargstidtreplytmethodtwp((s)/usr/lib64/python2.7/Demo/pdist/server.pyREs4

cCsQ|dkr:t|d�s3t|j��|_n|jStdt|��dS(Ns.methodst_methodss#unrecognized special method name %s(thasattrttuplet_listmethodsR?R/R(RR9R:((s)/usr/lib64/python2.7/Demo/pdist/server.pyR._s
cCs�|s|j}n|jj�}td�|�}|j�xE|jD]:}|j|�}t|d�|�}||t|�)qGW|S(NcSs|ddkS(NiR)((tx((s)/usr/lib64/python2.7/Demo/pdist/server.pyt<lambda>iRcSs
||kS(N((RCtnames((s)/usr/lib64/python2.7/Demo/pdist/server.pyRDmR(t	__class__t__dict__tkeystfiltertsortt	__bases__RBtlen(RtclREtbaset	basenames((s)/usr/lib64/python2.7/Demo/pdist/server.pyRBfs
N(t__name__t
__module__t__doc__tVERBOSERRRRRRR$RRR.RRB(((s)/usr/lib64/python2.7/Demo/pdist/server.pyRs								(tSecuritytSecureServercBseZd�Zd�ZRS(cGs(ttj|f|�tj|�dS(N(R1RRRT(RR:((s)/usr/lib64/python2.7/Demo/pdist/server.pyRwscCsddl}|j�}|jd|�d}xEd|krvt|�dkrv|jd�}|siPn||}q2Wy|j|j|��}Wn6|jk
r�|jdkr�dGt	|�GHndSX|j
||�s|jdkr�dGt	|�GHndS|jd	krd
GHnd	S(Ni����s%d
Rs
idisInvalid response syntaxsInvalid response valueis&Response matches challenge.  Go ahead!(tstringt_generate_challengetsendRLtrecvtatoltstript
atol_errorRRt_compare_challenge_response(RR RRVt	challengetresponsetdata((s)/usr/lib64/python2.7/Demo/pdist/server.pyR{s,!(RPRQRR(((s)/usr/lib64/python2.7/Demo/pdist/server.pyRUus	((RRR2R	R*RRRSRtsecurityRTRU(((s)/usr/lib64/python2.7/Demo/pdist/server.pyt<module>sdPKb1�Zl��!!pdist/cmdfw.pynu�[���"Framework for command line interfaces like CVS.  See class CmdFrameWork."


class CommandFrameWork:

    """Framework class for command line interfaces like CVS.

    The general command line structure is

            command [flags] subcommand [subflags] [argument] ...

    There's a class variable GlobalFlags which specifies the
    global flags options.  Subcommands are defined by defining
    methods named do_<subcommand>.  Flags for the subcommand are
    defined by defining class or instance variables named
    flags_<subcommand>.  If there's no command, method default()
    is called.  The __doc__ strings for the do_ methods are used
    for the usage message, printed after the general usage message
    which is the class variable UsageMessage.  The class variable
    PostUsageMessage is printed after all the do_ methods' __doc__
    strings.  The method's return value can be a suggested exit
    status.  [XXX Need to rewrite this to clarify it.]

    Common usage is to derive a class, instantiate it, and then call its
    run() method; by default this takes its arguments from sys.argv[1:].
    """

    UsageMessage = \
      "usage: (name)s [flags] subcommand [subflags] [argument] ..."

    PostUsageMessage = None

    GlobalFlags = ''

    def __init__(self):
        """Constructor, present for completeness."""
        pass

    def run(self, args = None):
        """Process flags, subcommand and options, then run it."""
        import getopt, sys
        if args is None: args = sys.argv[1:]
        try:
            opts, args = getopt.getopt(args, self.GlobalFlags)
        except getopt.error, msg:
            return self.usage(msg)
        self.options(opts)
        if not args:
            self.ready()
            return self.default()
        else:
            cmd = args[0]
            mname = 'do_' + cmd
            fname = 'flags_' + cmd
            try:
                method = getattr(self, mname)
            except AttributeError:
                return self.usage("command %r unknown" % (cmd,))
            try:
                flags = getattr(self, fname)
            except AttributeError:
                flags = ''
            try:
                opts, args = getopt.getopt(args[1:], flags)
            except getopt.error, msg:
                return self.usage(
                        "subcommand %s: " % cmd + str(msg))
            self.ready()
            return method(opts, args)

    def options(self, opts):
        """Process the options retrieved by getopt.
        Override this if you have any options."""
        if opts:
            print "-"*40
            print "Options:"
            for o, a in opts:
                print 'option', o, 'value', repr(a)
            print "-"*40

    def ready(self):
        """Called just before calling the subcommand."""
        pass

    def usage(self, msg = None):
        """Print usage message.  Return suitable exit code (2)."""
        if msg: print msg
        print self.UsageMessage % {'name': self.__class__.__name__}
        docstrings = {}
        c = self.__class__
        while 1:
            for name in dir(c):
                if name[:3] == 'do_':
                    if docstrings.has_key(name):
                        continue
                    try:
                        doc = getattr(c, name).__doc__
                    except:
                        doc = None
                    if doc:
                        docstrings[name] = doc
            if not c.__bases__:
                break
            c = c.__bases__[0]
        if docstrings:
            print "where subcommand can be:"
            names = docstrings.keys()
            names.sort()
            for name in names:
                print docstrings[name]
        if self.PostUsageMessage:
            print self.PostUsageMessage
        return 2

    def default(self):
        """Default method, called when no subcommand is given.
        You should always override this."""
        print "Nobody expects the Spanish Inquisition!"


def test():
    """Test script -- called when this module is run as a script."""
    import sys
    class Hello(CommandFrameWork):
        def do_hello(self, opts, args):
            "hello -- print 'hello world', needs no arguments"
            print "Hello, world"
    x = Hello()
    tests = [
            [],
            ['hello'],
            ['spam'],
            ['-x'],
            ['hello', '-x'],
            None,
            ]
    for t in tests:
        print '-'*10, t, '-'*10
        sts = x.run(t)
        print "Exit status:", repr(sts)


if __name__ == '__main__':
    test()
PKb1�Z�#)--pdist/rcslib.pycnu�[����
��^c@sYdZddlZddlZddlZddlZddlZddd��YZdS(s�RCS interface module.

Defines the class RCS, which represents a directory with rcs version
files and (possibly) corresponding work files.

i����NtRCScBseZdZejejdZd�Zd�Zdd�Z	d�Z
d�Zd�Zd	�Z
d
dd�Zddd�Zdd
�Zd�Zd�Zd�Zd�Zd�Zddd�Zd�Zd�Zd�Zdd�Zd�Zd�ZRS(s7RCS interface class (local filesystem version).

    An instance of this class represents a directory with rcs version
    files and (possible) corresponding work files.

    Methods provide access to most rcs operations such as
    checkin/checkout, access to the rcs metadata (revisions, logs,
    branches etc.) as well as some filesystem operations such as
    listing all rcs version files.

    XXX BUGS / PROBLEMS

    - The instance always represents the current directory so it's not
    very useful to have more than one instance around simultaneously

    s-_=+cCsdS(sConstructor.N((tself((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyt__init__&scCsdS(sDestructor.N((R((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyt__del__*stcCsi|j|d|�}|j�}|j|�}|rH|d|}n|ddkre|d }n|S(smReturn the full log text for NAME_REV as a string.

        Optional OTHERFLAGS are passed to rlog.

        srlog s%s: %si����s
(t_opentreadt
_closepipe(Rtname_revt
otherflagstftdatatstatus((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pytlog0s
cCs|j|�}|dS(s%Return the head revision for NAME_REVthead(tinfo(RRtdict((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyR?sc	Cs�|j|d�}i}x}|j�}|s1Pn|ddkrGqntj|d�}|dkr|| tj||d�}}|||<qqW|j|�}|r�t|�n|S(sReturn a dictionary of info (from rlog -h) for NAME_REV

        The dictionary's keys are the keywords that rlog prints
        (e.g. 'head' and its values are the corresponding data
        (e.g. '1.3').

        XXX symbolic names and locks are not returned

        srlog -his	t:i(RtreadlinetstringtfindtstripRtIOError(	RRR
RtlinetitkeytvalueR((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyRDs 
"cCs2|j|�\}}d||f}|j|�S(sSet an rcs lock on NAME_REV.srcs -l%s %s(t	checkfilet_system(RRtnametrevtcmd((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pytlockbscCs2|j|�\}}d||f}|j|�S(sClear an rcs lock on NAME_REV.srcs -u%s %s(RR(RRRRR((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pytunlockhsicCsM|j|�\}}|r$d}nd}d||||f}|j|�S(s�Check out NAME_REV to its work file.

        If optional WITHLOCK is set, check out locked, else unlocked.

        The optional OTHERFLAGS is passed to co without
        interpretation.

        Any output from co goes to directly to stdout.

        s-ls-us
co %s%s %s %s(RR(RRtwithlockR	RRtlockflagR((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pytcheckoutns	c
Cs�|j|�\}}|j|�}|s4d}n|rW|ddkrW|d}nd}|r�tj�}|j|�|j�d|||j||f}	n.tjdd|�}d|||||f}	|j	|	�S(	s_Check in NAME_REV from its work file.

        The optional MESSAGE argument becomes the checkin message
        (default "<none>" if None); or the file description if this is
        a new file.

        The optional OTHERFLAGS argument is passed to ci without
        interpretation.

        Any output from ci goes to directly to stdout.

        s<none>i����s
s-usci %s%s -t%s %s %ss([\"$`])s\\\1sci %s%s -m"%s" %s %s(
t	_unmangletisvalidttempfiletNamedTemporaryFiletwritetflushRtretsubR(
RRtmessageR	RRtnewR#R
R((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pytcheckins"
	


cCs�tjtj�}t|j|�}tjjd�rdtjd�}t|j|�}||}nt|j|�}|j	||�S(s=Return a list of all version files matching optional PATTERN.R(
tostlistdirtcurdirtfiltert_isrcstpathtisdirtmaptrealnamet_filter(Rtpattfilestfiles2((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyt	listfiles�s
cCs@|j|�}tjj|�p?tjjtjjd|��S(s0Test whether NAME has a version file associated.R(trcsnameR0R5tisfiletjoin(RRtnamev((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyR&�scCs�|j|�r|}n
|d}tjj|�r8|Stjjdtjj|��}tjj|�ro|Stjjd�r�tjjd|�S|SdS(s�Return the pathname of the version file for NAME.

        The argument can be a work file name or a version file name.
        If the version file does not exist, the name of the version
        file that would be created by "ci" is returned.

        s,vRN(R4R0R5R?R@tbasenameR6(RRRA((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyR>�s	
!cCsN|j|�r|d }n|}tjj|�r8|Stjj|�}|S(s�Return the pathname of the work file for NAME.

        The argument can be a work file name or a version file name.
        If the work file does not exist, the name of the work file
        that would be created by "co" is returned.

        i����(R4R0R5R?RB(RRAR((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyR8�s
cCs�|j|d�}|j�}|j|�}|r?t|�n|sIdS|ddkrf|d }n|j|�|j|�kS(s�Test whether FILE (which must have a version file) is locked.

        XXX This does not tell you which revision number is locked and
        ignores any revision you may pass in (by virtue of using rlog
        -L -R).

        s
rlog -L -Ri����s
N(RRRRtNoneR8(RRR
RR((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pytislocked�s
cCsD|j|�\}}|j|�s:tjd|f�n||fS(s}Normalize NAME_REV into a (NAME, REV) tuple.

        Raise an exception if there is no corresponding version file.

        snot an rcs file %r(R%R&R0terror(RRRR((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyR�ssco -ps-rcCsV|j|�\}}|j|�}|r?|d||}ntjd||f�S(sINTERNAL: open a read pipe to NAME_REV using optional COMMAND.

        Optional FLAG is used to indicate the revision (default -r).

        Default COMMAND is "co -p".

        Return a file object connected by a pipe to the command's
        output.

        t s%s %r(RR>R0tpopen(RRRtrflagRRRA((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyR�s
cCsmt|�td�kr1|df}\}}n|\}}x)|D]!}||jkrDtd�qDqDW|S(s�INTERNAL: Normalize NAME_REV argument to (NAME, REV) tuple.

        Raise an exception if NAME contains invalid characters.

        A NAME_REV argument is either NAME string (implying REV='') or
        a tuple of the form (NAME, REV).

        Rsbad char in rev(ttypetokcharst
ValueError(RRRRtc((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyR%s	
cCs�|j�}|sd	St|d�\}}|dkrAd|fS|d@}|dkrfd}|}nd}|d@r�|d}n||fS(
s:INTERNAL: Close PIPE and print its exit status if nonzero.iitexititstoppedtkilledi�s
(coredump)N(tcloseRCtdivmod(RR
tststdetailtreasontsignaltcode((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyRs

	

cCs3|d}tj|�}|r/td|�ndS(s{INTERNAL: run COMMAND in a subshell.

        Standard input for the command is taken from /dev/null.

        Raise IOError when the exit status is not zero.

        Return whatever the calling method should return; normally
        None.

        A derived class may override this method and redefine it to
        capture stdout/stderr of the command and return it.

        s </dev/nullscommand exit status %dN(R0tsystemR(RRRR((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyR#s
cCs9|r$|d�}t||�}n|}|j�|S(s�INTERNAL: Return a sorted copy of the given list of FILES.

        If a second PATTERN argument is given, only files matching it
        are kept.  No check for valid filenames is made.

        cSstj||�S(N(tfnmatch(RR:((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pytkeep=s(R3tsort(RR;R:RY((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyR95s
cCs,ytj|�Wntjk
r'nXdS(s)INTERNAL: remove FILE without complaints.N(R0tunlinkRE(Rtfn((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyt_removeEscCs|ddkS(s)INTERNAL: Test whether NAME ends in ',v'.i����s,v((RR((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyR4LsN(t__name__t
__module__t__doc__Rt
ascii_letterstdigitsRJRRR
RRR R!R$RCR/R=R&R>R8RDRRR%RRR9R]R4(((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyRs0						!					
				((R`RXR0R+RR'R(((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyt<module>sPKb1�ZC���pdist/sumtree.pycnu�[����
��^c@s5ddlZddlZd�Zd�Ze�dS(i����NcCsStj�}tj�}t|�|j�tj�}||GdGHtd�dS(Ntsecondss[Return to exit] (ttimetFSProxytFSProxyLocaltsumtreet_closet	raw_input(tt1tproxytt2((s*/usr/lib64/python2.7/Demo/pdist/sumtree.pytmains


cCsjdG|j�GH|j�}|j|�|j�}x/|D]'}|j|�t|�|j�q;WdS(NsPWD =(tpwdt	listfilestinfolisttlistsubdirstcdRtback(Rtfilestsubdirstname((s*/usr/lib64/python2.7/Demo/pdist/sumtree.pyRs



(RRR
R(((s*/usr/lib64/python2.7/Demo/pdist/sumtree.pyt<module>s	
	
PKb1�Z(�q��pdist/makechangelog.pynuȯ��#! /usr/bin/python2.7

"""Turn a pile of RCS log output into ChangeLog file entries.

"""

import sys
import string
import re
import getopt
import time

def main():
    args = sys.argv[1:]
    opts, args = getopt.getopt(args, 'p:')
    prefix = ''
    for o, a in opts:
        if p == '-p': prefix = a

    f = sys.stdin
    allrevs = []
    while 1:
        file = getnextfile(f)
        if not file: break
        revs = []
        while 1:
            rev = getnextrev(f, file)
            if not rev:
                break
            revs.append(rev)
        if revs:
            allrevs[len(allrevs):] = revs
    allrevs.sort()
    allrevs.reverse()
    for rev in allrevs:
        formatrev(rev, prefix)

parsedateprog = re.compile(
    '^date: ([0-9]+)/([0-9]+)/([0-9]+) ' +
    '([0-9]+):([0-9]+):([0-9]+);  author: ([^ ;]+)')

authormap = {
    'guido': 'Guido van Rossum  <guido@cnri.reston.va.us>',
    'jack': 'Jack Jansen  <jack@cwi.nl>',
    'sjoerd': 'Sjoerd Mullender  <sjoerd@cwi.nl>',
    }

def formatrev(rev, prefix):
    dateline, file, revline, log = rev
    if parsedateprog.match(dateline) >= 0:
        fields = parsedateprog.group(1, 2, 3, 4, 5, 6)
        author = parsedateprog.group(7)
        if authormap.has_key(author): author = authormap[author]
        tfields = map(string.atoi, fields) + [0, 0, 0]
        tfields[5] = tfields[5] - time.timezone
        t = time.mktime(tuple(tfields))
        print time.ctime(t), '', author
        words = string.split(log)
        words[:0] = ['*', prefix + file + ':']
        maxcol = 72-8
        col = maxcol
        for word in words:
            if col > 0 and col + len(word) >= maxcol:
                print
                print '\t' + word,
                col = -1
            else:
                print word,
            col = col + 1 + len(word)
        print
        print

startprog = re.compile("^Working file: (.*)$")

def getnextfile(f):
    while 1:
        line = f.readline()
        if not line: return None
        if startprog.match(line) >= 0:
            file = startprog.group(1)
            # Skip until first revision
            while 1:
                line = f.readline()
                if not line: return None
                if line[:10] == '='*10: return None
                if line[:10] == '-'*10: break
##              print "Skipped", line,
            return file
##      else:
##          print "Ignored", line,

def getnextrev(f, file):
    # This is called when we are positioned just after a '---' separator
    revline = f.readline()
    dateline = f.readline()
    log = ''
    while 1:
        line = f.readline()
        if not line: break
        if line[:10] == '='*10:
            # Ignore the *last* log entry for each file since it
            # is the revision since which we are logging.
            return None
        if line[:10] == '-'*10: break
        log = log + line
    return dateline, file, revline, log

if __name__ == '__main__':
    main()
PKb1�ZKo�uu
pdist/rcvsnuȯ��#! /usr/bin/python2.7

import addpack
addpack.addpack('/home/guido/src/python/Demo/pdist')

import rcvs

rcvs.main()
PKb1�Z�����'�'pdist/cvslib.pynu�[���"""Utilities for CVS administration."""

import string
import os
import time
import md5
import fnmatch

if not hasattr(time, 'timezone'):
    time.timezone = 0

class File:

    """Represent a file's status.

    Instance variables:

    file -- the filename (no slashes), None if uninitialized
    lseen -- true if the data for the local file is up to date
    eseen -- true if the data from the CVS/Entries entry is up to date
             (this implies that the entry must be written back)
    rseen -- true if the data for the remote file is up to date
    proxy -- RCSProxy instance used to contact the server, or None

    Note that lseen and rseen don't necessary mean that a local
    or remote file *exists* -- they indicate that we've checked it.
    However, eseen means that this instance corresponds to an
    entry in the CVS/Entries file.

    If lseen is true:

    lsum -- checksum of the local file, None if no local file
    lctime -- ctime of the local file, None if no local file
    lmtime -- mtime of the local file, None if no local file

    If eseen is true:

    erev -- revision, None if this is a no revision (not '0')
    enew -- true if this is an uncommitted added file
    edeleted -- true if this is an uncommitted removed file
    ectime -- ctime of last local file corresponding to erev
    emtime -- mtime of last local file corresponding to erev
    extra -- 5th string from CVS/Entries file

    If rseen is true:

    rrev -- revision of head, None if non-existent
    rsum -- checksum of that revision, Non if non-existent

    If eseen and rseen are both true:

    esum -- checksum of revision erev, None if no revision

    Note
    """

    def __init__(self, file = None):
        if file and '/' in file:
            raise ValueError, "no slash allowed in file"
        self.file = file
        self.lseen = self.eseen = self.rseen = 0
        self.proxy = None

    def __cmp__(self, other):
        return cmp(self.file, other.file)

    def getlocal(self):
        try:
            self.lmtime, self.lctime = os.stat(self.file)[-2:]
        except os.error:
            self.lmtime = self.lctime = self.lsum = None
        else:
            self.lsum = md5.new(open(self.file).read()).digest()
        self.lseen = 1

    def getentry(self, line):
        words = string.splitfields(line, '/')
        if self.file and words[1] != self.file:
            raise ValueError, "file name mismatch"
        self.file = words[1]
        self.erev = words[2]
        self.edeleted = 0
        self.enew = 0
        self.ectime = self.emtime = None
        if self.erev[:1] == '-':
            self.edeleted = 1
            self.erev = self.erev[1:]
        if self.erev == '0':
            self.erev = None
            self.enew = 1
        else:
            dates = words[3]
            self.ectime = unctime(dates[:24])
            self.emtime = unctime(dates[25:])
        self.extra = words[4]
        if self.rseen:
            self.getesum()
        self.eseen = 1

    def getremote(self, proxy = None):
        if proxy:
            self.proxy = proxy
        try:
            self.rrev = self.proxy.head(self.file)
        except (os.error, IOError):
            self.rrev = None
        if self.rrev:
            self.rsum = self.proxy.sum(self.file)
        else:
            self.rsum = None
        if self.eseen:
            self.getesum()
        self.rseen = 1

    def getesum(self):
        if self.erev == self.rrev:
            self.esum = self.rsum
        elif self.erev:
            name = (self.file, self.erev)
            self.esum = self.proxy.sum(name)
        else:
            self.esum = None

    def putentry(self):
        """Return a line suitable for inclusion in CVS/Entries.

        The returned line is terminated by a newline.
        If no entry should be written for this file,
        return "".
        """
        if not self.eseen:
            return ""

        rev = self.erev or '0'
        if self.edeleted:
            rev = '-' + rev
        if self.enew:
            dates = 'Initial ' + self.file
        else:
            dates = gmctime(self.ectime) + ' ' + \
                    gmctime(self.emtime)
        return "/%s/%s/%s/%s/\n" % (
                self.file,
                rev,
                dates,
                self.extra)

    def report(self):
        print '-'*50
        def r(key, repr=repr, self=self):
            try:
                value = repr(getattr(self, key))
            except AttributeError:
                value = "?"
            print "%-15s:" % key, value
        r("file")
        if self.lseen:
            r("lsum", hexify)
            r("lctime", gmctime)
            r("lmtime", gmctime)
        if self.eseen:
            r("erev")
            r("enew")
            r("edeleted")
            r("ectime", gmctime)
            r("emtime", gmctime)
        if self.rseen:
            r("rrev")
            r("rsum", hexify)
            if self.eseen:
                r("esum", hexify)


class CVS:

    """Represent the contents of a CVS admin file (and more).

    Class variables:

    FileClass -- the class to be instantiated for entries
                 (this should be derived from class File above)
    IgnoreList -- shell patterns for local files to be ignored

    Instance variables:

    entries -- a dictionary containing File instances keyed by
               their file name
    proxy -- an RCSProxy instance, or None
    """

    FileClass = File

    IgnoreList = ['.*', '@*', ',*', '*~', '*.o', '*.a', '*.so', '*.pyc']

    def __init__(self):
        self.entries = {}
        self.proxy = None

    def setproxy(self, proxy):
        if proxy is self.proxy:
            return
        self.proxy = proxy
        for e in self.entries.values():
            e.rseen = 0

    def getentries(self):
        """Read the contents of CVS/Entries"""
        self.entries = {}
        f = self.cvsopen("Entries")
        while 1:
            line = f.readline()
            if not line: break
            e = self.FileClass()
            e.getentry(line)
            self.entries[e.file] = e
        f.close()

    def putentries(self):
        """Write CVS/Entries back"""
        f = self.cvsopen("Entries", 'w')
        for e in self.values():
            f.write(e.putentry())
        f.close()

    def getlocalfiles(self):
        list = self.entries.keys()
        addlist = os.listdir(os.curdir)
        for name in addlist:
            if name in list:
                continue
            if not self.ignored(name):
                list.append(name)
        list.sort()
        for file in list:
            try:
                e = self.entries[file]
            except KeyError:
                e = self.entries[file] = self.FileClass(file)
            e.getlocal()

    def getremotefiles(self, proxy = None):
        if proxy:
            self.proxy = proxy
        if not self.proxy:
            raise RuntimeError, "no RCS proxy"
        addlist = self.proxy.listfiles()
        for file in addlist:
            try:
                e = self.entries[file]
            except KeyError:
                e = self.entries[file] = self.FileClass(file)
            e.getremote(self.proxy)

    def report(self):
        for e in self.values():
            e.report()
        print '-'*50

    def keys(self):
        keys = self.entries.keys()
        keys.sort()
        return keys

    def values(self):
        def value(key, self=self):
            return self.entries[key]
        return map(value, self.keys())

    def items(self):
        def item(key, self=self):
            return (key, self.entries[key])
        return map(item, self.keys())

    def cvsexists(self, file):
        file = os.path.join("CVS", file)
        return os.path.exists(file)

    def cvsopen(self, file, mode = 'r'):
        file = os.path.join("CVS", file)
        if 'r' not in mode:
            self.backup(file)
        return open(file, mode)

    def backup(self, file):
        if os.path.isfile(file):
            bfile = file + '~'
            try: os.unlink(bfile)
            except os.error: pass
            os.rename(file, bfile)

    def ignored(self, file):
        if os.path.isdir(file): return True
        for pat in self.IgnoreList:
            if fnmatch.fnmatch(file, pat): return True
        return False


# hexify and unhexify are useful to print MD5 checksums in hex format

hexify_format = '%02x' * 16
def hexify(sum):
    "Return a hex representation of a 16-byte string (e.g. an MD5 digest)"
    if sum is None:
        return "None"
    return hexify_format % tuple(map(ord, sum))

def unhexify(hexsum):
    "Return the original from a hexified string"
    if hexsum == "None":
        return None
    sum = ''
    for i in range(0, len(hexsum), 2):
        sum = sum + chr(string.atoi(hexsum[i:i+2], 16))
    return sum


unctime_monthmap = {}
def unctime(date):
    if date == "None": return None
    if not unctime_monthmap:
        months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                  'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
        i = 0
        for m in months:
            i = i+1
            unctime_monthmap[m] = i
    words = string.split(date) # Day Mon DD HH:MM:SS YEAR
    year = string.atoi(words[4])
    month = unctime_monthmap[words[1]]
    day = string.atoi(words[2])
    [hh, mm, ss] = map(string.atoi, string.splitfields(words[3], ':'))
    ss = ss - time.timezone
    return time.mktime((year, month, day, hh, mm, ss, 0, 0, 0))

def gmctime(t):
    if t is None: return "None"
    return time.asctime(time.gmtime(t))

def test_unctime():
    now = int(time.time())
    t = time.gmtime(now)
    at = time.asctime(t)
    print 'GMT', now, at
    print 'timezone', time.timezone
    print 'local', time.ctime(now)
    u = unctime(at)
    print 'unctime()', u
    gu = time.gmtime(u)
    print '->', gu
    print time.asctime(gu)

def test():
    x = CVS()
    x.getentries()
    x.getlocalfiles()
##      x.report()
    import rcsclient
    proxy = rcsclient.openrcsclient()
    x.getremotefiles(proxy)
    x.report()


if __name__ == "__main__":
    test()
PKb1�ZMi$�1�1pdist/FSProxy.pyonu�[����
��^c@s�dZddlZddlZddlZddlZddlZddlTddlZddlZdZej	ej
fZdd
d��YZdeej
fd��YZd	ejfd
��YZd�Zedkr�e�ndS(s�File System Proxy.

Provide an OS-neutral view on a file system, locally or remotely.
The functionality is geared towards implementing some sort of
rdist-like utility between a Mac and a UNIX system.

The module defines three classes:

FSProxyLocal  -- used for local access
FSProxyServer -- used on the server side of remote access
FSProxyClient -- used on the client side of remote access

The remote classes are instantiated with an IP address and an optional
verbosity flag.
i����N(t*i�tFSProxyLocalcBs�eZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd+d�Zd+d�Zd+d
�Zd+d�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd+d�Zd+d�Zd+d�Zd+d�Zd+d�Z d�Z!d+d�Z"d+d �Z#d+d!�Z$d+d"�Z%d+d#�Z&d$d%d&�Z'd'�Z(d$d(�Z)d)�Z*d*�Z+RS(,cCs#g|_dg|j�|_dS(Ns*.pyc(t	_dirstackt_readignoret_ignore(tself((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt__init__!s	cCsx|jr|j�qWdS(N(Rtback(R((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt_close%scCs�|jd�}yt|�}WnEtk
rf|jd�}yt|�}Wqgtk
rbgSXnXg}xD|j�}|s�Pn|ddkr�|d }n|j|�qpW|j�|S(Ntignoressynctree.ignorefilesi����s
(t_hidetopentIOErrortreadlinetappendtclose(RtfiletfR	tline((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyR)s&

	

cCs|ddkS(Nit.((Rtname((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt_hidden<scCsd|S(Ns.%s((RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyR
?scCs�t|�tkrdS|ddkr*dS|tkr:dS|j|�rMdStjj|�\}}|sr|rvdStjj|�r�dSdt|d�j	d�kr�dSx'|j
D]}tj||�r�dSq�WdS(Nii����t~strbii(tlent
maxnamelent	skipnamesRtostpathtsplittislinkRtreadRtfnmatch(RRtheadttailtign((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytvisibleBs&
cCs,|j|�s(tjdt|��ndS(Nsprotected name %s(R$Rterrortrepr(RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytcheckOscCs<|j|�tjj|�s8tjdt|��ndS(Nsnot a plain file %s(R'RRtisfileR%R&(RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt	checkfileSs
cCs
tj�S(N(Rtgetcwd(R((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytpwdXscCsY|j|�tj�|jf}tj|�|jj|�|j|j�|_dS(N(R'RR*RtchdirRRR(RRtsave((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytcd[s


cCsO|jstjd�n|jd\}}tj|�|jd=||_dS(Nsempty directory stacki����(RRR%R,R(RtdirR	((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRbs	

cCsD|r$|d�}t||�}nt|j|�}|j�|S(NcSstj||�S(N(R (Rtpat((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytkeepls(tfilterR$tsort(RtfilesR0R1((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt_filterjs
cCs"tjtj�}|j||�S(N(RtlistdirtcurdirR5(RR0R4((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytlistsscCs7tjtj�}ttjj|�}|j||�S(N(RR6R7R2RR(R5(RR0R4((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt	listfileswscCs7tjtj�}ttjj|�}|j||�S(N(RR6R7R2RtisdirR5(RR0R4((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytlistsubdirs|scCs|j|�otjj|�S(N(R$RRtexists(RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyR<�scCs|j|�otjj|�S(N(R$RRR:(RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyR:�scCs|j|�otjj|�S(N(R$RRR(RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyR�scCs|j|�otjj|�S(N(R$RRR((RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyR(�scCsb|j|�d}t|�}tj�}x*|j|�}|sGPn|j|�q.W|j�S(Niii (R)Rtmd5tnewRtupdatetdigest(RRt
BUFFERSIZERtsumtbuffer((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRB�s
cCs|j|�tj|�tS(N(R)RtstattST_SIZE(RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytsize�s
cCs'|j|�tjtj|�t�S(N(R)ttimet	localtimeRRDtST_MTIME(RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytmtime�s
cCsF|j|�tj|�t}tjtj|�t�}||fS(N(R)RRDRERGRHRI(RRRFRJ((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRD�s
cCsK|j|�}tj|�t}tjtj|�t�}|||fS(N(RBRRDRERGRHRI(RRRBRFRJ((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytinfo�scCs�|dkr|j�}ng}x[|D]S}y|j|||�f�Wq(tjtfk
rz|j|df�q(Xq(W|S(N(tNoneR9RRR%R(RtfunctionR8tresR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt_list�s
cCs|j|j|�S(N(RORB(RR8((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytsumlist�scCs|j|j|�S(N(RORD(RR8((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytstatlist�scCs|j|j|�S(N(RORJ(RR8((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt	mtimelist�scCs|j|j|�S(N(RORF(RR8((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytsizelist�scCs|j|j|�S(N(RORK(RR8((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytinfolist�scCsg|dkr|j�}ni}x?|D]7}y||�||<Wq(tjtfk
r^q(Xq(W|S(N(RLR9RR%R(RRMR8tdictR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt_dict�s
cCs|j|j|�S(N(RURB(RR8((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytsumdict�scCs|j|j|�S(N(RURF(RR8((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytsizedict�scCs|j|j|�S(N(RURJ(RR8((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt	mtimedict�scCs|j|j|�S(N(RURD(RR8((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytstatdict�scCs|j|j|�S(N(RVRK(RR8((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytinfodict�sii����cCss|j|�t|�}|j|�|dkr;d}n*|dkrV|j�}n|j|�}|j�|S(Nit(R)RtseekRR(RRtoffsettlengthRtdata((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyR�s

	
cCs�|j|�tjj|�rq|j|�|d}ytj|�Wntjk
r]nXtj||�nt|d�}|j	�dS(NRtw(
R'RRR<R)tunlinkR%trenameRR(RRtbnameR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytcreate�s


cCsD|j|�t|d�}|j|�|j|�|j�dS(Nsr+(R)RR]twriteR(RRR`R^R((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRf�s



cCs!|j|�tj|d�dS(Ni�(R'Rtmkdir(RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRgs
cCs|j|�tj|�dS(N(R'Rtrmdir(RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRhs
N(,t__name__t
__module__RRRRR
R$R'R)R+R.RRLR5R8R9R;R<R:RR(RBRFRJRDRKRORPRQRRRSRTRVRWRXRYRZR[RReRfRgRh(((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRsR						
																	
	
	t
FSProxyServercBs)eZejd�Zd�Zd�ZRS(cCs'tj|�tjj|||�dS(N(RRtservertServer(Rtaddresstverbose((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyR
s
cCs!tjj|�tj|�dS(N(RlRmRR(R((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRscCs.tjj|�x|jr)|j�qWdS(N(RlRmt_serveRR(R((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRps(RiRjRltVERBOSERRRp(((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRks	t
FSProxyClientcBseZejd�ZRS(cCstjj|||�dS(N(tclienttClientR(RRnRo((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRs(RiRjRsRqR(((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRrscCsdddl}ddl}|jdr>|j|jd�}nd}td|f�}|j�dS(Ni����iiR\(tstringtsystargvtatoiRkt_serverloop(RuRvtporttproxy((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyttest!s
t__main__((t__doc__RlRsR=RR RDRGRR7tpardirRRRmRkRtRrR|Ri(((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt<module>s 
�	PKb1�Z%{�Ș�
pdist/rrcs.pynuȯ��#! /usr/bin/python2.7

"Remote RCS -- command line interface"

import sys
import os
import getopt
import string
import md5
import tempfile
from rcsclient import openrcsclient

def main():
    sys.stdout = sys.stderr
    try:
        opts, rest = getopt.getopt(sys.argv[1:], 'h:p:d:qvL')
        if not rest:
            cmd = 'head'
        else:
            cmd, rest = rest[0], rest[1:]
        if not commands.has_key(cmd):
            raise getopt.error, "unknown command"
        coptset, func = commands[cmd]
        copts, files = getopt.getopt(rest, coptset)
    except getopt.error, msg:
        print msg
        print "usage: rrcs [options] command [options] [file] ..."
        print "where command can be:"
        print "      ci|put      # checkin the given files"
        print "      co|get      # checkout"
        print "      info        # print header info"
        print "      head        # print revision of head branch"
        print "      list        # list filename if valid"
        print "      log         # print full log"
        print "      diff        # diff rcs file and work file"
        print "if no files are given, all remote rcs files are assumed"
        sys.exit(2)
    x = openrcsclient(opts)
    if not files:
        files = x.listfiles()
    for fn in files:
        try:
            func(x, copts, fn)
        except (IOError, os.error), msg:
            print "%s: %s" % (fn, msg)

def checkin(x, copts, fn):
    f = open(fn)
    data = f.read()
    f.close()
    new = not x.isvalid(fn)
    if not new and same(x, copts, fn, data):
        print "%s: unchanged since last checkin" % fn
        return
    print "Checking in", fn, "..."
    message = asklogmessage(new)
    messages = x.put(fn, data, message)
    if messages:
        print messages

def checkout(x, copts, fn):
    data = x.get(fn)
    f = open(fn, 'w')
    f.write(data)
    f.close()

def lock(x, copts, fn):
    x.lock(fn)

def unlock(x, copts, fn):
    x.unlock(fn)

def info(x, copts, fn):
    dict = x.info(fn)
    keys = dict.keys()
    keys.sort()
    for key in keys:
        print key + ':', dict[key]
    print '='*70

def head(x, copts, fn):
    head = x.head(fn)
    print fn, head

def list(x, copts, fn):
    if x.isvalid(fn):
        print fn

def log(x, copts, fn):
    flags = ''
    for o, a in copts:
        flags = flags + ' ' + o + a
    flags = flags[1:]
    messages = x.log(fn, flags)
    print messages

def diff(x, copts, fn):
    if same(x, copts, fn):
        return
    flags = ''
    for o, a in copts:
        flags = flags + ' ' + o + a
    flags = flags[1:]
    data = x.get(fn)
    tf = tempfile.NamedTemporaryFile()
    tf.write(data)
    tf.flush()
    print 'diff %s -r%s %s' % (flags, x.head(fn), fn)
    sts = os.system('diff %s %s %s' % (flags, tf.name, fn))
    if sts:
        print '='*70

def same(x, copts, fn, data = None):
    if data is None:
        f = open(fn)
        data = f.read()
        f.close()
    lsum = md5.new(data).digest()
    rsum = x.sum(fn)
    return lsum == rsum

def asklogmessage(new):
    if new:
        print "enter description,",
    else:
        print "enter log message,",
    print "terminate with single '.' or end of file:"
    if new:
        print "NOTE: This is NOT the log message!"
    message = ""
    while 1:
        sys.stderr.write(">> ")
        sys.stderr.flush()
        line = sys.stdin.readline()
        if not line or line == '.\n': break
        message = message + line
    return message

def remove(fn):
    try:
        os.unlink(fn)
    except os.error:
        pass

commands = {
        'ci': ('', checkin),
        'put': ('', checkin),
        'co': ('', checkout),
        'get': ('', checkout),
        'info': ('', info),
        'head': ('', head),
        'list': ('', list),
        'lock': ('', lock),
        'unlock': ('', unlock),
        'log': ('bhLRtd:l:r:s:w:V:', log),
        'diff': ('c', diff),
        }

if __name__ == '__main__':
    main()
PKb1�ZF N�22pdist/makechangelog.pyonu�[����
Afc@s�dZddlZddlZddlZddlZddlZd�Zejdd�Zidd6dd	6d
d6Z	d�Z
ejd
�Zd�Zd�Z
edkr�e�ndS(s<Turn a pile of RCS log output into ChangeLog file entries.

i����Nc
Cstjd}tj|d�\}}d}x)|D]!\}}tdkr2|}q2q2Wtj}g}xft|�}|sPng}x*t||�}	|	s�Pn|j|	�q�W|ri||t|�)qiqiW|j	�|j
�x|D]}	t|	|�q�WdS(Nisp:ts-p(tsystargvtgetopttptstdintgetnextfilet
getnextrevtappendtlentsorttreverset	formatrev(
targstoptstprefixtotatftallrevstfiletrevstrev((s0/usr/lib64/python2.7/Demo/pdist/makechangelog.pytmain
s0

	


s"^date: ([0-9]+)/([0-9]+)/([0-9]+) s-([0-9]+):([0-9]+):([0-9]+);  author: ([^ ;]+)s+Guido van Rossum  <guido@cnri.reston.va.us>tguidosJack Jansen  <jack@cwi.nl>tjacks!Sjoerd Mullender  <sjoerd@cwi.nl>tsjoerdcCsh|\}}}}tj|�dkrdtjdddddd�}tjd�}tj|�rpt|}nttj|�dddg}|dtj	|d<tj
t|��}	tj|	�Gd	G|GHtj
|�}
d
||dg|
d*d}|}xZ|
D]R}
|dkrC|t|
�|krCHd|
Gd}n|
G|dt|
�}q	WHHndS(NiiiiiiiiRt*t:iHis	i����i@(t
parsedateprogtmatchtgroupt	authormapthas_keytmaptstringtatoittimettimezonetmktimettupletctimetsplitR	(RRtdatelineRtrevlinetlogtfieldstauthorttfieldstttwordstmaxcoltcoltword((s0/usr/lib64/python2.7/Demo/pdist/makechangelog.pyR0s.

"	s^Working file: (.*)$cCs�x�|j�}|sdStj|�dkrtjd�}xB|j�}|sVdS|d dkrjdS|d dkr@Pq@q@W|SqWdS(Niii
t=t-s
==========s
----------(treadlinetNonet	startprogRR(RtlineR((s0/usr/lib64/python2.7/Demo/pdist/makechangelog.pyRKscCs}|j�}|j�}d}xL|j�}|s7Pn|d dkrKdS|d dkr_Pn||}q!W||||fS(NRi
R6R7s
==========s
----------(R8R9(RRR,R+R-R;((s0/usr/lib64/python2.7/Demo/pdist/makechangelog.pyR\st__main__(t__doc__RR#treRR%RtcompileRR RR:RRt__name__(((s0/usr/lib64/python2.7/Demo/pdist/makechangelog.pyt<module>s&	

			PKb1�Z�#�44pdist/rcsclient.pycnu�[����
��^c@skdZddlZddlZdZdZdZdZddlZdejfd��YZ	gd	�Z
dS(
s�Customize this file to change the default client etc.

(In general, it is probably be better to make local operation the
default and to require something like an RCSSERVER environment
variable to enable remote operation.)

i����Nsvoorn.cwi.nliiitRCSProxyClientcBseZejd�ZRS(cCstjj|||�dS(N(tclienttSecureClientt__init__(tselftaddresstverbose((s,/usr/lib64/python2.7/Demo/pdist/rcsclient.pyRs(t__name__t
__module__RtVERBOSER(((s,/usr/lib64/python2.7/Demo/pdist/rcsclient.pyRsc
Cs�ddl}t}t}t}t}d}x�|D]�\}}|dkr�|}d|kr�tj|d�}	||	 ||	d}}
|
r�tj|
�}q�q�n|dkr�tj|�}n|dkr�|}n|dkr�|d}n|d	krd
}n|dkr1d}q1q1W|r?ddl}|j	�}n||f}t
||�}|s�y%ttj
jdd
��j�}Wntk
r�q�X|ddkr�|d }q�n|r�|j|�n|S(sEopen an RCSProxy client based on a list of options returned by getopti����Ns-ht:is-ps-ds-vs-qis-LtCVSt
Repositorys
(tRCSProxytHOSTtPORTR	tLOCALtNonetstringtfindtatoit
RCSProxyLocalRtopentostpathtjointreadlinetIOErrortcd(
toptsR
thosttportRtlocalt	directorytotatitptxR((s,/usr/lib64/python2.7/Demo/pdist/rcsclient.pyt
openrcsclientsN	
	
%
(t__doc__RRRRR	RRRRR'(((s,/usr/lib64/python2.7/Demo/pdist/rcsclient.pyt<module>sPKb1�Z�5t�VV
pdist/mac.pycnu�[����
��^c@s8ddlZddlZddlZd�Ze�dS(i����NcCs�xzytd�}Wntk
r'PnXtj|�}|sCqn|ddkrf|jdd�n|t_tj�qWdS(Ns$ itrcvs(	t	raw_inputtEOFErrortstringtsplittinserttsystargvRtmain(tlinetwords((s&/usr/lib64/python2.7/Demo/pdist/mac.pyRs
	(RRRR(((s&/usr/lib64/python2.7/Demo/pdist/mac.pyt<module>s	PKb1�ZO��p!p!pdist/cvslock.pyonu�[����
��^c@s�dZddlZddlZddlZddlZdZdZdZdZdZ	ddd	��YZ
d
e
fd��YZddd
��YZd�Z
defd��YZdefd��YZed�Zd�Zedkr�e�ndS(s�CVS locking algorithm.

CVS locking strategy
====================

As reverse engineered from the CVS 1.3 sources (file lock.c):

- Locking is done on a per repository basis (but a process can hold
write locks for multiple directories); all lock files are placed in
the repository and have names beginning with "#cvs.".

- Before even attempting to lock, a file "#cvs.tfl.<pid>" is created
(and removed again), to test that we can write the repository.  [The
algorithm can still be fooled (1) if the repository's mode is changed
while attempting to lock; (2) if this file exists and is writable but
the directory is not.]

- While creating the actual read/write lock files (which may exist for
a long time), a "meta-lock" is held.  The meta-lock is a directory
named "#cvs.lock" in the repository.  The meta-lock is also held while
a write lock is held.

- To set a read lock:

        - acquire the meta-lock
        - create the file "#cvs.rfl.<pid>"
        - release the meta-lock

- To set a write lock:

        - acquire the meta-lock
        - check that there are no files called "#cvs.rfl.*"
                - if there are, release the meta-lock, sleep, try again
        - create the file "#cvs.wfl.<pid>"

- To release a write lock:

        - remove the file "#cvs.wfl.<pid>"
        - rmdir the meta-lock

- To release a read lock:

        - remove the file "#cvs.rfl.<pid>"


Additional notes
----------------

- A process should read-lock at most one repository at a time.

- A process may write-lock as many repositories as it wishes (to avoid
deadlocks, I presume it should always lock them top-down in the
directory hierarchy).

- A process should make sure it removes all its lock files and
directories when it crashes.

- Limitation: one user id should not be committing files into the same
repository at the same time.


Turn this into Python code
--------------------------

rl = ReadLock(repository, waittime)

wl = WriteLock(repository, waittime)

list = MultipleWriteLock([repository1, repository2, ...], waittime)

i����Ni
is#cvs.lcks	#cvs.rfl.s	#cvs.wfl.tErrorcBs#eZd�Zd�Zd�ZRS(cCs
||_dS(N(tmsg(tselfR((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyt__init__`scCs
t|j�S(N(treprR(R((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyt__repr__cscCs
t|j�S(N(tstrR(R((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyt__str__fs(t__name__t
__module__RRR(((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR^s		tLockedcBseZRS((RR	(((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR
jstLockcBsVeZded�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
RS(	t.cCsx||_||_d|_d|_ttj��}|jt	�|_
|jt|�|_|jt
|�|_dS(N(t
repositorytdelaytNonetlockdirtlockfileRtostgetpidtjointCVSLCKtcvslcktCVSRFLtcvsrfltCVSWFLtcvswfl(RR
Rtpid((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyRps				cCsdGH|j�dS(Nt__del__(tunlock(R((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyRzscCs�x�y'|j|_tj|jd�dSWqtjk
r�}d|_|dtkr�ytj|j�}Wntjk
r�qnX|j|�qnt	d|j
|f��qXqWdS(Ni�isfailed to lock %s: %s(RRRtmkdirterrorRtEEXISTtstattsleepRR
(RRtst((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyt
setlockdir~s 	
cCs|j�|j�dS(N(t
unlockfilet	unlockdir(R((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR�s
cCsP|jrLdG|jGHytj|j�Wntjk
r?nXd|_ndS(Ntunlink(RRR'RR(R((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR%�s	cCsP|jrLdG|jGHytj|j�Wntjk
r?nXd|_ndS(Ntrmdir(RRR(RR(R((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR&�s	cCst||j|j�dS(N(R"R
R(RR#((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR"�scCstjj|j|�S(N(RtpathRR
(Rtname((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR�s(RR	tDELAYRRR$RR%R&R"R(((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyRns
								cCs�|dkrt|��n|tj}ytj|�}|d}Wntk
rbd|}nXdtjtj��dd!Gd|G|GHtj|�dS(Nisuid %ds[%s]iisWaiting for %s's lock in(	R
R!tST_UIDtpwdtgetpwuidtKeyErrorttimetctimeR"(R#R
Rtuidtpwenttuser((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR"�s


tReadLockcBseZed�ZRS(cCsztj|||�d}z<|j�|j|_t|jd�}|j�d}Wd|sk|j�n|j�XdS(Nitwi(	RRR$RRtopentcloseR%R&(RR
Rtoktfp((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR�s



(RR	R+R(((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR5�st	WriteLockcBseZed�Zd�ZRS(cCs}tj|||�|j�x1|j�}|s6Pn|j�|j|�q W|j|_t|jd�}|j	�dS(NR6(
RRR$t
readers_existR&R"RRR7R8(RR
RR2R:((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR�s

cCswtt�}xdtj|j�D]P}|| tkrytj|j|��}Wntjk
rjqnX|SqWdS(N(	tlenRRtlistdirR
R!RRR(RtnR*R#((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR<�s(RR	R+RR<(((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyR;�s
cCsjxcg}xC|D]:}y|jt|d��Wqtk
rI}~PqXqWPt|j||�qWtS(Ni(tappendR;R
R"Rtlist(trepositoriesRtlockstrtinstance((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pytMultipleWriteLock�s
	cCs�ddl}|jdr)|jd}nd}d}d}zDdGHt|�}dGH|j�dGHt|�}dGH|j�WddgGHd|_dgGH|r�|j�ndgGH|r�|j�nd	gGHd}d
gGHd}dgGHXdS(Ni����iRsattempting write lock ...sgot it.sattempting read lock ...iiiii(tsystargvRR;RR5t
exc_traceback(RGR
trltwl((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyttest�s8

	

t__main__(((t__doc__RR0R!R-R+R RRRRR
RR"R5R;RFRLR(((s*/usr/lib64/python2.7/Demo/pdist/cvslock.pyt<module>Gs&?		!PKb1�ZC���pdist/sumtree.pyonu�[����
��^c@s5ddlZddlZd�Zd�Ze�dS(i����NcCsStj�}tj�}t|�|j�tj�}||GdGHtd�dS(Ntsecondss[Return to exit] (ttimetFSProxytFSProxyLocaltsumtreet_closet	raw_input(tt1tproxytt2((s*/usr/lib64/python2.7/Demo/pdist/sumtree.pytmains


cCsjdG|j�GH|j�}|j|�|j�}x/|D]'}|j|�t|�|j�q;WdS(NsPWD =(tpwdt	listfilestinfolisttlistsubdirstcdRtback(Rtfilestsubdirstname((s*/usr/lib64/python2.7/Demo/pdist/sumtree.pyRs



(RRR
R(((s*/usr/lib64/python2.7/Demo/pdist/sumtree.pyt<module>s	
	
PKb1�Z�XB��pdist/cmptree.pyonu�[����
��^c@s�dZddlZddlmZddlZddlZddlZd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
edkr�e�ndS(
sQCompare local and remote dictionaries and transfer differing files -- like rdist.i����N(treprcCs-tj�}td|�}|r>tj|�tj�}ntdd�}d}d}d}dGHtd|�}|r�|}n||f}tj�}tj�}tj||�}	t	||	|�|	j
�|j
�tj�}
|
|}t|d	�\}}
|Gd
Gt|
�GdGHtd�dS(
Nschdir [%s] thostsvoorn.cwi.nliitsMode should be a string of characters, indicating what to do with differences.
r - read different files to local file system
w - write different files to remote file system
c - create new files, either remote or local
d - delete disappearing files, either remote or local
s
mode [%s] i<sminutes andtsecondss[Return to exit] (
tostgetcwdt	raw_inputtchdirtaskttimetFSProxytFSProxyLocalt
FSProxyClienttcomparet_closetdivmodtround(tpwdtsRtporttverbosetmodetaddresstt1tlocaltremotett2tdttminstsecs((s*/usr/lib64/python2.7/Demo/pdist/cmptree.pytmain	s2
	


cCs td||f�}|p|S(Ns%s [%s] (R(tprompttdefaultR((s*/usr/lib64/python2.7/Demo/pdist/cmptree.pyR)scCs3td|t|�f�}|r/tj|�S|S(Ns%s [%s] (Rtstrtstringtatoi(RR R((s*/usr/lib64/python2.7/Demo/pdist/cmptree.pytaskint-s
cCs�HdGttj��GH|jd�}|jd�}|j�dGHi}x$|j�D]\}}|||<qVWdGH|j|�}dGt|�GHi}	x|D]\}}
|
|	|<|j|�st|�GdGHd|kr�d	|kr�t	|||�q�q�||}||
kr�t|�G|j
|�}|j
|�}
||
krrd
Gd|kr�t	|||�q�n6|
|kr�dGd|kr�t|||�q�nd
GHq�q�Wx�|j�D]�}|	j�s�t|�GdGt
�d|krd	|krt|||�n-d|kr<d|kr<tj|�dGHnHq�q�WdGH|j|�}g}x�|D]�}|j|�r�dGt|�GH|j|�qedGt|�GdGHd|kred	|kredt|�}d|kr�d}nt|d�}|d dkr7|j|�dt|�GH|j|�q7qeqeW|j�}x0|D](}||krNdGt|�GdGHqNqNWx[|D]S}dGt|�GH|j|�|j|�t|||�|j�|j�q�WdS(NsPWD =tsumlisttlistsubdirsscalculating local sums ...sgetting remote sums ...tgotsonly remotetrtcsremote newerslocal newertws same mtime but different sum?!?!sonly locallytdsremoved.sgettin subdirs ...sCommon subdirectorysRemote subdirectorysnot found locallys"Create local subdirectory %s? [y] tyitYsSubdirectory %s madesLocal subdirectorysnot found remotelysEntering subdirectory(R,R-(RRRt_sendt_flushR%t_recvtlenthas_keytrecvfiletmtimetsendfiletkeystfltunlinktisdirtappendRtmkdirR&tcdR
tback(RRRtsums_idt
subdirs_idtlsumdicttnametinfotsumstrsumdicttrsumtlsumtrmtimetlmtimetsubdirstcommontprtoktlsubdirs((s*/usr/lib64/python2.7/Demo/pdist/cmptree.pyR
2s�






	





cCs�y|j|�Wn&ttjfk
r9}dG|GHdSXdGt�t|�j�}tj�}|jd||�|j	�tj�}||}t
|�GdGt|�GdG|r�dGtt
|�|�GdGnHdS(Nscannot create:ssending ...twritesbytes inRsi.e.s	bytes/sec(tcreatetIOErrorRterrorR7topentreadR	t
_send_noreplyR/R1R(RRRAtmsgtdataRRR((s*/usr/lib64/python2.7/Demo/pdist/cmptree.pyR5�s"	

cCsPd}z t|||�}d}|SWd|sKd|fGH|j|�nXdS(Niis#*** recvfile of %r failed, deleting(t
recvfile_realtdelete(RRRARLtrv((s*/usr/lib64/python2.7/Demo/pdist/cmptree.pyR3�scCscy|j|�Wn&ttjfk
r9}dG|GHdSXdGt�t|d�}tj�}d}d}|jd|||�}|j�xe||}	|jd||	|�}
|j	|�}|
}|s�Pn|j
|�|j|�|	}q�W|j�}tj�}
|j
�|
|}|GdGt|�Gd	G|rQd
G||GdGnH|j	|�dS(
Nscannot create:s
receiving ...R*iiiRSsbytes inRsi.e.s	bytes/seci(RORPRRQR7RRR	R.R/R0tseekRNttelltcloseR(RRRARUtfRtlengthtoffsettidt	newoffsettnewidRVtsizeRR((s*/usr/lib64/python2.7/Demo/pdist/cmptree.pyRW�s@	






cCstjj�dS(N(tsyststdouttflush(((s*/usr/lib64/python2.7/Demo/pdist/cmptree.pyR7�st__main__(t__doc__RdRR
R	RRRR$R
R5R3RWR7t__name__(((s*/usr/lib64/python2.7/Demo/pdist/cmptree.pyt<module>s	 			P			&	PKb1�Z�#)--pdist/rcslib.pyonu�[����
��^c@sYdZddlZddlZddlZddlZddlZddd��YZdS(s�RCS interface module.

Defines the class RCS, which represents a directory with rcs version
files and (possibly) corresponding work files.

i����NtRCScBseZdZejejdZd�Zd�Zdd�Z	d�Z
d�Zd�Zd	�Z
d
dd�Zddd�Zdd
�Zd�Zd�Zd�Zd�Zd�Zddd�Zd�Zd�Zd�Zdd�Zd�Zd�ZRS(s7RCS interface class (local filesystem version).

    An instance of this class represents a directory with rcs version
    files and (possible) corresponding work files.

    Methods provide access to most rcs operations such as
    checkin/checkout, access to the rcs metadata (revisions, logs,
    branches etc.) as well as some filesystem operations such as
    listing all rcs version files.

    XXX BUGS / PROBLEMS

    - The instance always represents the current directory so it's not
    very useful to have more than one instance around simultaneously

    s-_=+cCsdS(sConstructor.N((tself((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyt__init__&scCsdS(sDestructor.N((R((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyt__del__*stcCsi|j|d|�}|j�}|j|�}|rH|d|}n|ddkre|d }n|S(smReturn the full log text for NAME_REV as a string.

        Optional OTHERFLAGS are passed to rlog.

        srlog s%s: %si����s
(t_opentreadt
_closepipe(Rtname_revt
otherflagstftdatatstatus((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pytlog0s
cCs|j|�}|dS(s%Return the head revision for NAME_REVthead(tinfo(RRtdict((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyR?sc	Cs�|j|d�}i}x}|j�}|s1Pn|ddkrGqntj|d�}|dkr|| tj||d�}}|||<qqW|j|�}|r�t|�n|S(sReturn a dictionary of info (from rlog -h) for NAME_REV

        The dictionary's keys are the keywords that rlog prints
        (e.g. 'head' and its values are the corresponding data
        (e.g. '1.3').

        XXX symbolic names and locks are not returned

        srlog -his	t:i(RtreadlinetstringtfindtstripRtIOError(	RRR
RtlinetitkeytvalueR((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyRDs 
"cCs2|j|�\}}d||f}|j|�S(sSet an rcs lock on NAME_REV.srcs -l%s %s(t	checkfilet_system(RRtnametrevtcmd((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pytlockbscCs2|j|�\}}d||f}|j|�S(sClear an rcs lock on NAME_REV.srcs -u%s %s(RR(RRRRR((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pytunlockhsicCsM|j|�\}}|r$d}nd}d||||f}|j|�S(s�Check out NAME_REV to its work file.

        If optional WITHLOCK is set, check out locked, else unlocked.

        The optional OTHERFLAGS is passed to co without
        interpretation.

        Any output from co goes to directly to stdout.

        s-ls-us
co %s%s %s %s(RR(RRtwithlockR	RRtlockflagR((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pytcheckoutns	c
Cs�|j|�\}}|j|�}|s4d}n|rW|ddkrW|d}nd}|r�tj�}|j|�|j�d|||j||f}	n.tjdd|�}d|||||f}	|j	|	�S(	s_Check in NAME_REV from its work file.

        The optional MESSAGE argument becomes the checkin message
        (default "<none>" if None); or the file description if this is
        a new file.

        The optional OTHERFLAGS argument is passed to ci without
        interpretation.

        Any output from ci goes to directly to stdout.

        s<none>i����s
s-usci %s%s -t%s %s %ss([\"$`])s\\\1sci %s%s -m"%s" %s %s(
t	_unmangletisvalidttempfiletNamedTemporaryFiletwritetflushRtretsubR(
RRtmessageR	RRtnewR#R
R((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pytcheckins"
	


cCs�tjtj�}t|j|�}tjjd�rdtjd�}t|j|�}||}nt|j|�}|j	||�S(s=Return a list of all version files matching optional PATTERN.R(
tostlistdirtcurdirtfiltert_isrcstpathtisdirtmaptrealnamet_filter(Rtpattfilestfiles2((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyt	listfiles�s
cCs@|j|�}tjj|�p?tjjtjjd|��S(s0Test whether NAME has a version file associated.R(trcsnameR0R5tisfiletjoin(RRtnamev((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyR&�scCs�|j|�r|}n
|d}tjj|�r8|Stjjdtjj|��}tjj|�ro|Stjjd�r�tjjd|�S|SdS(s�Return the pathname of the version file for NAME.

        The argument can be a work file name or a version file name.
        If the version file does not exist, the name of the version
        file that would be created by "ci" is returned.

        s,vRN(R4R0R5R?R@tbasenameR6(RRRA((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyR>�s	
!cCsN|j|�r|d }n|}tjj|�r8|Stjj|�}|S(s�Return the pathname of the work file for NAME.

        The argument can be a work file name or a version file name.
        If the work file does not exist, the name of the work file
        that would be created by "co" is returned.

        i����(R4R0R5R?RB(RRAR((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyR8�s
cCs�|j|d�}|j�}|j|�}|r?t|�n|sIdS|ddkrf|d }n|j|�|j|�kS(s�Test whether FILE (which must have a version file) is locked.

        XXX This does not tell you which revision number is locked and
        ignores any revision you may pass in (by virtue of using rlog
        -L -R).

        s
rlog -L -Ri����s
N(RRRRtNoneR8(RRR
RR((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pytislocked�s
cCsD|j|�\}}|j|�s:tjd|f�n||fS(s}Normalize NAME_REV into a (NAME, REV) tuple.

        Raise an exception if there is no corresponding version file.

        snot an rcs file %r(R%R&R0terror(RRRR((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyR�ssco -ps-rcCsV|j|�\}}|j|�}|r?|d||}ntjd||f�S(sINTERNAL: open a read pipe to NAME_REV using optional COMMAND.

        Optional FLAG is used to indicate the revision (default -r).

        Default COMMAND is "co -p".

        Return a file object connected by a pipe to the command's
        output.

        t s%s %r(RR>R0tpopen(RRRtrflagRRRA((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyR�s
cCsmt|�td�kr1|df}\}}n|\}}x)|D]!}||jkrDtd�qDqDW|S(s�INTERNAL: Normalize NAME_REV argument to (NAME, REV) tuple.

        Raise an exception if NAME contains invalid characters.

        A NAME_REV argument is either NAME string (implying REV='') or
        a tuple of the form (NAME, REV).

        Rsbad char in rev(ttypetokcharst
ValueError(RRRRtc((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyR%s	
cCs�|j�}|sd	St|d�\}}|dkrAd|fS|d@}|dkrfd}|}nd}|d@r�|d}n||fS(
s:INTERNAL: Close PIPE and print its exit status if nonzero.iitexititstoppedtkilledi�s
(coredump)N(tcloseRCtdivmod(RR
tststdetailtreasontsignaltcode((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyRs

	

cCs3|d}tj|�}|r/td|�ndS(s{INTERNAL: run COMMAND in a subshell.

        Standard input for the command is taken from /dev/null.

        Raise IOError when the exit status is not zero.

        Return whatever the calling method should return; normally
        None.

        A derived class may override this method and redefine it to
        capture stdout/stderr of the command and return it.

        s </dev/nullscommand exit status %dN(R0tsystemR(RRRR((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyR#s
cCs9|r$|d�}t||�}n|}|j�|S(s�INTERNAL: Return a sorted copy of the given list of FILES.

        If a second PATTERN argument is given, only files matching it
        are kept.  No check for valid filenames is made.

        cSstj||�S(N(tfnmatch(RR:((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pytkeep=s(R3tsort(RR;R:RY((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyR95s
cCs,ytj|�Wntjk
r'nXdS(s)INTERNAL: remove FILE without complaints.N(R0tunlinkRE(Rtfn((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyt_removeEscCs|ddkS(s)INTERNAL: Test whether NAME ends in ',v'.i����s,v((RR((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyR4LsN(t__name__t
__module__t__doc__Rt
ascii_letterstdigitsRJRRR
RRR R!R$RCR/R=R&R>R8RDRRR%RRR9R]R4(((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyRs0						!					
				((R`RXR0R+RR'R(((s)/usr/lib64/python2.7/Demo/pdist/rcslib.pyt<module>sPKb1�Z��
>L5L5
pdist/rcvs.pynuȯ��#! /usr/bin/python2.7

"""Remote CVS -- command line interface"""

# XXX To do:
#
# Bugs:
# - if the remote file is deleted, "rcvs update" will fail
#
# Functionality:
# - cvs rm
# - descend into directories (alraedy done for update)
# - conflict resolution
# - other relevant commands?
# - branches
#
# - Finesses:
# - retain file mode's x bits
# - complain when "nothing known about filename"
# - edit log message the way CVS lets you edit it
# - cvs diff -rREVA -rREVB
# - send mail the way CVS sends it
#
# Performance:
# - cache remote checksums (for every revision ever seen!)
# - translate symbolic revisions to numeric revisions
#
# Reliability:
# - remote locking
#
# Security:
# - Authenticated RPC?


from cvslib import CVS, File
import md5
import os
import string
import sys
from cmdfw import CommandFrameWork


DEF_LOCAL = 1                           # Default -l


class MyFile(File):

    def action(self):
        """Return a code indicating the update status of this file.

        The possible return values are:

        '=' -- everything's fine
        '0' -- file doesn't exist anywhere
        '?' -- exists locally only
        'A' -- new locally
        'R' -- deleted locally
        'U' -- changed remotely, no changes locally
               (includes new remotely or deleted remotely)
        'M' -- changed locally, no changes remotely
        'C' -- conflict: changed locally as well as remotely
               (includes cases where the file has been added
               or removed locally and remotely)
        'D' -- deleted remotely
        'N' -- new remotely
        'r' -- get rid of entry
        'c' -- create entry
        'u' -- update entry

        (and probably others :-)
        """
        if not self.lseen:
            self.getlocal()
        if not self.rseen:
            self.getremote()
        if not self.eseen:
            if not self.lsum:
                if not self.rsum: return '0' # Never heard of
                else:
                    return 'N' # New remotely
            else: # self.lsum
                if not self.rsum: return '?' # Local only
                # Local and remote, but no entry
                if self.lsum == self.rsum:
                    return 'c' # Restore entry only
                else: return 'C' # Real conflict
        else: # self.eseen
            if not self.lsum:
                if self.edeleted:
                    if self.rsum: return 'R' # Removed
                    else: return 'r' # Get rid of entry
                else: # not self.edeleted
                    if self.rsum:
                        print "warning:",
                        print self.file,
                        print "was lost"
                        return 'U'
                    else: return 'r' # Get rid of entry
            else: # self.lsum
                if not self.rsum:
                    if self.enew: return 'A' # New locally
                    else: return 'D' # Deleted remotely
                else: # self.rsum
                    if self.enew:
                        if self.lsum == self.rsum:
                            return 'u'
                        else:
                            return 'C'
                    if self.lsum == self.esum:
                        if self.esum == self.rsum:
                            return '='
                        else:
                            return 'U'
                    elif self.esum == self.rsum:
                        return 'M'
                    elif self.lsum == self.rsum:
                        return 'u'
                    else:
                        return 'C'

    def update(self):
        code = self.action()
        if code == '=': return
        print code, self.file
        if code in ('U', 'N'):
            self.get()
        elif code == 'C':
            print "%s: conflict resolution not yet implemented" % \
                  self.file
        elif code == 'D':
            remove(self.file)
            self.eseen = 0
        elif code == 'r':
            self.eseen = 0
        elif code in ('c', 'u'):
            self.eseen = 1
            self.erev = self.rrev
            self.enew = 0
            self.edeleted = 0
            self.esum = self.rsum
            self.emtime, self.ectime = os.stat(self.file)[-2:]
            self.extra = ''

    def commit(self, message = ""):
        code = self.action()
        if code in ('A', 'M'):
            self.put(message)
            return 1
        elif code == 'R':
            print "%s: committing removes not yet implemented" % \
                  self.file
        elif code == 'C':
            print "%s: conflict resolution not yet implemented" % \
                  self.file

    def diff(self, opts = []):
        self.action()           # To update lseen, rseen
        flags = ''
        rev = self.rrev
        # XXX should support two rev options too!
        for o, a in opts:
            if o == '-r':
                rev = a
            else:
                flags = flags + ' ' + o + a
        if rev == self.rrev and self.lsum == self.rsum:
            return
        flags = flags[1:]
        fn = self.file
        data = self.proxy.get((fn, rev))
        sum = md5.new(data).digest()
        if self.lsum == sum:
            return
        import tempfile
        tf = tempfile.NamedTemporaryFile()
        tf.write(data)
        tf.flush()
        print 'diff %s -r%s %s' % (flags, rev, fn)
        sts = os.system('diff %s %s %s' % (flags, tf.name, fn))
        if sts:
            print '='*70

    def commitcheck(self):
        return self.action() != 'C'

    def put(self, message = ""):
        print "Checking in", self.file, "..."
        data = open(self.file).read()
        if not self.enew:
            self.proxy.lock(self.file)
        messages = self.proxy.put(self.file, data, message)
        if messages:
            print messages
        self.setentry(self.proxy.head(self.file), self.lsum)

    def get(self):
        data = self.proxy.get(self.file)
        f = open(self.file, 'w')
        f.write(data)
        f.close()
        self.setentry(self.rrev, self.rsum)

    def log(self, otherflags):
        print self.proxy.log(self.file, otherflags)

    def add(self):
        self.eseen = 0          # While we're hacking...
        self.esum = self.lsum
        self.emtime, self.ectime = 0, 0
        self.erev = ''
        self.enew = 1
        self.edeleted = 0
        self.eseen = 1          # Done
        self.extra = ''

    def setentry(self, erev, esum):
        self.eseen = 0          # While we're hacking...
        self.esum = esum
        self.emtime, self.ectime = os.stat(self.file)[-2:]
        self.erev = erev
        self.enew = 0
        self.edeleted = 0
        self.eseen = 1          # Done
        self.extra = ''


SENDMAIL = "/usr/lib/sendmail -t"
MAILFORM = """To: %s
Subject: CVS changes: %s

...Message from rcvs...

Committed files:
        %s

Log message:
        %s
"""


class RCVS(CVS):

    FileClass = MyFile

    def __init__(self):
        CVS.__init__(self)

    def update(self, files):
        for e in self.whichentries(files, 1):
            e.update()

    def commit(self, files, message = ""):
        list = self.whichentries(files)
        if not list: return
        ok = 1
        for e in list:
            if not e.commitcheck():
                ok = 0
        if not ok:
            print "correct above errors first"
            return
        if not message:
            message = raw_input("One-liner: ")
        committed = []
        for e in list:
            if e.commit(message):
                committed.append(e.file)
        self.mailinfo(committed, message)

    def mailinfo(self, files, message = ""):
        towhom = "sjoerd@cwi.nl, jack@cwi.nl" # XXX
        mailtext = MAILFORM % (towhom, string.join(files),
                                string.join(files), message)
        print '-'*70
        print mailtext
        print '-'*70
        ok = raw_input("OK to mail to %s? " % towhom)
        if string.lower(string.strip(ok)) in ('y', 'ye', 'yes'):
            p = os.popen(SENDMAIL, "w")
            p.write(mailtext)
            sts = p.close()
            if sts:
                print "Sendmail exit status %s" % str(sts)
            else:
                print "Mail sent."
        else:
            print "No mail sent."

    def report(self, files):
        for e in self.whichentries(files):
            e.report()

    def diff(self, files, opts):
        for e in self.whichentries(files):
            e.diff(opts)

    def add(self, files):
        if not files:
            raise RuntimeError, "'cvs add' needs at least one file"
        list = []
        for e in self.whichentries(files, 1):
            e.add()

    def rm(self, files):
        if not files:
            raise RuntimeError, "'cvs rm' needs at least one file"
        raise RuntimeError, "'cvs rm' not yet imlemented"

    def log(self, files, opts):
        flags = ''
        for o, a in opts:
            flags = flags + ' ' + o + a
        for e in self.whichentries(files):
            e.log(flags)

    def whichentries(self, files, localfilestoo = 0):
        if files:
            list = []
            for file in files:
                if self.entries.has_key(file):
                    e = self.entries[file]
                else:
                    e = self.FileClass(file)
                    self.entries[file] = e
                list.append(e)
        else:
            list = self.entries.values()
            for file in self.proxy.listfiles():
                if self.entries.has_key(file):
                    continue
                e = self.FileClass(file)
                self.entries[file] = e
                list.append(e)
            if localfilestoo:
                for file in os.listdir(os.curdir):
                    if not self.entries.has_key(file) \
                       and not self.ignored(file):
                        e = self.FileClass(file)
                        self.entries[file] = e
                        list.append(e)
            list.sort()
        if self.proxy:
            for e in list:
                if e.proxy is None:
                    e.proxy = self.proxy
        return list


class rcvs(CommandFrameWork):

    GlobalFlags = 'd:h:p:qvL'
    UsageMessage = \
"usage: rcvs [-d directory] [-h host] [-p port] [-q] [-v] [subcommand arg ...]"
    PostUsageMessage = \
            "If no subcommand is given, the status of all files is listed"

    def __init__(self):
        """Constructor."""
        CommandFrameWork.__init__(self)
        self.proxy = None
        self.cvs = RCVS()

    def close(self):
        if self.proxy:
            self.proxy._close()
        self.proxy = None

    def recurse(self):
        self.close()
        names = os.listdir(os.curdir)
        for name in names:
            if name == os.curdir or name == os.pardir:
                continue
            if name == "CVS":
                continue
            if not os.path.isdir(name):
                continue
            if os.path.islink(name):
                continue
            print "--- entering subdirectory", name, "---"
            os.chdir(name)
            try:
                if os.path.isdir("CVS"):
                    self.__class__().run()
                else:
                    self.recurse()
            finally:
                os.chdir(os.pardir)
                print "--- left subdirectory", name, "---"

    def options(self, opts):
        self.opts = opts

    def ready(self):
        import rcsclient
        self.proxy = rcsclient.openrcsclient(self.opts)
        self.cvs.setproxy(self.proxy)
        self.cvs.getentries()

    def default(self):
        self.cvs.report([])

    def do_report(self, opts, files):
        self.cvs.report(files)

    def do_update(self, opts, files):
        """update [-l] [-R] [file] ..."""
        local = DEF_LOCAL
        for o, a in opts:
            if o == '-l': local = 1
            if o == '-R': local = 0
        self.cvs.update(files)
        self.cvs.putentries()
        if not local and not files:
            self.recurse()
    flags_update = '-lR'
    do_up = do_update
    flags_up = flags_update

    def do_commit(self, opts, files):
        """commit [-m message] [file] ..."""
        message = ""
        for o, a in opts:
            if o == '-m': message = a
        self.cvs.commit(files, message)
        self.cvs.putentries()
    flags_commit = 'm:'
    do_com = do_commit
    flags_com = flags_commit

    def do_diff(self, opts, files):
        """diff [difflags] [file] ..."""
        self.cvs.diff(files, opts)
    flags_diff = 'cbitwcefhnlr:sD:S:'
    do_dif = do_diff
    flags_dif = flags_diff

    def do_add(self, opts, files):
        """add file ..."""
        if not files:
            print "'rcvs add' requires at least one file"
            return
        self.cvs.add(files)
        self.cvs.putentries()

    def do_remove(self, opts, files):
        """remove file ..."""
        if not files:
            print "'rcvs remove' requires at least one file"
            return
        self.cvs.remove(files)
        self.cvs.putentries()
    do_rm = do_remove

    def do_log(self, opts, files):
        """log [rlog-options] [file] ..."""
        self.cvs.log(files, opts)
    flags_log = 'bhLNRtd:s:V:r:'


def remove(fn):
    try:
        os.unlink(fn)
    except os.error:
        pass


def main():
    r = rcvs()
    try:
        r.run()
    finally:
        r.close()


if __name__ == "__main__":
    main()
PKb1�ZG���pdist/sumtree.pynu�[���import time
import FSProxy

def main():
    t1 = time.time()
    #proxy = FSProxy.FSProxyClient(('voorn.cwi.nl', 4127))
    proxy = FSProxy.FSProxyLocal()
    sumtree(proxy)
    proxy._close()
    t2 = time.time()
    print t2-t1, "seconds"
    raw_input("[Return to exit] ")

def sumtree(proxy):
    print "PWD =", proxy.pwd()
    files = proxy.listfiles()
    proxy.infolist(files)
    subdirs = proxy.listsubdirs()
    for name in subdirs:
        proxy.cd(name)
        sumtree(proxy)
        proxy.back()

main()
PKb1�ZZ���uu
pdist/rrcsnuȯ��#! /usr/bin/python2.7

import addpack
addpack.addpack('/home/guido/src/python/Demo/pdist')

import rrcs

rrcs.main()
PKb1�Ze�'�wwpdist/cmdfw.pycnu�[����
��^c@s<dZddd��YZd�Zedkr8e�ndS(sHFramework for command line interfaces like CVS.  See class CmdFrameWork.tCommandFrameWorkcBs\eZdZdZd	ZdZd�Zd	d�Zd�Z	d�Z
d	d�Zd�ZRS(
s�Framework class for command line interfaces like CVS.

    The general command line structure is

            command [flags] subcommand [subflags] [argument] ...

    There's a class variable GlobalFlags which specifies the
    global flags options.  Subcommands are defined by defining
    methods named do_<subcommand>.  Flags for the subcommand are
    defined by defining class or instance variables named
    flags_<subcommand>.  If there's no command, method default()
    is called.  The __doc__ strings for the do_ methods are used
    for the usage message, printed after the general usage message
    which is the class variable UsageMessage.  The class variable
    PostUsageMessage is printed after all the do_ methods' __doc__
    strings.  The method's return value can be a suggested exit
    status.  [XXX Need to rewrite this to clarify it.]

    Common usage is to derive a class, instantiate it, and then call its
    run() method; by default this takes its arguments from sys.argv[1:].
    s;usage: (name)s [flags] subcommand [subflags] [argument] ...tcCsdS(s&Constructor, present for completeness.N((tself((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pyt__init__#scCs�ddl}ddl}|dkr4|jd}ny|j||j�\}}Wn |jk
ru}|j|�SX|j|�|s�|j�|j	�S|d}d|}d|}yt
||�}	Wn"tk
r�|jd|f�SXyt
||�}
Wntk
rd}
nXy |j|d|
�\}}Wn.|jk
rp}|jd	|t|��SX|j�|	||�SdS(
s3Process flags, subcommand and options, then run it.i����Niitdo_tflags_scommand %r unknownRssubcommand %s: (
tgetopttsystNonetargvtGlobalFlagsterrortusagetoptionstreadytdefaulttgetattrtAttributeErrortstr(RtargsRRtoptstmsgtcmdtmnametfnametmethodtflags((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pytrun's:








 
cCsR|rNddGHdGHx+|D]#\}}dG|GdGt|�GHqWddGHndS(sWProcess the options retrieved by getopt.
        Override this if you have any options.t-i(sOptions:toptiontvalueN(trepr(RRtota((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pyR
Gs	cCsdS(s*Called just before calling the subcommand.N((R((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pyRQscCs%|r|GHn|ji|jjd6GHi}|j}x�xut|�D]g}|d dkrF|j|�rqqFnyt||�j}Wn
d}nX|r�|||<q�qFqFW|js�Pn|jd}q9W|r
dGH|j	�}|j
�x|D]}||GHq�Wn|jr!|jGHndS(s4Print usage message.  Return suitable exit code (2).tnameiRiswhere subcommand can be:iN(tUsageMessaget	__class__t__name__tdirthas_keyRt__doc__Rt	__bases__tkeystsorttPostUsageMessage(RRt
docstringstcR"tdoctnames((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pyRUs8	
	

	cCs	dGHdS(s\Default method, called when no subcommand is given.
        You should always override this.s'Nobody expects the Spanish Inquisition!N((R((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pyRssN(
R%t
__module__R(R#RR,R
RRR
RRR(((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pyRs	 	
	cCs�ddl}dtfd��Y}|�}gdgdgdgddgdg}x9|D]1}dG|GdGH|j|�}d
Gt|�GHqYWdS(
s:Test script -- called when this module is run as a script.i����NtHellocBseZd�ZRS(cSs	dGHdS(s0hello -- print 'hello world', needs no argumentssHello, worldN((RRR((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pytdo_hello}s(R%R1R3(((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pyR2|sthellotspams-xRi
sExit status:s
----------s
----------(RRRRR(RR2txtteststttsts((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pyttestys			

t__main__N((R(RR:R%(((s(/usr/lib64/python2.7/Demo/pdist/cmdfw.pyt<module>su	PKb1�Z�GT[DDpdist/security.pynu�[���class Security:

    def __init__(self):
        import os
        env = os.environ
        if env.has_key('PYTHON_KEYFILE'):
            keyfile = env['PYTHON_KEYFILE']
        else:
            keyfile = '.python_keyfile'
            if env.has_key('HOME'):
                keyfile = os.path.join(env['HOME'], keyfile)
            if not os.path.exists(keyfile):
                import sys
                for dir in sys.path:
                    kf = os.path.join(dir, keyfile)
                    if os.path.exists(kf):
                        keyfile = kf
                        break
        try:
            self._key = eval(open(keyfile).readline())
        except IOError:
            raise IOError, "python keyfile %s: cannot open" % keyfile

    def _generate_challenge(self):
        import random
        return random.randint(100, 100000)

    def _compare_challenge_response(self, challenge, response):
        return self._encode_challenge(challenge) == response

    def _encode_challenge(self, challenge):
        p, m = self._key
        return pow(long(challenge), p, m)
PKb1�ZP]���
pdist/rcsbumpnuȯ��#! /usr/bin/python2.7
# -*- python -*-
#
# guido's version, from rcsbump,v 1.2 1995/06/22 21:27:27 bwarsaw Exp
#
# Python script for bumping up an RCS major revision number.

import sys
import re
import rcslib
import string

WITHLOCK = 1
majorrev_re = re.compile('^[0-9]+')

dir = rcslib.RCS()

if sys.argv[1:]:
    files = sys.argv[1:]
else:
    files = dir.listfiles()

for file in files:
    # get the major revnumber of the file
    headbranch = dir.info(file)['head']
    majorrev_re.match(headbranch)
    majorrev = string.atoi(majorrev_re.group(0)) + 1

    if not dir.islocked(file):
        dir.checkout(file, WITHLOCK)

    msg = "Bumping major revision number (to %d)" % majorrev
    dir.checkin((file, "%s.0" % majorrev), msg, "-f")
PKb1�Z�5t�VV
pdist/mac.pyonu�[����
��^c@s8ddlZddlZddlZd�Ze�dS(i����NcCs�xzytd�}Wntk
r'PnXtj|�}|sCqn|ddkrf|jdd�n|t_tj�qWdS(Ns$ itrcvs(	t	raw_inputtEOFErrortstringtsplittinserttsystargvRtmain(tlinetwords((s&/usr/lib64/python2.7/Demo/pdist/mac.pyRs
	(RRRR(((s&/usr/lib64/python2.7/Demo/pdist/mac.pyt<module>s	PKb1�Z�;��DDpdist/client.pyonu�[����
��^c@s�dZddlZddlZddlZddlZddlZdZddd��YZddlm	Z	dee	fd��YZ
d	dd
��YZdS(
sRPC Client module.i����NitClientcBs�eZdZed�Zed�Zd�Zd�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
d�Zd�Zd
d�Zd�Zd�Zd�ZRS(sCRPC Client class.  No need to derive a class -- it's fully generic.cCs|j||�|j�dS(N(t	_pre_initt
_post_init(tselftaddresstverbose((s)/usr/lib64/python2.7/Demo/pdist/client.pyt__init__scCs�t|�td�kr'd|f}n||_||_|jrTdt|�GHntjtjtj�|_|jj|�|jr�dGHnd|_	d|_
i|_|jjd�|_
|jjd�|_dS(NitsConnecting to %s ...s
Connected.itrtw(ttypet_addresst_verbosetreprtsockettAF_INETtSOCK_STREAMt_sockettconnectt_lastidt_nextidt_repliestmakefilet_rft_wf(RRR((s)/usr/lib64/python2.7/Demo/pdist/client.pyRs							cCs|jd�|_dS(Ns.methods(t_callt_methods(R((s)/usr/lib64/python2.7/Demo/pdist/client.pyR%scCs|j�dS(N(t_close(R((s)/usr/lib64/python2.7/Demo/pdist/client.pyt__del__(scCsj|jr|jj�nd|_|jr;|jj�nd|_|jr]|jj�nd|_dS(N(RtclosetNoneRR(R((s)/usr/lib64/python2.7/Demo/pdist/client.pyR+s					cCs?||jkr2t||�}t|||�|St|�dS(N(Rt_stubtsetattrtAttributeError(Rtnametmethod((s)/usr/lib64/python2.7/Demo/pdist/client.pyt__getattr__3s
cCs
||_dS(N(R(RR((s)/usr/lib64/python2.7/Demo/pdist/client.pyt_setverbose:scGs|j||�S(N(t_vcall(RR"targs((s)/usr/lib64/python2.7/Demo/pdist/client.pyR=scCs|j|j||��S(N(t_recvt_vsend(RR"R'((s)/usr/lib64/python2.7/Demo/pdist/client.pyR&@scGs|j||�S(N(R)(RR"R'((s)/usr/lib64/python2.7/Demo/pdist/client.pyt_sendCscGs|j||d�S(Ni(R)(RR"R'((s)/usr/lib64/python2.7/Demo/pdist/client.pyt
_send_noreplyFscCs|j||d�S(Ni(R)(RR"R'((s)/usr/lib64/python2.7/Demo/pdist/client.pyt_vsend_noreplyIsicCsy|j}|d|_|s&|}n|||f}|jdkrVdt|�GHntj|j�}|j|�|S(Nissending request: %s(RRR
tpickletPicklerRtdump(RR"R't	wantreplytidtrequesttwp((s)/usr/lib64/python2.7/Demo/pdist/client.pyR)Ls	


cCs�|j|�\}}}||kr:td||f�n|dkrJ|S|}tt|�rqtt|�}n|dkr�tj}n||kr�|}n||�dS(Ns request/reply id mismatch: %d/%dsposix.errors	mac.error(sposix.errors	mac.error(t_vrecvtRuntimeErrorRthasattrt__builtin__tgetattrtosterror(RR1t	exceptiontvaluetridtx((s)/usr/lib64/python2.7/Demo/pdist/client.pyR(Vs	cCs@|j�|jj|�rR|jdkr7d|GHn|j|}|j|=|St|�}x�|jdkr|d|GHntj|j�}|j�}~|jdkr�dt	|�GHn|d}t|�}||kr�|jdkr�dGHn|S||j|<||kra|jdkr+dGHndd|fSqaWdS(Nis"retrieving previous reply, id = %dswaiting for reply, id = %ds
got reply: %sisgot itsgot higher id, assume all ok(t_flushRthas_keyRtabsR-t	UnpicklerRtloadR
R(RR1treplytaidtrpR=tarid((s)/usr/lib64/python2.7/Demo/pdist/client.pyR4es6




cCs|jj�dS(N(Rtflush(R((s)/usr/lib64/python2.7/Demo/pdist/client.pyR?}s(t__name__t
__module__t__doc__tVERBOSERRRRRR$R%RR&R*R+R,R)R(R4R?(((s)/usr/lib64/python2.7/Demo/pdist/client.pyRs"										
		(tSecuritytSecureClientcBseZd�ZRS(cGs�ddl}t|j|�tj|�|jj�|jj�}|j	|j
|��}|j|�}tt
|��}|ddkr�|d }n|jj|d�|jj�|j�dS(Ni����tLls
(tstringtapplyRRMRRRHRtreadlinetatoitstript_encode_challengeR
tlongtwriteR(RR'RPtlinet	challengetresponse((s)/usr/lib64/python2.7/Demo/pdist/client.pyR�s



(RIRJR(((s)/usr/lib64/python2.7/Demo/pdist/client.pyRN�sRcBs eZdZd�Zd�ZRS(sJHelper class for Client -- each instance serves as a method of the client.cCs||_||_dS(N(t_clientt_name(RtclientR"((s)/usr/lib64/python2.7/Demo/pdist/client.pyR�s	cGs|jj|j|�S(N(R[R&R\(RR'((s)/usr/lib64/python2.7/Demo/pdist/client.pyt__call__�s(RIRJRKRR^(((s)/usr/lib64/python2.7/Demo/pdist/client.pyR�s	(((RKtsysRR-R7R9RLRtsecurityRMRNR(((s)/usr/lib64/python2.7/Demo/pdist/client.pyt<module>ssPKb1�Z�"
t��pdist/server.pynu�[���"""RPC Server module."""

import sys
import socket
import pickle
from fnmatch import fnmatch
from repr import repr


# Default verbosity (0 = silent, 1 = print connections, 2 = print requests too)
VERBOSE = 1


class Server:

    """RPC Server class.  Derive a class to implement a particular service."""

    def __init__(self, address, verbose = VERBOSE):
        if type(address) == type(0):
            address = ('', address)
        self._address = address
        self._verbose = verbose
        self._socket = None
        self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self._socket.bind(address)
        self._socket.listen(1)
        self._listening = 1

    def _setverbose(self, verbose):
        self._verbose = verbose

    def __del__(self):
        self._close()

    def _close(self):
        self._listening = 0
        if self._socket:
            self._socket.close()
        self._socket = None

    def _serverloop(self):
        while self._listening:
            self._serve()

    def _serve(self):
        if self._verbose: print "Wait for connection ..."
        conn, address = self._socket.accept()
        if self._verbose: print "Accepted connection from %s" % repr(address)
        if not self._verify(conn, address):
            print "*** Connection from %s refused" % repr(address)
            conn.close()
            return
        rf = conn.makefile('r')
        wf = conn.makefile('w')
        ok = 1
        while ok:
            wf.flush()
            if self._verbose > 1: print "Wait for next request ..."
            ok = self._dorequest(rf, wf)

    _valid = ['192.16.201.*', '192.16.197.*', '132.151.1.*', '129.6.64.*']

    def _verify(self, conn, address):
        host, port = address
        for pat in self._valid:
            if fnmatch(host, pat): return 1
        return 0

    def _dorequest(self, rf, wf):
        rp = pickle.Unpickler(rf)
        try:
            request = rp.load()
        except EOFError:
            return 0
        if self._verbose > 1: print "Got request: %s" % repr(request)
        try:
            methodname, args, id = request
            if '.' in methodname:
                reply = (None, self._special(methodname, args), id)
            elif methodname[0] == '_':
                raise NameError, "illegal method name %s" % repr(methodname)
            else:
                method = getattr(self, methodname)
                reply = (None, apply(method, args), id)
        except:
            reply = (sys.exc_type, sys.exc_value, id)
        if id < 0 and reply[:2] == (None, None):
            if self._verbose > 1: print "Suppress reply"
            return 1
        if self._verbose > 1: print "Send reply: %s" % repr(reply)
        wp = pickle.Pickler(wf)
        wp.dump(reply)
        return 1

    def _special(self, methodname, args):
        if methodname == '.methods':
            if not hasattr(self, '_methods'):
                self._methods = tuple(self._listmethods())
            return self._methods
        raise NameError, "unrecognized special method name %s" % repr(methodname)

    def _listmethods(self, cl=None):
        if not cl: cl = self.__class__
        names = cl.__dict__.keys()
        names = filter(lambda x: x[0] != '_', names)
        names.sort()
        for base in cl.__bases__:
            basenames = self._listmethods(base)
            basenames = filter(lambda x, names=names: x not in names, basenames)
            names[len(names):] = basenames
        return names


from security import Security


class SecureServer(Server, Security):

    def __init__(self, *args):
        apply(Server.__init__, (self,) + args)
        Security.__init__(self)

    def _verify(self, conn, address):
        import string
        challenge = self._generate_challenge()
        conn.send("%d\n" % challenge)
        response = ""
        while "\n" not in response and len(response) < 100:
            data = conn.recv(100)
            if not data:
                break
            response = response + data
        try:
            response = string.atol(string.strip(response))
        except string.atol_error:
            if self._verbose > 0:
                print "Invalid response syntax", repr(response)
            return 0
        if not self._compare_challenge_response(challenge, response):
            if self._verbose > 0:
                print "Invalid response value", repr(response)
            return 0
        if self._verbose > 1:
            print "Response matches challenge.  Go ahead!"
        return 1
PKb1�Z�XB��pdist/cmptree.pycnu�[����
��^c@s�dZddlZddlmZddlZddlZddlZd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
edkr�e�ndS(
sQCompare local and remote dictionaries and transfer differing files -- like rdist.i����N(treprcCs-tj�}td|�}|r>tj|�tj�}ntdd�}d}d}d}dGHtd|�}|r�|}n||f}tj�}tj�}tj||�}	t	||	|�|	j
�|j
�tj�}
|
|}t|d	�\}}
|Gd
Gt|
�GdGHtd�dS(
Nschdir [%s] thostsvoorn.cwi.nliitsMode should be a string of characters, indicating what to do with differences.
r - read different files to local file system
w - write different files to remote file system
c - create new files, either remote or local
d - delete disappearing files, either remote or local
s
mode [%s] i<sminutes andtsecondss[Return to exit] (
tostgetcwdt	raw_inputtchdirtaskttimetFSProxytFSProxyLocalt
FSProxyClienttcomparet_closetdivmodtround(tpwdtsRtporttverbosetmodetaddresstt1tlocaltremotett2tdttminstsecs((s*/usr/lib64/python2.7/Demo/pdist/cmptree.pytmain	s2
	


cCs td||f�}|p|S(Ns%s [%s] (R(tprompttdefaultR((s*/usr/lib64/python2.7/Demo/pdist/cmptree.pyR)scCs3td|t|�f�}|r/tj|�S|S(Ns%s [%s] (Rtstrtstringtatoi(RR R((s*/usr/lib64/python2.7/Demo/pdist/cmptree.pytaskint-s
cCs�HdGttj��GH|jd�}|jd�}|j�dGHi}x$|j�D]\}}|||<qVWdGH|j|�}dGt|�GHi}	x|D]\}}
|
|	|<|j|�st|�GdGHd|kr�d	|kr�t	|||�q�q�||}||
kr�t|�G|j
|�}|j
|�}
||
krrd
Gd|kr�t	|||�q�n6|
|kr�dGd|kr�t|||�q�nd
GHq�q�Wx�|j�D]�}|	j�s�t|�GdGt
�d|krd	|krt|||�n-d|kr<d|kr<tj|�dGHnHq�q�WdGH|j|�}g}x�|D]�}|j|�r�dGt|�GH|j|�qedGt|�GdGHd|kred	|kredt|�}d|kr�d}nt|d�}|d dkr7|j|�dt|�GH|j|�q7qeqeW|j�}x0|D](}||krNdGt|�GdGHqNqNWx[|D]S}dGt|�GH|j|�|j|�t|||�|j�|j�q�WdS(NsPWD =tsumlisttlistsubdirsscalculating local sums ...sgetting remote sums ...tgotsonly remotetrtcsremote newerslocal newertws same mtime but different sum?!?!sonly locallytdsremoved.sgettin subdirs ...sCommon subdirectorysRemote subdirectorysnot found locallys"Create local subdirectory %s? [y] tyitYsSubdirectory %s madesLocal subdirectorysnot found remotelysEntering subdirectory(R,R-(RRRt_sendt_flushR%t_recvtlenthas_keytrecvfiletmtimetsendfiletkeystfltunlinktisdirtappendRtmkdirR&tcdR
tback(RRRtsums_idt
subdirs_idtlsumdicttnametinfotsumstrsumdicttrsumtlsumtrmtimetlmtimetsubdirstcommontprtoktlsubdirs((s*/usr/lib64/python2.7/Demo/pdist/cmptree.pyR
2s�






	





cCs�y|j|�Wn&ttjfk
r9}dG|GHdSXdGt�t|�j�}tj�}|jd||�|j	�tj�}||}t
|�GdGt|�GdG|r�dGtt
|�|�GdGnHdS(Nscannot create:ssending ...twritesbytes inRsi.e.s	bytes/sec(tcreatetIOErrorRterrorR7topentreadR	t
_send_noreplyR/R1R(RRRAtmsgtdataRRR((s*/usr/lib64/python2.7/Demo/pdist/cmptree.pyR5�s"	

cCsPd}z t|||�}d}|SWd|sKd|fGH|j|�nXdS(Niis#*** recvfile of %r failed, deleting(t
recvfile_realtdelete(RRRARLtrv((s*/usr/lib64/python2.7/Demo/pdist/cmptree.pyR3�scCscy|j|�Wn&ttjfk
r9}dG|GHdSXdGt�t|d�}tj�}d}d}|jd|||�}|j�xe||}	|jd||	|�}
|j	|�}|
}|s�Pn|j
|�|j|�|	}q�W|j�}tj�}
|j
�|
|}|GdGt|�Gd	G|rQd
G||GdGnH|j	|�dS(
Nscannot create:s
receiving ...R*iiiRSsbytes inRsi.e.s	bytes/seci(RORPRRQR7RRR	R.R/R0tseekRNttelltcloseR(RRRARUtfRtlengthtoffsettidt	newoffsettnewidRVtsizeRR((s*/usr/lib64/python2.7/Demo/pdist/cmptree.pyRW�s@	






cCstjj�dS(N(tsyststdouttflush(((s*/usr/lib64/python2.7/Demo/pdist/cmptree.pyR7�st__main__(t__doc__RdRR
R	RRRR$R
R5R3RWR7t__name__(((s*/usr/lib64/python2.7/Demo/pdist/cmptree.pyt<module>s	 			P			&	PKb1�Z�F"���pdist/rrcs.pycnu�[����
Afc@s�dZddlZddlZddlZddlZddlZddlZddlmZd�Z	d�Z
d�Zd�Zd�Z
d	�Zd
�Zd�Zd�Zd
�Zdd�Zd�Zd�Zide
fd6de
fd6defd6defd6defd6defd6defd6defd6de
fd6defd6defd6Zedkr�e	�ndS( s$Remote RCS -- command line interfacei����N(t
openrcsclientc
Csntjt_y�tjtjdd�\}}|s=d}n|d|d}}tj|�sptjd�nt|\}}tj||�\}}WnZtjk
r�}|GHdGHdGHdGHd	GHd
GHdGHdGHd
GHdGHdGHtjd�nXt	|�}|s|j
�}nxP|D]H}	y||||	�Wqttjfk
re}d|	|fGHqXqWdS(Nis	h:p:d:qvLtheadisunknown commands2usage: rrcs [options] command [options] [file] ...swhere command can be:s+      ci|put      # checkin the given filess      co|get      # checkouts%      info        # print header infos1      head        # print revision of head branchs*      list        # list filename if valids"      log         # print full logs/      diff        # diff rcs file and work files7if no files are given, all remote rcs files are assumedis%s: %s(
tsyststderrtstdouttgetopttargvtcommandsthas_keyterrortexitRt	listfilestIOErrortos(
toptstresttcmdtcoptsettfunctcoptstfilestmsgtxtfn((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pytmain
s>	
cCs�t|�}|j�}|j�|j|�}|r[t||||�r[d|GHdSdG|GdGHt|�}|j|||�}|r�|GHndS(Ns %s: unchanged since last checkinsChecking ins...(topentreadtclosetisvalidtsamet
asklogmessagetput(RRRtftdatatnewtmessagetmessages((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pytcheckin/s
	
cCs9|j|�}t|d�}|j|�|j�dS(Ntw(tgetRtwriteR(RRRR!R ((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pytcheckout=s
cCs|j|�dS(N(tlock(RRR((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pyR*CscCs|j|�dS(N(tunlock(RRR((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pyR+FscCsT|j|�}|j�}|j�x|D]}|dG||GHq,WddGHdS(Nt:t=iF(tinfotkeystsort(RRRtdictR/tkey((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pyR.Is

cCs|j|�}|G|GHdS(N(R(RRRR((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pyRQscCs|j|�r|GHndS(N(R(RRR((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pytlistUscCsTd}x&|D]\}}|d||}q
W|d}|j||�}|GHdS(Ntt i(tlog(RRRtflagstotaR$((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pyR6Ys
c	Cs�t|||�rdSd}x&|D]\}}|d||}q#W|d}|j|�}tj�}|j|�|j�d||j|�|fGHtjd||j	|f�}|r�ddGHndS(NR4R5isdiff %s -r%s %ss
diff %s %s %sR-iF(
RR'ttempfiletNamedTemporaryFileR(tflushRR
tsystemtname(	RRRR7R8R9R!ttftsts((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pytdiffas


cCs_|dkr1t|�}|j�}|j�ntj|�j�}|j|�}||kS(N(tNoneRRRtmd5R"tdigesttsum(RRRR!R tlsumtrsum((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pyRqs
cCs�|r
dGndGdGH|r$dGHnd}xQtjjd�tjj�tjj�}|sl|dkrpPn||}q-W|S(Nsenter description,senter log message,s)terminate with single '.' or end of file:s"NOTE: This is NOT the log message!R4s>> s.
(RRR(R<tstdintreadline(R"R#tline((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pyRzs
cCs,ytj|�Wntjk
r'nXdS(N(R
tunlinkR	(R((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pytremove�sR4tciRtcoR'R.RR3R*R+sbhLRtd:l:r:s:w:V:R6tcRAt__main__(t__doc__RR
RtstringRCR:t	rcsclientRRR%R)R*R+R.RR3R6RARBRRRLRt__name__(((s'/usr/lib64/python2.7/Demo/pdist/rrcs.pyt<module>sD	"												









PKb1�ZMi$�1�1pdist/FSProxy.pycnu�[����
��^c@s�dZddlZddlZddlZddlZddlZddlTddlZddlZdZej	ej
fZdd
d��YZdeej
fd��YZd	ejfd
��YZd�Zedkr�e�ndS(s�File System Proxy.

Provide an OS-neutral view on a file system, locally or remotely.
The functionality is geared towards implementing some sort of
rdist-like utility between a Mac and a UNIX system.

The module defines three classes:

FSProxyLocal  -- used for local access
FSProxyServer -- used on the server side of remote access
FSProxyClient -- used on the client side of remote access

The remote classes are instantiated with an IP address and an optional
verbosity flag.
i����N(t*i�tFSProxyLocalcBs�eZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd+d�Zd+d�Zd+d
�Zd+d�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd+d�Zd+d�Zd+d�Zd+d�Zd+d�Z d�Z!d+d�Z"d+d �Z#d+d!�Z$d+d"�Z%d+d#�Z&d$d%d&�Z'd'�Z(d$d(�Z)d)�Z*d*�Z+RS(,cCs#g|_dg|j�|_dS(Ns*.pyc(t	_dirstackt_readignoret_ignore(tself((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt__init__!s	cCsx|jr|j�qWdS(N(Rtback(R((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt_close%scCs�|jd�}yt|�}WnEtk
rf|jd�}yt|�}Wqgtk
rbgSXnXg}xD|j�}|s�Pn|ddkr�|d }n|j|�qpW|j�|S(Ntignoressynctree.ignorefilesi����s
(t_hidetopentIOErrortreadlinetappendtclose(RtfiletfR	tline((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyR)s&

	

cCs|ddkS(Nit.((Rtname((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt_hidden<scCsd|S(Ns.%s((RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyR
?scCs�t|�tkrdS|ddkr*dS|tkr:dS|j|�rMdStjj|�\}}|sr|rvdStjj|�r�dSdt|d�j	d�kr�dSx'|j
D]}tj||�r�dSq�WdS(Nii����t~strbii(tlent
maxnamelent	skipnamesRtostpathtsplittislinkRtreadRtfnmatch(RRtheadttailtign((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytvisibleBs&
cCs,|j|�s(tjdt|��ndS(Nsprotected name %s(R$Rterrortrepr(RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytcheckOscCs<|j|�tjj|�s8tjdt|��ndS(Nsnot a plain file %s(R'RRtisfileR%R&(RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt	checkfileSs
cCs
tj�S(N(Rtgetcwd(R((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytpwdXscCsY|j|�tj�|jf}tj|�|jj|�|j|j�|_dS(N(R'RR*RtchdirRRR(RRtsave((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytcd[s


cCsO|jstjd�n|jd\}}tj|�|jd=||_dS(Nsempty directory stacki����(RRR%R,R(RtdirR	((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRbs	

cCsD|r$|d�}t||�}nt|j|�}|j�|S(NcSstj||�S(N(R (Rtpat((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytkeepls(tfilterR$tsort(RtfilesR0R1((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt_filterjs
cCs"tjtj�}|j||�S(N(RtlistdirtcurdirR5(RR0R4((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytlistsscCs7tjtj�}ttjj|�}|j||�S(N(RR6R7R2RR(R5(RR0R4((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt	listfileswscCs7tjtj�}ttjj|�}|j||�S(N(RR6R7R2RtisdirR5(RR0R4((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytlistsubdirs|scCs|j|�otjj|�S(N(R$RRtexists(RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyR<�scCs|j|�otjj|�S(N(R$RRR:(RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyR:�scCs|j|�otjj|�S(N(R$RRR(RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyR�scCs|j|�otjj|�S(N(R$RRR((RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyR(�scCsb|j|�d}t|�}tj�}x*|j|�}|sGPn|j|�q.W|j�S(Niii (R)Rtmd5tnewRtupdatetdigest(RRt
BUFFERSIZERtsumtbuffer((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRB�s
cCs|j|�tj|�tS(N(R)RtstattST_SIZE(RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytsize�s
cCs'|j|�tjtj|�t�S(N(R)ttimet	localtimeRRDtST_MTIME(RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytmtime�s
cCsF|j|�tj|�t}tjtj|�t�}||fS(N(R)RRDRERGRHRI(RRRFRJ((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRD�s
cCsK|j|�}tj|�t}tjtj|�t�}|||fS(N(RBRRDRERGRHRI(RRRBRFRJ((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytinfo�scCs�|dkr|j�}ng}x[|D]S}y|j|||�f�Wq(tjtfk
rz|j|df�q(Xq(W|S(N(tNoneR9RRR%R(RtfunctionR8tresR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt_list�s
cCs|j|j|�S(N(RORB(RR8((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytsumlist�scCs|j|j|�S(N(RORD(RR8((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytstatlist�scCs|j|j|�S(N(RORJ(RR8((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt	mtimelist�scCs|j|j|�S(N(RORF(RR8((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytsizelist�scCs|j|j|�S(N(RORK(RR8((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytinfolist�scCsg|dkr|j�}ni}x?|D]7}y||�||<Wq(tjtfk
r^q(Xq(W|S(N(RLR9RR%R(RRMR8tdictR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt_dict�s
cCs|j|j|�S(N(RURB(RR8((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytsumdict�scCs|j|j|�S(N(RURF(RR8((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytsizedict�scCs|j|j|�S(N(RURJ(RR8((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt	mtimedict�scCs|j|j|�S(N(RURD(RR8((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytstatdict�scCs|j|j|�S(N(RVRK(RR8((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytinfodict�sii����cCss|j|�t|�}|j|�|dkr;d}n*|dkrV|j�}n|j|�}|j�|S(Nit(R)RtseekRR(RRtoffsettlengthRtdata((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyR�s

	
cCs�|j|�tjj|�rq|j|�|d}ytj|�Wntjk
r]nXtj||�nt|d�}|j	�dS(NRtw(
R'RRR<R)tunlinkR%trenameRR(RRtbnameR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pytcreate�s


cCsD|j|�t|d�}|j|�|j|�|j�dS(Nsr+(R)RR]twriteR(RRR`R^R((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRf�s



cCs!|j|�tj|d�dS(Ni�(R'Rtmkdir(RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRgs
cCs|j|�tj|�dS(N(R'Rtrmdir(RR((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRhs
N(,t__name__t
__module__RRRRR
R$R'R)R+R.RRLR5R8R9R;R<R:RR(RBRFRJRDRKRORPRQRRRSRTRVRWRXRYRZR[RReRfRgRh(((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRsR						
																	
	
	t
FSProxyServercBs)eZejd�Zd�Zd�ZRS(cCs'tj|�tjj|||�dS(N(RRtservertServer(Rtaddresstverbose((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyR
s
cCs!tjj|�tj|�dS(N(RlRmRR(R((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRscCs.tjj|�x|jr)|j�qWdS(N(RlRmt_serveRR(R((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRps(RiRjRltVERBOSERRRp(((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRks	t
FSProxyClientcBseZejd�ZRS(cCstjj|||�dS(N(tclienttClientR(RRnRo((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRs(RiRjRsRqR(((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyRrscCsdddl}ddl}|jdr>|j|jd�}nd}td|f�}|j�dS(Ni����iiR\(tstringtsystargvtatoiRkt_serverloop(RuRvtporttproxy((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyttest!s
t__main__((t__doc__RlRsR=RR RDRGRR7tpardirRRRmRkRtRrR|Ri(((s*/usr/lib64/python2.7/Demo/pdist/FSProxy.pyt<module>s 
�	PKb1�Z����GGpdist/RCSProxy.pyonu�[����
Afc@s�dZddlZddlZddlZddlZddlZddlZddlZddd��YZdej	efd��YZ
de
ejfd��YZd	�Z
d
�Zedkr�e�ndS(
sRCS Proxy.

Provide a simplified interface on RCS files, locally or remotely.
The functionality is geared towards implementing some sort of
remote CVS like utility.  It is modeled after the similar module
FSProxy.

The module defines two classes:

RCSProxyLocal  -- used for local access
RCSProxyServer -- used on the server side of remote access

The corresponding client class, RCSProxyClient, is defined in module
rcsclient.

The remote classes are instantiated with an IP address and an optional
verbosity flag.
i����Nt
DirSupportcBseeZd�Zd�Zd�Zd�Zd�Zd�Zd
d�Z	d�Z
d�Zd	�ZRS(cCs
g|_dS(N(t	_dirstack(tself((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyt__init__!scCs|j�dS(N(t_close(R((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyt__del__$scCsx|jr|j�qWdS(N(Rtback(R((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyR'scCs
tj�S(N(tostgetcwd(R((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pytpwd+scCs-tj�}tj|�|jj|�dS(N(RRtchdirRtappend(Rtnametsave((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pytcd.s
cCs@|jstjd�n|jd}tj|�|jd=dS(Nsempty directory stacki����(RRterrorR
(Rtdir((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyR3s
	

cCs7tjtj�}ttjj|�}|j||�S(N(Rtlistdirtcurdirtfiltertpathtisdirt_filter(Rtpattfiles((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pytlistsubdirs:scCstjj|�S(N(RRR(RR((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyR?scCstj|d�dS(Ni�(Rtmkdir(RR((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyRBscCstj|�dS(N(Rtrmdir(RR((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyREsN(
t__name__t
__module__RRRR	RRtNoneRRRR(((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyRs								t
RCSProxyLocalcBsheZd�Zd�Zd	d�Zd	d�Zd�Zd�Zd	d�Z	d	d�Z
d	d�ZRS(
cCs!tjj|�tj|�dS(N(trcslibtRCSRR(R((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyRKscCs!tj|�tjj|�dS(N(RRR R!(R((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyROs
cCs|j|j|�S(N(t_listtsum(Rtlist((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pytsumlistSscCs|j|j|�S(N(t_dictR#(RR$((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pytsumdictVscCse|j|�}d}tj�}x*|j|�}|s=Pn|j|�q$W|j|�|j�S(Niii (t_opentmd5tnewtreadtupdatet
_closepipetdigest(Rtname_revtft
BUFFERSIZER#tbuffer((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyR#Ys
cCs,|j|�}|j�}|j|�|S(N(R(R+R-(RR/R0tdata((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pytgetes
cCs\|j|�\}}t|d�}|j|�|j�|j||�|j|�dS(Ntw(t	_unmangletopentwritetclosetcheckint_remove(RR/R3tmessageRtrevR0((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pytputks

cCs�|dkr|j�}ng}x[|D]S}y|j|||�f�Wq(tjtfk
rz|j|df�q(Xq(W|S(s�INTERNAL: apply FUNCTION to all files in LIST.

        Return a list of the results.

        The list defaults to all files in the directory if None.

        N(Rt	listfilesRRRtIOError(RtfunctionR$tresR((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyR"ss
cCsg|dkr|j�}ni}x?|D]7}y||�||<Wq(tjtfk
r^q(Xq(W|S(s�INTERNAL: apply FUNCTION to all files in LIST.

        Return a dictionary mapping files to results.

        The list defaults to all files in the directory if None.

        N(RR?RRR@(RRAR$tdictR((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyR&�s
N(RRRRRR%R'R#R4R>R"R&(((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyRIs				tRCSProxyServercBs)eZejd�Zd�Zd�ZRS(cCs'tj|�tjj|||�dS(N(RRtservertSecureServer(Rtaddresstverbose((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyR�s
cCs!tjj|�tj|�dS(N(RERFRR(R((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyR�scCs.tjj|�x|jr)|j�qWdS(N(RERFt_serveRR(R((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyRI�s(RRREtVERBOSERRRI(((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyRD�s	cCsdddl}ddl}|jdr>|j|jd�}nd}td|f�}|j�dS(Ni����iit(tstringtsystargvtatoiRDt_serverloop(RLRMtporttproxy((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyttest_server�s
cCs�ddl}|jds>|jdrU|jdddkrUt�|jd�nt�}|jd}t||�r�t||�}t|�r�t|t	|jd��GHq�t
|�GHnd|GH|jd�dS(Ni����iit
0123456789is%s: no such attribute(RMRNRStexitRthasattrtgetattrtcallabletapplyttupletrepr(RMRRtwhattattr((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyttest�s2	
	t__main__((t__doc__RER)RtfnmatchRLttempfileR RR!RRFRDRSR^R(((s+/usr/lib64/python2.7/Demo/pdist/RCSProxy.pyt<module>s*O		PKb1�Z@GF��pdist/security.pycnu�[����
��^c@sddd��YZdS(tSecuritycBs,eZd�Zd�Zd�Zd�ZRS(cCsddl}|j}|jd�r1|d}n�d}|jd�rb|jj|d|�}n|jj|�s�ddl}xE|jD]7}|jj||�}|jj|�r�|}Pq�q�Wnytt|�j	��|_
Wntk
rtd|�nXdS(Ni����tPYTHON_KEYFILEs.python_keyfiletHOMEspython keyfile %s: cannot open(tostenvironthas_keytpathtjointexiststsystevaltopentreadlinet_keytIOError(tselfRtenvtkeyfileR	tdirtkf((s+/usr/lib64/python2.7/Demo/pdist/security.pyt__init__s$	

cCsddl}|jdd�S(Ni����idi��(trandomtrandint(RR((s+/usr/lib64/python2.7/Demo/pdist/security.pyt_generate_challengescCs|j|�|kS(N(t_encode_challenge(Rt	challengetresponse((s+/usr/lib64/python2.7/Demo/pdist/security.pyt_compare_challenge_responsescCs%|j\}}tt|�||�S(N(R
tpowtlong(RRtptm((s+/usr/lib64/python2.7/Demo/pdist/security.pyRs(t__name__t
__module__RRRR(((s+/usr/lib64/python2.7/Demo/pdist/security.pyRs			N((R(((s+/usr/lib64/python2.7/Demo/pdist/security.pyt<module>tPKb1�Z�roQ8Q8pdist/rcvs.pyonu�[����
Afc@s�dZddlmZmZddlZddlZddlZddlZddlm	Z	dZ
defd��YZdZd	Z
d
efd��YZde	fd
��YZd�Zd�Zedkr�e�ndS(s$Remote CVS -- command line interfacei����(tCVStFileN(tCommandFrameWorkitMyFilecBskeZd�Zd�Zdd�Zgd�Zd�Zdd�Zd�Zd�Z	d	�Z
d
�ZRS(cCsl|js|j�n|js,|j�n|js||jsR|jsKdSdSqh|js_dS|j|jkrudSdSn�|js�|jr�|jr�dSdSqh|jr�dG|jGd	GHd
SdSn�|js�|j	r�dSdSn�|j	r	|j|jkrd
SdSn|j|j
kr8|j
|jkr1dSd
Sn0|j
|jkrNdS|j|jkrdd
SdSdS(sReturn a code indicating the update status of this file.

        The possible return values are:

        '=' -- everything's fine
        '0' -- file doesn't exist anywhere
        '?' -- exists locally only
        'A' -- new locally
        'R' -- deleted locally
        'U' -- changed remotely, no changes locally
               (includes new remotely or deleted remotely)
        'M' -- changed locally, no changes remotely
        'C' -- conflict: changed locally as well as remotely
               (includes cases where the file has been added
               or removed locally and remotely)
        'D' -- deleted remotely
        'N' -- new remotely
        'r' -- get rid of entry
        'c' -- create entry
        'u' -- update entry

        (and probably others :-)
        t0tNt?tctCtRtrswarning:swas losttUtAtDtut=tMN(tlseentgetlocaltrseent	getremoteteseentlsumtrsumtedeletedtfiletenewtesum(tself((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytaction0sT	
	
											cCs
|j�}|dkrdS|G|jGH|dkrA|j�n�|dkr\d|jGHn�|dkr�t|j�d|_n�|dkr�d|_nm|dkrd|_|j|_d|_d|_|j	|_
tj|j�d\|_
|_d
|_ndS(NRRRRs+%s: conflict resolution not yet implementedR
iR
RRii����t(RR(RR(RRtgettremoveRtrrevterevRRRRtoststattemtimetectimetextra(Rtcode((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytupdateys,

			"RcCsc|j�}|dkr)|j|�dS|dkrDd|jGHn|dkr_d|jGHndS(	NRRiR	s*%s: committing removes not yet implementedRs+%s: conflict resolution not yet implemented(RR(RtputR(RtmessageR(((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytcommit�s
cCsE|j�d}|j}x;|D]3\}}|dkrA|}q |d||}q W||jkr||j|jkr|dS|d}|j}|jj||f�}tj|�j	�}|j|kr�dSddl
}	|	j�}
|
j|�|
j
�d|||fGHtjd||
j|f�}|rAdd	GHndS(
NRs-rt ii����sdiff %s -r%s %ss
diff %s %s %sRiF(RR!RRRtproxyRtmd5tnewtdigestttempfiletNamedTemporaryFiletwritetflushR#tsystemtname(RtoptstflagstrevtotatfntdatatsumR2ttftsts((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytdiff�s.
		!
	

cCs|j�dkS(NR(R(R((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytcommitcheck�scCs�dG|jGdGHt|j�j�}|jsD|jj|j�n|jj|j||�}|rm|GHn|j|jj|j�|j	�dS(NsChecking ins...(
RtopentreadRR.tlockR*tsetentrytheadR(RR+R>tmessages((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyR*�s	cCsX|jj|j�}t|jd�}|j|�|j�|j|j|j�dS(Ntw(	R.RRRDR4tcloseRGR!R(RR>tf((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyR�s


cCs|jj|j|�GHdS(N(R.tlogR(Rt
otherflags((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRM�scCsXd|_|j|_d\|_|_d|_d|_d|_d|_d|_dS(NiRi(ii(	RRRR%R&R"RRR'(R((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytadd�s					cCsed|_||_tj|j�d\|_|_||_d|_d|_	d|_d|_
dS(Nii����iR(RRR#R$RR%R&R"RRR'(RR"R((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRG�s		"				(t__name__t
__module__RR)R,RBRCR*RRMRORG(((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyR.s	I		
			
s/usr/lib/sendmail -tsoTo: %s
Subject: CVS changes: %s

...Message from rcvs...

Committed files:
        %s

Log message:
        %s
tRCVScBsqeZeZd�Zd�Zdd�Zdd�Zd�Zd�Z	d�Z
d�Zd	�Zd
d�Z
RS(cCstj|�dS(N(Rt__init__(R((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRS�scCs+x$|j|d�D]}|j�qWdS(Ni(twhichentriesR)(Rtfileste((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyR)�sRcCs�|j|�}|sdSd}x#|D]}|j�s&d}q&q&W|sTdGHdS|sitd�}ng}x0|D](}|j|�rv|j|j�qvqvW|j||�dS(Niiscorrect above errors firstsOne-liner: (RTRCt	raw_inputR,tappendRtmailinfo(RRUR+tlisttokRVt	committed((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyR,�s"


cCs�d}t|tj|�tj|�|f}ddGH|GHddGHtd|�}tjtj|��dkr�tjtd�}|j	|�|j
�}|r�d	t|�GHq�d
GHndGHdS(
Nssjoerd@cwi.nl, jack@cwi.nlt-iFsOK to mail to %s? tytyetyesRJsSendmail exit status %ss
Mail sent.s
No mail sent.(R^R_R`(tMAILFORMtstringtjoinRWtlowertstripR#tpopentSENDMAILR4RKtstr(RRUR+ttowhomtmailtextR[tpRA((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRYs		
cCs(x!|j|�D]}|j�qWdS(N(RTtreport(RRURV((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRl!scCs+x$|j|�D]}|j|�qWdS(N(RTRB(RRUR8RV((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRB%scCsC|std�ng}x$|j|d�D]}|j�q+WdS(Ns!'cvs add' needs at least one filei(tRuntimeErrorRTRO(RRURZRV((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRO)s
cCs|std�ntd�dS(Ns 'cvs rm' needs at least one files'cvs rm' not yet imlemented(Rm(RRU((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytrm0scCsZd}x&|D]\}}|d||}q
Wx$|j|�D]}|j|�q?WdS(NRR-(RTRM(RRUR8R9R;R<RV((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRM5s
icCs�|rkg}xE|D]Q}|jj|�r;|j|}n|j|�}||j|<|j|�qWn�|jj�}xX|jj�D]G}|jj|�r�q�n|j|�}||j|<|j|�q�W|rJxltjtj	�D]U}|jj|�r�|j
|�r�|j|�}||j|<|j|�q�q�Wn|j�|jr�x/|D]$}|jdkrd|j|_qdqdWn|S(N(
tentriesthas_keyt	FileClassRXtvaluesR.t	listfilesR#tlistdirtcurdirtignoredtsorttNone(RRUt
localfilestooRZRRV((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRT<s8




	
(RPRQRRqRSR)R,RYRlRBRORnRMRT(((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRR�s							trcvscBs�eZdZdZdZd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�ZdZ
eZe
Zd�Zd
ZeZeZd�ZdZeZeZd�Zd�ZeZd�ZdZRS(s	d:h:p:qvLsMusage: rcvs [-d directory] [-h host] [-p port] [-q] [-v] [subcommand arg ...]s<If no subcommand is given, the status of all files is listedcCs&tj|�d|_t�|_dS(sConstructor.N(RRSRxR.RRtcvs(R((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRSes
	cCs&|jr|jj�nd|_dS(N(R.t_closeRx(R((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRKks	cCs|j�tjtj�}x�|D]�}|tjks#|tjkrMq#n|dkr_q#ntjj|�swq#ntjj|�r�q#ndG|GdGHtj|�z3tjjd�r�|j	�j
�n
|j�Wdtjtj�dG|GdGHXq#WdS(NRs--- entering subdirectorys---s--- left subdirectory(RKR#RtRutpardirtpathtisdirtislinktchdirt	__class__truntrecurse(RtnamesR7((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyR�ps&



cCs
||_dS(N(R8(RR8((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytoptions�scCsEddl}|j|j�|_|jj|j�|jj�dS(Ni����(t	rcsclientt
openrcsclientR8R.R{tsetproxyt
getentries(RR�((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytready�scCs|jjg�dS(N(R{Rl(R((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytdefault�scCs|jj|�dS(N(R{Rl(RR8RU((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyt	do_report�scCs�t}x>|D]6\}}|dkr.d}n|dkr
d}q
q
W|jj|�|jj�|r|r|j�ndS(supdate [-l] [-R] [file] ...s-lis-RiN(t	DEF_LOCALR{R)t
putentriesR�(RR8RUtlocalR;R<((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyt	do_update�s	

s-lRcCsVd}x)|D]!\}}|dkr
|}q
q
W|jj||�|jj�dS(scommit [-m message] [file] ...Rs-mN(R{R,R�(RR8RUR+R;R<((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyt	do_commit�s
sm:cCs|jj||�dS(sdiff [difflags] [file] ...N(R{RB(RR8RU((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytdo_diff�sscbitwcefhnlr:sD:S:cCs0|sdGHdS|jj|�|jj�dS(sadd file ...s%'rcvs add' requires at least one fileN(R{ROR�(RR8RU((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytdo_add�s
cCs0|sdGHdS|jj|�|jj�dS(sremove file ...s('rcvs remove' requires at least one fileN(R{R R�(RR8RU((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyt	do_remove�s
cCs|jj||�dS(slog [rlog-options] [file] ...N(R{RM(RR8RU((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytdo_log�ssbhLNRtd:s:V:r:(RPRQtGlobalFlagstUsageMessagetPostUsageMessageRSRKR�R�R�R�R�R�tflags_updatetdo_uptflags_upR�tflags_committdo_comt	flags_comR�t
flags_difftdo_dift	flags_difR�R�tdo_rmR�t	flags_log(((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyRz]s6								
					cCs,ytj|�Wntjk
r'nXdS(N(R#tunlinkterror(R=((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyR �scCs)t�}z|j�Wd|j�XdS(N(RzR�RK(R
((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pytmain�s	t__main__(t__doc__tcvslibRRR/R#RbtsystcmdfwRR�RRgRaRRRzR R�RP(((s'/usr/lib64/python2.7/Demo/pdist/rcvs.pyt<module>s  �lp		PKb1�Z2"&��pdist/FSProxy.pynu�[���"""File System Proxy.

Provide an OS-neutral view on a file system, locally or remotely.
The functionality is geared towards implementing some sort of
rdist-like utility between a Mac and a UNIX system.

The module defines three classes:

FSProxyLocal  -- used for local access
FSProxyServer -- used on the server side of remote access
FSProxyClient -- used on the client side of remote access

The remote classes are instantiated with an IP address and an optional
verbosity flag.
"""

import server
import client
import md5
import os
import fnmatch
from stat import *
import time
import fnmatch

maxnamelen = 255

skipnames = (os.curdir, os.pardir)


class FSProxyLocal:

    def __init__(self):
        self._dirstack = []
        self._ignore = ['*.pyc'] + self._readignore()

    def _close(self):
        while self._dirstack:
            self.back()

    def _readignore(self):
        file = self._hide('ignore')
        try:
            f = open(file)
        except IOError:
            file = self._hide('synctree.ignorefiles')
            try:
                f = open(file)
            except IOError:
                return []
        ignore = []
        while 1:
            line = f.readline()
            if not line: break
            if line[-1] == '\n': line = line[:-1]
            ignore.append(line)
        f.close()
        return ignore

    def _hidden(self, name):
        return name[0] == '.'

    def _hide(self, name):
        return '.%s' % name

    def visible(self, name):
        if len(name) > maxnamelen: return 0
        if name[-1] == '~': return 0
        if name in skipnames: return 0
        if self._hidden(name): return 0
        head, tail = os.path.split(name)
        if head or not tail: return 0
        if os.path.islink(name): return 0
        if '\0' in open(name, 'rb').read(512): return 0
        for ign in self._ignore:
            if fnmatch.fnmatch(name, ign): return 0
        return 1

    def check(self, name):
        if not self.visible(name):
            raise os.error, "protected name %s" % repr(name)

    def checkfile(self, name):
        self.check(name)
        if not os.path.isfile(name):
            raise os.error, "not a plain file %s" % repr(name)

    def pwd(self):
        return os.getcwd()

    def cd(self, name):
        self.check(name)
        save = os.getcwd(), self._ignore
        os.chdir(name)
        self._dirstack.append(save)
        self._ignore = self._ignore + self._readignore()

    def back(self):
        if not self._dirstack:
            raise os.error, "empty directory stack"
        dir, ignore = self._dirstack[-1]
        os.chdir(dir)
        del self._dirstack[-1]
        self._ignore = ignore

    def _filter(self, files, pat = None):
        if pat:
            def keep(name, pat = pat):
                return fnmatch.fnmatch(name, pat)
            files = filter(keep, files)
        files = filter(self.visible, files)
        files.sort()
        return files

    def list(self, pat = None):
        files = os.listdir(os.curdir)
        return self._filter(files, pat)

    def listfiles(self, pat = None):
        files = os.listdir(os.curdir)
        files = filter(os.path.isfile, files)
        return self._filter(files, pat)

    def listsubdirs(self, pat = None):
        files = os.listdir(os.curdir)
        files = filter(os.path.isdir, files)
        return self._filter(files, pat)

    def exists(self, name):
        return self.visible(name) and os.path.exists(name)

    def isdir(self, name):
        return self.visible(name) and os.path.isdir(name)

    def islink(self, name):
        return self.visible(name) and os.path.islink(name)

    def isfile(self, name):
        return self.visible(name) and os.path.isfile(name)

    def sum(self, name):
        self.checkfile(name)
        BUFFERSIZE = 1024*8
        f = open(name)
        sum = md5.new()
        while 1:
            buffer = f.read(BUFFERSIZE)
            if not buffer:
                break
            sum.update(buffer)
        return sum.digest()

    def size(self, name):
        self.checkfile(name)
        return os.stat(name)[ST_SIZE]

    def mtime(self, name):
        self.checkfile(name)
        return time.localtime(os.stat(name)[ST_MTIME])

    def stat(self, name):
        self.checkfile(name)
        size = os.stat(name)[ST_SIZE]
        mtime = time.localtime(os.stat(name)[ST_MTIME])
        return size, mtime

    def info(self, name):
        sum = self.sum(name)
        size = os.stat(name)[ST_SIZE]
        mtime = time.localtime(os.stat(name)[ST_MTIME])
        return sum, size, mtime

    def _list(self, function, list):
        if list is None:
            list = self.listfiles()
        res = []
        for name in list:
            try:
                res.append((name, function(name)))
            except (os.error, IOError):
                res.append((name, None))
        return res

    def sumlist(self, list = None):
        return self._list(self.sum, list)

    def statlist(self, list = None):
        return self._list(self.stat, list)

    def mtimelist(self, list = None):
        return self._list(self.mtime, list)

    def sizelist(self, list = None):
        return self._list(self.size, list)

    def infolist(self, list = None):
        return self._list(self.info, list)

    def _dict(self, function, list):
        if list is None:
            list = self.listfiles()
        dict = {}
        for name in list:
            try:
                dict[name] = function(name)
            except (os.error, IOError):
                pass
        return dict

    def sumdict(self, list = None):
        return self.dict(self.sum, list)

    def sizedict(self, list = None):
        return self.dict(self.size, list)

    def mtimedict(self, list = None):
        return self.dict(self.mtime, list)

    def statdict(self, list = None):
        return self.dict(self.stat, list)

    def infodict(self, list = None):
        return self._dict(self.info, list)

    def read(self, name, offset = 0, length = -1):
        self.checkfile(name)
        f = open(name)
        f.seek(offset)
        if length == 0:
            data = ''
        elif length < 0:
            data = f.read()
        else:
            data = f.read(length)
        f.close()
        return data

    def create(self, name):
        self.check(name)
        if os.path.exists(name):
            self.checkfile(name)
            bname = name + '~'
            try:
                os.unlink(bname)
            except os.error:
                pass
            os.rename(name, bname)
        f = open(name, 'w')
        f.close()

    def write(self, name, data, offset = 0):
        self.checkfile(name)
        f = open(name, 'r+')
        f.seek(offset)
        f.write(data)
        f.close()

    def mkdir(self, name):
        self.check(name)
        os.mkdir(name, 0777)

    def rmdir(self, name):
        self.check(name)
        os.rmdir(name)


class FSProxyServer(FSProxyLocal, server.Server):

    def __init__(self, address, verbose = server.VERBOSE):
        FSProxyLocal.__init__(self)
        server.Server.__init__(self, address, verbose)

    def _close(self):
        server.Server._close(self)
        FSProxyLocal._close(self)

    def _serve(self):
        server.Server._serve(self)
        # Retreat into start directory
        while self._dirstack: self.back()


class FSProxyClient(client.Client):

    def __init__(self, address, verbose = client.VERBOSE):
        client.Client.__init__(self, address, verbose)


def test():
    import string
    import sys
    if sys.argv[1:]:
        port = string.atoi(sys.argv[1])
    else:
        port = 4127
    proxy = FSProxyServer(('', port))
    proxy._serverloop()


if __name__ == '__main__':
    test()
PKb1�Zg�ˆtix/grid.pycnu�[����
��^c	@sddlZddlmZej�Zejd�ejedd�Zej�dej	fd��YZ
e
eddd	d
�Zejdej�xMe
d�D]?Zx6e
d�D](Zejeed
eeef��q�Wq�Wejed
ddej�Zej�ej�dS(i����N(tpprintttesttnameta_labeltMyGridcBseZd�Zd�ZRS(cOs'|j|d<tjj|||�dS(Nt
editnotify(RttktGridt__init__(tselftargstkwargs((s%/usr/lib64/python2.7/Demo/tix/grid.pyRs
cCstS(N(tTrue(R	txty((s%/usr/lib64/python2.7/Demo/tix/grid.pyRs(t__name__t
__module__RR(((s%/usr/lib64/python2.7/Demo/tix/grid.pyRs	ta_gridt
selectunittcelltfillittexttClosetcommand(tTixRRtTktrttitletLabeltltpackRRtgtBOTHtxrangeR
RtsettstrtButtontdestroytctmainloop(((s%/usr/lib64/python2.7/Demo/tix/grid.pyt<module>s

	*
PKb1�Z�䠵&&tix/grid.pynu�[���###
import Tix as tk
from pprint import pprint

r= tk.Tk()
r.title("test")

l=tk.Label(r, name="a_label")
l.pack()

class MyGrid(tk.Grid):
    def __init__(self, *args, **kwargs):
        kwargs['editnotify']= self.editnotify
        tk.Grid.__init__(self, *args, **kwargs)
    def editnotify(self, x, y):
        return True

g = MyGrid(r, name="a_grid",
selectunit="cell")
g.pack(fill=tk.BOTH)
for x in xrange(5):
    for y in xrange(5):
        g.set(x,y,text=str((x,y)))

c = tk.Button(r, text="Close", command=r.destroy)
c.pack()

tk.mainloop()
PKb1�ZS����tix/tixwidgets.pynu�[���# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
#
# $Id$
#
# tixwidgets.py --
#
#       For Tix, see http://tix.sourceforge.net
#
#       This is a demo program of some of the Tix widgets available in Python.
#       If you have installed Python & Tix properly, you can execute this as
#
#               % python tixwidgets.py
#

import os, os.path, sys, Tix
from Tkconstants import *
import traceback, tkMessageBox

TCL_DONT_WAIT           = 1<<1
TCL_WINDOW_EVENTS       = 1<<2
TCL_FILE_EVENTS         = 1<<3
TCL_TIMER_EVENTS        = 1<<4
TCL_IDLE_EVENTS         = 1<<5
TCL_ALL_EVENTS          = 0

class Demo:
    def __init__(self, top):
        self.root = top
        self.exit = -1

        self.dir = None                         # script directory
        self.balloon = None                     # balloon widget
        self.useBalloons = Tix.StringVar()
        self.useBalloons.set('0')
        self.statusbar = None                   # status bar widget
        self.welmsg = None                      # Msg widget
        self.welfont = ''                       # font name
        self.welsize = ''                       # font size

        progname = sys.argv[0]
        dirname = os.path.dirname(progname)
        if dirname and dirname != os.curdir:
            self.dir = dirname
            index = -1
            for i in range(len(sys.path)):
                p = sys.path[i]
                if p in ("", os.curdir):
                    index = i
            if index >= 0:
                sys.path[index] = dirname
            else:
                sys.path.insert(0, dirname)
        else:
            self.dir = os.getcwd()
        sys.path.insert(0, self.dir+'/samples')

    def MkMainMenu(self):
        top = self.root
        w = Tix.Frame(top, bd=2, relief=RAISED)
        file = Tix.Menubutton(w, text='File', underline=0, takefocus=0)
        help = Tix.Menubutton(w, text='Help', underline=0, takefocus=0)
        file.pack(side=LEFT)
        help.pack(side=RIGHT)
        fm = Tix.Menu(file, tearoff=0)
        file['menu'] = fm
        hm = Tix.Menu(help, tearoff=0)
        help['menu'] = hm

        fm.add_command(label='Exit', underline=1,
                     command = lambda self=self: self.quitcmd () )
        hm.add_checkbutton(label='BalloonHelp', underline=0, command=ToggleHelp,
                           variable=self.useBalloons)
        # The trace variable option doesn't seem to work, instead I use 'command'
        #apply(w.tk.call, ('trace', 'variable', self.useBalloons, 'w',
        #                     ToggleHelp))

        return w

    def MkMainNotebook(self):
        top = self.root
        w = Tix.NoteBook(top, ipadx=5, ipady=5, options="""
        tagPadX 6
        tagPadY 4
        borderWidth 2
        """)
        # This may be required if there is no *Background option
        top['bg'] = w['bg']

        w.add('wel', label='Welcome', underline=0,
              createcmd=lambda w=w, name='wel': MkWelcome(w, name))
        w.add('cho', label='Choosers', underline=0,
              createcmd=lambda w=w, name='cho': MkChoosers(w, name))
        w.add('scr', label='Scrolled Widgets', underline=0,
              createcmd=lambda w=w, name='scr': MkScroll(w, name))
        w.add('mgr', label='Manager Widgets', underline=0,
              createcmd=lambda w=w, name='mgr': MkManager(w, name))
        w.add('dir', label='Directory List', underline=0,
              createcmd=lambda w=w, name='dir': MkDirList(w, name))
        w.add('exp', label='Run Sample Programs', underline=0,
              createcmd=lambda w=w, name='exp': MkSample(w, name))
        return w

    def MkMainStatus(self):
        global demo
        top = self.root

        w = Tix.Frame(top, relief=Tix.RAISED, bd=1)
        demo.statusbar = Tix.Label(w, relief=Tix.SUNKEN, bd=1)
        demo.statusbar.form(padx=3, pady=3, left=0, right='%70')
        return w

    def build(self):
        root = self.root
        z = root.winfo_toplevel()
        z.wm_title('Tix Widget Demonstration')
        if z.winfo_screenwidth() <= 800:
            z.geometry('790x590+10+10')
        else:
            z.geometry('890x640+10+10')
        demo.balloon = Tix.Balloon(root)
        frame1 = self.MkMainMenu()
        frame2 = self.MkMainNotebook()
        frame3 = self.MkMainStatus()
        frame1.pack(side=TOP, fill=X)
        frame3.pack(side=BOTTOM, fill=X)
        frame2.pack(side=TOP, expand=1, fill=BOTH, padx=4, pady=4)
        demo.balloon['statusbar'] = demo.statusbar
        z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())

        # To show Tcl errors - uncomment this to see the listbox bug.
        # Tkinter defines a Tcl tkerror procedure that in effect
        # silences all background Tcl error reporting.
        # root.tk.eval('if {[info commands tkerror] != ""} {rename tkerror pytkerror}')
    def quitcmd (self):
        """Quit our mainloop. It is up to you to call root.destroy() after."""
        self.exit = 0

    def loop(self):
        """This is an explict replacement for _tkinter mainloop()
        It lets you catch keyboard interrupts easier, and avoids
        the 20 msec. dead sleep() which burns a constant CPU."""
        while self.exit < 0:
            # There are 2 whiles here. The outer one lets you continue
            # after a ^C interrupt.
            try:
                # This is the replacement for _tkinter mainloop()
                # It blocks waiting for the next Tcl event using select.
                while self.exit < 0:
                    self.root.tk.dooneevent(TCL_ALL_EVENTS)
            except SystemExit:
                # Tkinter uses SystemExit to exit
                #print 'Exit'
                self.exit = 1
                return
            except KeyboardInterrupt:
                if tkMessageBox.askquestion ('Interrupt', 'Really Quit?') == 'yes':
                    # self.tk.eval('exit')
                    self.exit = 1
                    return
                continue
            except:
                # Otherwise it's some other error - be nice and say why
                t, v, tb = sys.exc_info()
                text = ""
                for line in traceback.format_exception(t,v,tb):
                    text += line + '\n'
                try: tkMessageBox.showerror ('Error', text)
                except: pass
                self.exit = 1
                raise SystemExit, 1

    def destroy (self):
        self.root.destroy()

def RunMain(root):
    global demo

    demo = Demo(root)

    demo.build()
    demo.loop()
    demo.destroy()

# Tabs
def MkWelcome(nb, name):
    w = nb.page(name)
    bar = MkWelcomeBar(w)
    text = MkWelcomeText(w)
    bar.pack(side=TOP, fill=X, padx=2, pady=2)
    text.pack(side=TOP, fill=BOTH, expand=1)

def MkWelcomeBar(top):
    global demo

    w = Tix.Frame(top, bd=2, relief=Tix.GROOVE)
    b1 = Tix.ComboBox(w, command=lambda w=top: MainTextFont(w))
    b2 = Tix.ComboBox(w, command=lambda w=top: MainTextFont(w))
    b1.entry['width'] = 15
    b1.slistbox.listbox['height'] = 3
    b2.entry['width'] = 4
    b2.slistbox.listbox['height'] = 3

    demo.welfont = b1
    demo.welsize = b2

    b1.insert(Tix.END, 'Courier')
    b1.insert(Tix.END, 'Helvetica')
    b1.insert(Tix.END, 'Lucida')
    b1.insert(Tix.END, 'Times Roman')

    b2.insert(Tix.END, '8')
    b2.insert(Tix.END, '10')
    b2.insert(Tix.END, '12')
    b2.insert(Tix.END, '14')
    b2.insert(Tix.END, '18')

    b1.pick(1)
    b2.pick(3)

    b1.pack(side=Tix.LEFT, padx=4, pady=4)
    b2.pack(side=Tix.LEFT, padx=4, pady=4)

    demo.balloon.bind_widget(b1, msg='Choose\na font',
                             statusmsg='Choose a font for this page')
    demo.balloon.bind_widget(b2, msg='Point size',
                             statusmsg='Choose the font size for this page')
    return w

def MkWelcomeText(top):
    global demo

    w = Tix.ScrolledWindow(top, scrollbar='auto')
    win = w.window
    text = 'Welcome to TIX in Python'
    title = Tix.Label(win,
                      bd=0, width=30, anchor=Tix.N, text=text)
    msg = Tix.Message(win,
                      bd=0, width=400, anchor=Tix.N,
                      text='Tix is a set of mega-widgets based on TK. This program \
demonstrates the widgets in the Tix widget set. You can choose the pages \
in this window to look at the corresponding widgets. \n\n\
To quit this program, choose the "File | Exit" command.\n\n\
For more information, see http://tix.sourceforge.net.')
    title.pack(expand=1, fill=Tix.BOTH, padx=10, pady=10)
    msg.pack(expand=1, fill=Tix.BOTH, padx=10, pady=10)
    demo.welmsg = msg
    return w

def MainTextFont(w):
    global demo

    if not demo.welmsg:
        return
    font = demo.welfont['value']
    point = demo.welsize['value']
    if font == 'Times Roman':
        font = 'times'
    fontstr = '%s %s' % (font, point)
    demo.welmsg['font'] = fontstr

def ToggleHelp():
    if demo.useBalloons.get() == '1':
        demo.balloon['state'] = 'both'
    else:
        demo.balloon['state'] = 'none'

def MkChoosers(nb, name):
    w = nb.page(name)
    options = "label.padX 4"

    til = Tix.LabelFrame(w, label='Chooser Widgets', options=options)
    cbx = Tix.LabelFrame(w, label='tixComboBox', options=options)
    ctl = Tix.LabelFrame(w, label='tixControl', options=options)
    sel = Tix.LabelFrame(w, label='tixSelect', options=options)
    opt = Tix.LabelFrame(w, label='tixOptionMenu', options=options)
    fil = Tix.LabelFrame(w, label='tixFileEntry', options=options)
    fbx = Tix.LabelFrame(w, label='tixFileSelectBox', options=options)
    tbr = Tix.LabelFrame(w, label='Tool Bar', options=options)

    MkTitle(til.frame)
    MkCombo(cbx.frame)
    MkControl(ctl.frame)
    MkSelect(sel.frame)
    MkOptMenu(opt.frame)
    MkFileEnt(fil.frame)
    MkFileBox(fbx.frame)
    MkToolBar(tbr.frame)

    # First column: comBox and selector
    cbx.form(top=0, left=0, right='%33')
    sel.form(left=0, right='&'+str(cbx), top=cbx)
    opt.form(left=0, right='&'+str(cbx), top=sel, bottom=-1)

    # Second column: title .. etc
    til.form(left=cbx, top=0,right='%66')
    ctl.form(left=cbx, right='&'+str(til), top=til)
    fil.form(left=cbx, right='&'+str(til), top=ctl)
    tbr.form(left=cbx, right='&'+str(til), top=fil, bottom=-1)

    #
    # Third column: file selection
    fbx.form(right=-1, top=0, left='%66')

def MkCombo(w):
    options="label.width %d label.anchor %s entry.width %d" % (10, Tix.E, 14)

    static = Tix.ComboBox(w, label='Static', editable=0, options=options)
    editable = Tix.ComboBox(w, label='Editable', editable=1, options=options)
    history = Tix.ComboBox(w, label='History', editable=1, history=1,
                           anchor=Tix.E, options=options)
    static.insert(Tix.END, 'January')
    static.insert(Tix.END, 'February')
    static.insert(Tix.END, 'March')
    static.insert(Tix.END, 'April')
    static.insert(Tix.END, 'May')
    static.insert(Tix.END, 'June')
    static.insert(Tix.END, 'July')
    static.insert(Tix.END, 'August')
    static.insert(Tix.END, 'September')
    static.insert(Tix.END, 'October')
    static.insert(Tix.END, 'November')
    static.insert(Tix.END, 'December')

    editable.insert(Tix.END, 'Angola')
    editable.insert(Tix.END, 'Bangladesh')
    editable.insert(Tix.END, 'China')
    editable.insert(Tix.END, 'Denmark')
    editable.insert(Tix.END, 'Ecuador')

    history.insert(Tix.END, '/usr/bin/ksh')
    history.insert(Tix.END, '/usr/local/lib/python')
    history.insert(Tix.END, '/var/adm')

    static.pack(side=Tix.TOP, padx=5, pady=3)
    editable.pack(side=Tix.TOP, padx=5, pady=3)
    history.pack(side=Tix.TOP, padx=5, pady=3)

states = ['Bengal', 'Delhi', 'Karnataka', 'Tamil Nadu']

def spin_cmd(w, inc):
    idx = states.index(demo_spintxt.get()) + inc
    if idx < 0:
        idx = len(states) - 1
    elif idx >= len(states):
        idx = 0
# following doesn't work.
#    return states[idx]
    demo_spintxt.set(states[idx])       # this works

def spin_validate(w):
    global states, demo_spintxt

    try:
        i = states.index(demo_spintxt.get())
    except ValueError:
        return states[0]
    return states[i]
    # why this procedure works as opposed to the previous one beats me.

def MkControl(w):
    global demo_spintxt

    options="label.width %d label.anchor %s entry.width %d" % (10, Tix.E, 13)

    demo_spintxt = Tix.StringVar()
    demo_spintxt.set(states[0])
    simple = Tix.Control(w, label='Numbers', options=options)
    spintxt = Tix.Control(w, label='States', variable=demo_spintxt,
                          options=options)
    spintxt['incrcmd'] = lambda w=spintxt: spin_cmd(w, 1)
    spintxt['decrcmd'] = lambda w=spintxt: spin_cmd(w, -1)
    spintxt['validatecmd'] = lambda w=spintxt: spin_validate(w)

    simple.pack(side=Tix.TOP, padx=5, pady=3)
    spintxt.pack(side=Tix.TOP, padx=5, pady=3)

def MkSelect(w):
    options = "label.anchor %s" % Tix.CENTER

    sel1 = Tix.Select(w, label='Mere Mortals', allowzero=1, radio=1,
                      orientation=Tix.VERTICAL,
                      labelside=Tix.TOP,
                      options=options)
    sel2 = Tix.Select(w, label='Geeks', allowzero=1, radio=0,
                      orientation=Tix.VERTICAL,
                      labelside= Tix.TOP,
                      options=options)

    sel1.add('eat', text='Eat')
    sel1.add('work', text='Work')
    sel1.add('play', text='Play')
    sel1.add('party', text='Party')
    sel1.add('sleep', text='Sleep')

    sel2.add('eat', text='Eat')
    sel2.add('prog1', text='Program')
    sel2.add('prog2', text='Program')
    sel2.add('prog3', text='Program')
    sel2.add('sleep', text='Sleep')

    sel1.pack(side=Tix.LEFT, padx=5, pady=3, fill=Tix.X)
    sel2.pack(side=Tix.LEFT, padx=5, pady=3, fill=Tix.X)

def MkOptMenu(w):
    options='menubutton.width 15 label.anchor %s' % Tix.E

    m = Tix.OptionMenu(w, label='File Format : ', options=options)
    m.add_command('text', label='Plain Text')
    m.add_command('post', label='PostScript')
    m.add_command('format', label='Formatted Text')
    m.add_command('html', label='HTML')
    m.add_command('sep')
    m.add_command('tex', label='LaTeX')
    m.add_command('rtf', label='Rich Text Format')

    m.pack(fill=Tix.X, padx=5, pady=3)

def MkFileEnt(w):
    msg = Tix.Message(w,
                      relief=Tix.FLAT, width=240, anchor=Tix.N,
                      text='Press the "open file" icon button and a TixFileSelectDialog will popup.')
    ent = Tix.FileEntry(w, label='Select a file : ')
    msg.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=3, pady=3)
    ent.pack(side=Tix.TOP, fill=Tix.X, padx=3, pady=3)

def MkFileBox(w):
    """The FileSelectBox is a Motif-style box with various enhancements.
    For example, you can adjust the size of the two listboxes
    and your past selections are recorded.
    """
    msg = Tix.Message(w,
                      relief=Tix.FLAT, width=240, anchor=Tix.N,
                      text='The Tix FileSelectBox is a Motif-style box with various enhancements. For example, you can adjust the size of the two listboxes and your past selections are recorded.')
    box = Tix.FileSelectBox(w)
    msg.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=3, pady=3)
    box.pack(side=Tix.TOP, fill=Tix.X, padx=3, pady=3)

def MkToolBar(w):
    """The Select widget is also good for arranging buttons in a tool bar.
    """
    global demo

    options='frame.borderWidth 1'

    msg = Tix.Message(w,
                      relief=Tix.FLAT, width=240, anchor=Tix.N,
                      text='The Select widget is also good for arranging buttons in a tool bar.')
    bar = Tix.Frame(w, bd=2, relief=Tix.RAISED)
    font = Tix.Select(w, allowzero=1, radio=0, label='', options=options)
    para = Tix.Select(w, allowzero=0, radio=1, label='', options=options)

    font.add('bold', bitmap='@' + demo.dir + '/bitmaps/bold.xbm')
    font.add('italic', bitmap='@' + demo.dir + '/bitmaps/italic.xbm')
    font.add('underline', bitmap='@' + demo.dir + '/bitmaps/underline.xbm')
    font.add('capital', bitmap='@' + demo.dir + '/bitmaps/capital.xbm')

    para.add('left', bitmap='@' + demo.dir + '/bitmaps/leftj.xbm')
    para.add('right', bitmap='@' + demo.dir + '/bitmaps/rightj.xbm')
    para.add('center', bitmap='@' + demo.dir + '/bitmaps/centerj.xbm')
    para.add('justify', bitmap='@' + demo.dir + '/bitmaps/justify.xbm')

    msg.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=3, pady=3)
    bar.pack(side=Tix.TOP, fill=Tix.X, padx=3, pady=3)
    font.pack({'in':bar}, side=Tix.LEFT, padx=3, pady=3)
    para.pack({'in':bar}, side=Tix.LEFT, padx=3, pady=3)

def MkTitle(w):
    msg = Tix.Message(w,
                      relief=Tix.FLAT, width=240, anchor=Tix.N,
                      text='There are many types of "chooser" widgets that allow the user to input different types of information')
    msg.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=3, pady=3)

def MkScroll(nb, name):
    w = nb.page(name)
    options='label.padX 4'

    sls = Tix.LabelFrame(w, label='Tix.ScrolledListBox', options=options)
    swn = Tix.LabelFrame(w, label='Tix.ScrolledWindow', options=options)
    stx = Tix.LabelFrame(w, label='Tix.ScrolledText', options=options)

    MkSList(sls.frame)
    MkSWindow(swn.frame)
    MkSText(stx.frame)

    sls.form(top=0, left=0, right='%33', bottom=-1)
    swn.form(top=0, left=sls, right='%66', bottom=-1)
    stx.form(top=0, left=swn, right=-1, bottom=-1)


def MkSList(w):
    """This TixScrolledListBox is configured so that it uses scrollbars
    only when it is necessary. Use the handles to resize the listbox and
    watch the scrollbars automatically appear and disappear.  """
    top = Tix.Frame(w, width=300, height=330)
    bot = Tix.Frame(w)
    msg = Tix.Message(top,
                      relief=Tix.FLAT, width=200, anchor=Tix.N,
                      text='This TixScrolledListBox is configured so that it uses scrollbars only when it is necessary. Use the handles to resize the listbox and watch the scrollbars automatically appear and disappear.')

    list = Tix.ScrolledListBox(top, scrollbar='auto')
    list.place(x=50, y=150, width=120, height=80)
    list.listbox.insert(Tix.END, 'Alabama')
    list.listbox.insert(Tix.END, 'California')
    list.listbox.insert(Tix.END, 'Montana')
    list.listbox.insert(Tix.END, 'New Jersey')
    list.listbox.insert(Tix.END, 'New York')
    list.listbox.insert(Tix.END, 'Pennsylvania')
    list.listbox.insert(Tix.END, 'Washington')

    rh = Tix.ResizeHandle(top, bg='black',
                          relief=Tix.RAISED,
                          handlesize=8, gridded=1, minwidth=50, minheight=30)
    btn = Tix.Button(bot, text='Reset', command=lambda w=rh, x=list: SList_reset(w,x))
    top.propagate(0)
    msg.pack(fill=Tix.X)
    btn.pack(anchor=Tix.CENTER)
    top.pack(expand=1, fill=Tix.BOTH)
    bot.pack(fill=Tix.BOTH)
    list.bind('<Map>', func=lambda arg=0, rh=rh, list=list:
              list.tk.call('tixDoWhenIdle', str(rh), 'attachwidget', str(list)))

def SList_reset(rh, list):
    list.place(x=50, y=150, width=120, height=80)
    list.update()
    rh.attach_widget(list)

def MkSWindow(w):
    """The ScrolledWindow widget allows you to scroll any kind of Tk
    widget. It is more versatile than a scrolled canvas widget.
    """
    global demo

    text = 'The Tix ScrolledWindow widget allows you to scroll any kind of Tk widget. It is more versatile than a scrolled canvas widget.'

    file = os.path.join(demo.dir, 'bitmaps', 'tix.gif')
    if not os.path.isfile(file):
        text += ' (Image missing)'

    top = Tix.Frame(w, width=330, height=330)
    bot = Tix.Frame(w)
    msg = Tix.Message(top,
                      relief=Tix.FLAT, width=200, anchor=Tix.N,
                      text=text)

    win = Tix.ScrolledWindow(top, scrollbar='auto')

    image1 = win.window.image_create('photo', file=file)
    lbl = Tix.Label(win.window, image=image1)
    lbl.pack(expand=1, fill=Tix.BOTH)

    win.place(x=30, y=150, width=190, height=120)

    rh = Tix.ResizeHandle(top, bg='black',
                          relief=Tix.RAISED,
                          handlesize=8, gridded=1, minwidth=50, minheight=30)
    btn = Tix.Button(bot, text='Reset', command=lambda w=rh, x=win: SWindow_reset(w,x))
    top.propagate(0)
    msg.pack(fill=Tix.X)
    btn.pack(anchor=Tix.CENTER)
    top.pack(expand=1, fill=Tix.BOTH)
    bot.pack(fill=Tix.BOTH)

    win.bind('<Map>', func=lambda arg=0, rh=rh, win=win:
             win.tk.call('tixDoWhenIdle', str(rh), 'attachwidget', str(win)))

def SWindow_reset(rh, win):
    win.place(x=30, y=150, width=190, height=120)
    win.update()
    rh.attach_widget(win)

def MkSText(w):
    """The TixScrolledWindow widget allows you to scroll any kind of Tk
    widget. It is more versatile than a scrolled canvas widget."""
    top = Tix.Frame(w, width=330, height=330)
    bot = Tix.Frame(w)
    msg = Tix.Message(top,
                      relief=Tix.FLAT, width=200, anchor=Tix.N,
                      text='The Tix ScrolledWindow widget allows you to scroll any kind of Tk widget. It is more versatile than a scrolled canvas widget.')

    win = Tix.ScrolledText(top, scrollbar='auto')
    win.text['wrap'] = 'none'
    win.text.insert(Tix.END, '''When -scrollbar is set to "auto", the
scrollbars are shown only when needed.
Additional modifiers can be used to force a
scrollbar to be shown or hidden. For example,
"auto -y" means the horizontal scrollbar
should be shown when needed but the vertical
scrollbar should always be hidden;
"auto +x" means the vertical scrollbar
should be shown when needed but the horizontal
scrollbar should always be shown, and so on.'''
)
    win.place(x=30, y=150, width=190, height=100)

    rh = Tix.ResizeHandle(top, bg='black',
                          relief=Tix.RAISED,
                          handlesize=8, gridded=1, minwidth=50, minheight=30)
    btn = Tix.Button(bot, text='Reset', command=lambda w=rh, x=win: SText_reset(w,x))
    top.propagate(0)
    msg.pack(fill=Tix.X)
    btn.pack(anchor=Tix.CENTER)
    top.pack(expand=1, fill=Tix.BOTH)
    bot.pack(fill=Tix.BOTH)
    win.bind('<Map>', func=lambda arg=0, rh=rh, win=win:
             win.tk.call('tixDoWhenIdle', str(rh), 'attachwidget', str(win)))

def SText_reset(rh, win):
    win.place(x=30, y=150, width=190, height=120)
    win.update()
    rh.attach_widget(win)

def MkManager(nb, name):
    w = nb.page(name)
    options='label.padX 4'

    pane = Tix.LabelFrame(w, label='Tix.PanedWindow', options=options)
    note = Tix.LabelFrame(w, label='Tix.NoteBook', options=options)

    MkPanedWindow(pane.frame)
    MkNoteBook(note.frame)

    pane.form(top=0, left=0, right=note, bottom=-1)
    note.form(top=0, right=-1, bottom=-1)

def MkPanedWindow(w):
    """The PanedWindow widget allows the user to interactively manipulate
    the sizes of several panes. The panes can be arranged either vertically
    or horizontally.
    """
    msg = Tix.Message(w,
                      relief=Tix.FLAT, width=240, anchor=Tix.N,
                      text='The PanedWindow widget allows the user to interactively manipulate the sizes of several panes. The panes can be arranged either vertically or horizontally.')
    group = Tix.LabelEntry(w, label='Newsgroup:', options='entry.width 25')
    group.entry.insert(0,'comp.lang.python')
    pane = Tix.PanedWindow(w, orientation='vertical')

    p1 = pane.add('list', min=70, size=100)
    p2 = pane.add('text', min=70)
    list = Tix.ScrolledListBox(p1)
    text = Tix.ScrolledText(p2)

    list.listbox.insert(Tix.END, "  12324 Re: Tkinter is good for your health")
    list.listbox.insert(Tix.END, "+ 12325 Re: Tkinter is good for your health")
    list.listbox.insert(Tix.END, "+ 12326 Re: Tix is even better for your health (Was: Tkinter is good...)")
    list.listbox.insert(Tix.END, "  12327 Re: Tix is even better for your health (Was: Tkinter is good...)")
    list.listbox.insert(Tix.END, "+ 12328 Re: Tix is even better for your health (Was: Tkinter is good...)")
    list.listbox.insert(Tix.END, "  12329 Re: Tix is even better for your health (Was: Tkinter is good...)")
    list.listbox.insert(Tix.END, "+ 12330 Re: Tix is even better for your health (Was: Tkinter is good...)")

    text.text['bg'] = list.listbox['bg']
    text.text['wrap'] = 'none'
    text.text.insert(Tix.END, """
Mon, 19 Jun 1995 11:39:52        comp.lang.python              Thread   34 of  220
Lines 353       A new way to put text and bitmaps together iNo responses
ioi@blue.seas.upenn.edu                Ioi K. Lam at University of Pennsylvania

Hi,

I have implemented a new image type called "compound". It allows you
to glue together a bunch of bitmaps, images and text strings together
to form a bigger image. Then you can use this image with widgets that
support the -image option. For example, you can display a text string
together with a bitmap, at the same time, inside a TK button widget.
""")
    list.pack(expand=1, fill=Tix.BOTH, padx=4, pady=6)
    text.pack(expand=1, fill=Tix.BOTH, padx=4, pady=6)

    msg.pack(side=Tix.TOP, padx=3, pady=3, fill=Tix.BOTH)
    group.pack(side=Tix.TOP, padx=3, pady=3, fill=Tix.BOTH)
    pane.pack(side=Tix.TOP, padx=3, pady=3, fill=Tix.BOTH, expand=1)

def MkNoteBook(w):
    msg = Tix.Message(w,
                      relief=Tix.FLAT, width=240, anchor=Tix.N,
                      text='The NoteBook widget allows you to layout a complex interface into individual pages.')
    # prefix = Tix.OptionName(w)
    # if not prefix: prefix = ''
    # w.option_add('*' + prefix + '*TixNoteBook*tagPadX', 8)
    options = "entry.width %d label.width %d label.anchor %s" % (10, 18, Tix.E)

    nb = Tix.NoteBook(w, ipadx=6, ipady=6, options=options)
    nb.add('hard_disk', label="Hard Disk", underline=0)
    nb.add('network', label="Network", underline=0)

    # Frame for the buttons that are present on all pages
    common = Tix.Frame(nb.hard_disk)
    common.pack(side=Tix.RIGHT, padx=2, pady=2, fill=Tix.Y)
    CreateCommonButtons(common)

    # Widgets belonging only to this page
    a = Tix.Control(nb.hard_disk, value=12, label='Access Time: ')
    w = Tix.Control(nb.hard_disk, value=400, label='Write Throughput: ')
    r = Tix.Control(nb.hard_disk, value=400, label='Read Throughput: ')
    c = Tix.Control(nb.hard_disk, value=1021, label='Capacity: ')
    a.pack(side=Tix.TOP, padx=20, pady=2)
    w.pack(side=Tix.TOP, padx=20, pady=2)
    r.pack(side=Tix.TOP, padx=20, pady=2)
    c.pack(side=Tix.TOP, padx=20, pady=2)

    common = Tix.Frame(nb.network)
    common.pack(side=Tix.RIGHT, padx=2, pady=2, fill=Tix.Y)
    CreateCommonButtons(common)

    a = Tix.Control(nb.network, value=12, label='Access Time: ')
    w = Tix.Control(nb.network, value=400, label='Write Throughput: ')
    r = Tix.Control(nb.network, value=400, label='Read Throughput: ')
    c = Tix.Control(nb.network, value=1021, label='Capacity: ')
    u = Tix.Control(nb.network, value=10, label='Users: ')
    a.pack(side=Tix.TOP, padx=20, pady=2)
    w.pack(side=Tix.TOP, padx=20, pady=2)
    r.pack(side=Tix.TOP, padx=20, pady=2)
    c.pack(side=Tix.TOP, padx=20, pady=2)
    u.pack(side=Tix.TOP, padx=20, pady=2)

    msg.pack(side=Tix.TOP, padx=3, pady=3, fill=Tix.BOTH)
    nb.pack(side=Tix.TOP, padx=5, pady=5, fill=Tix.BOTH, expand=1)

def CreateCommonButtons(f):
    ok = Tix.Button(f, text='OK', width = 6)
    cancel = Tix.Button(f, text='Cancel', width = 6)
    ok.pack(side=Tix.TOP, padx=2, pady=2)
    cancel.pack(side=Tix.TOP, padx=2, pady=2)

def MkDirList(nb, name):
    w = nb.page(name)
    options = "label.padX 4"

    dir = Tix.LabelFrame(w, label='Tix.DirList', options=options)
    fsbox = Tix.LabelFrame(w, label='Tix.ExFileSelectBox', options=options)
    MkDirListWidget(dir.frame)
    MkExFileWidget(fsbox.frame)
    dir.form(top=0, left=0, right='%40', bottom=-1)
    fsbox.form(top=0, left='%40', right=-1, bottom=-1)

def MkDirListWidget(w):
    """The TixDirList widget gives a graphical representation of the file
    system directory and makes it easy for the user to choose and access
    directories.
    """
    msg = Tix.Message(w,
                      relief=Tix.FLAT, width=240, anchor=Tix.N,
                      text='The Tix DirList widget gives a graphical representation of the file system directory and makes it easy for the user to choose and access directories.')
    dirlist = Tix.DirList(w, options='hlist.padY 1 hlist.width 25 hlist.height 16')
    msg.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=3, pady=3)
    dirlist.pack(side=Tix.TOP, padx=3, pady=3)

def MkExFileWidget(w):
    """The TixExFileSelectBox widget is more user friendly than the Motif
    style FileSelectBox.  """
    msg = Tix.Message(w,
                      relief=Tix.FLAT, width=240, anchor=Tix.N,
                      text='The Tix ExFileSelectBox widget is more user friendly than the Motif style FileSelectBox.')
    # There's a bug in the ComboBoxes - the scrolledlistbox is destroyed
    box = Tix.ExFileSelectBox(w, bd=2, relief=Tix.RAISED)
    msg.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=3, pady=3)
    box.pack(side=Tix.TOP, padx=3, pady=3)

###
### List of all the demos we want to show off
comments = {'widget' : 'Widget Demos', 'image' : 'Image Demos'}
samples = {'Balloon'            : 'Balloon',
           'Button Box'         : 'BtnBox',
           'Combo Box'          : 'ComboBox',
           'Compound Image'     : 'CmpImg',
           'Directory List'     : 'DirList',
           'Directory Tree'     : 'DirTree',
           'Control'            : 'Control',
           'Notebook'           : 'NoteBook',
           'Option Menu'        : 'OptMenu',
           'Paned Window'       : 'PanedWin',
           'Popup Menu'         : 'PopMenu',
           'ScrolledHList (1)'  : 'SHList1',
           'ScrolledHList (2)'  : 'SHList2',
           'Tree (dynamic)'     : 'Tree'
}

# There are still a lot of demos to be translated:
##      set root {
##          {d "File Selectors"         file    }
##          {d "Hierachical ListBox"    hlist   }
##          {d "Tabular ListBox"        tlist   {c tixTList}}
##          {d "Grid Widget"            grid    {c tixGrid}}
##          {d "Manager Widgets"        manager }
##          {d "Scrolled Widgets"       scroll  }
##          {d "Miscellaneous Widgets"  misc    }
##          {d "Image Types"            image   }
##      }
##
##      set image {
##          {d "Compound Image"         cmpimg  }
##          {d "XPM Image"              xpm     {i pixmap}}
##      }
##
##      set cmpimg {
##done      {f "In Buttons"             CmpImg.tcl      }
##          {f "In NoteBook"            CmpImg2.tcl     }
##          {f "Notebook Color Tabs"    CmpImg4.tcl     }
##          {f "Icons"                  CmpImg3.tcl     }
##      }
##
##      set xpm {
##          {f "In Button"              Xpm.tcl         {i pixmap}}
##          {f "In Menu"                Xpm1.tcl        {i pixmap}}
##      }
##
##      set file {
##added     {f DirList                          DirList.tcl     }
##added     {f DirTree                          DirTree.tcl     }
##          {f DirSelectDialog                  DirDlg.tcl      }
##          {f ExFileSelectDialog               EFileDlg.tcl    }
##          {f FileSelectDialog                 FileDlg.tcl     }
##          {f FileEntry                        FileEnt.tcl     }
##      }
##
##      set hlist {
##          {f HList                    HList1.tcl      }
##          {f CheckList                ChkList.tcl     {c tixCheckList}}
##done      {f "ScrolledHList (1)"      SHList.tcl      }
##done      {f "ScrolledHList (2)"      SHList2.tcl     }
##done      {f Tree                     Tree.tcl        }
##done      {f "Tree (Dynamic)"         DynTree.tcl     {v win}}
##      }
##
##      set tlist {
##          {f "ScrolledTList (1)"      STList1.tcl     {c tixTList}}
##          {f "ScrolledTList (2)"      STList2.tcl     {c tixTList}}
##      }
##      global tcl_platform
##      #  This demo hangs windows
##      if {$tcl_platform(platform) != "windows"} {
##na    lappend tlist     {f "TList File Viewer"        STList3.tcl     {c tixTList}}
##      }
##
##      set grid {
##na        {f "Simple Grid"            SGrid0.tcl      {c tixGrid}}
##na        {f "ScrolledGrid"           SGrid1.tcl      {c tixGrid}}
##na        {f "Editable Grid"          EditGrid.tcl    {c tixGrid}}
##      }
##
##      set scroll {
##          {f ScrolledListBox          SListBox.tcl    }
##          {f ScrolledText             SText.tcl       }
##          {f ScrolledWindow           SWindow.tcl     }
##na        {f "Canvas Object View"     CObjView.tcl    {c tixCObjView}}
##      }
##
##      set manager {
##          {f ListNoteBook             ListNBK.tcl     }
##done      {f NoteBook                 NoteBook.tcl    }
##done      {f PanedWindow              PanedWin.tcl    }
##      }
##
##      set misc {
##done      {f Balloon                  Balloon.tcl     }
##done      {f ButtonBox                BtnBox.tcl      }
##done      {f ComboBox                 ComboBox.tcl    }
##done      {f Control                  Control.tcl     }
##          {f LabelEntry               LabEntry.tcl    }
##          {f LabelFrame               LabFrame.tcl    }
##          {f Meter                    Meter.tcl       {c tixMeter}}
##done      {f OptionMenu               OptMenu.tcl     }
##done      {f PopupMenu                PopMenu.tcl     }
##          {f Select                   Select.tcl      }
##          {f StdButtonBox             StdBBox.tcl     }
##      }
##

stypes = {}
stypes['widget'] = ['Balloon', 'Button Box', 'Combo Box', 'Control',
                    'Directory List', 'Directory Tree',
                    'Notebook', 'Option Menu', 'Popup Menu', 'Paned Window',
                    'ScrolledHList (1)', 'ScrolledHList (2)', 'Tree (dynamic)']
stypes['image'] = ['Compound Image']

def MkSample(nb, name):
    w = nb.page(name)
    options = "label.padX 4"

    pane = Tix.PanedWindow(w, orientation='horizontal')
    pane.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH)
    f1 = pane.add('list', expand='1')
    f2 = pane.add('text', expand='5')
    f1['relief'] = 'flat'
    f2['relief'] = 'flat'

    lab = Tix.LabelFrame(f1, label='Select a sample program:')
    lab.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=5, pady=5)
    lab1 = Tix.LabelFrame(f2, label='Source:')
    lab1.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=5, pady=5)

    slb = Tix.Tree(lab.frame, options='hlist.width 20')
    slb.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=5)

    stext = Tix.ScrolledText(lab1.frame, name='stext')
    font = root.tk.eval('tix option get fixed_font')
    stext.text.config(font=font)

    frame = Tix.Frame(lab1.frame, name='frame')

    run = Tix.Button(frame, text='Run ...', name='run')
    view = Tix.Button(frame, text='View Source ...', name='view')
    run.pack(side=Tix.LEFT, expand=0, fill=Tix.NONE)
    view.pack(side=Tix.LEFT, expand=0, fill=Tix.NONE)

    stext.text['bg'] = slb.hlist['bg']
    stext.text['state'] = 'disabled'
    stext.text['wrap'] = 'none'
    stext.text['width'] = 80

    frame.pack(side=Tix.BOTTOM, expand=0, fill=Tix.X, padx=7)
    stext.pack(side=Tix.TOP, expand=0, fill=Tix.BOTH, padx=7)

    slb.hlist['separator'] = '.'
    slb.hlist['width'] = 25
    slb.hlist['drawbranch'] = 0
    slb.hlist['indent'] = 10
    slb.hlist['wideselect'] = 1
    slb.hlist['command'] = lambda args=0, w=w,slb=slb,stext=stext,run=run,view=view: Sample_Action(w, slb, stext, run, view, 'run')
    slb.hlist['browsecmd'] = lambda args=0, w=w,slb=slb,stext=stext,run=run,view=view: Sample_Action(w, slb, stext, run, view, 'browse')

    run['command']      = lambda args=0, w=w,slb=slb,stext=stext,run=run,view=view: Sample_Action(w, slb, stext, run, view, 'run')
    view['command'] = lambda args=0, w=w,slb=slb,stext=stext,run=run,view=view: Sample_Action(w, slb, stext, run, view, 'view')

    for type in ['widget', 'image']:
        if type != 'widget':
            x = Tix.Frame(slb.hlist, bd=2, height=2, width=150,
                          relief=Tix.SUNKEN, bg=slb.hlist['bg'])
            slb.hlist.add_child(itemtype=Tix.WINDOW, window=x, state='disabled')
        x = slb.hlist.add_child(itemtype=Tix.TEXT, state='disabled',
                                text=comments[type])
        for key in stypes[type]:
            slb.hlist.add_child(x, itemtype=Tix.TEXT, data=key,
                                text=key)
    slb.hlist.selection_clear()

    run['state'] = 'disabled'
    view['state'] = 'disabled'

def Sample_Action(w, slb, stext, run, view, action):
    global demo

    hlist = slb.hlist
    anchor = hlist.info_anchor()
    if not anchor:
        run['state'] = 'disabled'
        view['state'] = 'disabled'
    elif not hlist.info_parent(anchor):
        # a comment
        return

    run['state'] = 'normal'
    view['state'] = 'normal'
    key = hlist.info_data(anchor)
    title = key
    prog = samples[key]

    if action == 'run':
        exec('import ' + prog)
        w = Tix.Toplevel()
        w.title(title)
        rtn = eval(prog + '.RunSample')
        rtn(w)
    elif action == 'view':
        w = Tix.Toplevel()
        w.title('Source view: ' + title)
        LoadFile(w, demo.dir + '/samples/' + prog + '.py')
    elif action == 'browse':
        ReadFile(stext.text, demo.dir + '/samples/' + prog + '.py')

def LoadFile(w, fname):
    global root
    b = Tix.Button(w, text='Close', command=w.destroy)
    t = Tix.ScrolledText(w)
    #    b.form(left=0, bottom=0, padx=4, pady=4)
    #    t.form(left=0, bottom=b, right='-0', top=0)
    t.pack()
    b.pack()

    font = root.tk.eval('tix option get fixed_font')
    t.text.config(font=font)
    t.text['bd'] = 2
    t.text['wrap'] = 'none'

    ReadFile(t.text, fname)

def ReadFile(w, fname):
    old_state = w['state']
    w['state'] = 'normal'
    w.delete('0.0', Tix.END)

    try:
        f = open(fname)
        lines = f.readlines()
        for s in lines:
            w.insert(Tix.END, s)
        f.close()
    finally:
#       w.see('1.0')
        w['state'] = old_state

if __name__ == '__main__':
    root = Tix.Tk()
    RunMain(root)
PKb1�Zg�ˆtix/grid.pyonu�[����
��^c	@sddlZddlmZej�Zejd�ejedd�Zej�dej	fd��YZ
e
eddd	d
�Zejdej�xMe
d�D]?Zx6e
d�D](Zejeed
eeef��q�Wq�Wejed
ddej�Zej�ej�dS(i����N(tpprintttesttnameta_labeltMyGridcBseZd�Zd�ZRS(cOs'|j|d<tjj|||�dS(Nt
editnotify(RttktGridt__init__(tselftargstkwargs((s%/usr/lib64/python2.7/Demo/tix/grid.pyRs
cCstS(N(tTrue(R	txty((s%/usr/lib64/python2.7/Demo/tix/grid.pyRs(t__name__t
__module__RR(((s%/usr/lib64/python2.7/Demo/tix/grid.pyRs	ta_gridt
selectunittcelltfillittexttClosetcommand(tTixRRtTktrttitletLabeltltpackRRtgtBOTHtxrangeR
RtsettstrtButtontdestroytctmainloop(((s%/usr/lib64/python2.7/Demo/tix/grid.pyt<module>s

	*
PKb1�Z��{�̖̖tix/tixwidgets.pycnu�[����
��^c
@s�ddlZddlZddlZddlZddlTddlZddlZdQZdRZdSZ	dTZ
dUZdZd	dVd
��YZ
d�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zddddgad�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd �Z d!�Z!d"�Z"d#�Z#d$�Z$d%�Z%d&�Z&d'�Z'd(�Z(d)�Z)d*�Z*d+�Z+d,�Z,d-�Z-id.d/6d0d16Z.id2d26d3d46d5d66d7d86d9d:6d;d<6d=d=6d>d?6d@dA6dBdC6dDdE6dFdG6dHdI6dJdK6Z/iZ0d2d4d6d=d:d<d?dAdEdCdGdIdKg
e0d/<d8ge0d1<dL�Z1dM�Z2dN�Z3dO�Z4e5dPkr�ej6�a7et7�ndS(Wi����N(t*iiiiiitDemocBsPeZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	RS(cCsT||_d|_d|_d|_tj�|_|jjd�d|_	d|_
d|_d|_t
jd}tjj|�}|r'|tjkr'||_d}xHttt
j��D]1}t
j|}|dtjfkr�|}q�q�W|dkr|t
j|<q6t
jjd|�ntj�|_t
jjd|jd�dS(Ni����t0tis/samples(troottexittNonetdirtballoontTixt	StringVartuseBalloonstsett	statusbartwelmsgtwelfonttwelsizetsystargvtostpathtdirnametcurdirtrangetlentinserttgetcwd(tselfttoptprognameRtindextitp((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyt__init__s0								
	

c	Cs|j}tj|dddt�}tj|dddddd�}tj|dd	dddd�}|jd
t�|jd
t�tj|dd�}||d<tj|dd�}||d<|j	d
dddd|d��|j
d
ddddtd|j�|S(NtbditreliefttexttFilet	underlineit	takefocustHelptsidettearofftmenutlabeltExititcommandcSs
|j�S(N(tquitcmd(R((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyt<lambda>FRtBalloonHelptvariable(
RR	tFrametRAISEDt
MenubuttontpacktLEFTtRIGHTtMenutadd_commandtadd_checkbuttont
ToggleHelpR(RRtwtfilethelptfmthm((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyt
MkMainMenu9s	!!



c
Cs,|j}tj|dddddd�}|d|d<|jddd	d
dd|dd
��|jdddd
dd|dd��|jdddd
dd|dd��|jdddd
dd|dd��|jdddd
dd|dd��|jdddd
dd|dd��|S(NtipadxitipadytoptionssC
        tagPadX 6
        tagPadY 4
        borderWidth 2
        tbgtwelR,tWelcomeR&it	createcmdcSs
t||�S(N(t	MkWelcome(R=tname((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0ZRtchotChooserscSs
t||�S(N(t
MkChoosers(R=RK((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0\RtscrsScrolled WidgetscSs
t||�S(N(tMkScroll(R=RK((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0^RtmgrsManager WidgetscSs
t||�S(N(t	MkManager(R=RK((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0`RRsDirectory ListcSs
t||�S(N(t	MkDirList(R=RK((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0bRtexpsRun Sample ProgramscSs
t||�S(N(tMkSample(R=RK((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0dR(RR	tNoteBooktadd(RRR=((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pytMkMainNotebookOs"		c	Csq|j}tj|dtjdd�}tj|dtjdd�t_tjjddddddd	d
�|S(NR#R"itpadxitpadytleftitrights%70(	RR	R3R4tLabeltSUNKENtdemoR
tform(RRR=((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pytMkMainStatusgs
	!%cCs|j}|j�}|jd�|j�dkrD|jd�n
|jd�tj|�t_|j	�}|j
�}|j�}|jdt
dt�|jdtdt�|jdt
dddtd	d
dd
�tjtjd<|jd
|d��dS(NsTix Widget Demonstrationi s
790x590+10+10s
890x640+10+10R)tfilltexpandiRYiRZR
tWM_DELETE_WINDOWcSs
|j�S(N(R/(R((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0�R(Rtwinfo_topleveltwm_titletwinfo_screenwidthtgeometryR	tBalloonR_RRBRXRaR6tTOPtXtBOTTOMtBOTHR
twm_protocol(RRtztframe1tframe2tframe3((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pytbuildps	

(cCs
d|_dS(s@Quit our mainloop. It is up to you to call root.destroy() after.iN(R(R((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR/�scCsx|jdkry-x&|jdkr=|jjjt�qWWqtk
r\d|_dStk
r�tjdd�dkrd|_dSqqt	j
�\}}}d}x+tj|||�D]}||d7}q�Wytj
d	|�WnnXd|_td�qXqWdS(
s�This is an explict replacement for _tkinter mainloop()
        It lets you catch keyboard interrupts easier, and avoids
        the 20 msec. dead sleep() which burns a constant CPU.iiNt	InterruptsReally Quit?tyesRs
tError(RRttkt
dooneeventtTCL_ALL_EVENTSt
SystemExittKeyboardInterruptttkMessageBoxtaskquestionRtexc_infot	tracebacktformat_exceptiont	showerror(RtttvttbR$tline((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pytloop�s.
	
		cCs|jj�dS(N(Rtdestroy(R((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR��s(
t__name__t
__module__R!RBRXRaRsR/R�R�(((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyRs								"cCs.t|�atj�tj�tj�dS(N(RR_RsR�R�(R((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pytRunMain�s

c	Csi|j|�}t|�}t|�}|jdtdtdddd�|jdtdtdd�dS(NR)RbRYiRZRci(tpagetMkWelcomeBart
MkWelcomeTextR6RjRkRm(tnbRKR=tbarR$((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyRJ�s
"cCs�tj|dddtj�}tj|d|d��}tj|d|d��}d|jd<d	|jjd
<d|jd<d	|jjd
<|t_|t_	|j
tjd�|j
tjd
�|j
tjd�|j
tjd�|j
tjd�|j
tjd�|j
tjd�|j
tjd�|j
tjd�|jd�|jd	�|j
dtjdddd�|j
dtjdddd�tjj|dddd�tjj|dddd�|S(NR"iR#R.cSs
t|�S(N(tMainTextFont(R=((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0�RcSs
t|�S(N(R�(R=((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0�RitwidthitheightitCouriert	HelveticatLucidasTimes Romant8t10t12t14t18iR)RYRZtmsgs
Choose
a fontt	statusmsgsChoose a font for this pages
Point sizes"Choose the font size for this page(R	R3tGROOVEtComboBoxtentrytslistboxtlistboxR_RRRtENDtpickR6R7Rtbind_widget(RR=tb1tb2((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR��s6

		

c
Cs�tj|dd�}|j}d}tj|dddddtjd	|�}tj|dddd
dtjd	d�}|jdd
dtjdddd�|jdd
dtjdddd�|t_	|S(Nt	scrollbartautosWelcome to TIX in PythonR"iR�itanchorR$i�s%Tix is a set of mega-widgets based on TK. This program demonstrates the widgets in the Tix widget set. You can choose the pages in this window to look at the corresponding widgets. 

To quit this program, choose the "File | Exit" command.

For more information, see http://tix.sourceforge.net.RciRbRYi
RZ(
R	tScrolledWindowtwindowR]tNtMessageR6RmR_R(RR=twinR$ttitleR�((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR��s		%%	cCs]tjs
dStjd}tjd}|dkr<d}nd||f}|tjd<dS(NtvaluesTimes Romanttimess%s %stfont(R_RRR(R=R�tpointtfontstr((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR��s	

	cCs6tjj�dkr%dtjd<n
dtjd<dS(Nt1tbothtstatetnone(R_RtgetR(((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR<sc	Csw|j|�}d}tj|ddd|�}tj|ddd|�}tj|ddd|�}tj|ddd|�}tj|ddd|�}tj|dd	d|�}	tj|dd
d|�}
tj|ddd|�}t|j�t|j�t|j�t|j�t|j�t	|	j�t
|
j�t|j�|jdd
dd
dd�|jdd
ddt
|�d|�|jdd
ddt
|�d|dd�|jd|dd
dd�|jd|ddt
|�d|�|	jd|ddt
|�d|�|jd|ddt
|�d|	dd�|
jdddd
dd�dS(Nslabel.padX 4R,sChooser WidgetsREttixComboBoxt
tixControlt	tixSelectt
tixOptionMenuttixFileEntryttixFileSelectBoxsTool BarRiR[R\s%33t&tbottomi����s%66(R�R	t
LabelFrametMkTitletframetMkCombot	MkControltMkSelectt	MkOptMenut	MkFileEntt	MkFileBoxt	MkToolBarR`tstr(R�RKR=REttiltcbxtctltseltopttfiltfbxttbr((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyRNs4







&,&&,cCseddtjdf}tj|ddddd|�}tj|dd	dd
d|�}tj|dddd
dd
d
tjd|�}|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd �|jtjd!�|jd"tjd#d$d%d&�|jd"tjd#d$d%d&�|jd"tjd#d$d%d&�dS('Ns-label.width %d label.anchor %s entry.width %di
iR,tStaticteditableiREtEditableitHistorythistoryR�tJanuarytFebruarytMarchtApriltMaytJunetJulytAugustt	SeptembertOctobertNovembertDecembertAngolat
BangladeshtChinatDenmarktEcuadors/usr/bin/kshs/usr/local/lib/pythons/var/admR)RYiRZi(R	tER�RR�R6Rj(R=REtstaticR�R�((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR�0s8!!tBengaltDelhit	Karnatakas
Tamil NaducCshtjtj��|}|dkr8tt�d}n|tt�krSd}ntjt|�dS(Nii(tstatesRtdemo_spintxtR�RR(R=tinctidx((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pytspin_cmdTs	cCs:ytjtj��}Wntk
r1tdSXt|S(Ni(R�RR�R�t
ValueError(R=R((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyt
spin_validate^s

	cCs�ddtjdf}tj�atjtd�tj|ddd|�}tj|ddd	td|�}|d
�|d<|d�|d
<|d�|d<|jdtjdddd�|jdtjdddd�dS(Ns-label.width %d label.anchor %s entry.width %di
i
iR,tNumbersREtStatesR2cSs
t|d�S(Ni(R�(R=((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0rRtincrcmdcSs
t|d�S(Ni����(R�(R=((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0sRtdecrcmdcSs
t|�S(N(R�(R=((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0tRtvalidatecmdR)RYiRZi(	R	R�R
R�RR�tControlR6Rj(R=REtsimpletspintxt((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR�hs	cCs�dtj}tj|dddddddtjdtjd	|�}tj|dd
dddddtjdtjd	|�}|jdd
d�|jdd
d�|jdd
d�|jdd
d�|jdd
d�|jdd
d�|jdd
d�|jdd
d�|jdd
d�|jdd
d�|jdtjddddd tj�|jdtjddddd tj�dS(!Nslabel.anchor %sR,sMere Mortalst	allowzeroitradiotorientationt	labelsideREtGeeksiteatR$tEattworktWorktplaytPlaytpartytPartytsleeptSleeptprog1tProgramtprog2tprog3R)RYiRZiRb(	R	tCENTERtSelecttVERTICALRjRWR6R7Rk(R=REtsel1tsel2((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR�ys*
						(cCs�dtj}tj|ddd|�}|jddd�|jddd�|jd	dd
�|jddd�|jd
�|jddd�|jddd�|jdtjdddd�dS(Ns#menubutton.width 15 label.anchor %sR,sFile Format : RER$s
Plain Texttpostt
PostScripttformatsFormatted TextthtmltHTMLtsepttextLaTeXtrtfsRich Text FormatRbRYiRZi(R	R�t
OptionMenuR:R6Rk(R=REtm((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR��s

cCs�tj|dtjdddtjdd�}tj|dd�}|jd	tjd
ddtjd
ddd�|jd	tjdtjd
ddd�dS(NR#R�i�R�R$sGPress the "open file" icon button and a TixFileSelectDialog will popup.R,sSelect a file : R)RciRbRYiRZ(	R	R�tFLATR�t	FileEntryR6RjRmRk(R=R�tent((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR��s	.cCs�tj|dtjdddtjdd�}tj|�}|jdtjdd	d
tjddd
d�|jdtjd
tjddd
d�dS(s�The FileSelectBox is a Motif-style box with various enhancements.
    For example, you can adjust the size of the two listboxes
    and your past selections are recorded.
    R#R�i�R�R$s�The Tix FileSelectBox is a Motif-style box with various enhancements. For example, you can adjust the size of the two listboxes and your past selections are recorded.R)RciRbRYiRZN(	R	R�R"R�t
FileSelectBoxR6RjRmRk(R=R�tbox((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR��s	.cCs;d}tj|dtjdddtjdd�}tj|dd	dtj�}tj|d
ddd
ddd|�}tj|d
d
ddddd|�}|jdddtj	d�|jdddtj	d�|jdddtj	d�|jdddtj	d�|jdddtj	d�|jdddtj	d�|jdddtj	d �|jd!ddtj	d"�|j
d#tjd$dd%tjd&d'd(d'�|j
d#tjd%tj
d&d'd(d'�|j
i|d)6d#tjd&d'd(d'�|j
i|d)6d#tjd&d'd(d'�d*S(+sHThe Select widget is also good for arranging buttons in a tool bar.
    sframe.borderWidth 1R#R�i�R�R$sCThe Select widget is also good for arranging buttons in a tool bar.R"iR�iRiR,RREtboldtbitmapt@s/bitmaps/bold.xbmtitalics/bitmaps/italic.xbmR&s/bitmaps/underline.xbmtcapitals/bitmaps/capital.xbmR[s/bitmaps/leftj.xbmR\s/bitmaps/rightj.xbmtcenters/bitmaps/centerj.xbmtjustifys/bitmaps/justify.xbmR)RcRbRYiRZtinN(R	R�R"R�R3R4RRWR_RR6RjRmRkR7(R=RER�R�R�tpara((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR��s&	''.()cCs_tj|dtjdddtjdd�}|jdtjdd	d
tjddd
d�dS(NR#R�i�R�R$seThere are many types of "chooser" widgets that allow the user to input different types of informationR)RciRbRYiRZ(R	R�R"R�R6RjRm(R=R�((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR��s	c	Cs�|j|�}d}tj|ddd|�}tj|ddd|�}tj|ddd|�}t|j�t|j�t|j�|jddd	dd
ddd
�|jddd	|d
ddd
�|jddd	|d
d
dd
�dS(Nslabel.padX 4R,sTix.ScrolledListBoxREsTix.ScrolledWindowsTix.ScrolledTextRiR[R\s%33R�i����s%66(R�R	R�tMkSListR�t	MkSWindowtMkSTextR`(R�RKR=REtslstswntstx((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyRP�s


""cCstj|dddd�}tj|�}tj|dtjdddtjdd	�}tj|d
d�}|jdd
dddddd�|jjtj	d�|jjtj	d�|jjtj	d�|jjtj	d�|jjtj	d�|jjtj	d�|jjtj	d�tj
|dddtjdddddd
d d!�}tj|dd"d#||d$��}|j
d%�|jd&tj�|jdtj�|jd'dd&tj�|jd&tj�|jd(d)d%||d*��d+S(,s�This TixScrolledListBox is configured so that it uses scrollbars
    only when it is necessary. Use the handles to resize the listbox and
    watch the scrollbars automatically appear and disappear.  R�i,R�iJR#i�R�R$s�This TixScrolledListBox is configured so that it uses scrollbars only when it is necessary. Use the handles to resize the listbox and watch the scrollbars automatically appear and disappear.R�R�txi2tyi�ixiPtAlabamat
CaliforniatMontanas
New JerseysNew YorktPennsylvaniat
WashingtonRFtblackt
handlesizeitgriddeditminwidtht	minheightitResetR.cSs
t||�S(N(tSList_reset(R=R6((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0RiRbRcs<Map>tfunccSs%|jjdt|�dt|��S(Nt
tixDoWhenIdletattachwidget(RwtcallR�(targtrhtlist((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0sN(R	R3R�R"R�tScrolledListBoxtplaceR�RR�tResizeHandleR4tButtont	propagateR6RkRRmtbind(R=RtbotR�RJRItbtn((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0�s0	"	$
c	Cs=|jdddddddd�|j�|j|�dS(	NR6i2R7i�R�ixR�iP(RLtupdatet
attach_widget(RIRJ((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyRC
s"
cCs�d}tjjtjdd�}tjj|�s@|d7}ntj|dddd�}tj|�}tj|dtj	dd	d
tj
d|�}tj|dd
�}|jj
dd|�}tj|jd|�}|jdddtj�|jdddddddd�tj|dddtjdddddd d!d�}	tj|dd"d#|	|d$��}
|jd%�|jdtj�|
jd
tj�|jdddtj�|jdtj�|jd&d'd%|	|d(��d)S(*s�The ScrolledWindow widget allows you to scroll any kind of Tk
    widget. It is more versatile than a scrolled canvas widget.
    s}The Tix ScrolledWindow widget allows you to scroll any kind of Tk widget. It is more versatile than a scrolled canvas widget.tbitmapsstix.gifs (Image missing)R�iJR�R#i�R�R$R�R�tphotoR>timageRciRbR6iR7i�i�ixRFR=R>iR?R@i2RARBR.cSs
t||�S(N(t
SWindow_reset(R=R6((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0,Ris<Map>RDcSs%|jjdt|�dt|��S(NRERF(RwRGR�(RHRIR�((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR03sN(RRtjoinR_RtisfileR	R3R�R"R�R�R�timage_createR]R6RmRLRMR4RNRORkRRP(R=R$R>RRQR�R�timage1tlblRIRR((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR1s0
	"	$
c	Cs=|jdddddddd�|j�|j|�dS(	NR6iR7i�R�i�R�ix(RLRSRT(RIR�((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyRX6s"
cCs�tj|dddd�}tj|�}tj|dtjdddtjdd�}tj|d	d
�}d|jd<|jjtjd
�|j	dddddddd�tj
|dddtjdddddddd�}tj|ddd||d��}|j
d �|jd!tj�|jdtj�|jd"dd!tj�|jd!tj�|jd#d$d ||d%��d&S('s�The TixScrolledWindow widget allows you to scroll any kind of Tk
    widget. It is more versatile than a scrolled canvas widget.R�iJR�R#i�R�R$s}The Tix ScrolledWindow widget allows you to scroll any kind of Tk widget. It is more versatile than a scrolled canvas widget.R�R�R�twraps�When -scrollbar is set to "auto", the
scrollbars are shown only when needed.
Additional modifiers can be used to force a
scrollbar to be shown or hidden. For example,
"auto -y" means the horizontal scrollbar
should be shown when needed but the vertical
scrollbar should always be hidden;
"auto +x" means the vertical scrollbar
should be shown when needed but the horizontal
scrollbar should always be shown, and so on.R6iR7i�i�idRFR=R>iR?iR@i2RARBR.cSs
t||�S(N(tSText_reset(R=R6((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0VRiRbRcs<Map>RDcSs%|jjdt|�dt|��S(NRERF(RwRGR�(RHRIR�((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0\sN(R	R3R�R"R�tScrolledTextR$RR�RLRMR4RNROR6RkRRmRP(R=RRQR�R�RIRR((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR2;s(	
	"	$
c	Cs=|jdddddddd�|j�|j|�dS(	NR6iR7i�R�i�R�ix(RLRSRT(RIR�((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR__s"
c	Cs�|j|�}d}tj|ddd|�}tj|ddd|�}t|j�t|j�|jddddd	|d
d�|jddd	dd
d�dS(Nslabel.padX 4R,sTix.PanedWindowREsTix.NoteBookRiR[R\R�i����(R�R	R�t
MkPanedWindowR�t
MkNoteBookR`(R�RKR=REtpanetnote((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyRRds

"cCs[tj|dtjdddtjdd�}tj|ddd	d
�}|jjdd�tj|d
d�}|jddddd�}|jddd�}tj	|�}tj
|�}|jjtjd�|jjtjd�|jjtjd�|jjtjd�|jjtjd�|jjtjd�|jjtjd�|jd|j
d<d|j
d<|j
jtjd�|jdd d!tjd"d#d$d%�|jdd d!tjd"d#d$d%�|jd&tjd"d'd$d'd!tj�|jd&tjd"d'd$d'd!tj�|jd&tjd"d'd$d'd!tjdd �d(S()s�The PanedWindow widget allows the user to interactively manipulate
    the sizes of several panes. The panes can be arranged either vertically
    or horizontally.
    R#R�i�R�R$s�The PanedWindow widget allows the user to interactively manipulate the sizes of several panes. The panes can be arranged either vertically or horizontally.R,s
Newsgroup:REsentry.width 25iscomp.lang.pythonRtverticalRJtminiFtsizeids+  12324 Re: Tkinter is good for your healths++ 12325 Re: Tkinter is good for your healthsH+ 12326 Re: Tix is even better for your health (Was: Tkinter is good...)sH  12327 Re: Tix is even better for your health (Was: Tkinter is good...)sH+ 12328 Re: Tix is even better for your health (Was: Tkinter is good...)sH  12329 Re: Tix is even better for your health (Was: Tkinter is good...)sH+ 12330 Re: Tix is even better for your health (Was: Tkinter is good...)RFR�R^sO
Mon, 19 Jun 1995 11:39:52        comp.lang.python              Thread   34 of  220
Lines 353       A new way to put text and bitmaps together iNo responses
ioi@blue.seas.upenn.edu                Ioi K. Lam at University of Pennsylvania

Hi,

I have implemented a new image type called "compound". It allows you
to glue together a bunch of bitmaps, images and text strings together
to form a bigger image. Then you can use this image with widgets that
support the -image option. For example, you can display a text string
together with a bitmap, at the same time, inside a TK button widget.
RciRbRYiRZiR)iN(R	R�R"R�t
LabelEntryR�RtPanedWindowRWRKR`R�R�R$R6RmRj(R=R�tgroupRctp1tp2RJR$((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyRaqs4	
%%((c	Cs�tj|dtjdddtjdd�}ddd	tjf}tj|d
dddd
|�}|jddddd�|jddddd�tj|j�}|j	dtj
dddddtj�t|�tj
|jdddd�}tj
|jdddd�}tj
|jdddd�}tj
|jdd dd!�}|j	dtjdd"dd�|j	dtjdd"dd�|j	dtjdd"dd�|j	dtjdd"dd�tj|j�}|j	dtj
dddddtj�t|�tj
|jdddd�}tj
|jdddd�}tj
|jdddd�}tj
|jdd dd!�}tj
|jdddd#�}|j	dtjdd"dd�|j	dtjdd"dd�|j	dtjdd"dd�|j	dtjdd"dd�|j	dtjdd"dd�|j	dtjdd$dd$dtj�|j	dtjdd%dd%dtjd&d'�dS((NR#R�i�R�R$sSThe NoteBook widget allows you to layout a complex interface into individual pages.s-entry.width %d label.width %d label.anchor %si
iRCiRDREt	hard_diskR,s	Hard DiskR&itnetworktNetworkR)RYiRZRbR�is
Access Time: i�sWrite Throughput: sRead Throughput: i�s
Capacity: isUsers: iiRci(R	R�R"R�R�RVRWR3RmR6R8tYtCreateCommonButtonsR�RjRnRm(	R=R�RER�tcommontatrtctu((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyRb�sB	!(
(
(cCsxtj|dddd�}tj|dddd�}|jdtjddd	d�|jdtjddd	d�dS(
NR$tOKR�itCancelR)RYiRZ(R	RNR6Rj(tftoktcancel((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyRq�sc	Cs�|j|�}d}tj|ddd|�}tj|ddd|�}t|j�t|j�|jddddd	d
dd�|jdddd
d	ddd�dS(
Nslabel.padX 4R,sTix.DirListREsTix.ExFileSelectBoxRiR[R\s%40R�i����(R�R	R�tMkDirListWidgetR�tMkExFileWidgetR`(R�RKR=RERtfsbox((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyRS�s

"cCs�tj|dtjdddtjdd�}tj|dd�}|jd	tjd
ddtjd
ddd�|jd	tjd
ddd�dS(s�The TixDirList widget gives a graphical representation of the file
    system directory and makes it easy for the user to choose and access
    directories.
    R#R�i�R�R$s�The Tix DirList widget gives a graphical representation of the file system directory and makes it easy for the user to choose and access directories.REs+hlist.padY 1 hlist.width 25 hlist.height 16R)RciRbRYiRZN(R	R�R"R�tDirListR6RjRm(R=R�tdirlist((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR|�s	.cCs�tj|dtjdddtjdd�}tj|dddtj�}|jd	tjd
ddtjd
ddd�|jd	tjd
ddd�dS(s]The TixExFileSelectBox widget is more user friendly than the Motif
    style FileSelectBox.  R#R�i�R�R$sXThe Tix ExFileSelectBox widget is more user friendly than the Motif style FileSelectBox.R"iR)RciRbRYiRZN(	R	R�R"R�tExFileSelectBoxR4R6RjRm(R=R�R&((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR}�s	.sWidget DemostwidgetsImage DemosRWRitBtnBoxs
Button BoxR�s	Combo BoxtCmpImgsCompound ImageRsDirectory ListtDirTreesDirectory TreeR�RVtNotebooktOptMenusOption MenutPanedWinsPaned WindowtPopMenus
Popup MenutSHList1sScrolledHList (1)tSHList2sScrolledHList (2)tTreesTree (dynamic)cCsv|j|�}d}tj|dd�}|jdtjdddtj�|jddd	�}|jd
dd�}d|d
<d|d
<tj|dd�}|jdtjdddtjdddd�tj|dd�}|jdtjdddtjdddd�tj|j	dd�}	|	jdtjdddtjdd�tj
|j	dd�}
tjj
d�}|
jjd|�tj|j	dd�}tj|d
ddd�}
tj|d
ddd�}|
jdtjdddtj�|jdtjdddtj�|	jd |
jd <d!|
jd"<d#|
jd$<d%|
jd&<|jdtjdddtjdd'�|
jdtjdddtjdd'�d(|	jd)<d*|	jd&<d|	jd+<d,|	jd-<d|	jd.<d||	|
|
|d/�|	jd0<d||	|
|
|d1�|	jd2<d||	|
|
|d3�|
d0<d||	|
|
|d4�|d0<x�d5d6gD]�}|d5kr�tj|	jd7d8d9d8d&d:d
tjd |	jd �}|	jjd;tjd<|d"d!�n|	jjd;tjd"d!d
t|�}x7t|D]+}|	jj|d;tjd=|d
|�qWqzW|	jj�d!|
d"<d!|d"<dS(>Nslabel.padX 4Rt
horizontalR)RciRbRJR�R$t5tflatR#R,sSelect a sample program:RYiRZsSource:REshlist.width 20RKtstextstix option get fixed_fontR�R�sRun ...trunsView Source ...tviewiRFtdisabledR�R�R^iPR�it.t	separatorit
drawbranchi
tindentt
wideselectcSst|||||d�S(NR�(t
Sample_Action(targsR=tslbR�R�R�((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0�RR.cSst|||||d�S(Ntbrowse(R�(R�R=R�R�R�R�((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0�Rt	browsecmdcSst|||||d�S(NR�(R�(R�R=R�R�R�R�((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0�RcSst|||||d�S(NR�(R�(R�R=R�R�R�R�((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0�RR�RWR"iR�i�titemtypeR�tdata(R�R	RiR6RjRmRWR�R�R�R`RRwtevalR$tconfigR3RNR7tNONEthlistRlRkR^t	add_childtWINDOWtTEXTtcommentststypestselection_clear(R�RKR=RERctf1tf2tlabtlab1R�R�R�R�R�R�ttypeR6tkey((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyRUksd"

..(""


((




""!%


cBs@|j}|j�}|s2d|d<d|d<n|j|�sEdSd|d<d|d<|j|�}|}	e|}
|dkr�d|
dUej�}|j|	�e|
d�}||�nv|dkrej�}|jd|	�e	|t
jd	|
d
�n.|dkr<e|j
t
jd	|
d
�ndS(NR�R�tnormalR�simport s
.RunSampleR�s
Source view: s	/samples/s.pyR�(R�tinfo_anchortinfo_parentt	info_datatsamplesR	tToplevelR�R�tLoadFileR_RtReadFileR$(R=R�R�R�R�tactionR�R�R�R�tprogtrtn((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR��s0	






cCs�tj|ddd|j�}tj|�}|j�|j�tjjd�}|jj	d|�d|jd<d|jd	<t
|j|�dS(
NR$tCloseR.stix option get fixed_fontR�iR"R�R^(R	RNR�R`R6RRwR�R$R�R�(R=tfnametbR�R�((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR��s



cCs�|d}d|d<|jdtj�zJt|�}|j�}x!|D]}|jtj|�qIW|j�Wd||d<XdS(NR�R�s0.0(tdeleteR	R�topent	readlinesRtclose(R=R�t	old_stateRytlinests((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR��s


t__main__iiiii ((8Rtos.pathRR	tTkconstantsRR|t
TCL_DONT_WAITtTCL_WINDOW_EVENTStTCL_FILE_EVENTStTCL_TIMER_EVENTStTCL_IDLE_EVENTSRyRR�RJR�R�R�R<RNR�R�R�R�R�R�R�R�R�R�R�RPR0RCR1RXR2R_RRRaRbRqRSR|R}R�R�R�RUR�R�R�R�tTkR(((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyt<module>s�0
�	
		%				%	"	
	
									 		'		$		
	/	.				


^
	@			PKb1�ZF���tix/README.txtnu�[���About Tix.py
-----------

Tix.py is based on an idea of Jean-Marc Lugrin (lugrin@ms.com) who wrote
pytix (another Python-Tix marriage). Tix widgets are an attractive and
useful extension to Tk. See http://tix.sourceforge.net
for more details about Tix and how to get it.

Features:
	1) It is almost complete.
	2) Tix widgets are represented by classes in Python. Sub-widgets
	   are members of the mega-widget class. For example, if a
	   particular TixWidget (e.g. ScrolledText) has an embedded widget
	   (Text in this case), it is possible to call the methods of the
	   child directly.
	3) The members of the class are created automatically. In the case
	   of widgets like ButtonBox, the members are added dynamically.


PKb1�Z��*ϰ�tix/INSTALL.txtnu�[���$Id$

Installing Tix.py
----------------

0) To use Tix.py, you need Tcl/Tk (V8.3.3), Tix (V8.1.1) and Python (V2.1.1).
   Tix.py has been written and tested on an Intel Pentium running RH Linux 5.2
   and Mandrake Linux 7.0 and Windows with the above mentioned packages.

   Older versions, e.g. Tix 4.1 and Tk 8.0, might also work.

   There is nothing OS-specific in Tix.py itself so it should work on
   any machine with Tix and Python installed. You can get Tcl and Tk
   from http://dev.scriptics.com and Tix from http://tix.sourceforge.net.

1) Build and install Tcl/Tk 8.3. Build and install Tix 8.1.
   Ensure that Tix is properly installed by running tixwish and executing
   the demo programs. Under Unix, use the --enable-shared configure option
   for all three. We recommend tcl8.3.3 for this release of Tix.py.

2a) If you have a distribution like ActiveState with a tcl subdirectory
   of $PYTHONHOME, which contains the directories tcl8.3 and tk8.3,
   make a directory tix8.1 as well. Recursively copy the files from
   <tix>/library to $PYTHONHOME/lib/tix8.1, and copy the dynamic library
   (tix8183.dll or libtix8.1.8.3.so) to the same place as the tcl dynamic
   libraries  ($PYTHONHOME/Dlls or lib/python-2.1/lib-dynload). In this
   case you are all installed, and you can skip to the end.

2b) Modify Modules/Setup.dist and setup.py to change the version of the 
   tix library from tix4.1.8.0 to tix8.1.8.3
   These modified files can be used for Tkinter with or without Tix.
   
3) The default is to build dynamically, and use the Tcl 'package require'.
   To build statically, modify the Modules/Setup file to link in the Tix 
   library according to the comments in the file. On Linux this looks like:

# *** Always uncomment this (leave the leading underscore in!):
_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT \
# *** Uncomment and edit to reflect where your Tcl/Tk libraries are:
	-L/usr/local/lib \
# *** Uncomment and edit to reflect where your Tcl/Tk headers are:
	-I/usr/local/include \
# *** Uncomment and edit to reflect where your X11 header files are:
	-I/usr/X11R6/include \
# *** Or uncomment this for Solaris:
#	-I/usr/openwin/include \
# *** Uncomment and edit for BLT extension only:
#	-DWITH_BLT -I/usr/local/blt/blt8.0-unoff/include -lBLT8.0 \
# *** Uncomment and edit for PIL (TkImaging) extension only:
#     (See http://www.pythonware.com/products/pil/ for more info)
#	-DWITH_PIL -I../Extensions/Imaging/libImaging  tkImaging.c \
# *** Uncomment and edit for TOGL extension only:
#	-DWITH_TOGL togl.c \
# *** Uncomment and edit for Tix extension only:
	-DWITH_TIX -ltix8.1.8.3 \
# *** Uncomment and edit to reflect your Tcl/Tk versions:
	-ltk8.3 -ltcl8.3 \
# *** Uncomment and edit to reflect where your X11 libraries are:
	-L/usr/X11R6/lib \
# *** Or uncomment this for Solaris:
#	-L/usr/openwin/lib \
# *** Uncomment these for TOGL extension only:
#	-lGL -lGLU -lXext -lXmu \
# *** Uncomment for AIX:
#	-lld \
# *** Always uncomment this; X11 libraries to link with:
	-lX11

4) Rebuild Python and reinstall.

You should now have a working Tix implementation in Python. To see if all
is as it should be, run the 'tixwidgets.py' script in the Demo/tix directory.
Under X windows, do
	/usr/local/bin/python Demo/tix/tixwidgets.py

If this does not work, you may need to tell python where to find
the Tcl, Tk and Tix library files. This is done by setting the
TCL_LIBRARY, TK_LIBRARY and TIX_LIBRARY environment variables. Try this:

	env 	TCL_LIBRARY=/usr/local/lib/tcl8.3 \
		TK_LIBRARY=/usr/local/lib/tk8.3 \
		TIX_LIBRARY=/usr/local/lib/tix8.1 \
		/usr/local/bin/python Demo/tix/tixwidgets.py


If you find any bugs or have suggestions for improvement, please report them
via http://tix.sourceforge.net


PKb1�Znb!���tix/samples/PanedWin.pycnu�[����
��^c@sWddlZdZd�Zddd��YZedkrSej�Zee�ndS(i����NicCs$t|�}|j�|j�dS(N(tDemoPanedwintmainlooptdestroy(troottpanedwin((s1/usr/lib64/python2.7/Demo/tix/samples/PanedWin.pyt	RunSamples
RcBs,eZd�Zd�Zd�Zd�ZRS(c
Cs�||_d|_|j�}|jd|d��tj|dddd�}|jjdd	�tj|d
d�}|j	dd
ddd�}|j	dd
d�}tj
|�}d|jd<d|jd<tj|�}d|j
d<d|j
d<|jjtjd�|jjtjd�|jjtjd�|jjtjd�|jjtjd�|jjtjd�|jjtjd�|jd|j
d<d|j
d <|j
jtjd!�d"|j
d#<|jd$d%d&tjd'd(d)d*�|jd$d%d&tjd'd(d)d*�|jd+tjd'd,d)d,d&tj�|jd+tjd'd,d)d,d&tjd$d%�tj|d
tj�}	|	j	d-dd.d/ddd*d0|j�|	j	d1dd2d/ddd*d0|j�|	jd+tjd&tj�dS(3Ni����tWM_DELETE_WINDOWcSs
|j�S(N(tquitcmd(tself((s1/usr/lib64/python2.7/Demo/tix/samples/PanedWin.pyt<lambda>!ttlabels
Newsgroup:toptionssentry.width 25iscomp.lang.pythontorientationtverticaltlisttminiFtsizeidttextiPtwidthitheightis+  12324 Re: Tkinter is good for your healths++ 12325 Re: Tkinter is good for your healthsH+ 12326 Re: Tix is even better for your health (Was: Tkinter is good...)sH  12327 Re: Tix is even better for your health (Was: Tkinter is good...)sH+ 12328 Re: Tix is even better for your health (Was: Tkinter is good...)sH  12329 Re: Tix is even better for your health (Was: Tkinter is good...)sH+ 12330 Re: Tix is even better for your health (Was: Tkinter is good...)tbgtnonetwraps~
    Mon, 19 Jun 1995 11:39:52        comp.lang.python              Thread   34 of  220
    Lines 353       A new way to put text and bitmaps together iNo responses
    ioi@blue.seas.upenn.edu                Ioi K. Lam at University of Pennsylvania

    Hi,

    I have implemented a new image type called "compound". It allows you
    to glue together a bunch of bitmaps, images and text strings together
    to form a bigger image. Then you can use this image with widgets that
    support the -image option. For example, you can display a text string string
    together with a bitmap, at the same time, inside a TK button widget.
    tdisabledtstatetexpanditfilltpadxitpadyitsideitoktOkt	underlinetcommandtcanceltCancel(Rtexittwinfo_topleveltwm_protocoltTixt
LabelEntrytentrytinserttPanedWindowtaddtScrolledListBoxtlistboxtScrolledTextRtENDtpacktBOTHtTOPt	ButtonBoxt
HORIZONTALRtBOTTOMtX(
Rtwtztgrouptpanetp1tp2RRtbox((s1/usr/lib64/python2.7/Demo/tix/samples/PanedWin.pyt__init__sJ		





%%(.

cCs
d|_dS(Ni(R%(R((s1/usr/lib64/python2.7/Demo/tix/samples/PanedWin.pyRVscCs-x&|jdkr(|jjjt�qWdS(Ni(R%Rttkt
dooneeventtTCL_ALL_EVENTS(R((s1/usr/lib64/python2.7/Demo/tix/samples/PanedWin.pyRYscCs|jj�dS(N(RR(R((s1/usr/lib64/python2.7/Demo/tix/samples/PanedWin.pyR]s(t__name__t
__module__R@RRR(((s1/usr/lib64/python2.7/Demo/tix/samples/PanedWin.pyRs	:		t__main__((R(RCRRRDtTkR(((s1/usr/lib64/python2.7/Demo/tix/samples/PanedWin.pyt<module>s	EPKb1�Z�3U
��tix/samples/DirList.pyonu�[����
��^c@s�ddlZddlZddlZddlTdZd�Zddd��YZedkr�ddlZddl	Z	yej
�Zee�Wq�ej
�\ZZZdZxAe	jeee�D]&Zeed	Zejd
e�Zq�Wq�XndS(i����N(t*icCs$t|�}|j�|j�dS(N(tDemoDirListtmainlooptdestroy(troottdirlist((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyt	RunSamples
RcBs>eZd�Zd�Zd�Zd�Zd�Zd�ZRS(c
Csc||_d|_|j�}|jd|d��tj|dtdd�}tj|�|_d|jj	d<tj
|d	d
dd�|_tj|d
ddddd�|_
|jjjd�}||j
jd<tjtj�|_|j|j
jd<|j|j
|d�|jd<|j
jjd|d��|jdddddt�|jjdddtdd dd dt�|jjd!d"dd dd dt�|j
jdddtd!d"dd dd dt�tj|d#d$�}|jd%d	d&d'ddd(d|d)��|jd*d	d+d'ddd(d|d,��|jd!d"dd-dt�dS(.Ni����tWM_DELETE_WINDOWcSs
|j�S(N(tquitcmd(tself((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyt<lambda>#ttrelieftbdii(twidthttexts  >>  tpadyitlabelsInstallation Directory:t	labelsidettoptoptionss�
                                  entry.width 40
                                  label.anchor w
                                  stix option get fixed_fonttfontttextvariablecSs|j||�S(N(t	copy_name(tdirtentR	((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyR
Kstcommands<Return>cSs
|j�S(N(tokcmd(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyR
ORtexpandtyestfilltbothtsidetpadxitanchortstorientationt
horizontaltoktOkt	underlineicSs
|j�S(N(R(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyR
ZRtcanceltCancelcSs
|j�S(N(R(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyR
\Rtx(Rtexittwinfo_topleveltwm_protocoltTixtFrametRAISEDtDirListRthlisttButtontbtnt
LabelEntryRttktevaltentrytcopytostcurdirt	dlist_dirtbindtpacktTOPtBOTHtLEFTtXt	ButtonBoxtaddtBOTTOM(R	twtzRRtbox((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyt__init__s6		+%1

cCs?|jd�|_|jjdd�|jjd|j�dS(Ntvalueitend(tcgetR=R9tdeletetinsert(R	RR((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyR`scCs|j�dS(N(R(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyRgscCs
d|_dS(Ni(R,(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyRkscCs-x&|jdkr(|jjjt�qWdS(Ni(R,RR7t
dooneeventtTCL_ALL_EVENTS(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyRnscCs|jj�dS(N(RR(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyRrs(t__name__t
__module__RJRRRRR(((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyRs	B				t__main__sError running the demo script:
s
sTix Demo Error((R/R;R:tTkconstantsRQRRRRttkMessageBoxt	tracebacktTkRtsystexc_infotttvttbRtformat_exceptiontlinet	showerrortd(((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyt<module>s$
	[PKb1�Zzd��3	3	tix/samples/Tree.pyonu�[����
��^c@sfddlZddlZd�Zd�Zd�Zedkrbej�Zee�ej�ndS(i����NcCs+tj|dtjdd�}tj|dd�}|jdddtjdd	d
d	dtj�d|d�|d
<t|d�tj	|dtj
�}|jdddddd|jdd�|jdddddd|jdd�|jdtj
dtj�|jdtjdtjdd�dS(Ntrelieftbditoptionss
separator "/"texpandtfilltpadxi
tpadytsidecSs
t||�S(N(topendir(tdirtw((s-/usr/lib64/python2.7/Demo/tix/samples/Tree.pyt<lambda>ttopencmdt/torientationtokttexttOkt	underlineitcommandtwidthitcanceltCancel(tTixtFrametRAISEDtTreetpacktBOTHtLEFTtNonetadddirt	ButtonBoxt
HORIZONTALtaddtdestroytBOTTOMtXtTOP(R
ttopttreetbox((s-/usr/lib64/python2.7/Demo/tix/samples/Tree.pyt	RunSamples.
((cCs�|dkrd}ntjj|�}|jj|dtjd|d|jjddd��y!tj	|�|j
|d�Wntjk
r�nXdS(	NRtitemtypeRtimagettixtgetimagetfoldertopen(tostpathtbasenamethlistR#Rt	IMAGETEXTttktcalltlistdirtsetmodeterror(R)R	R((s-/usr/lib64/python2.7/Demo/tix/samples/Tree.pyR #s	
cCs�|jj|�}|r<x!|D]}|jj|�qWntj|�}x|D]w}tjj|d|�r�t||d|�qR|jj|d|dt	j
d|d|jjddd��qRWdS(NRR,RR-R.R/tfile(
R5t
info_childrent
show_entryR2R9R3tisdirR R#RR6R7R8(R)R	tentriestentrytfilesR<((s-/usr/lib64/python2.7/Demo/tix/samples/Tree.pyR9s

&t__main__(	RR2R+R Rt__name__tTktroottmainloop(((s-/usr/lib64/python2.7/Demo/tix/samples/Tree.pyt<module>s			
PKb1�Z��J��tix/samples/DirTree.pynu�[���# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
#
#       $Id$
#
# Tix Demonstration Program
#
# This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets.py":  it must have a
# procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone
# program using tixwish.

# This file demonstrates the use of the tixDirTree widget -- you can
# use it for the user to select a directory. For example, an installation
# program can use the tixDirTree widget to ask the user to select the
# installation directory for an application.
#

import Tix, os, copy
from Tkconstants import *

TCL_ALL_EVENTS          = 0

def RunSample (root):
    dirtree = DemoDirTree(root)
    dirtree.mainloop()
    dirtree.destroy()

class DemoDirTree:
    def __init__(self, w):
        self.root = w
        self.exit = -1

        z = w.winfo_toplevel()
        z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())

        # Create the tixDirTree and the tixLabelEntry widgets on the on the top
        # of the dialog box

        # bg = root.tk.eval('tix option get bg')
        # adding bg=bg crashes Windows pythonw tk8.3.3 Python 2.1.0

        top = Tix.Frame( w, relief=RAISED, bd=1)

        # Create the DirTree widget. By default it will show the current
        # directory
        #
        #
        top.dir = Tix.DirTree(top)
        top.dir.hlist['width'] = 40

        # When the user presses the ".." button, the selected directory
        # is "transferred" into the entry widget
        #
        top.btn = Tix.Button(top, text = "  >>  ", pady = 0)

        # We use a LabelEntry to hold the installation directory. The user
        # can choose from the DirTree widget, or he can type in the directory
        # manually
        #
        top.ent = Tix.LabelEntry(top, label="Installation Directory:",
                                  labelside = 'top',
                                  options = '''
                                  entry.width 40
                                  label.anchor w
                                  ''')

        self.dlist_dir = copy.copy(os.curdir)
        top.ent.entry['textvariable'] = self.dlist_dir
        top.btn['command'] = lambda dir=top.dir, ent=top.ent, self=self: \
                             self.copy_name(dir,ent)

        top.ent.entry.bind('<Return>', lambda self=self: self.okcmd () )

        top.pack( expand='yes', fill='both', side=TOP)
        top.dir.pack( expand=1, fill=BOTH, padx=4, pady=4, side=LEFT)
        top.btn.pack( anchor='s', padx=4, pady=4, side=LEFT)
        top.ent.pack( expand=1, fill=X, anchor='s', padx=4, pady=4, side=LEFT)

        # Use a ButtonBox to hold the buttons.
        #
        box = Tix.ButtonBox (w, orientation='horizontal')
        box.add ('ok', text='Ok', underline=0, width=6,
                     command = lambda self=self: self.okcmd () )
        box.add ('cancel', text='Cancel', underline=0, width=6,
                     command = lambda self=self: self.quitcmd () )

        box.pack( anchor='s', fill='x', side=BOTTOM)

    def copy_name (self, dir, ent):
        # This should work as it is the entry's textvariable
        self.dlist_dir = dir.cget('value')
        # but it isn't so I'll do it manually
        ent.entry.delete(0,'end')
        ent.entry.insert(0, self.dlist_dir)

    def okcmd (self):
        # tixDemo:Status "You have selected the directory" + self.dlist_dir
        self.quitcmd()

    def quitcmd (self):
        # tixDemo:Status "You have selected the directory" + self.dlist_dir
        self.exit = 0

    def mainloop(self):
        while self.exit < 0:
            self.root.tk.dooneevent(TCL_ALL_EVENTS)

    def destroy (self):
        self.root.destroy()

# This "if" statement makes it possible to run this script file inside or
# outside of the main demo program "tixwidgets.py".
#
if __name__== '__main__' :
    root=Tix.Tk()
    RunSample(root)
PKb1�Z�?�tix/samples/CmpImg.pyonu�[����
��^c@s`ddlZdZdZdZdZd�Zedkr\ej�Zee�ej	�ndS(i����Ns�/* XPM */
static char * netw_xpm[] = {
/* width height ncolors chars_per_pixel */
"32 32 7 1",
/* colors */
"       s None  c None",
".      c #000000000000",
"X      c white",
"o      c #c000c000c000",
"O      c #404040",
"+      c blue",
"@      c red",
/* pixels */
"                                ",
"                 .............. ",
"                 .XXXXXXXXXXXX. ",
"                 .XooooooooooO. ",
"                 .Xo.......XoO. ",
"                 .Xo.++++o+XoO. ",
"                 .Xo.++++o+XoO. ",
"                 .Xo.++oo++XoO. ",
"                 .Xo.++++++XoO. ",
"                 .Xo.+o++++XoO. ",
"                 .Xo.++++++XoO. ",
"                 .Xo.XXXXXXXoO. ",
"                 .XooooooooooO. ",
"                 .Xo@ooo....oO. ",
" ..............  .XooooooooooO. ",
" .XXXXXXXXXXXX.  .XooooooooooO. ",
" .XooooooooooO.  .OOOOOOOOOOOO. ",
" .Xo.......XoO.  .............. ",
" .Xo.++++o+XoO.        @        ",
" .Xo.++++o+XoO.        @        ",
" .Xo.++oo++XoO.        @        ",
" .Xo.++++++XoO.        @        ",
" .Xo.+o++++XoO.        @        ",
" .Xo.++++++XoO.      .....      ",
" .Xo.XXXXXXXoO.      .XXX.      ",
" .XooooooooooO.@@@@@@.X O.      ",
" .Xo@ooo....oO.      .OOO.      ",
" .XooooooooooO.      .....      ",
" .XooooooooooO.                 ",
" .OOOOOOOOOOOO.                 ",
" ..............                 ",
"                                "};
su/* XPM */
static char * drivea_xpm[] = {
/* width height ncolors chars_per_pixel */
"32 32 5 1",
/* colors */
"       s None  c None",
".      c #000000000000",
"X      c white",
"o      c #c000c000c000",
"O      c #800080008000",
/* pixels */
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"   ..........................   ",
"   .XXXXXXXXXXXXXXXXXXXXXXXo.   ",
"   .XooooooooooooooooooooooO.   ",
"   .Xooooooooooooooooo..oooO.   ",
"   .Xooooooooooooooooo..oooO.   ",
"   .XooooooooooooooooooooooO.   ",
"   .Xoooooooo.......oooooooO.   ",
"   .Xoo...................oO.   ",
"   .Xoooooooo.......oooooooO.   ",
"   .XooooooooooooooooooooooO.   ",
"   .XooooooooooooooooooooooO.   ",
"   .XooooooooooooooooooooooO.   ",
"   .XooooooooooooooooooooooO.   ",
"   .oOOOOOOOOOOOOOOOOOOOOOOO.   ",
"   ..........................   ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                "};
su
#define netw_width 32
#define netw_height 32
static unsigned char netw_bits[] = {
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x02, 0x40,
   0x00, 0x00, 0xfa, 0x5f, 0x00, 0x00, 0x0a, 0x50, 0x00, 0x00, 0x0a, 0x52,
   0x00, 0x00, 0x0a, 0x52, 0x00, 0x00, 0x8a, 0x51, 0x00, 0x00, 0x0a, 0x50,
   0x00, 0x00, 0x4a, 0x50, 0x00, 0x00, 0x0a, 0x50, 0x00, 0x00, 0x0a, 0x50,
   0x00, 0x00, 0xfa, 0x5f, 0x00, 0x00, 0x02, 0x40, 0xfe, 0x7f, 0x52, 0x55,
   0x02, 0x40, 0xaa, 0x6a, 0xfa, 0x5f, 0xfe, 0x7f, 0x0a, 0x50, 0xfe, 0x7f,
   0x0a, 0x52, 0x80, 0x00, 0x0a, 0x52, 0x80, 0x00, 0x8a, 0x51, 0x80, 0x00,
   0x0a, 0x50, 0x80, 0x00, 0x4a, 0x50, 0x80, 0x00, 0x0a, 0x50, 0xe0, 0x03,
   0x0a, 0x50, 0x20, 0x02, 0xfa, 0xdf, 0x3f, 0x03, 0x02, 0x40, 0xa0, 0x02,
   0x52, 0x55, 0xe0, 0x03, 0xaa, 0x6a, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00,
   0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
s{
#define drivea_width 32
#define drivea_height 32
static unsigned char drivea_bits[] = {
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0xf8, 0xff, 0xff, 0x1f, 0x08, 0x00, 0x00, 0x18, 0xa8, 0xaa, 0xaa, 0x1a,
   0x48, 0x55, 0xd5, 0x1d, 0xa8, 0xaa, 0xaa, 0x1b, 0x48, 0x55, 0x55, 0x1d,
   0xa8, 0xfa, 0xaf, 0x1a, 0xc8, 0xff, 0xff, 0x1d, 0xa8, 0xfa, 0xaf, 0x1a,
   0x48, 0x55, 0x55, 0x1d, 0xa8, 0xaa, 0xaa, 0x1a, 0x48, 0x55, 0x55, 0x1d,
   0xa8, 0xaa, 0xaa, 0x1a, 0xf8, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x1f,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
cCs�tjddt�|_|js<tjddt�|_ntjddt�|_|jsxtjddt�|_ntj|dddddd	�}tj|dddddd	�}tjd
d|�|_	|j	j
jt|j	�dd
�|j	j
jt|j	�dddddd�|j	j
jt|j	�dddd�|j	j
jt|j	�ddd|j�|j	|d<tjd
d|�|_
|j
j
jt|j
�dd
�|j
j
jt|j
�dddddd�|j
j
jt|j
�dddd�|j
j
jt|j
�ddd|j�|j
|d<tj|ddddd|d��}|jdtjdddddtjdd�|jdtjdddddtjdd�|jdtjdddddtjdd�dS( Ntpixmaptdatatbitmaptpadxitpadyitwidthixtcompoundtwindowtaddtlinettexts-texts	Hard Disks
-underlinet0tspaces-widtht7timages-imagetNetworktClosetcommandcSs
|j�S(N(tdestroy(tw((s//usr/lib64/python2.7/Demo/tix/samples/CmpImg.pyt<lambda>�ttsidei
tfilltexpand(tTixtImagetnetwork_pixmaptimg0tnetwork_bitmapthard_disk_pixmaptimg1thard_disk_bitmaptButtonthdd_imgttktcalltstrtnet_imgtpacktLEFTtY(Rthddtnettclose((s//usr/lib64/python2.7/Demo/tix/samples/CmpImg.pyt	RunSample�s6		!!"$
(+
"$
(+
..t__main__(
RRRRR R-t__name__tTktroottmainloop(((s//usr/lib64/python2.7/Demo/tix/samples/CmpImg.pyt<module>s/-	/
PKb1�Zi�|##tix/samples/Control.pynu�[���# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
#
# $Id$
#
# Tix Demonstration Program
#
# This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone
# program.

# This file demonstrates the use of the tixControl widget -- it is an
# entry widget with up/down arrow buttons. You can use the arrow buttons
# to adjust the value inside the entry widget.
#
# This example program uses three Control widgets. One lets you select
# integer values; one lets you select floating point values and the last
# one lets you select a few names.

import Tix

TCL_ALL_EVENTS          = 0

def RunSample (root):
    control = DemoControl(root)
    control.mainloop()
    control.destroy()

class DemoControl:
    def __init__(self, w):
        self.root = w
        self.exit = -1

        global demo_maker, demo_thrust, demo_num_engines

        demo_maker = Tix.StringVar()
        demo_thrust = Tix.DoubleVar()
        demo_num_engines = Tix.IntVar()
        demo_maker.set('P&W')
        demo_thrust.set(20000.0)
        demo_num_engines.set(2)

        top = Tix.Frame(w, bd=1, relief=Tix.RAISED)

        # $w.top.a allows only integer values
        #
        # [Hint] The -options switch sets the options of the subwidgets.
        # [Hint] We set the label.width subwidget option of the Controls to
        #        be 16 so that their labels appear to be aligned.
        #
        a = Tix.Control(top, label='Number of Engines: ', integer=1,
                        variable=demo_num_engines, min=1, max=4,
                        options='entry.width 10 label.width 20 label.anchor e')

        b = Tix.Control(top, label='Thrust: ', integer=0,
                        min='10000.0', max='60000.0', step=500,
                        variable=demo_thrust,
                        options='entry.width 10 label.width 20 label.anchor e')

        c = Tix.Control(top, label='Engine Maker: ', value='P&W',
                        variable=demo_maker,
                        options='entry.width 10 label.width 20 label.anchor e')

        # We can't define these in the init because the widget 'c' doesn't
        # exist yet and we need to reference it
        c['incrcmd'] = lambda w=c: adjust_maker(w, 1)
        c['decrcmd'] = lambda w=c: adjust_maker(w, -1)
        c['validatecmd'] = lambda w=c: validate_maker(w)

        a.pack(side=Tix.TOP, anchor=Tix.W)
        b.pack(side=Tix.TOP, anchor=Tix.W)
        c.pack(side=Tix.TOP, anchor=Tix.W)

        box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL)
        box.add('ok', text='Ok', underline=0, width=6,
                command=self.okcmd)
        box.add('cancel', text='Cancel', underline=0, width=6,
                command=self.quitcmd)
        box.pack(side=Tix.BOTTOM, fill=Tix.X)
        top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)

    def okcmd (self):
        # tixDemo:Status "Selected %d of %s engines each of thrust %d", (demo_num_engines.get(), demo_maker.get(), demo_thrust.get())
        self.quitcmd()

    def quitcmd (self):
        self.exit = 0

    def mainloop(self):
        while self.exit < 0:
            self.root.tk.dooneevent(TCL_ALL_EVENTS)

    def destroy (self):
        self.root.destroy()

maker_list = ['P&W', 'GE', 'Rolls Royce']

def adjust_maker(w, inc):
    i = maker_list.index(demo_maker.get())
    i = i + inc
    if i >= len(maker_list):
        i = 0
    elif i < 0:
        i = len(maker_list) - 1

    # In Tcl/Tix we should return the string maker_list[i]. We can't
    # do that in Tkinter so we set the global variable. (This works).
    demo_maker.set(maker_list[i])

def validate_maker(w):
    try:
        i = maker_list.index(demo_maker.get())
    except ValueError:
        # Works here though. Why ? Beats me.
        return maker_list[0]
    # Works here though. Why ? Beats me.
    return maker_list[i]

if __name__ == '__main__':
    root = Tix.Tk()
    RunSample(root)
PKb1�ZB~g��tix/samples/SHList2.pycnu�[����
��^c@sWddlZdZd�Zddd��YZedkrSej�Zee�ndS(i����NicCs$t|�}|j�|j�dS(N(t
DemoSHListtmainlooptdestroy(troottshlist((s0/usr/lib64/python2.7/Demo/tix/samples/SHList2.pyt	RunSamples
RcBs5eZd�Zd�Zd�Zd�Zd�ZRS(cCs%||_d|_|j�}|jd|d��tj|dtjdd�}tj|dd�|_|jj	d	dd
tj
ddd
ddtj�|jj}|j
jdddd�}i}tjtjd|dtjddd
dd|�|d<|jddtjddd|d�|jddtjddd|d�|jdd�dN}dOdPdQg}dRdSdTdUdVdWdXg}	tjtjd|�|d:<tjtjddd|�|d;<tjtjd|�|d<<tjtjddd|�|d=<|jd>d?d@dAdBddCd�|jddDdE�|jd?dtjd|dd|d:�|jd?ddtjd|dd|d;�xp|D]h\}
}}d?|
}
|j|
dtjd|d|d:�|j|
ddtjd|d|d;�q�Wxr|	D]j\}
}}}d?|d?|
}|j|d|d|d<�|j|ddtjd|d|d=�q
Wtj|dFtj�}|jdGddHdIdd@dJdK|j�|jdLddMdIdd@dJdK|j�|j	dtjd
tj�|j	dtjd
tj
d	d�dS(YNi����tWM_DELETE_WINDOWcSs
|j�S(N(tquitcmd(tself((s0/usr/lib64/python2.7/Demo/tix/samples/SHList2.pyt<lambda>"ttrelieftbditoptionsshlist.columns 3 hlist.header 1texpandtfilltpadxi
tpadytsidettixtoptiontgett	bold_fontt	refwindowtanchoriitfonttheaderititemtypettexttNametstyletPositiontdoesJohn DoetDirectortjeffsJeff WaxmantManagertjohnsJohn LeetpetersPeter KensontalexsAlex KellmantClerktalans
Alan AdamstandysAndreas CrawfordtSalesmantdougs
Douglas Bloomtjons
Jon BarakitchrissChris GeoffreytchucksChuck McLeantCleanertmgr_nametmgr_posnt	empl_namet	empl_posnt	separatort.twidthit
drawbranchtindenttcharsitorientationtoktOkt	underlineitcommandtcanceltCancel(R sJohn DoeR!(R"sJeff WaxmanR#(R$sJohn LeeR#(R%sPeter KensonR#(R&R$sAlex KellmanR'(R(R$s
Alan AdamsR'(R)R%sAndreas CrawfordR*(R+R"s
Douglas BloomR'(R,R%s
Jon BarakiR*(R-R"sChris GeoffreyR'(R.R"sChuck McLeanR/(Rtexittwinfo_topleveltwm_protocoltTixtFrametRAISEDt
ScrolledHListtatpacktBOTHtTOPthlistttktcalltDisplayStyletTEXTtCENTERt
header_createtcolumn_widthtconfigtaddtitem_createt	ButtonBoxt
HORIZONTALtokcmdRtBOTTOMtX(RtwtzttopRLtboldfontRtbosstmanagerst	employeestkeytnametposntetmgrt	entrypathtbox((s0/usr/lib64/python2.7/Demo/tix/samples/SHList2.pyt__init__sp		1"		""""


cCs|j�dS(N(R(R((s0/usr/lib64/python2.7/Demo/tix/samples/SHList2.pyRY�scCs
d|_dS(Ni(RA(R((s0/usr/lib64/python2.7/Demo/tix/samples/SHList2.pyR�scCs-x&|jdkr(|jjjt�qWdS(Ni(RARRMt
dooneeventtTCL_ALL_EVENTS(R((s0/usr/lib64/python2.7/Demo/tix/samples/SHList2.pyR�scCs|jj�dS(N(RR(R((s0/usr/lib64/python2.7/Demo/tix/samples/SHList2.pyR�s(t__name__t
__module__RjRYRRR(((s0/usr/lib64/python2.7/Demo/tix/samples/SHList2.pyRs
	x			t__main__((RDRlRRRmtTkR(((s0/usr/lib64/python2.7/Demo/tix/samples/SHList2.pyt<module>s	�PKb1�Zs�Rgtix/samples/SHList2.pynu�[���# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
#
# $Id$
#
# Tix Demonstration Program
#
# This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidget": it must have a
# procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone
# program using tixwish.

# This file demonstrates how to use multiple columns and multiple styles
# in the tixHList widget
#
# In a tixHList widget, you can have one ore more columns.
#

import Tix

TCL_ALL_EVENTS          = 0

def RunSample (root):
    shlist = DemoSHList(root)
    shlist.mainloop()
    shlist.destroy()

class DemoSHList:
    def __init__(self, w):
        self.root = w
        self.exit = -1

        z = w.winfo_toplevel()
        z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())

        # We create the frame and the ScrolledHList widget
        # at the top of the dialog box
        #
        top = Tix.Frame( w, relief=Tix.RAISED, bd=1)

        # Put a simple hierachy into the HList (two levels). Use colors and
        # separator widgets (frames) to make the list look fancy
        #
        top.a = Tix.ScrolledHList(top, options='hlist.columns 3 hlist.header 1' )
        top.a.pack( expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.TOP)

        hlist=top.a.hlist

        # Create the title for the HList widget
        #       >> Notice that we have set the hlist.header subwidget option to true
        #      so that the header is displayed
        #

        boldfont=hlist.tk.call('tix','option','get','bold_font')

        # First some styles for the headers
        style={}
        style['header'] = Tix.DisplayStyle(Tix.TEXT, refwindow=hlist,
            anchor=Tix.CENTER, padx=8, pady=2, font = boldfont )

        hlist.header_create(0, itemtype=Tix.TEXT, text='Name',
            style=style['header'])
        hlist.header_create(1, itemtype=Tix.TEXT, text='Position',
            style=style['header'])

        # Notice that we use 3 columns in the hlist widget. This way when the user
        # expands the windows wide, the right side of the header doesn't look
        # chopped off. The following line ensures that the 3 column header is
        # not shown unless the hlist window is wider than its contents.
        #
        hlist.column_width(2,0)

        # This is our little relational database
        #
        boss = ('doe', 'John Doe',      'Director')

        managers = [
            ('jeff',  'Jeff Waxman',    'Manager'),
            ('john',  'John Lee',               'Manager'),
            ('peter', 'Peter Kenson',   'Manager')
        ]

        employees = [
            ('alex',  'john',   'Alex Kellman',         'Clerk'),
            ('alan',  'john',       'Alan Adams',               'Clerk'),
            ('andy',  'peter',      'Andreas Crawford', 'Salesman'),
            ('doug',  'jeff',       'Douglas Bloom',    'Clerk'),
            ('jon',   'peter',      'Jon Baraki',               'Salesman'),
            ('chris', 'jeff',       'Chris Geoffrey',   'Clerk'),
            ('chuck', 'jeff',       'Chuck McLean',             'Cleaner')
        ]

        style['mgr_name'] = Tix.DisplayStyle(Tix.TEXT, refwindow=hlist)

        style['mgr_posn'] = Tix.DisplayStyle(Tix.TEXT, padx=8, refwindow=hlist)

        style['empl_name'] = Tix.DisplayStyle(Tix.TEXT, refwindow=hlist)

        style['empl_posn'] = Tix.DisplayStyle(Tix.TEXT, padx=8, refwindow=hlist)

        # Let configure the appearance of the HList subwidget
        #
        hlist.config(separator='.', width=25, drawbranch=0, indent=10)
        hlist.column_width(0, chars=20)

        # Create the boss
        #
        hlist.add ('.',           itemtype=Tix.TEXT, text=boss[1],
            style=style['mgr_name'])
        hlist.item_create('.', 1, itemtype=Tix.TEXT, text=boss[2],
            style=style['mgr_posn'])

        # Create the managers
        #

        for key,name,posn in managers :
            e= '.'+ key
            hlist.add(e, itemtype=Tix.TEXT, text=name,
                style=style['mgr_name'])
            hlist.item_create(e, 1, itemtype=Tix.TEXT, text=posn,
                style=style['mgr_posn'])


        for key,mgr,name,posn in employees :
            # "." is the separator character we chose above

            entrypath = '.' + mgr        + '.' + key

            #           ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
            #       parent entryPath / child's name

            hlist.add(entrypath, text=name, style=style['empl_name'])
            hlist.item_create(entrypath, 1, itemtype=Tix.TEXT,
                text = posn, style = style['empl_posn'] )


        # Use a ButtonBox to hold the buttons.
        #
        box= Tix.ButtonBox(top, orientation=Tix.HORIZONTAL )
        box.add( 'ok',  text='Ok', underline=0,  width=6,
            command = self.okcmd )

        box.add( 'cancel', text='Cancel', underline=0, width=6,
            command = self.quitcmd )

        box.pack( side=Tix.BOTTOM, fill=Tix.X)
        top.pack( side=Tix.TOP,    fill=Tix.BOTH, expand=1 )

    def okcmd (self):
        self.quitcmd()

    def quitcmd (self):
        self.exit = 0

    def mainloop(self):
        while self.exit < 0:
            self.root.tk.dooneevent(TCL_ALL_EVENTS)

    def destroy (self):
        self.root.destroy()


# This "if" statement makes it possible to run this script file inside or
# outside of the main demo program "tixwidgets.py".
#
if __name__== '__main__' :
    root=Tix.Tk()
    RunSample(root)
PKb1�Z7�:�BBtix/samples/BtnBox.pyonu�[����
��^c@sHddlZd�ZedkrDej�Zee�ej�ndS(i����NcCs�tj|dddddddtjdtjd	d
�}tj|dtj�}|jdd	d
ddddd|d��|jdd	dddddd|d��|jdtjdtj	�|jdtj
dtjdd�dS(Ntpadxitpadyi
tbditrelieftanchorttexts?This dialog box is
 a demonstration of the
 tixButtonBox widgettorientationtoktOKt	underlineitwidthitcommandcSs
|j�S(N(tdestroy(tw((s//usr/lib64/python2.7/Demo/tix/samples/BtnBox.pyt<lambda>#ttclosetCancelcSs
|j�S(N(R(R
((s//usr/lib64/python2.7/Demo/tix/samples/BtnBox.pyR%Rtsidetfilltexpand(tTixtLabeltRAISEDtCENTERt	ButtonBoxt
HORIZONTALtaddtpacktBOTTOMtXtTOPtBOTH(R
ttoptbox((s//usr/lib64/python2.7/Demo/tix/samples/BtnBox.pyt	RunSamples'	

t__main__(RR#t__name__tTktroottmainloop(((s//usr/lib64/python2.7/Demo/tix/samples/BtnBox.pyt<module>s
	
PKb1�Z���88tix/samples/PopMenu.pynu�[���# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
#
#       $Id$
#
# Tix Demonstration Program
#
# This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone
# program using tixwish.

# This file demonstrates the use of the tixPopupMenu widget.
#
import Tix

def RunSample(w):
    # We create the frame and the button, then we'll bind the PopupMenu
    # to both widgets. The result is, when you press the right mouse
    # button over $w.top or $w.top.but, the PopupMenu will come up.
    #
    top = Tix.Frame(w, relief=Tix.RAISED, bd=1)
    but = Tix.Button(top, text='Press the right mouse button over this button or its surrounding area')
    but.pack(expand=1, fill=Tix.BOTH, padx=50, pady=50)

    p = Tix.PopupMenu(top, title='Popup Test')
    p.bind_widget(top)
    p.bind_widget(but)

    # Set the entries inside the PopupMenu widget.
    # [Hint] You have to manipulate the "menu" subwidget.
    #        $w.top.p itself is NOT a menu widget.
    # [Hint] Watch carefully how the sub-menu is created
    #
    p.menu.add_command(label='Desktop', underline=0)
    p.menu.add_command(label='Select', underline=0)
    p.menu.add_command(label='Find', underline=0)
    p.menu.add_command(label='System', underline=1)
    p.menu.add_command(label='Help', underline=0)
    m1 = Tix.Menu(p.menu)
    m1.add_command(label='Hello')
    p.menu.add_cascade(label='More', menu=m1)

    but.pack(side=Tix.TOP, padx=40, pady=50)

    box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL)
    box.add('ok', text='Ok', underline=0, width=6,
            command=lambda w=w: w.destroy())
    box.add('cancel', text='Cancel', underline=0, width=6,
            command=lambda w=w: w.destroy())
    box.pack(side=Tix.BOTTOM, fill=Tix.X)
    top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)

if __name__ == '__main__':
    root = Tix.Tk()
    RunSample(root)
    root.mainloop()
PKb1�Z*MB��
�
tix/samples/ComboBox.pyonu�[����
��^c@siddlZd�Zdd�Zdd�Zd�Zedkreej�Zee�ej	�ndS(i����NcCs�tj|dddtj�}tj�atj�atj|dddddtdd	d
tdd�}tj|dd
dd	dtddd
tdd�}|j	dtj
dtj�|j	dtj
dtj�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d �|jtj
d!�|jd�|jd �tj|d"tj�}|jd#d$d%d&d	d'd(d|d)��|jd*d$d+d&d	d'd(d|d,��|j	dtjd-tj�|j	dtj
d-tjd.d�dS(/NtbditrelieftlabelsMonth: tdropdowntcommandteditableitvariabletoptionss.listbox.height 6 label.width 10 label.anchor esYear: s<listbox.height 4 label.padY 5 label.width 10 label.anchor netsidetanchortJanuarytFebruarytMarchtApriltMaytJunetJulytAugustt	SeptembertOctobertNovembertDecembert1992t1993t1994t1995t1996torientationtokttexttOkt	underlinetwidthicSs
t|�S(N(t
ok_command(tw((s1/usr/lib64/python2.7/Demo/tix/samples/ComboBox.pyt<lambda>QttcanceltCancelcSs
|j�S(N(tdestroy(R"((s1/usr/lib64/python2.7/Demo/tix/samples/ComboBox.pyR#SR$tfilltexpand(tTixtFrametRAISEDt	StringVart
demo_montht	demo_yeartComboBoxtselect_monthtselect_yeartpacktTOPtWtinserttENDt
set_silentt	ButtonBoxt
HORIZONTALtaddtBOTTOMtXtBOTH(R"ttoptatbtbox((s1/usr/lib64/python2.7/Demo/tix/samples/ComboBox.pyt	RunSamplesJ			



cCsdS(N((tevent((s1/usr/lib64/python2.7/Demo/tix/samples/ComboBox.pyR1WscCsdS(N((RD((s1/usr/lib64/python2.7/Demo/tix/samples/ComboBox.pyR2[scCs|j�dS(N(R'(R"((s1/usr/lib64/python2.7/Demo/tix/samples/ComboBox.pyR!_st__main__(
R*RCtNoneR1R2R!t__name__tTktroottmainloop(((s1/usr/lib64/python2.7/Demo/tix/samples/ComboBox.pyt<module>s	E	
PKb1�ZB~g��tix/samples/SHList2.pyonu�[����
��^c@sWddlZdZd�Zddd��YZedkrSej�Zee�ndS(i����NicCs$t|�}|j�|j�dS(N(t
DemoSHListtmainlooptdestroy(troottshlist((s0/usr/lib64/python2.7/Demo/tix/samples/SHList2.pyt	RunSamples
RcBs5eZd�Zd�Zd�Zd�Zd�ZRS(cCs%||_d|_|j�}|jd|d��tj|dtjdd�}tj|dd�|_|jj	d	dd
tj
ddd
ddtj�|jj}|j
jdddd�}i}tjtjd|dtjddd
dd|�|d<|jddtjddd|d�|jddtjddd|d�|jdd�dN}dOdPdQg}dRdSdTdUdVdWdXg}	tjtjd|�|d:<tjtjddd|�|d;<tjtjd|�|d<<tjtjddd|�|d=<|jd>d?d@dAdBddCd�|jddDdE�|jd?dtjd|dd|d:�|jd?ddtjd|dd|d;�xp|D]h\}
}}d?|
}
|j|
dtjd|d|d:�|j|
ddtjd|d|d;�q�Wxr|	D]j\}
}}}d?|d?|
}|j|d|d|d<�|j|ddtjd|d|d=�q
Wtj|dFtj�}|jdGddHdIdd@dJdK|j�|jdLddMdIdd@dJdK|j�|j	dtjd
tj�|j	dtjd
tj
d	d�dS(YNi����tWM_DELETE_WINDOWcSs
|j�S(N(tquitcmd(tself((s0/usr/lib64/python2.7/Demo/tix/samples/SHList2.pyt<lambda>"ttrelieftbditoptionsshlist.columns 3 hlist.header 1texpandtfilltpadxi
tpadytsidettixtoptiontgett	bold_fontt	refwindowtanchoriitfonttheaderititemtypettexttNametstyletPositiontdoesJohn DoetDirectortjeffsJeff WaxmantManagertjohnsJohn LeetpetersPeter KensontalexsAlex KellmantClerktalans
Alan AdamstandysAndreas CrawfordtSalesmantdougs
Douglas Bloomtjons
Jon BarakitchrissChris GeoffreytchucksChuck McLeantCleanertmgr_nametmgr_posnt	empl_namet	empl_posnt	separatort.twidthit
drawbranchtindenttcharsitorientationtoktOkt	underlineitcommandtcanceltCancel(R sJohn DoeR!(R"sJeff WaxmanR#(R$sJohn LeeR#(R%sPeter KensonR#(R&R$sAlex KellmanR'(R(R$s
Alan AdamsR'(R)R%sAndreas CrawfordR*(R+R"s
Douglas BloomR'(R,R%s
Jon BarakiR*(R-R"sChris GeoffreyR'(R.R"sChuck McLeanR/(Rtexittwinfo_topleveltwm_protocoltTixtFrametRAISEDt
ScrolledHListtatpacktBOTHtTOPthlistttktcalltDisplayStyletTEXTtCENTERt
header_createtcolumn_widthtconfigtaddtitem_createt	ButtonBoxt
HORIZONTALtokcmdRtBOTTOMtX(RtwtzttopRLtboldfontRtbosstmanagerst	employeestkeytnametposntetmgrt	entrypathtbox((s0/usr/lib64/python2.7/Demo/tix/samples/SHList2.pyt__init__sp		1"		""""


cCs|j�dS(N(R(R((s0/usr/lib64/python2.7/Demo/tix/samples/SHList2.pyRY�scCs
d|_dS(Ni(RA(R((s0/usr/lib64/python2.7/Demo/tix/samples/SHList2.pyR�scCs-x&|jdkr(|jjjt�qWdS(Ni(RARRMt
dooneeventtTCL_ALL_EVENTS(R((s0/usr/lib64/python2.7/Demo/tix/samples/SHList2.pyR�scCs|jj�dS(N(RR(R((s0/usr/lib64/python2.7/Demo/tix/samples/SHList2.pyR�s(t__name__t
__module__RjRYRRR(((s0/usr/lib64/python2.7/Demo/tix/samples/SHList2.pyRs
	x			t__main__((RDRlRRRmtTkR(((s0/usr/lib64/python2.7/Demo/tix/samples/SHList2.pyt<module>s	�PKb1�Z�N���	�	tix/samples/OptMenu.pynu�[���# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
#
# $Id$
#
# Tix Demonstration Program
#
# This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone
# program.

# This file demonstrates the use of the tixOptionMenu widget -- you can
# use it for the user to choose from a fixed set of options
#
import Tix

options = {'text':'Plain Text', 'post':'PostScript', 'html':'HTML',
           'tex':'LaTeX', 'rtf':'Rich Text Format'}

def RunSample(w):
    global demo_opt_from, demo_opt_to

    demo_opt_from = Tix.StringVar()
    demo_opt_to = Tix.StringVar()

    top = Tix.Frame(w, bd=1, relief=Tix.RAISED)

    from_file = Tix.OptionMenu(top, label="From File Format : ",
                               variable=demo_opt_from,
                               options = 'label.width  19 label.anchor e menubutton.width 15')

    to_file = Tix.OptionMenu(top, label="To File Format : ",
                             variable=demo_opt_to,
                             options='label.width  19 label.anchor e menubutton.width 15')

    # Add the available options to the two OptionMenu widgets
    #
    # [Hint] You have to add the options first before you set the
    #        global variables "demo_opt_from" and "demo_opt_to". Otherwise
    #        the OptionMenu widget will complain about "unknown options"!
    #
    for opt in options.keys():
        from_file.add_command(opt, label=options[opt])
        to_file.add_command(opt, label=options[opt])

    demo_opt_from.set('html')
    demo_opt_to.set('post')

    from_file.pack(side=Tix.TOP, anchor=Tix.W, pady=3, padx=6)
    to_file.pack(side=Tix.TOP, anchor=Tix.W, pady=3, padx=6)

    box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL)
    box.add('ok', text='Ok', underline=0, width=6,
            command=lambda w=w: ok_command(w))
    box.add('cancel', text='Cancel', underline=0, width=6,
            command=lambda w=w: w.destroy())
    box.pack(side=Tix.BOTTOM, fill=Tix.X)
    top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)

def ok_command(w):
    # tixDemo:Status "Convert file from %s to %s" % ( demo_opt_from.get(), demo_opt_to.get())
    w.destroy()

if __name__ == '__main__':
    root = Tix.Tk()
    RunSample(root)
    root.mainloop()
PKb1�Z���aatix/samples/SHList1.pycnu�[����
��^c@sWddlZdZd�Zddd��YZedkrSej�Zee�ndS(i����NicCs$t|�}|j�|j�dS(N(t
DemoSHListtmainlooptdestroy(troottshlist((s0/usr/lib64/python2.7/Demo/tix/samples/SHList1.pyt	RunSamples
RcBs5eZd�Zd�Zd�Zd�Zd�ZRS(c
Cst||_d|_|j�}|jd|d��tj|dtjdd�}tj|�|_|jj	dddtj
d	d
dd
dtj�d9d:d;g}d<d=d>d?d@dAdBg}|jj}|j
d!d"d#d$d%d&d'd
�d&}x�|D]�\}}	|retj|d(d)|d*d+d#d,dd+dtj�}
|jd-tjd.|
d/tj�n|j|d-tjd0|	�|d}q�Wx8|D]0\}}}	|d"|}|j|d0|	�q�Wtj|d1tj�}
|
jd2d0d3d4d&d#d5d6|j�|
jd7d0d8d4d&d#d5d6|j�|
j	dtjdtj�|j	dtjdtj
dd�dS(CNi����tWM_DELETE_WINDOWcSs
|j�S(N(tquitcmd(tself((s0/usr/lib64/python2.7/Demo/tix/samples/SHList1.pyt<lambda>ttrelieftbditexpandtfilltpadxi
tpadytsidetjeffsJeff WaxmantjohnsJohn LeetpetersPeter KensontalexsAlex Kellmantalans
Alan AdamstandysAndreas Crawfordtdougs
Douglas Bloomtjons
Jon BarakitchrissChris GeoffreytchucksChuck McLeant	separatort.twidthit
drawbranchitindenttnamessep%dtheightii�titemtypetwindowtstatettexttorientationtoktOkt	underlineitcommandtcanceltCancel(RsJeff Waxman(RsJohn Lee(RsPeter Kenson(RRsAlex Kellman(RRs
Alan Adams(RRsAndreas Crawford(RRs
Douglas Bloom(RRs
Jon Baraki(RRsChris Geoffrey(RRsChuck McLean(Rtexittwinfo_topleveltwm_protocoltTixtFrametRAISEDt
ScrolledHListtatpacktBOTHtTOPthlisttconfigtSUNKENt	add_childtWINDOWtDISABLEDtaddtTEXTt	ButtonBoxt
HORIZONTALtokcmdRtBOTTOMtX(Rtwtzttoptbossest	employeesR9tcounttbossR!tftpersontkeytbox((s0/usr/lib64/python2.7/Demo/tix/samples/SHList1.pyt__init__sL		1		""

cCs|j�dS(N(R(R((s0/usr/lib64/python2.7/Demo/tix/samples/SHList1.pyRCpscCs
d|_dS(Ni(R.(R((s0/usr/lib64/python2.7/Demo/tix/samples/SHList1.pyRsscCs-x&|jdkr(|jjjt�qWdS(Ni(R.Rttkt
dooneeventtTCL_ALL_EVENTS(R((s0/usr/lib64/python2.7/Demo/tix/samples/SHList1.pyRvscCs|jj�dS(N(RR(R((s0/usr/lib64/python2.7/Demo/tix/samples/SHList1.pyRzs(t__name__t
__module__RQRCRRR(((s0/usr/lib64/python2.7/Demo/tix/samples/SHList1.pyRs
	V			t__main__((R1RTRRRUtTkR(((s0/usr/lib64/python2.7/Demo/tix/samples/SHList1.pyt<module>s	hPKb1�Z���\
\
tix/samples/Balloon.pyonu�[����
��^c@sWddlZdZd�Zddd��YZedkrSej�Zee�ndS(i����NicCs$t|�}|j�|j�dS(N(tDemoBalloontmainlooptdestroy(troottballoon((s0/usr/lib64/python2.7/Demo/tix/samples/Balloon.pyt	RunSamples
RcBs,eZd�Zd�Zd�Zd�ZRS(c	Cs@||_d|_|j�}|jd|d��tj|dddtjdd�}|jd	tjd
tj	ddd
d�tj
|ddd|j�}tj
|dd�}|d�|d<|jd	tjdd�|jd	tjdd�tj
|d|�}|j|dddd�|j|dddd�dS(Ni����tWM_DELETE_WINDOWcSs
|j�S(N(tquitcmd(tself((s0/usr/lib64/python2.7/Demo/tix/samples/Balloon.pyt<lambda>!ttwidthi(trelieftbditsidetfilltpadxitpadyttextsSomething UnexpectedtcommandsSomething Else UnexpectedcSs
|j�S(N(R(tw((s0/usr/lib64/python2.7/Demo/tix/samples/Balloon.pyR	*R
texpandt	statusbart
balloonmsgsClose Windowt	statusmsgs&Press this button to close this windowsSelf-destruct buttons,Press this button and it will destroy itself(Rtexittwinfo_topleveltwm_protocoltTixtLabeltSUNKENtpacktBOTTOMtYtButtonRtTOPtBalloontbind_widget(RRtztstatustbutton1tbutton2tb((s0/usr/lib64/python2.7/Demo/tix/samples/Balloon.pyt__init__s"		$(cCs
d|_dS(Ni(R(R((s0/usr/lib64/python2.7/Demo/tix/samples/Balloon.pyR7scCsAd}x4|jdkr<|dkr<|jjjt�}q	WdS(Nii(RRttkt
dooneeventtTCL_ALL_EVENTS(Rt
foundEvent((s0/usr/lib64/python2.7/Demo/tix/samples/Balloon.pyR:scCs|jj�dS(N(RR(R((s0/usr/lib64/python2.7/Demo/tix/samples/Balloon.pyR?s(t__name__t
__module__R+RRR(((s0/usr/lib64/python2.7/Demo/tix/samples/Balloon.pyRs			t__main__((RR.RRR0tTkR(((s0/usr/lib64/python2.7/Demo/tix/samples/Balloon.pyt<module>s	'PKb1�Z�-����tix/samples/PanedWin.pynu�[���# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
#
# $Id$
#
# Tix Demonstration Program
#
# This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone
# program.

# This file demonstrates the use of the tixPanedWindow widget. This program
# is a dummy news reader: the user can adjust the sizes of the list
# of artical names and the size of the text widget that shows the body
# of the article.

import Tix

TCL_ALL_EVENTS          = 0

def RunSample (root):
    panedwin = DemoPanedwin(root)
    panedwin.mainloop()
    panedwin.destroy()

class DemoPanedwin:
    def __init__(self, w):
        self.root = w
        self.exit = -1

        z = w.winfo_toplevel()
        z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())

        group = Tix.LabelEntry(w, label='Newsgroup:', options='entry.width 25')
        group.entry.insert(0,'comp.lang.python')
        pane = Tix.PanedWindow(w, orientation='vertical')

        p1 = pane.add('list', min=70, size=100)
        p2 = pane.add('text', min=70)
        list = Tix.ScrolledListBox(p1)
        list.listbox['width'] = 80
        list.listbox['height'] = 5
        text = Tix.ScrolledText(p2)
        text.text['width'] = 80
        text.text['height'] = 20

        list.listbox.insert(Tix.END, "  12324 Re: Tkinter is good for your health")
        list.listbox.insert(Tix.END, "+ 12325 Re: Tkinter is good for your health")
        list.listbox.insert(Tix.END, "+ 12326 Re: Tix is even better for your health (Was: Tkinter is good...)")
        list.listbox.insert(Tix.END, "  12327 Re: Tix is even better for your health (Was: Tkinter is good...)")
        list.listbox.insert(Tix.END, "+ 12328 Re: Tix is even better for your health (Was: Tkinter is good...)")
        list.listbox.insert(Tix.END, "  12329 Re: Tix is even better for your health (Was: Tkinter is good...)")
        list.listbox.insert(Tix.END, "+ 12330 Re: Tix is even better for your health (Was: Tkinter is good...)")

        text.text['bg'] = list.listbox['bg']
        text.text['wrap'] = 'none'
        text.text.insert(Tix.END, """
    Mon, 19 Jun 1995 11:39:52        comp.lang.python              Thread   34 of  220
    Lines 353       A new way to put text and bitmaps together iNo responses
    ioi@blue.seas.upenn.edu                Ioi K. Lam at University of Pennsylvania

    Hi,

    I have implemented a new image type called "compound". It allows you
    to glue together a bunch of bitmaps, images and text strings together
    to form a bigger image. Then you can use this image with widgets that
    support the -image option. For example, you can display a text string string
    together with a bitmap, at the same time, inside a TK button widget.
    """)
        text.text['state'] = 'disabled'

        list.pack(expand=1, fill=Tix.BOTH, padx=4, pady=6)
        text.pack(expand=1, fill=Tix.BOTH, padx=4, pady=6)

        group.pack(side=Tix.TOP, padx=3, pady=3, fill=Tix.BOTH)
        pane.pack(side=Tix.TOP, padx=3, pady=3, fill=Tix.BOTH, expand=1)

        box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL)
        box.add('ok', text='Ok', underline=0, width=6,
                command=self.quitcmd)
        box.add('cancel', text='Cancel', underline=0, width=6,
                command=self.quitcmd)
        box.pack(side=Tix.BOTTOM, fill=Tix.X)

    def quitcmd (self):
        self.exit = 0

    def mainloop(self):
        while self.exit < 0:
            self.root.tk.dooneevent(TCL_ALL_EVENTS)

    def destroy (self):
        self.root.destroy()

if __name__ == '__main__':
    root = Tix.Tk()
    RunSample(root)
PKb1�Z�t��tix/samples/DirTree.pycnu�[����
��^c@syddlZddlZddlZddlTdZd�Zddd��YZedkruej�Z	ee	�ndS(	i����N(t*icCs$t|�}|j�|j�dS(N(tDemoDirTreetmainlooptdestroy(troottdirtree((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyt	RunSamples
RcBs>eZd�Zd�Zd�Zd�Zd�Zd�ZRS(c
Cs>||_d|_|j�}|jd|d��tj|dtdd�}tj|�|_d|jj	d<tj
|d	d
dd�|_tj|d
ddddd�|_
tjtj�|_|j|j
jd<|j|j
|d�|jd<|j
jjd|d��|jdddddt�|jjdddtdddddt�|jjdd dddddt�|j
jdddtdd dddddt�tj|d!d"�}|jd#d	d$d%ddd&d|d'��|jd(d	d)d%ddd&d|d*��|jdd dd+dt�dS(,Ni����tWM_DELETE_WINDOWcSs
|j�S(N(tquitcmd(tself((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyt<lambda>#ttrelieftbdii(twidthttexts  >>  tpadyitlabelsInstallation Directory:t	labelsidettoptoptionss�
                                  entry.width 40
                                  label.anchor w
                                  ttextvariablecSs|j||�S(N(t	copy_name(tdirtentR	((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyR
Fstcommands<Return>cSs
|j�S(N(tokcmd(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyR
IRtexpandtyestfilltbothtsidetpadxitanchortstorientationt
horizontaltoktOkt	underlineicSs
|j�S(N(R(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyR
TRtcanceltCancelcSs
|j�S(N(R(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyR
VRtx(Rtexittwinfo_topleveltwm_protocoltTixtFrametRAISEDtDirTreeRthlisttButtontbtnt
LabelEntryRtcopytostcurdirt	dlist_dirtentrytbindtpacktTOPtBOTHtLEFTtXt	ButtonBoxtaddtBOTTOM(R	twtzRtbox((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyt__init__s2		+%1

cCs?|jd�|_|jjdd�|jjd|j�dS(Ntvalueitend(tcgetR9R:tdeletetinsert(R	RR((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyRZscCs|j�dS(N(R(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyRascCs
d|_dS(Ni(R+(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyRescCs-x&|jdkr(|jjjt�qWdS(Ni(R+Rttkt
dooneeventtTCL_ALL_EVENTS(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyRiscCs|jj�dS(N(RR(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyRms(t__name__t
__module__RGRRRRR(((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyRs	<				t__main__((
R.R7R6tTkconstantsRORRRPtTkR(((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyt<module>s$
	VPKb1�Z��q��tix/samples/Control.pyonu�[����
��^c@sxddlZdZd�Zddd��YZdddgZd	�Zd
�Zedkrtej�Z	ee	�ndS(
i����NicCs$t|�}|j�|j�dS(N(tDemoControltmainlooptdestroy(troottcontrol((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyt	RunSamples
RcBs5eZd�Zd�Zd�Zd�Zd�ZRS(cCs<||_d|_tj�atj�atj�atj	d�tj	d�tj	d�tj
|dddtj�}tj|dd	d
ddtddd
ddd�}tj|ddd
dddd
ddddtdd�}tj|dddddtdd�}|d�|d<|d�|d<|d�|d<|j
dtjd tj�|j
dtjd tj�|j
dtjd tj�tj|d!tj�}|jd"d#d$d%dd&d'd(|j�|jd)d#d*d%dd&d'd(|j�|j
dtjd+tj�|j
dtjd+tjd,d�dS(-Ni����sP&Wg��@itbditrelieftlabelsNumber of Engines: tintegertvariabletmintmaxitoptionss,entry.width 10 label.width 20 label.anchor esThrust: is10000.0s60000.0tstepi�sEngine Maker: tvaluecSs
t|d�S(Ni(tadjust_maker(tw((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyt<lambda>CttincrcmdcSs
t|d�S(Ni����(R(R((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyRDRtdecrcmdcSs
t|�S(N(tvalidate_maker(R((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyRERtvalidatecmdtsidetanchortorientationtokttexttOkt	underlinetwidthitcommandtcanceltCanceltfilltexpand(RtexittTixt	StringVart
demo_makert	DoubleVartdemo_thrusttIntVartdemo_num_enginestsettFrametRAISEDtControltpacktTOPtWt	ButtonBoxt
HORIZONTALtaddtokcmdtquitcmdtBOTTOMtXtBOTH(tselfRttoptatbtctbox((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyt__init__s@		


			

cCs|j�dS(N(R8(R<((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyR7SscCs
d|_dS(Ni(R%(R<((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyR8WscCs-x&|jdkr(|jjjt�qWdS(Ni(R%Rttkt
dooneeventtTCL_ALL_EVENTS(R<((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyRZscCs|jj�dS(N(RR(R<((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyR^s(t__name__t
__module__RBR7R8RR(((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyRs
	4			sP&WtGEsRolls RoycecCsntjtj��}||}|tt�kr:d}n|dkrYtt�d}ntjt|�dS(Nii(t
maker_listtindexR(tgettlenR-(Rtincti((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyRcs
	cCs:ytjtj��}Wntk
r1tdSXt|S(Ni(RIRJR(RKt
ValueError(RRN((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyRos

	t__main__((
R&RERRRIRRRFtTkR(((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyt<module>s	C			PKb1�Zzd��3	3	tix/samples/Tree.pycnu�[����
��^c@sfddlZddlZd�Zd�Zd�Zedkrbej�Zee�ej�ndS(i����NcCs+tj|dtjdd�}tj|dd�}|jdddtjdd	d
d	dtj�d|d�|d
<t|d�tj	|dtj
�}|jdddddd|jdd�|jdddddd|jdd�|jdtj
dtj�|jdtjdtjdd�dS(Ntrelieftbditoptionss
separator "/"texpandtfilltpadxi
tpadytsidecSs
t||�S(N(topendir(tdirtw((s-/usr/lib64/python2.7/Demo/tix/samples/Tree.pyt<lambda>ttopencmdt/torientationtokttexttOkt	underlineitcommandtwidthitcanceltCancel(tTixtFrametRAISEDtTreetpacktBOTHtLEFTtNonetadddirt	ButtonBoxt
HORIZONTALtaddtdestroytBOTTOMtXtTOP(R
ttopttreetbox((s-/usr/lib64/python2.7/Demo/tix/samples/Tree.pyt	RunSamples.
((cCs�|dkrd}ntjj|�}|jj|dtjd|d|jjddd��y!tj	|�|j
|d�Wntjk
r�nXdS(	NRtitemtypeRtimagettixtgetimagetfoldertopen(tostpathtbasenamethlistR#Rt	IMAGETEXTttktcalltlistdirtsetmodeterror(R)R	R((s-/usr/lib64/python2.7/Demo/tix/samples/Tree.pyR #s	
cCs�|jj|�}|r<x!|D]}|jj|�qWntj|�}x|D]w}tjj|d|�r�t||d|�qR|jj|d|dt	j
d|d|jjddd��qRWdS(NRR,RR-R.R/tfile(
R5t
info_childrent
show_entryR2R9R3tisdirR R#RR6R7R8(R)R	tentriestentrytfilesR<((s-/usr/lib64/python2.7/Demo/tix/samples/Tree.pyR9s

&t__main__(	RR2R+R Rt__name__tTktroottmainloop(((s-/usr/lib64/python2.7/Demo/tix/samples/Tree.pyt<module>s			
PKb1�Znb!���tix/samples/PanedWin.pyonu�[����
��^c@sWddlZdZd�Zddd��YZedkrSej�Zee�ndS(i����NicCs$t|�}|j�|j�dS(N(tDemoPanedwintmainlooptdestroy(troottpanedwin((s1/usr/lib64/python2.7/Demo/tix/samples/PanedWin.pyt	RunSamples
RcBs,eZd�Zd�Zd�Zd�ZRS(c
Cs�||_d|_|j�}|jd|d��tj|dddd�}|jjdd	�tj|d
d�}|j	dd
ddd�}|j	dd
d�}tj
|�}d|jd<d|jd<tj|�}d|j
d<d|j
d<|jjtjd�|jjtjd�|jjtjd�|jjtjd�|jjtjd�|jjtjd�|jjtjd�|jd|j
d<d|j
d <|j
jtjd!�d"|j
d#<|jd$d%d&tjd'd(d)d*�|jd$d%d&tjd'd(d)d*�|jd+tjd'd,d)d,d&tj�|jd+tjd'd,d)d,d&tjd$d%�tj|d
tj�}	|	j	d-dd.d/ddd*d0|j�|	j	d1dd2d/ddd*d0|j�|	jd+tjd&tj�dS(3Ni����tWM_DELETE_WINDOWcSs
|j�S(N(tquitcmd(tself((s1/usr/lib64/python2.7/Demo/tix/samples/PanedWin.pyt<lambda>!ttlabels
Newsgroup:toptionssentry.width 25iscomp.lang.pythontorientationtverticaltlisttminiFtsizeidttextiPtwidthitheightis+  12324 Re: Tkinter is good for your healths++ 12325 Re: Tkinter is good for your healthsH+ 12326 Re: Tix is even better for your health (Was: Tkinter is good...)sH  12327 Re: Tix is even better for your health (Was: Tkinter is good...)sH+ 12328 Re: Tix is even better for your health (Was: Tkinter is good...)sH  12329 Re: Tix is even better for your health (Was: Tkinter is good...)sH+ 12330 Re: Tix is even better for your health (Was: Tkinter is good...)tbgtnonetwraps~
    Mon, 19 Jun 1995 11:39:52        comp.lang.python              Thread   34 of  220
    Lines 353       A new way to put text and bitmaps together iNo responses
    ioi@blue.seas.upenn.edu                Ioi K. Lam at University of Pennsylvania

    Hi,

    I have implemented a new image type called "compound". It allows you
    to glue together a bunch of bitmaps, images and text strings together
    to form a bigger image. Then you can use this image with widgets that
    support the -image option. For example, you can display a text string string
    together with a bitmap, at the same time, inside a TK button widget.
    tdisabledtstatetexpanditfilltpadxitpadyitsideitoktOkt	underlinetcommandtcanceltCancel(Rtexittwinfo_topleveltwm_protocoltTixt
LabelEntrytentrytinserttPanedWindowtaddtScrolledListBoxtlistboxtScrolledTextRtENDtpacktBOTHtTOPt	ButtonBoxt
HORIZONTALRtBOTTOMtX(
Rtwtztgrouptpanetp1tp2RRtbox((s1/usr/lib64/python2.7/Demo/tix/samples/PanedWin.pyt__init__sJ		





%%(.

cCs
d|_dS(Ni(R%(R((s1/usr/lib64/python2.7/Demo/tix/samples/PanedWin.pyRVscCs-x&|jdkr(|jjjt�qWdS(Ni(R%Rttkt
dooneeventtTCL_ALL_EVENTS(R((s1/usr/lib64/python2.7/Demo/tix/samples/PanedWin.pyRYscCs|jj�dS(N(RR(R((s1/usr/lib64/python2.7/Demo/tix/samples/PanedWin.pyR]s(t__name__t
__module__R@RRR(((s1/usr/lib64/python2.7/Demo/tix/samples/PanedWin.pyRs	:		t__main__((R(RCRRRDtTkR(((s1/usr/lib64/python2.7/Demo/tix/samples/PanedWin.pyt<module>s	EPKb1�Z0�7bbtix/samples/OptMenu.pyonu�[����
��^c@szddlZidd6dd6dd6dd	6d
d6Zd�Zd
�Zedkrvej�Zee�ej�ndS(i����Ns
Plain Textttextt
PostScripttposttHTMLthtmltLaTeXttexsRich Text FormattrtfcCs�tj�atj�atj|dddtj�}tj|dddtdd�}tj|dd	dtdd�}xBtj�D]4}|j	|dt|�|j	|dt|�q�Wtj
d
�tj
d�|jdtjd
tj
dddd�|jdtjd
tj
dddd�tj|dtj�}|jdddddddd|d��|jdddddddd|d��|jdtjdtj�|jdtjdtjdd�dS( NtbditrelieftlabelsFrom File Format : tvariabletoptionss2label.width  19 label.anchor e menubutton.width 15sTo File Format : RRtsidetanchortpadyitpadxitorientationtokRtOkt	underlineitwidthtcommandcSs
t|�S(N(t
ok_command(tw((s0/usr/lib64/python2.7/Demo/tix/samples/OptMenu.pyt<lambda>7ttcanceltCancelcSs
|j�S(N(tdestroy(R((s0/usr/lib64/python2.7/Demo/tix/samples/OptMenu.pyR9Rtfilltexpand(tTixt	StringVart
demo_opt_fromtdemo_opt_totFrametRAISEDt
OptionMenuRtkeystadd_commandtsettpacktTOPtWt	ButtonBoxt
HORIZONTALtaddtBOTTOMtXtBOTH(Rttopt	from_filetto_filetopttbox((s0/usr/lib64/python2.7/Demo/tix/samples/OptMenu.pyt	RunSamples.		

((

cCs|j�dS(N(R(R((s0/usr/lib64/python2.7/Demo/tix/samples/OptMenu.pyR=st__main__(R RR8Rt__name__tTktroottmainloop(((s0/usr/lib64/python2.7/Demo/tix/samples/OptMenu.pyt<module>s	(	
PKb1�Z�t��tix/samples/DirTree.pyonu�[����
��^c@syddlZddlZddlZddlTdZd�Zddd��YZedkruej�Z	ee	�ndS(	i����N(t*icCs$t|�}|j�|j�dS(N(tDemoDirTreetmainlooptdestroy(troottdirtree((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyt	RunSamples
RcBs>eZd�Zd�Zd�Zd�Zd�Zd�ZRS(c
Cs>||_d|_|j�}|jd|d��tj|dtdd�}tj|�|_d|jj	d<tj
|d	d
dd�|_tj|d
ddddd�|_
tjtj�|_|j|j
jd<|j|j
|d�|jd<|j
jjd|d��|jdddddt�|jjdddtdddddt�|jjdd dddddt�|j
jdddtdd dddddt�tj|d!d"�}|jd#d	d$d%ddd&d|d'��|jd(d	d)d%ddd&d|d*��|jdd dd+dt�dS(,Ni����tWM_DELETE_WINDOWcSs
|j�S(N(tquitcmd(tself((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyt<lambda>#ttrelieftbdii(twidthttexts  >>  tpadyitlabelsInstallation Directory:t	labelsidettoptoptionss�
                                  entry.width 40
                                  label.anchor w
                                  ttextvariablecSs|j||�S(N(t	copy_name(tdirtentR	((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyR
Fstcommands<Return>cSs
|j�S(N(tokcmd(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyR
IRtexpandtyestfilltbothtsidetpadxitanchortstorientationt
horizontaltoktOkt	underlineicSs
|j�S(N(R(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyR
TRtcanceltCancelcSs
|j�S(N(R(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyR
VRtx(Rtexittwinfo_topleveltwm_protocoltTixtFrametRAISEDtDirTreeRthlisttButtontbtnt
LabelEntryRtcopytostcurdirt	dlist_dirtentrytbindtpacktTOPtBOTHtLEFTtXt	ButtonBoxtaddtBOTTOM(R	twtzRtbox((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyt__init__s2		+%1

cCs?|jd�|_|jjdd�|jjd|j�dS(Ntvalueitend(tcgetR9R:tdeletetinsert(R	RR((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyRZscCs|j�dS(N(R(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyRascCs
d|_dS(Ni(R+(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyRescCs-x&|jdkr(|jjjt�qWdS(Ni(R+Rttkt
dooneeventtTCL_ALL_EVENTS(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyRiscCs|jj�dS(N(RR(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyRms(t__name__t
__module__RGRRRRR(((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyRs	<				t__main__((
R.R7R6tTkconstantsRORRRPtTkR(((s0/usr/lib64/python2.7/Demo/tix/samples/DirTree.pyt<module>s$
	VPKb1�Z��q��tix/samples/Control.pycnu�[����
��^c@sxddlZdZd�Zddd��YZdddgZd	�Zd
�Zedkrtej�Z	ee	�ndS(
i����NicCs$t|�}|j�|j�dS(N(tDemoControltmainlooptdestroy(troottcontrol((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyt	RunSamples
RcBs5eZd�Zd�Zd�Zd�Zd�ZRS(cCs<||_d|_tj�atj�atj�atj	d�tj	d�tj	d�tj
|dddtj�}tj|dd	d
ddtddd
ddd�}tj|ddd
dddd
ddddtdd�}tj|dddddtdd�}|d�|d<|d�|d<|d�|d<|j
dtjd tj�|j
dtjd tj�|j
dtjd tj�tj|d!tj�}|jd"d#d$d%dd&d'd(|j�|jd)d#d*d%dd&d'd(|j�|j
dtjd+tj�|j
dtjd+tjd,d�dS(-Ni����sP&Wg��@itbditrelieftlabelsNumber of Engines: tintegertvariabletmintmaxitoptionss,entry.width 10 label.width 20 label.anchor esThrust: is10000.0s60000.0tstepi�sEngine Maker: tvaluecSs
t|d�S(Ni(tadjust_maker(tw((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyt<lambda>CttincrcmdcSs
t|d�S(Ni����(R(R((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyRDRtdecrcmdcSs
t|�S(N(tvalidate_maker(R((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyRERtvalidatecmdtsidetanchortorientationtokttexttOkt	underlinetwidthitcommandtcanceltCanceltfilltexpand(RtexittTixt	StringVart
demo_makert	DoubleVartdemo_thrusttIntVartdemo_num_enginestsettFrametRAISEDtControltpacktTOPtWt	ButtonBoxt
HORIZONTALtaddtokcmdtquitcmdtBOTTOMtXtBOTH(tselfRttoptatbtctbox((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyt__init__s@		


			

cCs|j�dS(N(R8(R<((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyR7SscCs
d|_dS(Ni(R%(R<((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyR8WscCs-x&|jdkr(|jjjt�qWdS(Ni(R%Rttkt
dooneeventtTCL_ALL_EVENTS(R<((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyRZscCs|jj�dS(N(RR(R<((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyR^s(t__name__t
__module__RBR7R8RR(((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyRs
	4			sP&WtGEsRolls RoycecCsntjtj��}||}|tt�kr:d}n|dkrYtt�d}ntjt|�dS(Nii(t
maker_listtindexR(tgettlenR-(Rtincti((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyRcs
	cCs:ytjtj��}Wntk
r1tdSXt|S(Ni(RIRJR(RKt
ValueError(RRN((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyRos

	t__main__((
R&RERRRIRRRFtTkR(((s0/usr/lib64/python2.7/Demo/tix/samples/Control.pyt<module>s	C			PKb1�Z�3U
��tix/samples/DirList.pycnu�[����
��^c@s�ddlZddlZddlZddlTdZd�Zddd��YZedkr�ddlZddl	Z	yej
�Zee�Wq�ej
�\ZZZdZxAe	jeee�D]&Zeed	Zejd
e�Zq�Wq�XndS(i����N(t*icCs$t|�}|j�|j�dS(N(tDemoDirListtmainlooptdestroy(troottdirlist((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyt	RunSamples
RcBs>eZd�Zd�Zd�Zd�Zd�Zd�ZRS(c
Csc||_d|_|j�}|jd|d��tj|dtdd�}tj|�|_d|jj	d<tj
|d	d
dd�|_tj|d
ddddd�|_
|jjjd�}||j
jd<tjtj�|_|j|j
jd<|j|j
|d�|jd<|j
jjd|d��|jdddddt�|jjdddtdd dd dt�|jjd!d"dd dd dt�|j
jdddtd!d"dd dd dt�tj|d#d$�}|jd%d	d&d'ddd(d|d)��|jd*d	d+d'ddd(d|d,��|jd!d"dd-dt�dS(.Ni����tWM_DELETE_WINDOWcSs
|j�S(N(tquitcmd(tself((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyt<lambda>#ttrelieftbdii(twidthttexts  >>  tpadyitlabelsInstallation Directory:t	labelsidettoptoptionss�
                                  entry.width 40
                                  label.anchor w
                                  stix option get fixed_fonttfontttextvariablecSs|j||�S(N(t	copy_name(tdirtentR	((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyR
Kstcommands<Return>cSs
|j�S(N(tokcmd(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyR
ORtexpandtyestfilltbothtsidetpadxitanchortstorientationt
horizontaltoktOkt	underlineicSs
|j�S(N(R(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyR
ZRtcanceltCancelcSs
|j�S(N(R(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyR
\Rtx(Rtexittwinfo_topleveltwm_protocoltTixtFrametRAISEDtDirListRthlisttButtontbtnt
LabelEntryRttktevaltentrytcopytostcurdirt	dlist_dirtbindtpacktTOPtBOTHtLEFTtXt	ButtonBoxtaddtBOTTOM(R	twtzRRtbox((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyt__init__s6		+%1

cCs?|jd�|_|jjdd�|jjd|j�dS(Ntvalueitend(tcgetR=R9tdeletetinsert(R	RR((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyR`scCs|j�dS(N(R(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyRgscCs
d|_dS(Ni(R,(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyRkscCs-x&|jdkr(|jjjt�qWdS(Ni(R,RR7t
dooneeventtTCL_ALL_EVENTS(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyRnscCs|jj�dS(N(RR(R	((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyRrs(t__name__t
__module__RJRRRRR(((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyRs	B				t__main__sError running the demo script:
s
sTix Demo Error((R/R;R:tTkconstantsRQRRRRttkMessageBoxt	tracebacktTkRtsystexc_infotttvttbRtformat_exceptiontlinet	showerrortd(((s0/usr/lib64/python2.7/Demo/tix/samples/DirList.pyt<module>s$
	[PKb1�Z�û�T
T
tix/samples/ComboBox.pynu�[���# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
#
# $Id$
#
# Tix Demonstration Program
#
# This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone
# program.

# This file demonstrates the use of the tixComboBox widget, which is close
# to the MS Window Combo Box control.
#
import Tix

def RunSample(w):
    global demo_month, demo_year

    top = Tix.Frame(w, bd=1, relief=Tix.RAISED)

    demo_month = Tix.StringVar()
    demo_year = Tix.StringVar()

    # $w.top.a is a drop-down combo box. It is not editable -- who wants
    # to invent new months?
    #
    # [Hint] The -options switch sets the options of the subwidgets.
    # [Hint] We set the label.width subwidget option of both comboboxes to
    #        be 10 so that their labels appear to be aligned.
    #
    a = Tix.ComboBox(top, label="Month: ", dropdown=1,
        command=select_month, editable=0, variable=demo_month,
        options='listbox.height 6 label.width 10 label.anchor e')

    # $w.top.b is a non-drop-down combo box. It is not editable: we provide
    # four choices for the user, but he can enter an alternative year if he
    # wants to.
    #
    # [Hint] Use the padY and anchor options of the label subwidget to
    #        align the label with the entry subwidget.
    # [Hint] Notice that you should use padY (the NAME of the option) and not
    #        pady (the SWITCH of the option).
    #
    b = Tix.ComboBox(top, label="Year: ", dropdown=0,
        command=select_year, editable=1, variable=demo_year,
        options='listbox.height 4 label.padY 5 label.width 10 label.anchor ne')

    a.pack(side=Tix.TOP, anchor=Tix.W)
    b.pack(side=Tix.TOP, anchor=Tix.W)

    a.insert(Tix.END, 'January')
    a.insert(Tix.END, 'February')
    a.insert(Tix.END, 'March')
    a.insert(Tix.END, 'April')
    a.insert(Tix.END, 'May')
    a.insert(Tix.END, 'June')
    a.insert(Tix.END, 'July')
    a.insert(Tix.END, 'August')
    a.insert(Tix.END, 'September')
    a.insert(Tix.END, 'October')
    a.insert(Tix.END, 'November')
    a.insert(Tix.END, 'December')

    b.insert(Tix.END, '1992')
    b.insert(Tix.END, '1993')
    b.insert(Tix.END, '1994')
    b.insert(Tix.END, '1995')
    b.insert(Tix.END, '1996')

    # Use "tixSetSilent" to set the values of the combo box if you
    # don't want your -command procedures (cbx:select_month and
    # cbx:select_year) to be called.
    #
    a.set_silent('January')
    b.set_silent('1995')

    box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL)
    box.add('ok', text='Ok', underline=0, width=6,
            command=lambda w=w: ok_command(w))
    box.add('cancel', text='Cancel', underline=0, width=6,
            command=lambda w=w: w.destroy())
    box.pack(side=Tix.BOTTOM, fill=Tix.X)
    top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)

def select_month(event=None):
    # tixDemo:Status "Month = %s" % demo_month.get()
    pass

def select_year(event=None):
    # tixDemo:Status "Year = %s" % demo_year.get()
    pass

def ok_command(w):
    # tixDemo:Status "Month = %s, Year= %s" % (demo_month.get(), demo_year.get())
    w.destroy()

if __name__ == '__main__':
    root = Tix.Tk()
    RunSample(root)
    root.mainloop()
PKb1�Zl���//tix/samples/Tree.pynu�[���# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
#
# $Id$
#
# Tix Demonstration Program
#
# This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone
# program.

# This file demonstrates how to use the TixTree widget to display
# dynamic hierachical data (the files in the Unix file system)
#

import Tix, os

def RunSample(w):
    top = Tix.Frame(w, relief=Tix.RAISED, bd=1)
    tree = Tix.Tree(top, options='separator "/"')
    tree.pack(expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.LEFT)
    tree['opencmd'] = lambda dir=None, w=tree: opendir(w, dir)

    # The / directory is added in the "open" mode. The user can open it
    # and then browse its subdirectories ...
    adddir(tree, "/")

    box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL)
    box.add('ok', text='Ok', underline=0, command=w.destroy, width=6)
    box.add('cancel', text='Cancel', underline=0, command=w.destroy, width=6)
    box.pack(side=Tix.BOTTOM, fill=Tix.X)
    top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)

def adddir(tree, dir):
    if dir == '/':
        text = '/'
    else:
        text = os.path.basename(dir)
    tree.hlist.add(dir, itemtype=Tix.IMAGETEXT, text=text,
                   image=tree.tk.call('tix', 'getimage', 'folder'))
    try:
        os.listdir(dir)
        tree.setmode(dir, 'open')
    except os.error:
        # No read permission ?
        pass

# This function is called whenever the user presses the (+) indicator or
# double clicks on a directory whose mode is "open". It loads the files
# inside that directory into the Tree widget.
#
# Note we didn't specify the closecmd option for the Tree widget, so it
# performs the default action when the user presses the (-) indicator or
# double clicks on a directory whose mode is "close": hide all of its child
# entries
def opendir(tree, dir):
    entries = tree.hlist.info_children(dir)
    if entries:
        # We have already loaded this directory. Let's just
        # show all the child entries
        #
        # Note: since we load the directory only once, it will not be
        #       refreshed if the you add or remove files from this
        #       directory.
        #
        for entry in entries:
            tree.hlist.show_entry(entry)
    files = os.listdir(dir)
    for file in files:
        if os.path.isdir(dir + '/' + file):
            adddir(tree, dir + '/' + file)
        else:
            tree.hlist.add(dir + '/' + file, itemtype=Tix.IMAGETEXT, text=file,
                           image=tree.tk.call('tix', 'getimage', 'file'))

if __name__ == '__main__':
    root = Tix.Tk()
    RunSample(root)
    root.mainloop()
PKb1�Z��b&UUtix/samples/PopMenu.pycnu�[����
��^c@sHddlZd�ZedkrDej�Zee�ej�ndS(i����NcCstj|dtjdd�}tj|dd�}|jdddtjdd	d
d	�tj|dd�}|j|�|j|�|jj	d
ddd�|jj	d
ddd�|jj	d
ddd�|jj	d
ddd�|jj	d
ddd�tj
|j�}|j	d
d�|jjd
dd|�|jdtjddd
d	�tj
|dtj�}|jdddddddd|d ��|jd!dd"ddddd|d#��|jdtjdtj�|jdtjdtjdd�dS($NtrelieftbdittextsEPress the right mouse button over this button or its surrounding areatexpandtfilltpadxi2tpadyttitles
Popup TesttlabeltDesktopt	underlineitSelecttFindtSystemtHelptHellotMoretmenutsidei(torientationtoktOktwidthitcommandcSs
|j�S(N(tdestroy(tw((s0/usr/lib64/python2.7/Demo/tix/samples/PopMenu.pyt<lambda>0ttcanceltCancelcSs
|j�S(N(R(R((s0/usr/lib64/python2.7/Demo/tix/samples/PopMenu.pyR2R(tTixtFrametRAISEDtButtontpacktBOTHt	PopupMenutbind_widgetRtadd_commandtMenutadd_cascadetTOPt	ButtonBoxt
HORIZONTALtaddtBOTTOMtX(Rttoptbuttptm1tbox((s0/usr/lib64/python2.7/Demo/tix/samples/PopMenu.pyt	RunSamples,%



t__main__(RR4t__name__tTktroottmainloop(((s0/usr/lib64/python2.7/Demo/tix/samples/PopMenu.pyt<module>s
	%
PKb1�Z�m7&~~tix/samples/SHList1.pynu�[���# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
#
# $Id$
#
# Tix Demonstration Program
#
# This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone
# program using tixwish.

# This file demonstrates the use of the tixScrolledHList widget.
#

import Tix

TCL_ALL_EVENTS          = 0

def RunSample (root):
    shlist = DemoSHList(root)
    shlist.mainloop()
    shlist.destroy()

class DemoSHList:
    def __init__(self, w):
        self.root = w
        self.exit = -1

        z = w.winfo_toplevel()
        z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())

        # We create the frame and the ScrolledHList widget
        # at the top of the dialog box
        #
        top = Tix.Frame( w, relief=Tix.RAISED, bd=1)

        # Put a simple hierachy into the HList (two levels). Use colors and
        # separator widgets (frames) to make the list look fancy
        #
        top.a = Tix.ScrolledHList(top)
        top.a.pack( expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.TOP)

        # This is our little relational database
        #
        bosses = [
            ('jeff',  'Jeff Waxman'),
            ('john',  'John Lee'),
            ('peter', 'Peter Kenson')
        ]

        employees = [
            ('alex',  'john',  'Alex Kellman'),
            ('alan',  'john',  'Alan Adams'),
            ('andy',  'peter', 'Andreas Crawford'),
            ('doug',  'jeff',  'Douglas Bloom'),
            ('jon',   'peter', 'Jon Baraki'),
            ('chris', 'jeff',  'Chris Geoffrey'),
            ('chuck', 'jeff',  'Chuck McLean')
        ]

        hlist=top.a.hlist

        # Let configure the appearance of the HList subwidget
        #
        hlist.config( separator='.', width=25, drawbranch=0, indent=10)

        count=0
        for boss,name in bosses :
            if count :
                f=Tix.Frame(hlist, name='sep%d' % count, height=2, width=150,
                    bd=2, relief=Tix.SUNKEN )

                hlist.add_child( itemtype=Tix.WINDOW,
                    window=f, state=Tix.DISABLED )

            hlist.add(boss, itemtype=Tix.TEXT, text=name)
            count = count+1


        for person,boss,name in employees :
            # '.' is the separator character we chose above
            #
            key= boss    + '.'     + person
            #    ^^^^                ^^^^^^
            #    parent entryPath /  child's name

            hlist.add( key, text=name )

            # [Hint] Make sure the keys (e.g. 'boss.person') you choose
            #    are unique names. If you cannot be sure of this (because of
            #    the structure of your database, e.g.) you can use the
            #    "add_child" command instead:
            #
            #  hlist.addchild( boss,  text=name)
            #                  ^^^^
            #                  parent entryPath


        # Use a ButtonBox to hold the buttons.
        #
        box= Tix.ButtonBox(top, orientation=Tix.HORIZONTAL )
        box.add( 'ok',  text='Ok', underline=0,  width=6,
            command = self.okcmd)

        box.add( 'cancel', text='Cancel', underline=0, width=6,
            command = self.quitcmd)

        box.pack( side=Tix.BOTTOM, fill=Tix.X)
        top.pack( side=Tix.TOP,    fill=Tix.BOTH, expand=1 )

    def okcmd (self):
        self.quitcmd()

    def quitcmd (self):
        self.exit = 0

    def mainloop(self):
        while self.exit < 0:
            self.root.tk.dooneevent(TCL_ALL_EVENTS)

    def destroy (self):
        self.root.destroy()


# This "if" statement makes it possible to run this script file inside or
# outside of the main demo program "tixwidgets.py".
#
if __name__== '__main__' :
    root=Tix.Tk()
    RunSample(root)
PKb1�Z�tܙyytix/samples/NoteBook.pynu�[���# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
#
# $Id$
#
# Tix Demonstration Program
#
# This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone
# program.

# This file demonstrates the use of the tixNoteBook widget, which allows
# you to lay out your interface using a "notebook" metaphore
#
import Tix

def RunSample(w):
    global root
    root = w

    # We use these options to set the sizes of the subwidgets inside the
    # notebook, so that they are well-aligned on the screen.
    prefix = Tix.OptionName(w)
    if prefix:
        prefix = '*'+prefix
    else:
        prefix = ''
    w.option_add(prefix+'*TixControl*entry.width', 10)
    w.option_add(prefix+'*TixControl*label.width', 18)
    w.option_add(prefix+'*TixControl*label.anchor', Tix.E)
    w.option_add(prefix+'*TixNoteBook*tagPadX', 8)

    # Create the notebook widget and set its backpagecolor to gray.
    # Note that the -backpagecolor option belongs to the "nbframe"
    # subwidget.
    nb = Tix.NoteBook(w, name='nb', ipadx=6, ipady=6)
    nb['bg'] = 'gray'
    nb.nbframe['backpagecolor'] = 'gray'

    # Create the two tabs on the notebook. The -underline option
    # puts a underline on the first character of the labels of the tabs.
    # Keyboard accelerators will be defined automatically according
    # to the underlined character.
    nb.add('hard_disk', label="Hard Disk", underline=0)
    nb.add('network', label="Network", underline=0)

    nb.pack(expand=1, fill=Tix.BOTH, padx=5, pady=5 ,side=Tix.TOP)

    #----------------------------------------
    # Create the first page
    #----------------------------------------
    # Create two frames: one for the common buttons, one for the
    # other widgets
    #
    tab=nb.hard_disk
    f = Tix.Frame(tab)
    common = Tix.Frame(tab)

    f.pack(side=Tix.LEFT, padx=2, pady=2, fill=Tix.BOTH, expand=1)
    common.pack(side=Tix.RIGHT, padx=2, fill=Tix.Y)

    a = Tix.Control(f, value=12,   label='Access time: ')
    w = Tix.Control(f, value=400,  label='Write Throughput: ')
    r = Tix.Control(f, value=400,  label='Read Throughput: ')
    c = Tix.Control(f, value=1021, label='Capacity: ')

    a.pack(side=Tix.TOP, padx=20, pady=2)
    w.pack(side=Tix.TOP, padx=20, pady=2)
    r.pack(side=Tix.TOP, padx=20, pady=2)
    c.pack(side=Tix.TOP, padx=20, pady=2)

    # Create the common buttons
    createCommonButtons(common)

    #----------------------------------------
    # Create the second page
    #----------------------------------------

    tab = nb.network

    f = Tix.Frame(tab)
    common = Tix.Frame(tab)

    f.pack(side=Tix.LEFT, padx=2, pady=2, fill=Tix.BOTH, expand=1)
    common.pack(side=Tix.RIGHT, padx=2, fill=Tix.Y)

    a = Tix.Control(f, value=12,   label='Access time: ')
    w = Tix.Control(f, value=400,  label='Write Throughput: ')
    r = Tix.Control(f, value=400,  label='Read Throughput: ')
    c = Tix.Control(f, value=1021, label='Capacity: ')
    u = Tix.Control(f, value=10,   label='Users: ')

    a.pack(side=Tix.TOP, padx=20, pady=2)
    w.pack(side=Tix.TOP, padx=20, pady=2)
    r.pack(side=Tix.TOP, padx=20, pady=2)
    c.pack(side=Tix.TOP, padx=20, pady=2)
    u.pack(side=Tix.TOP, padx=20, pady=2)

    createCommonButtons(common)

def doDestroy():
    global root
    root.destroy()

def createCommonButtons(master):
    ok = Tix.Button(master, name='ok', text='OK', width=6,
                command=doDestroy)
    cancel = Tix.Button(master, name='cancel',
                    text='Cancel', width=6,
                    command=doDestroy)

    ok.pack(side=Tix.TOP, padx=2, pady=2)
    cancel.pack(side=Tix.TOP, padx=2, pady=2)

if __name__ == '__main__':
    root = Tix.Tk()
    RunSample(root)
    root.mainloop()
PKb1�Z�D�*__tix/samples/NoteBook.pyonu�[����
��^c@sZddlZd�Zd�Zd�ZedkrVej�aet�tj�ndS(i����Nc
Cs)|atj|�}|r(d|}nd}|j|dd�|j|dd�|j|dtj�|j|dd	�tj|d
ddd
dd
�}d|d<d|jd<|jddddd�|jddddd�|jdddtj	dddddtj
�|j}tj|�}tj|�}|jdtj
dd dd dtj	dd�|jdtjdd dtj�tj|d!d"dd#�}tj|d!d$dd%�}tj|d!d$dd&�}tj|d!d'dd(�}|jdtj
dd)dd �|jdtj
dd)dd �|jdtj
dd)dd �|jdtj
dd)dd �t|�|j}tj|�}tj|�}|jdtj
dd dd dtj	dd�|jdtjdd dtj�tj|d!d"dd#�}tj|d!d$dd%�}tj|d!d$dd&�}tj|d!d'dd(�}tj|d!ddd*�}	|jdtj
dd)dd �|jdtj
dd)dd �|jdtj
dd)dd �|jdtj
dd)dd �|	jdtj
dd)dd �t|�dS(+Nt*ts*TixControl*entry.widthi
s*TixControl*label.widthis*TixControl*label.anchors*TixNoteBook*tagPadXitnametnbtipadxitipadytgraytbgt
backpagecolort	hard_disktlabels	Hard Diskt	underlineitnetworktNetworktexpanditfilltpadxitpadytsideitvalueis
Access time: i�sWrite Throughput: sRead Throughput: i�s
Capacity: isUsers: (troottTixt
OptionNamet
option_addtEtNoteBooktnbframetaddtpacktBOTHtTOPR	tFrametLEFTtRIGHTtYtControltcreateCommonButtonsR(
twtprefixRttabtftcommontatrtctu((s1/usr/lib64/python2.7/Demo/tix/samples/NoteBook.pyt	RunSamplesZ
!

.	."
	."cCstj�dS(N(Rtdestroy(((s1/usr/lib64/python2.7/Demo/tix/samples/NoteBook.pyt	doDestroyfsc
Cs�tj|dddddddt�}tj|dddd	dddt�}|jd
tjddd
d�|jd
tjddd
d�dS(NRtokttexttOKtwidthitcommandtcanceltCancelRRiR(RtButtonR0RR(tmasterR1R6((s1/usr/lib64/python2.7/Demo/tix/samples/NoteBook.pyR$js		t__main__(RR.R0R$t__name__tTkRtmainloop(((s1/usr/lib64/python2.7/Demo/tix/samples/NoteBook.pyt<module>s	T		

PKb1�Z�D�*__tix/samples/NoteBook.pycnu�[����
��^c@sZddlZd�Zd�Zd�ZedkrVej�aet�tj�ndS(i����Nc
Cs)|atj|�}|r(d|}nd}|j|dd�|j|dd�|j|dtj�|j|dd	�tj|d
ddd
dd
�}d|d<d|jd<|jddddd�|jddddd�|jdddtj	dddddtj
�|j}tj|�}tj|�}|jdtj
dd dd dtj	dd�|jdtjdd dtj�tj|d!d"dd#�}tj|d!d$dd%�}tj|d!d$dd&�}tj|d!d'dd(�}|jdtj
dd)dd �|jdtj
dd)dd �|jdtj
dd)dd �|jdtj
dd)dd �t|�|j}tj|�}tj|�}|jdtj
dd dd dtj	dd�|jdtjdd dtj�tj|d!d"dd#�}tj|d!d$dd%�}tj|d!d$dd&�}tj|d!d'dd(�}tj|d!ddd*�}	|jdtj
dd)dd �|jdtj
dd)dd �|jdtj
dd)dd �|jdtj
dd)dd �|	jdtj
dd)dd �t|�dS(+Nt*ts*TixControl*entry.widthi
s*TixControl*label.widthis*TixControl*label.anchors*TixNoteBook*tagPadXitnametnbtipadxitipadytgraytbgt
backpagecolort	hard_disktlabels	Hard Diskt	underlineitnetworktNetworktexpanditfilltpadxitpadytsideitvalueis
Access time: i�sWrite Throughput: sRead Throughput: i�s
Capacity: isUsers: (troottTixt
OptionNamet
option_addtEtNoteBooktnbframetaddtpacktBOTHtTOPR	tFrametLEFTtRIGHTtYtControltcreateCommonButtonsR(
twtprefixRttabtftcommontatrtctu((s1/usr/lib64/python2.7/Demo/tix/samples/NoteBook.pyt	RunSamplesZ
!

.	."
	."cCstj�dS(N(Rtdestroy(((s1/usr/lib64/python2.7/Demo/tix/samples/NoteBook.pyt	doDestroyfsc
Cs�tj|dddddddt�}tj|dddd	dddt�}|jd
tjddd
d�|jd
tjddd
d�dS(NRtokttexttOKtwidthitcommandtcanceltCancelRRiR(RtButtonR0RR(tmasterR1R6((s1/usr/lib64/python2.7/Demo/tix/samples/NoteBook.pyR$js		t__main__(RR.R0R$t__name__tTkRtmainloop(((s1/usr/lib64/python2.7/Demo/tix/samples/NoteBook.pyt<module>s	T		

PKb1�ZD�l�11tix/samples/CmpImg.pynu�[���# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
#
# $Id$
#
# Tix Demonstration Program
#
# This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone
# program.

# This file demonstrates the use of the compound images: it uses compound
# images to display a text string together with a pixmap inside
# buttons
#

import Tix

network_pixmap = """/* XPM */
static char * netw_xpm[] = {
/* width height ncolors chars_per_pixel */
"32 32 7 1",
/* colors */
"       s None  c None",
".      c #000000000000",
"X      c white",
"o      c #c000c000c000",
"O      c #404040",
"+      c blue",
"@      c red",
/* pixels */
"                                ",
"                 .............. ",
"                 .XXXXXXXXXXXX. ",
"                 .XooooooooooO. ",
"                 .Xo.......XoO. ",
"                 .Xo.++++o+XoO. ",
"                 .Xo.++++o+XoO. ",
"                 .Xo.++oo++XoO. ",
"                 .Xo.++++++XoO. ",
"                 .Xo.+o++++XoO. ",
"                 .Xo.++++++XoO. ",
"                 .Xo.XXXXXXXoO. ",
"                 .XooooooooooO. ",
"                 .Xo@ooo....oO. ",
" ..............  .XooooooooooO. ",
" .XXXXXXXXXXXX.  .XooooooooooO. ",
" .XooooooooooO.  .OOOOOOOOOOOO. ",
" .Xo.......XoO.  .............. ",
" .Xo.++++o+XoO.        @        ",
" .Xo.++++o+XoO.        @        ",
" .Xo.++oo++XoO.        @        ",
" .Xo.++++++XoO.        @        ",
" .Xo.+o++++XoO.        @        ",
" .Xo.++++++XoO.      .....      ",
" .Xo.XXXXXXXoO.      .XXX.      ",
" .XooooooooooO.@@@@@@.X O.      ",
" .Xo@ooo....oO.      .OOO.      ",
" .XooooooooooO.      .....      ",
" .XooooooooooO.                 ",
" .OOOOOOOOOOOO.                 ",
" ..............                 ",
"                                "};
"""

hard_disk_pixmap = """/* XPM */
static char * drivea_xpm[] = {
/* width height ncolors chars_per_pixel */
"32 32 5 1",
/* colors */
"       s None  c None",
".      c #000000000000",
"X      c white",
"o      c #c000c000c000",
"O      c #800080008000",
/* pixels */
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"   ..........................   ",
"   .XXXXXXXXXXXXXXXXXXXXXXXo.   ",
"   .XooooooooooooooooooooooO.   ",
"   .Xooooooooooooooooo..oooO.   ",
"   .Xooooooooooooooooo..oooO.   ",
"   .XooooooooooooooooooooooO.   ",
"   .Xoooooooo.......oooooooO.   ",
"   .Xoo...................oO.   ",
"   .Xoooooooo.......oooooooO.   ",
"   .XooooooooooooooooooooooO.   ",
"   .XooooooooooooooooooooooO.   ",
"   .XooooooooooooooooooooooO.   ",
"   .XooooooooooooooooooooooO.   ",
"   .oOOOOOOOOOOOOOOOOOOOOOOO.   ",
"   ..........................   ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                "};
"""

network_bitmap = """
#define netw_width 32
#define netw_height 32
static unsigned char netw_bits[] = {
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x02, 0x40,
   0x00, 0x00, 0xfa, 0x5f, 0x00, 0x00, 0x0a, 0x50, 0x00, 0x00, 0x0a, 0x52,
   0x00, 0x00, 0x0a, 0x52, 0x00, 0x00, 0x8a, 0x51, 0x00, 0x00, 0x0a, 0x50,
   0x00, 0x00, 0x4a, 0x50, 0x00, 0x00, 0x0a, 0x50, 0x00, 0x00, 0x0a, 0x50,
   0x00, 0x00, 0xfa, 0x5f, 0x00, 0x00, 0x02, 0x40, 0xfe, 0x7f, 0x52, 0x55,
   0x02, 0x40, 0xaa, 0x6a, 0xfa, 0x5f, 0xfe, 0x7f, 0x0a, 0x50, 0xfe, 0x7f,
   0x0a, 0x52, 0x80, 0x00, 0x0a, 0x52, 0x80, 0x00, 0x8a, 0x51, 0x80, 0x00,
   0x0a, 0x50, 0x80, 0x00, 0x4a, 0x50, 0x80, 0x00, 0x0a, 0x50, 0xe0, 0x03,
   0x0a, 0x50, 0x20, 0x02, 0xfa, 0xdf, 0x3f, 0x03, 0x02, 0x40, 0xa0, 0x02,
   0x52, 0x55, 0xe0, 0x03, 0xaa, 0x6a, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00,
   0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
"""

hard_disk_bitmap = """
#define drivea_width 32
#define drivea_height 32
static unsigned char drivea_bits[] = {
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0xf8, 0xff, 0xff, 0x1f, 0x08, 0x00, 0x00, 0x18, 0xa8, 0xaa, 0xaa, 0x1a,
   0x48, 0x55, 0xd5, 0x1d, 0xa8, 0xaa, 0xaa, 0x1b, 0x48, 0x55, 0x55, 0x1d,
   0xa8, 0xfa, 0xaf, 0x1a, 0xc8, 0xff, 0xff, 0x1d, 0xa8, 0xfa, 0xaf, 0x1a,
   0x48, 0x55, 0x55, 0x1d, 0xa8, 0xaa, 0xaa, 0x1a, 0x48, 0x55, 0x55, 0x1d,
   0xa8, 0xaa, 0xaa, 0x1a, 0xf8, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x1f,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
"""

def RunSample(w):
    w.img0 = Tix.Image('pixmap', data=network_pixmap)
    if not w.img0:
        w.img0 = Tix.Image('bitmap', data=network_bitmap)
    w.img1 = Tix.Image('pixmap', data=hard_disk_pixmap)
    if not w.img0:
        w.img1 = Tix.Image('bitmap', data=hard_disk_bitmap)

    hdd = Tix.Button(w, padx=4, pady=1, width=120)
    net = Tix.Button(w, padx=4, pady=1, width=120)

    # Create the first image: we create a line, then put a string,
    # a space and an image into this line, from left to right.
    # The result: we have a one-line image that consists of three
    # individual items
    #
    # The tk.calls should be methods in Tix ...
    w.hdd_img = Tix.Image('compound', window=hdd)
    w.hdd_img.tk.call(str(w.hdd_img), 'add', 'line')
    w.hdd_img.tk.call(str(w.hdd_img), 'add', 'text', '-text', 'Hard Disk',
                    '-underline', '0')
    w.hdd_img.tk.call(str(w.hdd_img), 'add', 'space', '-width', '7')
    w.hdd_img.tk.call(str(w.hdd_img), 'add', 'image', '-image', w.img1)

    # Put this image into the first button
    #
    hdd['image'] = w.hdd_img

    # Next button
    w.net_img = Tix.Image('compound', window=net)
    w.net_img.tk.call(str(w.net_img), 'add', 'line')
    w.net_img.tk.call(str(w.net_img), 'add', 'text', '-text', 'Network',
                    '-underline', '0')
    w.net_img.tk.call(str(w.net_img), 'add', 'space', '-width', '7')
    w.net_img.tk.call(str(w.net_img), 'add', 'image', '-image', w.img0)

    # Put this image into the first button
    #
    net['image'] = w.net_img

    close = Tix.Button(w, pady=1, text='Close',
                       command=lambda w=w: w.destroy())

    hdd.pack(side=Tix.LEFT, padx=10, pady=10, fill=Tix.Y, expand=1)
    net.pack(side=Tix.LEFT, padx=10, pady=10, fill=Tix.Y, expand=1)
    close.pack(side=Tix.LEFT, padx=10, pady=10, fill=Tix.Y, expand=1)

if __name__ == '__main__':
    root = Tix.Tk()
    RunSample(root)
    root.mainloop()
PKb1�Z*MB��
�
tix/samples/ComboBox.pycnu�[����
��^c@siddlZd�Zdd�Zdd�Zd�Zedkreej�Zee�ej	�ndS(i����NcCs�tj|dddtj�}tj�atj�atj|dddddtdd	d
tdd�}tj|dd
dd	dtddd
tdd�}|j	dtj
dtj�|j	dtj
dtj�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d�|jtj
d �|jtj
d!�|jd�|jd �tj|d"tj�}|jd#d$d%d&d	d'd(d|d)��|jd*d$d+d&d	d'd(d|d,��|j	dtjd-tj�|j	dtj
d-tjd.d�dS(/NtbditrelieftlabelsMonth: tdropdowntcommandteditableitvariabletoptionss.listbox.height 6 label.width 10 label.anchor esYear: s<listbox.height 4 label.padY 5 label.width 10 label.anchor netsidetanchortJanuarytFebruarytMarchtApriltMaytJunetJulytAugustt	SeptembertOctobertNovembertDecembert1992t1993t1994t1995t1996torientationtokttexttOkt	underlinetwidthicSs
t|�S(N(t
ok_command(tw((s1/usr/lib64/python2.7/Demo/tix/samples/ComboBox.pyt<lambda>QttcanceltCancelcSs
|j�S(N(tdestroy(R"((s1/usr/lib64/python2.7/Demo/tix/samples/ComboBox.pyR#SR$tfilltexpand(tTixtFrametRAISEDt	StringVart
demo_montht	demo_yeartComboBoxtselect_monthtselect_yeartpacktTOPtWtinserttENDt
set_silentt	ButtonBoxt
HORIZONTALtaddtBOTTOMtXtBOTH(R"ttoptatbtbox((s1/usr/lib64/python2.7/Demo/tix/samples/ComboBox.pyt	RunSamplesJ			



cCsdS(N((tevent((s1/usr/lib64/python2.7/Demo/tix/samples/ComboBox.pyR1WscCsdS(N((RD((s1/usr/lib64/python2.7/Demo/tix/samples/ComboBox.pyR2[scCs|j�dS(N(R'(R"((s1/usr/lib64/python2.7/Demo/tix/samples/ComboBox.pyR!_st__main__(
R*RCtNoneR1R2R!t__name__tTktroottmainloop(((s1/usr/lib64/python2.7/Demo/tix/samples/ComboBox.pyt<module>s	E	
PKb1�ZSa����tix/samples/DirList.pynu�[���# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
#
#       $Id$
#
# Tix Demonstration Program
#
# This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets.py":  it must have a
# procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone
# program using tixwish.

# This file demonstrates the use of the tixDirList widget -- you can
# use it for the user to select a directory. For example, an installation
# program can use the tixDirList widget to ask the user to select the
# installation directory for an application.
#

import Tix, os, copy
from Tkconstants import *

TCL_ALL_EVENTS          = 0

def RunSample (root):
    dirlist = DemoDirList(root)
    dirlist.mainloop()
    dirlist.destroy()

class DemoDirList:
    def __init__(self, w):
        self.root = w
        self.exit = -1

        z = w.winfo_toplevel()
        z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())

        # Create the tixDirList and the tixLabelEntry widgets on the on the top
        # of the dialog box

        # bg = root.tk.eval('tix option get bg')
        # adding bg=bg crashes Windows pythonw tk8.3.3 Python 2.1.0

        top = Tix.Frame( w, relief=RAISED, bd=1)

        # Create the DirList widget. By default it will show the current
        # directory
        #
        #
        top.dir = Tix.DirList(top)
        top.dir.hlist['width'] = 40

        # When the user presses the ".." button, the selected directory
        # is "transferred" into the entry widget
        #
        top.btn = Tix.Button(top, text = "  >>  ", pady = 0)

        # We use a LabelEntry to hold the installation directory. The user
        # can choose from the DirList widget, or he can type in the directory
        # manually
        #
        top.ent = Tix.LabelEntry(top, label="Installation Directory:",
                                  labelside = 'top',
                                  options = '''
                                  entry.width 40
                                  label.anchor w
                                  ''')

        font = self.root.tk.eval('tix option get fixed_font')
        # font = self.root.master.tix_option_get('fixed_font')
        top.ent.entry['font'] = font

        self.dlist_dir = copy.copy(os.curdir)
        # This should work setting the entry's textvariable
        top.ent.entry['textvariable'] = self.dlist_dir
        top.btn['command'] = lambda dir=top.dir, ent=top.ent, self=self: \
                             self.copy_name(dir,ent)

        # top.ent.entry.insert(0,'tix'+repr(self))
        top.ent.entry.bind('<Return>', lambda self=self: self.okcmd () )

        top.pack( expand='yes', fill='both', side=TOP)
        top.dir.pack( expand=1, fill=BOTH, padx=4, pady=4, side=LEFT)
        top.btn.pack( anchor='s', padx=4, pady=4, side=LEFT)
        top.ent.pack( expand=1, fill=X, anchor='s', padx=4, pady=4, side=LEFT)

        # Use a ButtonBox to hold the buttons.
        #
        box = Tix.ButtonBox (w, orientation='horizontal')
        box.add ('ok', text='Ok', underline=0, width=6,
                     command = lambda self=self: self.okcmd () )
        box.add ('cancel', text='Cancel', underline=0, width=6,
                     command = lambda self=self: self.quitcmd () )

        box.pack( anchor='s', fill='x', side=BOTTOM)

    def copy_name (self, dir, ent):
        # This should work as it is the entry's textvariable
        self.dlist_dir = dir.cget('value')
        # but it isn't so I'll do it manually
        ent.entry.delete(0,'end')
        ent.entry.insert(0, self.dlist_dir)

    def okcmd (self):
        # tixDemo:Status "You have selected the directory" + self.dlist_dir
        self.quitcmd()

    def quitcmd (self):
        self.exit = 0

    def mainloop(self):
        while self.exit < 0:
            self.root.tk.dooneevent(TCL_ALL_EVENTS)

    def destroy (self):
        self.root.destroy()

# This "if" statement makes it possible to run this script file inside or
# outside of the main demo program "tixwidgets.py".
#
if __name__== '__main__' :
    import tkMessageBox, traceback

    try:
        root=Tix.Tk()
        RunSample(root)
    except:
        t, v, tb = sys.exc_info()
        text = "Error running the demo script:\n"
        for line in traceback.format_exception(t,v,tb):
            text = text + line + '\n'
            d = tkMessageBox.showerror ( 'Tix Demo Error', text)
PKb1�Z0�7bbtix/samples/OptMenu.pycnu�[����
��^c@szddlZidd6dd6dd6dd	6d
d6Zd�Zd
�Zedkrvej�Zee�ej�ndS(i����Ns
Plain Textttextt
PostScripttposttHTMLthtmltLaTeXttexsRich Text FormattrtfcCs�tj�atj�atj|dddtj�}tj|dddtdd�}tj|dd	dtdd�}xBtj�D]4}|j	|dt|�|j	|dt|�q�Wtj
d
�tj
d�|jdtjd
tj
dddd�|jdtjd
tj
dddd�tj|dtj�}|jdddddddd|d��|jdddddddd|d��|jdtjdtj�|jdtjdtjdd�dS( NtbditrelieftlabelsFrom File Format : tvariabletoptionss2label.width  19 label.anchor e menubutton.width 15sTo File Format : RRtsidetanchortpadyitpadxitorientationtokRtOkt	underlineitwidthtcommandcSs
t|�S(N(t
ok_command(tw((s0/usr/lib64/python2.7/Demo/tix/samples/OptMenu.pyt<lambda>7ttcanceltCancelcSs
|j�S(N(tdestroy(R((s0/usr/lib64/python2.7/Demo/tix/samples/OptMenu.pyR9Rtfilltexpand(tTixt	StringVart
demo_opt_fromtdemo_opt_totFrametRAISEDt
OptionMenuRtkeystadd_commandtsettpacktTOPtWt	ButtonBoxt
HORIZONTALtaddtBOTTOMtXtBOTH(Rttopt	from_filetto_filetopttbox((s0/usr/lib64/python2.7/Demo/tix/samples/OptMenu.pyt	RunSamples.		

((

cCs|j�dS(N(R(R((s0/usr/lib64/python2.7/Demo/tix/samples/OptMenu.pyR=st__main__(R RR8Rt__name__tTktroottmainloop(((s0/usr/lib64/python2.7/Demo/tix/samples/OptMenu.pyt<module>s	(	
PKb1�Z���aatix/samples/SHList1.pyonu�[����
��^c@sWddlZdZd�Zddd��YZedkrSej�Zee�ndS(i����NicCs$t|�}|j�|j�dS(N(t
DemoSHListtmainlooptdestroy(troottshlist((s0/usr/lib64/python2.7/Demo/tix/samples/SHList1.pyt	RunSamples
RcBs5eZd�Zd�Zd�Zd�Zd�ZRS(c
Cst||_d|_|j�}|jd|d��tj|dtjdd�}tj|�|_|jj	dddtj
d	d
dd
dtj�d9d:d;g}d<d=d>d?d@dAdBg}|jj}|j
d!d"d#d$d%d&d'd
�d&}x�|D]�\}}	|retj|d(d)|d*d+d#d,dd+dtj�}
|jd-tjd.|
d/tj�n|j|d-tjd0|	�|d}q�Wx8|D]0\}}}	|d"|}|j|d0|	�q�Wtj|d1tj�}
|
jd2d0d3d4d&d#d5d6|j�|
jd7d0d8d4d&d#d5d6|j�|
j	dtjdtj�|j	dtjdtj
dd�dS(CNi����tWM_DELETE_WINDOWcSs
|j�S(N(tquitcmd(tself((s0/usr/lib64/python2.7/Demo/tix/samples/SHList1.pyt<lambda>ttrelieftbditexpandtfilltpadxi
tpadytsidetjeffsJeff WaxmantjohnsJohn LeetpetersPeter KensontalexsAlex Kellmantalans
Alan AdamstandysAndreas Crawfordtdougs
Douglas Bloomtjons
Jon BarakitchrissChris GeoffreytchucksChuck McLeant	separatort.twidthit
drawbranchitindenttnamessep%dtheightii�titemtypetwindowtstatettexttorientationtoktOkt	underlineitcommandtcanceltCancel(RsJeff Waxman(RsJohn Lee(RsPeter Kenson(RRsAlex Kellman(RRs
Alan Adams(RRsAndreas Crawford(RRs
Douglas Bloom(RRs
Jon Baraki(RRsChris Geoffrey(RRsChuck McLean(Rtexittwinfo_topleveltwm_protocoltTixtFrametRAISEDt
ScrolledHListtatpacktBOTHtTOPthlisttconfigtSUNKENt	add_childtWINDOWtDISABLEDtaddtTEXTt	ButtonBoxt
HORIZONTALtokcmdRtBOTTOMtX(Rtwtzttoptbossest	employeesR9tcounttbossR!tftpersontkeytbox((s0/usr/lib64/python2.7/Demo/tix/samples/SHList1.pyt__init__sL		1		""

cCs|j�dS(N(R(R((s0/usr/lib64/python2.7/Demo/tix/samples/SHList1.pyRCpscCs
d|_dS(Ni(R.(R((s0/usr/lib64/python2.7/Demo/tix/samples/SHList1.pyRsscCs-x&|jdkr(|jjjt�qWdS(Ni(R.Rttkt
dooneeventtTCL_ALL_EVENTS(R((s0/usr/lib64/python2.7/Demo/tix/samples/SHList1.pyRvscCs|jj�dS(N(RR(R((s0/usr/lib64/python2.7/Demo/tix/samples/SHList1.pyRzs(t__name__t
__module__RQRCRRR(((s0/usr/lib64/python2.7/Demo/tix/samples/SHList1.pyRs
	V			t__main__((R1RTRRRUtTkR(((s0/usr/lib64/python2.7/Demo/tix/samples/SHList1.pyt<module>s	hPKb1�Z�?�tix/samples/CmpImg.pycnu�[����
��^c@s`ddlZdZdZdZdZd�Zedkr\ej�Zee�ej	�ndS(i����Ns�/* XPM */
static char * netw_xpm[] = {
/* width height ncolors chars_per_pixel */
"32 32 7 1",
/* colors */
"       s None  c None",
".      c #000000000000",
"X      c white",
"o      c #c000c000c000",
"O      c #404040",
"+      c blue",
"@      c red",
/* pixels */
"                                ",
"                 .............. ",
"                 .XXXXXXXXXXXX. ",
"                 .XooooooooooO. ",
"                 .Xo.......XoO. ",
"                 .Xo.++++o+XoO. ",
"                 .Xo.++++o+XoO. ",
"                 .Xo.++oo++XoO. ",
"                 .Xo.++++++XoO. ",
"                 .Xo.+o++++XoO. ",
"                 .Xo.++++++XoO. ",
"                 .Xo.XXXXXXXoO. ",
"                 .XooooooooooO. ",
"                 .Xo@ooo....oO. ",
" ..............  .XooooooooooO. ",
" .XXXXXXXXXXXX.  .XooooooooooO. ",
" .XooooooooooO.  .OOOOOOOOOOOO. ",
" .Xo.......XoO.  .............. ",
" .Xo.++++o+XoO.        @        ",
" .Xo.++++o+XoO.        @        ",
" .Xo.++oo++XoO.        @        ",
" .Xo.++++++XoO.        @        ",
" .Xo.+o++++XoO.        @        ",
" .Xo.++++++XoO.      .....      ",
" .Xo.XXXXXXXoO.      .XXX.      ",
" .XooooooooooO.@@@@@@.X O.      ",
" .Xo@ooo....oO.      .OOO.      ",
" .XooooooooooO.      .....      ",
" .XooooooooooO.                 ",
" .OOOOOOOOOOOO.                 ",
" ..............                 ",
"                                "};
su/* XPM */
static char * drivea_xpm[] = {
/* width height ncolors chars_per_pixel */
"32 32 5 1",
/* colors */
"       s None  c None",
".      c #000000000000",
"X      c white",
"o      c #c000c000c000",
"O      c #800080008000",
/* pixels */
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"   ..........................   ",
"   .XXXXXXXXXXXXXXXXXXXXXXXo.   ",
"   .XooooooooooooooooooooooO.   ",
"   .Xooooooooooooooooo..oooO.   ",
"   .Xooooooooooooooooo..oooO.   ",
"   .XooooooooooooooooooooooO.   ",
"   .Xoooooooo.......oooooooO.   ",
"   .Xoo...................oO.   ",
"   .Xoooooooo.......oooooooO.   ",
"   .XooooooooooooooooooooooO.   ",
"   .XooooooooooooooooooooooO.   ",
"   .XooooooooooooooooooooooO.   ",
"   .XooooooooooooooooooooooO.   ",
"   .oOOOOOOOOOOOOOOOOOOOOOOO.   ",
"   ..........................   ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                "};
su
#define netw_width 32
#define netw_height 32
static unsigned char netw_bits[] = {
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x02, 0x40,
   0x00, 0x00, 0xfa, 0x5f, 0x00, 0x00, 0x0a, 0x50, 0x00, 0x00, 0x0a, 0x52,
   0x00, 0x00, 0x0a, 0x52, 0x00, 0x00, 0x8a, 0x51, 0x00, 0x00, 0x0a, 0x50,
   0x00, 0x00, 0x4a, 0x50, 0x00, 0x00, 0x0a, 0x50, 0x00, 0x00, 0x0a, 0x50,
   0x00, 0x00, 0xfa, 0x5f, 0x00, 0x00, 0x02, 0x40, 0xfe, 0x7f, 0x52, 0x55,
   0x02, 0x40, 0xaa, 0x6a, 0xfa, 0x5f, 0xfe, 0x7f, 0x0a, 0x50, 0xfe, 0x7f,
   0x0a, 0x52, 0x80, 0x00, 0x0a, 0x52, 0x80, 0x00, 0x8a, 0x51, 0x80, 0x00,
   0x0a, 0x50, 0x80, 0x00, 0x4a, 0x50, 0x80, 0x00, 0x0a, 0x50, 0xe0, 0x03,
   0x0a, 0x50, 0x20, 0x02, 0xfa, 0xdf, 0x3f, 0x03, 0x02, 0x40, 0xa0, 0x02,
   0x52, 0x55, 0xe0, 0x03, 0xaa, 0x6a, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00,
   0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
s{
#define drivea_width 32
#define drivea_height 32
static unsigned char drivea_bits[] = {
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0xf8, 0xff, 0xff, 0x1f, 0x08, 0x00, 0x00, 0x18, 0xa8, 0xaa, 0xaa, 0x1a,
   0x48, 0x55, 0xd5, 0x1d, 0xa8, 0xaa, 0xaa, 0x1b, 0x48, 0x55, 0x55, 0x1d,
   0xa8, 0xfa, 0xaf, 0x1a, 0xc8, 0xff, 0xff, 0x1d, 0xa8, 0xfa, 0xaf, 0x1a,
   0x48, 0x55, 0x55, 0x1d, 0xa8, 0xaa, 0xaa, 0x1a, 0x48, 0x55, 0x55, 0x1d,
   0xa8, 0xaa, 0xaa, 0x1a, 0xf8, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x1f,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
cCs�tjddt�|_|js<tjddt�|_ntjddt�|_|jsxtjddt�|_ntj|dddddd	�}tj|dddddd	�}tjd
d|�|_	|j	j
jt|j	�dd
�|j	j
jt|j	�dddddd�|j	j
jt|j	�dddd�|j	j
jt|j	�ddd|j�|j	|d<tjd
d|�|_
|j
j
jt|j
�dd
�|j
j
jt|j
�dddddd�|j
j
jt|j
�dddd�|j
j
jt|j
�ddd|j�|j
|d<tj|ddddd|d��}|jdtjdddddtjdd�|jdtjdddddtjdd�|jdtjdddddtjdd�dS( Ntpixmaptdatatbitmaptpadxitpadyitwidthixtcompoundtwindowtaddtlinettexts-texts	Hard Disks
-underlinet0tspaces-widtht7timages-imagetNetworktClosetcommandcSs
|j�S(N(tdestroy(tw((s//usr/lib64/python2.7/Demo/tix/samples/CmpImg.pyt<lambda>�ttsidei
tfilltexpand(tTixtImagetnetwork_pixmaptimg0tnetwork_bitmapthard_disk_pixmaptimg1thard_disk_bitmaptButtonthdd_imgttktcalltstrtnet_imgtpacktLEFTtY(Rthddtnettclose((s//usr/lib64/python2.7/Demo/tix/samples/CmpImg.pyt	RunSample�s6		!!"$
(+
"$
(+
..t__main__(
RRRRR R-t__name__tTktroottmainloop(((s//usr/lib64/python2.7/Demo/tix/samples/CmpImg.pyt<module>s/-	/
PKb1�Z7�:�BBtix/samples/BtnBox.pycnu�[����
��^c@sHddlZd�ZedkrDej�Zee�ej�ndS(i����NcCs�tj|dddddddtjdtjd	d
�}tj|dtj�}|jdd	d
ddddd|d��|jdd	dddddd|d��|jdtjdtj	�|jdtj
dtjdd�dS(Ntpadxitpadyi
tbditrelieftanchorttexts?This dialog box is
 a demonstration of the
 tixButtonBox widgettorientationtoktOKt	underlineitwidthitcommandcSs
|j�S(N(tdestroy(tw((s//usr/lib64/python2.7/Demo/tix/samples/BtnBox.pyt<lambda>#ttclosetCancelcSs
|j�S(N(R(R
((s//usr/lib64/python2.7/Demo/tix/samples/BtnBox.pyR%Rtsidetfilltexpand(tTixtLabeltRAISEDtCENTERt	ButtonBoxt
HORIZONTALtaddtpacktBOTTOMtXtTOPtBOTH(R
ttoptbox((s//usr/lib64/python2.7/Demo/tix/samples/BtnBox.pyt	RunSamples'	

t__main__(RR#t__name__tTktroottmainloop(((s//usr/lib64/python2.7/Demo/tix/samples/BtnBox.pyt<module>s
	
PKb1�ZV�G���tix/samples/Balloon.pynu�[���# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
#
# $Id$
#
# Tix Demonstration Program
#
# This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone
# program.

# This file demonstrates the use of the tixBalloon widget, which provides
# an interesting way to give help tips about elements in your user interface.
# Your can display the help message in a "balloon" and a status bar widget.
#

import Tix

TCL_ALL_EVENTS          = 0

def RunSample (root):
    balloon = DemoBalloon(root)
    balloon.mainloop()
    balloon.destroy()

class DemoBalloon:
    def __init__(self, w):
        self.root = w
        self.exit = -1

        z = w.winfo_toplevel()
        z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())

        status = Tix.Label(w, width=40, relief=Tix.SUNKEN, bd=1)
        status.pack(side=Tix.BOTTOM, fill=Tix.Y, padx=2, pady=1)

        # Create two mysterious widgets that need balloon help
        button1 = Tix.Button(w, text='Something Unexpected',
                             command=self.quitcmd)
        button2 = Tix.Button(w, text='Something Else Unexpected')
        button2['command'] = lambda w=button2: w.destroy()
        button1.pack(side=Tix.TOP, expand=1)
        button2.pack(side=Tix.TOP, expand=1)

        # Create the balloon widget and associate it with the widgets that we want
        # to provide tips for:
        b = Tix.Balloon(w, statusbar=status)

        b.bind_widget(button1, balloonmsg='Close Window',
                      statusmsg='Press this button to close this window')
        b.bind_widget(button2, balloonmsg='Self-destruct button',
                      statusmsg='Press this button and it will destroy itself')

    def quitcmd (self):
        self.exit = 0

    def mainloop(self):
        foundEvent = 1
        while self.exit < 0 and foundEvent > 0:
            foundEvent = self.root.tk.dooneevent(TCL_ALL_EVENTS)

    def destroy (self):
        self.root.destroy()

if __name__ == '__main__':
    root = Tix.Tk()
    RunSample(root)
PKb1�Z!��tix/samples/BtnBox.pynu�[���# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
#
# $Id$
#
# Tix Demonstration Program
#
# This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone
# program.

# This file demonstrates the use of the tixButtonBox widget, which is a
# group of TK buttons. You can use it to manage the buttons in a dialog box,
# for example.
#

import Tix

def RunSample(w):
    # Create the label on the top of the dialog box
    #
    top = Tix.Label(w, padx=20, pady=10, bd=1, relief=Tix.RAISED,
                    anchor=Tix.CENTER, text='This dialog box is\n a demonstration of the\n tixButtonBox widget')

    # Create the button box and add a few buttons in it. Set the
    # -width of all the buttons to the same value so that they
    # appear in the same size.
    #
    # Note that the -text, -underline, -command and -width options are all
    # standard options of the button widgets.
    #
    box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL)
    box.add('ok', text='OK', underline=0, width=5,
            command=lambda w=w: w.destroy())
    box.add('close', text='Cancel', underline=0, width=5,
            command=lambda w=w: w.destroy())
    box.pack(side=Tix.BOTTOM, fill=Tix.X)
    top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)

if __name__ == '__main__':
    root = Tix.Tk()
    RunSample(root)
    root.mainloop()
PKb1�Z���\
\
tix/samples/Balloon.pycnu�[����
��^c@sWddlZdZd�Zddd��YZedkrSej�Zee�ndS(i����NicCs$t|�}|j�|j�dS(N(tDemoBalloontmainlooptdestroy(troottballoon((s0/usr/lib64/python2.7/Demo/tix/samples/Balloon.pyt	RunSamples
RcBs,eZd�Zd�Zd�Zd�ZRS(c	Cs@||_d|_|j�}|jd|d��tj|dddtjdd�}|jd	tjd
tj	ddd
d�tj
|ddd|j�}tj
|dd�}|d�|d<|jd	tjdd�|jd	tjdd�tj
|d|�}|j|dddd�|j|dddd�dS(Ni����tWM_DELETE_WINDOWcSs
|j�S(N(tquitcmd(tself((s0/usr/lib64/python2.7/Demo/tix/samples/Balloon.pyt<lambda>!ttwidthi(trelieftbditsidetfilltpadxitpadyttextsSomething UnexpectedtcommandsSomething Else UnexpectedcSs
|j�S(N(R(tw((s0/usr/lib64/python2.7/Demo/tix/samples/Balloon.pyR	*R
texpandt	statusbart
balloonmsgsClose Windowt	statusmsgs&Press this button to close this windowsSelf-destruct buttons,Press this button and it will destroy itself(Rtexittwinfo_topleveltwm_protocoltTixtLabeltSUNKENtpacktBOTTOMtYtButtonRtTOPtBalloontbind_widget(RRtztstatustbutton1tbutton2tb((s0/usr/lib64/python2.7/Demo/tix/samples/Balloon.pyt__init__s"		$(cCs
d|_dS(Ni(R(R((s0/usr/lib64/python2.7/Demo/tix/samples/Balloon.pyR7scCsAd}x4|jdkr<|dkr<|jjjt�}q	WdS(Nii(RRttkt
dooneeventtTCL_ALL_EVENTS(Rt
foundEvent((s0/usr/lib64/python2.7/Demo/tix/samples/Balloon.pyR:scCs|jj�dS(N(RR(R((s0/usr/lib64/python2.7/Demo/tix/samples/Balloon.pyR?s(t__name__t
__module__R+RRR(((s0/usr/lib64/python2.7/Demo/tix/samples/Balloon.pyRs			t__main__((RR.RRR0tTkR(((s0/usr/lib64/python2.7/Demo/tix/samples/Balloon.pyt<module>s	'PKb1�Z��b&UUtix/samples/PopMenu.pyonu�[����
��^c@sHddlZd�ZedkrDej�Zee�ej�ndS(i����NcCstj|dtjdd�}tj|dd�}|jdddtjdd	d
d	�tj|dd�}|j|�|j|�|jj	d
ddd�|jj	d
ddd�|jj	d
ddd�|jj	d
ddd�|jj	d
ddd�tj
|j�}|j	d
d�|jjd
dd|�|jdtjddd
d	�tj
|dtj�}|jdddddddd|d ��|jd!dd"ddddd|d#��|jdtjdtj�|jdtjdtjdd�dS($NtrelieftbdittextsEPress the right mouse button over this button or its surrounding areatexpandtfilltpadxi2tpadyttitles
Popup TesttlabeltDesktopt	underlineitSelecttFindtSystemtHelptHellotMoretmenutsidei(torientationtoktOktwidthitcommandcSs
|j�S(N(tdestroy(tw((s0/usr/lib64/python2.7/Demo/tix/samples/PopMenu.pyt<lambda>0ttcanceltCancelcSs
|j�S(N(R(R((s0/usr/lib64/python2.7/Demo/tix/samples/PopMenu.pyR2R(tTixtFrametRAISEDtButtontpacktBOTHt	PopupMenutbind_widgetRtadd_commandtMenutadd_cascadetTOPt	ButtonBoxt
HORIZONTALtaddtBOTTOMtX(Rttoptbuttptm1tbox((s0/usr/lib64/python2.7/Demo/tix/samples/PopMenu.pyt	RunSamples,%



t__main__(RR4t__name__tTktroottmainloop(((s0/usr/lib64/python2.7/Demo/tix/samples/PopMenu.pyt<module>s
	%
PKb1�Z��{�̖̖tix/tixwidgets.pyonu�[����
��^c
@s�ddlZddlZddlZddlZddlTddlZddlZdQZdRZdSZ	dTZ
dUZdZd	dVd
��YZ
d�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zddddgad�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd �Z d!�Z!d"�Z"d#�Z#d$�Z$d%�Z%d&�Z&d'�Z'd(�Z(d)�Z)d*�Z*d+�Z+d,�Z,d-�Z-id.d/6d0d16Z.id2d26d3d46d5d66d7d86d9d:6d;d<6d=d=6d>d?6d@dA6dBdC6dDdE6dFdG6dHdI6dJdK6Z/iZ0d2d4d6d=d:d<d?dAdEdCdGdIdKg
e0d/<d8ge0d1<dL�Z1dM�Z2dN�Z3dO�Z4e5dPkr�ej6�a7et7�ndS(Wi����N(t*iiiiiitDemocBsPeZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	RS(cCsT||_d|_d|_d|_tj�|_|jjd�d|_	d|_
d|_d|_t
jd}tjj|�}|r'|tjkr'||_d}xHttt
j��D]1}t
j|}|dtjfkr�|}q�q�W|dkr|t
j|<q6t
jjd|�ntj�|_t
jjd|jd�dS(Ni����t0tis/samples(troottexittNonetdirtballoontTixt	StringVartuseBalloonstsett	statusbartwelmsgtwelfonttwelsizetsystargvtostpathtdirnametcurdirtrangetlentinserttgetcwd(tselfttoptprognameRtindextitp((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyt__init__s0								
	

c	Cs|j}tj|dddt�}tj|dddddd�}tj|dd	dddd�}|jd
t�|jd
t�tj|dd�}||d<tj|dd�}||d<|j	d
dddd|d��|j
d
ddddtd|j�|S(NtbditreliefttexttFilet	underlineit	takefocustHelptsidettearofftmenutlabeltExititcommandcSs
|j�S(N(tquitcmd(R((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyt<lambda>FRtBalloonHelptvariable(
RR	tFrametRAISEDt
MenubuttontpacktLEFTtRIGHTtMenutadd_commandtadd_checkbuttont
ToggleHelpR(RRtwtfilethelptfmthm((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyt
MkMainMenu9s	!!



c
Cs,|j}tj|dddddd�}|d|d<|jddd	d
dd|dd
��|jdddd
dd|dd��|jdddd
dd|dd��|jdddd
dd|dd��|jdddd
dd|dd��|jdddd
dd|dd��|S(NtipadxitipadytoptionssC
        tagPadX 6
        tagPadY 4
        borderWidth 2
        tbgtwelR,tWelcomeR&it	createcmdcSs
t||�S(N(t	MkWelcome(R=tname((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0ZRtchotChooserscSs
t||�S(N(t
MkChoosers(R=RK((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0\RtscrsScrolled WidgetscSs
t||�S(N(tMkScroll(R=RK((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0^RtmgrsManager WidgetscSs
t||�S(N(t	MkManager(R=RK((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0`RRsDirectory ListcSs
t||�S(N(t	MkDirList(R=RK((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0bRtexpsRun Sample ProgramscSs
t||�S(N(tMkSample(R=RK((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0dR(RR	tNoteBooktadd(RRR=((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pytMkMainNotebookOs"		c	Csq|j}tj|dtjdd�}tj|dtjdd�t_tjjddddddd	d
�|S(NR#R"itpadxitpadytleftitrights%70(	RR	R3R4tLabeltSUNKENtdemoR
tform(RRR=((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pytMkMainStatusgs
	!%cCs|j}|j�}|jd�|j�dkrD|jd�n
|jd�tj|�t_|j	�}|j
�}|j�}|jdt
dt�|jdtdt�|jdt
dddtd	d
dd
�tjtjd<|jd
|d��dS(NsTix Widget Demonstrationi s
790x590+10+10s
890x640+10+10R)tfilltexpandiRYiRZR
tWM_DELETE_WINDOWcSs
|j�S(N(R/(R((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0�R(Rtwinfo_topleveltwm_titletwinfo_screenwidthtgeometryR	tBalloonR_RRBRXRaR6tTOPtXtBOTTOMtBOTHR
twm_protocol(RRtztframe1tframe2tframe3((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pytbuildps	

(cCs
d|_dS(s@Quit our mainloop. It is up to you to call root.destroy() after.iN(R(R((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR/�scCsx|jdkry-x&|jdkr=|jjjt�qWWqtk
r\d|_dStk
r�tjdd�dkrd|_dSqqt	j
�\}}}d}x+tj|||�D]}||d7}q�Wytj
d	|�WnnXd|_td�qXqWdS(
s�This is an explict replacement for _tkinter mainloop()
        It lets you catch keyboard interrupts easier, and avoids
        the 20 msec. dead sleep() which burns a constant CPU.iiNt	InterruptsReally Quit?tyesRs
tError(RRttkt
dooneeventtTCL_ALL_EVENTSt
SystemExittKeyboardInterruptttkMessageBoxtaskquestionRtexc_infot	tracebacktformat_exceptiont	showerror(RtttvttbR$tline((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pytloop�s.
	
		cCs|jj�dS(N(Rtdestroy(R((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR��s(
t__name__t
__module__R!RBRXRaRsR/R�R�(((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyRs								"cCs.t|�atj�tj�tj�dS(N(RR_RsR�R�(R((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pytRunMain�s

c	Csi|j|�}t|�}t|�}|jdtdtdddd�|jdtdtdd�dS(NR)RbRYiRZRci(tpagetMkWelcomeBart
MkWelcomeTextR6RjRkRm(tnbRKR=tbarR$((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyRJ�s
"cCs�tj|dddtj�}tj|d|d��}tj|d|d��}d|jd<d	|jjd
<d|jd<d	|jjd
<|t_|t_	|j
tjd�|j
tjd
�|j
tjd�|j
tjd�|j
tjd�|j
tjd�|j
tjd�|j
tjd�|j
tjd�|jd�|jd	�|j
dtjdddd�|j
dtjdddd�tjj|dddd�tjj|dddd�|S(NR"iR#R.cSs
t|�S(N(tMainTextFont(R=((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0�RcSs
t|�S(N(R�(R=((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0�RitwidthitheightitCouriert	HelveticatLucidasTimes Romant8t10t12t14t18iR)RYRZtmsgs
Choose
a fontt	statusmsgsChoose a font for this pages
Point sizes"Choose the font size for this page(R	R3tGROOVEtComboBoxtentrytslistboxtlistboxR_RRRtENDtpickR6R7Rtbind_widget(RR=tb1tb2((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR��s6

		

c
Cs�tj|dd�}|j}d}tj|dddddtjd	|�}tj|dddd
dtjd	d�}|jdd
dtjdddd�|jdd
dtjdddd�|t_	|S(Nt	scrollbartautosWelcome to TIX in PythonR"iR�itanchorR$i�s%Tix is a set of mega-widgets based on TK. This program demonstrates the widgets in the Tix widget set. You can choose the pages in this window to look at the corresponding widgets. 

To quit this program, choose the "File | Exit" command.

For more information, see http://tix.sourceforge.net.RciRbRYi
RZ(
R	tScrolledWindowtwindowR]tNtMessageR6RmR_R(RR=twinR$ttitleR�((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR��s		%%	cCs]tjs
dStjd}tjd}|dkr<d}nd||f}|tjd<dS(NtvaluesTimes Romanttimess%s %stfont(R_RRR(R=R�tpointtfontstr((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR��s	

	cCs6tjj�dkr%dtjd<n
dtjd<dS(Nt1tbothtstatetnone(R_RtgetR(((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR<sc	Csw|j|�}d}tj|ddd|�}tj|ddd|�}tj|ddd|�}tj|ddd|�}tj|ddd|�}tj|dd	d|�}	tj|dd
d|�}
tj|ddd|�}t|j�t|j�t|j�t|j�t|j�t	|	j�t
|
j�t|j�|jdd
dd
dd�|jdd
ddt
|�d|�|jdd
ddt
|�d|dd�|jd|dd
dd�|jd|ddt
|�d|�|	jd|ddt
|�d|�|jd|ddt
|�d|	dd�|
jdddd
dd�dS(Nslabel.padX 4R,sChooser WidgetsREttixComboBoxt
tixControlt	tixSelectt
tixOptionMenuttixFileEntryttixFileSelectBoxsTool BarRiR[R\s%33t&tbottomi����s%66(R�R	t
LabelFrametMkTitletframetMkCombot	MkControltMkSelectt	MkOptMenut	MkFileEntt	MkFileBoxt	MkToolBarR`tstr(R�RKR=REttiltcbxtctltseltopttfiltfbxttbr((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyRNs4







&,&&,cCseddtjdf}tj|ddddd|�}tj|dd	dd
d|�}tj|dddd
dd
d
tjd|�}|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd�|jtjd �|jtjd!�|jd"tjd#d$d%d&�|jd"tjd#d$d%d&�|jd"tjd#d$d%d&�dS('Ns-label.width %d label.anchor %s entry.width %di
iR,tStaticteditableiREtEditableitHistorythistoryR�tJanuarytFebruarytMarchtApriltMaytJunetJulytAugustt	SeptembertOctobertNovembertDecembertAngolat
BangladeshtChinatDenmarktEcuadors/usr/bin/kshs/usr/local/lib/pythons/var/admR)RYiRZi(R	tER�RR�R6Rj(R=REtstaticR�R�((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR�0s8!!tBengaltDelhit	Karnatakas
Tamil NaducCshtjtj��|}|dkr8tt�d}n|tt�krSd}ntjt|�dS(Nii(tstatesRtdemo_spintxtR�RR(R=tinctidx((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pytspin_cmdTs	cCs:ytjtj��}Wntk
r1tdSXt|S(Ni(R�RR�R�t
ValueError(R=R((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyt
spin_validate^s

	cCs�ddtjdf}tj�atjtd�tj|ddd|�}tj|ddd	td|�}|d
�|d<|d�|d
<|d�|d<|jdtjdddd�|jdtjdddd�dS(Ns-label.width %d label.anchor %s entry.width %di
i
iR,tNumbersREtStatesR2cSs
t|d�S(Ni(R�(R=((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0rRtincrcmdcSs
t|d�S(Ni����(R�(R=((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0sRtdecrcmdcSs
t|�S(N(R�(R=((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0tRtvalidatecmdR)RYiRZi(	R	R�R
R�RR�tControlR6Rj(R=REtsimpletspintxt((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR�hs	cCs�dtj}tj|dddddddtjdtjd	|�}tj|dd
dddddtjdtjd	|�}|jdd
d�|jdd
d�|jdd
d�|jdd
d�|jdd
d�|jdd
d�|jdd
d�|jdd
d�|jdd
d�|jdd
d�|jdtjddddd tj�|jdtjddddd tj�dS(!Nslabel.anchor %sR,sMere Mortalst	allowzeroitradiotorientationt	labelsideREtGeeksiteatR$tEattworktWorktplaytPlaytpartytPartytsleeptSleeptprog1tProgramtprog2tprog3R)RYiRZiRb(	R	tCENTERtSelecttVERTICALRjRWR6R7Rk(R=REtsel1tsel2((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR�ys*
						(cCs�dtj}tj|ddd|�}|jddd�|jddd�|jd	dd
�|jddd�|jd
�|jddd�|jddd�|jdtjdddd�dS(Ns#menubutton.width 15 label.anchor %sR,sFile Format : RER$s
Plain Texttpostt
PostScripttformatsFormatted TextthtmltHTMLtsepttextLaTeXtrtfsRich Text FormatRbRYiRZi(R	R�t
OptionMenuR:R6Rk(R=REtm((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR��s

cCs�tj|dtjdddtjdd�}tj|dd�}|jd	tjd
ddtjd
ddd�|jd	tjdtjd
ddd�dS(NR#R�i�R�R$sGPress the "open file" icon button and a TixFileSelectDialog will popup.R,sSelect a file : R)RciRbRYiRZ(	R	R�tFLATR�t	FileEntryR6RjRmRk(R=R�tent((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR��s	.cCs�tj|dtjdddtjdd�}tj|�}|jdtjdd	d
tjddd
d�|jdtjd
tjddd
d�dS(s�The FileSelectBox is a Motif-style box with various enhancements.
    For example, you can adjust the size of the two listboxes
    and your past selections are recorded.
    R#R�i�R�R$s�The Tix FileSelectBox is a Motif-style box with various enhancements. For example, you can adjust the size of the two listboxes and your past selections are recorded.R)RciRbRYiRZN(	R	R�R"R�t
FileSelectBoxR6RjRmRk(R=R�tbox((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR��s	.cCs;d}tj|dtjdddtjdd�}tj|dd	dtj�}tj|d
ddd
ddd|�}tj|d
d
ddddd|�}|jdddtj	d�|jdddtj	d�|jdddtj	d�|jdddtj	d�|jdddtj	d�|jdddtj	d�|jdddtj	d �|jd!ddtj	d"�|j
d#tjd$dd%tjd&d'd(d'�|j
d#tjd%tj
d&d'd(d'�|j
i|d)6d#tjd&d'd(d'�|j
i|d)6d#tjd&d'd(d'�d*S(+sHThe Select widget is also good for arranging buttons in a tool bar.
    sframe.borderWidth 1R#R�i�R�R$sCThe Select widget is also good for arranging buttons in a tool bar.R"iR�iRiR,RREtboldtbitmapt@s/bitmaps/bold.xbmtitalics/bitmaps/italic.xbmR&s/bitmaps/underline.xbmtcapitals/bitmaps/capital.xbmR[s/bitmaps/leftj.xbmR\s/bitmaps/rightj.xbmtcenters/bitmaps/centerj.xbmtjustifys/bitmaps/justify.xbmR)RcRbRYiRZtinN(R	R�R"R�R3R4RRWR_RR6RjRmRkR7(R=RER�R�R�tpara((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR��s&	''.()cCs_tj|dtjdddtjdd�}|jdtjdd	d
tjddd
d�dS(NR#R�i�R�R$seThere are many types of "chooser" widgets that allow the user to input different types of informationR)RciRbRYiRZ(R	R�R"R�R6RjRm(R=R�((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR��s	c	Cs�|j|�}d}tj|ddd|�}tj|ddd|�}tj|ddd|�}t|j�t|j�t|j�|jddd	dd
ddd
�|jddd	|d
ddd
�|jddd	|d
d
dd
�dS(Nslabel.padX 4R,sTix.ScrolledListBoxREsTix.ScrolledWindowsTix.ScrolledTextRiR[R\s%33R�i����s%66(R�R	R�tMkSListR�t	MkSWindowtMkSTextR`(R�RKR=REtslstswntstx((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyRP�s


""cCstj|dddd�}tj|�}tj|dtjdddtjdd	�}tj|d
d�}|jdd
dddddd�|jjtj	d�|jjtj	d�|jjtj	d�|jjtj	d�|jjtj	d�|jjtj	d�|jjtj	d�tj
|dddtjdddddd
d d!�}tj|dd"d#||d$��}|j
d%�|jd&tj�|jdtj�|jd'dd&tj�|jd&tj�|jd(d)d%||d*��d+S(,s�This TixScrolledListBox is configured so that it uses scrollbars
    only when it is necessary. Use the handles to resize the listbox and
    watch the scrollbars automatically appear and disappear.  R�i,R�iJR#i�R�R$s�This TixScrolledListBox is configured so that it uses scrollbars only when it is necessary. Use the handles to resize the listbox and watch the scrollbars automatically appear and disappear.R�R�txi2tyi�ixiPtAlabamat
CaliforniatMontanas
New JerseysNew YorktPennsylvaniat
WashingtonRFtblackt
handlesizeitgriddeditminwidtht	minheightitResetR.cSs
t||�S(N(tSList_reset(R=R6((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0RiRbRcs<Map>tfunccSs%|jjdt|�dt|��S(Nt
tixDoWhenIdletattachwidget(RwtcallR�(targtrhtlist((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0sN(R	R3R�R"R�tScrolledListBoxtplaceR�RR�tResizeHandleR4tButtont	propagateR6RkRRmtbind(R=RtbotR�RJRItbtn((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0�s0	"	$
c	Cs=|jdddddddd�|j�|j|�dS(	NR6i2R7i�R�ixR�iP(RLtupdatet
attach_widget(RIRJ((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyRC
s"
cCs�d}tjjtjdd�}tjj|�s@|d7}ntj|dddd�}tj|�}tj|dtj	dd	d
tj
d|�}tj|dd
�}|jj
dd|�}tj|jd|�}|jdddtj�|jdddddddd�tj|dddtjdddddd d!d�}	tj|dd"d#|	|d$��}
|jd%�|jdtj�|
jd
tj�|jdddtj�|jdtj�|jd&d'd%|	|d(��d)S(*s�The ScrolledWindow widget allows you to scroll any kind of Tk
    widget. It is more versatile than a scrolled canvas widget.
    s}The Tix ScrolledWindow widget allows you to scroll any kind of Tk widget. It is more versatile than a scrolled canvas widget.tbitmapsstix.gifs (Image missing)R�iJR�R#i�R�R$R�R�tphotoR>timageRciRbR6iR7i�i�ixRFR=R>iR?R@i2RARBR.cSs
t||�S(N(t
SWindow_reset(R=R6((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR0,Ris<Map>RDcSs%|jjdt|�dt|��S(NRERF(RwRGR�(RHRIR�((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR03sN(RRtjoinR_RtisfileR	R3R�R"R�R�R�timage_createR]R6RmRLRMR4RNRORkRRP(R=R$R>RRQR�R�timage1tlblRIRR((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyR1s0
	"	$
c	Cs=|jdddddddd�|j�|j|�dS(	NR6iR7i�R�i�R�ix(RLRSRT(RIR�((s+/usr/lib64/python2.7/Demo/tix/tixwidgets.pyRX6s"
cCs�tj|dddd�}tj|�}tj|dtjdddtjdd�}tj|d	d
�}d|jd<|jjtjd
�|j	dddddddd�tj
|dddtjdddddddd�}tj|ddd||d��}|j
d �|jd!tj�|jdtj�|jd"dd!tj�|jd!tj�|jd#d$d ||d%��d&S('s�The TixScrolledWindow widget allows you to scroll any kind of Tk
    widget. It is more versatile than a scrolled canva