PythonCard - My app stuck when button clicked

2009-05-13 Thread daved170
Hi there,
I'm newbie in pythonCard.
I have an application with 2 buttons : START , STOP
Start execute a while(1) loop that execute my calculations.
Stop suppose to raise a flag that will end that loop.

Whenever I pish the START button my GUI is stuck. the calculation
executes but I can't push the STOP button.

I added thread that START start a thread that execute my calculations.
I also added a Global variable that will hold the indication if the
loop should continue.
The problem now is that the thread ignore that variable and loop
forever.

Is there a simple way to make sure that the GUI won't stuck (without
threads)?
And if there isn't such way I would appriciet it very much if anyone
could post an example of how to make my thread read that variable
Thanks
Dave
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: PythonCard - My app stuck when button clicked

2009-05-14 Thread daved170
On May 13, 7:42 pm, Dave Angel  wrote:
> daved170 wrote:
> > Hi there,
> > I'm newbie in pythonCard.
> > I have an application with 2 buttons : START , STOP
> > Start execute a while(1) loop that execute my calculations.
> > Stop suppose to raise a flag that will end that loop.
>
> > Whenever I pish the START button my GUI is stuck. the calculation
> > executes but I can't push the STOP button.
>
> > I added thread that START start a thread that execute my calculations.
> > I also added a Global variable that will hold the indication if the
> > loop should continue.
> > The problem now is that the thread ignore that variable and loop
> > forever.
>
> > Is there a simple way to make sure that the GUI won't stuck (without
> > threads)?
> > And if there isn't such way I would appriciet it very much if anyone
> > could post an example of how to make my thread read that variable
> > Thanks
> > Dave
>
> I don't know PythonCard, but most GUI's are similar enough that the
> concepts will work, even though the details differ.  I'll assume that
> PythonCard has a traditional event loop, from which all events are
> dispatched.
>
> If your loop is fairly small, then you should keep it to one thread.  
> Debugging it will usually be much easier.  The trick is to break the
> task into pieces (each piece might be once around what is now a loop),
> and invoke one piece each time the event loop empties.  I can't tell you
> how to do that without seeing your loop, but it's not usually very hard.
>
> Now, there is some way of POSTing an event to the event loop.  That puts
> the event *after* all the events that are already there, but returns
> control immediately.  So create a custom event, and POST it from the
> START button's button-pressed event.  That will fire off one "loop" of
> the special task, in other words, make one function call to your new
> function.  Then at the end of the function, POST it again, unless the
> STOP button has been pressed in the meantime.
>
> An optimization for this is to use coroutines, which are usually done
> with a generator.  It's much trickier to describe, but much easier to
> accomplish.  Roughly, you'd take your existing loop, and put a yield
> statement in it at appropriate place(s).  Then the custom event is
> simply a call to the .next() function of that generator.
>
> Now, threading isn't that tough either, depending on how much data is
> being shared between the thread and the main program.  You say that
> sharing a global flag isn't working, but it should.  So how about if you
> show us some code, and somebody'll spot the trouble.  For example, is
> the thread defined in the same module as the App?  Global only shares
> between a single module.  Another reason globals might seem to fail is
> if you tried to do mutual imports between two or more modules.  (A
> imports B, which imports A).  Sometimes that fails in mysterious ways.
>
> Make a simple (stripped) example of what you're trying, and we'll try to
> find the problem.  Without concrete code, we end up with ambiguities
> like the above usage of two different meanings for "the loop."- Hide quoted 
> text -
>
> - Show quoted text -

Thank's Dave,
Here my code, It's a very simple app. the Start button starts a TCP/IP
communication and the Stop should dtop it and kill the client.
I'll be thankful if you'll be able to spot my mistake.
Thanks again
Dave

#Global Variable
bStopLoop = False

#Global Function
def execute(sockObj):
   while(!bStopLoop):
  str = sockObj.recv(1024)
  tmpStr = "Hello " + str
  sockObj.send(tmpStr)

#Thread handle class
class myThread(threading.Thread):
   def __init__(self,sockObj):
  threading.Thread.__init__(self)
  bStopLoop = False
  self.sockObj = sockObj

   def run(self):
  execute(self.SockObj)

