summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego Roversi <diegor@tiscali.it>2019-09-12 21:33:58 +0200
committerDiego Roversi <diegor@tiscali.it>2019-09-12 21:33:58 +0200
commitf2779197b13fdbbd0d42e48215c51d24d86ee91b (patch)
tree968267aa9909470c27b43109029e87d1f126b4e7
parentbc2155a93cd15c975881d7ca8f57f0f4b5c4aa27 (diff)
2to3 of display module
-rw-r--r--display/Client.py62
-rw-r--r--display/caching.py28
-rw-r--r--display/dpy_gtk.py22
-rw-r--r--display/dpy_pygame.py10
-rwxr-xr-xdisplay/dpy_windows.py4
-rw-r--r--display/dpy_x.py11
-rw-r--r--display/modes.py31
-rw-r--r--display/pclient.py86
-rw-r--r--display/playback.py25
-rw-r--r--display/puremixer.py8
-rw-r--r--display/pythonxlibintf.py16
-rw-r--r--display/snd_linux.py20
-rw-r--r--display/snd_pygame.py6
-rw-r--r--display/snd_windows.py14
14 files changed, 177 insertions, 166 deletions
diff --git a/display/Client.py b/display/Client.py
index 3d1330d..275c663 100644
--- a/display/Client.py
+++ b/display/Client.py
@@ -16,8 +16,8 @@ LOCALDIR = os.path.dirname(os.path.abspath(LOCALDIR))
sys.path.insert(0, os.path.dirname(LOCALDIR))
sys.path.insert(0, LOCALDIR)
import common
-import pclient
-import modes
+from . import pclient
+from . import modes
UdpLookForServer = [
@@ -28,42 +28,42 @@ UdpLookForServer = [
def parse_cmdline(argv):
# parse command-line
def usage():
- print >> sys.stderr, 'usage:'
- print >> sys.stderr, ' python Client.py [-d#] [-s#] [extra options] [host[:port]]'
- print >> sys.stderr
- print >> sys.stderr, 'options:'
- print >> sys.stderr, ' host search for a game on the given machine'
- print >> sys.stderr, ' host:port connect to the given game server'
- print >> sys.stderr, ' (default search for any local server)'
- print >> sys.stderr, ' -d# --display=# graphic driver (see below)'
- print >> sys.stderr, ' -s# --sound=# sound driver (see below)'
- print >> sys.stderr, ' --music=no disable background music'
- print >> sys.stderr, ' -h --help display this text'
- print >> sys.stderr, ' -m --metaserver connect with the help of the metaserver'
- print >> sys.stderr, ' (list servers with Client.py -m)'
- print >> sys.stderr, ' -t --tcp for slow or proxy connections'
- print >> sys.stderr, ' -u --udp for fast direct connections'
- print >> sys.stderr, ' (default is to autodetect tcp or udp)'
- print >> sys.stderr, ' --port UDP=# or #:# fixed inbound udp port or host:port'
- print >> sys.stderr, ' --port TCP=# fixed inbound tcp port (-m only)'
- print >> sys.stderr
- print >> sys.stderr, 'graphic drivers:'
+ print('usage:', file=sys.stderr)
+ print(' python Client.py [-d#] [-s#] [extra options] [host[:port]]', file=sys.stderr)
+ print(file=sys.stderr)
+ print('options:', file=sys.stderr)
+ print(' host search for a game on the given machine', file=sys.stderr)
+ print(' host:port connect to the given game server', file=sys.stderr)
+ print(' (default search for any local server)', file=sys.stderr)
+ print(' -d# --display=# graphic driver (see below)', file=sys.stderr)
+ print(' -s# --sound=# sound driver (see below)', file=sys.stderr)
+ print(' --music=no disable background music', file=sys.stderr)
+ print(' -h --help display this text', file=sys.stderr)
+ print(' -m --metaserver connect with the help of the metaserver', file=sys.stderr)
+ print(' (list servers with Client.py -m)', file=sys.stderr)
+ print(' -t --tcp for slow or proxy connections', file=sys.stderr)
+ print(' -u --udp for fast direct connections', file=sys.stderr)
+ print(' (default is to autodetect tcp or udp)', file=sys.stderr)
+ print(' --port UDP=# or #:# fixed inbound udp port or host:port', file=sys.stderr)
+ print(' --port TCP=# fixed inbound tcp port (-m only)', file=sys.stderr)
+ print(file=sys.stderr)
+ print('graphic drivers:', file=sys.stderr)
for info in modes.graphicmodeslist():
info.printline(sys.stderr)
- print >> sys.stderr
- print >> sys.stderr, 'sound drivers:'
+ print(file=sys.stderr)
+ print('sound drivers:', file=sys.stderr)
for info in modes.soundmodeslist():
info.printline(sys.stderr)
- print >> sys.stderr
+ print(file=sys.stderr)
sys.exit(2)
shortopts = 'd:s:htum'
longopts = ['display=', 'sound=', 'music=', 'help', 'tcp', 'udp',
'cfg=', 'metaserver', 'port=']
for info in modes.graphicmodeslist() + modes.soundmodeslist():
- short, long = info.getformaloptions()
+ short, int = info.getformaloptions()
shortopts += short
- longopts += long
+ longopts += int
try:
from getopt import gnu_getopt as getopt
except ImportError:
@@ -71,9 +71,9 @@ def parse_cmdline(argv):
from getopt import error
try:
opts, args = getopt(argv, shortopts, longopts)
- except error, e:
- print >> sys.stderr, 'Client.py: %s' % str(e)
- print >> sys.stderr
+ except error as e:
+ print('Client.py: %s' % str(e), file=sys.stderr)
+ print(file=sys.stderr)
usage()
metaserver = 0
@@ -144,7 +144,7 @@ def parse_cmdline(argv):
return directconnect(server), mode
def directconnect(sockaddr):
- print "connecting to %s:%d..." % sockaddr
+ print("connecting to %s:%d..." % sockaddr)
from socket import socket, AF_INET, SOCK_STREAM
s = socket(AF_INET, SOCK_STREAM)
s.connect(sockaddr)
diff --git a/display/caching.py b/display/caching.py
index 27d772c..bdbfdea 100644
--- a/display/caching.py
+++ b/display/caching.py
@@ -1,4 +1,4 @@
-from __future__ import generators
+
import os, md5, sys
#import common.debug
@@ -18,7 +18,7 @@ class FileCache:
del self.cache[filename]
if filename not in self.cache:
if len(self.cache) >= FileCache.MAX_FILES:
- (time, mode, f), k = min([(v,k) for (k,v) in self.cache.items()])
+ (time, mode, f), k = min([(v,k) for (k,v) in list(self.cache.items())])
f.close()
del self.cache[k]
try:
@@ -54,13 +54,13 @@ class FileBlock:
def overwrite(self, newdata):
self.memorydata = newdata
if self.readonly:
- print >> sys.stderr, "cannot overwrite file", self.filename
+ print("cannot overwrite file", self.filename, file=sys.stderr)
return
try:
f = Data.Cache.access(self.filename, self.position, writing=1)
f.write(newdata)
except (IOError, OSError):
- print >> sys.stderr, "cache write error:", self.filename
+ print("cache write error:", self.filename, file=sys.stderr)
return
self.complete = 1
del self.memorydata
@@ -107,7 +107,7 @@ class Data:
f.write(data)
f.flush()
except (IOError, OSError):
- print >> sys.stderr, "cache write error:", self.backupfile
+ print("cache write error:", self.backupfile, file=sys.stderr)
def loadfrom(self, filename, position, length, checksum):
"""Try to load data from the given filename, with the given
@@ -128,19 +128,19 @@ class Data:
# correct data
self.store(position, data, name, readonly)
return 1
- if self.content is not None and not self.content.has_key(position):
+ if self.content is not None and position not in self.content:
self.content[position] = FileBlock(cachename, position, length,
readonly=0, complete=0)
elif self.readonly:
- print >> sys.stderr, "Note: the music data has changed. You can get"
- print >> sys.stderr, "the server's version by deleting", directname
+ print("Note: the music data has changed. You can get", file=sys.stderr)
+ print("the server's version by deleting", directname, file=sys.stderr)
return 1 # incorrect data, but ignored
return 0
def read(self):
"""Return the data as built so far."""
if self.content is not None:
- items = self.content.items()
+ items = list(self.content.items())
items.sort()
result = ''
for position, block in items:
@@ -155,7 +155,7 @@ class Data:
def fopen(self):
if self.content is not None:
- from cStringIO import StringIO
+ from io import StringIO
return StringIO(self.read())
else:
return Data.Cache.access(self.backupfile, 0)
@@ -166,19 +166,19 @@ class Data:
the file that we want."""
if not self.backupfile:
files = {}
- for position, block in self.content.items():
+ for position, block in list(self.content.items()):
if not isinstance(block, FileBlock):
break
if block.complete:
files[block.filename] = block
else:
if len(files) == 1:
- self.backupfile, block = files.items()[0]
+ self.backupfile, block = list(files.items())[0]
self.readonly = block.readonly
if not self.backupfile:
self.backupfile = mktemp(fileexthint)
f = Data.Cache.access(self.backupfile, 0, writing=1)
- for position, block in self.content.items():
+ for position, block in list(self.content.items()):
f.seek(position)
f.write(block.read())
f.flush()
@@ -258,4 +258,4 @@ def enumtempfiles():
i += 1
def mktemp(fileext, gen = enumtempfiles()):
- return gen.next() + fileext
+ return next(gen) + fileext
diff --git a/display/dpy_gtk.py b/display/dpy_gtk.py
index 7b73516..43d797f 100644
--- a/display/dpy_gtk.py
+++ b/display/dpy_gtk.py
@@ -4,8 +4,8 @@
################################################
import os, sys, math
-from modes import KeyPressed, KeyReleased
-import caching
+from .modes import KeyPressed, KeyReleased
+from . import caching
def import_trickery():
global gtk, gdk
@@ -59,7 +59,8 @@ class Display:
pb = self.pixmap(32, 32, ((pixel+hole)*16 + (hole+pixel)*16) * 16, 0x010101)
self.taskbkgnd = self.renderpixbuf(pb)
- def taskbar(self, (x, y, w, h)):
+ def taskbar(self, xxx_todo_changeme):
+ (x, y, w, h) = xxx_todo_changeme
scale = self.scale
x2 = x+w
y2 = y+h
@@ -74,9 +75,9 @@ class Display:
def pixmap(self, w, h, data, colorkey=-1):
filename = self.tempppmfile
f = open(filename, 'wb')
- print >> f, 'P6'
- print >> f, w, h
- print >> f, 255
+ print('P6', file=f)
+ print(w, h, file=f)
+ print(255, file=f)
f.write(data)
f.close()
pb = gdk.pixbuf_new_from_file(filename)
@@ -101,7 +102,8 @@ class Display:
else:
return (pixmap, self.gc, None)
- def getopticon(self, input, (x, y, w, h), ignored_alpha=255):
+ def getopticon(self, input, xxx_todo_changeme1, ignored_alpha=255):
+ (x, y, w, h) = xxx_todo_changeme1
if len(input) == 3:
return None
pb, = input
@@ -116,7 +118,8 @@ class Display:
else:
return self.renderpixbuf((newpb,))
- def getppm(self, (x, y, w, h), int=int, ceil=math.ceil):
+ def getppm(self, xxx_todo_changeme2, int=int, ceil=math.ceil):
+ (x, y, w, h) = xxx_todo_changeme2
scale = self.scale
if isinstance(scale, int):
x *= scale
@@ -134,7 +137,8 @@ class Display:
bkgnd.draw_drawable(self.gc, self.offscreen, x, y, 0, 0, w, h)
return bkgnd, self.gc, None
- def putppm(self, x, y, (pixmap, gc, ignored), rect=None, int=int):
+ def putppm(self, x, y, xxx_todo_changeme3, rect=None, int=int):
+ (pixmap, gc, ignored) = xxx_todo_changeme3
if pixmap is None:
return
scale = self.scale
diff --git a/display/dpy_pygame.py b/display/dpy_pygame.py
index acfd200..30d7359 100644
--- a/display/dpy_pygame.py
+++ b/display/dpy_pygame.py
@@ -6,7 +6,7 @@
import os
import pygame
from pygame.locals import *
-from modes import KeyPressed, KeyReleased
+from .modes import KeyPressed, KeyReleased
class Display:
@@ -136,7 +136,8 @@ class Display:
def clear(self):
self.offscreen.fill([0,0,0,])
- def fixpos(self, (x, y)):
+ def fixpos(self, xxx_todo_changeme):
+ (x, y) = xxx_todo_changeme
if self.scale != 1:
x = int(x / self.scale)
y = int(y / self.scale)
@@ -185,7 +186,8 @@ class Display:
def selectlist(self):
return []
- def taskbar(self, (x, y, w, h)):
+ def taskbar(self, xxx_todo_changeme1):
+ (x, y, w, h) = xxx_todo_changeme1
tbs, tbh = self.tbcache
if tbh != h:
tbs = pygame.Surface((32, h)).convert_alpha(self.offscreen)
@@ -223,7 +225,7 @@ def events_dispatch(handlers = EVENT_HANDLERS):
e = pygame.event.poll()
if e.type == NOEVENT:
break
- elif handlers.has_key(e.type):
+ elif e.type in handlers:
handlers[e.type](e)
diff --git a/display/dpy_windows.py b/display/dpy_windows.py
index b01dfcf..c81c270 100755
--- a/display/dpy_windows.py
+++ b/display/dpy_windows.py
@@ -1,7 +1,7 @@
import sys
import wingame
-from modes import BaseDisplay
-from cStringIO import StringIO
+from .modes import BaseDisplay
+from io import StringIO
class Display(BaseDisplay):
diff --git a/display/dpy_x.py b/display/dpy_x.py
index ffca90f..6b8f4bb 100644
--- a/display/dpy_x.py
+++ b/display/dpy_x.py
@@ -1,7 +1,7 @@
import sys
-import xshm
-from modes import BaseDisplay
-from cStringIO import StringIO
+from . import xshm
+from .modes import BaseDisplay
+from io import StringIO
class Display(BaseDisplay):
@@ -20,9 +20,8 @@ class Display(BaseDisplay):
self.mouseevents = xdpy.mouseevents
self.pointermotion = xdpy.pointermotion
if use_shm and not xdpy.shmmode():
- print >> sys.stderr, \
- "Note: cannot use SHM extension (%dx%d), display will be slow." % \
- (width, height)
+ print("Note: cannot use SHM extension (%dx%d), display will be slow." % \
+ (width, height), file=sys.stderr)
def selectlist(self):
if hasattr(self.xdpy, 'fd'):
diff --git a/display/modes.py b/display/modes.py
index ad0c1c0..0ac680e 100644
--- a/display/modes.py
+++ b/display/modes.py
@@ -7,7 +7,8 @@ KeyReleased = 3
class BaseDisplay:
__taskbkgnd = None
- def taskbar(self, (x, y, w, h)):
+ def taskbar(self, s):
+ (x, y, w, h) = s
if self.__taskbkgnd is None:
pixel = "\x00\x00\x80"
hole = "\x01\x01\x01"
@@ -56,22 +57,22 @@ class Mode:
state = ' [%s]' % err
else:
state = ''
- print >> f, ' %-8s %s%s' % (self.name, self.descr, state)
+ print(' %-8s %s%s' % (self.name, self.descr, state), file=f)
if self.url:
- print >> f, ' %s' % self.url
+ print(' %s' % self.url, file=f)
for line in self.extraoptsdescr:
- print >> f, ' %s' % line
+ print(' %s' % line, file=f)
def getformaloptions(self):
- return '', [c+'=' for c in self.options.keys()]
+ return '', [c+'=' for c in list(self.options.keys())]
def setoptions(self, options):
- for key in self.options.keys():
- if options.has_key('--'+key):
+ for key in list(self.options.keys()):
+ if '--'+key in options:
self.options[key] = options['--'+key]
def currentdriver(self):
- lst = self.options.items()
+ lst = list(self.options.items())
lst.sort()
lst = ['--%s=%s' % keyvalue for keyvalue in lst]
return ' '.join([self.name] + lst)
@@ -146,22 +147,22 @@ def findmode(name, lst):
return info
if last_chance is not None:
return last_chance
- raise KeyError, 'no driver available!'
+ raise KeyError('no driver available!')
else:
# find mode by name
for info in lst:
if info.name.upper() == name.upper():
err = info.imperror()
if err:
- raise KeyError, '%s: %s' % (info.name, err)
+ raise KeyError('%s: %s' % (info.name, err))
return info
- raise KeyError, '%s: no such driver' % name
+ raise KeyError('%s: no such driver' % name)
def findmode_err(*args):
try:
return findmode(*args)
- except KeyError, e:
- print >> sys.stderr, str(e)
+ except KeyError as e:
+ print(str(e), file=sys.stderr)
sys.exit(1)
def open_dpy(mode, width, height, title):
@@ -169,7 +170,7 @@ def open_dpy(mode, width, height, title):
ginfo = findmode_err(driver, graphicmodeslist())
ginfo.setoptions(extraopts)
dpy = ginfo.getmodule().Display(width, height, title, **ginfo.options)
- print 'graphics driver:', ginfo.currentdriver()
+ print('graphics driver:', ginfo.currentdriver())
return dpy
def open_snd(mode):
@@ -183,7 +184,7 @@ def open_snd(mode):
if (sinfo.options['music'].startswith('n') or
sinfo.options['music'] == 'off'):
snd.has_music = 0
- print 'sound driver:', sinfo.currentdriver()
+ print('sound driver:', sinfo.currentdriver())
return snd
else:
return None
diff --git a/display/pclient.py b/display/pclient.py
index c6546ce..b7ade98 100644
--- a/display/pclient.py
+++ b/display/pclient.py
@@ -8,9 +8,9 @@ import time
from common.msgstruct import *
from common.pixmap import decodepixmap
from common import hostchooser
-import modes
-from modes import KeyPressed, KeyReleased
-import caching
+from . import modes
+from .modes import KeyPressed, KeyReleased
+from . import caching
#import psyco; psyco.full()
@@ -44,13 +44,13 @@ class Icon:
self.rect = None
return self.pixmap
elif attr in ('bmpcode', 'rect'):
- raise KeyError, attr
+ raise KeyError(attr)
elif attr == 'originalrect':
self.originalrect = self.rect
return self.originalrect
- raise AttributeError, attr
+ raise AttributeError(attr)
def clear(self):
- if self.__dict__.has_key('pixmap'):
+ if 'pixmap' in self.__dict__:
del self.pixmap
class DataChunk(caching.Data):
@@ -77,7 +77,7 @@ class DataChunk(caching.Data):
DataChunk.TOTAL += lendata
total = DataChunk.TOTAL >> 10
if total != prev:
- print "downloaded %dkb of data from server" % total
+ print("downloaded %dkb of data from server" % total)
self.store(position, data)
try:
self.pending.remove((0, position))
@@ -104,24 +104,24 @@ class Playfield:
self.sockaddr = sockaddr
try:
self.s.setsockopt(SOL_IP, IP_TOS, 0x10) # IPTOS_LOWDELAY
- except error, e:
- print >> sys.stderr, "Cannot set IPTOS_LOWDELAY:", str(e)
+ except error as e:
+ print("Cannot set IPTOS_LOWDELAY:", str(e), file=sys.stderr)
try:
self.s.setsockopt(SOL_TCP, TCP_NODELAY, 1)
- except error, e:
- print >> sys.stderr, "Cannot set TCP_NODELAY:", str(e)
+ except error as e:
+ print("Cannot set TCP_NODELAY:", str(e), file=sys.stderr)
initialbuf = ""
while 1:
t = self.s.recv(200)
if not t and not hasattr(self.s, 'RECV_CAN_RETURN_EMPTY'):
- raise error, "connexion closed"
+ raise error("connexion closed")
initialbuf += t
if len(initialbuf) >= len(MSG_WELCOME):
head = initialbuf[:len(MSG_WELCOME)]
tail = initialbuf[len(MSG_WELCOME):]
if head != MSG_WELCOME:
- raise error, "connected to something not a game server"
+ raise error("connected to something not a game server")
if '\n' in tail:
break
n = tail.index('\n')
@@ -135,7 +135,7 @@ class Playfield:
## if i >= 0:
## self.gameident, self.datapath = (self.gameident[:i].strip(),
## self.gameident[i+1:-1])
- print "connected to %r." % self.gameident
+ print("connected to %r." % self.gameident)
self.s.sendall(message(CMSG_PROTO_VERSION, 3))
def setup(self, mode, udp_over_tcp):
@@ -156,10 +156,10 @@ class Playfield:
self.playericons = {}
self.screenmode = mode
self.initlevel = 0
- if mode[-1].has_key('udp_over_tcp'):
+ if 'udp_over_tcp' in mode[-1]:
udp_over_tcp = mode[-1]['udp_over_tcp']
self.trackcfgmtime = None
- if mode[-1].has_key('cfgfile'):
+ if 'cfgfile' in mode[-1]:
self.trackcfgfile = mode[-1]['cfgfile']
else:
self.trackcfgfile = os.path.join(DataChunk.SOURCEDIR,
@@ -217,8 +217,8 @@ class Playfield:
while self.udpsock in iwtd:
try:
udpdata = self.udpsock.recv(65535)
- except error, e:
- print >> sys.stderr, e
+ except error as e:
+ print(e, file=sys.stderr)
errors += 1
if errors > 10:
raise
@@ -420,9 +420,9 @@ class Playfield:
t = time.time()
t, t0 = t-t0, t
if t:
- print "%.2f images per second, %.1f kbytes per second" % (
+ print("%.2f images per second, %.1f kbytes per second" % (
float(n)/t,
- float(self.tcpbytecounter+self.udpbytecounter)/1024/t)
+ float(self.tcpbytecounter+self.udpbytecounter)/1024/t))
self.tcpbytecounter = -self.udpbytecounter
n = 0
self.painttimes = t0, n
@@ -432,7 +432,7 @@ class Playfield:
iconlist = []
f = 1.5 * time.time()
f = f-int(f)
- pi = self.playericons.items()
+ pi = list(self.playericons.items())
pi.sort()
xpos = 0
for id, ico in pi:
@@ -460,7 +460,8 @@ class Playfield:
self.animdelay = 0.04
return y0, iconlist
- def clic_taskbar(self, (cx,cy)):
+ def clic_taskbar(self, xxx_todo_changeme):
+ (cx,cy) = xxx_todo_changeme
y0, icons = self.get_taskbar()
if cy >= y0:
for x, y, ico, id in icons:
@@ -480,13 +481,14 @@ class Playfield:
pass
return y0, bkgnd
- def erase_taskbar(self, (y0, bkgnd)):
+ def erase_taskbar(self, xxx_todo_changeme1):
+ (y0, bkgnd) = xxx_todo_changeme1
self.dpy.putppm(0, y0, bkgnd)
def nextkeyname(self):
pid, df = self.keydefinition
- undef = [(num, keyname) for keyname, (num, icons) in self.keys.items()
- if not df.has_key(keyname) and icons]
+ undef = [(num, keyname) for keyname, (num, icons) in list(self.keys.items())
+ if keyname not in df and icons]
if undef:
num, keyname = min(undef)
return keyname
@@ -556,7 +558,7 @@ class Playfield:
pending = {}
for keysym, event in keyevents:
pending[keysym] = event
- for keysym, event in pending.items():
+ for keysym, event in list(pending.items()):
code = self.keycodes.get((keysym, event))
if code and self.playing.get(code[0]) == 'l':
if (code == self.last_key_event[0] and
@@ -588,7 +590,7 @@ class Playfield:
self.taskbartimeout = None
if self.taskbarfree:
self.taskbarmode = (nmode or
- 'l' not in self.playing.values() or
+ 'l' not in list(self.playing.values()) or
(self.keydefinition is not None))
if nmode:
self.taskbartimeout = time.time() + 5.0
@@ -597,26 +599,26 @@ class Playfield:
def define_key(self, keysym):
clic_id, df = self.keydefinition
- if keysym in df.values():
+ if keysym in list(df.values()):
return
df[self.nextkeyname()] = keysym
if self.nextkeyname() is not None:
return
self.keydefinition = None
self.s.sendall(message(CMSG_ADD_PLAYER, clic_id))
- for keyname, (num, icons) in self.keys.items():
+ for keyname, (num, icons) in list(self.keys.items()):
if keyname[:1] == '-':
event = KeyReleased
keyname = keyname[1:]
else:
event = KeyPressed
- if df.has_key(keyname):
+ if keyname in df:
keysym = df[keyname]
self.keycodes[keysym, event] = \
clic_id, message(CMSG_KEY, clic_id, num)
def msg_unknown(self, *rest):
- print >> sys.stderr, "?"
+ print("?", file=sys.stderr)
def msg_player_join(self, id, local, *rest):
if local:
@@ -628,7 +630,7 @@ class Playfield:
def msg_player_kill(self, id, *rest):
self.playing[id] = 0
- for key, (pid, msg) in self.keycodes.items():
+ for key, (pid, msg) in list(self.keycodes.items()):
if pid == id:
del self.keycodes[key]
@@ -651,8 +653,8 @@ class Playfield:
self.udpsock2 = socket(AF_INET, SOCK_DGRAM)
self.udpsock2.bind(('', port))
self.udpsock2.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
- except error, e:
- print "Cannot listen on the broadcast port %d" % port, str(e)
+ except error as e:
+ print("Cannot listen on the broadcast port %d" % port, str(e))
self.udpsock2 = None
else:
self.iwtd.append(self.udpsock2)
@@ -664,7 +666,7 @@ class Playfield:
# self.snd.close()
if self.dpy is not None:
# clear all pixmaps
- for ico in self.icons.values():
+ for ico in list(self.icons.values()):
ico.clear()
self.pixmaps.clear()
self.dpy.close()
@@ -726,7 +728,7 @@ class Playfield:
f.when_ready(ready)
def msg_patch_file(self, fileid, position, data, lendata=None, *rest):
- if self.fileids.has_key(fileid):
+ if fileid in self.fileids:
f = self.fileids[fileid]
else:
f = self.fileids[fileid] = DataChunk(fileid)
@@ -737,7 +739,7 @@ class Playfield:
self.msg_patch_file(fileid, position, data1, len(data), *rest)
def msg_md5_file(self, fileid, filename, position, length, checksum, *rest):
- if self.fileids.has_key(fileid):
+ if fileid in self.fileids:
f = self.fileids[fileid]
else:
f = self.fileids[fileid] = DataChunk(fileid)
@@ -777,13 +779,13 @@ class Playfield:
f.close()
d = eval(data or '{}', {}, {})
except:
- print >> sys.stderr, 'Invalid config file format'
+ print('Invalid config file format', file=sys.stderr)
else:
d = d.get(gethostname(), {})
namemsg = ''
- for id, local in self.playing.items():
+ for id, local in list(self.playing.items()):
keyid = 'player%d' % id
- if local == 'l' and d.has_key(keyid):
+ if local == 'l' and keyid in d:
namemsg = namemsg + message(
CMSG_PLAYER_NAME, id, d[keyid])
if namemsg:
@@ -803,9 +805,9 @@ class Playfield:
self.udpsock_low += 1
if self.udpsock_low >= 3 and self.initlevel >= 1:
# third time now -- that's too much
- print "Note: routing UDP traffic over TCP",
+ print("Note: routing UDP traffic over TCP", end=' ')
inp = self.udpbytecounter / (udpkbytes*1024.0)
- print "(%d%% packet loss)" % int(100*(1.0-inp))
+ print("(%d%% packet loss)" % int(100*(1.0-inp)))
self.start_udp_over_tcp()
self.s.sendall(message(CMSG_UDP_PORT, MSG_INLINE_FRAME))
else:
diff --git a/display/playback.py b/display/playback.py
index f0e698b..cbdb2ec 100644
--- a/display/playback.py
+++ b/display/playback.py
@@ -3,13 +3,13 @@
import sys, os, gzip
from socket import *
from select import select
-import cStringIO, struct, zlib
+import io, struct, zlib
import time
sys.path.insert(0, os.pardir)
from common.msgstruct import *
from common import hostchooser
-import modes
-from modes import KeyPressed, KeyReleased
+from . import modes
+from .modes import KeyPressed, KeyReleased
#import psyco; psyco.full()
@@ -17,7 +17,7 @@ SOURCEDIR = os.pardir
def loadpixmap(dpy, data, colorkey=None):
- f = cStringIO.StringIO(data)
+ f = io.StringIO(data)
sig = f.readline().strip()
assert sig == "P6"
while 1:
@@ -25,7 +25,7 @@ def loadpixmap(dpy, data, colorkey=None):
if not line.startswith('#'):
break
wh = line.split()
- w, h = map(int, wh)
+ w, h = list(map(int, wh))
sig = f.readline().strip()
assert sig == "255"
data = f.read()
@@ -38,7 +38,8 @@ def loadpixmap(dpy, data, colorkey=None):
return dpy.pixmap(w, h, data, colorkey)
class Icon:
- def __init__(self, bitmap, (x, y, w, h), alpha):
+ def __init__(self, bitmap, xxx_todo_changeme, alpha):
+ (x, y, w, h) = xxx_todo_changeme
self.rect = x, y, w, h
self.size = w, h
self.bitmap = bitmap
@@ -70,7 +71,7 @@ class Playback:
#print values[0],
fn = Playback.MESSAGES.get(values[0], self.msg_unknown)
fn(self, *values[1:])
- print '%d frames in file.' % len(self.frames)
+ print('%d frames in file.' % len(self.frames))
f.close()
assert self.width, "no playfield definition found in file"
@@ -83,13 +84,13 @@ class Playback:
def buildicons(self):
bitmaps = {}
- for bmpcode, (data, colorkey) in self.defbitmaps.items():
+ for bmpcode, (data, colorkey) in list(self.defbitmaps.items()):
if isinstance(data, str):
data = zlib.decompress(data)
else:
data = self.deffiles[data]
bitmaps[bmpcode] = loadpixmap(self.dpy, data, colorkey)
- for icocode, (bmpcode, rect, alpha) in self.deficons.items():
+ for icocode, (bmpcode, rect, alpha) in list(self.deficons.items()):
self.icons[icocode] = Icon(bitmaps[bmpcode], rect, alpha)
def go(self, n):
@@ -101,9 +102,9 @@ class Playback:
"shm only!"
w, h, data, reserved = self.dpy.getppm((0, 0, self.width, self.height))
f = open(filename or ('frame%d.ppm' % self.n), 'wb')
- print >> f, 'P6'
- print >> f, w, h
- print >> f, 255
+ print('P6', file=f)
+ print(w, h, file=f)
+ print(255, file=f)
for i in range(0, len(data), 4):
f.write(data[i+2]+data[i+1]+data[i])
f.close()
diff --git a/display/puremixer.py b/display/puremixer.py
index d0b567a..52d56d4 100644
--- a/display/puremixer.py
+++ b/display/puremixer.py
@@ -64,7 +64,7 @@ class PureMixer:
byteorder = self.byteorder
# done
if (freq, bytes, signed, channels, byteorder) != self.parameters:
- raise ValueError, 'sound sample conversion failed'
+ raise ValueError('sound sample conversion failed')
return data
def wavesample(self, file):
@@ -87,7 +87,7 @@ class PureMixer:
channels = mixer_channels[:]
channels.reverse()
for c in channels:
- if already_seen.has_key(c):
+ if c in already_seen:
data1 = ''
else:
data1 = c.read(bufsize)
@@ -114,10 +114,10 @@ def byteswap(data, byte):
elif byte == 4:
typecode = 'i'
else:
- raise ValueError, 'cannot convert endianness for samples of %d bytes' % byte
+ raise ValueError('cannot convert endianness for samples of %d bytes' % byte)
import array
a = array.array(typecode, data)
if a.itemsize != byte:
- raise ValueError, 'endianness convertion failed'
+ raise ValueError('endianness convertion failed')
a.byteswap()
return a.tostring()
diff --git a/display/pythonxlibintf.py b/display/pythonxlibintf.py
index 5e32715..04d85bb 100644
--- a/display/pythonxlibintf.py
+++ b/display/pythonxlibintf.py
@@ -51,7 +51,7 @@ class Display:
0x010101)
def pixmap(self, w, h, data, colorkey=-1):
- print >> sys.stderr, '.',
+ print('.', end=' ', file=sys.stderr)
extent = w*h
depth = self.depth
if depth >= 24:
@@ -72,7 +72,7 @@ class Display:
elif depth == 24 or depth == 32:
p_size = 8, 8, 8
else:
- raise ValueError, 'unsupported screen depth %d' % depth
+ raise ValueError('unsupported screen depth %d' % depth)
imgdata = []
maskdata = []
@@ -82,9 +82,9 @@ class Display:
while plane >= (1<<(8-p_size[color])):
src = 0
for y in range(h):
- imgline = 0L
- maskline = 0L
- shifter = 1L
+ imgline = 0
+ maskline = 0
+ shifter = 1
for x in range(w):
if data[src:src+3] == key:
# transparent
@@ -111,7 +111,8 @@ class Display:
image.size = w, h
return image
- def getppm(self, (x, y, w, h), bkgnd=None):
+ def getppm(self, xxx_todo_changeme, bkgnd=None):
+ (x, y, w, h) = xxx_todo_changeme
if bkgnd is None:
bkgnd = self.win.create_pixmap(w, h, self.depth)
bkgnd.mask = None
@@ -191,7 +192,8 @@ class Display:
from socket import fromfd, AF_INET, SOCK_STREAM
return [fromfd(self.dpy.fileno(), AF_INET, SOCK_STREAM)]
- def taskbar(self, (x, y, w, h)):
+ def taskbar(self, xxx_todo_changeme1):
+ (x, y, w, h) = xxx_todo_changeme1
for j in range(y, y+h, 32):
for i in range(x, x+w, 32):
self.putppm(i, j, self.taskbkgnd,
diff --git a/display/snd_linux.py b/display/snd_linux.py
index dae82e0..fd82619 100644
--- a/display/snd_linux.py
+++ b/display/snd_linux.py
@@ -1,7 +1,7 @@
import sys
-from cStringIO import StringIO
-import puremixer
-from music1 import Music
+from io import StringIO
+from . import puremixer
+from .music1 import Music
class Sound:
@@ -30,10 +30,10 @@ class Sound:
if name == self.format:
break
else:
- print >> sys.stderr, 'available sound formats:'
+ print('available sound formats:', file=sys.stderr)
for name, bits, signed, byteorder in self.Formats:
- print >> sys.stderr, ' %-8s %s' % (name, nicefmttext(
- bits, signed, byteorder))
+ print(' %-8s %s' % (name, nicefmttext(
+ bits, signed, byteorder)), file=sys.stderr)
sys.exit(2)
import linuxaudiodev
@@ -41,9 +41,9 @@ class Sound:
f = linuxaudiodev.open('w')
f.setparameters(self.freq, p['bits'], 1,
getattr(linuxaudiodev, 'AFMT_' + self.format))
- except Exception, e:
- print >> sys.stderr, "sound disabled: %s: %s" % (
- e.__class__.__name__, e)
+ except Exception as e:
+ print("sound disabled: %s: %s" % (
+ e.__class__.__name__, e), file=sys.stderr)
return
self.f = f
self.mixer = mixer = puremixer.PureMixer(**p)
@@ -136,7 +136,7 @@ def nicefmttext(bits, signed, byteorder):
return s
def htmloptionstext(nameval):
- import modes
+ from . import modes
l = ['<font size=-1>Sampling <%s>' % nameval('select', 'fmt')]
for name, bits, signed, byteorder in Sound.Formats:
l.append('<'+nameval('option', 'fmt', name, default='S16_NE')+'>'+
diff --git a/display/snd_pygame.py b/display/snd_pygame.py
index e1a1455..3193775 100644
--- a/display/snd_pygame.py
+++ b/display/snd_pygame.py
@@ -1,5 +1,5 @@
import sys
-from modes import musichtmloptiontext as htmloptionstext
+from .modes import musichtmloptiontext as htmloptionstext
from pygame.locals import *
import pygame.mixer
@@ -16,8 +16,8 @@ class Sound:
def __init__(self):
try:
pygame.mixer.init()
- except pygame.error, e:
- print >> sys.stderr, "sound disabled: %s" % str(e)
+ except pygame.error as e:
+ print("sound disabled: %s" % str(e), file=sys.stderr)
else:
self.has_sound = 1
try:
diff --git a/display/snd_windows.py b/display/snd_windows.py
index 3aea3bd..73d575c 100644
--- a/display/snd_windows.py
+++ b/display/snd_windows.py
@@ -1,8 +1,8 @@
import sys
-from cStringIO import StringIO
-import puremixer
+from io import StringIO
+from . import puremixer
import wingame
-from music1 import Music
+from .music1 import Music
class Sound:
@@ -19,9 +19,9 @@ class Sound:
try:
self.audio = wingame.Audio(1, self.freq, self.bits, self.bufsize)
- except Exception, e:
- print >> sys.stderr, "sound disabled: %s: %s" % (
- e.__class__.__name__, e)
+ except Exception as e:
+ print("sound disabled: %s: %s" % (
+ e.__class__.__name__, e), file=sys.stderr)
return
self.mixer = puremixer.PureMixer(self.freq, self.bits, self.bits==16,
byteorder='little')
@@ -81,7 +81,7 @@ class Sound:
def htmloptionstext(nameval):
- import modes
+ from . import modes
l = ['<font size=-1>Sampling <%s>' % nameval('select', 'bits')]
for bits in (8, 16):
l.append('<'+nameval('option', 'bits', str(bits), default='16')+'>'+