svnno****@sourc*****
svnno****@sourc*****
2015年 9月 19日 (土) 21:48:38 JST
Revision: 6024 http://sourceforge.jp/projects/ttssh2/scm/svn/commits/6024 Author: yutakapon Date: 2015-09-19 21:48:37 +0900 (Sat, 19 Sep 2015) Log Message: ----------- ã½ã¼ã¹ã³ã¼ã解説ã®è±èªçã追å ããã Modified Paths: -------------- trunk/doc/en/html/index.html trunk/doc/en/teraterm.hhc Added Paths: ----------- trunk/doc/en/html/reference/image/ trunk/doc/en/html/reference/image/dde.png trunk/doc/en/html/reference/image/dde.ppt trunk/doc/en/html/reference/image/dde_buffer.png trunk/doc/en/html/reference/image/dde_buffer.ppt trunk/doc/en/html/reference/image/dde_flowcontrol.png trunk/doc/en/html/reference/image/dde_flowcontrol.ppt trunk/doc/en/html/reference/image/devman_com0com.png trunk/doc/en/html/reference/image/library_relation.png trunk/doc/en/html/reference/image/library_relation.ppt trunk/doc/en/html/reference/image/module_relation.png trunk/doc/en/html/reference/image/module_relation.ppt trunk/doc/en/html/reference/image/pty.png trunk/doc/en/html/reference/image/pty.ppt trunk/doc/en/html/reference/image/ssh.png trunk/doc/en/html/reference/image/ssh.ppt trunk/doc/en/html/reference/image/ssh2_auth.ppt trunk/doc/en/html/reference/image/ssh2_auth1.png trunk/doc/en/html/reference/image/ssh2_auth2.png trunk/doc/en/html/reference/image/ssh2_sequence.ppt trunk/doc/en/html/reference/image/ssh2_sequence1.png trunk/doc/en/html/reference/image/ssh2_sequence2.png trunk/doc/en/html/reference/image/ssh2_sequence3.png trunk/doc/en/html/reference/image/ssh_packet_format.ppt trunk/doc/en/html/reference/image/ssh_packet_format1.png trunk/doc/en/html/reference/image/ssh_packet_format2.png trunk/doc/en/html/reference/image/ssh_recv_packet.png trunk/doc/en/html/reference/image/ssh_recv_packet.ppt trunk/doc/en/html/reference/image/x11forward.png trunk/doc/en/html/reference/image/x11forward.ppt trunk/doc/en/html/reference/sourcecode.html -------------- next part -------------- Modified: trunk/doc/en/html/index.html =================================================================== --- trunk/doc/en/html/index.html 2015-09-16 15:18:05 UTC (rev 6023) +++ trunk/doc/en/html/index.html 2015-09-19 12:48:37 UTC (rev 6024) @@ -144,7 +144,7 @@ <LI><A HREF="reference/OpenSSH-LICENSE.txt">License of OpenSSH</A></LI> <LI><A HREF="reference/PuTTY-LICENSE.txt">License of PuTTY</A></LI> <LI><A HREF="reference/develop.txt">For developer</A> - <!-- <LI><A HREF="reference/sourcecode.html">Source code explanation</A></LI> --> + <LI><A HREF="reference/sourcecode.html">Source Code Overview</A></LI> </UL> Added: trunk/doc/en/html/reference/image/dde.png =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/dde.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/dde.ppt =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/dde.ppt ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/dde_buffer.png =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/dde_buffer.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/dde_buffer.ppt =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/dde_buffer.ppt ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/dde_flowcontrol.png =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/dde_flowcontrol.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/dde_flowcontrol.ppt =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/dde_flowcontrol.ppt ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/devman_com0com.png =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/devman_com0com.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/library_relation.png =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/library_relation.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/library_relation.ppt =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/library_relation.ppt ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/module_relation.png =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/module_relation.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/module_relation.ppt =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/module_relation.ppt ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/pty.png =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/pty.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/pty.ppt =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/pty.ppt ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/ssh.png =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/ssh.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/ssh.ppt =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/ssh.ppt ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/ssh2_auth.ppt =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/ssh2_auth.ppt ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/ssh2_auth1.png =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/ssh2_auth1.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/ssh2_auth2.png =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/ssh2_auth2.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/ssh2_sequence.ppt =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/ssh2_sequence.ppt ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/ssh2_sequence1.png =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/ssh2_sequence1.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/ssh2_sequence2.png =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/ssh2_sequence2.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/ssh2_sequence3.png =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/ssh2_sequence3.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/ssh_packet_format.ppt =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/ssh_packet_format.ppt ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/ssh_packet_format1.png =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/ssh_packet_format1.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/ssh_packet_format2.png =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/ssh_packet_format2.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/ssh_recv_packet.png =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/ssh_recv_packet.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/ssh_recv_packet.ppt =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/ssh_recv_packet.ppt ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/x11forward.png =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/x11forward.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/image/x11forward.ppt =================================================================== (Binary files differ) Property changes on: trunk/doc/en/html/reference/image/x11forward.ppt ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/doc/en/html/reference/sourcecode.html =================================================================== --- trunk/doc/en/html/reference/sourcecode.html (rev 0) +++ trunk/doc/en/html/reference/sourcecode.html 2015-09-19 12:48:37 UTC (rev 6024) @@ -0,0 +1,2023 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<HTML> +<HEAD> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<TITLE>Tera Term Source Code Overview</TITLE> +<META http-equiv="Content-Style-Type" content="text/css"> +<link rel="stylesheet" href="../style.css" type="text/css"> +</HEAD> +<BODY> + +<h1 class="center">Tera Term Source Code Overview</h1> + +<hr width=80% align=center> + +<ol> + <li><a href="#foreword">Foreword</a></li> + <li><a href="#skillset">Skill Sets</a></li> +<!-- <li><a href="#module">ã¢ã¸ã¥ã¼ã«æ§æ</a></li> + <li><a href="#library">ã©ã¤ãã©ãªæ§æ</a></li>--> + <li><a href="#plugin">Supporting Plug-in</a></li> +<!-- <li><a href="#configuration">è¨å®ãã¡ã¤ã«ã®èªã¿æ¸ã</a></li> + <li><a href="#secure">ã»ãã¥ã¢ããã°ã©ãã³ã°</a></li> + <li><a href="#compatibility">å¤ããã¼ã¸ã§ã³ã®Windowsã¨ã®äºææ§ç¶æ</a></li> + <li><a href="#debug">ãããã°ææ³</a></li> + <li><a href="#thread">ãã«ãã¹ã¬ãã</a></li> + <li><a href="#dde">DDEã«ããããã»ã¹ééä¿¡</a></li> + <li><a href="#ttssh">TTSSHã«ããSSHã®è¨è¨ã¨å®è£ </a></li> + <li><a href="#macro">ãã¯ãè¨èªã®è¨è¨ã¨å®è£ </a></li> + <li><a href="#caret">ãã£ã¬ããå¶å¾¡</a></li> + <li><a href="#serial">ã·ãªã¢ã«ãã¼ã</a></li> + <li><a href="#xyzmodem">ãã¤ããªè»¢éãããã³ã«</a></li>--> +</ol> + +<hr width=80% align=center> + +<h2><a name="foreword">Foreword</a></h2> + This document describes the source code of Tera Term. The target of description is the "4.58" version as of February 2008. +<hr> + + +<h2><a name="skillset">Skill Sets</a></h2> + Most program included in the Tera Term package are described with the C language. + A part of code is described with the C++ language and used by MFC(Microsoft Foundation Class). + The Win32 API knowledge is required because the souce code uses a lot of Win32 API to process the Windows specific function. <br> + The Microsoft Visual Studio 2005 Standard Edition or later is required to build the source code. Unfortunately, the Express Edition can not build the source code because the edition can not support the MFC feature. Also, Other compilers like the C++Builder, Turbo C++ Explorer and gcc can not be supported. <br> + The Windows programming know-how is at the MSDN library provided by Microsoft Corporation. + A user will often refer the MSDN library while the user is developing the software. <br> + +<ul> + <li><a href="http://msdn2.microsoft.com/en-us/library/default.aspx">MSDN library</a></li> + <li><a href="http://msdn2.microsoft.com/ja-jp/library/default.aspx">MSDN library(Japanese)</a></li> +</ul> + +<p> + However, the CygTerm is built with the gcc compiler of the Cygwin package. So, the CygTerm program is implemented by using the gcc feature. The source code is the C language. +</p> + + The main engine of Tera Term is implemented by using the C++ language. It is no problem that your programming skill is only C language because the code is C-like programming. However, the Microsoft Visual C++(VC++) supports the ANSI C standard(C89) and not support the C99 version. The C99-like feature is uniquely supported by VC++. The C99-like function adds the underscore(_) to the initial name of function in order to distinguish easily. For example, the _snprintf() of VC++ is different from the snprintf() of ANSI C(C99). <br> + +<hr> + + + <!-- +<h2><a name="module">ã¢ã¸ã¥ã¼ã«æ§æ</a></h2> +ãTera Termããã±ã¼ã¸ã«å«ã¾ããå®è¡ã¢ã¸ã¥ã¼ã«ï¼.exeã¨.dllï¼ã®é¢é£å³ã以ä¸ã«ç¤ºãã¾ããå®è¡ãã¡ã¤ã«ã®æ¡å¼µåã¯".exe"ã«ãªã£ã¦ãããå¿ è¦ã«å¿ãã¦DLLãåçãªã³ã¯ããã¾ãããããã32ãããããã°ã©ã (x86)ã§ããããã«ãx86-64ãIA-64ã¨ãã£ã64ãããç°å¢ã§ã¯ãã®ã¾ã¾åä½ãããã©ããã¯è©ä¾¡ããã¦ãã¾ããã +ã +<div align="center"> +<img src="image/module_relation.png" width=720 height=540> +</div> + +ãé常ãã¦ã¼ã¶ããã¹ã¯ããããã¹ã¿ã¼ãã¡ãã¥ã¼ããã¢ããªã±ã¼ã·ã§ã³ãèµ·åããã¨ãã«ãå¼ã³åºãããå®è¡ãã¡ã¤ã«ã¯"ttermpro.exe"ã«ãªãã¾ããå®è¡ãã¡ã¤ã«ã¯ããã«5ã¤ã®DLLã¨ãã¤ãããã¯ãªã³ã¯ãã¦ãã¾ããéçãªã³ã¯ãè¡ããåä¸ã®EXEãã¡ã¤ã«ã«ãã¦ããªãã®ã¯ã1ã¤ã®ããã»ã¹ã®ã¡ã¢ãªå æçãæããããã§ããTera Termã§ã¯å¤æ°ã®èµ·åãè¡ããããã¨ãæ³å®ããããããåæè¨è¨æ®µéããDLLã«åå²ããã¦ãã¾ããä¸åº¦èªã¿è¾¼ã¾ããDLLã¯ãè¤æ°ã®ããã»ã¹éã§å ±æãããã¨ãã§ãã¾ãã<br> +ã<br> +ã +ããã¯ãã¹ã¯ãªãããå®è¡ããéã¯ã"ttpmacro.exe"ã¨ããã¾ã£ããå¥ã®ããã»ã¹ãå¼ã³åºããã¾ãã"ttermpro.exe"ã¨ããã»ã¹åä½ã§åãããã¦ããã®ã¯ããã¯ããåä½ã§å®è¡ã§ããããã«ããããã§ãã両ããã»ã¹éã§ããã¼ã¿ã®ããã¨ããè¡ãããã«ã¯ãããã»ã¹ééä¿¡ãå¿ è¦ã§ããTera Termã§ã¯ãDDE(Dynamic Data Exchange)ã¨å¼ã°ããç¾å¨ã§ã¯ã¬ã¬ã·ã¼ã¨ãªã£ã¦ãã¾ã£ãããã¿ãæ¡ç¨ããã¦ãã¾ããå°æ¥ã®Windowsã§ã¯DDEããµãã¼ããããªããªãå¯è½æ§ãããããã®å ´åTera Termä¸ã§ãã¯ããå®è¡ãããã¨ã¯ä¸åã§ããªããªãã¾ãã<br> +ã<br> +ã +ãTTSSHãTTProxyãTTXKanjiMenuã¨ãã£ããã©ã°ã¤ã³å½¢å¼ã®DLLã¯ãTera Termã®èµ·åæã«æ示çã« LoadLibrary() ã使ã£ã¦ãã¤ãããã¯ãã¼ãããã¾ãããã¼ã対象ã¨ãªãDLLã®ãã¡ã¤ã«åã¯ãTTXInit()#ttplug.c ã«ããã¦ã"TTX*.DLL"ã¨ãããã¿ã¼ã³ã«ããããããã®ã¨ãªãã¾ãã<br> +ã<br> +ã +ã"keycode.exe"ã¨"ttpmenu.exe"ã"LogMeTT.exe"ã¯åä½ã¢ããªã±ã¼ã·ã§ã³ã§ãã<br> +ã<br> +ã +ãCygwinæ¥ç¶ã®ããã¿ã«ã¤ãã¦ã¯ãå¥ã®ç¯ã§èª¬æãã¾ãã + +<hr> + + +<h2><a name="library">ã©ã¤ãã©ãªæ§æ</a></h2> +ãé«åº¦ãªæ©è½ãå®ç¾ããããã«ããã«ã¹ã¯ã©ããã§å®è£ ãããã¨ã¯å¹çãããã¨ã¯è¨ãã¾ãããTera Termã§ã¯éçºå¹çåãå³ãããã«ããªã¼ãã³ã½ã¼ã¹ã®ã©ã¤ãã©ãªãç©æ¥µçã«å©ç¨ãã¦ãã¾ãããã ãããªã¼ãã³ã½ã¼ã¹è£½åã®ã©ã¤ã»ã³ã¹ã«ãã競åã«ã¯æ³¨æãæãå¿ è¦ãããã¾ãï¼ç¹ã«GPLï¼ã<br> +ãä¸å³ã«ããªã¼ãã³ã½ã¼ã¹ã®ã©ã¤ãã©ãªããªã³ã¯ãã¦ããã¢ã¸ã¥ã¼ã«ã¨ããã®ãªã³ã¯ç¶æ³ã示ãã¾ããTera Termãã¯ãããã°ã©ã ã«ããã¦ã"waitregex"ã"sprintf"ã³ãã³ãã«ããã¦æ£è¦è¡¨ç¾ãå©ç¨ããããã«ãOnigurumaã¨å¼ã°ããæ£è¦è¡¨ç¾ã©ã¤ãã©ãªããªã³ã¯ãã¦ãã¾ããTera Termæ¬ä½ã§ã¯ããã¼ã¸ã§ã³ãã¤ã¢ãã°ã«Onigurumaã®ãã¼ã¸ã§ã³ã表示ããããã ãã«ãªã³ã¯ããã¦ãã¾ãã +ã +<p> +ãSSHã¢ã¸ã¥ã¼ã«ã§ãã"TTSSH"ã¯ãæå·å¦çãè¡ãããã«OpenSSLãå©ç¨ãã¦ãã¾ãã"OpenSSL"ã¨ãããã¼ãã³ã°ããWebã¢ã¯ã»ã¹ã«ä½¿ãããSSL(Secure Socket Layer)ãããã³ã«å°ç¨ã®ã©ã¤ãã©ãªãã¨æãããã¡ã§ãããåºæ¬çãªæå·ã¢ã«ã´ãªãºã ããµãã¼ããã¦ãããã¨ãããTTSSHã§ã¯OpenSSLã«å«ã¾ããä½ã¬ã¤ã¤ã®ã«ã¼ãã³ãå©ç¨ããã ãã«çã¾ã£ã¦ãã¾ãããã®ãã¨ã¯ãããªãã¡OpenSSLã©ã¤ãã©ãªã«ã»ãã¥ãªãã£ãã¼ã«ãçºè¦ãããã¨ãã¦ããTTSSHã¸ã®å½±é¿ã¯æ¥µãã¦ä½ãã¨ãããã¨ã§ãã<br> +ãzlibã©ã¤ãã©ãªã¯ãSSHãã±ããã®å§ç¸®ãè¡ãããã«å©ç¨ãã¦ãã¾ãããã ãããã¤ã¤ã«ã¢ããåç·ãªã©ã®ä½é度ãªãããã¯ã¼ã¯ã«ããã¦ã¯ããã±ããå§ç¸®ã¯æå¹ã§ãããæ¨ä»ã®é«éåç·ã§ã¯ãããé度ä½ä¸ãæã足ããã¨ãªãã¾ããããã«ãããã©ã«ãã§ã¯ãã±ããå§ç¸®æ©è½ã¯ç¡å¹åããã¦ãã¾ãã +ãPuTTYã¯ä¸çæ¨æºã§ããããªã¼ã®ã¿ã¼ããã«ã¨ãã¥ã¬ã¼ã¿ã§ããPuTTYã«å«ã¾ããPageantã¨å¼ã°ããSSHèªè¨¼ã¨ã¼ã¸ã§ã³ããããã®ã§ãããTTSSHã§Pageantã«ããå ¬ééµèªè¨¼ããµãã¼ãããããã«ãPuTTYã®ã½ã¼ã¹ã³ã¼ããå©ç¨ãã¦ãã¾ãã +</p> +ã +ããªãããããã®ã©ã¤ãã©ãªãéçãªã³ã¯(static link)ã¨ãã¦ãã¾ããã©ã¤ãã©ãªã®ã³ã³ãã¤ã«ãªãã·ã§ã³ã«ã¯"/MT"ãä»å ãã¦ãã¾ããåçãªã³ã¯(dynamic link)ãè¡ãã¨ãä¸é¨ã®ã¦ã¼ã¶ç°å¢ã§Tera Termãèµ·åã§ããªãã¨ããç¾è±¡ãçºçããããã«ãç¾å¨ã§ã¯åçãªã³ã¯ã¯è¡ã£ã¦ãã¾ããã +ã + +<div align="center"> +<img src="image/library_relation.png" width=720 height=540> +</div> + +<hr> +--> + + + <!-- +<h2><a name="plugin">ãã©ã°ã¤ã³ãµãã¼ã</a></h2> +ãTera Termã§ã¯ãDLLã¨ããå½¢å¼ã§ãã©ã°ã¤ã³ã®ããã¿ããµãã¼ããã¦ãã¾ãããã©ã°ã¤ã³å½¢å¼ã®DLLãã¡ã¤ã«ããTera Termãã¤ã³ã¹ãã¼ã«ããã¦ãããã£ã¬ã¯ããªã¸è¨ç½®ããã ãã§ãTera Termã®ã½ã¼ã¹ã³ã¼ããä¿®æ£ãããã¨ãªããæ©è½è¿½å ãè¡ããã¨ãã§ãã¾ãã代表çãªãã©ã°ã¤ã³ã¨ãã¦ãTTSSHãããã¾ãã<br> +ããã©ã°ã¤ã³ãä½æããããã®ãµã³ãã«ã³ã¼ãã¨ãã¦ãTTXSamples\ttxtest\ttxtest.c ã¨ããã½ã¼ã¹ãã¡ã¤ã«ãç¨æããã¦ãã¾ãããã©ã°ã¤ã³ãéçºããã¨ãã¯ããã®ã½ã¼ã¹ãã¡ã¤ã«ãã²ãªå½¢ã¨ããã¨ããã§ããããå®è·µçãªãã©ã°ã¤ã³ã¨ãã¦ã"TTX KanjiMenu"ã®ã½ã¼ã¹ã³ã¼ãï¼TTXKanjiMenu\é ä¸ï¼ãã·ã³ãã«ã§åãããããã§ãã<br><br> + +ããã©ã°ã¤ã³ã¯ãTera Term("ttermpro.exe")ã®èµ·åæã«èªã¿è¾¼ã¾ãã¾ããTTXInit()#ttplug.c ãèªã¿è¾¼ã¿ãè¡ãé¢æ°ã§ãã«ã¬ã³ããã£ã¬ã¯ããªãã"TTX*.DLL"ã¨ããã¯ã¤ã«ãã«ã¼ãã«åè´ããDLLãã¡ã¤ã«ãèªã¿è¾¼ã¿å¯¾è±¡ã¨ãªãã¾ãã<br> +ãè¤æ°ã®DLLãåå¨ããå ´åã¯ãTera Termæ¬ä½ãããã§ã¤ã³ãããããªå½¢ã§ãåDLLã®ã¨ã¯ã¹ãã¼ãé¢æ°ãé£çµããã¾ããé£çµãããé çªã¯ãããããã®DLLãå®ç¾©ãããªã¼ãã¼å¤ï¼TTXExportsæ§é ä½ã®loadOrderã¡ã³ãï¼ã§æ±ºå®ãããç¾ç¶ä¸è¨ã®éãã¨ãªã£ã¦ãã¾ããã +<p> +<table border=1 align=center> +<tr> + <th>ã¢ã¸ã¥ã¼ã«</th> + <th>ãªã¼ãã¼</th> +</tr> + +<tr> + <td>TTProxy</td> + <td>0</td> +</tr> + +<tr> + <td>TTSSH</td> + <td>2500</td> +</tr> + +<tr> + <td>TTX Kanji Menu</td> + <td>5000</td> +</tr> +</table> + </p> + +ãªã¼ãã¼å¤ãå°ããã»ã©ãTera Termæ¬ä½å´ã«è¿ããªãã¾ãããã¨ãã°ãTera Termæ¬ä½ããTTXModifyMenu()ãå¼ã³åºãããå ´åã +ã +ã<ul> +ã <li>TTXModifyMenu()#ttplug.c â TTProxyã®TTXModifyMenu() â TTSSHã®TTXModifyMenu() â TTX Kanji Menuã®TTXModifyMenu()</li> +ã</ul><br> +ã +ã¨ããé çªã§ãåDLLã®é¢æ°ãå¼ã³åºããã¦ãããã¨ã«ãªãã¾ãã +ã<br> + +ãåDLLããTera Termæ¬ä½å´ããå¼ã³åºãã¦ãããããã«ã¨ã¯ã¹ãã¼ãããé¢æ°ç¾¤ã¯ãTTXExportsæ§é ä½ã§å®ç¾©ããTTXBind()ã§æ¸¡ãã¾ãããã¨ãã°ãTTX Kanji Menuã®ã¨ã¯ã¹ãã¼ãé¢æ°ã¯ä»¥ä¸ã®ã¨ããã§ããä¸è¦ãªé¢æ°ã¯ NULL ã§å®ç¾©ãã¦ããã¾ãã + +<pre class=code> +static TTXExports Exports = { +/* This must contain the size of the structure. See below for its usage. */ + sizeof(TTXExports), + +/* This is the load order number of this DLL. */ + ORDER, + +/* Now we just list the functions that we've implemented. */ + TTXInit, + NULL, /* TTXGetUIHooks */ + NULL, /* TTXGetSetupHooks */ + NULL, /* TTXOpenTCP */ + NULL, /* TTXCloseTCP */ + NULL, /* TTXSetWinSize */ + TTXModifyMenu, + TTXModifyPopupMenu, + TTXProcessCommand, + NULL, /* TTXEnd */ + NULL /* TTXSetCommandLine */ +}; +</pre> + +ãååããã©ã°ã¤ã³ã®ã¨ã¯ã¹ãã¼ãé¢æ°ã¯ãä»ã®ãã©ã°ã¤ã³ã¨å¹²æ¸ããªãããã«è¨è¨ãããã¹ãã§ããã¾ããTera Termæ¬ä½å´ããã®å¼ã³åºãããèªåå®ã¦ã§ãããã©ãããå¤æããå¿ è¦ãããå ´åãããã¾ãã<br> +ããã©ã°ã¤ã³ãã¨ã¯ã¹ãã¼ãããé¢æ°ã«ã¤ãã¦ã以ä¸ã«ç¤ºãã¾ãã +ã +<p> +<table border=1 align=center> +<tr> + <th>é¢æ°</th> + <th>æå³</th> +</tr> + +<tr> + <td>TTXBind</td> + <td>ä¸çªå§ãã«å¼ã³åºãããé¢æ°ã§ãããã¨ã¯ã¹ãã¼ãé¢æ°ã®ãã¼ãã«ã渡ãã</td> +</tr> + +<tr> + <td>TTXInit</td> + <td>TTXBind()ã®å¼ã³åºãå¾ã«ããã«å®è¡ãããé¢æ°ã§ãTera Termæ¬ä½ã®ã°ãã¼ãã«å¤æ°(ts, cv)ãåãåãããã©ã°ã¤ã³ã®åæåãè¡ãã</td> +</tr> + +<tr> + <td>TTXGetUIHooks</td> + <td>ãã¤ã¢ãã°ã®ãã³ãã«ãããã¯ããããã®é¢æ°ãTera Termæ¬ä½ã®ãã¤ã¢ãã°ã¤ã³ã¿ã¼ãã§ã¤ã¹ãå¤æ´ãããå ´åã«ä½¿ããããã¯å¯¾è±¡ã®é¢æ°ã¯ä»¥ä¸ã®ã¨ããã<br> + &SetupTerminal, &SetupWin, &SetupKeyboard, &SetupSerialPort, + &SetupTCPIP, &GetHostName, &ChangeDirectory, &AboutDialog, + &ChooseFontDlg, &SetupGeneral, &WindowWindow + </td> +</tr> + +<tr> + <td>TTXGetSetupHooks</td> + <td>ã»ããã¢ããã«ã¼ãã³ãããã¯ããããã®é¢æ°ãããã¯ããå´ã¯ãå ã®é¢æ°ã責任ãæã£ã¦å¼ã³åºãå¿ è¦ããããè¤æ°ã®ãã©ã°ã¤ã³ãåå¨ããå ´åãé¢æ°ããã§ã¤ã³ããã¦ãããããã¯å¯¾è±¡ã®é¢æ°ã¯ä»¥ä¸ã®ã¨ããã<br> + &ReadIniFile, &WriteIniFile, &ReadKeyboardCnf, &CopyHostList, + &AddHostToList, &ParseParam + </td> +</tr> + +<tr> + <td>TTXOpenTCP</td> + <td>TCPæ¥ç¶ãè¡ãã¨ãã«å¼ã³åºãããé¢æ°ãã·ãªã¢ã«æ¥ç¶ã®ã¨ãã¯å¼ã³åºãããªããã¾ãã以ä¸ã®ã½ã±ããã¤ã³ã¿ã¼ãã§ã¤ã¹ãããã¯ãããã¨ãã§ããã<br> + &Pclosesocket, &Pconnect, &Phtonl, &Phtons, &Pinet_addr, + &Pioctlsocket, &Precv, &Pselect, &Psend, &Psetsockopt, + &Psocket, &PWSAAsyncSelect, &PWSAAsyncGetHostByName, + &PWSACancelAsyncRequest, &PWSAGetLastError + </td> +</tr> + +<tr> + <td>TTXCloseTCP</td> + <td>TCPã³ãã¯ã·ã§ã³ãåæãããã¨ãã«å¼ã³åºãããé¢æ°ãã·ãªã¢ã«æ¥ç¶ã®ã¨ãã¯å¼ã³åºãããªããä¸è¨ã®ãã¡ããã¯ããã¤ã³ã¿ã¼ãã§ã¤ã¹ããããªãã°ãå ã«æ»ãå¿ è¦ãããã<br> + &Pclosesocket, &Pconnect, &Phtonl, &Phtons, &Pinet_addr, + &Pioctlsocket, &Precv, &Pselect, &Psend, &Psetsockopt, + &Psocket, &PWSAAsyncSelect, &PWSAAsyncGetHostByName, + &PWSACancelAsyncRequest, &PWSAGetLastError + </td> +</tr> + +<tr> + <td>TTXSetWinSize</td> + <td>Tera Termã¦ã£ã³ãã¦ã®ç»é¢ãµã¤ãºãå¤æ´ãããã¨ãã«å¼ã³åºãããé¢æ°ã</td> +</tr> + +<tr> + <td>TTXModifyMenu</td> + <td>Tera Termã®ã¡ãã¥ã¼ãåæåãããã¨ãã«å¼ã³åºãããé¢æ°ããã©ã°ã¤ã³ç¨ã®ã¡ãã¥ã¼ãæ¿å ¥ãããå ´åã«ä½¿ãããã + </td> +</tr> + +<tr> + <td>TTXModifyPopupMenu</td> + <td>Tera Termã®ãããã¢ããã¡ãã¥ã¼ãåæåãããã¨ãã«å¼ã³åºãããé¢æ°ããã©ã°ã¤ã³ç¨ã®ãããã¢ããã¡ãã¥ã¼ãæ¿å ¥ãããå ´åã«ä½¿ãããã</td> +</tr> + +<tr> + <td>TTXProcessCommand</td> + <td>ã¡ãã¥ã¼ãå¼ã³åºãããã¨ãã«å®è¡ãããé¢æ°ããã©ã°ã¤ã³ç¨ã®ã¡ãã¥ã¼ãå¦çãããã¨ãã«ä½¿ãããã + </td> +</tr> + +<tr> + <td>TTXEnd</td> + <td>Tera Termæ¬ä½ãçµäºããã¨ãã«å¼ã³åºãããé¢æ°ã</td> +</tr> + +<tr> + <td>TTXSetCommandLine</td> + <td>æ°è¦æ¥ç¶ãã»ãã·ã§ã³ã®è¤è£½ãè¡ãã¨ãã«ãã³ãã³ãã©ã¤ã³ãã©ã¡ã¼ã¿ã®å¦çãè¡ãã¨ãã«å¼ã³åºãããé¢æ°ããã©ã°ã¤ã³ç¬èªã®ãªãã·ã§ã³ã追å ããã¨ãã¯ãããã§å¦çãããã + </td> +</tr> + +</table> + </p> +ã + +<hr> +--> + + + <!-- + +<h2><a name="configuration">è¨å®ãã¡ã¤ã«ã®èªã¿æ¸ã</a></h2> +ãWindowsã§ã¯ã¢ããªã±ã¼ã·ã§ã³ã®ãã¼ã¿ä¿åã®ããã«ãã¬ã¸ã¹ããªãä¼çµ±çã«å©ç¨ããã¦ãã¾ãããTera Termã§ã¯ãã®èªçãWindows 3.1ã¾ã§ã«é¡ãããã«ã.iniãã¡ã¤ã«ã«ãããã¼ã«ã«ãã£ã¬ã¯ããªã¸ã®ä¿åæ¹æ³ãæ¨æºã¨ãªã£ã¦ãã¾ãã<br> +ãããã±ã¼ã¸ã«å梱ãããCollectorãLogMeTTãCygTermã«é¢ãã¦ããã¼ã«ã«ãã£ã¬ã¯ããªã¸ãã¼ã¿ãä¿åããã¾ãã<br> +ãä¾å¤ã¨ãã¦ãTeraTerm Menuã¯ããã©ã«ãã§ã¬ã¸ã¹ããªã¸ä¿åããã¾ããã«ã¬ã³ããã£ã¬ã¯ããªã«"ttpmenu.ini"ï¼0ãã¤ãã§å¯ï¼ãè¨ç½®ãããã¨ã§ãã¬ã¸ã¹ããªã®ä»£ããã«.iniãã¡ã¤ã«ã使ãããã«ãããã¨ãã§ãã¾ãããã ããã¬ã¸ã¹ããªãã.iniãã¡ã¤ã«ã¸ã®ç§»è¡ã¯èªåã§è¡ãã¾ããã®ã§ãæåã§åç»é²ãã¦ãã ããã<br> +ã<br> +ã +ãteraterm.iniãã¡ã¤ã«ã«ã¨ã³ããªã追å ããå ´åã¯ãReadIniFile()#ttset.cã«è¨å®ãèªã¿è¾¼ã¿ããããã«ãã¾ãã + +<pre class=code> + ts->ConfirmChangePaste = + GetOnOff(Section, "ConfirmChangePaste", FName, TRUE); +</pre> + +ãWriteIniFile()#ttset.c ã«è¨å®ãæ¸ãè¾¼ã¿ããããã«ãã¾ãã + +<pre class=code> + WriteOnOff(Section, "ConfirmChangePaste", FName, + ts->ConfirmChangePaste); +</pre> + +ãã¨ã³ããªã«æååãè¨å®ããå ´åã¯ãWin32APIã®GetPrivateProfileString()ã¨WritePrivateProfileString()ã使ãã¾ããæ°å¤ãæ±ãããå ´åã¯ãGetPrivateProfileInt()ã¨WriteInt()ã使ãã¾ãã + +<hr> + + + +<h2><a name="secure">ã»ãã¥ã¢ããã°ã©ãã³ã°</a></h2> + +<h3>æååæä½</h3> +ãWindowsã®ããã©ã«ãã¢ã«ã¦ã³ãã¯Administrator権éãä¿æããããã«ï¼ãã ããWindows Vistaã«ã¯å½ã¦ã¯ã¾ããªãï¼ãã¢ããªã±ã¼ã·ã§ã³ã«ãããã¡ãªã¼ãã¼ããã¼ã®ä¸å ·åãããã¨ã管çè 権éã第ä¸è ã«å¥ªåããã¦ãã¾ãå±éºæ§ãããã¾ãã<br> +ãå¾æ¥ãCè¨èªã®æååå¦çã¯éçºè ã®ãã¹ã«ããããããã¡ãªã¼ãã¼ããã¼ãçºçããããã¨ããç¶æ³ã«ããã¾ãããããã§ãMicrosoftã¯Visual Studio 2005ããæååå¦çé¢æ°ã®ã»ãã¥ãªãã£å¼·åãã¼ã¸ã§ã³ãæä¾ããããã«ãªãã¾ããã<br> +ã<br> + +<ul> + <li><a href="http://msdn2.microsoft.com/ja-jp/library/8ef0s5kh(VS.80).aspx">CRT ã®ã»ãã¥ãªãã£å¼·åï¼MSDNã©ã¤ãã©ãªï¼</a></li> +</ul> +<br> + +ãTera Termã§ã¯ã»ãã¥ãªãã£å¼·åãå³ããããæååæä½ã®ã»ã¨ãã©ãã»ãã¥ãªãã£å¼·åãã¼ã¸ã§ã³ã«ç½®ãæãã¦ãã¾ãã以ä¸ã«ä»£æ¿é¢æ°ã示ãã¾ãã<br> +ã<br> + +<table border=1 align=center> +<tr> + <th>æ§</th> + <th>æ°</th> +</tr> + +<tr> + <td>sprintf(), _snprintf()</td> + <td>_snprintf_s()</td> +</tr> + +<tr> + <td>strcat(), strncat()</td> + <td>strncat_s()</td> +</tr> + +<tr> + <td>strcpy(), strncpy()</td> + <td>strncpy_s()</td> +</tr> +</table> +ã<br> +ã +ãããã©ã«ãã®ãã±ã¼ã«ãé©ç¨ãããã¨ãæå¾ ããåä½ã¨ãªããªãã±ã¼ã¹ã«ããã¦ã¯ã_snprintf_s_l()ã使ç¨ãã¦ãã¾ãã<br> +ããããã®é¢æ°ã«ããã¦ãã_s("secure")ã¨ããæ¥å°¾è¾ãä»ããããè¦ãç®ã«åºå¥ãä»ãããããªã£ã¦ãã¾ããå½ç¶ã®ãã¨ãªããããããã®é¢æ°ã¯ANSI Céäºæã§ãã<br> +ã<br> +ããªãããããã®é¢æ°ãå©ç¨ããéãCountå¼æ°ï¼æ ¼ç´ããæ大æåæ°ï¼ã«ã¯"_TRUNCATE"ãã¯ããæå®ãã¦ããããããã¡ãªã¼ãã¼ããã¼ãçºçããå ´åã¯ãå¼·å¶çã«ãããã¡ã®åãè©°ããè¡ã£ã¦ãã¾ãã +<p> + +ã以ä¸ã«ãstrncpy_s()ã®ä½¿ç¨ä¾ã示ãã¾ããstrncpy_s()ã®ç¬¬2å¼æ°(numberOfElements)ã«ã¯ã<b>ãã«æå(\0)ãå«ãã</b>ãããã¡ãµã¤ãºãæå®ãã¾ããæ¸ãè¾¼ã¿å ã®ãããã¡ã¯3ãã¤ããããªãã®ã§ã第3å¼æ°(strSource)ã§æå®ãã5ãã¤ãã®ãã¼ã¿ã¯ã2ãã¤ãã«åãè©°ããããbuf[]ã«ã¯"he\0"ãæ ¼ç´ããã¾ãã + +<pre class=code> +char buf[3]; +strncpy_s(buf, sizeof(buf), "hello", _TRUNCATE); +</pre> + +ã次ã«ãstrncat_s()ã®ä½¿ç¨ä¾ã示ãã¾ããå½è©²é¢æ°ã¯ããã§ã«åå¨ããæååã«ãããã«æååãé£çµãããã®ã§ããããã第1å¼æ°(strDest)ã¯<b>ããªããnull-terminateãã¦ãã</b>å¿ è¦æ§ãããã¾ããstrncpy_s()ã®ç¬¬2å¼æ°(numberOfElements)ã«ã¯ããã«æå(\0)ãå«ãããããã¡ãµã¤ãºãæå®ãã¾ãã以ä¸ã®ä¾ã§ã¯ãæåã®é¢æ°ãå®è¡ããã¨ã5ãã¤ãï¼4æåï¼ãã«æåï¼ãæ ¼ç´ããã¾ãã2ã¤ãã®é¢æ°ãå®è¡ããéãæ®ã2ãã¤ããããªãã®ã§ã2æåã ããã³ãã¼ãããæçµçã«"TeraTe"ï¼4æåï¼2æåï¼ãã«æåï¼ã¨ãªãã¾ãã +ã +<pre class=code> +char str[7]; +str[0] = '\0'; +strncat_s(str, sizeof(str), "Tera", _TRUNCATE); +strncat_s(str, sizeof(str), "Term", _TRUNCATE); +</pre> + +ãæå¾ã«ã_snprintf_s()ã§ããç´ããããã®ã _snprintf() ã¨ããé¢æ°ã§ããããã®é¢æ°ã¯<b>null-terminateãããªã</b>ã±ã¼ã¹ãããããã使ç¨ç¦æ¢ã§ãã以ä¸ã«ã_snprintf_s()ã®ä½¿ç¨ä¾ã示ãã¾ãã以ä¸ã®ä¾ã§ã¯ãbuf[]ã«ã¯"ab\0"ãæ ¼ç´ããã¾ãã + +<pre class=code> +char buf[3]; +_snprintf_s(buf, sizeof(buf), _TRUNCATE, "abcdef"); +</pre> + + +<hr> + + + +<h2><a name="compatibility">å¤ããã¼ã¸ã§ã³ã®Windowsã¨ã®äºææ§ç¶æ</a></h2> + +<h3>ãã¤ãããã¯ãã¼ãã£ã³ã°</h3> + +ãWindowsã®ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã¯ãåä¸ã®ãã¤ããªãã¡ã¤ã«ãå¤æ´ãããã¨ãªããæ°æ§ã®ãã¼ã¸ã§ã³ã®Windowsä¸ã§èµ·åã§ããããã«ããããã«ã¯ãã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã å´ã§ã®å·¥å¤«ãå¿ è¦ã§ãã<br> +ããã¨ãã°ãWindows2000ã§å°å ¥ããã SetLayeredWindowAttributes() APIãç´æ¥å¼ã³åºãã¨ãWindowsNT4.0ã98ãªã©ã§ã¯ã¢ããªã±ã¼ã·ã§ã³ã®èµ·åã«å¤±æããããã«ãªãã¾ãããã®ãããæ°ããAPIãå¼ã³åºãã¨ãã¯ãLoadLibrary()ã使ã£ã¦åçãã¼ãããããã«ãã¾ãã<br> + +<pre class=code> +static BOOL MySetLayeredWindowAttributes(HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags) +{ + typedef BOOL (WINAPI *func)(HWND,COLORREF,BYTE,DWORD); + static HMODULE g_hmodUser32 = NULL; + static func g_pSetLayeredWindowAttributes = NULL; + + if (g_hmodUser32 == NULL) { + g_hmodUser32 = LoadLibrary("user32.dll"); + if (g_hmodUser32 == NULL) + return FALSE; + + g_pSetLayeredWindowAttributes = + (func)GetProcAddress(g_hmodUser32, "SetLayeredWindowAttributes"); + } + + if (g_pSetLayeredWindowAttributes == NULL) + return FALSE; + + return g_pSetLayeredWindowAttributes(hwnd, crKey, + bAlpha, dwFlags); +} +</pre> + +ããã¡ãã¡ãæã§é¢æ°ãããã¿ã¤ããæ¸ãã¦ããã®ã¯é¢åã§ããå ´åã¯ããDLLã®é 延èªã¿è¾¼ã¿ãã¨ããããã¿ãå©ç¨ããã¨ãä¸è¨ã®ãããªæé ã¯ä¸è¦ã§ãããããªããé¢æ°ãå¼ã³åºããã¨ãã§ãã¾ãããã¤ã¬ã¯ãã«å¼ã³åºãããé¢æ°ãããå ´åããããå¤ãWindowsã§ã¯ãµãã¼ãããã¦ããªããã®ã§ãããªãã°ãVisual Studioã®ããã¸ã§ã¯ãè¨å®ã§ããDLLã®é 延èªã¿è¾¼ã¿ãã«è©²å½ããDLLãæå®ãã¦ããã¾ãã + + +<h3>Windows 95</h3> + +Visual Studio 2005ã«ãªã£ã¦ãããWindows 95ã®ãµãã¼ããæã¡åããã¾ããããã£ã¦ãå¿ ç¶çã«Visual Studio 2005ã§ãã«ããããã¤ããªã¯ãWindows 95ã§ã¯åããªããã¨ã«ãªãã¾ããåèã¾ã§ã«ãVisual Studio 2008ã§ã¯ Windows 98 㨠NT4.0 ã2000 ã®ãµãã¼ããæã¡åãããVisual Studio 2010ã§ãåæ§ã§ããä»å¾ã¯ãWindows XPããµãã¼ããããªããªããã¨ãäºæ³ããã¾ãã<p> + +ç¾å¨ãTera Termã§ã¯Visual Studio 2005ã«ãããã«ãããã¦ãã¾ãããã¨ãã工夫ã«ãã Windows 95 ã§ãåä½ããããã«ãªã£ã¦ãã¾ãããã¡ãããMicrosoftéå ¬èªã®æ¹æ³ã§ãããããMicrosoftããã®æ£å¼ãªãµãã¼ãã¯åãããã¾ããã<br> +ãããããVisual Studio 2005 ã§ãã«ãããããã¤ããªã¯ãããã©ã«ã㧠IsDebuggerPresent é¢æ°ã«ãªã³ã¯ãã¦ãã¾ã£ã¦ãã¾ããå½è©²é¢æ°ã¯ Windows 98 ãããµãã¼ããããAPIã§ãããããWindows 95ã§ã¯ãªã³ã¯ã¨ã©ã¼ã¨ãªãããã§ãã<br> +ããã§ãWindows 95ã«ããã¦ãããã¼ã§ IsDebuggerPresent é¢æ°ã®ã·ã³ãã«ãå®ç¾©ãã¦ãããã°ãããã°ã©ã ã®èµ·åæã«ã¨ã©ã¼ã«ãªããã¨ã¯ãªããªãã®ã§ãã詳細ã¯"comapt_w95.h"ããããåç §ãã¦ãã ããã<br> + +<ul> + <li><a href="https://osdn.jp/projects/ttssh2/svn/view/trunk/teraterm/common/compat_w95.h?view=markup&root=ttssh2">comapt_w95.h</a></li> +</ul> + +<hr> + + +<h2><a name="debug">ãããã°ææ³</a></h2> +<h3>debug printf</h3> +ãWindowsã¢ããªã±ã¼ã·ã§ã³ã§ã¯ printf() ã使ãã¾ãããæ¨æºåºåãã©ãã«ãå²ãå½ã¦ããã¦ããªãããã§ããAllocConsole()ã¨freopen()ã使ãã°ãWindowsã¢ããªã±ã¼ã·ã§ã³ã«ããã¦ã printf() ãå©ç¨ãããã¨ãã§ãã¾ãã<br> +ãOutputDebugString()ã¨ããAPIãããã¾ãããã㯠Visual Studio ã®ãããã°ã³ã³ã½ã¼ã«ã«ã¡ãã»ã¼ã¸åºåãããã¨ãã§ããé¢æ°ã§ããå½è©²APIã¯ã"Debug build"ããã³"Release build"ã«é¢ä¿ãªãããããã¬ãåå¨ããã°ãã¡ãã»ã¼ã¸ãéä¿¡ãã¾ããããã«ã Visual Studioããªãã¨ãã<a href="http://www.vector.co.jp/soft/win95/prog/se046776.html">DBCon</a>ã®ãããªãã¼ã«ã使ãã°ãã¢ããªã±ã¼ã·ã§ã³ã®åä½èµ·åã«ããã¦ããOutputDebugString()ã«ããã¡ãã»ã¼ã¸ãæ¾ããã¨ãã§ãã¾ãã<br> +ãTera Termã§ã¯ãå¯å¤é·å¼æ°ãæ±ããããã«ã©ããã¼é¢æ°ãç¨æãã¦ãã¾ãã +ã +<pre class=code> +void OutputDebugPrintf(char *fmt, ...) { + char tmp[1024]; + va_list arg; + va_start(arg, fmt); + _vsnprintf(tmp, sizeof(tmp), fmt, arg); + OutputDebugString(tmp); +} +</pre> + +<h3>memory leak</h3> +ãmalloc()çã«ãã確ä¿ãããã¼ãã¡ã¢ãªã®è§£æ¾ãå¿ãã«ãããã¡ã¢ãªãªã¼ã¯ãããèªåã§æ¤åºããããã¿ã Visual Studio ã«ã¯ç¨æããã¦ãã¾ããããã°ã©ã ã®èµ·åæã«ã以ä¸ã®ã³ã¼ããæ¿å ¥ããã ãã§ããããã°ã©ã ã®çµäºæã«ã解æ¾ãã¦ããªããã¼ãã¡ã¢ãªãããã°ã Visual Studio ã®ãåºåãã¦ã£ã³ãã¦ã«ãªã¹ãã¢ããããã¾ãã + +<pre class=code> +#ifdef _DEBUG + _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); +#endif +</pre> + +ããªããWindowsã®ããã«ä»®æ³è¨æ¶ã§åãã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã«é¢ãã¦ã¯ãããã°ã©ã ã®çµäºæã«è§£æ¾ããã¦ããªãã¡ã¢ãªãåå¨ããå ´åãOSãé¢åãè¦ã¦ãã¡ã¢ãªã解æ¾ãããããã«ãªã£ã¦ãã¾ãã + +<hr> + + +<h2><a name="thread">ãã«ãã¹ã¬ãã</a></h2> +ãWindowsã®ã¢ããªã±ã¼ã·ã§ã³ã¯ãã«ãã¹ã¬ããã§è¨è¨ããããã¨ãã»ã¨ãã©ã§ãããWindows 3.1ãã95ã®æ代ã§ã¯ãã¾ãä¸è¬çã§ã¯ããã¾ããã§ããããã®ãããå ã Tera Termã¯ãã«ãã¹ã¬ããåããã¦ãã¾ãããã½ã¼ã¹ã³ã¼ããè¦ãã¨åããããã«ãã°ãã¼ãã«å¤æ°ãå¤ç¨ããã¦ãããããã»ã¨ãã©ã®å¦çãã¹ã¬ããã»ã¼ãã§ã¯ããã¾ããã<br> +ããã ããä¸é¨ã®å¦çã«ããã¦ã¯ _beginthreadex() API ã使ã£ã¦ã¹ã¬ãããçæããã¦ãã¾ãã以ä¸ã«ã¹ã¬ããçæç®æã示ãã¾ãã + +<p> +<div align=center><b>Tera Term</b></div> +<table border=1 align=center> +<tr> + <th>çæç®æ</th> + <th>ã½ã¼ã¹ãã¡ã¤ã«</th> +</tr> + +<tr> + <td>ã·ãªã¢ã«æ¥ç¶</td> + <td>CommStart()#commlib.c</td> +</tr> + +<tr> + <td>TELNETãã¼ãã¢ã©ã¤ã</td> + <td>TelStartKeepAliveThread()#telnet.c</td> +</tr> + +<tr> + <td>IPv4/v6ã½ã±ããã®çæ</td> + <td>WSAAsyncGetAddrInfo()#WSAAsyncGetAddrInfo.c</td> +</tr> +</table> + +<br> + +<div align=center><b>TTSSH</b></div> +<table border=1 align=center> +<tr> + <th>çæç®æ</th> + <th>ã½ã¼ã¹ãã¡ã¤ã«</th> +</tr> + +<tr> + <td>SSHãã¼ãã¢ã©ã¤ã</td> + <td>start_ssh_heartbeat_thread()#ssh.c</td> +</tr> + +<tr> + <td>SCPéä¿¡å¦ç</td> + <td>SSH2_scp_tolocal()#ssh.c</td> +</tr> + +<tr> + <td>SCPåä¿¡å¦ç</td> + <td>SSH2_scp_fromremote()#ssh.c</td> +</tr> +</table> +</p> + +ããã§ã«èª¬æããã¨ãããTera Termï¼TTSSHå«ãï¼ã®å é¨å¦çã¯ã¹ã¬ããã»ã¼ãã§ã¯ãªããããã·ã³ãã«ã«ã¹ã¬ãããçæããã¹ã¬ããå ããéåä¿¡å¦ççãè¡ããã¨ããã¨ãä¸å ·åãçºçãã¦ãã¾ãã¾ãã<br> +ãTELNETãSSHã®ãã¼ãã¢ã©ã¤ãï¼ãã¼ããã¼ãï¼å¦çãå®ç¾ããããã«ã¯ãå®æçã«ãã±ããã®éä¿¡å¦çãè¡ãå¿ è¦ãããã¾ããã¾ããSCPã«ãããã¡ã¤ã«éåä¿¡ãè¡ãéã«ããã¦ãããã¡ã¤ã«ã®éä¿¡å¦çä¸ã«ãã¦ã¼ã¶ã®ç«¯æ«æä½ã®ã¬ã¹ãã³ã¹ãè½ã¨ããªãããã«ãã¹ã¬ããã®ä½¿ç¨ãä¸å¯æ¬ ã§ãã<br> +ãããã§ããã«ãã¹ã¬ããã使ãå ´åã¯ãã¢ã¼ãã¬ã¹ãã¤ã¢ãã°ãé表示ã§ä½æãããã¨ã«ã_beginthreadex() APIã§ã¹ã¬ãããçæããå®éã®å¦çã¯ã¢ã¼ãã¬ã¹ãã¤ã¢ãã°ã«è¡ãããã¨ããæ段ã使ç¨ãã¦ãã¾ãããã®ããã¿ã«ããããã«ãã¹ã¬ããã使ããªãããã¹ã¬ããã»ã¼ããä¿ã¤ãã¨ãã§ãã¾ãã以ä¸ã«ãã³ã¼ãä¾ã示ãã¾ãã<br> + +<pre class=code> +#define WM_SEND_HEARTBEAT (WM_USER + 1) + +static LRESULT CALLBACK telnet_heartbeat_dlg_proc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) +{ + + switch (msg) { + case WM_INITDIALOG: + return FALSE; + + case WM_SEND_HEARTBEAT: + TelSendNOP(); + return TRUE; + break; + + case WM_COMMAND: + break; + + case WM_CLOSE: + return TRUE; + + case WM_DESTROY: + return TRUE; + + default: + return FALSE; + } + return TRUE; +} + +static unsigned _stdcall TelKeepAliveThread(void *dummy) { + static int instance = 0; + + if (instance > 0) + return 0; + instance++; + + while (cv.Open && nop_interval > 0) { + if (time(NULL) >= cv.LastSendTime + nop_interval) { + SendMessage(keepalive_dialog, WM_SEND_HEARTBEAT, 0, 0); + } + + Sleep(100); + } + instance--; + return 0; +} + +void TelStartKeepAliveThread() { + unsigned tid; + + if (ts.TelKeepAliveInterval > 0) { + nop_interval = ts.TelKeepAliveInterval; + + keepalive_dialog = CreateDialog(hInst, MAKEINTRESOURCE(IDD_BROADCAST_DIALOG), + HVTWin, (DLGPROC)telnet_heartbeat_dlg_proc); + + keepalive_thread = (HANDLE)_beginthreadex(NULL, 0, TelKeepAliveThread, NULL, 0, &tid); + if (keepalive_thread == (HANDLE)-1) { + nop_interval = 0; + } + } +} +</pre> + + + +<hr> + + +<h2><a name="dde">DDEã«ããããã»ã¹ééä¿¡</a></h2> + <h3>æ¦è¦</h3> +ãDDE(Dynamic Data Exchange)ã®èªçã¯ã1987å¹´ã®Windows 2.0ã¾ã§ã«é¡ãã¾ããDDEã¯ããã»ã¹ééä¿¡ãè¡ãããã®ããã¿ã§ãããç¾å¨ã§ã¯ã¬ã¬ã·ã¼ãªæ¹å¼ã§ãããã»ã¨ãã©ã®ã¢ããªã±ã¼ã·ã§ã³ã§ã¯å©ç¨ããã¦ãã¾ãããWindowsã«ãããããã»ã¹ééä¿¡ã¨ããã°ãã¡ã¼ã«ã¹ããããååä»ããã¤ããOLEãªã©ãå®çªã§ãã<br> +ããã¤ã¦ã¯ãDDEã«ããããã»ã¹éã®éä¿¡ãã¼ã¿ããã£ããã£ãããã¨ãã§ãããDDEã¹ãã¤ã(DDESPY.EXE)ã¨ãããã¼ã«ãVisual Studioã«ä»å±ãã¦ãã¾ããããç¾å¨ã®Visual Studioã«ã¯ãã¯ãå«ã¾ãã¦ãã¾ããã<br> +ãDDEã«é¢ãããªãã¡ã¬ã³ã¹ã¯MSDNã©ã¤ãã©ãªããåç §ãããã¨ãã§ãã¾ãã<br> + +<p> +<ul> + <li><a href="http://msdn2.microsoft.com/en-us/library/ms648711(VS.85).aspx">Dynamic Data Exchangeï¼MSDNã©ã¤ãã©ãªï¼</a></li> + <li><a href="http://msdn2.microsoft.com/en-us/library/ms648712(VS.85).aspx">Dynamic Data Exchange Management Libraryï¼MSDNã©ã¤ãã©ãªï¼</a></li> +</ul> +</p> + +ãDDEã¯ãTCPã«ãããããã¯ã¼ã¯éä¿¡ã¨ä¼¼ã¦ããããµã¼ãã¨ã¯ã©ã¤ã¢ã³ãéãä¸å¯¾ä¸ã§æ¥ç¶ããéä¿¡ãè¡ãã¾ããã¢ããªã±ã¼ã·ã§ã³ãDDEã«ããéä¿¡ãè¡ãããã«ãDDEML(Dynamic Data Exchange Management Library)ã¨å¼ã°ããã©ã¤ãã©ãªãWin32 APIã¨ãã¦æä¾ããã¦ãã¾ãã<br> +ãDDEéä¿¡ãè¡ãããã«ãä¸æ¹ããµã¼ãã¨ãªããä»æ¹ãã¯ã©ã¤ã¢ã³ãã«ãªãå¿ è¦ãããã¾ããã¾ããéä¿¡ã®ã»ãã·ã§ã³ãã·ã¹ãã å ¨ä½ã§ã¦ãã¼ã¯ã¨ããããã«ãèå¥æ å ±ãå¿ è¦ã§ããTCPéä¿¡ã§ã¯IPã¢ãã¬ã¹ã¨ãã¼ãçªå·ã使ããã¾ãããDDEéä¿¡ã§ã¯ããµã¼ãã¹åãã¨ããããã¯åãã®çµã¿åããã使ããã¾ããTera Termã§ã¯ãµã¼ãã¹åã¯"TERATERM"ã¨ããæååã使ããããããã¯åã¯Tera Termæ¬ä½ã®ã¦ã£ã³ãã¦ãã³ãã«(HVTWin)ã®16é²æ°å¤ãæåååãããã®ã使ããã¦ãã¾ãã<br> +ããã®ãããªããã¿ã«ãªã£ã¦ããããã«ããã¯ãã¹ã¯ãªããããã¾ã£ããå¥ã®Tera Termã¸ã³ãã³ããéããã¨ã¯ã§ãã¾ããã<br> + +<div align="center"> +<img src="image/dde.png" width=720 height=540> +</div> + +ãä¸å³ã«ç¤ºãããã«ãTera Termæ¬ä½("ttermpro.exe")ãDDEãµã¼ãã¨ãªãããã¯ãããã°ã©ã ("ttpmacro.exe")ãDDEã¯ã©ã¤ã¢ã³ãã¨ãªãã¾ããDDEã§ã¯ãããã¨ããããã¼ã¿ã®å¡ã®ãã¨ãããã©ã³ã¶ã¯ã·ã§ã³ãã¨å¼ã³ã¾ãããã©ã³ã¶ã¯ã·ã§ã³ã«ã¯ä»¥ä¸ã«ç¤ºããããªä½ç¨®é¡ããããã¾ããã¿ã¤ãã¯"ddeml.h"ã§ãã¯ãå®ç¾©ããã¦ãã¾ãã<br> + +<p> +<table border=1 align=center> +<tr> + <th>ã¿ã¤ã</th> + <th>æå³</th> +</tr> + +<tr> + <td>XTYP_ADVREQ</td> + <td>DDEãµã¼ããã¯ã©ã¤ã¢ã³ãã¸ãã¼ã¿ãéãããã«ãDDEãµã¼ããèªåèªèº«ã«éãã¡ãã»ã¼ã¸ã</td> +</tr> + +<tr> + <td>XTYP_POKE</td> + <td>DDEã¯ã©ã¤ã¢ã³ããããµã¼ãã¸ãã¼ã¿ãéãã</td> +</tr> + +<tr> + <td>XTYP_ADVSTART</td> + <td>DDEãµã¼ãã«å¯¾ãã¦ã¢ããã¤ãºã«ã¼ãã®éå§ãæ示ããã</td> +</tr> + +<tr> + <td>XTYP_ADVDATA</td> + <td>DDEã¯ã©ã¤ã¢ã³ãã«ãã¼ã¿ãå®æçã«éãã</td> +</tr> + +<tr> + <td>XTYP_EXECUTE</td> + <td>DDEãµã¼ãã«æååãéããä½ããã®å¦çããµã¼ãã«æ示ããã</td> +</tr> + +</table> +</p> + +ãDDEéä¿¡ã®ç¹å¾´ã¨ãã¦ãã¢ããã¤ãºã«ã¼ã(advise loop)ã¨ããæ¦å¿µãããã¾ããDDEãµã¼ããã¢ããã¤ãºã«ã¼ãã«å ¥ãã¨ãã¯ã©ã¤ã¢ã³ãã¯ãµã¼ãããå®æçã«ãã¼ã¿ãåãåãç¶ãããã¨ãã§ãã¾ããTera Termã§ã¯ããªã¢ã¼ããã¹ãããã®åä¿¡ãã¼ã¿ãããã¯ãããã°ã©ã ã¸æ¸¡ãããã«ãã¢ããã¤ãºã«ã¼ãã使ããã¦ãã¾ãã<br> + + <h3>ã©ã¤ãã©ãª</h3> +ãTera Termã§ä½¿ããã¦ããDDEMLã«ã¤ãã¦ã以ä¸ã«ç¤ºãã¾ãã +ã +ã +<p> +<table border=1 align=center> +<tr> + <th>é¢æ°å</th> + <th>æ©è½</th> +</tr> + +<tr> + <td>DdeInitialize</td> + <td>DDEãåæåããã³ã¼ã«ããã¯é¢æ°ãç»é²ãããåæåã§ããã¨ã¤ã³ã¹ã¿ã³ã¹ãè¿ãã</td> +</tr> + +<tr> + <td>DdeCreateStringHandle</td> + <td>æååãªãã©ã«ãããã³ãã«ãä½æããããã³ãã«ã¯ãµã¼ãã¨ã¯ã©ã¤ã¢ã³ãã®éä¿¡ç¨ã«ä½¿ãããã</td> +</tr> + +<tr> + <td>DdeNameService</td> + <td>ã¤ã³ã¹ã¿ã³ã¹ã¨ãµã¼ãã¹å("TERATERM")ããµã¼ãã«ç»é²ãããç»é²å¾ãXTYP_REGISTERãã©ã³ã¶ã¯ã·ã§ã³ãã¯ã©ã¤ã¢ã³ãã¸éããããç»é²è§£é¤ããéã«ã使ãããã</td> +</tr> + +<tr> + <td>DdeCmpStringHandles</td> + <td>2ã¤ã®æååãã³ãã«ãæ¯è¼ããã</td> +</tr> + +<tr> + <td>DdeClientTransaction</td> + <td>ã¯ã©ã¤ã¢ã³ããããµã¼ãã¸ãã©ã³ã¶ã¯ã·ã§ã³ãéããã¨ãã§ããããã©ã³ã¶ã¯ã·ã§ã³ã¿ã¤ãã¨ãã¦ãXTYP_REQUESTã»XTYP_EXECUTEã»XTYP_ADVSTARTã»XTYP_POKEãªã©ãæå®ã§ããããµã¼ãããã®ACKãå¾ ã¤ã¾ã§ã®ã¿ã¤ã ã¢ã¦ãæéãæå®ãããã¨ãã§ããTera Termã§ã¯ã»ã¨ãã©"1000ããªç§ï¼1ç§ï¼"ãæå®ããã¦ããããã ããACKã確èªããã±ã¼ã¹ã«ããã¦ã¯"5000ããªç§ï¼5ç§ï¼"ãæå®ããã¦ããã</td> +</tr> + +<tr> + <td>DdeAccessData</td> + <td>DDEãã³ãã«ããå®éã®ãã¼ã¿ã¸ã®ãã¤ã³ã¿ãåå¾ããããã¼ã¿ã®åãåºããçµãã£ãããDdeUnaccessData()ãå¼ã³åºããã¨ã</td> +</tr> + +<tr> + <td>DdeCreateDataHandle</td> + <td>DDEãªãã¸ã§ã¯ããä½æãããã³ãã«ãè¿ããDDEãµã¼ãã®ã¢ããã¤ãºã«ã¼ãããXTYP_REQUESTãã©ã³ã¶ã¯ã·ã§ã³åä¿¡æã«ãDDEã¯ã©ã¤ã¢ã³ãã¸ãã¼ã¿ãéãããã«ä½¿ããã¦ããã</td> +</tr> + +<tr> + <td>DdeGetData</td> + <td>DDEãªãã¸ã§ã¯ããããããã¡ã¸ã³ãã¼ããã</td> +</tr> + +<tr> + <td>DdeDisconnect</td> + <td>DDEéä¿¡ãçµäºãã</td> +</tr> + +<tr> + <td>DdePostAdvise</td> + <td>DDEãµã¼ãå´ã§ä½¿ãããé¢æ°ã§ãèªåèªèº«ã« XTYP_ADVREQ ãã©ã³ã¶ã¯ã·ã§ã³ãéãã</td> +</tr> + +</table> +</p> + + + + <h3>å®è£ </h3> +ãDDEãµã¼ãå´ã®å®è£ ã«ã¤ãã¦è¦ã¦ããã¾ããTera Termæ¬ä½("ttermpro.exe")ãDDEãµã¼ãã¨ãªããããªããDDEãµã¼ãããèµ·åããã¾ãããã¯ãããã°ã©ã ("ttpmacro.exe")ããç´æ¥ãã¯ãã¹ã¯ãªãããå®è¡ãããã±ã¼ã¹ã«ããã¦ãã"connect"ãã¯ãã«ããDDEæ¥ç¶ãããªãã¨ãéä¿¡ãéå§ã§ãã¾ããã<br> +ãTera Termã®Controlã¡ãã¥ã¼ããMacroãå¼ã³åºããå ´åãRunMacro()#ttdde.c ãã³ã¼ã«ããã¾ãã<br> +ãHVTWinã¦ã£ã³ãã¦ãã³ãã«ãããããã¯åï¼8ãã¤ãï¼ãä½æããDDEã®åæåã¨ãµã¼ãã®ç»é²ãè¡ãã¾ããã¾ãããã®ã¿ã¤ãã³ã°ã§DDEãããã¡ï¼1KBï¼ãä½æãã¦ãã¾ãããã®å¾ã"ttpmacro.exe"ã /D= ãªãã·ã§ã³ã§ãããã¯åã渡ãã¤ã¤ãèµ·åããã¾ãã<br> +ã +<pre class=code> + SetTopic(); + if (! InitDDE()) return; + strncpy_s(Cmnd, sizeof(Cmnd),"TTPMACRO /D=", _TRUNCATE); + strncat_s(Cmnd,sizeof(Cmnd),TopicName,_TRUNCATE); +</pre> + +ãDDEãµã¼ãã«ãDDEã¯ã©ã¤ã¢ã³ããããã©ã³ã¶ã¯ã·ã§ã³ãéããã¦ããã¨ãã¯ãDdeCallbackProcã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºããã¾ããã³ã¼ã«ããã¯é¢æ°ã¯ãDdeInitialize()ã§DDEã®åæåãè¡ãã¨ãã«ç»é²ããã¾ãã<br><br> +ã +ã次ã«ãDDEã¯ã©ã¤ã¢ã³ãã«ã¤ãã¦è¦ã¦ã¿ã¾ãããããã¯ãããã°ã©ã ã®èµ·åæãInitDDE()#ttmdde.c ãå¼ã³åºãããDDEã¯ã©ã¤ã¢ã³ãã¨ãã¦åæåãè¡ããã¾ããDDEã®åæåã¯ãDdeInitialize()ã§è¡ãããåæã«DdeCallbackProcã³ã¼ã«ããã¯é¢æ°ãç»é²ããã¾ããDDEãµã¼ãããå±ãããã©ã³ã¶ã¯ã·ã§ã³ã¯ãã³ã¼ã«ããã¯é¢æ°ã§å¦çããã¾ãã<br> +ãDDEéä¿¡ãå§ããããã«ã¯ãDdeConnect()ãå¼ã³åºãããµã¼ãã¨æ¥ç¶ããå¿ è¦ãããã¾ãã次ã«ã"ttpmacro.exe"ã®ã¦ã£ã³ãã¦ãã³ãã«(HWin)ããµã¼ãã¸éç¥ããããã«ãXTYP_EXECUTEãã©ã³ã¶ã¯ã·ã§ã³ã§éãã¾ããæå¾ã«ãXTYP_ADVSTARTãã©ã³ã¶ã¯ã·ã§ã³ããµã¼ãã¸éããã¢ããã¤ãºã«ã¼ããéå§ãã¾ãã<br> + +<pre class=code> + ConvH = DdeConnect(Inst, Service, Topic, NULL); + if (ConvH == 0) return FALSE; + Linked = TRUE; + + Cmd[0] = CmdSetHWnd; + w = HIWORD(HWin); + Word2HexStr(w,&(Cmd[1])); + w = LOWORD(HWin); + Word2HexStr(w,&(Cmd[5])); + + DdeClientTransaction(Cmd,strlen(Cmd)+1,ConvH,0, + CF_OEMTEXT,XTYP_EXECUTE,1000,NULL); + + DdeClientTransaction(NULL,0,ConvH,Item, + CF_OEMTEXT,XTYP_ADVSTART,1000,NULL); +</pre> + + + <h3>ãããã¡ã®ç®¡ç</h3> +ããã¯ãããã°ã©ã ã§ã¯"wait"ã³ãã³ãçã§ããªã¢ã¼ããã¹ãããéããã¦ãããã¼ã¿ãç£è¦ããããã®æ©è½ãç¨æããã¦ãã¾ãããã®æ©è½ãå®ç¾ããããã«ã¯ãTera Termæ¬ä½ã¨ãã¯ãããã°ã©ã ã®ããããã«ããã¦ããããã¡ãç¨æããå¿ è¦ããããããã»ã¹ééä¿¡ï¼DDEãã©ã³ã¶ã¯ã·ã§ã³ï¼ã«ãããTera Termæ¬ä½ãããã¯ãããã°ã©ã ã¸ãªã¢ã¼ããã¹ãããã®åä¿¡ãã¼ã¿ãéããªããã°ãªãã¾ããã<br> + +<div align="center"> +<img src="image/dde_flowcontrol.png" width=720 height=540> +</div> + +ãã¾ããTera Termæ¬ä½ã«ããããªã¢ã¼ããã¹ãããã®TCPãã±ããåä¿¡ã¯ãã¢ã¤ãã«ã«ã¼ã OnIdle()#teraterm.cpp ã«ã¦è¡ããã¾ããOnIdle()ããå¼ã³åºããã CommReceive()#commlib.c ã«ããã¦ãTCPãã±ãããã¼ã¿ããããã¡(cv->InBuff[])ã«æ ¼ç´ãã¾ãããã®ãããã¡ã¯ 1KB ã®å¤§ãããæã¡ã¾ããã¾ãããªã³ã°ãããã¡ã§ã¯ãªãããããããã¡ãã«ã«ãªã£ãå ´åã¯ãTCPãã±ããã®åä¿¡ããã¾ããããã ãããããã¡ãã«ç¶æ ãé·ãç¶ãã¨ãWindowsã«ã¼ãã«å ã«TCPãã±ãããæºã¾ã£ã¦ããããããã¯ãªã¢ã¼ããã¹ãããã®ãã±ãããåä¿¡ã§ããªããªãå¯è½æ§ãããã¾ãã<br> +ãã¨ã¹ã±ã¼ãã·ã¼ã±ã³ã¹ã®è§£æå¦çãè¡ãéç¨ã§ãããã°æ¡åããããã¯ãå®è¡ããè¡ã£ã¦ããå ´åã¯ãLogPut1()ãå¼ã³åºãããDDEãããã¡(cv.LogBuf[])ã¸åä¿¡ãã¼ã¿ãæ ¼ç´ããã¾ããããªãã¡ããã°æ¡åã¨ãã¯ãå®è¡ã«ããããããã¡ã¯å ±éã§ãããã®ãããã¡ã¯1KBã®å¤§ãããæã¤ãªã³ã°ãããã¡ã§ããããããã¡ãã«ã«ãªã£ãå ´åã¯ãæå¤ã®ãã¼ã¿ããä¸æ¸ãããã¦ããã¾ãã<br> +ããªãããã¤ããªã¢ã¼ãã§ãã°æ¡åã«ããã¦ã¯ãcv.BinBuf[] ã¨ããå¥ã®ãããã¡ã¸ãã¼ã¿ãæ ¼ç´ããã¾ãã®ã§ãDDEãããã¡ã¨ã¯å¥ç©ã§ããè¨ãæããã¨ããã¤ããªã¢ã¼ãã«ããããã¼ã¿ãDDEéä¿¡ããããã¨ã¯ã§ããªãã¨ãããã¨ã§ããåç´ãª"wait"ã³ãã³ãã§ã¯ããã¤ããªãã¼ã¿ï¼å¶å¾¡ã³ã¼ããªã©ï¼ãå¾ ã¤ãã¨ã¯ã§ãã¾ããã<br> +ãTera Termæ¬ä½ã®DDEãããã¡ã®ãã¼ã¿ã¯ãã¨ã¹ã±ã¼ãã·ã¼ã±ã³ã¹ã®è§£æå¦çãå®äºå¾ãDDEAdv()#ttdde.c ãããã«å¼ã³åºãããèªåèªèº«ï¼DDEãµã¼ãï¼ã¸ XTYP_ADVREQ ãã©ã³ã¶ã¯ã·ã§ã³ãéãã¾ããXTYP_ADVREQãåãåã£ãããDDEã³ã¼ã«ããã¯é¢æ° DdeCallbackProc() ãå¼ã³åºããããã¯ãããã°ã©ã ã¸ã®ãã¼ã¿éä¿¡ãè¡ãã¾ããããã§ã¢ããã¤ãºã«ã¼ãã使ããã¦ãã¾ãã<br> + +<div align="center"> +<img src="image/dde_buffer.png" width=720 height=540> +</div> + +ãã¢ããã¤ãºã«ã¼ãã«ããDDEãµã¼ããããã¼ã¿ãéããã¦ããã¨ãDDEã¯ã©ã¤ã¢ã³ãã§ãããã¯ãããã°ã©ã ã«ããã¦ã¯ãXTYP_ADVDATAãã©ã³ã¶ã¯ã·ã§ã³ãDDEã³ã¼ã«ããã¯é¢æ° DdeCallbackProc()#ttmdde.c ã«ããå¦çããã¾ãã<br> +ã +ããªããTera Termæ¬ä½ã«ããã¦ãDDEéä¿¡ç¨ã®ãããã¡ã¨ããã°æ¡åç¨ã®ãããã¡ã¯ cv.LogBuf[] ã§å ±æããã¦ãã¾ãããããã¡ã®å é ã¨ãã¼ã¿ãµã¤ãºã表ãã¤ã³ããã¯ã¹ã¯ãDDEéä¿¡ã®å ´åã¯"DStart"ã¨"Dcount"ããã°æ¡åã®å ´åã¯"LStart"ã¨"Lcount"ã¨åºå¥ããã¦ãã¾ããå®éã«ã¯ã1ã¤ã®ãããã¡ãå ±æãã¦ãããããªã®ã§ãããããã®ã¤ã³ããã¯ã¹ãé£ãéãã¨ã誤åä½ããåå ã¨ãªãããã常ã«åæãåã£ã¦ãããã¨ã«ãªãã¾ãã<br> +<hr> + + +<h2><a name="ttssh">TTSSHã«ããSSHã®è¨è¨ã¨å®è£ </a></h2> + <h3>æ¦è¦</h3> +ããªãªã¸ãã«ã®TTSSHã¯<a href="http://www.cs.cmu.edu/People/roc/">Robert O'Callahan</a>æ°ï¼ç¾å¨ã¯<a href="http://weblogs.mozillazine.org/roc/">Mozilla hacker</a>ã¨ãã¦æ´»èºï¼ã«ããéçºããããã©ã°ã¤ã³ã§ããSSH1ã¸å¯¾å¿ãã¦ããããã¼ããã©ã¯ã¼ãã£ã³ã°ãzlibã«ãããã±ããå§ç¸®ããµãã¼ããã¦ãã¾ãããTTSSHã¯ãTera Termãã»ãã¥ã¢éä¿¡ã«å¯¾å¿ãããããã®ãã©ã°ã¤ã³ã§ãã£ãããã«ãSCPãSFTPçã«ã¯æªå¯¾å¿ã§ããããªãªã¸ãã«Tera Termã1998å¹´ã«éçºåçµå¾ãã2001å¹´ããã¾ã§ã¡ã³ããã³ã¹ãç¶ãããã¦ãã¾ããã<br> +ãTTSSHã®SSH2対å¿ãå®ç¾ããããã«ãTeraTerm Projectã«ãã2004å¹´ããè¨è¨ã¨å®è£ ãå§ãããã¾ããã3å¹´ã®æ³æãããã¦ãã»ã¼SSH2ãããã³ã«ã®ãã«ãµãã¼ããå®ç¾ãã¾ãããç¾å¨ã§ã¯SCPã¸ã対å¿ãã¦ãã¾ããå°æ¥çã«ã¯SFTPã¸ã対å¿ãããããããã¾ããã<br> +ãååãTTSSHã®å®è£ ã¯<a href="http://www.openssh.com/">OpenSSH</a>ãåèã«ãã¦ãã¾ããä¸é¨ãã³ã¼ãããã®ã¾ã¾æµç¨ãã¦ããã¨ãããããã¾ãããã ããOpenSSHã¯UNIXã®ã³ãã³ãã©ã¤ã³åãã«è¨è¨ããã¦ãããããTera Termã®ãããªWindowsã¢ããªã±ã¼ã·ã§ã³ã«ã¯ãã®ã¾ã¾é©åããªãç®æãå¤ãããã¬ã¼ã ã¯ã¼ã¯ã¨ãã¦ã¯OpenSSHã¨å¤§ããç°ãªã£ããã®ã¨ãªã£ã¦ãã¾ãã<br> + + + <h3>SSHãããã³ã«</h3> +ãSSH(Secure Shell)ã¯ããã¼ã¸ã§ã³1ï¼å³å¯ã«ã¯1.5ï¼ã¨ãã¼ã¸ã§ã³2ãåå¨ããç¥ãã¦"SSH1"ããã³"SSH2"ã¨å¼ã°ãã¾ãããããã®ãã¼ã¸ã§ã³éã«ã¯ãããã³ã«ä»æ§ã¨ãã¦ã®äºææ§ã¯ããã¾ãããSSH1ã«ã¯ã»ãã¥ãªãã£ä¸ã®åé¡ãããããã«ãç¾å¨ã¯ã»ã¨ãã©å©ç¨ããã¾ããã<br> +ãSSH2ãããã³ã«ã®ä»æ§ã«é¢ãã¦ã¯ãRFCåããã¦ãã¾ãã +ã +<p> +<ul> + <li><a href="http://www.ietf.org/rfc/rfc4250.txt">RFC4250: The Secure Shell (SSH) Protocol Assigned Numbers</a></li> + <li><a href="http://www.ietf.org/rfc/rfc4251.txt">RFC4251: The Secure Shell (SSH) Protocol Architecture</a></li> + <li><a href="http://www.ietf.org/rfc/rfc4252.txt">RFC4252: The Secure Shell (SSH) Authentication Protocol</a></li> + <li><a href="http://www.ietf.org/rfc/rfc4253.txt">RFC4253: The Secure Shell (SSH) Transport Layer Protocol</a></li> + <li><a href="http://www.ietf.org/rfc/rfc4254.txt">RFC4254: The Secure Shell (SSH) Connection Protocol</a></li> + <li><a href="http://www.ietf.org/rfc/rfc4255.txt">RFC4255: Using DNS to Securely Publish Secure Shell (SSH) Key Fingerprints</a></li> + <li><a href="http://www.ietf.org/rfc/rfc4256.txt">RFC4256: Generic Message Exchange Authentication for the Secure Shell Protocol (SSH)</a></li> + <li><a href="http://www.ietf.org/rfc/rfc4344.txt">RFC4344: The Secure Shell (SSH) Transport Layer Encryption Modes</a></li> + +</ul> +</p> + + + <h3>æ¥ç¶å¦ç</h3> +ãTTSSHã¯ãTera Termã®ä¸é¨ã®ã³ã¼ãã§ãããããããããã¯ã¼ã¯æ¥ç¶å¦çã¯Tera Termã¨TTSSHã®éãè¡ãæ¥ãããã¨ã«ãªããå¦çã®æµããè¤éã«ãªã£ã¦ãã¾ããã¾ããSSHãããã³ã«ãã®ãã®ã®ããã¼ãçç¥ãã¦ããªãã¨ãTTSSHã®ã·ã¼ã±ã³ã¹ã追ã£ã¦ããã®ãé£ãããªã£ã¦ãã¾ãã以ä¸ã«ããªã¢ã¼ããã¹ãã¸ã®æ¥ç¶ãè¡ãã¾ã§ã®ããã¼ã示ãã¾ãã<br> + +<div align="center"> +<img src="image/ssh.png" width=720 height=540> +</div> + + + <h3>éä¿¡ãã±ããå¦ç</h3> + SSH2ãããã³ã«ã«è¼ãã¦ããã±ããããµã¼ãã¸éãã¨ãã®ã³ã¼ãã¯ä»¥ä¸ã®ãããªæ¸ãæ¹ã¨ãªãã¾ããbegin_send_packet()ã®å¼ã³åºãã§ããpvar->ssh_state.outbuf + 12ããè¿ãå¤ã¨ãªããããããã¤ãã¼ãã表ãã¾ãããã¤ãã¼ãã¯ç´ç²ã«ãµã¼ãã¸éããããã¼ã¿ã®ãã¨ã§ããµã¤ãºãããã£ã³ã°çãå«ã¿ã¾ããã<br> + +<pre class=code> + buffer_t *msg; + int len; + char *s; + unsigned char *outmsg; + + msg = buffer_init(); + if (msg != NULL) { + buffer_put_int(msg, SSH2_DISCONNECT_PROTOCOL_ERROR); + s = "disconnected by server request"; + buffer_put_string(msg, s, strlen(s)); + s = ""; + buffer_put_string(msg, s, strlen(s)); + + len = buffer_len(msg); + outmsg = begin_send_packet(pvar, SSH2_MSG_DISCONNECT, len); + memcpy(outmsg, buffer_ptr(msg), len); + finish_send_packet(pvar); + buffer_free(msg); + } +</pre> + +ãSSHéä¿¡ã«è¼ãããã¦ãå®éã«ãã±ãããéåºãããã®ã¯ãfinish_send_packet()ããå¼ã³åºããã finish_send_packet_special() ã§ãããã±ãããéä¿¡ããã¨ãã®ãã©ã¼ãããã«ã¤ãã¦ã以ä¸ã«ç¤ºãã¾ããå ±ééµæå·ã§ãã±ãããã¼ã¿ãæå·åããåã«ããããã¨ããã¿ãä»ããå¿ è¦ãããã¾ãã<br> +ããã±ãããµã¤ãºã¯HMACãé¤ãé·ãã§ãããã±ãããµã¤ãºãã®ãã®ã¯ããã°ã¨ã³ãã£ã¢ã³å½¢å¼ã§ã4ãã¤ãåæ ¼ç´ãã¾ããããã®"4"ãã¤ãã¯å«ã¾ãã¾ããããã¤ãã¼ãã®ç´å¾ã«ããã£ã³ã°ãåããã®ã¯ãå ±ééµæå·ã§æå·åããã¨ãã«ããããã¯ãµã¤ãºåä½ãã«ãªã£ã¦ããªããã°ãã¢ã«ã´ãªãºã çã«æå·åã§ããªãããã§ãããããã¯ãµã¤ãºã¯æå·ã¢ã«ã´ãªãºã ã«ããç°ãªãããã¨ãã°3DES-CBCãªãã°24ãã¤ããAES128ãªãã°16ãã¤ãã§ãã<br> +ãHMAC(Keyed-Hashing for Message Authentication)ã¯ãæå·åæ¬æã«å¯¾ããããã·ã¥ã§ããããã·ã¥ã®ã¢ã«ã´ãªãºã ã¯é¸æå¯è½ã§ããã"MD5"ã"SHA-1"ããã使ããã¦ãã¾ããHMACãä»å ãããã¨ã«ãããã第ä¸è ã«ãããã¼ã¿ã®æ¹ããããæ¤åºãããã¨ãã§ãã¾ããHMACã¯ãæå·å対象ã¨ãªãæ¬æãç§å¯éµã¨ã·ã¼ã±ã³ã¹çªå·ãå ããããã·ã¥å¤ãè¨ç®ãã¾ããç§å¯éµã¨ã·ã¼ã±ã³ã¹çªå·ãå ãããã¨ã«ããã第ä¸è ããã¼ã¿ãã¾ããã¨å·®ãæ¿ããã¨ãã¦ããéä¿¡è ãçæããããã·ã¥å¤ã復å ãããã¨ã¯çè«ä¸ã§ãã¾ããã<br> +ã + +<div align="center"> +<img src="image/ssh_packet_format1.png" width=720 height=540> +</div> + +ãzlibã«ãããã±ããå§ç¸®ãè¡ãå ´åã«ãããããã±ãããéä¿¡ããã¨ãã®ãã©ã¼ãããã«ã¤ãã¦ã以ä¸ã«ç¤ºãã¾ãããã±ããå§ç¸®ãè¡ãã®ã¯ãããã¤ãã¼ããã®é¨åã®ã¿ã§ãæ®ãã¯é常ã®éä¿¡ãã±ããã¨ãã©ã¼ãããã¯åãã§ãããªãããã±ãããå§ç¸®ããã¨ãã¦ããããªããããå ã®ãµã¤ãºãããå°ãããªãã¨ã¯éããªãã®ã§ããã®ãã¨ãèæ ®ãããããã¡ç®¡çãå¿ è¦ã§ãã<br> +ããã±ããå§ç¸®éä¿¡ã§é£ããã®ã¯ãå§ç¸®ãéå§ããã¿ã¤ãã³ã°ã§ãããã¼ã«ã«ãã¹ããããªã¢ã¼ããã¹ãã¸ã®SSHæ¥ç¶ãéå§ããã¨ãå®ã«ããããã®ãã´ã·ã¨ã¼ã·ã§ã³ãè¡ããã¾ããããã±ãããå§ç¸®ãã¦ããã®ã¯æ±ºããããã¿ã¤ãã³ã°ã§ããããã®ã¿ã¤ãã³ã°ãééããã¨ããµã¼ãã¨ã¾ã£ããéä¿¡ãã§ããªããªãã¾ãã<br> +ãé常ã®ãã±ããå§ç¸®ã®å ´åã¯ã"SSH2_MSG_KEXINIT"ãåä¿¡ããã¿ã¤ãã³ã°ã§ããé 延ãã±ããå§ç¸®ã®å ´åã¯ãã¦ã¼ã¶èªè¨¼ãæåããã¿ã¤ãã³ã°ï¼"SSH2_MSG_USERAUTH_SUCCESS"ãåä¿¡ããæï¼ã§ããé 延ãã±ããå§ç¸®ã¨ããã®ã¯ãããã¾ã§"SSH2_MSG_KEXINIT"ãåä¿¡ããã¿ã¤ãã³ã°ã§å§ç¸®ãéå§ãã¦ããã®ããã¦ã¼ã¶èªè¨¼ãå®äºããã¾ã§å»¶é·ããæ¹å¼ã§ããé 延ãã±ããå§ç¸®ã¯ãzlibã©ã¤ãã©ãªã®ã»ãã¥ãªãã£ãã¼ã«ã«ãããä¸æ£ãªSSHãµã¼ãã¸æ¥ç¶ããã ãã§ãã¯ã©ã¤ã¢ã³ãå´ã«å½±é¿ãåºãã®ãåé¿ããããã®ããã¿ã§ãã + + +<div align="center"> +<img src="image/ssh_packet_format2.png" width=720 height=540> +</div> + + + <h3>åä¿¡ãã±ããå¦ç</h3> +ããã±ããã®åä¿¡ã¯ãTeraTermæ¬ä½å´ãã㯠recv ã½ã±ããé¢æ°ãå¼ã³åºããå ´åã«ããããTELNETãªã®ãSSHãªã®ããæèãããªããããªè¨è¨ã«ãªã£ã¦ãããã¨ã¨ã recv ã½ã±ããé¢æ°ã®å¼ã³åºãã§ã¯ãããªããããååãªãããã¡ãµã¤ãºãæå®ããã¦ããã¨ã¯éããªããããå°ã å®è£ ãè¤éã«ãªã£ã¦ãã¾ãã<br> + +<div align="center"> +<img src="image/ssh_recv_packet.png" width=720 height=540> +</div> + +ãTeraTermæ¬ä½å´ã¯ OnIdle()#teraterm.cpp ã¨ããã¢ã¤ãã«ã«ã¼ãã«ããã¦ã常æãã±ããã®åä¿¡ããªããããã¼ãªã³ã°ãã¦ãã¾ããããã CommReceive() ã§ãrecv()ãå¼ã³åºãã¾ããrecv()ã¯TTSSHã«ããããã¯ããã¦ããã®ã§ãã½ã±ããé¢æ°ã§ã¯ãªããTTXrecv()#ttxssh.c ãå¼ã³åºããã¾ãã<br> +ãCommReceive()㯠recv() ãå¼ã³åºãéã«ããããã¡(cv->InBuff[])ã®ç©ºããã¤ã³ã¿ã¨ãµã¤ãºãå¼æ°ã«æ¸¡ãã¾ãããããã¡ãµã¤ãºã¯ 1KB ã§ããã¤ã¾ããTTXrecv()ã®ãµã¤ãºã«ã¯ã1ï½1024 ã¾ã§ã®æ°å¤ã渡ãããå¯è½æ§ãããã¨ãããã¨ã§ãã<br> +ãTTXrecv()ããå¼ã³åºããã PKT_recv() ã¯ãå°ã è¤éãªã«ã¼ãå¦çã¨ãªã£ã¦ãã¾ããSSHæ¥ç¶ãåãã¦è¡ãã¨ãã®ã·ã¼ã±ã³ã¹ã以ä¸ã«ç¤ºãã¾ãã +ã +<ol> + <li>recv_data() ã§æ¬å½ã® recv() ãå¼ã³åºãããµã¼ãããã®åä¿¡ãã±ãããã«ã¼ãã«ããåãåããpvar->pkt_state.datalenãæ´æ°ãããã </li> + <li>SSH_handle_server_ID() ã§SSHãµã¼ãã®ãã¼ã¸ã§ã³ãã§ãã¯ãè¡ããããpvar->pkt_state.datastart 㨠pvar->pkt_state.datalen ãæ´æ°ããã</li> + <li>å度ãrecv_data() ãå¼ã°ãããããµã¼ãããã®åä¿¡ãã¼ã¿ããããªãã®ã§ãconnection_closed=TRUE ã¨ã㦠while ã«ã¼ããæããã</li> + <li>TeraTermã® recv() ã¯"0"ã§è¿ã£ã¦ãããããªãã¡ãåä¿¡ãã¼ã¿ãªãã</li> +</ol> + +ã次ã«ãSSHéä¿¡ã®ããã®å ±ééµçæã¾ã§ã®ã·ã¼ã±ã³ã¹ã以ä¸ã«ç¤ºãã¾ãã + +<ol> + <li>recv_data() ã§æ¬å½ã® recv() ãå¼ã³åºãããµã¼ãããã®åä¿¡ãã±ãããã«ã¼ãã«ããåãåããpvar->pkt_state.datalenãæ´æ°ãããã </li> + <li>SSH_predecrpyt_packet() ã§ãåä¿¡ãã±ããã®å é ãããã¯ã®ã¿ã復å·åãããSSHãã±ããã®ãµã¤ãºãåå¾ããã</li> + <li>妥å½ãªSSHãã±ãããµã¤ãºãªãã°ãSSH_handle_packet() ãå¼ã³åºããã¡ãã»ã¼ã¸ã¿ã¤ãã«å¿ãããã³ãã©ãå¼ã³åºããpvar->ssh_state.payload 㨠pvar->ssh_state.payloadlen ãè¨å®ããã</li> + <li>pvar->pkt_state.datastart 㨠pvar->pkt_state.datalen ãæ´æ°ããã</li> + <li>pvar->pkt_state.datalen ãã¼ãã«ãªãã¾ã§ãSSH_predecrpyt_packet() ã®å¦çãç¹°ãè¿ãã</li> + <li>recv_data() ãå¼ã°ãããããµã¼ãããã®åä¿¡ãã¼ã¿ããããªãã®ã§ãconnection_closed=TRUE ã¨ã㦠while ã«ã¼ããæããã</li> + <li>TeraTermã® recv() ã¯"0"ã§è¿ã£ã¦ãããããªãã¡ãåä¿¡ãã¼ã¿ãªãã</li> +</ol> + +ã次ã«ã端æ«ãã¼ã¿éä¿¡ã®ã·ã¼ã±ã³ã¹ã以ä¸ã«ç¤ºãã¾ãã + +<ol> + <li>recv_data() ã§æ¬å½ã® recv() ãå¼ã³åºãããµã¼ãããã®åä¿¡ãã±ãããã«ã¼ãã«ããåãåããpvar->pkt_state.datalenãæ´æ°ãããã </li> + <li>SSH_predecrpyt_packet() ã§ãåä¿¡ãã±ããã®å é ãããã¯ã®ã¿ã復å·åãããSSHãã±ããã®ãµã¤ãºãåå¾ããã</li> + <li>妥å½ãªSSHãã±ãããµã¤ãºãªãã°ãSSH_handle_packet() ãå¼ã³åºããã¡ãã»ã¼ã¸ã¿ã¤ãã«å¿ãããã³ãã©ãå¼ã³åºããpvar->ssh_state.payload 㨠pvar->ssh_state.payloadlen ãè¨å®ããã</li> + <li>ã¡ãã»ã¼ã¸ã¿ã¤ããSSH2_MSG_CHANNEL_DATAãªã®ã§ãhandle_SSH2_channel_data() ãå¼ã³åºããpvar->ssh_state.payload_datalen 㨠pvar->ssh_state.payload_datastart ãè¨å®ããã</li> + <li>pvar->pkt_state.datastart 㨠pvar->pkt_state.datalen ãæ´æ°ããã</li> + <li>SSH_is_any_payload() ãçãè¿ãããã«ãªããPKT_recv()ã«æ¸¡ããã¦ãããããã¡ã¸ãã¼ã¿ãã³ãã¼ããã</li> + <li>TeraTermå´ã®ãããã¡ãµã¤ãºããã£ã±ãã«ãªã£ãå ´åã¯ãSSH端æ«ãã¼ã¿ãæ®ã£ã¦ããã¨ãã¦ããPKT_recv()ã¯è¿ãã</li> + <li>TeraTermå´ã®ãããã¡ãµã¤ãºã«ä½è£ãããå ´åã¯ãrecv_data()ãå¼ã³åºãããµã¼ãããã®åä¿¡ãã¼ã¿ãåå¾ããã</li> + <li>TeraTermã® recv() ã¯ãåä¿¡ãã¼ã¿ãµã¤ãºãã§è¿ã£ã¦ããã</li> +</ol> + + + <h3>ã·ã¼ã±ã³ã¹å¶å¾¡</h3> +ãSSH2æ¥ç¶ãè¡ããã¨ã§ãéä¿¡çµè·¯ãæå·åãããã¨ãã§ããã®ãç¹å¾´ã§ããããã±ããã®æå·åãè¡ãããã«ã¯ããéµããå¿ è¦ã§ããéä¿¡çµè·¯ã®æå·åã«ã¯ãå ±ééµã«ããå ±ééµæå·ãå©ç¨ããã¾ããå ¬ééµæå·ã®ã»ããã»ãã¥ãªãã£å¼·åº¦ã¯é«ãã®ã§ãããæå·å¦çã«å¤å¤§ãªæéãããããããSSHã®ãããªéä¿¡æ§è½ãè¦æ±ãããããã¿ã§ã¯æ¡ç¨ããã¾ãããSSH2ã§ã¯ãå ±ééµæå·ã¢ã«ã´ãªãºã ã¨ãã¦ãAES(Advanced Encryption Standardï¼Rijndaelã¢ã«ã´ãªãºã )ã3DES(Triple DES)ãªã©ãå©ç¨ããã¾ãã<br> +ãå ±ééµã¯éä¿¡ãè¡ãäºè éã§ã®ã¿ã«å ±æãããæ å ±ã§ããã第ä¸è ã«ç¥ããã¦ã¯ãªãã¾ãããSSH2ã§ã¯ãã¯ã©ã¤ã¢ã³ãããªã¢ã¼ããã¹ãï¼SSHãµã¼ãï¼ã¸TCPæ¥ç¶ããæã«ã"Diffie-Hellman"ã¢ã«ã´ãªãºã ããã¼ã¹ã¨ããç¬èªã®æ¹å¼ã«ãããã¯ã©ã¤ã¢ã³ãã¨ãµã¼ãã§ããç¥ãå¾ãªãDH(Diffie-Hellman)éµãçæãã¾ããDHéµçæã¾ã§ã®éç¨ã¯ããããã¯ã¼ã¯ä¸ããã±ãããå¹³æã§æµããããã第ä¸è ã«ãããã±ãããã£ããã£ãå¯è½ã¨ãªã£ã¦ãã¾ããããã±ãããè¦ããã¦ããDHéµã¯çè«ä¸ç¬¬ä¸è ã«ã¯åãããªãããã«ãªã£ã¦ãã¾ãã<br> +ãå ±ééµãçæã§ãããã¨ã¯ããã®éµã使ã£ã¦ãã±ãããæå·åãã¾ããSSH2ã§ã¯ãéåä¿¡ããããã±ããã¯ç¨®é¡ããããããããããã«ãã¡ãã»ã¼ã¸çªå·ããå²ãæ¯ã£ã¦ãã¾ããRFC4250ã«ã¡ãã»ã¼ã¸çªå·ã®ä¸è¦§ãããã¾ããã¡ãã»ã¼ã¸åã¯"SSH2_MSG_xxxx"ã¨ãããã¼ãã³ã°ã«ãªã£ã¦ãããTTSSHå é¨ã§ãåãååã§ãã¯ãå®ç¾©ãã¦ãã¾ãã<br> +ã以ä¸ã«ãã¯ã©ã¤ã¢ã³ããããµã¼ãã¸TCPæ¥ç¶ï¼ãã¼ã22çªï¼ãã¦ããããã¹ã¯ã¼ãèªè¨¼ã§ã¦ã¼ã¶èªè¨¼ãããã¾ã§ã®æµãã示ãã¾ãã<br> + + +<div align="center"> +<img src="image/ssh2_sequence1.png" width=720 height=540> +</div> + +<div align="center"> +<img src="image/ssh2_sequence2.png" width=720 height=540> +</div> + +ã以ä¸ã¯ããªã¢ã¼ããã¹ãã®ã·ã§ã«ä¸ã§"exit"ã"logout"ã¨ãã¦ãã¯ã©ã¤ã¢ã³ãããæ示çã«ã·ã§ã«ãã¯ãã¼ãºããã¨ãã®ããã±ããã®æµãã示ãã¦ãã¾ãã<br> + +<div align="center"> +<img src="image/ssh2_sequence3.png" width=720 height=540> +</div> + +ãTTSSHã¯ãSSH2ã§ãã¹ã¯ã¼ãèªè¨¼ã®ã»ãã«keyboard-interactiveèªè¨¼ãpublickeyèªè¨¼ãPageantãå©ç¨ããpublickeyèªè¨¼ããµãã¼ããã¦ãã¾ããããããã®èªè¨¼æ¹å¼ã§ã©ã®ãããªã·ã¼ã±ã³ã¹ã§èªè¨¼ãè¡ãããã®ãã以ä¸ã«ç¤ºãã¾ãã + +<div align="center"> +<img src="image/ssh2_auth1.png" width=720 height=540> +</div> +<div align="center"> +<img src="image/ssh2_auth2.png" width=720 height=540> +</div> + + + + <h3>ç似端æ«ã®ããã¿</h3> +ãSSH2ã§ã¯ãæ°ãããããã¼å¶å¾¡ãã¨ããæ¦å¿µãåãè¾¼ã¾ãã¦ãã¾ããTCPã®ã¦ã£ã³ãã¦ã¨åãèãæ¹ã§ããã¦ã£ã³ãã¦ãµã¤ãºãã¨ããããã¿ãå°å ¥ãã¦ãã¾ãããã®æ©è½ã«ãããã¯ã©ã¤ã¢ã³ãï¼Tera Termï¼ã¨ãµã¼ãï¼SSHãã¼ã¢ã³ï¼éã«ããã¦ãããã¼å¶å¾¡ãåããããååãã¼ã¿ã溢ãããã¨ã¯ããã¾ããã<br> +ãã¨ããã§ãSSH2ã«ãããããã¼å¶å¾¡ãããã«ãé¢ãããã大éã®ã¯ãªãããã¼ããTeraTermã®ç«¯æ«ã¸ãã¼ã¹ãããã¨ããµã¼ãå´ã§ã®ããã¼ã¿ã®åããã¼ãããçºçãããã¨ãããã¾ãããã®ç¾è±¡ãç解ããããã«ã¯ãUNIXã«ãããç似端æ«ï¼PTY: pseudo-terminalï¼ã®åä½åçãç¥ãå¿ è¦ãããã¾ãã + +<div align="center"> +<img src="image/pty.png" width=720 height=540> +</div> + +ãSSHãã¼ã¢ã³(sshd)ã¯ã¯ã©ã¤ã¢ã³ãã«å¯¾ãã¦ããããããµã¼ãå´ã®ã·ã§ã«ãç´æ¥æ¥ç¶ããã¦ãããã®ããã«è¦ããå¿ è¦ãããã¾ããéã«ãã·ã§ã«ä¸ã§åãããã°ã©ã ã¯ãæåãéãããã¨ã㯠printf(3) ããæåãåãåãããå ´å㯠scanf(3) ã¨ãã£ãCã©ã¤ãã©ãªé¢æ°ãå¼ã³åºãã ãã§ããããã®å ãã·ãªã¢ã«ã³ã³ã½ã¼ã«ãªã®ããVGAã³ã³ã½ã¼ã«ãªã®ããSSHæ¥ç¶ããã¦ããã®ãã¯ãä¸åæ°ã«ããªãã¦ããããã«ãªã£ã¦ãã¾ãã<br> +ãsshdã¯ãã¯ã©ã¤ã¢ã³ãããã®æ¥ç¶è¦æ±ããã£ãã¿ã¤ãã³ã°ã§ãopenpty(3)ã使ã£ã¦ãç似端æ«ã®åæåãè¡ãã¾ããç似端æ«ã§ã¯ãã«ã¼ãã«ç©ºéã§ã¯ã©ã¤ã¢ã³ãã¨ãµã¼ããã¤ãªãããã«ãããã¹ã¿ã¼ããã¤ã¹ãã©ã¤ããã¨ãã¹ã¬ã¼ãããã¤ã¹ãã©ã¤ãããç¨æããã¾ãããã¹ã¿ã¼ããã¤ã¹ãã©ã¤ããæ å½ããããã¤ã¹ãã¡ã¤ã«ã¯"/dev/ptyXX"ãã¹ã¬ã¼ãããã¤ã¹ãã©ã¤ãã§ã¯"/dev/ttyXX"ã§ããã¤ã¾ããsshdã¯ãã¹ã¿ã¼ããã¤ã¹ãã©ã¤ãã¸ã¢ã¯ã»ã¹ãããã¨ã§ãã·ã§ã«ã¨ã話ããããã¨ãã§ãã¾ããã·ã§ã«ã¯ãsshdããforkããã¦åããã»ã¹ã¨ãªãã親ããã»ã¹(sshd)ãåæåæ¸ã¿ã®ã¹ã¬ã¼ãããã¤ã¹ãã©ã¤ãã¨ã話ããããã¨ã«ãªãã¾ãããã®ç似端æ«ã®ããã¿ã«ãããsshdã¨ã·ã§ã«ãæ¥ç¶ããã¾ãã<br> +ããªãã端æ«ã©ã¤ã³ãã£ã·ããªã³(line discipline: åç·è¦ç´)ã¨ããã®ã¯ããã¨ãã°ããã°ã©ã ã getchar() ãå¼ã³åºããã¨ãã«ãEnterãã¼ãæ¼ä¸ããã¾ã§ãããã°ã©ã ã«å¶å¾¡ã渡ãã¾ããã端æ«ã©ã¤ã³ãã£ã·ããªã³ã¯ãããã°ã©ã å®è¡ä¸ã§ã®ãè¡å ç·¨éããå¯è½ã¨ããããã®ã¢ã¸ã¥ã¼ã«ã§ããLinuxã§ã¯ã端æ«ã©ã¤ã³ãã£ã·ããªã³ã¯ /proc/tty/ldiscs ã§ç¢ºèªã§ãã¾ãï¼N_TTYãæ¨æºçã«å©ç¨ãããï¼ã + + + <h3>SCP(Secure Copy)</h3> +ãSCP㯠OpenSSH ããã±ã¼ã¸ã«å«ã¾ããããã°ã©ã ã®1ã¤ã§ãããSSHã»ãã·ã§ã³ã使ã£ã¦ãã¡ã¤ã«ã®éåä¿¡ãè¡ããã¨ãã§ãã¾ããSCPãå©ç¨ããããã«ã¯ããªã¢ã¼ããµã¼ãã«"sshd"ã ãã§ã¯ãªãã"scp"ã³ãã³ããå°å ¥ããã¦ããå¿ è¦ãããã¾ããOpenSSHã®SCPã¯ãsshd ãã¼ã¢ã³ãã"scp"ã³ãã³ããåããã»ã¹ã¨ãã¦èµ·åããããã¨ã§å®ç¾ããã¦ãã¾ãããªããSCPã¨SFTP(Secure File Transfer Program)ã¯ã¾ã£ããå¥ã®ãããã³ã«ã§ãäºææ§ã¯ãªããSCPã¯ç´ç²ã«ãã¡ã¤ã«ã®ãéä¿¡ãã¨ãåä¿¡ãããã§ãã¾ããã<br> +ãSSHã»ãã·ã§ã³ä¸ã§ãã¡ã¤ã«è»¢éãè¡ãã«ã¯ãã¯ã©ã¤ã¢ã³ããããµã¼ãã¸æ¥ç¶ãæåãããã¨ã«ãã·ã§ã«ãªã¼ãã³(pty-req)ã®ä»£ããã«ããå¤é¨ã³ãã³ãã®å®è¡ã(exec)ã¨ããå½¢å¼ã§ãSCPãå©ç¨ã§ããããã«ãªãã¾ãã +ã +ã<p><font size=3>ã»SSH2ã®å ´å</font></p> +ãSSH2_MSG_CHANNEL_REQUEST ããµã¼ãã¸éãã¨ãã«ã"pty-req"ã®ä»£ããã«"exec"ããµã¼ãã¹åã¨ãã¦æå®ããã¨ãå¤é¨ã³ãã³ããå®è¡ãããã¨ãã§ãã¾ãã +<pre> +ããã¦ã¼ã¶èªè¨¼æåå¾ +ãã ----> SSH2_MSG_CHANNEL_OPEN(90) +ãã <---- SSH2_MSG_CHANNEL_OPEN_CONFIRMATION(91) +ãã ----> SSH2_MSG_CHANNEL_REQUEST(98) ãµã¼ãã¹å"exec"ã§å¤é¨ã³ãã³ãéä¿¡("scp -f") +ãã <---- SSH2_MSG_CHANNEL_WINDOW_ADJUST (remote_window+=131072ãã¤ã) +ãã <---- SSH2_MSG_CHANNEL_EXTENDED_DATA (local_window-=36ãã¤ã) +ãã <---- SSH2_MSG_CHANNEL_DATA(94) +</pre> + +ã<p><font size=3>ã»SSH1ã®å ´å</font></p> +ããã»ãã·ã§ã³ãéãã¨ãã«ãSSH_CMSG_EXEC_CMD ããµã¼ãã¸éãã¨ãå¤é¨ã³ãã³ããå®è¡ãããã¨ãã§ãã¾ãã +ã +ã<p><font size=3>ã»å¤é¨ã³ãã³ãã®æ¸å¼</font></p> +<pre> +ã* "scp [-v] [-r] [-p] [-d] -t ãã¡ã¤ã«å"ããã¼ã«ã«ãããªã¢ã¼ãã¸ã®ã³ãã¼ +ã* "scp [-v] [-r] [-p] [-d] -f ãã¡ã¤ã«å"ããªã¢ã¼ããããã¼ã«ã«ã¸ã®ã³ãã¼ +ã -v verbose +ã -r ãªã«ã¼ã·ã +ã -p ã¿ã¤ã ã¹ã¿ã³ãä¿æ +ã -d ãã£ã¬ã¯ã㪠+ã -t Local-to-Remoteã¸ã³ãã¼ +ã -f Remote-to-Localã¸ã³ãã¼ +</pre> + +ã<p><font size=3>ã»ãã¼ã¿è»¢é</font></p> +ããå¤é¨ã³ãã³ãã®éä¿¡ãå®äºãããã¨ã«ããã¡ã¤ã«ã®å 容ãéä¿¡ããã³åä¿¡ãããã¨ãã§ãã¾ãã +<pre> +ããï¼ï¼éä¿¡ã®æµã +ã ãã»"Tã¿ã¤ã ã¹ã¿ã³ã 0 ã¿ã¤ã ã¹ã¿ã³ã 0"ãéä¿¡ï¼ãªãã·ã§ã³ï¼ +ã ãã»"C0666 ãµã¤ãº ãã¡ã¤ã«å"ãéä¿¡ +ã ãã»ãã¡ã¤ã«ã®å 容ãéä¿¡ +ã ãã»ã»ãã·ã§ã³ã¯ãã¼ãº + +ããï¼ï¼åä¿¡ã®æµã +ã ãã»"Tã¿ã¤ã ã¹ã¿ã³ã 0 ã¿ã¤ã ã¹ã¿ã³ã 0"ãåä¿¡ï¼ãªãã·ã§ã³ï¼ +ã ãã»0ãéä¿¡ +ã ãã»"C0666 ãµã¤ãº ãã¡ã¤ã«å"ãåä¿¡ +ã ãã»0ãéä¿¡ +ã ãã»ãã¡ã¤ã«ã®å 容ãåä¿¡ +ã ãã»ãã¡ã¤ã«ã®ã¿ã¤ã ã¹ã¿ã³ããè¨å®ï¼ãªãã·ã§ã³ï¼ +ã ãã»0ãéä¿¡ +ã ãã»ã»ãã·ã§ã³ã¯ãã¼ãº +</pre> + +ã<p><font size=3>ã»æ³¨æäºé </font></p> +ãããã¡ã¤ã«åã«ãã£ã¬ã¯ããªãå«ã¾ããã¨ãã¯ããã¹ã®åºåãã¯ã/ãã¨ãªãã¾ããã\ãã¯åãä»ããªãã®ã§ãå¤æãå¿ è¦ã§ãã + + + + <h3>X11転é</h3> +ãX11転é(X11 port forwarding)ã¯ãSSHãµã¼ãä¸ã§Xã¦ã£ã³ãã¦ã¢ããªã±ã¼ã·ã§ã³ãèµ·åããã¢ããªã±ã¼ã·ã§ã³ã®GUIç»é¢ãTera Termãåä½ãã¦ããã³ã³ã½ã¼ã«PCã«é£ã°ãããã¿ã§ãããã®ããã¿ã使ãã¨ãSSHã»ãã·ã§ã³ä¸ã§"xeyes"ã"firefox"ã"xemacs"ãªã©ã®ã½ããã¦ã§ã¢ãåãããã¨ãã§ããããã«ãªãã¾ãããªããã³ã³ã½ã¼ã«PCä¸ã«ã¯ãXming(http://sourceforge.net/projects/xming/)ãªã©ã®Xãµã¼ãããããããç¨æãã¦ããå¿ è¦ãããã¾ãã<br> +ãä¸å³ã«X11転éã®ããã¼ã示ãã¾ããå³ãè¦ãã¨åããããã«ãTera Term(TTSSH)ã¯Xã¢ããªã±ã¼ã·ã§ã³ã¨Xãµã¼ããã¤ãªãæ©æ¸¡ãã®å½¹ç®ãæã¡ã¾ãããã®ãããªTera Termã®ãã¨ã"Redirector"ã"Port forwarder"ã"TCP proxy"ã¨å¼ã³ã¾ãã + +<div align="center"> +<img src="image/x11forward.png" width=720 height=540> +</div> + +ãX11転éãå©ç¨ããããã«ã¯ãTera Termããã³SSHãµã¼ãã®åæ¹ã«äºåè¨å®ãå¿ è¦ã§ããã¾ããTera Termã®ã»ãã¯teraterm.iniã«ä¸è¨ã®è¨å®ãå¿ è¦ã§ãã + +<pre class=code> +[TTSSH] +DefaultForwarding=X +</pre> + +ãSSHãµã¼ãã®ã»ãã¯ãOpenSSHãä¾ã«æããã¨ã"sshd_config"ã«ä¸è¨ã®è¨å®ãå¿ è¦ã§ããããã©ã«ãã¯"no"ã«ãªã£ã¦ãããããé常ã¯ããã©ã«ãã§ã¯X11転éã使ãã¾ããã + +<pre class=code> +X11Forwarding=yes +</pre> + +ãTera Termã¯X11転éãæå¹ã§ããã¨ãspec.typeã«"FWD_REMOTE_X11_TO_LOCAL"ãè¨å®ãã¾ããããã¯SSHãµã¼ãå´ããTera Termå´ã«åãã£ã¦ãX11転éãè¡ããã¨ãæå³ãã¾ããTera Termã¯ããªã¢ã¼ããã¹ãã«SSHæ¥ç¶ããéãã»ãã·ã§ã³ãªã¼ãã³å¾ã®"SSH2_MSG_CHANNEL_OPEN_CONFIRMATION"ã«ããã¦ãX11転éã®åæåãè¡ãã¾ãã + +<pre class=code> + if (c->type == TYPE_SHELL) { + // ãã¼ããã©ã¯ã¼ãã£ã³ã°ã®æºå (2005.2.26, 2005.6.21 yutaka) + // ã·ã§ã«ãªã¼ãã³ãããã¨ã« X11 ã®è¦æ±ãåºããªãã¦ã¯ãªããªãã(2005.7.3 yutaka) + FWD_prep_forwarding(pvar); + FWD_enter_interactive_mode(pvar); + } +</pre> + +ãFWD_prep_forwarding()ã§ã¯ã"x11-req"ãµã¼ãã¹åã¨"MIT-MAGIC-COOKIE-1"ãSSHãµã¼ãã«éä¿¡ããSSHãµã¼ãå´ã®X11転éã®åæåãä¿ãã¾ããSSHæ¥ç¶æã«X11ã®åæåãå®äºããã¨ãSSHãµã¼ãå´ã«ç°å¢å¤æ°"DISPLAY"ãèªåçã«è¨å®ããã¾ãã + +<pre class=code> +# echo $DISPLAY +DISPLAY=localhost:10.0 +</pre> + +ãããã¾ã§æºåãæ´ãã¨ãSSHãµã¼ãä¸ã§Xã¢ããªã±ã¼ã·ã§ã³ãèµ·åããããã¨ãã§ãã¾ããXã¢ããªã±ã¼ã·ã§ã³ããXãµã¼ããããªãã¡SSHãµã¼ãããTera Termã¸éããã¦ãããã¼ã¿ã¯ãSSH2_MSG_CHANNEL_DATA ã¡ãã»ã¼ã¸å½¢å¼ã¨ãªãã¾ããå½è©²ã¡ãã»ã¼ã¸ã¯ FWD_received_data() ã§å¦çãããXãµã¼ã(TCP/6000)ã¸éããã¾ããXãµã¼ãã®ã½ã±ãã㯠channel->local_socket ã§ããã³ããããã³ã°ã¢ã¼ãã§æ±ããã¾ãããã®ãããä¸åº¦ã§ãã±ãããå ¨é¨éããªãå ´åããããããéããªãã£ããã¼ã¿ã¯å é¨ãããã¡ã«æºãã¦ããå¿ è¦ãããã¾ããã¾ããchannel->local_socket ã«ãã±ãããsendãããã¨ã«ãããFD_WRITE ã¡ãã»ã¼ã¸ãçºçããwrite_local_connection_buffer() ãå¼ã³åºããã¾ããããã§ã¯ãååéããªãã£ããã¼ã¿ãããã°ãå é¨ãããã¡ããåãåºããå度Xãµã¼ãã¸ã®éä¿¡ãè© ¦ã¿ã¾ãã<br> +ãå対ã«ãXãµã¼ããããªãã¡X11ã®ç»é¢ä¸ã§ä½ããã®æä½ãè¡ãããå ´åãTera TermããSSHãµã¼ãã«ãã¼ã¿ãéä¿¡ããå¿ è¦ãããã¾ãããã®ã¨ããTera Termã¸ã¯ FD_READ ã¡ãã»ã¼ã¸ãçºçããread_local_connection() ãå¼ã³åºããã¾ããããã§ã¯ãXãµã¼ãããéããã¦ãããã¼ã¿ã SSH2_MSG_CHANNEL_DATA ã¡ãã»ã¼ã¸å½¢å¼ã«è¼ãã¦ãSSHãµã¼ãã¸éãã¾ãã + +<hr> + + +<h2><a name="macro">ãã¯ãè¨èªã®è¨è¨ã¨å®è£ </a></h2> + <h3>æ¦è¦</h3> +ãTera Termã®ãã¯ãã¹ã¯ãªããã¯ãBASIC風ã®è¨èªä»æ§ã¨ãªã£ã¦ãã¾ããBisonãFlexã¨ãã£ãããã¿ã¯å©ç¨ãã¦ããããåæ¥çãªç¬èªã®æ§æ解æï¼å帰çä¸éæ³ï¼ã«ããå®è£ ããã¦ãã¾ãããã®ãããæ¬æ ¼çãªã¹ã¯ãªããè¨èªã¨ãã¦ã®è¨è¿°ã¯ã§ããªãå´é¢ãããã¾ãã<br> +ã + <h3>ãã¡ã¤ã«ã®èªã¿è¾¼ã¿</h3> +ãttpmacro.exeã®èµ·åæã«ããã¯ããã¡ã¤ã«(.ttl)ãä¸æ¬ãã¦ãããã¡ã¸èªã¿è¾¼ã¾ãã¾ãã +ã +<p><ul> + <li>OnInitDialog()#ttmmain.cpp -> InitTTL() -> InitBuff() -> LoadMacroFile()</li> +</ul></p> + +ãåãã¦èªã¿è¾¼ã¾ãããã¯ããã¡ã¤ã«ã®å ¨å 容㯠Buff[0] # ttmbuff.c ã«æ ¼ç´ããã¾ãããã®æç¹ã§ããã¡ã¤ã«ã®å 容ã¯ä¸æ¬ãã¦èªã¿è¾¼ã¾ããããããã¯ãå®è¡ä¸ã¯ãã¡ã¤ã«ãåé¤ãã¦ãã¾ã£ã¦ãåé¡ã¯ããã¾ããããã ãã"include"ã§å¥ã®ãã¡ã¤ã«ãèªã¿è¾¼ãå ´åã¯ãincludeãå®è¡ããæç¹ã§ãinclude対象ã¨ãªããã¡ã¤ã«ã®èªã¿è¾¼ã¿ãçºçãã¾ãã +ã +<pre class=code> +#define MAXNESTLEVEL 10 /* æ±ãããã¡ã¤ã«æ°ï¼includeã¯9ã¤ã¾ã§ï¼*/ + +static int INest; /* ç¾å¨ã®ãã¹ãä½ç½® */ +static HANDLE BuffHandle[MAXNESTLEVEL]; /* GlobalAlloc()ã«ãããããã¡ */ +static PCHAR Buff[MAXNESTLEVEL]; /* ãããã¡é å */ +static BINT BuffLen[MAXNESTLEVEL]; /* ãã¡ã¤ã«ãµã¤ãºï¼ãããã¡ãµã¤ãºï¼ */ +static BINT BuffPtr[MAXNESTLEVEL]; /* ãããã¡ã®ãªãã»ããï¼èªã¿è¾¼ã¿ä½ç½®ï¼*/ +</pre> + + + <h3>ãã¯ãã¨ã³ã¸ã³</h3> +ããã¯ãå¦çã¯ã¢ã¤ãã«ã«ã¼ã OnIdle()#ttmmain.cpp ã§è¡ããã¾ããã¢ã¤ãã«ã«ã¼ãã§ã¯ TTLStatus å¤æ°ã«ããããã¯ãã¨ã³ã¸ã³ã®åä½ãå¤ãã¦ãã¾ããé常ã®å®è¡ç¶æ 㯠IdTTLRun ãã»ããããã¦ãã¾ãã以ä¸ã«ãåä½ä¸è¦§ã示ãã¾ãã + +<p> +<table border=1 align=center> +<tr> + <th>æ¡ä»¶</th> + <th>å¦ç</th> +</tr> + +<tr> + <td>TTLStatus==IdTTLEnd</td> + <td>ãã¯ãããã°ã©ã ãçµäºãã</td> +</tr> + +<tr> + <td>éä¿¡ãã¼ã¿ãããå ´åï¼OutLen > 0ï¼</td> + <td>Tera Termæ¬ä½ã¸ãã¼ã¿ãéã</td> +</tr> + +<tr> + <td>TTLStatus==IdTTLRun</td> + <td>ä¸è¡ãã¤ãã¯ããå®è¡ãã</td> +</tr> + +<tr> + <td>TTLStatus==IdTTLWait</td> + <td>ã¦ã§ã¤ãããï¼'wait'ã³ãã³ãï¼</td> +</tr> + +<tr> + <td>TTLStatus==IdTTLWaitLn</td> + <td>ã¦ã§ã¤ãããï¼'waitln'ã³ãã³ãï¼</td> +</tr> + +<tr> + <td>TTLStatus==IdTTLWaitNL</td> + <td>ä¸è¡åä¿¡ããï¼'recvln'ã³ãã³ãï¼</td> +</tr> + +<tr> + <td>TTLStatus==IdTTLWait2</td> + <td>æååãå¾ ã¤ï¼'waitrecv'ã³ãã³ãï¼</td> +</tr> + +</table> + </p> + + + <h3>ã¤ã³ã¿ã¼ããªã¿å¦ç</h3> +ãã¢ã¤ãã«ã«ã¼ããã Exec()#ttl.c ãå®æçã«å¼ã³åºããã度ã«ããã¯ããã¡ã¤ã«ãä¸è¡ãã¤å¦çããã¦ããã¾ããGetNewLine() ã§ã¯ããããã¡ããä¸è¡åãåãåºããLineBuff[]#ttmparse.c ã¸æ ¼ç´ãã¾ããè¡ã®çµãããã©ããã¯ããASCIIã³ã¼ãã0x20æªæºã§ããã¤ã¿ã(0x09)以å¤ãã®ã³ã¼ããåºç¾ããã¿ã¤ãã³ã°ã§å¤å®ãã¦ãã¾ããå é ã®ç©ºç½ãã¿ãã¯ç¡è¦ããã¾ããã»ãã³ãã³(;)ãåºç¾ããã¨ã以éã®å¦çãã¹ããããããããã³ã¡ã³ãã¯è¡ã®éä¸ã§ãä»ãããããã¨ã«ãªãã¾ãã<br> + +<pre class=code> +char LineBuff[MaxLineLen]; /* 1ã¤ã®è¡ã¯500ãã¤ãã¾ã§æ ¼ç´å¯è½ */ +WORD LinePtr; /* ãããã¡ãªãã»ãã */ +WORD LineLen; /* ãããã¡ãµã¤ãº */ +</pre> + +ãExec()ããå¼ã°ãã ExecCmnd() ã§ãåå¥è§£æãè¡ãã¾ããåå¥è§£æã¯åç´ãªæååæ¤ç´¢ã§ãããLineBuff[]ã1ãã¤ããã¤åç §ãã¦ããã¾ãã大ã¾ããªå¦çã®æµãã¯ä»¥ä¸ã®ã¨ããã§ãã + +<p><ol> + <li>endwhileã®å¤å®</li> + <li>breakå¦ç</li> + <li>endifã®å¤å®</li> + <li>elseã®å¤å®</li> + <li>ãã¯ãã³ãã³ãã®å®è¡</li> + <li>èå¥åã®å¤å®</li> + <li>ææ³ã¨ã©ã¼ï¼ä¸è¨ã®ãããã§ããªãå ´åï¼</li> +</ol></p> + +ããã¯ãã³ãã³ããã©ããã¯ãGetReservedWord()ã§å¤å¥ãã¦ãã¾ãã_stricmp()ã§æ¯è¼ãã¦ããã®ã§ãã¢ã«ãã¡ãããã®å¤§æåã»å°æåã¯åºå¥ããã¾ãã(case-insensitive)ããã¯ãã³ãã³ãã®å ´åã¯ãTTLxxx() ã®é¢æ°ãå¼ã³åºãã¾ãã<br> +ãèå¥åã®å¤å®ã¯ãGetIdentifier() ã§è¡ãã¾ããã¢ã«ãã¡ããã(a-z, A-Z)ããã³æ°å¤(0-9)ãã¢ã³ãã¼ã¹ã³ã¢(_)ããæ§æããããã¼ã¯ã³ãåãåºãã¾ãããã¼ã¯ã³ã¯32æåã¾ã§ã§ãããã¼ã¯ã³ã¯ãå¤æ°ãã¨ãã¦æ±ããã¾ãã左辺å¤ã«å¤æ°ãæ¥ãå ´åã¯ããå¤æ°ã¸ã®ä»£å ¥ãããããããªãã®ã§ããã®ç´å¾ã«ãã¤ã³ã¼ã«(=)ãããããã©ããã調ã¹ã¾ãã<br> +ãã¤ã³ã¼ã«ä»¥éã®å¤å®å¦çã¯ã以ä¸ã®é çªã¨ãªãã¾ãã +ã +<p><ol> + <li>æååã®å¤å®</li> + <li>è¨ç®å¼ã®å¤å®</li> +</ol></p> + +ãæååãã©ãã㯠GetString() ã§å¤å®ãã¾ããæååã¯âãâã§ã¯ã©ã¼ãããã¦ãããããåãåºãã®ã¯å®¹æã§ãã<br> +ãè¨ç®å¼ã®å¤å®ã¯ãGetExpression() ã§è¡ãã¾ããããã§ã¯å帰çä¸éæ³ã«ãããæ§æ解æããã¾ãã<br> +ã左辺å¤ãå®ç¾©æ¸ã¿ã®å¤æ°ãã©ãã㯠CheckVar() ã§ãã§ãã¯ããæ°å¤ãããã¯æååãã»ãããã¾ããããã§ã¯ãªãå ´å㯠NewStrVar() ã§ãæ°ããå¤æ°ã¨ãã¦ç»é²ãã¾ãã +ã + +<hr> + + + +<h2><a name="caret">ãã£ã¬ããå¶å¾¡</a></h2> + <h3>æ¦è¦</h3> +ãã¦ã¼ã¶ã端æ«ä¸ã§ãã¼ãã¼ãå ¥åãè¡ãã¨ãã«ã¼ã½ã«ã移åãã¾ããããµã¼ãããã®ã¨ã¹ã±ã¼ãã·ã¼ã±ã³ã¹ã«ããããã¼ãã¼ãå ¥åãªãã«ã«ã¼ã½ã«ã移åãããå¿ è¦ãããã¾ããã¾ããã¦ã£ã³ãã¦ãéã¢ã¯ãã£ãç¶æ ã®å ´åã«ããã¦ããã«ã¼ã½ã«ã表示ããããã¨ã«ãããããã¼ããã£ã¹ãã¢ã¼ãã«ããã¦ãè¤æ°ç«¯æ«ã®åææä½æ§ãåä¸ããã¦ãã¾ãã +<br> + + <h3>ã·ã¹ãã ãã£ã¬ãã</h3> +ãTera Termã«ãããã«ã¼ã½ã«æç»ã«ã¯ãã·ã¹ãã ãã£ã¬ãããå©ç¨ãã¦ãã¾ããTera Termã§ä½¿ç¨ããã¦ããã·ã¹ãã ãã£ã¬ãããå¶å¾¡ããAPIã以ä¸ã«ç¤ºãã¾ãã + +<p><ul> + <li>CreateCaret</li> + <li>DestroyCaret</li> + <li>GetCaretBlinkTime</li> + <li>HideCaret</li> + <li>SetCaretBlinkTime</li> + <li>SetCaretPos</li> + <li>ShowCaret</li> +</ul></p> + +ã<a href="http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_createcaret.asp">CreateCaretã®ããã¥ã¡ã³ã</a>ã«ããã¨ã + +<pre> +ã·ã¹ãã 㯠1 ã¤ã®ãã¥ã¼ã«ã¤ã 1 ã¤ã®ãã£ã¬ãããæä¾ãã¾ããã¦ã£ã³ãã¦ã +ãã¼ãã¼ããã©ã¼ã«ã¹ãåãã¦ããã¨ããã¾ãã¯ã¢ã¯ãã£ããªç¶æ ã®ã¨ãã«ã ãã +ãã£ã¬ãããä½æããã¹ãã§ããã¾ãããã¼ãã¼ããã©ã¼ã«ã¹ã失ã£ããéã¢ã¯ +ãã£ãã«ãªãåã«ããã£ã¬ãããç ´æ£ããã¹ãã§ãã +</pre> + +ã¨ãããããã¦ã£ã³ãã¦ãã¢ã¯ãã£ãã«ãªã£ãã¿ã¤ãã³ã°ã§ CreateCaret() ãå¼ã³åºãããã©ã¼ã«ã¹ãå¤ããéã¢ã¯ãã£ãã«ãªãã¿ã¤ãã³ã°ã§ DestroyCaret() ãå¼ã³åºãå¿ è¦ããããã¨ãæå³ãã¦ãã¾ãã<br> +ããã£ã¬ããã®è¡¨ç¤ºã¯ CaretOn()#vtdisp.c ã§ãæ¶å»ã¯ CaretOff()#vtdisp.c ã§å®è£ ããã¦ãã¾ããCaretOn()ãCaretOff()ãå¼ã³åºãããã¿ã¤ãã³ã°ã¯ãã¨ã¹ã±ã¼ãã·ã¼ã±ã³ã¹å¦ç VTParse() ã®ç®æ以å¤ã«ãããã¦ã¹ãã¿ã³ãæ¼ããã¨ããã¦ã£ã³ãã¦ã®ãªãµã¤ãºãè¡ã£ã¦ããã¨ããªã©ãããã¾ãã<br> + + + + <h3>éã¢ã¯ãã£ãæã®ã«ã¼ã½ã«è¡¨ç¤º</h3> +ãã¦ã£ã³ãã¦ãéã¢ã¯ãã£ãã®å ´åã¯ãã«ã¼ã½ã«ãæ¶æ» ãã¾ããWindowsã®ä¸ã§ã¯ã¦ã¼ã¶ãæä½ã§ãããã¦ã£ã³ãã¦ã¯1ã¤ã§ãããããã·ã¹ãã ãã£ã¬ããã1ã¤ã®ã¿ç¨æããã¦ãã¾ããé常ã®ãªãã¬ã¼ã·ã§ã³ã«ããã¦ã¯ããã®åä½ã§åé¡ãããã¾ããã<br> +ãããããããã¼ããã£ã¹ãã¢ã¼ããå©ç¨ããå ´åãéã¢ã¯ãã£ãã®Tera Termã¦ã£ã³ãã¦ã«å¯¾ãã¦ãã³ãã³ããæå ¥ãããã¨ã«ãªãã¾ããç¹ã«ãviãªã©ã§è¤æ°ã®ç«¯æ«ãåææä½ããã¨ãã¯ãã«ã¼ã½ã«ãæ¶ãã¦ããã¨ä¸é½åãããã¾ãã<br> +ãããã§ãã¦ã£ã³ãã¦ãéã¢ã¯ãã£ãã®å ´åã«ããã¦ããã«ã¼ã½ã«ãæç»ããããã«ãã¦ãã¾ãããã ããã·ã¹ãã ãã£ã¬ããã¯ä½¿ããªãã®ã§ãèªåã§ã«ã¼ã½ã«ãæç»ããå¿ è¦ãããã¾ããTera Termã®ã¦ã£ã³ãã¦ãéã¢ã¯ãã£ãã®å ´åã«ããã¦ãããªã¢ã¼ããã¹ãããéããã¦ããã¨ã¹ã±ã¼ãã·ã¼ã±ã³ã¹ãå¦çããããã«ã¡ã¤ã³ã¨ã³ã¸ã³ã¯åãã¦ããã常ã«ã«ã¼ã½ã«ä½ç½®ã¯æ´æ°ããã¦ãã¾ããç¾å¨ã®ã«ã¼ã½ã«ä½ç½®ã¯ãCursorXã¨CursorYã«è¨å®ããã¦ãã¾ãã<br> +ãéã¢ã¯ãã£ãæã®ã«ã¼ã½ã«è¡¨ç¤ºã¯ CaretKillFocus() ã§è¡ã£ã¦ãã¾ãããã®ã¨ãã«è¡¨ç¤ºãããã«ã¼ã½ã«ããããªã´ã³ã«ã¼ã½ã«ãã¨å¼ãã§ãã¾ããts.VTColor[0] 㯠Text color ã§ããéã¢ã¯ãã£ãç¶æ ã§ã«ã¼ã½ã«ä½ç½®ãæ´æ°ãããã¨ãã¯ã以åã«æããã«ã¼ã½ã«ãæ¶ãå¿ è¦ãããã®ã§ããã®ã¨ã㯠ts.VTColor[1] ã§è¡¨ããã Background color ã§åæç»ãããã¨ã§ã以åã®ã«ã¼ã½ã«ãæ¶å»ãã¦ãã¾ãã<br> +ãBackground colorã§ããªã´ã³ã«ã¼ã½ã«ãæç»ããã¨ãã¡ããã©ãã®ã¨ãèæ¯ã«ãã£ãæåã®ä¸é¨ãæ¬ ãããã¨ãããã¾ãããã®ããããã®æåã®åæç»ãè¡ãå¿ è¦ããããUpdateCaretKillFocus() ã§å®ç¾ãã¦ãã¾ããå½è©²é¢æ°ã§ã¯ InvalidateRect() 㧠WM_PAINT ãéããã¨ã«ãããæåã®åæç»ãä¿ãã¦ãã¾ãã<br> + +<pre class=code> +void CaretKillFocus(BOOL show) +{ + int CaretX, CaretY; + POINT p[5]; + HPEN oldpen; + HDC hdc; + + DispInitDC(); + hdc = VTDC; + + CaretX = (CursorX-WinOrgX)*FontWidth; + CaretY = (CursorY-WinOrgY)*FontHeight; + + p[0].x = CaretX; + p[0].y = CaretY; + p[1].x = CaretX; + p[1].y = CaretY + FontHeight - 1; + if (CursorOnDBCS) + p[2].x = CaretX + FontWidth*2 - 1; + else + p[2].x = CaretX + FontWidth - 1; + p[2].y = CaretY + FontHeight - 1; + if (CursorOnDBCS) + p[3].x = CaretX + FontWidth*2 - 1; + else + p[3].x = CaretX + FontWidth - 1; + p[3].y = CaretY; + p[4].x = CaretX; + p[4].y = CaretY; + + if (show) { // ããªã´ã³ã«ã¼ã½ã«ã表示ï¼éãã©ã¼ã«ã¹æï¼ + oldpen = SelectObject(hdc, CreatePen(PS_SOLID, 0, ts.VTColor[0])); + } else { + oldpen = SelectObject(hdc, CreatePen(PS_SOLID, 0, ts.VTColor[1])); + } + Polyline(VTDC, p, 5); + oldpen = SelectObject(hdc, oldpen); + DeleteObject(oldpen); + + DispReleaseDC(); +} +</pre> + + + <h3>éã¢ã¯ãã£ãæã®ã«ã¼ã½ã«è¡¨ç¤ºã¿ã¤ãã³ã°</h3> +ãéã¢ã¯ãã£ãæã®ã«ã¼ã½ã«è¡¨ç¤ºã®ã¿ã¤ãã³ã°ã¯ãããã¤ãã®ãã¿ã¼ã³ããããããæ¼ããªã対å¦ãã¦ããå¿ è¦ãããã¾ãã表示ã¿ã¤ãã³ã°ã¨ãã¦ã¯ä»¥ä¸ã®ã¨ããã§ãã + +<p> +<ul> + <li>ã¦ã£ã³ãã¦ãã¢ã¯ãã£ã(Active == TRUE)ã®å ´åã¯ãããªã´ã³ãã£ã¬ããæç»é¢æ°(CaretKillFocus)ãä¸åå¼ã°ãªãããã«ããã</li> + <li>CaretOn()ã§ã¯ãéã¢ã¯ãã£ã(Active == FALSE)ã®å ´åãShowCaret()ãå¼ã¶ã¿ã¤ãã³ã°ã§ãããªã´ã³ãã£ã¬ããæç»é¢æ°(true)ãå¼ã¶ã</li> + <li>CaretOff()ã§ã¯ãéã¢ã¯ãã£ã(Active == FALSE)ã®å ´åãHideCaret()ãå¼ã¶ã¿ã¤ãã³ã°ã§ãããªã´ã³ãã£ã¬ããæç»é¢æ°(false)ãå¼ã¶ã</li> + <li>IsCaretOn()ã®å¤å®è«çã«ã(!Active && (CaretStatus==0)) ã®ORã追å ããã</li> + <li>ChangeCaret()ã¯ä½ãããªã</li> + <li>WM_KILLFOCUSãããã¿ã¤ãã³ã°ã§ã¯ãIsCaretOn()ãçã§ããã°ãããªã´ã³ãã£ã¬ããæç»é¢æ°(true)ãå¼ã¶ã</li> + <li>WM_ACTIVEãããã¿ã¤ãã³ã°ã§ã¯ãIsCaretOn()ãçã§ããã°ãããªã´ã³ãã£ã¬ããæç»é¢æ°(false)ãå¼ã¶ã</li> +</ul> +</p> + +<br> + + +<hr> + + +<h2><a name="serial">ã·ãªã¢ã«ãã¼ã</a></h2> + <h3>æ¦è¦</h3> +ãTera Termã¯UART(16550A)äºæã®ã·ãªã¢ã«ãã¼ãã«å¯¾å¿ãã¦ãããããã·ãªã¢ã«ã³ã³ã½ã¼ã«ã使ç¨ã§ãã¾ããã·ãªã¢ã«ãã¼ãã®ãã¨ããCOM(Communication Port)ãã¼ãã¨å¼ã¶ãã¨ãããã¾ããOSãæ¤åºããCOMãã¼ãã¯ãé ã«"COM1"ã"COM2"ã¨ãã£ãååãä»ããããã¢ããªã±ã¼ã·ã§ã³ããå©ç¨ãããã¨ãã§ãã¾ããMicrosoft Windows XPã§ã¯ãæ大256åã®COMãã¼ãï¼COM1ï½COM256ï¼ã¾ã§ãå©ç¨å¯è½ã§ãã<br> +ããã½ã³ã³ã«æè¼ãããCOMãã¼ãã¯ããããã1ã¤ãå¤ãã¦ã2ã¤ã§ãããæè¿ã§ã¯ã¾ã£ããCOMãã¼ãããªããã½ã³ã³ãåå¨ãã¾ãããã®ãããUSBæ¥ç¶ã«ããã·ãªã¢ã«ãã¼ããå®ç¾ãããUSBã·ãªã¢ã«å¤æã±ã¼ãã«ããçºå£²ããã¦ãã¾ãããããã£ã製åã®ç¹å¾´ã¨ãã¦ãOSã«èªèãããCOMãã¼ãã®çªå·ããã¦ã¼ã¶ãèªç±ã«è¨å®ã§ããããã«ãªã£ã¦ãã¾ããããªãã¡ãTera Termè¦ãã«ã¯ã2ã¤ã®COMãã¼ãããã£ãå ´åããããã"COM1"ã"COM2"ã¨ãã¦èªèã§ããã¨ã¯éããã"COM1"ã"COM7"ã¨ãã£ããµãã«èªèã§ããããã«ãªãå¿ è¦ãããã¾ãã<br> +ã + <h3>COMãã¼ãã®ãªã¹ãã¢ãã</h3> +ããã¤ã¦ã®Tera Termã§ã¯ã"COM1"ãã"COM256"ã¾ã§ã®ãã¹ã¦ã®COMãã¼ãããæ¥ç¶ãã¤ã¢ãã°ã«ãªã¹ãã¢ãããã¦ãã¾ãããã使ãåæãããããã¾ããã§ãããããã§ãæ¥ç¶ãã¤ã¢ãã°ãå¼ã³åºããã¿ã¤ãã³ã°ã«ããã¦ï¼Tera Termèµ·åæã®ã¿ã§ã¯ä¸ååï¼ãOSãèªèãã¦ããCOMãã¼ããæ¤åºããããã«ãã¦ãå¿ è¦ãªCOMãã¼ãã®ã¿ã表示ãããããã«ãã¾ããããã®æ¤åºãã¸ãã¯ããDetectComPorts()#ttcmn.c ã§ããQueryDosDevice() APIã使ç¨ããMS-DOSããã¤ã¹åãã"COM"ãæ¢ãã¾ãã<br> + +<pre class=code> + if (((h = GetModuleHandle("kernel32.dll")) != NULL) && + (GetProcAddress(h, "QueryDosDeviceA") != NULL) && + (QueryDosDevice(NULL, devicesBuff, 65535) != 0)) { + p = devicesBuff; + while (*p != '\0') { + if (strncmp(p, "COM", 3) == 0 && p[3] != '\0') { + ComPortTable[comports++] = atoi(p+3); + if (comports >= ComPortMax) + break; + } + p += (strlen(p)+1); + } +</pre> + + <h3>COMãã¼ãã®ãã«ãã¼ã åå¾</h3> + +ãä¸è¨ã®å¦çã ãã§ãã¦ã¼ã¶ããªãã£ã¯åä¸ããã®ã§ããããããªã欲æ±ã¨ãã¦ãåCOMãã¼ãã«ä»ããããããã«ãã¼ã ããåæã«è¡¨ç¤ºããããªãã¾ããCOMãã¼ãã®çªå·ã¨ã¨ãã«ããã«ãã¼ã ãä»å 表示ã§ããã¨ãããã«ä½¿ãåæããããªããã¨ãæå¾ ããã¾ãããã®èª²é¡ã解決ããã®ããListupSerialPort()#ttcmn.c ã§ãã<br> +ã +<pre class=code> +static void ListupSerialPort(LPWORD ComPortTable, int comports, char **ComPortDesc, int ComPortMax) +{ + GUID ClassGuid[1]; + DWORD dwRequiredSize; + BOOL bRet; + HDEVINFO DeviceInfoSet = NULL; + SP_DEVINFO_DATA DeviceInfoData; + DWORD dwMemberIndex = 0; + int i; + + DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); + + bRet = + SetupDiClassGuidsFromName(_T("PORTS"), (LPGUID) & ClassGuid, 1, + &dwRequiredSize); + if (!bRet) { + goto cleanup; + } + + DeviceInfoSet = + SetupDiGetClassDevs(&ClassGuid[0], NULL, NULL, DIGCF_PRESENT | DIGCF_PROFILE); + + if (DeviceInfoSet) { + dwMemberIndex = 0; + while (SetupDiEnumDeviceInfo + (DeviceInfoSet, dwMemberIndex++, &DeviceInfoData)) { + TCHAR szFriendlyName[MAX_PATH]; + TCHAR szPortName[MAX_PATH]; + DWORD dwReqSize = 0; + DWORD dwPropType; + DWORD dwType = REG_SZ; + HKEY hKey = NULL; + + bRet = SetupDiGetDeviceRegistryProperty(DeviceInfoSet, + &DeviceInfoData, + SPDRP_FRIENDLYNAME, + &dwPropType, + (LPBYTE) + szFriendlyName, + sizeof(szFriendlyName), + &dwReqSize); + + hKey = SetupDiOpenDevRegKey(DeviceInfoSet, + &DeviceInfoData, + DICS_FLAG_GLOBAL, + 0, DIREG_DEV, KEY_READ); + if (hKey) { + long lRet; + dwReqSize = sizeof(szPortName); + lRet = RegQueryValueEx(hKey, + _T("PortName"), + 0, + &dwType, + (LPBYTE) & szPortName, + &dwReqSize); + RegCloseKey(hKey); + } + + if (_strnicmp(szPortName, "COM", 3) == 0) { // COMãã¼ããã©ã¤ããçºè¦ + int port = atoi(&szPortName[3]); + int i; + + for (i = 0 ; i < comports ; i++) { + if (ComPortTable[i] == port) { // æ¥ç¶ãç¢ºèª + ComPortDesc[i] = _strdup(szFriendlyName); + break; + } + } + } + } + } + +cleanup: + SetupDiDestroyDeviceInfoList(DeviceInfoSet); +} +</pre> + + +<hr> + + +<h2><a name="xyzmodem">ãã¤ããªè»¢éãããã³ã«</a></h2> + <h3>æ¦è¦</h3> +ãã½ã³ã³éä¿¡æ代ã«ããã¤ããªãã¡ã¤ã«ã転éããããã®ãããã³ã«ãå¤æ°éçºãããTera Termã§ã¯ããã¤ãã®è»¢éæ¹å¼ããµãã¼ããã¦ãã¾ãããããã®ãããã³ã«ã¯ãä»ã¨ãªã£ã¦ã¯ã¬ã¬ã·ã¼ä»æ§ã§ãããã»ã¨ãã©å©ç¨ããããã¨ã¯ããã¾ãããç¾å¨ã§ã¯ãã«ã¼ã¿ãªã©ã®çµã¿è¾¼ã¿æ©å¨ã«ããã¦ããã¡ã¼ã ã¦ã§ã¢ã®ã¢ãããã¼ãã«ä½¿ããããããã§ãã +æ¬ç¯ã§ã¯ãXMODEM/YMODEM/ZMODEMã«é¢ãã¦èª¬æãã¾ãã<br> + + <h3>ä»æ§</h3> +XMODEMã®ç»å ´ã¯1977å¹´ã¨ããªãå¤ããã¾ãä»æ§ãã·ã³ãã«ã§ãããããããªãªã¸ãã«ã®ä»æ§ãæ¹çããäºç¨®ãå¤æ°åå¨ãã¾ããããã®å¾ãXMODEMãæ¹è¯ããYMODEMãç»å ´ããããã«YMODEMã®æ¬ ç¹ãæ¹åããZMODEMã1990å¹´ååã«çºæããã¾ããã<br> +ãã®ããã«ä»æ§èªä½ããã©ããã®å£ä½ã«ããè¦å®ãããããã§ã¯ãªããããXMODEM/YMODEM/ZMODEMã®å®è£ ã«ã¯ã¯ã»ãããã¾ããTera Termããµãã¼ãããXMODEM/YMODEM/ZMODEMã¯ãã¼ã·ãã¯ãªãã®ã§ãããæ¥ç¶ç¸æã«ãã£ã¦ã¯ãã¾ãåããªããã¨ãå¤ããã¦ã¼ã¶ã«ããã³ã³ãã£ã°ã¬ã¼ã·ã§ã³ãå¿ è¦ã¨ãªãå ´åãããã¾ãã<br> + + <h3>é層æ§é </h3> +ãã¤ããªè»¢éãããã³ã«ã容æã«è¿½å ã§ããããã«ãããããåã¢ã¸ã¥ã¼ã«ã¯é層æ§é ã«ãªã£ã¦ãã¾ãã + +<pre class=code> + +-------------------------------------------------------+ + |ttermpro.exe (filesys.cpp) | + +-------------------------------------------------------+ + |ttpfile.dll (ttfile.c) | + +-------+--------+--------+--------+--------+-----------+ + |Kermit | XMODEM | YMODEM | ZMODEM | B-Plus | Quick-VAN | + +-------+--------+--------+--------+--------+-----------+ +</pre> + +ãã¨ãã°ãXMODEMã®éä¿¡ã¡ãã¥ã¼ãé¸æããå ´åãå¦çã®ããã¼ã¯ä»¥ä¸ã®ããã«ãªãã¾ãã + +<pre class=code> +filesys.cpp: OnFileXSend() -> XMODEMStart() -> OpenProtoDlg() -> +ttfile.c: ProtoInit() -> +xmodem.c: XInit() +</pre> + +ZMODEMã®åä¿¡ã¡ãã¥ã¼ã®å¦çã«é¢ãã¦ã¯ã以ä¸ã®ã¨ããã§ãã + +<pre class=code> +filesys.cpp: OnFileZRcv() -> ZMODEMStart() -> OpenProtoDlg() -> +ttfile.c: ProtoInit() -> +zmodem.c: ZInit() +</pre> + + <h3>ã¨ã³ããªãã¤ã³ã</h3> +ãããªããããã³ã«ãå®è£ ãããã¨ããttpfile.dllã«ãããé¢æ°ã¤ã³ã¿ã¼ãã§ã¤ã¹ï¼ã¨ã³ããªãã¤ã³ãï¼ãç¨æããã¦ããã°ã容æã«æ°è¦ãããã³ã«ã¨ãã¦çµã¿è¾¼ããã¨ãã§ããããã«ãªã£ã¦ãã¾ããã¨ã³ããªãã¤ã³ãã¯ãProtoInit()ã»ProtoParse()ã»ProtoTimeOutProc()ã»ProtoCancel()ããå¼ã³åºããã¾ãã<br> +XMODEMã®ã¨ã³ããªãã¤ã³ãã«ã¤ãã¦ã以ä¸ã«ç¤ºãã¾ãã + +<table border=1 align=center> +<tr> + <th>é¢æ°</th> + <th>æå³</th> +</tr> + +<tr> + <td>XInit</td> + <td>åæå</td> +</tr> + +<tr> + <td>XSendPacket</td> + <td>ãã¡ã¤ã«éä¿¡</td> +</tr> + +<tr> + <td>YReadPacket</td> + <td>ãã¡ã¤ã«åä¿¡</td> +</tr> + +<tr> + <td>XTimeOutProc</td> + <td>ã¿ã¤ã ã¢ã¦ãå¦ç</td> +</tr> + +<tr> + <td>XCancel</td> + <td>ãã£ã³ã»ã«å¦ç</td> +</tr> +</table> +<br> + +ZMODEMã®ã¨ã³ããªãã¤ã³ãã«ã¤ãã¦ã以ä¸ã«ç¤ºãã¾ãã + +<table border=1 align=center> +<tr> + <th>é¢æ°</th> + <th>æå³</th> +</tr> + +<tr> + <td>ZInit</td> + <td>åæå</td> +</tr> + +<tr> + <td>ZParse</td> + <td>ãã¡ã¤ã«éä¿¡</td> +</tr> + +<tr> + <td>ZParse</td> + <td>ãã¡ã¤ã«åä¿¡</td> +</tr> + +<tr> + <td>ZTimeOutProc</td> + <td>ã¿ã¤ã ã¢ã¦ãå¦ç</td> +</tr> + +<tr> + <td>ZCancel</td> + <td>ãã£ã³ã»ã«å¦ç</td> +</tr> +</table> + + <h3>ãã¹ãææ³</h3> +ããã¤ããªè»¢éãããã³ã«ã¯ã·ãªã¢ã«åç·ã§å©ç¨ããããã¨ãå¤ãã®ã§ãããæè¿ã®PCã¯ãã·ãªã¢ã«ãã¼ããæè¼ããã¦ããªããããã·ãªã¢ã«æ¥ç¶ã§ã®ãã¹ããè¡ããã¨ãé£ãããªã£ã¦ãã¾ããããã§ã<a href="http://com0com.sourceforge.net/">com0comã¨ããNull-modem emulator</a>ãå©ç¨ããã¨ã1ã¤ã®PCå ã§ä»®æ³çã«2ã¤ã®COMãã¼ããçæããTera Termå士ãTera Termã¨å¥ã¿ã¼ããã«ã½ããå士ã§ãã·ãªã¢ã«éä¿¡ãè¡ããã¨ãã§ãã¾ãã +ã + +<div align="center"> +<img src="image/devman_com0com.png" width=468 height=171> +</div> + + + <h3>è¨å·</h3> +ããã¤ããªè»¢éãããã³ã«ã§ã¯ãACKãCANã¨ãã£ããã£ã©ã¯ã¿è¡¨è¨ã使ããã¾ããããããã¯ASCIIã³ã¼ã表ããæ¥ã¦ãã¾ããman 7 ascii ã§ASCIIã³ã¼ãä¸è¦§ãåç §ã§ãã¾ãã以ä¸ã«ä»£è¡¨çãªè¨å·ã¨å¤ãå¼ç¨ãã¾ãã +ã + +<pre class=code> +Oct Dec Hex Char Oct Dec Hex Char +------------------------------------------------------------------------ +001 1 01 SOH (start of heading) 101 65 41 A +002 2 02 STX (start of text) 102 66 42 B +004 4 04 EOT (end of transmission) 104 68 44 D +006 6 06 ACK (acknowledge) 106 70 46 F +025 21 15 NAK (negative ack.) 125 85 55 U +030 24 18 CAN (cancel) 130 88 58 X +</pre> + + + + <h3>XMODEM</h3> +XMODEMã¯ããã¡ã¤ã«ã®ãã¼ã¿ãä¸å®ã®ãµã¤ãºï¼128ãã¤ãããã³1024ãã¤ãï¼ã«åå²ãããããã¯ãã¨ã«ACKã確èªããªãããéä¿¡ãè¡ããããã³ã«ã§ãããããã¯åä½ã§ãæ¯åACKã確èªããããã転éé度ã¯éãã¯ããã¾ããããå®è£ ãã·ã³ãã«ã¨ãªãã¾ãã<br> +æå¾ã®ãããã¯ãä¸å®ã®ãµã¤ãºã«æºããªãå ´åã¯ãæºããããã«CPMEOF(0x1A)ãããã£ã³ã°ããã¾ããããªãã¡ããã¼ã¿ãéãã¨ãããªãããã¼ã¿ã®ãµã¤ãºãä¸å®ã®ãµã¤ãºã®åæ°ã¨ãªããæ«å°¾ã«CPMEOFãä»å ãããå ´åãããã¨ãããã¨ã§ãããã®ããããã¡ã¤ã«ã®éä¿¡ã«å®å ¨æ§ãæ±ããå ´åã¯ãXMOMDEã¯ä½¿ãã¾ããããªããCPMEOFã¨ããã®ã¯ãMS-DOSã®å身ã§ããCP/Mã¨ããOSã«ããã¦ãããã¹ããã¡ã¤ã«ã®çµç«¯(EOF)ã表ãå¤ã®ãã¨ã§ãã<br> +ãXMODEMã®ãããã³ã«ã«ã¤ãã¦ã¯ãä¸è¨ãµã¤ããåèã«ãªãã¾ãã + +<ul> +ã<li><a href="http://ja.wikipedia.org/wiki/XMODEM">XMODEM - Wikipedia</a></li> +</ul> +<br> + +ãteraterm.ini 㧠XmodemLog ã¨ã³ããªãæå¹ã«ããã¨ãéä¿¡ãã°ãæ¡åãããã¨ãã§ãã¾ããéä¿¡ãã°ãã¡ã¤ã«ã¯ãttermpro.exe ã¨åããã£ã¬ã¯ããªã«"XMODEM.LOG"ã¨ããååã§çæããã¾ãã + +<pre class=code> +; XMODEM log +XmodemLog=on +</pre> + +ãç°¡åãªä¾ã¨ãã¦ãTera Term(COM10)ãã<a href="http://nanno.dip.jp/softlib/man/rlogin/">RLogin</a>(COM11)ã«å¯¾ãã¦ã67ãã¤ãã®ãã¡ã¤ã«ãéä¿¡ããå ´åã®éä¿¡ãã°ã示ãã¾ããã<<<ãè¡ã¯Tera Termããã¹ãããåä¿¡ãããã¼ã¿ã§ãã>>>ãè¡ã¯Tera Termãéä¿¡ãããã¼ã¿ã§ãã +ã +<pre class=code> +<<< +15 . + +>>> +01 01 FE 23 0D 0A 23 20 6B 6E 6F 77 6E 5F 68 6F ...#..# known_ho +73 74 73 20 66 69 6C 65 20 66 6F 72 20 54 54 53 sts file for TTS +53 48 28 41 6E 20 53 53 48 20 45 78 74 65 6E 73 SH(An SSH Extens +69 6F 6E 20 74 6F 20 54 65 72 61 20 54 65 72 6D ion to Tera Term +29 0D 0A 23 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A )..#............ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A EC .... + +<<< +06 . + +>>> +04 . + +<<< +06 +</pre> + +ãä¸è¨ãã°ã®æå³ã¯ä»¥ä¸ã®ã¨ããã§ãã +ã +<ol> + <li>NAKåä¿¡</li> + <li>ãããã¯ãã¼ã¿ã®éä¿¡</li> + <li>ACKåä¿¡</li> + <li>EOTã®éä¿¡</li> + <li>ACKåä¿¡</li> +</ol> + +ããããã¯ãã¼ã¿ã¯ããããã(3byte)ï¼ãã¼ã¿(128byte)ï¼CRC(1byte)ãããæ§æããã¾ãããã®ä¾ã§ã¯ãéä¿¡ãã¼ã¿ã128byteæªæºãªã®ã§ãããã£ã³ã°ã¨ãã¦CPMEOF(0x1A)ã§åãããã¦ãã¾ãã + +<p></p> + +ã次ã¯ããå°ã大ããã®ãµã¤ãº(1772byte)ã®ãã¼ã¿ãéä¿¡ãã¦ã¿ã¾ãã(1772+127)/128=14 ã§ã14åãããã¯è»¢éãããã¯ãã§ããä¸è¨ã«éä¿¡ãã°ã示ãã¾ãããããã®ç¬¬2ãã¤ãããããã¯çªå·ï¼1ãªãªã¸ã³ï¼ã§ããã1(0x01)ï½14(0x0E)ã¾ã§å¢å ãã¦ãããã¨ãåããã¾ããæå¾ã®ãããã¯ã¯128ãã¤ãã«åã¾ãããã«ãCPMEOFãããã£ã³ã°ã¨ãã¦ä»å ããã¦ãã¾ãã<br> +ããã®ããã«XMODEMã«ããéä¿¡ã§ã¯ãéä¿¡å¾ãã¡ã¤ã«ã®æ«å°¾ã«ã´ããä»ããããã«è¦ããã®ã§ãå³å¯ã«ã¯ãã¡ã¤ã«ãå£ãã¾ãã + +<pre class=code> +<<< +15 . + +>>> +01 01 FE 3B 20 73 61 6D 70 6C 65 20 6D 61 63 72 ...; sample macr +6F 20 6F 66 20 54 65 72 61 20 54 65 72 6D 0D 0A o of Tera Term.. +3B 0D 0A 3B 20 46 69 6C 65 3A 20 73 63 72 65 65 ;..; File: scree +6E 63 61 70 74 75 72 65 2E 74 74 6C 0D 0A 3B 20 ncapture.ttl..; +44 65 73 63 72 69 70 74 69 6F 6E 3A 20 63 61 70 Description: cap +74 75 72 65 20 73 63 72 65 65 6E 20 63 6F 6E 74 ture screen cont +65 6E 74 73 20 61 6E 64 20 77 72 69 74 65 20 74 ents and write t +6F 20 66 69 6C 65 0D 0A 3B 20 45 6E 76 69 72 6F o file..; Enviro +6E 6D 65 F4 nme. + +<<< +06 . + +>>> +01 02 FD 6E 74 3A 20 67 65 6E 65 72 69 63 0D 0A ...nt: generic.. +3B 20 55 70 64 61 74 65 3A 20 32 30 30 37 2F 31 ; Update: 2007/1 +31 2F 32 35 2C 20 31 32 2F 35 2C 20 32 30 30 38 1/25, 12/5, 2008 +2F 30 31 2F 33 30 0D 0A 3B 20 41 75 74 68 6F 72 /01/30..; Author +3A 20 49 57 41 4D 4F 54 4F 20 4B 6F 75 69 63 68 : IWAMOTO Kouich +69 20 28 64 6F 64 61 29 2C 20 59 75 74 61 6B 61 i (doda), Yutaka +20 48 69 72 61 74 61 0D 0A 3B 20 54 69 70 73 3A Hirata..; Tips: +0D 0A 3B 20 20 20 49 74 20 69 73 20 72 65 63 6F ..; It is reco +6D 6D 65 CA mme. + +<<< +06 . + +>>> +01 03 FC 6E 64 65 64 20 74 68 61 74 20 79 6F 75 ...nded that you +20 77 69 6C 6C 20 61 64 64 20 69 6E 20 74 68 65 will add in the +20 66 6F 6C 6C 6F 77 69 6E 67 20 65 6E 74 72 79 following entry +0D 0A 3B 20 20 20 69 6E 20 60 4B 45 59 42 4F 41 ..; in `KEYBOA +52 44 2E 43 4E 46 27 20 66 69 6C 65 20 62 65 63 RD.CNF' file bec +61 75 73 65 20 79 6F 75 20 63 61 6E 20 63 61 70 ause you can cap +74 75 72 65 20 79 6F 75 72 20 73 63 72 65 65 6E ture your screen +0D 0A 3B 20 20 20 61 74 20 6F 6E 65 27 73 20 66 ..; at one's f +69 6E 67 9C ing. + + : + : + : + +<<< +06 . + +>>> +01 0E F1 73 70 72 69 6E 74 66 20 22 73 63 72 65 ...sprintf "scre +65 6E 63 61 70 74 75 72 65 5F 25 73 25 73 25 73 encapture_%s%s%s +2D 25 73 25 73 25 73 2E 74 78 74 22 20 44 61 74 -%s%s%s.txt" Dat +65 59 20 44 61 74 65 4D 20 44 61 74 65 44 20 54 eY DateM DateD T +69 6D 65 48 20 54 69 6D 65 4D 20 54 69 6D 65 53 imeH TimeM TimeS +0D 0A 66 69 6C 65 6E 61 6D 65 20 3D 20 69 6E 70 ..filename = inp +75 74 73 74 72 0D 0A 72 65 74 75 72 6E 0D 0A 1A utstr..return... +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 75 ...u + +<<< +06 . + +>>> +04 . + +<<< +06 +</pre> + + + <h3>YMODEM</h3> +ãYMODEMã¯ãXMODEMãæ¹è¯ãããããã³ã«ã§ããXMODEMã¨ã®éãã¯ããã¤ãããã¾ããã大ããªéãã®1ã¤ã¨ãã¦ããã¡ã¤ã«æ å ±ãéããã¨ãããã¨ã§ããYMODEMã§ã¯ããã¡ã¤ã«åããã¡ã¤ã«ãµã¤ãºããã¹ãã«ç¥ããããã¨ãã§ããã®ã§ãéä¿¡ãããã¡ã¤ã«ã®æ«å°¾ããCPMEOFãé¤å»ãããã¨ãã§ãã¾ãã<br> + +ãYMODEMã®ãããã³ã«ã«ã¤ãã¦ã¯ãä¸è¨ãµã¤ããåèã«ãªãã¾ãã + +<ul> +ã<li><a href="http://ja.wikipedia.org/wiki/YMODEM">YMODEM - Wikipedia</a></li> +</ul> +<br> + +ãteraterm.ini 㧠YmodemLog ã¨ã³ããªãæå¹ã«ããã¨ãéä¿¡ãã°ãæ¡åãããã¨ãã§ãã¾ããéä¿¡ãã°ãã¡ã¤ã«ã¯ãttermpro.exe ã¨åããã£ã¬ã¯ããªã«"YMODEM.LOG"ã¨ããååã§çæããã¾ãã + +<pre class=code> +; YMODEM log +YmodemLog=on +</pre> + +ãç°¡åãªä¾ã¨ãã¦ãTera Term(COM10)ãã<a href="http://nanno.dip.jp/softlib/man/rlogin/">RLogin</a>(COM11)ã«å¯¾ãã¦ã67ãã¤ãã®ãã¡ã¤ã«ãéä¿¡ããå ´åã®éä¿¡ãã°ã示ãã¾ããã<<<ãè¡ã¯Tera Termããã¹ãããåä¿¡ãããã¼ã¿ã§ãã>>>ãè¡ã¯Tera Termãéä¿¡ãããã¼ã¿ã§ãã +ã +<pre class=code> +<<< +43 C + +>>> +02 00 FF 73 73 68 5F 6B 6E 6F 77 6E 5F 68 6F 73 ...ssh_known_hos +74 73 00 36 37 20 31 31 31 36 32 32 30 30 31 30 ts.67 1116220010 +30 20 31 30 30 36 34 34 00 00 00 00 00 00 00 00 0 100644........ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 1B 08 ..... + +<<< +06 43 .C + +>>> +02 01 FE 23 0D 0A 23 20 6B 6E 6F 77 6E 5F 68 6F ...#..# known_ho +73 74 73 20 66 69 6C 65 20 66 6F 72 20 54 54 53 sts file for TTS +53 48 28 41 6E 20 53 53 48 20 45 78 74 65 6E 73 SH(An SSH Extens +69 6F 6E 20 74 6F 20 54 65 72 61 20 54 65 72 6D ion to Tera Term +29 0D 0A 23 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A )..#............ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ................ +1A 1A 1A 6D 7A ...mz + +<<< +06 . + +>>> +04 . + +<<< +06 43 .C + +>>> +02 00 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +00 00 00 00 00 ..... + +<<< +06 +</pre> + +ãä¸è¨ãã°ã®æå³ã¯ä»¥ä¸ã®ã¨ããã§ãã +ã +<ol> + <li>'C'ï¼éä¿¡è¦æ±ï¼åä¿¡</li> + <li>ãããã¯0ï¼ãã¡ã¤ã«æ å ±ï¼ã®éä¿¡</li> + <li>ACKåä¿¡</li> + <li>'C'ï¼éä¿¡è¦æ±ï¼åä¿¡</li> + <li>ãããã¯1ã®éä¿¡</li> + <li>ACKåä¿¡</li> + <li>EOTã®éä¿¡</li> + <li>ACKåä¿¡</li> + <li>'C'ï¼éä¿¡è¦æ±ï¼åä¿¡</li> + <li>ãããã¯0ï¼ãªã¼ã«ã¼ãï¼ã®éä¿¡</li> + <li>ACKåä¿¡</li> +</ol> + + + + <h3>ZMODEM</h3> + +TBD + + + + <h3>KERMIT</h3> +ãKERMITï¼ã«ã¼ãããï¼ã»ãµãã¹ããªã¼ãã«ç»å ´ããã«ã¨ã«ã®ããããï¼ã¯ã1981å¹´ã«ã³ãã³ãã¢å¤§å¦ã§éçºããããã¡ã¤ã«è»¢éãããã³ã«ã§ãããç¾å¨ã¯ã«ã¼ãããããã¸ã§ã¯ãã«ããã¡ã³ããã³ã¹ããã¦ãã¾ããä¸è¨ã®ãµã¤ãããä»æ§æ¸ãå ¥æã§ãã¾ãã<br> +ã +<ul> + <li><a href="http://www.kermitproject.org/">The Kermit Project</a></li> +</ul> +<br> + +ãä¸è¨ãµã¤ãã§ã¯ãã½ã¼ã¹ã³ã¼ããé å¸ããã¦ãããæ§ã ãªãã©ãããã©ã¼ã ã«å®è£ ããã¦ãã¾ããå®è£ ã®å称ã¨ãã¦ã¯ãC-KermitãE-KermitãKermit95ãªã©ãããã¾ãã<br> +ãteraterm.ini 㧠KmtLog ã¨ã³ããªãæå¹ã«ããã¨ãéä¿¡ãã°ãæ¡åãããã¨ãã§ãã¾ããéä¿¡ãã°ãã¡ã¤ã«ã¯ãttermpro.exe ã¨åããã£ã¬ã¯ããªã«"KERMIT.LOG"ã¨ããååã§çæããã¾ãã +ã +<pre class=code> +; Kermit log +KmtLog=on +</pre> + +ãKERMITã¯å ã ä½éãªã·ãªã¢ã«éä¿¡ãæ³å®ãã¦ãããããä¸åº¦ã«éãããã¼ã¿ãµã¤ãºã¯ãããã94ãã¤ãã§ãããã ããæ¡å¼µãªãã·ã§ã³ã§æ°åãã¤ãã®ãã¼ã¿ãæ±ããã¨ã¯ã§ãã¾ãããã¯ã©ã¤ã¢ã³ãã¨ãµã¼ãã®ä¸¡æ¹ãå½è©²æ©è½ããµãã¼ããã¦ããå¿ è¦ãããã¾ãã<br> +ããã±ããã®ãã©ã¼ãããã¯åºæ¬å½¢å¼ã¨æ¡å¼µå½¢å¼ããããä»æ§æ¸ã®ãAppendix I Packet Format and Typesãã«åãããããå³è§£ãããã¾ããä¸è¨ã«å¼ç¨ãã¾ãã<br> +ã以ä¸ã¯åºæ¬å½¢å¼ã§ãã94ãã¤ãã¾ã§ããæ±ãã¾ããã + +<pre class=code> +Basic Kermit Packet Layout + |<------Included in CHECK------>| + | | ++------+-----+-----+------+------ - - -+-------+ +| MARK | LEN | SEQ | TYPE | DATA | CHECK |<terminator> ++------+-----+-----+------+------ - - -+-------+ + | | + |<--------LEN-32 characters------>| + + MARK ãã±ããã®å é ãCTRL-A(0x01)ãå ¥ãã + LEN ãã±ãããµã¤ãº+32ã"LEN+2"ãã¤ããå ¨ä½ãµã¤ãºã¨ãªãã + SEQ ãã·ã¼ã±ã³ã¹çªå·+32ãã®å°ä½64ãã·ã¼ã±ã³ã¹çªå·ã¯0ï½63ã¾ã§ã + TYPE 大æåã¢ã«ãã¡ãããã§ãã±ããã®ç¨®å¥ã表ãã + DATA ãã¼ã¿ + CHECK å ç®ãã§ãã¯ãµã ã1,2,3ãã¤ãã®ããããã®å½¢å¼ãé¸ã¹ãã +</pre> + +ã以ä¸ã¯æ¡å¼µå½¢å¼ã§ãã + +<pre class=code> +Kermit Extended Packet Layout + |<-------------------------Included in CHECK------------->| + | | + |<-------Included in HCHECK------->| | + | | | ++------+-----+-----+------+-------+-------+--------+----- - - - -+-------+ +| MARK | | SEQ | TYPE | LENX1 | LENX2 | HCHECK | DATA | CHECK | ++------+-----+-----+------+-------+-------+--------+----- - - - -+-------+ + blank | | + |<------------------->| + LX1=LENX1-32, LX2=LX2-32 95 x LX1 + LX2 chars +HCHECK is a single-character type 1 checksum +</pre> + +ãæ¡å¼µå½¢å¼ã§ã¯94ãã¤ã以ä¸ã®ãã¼ã¿ãä¸åº¦ã«éããããã«ããããããã¼ã¿ãµã¤ãºã表ç¾ããé åã2ãã¤ãã«å¢ãã¦ãã¾ããåºæ¬å½¢å¼ã®"LEN"ã¯å¸¸ã«ã¼ãã§ãï¼32ãå ç®ããã®ã§ãASCIIã³ã¼ãã®ç©ºç½ã«ãªãï¼ãã¾ããããããµã¤ãºã3ãã¤ãå¢ãã¦ããããããç¨ã®ãã§ãã¯ãµã ã追å ããã¦ãã¾ãã<br> +ã<br> +ã +ãä¸è¨ã¯åææååã§ãã +ã +<pre class=code> +Initialization String +1 2 3 4 5 6 7 8 9 10 ++-------+-------+-------+-------+-------+-------+-------+-------+-------+- - +| MAXL | TIME | NPAD | PADC | EOL | QCTL | QBIN | CHKT | REPT | ++-------+-------+-------+-------+-------+-------+-------+-------+-------+- - + 10 CAPAS+1 CAPAS+2 CAPAS+3 +- --+-------+ - -+--------+--------+--------+- - + | CAPAS ... 0| WINDO | MAXLX1 | MAXLX1 | +- --+-------+- -+--------+--------+--------+- - + +MAXL Maximum length (0-94) +32 +TIME Timeout, seconds (0-94) +32 +NPAD Number of pad characters (0-94) +32 +EOL Packet terminator (0-63) +32 +QCTL Control prefix, literal +QBIN 8th bit prefix, literal +CHKT Block check type {1,2,3}, literal +REPT Repeat count prefix, literal +CAPAS Extendable capabilities mask, ends when value-32 is even +WINDO Window size (0-31) +32 +MAXLX1 + High part of extended packet maximum length (int(max/95)+32) +MAXLX2 + Low part of extended packet maximum length (mod(max,95)+32) +</pre> + +ãä¸è¨ã¯ãã±ãã種å¥ã§ãã + +<pre class=code> +Packet Types +Y Acknowledgment (ACK). Data according to what kind of packet is being acknowledged. +N Negative Acknowledgment (NAK). Data field always empty. +S Send Initiation. Data field contains unencoded initialization string. Tells receiver to expect files. ACK to this packet also contains unencoded initialization string. +I Initialize. Data field contains unencoded initialization string. Sent to server to set parameters prior to a command. ACK to this packet also contains unencoded initialization string. +F File Header. Indicates file data about to arrive for named file. Data field contains encoded file name. ACK to this packet may contain encoded name receiver will store file under. +X Text Header. Indicates screen data about to arrive. Data field contains encoded heading for display. +A File Attributes. Data field contains unencoded attributes. ACK may contain unencoded corresponding +agreement or refusal, per attribute. +D Data Packet. Data field contains encoded file or screen data. ACK may contain X to interrupt sending this file, Z to interrupt entire transaction. +Z End of file. Data field may contain D for Discard. +B Break transmission. +E Error. Data field contains encoded error message. +R Receive Initiate. Data field contains encoded file name. +C Host Command. Data field contains encoded command for hostâs command processor. +K Kermit Command. Data field contains encoded command for Kermit command processor. +T Timeout psuedopacket, for internal use. +Q Block check error psuedopacket, for internal use. +G Generic Kermit Command. Data field contains a single character subcommand, followed by zero or more + length-encoded operands, encoded after formation: + I Login [<%user[%password[%account]]>] + C CWD, Change Working Directory [<%directory[%password]>] + L Logout, Bye + F Finish (Shut down the server, but donât logout). + D Directory [<%filespec>] + U Disk Usage Query [<%area>] + E Erase (delete) <%filespec> + T Type <%filespec> + R Rename <%oldname%newname> + K Copy <%source%destination> + W Whoâs logged in? [<%user ID or network host[%options]>] + M Send a short Message <%destination%text> + H Help [<%topic>] + Q Server Status Query + P Program <%[program-filespec][%program-commands]> + J Journal <%command[%argument]> + V Variable <%command[%argument[%argument]]> +</pre> +--> + + +</BODY> +</HTML> Modified: trunk/doc/en/teraterm.hhc =================================================================== --- trunk/doc/en/teraterm.hhc 2015-09-16 15:18:05 UTC (rev 6023) +++ trunk/doc/en/teraterm.hhc 2015-09-19 12:48:37 UTC (rev 6024) @@ -560,6 +560,11 @@ <param name="Local" value="html\reference\develop.txt"> <param name="ImageNumber" value="11"> </OBJECT> + <LI> <OBJECT type="text/sitemap"> + <param name="Name" value="Source Code Overview"> + <param name="Local" value="html\reference\sourcecode.html"> + <param name="ImageNumber" value="11"> + </OBJECT> </UL> <LI> <OBJECT type="text/sitemap"> <param name="Name" value="MACRO help">