# GUI
class GUI(model.Background)

   def on_Start_mouseclick(self,event):
   try:
  event.target.enable = False
  event.target.redraw()
  self.components.Start.enable = False
  self.currThread = myThread(self.sockObj)
  self.currThread.Start()
  wx.SafeYield(self)
  self.components.Start.enable = True
   except:
  .

   def on_Stop_mouseclick(self,event):
  bStopLoop = True
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: PythonCard - My app stuck when button clicked

2009-05-14 Thread daved170
On May 14, 2:37 pm, Dave Angel  wrote:
> daved170 wrote:
> > On May 13, 7:42 pm, Dave Angel  wrote:
>
> >> daved170 wrote:
>
> >>> Hi there,
> >>> I'm newbie in pythonCard.
> >>> I have an application with 2 buttons : START , STOP
> >>> Start execute a while(1) loop that execute my calculations.
> >>> Stop suppose to raise a flag that will end that loop.
>
> >>> Whenever I pish the START button my GUI is stuck. the calculation
> >>> executes but I can't push the STOP button.
>
> >>> I added thread that START start a thread that execute my calculations.
> >>> I also added a Global variable that will hold the indication if the
> >>> loop should continue.
> >>> The problem now is that the thread ignore that variable and loop
> >>> forever.
>
> >>> Is there a simple way to make sure that the GUI won't stuck (without
> >>> threads)?
> >>> And if there isn't such way I would appriciet it very much if anyone
> >>> could post an example of how to make my thread read that variable
> >>> Thanks
> >>> Dave
>
> >> I don't know PythonCard, but most GUI's are similar enough that the
> >> concepts will work, even though the details differ.  I'll assume that
> >> PythonCard has a traditional event loop, from which all events are
> >> dispatched.
>
> >> If your loop is fairly small, then you should keep it to one thread.  
> >> Debugging it will usually be much easier.  The trick is to break the
> >> task into pieces (each piece might be once around what is now a loop),
> >> and invoke one piece each time the event loop empties.  I can't tell you
> >> how to do that without seeing your loop, but it's not usually very hard.
>
> >> Now, there is some way of POSTing an event to the event loop.  That puts
> >> the event *after* all the events that are already there, but returns
> >> control immediately.  So create a custom event, and POST it from the
> >> START button's button-pressed event.  That will fire off one "loop" of
> >> the special task, in other words, make one function call to your new
> >> function.  Then at the end of the function, POST it again, unless the
> >> STOP button has been pressed in the meantime.
>
> >> An optimization for this is to use coroutines, which are usually done
> >> with a generator.  It's much trickier to describe, but much easier to
> >> accomplish.  Roughly, you'd take your existing loop, and put a yield
> >> statement in it at appropriate place(s).  Then the custom event is
> >> simply a call to the .next() function of that generator.
>
> >> Now, threading isn't that tough either, depending on how much data is
> >> being shared between the thread and the main program.  You say that
> >> sharing a global flag isn't working, but it should.  So how about if you
> >> show us some code, and somebody'll spot the trouble.  For example, is
> >> the thread defined in the same module as the App?  Global only shares
> >> between a single module.  Another reason globals might seem to fail is
> >> if you tried to do mutual imports between two or more modules.  (A
> >> imports B, which imports A).  Sometimes that fails in mysterious ways.
>
> >> Make a simple (stripped) example of what you're trying, and we'll try to
> >> find the problem.  Without concrete code, we end up with ambiguities
> >> like the above usage of two different meanings for "the loop."- Hide 
> >> quoted text -
>
> >> - Show quoted text -
>
> > Thank's Dave,
> > Here my code, It's a very simple app. the Start button starts a TCP/IP
> > communication and the Stop should dtop it and kill the client.
> > I'll be thankful if you'll be able to spot my mistake.
> > Thanks again
> > Dave
>
> > #Global Variable
> > bStopLoop =alse
>
> > #Global Function
> > def execute(sockObj):
> >    while(!bStopLoop):
> >       str =ockObj.recv(1024)
> >       tmpStr =Hello " + str
> >       sockObj.send(tmpStr)
>
> > #Thread handle class
> > class myThread(threading.Thread):
> >    def __init__(self,sockObj):
> >       threading.Thread.__init__(self)
> >       bStopLoop =alse
> >       self.sockObj =ockObj
>
> >    def run(self):
> >       execute(self.SockObj)
>
> > # GUI
> > class GUI(model.Bac

read text file byte by byte

2009-12-11 Thread daved170
Hello everybody,
I need to read a text file byte after byte.
Eache byte is sent to a function that scramble it
and I need to write the result to binary file.

I've got some questions -
1) How do I read the file byte by byte
2) Should I use streams? If so and I get my entire scrambled text in
stream can I just write it to the binary file?

