#module
#deffunc sjistojis val, val
mref jis, 24 : mref sjis, 25
wbite = 0 // 2バイト文字フラグ
i = 0 // 書込先インデクス
strlen len, sjis
repeat len
peek code.0, sjis, cnt
// 2バイト文字
if (code.0 > 128 & (code.0 < 160)) | (code.0 > 223) {
// 2バイト開始エスケープシーケンス(KI)
if wbite = 0 {
wbite = 1
poke jis, i + 0, 0x1b
poke jis, i + 1, 0x24
poke jis, i + 2, 0x42
i += 3
}
// コード変換
peek code.1, sjis, cnt + 1
if code.0 <= 0x9f : code.0 -= 0x71 : else : code.0 -= 0xb1
code.0 = code.0 * 2 + 1
if code.1 >= 0x7f : code.1--
if code.1 >= 0x9e {
code.0++
code.1 -= 0x7d
} else {
code.1 -= 0x1f
}
wpoke jis, i, (code.1 << 8) + code.0
i += 2
continue cnt + 2
}
// 2バイト終了エスケープシーケンス(KO)
if wbite {
wbite = 0
poke jis, i + 0, 0x1b
poke jis, i + 1, 0x28
poke jis, i + 2, 0x42
i += 3
}
// 1バイト文字
poke jis, i, code.0
i++
loop
return
#global
sdim string, 256, 2
objsize winx, 25
button "保存する", *save
mesbox string, winx, winy - 25, 5
stop
*save
sjistojis string.1, string.0
dialog "txt", 17, "Sjisからコード変換したJisテキスト"
if stat {
dialog "保存しました。\nJISコードを読めるエディタで確認してください。"
notesel string.1
notesave refstr
}
stop
|