[Ttssh2-commit] [7292] マクロのファイルハンドルを変数にそのまま入れないようにした

アーカイブの一覧に戻る
scmno****@osdn***** scmno****@osdn*****
2018年 12月 1日 (土) 01:28:48 JST


Revision: 7292
          http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7292
Author:   zmatsuo
Date:     2018-12-01 01:28:47 +0900 (Sat, 01 Dec 2018)
Log Message:
-----------
マクロのファイルハンドルを変数にそのまま入れないようにした

Modified Paths:
--------------
    trunk/teraterm/common/win16api.c
    trunk/teraterm/ttpmacro/ttl.c

-------------- next part --------------
Modified: trunk/teraterm/common/win16api.c
===================================================================
--- trunk/teraterm/common/win16api.c	2018-11-30 16:28:38 UTC (rev 7291)
+++ trunk/teraterm/common/win16api.c	2018-11-30 16:28:47 UTC (rev 7292)
@@ -43,7 +43,7 @@
 		// read/write (teratermではttpmacro/ttl.c内の1箇所のみで使用されている
 		handle = CreateFileA(FileName,
 							 GENERIC_WRITE|GENERIC_READ, FILE_SHARE_WRITE, NULL,
-							 CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+							 OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
 		break;
 	default:
 		assert(FALSE);
@@ -89,8 +89,13 @@
 }
 
 /*
+ *	@param[in]	iOrigin
+ *				@arg 0(FILE_BEGIN)
+ *				@arg 1(FILE_CURRENT)
+ *				@arg 2(FILE_END)
  *	@retval ファイル位置
  *	@retval HFILE_ERROR((HFILE)-1)	エラー
+ *	@retval INVALID_SET_FILE_POINTER((DWORD)-1) エラー
  */
 LONG win16_llseek(HANDLE hFile, LONG lOffset, int iOrigin)
 {

Modified: trunk/teraterm/ttpmacro/ttl.c
===================================================================
--- trunk/teraterm/ttpmacro/ttl.c	2018-11-30 16:28:38 UTC (rev 7291)
+++ trunk/teraterm/ttpmacro/ttl.c	2018-11-30 16:28:47 UTC (rev 7292)
@@ -1,4 +1,4 @@
-/*
+/*
  * Copyright (C) 1994-1998 T. Teranishi
  * (C) 2005-2018 TeraTerm Project
  * All rights reserved.
@@ -93,12 +93,53 @@
 static intptr_t DirHandle[NumDirHandle] = {-1,-1, -1, -1, -1, -1, -1, -1};
 /* for "FileMarkPtr" and "FileSeekBack" commands */
 #define NumFHandle 16
-static HANDLE FHandle[NumFHandle];
+//static HANDLE FHandle[NumFHandle];
+static HANDLE FHandle_[NumFHandle];
 static long FPointer[NumFHandle];
 
 // forward declaration
 int ExecCmnd();
 
+static void HandleInit()
+{
+	int i;
+	for (i=0; i<_countof(FHandle_); i++) {
+		FHandle_[i] = INVALID_HANDLE_VALUE;
+	}
+}
+
+/**
+ *	@retval	ファイルハンドルインデックス(0~)
+ *			-1のときエラー
+ */
+static int HandlePut(HANDLE FH)
+{
+	int i;
+	if (FH == INVALID_HANDLE_VALUE) {
+		return -1;
+	}
+	for (i=0; i<_countof(FHandle_); i++) {
+		if (FHandle_[i] == INVALID_HANDLE_VALUE) {
+			FHandle_[i] = FH;
+			return i;
+		}
+	}
+	return -1;
+}
+
+static HANDLE HandleGet(int fhi)
+{
+	if (fhi < 0 || _countof(FHandle_) < fhi) {
+		return INVALID_HANDLE_VALUE;
+	}
+	return FHandle_[fhi];
+}
+
+static void HandleFree(int fhi)
+{
+	FHandle_[fhi] = INVALID_HANDLE_VALUE;
+}
+
 BOOL InitTTL(HWND HWin)
 {
 	int i;
@@ -115,7 +156,7 @@
 	// System variables
 	NewIntVar("result",0);
 	NewIntVar("timeout",0);
-	NewIntVar("mtimeout",0);    // \x83~\x83\x8A\x95b\x92P\x88ʂ̃^\x83C\x83\x80\x83A\x83E\x83g\x97p (2009.1.23 maya)
+	NewIntVar("mtimeout",0);    // ミリ秒単位のタイムアウト用 (2009.1.23 maya)
 	NewStrVar("inputstr","");
 	NewStrVar("matchstr","");   // for 'waitregex' command (2005.10.7 yutaka)
 	NewStrVar("groupmatchstr1","");   // for 'waitregex' command (2005.10.15 yutaka)
@@ -131,9 +172,9 @@
 	if (ParamCnt == 0) {
 		ParamCnt++;
 	}
-	NewIntVar("paramcnt",ParamCnt);  // \x83t\x83@\x83C\x83\x8B\x96\xBC\x82\xE0\x8A܂ވ\xF8\x90\x94\x82̌\x94 (2012.4.10 yutaka)
+	NewIntVar("paramcnt",ParamCnt);  // ファイル名も含む引数の個数 (2012.4.10 yutaka)
 
-	// \x8B\x8C\x8C`\x8E\xAE\x82̃p\x83\x89\x83\x81\x81[\x83^\x90ݒ\xE8 (param1 \x81` param9)
+	// 旧形式のパラメータ設定 (param1 〜 param9)
 	NewStrVar("param1", ShortName);
 	if (Params) {
 		for (i=2; i<=9; i++) {
@@ -147,7 +188,7 @@
 		}
 	}
 
-	// \x90V\x8C`\x8E\xAE\x82̃p\x83\x89\x83\x81\x81[\x83^\x90ݒ\xE8 (params[1\x81`ParamCnt])
+	// 新形式のパラメータ設定 (params[1〜ParamCnt])
 	if (NewStrAryVar("params", ParamCnt+1) == 0) {
 		Err = 0;
 		GetStrAryVarByName(&ParamsVarId, "params", &Err);
@@ -178,8 +219,7 @@
 
 	for (i=0; i<NumDirHandle; i++)
 		DirHandle[i] = -1L;
-	for (i=0; i<NumFHandle; i++)
-		FHandle[i] = INVALID_HANDLE_VALUE;
+	HandleInit();
 
 	if (! InitBuff(FileName))
 	{
@@ -752,7 +792,7 @@
 static unsigned int crc16(int n, unsigned char c[])
 {
 #define CRC16POLY1  0x1021U  /* x^{16}+x^{12}+x^5+1 */
-#define CRC16POLY2  0x8408U  /* \x8D\xB6\x89E\x8Bt\x93] */
+#define CRC16POLY2  0x8408U  /* 左右逆転 */
 
 	int i, j;
 	unsigned long r;
@@ -772,7 +812,7 @@
 #define CRC32POLY1 0x04C11DB7UL
 	/* x^{32}+x^{26}+x^{23}+x^{22}+x^{16}+x^{12}+x^{11]+
 	   x^{10}+x^8+x^7+x^5+x^4+x^2+x^1+1 */
-#define CRC32POLY2 0xEDB88320UL  /* \x8D\xB6\x89E\x8Bt\x93] */
+#define CRC32POLY2 0xEDB88320UL  /* 左右逆転 */
 	int i, j;
 	unsigned long r;
 
@@ -786,7 +826,7 @@
 	return r ^ 0xFFFFFFFFUL;
 }
 
-// \x83`\x83F\x83b\x83N\x83T\x83\x80\x83A\x83\x8B\x83S\x83\x8A\x83Y\x83\x80\x81E\x8B\xA4\x92ʃ\x8B\x81[\x83`\x83\x93
+// チェックサムアルゴリズム・共通ルーチン
 WORD TTLDoChecksum(enum checksum_type type)
 {
 	TStrVal Str;
@@ -848,12 +888,12 @@
 	if (Str[0]==0) return Err;
 
 	fh = CreateFile(Str,GENERIC_READ,0,NULL,OPEN_EXISTING,
-		FILE_ATTRIBUTE_NORMAL,NULL); /* \x83t\x83@\x83C\x83\x8B\x83I\x81[\x83v\x83\x93 */
+		FILE_ATTRIBUTE_NORMAL,NULL); /* ファイルオープン */
 	if (fh == INVALID_HANDLE_VALUE) {
 		result = -1;
 		goto error;
 	}
-	/* \x83t\x83@\x83C\x83\x8B\x83}\x83b\x83s\x83\x93\x83O\x83I\x83u\x83W\x83F\x83N\x83g\x8D쐬 */
+	/* ファイルマッピングオブジェクト作成 */
 	hMap = CreateFileMapping(fh,NULL,PAGE_READONLY,0,0,NULL);
 	if (hMap == NULL) {
 		result = -1;
@@ -860,7 +900,7 @@
 		goto error;
 	}
 
-	/* \x83t\x83@\x83C\x83\x8B\x82\xF0\x83}\x83b\x83v\x82\xB5\x81A\x90擪\x83A\x83h\x83\x8C\x83X\x82\xF0lpBuf\x82Ɏ擾 */
+	/* ファイルをマップし、先頭アドレスをlpBufに取得 */
 	lpBuf = (LPBYTE)MapViewOfFile(hMap,FILE_MAP_READ,0,0,0);
 	if (lpBuf == NULL) {
 		result = -1;
@@ -1259,12 +1299,12 @@
 			return Err;
 		}
 
-		// \x83t\x83@\x83C\x83\x8B\x83p\x83X\x82Ɋ‹\xAB\x95ϐ\x94\x82\xAA\x8A܂܂\xEA\x82Ă\xA2\x82\xE9\x82Ȃ\xE7\x82΁A\x93W\x8AJ\x82\xB7\x82\xE9\x81B
+		// ファイルパスに環境変数が含まれているならば、展開する。
 		ExpandEnvironmentStrings(srcptr, deststr, MaxStrLen);
 		SetStrVal(VarId, deststr);
 	}
 	else { // expandenv strvar
-		// \x83t\x83@\x83C\x83\x8B\x83p\x83X\x82Ɋ‹\xAB\x95ϐ\x94\x82\xAA\x8A܂܂\xEA\x82Ă\xA2\x82\xE9\x82Ȃ\xE7\x82΁A\x93W\x8AJ\x82\xB7\x82\xE9\x81B
+		// ファイルパスに環境変数が含まれているならば、展開する。
 		ExpandEnvironmentStrings(StrVarPtr(VarId), deststr, MaxStrLen);
 		SetStrVal(VarId, deststr);
 	}
@@ -1275,18 +1315,17 @@
 WORD TTLFileClose()
 {
 	WORD Err;
+	int fhi;	// handle index
 	HANDLE FH;
-	int i;
 
 	Err = 0;
-	GetIntVal(&FH,&Err);
+	GetIntVal(&fhi,&Err);
+	FH = HandleGet(fhi);
 	if ((Err==0) && (GetFirstChar()!=0))
 		Err = ErrSyntax;
 	if (Err!=0) return Err;
 	_lclose(FH);
-	i = 0;
-	while ((i<NumFHandle) && (FH!=FHandle[i])) i++;
-	if (i<NumFHandle) FHandle[i] = INVALID_HANDLE_VALUE;
+	HandleFree(fhi);
 	return Err;
 }
 
@@ -1387,6 +1426,7 @@
 	WORD Err;
 	TVarId VarId;
 	HANDLE FH;
+	int fhi;
 	TStrVal FName;
 
 	Err = 0;
@@ -1412,7 +1452,11 @@
 	else {
 		SetResult(0);
 	}
-	SetIntVal(VarId, FH);
+	fhi = HandlePut(FH);
+	SetIntVal(VarId, fhi);
+	if (fhi == -1) {
+		_lclose(FH);
+	}
 	return Err;
 }
 
@@ -1449,27 +1493,21 @@
 WORD TTLFileMarkPtr()
 {
 	WORD Err;
+	int fhi;
 	HANDLE FH;
-	int i;
+	LONG pos;
 
 	Err = 0;
-	GetIntVal(&FH,&Err);
+	GetIntVal(&fhi,&Err);
+	FH = HandleGet(fhi);
 	if ((Err==0) && (GetFirstChar()!=0))
 		Err = ErrSyntax;
 	if (Err!=0) return Err;
-	i = 0;
-	while ((i<NumFHandle) && (FH!=FHandle[i])) i++;
-	if (i>=NumFHandle)
-	{
-		i = 0;
-		while ((i<NumFHandle) && (FHandle[i]!=INVALID_HANDLE_VALUE)) i++;
-		if (i<NumFHandle) FHandle[i] = FH;
+	pos = _llseek(FH,0,1);	 /* mark current pos */
+	if (pos == INVALID_SET_FILE_POINTER) {
+		pos = 0;	// ?
 	}
-	if (i<NumFHandle)
-	{
-		FPointer[i] = _llseek(FH,0,1); /* mark current pos */
-		if (FPointer[i]<0) FPointer[i] = 0;
-	}
+	FPointer[fhi] = pos;
 	return Err;
 }
 
@@ -1537,6 +1575,7 @@
 {
 	WORD Err;
 	TVarId VarId;
+	int fhi;
 	HANDLE FH;
 	int Append, ReadonlyFlag=0;
 	TStrVal FName;
@@ -1567,11 +1606,21 @@
 	}
 	if (FH == INVALID_HANDLE_VALUE)
 		FH = _lcreat(FName,0);
-	if (FH == INVALID_HANDLE_VALUE) FH = INVALID_HANDLE_VALUE;
-	SetIntVal(VarId, FH);
-	if (FH == INVALID_HANDLE_VALUE) return Err;
-	if (Append!=0) _llseek(FH, 0, 2);  
-	return Err;
+	if (FH == INVALID_HANDLE_VALUE) {
+		SetIntVal(VarId, -1);
+		return ErrCantOpen;
+	}
+	fhi = HandlePut(FH);
+	if (fhi == -1) {
+		SetIntVal(VarId, -1);
+		_lclose(FH);
+		return ErrCantOpen;
+	}
+	SetIntVal(VarId, fhi);
+	if (Append!=0) {
+		_llseek(FH, 0, 2/*FILE_END*/);
+	}
+	return 0;	// no error
 }
 
 // Format: filelock <file handle> [<timeout>]
@@ -1589,7 +1638,7 @@
 	GetIntVal(&FH,&Err);
 	if (Err!=0) return Err;
 
-	timeout = -1;  // \x96\xB3\x8C\xC0\x91\xE5
+	timeout = -1;  // 無限大
 	if (CheckParameterGiven()) {
 		GetIntVal(&timeout, &Err);
 		if (Err!=0) return Err;
@@ -1599,7 +1648,7 @@
 	dwStart = GetTickCount();
 	do {
 		ret = LockFile((HANDLE)FH, 0, 0, (DWORD)-1, (DWORD)-1);
-		if (ret != 0) { // \x83\x8D\x83b\x83N\x90\xAC\x8C\xF7
+		if (ret != 0) { // ロック成功
 			result = 0;  // success
 			break;
 		}
@@ -1625,7 +1674,7 @@
 	if (Err!=0) return Err;
 
 	ret = UnlockFile((HANDLE)FH, 0, 0, (DWORD)-1, (DWORD)-1);
-	if (ret != 0) { // \x83A\x83\x93\x83\x8D\x83b\x83N\x90\xAC\x8C\xF7
+	if (ret != 0) { // アンロック成功
 		SetResult(0);
 	} else {
 		SetResult(1);
@@ -1638,6 +1687,7 @@
 {
 	WORD Err;
 	TVarId VarId;
+	int fhi;
 	HANDLE FH;
 	int i, c;
 	TStrVal Str;
@@ -1645,7 +1695,8 @@
 	BYTE b;
 
 	Err = 0;
-	GetIntVal(&FH, &Err);
+	GetIntVal(&fhi, &Err);
+	FH = HandleGet(fhi);
 	GetStrVar(&VarId, &Err);
 	if ((Err==0) && (GetFirstChar()!=0))
 		Err = ErrSyntax;
@@ -1688,27 +1739,29 @@
 
 
 // Format: fileread <file handle> <read byte> <strvar>
-// \x8Ew\x92肵\x82\xBD\x83o\x83C\x83g\x90\x94\x82\xBE\x82\xAF\x83t\x83@\x83C\x83\x8B\x82\xA9\x82\xE7\x93ǂݍ\x9E\x82ށB
-// \x82\xBD\x82\xBE\x82\xB5\x81A<read byte>\x82\xCD 1\x81`255 \x82܂ŁB
+// 指定したバイト数だけファイルから読み込む。
+// ただし、<read byte>は 1〜255 まで。
 // (2006.11.1 yutaka)
 WORD TTLFileRead()
 {
 	WORD Err;
 	TVarId VarId;
+	int fhi;
 	HANDLE FH;
 	int i, c;
-	int ReadByte;   // \x93ǂݍ\x9E\x82ރo\x83C\x83g\x90\x94
+	int ReadByte;   // 読み込むバイト数
 	TStrVal Str;
 	BOOL EndFile, EndLine;
 	BYTE b;
 
 	Err = 0;
-	GetIntVal(&FH,&Err);
+	GetIntVal(&fhi,&Err);
+	FH = HandleGet(fhi);
 	GetIntVal(&ReadByte,&Err);
 	GetStrVar(&VarId,&Err);
 	if ((Err==0) && (GetFirstChar()!=0))
 		Err = ErrSyntax;
-	if ((Err==0) && (ReadByte < 1 || ReadByte > MaxStrLen-1))  // \x94͈̓`\x83F\x83b\x83N
+	if ((Err==0) && (ReadByte < 1 || ReadByte > MaxStrLen-1))  // 範囲チェック
 		Err = ErrSyntax;
 	if (Err!=0) return Err;
 
@@ -1768,7 +1821,7 @@
 		return Err;
 	}
 	if (rename(FName1,FName2) != 0) {
-		// \x83\x8A\x83l\x81[\x83\x80\x82Ɏ\xB8\x94s\x82\xB5\x82\xBD\x82\xE7\x81A\x83G\x83\x89\x81[\x82ŕԂ\xB7\x81B
+		// リネームに失敗したら、エラーで返す。
 		SetResult(-3);
 		return Err;
 	}
@@ -1800,11 +1853,13 @@
 WORD TTLFileSeek()
 {
 	WORD Err;
+	int fhi;
 	HANDLE FH;
 	int i, j;
 
 	Err = 0;
-	GetIntVal(&FH,&Err);
+	GetIntVal(&fhi,&Err);
+	FH = HandleGet(fhi);
 	GetIntVal(&i,&Err);
 	GetIntVal(&j,&Err);
 	if ((Err==0) && (GetFirstChar()!=0))
@@ -1817,19 +1872,17 @@
 WORD TTLFileSeekBack()
 {
 	WORD Err;
+	int fhi;
 	HANDLE FH;
-	int i;
 
 	Err = 0;
-	GetIntVal(&FH,&Err);
+	GetIntVal(&fhi,&Err);
+	FH = HandleGet(fhi);
 	if ((Err==0) && (GetFirstChar()!=0))
 		Err = ErrSyntax;
 	if (Err!=0) return Err;
-	i = 0;
-	while ((i<NumFHandle) && (FH!=FHandle[i])) i++;
 	/* move back to the marked pos */
-	if (i<NumFHandle)
-		_llseek(FH,FPointer[i],0);
+	_llseek(FH,FPointer[fhi],0);
 	return Err;
 }
 
@@ -1891,6 +1944,7 @@
 WORD TTLFileStrSeek()
 {
 	WORD Err;
+	int fhi;
 	HANDLE FH;
 	int Len, i, c;
 	TStrVal Str;
@@ -1898,7 +1952,8 @@
 	long int pos;
 
 	Err = 0;
-	GetIntVal(&FH,&Err);
+	GetIntVal(&fhi,&Err);
+	FH = HandleGet(fhi);
 	GetStrVal(Str,&Err);
 	if ((Err==0) &&
 	    ((strlen(Str)==0) || (GetFirstChar()!=0)))
@@ -1905,7 +1960,7 @@
 		Err = ErrSyntax;
 	if (Err!=0) return Err;
 	pos = _llseek(FH,0,1);
-	if (pos==-1) return Err;
+	if (pos == INVALID_SET_FILE_POINTER) return Err;
 
 	Len = strlen(Str);
 	i = 0;
@@ -1934,6 +1989,7 @@
 WORD TTLFileStrSeek2()
 {
 	WORD Err;
+	int fhi;
 	HANDLE FH;
 	int Len, i, c;
 	TStrVal Str;
@@ -1942,7 +1998,8 @@
 	BOOL Last;
 
 	Err = 0;
-	GetIntVal(&FH,&Err);
+	GetIntVal(&fhi,&Err);
+	FH = HandleGet(fhi);
 	GetStrVal(Str,&Err);
 	if ((Err==0) &&
 	    ((strlen(Str)==0) || (GetFirstChar()!=0)))
@@ -1949,7 +2006,7 @@
 		Err = ErrSyntax;
 	if (Err!=0) return Err;
 	pos = _llseek(FH,0,1);
-	if (pos<=0) return Err;
+	if (pos == INVALID_SET_FILE_POINTER) return Err;
 
 	Len = strlen(Str);
 	i = 0;
@@ -1970,9 +2027,10 @@
 		}
 	} while (!Last && (i!=Len));
 	if (i==Len) {
-		// \x83t\x83@\x83C\x83\x8B\x82\xCC1\x83o\x83C\x83g\x96ڂ\xAA\x83q\x83b\x83g\x82\xB7\x82\xE9\x82ƁA\x83t\x83@\x83C\x83\x8B\x83|\x83C\x83\x93\x83^\x82\xAA\x93˂\xAB\x94j\x82\xC1\x82\xC4 -1 \x82ɂȂ\xE9\x82̂ŁA
-		// \x83[\x83\x8D\x83I\x83t\x83Z\x83b\x83g\x82ɂȂ\xE9\x82悤\x82ɒ\xB2\x90\xAE\x82\xB7\x82\xE9\x81B(2008.10.10 yutaka)
-		if (pos2 < 0)
+		// ファイルの1バイト目がヒットすると、ファイルポインタが突き破って
+		// INVALID_SET_FILE_POINTER になるので、
+		// ゼロオフセットになるように調整する。(2008.10.10 yutaka)
+		if (pos == INVALID_SET_FILE_POINTER) 
 			_llseek(FH, 0, 0);
 		SetResult(1);
 	} else {
@@ -2010,7 +2068,7 @@
 		goto end;
 	}
 
-	// \x83t\x83@\x83C\x83\x8B\x82\xF0\x8Ew\x92肵\x82\xBD\x83T\x83C\x83Y\x82Ő؂\xE8\x8Bl\x82߂\xE9\x81B
+	// ファイルを指定したサイズで切り詰める。
    ret = _sopen_s( &fh, FName, _O_RDWR | _O_CREAT, _SH_DENYNO, _S_IREAD | _S_IWRITE );
    if (ret != 0) {
 		Err = ErrCantOpen;
@@ -2037,12 +2095,14 @@
 WORD TTLFileWrite(BOOL addCRLF)
 {
 	WORD Err, P;
+	int fhi;
 	HANDLE FH;
 	int Val;
 	TStrVal Str;
 
 	Err = 0;
-	GetIntVal(&FH, &Err);
+	GetIntVal(&fhi, &Err);
+	FH = HandleGet(fhi);
 	if (Err) return Err;
 
 	P = LinePtr;
@@ -2392,7 +2452,7 @@
 		Err = ErrSyntax;
 	if (Err!=0) return Err;
 
-	// \x8E\xA9\x95\xAA\x8E\xA9\x90g\x82̑SIPv4\x83A\x83h\x83\x8C\x83X\x82\xF0\x8E擾\x82\xB7\x82\xE9\x81B
+	// 自分自身の全IPv4アドレスを取得する。
 	if (WSAStartup(MAKEWORD(2,2), &ws) != 0) {
 		SetResult(-1);
 		SetIntVal(VarId2, 0);
@@ -2431,7 +2491,7 @@
 }
 
 
-// IPv6\x83A\x83h\x83\x8C\x83X\x82𕶎\x9A\x97\xF1\x82ɕϊ\xB7\x82\xB7\x82\xE9\x81B
+// IPv6アドレスを文字列に変換する。
 static void myInetNtop(int Family, char *pAddr, char *pStringBuf, size_t StringBufSize)
 {
 	int i;
@@ -2466,7 +2526,7 @@
 		Err = ErrSyntax;
 	if (Err!=0) return Err;
 
-	// GetAdaptersAddresses \x82\xAA\x83T\x83|\x81[\x83g\x82\xB3\x82\xEA\x82Ă\xA2\x82Ȃ\xA2 OS \x82͂\xB1\x82\xB1\x82\xC5 return
+	// GetAdaptersAddresses がサポートされていない OS はここで return
 	if (!HasGetAdaptersAddresses()) {
 		SetResult(-1);
 		SetIntVal(VarId2, 0);
@@ -2473,7 +2533,7 @@
 		return Err;
 	}
 
-	// \x8E\xA9\x95\xAA\x8E\xA9\x90g\x82̑SIPv6\x83A\x83h\x83\x8C\x83X\x82\xF0\x8E擾\x82\xB7\x82\xE9\x81B
+	// 自分自身の全IPv6アドレスを取得する。
 	arysize = GetStrAryVarSize(VarId);
 	num = 0;
 	result = 1;
@@ -2557,7 +2617,7 @@
 
 	SetStrVal(VarId,Temp2);
 
-	SetResult(result);  // \x90\xAC\x8C\xF7\x89”ۂ\xF0\x90ݒ肷\x82\xE9\x81B
+	SetResult(result);  // 成功可否を設定する。
 	return Err;
 }
 
@@ -2572,30 +2632,30 @@
 	int result = 0;  /* failure */
 
 	Err = 0;
-	GetStrVal(FileNameStr, &Err);   // \x83t\x83@\x83C\x83\x8B\x96\xBC
-	GetStrVal(KeyStr, &Err);  // \x83L\x81[\x96\xBC
+	GetStrVal(FileNameStr, &Err);   // ファイル名
+	GetStrVal(KeyStr, &Err);  // キー名
 	GetStrVar(&VarId, &Err);
-	VarStr = StrVarPtr(VarId);  // \x95ϐ\x94\x82ւ̃|\x83C\x83\x93\x83^
+	VarStr = StrVarPtr(VarId);  // 変数へのポインタ
 	if ((Err==0) && (GetFirstChar()!=0))
 		Err = ErrSyntax;
 	if (Err!=0) return Err;
 
-	// \x95\xB6\x8E\x9A\x97񂪋\xF3\x82̏ꍇ\x82̓G\x83\x89\x81[\x82Ƃ\xB7\x82\xE9\x81B
+	// 文字列が空の場合はエラーとする。
 	if (FileNameStr[0]==0 || 
 	    KeyStr[0]==0 ||
-	    VarStr[0]==0)   // "getpassword"\x93\xAF\x97l\x81A\x8B\xF3\x83p\x83X\x83\x8F\x81[\x83h\x82\xE0\x8B\x96\x89‚\xB5\x82Ȃ\xA2\x81B
+	    VarStr[0]==0)   // "getpassword"同様、空パスワードも許可しない。
 		Err = ErrSyntax;
 	if (Err!=0) return Err;
 
 	GetAbsPath(FileNameStr, sizeof(FileNameStr));
 
-	// \x83p\x83X\x83\x8F\x81[\x83h\x82\xF0\x88Í\x86\x89\xBB\x82\xB7\x82\xE9\x81B
+	// パスワードを暗号化する。
 	Encrypt(VarStr, Temp);
 
 	if (WritePrivateProfileString("Password", KeyStr, Temp, FileNameStr) != 0) 
 		result = 1;  /* success */
 
-	SetResult(result);  // \x90\xAC\x8C\xF7\x89”ۂ\xF0\x90ݒ肷\x82\xE9\x81B
+	SetResult(result);  // 成功可否を設定する。
 	return Err;
 }
 
@@ -2608,13 +2668,13 @@
 	int result = 0; 
 
 	Err = 0;
-	GetStrVal(FileNameStr, &Err);   // \x83t\x83@\x83C\x83\x8B\x96\xBC
-	GetStrVal(KeyStr, &Err);  // \x83L\x81[\x96\xBC
+	GetStrVal(FileNameStr, &Err);   // ファイル名
+	GetStrVal(KeyStr, &Err);  // キー名
 	if ((Err==0) && (GetFirstChar()!=0))
 		Err = ErrSyntax;
 	if (Err!=0) return Err;
 
-	// \x95\xB6\x8E\x9A\x97񂪋\xF3\x82̏ꍇ\x82̓G\x83\x89\x81[\x82Ƃ\xB7\x82\xE9\x81B
+	// 文字列が空の場合はエラーとする。
 	if (FileNameStr[0]==0 || 
 	    KeyStr[0]==0)
 		Err = ErrSyntax;
@@ -2631,7 +2691,7 @@
 		result = 1; 
 	}
 
-	SetResult(result);  // \x90\xAC\x8C\xF7\x89”ۂ\xF0\x90ݒ肷\x82\xE9\x81B
+	SetResult(result);  // 成功可否を設定する。
 	return Err;
 }
 
@@ -2691,7 +2751,7 @@
 		}
 		set_result = TRUE;
 
-		// \x83^\x83C\x83\x80\x83]\x81[\x83\x93\x82̎w\x92肪\x82\xA0\x82\xEA\x82΁Alocaltime()\x82ɉe\x8B\xBF\x82\xB3\x82\xB9\x82\xE9\x81B(2012.5.2 yutaka)
+		// タイムゾーンの指定があれば、localtime()に影響させる。(2012.5.2 yutaka)
 		if (CheckParameterGiven()) {
 			GetStrVal(tzStr, &Err);
 			if (Err!=0) return Err;
@@ -2779,7 +2839,7 @@
 	return Err;
 }
 
-// COM\x83|\x81[\x83g\x82\xA9\x82烌\x83W\x83X\x83^\x92l\x82\xF0\x93ǂށB
+// COMポートからレジスタ値を読む。
 // (2015.1.8 yutaka)
 WORD TTLGetModemStatus()
 {
@@ -2811,9 +2871,9 @@
 }
 
 //
-// Tera Term \x82̃o\x81[\x83W\x83\x87\x83\x93\x8E擾 & \x94\xE4\x8Ar
-// \x83o\x81[\x83W\x83\x87\x83\x93\x94ԍ\x86\x82̓R\x83\x93\x83p\x83C\x83\x8B\x8E\x9E\x82Ɍ\x88\x92肷\x82\xE9\x81B
-// (\x8C\xBB\x8D݂͎\xC0\x8Ds\x83t\x83@\x83C\x83\x8B\x82̃o\x81[\x83W\x83\x87\x83\x93\x8F\xEE\x95\xF1\x82͎Q\x8FƂ\xB5\x82Ȃ\xA2)
+// Tera Term のバージョン取得 & 比較
+// バージョン番号はコンパイル時に決定する。
+// (現在は実行ファイルのバージョン情報は参照しない)
 //
 WORD TTLGetVer()
 {
@@ -3066,7 +3126,7 @@
 	if (Err!=0) return Err;
 
 	Err = ErrSyntax;
-	if (strcmp(Str, "size") == 0) {   // \x83\x8D\x81[\x83e\x81[\x83g\x83T\x83C\x83Y
+	if (strcmp(Str, "size") == 0) {   // ローテートサイズ
 		if (CheckParameterGiven()) {
 			Err = 0;
 			size = 0;
@@ -3093,7 +3153,7 @@
 				_snprintf_s(buf, sizeof(buf), _TRUNCATE, "%s %u", Str, size);
 		}
 
-	} else if (strcmp(Str, "rotate") == 0) {  // \x83\x8D\x81[\x83e\x81[\x83g\x82̐\xA2\x91㐔
+	} else if (strcmp(Str, "rotate") == 0) {  // ローテートの世代数
 		if (CheckParameterGiven()) {
 			Err = 0;
 			num = 0;
@@ -3262,12 +3322,12 @@
 	_splitpath_s(fullpath, drive, sizeof(drive), dir, sizeof(dir), fname, sizeof(fname), ext, sizeof(ext));
 	strncpy_s(dirname, sizeof(dirname), drive, _TRUNCATE);
 	strncat_s(dirname, sizeof(dirname), dir, _TRUNCATE);
-	DeleteSlash(dirname); // \x96\x96\x94\xF6\x82\xCC \ \x82\xF0\x8E\xE6\x82菜\x82\xAD
+	DeleteSlash(dirname); // 末尾の \ を取り除く
 	if (strlen(fname) == 0 && strlen(ext) == 0) {
 		_splitpath_s(dirname, drive, sizeof(drive), dir, sizeof(dir), fname, sizeof(fname), ext, sizeof(ext));
 		strncpy_s(dirname, sizeof(dirname), drive, _TRUNCATE);
 		strncat_s(dirname, sizeof(dirname), dir, _TRUNCATE);
-		DeleteSlash(dirname); // \x96\x96\x94\xF6\x82\xCC \ \x82\xF0\x8E\xE6\x82菜\x82\xAD
+		DeleteSlash(dirname); // 末尾の \ を取り除く
 		strncpy_s(basename, sizeof(basename), fname, _TRUNCATE);
 		strncat_s(basename, sizeof(basename), ext, _TRUNCATE);
 	}
@@ -3410,7 +3470,7 @@
 
 	if (BoxId==IdMsgBox) {
 		ret = OpenMsgDlg(Str1,Str2,FALSE);
-		// \x83\x81\x83b\x83Z\x81[\x83W\x83{\x83b\x83N\x83X\x82\xF0\x83L\x83\x83\x83\x93\x83Z\x83\x8B\x82\xB7\x82\xE9\x82ƁA\x83}\x83N\x83\x8D\x82̏I\x97\xB9\x82Ƃ\xB7\x82\xE9\x81B
+		// メッセージボックスをキャンセルすると、マクロの終了とする。
 		// (2008.8.5 yutaka)
 		if (ret == IDCANCEL) {
 			TTLStatus = IdTTLEnd;
@@ -3417,7 +3477,7 @@
 		}
 	} else if (BoxId==IdYesNoBox) {
 		ret = OpenMsgDlg(Str1,Str2,TRUE);
-		// \x83\x81\x83b\x83Z\x81[\x83W\x83{\x83b\x83N\x83X\x82\xF0\x83L\x83\x83\x83\x93\x83Z\x83\x8B\x82\xB7\x82\xE9\x82ƁA\x83}\x83N\x83\x8D\x82̏I\x97\xB9\x82Ƃ\xB7\x82\xE9\x81B
+		// メッセージボックスをキャンセルすると、マクロの終了とする。
 		// (2008.8.6 yutaka)
 		if (ret == IDCLOSE) {
 			TTLStatus = IdTTLEnd;
@@ -3428,7 +3488,7 @@
 		OpenStatDlg(Str1,Str2);
 
 	} else if (BoxId==IdListBox) {
-		//  \x83\x8A\x83X\x83g\x83{\x83b\x83N\x83X\x82̑I\x91\xF0\x8E\x88\x82\xF0\x8E擾\x82\xB7\x82\xE9\x81B
+		//  リストボックスの選択肢を取得する。
 		GetStrAryVar(&VarId, Err);
 
 		if (CheckParameterGiven()) {
@@ -3459,8 +3519,8 @@
 		}
 
 		// return 
-		//   0\x88ȏ\xE3: \x91I\x91\xF0\x8D\x80\x96\xDA
-		//   -1: \x83L\x83\x83\x83\x93\x83Z\x83\x8B
+		//   0以上: 選択項目
+		//   -1: キャンセル
 		ret = OpenListDlg(Str1, Str2, s, sel);
 
 		for (i = 0 ; i < ary_size ; i++) {
@@ -3474,7 +3534,7 @@
 	return 0;
 }
 
-// \x83\x8A\x83X\x83g\x83{\x83b\x83N\x83X
+// リストボックス
 // (2013.3.13 yutaka)
 WORD TTLListBox()
 {
@@ -3990,8 +4050,8 @@
 }
 
 /*
- * src \x82Ɋ܂܂\xEA\x82\xE9 0x01 \x82\xF0 0x01 0x02 \x82ɒu\x82\xAB\x8A\xB7\x82\xA6\x82\xC4 dst \x82ɃR\x83s\x81[\x82\xB7\x82\xE9\x81B
- * TStrVal \x82ɂ\xCD 0x00 \x82\xAA\x8A܂܂\xEA\x82鎖\x82\xAA\x96\xB3\x82\xA2(\x8FI\x92[\x82Ƌ\xE6\x95ʂł\xAB\x82Ȃ\xA2)\x82̂\xC5 0x00 \x82͍l\x97\xB6\x82\xB7\x82\xE9\x95K\x97v\x82Ȃ\xB5\x81B
+ * src に含まれる 0x01 を 0x01 0x02 に置き換えて dst にコピーする。
+ * TStrVal には 0x00 が含まれる事が無い(終端と区別できない)ので 0x00 は考慮する必要なし。
  */
 static void AddBroadcastString(char *dst, int dstlen, char *src)
 {
@@ -4003,7 +4063,7 @@
 
 	while (*src != 0 && dstlen > 1) {
 		if (*src == 0x01) {
-			// 0x01 \x82\xF0\x8Ai\x94[\x82\xB7\x82\xE9\x82ɂ\xCD 0x01 0x02 \x82\xCC2\x83o\x83C\x83g + NUL \x8FI\x92[\x97p\x82\xCC1\x83o\x83C\x83g\x82\xAA\x95K\x97v
+			// 0x01 を格納するには 0x01 0x02 の2バイト + NUL 終端用の1バイトが必要
 			if (dstlen < 3) {
 				break;
 			}
@@ -4021,13 +4081,13 @@
 }
 
 /*
- * TTLSendBroadcast / TTLSendMulticast \x82̉\xBA\x90\xBF\x82\xAF
+ * TTLSendBroadcast / TTLSendMulticast の下請け
  *
- * \x8Ae\x83p\x83\x89\x83\x81\x81[\x83^\x82\xF0\x98A\x8C\x8B\x82\xB5\x82\xBD\x95\xB6\x8E\x9A\x97\xF1\x82\xF0 buff \x82Ɋi\x94[\x82\xB5\x82ĕԂ\xB7\x81B
- * crlf \x82\xAA TRUE \x82̎\x9E\x82͊e\x83p\x83\x89\x83\x81\x81[\x83^\x82̊Ԃ\xC9 "\n" \x82\xF0\x8B\xB2\x82ށB(\x97v\x8C\x9F\x93\xA2)
+ * 各パラメータを連結した文字列を buff に格納して返す。
+ * crlf が TRUE の時は各パラメータの間に "\n" を挟む。(要検討)
  *
- * \x83p\x83\x89\x83\x81\x81[\x83^\x82\xAA String \x82̏ꍇ\x82͂\xBB\x82̂܂܁AInteger \x82̏ꍇ\x82\xCD ASCII \x83R\x81[\x83h\x82Ƃ݂Ȃ\xB5\x82Ă\xBB\x82̕\xB6\x8E\x9A\x82𑗂\xE9\x81B
- * Tera Term \x91\xA4\x82ł\xCD send \x93\x99\x82Ƌ\xA4\x92ʂ̃\x8B\x81[\x83`\x83\x93\x82\xAA\x8Eg\x82\xED\x82\xEA\x82\xE9\x88ׁADDE \x92ʐM\x82ׂ̈̃G\x83\x93\x83R\x81[\x83h\x82\xF0\x8Ds\x82\xA4\x95K\x97v\x97L\x82\xE8\x81B
+ * パラメータが String の場合はそのまま、Integer の場合は ASCII コードとみなしてその文字を送る。
+ * Tera Term 側では send 等と共通のルーチンが使われる為、DDE 通信の為のエンコードを行う必要有り。
  *   0x00 -> 0x01 0x01
  *   0x01 -> 0x01 0x02
  */
@@ -4078,7 +4138,7 @@
 	return 0;
 }
 
-// sendbroadcast / sendlnbroadcast \x82̓\xF1\x82‚\xA9\x82痘\x97p (crlf\x82̒l\x82œ\xAE\x8D\xEC\x82\xF0\x95ς\xA6\x82\xE9)
+// sendbroadcast / sendlnbroadcast の二つから利用 (crlfの値で動作を変える)
 static WORD TTLSendBroadcast(BOOL crlf)
 {
 	TStrVal buf;
@@ -4107,7 +4167,7 @@
 	return SendCmnd(CmdSetMulticastName, 0);
 }
 
-// sendmulticast / sendlnmulticast \x82̓\xF1\x82‚\xA9\x82痘\x97p (crlf\x82̒l\x82œ\xAE\x8D\xEC\x82\xF0\x95ς\xA6\x82\xE9)
+// sendmulticast / sendlnmulticast の二つから利用 (crlfの値で動作を変える)
 WORD TTLSendMulticast(BOOL crlf)
 {
 	TStrVal buf, Str;
@@ -4116,7 +4176,7 @@
 	if (! Linked)
 		return ErrLinkFirst;
 
-	// \x83}\x83\x8B\x83`\x83L\x83\x83\x83X\x83g\x8E\xAF\x95ʗp\x82̖\xBC\x91O\x82\xF0\x8E擾\x82\xB7\x82\xE9\x81B
+	// マルチキャスト識別用の名前を取得する。
 	Err = 0;
 	GetStrVal(Str,&Err);
 	if (Err!=0) return Err;
@@ -4447,9 +4507,9 @@
 						memset(subFmt, 0, sizeof(subFmt));
 					}
 					else {
-						// \x88\xEA\x82Ž\xE8\x91O\x82܂ł\xF0\x82\xBB\x82̂܂\xDC buf \x82Ɋi\x94[
+						// 一つ手前までをそのまま buf に格納
 						strncat_s(buf, sizeof(buf), subFmt, _TRUNCATE);
-						// \x8Ed\x90؂蒼\x82\xB5
+						// 仕切り直し
 						memset(subFmt, 0, sizeof(subFmt));
 						strncat_s(subFmt, sizeof(subFmt), p, 1);
 					}
@@ -4480,7 +4540,7 @@
 						type = STRING;
 					}
 
-					// "%" \x82\xC6 *p \x82̊Ԃ\xAA\x90\xB3\x82\xB5\x82\xA2\x82\xA9\x83`\x83F\x83b\x83N
+					// "%" と *p の間が正しいかチェック
 					str = (UChar* )subFmt;
 					end   = str + strlen(subFmt);
 					start = str;
@@ -4495,7 +4555,7 @@
 
 					strncat_s(subFmt, sizeof(subFmt), p, 1);
 
-					// width, precision \x82\xAA * \x82\xA9\x82ǂ\xA4\x82\xA9\x83`\x83F\x83b\x83N
+					// width, precision が * かどうかチェック
 					width_asterisk = precision_asterisk = 0;
 					if (region->num_regs != 3) {
 						SetResult(-1);
@@ -4524,7 +4584,7 @@
 					}
 					free(match_str);
 
-					// * \x82ɑΉ\x9E\x82\xB7\x82\xE9\x88\xF8\x90\x94\x82\xF0\x8E擾
+					// * に対応する引数を取得
 					if (width_asterisk) {
 						TmpErr = 0;
 						GetIntVal(&NumWidth, &TmpErr);
@@ -4545,7 +4605,7 @@
 					}
 
 					if (type == STRING || type == DOUBLE) {
-						// \x95\xB6\x8E\x9A\x97\xF1\x82Ƃ\xB5\x82ēǂ߂邩\x83g\x83\x89\x83C
+						// 文字列として読めるかトライ
 						TmpErr = 0;
 						GetStrVal(Str, &TmpErr);
 						if (TmpErr == 0) {
@@ -4585,7 +4645,7 @@
 						}
 					}
 					else {
-						// \x90\x94\x92l\x82Ƃ\xB5\x82ēǂ߂邩\x83g\x83\x89\x83C
+						// 数値として読めるかトライ
 						TmpErr = 0;
 						GetIntVal(&Num, &TmpErr);
 						if (TmpErr == 0) {
@@ -4637,8 +4697,8 @@
 		SetStrVal(VarId, buf);
 	}
 	else {
-		// \x83}\x83b\x83`\x82\xB5\x82\xBD\x8Ds\x82\xF0 inputstr \x82֊i\x94[\x82\xB7\x82\xE9
-		SetInputStr(buf);  // \x82\xB1\x82\xB1\x82Ńo\x83b\x83t\x83@\x82\xAA\x83N\x83\x8A\x83A\x82\xB3\x82\xEA\x82\xE9
+		// マッチした行を inputstr へ格納する
+		SetInputStr(buf);  // ここでバッファがクリアされる
 	}
 	SetResult(0);
 
@@ -4703,7 +4763,7 @@
 
 	if (Err!=0) return Err;
 
-	// C\x8C\xBE\x8C\xEA\x82ł\xCD16\x90i\x82\xCD0x\x82Ŏn\x82܂邪\x81ATTL\x8Ed\x97l\x82ł\xCD $ \x82Ŏn\x82܂邽\x82߁A\x8C\xE3\x8E҂\xE0\x83T\x83|\x81[\x83g\x82\xB7\x82\xE9\x81B
+	// C言語では16進は0xで始まるが、TTL仕様では $ で始まるため、後者もサポートする。
 	if (Str[0] == '$') {
 		memmove_s(Str + 2, sizeof(Str) - 2, Str + 1, strlen(Str));
 		Str[0] = '0';
@@ -4710,8 +4770,8 @@
 		Str[1] = 'x';
 	}
 
-	// '%d'\x82\xA9\x82\xE7'%i'\x82֕ύX\x82ɂ\xE6\x82\xE8\x81A10\x90i\x88ȊO\x82̐\x94\x92l\x82\xF0\x95ϊ\xB7\x82ł\xAB\x82\xE9\x82悤\x82ɂ\xB7\x82\xE9\x81B (2007.5.1 yutaka)
-	// \x89\xBA\x88ʌ݊\xB7\x90\xAB\x82̂\xBD\x82\xDF10\x90i\x82\xC616\x90i\x82݂̂̃T\x83|\x81[\x83g\x82Ƃ\xB7\x82\xE9\x81B(2007.5.2 yutaka)
+	// '%d'から'%i'へ変更により、10進以外の数値を変換できるようにする。 (2007.5.1 yutaka)
+	// 下位互換性のため10進と16進のみのサポートとする。(2007.5.2 yutaka)
 	// 10 : decimal
 	// 0x10, $10: hex
 	if (Str[0] == '0' && tolower(Str[1]) == 'x') {
@@ -4817,10 +4877,10 @@
 }
 
 /*
-  \x8F\x91\x8E\xAE: strmatch <\x95\xB6\x8E\x9A\x97\xF1> <\x90\xB3\x8BK\x95\\x8C\xBB>
-  <\x95\xB6\x8E\x9A\x97\xF1>\x82\xC9<\x90\xB3\x8BK\x95\\x8C\xBB>\x82\xAA\x83}\x83b\x83`\x82\xB7\x82邩\x92\xB2\x82ׂ\xE9\x83R\x83}\x83\x93\x83h(awk\x82\xCCmatch\x8A֐\x94\x91\x8A\x93\x96)\x81B
-  result\x82ɂ́A\x83}\x83b\x83`\x82\xB5\x82\xBD\x88ʒu\x82\xF0\x83Z\x83b\x83g(\x83}\x83b\x83`\x82\xB5\x82Ȃ\xA2\x8Fꍇ\x82\xCD0)\x81B
-  \x83}\x83b\x83`\x82\xB5\x82\xBD\x8Fꍇ\x82́Awaitregex\x82Ɠ\xAF\x97l\x82\xC9matchstr,groupmatchstr1-9\x82\xF0\x83Z\x83b\x83g\x81B
+  書式: strmatch <文字列> <正規表現>
+  <文字列>に<正規表現>がマッチするか調べるコマンド(awkのmatch関数相当)。
+  resultには、マッチした位置をセット(マッチしない場合は0)。
+  マッチした場合は、waitregexと同様にmatchstr,groupmatchstr1-9をセット。
  */
 WORD TTLStrMatch()
 {
@@ -4842,7 +4902,7 @@
 		result = 0;
 	}
 
-	// FindRegexStringOne\x82̒\x86\x82\xC5UnlockVar()\x82\xB3\x82\xEA\x82Ă\xB5\x82܂\xA4\x82̂ŁALockVar()\x82\xB5\x82Ȃ\xA8\x82\xB7\x81B
+	// FindRegexStringOneの中でUnlockVar()されてしまうので、LockVar()しなおす。
 	LockVar();
 
 	SetResult(result);
@@ -4886,11 +4946,11 @@
 	srclen = strlen(str);
 	addlen = strlen(addstr);
 
-	// \x82܂\xB8\x82͑}\x93\xFC\x82\xB3\x82\xEA\x82\xE9\x89ӏ\x8A\x88ȍ~\x82̃f\x81[\x83^\x82\xF0\x81A\x8C\xE3\x82\xEB\x82Ɉړ\xAE\x82\xB7\x82\xE9\x81B
+	// まずは挿入される箇所以降のデータを、後ろに移動する。
 	np = str + (index - 1);
 	memmove_s(np + addlen, MaxStrLen, np, srclen - (index - 1));
 
-	// \x95\xB6\x8E\x9A\x97\xF1\x82\xF0\x91}\x93\xFC\x82\xB7\x82\xE9
+	// 文字列を挿入する
 	memcpy(np, addstr, addlen);
 
 	// null-terminate
@@ -4930,7 +4990,7 @@
 	return Err;
 }
 
-// \x95\xB6\x8E\x9A\x97\xF1 str \x82\xCC index \x95\xB6\x8E\x9A\x96ځi1\x83I\x83\x8A\x83W\x83\x93\x81j\x82\xA9\x82\xE7 len \x95\xB6\x8E\x9A\x8D폜\x82\xB7\x82\xE9
+// 文字列 str の index 文字目(1オリジン)から len 文字削除する
 static void remove_string(char *str, int index, int len)
 {
 	char *np;
@@ -4951,7 +5011,7 @@
 	        ^index(np)
 			     ^np+len 
 				 <-->srclen - len - index
-		    \x81\xAB
+		    ↓
 	   XXXXXXYYY
 	 */
 
@@ -5027,18 +5087,18 @@
 
 	oldlen = strlen(oldstr);
 
-	// strptr\x95\xB6\x8E\x9A\x97\xF1\x82\xCC pos \x95\xB6\x8E\x9A\x96ڈȍ~\x82ɂ\xA8\x82\xA2\x82āAoldstr \x82\xF0\x92T\x82\xB7\x81B
+	// strptr文字列の pos 文字目以降において、oldstr を探す。
 	p = tmpstr + pos;
 	ret = FindRegexStringOne(oldstr, oldlen, p, strlen(p));
-	// FindRegexStringOne\x82̒\x86\x82\xC5UnlockVar()\x82\xB3\x82\xEA\x82Ă\xB5\x82܂\xA4\x82̂ŁALockVar()\x82\xB5\x82Ȃ\xA8\x82\xB7\x81B
+	// FindRegexStringOneの中でUnlockVar()されてしまうので、LockVar()しなおす。
 	LockVar();
 	if (ret == 0) {
-		// \x8C\xA9\x82‚\xA9\x82\xE7\x82Ȃ\xA9\x82\xC1\x82\xBD\x8Fꍇ\x82́A"0"\x82Ŗ߂\xE9\x81B
+		// 見つからなかった場合は、"0"で戻る。
 		result = 0;
 		goto error;
 	}
 	else if (ret < 0) {
-		// \x90\xB3\x82\xB5\x82\xAD\x82Ȃ\xA2\x90\xB3\x8BK\x95\\x8C\xBB\x93\x99\x82ŃG\x83\x89\x81[\x82̏ꍇ\x82\xCD -1 \x82\xF0\x95Ԃ\xB7
+		// 正しくない正規表現等でエラーの場合は -1 を返す
 		result = -1;
 		goto error;
 	}
@@ -5113,34 +5173,34 @@
 	srcptr = StrVarPtr(VarId);
 	srclen = strlen(srcptr);
 
-	// \x8D폜\x82\xB7\x82镶\x8E\x9A\x82̃e\x81[\x83u\x83\x8B\x82\xF0\x8D\xEC\x82\xE9\x81B
+	// 削除する文字のテーブルを作る。
 	memset(table, 0, sizeof(table));
 	for (p = trimchars; *p ; p++) {
 		table[*p] = 1;
 	}
 
-	// \x95\xB6\x8E\x9A\x97\xF1\x82̐擪\x82\xA9\x82猟\x8D\x{142DC2}\xE9
+	// 文字列の先頭から検索する
 	for (i = 0 ; i < srclen ; i++) {
 		if (table[srcptr[i]] == 0) 
 			break;
 	}
-	// \x8D폜\x82\xB3\x82\xEA\x82Ȃ\xA2\x97L\x8C\xF8\x82ȕ\xB6\x8E\x9A\x97\xF1\x82̎n\x82܂\xE8\x81B
-	// \x82\xB7\x82ׂč폜\x91ΏۂƂȂ\xE9\x8Fꍇ\x82́Astart == srclen \x81B
+	// 削除されない有効な文字列の始まり。
+	// すべて削除対象となる場合は、start == srclen 。
 	start = i;  
 
-	// \x95\xB6\x8E\x9A\x97\xF1\x82̖\x96\x94\x{182A42}猟\x8D\x{142DC2}\xE9
+	// 文字列の末尾から検索する
 	for (i = srclen - 1 ; i >= 0 ; i--) {
 		if (table[srcptr[i]] == 0) 
 			break;
 	}
-	// \x8D폜\x82\xB3\x82\xEA\x82Ȃ\xA2\x97L\x8C\xF8\x82ȕ\xB6\x8E\x9A\x97\xF1\x82̏I\x82\xED\x82\xE8\x81B
-	// \x82\xB7\x82ׂč폜\x91ΏۂƂȂ\xE9\x8Fꍇ\x82́Aend == -1 \x81B
+	// 削除されない有効な文字列の終わり。
+	// すべて削除対象となる場合は、end == -1 。
 	end = i;
 
-	// \x96\x96\x94\xF6\x82\xF0\x8D\xED\x82\xE9
+	// 末尾を削る
 	srcptr[end + 1] = '\0';
 
-	// \x8E\x9F\x82ɁA\x90擪\x82\xA9\x82\xE7\x8D\xED\x82\xE9\x81B
+	// 次に、先頭から削る。
 	remove_string(srcptr, 1, start);
 
 	return Err;
@@ -5168,7 +5228,7 @@
 			// TODO array
 #if 0
 			Err = 0;
-			// Parameter \x82\xA9\x82\xE7 array \x82\xF0\x8E󂯎\xE6\x82\xE9
+			// Parameter から array を受け取る
 			if (Err==0) {
 				ary = TRUE;
 			}
@@ -5187,16 +5247,16 @@
 	if (!ary && (maxvar < 1 || maxvar > MAXVARNUM) )
 		return ErrSyntax;
 
-	// \x83f\x83\x8A\x83~\x83^\x82\xCD1\x95\xB6\x8E\x9A\x82݂̂Ƃ\xB7\x82\xE9\x81B
+	// デリミタは1文字のみとする。
 	len = strlen(delimchars);
 	if (len != 1)
 		return ErrSyntax;
 
 	srclen = strlen(src);
-	strcpy_s(buf, MaxStrLen, src);  /* \x94j\x89󂳂\xEA\x82Ă\xE0\x82\xA2\x82\xA2\x82悤\x82ɁA\x83R\x83s\x81[\x83o\x83b\x83t\x83@\x82\xF0\x8Eg\x82\xA4\x81B*/
+	strcpy_s(buf, MaxStrLen, src);  /* 破壊されてもいいように、コピーバッファを使う。*/
 
 #if 0
-	// \x83g\x81[\x83N\x83\x93\x82̐؂\xE8\x8Fo\x82\xB5\x82\xF0\x8Ds\x82\xA4\x81B
+	// トークンの切り出しを行う。
 	memset(tok, 0, sizeof(tok));
 #if 0
 	tok[0] = strtok_s(srcptr, delimchars, &last);
@@ -5206,8 +5266,8 @@
 			break;
 	} 
 #else
-	/* strtok\x82\xF0\x8Eg\x82\xA4\x82ƁA\x98A\x91\xB1\x82\xB5\x82\xBD\x8B\xE6\x90؂肪1\x82‚Ɋۂ߂\xE7\x82\xEA\x82邽\x82߁A\x8E\xA9\x91O\x82Ń|\x83C\x83\x93\x83^\x82\xF0
-	 * \x82\xBD\x82ǂ\xE9\x81B\x82\xBD\x82\xBE\x82\xB5\x81A\x8B\xE6\x90؂蕶\x8E\x9A\x82\xCD1\x82‚݂̂Ƃ\xB7\x82\xE9\x81B
+	/* strtokを使うと、連続した区切りが1つに丸められるため、自前でポインタを
+	 * たどる。ただし、区切り文字は1つのみとする。
 	 */
 	i = 0;
 	for (p = buf; *p == delimchars[0] ; p++) {
@@ -5235,11 +5295,11 @@
 		p = buf;
 		count = 1;
 		tok[count-1] = p;
-		for (i=0; i < srclen && count < maxvar + omit; i++) { // count \x8Fȗ\xAA\x8E\x9E\x82ɂ́A\x92\xB4\x89ߕ\xAA\x82\xF0\x8ÊĂ邽\x82\xDF 1 \x82—]\x95\xAA\x82ɐi\x82߂\xE9
+		for (i=0; i < srclen && count < maxvar + omit; i++) { // count 省略時には、超過分を捨てるため 1 つ余分に進める
 			if (*p == *delimchars) {
 				*p = '\0';
 				count++;
-				if (count <= MAXVARNUM) { // tok \x82̗v\x91f\x90\x94\x82𒴂\xA6\x82đ\xE3\x93\xFC\x82\xB5\x82Ȃ\xA2\x82悤\x82ɂ\xB7\x82\xE9(count \x8Fȗ\xAA\x8E\x9E\x82̂\xBD\x82\xDF)
+				if (count <= MAXVARNUM) { // tok の要素数を超えて代入しないようにする(count 省略時のため)
 					tok[count-1] = p+1;
 				}
 			}
@@ -5249,7 +5309,7 @@
 #endif
 
 //end:
-	// \x8C\x8B\x89ʂ̊i\x94[
+	// 結果の格納
 	for (i = 1 ; i <= count ; i++) {
 		SetGroupMatchStr(i, tok[i-1]);
 	}
@@ -5284,7 +5344,7 @@
 			// TODO array
 #if 0
 			Err = 0;
-			// Parameter \x82\xA9\x82\xE7 array \x82\xF0\x8E󂯎\xE6\x82\xE9
+			// Parameter から array を受け取る
 			if (Err==0) {
 				ary = TRUE;
 			}
@@ -5428,9 +5488,9 @@
 		Err = ErrSyntax;
 	if (Err!=0) return Err;
 
-	// Windows OS\x82\xAA\x8BN\x93\xAE\x82\xB5\x82Ă\xA9\x82\xE7\x82̌o\x89ߎ\x9E\x8Aԁi\x83~\x83\x8A\x95b\x81j\x82\xF0\x8E擾\x82\xB7\x82\xE9\x81B\x82\xBD\x82\xBE\x82\xB5\x81A49\x93\xFA\x82\xF0\x8Co\x89߂\xB7\x82\xE9\x82ƁA0\x82ɖ߂\xE9\x81B
-	// GetTickCount64() API(Vista\x88ȍ~)\x82\xF0\x8Eg\x82\xA4\x82ƁA\x83I\x81[\x83o\x81[\x83t\x83\x8D\x81[\x82\xB5\x82Ȃ\xAD\x82Ȃ邪\x81A\x82\xBB\x82\xE0\x82\xBB\x82\xE0Tera Term\x82ł\xCD
-	// 64bit\x95ϐ\x94\x82\xF0\x83T\x83|\x81[\x83g\x82\xB5\x82Ă\xA2\x82Ȃ\xA2\x82̂ŁA\x88Ӗ\xA1\x82\xAA\x82Ȃ\xA2\x81B
+	// Windows OSが起動してからの経過時間(ミリ秒)を取得する。ただし、49日を経過すると、0に戻る。
+	// GetTickCount64() API(Vista以降)を使うと、オーバーフローしなくなるが、そもそもTera Termでは
+	// 64bit変数をサポートしていないので、意味がない。
 	tick = GetTickCount();
 
 	SetIntVal(VarId, tick);
@@ -6376,7 +6436,7 @@
 							if (StrConst)
 								SetStrVal(VarId,Str);
 							else
-							// StrVarPtr \x82̕Ԃ\xE8\x92l\x82\xAA TStrVal \x82̃|\x83C\x83\x93\x83^\x82ł\xA0\x82邱\x82Ƃ\xF0\x8A\xFA\x91҂\xB5\x82ăT\x83C\x83Y\x82\xF0\x8CŒ\xE8
+							// StrVarPtr の返り値が TStrVal のポインタであることを期待してサイズを固定
 							// (2007.6.23 maya)
 								strncpy_s(StrVarPtr(VarId),MaxStrLen,StrVarPtr((TVarId)Val),_TRUNCATE);
 						break;
@@ -6436,7 +6496,7 @@
 	UnlockVar();
 }
 
-// \x90\xB3\x8BK\x95\\x8C\xBB\x82Ń}\x83b\x83`\x82\xB5\x82\xBD\x95\xB6\x8E\x9A\x97\xF1\x82\xF0\x8BL\x98^\x82\xB7\x82\xE9
+// 正規表現でマッチした文字列を記録する
 // (2005.10.7 yutaka)
 void SetMatchStr(PCHAR Str)
 {
@@ -6448,7 +6508,7 @@
 		SetStrVal(VarId,Str);
 }
 
-// \x90\xB3\x8BK\x95\\x8C\xBB\x82ŃO\x83\x8B\x81[\x83v\x83}\x83b\x83`\x82\xB5\x82\xBD\x95\xB6\x8E\x9A\x97\xF1\x82\xF0\x8BL\x98^\x82\xB7\x82\xE9
+// 正規表現でグループマッチした文字列を記録する
 // (2005.10.15 yutaka)
 void SetGroupMatchStr(int no, PCHAR Str)
 {


Ttssh2-commit メーリングリストの案内
アーカイブの一覧に戻る