Thanks
Dave
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: read text file byte by byte

2009-12-12 Thread daved170
On Dec 13, 2:34 am, Dennis Lee Bieber  wrote:
> On Sat, 12 Dec 2009 10:46:01 +0100, census 
> declaimed the following in gmane.comp.python.general:
>
>
>
> > def scramble (a): return (a + 13) % 256
>
>         I'll see your modulo rot 13 and raise with a exclusive or...
>
> -=-=-=-=-
>
> import sys
>
> def scramble(block, key="don't look"):
>     copies = int(len(block) / len(key)) + 1
>     keystring = key * copies
>     return "".join([ chr( ord(block[i])
>                           ^ ord(keystring[i]))
>                      for i in range(len(block))])
>
> def process(fin, fout, key=None):
>     din = open(fin, "rb")
>     dout = open(fout, "wb")
>     while True:
>         block = din.read(1024)
>         if not block: break
>         if key is None:
>             block = scramble(block)
>         else:
>             block = scramble(block, key)
>         dout.write(block)
>     dout.close()
>     din.close()
>
> if __name__ == "__main__":
>     fin = sys.argv[1]
>     fout = sys.argv[2]
>     if len(sys.argv) > 3:
>         key = sys.argv[3]
>     else:
>         key = None
>     process(fin, fout, key)
> --
>         Wulfraed         Dennis Lee Bieber               KD6MOG
>         [email protected]      HTTP://wlfraed.home.netcom.com/


Thank you all.
Dennis I really liked you solution for the issue but I have two
question about it:
1) My origin file is Text file and not binary
2) I need to read each time 1 byte. I didn't see that on your example
code.
Thanks again All of you
Dave
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: read text file byte by byte

2009-12-15 Thread daved170
On 13 דצמבר, 22:39, Dennis Lee Bieber  wrote:
> On Sat, 12 Dec 2009 22:15:50 -0800 (PST), daved170 
> declaimed the following in gmane.comp.python.general:
>
> > Thank you all.
> > Dennis I really liked you solution for the issue but I have two
> > question about it:
> > 1) My origin file is Text file and not binary
>
>         Do you need to process the bytes in the file as they are? Or do you
> accept changes in line-endings (M$ Windows "text" files use  as
> line ending, but if you read it in Python as "text"  is
> converted to a single .
>
> > 2) I need to read each time 1 byte. I didn't see that on your example
> > code.
>
>         You've never explained why you need to READ 1 byte at a time, vs
> reading a block (I chose 1KB) and processing each byte IN THE BLOCK.
> After all, if you do use 1 byte I/O, your program is going to be very
> slow, as each read is blocking (suspends) while asking the O/S for the
> next character in the file (this depends upon the underlying I/O library
> implementation -- I suspect any modern I/O system is still reading some
> block size [256 to 4K] and then returning parts of that block as
> needed). OTOH, reading a block at a time makes for one suspension and
> then a lot of data to be processed however you want.
>
>         You originally stated that you want to "scramble" the bytes -- if
> you mean to implement some sort of encryption algorithm you should know
> that most of them work in blocks as the "key" is longer than one byte.
>
>         My sample reads in chunks, then the scramble function XORs each byte
> with the corresponding byte in the supplied key string, finally
> rejoining all the now individual bytes into a single chunk for
> subsequent output.
> --
>         Wulfraed         Dennis Lee Bieber               KD6MOG
>         [email protected]      HTTP://wlfraed.home.netcom.com/

