tcl7.xjp  tcl8.0jp ̔݊уXNvgăRpCɔp

						m-hirano@sra.co.jp


  tcl8.0  On the fly bytecode compile @\̂߂ɁAtcl7.xjp  
tcl8.0jp ̊Ԃɂ́AinternalCode ւ̊R[hϊ@\ɔ݊
܂B܂Aeval, uplevel, source ́AsɃXNvg̍
RpCNR}h̎gp internalCode ւ̊R[h
ϊ@\ɂLQȕp𐶂邱Ƃ܂B

  ̃hLg͂̔݊ƕpɂĐ̂łB
҂ tcl7.xjp  kanji internalCode R}h̎gp@ƐUɊւĂ
xmĂ邱ƂOƂĂ܂B

  Ȃ݂ɁAR[ḧႢӎAtcl7.xjp  internalCode ւ̊
R[hϊ@\ɗȂXNvgĂXɂ́A݊
͂܂CɂȂȂł傤B


1.	݊

1.1.	Ǘ
  
  ȉ̂悤ȃXNvgƂ܂B

	1	kanji internalCode JIS
	2	set jis 
	3	kanji internalCode SJIS
	4	set sjis 
	5	kanji internalCode EUC
	6	set euc 
	7	foreach i "$jis $sjis $euc" {
	8		puts [ kanji code $i ]
	9	}
	10	set l [ list $jis $sjis $euc ]
	11
	12	kanji internalCode EUC
	13	foreach i "JIS SJIS EUC" {
	14		kanji internalCode $i
	15		set idx [ kanji lsearch $l * ]
	16		puts $idx
	17	}

  tcl7.xjp ŏLsƁAC^NeBu[hAC^NeB
u[hƂɁA

	JIS
	SJIS
	EUC
	0
	1
	2

  ̏o͂܂Btcl8.0jp ŎsƁAC^NeBu[h
́A

	JIS
	SJIS
	EUC
	2
	2
	2

  C^NeBu[hł́A

	EUC
	EUC
	EUC
	0
	0
	0

  ƂȂ܂(SunOS 4.1.x ̏ꍇ)B


1.2.	

  tcl8.0jp łȂ̂悤ȂƂN邩ƂƁA

	܂ޑlRpC鎞ɂ́A݂ internalCode 
	R[hϊB̌AăRpCNȂARpC
	ꂽl̓R[hϊȂB
  
  Ƃɂł(グ̃ftHgB2.2. Ōq@
ŃRpC internalCode ւ̃R[hϊSɋ֎~ł܂)B

# internalCode ̐UɊւ tcl7.xjp Ƃ̌݊ۂɂ́AoCgR[
# hsɎȂ΂ȂȂ({)Aꂪ߂ǂA
# sptH[}X̂ڂɌĂ邩炱dl
# AƂ̂{łB

  tcl8.0jp ł̃C^NeBu[hƔC^NeBu[hł̌
ʂ̈Ⴂ́A̎ƁAȉ̗RŐ܂B

  C^NeBu[hł́AXNvgt@CŏɑSRpC
ŁAoCgR[h̎sJn܂(tcl8.0 ̌X̎)B
āA

	kanji internalCode XXX ̋LqĂARpC͂邪A
	RɎsȂ̂ŁARpCɂ internalCode ͕
	ȂB

  ƂɂȂ܂B

  C^NeBu[hł́A1 sǂݍޖɃRpCAoCg
R[hs܂( tcl8.0 ̌X̎)BāA

	kanji internalCode XXX ̃RpCEš̊܂ޑl
	̃RpCɂ́Aݒ肵 internalCode Ɍ͂𔭊B

  ƂɂȂ܂B̂悤 internalCode ̕ω̃^C~OAC^
NeBu[hƔC^NeBu[ȟʂ̈Ⴂ𐶂ݏoĂ
킯łB


1.3.	@:eval g

  internalCode ݒ肵ɁA܂ޑlăRpCA
܂A

	܂ޑlR}hAeval R}hĎsB

  Ƃ tcl7.xjp ƌ݊ɂȂ܂Btcl8.0 ̎ł́Aeval R}h
nꂽăRpCEs܂B

  ۂɏLXNvgƁA

	1	kanji internalCode JIS
	2	eval set jis 
	3	kanji internalCode SJIS
	4	eval set sjis 
	5	kanji internalCode EUC
	6	eval set euc 
	7	foreach i "$jis $sjis $euc" {
	8		puts [ kanji code $i ]
	9	}
	10	set l [ list $jis $sjis $euc ]
	11
	12	kanji internalCode EUC
	13	foreach i "JIS SJIS EUC" {
	14		kanji internalCode $i
	15		set idx [ eval kanji lsearch {$l} * ]
	16		puts $idx
	17	}

  ̂悤ɂȂ܂B


2. 	p

  1.3. ł eval ɂXNvg̍ăRpCŐϋɓI internalCode 
ւ̃R[hϊp܂BAinternalCode ւ̃R[hϊL
Qȕp𐶂ނƂ܂B


2.1.	Ǘ

  vVW

	proc Foo { x } { .... }

  Aunknown vVW auto_load 悤 tclIndex Lq
Ƃ܂B܂AXNvgōŏɓoꂷ Foo ̗p@A

	Foo \x95\x5c

  ̂悤ɁAobNXbVGXP[vŋLqlA܂܊R[
hƂĐV[PX(̗ł SJIS  '\' ̕ɂȂ)ɂȂ
Ȃ̂Ƃ܂B

  \x95\x5c ƂobNXbVGXP[v́A"Foo \x95\x5c" Ƃ
̃RpCɁAIɃoCiA܂ SJIS  '\' ɒu
܂(tcl8.0 ̌X̎)B

  āA"Foo \x95\x5c" ̌Ăяo unknown vVWōs܂B
ۂɂ proc Foo { x } { .... } ܂ރt@C source Auplevel R
}h "Foo \x95\x5c" Ăяo܂B

  ̂Ƃ uplevel R}h "Foo \" ƂRpC邱
ƂɂȂ܂BȂȂAł \x95\x5c  "Foo \x95\x5c" Ƃ
̃RpC SJIS  '\' ɒuĂ̂ŁA"Foo \"  
unknown vVẄƂĎg邩łB

  ̃RpCɂAtcl8.0jp ͒ʏ SJIS  '\' Ɖ߂A
internalCode ւ̃R[hϊsĂ܂܂B

  ̎ internalCode  SJIS  ANY ꍇ͖͂
̂łAႦ SunOS 4.1.x ̃ftHgł EUC łƂ܂
B̏ꍇ͌ʓI \x95\x5c  EUC  '\' ł \xc9\xbd ɕϊ
 Foo ̈ɓn邱ƂɂȂ܂BA unknown vV
Wɂ uplevel R}hł̃RpĆAԍŏ Foo ̌Ăяo
̎ɂN܂񂩂A

	Foo \x95\x5c
	Foo \x95\x5c

  ̂悤ȃXNvgƁA

	Foo \xc9\xbd
	Foo \x95\x5c

  sĂ܂Al Foo ̈ɎgpĂAŏ̌Ăяo
Ƃȍ~̌ĂяoƂŌʂقȂƂAϊȏ󋵂Ɋׂ܂B


2.2.	@:RpC̃R[hϊ̋֎~

  ̖邽߂ɁA tcl8.0jp  ł́A
$tcl_library/init.tcl  unknown vVWuāAunknown v
VWRpC̎ɂ internalCode ւ̃R[hϊ֎~
悤ɂĂ܂B

  source, uplevel, eval (̑̃R}hłN邩m܂񂪁A
\[XR[hȊÕhLĝŖ)ɂRpC 
internalCode ւ̃R[hϊ֎~ɂ́A

	kanji convertWhenCompile no

  ARpCɂ internalCode ւ̃R[hϊNė~Ȃ
ɑ}܂B

	kanji convertWhenCompile yes

  Ƃ邱ƂŁARpC internalCode ւ̃R[hϊ\ɂł
܂B

  K؂Ɏg邱ƂŁALQȕpɑΉł܂B

# tcl8.0 ̃IWiR[h̃p[T/oCgR[hK؂ɏ
# 邱ƂłΉo͂łAύXȂ̂Ŏ~߂Ă܂ ^^;
# ܁AuoCgR[h̃ptH[}XƂ trade off lāvƂ
# Ƃ炵RꉞtĂ܂傤 B)

  ܂ACÂł傤A܂񂾕ϐAvVWA
eval ̍ăRpCɂ internalCode ւ̃R[hϊɂĉe
󂯂܂B܂񂾊֐AϐgĂ鎞ɁA܂h 
internalCode ؑւƁAvʋJ邱Ƃł傤B


3.	p[WO̊Sȋ֎~

  ꍇɂẮASẴf[^ƂĈė~Ȃꍇ
BɁAoCif[^ regsub, subst gĕGȕ
ϊsA eval ֓n悤ȏꍇłB

̂悤ȏꍇA

	kanji scanKanjiToken no

  Ƃ邱ƂŎł܂Bグ̃ftHg

	kanji scanKanjiToken yes

  ɂȂĂ܂BKvɉĐؑւĎgpĉB

  ʏftHĝ܂܂ővłAɊCÕXNvggp
ꍇ subst  error o肷̂ȂAؑւĂ݂ƌʂ
܂B

  scanKanjiToken  no ̏ꍇAtcl8.0jp ̃p[T͂قڊS 
tcl8.0 ƌ݊ɂȂ܂B܂A{Ɋւăp[T͉ȂȂ
܂B JIS R[hXNvg͉ŏԂɂȂł傤B

  Ȃ݂Ɍ݂̎dlł́AconvertWhenCompile ̓C^[v^(interp 
R}hŐꂽC^[v^)ɕʂłAscanKanjiToken ̓v
ZXŜɔgy܂B


4.  '\\' GXP[v

  tcl7.xjp ł '\\' Ɋ񂠂ꍇ̓삪mɌ߂
܂łB Tcl/Tk 8.0.4jp 1.4a Ō߂܂Bȉ̂悤
u܂B


	\		->	
	"\"		->	
	{\}		->	\
	"{\}"	->	{}

  ̂悤ɁAASCII  '\\' GXP[vȂ̂Ɠl̓
܂B

  ܂A2.1. łqׂA炩̐Ɍ \xXX\xXX  
\XXX\XXX (X  [a-fA-F0-9]) ̃V[PXꍇA 
internalCode ɕϊ܂Bȉ SJIS  '\' ƂȂ \x95\x5c 
ɋĐ܂BinternalCode  EUC łƂ܂B

	\x95\x5c
		-> internalCode ɂ炸A SJIS  '\'

	a. "ihr̊ \x95\x5c"
		-> 'ihr̊' ݂̂ internalCode ɕϊA
		   \x95\x5c ͏ SJIS  '\' ܂A

			'ihr̊ \' ....	ꕶ EUC  
						SJIS ̃R[h݁B

	b. {ihr̊ \x95\x5c}
		-> 'ihr̊' ݂̂ internalCode ɕϊA
		   \x95\x5c  Tcl  {} ɂ quote Kɂ̂ƂA

			'ihr̊ \x95\x5c' ... EUC 

	c. "{ihr̊ \x95\x5c}"

		-> a. lA'ihr̊' ݂̂ internalCode ɕϊ
		   A\x95\x5c ͏ SJIS  '\' ܂A

			'{ihr̊ \}' ....ꕶ EUC  
						SJIS ̃R[h݁B

  RłAR[h݂ꍇ͒ӂĉB


5.	SJIS pJiT|[g

  Tcl/Tk 8.0.4jp 1.3a AWindows vbgtH[̃T|[gǉ
܂BɂA8.0jp ŖĂpJixT|[
g邱Ƃɂ܂B

  tcl8.0jp ŔpJi̎gpł銿R[h SJIS Ɍ܂B

  8.0.4jp 1.3a ́AR[h̎ʂɂāA8.0.4jp 1.2 ȑO
̂悤ɂقڏ EUC ƌȂ̂ł͂ȂAJIS/EUC/SJIS  internal code 
̑ɁAR[hʍȏꍇɃ[U SJIS/EUC ̂ǂ]ނ̂
̎w肪\ɂȂ܂B

	kanji preferSjis yes

  ƂƁAEUC/SJIS ʂȏꍇA SJIS ƌȂ悤ɂȂ
BɂA SJIS pJib󂯂܂BtɌ EUC 
ł܂B

	kanji preferSjis no

  ƂƁA܂ł tcl8.0jp ƂقړlAEUC ƌȂ悤ɂȂ܂B

  UNIX vbgtH[ł default  no ŁAق tcl8.0.4jp 1.2 ȑO
̃o[Wƌ݊܂(قځAƂ̂́A኱ SJIS ƔfP[
X𑝂₵ł)BWindows vbgtH[ł default  yes 
B܂ARłAWindows vbgtH[ł default  internal
code  SJIS łB

  āAWindows vbgtH[ EUC ŏꂽXNvg
ꍇȂǂ͋CtĉB8 bit ͂قڊm SJIS ƌ
ȂAbyte compile error o܂B

  Ȃ݂ɁAJIS ȂmɎR[hł̂ŁA}`vbgtH[
œXNvg̊R[hƂāASĎgpł͂łB


6.	Windows vbgtH[ł̊R[ḧ

  Win32 API  SJIS ƂĎg܂Bt@CAtHgA
WXgL[A^Cgo[Aetc.. łB

  ƂlƂ͎v܂񂪁AWindows vbgtH[
ŁAinternal code  SJIS ȊOɂꍇAWin32 API Ɋn
ƂĂA SJIS œnȂȂ\܂B

  āAinternal code  SJIS ȊOɕςꍇAXNvg 
Win32 API ɓn镶́A SJIS ɂȂ悤vO}gC
Ȃ΂Ȃ܂Btcl8.0jp ͂̂߂ care Ss܂B
܂łȂƂ͎v܂Aň̏ꍇAt@CAނႭ
ȃWXgL[ɂނႭȒlł܂܂B


7.	グ internal code

  tcl8.0.4jp1.4 ܂ł́Atcl7.xjp lAグ(default) internal
code ͊ϐ LANG QƂĐݒ肵Ă܂Btcl8.0.5jp 1.5a 
ύXA

	1. ܂ϐ TCL_KANJICODE QƁBݒ肷ĺAkanji
	   internalCode R}ḧƓASJIS|EUC|JIS|ANY łB
	   vbgtH[ Windows ̏ꍇA TCL_KANJICODE 
	   肳ĂȂ΁ASJIS ƂB

	2. vbgtH[ UNIX Ȃ΁ATCL_KANJICODE ݒ肳
	   ȂꍇA
		LC_ALL
		LC_CTYPE
		LANG
	   ̏ŊϐQƁBl͂ locale Bv 
	   TCL_KANJICODE ݒ肳ĂȂ΁Atcl8.0.4jp 1.x,
	   tcl7.xjp Ɠl̓B

  ̂悤ɂ܂B

  TCL_KANJICODE p Windows  internal code  EUC ɂꍇA
kanji preferSjis ͎I false ɂȂ܂B
