diff --git a/tools/float-convert.py b/tools/float-convert.py new file mode 100644 index 00000000..4d369bff --- /dev/null +++ b/tools/float-convert.py @@ -0,0 +1,88 @@ +import sys +import getopt +import argparse +import struct + + +def main(argv): + outputfile = "" + opts, args = getopt.getopt(argv,"hpf:o:",["help","print","file=","output="]) + out = "" + toFile = False + toPrint = False + labelArr = "" + count = 0 + for opt, arg in opts: + if opt in ("-h", "--help"): + print("\nThis is an initial tool to quickly parse the data .s files and convert anything which could potentially be float\n") + print("-f / --file : file name of data .s file to parse") + print("-o / --output : output file if you want to output to a file") + print("-p / --print : if used then it will output to terminal\n") + elif opt in ("-f", "--file"): + f = open(arg, "r") + for line in f: + if "dlabel " in line: + if count != 0: + if count > 1: + out += "[" + str(count) + "] = {\n " + labelArr + "\n};\n" + else: + out += " = " + labelArr + ";\n" + labelArr = "" + count = 0 + label = line.split("dlabel ", 1)[1] + out += "\nf32 " + out += label.split("\n",1)[0] + # out += "\n" + elif " .float " in line: + if count != 0: + labelArr += ", " + seg = line.split(" .float ", 1)[1] + labelArr += seg.split("\n",1)[0] + ".0f" + count += 1 + # out += "\n" + elif " .word 0x" in line: + if count != 0: + labelArr += ", " + seg = line.split(" .word 0x", 1)[1] + if len(seg) == 9: + labelArr += str(struct.unpack('!f', bytes.fromhex(seg))[0]) + "f" + count += 1 + # out += "\n" + elif " .asciz \"" in line: + if count != 0: + labelArr += ", " + seg = line.split(" .asciz \"", 1)[1].rsplit("\"",1)[0] + length = len(seg) + if length <= 4: + segStr = "" + for letter in seg: + if letter == '\\': + length -= 1 + continue + segStr += format(ord(letter), "x") + for a in range(4 - length): + segStr += "00" + labelArr += str(struct.unpack('!f', bytes.fromhex(segStr))[0]) + "f" + count += 1 + # out += "\n" + + elif opt in ("-o", "--output"): + outputfile = arg + toFile = True + elif opt in ("-p", "--print"): + toPrint = True + if count > 1: + out += "[" + str(count) + "] = {\n " + labelArr + "\n};\n" + elif count == 1: + out += " = " + labelArr + ";\n" + if toPrint: + print(out) + if toFile: + outFile = open(outputfile, "a") + outFile.write(out) + outFile.close() + + sys.exit() + +if __name__ == "__main__": + main(sys.argv[1:]) \ No newline at end of file