Hi All,
As I read again your comments and the codes you posted I realize that
I was mistaken.
I don't need to read the file byte by byte. you all right. I do need
to scramble each byte. So I'll do as you said - I'll read blocks and
scramble each byte in the block.
And now for my last question in this subject.
Lets say that my file contains the following line: "Hello World".
I read it using the read(1024) as you suggested in your sample.
Now, how can I XOR it with 0xFF for example?
Thanks again
Dave
-- 
http://mail.python.org/mailman/listinfo/python-list


run exe and create exe

2009-10-11 Thread daved170
Hi everybody,
I have 2 questions:
1) I created my python application. It has QT Gui. How can I make exe
of it? I don't want everytime I run the file it'll open the command
line window which does nothing.

2) My Application suppose to be a client server app. Anyhow, for now
It's running only on local host. I added a button that run the server
file.
my server file located at "c:\temp\server.py". It takes no arguments.

I tried the following codes at the push button function:

os.system(""c:\temp\server.py"") - It stuck my GUI. I guess that this
function doesn't open a new proccess.

I also tried :
os.spawnv(os.P_NOWAIT,"c:\temp\server.py");

It raised the following error:
OSError: [Errno 8] Exec format error.

Any Idea what to do?

Thanks
DaveD
-- 
http://mail.python.org/mailman/listinfo/python-list


run exe on different computer

2009-09-13 Thread daved170
Hi everybody,
I'm building a small python program that run a service (exe file) on
my servers.
I don't want to use remote desktop and it's siblings.

I would like to have some information on how to run an exe on a
different computer and if there a way to check if that exe is still
alive.

Thanks
Dave
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: run exe on different computer

2009-09-13 Thread daved170
On Sep 13, 2:17 pm, Dave Angel  wrote:
> daved170 wrote:
> > Hi everybody,
> > I'm building a small python program that run a service (exe file) on
> > my servers.
> > I don't want to use remote desktop and it's siblings.
>
> > I would like to have some information on how to run an exe on a
> > different computer and if there a way to check if that exe is still
> > alive.
>
> > Thanks
> > Dave
>
> On a question like this, you really need to supply much more information
> on your constraints.  You could start by saying these servers are
> running Windows Server 2003.  And that they're on a domain (rather than
> a workgroup).  And that you're trying to access them from another
> machine within the same local domain, not over the internet.  And that
> your local machine is on the same domain, and has an account with admin
> privileges for all the desired servers.  And that you are allowed to do
> a one-time install (of something) on each server prior to this
> particular need.  And that each server already has Python version 2.5
> installed, and the IT department won't allow you to install any later
> version.
>
> Then once you have an environment, you need to specify just what kind of
> program you want to run on those servers.  Is it an EXE program?  Or is
> it Python, with a particular script?  Does it really need to be a
> *service*, which has a particular set of constraints, and should be
> installed, and started/stopped using the service manager.  Do you want
> this program to restart whenever the servers are restarted?
>
> One solution that should work for nearly every Windows topology might be
> to go to each server, run the scheduler task, and specify a new batch
> file to be run upon boot.  This batch file can check a specified
> (shared) directory for a python script, and if found, run it.  If not
> found, sleep for 60 seconds or so, then repeat.  Note that it's a good
> idea to put a five minute delay at the very beginning, in case the
> script needs to be deleted at the next boot.  Sometimes a bug requires
> surgery, and it's good to have enough time to do it.
>
> Now, to control those servers from another machine, copy an appropriate
> script into the prearranged directory.  Within a minute, it'll be
> running, and it can post whatever results it likes in another accessible
> directory.
>
> Whether this is a "safe" thing to do is a separate question.  Generally
> an IT department likes to have some control over just what programs run
> on their servers, and for good reason.
>
> DaveA

Hi DaveA
Thanks for your answer. I'll try to clearify myself.
For now I'm trying to do that on client & server that are win XP. They
both on the same domain (maybe in the future they'll be runinig on the
web). I have admin user on both my computers.
I have both an exe and a python app that I'd like to control from my
client.
Insted of logging to my Server I would like to write a python app at
my client that allows me to control both that exe and my Server-python-
app. I don't want to use the schedualer because I would like to
control it from my client.
I can install whatever I'll like on both of the computers. they are
mine and I have full access for them.
I hope I clearify myself and if there are more solutions I'll be happy
to be noted.
Thans
DaveD :)
-- 
http://mail.python.org/mailman/listinfo/python-list


PyQT child forms

