[Scummvm-cvs-logs] SF.net SVN: scummvm: [28054] scummvm/trunk/tools

sev at users.sourceforge.net sev at users.sourceforge.net
Fri Jul 13 11:58:40 CEST 2007


Revision: 28054
          http://scummvm.svn.sourceforge.net/scummvm/?rev=28054&view=rev
Author:   sev
Date:     2007-07-13 02:58:39 -0700 (Fri, 13 Jul 2007)

Log Message:
-----------
Rename AGI palette extractor

Added Paths:
-----------
    scummvm/trunk/tools/agi-palex.py

Removed Paths:
-------------
    scummvm/trunk/tools/palex.py

Copied: scummvm/trunk/tools/agi-palex.py (from rev 28053, scummvm/trunk/tools/palex.py)
===================================================================
--- scummvm/trunk/tools/agi-palex.py	                        (rev 0)
+++ scummvm/trunk/tools/agi-palex.py	2007-07-13 09:58:39 UTC (rev 28054)
@@ -0,0 +1,185 @@
+#!/usr/bin/python
+# Amiga AGI game palette extractor.
+# Extracts palette from an Amiga AGI game's executable file.
+# Initial version written during summer of 2007 by Buddha^.
+# Somewhat optimized. Adding the preliminary palette test helped speed a lot.
+# FIXME: Doesn't report anything about not found files when some files are found.
+#        An example: palex.py SQ2 PQ1 (When file SQ2 exists but PQ1 doesn't)
+import struct, sys, os.path, glob
+
+# Constants
+maxComponentValue     = 0xF
+colorsPerPalette      = 16
+componentsPerColor    = 3
+bytesPerComponent     = 2
+bytesPerColor         = componentsPerColor   * bytesPerComponent
+componentsPerPalette  = colorsPerPalette     * componentsPerColor
+bytesPerPalette       = componentsPerPalette * bytesPerComponent
+encodedBlack          = '\x00' * bytesPerColor
+encodedWhite          = (('\x00' * (bytesPerComponent - 1)) + ("%c" % maxComponentValue)) * componentsPerColor
+decodedBlack          = tuple([0 for x in range(componentsPerColor)])
+decodedWhite          = tuple([maxComponentValue for x in range(componentsPerColor)])
+blackColorNum         = 0
+whiteColorNum         = colorsPerPalette - 1
+encodedBlackStart     = blackColorNum * bytesPerColor
+encodedBlackEnd       = encodedBlackStart + bytesPerColor
+encodedWhiteStart     = whiteColorNum * bytesPerColor
+encodedWhiteEnd       = encodedWhiteStart + bytesPerColor
+componentPrintFormat  = "0x%1X"
+arraynamePrefix       = "amigaPalette"
+
+def isColor12Bit(color):
+	"""Is the color 12-bit (i.e. 4 bits per color component)?"""
+	for component in color:
+		if not (0 <= component <= maxComponentValue):
+			return False
+	return True
+
+def printCommentLineList(lines):
+	"""Prints list of lines inside a comment"""
+	if len(lines) > 0:
+		if len(lines) == 1:
+			print "// " + lines[0]
+		else:
+			print "/**"
+			for line in lines:
+				print " * " + line
+			print " */"
+
+def printColor(color, tabulate = True, printLastComma = True, newLine = True):
+	"""Prints color with optional start tabulation, comma in the end and a newline"""
+	result = ""
+	if tabulate:
+		result = result + "\t"
+	for component in color[:-1]:
+		result = result + ((componentPrintFormat + ", ") % component)
+	result = result + (componentPrintFormat % color[-1])
+	if printLastComma:
+		result = result + ","
+	if newLine:
+		print result
+	else:
+		print result,
+
+def printPalette(palette, filename, arrayname):
+	"""Prints out palette as a C-style array"""
+	# Print comments about the palette
+	comments = ["A 16-color, 12-bit RGB palette from an Amiga AGI game."]
+	comments.append("Extracted from file " + os.path.basename(filename))
+	printCommentLineList(comments)
+	
+	# Print the palette as a C-style array
+	print "static const unsigned char " + arrayname + "[] = {"
+	for color in palette[:-1]:
+		printColor(color)
+	printColor(palette[-1], printLastComma = False)
+	print("};")
+
+def isAmigaPalette(palette):
+	"""Test if the given palette is an Amiga-style palette"""
+	# Palette must be of correct size
+	if len(palette) != colorsPerPalette:
+		return False
+	
+	# First palette color must be black and last palette color must be black
+	if palette[whiteColorNum] != decodedWhite or palette[blackColorNum] != decodedBlack:
+		return False
+	
+	# All colors must be 12-bit (i.e. 4 bits per color component)
+	for color in palette:
+		if not isColor12Bit(color):
+			return False
+	
+	# All colors must be unique
+	if len(set(palette)) != colorsPerPalette:
+		return False
+	
+	return True
+
+def preliminaryPaletteTest(data, pos):
+	"""Preliminary test for a palette (For speed's sake)."""
+	# Test that palette's last color is white
+	if data[pos + encodedWhiteStart : pos + encodedWhiteEnd] != encodedWhite:
+		return False
+	# Test that palette's first color is black
+	if data[pos + encodedBlackStart : pos + encodedBlackEnd] != encodedBlack:
+		return False
+	return True
+
+def searchForAmigaPalettes(filename):
+	"""Search file for Amiga AGI game palettes and return any found unique palettes"""
+	try:
+		file = None
+		foundPalettes = []
+		# Open file and read it into memory
+		file = open(filename, 'rb')
+		data = file.read()
+		palette = [decodedBlack for x in range(colorsPerPalette)]
+		# Search through the whole file
+		for searchPosition in range(len(data) - bytesPerPalette + 1):
+			if preliminaryPaletteTest(data, searchPosition):
+				# Parse possible palette from byte data
+				for colorNum in range(colorsPerPalette):
+					colorStart = searchPosition + colorNum * bytesPerColor
+					colorEnd   = colorStart + bytesPerColor
+					# Parse color components as unsigned 16-bit big endian integers
+					color = struct.unpack('>' + 'H' * componentsPerColor, data[colorStart:colorEnd])
+					palette[colorNum] = color
+				# Save good candidates to a list
+				if isAmigaPalette(palette):
+					foundPalettes.append(tuple(palette))
+		# Close source file and return unique found palettes	
+		file.close()
+		return set(foundPalettes)
+	except IOError:
+		if file != None:
+			file.close()
+		return None
+
+# The main program starts here
+if len(sys.argv) < 2 or sys.argv[1] == "-h" or sys.argv[1] == "--help":
+	quit("Usage: " + os.path.basename(sys.argv[0]) + " FILE [[FILE] ... [FILE]]\n" \
+		"  Searches all FILE parameters for Amiga AGI game palettes\n" \
+		"  and prints out any found candidates as C-style arrays\n" \
+		"  with sequentially numbered names (" + arraynamePrefix + "1, " + arraynamePrefix + "2 etc).\n" \
+		"  Supports wildcards.")
+
+# Get the list of filenames (Works with wildcards too)
+filenameList = []
+for parameter in sys.argv[1:]:
+	filenameList.extend(glob.glob(parameter))
+
+# Go through all the files and search for palettes
+totalPalettesCount = 0
+if len(filenameList) > 0:
+	negativeFiles = []
+	errorFiles = []
+	for filename in filenameList:
+		foundPalettes = searchForAmigaPalettes(filename)
+		if foundPalettes == None:
+			errorFiles.append(filename)
+		elif len(foundPalettes) == 0:
+			negativeFiles.append(filename)
+		else:
+			# Print out the found palettes
+			for palette in foundPalettes:
+				# Print palettes with sequentially numbered array names
+				totalPalettesCount = totalPalettesCount + 1
+				printPalette(palette, filename, arraynamePrefix + str(totalPalettesCount))
+				print "" # Print an extra newline to separate things
+	# Print comment about files we couldn't find any palettes in
+	if len(negativeFiles) > 0:
+		comments = []
+		comments.append("Couldn't find any palettes in the following files:")
+		comments.extend(negativeFiles)
+		printCommentLineList(comments)
+		print "" # Print an extra newline to separate things
+	# Print comment about errors handling files
+	if len(errorFiles) > 0:
+		comments = []
+		comments.append("Error handling the following files:")
+		comments.extend(errorFiles)
+		printCommentLineList(comments)
+		print "" # Print an extra newline to separate things
+else:
+	printCommentLineList(["No files found"])

