Tcl/Tk package for PPxP
=======================

1. $B35MW(B

    "PPxP with Tcl/Tk" $B$O(B PPxP $B$N%3%s%=!<%k5!G=$r;HMQ$9$k$?$a$KI,MW$J(B
    C $B8@8l$G=q$+$l$?%k!<%A%s$r(B Tcl $B$+$i;HMQ$G$-$k$h$&$K$7$?%Q%C%1!<%8$G(B
    $B$9!#$b$H$b$H$N%k!<%A%s$O(B PPxP $B$N:n<T$N??Fi$5$s$K$h$j:n@.$5$l$?$b$N$G(B
    $B$9!#(BTcl $B$+$i$O(B Tk $B$H$$$&(B GUI $B%i%$%V%i%j$,;HMQ$G$-$k$?$a!"(B($B$"$kDxEY(B)
    $BMF0W$K(B PPxP $B$N(B GUI $B%3%s%=!<%k$r:n@.$9$k$3$H$,$G$-$^$9!#(B

    $B$^$?!"$3$N%Q%C%1!<%8$K$O%5%s%W%k%9%/%j%W%H$H$7$F(B ppxpd $B$N%b%K%?$G$"(B
    $B$k(B tkppxp$B!"$*$h$S!"4J0W@_Dj%D!<%k$N(B qdial $B$,4^$^$l$F$$$^$9!#(B

2. $B%$%s%9%H!<%k(B

    1)	$B%$%s%9%H!<%k$K$O(B Tcl/Tk $B$N%i%$%V%i%j!"%X%C%@%U%!%$%k$*$h$S(B
	tclsh$B!"(Bwish $B$,I,MW$G$9!#%5%]!<%H$7$F$$$k(B Tcl/Tk $B$N%P!<%8%g%s$O0J(B
	$B2<$NDL$j$G$9!#(B

	    Tcl7.6/Tk4.2
	    Tcl7.6jp/Tk4.2jp
	    Tcl8.0/Tk8.0
	    Tcl8.0jp/Tk8.0jp

    2)	ppxp $B$N%H%C%W%G%#%l%/%H%j$h$jDL>o$N%$%s%9%H!<%k<j=g$r<B9T$7$F2<(B
	$B$5$$!#<+F0$G%$%s%9%H!<%k$5$l$k$O$:$G$9!#(B

    3)	$B<+F0$G$O$&$^$/%$%s%9%H!<%k$5$l$J$$>l9g$O!"%H%C%W%G%#%l%/%H%j$G(B 
	configure $B$K%*%W%7%g%s$r;XDj$7$F(B configure $B$r<B9T$7D>$7$F2<$5$$!#(B

	    % cd $ppxp_top_dir
	    % rm config.cache
	    % ./configure [options...]

	configure $B$N%*%W%7%g%s$K$O0J2<$N$b$N$,;XDj$G$-$^$9!#(B

	    --with-tclsh=FILE
	    --with-wish=FILE
		tclsh/wish $B$N%U%!%$%kL>$r;XDj$7$^$9!#%U%k%Q%9$G;XDj$7$?(B
		$B>l9g$O$=$N%U%!%$%k$rD>@\(B tclsh/wish $B$H$7$F07$$$^$9!#%U%!(B
		$B%$%kL>$N$_;XDj$7$?>l9g$O4D6-JQ?t(B $PATH $B$+$i$=$N%U%!%$%k(B
		$B$K0lCW$9$k%U%!%$%k$rC5$7$^$9!#(B
		configure $B$O!"(Bwish $B$,8+IU$+$C$?>l9g(B tclsh $B$h$j$b(B wish $B$r(B
		$BM%@h$7$F%3%s%U%#%.%e%l!<%7%g%s>pJs$r<h$j=P$7$^$9!#$=$N$?(B
		$B$a!"(Bwish $B$,%$%s%9%H!<%k$5$l$F$$$k>l9g$O(B --with-wish $B$N$_(B
		$B;XDj$9$l$P$h$$$G$7$g$&!#(B
		$B$3$N%*%W%7%g%s$r;XDj$7$J$+$C$?>l9g!"(Bconfigure $B$O4D6-JQ?t(B
		$PATH $B$+$i<!$NL>A0$N%U%!%$%k$r=gHV$KC5$7$^$9!#(B
		    tclsh tclsh8.0jp tclsh8.0 tclsh7.6jp tclsh7.6
		    wish wish8.0jp wish8.0 wish7.6jp wish7.6

	    --with-tcl-includes=DIRS
		Tcl/Tk $B$N%X%C%@%U%!%$%k$,%3%s%Q%$%iI8=`$N%$%s%/%k!<%I%Q(B
		$B%9$KL5$$$H$-$K;XDj$7$^$9!#(B':' $B$G6h@Z$C$FJ#?t$N%G%#%l%/%H(B
		$B%j$r;XDj$9$k$3$H$,$G$-$^$9!#(B

	    --disable-tcl-shared
		Tcl $B$N%@%$%J%_%C%/%m!<%G%#%s%05!G=$r;HMQ$;$:!"(BPPxP $B%Q%C(B
		$B%1!<%8$rAH$_9~$s$@(B tclsh, wish $BAjEv$N<B9T%U%!%$%k(B ($B$=$l(B
		$B$>$l(B ppxpsh, pwish) $B$r@8@.$9$k$3$H$r;XDj$7$^$9!#(B
		$B$^$?!"$3$N%*%W%7%g%s$r;XDj$7$J$$>l9g$G$b!"%$%s%9%H!<%k$5(B
		$B$l$F$$$k(B tclsh/wish $B$,(B "load" $B%3%^%s%I$r%5%]!<%H$7$F$$$J(B
		$B$$$H$-$K$O%@%$%J%_%C%/%m!<%G%#%s%05!G=$O;HMQ$7$^$;$s!#(B

	    --with-tcl-config=FILE
	    --with-tk-config=FILE
		Tcl/Tk $B$N%$%s%9%H!<%k;~$N@_Dj$,5-=R$5$l$F$$$k%U%!%$%k(B
		tclConfig.sh/tkConfig.sh $B$r$=$l$>$l%U%k%Q%9$G;XDj$7$^$9!#(B
		$B;XDj$,L5$1$l$P!"(Bconfigure $B$O(B tclsh $B$"$k$$$O(B wish $B$N>pJs(B
		$B$+$i(B tclConfig.sh/tkConfig.sh $B$N>l=j$r?dB,$7$^$9!#(B

		$B%@%$%J%_%C%/%m!<%G%#%s%0$r;HMQ$9$k>l9g$O!"%3%s%Q%$%k<+(B
		$BBN$K$O(B tclConfig.sh/tkConfig.sh $B$OI,MW$J$$$N$G!"$3$N%*(B
		$B%W%7%g%s$r;XDj$7$J$/$F$b9=$$$^$;$s!#$?$@$7!"$=$N>l9g$G(B
		$B$b$3$N%*%W%7%g%s$r;XDj$9$k$3$H$K$h$j!"%@%$%J%_%C%/%m!<(B
		$B%G%#%s%0MQ%U%!%$%k$K(B tcl $B$N<B9T$KI,MW$J%i%$%V%i%j(B
		(libtcl$BEy(B)$B$,%j%s%/$5$l$^$9!#%Q%C%1!<%8$N%P!<%8%g%s4IM}(B
		$B$r9T$C$F$$$k%7%9%F%`$N%P%$%J%j%Q%C%1!<%8$r:n@.$9$k>l9g(B
		$B$J$I$O$3$N%*%W%7%g%s$r;XDj$7$F$*$$$?$[$&$,$$$$$G$7$g$&!#(B

3. tkppxp/qdial

    tkppxp $B$O(B fppxp $B$d(B xppxp $B$HF1$8$/!"(Bppxpd $B$N>uBV$N%b%K%?$G$9!#8+$?L\(B
    $B$O(B fppxp/xppxp $B$N??;w$r$7$F$$$^$9$7!"FC$KJQ$o$C$?5!G=$,$"$k$o$1$G$O(B
    $BL5$$$N$G!"IaCJ$O(B fppxp/xppxp $B$r;H$$$^$7$g$&!#(B

    qdial $B$O(B ppxp ($BI8=`%3%s%=!<%k(B) $B$N(B "qdial" $B%3%^%s%I$r??;w$7$F:n@.$7$?(B
    $B$b$N$G$9!#!VI8=`!W$"$k$$$O!V(BStandard$B!W$N%Z!<%8$N$9$Y$F$N9`L\$r@_Dj(B
    $B$7$F$+$i!V@\B3(B (Connect)$B!W%\%?%s$r2!$9$H@\B3$r3+;O$7$^$9!#(B

    AUTH.PROTO ($BG'>Z%W%m%H%3%k(B) $B$,(B "none" $B$G(B CHAT $BJQ?t$b(B "none" $B$N>l9g!"(B
    $B4J0W%?!<%_%J%k$,3+$-$^$9!#$=$N>e$G%m%0%$%s<jB3$-$r9T$C$F2<$5$$!#(B

4. Tcl $B%3%^%s%I(B

    1) $B;HMQ3+;O(B

	Tcl $B%9%/%j%W%HFb$G(B PPxP $B%Q%C%1!<%8$N;HMQ$r3+;O$9$k@k8@$O<!$N$h$&(B
	$B$K9T$$$^$9!#(B

	    package require PPxP

	ppxpsh, pwish $B$r;HMQ$9$k>l9g$OI,MW$O$"$j$^$;$s$,!"F~$l$F$*$$$F$b(B
	$B;Y>c$OL5$$$O$:$J$N$G!"F~$l$F$*$$$?$[$&$,$$$$$G$7$g$&!#(B

    2) ppxpd $B$H$NDL?.3+;O(B

	PPxPSetup [script file] [-i interface] [-c command]
		=> PPxP $B%3%^%s%IL>(B

	    PPxP_Setup $B$O(B ppxpd $B$H$NDL?.$r3+;O$7!"DL?.MQ%3%^%s%I$r@8@.$7(B
	    $B$F!"$=$N%3%^%s%IL>$rJV$7$^$9!#(BPPxP_Setup $B$N<B9T8e$O@8@.$5$l(B
	    $B$?%3%^%s%I$N%5%V%3%^%s%I$r;HMQ$7$F(B ppxpd $B$H$NDL?.$r9T$$$^$9!#(B

    3) $B%5%V%3%^%s%I(B

	read VARNAME [ID] => XCIO

	    read $B%5%V%3%^%s%I$O(B ppxpd $B$+$iAw$i$l$FMh$k%G!<%?$NFI$_=P$7$r(B
	    $B9T$$$^$9!#FI$_=P$7$,<:GT$7$?>l9g(B (ppxpd $B$,=*N;$7$F$7$^$C$F$$(B
	    $B$k$H$-Ey(B) $B$O(B TCL_ERROR $B$rH/@8$5$;$^$9!#(B

	    $B0z?t(B:
		VARNAME: $BFI$_=P$7$?7k2L$r$3$NJQ?t$K3JG<$7$^$9!#(B
		ID: $B8e=R$9$k(B ppxpd $B$X$N%j%/%(%9%H$r9T$&%3%^%s%I$,JV$9(B
		    ID $BHV9f$r;XDj$7$^$9!#>JN,$7$?>l9g$O(B XID_ANY $B$,;HMQ$5(B
		    $B$l$^$9!#(B
	    $BJVCM(B:
	        $BFI$_=P$5$l$?%G!<%?$K4X$9$k>pJs$r$b$D!"(BPPxP $B$G(B XCIO $B$H(B
		$B$h$P$l$k(B ID $B$rJV$7$^$9!#$3$N(B ID $B$+$i>pJs$r<h$j=P$9$K$O!"(B
		XcioType/XcioLast $B%3%^%s%I$r;HMQ$7$^$9!#(B

	filehandle => FILE HANDLE

	    Tcl $B%9%/%j%W%HFb$G;HMQ$9$k$3$H$,$G$-$k%U%!%$%k%O%s%I%k$rJV$7(B
	    $B$^$9!#(BTcl $B%9%/%j%W%H$G$O!"$3$N%U%!%$%k%O%s%I%k$KFI$_=P$;$k%G!<(B
	    $B%?$,$"$k$+$I$&$+$r(B fileevent $BEy$N%3%^%s%I$r;HMQ$7$FD4$Y$k$3(B
	    $B$H$,$G$-$^$9!#(B
	    $B$3$N%3%^%s%I$GF@$i$l$?%U%!%$%k%O%s%I%k$KBP$7$FD>@\FI$_=q$-$r(B
	    $B9T$C$?>l9g$N7k2L$OJ]>Z$G$-$^$;$s!#(B

	$B0J2<$N%5%V%3%^%s%I$O(B ppxpd $B$KBP$7$F>pJs$N<hF@$rMW5a$7!"(Bread $B%5%V(B
	$B%3%^%s%I$KEO$9(B ID $BHV9f$rJV$7$^$9!#$3$l$i$N%5%V%3%^%s%I$r<B9T$7$?(B
	$B8e$K(B read $B%5%V%3%^%s%I$r;H$C$FFI$_=P$9$H5a$a$k>pJs$,F@$i$l$^$9!#(B

	console
	    ppxpd $B$K8=:_@\B3$7$F$$$k%3%s%=!<%k$N>pJs$rMW5a$7$^$9!#(B

	    $BFI$_$@$77k2L(B: XCIO_CONSOLES
		{{key1 val1} {key2 val2} ...} $B7A<0$N%j%9%H!#(B

	env [ENV]
	    $B8=:_@_Dj$5$l$F$$$k4D6-JQ?t$NCM$N<hF@$rMW5a$7$^$9!#(BENV $B$K%0%k!<(B
	    $B%WL>(B (IP, AUTH $BEy(B) $B$r;XDj$9$k$H$=$N%0%k!<%W$G@_Dj$5$l$F$$$k(B
	    $B4D6-JQ?t$NCM$rMW5a$7$?$3$H$K$J$j$^$9!#$^$?!"(BENV $B$rA4$/>JN,$9(B
	    $B$k$H(B ppxpd $B$O8=:_@_Dj$5$l$F$$$kA4$F$N4D6-JQ?t$NCM$rAw?.$7$F(B
	    $BMh$^$9!#(B

	    $BFI$_$@$77k2L(B: XCIO_ENV_SET
		{{env1 val1} {env2 val2} ...} $B7A<0$N%j%9%H!#(B

	listup
	    ppxpd $B$,J];}$7$F$$$kA4$F$N4D6-JQ?t$H%3%^%s%I$N%j%9%H$rMW5a$7(B
	    $B$^$9!#(B

	    $BFI$_$@$77k2L(B: XCIO_LISTUP

	update
	    ppxpd $B$KBP$7$F(B update packet $B$NAw?.$rMW5a$7$^$9!#(Bupdate
	    packet $B$K$O!"(BPPP $B@\B3$K4X$9$k8=:_$N>uBV$,4^$^$l$F$$$^$9!#(B

	    $BFI$_$@$77k2L(B: XCIO_UP_INFO
		{{key1 val1} {key2 val2} ...} $B7A<0$N%j%9%H(B

	autoupdate [on|off]
	    $B$3$N%5%V%3%^%s%I$r<B9T$9$k$H!"(Bppxpd $B$ODj4|E*$K(B update
	    packet $B$rAw$C$FMh$k$h$&$K$J$j$^$9!#$^$?!"4D6-JQ?t$,B>$N%3%s(B
	    $B%=!<%k$K$h$C$F@_Dj$5$l$?$H$-$K$O$=$N99?7>pJs$bAw?.$7$FMh$^$9!#(B

	    $BFI$_$@$77k2L(B: XCIO_UP_INFO, XCIO_UP_ENVS

	passwd [ENTRY NAME KEY]
	    ENTRY, NAME, KEY $B$r;XDj$9$k$H(B PPP $B@\B3$N%Q%9%o!<%I$N@_Dj$r9T(B
	    $B$$$^$9!#(B
	    $B0z?t$N;XDj$r>JN,$9$k$H(B ppxpd $B$K@_Dj$5$l$F$$$k%Q%9%o!<%I%(%s(B
	    $B%H%j$N0lMw$rMW5a$7$^$9!#(B

	    $BFI$_$@$77k2L(B: XCIO_PWD_SET ($B0z?t>JN,;~(B)

	input STRING
	    $B$3$N%3%^%s%I$O!"(Bppxpd $B$KBP$7$FC<Kv$+$i$NF~NOJ8;zNs$rAw?.$7$^(B
	    $B$9!#<g$K%?!<%_%J%k%b!<%I$G;HMQ$7$^$9!#(B

	$B0J2<$N%5%V%3%^%s%I$O(B ppxp ($BI8=`%3%s%=!<%k(B) $B$G;HMQ$9$k%3%^%s%I$H(B
	$BF1$8$G$9!#$?$@$7!"A0J}0lCW$O9T$o$J$$$N$G!"%3%^%s%IL>$O@53N$K5-=R(B
	$B$9$kI,MW$,$"$j$^$9!#(B

	auto [on|off]
	bye
	connect
	disconnect
	filter
	ipconfig
	iproute
	quit
	save
	set
	unset
	source
	down
	up

	$B$3$NCf$G!"(Bbye $B$*$h$S(B quit $B$r<B9T$9$k$H!"(Bppxpd $B$H$NDL?.$r@ZCG$7$?(B
	$B8e!"D>$A$K(B PPxP_Setup $B$G@8@.$5$l$?%3%^%s%I$N:o=|$r9T$$$^$9!#$7$?(B
	$B$,$C$F!"$=$l0J9_(B ppxpd $B$H$NDL?.$O9T$($^$;$s!#(B

    4) $BNc(B

	#!/usr/bin/tclsh

	catch {set auto_path [concat /usr/local/lib/ppxp/tcl $auto_path]}
	package require PPxP
	set ppxp [eval PPxPSetup $argv]
	set id [$ppxp env IP]

	while {1} {
	    if {[catch {set xcio [$ppxp read s $id]}]} {
	    	break
	    }
	    if {[XcioType $xcio] != "XCIO_WAIT"} {
	    	puts $s
	    }
	    if [XcioLast $xcio] {
	    	break
	    }
	}
	$ppxp bye
--