2009-09-13 Thread daved170
Hi everybody,
I'm building my GUI app with PyQT and i'm quite new with it.
I looked for example for managing a form and a child form.
My goal is to run the main form and a certain button will open a child
form. Whenever the child form will be open the main form will be
disabled until the child form is closed.
Moreover I would like to know how to pass data from the child form to
the main form.
Thank you very much
DaveD
-- 
http://mail.python.org/mailman/listinfo/python-list


PyQT Qthread stuck main app

2009-09-15 Thread daved170
Hi everybody,
I've got a simple GUI app written in python and pyqt.
I'm having 2 buttons - "start" and "stop"

start calls a function that start a thread and stop stops it.

my problem is that when start is pusshed the entire window stuck and
it's impossible to push the STOP button and even when it looks like
it's been pushed it actually don't do anything.

any idea how to fix it?
Thanks Dave


class myThread(QtCore.QThread):
   def__init__(self):
  self.alive = 1

   def run(self):
  while self.alive:
   print "Alive"
  print "Not Alive"

   def stop(self):
   print "stop pushed"
   self.alive = 0

class GUI(QtGui.QMainWindow):
  def __init__(self):
   # all kind of initialization

 @QtCore.pyqtSignature("start")
 def on_start_clicked(self):
 self.cThread = myThread()
 self.cThread.start()

 @QtCore.pyqtSignature("stop")
 def on_stop_clicked(self):
 self.cThread.stop()
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: PyQT Qthread stuck main app

2009-09-15 Thread daved170
On Sep 15, 2:54 pm, David Boddie  wrote:
> On Tue Sep 15 12:59:35 CEST 2009, daved170 wrote:
>
> > my problem is that when start is pusshed the entire window stuck and
> > it's impossible to push the STOP button and even when it looks like
> > it's been pushed it actually don't do anything.
>
> > any idea how to fix it?
>
> Does adding a call to the base class's __init__() method help?
>
> class myThread(QtCore.QThread):
>    def__init__(self):
>       QtCore.QThread.__init__(self)
>       self.alive = 1
>
> David

Hi David,
I did write that line. I forgot copying it to my code here.
The problem still happens. When I kill the app only then I see the
message "stopped pushed".

any other idead?
thanks Dave
-- 
http://mail.python.org/mailman/listinfo/python-list


weird str error

2009-09-15 Thread daved170
Hi everybody,
I'm using SPE 0.8.3.c as my python editor.
I'm using the str() function and i got a very odd error.

I'm trying to do this: print str("HI")
When i'm writing this line in the shell it prints: HI
When it's in my code (it's the only line) i'm getting the following
error:

file "c:\Python25\lib\local.py" line 242, in str
   return format("%.12g",val)

file "c:\Python25\lib\local.py" line 145, in format
   formatted = percent % value
   TypeError, float argument required

any idea? It's worked for the entire day and unfortunately when i
started my testing it raised this erroe/
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: weird str error

2009-09-16 Thread daved170
On Sep 15, 6:29 pm, Peter Otten <[email protected]> wrote:
> daved170 wrote:
> > Hi everybody,
> > I'm using SPE 0.8.3.c as my python editor.
> > I'm using thestr() function and i got a very odd error.
>
> > I'm trying to do this: printstr("HI")
> > When i'm writing this line in the shell it prints: HI
> > When it's in my code (it's the only line) i'm getting the following
> > error:
>
> > file "c:\Python25\lib\local.py" line 242, instr
> >    return format("%.12g",val)
>
> > file "c:\Python25\lib\local.py" line 145, in format
> >    formatted = percent % value
> >    TypeError, float argument required
>
> > any idea? It's worked for the entire day and unfortunately when i
> > started my testing it raised this erroe/
>
> local.py or locale.py? If the latter you are probably doing a star import:
>
> from locale import *
>
> This will replace the builtinstr() with locale.str() which indeed requires
> a float:
>
> >>>str("HI")
> 'HI'
> >>> from locale import *
> >>>str("HI")
>
> Traceback (most recent call last):
>   File "", line 1, in 
>   File "/usr/lib/python2.5/locale.py", line 244, instr
>     return format("%.12g", val)
>   File "/usr/lib/python2.5/locale.py", line 147, in format
>     formatted = percent % value
> TypeError: float argument required
>
> As a general rule use the standard import
>
> import locale
>
> and then invoke the module's functions with an explicit prefix:
>
> locale.setlocale(...)
>
> It's a bit more to type, but it will save you a lot of trouble.
>
> Peter
>
> PS: Whenstr() is the builtinstr("HI") converts a string into a string
> which does not make much sense.- Hide quoted text -
>
> - Show quoted text -

