svnno****@sourc*****
svnno****@sourc*****
2013年 3月 30日 (土) 01:54:43 JST
Revision: 5183 http://sourceforge.jp/projects/ttssh2/scm/svn/commits/5183 Author: maya Date: 2013-03-30 01:54:42 +0900 (Sat, 30 Mar 2013) Log Message: ----------- getipv4addr, getipv6addr マクロコマンドにIPアドレス数を返す引数を追加 要素数を超えるIPアドレスがあった場合にマクロエラーになるのは望ましくない そのことをマクロから知ることができるようにresultとは別の変数を利用する Modified Paths: -------------- trunk/doc/en/html/macro/command/getipv4addr.html trunk/doc/en/html/macro/command/getipv6addr.html trunk/doc/ja/html/macro/command/getipv4addr.html trunk/doc/ja/html/macro/command/getipv6addr.html trunk/teraterm/ttpmacro/ttl.c -------------- next part -------------- Modified: trunk/doc/en/html/macro/command/getipv4addr.html =================================================================== --- trunk/doc/en/html/macro/command/getipv4addr.html 2013-03-29 16:47:52 UTC (rev 5182) +++ trunk/doc/en/html/macro/command/getipv4addr.html 2013-03-29 16:54:42 UTC (rev 5183) @@ -24,35 +24,49 @@ <h2>Parameters</h2> <dl> - <dt class="macro">Array <string array></dt> + <dt class="macro">String array <string array></dt> <dd>IP addresses are stored in the string array.</dd> + +<-- + <dt class="macro">\x90\xAE\x90\x94\x8C^\x95ϐ\x94 <num></dt> + <dd>IP\x83A\x83h\x83\x8C\x83X\x82̌\x94\x82\xF0\x8Ai\x94[\x82\xB7\x82鐮\x90\x94\x8C^\x95ϐ\x94\x81BIP\x83A\x83h\x83\x8C\x83X\x82\xAA\x91\xB6\x8D݂\xB5\x82Ȃ\xA2\x8Fꍇ\x81A0\x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x82\xE9\x81B</dd> +--> </dl> <h2>Return Value</h2> <dl> <dt class="macro">System variable <result></dt> - <dd>It is set to the IP address number.<br> - If the IP address is nothing, it is set to 0.<br> + <dd> +<!-- + IP\x83A\x83h\x83\x8C\x83X\x82̎擾\x82ɐ\xAC\x8C\x{1C2D42}\xBD\x8Fꍇ\x81A1\x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x82\xE9\x81B<br> + IP\x83A\x83h\x83\x8C\x83X\x82̌\x94\x82\xAA<string array>\x82̗v\x91f\x90\x94\x82\xE6\x82\xE8\x91傫\x82\xA2\x8Fꍇ\x81A0\x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x82\xE9\x81B<br> +--> When the IP address can not retrieve, it is set to -1.</dd> - </dl> <h2>Example</h2> <pre class="macro-example"> -strdim ipaddr 10 +ipaddr_size = 10 +strdim ipaddr ipaddr_size -getipv4addr ipaddr +getipv4addr ipaddr num if result = -1 then - messagebox 'Error' 'IPv4 address' + messagebox 'Error' 'IPv4 address' elseif result = 0 then - messagebox 'Not found' 'IPv4 address' + N = ipaddr_size - 1 + for i 0 N + messagebox ipaddr[i] "IPv4 address" + next + N = num - ipaddr_size + sprintf2 str "And %d address(es)." N + messagebox str "IPv4 address" else - N = result - 1 - for i 0 N - messagebox ipaddr[i] "IPv4 address" - next + N = num - 1 + for i 0 N + messagebox ipaddr[i] "IPv4 address" + next endif </pre> Modified: trunk/doc/en/html/macro/command/getipv6addr.html =================================================================== --- trunk/doc/en/html/macro/command/getipv6addr.html 2013-03-29 16:47:52 UTC (rev 5182) +++ trunk/doc/en/html/macro/command/getipv6addr.html 2013-03-29 16:54:42 UTC (rev 5183) @@ -26,34 +26,49 @@ <dl> <dt class="macro">Array <string array></dt> <dd>IP addresses are stored in the string array.</dd> + +<-- + <dt class="macro">\x90\xAE\x90\x94\x8C^\x95ϐ\x94 <num></dt> + <dd>IP\x83A\x83h\x83\x8C\x83X\x82̌\x94\x82\xF0\x8Ai\x94[\x82\xB7\x82鐮\x90\x94\x8C^\x95ϐ\x94\x81BIP\x83A\x83h\x83\x8C\x83X\x82\xAA\x91\xB6\x8D݂\xB5\x82Ȃ\xA2\x8Fꍇ\x81A0\x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x82\xE9\x81B</dd> +--> </dl> <h2>Return Value</h2> <dl> <dt class="macro">System variable <result></dt> - <dd>It is set to the IP address number.<br> - If the IP address is nothing, it is set to 0.<br> + <dd> +<!-- + IP\x83A\x83h\x83\x8C\x83X\x82̎擾\x82ɐ\xAC\x8C\x{1C2D42}\xBD\x8Fꍇ\x81A1\x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x82\xE9\x81B<br> + IP\x83A\x83h\x83\x8C\x83X\x82̌\x94\x82\xAA<string array>\x82̗v\x91f\x90\x94\x82\xE6\x82\xE8\x91傫\x82\xA2\x8Fꍇ\x81A0\x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x82\xE9\x81B<br> +--> When the IP address can not retrieve, it is set to -1. It is always failed on Windows 2000 or earlier.</dd> - </dl> <h2>Example</h2> <pre class="macro-example"> -strdim ipaddr 10 +ipaddr_size = 10 +strdim ipaddr ipaddr_size -getipv6addr ipaddr +getipv6addr ipaddr num if result = -1 then - messagebox 'Error' 'IPv6 address' + messagebox 'Error' 'IPv6 address' elseif result = 0 then - messagebox 'Not found' 'IPv6 address' + N = ipaddr_size - 1 + for i 0 N + messagebox ipaddr[i] "IPv6 address" + next + N = num - ipaddr_size + sprintf2 str "And %d address(es)." N + messagebox str "IPv6 address" else - N = result - 1 - for i 0 N - messagebox ipaddr[i] "IPv6 address" - next + N = num - 1 + for i 0 N + messagebox ipaddr[i] "IPv6 address" + next endif + </pre> <h2>See also</h2> Modified: trunk/doc/ja/html/macro/command/getipv4addr.html =================================================================== --- trunk/doc/ja/html/macro/command/getipv4addr.html 2013-03-29 16:47:52 UTC (rev 5182) +++ trunk/doc/ja/html/macro/command/getipv4addr.html 2013-03-29 16:54:42 UTC (rev 5183) @@ -18,41 +18,50 @@ </p> <pre class="macro-syntax"> -getipv4addr <string array> +getipv4addr <string array> <num> </pre> <h2>\x83p\x83\x89\x83\x81\x81[\x83^</h2> <dl> - <dt class="macro">\x94z\x97\xF1 <string array></dt> + <dt class="macro">\x95\xB6\x8E\x9A\x97\xF1\x94z\x97\xF1 <string array></dt> <dd>IP\x83A\x83h\x83\x8C\x83X\x82\xF0\x8Ai\x94[\x82\xB7\x82镶\x8E\x9A\x8C^\x94z\x97\xF1\x81B</dd> + + <dt class="macro">\x90\xAE\x90\x94\x8C^\x95ϐ\x94 <num></dt> + <dd>IP\x83A\x83h\x83\x8C\x83X\x82̌\x94\x82\xF0\x8Ai\x94[\x82\xB7\x82鐮\x90\x94\x8C^\x95ϐ\x94\x81BIP\x83A\x83h\x83\x8C\x83X\x82\xAA\x91\xB6\x8D݂\xB5\x82Ȃ\xA2\x8Fꍇ\x81A0\x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x82\xE9\x81B</dd> </dl> <h2>\x95Ԃ\xE8\x92l</h2> <dl> <dt class="macro">\x83V\x83X\x83e\x83\x80\x95ϐ\x94 <result></dt> - <dd>IP\x83A\x83h\x83\x8C\x83X\x82̌\x94\x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x82\xE9\x81B<br> - IP\x83A\x83h\x83\x8C\x83X\x82\xAA\x91\xB6\x8D݂\xB5\x82Ȃ\xA2\x8Fꍇ\x81A0\x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x82\xE9\x81B<br> + <dd>IP\x83A\x83h\x83\x8C\x83X\x82̎擾\x82ɐ\xAC\x8C\x{1C2D42}\xBD\x8Fꍇ\x81A1\x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x82\xE9\x81B<br> + IP\x83A\x83h\x83\x8C\x83X\x82̌\x94\x82\xAA<string array>\x82̗v\x91f\x90\x94\x82\xE6\x82\xE8\x91傫\x82\xA2\x8Fꍇ\x81A0\x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x82\xE9\x81B<br> IP\x83A\x83h\x83\x8C\x83X\x82̎擾\x82Ɏ\xB8\x94s\x82\xB5\x82\xBD\x8Fꍇ\x81A-1\x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x82\xE9\x81B</dd> - </dl> <h2>\x97\xE1</h2> <pre class="macro-example"> -strdim ipaddr 10 +ipaddr_size = 10 +strdim ipaddr ipaddr_size -getipv4addr ipaddr +getipv4addr ipaddr num if result = -1 then - messagebox 'Error' 'IPv4 address' + messagebox 'Error' 'IPv4 address' elseif result = 0 then - messagebox 'Not found' 'IPv4 address' + N = ipaddr_size - 1 + for i 0 N + messagebox ipaddr[i] "IPv4 address" + next + N = num - ipaddr_size + sprintf2 str "And %d address(es)." N + messagebox str "IPv4 address" else - N = result - 1 - for i 0 N - messagebox ipaddr[i] "IPv4 address" - next + N = num - 1 + for i 0 N + messagebox ipaddr[i] "IPv4 address" + next endif </pre> Modified: trunk/doc/ja/html/macro/command/getipv6addr.html =================================================================== --- trunk/doc/ja/html/macro/command/getipv6addr.html 2013-03-29 16:47:52 UTC (rev 5182) +++ trunk/doc/ja/html/macro/command/getipv6addr.html 2013-03-29 16:54:42 UTC (rev 5183) @@ -26,34 +26,44 @@ <dl> <dt class="macro">\x94z\x97\xF1 <string array></dt> <dd>IP\x83A\x83h\x83\x8C\x83X\x82\xF0\x8Ai\x94[\x82\xB7\x82镶\x8E\x9A\x8C^\x94z\x97\xF1\x81B</dd> + + <dt class="macro">\x90\xAE\x90\x94\x8C^\x95ϐ\x94 <num></dt> + <dd>IP\x83A\x83h\x83\x8C\x83X\x82̌\x94\x82\xF0\x8Ai\x94[\x82\xB7\x82鐮\x90\x94\x8C^\x95ϐ\x94\x81BIP\x83A\x83h\x83\x8C\x83X\x82\xAA\x91\xB6\x8D݂\xB5\x82Ȃ\xA2\x8Fꍇ\x81A0\x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x82\xE9\x81B</dd> </dl> <h2>\x95Ԃ\xE8\x92l</h2> <dl> <dt class="macro">\x83V\x83X\x83e\x83\x80\x95ϐ\x94 <result></dt> - <dd>IP\x83A\x83h\x83\x8C\x83X\x82̌\x94\x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x82\xE9\x81B<br> - IP\x83A\x83h\x83\x8C\x83X\x82\xAA\x91\xB6\x8D݂\xB5\x82Ȃ\xA2\x8Fꍇ\x81A0\x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x82\xE9\x81B + <dd>IP\x83A\x83h\x83\x8C\x83X\x82̎擾\x82ɐ\xAC\x8C\x{1C2D42}\xBD\x8Fꍇ\x81A1\x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x82\xE9\x81B<br> + IP\x83A\x83h\x83\x8C\x83X\x82̌\x94\x82\xAA<string array>\x82̗v\x91f\x90\x94\x82\xE6\x82\xE8\x91傫\x82\xA2\x8Fꍇ\x81A0\x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x82\xE9\x81B<br> IP\x83A\x83h\x83\x8C\x83X\x82̎擾\x82Ɏ\xB8\x94s\x82\xB5\x82\xBD\x8Fꍇ\x81A-1\x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x82\xE9\x81BWindows 2000 \x88ȑO\x82ł͏\xED\x82Ɏ\xB8\x94s\x82\xB7\x82\xE9\x81B</dd> - </dl> <h2>\x97\xE1</h2> <pre class="macro-example"> -strdim ipaddr 10 +ipaddr_size = 10 +strdim ipaddr ipaddr_size -getipv6addr ipaddr +getipv6addr ipaddr num if result = -1 then - messagebox 'Error' 'IPv6 address' + messagebox 'Error' 'IPv6 address' elseif result = 0 then - messagebox 'Not found' 'IPv6 address' + N = ipaddr_size - 1 + for i 0 N + messagebox ipaddr[i] "IPv6 address" + next + N = num - ipaddr_size + sprintf2 str "And %d address(es)." N + messagebox str "IPv6 address" else - N = result - 1 - for i 0 N - messagebox ipaddr[i] "IPv6 address" - next + N = num - 1 + for i 0 N + messagebox ipaddr[i] "IPv6 address" + next endif + </pre> <h2>\x8EQ\x8F\xC6</h2> Modified: trunk/teraterm/ttpmacro/ttl.c =================================================================== --- trunk/teraterm/ttpmacro/ttl.c 2013-03-29 16:47:52 UTC (rev 5182) +++ trunk/teraterm/ttpmacro/ttl.c 2013-03-29 16:54:42 UTC (rev 5183) @@ -2256,23 +2256,23 @@ #define MAX_IPADDR 30 /* strdim ipaddr 10 - getipv4addr ipaddr - result = N + getipv4addr ipaddr num */ WORD TTLGetIPv4Addr() { WORD Err; - TVarId VarId, id; + TVarId VarId, VarId2, id; WSADATA ws; INTERFACE_INFO info[MAX_IPADDR]; SOCKET sock; DWORD socknum; - int num; + int num, result, arysize; int i, n; IN_ADDR addr; Err = 0; GetStrAryVar(&VarId,&Err); + GetIntVar(&VarId2, &Err); if ((Err==0) && (GetFirstChar()!=0)) Err = ErrSyntax; if (Err!=0) return Err; @@ -2280,9 +2280,12 @@ // \x8E\xA9\x95\xAA\x8E\xA9\x90g\x82̑SIPv4\x83A\x83h\x83\x8C\x83X\x82\xF0\x8E擾\x82\xB7\x82\xE9\x81B if (WSAStartup(MAKEWORD(2,2), &ws) != 0) { SetResult(-1); + SetIntVal(VarId2, 0); return Err; } + arysize = GetStrAryVarSize(VarId); num = 0; + result = 1; sock = WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, 0, 0); if (WSAIoctl(sock, SIO_GET_INTERFACE_LIST, NULL, 0, info, sizeof(info), &socknum, NULL, NULL) != SOCKET_ERROR) { n = socknum / sizeof(info[0]); @@ -2293,19 +2296,21 @@ continue; addr = info[i].iiAddress.AddressIn.sin_addr; - id = GetStrVarFromArray(VarId, num, &Err); - if (Err == 0) { + if (num < arysize) { + id = GetStrVarFromArray(VarId, num, &Err); SetStrVal(id, inet_ntoa(addr)); - num++; - } else { - break; } + else { + result = 0; + } + num++; } } closesocket(sock); WSACleanup(); - SetResult(num); + SetResult(result); + SetIntVal(VarId2, num); return Err; } @@ -2338,8 +2343,8 @@ WORD TTLGetIPv6Addr() { WORD Err; - TVarId VarId, id; - int num; + TVarId VarId, VarId2, id; + int num, result, arysize; DWORD ret; IP_ADAPTER_ADDRESSES addr[256];/* XXX */ ULONG len = sizeof(addr); @@ -2349,22 +2354,26 @@ Err = 0; GetStrAryVar(&VarId,&Err); + GetIntVar(&VarId2, &Err); if ((Err==0) && (GetFirstChar()!=0)) Err = ErrSyntax; if (Err!=0) return Err; // \x8E\xA9\x95\xAA\x8E\xA9\x90g\x82̑SIPv6\x83A\x83h\x83\x8C\x83X\x82\xF0\x8E擾\x82\xB7\x82\xE9\x81B if ((h = LoadLibrary("iphlpapi.dll")) == NULL) { - int err = GetLastError(); SetResult(-1); + SetIntVal(VarId2, 0); return Err; } if ((pfunc = (pGetAdaptersAddresses)GetProcAddress(h, "GetAdaptersAddresses")) == NULL) { FreeLibrary(h); SetResult(-1); + SetIntVal(VarId2, 0); return Err; } + arysize = GetStrAryVarSize(VarId); num = 0; + result = 1; ret = pfunc(AF_INET6, 0, NULL, addr, &len); if (ret == ERROR_SUCCESS) { IP_ADAPTER_ADDRESSES *padap = &addr[0]; @@ -2385,17 +2394,21 @@ sa = (struct sockaddr_in6*)addr.lpSockaddr; myInetNtop(AF_INET6, (char*)&sa->sin6_addr, ipv6str, sizeof(ipv6str)); - id = GetStrVarFromArray(VarId, num, &Err); - if (Err == 0) { + if (num < arysize) { + id = GetStrVarFromArray(VarId, num, &Err); SetStrVal(id, ipv6str); - num++; } + else { + result = 0; + } + num++; } while ((uni = uni->Next)); } while ((padap = padap->Next)); } - SetResult(num); + SetResult(result); + SetIntVal(VarId2, num); FreeLibrary(h); return Err;