.RM4の「jump address」を「block name」に置き換えるスクリプトをswiftで作りました。
例)swift main.swift "座る3.RM4">"座る3.RM4.txt"
"座る3.RM4":
...
<medit><medit> <block name="立ち状態?" type="1" xpos="30" ypos="60" bluearrow="16" redarrow="26"/> <varcalc size="1" data="0" adr="0x0f82"> <vconst data="65536"/> <vaddress size="2" adr="0x0f00"/> <flagconst data="1"/>
</varcalc></medit>
...
<jump adr="0x00000120"/>
...
"座る3.RM4.txt":
...
<jump adr="0x00000120:立ち状態?"/>
...
main.swift:
func main() {
var byte_num:Array<Int> = Array(repeating:0,count:10000)
var jump_adr:Array<Int> = Array(repeating:0,count:1000)
var i = 0;
var j=0;
//let filePath = scan()
if CommandLine.arguments.count == 2 {
let filePath: String = CommandLine.arguments[1]
guard let file = try? String(contentsOfFile: filePath, encoding: String.Encoding.shiftJIS) else { exit(0) }
var first: Bool = true
//jump adr の取得
file.enumerateLines { (line, stop) in
if first {
first = false
} else {
byte_num[i]=line.lengthOfBytes(using: String.Encoding.shiftJIS)+2
i=i+1
//Swift.print(byte_num[i-1])
if line.range(of:"jump adr") != nil {
//Swift.print("jump adr")
let item = line.components(separatedBy: "\"")
let itema = item[1].components(separatedBy: "x")
//Swift.print(itema[1])
jump_adr[j] = Int(itema[1],radix: 16)!
//Swift.print(jump_adr[j])
j=j+1
}
//let item = line.components(separatedBy: ",")
//data.append(Dummy(Int(item[0])!, Float(item[1])!, c: item[2]))
}
}
// label の取得
let jump_adr_index_max=j
var jump_adr_label:Array<String> = Array(repeating:"",count:1000)
var theByteNum=0
var theJump_adr=0
var jump_adr_label_f = 0
for i in 0..<jump_adr_index_max {
theByteNum = 0
var medit_line_f = 0
j = 0
jump_adr_label_f = 0
jump_adr_label[i] = ""
file.enumerateLines { (line, stop) in
if first {
first = false
} else {
theByteNum = theByteNum + byte_num[j]
j=j+1
//Swift.print(theByteNum ,":", theJump_adr)
if ( jump_adr_label_f == 0 ) {
if ( medit_line_f == 0) {
if ( theJump_adr < theByteNum ) {
medit_line_f = 1
//Swift.print("medit_line_f=1")
}
} else {
if line.range(of:"block name") != nil { //置き換えが出来ないのは、block nameラベルが無いもの。例)最後のwait
let item = line.components(separatedBy: "\"")
let itema = item[1]
jump_adr_label[i] = itema
//Swift.print(jump_adr_label[i])
jump_adr_label_f=1
}
}
}
}
}
if ( jump_adr_label_f == 0 ) {
//Swift.print("Not found jump adr label", theJump_adr)
}
}
// label に置き換え
var hexstr = ""
file.enumerateLines { (line, stop) in
if first {
first = false
} else {
if line.range(of:"jump adr") != nil {
//Swift.print("a:"+line)
jump_adr_label_f = 0
for i in 0..<jump_adr_index_max {
hexstr = "0x" + String(format: "%08x" , jump_adr[i] )
//Swift.print("a:"+hexstr)
if ( jump_adr_label_f == 0 ) {
if let range = line.range(of: hexstr ) {
//Swift.print("b:"+jump_adr_label[i])
if ( jump_adr_label[i] != "") {
let linea = line.replacingCharacters( in: range, with: (hexstr + ":" + jump_adr_label[i]) )
Swift.print(linea)
jump_adr_label_f = 1
}
}
}
}
} else {
Swift.print(line)
}
}
}
}
}
main()