[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: [pygame] pygame parachute and inconsistent interned sting state - but only on Slackware 13.0 32 bit
On Friday 11 September 2009, René Dudfield wrote:
> Hi,
>
> thanks for all that testing!
>
Thank you for developing and helping. Also, selfishly, its all in my self
interest to get this fixed!
> if you could type 'where' after your program crashes in gdb, that
> shows a stack trace(or attempts to show a stack trace). That should
> show us where the problem is.
>
Hmm, I may be barking up the wrong tree with pygame...
Is this it:
#11 0xb7f497ca in PyDict_GetItemString () from /usr/lib/libpython2.6.so.1.0
???
bash-3.1# gdb python
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-slackware-linux"...
(no debugging symbols found)
(gdb) run pslide.py
Starting program: /usr/bin/python pslide.py
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
[Thread debugging using libthread_db enabled]
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
[New Thread 0xb7d346c0 (LWP 3112)]
(no debugging symbols found)
(no debugging symbols found)
housekeeping
select
__main__
[New Thread 0xb73deb90 (LWP 3115)]
[New Thread 0xb6ba0b90 (LWP 3116)]
Output: . ['pslide-old2.pyc', 'pslide-old.py', 'pvideo.pyc', 'audio.pyc',
'paudio.py', '__init__.py', 'pslide.py', 'audio.py', 'pslide-old2.py',
'housekeeping.pyc', 'pslide-old.pyc', 'pslide.pyc', 'main.py', 'select.pyc',
'__init__.pyc', 'paudio.pyc', 'housekeeping.py', 'select.py', 'pvideo.py',
'pygame-pjc-interned-gdb', 'main.pyc']
Fatal Python error: Inconsistent interned string state.
Program received signal SIGABRT, Aborted.
[Switching to Thread 0xb7d346c0 (LWP 3112)]
0xb7d61456 in raise () from /lib/libc.so.6
(gdb) where
#0 0xb7d61456 in raise () from /lib/libc.so.6
#1 0xb7d62e08 in abort () from /lib/libc.so.6
#2 0xb7fce5b9 in Py_FatalError () from /usr/lib/libpython2.6.so.1.0
#3 0xb7f57291 in ?? () from /usr/lib/libpython2.6.so.1.0
#4 0xb80017d8 in ?? () from /usr/lib/libpython2.6.so.1.0
#5 0x00000006 in ?? ()
#6 0xb7d35158 in ?? ()
#7 0xb7f5723a in ?? () from /usr/lib/libpython2.6.so.1.0
#8 0xb801b548 in ?? () from /usr/lib/libpython2.6.so.1.0
#9 0x08398dc0 in ?? ()
#10 0xbfe760f8 in ?? ()
#11 0xb7f497ca in PyDict_GetItemString () from /usr/lib/libpython2.6.so.1.0
Backtrace stopped: frame did not save the PC
(gdb)
>
> Another one you could try is this:
> python -m pygame.tests.__main__
>
Hmm, crashed and burnt - *when run in the directory /root/pmedia*.
bash-3.1# python -m pygame.tests.__main__
skipping pygame.tests.cdrom_test (tag 'interactive')
skipping pygame.tests.movie_test (tag 'subprocess_ignore')
housekeeping
select
loading pygame.tests.base_test
Traceback (most recent call last):
File "/usr/lib/python2.6/runpy.py", line 122, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.6/runpy.py", line 34, in _run_code
exec code in run_globals
File "/usr/lib/python2.6/site-packages/pygame-1.9.1release-py2.6-linux-
i686.egg/pygame/tests/__main__.py", line 131, in <module>
run(*args, **kwds)
File "/usr/lib/python2.6/site-packages/pygame-1.9.1release-py2.6-linux-
i686.egg/pygame/tests/test_utils/run_tests.py", line 271, in run
test_modules):
File "/usr/lib/python2.6/site-packages/pygame-1.9.1release-py2.6-linux-
i686.egg/pygame/tests/test_utils/run_tests.py", line 257, in sub_test
wd=working_dir))
File "/usr/lib/python2.6/site-packages/pygame-1.9.1release-py2.6-linux-
i686.egg/pygame/tests/test_utils/async_sub.py", line 246, in
proc_in_time_or_kill
response += [proc.read_async(wait=0.1, e=0)]
File "/usr/lib/python2.6/site-packages/pygame-1.9.1release-py2.6-linux-
i686.egg/pygame/tests/test_utils/async_sub.py", line 102, in read_async
r = pr()
File "/usr/lib/python2.6/site-packages/pygame-1.9.1release-py2.6-linux-
i686.egg/pygame/tests/test_utils/async_sub.py", line 84, in recv
return self._recv('stdout', maxsize)
File "/usr/lib/python2.6/site-packages/pygame-1.9.1release-py2.6-linux-
i686.egg/pygame/tests/test_utils/async_sub.py", line 217, in _recv
if not select.select([conn], [], [], 0)[0]:
File "select.py", line 20, in __init__
pygame.key.set_repeat(500,150)
pygame.error: video system not initialized
Exception pygame.error: 'video system not initialized' in <bound method
select.__del__ of <select.select instance at 0x83d928c>> ignored
Exception TypeError: TypeError("'NoneType' object is not callable",) in <bound
method Popen.__del__ of <pygame.tests.test_utils.async_sub.Popen object at
0x83d942c>> ignored
bash-3.1#
When run in the directory */root/empty* I get something different:
skipping pygame.tests.cdrom_test (tag 'interactive')
skipping pygame.tests.movie_test (tag 'subprocess_ignore')
loading pygame.tests.base_test
loading pygame.tests.blit_test
loading pygame.tests.bufferproxy_test
loading pygame.tests.color_test
loading pygame.tests.cursors_test
loading pygame.tests.display_test
loading pygame.tests.draw_test
loading pygame.tests.event_test
loading pygame.tests.fastevent_test
loading pygame.tests.font_test
loading pygame.tests.gfxdraw_test
loading pygame.tests.image__save_gl_surface_test
loading pygame.tests.image_test
loading pygame.tests.joystick_test
loading pygame.tests.key_test
loading pygame.tests.mask_test
loading pygame.tests.midi_test
loading pygame.tests.mixer_music_test
loading pygame.tests.mixer_test
loading pygame.tests.mouse_test
loading pygame.tests.overlay_test
loading pygame.tests.pixelarray_test
loading pygame.tests.rect_test
loading pygame.tests.scrap_test
loading pygame.tests.sndarray_test
loading pygame.tests.sprite_test
loading pygame.tests.surface_test
loading pygame.tests.surfarray_test
loading pygame.tests.surflock_test
loading pygame.tests.sysfont_test
loading pygame.tests.threads_test
loading pygame.tests.time_test
loading pygame.tests.transform_test
........................................................................................................................................E...........................................................................................................................................................................................................................................................................
======================================================================
ERROR: all_tests_for (pygame.tests.midi_test.AllTestCases)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test/pygame.tests.midi_test.py", line 1, in all_tests_for
subprocess completely failed with return code of 0
cmd: ['/usr/bin/python', '/usr/lib/python2.6/site-
packages/pygame-1.9.1release-py2.6-linux-
i686.egg/pygame/tests/test_utils/test_runner.py', 'pygame.tests.midi_test',
'--exclude', 'interactive,subprocess_ignore,python2_ignore', '--timings', '1']
test_env: {'HZ': '100', 'LESS': '-M', 'MINICOM': '-c on', 'WINDOWPATH':
'7', 'LESSOPEN': '|lesspipe.sh %s', 'HUSHLOGIN': 'FALSE', 'LOGNAME': 'root',
'USER': 'root', 'INPUTRC': '/etc/inputrc', 'HOME': '/root', 'PATH':
'/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/lib/java/bin:/usr/lib/kde4/libexec:/usr/lib/qt/bin:/usr/share/texmf/bin',
'KDE_SESSION_VERSION': '4', 'KDE_FULL_SESSION': 'true', 'LANG': 'en_US',
'PROFILEHOME': '', 'TERM': 'xterm', 'SHELL': '/bin/bash', 'COLORFGBG': '15;0',
'XAUTHORITY': '/root/.Xauthority', 'LANGUAGE': '', 'SESSION_MANAGER':
'local/vslack13_0_32:@/tmp/.ICE-unix/3016,unix/vslack13_0_32:/tmp/.ICE-
unix/3016', 'SHLVL': '5', 'G_BROKEN_FILENAMES': '1', 'XCURSOR_THEME':
'Oxygen_Black', 'WINDOWID': '20971609', 'MANPATH':
'/usr/local/man:/usr/man:/usr/lib/java/man:/usr/share/texmf/man', 'JAVA_HOME':
'/usr/lib/java', 'KONSOLE_DBUS_SESSION': '/Sessions/2', 'QT4DIR':
'/usr/lib/qt', 'QT_PLUGIN_PATH':
'/root/.kde/lib/kde4/plugins/:/usr/lib/kde4/plugins/', 'KDE_SESSION_UID': '0',
'KONSOLE_DBUS_SERVICE': ':1.44', 'GTK2_RC_FILES':
'/etc/gtk-2.0/gtkrc:/root/.gtkrc-2.0::/root/.kde/share/config/gtkrc-2.0',
'T1LIB_CONFIG': '/usr/share/t1lib/t1lib.config', 'PKG_CONFIG_PATH':
'/usr/local/lib/pkgconfig:/usr/lib/pkgconfig', 'LS_OPTIONS': ' -F -b -T 0 --
color=auto ', 'GS_LIB': '/root/.fonts', 'DBUS_SESSION_BUS_ADDRESS':
'unix:abstract=/tmp/dbus-MAho5Jly6e,guid=c772e8650f7a243820d4f80a4aaa8dc9',
'_': '/usr/bin/python', 'KDEDIRS': '/usr', 'XDG_CONFIG_DIRS':
'/etc/xdg:/etc/kde/xdg:/etc/xfce/xdg', 'GDK_USE_XFT': '1', 'LC_COLLATE': 'C',
'HOSTNAME': 'vslack13_0_32.fire', 'CPLUS_INCLUDE_PATH': '/usr/lib/qt/include',
'XDG_DATA_DIRS': '/usr/share:/usr/share:/usr/local/share', 'PWD':
'/root/empty', 'DESKTOP_STARTUP_ID': '', 'GTK_RC_FILES':
'/etc/gtk/gtkrc:/root/.gtkrc::/root/.kde/share/config/gtkrc', 'DISPLAY':
':0.0', 'MAIL': '/var/spool/mail/root', 'LS_COLORS':
'no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.bat=01;32:*.BAT=01;32:*.btm=01;32:*.BTM=01;32:*.cmd=01;32:*.CMD=01;32:*.com=01;32:*.COM=01;32:*.dll=01;32:*.DLL=01;32:*.exe=01;32:*.EXE=01;32:*.7z=01;31:*.ace=01;31:*.arj=01;31:*.bz2=01;31:*.cpio=01;31:*.deb=01;31:*.dz=01;31:*.gz=01;31:*.jar=01;31:*.lzh=01;31:*.lzma=01;31:*.rar=01;31:*.RAR=01;31:*.rpm=01;31:*.rz=01;31:*.tar=01;31:*.taz=01;31:*.tb2=01;31:*.tbz2=01;31:*.tbz=01;31:*.tgz=01;31:*.tlz=01;31:*.trz=01;31:*.txz=01;31:*.tz=01;31:*.tz2=01;31:*.xz=01;31:*.z=01;31:*.Z=01;31:*.zip=01;31:*.ZIP=01;31:*.zoo=01;31:*.aac=00;35:*.anx=01;35:*.asf=01;35:*.ASF=01;35:*.au=00;35:*.axa=00;35:*.axv=01;35:*.avi=01;35:*.AVI=01;35:*.bmp=01;35:*.BMP=01;35:*.flac=01;35:*.FLAC=01;35:*.gif=01;35:*.GIF=01;35:*.jpg=01;35:*.JPG=01;35:*.jpeg=01;35:*.JPEG=01;35:*.m2a=01;35:*.M2A=01;35:*.m2v=01;35:*.M2V=01;35:*.m4a=01;35:*.M4A=01;35:*.m4p=01;35:*.M4P=01;35:*.m4v=01;35:*.M4V=01;35:*.mid=00;35:*.midi=00;35:*.mka=00;35:*.mov=01;35:*.MOV=01;35:*.mp3=01;35:*.MP3=01;35:*.mp4=01;35:*.mp4v=01;35:*.mpc=01;35:*.MPC=01;35:*.mpeg=01;35:*.MPEG=01;35:*.mpg=01;35:*.MPG=01;35:*.nuv=01;35:*.oga=00;35:*.ogv=01;35:*.ogx=01;35:*.ogg=01;35:*.OGG=01;35:*.pbm=01;35:*.pgm=01;35:*.png=01;35:*.PNG=01;35:*.ppm=01;35:*.qt=01;35:*.ra=00;35:*.ram=01;35:*.RAM=01;35:*.rm=01;35:*.RM=01;35:*.spx=00;35:*.svg=01;35:*.svgz=01;35:*.tga=01;35:*.TGA=01;35:*.tif=01;35:*.TIF=01;35:*.tiff=01;35:*.TIFF=01;35:*.vob=01;35:*.wav=01;35:*.WAV=01;35:*.wma=01;35:*.WMA=01;35:*.wmv=01;35:*.WMV=01;35:*.xbm=01;35:*.xcf=01;35:*.xpm=01;35:*.xspf=00;35:*.xwd=01;35:*.XWD=01;35:',
'OLDPWD': '/root', 'KDE_MULTIHEAD': 'false'}
working_dir: /usr/lib/python2.6/site-packages/pygame-1.9.1release-py2.6-
linux-i686.egg/pygame
return (top 5 lines):
loading pygame.tests.midi_test
----------------------------------------------------------------------
Ran 404 tests in 53.302s
FAILED (errors=1)
I wonder if I have a namespace conflict? I have modules housekeeping and
select in my app (when I say modules I mean files with a couple dozen lines of
code). But this still does not look like the interned error.
On *Slackware 13.0 64 bit, real, not virtual machine* I get:
bash-3.1$ python -m pygame.tests.__main__
skipping pygame.tests.cdrom_test (tag 'interactive')
skipping pygame.tests.movie_test (tag 'subprocess_ignore')
loading pygame.tests.base_test
loading pygame.tests.blit_test
loading pygame.tests.bufferproxy_test
loading pygame.tests.color_test
loading pygame.tests.cursors_test
loading pygame.tests.display_test
loading pygame.tests.draw_test
loading pygame.tests.event_test
loading pygame.tests.fastevent_test
loading pygame.tests.font_test
loading pygame.tests.gfxdraw_test
loading pygame.tests.image__save_gl_surface_test
loading pygame.tests.image_test
loading pygame.tests.joystick_test
loading pygame.tests.key_test
loading pygame.tests.mask_test
loading pygame.tests.midi_test
loading pygame.tests.mixer_music_test
loading pygame.tests.mixer_test
loading pygame.tests.mouse_test
loading pygame.tests.overlay_test
loading pygame.tests.pixelarray_test
loading pygame.tests.rect_test
loading pygame.tests.scrap_test
loading pygame.tests.sndarray_test
loading pygame.tests.sprite_test
loading pygame.tests.surface_test
loading pygame.tests.surfarray_test
loading pygame.tests.surflock_test
loading pygame.tests.sysfont_test
loading pygame.tests.threads_test
loading pygame.tests.time_test
loading pygame.tests.transform_test
.........................................................................................................................E..............E...........................................................................................................................................................................................................................................................................
======================================================================
ERROR: ImageModuleTest.test_save
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib64/python2.6/site-packages/pygame-1.9.1release-py2.6-linux-
x86_64.egg/pygame/tests/image_test.py", line 112, in test_save
os.remove(temp_filename)
OSError: [Errno 2] No such file or directory: 'tmpimg.jpg'
======================================================================
ERROR: all_tests_for (pygame.tests.midi_test.AllTestCases)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test/pygame.tests.midi_test.py", line 1, in all_tests_for
subprocess completely failed with return code of 0
cmd: ['/usr/bin/python', '/usr/lib64/python2.6/site-
packages/pygame-1.9.1release-py2.6-linux-
x86_64.egg/pygame/tests/test_utils/test_runner.py', 'pygame.tests.midi_test',
'--exclude', 'interactive,subprocess_ignore,python2_ignore', '--timings', '1']
test_env: {'HZ': '100', 'LESS': '-M', 'MINICOM': '-c on', 'WINDOWPATH':
'7', 'LESSOPEN': '|lesspipe.sh %s', 'LIBGL_DRIVERS_PATH':
'/usr/lib/dri:/usr/lib64/dri', 'HUSHLOGIN': 'FALSE', 'LOGNAME': 'pete',
'USER': 'pete', 'INPUTRC': '/etc/inputrc', 'HOME': '/home/pete', 'PATH':
'/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/lib64/java/bin:/usr/lib64/kde4/libexec:/usr/lib64/qt/bin:/usr/share/texmf/bin:.',
'ARCH': 'x86_64', 'LD_LIBRARY_PATH': ':/usr/local/lib', 'KDE_FULL_SESSION':
'true', 'LANG': 'en_US', 'PROFILEHOME': '', 'TERM': 'xterm', 'SHELL':
'/bin/bash', 'COLORFGBG': '15;0', 'XAUTHORITY': '/home/pete/.Xauthority',
'LANGUAGE': '', 'SESSION_MANAGER': 'local/phoenix:@/tmp/.ICE-
unix/4088,unix/phoenix:/tmp/.ICE-unix/4088', 'SHLVL': '5',
'G_BROKEN_FILENAMES': '1', 'KDE_SESSION_VERSION': '4', 'WINDOWID': '71303257',
'MANPATH': '/usr/local/man:/usr/man:/usr/lib64/java/man:/usr/share/texmf/man',
'JAVA_HOME': '/usr/lib64/java', 'KONSOLE_DBUS_SESSION': '/Sessions/1',
'QT4DIR': '/usr/lib64/qt', 'QT_PLUGIN_PATH':
'/home/pete/.kde/lib64/kde4/plugins/:/usr/lib64/kde4/plugins/',
'KDE_SESSION_UID': '1000', 'KONSOLE_DBUS_SERVICE': ':1.10073',
'GTK2_RC_FILES':
'/etc/gtk-2.0/gtkrc:/home/pete/.gtkrc-2.0::/mnt/data/home/pete/.kde/share/config/gtkrc-2.0',
'T1LIB_CONFIG': '/usr/share/t1lib/t1lib.config', 'PKG_CONFIG_PATH':
'/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig', 'LS_OPTIONS': ' -F -b -T 0 --
color=auto ', 'GS_LIB': '/home/pete/.fonts', 'DBUS_SESSION_BUS_ADDRESS':
'unix:abstract=/tmp/dbus-4cHhYGc0Ek,guid=e904877d3778c7a281dbfe954aa28058',
'_': '/usr/bin/python', 'KDEDIRS': '/usr', 'XDG_CONFIG_DIRS':
'/etc/xdg:/etc/kde/xdg:/etc/xfce/xdg', 'XCURSOR_THEME': 'default',
'GDK_USE_XFT': '1', 'LC_COLLATE': 'C', 'HOSTNAME': 'phoenix.fire',
'CPLUS_INCLUDE_PATH': '/usr/lib64/qt/include', 'XDG_DATA_DIRS':
'/usr/share:/usr/share:/usr/local/share', 'PWD': '/home/pete',
'DESKTOP_STARTUP_ID': '', 'GTK_RC_FILES':
'/etc/gtk/gtkrc:/home/pete/.gtkrc::/mnt/data/home/pete/.kde/share/config/gtkrc',
'DISPLAY': ':0.0', 'MAIL': '/var/spool/mail/pete', 'LS_COLORS':
'no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.bat=01;32:*.BAT=01;32:*.btm=01;32:*.BTM=01;32:*.cmd=01;32:*.CMD=01;32:*.com=01;32:*.COM=01;32:*.dll=01;32:*.DLL=01;32:*.exe=01;32:*.EXE=01;32:*.7z=01;31:*.ace=01;31:*.arj=01;31:*.bz2=01;31:*.cpio=01;31:*.deb=01;31:*.dz=01;31:*.gz=01;31:*.jar=01;31:*.lzh=01;31:*.lzma=01;31:*.rar=01;31:*.RAR=01;31:*.rpm=01;31:*.rz=01;31:*.tar=01;31:*.taz=01;31:*.tb2=01;31:*.tbz2=01;31:*.tbz=01;31:*.tgz=01;31:*.tlz=01;31:*.trz=01;31:*.txz=01;31:*.tz=01;31:*.tz2=01;31:*.xz=01;31:*.z=01;31:*.Z=01;31:*.zip=01;31:*.ZIP=01;31:*.zoo=01;31:*.aac=00;35:*.anx=01;35:*.asf=01;35:*.ASF=01;35:*.au=00;35:*.axa=00;35:*.axv=01;35:*.avi=01;35:*.AVI=01;35:*.bmp=01;35:*.BMP=01;35:*.flac=01;35:*.FLAC=01;35:*.gif=01;35:*.GIF=01;35:*.jpg=01;35:*.JPG=01;35:*.jpeg=01;35:*.JPEG=01;35:*.m2a=01;35:*.M2A=01;35:*.m2v=01;35:*.M2V=01;35:*.m4a=01;35:*.M4A=01;35:*.m4p=01;35:*.M4P=01;35:*.m4v=01;35:*.M4V=01;35:*.mid=00;35:*.midi=00;35:*.mka=00;35:*.mov=01;35:*.MOV=01;35:*.mp3=01;35:*.MP3=01;35:*.mp4=01;35:*.mp4v=01;35:*.mpc=01;35:*.MPC=01;35:*.mpeg=01;35:*.MPEG=01;35:*.mpg=01;35:*.MPG=01;35:*.nuv=01;35:*.oga=00;35:*.ogv=01;35:*.ogx=01;35:*.ogg=01;35:*.OGG=01;35:*.pbm=01;35:*.pgm=01;35:*.png=01;35:*.PNG=01;35:*.ppm=01;35:*.qt=01;35:*.ra=00;35:*.ram=01;35:*.RAM=01;35:*.rm=01;35:*.RM=01;35:*.spx=00;35:*.svg=01;35:*.svgz=01;35:*.tga=01;35:*.TGA=01;35:*.tif=01;35:*.TIF=01;35:*.tiff=01;35:*.TIFF=01;35:*.vob=01;35:*.wav=01;35:*.WAV=01;35:*.wma=01;35:*.WMA=01;35:*.wmv=01;35:*.WMV=01;35:*.xbm=01;35:*.xcf=01;35:*.xpm=01;35:*.xspf=00;35:*.xwd=01;35:*.XWD=01;35:',
'KDE_MULTIHEAD': 'false'}
working_dir: /usr/lib64/python2.6/site-packages/pygame-1.9.1release-py2.6-
linux-x86_64.egg/pygame
return (top 5 lines):
loading pygame.tests.midi_test
----------------------------------------------------------------------
Ran 404 tests in 33.973s
FAILED (errors=2)
bash-3.1$
> Are you using any other modules apart from pygame? Since pygame
> displays that error message, even though the crash is caused by other
> modules.
>
subprocess and os.
>
> cheers,
Thanks.
--
Peter Chant
http://www.petezilla.co.uk