annotate img2tiles.py @ 3:97ec271a513f

Bunch of changes
author Mike Pavone <pavone@retrodev.com>
date Mon, 02 Sep 2013 21:22:47 -0700
parents
children a74776d80f95
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1 #!/usr/bin/env python
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
2 from PIL import Image
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
3
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
4 def gchannel(Val):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
5 return (Val >> 4) & 0xE
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
6
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
7 threshold = 127
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
8
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
9 def get_color_info(pixels, rng, threshold, exclude={}):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
10 gencolors = {}
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
11 A = 255
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
12 for idx in rng:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
13 color = pixels[idx]
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
14 if len(color) == 4:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
15 (R, G, B, A) = color
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
16 else:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
17 (R, G, B) = color
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
18 if A > threshold:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
19 gcolor = (gchannel(R), gchannel(G), gchannel(B))
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
20 if not gcolor in exclude:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
21 if gcolor in gencolors:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
22 gencolors[gcolor] += 1
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
23 else:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
24 gencolors[gcolor] = 1
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
25 glist = [(gencolors[color], color) for color in gencolors]
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
26 glist.sort()
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
27 glist.reverse()
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
28 return glist
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
29
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
30 def totiles(im, palette):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
31 pass
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
32
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
33 def make_palette(im, trans_thresh, max_global, max_line):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
34 pixels = im.getdata()
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
35 (width, height) = im.size
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
36 colors = get_color_info(pixels, xrange(0, height * width), trans_thresh)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
37 glob_pal = {}
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
38 for idx in xrange(0, min(max_global, len(colors))):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
39 (count, color) = colors[idx]
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
40 glob_pal[color] = idx
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
41 line_pals = []
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
42 if max_global < len(colors):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
43 for line in xrange(0, height):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
44 linestart = line * width
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
45 linecolors = get_color_info(pixels, xrange(linestart, linestart+width), trans_thresh, glob_pal)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
46 line_pal = {}
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
47 for idx in xrange(0, min(max_line, len(linecolors))):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
48 (count, color) = linecolors[idx]
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
49 line_pal[color] = idx
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
50 line_pals.append(line_pal)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
51 return (glob_pal, line_pals, max_global, max_line)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
52
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
53 def color_dist(a, b):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
54 (ra, ga, ba) = a
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
55 (rb, gb, bb) = b
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
56 return (ra-rb)**2 + (ga-gb)**2 + (ba-bb)**2
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
57
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
58 def trans_image(im, trans_thresh, pal):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
59 (global_pal, line_pals, _, _) = pal
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
60 pixels = im.getdata()
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
61 (width, height) = im.size
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
62 gpixels = []
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
63 A = 255
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
64 x = 0
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
65 y = 0
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
66 for pixel in pixels:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
67 if x == width:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
68 x = 0
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
69 y += 1
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
70 if width % 8:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
71 for i in xrange(0, 8-(width%8)):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
72 gpixels.append(0)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
73 if len(pixel) == 4:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
74 (R, G, B, A) = pixel
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
75 else:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
76 (R, G, B) = pixel
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
77 if A > trans_thresh:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
78 gpixel = (gchannel(R), gchannel(G), gchannel(B))
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
79 if gpixel in global_pal:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
80 gpixels.append(global_pal[gpixel])
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
81 elif gpixel in line_pals[y]:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
82 gpixels.append(line_pals[y][gpixel] + len(global_pal))
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
83 else:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
84 bestdist = color_dist((0,0,0), (15, 15, 15))
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
85 bestpal = 0
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
86 for cur in global_pal:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
87 curdist = color_dist(gpixel, cur)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
88 if curdist < bestdist:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
89 bestdist = curdist
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
90 bestpal = global_pal[cur]
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
91 for cur in line_pals[y]:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
92 curdist = color_dist(gpixel, cur)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
93 if curdist < bestdist:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
94 bestdist = curdist
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
95 bestpal = line_pals[y][cur]
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
96 gpixels.append(bestpal)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
97 else:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
98 gpixels.append(0)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
99 x += 1
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
100 if width % 8:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
101 for i in xrange(0, 8-(width%8)):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
102 gpixels.append(0)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
103 width += 8-(width%8)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
104 if height % 8:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
105 for y in xrange(0, 8-(height%8)):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
106 for x in xrange(0, width):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
107 gpixels.append(0)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
108 height += 8-(height%8)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
109
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
110 return (width, height, gpixels)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
111
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
112 def appendword(b, word):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
113 b.append(word >> 8)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
114 b.append(word & 0xff)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
115
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
116 def to_tiles(palpix):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
117 (width, height, pixels) = palpix
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
118 b = bytearray()
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
119 cwidth = width/8
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
120 cheight = height/8
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
121 words = len(pixels)/4
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
122 appendword(b, words)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
123 appendword(b, cwidth)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
124 appendword(b, cheight)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
125
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
126 for cy in xrange(0, cheight):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
127 ystart = cy*8*width
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
128 for cx in xrange(0, cwidth):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
129 startoff = (cx*8) + ystart
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
130 for row in xrange(0, 8):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
131 rowoff = startoff + row*width
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
132 for bytecol in xrange(0, 4):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
133 boff = bytecol * 2 + rowoff
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
134 #print 'boff:', boff, 'len(pixels)', len(pixels), 'cx', cx, 'cy', cy, 'cwidth', cwidth, 'cheight', cheight
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
135 #print 'pixels[boff]:', pixels[boff]
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
136 b.append(pixels[boff] << 4 | pixels[boff+1])
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
137 return b
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
138
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
139 def add_pal_entries(tiles, pal):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
140 (global_pal, line_pals, max_global, max_line) = pal
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
141 pal_list = [(0, 0, 0)] * max_global
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
142 for entry in global_pal:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
143 pal_list[global_pal[entry]] = entry
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
144 for entry in pal_list:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
145 (R, G, B) = entry
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
146 tiles.append(B)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
147 tiles.append(G << 4 | R)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
148 for line in line_pals:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
149 pal_list = [(0, 0, 0)] * max_line
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
150 for entry in line:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
151 pal_list[line[entry]] = entry
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
152 for entry in pal_list:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
153 (R, G, B) = entry
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
154 tiles.append(B)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
155 tiles.append(G << 4 | R)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
156
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
157
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
158
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
159 def main(argv):
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
160 if len(argv) < 3:
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
161 print "Not enough arguments"
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
162 return
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
163 fname = argv[1]
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
164 im = Image.open(fname)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
165 pal = make_palette(im, threshold, 8, 8)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
166 palpix = trans_image(im, threshold, pal)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
167 tiles = to_tiles(palpix)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
168 bits = add_pal_entries(tiles, pal)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
169 out = open(argv[2], 'wb')
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
170 out.write(tiles)
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
171
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
172 if __name__ == '__main__':
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
173 import sys
97ec271a513f Bunch of changes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
174 main(sys.argv)