〜 テキスト 〜
EUCをJISに変換

UNIX系のワークステーションで用いられるEUC(EUC-JP)コードを、
メール等で使用しているJIS(ISO−2022−JP)コードに変換します。
JISコードは半角から全角、全角から半角に切り替わる際に、エスケープコードが必要となりますので、
設定先の変数サイズは、元の変数の文字列サイズより大きく確保しておく必要があります。
HSP3からは、HSPの機能によりメモリの自動確保機能がありますが、
poke命令を用いて直接書き込んでいるため、バッファサイズの自動拡張は行いません。
注意しましょう。
	

euctojis 設定先変数, 変換元変数
設定先変数変換したJISコードテキストを格納する変数を指定する。
変換元変数JISコードに変換するEUCコードテキストを格納した変数を指定する。

 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
#module
#deffunc euctojis val, val
	mref jis, 24 : mref euc, 25
	wbite = 0 // 2バイト文字フラグ
	i = 0     // 読込元インデクス
	strlen len, euc
	repeat len
		peek code.0, euc, cnt
		// 2バイト文字
		if code.0 >= 0xa1 & (code.0 <= 0xfe) {
			// 2バイト開始エスケープシーケンス(KI)
			if wbite = 0 {
			  wbite = 1
			  poke jis, i + 0, 0x1b
			  poke jis, i + 1, 0x24
			  poke jis, i + 2, 0x42
			  i += 3
			}
			// コード変換
			code.0 -= 0x80
			peek code.1, euc, cnt + 1
			code.1 -= 0x80
			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, 3200, 2 // 足りない場合はサイズを大きくしてください
	sdim file, 512
	// 読込
	dialog "txt", 16, "Eucコードテキスト"
	if stat = 0 : end
	notesel string.0
	noteload refstr
	// 保存
	dialog "txt", 17, "Jisコードテキスト"
	if stat = 0 : end
	euctojis string.1, string.0
	notesel string.1
	notesave refstr
	dialog "EUCコードからJISコードに変換しました。"
	end

euctojis 設定先変数, 変換元変数
設定先変数変換したJISコードテキストを格納する変数を指定する。
変換元変数JISコードに変換するEUCコードテキストを格納した変数を指定する。

 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
#module
#deffunc euctojis var jis, var euc, local wbite, local i, local code
	repeat strlen(euc)
		code.0 = peek(euc, cnt)
		// 2バイト文字
		if code.0 >= 0xa1 & code.0 <= 0xfe {
			// 2バイト開始エスケープシーケンス(KI)
			if wbite = 0 {
			  wbite = 1
			  poke jis, i + 0, 0x1b
			  poke jis, i + 1, 0x24
			  poke jis, i + 2, 0x42
			  i += 3
			}
			// コード変換
			code.0 -= 0x80
			code.1 = peek(euc, cnt + 1) - 0x80
			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, 3200, 2 // 足りない場合はサイズを大きくしてください
	sdim file, 512
	// 読込
	dialog "txt", 16, "Eucコードテキスト"
	if stat = 0 : end
	notesel string.0
	noteload refstr
	// 保存
	dialog "txt", 17, "Jisコードテキスト"
	if stat = 0 : end
	euctojis string.1, string.0
	notesel string.1
	notesave refstr
	dialog "EUCコードからJISコードに変換しました。"
	end