1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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:])
|