Deleted: scummvm/trunk/tools/palex.py
===================================================================
--- scummvm/trunk/tools/palex.py	2007-07-13 06:07:28 UTC (rev 28053)
+++ scummvm/trunk/tools/palex.py	2007-07-13 09:58:39 UTC (rev 28054)
@@ -1,185 +0,0 @@
-#!/usr/bin/python
-# Amiga AGI game palette extractor.
-# Extracts palette from an Amiga AGI game's executable file.
-# Initial version written during summer of 2007 by Buddha^.
-# Somewhat optimized. Adding the preliminary palette test helped speed a lot.
-# FIXME: Doesn't report anything about not found files when some files are found.
-#        An example: palex.py SQ2 PQ1 (When file SQ2 exists but PQ1 doesn't)
-import struct, sys, os.path, glob
-
-# Constants
-maxComponentValue     = 0xF
-colorsPerPalette      = 16
-componentsPerColor    = 3
-bytesPerComponent     = 2
-bytesPerColor         = componentsPerColor   * bytesPerComponent
-componentsPerPalette  = colorsPerPalette     * componentsPerColor
-bytesPerPalette       = componentsPerPalette * bytesPerComponent
-encodedBlack          = '\x00' * bytesPerColor
-encodedWhite          = (('\x00' * (bytesPerComponent - 1)) + ("%c" % maxComponentValue)) * componentsPerColor
-decodedBlack          = tuple([0 for x in range(componentsPerColor)])
-decodedWhite          = tuple([maxComponentValue for x in range(componentsPerColor)])
-blackColorNum         = 0
-whiteColorNum         = colorsPerPalette - 1
-encodedBlackStart     = blackColorNum * bytesPerColor
-encodedBlackEnd       = encodedBlackStart + bytesPerColor
-encodedWhiteStart     = whiteColorNum * bytesPerColor
-encodedWhiteEnd       = encodedWhiteStart + bytesPerColor
-componentPrintFormat  = "0x%1X"
-arraynamePrefix       = "amigaPalette"
-
-def isColor12Bit(color):
-	"""Is the color 12-bit (i.e. 4 bits per color component)?"""
-	for component in color:
-		if not (0 <= component <= maxComponentValue):
-			return False
-	return True
-
-def printCommentLineList(lines):
-	"""Prints list of lines inside a comment"""
-	if len(lines) > 0:
-		if len(lines) == 1:
-			print "// " + lines[0]
-		else:
-			print "/**"
-			for line in lines:
-				print " * " + line
-			print " */"
-
-def printColor(color, tabulate = True, printLastComma = True, newLine = True):
-	"""Prints color with optional start tabulation, comma in the end and a newline"""
-	result = ""
-	if tabulate:
-		result = result + "\t"
-	for component in color[:-1]:
-		result = result + ((componentPrintFormat + ", ") % component)
-	result = result + (componentPrintFormat % color[-1])
-	if printLastComma:
-		result = result + ","
-	if newLine:
-		print result
-	else:
-		print result,
-
-def printPalette(palette, filename, arrayname):
-	"""Prints out palette as a C-style array"""
-	# Print comments about the palette
-	comments = ["A 16-color, 12-bit RGB palette from an Amiga AGI game."]
-	comments.append("Extracted from file " + os.path.basename(filename))
-	printCommentLineList(comments)
-	
-	# Print the palette as a C-style array
-	print "static const unsigned char " + arrayname + "[] = {"
-	for color in palette[:-1]:
-		printColor(color)
-	printColor(palette[-1], printLastComma = False)
-	print("};")
-
-def isAmigaPalette(palette):
-	"""Test if the given palette is an Amiga-style palette"""
-	# Palette must be of correct size
-	if len(palette) != colorsPerPalette:
-		return False
-	
-	# First palette color must be black and last palette color must be black
-	if palette[whiteColorNum] != decodedWhite or palette[blackColorNum] != decodedBlack:
-		return False
-	
-	# All colors must be 12-bit (i.e. 4 bits per color component)
-	for color in palette:
-		if not isColor12Bit(color):
-			return False
-	
-	# All colors must be unique
-	if len(set(palette)) != colorsPerPalette:
-		return False
-	
-	return True
-
-def preliminaryPaletteTest(data, pos):
-	"""Preliminary test for a palette (For speed's sake)."""
-	# Test that palette's last color is white
-	if data[pos + encodedWhiteStart : pos + encodedWhiteEnd] != encodedWhite:
-		return False
-	# Test that palette's first color is black
-	if data[pos + encodedBlackStart : pos + encodedBlackEnd] != encodedBlack:
-		return False
-	return True
-
-def searchForAmigaPalettes(filename):
-	"""Search file for Amiga AGI game palettes and return any found unique palettes"""
-	try:
-		file = None
-		foundPalettes = []
-		# Open file and read it into memory
-		file = open(filename, 'rb')
-		data = file.read()
-		palette = [decodedBlack for x in range(colorsPerPalette)]
-		# Search through the whole file
-		for searchPosition in range(len(data) - bytesPerPalette + 1):
-			if preliminaryPaletteTest(data, searchPosition):
-				# Parse possible palette from byte data
-				for colorNum in range(colorsPerPalette):
-					colorStart = searchPosition + colorNum * bytesPerColor
-					colorEnd   = colorStart + bytesPerColor
-					# Parse color components as unsigned 16-bit big endian integers
-					color = struct.unpack('>' + 'H' * componentsPerColor, data[colorStart:colorEnd])
-					palette[colorNum] = color
-				# Save good candidates to a list
-				if isAmigaPalette(palette):
-					foundPalettes.append(tuple(palette))
-		# Close source file and return unique found palettes	
-		file.close()
-		return set(foundPalettes)
-	except IOError:
-		if file != None:
-			file.close()
-		return None
-
-# The main program starts here
-if len(sys.argv) < 2 or sys.argv[1] == "-h" or sys.argv[1] == "--help":
-	quit("Usage: " + os.path.basename(sys.argv[0]) + " FILE [[FILE] ... [FILE]]\n" \
-		"  Searches all FILE parameters for Amiga AGI game palettes\n" \
-		"  and prints out any found candidates as C-style arrays\n" \
-		"  with sequentially numbered names (" + arraynamePrefix + "1, " + arraynamePrefix + "2 etc).\n" \
-		"  Supports wildcards.")
-
-# Get the list of filenames (Works with wildcards too)
-filenameList = []
-for parameter in sys.argv[1:]:
-	filenameList.extend(glob.glob(parameter))
-
-# Go through all the files and search for palettes
-totalPalettesCount = 0
-if len(filenameList) > 0:
-	negativeFiles = []
-	errorFiles = []
-	for filename in filenameList:
-		foundPalettes = searchForAmigaPalettes(filename)
-		if foundPalettes == None:
-			errorFiles.append(filename)
-		elif len(foundPalettes) == 0:
-			negativeFiles.append(filename)
-		else:
-			# Print out the found palettes
-			for palette in foundPalettes:
-				# Print palettes with sequentially numbered array names
-				totalPalettesCount = totalPalettesCount + 1
-				printPalette(palette, filename, arraynamePrefix + str(totalPalettesCount))
-				print "" # Print an extra newline to separate things
-	# Print comment about files we couldn't find any palettes in
-	if len(negativeFiles) > 0:
-		comments = []
-		comments.append("Couldn't find any palettes in the following files:")
-		comments.extend(negativeFiles)
-		printCommentLineList(comments)
-		print "" # Print an extra newline to separate things
-	# Print comment about errors handling files
-	if len(errorFiles) > 0:
-		comments = []
-		comments.append("Error handling the following files:")
-		comments.extend(errorFiles)
-		printCommentLineList(comments)
-		print "" # Print an extra newline to separate things
-else:
-	printCommentLineList(["No files found"])


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list