def run(infile, outfile, options): x, y = options.origin w = min(32 - x, options.size[0]) h = min(24 - y, options.size[1]) if infile[-4:].lower() == '.scr': scr = read_bin_file(infile, 6912) snapshot = [0] * 65536 snapshot[16384:16384 + len(scr)] = scr else: snapshot = get_snapshot(infile) for spec in options.pokes: poke(snapshot, spec) scrshot = _get_screenshot(snapshot[16384:23296], x, y, w, h) if options.invert: for row in scrshot: for udg in row: if udg.attr & 128: udg.data = [b^255 for b in udg.data] udg.attr &= 127 flip_udgs(scrshot, options.flip) rotate_udgs(scrshot, options.rotate) _write_image(scrshot, outfile, options.scale, options.animated)
def test_flip_udgs_with_duplicates(self): base_udg = Udg(1, [2, 3, 5, 7, 11, 13, 17, 19]) udg = base_udg.copy() udgs = [[udg, udg]] flip_udgs(udgs, 1) udg_f = base_udg.copy() udg_f.flip(1) self.assertEqual([[udg_f, udg_f]], udgs)
def run(infile, outfile, options): if options.binary or options.org is not None: snapshot = read_bin_file(infile, 49152) if options.org is None: org = 65536 - len(snapshot) else: org = options.org snapshot = [0] * org + list(snapshot) + [0] * (65536 - org - len(snapshot)) elif infile[-4:].lower() == '.scr': scr = read_bin_file(infile, 6912) snapshot = [0] * 65536 snapshot[16384:16384 + len(scr)] = scr elif infile[-4:].lower() in ('.sna', '.szx', '.z80'): snapshot = get_snapshot(infile) else: try: snapshot = BinWriter(infile, fix_mode=options.fix_mode).snapshot except SkoolKitError: raise except: raise SkoolKitError( 'Unable to parse {} as a skool file'.format(infile)) for spec in options.moves: move(snapshot, spec) for spec in options.pokes: poke(snapshot, spec) if options.macro is not None: match = re.match('(#?)(FONT|SCR|UDG|UDGARRAY)([^A-Z]|$)', options.macro) if match: macro = match.group(2) try: frame = MACROS[macro](snapshot, options.macro[match.end(2):]) except skoolmacro.MacroParsingError as e: raise SkoolKitError('Invalid #{} macro: {}'.format( macro, e.args[0])) else: raise SkoolKitError('Macro must be #FONT, #SCR, #UDG or #UDGARRAY') else: (x, y), (w, h) = options.origin, options.size frame = Frame(scr_udgs(snapshot, x, y, w, h), options.scale) if options.invert: for row in frame.udgs: for udg in row: if udg.attr & 128: udg.data = [b ^ 255 for b in udg.data] udg.attr &= 127 flip_udgs(frame.udgs, options.flip) rotate_udgs(frame.udgs, options.rotate) _write_image(frame, outfile, options.animated)
def run(infile, outfile, options): if options.binary or options.org is not None or infile[-4:].lower() in ('.sna', '.szx', '.z80'): snapshot = make_snapshot(infile, options.org)[0] elif infile[-4:].lower() == '.scr': snapshot = make_snapshot(infile, 16384)[0] else: try: snapshot = BinWriter(infile, fix_mode=options.fix_mode).snapshot except SkoolKitError: raise except: raise SkoolKitError('Unable to parse {} as a skool file'.format(infile)) for spec in options.moves: move(snapshot, spec) for spec in options.pokes: poke(snapshot, spec) if options.macro is not None: match = re.match('(#?)(FONT|SCR|UDG|UDGARRAY)([^A-Z]|$)', options.macro) if match: macro = match.group(2) try: frame = MACROS[macro](snapshot, options.macro[match.end(2):]) except skoolmacro.MacroParsingError as e: raise SkoolKitError('Invalid #{} macro: {}'.format(macro, e.args[0])) else: raise SkoolKitError('Macro must be #FONT, #SCR, #UDG or #UDGARRAY') else: (x, y), (w, h) = options.origin, options.size frame = Frame(scr_udgs(snapshot, x, y, w, h), options.scale) if options.invert: for row in frame.udgs: for udg in row: if udg.attr & 128: udg.data = [b^255 for b in udg.data] udg.attr &= 127 flip_udgs(frame.udgs, options.flip) rotate_udgs(frame.udgs, options.rotate) _write_image(frame, outfile, options.animated)
def test_flip_udgs(self): udg1 = Udg(0, [1, 2, 4, 8, 16, 32, 64, 128], [1, 2, 4, 8, 16, 32, 64, 128]) udg2 = Udg(0, [1, 2, 3, 4, 5, 6, 7, 8], [2, 4, 6, 8, 10, 12, 14, 16]) udg3 = Udg(0, [1, 2, 3, 4, 5, 6, 7, 8], [8, 7, 6, 5, 4, 3, 2, 1]) udg4 = Udg(0, [8, 7, 6, 5, 4, 3, 2, 1], [255, 254, 253, 252, 251, 250, 249, 248]) udgs = [[udg1.copy(), udg2.copy()], [udg3.copy(), udg4.copy()]] flip_udgs(udgs, 0) self.assertEqual(udgs, [[udg1, udg2], [udg3, udg4]]) udgs = [[udg1.copy(), udg2.copy()], [udg3.copy(), udg4.copy()]] flip_udgs(udgs, 1) udg1_f, udg2_f, udg3_f, udg4_f = udg1.copy(), udg2.copy(), udg3.copy( ), udg4.copy() udg1_f.flip(1) udg2_f.flip(1) udg3_f.flip(1) udg4_f.flip(1) self.assertEqual(udgs, [[udg2_f, udg1_f], [udg4_f, udg3_f]]) udgs = [[udg1.copy(), udg2.copy()], [udg3.copy(), udg4.copy()]] flip_udgs(udgs, 2) udg1_f, udg2_f, udg3_f, udg4_f = udg1.copy(), udg2.copy(), udg3.copy( ), udg4.copy() udg1_f.flip(2) udg2_f.flip(2) udg3_f.flip(2) udg4_f.flip(2) self.assertEqual(udgs, [[udg3_f, udg4_f], [udg1_f, udg2_f]]) udgs = [[udg1.copy(), udg2.copy()], [udg3.copy(), udg4.copy()]] flip_udgs(udgs, 3) udg1_f, udg2_f, udg3_f, udg4_f = udg1.copy(), udg2.copy(), udg3.copy( ), udg4.copy() udg1_f.flip(3) udg2_f.flip(3) udg3_f.flip(3) udg4_f.flip(3) self.assertEqual(udgs, [[udg4_f, udg3_f], [udg2_f, udg1_f]])
def test_flip_udgs(self): udg1 = Udg(0, [1, 2, 4, 8, 16, 32, 64, 128], [1, 2, 4, 8, 16, 32, 64, 128]) udg2 = Udg(0, [1, 2, 3, 4, 5, 6, 7, 8], [2, 4, 6, 8, 10, 12, 14, 16]) udg3 = Udg(0, [1, 2, 3, 4, 5, 6, 7, 8], [8, 7, 6, 5, 4, 3, 2, 1]) udg4 = Udg(0, [8, 7, 6, 5, 4, 3, 2, 1], [255, 254, 253, 252, 251, 250, 249, 248]) udgs = [[udg1.copy(), udg2.copy()], [udg3.copy(), udg4.copy()]] flip_udgs(udgs, 0) self.assertEqual(udgs, [[udg1, udg2], [udg3, udg4]]) udgs = [[udg1.copy(), udg2.copy()], [udg3.copy(), udg4.copy()]] flip_udgs(udgs, 1) udg1_f, udg2_f, udg3_f, udg4_f = udg1.copy(), udg2.copy(), udg3.copy(), udg4.copy() udg1_f.flip(1) udg2_f.flip(1) udg3_f.flip(1) udg4_f.flip(1) self.assertEqual(udgs, [[udg2_f, udg1_f], [udg4_f, udg3_f]]) udgs = [[udg1.copy(), udg2.copy()], [udg3.copy(), udg4.copy()]] flip_udgs(udgs, 2) udg1_f, udg2_f, udg3_f, udg4_f = udg1.copy(), udg2.copy(), udg3.copy(), udg4.copy() udg1_f.flip(2) udg2_f.flip(2) udg3_f.flip(2) udg4_f.flip(2) self.assertEqual(udgs, [[udg3_f, udg4_f], [udg1_f, udg2_f]]) udgs = [[udg1.copy(), udg2.copy()], [udg3.copy(), udg4.copy()]] flip_udgs(udgs, 3) udg1_f, udg2_f, udg3_f, udg4_f = udg1.copy(), udg2.copy(), udg3.copy(), udg4.copy() udg1_f.flip(3) udg2_f.flip(3) udg3_f.flip(3) udg4_f.flip(3) self.assertEqual(udgs, [[udg4_f, udg3_f], [udg2_f, udg1_f]])