Hi Peter,
Thanks for your answer.
I'll clearify myself. I'm using QString cause I have a GUI app. I want
to convert it to python string. It works well for several month and
suddenly two days ago it didn't. I'm not using localE at all (i'm not
importing it).
After your answer I tried it but it still didn't work.
Any other ideas?
Thanks
DaveD
-- 
http://mail.python.org/mailman/listinfo/python-list


raise errors

2009-09-21 Thread daved170
Hi everybody,
I need help with exceptions raising.
My goal is to print at the outer functions all the errors including
the most inner one.

For example:

def foo1(self):
   try:
foo2()
   except ? :
 print "outer Err at foo1" + ??

def foo2(self):
   try:
error occured
   except ? :
 raise "inner Err at foo2"


the ? remarks that I have no idea what to use.

I would like the print to be : outer Err at foo1 , inner Err at foo1

thanks
daved
-- 
http://mail.python.org/mailman/listinfo/python-list


passing object between classes

2009-09-21 Thread daved170
Hi everybody,
I built my owen log obj as a class.
I'm passing it to another object (actually to a thread).
When I run my app it raise error at the line when I'm using that log
obj. is there any problem with the concept of passing object as I do
it?
How can I do that?

class A:
def foo1:
myLog = cLog()
myYhread = cThread(myLog)
myThread.start()

class cThread:
def __init__(self,in_myLog):
sel.LogObj = in_myLog

def run():
   sel.LogObj.writeLine("HI")

thanks
Dave
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: passing object between classes

2009-09-21 Thread daved170
On Sep 21, 1:44 pm, Duncan Booth  wrote:
> daved170  wrote:
> > Hi everybody,
> > I built my owen log obj as a class.
> > I'm passing it to another object (actually to a thread).
> > When I run my app it raise error at the line when I'm using that log
> > obj. is there any problem with the concept of passing object as I do
> > it?
> > How can I do that?
>
> > class A:
> > def foo1:
> >     myLog = cLog()
> >     myYhread = cThread(myLog)
> >     myThread.start()
>
> > class cThread:
> > def __init__(self,in_myLog):
> >     sel.LogObj = in_myLog
>
> > def run():
> >    sel.LogObj.writeLine("HI")
>
> > thanks
> > Dave
>
> Please always post real code and state the exact error you get. That will
> maximise the chance that you get a useful answer.
>
> The code you posted will fail for numerous reasons and I can't guess
> whether you have a problem with indentation, a problem because you
> misspelled 'self' as 'sel', or because you missed out the 'self' parameter
> altogether on a method, or perhaps your LogObj simply doesn't have a
> writeLine method.
>
> --
> Duncan Boothhttp://kupuguy.blogspot.com- Hide quoted text -
>
> - Show quoted text -

Hi Duncan,
You are right, I should have put the entire code but my question was
more theroretical and I know that the code that I posted won't work.

Let me simplified my question, I need to be able to write to the same
log file from different classes. and even more, from different
threads.
Is there any existing python Log object that do so? I no, I created my
own Log object that only open file and write a line to it, how can I
make it be global? Should I use it as a static object? will it work?
(offcurse in the case of the threads I'll use utex)

Thanks again,
DaveD
-- 
http://mail.python.org/mailman/listinfo/python-list


Looger object only prints "ERROR"s

2009-09-24 Thread daved170
hi everybody,
I took your adviced and used the logging object.
I copied the example in 16.6.15.2 - "using logging in multiple
modules" from 
http://docs.activestate.com/activepython/3.1/python/library/logging.html.

unfortunattly it only prints to file the ERROR level's messages and
ignore the others. I tried to change the level with SETLEVEL but it
didn't help.
Any idea? thanks,
DaveD
-- 
http://mail.python.org/mailman/listinfo/python-list